{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "gCMycQ_2U8SA" }, "source": [ "
\n", " \n", "
 
\n", "
\n", " OpenMMLab website\n", " \n", " \n", " HOT\n", " \n", " \n", "     \n", " OpenMMLab platform\n", " \n", " \n", " TRY IT OUT\n", " \n", " \n", "
\n", "
 
\n", "\n", "\"Open\n", "\n", "[![PyPI](https://img.shields.io/pypi/v/mmdet)](https://pypi.org/project/mmdet)\n", "[![docs](https://img.shields.io/badge/docs-latest-blue)](https://mmdetection.readthedocs.io/en/latest/)\n", "[![badge](https://github.com/open-mmlab/mmdetection/workflows/build/badge.svg)](https://github.com/open-mmlab/mmdetection/actions)\n", "[![codecov](https://codecov.io/gh/open-mmlab/mmdetection/branch/master/graph/badge.svg)](https://codecov.io/gh/open-mmlab/mmdetection)\n", "[![license](https://img.shields.io/github/license/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/blob/master/LICENSE)\n", "[![open issues](https://isitmaintained.com/badge/open/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/issues)\n", "[![issue resolution](https://isitmaintained.com/badge/resolution/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/issues)\n", "\n", "[πŸ“˜Documentation](https://mmdetection.readthedocs.io/en/3.x/) |\n", "[πŸ› οΈInstallation](https://mmdetection.readthedocs.io/en/3.x/get_started.html) |\n", "[πŸ‘€Model Zoo](https://mmdetection.readthedocs.io/en/3.x/model_zoo.html) |\n", "[πŸ†•Update News](https://mmdetection.readthedocs.io/en/3.x/notes/changelog.html) |\n", "[πŸš€Ongoing Projects](https://github.com/open-mmlab/mmdetection/projects) |\n", "[πŸ€”Reporting Issues](https://github.com/open-mmlab/mmdetection/issues/new/choose)\n", "\n", "
\n", "\n", "
\n", " \n", " \"\"\n", " \"\"\n", " \n", " \"\"\n", " \"\"\n", " \n", " \"\"\n", " \"\"\n", " \n", " \"\"\n", " \"\"\n", " \n", " \"\"\n", " \"\"\n", " \n", " \"\"\n", "
" ] }, { "cell_type": "markdown", "metadata": { "id": "aGYwt_UjIrqp" }, "source": [ "# Object Detection\n", "\n", "In this tutorial, you will learn:\n", "- the basic structure of RTMDet.\n", "- to perform inference with a MMDetection detector.\n", "- to train a new detector with a new dataset.\n", "\n", "Let's start!\n", "\n", "```{note}\n", "The commands in this tutorial are mainly for Colab.\n", "You can click the button above, `Open in Colab`, to run this notebook in Colab.\n", "```" ] }, { "cell_type": "markdown", "metadata": { "id": "tJxJHruNLb7Y" }, "source": [ "## Install MMDetection" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Wi4LPmsR66sy", "outputId": "13704ca1-3e1f-4bfc-8638-86458b1effb1" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "nvcc: NVIDIA (R) Cuda compiler driver\n", "Copyright (c) 2005-2022 NVIDIA Corporation\n", "Built on Wed_Sep_21_10:33:58_PDT_2022\n", "Cuda compilation tools, release 11.8, V11.8.89\n", "Build cuda_11.8.r11.8/compiler.31833905_0\n", "gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0\n", "Copyright (C) 2019 Free Software Foundation, Inc.\n", "This is free software; see the source for copying conditions. There is NO\n", "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", "\n" ] } ], "source": [ "# Check nvcc version\n", "!nvcc -V\n", "# Check GCC version\n", "!gcc --version" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "gkGnB9WyHSXB", "outputId": "781c6870-be3d-4162-cae1-017ebf0c6043" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Collecting openmim\n", " Downloading openmim-0.3.7-py2.py3-none-any.whl (51 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m51.3/51.3 kB\u001b[0m \u001b[31m536.0 kB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: requests in /usr/local/lib/python3.9/dist-packages (from openmim) (2.27.1)\n", "Collecting model-index\n", " Downloading model_index-0.1.11-py3-none-any.whl (34 kB)\n", "Requirement already satisfied: rich in /usr/local/lib/python3.9/dist-packages (from openmim) (13.3.3)\n", "Requirement already satisfied: tabulate in /usr/local/lib/python3.9/dist-packages (from openmim) (0.8.10)\n", "Requirement already satisfied: pandas in /usr/local/lib/python3.9/dist-packages (from openmim) (1.5.3)\n", "Requirement already satisfied: Click in /usr/local/lib/python3.9/dist-packages (from openmim) (8.1.3)\n", "Collecting colorama\n", " Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n", "Requirement already satisfied: pip>=19.3 in /usr/local/lib/python3.9/dist-packages (from openmim) (23.0.1)\n", "Collecting ordered-set\n", " Downloading ordered_set-4.1.0-py3-none-any.whl (7.6 kB)\n", "Requirement already satisfied: markdown in /usr/local/lib/python3.9/dist-packages (from model-index->openmim) (3.4.3)\n", "Requirement already satisfied: pyyaml in /usr/local/lib/python3.9/dist-packages (from model-index->openmim) (6.0)\n", "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.9/dist-packages (from pandas->openmim) (2022.7.1)\n", "Requirement already satisfied: numpy>=1.20.3 in /usr/local/lib/python3.9/dist-packages (from pandas->openmim) (1.22.4)\n", "Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.9/dist-packages (from pandas->openmim) (2.8.2)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.9/dist-packages (from requests->openmim) (2022.12.7)\n", "Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.9/dist-packages (from requests->openmim) (2.0.12)\n", "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.9/dist-packages (from requests->openmim) (1.26.15)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.9/dist-packages (from requests->openmim) (3.4)\n", "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.9/dist-packages (from rich->openmim) (2.14.0)\n", "Requirement already satisfied: markdown-it-py<3.0.0,>=2.2.0 in /usr/local/lib/python3.9/dist-packages (from rich->openmim) (2.2.0)\n", "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.9/dist-packages (from markdown-it-py<3.0.0,>=2.2.0->rich->openmim) (0.1.2)\n", "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.9/dist-packages (from python-dateutil>=2.8.1->pandas->openmim) (1.16.0)\n", "Requirement already satisfied: importlib-metadata>=4.4 in /usr/local/lib/python3.9/dist-packages (from markdown->model-index->openmim) (6.3.0)\n", "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.9/dist-packages (from importlib-metadata>=4.4->markdown->model-index->openmim) (3.15.0)\n", "Installing collected packages: ordered-set, colorama, model-index, openmim\n", "Successfully installed colorama-0.4.6 model-index-0.1.11 openmim-0.3.7 ordered-set-4.1.0\n", "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n", " warnings.warn(\n", "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Looking in links: https://download.openmmlab.com/mmcv/dist/cu118/torch2.0.0/index.html\n", "Collecting mmengine>=0.7.0\n", " Downloading mmengine-0.7.2-py3-none-any.whl (366 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m366.9/366.9 kB\u001b[0m \u001b[31m26.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: pyyaml in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.7.0) (6.0)\n", "Requirement already satisfied: rich in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.7.0) (13.3.3)\n", "Requirement already satisfied: opencv-python>=3 in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.7.0) (4.7.0.72)\n", "Collecting addict\n", " Downloading addict-2.4.0-py3-none-any.whl (3.8 kB)\n", "Requirement already satisfied: matplotlib in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.7.0) (3.7.1)\n", "Collecting yapf\n", " Downloading yapf-0.32.0-py2.py3-none-any.whl (190 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m190.2/190.2 kB\u001b[0m \u001b[31m25.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.7.0) (1.22.4)\n", "Requirement already satisfied: termcolor in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.7.0) (2.2.0)\n", "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (3.0.9)\n", "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (4.39.3)\n", "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (1.0.7)\n", "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (8.4.0)\n", "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (0.11.0)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (1.4.4)\n", "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (23.0)\n", "Requirement already satisfied: importlib-resources>=3.2.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (5.12.0)\n", "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (2.8.2)\n", "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.9/dist-packages (from rich->mmengine>=0.7.0) (2.14.0)\n", "Requirement already satisfied: markdown-it-py<3.0.0,>=2.2.0 in /usr/local/lib/python3.9/dist-packages (from rich->mmengine>=0.7.0) (2.2.0)\n", "Requirement already satisfied: zipp>=3.1.0 in /usr/local/lib/python3.9/dist-packages (from importlib-resources>=3.2.0->matplotlib->mmengine>=0.7.0) (3.15.0)\n", "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.9/dist-packages (from markdown-it-py<3.0.0,>=2.2.0->rich->mmengine>=0.7.0) (0.1.2)\n", "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.9/dist-packages (from python-dateutil>=2.7->matplotlib->mmengine>=0.7.0) (1.16.0)\n", "Installing collected packages: yapf, addict, mmengine\n", "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n", " warnings.warn(\n", "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n", " warnings.warn(\n", "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n", " warnings.warn(\n", "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n", " warnings.warn(\n", "Successfully installed addict-2.4.0 mmengine-0.7.2 yapf-0.32.0\n", "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n", " warnings.warn(\n", "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Looking in links: https://download.openmmlab.com/mmcv/dist/cu118/torch2.0.0/index.html\n", "Collecting mmcv>=2.0.0rc4\n", " Downloading https://download.openmmlab.com/mmcv/dist/cu118/torch2.0.0/mmcv-2.0.0-cp39-cp39-manylinux1_x86_64.whl (74.4 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m74.4/74.4 MB\u001b[0m \u001b[31m12.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: mmengine>=0.2.0 in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (0.7.2)\n", "Requirement already satisfied: Pillow in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (8.4.0)\n", "Requirement already satisfied: addict in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (2.4.0)\n", "Requirement already satisfied: pyyaml in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (6.0)\n", "Requirement already satisfied: numpy in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (1.22.4)\n", "Requirement already satisfied: packaging in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (23.0)\n", "Requirement already satisfied: yapf in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (0.32.0)\n", "Requirement already satisfied: opencv-python>=3 in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (4.7.0.72)\n", "Requirement already satisfied: termcolor in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.2.0->mmcv>=2.0.0rc4) (2.2.0)\n", "Requirement already satisfied: matplotlib in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.2.0->mmcv>=2.0.0rc4) (3.7.1)\n", "Requirement already satisfied: rich in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.2.0->mmcv>=2.0.0rc4) (13.3.3)\n", "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (3.0.9)\n", "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (1.0.7)\n", "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (4.39.3)\n", "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (0.11.0)\n", "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (2.8.2)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (1.4.4)\n", "Requirement already satisfied: importlib-resources>=3.2.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (5.12.0)\n", "Requirement already satisfied: markdown-it-py<3.0.0,>=2.2.0 in /usr/local/lib/python3.9/dist-packages (from rich->mmengine>=0.2.0->mmcv>=2.0.0rc4) (2.2.0)\n", "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.9/dist-packages (from rich->mmengine>=0.2.0->mmcv>=2.0.0rc4) (2.14.0)\n", "Requirement already satisfied: zipp>=3.1.0 in /usr/local/lib/python3.9/dist-packages (from importlib-resources>=3.2.0->matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (3.15.0)\n", "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.9/dist-packages (from markdown-it-py<3.0.0,>=2.2.0->rich->mmengine>=0.2.0->mmcv>=2.0.0rc4) (0.1.2)\n", "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.9/dist-packages (from python-dateutil>=2.7->matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (1.16.0)\n", "Installing collected packages: mmcv\n", "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n", " warnings.warn(\n", "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n", " warnings.warn(\n", "Successfully installed mmcv-2.0.0\n", "Cloning into 'mmdetection'...\n", "remote: Enumerating objects: 35338, done.\u001b[K\n", "remote: Counting objects: 100% (31/31), done.\u001b[K\n", "remote: Compressing objects: 100% (31/31), done.\u001b[K\n", "remote: Total 35338 (delta 2), reused 8 (delta 0), pack-reused 35307\u001b[K\n", "Receiving objects: 100% (35338/35338), 47.30 MiB | 16.88 MiB/s, done.\n", "Resolving deltas: 100% (24919/24919), done.\n", "/content/mmdetection\n", "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", "Obtaining file:///content/mmdetection\n", " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", "Requirement already satisfied: matplotlib in /usr/local/lib/python3.9/dist-packages (from mmdet==3.0.0) (3.7.1)\n", "Requirement already satisfied: numpy in /usr/local/lib/python3.9/dist-packages (from mmdet==3.0.0) (1.22.4)\n", "Requirement already satisfied: pycocotools in /usr/local/lib/python3.9/dist-packages (from mmdet==3.0.0) (2.0.6)\n", "Requirement already satisfied: scipy in /usr/local/lib/python3.9/dist-packages (from mmdet==3.0.0) (1.10.1)\n", "Requirement already satisfied: shapely in /usr/local/lib/python3.9/dist-packages (from mmdet==3.0.0) (2.0.1)\n", "Requirement already satisfied: six in /usr/local/lib/python3.9/dist-packages (from mmdet==3.0.0) (1.16.0)\n", "Collecting terminaltables\n", " Downloading terminaltables-3.1.10-py2.py3-none-any.whl (15 kB)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (1.4.4)\n", "Requirement already satisfied: importlib-resources>=3.2.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (5.12.0)\n", "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (3.0.9)\n", "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (1.0.7)\n", "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (0.11.0)\n", "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (2.8.2)\n", "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (8.4.0)\n", "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (23.0)\n", "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (4.39.3)\n", "Requirement already satisfied: zipp>=3.1.0 in /usr/local/lib/python3.9/dist-packages (from importlib-resources>=3.2.0->matplotlib->mmdet==3.0.0) (3.15.0)\n", "Installing collected packages: terminaltables, mmdet\n", " Running setup.py develop for mmdet\n", "Successfully installed mmdet-3.0.0 terminaltables-3.1.10\n" ] } ], "source": [ "# install dependencies: (use cu111 because colab has CUDA 11.1)\n", "%pip install -U openmim\n", "!mim install \"mmengine>=0.7.0\"\n", "!mim install \"mmcv>=2.0.0rc4\"\n", "\n", "# Install mmdetection\n", "!rm -rf mmdetection\n", "!git clone https://github.com/open-mmlab/mmdetection.git\n", "%cd mmdetection\n", "\n", "%pip install -e ." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "_YeUiqAoCaoV", "outputId": "98b02135-08f8-4142-9b59-80056f29192d" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "sys.platform: linux\n", "Python: 3.9.16 (main, Dec 7 2022, 01:11:51) [GCC 9.4.0]\n", "CUDA available: True\n", "numpy_random_seed: 2147483648\n", "GPU 0: Tesla T4\n", "CUDA_HOME: /usr/local/cuda\n", "NVCC: Cuda compilation tools, release 11.8, V11.8.89\n", "GCC: x86_64-linux-gnu-gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0\n", "PyTorch: 2.0.0+cu118\n", "PyTorch compiling details: PyTorch built with:\n", " - GCC 9.3\n", " - C++ Version: 201703\n", " - Intel(R) oneAPI Math Kernel Library Version 2022.2-Product Build 20220804 for Intel(R) 64 architecture applications\n", " - Intel(R) MKL-DNN v2.7.3 (Git Hash 6dbeffbae1f23cbbeae17adb7b5b13f1f37c080e)\n", " - OpenMP 201511 (a.k.a. OpenMP 4.5)\n", " - LAPACK is enabled (usually provided by MKL)\n", " - NNPACK is enabled\n", " - CPU capability usage: AVX2\n", " - CUDA Runtime 11.8\n", " - NVCC architecture flags: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86;-gencode;arch=compute_90,code=sm_90\n", " - CuDNN 8.7\n", " - Magma 2.6.1\n", " - Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, CUDA_VERSION=11.8, CUDNN_VERSION=8.7.0, CXX_COMPILER=/opt/rh/devtoolset-9/root/usr/bin/c++, CXX_FLAGS= -D_GLIBCXX_USE_CXX11_ABI=0 -fabi-version=11 -Wno-deprecated -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -DNDEBUG -DUSE_KINETO -DLIBKINETO_NOROCTRACER -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE -O2 -fPIC -Wall -Wextra -Werror=return-type -Werror=non-virtual-dtor -Werror=bool-operation -Wnarrowing -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wunused-local-typedefs -Wno-unused-parameter -Wno-unused-function -Wno-unused-result -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Werror=cast-function-type -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, PERF_WITH_AVX512=1, TORCH_DISABLE_GPU_ASSERTS=ON, TORCH_VERSION=2.0.0, USE_CUDA=ON, USE_CUDNN=ON, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=1, USE_NNPACK=ON, USE_OPENMP=ON, USE_ROCM=OFF, \n", "\n", "TorchVision: 0.15.1+cu118\n", "OpenCV: 4.7.0\n", "MMEngine: 0.7.2\n", "MMDetection: 3.0.0+ecac3a7\n" ] } ], "source": [ "from mmengine.utils import get_git_hash\n", "from mmengine.utils.dl_utils import collect_env as collect_base_env\n", "\n", "import mmdet\n", "\n", "\n", "def collect_env():\n", " \"\"\"Collect the information of the running environments.\"\"\"\n", " env_info = collect_base_env()\n", " env_info['MMDetection'] = f'{mmdet.__version__}+{get_git_hash()[:7]}'\n", " return env_info\n", "\n", "\n", "if __name__ == '__main__':\n", " for name, val in collect_env().items():\n", " print(f'{name}: {val}')" ] }, { "cell_type": "markdown", "metadata": { "id": "gi9zw03oM4CH" }, "source": [ "## Perform Inference with An MMDet detector\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "s99mDGBG1S1z" }, "source": [ "### An efficient Real-Time one-stage detector\n", "\n", "In this tutorial, we use RTMDet, an efficient Real-Time one-stage detector as an example.\n", "\n", "The high-level architecture of RTMDet is shown in the following picture. More details can be found in the [paper](https://arxiv.org/abs/2212.07784).\n", "\n", "![RTMDet](https://user-images.githubusercontent.com/27466624/225922103-404064c1-3cb0-4ab5-9388-79f9517dcdb0.jpg)\n", "\n", "To obtain a more efficient model architecture, MMDetection explore an architecture that has compatible capacities in the backbone and neck, constructed by a basic building block that consists of large-kernel depth-wise convolutions. MMDetection further introduce soft labels when calculating matching costs in the dynamic label assignment to improve accuracy. Together with better training techniques, the resulting object detector, named RTMDet, achieves 52.8% AP on COCO with 300+ FPS on an NVIDIA 3090 GPU, outperforming the current mainstream industrial detectors. RTMDet achieves the best parameter-accuracy trade-off with tiny/small/medium/large/extra-large model sizes for various application scenarios, and obtains new state-of-the-art performance on real-time instance segmentation and rotated object detection. We hope the experimental results can provide new insights into designing versatile real-time object detectors for many object recognition tasks.\n", "\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "j4doHX4exvS1", "outputId": "9eb9d460-7e3f-4bbc-f9e6-5823773375d3" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "processing rtmdet_tiny_8xb32-300e_coco...\n", "\u001b[2Kdownloading \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m54.9/54.9 MiB\u001b[0m \u001b[31m54.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25h\u001b[32mSuccessfully downloaded rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth to /content/mmdetection/checkpoints\u001b[0m\n", "\u001b[32mSuccessfully dumped rtmdet_tiny_8xb32-300e_coco.py to /content/mmdetection/checkpoints\u001b[0m\n" ] } ], "source": [ "# We download the pre-trained checkpoints for inference and finetuning.\n", "!mkdir ./checkpoints\n", "!mim download mmdet --config rtmdet_tiny_8xb32-300e_coco --dest ./checkpoints" ] }, { "cell_type": "markdown", "metadata": { "id": "fLgFRMtP91ue" }, "source": [ "### Inference the detector\n", "\n", "Since the model is successfully created and loaded, let's see how good it is. We use the high-level API `DetInferencer` implemented in the MMDetection. This API is created to ease the inference process. The details of the codes can be found [here](https://github.com/open-mmlab/mmdetection/blob/dev-3.x/mmdet/apis/det_inferencer.py)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 244, "referenced_widgets": [ "b1188048a1f04c2fa77c0d3829da39bd", "534561e3c4804bae96a30d44493d701d" ] }, "id": "Wi6DRpsQPEmV", "outputId": "0b0a14bc-fd10-4ec4-a585-e1ddefc33973" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Loads checkpoint by local backend from path: ./checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth\n", "The model and loaded state dict do not match exactly\n", "\n", "unexpected key in source state_dict: data_preprocessor.mean, data_preprocessor.std\n", "\n", "04/17 10:28:19 - mmengine - WARNING - Failed to search registry with scope \"mmdet\" in the \"function\" registry tree. As a workaround, the current \"function\" registry in \"mmengine\" is used to build instance. This may cause unexpected failure when running the built modules. Please check whether \"mmdet\" is a correct scope, or whether the registry is initialized.\n", "04/17 10:28:19 - mmengine - WARNING - `Visualizer` backend is not initialized because save_dir is None.\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "Output()" ], "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, "model_id": "b1188048a1f04c2fa77c0d3829da39bd" } }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [ "/usr/local/lib/python3.9/dist-packages/torch/functional.py:504: UserWarning: torch.meshgrid: in an upcoming \n", "release, it will be required to pass the indexing argument. (Triggered internally at \n", "../aten/src/ATen/native/TensorShape.cpp:3483.)\n", " return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]\n" ], "text/html": [ "
/usr/local/lib/python3.9/dist-packages/torch/functional.py:504: UserWarning: torch.meshgrid: in an upcoming \n",
              "release, it will be required to pass the indexing argument. (Triggered internally at \n",
              "../aten/src/ATen/native/TensorShape.cpp:3483.)\n",
              "  return _VF.meshgrid(tensors, **kwargs)  # type: ignore[attr-defined]\n",
              "
\n" ] }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [], "text/html": [ "
\n"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "\n"
            ],
            "text/html": [
              "
\n",
              "
\n" ] }, "metadata": {} } ], "source": [ "from mmdet.apis import DetInferencer\n", "\n", "# Choose to use a config\n", "model_name = 'rtmdet_tiny_8xb32-300e_coco'\n", "# Setup a checkpoint file to load\n", "checkpoint = './checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth'\n", "\n", "# Set the device to be used for evaluation\n", "device = 'cuda:0'\n", "\n", "# Initialize the DetInferencer\n", "inferencer = DetInferencer(model_name, checkpoint, device)\n", "\n", "# Use the detector to do inference\n", "img = './demo/demo.jpg'\n", "result = inferencer(img, out_dir='./output')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "id": "m6a8T4goU8Sq", "outputId": "68005045-d741-4f53-b59b-16881337bebf" }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "\u001b[1m{\u001b[0m\n", "\u001b[2;32mβ”‚ \u001b[0m\u001b[32m'predictions'\u001b[0m: \u001b[1m[\u001b[0m\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m{\u001b[0m\n", "\u001b[2;32mβ”‚ β”‚ β”‚ \u001b[0m\u001b[32m'bboxes'\u001b[0m: \u001b[1m[\u001b[0m\n", "\u001b[2;32mβ”‚ β”‚ β”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m221.37188720703125\u001b[0m, \u001b[1;36m176.12808227539062\u001b[0m, \u001b[1;36m456.25811767578125\u001b[0m, \u001b[1;36m383.2401428222656\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ β”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m295.3505859375\u001b[0m, \u001b[1;36m117.18350219726562\u001b[0m, \u001b[1;36m378.571533203125\u001b[0m, \u001b[1;36m150.27117919921875\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ β”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m190.57350158691406\u001b[0m, \u001b[1;36m109.70985412597656\u001b[0m, \u001b[1;36m299.52215576171875\u001b[0m, \u001b[1;36m155.0396270751953\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ β”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m431.36944580078125\u001b[0m, \u001b[1;36m104.98468780517578\u001b[0m, \u001b[1;36m484.879150390625\u001b[0m, \u001b[1;36m131.94033813476562\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ β”‚ β”‚ \u001b[0m\u001b[33m...\u001b[0m +\u001b[1;36m296\u001b[0m\n", "\u001b[2;32mβ”‚ β”‚ β”‚ \u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ β”‚ \u001b[0m\u001b[32m'labels'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1;36m13\u001b[0m, \u001b[1;36m2\u001b[0m, \u001b[1;36m2\u001b[0m, \u001b[1;36m2\u001b[0m, \u001b[33m...\u001b[0m +\u001b[1;36m296\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ β”‚ \u001b[0m\u001b[32m'scores'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1;36m0.8703235387802124\u001b[0m, \u001b[1;36m0.7677358984947205\u001b[0m, \u001b[1;36m0.7427828311920166\u001b[0m, \u001b[1;36m0.6994596123695374\u001b[0m, \u001b[33m...\u001b[0m +\u001b[1;36m296\u001b[0m\u001b[1m]\u001b[0m\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m}\u001b[0m\n", "\u001b[2;32mβ”‚ \u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ \u001b[0m\u001b[32m'visualization'\u001b[0m: \u001b[1m[\u001b[0m\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1;35marray\u001b[0m\u001b[1m(\u001b[0m\u001b[1m[\u001b[0m\u001b[1m[\u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m28\u001b[0m, \u001b[1;36m48\u001b[0m, \u001b[1;36m13\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m37\u001b[0m, \u001b[1;36m63\u001b[0m, \u001b[1;36m28\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m30\u001b[0m, \u001b[1;36m64\u001b[0m, \u001b[1;36m27\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[33m...\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m23\u001b[0m, \u001b[1;36m47\u001b[0m, \u001b[1;36m31\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m31\u001b[0m, \u001b[1;36m67\u001b[0m, \u001b[1;36m31\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m54\u001b[0m, \u001b[1;36m92\u001b[0m, \u001b[1;36m17\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ \u001b[0m\n", "\u001b[2;32mβ”‚ \u001b[0m\u001b[1m[\u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m23\u001b[0m, \u001b[1;36m42\u001b[0m, \u001b[1;36m0\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m25\u001b[0m, \u001b[1;36m50\u001b[0m, \u001b[1;36m8\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m30\u001b[0m, \u001b[1;36m62\u001b[0m, \u001b[1;36m21\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[33m...\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m92\u001b[0m, \u001b[1;36m114\u001b[0m, \u001b[1;36m102\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m16\u001b[0m, \u001b[1;36m53\u001b[0m, \u001b[1;36m12\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m44\u001b[0m, \u001b[1;36m75\u001b[0m, \u001b[1;36m16\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ \u001b[0m\n", "\u001b[2;32mβ”‚ \u001b[0m\u001b[1m[\u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m20\u001b[0m, \u001b[1;36m50\u001b[0m, \u001b[1;36m0\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m25\u001b[0m, \u001b[1;36m59\u001b[0m, \u001b[1;36m8\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m29\u001b[0m, \u001b[1;36m66\u001b[0m, \u001b[1;36m23\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[33m...\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m47\u001b[0m, \u001b[1;36m70\u001b[0m, \u001b[1;36m44\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m29\u001b[0m, \u001b[1;36m60\u001b[0m, \u001b[1;36m18\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m54\u001b[0m, \u001b[1;36m77\u001b[0m, \u001b[1;36m31\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ \u001b[0m\n", "\u001b[2;32mβ”‚ \u001b[0m\u001b[33m...\u001b[0m,\n", "\u001b[2;32mβ”‚ \u001b[0m\n", "\u001b[2;32mβ”‚ \u001b[0m\u001b[1m[\u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m63\u001b[0m, \u001b[1;36m68\u001b[0m, \u001b[1;36m45\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m58\u001b[0m, \u001b[1;36m66\u001b[0m, \u001b[1;36m27\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m74\u001b[0m, \u001b[1;36m84\u001b[0m, \u001b[1;36m49\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[33m...\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m32\u001b[0m, \u001b[1;36m46\u001b[0m, \u001b[1;36m23\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m56\u001b[0m, \u001b[1;36m76\u001b[0m, \u001b[1;36m39\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m31\u001b[0m, \u001b[1;36m47\u001b[0m, \u001b[1;36m18\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ \u001b[0m\n", "\u001b[2;32mβ”‚ \u001b[0m\u001b[1m[\u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m60\u001b[0m, \u001b[1;36m66\u001b[0m, \u001b[1;36m40\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m45\u001b[0m, \u001b[1;36m55\u001b[0m, \u001b[1;36m18\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m83\u001b[0m, \u001b[1;36m92\u001b[0m, \u001b[1;36m61\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[33m...\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m63\u001b[0m, \u001b[1;36m77\u001b[0m, \u001b[1;36m54\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m47\u001b[0m, \u001b[1;36m67\u001b[0m, \u001b[1;36m30\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m35\u001b[0m, \u001b[1;36m52\u001b[0m, \u001b[1;36m20\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ \u001b[0m\n", "\u001b[2;32mβ”‚ \u001b[0m\u001b[1m[\u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m64\u001b[0m, \u001b[1;36m70\u001b[0m, \u001b[1;36m42\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m85\u001b[0m, \u001b[1;36m95\u001b[0m, \u001b[1;36m60\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m66\u001b[0m, \u001b[1;36m75\u001b[0m, \u001b[1;36m48\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[33m...\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m37\u001b[0m, \u001b[1;36m51\u001b[0m, \u001b[1;36m28\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m59\u001b[0m, \u001b[1;36m79\u001b[0m, \u001b[1;36m42\u001b[0m\u001b[1m]\u001b[0m,\n", "\u001b[2;32mβ”‚ β”‚ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m44\u001b[0m, \u001b[1;36m61\u001b[0m, \u001b[1;36m29\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m, \u001b[33mdtype\u001b[0m=\u001b[35muint8\u001b[0m\u001b[1m)\u001b[0m\n", "\u001b[2;32mβ”‚ \u001b[0m\u001b[1m]\u001b[0m\n", "\u001b[1m}\u001b[0m\n" ], "text/html": [ "
{\n",
              "β”‚   'predictions': [\n",
              "β”‚   β”‚   {\n",
              "β”‚   β”‚   β”‚   'bboxes': [\n",
              "β”‚   β”‚   β”‚   β”‚   [221.37188720703125, 176.12808227539062, 456.25811767578125, 383.2401428222656],\n",
              "β”‚   β”‚   β”‚   β”‚   [295.3505859375, 117.18350219726562, 378.571533203125, 150.27117919921875],\n",
              "β”‚   β”‚   β”‚   β”‚   [190.57350158691406, 109.70985412597656, 299.52215576171875, 155.0396270751953],\n",
              "β”‚   β”‚   β”‚   β”‚   [431.36944580078125, 104.98468780517578, 484.879150390625, 131.94033813476562],\n",
              "β”‚   β”‚   β”‚   β”‚   ... +296\n",
              "β”‚   β”‚   β”‚   ],\n",
              "β”‚   β”‚   β”‚   'labels': [13, 2, 2, 2, ... +296],\n",
              "β”‚   β”‚   β”‚   'scores': [0.8703235387802124, 0.7677358984947205, 0.7427828311920166, 0.6994596123695374, ... +296]\n",
              "β”‚   β”‚   }\n",
              "β”‚   ],\n",
              "β”‚   'visualization': [\n",
              "β”‚   β”‚   array([[[ 28,  48,  13],\n",
              "β”‚   β”‚   [ 37,  63,  28],\n",
              "β”‚   β”‚   [ 30,  64,  27],\n",
              "β”‚   β”‚   ...,\n",
              "β”‚   β”‚   [ 23,  47,  31],\n",
              "β”‚   β”‚   [ 31,  67,  31],\n",
              "β”‚   β”‚   [ 54,  92,  17]],\n",
              "β”‚      \n",
              "β”‚      [[ 23,  42,   0],\n",
              "β”‚   β”‚   [ 25,  50,   8],\n",
              "β”‚   β”‚   [ 30,  62,  21],\n",
              "β”‚   β”‚   ...,\n",
              "β”‚   β”‚   [ 92, 114, 102],\n",
              "β”‚   β”‚   [ 16,  53,  12],\n",
              "β”‚   β”‚   [ 44,  75,  16]],\n",
              "β”‚      \n",
              "β”‚      [[ 20,  50,   0],\n",
              "β”‚   β”‚   [ 25,  59,   8],\n",
              "β”‚   β”‚   [ 29,  66,  23],\n",
              "β”‚   β”‚   ...,\n",
              "β”‚   β”‚   [ 47,  70,  44],\n",
              "β”‚   β”‚   [ 29,  60,  18],\n",
              "β”‚   β”‚   [ 54,  77,  31]],\n",
              "β”‚      \n",
              "β”‚      ...,\n",
              "β”‚      \n",
              "β”‚      [[ 63,  68,  45],\n",
              "β”‚   β”‚   [ 58,  66,  27],\n",
              "β”‚   β”‚   [ 74,  84,  49],\n",
              "β”‚   β”‚   ...,\n",
              "β”‚   β”‚   [ 32,  46,  23],\n",
              "β”‚   β”‚   [ 56,  76,  39],\n",
              "β”‚   β”‚   [ 31,  47,  18]],\n",
              "β”‚      \n",
              "β”‚      [[ 60,  66,  40],\n",
              "β”‚   β”‚   [ 45,  55,  18],\n",
              "β”‚   β”‚   [ 83,  92,  61],\n",
              "β”‚   β”‚   ...,\n",
              "β”‚   β”‚   [ 63,  77,  54],\n",
              "β”‚   β”‚   [ 47,  67,  30],\n",
              "β”‚   β”‚   [ 35,  52,  20]],\n",
              "β”‚      \n",
              "β”‚      [[ 64,  70,  42],\n",
              "β”‚   β”‚   [ 85,  95,  60],\n",
              "β”‚   β”‚   [ 66,  75,  48],\n",
              "β”‚   β”‚   ...,\n",
              "β”‚   β”‚   [ 37,  51,  28],\n",
              "β”‚   β”‚   [ 59,  79,  42],\n",
              "β”‚   β”‚   [ 44,  61,  29]]], dtype=uint8)\n",
              "β”‚   ]\n",
              "}\n",
              "
\n" ] }, "metadata": {} } ], "source": [ "# Show the structure of result dict\n", "from rich.pretty import pprint\n", "pprint(result, max_length=4)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 444 }, "id": "UsJU5D-QPX8L", "outputId": "766f3211-301b-4a89-ae9d-898a92181c67" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ], "image/png": "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PC65ydJHW8N6IyiKqh63MGYsIMJgRgzQ1ogCYSgywRTQVZHavahBG3EwMLbM2ZXLF+IgeP2brzsNUE2GP/D/+NE4pmFsMEa//3tffnh758pjTw6GB8ls6Pg4HReXLz3x7rU3prMeIUqcWlpMRkNr9Yuf+IwixGBna+vhctOvBc0KZ8RgABBXGkKojSZMIASApQh6xigANYAKEwipnY60MmXcRecfi/e+ciNwQ0CsrdqYzaiffvzjj0OgF9ud472jr37xjcBpfu2r12ttFDRR7/ignArPpTxLJA54VQUx2t4/3O8dvvxdL3LFl08t7588ure9femxc624u320/2M/+hOvfv0bntfQ08QaCACw2lj4YRH3HAPrMDZP8VPGsEuJ744Go/67b2/vbjsQYoIqo+JWe3qw77puJaQFmqu8qqo4jjmX+7t7m2fPRKuLezv7o15/6dQKN8ogwKVwXR9jnMyyKIq01uPJjDHmMG/u20ySxGGh1awSFhm9uNgVWkSBz8vcj5jRcjaeMEzLShCCG36nUnp5La41G1mWDU8mRVHcubulIfxzf+G/oucuyULevX4rSQcGINetWwyX108dnoyeePqFna2sXV/f3d1FwlTjIvB913fneRhr9cry0rW33/na6+85LsGUAAAa9U5VmskohZYYiV3XwQAqXWGMubQnxxOCvVoH9fvpkEyVVVrLS1cu904mWpuVtQuPtm+Nxsn62sY7b7wHLanX4t7uEVp2z54782DrPsY4SfIwDMbTaeDTTr3Z700w8iBmghtjZVlVccNVFhDlrq2eWjnb2dv9wPZn77z9zunNx1975auPHtyLm2Gu9MEgtdgBqtpY2jgcHY3SZHmpNa2ElCZLq8CFuyeJos3jQYloOMvknb3t8089VkmepGmalNDAwCVGK0ggQLbMEmC1NIDFobW6KMZ114FSJELUlgKRe9BKqVNhwK07O7UoliJdXV3M00JKef/REZfl537qx+/fv1uUhsD2rUe31zc333v/zunTp+vJ7A+/tL+42ppNp2UOPvbCRQzw2urFgqvBLJ0ORlcvXBmOehpIREFWpK6CGKKF5aWy0oUaM9c3ACCIZCUwonleMo/FIUV49u61G52Ov3lm8eBgd6G7Ljn5lk9/7w//8A//zb/1Uz/w/Z/9xV/6vNUmDJxkmu7uPigLWavFBui19cWDg70w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RBza3u6eO25/7ZBD5xeqTrMjm6POgiWEOZTSnrCVf/zxKW3yhLZiYVes7N669XWpQ45OkiRHHHnIxz/5WaLtnIF+0OAQ2LJhLRqJaGdzrykAGEAC1qjfXnvFn/508x9+f8PTjz0zPjkch4kxpqe3S4j81ORIuzW9YP6cRx97+HvfPeeYY46cnp6cGB8FY6SIz/3B2ddedZ1UmREawNx7770/uODCb3zja2+99damTRv27tl3wknHXXn1Fbt27dq0aZPRhR/+4IIrrrrilZdePf64I6+55powal962WXIUFs9OxtSFhYsWjw5OX7woUcvWrRfdxHiON66devwnr1vv/02Y6yvr88S2L17yPO8hQvnD+3apbUeHR231gIYqQVjbFYW0+p0/kds9VzOsb+3L8nSqakpArTT6Th+gIhZKoRIOXNcrxQ29fDw8GGHHvLGK6ubzZgS+YlPfOKC8y8yxtx51+25fBXR11oRgmHYybLMWkMQRZZyRjdt2jRnzpyZmZnFixc//PDD8+bNEyLTWrVb04Wib61mBLTWhVwpiWWWJsuWrXjo4ZeNsZwEaNpK6EK+YG1CeFjKF5qtkDGWhikAeAUXtAGDjPEkzYqBu3jpnHY8yahyKHFpsP+KFTIKA9dvd9jmjXtzuYLITCayXF4nceg7c03mtOqNJJt46+3Row5710UX/UCK9Gc/+9ErL7947bXX7ty5s9lsW20ZByRSmQi0ueDC71x33RWeX5w3b74x6gtf+PzChYs9L3jxxedbndaylfPPP/9CJe3jjz85Njre01s744wzrrz6d+eefxZa1dvbf8455zz44IOMESmzwA8O2P/It95cPzgwx2gwRn3rW9+45prf/utf9//sZz/5+hmfv+SSSyYmJn971TUa2JyB+ZVi7blnXvzn/fd3OlGtVlm8cN7TTz0aRk0pI8rhz7dcj2As0GKh0qjXr7z6egtAECkHoEppc+tfb/zLbQAWCBADnGmQHAxY/eyzLx1z5PE33nyDBvOby3/+3AvP/fDHPxwbGU2zOMsSY6XWkhBCbHDR+edde+0furrLcToFNrngvB/Mm7uEc3ziyUfCZueAlQd897vnLJg779orr73rrrsmJ8fPOPOrt9566yc+8Ylly1cSCm+89vr4+CQA3HXX3//611u1NTf88UYpJSCt1XqrvT0JqGajU2ClNbv3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\n" }, "metadata": {}, "execution_count": 7 } ], "source": [ "# Show the output image\n", "from PIL import Image\n", "Image.open('./output/vis/demo.jpg')" ] }, { "cell_type": "markdown", "metadata": { "id": "7GrWIJywLV-V" }, "source": [ "## Train with customized datasets\n", "\n", "In this part, you will know how to train predefined models with customized datasets and then test it. We use the [balloon dataset](https://github.com/matterport/Mask_RCNN/tree/master/samples/balloon) as an example to describe the whole process.\n", "\n", "The basic steps are as below:\n", "\n", "1. Prepare the customized dataset\n", "2. Prepare a config\n", "3. Train, test, and infer models on the customized dataset.\n" ] }, { "cell_type": "markdown", "metadata": { "id": "E73y5Lru-wBx" }, "source": [ "### Prepare the customized dataset\n", "\n", "There are three ways to support a new dataset in MMDetection:\n", "\n", "1. Reorganize the dataset into COCO format.\n", "2. Reorganize the dataset into a middle format.\n", "3. Implement a new dataset.\n", "\n", "Usually, we recommend using the first two methods which are usually easier than the third.\n", "\n", "In this tutorial, we use the ballon dataset an example of converting the data into COCO format.\n", "\n", "**Note**: Datasets and metrics have been decoupled except CityScapes since MMDetection 3.0. Therefore, users can use any kind of evaluation metrics for any format of datasets during validation. For example: evaluate on COCO dataset with VOC metric, or evaluate on OpenImages dataset with both VOC and COCO metrics." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "sbJhEsckU8UX", "outputId": "b9fdd1b1-5591-41b9-b27c-cadccac9aafa" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Downloading https://download.openmmlab.com/mmyolo/data/balloon_dataset.zip to data/balloon_dataset.zip\n", "100% 36.9M/36.9M [00:01<00:00, 25.0MB/s]\n", "Unzipping balloon_dataset.zip\n" ] } ], "source": [ "# Download the data and unzip it\n", "!python tools/misc/download_dataset.py --dataset-name balloon --save-dir data --unzip" ] }, { "cell_type": "markdown", "metadata": { "id": "gmMpkzs2U8UY" }, "source": [ "#### COCO annotation format\n", "The necessary keys of COCO format for instance segmentation are as below, for the complete details, please refer [here](https://cocodataset.org/#format-data).\n", "\n", "```json\n", "{\n", " \"images\": [image],\n", " \"annotations\": [annotation],\n", " \"categories\": [category]\n", "}\n", "image = {\n", " \"id\": int,\n", " \"width\": int,\n", " \"height\": int,\n", " \"file_name\": str,\n", "}\n", "annotation = {\n", " \"id\": int,\n", " \"image_id\": int,\n", " \"category_id\": int,\n", " \"segmentation\": RLE or [polygon],\n", " \"area\": float,\n", " \"bbox\": [x,y,width,height], # (x, y) are the coordinates of the upper left corner of the bbox\n", " \"iscrowd\": 0 or 1,\n", "}\n", "categories = [{\n", " \"id\": int,\n", " \"name\": str,\n", " \"supercategory\": str,\n", "}]\n", "```\n", "\n", "Assume we use the balloon dataset.\n", "After downloading the data, we need to implement a function to convert the annotation format into the COCO format. Then we can use implemented `CocoDataset` to load the data and perform training and evaluation.\n", "\n", "If you take a look at the dataset, you will find the dataset format is as below:\n", "\n", "```json\n", "{'base64_img_data': '',\n", " 'file_attributes': {},\n", " 'filename': '34020010494_e5cb88e1c4_k.jpg',\n", " 'fileref': '',\n", " 'regions': {'0': {'region_attributes': {},\n", " 'shape_attributes': {'all_points_x': [1020,\n", " 1000,\n", " 994,\n", " 1003,\n", " 1023,\n", " 1050,\n", " 1089,\n", " 1134,\n", " 1190,\n", " 1265,\n", " 1321,\n", " 1361,\n", " 1403,\n", " 1428,\n", " 1442,\n", " 1445,\n", " 1441,\n", " 1427,\n", " 1400,\n", " 1361,\n", " 1316,\n", " 1269,\n", " 1228,\n", " 1198,\n", " 1207,\n", " 1210,\n", " 1190,\n", " 1177,\n", " 1172,\n", " 1174,\n", " 1170,\n", " 1153,\n", " 1127,\n", " 1104,\n", " 1061,\n", " 1032,\n", " 1020],\n", " 'all_points_y': [963,\n", " 899,\n", " 841,\n", " 787,\n", " 738,\n", " 700,\n", " 663,\n", " 638,\n", " 621,\n", " 619,\n", " 643,\n", " 672,\n", " 720,\n", " 765,\n", " 800,\n", " 860,\n", " 896,\n", " 942,\n", " 990,\n", " 1035,\n", " 1079,\n", " 1112,\n", " 1129,\n", " 1134,\n", " 1144,\n", " 1153,\n", " 1166,\n", " 1166,\n", " 1150,\n", " 1136,\n", " 1129,\n", " 1122,\n", " 1112,\n", " 1084,\n", " 1037,\n", " 989,\n", " 963],\n", " 'name': 'polygon'}}},\n", " 'size': 1115004}\n", "```\n", "\n", "The annotation is a JSON file where each key indicates an image's all annotations.\n", "The code to convert the balloon dataset into coco format is as below.\n", "\n", "Using the function below, users can successfully convert the annotation file into json format, then we can use `CocoDataset` to train and evaluate the model with `CocoMetric`." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "rHnw5Q_nARXq", "outputId": "4b1efb44-f81d-486f-80e6-461a57fe84bc" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 61/61, 34.8 task/s, elapsed: 2s, ETA: 0s\n", "[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 13/13, 22.2 task/s, elapsed: 1s, ETA: 0s\n" ] } ], "source": [ "import os.path as osp\n", "import mmcv\n", "from mmengine.fileio import dump, load\n", "from mmengine.utils import track_iter_progress\n", "\n", "def convert_balloon_to_coco(ann_file, out_file, image_prefix):\n", " data_infos = load(ann_file)\n", "\n", " annotations = []\n", " images = []\n", " obj_count = 0\n", " for idx, v in enumerate(track_iter_progress(data_infos.values())):\n", " filename = v['filename']\n", " img_path = osp.join(image_prefix, filename)\n", " height, width = mmcv.imread(img_path).shape[:2]\n", "\n", " images.append(\n", " dict(id=idx, file_name=filename, height=height, width=width))\n", " \n", " for _, obj in v['regions'].items():\n", " assert not obj['region_attributes']\n", " obj = obj['shape_attributes']\n", " px = obj['all_points_x']\n", " py = obj['all_points_y']\n", " poly = [(x + 0.5, y + 0.5) for x, y in zip(px, py)]\n", " poly = [p for x in poly for p in x]\n", "\n", " x_min, y_min, x_max, y_max = (min(px), min(py), max(px), max(py))\n", "\n", " data_anno = dict(\n", " image_id=idx,\n", " id=obj_count,\n", " category_id=0,\n", " bbox=[x_min, y_min, x_max - x_min, y_max - y_min],\n", " area=(x_max - x_min) * (y_max - y_min),\n", " segmentation=[poly],\n", " iscrowd=0)\n", " annotations.append(data_anno)\n", " obj_count += 1\n", "\n", " coco_format_json = dict(\n", " images=images,\n", " annotations=annotations,\n", " categories=[{\n", " 'id': 0,\n", " 'name': 'balloon'\n", " }])\n", " dump(coco_format_json, out_file)\n", "\n", "if __name__ == '__main__':\n", " convert_balloon_to_coco(ann_file='data/balloon/train/via_region_data.json',\n", " out_file='data/balloon/train.json',\n", " image_prefix='data/balloon/train')\n", " convert_balloon_to_coco(ann_file='data/balloon/val/via_region_data.json',\n", " out_file='data/balloon/val.json',\n", " image_prefix='data/balloon/val')" ] }, { "cell_type": "markdown", "metadata": { "id": "yc9UDp1vU8UZ" }, "source": [ "## Prepare a config\n", "\n", "The second step is to prepare a config thus the dataset could be successfully loaded. Assume that we want to use RTMDet-tiny, the config to train the detector on balloon dataset is as below. Assume the config is under directory `configs/rtmdet/` and named as `rtmdet_tiny_1xb4-20e_balloon.py`, the config is as below.\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "id": "XjTW6XydU8Ua" }, "outputs": [], "source": [ "config_balloon = \"\"\"\n", "# Inherit and overwrite part of the config based on this config\n", "_base_ = './rtmdet_tiny_8xb32-300e_coco.py'\n", "\n", "data_root = 'data/balloon/' # dataset root\n", "\n", "train_batch_size_per_gpu = 4\n", "train_num_workers = 2\n", "\n", "max_epochs = 20\n", "stage2_num_epochs = 1\n", "base_lr = 0.00008\n", "\n", "\n", "metainfo = {\n", " 'classes': ('balloon', ),\n", " 'palette': [\n", " (220, 20, 60),\n", " ]\n", "}\n", "\n", "train_dataloader = dict(\n", " batch_size=train_batch_size_per_gpu,\n", " num_workers=train_num_workers,\n", " dataset=dict(\n", " data_root=data_root,\n", " metainfo=metainfo,\n", " data_prefix=dict(img='train/'),\n", " ann_file='train.json'))\n", "\n", "val_dataloader = dict(\n", " dataset=dict(\n", " data_root=data_root,\n", " metainfo=metainfo,\n", " data_prefix=dict(img='val/'),\n", " ann_file='val.json'))\n", "\n", "test_dataloader = val_dataloader\n", "\n", "val_evaluator = dict(ann_file=data_root + 'val.json')\n", "\n", "test_evaluator = val_evaluator\n", "\n", "model = dict(bbox_head=dict(num_classes=1))\n", "\n", "# learning rate\n", "param_scheduler = [\n", " dict(\n", " type='LinearLR',\n", " start_factor=1.0e-5,\n", " by_epoch=False,\n", " begin=0,\n", " end=10),\n", " dict(\n", " # use cosine lr from 10 to 20 epoch\n", " type='CosineAnnealingLR',\n", " eta_min=base_lr * 0.05,\n", " begin=max_epochs // 2,\n", " end=max_epochs,\n", " T_max=max_epochs // 2,\n", " by_epoch=True,\n", " convert_to_iter_based=True),\n", "]\n", "\n", "train_pipeline_stage2 = [\n", " dict(type='LoadImageFromFile', backend_args=None),\n", " dict(type='LoadAnnotations', with_bbox=True),\n", " dict(\n", " type='RandomResize',\n", " scale=(640, 640),\n", " ratio_range=(0.1, 2.0),\n", " keep_ratio=True),\n", " dict(type='RandomCrop', crop_size=(640, 640)),\n", " dict(type='YOLOXHSVRandomAug'),\n", " dict(type='RandomFlip', prob=0.5),\n", " dict(type='Pad', size=(640, 640), pad_val=dict(img=(114, 114, 114))),\n", " dict(type='PackDetInputs')\n", "]\n", "\n", "# optimizer\n", "optim_wrapper = dict(\n", " _delete_=True,\n", " type='OptimWrapper',\n", " optimizer=dict(type='AdamW', lr=base_lr, weight_decay=0.05),\n", " paramwise_cfg=dict(\n", " norm_decay_mult=0, bias_decay_mult=0, bypass_duplicate=True))\n", "\n", "default_hooks = dict(\n", " checkpoint=dict(\n", " interval=5,\n", " max_keep_ckpts=2, # only keep latest 2 checkpoints\n", " save_best='auto'\n", " ),\n", " logger=dict(type='LoggerHook', interval=5))\n", "\n", "custom_hooks = [\n", " dict(\n", " type='PipelineSwitchHook',\n", " switch_epoch=max_epochs - stage2_num_epochs,\n", " switch_pipeline=train_pipeline_stage2)\n", "]\n", "\n", "# load COCO pre-trained weight\n", "load_from = './checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth'\n", "\n", "train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=max_epochs, val_interval=1)\n", "visualizer = dict(vis_backends=[dict(type='LocalVisBackend'),dict(type='TensorboardVisBackend')])\n", "\"\"\"\n", "\n", "with open('./configs/rtmdet/rtmdet_tiny_1xb4-20e_balloon.py', 'w') as f:\n", " f.write(config_balloon)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "5LNm7LxwZG2w", "outputId": "aac457c5-f915-433d-e98a-85ddd9005543" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "04/17 10:28:35 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - \n", "------------------------------------------------------------\n", "System environment:\n", " sys.platform: linux\n", " Python: 3.9.16 (main, Dec 7 2022, 01:11:51) [GCC 9.4.0]\n", " CUDA available: True\n", " numpy_random_seed: 904036445\n", " GPU 0: Tesla T4\n", " CUDA_HOME: /usr/local/cuda\n", " NVCC: Cuda compilation tools, release 11.8, V11.8.89\n", " GCC: x86_64-linux-gnu-gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0\n", " PyTorch: 2.0.0+cu118\n", " PyTorch compiling details: PyTorch built with:\n", " - GCC 9.3\n", " - C++ Version: 201703\n", " - Intel(R) oneAPI Math Kernel Library Version 2022.2-Product Build 20220804 for Intel(R) 64 architecture applications\n", " - Intel(R) MKL-DNN v2.7.3 (Git Hash 6dbeffbae1f23cbbeae17adb7b5b13f1f37c080e)\n", " - OpenMP 201511 (a.k.a. OpenMP 4.5)\n", " - LAPACK is enabled (usually provided by MKL)\n", " - NNPACK is enabled\n", " - CPU capability usage: AVX2\n", " - CUDA Runtime 11.8\n", " - NVCC architecture flags: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86;-gencode;arch=compute_90,code=sm_90\n", " - CuDNN 8.7\n", " - Magma 2.6.1\n", " - Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, CUDA_VERSION=11.8, CUDNN_VERSION=8.7.0, CXX_COMPILER=/opt/rh/devtoolset-9/root/usr/bin/c++, CXX_FLAGS= -D_GLIBCXX_USE_CXX11_ABI=0 -fabi-version=11 -Wno-deprecated -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -DNDEBUG -DUSE_KINETO -DLIBKINETO_NOROCTRACER -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE -O2 -fPIC -Wall -Wextra -Werror=return-type -Werror=non-virtual-dtor -Werror=bool-operation -Wnarrowing -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wunused-local-typedefs -Wno-unused-parameter -Wno-unused-function -Wno-unused-result -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Werror=cast-function-type -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, PERF_WITH_AVX512=1, TORCH_DISABLE_GPU_ASSERTS=ON, TORCH_VERSION=2.0.0, USE_CUDA=ON, USE_CUDNN=ON, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=1, USE_NNPACK=ON, USE_OPENMP=ON, USE_ROCM=OFF, \n", "\n", " TorchVision: 0.15.1+cu118\n", " OpenCV: 4.7.0\n", " MMEngine: 0.7.2\n", "\n", "Runtime environment:\n", " cudnn_benchmark: False\n", " mp_cfg: {'mp_start_method': 'fork', 'opencv_num_threads': 0}\n", " dist_cfg: {'backend': 'nccl'}\n", " seed: None\n", " Distributed launcher: none\n", " Distributed training: False\n", " GPU number: 1\n", "------------------------------------------------------------\n", "\n", "04/17 10:28:37 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Config:\n", "default_scope = 'mmdet'\n", "default_hooks = dict(\n", " timer=dict(type='IterTimerHook'),\n", " logger=dict(type='LoggerHook', interval=5),\n", " param_scheduler=dict(type='ParamSchedulerHook'),\n", " checkpoint=dict(\n", " type='CheckpointHook', interval=5, max_keep_ckpts=2, save_best='auto'),\n", " sampler_seed=dict(type='DistSamplerSeedHook'),\n", " visualization=dict(type='DetVisualizationHook'))\n", "env_cfg = dict(\n", " cudnn_benchmark=False,\n", " mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),\n", " dist_cfg=dict(backend='nccl'))\n", "vis_backends = [dict(type='LocalVisBackend')]\n", "visualizer = dict(\n", " type='DetLocalVisualizer',\n", " vis_backends=[\n", " dict(type='LocalVisBackend'),\n", " dict(type='TensorboardVisBackend')\n", " ],\n", " name='visualizer')\n", "log_processor = dict(type='LogProcessor', window_size=50, by_epoch=True)\n", "log_level = 'INFO'\n", "load_from = './checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth'\n", "resume = False\n", "train_cfg = dict(\n", " type='EpochBasedTrainLoop',\n", " max_epochs=20,\n", " val_interval=1,\n", " dynamic_intervals=[(280, 1)])\n", "val_cfg = dict(type='ValLoop')\n", "test_cfg = dict(type='TestLoop')\n", "param_scheduler = [\n", " dict(type='LinearLR', start_factor=1e-05, by_epoch=False, begin=0, end=10),\n", " dict(\n", " type='CosineAnnealingLR',\n", " eta_min=4.000000000000001e-06,\n", " begin=10,\n", " end=20,\n", " T_max=10,\n", " by_epoch=True,\n", " convert_to_iter_based=True)\n", "]\n", "optim_wrapper = dict(\n", " type='OptimWrapper',\n", " optimizer=dict(type='AdamW', lr=8e-05, weight_decay=0.05),\n", " paramwise_cfg=dict(\n", " norm_decay_mult=0, bias_decay_mult=0, bypass_duplicate=True))\n", "auto_scale_lr = dict(enable=False, base_batch_size=16)\n", "dataset_type = 'CocoDataset'\n", "data_root = 'data/balloon/'\n", "backend_args = None\n", "train_pipeline = [\n", " dict(type='LoadImageFromFile', backend_args=None),\n", " dict(type='LoadAnnotations', with_bbox=True),\n", " dict(\n", " type='CachedMosaic',\n", " img_scale=(640, 640),\n", " pad_val=114.0,\n", " max_cached_images=20,\n", " random_pop=False),\n", " dict(\n", " type='RandomResize',\n", " scale=(1280, 1280),\n", " ratio_range=(0.5, 2.0),\n", " keep_ratio=True),\n", " dict(type='RandomCrop', crop_size=(640, 640)),\n", " dict(type='YOLOXHSVRandomAug'),\n", " dict(type='RandomFlip', prob=0.5),\n", " dict(type='Pad', size=(640, 640), pad_val=dict(img=(114, 114, 114))),\n", " dict(\n", " type='CachedMixUp',\n", " img_scale=(640, 640),\n", " ratio_range=(1.0, 1.0),\n", " max_cached_images=10,\n", " random_pop=False,\n", " pad_val=(114, 114, 114),\n", " prob=0.5),\n", " dict(type='PackDetInputs')\n", "]\n", "test_pipeline = [\n", " dict(type='LoadImageFromFile', backend_args=None),\n", " dict(type='Resize', scale=(640, 640), keep_ratio=True),\n", " dict(type='Pad', size=(640, 640), pad_val=dict(img=(114, 114, 114))),\n", " dict(\n", " type='PackDetInputs',\n", " meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',\n", " 'scale_factor'))\n", "]\n", "train_dataloader = dict(\n", " batch_size=4,\n", " num_workers=2,\n", " persistent_workers=True,\n", " sampler=dict(type='DefaultSampler', shuffle=True),\n", " batch_sampler=None,\n", " dataset=dict(\n", " type='CocoDataset',\n", " data_root='data/balloon/',\n", " ann_file='train.json',\n", " data_prefix=dict(img='train/'),\n", " filter_cfg=dict(filter_empty_gt=True, min_size=32),\n", " pipeline=[\n", " dict(type='LoadImageFromFile', backend_args=None),\n", " dict(type='LoadAnnotations', with_bbox=True),\n", " dict(\n", " type='CachedMosaic',\n", " img_scale=(640, 640),\n", " pad_val=114.0,\n", " max_cached_images=20,\n", " random_pop=False),\n", " dict(\n", " type='RandomResize',\n", " scale=(1280, 1280),\n", " ratio_range=(0.5, 2.0),\n", " keep_ratio=True),\n", " dict(type='RandomCrop', crop_size=(640, 640)),\n", " dict(type='YOLOXHSVRandomAug'),\n", " dict(type='RandomFlip', prob=0.5),\n", " dict(\n", " type='Pad', size=(640, 640),\n", " pad_val=dict(img=(114, 114, 114))),\n", " dict(\n", " type='CachedMixUp',\n", " img_scale=(640, 640),\n", " ratio_range=(1.0, 1.0),\n", " max_cached_images=10,\n", " random_pop=False,\n", " pad_val=(114, 114, 114),\n", " prob=0.5),\n", " dict(type='PackDetInputs')\n", " ],\n", " backend_args=None,\n", " metainfo=dict(classes=('balloon', ), palette=[(220, 20, 60)])),\n", " pin_memory=True)\n", "val_dataloader = dict(\n", " batch_size=5,\n", " num_workers=10,\n", " persistent_workers=True,\n", " drop_last=False,\n", " sampler=dict(type='DefaultSampler', shuffle=False),\n", " dataset=dict(\n", " type='CocoDataset',\n", " data_root='data/balloon/',\n", " ann_file='val.json',\n", " data_prefix=dict(img='val/'),\n", " test_mode=True,\n", " pipeline=[\n", " dict(type='LoadImageFromFile', backend_args=None),\n", " dict(type='Resize', scale=(640, 640), keep_ratio=True),\n", " dict(\n", " type='Pad', size=(640, 640),\n", " pad_val=dict(img=(114, 114, 114))),\n", " dict(\n", " type='PackDetInputs',\n", " meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',\n", " 'scale_factor'))\n", " ],\n", " backend_args=None,\n", " metainfo=dict(classes=('balloon', ), palette=[(220, 20, 60)])))\n", "test_dataloader = dict(\n", " batch_size=5,\n", " num_workers=10,\n", " persistent_workers=True,\n", " drop_last=False,\n", " sampler=dict(type='DefaultSampler', shuffle=False),\n", " dataset=dict(\n", " type='CocoDataset',\n", " data_root='data/balloon/',\n", " ann_file='val.json',\n", " data_prefix=dict(img='val/'),\n", " test_mode=True,\n", " pipeline=[\n", " dict(type='LoadImageFromFile', backend_args=None),\n", " dict(type='Resize', scale=(640, 640), keep_ratio=True),\n", " dict(\n", " type='Pad', size=(640, 640),\n", " pad_val=dict(img=(114, 114, 114))),\n", " dict(\n", " type='PackDetInputs',\n", " meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',\n", " 'scale_factor'))\n", " ],\n", " backend_args=None,\n", " metainfo=dict(classes=('balloon', ), palette=[(220, 20, 60)])))\n", "val_evaluator = dict(\n", " type='CocoMetric',\n", " ann_file='data/balloon/val.json',\n", " metric='bbox',\n", " format_only=False,\n", " backend_args=None,\n", " proposal_nums=(100, 1, 10))\n", "test_evaluator = dict(\n", " type='CocoMetric',\n", " ann_file='data/balloon/val.json',\n", " metric='bbox',\n", " format_only=False,\n", " backend_args=None,\n", " proposal_nums=(100, 1, 10))\n", "tta_model = dict(\n", " type='DetTTAModel',\n", " tta_cfg=dict(nms=dict(type='nms', iou_threshold=0.6), max_per_img=100))\n", "img_scales = [(640, 640), (320, 320), (960, 960)]\n", "tta_pipeline = [\n", " dict(type='LoadImageFromFile', backend_args=None),\n", " dict(\n", " type='TestTimeAug',\n", " transforms=[[{\n", " 'type': 'Resize',\n", " 'scale': (640, 640),\n", " 'keep_ratio': True\n", " }, {\n", " 'type': 'Resize',\n", " 'scale': (320, 320),\n", " 'keep_ratio': True\n", " }, {\n", " 'type': 'Resize',\n", " 'scale': (960, 960),\n", " 'keep_ratio': True\n", " }],\n", " [{\n", " 'type': 'RandomFlip',\n", " 'prob': 1.0\n", " }, {\n", " 'type': 'RandomFlip',\n", " 'prob': 0.0\n", " }],\n", " [{\n", " 'type': 'Pad',\n", " 'size': (960, 960),\n", " 'pad_val': {\n", " 'img': (114, 114, 114)\n", " }\n", " }],\n", " [{\n", " 'type':\n", " 'PackDetInputs',\n", " 'meta_keys':\n", " ('img_id', 'img_path', 'ori_shape', 'img_shape',\n", " 'scale_factor', 'flip', 'flip_direction')\n", " }]])\n", "]\n", "model = dict(\n", " type='RTMDet',\n", " data_preprocessor=dict(\n", " type='DetDataPreprocessor',\n", " mean=[103.53, 116.28, 123.675],\n", " std=[57.375, 57.12, 58.395],\n", " bgr_to_rgb=False,\n", " batch_augments=None),\n", " backbone=dict(\n", " type='CSPNeXt',\n", " arch='P5',\n", " expand_ratio=0.5,\n", " deepen_factor=0.167,\n", " widen_factor=0.375,\n", " channel_attention=True,\n", " norm_cfg=dict(type='SyncBN'),\n", " act_cfg=dict(type='SiLU', inplace=True),\n", " init_cfg=dict(\n", " type='Pretrained',\n", " prefix='backbone.',\n", " checkpoint=\n", " 'https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-tiny_imagenet_600e.pth'\n", " )),\n", " neck=dict(\n", " type='CSPNeXtPAFPN',\n", " in_channels=[96, 192, 384],\n", " out_channels=96,\n", " num_csp_blocks=1,\n", " expand_ratio=0.5,\n", " norm_cfg=dict(type='SyncBN'),\n", " act_cfg=dict(type='SiLU', inplace=True)),\n", " bbox_head=dict(\n", " type='RTMDetSepBNHead',\n", " num_classes=1,\n", " in_channels=96,\n", " stacked_convs=2,\n", " feat_channels=96,\n", " anchor_generator=dict(\n", " type='MlvlPointGenerator', offset=0, strides=[8, 16, 32]),\n", " bbox_coder=dict(type='DistancePointBBoxCoder'),\n", " loss_cls=dict(\n", " type='QualityFocalLoss',\n", " use_sigmoid=True,\n", " beta=2.0,\n", " loss_weight=1.0),\n", " loss_bbox=dict(type='GIoULoss', loss_weight=2.0),\n", " with_objectness=False,\n", " exp_on_reg=False,\n", " share_conv=True,\n", " pred_kernel_size=1,\n", " norm_cfg=dict(type='SyncBN'),\n", " act_cfg=dict(type='SiLU', inplace=True)),\n", " train_cfg=dict(\n", " assigner=dict(type='DynamicSoftLabelAssigner', topk=13),\n", " allowed_border=-1,\n", " pos_weight=-1,\n", " debug=False),\n", " test_cfg=dict(\n", " nms_pre=30000,\n", " min_bbox_size=0,\n", " score_thr=0.001,\n", " nms=dict(type='nms', iou_threshold=0.65),\n", " max_per_img=300))\n", "train_pipeline_stage2 = [\n", " dict(type='LoadImageFromFile', backend_args=None),\n", " dict(type='LoadAnnotations', with_bbox=True),\n", " dict(\n", " type='RandomResize',\n", " scale=(640, 640),\n", " ratio_range=(0.1, 2.0),\n", " keep_ratio=True),\n", " dict(type='RandomCrop', crop_size=(640, 640)),\n", " dict(type='YOLOXHSVRandomAug'),\n", " dict(type='RandomFlip', prob=0.5),\n", " dict(type='Pad', size=(640, 640), pad_val=dict(img=(114, 114, 114))),\n", " dict(type='PackDetInputs')\n", "]\n", "max_epochs = 20\n", "stage2_num_epochs = 1\n", "base_lr = 8e-05\n", "interval = 10\n", "custom_hooks = [\n", " dict(\n", " type='PipelineSwitchHook',\n", " switch_epoch=19,\n", " switch_pipeline=[\n", " dict(type='LoadImageFromFile', backend_args=None),\n", " dict(type='LoadAnnotations', with_bbox=True),\n", " dict(\n", " type='RandomResize',\n", " scale=(640, 640),\n", " ratio_range=(0.1, 2.0),\n", " keep_ratio=True),\n", " dict(type='RandomCrop', crop_size=(640, 640)),\n", " dict(type='YOLOXHSVRandomAug'),\n", " dict(type='RandomFlip', prob=0.5),\n", " dict(\n", " type='Pad', size=(640, 640),\n", " pad_val=dict(img=(114, 114, 114))),\n", " dict(type='PackDetInputs')\n", " ])\n", "]\n", "checkpoint = 'https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-tiny_imagenet_600e.pth'\n", "train_batch_size_per_gpu = 4\n", "train_num_workers = 2\n", "metainfo = dict(classes=('balloon', ), palette=[(220, 20, 60)])\n", "launcher = 'none'\n", "work_dir = './work_dirs/rtmdet_tiny_1xb4-20e_balloon'\n", "\n", "2023-04-17 10:28:39.429834: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", "To enable the following instructions: AVX2 AVX512F FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", "2023-04-17 10:28:40.271799: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n", "04/17 10:28:43 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Distributed training is not used, all SyncBatchNorm (SyncBN) layers in the model will be automatically reverted to BatchNormXd layers if they are used.\n", "04/17 10:28:43 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Hooks will be executed in the following order:\n", "before_run:\n", "(VERY_HIGH ) RuntimeInfoHook \n", "(BELOW_NORMAL) LoggerHook \n", " -------------------- \n", "before_train:\n", "(VERY_HIGH ) RuntimeInfoHook \n", "(NORMAL ) IterTimerHook \n", "(VERY_LOW ) CheckpointHook \n", " -------------------- \n", "before_train_epoch:\n", "(VERY_HIGH ) RuntimeInfoHook \n", "(NORMAL ) IterTimerHook \n", "(NORMAL ) DistSamplerSeedHook \n", "(NORMAL ) PipelineSwitchHook \n", " -------------------- \n", "before_train_iter:\n", "(VERY_HIGH ) RuntimeInfoHook \n", "(NORMAL ) IterTimerHook \n", " -------------------- \n", "after_train_iter:\n", "(VERY_HIGH ) RuntimeInfoHook \n", "(NORMAL ) IterTimerHook \n", "(BELOW_NORMAL) LoggerHook \n", "(LOW ) ParamSchedulerHook \n", "(VERY_LOW ) CheckpointHook \n", " -------------------- \n", "after_train_epoch:\n", "(NORMAL ) IterTimerHook \n", "(LOW ) ParamSchedulerHook \n", "(VERY_LOW ) CheckpointHook \n", " -------------------- \n", "before_val_epoch:\n", "(NORMAL ) IterTimerHook \n", " -------------------- \n", "before_val_iter:\n", "(NORMAL ) IterTimerHook \n", " -------------------- \n", "after_val_iter:\n", "(NORMAL ) IterTimerHook \n", "(NORMAL ) DetVisualizationHook \n", "(BELOW_NORMAL) LoggerHook \n", " -------------------- \n", "after_val_epoch:\n", "(VERY_HIGH ) RuntimeInfoHook \n", "(NORMAL ) IterTimerHook \n", "(BELOW_NORMAL) LoggerHook \n", "(LOW ) ParamSchedulerHook \n", "(VERY_LOW ) CheckpointHook \n", " -------------------- \n", "after_train:\n", "(VERY_LOW ) CheckpointHook \n", " -------------------- \n", "before_test_epoch:\n", "(NORMAL ) IterTimerHook \n", " -------------------- \n", "before_test_iter:\n", "(NORMAL ) IterTimerHook \n", " -------------------- \n", "after_test_iter:\n", "(NORMAL ) IterTimerHook \n", "(NORMAL ) DetVisualizationHook \n", "(BELOW_NORMAL) LoggerHook \n", " -------------------- \n", "after_test_epoch:\n", "(VERY_HIGH ) RuntimeInfoHook \n", "(NORMAL ) IterTimerHook \n", "(BELOW_NORMAL) LoggerHook \n", " -------------------- \n", "after_run:\n", "(BELOW_NORMAL) LoggerHook \n", " -------------------- \n", "loading annotations into memory...\n", "Done (t=0.00s)\n", "creating index...\n", "index created!\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stem.0.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stem.0.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stem.1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stem.1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stem.2.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stem.2.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.0.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.0.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.main_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.main_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.short_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.short_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.final_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.final_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.blocks.0.conv1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.blocks.0.conv1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.attention.fc.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.0.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.0.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.main_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.main_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.short_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.short_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.final_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.final_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.blocks.0.conv1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.blocks.0.conv1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.attention.fc.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.0.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.0.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.main_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.main_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.short_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.short_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.final_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.final_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.blocks.0.conv1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.blocks.0.conv1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.attention.fc.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.0.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.0.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.1.conv1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.1.conv1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.1.conv2.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.1.conv2.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.main_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.main_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.short_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.short_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.final_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.final_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.blocks.0.conv1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.blocks.0.conv1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.attention.fc.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.reduce_layers.0.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.reduce_layers.0.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.reduce_layers.1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.reduce_layers.1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.main_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.main_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.short_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.short_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.final_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.final_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.blocks.0.conv1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.blocks.0.conv1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.main_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.main_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.short_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.short_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.final_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.final_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.blocks.0.conv1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.blocks.0.conv1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.downsamples.0.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.downsamples.0.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.downsamples.1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.downsamples.1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.main_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.main_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.short_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.short_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.final_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.final_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.blocks.0.conv1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.blocks.0.conv1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.main_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.main_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.short_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.short_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.final_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.final_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.blocks.0.conv1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.blocks.0.conv1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.out_convs.0.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.out_convs.0.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.out_convs.1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.out_convs.1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.out_convs.2.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.out_convs.2.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.0.0.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.0.0.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.0.1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.0.1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.cls_convs.1.0.conv is duplicate. It is skipped since bypass_duplicate=True\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.1.0.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.1.0.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.cls_convs.1.1.conv is duplicate. It is skipped since bypass_duplicate=True\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.1.1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.1.1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.cls_convs.2.0.conv is duplicate. It is skipped since bypass_duplicate=True\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.2.0.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.2.0.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.cls_convs.2.1.conv is duplicate. It is skipped since bypass_duplicate=True\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.2.1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.2.1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.0.0.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.0.0.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.0.1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.0.1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.reg_convs.1.0.conv is duplicate. It is skipped since bypass_duplicate=True\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.1.0.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.1.0.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.reg_convs.1.1.conv is duplicate. It is skipped since bypass_duplicate=True\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.1.1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.1.1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.reg_convs.2.0.conv is duplicate. It is skipped since bypass_duplicate=True\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.2.0.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.2.0.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.reg_convs.2.1.conv is duplicate. It is skipped since bypass_duplicate=True\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.2.1.bn.weight:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.2.1.bn.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.rtm_cls.0.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.rtm_cls.1.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.rtm_cls.2.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.rtm_reg.0.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.rtm_reg.1.bias:weight_decay=0.0\n", "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.rtm_reg.2.bias:weight_decay=0.0\n", "loading annotations into memory...\n", "Done (t=0.00s)\n", "creating index...\n", "index created!\n", "/usr/local/lib/python3.9/dist-packages/torch/utils/data/dataloader.py:561: UserWarning: This DataLoader will create 10 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", " warnings.warn(_create_warning_msg(\n", "loading annotations into memory...\n", "Done (t=0.00s)\n", "creating index...\n", "index created!\n", "04/17 10:28:46 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - load backbone. in model from: https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-tiny_imagenet_600e.pth\n", "Loads checkpoint by http backend from path: https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-tiny_imagenet_600e.pth\n", "Downloading: \"https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-tiny_imagenet_600e.pth\" to /root/.cache/torch/hub/checkpoints/cspnext-tiny_imagenet_600e.pth\n", "100% 31.5M/31.5M [00:01<00:00, 27.2MB/s]\n", "Loads checkpoint by local backend from path: ./checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth\n", "The model and loaded state dict do not match exactly\n", "\n", "size mismatch for bbox_head.rtm_cls.0.weight: copying a param with shape torch.Size([80, 96, 1, 1]) from checkpoint, the shape in current model is torch.Size([1, 96, 1, 1]).\n", "size mismatch for bbox_head.rtm_cls.0.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([1]).\n", "size mismatch for bbox_head.rtm_cls.1.weight: copying a param with shape torch.Size([80, 96, 1, 1]) from checkpoint, the shape in current model is torch.Size([1, 96, 1, 1]).\n", "size mismatch for bbox_head.rtm_cls.1.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([1]).\n", "size mismatch for bbox_head.rtm_cls.2.weight: copying a param with shape torch.Size([80, 96, 1, 1]) from checkpoint, the shape in current model is torch.Size([1, 96, 1, 1]).\n", "size mismatch for bbox_head.rtm_cls.2.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([1]).\n", "unexpected key in source state_dict: data_preprocessor.mean, data_preprocessor.std\n", "\n", "04/17 10:28:48 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Load checkpoint from ./checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth\n", "04/17 10:28:48 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - \"FileClient\" will be deprecated in future. Please use io functions in https://mmengine.readthedocs.io/en/latest/api/fileio.html#file-io\n", "04/17 10:28:48 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - \"HardDiskBackend\" is the alias of \"LocalBackend\" and the former will be deprecated in future.\n", "04/17 10:28:48 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Checkpoints will be saved to /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon.\n", "/usr/local/lib/python3.9/dist-packages/torch/functional.py:504: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at ../aten/src/ATen/native/TensorShape.cpp:3483.)\n", " return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]\n", "04/17 10:28:51 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [1][ 5/16] lr: 3.5556e-05 eta: 0:03:33 time: 0.6778 data_time: 0.2107 memory: 1422 loss: 2.7197 loss_cls: 2.0437 loss_bbox: 0.6761\n", "04/17 10:28:52 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [1][10/16] lr: 8.0000e-05 eta: 0:02:31 time: 0.4890 data_time: 0.1117 memory: 1422 loss: 2.7312 loss_cls: 2.0638 loss_bbox: 0.6673\n", "04/17 10:28:54 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [1][15/16] lr: 8.0000e-05 eta: 0:02:05 time: 0.4111 data_time: 0.0774 memory: 1422 loss: 2.7183 loss_cls: 2.0497 loss_bbox: 0.6687\n", "04/17 10:28:54 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "/usr/local/lib/python3.9/dist-packages/torch/utils/data/dataloader.py:561: UserWarning: This DataLoader will create 10 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n", " warnings.warn(_create_warning_msg(\n", "04/17 10:28:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.01s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.13s).\n", "Accumulating evaluation results...\n", "DONE (t=0.02s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.044\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.059\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.051\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.076\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.054\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.190\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.488\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.208\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.608\n", "04/17 10:28:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.044 0.059 0.051 0.000 0.076 0.054\n", "04/17 10:28:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [1][3/3] coco/bbox_mAP: 0.0440 coco/bbox_mAP_50: 0.0590 coco/bbox_mAP_75: 0.0510 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.0760 coco/bbox_mAP_l: 0.0540 data_time: 0.1730 time: 0.2618\n", "04/17 10:28:56 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.0440 coco/bbox_mAP at 1 epoch is saved to best_coco_bbox_mAP_epoch_1.pth.\n", "04/17 10:28:59 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [2][ 5/16] lr: 8.0000e-05 eta: 0:02:09 time: 0.4335 data_time: 0.0945 memory: 1422 loss: 2.7141 loss_cls: 2.0473 loss_bbox: 0.6668\n", "04/17 10:29:02 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [2][10/16] lr: 8.0000e-05 eta: 0:02:20 time: 0.4791 data_time: 0.1165 memory: 1422 loss: 2.7160 loss_cls: 2.0560 loss_bbox: 0.6600\n", "04/17 10:29:04 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [2][15/16] lr: 8.0000e-05 eta: 0:02:13 time: 0.4614 data_time: 0.0997 memory: 1422 loss: 2.7240 loss_cls: 2.0732 loss_bbox: 0.6507\n", "04/17 10:29:04 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:29:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.12s).\n", "Accumulating evaluation results...\n", "DONE (t=0.02s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.128\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.165\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.147\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.081\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.164\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.056\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.320\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.570\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.325\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.683\n", "04/17 10:29:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.128 0.165 0.147 0.000 0.081 0.164\n", "04/17 10:29:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [2][3/3] coco/bbox_mAP: 0.1280 coco/bbox_mAP_50: 0.1650 coco/bbox_mAP_75: 0.1470 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.0810 coco/bbox_mAP_l: 0.1640 data_time: 0.1576 time: 0.2254\n", "04/17 10:29:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_1.pth is removed\n", "04/17 10:29:06 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.1280 coco/bbox_mAP at 2 epoch is saved to best_coco_bbox_mAP_epoch_2.pth.\n", "04/17 10:29:08 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [3][ 5/16] lr: 8.0000e-05 eta: 0:02:06 time: 0.4462 data_time: 0.1025 memory: 1422 loss: 2.7154 loss_cls: 2.0725 loss_bbox: 0.6429\n", "04/17 10:29:10 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [3][10/16] lr: 8.0000e-05 eta: 0:02:01 time: 0.4378 data_time: 0.1003 memory: 1422 loss: 2.7268 loss_cls: 2.0980 loss_bbox: 0.6288\n", "04/17 10:29:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [3][15/16] lr: 8.0000e-05 eta: 0:01:54 time: 0.4192 data_time: 0.0922 memory: 1422 loss: 2.7336 loss_cls: 2.1177 loss_bbox: 0.6159\n", "04/17 10:29:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:29:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.13s).\n", "Accumulating evaluation results...\n", "DONE (t=0.02s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.308\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.381\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.356\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.098\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.409\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.146\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.370\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.646\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.292\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.800\n", "04/17 10:29:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.308 0.381 0.356 0.000 0.098 0.409\n", "04/17 10:29:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [3][3/3] coco/bbox_mAP: 0.3080 coco/bbox_mAP_50: 0.3810 coco/bbox_mAP_75: 0.3560 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.0980 coco/bbox_mAP_l: 0.4090 data_time: 0.1456 time: 0.2063\n", "04/17 10:29:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_2.pth is removed\n", "04/17 10:29:14 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.3080 coco/bbox_mAP at 3 epoch is saved to best_coco_bbox_mAP_epoch_3.pth.\n", "04/17 10:29:17 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [4][ 5/16] lr: 8.0000e-05 eta: 0:01:54 time: 0.3957 data_time: 0.0830 memory: 1422 loss: 2.7228 loss_cls: 2.1246 loss_bbox: 0.5982\n", "04/17 10:29:19 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [4][10/16] lr: 8.0000e-05 eta: 0:01:54 time: 0.4205 data_time: 0.0934 memory: 1422 loss: 2.7104 loss_cls: 2.1374 loss_bbox: 0.5730\n", "04/17 10:29:21 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [4][15/16] lr: 8.0000e-05 eta: 0:01:51 time: 0.4289 data_time: 0.1029 memory: 1422 loss: 2.6786 loss_cls: 2.1263 loss_bbox: 0.5524\n", "04/17 10:29:21 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:29:22 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.12s).\n", "Accumulating evaluation results...\n", "DONE (t=0.02s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.406\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.531\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.449\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.116\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.525\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.166\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.496\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.694\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.533\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.786\n", "04/17 10:29:22 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.406 0.531 0.449 0.000 0.116 0.525\n", "04/17 10:29:22 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [4][3/3] coco/bbox_mAP: 0.4060 coco/bbox_mAP_50: 0.5310 coco/bbox_mAP_75: 0.4490 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.1160 coco/bbox_mAP_l: 0.5250 data_time: 0.1390 time: 0.1964\n", "04/17 10:29:22 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_3.pth is removed\n", "04/17 10:29:23 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.4060 coco/bbox_mAP at 4 epoch is saved to best_coco_bbox_mAP_epoch_4.pth.\n", "04/17 10:29:26 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [5][ 5/16] lr: 8.0000e-05 eta: 0:01:46 time: 0.4261 data_time: 0.1005 memory: 1422 loss: 2.6337 loss_cls: 2.1077 loss_bbox: 0.5260\n", "04/17 10:29:27 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [5][10/16] lr: 8.0000e-05 eta: 0:01:43 time: 0.4038 data_time: 0.0969 memory: 1422 loss: 2.5711 loss_cls: 2.0661 loss_bbox: 0.5050\n", "04/17 10:29:29 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [5][15/16] lr: 8.0000e-05 eta: 0:01:39 time: 0.3730 data_time: 0.0887 memory: 1422 loss: 2.4938 loss_cls: 2.0094 loss_bbox: 0.4844\n", "04/17 10:29:29 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:29:29 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Saving checkpoint at 5 epochs\n", "04/17 10:29:31 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.01s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.25s).\n", "Accumulating evaluation results...\n", "DONE (t=0.03s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.426\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.547\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.476\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.110\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.556\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.170\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.508\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.678\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.417\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.803\n", "04/17 10:29:31 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.426 0.547 0.476 0.000 0.110 0.556\n", "04/17 10:29:31 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [5][3/3] coco/bbox_mAP: 0.4260 coco/bbox_mAP_50: 0.5470 coco/bbox_mAP_75: 0.4760 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.1100 coco/bbox_mAP_l: 0.5560 data_time: 0.1361 time: 0.1959\n", "04/17 10:29:31 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_4.pth is removed\n", "04/17 10:29:33 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.4260 coco/bbox_mAP at 5 epoch is saved to best_coco_bbox_mAP_epoch_5.pth.\n", "04/17 10:29:37 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [6][ 5/16] lr: 8.0000e-05 eta: 0:01:40 time: 0.4070 data_time: 0.1114 memory: 1422 loss: 2.4067 loss_cls: 1.9395 loss_bbox: 0.4673\n", "04/17 10:29:39 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [6][10/16] lr: 8.0000e-05 eta: 0:01:37 time: 0.4020 data_time: 0.1043 memory: 1422 loss: 2.3103 loss_cls: 1.8537 loss_bbox: 0.4566\n", "04/17 10:29:40 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [6][15/16] lr: 8.0000e-05 eta: 0:01:33 time: 0.4037 data_time: 0.1089 memory: 1422 loss: 2.2055 loss_cls: 1.7604 loss_bbox: 0.4451\n", "04/17 10:29:40 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:29:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.12s).\n", "Accumulating evaluation results...\n", "DONE (t=0.02s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.455\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.579\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.492\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.173\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.584\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.160\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.582\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.702\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.517\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.803\n", "04/17 10:29:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.455 0.579 0.492 0.000 0.173 0.584\n", "04/17 10:29:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [6][3/3] coco/bbox_mAP: 0.4550 coco/bbox_mAP_50: 0.5790 coco/bbox_mAP_75: 0.4920 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.1730 coco/bbox_mAP_l: 0.5840 data_time: 0.1338 time: 0.1915\n", "04/17 10:29:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_5.pth is removed\n", "04/17 10:29:42 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.4550 coco/bbox_mAP at 6 epoch is saved to best_coco_bbox_mAP_epoch_6.pth.\n", "04/17 10:29:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [7][ 5/16] lr: 8.0000e-05 eta: 0:01:30 time: 0.4004 data_time: 0.1114 memory: 1422 loss: 2.0828 loss_cls: 1.6540 loss_bbox: 0.4288\n", "04/17 10:29:46 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [7][10/16] lr: 8.0000e-05 eta: 0:01:27 time: 0.3826 data_time: 0.1077 memory: 1422 loss: 1.9577 loss_cls: 1.5354 loss_bbox: 0.4222\n", "04/17 10:29:48 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [7][15/16] lr: 8.0000e-05 eta: 0:01:24 time: 0.3629 data_time: 0.0973 memory: 1422 loss: 1.8775 loss_cls: 1.4601 loss_bbox: 0.4174\n", "04/17 10:29:48 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:29:49 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.01s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.25s).\n", "Accumulating evaluation results...\n", "DONE (t=0.03s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.494\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.658\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.558\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.186\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.613\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.174\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.578\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.726\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.575\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.817\n", "04/17 10:29:49 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.494 0.658 0.558 0.000 0.186 0.613\n", "04/17 10:29:49 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [7][3/3] coco/bbox_mAP: 0.4940 coco/bbox_mAP_50: 0.6580 coco/bbox_mAP_75: 0.5580 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.1860 coco/bbox_mAP_l: 0.6130 data_time: 0.1454 time: 0.2026\n", "04/17 10:29:49 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_6.pth is removed\n", "04/17 10:29:51 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.4940 coco/bbox_mAP at 7 epoch is saved to best_coco_bbox_mAP_epoch_7.pth.\n", "04/17 10:29:54 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [8][ 5/16] lr: 8.0000e-05 eta: 0:01:22 time: 0.3740 data_time: 0.1034 memory: 1422 loss: 1.7607 loss_cls: 1.3465 loss_bbox: 0.4142\n", "04/17 10:29:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [8][10/16] lr: 8.0000e-05 eta: 0:01:19 time: 0.3734 data_time: 0.1042 memory: 1422 loss: 1.6590 loss_cls: 1.2527 loss_bbox: 0.4064\n", "04/17 10:29:56 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [8][15/16] lr: 8.0000e-05 eta: 0:01:16 time: 0.3658 data_time: 0.0988 memory: 1422 loss: 1.5863 loss_cls: 1.1838 loss_bbox: 0.4025\n", "04/17 10:29:56 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:29:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.11s).\n", "Accumulating evaluation results...\n", "DONE (t=0.02s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.542\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.693\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.620\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.231\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.666\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.190\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.618\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.740\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.625\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.819\n", "04/17 10:29:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.542 0.693 0.620 0.000 0.231 0.666\n", "04/17 10:29:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [8][3/3] coco/bbox_mAP: 0.5420 coco/bbox_mAP_50: 0.6930 coco/bbox_mAP_75: 0.6200 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2310 coco/bbox_mAP_l: 0.6660 data_time: 0.1422 time: 0.1982\n", "04/17 10:29:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_7.pth is removed\n", "04/17 10:29:59 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.5420 coco/bbox_mAP at 8 epoch is saved to best_coco_bbox_mAP_epoch_8.pth.\n", "04/17 10:30:01 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [9][ 5/16] lr: 8.0000e-05 eta: 0:01:14 time: 0.3413 data_time: 0.0825 memory: 1422 loss: 1.4943 loss_cls: 1.1003 loss_bbox: 0.3940\n", "04/17 10:30:03 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [9][10/16] lr: 8.0000e-05 eta: 0:01:12 time: 0.3545 data_time: 0.0888 memory: 1422 loss: 1.4314 loss_cls: 1.0468 loss_bbox: 0.3846\n", "04/17 10:30:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [9][15/16] lr: 8.0000e-05 eta: 0:01:10 time: 0.3613 data_time: 0.0938 memory: 1422 loss: 1.3590 loss_cls: 0.9855 loss_bbox: 0.3735\n", "04/17 10:30:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:30:06 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.01s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.24s).\n", "Accumulating evaluation results...\n", "DONE (t=0.03s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.611\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.725\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.689\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.227\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.751\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.214\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.696\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.774\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.633\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.864\n", "04/17 10:30:07 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.611 0.725 0.689 0.000 0.227 0.751\n", "04/17 10:30:07 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [9][3/3] coco/bbox_mAP: 0.6110 coco/bbox_mAP_50: 0.7250 coco/bbox_mAP_75: 0.6890 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2270 coco/bbox_mAP_l: 0.7510 data_time: 0.1471 time: 0.2029\n", "04/17 10:30:07 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_8.pth is removed\n", "04/17 10:30:08 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.6110 coco/bbox_mAP at 9 epoch is saved to best_coco_bbox_mAP_epoch_9.pth.\n", "04/17 10:30:10 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [10][ 5/16] lr: 8.0000e-05 eta: 0:01:08 time: 0.3742 data_time: 0.0985 memory: 1422 loss: 1.2606 loss_cls: 0.8955 loss_bbox: 0.3651\n", "04/17 10:30:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [10][10/16] lr: 8.0000e-05 eta: 0:01:05 time: 0.3687 data_time: 0.0901 memory: 1422 loss: 1.2161 loss_cls: 0.8550 loss_bbox: 0.3611\n", "04/17 10:30:13 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [10][15/16] lr: 8.0000e-05 eta: 0:01:03 time: 0.3582 data_time: 0.0862 memory: 1422 loss: 1.1586 loss_cls: 0.8081 loss_bbox: 0.3505\n", "04/17 10:30:13 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:30:13 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Saving checkpoint at 10 epochs\n", "04/17 10:30:15 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.12s).\n", "Accumulating evaluation results...\n", "DONE (t=0.02s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.623\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.741\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.698\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.273\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.761\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.226\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.670\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.768\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.642\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.853\n", "04/17 10:30:16 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.623 0.741 0.698 0.000 0.273 0.761\n", "04/17 10:30:16 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [10][3/3] coco/bbox_mAP: 0.6230 coco/bbox_mAP_50: 0.7410 coco/bbox_mAP_75: 0.6980 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2730 coco/bbox_mAP_l: 0.7610 data_time: 0.1447 time: 0.2024\n", "04/17 10:30:16 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_9.pth is removed\n", "04/17 10:30:17 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.6230 coco/bbox_mAP at 10 epoch is saved to best_coco_bbox_mAP_epoch_10.pth.\n", "04/17 10:30:20 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [11][ 5/16] lr: 7.9883e-05 eta: 0:01:01 time: 0.3772 data_time: 0.0894 memory: 1422 loss: 1.0756 loss_cls: 0.7460 loss_bbox: 0.3297\n", "04/17 10:30:22 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [11][10/16] lr: 7.9408e-05 eta: 0:01:00 time: 0.3923 data_time: 0.0905 memory: 1422 loss: 1.0549 loss_cls: 0.7295 loss_bbox: 0.3254\n", "04/17 10:30:24 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [11][15/16] lr: 7.8573e-05 eta: 0:00:58 time: 0.4015 data_time: 0.1017 memory: 1422 loss: 1.0355 loss_cls: 0.7114 loss_bbox: 0.3241\n", "04/17 10:30:24 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:30:25 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.11s).\n", "Accumulating evaluation results...\n", "DONE (t=0.02s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.645\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.772\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.709\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.231\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.778\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.226\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.686\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.782\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.692\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.856\n", "04/17 10:30:25 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.645 0.772 0.709 0.000 0.231 0.778\n", "04/17 10:30:25 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [11][3/3] coco/bbox_mAP: 0.6450 coco/bbox_mAP_50: 0.7720 coco/bbox_mAP_75: 0.7090 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2310 coco/bbox_mAP_l: 0.7780 data_time: 0.1423 time: 0.1990\n", "04/17 10:30:25 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_10.pth is removed\n", "04/17 10:30:26 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.6450 coco/bbox_mAP at 11 epoch is saved to best_coco_bbox_mAP_epoch_11.pth.\n", "04/17 10:30:29 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [12][ 5/16] lr: 7.7107e-05 eta: 0:00:55 time: 0.4071 data_time: 0.1000 memory: 1422 loss: 0.9773 loss_cls: 0.6681 loss_bbox: 0.3092\n", "04/17 10:30:30 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [12][10/16] lr: 7.5513e-05 eta: 0:00:53 time: 0.4009 data_time: 0.0986 memory: 1422 loss: 0.9503 loss_cls: 0.6470 loss_bbox: 0.3033\n", "04/17 10:30:32 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [12][15/16] lr: 7.3596e-05 eta: 0:00:50 time: 0.3808 data_time: 0.0966 memory: 1422 loss: 0.9250 loss_cls: 0.6268 loss_bbox: 0.2982\n", "04/17 10:30:32 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:30:32 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.12s).\n", "Accumulating evaluation results...\n", "DONE (t=0.02s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.617\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.751\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.696\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.218\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.750\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.210\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.662\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.760\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.633\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.844\n", "04/17 10:30:33 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.617 0.751 0.696 0.000 0.218 0.750\n", "04/17 10:30:33 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [12][3/3] coco/bbox_mAP: 0.6170 coco/bbox_mAP_50: 0.7510 coco/bbox_mAP_75: 0.6960 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2180 coco/bbox_mAP_l: 0.7500 data_time: 0.1405 time: 0.1964\n", "04/17 10:30:36 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [13][ 5/16] lr: 7.0895e-05 eta: 0:00:49 time: 0.4001 data_time: 0.1021 memory: 1422 loss: 0.9386 loss_cls: 0.6415 loss_bbox: 0.2971\n", "04/17 10:30:39 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [13][10/16] lr: 6.8337e-05 eta: 0:00:47 time: 0.4275 data_time: 0.1168 memory: 1422 loss: 0.9174 loss_cls: 0.6254 loss_bbox: 0.2920\n", "04/17 10:30:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [13][15/16] lr: 6.5526e-05 eta: 0:00:45 time: 0.4284 data_time: 0.1216 memory: 1422 loss: 0.9057 loss_cls: 0.6122 loss_bbox: 0.2935\n", "04/17 10:30:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:30:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.11s).\n", "Accumulating evaluation results...\n", "DONE (t=0.02s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.635\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.755\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.718\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.242\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.771\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.210\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.680\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.774\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.642\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.861\n", "04/17 10:30:42 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.635 0.755 0.718 0.000 0.242 0.771\n", "04/17 10:30:42 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [13][3/3] coco/bbox_mAP: 0.6350 coco/bbox_mAP_50: 0.7550 coco/bbox_mAP_75: 0.7180 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2420 coco/bbox_mAP_l: 0.7710 data_time: 0.1386 time: 0.1939\n", "04/17 10:30:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [14][ 5/16] lr: 6.1855e-05 eta: 0:00:43 time: 0.4110 data_time: 0.1137 memory: 1422 loss: 0.9190 loss_cls: 0.6193 loss_bbox: 0.2997\n", "04/17 10:30:45 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [14][10/16] lr: 5.8584e-05 eta: 0:00:40 time: 0.4015 data_time: 0.1135 memory: 1422 loss: 0.9312 loss_cls: 0.6258 loss_bbox: 0.3054\n", "04/17 10:30:47 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [14][15/16] lr: 5.5152e-05 eta: 0:00:38 time: 0.3801 data_time: 0.1030 memory: 1422 loss: 0.9122 loss_cls: 0.6111 loss_bbox: 0.3011\n", "04/17 10:30:47 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:30:47 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.11s).\n", "Accumulating evaluation results...\n", "DONE (t=0.02s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.636\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.739\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.708\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.220\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.782\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.222\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.690\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.788\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.683\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.867\n", "04/17 10:30:47 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.636 0.739 0.708 0.000 0.220 0.782\n", "04/17 10:30:47 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [14][3/3] coco/bbox_mAP: 0.6360 coco/bbox_mAP_50: 0.7390 coco/bbox_mAP_75: 0.7080 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2200 coco/bbox_mAP_l: 0.7820 data_time: 0.1371 time: 0.1918\n", "04/17 10:30:50 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [15][ 5/16] lr: 5.0871e-05 eta: 0:00:36 time: 0.3939 data_time: 0.1054 memory: 1422 loss: 0.8896 loss_cls: 0.5903 loss_bbox: 0.2993\n", "04/17 10:30:53 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [15][10/16] lr: 4.7206e-05 eta: 0:00:34 time: 0.4165 data_time: 0.1144 memory: 1422 loss: 0.8796 loss_cls: 0.5829 loss_bbox: 0.2967\n", "04/17 10:30:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [15][15/16] lr: 4.3492e-05 eta: 0:00:32 time: 0.4306 data_time: 0.1161 memory: 1422 loss: 0.8680 loss_cls: 0.5699 loss_bbox: 0.2981\n", "04/17 10:30:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:30:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Saving checkpoint at 15 epochs\n", "04/17 10:30:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.11s).\n", "Accumulating evaluation results...\n", "DONE (t=0.01s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.644\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.750\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.701\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.232\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.788\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.224\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.686\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.790\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.692\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.867\n", "04/17 10:30:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.644 0.750 0.701 0.000 0.232 0.788\n", "04/17 10:30:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [15][3/3] coco/bbox_mAP: 0.6440 coco/bbox_mAP_50: 0.7500 coco/bbox_mAP_75: 0.7010 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2320 coco/bbox_mAP_l: 0.7880 data_time: 0.1364 time: 0.1922\n", "04/17 10:30:59 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [16][ 5/16] lr: 3.9019e-05 eta: 0:00:30 time: 0.4257 data_time: 0.1152 memory: 1422 loss: 0.8383 loss_cls: 0.5478 loss_bbox: 0.2904\n", "04/17 10:31:01 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [16][10/16] lr: 3.5320e-05 eta: 0:00:28 time: 0.3921 data_time: 0.0945 memory: 1422 loss: 0.8302 loss_cls: 0.5349 loss_bbox: 0.2953\n", "04/17 10:31:03 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [16][15/16] lr: 3.1685e-05 eta: 0:00:25 time: 0.3721 data_time: 0.0851 memory: 1422 loss: 0.8413 loss_cls: 0.5464 loss_bbox: 0.2949\n", "04/17 10:31:03 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:31:03 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.12s).\n", "Accumulating evaluation results...\n", "DONE (t=0.01s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.667\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.769\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.741\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.264\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.800\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.218\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.714\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.802\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.708\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.878\n", "04/17 10:31:03 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.667 0.769 0.741 0.000 0.264 0.800\n", "04/17 10:31:03 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [16][3/3] coco/bbox_mAP: 0.6670 coco/bbox_mAP_50: 0.7690 coco/bbox_mAP_75: 0.7410 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2640 coco/bbox_mAP_l: 0.8000 data_time: 0.1355 time: 0.1909\n", "04/17 10:31:03 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_11.pth is removed\n", "04/17 10:31:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.6670 coco/bbox_mAP at 16 epoch is saved to best_coco_bbox_mAP_epoch_16.pth.\n", "04/17 10:31:08 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [17][ 5/16] lr: 2.7458e-05 eta: 0:00:23 time: 0.3927 data_time: 0.0868 memory: 1422 loss: 0.8335 loss_cls: 0.5406 loss_bbox: 0.2929\n", "04/17 10:31:10 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [17][10/16] lr: 2.4087e-05 eta: 0:00:21 time: 0.4168 data_time: 0.0975 memory: 1422 loss: 0.8255 loss_cls: 0.5369 loss_bbox: 0.2886\n", "04/17 10:31:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [17][15/16] lr: 2.0888e-05 eta: 0:00:19 time: 0.4215 data_time: 0.0995 memory: 1422 loss: 0.7952 loss_cls: 0.5153 loss_bbox: 0.2799\n", "04/17 10:31:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:31:13 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.11s).\n", "Accumulating evaluation results...\n", "DONE (t=0.02s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.670\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.769\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.736\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.262\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.811\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.220\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.702\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.796\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.667\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.883\n", "04/17 10:31:13 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.670 0.769 0.736 0.000 0.262 0.811\n", "04/17 10:31:13 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [17][3/3] coco/bbox_mAP: 0.6700 coco/bbox_mAP_50: 0.7690 coco/bbox_mAP_75: 0.7360 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2620 coco/bbox_mAP_l: 0.8110 data_time: 0.1274 time: 0.1807\n", "04/17 10:31:13 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_16.pth is removed\n", "04/17 10:31:14 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.6700 coco/bbox_mAP at 17 epoch is saved to best_coco_bbox_mAP_epoch_17.pth.\n", "04/17 10:31:17 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [18][ 5/16] lr: 1.7321e-05 eta: 0:00:17 time: 0.4258 data_time: 0.0986 memory: 1422 loss: 0.8050 loss_cls: 0.5228 loss_bbox: 0.2821\n", "04/17 10:31:18 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [18][10/16] lr: 1.4608e-05 eta: 0:00:15 time: 0.3996 data_time: 0.0886 memory: 1422 loss: 0.8288 loss_cls: 0.5427 loss_bbox: 0.2861\n", "04/17 10:31:19 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [18][15/16] lr: 1.2158e-05 eta: 0:00:13 time: 0.3710 data_time: 0.0774 memory: 1422 loss: 0.8460 loss_cls: 0.5555 loss_bbox: 0.2906\n", "04/17 10:31:19 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:31:20 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.11s).\n", "Accumulating evaluation results...\n", "DONE (t=0.02s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.657\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.755\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.720\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.243\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.802\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.222\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.696\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.788\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.658\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.875\n", "04/17 10:31:20 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.657 0.755 0.720 0.000 0.243 0.802\n", "04/17 10:31:20 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [18][3/3] coco/bbox_mAP: 0.6570 coco/bbox_mAP_50: 0.7550 coco/bbox_mAP_75: 0.7200 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2430 coco/bbox_mAP_l: 0.8020 data_time: 0.1262 time: 0.1788\n", "04/17 10:31:23 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [19][ 5/16] lr: 9.5997e-06 eta: 0:00:10 time: 0.3893 data_time: 0.0942 memory: 1422 loss: 0.8529 loss_cls: 0.5586 loss_bbox: 0.2943\n", "04/17 10:31:25 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [19][10/16] lr: 7.8096e-06 eta: 0:00:08 time: 0.3976 data_time: 0.0917 memory: 1422 loss: 0.8404 loss_cls: 0.5487 loss_bbox: 0.2917\n", "04/17 10:31:28 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [19][15/16] lr: 6.3487e-06 eta: 0:00:06 time: 0.4112 data_time: 0.0973 memory: 1422 loss: 0.8332 loss_cls: 0.5454 loss_bbox: 0.2878\n", "04/17 10:31:28 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:31:28 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.11s).\n", "Accumulating evaluation results...\n", "DONE (t=0.02s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.648\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.758\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.714\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.278\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.786\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.220\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.682\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.788\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.692\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.864\n", "04/17 10:31:28 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.648 0.758 0.714 0.000 0.278 0.786\n", "04/17 10:31:28 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [19][3/3] coco/bbox_mAP: 0.6480 coco/bbox_mAP_50: 0.7580 coco/bbox_mAP_75: 0.7140 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2780 coco/bbox_mAP_l: 0.7860 data_time: 0.1265 time: 0.1790\n", "04/17 10:31:28 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Switch pipeline now!\n", "04/17 10:31:30 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [20][ 5/16] lr: 5.0499e-06 eta: 0:00:04 time: 0.3946 data_time: 0.0911 memory: 1422 loss: 0.8398 loss_cls: 0.5569 loss_bbox: 0.2829\n", "04/17 10:31:31 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [20][10/16] lr: 4.3584e-06 eta: 0:00:02 time: 0.3541 data_time: 0.0729 memory: 1422 loss: 0.8475 loss_cls: 0.5686 loss_bbox: 0.2789\n", "04/17 10:31:32 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [20][15/16] lr: 4.0293e-06 eta: 0:00:00 time: 0.3273 data_time: 0.0671 memory: 1422 loss: 0.8943 loss_cls: 0.6161 loss_bbox: 0.2783\n", "04/17 10:31:32 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n", "04/17 10:31:32 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Saving checkpoint at 20 epochs\n", "04/17 10:31:34 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n", "Loading and preparing results...\n", "DONE (t=0.00s)\n", "creating index...\n", "index created!\n", "Running per image evaluation...\n", "Evaluate annotation type *bbox*\n", "DONE (t=0.11s).\n", "Accumulating evaluation results...\n", "DONE (t=0.01s).\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.652\n", " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.794\n", " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.750\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.241\n", " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.785\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.222\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.706\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.782\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.675\n", " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.861\n", "04/17 10:31:34 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.652 0.794 0.750 0.000 0.241 0.785\n", "04/17 10:31:34 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [20][3/3] coco/bbox_mAP: 0.6520 coco/bbox_mAP_50: 0.7940 coco/bbox_mAP_75: 0.7500 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2410 coco/bbox_mAP_l: 0.7850 data_time: 0.1265 time: 0.1808\n" ] } ], "source": [ "!python tools/train.py configs/rtmdet/rtmdet_tiny_1xb4-20e_balloon.py" ] }, { "cell_type": "markdown", "metadata": { "id": "_vYQF5K2NqqI" }, "source": [ "### Understand the log\n", "From the log, we can have a basic understanding on the training process and know how well the detector is trained.\n", "\n", "First, since the dataset we are using is small, we loaded a pre-trained Faster R-CNN model and fine-tune it for detection. \n", "The original Faster R-CNN is trained on COCO dataset that contains 80 classes but KITTI Tiny dataset only have 3 classes. Therefore, the last FC layers of the pre-trained Faster R-CNN for classification and regression have different weight shape and are not used.\n", "\n", "Second, after training, the detector is evaluated by the default VOC-style evaluation. The results show that the detector achieves 58.1 mAP on the val dataset, not bad!\n", "\n", "We can also check the tensorboard to see the curves." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 821, "resources": { "https://localhost:6006/?tensorboardColab=true": { "data": "PCFkb2N0eXBlIGh0bWw+PG1ldGEgbmFtZT0idGItcmVsYXRpdmUtcm9vdCIgY29udGVudD0iLi8iPjwhZG9jdHlwZSBodG1sPjwhLS0KQGxpY2Vuc2UKQ29weXJpZ2h0IDIwMTkgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+VGVuc29yQm9hcmQ8L3RpdGxlPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbm9uY2U9ImFmZGZlZWY2NDc1YTQxZjBhY2M4MjBhYzdiNCIgc3JjPSIvL2luamVjdGlvbnMuYWRndWFyZC5vcmc/dHM9MTY4MTcyNDU4ODU5NyZhbXA7dHlwZT1jb250ZW50LXNjcmlwdCZhbXA7ZG1uPWNvbGFiLnJlc2VhcmNoLmdvb2dsZS5jb20mYW1wO3B0aD0lMkZ0dW4lMkZtJTJGZ3B1LXQ0LXMtMzlzeTg5NTIyMnB4eSUyRl9wcm94eSUyRjYwMDYlMkYlM0Z0ZW5zb3Jib2FyZENvbGFiJTNEdHJ1ZSUyNmF1dGh1c2VyJTNEMCZhbXA7YXBwPWNocm9tZS5leGUmYW1wO2Nzcz0zJmFtcDtqcz0xJmFtcDtyZWw9MSZhbXA7cmppPTEmYW1wO3NiZT0xJmFtcDtzdGVhbHRoPTEmYW1wO3VhZz0iPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbm9uY2U9ImFmZGZlZWY2NDc1YTQxZjBhY2M4MjBhYzdiNCIgc3JjPSIvL2luamVjdGlvbnMuYWRndWFyZC5vcmc/dHM9MTY4MTcyNDU4ODU5NyZhbXA7bmFtZT1BZEd1YXJkJTIwQXNzaXN0YW50JmFtcDtuYW1lPUFkR3VhcmQlMjBFeHRyYSZhbXA7dHlwZT11c2VyLXNjcmlwdCI+PC9zY3JpcHQ+PGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQU1RQUFBREVDQVlBQUFEQXBvNXJBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQmFiZ0FBV200QnhXc2pPQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUJsMFNVUkJWSGljN1oxNWVGVFYzY2MvdjVzRkNWUnhxVnRwdFZXMlZseGY2MXF0aXEwTDlHbDlOWFVCRkVwRlJUSWhoQkFEQ1RkQU1BRWtDWXNLN3FCOStrRDcycWZCV2l2cVc3VmE2NzRpcmU5cmF4WDFiWlZXWlRITC9ONC81ZzRHU0dEdXpMMXo3NTA1bjM4NHpNdzU1OHZNL1hLMjN6a0hESUdqaXpoUEYzRmUwRG9NSUVFTHlHZDBQb093YUFBdWNWNWFoMFc1VlBCNmtMcnlHV09JQUZDYi92U2pFcWdHK3V6d0t3Z2R3QzEwVUNmVi9Ec1loZm1MTVVRV1VSdUxFa1lEOHhFTzJ2N0dqb1p3UHN4SFdNeGhJRXVsbEs1czZzeG5qQ0d5aEM3Z0pKUlc0Q1NnWnhQMG5INEppNWlVODdqZkdnM0dFTDZqVFF3RTVnR2prVzdmZCtxR1NMS1dJc3BrTW0vN0lOUGdZQXpoRTJwVFFoK3FzS2dDK2dMdVRiQnJlaXV3bUhZYVpEcWZlaXJZQUJoRGVJNHFRaU1YQXdzUUR2UEFCRDJsTnlMVXM0bmJ4U2FldVdwREVtTUlEOUViT1FGb1JUaHQrNHYrR0NMNTU3TkF1Y1I0S2kzQmhsMHdodkFBYmVBUUxHeGdBbUQ1YW9MdTZjU2ZpdkFMbEVxSjhZNUw2WWFkTUliSUFMVXBwb2hyRVdZajdMMzlqZXdhSXBuZWpMS1F2V21VY1d4TDZSOWcyQVZqaURUUnVZekNvZ1g0QnBBOUUzUlA5L3orMzRHWlVzYktYcVFiZG9NeGhFdTBnYU1SbWxITzl2QUIvNk9UT3RrRFF5VFN5aU1vNVJManRaNytIWWFlc1lJV0VCWFVaaitkU3l2d1BNclpIaFc3RVdFaW4zRWFVemtWb1JUNG15Y2xDK2RnOGJJdVphWGV3b0dlbEprSG1CWmlENmhOSVVXTVIya0FEdkNvVmRpS3NKajRydXNKdXB3U1BxTUtxRUtjOVl2ZXlrbTl6azFBRXdmU0xLVzBZK2dWWTRqZG9QV2NnMFVMd2xIYlg4emNFR3NSeW1UYTdsZWN0WW1CRkRrcjNPeXd4cDJPSVpMcERRaFQ1VG9lMkYzZCtZd3hSQS9vSEFaQnQ3QnNiMXFGRnltZ1hDcmR4U1RwSXM0RVdoQ08zYVhNOUxXc280Q1lYTU1iYnJUa0E4WVEzVkNiL2dpVnlFNWgyWmtaNGlPRU9SeWVmdFNxMmxnTVlEVEtmT0FnajNSMW9OeENJWFV5MFlTWkp6R0d3SG5nTE9lQjZ5a3NPNzBITC9IQWlYZjdHblFaL1dudndiRHBhd1NjTVBQOVRKZzVHRU9nczFNSXkzYi9zSzBqVGt4cS9PbVNhQ3VEVUJxUTdUdnR2T2pXdlloUUx0ZmtkNWg1M2hwQ2JSZGgyYWsvVkJ0UUtxU0czM2dxdGhlMGxYT0FGdUFvRDlkRTFsSkFtZncwUDhQTTg4NFFhbE1DenJSbXFtSFplMzZRTmlFMDhUbk5ZbWQzV2xOdEN0bVg4WWd6TGR5N1JqZnBSSmg1RVEzeWsvd0tNODhiUXlnSWRWeU14UUxVWlZoMjcrOTNvdHlKTUZOcStJZlhtdDJnaTlpUFFtWUIxeUVVYm44ak0zTzhoMUxEUkZhSm9KNEtEaWw1WVFpdDVRUWtnN0Rzbmw5N0ZJdHlxZVpWVDhWbWlDNWhLRW96NGh4cjQwMVg2bG1VbUZ6RDB4NUtEU1U1YlFpdDRSQ0tzTkVNdzdKM2ZPMHRsQnFaeVJxUDVYcUtMbVlVUWd2aUJCOUNwdVpRNEY0NnFKSkpmT0NwMkJDUms0WlFtMkk2UFF6TFR2eVpDSy9laHh1bGpNODlsdXdMYWxQTS9zNzNBSHQ3MUZwc1JsaElZVzZHbWVlY0lYU0c1MkhaY1lUN0VLYkpERDcwVm0xMjBPVWNRZ2MyNHJTVTRNWDM4aFpDalV3SWQwdnBscHd4aE43QVVBcG9Cczd6Y0FyeUdaU1kxUEdNaDFJRFEyOTJ0cmdxcDNuMkhWazhTcHdwOGxOZThWQnFZRVRlRUdxekh4M01RcmdPbk5tVnpIL3NkNEVaMU9iZTdJb3F3aTNPSVFod0dPREY5OVdKT0xOdDQ0T2RiY3VVeUJwQ2JRcnBZRHg0R3BhOUJWakFsMmlTQ3JaNktEZDA2SEpLNktRS1NTSE1QTlcweFNiaU5MRjNkTVBNSTJrSXJYRldhTDBMeTFiZ0Z4UXdUV1o2dEVFbkl1amlGTUxNM2FZVFllWVZNaTQ3Sy9aZUVpbEQ2RXdHRWZjOExQczVMTXFsamo5NHB6UjY2TTJjNlV4RzdCcG03amI5eFd2cktLUk14ckxlTzZYK0VnbERxTzFFZVNyVkNIMjJ2NUdaSVRZQzlXQU8rMHFpTmhZSE80Y3hkdzh6aDB6V2JSSlJ2eDNSQ0RNUHRTSFV4bUlybzdHY0h3aThhQlhhZ1ZzcFlhWTVEckpuZEJuOXNhakVjc0xNSVJOREpFbUVtZmNOZDVoNWFBMmhOM1FMeS9adUduVXRRa3hzL3RkRHFUbUwzc29neE9taVptNklaUG9GbEhJWnh4TmVhdldLMEJsQ3F4aUkxVzJRQjE2MENpK2hsTXNjZnUrcDJEeEJWekRDaVk5S1RHSmtab2hrZWkxeEpzczQvdXFsMWt3SmpTSFVwb1F0empRZzlQV29WVWhzMzF6UFVsa1QzbVk2Q3FoTklWOXhUaDhSSjh3Y01qRUVKS2E1bDlDWHVWTEtaOTRxVG8vQURhRWdUT05peEZrb2N2K2w5cFJPWEV2VlRwMDBoWDhnRnlYMGR2WkRtUVZNQWdveU5FUXkvUjVDRGFPRFh3Z04xQkE2bFJPd2VnbkxUdDhRNnhES1pZNjV1TkJQOURhR0FZdVFicmVuWnY3Yi9RbUxtSXplZnBKaDFnbkVFRnJ1aEdYdjdyUnM5MS9xQnVKTWxYbm16S0Zzb3JjekNweGdTbTlhZDBXY01QTngyUTh6ejZvaG5PN1JOSlJhaFA0OXFuRC9wWDRNMUZQRXpXTFQ2YTFpUXlyb1hleEZuQXJnQnFDL1IrTy9UN0NZUXhHTHN4a0drdlVXUWlzNHpqa043NHdlVmFSdWlFUllkaEdWWXZOL2ZtZzF1RU9YY3dpRlBvV1pYNUdkTVBQQXhoQmF5U2lFVnVEcnJnMmhQSW93UmVibFJzaHhycUYzY3dKZHp0alF1eldrUjFIS1piUy9XM2FESFZUYkZMT1pheEhtQUYvYVFWSFBYOHhiV05SSVEyNXRTc2xGVkJIdTlpSE1ITzZraUpsUzZrK1llZURUcmdCYXhhSEFMR0FDMG1OVG05aTJXRXlqMkxtM2JUR1gwZVdVVUp6aWFlYXBwemVoMUhNb3krUXNiOGVOb1RCRUVxM2lQNXh1MUttT3NzVEc5aTZxWkVIdWJtelBCL1EyQmxMTVBOVERNSE40RTRzS3VaUUh2ZElaS2tPQU14TTFuVEVJRjJOaHl6eGVDRnFUd1R2MExyN3JoSmtmcy8zRnpNMXhQM0VxNVlyTVk5UkNad2hEN3FNMkZvYzdZZWFTUVpqNWp1a09MRzZoZzFvWnpTZnBhak9HTUFTR3JxWS9XN3VkWmc2WnR4YkMreWcyRm5la0UyWnVER0VJSEwyUFFYU2xFV2ErdXpROGowVzVsUEtrR3kzR0VJYlFvUGR3UHNJaWhLRkFwb2FBeEtYMkUrVEgzSm1xQnRlM2tHbzVFN1NjSDdyTlp6RHNDYm1TQjluSzBjQkU0SjllRkFrYzZpYUQrMnQ1bFNOUjd0Y1k2L1I2eDhrR2cwZklSRHBrREN2b3d4QmdNV1IzSDBzNmhpaHlVdWRRd0NzYW8xV3Y2eGFvWnpCNGdKVHlzWXdtUnB6aHdHK3pWYTk3UTFqYkRRRlFCSlJSeEhxTk1kWXpWUWFEZzR4bHZZem1mSVFmZ1A5NzRUTnBJYm96RUxoSHkzallkS01NZmlDWDAwWVJ3NEJ5U0grZFlVKzROd1E5R2lLQk1JSUNYdFlwTktyTlh1bkxNaGgyUlVwcGx5dG9SUmdHL3B5bDVhMGhFaFNqVE9kZnZLNHhScVlqeW1EWUhYSVpHOEdmdmRkK0dDTEpOeERhZEFwdFdzblgwNmpIWU1nNlhvMGhkc2RJdW5oZEs3Qk5OOG9RZGpLZFpVcVZ2aWl6K0lUWHRKSUwwOGh2TUdTRmJMUVEzVG1DT0d1MWdqWXQ1L0FNeWpFWWZNSFBNY1R1R0VrQmIyaWw2VVlad2tWUWhvQmtOK3BUWHRWcFhPQlJtUVpEUmdScGlDUkhvanlnVTJuVGF0T05NZ1JMdHNjUXZTT01wSlBYdFFwYkozZTdGTVZneUNMdURTRStHU0pCQ2Nvcyt2Q2FUdXQyWnFqQmtDWEMwR1hhRmVGSTRFR3RvazJuT21mNkdBeFpJSnlHK0lMRWJKVHBSaG15Uk5nTkFWQUN6S0tFVjNVNjM4OXkzWVk4SXdxR1NESUkrSzFXMDZiVCtWcEFHZ3c1VHBRTWtVQVppYkJlcTdIVnBqaFFMWWFjSTNxR1NKRG9SbTNqVmEzbWUwR0xNZVFPVVRWRWtzRUlEK2tOdE9rTXZocTBHRVAwaWJvaGtvd2t6bnF0TWQwb1EyYmtpaUVBK2dHemFPY1ZyZUhjb01VWW9va3JRMmppNEtkQ243UjR4UkRnZHpyRGRLTU03bkhYUWx3ZGVqTjBaeVN3WG1lYWJsUmVFM2QzR0lIYkxsTll1MHU5MFE5bEZsMjhyRE1aRWJRWVExYlpqRkxQTmhhNXllVE9FUHRHemhBSmxLSEE3M1FtSzdXR2c0S1dZL0FWQlZiUndTQzVERnZHdWJ1Q3paMGhPaU5xaUFRQ2pLR0FEVHFUbU5xUjZ2NFpVa0g1RXhhbnlhV01sVEc4bjA0UjdnelJGV2xESk5rSG9ZVXVudE5hVGd0YWpNRVQza1c0a2tzNVdVcDVPcE9DM0JuQ3I4MUJ3WEFNd2hOYVo3cFJrVVhaQXRSVHdHQzVsSlVpbVI5ZTVzNFE4Wnd5QkNTN1VZVzhxWFhFOUJJS2doWmtTQkZoRlVVTWxzdXdwWlN0M2hYckFyMmVvUlN3M2xXcDBVcS9oREJKYko3Q2tKZTRheUdLY3E2RjJKbGpnU2ZWWnFYYUhCaTBHRVAyeWVjeFJNK28wNDJDRFZwUFRGZWJibFErWVF6Uk93TlFXbGpQc3pxYlU0SVdZOGdPdWI1UzdRWEhvZnhCNjFtcDgvaHkwR0lNL21KYWlOUklkS002MmFCelREY3FsM0ZuQ01uN0lMbDlVVnJZd0o5MExpY0hMY2JnUGFiTGxBN0s4U2hQNlJ6VGpjbzFUSmNwZlJMZHFDN1RqY29sVEF1Uk9mc2l0UEFYbnRIWm5CUzBHRU5tdURORWVyY0g1UWZLQ1ZnOHBYTlpxVFlIQkMzSGtCNm1oZkFXQzJFTVJXelFCbUpxcDdWblBWUm9Nd09DMXBBSnVwcUQzWHplN1ErMjV6MEVycUtqY3BiOWdCYUtlVkliT1Nab01lbWdTemhVbDdLY1l1WUVyU1VkZEJWRDlHYzhRQWRUM2VSek82aDJOKzFxekhFS1NsblFJdHlnTnNXNmhCZ1dieUpjVFhvbnN3U0czc2UrZWgrTldMd0M3bSttY3JkclRDbEsreUhmTWQ5bTRER2dqUzZlb0lqSDBCemRreENuUFdnSnFhTExHSVhTQ3RHN1YxeHRMSTVnTkxBQTBnL01kTHVOTXBNeHhOc29Ed05yMlllSHhQN2lRZEZLS29EN01pZzd2QWdkUVV2WUU3cU1ZNG5UZ25KbTBGclNRZS9qTE9LMElCeWRhVm51REdGUjVHSlBVaGVKL1FWckVkcmtKcDd2N1lPeWtKOXBKWmRERHQ1aExlRnRJWFFwK3dOMXhKa0UwVnRIMFpWOERZdTVLR084NnA2Nzd6THRuczJJMHhVcTVOZXlnQTljS0xtZUxyNUw0Z1MrM0VIRDEwTG9jb3BvNXpyaTFDUHNFN1FldCtoSytpRk1BNmFqN09YbFdOV0xMdFBiQ0E4anUzYUYzQ0NOL0ZXcmFFQ1psM2doblZKQ1NNZ01vWXNad2VlMEFOOEtXb3RiVkJIdVpReEtFN2liVGsyVmRBenhSVmNvVHBzczdyMHI1Sm9TRnJDWlVoSTcxM0lES3h5RzBLVU1wb3RGS0JkRzhUOGJ2WXNUV1VVcitMczN4WjBodXJpYkl1WkxNeC83SVVac09yV1M2eENlcFB0MFgyLzdvS05Cb0dNSWJXWUFRalZkVElIb1JTdnJQWHdGdUJFWVRSWitmVmVHa0tXODZaZVE3WFVzNUdtZHhuTGdXci9yeWdvQmRablV4bUpBNXRPUVFhR3I2Y3RXeW9BWndKZXlWVzg0RjEyMlVZM3czaDQvRjRYV0lvQlpKcjJKczlpSEY0QjdpS0laN21JVVczZ0RwWkVzbWdGQ2FnaFp3aWRBaGJ0TS9takptQ3kyRUhvVFg5Vm1WbUx4S0VRdlpFVHY1SGk5aThjUmZnMGNIb1NHMEo1dktrMnMxbW1NUmhqbFByTVBndElsQzRiUUJmVERZaHJDZEdBdnYrdnpHcjJIL2VtaURnbCtQU1MwaGdEQTRucVVzNEQrYVpjUnZEbDg2ektwSWl6aVlvU0ZFTDJyaW5VNVJSUnpIVjNoV1E4SlpaY3BpVFR4RGtLOWR3VjZWbExxK0RUdHFnczVrVVU4Q2F3bWltYTRreEVVOFJKS0M0VERESkJsUTZoTm9icDlMUHZTQXJ6b3VaanNtR01UeXF0ZUZxaE5IS29MV1k3d1IrQlVMOHZPQm5vSFEvUjJIbkRpMnI0WnRKNmQ4ZDBRT3BrK09vVVJXa0Vybi9BdVU3aktUWDZ4NlVTNW1zU0NvRC80WVE3bEF5ek9raHJlOEt6SWhWeEVBWCtHNklWbEEranRqQWRlUTl5SFpXY0xYNzVVblVKZm5jSW9uY0pLQ3ZrUWVCZ29BdzVDYU5ZcUJyb3BUK2J6SEhDekgxcDNyY3lUVXQ2bWdPOUlOUzk3VXRvWEhFTzBZNzJHRWZKeHEyZml0SndCS09jaWpFTDVFZEMvbDRkckg3cTRCVnpPSGlrekVINEU3c3lVRWVtWjR6VUsrYjVNWjZQSGFneFpJS01XUWlleHY4WVlxekhhVUQ0a01jQWJ3NTVuaFVacUJUOTJVNWZNNTFNazlMdlBIcWVBMDQwWm9vdHJRK2hrQm1vWlYydU1OZ3A1bjhScTZFamN4c2tJUzdYUzNTcXFOSEkveXE5YzFlTVZlMjR0MWxMQ2VWTE52N09neHVBVDdpNXVMK2NpTE41QldFN0NCSm5zb0R1QU9NMnVjeW1USU9DSGJtZHpLUGZ5WlM2U0N1OXVzakVFZzlzcnRmcmg1WnlNY0xsTzVZZXVzc3huSThvc3p6Umtpc1VTdXJoU0pvWWp6TnVRR2NGUDNRazNhelg3dXNyVGx5WEFILzBSbERJSzFNc015c1FtSHJBV2cwY0Vid2c0aEU2YTNHUVFtemdXRXlHdy81VzdVSzZSV3V5QTZqZjRSQmdNQVRCQnAvRTlOeGxrSHE4QVMzelNzenZhRVM2VE9sWUVVTGZCWjhKaUNDSE9jclZkQnZIMW9SWjQyeDlKUGJJWllaVE1aRTBXNnpSa2tiQVlBb1REMmN4Y1YxbHN0amdodzluZ1l5eEdTQzIveTFKOWhnQUlqeUVTVE5icG5PNG1nOHpqUWVBWFB1bEo4ZzdDcVRJejhJRzh3V2ZDWmdpTE9MZXI3WEtUU3llVGdYLzVJNG4xRkhDNjFMTEJwL0lOSVNKc2hnQVl3bVpxM1dSd0RrU2I2WU9XNXlqaVRKbkozOU10UUJzNHlrdEJCbjhKb3lFQXFyU2FFMXpsS09ZVzRDa1BOVHpHWHB3dE5md2ozUUwwUnFZalZIcW95ZUF6WVRWRUlYSHUwS3RURHcwUm16Z0ZYSU0zYXhPL0FpNlE2WHlhYmdIYXdHem4xQWhEaEFpcklRQ09ZUUJWYmpMSUhGNUYwb2lQMnBHN2dVdkVabHM2bVZVUmJhQUZjZGZ0TTRTRE1Cc0NvRmFudXp5RGRBczI4RDlwMVNZMGljMDRzZWxNSjd1dXBvQjUzQTdFMHFyZkVEaGhOMFFmNEE2OUpQV2pTYVNaclU1RWJPb0lpbElwTnRWdUJTYlIxUlR3Wis0Q3hxZGJoaUY0d200SVVFN2k2MHgyazBYbThSREN6MVA4ZUJjd1FXWnprM3R4Q2RTbW1EK3pCbUZNdW1VWXdrSDREUUVnTkdnMVI3cktFNmNjMkxTSFQzMU9Zcnh3WjdyUzFLYUVRdHFBSDZWYmhpRThSTU1RVUlKeW01c2piR1FlSDhKdXUwRC93bUtFek9iK2RFWHBBdm81Wm5BVm1HZ0lMMUV4Qk1CM3FlYW5ybkkwY0J2d1pBL3ZKSTZJc1h0OEx5WFVaZ0RiV0FlY25XNFpodkFSSlVPQXNrQm44TlZVUHk2SlRUd1RTSFNOa2lTT2lMRjVLVzBaTmdkU3dIOERKNmRiaGlHY1JNc1FzRGRkM09vbWc4eGxBN0RRK2V2cnhQbU8yTHlWcmdDMU9aZ0NIaUdDcDJzYjlrelVEQUZ3Z1Zaemhhc2NoY3hGdVpzQ1RwZUdGTzZkNkFXZHkyRllQQUVtUGlsWENmVXBhcnVoVld0WTV3eWM5NGl6Nmp3dWt3clZaakJ4MWtIcVhUWkQ5SWhpQ3dHd1A4cmliRldtY3hpR3hXTVlNK1E4VVRVRUtLVjZBeGY1WG8zTjhjUjVIRGpVNzdvTXdSTmRReVJZcGpiNytWVzR6dVpFaEllQkEveXF3eEF1b202SWc5bVdmc2pGN3REWm5JbnlDUGhuT0VQNGlMb2hRTGhLcXpuUHl5SzFudk9KOHlCWnZnSFRFRHpSTndTQXNGeXJ2SGw0MWVZSEtQY0RmYjBvenhBdGNzTVE4RFVLdVRIVFFyU095NEJma2dnN04rUWh1V0lJZ0d0MUJtZWttMWx0cmthNGwraXV6Umc4SUpjTVlhSGNwbFBjZDNXMGprbkFyZVRXOTJGSWcxeDdBQVpUNHU0QVlxMWpPc0pTTkFRM1doc0NKOWNNQWNwVXJlWEVsRDQ2aTNvd0oyUGtNRytnL05KTkJuZUc2T0p4SlBSbm14WVE1dzYxZTcvaVMwRjBGcTBvZGRrVVpzZ2FtNEJxQ2psT1JyczdmdFRWQUZLVzhUZmcrenFGRWNScEFaY25ZbVNQNGJSekExQy84eHRxWTlISkNwU2ZCS0RMNEM5eDRENkttQ3FsNlIwd2wxYVhTWnBaeDFhT1F5a242UHZlZWtPbzBWcUdkMzlKTDZHQVR1NUVqQmx5RHVGUkxJNlRLeGlicmhrZ2d6R0VyS0JERnROS0owY0FpMG1jWGhFbWlvbHpqOXFKVmxCdGlobkthb1FyZ3habThKUzNFRXJsQ3M2Unkza2wwOEl5SGxUTE1qNlNWbUlJdzRHSE1pM1BZNDZqZzNLZFRCODZXUVArUjhjYXNzWm1vSjVPaHNzVjNsMWc0OWtpbExTd0hqaFBZMXlDTUI4NDNLdXlNMEtZelQ1Y0JKd1N0QlNESnlod0w1MVV5VGcrOExwd3o2ZGRwWlUxREdBSVFqbndpZGZscDBGZmpCbHloV2RSVHBPeGpQWERET0RUT29UWXRFc3pyUlF4REZnQjV0cGFRMGE4aDNJbFl6aEpydVJwUHl2eWRXRk81ck5SbXBrSW5BVDh3Yys2RERuSlZxQ0p2Z3lWcTFncGd2cGRZVllDMmFTWjV4UytRd1VYQXd1QXc3SlJyeUhTckVXWkxGZngxMnhXbXJYUURRR1ZSYXpoTTc2SlVFL0MvUWJEenJ5QWNvWmN4U2dabDEwelFBQ3hUTEtDTGJJUW13SUdBNnZBLzJiUUVBaytBc3JweDdkbEhFOEVKU0t3NEQ2Wno3dHlFMk9CVXhCejNXMGUwd0VzcHAwalpCeXRVaHJzQW0vZzBhNnlrR2ZveDJuT0NuSktCNDhaY29aMXdMRXlucGhNREVjSVVPQ0dnTVNGaWJLQWxTaEhPT09Mei9lWXlSQmxObUJ4b1l6blhCblBHMEdMNlU0b0RKRkVGckpaNW1OVHdGR0lkOHZ4aHREd01jcGsvczVSTW83ZkJDMm1KMEs1ZjFnYWVRc28xV3JPZHNMTWgrOHBqeUg4eUlUTUQ0THdtMUMxRURzampUeEtDY2NqVElUMFEzb05obFFKdFNFQXhLWlRHbG1CTUFTbENXZ1BXcE1oZHdtOUlaSklJNXRrUHRYRU9SckMyZjgwUkovSUdDS0p6R2VETkhJaGNDNkVhNGJDRUgwaVo0Z2swc2c2UHVKWUo4dzhGSFBZaHVnVFdVT0FzNDExSHEzQUVjNEZLbUhieG1xSUdKRTJSQks1a1kva1JtTEVPUkY0UEdnOWh1aVNFNFpJSW8yOEtQTTRFL2dCOEhiUWVnelJJNmNNa1VRYWFHTUwzMEtwQmo0TldvOGhPdVNrSVFDa21hMHlqeVlLR1lxYWJheUcxTWhaUXlRUm00M1N3RVNVa3hDZUNscFB4UGd2NHRzdnZjOExjdDRRU2FTQjU1ak42UWlsd0R0QjZ3azVid0xueXlUK1V5Ym4xMWdzYnd3QnpqYlcyYXloZ0dFa3puM2RGclNta1BFeFNqbi9aTGhNNHJkQml3bUN2REpFRXJIWklyT3hzUmdFckNJTHB6bUVuRTVnQlVVTWtjbTBpazFuMElLQ0lpOE5rVVJzM3BYWmpLV0xzNENYZ3RZVENNb2p4RGxPSmpOUkp2TFBvT1VFVFY0Yklvbk00ZmNJSitUWk50YS9JSlJLR1NNa3htdEJpd2tMeGhBT1loTVhtNVhBa1pEVDIxZy9RNmtIaHN0a3N5dHhaNHdoZGtKc1BoTWJtd0tHUTA0OU1IRmdGY3FSRXNPV3NwdzFmRWFFY2d0cEdKQmEvZ0tVYWozbkFNMUVleHZyTXlneEtlZVpvSVdFSGROQzdBR1p4U01veDBNa3Q3RytDMXhKakZPTUdWTERHQ0lGeEtaVDZsaEJuS0VrYmtzSys3VGtGcUNlT0lPbFBEdUhCT2NLeGhBdUVKdVBwWTRZQlF4SGVUQm9QVDJnd0JxNitLWk13WllLYzM2dVc4d1lJZzJraGplQkMzUU9JMGkwR01NQ2xnVEM4MEJNcHBockJ6TEJ0QkFaSUxXczQ4c2NFL0J0ck84alRPVGZmTnVZSVhPTUlUSkVKdElodGJSaWNRU1MxVzJzN2NCaWloZ3FVMWdodGdsdjl3SmpDSStRR2o2U0dtTEF0OEgzNDl6WFlqRk1waEtUc2xEYzQ1Y3ptREdFeDhnTVhnRE8wTG1Nd3FMVjQrTGZSRGhicHZLWXgrVWFEUDZqTmlYYXlCbEI2ekNrenY4RFFkN1FyTWJMUjFBQUFBQUFTVVZPUks1Q1lJST0iPgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTVFBQUFERUNBWUFBQURBcG81ckFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCYWJnQUFXbTRCeFdzak9BQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQmwwU1VSQlZIaWM3WjE1ZUZUVjNjYy92NXNGQ1ZSeHFWdHB0VlcyVmx4ZjYxcXRpcTBMOUdsOU5YVUJGRXBGUlRJaGhCQURDVGRBTUFFa0NZc0s3cUI5K2tENzJxZkJXaXZxVzdWYTY3NGlyZTlyYXhYMWJaVldaVEhML040LzVnNEdTR0R1ekwxejc1MDVuMzg0ek13NTU4dk0vWEsyM3prSERJR2ppemhQRjNGZTBEb01JRUVMeUdkMFBvT3dhQUF1Y1Y1YWgwVzVWUEI2a0xyeUdXT0lBRkNiL3ZTakVxZ0crdXp3S3dnZHdDMTBVQ2ZWL0RzWWhmbUxNVVFXVVJ1TEVrWUQ4eEVPMnY3R2pvWndQc3hIV014aElFdWxsSzVzNnN4bmpDR3loQzdnSkpSVzRDU2daeFAwbkg0Smk1aVU4N2pmR2czR0VMNmpUUXdFNWdHamtXN2ZkK3FHU0xLV0lzcGtNbS83SU5QZ1lBemhFMnBUUWgrcXNLZ0MrZ0x1VGJCcmVpdXdtSFlhWkRxZmVpcllBQmhEZUk0cVFpTVhBd3NRRHZQQUJEMmxOeUxVczRuYnhTYWV1V3BERW1NSUQ5RWJPUUZvUlRodCs0ditHQ0w1NTdOQXVjUjRLaTNCaGwwd2h2QUFiZUFRTEd4Z0FtRDVhb0x1NmNTZml2QUxsRXFKOFk1TDZZYWRNSWJJQUxVcHBvaHJFV1lqN0wzOWpld2FJcG5lakxLUXZXbVVjV3hMNlI5ZzJBVmppRFRSdVl6Q29nWDRCcEE5RTNSUDkveiszNEdaVXNiS1hxUWJkb014aEV1MGdhTVJtbEhPOXZBQi82T1RPdGtEUXlUU3lpTW81UkxqdFo3K0hZYWVzWUlXRUJYVVpqK2RTeXZ3UE1yWkhoVzdFV0VpbjNFYVV6a1ZvUlQ0bXljbEMrZGc4Ykl1WmFYZXdvR2VsSmtIbUJaaUQ2aE5JVVdNUjJrQUR2Q29WZGlLc0pqNHJ1c0p1cHdTUHFNS3FFS2M5WXZleWttOXprMUFFd2ZTTEtXMFkrZ1ZZNGpkb1BXY2cwVUx3bEhiWDh6Y0VHc1J5bVRhN2xlY3RZbUJGRGtyM095d3hwMk9JWkxwRFFoVDVUb2UyRjNkK1l3eFJBL29IQVpCdDdCc2IxcUZGeW1nWENyZHhTVHBJczRFV2hDTzNhWE05TFdzbzRDWVhNTWJiclRrQThZUTNWQ2IvZ2lWeUU1aDJaa1o0aU9FT1J5ZWZ0U3EybGdNWURUS2ZPQWdqM1Ixb054Q0lYVXkwWVNaSnpHR3dIbmdMT2VCNnlrc083MEhML0hBaVhmN0duUVovV252d2JEcGF3U2NNUFA5VEpnNUdFT2dzMU1JeTNiL3NLMGpUa3hxL09tU2FDdURVQnFRN1R2dHZPald2WWhRTHRma2Q1aDUzaHBDYlJkaDJhay9WQnRRS3FTRzMzZ3F0aGUwbFhPQUZ1QW9EOWRFMWxKQW1mdzBQOFBNODg0UWFsTUN6clJtcW1IWmUzNlFOaUUwOFRuTlltZDNXbE50Q3RtWDhZZ3pMZHk3UmpmcFJKaDVFUTN5ay93S004OGJReWdJZFZ5TXhRTFVaVmgyNys5M290eUpNRk5xK0lmWG10MmdpOWlQUW1ZQjF5RVVibjhqTTNPOGgxTERSRmFKb0o0S0RpbDVZUWl0NVFRa2c3RHNubDk3Rkl0eXFlWlZUOFZtaUM1aEtFb3o0aHhyNDAxWDZsbVVtRnpEMHg1S0RTVTViUWl0NFJDS3NORU13N0ozZk8wdGxCcVp5UnFQNVhxS0xtWVVRZ3ZpQkI5Q3B1WlE0RjQ2cUpKSmZPQ3AyQkNSazRaUW0ySTZQUXpMVHZ5WkNLL2VoeHVsak04OWx1d0xhbFBNL3M3M0FIdDcxRnBzUmxoSVlXNkdtZWVjSVhTRzUySFpjWVQ3RUtiSkRENzBWbTEyME9VY1FnYzI0clNVNE1YMzhoWkNqVXdJZDB2cGxwd3hoTjdBVUFwb0JzN3pjQXJ5R1pTWTFQR01oMUlEUTI5MnRyZ3FwM24ySFZrOFNwd3A4bE5lOFZCcVlFVGVFR3F6SHgzTVFyZ09uTm1Wekgvc2Q0RVoxT2JlN0lvcXdpM09JUWh3R09ERjk5V0pPTE50NDRPZGJjdVV5QnBDYlFycFlEeDRHcGE5QlZqQWwyaVNDclo2S0RkMDZISks2S1FLU1NITVBOVzB4U2JpTkxGM2RNUE1JMmtJclhGV2FMMEx5MWJnRnhRd1RXWjZ0RUVuSXVqaUZNTE0zYVlUWWVZVk1pNDdLL1plRWlsRDZFd0dFZmM4TFBzNUxNcWxqajk0cHpSNjZNMmM2VXhHN0JwbTdqYjl4V3ZyS0tSTXhyTGVPNlgrRWdsRHFPMUVlU3JWQ0gyMnY1R1pJVFlDOVdBTyswcWlOaFlITzRjeGR3OHpoMHpXYlJKUnZ4M1JDRE1QdFNIVXhtSXJvN0djSHdpOGFCWGFnVnNwWWFZNURySm5kQm45c2FqRWNzTE1JUk5ESkVtRW1mY05kNWg1YUEyaE4zUUx5L1p1R25VdFFreHMvdGREcVRtTDNzb2d4T21pWm02SVpQb0ZsSElaeHhOZWF2V0swQmxDcXhpSTFXMlFCMTYwQ2kraGxNc2NmdStwMkR4QlZ6RENpWTlLVEdKa1pvaGtlaTF4SnNzNC91cWwxa3dKalNIVXBvUXR6alFnOVBXb1ZVaHMzMXpQVWxrVDNtWTZDcWhOSVY5eFRoOFJKOHdjTWpFRUpLYTVsOUNYdVZMS1o5NHFUby9BRGFFZ1RPTml4RmtvY3YrbDlwUk9YRXZWVHAwMGhYOGdGeVgwZHZaRG1RVk1BZ295TkVReS9SNUNEYU9EWHdnTjFCQTZsUk93ZWduTFR0OFE2eERLWlk2NXVOQlA5RGFHQVl1UWJyZW5adjdiL1FtTG1JemVmcEpoMWduRUVGcnVoR1h2N3JSczkxL3FCdUpNbFhubXpLRnNvcmN6Q3B4Z1NtOWFkMFdjTVBOeDJROHp6Nm9obk83Uk5KUmFoUDQ5cW5EL3BYNE0xRlBFeldMVDZhMWlReXJvWGV4Rm5BcmdCcUMvUitPL1Q3Q1lReEdMc3hrR2t2VVdRaXM0emprTjc0d2VWYVJ1aUVSWWRoR1ZZdk4vZm1nMXVFT1hjd2lGUG9XWlg1R2RNUFBBeGhCYXlTaUVWdURycmcyaFBJb3dSZWJsUnNoeHJxRjNjd0pkenRqUXV6V2tSMUhLWmJTL1czYURIVlRiRkxPWmF4SG1BRi9hUVZIUFg4eGJXTlJJUTI1dFNzbEZWQkh1OWlITUhPNmtpSmxTNmsrWWVlRFRyZ0JheGFIQUxHQUMwbU5UbTlpMldFeWoyTG0zYlRHWDBlV1VVSnppYWVhcHB6ZWgxSE1veStRc2I4ZU5vVEJFRXEzaVA1eHUxS21Pc3NURzlpNnFaRUh1Ym16UEIvUTJCbExNUE5URE1ITjRFNHNLdVpRSHZkSVpLa09BTXhNMW5URUlGMk5oeXp4ZUNGcVR3VHYwTHI3cmhKa2ZzLzNGek0xeFAzRXE1WXJNWTlSQ1p3aEQ3cU0yRm9jN1llYVNRWmo1anVrT0xHNmhnMW9aelNmcGFqT0dNQVNHcnFZL1c3dWRaZzZadHhiQyt5ZzJGbmVrRTJadURHRUlITDJQUVhTbEVXYSt1elE4ajBXNWxQS2tHeTNHRUliUW9QZHdQc0lpaEtGQXBvYUF4S1gyRStUSDNKbXFCdGUza0dvNUU3U2NIN3JOWnpEc0NibVNCOW5LMGNCRTRKOWVGQWtjNmlhRCsydDVsU05SN3RjWTYvUjZ4OGtHZzBmSVJEcGtEQ3Zvd3hCZ01XUjNIMHM2aGloeVV1ZFF3Q3NhbzFXdjZ4YW9aekI0Z0pUeXNZd21ScHpod0crelZhOTdRMWpiRFFGUUJKUlJ4SHFOTWRZelZRYURnNHhsdll6bWZJUWZnUDk3NFROcElib3pFTGhIeTNqWWRLTU1maUNYMDBZUnc0QnlTSCtkWVUrNE53UTlHaUtCTUlJQ1h0WXBOS3JOWHVuTE1oaDJSVXBwbHl0b1JSZ0cvcHlsNWEwaEVoU2pUT2Rmdks0eFJxWWp5bURZSFhJWkc4R2Z2ZGQrR0NMSk54RGFkQXB0V3NuWDA2akhZTWc2WG8waGRzZEl1bmhkSzdCTk44b1FkaktkWlVxVnZpaXorSVRYdEpJTDA4aHZNR1NGYkxRUTNUbUNPR3UxZ2pZdDUvQU15akVZZk1IUE1jVHVHRWtCYjJpbDZVWVp3a1ZRaG9Ca04rcFRYdFZwWE9CUm1RWkRSZ1JwaUNSSG9qeWdVMm5UYXRPTk1nUkx0c2NRdlNPTXBKUFh0UXBiSjNlN0ZNVmd5Q0x1RFNFK0dTSkJDY29zK3ZDYVR1dDJacWpCa0NYQzBHWGFGZUZJNEVHdG9rMm5PbWY2R0F4WklKeUcrSUxFYkpUcFJobXlSTmdOQVZBQ3pLS0VWM1U2Mzg5eTNZWThJd3FHU0RJSStLMVcwNmJUK1ZwQUdndzVUcFFNa1VBWmliQmVxN0hWcGpoUUxZYWNJM3FHU0pEb1JtM2pWYTNtZTBHTE1lUU9VVFZFa3NFSUQra050T2tNdmhxMEdFUDBpYm9oa293a3pucXRNZDBvUTJia2lpRUErZ0d6YU9jVnJlSGNvTVVZb29rclEyamk0S2RDbjdSNHhSRGdkenJEZEtNTTduSFhRbHdkZWpOMFp5U3dYbWVhYmxSZUUzZDNHSUhiTGxOWXUwdTkwUTlsRmwyOHJETVpFYlFZUTFiWmpGTFBOaGE1eWVUT0VQdEd6aEFKbEtIQTczUW1LN1dHZzRLV1kvQVZCVmJSd1NDNURGdkd1YnVDelowaE9pTnFpQVFDaktHQURUcVRtTnFSNnY0WlVrSDVFeGFueWFXTWxURzhuMDRSN2d6UkZXbERKTmtIb1lVdW50TmFUZ3Rhak1FVDNrVzRra3M1V1VwNU9wT0MzQm5DcjgxQndYQU13aE5hWjdwUmtVWFpBdFJUd0dDNWxKVWltUjllNXM0UThad3lCQ1M3VVlXOHFYWEU5QklLZ2haa1NCRmhGVVVNbHN1d3BaU3QzaFhyQXIyZW9SU3czbFdwMFVxL2hEQkpiSjdDa0plNGF5R0tjcTZGMkpsamdTZlZacVhhSEJpMEdFUDJ5ZWN4Uk0rbzA0MkNEVnBQVEZlYmJsUStZUXpST3dOUVdsalBzenFiVTRJV1k4Z091YjVTN1FYSG9meEI2MW1wOC9oeTBHSU0vbUphaU5SSWRLTTYyYUJ6VERjcWwzRm5DTW43SUxsOVVWcll3SjkwTGljSExjYmdQYWJMbEE3SzhTaFA2UnpUamNvMVRKY3BmUkxkcUM3VGpjb2xUQXVST2ZzaXRQQVhudEhabkJTMEdFTm11RE5FZXJjSDVRZktDVmc4cFhOWnFUWUhCQzNIa0I2bWhmQVdDMkVNUld6UUJtSnFwN1ZuUFZSb013T0MxcEFKdXBxRDNYemU3USsyNXowRXJxS2pjcGI5Z0JhS2VWSWJPU1pvTWVtZ1N6aFVsN0tjWXVZRXJTVWRkQlZEOUdjOFFBZFQzZVJ6TzZoMk4rMXF6SEVLU2xuUUl0eWdOc1c2aEJnV2J5SmNUWG9uc3dTRzNzZStlaCtOV0x3QzdtK21jcmRyVENsSyt5SGZNZDltNERHZ2pTNmVvSWpIMEJ6ZGt4Q25QV2dKcWFMTEdJWFNDdEc3VjF4dExJNWdOTEFBMGcvTWRMdU5NcE14eE5zb0R3TnIyWWVIeFA3aVFkRktLb0Q3TWlnN3ZBZ2RRVXZZRTdxTVk0blRnbkptMEZyU1FlL2pMT0swSUJ5ZGFWbnVER0ZSNUdKUFVoZUovUVZyRWRya0pwN3Y3WU95a0o5cEpaZEREdDVoTGVGdElYUXArd04xeEprRTBWdEgwWlY4RFl1NUtHTzg2cDY3N3pMdG5zMkkweFVxNU5leWdBOWNLTG1lTHI1TDRnUyszRUhEMTBMb2NvcG81enJpMUNQc0U3UWV0K2hLK2lGTUE2YWo3T1hsV05XTEx0UGJDQThqdTNhRjNDQ04vRldyYUVDWmwzZ2huVkpDU01nTW9Zc1p3ZWUwQU44S1dvdGJWQkh1WlF4S0U3aWJUazJWZEF6eFJWY29UcHNzN3IwcjVKb1NGckNaVWhJNzEzSURLeHlHMEtVTXBvdEZLQmRHOFQ4YnZZc1RXVVVyK0xzM3haMGh1cmliSXVaTE14LzdJVVpzT3JXUzZ4Q2VwUHQwWDIvN29LTkJvR01JYldZQVFqVmRUSUhvUlN2clBYd0Z1QkVZVFJaK2ZWZUdrS1c4NlplUTdYVXM1R21keG5MZ1dyL3J5Z29CZFpuVXhtSkE1dE9RUWFHcjZjdFd5b0Fad0pleVZXODRGMTIyVVkzdzNoNC9GNFhXSW9CWkpyMkpzOWlIRjRCN2lLSVo3bUlVVzNnRHBaRXNtZ0ZDYWdoWndpZEFoYnRNL21qSm1DeTJFSG9UWDlWbVZtTHhLRVF2WkVUdjVIaTlpOGNSZmcwY0hvU0cwSjV2S2syczFtbU1SaGpsUHJNUGd0SWxDNGJRQmZURFlockNkR0F2dit2ekdyMkgvZW1pRGdsK1BTUzBoZ0RBNG5xVXM0RCthWmNSdkRsODZ6S3BJaXppWW9TRkVMMnJpblU1UlJSekhWM2hXUThKWlpjcGlUVHhEa0s5ZHdWNlZsTHErRFR0cWdzNWtVVThDYXdtaW1hNGt4RVU4UkpLQzRURERKQmxRNmhOb2JwOUxQdlNBcnpvdVpqc21HTVR5cXRlRnFoTkhLb0xXWTd3UitCVUw4dk9Cbm9IUS9SMkhuRGkycjRadEo2ZDhkMFFPcGsrT29VUldrRXJuL0F1VTdqS1RYNng2VVM1bXNTQ29ELzRZUTdsQXl6T2tocmU4S3pJaFZ4RUFYK0c2SVZsQStqdGpBZGVROXlIWldjTFg3NVVuVUpmbmNJb25jSktDdmtRZUJnb0F3NUNhTllxQnJvcFQrYnpISEN6SDFwM3JjeVRVdDZtZ085SU5TOTdVdG9YSEVPMFk3MkdFZkp4cTJmaXRKd0JLT2NpakVMNUVkQy9sNGRySDdxNEJWek9IaWt6RUg0RTdzeVVFZW1aNHpVSytiNU1aNlBIYWd4WklLTVdRaWV4djhZWXF6SGFVRDRrTWNBYnc1NW5oVVpxQlQ5MlU1Zk01MU1rOUx2UEhxZUEwNDBab290clEraGtCbW9aVjJ1TU5ncDVuOFJxNkVqY3hza0lTN1hTM1NxcU5ISS95cTljMWVNVmUyNHQxbExDZVZMTnY3T2d4dUFUN2k1dUwrY2lMTjVCV0U3Q0JKbnNvRHVBT00ydWN5bVRJT0NIYm1kektQZnlaUzZTQ3U5dXNqRUVnOXNydGZyaDVaeU1jTGxPNVlldXNzeG5JOG9zenpSa2lzVVN1cmhTSm9ZanpOdVFHY0ZQM1FrM2F6WDd1c3JUbHlYQUgvMFJsRElLMU1zTXlzUW1IckFXZzBjRWJ3ZzRoRTZhM0dRUW16Z1dFeUd3LzVXN1VLNlJXdXlBNmpmNFJCZ01BVEJCcC9FOU54bGtIcThBUzN6U3N6dmFFUzZUT2xZRVVMZkJaOEppQ0NIT2NyVmRCdkgxb1JaNDJ4OUpQYklaWVpUTVpFMFc2elJra2JBWUFvVEQyY3hjVjFsc3RqZ2h3OW5nWXl4R1NDMi95MUo5aGdBSWp5RVNUTmJwbk80bWc4empRZUFYUHVsSjhnN0NxVEl6OElHOHdXZkNaZ2lMT0xlcjdYS1RTeWVUZ1gvNUk0bjFGSEM2MUxMQnAvSU5JU0pzaGdBWXdtWnEzV1J3RGtTYjZZT1c1eWppVEpuSjM5TXRRQnM0eWt0QkJuOEpveUVBcXJTYUUxemxLT1lXNENrUE5UekdYcHd0TmZ3ajNRTDBScVlqVkhxb3llQXpZVFZFSVhIdTBLdFREdzBSbXpnRlhJTTNheE8vQWk2UTZYeWFiZ0hhd0d6bjFBaERoQWlySVFDT1lRQlZiakxJSEY1RjBvaVAycEc3Z1V2RVpsczZtVlVSYmFBRmNkZnRNNFNETUJzQ29GYW51enlEZEFzMjhEOXAxU1kwaWMwNHNlbE1KN3V1cG9CNTNBN0UwcXJmRURoaE4wUWY0QTY5SlBXalNhU1pyVTVFYk9vSWlsSXBOdFZ1QlNiUjFSVHdaKzRDeHFkYmhpRjR3bTRJVUU3aTYweDJrMFhtOFJEQ3oxUDhlQmN3UVdaemszdHhDZFNtbUQrekJtRk11bVVZd2tINERRRWdOR2cxUjdyS0U2Y2MyTFNIVDMxT1lyeHdaN3JTMUthRVF0cUFINlZiaGlFOFJNTVFVSUp5bTVzamJHUWVIOEp1dTBEL3dtS0V6T2IrZEVYcEF2bzVabkFWbUdnSUwxRXhCTUIzcWVhbnJuSTBjQnZ3WkEvdkpJNklzWHQ4THlYVVpnRGJXQWVjblc0Wmh2QVJKVU9Bc2tCbjhOVlVQeTZKVFR3VFNIU05raVNPaUxGNUtXMFpOZ2RTd0g4REo2ZGJoaUdjUk1zUXNEZGQzT29tZzh4bEE3RFErZXZyeFBtTzJMeVZyZ0MxT1pnQ0hpR0NwMnNiOWt6VURBRndnVlp6aGFzY2hjeEZ1WnNDVHBlR0ZPNmQ2QVdkeTJGWVBBRW1QaWxYQ2ZVcGFydWhWV3RZNXd5Yzk0aXo2and1a3dyVlpqQngxa0hxWFRaRDlJaGlDd0d3UDhyaWJGV21jeGlHeFdNWU0rUThVVFVFS0tWNkF4ZjVYbzNOOGNSNUhEalU3N29Nd1JOZFF5UllwamI3K1ZXNHp1WkVoSWVCQS95cXd4QXVvbTZJZzltV2ZzakY3dERabklueUNQaG5PRVA0aUxvaFFMaEtxem5QeXlLMW52T0o4eUJadmdIVEVEelJOd1NBc0Z5cnZIbDQxZVlIS1BjRGZiMG96eEF0Y3NNUThEVUt1VEhUUXJTT3k0QmZrZ2c3TitRaHVXSUlnR3QxQm1la20xbHRya2E0bCtpdXpSZzhJSmNNWWFIY3BsUGNkM1cwamtuQXJlVFc5MkZJZzF4N0FBWlQ0dTRBWXExak9zSlNOQVEzV2hzQ0o5Y01BY3BVcmVYRWxENDZpM293SjJQa01HK2cvTkpOQm5lRzZPSnhKUFJubXhZUTV3NjFlNy9pUzBGMEZxMG9kZGtVWnNnYW00QnFDamxPUnJzN2Z0VFZBRktXOFRmZyt6cUZFY1JwQVpjblltU1A0YlJ6QTFDLzh4dHFZOUhKQ3BTZkJLREw0Qzl4NEQ2S21DcWw2UjB3bDFhWFNacFp4MWFPUXlrbjZQdmVla09vMFZxR2QzOUpMNkdBVHU1RWpCbHlEdUZSTEk2VEt4aWJyaGtnZ3pHRXJLQkRGdE5LSjBjQWkwbWNYaEVtaW9semo5cUpWbEJ0aWhuS2FvUXJneFptOEpTM0VFcmxDczZSeTNrbDA4SXlIbFRMTWo2U1ZtSUl3NEdITWkzUFk0NmpnM0tkVEI4NldRUCtSOGNhc3NabW9KNU9oc3NWM2wxZzQ5a2lsTFN3SGpoUFkxeUNNQjg0M0t1eU0wS1l6VDVjQkp3U3RCU0RKeWh3TDUxVXlUZys4THB3ejZkZHBaVTFER0FJUWpud2lkZmxwMEZmakJseWhXZFJUcE94alBYRERPRFRPb1RZdEVzenJSUXhERmdCNXRwYVEwYThoM0lsWXpoSnJ1UnBQeXZ5ZFdGTzVyTlJtcGtJbkFUOHdjKzZERG5KVnFDSnZneVZxMWdwZ3ZwZFlWWUMyYVNaNXhTK1F3VVhBd3VBdzdKUnJ5SFNyRVdaTEZmeDEyeFdtclhRRFFHVlJhemhNNzZKVUUvQy9RYkR6cnlBY29aY3hTZ1psMTB6UUFDeFRMS0NMYklRbXdJR0E2dkEvMmJRRUFrK0FzcnB4N2RsSEU4RUpTS3c0RDZaejd0eUUyT0JVeEJ6M1cwZTB3RXNwcDBqWkJ5dFVocnNBbS9nMGE2eWtHZm94Mm5PQ25KS0I0OFpjb1oxd0xFeW5waE1ERWNJVU9DR2dNU0ZpYktBbFNoSE9PT0x6L2VZeVJCbE5tQnhvWXpuWEJuUEcwR0w2VTRvREpGRUZySlo1bU5Ud0ZHSWQ4dnhodER3TWNway9zNVJNbzdmQkMybUowSzVmMWdhZVFzbzFXck9kc0xNaCs4cGp5SDh5SVRNRDRMd20xQzFFRHNqalR4S0NjY2pUSVQwUTNvTmhsUUp0U0VBeEtaVEdsbUJNQVNsQ1dnUFdwTWhkd205SVpKSUk1dGtQdFhFT1JyQzJmODBSSi9JR0NLSnpHZUROSEloY0M2RWE0YkNFSDBpWjRnazBzZzZQdUpZSjh3OEZIUFlodWdUV1VPQXM0MTFIcTNBRWM0RkttSGJ4bXFJR0pFMlJCSzVrWS9rUm1MRU9SRjRQR2c5aHVpU0U0WklJbzI4S1BNNEUvZ0I4SGJRZWd6Ukk2Y01rVVFhYUdNTDMwS3BCajROV284aE91U2tJUUNrbWEweWp5WUtHWXFhYmF5RzFNaFpReVFSbTQzU3dFU1VreENlQ2xwUHhQZ3Y0dHN2dmM4TGN0NFFTYVNCNTVqTjZRaWx3RHRCNndrNWJ3TG55eVQrVXlibjExZ3Nid3dCempiVzJheWhnR0Vrem4zZEZyU21rUEV4U2puL1pMaE00cmRCaXdtQ3ZESkVFckhaSXJPeHNSZ0VyQ0lMcHptRW5FNWdCVVVNa2NtMGlrMW4wSUtDSWk4TmtVUnMzcFhaaktXTHM0Q1hndFlUQ01vanhEbE9Kak5SSnZMUG9PVUVUVjRiSW9uTTRmY0lKK1RaTnRhL0lKUktHU01reG10Qml3a0x4aEFPWWhNWG01WEFrWkRUMjFnL1E2a0hoc3Rrc3l0eFo0d2hka0pzUGhNYm13S0dRMDQ5TUhGZ0ZjcVJFc09Xc3B3MWZFYUVjZ3RwR0pCYS9nS1VhajNuQU0xRWV4dnJNeWd4S2VlWm9JV0VIZE5DN0FHWnhTTW94ME1rdDdHK0MxeEpqRk9NR1ZMREdDSUZ4S1pUNmxoQm5LRWtia3NLKzdUa0ZxQ2VPSU9sUER1SEJPY0t4aEF1RUp1UHBZNFlCUXhIZVRCb1BUMmd3QnE2K0taTXdaWUtjMzZ1Vzh3WUlnMmtoamVCQzNRT0kwaTBHTU1DbGdUQzgwQk1wcGhyQnpMQnRCQVpJTFdzNDhzY0UvQnRyTzhqVE9UZmZOdVlJWE9NSVRKRUp0SWh0YlJpY1FTUzFXMnM3Y0JpaWhncVUxZ2h0Z2x2OXdKakNJK1FHajZTR21MQXQ4SDM0OXpYWWpGTXBoS1RzbERjNDVjem1ER0V4OGdNWGdETzBMbU13cUxWNCtMZlJEaGJwdktZeCtVYURQNmpOaVhheUJsQjZ6Q2t6djhEUWQ3UXJNYkxSMUFBQUFBQVNVVk9SSzVDWUlJPSI+Cgo8c3R5bGU+CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vdVlFQ01Lb0hjTzl4MXdkbWJ5SEltMy1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3NUZGFBNmowUHNiOTIwVmp2LW1yekgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9fVllGeC1zODI0a1hxX1VsMkJIcVlILV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by90bmo0U0I2RE5iZGFRbnNNOENGcUJYLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9vTU1nZlpNUXRoT3J5UW85bjIyZGN1dnZEaW4xcEs4YUt0ZUxwZVo1YzBBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9Lc19jVnhpQ2l3VVdWc0ZXRkEzQmpuLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL05KNHZ4bGdXd1diRXN2MThkQWhxbm4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vaXNaLXdiQ1hOS0FibmpvNl9Ud0hUb1gwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vNzdGWEZqUmJHek40YUNyU0ZobGgzb1gwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8valNOMkNHVkRiY1Z5Q25mSmZqU2RmSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9VWDZpNEp4UURtM2ZWVGMxQ1B1d3FvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL2QtNklZcGxPRm9jQ2FjS3p4d1hTT0pCdzF4VTFyS3B0SmpfMGphbnM5MjAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vOTd1YWh4aXFaUm9uY0JhQ0VJM2FXNFgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1B3WmMtWWJJTDQxNHdCOXJCMUlBUFlYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzE0c1lZZEpnNWRVMnF6SkVWU3V0YTAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0NfWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMUJXMjZReHBTai1fWkttX3hUNGhXdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDNGdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M5RGlOc1I1YS05T2VfSXZwdThYV2xZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PcFhVcVRvMFVnUVFoR2pfU0ZkTFdCa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vV3hyWEphMEMzS2R0QzdsTWFmRzRkUmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL2NES2hSYVhuUVRPVmJhb3h3ZE9yOXhrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzFoWmYwMlBPQU5oMzJrMlZrZ0VvVUJrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3ZQY3luU0wwcUhxXzZkWDdsS1ZCeVhZaGpiU3B2YzQ3ZWU2eFJfODBIbncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3ZTenVsZktTSzBMTGpqZmVheGNSRWhrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vSzIzY3hXVlRySUZENkRKc0VWaTA3UmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0ZsNHkwUWRPeHl5VEhFR01YWDhrY1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vMGVDNmZsMDZsdVhFWVdwQlNKdlhDSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by9JM1Mxd3NnU2c5WUN1clY2UFVrVE9ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vLUwxNEprMDZtNnBVSEItNW1YUVFuWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0hnbzEzay10ZlNwbjBxaTFTRmRVZlpCdzF4VTFyS3B0SmpfMGphbnM5MjAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by9QcnUzM3FqU2hwWlNtRzN6NlZZd25ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by9OWURXQmRENGdJcTI2RzVYWWJIc0ZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDE0c1lZZEpnNWRVMnF6SkVWU3V0YTAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdF9acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdHd0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MUJXMjZReHBTai1fWkttX3hUNGhXdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQ0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDZFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQ5RGlOc1I1YS05T2VfSXZwdThYV2xZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9vSGkzMGt3UVd2cENXcUFoekhjQ1NJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vWkxxS2VlbFliQVRHNjBFcFpCU0R5NFgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL214OVVjazZ1QjYzVklLRlluRU1YcllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL3JHdkhkSm5yMmw3NXFiMFlORDlOeUlYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL1J4WkpkbnplbzNSNXpTZXhnZThVVVpCdzF4VTFyS3B0SmpfMGphbnM5MjAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29PZUZ3Wk5sclRlZnpMWW1sVlYxVUlYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbWJtaHByTUg2OVppNmVFUEJZVkZoWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFY0c1lZZEpnNWRVMnF6SkVWU3V0YTAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwZlpyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBRdF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVkJXMjZReHBTai1fWkttX3hUNGhXdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFlncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBhRThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBkRGlOc1I1YS05T2VfSXZwdThYV2xZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTE0c1lZZEpnNWRVMnF6SkVWU3V0YTAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWV9acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWXd0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMUJXMjZReHBTai1fWkttX3hUNGhXdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFk0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTZFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFk5RGlOc1I1YS05T2VfSXZwdThYV2xZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6MXgtTTFJMXc1T01pcW5WRjh4QkxoVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5Rnp3WGFBWHVwNW1abGZLNnhSTHJoc2NvLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGenduNldxeG8teHd4aWxEWFBVOGNoVlUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxVDdhSkxLNm5LcG4zNklNd1RjTU1jLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6Xzc5X1p1VXhDaWdNMkRlc3BUbkZhdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejRnZDlPRVBVQ04zQWRZVzBlOHRhdDQud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejhiSVFTWVpuV0xhV0M5UU5DcFRLX1Uud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQo8L3N0eWxlPgoKCgo8c3R5bGU+Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6MjRweH0ubWF0LWgxLC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IGgxe2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyLC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IGgye2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzLC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgzLC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YmhlYWRpbmctMiwubWF0LXR5cG9ncmFwaHkgaDN7Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDQsLm1hdC1zdWJoZWFkaW5nLTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtYm9keS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktc3Ryb25nLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMntmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSBwLC5tYXQtYm9keS0xIHAsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsLC5tYXQtY2FwdGlvbiwubWF0LXR5cG9ncmFwaHkgLm1hdC1zbWFsbCwubWF0LXR5cG9ncmFwaHkgLm1hdC1jYXB0aW9ue2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00LC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktNHtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ze2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ye2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uLC5tYXQtcmFpc2VkLWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LW1pbmktZmFie2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlciAubWF0LWNhcmQtdGl0bGV7Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlLC5tYXQtY2FyZC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3h7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbntmb250LXNpemU6MThweH0ubWF0LXRhYmxle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxse2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxke2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgcmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXIsLm1hdC1ncmlkLXRpbGUtZm9vdGVye2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmUsLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50e21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLC5tYXQtc3RlcHBlci1ob3Jpem9udGFse2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWx7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3J7Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcntmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGV7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudHtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZTNkKDAsIDAsIDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1yaXBwbGUtZWxlbWVudHtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW57Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTtsZWZ0OjB9W2Rpcj1ydGxdIC5jZGstdmlzdWFsbHktaGlkZGVue2xlZnQ6YXV0bztyaWdodDowfS5jZGstb3ZlcmxheS1jb250YWluZXIsLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcntwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcjplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmV7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9we3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3B7dHJhbnNpdGlvbjp2aXNpYmlsaXR5IDFtcyBsaW5lYXIsb3BhY2l0eSAxbXMgbGluZWFyO3Zpc2liaWxpdHk6aGlkZGVuO29wYWNpdHk6MX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjA7dmlzaWJpbGl0eTp2aXNpYmxlfS5jZGstb3ZlcmxheS1iYWNrZHJvcC1ub29wLWFuaW1hdGlvbnt0cmFuc2l0aW9uOm5vbmV9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3h7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja3twb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5ne3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3h7cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7LyohKi99QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7LyohKi99LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3BvaW50ZXItZXZlbnRzOm5vbmU7ZGlzcGxheTp2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWRpc3BsYXksIG5vbmUpO2JvcmRlcjp2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSB2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci1zdHlsZSwgc29saWQpIHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLWNvbG9yLCB0cmFuc3BhcmVudCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXMsIDRweCl9Lm1hdC1mb2N1cy1pbmRpY2F0b3I6Zm9jdXM6OmJlZm9yZXtjb250ZW50OiIifS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmV7LS1tYXQtZm9jdXMtaW5kaWNhdG9yLWRpc3BsYXk6IGJsb2NrfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcntwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWRpc3BsYXksIG5vbmUpO2JvcmRlcjp2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgdmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXN0eWxlLCBzb2xpZCkgdmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLWNvbG9yLCB0cmFuc3BhcmVudCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItcmFkaXVzLCA0cHgpfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjpmb2N1czo6YmVmb3Jle2NvbnRlbnQ6IiJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZXstLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWRpc3BsYXk6IGJsb2NrfS5tYXQtYmFkZ2UtY29udGVudHtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgxLC5tYXQtdHlwb2dyYXBoeSAubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMiwubWF0LXRpdGxlLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgyLC5tYXQtdHlwb2dyYXBoeSAubWF0LXRpdGxlLC5tYXQtdHlwb2dyYXBoeSBoMntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMywubWF0LXN1YmhlYWRpbmctMiwubWF0LXR5cG9ncmFwaHkgLm1hdC1oMywubWF0LXR5cG9ncmFwaHkgLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWg0LC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YmhlYWRpbmctMSwubWF0LXR5cG9ncmFwaHkgaDR7Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDUsLm1hdC10eXBvZ3JhcGh5IGg1e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2LC5tYXQtdHlwb2dyYXBoeSAubWF0LWg2LC5tYXQtdHlwb2dyYXBoeSBoNntmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZywubWF0LWJvZHktMiwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LXN0cm9uZywubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTJ7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5LC5tYXQtYm9keS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHksLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS0xLC5tYXQtdHlwb2dyYXBoeXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHkgcCwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTEgcCwubWF0LXR5cG9ncmFwaHkgcHttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbCwubWF0LWNhcHRpb24sLm1hdC10eXBvZ3JhcGh5IC5tYXQtc21hbGwsLm1hdC10eXBvZ3JhcGh5IC5tYXQtY2FwdGlvbntmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTR7Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktM3tmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTF7Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b24sLm1hdC1mYWIsLm1hdC1taW5pLWZhYntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJke2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZSwubWF0LWNhcmQtY29udGVudHtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dCAubWF0LWNoZWNrYm94LWxhYmVse2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwe2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb24sLm1hdC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb257Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbHtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsLC5tYXQtZm9vdGVyLWNlbGx7Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5e2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCwubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b257Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoe2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHJnYmEoMCwwLDAsMCl9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0MzczZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzJlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM2MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDZweCk7d2lkdGg6MTMzLjMzMzM5MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwN3B4KTt3aWR0aDoxMzMuMzMzNDAzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDhweCk7d2lkdGg6MTMzLjMzMzQxMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODExNmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTE1ZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODExNGVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3M2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3MmVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzYzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3M2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3MmVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzYzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyLC5tYXQtZ3JpZC10aWxlLWZvb3Rlcntmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudHttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3R7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJ7aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbCwubWF0LXN0ZXBwZXItaG9yaXpvbnRhbHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9ye2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVke2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhciwubWF0LXRvb2xiYXIgaDEsLm1hdC10b29sYmFyIGgyLC5tYXQtdG9vbGJhciBoMywubWF0LXRvb2xiYXIgaDQsLm1hdC10b29sYmFyIGg1LC5tYXQtdG9vbGJhciBoNntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXB7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXR7Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbHtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZSwubWF0LW5lc3RlZC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LW9wdGlvbntjb2xvcjojMjEyMTIxfS5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksLm1hdC1vcHRpb246Zm9jdXM6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtb3B0aW9uLm1hdC1hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCk7Y29sb3I6IzIxMjEyMX0ubWF0LW9wdGlvbi5tYXQtb3B0aW9uLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXByaW1hcnkgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2Y1N2MwMH0ubWF0LWFjY2VudCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZmY5ODAwfS5tYXQtd2FybiAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjQ0MzM2fS5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHNldWRvLWNoZWNrYm94e2NvbG9yOiM2MTYxNjF9Lm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye2NvbG9yOiNmZmZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6I2IwYjBiMH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmNTdjMDB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmZjk4MDB9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojYjBiMGIwfS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1lbGV2YXRpb24tejB7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxe2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejJ7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo0e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo1e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDVweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16N3tib3gtc2hhZG93OjBweCA0cHggNXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA3cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejh7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo5e2JveC1zaGFkb3c6MHB4IDVweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDlweCAxMnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTZweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTB7Ym94LXNoYWRvdzowcHggNnB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTBweCAxNHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA0cHggMThweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTF7Ym94LXNoYWRvdzowcHggNnB4IDdweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTFweCAxNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA0cHggMjBweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTJ7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTN7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTNweCAxOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA1cHggMjRweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTR7Ym94LXNoYWRvdzowcHggN3B4IDlweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTRweCAyMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA1cHggMjZweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTV7Ym94LXNoYWRvdzowcHggOHB4IDlweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTVweCAyMnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMjhweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTZ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE3e2JveC1zaGFkb3c6MHB4IDhweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxN3B4IDI2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMnB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxOHtib3gtc2hhZG93OjBweCA5cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMThweCAyOHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA3cHggMzRweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTl7Ym94LXNoYWRvdzowcHggOXB4IDEycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE5cHggMjlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggN3B4IDM2cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIwe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjBweCAzMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggMzhweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjF7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMXB4IDMzcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCA0MHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMntib3gtc2hhZG93OjBweCAxMHB4IDE0cHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIycHggMzVweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDQycHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIze2JveC1zaGFkb3c6MHB4IDExcHggMTRweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjNweCAzNnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDRweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjR7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtdGhlbWUtbG9hZGVkLW1hcmtlcntkaXNwbGF5Om5vbmV9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcil7YmFja2dyb3VuZDojZmZmfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6IzIxMjEyMX0ubWF0LWJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtYmFkZ2UubWF0LWJhZGdle292ZXJmbG93OnZpc2libGV9Lm1hdC1iYWRnZS1oaWRkZW4gLm1hdC1iYWRnZS1jb250ZW50e2Rpc3BsYXk6bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnR7cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gMjAwbXMgZWFzZS1pbi1vdXQ7dHJhbnNmb3JtOnNjYWxlKDAuNik7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm5nLWFuaW1hdGUtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50LC5tYXQtYmFkZ2UtY29udGVudC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1iYWRnZS1jb250ZW50Lm1hdC1iYWRnZS1hY3RpdmV7dHJhbnNmb3JtOm5vbmV9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LThweH0ubWF0LWJhZGdlLW1lZGl1bSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTExcHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE0cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTRweH0ubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNTdjMDB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtYmFkZ2UtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2JkYmRiZDtjb2xvcjojNzU3NTc1fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCl9Lm1hdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5e2NvbG9yOiNmNTdjMDB9Lm1hdC1idXR0b24ubWF0LWFjY2VudCwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1idXR0b24ubWF0LXdhcm4sLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1pY29uLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtvcGFjaXR5Oi4xO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZDojMDAwfS5tYXQtc3Ryb2tlZC1idXR0b246bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZmxhdC1idXR0b24sLm1hdC1yYWlzZWQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtbWluaS1mYWJ7Y29sb3I6IzIxMjEyMTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1mYWIubWF0LXByaW1hcnksLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeXtjb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtjb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLC5tYXQtZmFiLm1hdC13YXJuLC5tYXQtbWluaS1mYWIubWF0LXdhcm57Y29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1mYWIubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLC5tYXQtZmFiLm1hdC13YXJuLC5tYXQtbWluaS1mYWIubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtZmxhdC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtbWluaS1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93Om5vbmV9Lm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6IzIxMjEyMTtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4ICNlMGUwZTB9W2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOiM2MTYxNjF9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7bGluZS1oZWlnaHQ6NDhweH0ubWF0LWNhcmR7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1jYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jYXJkLm1hdC1jYXJkLWZsYXQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2FyZC1zdWJ0aXRsZXtjb2xvcjojNjE2MTYxfS5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Lm1hdC1jaGVja2JveC1jaGVja21hcmt7ZmlsbDojZmZmfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiNmZmYgIWltcG9ydGFudH0ubWF0LWNoZWNrYm94LW1peGVkbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNmNTdjMDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNmZjk4MDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y0NDMzNn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOiMyMTIxMjF9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6IzIxMjEyMTtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKTphY3RpdmV7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6bm90KC5tYXQtY2hpcC1kaXNhYmxlZCkgLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWR7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6OmFmdGVye2JhY2tncm91bmQ6IzAwMH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LXRhYmxle2JhY2tncm91bmQ6I2ZmZn0ubWF0LXRhYmxlIHRoZWFkLC5tYXQtdGFibGUgdGJvZHksLm1hdC10YWJsZSB0Zm9vdCxtYXQtaGVhZGVyLXJvdyxtYXQtcm93LG1hdC1mb290ZXItcm93LFttYXQtaGVhZGVyLXJvd10sW21hdC1yb3ddLFttYXQtZm9vdGVyLXJvd10sLm1hdC10YWJsZS1zdGlja3l7YmFja2dyb3VuZDppbmhlcml0fW1hdC1yb3csbWF0LWhlYWRlci1yb3csbWF0LWZvb3Rlci1yb3csdGgubWF0LWhlYWRlci1jZWxsLHRkLm1hdC1jZWxsLHRkLm1hdC1mb290ZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhlYWRlci1jZWxse2NvbG9yOiM2MTYxNjF9Lm1hdC1jZWxsLC5tYXQtZm9vdGVyLWNlbGx7Y29sb3I6IzIxMjEyMX0ubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIsLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCwubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiMyMTIxMjE7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNzU3NTc1fS5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMCwwLDAsLjI0KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ1LCAxMjQsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpey5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMTUyLCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpey5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpey5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoe2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZXtjb2xvcjojZjU3YzAwfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1pbm5lcltkaXNhYmxlZF17Y29sb3I6Izc1NzU3NX0ubWF0LWRpYWxvZy1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOiNmZmZ9fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjojMjEyMTIxfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257Y29sb3I6aW5oZXJpdH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7aGVpZ2h0OjQ4cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NjRweH0ubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNil9Lm1hdC1oaW50e2NvbG9yOnJnYmEoOTcsOTcsOTcsLjYpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKSAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudCwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWVycm9ye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWhpbnR7Y29sb3I6IzYxNjE2MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjQyKSAwJSwgcmdiYSgwLCAwLCAwLCAwLjQyKSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNDIpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNDIpIDMzJSwgdHJhbnNwYXJlbnQgMCUpO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wMil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtjb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtjb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1pY29uLm1hdC1wcmltYXJ5e2NvbG9yOiNmNTdjMDB9Lm1hdC1pY29uLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWljb24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6Izc1NzU3NX0ubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2Y1N2MwMH0ubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtjb2xvcjojMjEyMTIxfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb257Y29sb3I6IzIxMjEyMX0ubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntjb2xvcjojNjE2MTYxfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6I2VlZTtjb2xvcjojNzU3NTc1fS5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1saXN0LW9wdGlvbjpmb2N1cywubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXMsLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpob3ZlciwubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uLC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uOmhvdmVyLC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtbWVudS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZW51LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtbWVudS1pdGVte2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKTtjb2xvcjojMjEyMTIxfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSwubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1tZW51LXN1Ym1lbnUtaWNvbiwubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1pY29uLW5vLWNvbG9ye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsLm1hdC1tZW51LXN1Ym1lbnUtaWNvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZDpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOiM2MTYxNjF9Lm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wYWdpbmF0b3ItY29udGFpbmVye21pbi1oZWlnaHQ6NTZweH0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZkZGViZn0ubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmRkZWJmfS5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZlNWJmfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZmZTViZn0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZjZDBjZH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmNkMGNkfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xlLC5tYXQtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOiNmNTdjMDB9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6I2ZmOTgwMH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmNDQzMzZ9Lm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNTdjMDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeTphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2ZmOTgwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQ6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjQ0MzM2fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm46YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6IzIxMjEyMX0ubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6Izc1NzU3NX0ubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjE2MTYxfS5tYXQtc2VsZWN0LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LXNlbGVjdC1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNzU3NTc1fS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjYpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfS5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjIpfS5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4yKX0ubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQ6aG92ZXIgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3Zlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC43KX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCByZ2JhKDAsIDAsIDAsIDAuNyksIHJnYmEoMCwgMCwgMCwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDAuNyksIHJnYmEoMCwgMCwgMCwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX0ubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZF0pLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD1mYWxzZV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPXRydWVde2N1cnNvcjpkZWZhdWx0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1zdGVwLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOm5vbmV9fS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOiM2MTYxNjF9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lcnJvcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7Y29sb3I6I2Y0NDMzNn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6IzIxMjEyMX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1lcnJvcntjb2xvcjojZjQ0MzM2fS5tYXQtc3RlcHBlci1ob3Jpem9udGFsLC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmUsLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlciwubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcntoZWlnaHQ6NzJweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlciwubWF0LXZlcnRpY2FsLXN0ZXBwZXItaGVhZGVye3BhZGRpbmc6MjRweCAyNHB4fS5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7dG9wOi0xNnB4O2JvdHRvbTotMTZweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZXt0b3A6MzZweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7dG9wOjM2cHh9Lm1hdC1zb3J0LWhlYWRlci1hcnJvd3tjb2xvcjojNjE2MTYxfS5tYXQtdGFiLW5hdi1iYXIsLm1hdC10YWItaGVhZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKX0ubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhciwubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItaGVhZGVye2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtib3JkZXItYm90dG9tOm5vbmV9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tjb2xvcjojMjEyMTIxfS5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOiM3NTc1NzV9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6IzIxMjEyMX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojNzU3NTc1fS5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dPi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTY3LDM4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI0LDE3OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTY3LDM4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIyNCwxNzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3BhY2l0eTouMTJ9Lm1hdC10b29sYmFye2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojMjEyMTIxfS5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LXdhcm57YmFja2dyb3VuZDojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfS5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LXZhbHVlLC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdywubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOmluaGVyaXR9Lm1hdC10b29sYmFyIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo2NHB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjY0cHh9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NTZweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo1NnB4fX0ubWF0LXRvb2x0aXB7YmFja2dyb3VuZDpyZ2JhKDk3LDk3LDk3LC45KX0ubWF0LXRyZWV7YmFja2dyb3VuZDojZmZmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtjb2xvcjojMjEyMTIxfS5tYXQtdHJlZS1ub2Rle21pbi1oZWlnaHQ6NDhweH0ubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyk7YmFja2dyb3VuZDojMzIzMjMyO2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6I2ZmOTgwMH1ib2R5e292ZXJmbG93OmhpZGRlbn0uY2RrLW92ZXJsYXktY29udGFpbmVye2NvbnRhaW46c3RyaWN0fWE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pe2NvbG9yOiMxOTc2ZDJ9YTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbik6dmlzaXRlZHtjb2xvcjojN2IxZmEyfWJvZHkuZGFyay1tb2Rle2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSBhOm5vdCgubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uKXtjb2xvcjojNDJhNWY1fWJvZHkuZGFyay1tb2RlIGE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH1ib2R5LmRhcmstbW9kZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbjpob3Zlcjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb24ubWF0LW9wdGlvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRncm91cC1kaXNhYmxlZCAubWF0LW9wdGdyb3VwLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94OjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2NvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSxib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2JhY2tncm91bmQ6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LWFwcC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlLm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMHB4IDE0cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTlweCAyOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjJweCAzNXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2VmNmMwMH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIGJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojNmU2ZTZlO2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7b3BhY2l0eTouMTtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQ6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LWZhYixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFie2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmFiOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93Om5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggIzU5NTk1OX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggIzU5NTk1OX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAxcHggIzU5NTk1OX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiMyMTIxMjE7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggIzU5NTk1OX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtsaW5lLWhlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZHtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQubWF0LWNhcmQtZmxhdDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMzAzMDMwICFpbXBvcnRhbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKTphY3RpdmV7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6bm90KC5tYXQtY2hpcC1kaXNhYmxlZCkgLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWR7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6OmFmdGVye2JhY2tncm91bmQ6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYmxle2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlIHRoZWFkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUgdGJvZHksYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZSB0Zm9vdCxib2R5LmRhcmstbW9kZSBtYXQtaGVhZGVyLXJvdyxib2R5LmRhcmstbW9kZSBtYXQtcm93LGJvZHkuZGFyay1tb2RlIG1hdC1mb290ZXItcm93LGJvZHkuZGFyay1tb2RlIFttYXQtaGVhZGVyLXJvd10sYm9keS5kYXJrLW1vZGUgW21hdC1yb3ddLGJvZHkuZGFyay1tb2RlIFttYXQtZm9vdGVyLXJvd10sYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZS1zdGlja3l7YmFja2dyb3VuZDppbmhlcml0fWJvZHkuZGFyay1tb2RlIG1hdC1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWhlYWRlci1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWZvb3Rlci1yb3csYm9keS5kYXJrLW1vZGUgdGgubWF0LWhlYWRlci1jZWxsLGJvZHkuZGFyay1tb2RlIHRkLm1hdC1jZWxsLGJvZHkuZGFyay1tb2RlIHRkLm1hdC1mb290ZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhlYWRlci1jZWxse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2VsbCxib2R5LmRhcmstbW9kZSAubWF0LWZvb3Rlci1jZWxse2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1hcnJvd3tmaWxsOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojZmZmO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tcHJldmlld3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyMzksIDEwOCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX19Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyMzksIDEwOCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX19Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2h7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlLXJhbmdlLWlucHV0LWlubmVyW2Rpc2FibGVkXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZGlhbG9nLWNvbnRhaW5lcntib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLGJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfUBtZWRpYShob3Zlcjogbm9uZSl7Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6IzQyNDI0Mn19Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjppbmhlcml0fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntoZWlnaHQ6NDhweH1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo2NHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWhpbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKSAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWVycm9ye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1oaW50e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDMzJSwgdHJhbnNwYXJlbnQgMCUpO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMDUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1wcmltYXJ5e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDpkaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Om5vdCgubWF0LW5hdGl2ZS1zZWxlY3QtaW5saW5lKSBvcHRpb257Y29sb3I6cmdiYSgwLDAsMCwuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDpub3QoLm1hdC1uYXRpdmUtc2VsZWN0LWlubGluZSkgb3B0aW9uOmRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpO2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LW9wdGlvbjpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtb3B0aW9uOmZvY3VzLGJvZHkuZGFyay1tb2RlIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1cyxib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LW1lbnUtc3VibWVudS1pY29uLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LWljb24tbm8tY29sb3J7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uLW5vLWNvbG9yLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1zdWJtZW51LWljb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvcntiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3IsYm9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCAjZmZmO2JvcmRlci1yaWdodDoycHggc29saWQgI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1maXJzdCxib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1maXJzdCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1jb250YWluZXJ7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojNjAzZjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojNjAzZjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojNjEzNTMyfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MTM1MzJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeTphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQ6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm46YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlcntiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTg5LDE4OSwxODksLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXI6aG92ZXIgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDAuMDAwMWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9ZmFsc2Vde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6ZGVmYXVsdH1AbWVkaWEoaG92ZXI6IG5vbmUpe2JvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDpub25lfX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1vcHRpb25hbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyk7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lcnJvcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1lcnJvcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcntoZWlnaHQ6NzJweH1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXZlcnRpY2FsLXN0ZXBwZXItaGVhZGVye3BhZGRpbmc6MjRweCAyNHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7dG9wOi0xNnB4O2JvdHRvbTotMTZweH1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZXt0b3A6MzZweH1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7dG9wOjM2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zb3J0LWhlYWRlci1hcnJvd3tjb2xvcjojYzZjNmM2fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItaGVhZGVye2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItYm90dG9tOm5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluayxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3BhY2l0eTouMTJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFye2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIubWF0LXdhcm57YmFja2dyb3VuZDojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LXZhbHVlLGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo2NHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1yb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjY0cHh9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpe2JvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NTZweH1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItcm93LGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo1NnB4fX1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2x0aXB7YmFja2dyb3VuZDpyZ2JhKDk3LDk3LDk3LC45KX1ib2R5LmRhcmstbW9kZSAubWF0LXRyZWV7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZS1ub2RlLGJvZHkuZGFyay1tb2RlIC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZS1ub2Rle21pbi1oZWlnaHQ6NDhweH1ib2R5LmRhcmstbW9kZSAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQ6I2ZhZmFmYTtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2NvbG9yOmluaGVyaXR9Cjwvc3R5bGU+Cgo8c3R5bGU+CiAgaHRtbCwKICBib2R5IHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgY29sb3I6IHZhcigtLXByaW1hcnktdGV4dC1jb2xvcik7CgogICAgLyogTGVnYWN5IG1lY2hhbmlzbSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBzdWJwaXhlbCBhbnRpLWFsaWFzaW5nIG9uIG1hY09TLgogICAgICoKICAgICAqIEluIHRoZSBwYXN0IFsxXSwgbWFjT1Mgc3VicGl4ZWwgQUEgY2F1c2VkIGV4Y2Vzc2l2ZSBib2xkaW5nIGZvciBsaWdodC1vbi1kYXJrIHRleHQ7IHRoaXMgcnVsZQogICAgICogYXZvaWRzIHRoYXQgYnkgcmVxdWVzdGluZyBub24tc3VicGl4ZWwgQUEgYWx3YXlzLCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBiZWhhdmlvciwgd2hpY2ggaXMKICAgICAqIHRvIHVzZSBzdWJwaXhlbCBBQSB3aGVuIGF2YWlsYWJsZS4gVGhlIG9yaWdpbmFsIGlzc3VlIHdhcyAiZml4ZWQiIGJ5IHJlbW92aW5nIHN1YnBpeGVsIEFBIGluCiAgICAgKiBtYWNPUyAxNCAoTW9qYXZlKSwgYnV0IGZvciBsZWdhY3kgcmVhc29ucyB0aGV5IHByZXNlcnZlZCB0aGUgYm9sZGluZyBlZmZlY3QgYXMgYW4gb3B0aW9uLgogICAgICogQ2hyb21lIHRoZW4gaW4gdHVybiB1cGRhdGVkIGl0cyBmb250IHJlbmRlcmluZyB0byBhcHBseSB0aGF0IGJvbGRpbmcgZWZmZWN0IFsyXSwgd2hpY2ggbWVhbnMKICAgICAqIHRoYXQgZXZlbiB0aG91Z2ggdGhlIGAtd2Via2l0LWZvbnQtc21vb3RoaW5nYCBkb2NzIFszXSBzdWdnZXN0IHRoYXQgc2V0dGluZyBgYW50aWFsaWFzZWRgCiAgICAgKiB3b3VsZCBoYXZlIG5vIGVmZmVjdCBmb3IgcmVjZW50IHZlcnNpb25zIG9mIG1hY09TLCBpdCBzdGlsbCBpcyBuZWVkZWQgdG8gYXZvaWQgdGhlIGJvbGRpbmcuCiAgICAgKgogICAgICogWzFdOiBodHRwOi8vd3d3LmxpZ2h0ZXJyYS5jb20vYXJ0aWNsZXMvbWFjb3N4dGV4dGFhYnVnLwogICAgICogWzJdOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04NTg4NjEKICAgICAqIFszXTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZvbnQtc21vb3RoCiAgICAgKgogICAgICovCgogICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgfQogIG5vc2NyaXB0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luOiAwIGF1dG87CiAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgcGFkZGluZzogMTBweDsKICB9Cjwvc3R5bGU+Cgo8L2hlYWQ+PGJvZHk+PG5vc2NyaXB0PgogICAgPGgxPlRlbnNvckJvYXJkIHJlcXVpcmVzIEphdmFTY3JpcHQ8L2gxPgogICAgPHA+UGxlYXNlIGVuYWJsZSBKYXZhU2NyaXB0IGFuZCByZWxvYWQgdGhpcyBwYWdlLjwvcD4KICA8L25vc2NyaXB0Pjx0Yi13ZWJhcHA+PC90Yi13ZWJhcHA+PHNjcmlwdCBzcmM9ImluZGV4LmpzP19maWxlX2hhc2g9NDg2ZjM0ZDIiPjwvc2NyaXB0PjwvYm9keT48L2h0bWw+", "headers": [ [ "content-type", "text/html; charset=utf-8" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/chart_worker.js?_file_hash=c4417681": { "data": "KCgpPT57dmFyIEgwPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWMD1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgRzA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIGFmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIFcwPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscTA9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgY2Y9TWF0aC5wb3csbGY9KG4sdCxlKT0+dCBpbiBuP0gwKG4sdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pOm5bdF09ZSxObz0obix0KT0+e2Zvcih2YXIgZSBpbiB0fHwodD17fSkpVzAuY2FsbCh0LGUpJiZsZihuLGUsdFtlXSk7aWYoYWYpZm9yKHZhciBlIG9mIGFmKHQpKXEwLmNhbGwodCxlKSYmbGYobixlLHRbZV0pO3JldHVybiBufSx1Zj0obix0KT0+VjAobixHMCh0KSk7dmFyIGhmPShuLHQsZSk9Pm5ldyBQcm9taXNlKChpLHIpPT57dmFyIHM9bD0+e3RyeXthKGUubmV4dChsKSl9Y2F0Y2goYyl7cihjKX19LG89bD0+e3RyeXthKGUudGhyb3cobCkpfWNhdGNoKGMpe3IoYyl9fSxhPWw9PmwuZG9uZT9pKGwudmFsdWUpOlByb21pc2UucmVzb2x2ZShsLnZhbHVlKS50aGVuKHMsbyk7YSgoZT1lLmFwcGx5KG4sdCkpLm5leHQoKSl9KTt2YXIgb247KGZ1bmN0aW9uKG4pe25bbi5MSU5FQVI9MF09IkxJTkVBUiIsbltuLkxPRzEwPTFdPSJMT0cxMCIsbltuLlRJTUU9Ml09IlRJTUUifSkob258fChvbj17fSkpO2Z1bmN0aW9uIGFuKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIGlzKG4pe3JldHVybiBuLmxlbmd0aD09PTEmJihuPVgwKG4pKSx7bGVmdDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPDA/aT1zKzE6cj1zfXJldHVybiBpfSxyaWdodDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPjA/cj1zOmk9cysxfXJldHVybiBpfX19ZnVuY3Rpb24gWDAobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFuKG4odCksZSl9fXZhciBmZj1pcyhhbiksZGY9ZmYucmlnaHQsWTA9ZmYubGVmdCxCbj1kZjt2YXIgcGY9QXJyYXkucHJvdG90eXBlLEowPXBmLnNsaWNlLCQwPXBmLm1hcDt2YXIga2w9TWF0aC5zcXJ0KDUwKSxIbD1NYXRoLnNxcnQoMTApLFZsPU1hdGguc3FydCgyKTtmdW5jdGlvbiBycyhuLHQsZSl7dmFyIGkscj0tMSxzLG8sYTtpZih0PSt0LG49K24sZT0rZSxuPT09dCYmZT4wKXJldHVybltuXTtpZigoaT10PG4pJiYocz1uLG49dCx0PXMpLChhPUppKG4sdCxlKSk9PT0wfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcihuPU1hdGguY2VpbChuL2EpLHQ9TWF0aC5mbG9vcih0L2EpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKHQtbisxKSk7KytyPHM7KW9bcl09KG4rcikqYTtlbHNlIGZvcihuPU1hdGguZmxvb3IobiphKSx0PU1hdGguY2VpbCh0KmEpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKG4tdCsxKSk7KytyPHM7KW9bcl09KG4tcikvYTtyZXR1cm4gaSYmby5yZXZlcnNlKCksb31mdW5jdGlvbiBKaShuLHQsZSl7dmFyIGk9KHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxzPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KHM+PWtsPzEwOnM+PUhsPzU6cz49Vmw/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhzPj1rbD8xMDpzPj1IbD81OnM+PVZsPzI6MSl9ZnVuY3Rpb24gX24obix0LGUpe3ZhciBpPU1hdGguYWJzKHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSkscz1pL3I7cmV0dXJuIHM+PWtsP3IqPTEwOnM+PUhsP3IqPTU6cz49VmwmJihyKj0yKSx0PG4/LXI6cn12YXIgZXg9QXJyYXkucHJvdG90eXBlLnNsaWNlO3ZhciBueD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiB5Zigpe2Zvcih2YXIgbj0wLHQ9YXJndW1lbnRzLmxlbmd0aCxlPXt9LGk7bjx0Oysrbil7aWYoIShpPWFyZ3VtZW50c1tuXSsiIil8fGkgaW4gZXx8L1tccy5dLy50ZXN0KGkpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2kpO2VbaV09W119cmV0dXJuIG5ldyB6byhlKX1mdW5jdGlvbiB6byhuKXt0aGlzLl89bn1mdW5jdGlvbiBpeChuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfXpvLnByb3RvdHlwZT15Zi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnpvLG9uOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5fLGk9aXgobisiIixlKSxyLHM9LTEsbz1pLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytzPG87KWlmKChyPShuPWlbc10pLnR5cGUpJiYocj1yeChlW3JdLG4ubmFtZSkpKXJldHVybiByO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK3M8bzspaWYocj0obj1pW3NdKS50eXBlKWVbcl09eGYoZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihyIGluIGUpZVtyXT14ZihlW3JdLG4ubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBuPXt9LHQ9dGhpcy5fO2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXS5zbGljZSgpO3JldHVybiBuZXcgem8obil9LGNhbGw6ZnVuY3Rpb24obix0KXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBlPW5ldyBBcnJheShyKSxpPTAscixzO2k8cjsrK2kpZVtpXT1hcmd1bWVudHNbaSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KG4pKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK24pO2ZvcihzPXRoaXMuX1tuXSxpPTAscj1zLmxlbmd0aDtpPHI7KytpKXNbaV0udmFsdWUuYXBwbHkodCxlKX0sYXBwbHk6ZnVuY3Rpb24obix0LGUpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKHZhciBpPXRoaXMuX1tuXSxyPTAscz1pLmxlbmd0aDtyPHM7KytyKWlbcl0udmFsdWUuYXBwbHkodCxlKX19O2Z1bmN0aW9uIHJ4KG4sdCl7Zm9yKHZhciBlPTAsaT1uLmxlbmd0aCxyO2U8aTsrK2UpaWYoKHI9bltlXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWV9ZnVuY3Rpb24geGYobix0LGUpe2Zvcih2YXIgaT0wLHI9bi5sZW5ndGg7aTxyOysraSlpZihuW2ldLm5hbWU9PT10KXtuW2ldPW54LG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBlIT1udWxsJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn12YXIgV2w9eWY7dmFyIFVvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixxbD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6VW8seGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiB3bihuKXt2YXIgdD1uKz0iIixlPXQuaW5kZXhPZigiOiIpO3JldHVybiBlPj0wJiYodD1uLnNsaWNlKDAsZSkpIT09InhtbG5zIiYmKG49bi5zbGljZShlKzEpKSxxbC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6cWxbdF0sbG9jYWw6bn06bn1mdW5jdGlvbiBzeChuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQsZT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZT09PVVvJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Vbz90LmNyZWF0ZUVsZW1lbnQobik6dC5jcmVhdGVFbGVtZW50TlMoZSxuKX19ZnVuY3Rpb24gb3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gQm8obil7dmFyIHQ9d24obik7cmV0dXJuKHQubG9jYWw/b3g6c3gpKHQpfWZ1bmN0aW9uIGF4KCl7fWZ1bmN0aW9uIGRpKG4pe3JldHVybiBuPT1udWxsP2F4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihuKX19ZnVuY3Rpb24gdmYobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPWRpKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBzPXRbcl0sbz1zLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KG8pLGwsYyx1PTA7dTxvOysrdSkobD1zW3VdKSYmKGM9bi5jYWxsKGwsbC5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxhW3VdPWMpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBseCgpe3JldHVybltdfWZ1bmN0aW9uIG9zKG4pe3JldHVybiBuPT1udWxsP2x4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChuKX19ZnVuY3Rpb24gX2Yobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLHM9MDtzPGU7KytzKWZvcih2YXIgbz10W3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMsbykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBjZShpLHIpfWZ1bmN0aW9uIGFzKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIHdmKG4pe3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1hcyhuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKWZvcih2YXIgcz10W3JdLG89cy5sZW5ndGgsYT1pW3JdPVtdLGwsYz0wO2M8bzsrK2MpKGw9c1tjXSkmJm4uY2FsbChsLGwuX19kYXRhX18sYyxzKSYmYS5wdXNoKGwpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBPbyhuKXtyZXR1cm4gbmV3IEFycmF5KG4ubGVuZ3RoKX1mdW5jdGlvbiBNZigpe3JldHVybiBuZXcgY2UodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoT28pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGxzKG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fWxzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bHMsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX07ZnVuY3Rpb24gYmYobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fXZhciBTZj0iJCI7ZnVuY3Rpb24gY3gobix0LGUsaSxyLHMpe2Zvcih2YXIgbz0wLGEsbD10Lmxlbmd0aCxjPXMubGVuZ3RoO288YzsrK28pKGE9dFtvXSk/KGEuX19kYXRhX189c1tvXSxpW29dPWEpOmVbb109bmV3IGxzKG4sc1tvXSk7Zm9yKDtvPGw7KytvKShhPXRbb10pJiYocltvXT1hKX1mdW5jdGlvbiB1eChuLHQsZSxpLHIscyxvKXt2YXIgYSxsLGM9e30sdT10Lmxlbmd0aCxoPXMubGVuZ3RoLGY9bmV3IEFycmF5KHUpLGQ7Zm9yKGE9MDthPHU7KythKShsPXRbYV0pJiYoZlthXT1kPVNmK28uY2FsbChsLGwuX19kYXRhX18sYSx0KSxkIGluIGM/clthXT1sOmNbZF09bCk7Zm9yKGE9MDthPGg7KythKWQ9U2Yrby5jYWxsKG4sc1thXSxhLHMpLChsPWNbZF0pPyhpW2FdPWwsbC5fX2RhdGFfXz1zW2FdLGNbZF09bnVsbCk6ZVthXT1uZXcgbHMobixzW2FdKTtmb3IoYT0wO2E8dTsrK2EpKGw9dFthXSkmJmNbZlthXV09PT1sJiYoclthXT1sKX1mdW5jdGlvbiBFZihuLHQpe2lmKCFuKXJldHVybiBkPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oTCl7ZFsrK2NdPUx9KSxkO3ZhciBlPXQ/dXg6Y3gsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1iZihuKSk7Zm9yKHZhciBzPXIubGVuZ3RoLG89bmV3IEFycmF5KHMpLGE9bmV3IEFycmF5KHMpLGw9bmV3IEFycmF5KHMpLGM9MDtjPHM7KytjKXt2YXIgdT1pW2NdLGg9cltjXSxmPWgubGVuZ3RoLGQ9bi5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLGkpLGc9ZC5sZW5ndGgseD1hW2NdPW5ldyBBcnJheShnKSx2PW9bY109bmV3IEFycmF5KGcpLG09bFtjXT1uZXcgQXJyYXkoZik7ZSh1LGgseCx2LG0sZCx0KTtmb3IodmFyIHA9MCxiPTAsXyxTO3A8ZzsrK3ApaWYoXz14W3BdKXtmb3IocD49YiYmKGI9cCsxKTshKFM9dltiXSkmJisrYjxnOyk7Xy5fbmV4dD1TfHxudWxsfX1yZXR1cm4gbz1uZXcgY2UobyxpKSxvLl9lbnRlcj1hLG8uX2V4aXQ9bCxvfWZ1bmN0aW9uIFRmKCl7cmV0dXJuIG5ldyBjZSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKE9vKSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBBZihuLHQsZSl7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxzPXRoaXMuZXhpdCgpO3JldHVybiBpPXR5cGVvZiBuPT0iZnVuY3Rpb24iP24oaSk6aS5hcHBlbmQobisiIiksdCE9bnVsbCYmKHI9dChyKSksZT09bnVsbD9zLnJlbW92ZSgpOmUocyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn1mdW5jdGlvbiBDZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgY2Uobyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBSZigpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsdD0tMSxlPW4ubGVuZ3RoOysrdDxlOylmb3IodmFyIGk9blt0XSxyPWkubGVuZ3RoLTEscz1pW3JdLG87LS1yPj0wOykobz1pW3JdKSYmKHMmJm8uY29tcGFyZURvY3VtZW50UG9zaXRpb24ocyleNCYmcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLHMpLHM9byk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gTGYobil7bnx8KG49aHgpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9uKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxpPWUubGVuZ3RoLHI9bmV3IEFycmF5KGkpLHM9MDtzPGk7KytzKXtmb3IodmFyIG89ZVtzXSxhPW8ubGVuZ3RoLGw9cltzXT1uZXcgQXJyYXkoYSksYyx1PTA7dTxhOysrdSkoYz1vW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgY2Uocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIGh4KG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIFBmKCl7dmFyIG49YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxuLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIERmKCl7dmFyIG49bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuWysrdF09dGhpc30pLG59ZnVuY3Rpb24gSWYoKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9MCxlPW4ubGVuZ3RoO3Q8ZTsrK3QpZm9yKHZhciBpPW5bdF0scj0wLHM9aS5sZW5ndGg7cjxzOysrcil7dmFyIG89aVtyXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfWZ1bmN0aW9uIE5mKCl7dmFyIG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn1mdW5jdGlvbiBGZigpe3JldHVybiF0aGlzLm5vZGUoKX1mdW5jdGlvbiB6ZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxpPXQubGVuZ3RoO2U8aTsrK2UpZm9yKHZhciByPXRbZV0scz0wLG89ci5sZW5ndGgsYTtzPG87KytzKShhPXJbc10pJiZuLmNhbGwoYSxhLl9fZGF0YV9fLHMscik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGR4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gcHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiBteChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfX1mdW5jdGlvbiBneChuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2U9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobik6dGhpcy5zZXRBdHRyaWJ1dGUobixlKX19ZnVuY3Rpb24geHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gVWYobix0KXt2YXIgZT13bihuKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTppLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP2UubG9jYWw/ZHg6Zng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ZS5sb2NhbD94eDpneDplLmxvY2FsP214OnB4KShlLHQpKX1mdW5jdGlvbiBrbyhuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50JiZuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fG4uZG9jdW1lbnQmJm58fG4uZGVmYXVsdFZpZXd9ZnVuY3Rpb24geXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gdngobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBfeChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aT09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkobixpLGUpfX1mdW5jdGlvbiBCZihuLHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/eXg6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/X3g6dngpKG4sdCxlPT1udWxsPyIiOmUpKTpPbih0aGlzLm5vZGUoKSxuKX1mdW5jdGlvbiBPbihuLHQpe3JldHVybiBuLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fGtvKG4pLmdldENvbXB1dGVkU3R5bGUobixudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfWZ1bmN0aW9uIHd4KG4pe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW25dfX1mdW5jdGlvbiBNeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24gYngobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX19ZnVuY3Rpb24gT2Yobix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD93eDp0eXBlb2YgdD09ImZ1bmN0aW9uIj9ieDpNeCkobix0KSk6dGhpcy5ub2RlKClbbl19ZnVuY3Rpb24ga2Yobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFhsKG4pe3JldHVybiBuLmNsYXNzTGlzdHx8bmV3IEhmKG4pfWZ1bmN0aW9uIEhmKG4pe3RoaXMuX25vZGU9bix0aGlzLl9uYW1lcz1rZihuLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfUhmLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dDwwJiYodGhpcy5fbmFtZXMucHVzaChuKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihuKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2Yobik+PTB9fTtmdW5jdGlvbiBWZihuLHQpe2Zvcih2YXIgZT1YbChuKSxpPS0xLHI9dC5sZW5ndGg7KytpPHI7KWUuYWRkKHRbaV0pfWZ1bmN0aW9uIEdmKG4sdCl7Zm9yKHZhciBlPVhsKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gU3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7VmYodGhpcyxuKX19ZnVuY3Rpb24gRXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7R2YodGhpcyxuKX19ZnVuY3Rpb24gVHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/VmY6R2YpKHRoaXMsbil9fWZ1bmN0aW9uIFdmKG4sdCl7dmFyIGU9a2YobisiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9WGwodGhpcy5ub2RlKCkpLHI9LTEscz1lLmxlbmd0aDsrK3I8czspaWYoIWkuY29udGFpbnMoZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/VHg6dD9TeDpFeCkoZSx0KSl9ZnVuY3Rpb24gQXgoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIEN4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gUngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHFmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChuPT1udWxsP0F4Oih0eXBlb2Ygbj09ImZ1bmN0aW9uIj9SeDpDeCkobikpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fWZ1bmN0aW9uIEx4KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gUHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gRHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBYZihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobj09bnVsbD9MeDoodHlwZW9mIG49PSJmdW5jdGlvbiI/RHg6UHgpKG4pKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9ZnVuY3Rpb24gSXgoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gWWYoKXtyZXR1cm4gdGhpcy5lYWNoKEl4KX1mdW5jdGlvbiBOeCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFpmKCl7cmV0dXJuIHRoaXMuZWFjaChOeCl9ZnVuY3Rpb24gSmYobil7dmFyIHQ9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBGeCgpe3JldHVybiBudWxsfWZ1bmN0aW9uICRmKG4sdCl7dmFyIGU9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKSxpPXQ9PW51bGw/Rng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpkaSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gengoKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7biYmbi5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBLZigpe3JldHVybiB0aGlzLmVhY2goengpfWZ1bmN0aW9uIFV4KCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBCeCgpe3ZhciBuPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShuLHRoaXMubmV4dFNpYmxpbmcpOm59ZnVuY3Rpb24gUWYobil7cmV0dXJuIHRoaXMuc2VsZWN0KG4/Qng6VXgpfWZ1bmN0aW9uIGpmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixuKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZWQ9e30sWWw9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYodGQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJvbm1vdXNlZW50ZXIiaW4gdGR8fChlZD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIHRkO2Z1bmN0aW9uIE94KG4sdCxlKXtyZXR1cm4gbj1uZChuLHQsZSksZnVuY3Rpb24oaSl7dmFyIHI9aS5yZWxhdGVkVGFyZ2V0Oyghcnx8ciE9PXRoaXMmJiEoci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJm4uY2FsbCh0aGlzLGkpfX1mdW5jdGlvbiBuZChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPVlsO1lsPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e1lsPXJ9fX1mdW5jdGlvbiBreChuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLGk9dC5pbmRleE9mKCIuIik7cmV0dXJuIGk+PTAmJihlPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSkse3R5cGU6dCxuYW1lOmV9fSl9ZnVuY3Rpb24gSHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciBlPTAsaT0tMSxyPXQubGVuZ3RoLHM7ZTxyOysrZSlzPXRbZV0sKCFuLnR5cGV8fHMudHlwZT09PW4udHlwZSkmJnMubmFtZT09PW4ubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKTp0WysraV09czsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gVngobix0LGUpe3ZhciBpPWVkLmhhc093blByb3BlcnR5KG4udHlwZSk/T3g6bmQ7cmV0dXJuIGZ1bmN0aW9uKHIscyxvKXt2YXIgYT10aGlzLl9fb24sbCxjPWkodCxzLG8pO2lmKGEpe2Zvcih2YXIgdT0wLGg9YS5sZW5ndGg7dTxoOysrdSlpZigobD1hW3VdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIobi50eXBlLGMsZSksbD17dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6ZX0sYT9hLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gaWQobix0LGUpe3ZhciBpPWt4KG4rIiIpLHIscz1pLmxlbmd0aCxvO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKXtmb3IodmFyIGw9MCxjPWEubGVuZ3RoLHU7bDxjOysrbClmb3Iocj0wLHU9YVtsXTtyPHM7KytyKWlmKChvPWlbcl0pLnR5cGU9PT11LnR5cGUmJm8ubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKGE9dD9WeDpIeCxlPT1udWxsJiYoZT0hMSkscj0wO3I8czsrK3IpdGhpcy5lYWNoKGEoaVtyXSx0LGUpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiByZChuLHQsZSl7dmFyIGk9a28obikscj1pLkN1c3RvbUV2ZW50O3R5cGVvZiByPT0iZnVuY3Rpb24iP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gR3gobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcmQodGhpcyxuLHQpfX1mdW5jdGlvbiBXeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiByZCh0aGlzLG4sdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBzZChuLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1d4Okd4KShuLHQpKX12YXIgcXg9W251bGxdO2Z1bmN0aW9uIGNlKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIG9kKCl7cmV0dXJuIG5ldyBjZShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHF4KX1jZS5wcm90b3R5cGU9b2QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjZSxzZWxlY3Q6dmYsc2VsZWN0QWxsOl9mLGZpbHRlcjp3ZixkYXRhOkVmLGVudGVyOk1mLGV4aXQ6VGYsam9pbjpBZixtZXJnZTpDZixvcmRlcjpSZixzb3J0OkxmLGNhbGw6UGYsbm9kZXM6RGYsbm9kZTpJZixzaXplOk5mLGVtcHR5OkZmLGVhY2g6emYsYXR0cjpVZixzdHlsZTpCZixwcm9wZXJ0eTpPZixjbGFzc2VkOldmLHRleHQ6cWYsaHRtbDpYZixyYWlzZTpZZixsb3dlcjpaZixhcHBlbmQ6SmYsaW5zZXJ0OiRmLHJlbW92ZTpLZixjbG9uZTpRZixkYXR1bTpqZixvbjppZCxkaXNwYXRjaDpzZH07dmFyIE1uPW9kO2Z1bmN0aW9uIEhvKG4sdCxlKXtuLnByb3RvdHlwZT10LnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9bn1mdW5jdGlvbiBabChuLHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiB0KWVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBocygpe312YXIgY3M9LjcsR289MS9jcywkaT0iXFxzKihbKy1dP1xcZCspXFxzKiIsdXM9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsY249IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFh4PS9eIyhbMC05YS1mXXszLDh9KSQvLFl4PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1skaSwkaSwkaV0rIlxcKSQiKSxaeD1uZXcgUmVnRXhwKCJecmdiXFwoIitbY24sY24sY25dKyJcXCkkIiksSng9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skaSwkaSwkaSx1c10rIlxcKSQiKSwkeD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2NuLGNuLGNuLHVzXSsiXFwpJCIpLEt4PW5ldyBSZWdFeHAoIl5oc2xcXCgiK1t1cyxjbixjbl0rIlxcKSQiKSxReD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW3VzLGNuLGNuLHVzXSsiXFwpJCIpLGFkPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0hvKGhzLEplLHtjb3B5OmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsbil9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmxkLGZvcm1hdEhleDpsZCxmb3JtYXRIc2w6angsZm9ybWF0UmdiOmNkLHRvU3RyaW5nOmNkfSk7ZnVuY3Rpb24gbGQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBqeCgpe3JldHVybiBwZCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBjZCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEplKG4pe3ZhciB0LGU7cmV0dXJuIG49KG4rIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PVh4LmV4ZWMobikpPyhlPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNiksZT09PTY/dWQodCk6ZT09PTM/bmV3IFVlKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTplPT09OD9Wbyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTplPT09ND9Wbyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PVl4LmV4ZWMobikpP25ldyBVZSh0WzFdLHRbMl0sdFszXSwxKToodD1aeC5leGVjKG4pKT9uZXcgVWUodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9SnguZXhlYyhuKSk/Vm8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9JHguZXhlYyhuKSk/Vm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9S3guZXhlYyhuKSk/ZGQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1ReC5leGVjKG4pKT9kZCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOmFkLmhhc093blByb3BlcnR5KG4pP3VkKGFkW25dKTpuPT09InRyYW5zcGFyZW50Ij9uZXcgVWUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB1ZChuKXtyZXR1cm4gbmV3IFVlKG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NSwxKX1mdW5jdGlvbiBWbyhuLHQsZSxpKXtyZXR1cm4gaTw9MCYmKG49dD1lPU5hTiksbmV3IFVlKG4sdCxlLGkpfWZ1bmN0aW9uIHR5KG4pe3JldHVybiBuIGluc3RhbmNlb2YgaHN8fChuPUplKG4pKSxuPyhuPW4ucmdiKCksbmV3IFVlKG4ucixuLmcsbi5iLG4ub3BhY2l0eSkpOm5ldyBVZX1mdW5jdGlvbiBLaShuLHQsZSxpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dHkobik6bmV3IFVlKG4sdCxlLGk9PW51bGw/MTppKX1mdW5jdGlvbiBVZShuLHQsZSxpKXt0aGlzLnI9K24sdGhpcy5nPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K2l9SG8oVWUsS2ksWmwoaHMse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW49PW51bGw/R286TWF0aC5wb3coR28sbiksbmV3IFVlKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBVZSh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmhkLGZvcm1hdEhleDpoZCxmb3JtYXRSZ2I6ZmQsdG9TdHJpbmc6ZmR9KSk7ZnVuY3Rpb24gaGQoKXtyZXR1cm4iIyIrSmwodGhpcy5yKStKbCh0aGlzLmcpK0psKHRoaXMuYil9ZnVuY3Rpb24gZmQoKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhuPT09MT8iKSI6IiwgIituKyIpIil9ZnVuY3Rpb24gSmwobil7cmV0dXJuIG49TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChuKXx8MCkpLChuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNil9ZnVuY3Rpb24gZGQobix0LGUsaSl7cmV0dXJuIGk8PTA/bj10PWU9TmFOOmU8PTB8fGU+PTE/bj10PU5hTjp0PD0wJiYobj1OYU4pLG5ldyBsbihuLHQsZSxpKX1mdW5jdGlvbiBwZChuKXtpZihuIGluc3RhbmNlb2YgbG4pcmV0dXJuIG5ldyBsbihuLmgsbi5zLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBoc3x8KG49SmUobikpLCFuKXJldHVybiBuZXcgbG47aWYobiBpbnN0YW5jZW9mIGxuKXJldHVybiBuO249bi5yZ2IoKTt2YXIgdD1uLnIvMjU1LGU9bi5nLzI1NSxpPW4uYi8yNTUscj1NYXRoLm1pbih0LGUsaSkscz1NYXRoLm1heCh0LGUsaSksbz1OYU4sYT1zLXIsbD0ocytyKS8yO3JldHVybiBhPyh0PT09cz9vPShlLWkpL2ErKGU8aSkqNjplPT09cz9vPShpLXQpL2ErMjpvPSh0LWUpL2ErNCxhLz1sPC41P3MrcjoyLXMtcixvKj02MCk6YT1sPjAmJmw8MT8wOm8sbmV3IGxuKG8sYSxsLG4ub3BhY2l0eSl9ZnVuY3Rpb24gcGkobix0LGUsaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3BkKG4pOm5ldyBsbihuLHQsZSxpPT1udWxsPzE6aSl9ZnVuY3Rpb24gbG4obix0LGUsaSl7dGhpcy5oPStuLHRoaXMucz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStpfUhvKGxuLHBpLFpsKGhzLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP0dvOk1hdGgucG93KEdvLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihuKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxpPWUrKGU8LjU/ZToxLWUpKnQscj0yKmUtaTtyZXR1cm4gbmV3IFVlKCRsKG4+PTI0MD9uLTI0MDpuKzEyMCxyLGkpLCRsKG4scixpKSwkbChuPDEyMD9uKzI0MDpuLTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisobj09PTE/IikiOiIsICIrbisiKSIpfX0pKTtmdW5jdGlvbiAkbChuLHQsZSl7cmV0dXJuKG48NjA/dCsoZS10KSpuLzYwOm48MTgwP2U6bjwyNDA/dCsoZS10KSooMjQwLW4pLzYwOnQpKjI1NX1mdW5jdGlvbiBLbChuLHQsZSxpLHIpe3ZhciBzPW4qbixvPXMqbjtyZXR1cm4oKDEtMypuKzMqcy1vKSp0Kyg0LTYqcyszKm8pKmUrKDErMypuKzMqcy0zKm8pKmkrbypyKS82fWZ1bmN0aW9uIG1kKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0scz1uW2krMV0sbz1pPjA/bltpLTFdOjIqci1zLGE9aTx0LTE/bltpKzJdOjIqcy1yO3JldHVybiBLbCgoZS1pL3QpKnQsbyxyLHMsYSl9fWZ1bmN0aW9uIGdkKG4pe3ZhciB0PW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqdCkscj1uWyhpK3QtMSkldF0scz1uW2kldF0sbz1uWyhpKzEpJXRdLGE9blsoaSsyKSV0XTtyZXR1cm4gS2woKGUtaS90KSp0LHIscyxvLGEpfX1mdW5jdGlvbiBRaShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24geGQobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG4rZSp0fX1mdW5jdGlvbiBleShuLHQsZSl7cmV0dXJuIG49TWF0aC5wb3cobixlKSx0PU1hdGgucG93KHQsZSktbixlPTEvZSxmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3cobitpKnQsZSl9fWZ1bmN0aW9uIHlkKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTpRaShpc05hTihuKT90Om4pfWZ1bmN0aW9uIHZkKG4pe3JldHVybihuPStuKT09MT9ibjpmdW5jdGlvbih0LGUpe3JldHVybiBlLXQ/ZXkodCxlLG4pOlFpKGlzTmFOKHQpP2U6dCl9fWZ1bmN0aW9uIGJuKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZSk6UWkoaXNOYU4obik/dDpuKX12YXIgbWk9ZnVuY3Rpb24gbih0KXt2YXIgZT12ZCh0KTtmdW5jdGlvbiBpKHIscyl7dmFyIG89ZSgocj1LaShyKSkuciwocz1LaShzKSkuciksYT1lKHIuZyxzLmcpLGw9ZShyLmIscy5iKSxjPWJuKHIub3BhY2l0eSxzLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gci5yPW8odSksci5nPWEodSksci5iPWwodSksci5vcGFjaXR5PWModSkscisiIn19cmV0dXJuIGkuZ2FtbWE9bixpfSgxKTtmdW5jdGlvbiBfZChuKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSkscz1uZXcgQXJyYXkoZSksbyxhO2ZvcihvPTA7bzxlOysrbylhPUtpKHRbb10pLGlbb109YS5yfHwwLHJbb109YS5nfHwwLHNbb109YS5ifHwwO3JldHVybiBpPW4oaSkscj1uKHIpLHM9bihzKSxhLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gYS5yPWkobCksYS5nPXIobCksYS5iPXMobCksYSsiIn19fXZhciBueT1fZChtZCksaXk9X2QoZ2QpO2Z1bmN0aW9uIHdkKG4sdCl7dHx8KHQ9W10pO3ZhciBlPW4/TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpOjAsaT10LnNsaWNlKCkscjtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKHI9MDtyPGU7KytyKWlbcl09bltyXSooMS1zKSt0W3JdKnM7cmV0dXJuIGl9fWZ1bmN0aW9uIE1kKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiBiZChuLHQpe3ZhciBlPXQ/dC5sZW5ndGg6MCxpPW4/TWF0aC5taW4oZSxuLmxlbmd0aCk6MCxyPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShlKSxvO2ZvcihvPTA7bzxpOysrbylyW29dPWdpKG5bb10sdFtvXSk7Zm9yKDtvPGU7KytvKXNbb109dFtvXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG89MDtvPGk7KytvKXNbb109cltvXShhKTtyZXR1cm4gc319ZnVuY3Rpb24gU2Qobix0KXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGkpe3JldHVybiBlLnNldFRpbWUobiooMS1pKSt0KmkpLGV9fWZ1bmN0aW9uIHllKG4sdCl7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihlKXtyZXR1cm4gbiooMS1lKSt0KmV9fWZ1bmN0aW9uIEVkKG4sdCl7dmFyIGU9e30saT17fSxyOyhuPT09bnVsbHx8dHlwZW9mIG4hPSJvYmplY3QiKSYmKG49e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihyIGluIHQpciBpbiBuP2Vbcl09Z2kobltyXSx0W3JdKTppW3JdPXRbcl07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihyIGluIGUpaVtyXT1lW3JdKHMpO3JldHVybiBpfX12YXIgamw9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFFsPW5ldyBSZWdFeHAoamwuc291cmNlLCJnIik7ZnVuY3Rpb24gcnkobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIHN5KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19ZnVuY3Rpb24gZnMobix0KXt2YXIgZT1qbC5sYXN0SW5kZXg9UWwubGFzdEluZGV4PTAsaSxyLHMsbz0tMSxhPVtdLGw9W107Zm9yKG49bisiIix0PXQrIiI7KGk9amwuZXhlYyhuKSkmJihyPVFsLmV4ZWModCkpOykocz1yLmluZGV4KT5lJiYocz10LnNsaWNlKGUscyksYVtvXT9hW29dKz1zOmFbKytvXT1zKSwoaT1pWzBdKT09PShyPXJbMF0pP2Fbb10/YVtvXSs9cjphWysrb109cjooYVsrK29dPW51bGwsbC5wdXNoKHtpOm8seDp5ZShpLHIpfSkpLGU9UWwubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYocz10LnNsaWNlKGUpLGFbb10/YVtvXSs9czphWysrb109cyksYS5sZW5ndGg8Mj9sWzBdP3N5KGxbMF0ueCk6cnkodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KWFbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gZ2kobix0KXt2YXIgZT10eXBlb2YgdCxpO3JldHVybiB0PT1udWxsfHxlPT09ImJvb2xlYW4iP1FpKHQpOihlPT09Im51bWJlciI/eWU6ZT09PSJzdHJpbmciPyhpPUplKHQpKT8odD1pLG1pKTpmczp0IGluc3RhbmNlb2YgSmU/bWk6dCBpbnN0YW5jZW9mIERhdGU/U2Q6TWQodCk/d2Q6QXJyYXkuaXNBcnJheSh0KT9iZDp0eXBlb2YgdC52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4odCk/RWQ6eWUpKG4sdCl9ZnVuY3Rpb24gdGMobix0KXtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKG4qKDEtZSkrdCplKX19dmFyIFRkPTE4MC9NYXRoLlBJLFdvPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGVjKG4sdCxlLGkscixzKXt2YXIgbyxhLGw7cmV0dXJuKG89TWF0aC5zcXJ0KG4qbit0KnQpKSYmKG4vPW8sdC89byksKGw9biplK3QqaSkmJihlLT1uKmwsaS09dCpsKSwoYT1NYXRoLnNxcnQoZSplK2kqaSkpJiYoZS89YSxpLz1hLGwvPWEpLG4qaTx0KmUmJihuPS1uLHQ9LXQsbD0tbCxvPS1vKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6cyxyb3RhdGU6TWF0aC5hdGFuMih0LG4pKlRkLHNrZXdYOk1hdGguYXRhbihsKSpUZCxzY2FsZVg6byxzY2FsZVk6YX19dmFyIGRzLG5jLEFkLHFvO2Z1bmN0aW9uIENkKG4pe3JldHVybiBuPT09Im5vbmUiP1dvOihkc3x8KGRzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLG5jPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxBZD1kb2N1bWVudC5kZWZhdWx0VmlldyksZHMuc3R5bGUudHJhbnNmb3JtPW4sbj1BZC5nZXRDb21wdXRlZFN0eWxlKG5jLmFwcGVuZENoaWxkKGRzKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxuYy5yZW1vdmVDaGlsZChkcyksbj1uLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksZWMoK25bMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX1mdW5jdGlvbiBSZChuKXtyZXR1cm4gbj09bnVsbD9XbzoocW98fChxbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxxby5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbiksKG49cW8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KG49bi5tYXRyaXgsZWMobi5hLG4uYixuLmMsbi5kLG4uZSxuLmYpKTpXbyl9ZnVuY3Rpb24gTGQobix0LGUsaSl7ZnVuY3Rpb24gcihjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gcyhjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLGUpO2cucHVzaCh7aTp4LTQseDp5ZShjLGgpfSx7aTp4LTIseDp5ZSh1LGYpfSl9ZWxzZShofHxmKSYmZC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZitlKX1mdW5jdGlvbiBvKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKHIoaCkrInJvdGF0ZSgiLG51bGwsaSktMix4OnllKGMsdSl9KSk6dSYmaC5wdXNoKHIoaCkrInJvdGF0ZSgiK3UraSl9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKHIoaCkrInNrZXdYKCIsbnVsbCxpKS0yLHg6eWUoYyx1KX0pOnUmJmgucHVzaChyKGgpKyJza2V3WCgiK3UraSl9ZnVuY3Rpb24gbChjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2gocihkKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zy5wdXNoKHtpOngtNCx4OnllKGMsaCl9LHtpOngtMix4OnllKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJmQucHVzaChyKGQpKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPW4oYyksdT1uKHUpLHMoYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksbyhjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLGEoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKGQpe2Zvcih2YXIgZz0tMSx4PWYubGVuZ3RoLHY7KytnPHg7KWhbKHY9ZltnXSkuaV09di54KGQpO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGljPUxkKENkLCJweCwgIiwicHgpIiwiZGVnKSIpLHJjPUxkKFJkLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gUGQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIGk9bigodD1waSh0KSkuaCwoZT1waShlKSkuaCkscj1ibih0LnMsZS5zKSxzPWJuKHQubCxlLmwpLG89Ym4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiB0Lmg9aShhKSx0LnM9cihhKSx0Lmw9cyhhKSx0Lm9wYWNpdHk9byhhKSx0KyIifX19dmFyIHNjPVBkKHlkKSxveT1QZChibik7dmFyIGppPTAsbXM9MCxwcz0wLElkPTFlMyxYbyxncyxZbz0wLHhpPTAsWm89MCx4cz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxOZD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihuKXtzZXRUaW1lb3V0KG4sMTcpfTtmdW5jdGlvbiB0cigpe3JldHVybiB4aXx8KE5kKGF5KSx4aT14cy5ub3coKStabyl9ZnVuY3Rpb24gYXkoKXt4aT0wfWZ1bmN0aW9uIHlzKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH15cy5wcm90b3R5cGU9Sm8ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5cyxyZXN0YXJ0OmZ1bmN0aW9uKG4sdCxlKXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KGU9PW51bGw/dHIoKTorZSkrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmdzIT09dGhpcyYmKGdzP2dzLl9uZXh0PXRoaXM6WG89dGhpcyxncz10aGlzKSx0aGlzLl9jYWxsPW4sdGhpcy5fdGltZT1lLG9jKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLG9jKCkpfX07ZnVuY3Rpb24gSm8obix0LGUpe3ZhciBpPW5ldyB5cztyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIEZkKCl7dHIoKSwrK2ppO2Zvcih2YXIgbj1Ybyx0O247KSh0PXhpLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS1qaX1mdW5jdGlvbiBEZCgpe3hpPShZbz14cy5ub3coKSkrWm8samk9bXM9MDt0cnl7RmQoKX1maW5hbGx5e2ppPTAsY3koKSx4aT0wfX1mdW5jdGlvbiBseSgpe3ZhciBuPXhzLm5vdygpLHQ9bi1Zbzt0PklkJiYoWm8tPXQsWW89bil9ZnVuY3Rpb24gY3koKXtmb3IodmFyIG4sdD1YbyxlLGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpYbz1lKTtncz1uLG9jKGkpfWZ1bmN0aW9uIG9jKG4pe2lmKCFqaSl7bXMmJihtcz1jbGVhclRpbWVvdXQobXMpKTt2YXIgdD1uLXhpO3Q+MjQ/KG48MS8wJiYobXM9c2V0VGltZW91dChEZCxuLXhzLm5vdygpLVpvKSkscHMmJihwcz1jbGVhckludGVydmFsKHBzKSkpOihwc3x8KFlvPXhzLm5vdygpLHBzPXNldEludGVydmFsKGx5LElkKSksamk9MSxOZChEZCkpfX1mdW5jdGlvbiAkbyhuLHQsZSl7dmFyIGk9bmV3IHlzO3JldHVybiB0PXQ9PW51bGw/MDordCxpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0LGUpLGl9dmFyIHV5PVdsKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLGh5PVtdLFVkPTAsYWM9MSxRbz0yLEtvPTMsemQ9NCxqbz01LHZzPTY7ZnVuY3Rpb24ga24obix0LGUsaSxyLHMpe3ZhciBvPW4uX190cmFuc2l0aW9uO2lmKCFvKW4uX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYoZSBpbiBvKXJldHVybjtmeShuLGUse25hbWU6dCxpbmRleDppLGdyb3VwOnIsb246dXksdHdlZW46aHksdGltZTpzLnRpbWUsZGVsYXk6cy5kZWxheSxkdXJhdGlvbjpzLmR1cmF0aW9uLGVhc2U6cy5lYXNlLHRpbWVyOm51bGwsc3RhdGU6VWR9KX1mdW5jdGlvbiBfcyhuLHQpe3ZhciBlPXVlKG4sdCk7aWYoZS5zdGF0ZT5VZCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIEFlKG4sdCl7dmFyIGU9dWUobix0KTtpZihlLnN0YXRlPktvKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIHVlKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gZnkobix0LGUpe3ZhciBpPW4uX190cmFuc2l0aW9uLHI7aVt0XT1lLGUudGltZXI9Sm8ocywwLGUudGltZSk7ZnVuY3Rpb24gcyhjKXtlLnN0YXRlPWFjLGUudGltZXIucmVzdGFydChvLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZvKGMtZS5kZWxheSl9ZnVuY3Rpb24gbyhjKXt2YXIgdSxoLGYsZDtpZihlLnN0YXRlIT09YWMpcmV0dXJuIGwoKTtmb3IodSBpbiBpKWlmKGQ9aVt1XSxkLm5hbWU9PT1lLm5hbWUpe2lmKGQuc3RhdGU9PT1LbylyZXR1cm4gJG8obyk7ZC5zdGF0ZT09PXpkPyhkLnN0YXRlPXZzLGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiaW50ZXJydXB0IixuLG4uX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgaVt1XSk6K3U8dCYmKGQuc3RhdGU9dnMsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZigkbyhmdW5jdGlvbigpe2Uuc3RhdGU9PT1LbyYmKGUuc3RhdGU9emQsZS50aW1lci5yZXN0YXJ0KGEsZS5kZWxheSxlLnRpbWUpLGEoYykpfSksZS5zdGF0ZT1RbyxlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09UW8pe2ZvcihlLnN0YXRlPUtvLHI9bmV3IEFycmF5KGY9ZS50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKGQ9ZS50d2Vlblt1XS52YWx1ZS5jYWxsKG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKHJbKytoXT1kKTtyLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIGEoYyl7Zm9yKHZhciB1PWM8ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLGMvZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydChsKSxlLnN0YXRlPWpvLDEpLGg9LTEsZj1yLmxlbmd0aDsrK2g8ZjspcltoXS5jYWxsKG4sdSk7ZS5zdGF0ZT09PWpvJiYoZS5vbi5jYWxsKCJlbmQiLG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe2Uuc3RhdGU9dnMsZS50aW1lci5zdG9wKCksZGVsZXRlIGlbdF07Zm9yKHZhciBjIGluIGkpcmV0dXJuO2RlbGV0ZSBuLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gd3Mobix0KXt2YXIgZT1uLl9fdHJhbnNpdGlvbixpLHIscz0hMCxvO2lmKCEhZSl7dD10PT1udWxsP251bGw6dCsiIjtmb3IobyBpbiBlKXtpZigoaT1lW29dKS5uYW1lIT09dCl7cz0hMTtjb250aW51ZX1yPWkuc3RhdGU+UW8mJmkuc3RhdGU8am8saS5zdGF0ZT12cyxpLnRpbWVyLnN0b3AoKSxpLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIixuLG4uX19kYXRhX18saS5pbmRleCxpLmdyb3VwKSxkZWxldGUgZVtvXX1zJiZkZWxldGUgbi5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIEJkKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3cyh0aGlzLG4pfSl9ZnVuY3Rpb24gZHkobix0KXt2YXIgZSxpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsbikscz1yLnR3ZWVuO2lmKHMhPT1lKXtpPWU9cztmb3IodmFyIG89MCxhPWkubGVuZ3RoO288YTsrK28paWYoaVtvXS5uYW1lPT09dCl7aT1pLnNsaWNlKCksaS5zcGxpY2UobywxKTticmVha319ci50d2Vlbj1pfX1mdW5jdGlvbiBweShuLHQsZSl7dmFyIGkscjtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9QWUodGhpcyxuKSxvPXMudHdlZW47aWYobyE9PWkpe3I9KGk9bykuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6dCx2YWx1ZTplfSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PXQpe3JbbF09YTticmVha31sPT09YyYmci5wdXNoKGEpfXMudHdlZW49cn19ZnVuY3Rpb24gT2Qobix0KXt2YXIgZT10aGlzLl9pZDtpZihuKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT11ZSh0aGlzLm5vZGUoKSxlKS50d2VlbixyPTAscz1pLmxlbmd0aCxvO3I8czsrK3IpaWYoKG89aVtyXSkubmFtZT09PW4pcmV0dXJuIG8udmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9keTpweSkoZSxuLHQpKX1mdW5jdGlvbiBlcihuLHQsZSl7dmFyIGk9bi5faWQ7cmV0dXJuIG4uZWFjaChmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsaSk7KHIudmFsdWV8fChyLnZhbHVlPXt9KSlbdF09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihyKXtyZXR1cm4gdWUocixpKS52YWx1ZVt0XX19ZnVuY3Rpb24gdGEobix0KXt2YXIgZTtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3llOnQgaW5zdGFuY2VvZiBKZT9taTooZT1KZSh0KSk/KHQ9ZSxtaSk6ZnMpKG4sdCl9ZnVuY3Rpb24gbXkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGd5KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24geHkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKG4pO3JldHVybiBvPT09cj9udWxsOm89PT1pP3M6cz10KGk9byxlKX19ZnVuY3Rpb24geXkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTtyZXR1cm4gbz09PXI/bnVsbDpvPT09aT9zOnM9dChpPW8sZSl9fWZ1bmN0aW9uIHZ5KG4sdCxlKXt2YXIgaSxyLHM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8sYT1lKHRoaXMpLGw7cmV0dXJuIGE9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKToobz10aGlzLmdldEF0dHJpYnV0ZShuKSxsPWErIiIsbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpKX19ZnVuY3Rpb24gX3kobix0LGUpe3ZhciBpLHIscztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbyxhPWUodGhpcyksbDtyZXR1cm4gYT09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKToobz10aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCksbD1hKyIiLG89PT1sP251bGw6bz09PWkmJmw9PT1yP3M6KHI9bCxzPXQoaT1vLGEpKSl9fWZ1bmN0aW9uIGtkKG4sdCl7dmFyIGU9d24obiksaT1lPT09InRyYW5zZm9ybSI/cmM6dGE7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKG4sdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KGUubG9jYWw/X3k6dnkpKGUsaSxlcih0aGlzLCJhdHRyLiIrbix0KSk6dD09bnVsbD8oZS5sb2NhbD9neTpteSkoZSk6KGUubG9jYWw/eXk6eHkpKGUsaSx0KSl9ZnVuY3Rpb24gd3kobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGUobix0LmNhbGwodGhpcyxlKSl9fWZ1bmN0aW9uIE15KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gYnkobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZNeShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gU3kobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZ3eShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gSGQobix0KXt2YXIgZT0iYXR0ci4iK247aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBpPXduKG4pO3JldHVybiB0aGlzLnR3ZWVuKGUsKGkubG9jYWw/Ynk6U3kpKGksdCkpfWZ1bmN0aW9uIEV5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7X3ModGhpcyxuKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFR5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtfcyh0aGlzLG4pLmRlbGF5PXR9fWZ1bmN0aW9uIFZkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/RXk6VHkpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIEF5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7QWUodGhpcyxuKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEN5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtBZSh0aGlzLG4pLmR1cmF0aW9uPXR9fWZ1bmN0aW9uIEdkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/QXk6Q3kpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmR1cmF0aW9ufWZ1bmN0aW9uIFJ5KG4sdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0FlKHRoaXMsbikuZWFzZT10fX1mdW5jdGlvbiBXZChuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goUnkodCxuKSk6dWUodGhpcy5ub2RlKCksdCkuZWFzZX1mdW5jdGlvbiBxZChuKXt0eXBlb2YgbiE9ImZ1bmN0aW9uIiYmKG49YXMobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIHM9dFtyXSxvPXMubGVuZ3RoLGE9aVtyXT1bXSxsLGM9MDtjPG87KytjKShsPXNbY10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLGMscykmJmEucHVzaChsKTtyZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBYZChuKXtpZihuLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgd2Uobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIEx5KG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fHQ9PT0ic3RhcnQifSl9ZnVuY3Rpb24gUHkobix0LGUpe3ZhciBpLHIscz1MeSh0KT9fczpBZTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1zKHRoaXMsbiksYT1vLm9uO2EhPT1pJiYocj0oaT1hKS5jb3B5KCkpLm9uKHQsZSksby5vbj1yfX1mdW5jdGlvbiBZZChuLHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dWUodGhpcy5ub2RlKCksZSkub24ub24obik6dGhpcy5lYWNoKFB5KGUsbix0KSl9ZnVuY3Rpb24gRHkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PW4pcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIFpkKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLER5KHRoaXMuX2lkKSl9ZnVuY3Rpb24gSmQobil7dmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1kaShuKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKWZvcih2YXIgYT1pW29dLGw9YS5sZW5ndGgsYz1zW29dPW5ldyBBcnJheShsKSx1LGgsZj0wO2Y8bDsrK2YpKHU9YVtmXSkmJihoPW4uY2FsbCh1LHUuX19kYXRhX18sZixhKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksY1tmXT1oLGtuKGNbZl0sdCxlLGYsYyx1ZSh1LGUpKSk7cmV0dXJuIG5ldyB3ZShzLHRoaXMuX3BhcmVudHMsdCxlKX1mdW5jdGlvbiAkZChuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz1bXSxvPVtdLGE9MDthPHI7KythKWZvcih2YXIgbD1pW2FdLGM9bC5sZW5ndGgsdSxoPTA7aDxjOysraClpZih1PWxbaF0pe2Zvcih2YXIgZj1uLmNhbGwodSx1Ll9fZGF0YV9fLGgsbCksZCxnPXVlKHUsZSkseD0wLHY9Zi5sZW5ndGg7eDx2OysreCkoZD1mW3hdKSYma24oZCx0LGUseCxmLGcpO3MucHVzaChmKSxvLnB1c2godSl9cmV0dXJuIG5ldyB3ZShzLG8sdCxlKX12YXIgSXk9TW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEtkKCl7cmV0dXJuIG5ldyBJeSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gTnkobix0KXt2YXIgZSxpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9T24odGhpcyxuKSxvPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLE9uKHRoaXMsbikpO3JldHVybiBzPT09bz9udWxsOnM9PT1lJiZvPT09aT9yOnI9dChlPXMsaT1vKX19ZnVuY3Rpb24gUWQobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gRnkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbik7cmV0dXJuIG89PT1yP251bGw6bz09PWk/czpzPXQoaT1vLGUpfX1mdW5jdGlvbiB6eShuLHQsZSl7dmFyIGkscixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbiksYT1lKHRoaXMpLGw9YSsiIjtyZXR1cm4gYT09bnVsbCYmKGw9YT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKSxPbih0aGlzLG4pKSksbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpfX1mdW5jdGlvbiBVeShuLHQpe3ZhciBlLGkscixzPSJzdHlsZS4iK3Qsbz0iZW5kLiIrcyxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUFlKHRoaXMsbiksYz1sLm9uLHU9bC52YWx1ZVtzXT09bnVsbD9hfHwoYT1RZCh0KSk6dm9pZCAwOyhjIT09ZXx8ciE9PXUpJiYoaT0oZT1jKS5jb3B5KCkpLm9uKG8scj11KSxsLm9uPWl9fWZ1bmN0aW9uIGpkKG4sdCxlKXt2YXIgaT0obis9IiIpPT0idHJhbnNmb3JtIj9pYzp0YTtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4obixOeShuLGkpKS5vbigiZW5kLnN0eWxlLiIrbixRZChuKSk6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKG4senkobixpLGVyKHRoaXMsInN0eWxlLiIrbix0KSkpLmVhY2goVXkodGhpcy5faWQsbikpOnRoaXMuc3R5bGVUd2VlbihuLEZ5KG4saSx0KSxlKS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX1mdW5jdGlvbiBCeShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LmNhbGwodGhpcyxpKSxlKX19ZnVuY3Rpb24gT3kobix0LGUpe3ZhciBpLHI7ZnVuY3Rpb24gcygpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09ciYmKGk9KHI9bykmJkJ5KG4sbyxlKSksaX1yZXR1cm4gcy5fdmFsdWU9dCxzfWZ1bmN0aW9uIHRwKG4sdCxlKXt2YXIgaT0ic3R5bGUuIisobis9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLE95KG4sdCxlPT1udWxsPyIiOmUpKX1mdW5jdGlvbiBreShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIEh5KG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGVwKG4pe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2Ygbj09ImZ1bmN0aW9uIj9IeShlcih0aGlzLCJ0ZXh0IixuKSk6a3kobj09bnVsbD8iIjpuKyIiKSl9ZnVuY3Rpb24gVnkobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9bi5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIEd5KG4pe3ZhciB0LGU7ZnVuY3Rpb24gaSgpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09ZSYmKHQ9KGU9cikmJlZ5KHIpKSx0fXJldHVybiBpLl92YWx1ZT1uLGl9ZnVuY3Rpb24gbnAobil7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYobj09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LEd5KG4pKX1mdW5jdGlvbiBpcCgpe2Zvcih2YXIgbj10aGlzLl9uYW1lLHQ9dGhpcy5faWQsZT1lYSgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz0wO3M8cjsrK3MpZm9yKHZhciBvPWlbc10sYT1vLmxlbmd0aCxsLGM9MDtjPGE7KytjKWlmKGw9b1tjXSl7dmFyIHU9dWUobCx0KTtrbihsLG4sZSxjLG8se3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyxuLGUpfWZ1bmN0aW9uIHJwKCl7dmFyIG4sdCxlPXRoaXMsaT1lLl9pZCxyPWUuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihzLG8pe3ZhciBhPXt2YWx1ZTpvfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0tcj09PTAmJnMoKX19O2UuZWFjaChmdW5jdGlvbigpe3ZhciBjPUFlKHRoaXMsaSksdT1jLm9uO3UhPT1uJiYodD0obj11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKGEpLHQuXy5pbnRlcnJ1cHQucHVzaChhKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFd5PTA7ZnVuY3Rpb24gd2Uobix0LGUsaSl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9ZSx0aGlzLl9pZD1pfWZ1bmN0aW9uIGxjKG4pe3JldHVybiBNbigpLnRyYW5zaXRpb24obil9ZnVuY3Rpb24gZWEoKXtyZXR1cm4rK1d5fXZhciBucj1Nbi5wcm90b3R5cGU7d2UucHJvdG90eXBlPWxjLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d2Usc2VsZWN0OkpkLHNlbGVjdEFsbDokZCxmaWx0ZXI6cWQsbWVyZ2U6WGQsc2VsZWN0aW9uOktkLHRyYW5zaXRpb246aXAsY2FsbDpuci5jYWxsLG5vZGVzOm5yLm5vZGVzLG5vZGU6bnIubm9kZSxzaXplOm5yLnNpemUsZW1wdHk6bnIuZW1wdHksZWFjaDpuci5lYWNoLG9uOllkLGF0dHI6a2QsYXR0clR3ZWVuOkhkLHN0eWxlOmpkLHN0eWxlVHdlZW46dHAsdGV4dDplcCx0ZXh0VHdlZW46bnAscmVtb3ZlOlpkLHR3ZWVuOk9kLGRlbGF5OlZkLGR1cmF0aW9uOkdkLGVhc2U6V2QsZW5kOnJwfTtmdW5jdGlvbiBuYShuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn12YXIgY2M9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOm5hfTtmdW5jdGlvbiBxeShuLHQpe2Zvcih2YXIgZTshKGU9bi5fX3RyYW5zaXRpb24pfHwhKGU9ZVt0XSk7KWlmKCEobj1uLnBhcmVudE5vZGUpKXJldHVybiBjYy50aW1lPXRyKCksY2M7cmV0dXJuIGV9ZnVuY3Rpb24gc3Aobil7dmFyIHQsZTtuIGluc3RhbmNlb2Ygd2U/KHQ9bi5faWQsbj1uLl9uYW1lKToodD1lYSgpLChlPWNjKS50aW1lPXRyKCksbj1uPT1udWxsP251bGw6bisiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9MDtzPHI7KytzKWZvcih2YXIgbz1pW3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYma24obCxuLHQsYyxvLGV8fHF5KGwsdCkpO3JldHVybiBuZXcgd2UoaSx0aGlzLl9wYXJlbnRzLG4sdCl9TW4ucHJvdG90eXBlLmludGVycnVwdD1CZDtNbi5wcm90b3R5cGUudHJhbnNpdGlvbj1zcDtmdW5jdGlvbiBvcChuKXtyZXR1cm5bK25bMF0sK25bMV1dfWZ1bmN0aW9uIFh5KG4pe3JldHVybltvcChuWzBdKSxvcChuWzFdKV19dmFyIEdQPXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAodWMpLGlucHV0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PW51bGw/bnVsbDpbWytuWzBdLHRbMF1bMV1dLFsrblsxXSx0WzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbiYmW25bMF1bMF0sblsxXVswXV19fSxXUD17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuLHQpe3JldHVybiBuPT1udWxsP251bGw6W1t0WzBdWzBdLCtuWzBdXSxbdFsxXVswXSwrblsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG4mJltuWzBdWzFdLG5bMV1bMV1dfX0scVA9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbD9udWxsOlh5KG4pfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG59fTtmdW5jdGlvbiB1YyhuKXtyZXR1cm57dHlwZTpufX12YXIgYXA9TWF0aC5QSSxZeT1hcC8yLFp5PWFwKjI7dmFyIEp5PUFycmF5LnByb3RvdHlwZS5zbGljZTt2YXIgQmU9IiQiO2Z1bmN0aW9uIGlhKCl7fWlhLnByb3RvdHlwZT1scC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlhLGhhczpmdW5jdGlvbihuKXtyZXR1cm4gQmUrbiBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbQmUrbl19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzW0JlK25dPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PUJlK247cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PUJlJiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBufSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4ucHVzaCh0aGlzW3RdKTtyZXR1cm4gbn0sZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIG59LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmKytuO3JldHVybiBufSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG5bMF09PT1CZSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4odGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07ZnVuY3Rpb24gbHAobix0KXt2YXIgZT1uZXcgaWE7aWYobiBpbnN0YW5jZW9mIGlhKW4uZWFjaChmdW5jdGlvbihhLGwpe2Uuc2V0KGwsYSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikpe3ZhciBpPS0xLHI9bi5sZW5ndGgscztpZih0PT1udWxsKWZvcig7KytpPHI7KWUuc2V0KGksbltpXSk7ZWxzZSBmb3IoOysraTxyOyllLnNldCh0KHM9bltpXSxpLG4pLHMpfWVsc2UgaWYobilmb3IodmFyIG8gaW4gbillLnNldChvLG5bb10pO3JldHVybiBlfXZhciB5aT1scDtmdW5jdGlvbiByYSgpe312YXIgdmk9eWkucHJvdG90eXBlO3JhLnByb3RvdHlwZT0keS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnJhLGhhczp2aS5oYXMsYWRkOmZ1bmN0aW9uKG4pe3JldHVybiBuKz0iIix0aGlzW0JlK25dPW4sdGhpc30scmVtb3ZlOnZpLnJlbW92ZSxjbGVhcjp2aS5jbGVhcix2YWx1ZXM6dmkua2V5cyxzaXplOnZpLnNpemUsZW1wdHk6dmkuZW1wdHksZWFjaDp2aS5lYWNofTtmdW5jdGlvbiAkeShuLHQpe3ZhciBlPW5ldyByYTtpZihuIGluc3RhbmNlb2YgcmEpbi5lYWNoKGZ1bmN0aW9uKHMpe2UuYWRkKHMpfSk7ZWxzZSBpZihuKXt2YXIgaT0tMSxyPW4ubGVuZ3RoO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspZS5hZGQobltpXSk7ZWxzZSBmb3IoOysraTxyOyllLmFkZCh0KG5baV0saSxuKSl9cmV0dXJuIGV9dmFyIEt5PUFycmF5LnByb3RvdHlwZSxjcD1LeS5zbGljZTt2YXIgVEk9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIGhwKG4pe3JldHVybiBNYXRoLmFicyhuPU1hdGgucm91bmQobikpPj0xZTIxP24udG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpuLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBfaShuLHQpe2lmKChlPShuPXQ/bi50b0V4cG9uZW50aWFsKHQtMSk6bi50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxpPW4uc2xpY2UoMCxlKTtyZXR1cm5baS5sZW5ndGg+MT9pWzBdK2kuc2xpY2UoMik6aSwrbi5zbGljZShlKzEpXX1mdW5jdGlvbiB1bihuKXtyZXR1cm4gbj1faShNYXRoLmFicyhuKSksbj9uWzFdOk5hTn1mdW5jdGlvbiBmcChuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2Zvcih2YXIgcj1lLmxlbmd0aCxzPVtdLG89MCxhPW5bMF0sbD0wO3I+MCYmYT4wJiYobCthKzE+aSYmKGE9TWF0aC5tYXgoMSxpLWwpKSxzLnB1c2goZS5zdWJzdHJpbmcoci09YSxyK2EpKSwhKChsKz1hKzEpPmkpKTspYT1uW289KG8rMSklbi5sZW5ndGhdO3JldHVybiBzLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiBkcChuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gblsrZV19KX19dmFyIHR2PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIEhuKG4pe2lmKCEodD10di5leGVjKG4pKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK24pO3ZhciB0O3JldHVybiBuZXcgc2Eoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9SG4ucHJvdG90eXBlPXNhLnByb3RvdHlwZTtmdW5jdGlvbiBzYShuKXt0aGlzLmZpbGw9bi5maWxsPT09dm9pZCAwPyIgIjpuLmZpbGwrIiIsdGhpcy5hbGlnbj1uLmFsaWduPT09dm9pZCAwPyI+IjpuLmFsaWduKyIiLHRoaXMuc2lnbj1uLnNpZ249PT12b2lkIDA/Ii0iOm4uc2lnbisiIix0aGlzLnN5bWJvbD1uLnN5bWJvbD09PXZvaWQgMD8iIjpuLnN5bWJvbCsiIix0aGlzLnplcm89ISFuLnplcm8sdGhpcy53aWR0aD1uLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorbi53aWR0aCx0aGlzLmNvbW1hPSEhbi5jb21tYSx0aGlzLnByZWNpc2lvbj1uLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K24ucHJlY2lzaW9uLHRoaXMudHJpbT0hIW4udHJpbSx0aGlzLnR5cGU9bi50eXBlPT09dm9pZCAwPyIiOm4udHlwZSsiIn1zYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiBwcChuKXt0OmZvcih2YXIgdD1uLmxlbmd0aCxlPTEsaT0tMSxyO2U8dDsrK2Upc3dpdGNoKG5bZV0pe2Nhc2UiLiI6aT1yPWU7YnJlYWs7Y2FzZSIwIjppPT09MCYmKGk9ZSkscj1lO2JyZWFrO2RlZmF1bHQ6aWYoIStuW2VdKWJyZWFrIHQ7aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP24uc2xpY2UoMCxpKStuLnNsaWNlKHIrMSk6bn12YXIgaGM7ZnVuY3Rpb24gbXAobix0KXt2YXIgZT1faShuLHQpO2lmKCFlKXJldHVybiBuKyIiO3ZhciBpPWVbMF0scj1lWzFdLHM9ci0oaGM9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSozKSsxLG89aS5sZW5ndGg7cmV0dXJuIHM9PT1vP2k6cz5vP2krbmV3IEFycmF5KHMtbysxKS5qb2luKCIwIik6cz4wP2kuc2xpY2UoMCxzKSsiLiIraS5zbGljZShzKToiMC4iK25ldyBBcnJheSgxLXMpLmpvaW4oIjAiKStfaShuLE1hdGgubWF4KDAsdCtzLTEpKVswXX1mdW5jdGlvbiBmYyhuLHQpe3ZhciBlPV9pKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIGRjPXsiJSI6ZnVuY3Rpb24obix0KXtyZXR1cm4obioxMDApLnRvRml4ZWQodCl9LGI6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24obil7cmV0dXJuIG4rIiJ9LGQ6aHAsZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24obix0KXtyZXR1cm4gZmMobioxMDAsdCl9LHI6ZmMsczptcCxYOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIHBjKG4pe3JldHVybiBufXZhciBncD1BcnJheS5wcm90b3R5cGUubWFwLHhwPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIHlwKG4pe3ZhciB0PW4uZ3JvdXBpbmc9PT12b2lkIDB8fG4udGhvdXNhbmRzPT09dm9pZCAwP3BjOmZwKGdwLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSxlPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVswXSsiIixpPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVsxXSsiIixyPW4uZGVjaW1hbD09PXZvaWQgMD8iLiI6bi5kZWNpbWFsKyIiLHM9bi5udW1lcmFscz09PXZvaWQgMD9wYzpkcChncC5jYWxsKG4ubnVtZXJhbHMsU3RyaW5nKSksbz1uLnBlcmNlbnQ9PT12b2lkIDA/IiUiOm4ucGVyY2VudCsiIixhPW4ubWludXM9PT12b2lkIDA/Ii0iOm4ubWludXMrIiIsbD1uLm5hbj09PXZvaWQgMD8iTmFOIjpuLm5hbisiIjtmdW5jdGlvbiBjKGgpe2g9SG4oaCk7dmFyIGY9aC5maWxsLGQ9aC5hbGlnbixnPWguc2lnbix4PWguc3ltYm9sLHY9aC56ZXJvLG09aC53aWR0aCxwPWguY29tbWEsYj1oLnByZWNpc2lvbixfPWgudHJpbSxTPWgudHlwZTtTPT09Im4iPyhwPSEwLFM9ImciKTpkY1tTXXx8KGI9PT12b2lkIDAmJihiPTEyKSxfPSEwLFM9ImciKSwodnx8Zj09PSIwIiYmZD09PSI9IikmJih2PSEwLGY9IjAiLGQ9Ij0iKTt2YXIgTD14PT09IiQiP2U6eD09PSIjIiYmL1tib3hYXS8udGVzdChTKT8iMCIrUy50b0xvd2VyQ2FzZSgpOiIiLEE9eD09PSIkIj9pOi9bJXBdLy50ZXN0KFMpP286IiIsSD1kY1tTXSx0dD0vW2RlZmdwcnMlXS8udGVzdChTKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KFMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIFgoeSl7dmFyIFI9TCxEPUEsRix6LE47aWYoUz09PSJjIilEPUgoeSkrRCx5PSIiO2Vsc2V7eT0reTt2YXIgVj15PDB8fDEveTwwO2lmKHk9aXNOYU4oeSk/bDpIKE1hdGguYWJzKHkpLGIpLF8mJih5PXBwKHkpKSxWJiYreT09MCYmZyE9PSIrIiYmKFY9ITEpLFI9KFY/Zz09PSIoIj9nOmE6Zz09PSItInx8Zz09PSIoIj8iIjpnKStSLEQ9KFM9PT0icyI/eHBbOCtoYy8zXToiIikrRCsoViYmZz09PSIoIj8iKSI6IiIpLHR0KXtmb3IoRj0tMSx6PXkubGVuZ3RoOysrRjx6OylpZihOPXkuY2hhckNvZGVBdChGKSw0OD5OfHxOPjU3KXtEPShOPT09NDY/cit5LnNsaWNlKEYrMSk6eS5zbGljZShGKSkrRCx5PXkuc2xpY2UoMCxGKTticmVha319fXAmJiF2JiYoeT10KHksMS8wKSk7dmFyIFE9Ui5sZW5ndGgreS5sZW5ndGgrRC5sZW5ndGgsYXQ9UTxtP25ldyBBcnJheShtLVErMSkuam9pbihmKToiIjtzd2l0Y2gocCYmdiYmKHk9dChhdCt5LGF0Lmxlbmd0aD9tLUQubGVuZ3RoOjEvMCksYXQ9IiIpLGQpe2Nhc2UiPCI6eT1SK3krRCthdDticmVhaztjYXNlIj0iOnk9UithdCt5K0Q7YnJlYWs7Y2FzZSJeIjp5PWF0LnNsaWNlKDAsUT1hdC5sZW5ndGg+PjEpK1IreStEK2F0LnNsaWNlKFEpO2JyZWFrO2RlZmF1bHQ6eT1hdCtSK3krRDticmVha31yZXR1cm4gcyh5KX1yZXR1cm4gWC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBoKyIifSxYfWZ1bmN0aW9uIHUoaCxmKXt2YXIgZD1jKChoPUhuKGgpLGgudHlwZT0iZiIsaCkpLGc9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHVuKGYpLzMpKSkqMyx4PU1hdGgucG93KDEwLC1nKSx2PXhwWzgrZy8zXTtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIGQoeCptKSt2fX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OnV9fXZhciBvYSxPZSxhYTttYyh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSk7ZnVuY3Rpb24gbWMobil7cmV0dXJuIG9hPXlwKG4pLE9lPW9hLmZvcm1hdCxhYT1vYS5mb3JtYXRQcmVmaXgsb2F9ZnVuY3Rpb24gZ2Mobil7cmV0dXJuIE1hdGgubWF4KDAsLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geGMobix0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IodW4odCkvMykpKSozLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geWMobix0KXtyZXR1cm4gbj1NYXRoLmFicyhuKSx0PU1hdGguYWJzKHQpLW4sTWF0aC5tYXgoMCx1bih0KS11bihuKSkrMX1mdW5jdGlvbiBXZSgpe3JldHVybiBNYXRoLnJhbmRvbSgpfXZhciBldj1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXtyZXR1cm4gaT1pPT1udWxsPzA6K2kscj1yPT1udWxsPzE6K3IsYXJndW1lbnRzLmxlbmd0aD09PTE/KHI9aSxpPTApOnItPWksZnVuY3Rpb24oKXtyZXR1cm4gdCgpKnIraX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciB2Yz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXt2YXIgcyxvO3JldHVybiBpPWk9PW51bGw/MDoraSxyPXI9PW51bGw/MTorcixmdW5jdGlvbigpe3ZhciBhO2lmKHMhPW51bGwpYT1zLHM9bnVsbDtlbHNlIGRvIHM9dCgpKjItMSxhPXQoKSoyLTEsbz1zKnMrYSphO3doaWxlKCFvfHxvPjEpO3JldHVybiBpK3IqYSpNYXRoLnNxcnQoLTIqTWF0aC5sb2cobykvbyl9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTt2YXIgbnY9ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKCl7dmFyIGk9dmMuc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAoaSgpKX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciBfYz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPTAscz0wO3M8aTsrK3Mpcis9dCgpO3JldHVybiByfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIGl2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXt2YXIgcj1fYy5zb3VyY2UodCkoaSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9pfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIHJ2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS10KCkpL2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTtmdW5jdGlvbiBQZShuLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2Uobik7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKHQpLmRvbWFpbihuKTticmVha31yZXR1cm4gdGhpc312YXIgdnA9QXJyYXkucHJvdG90eXBlLGJzPXZwLm1hcCx3aT12cC5zbGljZTtmdW5jdGlvbiBfcChuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gd2Mobil7cmV0dXJuK259dmFyIHdwPVswLDFdO2Z1bmN0aW9uIERlKG4pe3JldHVybiBufWZ1bmN0aW9uIE1jKG4sdCl7cmV0dXJuKHQtPW49K24pP2Z1bmN0aW9uKGUpe3JldHVybihlLW4pL3R9Ol9wKGlzTmFOKHQpP05hTjouNSl9ZnVuY3Rpb24gTXAobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV0saTtyZXR1cm4gdD5lJiYoaT10LHQ9ZSxlPWkpLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUscikpfX1mdW5jdGlvbiBvdihuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0scz10WzBdLG89dFsxXTtyZXR1cm4gcjxpPyhpPU1jKHIsaSkscz1lKG8scykpOihpPU1jKGkscikscz1lKHMsbykpLGZ1bmN0aW9uKGEpe3JldHVybiBzKGkoYSkpfX1mdW5jdGlvbiBhdihuLHQsZSl7dmFyIGk9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpLTEscj1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSksbz0tMTtmb3IobltpXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5zbGljZSgpLnJldmVyc2UoKSk7KytvPGk7KXJbb109TWMobltvXSxuW28rMV0pLHNbb109ZSh0W29dLHRbbysxXSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBsPUJuKG4sYSwxLGkpLTE7cmV0dXJuIHNbbF0ocltsXShhKSl9fWZ1bmN0aW9uIFZuKG4sdCl7cmV0dXJuIHQuZG9tYWluKG4uZG9tYWluKCkpLnJhbmdlKG4ucmFuZ2UoKSkuaW50ZXJwb2xhdGUobi5pbnRlcnBvbGF0ZSgpKS5jbGFtcChuLmNsYW1wKCkpLnVua25vd24obi51bmtub3duKCkpfWZ1bmN0aW9uIFNzKCl7dmFyIG49d3AsdD13cCxlPWdpLGkscixzLG89RGUsYSxsLGM7ZnVuY3Rpb24gdSgpe3JldHVybiBhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP2F2Om92LGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/czoobHx8KGw9YShuLm1hcChpKSx0LGUpKSkoaShvKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBvKHIoKGN8fChjPWEodCxuLm1hcChpKSx5ZSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1icy5jYWxsKGYsd2MpLG89PT1EZXx8KG89TXAobikpLHUoKSk6bi5zbGljZSgpfSxoLnJhbmdlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXdpLmNhbGwoZiksdSgpKTp0LnNsaWNlKCl9LGgucmFuZ2VSb3VuZD1mdW5jdGlvbihmKXtyZXR1cm4gdD13aS5jYWxsKGYpLGU9dGMsdSgpfSxoLmNsYW1wPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWY/TXAobik6RGUsaCk6byE9PURlfSxoLmludGVycG9sYXRlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWYsdSgpKTplfSxoLnVua25vd249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZixoKTpzfSxmdW5jdGlvbihmLGQpe3JldHVybiBpPWYscj1kLHUoKX19ZnVuY3Rpb24gRXMobix0KXtyZXR1cm4gU3MoKShuLHQpfWZ1bmN0aW9uIGJjKG4sdCxlLGkpe3ZhciByPV9uKG4sdCxlKSxzO3N3aXRjaChpPUhuKGk9PW51bGw/IixmIjppKSxpLnR5cGUpe2Nhc2UicyI6e3ZhciBvPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gaS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXhjKHIsbykpJiYoaS5wcmVjaXNpb249cyksYWEoaSxvKX1jYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjp7aS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXljKHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e2kucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4ocz1nYyhyKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iJSIpKjIpO2JyZWFrfX1yZXR1cm4gT2UoaSl9ZnVuY3Rpb24gTWkobil7dmFyIHQ9bi5kb21haW47cmV0dXJuIG4udGlja3M9ZnVuY3Rpb24oZSl7dmFyIGk9dCgpO3JldHVybiBycyhpWzBdLGlbaS5sZW5ndGgtMV0sZT09bnVsbD8xMDplKX0sbi50aWNrRm9ybWF0PWZ1bmN0aW9uKGUsaSl7dmFyIHI9dCgpO3JldHVybiBiYyhyWzBdLHJbci5sZW5ndGgtMV0sZT09bnVsbD8xMDplLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7ZT09bnVsbCYmKGU9MTApO3ZhciBpPXQoKSxyPTAscz1pLmxlbmd0aC0xLG89aVtyXSxhPWlbc10sbDtyZXR1cm4gYTxvJiYobD1vLG89YSxhPWwsbD1yLHI9cyxzPWwpLGw9SmkobyxhLGUpLGw+MD8obz1NYXRoLmZsb29yKG8vbCkqbCxhPU1hdGguY2VpbChhL2wpKmwsbD1KaShvLGEsZSkpOmw8MCYmKG89TWF0aC5jZWlsKG8qbCkvbCxhPU1hdGguZmxvb3IoYSpsKS9sLGw9SmkobyxhLGUpKSxsPjA/KGlbcl09TWF0aC5mbG9vcihvL2wpKmwsaVtzXT1NYXRoLmNlaWwoYS9sKSpsLHQoaSkpOmw8MCYmKGlbcl09TWF0aC5jZWlsKG8qbCkvbCxpW3NdPU1hdGguZmxvb3IoYSpsKS9sLHQoaSkpLG59LG59ZnVuY3Rpb24gaXIoKXt2YXIgbj1FcyhEZSxEZSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLGlyKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksTWkobil9ZnVuY3Rpb24gbGEobix0KXtuPW4uc2xpY2UoKTt2YXIgZT0wLGk9bi5sZW5ndGgtMSxyPW5bZV0scz1uW2ldLG87cmV0dXJuIHM8ciYmKG89ZSxlPWksaT1vLG89cixyPXMscz1vKSxuW2VdPXQuZmxvb3IociksbltpXT10LmNlaWwocyksbn1mdW5jdGlvbiBicChuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gU3Aobil7cmV0dXJuIE1hdGguZXhwKG4pfWZ1bmN0aW9uIGx2KG4pe3JldHVybi1NYXRoLmxvZygtbil9ZnVuY3Rpb24gY3Yobil7cmV0dXJuLU1hdGguZXhwKC1uKX1mdW5jdGlvbiB1dihuKXtyZXR1cm4gaXNGaW5pdGUobik/KygiMWUiK24pOm48MD8wOm59ZnVuY3Rpb24gaHYobil7cmV0dXJuIG49PT0xMD91djpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX1mdW5jdGlvbiBmdihuKXtyZXR1cm4gbj09PU1hdGguRT9NYXRoLmxvZzpuPT09MTAmJk1hdGgubG9nMTB8fG49PT0yJiZNYXRoLmxvZzJ8fChuPU1hdGgubG9nKG4pLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9ufSl9ZnVuY3Rpb24gRXAobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi1uKC10KX19ZnVuY3Rpb24gU2Mobil7dmFyIHQ9bihicCxTcCksZT10LmRvbWFpbixpPTEwLHIscztmdW5jdGlvbiBvKCl7cmV0dXJuIHI9ZnYoaSkscz1odihpKSxlKClbMF08MD8ocj1FcChyKSxzPUVwKHMpLG4obHYsY3YpKTpuKGJwLFNwKSx0fXJldHVybiB0LmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2EsbygpKTppfSx0LmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZShhKSxvKCkpOmUoKX0sdC50aWNrcz1mdW5jdGlvbihhKXt2YXIgbD1lKCksYz1sWzBdLHU9bFtsLmxlbmd0aC0xXSxoOyhoPXU8YykmJihmPWMsYz11LHU9Zik7dmFyIGY9cihjKSxkPXIodSksZyx4LHYsbT1hPT1udWxsPzEwOithLHA9W107aWYoIShpJTEpJiZkLWY8bSl7aWYoZj1NYXRoLnJvdW5kKGYpLTEsZD1NYXRoLnJvdW5kKGQpKzEsYz4wKXtmb3IoO2Y8ZDsrK2YpZm9yKHg9MSxnPXMoZik7eDxpOysreClpZih2PWcqeCwhKHY8Yykpe2lmKHY+dSlicmVhaztwLnB1c2godil9fWVsc2UgZm9yKDtmPGQ7KytmKWZvcih4PWktMSxnPXMoZik7eD49MTstLXgpaWYodj1nKngsISh2PGMpKXtpZih2PnUpYnJlYWs7cC5wdXNoKHYpfX1lbHNlIHA9cnMoZixkLE1hdGgubWluKGQtZixtKSkubWFwKHMpO3JldHVybiBoP3AucmV2ZXJzZSgpOnB9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihhLGwpe2lmKGw9PW51bGwmJihsPWk9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBsIT0iZnVuY3Rpb24iJiYobD1PZShsKSksYT09PTEvMClyZXR1cm4gbDthPT1udWxsJiYoYT0xMCk7dmFyIGM9TWF0aC5tYXgoMSxpKmEvdC50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBoPXUvcyhNYXRoLnJvdW5kKHIodSkpKTtyZXR1cm4gaCppPGktLjUmJihoKj1pKSxoPD1jP2wodSk6IiJ9fSx0Lm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZShsYShlKCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguZmxvb3IocihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguY2VpbChyKGEpKSl9fSkpfSx0fWZ1bmN0aW9uIFRzKCl7dmFyIG49U2MoU3MoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLFRzKCkpLmJhc2Uobi5iYXNlKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksbn12YXIgRWM9bmV3IERhdGUsVGM9bmV3IERhdGU7ZnVuY3Rpb24gWXQobix0LGUsaSl7ZnVuY3Rpb24gcihzKXtyZXR1cm4gbihzPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCtzKSksc31yZXR1cm4gci5mbG9vcj1mdW5jdGlvbihzKXtyZXR1cm4gbihzPW5ldyBEYXRlKCtzKSksc30sci5jZWlsPWZ1bmN0aW9uKHMpe3JldHVybiBuKHM9bmV3IERhdGUocy0xKSksdChzLDEpLG4ocyksc30sci5yb3VuZD1mdW5jdGlvbihzKXt2YXIgbz1yKHMpLGE9ci5jZWlsKHMpO3JldHVybiBzLW88YS1zP286YX0sci5vZmZzZXQ9ZnVuY3Rpb24ocyxvKXtyZXR1cm4gdChzPW5ldyBEYXRlKCtzKSxvPT1udWxsPzE6TWF0aC5mbG9vcihvKSksc30sci5yYW5nZT1mdW5jdGlvbihzLG8sYSl7dmFyIGw9W10sYztpZihzPXIuY2VpbChzKSxhPWE9PW51bGw/MTpNYXRoLmZsb29yKGEpLCEoczxvKXx8IShhPjApKXJldHVybiBsO2RvIGwucHVzaChjPW5ldyBEYXRlKCtzKSksdChzLGEpLG4ocyk7d2hpbGUoYzxzJiZzPG8pO3JldHVybiBsfSxyLmZpbHRlcj1mdW5jdGlvbihzKXtyZXR1cm4gWXQoZnVuY3Rpb24obyl7aWYobz49bylmb3IoO24obyksIXMobyk7KW8uc2V0VGltZShvLTEpfSxmdW5jdGlvbihvLGEpe2lmKG8+PW8paWYoYTwwKWZvcig7KythPD0wOylmb3IoO3QobywtMSksIXMobyk7KTtlbHNlIGZvcig7LS1hPj0wOylmb3IoO3QobywxKSwhcyhvKTspO30pfSxlJiYoci5jb3VudD1mdW5jdGlvbihzLG8pe3JldHVybiBFYy5zZXRUaW1lKCtzKSxUYy5zZXRUaW1lKCtvKSxuKEVjKSxuKFRjKSxNYXRoLmZsb29yKGUoRWMsVGMpKX0sci5ldmVyeT1mdW5jdGlvbihzKXtyZXR1cm4gcz1NYXRoLmZsb29yKHMpLCFpc0Zpbml0ZShzKXx8IShzPjApP251bGw6cz4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24obyl7cmV0dXJuIGkobyklcz09PTB9OmZ1bmN0aW9uKG8pe3JldHVybiByLmNvdW50KDAsbyklcz09PTB9KTpyfSkscn12YXIgY2E9WXQoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LW59KTtjYS5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLmZsb29yKG4pLCFpc0Zpbml0ZShuKXx8IShuPjApP251bGw6bj4xP1l0KGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvbikqbil9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2Uqbil9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvbn0pOmNhfTt2YXIgdWE9Y2EsVHA9Y2EucmFuZ2U7dmFyIGJpPTFlMyxTbj02ZTQsQWM9MzZlNSxoYT04NjRlNSxmYT02MDQ4ZTU7dmFyIEFwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KmJpKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9iaX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDU2Vjb25kcygpfSksZGE9QXAsQ3A9QXAucmFuZ2U7dmFyIFJwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KlNuKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9Tbn0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksQ2M9UnAsZHY9UnAucmFuZ2U7dmFyIExwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmktbi5nZXRNaW51dGVzKCkqU24pfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KkFjKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9BY30sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLFJjPUxwLHB2PUxwLnJhbmdlO3ZhciBQcD1ZdChmdW5jdGlvbihuKXtuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktbi5nZXRUaW1lem9uZU9mZnNldCgpKSpTbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERhdGUoKS0xfSkscnI9UHAsbXY9UHAucmFuZ2U7ZnVuY3Rpb24gU2kobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LW4pJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqU24pL2ZhfSl9dmFyIEVpPVNpKDApLHNyPVNpKDEpLERwPVNpKDIpLElwPVNpKDMpLEduPVNpKDQpLE5wPVNpKDUpLEZwPVNpKDYpLHpwPUVpLnJhbmdlLGd2PXNyLnJhbmdlLHh2PURwLnJhbmdlLHl2PUlwLnJhbmdlLHZ2PUduLnJhbmdlLF92PU5wLnJhbmdlLHd2PUZwLnJhbmdlO3ZhciBVcD1ZdChmdW5jdGlvbihuKXtuLnNldERhdGUoMSksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC5nZXRNb250aCgpLW4uZ2V0TW9udGgoKSsodC5nZXRGdWxsWWVhcigpLW4uZ2V0RnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9KSxMYz1VcCxNdj1VcC5yYW5nZTt2YXIgUGM9WXQoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtQYy5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4haXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKXx8IShuPjApP251bGw6WXQoZnVuY3Rpb24odCl7dC5zZXRGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0RnVsbFllYXIoKS9uKSpuKSx0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKm4pfSl9O3ZhciBFbj1QYyxidj1QYy5yYW5nZTt2YXIgQnA9WXQoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSkscGE9QnAsU3Y9QnAucmFuZ2U7ZnVuY3Rpb24gVGkobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LW4pJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvZmF9KX12YXIgQXM9VGkoMCksb3I9VGkoMSksT3A9VGkoMiksa3A9VGkoMyksV249VGkoNCksSHA9VGkoNSksVnA9VGkoNiksR3A9QXMucmFuZ2UsRXY9b3IucmFuZ2UsVHY9T3AucmFuZ2UsQXY9a3AucmFuZ2UsQ3Y9V24ucmFuZ2UsUnY9SHAucmFuZ2UsTHY9VnAucmFuZ2U7dmFyIERjPVl0KGZ1bmN0aW9uKG4pe24uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktbi5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpfSk7RGMuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIWlzRmluaXRlKG49TWF0aC5mbG9vcihuKSl8fCEobj4wKT9udWxsOll0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvbikqbiksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSpuKX0pfTt2YXIgQWk9RGMsUHY9RGMucmFuZ2U7ZnVuY3Rpb24gSWMobil7aWYoMDw9bi55JiZuLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpfWZ1bmN0aW9uIE5jKG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihuLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKG4ueSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCkpfWZ1bmN0aW9uIENzKG4sdCxlKXtyZXR1cm57eTpuLG06dCxkOmUsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBGYyhuKXt2YXIgdD1uLmRhdGVUaW1lLGU9bi5kYXRlLGk9bi50aW1lLHI9bi5wZXJpb2RzLHM9bi5kYXlzLG89bi5zaG9ydERheXMsYT1uLm1vbnRocyxsPW4uc2hvcnRNb250aHMsYz1ScyhyKSx1PUxzKHIpLGg9UnMocyksZj1McyhzKSxkPVJzKG8pLGc9THMobykseD1ScyhhKSx2PUxzKGEpLG09UnMobCkscD1McyhsKSxiPXthOlYsQTpRLGI6YXQsQjpHLGM6bnVsbCxkOkpwLGU6SnAsZjp0XyxnOnVfLEc6Zl8sSDpLdixJOlF2LGo6anYsTDp0bSxtOmVfLE06bl8scDokLHE6bHQsUTpRcCxzOmpwLFM6aV8sdTpyXyxVOnNfLFY6b18sdzphXyxXOmxfLHg6bnVsbCxYOm51bGwseTpjXyxZOmhfLFo6ZF8sIiUiOktwfSxfPXthOmR0LEE6eHQsYjprLEI6RnQsYzpudWxsLGQ6JHAsZTokcCxmOnhfLGc6QV8sRzpSXyxIOnBfLEk6bV8sajpnXyxMOm5tLG06eV8sTTp2XyxwOm10LHE6U3QsUTpRcCxzOmpwLFM6X18sdTp3XyxVOk1fLFY6Yl8sdzpTXyxXOkVfLHg6bnVsbCxYOm51bGwseTpUXyxZOkNfLFo6TF8sIiUiOktwfSxTPXthOlgsQTp5LGI6UixCOkQsYzpGLGQ6WXAsZTpZcCxmOll2LGc6WHAsRzpxcCxIOlpwLEk6WnAsajpHdixMOlh2LG06VnYsTTpXdixwOnR0LHE6SHYsUTpKdixzOiR2LFM6cXYsdTp6dixVOlV2LFY6QnYsdzpGdixXOk92LHg6eixYOk4seTpYcCxZOnFwLFo6a3YsIiUiOlp2fTtiLng9TChlLGIpLGIuWD1MKGksYiksYi5jPUwodCxiKSxfLng9TChlLF8pLF8uWD1MKGksXyksXy5jPUwodCxfKTtmdW5jdGlvbiBMKEIsc3Qpe3JldHVybiBmdW5jdGlvbihudCl7dmFyIEM9W10saj0tMSxKPTAsaXQ9Qi5sZW5ndGgsZXQsdnQsYnQ7Zm9yKG50IGluc3RhbmNlb2YgRGF0ZXx8KG50PW5ldyBEYXRlKCtudCkpOysrajxpdDspQi5jaGFyQ29kZUF0KGopPT09MzcmJihDLnB1c2goQi5zbGljZShKLGopKSwodnQ9V3BbZXQ9Qi5jaGFyQXQoKytqKV0pIT1udWxsP2V0PUIuY2hhckF0KCsraik6dnQ9ZXQ9PT0iZSI/IiAiOiIwIiwoYnQ9c3RbZXRdKSYmKGV0PWJ0KG50LHZ0KSksQy5wdXNoKGV0KSxKPWorMSk7cmV0dXJuIEMucHVzaChCLnNsaWNlKEosaikpLEMuam9pbigiIil9fWZ1bmN0aW9uIEEoQixzdCl7cmV0dXJuIGZ1bmN0aW9uKG50KXt2YXIgQz1DcygxOTAwLHZvaWQgMCwxKSxqPUgoQyxCLG50Kz0iIiwwKSxKLGl0O2lmKGohPW50Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBDKXJldHVybiBuZXcgRGF0ZShDLlEpO2lmKCJzImluIEMpcmV0dXJuIG5ldyBEYXRlKEMucyoxZTMrKCJMImluIEM/Qy5MOjApKTtpZihzdCYmISgiWiJpbiBDKSYmKEMuWj0wKSwicCJpbiBDJiYoQy5IPUMuSCUxMitDLnAqMTIpLEMubT09PXZvaWQgMCYmKEMubT0icSJpbiBDP0MucTowKSwiViJpbiBDKXtpZihDLlY8MXx8Qy5WPjUzKXJldHVybiBudWxsOyJ3ImluIEN8fChDLnc9MSksIloiaW4gQz8oSj1OYyhDcyhDLnksMCwxKSksaXQ9Si5nZXRVVENEYXkoKSxKPWl0PjR8fGl0PT09MD9vci5jZWlsKEopOm9yKEopLEo9cGEub2Zmc2V0KEosKEMuVi0xKSo3KSxDLnk9Si5nZXRVVENGdWxsWWVhcigpLEMubT1KLmdldFVUQ01vbnRoKCksQy5kPUouZ2V0VVRDRGF0ZSgpKyhDLncrNiklNyk6KEo9SWMoQ3MoQy55LDAsMSkpLGl0PUouZ2V0RGF5KCksSj1pdD40fHxpdD09PTA/c3IuY2VpbChKKTpzcihKKSxKPXJyLm9mZnNldChKLChDLlYtMSkqNyksQy55PUouZ2V0RnVsbFllYXIoKSxDLm09Si5nZXRNb250aCgpLEMuZD1KLmdldERhdGUoKSsoQy53KzYpJTcpfWVsc2UoIlciaW4gQ3x8IlUiaW4gQykmJigidyJpbiBDfHwoQy53PSJ1ImluIEM/Qy51JTc6IlciaW4gQz8xOjApLGl0PSJaImluIEM/TmMoQ3MoQy55LDAsMSkpLmdldFVUQ0RheSgpOkljKENzKEMueSwwLDEpKS5nZXREYXkoKSxDLm09MCxDLmQ9IlciaW4gQz8oQy53KzYpJTcrQy5XKjctKGl0KzUpJTc6Qy53K0MuVSo3LShpdCs2KSU3KTtyZXR1cm4iWiJpbiBDPyhDLkgrPUMuWi8xMDB8MCxDLk0rPUMuWiUxMDAsTmMoQykpOkljKEMpfX1mdW5jdGlvbiBIKEIsc3QsbnQsQyl7Zm9yKHZhciBqPTAsSj1zdC5sZW5ndGgsaXQ9bnQubGVuZ3RoLGV0LHZ0O2o8Sjspe2lmKEM+PWl0KXJldHVybi0xO2lmKGV0PXN0LmNoYXJDb2RlQXQoaisrKSxldD09PTM3KXtpZihldD1zdC5jaGFyQXQoaisrKSx2dD1TW2V0IGluIFdwP3N0LmNoYXJBdChqKyspOmV0XSwhdnR8fChDPXZ0KEIsbnQsQykpPDApcmV0dXJuLTF9ZWxzZSBpZihldCE9bnQuY2hhckNvZGVBdChDKyspKXJldHVybi0xfXJldHVybiBDfWZ1bmN0aW9uIHR0KEIsc3QsbnQpe3ZhciBDPWMuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnA9dVtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYKEIsc3QsbnQpe3ZhciBDPWQuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9Z1tDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5KEIsc3QsbnQpe3ZhciBDPWguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9ZltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKEIsc3QsbnQpe3ZhciBDPW0uZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09cFtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBEKEIsc3QsbnQpe3ZhciBDPXguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09dltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKEIsc3QsbnQpe3JldHVybiBIKEIsdCxzdCxudCl9ZnVuY3Rpb24geihCLHN0LG50KXtyZXR1cm4gSChCLGUsc3QsbnQpfWZ1bmN0aW9uIE4oQixzdCxudCl7cmV0dXJuIEgoQixpLHN0LG50KX1mdW5jdGlvbiBWKEIpe3JldHVybiBvW0IuZ2V0RGF5KCldfWZ1bmN0aW9uIFEoQil7cmV0dXJuIHNbQi5nZXREYXkoKV19ZnVuY3Rpb24gYXQoQil7cmV0dXJuIGxbQi5nZXRNb250aCgpXX1mdW5jdGlvbiBHKEIpe3JldHVybiBhW0IuZ2V0TW9udGgoKV19ZnVuY3Rpb24gJChCKXtyZXR1cm4gclsrKEIuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBsdChCKXtyZXR1cm4gMSt+fihCLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gZHQoQil7cmV0dXJuIG9bQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24geHQoQil7cmV0dXJuIHNbQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24gayhCKXtyZXR1cm4gbFtCLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEZ0KEIpe3JldHVybiBhW0IuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbXQoQil7cmV0dXJuIHJbKyhCLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gU3QoQil7cmV0dXJuIDErfn4oQi5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsYik7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSxwYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMSk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsXyk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNQYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMCk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fX19dmFyIFdwPXsiLSI6IiIsXzoiICIsMDoiMCJ9LHBlPS9eXHMqXGQrLyxEdj0vXiUvLEl2PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBCdChuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLHM9ci5sZW5ndGg7cmV0dXJuIGkrKHM8ZT9uZXcgQXJyYXkoZS1zKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiBOdihuKXtyZXR1cm4gbi5yZXBsYWNlKEl2LCJcXCQmIil9ZnVuY3Rpb24gUnMobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKE52KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gTHMobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24gRnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24genYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVXYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlY9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT3Yobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcXAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLnk9K2lbMF0rKCtpWzBdPjY4PzE5MDA6MmUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrdihuLHQsZSl7dmFyIGk9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShlLGUrNikpO3JldHVybiBpPyhuLlo9aVsxXT8wOi0oaVsyXSsoaVszXXx8IjAwIikpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEh2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi5xPWlbMF0qMy0zLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZ2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5tPWlbMF0tMSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZcChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBacChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uSD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uTT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4uTD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSs2KSk7cmV0dXJuIGk/KG4uTD1NYXRoLmZsb29yKGlbMF0vMWUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBadihuLHQsZSl7dmFyIGk9RHYuZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/ZStpWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBKdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gaT8obi5RPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICR2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSnAobix0KXtyZXR1cm4gQnQobi5nZXREYXRlKCksdCwyKX1mdW5jdGlvbiBLdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBRdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24ganYobix0KXtyZXR1cm4gQnQoMStyci5jb3VudChFbihuKSxuKSx0LDMpfWZ1bmN0aW9uIHRtKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiB0XyhuLHQpe3JldHVybiB0bShuLHQpKyIwMDAifWZ1bmN0aW9uIGVfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gbl8obix0KXtyZXR1cm4gQnQobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBpXyhuLHQpe3JldHVybiBCdChuLmdldFNlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIHJfKG4pe3ZhciB0PW4uZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBzXyhuLHQpe3JldHVybiBCdChFaS5jb3VudChFbihuKS0xLG4pLHQsMil9ZnVuY3Rpb24gZW0obil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/R24obik6R24uY2VpbChuKX1mdW5jdGlvbiBvXyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KEduLmNvdW50KEVuKG4pLG4pKyhFbihuKS5nZXREYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gYV8obil7cmV0dXJuIG4uZ2V0RGF5KCl9ZnVuY3Rpb24gbF8obix0KXtyZXR1cm4gQnQoc3IuY291bnQoRW4obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGNfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiB1XyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBoXyhuLHQpe3JldHVybiBCdChuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gZl8obix0KXt2YXIgZT1uLmdldERheSgpO3JldHVybiBuPWU+PTR8fGU9PT0wP0duKG4pOkduLmNlaWwobiksQnQobi5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGRfKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnQodC82MHwwLCIwIiwyKStCdCh0JTYwLCIwIiwyKX1mdW5jdGlvbiAkcChuLHQpe3JldHVybiBCdChuLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIHBfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSx0LDIpfWZ1bmN0aW9uIG1fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBnXyhuLHQpe3JldHVybiBCdCgxK3BhLmNvdW50KEFpKG4pLG4pLHQsMyl9ZnVuY3Rpb24gbm0obix0KXtyZXR1cm4gQnQobi5nZXRVVENNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIHhfKG4sdCl7cmV0dXJuIG5tKG4sdCkrIjAwMCJ9ZnVuY3Rpb24geV8obix0KXtyZXR1cm4gQnQobi5nZXRVVENNb250aCgpKzEsdCwyKX1mdW5jdGlvbiB2XyhuLHQpe3JldHVybiBCdChuLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIF9fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gd18obil7dmFyIHQ9bi5nZXRVVENEYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIE1fKG4sdCl7cmV0dXJuIEJ0KEFzLmNvdW50KEFpKG4pLTEsbiksdCwyKX1mdW5jdGlvbiBpbShuKXt2YXIgdD1uLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHx0PT09MD9XbihuKTpXbi5jZWlsKG4pfWZ1bmN0aW9uIGJfKG4sdCl7cmV0dXJuIG49aW0obiksQnQoV24uY291bnQoQWkobiksbikrKEFpKG4pLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBTXyhuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiBFXyhuLHQpe3JldHVybiBCdChvci5jb3VudChBaShuKS0xLG4pLHQsMil9ZnVuY3Rpb24gVF8obix0KXtyZXR1cm4gQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEFfKG4sdCl7cmV0dXJuIG49aW0obiksQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIENfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBSXyhuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIG49ZT49NHx8ZT09PTA/V24obik6V24uY2VpbChuKSxCdChuLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gTF8oKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIEtwKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFFwKG4pe3JldHVybitufWZ1bmN0aW9uIGpwKG4pe3JldHVybiBNYXRoLmZsb29yKCtuLzFlMyl9dmFyIGFyLG1hLHJtLHNtLG9tO3pjKHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gemMobil7cmV0dXJuIGFyPUZjKG4pLG1hPWFyLmZvcm1hdCxybT1hci5wYXJzZSxzbT1hci51dGNGb3JtYXQsb209YXIudXRjUGFyc2UsYXJ9dmFyIFBzPTFlMyxEcz1Qcyo2MCxJcz1Ecyo2MCxOcz1JcyoyNCxQXz1Ocyo3LGFtPU5zKjMwLFVjPU5zKjM2NTtmdW5jdGlvbiBEXyhuKXtyZXR1cm4gbmV3IERhdGUobil9ZnVuY3Rpb24gSV8obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlPytuOituZXcgRGF0ZSgrbil9ZnVuY3Rpb24gQmMobix0LGUsaSxyLHMsbyxhLGwpe3ZhciBjPUVzKERlLERlKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxkPWwoIjolUyIpLGc9bCgiJUk6JU0iKSx4PWwoIiVJICVwIiksdj1sKCIlYSAlZCIpLG09bCgiJWIgJWQiKSxwPWwoIiVCIiksYj1sKCIlWSIpLF89W1tvLDEsUHNdLFtvLDUsNSpQc10sW28sMTUsMTUqUHNdLFtvLDMwLDMwKlBzXSxbcywxLERzXSxbcyw1LDUqRHNdLFtzLDE1LDE1KkRzXSxbcywzMCwzMCpEc10sW3IsMSxJc10sW3IsMywzKklzXSxbciw2LDYqSXNdLFtyLDEyLDEyKklzXSxbaSwxLE5zXSxbaSwyLDIqTnNdLFtlLDEsUF9dLFt0LDEsYW1dLFt0LDMsMyphbV0sW24sMSxVY11dO2Z1bmN0aW9uIFMoQSl7cmV0dXJuKG8oQSk8QT9mOnMoQSk8QT9kOnIoQSk8QT9nOmkoQSk8QT94OnQoQSk8QT9lKEEpPEE/djptOm4oQSk8QT9wOmIpKEEpfWZ1bmN0aW9uIEwoQSxILHR0LFgpe2lmKEE9PW51bGwmJihBPTEwKSx0eXBlb2YgQT09Im51bWJlciIpe3ZhciB5PU1hdGguYWJzKHR0LUgpL0EsUj1pcyhmdW5jdGlvbihEKXtyZXR1cm4gRFsyXX0pLnJpZ2h0KF8seSk7Uj09PV8ubGVuZ3RoPyhYPV9uKEgvVWMsdHQvVWMsQSksQT1uKTpSPyhSPV9beS9fW1ItMV1bMl08X1tSXVsyXS95P1ItMTpSXSxYPVJbMV0sQT1SWzBdKTooWD1NYXRoLm1heChfbihILHR0LEEpLDEpLEE9YSl9cmV0dXJuIFg9PW51bGw/QTpBLmV2ZXJ5KFgpfXJldHVybiBjLmludmVydD1mdW5jdGlvbihBKXtyZXR1cm4gbmV3IERhdGUodShBKSl9LGMuZG9tYWluPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2goYnMuY2FsbChBLElfKSk6aCgpLm1hcChEXyl9LGMudGlja3M9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpLFg9dHRbMF0seT10dFt0dC5sZW5ndGgtMV0sUj15PFgsRDtyZXR1cm4gUiYmKEQ9WCxYPXkseT1EKSxEPUwoQSxYLHksSCksRD1EP0QucmFuZ2UoWCx5KzEpOltdLFI/RC5yZXZlcnNlKCk6RH0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKEEsSCl7cmV0dXJuIEg9PW51bGw/UzpsKEgpfSxjLm5pY2U9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpO3JldHVybihBPUwoQSx0dFswXSx0dFt0dC5sZW5ndGgtMV0sSCkpP2gobGEodHQsQSkpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBWbihjLEJjKG4sdCxlLGkscixzLG8sYSxsKSl9LGN9ZnVuY3Rpb24gRnMoKXtyZXR1cm4gUGUuYXBwbHkoQmMoRW4sTGMsRWkscnIsUmMsQ2MsZGEsdWEsbWEpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIE9jKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gbHIobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1uLk49bnVsbH1PYy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk9jLGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49Y20odGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspaT1lLlUsZT09PWkuTD8ocj1pLlIsciYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoenModGhpcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxpLkM9ITAsVXModGhpcyxpKSkpOihyPWkuTCxyJiZyLkM/KGUuQz1yLkM9ITEsaS5DPSEwLG49aSk6KG49PT1lLkwmJihVcyh0aGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLGkuQz0hMCx6cyh0aGlzLGkpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0PW4uVSxlLGk9bi5MLHI9bi5SLHMsbztpZihpP3I/cz1jbShyKTpzPWk6cz1yLHQ/dC5MPT09bj90Lkw9czp0LlI9czp0aGlzLl89cyxpJiZyPyhvPXMuQyxzLkM9bi5DLHMuTD1pLGkuVT1zLHMhPT1yPyh0PXMuVSxzLlU9bi5VLG49cy5SLHQuTD1uLHMuUj1yLHIuVT1zKToocy5VPXQsdD1zLG49cy5SKSk6KG89bi5DLG49cyksbiYmKG4uVT10KSwhbyl7aWYobiYmbi5DKXtuLkM9ITE7cmV0dXJufWRve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PXQuTCl7aWYoZT10LlIsZS5DJiYoZS5DPSExLHQuQz0hMCx6cyh0aGlzLHQpLGU9dC5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuUnx8IWUuUi5DKSYmKGUuTC5DPSExLGUuQz0hMCxVcyh0aGlzLGUpLGU9dC5SKSxlLkM9dC5DLHQuQz1lLlIuQz0hMSx6cyh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKGU9dC5MLGUuQyYmKGUuQz0hMSx0LkM9ITAsVXModGhpcyx0KSxlPXQuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLkx8fCFlLkwuQykmJihlLlIuQz0hMSxlLkM9ITAsenModGhpcyxlKSxlPXQuTCksZS5DPXQuQyx0LkM9ZS5MLkM9ITEsVXModGhpcyx0KSxuPXRoaXMuXzticmVha31lLkM9ITAsbj10LHQ9dC5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19O2Z1bmN0aW9uIHpzKG4sdCl7dmFyIGU9dCxpPXQuUixyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5SPWkuTCxlLlImJihlLlIuVT1lKSxpLkw9ZX1mdW5jdGlvbiBVcyhuLHQpe3ZhciBlPXQsaT10Lkwscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuTD1pLlIsZS5MJiYoZS5MLlU9ZSksaS5SPWV9ZnVuY3Rpb24gY20obil7Zm9yKDtuLkw7KW49bi5MO3JldHVybiBufXZhciBrYz1PYztmdW5jdGlvbiBjcihuLHQsZSxpKXt2YXIgcj1bbnVsbCxudWxsXSxzPW1lLnB1c2gociktMTtyZXR1cm4gci5sZWZ0PW4sci5yaWdodD10LGUmJkJzKHIsbix0LGUpLGkmJkJzKHIsdCxuLGkpLENlW24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLENlW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLHJ9ZnVuY3Rpb24gdXIobix0LGUpe3ZhciBpPVt0LGVdO3JldHVybiBpLmxlZnQ9bixpfWZ1bmN0aW9uIEJzKG4sdCxlLGkpeyFuWzBdJiYhblsxXT8oblswXT1pLG4ubGVmdD10LG4ucmlnaHQ9ZSk6bi5sZWZ0PT09ZT9uWzFdPWk6blswXT1pfWZ1bmN0aW9uIHpfKG4sdCxlLGkscil7dmFyIHM9blswXSxvPW5bMV0sYT1zWzBdLGw9c1sxXSxjPW9bMF0sdT1vWzFdLGg9MCxmPTEsZD1jLWEsZz11LWwseDtpZih4PXQtYSwhKCFkJiZ4PjApKXtpZih4Lz1kLGQ8MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWVsc2UgaWYoZD4wKXtpZih4PmYpcmV0dXJuO3g+aCYmKGg9eCl9aWYoeD1pLWEsISghZCYmeDwwKSl7aWYoeC89ZCxkPDApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1lbHNlIGlmKGQ+MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWlmKHg9ZS1sLCEoIWcmJng+MCkpe2lmKHgvPWcsZzwwKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9ZWxzZSBpZihnPjApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1pZih4PXItbCwhKCFnJiZ4PDApKXtpZih4Lz1nLGc8MCl7aWYoeD5mKXJldHVybjt4PmgmJihoPXgpfWVsc2UgaWYoZz4wKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9cmV0dXJuIShoPjApJiYhKGY8MSl8fChoPjAmJihuWzBdPVthK2gqZCxsK2gqZ10pLGY8MSYmKG5bMV09W2ErZipkLGwrZipnXSkpLCEwfX19fX1mdW5jdGlvbiBVXyhuLHQsZSxpLHIpe3ZhciBzPW5bMV07aWYocylyZXR1cm4hMDt2YXIgbz1uWzBdLGE9bi5sZWZ0LGw9bi5yaWdodCxjPWFbMF0sdT1hWzFdLGg9bFswXSxmPWxbMV0sZD0oYytoKS8yLGc9KHUrZikvMix4LHY7aWYoZj09PXUpe2lmKGQ8dHx8ZD49aSlyZXR1cm47aWYoYz5oKXtpZighbylvPVtkLGVdO2Vsc2UgaWYob1sxXT49cilyZXR1cm47cz1bZCxyXX1lbHNle2lmKCFvKW89W2Qscl07ZWxzZSBpZihvWzFdPGUpcmV0dXJuO3M9W2QsZV19fWVsc2UgaWYoeD0oYy1oKS8oZi11KSx2PWcteCpkLHg8LTF8fHg+MSlpZihjPmgpe2lmKCFvKW89WyhlLXYpL3gsZV07ZWxzZSBpZihvWzFdPj1yKXJldHVybjtzPVsoci12KS94LHJdfWVsc2V7aWYoIW8pbz1bKHItdikveCxyXTtlbHNlIGlmKG9bMV08ZSlyZXR1cm47cz1bKGUtdikveCxlXX1lbHNlIGlmKHU8Zil7aWYoIW8pbz1bdCx4KnQrdl07ZWxzZSBpZihvWzBdPj1pKXJldHVybjtzPVtpLHgqaSt2XX1lbHNle2lmKCFvKW89W2kseCppK3ZdO2Vsc2UgaWYob1swXTx0KXJldHVybjtzPVt0LHgqdCt2XX1yZXR1cm4gblswXT1vLG5bMV09cywhMH1mdW5jdGlvbiB1bShuLHQsZSxpKXtmb3IodmFyIHI9bWUubGVuZ3RoLHM7ci0tOykoIVVfKHM9bWVbcl0sbix0LGUsaSl8fCF6XyhzLG4sdCxlLGkpfHwhKE1hdGguYWJzKHNbMF1bMF0tc1sxXVswXSk+WHR8fE1hdGguYWJzKHNbMF1bMV0tc1sxXVsxXSk+WHQpKSYmZGVsZXRlIG1lW3JdfWZ1bmN0aW9uIGhtKG4pe3JldHVybiBDZVtuLmluZGV4XT17c2l0ZTpuLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gQl8obix0KXt2YXIgZT1uLnNpdGUsaT10LmxlZnQscj10LnJpZ2h0O3JldHVybiBlPT09ciYmKHI9aSxpPWUpLHI/TWF0aC5hdGFuMihyWzFdLWlbMV0sclswXS1pWzBdKTooZT09PWk/KGk9dFsxXSxyPXRbMF0pOihpPXRbMF0scj10WzFdKSxNYXRoLmF0YW4yKGlbMF0tclswXSxyWzFdLWlbMV0pKX1mdW5jdGlvbiBIYyhuLHQpe3JldHVybiB0WysodC5sZWZ0IT09bi5zaXRlKV19ZnVuY3Rpb24gT18obix0KXtyZXR1cm4gdFsrKHQubGVmdD09PW4uc2l0ZSldfWZ1bmN0aW9uIGZtKCl7Zm9yKHZhciBuPTAsdD1DZS5sZW5ndGgsZSxpLHIscztuPHQ7KytuKWlmKChlPUNlW25dKSYmKHM9KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBvPW5ldyBBcnJheShzKSxhPW5ldyBBcnJheShzKTtmb3Iocj0wO3I8czsrK3Ipb1tyXT1yLGFbcl09Ql8oZSxtZVtpW3JdXSk7Zm9yKG8uc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBhW2NdLWFbbF19KSxyPTA7cjxzOysrcilhW3JdPWlbb1tyXV07Zm9yKHI9MDtyPHM7KytyKWlbcl09YVtyXX19ZnVuY3Rpb24gZG0obix0LGUsaSl7dmFyIHI9Q2UubGVuZ3RoLHMsbyxhLGwsYyx1LGgsZixkLGcseCx2LG09ITA7Zm9yKHM9MDtzPHI7KytzKWlmKG89Q2Vbc10pe2ZvcihhPW8uc2l0ZSxjPW8uaGFsZmVkZ2VzLGw9Yy5sZW5ndGg7bC0tOyltZVtjW2xdXXx8Yy5zcGxpY2UobCwxKTtmb3IobD0wLHU9Yy5sZW5ndGg7bDx1OylnPU9fKG8sbWVbY1tsXV0pLHg9Z1swXSx2PWdbMV0saD1IYyhvLG1lW2NbKytsJXVdXSksZj1oWzBdLGQ9aFsxXSwoTWF0aC5hYnMoeC1mKT5YdHx8TWF0aC5hYnModi1kKT5YdCkmJihjLnNwbGljZShsLDAsbWUucHVzaCh1cihhLGcsTWF0aC5hYnMoeC1uKTxYdCYmaS12Plh0P1tuLE1hdGguYWJzKGYtbik8WHQ/ZDppXTpNYXRoLmFicyh2LWkpPFh0JiZlLXg+WHQ/W01hdGguYWJzKGQtaSk8WHQ/ZjplLGldOk1hdGguYWJzKHgtZSk8WHQmJnYtdD5YdD9bZSxNYXRoLmFicyhmLWUpPFh0P2Q6dF06TWF0aC5hYnModi10KTxYdCYmeC1uPlh0P1tNYXRoLmFicyhkLXQpPFh0P2Y6bix0XTpudWxsKSktMSksKyt1KTt1JiYobT0hMSl9aWYobSl7dmFyIHAsYixfLFM9MS8wO2ZvcihzPTAsbT1udWxsO3M8cjsrK3MpKG89Q2Vbc10pJiYoYT1vLnNpdGUscD1hWzBdLW4sYj1hWzFdLXQsXz1wKnArYipiLF88UyYmKFM9XyxtPW8pKTtpZihtKXt2YXIgTD1bbix0XSxBPVtuLGldLEg9W2UsaV0sdHQ9W2UsdF07bS5oYWxmZWRnZXMucHVzaChtZS5wdXNoKHVyKGE9bS5zaXRlLEwsQSkpLTEsbWUucHVzaCh1cihhLEEsSCkpLTEsbWUucHVzaCh1cihhLEgsdHQpKS0xLG1lLnB1c2godXIoYSx0dCxMKSktMSl9fWZvcihzPTA7czxyOysrcykobz1DZVtzXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBDZVtzXSl9dmFyIHBtPVtdLGdhO2Z1bmN0aW9uIGtfKCl7bHIodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIENpKG4pe3ZhciB0PW4uUCxlPW4uTjtpZighKCF0fHwhZSkpe3ZhciBpPXQuc2l0ZSxyPW4uc2l0ZSxzPWUuc2l0ZTtpZihpIT09cyl7dmFyIG89clswXSxhPXJbMV0sbD1pWzBdLW8sYz1pWzFdLWEsdT1zWzBdLW8saD1zWzFdLWEsZj0yKihsKmgtYyp1KTtpZighKGY+PS1tbSkpe3ZhciBkPWwqbCtjKmMsZz11KnUraCpoLHg9KGgqZC1jKmcpL2Ysdj0obCpnLXUqZCkvZixtPXBtLnBvcCgpfHxuZXcga187bS5hcmM9bixtLnNpdGU9cixtLng9eCtvLG0ueT0obS5jeT12K2EpK01hdGguc3FydCh4Kngrdip2KSxuLmNpcmNsZT1tO2Zvcih2YXIgcD1udWxsLGI9aHIuXztiOylpZihtLnk8Yi55fHxtLnk9PT1iLnkmJm0ueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3A9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7cD1iO2JyZWFrfWhyLmluc2VydChwLG0pLHB8fChnYT1tKX19fX1mdW5jdGlvbiBSaShuKXt2YXIgdD1uLmNpcmNsZTt0JiYodC5QfHwoZ2E9dC5OKSxoci5yZW1vdmUodCkscG0ucHVzaCh0KSxscih0KSxuLmNpcmNsZT1udWxsKX12YXIgeG09W107ZnVuY3Rpb24gSF8oKXtscih0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gZ20obil7dmFyIHQ9eG0ucG9wKCl8fG5ldyBIXztyZXR1cm4gdC5zaXRlPW4sdH1mdW5jdGlvbiBWYyhuKXtSaShuKSxMaS5yZW1vdmUobikseG0ucHVzaChuKSxscihuKX1mdW5jdGlvbiB5bShuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxpPXQuY3kscj1bZSxpXSxzPW4uUCxvPW4uTixhPVtuXTtWYyhuKTtmb3IodmFyIGw9cztsLmNpcmNsZSYmTWF0aC5hYnMoZS1sLmNpcmNsZS54KTxYdCYmTWF0aC5hYnMoaS1sLmNpcmNsZS5jeSk8WHQ7KXM9bC5QLGEudW5zaGlmdChsKSxWYyhsKSxsPXM7YS51bnNoaWZ0KGwpLFJpKGwpO2Zvcih2YXIgYz1vO2MuY2lyY2xlJiZNYXRoLmFicyhlLWMuY2lyY2xlLngpPFh0JiZNYXRoLmFicyhpLWMuY2lyY2xlLmN5KTxYdDspbz1jLk4sYS5wdXNoKGMpLFZjKGMpLGM9bzthLnB1c2goYyksUmkoYyk7dmFyIHU9YS5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1hW2hdLGw9YVtoLTFdLEJzKGMuZWRnZSxsLnNpdGUsYy5zaXRlLHIpO2w9YVswXSxjPWFbdS0xXSxjLmVkZ2U9Y3IobC5zaXRlLGMuc2l0ZSxudWxsLHIpLENpKGwpLENpKGMpfWZ1bmN0aW9uIHZtKG4pe2Zvcih2YXIgdD1uWzBdLGU9blsxXSxpLHIscyxvLGE9TGkuXzthOylpZihzPV9tKGEsZSktdCxzPlh0KWE9YS5MO2Vsc2UgaWYobz10LVZfKGEsZSksbz5YdCl7aWYoIWEuUil7aT1hO2JyZWFrfWE9YS5SfWVsc2V7cz4tWHQ/KGk9YS5QLHI9YSk6bz4tWHQ/KGk9YSxyPWEuTik6aT1yPWE7YnJlYWt9aG0obik7dmFyIGw9Z20obik7aWYoTGkuaW5zZXJ0KGksbCksISghaSYmIXIpKXtpZihpPT09cil7UmkoaSkscj1nbShpLnNpdGUpLExpLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSksQ2koaSksQ2kocik7cmV0dXJufWlmKCFyKXtsLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSk7cmV0dXJufVJpKGkpLFJpKHIpO3ZhciBjPWkuc2l0ZSx1PWNbMF0saD1jWzFdLGY9blswXS11LGQ9blsxXS1oLGc9ci5zaXRlLHg9Z1swXS11LHY9Z1sxXS1oLG09MiooZip2LWQqeCkscD1mKmYrZCpkLGI9eCp4K3YqdixfPVsodipwLWQqYikvbSt1LChmKmIteCpwKS9tK2hdO0JzKHIuZWRnZSxjLGcsXyksbC5lZGdlPWNyKGMsbixudWxsLF8pLHIuZWRnZT1jcihuLGcsbnVsbCxfKSxDaShpKSxDaShyKX19ZnVuY3Rpb24gX20obix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxzPXItdDtpZighcylyZXR1cm4gaTt2YXIgbz1uLlA7aWYoIW8pcmV0dXJuLTEvMDtlPW8uc2l0ZTt2YXIgYT1lWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgdT1hLWksaD0xL3MtMS9jLGY9dS9jO3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoodSp1LygtMipjKS1sK2MvMityLXMvMikpKS9oK2k6KGkrYSkvMn1mdW5jdGlvbiBWXyhuLHQpe3ZhciBlPW4uTjtpZihlKXJldHVybiBfbShlLHQpO3ZhciBpPW4uc2l0ZTtyZXR1cm4gaVsxXT09PXQ/aVswXToxLzB9dmFyIFh0PTFlLTYsbW09MWUtMTIsTGksQ2UsaHIsbWU7ZnVuY3Rpb24gR18obix0LGUpe3JldHVybihuWzBdLWVbMF0pKih0WzFdLW5bMV0pLShuWzBdLXRbMF0pKihlWzFdLW5bMV0pfWZ1bmN0aW9uIFdfKG4sdCl7cmV0dXJuIHRbMV0tblsxXXx8dFswXS1uWzBdfWZ1bmN0aW9uIHhhKG4sdCl7dmFyIGU9bi5zb3J0KFdfKS5wb3AoKSxpLHIscztmb3IobWU9W10sQ2U9bmV3IEFycmF5KG4ubGVuZ3RoKSxMaT1uZXcga2MsaHI9bmV3IGtjOzspaWYocz1nYSxlJiYoIXN8fGVbMV08cy55fHxlWzFdPT09cy55JiZlWzBdPHMueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJih2bShlKSxpPWVbMF0scj1lWzFdKSxlPW4ucG9wKCk7ZWxzZSBpZihzKXltKHMuYXJjKTtlbHNlIGJyZWFrO2lmKGZtKCksdCl7dmFyIG89K3RbMF1bMF0sYT0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07dW0obyxhLGwsYyksZG0obyxhLGwsYyl9dGhpcy5lZGdlcz1tZSx0aGlzLmNlbGxzPUNlLExpPWhyPW1lPUNlPW51bGx9eGEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4YSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gSGModCxuW2ldKX0pO3JldHVybiBlLmRhdGE9dC5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXSx0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLGkpe2lmKCEhKGE9KHM9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpZm9yKHZhciByPWUuc2l0ZSxzLG89LTEsYSxsLGM9dFtzW2EtMV1dLHU9Yy5sZWZ0PT09cj9jLnJpZ2h0OmMubGVmdDsrK288YTspbD11LGM9dFtzW29dXSx1PWMubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQsbCYmdSYmaTxsLmluZGV4JiZpPHUuaW5kZXgmJkdfKHIsbCx1KTwwJiZuLnB1c2goW3IuZGF0YSxsLmRhdGEsdS5kYXRhXSl9KSxufSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5yaWdodH0pLm1hcChmdW5jdGlvbihuKXtyZXR1cm57c291cmNlOm4ubGVmdC5kYXRhLHRhcmdldDpuLnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24obix0LGUpe2Zvcih2YXIgaT10aGlzLHIscz1pLl9mb3VuZHx8MCxvPWkuY2VsbHMubGVuZ3RoLGE7IShhPWkuY2VsbHNbc10pOylpZigrK3M+PW8pcmV0dXJuIG51bGw7dmFyIGw9bi1hLnNpdGVbMF0sYz10LWEuc2l0ZVsxXSx1PWwqbCtjKmM7ZG8gYT1pLmNlbGxzW3I9c10scz1udWxsLGEuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oaCl7dmFyIGY9aS5lZGdlc1toXSxkPWYubGVmdDtpZighKChkPT09YS5zaXRlfHwhZCkmJiEoZD1mLnJpZ2h0KSkpe3ZhciBnPW4tZFswXSx4PXQtZFsxXSx2PWcqZyt4Kng7djx1JiYodT12LHM9ZC5pbmRleCl9fSk7d2hpbGUocyE9PW51bGwpO3JldHVybiBpLl9mb3VuZD1yLGU9PW51bGx8fHU8PWUqZT9hLnNpdGU6bnVsbH19O2Z1bmN0aW9uIFBpKG4sdCxlKXt0aGlzLms9bix0aGlzLng9dCx0aGlzLnk9ZX1QaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBpLHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09MT90aGlzOm5ldyBQaSh0aGlzLmsqbix0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PT0wJnQ9PT0wP3RoaXM6bmV3IFBpKHRoaXMuayx0aGlzLngrdGhpcy5rKm4sdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24obil7cmV0dXJuW25bMF0qdGhpcy5rK3RoaXMueCxuWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihuKXtyZXR1cm5bKG5bMF0tdGhpcy54KS90aGlzLmssKG5bMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIEdjPW5ldyBQaSgxLDAsMCk7V2MucHJvdG90eXBlPVBpLnByb3RvdHlwZTtmdW5jdGlvbiBXYyhuKXtmb3IoOyFuLl9fem9vbTspaWYoIShuPW4ucGFyZW50Tm9kZSkpcmV0dXJuIEdjO3JldHVybiBuLl9fem9vbX12YXIgYm09MWU0LFNtPS4wMDEsRW09T2UoIi4yfmUiKSxxXz1PZSgiLjR+ciIpLHdtPU9lKCIsfiIpO2Z1bmN0aW9uIE1tKG4pe2lmKG49PT0wKXJldHVybiIwIjtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49Ym18fHQ8U20/RW0obik6cV8obil9dmFyIFhjPXtmb3JtYXRUaWNrOk1tLGZvcm1hdFNob3J0Ok1tLGZvcm1hdFJlYWRhYmxlKG4pe2xldCB0PU1hdGguYWJzKG4pO3JldHVybiB0Pj1ibXx8dDxTbT9FbShuKTp3bShuKX0sZm9ybWF0TG9uZzp3bX0sc2s9bmV3IEludGwuTnVtYmVyRm9ybWF0KHZvaWQgMCx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjN9KTt2YXIgb2s9T2UoIjAuM35zIiksYWs9T2UoIiwuM35mIik7dmFyIFhfPTFlMyxZXz02MCpYXyxaXz02MCpZXyxKXz0yNCpaXyxsaz0zNjUqSl8sY2s9T2UoIi40fiIpO3ZhciAkXz1GcygpLnRpY2tGb3JtYXQoKSxxYyxUbT17Zm9ybWF0VGljayhuKXtyZXR1cm4gJF8obmV3IERhdGUobikpfSxmb3JtYXRTaG9ydChuKXtyZXR1cm4gbmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcocWMse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyJ9KX0sZm9ybWF0UmVhZGFibGUobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQifSl9LGZvcm1hdExvbmcobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTtmdW5jdGlvbiBmcihuKXtzd2l0Y2gobil7Y2FzZSBvbi5MSU5FQVI6cmV0dXJuIG5ldyBZYztjYXNlIG9uLkxPRzEwOnJldHVybiBuZXcgWmM7Y2FzZSBvbi5USU1FOnJldHVybiBuZXcgSmM7ZGVmYXVsdDpsZXQgdD1uO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgS189LjA1LFljPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPVhjfXRyYW5zZm9ybSh0LGUsaSl7bGV0W3Isc109dCxvPXMtcixbYSxsXT1lLGM9bC1hO3JldHVybiBvPT09MD9hOmMvbyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiBlPT09MD9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1pcigpLHM9KGktZStOdW1iZXIuRVBTSUxPTikqS18sW28sYV09ci5kb21haW4oW2UtcyxpK3NdKS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW28sYV19dGlja3ModCxlKXtyZXR1cm4gaXIoKS5kb21haW4odCkudGlja3MoZSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fSxaYz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdEZvcm1hdHRlcj1YY310cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxlLGkpe2lmKGk8PTApcmV0dXJuIGVbMF07bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vO3JldHVybiBpPXRoaXMudHJhbnNmb3JtKGkpLGgvKHUrTnVtYmVyLkVQU0lMT04pKihpLWwpK299cmV2ZXJzZSh0LGUsaSl7bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKGktbykrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoZT5pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCByPU1hdGgubWF4KGUsTnVtYmVyLk1JTl9WQUxVRSkscz1NYXRoLm1heChpLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBpPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLHIqLjUpLHMqMl19dGlja3ModCxlKXtsZXQgaT10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxyPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLHM9VHMoKS5kb21haW4oW2kscl0pLnRpY2tzKGUpO3JldHVybiBzLmxlbmd0aD9zOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LEpjPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zY2FsZT1GcygpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj1UbX1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX07ZnVuY3Rpb24gUV8obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fXZhciAkYz0hMTtpZihzZWxmLmhhc093blByb3BlcnR5KCJXZWJHTDJSZW5kZXJpbmdDb250ZXh0IikmJnNlbGYuaGFzT3duUHJvcGVydHkoImRvY3VtZW50Iikpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciIsKCk9PnskYz0hMX0pO2xldCB0PW4uZ2V0Q29udGV4dCgid2ViZ2wyIik7JGM9Qm9vbGVhbih0KX1mdW5jdGlvbiBqXygpe3JldHVybiAkY31mdW5jdGlvbiB0dygpe3JldHVybiBzZWxmLmhhc093blByb3BlcnR5KCJPZmZzY3JlZW5DYW52YXMiKX1mdW5jdGlvbiBldyhuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspaWYobltlXSE9PXRbZV0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbncobix0KXtyZXR1cm4gbi54WzBdPT09dC54WzBdJiZuLnhbMV09PT10LnhbMV0mJm4ueVswXT09PXQueVswXSYmbi55WzFdPT09dC55WzFdfXZhciBEaT17Y29udmVydFJlY3RUb0V4dGVudDpRXyxpc1dlYkdsMlN1cHBvcnRlZDpqXyxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDp0dyxhcmVQb2x5bGluZXNFcXVhbDpldyxhcmVFeHRlbnRzRXF1YWw6bnd9O3ZhciBkcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMueFNjYWxlPWZyKG9uLkxJTkVBUiksdGhpcy55U2NhbGU9ZnIob24uTElORUFSKSx0aGlzLmRvbUNvbnRhaW5lclJlY3Q9e3g6MCx3aWR0aDoxLHk6MCxoZWlnaHQ6MX0sdGhpcy5sYXN0VXBkYXRlZD0wLHRoaXMuY3VycmVudFZpZXdCb3hSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9fWdldFVwZGF0ZUlkZW50aWZpZXIoKXtyZXR1cm4gdGhpcy5sYXN0VXBkYXRlZH11cGRhdGVJZGVudGlmaWVyKCl7dGhpcy5sYXN0VXBkYXRlZCsrfWlzWUF4aXNQb2ludGVkRG93bigpe3JldHVybiEwfXNldFhTY2FsZSh0KXt0aGlzLnhTY2FsZT10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXNldFlTY2FsZSh0KXt0aGlzLnlTY2FsZT10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfWdldEN1cnJlbnRWaWV3Qm94UmVjdCgpe3JldHVybiB0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdH1zZXRWaWV3Qm94UmVjdCh0KXt0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXNldERvbUNvbnRhaW5lclJlY3QodCl7dGhpcy5kb21Db250YWluZXJSZWN0PXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9dHJhbnNmb3JtRGF0YVRvVWlDb29yZCh0LGUpe2xldCBpPXQscj1EaS5jb252ZXJ0UmVjdFRvRXh0ZW50KHRoaXMuY3VycmVudFZpZXdCb3hSZWN0KTtyZXR1cm5bdGhpcy54U2NhbGUuZm9yd2FyZChyLngsW2kueCxpLngraS53aWR0aF0sZVswXSksdGhpcy55U2NhbGUuZm9yd2FyZChyLnksdGhpcy5pc1lBeGlzUG9pbnRlZERvd24oKT9baS55K2kuaGVpZ2h0LGkueV06W2kueSxpLnkraS5oZWlnaHRdLGVbMV0pXX19O3ZhciBUbjsoZnVuY3Rpb24obil7bltuLlNWRz0wXT0iU1ZHIixuW24uV0VCR0w9MV09IldFQkdMIn0pKFRufHwoVG49e30pKTtmdW5jdGlvbiB5YShuLHQsZSxpKXtsZXR7Y29sb3I6cix2aXNpYmxlOnMsb3BhY2l0eTpvfT1pLGE9bjtyZXR1cm4hYSYmIXM/bnVsbDooYT1hIT1udWxsP2E6dCgpLGE9ZShhKSxhLnN0eWxlLmRpc3BsYXk9cz8iIjoibm9uZSIsYS5zdHlsZS5zdHJva2U9cixhLnN0eWxlLm9wYWNpdHk9U3RyaW5nKG8hPW51bGw/bzoxKSxhKX12YXIgT3M9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5zdmc9dH1mbHVzaCgpe31vblJlc2l6ZSh0KXt9ZGVzdHJveU9iamVjdCh0KXt0aGlzLnN2Zy5yZW1vdmVDaGlsZCh0LmRvbSl9c2V0VXNlRGFya01vZGUodCl7fWNyZWF0ZVBhdGhEU3RyaW5nKHQpe2lmKCF0Lmxlbmd0aClyZXR1cm4iIjtsZXQgZT1uZXcgQXJyYXkodC5sZW5ndGgvMik7ZVswXT1gTSR7dFswXX0sJHt0WzFdfWA7Zm9yKGxldCBpPTE7aTx0Lmxlbmd0aC8yO2krKyllW2ldPWBMJHt0W2kqMl19LCR7dFtpKjIrMV19YDtyZXR1cm4gZS5qb2luKCIiKX1jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodCxlLGkpe2xldCByPXlhKHQ9PW51bGw/dm9pZCAwOnQuZG9tLCgpPT57bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTtzLnN0eWxlLmZpbGw9Im5vbmUiO2xldCBvPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoZSk7cmV0dXJuIHMuc2V0QXR0cmlidXRlKCJkIixvKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChzKSxzfSxzPT57aWYoISh0IT1udWxsJiZ0LmRhdGEpfHwhRGkuYXJlUG9seWxpbmVzRXF1YWwoZSx0PT1udWxsP3ZvaWQgMDp0LmRhdGEpKXtsZXQgbz10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO3Muc2V0QXR0cmlidXRlKCJkIixvKX1yZXR1cm4gc30saSk7cmV0dXJuIHI9PT1udWxsP251bGw6KHIuc3R5bGUuc3Ryb2tlV2lkdGg9U3RyaW5nKGkud2lkdGgpLHtkb206cixkYXRhOmV9KX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyLGNvbG9yOnN9PWksbz1yKk1hdGguc3FydCgzKS8yLGE9bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnkrby8zLGUueCtyLzIsZS55K28vMyxlLngsZS55LW8qMi8zXSksbD15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7Yy5jbGFzc0xpc3QuYWRkKCJ0cmlhbmdsZSIpLGMuc3R5bGUuZmlsbD0ibm9uZSI7bGV0IHU9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhhKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoImQiLHUrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChjKSxjfSxjPT57bGV0IHU9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhhKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoImQiLHUrIloiKSxjfSxpKTtyZXR1cm4gbD09PW51bGw/bnVsbDoobC5zdHlsZS5maWxsPXMse2RvbTpsLGRhdGE6YX0pfWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7Y29sb3I6cixyYWRpdXM6c309aSxvPXlhKHQ9PW51bGw/dm9pZCAwOnQuZG9tLCgpPT57bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNpcmNsZSIpO3JldHVybiBhLnN0eWxlLmZpbGw9cixhLnNldEF0dHJpYnV0ZSgiY3giLFN0cmluZyhlLngpKSxhLnNldEF0dHJpYnV0ZSgiY3kiLFN0cmluZyhlLnkpKSxhLnNldEF0dHJpYnV0ZSgiciIsU3RyaW5nKHMpKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChhKSxhfSxhPT4oYS5zdHlsZS5maWxsPXIsYS5zZXRBdHRyaWJ1dGUoImN4IixTdHJpbmcoZS54KSksYS5zZXRBdHRyaWJ1dGUoImN5IixTdHJpbmcoZS55KSksYS5zZXRBdHRyaWJ1dGUoInIiLFN0cmluZyhzKSksYSksaSk7cmV0dXJuIG89PT1udWxsP251bGw6e2RvbTpvLGRhdGE6ZX19Y3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodCxlLGkscil7aWYoZS55IT09aS55KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnB1dCBlcnJvcjogc3RhcnQueSAhPSBlbmQueS4iKTtsZXR7YWx0aXR1ZGU6cyxjb2xvcjpvfT1yLGE9Mi9NYXRoLnNxcnQoMykqcyxsPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1hLzIsZS55K3MvMixlLngsZS55LXMvMixpLngsaS55LXMvMixpLngrYS8yLGkueStzLzJdKSxjPXlhKHQ9PW51bGw/dm9pZCAwOnQuZG9tLCgpPT57bGV0IHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt1LmNsYXNzTGlzdC5hZGQoInRyYXBlem9pZCIpLHUuc3R5bGUuZmlsbD0ibm9uZSI7bGV0IGg9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGgrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZCh1KSx1fSx1PT57bGV0IGg9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGgrIloiKSx1fSxyKTtyZXR1cm4gYz09PW51bGw/bnVsbDooYy5zdHlsZS5maWxsPW8se2RvbTpjLGRhdGE6bH0pfWRpc3Bvc2UoKXt9fTt2YXIgJGg9IjEzNyI7dmFyIGl3PTAsQW09MSxydz0yO3ZhciBsMD0xLHN3PTIsSnM9Myxlbz0wLGhlPTEsSHI9MixjMD0xO3ZhciBqbj0wLEtzPTEsQ209MixSbT0zLExtPTQsb3c9NSxJcj0xMDAsYXc9MTAxLGx3PTEwMixQbT0xMDMsRG09MTA0LGN3PTIwMCx1dz0yMDEsaHc9MjAyLGZ3PTIwMyx1MD0yMDQsaDA9MjA1LGR3PTIwNixwdz0yMDcsbXc9MjA4LGd3PTIwOSx4dz0yMTAseXc9MCx2dz0xLF93PTIsenU9Myx3dz00LE13PTUsYnc9NixTdz03LENsPTAsRXc9MSxUdz0yLHRpPTAsQXc9MSxDdz0yLFJ3PTMsTHc9NCxQdz01LGYwPTMwMCxBbz0zMDEsQ289MzAyLFV1PTMwMyxCdT0zMDQsUmw9MzA2LEtoPTMwNyxPdT0xZTMsVmU9MTAwMSxrdT0xMDAyLGZlPTEwMDMsSW09MTAwNDt2YXIgTm09MTAwNTt2YXIgYmU9MTAwNixEdz0xMDA3O3ZhciBMbD0xMDA4O3ZhciBlaT0xMDA5LEl3PTEwMTAsTnc9MTAxMSxubz0xMDEyLEZ3PTEwMTMsUWE9MTAxNCxVaT0xMDE1LFVyPTEwMTYsenc9MTAxNyxVdz0xMDE4LEJyPTEwMjAsQnc9MTAyMSxSZT0xMDIzLE93PTEwMjQsa3c9MTAyNSxPaT0xMDI2LFZyPTEwMjcsSHc9MTAyOCxWdz0xMDI5LEd3PTEwMzAsV3c9MTAzMSxxdz0xMDMzLEtjPTMzNzc2LFFjPTMzNzc3LGpjPTMzNzc4LHR1PTMzNzc5LEZtPTM1ODQwLHptPTM1ODQxLFVtPTM1ODQyLEJtPTM1ODQzLFh3PTM2MTk2LE9tPTM3NDkyLGttPTM3NDk2LEhtPTM3ODA4LFZtPTM3ODA5LEdtPTM3ODEwLFdtPTM3ODExLHFtPTM3ODEyLFhtPTM3ODEzLFltPTM3ODE0LFptPTM3ODE1LEptPTM3ODE2LCRtPTM3ODE3LEttPTM3ODE4LFFtPTM3ODE5LGptPTM3ODIwLHRnPTM3ODIxLGVnPTM2NDkyLFl3PTIyMDAsWnc9MjIwMSxKdz0yMjAyLGphPTIzMDAsdGw9MjMwMSxldT0yMzAyLE5yPTI0MDAsRnI9MjQwMSxlbD0yNDAyLFFoPTI1MDAsZDA9MjUwMSwkdz0wO3ZhciByaT0zZTMsJHQ9MzAwMSxLdz0zMjAwLFF3PTMyMDEsdHM9MCxqdz0xO3ZhciBudT03NjgwO3ZhciB0TT01MTksaW89MzUwNDQsbmw9MzUwNDg7dmFyIG5nPSIzMDAgZXMiLEh1PTEwMzUsSW49Y2xhc3N7YWRkRXZlbnRMaXN0ZW5lcih0LGUpe3RoaXMuX2xpc3RlbmVycz09PXZvaWQgMCYmKHRoaXMuX2xpc3RlbmVycz17fSk7bGV0IGk9dGhpcy5fbGlzdGVuZXJzO2lbdF09PT12b2lkIDAmJihpW3RdPVtdKSxpW3RdLmluZGV4T2YoZSk9PT0tMSYmaVt0XS5wdXNoKGUpfWhhc0V2ZW50TGlzdGVuZXIodCxlKXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuITE7bGV0IGk9dGhpcy5fbGlzdGVuZXJzO3JldHVybiBpW3RdIT09dm9pZCAwJiZpW3RdLmluZGV4T2YoZSkhPT0tMX1yZW1vdmVFdmVudExpc3RlbmVyKHQsZSl7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybjtsZXQgcj10aGlzLl9saXN0ZW5lcnNbdF07aWYociE9PXZvaWQgMCl7bGV0IHM9ci5pbmRleE9mKGUpO3MhPT0tMSYmci5zcGxpY2UocywxKX19ZGlzcGF0Y2hFdmVudCh0KXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuO2xldCBpPXRoaXMuX2xpc3RlbmVyc1t0LnR5cGVdO2lmKGkhPT12b2lkIDApe3QudGFyZ2V0PXRoaXM7bGV0IHI9aS5zbGljZSgwKTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspcltzXS5jYWxsKHRoaXMsdCk7dC50YXJnZXQ9bnVsbH19fSx2ZT1bXTtmb3IobGV0IG49MDtuPDI1NjtuKyspdmVbbl09KG48MTY/IjAiOiIiKStuLnRvU3RyaW5nKDE2KTt2YXIgaXU9TWF0aC5QSS8xODAsVnU9MTgwL01hdGguUEk7ZnVuY3Rpb24gdG4oKXtsZXQgbj1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCx0PU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLGU9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsaT1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MDtyZXR1cm4odmVbbiYyNTVdK3ZlW24+PjgmMjU1XSt2ZVtuPj4xNiYyNTVdK3ZlW24+PjI0JjI1NV0rIi0iK3ZlW3QmMjU1XSt2ZVt0Pj44JjI1NV0rIi0iK3ZlW3Q+PjE2JjE1fDY0XSt2ZVt0Pj4yNCYyNTVdKyItIit2ZVtlJjYzfDEyOF0rdmVbZT4+OCYyNTVdKyItIit2ZVtlPj4xNiYyNTVdK3ZlW2U+PjI0JjI1NV0rdmVbaSYyNTVdK3ZlW2k+PjgmMjU1XSt2ZVtpPj4xNiYyNTVdK3ZlW2k+PjI0JjI1NV0pLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gSWUobix0LGUpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUsbikpfWZ1bmN0aW9uIGVNKG4sdCl7cmV0dXJuKG4ldCt0KSV0fWZ1bmN0aW9uIHJ1KG4sdCxlKXtyZXR1cm4oMS1lKSpuK2UqdH1mdW5jdGlvbiBpZyhuKXtyZXR1cm4obiZuLTEpPT09MCYmbiE9PTB9ZnVuY3Rpb24gbk0obil7cmV0dXJuIE1hdGgucG93KDIsTWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMikpfXZhciBLPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTApe3RoaXMueD10LHRoaXMueT1lfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQsZSl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1yWzBdKmUrclszXSppK3JbNl0sdGhpcy55PXJbMV0qZStyWzRdKmkrcls3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55O3JldHVybiBlKmUraSppfW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gaSE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXN9cm90YXRlQXJvdW5kKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxzPXRoaXMueC10Lngsbz10aGlzLnktdC55O3JldHVybiB0aGlzLng9cyppLW8qcit0LngsdGhpcy55PXMqcitvKmkrdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19O0sucHJvdG90eXBlLmlzVmVjdG9yMj0hMDt2YXIgZGU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDEsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsaSxyLHMsbyxhLGwsYyl7bGV0IHU9dGhpcy5lbGVtZW50cztyZXR1cm4gdVswXT10LHVbMV09cix1WzJdPWEsdVszXT1lLHVbNF09cyx1WzVdPWwsdVs2XT1pLHVbN109byx1WzhdPWMsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDEsMCwwLDAsMSksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzBdPWlbMF0sZVsxXT1pWzFdLGVbMl09aVsyXSxlWzNdPWlbM10sZVs0XT1pWzRdLGVbNV09aVs1XSxlWzZdPWlbNl0sZVs3XT1pWzddLGVbOF09aVs4XSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsaSl7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMSksaS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDIpLHRoaXN9c2V0RnJvbU1hdHJpeDQodCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzRdLGVbOF0sZVsxXSxlWzVdLGVbOV0sZVsyXSxlWzZdLGVbMTBdKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LGUpe2xldCBpPXQuZWxlbWVudHMscj1lLmVsZW1lbnRzLHM9dGhpcy5lbGVtZW50cyxvPWlbMF0sYT1pWzNdLGw9aVs2XSxjPWlbMV0sdT1pWzRdLGg9aVs3XSxmPWlbMl0sZD1pWzVdLGc9aVs4XSx4PXJbMF0sdj1yWzNdLG09cls2XSxwPXJbMV0sYj1yWzRdLF89cls3XSxTPXJbMl0sTD1yWzVdLEE9cls4XTtyZXR1cm4gc1swXT1vKngrYSpwK2wqUyxzWzNdPW8qdithKmIrbCpMLHNbNl09byptK2EqXytsKkEsc1sxXT1jKngrdSpwK2gqUyxzWzRdPWMqdit1KmIraCpMLHNbN109YyptK3UqXytoKkEsc1syXT1mKngrZCpwK2cqUyxzWzVdPWYqditkKmIrZypMLHNbOF09ZiptK2QqXytnKkEsdGhpc31tdWx0aXBseVNjYWxhcih0KXtsZXQgZT10aGlzLmVsZW1lbnRzO3JldHVybiBlWzBdKj10LGVbM10qPXQsZVs2XSo9dCxlWzFdKj10LGVbNF0qPXQsZVs3XSo9dCxlWzJdKj10LGVbNV0qPXQsZVs4XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxzPXRbM10sbz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLHU9dFs4XTtyZXR1cm4gZSpvKnUtZSphKmMtaSpzKnUraSphKmwrcipzKmMtcipvKmx9aW52ZXJ0KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxzPXRbM10sbz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLHU9dFs4XSxoPXUqby1hKmMsZj1hKmwtdSpzLGQ9YypzLW8qbCxnPWUqaCtpKmYrcipkO2lmKGc9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCk7bGV0IHg9MS9nO3JldHVybiB0WzBdPWgqeCx0WzFdPShyKmMtdSppKSp4LHRbMl09KGEqaS1yKm8pKngsdFszXT1mKngsdFs0XT0odSplLXIqbCkqeCx0WzVdPShyKnMtYSplKSp4LHRbNl09ZCp4LHRbN109KGkqbC1jKmUpKngsdFs4XT0obyplLWkqcykqeCx0aGlzfXRyYW5zcG9zZSgpe2xldCB0LGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdD1lWzFdLGVbMV09ZVszXSxlWzNdPXQsdD1lWzJdLGVbMl09ZVs2XSxlWzZdPXQsdD1lWzVdLGVbNV09ZVs3XSxlWzddPXQsdGhpc31nZXROb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeDQodCkuaW52ZXJ0KCkudHJhbnNwb3NlKCl9dHJhbnNwb3NlSW50b0FycmF5KHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbM10sdFsyXT1lWzZdLHRbM109ZVsxXSx0WzRdPWVbNF0sdFs1XT1lWzddLHRbNl09ZVsyXSx0WzddPWVbNV0sdFs4XT1lWzhdLHRoaXN9c2V0VXZUcmFuc2Zvcm0odCxlLGkscixzLG8sYSl7bGV0IGw9TWF0aC5jb3MocyksYz1NYXRoLnNpbihzKTtyZXR1cm4gdGhpcy5zZXQoaSpsLGkqYywtaSoobCpvK2MqYSkrbyt0LC1yKmMscipsLC1yKigtYypvK2wqYSkrYStlLDAsMCwxKSx0aGlzfXNjYWxlKHQsZSl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gaVswXSo9dCxpWzNdKj10LGlbNl0qPXQsaVsxXSo9ZSxpWzRdKj1lLGlbN10qPWUsdGhpc31yb3RhdGUodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KSxyPXRoaXMuZWxlbWVudHMscz1yWzBdLG89clszXSxhPXJbNl0sbD1yWzFdLGM9cls0XSx1PXJbN107cmV0dXJuIHJbMF09ZSpzK2kqbCxyWzNdPWUqbytpKmMscls2XT1lKmEraSp1LHJbMV09LWkqcytlKmwscls0XT0taSpvK2UqYyxyWzddPS1pKmErZSp1LHRoaXN9dHJhbnNsYXRlKHQsZSl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gaVswXSs9dCppWzJdLGlbM10rPXQqaVs1XSxpWzZdKz10KmlbOF0saVsxXSs9ZSppWzJdLGlbNF0rPWUqaVs1XSxpWzddKz1lKmlbOF0sdGhpc31lcXVhbHModCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpZihlW3JdIT09aVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5lbGVtZW50c1tpXT10W2krZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gdFtlXT1pWzBdLHRbZSsxXT1pWzFdLHRbZSsyXT1pWzJdLHRbZSszXT1pWzNdLHRbZSs0XT1pWzRdLHRbZSs1XT1pWzVdLHRbZSs2XT1pWzZdLHRbZSs3XT1pWzddLHRbZSs4XT1pWzhdLHR9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9fTtkZS5wcm90b3R5cGUuaXNNYXRyaXgzPSEwO2Z1bmN0aW9uIHAwKG4pe2ZvcihsZXQgdD1uLmxlbmd0aC0xO3Q+PTA7LS10KWlmKG5bdF0+NjU1MzUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcm8obil7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbil9dmFyIG0wPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LCRlPXtoOjAsczowLGw6MH0sdmE9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBzdShuLHQsZSl7cmV0dXJuIGU8MCYmKGUrPTEpLGU+MSYmKGUtPTEpLGU8MS82P24rKHQtbikqNiplOmU8MS8yP3Q6ZTwyLzM/bisodC1uKSo2KigyLzMtZSk6bn1mdW5jdGlvbiBPcihuKXtyZXR1cm4gbjwuMDQwNDU/biouMDc3Mzk5MzgwODpNYXRoLnBvdyhuKi45NDc4NjcyOTg2Ky4wNTIxMzI3MDE0LDIuNCl9ZnVuY3Rpb24gb3Uobil7cmV0dXJuIG48LjAwMzEzMDg/bioxMi45MjoxLjA1NSpNYXRoLnBvdyhuLC40MTY2NiktLjA1NX12YXIgZnQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3JldHVybiBlPT09dm9pZCAwJiZpPT09dm9pZCAwP3RoaXMuc2V0KHQpOnRoaXMuc2V0UkdCKHQsZSxpKX1zZXQodCl7cmV0dXJuIHQmJnQuaXNDb2xvcj90aGlzLmNvcHkodCk6dHlwZW9mIHQ9PSJudW1iZXIiP3RoaXMuc2V0SGV4KHQpOnR5cGVvZiB0PT0ic3RyaW5nIiYmdGhpcy5zZXRTdHlsZSh0KSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPXQsdGhpcy5iPXQsdGhpc31zZXRIZXgodCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSx0aGlzLnI9KHQ+PjE2JjI1NSkvMjU1LHRoaXMuZz0odD4+OCYyNTUpLzI1NSx0aGlzLmI9KHQmMjU1KS8yNTUsdGhpc31zZXRSR0IodCxlLGkpe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9aSx0aGlzfXNldEhTTCh0LGUsaSl7aWYodD1lTSh0LDEpLGU9SWUoZSwwLDEpLGk9SWUoaSwwLDEpLGU9PT0wKXRoaXMucj10aGlzLmc9dGhpcy5iPWk7ZWxzZXtsZXQgcj1pPD0uNT9pKigxK2UpOmkrZS1pKmUscz0yKmktcjt0aGlzLnI9c3UocyxyLHQrMS8zKSx0aGlzLmc9c3UocyxyLHQpLHRoaXMuYj1zdShzLHIsdC0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKHQpe2Z1bmN0aW9uIGUocil7ciE9PXZvaWQgMCYmcGFyc2VGbG9hdChyKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIit0KyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCBpO2lmKGk9L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWModCkpe2xldCByLHM9aVsxXSxvPWlbMl07c3dpdGNoKHMpe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKHI9L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhvKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludChyWzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQoclsyXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KHJbM10sMTApKS8yNTUsZShyWzRdKSx0aGlzO2lmKHI9L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhvKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludChyWzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQoclsyXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KHJbM10sMTApKS8xMDAsZShyWzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKHI9L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpe2xldCBhPXBhcnNlRmxvYXQoclsxXSkvMzYwLGw9cGFyc2VJbnQoclsyXSwxMCkvMTAwLGM9cGFyc2VJbnQoclszXSwxMCkvMTAwO3JldHVybiBlKHJbNF0pLHRoaXMuc2V0SFNMKGEsbCxjKX1icmVha319ZWxzZSBpZihpPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyh0KSl7bGV0IHI9aVsxXSxzPXIubGVuZ3RoO2lmKHM9PT0zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoci5jaGFyQXQoMCkrci5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoci5jaGFyQXQoMSkrci5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoci5jaGFyQXQoMikrci5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKHM9PT02KXJldHVybiB0aGlzLnI9cGFyc2VJbnQoci5jaGFyQXQoMCkrci5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoci5jaGFyQXQoMikrci5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoci5jaGFyQXQoNCkrci5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiB0JiZ0Lmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKHQpOnRoaXN9c2V0Q29sb3JOYW1lKHQpe2xldCBlPW0wW3QudG9Mb3dlckNhc2UoKV07cmV0dXJuIGUhPT12b2lkIDA/dGhpcy5zZXRIZXgoZSk6Y29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogVW5rbm93biBjb2xvciAiK3QpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5yLHRoaXMuZyx0aGlzLmIpfWNvcHkodCl7cmV0dXJuIHRoaXMucj10LnIsdGhpcy5nPXQuZyx0aGlzLmI9dC5iLHRoaXN9Y29weVNSR0JUb0xpbmVhcih0KXtyZXR1cm4gdGhpcy5yPU9yKHQuciksdGhpcy5nPU9yKHQuZyksdGhpcy5iPU9yKHQuYiksdGhpc31jb3B5TGluZWFyVG9TUkdCKHQpe3JldHVybiB0aGlzLnI9b3UodC5yKSx0aGlzLmc9b3UodC5nKSx0aGlzLmI9b3UodC5iKSx0aGlzfWNvbnZlcnRTUkdCVG9MaW5lYXIoKXtyZXR1cm4gdGhpcy5jb3B5U1JHQlRvTGluZWFyKHRoaXMpLHRoaXN9Y29udmVydExpbmVhclRvU1JHQigpe3JldHVybiB0aGlzLmNvcHlMaW5lYXJUb1NSR0IodGhpcyksdGhpc31nZXRIZXgoKXtyZXR1cm4gdGhpcy5yKjI1NTw8MTZedGhpcy5nKjI1NTw8OF50aGlzLmIqMjU1PDwwfWdldEhleFN0cmluZygpe3JldHVybigiMDAwMDAwIit0aGlzLmdldEhleCgpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpfWdldEhTTCh0KXtsZXQgZT10aGlzLnIsaT10aGlzLmcscj10aGlzLmIscz1NYXRoLm1heChlLGksciksbz1NYXRoLm1pbihlLGksciksYSxsLGM9KG8rcykvMjtpZihvPT09cylhPTAsbD0wO2Vsc2V7bGV0IHU9cy1vO3N3aXRjaChsPWM8PS41P3UvKHMrbyk6dS8oMi1zLW8pLHMpe2Nhc2UgZTphPShpLXIpL3UrKGk8cj82OjApO2JyZWFrO2Nhc2UgaTphPShyLWUpL3UrMjticmVhaztjYXNlIHI6YT0oZS1pKS91KzQ7YnJlYWt9YS89Nn1yZXR1cm4gdC5oPWEsdC5zPWwsdC5sPWMsdH1nZXRTdHlsZSgpe3JldHVybiJyZ2IoIisodGhpcy5yKjI1NXwwKSsiLCIrKHRoaXMuZyoyNTV8MCkrIiwiKyh0aGlzLmIqMjU1fDApKyIpIn1vZmZzZXRIU0wodCxlLGkpe3JldHVybiB0aGlzLmdldEhTTCgkZSksJGUuaCs9dCwkZS5zKz1lLCRlLmwrPWksdGhpcy5zZXRIU0woJGUuaCwkZS5zLCRlLmwpLHRoaXN9YWRkKHQpe3JldHVybiB0aGlzLnIrPXQucix0aGlzLmcrPXQuZyx0aGlzLmIrPXQuYix0aGlzfWFkZENvbG9ycyh0LGUpe3JldHVybiB0aGlzLnI9dC5yK2Uucix0aGlzLmc9dC5nK2UuZyx0aGlzLmI9dC5iK2UuYix0aGlzfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy5yKz10LHRoaXMuZys9dCx0aGlzLmIrPXQsdGhpc31zdWIodCl7cmV0dXJuIHRoaXMucj1NYXRoLm1heCgwLHRoaXMuci10LnIpLHRoaXMuZz1NYXRoLm1heCgwLHRoaXMuZy10LmcpLHRoaXMuYj1NYXRoLm1heCgwLHRoaXMuYi10LmIpLHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMucio9dC5yLHRoaXMuZyo9dC5nLHRoaXMuYio9dC5iLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMucio9dCx0aGlzLmcqPXQsdGhpcy5iKj10LHRoaXN9bGVycCh0LGUpe3JldHVybiB0aGlzLnIrPSh0LnItdGhpcy5yKSplLHRoaXMuZys9KHQuZy10aGlzLmcpKmUsdGhpcy5iKz0odC5iLXRoaXMuYikqZSx0aGlzfWxlcnBDb2xvcnModCxlLGkpe3JldHVybiB0aGlzLnI9dC5yKyhlLnItdC5yKSppLHRoaXMuZz10LmcrKGUuZy10LmcpKmksdGhpcy5iPXQuYisoZS5iLXQuYikqaSx0aGlzfWxlcnBIU0wodCxlKXt0aGlzLmdldEhTTCgkZSksdC5nZXRIU0wodmEpO2xldCBpPXJ1KCRlLmgsdmEuaCxlKSxyPXJ1KCRlLnMsdmEucyxlKSxzPXJ1KCRlLmwsdmEubCxlKTtyZXR1cm4gdGhpcy5zZXRIU0woaSxyLHMpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnI9PT10aGlzLnImJnQuZz09PXRoaXMuZyYmdC5iPT09dGhpcy5ifWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMucj10W2VdLHRoaXMuZz10W2UrMV0sdGhpcy5iPXRbZSsyXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMucix0W2UrMV09dGhpcy5nLHRbZSsyXT10aGlzLmIsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMucj10LmdldFgoZSksdGhpcy5nPXQuZ2V0WShlKSx0aGlzLmI9dC5nZXRaKGUpLHQubm9ybWFsaXplZD09PSEwJiYodGhpcy5yLz0yNTUsdGhpcy5nLz0yNTUsdGhpcy5iLz0yNTUpLHRoaXN9dG9KU09OKCl7cmV0dXJuIHRoaXMuZ2V0SGV4KCl9fTtmdC5OQU1FUz1tMDtmdC5wcm90b3R5cGUuaXNDb2xvcj0hMDtmdC5wcm90b3R5cGUucj0xO2Z0LnByb3RvdHlwZS5nPTE7ZnQucHJvdG90eXBlLmI9MTt2YXIgcHIsTm49Y2xhc3N7c3RhdGljIGdldERhdGFVUkwodCl7aWYoL15kYXRhOi9pLnRlc3QodC5zcmMpfHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ9PSJ1bmRlZmluZWQiKXJldHVybiB0LnNyYztsZXQgZTtpZih0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpZT10O2Vsc2V7cHI9PT12b2lkIDAmJihwcj1ybygiY2FudmFzIikpLHByLndpZHRoPXQud2lkdGgscHIuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPXByLmdldENvbnRleHQoIjJkIik7dCBpbnN0YW5jZW9mIEltYWdlRGF0YT9pLnB1dEltYWdlRGF0YSh0LDAsMCk6aS5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCksZT1wcn1yZXR1cm4gZS53aWR0aD4yMDQ4fHxlLmhlaWdodD4yMDQ4Pyhjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMuZ2V0RGF0YVVSTDogSW1hZ2UgY29udmVydGVkIHRvIGpwZyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyIsdCksZS50b0RhdGFVUkwoImltYWdlL2pwZWciLC42KSk6ZS50b0RhdGFVUkwoImltYWdlL3BuZyIpfXN0YXRpYyBzUkdCVG9MaW5lYXIodCl7aWYodHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXAhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApe2xldCBlPXJvKCJjYW52YXMiKTtlLndpZHRoPXQud2lkdGgsZS5oZWlnaHQ9dC5oZWlnaHQ7bGV0IGk9ZS5nZXRDb250ZXh0KCIyZCIpO2kuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpO2xldCByPWkuZ2V0SW1hZ2VEYXRhKDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxzPXIuZGF0YTtmb3IobGV0IG89MDtvPHMubGVuZ3RoO28rKylzW29dPU9yKHNbb10vMjU1KSoyNTU7cmV0dXJuIGkucHV0SW1hZ2VEYXRhKHIsMCwwKSxlfWVsc2UgaWYodC5kYXRhKXtsZXQgZT10LmRhdGEuc2xpY2UoMCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fGUgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheT9lW2ldPU1hdGguZmxvb3IoT3IoZVtpXS8yNTUpKjI1NSk6ZVtpXT1PcihlW2ldKTtyZXR1cm57ZGF0YTplLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX1lbHNlIHJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMuc1JHQlRvTGluZWFyKCk6IFVuc3VwcG9ydGVkIGltYWdlIHR5cGUuIE5vIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gYXBwbGllZC4iKSx0fX0saU09MCxhZT1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKHQ9YWUuREVGQVVMVF9JTUFHRSxlPWFlLkRFRkFVTFRfTUFQUElORyxpPVZlLHI9VmUscz1iZSxvPUxsLGE9UmUsbD1laSxjPTEsdT1yaSl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTppTSsrfSksdGhpcy51dWlkPXRuKCksdGhpcy5uYW1lPSIiLHRoaXMuaW1hZ2U9dCx0aGlzLm1pcG1hcHM9W10sdGhpcy5tYXBwaW5nPWUsdGhpcy53cmFwUz1pLHRoaXMud3JhcFQ9cix0aGlzLm1hZ0ZpbHRlcj1zLHRoaXMubWluRmlsdGVyPW8sdGhpcy5hbmlzb3Ryb3B5PWMsdGhpcy5mb3JtYXQ9YSx0aGlzLmludGVybmFsRm9ybWF0PW51bGwsdGhpcy50eXBlPWwsdGhpcy5vZmZzZXQ9bmV3IEsoMCwwKSx0aGlzLnJlcGVhdD1uZXcgSygxLDEpLHRoaXMuY2VudGVyPW5ldyBLKDAsMCksdGhpcy5yb3RhdGlvbj0wLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMCx0aGlzLm1hdHJpeD1uZXcgZGUsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITAsdGhpcy5wcmVtdWx0aXBseUFscGhhPSExLHRoaXMuZmxpcFk9ITAsdGhpcy51bnBhY2tBbGlnbm1lbnQ9NCx0aGlzLmVuY29kaW5nPXUsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLm9uVXBkYXRlPW51bGwsdGhpcy5pc1JlbmRlclRhcmdldFRleHR1cmU9ITEsdGhpcy5uZWVkc1BNUkVNVXBkYXRlPSExfXVwZGF0ZU1hdHJpeCgpe3RoaXMubWF0cml4LnNldFV2VHJhbnNmb3JtKHRoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueSx0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnksdGhpcy5yb3RhdGlvbix0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnkpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaW1hZ2U9dC5pbWFnZSx0aGlzLm1pcG1hcHM9dC5taXBtYXBzLnNsaWNlKDApLHRoaXMubWFwcGluZz10Lm1hcHBpbmcsdGhpcy53cmFwUz10LndyYXBTLHRoaXMud3JhcFQ9dC53cmFwVCx0aGlzLm1hZ0ZpbHRlcj10Lm1hZ0ZpbHRlcix0aGlzLm1pbkZpbHRlcj10Lm1pbkZpbHRlcix0aGlzLmFuaXNvdHJvcHk9dC5hbmlzb3Ryb3B5LHRoaXMuZm9ybWF0PXQuZm9ybWF0LHRoaXMuaW50ZXJuYWxGb3JtYXQ9dC5pbnRlcm5hbEZvcm1hdCx0aGlzLnR5cGU9dC50eXBlLHRoaXMub2Zmc2V0LmNvcHkodC5vZmZzZXQpLHRoaXMucmVwZWF0LmNvcHkodC5yZXBlYXQpLHRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4LmNvcHkodC5tYXRyaXgpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPXQuZ2VuZXJhdGVNaXBtYXBzLHRoaXMucHJlbXVsdGlwbHlBbHBoYT10LnByZW11bHRpcGx5QWxwaGEsdGhpcy5mbGlwWT10LmZsaXBZLHRoaXMudW5wYWNrQWxpZ25tZW50PXQudW5wYWNrQWxpZ25tZW50LHRoaXMuZW5jb2Rpbmc9dC5lbmNvZGluZyx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLHRoaXN9dG9KU09OKHQpe2xldCBlPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIjtpZighZSYmdC50ZXh0dXJlc1t0aGlzLnV1aWRdIT09dm9pZCAwKXJldHVybiB0LnRleHR1cmVzW3RoaXMudXVpZF07bGV0IGk9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJUZXh0dXJlIixnZW5lcmF0b3I6IlRleHR1cmUudG9KU09OIn0sdXVpZDp0aGlzLnV1aWQsbmFtZTp0aGlzLm5hbWUsbWFwcGluZzp0aGlzLm1hcHBpbmcscmVwZWF0Olt0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnldLG9mZnNldDpbdGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55XSxjZW50ZXI6W3RoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueV0scm90YXRpb246dGhpcy5yb3RhdGlvbix3cmFwOlt0aGlzLndyYXBTLHRoaXMud3JhcFRdLGZvcm1hdDp0aGlzLmZvcm1hdCx0eXBlOnRoaXMudHlwZSxlbmNvZGluZzp0aGlzLmVuY29kaW5nLG1pbkZpbHRlcjp0aGlzLm1pbkZpbHRlcixtYWdGaWx0ZXI6dGhpcy5tYWdGaWx0ZXIsYW5pc290cm9weTp0aGlzLmFuaXNvdHJvcHksZmxpcFk6dGhpcy5mbGlwWSxwcmVtdWx0aXBseUFscGhhOnRoaXMucHJlbXVsdGlwbHlBbHBoYSx1bnBhY2tBbGlnbm1lbnQ6dGhpcy51bnBhY2tBbGlnbm1lbnR9O2lmKHRoaXMuaW1hZ2UhPT12b2lkIDApe2xldCByPXRoaXMuaW1hZ2U7aWYoci51dWlkPT09dm9pZCAwJiYoci51dWlkPXRuKCkpLCFlJiZ0LmltYWdlc1tyLnV1aWRdPT09dm9pZCAwKXtsZXQgcztpZihBcnJheS5pc0FycmF5KHIpKXtzPVtdO2ZvcihsZXQgbz0wLGE9ci5sZW5ndGg7bzxhO28rKylyW29dLmlzRGF0YVRleHR1cmU/cy5wdXNoKGF1KHJbb10uaW1hZ2UpKTpzLnB1c2goYXUocltvXSkpfWVsc2Ugcz1hdShyKTt0LmltYWdlc1tyLnV1aWRdPXt1dWlkOnIudXVpZCx1cmw6c319aS5pbWFnZT1yLnV1aWR9cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpIT09Int9IiYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksZXx8KHQudGV4dHVyZXNbdGhpcy51dWlkXT1pKSxpfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9dHJhbnNmb3JtVXYodCl7aWYodGhpcy5tYXBwaW5nIT09ZjApcmV0dXJuIHQ7aWYodC5hcHBseU1hdHJpeDModGhpcy5tYXRyaXgpLHQueDwwfHx0Lng+MSlzd2l0Y2godGhpcy53cmFwUyl7Y2FzZSBPdTp0Lng9dC54LU1hdGguZmxvb3IodC54KTticmVhaztjYXNlIFZlOnQueD10Lng8MD8wOjE7YnJlYWs7Y2FzZSBrdTpNYXRoLmFicyhNYXRoLmZsb29yKHQueCklMik9PT0xP3QueD1NYXRoLmNlaWwodC54KS10Lng6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWt9aWYodC55PDB8fHQueT4xKXN3aXRjaCh0aGlzLndyYXBUKXtjYXNlIE91OnQueT10LnktTWF0aC5mbG9vcih0LnkpO2JyZWFrO2Nhc2UgVmU6dC55PXQueTwwPzA6MTticmVhaztjYXNlIGt1Ok1hdGguYWJzKE1hdGguZmxvb3IodC55KSUyKT09PTE/dC55PU1hdGguY2VpbCh0LnkpLXQueTp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVha31yZXR1cm4gdGhpcy5mbGlwWSYmKHQueT0xLXQueSksdH1zZXQgbmVlZHNVcGRhdGUodCl7dD09PSEwJiZ0aGlzLnZlcnNpb24rK319O2FlLkRFRkFVTFRfSU1BR0U9dm9pZCAwO2FlLkRFRkFVTFRfTUFQUElORz1mMDthZS5wcm90b3R5cGUuaXNUZXh0dXJlPSEwO2Z1bmN0aW9uIGF1KG4pe3JldHVybiB0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJm4gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJm4gaW5zdGFuY2VvZiBJbWFnZUJpdG1hcD9Obi5nZXREYXRhVVJMKG4pOm4uZGF0YT97ZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuLmRhdGEpLHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0LHR5cGU6bi5kYXRhLmNvbnN0cnVjdG9yLm5hbWV9Oihjb25zb2xlLndhcm4oIlRIUkVFLlRleHR1cmU6IFVuYWJsZSB0byBzZXJpYWxpemUgVGV4dHVyZS4iKSx7fSl9dmFyIFd0PWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHI9MSl7dGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWksdGhpcy53PXJ9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMuen1zZXQgd2lkdGgodCl7dGhpcy56PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnd9c2V0IGhlaWdodCh0KXt0aGlzLnc9dH1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzLnc9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldFcodCl7cmV0dXJuIHRoaXMudz10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2Nhc2UgMzp0aGlzLnc9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7Y2FzZSAzOnJldHVybiB0aGlzLnc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnosdGhpcy53KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzLnc9dC53IT09dm9pZCAwP3QudzoxLHRoaXN9YWRkKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcy53Kz10LncsdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzLncrPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXMudz10LncrZS53LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXMudys9dC53KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzLnctPXQudyx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXMudy09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpcy53PXQudy1lLncsdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcy53Kj10LncsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpcy53Kj10LHRoaXN9YXBwbHlNYXRyaXg0KHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixzPXRoaXMudyxvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1s0XSppK29bOF0qcitvWzEyXSpzLHRoaXMueT1vWzFdKmUrb1s1XSppK29bOV0qcitvWzEzXSpzLHRoaXMuej1vWzJdKmUrb1s2XSppK29bMTBdKnIrb1sxNF0qcyx0aGlzLnc9b1szXSplK29bN10qaStvWzExXSpyK29bMTVdKnMsdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1zZXRBeGlzQW5nbGVGcm9tUXVhdGVybmlvbih0KXt0aGlzLnc9MipNYXRoLmFjb3ModC53KTtsZXQgZT1NYXRoLnNxcnQoMS10LncqdC53KTtyZXR1cm4gZTwxZS00Pyh0aGlzLng9MSx0aGlzLnk9MCx0aGlzLno9MCk6KHRoaXMueD10LngvZSx0aGlzLnk9dC55L2UsdGhpcy56PXQuei9lKSx0aGlzfXNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgZSxpLHIscyxsPXQuZWxlbWVudHMsYz1sWzBdLHU9bFs0XSxoPWxbOF0sZj1sWzFdLGQ9bFs1XSxnPWxbOV0seD1sWzJdLHY9bFs2XSxtPWxbMTBdO2lmKE1hdGguYWJzKHUtZik8LjAxJiZNYXRoLmFicyhoLXgpPC4wMSYmTWF0aC5hYnMoZy12KTwuMDEpe2lmKE1hdGguYWJzKHUrZik8LjEmJk1hdGguYWJzKGgreCk8LjEmJk1hdGguYWJzKGcrdik8LjEmJk1hdGguYWJzKGMrZCttLTMpPC4xKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2U9TWF0aC5QSTtsZXQgYj0oYysxKS8yLF89KGQrMSkvMixTPShtKzEpLzIsTD0odStmKS80LEE9KGgreCkvNCxIPShnK3YpLzQ7cmV0dXJuIGI+XyYmYj5TP2I8LjAxPyhpPTAscj0uNzA3MTA2NzgxLHM9LjcwNzEwNjc4MSk6KGk9TWF0aC5zcXJ0KGIpLHI9TC9pLHM9QS9pKTpfPlM/XzwuMDE/KGk9LjcwNzEwNjc4MSxyPTAscz0uNzA3MTA2NzgxKToocj1NYXRoLnNxcnQoXyksaT1ML3Iscz1IL3IpOlM8LjAxPyhpPS43MDcxMDY3ODEscj0uNzA3MTA2NzgxLHM9MCk6KHM9TWF0aC5zcXJ0KFMpLGk9QS9zLHI9SC9zKSx0aGlzLnNldChpLHIscyxlKSx0aGlzfWxldCBwPU1hdGguc3FydCgodi1nKSoodi1nKSsoaC14KSooaC14KSsoZi11KSooZi11KSk7cmV0dXJuIE1hdGguYWJzKHApPC4wMDEmJihwPTEpLHRoaXMueD0odi1nKS9wLHRoaXMueT0oaC14KS9wLHRoaXMuej0oZi11KS9wLHRoaXMudz1NYXRoLmFjb3MoKGMrZCttLTEpLzIpLHRoaXN9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5taW4odGhpcy53LHQudyksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1heCh0aGlzLncsdC53KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LncsTWF0aC5taW4oZS53LHRoaXMudykpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLncpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7bGV0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpcy53PU1hdGguZmxvb3IodGhpcy53KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpcy53PU1hdGguY2VpbCh0aGlzLncpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpcy53PU1hdGgucm91bmQodGhpcy53KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz10aGlzLnc8MD9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpcy53PS10aGlzLncsdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56K3RoaXMudyp0Lnd9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMud31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KStNYXRoLmFicyh0aGlzLncpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpcy56Kz0odC56LXRoaXMueikqZSx0aGlzLncrPSh0LnctdGhpcy53KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzLnc9dC53KyhlLnctdC53KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56JiZ0Lnc9PT10aGlzLnd9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXMudz10W2UrM10sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHRbZSszXT10aGlzLncsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gaSE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXMuej10LmdldFooZSksdGhpcy53PXQuZ2V0VyhlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzLnc9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56LHlpZWxkIHRoaXMud319O1d0LnByb3RvdHlwZS5pc1ZlY3RvcjQ9ITA7dmFyIE5lPWNsYXNzIGV4dGVuZHMgSW57Y29uc3RydWN0b3IodCxlLGk9e30pe3N1cGVyKCksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD0xLHRoaXMuc2Npc3Nvcj1uZXcgV3QoMCwwLHQsZSksdGhpcy5zY2lzc29yVGVzdD0hMSx0aGlzLnZpZXdwb3J0PW5ldyBXdCgwLDAsdCxlKSx0aGlzLnRleHR1cmU9bmV3IGFlKHZvaWQgMCxpLm1hcHBpbmcsaS53cmFwUyxpLndyYXBULGkubWFnRmlsdGVyLGkubWluRmlsdGVyLGkuZm9ybWF0LGkudHlwZSxpLmFuaXNvdHJvcHksaS5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OmUsZGVwdGg6MX0sdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1pLmdlbmVyYXRlTWlwbWFwcyE9PXZvaWQgMD9pLmdlbmVyYXRlTWlwbWFwczohMSx0aGlzLnRleHR1cmUuaW50ZXJuYWxGb3JtYXQ9aS5pbnRlcm5hbEZvcm1hdCE9PXZvaWQgMD9pLmludGVybmFsRm9ybWF0Om51bGwsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1pLm1pbkZpbHRlciE9PXZvaWQgMD9pLm1pbkZpbHRlcjpiZSx0aGlzLmRlcHRoQnVmZmVyPWkuZGVwdGhCdWZmZXIhPT12b2lkIDA/aS5kZXB0aEJ1ZmZlcjohMCx0aGlzLnN0ZW5jaWxCdWZmZXI9aS5zdGVuY2lsQnVmZmVyIT09dm9pZCAwP2kuc3RlbmNpbEJ1ZmZlcjohMSx0aGlzLmRlcHRoVGV4dHVyZT1pLmRlcHRoVGV4dHVyZSE9PXZvaWQgMD9pLmRlcHRoVGV4dHVyZTpudWxsfXNldFRleHR1cmUodCl7dC5pbWFnZT17d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsZGVwdGg6dGhpcy5kZXB0aH0sdGhpcy50ZXh0dXJlPXR9c2V0U2l6ZSh0LGUsaT0xKXsodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpJiYodGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD1pLHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQ9ZSx0aGlzLnRleHR1cmUuaW1hZ2UuZGVwdGg9aSx0aGlzLmRpc3Bvc2UoKSksdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsZSksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxlKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LmNvcHkodC52aWV3cG9ydCksdGhpcy50ZXh0dXJlPXQudGV4dHVyZS5jbG9uZSgpLHRoaXMudGV4dHVyZS5pbWFnZT1PYmplY3QuYXNzaWduKHt9LHQudGV4dHVyZS5pbWFnZSksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07TmUucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJUYXJnZXQ9ITA7dmFyIEd1PWNsYXNzIGV4dGVuZHMgTmV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsZSk7bGV0IHI9dGhpcy50ZXh0dXJlO3RoaXMudGV4dHVyZT1bXTtmb3IobGV0IHM9MDtzPGk7cysrKXRoaXMudGV4dHVyZVtzXT1yLmNsb25lKCl9c2V0U2l6ZSh0LGUsaT0xKXtpZih0aGlzLndpZHRoIT09dHx8dGhpcy5oZWlnaHQhPT1lfHx0aGlzLmRlcHRoIT09aSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD1pO2ZvcihsZXQgcj0wLHM9dGhpcy50ZXh0dXJlLmxlbmd0aDtyPHM7cisrKXRoaXMudGV4dHVyZVtyXS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZVtyXS5pbWFnZS5oZWlnaHQ9ZSx0aGlzLnRleHR1cmVbcl0uaW1hZ2UuZGVwdGg9aTt0aGlzLmRpc3Bvc2UoKX1yZXR1cm4gdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsZSksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxlKSx0aGlzfWNvcHkodCl7dGhpcy5kaXNwb3NlKCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5zY2lzc29yLnNldCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpcy50ZXh0dXJlLmxlbmd0aD0wO2ZvcihsZXQgZT0wLGk9dC50ZXh0dXJlLmxlbmd0aDtlPGk7ZSsrKXRoaXMudGV4dHVyZVtlXT10LnRleHR1cmVbZV0uY2xvbmUoKTtyZXR1cm4gdGhpc319O0d1LnByb3RvdHlwZS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPSEwO3ZhciBzbz1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQsZSxpPXt9KXtzdXBlcih0LGUsaSksdGhpcy5zYW1wbGVzPTQsdGhpcy5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weT1pLmlnbm9yZURlcHRoIT09dm9pZCAwP2kuaWdub3JlRGVwdGg6ITAsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9aS51c2VSZW5kZXJUb1RleHR1cmUhPT12b2lkIDA/aS51c2VSZW5kZXJUb1RleHR1cmU6ITEsdGhpcy51c2VSZW5kZXJidWZmZXI9dGhpcy51c2VSZW5kZXJUb1RleHR1cmU9PT0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnNhbXBsZXM9dC5zYW1wbGVzLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPXQudXNlUmVuZGVyVG9UZXh0dXJlLHRoaXMudXNlUmVuZGVyYnVmZmVyPXQudXNlUmVuZGVyYnVmZmVyLHRoaXN9fTtzby5wcm90b3R5cGUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PSEwO3ZhciBFZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cn1zdGF0aWMgc2xlcnAodCxlLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogU3RhdGljIC5zbGVycCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBxbS5zbGVycFF1YXRlcm5pb25zKCBxYSwgcWIsIHQgKSBpbnN0ZWFkLiIpLGkuc2xlcnBRdWF0ZXJuaW9ucyh0LGUscil9c3RhdGljIHNsZXJwRmxhdCh0LGUsaSxyLHMsbyxhKXtsZXQgbD1pW3IrMF0sYz1pW3IrMV0sdT1pW3IrMl0saD1pW3IrM10sZj1zW28rMF0sZD1zW28rMV0sZz1zW28rMl0seD1zW28rM107aWYoYT09PTApe3RbZSswXT1sLHRbZSsxXT1jLHRbZSsyXT11LHRbZSszXT1oO3JldHVybn1pZihhPT09MSl7dFtlKzBdPWYsdFtlKzFdPWQsdFtlKzJdPWcsdFtlKzNdPXg7cmV0dXJufWlmKGghPT14fHxsIT09Znx8YyE9PWR8fHUhPT1nKXtsZXQgdj0xLWEsbT1sKmYrYypkK3UqZytoKngscD1tPj0wPzE6LTEsYj0xLW0qbTtpZihiPk51bWJlci5FUFNJTE9OKXtsZXQgUz1NYXRoLnNxcnQoYiksTD1NYXRoLmF0YW4yKFMsbSpwKTt2PU1hdGguc2luKHYqTCkvUyxhPU1hdGguc2luKGEqTCkvU31sZXQgXz1hKnA7aWYobD1sKnYrZipfLGM9Yyp2K2QqXyx1PXUqditnKl8saD1oKnYreCpfLHY9PT0xLWEpe2xldCBTPTEvTWF0aC5zcXJ0KGwqbCtjKmMrdSp1K2gqaCk7bCo9UyxjKj1TLHUqPVMsaCo9U319dFtlXT1sLHRbZSsxXT1jLHRbZSsyXT11LHRbZSszXT1ofXN0YXRpYyBtdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LGUsaSxyLHMsbyl7bGV0IGE9aVtyXSxsPWlbcisxXSxjPWlbcisyXSx1PWlbciszXSxoPXNbb10sZj1zW28rMV0sZD1zW28rMl0sZz1zW28rM107cmV0dXJuIHRbZV09YSpnK3UqaCtsKmQtYypmLHRbZSsxXT1sKmcrdSpmK2MqaC1hKmQsdFtlKzJdPWMqZyt1KmQrYSpmLWwqaCx0W2UrM109dSpnLWEqaC1sKmYtYypkLHR9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHcoKXtyZXR1cm4gdGhpcy5fd31zZXQgdyh0KXt0aGlzLl93PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsaSxyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fdz1yLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX3cpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC54LHRoaXMuX3k9dC55LHRoaXMuX3o9dC56LHRoaXMuX3c9dC53LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21FdWxlcih0LGUpe2lmKCEodCYmdC5pc0V1bGVyKSl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBpPXQuX3gscj10Ll95LHM9dC5feixvPXQuX29yZGVyLGE9TWF0aC5jb3MsbD1NYXRoLnNpbixjPWEoaS8yKSx1PWEoci8yKSxoPWEocy8yKSxmPWwoaS8yKSxkPWwoci8yKSxnPWwocy8yKTtzd2l0Y2gobyl7Y2FzZSJYWVoiOnRoaXMuX3g9Zip1KmgrYypkKmcsdGhpcy5feT1jKmQqaC1mKnUqZyx0aGlzLl96PWMqdSpnK2YqZCpoLHRoaXMuX3c9Yyp1KmgtZipkKmc7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9Zip1KmgrYypkKmcsdGhpcy5feT1jKmQqaC1mKnUqZyx0aGlzLl96PWMqdSpnLWYqZCpoLHRoaXMuX3c9Yyp1KmgrZipkKmc7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9Zip1KmgtYypkKmcsdGhpcy5feT1jKmQqaCtmKnUqZyx0aGlzLl96PWMqdSpnK2YqZCpoLHRoaXMuX3c9Yyp1KmgtZipkKmc7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3g9Zip1KmgtYypkKmcsdGhpcy5feT1jKmQqaCtmKnUqZyx0aGlzLl96PWMqdSpnLWYqZCpoLHRoaXMuX3c9Yyp1KmgrZipkKmc7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3g9Zip1KmgrYypkKmcsdGhpcy5feT1jKmQqaCtmKnUqZyx0aGlzLl96PWMqdSpnLWYqZCpoLHRoaXMuX3c9Yyp1KmgtZipkKmc7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3g9Zip1KmgtYypkKmcsdGhpcy5feT1jKmQqaC1mKnUqZyx0aGlzLl96PWMqdSpnK2YqZCpoLHRoaXMuX3c9Yyp1KmgrZipkKmc7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK28pfXJldHVybiBlIT09ITEmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21BeGlzQW5nbGUodCxlKXtsZXQgaT1lLzIscj1NYXRoLnNpbihpKTtyZXR1cm4gdGhpcy5feD10Lngqcix0aGlzLl95PXQueSpyLHRoaXMuX3o9dC56KnIsdGhpcy5fdz1NYXRoLmNvcyhpKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGU9dC5lbGVtZW50cyxpPWVbMF0scj1lWzRdLHM9ZVs4XSxvPWVbMV0sYT1lWzVdLGw9ZVs5XSxjPWVbMl0sdT1lWzZdLGg9ZVsxMF0sZj1pK2EraDtpZihmPjApe2xldCBkPS41L01hdGguc3FydChmKzEpO3RoaXMuX3c9LjI1L2QsdGhpcy5feD0odS1sKSpkLHRoaXMuX3k9KHMtYykqZCx0aGlzLl96PShvLXIpKmR9ZWxzZSBpZihpPmEmJmk+aCl7bGV0IGQ9MipNYXRoLnNxcnQoMStpLWEtaCk7dGhpcy5fdz0odS1sKS9kLHRoaXMuX3g9LjI1KmQsdGhpcy5feT0ocitvKS9kLHRoaXMuX3o9KHMrYykvZH1lbHNlIGlmKGE+aCl7bGV0IGQ9MipNYXRoLnNxcnQoMSthLWktaCk7dGhpcy5fdz0ocy1jKS9kLHRoaXMuX3g9KHIrbykvZCx0aGlzLl95PS4yNSpkLHRoaXMuX3o9KGwrdSkvZH1lbHNle2xldCBkPTIqTWF0aC5zcXJ0KDEraC1pLWEpO3RoaXMuX3c9KG8tcikvZCx0aGlzLl94PShzK2MpL2QsdGhpcy5feT0obCt1KS9kLHRoaXMuX3o9LjI1KmR9cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Vbml0VmVjdG9ycyh0LGUpe2xldCBpPXQuZG90KGUpKzE7cmV0dXJuIGk8TnVtYmVyLkVQU0lMT04/KGk9MCxNYXRoLmFicyh0LngpPk1hdGguYWJzKHQueik/KHRoaXMuX3g9LXQueSx0aGlzLl95PXQueCx0aGlzLl96PTAsdGhpcy5fdz1pKToodGhpcy5feD0wLHRoaXMuX3k9LXQueix0aGlzLl96PXQueSx0aGlzLl93PWkpKToodGhpcy5feD10LnkqZS56LXQueiplLnksdGhpcy5feT10LnoqZS54LXQueCplLnosdGhpcy5fej10LngqZS55LXQueSplLngsdGhpcy5fdz1pKSx0aGlzLm5vcm1hbGl6ZSgpfWFuZ2xlVG8odCl7cmV0dXJuIDIqTWF0aC5hY29zKE1hdGguYWJzKEllKHRoaXMuZG90KHQpLC0xLDEpKSl9cm90YXRlVG93YXJkcyh0LGUpe2xldCBpPXRoaXMuYW5nbGVUbyh0KTtpZihpPT09MClyZXR1cm4gdGhpcztsZXQgcj1NYXRoLm1pbigxLGUvaSk7cmV0dXJuIHRoaXMuc2xlcnAodCxyKSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDAsMCwwLDEpfWludmVydCgpe3JldHVybiB0aGlzLmNvbmp1Z2F0ZSgpfWNvbmp1Z2F0ZSgpe3JldHVybiB0aGlzLl94Kj0tMSx0aGlzLl95Kj0tMSx0aGlzLl96Kj0tMSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMuX3gqdC5feCt0aGlzLl95KnQuX3krdGhpcy5feip0Ll96K3RoaXMuX3cqdC5fd31sZW5ndGhTcSgpe3JldHVybiB0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3d9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfW5vcm1hbGl6ZSgpe2xldCB0PXRoaXMubGVuZ3RoKCk7cmV0dXJuIHQ9PT0wPyh0aGlzLl94PTAsdGhpcy5feT0wLHRoaXMuX3o9MCx0aGlzLl93PTEpOih0PTEvdCx0aGlzLl94PXRoaXMuX3gqdCx0aGlzLl95PXRoaXMuX3kqdCx0aGlzLl96PXRoaXMuX3oqdCx0aGlzLl93PXRoaXMuX3cqdCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCxlKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHRoaXMpfW11bHRpcGx5UXVhdGVybmlvbnModCxlKXtsZXQgaT10Ll94LHI9dC5feSxzPXQuX3osbz10Ll93LGE9ZS5feCxsPWUuX3ksYz1lLl96LHU9ZS5fdztyZXR1cm4gdGhpcy5feD1pKnUrbyphK3IqYy1zKmwsdGhpcy5feT1yKnUrbypsK3MqYS1pKmMsdGhpcy5fej1zKnUrbypjK2kqbC1yKmEsdGhpcy5fdz1vKnUtaSphLXIqbC1zKmMsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnAodCxlKXtpZihlPT09MClyZXR1cm4gdGhpcztpZihlPT09MSlyZXR1cm4gdGhpcy5jb3B5KHQpO2xldCBpPXRoaXMuX3gscj10aGlzLl95LHM9dGhpcy5feixvPXRoaXMuX3csYT1vKnQuX3craSp0Ll94K3IqdC5feStzKnQuX3o7aWYoYTwwPyh0aGlzLl93PS10Ll93LHRoaXMuX3g9LXQuX3gsdGhpcy5feT0tdC5feSx0aGlzLl96PS10Ll96LGE9LWEpOnRoaXMuY29weSh0KSxhPj0xKXJldHVybiB0aGlzLl93PW8sdGhpcy5feD1pLHRoaXMuX3k9cix0aGlzLl96PXMsdGhpcztsZXQgbD0xLWEqYTtpZihsPD1OdW1iZXIuRVBTSUxPTil7bGV0IGQ9MS1lO3JldHVybiB0aGlzLl93PWQqbytlKnRoaXMuX3csdGhpcy5feD1kKmkrZSp0aGlzLl94LHRoaXMuX3k9ZCpyK2UqdGhpcy5feSx0aGlzLl96PWQqcytlKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31sZXQgYz1NYXRoLnNxcnQobCksdT1NYXRoLmF0YW4yKGMsYSksaD1NYXRoLnNpbigoMS1lKSp1KS9jLGY9TWF0aC5zaW4oZSp1KS9jO3JldHVybiB0aGlzLl93PW8qaCt0aGlzLl93KmYsdGhpcy5feD1pKmgrdGhpcy5feCpmLHRoaXMuX3k9cipoK3RoaXMuX3kqZix0aGlzLl96PXMqaCt0aGlzLl96KmYsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnBRdWF0ZXJuaW9ucyh0LGUsaSl7cmV0dXJuIHRoaXMuY29weSh0KS5zbGVycChlLGkpfXJhbmRvbSgpe2xldCB0PU1hdGgucmFuZG9tKCksZT1NYXRoLnNxcnQoMS10KSxpPU1hdGguc3FydCh0KSxyPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpLHM9MipNYXRoLlBJKk1hdGgucmFuZG9tKCk7cmV0dXJuIHRoaXMuc2V0KGUqTWF0aC5jb3MociksaSpNYXRoLnNpbihzKSxpKk1hdGguY29zKHMpLGUqTWF0aC5zaW4ocikpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fdz09PXRoaXMuX3d9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy5feD10W2VdLHRoaXMuX3k9dFtlKzFdLHRoaXMuX3o9dFtlKzJdLHRoaXMuX3c9dFtlKzNdLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMuX3gsdFtlKzFdPXRoaXMuX3ksdFtlKzJdPXRoaXMuX3osdFtlKzNdPXRoaXMuX3csdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMuX3g9dC5nZXRYKGUpLHRoaXMuX3k9dC5nZXRZKGUpLHRoaXMuX3o9dC5nZXRaKGUpLHRoaXMuX3c9dC5nZXRXKGUpLHRoaXN9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O0VlLnByb3RvdHlwZS5pc1F1YXRlcm5pb249ITA7dmFyIFQ9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTApe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pfXNldCh0LGUsaSl7cmV0dXJuIGk9PT12b2lkIDAmJihpPXRoaXMueiksdGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpc31hZGQodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQsZSkpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzfXN1Yih0LGUpe3JldHVybiBlIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxlKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlWZWN0b3JzKHQsZSkpOih0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzKX1tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpc31tdWx0aXBseVZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCplLngsdGhpcy55PXQueSplLnksdGhpcy56PXQueiplLnosdGhpc31hcHBseUV1bGVyKHQpe3JldHVybiB0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKSx0aGlzLmFwcGx5UXVhdGVybmlvbihyZy5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKHJnLnNldEZyb21BeGlzQW5nbGUodCxlKSl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixzPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1zWzBdKmUrc1szXSppK3NbNl0qcix0aGlzLnk9c1sxXSplK3NbNF0qaStzWzddKnIsdGhpcy56PXNbMl0qZStzWzVdKmkrc1s4XSpyLHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXgzKHQpLm5vcm1hbGl6ZSgpfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10LmVsZW1lbnRzLG89MS8oc1szXSplK3NbN10qaStzWzExXSpyK3NbMTVdKTtyZXR1cm4gdGhpcy54PShzWzBdKmUrc1s0XSppK3NbOF0qcitzWzEyXSkqbyx0aGlzLnk9KHNbMV0qZStzWzVdKmkrc1s5XSpyK3NbMTNdKSpvLHRoaXMuej0oc1syXSplK3NbNl0qaStzWzEwXSpyK3NbMTRdKSpvLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixzPXQueCxvPXQueSxhPXQueixsPXQudyxjPWwqZStvKnItYSppLHU9bCppK2EqZS1zKnIsaD1sKnIrcyppLW8qZSxmPS1zKmUtbyppLWEqcjtyZXR1cm4gdGhpcy54PWMqbCtmKi1zK3UqLWEtaCotbyx0aGlzLnk9dSpsK2YqLW8raCotcy1jKi1hLHRoaXMuej1oKmwrZiotYStjKi1vLXUqLXMsdGhpc31wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkSW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQucHJvamVjdGlvbk1hdHJpeCl9dW5wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCl9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixzPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1zWzBdKmUrc1s0XSppK3NbOF0qcix0aGlzLnk9c1sxXSplK3NbNV0qaStzWzldKnIsdGhpcy56PXNbMl0qZStzWzZdKmkrc1sxMF0qcix0aGlzLm5vcm1hbGl6ZSgpfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpcy56Lz10LnosdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnopfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzLno9dC56KyhlLnotdC56KSppLHRoaXN9Y3Jvc3ModCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKHQsZSkpOnRoaXMuY3Jvc3NWZWN0b3JzKHRoaXMsdCl9Y3Jvc3NWZWN0b3JzKHQsZSl7bGV0IGk9dC54LHI9dC55LHM9dC56LG89ZS54LGE9ZS55LGw9ZS56O3JldHVybiB0aGlzLng9cipsLXMqYSx0aGlzLnk9cypvLWkqbCx0aGlzLno9aSphLXIqbyx0aGlzfXByb2plY3RPblZlY3Rvcih0KXtsZXQgZT10Lmxlbmd0aFNxKCk7aWYoZT09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwKTtsZXQgaT10LmRvdCh0aGlzKS9lO3JldHVybiB0aGlzLmNvcHkodCkubXVsdGlwbHlTY2FsYXIoaSl9cHJvamVjdE9uUGxhbmUodCl7cmV0dXJuIGx1LmNvcHkodGhpcykucHJvamVjdE9uVmVjdG9yKHQpLHRoaXMuc3ViKGx1KX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihsdS5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKDIqdGhpcy5kb3QodCkpKX1hbmdsZVRvKHQpe2xldCBlPU1hdGguc3FydCh0aGlzLmxlbmd0aFNxKCkqdC5sZW5ndGhTcSgpKTtpZihlPT09MClyZXR1cm4gTWF0aC5QSS8yO2xldCBpPXRoaXMuZG90KHQpL2U7cmV0dXJuIE1hdGguYWNvcyhJZShpLC0xLDEpKX1kaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VUb1NxdWFyZWQodCl7bGV0IGU9dGhpcy54LXQueCxpPXRoaXMueS10Lnkscj10aGlzLnotdC56O3JldHVybiBlKmUraSppK3Iqcn1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KStNYXRoLmFicyh0aGlzLnotdC56KX1zZXRGcm9tU3BoZXJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21TcGhlcmljYWxDb29yZHModC5yYWRpdXMsdC5waGksdC50aGV0YSl9c2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LGUsaSl7bGV0IHI9TWF0aC5zaW4oZSkqdDtyZXR1cm4gdGhpcy54PXIqTWF0aC5zaW4oaSksdGhpcy55PU1hdGguY29zKGUpKnQsdGhpcy56PXIqTWF0aC5jb3MoaSksdGhpc31zZXRGcm9tQ3lsaW5kcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQucmFkaXVzLHQudGhldGEsdC55KX1zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModCxlLGkpe3JldHVybiB0aGlzLng9dCpNYXRoLnNpbihlKSx0aGlzLnk9aSx0aGlzLno9dCpNYXRoLmNvcyhlKSx0aGlzfXNldEZyb21NYXRyaXhQb3NpdGlvbih0KXtsZXQgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9ZVsxMl0sdGhpcy55PWVbMTNdLHRoaXMuej1lWzE0XSx0aGlzfXNldEZyb21NYXRyaXhTY2FsZSh0KXtsZXQgZT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLHI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIHRoaXMueD1lLHRoaXMueT1pLHRoaXMuej1yLHRoaXN9c2V0RnJvbU1hdHJpeENvbHVtbih0LGUpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLGUqNCl9c2V0RnJvbU1hdHJpeDNDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxlKjMpfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMuen1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXMuej10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIGkhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXN9cmFuZG9tRGlyZWN0aW9uKCl7bGV0IHQ9KE1hdGgucmFuZG9tKCktLjUpKjIsZT1NYXRoLnJhbmRvbSgpKk1hdGguUEkqMixpPU1hdGguc3FydCgxLWNmKHQsMikpO3JldHVybiB0aGlzLng9aSpNYXRoLmNvcyhlKSx0aGlzLnk9aSpNYXRoLnNpbihlKSx0aGlzLno9dCx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56fX07VC5wcm90b3R5cGUuaXNWZWN0b3IzPSEwO3ZhciBsdT1uZXcgVCxyZz1uZXcgRWUsR2U9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgVCgxLzAsMS8wLDEvMCksZT1uZXcgVCgtMS8wLC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KGUpLHRoaXN9c2V0RnJvbUFycmF5KHQpe2xldCBlPTEvMCxpPTEvMCxyPTEvMCxzPS0xLzAsbz0tMS8wLGE9LTEvMDtmb3IobGV0IGw9MCxjPXQubGVuZ3RoO2w8YztsKz0zKXtsZXQgdT10W2xdLGg9dFtsKzFdLGY9dFtsKzJdO3U8ZSYmKGU9dSksaDxpJiYoaT1oKSxmPHImJihyPWYpLHU+cyYmKHM9dSksaD5vJiYobz1oKSxmPmEmJihhPWYpfXJldHVybiB0aGlzLm1pbi5zZXQoZSxpLHIpLHRoaXMubWF4LnNldChzLG8sYSksdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe2xldCBlPTEvMCxpPTEvMCxyPTEvMCxzPS0xLzAsbz0tMS8wLGE9LTEvMDtmb3IobGV0IGw9MCxjPXQuY291bnQ7bDxjO2wrKyl7bGV0IHU9dC5nZXRYKGwpLGg9dC5nZXRZKGwpLGY9dC5nZXRaKGwpO3U8ZSYmKGU9dSksaDxpJiYoaT1oKSxmPHImJihyPWYpLHU+cyYmKHM9dSksaD5vJiYobz1oKSxmPmEmJihhPWYpfXJldHVybiB0aGlzLm1pbi5zZXQoZSxpLHIpLHRoaXMubWF4LnNldChzLG8sYSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2xldCBpPUlpLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfXNldEZyb21PYmplY3QodCxlPSExKXtyZXR1cm4gdGhpcy5tYWtlRW1wdHkoKSx0aGlzLmV4cGFuZEJ5T2JqZWN0KHQsZSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT10aGlzLm1pbi56PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9dGhpcy5tYXguej0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueXx8dGhpcy5tYXguejx0aGlzLm1pbi56fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWV4cGFuZEJ5T2JqZWN0KHQsZT0hMSl7dC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMSk7bGV0IGk9dC5nZW9tZXRyeTtpZihpIT09dm9pZCAwKWlmKGUmJmkuYXR0cmlidXRlcyE9bnVsbCYmaS5hdHRyaWJ1dGVzLnBvc2l0aW9uIT09dm9pZCAwKXtsZXQgcz1pLmF0dHJpYnV0ZXMucG9zaXRpb247Zm9yKGxldCBvPTAsYT1zLmNvdW50O288YTtvKyspSWkuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLG8pLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmV4cGFuZEJ5UG9pbnQoSWkpfWVsc2UgaS5ib3VuZGluZ0JveD09PW51bGwmJmkuY29tcHV0ZUJvdW5kaW5nQm94KCksY3UuY29weShpLmJvdW5kaW5nQm94KSxjdS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy51bmlvbihjdSk7bGV0IHI9dC5jaGlsZHJlbjtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspdGhpcy5leHBhbmRCeU9iamVjdChyW3NdLGUpO3JldHVybiB0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueXx8dC56PHRoaXMubWluLnp8fHQuej50aGlzLm1heC56KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueSYmdGhpcy5taW4uejw9dC5taW4ueiYmdC5tYXguejw9dGhpcy5tYXguen1nZXRQYXJhbWV0ZXIodCxlKXtyZXR1cm4gZS5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpLCh0LnotdGhpcy5taW4ueikvKHRoaXMubWF4LnotdGhpcy5taW4ueikpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4Lnl8fHQubWF4Lno8dGhpcy5taW4uenx8dC5taW4uej50aGlzLm1heC56KX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmNsYW1wUG9pbnQodC5jZW50ZXIsSWkpLElpLmRpc3RhbmNlVG9TcXVhcmVkKHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCBlLGk7cmV0dXJuIHQubm9ybWFsLng+MD8oZT10Lm5vcm1hbC54KnRoaXMubWluLngsaT10Lm5vcm1hbC54KnRoaXMubWF4LngpOihlPXQubm9ybWFsLngqdGhpcy5tYXgueCxpPXQubm9ybWFsLngqdGhpcy5taW4ueCksdC5ub3JtYWwueT4wPyhlKz10Lm5vcm1hbC55KnRoaXMubWluLnksaSs9dC5ub3JtYWwueSp0aGlzLm1heC55KTooZSs9dC5ub3JtYWwueSp0aGlzLm1heC55LGkrPXQubm9ybWFsLnkqdGhpcy5taW4ueSksdC5ub3JtYWwuej4wPyhlKz10Lm5vcm1hbC56KnRoaXMubWluLnosaSs9dC5ub3JtYWwueip0aGlzLm1heC56KTooZSs9dC5ub3JtYWwueip0aGlzLm1heC56LGkrPXQubm9ybWFsLnoqdGhpcy5taW4ueiksZTw9LXQuY29uc3RhbnQmJmk+PS10LmNvbnN0YW50fWludGVyc2VjdHNUcmlhbmdsZSh0KXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4hMTt0aGlzLmdldENlbnRlcihrcyksX2Euc3ViVmVjdG9ycyh0aGlzLm1heCxrcyksbXIuc3ViVmVjdG9ycyh0LmEsa3MpLGdyLnN1YlZlY3RvcnModC5iLGtzKSx4ci5zdWJWZWN0b3JzKHQuYyxrcykscW4uc3ViVmVjdG9ycyhncixtciksWG4uc3ViVmVjdG9ycyh4cixnciksTmkuc3ViVmVjdG9ycyhtcix4cik7bGV0IGU9WzAsLXFuLnoscW4ueSwwLC1Ybi56LFhuLnksMCwtTmkueixOaS55LHFuLnosMCwtcW4ueCxYbi56LDAsLVhuLngsTmkueiwwLC1OaS54LC1xbi55LHFuLngsMCwtWG4ueSxYbi54LDAsLU5pLnksTmkueCwwXTtyZXR1cm4hdXUoZSxtcixncix4cixfYSl8fChlPVsxLDAsMCwwLDEsMCwwLDAsMV0sIXV1KGUsbXIsZ3IseHIsX2EpKT8hMTood2EuY3Jvc3NWZWN0b3JzKHFuLFhuKSxlPVt3YS54LHdhLnksd2Euel0sdXUoZSxtcixncix4cixfYSkpfWNsYW1wUG9pbnQodCxlKXtyZXR1cm4gZS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIElpLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1nZXRCb3VuZGluZ1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPXRoaXMuZ2V0U2l6ZShJaSkubGVuZ3RoKCkqLjUsdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3RoaXM6KEFuWzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLEFuWzFdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLEFuWzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLEFuWzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLEFuWzRdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLEFuWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLEFuWzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLEFuWzddLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0RnJvbVBvaW50cyhBbiksdGhpcyl9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX07R2UucHJvdG90eXBlLmlzQm94Mz0hMDt2YXIgQW49W25ldyBULG5ldyBULG5ldyBULG5ldyBULG5ldyBULG5ldyBULG5ldyBULG5ldyBUXSxJaT1uZXcgVCxjdT1uZXcgR2UsbXI9bmV3IFQsZ3I9bmV3IFQseHI9bmV3IFQscW49bmV3IFQsWG49bmV3IFQsTmk9bmV3IFQsa3M9bmV3IFQsX2E9bmV3IFQsd2E9bmV3IFQsRmk9bmV3IFQ7ZnVuY3Rpb24gdXUobix0LGUsaSxyKXtmb3IobGV0IHM9MCxvPW4ubGVuZ3RoLTM7czw9bztzKz0zKXtGaS5mcm9tQXJyYXkobixzKTtsZXQgYT1yLngqTWF0aC5hYnMoRmkueCkrci55Kk1hdGguYWJzKEZpLnkpK3IueipNYXRoLmFicyhGaS56KSxsPXQuZG90KEZpKSxjPWUuZG90KEZpKSx1PWkuZG90KEZpKTtpZihNYXRoLm1heCgtTWF0aC5tYXgobCxjLHUpLE1hdGgubWluKGwsYyx1KSk+YSlyZXR1cm4hMX1yZXR1cm4hMH12YXIgck09bmV3IEdlLHNnPW5ldyBULE1hPW5ldyBULGh1PW5ldyBULHNpPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT0tMSl7dGhpcy5jZW50ZXI9dCx0aGlzLnJhZGl1cz1lfXNldCh0LGUpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQpLHRoaXMucmFkaXVzPWUsdGhpc31zZXRGcm9tUG9pbnRzKHQsZSl7bGV0IGk9dGhpcy5jZW50ZXI7ZSE9PXZvaWQgMD9pLmNvcHkoZSk6ck0uc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIoaSk7bGV0IHI9MDtmb3IobGV0IHM9MCxvPXQubGVuZ3RoO3M8bztzKyspcj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQodFtzXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQociksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnJhZGl1cyt0LnJhZGl1cztyZXR1cm4gdC5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1lKmV9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzU3BoZXJlKHRoaXMpfWludGVyc2VjdHNQbGFuZSh0KXtyZXR1cm4gTWF0aC5hYnModC5kaXN0YW5jZVRvUG9pbnQodGhpcy5jZW50ZXIpKTw9dGhpcy5yYWRpdXN9Y2xhbXBQb2ludCh0LGUpe2xldCBpPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiBlLmNvcHkodCksaT50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyYmKGUuc3ViKHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKSxlLm11bHRpcGx5U2NhbGFyKHRoaXMucmFkaXVzKS5hZGQodGhpcy5jZW50ZXIpKSxlfWdldEJvdW5kaW5nQm94KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXhwYW5kQnlQb2ludCh0KXtodS5zdWJWZWN0b3JzKHQsdGhpcy5jZW50ZXIpO2xldCBlPWh1Lmxlbmd0aFNxKCk7aWYoZT50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyl7bGV0IGk9TWF0aC5zcXJ0KGUpLHI9KGktdGhpcy5yYWRpdXMpKi41O3RoaXMuY2VudGVyLmFkZChodS5tdWx0aXBseVNjYWxhcihyL2kpKSx0aGlzLnJhZGl1cys9cn1yZXR1cm4gdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5jZW50ZXIuZXF1YWxzKHQuY2VudGVyKT09PSEwP01hLnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOk1hLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQoc2cuY29weSh0LmNlbnRlcikuYWRkKE1hKSksdGhpcy5leHBhbmRCeVBvaW50KHNnLmNvcHkodC5jZW50ZXIpLnN1YihNYSkpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZ0LnJhZGl1cz09PXRoaXMucmFkaXVzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LENuPW5ldyBULGZ1PW5ldyBULGJhPW5ldyBULFluPW5ldyBULGR1PW5ldyBULFNhPW5ldyBULHB1PW5ldyBULG9pPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCgwLDAsLTEpKXt0aGlzLm9yaWdpbj10LHRoaXMuZGlyZWN0aW9uPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodCksdGhpcy5kaXJlY3Rpb24uY29weShlKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodC5vcmlnaW4pLHRoaXMuZGlyZWN0aW9uLmNvcHkodC5kaXJlY3Rpb24pLHRoaXN9YXQodCxlKXtyZXR1cm4gZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5vcmlnaW4pfWxvb2tBdCh0KXtyZXR1cm4gdGhpcy5kaXJlY3Rpb24uY29weSh0KS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXN9cmVjYXN0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHRoaXMuYXQodCxDbikpLHRoaXN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2Uuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKTtsZXQgaT1lLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIGk8MD9lLmNvcHkodGhpcy5vcmlnaW4pOmUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoaSkuYWRkKHRoaXMub3JpZ2luKX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQpKX1kaXN0YW5jZVNxVG9Qb2ludCh0KXtsZXQgZT1Dbi5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIGU8MD90aGlzLm9yaWdpbi5kaXN0YW5jZVRvU3F1YXJlZCh0KTooQ24uY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoZSkuYWRkKHRoaXMub3JpZ2luKSxDbi5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VTcVRvU2VnbWVudCh0LGUsaSxyKXtmdS5jb3B5KHQpLmFkZChlKS5tdWx0aXBseVNjYWxhciguNSksYmEuY29weShlKS5zdWIodCkubm9ybWFsaXplKCksWW4uY29weSh0aGlzLm9yaWdpbikuc3ViKGZ1KTtsZXQgcz10LmRpc3RhbmNlVG8oZSkqLjUsbz0tdGhpcy5kaXJlY3Rpb24uZG90KGJhKSxhPVluLmRvdCh0aGlzLmRpcmVjdGlvbiksbD0tWW4uZG90KGJhKSxjPVluLmxlbmd0aFNxKCksdT1NYXRoLmFicygxLW8qbyksaCxmLGQsZztpZih1PjApaWYoaD1vKmwtYSxmPW8qYS1sLGc9cyp1LGg+PTApaWYoZj49LWcpaWYoZjw9Zyl7bGV0IHg9MS91O2gqPXgsZio9eCxkPWgqKGgrbypmKzIqYSkrZioobypoK2YrMipsKStjfWVsc2UgZj1zLGg9TWF0aC5tYXgoMCwtKG8qZithKSksZD0taCpoK2YqKGYrMipsKStjO2Vsc2UgZj0tcyxoPU1hdGgubWF4KDAsLShvKmYrYSkpLGQ9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY8PS1nPyhoPU1hdGgubWF4KDAsLSgtbypzK2EpKSxmPWg+MD8tczpNYXRoLm1pbihNYXRoLm1heCgtcywtbCkscyksZD0taCpoK2YqKGYrMipsKStjKTpmPD1nPyhoPTAsZj1NYXRoLm1pbihNYXRoLm1heCgtcywtbCkscyksZD1mKihmKzIqbCkrYyk6KGg9TWF0aC5tYXgoMCwtKG8qcythKSksZj1oPjA/czpNYXRoLm1pbihNYXRoLm1heCgtcywtbCkscyksZD0taCpoK2YqKGYrMipsKStjKTtlbHNlIGY9bz4wPy1zOnMsaD1NYXRoLm1heCgwLC0obypmK2EpKSxkPS1oKmgrZiooZisyKmwpK2M7cmV0dXJuIGkmJmkuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoaCkuYWRkKHRoaXMub3JpZ2luKSxyJiZyLmNvcHkoYmEpLm11bHRpcGx5U2NhbGFyKGYpLmFkZChmdSksZH1pbnRlcnNlY3RTcGhlcmUodCxlKXtDbi5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMub3JpZ2luKTtsZXQgaT1Dbi5kb3QodGhpcy5kaXJlY3Rpb24pLHI9Q24uZG90KENuKS1pKmkscz10LnJhZGl1cyp0LnJhZGl1cztpZihyPnMpcmV0dXJuIG51bGw7bGV0IG89TWF0aC5zcXJ0KHMtciksYT1pLW8sbD1pK287cmV0dXJuIGE8MCYmbDwwP251bGw6YTwwP3RoaXMuYXQobCxlKTp0aGlzLmF0KGEsZSl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWRpc3RhbmNlVG9QbGFuZSh0KXtsZXQgZT10Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKGU9PT0wKXJldHVybiB0LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik9PT0wPzA6bnVsbDtsZXQgaT0tKHRoaXMub3JpZ2luLmRvdCh0Lm5vcm1hbCkrdC5jb25zdGFudCkvZTtyZXR1cm4gaT49MD9pOm51bGx9aW50ZXJzZWN0UGxhbmUodCxlKXtsZXQgaT10aGlzLmRpc3RhbmNlVG9QbGFuZSh0KTtyZXR1cm4gaT09PW51bGw/bnVsbDp0aGlzLmF0KGksZSl9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCBlPXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gZT09PTB8fHQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbikqZTwwfWludGVyc2VjdEJveCh0LGUpe2xldCBpLHIscyxvLGEsbCxjPTEvdGhpcy5kaXJlY3Rpb24ueCx1PTEvdGhpcy5kaXJlY3Rpb24ueSxoPTEvdGhpcy5kaXJlY3Rpb24ueixmPXRoaXMub3JpZ2luO3JldHVybiBjPj0wPyhpPSh0Lm1pbi54LWYueCkqYyxyPSh0Lm1heC54LWYueCkqYyk6KGk9KHQubWF4LngtZi54KSpjLHI9KHQubWluLngtZi54KSpjKSx1Pj0wPyhzPSh0Lm1pbi55LWYueSkqdSxvPSh0Lm1heC55LWYueSkqdSk6KHM9KHQubWF4LnktZi55KSp1LG89KHQubWluLnktZi55KSp1KSxpPm98fHM+cnx8KChzPml8fGkhPT1pKSYmKGk9cyksKG88cnx8ciE9PXIpJiYocj1vKSxoPj0wPyhhPSh0Lm1pbi56LWYueikqaCxsPSh0Lm1heC56LWYueikqaCk6KGE9KHQubWF4LnotZi56KSpoLGw9KHQubWluLnotZi56KSpoKSxpPmx8fGE+cil8fCgoYT5pfHxpIT09aSkmJihpPWEpLChsPHJ8fHIhPT1yKSYmKHI9bCkscjwwKT9udWxsOnRoaXMuYXQoaT49MD9pOnIsZSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdGhpcy5pbnRlcnNlY3RCb3godCxDbikhPT1udWxsfWludGVyc2VjdFRyaWFuZ2xlKHQsZSxpLHIscyl7ZHUuc3ViVmVjdG9ycyhlLHQpLFNhLnN1YlZlY3RvcnMoaSx0KSxwdS5jcm9zc1ZlY3RvcnMoZHUsU2EpO2xldCBvPXRoaXMuZGlyZWN0aW9uLmRvdChwdSksYTtpZihvPjApe2lmKHIpcmV0dXJuIG51bGw7YT0xfWVsc2UgaWYobzwwKWE9LTEsbz0tbztlbHNlIHJldHVybiBudWxsO1luLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sdCk7bGV0IGw9YSp0aGlzLmRpcmVjdGlvbi5kb3QoU2EuY3Jvc3NWZWN0b3JzKFluLFNhKSk7aWYobDwwKXJldHVybiBudWxsO2xldCBjPWEqdGhpcy5kaXJlY3Rpb24uZG90KGR1LmNyb3NzKFluKSk7aWYoYzwwfHxsK2M+bylyZXR1cm4gbnVsbDtsZXQgdT0tYSpZbi5kb3QocHUpO3JldHVybiB1PDA/bnVsbDp0aGlzLmF0KHUvbyxzKX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMub3JpZ2luLmFwcGx5TWF0cml4NCh0KSx0aGlzLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQub3JpZ2luLmVxdWFscyh0aGlzLm9yaWdpbikmJnQuZGlyZWN0aW9uLmVxdWFscyh0aGlzLmRpcmVjdGlvbil9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sd3Q9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQsZSxpLHIscyxvLGEsbCxjLHUsaCxmLGQsZyx4LHYpe2xldCBtPXRoaXMuZWxlbWVudHM7cmV0dXJuIG1bMF09dCxtWzRdPWUsbVs4XT1pLG1bMTJdPXIsbVsxXT1zLG1bNV09byxtWzldPWEsbVsxM109bCxtWzJdPWMsbVs2XT11LG1bMTBdPWgsbVsxNF09ZixtWzNdPWQsbVs3XT1nLG1bMTFdPXgsbVsxNV09dix0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHd0KCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfWNvcHkodCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMF09aVswXSxlWzFdPWlbMV0sZVsyXT1pWzJdLGVbM109aVszXSxlWzRdPWlbNF0sZVs1XT1pWzVdLGVbNl09aVs2XSxlWzddPWlbN10sZVs4XT1pWzhdLGVbOV09aVs5XSxlWzEwXT1pWzEwXSxlWzExXT1pWzExXSxlWzEyXT1pWzEyXSxlWzEzXT1pWzEzXSxlWzE0XT1pWzE0XSxlWzE1XT1pWzE1XSx0aGlzfWNvcHlQb3NpdGlvbih0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sdGhpc31zZXRGcm9tTWF0cml4Myh0KXtsZXQgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChlWzBdLGVbM10sZVs2XSwwLGVbMV0sZVs0XSxlWzddLDAsZVsyXSxlWzVdLGVbOF0sMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsaSl7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDApLGUuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpLHRoaXN9bWFrZUJhc2lzKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQodC54LGUueCxpLngsMCx0LnksZS55LGkueSwwLHQueixlLnosaS56LDAsMCwwLDAsMSksdGhpc31leHRyYWN0Um90YXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHMscj0xL3lyLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxzPTEveXIuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLG89MS95ci5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIGVbMF09aVswXSpyLGVbMV09aVsxXSpyLGVbMl09aVsyXSpyLGVbM109MCxlWzRdPWlbNF0qcyxlWzVdPWlbNV0qcyxlWzZdPWlbNl0qcyxlWzddPTAsZVs4XT1pWzhdKm8sZVs5XT1pWzldKm8sZVsxMF09aVsxMF0qbyxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tRXVsZXIodCl7dCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubWFrZVJvdGF0aW9uRnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYSBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBlPXRoaXMuZWxlbWVudHMsaT10Lngscj10Lnkscz10Lnosbz1NYXRoLmNvcyhpKSxhPU1hdGguc2luKGkpLGw9TWF0aC5jb3MociksYz1NYXRoLnNpbihyKSx1PU1hdGguY29zKHMpLGg9TWF0aC5zaW4ocyk7aWYodC5vcmRlcj09PSJYWVoiKXtsZXQgZj1vKnUsZD1vKmgsZz1hKnUseD1hKmg7ZVswXT1sKnUsZVs0XT0tbCpoLGVbOF09YyxlWzFdPWQrZypjLGVbNV09Zi14KmMsZVs5XT0tYSpsLGVbMl09eC1mKmMsZVs2XT1nK2QqYyxlWzEwXT1vKmx9ZWxzZSBpZih0Lm9yZGVyPT09IllYWiIpe2xldCBmPWwqdSxkPWwqaCxnPWMqdSx4PWMqaDtlWzBdPWYreCphLGVbNF09ZyphLWQsZVs4XT1vKmMsZVsxXT1vKmgsZVs1XT1vKnUsZVs5XT0tYSxlWzJdPWQqYS1nLGVbNl09eCtmKmEsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJaWFkiKXtsZXQgZj1sKnUsZD1sKmgsZz1jKnUseD1jKmg7ZVswXT1mLXgqYSxlWzRdPS1vKmgsZVs4XT1nK2QqYSxlWzFdPWQrZyphLGVbNV09byp1LGVbOV09eC1mKmEsZVsyXT0tbypjLGVbNl09YSxlWzEwXT1vKmx9ZWxzZSBpZih0Lm9yZGVyPT09IlpZWCIpe2xldCBmPW8qdSxkPW8qaCxnPWEqdSx4PWEqaDtlWzBdPWwqdSxlWzRdPWcqYy1kLGVbOF09ZipjK3gsZVsxXT1sKmgsZVs1XT14KmMrZixlWzldPWQqYy1nLGVbMl09LWMsZVs2XT1hKmwsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJZWlgiKXtsZXQgZj1vKmwsZD1vKmMsZz1hKmwseD1hKmM7ZVswXT1sKnUsZVs0XT14LWYqaCxlWzhdPWcqaCtkLGVbMV09aCxlWzVdPW8qdSxlWzldPS1hKnUsZVsyXT0tYyp1LGVbNl09ZCpoK2csZVsxMF09Zi14Kmh9ZWxzZSBpZih0Lm9yZGVyPT09IlhaWSIpe2xldCBmPW8qbCxkPW8qYyxnPWEqbCx4PWEqYztlWzBdPWwqdSxlWzRdPS1oLGVbOF09Yyp1LGVbMV09ZipoK3gsZVs1XT1vKnUsZVs5XT1kKmgtZyxlWzJdPWcqaC1kLGVbNl09YSp1LGVbMTBdPXgqaCtmfXJldHVybiBlWzNdPTAsZVs3XT0wLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLmNvbXBvc2Uoc00sdCxvTSl9bG9va0F0KHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiBrZS5zdWJWZWN0b3JzKHQsZSksa2UubGVuZ3RoU3EoKT09PTAmJihrZS56PTEpLGtlLm5vcm1hbGl6ZSgpLFpuLmNyb3NzVmVjdG9ycyhpLGtlKSxabi5sZW5ndGhTcSgpPT09MCYmKE1hdGguYWJzKGkueik9PT0xP2tlLngrPTFlLTQ6a2Uueis9MWUtNCxrZS5ub3JtYWxpemUoKSxabi5jcm9zc1ZlY3RvcnMoaSxrZSkpLFpuLm5vcm1hbGl6ZSgpLEVhLmNyb3NzVmVjdG9ycyhrZSxabiksclswXT1abi54LHJbNF09RWEueCxyWzhdPWtlLngsclsxXT1abi55LHJbNV09RWEueSxyWzldPWtlLnksclsyXT1abi56LHJbNl09RWEueixyWzEwXT1rZS56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5TWF0cmljZXModCxlKSk6dGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxzPXRoaXMuZWxlbWVudHMsbz1pWzBdLGE9aVs0XSxsPWlbOF0sYz1pWzEyXSx1PWlbMV0saD1pWzVdLGY9aVs5XSxkPWlbMTNdLGc9aVsyXSx4PWlbNl0sdj1pWzEwXSxtPWlbMTRdLHA9aVszXSxiPWlbN10sXz1pWzExXSxTPWlbMTVdLEw9clswXSxBPXJbNF0sSD1yWzhdLHR0PXJbMTJdLFg9clsxXSx5PXJbNV0sUj1yWzldLEQ9clsxM10sRj1yWzJdLHo9cls2XSxOPXJbMTBdLFY9clsxNF0sUT1yWzNdLGF0PXJbN10sRz1yWzExXSwkPXJbMTVdO3JldHVybiBzWzBdPW8qTCthKlgrbCpGK2MqUSxzWzRdPW8qQSthKnkrbCp6K2MqYXQsc1s4XT1vKkgrYSpSK2wqTitjKkcsc1sxMl09byp0dCthKkQrbCpWK2MqJCxzWzFdPXUqTCtoKlgrZipGK2QqUSxzWzVdPXUqQStoKnkrZip6K2QqYXQsc1s5XT11KkgraCpSK2YqTitkKkcsc1sxM109dSp0dCtoKkQrZipWK2QqJCxzWzJdPWcqTCt4KlgrdipGK20qUSxzWzZdPWcqQSt4Knkrdip6K20qYXQsc1sxMF09ZypIK3gqUit2Kk4rbSpHLHNbMTRdPWcqdHQreCpEK3YqVittKiQsc1szXT1wKkwrYipYK18qRitTKlEsc1s3XT1wKkErYip5K18qeitTKmF0LHNbMTFdPXAqSCtiKlIrXypOK1MqRyxzWzE1XT1wKnR0K2IqRCtfKlYrUyokLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzRdKj10LGVbOF0qPXQsZVsxMl0qPXQsZVsxXSo9dCxlWzVdKj10LGVbOV0qPXQsZVsxM10qPXQsZVsyXSo9dCxlWzZdKj10LGVbMTBdKj10LGVbMTRdKj10LGVbM10qPXQsZVs3XSo9dCxlWzExXSo9dCxlWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzRdLHI9dFs4XSxzPXRbMTJdLG89dFsxXSxhPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGg9dFs2XSxmPXRbMTBdLGQ9dFsxNF0sZz10WzNdLHg9dFs3XSx2PXRbMTFdLG09dFsxNV07cmV0dXJuIGcqKCtzKmwqaC1yKmMqaC1zKmEqZitpKmMqZityKmEqZC1pKmwqZCkreCooK2UqbCpkLWUqYypmK3MqbypmLXIqbypkK3IqYyp1LXMqbCp1KSt2KigrZSpjKmgtZSphKmQtcypvKmgraSpvKmQrcyphKnUtaSpjKnUpK20qKC1yKmEqdS1lKmwqaCtlKmEqZityKm8qaC1pKm8qZitpKmwqdSl9dHJhbnNwb3NlKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlO3JldHVybiBlPXRbMV0sdFsxXT10WzRdLHRbNF09ZSxlPXRbMl0sdFsyXT10WzhdLHRbOF09ZSxlPXRbNl0sdFs2XT10WzldLHRbOV09ZSxlPXRbM10sdFszXT10WzEyXSx0WzEyXT1lLGU9dFs3XSx0WzddPXRbMTNdLHRbMTNdPWUsZT10WzExXSx0WzExXT10WzE0XSx0WzE0XT1lLHRoaXN9c2V0UG9zaXRpb24odCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhyWzEyXT10LngsclsxM109dC55LHJbMTRdPXQueik6KHJbMTJdPXQsclsxM109ZSxyWzE0XT1pKSx0aGlzfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0scz10WzNdLG89dFs0XSxhPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD10WzldLGY9dFsxMF0sZD10WzExXSxnPXRbMTJdLHg9dFsxM10sdj10WzE0XSxtPXRbMTVdLHA9aCp2KmMteCpmKmMreCpsKmQtYSp2KmQtaCpsKm0rYSpmKm0sYj1nKmYqYy11KnYqYy1nKmwqZCtvKnYqZCt1KmwqbS1vKmYqbSxfPXUqeCpjLWcqaCpjK2cqYSpkLW8qeCpkLXUqYSptK28qaCptLFM9ZypoKmwtdSp4KmwtZyphKmYrbyp4KmYrdSphKnYtbypoKnYsTD1lKnAraSpiK3IqXytzKlM7aWYoTD09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApO2xldCBBPTEvTDtyZXR1cm4gdFswXT1wKkEsdFsxXT0oeCpmKnMtaCp2KnMteCpyKmQraSp2KmQraCpyKm0taSpmKm0pKkEsdFsyXT0oYSp2KnMteCpsKnMreCpyKmMtaSp2KmMtYSpyKm0raSpsKm0pKkEsdFszXT0oaCpsKnMtYSpmKnMtaCpyKmMraSpmKmMrYSpyKmQtaSpsKmQpKkEsdFs0XT1iKkEsdFs1XT0odSp2KnMtZypmKnMrZypyKmQtZSp2KmQtdSpyKm0rZSpmKm0pKkEsdFs2XT0oZypsKnMtbyp2KnMtZypyKmMrZSp2KmMrbypyKm0tZSpsKm0pKkEsdFs3XT0obypmKnMtdSpsKnMrdSpyKmMtZSpmKmMtbypyKmQrZSpsKmQpKkEsdFs4XT1fKkEsdFs5XT0oZypoKnMtdSp4KnMtZyppKmQrZSp4KmQrdSppKm0tZSpoKm0pKkEsdFsxMF09KG8qeCpzLWcqYSpzK2cqaSpjLWUqeCpjLW8qaSptK2UqYSptKSpBLHRbMTFdPSh1KmEqcy1vKmgqcy11KmkqYytlKmgqYytvKmkqZC1lKmEqZCkqQSx0WzEyXT1TKkEsdFsxM109KHUqeCpyLWcqaCpyK2cqaSpmLWUqeCpmLXUqaSp2K2UqaCp2KSpBLHRbMTRdPShnKmEqci1vKngqci1nKmkqbCtlKngqbCtvKmkqdi1lKmEqdikqQSx0WzE1XT0obypoKnItdSphKnIrdSppKmwtZSpoKmwtbyppKmYrZSphKmYpKkEsdGhpc31zY2FsZSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC54LHI9dC55LHM9dC56O3JldHVybiBlWzBdKj1pLGVbNF0qPXIsZVs4XSo9cyxlWzFdKj1pLGVbNV0qPXIsZVs5XSo9cyxlWzJdKj1pLGVbNl0qPXIsZVsxMF0qPXMsZVszXSo9aSxlWzddKj1yLGVbMTFdKj1zLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0saT10WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSxyPXRbOF0qdFs4XSt0WzldKnRbOV0rdFsxMF0qdFsxMF07cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChlLGkscikpfW1ha2VUcmFuc2xhdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLHQsMCwxLDAsZSwwLDAsMSxpLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWCh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsZSwtaSwwLDAsaSxlLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25ZKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsMCxpLDAsMCwxLDAsMCwtaSwwLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwtaSwwLDAsaSxlLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uQXhpcyh0LGUpe2xldCBpPU1hdGguY29zKGUpLHI9TWF0aC5zaW4oZSkscz0xLWksbz10LngsYT10LnksbD10LnosYz1zKm8sdT1zKmE7cmV0dXJuIHRoaXMuc2V0KGMqbytpLGMqYS1yKmwsYypsK3IqYSwwLGMqYStyKmwsdSphK2ksdSpsLXIqbywwLGMqbC1yKmEsdSpsK3IqbyxzKmwqbCtpLDAsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxlLGkpe3JldHVybiB0aGlzLnNldCh0LDAsMCwwLDAsZSwwLDAsMCwwLGksMCwwLDAsMCwxKSx0aGlzfW1ha2VTaGVhcih0LGUsaSxyLHMsbyl7cmV0dXJuIHRoaXMuc2V0KDEsaSxzLDAsdCwxLG8sMCxlLHIsMSwwLDAsMCwwLDEpLHRoaXN9Y29tcG9zZSh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cyxzPWUuX3gsbz1lLl95LGE9ZS5feixsPWUuX3csYz1zK3MsdT1vK28saD1hK2EsZj1zKmMsZD1zKnUsZz1zKmgseD1vKnUsdj1vKmgsbT1hKmgscD1sKmMsYj1sKnUsXz1sKmgsUz1pLngsTD1pLnksQT1pLno7cmV0dXJuIHJbMF09KDEtKHgrbSkpKlMsclsxXT0oZCtfKSpTLHJbMl09KGctYikqUyxyWzNdPTAscls0XT0oZC1fKSpMLHJbNV09KDEtKGYrbSkpKkwscls2XT0oditwKSpMLHJbN109MCxyWzhdPShnK2IpKkEscls5XT0odi1wKSpBLHJbMTBdPSgxLShmK3gpKSpBLHJbMTFdPTAsclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT10LnosclsxNV09MSx0aGlzfWRlY29tcG9zZSh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cyxzPXlyLnNldChyWzBdLHJbMV0sclsyXSkubGVuZ3RoKCksbz15ci5zZXQocls0XSxyWzVdLHJbNl0pLmxlbmd0aCgpLGE9eXIuc2V0KHJbOF0scls5XSxyWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihzPS1zKSx0Lng9clsxMl0sdC55PXJbMTNdLHQuej1yWzE0XSxLZS5jb3B5KHRoaXMpO2xldCBjPTEvcyx1PTEvbyxoPTEvYTtyZXR1cm4gS2UuZWxlbWVudHNbMF0qPWMsS2UuZWxlbWVudHNbMV0qPWMsS2UuZWxlbWVudHNbMl0qPWMsS2UuZWxlbWVudHNbNF0qPXUsS2UuZWxlbWVudHNbNV0qPXUsS2UuZWxlbWVudHNbNl0qPXUsS2UuZWxlbWVudHNbOF0qPWgsS2UuZWxlbWVudHNbOV0qPWgsS2UuZWxlbWVudHNbMTBdKj1oLGUuc2V0RnJvbVJvdGF0aW9uTWF0cml4KEtlKSxpLng9cyxpLnk9byxpLno9YSx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LGUsaSxyLHMsbyl7bz09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IGE9dGhpcy5lbGVtZW50cyxsPTIqcy8oZS10KSxjPTIqcy8oaS1yKSx1PShlK3QpLyhlLXQpLGg9KGkrcikvKGktciksZj0tKG8rcykvKG8tcyksZD0tMipvKnMvKG8tcyk7cmV0dXJuIGFbMF09bCxhWzRdPTAsYVs4XT11LGFbMTJdPTAsYVsxXT0wLGFbNV09YyxhWzldPWgsYVsxM109MCxhWzJdPTAsYVs2XT0wLGFbMTBdPWYsYVsxNF09ZCxhWzNdPTAsYVs3XT0wLGFbMTFdPS0xLGFbMTVdPTAsdGhpc31tYWtlT3J0aG9ncmFwaGljKHQsZSxpLHIscyxvKXtsZXQgYT10aGlzLmVsZW1lbnRzLGw9MS8oZS10KSxjPTEvKGktciksdT0xLyhvLXMpLGg9KGUrdCkqbCxmPShpK3IpKmMsZD0obytzKSp1O3JldHVybiBhWzBdPTIqbCxhWzRdPTAsYVs4XT0wLGFbMTJdPS1oLGFbMV09MCxhWzVdPTIqYyxhWzldPTAsYVsxM109LWYsYVsyXT0wLGFbNl09MCxhWzEwXT0tMip1LGFbMTRdPS1kLGFbM109MCxhWzddPTAsYVsxMV09MCxhWzE1XT0xLHRoaXN9ZXF1YWxzKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO2ZvcihsZXQgcj0wO3I8MTY7cisrKWlmKGVbcl0hPT1pW3JdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBpPTA7aTwxNjtpKyspdGhpcy5lbGVtZW50c1tpXT10W2krZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gdFtlXT1pWzBdLHRbZSsxXT1pWzFdLHRbZSsyXT1pWzJdLHRbZSszXT1pWzNdLHRbZSs0XT1pWzRdLHRbZSs1XT1pWzVdLHRbZSs2XT1pWzZdLHRbZSs3XT1pWzddLHRbZSs4XT1pWzhdLHRbZSs5XT1pWzldLHRbZSsxMF09aVsxMF0sdFtlKzExXT1pWzExXSx0W2UrMTJdPWlbMTJdLHRbZSsxM109aVsxM10sdFtlKzE0XT1pWzE0XSx0W2UrMTVdPWlbMTVdLHR9fTt3dC5wcm90b3R5cGUuaXNNYXRyaXg0PSEwO3ZhciB5cj1uZXcgVCxLZT1uZXcgd3Qsc009bmV3IFQoMCwwLDApLG9NPW5ldyBUKDEsMSwxKSxabj1uZXcgVCxFYT1uZXcgVCxrZT1uZXcgVCxvZz1uZXcgd3QsYWc9bmV3IEVlLGFpPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHI9YWkuRGVmYXVsdE9yZGVyKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl9vcmRlcj1yfWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCBvcmRlcigpe3JldHVybiB0aGlzLl9vcmRlcn1zZXQgb3JkZXIodCl7dGhpcy5fb3JkZXI9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxpLHI9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl9vcmRlcj1yLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX29yZGVyKX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQuX3gsdGhpcy5feT10Ll95LHRoaXMuX3o9dC5feix0aGlzLl9vcmRlcj10Ll9vcmRlcix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCxlPXRoaXMuX29yZGVyLGk9ITApe2xldCByPXQuZWxlbWVudHMscz1yWzBdLG89cls0XSxhPXJbOF0sbD1yWzFdLGM9cls1XSx1PXJbOV0saD1yWzJdLGY9cls2XSxkPXJbMTBdO3N3aXRjaChlKXtjYXNlIlhZWiI6dGhpcy5feT1NYXRoLmFzaW4oSWUoYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxkKSx0aGlzLl96PU1hdGguYXRhbjIoLW8scykpOih0aGlzLl94PU1hdGguYXRhbjIoZixjKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PU1hdGguYXNpbigtSWUodSwtMSwxKSksTWF0aC5hYnModSk8Ljk5OTk5OTk/KHRoaXMuX3k9TWF0aC5hdGFuMihhLGQpLHRoaXMuX3o9TWF0aC5hdGFuMihsLGMpKToodGhpcy5feT1NYXRoLmF0YW4yKC1oLHMpLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9TWF0aC5hc2luKEllKGYsLTEsMSkpLE1hdGguYWJzKGYpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoLWgsZCksdGhpcy5fej1NYXRoLmF0YW4yKC1vLGMpKToodGhpcy5feT0wLHRoaXMuX3o9TWF0aC5hdGFuMihsLHMpKTticmVhaztjYXNlIlpZWCI6dGhpcy5feT1NYXRoLmFzaW4oLUllKGgsLTEsMSkpLE1hdGguYWJzKGgpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoZixkKSx0aGlzLl96PU1hdGguYXRhbjIobCxzKSk6KHRoaXMuX3g9MCx0aGlzLl96PU1hdGguYXRhbjIoLW8sYykpO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl96PU1hdGguYXNpbihJZShsLC0xLDEpKSxNYXRoLmFicyhsKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC11LGMpLHRoaXMuX3k9TWF0aC5hdGFuMigtaCxzKSk6KHRoaXMuX3g9MCx0aGlzLl95PU1hdGguYXRhbjIoYSxkKSk7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3o9TWF0aC5hc2luKC1JZShvLC0xLDEpKSxNYXRoLmFicyhvKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5feT1NYXRoLmF0YW4yKGEscykpOih0aGlzLl94PU1hdGguYXRhbjIoLXUsZCksdGhpcy5feT0wKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuRXVsZXI6IC5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2UpfXJldHVybiB0aGlzLl9vcmRlcj1lLGk9PT0hMCYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVF1YXRlcm5pb24odCxlLGkpe3JldHVybiBvZy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLnNldEZyb21Sb3RhdGlvbk1hdHJpeChvZyxlLGkpfXNldEZyb21WZWN0b3IzKHQsZT10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuc2V0KHQueCx0LnksdC56LGUpfXJlb3JkZXIodCl7cmV0dXJuIGFnLnNldEZyb21FdWxlcih0aGlzKSx0aGlzLnNldEZyb21RdWF0ZXJuaW9uKGFnLHQpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fb3JkZXI9PT10aGlzLl9vcmRlcn1mcm9tQXJyYXkodCl7cmV0dXJuIHRoaXMuX3g9dFswXSx0aGlzLl95PXRbMV0sdGhpcy5fej10WzJdLHRbM10hPT12b2lkIDAmJih0aGlzLl9vcmRlcj10WzNdKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl9vcmRlcix0fXRvVmVjdG9yMyh0KXtyZXR1cm4gdD90LnNldCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feik6bmV3IFQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fTthaS5wcm90b3R5cGUuaXNFdWxlcj0hMDthaS5EZWZhdWx0T3JkZXI9IlhZWiI7YWkuUm90YXRpb25PcmRlcnM9WyJYWVoiLCJZWlgiLCJaWFkiLCJYWlkiLCJZWFoiLCJaWVgiXTt2YXIgaWw9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm1hc2s9MX1zZXQodCl7dGhpcy5tYXNrPSgxPDx0fDApPj4+MH1lbmFibGUodCl7dGhpcy5tYXNrfD0xPDx0fDB9ZW5hYmxlQWxsKCl7dGhpcy5tYXNrPS0xfXRvZ2dsZSh0KXt0aGlzLm1hc2tePTE8PHR8MH1kaXNhYmxlKHQpe3RoaXMubWFzayY9figxPDx0fDApfWRpc2FibGVBbGwoKXt0aGlzLm1hc2s9MH10ZXN0KHQpe3JldHVybih0aGlzLm1hc2smdC5tYXNrKSE9PTB9aXNFbmFibGVkKHQpe3JldHVybih0aGlzLm1hc2smKDE8PHR8MCkpIT09MH19LGFNPTAsbGc9bmV3IFQsdnI9bmV3IEVlLFJuPW5ldyB3dCxUYT1uZXcgVCxIcz1uZXcgVCxsTT1uZXcgVCxjTT1uZXcgRWUsY2c9bmV3IFQoMSwwLDApLHVnPW5ldyBUKDAsMSwwKSxoZz1uZXcgVCgwLDAsMSksdU09e3R5cGU6ImFkZGVkIn0sZmc9e3R5cGU6InJlbW92ZWQifSxrdD1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTphTSsrfSksdGhpcy51dWlkPXRuKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPWt0LkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyBULGU9bmV3IGFpLGk9bmV3IEVlLHI9bmV3IFQoMSwxLDEpO2Z1bmN0aW9uIHMoKXtpLnNldEZyb21FdWxlcihlLCExKX1mdW5jdGlvbiBvKCl7ZS5zZXRGcm9tUXVhdGVybmlvbihpLHZvaWQgMCwhMSl9ZS5fb25DaGFuZ2UocyksaS5fb25DaGFuZ2UobyksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTplfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTppfSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cn0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgd3R9LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IGRlfX0pLHRoaXMubWF0cml4PW5ldyB3dCx0aGlzLm1hdHJpeFdvcmxkPW5ldyB3dCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9a3QuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHRoaXMubGF5ZXJzPW5ldyBpbCx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fW9uQmVmb3JlUmVuZGVyKCl7fW9uQWZ0ZXJSZW5kZXIoKXt9YXBwbHlNYXRyaXg0KHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc31zZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUodCxlKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0LGUpfXNldFJvdGF0aW9uRnJvbUV1bGVyKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9c2V0Um90YXRpb25Gcm9tTWF0cml4KHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbih0KXt0aGlzLnF1YXRlcm5pb24uY29weSh0KX1yb3RhdGVPbkF4aXModCxlKXtyZXR1cm4gdnIuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseSh2ciksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LGUpe3JldHVybiB2ci5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHZyKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGNnLHQpfXJvdGF0ZVkodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKHVnLHQpfXJvdGF0ZVoodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGhnLHQpfXRyYW5zbGF0ZU9uQXhpcyh0LGUpe3JldHVybiBsZy5jb3B5KHQpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pLHRoaXMucG9zaXRpb24uYWRkKGxnLm11bHRpcGx5U2NhbGFyKGUpKSx0aGlzfXRyYW5zbGF0ZVgodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGNnLHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHVnLHQpfXRyYW5zbGF0ZVoodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGhnLHQpfWxvY2FsVG9Xb3JsZCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCl9d29ybGRUb0xvY2FsKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NChSbi5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpKX1sb29rQXQodCxlLGkpe3QuaXNWZWN0b3IzP1RhLmNvcHkodCk6VGEuc2V0KHQsZSxpKTtsZXQgcj10aGlzLnBhcmVudDt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxIcy5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCksdGhpcy5pc0NhbWVyYXx8dGhpcy5pc0xpZ2h0P1JuLmxvb2tBdChIcyxUYSx0aGlzLnVwKTpSbi5sb29rQXQoVGEsSHMsdGhpcy51cCksdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChSbiksciYmKFJuLmV4dHJhY3RSb3RhdGlvbihyLm1hdHJpeFdvcmxkKSx2ci5zZXRGcm9tUm90YXRpb25NYXRyaXgoUm4pLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh2ci5pbnZlcnQoKSkpfWFkZCh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdGhpcy5hZGQoYXJndW1lbnRzW2VdKTtyZXR1cm4gdGhpc31yZXR1cm4gdD09PXRoaXM/KGNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IGNhbid0IGJlIGFkZGVkIGFzIGEgY2hpbGQgb2YgaXRzZWxmLiIsdCksdGhpcyk6KHQmJnQuaXNPYmplY3QzRD8odC5wYXJlbnQhPT1udWxsJiZ0LnBhcmVudC5yZW1vdmUodCksdC5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcmVuLnB1c2godCksdC5kaXNwYXRjaEV2ZW50KHVNKSk6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk9iamVjdDNELiIsdCksdGhpcyl9cmVtb3ZlKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbaV0pO3JldHVybiB0aGlzfWxldCBlPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyZXR1cm4gZSE9PS0xJiYodC5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuLnNwbGljZShlLDEpLHQuZGlzcGF0Y2hFdmVudChmZykpLHRoaXN9cmVtb3ZlRnJvbVBhcmVudCgpe2xldCB0PXRoaXMucGFyZW50O3JldHVybiB0IT09bnVsbCYmdC5yZW1vdmUodGhpcyksdGhpc31jbGVhcigpe2ZvcihsZXQgdD0wO3Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7dCsrKXtsZXQgZT10aGlzLmNoaWxkcmVuW3RdO2UucGFyZW50PW51bGwsZS5kaXNwYXRjaEV2ZW50KGZnKX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzfWF0dGFjaCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksUm4uY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSx0LnBhcmVudCE9PW51bGwmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksUm4ubXVsdGlwbHkodC5wYXJlbnQubWF0cml4V29ybGQpKSx0LmFwcGx5TWF0cml4NChSbiksdGhpcy5hZGQodCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCksdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpe2lmKHRoaXNbdF09PT1lKXJldHVybiB0aGlzO2ZvcihsZXQgaT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aTxyO2krKyl7bGV0IG89dGhpcy5jaGlsZHJlbltpXS5nZXRPYmplY3RCeVByb3BlcnR5KHQsZSk7aWYobyE9PXZvaWQgMClyZXR1cm4gb319Z2V0V29ybGRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9Z2V0V29ybGRRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShIcyx0LGxNKSx0fWdldFdvcmxkU2NhbGUodCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKEhzLGNNLHQpLHR9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoZVs4XSxlWzldLGVbMTBdKS5ub3JtYWxpemUoKX1yYXljYXN0KCl7fXRyYXZlcnNlKHQpe3QodGhpcyk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS50cmF2ZXJzZSh0KX10cmF2ZXJzZVZpc2libGUodCl7aWYodGhpcy52aXNpYmxlPT09ITEpcmV0dXJuO3QodGhpcyk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS50cmF2ZXJzZVZpc2libGUodCl9dHJhdmVyc2VBbmNlc3RvcnModCl7bGV0IGU9dGhpcy5wYXJlbnQ7ZSE9PW51bGwmJih0KGUpLGUudHJhdmVyc2VBbmNlc3RvcnModCkpfXVwZGF0ZU1hdHJpeCgpe3RoaXMubWF0cml4LmNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSwodGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlfHx0KSYmKHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHQ9ITApO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udXBkYXRlTWF0cml4V29ybGQodCl9dXBkYXRlV29ybGRNYXRyaXgodCxlKXtsZXQgaT10aGlzLnBhcmVudDtpZih0PT09ITAmJmkhPT1udWxsJiZpLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5wYXJlbnQ9PT1udWxsP3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSxlPT09ITApe2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXJbc10udXBkYXRlV29ybGRNYXRyaXgoITEsITApfX10b0pTT04odCl7bGV0IGU9dD09PXZvaWQgMHx8dHlwZW9mIHQ9PSJzdHJpbmciLGk9e307ZSYmKHQ9e2dlb21ldHJpZXM6e30sbWF0ZXJpYWxzOnt9LHRleHR1cmVzOnt9LGltYWdlczp7fSxzaGFwZXM6e30sc2tlbGV0b25zOnt9LGFuaW1hdGlvbnM6e319LGkubWV0YWRhdGE9e3ZlcnNpb246NC41LHR5cGU6Ik9iamVjdCIsZ2VuZXJhdG9yOiJPYmplY3QzRC50b0pTT04ifSk7bGV0IHI9e307ci51dWlkPXRoaXMudXVpZCxyLnR5cGU9dGhpcy50eXBlLHRoaXMubmFtZSE9PSIiJiYoci5uYW1lPXRoaXMubmFtZSksdGhpcy5jYXN0U2hhZG93PT09ITAmJihyLmNhc3RTaGFkb3c9ITApLHRoaXMucmVjZWl2ZVNoYWRvdz09PSEwJiYoci5yZWNlaXZlU2hhZG93PSEwKSx0aGlzLnZpc2libGU9PT0hMSYmKHIudmlzaWJsZT0hMSksdGhpcy5mcnVzdHVtQ3VsbGVkPT09ITEmJihyLmZydXN0dW1DdWxsZWQ9ITEpLHRoaXMucmVuZGVyT3JkZXIhPT0wJiYoci5yZW5kZXJPcmRlcj10aGlzLnJlbmRlck9yZGVyKSxKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihyLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLHIubGF5ZXJzPXRoaXMubGF5ZXJzLm1hc2ssci5tYXRyaXg9dGhpcy5tYXRyaXgudG9BcnJheSgpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT09PSExJiYoci5tYXRyaXhBdXRvVXBkYXRlPSExKSx0aGlzLmlzSW5zdGFuY2VkTWVzaCYmKHIudHlwZT0iSW5zdGFuY2VkTWVzaCIsci5jb3VudD10aGlzLmNvdW50LHIuaW5zdGFuY2VNYXRyaXg9dGhpcy5pbnN0YW5jZU1hdHJpeC50b0pTT04oKSx0aGlzLmluc3RhbmNlQ29sb3IhPT1udWxsJiYoci5pbnN0YW5jZUNvbG9yPXRoaXMuaW5zdGFuY2VDb2xvci50b0pTT04oKSkpO2Z1bmN0aW9uIHMoYSxsKXtyZXR1cm4gYVtsLnV1aWRdPT09dm9pZCAwJiYoYVtsLnV1aWRdPWwudG9KU09OKHQpKSxsLnV1aWR9aWYodGhpcy5pc1NjZW5lKXRoaXMuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZC5pc0NvbG9yP3IuYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmQudG9KU09OKCk6dGhpcy5iYWNrZ3JvdW5kLmlzVGV4dHVyZSYmKHIuYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmQudG9KU09OKHQpLnV1aWQpKSx0aGlzLmVudmlyb25tZW50JiZ0aGlzLmVudmlyb25tZW50LmlzVGV4dHVyZSYmKHIuZW52aXJvbm1lbnQ9dGhpcy5lbnZpcm9ubWVudC50b0pTT04odCkudXVpZCk7ZWxzZSBpZih0aGlzLmlzTWVzaHx8dGhpcy5pc0xpbmV8fHRoaXMuaXNQb2ludHMpe3IuZ2VvbWV0cnk9cyh0Lmdlb21ldHJpZXMsdGhpcy5nZW9tZXRyeSk7bGV0IGE9dGhpcy5nZW9tZXRyeS5wYXJhbWV0ZXJzO2lmKGEhPT12b2lkIDAmJmEuc2hhcGVzIT09dm9pZCAwKXtsZXQgbD1hLnNoYXBlcztpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgYz0wLHU9bC5sZW5ndGg7Yzx1O2MrKyl7bGV0IGg9bFtjXTtzKHQuc2hhcGVzLGgpfWVsc2Ugcyh0LnNoYXBlcyxsKX19aWYodGhpcy5pc1NraW5uZWRNZXNoJiYoci5iaW5kTW9kZT10aGlzLmJpbmRNb2RlLHIuYmluZE1hdHJpeD10aGlzLmJpbmRNYXRyaXgudG9BcnJheSgpLHRoaXMuc2tlbGV0b24hPT12b2lkIDAmJihzKHQuc2tlbGV0b25zLHRoaXMuc2tlbGV0b24pLHIuc2tlbGV0b249dGhpcy5za2VsZXRvbi51dWlkKSksdGhpcy5tYXRlcmlhbCE9PXZvaWQgMClpZihBcnJheS5pc0FycmF5KHRoaXMubWF0ZXJpYWwpKXtsZXQgYT1bXTtmb3IobGV0IGw9MCxjPXRoaXMubWF0ZXJpYWwubGVuZ3RoO2w8YztsKyspYS5wdXNoKHModC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbFtsXSkpO3IubWF0ZXJpYWw9YX1lbHNlIHIubWF0ZXJpYWw9cyh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsKTtpZih0aGlzLmNoaWxkcmVuLmxlbmd0aD4wKXtyLmNoaWxkcmVuPVtdO2ZvcihsZXQgYT0wO2E8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YSsrKXIuY2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2FdLnRvSlNPTih0KS5vYmplY3QpfWlmKHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg+MCl7ci5hbmltYXRpb25zPVtdO2ZvcihsZXQgYT0wO2E8dGhpcy5hbmltYXRpb25zLmxlbmd0aDthKyspe2xldCBsPXRoaXMuYW5pbWF0aW9uc1thXTtyLmFuaW1hdGlvbnMucHVzaChzKHQuYW5pbWF0aW9ucyxsKSl9fWlmKGUpe2xldCBhPW8odC5nZW9tZXRyaWVzKSxsPW8odC5tYXRlcmlhbHMpLGM9byh0LnRleHR1cmVzKSx1PW8odC5pbWFnZXMpLGg9byh0LnNoYXBlcyksZj1vKHQuc2tlbGV0b25zKSxkPW8odC5hbmltYXRpb25zKTthLmxlbmd0aD4wJiYoaS5nZW9tZXRyaWVzPWEpLGwubGVuZ3RoPjAmJihpLm1hdGVyaWFscz1sKSxjLmxlbmd0aD4wJiYoaS50ZXh0dXJlcz1jKSx1Lmxlbmd0aD4wJiYoaS5pbWFnZXM9dSksaC5sZW5ndGg+MCYmKGkuc2hhcGVzPWgpLGYubGVuZ3RoPjAmJihpLnNrZWxldG9ucz1mKSxkLmxlbmd0aD4wJiYoaS5hbmltYXRpb25zPWQpfXJldHVybiBpLm9iamVjdD1yLGk7ZnVuY3Rpb24gbyhhKXtsZXQgbD1bXTtmb3IobGV0IGMgaW4gYSl7bGV0IHU9YVtjXTtkZWxldGUgdS5tZXRhZGF0YSxsLnB1c2godSl9cmV0dXJuIGx9fWNsb25lKHQpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyx0KX1jb3B5KHQsZT0hMCl7aWYodGhpcy5uYW1lPXQubmFtZSx0aGlzLnVwLmNvcHkodC51cCksdGhpcy5wb3NpdGlvbi5jb3B5KHQucG9zaXRpb24pLHRoaXMucm90YXRpb24ub3JkZXI9dC5yb3RhdGlvbi5vcmRlcix0aGlzLnF1YXRlcm5pb24uY29weSh0LnF1YXRlcm5pb24pLHRoaXMuc2NhbGUuY29weSh0LnNjYWxlKSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCksdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlLHRoaXMubGF5ZXJzLm1hc2s9dC5sYXllcnMubWFzayx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMuY2FzdFNoYWRvdz10LmNhc3RTaGFkb3csdGhpcy5yZWNlaXZlU2hhZG93PXQucmVjZWl2ZVNoYWRvdyx0aGlzLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkLHRoaXMucmVuZGVyT3JkZXI9dC5yZW5kZXJPcmRlcix0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLGU9PT0hMClmb3IobGV0IGk9MDtpPHQuY2hpbGRyZW4ubGVuZ3RoO2krKyl7bGV0IHI9dC5jaGlsZHJlbltpXTt0aGlzLmFkZChyLmNsb25lKCkpfXJldHVybiB0aGlzfX07a3QuRGVmYXVsdFVwPW5ldyBUKDAsMSwwKTtrdC5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMDtrdC5wcm90b3R5cGUuaXNPYmplY3QzRD0hMDt2YXIgUWU9bmV3IFQsTG49bmV3IFQsbXU9bmV3IFQsUG49bmV3IFQsX3I9bmV3IFQsd3I9bmV3IFQsZGc9bmV3IFQsZ3U9bmV3IFQseHU9bmV3IFQseXU9bmV3IFQscmU9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgVCxlPW5ldyBULGk9bmV3IFQpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1pfXN0YXRpYyBnZXROb3JtYWwodCxlLGkscil7ci5zdWJWZWN0b3JzKGksZSksUWUuc3ViVmVjdG9ycyh0LGUpLHIuY3Jvc3MoUWUpO2xldCBzPXIubGVuZ3RoU3EoKTtyZXR1cm4gcz4wP3IubXVsdGlwbHlTY2FsYXIoMS9NYXRoLnNxcnQocykpOnIuc2V0KDAsMCwwKX1zdGF0aWMgZ2V0QmFyeWNvb3JkKHQsZSxpLHIscyl7UWUuc3ViVmVjdG9ycyhyLGUpLExuLnN1YlZlY3RvcnMoaSxlKSxtdS5zdWJWZWN0b3JzKHQsZSk7bGV0IG89UWUuZG90KFFlKSxhPVFlLmRvdChMbiksbD1RZS5kb3QobXUpLGM9TG4uZG90KExuKSx1PUxuLmRvdChtdSksaD1vKmMtYSphO2lmKGg9PT0wKXJldHVybiBzLnNldCgtMiwtMSwtMSk7bGV0IGY9MS9oLGQ9KGMqbC1hKnUpKmYsZz0obyp1LWEqbCkqZjtyZXR1cm4gcy5zZXQoMS1kLWcsZyxkKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LGUsaSxyKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscixQbiksUG4ueD49MCYmUG4ueT49MCYmUG4ueCtQbi55PD0xfXN0YXRpYyBnZXRVVih0LGUsaSxyLHMsbyxhLGwpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LGUsaSxyLFBuKSxsLnNldCgwLDApLGwuYWRkU2NhbGVkVmVjdG9yKHMsUG4ueCksbC5hZGRTY2FsZWRWZWN0b3IobyxQbi55KSxsLmFkZFNjYWxlZFZlY3RvcihhLFBuLnopLGx9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxlLGkscil7cmV0dXJuIFFlLnN1YlZlY3RvcnMoaSxlKSxMbi5zdWJWZWN0b3JzKHQsZSksUWUuY3Jvc3MoTG4pLmRvdChyKTwwfXNldCh0LGUsaSl7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KGUpLHRoaXMuYy5jb3B5KGkpLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxlLGkscil7cmV0dXJuIHRoaXMuYS5jb3B5KHRbZV0pLHRoaXMuYi5jb3B5KHRbaV0pLHRoaXMuYy5jb3B5KHRbcl0pLHRoaXN9c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXModCxlLGkscil7cmV0dXJuIHRoaXMuYS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksdGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxpKSx0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBRZS5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLExuLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYiksUWUuY3Jvc3MoTG4pLmxlbmd0aCgpKi41fWdldE1pZHBvaW50KHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5hLHRoaXMuYikuYWRkKHRoaXMuYykubXVsdGlwbHlTY2FsYXIoMS8zKX1nZXROb3JtYWwodCl7cmV0dXJuIHJlLmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LGUpe3JldHVybiByZS5nZXRCYXJ5Y29vcmQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlKX1nZXRVVih0LGUsaSxyLHMpe3JldHVybiByZS5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUsaSxyLHMpfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHJlLmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gcmUuaXNGcm9udEZhY2luZyh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX1jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSl7bGV0IGk9dGhpcy5hLHI9dGhpcy5iLHM9dGhpcy5jLG8sYTtfci5zdWJWZWN0b3JzKHIsaSksd3Iuc3ViVmVjdG9ycyhzLGkpLGd1LnN1YlZlY3RvcnModCxpKTtsZXQgbD1fci5kb3QoZ3UpLGM9d3IuZG90KGd1KTtpZihsPD0wJiZjPD0wKXJldHVybiBlLmNvcHkoaSk7eHUuc3ViVmVjdG9ycyh0LHIpO2xldCB1PV9yLmRvdCh4dSksaD13ci5kb3QoeHUpO2lmKHU+PTAmJmg8PXUpcmV0dXJuIGUuY29weShyKTtsZXQgZj1sKmgtdSpjO2lmKGY8PTAmJmw+PTAmJnU8PTApcmV0dXJuIG89bC8obC11KSxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKF9yLG8pO3l1LnN1YlZlY3RvcnModCxzKTtsZXQgZD1fci5kb3QoeXUpLGc9d3IuZG90KHl1KTtpZihnPj0wJiZkPD1nKXJldHVybiBlLmNvcHkocyk7bGV0IHg9ZCpjLWwqZztpZih4PD0wJiZjPj0wJiZnPD0wKXJldHVybiBhPWMvKGMtZyksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3Rvcih3cixhKTtsZXQgdj11KmctZCpoO2lmKHY8PTAmJmgtdT49MCYmZC1nPj0wKXJldHVybiBkZy5zdWJWZWN0b3JzKHMsciksYT0oaC11KS8oaC11KyhkLWcpKSxlLmNvcHkocikuYWRkU2NhbGVkVmVjdG9yKGRnLGEpO2xldCBtPTEvKHYreCtmKTtyZXR1cm4gbz14Km0sYT1mKm0sZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihfcixvKS5hZGRTY2FsZWRWZWN0b3Iod3IsYSl9ZXF1YWxzKHQpe3JldHVybiB0LmEuZXF1YWxzKHRoaXMuYSkmJnQuYi5lcXVhbHModGhpcy5iKSYmdC5jLmVxdWFscyh0aGlzLmMpfX0saE09MCx4ZT1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpoTSsrfSksdGhpcy51dWlkPXRuKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iTWF0ZXJpYWwiLHRoaXMuZm9nPSEwLHRoaXMuYmxlbmRpbmc9S3MsdGhpcy5zaWRlPWVvLHRoaXMudmVydGV4Q29sb3JzPSExLHRoaXMub3BhY2l0eT0xLHRoaXMudHJhbnNwYXJlbnQ9ITEsdGhpcy5ibGVuZFNyYz11MCx0aGlzLmJsZW5kRHN0PWgwLHRoaXMuYmxlbmRFcXVhdGlvbj1Jcix0aGlzLmJsZW5kU3JjQWxwaGE9bnVsbCx0aGlzLmJsZW5kRHN0QWxwaGE9bnVsbCx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1udWxsLHRoaXMuZGVwdGhGdW5jPXp1LHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9dE0sdGhpcy5zdGVuY2lsUmVmPTAsdGhpcy5zdGVuY2lsRnVuY01hc2s9MjU1LHRoaXMuc3RlbmNpbEZhaWw9bnUsdGhpcy5zdGVuY2lsWkZhaWw9bnUsdGhpcy5zdGVuY2lsWlBhc3M9bnUsdGhpcy5zdGVuY2lsV3JpdGU9ITEsdGhpcy5jbGlwcGluZ1BsYW5lcz1udWxsLHRoaXMuY2xpcEludGVyc2VjdGlvbj0hMSx0aGlzLmNsaXBTaGFkb3dzPSExLHRoaXMuc2hhZG93U2lkZT1udWxsLHRoaXMuY29sb3JXcml0ZT0hMCx0aGlzLmFscGhhV3JpdGU9ITAsdGhpcy5wcmVjaXNpb249bnVsbCx0aGlzLnBvbHlnb25PZmZzZXQ9ITEsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPTAsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9MCx0aGlzLmRpdGhlcmluZz0hMSx0aGlzLmFscGhhVG9Db3ZlcmFnZT0hMSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT0hMSx0aGlzLnZpc2libGU9ITAsdGhpcy50b25lTWFwcGVkPSEwLHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5fYWxwaGFUZXN0PTB9Z2V0IGFscGhhVGVzdCgpe3JldHVybiB0aGlzLl9hbHBoYVRlc3R9c2V0IGFscGhhVGVzdCh0KXt0aGlzLl9hbHBoYVRlc3Q+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9hbHBoYVRlc3Q9dH1vbkJ1aWxkKCl7fW9uQmVmb3JlUmVuZGVyKCl7fW9uQmVmb3JlQ29tcGlsZSgpe31jdXN0b21Qcm9ncmFtQ2FjaGVLZXkoKXtyZXR1cm4gdGhpcy5vbkJlZm9yZUNvbXBpbGUudG9TdHJpbmcoKX1zZXRWYWx1ZXModCl7aWYodCE9PXZvaWQgMClmb3IobGV0IGUgaW4gdCl7bGV0IGk9dFtlXTtpZihpPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAnIitlKyInIHBhcmFtZXRlciBpcyB1bmRlZmluZWQuIik7Y29udGludWV9aWYoZT09PSJzaGFkaW5nIil7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIiksdGhpcy5mbGF0U2hhZGluZz1pPT09YzA7Y29udGludWV9bGV0IHI9dGhpc1tlXTtpZihyPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6ICciK2UrIicgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4iKTtjb250aW51ZX1yJiZyLmlzQ29sb3I/ci5zZXQoaSk6ciYmci5pc1ZlY3RvcjMmJmkmJmkuaXNWZWN0b3IzP3IuY29weShpKTp0aGlzW2VdPWl9fXRvSlNPTih0KXtsZXQgZT10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7ZSYmKHQ9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiTWF0ZXJpYWwiLGdlbmVyYXRvcjoiTWF0ZXJpYWwudG9KU09OIn19O2kudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY29sb3ImJnRoaXMuY29sb3IuaXNDb2xvciYmKGkuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSksdGhpcy5yb3VnaG5lc3MhPT12b2lkIDAmJihpLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyksdGhpcy5tZXRhbG5lc3MhPT12b2lkIDAmJihpLm1ldGFsbmVzcz10aGlzLm1ldGFsbmVzcyksdGhpcy5zaGVlbiE9PXZvaWQgMCYmKGkuc2hlZW49dGhpcy5zaGVlbiksdGhpcy5zaGVlbkNvbG9yJiZ0aGlzLnNoZWVuQ29sb3IuaXNDb2xvciYmKGkuc2hlZW5Db2xvcj10aGlzLnNoZWVuQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2hlZW5Sb3VnaG5lc3MhPT12b2lkIDAmJihpLnNoZWVuUm91Z2huZXNzPXRoaXMuc2hlZW5Sb3VnaG5lc3MpLHRoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKGkuZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmdGhpcy5lbWlzc2l2ZUludGVuc2l0eSE9PTEmJihpLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKGkuc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSksdGhpcy5zcGVjdWxhckludGVuc2l0eSE9PXZvaWQgMCYmKGkuc3BlY3VsYXJJbnRlbnNpdHk9dGhpcy5zcGVjdWxhckludGVuc2l0eSksdGhpcy5zcGVjdWxhckNvbG9yJiZ0aGlzLnNwZWN1bGFyQ29sb3IuaXNDb2xvciYmKGkuc3BlY3VsYXJDb2xvcj10aGlzLnNwZWN1bGFyQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2hpbmluZXNzIT09dm9pZCAwJiYoaS5zaGluaW5lc3M9dGhpcy5zaGluaW5lc3MpLHRoaXMuY2xlYXJjb2F0IT09dm9pZCAwJiYoaS5jbGVhcmNvYXQ9dGhpcy5jbGVhcmNvYXQpLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MpLHRoaXMuY2xlYXJjb2F0TWFwJiZ0aGlzLmNsZWFyY29hdE1hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdE1hcD10aGlzLmNsZWFyY29hdE1hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCYmdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXROb3JtYWxNYXA9dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAudG9KU09OKHQpLnV1aWQsaS5jbGVhcmNvYXROb3JtYWxTY2FsZT10aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5tYXAmJnRoaXMubWFwLmlzVGV4dHVyZSYmKGkubWFwPXRoaXMubWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1hdGNhcCYmdGhpcy5tYXRjYXAuaXNUZXh0dXJlJiYoaS5tYXRjYXA9dGhpcy5tYXRjYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYWxwaGFNYXAmJnRoaXMuYWxwaGFNYXAuaXNUZXh0dXJlJiYoaS5hbHBoYU1hcD10aGlzLmFscGhhTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmxpZ2h0TWFwJiZ0aGlzLmxpZ2h0TWFwLmlzVGV4dHVyZSYmKGkubGlnaHRNYXA9dGhpcy5saWdodE1hcC50b0pTT04odCkudXVpZCxpLmxpZ2h0TWFwSW50ZW5zaXR5PXRoaXMubGlnaHRNYXBJbnRlbnNpdHkpLHRoaXMuYW9NYXAmJnRoaXMuYW9NYXAuaXNUZXh0dXJlJiYoaS5hb01hcD10aGlzLmFvTWFwLnRvSlNPTih0KS51dWlkLGkuYW9NYXBJbnRlbnNpdHk9dGhpcy5hb01hcEludGVuc2l0eSksdGhpcy5idW1wTWFwJiZ0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlJiYoaS5idW1wTWFwPXRoaXMuYnVtcE1hcC50b0pTT04odCkudXVpZCxpLmJ1bXBTY2FsZT10aGlzLmJ1bXBTY2FsZSksdGhpcy5ub3JtYWxNYXAmJnRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSYmKGkubm9ybWFsTWFwPXRoaXMubm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLGkubm9ybWFsTWFwVHlwZT10aGlzLm5vcm1hbE1hcFR5cGUsaS5ub3JtYWxTY2FsZT10aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5kaXNwbGFjZW1lbnRNYXAmJnRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSYmKGkuZGlzcGxhY2VtZW50TWFwPXRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTih0KS51dWlkLGkuZGlzcGxhY2VtZW50U2NhbGU9dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSxpLmRpc3BsYWNlbWVudEJpYXM9dGhpcy5kaXNwbGFjZW1lbnRCaWFzKSx0aGlzLnJvdWdobmVzc01hcCYmdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihpLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihpLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZ0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckNvbG9yTWFwJiZ0aGlzLnNwZWN1bGFyQ29sb3JNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhckNvbG9yTWFwPXRoaXMuc3BlY3VsYXJDb2xvck1hcC50b0pTT04odCkudXVpZCksdGhpcy5lbnZNYXAmJnRoaXMuZW52TWFwLmlzVGV4dHVyZSYmKGkuZW52TWFwPXRoaXMuZW52TWFwLnRvSlNPTih0KS51dWlkLHRoaXMuY29tYmluZSE9PXZvaWQgMCYmKGkuY29tYmluZT10aGlzLmNvbWJpbmUpKSx0aGlzLmVudk1hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkuZW52TWFwSW50ZW5zaXR5PXRoaXMuZW52TWFwSW50ZW5zaXR5KSx0aGlzLnJlZmxlY3Rpdml0eSE9PXZvaWQgMCYmKGkucmVmbGVjdGl2aXR5PXRoaXMucmVmbGVjdGl2aXR5KSx0aGlzLnJlZnJhY3Rpb25SYXRpbyE9PXZvaWQgMCYmKGkucmVmcmFjdGlvblJhdGlvPXRoaXMucmVmcmFjdGlvblJhdGlvKSx0aGlzLmdyYWRpZW50TWFwJiZ0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSYmKGkuZ3JhZGllbnRNYXA9dGhpcy5ncmFkaWVudE1hcC50b0pTT04odCkudXVpZCksdGhpcy50cmFuc21pc3Npb24hPT12b2lkIDAmJihpLnRyYW5zbWlzc2lvbj10aGlzLnRyYW5zbWlzc2lvbiksdGhpcy50cmFuc21pc3Npb25NYXAmJnRoaXMudHJhbnNtaXNzaW9uTWFwLmlzVGV4dHVyZSYmKGkudHJhbnNtaXNzaW9uTWFwPXRoaXMudHJhbnNtaXNzaW9uTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnRoaWNrbmVzcyE9PXZvaWQgMCYmKGkudGhpY2tuZXNzPXRoaXMudGhpY2tuZXNzKSx0aGlzLnRoaWNrbmVzc01hcCYmdGhpcy50aGlja25lc3NNYXAuaXNUZXh0dXJlJiYoaS50aGlja25lc3NNYXA9dGhpcy50aGlja25lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSE9PXZvaWQgMCYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UpLHRoaXMuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmKGkuYXR0ZW51YXRpb25Db2xvcj10aGlzLmF0dGVudWF0aW9uQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2l6ZSE9PXZvaWQgMCYmKGkuc2l6ZT10aGlzLnNpemUpLHRoaXMuc2hhZG93U2lkZSE9PW51bGwmJihpLnNoYWRvd1NpZGU9dGhpcy5zaGFkb3dTaWRlKSx0aGlzLnNpemVBdHRlbnVhdGlvbiE9PXZvaWQgMCYmKGkuc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKSx0aGlzLmJsZW5kaW5nIT09S3MmJihpLmJsZW5kaW5nPXRoaXMuYmxlbmRpbmcpLHRoaXMuc2lkZSE9PWVvJiYoaS5zaWRlPXRoaXMuc2lkZSksdGhpcy52ZXJ0ZXhDb2xvcnMmJihpLnZlcnRleENvbG9ycz0hMCksdGhpcy5vcGFjaXR5PDEmJihpLm9wYWNpdHk9dGhpcy5vcGFjaXR5KSx0aGlzLnRyYW5zcGFyZW50PT09ITAmJihpLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpLGkuZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jLGkuZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0LGkuZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGUsaS5jb2xvcldyaXRlPXRoaXMuY29sb3JXcml0ZSxpLmFscGhhV3JpdGU9dGhpcy5hbHBoYVdyaXRlLGkuc3RlbmNpbFdyaXRlPXRoaXMuc3RlbmNpbFdyaXRlLGkuc3RlbmNpbFdyaXRlTWFzaz10aGlzLnN0ZW5jaWxXcml0ZU1hc2ssaS5zdGVuY2lsRnVuYz10aGlzLnN0ZW5jaWxGdW5jLGkuc3RlbmNpbFJlZj10aGlzLnN0ZW5jaWxSZWYsaS5zdGVuY2lsRnVuY01hc2s9dGhpcy5zdGVuY2lsRnVuY01hc2ssaS5zdGVuY2lsRmFpbD10aGlzLnN0ZW5jaWxGYWlsLGkuc3RlbmNpbFpGYWlsPXRoaXMuc3RlbmNpbFpGYWlsLGkuc3RlbmNpbFpQYXNzPXRoaXMuc3RlbmNpbFpQYXNzLHRoaXMucm90YXRpb24mJnRoaXMucm90YXRpb24hPT0wJiYoaS5yb3RhdGlvbj10aGlzLnJvdGF0aW9uKSx0aGlzLnBvbHlnb25PZmZzZXQ9PT0hMCYmKGkucG9seWdvbk9mZnNldD0hMCksdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yIT09MCYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IpLHRoaXMucG9seWdvbk9mZnNldFVuaXRzIT09MCYmKGkucG9seWdvbk9mZnNldFVuaXRzPXRoaXMucG9seWdvbk9mZnNldFVuaXRzKSx0aGlzLmxpbmV3aWR0aCYmdGhpcy5saW5ld2lkdGghPT0xJiYoaS5saW5ld2lkdGg9dGhpcy5saW5ld2lkdGgpLHRoaXMuZGFzaFNpemUhPT12b2lkIDAmJihpLmRhc2hTaXplPXRoaXMuZGFzaFNpemUpLHRoaXMuZ2FwU2l6ZSE9PXZvaWQgMCYmKGkuZ2FwU2l6ZT10aGlzLmdhcFNpemUpLHRoaXMuc2NhbGUhPT12b2lkIDAmJihpLnNjYWxlPXRoaXMuc2NhbGUpLHRoaXMuZGl0aGVyaW5nPT09ITAmJihpLmRpdGhlcmluZz0hMCksdGhpcy5hbHBoYVRlc3Q+MCYmKGkuYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KSx0aGlzLmFscGhhVG9Db3ZlcmFnZT09PSEwJiYoaS5hbHBoYVRvQ292ZXJhZ2U9dGhpcy5hbHBoYVRvQ292ZXJhZ2UpLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPT09ITAmJihpLnByZW11bHRpcGxpZWRBbHBoYT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSksdGhpcy53aXJlZnJhbWU9PT0hMCYmKGkud2lyZWZyYW1lPXRoaXMud2lyZWZyYW1lKSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD4xJiYoaS53aXJlZnJhbWVMaW5ld2lkdGg9dGhpcy53aXJlZnJhbWVMaW5ld2lkdGgpLHRoaXMud2lyZWZyYW1lTGluZWNhcCE9PSJyb3VuZCImJihpLndpcmVmcmFtZUxpbmVjYXA9dGhpcy53aXJlZnJhbWVMaW5lY2FwKSx0aGlzLndpcmVmcmFtZUxpbmVqb2luIT09InJvdW5kIiYmKGkud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lam9pbiksdGhpcy5mbGF0U2hhZGluZz09PSEwJiYoaS5mbGF0U2hhZGluZz10aGlzLmZsYXRTaGFkaW5nKSx0aGlzLnZpc2libGU9PT0hMSYmKGkudmlzaWJsZT0hMSksdGhpcy50b25lTWFwcGVkPT09ITEmJihpLnRvbmVNYXBwZWQ9ITEpLEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpIT09Int9IiYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSk7ZnVuY3Rpb24gcihzKXtsZXQgbz1bXTtmb3IobGV0IGEgaW4gcyl7bGV0IGw9c1thXTtkZWxldGUgbC5tZXRhZGF0YSxvLnB1c2gobCl9cmV0dXJuIG99aWYoZSl7bGV0IHM9cih0LnRleHR1cmVzKSxvPXIodC5pbWFnZXMpO3MubGVuZ3RoPjAmJihpLnRleHR1cmVzPXMpLG8ubGVuZ3RoPjAmJihpLmltYWdlcz1vKX1yZXR1cm4gaX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZm9nPXQuZm9nLHRoaXMuYmxlbmRpbmc9dC5ibGVuZGluZyx0aGlzLnNpZGU9dC5zaWRlLHRoaXMudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzLHRoaXMub3BhY2l0eT10Lm9wYWNpdHksdGhpcy50cmFuc3BhcmVudD10LnRyYW5zcGFyZW50LHRoaXMuYmxlbmRTcmM9dC5ibGVuZFNyYyx0aGlzLmJsZW5kRHN0PXQuYmxlbmREc3QsdGhpcy5ibGVuZEVxdWF0aW9uPXQuYmxlbmRFcXVhdGlvbix0aGlzLmJsZW5kU3JjQWxwaGE9dC5ibGVuZFNyY0FscGhhLHRoaXMuYmxlbmREc3RBbHBoYT10LmJsZW5kRHN0QWxwaGEsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9dC5ibGVuZEVxdWF0aW9uQWxwaGEsdGhpcy5kZXB0aEZ1bmM9dC5kZXB0aEZ1bmMsdGhpcy5kZXB0aFRlc3Q9dC5kZXB0aFRlc3QsdGhpcy5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9dC5zdGVuY2lsV3JpdGVNYXNrLHRoaXMuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyx0aGlzLnN0ZW5jaWxSZWY9dC5zdGVuY2lsUmVmLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXQuc3RlbmNpbEZ1bmNNYXNrLHRoaXMuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCx0aGlzLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCx0aGlzLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyx0aGlzLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZTtsZXQgZT10LmNsaXBwaW5nUGxhbmVzLGk9bnVsbDtpZihlIT09bnVsbCl7bGV0IHI9ZS5sZW5ndGg7aT1uZXcgQXJyYXkocik7Zm9yKGxldCBzPTA7cyE9PXI7KytzKWlbc109ZVtzXS5jbG9uZSgpfXJldHVybiB0aGlzLmNsaXBwaW5nUGxhbmVzPWksdGhpcy5jbGlwSW50ZXJzZWN0aW9uPXQuY2xpcEludGVyc2VjdGlvbix0aGlzLmNsaXBTaGFkb3dzPXQuY2xpcFNoYWRvd3MsdGhpcy5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSx0aGlzLmNvbG9yV3JpdGU9dC5jb2xvcldyaXRlLHRoaXMuYWxwaGFXcml0ZT10LmFscGhhV3JpdGUsdGhpcy5wcmVjaXNpb249dC5wcmVjaXNpb24sdGhpcy5wb2x5Z29uT2Zmc2V0PXQucG9seWdvbk9mZnNldCx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9dC5wb2x5Z29uT2Zmc2V0RmFjdG9yLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPXQucG9seWdvbk9mZnNldFVuaXRzLHRoaXMuZGl0aGVyaW5nPXQuZGl0aGVyaW5nLHRoaXMuYWxwaGFUZXN0PXQuYWxwaGFUZXN0LHRoaXMuYWxwaGFUb0NvdmVyYWdlPXQuYWxwaGFUb0NvdmVyYWdlLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPXQucHJlbXVsdGlwbGllZEFscGhhLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy50b25lTWFwcGVkPXQudG9uZU1hcHBlZCx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX1zZXQgbmVlZHNVcGRhdGUodCl7dD09PSEwJiZ0aGlzLnZlcnNpb24rK319O3hlLnByb3RvdHlwZS5pc01hdGVyaWFsPSEwO3ZhciBraT1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9Q2wsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX07a2kucHJvdG90eXBlLmlzTWVzaEJhc2ljTWF0ZXJpYWw9ITA7dmFyIEp0PW5ldyBULEFhPW5ldyBLLFF0PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL2U6MCx0aGlzLm5vcm1hbGl6ZWQ9aT09PSEwLHRoaXMudXNhZ2U9aW8sdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxpKXt0Kj10aGlzLml0ZW1TaXplLGkqPWUuaXRlbVNpemU7Zm9yKGxldCByPTAscz10aGlzLml0ZW1TaXplO3I8cztyKyspdGhpcy5hcnJheVt0K3JdPWUuYXJyYXlbaStyXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bGV0IG89dFtyXTtvPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIsciksbz1uZXcgZnQpLGVbaSsrXT1vLnIsZVtpKytdPW8uZyxlW2krK109by5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bGV0IG89dFtyXTtvPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsciksbz1uZXcgSyksZVtpKytdPW8ueCxlW2krK109by55fXJldHVybiB0aGlzfWNvcHlWZWN0b3Izc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bGV0IG89dFtyXTtvPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsciksbz1uZXcgVCksZVtpKytdPW8ueCxlW2krK109by55LGVbaSsrXT1vLnp9cmV0dXJuIHRoaXN9Y29weVZlY3RvcjRzQXJyYXkodCl7bGV0IGU9dGhpcy5hcnJheSxpPTA7Zm9yKGxldCByPTAscz10Lmxlbmd0aDtyPHM7cisrKXtsZXQgbz10W3JdO289PT12b2lkIDAmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yNHNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixyKSxvPW5ldyBXdCksZVtpKytdPW8ueCxlW2krK109by55LGVbaSsrXT1vLnosZVtpKytdPW8ud31yZXR1cm4gdGhpc31hcHBseU1hdHJpeDModCl7aWYodGhpcy5pdGVtU2l6ZT09PTIpZm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspQWEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLGUpLEFhLmFwcGx5TWF0cml4Myh0KSx0aGlzLnNldFhZKGUsQWEueCxBYS55KTtlbHNlIGlmKHRoaXMuaXRlbVNpemU9PT0zKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUp0LmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxKdC5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWVooZSxKdC54LEp0LnksSnQueik7cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUp0Lng9dGhpcy5nZXRYKGUpLEp0Lnk9dGhpcy5nZXRZKGUpLEp0Lno9dGhpcy5nZXRaKGUpLEp0LmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldFhZWihlLEp0LngsSnQueSxKdC56KTtyZXR1cm4gdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylKdC54PXRoaXMuZ2V0WChlKSxKdC55PXRoaXMuZ2V0WShlKSxKdC56PXRoaXMuZ2V0WihlKSxKdC5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihlLEp0LngsSnQueSxKdC56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspSnQueD10aGlzLmdldFgoZSksSnQueT10aGlzLmdldFkoZSksSnQuej10aGlzLmdldFooZSksSnQudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXMuc2V0WFlaKGUsSnQueCxKdC55LEp0LnopO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31nZXRYKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZV19c2V0WCh0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZV09ZSx0aGlzfWdldFkodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdfXNldFkodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMV09ZSx0aGlzfWdldFoodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdfXNldFoodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl09ZSx0aGlzfWdldFcodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdfXNldFcodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM109ZSx0aGlzfXNldFhZKHQsZSxpKXtyZXR1cm4gdCo9dGhpcy5pdGVtU2l6ZSx0aGlzLmFycmF5W3QrMF09ZSx0aGlzLmFycmF5W3QrMV09aSx0aGlzfXNldFhZWih0LGUsaSxyKXtyZXR1cm4gdCo9dGhpcy5pdGVtU2l6ZSx0aGlzLmFycmF5W3QrMF09ZSx0aGlzLmFycmF5W3QrMV09aSx0aGlzLmFycmF5W3QrMl09cix0aGlzfXNldFhZWlcodCxlLGkscixzKXtyZXR1cm4gdCo9dGhpcy5pdGVtU2l6ZSx0aGlzLmFycmF5W3QrMF09ZSx0aGlzLmFycmF5W3QrMV09aSx0aGlzLmFycmF5W3QrMl09cix0aGlzLmFycmF5W3QrM109cyx0aGlzfW9uVXBsb2FkKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuYXJyYXksdGhpcy5pdGVtU2l6ZSkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD17aXRlbVNpemU6dGhpcy5pdGVtU2l6ZSx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH07cmV0dXJuIHRoaXMubmFtZSE9PSIiJiYodC5uYW1lPXRoaXMubmFtZSksdGhpcy51c2FnZSE9PWlvJiYodC51c2FnZT10aGlzLnVzYWdlKSwodGhpcy51cGRhdGVSYW5nZS5vZmZzZXQhPT0wfHx0aGlzLnVwZGF0ZVJhbmdlLmNvdW50IT09LTEpJiYodC51cGRhdGVSYW5nZT10aGlzLnVwZGF0ZVJhbmdlKSx0fX07UXQucHJvdG90eXBlLmlzQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBybD1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19O3ZhciBzbD1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDMyQXJyYXkodCksZSxpKX19LFd1PWNsYXNzIGV4dGVuZHMgUXR7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxlLGkpfX07V3UucHJvdG90eXBlLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgZWU9Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IEZsb2F0MzJBcnJheSh0KSxlLGkpfX07dmFyIGZNPTAscWU9bmV3IHd0LHZ1PW5ldyBrdCxNcj1uZXcgVCxIZT1uZXcgR2UsVnM9bmV3IEdlLGdlPW5ldyBULEh0PWNsYXNzIGV4dGVuZHMgSW57Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOmZNKyt9KSx0aGlzLnV1aWQ9dG4oKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJCdWZmZXJHZW9tZXRyeSIsdGhpcy5pbmRleD1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLm1vcnBoQXR0cmlidXRlcz17fSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPSExLHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGwsdGhpcy5kcmF3UmFuZ2U9e3N0YXJ0OjAsY291bnQ6MS8wfSx0aGlzLnVzZXJEYXRhPXt9fWdldEluZGV4KCl7cmV0dXJuIHRoaXMuaW5kZXh9c2V0SW5kZXgodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dGhpcy5pbmRleD1uZXcocDAodCk/c2w6cmwpKHQsMSk6dGhpcy5pbmRleD10LHRoaXN9Z2V0QXR0cmlidXRlKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF19c2V0QXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XT1lLHRoaXN9ZGVsZXRlQXR0cmlidXRlKHQpe3JldHVybiBkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW3RdLHRoaXN9aGFzQXR0cmlidXRlKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF0hPT12b2lkIDB9YWRkR3JvdXAodCxlLGk9MCl7dGhpcy5ncm91cHMucHVzaCh7c3RhcnQ6dCxjb3VudDplLG1hdGVyaWFsSW5kZXg6aX0pfWNsZWFyR3JvdXBzKCl7dGhpcy5ncm91cHM9W119c2V0RHJhd1JhbmdlKHQsZSl7dGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dCx0aGlzLmRyYXdSYW5nZS5jb3VudD1lfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247ZSE9PXZvaWQgMCYmKGUuYXBwbHlNYXRyaXg0KHQpLGUubmVlZHNVcGRhdGU9ITApO2xldCBpPXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7aWYoaSE9PXZvaWQgMCl7bGV0IHM9bmV3IGRlKCkuZ2V0Tm9ybWFsTWF0cml4KHQpO2kuYXBwbHlOb3JtYWxNYXRyaXgocyksaS5uZWVkc1VwZGF0ZT0hMH1sZXQgcj10aGlzLmF0dHJpYnV0ZXMudGFuZ2VudDtyZXR1cm4gciE9PXZvaWQgMCYmKHIudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHIubmVlZHNVcGRhdGU9ITApLHRoaXMuYm91bmRpbmdCb3ghPT1udWxsJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdTcGhlcmUhPT1udWxsJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiBxZS5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31yb3RhdGVYKHQpe3JldHVybiBxZS5tYWtlUm90YXRpb25YKHQpLHRoaXMuYXBwbHlNYXRyaXg0KHFlKSx0aGlzfXJvdGF0ZVkodCl7cmV0dXJuIHFlLm1ha2VSb3RhdGlvblkodCksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9cm90YXRlWih0KXtyZXR1cm4gcWUubWFrZVJvdGF0aW9uWih0KSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc310cmFuc2xhdGUodCxlLGkpe3JldHVybiBxZS5tYWtlVHJhbnNsYXRpb24odCxlLGkpLHRoaXMuYXBwbHlNYXRyaXg0KHFlKSx0aGlzfXNjYWxlKHQsZSxpKXtyZXR1cm4gcWUubWFrZVNjYWxlKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31sb29rQXQodCl7cmV0dXJuIHZ1Lmxvb2tBdCh0KSx2dS51cGRhdGVNYXRyaXgoKSx0aGlzLmFwcGx5TWF0cml4NCh2dS5tYXRyaXgpLHRoaXN9Y2VudGVyKCl7cmV0dXJuIHRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoTXIpLm5lZ2F0ZSgpLHRoaXMudHJhbnNsYXRlKE1yLngsTXIueSxNci56KSx0aGlzfXNldEZyb21Qb2ludHModCl7bGV0IGU9W107Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKXtsZXQgcz10W2ldO2UucHVzaChzLngscy55LHMuenx8MCl9cmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKGUsMykpLHRoaXN9Y29tcHV0ZUJvdW5kaW5nQm94KCl7dGhpcy5ib3VuZGluZ0JveD09PW51bGwmJih0aGlzLmJvdW5kaW5nQm94PW5ldyBHZSk7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXtjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgYm94LiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdGhpcy5ib3VuZGluZ0JveC5zZXQobmV3IFQoLTEvMCwtMS8wLC0xLzApLG5ldyBUKDEvMCwxLzAsMS8wKSk7cmV0dXJufWlmKHQhPT12b2lkIDApe2lmKHRoaXMuYm91bmRpbmdCb3guc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KSxlKWZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyl7bGV0IHM9ZVtpXTtIZS5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHMpLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KGdlLmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5taW4sSGUubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoZ2UpLGdlLmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5tYXgsSGUubWF4KSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoZ2UpKToodGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KEhlLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KEhlLm1heCkpfX1lbHNlIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogQ29tcHV0ZWQgbWluL21heCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9Y29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl7dGhpcy5ib3VuZGluZ1NwaGVyZT09PW51bGwmJih0aGlzLmJvdW5kaW5nU3BoZXJlPW5ldyBzaSk7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXtjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgc3BoZXJlLiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3IFQsMS8wKTtyZXR1cm59aWYodCl7bGV0IGk9dGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7aWYoSGUuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KSxlKWZvcihsZXQgcz0wLG89ZS5sZW5ndGg7czxvO3MrKyl7bGV0IGE9ZVtzXTtWcy5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKGEpLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KGdlLmFkZFZlY3RvcnMoSGUubWluLFZzLm1pbiksSGUuZXhwYW5kQnlQb2ludChnZSksZ2UuYWRkVmVjdG9ycyhIZS5tYXgsVnMubWF4KSxIZS5leHBhbmRCeVBvaW50KGdlKSk6KEhlLmV4cGFuZEJ5UG9pbnQoVnMubWluKSxIZS5leHBhbmRCeVBvaW50KFZzLm1heCkpfUhlLmdldENlbnRlcihpKTtsZXQgcj0wO2ZvcihsZXQgcz0wLG89dC5jb3VudDtzPG87cysrKWdlLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxzKSxyPU1hdGgubWF4KHIsaS5kaXN0YW5jZVRvU3F1YXJlZChnZSkpO2lmKGUpZm9yKGxldCBzPTAsbz1lLmxlbmd0aDtzPG87cysrKXtsZXQgYT1lW3NdLGw9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtmb3IobGV0IGM9MCx1PWEuY291bnQ7Yzx1O2MrKylnZS5mcm9tQnVmZmVyQXR0cmlidXRlKGEsYyksbCYmKE1yLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxjKSxnZS5hZGQoTXIpKSxyPU1hdGgubWF4KHIsaS5kaXN0YW5jZVRvU3F1YXJlZChnZSkpfXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzPU1hdGguc3FydChyKSxpc05hTih0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cykmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBDb21wdXRlZCByYWRpdXMgaXMgTmFOLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfX1jb21wdXRlVGFuZ2VudHMoKXtsZXQgdD10aGlzLmluZGV4LGU9dGhpcy5hdHRyaWJ1dGVzO2lmKHQ9PT1udWxsfHxlLnBvc2l0aW9uPT09dm9pZCAwfHxlLm5vcm1hbD09PXZvaWQgMHx8ZS51dj09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBmYWlsZWQuIE1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlcyAoaW5kZXgsIHBvc2l0aW9uLCBub3JtYWwgb3IgdXYpIik7cmV0dXJufWxldCBpPXQuYXJyYXkscj1lLnBvc2l0aW9uLmFycmF5LHM9ZS5ub3JtYWwuYXJyYXksbz1lLnV2LmFycmF5LGE9ci5sZW5ndGgvMztlLnRhbmdlbnQ9PT12b2lkIDAmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgUXQobmV3IEZsb2F0MzJBcnJheSg0KmEpLDQpKTtsZXQgbD1lLnRhbmdlbnQuYXJyYXksYz1bXSx1PVtdO2ZvcihsZXQgWD0wO1g8YTtYKyspY1tYXT1uZXcgVCx1W1hdPW5ldyBUO2xldCBoPW5ldyBULGY9bmV3IFQsZD1uZXcgVCxnPW5ldyBLLHg9bmV3IEssdj1uZXcgSyxtPW5ldyBULHA9bmV3IFQ7ZnVuY3Rpb24gYihYLHksUil7aC5mcm9tQXJyYXkocixYKjMpLGYuZnJvbUFycmF5KHIseSozKSxkLmZyb21BcnJheShyLFIqMyksZy5mcm9tQXJyYXkobyxYKjIpLHguZnJvbUFycmF5KG8seSoyKSx2LmZyb21BcnJheShvLFIqMiksZi5zdWIoaCksZC5zdWIoaCkseC5zdWIoZyksdi5zdWIoZyk7bGV0IEQ9MS8oeC54KnYueS12LngqeC55KTshaXNGaW5pdGUoRCl8fChtLmNvcHkoZikubXVsdGlwbHlTY2FsYXIodi55KS5hZGRTY2FsZWRWZWN0b3IoZCwteC55KS5tdWx0aXBseVNjYWxhcihEKSxwLmNvcHkoZCkubXVsdGlwbHlTY2FsYXIoeC54KS5hZGRTY2FsZWRWZWN0b3IoZiwtdi54KS5tdWx0aXBseVNjYWxhcihEKSxjW1hdLmFkZChtKSxjW3ldLmFkZChtKSxjW1JdLmFkZChtKSx1W1hdLmFkZChwKSx1W3ldLmFkZChwKSx1W1JdLmFkZChwKSl9bGV0IF89dGhpcy5ncm91cHM7Xy5sZW5ndGg9PT0wJiYoXz1be3N0YXJ0OjAsY291bnQ6aS5sZW5ndGh9XSk7Zm9yKGxldCBYPTAseT1fLmxlbmd0aDtYPHk7KytYKXtsZXQgUj1fW1hdLEQ9Ui5zdGFydCxGPVIuY291bnQ7Zm9yKGxldCB6PUQsTj1EK0Y7ejxOO3orPTMpYihpW3orMF0saVt6KzFdLGlbeisyXSl9bGV0IFM9bmV3IFQsTD1uZXcgVCxBPW5ldyBULEg9bmV3IFQ7ZnVuY3Rpb24gdHQoWCl7QS5mcm9tQXJyYXkocyxYKjMpLEguY29weShBKTtsZXQgeT1jW1hdO1MuY29weSh5KSxTLnN1YihBLm11bHRpcGx5U2NhbGFyKEEuZG90KHkpKSkubm9ybWFsaXplKCksTC5jcm9zc1ZlY3RvcnMoSCx5KTtsZXQgRD1MLmRvdCh1W1hdKTwwPy0xOjE7bFtYKjRdPVMueCxsW1gqNCsxXT1TLnksbFtYKjQrMl09Uy56LGxbWCo0KzNdPUR9Zm9yKGxldCBYPTAseT1fLmxlbmd0aDtYPHk7KytYKXtsZXQgUj1fW1hdLEQ9Ui5zdGFydCxGPVIuY291bnQ7Zm9yKGxldCB6PUQsTj1EK0Y7ejxOO3orPTMpdHQoaVt6KzBdKSx0dChpW3orMV0pLHR0KGlbeisyXSl9fWNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO2lmKGUhPT12b2lkIDApe2xldCBpPXRoaXMuZ2V0QXR0cmlidXRlKCJub3JtYWwiKTtpZihpPT09dm9pZCAwKWk9bmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoZS5jb3VudCozKSwzKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixpKTtlbHNlIGZvcihsZXQgZj0wLGQ9aS5jb3VudDtmPGQ7ZisrKWkuc2V0WFlaKGYsMCwwLDApO2xldCByPW5ldyBULHM9bmV3IFQsbz1uZXcgVCxhPW5ldyBULGw9bmV3IFQsYz1uZXcgVCx1PW5ldyBULGg9bmV3IFQ7aWYodClmb3IobGV0IGY9MCxkPXQuY291bnQ7ZjxkO2YrPTMpe2xldCBnPXQuZ2V0WChmKzApLHg9dC5nZXRYKGYrMSksdj10LmdldFgoZisyKTtyLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxnKSxzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx4KSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx2KSx1LnN1YlZlY3RvcnMobyxzKSxoLnN1YlZlY3RvcnMocixzKSx1LmNyb3NzKGgpLGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLGcpLGwuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLHgpLGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLHYpLGEuYWRkKHUpLGwuYWRkKHUpLGMuYWRkKHUpLGkuc2V0WFlaKGcsYS54LGEueSxhLnopLGkuc2V0WFlaKHgsbC54LGwueSxsLnopLGkuc2V0WFlaKHYsYy54LGMueSxjLnopfWVsc2UgZm9yKGxldCBmPTAsZD1lLmNvdW50O2Y8ZDtmKz0zKXIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGYrMCkscy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZisxKSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxmKzIpLHUuc3ViVmVjdG9ycyhvLHMpLGguc3ViVmVjdG9ycyhyLHMpLHUuY3Jvc3MoaCksaS5zZXRYWVooZiswLHUueCx1LnksdS56KSxpLnNldFhZWihmKzEsdS54LHUueSx1LnopLGkuc2V0WFlaKGYrMix1LngsdS55LHUueik7dGhpcy5ub3JtYWxpemVOb3JtYWxzKCksaS5uZWVkc1VwZGF0ZT0hMH19bWVyZ2UodCxlKXtpZighKHQmJnQuaXNCdWZmZXJHZW9tZXRyeSkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IGdlb21ldHJ5IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeS4iLHQpO3JldHVybn1lPT09dm9pZCAwJiYoZT0wLGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogT3ZlcndyaXRpbmcgb3JpZ2luYWwgZ2VvbWV0cnksIHN0YXJ0aW5nIGF0IG9mZnNldD0wLiBVc2UgQnVmZmVyR2VvbWV0cnlVdGlscy5tZXJnZUJ1ZmZlckdlb21ldHJpZXMoKSBmb3IgbG9zc2xlc3MgbWVyZ2UuIikpO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IHIgaW4gaSl7aWYodC5hdHRyaWJ1dGVzW3JdPT09dm9pZCAwKWNvbnRpbnVlO2xldCBvPWlbcl0uYXJyYXksYT10LmF0dHJpYnV0ZXNbcl0sbD1hLmFycmF5LGM9YS5pdGVtU2l6ZSplLHU9TWF0aC5taW4obC5sZW5ndGgsby5sZW5ndGgtYyk7Zm9yKGxldCBoPTAsZj1jO2g8dTtoKyssZisrKW9bZl09bFtoXX1yZXR1cm4gdGhpc31ub3JtYWxpemVOb3JtYWxzKCl7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtmb3IobGV0IGU9MCxpPXQuY291bnQ7ZTxpO2UrKylnZS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksZ2Uubm9ybWFsaXplKCksdC5zZXRYWVooZSxnZS54LGdlLnksZ2Uueil9dG9Ob25JbmRleGVkKCl7ZnVuY3Rpb24gdChhLGwpe2xldCBjPWEuYXJyYXksdT1hLml0ZW1TaXplLGg9YS5ub3JtYWxpemVkLGY9bmV3IGMuY29uc3RydWN0b3IobC5sZW5ndGgqdSksZD0wLGc9MDtmb3IobGV0IHg9MCx2PWwubGVuZ3RoO3g8djt4Kyspe2EuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT9kPWxbeF0qYS5kYXRhLnN0cmlkZSthLm9mZnNldDpkPWxbeF0qdTtmb3IobGV0IG09MDttPHU7bSsrKWZbZysrXT1jW2QrK119cmV0dXJuIG5ldyBRdChmLHUsaCl9aWYodGhpcy5pbmRleD09PW51bGwpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkudG9Ob25JbmRleGVkKCk6IEJ1ZmZlckdlb21ldHJ5IGlzIGFscmVhZHkgbm9uLWluZGV4ZWQuIiksdGhpcztsZXQgZT1uZXcgSHQsaT10aGlzLmluZGV4LmFycmF5LHI9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiByKXtsZXQgbD1yW2FdLGM9dChsLGkpO2Uuc2V0QXR0cmlidXRlKGEsYyl9bGV0IHM9dGhpcy5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBhIGluIHMpe2xldCBsPVtdLGM9c1thXTtmb3IobGV0IHU9MCxoPWMubGVuZ3RoO3U8aDt1Kyspe2xldCBmPWNbdV0sZD10KGYsaSk7bC5wdXNoKGQpfWUubW9ycGhBdHRyaWJ1dGVzW2FdPWx9ZS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2xldCBvPXRoaXMuZ3JvdXBzO2ZvcihsZXQgYT0wLGw9by5sZW5ndGg7YTxsO2ErKyl7bGV0IGM9b1thXTtlLmFkZEdyb3VwKGMuc3RhcnQsYy5jb3VudCxjLm1hdGVyaWFsSW5kZXgpfXJldHVybiBlfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQnVmZmVyR2VvbWV0cnkiLGdlbmVyYXRvcjoiQnVmZmVyR2VvbWV0cnkudG9KU09OIn19O2lmKHQudXVpZD10aGlzLnV1aWQsdC50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLE9iamVjdC5rZXlzKHRoaXMudXNlckRhdGEpLmxlbmd0aD4wJiYodC51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSx0aGlzLnBhcmFtZXRlcnMhPT12b2lkIDApe2xldCBsPXRoaXMucGFyYW1ldGVycztmb3IobGV0IGMgaW4gbClsW2NdIT09dm9pZCAwJiYodFtjXT1sW2NdKTtyZXR1cm4gdH10LmRhdGE9e2F0dHJpYnV0ZXM6e319O2xldCBlPXRoaXMuaW5kZXg7ZSE9PW51bGwmJih0LmRhdGEuaW5kZXg9e3R5cGU6ZS5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuYXJyYXkpfSk7bGV0IGk9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgbCBpbiBpKXtsZXQgYz1pW2xdO3QuZGF0YS5hdHRyaWJ1dGVzW2xdPWMudG9KU09OKHQuZGF0YSl9bGV0IHI9e30scz0hMTtmb3IobGV0IGwgaW4gdGhpcy5tb3JwaEF0dHJpYnV0ZXMpe2xldCBjPXRoaXMubW9ycGhBdHRyaWJ1dGVzW2xdLHU9W107Zm9yKGxldCBoPTAsZj1jLmxlbmd0aDtoPGY7aCsrKXtsZXQgZD1jW2hdO3UucHVzaChkLnRvSlNPTih0LmRhdGEpKX11Lmxlbmd0aD4wJiYocltsXT11LHM9ITApfXMmJih0LmRhdGEubW9ycGhBdHRyaWJ1dGVzPXIsdC5kYXRhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmUpO2xldCBvPXRoaXMuZ3JvdXBzO28ubGVuZ3RoPjAmJih0LmRhdGEuZ3JvdXBzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobykpKTtsZXQgYT10aGlzLmJvdW5kaW5nU3BoZXJlO3JldHVybiBhIT09bnVsbCYmKHQuZGF0YS5ib3VuZGluZ1NwaGVyZT17Y2VudGVyOmEuY2VudGVyLnRvQXJyYXkoKSxyYWRpdXM6YS5yYWRpdXN9KSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbDtsZXQgZT17fTt0aGlzLm5hbWU9dC5uYW1lO2xldCBpPXQuaW5kZXg7aSE9PW51bGwmJnRoaXMuc2V0SW5kZXgoaS5jbG9uZShlKSk7bGV0IHI9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiByKXtsZXQgdT1yW2NdO3RoaXMuc2V0QXR0cmlidXRlKGMsdS5jbG9uZShlKSl9bGV0IHM9dC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBjIGluIHMpe2xldCB1PVtdLGg9c1tjXTtmb3IobGV0IGY9MCxkPWgubGVuZ3RoO2Y8ZDtmKyspdS5wdXNoKGhbZl0uY2xvbmUoZSkpO3RoaXMubW9ycGhBdHRyaWJ1dGVzW2NdPXV9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT10Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2xldCBvPXQuZ3JvdXBzO2ZvcihsZXQgYz0wLHU9by5sZW5ndGg7Yzx1O2MrKyl7bGV0IGg9b1tjXTt0aGlzLmFkZEdyb3VwKGguc3RhcnQsaC5jb3VudCxoLm1hdGVyaWFsSW5kZXgpfWxldCBhPXQuYm91bmRpbmdCb3g7YSE9PW51bGwmJih0aGlzLmJvdW5kaW5nQm94PWEuY2xvbmUoKSk7bGV0IGw9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbCE9PW51bGwmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWwuY2xvbmUoKSksdGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dC5kcmF3UmFuZ2Uuc3RhcnQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9dC5kcmF3UmFuZ2UuY291bnQsdGhpcy51c2VyRGF0YT10LnVzZXJEYXRhLHQucGFyYW1ldGVycyE9PXZvaWQgMCYmKHRoaXMucGFyYW1ldGVycz1PYmplY3QuYXNzaWduKHt9LHQucGFyYW1ldGVycykpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O0h0LnByb3RvdHlwZS5pc0J1ZmZlckdlb21ldHJ5PSEwO3ZhciBwZz1uZXcgd3QsYnI9bmV3IG9pLF91PW5ldyBzaSxKbj1uZXcgVCwkbj1uZXcgVCxLbj1uZXcgVCx3dT1uZXcgVCxNdT1uZXcgVCxidT1uZXcgVCxDYT1uZXcgVCxSYT1uZXcgVCxMYT1uZXcgVCxQYT1uZXcgSyxEYT1uZXcgSyxJYT1uZXcgSyxTdT1uZXcgVCxOYT1uZXcgVCxvZT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQ9bmV3IEh0LGU9bmV3IGtpKXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaCIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdC5tb3JwaFRhcmdldEluZmx1ZW5jZXMhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz10Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5zbGljZSgpKSx0Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeSE9PXZvaWQgMCYmKHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PU9iamVjdC5hc3NpZ24oe30sdC5tb3JwaFRhcmdldERpY3Rpb25hcnkpKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZihyIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspe2xldCBhPXJbc10ubmFtZXx8U3RyaW5nKHMpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09c319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO2UhPT12b2lkIDAmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gudXBkYXRlTW9ycGhUYXJnZXRzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdGVyaWFsLHM9dGhpcy5tYXRyaXhXb3JsZDtpZihyPT09dm9pZCAwfHwoaS5ib3VuZGluZ1NwaGVyZT09PW51bGwmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksX3UuY29weShpLmJvdW5kaW5nU3BoZXJlKSxfdS5hcHBseU1hdHJpeDQocyksdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShfdSk9PT0hMSl8fChwZy5jb3B5KHMpLmludmVydCgpLGJyLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChwZyksaS5ib3VuZGluZ0JveCE9PW51bGwmJmJyLmludGVyc2VjdHNCb3goaS5ib3VuZGluZ0JveCk9PT0hMSkpcmV0dXJuO2xldCBvO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGE9aS5pbmRleCxsPWkuYXR0cmlidXRlcy5wb3NpdGlvbixjPWkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLHU9aS5tb3JwaFRhcmdldHNSZWxhdGl2ZSxoPWkuYXR0cmlidXRlcy51dixmPWkuYXR0cmlidXRlcy51djIsZD1pLmdyb3VwcyxnPWkuZHJhd1JhbmdlO2lmKGEhPT1udWxsKWlmKEFycmF5LmlzQXJyYXkocikpZm9yKGxldCB4PTAsdj1kLmxlbmd0aDt4PHY7eCsrKXtsZXQgbT1kW3hdLHA9clttLm1hdGVyaWFsSW5kZXhdLGI9TWF0aC5tYXgobS5zdGFydCxnLnN0YXJ0KSxfPU1hdGgubWluKGEuY291bnQsTWF0aC5taW4obS5zdGFydCttLmNvdW50LGcuc3RhcnQrZy5jb3VudCkpO2ZvcihsZXQgUz1iLEw9XztTPEw7Uys9Myl7bGV0IEE9YS5nZXRYKFMpLEg9YS5nZXRYKFMrMSksdHQ9YS5nZXRYKFMrMik7bz1GYSh0aGlzLHAsdCxicixsLGMsdSxoLGYsQSxILHR0KSxvJiYoby5mYWNlSW5kZXg9TWF0aC5mbG9vcihTLzMpLG8uZmFjZS5tYXRlcmlhbEluZGV4PW0ubWF0ZXJpYWxJbmRleCxlLnB1c2gobykpfX1lbHNle2xldCB4PU1hdGgubWF4KDAsZy5zdGFydCksdj1NYXRoLm1pbihhLmNvdW50LGcuc3RhcnQrZy5jb3VudCk7Zm9yKGxldCBtPXgscD12O208cDttKz0zKXtsZXQgYj1hLmdldFgobSksXz1hLmdldFgobSsxKSxTPWEuZ2V0WChtKzIpO289RmEodGhpcyxyLHQsYnIsbCxjLHUsaCxmLGIsXyxTKSxvJiYoby5mYWNlSW5kZXg9TWF0aC5mbG9vcihtLzMpLGUucHVzaChvKSl9fWVsc2UgaWYobCE9PXZvaWQgMClpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgeD0wLHY9ZC5sZW5ndGg7eDx2O3grKyl7bGV0IG09ZFt4XSxwPXJbbS5tYXRlcmlhbEluZGV4XSxiPU1hdGgubWF4KG0uc3RhcnQsZy5zdGFydCksXz1NYXRoLm1pbihsLmNvdW50LE1hdGgubWluKG0uc3RhcnQrbS5jb3VudCxnLnN0YXJ0K2cuY291bnQpKTtmb3IobGV0IFM9YixMPV87UzxMO1MrPTMpe2xldCBBPVMsSD1TKzEsdHQ9UysyO289RmEodGhpcyxwLHQsYnIsbCxjLHUsaCxmLEEsSCx0dCksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IoUy8zKSxvLmZhY2UubWF0ZXJpYWxJbmRleD1tLm1hdGVyaWFsSW5kZXgsZS5wdXNoKG8pKX19ZWxzZXtsZXQgeD1NYXRoLm1heCgwLGcuc3RhcnQpLHY9TWF0aC5taW4obC5jb3VudCxnLnN0YXJ0K2cuY291bnQpO2ZvcihsZXQgbT14LHA9djttPHA7bSs9Myl7bGV0IGI9bSxfPW0rMSxTPW0rMjtvPUZhKHRoaXMscix0LGJyLGwsYyx1LGgsZixiLF8sUyksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IobS8zKSxlLnB1c2gobykpfX19ZWxzZSBpLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fTtvZS5wcm90b3R5cGUuaXNNZXNoPSEwO2Z1bmN0aW9uIGRNKG4sdCxlLGkscixzLG8sYSl7bGV0IGw7aWYodC5zaWRlPT09aGU/bD1pLmludGVyc2VjdFRyaWFuZ2xlKG8scyxyLCEwLGEpOmw9aS5pbnRlcnNlY3RUcmlhbmdsZShyLHMsbyx0LnNpZGUhPT1IcixhKSxsPT09bnVsbClyZXR1cm4gbnVsbDtOYS5jb3B5KGEpLE5hLmFwcGx5TWF0cml4NChuLm1hdHJpeFdvcmxkKTtsZXQgYz1lLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhOYSk7cmV0dXJuIGM8ZS5uZWFyfHxjPmUuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6TmEuY2xvbmUoKSxvYmplY3Q6bn19ZnVuY3Rpb24gRmEobix0LGUsaSxyLHMsbyxhLGwsYyx1LGgpe0puLmZyb21CdWZmZXJBdHRyaWJ1dGUocixjKSwkbi5mcm9tQnVmZmVyQXR0cmlidXRlKHIsdSksS24uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGgpO2xldCBmPW4ubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKHMmJmYpe0NhLnNldCgwLDAsMCksUmEuc2V0KDAsMCwwKSxMYS5zZXQoMCwwLDApO2ZvcihsZXQgZz0wLHg9cy5sZW5ndGg7Zzx4O2crKyl7bGV0IHY9ZltnXSxtPXNbZ107diE9PTAmJih3dS5mcm9tQnVmZmVyQXR0cmlidXRlKG0sYyksTXUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLHUpLGJ1LmZyb21CdWZmZXJBdHRyaWJ1dGUobSxoKSxvPyhDYS5hZGRTY2FsZWRWZWN0b3Iod3UsdiksUmEuYWRkU2NhbGVkVmVjdG9yKE11LHYpLExhLmFkZFNjYWxlZFZlY3RvcihidSx2KSk6KENhLmFkZFNjYWxlZFZlY3Rvcih3dS5zdWIoSm4pLHYpLFJhLmFkZFNjYWxlZFZlY3RvcihNdS5zdWIoJG4pLHYpLExhLmFkZFNjYWxlZFZlY3RvcihidS5zdWIoS24pLHYpKSl9Sm4uYWRkKENhKSwkbi5hZGQoUmEpLEtuLmFkZChMYSl9bi5pc1NraW5uZWRNZXNoJiYobi5ib25lVHJhbnNmb3JtKGMsSm4pLG4uYm9uZVRyYW5zZm9ybSh1LCRuKSxuLmJvbmVUcmFuc2Zvcm0oaCxLbikpO2xldCBkPWRNKG4sdCxlLGksSm4sJG4sS24sU3UpO2lmKGQpe2EmJihQYS5mcm9tQnVmZmVyQXR0cmlidXRlKGEsYyksRGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHUpLElhLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxoKSxkLnV2PXJlLmdldFVWKFN1LEpuLCRuLEtuLFBhLERhLElhLG5ldyBLKSksbCYmKFBhLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxjKSxEYS5mcm9tQnVmZmVyQXR0cmlidXRlKGwsdSksSWEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLGgpLGQudXYyPXJlLmdldFVWKFN1LEpuLCRuLEtuLFBhLERhLElhLG5ldyBLKSk7bGV0IGc9e2E6YyxiOnUsYzpoLG5vcm1hbDpuZXcgVCxtYXRlcmlhbEluZGV4OjB9O3JlLmdldE5vcm1hbChKbiwkbixLbixnLm5vcm1hbCksZC5mYWNlPWd9cmV0dXJuIGR9dmFyIEhpPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD0xLGU9MSxpPTEscj0xLHM9MSxvPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOmksd2lkdGhTZWdtZW50czpyLGhlaWdodFNlZ21lbnRzOnMsZGVwdGhTZWdtZW50czpvfTtsZXQgYT10aGlzO3I9TWF0aC5mbG9vcihyKSxzPU1hdGguZmxvb3Iocyksbz1NYXRoLmZsb29yKG8pO2xldCBsPVtdLGM9W10sdT1bXSxoPVtdLGY9MCxkPTA7ZygieiIsInkiLCJ4IiwtMSwtMSxpLGUsdCxvLHMsMCksZygieiIsInkiLCJ4IiwxLC0xLGksZSwtdCxvLHMsMSksZygieCIsInoiLCJ5IiwxLDEsdCxpLGUscixvLDIpLGcoIngiLCJ6IiwieSIsMSwtMSx0LGksLWUscixvLDMpLGcoIngiLCJ5IiwieiIsMSwtMSx0LGUsaSxyLHMsNCksZygieCIsInkiLCJ6IiwtMSwtMSx0LGUsLWkscixzLDUpLHRoaXMuc2V0SW5kZXgobCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZWUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGVlKHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGVlKGgsMikpO2Z1bmN0aW9uIGcoeCx2LG0scCxiLF8sUyxMLEEsSCx0dCl7bGV0IFg9Xy9BLHk9Uy9ILFI9Xy8yLEQ9Uy8yLEY9TC8yLHo9QSsxLE49SCsxLFY9MCxRPTAsYXQ9bmV3IFQ7Zm9yKGxldCBHPTA7RzxOO0crKyl7bGV0ICQ9Ryp5LUQ7Zm9yKGxldCBsdD0wO2x0PHo7bHQrKyl7bGV0IGR0PWx0KlgtUjthdFt4XT1kdCpwLGF0W3ZdPSQqYixhdFttXT1GLGMucHVzaChhdC54LGF0LnksYXQueiksYXRbeF09MCxhdFt2XT0wLGF0W21dPUw+MD8xOi0xLHUucHVzaChhdC54LGF0LnksYXQueiksaC5wdXNoKGx0L0EpLGgucHVzaCgxLUcvSCksVis9MX19Zm9yKGxldCBHPTA7RzxIO0crKylmb3IobGV0ICQ9MDskPEE7JCsrKXtsZXQgbHQ9ZiskK3oqRyxkdD1mKyQreiooRysxKSx4dD1mKygkKzEpK3oqKEcrMSksaz1mKygkKzEpK3oqRztsLnB1c2gobHQsZHQsayksbC5wdXNoKGR0LHh0LGspLFErPTZ9YS5hZGRHcm91cChkLFEsdHQpLGQrPVEsZis9Vn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgSGkodC53aWR0aCx0LmhlaWdodCx0LmRlcHRoLHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQuZGVwdGhTZWdtZW50cyl9fTtmdW5jdGlvbiBHcihuKXtsZXQgdD17fTtmb3IobGV0IGUgaW4gbil7dFtlXT17fTtmb3IobGV0IGkgaW4gbltlXSl7bGV0IHI9bltlXVtpXTtyJiYoci5pc0NvbG9yfHxyLmlzTWF0cml4M3x8ci5pc01hdHJpeDR8fHIuaXNWZWN0b3IyfHxyLmlzVmVjdG9yM3x8ci5pc1ZlY3RvcjR8fHIuaXNUZXh0dXJlfHxyLmlzUXVhdGVybmlvbik/dFtlXVtpXT1yLmNsb25lKCk6QXJyYXkuaXNBcnJheShyKT90W2VdW2ldPXIuc2xpY2UoKTp0W2VdW2ldPXJ9fXJldHVybiB0fWZ1bmN0aW9uIE1lKG4pe2xldCB0PXt9O2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1HcihuW2VdKTtmb3IobGV0IHIgaW4gaSl0W3JdPWlbcl19cmV0dXJuIHR9dmFyIHBNPXtjbG9uZTpHcixtZXJnZTpNZX0sbU09YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKfWAsZ009YHZvaWQgbWFpbigpIHsKCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDEuMCwgMC4wLCAwLjAsIDEuMCApOwp9YCxGbj1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJTaGFkZXJNYXRlcmlhbCIsdGhpcy5kZWZpbmVzPXt9LHRoaXMudW5pZm9ybXM9e30sdGhpcy52ZXJ0ZXhTaGFkZXI9bU0sdGhpcy5mcmFnbWVudFNoYWRlcj1nTSx0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfSx0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfSx0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwLHRoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExLHRoaXMuZ2xzbFZlcnNpb249bnVsbCx0IT09dm9pZCAwJiYodC5hdHRyaWJ1dGVzIT09dm9pZCAwJiZjb25zb2xlLmVycm9yKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSx0aGlzLnNldFZhbHVlcyh0KSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1Hcih0LnVuaWZvcm1zKSx0aGlzLmRlZmluZXM9T2JqZWN0LmFzc2lnbih7fSx0LmRlZmluZXMpLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMubGlnaHRzPXQubGlnaHRzLHRoaXMuY2xpcHBpbmc9dC5jbGlwcGluZyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7ZS5nbHNsVmVyc2lvbj10aGlzLmdsc2xWZXJzaW9uLGUudW5pZm9ybXM9e307Zm9yKGxldCByIGluIHRoaXMudW5pZm9ybXMpe2xldCBvPXRoaXMudW5pZm9ybXNbcl0udmFsdWU7byYmby5pc1RleHR1cmU/ZS51bmlmb3Jtc1tyXT17dHlwZToidCIsdmFsdWU6by50b0pTT04odCkudXVpZH06byYmby5pc0NvbG9yP2UudW5pZm9ybXNbcl09e3R5cGU6ImMiLHZhbHVlOm8uZ2V0SGV4KCl9Om8mJm8uaXNWZWN0b3IyP2UudW5pZm9ybXNbcl09e3R5cGU6InYyIix2YWx1ZTpvLnRvQXJyYXkoKX06byYmby5pc1ZlY3RvcjM/ZS51bmlmb3Jtc1tyXT17dHlwZToidjMiLHZhbHVlOm8udG9BcnJheSgpfTpvJiZvLmlzVmVjdG9yND9lLnVuaWZvcm1zW3JdPXt0eXBlOiJ2NCIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNNYXRyaXgzP2UudW5pZm9ybXNbcl09e3R5cGU6Im0zIix2YWx1ZTpvLnRvQXJyYXkoKX06byYmby5pc01hdHJpeDQ/ZS51bmlmb3Jtc1tyXT17dHlwZToibTQiLHZhbHVlOm8udG9BcnJheSgpfTplLnVuaWZvcm1zW3JdPXt2YWx1ZTpvfX1PYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aD4wJiYoZS5kZWZpbmVzPXRoaXMuZGVmaW5lcyksZS52ZXJ0ZXhTaGFkZXI9dGhpcy52ZXJ0ZXhTaGFkZXIsZS5mcmFnbWVudFNoYWRlcj10aGlzLmZyYWdtZW50U2hhZGVyO2xldCBpPXt9O2ZvcihsZXQgciBpbiB0aGlzLmV4dGVuc2lvbnMpdGhpcy5leHRlbnNpb25zW3JdPT09ITAmJihpW3JdPSEwKTtyZXR1cm4gT2JqZWN0LmtleXMoaSkubGVuZ3RoPjAmJihlLmV4dGVuc2lvbnM9aSksZX19O0ZuLnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwO3ZhciBvbz1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhbWVyYSIsdGhpcy5tYXRyaXhXb3JsZEludmVyc2U9bmV3IHd0LHRoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcgd3QsdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZT1uZXcgd3R9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksdGhpc31nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldCgtZVs4XSwtZVs5XSwtZVsxMF0pLm5vcm1hbGl6ZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dXBkYXRlV29ybGRNYXRyaXgodCxlKXtzdXBlci51cGRhdGVXb3JsZE1hdHJpeCh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07b28ucHJvdG90eXBlLmlzQ2FtZXJhPSEwO3ZhciBTZT1jbGFzcyBleHRlbmRzIG9ve2NvbnN0cnVjdG9yKHQ9NTAsZT0xLGk9LjEscj0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9aSx0aGlzLmZhcj1yLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9ZSx0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLmZvdj10LmZvdix0aGlzLnpvb209dC56b29tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy5mb2N1cz10LmZvY3VzLHRoaXMuYXNwZWN0PXQuYXNwZWN0LHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXMuZmlsbUdhdWdlPXQuZmlsbUdhdWdlLHRoaXMuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQsdGhpc31zZXRGb2NhbExlbmd0aCh0KXtsZXQgZT0uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90O3RoaXMuZm92PVZ1KjIqTWF0aC5hdGFuKGUpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldEZvY2FsTGVuZ3RoKCl7bGV0IHQ9TWF0aC50YW4oaXUqLjUqdGhpcy5mb3YpO3JldHVybiAuNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fWdldEVmZmVjdGl2ZUZPVigpe3JldHVybiBWdSoyKk1hdGguYXRhbihNYXRoLnRhbihpdSouNSp0aGlzLmZvdikvdGhpcy56b29tKX1nZXRGaWxtV2lkdGgoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9Z2V0RmlsbUhlaWdodCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX1zZXRWaWV3T2Zmc2V0KHQsZSxpLHIscyxvKXt0aGlzLmFzcGVjdD10L2UsdGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1zLHRoaXMudmlldy5oZWlnaHQ9byx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD10aGlzLm5lYXIsZT10Kk1hdGgudGFuKGl1Ki41KnRoaXMuZm92KS90aGlzLnpvb20saT0yKmUscj10aGlzLmFzcGVjdCppLHM9LS41KnIsbz10aGlzLnZpZXc7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBsPW8uZnVsbFdpZHRoLGM9by5mdWxsSGVpZ2h0O3MrPW8ub2Zmc2V0WCpyL2wsZS09by5vZmZzZXRZKmkvYyxyKj1vLndpZHRoL2wsaSo9by5oZWlnaHQvY31sZXQgYT10aGlzLmZpbG1PZmZzZXQ7YSE9PTAmJihzKz10KmEvdGhpcy5nZXRGaWxtV2lkdGgoKSksdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShzLHMrcixlLGUtaSx0LHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5mb3Y9dGhpcy5mb3YsZS5vYmplY3Quem9vbT10aGlzLnpvb20sZS5vYmplY3QubmVhcj10aGlzLm5lYXIsZS5vYmplY3QuZmFyPXRoaXMuZmFyLGUub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXMsZS5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0LHRoaXMudmlldyE9PW51bGwmJihlLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksZS5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlLGUub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0LGV9fTtTZS5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYT0hMDt2YXIgU3I9OTAsRXI9MSxhbz1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQsZSxpKXtpZihzdXBlcigpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsaS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTtyZXR1cm59dGhpcy5yZW5kZXJUYXJnZXQ9aTtsZXQgcj1uZXcgU2UoU3IsRXIsdCxlKTtyLmxheWVycz10aGlzLmxheWVycyxyLnVwLnNldCgwLC0xLDApLHIubG9va0F0KG5ldyBUKDEsMCwwKSksdGhpcy5hZGQocik7bGV0IHM9bmV3IFNlKFNyLEVyLHQsZSk7cy5sYXllcnM9dGhpcy5sYXllcnMscy51cC5zZXQoMCwtMSwwKSxzLmxvb2tBdChuZXcgVCgtMSwwLDApKSx0aGlzLmFkZChzKTtsZXQgbz1uZXcgU2UoU3IsRXIsdCxlKTtvLmxheWVycz10aGlzLmxheWVycyxvLnVwLnNldCgwLDAsMSksby5sb29rQXQobmV3IFQoMCwxLDApKSx0aGlzLmFkZChvKTtsZXQgYT1uZXcgU2UoU3IsRXIsdCxlKTthLmxheWVycz10aGlzLmxheWVycyxhLnVwLnNldCgwLDAsLTEpLGEubG9va0F0KG5ldyBUKDAsLTEsMCkpLHRoaXMuYWRkKGEpO2xldCBsPW5ldyBTZShTcixFcix0LGUpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3IFQoMCwwLDEpKSx0aGlzLmFkZChsKTtsZXQgYz1uZXcgU2UoU3IsRXIsdCxlKTtjLmxheWVycz10aGlzLmxheWVycyxjLnVwLnNldCgwLC0xLDApLGMubG9va0F0KG5ldyBUKDAsMCwtMSkpLHRoaXMuYWRkKGMpfXVwZGF0ZSh0LGUpe3RoaXMucGFyZW50PT09bnVsbCYmdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO2xldCBpPXRoaXMucmVuZGVyVGFyZ2V0LFtyLHMsbyxhLGwsY109dGhpcy5jaGlsZHJlbix1PXQueHIuZW5hYmxlZCxoPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7dC54ci5lbmFibGVkPSExO2xldCBmPWkudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7aS50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz0hMSx0LnNldFJlbmRlclRhcmdldChpLDApLHQucmVuZGVyKGUsciksdC5zZXRSZW5kZXJUYXJnZXQoaSwxKSx0LnJlbmRlcihlLHMpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMiksdC5yZW5kZXIoZSxvKSx0LnNldFJlbmRlclRhcmdldChpLDMpLHQucmVuZGVyKGUsYSksdC5zZXRSZW5kZXJUYXJnZXQoaSw0KSx0LnJlbmRlcihlLGwpLGkudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9Zix0LnNldFJlbmRlclRhcmdldChpLDUpLHQucmVuZGVyKGUsYyksdC5zZXRSZW5kZXJUYXJnZXQoaCksdC54ci5lbmFibGVkPXUsaS50ZXh0dXJlLm5lZWRzUE1SRU1VcGRhdGU9ITB9fSxXcj1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQsZSxpLHIscyxvLGEsbCxjLHUpe3Q9dCE9PXZvaWQgMD90OltdLGU9ZSE9PXZvaWQgMD9lOkFvLHN1cGVyKHQsZSxpLHIscyxvLGEsbCxjLHUpLHRoaXMuZmxpcFk9ITF9Z2V0IGltYWdlcygpe3JldHVybiB0aGlzLmltYWdlfXNldCBpbWFnZXModCl7dGhpcy5pbWFnZT10fX07V3IucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7dmFyIG9sPWNsYXNzIGV4dGVuZHMgTmV7Y29uc3RydWN0b3IodCxlLGkpe051bWJlci5pc0ludGVnZXIoZSkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKSIpLGU9aSksc3VwZXIodCx0LGUpLGU9ZXx8e30sdGhpcy50ZXh0dXJlPW5ldyBXcih2b2lkIDAsZS5tYXBwaW5nLGUud3JhcFMsZS53cmFwVCxlLm1hZ0ZpbHRlcixlLm1pbkZpbHRlcixlLmZvcm1hdCxlLnR5cGUsZS5hbmlzb3Ryb3B5LGUuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lLmdlbmVyYXRlTWlwbWFwcyE9PXZvaWQgMD9lLmdlbmVyYXRlTWlwbWFwczohMSx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUubWluRmlsdGVyIT09dm9pZCAwP2UubWluRmlsdGVyOmJlfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQsZSl7dGhpcy50ZXh0dXJlLnR5cGU9ZS50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9UmUsdGhpcy50ZXh0dXJlLmVuY29kaW5nPWUuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5tYWdGaWx0ZXI7bGV0IGk9e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YAoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCgkJCQkJcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7CgoJCQkJfQoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCgkJCQkJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCQkJCQkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgoJCQkJfQoJCQlgLGZyYWdtZW50U2hhZGVyOmAKCgkJCQl1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CgoJCQkJdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKCgkJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOwoKCQkJCQl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CgoJCQkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoKCQkJCX0KCQkJYH0scj1uZXcgSGkoNSw1LDUpLHM9bmV3IEZuKHtuYW1lOiJDdWJlbWFwRnJvbUVxdWlyZWN0Iix1bmlmb3JtczpHcihpLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6aS52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6aS5mcmFnbWVudFNoYWRlcixzaWRlOmhlLGJsZW5kaW5nOmpufSk7cy51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWU9ZTtsZXQgbz1uZXcgb2UocixzKSxhPWUubWluRmlsdGVyO3JldHVybiBlLm1pbkZpbHRlcj09PUxsJiYoZS5taW5GaWx0ZXI9YmUpLG5ldyBhbygxLDEwLHRoaXMpLnVwZGF0ZSh0LG8pLGUubWluRmlsdGVyPWEsby5nZW9tZXRyeS5kaXNwb3NlKCksby5tYXRlcmlhbC5kaXNwb3NlKCksdGhpc31jbGVhcih0LGUsaSxyKXtsZXQgcz10LmdldFJlbmRlclRhcmdldCgpO2ZvcihsZXQgbz0wO288NjtvKyspdC5zZXRSZW5kZXJUYXJnZXQodGhpcyxvKSx0LmNsZWFyKGUsaSxyKTt0LnNldFJlbmRlclRhcmdldChzKX19O29sLnByb3RvdHlwZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD0hMDt2YXIgRXU9bmV3IFQseE09bmV3IFQseU09bmV3IGRlLGplPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQoMSwwLDApLGU9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1lLHRoaXN9c2V0Q29tcG9uZW50cyh0LGUsaSxyKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQsZSxpKSx0aGlzLmNvbnN0YW50PXIsdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LWUuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LGUsaSl7bGV0IHI9RXUuc3ViVmVjdG9ycyhpLGUpLmNyb3NzKHhNLnN1YlZlY3RvcnModCxlKSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQocix0KSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodC5ub3JtYWwpLHRoaXMuY29uc3RhbnQ9dC5jb25zdGFudCx0aGlzfW5vcm1hbGl6ZSgpe2xldCB0PTEvdGhpcy5ub3JtYWwubGVuZ3RoKCk7cmV0dXJuIHRoaXMubm9ybWFsLm11bHRpcGx5U2NhbGFyKHQpLHRoaXMuY29uc3RhbnQqPXQsdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy5jb25zdGFudCo9LTEsdGhpcy5ub3JtYWwubmVnYXRlKCksdGhpc31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHRoaXMubm9ybWFsLmRvdCh0KSt0aGlzLmNvbnN0YW50fWRpc3RhbmNlVG9TcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuY2VudGVyKS10LnJhZGl1c31wcm9qZWN0UG9pbnQodCxlKXtyZXR1cm4gZS5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5kaXN0YW5jZVRvUG9pbnQodCkpLmFkZCh0KX1pbnRlcnNlY3RMaW5lKHQsZSl7bGV0IGk9dC5kZWx0YShFdSkscj10aGlzLm5vcm1hbC5kb3QoaSk7aWYocj09PTApcmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpPT09MD9lLmNvcHkodC5zdGFydCk6bnVsbDtsZXQgcz0tKHQuc3RhcnQuZG90KHRoaXMubm9ybWFsKSt0aGlzLmNvbnN0YW50KS9yO3JldHVybiBzPDB8fHM+MT9udWxsOmUuY29weShpKS5tdWx0aXBseVNjYWxhcihzKS5hZGQodC5zdGFydCl9aW50ZXJzZWN0c0xpbmUodCl7bGV0IGU9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCksaT10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmVuZCk7cmV0dXJuIGU8MCYmaT4wfHxpPDAmJmU+MH1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1jb3BsYW5hclBvaW50KHQpe3JldHVybiB0LmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX1hcHBseU1hdHJpeDQodCxlKXtsZXQgaT1lfHx5TS5nZXROb3JtYWxNYXRyaXgodCkscj10aGlzLmNvcGxhbmFyUG9pbnQoRXUpLmFwcGx5TWF0cml4NCh0KSxzPXRoaXMubm9ybWFsLmFwcGx5TWF0cml4MyhpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5jb25zdGFudD0tci5kb3QocyksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY29uc3RhbnQtPXQuZG90KHRoaXMubm9ybWFsKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5ub3JtYWwuZXF1YWxzKHRoaXMubm9ybWFsKSYmdC5jb25zdGFudD09PXRoaXMuY29uc3RhbnR9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07amUucHJvdG90eXBlLmlzUGxhbmU9ITA7dmFyIFRyPW5ldyBzaSx6YT1uZXcgVCxxcj1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBqZSxlPW5ldyBqZSxpPW5ldyBqZSxyPW5ldyBqZSxzPW5ldyBqZSxvPW5ldyBqZSl7dGhpcy5wbGFuZXM9W3QsZSxpLHIscyxvXX1zZXQodCxlLGkscixzLG8pe2xldCBhPXRoaXMucGxhbmVzO3JldHVybiBhWzBdLmNvcHkodCksYVsxXS5jb3B5KGUpLGFbMl0uY29weShpKSxhWzNdLmNvcHkociksYVs0XS5jb3B5KHMpLGFbNV0uY29weShvKSx0aGlzfWNvcHkodCl7bGV0IGU9dGhpcy5wbGFuZXM7Zm9yKGxldCBpPTA7aTw2O2krKyllW2ldLmNvcHkodC5wbGFuZXNbaV0pO3JldHVybiB0aGlzfXNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHQpe2xldCBlPXRoaXMucGxhbmVzLGk9dC5lbGVtZW50cyxyPWlbMF0scz1pWzFdLG89aVsyXSxhPWlbM10sbD1pWzRdLGM9aVs1XSx1PWlbNl0saD1pWzddLGY9aVs4XSxkPWlbOV0sZz1pWzEwXSx4PWlbMTFdLHY9aVsxMl0sbT1pWzEzXSxwPWlbMTRdLGI9aVsxNV07cmV0dXJuIGVbMF0uc2V0Q29tcG9uZW50cyhhLXIsaC1sLHgtZixiLXYpLm5vcm1hbGl6ZSgpLGVbMV0uc2V0Q29tcG9uZW50cyhhK3IsaCtsLHgrZixiK3YpLm5vcm1hbGl6ZSgpLGVbMl0uc2V0Q29tcG9uZW50cyhhK3MsaCtjLHgrZCxiK20pLm5vcm1hbGl6ZSgpLGVbM10uc2V0Q29tcG9uZW50cyhhLXMsaC1jLHgtZCxiLW0pLm5vcm1hbGl6ZSgpLGVbNF0uc2V0Q29tcG9uZW50cyhhLW8saC11LHgtZyxiLXApLm5vcm1hbGl6ZSgpLGVbNV0uc2V0Q29tcG9uZW50cyhhK28saCt1LHgrZyxiK3ApLm5vcm1hbGl6ZSgpLHRoaXN9aW50ZXJzZWN0c09iamVjdCh0KXtsZXQgZT10Lmdlb21ldHJ5O3JldHVybiBlLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmZS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxUci5jb3B5KGUuYm91bmRpbmdTcGhlcmUpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoVHIpfWludGVyc2VjdHNTcHJpdGUodCl7cmV0dXJuIFRyLmNlbnRlci5zZXQoMCwwLDApLFRyLnJhZGl1cz0uNzA3MTA2NzgxMTg2NTQ3NixUci5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKFRyKX1pbnRlcnNlY3RzU3BoZXJlKHQpe2xldCBlPXRoaXMucGxhbmVzLGk9dC5jZW50ZXIscj0tdC5yYWRpdXM7Zm9yKGxldCBzPTA7czw2O3MrKylpZihlW3NdLmRpc3RhbmNlVG9Qb2ludChpKTxyKXJldHVybiExO3JldHVybiEwfWludGVyc2VjdHNCb3godCl7bGV0IGU9dGhpcy5wbGFuZXM7Zm9yKGxldCBpPTA7aTw2O2krKyl7bGV0IHI9ZVtpXTtpZih6YS54PXIubm9ybWFsLng+MD90Lm1heC54OnQubWluLngsemEueT1yLm5vcm1hbC55PjA/dC5tYXgueTp0Lm1pbi55LHphLno9ci5ub3JtYWwuej4wP3QubWF4Lno6dC5taW4ueixyLmRpc3RhbmNlVG9Qb2ludCh6YSk8MClyZXR1cm4hMX1yZXR1cm4hMH1jb250YWluc1BvaW50KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspaWYoZVtpXS5kaXN0YW5jZVRvUG9pbnQodCk8MClyZXR1cm4hMTtyZXR1cm4hMH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTtmdW5jdGlvbiBnMCgpe2xldCBuPW51bGwsdD0hMSxlPW51bGwsaT1udWxsO2Z1bmN0aW9uIHIocyxvKXtlKHMsbyksaT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZShyKX1yZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXt0IT09ITAmJmUhPT1udWxsJiYoaT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZShyKSx0PSEwKX0sc3RvcDpmdW5jdGlvbigpe24uY2FuY2VsQW5pbWF0aW9uRnJhbWUoaSksdD0hMX0sc2V0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbihzKXtlPXN9LHNldENvbnRleHQ6ZnVuY3Rpb24ocyl7bj1zfX19ZnVuY3Rpb24gdk0obix0KXtsZXQgZT10LmlzV2ViR0wyLGk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gcihjLHUpe2xldCBoPWMuYXJyYXksZj1jLnVzYWdlLGQ9bi5jcmVhdGVCdWZmZXIoKTtuLmJpbmRCdWZmZXIodSxkKSxuLmJ1ZmZlckRhdGEodSxoLGYpLGMub25VcGxvYWRDYWxsYmFjaygpO2xldCBnPTUxMjY7cmV0dXJuIGggaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXk/Zz01MTI2OmggaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXk/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVuc3VwcG9ydGVkIGRhdGEgYnVmZmVyIGZvcm1hdDogRmxvYXQ2NEFycmF5LiIpOmggaW5zdGFuY2VvZiBVaW50MTZBcnJheT9jLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZT9lP2c9NTEzMTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQXR0cmlidXRlczogVXNhZ2Ugb2YgRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBXZWJHTDIuIik6Zz01MTIzOmggaW5zdGFuY2VvZiBJbnQxNkFycmF5P2c9NTEyMjpoIGluc3RhbmNlb2YgVWludDMyQXJyYXk/Zz01MTI1OmggaW5zdGFuY2VvZiBJbnQzMkFycmF5P2c9NTEyNDpoIGluc3RhbmNlb2YgSW50OEFycmF5P2c9NTEyMDooaCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fGggaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkmJihnPTUxMjEpLHtidWZmZXI6ZCx0eXBlOmcsYnl0ZXNQZXJFbGVtZW50OmguQllURVNfUEVSX0VMRU1FTlQsdmVyc2lvbjpjLnZlcnNpb259fWZ1bmN0aW9uIHMoYyx1LGgpe2xldCBmPXUuYXJyYXksZD11LnVwZGF0ZVJhbmdlO24uYmluZEJ1ZmZlcihoLGMpLGQuY291bnQ9PT0tMT9uLmJ1ZmZlclN1YkRhdGEoaCwwLGYpOihlP24uYnVmZmVyU3ViRGF0YShoLGQub2Zmc2V0KmYuQllURVNfUEVSX0VMRU1FTlQsZixkLm9mZnNldCxkLmNvdW50KTpuLmJ1ZmZlclN1YkRhdGEoaCxkLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYuc3ViYXJyYXkoZC5vZmZzZXQsZC5vZmZzZXQrZC5jb3VudCkpLGQuY291bnQ9LTEpfWZ1bmN0aW9uIG8oYyl7cmV0dXJuIGMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKSxpLmdldChjKX1mdW5jdGlvbiBhKGMpe2MuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgdT1pLmdldChjKTt1JiYobi5kZWxldGVCdWZmZXIodS5idWZmZXIpLGkuZGVsZXRlKGMpKX1mdW5jdGlvbiBsKGMsdSl7aWYoYy5pc0dMQnVmZmVyQXR0cmlidXRlKXtsZXQgZj1pLmdldChjKTsoIWZ8fGYudmVyc2lvbjxjLnZlcnNpb24pJiZpLnNldChjLHtidWZmZXI6Yy5idWZmZXIsdHlwZTpjLnR5cGUsYnl0ZXNQZXJFbGVtZW50OmMuZWxlbWVudFNpemUsdmVyc2lvbjpjLnZlcnNpb259KTtyZXR1cm59Yy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoYz1jLmRhdGEpO2xldCBoPWkuZ2V0KGMpO2g9PT12b2lkIDA/aS5zZXQoYyxyKGMsdSkpOmgudmVyc2lvbjxjLnZlcnNpb24mJihzKGguYnVmZmVyLGMsdSksaC52ZXJzaW9uPWMudmVyc2lvbil9cmV0dXJue2dldDpvLHJlbW92ZTphLHVwZGF0ZTpsfX12YXIgbG89Y2xhc3MgZXh0ZW5kcyBIdHtjb25zdHJ1Y3Rvcih0PTEsZT0xLGk9MSxyPTEpe3N1cGVyKCksdGhpcy50eXBlPSJQbGFuZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOnQsaGVpZ2h0OmUsd2lkdGhTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOnJ9O2xldCBzPXQvMixvPWUvMixhPU1hdGguZmxvb3IoaSksbD1NYXRoLmZsb29yKHIpLGM9YSsxLHU9bCsxLGg9dC9hLGY9ZS9sLGQ9W10sZz1bXSx4PVtdLHY9W107Zm9yKGxldCBtPTA7bTx1O20rKyl7bGV0IHA9bSpmLW87Zm9yKGxldCBiPTA7YjxjO2IrKyl7bGV0IF89YipoLXM7Zy5wdXNoKF8sLXAsMCkseC5wdXNoKDAsMCwxKSx2LnB1c2goYi9hKSx2LnB1c2goMS1tL2wpfX1mb3IobGV0IG09MDttPGw7bSsrKWZvcihsZXQgcD0wO3A8YTtwKyspe2xldCBiPXArYyptLF89cCtjKihtKzEpLFM9cCsxK2MqKG0rMSksTD1wKzErYyptO2QucHVzaChiLF8sTCksZC5wdXNoKF8sUyxMKX10aGlzLnNldEluZGV4KGQpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKGcsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBlZSh4LDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZSh2LDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBsbyh0LndpZHRoLHQuaGVpZ2h0LHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzKX19LF9NPWAjaWZkZWYgVVNFX0FMUEhBTUFQCglkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nOwojZW5kaWZgLHdNPWAjaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCxNTT1gI2lmZGVmIFVTRV9BTFBIQVRFU1QKCWlmICggZGlmZnVzZUNvbG9yLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkOwojZW5kaWZgLGJNPWAjaWZkZWYgVVNFX0FMUEhBVEVTVAoJdW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7CiNlbmRpZmAsU009YCNpZmRlZiBVU0VfQU9NQVAKCWZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uOwoJI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApCgkJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9jY2x1c2lvbiwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjZW5kaWYKI2VuZGlmYCxFTT1gI2lmZGVmIFVTRV9BT01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7Cgl1bmlmb3JtIGZsb2F0IGFvTWFwSW50ZW5zaXR5OwojZW5kaWZgLFRNPSJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTsiLEFNPWB2ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApOwojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgb2JqZWN0VGFuZ2VudCA9IHZlYzMoIHRhbmdlbnQueHl6ICk7CiNlbmRpZmAsQ009YHZlYzMgQlJERl9MYW1iZXJ0KCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogZGlmZnVzZUNvbG9yOwp9CnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IGRvdFZIICkgewoJZmxvYXQgZnJlc25lbCA9IGV4cDIoICggLSA1LjU1NDczICogZG90VkggLSA2Ljk4MzE2ICkgKiBkb3RWSCApOwoJcmV0dXJuIGYwICogKCAxLjAgLSBmcmVzbmVsICkgKyAoIGY5MCAqIGZyZXNuZWwgKTsKfQpmbG9hdCBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBndiA9IGRvdE5MICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROViApICk7CglmbG9hdCBnbCA9IGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7CglyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7Cn0KZmxvYXQgRF9HR1goIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGEyID0gcG93MiggYWxwaGEgKTsKCWZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogYTIgLyBwb3cyKCBkZW5vbSApOwp9CnZlYzMgQlJERl9HR1goIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApOwoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApOwoJZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTsKCXZlYzMgRiA9IEZfU2NobGljayggZjAsIGY5MCwgZG90VkggKTsKCWZsb2F0IFYgPSBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGFscGhhLCBkb3ROTCwgZG90TlYgKTsKCWZsb2F0IEQgPSBEX0dHWCggYWxwaGEsIGRvdE5IICk7CglyZXR1cm4gRiAqICggViAqIEQgKTsKfQp2ZWMyIExUQ19VdiggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWNvbnN0IGZsb2F0IExVVF9TSVpFID0gNjQuMDsKCWNvbnN0IGZsb2F0IExVVF9TQ0FMRSA9ICggTFVUX1NJWkUgLSAxLjAgKSAvIExVVF9TSVpFOwoJY29uc3QgZmxvYXQgTFVUX0JJQVMgPSAwLjUgLyBMVVRfU0laRTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggTiwgViApICk7Cgl2ZWMyIHV2ID0gdmVjMiggcm91Z2huZXNzLCBzcXJ0KCAxLjAgLSBkb3ROViApICk7Cgl1diA9IHV2ICogTFVUX1NDQUxFICsgTFVUX0JJQVM7CglyZXR1cm4gdXY7Cn0KZmxvYXQgTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIGYgKSB7CglmbG9hdCBsID0gbGVuZ3RoKCBmICk7CglyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7Cn0KdmVjMyBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgdjEsIGNvbnN0IGluIHZlYzMgdjIgKSB7CglmbG9hdCB4ID0gZG90KCB2MSwgdjIgKTsKCWZsb2F0IHkgPSBhYnMoIHggKTsKCWZsb2F0IGEgPSAwLjg1NDM5ODUgKyAoIDAuNDk2NTE1NSArIDAuMDE0NTIwNiAqIHkgKSAqIHk7CglmbG9hdCBiID0gMy40MTc1OTQwICsgKCA0LjE2MTY3MjQgKyB5ICkgKiB5OwoJZmxvYXQgdiA9IGEgLyBiOwoJZmxvYXQgdGhldGFfc2ludGhldGEgPSAoIHggPiAwLjAgKSA/IHYgOiAwLjUgKiBpbnZlcnNlc3FydCggbWF4KCAxLjAgLSB4ICogeCwgMWUtNyApICkgLSB2OwoJcmV0dXJuIGNyb3NzKCB2MSwgdjIgKSAqIHRoZXRhX3NpbnRoZXRhOwp9CnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0IGluIHZlYzMgcmVjdENvb3Jkc1sgNCBdICkgewoJdmVjMyB2MSA9IHJlY3RDb29yZHNbIDEgXSAtIHJlY3RDb29yZHNbIDAgXTsKCXZlYzMgdjIgPSByZWN0Q29vcmRzWyAzIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIGxpZ2h0Tm9ybWFsID0gY3Jvc3MoIHYxLCB2MiApOwoJaWYoIGRvdCggbGlnaHROb3JtYWwsIFAgLSByZWN0Q29vcmRzWyAwIF0gKSA8IDAuMCApIHJldHVybiB2ZWMzKCAwLjAgKTsKCXZlYzMgVDEsIFQyOwoJVDEgPSBub3JtYWxpemUoIFYgLSBOICogZG90KCBWLCBOICkgKTsKCVQyID0gLSBjcm9zcyggTiwgVDEgKTsKCW1hdDMgbWF0ID0gbUludiAqIHRyYW5zcG9zZU1hdDMoIG1hdDMoIFQxLCBUMiwgTiApICk7Cgl2ZWMzIGNvb3Jkc1sgNCBdOwoJY29vcmRzWyAwIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDAgXSAtIFAgKTsKCWNvb3Jkc1sgMSBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAxIF0gLSBQICk7Cgljb29yZHNbIDIgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMiBdIC0gUCApOwoJY29vcmRzWyAzIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDMgXSAtIFAgKTsKCWNvb3Jkc1sgMCBdID0gbm9ybWFsaXplKCBjb29yZHNbIDAgXSApOwoJY29vcmRzWyAxIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7Cgljb29yZHNbIDIgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAyIF0gKTsKCWNvb3Jkc1sgMyBdID0gbm9ybWFsaXplKCBjb29yZHNbIDMgXSApOwoJdmVjMyB2ZWN0b3JGb3JtRmFjdG9yID0gdmVjMyggMC4wICk7Cgl2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAwIF0sIGNvb3Jkc1sgMSBdICk7Cgl2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAxIF0sIGNvb3Jkc1sgMiBdICk7Cgl2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jkc1sgMyBdICk7Cgl2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAzIF0sIGNvb3Jkc1sgMCBdICk7CglmbG9hdCByZXN1bHQgPSBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIHZlY3RvckZvcm1GYWN0b3IgKTsKCXJldHVybiB2ZWMzKCByZXN1bHQgKTsKfQpmbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkgewoJcmV0dXJuIDAuMjU7Cn0KZmxvYXQgRF9CbGlublBob25nKCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkgewoJcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7Cn0KdmVjMyBCUkRGX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIDEuMCwgZG90VkggKTsKCWZsb2F0IEcgPSBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICk7CglmbG9hdCBEID0gRF9CbGlublBob25nKCBzaGluaW5lc3MsIGRvdE5IICk7CglyZXR1cm4gRiAqICggRyAqIEQgKTsKfQojaWYgZGVmaW5lZCggVVNFX1NIRUVOICkKZmxvYXQgRF9DaGFybGllKCBmbG9hdCByb3VnaG5lc3MsIGZsb2F0IGRvdE5IICkgewoJZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTsKCWZsb2F0IGludkFscGhhID0gMS4wIC8gYWxwaGE7CglmbG9hdCBjb3MyaCA9IGRvdE5IICogZG90Tkg7CglmbG9hdCBzaW4yaCA9IG1heCggMS4wIC0gY29zMmgsIDAuMDA3ODEyNSApOwoJcmV0dXJuICggMi4wICsgaW52QWxwaGEgKSAqIHBvdyggc2luMmgsIGludkFscGhhICogMC41ICkgLyAoIDIuMCAqIFBJICk7Cn0KZmxvYXQgVl9OZXViZWx0KCBmbG9hdCBkb3ROViwgZmxvYXQgZG90TkwgKSB7CglyZXR1cm4gc2F0dXJhdGUoIDEuMCAvICggNC4wICogKCBkb3ROTCArIGRvdE5WIC0gZG90TkwgKiBkb3ROViApICkgKTsKfQp2ZWMzIEJSREZfU2hlZW4oIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIHZlYzMgc2hlZW5Db2xvciwgY29uc3QgaW4gZmxvYXQgc2hlZW5Sb3VnaG5lc3MgKSB7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IEQgPSBEX0NoYXJsaWUoIHNoZWVuUm91Z2huZXNzLCBkb3ROSCApOwoJZmxvYXQgViA9IFZfTmV1YmVsdCggZG90TlYsIGRvdE5MICk7CglyZXR1cm4gc2hlZW5Db2xvciAqICggRCAqIFYgKTsKfQojZW5kaWZgLFJNPWAjaWZkZWYgVVNFX0JVTVBNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBNYXA7Cgl1bmlmb3JtIGZsb2F0IGJ1bXBTY2FsZTsKCXZlYzIgZEhkeHlfZndkKCkgewoJCXZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTsKCQl2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7CgkJZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54OwoJCWZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsOwoJCWZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsOwoJCXJldHVybiB2ZWMyKCBkQngsIGRCeSApOwoJfQoJdmVjMyBwZXJ0dXJiTm9ybWFsQXJiKCB2ZWMzIHN1cmZfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMiBkSGR4eSwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHsKCQl2ZWMzIHZTaWdtYVggPSB2ZWMzKCBkRmR4KCBzdXJmX3Bvcy54ICksIGRGZHgoIHN1cmZfcG9zLnkgKSwgZEZkeCggc3VyZl9wb3MueiApICk7CgkJdmVjMyB2U2lnbWFZID0gdmVjMyggZEZkeSggc3VyZl9wb3MueCApLCBkRmR5KCBzdXJmX3Bvcy55ICksIGRGZHkoIHN1cmZfcG9zLnogKSApOwoJCXZlYzMgdk4gPSBzdXJmX25vcm07CgkJdmVjMyBSMSA9IGNyb3NzKCB2U2lnbWFZLCB2TiApOwoJCXZlYzMgUjIgPSBjcm9zcyggdk4sIHZTaWdtYVggKTsKCQlmbG9hdCBmRGV0ID0gZG90KCB2U2lnbWFYLCBSMSApICogZmFjZURpcmVjdGlvbjsKCQl2ZWMzIHZHcmFkID0gc2lnbiggZkRldCApICogKCBkSGR4eS54ICogUjEgKyBkSGR4eS55ICogUjIgKTsKCQlyZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7Cgl9CiNlbmRpZmAsTE09YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmVjNCBwbGFuZTsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHsKCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJaWYgKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVMKCQlib29sIGNsaXBwZWQgPSB0cnVlOwoJCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCQlmb3IgKCBpbnQgaSA9IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSA8IE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJCXBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTsKCQkJY2xpcHBlZCA9ICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJCWlmICggY2xpcHBlZCApIGRpc2NhcmQ7CgkjZW5kaWYKI2VuZGlmYCxQTT1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjsKCXVuaWZvcm0gdmVjNCBjbGlwcGluZ1BsYW5lc1sgTlVNX0NMSVBQSU5HX1BMQU5FUyBdOwojZW5kaWZgLERNPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uOwojZW5kaWZgLElNPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZDbGlwUG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWZgLE5NPWAjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkKCWRpZmZ1c2VDb2xvciAqPSB2Q29sb3I7CiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApCglkaWZmdXNlQ29sb3IucmdiICo9IHZDb2xvcjsKI2VuZGlmYCxGTT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2YXJ5aW5nIHZlYzQgdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJdmFyeWluZyB2ZWMzIHZDb2xvcjsKI2VuZGlmYCx6TT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2YXJ5aW5nIHZlYzQgdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLFVNPWAjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkKCXZDb2xvciA9IHZlYzQoIDEuMCApOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApCgl2Q29sb3IgPSB2ZWMzKCAxLjAgKTsKI2VuZGlmCiNpZmRlZiBVU0VfQ09MT1IKCXZDb2xvciAqPSBjb2xvcjsKI2VuZGlmCiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUgoJdkNvbG9yLnh5eiAqPSBpbnN0YW5jZUNvbG9yLnh5ejsKI2VuZGlmYCxCTT1gI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5MwojZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE3OTU4NgojZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ4OTY2CiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDcKI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0MzA5MTg5NTM1CiNkZWZpbmUgRVBTSUxPTiAxZS02CiNpZm5kZWYgc2F0dXJhdGUKI2RlZmluZSBzYXR1cmF0ZSggYSApIGNsYW1wKCBhLCAwLjAsIDEuMCApCiNlbmRpZgojZGVmaW5lIHdoaXRlQ29tcGxlbWVudCggYSApICggMS4wIC0gc2F0dXJhdGUoIGEgKSApCmZsb2F0IHBvdzIoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4Kng7IH0KZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9CmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH0KZmxvYXQgbWF4MyggY29uc3QgaW4gdmVjMyB2ICkgeyByZXR1cm4gbWF4KCBtYXgoIHYueCwgdi55ICksIHYueiApOyB9CmZsb2F0IGF2ZXJhZ2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7IHJldHVybiBkb3QoIGNvbG9yLCB2ZWMzKCAwLjMzMzMgKSApOyB9CmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7Cgljb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7CgloaWdocCBmbG9hdCBkdCA9IGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuID0gbW9kKCBkdCwgUEkgKTsKCXJldHVybiBmcmFjdCggc2luKCBzbiApICogYyApOwp9CiNpZmRlZiBISUdIX1BSRUNJU0lPTgoJZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkgeyByZXR1cm4gbGVuZ3RoKCB2ICk7IH0KI2Vsc2UKCWZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsKCQlmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgzKCBhYnMoIHYgKSApOwoJCXJldHVybiBsZW5ndGgoIHYgLyBtYXhDb21wb25lbnQgKSAqIG1heENvbXBvbmVudDsKCX0KI2VuZGlmCnN0cnVjdCBJbmNpZGVudExpZ2h0IHsKCXZlYzMgY29sb3I7Cgl2ZWMzIGRpcmVjdGlvbjsKCWJvb2wgdmlzaWJsZTsKfTsKc3RydWN0IFJlZmxlY3RlZExpZ2h0IHsKCXZlYzMgZGlyZWN0RGlmZnVzZTsKCXZlYzMgZGlyZWN0U3BlY3VsYXI7Cgl2ZWMzIGluZGlyZWN0RGlmZnVzZTsKCXZlYzMgaW5kaXJlY3RTcGVjdWxhcjsKfTsKc3RydWN0IEdlb21ldHJpY0NvbnRleHQgewoJdmVjMyBwb3NpdGlvbjsKCXZlYzMgbm9ybWFsOwoJdmVjMyB2aWV3RGlyOwojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdmVjMyBjbGVhcmNvYXROb3JtYWw7CiNlbmRpZgp9Owp2ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7Cn0KdmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CglyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXggKS54eXogKTsKfQptYXQzIHRyYW5zcG9zZU1hdDMoIGNvbnN0IGluIG1hdDMgbSApIHsKCW1hdDMgdG1wOwoJdG1wWyAwIF0gPSB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBdLngsIG1bIDIgXS54ICk7Cgl0bXBbIDEgXSA9IHZlYzMoIG1bIDAgXS55LCBtWyAxIF0ueSwgbVsgMiBdLnkgKTsKCXRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApOwoJcmV0dXJuIHRtcDsKfQpmbG9hdCBsaW5lYXJUb1JlbGF0aXZlTHVtaW5hbmNlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgewoJdmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApOwoJcmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7Cn0KYm9vbCBpc1BlcnNwZWN0aXZlTWF0cml4KCBtYXQ0IG0gKSB7CglyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7Cn0KdmVjMiBlcXVpcmVjdFV2KCBpbiB2ZWMzIGRpciApIHsKCWZsb2F0IHUgPSBhdGFuKCBkaXIueiwgZGlyLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41OwoJZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41OwoJcmV0dXJuIHZlYzIoIHUsIHYgKTsKfWAsT009YCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWCgkjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjAKCSNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMAoJI2RlZmluZSBjdWJlVVZfbWF4VGlsZVNpemUgMjU2LjAKCSNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjAKCWZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkgewoJCXZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmYWNlID0gLSAxLjA7CgkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkgewoJCQlpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKQoJCQkJZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wOwoJCQllbHNlCgkJCQlmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7CgkJfSBlbHNlIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0KCQlyZXR1cm4gZmFjZTsKCX0KCXZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkgewoJCXZlYzIgdXY7CgkJaWYgKCBmYWNlID09IDAuMCApIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9CgkJcmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTsKCX0KCXZlYzMgYmlsaW5lYXJDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBtaXBJbnQgKSB7CgkJZmxvYXQgZmFjZSA9IGdldEZhY2UoIGRpcmVjdGlvbiApOwoJCWZsb2F0IGZpbHRlckludCA9IG1heCggY3ViZVVWX21pbk1pcExldmVsIC0gbWlwSW50LCAwLjAgKTsKCQltaXBJbnQgPSBtYXgoIG1pcEludCwgY3ViZVVWX21pbk1pcExldmVsICk7CgkJZmxvYXQgZmFjZVNpemUgPSBleHAyKCBtaXBJbnQgKTsKCQlmbG9hdCB0ZXhlbFNpemUgPSAxLjAgLyAoIDMuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZSApOwoJCXZlYzIgdXYgPSBnZXRVViggZGlyZWN0aW9uLCBmYWNlICkgKiAoIGZhY2VTaXplIC0gMS4wICkgKyAwLjU7CgkJaWYgKCBmYWNlID4gMi4wICkgewoJCQl1di55ICs9IGZhY2VTaXplOwoJCQlmYWNlIC09IDMuMDsKCQl9CgkJdXYueCArPSBmYWNlICogZmFjZVNpemU7CgkJaWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7CgkJCXV2LnkgKz0gMi4wICogY3ViZVVWX21heFRpbGVTaXplOwoJCX0KCQl1di55ICs9IGZpbHRlckludCAqIDIuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTsKCQl1di54ICs9IDMuMCAqIG1heCggMC4wLCBjdWJlVVZfbWF4VGlsZVNpemUgLSAyLjAgKiBmYWNlU2l6ZSApOwoJCXV2ICo9IHRleGVsU2l6ZTsKCQlyZXR1cm4gdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkucmdiOwoJfQoJI2RlZmluZSByMCAxLjAKCSNkZWZpbmUgdjAgMC4zMzkKCSNkZWZpbmUgbTAgLSAyLjAKCSNkZWZpbmUgcjEgMC44CgkjZGVmaW5lIHYxIDAuMjc2CgkjZGVmaW5lIG0xIC0gMS4wCgkjZGVmaW5lIHI0IDAuNAoJI2RlZmluZSB2NCAwLjA0NgoJI2RlZmluZSBtNCAyLjAKCSNkZWZpbmUgcjUgMC4zMDUKCSNkZWZpbmUgdjUgMC4wMTYKCSNkZWZpbmUgbTUgMy4wCgkjZGVmaW5lIHI2IDAuMjEKCSNkZWZpbmUgdjYgMC4wMDM4CgkjZGVmaW5lIG02IDQuMAoJZmxvYXQgcm91Z2huZXNzVG9NaXAoIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSAwLjA7CgkJaWYgKCByb3VnaG5lc3MgPj0gcjEgKSB7CgkJCW1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7CgkJCW1pcCA9ICggcjEgLSByb3VnaG5lc3MgKSAqICggbTQgLSBtMSApIC8gKCByMSAtIHI0ICkgKyBtMTsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjUgKSB7CgkJCW1pcCA9ICggcjQgLSByb3VnaG5lc3MgKSAqICggbTUgLSBtNCApIC8gKCByNCAtIHI1ICkgKyBtNDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjYgKSB7CgkJCW1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTsKCQl9IGVsc2UgewoJCQltaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTsJCX0KCQlyZXR1cm4gbWlwOwoJfQoJdmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHNhbXBsZURpciwgZmxvYXQgcm91Z2huZXNzICkgewoJCWZsb2F0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIG0wLCBjdWJlVVZfbWF4TWlwTGV2ZWwgKTsKCQlmbG9hdCBtaXBGID0gZnJhY3QoIG1pcCApOwoJCWZsb2F0IG1pcEludCA9IGZsb29yKCBtaXAgKTsKCQl2ZWMzIGNvbG9yMCA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICk7CgkJaWYgKCBtaXBGID09IDAuMCApIHsKCQkJcmV0dXJuIHZlYzQoIGNvbG9yMCwgMS4wICk7CgkJfSBlbHNlIHsKCQkJdmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApOwoJCQlyZXR1cm4gdmVjNCggbWl4KCBjb2xvcjAsIGNvbG9yMSwgbWlwRiApLCAxLjAgKTsKCQl9Cgl9CiNlbmRpZmAsa009YHZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBvYmplY3ROb3JtYWw7CiNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJbWF0MyBtID0gbWF0MyggaW5zdGFuY2VNYXRyaXggKTsKCXRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTsKCXRyYW5zZm9ybWVkTm9ybWFsID0gbSAqIHRyYW5zZm9ybWVkTm9ybWFsOwojZW5kaWYKdHJhbnNmb3JtZWROb3JtYWwgPSBub3JtYWxNYXRyaXggKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2lmZGVmIEZMSVBfU0lERUQKCXRyYW5zZm9ybWVkTm9ybWFsID0gLSB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCiNpZmRlZiBVU0VfVEFOR0VOVAoJdmVjMyB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAoIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6OwoJI2lmZGVmIEZMSVBfU0lERUQKCQl0cmFuc2Zvcm1lZFRhbmdlbnQgPSAtIHRyYW5zZm9ybWVkVGFuZ2VudDsKCSNlbmRpZgojZW5kaWZgLEhNPWAjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwOwoJdW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTsKCXVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50QmlhczsKI2VuZGlmYCxWTT1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB2VXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7CiNlbmRpZmAsR009YCNpZmRlZiBVU0VfRU1JU1NJVkVNQVAKCXZlYzQgZW1pc3NpdmVDb2xvciA9IHRleHR1cmUyRCggZW1pc3NpdmVNYXAsIHZVdiApOwoJdG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiOwojZW5kaWZgLFdNPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDsKI2VuZGlmYCxxTT0iZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7IixYTT1gdmVjNCBMaW5lYXJUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHsKCXJldHVybiB2YWx1ZTsKfQp2ZWM0IExpbmVhclRvc1JHQiggaW4gdmVjNCB2YWx1ZSApIHsKCXJldHVybiB2ZWM0KCBtaXgoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMyggMC4wNTUgKSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wMDMxMzA4ICkgKSApICksIHZhbHVlLmEgKTsKfWAsWU09YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdmVjMyBjYW1lcmFUb0ZyYWc7CgkJaWYgKCBpc09ydGhvZ3JhcGhpYyApIHsKCQkJY2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTsKCQl9IGVsc2UgewoJCQljYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZXb3JsZFBvc2l0aW9uIC0gY2FtZXJhUG9zaXRpb24gKTsKCQl9CgkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCXZlYzMgcmVmbGVjdFZlYyA9IHJlZmxlY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwgKTsKCQkjZWxzZQoJCQl2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTsKCQkjZW5kaWYKCSNlbHNlCgkJdmVjMyByZWZsZWN0VmVjID0gdlJlZmxlY3Q7CgkjZW5kaWYKCSNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFCgkJdmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJdmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgMC4wICk7CgkjZWxzZQoJCXZlYzQgZW52Q29sb3IgPSB2ZWM0KCAwLjAgKTsKCSNlbmRpZgoJI2lmZGVmIEVOVk1BUF9CTEVORElOR19NVUxUSVBMWQoJCW91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIG91dGdvaW5nTGlnaHQgKiBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19NSVggKQoJCW91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApCgkJb3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5OwoJI2VuZGlmCiNlbmRpZmAsWk09YCNpZmRlZiBVU0VfRU5WTUFQCgl1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTsKCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCSNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFCgkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgkjZWxzZQoJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCSNlbmRpZgoJCiNlbmRpZmAsSk09YCNpZmRlZiBVU0VfRU5WTUFQCgl1bmlmb3JtIGZsb2F0IHJlZmxlY3Rpdml0eTsKCSNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApCgkJI2RlZmluZSBFTlZfV09STERQT1MKCSNlbmRpZgoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCQl1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbzsKCSNlbHNlCgkJdmFyeWluZyB2ZWMzIHZSZWZsZWN0OwoJI2VuZGlmCiNlbmRpZmAsJE09YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApCgkJI2RlZmluZSBFTlZfV09STERQT1MKCSNlbmRpZgoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCQoJCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCSNlbHNlCgkJdmFyeWluZyB2ZWMzIHZSZWZsZWN0OwoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCiNlbmRpZmAsS009YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKCSNlbHNlCgkJdmVjMyBjYW1lcmFUb1ZlcnRleDsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTsKCQl9CgkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdlJlZmxlY3QgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTsKCQkjZWxzZQoJCQl2UmVmbGVjdCA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCxRTT1gI2lmZGVmIFVTRV9GT0cKCXZGb2dEZXB0aCA9IC0gbXZQb3NpdGlvbi56OwojZW5kaWZgLGpNPWAjaWZkZWYgVVNFX0ZPRwoJdmFyeWluZyBmbG9hdCB2Rm9nRGVwdGg7CiNlbmRpZmAsdGI9YCNpZmRlZiBVU0VfRk9HCgkjaWZkZWYgRk9HX0VYUDIKCQlmbG9hdCBmb2dGYWN0b3IgPSAxLjAgLSBleHAoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiB2Rm9nRGVwdGggKiB2Rm9nRGVwdGggKTsKCSNlbHNlCgkJZmxvYXQgZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCB2Rm9nRGVwdGggKTsKCSNlbmRpZgoJZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApOwojZW5kaWZgLGViPWAjaWZkZWYgVVNFX0ZPRwoJdW5pZm9ybSB2ZWMzIGZvZ0NvbG9yOwoJdmFyeWluZyBmbG9hdCB2Rm9nRGVwdGg7CgkjaWZkZWYgRk9HX0VYUDIKCQl1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7CgkjZWxzZQoJCXVuaWZvcm0gZmxvYXQgZm9nTmVhcjsKCQl1bmlmb3JtIGZsb2F0IGZvZ0ZhcjsKCSNlbmRpZgojZW5kaWZgLG5iPWAjaWZkZWYgVVNFX0dSQURJRU5UTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDsKI2VuZGlmCnZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHsKCWZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7Cgl2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApOwoJI2lmZGVmIFVTRV9HUkFESUVOVE1BUAoJCXJldHVybiB2ZWMzKCB0ZXh0dXJlMkQoIGdyYWRpZW50TWFwLCBjb29yZCApLnIgKTsKCSNlbHNlCgkJcmV0dXJuICggY29vcmQueCA8IDAuNyApID8gdmVjMyggMC43ICkgOiB2ZWMzKCAxLjAgKTsKCSNlbmRpZgp9YCxpYj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTCgkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwojZW5kaWZgLHJiPWAjaWZkZWYgVVNFX0xJR0hUTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBsaWdodE1hcDsKCXVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7CiNlbmRpZmAsc2I9YHZlYzMgZGlmZnVzZSA9IHZlYzMoIDEuMCApOwpHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5OwpnZW9tZXRyeS5wb3NpdGlvbiA9IG12UG9zaXRpb24ueHl6OwpnZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7Cmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApOwpHZW9tZXRyaWNDb250ZXh0IGJhY2tHZW9tZXRyeTsKYmFja0dlb21ldHJ5LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsOwpiYWNrR2VvbWV0cnkudmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7CnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7CnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTsKCXZJbmRpcmVjdEJhY2sgPSB2ZWMzKCAwLjAgKTsKI2VuZGlmCkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7CmZsb2F0IGRvdE5MOwp2ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKdkluZGlyZWN0RnJvbnQgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKdkluZGlyZWN0RnJvbnQgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApOwojaWZkZWYgRE9VQkxFX1NJREVECgl2SW5kaXJlY3RCYWNrICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7Cgl2SW5kaXJlY3RCYWNrICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBiYWNrR2VvbWV0cnkubm9ybWFsICk7CiNlbmRpZgojaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX0RJUl9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHsKCQlnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHsKCQl2SW5kaXJlY3RGcm9udCArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5Lm5vcm1hbCApOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkluZGlyZWN0QmFjayArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZmAsb2I9YHVuaWZvcm0gYm9vbCByZWNlaXZlU2hhZG93Owp1bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7CnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07CnZlYzMgc2hHZXRJcnJhZGlhbmNlQXQoIGluIHZlYzMgbm9ybWFsLCBpbiB2ZWMzIHNoQ29lZmZpY2llbnRzWyA5IF0gKSB7CglmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56OwoJdmVjMyByZXN1bHQgPSBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7CglyZXR1cm4gcmVzdWx0Owp9CnZlYzMgZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbGlnaHRQcm9iZVsgOSBdLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KdmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkgewoJdmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7CglyZXR1cm4gaXJyYWRpYW5jZTsKfQpmbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHsKCSNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApCgkJZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApOwoJCWlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7CgkJCWRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApOwoJCX0KCQlyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmOwoJI2Vsc2UKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjAgKSB7CgkJCXJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7CgkJfQoJCXJldHVybiAxLjA7CgkjZW5kaWYKfQpmbG9hdCBnZXRTcG90QXR0ZW51YXRpb24oIGNvbnN0IGluIGZsb2F0IGNvbmVDb3NpbmUsIGNvbnN0IGluIGZsb2F0IHBlbnVtYnJhQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBhbmdsZUNvc2luZSApIHsKCXJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTsKfQojaWYgTlVNX0RJUl9MSUdIVFMgPiAwCglzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCX07Cgl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodHNbIE5VTV9ESVJfTElHSFRTIF07Cgl2b2lkIGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCWxpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjsKCQlsaWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjsKCQlsaWdodC52aXNpYmxlID0gdHJ1ZTsKCX0KI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJc3RydWN0IFBvaW50TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCX07Cgl1bmlmb3JtIFBvaW50TGlnaHQgcG9pbnRMaWdodHNbIE5VTV9QT0lOVF9MSUdIVFMgXTsKCXZvaWQgZ2V0UG9pbnRMaWdodEluZm8oIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7CgkJdmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQlsaWdodC5jb2xvciA9IHBvaW50TGlnaHQuY29sb3I7CgkJbGlnaHQuY29sb3IgKj0gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApOwoJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7Cgl9CiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJc3RydWN0IFNwb3RMaWdodCB7CgkJdmVjMyBwb3NpdGlvbjsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIGNvbG9yOwoJCWZsb2F0IGRpc3RhbmNlOwoJCWZsb2F0IGRlY2F5OwoJCWZsb2F0IGNvbmVDb3M7CgkJZmxvYXQgcGVudW1icmFDb3M7Cgl9OwoJdW5pZm9ybSBTcG90TGlnaHQgc3BvdExpZ2h0c1sgTlVNX1NQT1RfTElHSFRTIF07Cgl2b2lkIGdldFNwb3RMaWdodEluZm8oIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHNwb3RMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGFuZ2xlQ29zID0gZG90KCBsaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBzcG90QXR0ZW51YXRpb24gPSBnZXRTcG90QXR0ZW51YXRpb24oIHNwb3RMaWdodC5jb25lQ29zLCBzcG90TGlnaHQucGVudW1icmFDb3MsIGFuZ2xlQ29zICk7CgkJaWYgKCBzcG90QXR0ZW51YXRpb24gPiAwLjAgKSB7CgkJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQkJbGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247CgkJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7CgkJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7CgkJfSBlbHNlIHsKCQkJbGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTsKCQkJbGlnaHQudmlzaWJsZSA9IGZhbHNlOwoJCX0KCX0KI2VuZGlmCiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAKCXN0cnVjdCBSZWN0QXJlYUxpZ2h0IHsKCQl2ZWMzIGNvbG9yOwoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGg7CgkJdmVjMyBoYWxmSGVpZ2h0OwoJfTsKCXVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xOwl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjsKCXVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXTsKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCglzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIHNreUNvbG9yOwoJCXZlYzMgZ3JvdW5kQ29sb3I7Cgl9OwoJdW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07Cgl2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCWZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41OwoJCXZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7CgkJcmV0dXJuIGlycmFkaWFuY2U7Cgl9CiNlbmRpZmAsYWI9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkKCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZSQUNUSU9OCgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZW5kaWYKCXZlYzMgZ2V0SUJMSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJCXZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHdvcmxkTm9ybWFsLCAxLjAgKTsKCQkJcmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5OwoJCSNlbHNlCgkJCXJldHVybiB2ZWMzKCAwLjAgKTsKCQkjZW5kaWYKCX0KCXZlYzMgZ2V0SUJMUmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCQkjaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJCXZlYzMgcmVmbGVjdFZlYzsKCQkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJCXJlZmxlY3RWZWMgPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApOwoJCQkJcmVmbGVjdFZlYyA9IG5vcm1hbGl6ZSggbWl4KCByZWZsZWN0VmVjLCBub3JtYWwsIHJvdWdobmVzcyAqIHJvdWdobmVzcykgKTsKCQkJI2Vsc2UKCQkJCXJlZmxlY3RWZWMgPSByZWZyYWN0KCAtIHZpZXdEaXIsIG5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJCSNlbmRpZgoJCQlyZWZsZWN0VmVjID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggcmVmbGVjdFZlYywgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCByb3VnaG5lc3MgKTsKCQkJcmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9CiNlbmRpZmAsbGI9YFRvb25NYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtgLGNiPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IFRvb25NYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKfTsKdm9pZCBSRV9EaXJlY3RfVG9vbiggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X1Rvb24KI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9Ub29uCiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKQkoMClgLHViPWBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWw7Cm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7Cm1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBzcGVjdWxhcjsKbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgPSBzaGluaW5lc3M7Cm1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGggPSBzcGVjdWxhclN0cmVuZ3RoO2AsaGI9YHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwpzdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7CglmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwp9Owp2b2lkIFJFX0RpcmVjdF9CbGlublBob25nKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X0JsaW5uUGhvbmcKI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nCiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKQkoMClgLGZiPWBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTsKdmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApOwpmbG9hdCBnZW9tZXRyeVJvdWdobmVzcyA9IG1heCggbWF4KCBkeHkueCwgZHh5LnkgKSwgZHh5LnogKTsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWF4KCByb3VnaG5lc3NGYWN0b3IsIDAuMDUyNSApO21hdGVyaWFsLnJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApOwojaWZkZWYgSU9SCgkjaWZkZWYgU1BFQ1VMQVIKCQlmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5OwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7CgkJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCQlzcGVjdWxhckludGVuc2l0eUZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFySW50ZW5zaXR5TWFwLCB2VXYgKS5hOwoJCSNlbmRpZgoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUAoJCQlzcGVjdWxhckNvbG9yRmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJDb2xvck1hcCwgdlV2ICkucmdiOwoJCSNlbmRpZgoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgMS4wLCBtZXRhbG5lc3NGYWN0b3IgKTsKCSNlbHNlCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSAxLjA7CgkJdmVjMyBzcGVjdWxhckNvbG9yRmFjdG9yID0gdmVjMyggMS4wICk7CgkJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CgkjZW5kaWYKCW1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIG1pbiggcG93MiggKCBpb3IgLSAxLjAgKSAvICggaW9yICsgMS4wICkgKSAqIHNwZWN1bGFyQ29sb3JGYWN0b3IsIHZlYzMoIDEuMCApICkgKiBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7CiNlbHNlCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCAwLjA0ICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwoJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0OwoJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gY2xlYXJjb2F0Um91Z2huZXNzOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRGOTAgPSAxLjA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUAoJCW1hdGVyaWFsLmNsZWFyY29hdCAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE1hcCwgdlV2ICkueDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQCgkJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55OwoJI2VuZGlmCgltYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7CW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1heCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA1MjUgKTsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCW1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yOwoJI2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQCgkJbWF0ZXJpYWwuc2hlZW5Db2xvciAqPSB0ZXh0dXJlMkQoIHNoZWVuQ29sb3JNYXAsIHZVdiApLnJnYjsKCSNlbmRpZgoJbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApOwoJI2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUAoJCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICo9IHRleHR1cmUyRCggc2hlZW5Sb3VnaG5lc3NNYXAsIHZVdiApLmE7CgkjZW5kaWYKI2VuZGlmYCxkYj1gc3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7CglmbG9hdCByb3VnaG5lc3M7Cgl2ZWMzIHNwZWN1bGFyQ29sb3I7CglmbG9hdCBzcGVjdWxhckY5MDsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgY2xlYXJjb2F0OwoJCWZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKCQl2ZWMzIGNsZWFyY29hdEYwOwoJCWZsb2F0IGNsZWFyY29hdEY5MDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9TSEVFTgoJCXZlYzMgc2hlZW5Db2xvcjsKCQlmbG9hdCBzaGVlblJvdWdobmVzczsKCSNlbmRpZgp9Owp2ZWMzIGNsZWFyY29hdFNwZWN1bGFyID0gdmVjMyggMC4wICk7CnZlYzMgc2hlZW5TcGVjdWxhciA9IHZlYzMoIDAuMCApOwpmbG9hdCBJQkxTaGVlbkJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcykgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJZmxvYXQgcjIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7CglmbG9hdCBhID0gcm91Z2huZXNzIDwgMC4yNSA/IC0zMzkuMiAqIHIyICsgMTYxLjQgKiByb3VnaG5lc3MgLSAyNS45IDogLTguNDggKiByMiArIDE0LjMgKiByb3VnaG5lc3MgLSA5Ljk1OwoJZmxvYXQgYiA9IHJvdWdobmVzcyA8IDAuMjUgPyA0NC4wICogcjIgLSAyMy43ICogcm91Z2huZXNzICsgMy4yNiA6IDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyOwoJZmxvYXQgREcgPSBleHAoIGEgKiBkb3ROViArIGIgKSArICggcm91Z2huZXNzIDwgMC4yNSA/IDAuMCA6IDAuMSAqICggcm91Z2huZXNzIC0gMC4yNSApICk7CglyZXR1cm4gc2F0dXJhdGUoIERHICogUkVDSVBST0NBTF9QSSApOwp9CnZlYzIgREZHQXBwcm94KCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7Cgljb25zdCB2ZWM0IGMwID0gdmVjNCggLSAxLCAtIDAuMDI3NSwgLSAwLjU3MiwgMC4wMjIgKTsKCWNvbnN0IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApOwoJdmVjNCByID0gcm91Z2huZXNzICogYzAgKyBjMTsKCWZsb2F0IGEwMDQgPSBtaW4oIHIueCAqIHIueCwgZXhwMiggLSA5LjI4ICogZG90TlYgKSApICogci54ICsgci55OwoJdmVjMiBmYWIgPSB2ZWMyKCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3OwoJcmV0dXJuIGZhYjsKfQp2ZWMzIEVudmlyb25tZW50QlJERiggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJdmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7CglyZXR1cm4gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKfQp2b2lkIGNvbXB1dGVNdWx0aXNjYXR0ZXJpbmcoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgaW5vdXQgdmVjMyBzaW5nbGVTY2F0dGVyLCBpbm91dCB2ZWMzIG11bHRpU2NhdHRlciApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJdmVjMyBGc3NFc3MgPSBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55OwoJZmxvYXQgRXNzID0gZmFiLnggKyBmYWIueTsKCWZsb2F0IEVtcyA9IDEuMCAtIEVzczsKCXZlYzMgRmF2ZyA9IHNwZWN1bGFyQ29sb3IgKyAoIDEuMCAtIHNwZWN1bGFyQ29sb3IgKSAqIDAuMDQ3NjE5Owl2ZWMzIEZtcyA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTsKCXNpbmdsZVNjYXR0ZXIgKz0gRnNzRXNzOwoJbXVsdGlTY2F0dGVyICs9IEZtcyAqIEVtczsKfQojaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwCgl2b2lkIFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbCggY29uc3QgaW4gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCQl2ZWMzIG5vcm1hbCA9IGdlb21ldHJ5Lm5vcm1hbDsKCQl2ZWMzIHZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyOwoJCXZlYzMgcG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjsKCQl2ZWMzIGxpZ2h0UG9zID0gcmVjdEFyZWFMaWdodC5wb3NpdGlvbjsKCQl2ZWMzIGhhbGZXaWR0aCA9IHJlY3RBcmVhTGlnaHQuaGFsZldpZHRoOwoJCXZlYzMgaGFsZkhlaWdodCA9IHJlY3RBcmVhTGlnaHQuaGFsZkhlaWdodDsKCQl2ZWMzIGxpZ2h0Q29sb3IgPSByZWN0QXJlYUxpZ2h0LmNvbG9yOwoJCWZsb2F0IHJvdWdobmVzcyA9IG1hdGVyaWFsLnJvdWdobmVzczsKCQl2ZWMzIHJlY3RDb29yZHNbIDQgXTsKCQlyZWN0Q29vcmRzWyAwIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7CQlyZWN0Q29vcmRzWyAxIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7CgkJcmVjdENvb3Jkc1sgMiBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDMgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQl2ZWMyIHV2ID0gTFRDX1V2KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJCXZlYzQgdDEgPSB0ZXh0dXJlMkQoIGx0Y18xLCB1diApOwoJCXZlYzQgdDIgPSB0ZXh0dXJlMkQoIGx0Y18yLCB1diApOwoJCW1hdDMgbUludiA9IG1hdDMoCgkJCXZlYzMoIHQxLngsIDAsIHQxLnkgKSwKCQkJdmVjMyggICAgMCwgMSwgICAgMCApLAoJCQl2ZWMzKCB0MS56LCAwLCB0MS53ICkKCQkpOwoJCXZlYzMgZnJlc25lbCA9ICggbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIHQyLnggKyAoIHZlYzMoIDEuMCApIC0gbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciApICogdDIueSApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGxpZ2h0Q29sb3IgKiBmcmVzbmVsICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7CgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxLjAgKSwgcmVjdENvb3JkcyApOwoJfQojZW5kaWYKdm9pZCBSRV9EaXJlY3RfUGh5c2ljYWwoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQlmbG9hdCBkb3ROTGNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJCXZlYzMgY2NJcnJhZGlhbmNlID0gZG90TkxjYyAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNjSXJyYWRpYW5jZSAqIEJSREZfR0dYKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQlzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NoZWVuKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc2hlZW5Db2xvciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfR0dYKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQp2b2lkIFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQpIHsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJY2xlYXJjb2F0U3BlY3VsYXIgKz0gY2xlYXJjb2F0UmFkaWFuY2UgKiBFbnZpcm9ubWVudEJSREYoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQlzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBtYXRlcmlhbC5zaGVlbkNvbG9yICogSUJMU2hlZW5CUkRGKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXZlYzMgc2luZ2xlU2NhdHRlcmluZyA9IHZlYzMoIDAuMCApOwoJdmVjMyBtdWx0aVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlID0gaXJyYWRpYW5jZSAqIFJFQ0lQUk9DQUxfUEk7Cgljb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MsIHNpbmdsZVNjYXR0ZXJpbmcsIG11bHRpU2NhdHRlcmluZyApOwoJdmVjMyBkaWZmdXNlID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSAoIHNpbmdsZVNjYXR0ZXJpbmcgKyBtdWx0aVNjYXR0ZXJpbmcgKSApOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSByYWRpYW5jZSAqIHNpbmdsZVNjYXR0ZXJpbmc7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IG11bHRpU2NhdHRlcmluZyAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9QaHlzaWNhbAojZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYQkJUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwKI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyCQlSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsCmZsb2F0IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7Cn1gLHBiPWAKR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTsKZ2VvbWV0cnkucG9zaXRpb24gPSAtIHZWaWV3UG9zaXRpb247Cmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbDsKZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwojaWZkZWYgVVNFX0NMRUFSQ09BVAoJZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsOwojZW5kaWYKSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDsKI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJUG9pbnRMaWdodCBwb2ludExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCVBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHsKCQlwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTsKCQlnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApCgkJcG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJU3BvdExpZ2h0IHNwb3RMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCVNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHsKCQlzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07CgkJZ2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKQoJCXNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCglEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkgewoJCWRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdOwoJCWdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApCgkJZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKQoJUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7CgkJcmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07CgkJUkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCgl2ZWMzIGlibElycmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7CglpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTsKCSNpZiAoIE5VTV9IRU1JX0xJR0hUUyA+IDAgKQoJCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7CgkJCWlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTsKCQl9CgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJdmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApOwoJdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSA9IHZlYzMoIDAuMCApOwojZW5kaWZgLG1iPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCSNpZmRlZiBVU0VfTElHSFRNQVAKCQl2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCQlsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7CgkJI2VuZGlmCgkJaXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7CgkjZW5kaWYKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKSAmJiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQlpYmxJcnJhZGlhbmNlICs9IGdldElCTElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJcmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAsZ2I9YCNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKQoJUkVfSW5kaXJlY3REaWZmdXNlKCBpcnJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApCglSRV9JbmRpcmVjdFNwZWN1bGFyKCByYWRpYW5jZSwgaWJsSXJyYWRpYW5jZSwgY2xlYXJjb2F0UmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKI2VuZGlmYCx4Yj1gI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKQoJZ2xfRnJhZ0RlcHRoRVhUID0gdklzUGVyc3BlY3RpdmUgPT0gMC4wID8gZ2xfRnJhZ0Nvb3JkLnogOiBsb2cyKCB2RnJhZ0RlcHRoICkgKiBsb2dEZXB0aEJ1ZkZDICogMC41OwojZW5kaWZgLHliPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCgl1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7Cgl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7Cgl2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlOwojZW5kaWZgLHZiPWAjaWZkZWYgVVNFX0xPR0RFUFRIQlVGCgkjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVAoJCXZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDsKCQl2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlOwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7CgkjZW5kaWYKI2VuZGlmYCxfYj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2RnJhZ0RlcHRoID0gMS4wICsgZ2xfUG9zaXRpb24udzsKCQl2SXNQZXJzcGVjdGl2ZSA9IGZsb2F0KCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKTsKCSNlbHNlCgkJaWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7CgkJCWdsX1Bvc2l0aW9uLnogPSBsb2cyKCBtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSApICogbG9nRGVwdGhCdWZGQyAtIDEuMDsKCQkJZ2xfUG9zaXRpb24ueiAqPSBnbF9Qb3NpdGlvbi53OwoJCX0KCSNlbmRpZgojZW5kaWZgLHdiPWAjaWZkZWYgVVNFX01BUAoJdmVjNCBzYW1wbGVkRGlmZnVzZUNvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVdiApOwoJI2lmZGVmIERFQ09ERV9WSURFT19URVhUVVJFCgkJc2FtcGxlZERpZmZ1c2VDb2xvciA9IHZlYzQoIG1peCggcG93KCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyggbGVzc1RoYW5FcXVhbCggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci53ICk7CgkjZW5kaWYKCWRpZmZ1c2VDb2xvciAqPSBzYW1wbGVkRGlmZnVzZUNvbG9yOwojZW5kaWZgLE1iPWAjaWZkZWYgVVNFX01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWFwOwojZW5kaWZgLGJiPWAjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApCgl2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTsKI2VuZGlmCiNpZmRlZiBVU0VfTUFQCglkaWZmdXNlQ29sb3IgKj0gdGV4dHVyZTJEKCBtYXAsIHV2ICk7CiNlbmRpZgojaWZkZWYgVVNFX0FMUEhBTUFQCglkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB1diApLmc7CiNlbmRpZmAsU2I9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKI2VuZGlmCiNpZmRlZiBVU0VfTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtYXA7CiNlbmRpZgojaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCxFYj1gZmxvYXQgbWV0YWxuZXNzRmFjdG9yID0gbWV0YWxuZXNzOwojaWZkZWYgVVNFX01FVEFMTkVTU01BUAoJdmVjNCB0ZXhlbE1ldGFsbmVzcyA9IHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTsKCW1ldGFsbmVzc0ZhY3RvciAqPSB0ZXhlbE1ldGFsbmVzcy5iOwojZW5kaWZgLFRiPWAjaWZkZWYgVVNFX01FVEFMTkVTU01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwOwojZW5kaWZgLEFiPWAjaWZkZWYgVVNFX01PUlBITk9STUFMUwoJb2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCWZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHsKCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQl9CgkjZWxzZQoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCSNlbmRpZgojZW5kaWZgLENiPWAjaWZkZWYgVVNFX01PUlBIVEFSR0VUUwoJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgTU9SUEhUQVJHRVRTX0NPVU5UIF07CgkJdW5pZm9ybSBzYW1wbGVyMkRBcnJheSBtb3JwaFRhcmdldHNUZXh0dXJlOwoJCXVuaWZvcm0gdmVjMiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZTsKCQl2ZWMzIGdldE1vcnBoKCBjb25zdCBpbiBpbnQgdmVydGV4SW5kZXgsIGNvbnN0IGluIGludCBtb3JwaFRhcmdldEluZGV4LCBjb25zdCBpbiBpbnQgb2Zmc2V0LCBjb25zdCBpbiBpbnQgc3RyaWRlICkgewoJCQlmbG9hdCB0ZXhlbEluZGV4ID0gZmxvYXQoIHZlcnRleEluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICk7CgkJCWZsb2F0IHkgPSBmbG9vciggdGV4ZWxJbmRleCAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnggKTsKCQkJZmxvYXQgeCA9IHRleGVsSW5kZXggLSB5ICogbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueDsKCQkJdmVjMyBtb3JwaFVWID0gdmVjMyggKCB4ICsgMC41ICkgLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54LCB5IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueSwgbW9ycGhUYXJnZXRJbmRleCApOwoJCQlyZXR1cm4gdGV4dHVyZSggbW9ycGhUYXJnZXRzVGV4dHVyZSwgbW9ycGhVViApLnh5ejsKCQl9CgkjZWxzZQoJCSNpZm5kZWYgVVNFX01PUlBITk9STUFMUwoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgOCBdOwoJCSNlbHNlCgkJCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCxSYj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCWZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHsKCQkJI2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTCgkJCQlpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMSApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJCSNlbHNlCgkJCQlpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJCSNlbmRpZgoJCX0KCSNlbHNlCgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07CgkJI2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTCgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDUgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDUgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ2ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA2IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsTGI9YGZsb2F0IGZhY2VEaXJlY3Rpb24gPSBnbF9Gcm9udEZhY2luZyA/IDEuMCA6IC0gMS4wOwojaWZkZWYgRkxBVF9TSEFERUQKCXZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7Cgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTsKI2Vsc2UKCXZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApOwoJCXZlYzMgYml0YW5nZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJCWJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJI2VuZGlmCgkJI2lmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApCgkJCW1hdDMgdlRCTiA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmCnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7YCxQYj1gI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUAoJbm9ybWFsID0gdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDsKCSNpZmRlZiBGTElQX1NJREVECgkJbm9ybWFsID0gLSBub3JtYWw7CgkjZW5kaWYKCSNpZmRlZiBET1VCTEVfU0lERUQKCQlub3JtYWwgPSBub3JtYWwgKiBmYWNlRGlyZWN0aW9uOwoJI2VuZGlmCglub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApOwojZWxpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgltYXBOLnh5ICo9IG5vcm1hbFNjYWxlOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJbm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogbWFwTiApOwoJI2Vsc2UKCQlub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIG1hcE4sIGZhY2VEaXJlY3Rpb24gKTsKCSNlbmRpZgojZWxpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApCglub3JtYWwgPSBwZXJ0dXJiTm9ybWFsQXJiKCAtIHZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCksIGZhY2VEaXJlY3Rpb24gKTsKI2VuZGlmYCxEYj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7CgkJdmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxJYj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7CgkJdmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxOYj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTsKCQl2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApOwoJI2VuZGlmCiNlbmRpZmAsRmI9YCNpZmRlZiBVU0VfTk9STUFMTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7Cgl1bmlmb3JtIHZlYzIgbm9ybWFsU2NhbGU7CiNlbmRpZgojaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQCgl1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OwojZW5kaWYKI2lmICEgZGVmaW5lZCAoIFVTRV9UQU5HRU5UICkgJiYgKCBkZWZpbmVkICggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQgKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApICkKCXZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHsKCQl2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApOwoJCXZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7CgkJdmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTsKCQl2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApOwoJCXZlYzMgTiA9IHN1cmZfbm9ybTsKCQl2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApOwoJCXZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7CgkJdmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDsKCQl2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55OwoJCWZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7CgkJZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7Cgl9CiNlbmRpZmAsemI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbCA9IGdlb21ldHJ5Tm9ybWFsOwojZW5kaWZgLFViPWAjaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAKCXZlYzMgY2xlYXJjb2F0TWFwTiA9IHRleHR1cmUyRCggY2xlYXJjb2F0Tm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgljbGVhcmNvYXRNYXBOLnh5ICo9IGNsZWFyY29hdE5vcm1hbFNjYWxlOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJY2xlYXJjb2F0Tm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogY2xlYXJjb2F0TWFwTiApOwoJI2Vsc2UKCQljbGVhcmNvYXROb3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBjbGVhcmNvYXROb3JtYWwsIGNsZWFyY29hdE1hcE4sIGZhY2VEaXJlY3Rpb24gKTsKCSNlbmRpZgojZW5kaWZgLEJiPWAjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0TWFwOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRSb3VnaG5lc3NNYXA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDsKCXVuaWZvcm0gdmVjMiBjbGVhcmNvYXROb3JtYWxTY2FsZTsKI2VuZGlmYCxPYj1gI2lmZGVmIE9QQVFVRQpkaWZmdXNlQ29sb3IuYSA9IDEuMDsKI2VuZGlmCiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCmRpZmZ1c2VDb2xvci5hICo9IHRyYW5zbWlzc2lvbkFscGhhICsgMC4xOwojZW5kaWYKZ2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtgLGtiPWB2ZWMzIHBhY2tOb3JtYWxUb1JHQiggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7CglyZXR1cm4gbm9ybWFsaXplKCBub3JtYWwgKSAqIDAuNSArIDAuNTsKfQp2ZWMzIHVucGFja1JHQlRvTm9ybWFsKCBjb25zdCBpbiB2ZWMzIHJnYiApIHsKCXJldHVybiAyLjAgKiByZ2IueHl6IC0gMS4wOwp9CmNvbnN0IGZsb2F0IFBhY2tVcHNjYWxlID0gMjU2LiAvIDI1NS47Y29uc3QgZmxvYXQgVW5wYWNrRG93bnNjYWxlID0gMjU1LiAvIDI1Ni47CmNvbnN0IHZlYzMgUGFja0ZhY3RvcnMgPSB2ZWMzKCAyNTYuICogMjU2LiAqIDI1Ni4sIDI1Ni4gKiAyNTYuLCAyNTYuICk7CmNvbnN0IHZlYzQgVW5wYWNrRmFjdG9ycyA9IFVucGFja0Rvd25zY2FsZSAvIHZlYzQoIFBhY2tGYWN0b3JzLCAxLiApOwpjb25zdCBmbG9hdCBTaGlmdFJpZ2h0OCA9IDEuIC8gMjU2LjsKdmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7Cgl2ZWM0IHIgPSB2ZWM0KCBmcmFjdCggdiAqIFBhY2tGYWN0b3JzICksIHYgKTsKCXIueXp3IC09IHIueHl6ICogU2hpZnRSaWdodDg7CXJldHVybiByICogUGFja1Vwc2NhbGU7Cn0KZmxvYXQgdW5wYWNrUkdCQVRvRGVwdGgoIGNvbnN0IGluIHZlYzQgdiApIHsKCXJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTsKfQp2ZWM0IHBhY2sySGFsZlRvUkdCQSggdmVjMiB2ICkgewoJdmVjNCByID0gdmVjNCggdi54LCBmcmFjdCggdi54ICogMjU1LjAgKSwgdi55LCBmcmFjdCggdi55ICogMjU1LjAgKSApOwoJcmV0dXJuIHZlYzQoIHIueCAtIHIueSAvIDI1NS4wLCByLnksIHIueiAtIHIudyAvIDI1NS4wLCByLncgKTsKfQp2ZWMyIHVucGFja1JHQkFUbzJIYWxmKCB2ZWM0IHYgKSB7CglyZXR1cm4gdmVjMiggdi54ICsgKCB2LnkgLyAyNTUuMCApLCB2LnogKyAoIHYudyAvIDI1NS4wICkgKTsKfQpmbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCB2aWV3WiArIG5lYXIgKSAvICggbmVhciAtIGZhciApOwp9CmZsb2F0IG9ydGhvZ3JhcGhpY0RlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgbGluZWFyQ2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjsKfQpmbG9hdCB2aWV3WlRvUGVyc3BlY3RpdmVEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoICggbmVhciArIHZpZXdaICkgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiB2aWV3WiApOwp9CmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggbmVhciAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIGludkNsaXBaIC0gZmFyICk7Cn1gLEhiPWAjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQQoJZ2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTsKI2VuZGlmYCxWYj1gdmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247CiNlbmRpZgptdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjsKZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtgLEdiPWAjaWZkZWYgRElUSEVSSU5HCglnbF9GcmFnQ29sb3IucmdiID0gZGl0aGVyaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7CiNlbmRpZmAsV2I9YCNpZmRlZiBESVRIRVJJTkcKCXZlYzMgZGl0aGVyaW5nKCB2ZWMzIGNvbG9yICkgewoJCWZsb2F0IGdyaWRfcG9zaXRpb24gPSByYW5kKCBnbF9GcmFnQ29vcmQueHkgKTsKCQl2ZWMzIGRpdGhlcl9zaGlmdF9SR0IgPSB2ZWMzKCAwLjI1IC8gMjU1LjAsIC0wLjI1IC8gMjU1LjAsIDAuMjUgLyAyNTUuMCApOwoJCWRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7CgkJcmV0dXJuIGNvbG9yICsgZGl0aGVyX3NoaWZ0X1JHQjsKCX0KI2VuZGlmYCxxYj1gZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzOwojaWZkZWYgVVNFX1JPVUdITkVTU01BUAoJdmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTsKCXJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nOwojZW5kaWZgLFhiPWAjaWZkZWYgVVNFX1JPVUdITkVTU01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwOwojZW5kaWZgLFliPWAjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgc3BvdFNoYWRvd01hcFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7CgkJCWZsb2F0IHNoYWRvd0NhbWVyYUZhcjsKCQl9OwoJCXVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJZmxvYXQgdGV4dHVyZTJEQ29tcGFyZSggc2FtcGxlcjJEIGRlcHRocywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApIHsKCQlyZXR1cm4gc3RlcCggY29tcGFyZSwgdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggZGVwdGhzLCB1diApICkgKTsKCX0KCXZlYzIgdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2ICkgewoJCXJldHVybiB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3csIHV2ICkgKTsKCX0KCWZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApewoJCWZsb2F0IG9jY2x1c2lvbiA9IDEuMDsKCQl2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApOwoJCWZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7CgkJaWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHsKCQkJZmxvYXQgZGlzdGFuY2UgPSBjb21wYXJlIC0gZGlzdHJpYnV0aW9uLnggOwoJCQlmbG9hdCB2YXJpYW5jZSA9IG1heCggMC4wMDAwMCwgZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSApOwoJCQlmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApOwkJCXNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApOwkJCW9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApOwoJCX0KCQlyZXR1cm4gb2NjbHVzaW9uOwoJfQoJZmxvYXQgZ2V0U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCApIHsKCQlmbG9hdCBzaGFkb3cgPSAxLjA7CgkJc2hhZG93Q29vcmQueHl6IC89IHNoYWRvd0Nvb3JkLnc7CgkJc2hhZG93Q29vcmQueiArPSBzaGFkb3dCaWFzOwoJCWJ2ZWM0IGluRnJ1c3R1bVZlYyA9IGJ2ZWM0ICggc2hhZG93Q29vcmQueCA+PSAwLjAsIHNoYWRvd0Nvb3JkLnggPD0gMS4wLCBzaGFkb3dDb29yZC55ID49IDAuMCwgc2hhZG93Q29vcmQueSA8PSAxLjAgKTsKCQlib29sIGluRnJ1c3R1bSA9IGFsbCggaW5GcnVzdHVtVmVjICk7CgkJYnZlYzIgZnJ1c3R1bVRlc3RWZWMgPSBidmVjMiggaW5GcnVzdHVtLCBzaGFkb3dDb29yZC56IDw9IDEuMCApOwoJCWJvb2wgZnJ1c3R1bVRlc3QgPSBhbGwoIGZydXN0dW1UZXN0VmVjICk7CgkJaWYgKCBmcnVzdHVtVGVzdCApIHsKCQkjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkKCQkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR5MCA9IC0gdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR4MiA9IGR4MCAvIDIuMDsKCQkJZmxvYXQgZHkyID0gZHkwIC8gMi4wOwoJCQlmbG9hdCBkeDMgPSBkeDEgLyAyLjA7CgkJCWZsb2F0IGR5MyA9IGR5MSAvIDIuMDsKCQkJc2hhZG93ID0gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56ICkKCQkJKSAqICggMS4wIC8gMTcuMCApOwoJCSNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkKCQkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IGR4ID0gdGV4ZWxTaXplLng7CgkJCWZsb2F0IGR5ID0gdGV4ZWxTaXplLnk7CgkJCXZlYzIgdXYgPSBzaGFkb3dDb29yZC54eTsKCQkJdmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApOwoJCQl1diAtPSBmICogdGV4ZWxTaXplOwoJCQlzaGFkb3cgPSAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2LCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdGV4ZWxTaXplLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnggKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnggKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueSApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueSApICsKCQkJCW1peCggbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkJICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJCSAgZi54ICksCgkJCQkJIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkJICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkJICBmLnggKSwKCQkJCQkgZi55ICkKCQkJKSAqICggMS4wIC8gOS4wICk7CgkJI2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNICkKCQkJc2hhZG93ID0gVlNNU2hhZG93KCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7CgkJI2Vsc2UKCQkJc2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApOwoJCSNlbmRpZgoJCX0KCQlyZXR1cm4gc2hhZG93OwoJfQoJdmVjMiBjdWJlVG9VViggdmVjMyB2LCBmbG9hdCB0ZXhlbFNpemVZICkgewoJCXZlYzMgYWJzViA9IGFicyggdiApOwoJCWZsb2F0IHNjYWxlVG9DdWJlID0gMS4wIC8gbWF4KCBhYnNWLngsIG1heCggYWJzVi55LCBhYnNWLnogKSApOwoJCWFic1YgKj0gc2NhbGVUb0N1YmU7CgkJdiAqPSBzY2FsZVRvQ3ViZSAqICggMS4wIC0gMi4wICogdGV4ZWxTaXplWSApOwoJCXZlYzIgcGxhbmFyID0gdi54eTsKCQlmbG9hdCBhbG1vc3RBVGV4ZWwgPSAxLjUgKiB0ZXhlbFNpemVZOwoJCWZsb2F0IGFsbW9zdE9uZSA9IDEuMCAtIGFsbW9zdEFUZXhlbDsKCQlpZiAoIGFic1YueiA+PSBhbG1vc3RPbmUgKSB7CgkJCWlmICggdi56ID4gMC4wICkKCQkJCXBsYW5hci54ID0gNC4wIC0gdi54OwoJCX0gZWxzZSBpZiAoIGFic1YueCA+PSBhbG1vc3RPbmUgKSB7CgkJCWZsb2F0IHNpZ25YID0gc2lnbiggdi54ICk7CgkJCXBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDsKCQl9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkgewoJCQlmbG9hdCBzaWduWSA9IHNpZ24oIHYueSApOwoJCQlwbGFuYXIueCA9IHYueCArIDIuMCAqIHNpZ25ZICsgMi4wOwoJCQlwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wOwoJCX0KCQlyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7Cgl9CglmbG9hdCBnZXRQb2ludFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQsIGZsb2F0IHNoYWRvd0NhbWVyYU5lYXIsIGZsb2F0IHNoYWRvd0NhbWVyYUZhciApIHsKCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gKCBzaGFkb3dNYXBTaXplICogdmVjMiggNC4wLCAyLjAgKSApOwoJCXZlYzMgbGlnaHRUb1Bvc2l0aW9uID0gc2hhZG93Q29vcmQueHl6OwoJCWZsb2F0IGRwID0gKCBsZW5ndGgoIGxpZ2h0VG9Qb3NpdGlvbiApIC0gc2hhZG93Q2FtZXJhTmVhciApIC8gKCBzaGFkb3dDYW1lcmFGYXIgLSBzaGFkb3dDYW1lcmFOZWFyICk7CQlkcCArPSBzaGFkb3dCaWFzOwoJCXZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7CgkJI2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNICkKCQkJdmVjMiBvZmZzZXQgPSB2ZWMyKCAtIDEsIDEgKSAqIHNoYWRvd1JhZGl1cyAqIHRleGVsU2l6ZS55OwoJCQlyZXR1cm4gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKQoJCQkpICogKCAxLjAgLyA5LjAgKTsKCQkjZWxzZQoJCQlyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKTsKCQkjZW5kaWYKCX0KI2VuZGlmYCxaYj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKI2VuZGlmYCxKYj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXZlYzMgc2hhZG93V29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApOwoJCXZlYzQgc2hhZG93V29ybGRQb3NpdGlvbjsKCSNlbmRpZgoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7CgkJdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSA9IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBzcG90TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZTcG90U2hhZG93Q29vcmRbIGkgXSA9IHNwb3RTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogcG9pbnRMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7CgkJdlBvaW50U2hhZG93Q29vcmRbIGkgXSA9IHBvaW50U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgojZW5kaWZgLCRiPWBmbG9hdCBnZXRTaGFkb3dNYXNrKCkgewoJZmxvYXQgc2hhZG93ID0gMS4wOwoJI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCglEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCglTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCVBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXBvaW50TGlnaHQgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2VuZGlmCglyZXR1cm4gc2hhZG93Owp9YCxLYj1gI2lmZGVmIFVTRV9TS0lOTklORwoJbWF0NCBib25lTWF0WCA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7CgltYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTsKCW1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApOwoJbWF0NCBib25lTWF0VyA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC53ICk7CiNlbmRpZmAsUWI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4OwoJdW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXhJbnZlcnNlOwoJI2lmZGVmIEJPTkVfVEVYVFVSRQoJCXVuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIGJvbmVUZXh0dXJlOwoJCXVuaWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTsKCQltYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7CgkJCWZsb2F0IGogPSBpICogNC4wOwoJCQlmbG9hdCB4ID0gbW9kKCBqLCBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTsKCQkJZmxvYXQgeSA9IGZsb29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IGR4ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApOwoJCQlmbG9hdCBkeSA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJeSA9IGR5ICogKCB5ICsgMC41ICk7CgkJCXZlYzQgdjEgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDAuNSApLCB5ICkgKTsKCQkJdmVjNCB2MiA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMS41ICksIHkgKSApOwoJCQl2ZWM0IHYzID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7CgkJCXZlYzQgdjQgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDMuNSApLCB5ICkgKTsKCQkJbWF0NCBib25lID0gbWF0NCggdjEsIHYyLCB2MywgdjQgKTsKCQkJcmV0dXJuIGJvbmU7CgkJfQoJI2Vsc2UKCQl1bmlmb3JtIG1hdDQgYm9uZU1hdHJpY2VzWyBNQVhfQk9ORVMgXTsKCQltYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7CgkJCW1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07CgkJCXJldHVybiBib25lOwoJCX0KCSNlbmRpZgojZW5kaWZgLGpiPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwoJdmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7Cglza2lubmVkICs9IGJvbmVNYXRYICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueDsKCXNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55OwoJc2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7Cglza2lubmVkICs9IGJvbmVNYXRXICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQudzsKCXRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7CiNlbmRpZmAsdDE9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC55ICogYm9uZU1hdFk7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0VzsKCXNraW5NYXRyaXggPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4OwoJb2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQlvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6OwoJI2VuZGlmCiNlbmRpZmAsZTE9YGZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7CiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVAKCXZlYzQgdGV4ZWxTcGVjdWxhciA9IHRleHR1cmUyRCggc3BlY3VsYXJNYXAsIHZVdiApOwoJc3BlY3VsYXJTdHJlbmd0aCA9IHRleGVsU3BlY3VsYXIucjsKI2Vsc2UKCXNwZWN1bGFyU3RyZW5ndGggPSAxLjA7CiNlbmRpZmAsbjE9YCNpZmRlZiBVU0VfU1BFQ1VMQVJNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwOwojZW5kaWZgLGkxPWAjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HICkKCWdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLHIxPWAjaWZuZGVmIHNhdHVyYXRlCiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKQojZW5kaWYKdW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlOwp2ZWMzIExpbmVhclRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJcmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjsKfQp2ZWMzIFJlaW5oYXJkVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJcmV0dXJuIHNhdHVyYXRlKCBjb2xvciAvICggdmVjMyggMS4wICkgKyBjb2xvciApICk7Cn0KdmVjMyBPcHRpbWl6ZWRDaW5lb25Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7Cgljb2xvciA9IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTsKCXJldHVybiBwb3coICggY29sb3IgKiAoIDYuMiAqIGNvbG9yICsgMC41ICkgKSAvICggY29sb3IgKiAoIDYuMiAqIGNvbG9yICsgMS43ICkgKyAwLjA2ICksIHZlYzMoIDIuMiApICk7Cn0KdmVjMyBSUlRBbmRPRFRGaXQoIHZlYzMgdiApIHsKCXZlYzMgYSA9IHYgKiAoIHYgKyAwLjAyNDU3ODYgKSAtIDAuMDAwMDkwNTM3OwoJdmVjMyBiID0gdiAqICggMC45ODM3MjkgKiB2ICsgMC40MzI5NTEwICkgKyAwLjIzODA4MTsKCXJldHVybiBhIC8gYjsKfQp2ZWMzIEFDRVNGaWxtaWNUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCWNvbnN0IG1hdDMgQUNFU0lucHV0TWF0ID0gbWF0MygKCQl2ZWMzKCAwLjU5NzE5LCAwLjA3NjAwLCAwLjAyODQwICksCQl2ZWMzKCAwLjM1NDU4LCAwLjkwODM0LCAwLjEzMzgzICksCgkJdmVjMyggMC4wNDgyMywgMC4wMTU2NiwgMC44Mzc3NyApCgkpOwoJY29uc3QgbWF0MyBBQ0VTT3V0cHV0TWF0ID0gbWF0MygKCQl2ZWMzKCAgMS42MDQ3NSwgLTAuMTAyMDgsIC0wLjAwMzI3ICksCQl2ZWMzKCAtMC41MzEwOCwgIDEuMTA4MTMsIC0wLjA3Mjc2ICksCgkJdmVjMyggLTAuMDczNjcsIC0wLjAwNjA1LCAgMS4wNzYwMiApCgkpOwoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZSAvIDAuNjsKCWNvbG9yID0gQUNFU0lucHV0TWF0ICogY29sb3I7Cgljb2xvciA9IFJSVEFuZE9EVEZpdCggY29sb3IgKTsKCWNvbG9yID0gQUNFU091dHB1dE1hdCAqIGNvbG9yOwoJcmV0dXJuIHNhdHVyYXRlKCBjb2xvciApOwp9CnZlYzMgQ3VzdG9tVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7IHJldHVybiBjb2xvcjsgfWAsczE9YCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCglmbG9hdCB0cmFuc21pc3Npb25BbHBoYSA9IDEuMDsKCWZsb2F0IHRyYW5zbWlzc2lvbkZhY3RvciA9IHRyYW5zbWlzc2lvbjsKCWZsb2F0IHRoaWNrbmVzc0ZhY3RvciA9IHRoaWNrbmVzczsKCSNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQCgkJdHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1RISUNLTkVTU01BUAoJCXRoaWNrbmVzc0ZhY3RvciAqPSB0ZXh0dXJlMkQoIHRoaWNrbmVzc01hcCwgdlV2ICkuZzsKCSNlbmRpZgoJdmVjMyBwb3MgPSB2V29ybGRQb3NpdGlvbjsKCXZlYzMgdiA9IG5vcm1hbGl6ZSggY2FtZXJhUG9zaXRpb24gLSBwb3MgKTsKCXZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJdmVjNCB0cmFuc21pc3Npb24gPSBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKAoJCW4sIHYsIHJvdWdobmVzc0ZhY3RvciwgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwKCQlwb3MsIG1vZGVsTWF0cml4LCB2aWV3TWF0cml4LCBwcm9qZWN0aW9uTWF0cml4LCBpb3IsIHRoaWNrbmVzc0ZhY3RvciwKCQlhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7Cgl0b3RhbERpZmZ1c2UgPSBtaXgoIHRvdGFsRGlmZnVzZSwgdHJhbnNtaXNzaW9uLnJnYiwgdHJhbnNtaXNzaW9uRmFjdG9yICk7Cgl0cmFuc21pc3Npb25BbHBoYSA9IG1peCggdHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCB0cmFuc21pc3Npb25GYWN0b3IgKTsKI2VuZGlmYCxvMT1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uOwoJdW5pZm9ybSBmbG9hdCB0aGlja25lc3M7Cgl1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2U7Cgl1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjsKCSNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1RISUNLTkVTU01BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDsKCSNlbmRpZgoJdW5pZm9ybSB2ZWMyIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOwoJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDsKCXVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OwoJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJdmVjMyBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCApIHsKCQl2ZWMzIHJlZnJhY3Rpb25WZWN0b3IgPSByZWZyYWN0KCAtIHYsIG5vcm1hbGl6ZSggbiApLCAxLjAgLyBpb3IgKTsKCQl2ZWMzIG1vZGVsU2NhbGU7CgkJbW9kZWxTY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS56ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMiBdLnh5eiApICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggcmVmcmFjdGlvblZlY3RvciApICogdGhpY2tuZXNzICogbW9kZWxTY2FsZTsKCX0KCWZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkgewoJCXJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApOwoJfQoJdmVjNCBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGNvbnN0IGluIHZlYzIgZnJhZ0Nvb3JkLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlmbG9hdCBmcmFtZWJ1ZmZlckxvZCA9IGxvZzIoIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnggKSAqIGFwcGx5SW9yVG9Sb3VnaG5lc3MoIHJvdWdobmVzcywgaW9yICk7CgkJI2lmZGVmIFRFWFRVUkVfTE9EX0VYVAoJCQlyZXR1cm4gdGV4dHVyZTJETG9kRVhUKCB0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbmRpZgoJfQoJdmVjMyBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiBmbG9hdCB0cmFuc21pc3Npb25EaXN0YW5jZSwgY29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkgewoJCWlmICggYXR0ZW51YXRpb25EaXN0YW5jZSA9PSAwLjAgKSB7CgkJCXJldHVybiByYWRpYW5jZTsKCQl9IGVsc2UgewoJCQl2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJCQl2ZWMzIHRyYW5zbWl0dGFuY2UgPSBleHAoIC0gYXR0ZW51YXRpb25Db2VmZmljaWVudCAqIHRyYW5zbWlzc2lvbkRpc3RhbmNlICk7CQkJcmV0dXJuIHRyYW5zbWl0dGFuY2UgKiByYWRpYW5jZTsKCQl9Cgl9Cgl2ZWM0IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yLAoJCWNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIHZlYzMgcG9zaXRpb24sIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXgsCgkJY29uc3QgaW4gbWF0NCB2aWV3TWF0cml4LCBjb25zdCBpbiBtYXQ0IHByb2pNYXRyaXgsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLAoJCWNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQl2ZWMzIHRyYW5zbWlzc2lvblJheSA9IGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggbiwgdiwgdGhpY2tuZXNzLCBpb3IsIG1vZGVsTWF0cml4ICk7CgkJdmVjMyByZWZyYWN0ZWRSYXlFeGl0ID0gcG9zaXRpb24gKyB0cmFuc21pc3Npb25SYXk7CgkJdmVjNCBuZGNQb3MgPSBwcm9qTWF0cml4ICogdmlld01hdHJpeCAqIHZlYzQoIHJlZnJhY3RlZFJheUV4aXQsIDEuMCApOwoJCXZlYzIgcmVmcmFjdGlvbkNvb3JkcyA9IG5kY1Bvcy54eSAvIG5kY1Bvcy53OwoJCXJlZnJhY3Rpb25Db29yZHMgKz0gMS4wOwoJCXJlZnJhY3Rpb25Db29yZHMgLz0gMi4wOwoJCXZlYzQgdHJhbnNtaXR0ZWRMaWdodCA9IGdldFRyYW5zbWlzc2lvblNhbXBsZSggcmVmcmFjdGlvbkNvb3Jkcywgcm91Z2huZXNzLCBpb3IgKTsKCQl2ZWMzIGF0dGVudWF0ZWRDb2xvciA9IGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHRyYW5zbWl0dGVkTGlnaHQucmdiLCBsZW5ndGgoIHRyYW5zbWlzc2lvblJheSApLCBhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7CgkJdmVjMyBGID0gRW52aXJvbm1lbnRCUkRGKCBuLCB2LCBzcGVjdWxhckNvbG9yLCBzcGVjdWxhckY5MCwgcm91Z2huZXNzICk7CgkJcmV0dXJuIHZlYzQoICggMS4wIC0gRiApICogYXR0ZW51YXRlZENvbG9yICogZGlmZnVzZUNvbG9yLCB0cmFuc21pdHRlZExpZ2h0LmEgKTsKCX0KI2VuZGlmYCxhMT1gI2lmICggZGVmaW5lZCggVVNFX1VWICkgJiYgISBkZWZpbmVkKCBVVlNfVkVSVEVYX09OTFkgKSApCgl2YXJ5aW5nIHZlYzIgdlV2OwojZW5kaWZgLGwxPWAjaWZkZWYgVVNFX1VWCgkjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZCgkJdmVjMiB2VXY7CgkjZWxzZQoJCXZhcnlpbmcgdmVjMiB2VXY7CgkjZW5kaWYKCXVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKI2VuZGlmYCxjMT1gI2lmZGVmIFVTRV9VVgoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKI2VuZGlmYCx1MT1gI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApCgl2YXJ5aW5nIHZlYzIgdlV2MjsKI2VuZGlmYCxoMT1gI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApCglhdHRyaWJ1dGUgdmVjMiB1djI7Cgl2YXJ5aW5nIHZlYzIgdlV2MjsKCXVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07CiNlbmRpZmAsZjE9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTsKI2VuZGlmYCxkMT1gI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkKCBESVNUQU5DRSApIHx8IGRlZmluZWQgKCBVU0VfU0hBRE9XTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9UUkFOU01JU1NJT04gKQoJdmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwoJI2lmZGVmIFVTRV9JTlNUQU5DSU5HCgkJd29ybGRQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogd29ybGRQb3NpdGlvbjsKCSNlbmRpZgoJd29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjsKI2VuZGlmYCxwMT1gdmFyeWluZyB2ZWMyIHZVdjsKdW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtOwp2b2lkIG1haW4oKSB7Cgl2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5OwoJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbi54eSwgMS4wLCAxLjAgKTsKfWAsbTE9YHVuaWZvcm0gc2FtcGxlcjJEIHQyRDsKdmFyeWluZyB2ZWMyIHZVdjsKdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAsZzE9YHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjb21tb24+CnZvaWQgbWFpbigpIHsKCXZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJZ2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7Cn1gLHgxPWAjaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50Pgp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCXZlYzMgdlJlZmxlY3QgPSB2V29ybGREaXJlY3Rpb247CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJZ2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7CglnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5OwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAseTE9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZIaWdoUHJlY2lzaW9uWlcgPSBnbF9Qb3NpdGlvbi56dzsKfWAsdjE9YCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDAKCXVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2YXJ5aW5nIHZlYzIgdkhpZ2hQcmVjaXNpb25aVzsKdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZGlmZnVzZUNvbG9yLmEgPSBvcGFjaXR5OwoJI2VuZGlmCgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCWZsb2F0IGZyYWdDb29yZFogPSAwLjUgKiB2SGlnaFByZWNpc2lvblpXWzBdIC8gdkhpZ2hQcmVjaXNpb25aV1sxXSArIDAuNTsKCSNpZiBERVBUSF9QQUNLSU5HID09IDMyMDAKCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KCB2ZWMzKCAxLjAgLSBmcmFnQ29vcmRaICksIG9wYWNpdHkgKTsKCSNlbGlmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMQoJCWdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZnJhZ0Nvb3JkWiApOwoJI2VuZGlmCn1gLF8xPWAjZGVmaW5lIERJU1RBTkNFCnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUAoJCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjZW5kaWYKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKfWAsdzE9YCNkZWZpbmUgRElTVEFOQ0UKdW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uOwp1bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTsKdW5pZm9ybSBmbG9hdCBmYXJEaXN0YW5jZTsKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4gKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCWZsb2F0IGRpc3QgPSBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uIC0gcmVmZXJlbmNlUG9zaXRpb24gKTsKCWRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTsKCWRpc3QgPSBzYXR1cmF0ZSggZGlzdCApOwoJZ2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBkaXN0ICk7Cn1gLE0xPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KfWAsYjE9YHVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDsKdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOwoJdmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApOwoJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Pgp9YCxTMT1gdW5pZm9ybSBmbG9hdCBzY2FsZTsKYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7Cgl2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsRTE9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gZmxvYXQgZGFzaFNpemU7CnVuaWZvcm0gZmxvYXQgdG90YWxTaXplOwp2YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+CglpZiAoIG1vZCggdkxpbmVEaXN0YW5jZSwgdG90YWxTaXplICkgPiBkYXNoU2l6ZSApIHsKCQlkaXNjYXJkOwoJfQoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+Cn1gLFQxPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpZiBkZWZpbmVkICggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQgKCBVU0VfU0tJTk5JTkcgKQoJCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjZW5kaWYKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxBMT1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7CgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2ZWMzKCAxLjAgKTsKCSNlbmRpZgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxDMT1gI2RlZmluZSBMQU1CRVJUCnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDsKdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250OwojaWZkZWYgRE9VQkxFX1NJREVECgl2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjazsKCXZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGxpZ2h0c19sYW1iZXJ0X3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLFIxPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDsKdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250OwojaWZkZWYgRE9VQkxFX1NJREVECgl2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjazsKCXZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PgoJI2lmZGVmIERPVUJMRV9TSURFRAoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2SW5kaXJlY3RGcm9udDsKCSNlbmRpZgoJI2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApOwoJI2lmZGVmIERPVUJMRV9TSURFRAoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2TGlnaHRGcm9udCA6IHZMaWdodEJhY2s7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKSAqIGdldFNoYWRvd01hc2soKTsKCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxMMT1gI2RlZmluZSBNQVRDQVAKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6Owp9YCxQMT1gI2RlZmluZSBNQVRDQVAKdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdW5pZm9ybSBzYW1wbGVyMkQgbWF0Y2FwOwp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPgoJdmVjMyB2aWV3RGlyID0gbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7Cgl2ZWMzIHggPSBub3JtYWxpemUoIHZlYzMoIHZpZXdEaXIueiwgMC4wLCAtIHZpZXdEaXIueCApICk7Cgl2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApOwoJdmVjMiB1diA9IHZlYzIoIGRvdCggeCwgbm9ybWFsICksIGRvdCggeSwgbm9ybWFsICkgKSAqIDAuNDk1ICsgMC41OwoJI2lmZGVmIFVTRV9NQVRDQVAKCQl2ZWM0IG1hdGNhcENvbG9yID0gdGV4dHVyZTJEKCBtYXRjYXAsIHV2ICk7CgkjZWxzZQoJCXZlYzQgbWF0Y2FwQ29sb3IgPSB2ZWM0KCB2ZWMzKCBtaXgoIDAuMiwgMC44LCB1di55ICkgKSwgMS4wICk7CgkjZW5kaWYKCXZlYzMgb3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2IgKiBtYXRjYXBDb2xvci5yZ2I7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLEQxPWAjZGVmaW5lIE5PUk1BTAojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7CiNlbmRpZgp9YCxJMT1gI2RlZmluZSBOT1JNQUwKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCWdsX0ZyYWdDb2xvciA9IHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIG9wYWNpdHkgKTsKfWAsTjE9YCNkZWZpbmUgUEhPTkcKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsRjE9YCNkZWZpbmUgUEhPTkcKdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTsKdW5pZm9ybSB2ZWMzIHNwZWN1bGFyOwp1bmlmb3JtIGZsb2F0IHNoaW5pbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCx6MT1gI2RlZmluZSBTVEFOREFSRAp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6OwojZW5kaWYKfWAsVTE9YCNkZWZpbmUgU1RBTkRBUkQKI2lmZGVmIFBIWVNJQ0FMCgkjZGVmaW5lIElPUgoJI2RlZmluZSBTUEVDVUxBUgojZW5kaWYKdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTsKdW5pZm9ybSBmbG9hdCByb3VnaG5lc3M7CnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpZmRlZiBJT1IKCXVuaWZvcm0gZmxvYXQgaW9yOwojZW5kaWYKI2lmZGVmIFNQRUNVTEFSCgl1bmlmb3JtIGZsb2F0IHNwZWN1bGFySW50ZW5zaXR5OwoJdW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3I7CgkjaWZkZWYgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJJbnRlbnNpdHlNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyQ29sb3JNYXA7CgkjZW5kaWYKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdDsKCXVuaWZvcm0gZmxvYXQgY2xlYXJjb2F0Um91Z2huZXNzOwojZW5kaWYKI2lmZGVmIFVTRV9TSEVFTgoJdW5pZm9ybSB2ZWMzIHNoZWVuQ29sb3I7Cgl1bmlmb3JtIGZsb2F0IHNoZWVuUm91Z2huZXNzOwoJI2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Db2xvck1hcDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuUm91Z2huZXNzTWFwOwoJI2VuZGlmCiNlbmRpZgp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWV0YWxuZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIHRvdGFsRGlmZnVzZSA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7Cgl2ZWMzIHRvdGFsU3BlY3VsYXIgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXI7CgkjaW5jbHVkZSA8dHJhbnNtaXNzaW9uX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gdG90YWxEaWZmdXNlICsgdG90YWxTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpZmRlZiBVU0VfU0hFRU4KCQlmbG9hdCBzaGVlbkVuZXJneUNvbXAgPSAxLjAgLSAwLjE1NyAqIG1heDMoIG1hdGVyaWFsLnNoZWVuQ29sb3IgKTsKCQlvdXRnb2luZ0xpZ2h0ID0gb3V0Z29pbmdMaWdodCAqIHNoZWVuRW5lcmd5Q29tcCArIHNoZWVuU3BlY3VsYXI7CgkjZW5kaWYKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TlZjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7CgkJdmVjMyBGY2MgPSBGX1NjaGxpY2soIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIGRvdE5WY2MgKTsKCQlvdXRnb2luZ0xpZ2h0ID0gb3V0Z29pbmdMaWdodCAqICggMS4wIC0gbWF0ZXJpYWwuY2xlYXJjb2F0ICogRmNjICkgKyBjbGVhcmNvYXRTcGVjdWxhciAqIG1hdGVyaWFsLmNsZWFyY29hdDsKCSNlbmRpZgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxCMT1gI2RlZmluZSBUT09OCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxPMT1gI2RlZmluZSBUT09OCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLGsxPWB1bmlmb3JtIGZsb2F0IHNpemU7CnVuaWZvcm0gZmxvYXQgc2NhbGU7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1BvaW50U2l6ZSA9IHNpemU7CgkjaWZkZWYgVVNFX1NJWkVBVFRFTlVBVElPTgoJCWJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTsKCQlpZiAoIGlzUGVyc3BlY3RpdmUgKSBnbF9Qb2ludFNpemUgKj0gKCBzY2FsZSAvIC0gbXZQb3NpdGlvbi56ICk7CgkjZW5kaWYKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsSDE9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfcGFydGljbGVfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJb3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KfWAsVjE9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsRzE9YHVuaWZvcm0gdmVjMyBjb2xvcjsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvciwgb3BhY2l0eSAqICggMS4wIC0gZ2V0U2hhZG93TWFzaygpICkgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Pgp9YCxXMT1gdW5pZm9ybSBmbG9hdCByb3RhdGlvbjsKdW5pZm9ybSB2ZWMyIGNlbnRlcjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+Cgl2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTsKCXZlYzIgc2NhbGU7CglzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTsKCXNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApOwoJI2lmbmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OCgkJYm9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApOwoJCWlmICggaXNQZXJzcGVjdGl2ZSApIHNjYWxlICo9IC0gbXZQb3NpdGlvbi56OwoJI2VuZGlmCgl2ZWMyIGFsaWduZWRQb3NpdGlvbiA9ICggcG9zaXRpb24ueHkgLSAoIGNlbnRlciAtIHZlYzIoIDAuNSApICkgKSAqIHNjYWxlOwoJdmVjMiByb3RhdGVkUG9zaXRpb247Cglyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7Cglyb3RhdGVkUG9zaXRpb24ueSA9IHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7CgltdlBvc2l0aW9uLnh5ICs9IHJvdGF0ZWRQb3NpdGlvbjsKCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAscTE9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Pgp9YCxQdD17YWxwaGFtYXBfZnJhZ21lbnQ6X00sYWxwaGFtYXBfcGFyc19mcmFnbWVudDp3TSxhbHBoYXRlc3RfZnJhZ21lbnQ6TU0sYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ6Yk0sYW9tYXBfZnJhZ21lbnQ6U00sYW9tYXBfcGFyc19mcmFnbWVudDpFTSxiZWdpbl92ZXJ0ZXg6VE0sYmVnaW5ub3JtYWxfdmVydGV4OkFNLGJzZGZzOkNNLGJ1bXBtYXBfcGFyc19mcmFnbWVudDpSTSxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ6TE0sY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6UE0sY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4OkRNLGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg6SU0sY29sb3JfZnJhZ21lbnQ6Tk0sY29sb3JfcGFyc19mcmFnbWVudDpGTSxjb2xvcl9wYXJzX3ZlcnRleDp6TSxjb2xvcl92ZXJ0ZXg6VU0sY29tbW9uOkJNLGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudDpPTSxkZWZhdWx0bm9ybWFsX3ZlcnRleDprTSxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6SE0sZGlzcGxhY2VtZW50bWFwX3ZlcnRleDpWTSxlbWlzc2l2ZW1hcF9mcmFnbWVudDpHTSxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OldNLGVuY29kaW5nc19mcmFnbWVudDpxTSxlbmNvZGluZ3NfcGFyc19mcmFnbWVudDpYTSxlbnZtYXBfZnJhZ21lbnQ6WU0sZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OlpNLGVudm1hcF9wYXJzX2ZyYWdtZW50OkpNLGVudm1hcF9wYXJzX3ZlcnRleDokTSxlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudDphYixlbnZtYXBfdmVydGV4OktNLGZvZ192ZXJ0ZXg6UU0sZm9nX3BhcnNfdmVydGV4OmpNLGZvZ19mcmFnbWVudDp0Yixmb2dfcGFyc19mcmFnbWVudDplYixncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50Om5iLGxpZ2h0bWFwX2ZyYWdtZW50OmliLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6cmIsbGlnaHRzX2xhbWJlcnRfdmVydGV4OnNiLGxpZ2h0c19wYXJzX2JlZ2luOm9iLGxpZ2h0c190b29uX2ZyYWdtZW50OmxiLGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ6Y2IsbGlnaHRzX3Bob25nX2ZyYWdtZW50OnViLGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OmhiLGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDpmYixsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudDpkYixsaWdodHNfZnJhZ21lbnRfYmVnaW46cGIsbGlnaHRzX2ZyYWdtZW50X21hcHM6bWIsbGlnaHRzX2ZyYWdtZW50X2VuZDpnYixsb2dkZXB0aGJ1Zl9mcmFnbWVudDp4Yixsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50OnliLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OnZiLGxvZ2RlcHRoYnVmX3ZlcnRleDpfYixtYXBfZnJhZ21lbnQ6d2IsbWFwX3BhcnNfZnJhZ21lbnQ6TWIsbWFwX3BhcnRpY2xlX2ZyYWdtZW50OmJiLG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50OlNiLG1ldGFsbmVzc21hcF9mcmFnbWVudDpFYixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDpUYixtb3JwaG5vcm1hbF92ZXJ0ZXg6QWIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6Q2IsbW9ycGh0YXJnZXRfdmVydGV4OlJiLG5vcm1hbF9mcmFnbWVudF9iZWdpbjpMYixub3JtYWxfZnJhZ21lbnRfbWFwczpQYixub3JtYWxfcGFyc19mcmFnbWVudDpEYixub3JtYWxfcGFyc192ZXJ0ZXg6SWIsbm9ybWFsX3ZlcnRleDpOYixub3JtYWxtYXBfcGFyc19mcmFnbWVudDpGYixjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luOnpiLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwczpVYixjbGVhcmNvYXRfcGFyc19mcmFnbWVudDpCYixvdXRwdXRfZnJhZ21lbnQ6T2IscGFja2luZzprYixwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OkhiLHByb2plY3RfdmVydGV4OlZiLGRpdGhlcmluZ19mcmFnbWVudDpHYixkaXRoZXJpbmdfcGFyc19mcmFnbWVudDpXYixyb3VnaG5lc3NtYXBfZnJhZ21lbnQ6cWIscm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ6WGIsc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ6WWIsc2hhZG93bWFwX3BhcnNfdmVydGV4OlpiLHNoYWRvd21hcF92ZXJ0ZXg6SmIsc2hhZG93bWFza19wYXJzX2ZyYWdtZW50OiRiLHNraW5iYXNlX3ZlcnRleDpLYixza2lubmluZ19wYXJzX3ZlcnRleDpRYixza2lubmluZ192ZXJ0ZXg6amIsc2tpbm5vcm1hbF92ZXJ0ZXg6dDEsc3BlY3VsYXJtYXBfZnJhZ21lbnQ6ZTEsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDpuMSx0b25lbWFwcGluZ19mcmFnbWVudDppMSx0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OnIxLHRyYW5zbWlzc2lvbl9mcmFnbWVudDpzMSx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudDpvMSx1dl9wYXJzX2ZyYWdtZW50OmExLHV2X3BhcnNfdmVydGV4OmwxLHV2X3ZlcnRleDpjMSx1djJfcGFyc19mcmFnbWVudDp1MSx1djJfcGFyc192ZXJ0ZXg6aDEsdXYyX3ZlcnRleDpmMSx3b3JsZHBvc192ZXJ0ZXg6ZDEsYmFja2dyb3VuZF92ZXJ0OnAxLGJhY2tncm91bmRfZnJhZzptMSxjdWJlX3ZlcnQ6ZzEsY3ViZV9mcmFnOngxLGRlcHRoX3ZlcnQ6eTEsZGVwdGhfZnJhZzp2MSxkaXN0YW5jZVJHQkFfdmVydDpfMSxkaXN0YW5jZVJHQkFfZnJhZzp3MSxlcXVpcmVjdF92ZXJ0Ok0xLGVxdWlyZWN0X2ZyYWc6YjEsbGluZWRhc2hlZF92ZXJ0OlMxLGxpbmVkYXNoZWRfZnJhZzpFMSxtZXNoYmFzaWNfdmVydDpUMSxtZXNoYmFzaWNfZnJhZzpBMSxtZXNobGFtYmVydF92ZXJ0OkMxLG1lc2hsYW1iZXJ0X2ZyYWc6UjEsbWVzaG1hdGNhcF92ZXJ0OkwxLG1lc2htYXRjYXBfZnJhZzpQMSxtZXNobm9ybWFsX3ZlcnQ6RDEsbWVzaG5vcm1hbF9mcmFnOkkxLG1lc2hwaG9uZ192ZXJ0Ok4xLG1lc2hwaG9uZ19mcmFnOkYxLG1lc2hwaHlzaWNhbF92ZXJ0OnoxLG1lc2hwaHlzaWNhbF9mcmFnOlUxLG1lc2h0b29uX3ZlcnQ6QjEsbWVzaHRvb25fZnJhZzpPMSxwb2ludHNfdmVydDprMSxwb2ludHNfZnJhZzpIMSxzaGFkb3dfdmVydDpWMSxzaGFkb3dfZnJhZzpHMSxzcHJpdGVfdmVydDpXMSxzcHJpdGVfZnJhZzpxMX0sb3Q9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IGZ0KDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGRlfSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxpb3I6e3ZhbHVlOjEuNX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3IEsoMSwxKX19LGRpc3BsYWNlbWVudG1hcDp7ZGlzcGxhY2VtZW50TWFwOnt2YWx1ZTpudWxsfSxkaXNwbGFjZW1lbnRTY2FsZTp7dmFsdWU6MX0sZGlzcGxhY2VtZW50Qmlhczp7dmFsdWU6MH19LHJvdWdobmVzc21hcDp7cm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfX0sbWV0YWxuZXNzbWFwOnttZXRhbG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxncmFkaWVudG1hcDp7Z3JhZGllbnRNYXA6e3ZhbHVlOm51bGx9fSxmb2c6e2ZvZ0RlbnNpdHk6e3ZhbHVlOjI1ZS01fSxmb2dOZWFyOnt2YWx1ZToxfSxmb2dGYXI6e3ZhbHVlOjJlM30sZm9nQ29sb3I6e3ZhbHVlOm5ldyBmdCgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sbGlnaHRQcm9iZTp7dmFsdWU6W119LGRpcmVjdGlvbmFsTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sY29sb3I6e319fSxkaXJlY3Rpb25hbExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sZGlyZWN0aW9uYWxTaGFkb3dNYXA6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHNwb3RMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRpcmVjdGlvbjp7fSxkaXN0YW5jZTp7fSxjb25lQ29zOnt9LHBlbnVtYnJhQ29zOnt9LGRlY2F5Ont9fX0sc3BvdExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sc3BvdFNoYWRvd01hcDp7dmFsdWU6W119LHNwb3RTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxwb2ludExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGVjYXk6e30sZGlzdGFuY2U6e319fSxwb2ludExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9LHNoYWRvd0NhbWVyYU5lYXI6e30sc2hhZG93Q2FtZXJhRmFyOnt9fX0scG9pbnRTaGFkb3dNYXA6e3ZhbHVlOltdfSxwb2ludFNoYWRvd01hdHJpeDp7dmFsdWU6W119LGhlbWlzcGhlcmVMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxza3lDb2xvcjp7fSxncm91bmRDb2xvcjp7fX19LHJlY3RBcmVhTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSx3aWR0aDp7fSxoZWlnaHQ6e319fSxsdGNfMTp7dmFsdWU6bnVsbH0sbHRjXzI6e3ZhbHVlOm51bGx9fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBmdCgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LHNpemU6e3ZhbHVlOjF9LHNjYWxlOnt2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgZGV9fSxzcHJpdGU6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBmdCgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LGNlbnRlcjp7dmFsdWU6bmV3IEsoLjUsLjUpfSxyb3RhdGlvbjp7dmFsdWU6MH0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGRlfX19LGZuPXtiYXNpYzp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5zcGVjdWxhcm1hcCxvdC5lbnZtYXAsb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZm9nXSksdmVydGV4U2hhZGVyOlB0Lm1lc2hiYXNpY192ZXJ0LGZyYWdtZW50U2hhZGVyOlB0Lm1lc2hiYXNpY19mcmFnfSxsYW1iZXJ0Ont1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LnNwZWN1bGFybWFwLG90LmVudm1hcCxvdC5hb21hcCxvdC5saWdodG1hcCxvdC5lbWlzc2l2ZW1hcCxvdC5mb2csb3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGZ0KDApfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubWVzaGxhbWJlcnRfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNobGFtYmVydF9mcmFnfSxwaG9uZzp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5zcGVjdWxhcm1hcCxvdC5lbnZtYXAsb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZW1pc3NpdmVtYXAsb3QuYnVtcG1hcCxvdC5ub3JtYWxtYXAsb3QuZGlzcGxhY2VtZW50bWFwLG90LmZvZyxvdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgZnQoMCl9LHNwZWN1bGFyOnt2YWx1ZTpuZXcgZnQoMTExODQ4MSl9LHNoaW5pbmVzczp7dmFsdWU6MzB9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNocGhvbmdfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNocGhvbmdfZnJhZ30sc3RhbmRhcmQ6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuZW52bWFwLG90LmFvbWFwLG90LmxpZ2h0bWFwLG90LmVtaXNzaXZlbWFwLG90LmJ1bXBtYXAsb3Qubm9ybWFsbWFwLG90LmRpc3BsYWNlbWVudG1hcCxvdC5yb3VnaG5lc3NtYXAsb3QubWV0YWxuZXNzbWFwLG90LmZvZyxvdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgZnQoMCl9LHJvdWdobmVzczp7dmFsdWU6MX0sbWV0YWxuZXNzOnt2YWx1ZTowfSxlbnZNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfZnJhZ30sdG9vbjp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5hb21hcCxvdC5saWdodG1hcCxvdC5lbWlzc2l2ZW1hcCxvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAsb3QuZ3JhZGllbnRtYXAsb3QuZm9nLG90LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBmdCgwKX19XSksdmVydGV4U2hhZGVyOlB0Lm1lc2h0b29uX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaHRvb25fZnJhZ30sbWF0Y2FwOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmJ1bXBtYXAsb3Qubm9ybWFsbWFwLG90LmRpc3BsYWNlbWVudG1hcCxvdC5mb2cse21hdGNhcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOlB0Lm1lc2htYXRjYXBfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNobWF0Y2FwX2ZyYWd9LHBvaW50czp7dW5pZm9ybXM6TWUoW290LnBvaW50cyxvdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6UHQucG9pbnRzX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQucG9pbnRzX2ZyYWd9LGRhc2hlZDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5mb2cse3NjYWxlOnt2YWx1ZToxfSxkYXNoU2l6ZTp7dmFsdWU6MX0sdG90YWxTaXplOnt2YWx1ZToyfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubGluZWRhc2hlZF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmxpbmVkYXNoZWRfZnJhZ30sZGVwdGg6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuZGlzcGxhY2VtZW50bWFwXSksdmVydGV4U2hhZGVyOlB0LmRlcHRoX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuZGVwdGhfZnJhZ30sbm9ybWFsOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmJ1bXBtYXAsb3Qubm9ybWFsbWFwLG90LmRpc3BsYWNlbWVudG1hcCx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOlB0Lm1lc2hub3JtYWxfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNobm9ybWFsX2ZyYWd9LHNwcml0ZTp7dW5pZm9ybXM6TWUoW290LnNwcml0ZSxvdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6UHQuc3ByaXRlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuc3ByaXRlX2ZyYWd9LGJhY2tncm91bmQ6e3VuaWZvcm1zOnt1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGRlfSx0MkQ6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6UHQuYmFja2dyb3VuZF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmJhY2tncm91bmRfZnJhZ30sY3ViZTp7dW5pZm9ybXM6TWUoW290LmVudm1hcCx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOlB0LmN1YmVfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5jdWJlX2ZyYWd9LGVxdWlyZWN0Ont1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOlB0LmVxdWlyZWN0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuZXF1aXJlY3RfZnJhZ30sZGlzdGFuY2VSR0JBOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmRpc3BsYWNlbWVudG1hcCx7cmVmZXJlbmNlUG9zaXRpb246e3ZhbHVlOm5ldyBUfSxuZWFyRGlzdGFuY2U6e3ZhbHVlOjF9LGZhckRpc3RhbmNlOnt2YWx1ZToxZTN9fV0pLHZlcnRleFNoYWRlcjpQdC5kaXN0YW5jZVJHQkFfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5kaXN0YW5jZVJHQkFfZnJhZ30sc2hhZG93Ont1bmlmb3JtczpNZShbb3QubGlnaHRzLG90LmZvZyx7Y29sb3I6e3ZhbHVlOm5ldyBmdCgwKX0sb3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOlB0LnNoYWRvd192ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LnNoYWRvd19mcmFnfX07Zm4ucGh5c2ljYWw9e3VuaWZvcm1zOk1lKFtmbi5zdGFuZGFyZC51bmlmb3Jtcyx7Y2xlYXJjb2F0Ont2YWx1ZTowfSxjbGVhcmNvYXRNYXA6e3ZhbHVlOm51bGx9LGNsZWFyY29hdFJvdWdobmVzczp7dmFsdWU6MH0sY2xlYXJjb2F0Um91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXROb3JtYWxTY2FsZTp7dmFsdWU6bmV3IEsoMSwxKX0sY2xlYXJjb2F0Tm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxzaGVlbjp7dmFsdWU6MH0sc2hlZW5Db2xvcjp7dmFsdWU6bmV3IGZ0KDApfSxzaGVlbkNvbG9yTWFwOnt2YWx1ZTpudWxsfSxzaGVlblJvdWdobmVzczp7dmFsdWU6MX0sc2hlZW5Sb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvbjp7dmFsdWU6MH0sdHJhbnNtaXNzaW9uTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTp7dmFsdWU6bmV3IEt9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgZnQoMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IGZ0KDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOlB0Lm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0Lm1lc2hwaHlzaWNhbF9mcmFnfTtmdW5jdGlvbiBYMShuLHQsZSxpLHIscyl7bGV0IG89bmV3IGZ0KDApLGE9cj09PSEwPzA6MSxsLGMsdT1udWxsLGg9MCxmPW51bGw7ZnVuY3Rpb24gZCh4LHYpe2xldCBtPSExLHA9di5pc1NjZW5lPT09ITA/di5iYWNrZ3JvdW5kOm51bGw7cCYmcC5pc1RleHR1cmUmJihwPXQuZ2V0KHApKTtsZXQgYj1uLnhyLF89Yi5nZXRTZXNzaW9uJiZiLmdldFNlc3Npb24oKTtfJiZfLmVudmlyb25tZW50QmxlbmRNb2RlPT09ImFkZGl0aXZlIiYmKHA9bnVsbCkscD09PW51bGw/ZyhvLGEpOnAmJnAuaXNDb2xvciYmKGcocCwxKSxtPSEwKSwobi5hdXRvQ2xlYXJ8fG0pJiZuLmNsZWFyKG4uYXV0b0NsZWFyQ29sb3Isbi5hdXRvQ2xlYXJEZXB0aCxuLmF1dG9DbGVhclN0ZW5jaWwpLHAmJihwLmlzQ3ViZVRleHR1cmV8fHAubWFwcGluZz09PVJsKT8oYz09PXZvaWQgMCYmKGM9bmV3IG9lKG5ldyBIaSgxLDEsMSksbmV3IEZuKHtuYW1lOiJCYWNrZ3JvdW5kQ3ViZU1hdGVyaWFsIix1bmlmb3JtczpHcihmbi5jdWJlLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6Zm4uY3ViZS52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6Zm4uY3ViZS5mcmFnbWVudFNoYWRlcixzaWRlOmhlLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoInV2IiksYy5vbkJlZm9yZVJlbmRlcj1mdW5jdGlvbihTLEwsQSl7dGhpcy5tYXRyaXhXb3JsZC5jb3B5UG9zaXRpb24oQS5tYXRyaXhXb3JsZCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLm1hdGVyaWFsLCJlbnZNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5lbnZNYXAudmFsdWV9fSksaS51cGRhdGUoYykpLGMubWF0ZXJpYWwudW5pZm9ybXMuZW52TWFwLnZhbHVlPXAsYy5tYXRlcmlhbC51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPXAuaXNDdWJlVGV4dHVyZSYmcC5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxLCh1IT09cHx8aCE9PXAudmVyc2lvbnx8ZiE9PW4udG9uZU1hcHBpbmcpJiYoYy5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PXAsaD1wLnZlcnNpb24sZj1uLnRvbmVNYXBwaW5nKSx4LnVuc2hpZnQoYyxjLmdlb21ldHJ5LGMubWF0ZXJpYWwsMCwwLG51bGwpKTpwJiZwLmlzVGV4dHVyZSYmKGw9PT12b2lkIDAmJihsPW5ldyBvZShuZXcgbG8oMiwyKSxuZXcgRm4oe25hbWU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6R3IoZm4uYmFja2dyb3VuZC51bmlmb3JtcyksdmVydGV4U2hhZGVyOmZuLmJhY2tncm91bmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmZuLmJhY2tncm91bmQuZnJhZ21lbnRTaGFkZXIsc2lkZTplbyxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksbC5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLm1hdGVyaWFsLCJtYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy50MkQudmFsdWV9fSksaS51cGRhdGUobCkpLGwubWF0ZXJpYWwudW5pZm9ybXMudDJELnZhbHVlPXAscC5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJnAudXBkYXRlTWF0cml4KCksbC5tYXRlcmlhbC51bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KHAubWF0cml4KSwodSE9PXB8fGghPT1wLnZlcnNpb258fGYhPT1uLnRvbmVNYXBwaW5nKSYmKGwubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT1wLGg9cC52ZXJzaW9uLGY9bi50b25lTWFwcGluZykseC51bnNoaWZ0KGwsbC5nZW9tZXRyeSxsLm1hdGVyaWFsLDAsMCxudWxsKSl9ZnVuY3Rpb24gZyh4LHYpe2UuYnVmZmVycy5jb2xvci5zZXRDbGVhcih4LnIseC5nLHguYix2LHMpfXJldHVybntnZXRDbGVhckNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIG99LHNldENsZWFyQ29sb3I6ZnVuY3Rpb24oeCx2PTEpe28uc2V0KHgpLGE9dixnKG8sYSl9LGdldENsZWFyQWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sc2V0Q2xlYXJBbHBoYTpmdW5jdGlvbih4KXthPXgsZyhvLGEpfSxyZW5kZXI6ZH19ZnVuY3Rpb24gWTEobix0LGUsaSl7bGV0IHI9bi5nZXRQYXJhbWV0ZXIoMzQ5MjEpLHM9aS5pc1dlYkdMMj9udWxsOnQuZ2V0KCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLG89aS5pc1dlYkdMMnx8cyE9PW51bGwsYT17fSxsPXgobnVsbCksYz1sO2Z1bmN0aW9uIHUoRCxGLHosTixWKXtsZXQgUT0hMTtpZihvKXtsZXQgYXQ9ZyhOLHosRik7YyE9PWF0JiYoYz1hdCxmKGMub2JqZWN0KSksUT12KE4sViksUSYmbShOLFYpfWVsc2V7bGV0IGF0PUYud2lyZWZyYW1lPT09ITA7KGMuZ2VvbWV0cnkhPT1OLmlkfHxjLnByb2dyYW0hPT16LmlkfHxjLndpcmVmcmFtZSE9PWF0KSYmKGMuZ2VvbWV0cnk9Ti5pZCxjLnByb2dyYW09ei5pZCxjLndpcmVmcmFtZT1hdCxRPSEwKX1ELmlzSW5zdGFuY2VkTWVzaD09PSEwJiYoUT0hMCksViE9PW51bGwmJmUudXBkYXRlKFYsMzQ5NjMpLFEmJihBKEQsRix6LE4pLFYhPT1udWxsJiZuLmJpbmRCdWZmZXIoMzQ5NjMsZS5nZXQoVikuYnVmZmVyKSl9ZnVuY3Rpb24gaCgpe3JldHVybiBpLmlzV2ViR0wyP24uY3JlYXRlVmVydGV4QXJyYXkoKTpzLmNyZWF0ZVZlcnRleEFycmF5T0VTKCl9ZnVuY3Rpb24gZihEKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmJpbmRWZXJ0ZXhBcnJheShEKTpzLmJpbmRWZXJ0ZXhBcnJheU9FUyhEKX1mdW5jdGlvbiBkKEQpe3JldHVybiBpLmlzV2ViR0wyP24uZGVsZXRlVmVydGV4QXJyYXkoRCk6cy5kZWxldGVWZXJ0ZXhBcnJheU9FUyhEKX1mdW5jdGlvbiBnKEQsRix6KXtsZXQgTj16LndpcmVmcmFtZT09PSEwLFY9YVtELmlkXTtWPT09dm9pZCAwJiYoVj17fSxhW0QuaWRdPVYpO2xldCBRPVZbRi5pZF07UT09PXZvaWQgMCYmKFE9e30sVltGLmlkXT1RKTtsZXQgYXQ9UVtOXTtyZXR1cm4gYXQ9PT12b2lkIDAmJihhdD14KGgoKSksUVtOXT1hdCksYXR9ZnVuY3Rpb24geChEKXtsZXQgRj1bXSx6PVtdLE49W107Zm9yKGxldCBWPTA7VjxyO1YrKylGW1ZdPTAseltWXT0wLE5bVl09MDtyZXR1cm57Z2VvbWV0cnk6bnVsbCxwcm9ncmFtOm51bGwsd2lyZWZyYW1lOiExLG5ld0F0dHJpYnV0ZXM6RixlbmFibGVkQXR0cmlidXRlczp6LGF0dHJpYnV0ZURpdmlzb3JzOk4sb2JqZWN0OkQsYXR0cmlidXRlczp7fSxpbmRleDpudWxsfX1mdW5jdGlvbiB2KEQsRil7bGV0IHo9Yy5hdHRyaWJ1dGVzLE49RC5hdHRyaWJ1dGVzLFY9MDtmb3IobGV0IFEgaW4gTil7bGV0IGF0PXpbUV0sRz1OW1FdO2lmKGF0PT09dm9pZCAwfHxhdC5hdHRyaWJ1dGUhPT1HfHxhdC5kYXRhIT09Ry5kYXRhKXJldHVybiEwO1YrK31yZXR1cm4gYy5hdHRyaWJ1dGVzTnVtIT09Vnx8Yy5pbmRleCE9PUZ9ZnVuY3Rpb24gbShELEYpe2xldCB6PXt9LE49RC5hdHRyaWJ1dGVzLFY9MDtmb3IobGV0IFEgaW4gTil7bGV0IGF0PU5bUV0sRz17fTtHLmF0dHJpYnV0ZT1hdCxhdC5kYXRhJiYoRy5kYXRhPWF0LmRhdGEpLHpbUV09RyxWKyt9Yy5hdHRyaWJ1dGVzPXosYy5hdHRyaWJ1dGVzTnVtPVYsYy5pbmRleD1GfWZ1bmN0aW9uIHAoKXtsZXQgRD1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBGPTAsej1ELmxlbmd0aDtGPHo7RisrKURbRl09MH1mdW5jdGlvbiBiKEQpe18oRCwwKX1mdW5jdGlvbiBfKEQsRil7bGV0IHo9Yy5uZXdBdHRyaWJ1dGVzLE49Yy5lbmFibGVkQXR0cmlidXRlcyxWPWMuYXR0cmlidXRlRGl2aXNvcnM7eltEXT0xLE5bRF09PT0wJiYobi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShEKSxOW0RdPTEpLFZbRF0hPT1GJiYoKGkuaXNXZWJHTDI/bjp0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKVtpLmlzV2ViR0wyPyJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIjoidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIl0oRCxGKSxWW0RdPUYpfWZ1bmN0aW9uIFMoKXtsZXQgRD1jLm5ld0F0dHJpYnV0ZXMsRj1jLmVuYWJsZWRBdHRyaWJ1dGVzO2ZvcihsZXQgej0wLE49Ri5sZW5ndGg7ejxOO3orKylGW3pdIT09RFt6XSYmKG4uZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHopLEZbel09MCl9ZnVuY3Rpb24gTChELEYseixOLFYsUSl7aS5pc1dlYkdMMj09PSEwJiYoej09PTUxMjR8fHo9PT01MTI1KT9uLnZlcnRleEF0dHJpYklQb2ludGVyKEQsRix6LFYsUSk6bi52ZXJ0ZXhBdHRyaWJQb2ludGVyKEQsRix6LE4sVixRKX1mdW5jdGlvbiBBKEQsRix6LE4pe2lmKGkuaXNXZWJHTDI9PT0hMSYmKEQuaXNJbnN0YW5jZWRNZXNofHxOLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpJiZ0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpPT09bnVsbClyZXR1cm47cCgpO2xldCBWPU4uYXR0cmlidXRlcyxRPXouZ2V0QXR0cmlidXRlcygpLGF0PUYuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IobGV0IEcgaW4gUSl7bGV0ICQ9UVtHXTtpZigkLmxvY2F0aW9uPj0wKXtsZXQgbHQ9VltHXTtpZihsdD09PXZvaWQgMCYmKEc9PT0iaW5zdGFuY2VNYXRyaXgiJiZELmluc3RhbmNlTWF0cml4JiYobHQ9RC5pbnN0YW5jZU1hdHJpeCksRz09PSJpbnN0YW5jZUNvbG9yIiYmRC5pbnN0YW5jZUNvbG9yJiYobHQ9RC5pbnN0YW5jZUNvbG9yKSksbHQhPT12b2lkIDApe2xldCBkdD1sdC5ub3JtYWxpemVkLHh0PWx0Lml0ZW1TaXplLGs9ZS5nZXQobHQpO2lmKGs9PT12b2lkIDApY29udGludWU7bGV0IEZ0PWsuYnVmZmVyLG10PWsudHlwZSxTdD1rLmJ5dGVzUGVyRWxlbWVudDtpZihsdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgQj1sdC5kYXRhLHN0PUIuc3RyaWRlLG50PWx0Lm9mZnNldDtpZihCJiZCLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIpe2ZvcihsZXQgQz0wO0M8JC5sb2NhdGlvblNpemU7QysrKV8oJC5sb2NhdGlvbitDLEIubWVzaFBlckF0dHJpYnV0ZSk7RC5pc0luc3RhbmNlZE1lc2ghPT0hMCYmTi5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKE4uX21heEluc3RhbmNlQ291bnQ9Qi5tZXNoUGVyQXR0cmlidXRlKkIuY291bnQpfWVsc2UgZm9yKGxldCBDPTA7QzwkLmxvY2F0aW9uU2l6ZTtDKyspYigkLmxvY2F0aW9uK0MpO24uYmluZEJ1ZmZlcigzNDk2MixGdCk7Zm9yKGxldCBDPTA7QzwkLmxvY2F0aW9uU2l6ZTtDKyspTCgkLmxvY2F0aW9uK0MseHQvJC5sb2NhdGlvblNpemUsbXQsZHQsc3QqU3QsKG50K3h0LyQubG9jYXRpb25TaXplKkMpKlN0KX1lbHNle2lmKGx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKXtmb3IobGV0IEI9MDtCPCQubG9jYXRpb25TaXplO0IrKylfKCQubG9jYXRpb24rQixsdC5tZXNoUGVyQXR0cmlidXRlKTtELmlzSW5zdGFuY2VkTWVzaCE9PSEwJiZOLl9tYXhJbnN0YW5jZUNvdW50PT09dm9pZCAwJiYoTi5fbWF4SW5zdGFuY2VDb3VudD1sdC5tZXNoUGVyQXR0cmlidXRlKmx0LmNvdW50KX1lbHNlIGZvcihsZXQgQj0wO0I8JC5sb2NhdGlvblNpemU7QisrKWIoJC5sb2NhdGlvbitCKTtuLmJpbmRCdWZmZXIoMzQ5NjIsRnQpO2ZvcihsZXQgQj0wO0I8JC5sb2NhdGlvblNpemU7QisrKUwoJC5sb2NhdGlvbitCLHh0LyQubG9jYXRpb25TaXplLG10LGR0LHh0KlN0LHh0LyQubG9jYXRpb25TaXplKkIqU3QpfX1lbHNlIGlmKGF0IT09dm9pZCAwKXtsZXQgZHQ9YXRbR107aWYoZHQhPT12b2lkIDApc3dpdGNoKGR0Lmxlbmd0aCl7Y2FzZSAyOm4udmVydGV4QXR0cmliMmZ2KCQubG9jYXRpb24sZHQpO2JyZWFrO2Nhc2UgMzpuLnZlcnRleEF0dHJpYjNmdigkLmxvY2F0aW9uLGR0KTticmVhaztjYXNlIDQ6bi52ZXJ0ZXhBdHRyaWI0ZnYoJC5sb2NhdGlvbixkdCk7YnJlYWs7ZGVmYXVsdDpuLnZlcnRleEF0dHJpYjFmdigkLmxvY2F0aW9uLGR0KX19fX1TKCl9ZnVuY3Rpb24gSCgpe3koKTtmb3IobGV0IEQgaW4gYSl7bGV0IEY9YVtEXTtmb3IobGV0IHogaW4gRil7bGV0IE49Rlt6XTtmb3IobGV0IFYgaW4gTilkKE5bVl0ub2JqZWN0KSxkZWxldGUgTltWXTtkZWxldGUgRlt6XX1kZWxldGUgYVtEXX19ZnVuY3Rpb24gdHQoRCl7aWYoYVtELmlkXT09PXZvaWQgMClyZXR1cm47bGV0IEY9YVtELmlkXTtmb3IobGV0IHogaW4gRil7bGV0IE49Rlt6XTtmb3IobGV0IFYgaW4gTilkKE5bVl0ub2JqZWN0KSxkZWxldGUgTltWXTtkZWxldGUgRlt6XX1kZWxldGUgYVtELmlkXX1mdW5jdGlvbiBYKEQpe2ZvcihsZXQgRiBpbiBhKXtsZXQgej1hW0ZdO2lmKHpbRC5pZF09PT12b2lkIDApY29udGludWU7bGV0IE49eltELmlkXTtmb3IobGV0IFYgaW4gTilkKE5bVl0ub2JqZWN0KSxkZWxldGUgTltWXTtkZWxldGUgeltELmlkXX19ZnVuY3Rpb24geSgpe1IoKSxjIT09bCYmKGM9bCxmKGMub2JqZWN0KSl9ZnVuY3Rpb24gUigpe2wuZ2VvbWV0cnk9bnVsbCxsLnByb2dyYW09bnVsbCxsLndpcmVmcmFtZT0hMX1yZXR1cm57c2V0dXA6dSxyZXNldDp5LHJlc2V0RGVmYXVsdFN0YXRlOlIsZGlzcG9zZTpILHJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5OnR0LHJlbGVhc2VTdGF0ZXNPZlByb2dyYW06WCxpbml0QXR0cmlidXRlczpwLGVuYWJsZUF0dHJpYnV0ZTpiLGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOlN9fWZ1bmN0aW9uIFoxKG4sdCxlLGkpe2xldCByPWkuaXNXZWJHTDIscztmdW5jdGlvbiBvKGMpe3M9Y31mdW5jdGlvbiBhKGMsdSl7bi5kcmF3QXJyYXlzKHMsYyx1KSxlLnVwZGF0ZSh1LHMsMSl9ZnVuY3Rpb24gbChjLHUsaCl7aWYoaD09PTApcmV0dXJuO2xldCBmLGQ7aWYocilmPW4sZD0iZHJhd0FycmF5c0luc3RhbmNlZCI7ZWxzZSBpZihmPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksZD0iZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIixmPT09bnVsbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cmV0dXJufWZbZF0ocyxjLHUsaCksZS51cGRhdGUodSxzLGgpfXRoaXMuc2V0TW9kZT1vLHRoaXMucmVuZGVyPWEsdGhpcy5yZW5kZXJJbnN0YW5jZXM9bH1mdW5jdGlvbiBKMShuLHQsZSl7bGV0IGk7ZnVuY3Rpb24gcigpe2lmKGkhPT12b2lkIDApcmV0dXJuIGk7aWYodC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCBBPXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpPW4uZ2V0UGFyYW1ldGVyKEEuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKX1lbHNlIGk9MDtyZXR1cm4gaX1mdW5jdGlvbiBzKEEpe2lmKEE9PT0iaGlnaHAiKXtpZihuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzOCkucHJlY2lzaW9uPjAmJm4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM4KS5wcmVjaXNpb24+MClyZXR1cm4iaGlnaHAiO0E9Im1lZGl1bXAifXJldHVybiBBPT09Im1lZGl1bXAiJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJm4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBvPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0IT0idW5kZWZpbmVkIiYmbiBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJm4gaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxhPWUucHJlY2lzaW9uIT09dm9pZCAwP2UucHJlY2lzaW9uOiJoaWdocCIsbD1zKGEpO2whPT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIsYSwibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIiksYT1sKTtsZXQgYz1vfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT1lLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI9PT0hMCxoPW4uZ2V0UGFyYW1ldGVyKDM0OTMwKSxmPW4uZ2V0UGFyYW1ldGVyKDM1NjYwKSxkPW4uZ2V0UGFyYW1ldGVyKDMzNzkpLGc9bi5nZXRQYXJhbWV0ZXIoMzQwNzYpLHg9bi5nZXRQYXJhbWV0ZXIoMzQ5MjEpLHY9bi5nZXRQYXJhbWV0ZXIoMzYzNDcpLG09bi5nZXRQYXJhbWV0ZXIoMzYzNDgpLHA9bi5nZXRQYXJhbWV0ZXIoMzYzNDkpLGI9Zj4wLF89b3x8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0IiksUz1iJiZfLEw9bz9uLmdldFBhcmFtZXRlcigzNjE4Myk6MDtyZXR1cm57aXNXZWJHTDI6byxkcmF3QnVmZmVyczpjLGdldE1heEFuaXNvdHJvcHk6cixnZXRNYXhQcmVjaXNpb246cyxwcmVjaXNpb246YSxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6aCxtYXhWZXJ0ZXhUZXh0dXJlczpmLG1heFRleHR1cmVTaXplOmQsbWF4Q3ViZW1hcFNpemU6ZyxtYXhBdHRyaWJ1dGVzOngsbWF4VmVydGV4VW5pZm9ybXM6dixtYXhWYXJ5aW5nczptLG1heEZyYWdtZW50VW5pZm9ybXM6cCx2ZXJ0ZXhUZXh0dXJlczpiLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpfLGZsb2F0VmVydGV4VGV4dHVyZXM6UyxtYXhTYW1wbGVzOkx9fWZ1bmN0aW9uICQxKG4pe2xldCB0PXRoaXMsZT1udWxsLGk9MCxyPSExLHM9ITEsbz1uZXcgamUsYT1uZXcgZGUsbD17dmFsdWU6bnVsbCxuZWVkc1VwZGF0ZTohMX07dGhpcy51bmlmb3JtPWwsdGhpcy5udW1QbGFuZXM9MCx0aGlzLm51bUludGVyc2VjdGlvbj0wLHRoaXMuaW5pdD1mdW5jdGlvbihoLGYsZCl7bGV0IGc9aC5sZW5ndGghPT0wfHxmfHxpIT09MHx8cjtyZXR1cm4gcj1mLGU9dShoLGQsMCksaT1oLmxlbmd0aCxnfSx0aGlzLmJlZ2luU2hhZG93cz1mdW5jdGlvbigpe3M9ITAsdShudWxsKX0sdGhpcy5lbmRTaGFkb3dzPWZ1bmN0aW9uKCl7cz0hMSxjKCl9LHRoaXMuc2V0U3RhdGU9ZnVuY3Rpb24oaCxmLGQpe2xldCBnPWguY2xpcHBpbmdQbGFuZXMseD1oLmNsaXBJbnRlcnNlY3Rpb24sdj1oLmNsaXBTaGFkb3dzLG09bi5nZXQoaCk7aWYoIXJ8fGc9PT1udWxsfHxnLmxlbmd0aD09PTB8fHMmJiF2KXM/dShudWxsKTpjKCk7ZWxzZXtsZXQgcD1zPzA6aSxiPXAqNCxfPW0uY2xpcHBpbmdTdGF0ZXx8bnVsbDtsLnZhbHVlPV8sXz11KGcsZixiLGQpO2ZvcihsZXQgUz0wO1MhPT1iOysrUylfW1NdPWVbU107bS5jbGlwcGluZ1N0YXRlPV8sdGhpcy5udW1JbnRlcnNlY3Rpb249eD90aGlzLm51bVBsYW5lczowLHRoaXMubnVtUGxhbmVzKz1wfX07ZnVuY3Rpb24gYygpe2wudmFsdWUhPT1lJiYobC52YWx1ZT1lLGwubmVlZHNVcGRhdGU9aT4wKSx0Lm51bVBsYW5lcz1pLHQubnVtSW50ZXJzZWN0aW9uPTB9ZnVuY3Rpb24gdShoLGYsZCxnKXtsZXQgeD1oIT09bnVsbD9oLmxlbmd0aDowLHY9bnVsbDtpZih4IT09MCl7aWYodj1sLnZhbHVlLGchPT0hMHx8dj09PW51bGwpe2xldCBtPWQreCo0LHA9Zi5tYXRyaXhXb3JsZEludmVyc2U7YS5nZXROb3JtYWxNYXRyaXgocCksKHY9PT1udWxsfHx2Lmxlbmd0aDxtKSYmKHY9bmV3IEZsb2F0MzJBcnJheShtKSk7Zm9yKGxldCBiPTAsXz1kO2IhPT14OysrYixfKz00KW8uY29weShoW2JdKS5hcHBseU1hdHJpeDQocCxhKSxvLm5vcm1hbC50b0FycmF5KHYsXyksdltfKzNdPW8uY29uc3RhbnR9bC52YWx1ZT12LGwubmVlZHNVcGRhdGU9ITB9cmV0dXJuIHQubnVtUGxhbmVzPXgsdC5udW1JbnRlcnNlY3Rpb249MCx2fX1mdW5jdGlvbiBLMShuKXtsZXQgdD1uZXcgV2Vha01hcDtmdW5jdGlvbiBlKG8sYSl7cmV0dXJuIGE9PT1VdT9vLm1hcHBpbmc9QW86YT09PUJ1JiYoby5tYXBwaW5nPUNvKSxvfWZ1bmN0aW9uIGkobyl7aWYobyYmby5pc1RleHR1cmUmJm8uaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITEpe2xldCBhPW8ubWFwcGluZztpZihhPT09VXV8fGE9PT1CdSlpZih0LmhhcyhvKSl7bGV0IGw9dC5nZXQobykudGV4dHVyZTtyZXR1cm4gZShsLG8ubWFwcGluZyl9ZWxzZXtsZXQgbD1vLmltYWdlO2lmKGwmJmwuaGVpZ2h0PjApe2xldCBjPW5ldyBvbChsLmhlaWdodC8yKTtyZXR1cm4gYy5mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZShuLG8pLHQuc2V0KG8sYyksby5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyKSxlKGMudGV4dHVyZSxvLm1hcHBpbmcpfWVsc2UgcmV0dXJuIG51bGx9fXJldHVybiBvfWZ1bmN0aW9uIHIobyl7bGV0IGE9by50YXJnZXQ7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyKTtsZXQgbD10LmdldChhKTtsIT09dm9pZCAwJiYodC5kZWxldGUoYSksbC5kaXNwb3NlKCkpfWZ1bmN0aW9uIHMoKXt0PW5ldyBXZWFrTWFwfXJldHVybntnZXQ6aSxkaXNwb3NlOnN9fXZhciBWaT1jbGFzcyBleHRlbmRzIG9ve2NvbnN0cnVjdG9yKHQ9LTEsZT0xLGk9MSxyPS0xLHM9LjEsbz0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJPcnRob2dyYXBoaWNDYW1lcmEiLHRoaXMuem9vbT0xLHRoaXMudmlldz1udWxsLHRoaXMubGVmdD10LHRoaXMucmlnaHQ9ZSx0aGlzLnRvcD1pLHRoaXMuYm90dG9tPXIsdGhpcy5uZWFyPXMsdGhpcy5mYXI9byx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLmxlZnQ9dC5sZWZ0LHRoaXMucmlnaHQ9dC5yaWdodCx0aGlzLnRvcD10LnRvcCx0aGlzLmJvdHRvbT10LmJvdHRvbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuem9vbT10Lnpvb20sdGhpcy52aWV3PXQudmlldz09PW51bGw/bnVsbDpPYmplY3QuYXNzaWduKHt9LHQudmlldyksdGhpc31zZXRWaWV3T2Zmc2V0KHQsZSxpLHIscyxvKXt0aGlzLnZpZXc9PT1udWxsJiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9ZSx0aGlzLnZpZXcub2Zmc2V0WD1pLHRoaXMudmlldy5vZmZzZXRZPXIsdGhpcy52aWV3LndpZHRoPXMsdGhpcy52aWV3LmhlaWdodD1vLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNsZWFyVmlld09mZnNldCgpe3RoaXMudmlldyE9PW51bGwmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9dXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpe2xldCB0PSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvKDIqdGhpcy56b29tKSxlPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvKDIqdGhpcy56b29tKSxpPSh0aGlzLnJpZ2h0K3RoaXMubGVmdCkvMixyPSh0aGlzLnRvcCt0aGlzLmJvdHRvbSkvMixzPWktdCxvPWkrdCxhPXIrZSxsPXItZTtpZih0aGlzLnZpZXchPT1udWxsJiZ0aGlzLnZpZXcuZW5hYmxlZCl7bGV0IGM9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS90aGlzLnZpZXcuZnVsbFdpZHRoL3RoaXMuem9vbSx1PSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvdGhpcy52aWV3LmZ1bGxIZWlnaHQvdGhpcy56b29tO3MrPWMqdGhpcy52aWV3Lm9mZnNldFgsbz1zK2MqdGhpcy52aWV3LndpZHRoLGEtPXUqdGhpcy52aWV3Lm9mZnNldFksbD1hLXUqdGhpcy52aWV3LmhlaWdodH10aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyhzLG8sYSxsLHRoaXMubmVhcix0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quem9vbT10aGlzLnpvb20sZS5vYmplY3QubGVmdD10aGlzLmxlZnQsZS5vYmplY3QucmlnaHQ9dGhpcy5yaWdodCxlLm9iamVjdC50b3A9dGhpcy50b3AsZS5vYmplY3QuYm90dG9tPXRoaXMuYm90dG9tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcix0aGlzLnZpZXchPT1udWxsJiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGV9fTtWaS5wcm90b3R5cGUuaXNPcnRob2dyYXBoaWNDYW1lcmE9ITA7dmFyIFhyPWNsYXNzIGV4dGVuZHMgRm57Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50eXBlPSJSYXdTaGFkZXJNYXRlcmlhbCJ9fTtYci5wcm90b3R5cGUuaXNSYXdTaGFkZXJNYXRlcmlhbD0hMDt2YXIga3I9NCxuaT04LGhuPU1hdGgucG93KDIsbmkpLHgwPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSx5MD1uaS1rcisxK3gwLmxlbmd0aCxBcj0yMCxUdT1uZXcgVmkse19sb2RQbGFuZXM6R3MsX3NpemVMb2RzOm1nLF9zaWdtYXM6VWF9PVExKCksZ2c9bmV3IGZ0LEF1PW51bGwsemk9KDErTWF0aC5zcXJ0KDUpKS8yLENyPTEvemkseGc9W25ldyBUKDEsMSwxKSxuZXcgVCgtMSwxLDEpLG5ldyBUKDEsMSwtMSksbmV3IFQoLTEsMSwtMSksbmV3IFQoMCx6aSxDciksbmV3IFQoMCx6aSwtQ3IpLG5ldyBUKENyLDAsemkpLG5ldyBUKC1DciwwLHppKSxuZXcgVCh6aSxDciwwKSxuZXcgVCgtemksQ3IsMCldLGFsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9bnVsbCx0aGlzLl9ibHVyTWF0ZXJpYWw9ajEoQXIpLHRoaXMuX2VxdWlyZWN0U2hhZGVyPW51bGwsdGhpcy5fY3ViZW1hcFNoYWRlcj1udWxsLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpfWZyb21TY2VuZSh0LGU9MCxpPS4xLHI9MTAwKXtBdT10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgcz10aGlzLl9hbGxvY2F0ZVRhcmdldHMoKTtyZXR1cm4gdGhpcy5fc2NlbmVUb0N1YmVVVih0LGkscixzKSxlPjAmJnRoaXMuX2JsdXIocywwLDAsZSksdGhpcy5fYXBwbHlQTVJFTShzKSx0aGlzLl9jbGVhbnVwKHMpLHN9ZnJvbUVxdWlyZWN0YW5ndWxhcih0LGU9bnVsbCl7cmV0dXJuIHRoaXMuX2Zyb21UZXh0dXJlKHQsZSl9ZnJvbUN1YmVtYXAodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWNvbXBpbGVDdWJlbWFwU2hhZGVyKCl7dGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPV9nKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2N1YmVtYXBTaGFkZXIpKX1jb21waWxlRXF1aXJlY3Rhbmd1bGFyU2hhZGVyKCl7dGhpcy5fZXF1aXJlY3RTaGFkZXI9PT1udWxsJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9dmcoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fZXF1aXJlY3RTaGFkZXIpKX1kaXNwb3NlKCl7dGhpcy5fYmx1ck1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCE9PW51bGwmJnRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKSx0aGlzLl9jdWJlbWFwU2hhZGVyIT09bnVsbCYmdGhpcy5fY3ViZW1hcFNoYWRlci5kaXNwb3NlKCksdGhpcy5fZXF1aXJlY3RTaGFkZXIhPT1udWxsJiZ0aGlzLl9lcXVpcmVjdFNoYWRlci5kaXNwb3NlKCk7Zm9yKGxldCB0PTA7dDxHcy5sZW5ndGg7dCsrKUdzW3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoQXUpLHQuc2Npc3NvclRlc3Q9ITEsQmEodCwwLDAsdC53aWR0aCx0LmhlaWdodCl9X2Zyb21UZXh0dXJlKHQsZSl7QXU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IGk9ZXx8dGhpcy5fYWxsb2NhdGVUYXJnZXRzKHQpO3JldHVybiB0aGlzLl90ZXh0dXJlVG9DdWJlVVYodCxpKSx0aGlzLl9hcHBseVBNUkVNKGkpLHRoaXMuX2NsZWFudXAoaSksaX1fYWxsb2NhdGVUYXJnZXRzKHQpe2xldCBlPXttYWdGaWx0ZXI6YmUsbWluRmlsdGVyOmJlLGdlbmVyYXRlTWlwbWFwczohMSx0eXBlOlVyLGZvcm1hdDpSZSxlbmNvZGluZzpyaSxkZXB0aEJ1ZmZlcjohMX0saT15ZyhlKTtyZXR1cm4gaS5kZXB0aEJ1ZmZlcj0hdCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD09PW51bGwmJih0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD15ZyhlKSksaX1fY29tcGlsZU1hdGVyaWFsKHQpe2xldCBlPW5ldyBvZShHc1swXSx0KTt0aGlzLl9yZW5kZXJlci5jb21waWxlKGUsVHUpfV9zY2VuZVRvQ3ViZVVWKHQsZSxpLHIpe2xldCBhPW5ldyBTZSg5MCwxLGUsaSksbD1bMSwtMSwxLDEsMSwxXSxjPVsxLDEsMSwtMSwtMSwtMV0sdT10aGlzLl9yZW5kZXJlcixoPXUuYXV0b0NsZWFyLGY9dS50b25lTWFwcGluZzt1LmdldENsZWFyQ29sb3IoZ2cpLHUudG9uZU1hcHBpbmc9dGksdS5hdXRvQ2xlYXI9ITE7bGV0IGQ9bmV3IGtpKHtuYW1lOiJQTVJFTS5CYWNrZ3JvdW5kIixzaWRlOmhlLGRlcHRoV3JpdGU6ITEsZGVwdGhUZXN0OiExfSksZz1uZXcgb2UobmV3IEhpLGQpLHg9ITEsdj10LmJhY2tncm91bmQ7dj92LmlzQ29sb3ImJihkLmNvbG9yLmNvcHkodiksdC5iYWNrZ3JvdW5kPW51bGwseD0hMCk6KGQuY29sb3IuY29weShnZykseD0hMCk7Zm9yKGxldCBtPTA7bTw2O20rKyl7bGV0IHA9bSUzO3A9PT0wPyhhLnVwLnNldCgwLGxbbV0sMCksYS5sb29rQXQoY1ttXSwwLDApKTpwPT09MT8oYS51cC5zZXQoMCwwLGxbbV0pLGEubG9va0F0KDAsY1ttXSwwKSk6KGEudXAuc2V0KDAsbFttXSwwKSxhLmxvb2tBdCgwLDAsY1ttXSkpLEJhKHIscCpobixtPjI/aG46MCxobixobiksdS5zZXRSZW5kZXJUYXJnZXQocikseCYmdS5yZW5kZXIoZyxhKSx1LnJlbmRlcih0LGEpfWcuZ2VvbWV0cnkuZGlzcG9zZSgpLGcubWF0ZXJpYWwuZGlzcG9zZSgpLHUudG9uZU1hcHBpbmc9Zix1LmF1dG9DbGVhcj1oLHQuYmFja2dyb3VuZD12fV90ZXh0dXJlVG9DdWJlVVYodCxlKXtsZXQgaT10aGlzLl9yZW5kZXJlcixyPXQubWFwcGluZz09PUFvfHx0Lm1hcHBpbmc9PT1DbztyPyh0aGlzLl9jdWJlbWFwU2hhZGVyPT09bnVsbCYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9X2coKSksdGhpcy5fY3ViZW1hcFNoYWRlci51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPXQuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSk6dGhpcy5fZXF1aXJlY3RTaGFkZXI9PT1udWxsJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9dmcoKSk7bGV0IHM9cj90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLG89bmV3IG9lKEdzWzBdLHMpLGE9cy51bmlmb3JtczthLmVudk1hcC52YWx1ZT10LHJ8fGEudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksQmEoZSwwLDAsMypobiwyKmhuKSxpLnNldFJlbmRlclRhcmdldChlKSxpLnJlbmRlcihvLFR1KX1fYXBwbHlQTVJFTSh0KXtsZXQgZT10aGlzLl9yZW5kZXJlcixpPWUuYXV0b0NsZWFyO2UuYXV0b0NsZWFyPSExO2ZvcihsZXQgcj0xO3I8eTA7cisrKXtsZXQgcz1NYXRoLnNxcnQoVWFbcl0qVWFbcl0tVWFbci0xXSpVYVtyLTFdKSxvPXhnWyhyLTEpJXhnLmxlbmd0aF07dGhpcy5fYmx1cih0LHItMSxyLHMsbyl9ZS5hdXRvQ2xlYXI9aX1fYmx1cih0LGUsaSxyLHMpe2xldCBvPXRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0O3RoaXMuX2hhbGZCbHVyKHQsbyxlLGksciwibGF0aXR1ZGluYWwiLHMpLHRoaXMuX2hhbGZCbHVyKG8sdCxpLGksciwibG9uZ2l0dWRpbmFsIixzKX1faGFsZkJsdXIodCxlLGkscixzLG8sYSl7bGV0IGw9dGhpcy5fcmVuZGVyZXIsYz10aGlzLl9ibHVyTWF0ZXJpYWw7byE9PSJsYXRpdHVkaW5hbCImJm8hPT0ibG9uZ2l0dWRpbmFsIiYmY29uc29sZS5lcnJvcigiYmx1ciBkaXJlY3Rpb24gbXVzdCBiZSBlaXRoZXIgbGF0aXR1ZGluYWwgb3IgbG9uZ2l0dWRpbmFsISIpO2xldCB1PTMsaD1uZXcgb2UoR3Nbcl0sYyksZj1jLnVuaWZvcm1zLGQ9bWdbaV0tMSxnPWlzRmluaXRlKHMpP01hdGguUEkvKDIqZCk6MipNYXRoLlBJLygyKkFyLTEpLHg9cy9nLHY9aXNGaW5pdGUocyk/MStNYXRoLmZsb29yKHUqeCk6QXI7dj5BciYmY29uc29sZS53YXJuKGBzaWdtYVJhZGlhbnMsICR7c30sIGlzIHRvbyBsYXJnZSBhbmQgd2lsbCBjbGlwLCBhcyBpdCByZXF1ZXN0ZWQgJHt2fSBzYW1wbGVzIHdoZW4gdGhlIG1heGltdW0gaXMgc2V0IHRvICR7QXJ9YCk7bGV0IG09W10scD0wO2ZvcihsZXQgTD0wO0w8QXI7KytMKXtsZXQgQT1ML3gsSD1NYXRoLmV4cCgtQSpBLzIpO20ucHVzaChIKSxMPT09MD9wKz1IOkw8diYmKHArPTIqSCl9Zm9yKGxldCBMPTA7TDxtLmxlbmd0aDtMKyspbVtMXT1tW0xdL3A7Zi5lbnZNYXAudmFsdWU9dC50ZXh0dXJlLGYuc2FtcGxlcy52YWx1ZT12LGYud2VpZ2h0cy52YWx1ZT1tLGYubGF0aXR1ZGluYWwudmFsdWU9bz09PSJsYXRpdHVkaW5hbCIsYSYmKGYucG9sZUF4aXMudmFsdWU9YSksZi5kVGhldGEudmFsdWU9ZyxmLm1pcEludC52YWx1ZT1uaS1pO2xldCBiPW1nW3JdLF89MypNYXRoLm1heCgwLGhuLTIqYiksUz0ocj09PTA/MDoyKmhuKSsyKmIqKHI+bmkta3I/ci1uaStrcjowKTtCYShlLF8sUywzKmIsMipiKSxsLnNldFJlbmRlclRhcmdldChlKSxsLnJlbmRlcihoLFR1KX19O2Z1bmN0aW9uIFExKCl7bGV0IG49W10sdD1bXSxlPVtdLGk9bmk7Zm9yKGxldCByPTA7cjx5MDtyKyspe2xldCBzPU1hdGgucG93KDIsaSk7dC5wdXNoKHMpO2xldCBvPTEvcztyPm5pLWtyP289eDBbci1uaStrci0xXTpyPT09MCYmKG89MCksZS5wdXNoKG8pO2xldCBhPTEvKHMtMSksbD0tYS8yLGM9MSthLzIsdT1bbCxsLGMsbCxjLGMsbCxsLGMsYyxsLGNdLGg9NixmPTYsZD0zLGc9Mix4PTEsdj1uZXcgRmxvYXQzMkFycmF5KGQqZipoKSxtPW5ldyBGbG9hdDMyQXJyYXkoZypmKmgpLHA9bmV3IEZsb2F0MzJBcnJheSh4KmYqaCk7Zm9yKGxldCBfPTA7XzxoO18rKyl7bGV0IFM9XyUzKjIvMy0xLEw9Xz4yPzA6LTEsQT1bUyxMLDAsUysyLzMsTCwwLFMrMi8zLEwrMSwwLFMsTCwwLFMrMi8zLEwrMSwwLFMsTCsxLDBdO3Yuc2V0KEEsZCpmKl8pLG0uc2V0KHUsZypmKl8pO2xldCBIPVtfLF8sXyxfLF8sX107cC5zZXQoSCx4KmYqXyl9bGV0IGI9bmV3IEh0O2Iuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFF0KHYsZCkpLGIuc2V0QXR0cmlidXRlKCJ1diIsbmV3IFF0KG0sZykpLGIuc2V0QXR0cmlidXRlKCJmYWNlSW5kZXgiLG5ldyBRdChwLHgpKSxuLnB1c2goYiksaT5rciYmaS0tfXJldHVybntfbG9kUGxhbmVzOm4sX3NpemVMb2RzOnQsX3NpZ21hczplfX1mdW5jdGlvbiB5ZyhuKXtsZXQgdD1uZXcgTmUoMypobiwzKmhuLG4pO3JldHVybiB0LnRleHR1cmUubWFwcGluZz1SbCx0LnRleHR1cmUubmFtZT0iUE1SRU0uY3ViZVV2Iix0LnNjaXNzb3JUZXN0PSEwLHR9ZnVuY3Rpb24gQmEobix0LGUsaSxyKXtuLnZpZXdwb3J0LnNldCh0LGUsaSxyKSxuLnNjaXNzb3Iuc2V0KHQsZSxpLHIpfWZ1bmN0aW9uIGoxKG4pe2xldCB0PW5ldyBGbG9hdDMyQXJyYXkobiksZT1uZXcgVCgwLDEsMCk7cmV0dXJuIG5ldyBYcih7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntufSx1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxzYW1wbGVzOnt2YWx1ZToxfSx3ZWlnaHRzOnt2YWx1ZTp0fSxsYXRpdHVkaW5hbDp7dmFsdWU6ITF9LGRUaGV0YTp7dmFsdWU6MH0sbWlwSW50Ont2YWx1ZTowfSxwb2xlQXhpczp7dmFsdWU6ZX19LHZlcnRleFNoYWRlcjpqaCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSBpbnQgc2FtcGxlczsKCQkJdW5pZm9ybSBmbG9hdCB3ZWlnaHRzWyBuIF07CgkJCXVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDsKCQkJdW5pZm9ybSBmbG9hdCBkVGhldGE7CgkJCXVuaWZvcm0gZmxvYXQgbWlwSW50OwoJCQl1bmlmb3JtIHZlYzMgcG9sZUF4aXM7CgoJCQkjZGVmaW5lIEVOVk1BUF9UWVBFX0NVQkVfVVYKCQkJI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KCgkJCXZlYzMgZ2V0U2FtcGxlKCBmbG9hdCB0aGV0YSwgdmVjMyBheGlzICkgewoKCQkJCWZsb2F0IGNvc1RoZXRhID0gY29zKCB0aGV0YSApOwoJCQkJLy8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uCgkJCQl2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YQoJCQkJCSsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKQoJCQkJCSsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApOwoKCQkJCXJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApOwoKCQkJfQoKCQkJdm9pZCBtYWluKCkgewoKCQkJCXZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTsKCgkJCQlpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHsKCgkJCQkJYXhpcyA9IHZlYzMoIHZPdXRwdXREaXJlY3Rpb24ueiwgMC4wLCAtIHZPdXRwdXREaXJlY3Rpb24ueCApOwoKCQkJCX0KCgkJCQlheGlzID0gbm9ybWFsaXplKCBheGlzICk7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7CgoJCQkJZm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkgewoKCQkJCQlpZiAoIGkgPj0gc2FtcGxlcyApIHsKCgkJCQkJCWJyZWFrOwoKCQkJCQl9CgoJCQkJCWZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTsKCQkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7CgoJCQkJfQoKCQkJfQoJCWAsYmxlbmRpbmc6am4sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiB2Zygpe2xldCBuPW5ldyBLKDEsMSk7cmV0dXJuIG5ldyBYcih7bmFtZToiRXF1aXJlY3Rhbmd1bGFyVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHRleGVsU2l6ZTp7dmFsdWU6bn19LHZlcnRleFNoYWRlcjpqaCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTsKCgkJCSNpbmNsdWRlIDxjb21tb24+CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgoJCQkJdmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTsKCQkJCXZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTsKCgkJCQl2ZWMyIGYgPSBmcmFjdCggdXYgLyB0ZXhlbFNpemUgLSAwLjUgKTsKCQkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCQl2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggKz0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIHRyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnkgKz0gdGV4ZWxTaXplLnk7CgkJCQl2ZWMzIGJyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggLT0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCgkJCQl2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApOwoJCQkJdmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTsKCQkJCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIHRtLCBibSwgZi55ICk7CgoJCQl9CgkJYCxibGVuZGluZzpqbixkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIF9nKCl7cmV0dXJuIG5ldyBYcih7bmFtZToiQ3ViZW1hcFRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX19LHZlcnRleFNoYWRlcjpqaCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwOwoKCQkJdm9pZCBtYWluKCkgewoKCQkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiB2T3V0cHV0RGlyZWN0aW9uLngsIHZPdXRwdXREaXJlY3Rpb24ueXogKSApOwoKCQkJfQoJCWAsYmxlbmRpbmc6am4sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBqaCgpe3JldHVybmAKCgkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQlhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4OwoKCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJLy8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvbgoJCXZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkgewoKCQkJdXYgPSAyLjAgKiB1diAtIDEuMDsKCgkJCXZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApOwoKCQkJaWYgKCBmYWNlID09IDAuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHsKCgkJCQlkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHoKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHsKCgkJCQlkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHoKCgkJCX0KCgkJCXJldHVybiBkaXJlY3Rpb247CgoJCX0KCgkJdm9pZCBtYWluKCkgewoKCQkJdk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApOwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKCgkJfQoJYH1mdW5jdGlvbiB0UyhuKXtsZXQgdD1uZXcgV2Vha01hcCxlPW51bGw7ZnVuY3Rpb24gaShhKXtpZihhJiZhLmlzVGV4dHVyZSl7bGV0IGw9YS5tYXBwaW5nLGM9bD09PVV1fHxsPT09QnUsdT1sPT09QW98fGw9PT1DbztpZihjfHx1KWlmKGEuaXNSZW5kZXJUYXJnZXRUZXh0dXJlJiZhLm5lZWRzUE1SRU1VcGRhdGU9PT0hMCl7YS5uZWVkc1BNUkVNVXBkYXRlPSExO2xldCBoPXQuZ2V0KGEpO3JldHVybiBlPT09bnVsbCYmKGU9bmV3IGFsKG4pKSxoPWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKGEsaCk6ZS5mcm9tQ3ViZW1hcChhLGgpLHQuc2V0KGEsaCksaC50ZXh0dXJlfWVsc2V7aWYodC5oYXMoYSkpcmV0dXJuIHQuZ2V0KGEpLnRleHR1cmU7e2xldCBoPWEuaW1hZ2U7aWYoYyYmaCYmaC5oZWlnaHQ+MHx8dSYmaCYmcihoKSl7ZT09PW51bGwmJihlPW5ldyBhbChuKSk7bGV0IGY9Yz9lLmZyb21FcXVpcmVjdGFuZ3VsYXIoYSk6ZS5mcm9tQ3ViZW1hcChhKTtyZXR1cm4gdC5zZXQoYSxmKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpLGYudGV4dHVyZX1lbHNlIHJldHVybiBudWxsfX19cmV0dXJuIGF9ZnVuY3Rpb24gcihhKXtsZXQgbD0wLGM9Njtmb3IobGV0IHU9MDt1PGM7dSsrKWFbdV0hPT12b2lkIDAmJmwrKztyZXR1cm4gbD09PWN9ZnVuY3Rpb24gcyhhKXtsZXQgbD1hLnRhcmdldDtsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpO2xldCBjPXQuZ2V0KGwpO2MhPT12b2lkIDAmJih0LmRlbGV0ZShsKSxjLmRpc3Bvc2UoKSl9ZnVuY3Rpb24gbygpe3Q9bmV3IFdlYWtNYXAsZSE9PW51bGwmJihlLmRpc3Bvc2UoKSxlPW51bGwpfXJldHVybntnZXQ6aSxkaXNwb3NlOm99fWZ1bmN0aW9uIGVTKG4pe2xldCB0PXt9O2Z1bmN0aW9uIGUoaSl7aWYodFtpXSE9PXZvaWQgMClyZXR1cm4gdFtpXTtsZXQgcjtzd2l0Y2goaSl7Y2FzZSJXRUJHTF9kZXB0aF90ZXh0dXJlIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUiKTticmVhaztjYXNlIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyI6cj1uLmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8bi5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpO2JyZWFrO2RlZmF1bHQ6cj1uLmdldEV4dGVuc2lvbihpKX1yZXR1cm4gdFtpXT1yLHJ9cmV0dXJue2hhczpmdW5jdGlvbihpKXtyZXR1cm4gZShpKSE9PW51bGx9LGluaXQ6ZnVuY3Rpb24oaSl7aS5pc1dlYkdMMj9lKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik6KGUoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxlKCJPRVNfdGV4dHVyZV9mbG9hdCIpLGUoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxlKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpLGUoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpLGUoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSxlKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLGUoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSksZSgiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIiksZSgiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IiksZSgiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9LGdldDpmdW5jdGlvbihpKXtsZXQgcj1lKGkpO3JldHVybiByPT09bnVsbCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK2krIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKSxyfX19ZnVuY3Rpb24gblMobix0LGUsaSl7bGV0IHI9e30scz1uZXcgV2Vha01hcDtmdW5jdGlvbiBvKGgpe2xldCBmPWgudGFyZ2V0O2YuaW5kZXghPT1udWxsJiZ0LnJlbW92ZShmLmluZGV4KTtmb3IobGV0IGcgaW4gZi5hdHRyaWJ1dGVzKXQucmVtb3ZlKGYuYXR0cmlidXRlc1tnXSk7Zi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxkZWxldGUgcltmLmlkXTtsZXQgZD1zLmdldChmKTtkJiYodC5yZW1vdmUoZCkscy5kZWxldGUoZikpLGkucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkoZiksZi5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PT09ITAmJmRlbGV0ZSBmLl9tYXhJbnN0YW5jZUNvdW50LGUubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBhKGgsZil7cmV0dXJuIHJbZi5pZF09PT0hMHx8KGYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbykscltmLmlkXT0hMCxlLm1lbW9yeS5nZW9tZXRyaWVzKyspLGZ9ZnVuY3Rpb24gbChoKXtsZXQgZj1oLmF0dHJpYnV0ZXM7Zm9yKGxldCBnIGluIGYpdC51cGRhdGUoZltnXSwzNDk2Mik7bGV0IGQ9aC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBnIGluIGQpe2xldCB4PWRbZ107Zm9yKGxldCB2PTAsbT14Lmxlbmd0aDt2PG07disrKXQudXBkYXRlKHhbdl0sMzQ5NjIpfX1mdW5jdGlvbiBjKGgpe2xldCBmPVtdLGQ9aC5pbmRleCxnPWguYXR0cmlidXRlcy5wb3NpdGlvbix4PTA7aWYoZCE9PW51bGwpe2xldCBwPWQuYXJyYXk7eD1kLnZlcnNpb247Zm9yKGxldCBiPTAsXz1wLmxlbmd0aDtiPF87Yis9Myl7bGV0IFM9cFtiKzBdLEw9cFtiKzFdLEE9cFtiKzJdO2YucHVzaChTLEwsTCxBLEEsUyl9fWVsc2V7bGV0IHA9Zy5hcnJheTt4PWcudmVyc2lvbjtmb3IobGV0IGI9MCxfPXAubGVuZ3RoLzMtMTtiPF87Yis9Myl7bGV0IFM9YiswLEw9YisxLEE9YisyO2YucHVzaChTLEwsTCxBLEEsUyl9fWxldCB2PW5ldyhwMChmKT9zbDpybCkoZiwxKTt2LnZlcnNpb249eDtsZXQgbT1zLmdldChoKTttJiZ0LnJlbW92ZShtKSxzLnNldChoLHYpfWZ1bmN0aW9uIHUoaCl7bGV0IGY9cy5nZXQoaCk7aWYoZil7bGV0IGQ9aC5pbmRleDtkIT09bnVsbCYmZi52ZXJzaW9uPGQudmVyc2lvbiYmYyhoKX1lbHNlIGMoaCk7cmV0dXJuIHMuZ2V0KGgpfXJldHVybntnZXQ6YSx1cGRhdGU6bCxnZXRXaXJlZnJhbWVBdHRyaWJ1dGU6dX19ZnVuY3Rpb24gaVMobix0LGUsaSl7bGV0IHI9aS5pc1dlYkdMMixzO2Z1bmN0aW9uIG8oZil7cz1mfWxldCBhLGw7ZnVuY3Rpb24gYyhmKXthPWYudHlwZSxsPWYuYnl0ZXNQZXJFbGVtZW50fWZ1bmN0aW9uIHUoZixkKXtuLmRyYXdFbGVtZW50cyhzLGQsYSxmKmwpLGUudXBkYXRlKGQscywxKX1mdW5jdGlvbiBoKGYsZCxnKXtpZihnPT09MClyZXR1cm47bGV0IHgsdjtpZihyKXg9bix2PSJkcmF3RWxlbWVudHNJbnN0YW5jZWQiO2Vsc2UgaWYoeD10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLHY9ImRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIix4PT09bnVsbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3JldHVybn14W3ZdKHMsZCxhLGYqbCxnKSxlLnVwZGF0ZShkLHMsZyl9dGhpcy5zZXRNb2RlPW8sdGhpcy5zZXRJbmRleD1jLHRoaXMucmVuZGVyPXUsdGhpcy5yZW5kZXJJbnN0YW5jZXM9aH1mdW5jdGlvbiByUyhuKXtsZXQgdD17Z2VvbWV0cmllczowLHRleHR1cmVzOjB9LGU9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtmdW5jdGlvbiBpKHMsbyxhKXtzd2l0Y2goZS5jYWxscysrLG8pe2Nhc2UgNDplLnRyaWFuZ2xlcys9YSoocy8zKTticmVhaztjYXNlIDE6ZS5saW5lcys9YSoocy8yKTticmVhaztjYXNlIDM6ZS5saW5lcys9YSoocy0xKTticmVhaztjYXNlIDI6ZS5saW5lcys9YSpzO2JyZWFrO2Nhc2UgMDplLnBvaW50cys9YSpzO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLG8pO2JyZWFrfX1mdW5jdGlvbiByKCl7ZS5mcmFtZSsrLGUuY2FsbHM9MCxlLnRyaWFuZ2xlcz0wLGUucG9pbnRzPTAsZS5saW5lcz0wfXJldHVybnttZW1vcnk6dCxyZW5kZXI6ZSxwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDpyLHVwZGF0ZTppfX12YXIgY289Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDppLGRlcHRoOnJ9LHRoaXMubWFnRmlsdGVyPWZlLHRoaXMubWluRmlsdGVyPWZlLHRoaXMud3JhcFI9VmUsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07Y28ucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO2Z1bmN0aW9uIHNTKG4sdCl7cmV0dXJuIG5bMF0tdFswXX1mdW5jdGlvbiBvUyhuLHQpe3JldHVybiBNYXRoLmFicyh0WzFdKS1NYXRoLmFicyhuWzFdKX1mdW5jdGlvbiB3ZyhuLHQpe2xldCBlPTEsaT10LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/dC5kYXRhLmFycmF5OnQuYXJyYXk7aSBpbnN0YW5jZW9mIEludDhBcnJheT9lPTEyNzppIGluc3RhbmNlb2YgSW50MTZBcnJheT9lPTMyNzY3OmkgaW5zdGFuY2VvZiBJbnQzMkFycmF5P2U9MjE0NzQ4MzY0Nzpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE1vcnBodGFyZ2V0czogVW5zdXBwb3J0ZWQgbW9ycGggYXR0cmlidXRlIGRhdGEgdHlwZTogIixpKSxuLmRpdmlkZVNjYWxhcihlKX1mdW5jdGlvbiBhUyhuLHQsZSl7bGV0IGk9e30scj1uZXcgRmxvYXQzMkFycmF5KDgpLHM9bmV3IFdlYWtNYXAsbz1uZXcgVCxhPVtdO2ZvcihsZXQgYz0wO2M8ODtjKyspYVtjXT1bYywwXTtmdW5jdGlvbiBsKGMsdSxoLGYpe2xldCBkPWMubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKHQuaXNXZWJHTDI9PT0hMCl7bGV0IGc9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoLHg9cy5nZXQodSk7aWYoeD09PXZvaWQgMHx8eC5jb3VudCE9PWcpe2xldCBSPWZ1bmN0aW9uKCl7WC5kaXNwb3NlKCkscy5kZWxldGUodSksdS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixSKX07eCE9PXZvaWQgMCYmeC50ZXh0dXJlLmRpc3Bvc2UoKTtsZXQgcD11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwhPT12b2lkIDAsYj11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixfPXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbHx8W10sUz11LmF0dHJpYnV0ZXMucG9zaXRpb24uY291bnQsTD1wPT09ITA/MjoxLEE9UypMLEg9MTtBPnQubWF4VGV4dHVyZVNpemUmJihIPU1hdGguY2VpbChBL3QubWF4VGV4dHVyZVNpemUpLEE9dC5tYXhUZXh0dXJlU2l6ZSk7bGV0IHR0PW5ldyBGbG9hdDMyQXJyYXkoQSpIKjQqZyksWD1uZXcgY28odHQsQSxILGcpO1guZm9ybWF0PVJlLFgudHlwZT1VaSxYLm5lZWRzVXBkYXRlPSEwO2xldCB5PUwqNDtmb3IobGV0IEQ9MDtEPGc7RCsrKXtsZXQgRj1iW0RdLHo9X1tEXSxOPUEqSCo0KkQ7Zm9yKGxldCBWPTA7VjxGLmNvdW50O1YrKyl7by5mcm9tQnVmZmVyQXR0cmlidXRlKEYsViksRi5ub3JtYWxpemVkPT09ITAmJndnKG8sRik7bGV0IFE9Vip5O3R0W04rUSswXT1vLngsdHRbTitRKzFdPW8ueSx0dFtOK1ErMl09by56LHR0W04rUSszXT0wLHA9PT0hMCYmKG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh6LFYpLHoubm9ybWFsaXplZD09PSEwJiZ3ZyhvLHopLHR0W04rUSs0XT1vLngsdHRbTitRKzVdPW8ueSx0dFtOK1ErNl09by56LHR0W04rUSs3XT0wKX19eD17Y291bnQ6Zyx0ZXh0dXJlOlgsc2l6ZTpuZXcgSyhBLEgpfSxzLnNldCh1LHgpLHUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsUil9bGV0IHY9MDtmb3IobGV0IHA9MDtwPGQubGVuZ3RoO3ArKyl2Kz1kW3BdO2xldCBtPXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLXY7Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsbSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsZCksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0c1RleHR1cmUiLHgudGV4dHVyZSxlKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRzVGV4dHVyZVNpemUiLHguc2l6ZSl9ZWxzZXtsZXQgZz1kPT09dm9pZCAwPzA6ZC5sZW5ndGgseD1pW3UuaWRdO2lmKHg9PT12b2lkIDB8fHgubGVuZ3RoIT09Zyl7eD1bXTtmb3IobGV0IF89MDtfPGc7XysrKXhbX109W18sMF07aVt1LmlkXT14fWZvcihsZXQgXz0wO188ZztfKyspe2xldCBTPXhbX107U1swXT1fLFNbMV09ZFtfXX14LnNvcnQob1MpO2ZvcihsZXQgXz0wO188ODtfKyspXzxnJiZ4W19dWzFdPyhhW19dWzBdPXhbX11bMF0sYVtfXVsxXT14W19dWzFdKTooYVtfXVswXT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixhW19dWzFdPTApO2Euc29ydChzUyk7bGV0IHY9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbT11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwscD0wO2ZvcihsZXQgXz0wO188ODtfKyspe2xldCBTPWFbX10sTD1TWzBdLEE9U1sxXTtMIT09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVImJkE/KHYmJnUuZ2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrXykhPT12W0xdJiZ1LnNldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK18sdltMXSksbSYmdS5nZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitfKSE9PW1bTF0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrXyxtW0xdKSxyW19dPUEscCs9QSk6KHYmJnUuaGFzQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrXyk9PT0hMCYmdS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitfKSxtJiZ1Lmhhc0F0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK18pPT09ITAmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrXykscltfXT0wKX1sZXQgYj11Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS1wO2YuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLGIpLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLHIpfX1yZXR1cm57dXBkYXRlOmx9fWZ1bmN0aW9uIGxTKG4sdCxlLGkpe2xldCByPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHMobCl7bGV0IGM9aS5yZW5kZXIuZnJhbWUsdT1sLmdlb21ldHJ5LGg9dC5nZXQobCx1KTtyZXR1cm4gci5nZXQoaCkhPT1jJiYodC51cGRhdGUoaCksci5zZXQoaCxjKSksbC5pc0luc3RhbmNlZE1lc2gmJihsLmhhc0V2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpPT09ITEmJmwuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksZS51cGRhdGUobC5pbnN0YW5jZU1hdHJpeCwzNDk2MiksbC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmZS51cGRhdGUobC5pbnN0YW5jZUNvbG9yLDM0OTYyKSksaH1mdW5jdGlvbiBvKCl7cj1uZXcgV2Vha01hcH1mdW5jdGlvbiBhKGwpe2xldCBjPWwudGFyZ2V0O2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksZS5yZW1vdmUoYy5pbnN0YW5jZU1hdHJpeCksYy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmZS5yZW1vdmUoYy5pbnN0YW5jZUNvbG9yKX1yZXR1cm57dXBkYXRlOnMsZGlzcG9zZTpvfX12YXIgbGw9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDppLGRlcHRoOnJ9LHRoaXMubWFnRmlsdGVyPWZlLHRoaXMubWluRmlsdGVyPWZlLHRoaXMud3JhcFI9VmUsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07bGwucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRD0hMDt2YXIgdjA9bmV3IGFlLF8wPW5ldyBjbyx3MD1uZXcgbGwsTTA9bmV3IFdyLE1nPVtdLGJnPVtdLFNnPW5ldyBGbG9hdDMyQXJyYXkoMTYpLEVnPW5ldyBGbG9hdDMyQXJyYXkoOSksVGc9bmV3IEZsb2F0MzJBcnJheSg0KTtmdW5jdGlvbiBlcyhuLHQsZSl7bGV0IGk9blswXTtpZihpPD0wfHxpPjApcmV0dXJuIG47bGV0IHI9dCplLHM9TWdbcl07aWYocz09PXZvaWQgMCYmKHM9bmV3IEZsb2F0MzJBcnJheShyKSxNZ1tyXT1zKSx0IT09MCl7aS50b0FycmF5KHMsMCk7Zm9yKGxldCBvPTEsYT0wO28hPT10OysrbylhKz1lLG5bb10udG9BcnJheShzLGEpfXJldHVybiBzfWZ1bmN0aW9uIExlKG4sdCl7aWYobi5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MCxpPW4ubGVuZ3RoO2U8aTtlKyspaWYobltlXSE9PXRbZV0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gVGUobix0KXtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspbltlXT10W2VdfWZ1bmN0aW9uIFBsKG4sdCl7bGV0IGU9YmdbdF07ZT09PXZvaWQgMCYmKGU9bmV3IEludDMyQXJyYXkodCksYmdbdF09ZSk7Zm9yKGxldCBpPTA7aSE9PXQ7KytpKWVbaV09bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7cmV0dXJuIGV9ZnVuY3Rpb24gY1Mobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMWYodGhpcy5hZGRyLHQpLGVbMF09dCl9ZnVuY3Rpb24gdVMobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueSkmJihuLnVuaWZvcm0yZih0aGlzLmFkZHIsdC54LHQueSksZVswXT10LngsZVsxXT10LnkpO2Vsc2V7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtMmZ2KHRoaXMuYWRkcix0KSxUZShlLHQpfX1mdW5jdGlvbiBoUyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7aWYodC54IT09dm9pZCAwKShlWzBdIT09dC54fHxlWzFdIT09dC55fHxlWzJdIT09dC56KSYmKG4udW5pZm9ybTNmKHRoaXMuYWRkcix0LngsdC55LHQueiksZVswXT10LngsZVsxXT10LnksZVsyXT10LnopO2Vsc2UgaWYodC5yIT09dm9pZCAwKShlWzBdIT09dC5yfHxlWzFdIT09dC5nfHxlWzJdIT09dC5iKSYmKG4udW5pZm9ybTNmKHRoaXMuYWRkcix0LnIsdC5nLHQuYiksZVswXT10LnIsZVsxXT10LmcsZVsyXT10LmIpO2Vsc2V7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtM2Z2KHRoaXMuYWRkcix0KSxUZShlLHQpfX1mdW5jdGlvbiBmUyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7aWYodC54IT09dm9pZCAwKShlWzBdIT09dC54fHxlWzFdIT09dC55fHxlWzJdIT09dC56fHxlWzNdIT09dC53KSYmKG4udW5pZm9ybTRmKHRoaXMuYWRkcix0LngsdC55LHQueix0LncpLGVbMF09dC54LGVbMV09dC55LGVbMl09dC56LGVbM109dC53KTtlbHNle2lmKExlKGUsdCkpcmV0dXJuO24udW5pZm9ybTRmdih0aGlzLmFkZHIsdCksVGUoZSx0KX19ZnVuY3Rpb24gZFMobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZihpPT09dm9pZCAwKXtpZihMZShlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHQpLFRlKGUsdCl9ZWxzZXtpZihMZShlLGkpKXJldHVybjtUZy5zZXQoaSksbi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxUZyksVGUoZSxpKX19ZnVuY3Rpb24gcFMobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZihpPT09dm9pZCAwKXtpZihMZShlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLHQpLFRlKGUsdCl9ZWxzZXtpZihMZShlLGkpKXJldHVybjtFZy5zZXQoaSksbi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxFZyksVGUoZSxpKX19ZnVuY3Rpb24gbVMobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZihpPT09dm9pZCAwKXtpZihMZShlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLHQpLFRlKGUsdCl9ZWxzZXtpZihMZShlLGkpKXJldHVybjtTZy5zZXQoaSksbi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxTZyksVGUoZSxpKX19ZnVuY3Rpb24gZ1Mobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHQpLGVbMF09dCl9ZnVuY3Rpb24geFMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm0yaXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIHlTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtM2l2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiB2UyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTRpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gX1Mobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMXVpKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIHdTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtMnVpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gTVMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiBiUyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIFNTKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNhZmVTZXRUZXh0dXJlMkQodHx8djAscil9ZnVuY3Rpb24gRVMobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTNEKHR8fHcwLHIpfWZ1bmN0aW9uIFRTKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNhZmVTZXRUZXh0dXJlQ3ViZSh0fHxNMCxyKX1mdW5jdGlvbiBBUyhuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zZXRUZXh0dXJlMkRBcnJheSh0fHxfMCxyKX1mdW5jdGlvbiBDUyhuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBjUztjYXNlIDM1NjY0OnJldHVybiB1UztjYXNlIDM1NjY1OnJldHVybiBoUztjYXNlIDM1NjY2OnJldHVybiBmUztjYXNlIDM1Njc0OnJldHVybiBkUztjYXNlIDM1Njc1OnJldHVybiBwUztjYXNlIDM1Njc2OnJldHVybiBtUztjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gZ1M7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiB4UztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIHlTO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gdlM7Y2FzZSA1MTI1OnJldHVybiBfUztjYXNlIDM2Mjk0OnJldHVybiB3UztjYXNlIDM2Mjk1OnJldHVybiBNUztjYXNlIDM2Mjk2OnJldHVybiBiUztjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIFNTO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBFUztjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBUUztjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBBU319ZnVuY3Rpb24gUlMobix0KXtuLnVuaWZvcm0xZnYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIExTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsMik7bi51bmlmb3JtMmZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBQUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDMpO24udW5pZm9ybTNmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gRFMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSw0KTtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIElTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsNCk7bi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiBOUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDkpO24udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gRlMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSwxNik7bi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiB6UyhuLHQpe24udW5pZm9ybTFpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gVVMobix0KXtuLnVuaWZvcm0yaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEJTKG4sdCl7bi51bmlmb3JtM2l2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBPUyhuLHQpe24udW5pZm9ybTRpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24ga1Mobix0KXtuLnVuaWZvcm0xdWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBIUyhuLHQpe24udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFZTKG4sdCl7bi51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gR1Mobix0KXtuLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBXUyhuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1QbChlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBzPTA7cyE9PWk7KytzKWUuc2FmZVNldFRleHR1cmUyRCh0W3NdfHx2MCxyW3NdKX1mdW5jdGlvbiBxUyhuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1QbChlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBzPTA7cyE9PWk7KytzKWUuc2V0VGV4dHVyZTNEKHRbc118fHcwLHJbc10pfWZ1bmN0aW9uIFhTKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVBsKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IHM9MDtzIT09aTsrK3MpZS5zYWZlU2V0VGV4dHVyZUN1YmUodFtzXXx8TTAscltzXSl9ZnVuY3Rpb24gWVMobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9UGwoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgcz0wO3MhPT1pOysrcyllLnNldFRleHR1cmUyREFycmF5KHRbc118fF8wLHJbc10pfWZ1bmN0aW9uIFpTKG4pe3N3aXRjaChuKXtjYXNlIDUxMjY6cmV0dXJuIFJTO2Nhc2UgMzU2NjQ6cmV0dXJuIExTO2Nhc2UgMzU2NjU6cmV0dXJuIFBTO2Nhc2UgMzU2NjY6cmV0dXJuIERTO2Nhc2UgMzU2NzQ6cmV0dXJuIElTO2Nhc2UgMzU2NzU6cmV0dXJuIE5TO2Nhc2UgMzU2NzY6cmV0dXJuIEZTO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiB6UztjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIFVTO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gQlM7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBPUztjYXNlIDUxMjU6cmV0dXJuIGtTO2Nhc2UgMzYyOTQ6cmV0dXJuIEhTO2Nhc2UgMzYyOTU6cmV0dXJuIFZTO2Nhc2UgMzYyOTY6cmV0dXJuIEdTO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gV1M7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIHFTO2Nhc2UgMzU2ODA6Y2FzZSAzNjMwMDpjYXNlIDM2MzA4OmNhc2UgMzYyOTM6cmV0dXJuIFhTO2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIFlTfX1mdW5jdGlvbiBKUyhuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zZXRWYWx1ZT1DUyh0LnR5cGUpfWZ1bmN0aW9uIGIwKG4sdCxlKXt0aGlzLmlkPW4sdGhpcy5hZGRyPWUsdGhpcy5jYWNoZT1bXSx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2V0VmFsdWU9WlModC50eXBlKX1iMC5wcm90b3R5cGUudXBkYXRlQ2FjaGU9ZnVuY3Rpb24obil7bGV0IHQ9dGhpcy5jYWNoZTtuIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiZ0Lmxlbmd0aCE9PW4ubGVuZ3RoJiYodGhpcy5jYWNoZT1uZXcgRmxvYXQzMkFycmF5KG4ubGVuZ3RoKSksVGUodCxuKX07ZnVuY3Rpb24gUzAobil7dGhpcy5pZD1uLHRoaXMuc2VxPVtdLHRoaXMubWFwPXt9fVMwLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9dGhpcy5zZXE7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3Ipe2xldCBvPWlbcl07by5zZXRWYWx1ZShuLHRbby5pZF0sZSl9fTt2YXIgQ3U9LyhcdyspKFxdKT8oXFt8XC4pPy9nO2Z1bmN0aW9uIEFnKG4sdCl7bi5zZXEucHVzaCh0KSxuLm1hcFt0LmlkXT10fWZ1bmN0aW9uICRTKG4sdCxlKXtsZXQgaT1uLm5hbWUscj1pLmxlbmd0aDtmb3IoQ3UubGFzdEluZGV4PTA7Oyl7bGV0IHM9Q3UuZXhlYyhpKSxvPUN1Lmxhc3RJbmRleCxhPXNbMV0sbD1zWzJdPT09Il0iLGM9c1szXTtpZihsJiYoYT1hfDApLGM9PT12b2lkIDB8fGM9PT0iWyImJm8rMj09PXIpe0FnKGUsYz09PXZvaWQgMD9uZXcgSlMoYSxuLHQpOm5ldyBiMChhLG4sdCkpO2JyZWFrfWVsc2V7bGV0IGg9ZS5tYXBbYV07aD09PXZvaWQgMCYmKGg9bmV3IFMwKGEpLEFnKGUsaCkpLGU9aH19fWZ1bmN0aW9uIGlpKG4sdCl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307bGV0IGU9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MTgpO2ZvcihsZXQgaT0wO2k8ZTsrK2kpe2xldCByPW4uZ2V0QWN0aXZlVW5pZm9ybSh0LGkpLHM9bi5nZXRVbmlmb3JtTG9jYXRpb24odCxyLm5hbWUpOyRTKHIscyx0aGlzKX19aWkucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPXRoaXMubWFwW3RdO3IhPT12b2lkIDAmJnIuc2V0VmFsdWUobixlLGkpfTtpaS5wcm90b3R5cGUuc2V0T3B0aW9uYWw9ZnVuY3Rpb24obix0LGUpe2xldCBpPXRbZV07aSE9PXZvaWQgMCYmdGhpcy5zZXRWYWx1ZShuLGUsaSl9O2lpLnVwbG9hZD1mdW5jdGlvbihuLHQsZSxpKXtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3IhPT1zOysrcil7bGV0IG89dFtyXSxhPWVbby5pZF07YS5uZWVkc1VwZGF0ZSE9PSExJiZvLnNldFZhbHVlKG4sYS52YWx1ZSxpKX19O2lpLnNlcVdpdGhWYWx1ZT1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9bi5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1uW2ldO3MuaWQgaW4gdCYmZS5wdXNoKHMpfXJldHVybiBlfTtmdW5jdGlvbiBDZyhuLHQsZSl7bGV0IGk9bi5jcmVhdGVTaGFkZXIodCk7cmV0dXJuIG4uc2hhZGVyU291cmNlKGksZSksbi5jb21waWxlU2hhZGVyKGkpLGl9dmFyIEtTPTA7ZnVuY3Rpb24gUVMobil7bGV0IHQ9bi5zcGxpdChgCmApO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09ZSsxKyI6ICIrdFtlXTtyZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24galMobil7c3dpdGNoKG4pe2Nhc2Ugcmk6cmV0dXJuWyJMaW5lYXIiLCIoIHZhbHVlICkiXTtjYXNlICR0OnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCBlbmNvZGluZzoiLG4pLFsiTGluZWFyIiwiKCB2YWx1ZSApIl19fWZ1bmN0aW9uIFJnKG4sdCxlKXtsZXQgaT1uLmdldFNoYWRlclBhcmFtZXRlcih0LDM1NzEzKSxyPW4uZ2V0U2hhZGVySW5mb0xvZyh0KS50cmltKCk7cmV0dXJuIGkmJnI9PT0iIj8iIjplLnRvVXBwZXJDYXNlKCkrYAoKYCtyK2AKCmArUVMobi5nZXRTaGFkZXJTb3VyY2UodCkpfWZ1bmN0aW9uIHRFKG4sdCl7bGV0IGU9alModCk7cmV0dXJuInZlYzQgIituKyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbyIrZVswXStlWzFdKyI7IH0ifWZ1bmN0aW9uIGVFKG4sdCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgQXc6ZT0iTGluZWFyIjticmVhaztjYXNlIEN3OmU9IlJlaW5oYXJkIjticmVhaztjYXNlIFJ3OmU9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7Y2FzZSBMdzplPSJBQ0VTRmlsbWljIjticmVhaztjYXNlIFB3OmU9IkN1c3RvbSI7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6Iix0KSxlPSJMaW5lYXIifXJldHVybiJ2ZWMzICIrbisiKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gIitlKyJUb25lTWFwcGluZyggY29sb3IgKTsgfSJ9ZnVuY3Rpb24gbkUobil7cmV0dXJuW24uZXh0ZW5zaW9uRGVyaXZhdGl2ZXN8fG4uZW52TWFwQ3ViZVVWfHxuLmJ1bXBNYXB8fG4udGFuZ2VudFNwYWNlTm9ybWFsTWFwfHxuLmNsZWFyY29hdE5vcm1hbE1hcHx8bi5mbGF0U2hhZGluZ3x8bi5zaGFkZXJJRD09PSJwaHlzaWNhbCI/IiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlIjoiIiwobi5leHRlbnNpb25GcmFnRGVwdGh8fG4ubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcikmJm4ucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNleHRlbnNpb24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUiOiIiLG4uZXh0ZW5zaW9uRHJhd0J1ZmZlcnMmJm4ucmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVycz8iI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZSI6IiIsKG4uZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8bi5lbnZNYXB8fG4udHJhbnNtaXNzaW9uKSYmbi5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZSI6IiJdLmZpbHRlcigkcykuam9pbihgCmApfWZ1bmN0aW9uIGlFKG4pe2xldCB0PVtdO2ZvcihsZXQgZSBpbiBuKXtsZXQgaT1uW2VdO2khPT0hMSYmdC5wdXNoKCIjZGVmaW5lICIrZSsiICIraSl9cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIHJFKG4sdCl7bGV0IGU9e30saT1uLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcyMSk7Zm9yKGxldCByPTA7cjxpO3IrKyl7bGV0IHM9bi5nZXRBY3RpdmVBdHRyaWIodCxyKSxvPXMubmFtZSxhPTE7cy50eXBlPT09MzU2NzQmJihhPTIpLHMudHlwZT09PTM1Njc1JiYoYT0zKSxzLnR5cGU9PT0zNTY3NiYmKGE9NCksZVtvXT17dHlwZTpzLnR5cGUsbG9jYXRpb246bi5nZXRBdHRyaWJMb2NhdGlvbih0LG8pLGxvY2F0aW9uU2l6ZTphfX1yZXR1cm4gZX1mdW5jdGlvbiAkcyhuKXtyZXR1cm4gbiE9PSIifWZ1bmN0aW9uIExnKG4sdCl7cmV0dXJuIG4ucmVwbGFjZSgvTlVNX0RJUl9MSUdIVFMvZyx0Lm51bURpckxpZ2h0cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRTL2csdC5udW1TcG90TGlnaHRzKS5yZXBsYWNlKC9OVU1fUkVDVF9BUkVBX0xJR0hUUy9nLHQubnVtUmVjdEFyZWFMaWdodHMpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVFMvZyx0Lm51bVBvaW50TGlnaHRzKS5yZXBsYWNlKC9OVU1fSEVNSV9MSUdIVFMvZyx0Lm51bUhlbWlMaWdodHMpLnJlcGxhY2UoL05VTV9ESVJfTElHSFRfU0hBRE9XUy9nLHQubnVtRGlyTGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVF9TSEFET1dTL2csdC5udW1TcG90TGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRfU0hBRE9XUy9nLHQubnVtUG9pbnRMaWdodFNoYWRvd3MpfWZ1bmN0aW9uIFBnKG4sdCl7cmV0dXJuIG4ucmVwbGFjZSgvTlVNX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMpLnJlcGxhY2UoL1VOSU9OX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMtdC5udW1DbGlwSW50ZXJzZWN0aW9uKX12YXIgc0U9L15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbTtmdW5jdGlvbiBxdShuKXtyZXR1cm4gbi5yZXBsYWNlKHNFLG9FKX1mdW5jdGlvbiBvRShuLHQpe2xldCBlPVB0W3RdO2lmKGU9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDYW4gbm90IHJlc29sdmUgI2luY2x1ZGUgPCIrdCsiPiIpO3JldHVybiBxdShlKX12YXIgYUU9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxsRT0vI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxzK2ZvclxzKlwoXHMqaW50XHMraVxzKj1ccyooXGQrKVxzKjtccyppXHMqPFxzKihcZCspXHMqO1xzKmlccypcK1wrXHMqXClccyp7KFtcc1xTXSs/KX1ccysjcHJhZ21hIHVucm9sbF9sb29wX2VuZC9nO2Z1bmN0aW9uIERnKG4pe3JldHVybiBuLnJlcGxhY2UobEUsRTApLnJlcGxhY2UoYUUsY0UpfWZ1bmN0aW9uIGNFKG4sdCxlLGkpe3JldHVybiBjb25zb2xlLndhcm4oIldlYkdMUHJvZ3JhbTogI3ByYWdtYSB1bnJvbGxfbG9vcCBzaGFkZXIgc3ludGF4IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydCBzeW50YXggaW5zdGVhZC4iKSxFMChuLHQsZSxpKX1mdW5jdGlvbiBFMChuLHQsZSxpKXtsZXQgcj0iIjtmb3IobGV0IHM9cGFyc2VJbnQodCk7czxwYXJzZUludChlKTtzKyspcis9aS5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrcysiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2cscyk7cmV0dXJuIHJ9ZnVuY3Rpb24gSWcobil7bGV0IHQ9InByZWNpc2lvbiAiK24ucHJlY2lzaW9uK2AgZmxvYXQ7CnByZWNpc2lvbiBgK24ucHJlY2lzaW9uKyIgaW50OyI7cmV0dXJuIG4ucHJlY2lzaW9uPT09ImhpZ2hwIj90Kz1gCiNkZWZpbmUgSElHSF9QUkVDSVNJT05gOm4ucHJlY2lzaW9uPT09Im1lZGl1bXAiP3QrPWAKI2RlZmluZSBNRURJVU1fUFJFQ0lTSU9OYDpuLnByZWNpc2lvbj09PSJsb3dwIiYmKHQrPWAKI2RlZmluZSBMT1dfUFJFQ0lTSU9OYCksdH1mdW5jdGlvbiB1RShuKXtsZXQgdD0iU0hBRE9XTUFQX1RZUEVfQkFTSUMiO3JldHVybiBuLnNoYWRvd01hcFR5cGU9PT1sMD90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOm4uc2hhZG93TWFwVHlwZT09PXN3P3Q9IlNIQURPV01BUF9UWVBFX1BDRl9TT0ZUIjpuLnNoYWRvd01hcFR5cGU9PT1KcyYmKHQ9IlNIQURPV01BUF9UWVBFX1ZTTSIpLHR9ZnVuY3Rpb24gaEUobil7bGV0IHQ9IkVOVk1BUF9UWVBFX0NVQkUiO2lmKG4uZW52TWFwKXN3aXRjaChuLmVudk1hcE1vZGUpe2Nhc2UgQW86Y2FzZSBDbzp0PSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIFJsOmNhc2UgS2g6dD0iRU5WTUFQX1RZUEVfQ1VCRV9VViI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZkUobil7bGV0IHQ9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iO2lmKG4uZW52TWFwKXN3aXRjaChuLmVudk1hcE1vZGUpe2Nhc2UgQ286Y2FzZSBLaDp0PSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiBkRShuKXtsZXQgdD0iRU5WTUFQX0JMRU5ESU5HX05PTkUiO2lmKG4uZW52TWFwKXN3aXRjaChuLmNvbWJpbmUpe2Nhc2UgQ2w6dD0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjticmVhaztjYXNlIEV3OnQ9IkVOVk1BUF9CTEVORElOR19NSVgiO2JyZWFrO2Nhc2UgVHc6dD0iRU5WTUFQX0JMRU5ESU5HX0FERCI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gcEUobix0LGUsaSl7bGV0IHI9bi5nZXRDb250ZXh0KCkscz1lLmRlZmluZXMsbz1lLnZlcnRleFNoYWRlcixhPWUuZnJhZ21lbnRTaGFkZXIsbD11RShlKSxjPWhFKGUpLHU9ZkUoZSksaD1kRShlKSxmPWUuaXNXZWJHTDI/IiI6bkUoZSksZD1pRShzKSxnPXIuY3JlYXRlUHJvZ3JhbSgpLHgsdixtPWUuZ2xzbFZlcnNpb24/IiN2ZXJzaW9uICIrZS5nbHNsVmVyc2lvbitgCmA6IiI7ZS5pc1Jhd1NoYWRlck1hdGVyaWFsPyh4PVtkXS5maWx0ZXIoJHMpLmpvaW4oYApgKSx4Lmxlbmd0aD4wJiYoeCs9YApgKSx2PVtmLGRdLmZpbHRlcigkcykuam9pbihgCmApLHYubGVuZ3RoPjAmJih2Kz1gCmApKTooeD1bSWcoZSksIiNkZWZpbmUgU0hBREVSX05BTUUgIitlLnNoYWRlck5hbWUsZCxlLmluc3RhbmNpbmc/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkciOiIiLGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HX0NPTE9SIjoiIixlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTIjoiIiwiI2RlZmluZSBNQVhfQk9ORVMgIitlLm1heEJvbmVzLGUudXNlRm9nJiZlLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixlLnVzZUZvZyYmZS5mb2dFeHAyPyIjZGVmaW5lIEZPR19FWFAyIjoiIixlLm1hcD8iI2RlZmluZSBVU0VfTUFQIjoiIixlLmVudk1hcD8iI2RlZmluZSBVU0VfRU5WTUFQIjoiIixlLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsZS5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLGUuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixlLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsZS5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixlLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLGUubm9ybWFsTWFwJiZlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixlLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixlLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsZS5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLGUuZGlzcGxhY2VtZW50TWFwJiZlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVVNFX0RJU1BMQUNFTUVOVE1BUCI6IiIsZS5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLGUuc3BlY3VsYXJJbnRlbnNpdHlNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQIjoiIixlLnNwZWN1bGFyQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSQ09MT1JNQVAiOiIiLGUucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLGUubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLGUuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixlLnZlcnRleENvbG9ycz8iI2RlZmluZSBVU0VfQ09MT1IiOiIiLGUudmVydGV4QWxwaGFzPyIjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQSI6IiIsZS52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixlLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsZS51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6IiIsZS5tb3JwaFRhcmdldHM/IiNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUyI6IiIsZS5tb3JwaE5vcm1hbHMmJmUuZmxhdFNoYWRpbmc9PT0hMT8iI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTIjoiIixlLm1vcnBoVGFyZ2V0cyYmZS5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfVEVYVFVSRSI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX0NPVU5UICIrZS5tb3JwaFRhcmdldHNDb3VudDoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6IiIsZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HIiwiCWF0dHJpYnV0ZSBtYXQ0IGluc3RhbmNlTWF0cml4OyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUiIsIglhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZUNvbG9yOyIsIiNlbmRpZiIsImF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOyIsImF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsiLCJhdHRyaWJ1dGUgdmVjMiB1djsiLCIjaWZkZWYgVVNFX1RBTkdFTlQiLCIJYXR0cmlidXRlIHZlYzQgdGFuZ2VudDsiLCIjZW5kaWYiLCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkiLCIJYXR0cmlidXRlIHZlYzQgY29sb3I7IiwiI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkiLCIJYXR0cmlidXRlIHZlYzMgY29sb3I7IiwiI2VuZGlmIiwiI2lmICggZGVmaW5lZCggVVNFX01PUlBIVEFSR0VUUyApICYmICEgZGVmaW5lZCggTU9SUEhUQVJHRVRTX1RFWFRVUkUgKSApIiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MDsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MzsiLCIJI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMDsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMzsiLCIJI2Vsc2UiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NDsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NzsiLCIJI2VuZGlmIiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9TS0lOTklORyIsIglhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiCWF0dHJpYnV0ZSB2ZWM0IHNraW5XZWlnaHQ7IiwiI2VuZGlmIixgCmBdLmZpbHRlcigkcykuam9pbihgCmApLHY9W2YsSWcoZSksIiNkZWZpbmUgU0hBREVSX05BTUUgIitlLnNoYWRlck5hbWUsZCxlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5tYXRjYXA/IiNkZWZpbmUgVVNFX01BVENBUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitjOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrdToiIixlLmVudk1hcD8iI2RlZmluZSAiK2g6IiIsZS5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLGUuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixlLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsZS5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixlLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLGUubm9ybWFsTWFwJiZlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixlLmNsZWFyY29hdD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUIjoiIixlLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixlLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsZS5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS5hbHBoYVRlc3Q/IiNkZWZpbmUgVVNFX0FMUEhBVEVTVCI6IiIsZS5zaGVlbj8iI2RlZmluZSBVU0VfU0hFRU4iOiIiLGUuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsZS5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLGUudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLGUudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLGUudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLGUuZGVjb2RlVmlkZW9UZXh0dXJlPyIjZGVmaW5lIERFQ09ERV9WSURFT19URVhUVVJFIjoiIixlLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixlLnZlcnRleENvbG9yc3x8ZS5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5ncmFkaWVudE1hcD8iI2RlZmluZSBVU0VfR1JBRElFTlRNQVAiOiIiLGUuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLGUuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixlLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixlLnByZW11bHRpcGxpZWRBbHBoYT8iI2RlZmluZSBQUkVNVUxUSVBMSUVEX0FMUEhBIjoiIixlLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPyIjZGVmaW5lIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwoZS5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxlLmVudk1hcCkmJmUucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZGVmaW5lIFRFWFRVUkVfTE9EX0VYVCI6IiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IixlLnRvbmVNYXBwaW5nIT09dGk/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIixlLnRvbmVNYXBwaW5nIT09dGk/UHQudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIixlLnRvbmVNYXBwaW5nIT09dGk/ZUUoInRvbmVNYXBwaW5nIixlLnRvbmVNYXBwaW5nKToiIixlLmRpdGhlcmluZz8iI2RlZmluZSBESVRIRVJJTkciOiIiLGUuYWxwaGFXcml0ZT8iIjoiI2RlZmluZSBPUEFRVUUiLFB0LmVuY29kaW5nc19wYXJzX2ZyYWdtZW50LHRFKCJsaW5lYXJUb091dHB1dFRleGVsIixlLm91dHB1dEVuY29kaW5nKSxlLmRlcHRoUGFja2luZz8iI2RlZmluZSBERVBUSF9QQUNLSU5HICIrZS5kZXB0aFBhY2tpbmc6IiIsYApgXS5maWx0ZXIoJHMpLmpvaW4oYApgKSksbz1xdShvKSxvPUxnKG8sZSksbz1QZyhvLGUpLGE9cXUoYSksYT1MZyhhLGUpLGE9UGcoYSxlKSxvPURnKG8pLGE9RGcoYSksZS5pc1dlYkdMMiYmZS5pc1Jhd1NoYWRlck1hdGVyaWFsIT09ITAmJihtPWAjdmVyc2lvbiAzMDAgZXMKYCx4PVsicHJlY2lzaW9uIG1lZGl1bXAgc2FtcGxlcjJEQXJyYXk7IiwiI2RlZmluZSBhdHRyaWJ1dGUgaW4iLCIjZGVmaW5lIHZhcnlpbmcgb3V0IiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSJdLmpvaW4oYApgKStgCmAreCx2PVsiI2RlZmluZSB2YXJ5aW5nIGluIixlLmdsc2xWZXJzaW9uPT09bmc/IiI6ImxheW91dChsb2NhdGlvbiA9IDApIG91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLGUuZ2xzbFZlcnNpb249PT1uZz8iIjoiI2RlZmluZSBnbF9GcmFnQ29sb3IgcGNfZnJhZ0NvbG9yIiwiI2RlZmluZSBnbF9GcmFnRGVwdGhFWFQgZ2xfRnJhZ0RlcHRoIiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZUN1YmUgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlUHJvaiIsIiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pMb2RFWFQgdGV4dHVyZVByb2pMb2QiLCIjZGVmaW5lIHRleHR1cmVDdWJlTG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pHcmFkRVhUIHRleHR1cmVQcm9qR3JhZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVHcmFkRVhUIHRleHR1cmVHcmFkIl0uam9pbihgCmApK2AKYCt2KTtsZXQgcD1tK3grbyxiPW0rdithLF89Q2cociwzNTYzMyxwKSxTPUNnKHIsMzU2MzIsYik7aWYoci5hdHRhY2hTaGFkZXIoZyxfKSxyLmF0dGFjaFNoYWRlcihnLFMpLGUuaW5kZXgwQXR0cmlidXRlTmFtZSE9PXZvaWQgMD9yLmJpbmRBdHRyaWJMb2NhdGlvbihnLDAsZS5pbmRleDBBdHRyaWJ1dGVOYW1lKTplLm1vcnBoVGFyZ2V0cz09PSEwJiZyLmJpbmRBdHRyaWJMb2NhdGlvbihnLDAsInBvc2l0aW9uIiksci5saW5rUHJvZ3JhbShnKSxuLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKXtsZXQgSD1yLmdldFByb2dyYW1JbmZvTG9nKGcpLnRyaW0oKSx0dD1yLmdldFNoYWRlckluZm9Mb2coXykudHJpbSgpLFg9ci5nZXRTaGFkZXJJbmZvTG9nKFMpLnRyaW0oKSx5PSEwLFI9ITA7aWYoci5nZXRQcm9ncmFtUGFyYW1ldGVyKGcsMzU3MTQpPT09ITEpe3k9ITE7bGV0IEQ9UmcocixfLCJ2ZXJ0ZXgiKSxGPVJnKHIsUywiZnJhZ21lbnQiKTtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IFNoYWRlciBFcnJvciAiK3IuZ2V0RXJyb3IoKSsiIC0gVkFMSURBVEVfU1RBVFVTICIrci5nZXRQcm9ncmFtUGFyYW1ldGVyKGcsMzU3MTUpK2AKClByb2dyYW0gSW5mbyBMb2c6IGArSCtgCmArRCtgCmArRil9ZWxzZSBIIT09IiI/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6IixIKToodHQ9PT0iInx8WD09PSIiKSYmKFI9ITEpO1ImJih0aGlzLmRpYWdub3N0aWNzPXtydW5uYWJsZTp5LHByb2dyYW1Mb2c6SCx2ZXJ0ZXhTaGFkZXI6e2xvZzp0dCxwcmVmaXg6eH0sZnJhZ21lbnRTaGFkZXI6e2xvZzpYLHByZWZpeDp2fX0pfXIuZGVsZXRlU2hhZGVyKF8pLHIuZGVsZXRlU2hhZGVyKFMpO2xldCBMO3RoaXMuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4gTD09PXZvaWQgMCYmKEw9bmV3IGlpKHIsZykpLEx9O2xldCBBO3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQT09PXZvaWQgMCYmKEE9ckUocixnKSksQX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7aS5yZWxlYXNlU3RhdGVzT2ZQcm9ncmFtKHRoaXMpLHIuZGVsZXRlUHJvZ3JhbShnKSx0aGlzLnByb2dyYW09dm9pZCAwfSx0aGlzLm5hbWU9ZS5zaGFkZXJOYW1lLHRoaXMuaWQ9S1MrKyx0aGlzLmNhY2hlS2V5PXQsdGhpcy51c2VkVGltZXM9MSx0aGlzLnByb2dyYW09Zyx0aGlzLnZlcnRleFNoYWRlcj1fLHRoaXMuZnJhZ21lbnRTaGFkZXI9Uyx0aGlzfXZhciBtRT0wLFh1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFkZXJDYWNoZT1uZXcgTWFwLHRoaXMubWF0ZXJpYWxDYWNoZT1uZXcgTWFwfXVwZGF0ZSh0KXtsZXQgZT10LnZlcnRleFNoYWRlcixpPXQuZnJhZ21lbnRTaGFkZXIscj10aGlzLl9nZXRTaGFkZXJTdGFnZShlKSxzPXRoaXMuX2dldFNoYWRlclN0YWdlKGkpLG89dGhpcy5fZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbCh0KTtyZXR1cm4gby5oYXMocik9PT0hMSYmKG8uYWRkKHIpLHIudXNlZFRpbWVzKyspLG8uaGFzKHMpPT09ITEmJihvLmFkZChzKSxzLnVzZWRUaW1lcysrKSx0aGlzfXJlbW92ZSh0KXtsZXQgZT10aGlzLm1hdGVyaWFsQ2FjaGUuZ2V0KHQpO2ZvcihsZXQgaSBvZiBlKWkudXNlZFRpbWVzLS0saS51c2VkVGltZXM9PT0wJiZ0aGlzLnNoYWRlckNhY2hlLmRlbGV0ZShpKTtyZXR1cm4gdGhpcy5tYXRlcmlhbENhY2hlLmRlbGV0ZSh0KSx0aGlzfWdldFZlcnRleFNoYWRlcklEKHQpe3JldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSh0LnZlcnRleFNoYWRlcikuaWR9Z2V0RnJhZ21lbnRTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC5mcmFnbWVudFNoYWRlcikuaWR9ZGlzcG9zZSgpe3RoaXMuc2hhZGVyQ2FjaGUuY2xlYXIoKSx0aGlzLm1hdGVyaWFsQ2FjaGUuY2xlYXIoKX1fZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbCh0KXtsZXQgZT10aGlzLm1hdGVyaWFsQ2FjaGU7cmV0dXJuIGUuaGFzKHQpPT09ITEmJmUuc2V0KHQsbmV3IFNldCksZS5nZXQodCl9X2dldFNoYWRlclN0YWdlKHQpe2xldCBlPXRoaXMuc2hhZGVyQ2FjaGU7aWYoZS5oYXModCk9PT0hMSl7bGV0IGk9bmV3IFl1O2Uuc2V0KHQsaSl9cmV0dXJuIGUuZ2V0KHQpfX0sWXU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmlkPW1FKyssdGhpcy51c2VkVGltZXM9MH19O2Z1bmN0aW9uIGdFKG4sdCxlLGkscixzLG8pe2xldCBhPW5ldyBpbCxsPW5ldyBYdSxjPVtdLHU9ci5pc1dlYkdMMixoPXIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixmPXIuZmxvYXRWZXJ0ZXhUZXh0dXJlcyxkPXIubWF4VmVydGV4VW5pZm9ybXMsZz1yLnZlcnRleFRleHR1cmVzLHg9ci5wcmVjaXNpb24sdj17TWVzaERlcHRoTWF0ZXJpYWw6ImRlcHRoIixNZXNoRGlzdGFuY2VNYXRlcmlhbDoiZGlzdGFuY2VSR0JBIixNZXNoTm9ybWFsTWF0ZXJpYWw6Im5vcm1hbCIsTWVzaEJhc2ljTWF0ZXJpYWw6ImJhc2ljIixNZXNoTGFtYmVydE1hdGVyaWFsOiJsYW1iZXJ0IixNZXNoUGhvbmdNYXRlcmlhbDoicGhvbmciLE1lc2hUb29uTWF0ZXJpYWw6InRvb24iLE1lc2hTdGFuZGFyZE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoTWF0Y2FwTWF0ZXJpYWw6Im1hdGNhcCIsTGluZUJhc2ljTWF0ZXJpYWw6ImJhc2ljIixMaW5lRGFzaGVkTWF0ZXJpYWw6ImRhc2hlZCIsUG9pbnRzTWF0ZXJpYWw6InBvaW50cyIsU2hhZG93TWF0ZXJpYWw6InNoYWRvdyIsU3ByaXRlTWF0ZXJpYWw6InNwcml0ZSJ9O2Z1bmN0aW9uIG0oeSl7bGV0IEQ9eS5za2VsZXRvbi5ib25lcztpZihmKXJldHVybiAxMDI0O3tsZXQgej1NYXRoLmZsb29yKChkLTIwKS80KSxOPU1hdGgubWluKHosRC5sZW5ndGgpO3JldHVybiBOPEQubGVuZ3RoPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFNrZWxldG9uIGhhcyAiK0QubGVuZ3RoKyIgYm9uZXMuIFRoaXMgR1BVIHN1cHBvcnRzICIrTisiLiIpLDApOk59fWZ1bmN0aW9uIHAoeSxSLEQsRix6KXtsZXQgTj1GLmZvZyxWPXkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9GLmVudmlyb25tZW50Om51bGwsUT0oeS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2U6dCkuZ2V0KHkuZW52TWFwfHxWKSxhdD12W3kudHlwZV0sRz16LmlzU2tpbm5lZE1lc2g/bSh6KTowO3kucHJlY2lzaW9uIT09bnVsbCYmKHg9ci5nZXRNYXhQcmVjaXNpb24oeS5wcmVjaXNpb24pLHghPT15LnByZWNpc2lvbiYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW0uZ2V0UGFyYW1ldGVyczoiLHkucHJlY2lzaW9uLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIseCwiaW5zdGVhZC4iKSk7bGV0ICQsbHQsZHQseHQ7aWYoYXQpe2xldCBCPWZuW2F0XTskPUIudmVydGV4U2hhZGVyLGx0PUIuZnJhZ21lbnRTaGFkZXJ9ZWxzZSAkPXkudmVydGV4U2hhZGVyLGx0PXkuZnJhZ21lbnRTaGFkZXIsbC51cGRhdGUoeSksZHQ9bC5nZXRWZXJ0ZXhTaGFkZXJJRCh5KSx4dD1sLmdldEZyYWdtZW50U2hhZGVySUQoeSk7bGV0IGs9bi5nZXRSZW5kZXJUYXJnZXQoKSxGdD15LmFscGhhVGVzdD4wLG10PXkuY2xlYXJjb2F0PjA7cmV0dXJue2lzV2ViR0wyOnUsc2hhZGVySUQ6YXQsc2hhZGVyTmFtZTp5LnR5cGUsdmVydGV4U2hhZGVyOiQsZnJhZ21lbnRTaGFkZXI6bHQsZGVmaW5lczp5LmRlZmluZXMsY3VzdG9tVmVydGV4U2hhZGVySUQ6ZHQsY3VzdG9tRnJhZ21lbnRTaGFkZXJJRDp4dCxpc1Jhd1NoYWRlck1hdGVyaWFsOnkuaXNSYXdTaGFkZXJNYXRlcmlhbD09PSEwLGdsc2xWZXJzaW9uOnkuZ2xzbFZlcnNpb24scHJlY2lzaW9uOngsaW5zdGFuY2luZzp6LmlzSW5zdGFuY2VkTWVzaD09PSEwLGluc3RhbmNpbmdDb2xvcjp6LmlzSW5zdGFuY2VkTWVzaD09PSEwJiZ6Lmluc3RhbmNlQ29sb3IhPT1udWxsLHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6ZyxvdXRwdXRFbmNvZGluZzprPT09bnVsbD9uLm91dHB1dEVuY29kaW5nOmsuaXNYUlJlbmRlclRhcmdldD09PSEwP2sudGV4dHVyZS5lbmNvZGluZzpyaSxtYXA6ISF5Lm1hcCxtYXRjYXA6ISF5Lm1hdGNhcCxlbnZNYXA6ISFRLGVudk1hcE1vZGU6USYmUS5tYXBwaW5nLGVudk1hcEN1YmVVVjohIVEmJihRLm1hcHBpbmc9PT1SbHx8US5tYXBwaW5nPT09S2gpLGxpZ2h0TWFwOiEheS5saWdodE1hcCxhb01hcDohIXkuYW9NYXAsZW1pc3NpdmVNYXA6ISF5LmVtaXNzaXZlTWFwLGJ1bXBNYXA6ISF5LmJ1bXBNYXAsbm9ybWFsTWFwOiEheS5ub3JtYWxNYXAsb2JqZWN0U3BhY2VOb3JtYWxNYXA6eS5ub3JtYWxNYXBUeXBlPT09ancsdGFuZ2VudFNwYWNlTm9ybWFsTWFwOnkubm9ybWFsTWFwVHlwZT09PXRzLGRlY29kZVZpZGVvVGV4dHVyZTohIXkubWFwJiZ5Lm1hcC5pc1ZpZGVvVGV4dHVyZT09PSEwJiZ5Lm1hcC5lbmNvZGluZz09PSR0LGNsZWFyY29hdDptdCxjbGVhcmNvYXRNYXA6bXQmJiEheS5jbGVhcmNvYXRNYXAsY2xlYXJjb2F0Um91Z2huZXNzTWFwOm10JiYhIXkuY2xlYXJjb2F0Um91Z2huZXNzTWFwLGNsZWFyY29hdE5vcm1hbE1hcDptdCYmISF5LmNsZWFyY29hdE5vcm1hbE1hcCxkaXNwbGFjZW1lbnRNYXA6ISF5LmRpc3BsYWNlbWVudE1hcCxyb3VnaG5lc3NNYXA6ISF5LnJvdWdobmVzc01hcCxtZXRhbG5lc3NNYXA6ISF5Lm1ldGFsbmVzc01hcCxzcGVjdWxhck1hcDohIXkuc3BlY3VsYXJNYXAsc3BlY3VsYXJJbnRlbnNpdHlNYXA6ISF5LnNwZWN1bGFySW50ZW5zaXR5TWFwLHNwZWN1bGFyQ29sb3JNYXA6ISF5LnNwZWN1bGFyQ29sb3JNYXAsYWxwaGFNYXA6ISF5LmFscGhhTWFwLGFscGhhVGVzdDpGdCxhbHBoYVdyaXRlOnkuYWxwaGFXcml0ZXx8eS50cmFuc3BhcmVudCxncmFkaWVudE1hcDohIXkuZ3JhZGllbnRNYXAsc2hlZW46eS5zaGVlbj4wLHNoZWVuQ29sb3JNYXA6ISF5LnNoZWVuQ29sb3JNYXAsc2hlZW5Sb3VnaG5lc3NNYXA6ISF5LnNoZWVuUm91Z2huZXNzTWFwLHRyYW5zbWlzc2lvbjp5LnRyYW5zbWlzc2lvbj4wLHRyYW5zbWlzc2lvbk1hcDohIXkudHJhbnNtaXNzaW9uTWFwLHRoaWNrbmVzc01hcDohIXkudGhpY2tuZXNzTWFwLGNvbWJpbmU6eS5jb21iaW5lLHZlcnRleFRhbmdlbnRzOiEheS5ub3JtYWxNYXAmJiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudCx2ZXJ0ZXhDb2xvcnM6eS52ZXJ0ZXhDb2xvcnMsdmVydGV4QWxwaGFzOnkudmVydGV4Q29sb3JzPT09ITAmJiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3ImJnouZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZT09PTQsdmVydGV4VXZzOiEheS5tYXB8fCEheS5idW1wTWFwfHwhIXkubm9ybWFsTWFwfHwhIXkuc3BlY3VsYXJNYXB8fCEheS5hbHBoYU1hcHx8ISF5LmVtaXNzaXZlTWFwfHwhIXkucm91Z2huZXNzTWFwfHwhIXkubWV0YWxuZXNzTWFwfHwhIXkuY2xlYXJjb2F0TWFwfHwhIXkuY2xlYXJjb2F0Um91Z2huZXNzTWFwfHwhIXkuY2xlYXJjb2F0Tm9ybWFsTWFwfHwhIXkuZGlzcGxhY2VtZW50TWFwfHwhIXkudHJhbnNtaXNzaW9uTWFwfHwhIXkudGhpY2tuZXNzTWFwfHwhIXkuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fCEheS5zcGVjdWxhckNvbG9yTWFwfHwhIXkuc2hlZW5Db2xvck1hcHx8ISF5LnNoZWVuUm91Z2huZXNzTWFwLHV2c1ZlcnRleE9ubHk6ISghIXkubWFwfHwhIXkuYnVtcE1hcHx8ISF5Lm5vcm1hbE1hcHx8ISF5LnNwZWN1bGFyTWFwfHwhIXkuYWxwaGFNYXB8fCEheS5lbWlzc2l2ZU1hcHx8ISF5LnJvdWdobmVzc01hcHx8ISF5Lm1ldGFsbmVzc01hcHx8ISF5LmNsZWFyY29hdE5vcm1hbE1hcHx8eS50cmFuc21pc3Npb24+MHx8ISF5LnRyYW5zbWlzc2lvbk1hcHx8ISF5LnRoaWNrbmVzc01hcHx8ISF5LnNwZWN1bGFySW50ZW5zaXR5TWFwfHwhIXkuc3BlY3VsYXJDb2xvck1hcHx8eS5zaGVlbj4wfHwhIXkuc2hlZW5Db2xvck1hcHx8ISF5LnNoZWVuUm91Z2huZXNzTWFwKSYmISF5LmRpc3BsYWNlbWVudE1hcCxmb2c6ISFOLHVzZUZvZzp5LmZvZyxmb2dFeHAyOk4mJk4uaXNGb2dFeHAyLGZsYXRTaGFkaW5nOiEheS5mbGF0U2hhZGluZyxzaXplQXR0ZW51YXRpb246eS5zaXplQXR0ZW51YXRpb24sbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpoLHNraW5uaW5nOnouaXNTa2lubmVkTWVzaD09PSEwJiZHPjAsbWF4Qm9uZXM6Ryx1c2VWZXJ0ZXhUZXh0dXJlOmYsbW9ycGhUYXJnZXRzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixtb3JwaE5vcm1hbHM6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxtb3JwaFRhcmdldHNDb3VudDohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/ei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsbnVtRGlyTGlnaHRzOlIuZGlyZWN0aW9uYWwubGVuZ3RoLG51bVBvaW50TGlnaHRzOlIucG9pbnQubGVuZ3RoLG51bVNwb3RMaWdodHM6Ui5zcG90Lmxlbmd0aCxudW1SZWN0QXJlYUxpZ2h0czpSLnJlY3RBcmVhLmxlbmd0aCxudW1IZW1pTGlnaHRzOlIuaGVtaS5sZW5ndGgsbnVtRGlyTGlnaHRTaGFkb3dzOlIuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoLG51bVBvaW50TGlnaHRTaGFkb3dzOlIucG9pbnRTaGFkb3dNYXAubGVuZ3RoLG51bVNwb3RMaWdodFNoYWRvd3M6Ui5zcG90U2hhZG93TWFwLmxlbmd0aCxudW1DbGlwcGluZ1BsYW5lczpvLm51bVBsYW5lcyxudW1DbGlwSW50ZXJzZWN0aW9uOm8ubnVtSW50ZXJzZWN0aW9uLGRpdGhlcmluZzp5LmRpdGhlcmluZyxzaGFkb3dNYXBFbmFibGVkOm4uc2hhZG93TWFwLmVuYWJsZWQmJkQubGVuZ3RoPjAsc2hhZG93TWFwVHlwZTpuLnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOnkudG9uZU1hcHBlZD9uLnRvbmVNYXBwaW5nOnRpLHBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzOm4ucGh5c2ljYWxseUNvcnJlY3RMaWdodHMscHJlbXVsdGlwbGllZEFscGhhOnkucHJlbXVsdGlwbGllZEFscGhhLGRvdWJsZVNpZGVkOnkuc2lkZT09PUhyLGZsaXBTaWRlZDp5LnNpZGU9PT1oZSxkZXB0aFBhY2tpbmc6eS5kZXB0aFBhY2tpbmchPT12b2lkIDA/eS5kZXB0aFBhY2tpbmc6ITEsaW5kZXgwQXR0cmlidXRlTmFtZTp5LmluZGV4MEF0dHJpYnV0ZU5hbWUsZXh0ZW5zaW9uRGVyaXZhdGl2ZXM6eS5leHRlbnNpb25zJiZ5LmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMsZXh0ZW5zaW9uRnJhZ0RlcHRoOnkuZXh0ZW5zaW9ucyYmeS5leHRlbnNpb25zLmZyYWdEZXB0aCxleHRlbnNpb25EcmF3QnVmZmVyczp5LmV4dGVuc2lvbnMmJnkuZXh0ZW5zaW9ucy5kcmF3QnVmZmVycyxleHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EOnkuZXh0ZW5zaW9ucyYmeS5leHRlbnNpb25zLnNoYWRlclRleHR1cmVMT0QscmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg6dXx8aS5oYXMoIkVYVF9mcmFnX2RlcHRoIikscmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVyczp1fHxpLmhhcygiV0VCR0xfZHJhd19idWZmZXJzIikscmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kOnV8fGkuaGFzKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIiksY3VzdG9tUHJvZ3JhbUNhY2hlS2V5OnkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl9fWZ1bmN0aW9uIGIoeSl7bGV0IFI9W107aWYoeS5zaGFkZXJJRD9SLnB1c2goeS5zaGFkZXJJRCk6KFIucHVzaCh5LmN1c3RvbVZlcnRleFNoYWRlcklEKSxSLnB1c2goeS5jdXN0b21GcmFnbWVudFNoYWRlcklEKSkseS5kZWZpbmVzIT09dm9pZCAwKWZvcihsZXQgRCBpbiB5LmRlZmluZXMpUi5wdXNoKEQpLFIucHVzaCh5LmRlZmluZXNbRF0pO3JldHVybiB5LmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMSYmKF8oUix5KSxTKFIseSksUi5wdXNoKG4ub3V0cHV0RW5jb2RpbmcpKSxSLnB1c2goeS5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkpLFIuam9pbigpfWZ1bmN0aW9uIF8oeSxSKXt5LnB1c2goUi5wcmVjaXNpb24pLHkucHVzaChSLm91dHB1dEVuY29kaW5nKSx5LnB1c2goUi5lbnZNYXBNb2RlKSx5LnB1c2goUi5jb21iaW5lKSx5LnB1c2goUi52ZXJ0ZXhVdnMpLHkucHVzaChSLmZvZ0V4cDIpLHkucHVzaChSLnNpemVBdHRlbnVhdGlvbikseS5wdXNoKFIubWF4Qm9uZXMpLHkucHVzaChSLm1vcnBoVGFyZ2V0c0NvdW50KSx5LnB1c2goUi5udW1EaXJMaWdodHMpLHkucHVzaChSLm51bVBvaW50TGlnaHRzKSx5LnB1c2goUi5udW1TcG90TGlnaHRzKSx5LnB1c2goUi5udW1IZW1pTGlnaHRzKSx5LnB1c2goUi5udW1SZWN0QXJlYUxpZ2h0cykseS5wdXNoKFIubnVtRGlyTGlnaHRTaGFkb3dzKSx5LnB1c2goUi5udW1Qb2ludExpZ2h0U2hhZG93cykseS5wdXNoKFIubnVtU3BvdExpZ2h0U2hhZG93cykseS5wdXNoKFIuc2hhZG93TWFwVHlwZSkseS5wdXNoKFIudG9uZU1hcHBpbmcpLHkucHVzaChSLm51bUNsaXBwaW5nUGxhbmVzKSx5LnB1c2goUi5udW1DbGlwSW50ZXJzZWN0aW9uKSx5LnB1c2goUi5hbHBoYVdyaXRlKX1mdW5jdGlvbiBTKHksUil7YS5kaXNhYmxlQWxsKCksUi5pc1dlYkdMMiYmYS5lbmFibGUoMCksUi5zdXBwb3J0c1ZlcnRleFRleHR1cmVzJiZhLmVuYWJsZSgxKSxSLmluc3RhbmNpbmcmJmEuZW5hYmxlKDIpLFIuaW5zdGFuY2luZ0NvbG9yJiZhLmVuYWJsZSgzKSxSLm1hcCYmYS5lbmFibGUoNCksUi5tYXRjYXAmJmEuZW5hYmxlKDUpLFIuZW52TWFwJiZhLmVuYWJsZSg2KSxSLmVudk1hcEN1YmVVViYmYS5lbmFibGUoNyksUi5saWdodE1hcCYmYS5lbmFibGUoOCksUi5hb01hcCYmYS5lbmFibGUoOSksUi5lbWlzc2l2ZU1hcCYmYS5lbmFibGUoMTApLFIuYnVtcE1hcCYmYS5lbmFibGUoMTEpLFIubm9ybWFsTWFwJiZhLmVuYWJsZSgxMiksUi5vYmplY3RTcGFjZU5vcm1hbE1hcCYmYS5lbmFibGUoMTMpLFIudGFuZ2VudFNwYWNlTm9ybWFsTWFwJiZhLmVuYWJsZSgxNCksUi5jbGVhcmNvYXQmJmEuZW5hYmxlKDE1KSxSLmNsZWFyY29hdE1hcCYmYS5lbmFibGUoMTYpLFIuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZhLmVuYWJsZSgxNyksUi5jbGVhcmNvYXROb3JtYWxNYXAmJmEuZW5hYmxlKDE4KSxSLmRpc3BsYWNlbWVudE1hcCYmYS5lbmFibGUoMTkpLFIuc3BlY3VsYXJNYXAmJmEuZW5hYmxlKDIwKSxSLnJvdWdobmVzc01hcCYmYS5lbmFibGUoMjEpLFIubWV0YWxuZXNzTWFwJiZhLmVuYWJsZSgyMiksUi5ncmFkaWVudE1hcCYmYS5lbmFibGUoMjMpLFIuYWxwaGFNYXAmJmEuZW5hYmxlKDI0KSxSLmFscGhhVGVzdCYmYS5lbmFibGUoMjUpLFIudmVydGV4Q29sb3JzJiZhLmVuYWJsZSgyNiksUi52ZXJ0ZXhBbHBoYXMmJmEuZW5hYmxlKDI3KSxSLnZlcnRleFV2cyYmYS5lbmFibGUoMjgpLFIudmVydGV4VGFuZ2VudHMmJmEuZW5hYmxlKDI5KSxSLnV2c1ZlcnRleE9ubHkmJmEuZW5hYmxlKDMwKSxSLmZvZyYmYS5lbmFibGUoMzEpLHkucHVzaChhLm1hc2spLGEuZGlzYWJsZUFsbCgpLFIudXNlRm9nJiZhLmVuYWJsZSgwKSxSLmZsYXRTaGFkaW5nJiZhLmVuYWJsZSgxKSxSLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmEuZW5hYmxlKDIpLFIuc2tpbm5pbmcmJmEuZW5hYmxlKDMpLFIudXNlVmVydGV4VGV4dHVyZSYmYS5lbmFibGUoNCksUi5tb3JwaFRhcmdldHMmJmEuZW5hYmxlKDUpLFIubW9ycGhOb3JtYWxzJiZhLmVuYWJsZSg2KSxSLnByZW11bHRpcGxpZWRBbHBoYSYmYS5lbmFibGUoNyksUi5zaGFkb3dNYXBFbmFibGVkJiZhLmVuYWJsZSg4KSxSLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzJiZhLmVuYWJsZSg5KSxSLmRvdWJsZVNpZGVkJiZhLmVuYWJsZSgxMCksUi5mbGlwU2lkZWQmJmEuZW5hYmxlKDExKSxSLmRlcHRoUGFja2luZyYmYS5lbmFibGUoMTIpLFIuZGl0aGVyaW5nJiZhLmVuYWJsZSgxMyksUi5zcGVjdWxhckludGVuc2l0eU1hcCYmYS5lbmFibGUoMTQpLFIuc3BlY3VsYXJDb2xvck1hcCYmYS5lbmFibGUoMTUpLFIudHJhbnNtaXNzaW9uJiZhLmVuYWJsZSgxNiksUi50cmFuc21pc3Npb25NYXAmJmEuZW5hYmxlKDE3KSxSLnRoaWNrbmVzc01hcCYmYS5lbmFibGUoMTgpLFIuc2hlZW4mJmEuZW5hYmxlKDE5KSxSLnNoZWVuQ29sb3JNYXAmJmEuZW5hYmxlKDIwKSxSLnNoZWVuUm91Z2huZXNzTWFwJiZhLmVuYWJsZSgyMSksUi5kZWNvZGVWaWRlb1RleHR1cmUmJmEuZW5hYmxlKDIyKSx5LnB1c2goYS5tYXNrKX1mdW5jdGlvbiBMKHkpe2xldCBSPXZbeS50eXBlXSxEO2lmKFIpe2xldCBGPWZuW1JdO0Q9cE0uY2xvbmUoRi51bmlmb3Jtcyl9ZWxzZSBEPXkudW5pZm9ybXM7cmV0dXJuIER9ZnVuY3Rpb24gQSh5LFIpe2xldCBEO2ZvcihsZXQgRj0wLHo9Yy5sZW5ndGg7Rjx6O0YrKyl7bGV0IE49Y1tGXTtpZihOLmNhY2hlS2V5PT09Uil7RD1OLCsrRC51c2VkVGltZXM7YnJlYWt9fXJldHVybiBEPT09dm9pZCAwJiYoRD1uZXcgcEUobixSLHkscyksYy5wdXNoKEQpKSxEfWZ1bmN0aW9uIEgoeSl7aWYoLS15LnVzZWRUaW1lcz09PTApe2xldCBSPWMuaW5kZXhPZih5KTtjW1JdPWNbYy5sZW5ndGgtMV0sYy5wb3AoKSx5LmRlc3Ryb3koKX19ZnVuY3Rpb24gdHQoeSl7bC5yZW1vdmUoeSl9ZnVuY3Rpb24gWCgpe2wuZGlzcG9zZSgpfXJldHVybntnZXRQYXJhbWV0ZXJzOnAsZ2V0UHJvZ3JhbUNhY2hlS2V5OmIsZ2V0VW5pZm9ybXM6TCxhY3F1aXJlUHJvZ3JhbTpBLHJlbGVhc2VQcm9ncmFtOkgscmVsZWFzZVNoYWRlckNhY2hlOnR0LHByb2dyYW1zOmMsZGlzcG9zZTpYfX1mdW5jdGlvbiB4RSgpe2xldCBuPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHQocyl7bGV0IG89bi5nZXQocyk7cmV0dXJuIG89PT12b2lkIDAmJihvPXt9LG4uc2V0KHMsbykpLG99ZnVuY3Rpb24gZShzKXtuLmRlbGV0ZShzKX1mdW5jdGlvbiBpKHMsbyxhKXtuLmdldChzKVtvXT1hfWZ1bmN0aW9uIHIoKXtuPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6dCxyZW1vdmU6ZSx1cGRhdGU6aSxkaXNwb3NlOnJ9fWZ1bmN0aW9uIHlFKG4sdCl7cmV0dXJuIG4uZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9uLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOm4ucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP24ucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjpuLm1hdGVyaWFsLmlkIT09dC5tYXRlcmlhbC5pZD9uLm1hdGVyaWFsLmlkLXQubWF0ZXJpYWwuaWQ6bi56IT09dC56P24uei10Lno6bi5pZC10LmlkfWZ1bmN0aW9uIE5nKG4sdCl7cmV0dXJuIG4uZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9uLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOm4ucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP24ucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjpuLnohPT10Lno/dC56LW4uejpuLmlkLXQuaWR9ZnVuY3Rpb24gRmcoKXtsZXQgbj1bXSx0PTAsZT1bXSxpPVtdLHI9W107ZnVuY3Rpb24gcygpe3Q9MCxlLmxlbmd0aD0wLGkubGVuZ3RoPTAsci5sZW5ndGg9MH1mdW5jdGlvbiBvKGgsZixkLGcseCx2KXtsZXQgbT1uW3RdO3JldHVybiBtPT09dm9pZCAwPyhtPXtpZDpoLmlkLG9iamVjdDpoLGdlb21ldHJ5OmYsbWF0ZXJpYWw6ZCxncm91cE9yZGVyOmcscmVuZGVyT3JkZXI6aC5yZW5kZXJPcmRlcix6OngsZ3JvdXA6dn0sblt0XT1tKToobS5pZD1oLmlkLG0ub2JqZWN0PWgsbS5nZW9tZXRyeT1mLG0ubWF0ZXJpYWw9ZCxtLmdyb3VwT3JkZXI9ZyxtLnJlbmRlck9yZGVyPWgucmVuZGVyT3JkZXIsbS56PXgsbS5ncm91cD12KSx0KyssbX1mdW5jdGlvbiBhKGgsZixkLGcseCx2KXtsZXQgbT1vKGgsZixkLGcseCx2KTtkLnRyYW5zbWlzc2lvbj4wP2kucHVzaChtKTpkLnRyYW5zcGFyZW50PT09ITA/ci5wdXNoKG0pOmUucHVzaChtKX1mdW5jdGlvbiBsKGgsZixkLGcseCx2KXtsZXQgbT1vKGgsZixkLGcseCx2KTtkLnRyYW5zbWlzc2lvbj4wP2kudW5zaGlmdChtKTpkLnRyYW5zcGFyZW50PT09ITA/ci51bnNoaWZ0KG0pOmUudW5zaGlmdChtKX1mdW5jdGlvbiBjKGgsZil7ZS5sZW5ndGg+MSYmZS5zb3J0KGh8fHlFKSxpLmxlbmd0aD4xJiZpLnNvcnQoZnx8TmcpLHIubGVuZ3RoPjEmJnIuc29ydChmfHxOZyl9ZnVuY3Rpb24gdSgpe2ZvcihsZXQgaD10LGY9bi5sZW5ndGg7aDxmO2grKyl7bGV0IGQ9bltoXTtpZihkLmlkPT09bnVsbClicmVhaztkLmlkPW51bGwsZC5vYmplY3Q9bnVsbCxkLmdlb21ldHJ5PW51bGwsZC5tYXRlcmlhbD1udWxsLGQuZ3JvdXA9bnVsbH19cmV0dXJue29wYXF1ZTplLHRyYW5zbWlzc2l2ZTppLHRyYW5zcGFyZW50OnIsaW5pdDpzLHB1c2g6YSx1bnNoaWZ0OmwsZmluaXNoOnUsc29ydDpjfX1mdW5jdGlvbiB2RSgpe2xldCBuPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHQoaSxyKXtsZXQgcztyZXR1cm4gbi5oYXMoaSk9PT0hMT8ocz1uZXcgRmcsbi5zZXQoaSxbc10pKTpyPj1uLmdldChpKS5sZW5ndGg/KHM9bmV3IEZnLG4uZ2V0KGkpLnB1c2gocykpOnM9bi5nZXQoaSlbcl0sc31mdW5jdGlvbiBlKCl7bj1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OnQsZGlzcG9zZTplfX1mdW5jdGlvbiBfRSgpe2xldCBuPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24odCl7aWYoblt0LmlkXSE9PXZvaWQgMClyZXR1cm4gblt0LmlkXTtsZXQgZTtzd2l0Y2godC50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgVCxjb2xvcjpuZXcgZnR9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjplPXtwb3NpdGlvbjpuZXcgVCxkaXJlY3Rpb246bmV3IFQsY29sb3I6bmV3IGZ0LGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjplPXtwb3NpdGlvbjpuZXcgVCxjb2xvcjpuZXcgZnQsZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6ZT17ZGlyZWN0aW9uOm5ldyBULHNreUNvbG9yOm5ldyBmdCxncm91bmRDb2xvcjpuZXcgZnR9O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6ZT17Y29sb3I6bmV3IGZ0LHBvc2l0aW9uOm5ldyBULGhhbGZXaWR0aDpuZXcgVCxoYWxmSGVpZ2h0Om5ldyBUfTticmVha31yZXR1cm4gblt0LmlkXT1lLGV9fX1mdW5jdGlvbiB3RSgpe2xldCBuPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24odCl7aWYoblt0LmlkXSE9PXZvaWQgMClyZXR1cm4gblt0LmlkXTtsZXQgZTtzd2l0Y2godC50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOmU9e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgS307YnJlYWs7Y2FzZSJTcG90TGlnaHQiOmU9e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgS307YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEssc2hhZG93Q2FtZXJhTmVhcjoxLHNoYWRvd0NhbWVyYUZhcjoxZTN9O2JyZWFrfXJldHVybiBuW3QuaWRdPWUsZX19fXZhciBNRT0wO2Z1bmN0aW9uIGJFKG4sdCl7cmV0dXJuKHQuY2FzdFNoYWRvdz8xOjApLShuLmNhc3RTaGFkb3c/MTowKX1mdW5jdGlvbiBTRShuLHQpe2xldCBlPW5ldyBfRSxpPXdFKCkscj17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKXIucHJvYmUucHVzaChuZXcgVCk7bGV0IHM9bmV3IFQsbz1uZXcgd3QsYT1uZXcgd3Q7ZnVuY3Rpb24gbCh1LGgpe2xldCBmPTAsZD0wLGc9MDtmb3IobGV0IHR0PTA7dHQ8OTt0dCsrKXIucHJvYmVbdHRdLnNldCgwLDAsMCk7bGV0IHg9MCx2PTAsbT0wLHA9MCxiPTAsXz0wLFM9MCxMPTA7dS5zb3J0KGJFKTtsZXQgQT1oIT09ITA/TWF0aC5QSToxO2ZvcihsZXQgdHQ9MCxYPXUubGVuZ3RoO3R0PFg7dHQrKyl7bGV0IHk9dVt0dF0sUj15LmNvbG9yLEQ9eS5pbnRlbnNpdHksRj15LmRpc3RhbmNlLHo9eS5zaGFkb3cmJnkuc2hhZG93Lm1hcD95LnNoYWRvdy5tYXAudGV4dHVyZTpudWxsO2lmKHkuaXNBbWJpZW50TGlnaHQpZis9Ui5yKkQqQSxkKz1SLmcqRCpBLGcrPVIuYipEKkE7ZWxzZSBpZih5LmlzTGlnaHRQcm9iZSlmb3IobGV0IE49MDtOPDk7TisrKXIucHJvYmVbTl0uYWRkU2NhbGVkVmVjdG9yKHkuc2guY29lZmZpY2llbnRzW05dLEQpO2Vsc2UgaWYoeS5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBOPWUuZ2V0KHkpO2lmKE4uY29sb3IuY29weSh5LmNvbG9yKS5tdWx0aXBseVNjYWxhcih5LmludGVuc2l0eSpBKSx5LmNhc3RTaGFkb3cpe2xldCBWPXkuc2hhZG93LFE9aS5nZXQoeSk7US5zaGFkb3dCaWFzPVYuYmlhcyxRLnNoYWRvd05vcm1hbEJpYXM9Vi5ub3JtYWxCaWFzLFEuc2hhZG93UmFkaXVzPVYucmFkaXVzLFEuc2hhZG93TWFwU2l6ZT1WLm1hcFNpemUsci5kaXJlY3Rpb25hbFNoYWRvd1t4XT1RLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXBbeF09eixyLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4W3hdPXkuc2hhZG93Lm1hdHJpeCxfKyt9ci5kaXJlY3Rpb25hbFt4XT1OLHgrK31lbHNlIGlmKHkuaXNTcG90TGlnaHQpe2xldCBOPWUuZ2V0KHkpO2lmKE4ucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHkubWF0cml4V29ybGQpLE4uY29sb3IuY29weShSKS5tdWx0aXBseVNjYWxhcihEKkEpLE4uZGlzdGFuY2U9RixOLmNvbmVDb3M9TWF0aC5jb3MoeS5hbmdsZSksTi5wZW51bWJyYUNvcz1NYXRoLmNvcyh5LmFuZ2xlKigxLXkucGVudW1icmEpKSxOLmRlY2F5PXkuZGVjYXkseS5jYXN0U2hhZG93KXtsZXQgVj15LnNoYWRvdyxRPWkuZ2V0KHkpO1Euc2hhZG93Qmlhcz1WLmJpYXMsUS5zaGFkb3dOb3JtYWxCaWFzPVYubm9ybWFsQmlhcyxRLnNoYWRvd1JhZGl1cz1WLnJhZGl1cyxRLnNoYWRvd01hcFNpemU9Vi5tYXBTaXplLHIuc3BvdFNoYWRvd1ttXT1RLHIuc3BvdFNoYWRvd01hcFttXT16LHIuc3BvdFNoYWRvd01hdHJpeFttXT15LnNoYWRvdy5tYXRyaXgsTCsrfXIuc3BvdFttXT1OLG0rK31lbHNlIGlmKHkuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgTj1lLmdldCh5KTtOLmNvbG9yLmNvcHkoUikubXVsdGlwbHlTY2FsYXIoRCksTi5oYWxmV2lkdGguc2V0KHkud2lkdGgqLjUsMCwwKSxOLmhhbGZIZWlnaHQuc2V0KDAseS5oZWlnaHQqLjUsMCksci5yZWN0QXJlYVtwXT1OLHArK31lbHNlIGlmKHkuaXNQb2ludExpZ2h0KXtsZXQgTj1lLmdldCh5KTtpZihOLmNvbG9yLmNvcHkoeS5jb2xvcikubXVsdGlwbHlTY2FsYXIoeS5pbnRlbnNpdHkqQSksTi5kaXN0YW5jZT15LmRpc3RhbmNlLE4uZGVjYXk9eS5kZWNheSx5LmNhc3RTaGFkb3cpe2xldCBWPXkuc2hhZG93LFE9aS5nZXQoeSk7US5zaGFkb3dCaWFzPVYuYmlhcyxRLnNoYWRvd05vcm1hbEJpYXM9Vi5ub3JtYWxCaWFzLFEuc2hhZG93UmFkaXVzPVYucmFkaXVzLFEuc2hhZG93TWFwU2l6ZT1WLm1hcFNpemUsUS5zaGFkb3dDYW1lcmFOZWFyPVYuY2FtZXJhLm5lYXIsUS5zaGFkb3dDYW1lcmFGYXI9Vi5jYW1lcmEuZmFyLHIucG9pbnRTaGFkb3dbdl09USxyLnBvaW50U2hhZG93TWFwW3ZdPXosci5wb2ludFNoYWRvd01hdHJpeFt2XT15LnNoYWRvdy5tYXRyaXgsUysrfXIucG9pbnRbdl09Tix2Kyt9ZWxzZSBpZih5LmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgTj1lLmdldCh5KTtOLnNreUNvbG9yLmNvcHkoeS5jb2xvcikubXVsdGlwbHlTY2FsYXIoRCpBKSxOLmdyb3VuZENvbG9yLmNvcHkoeS5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIoRCpBKSxyLmhlbWlbYl09TixiKyt9fXA+MCYmKHQuaXNXZWJHTDJ8fG4uaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT09PSEwPyhyLnJlY3RBcmVhTFRDMT1vdC5MVENfRkxPQVRfMSxyLnJlY3RBcmVhTFRDMj1vdC5MVENfRkxPQVRfMik6bi5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik9PT0hMD8oci5yZWN0QXJlYUxUQzE9b3QuTFRDX0hBTEZfMSxyLnJlY3RBcmVhTFRDMj1vdC5MVENfSEFMRl8yKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVbmFibGUgdG8gdXNlIFJlY3RBcmVhTGlnaHQuIE1pc3NpbmcgV2ViR0wgZXh0ZW5zaW9ucy4iKSksci5hbWJpZW50WzBdPWYsci5hbWJpZW50WzFdPWQsci5hbWJpZW50WzJdPWc7bGV0IEg9ci5oYXNoOyhILmRpcmVjdGlvbmFsTGVuZ3RoIT09eHx8SC5wb2ludExlbmd0aCE9PXZ8fEguc3BvdExlbmd0aCE9PW18fEgucmVjdEFyZWFMZW5ndGghPT1wfHxILmhlbWlMZW5ndGghPT1ifHxILm51bURpcmVjdGlvbmFsU2hhZG93cyE9PV98fEgubnVtUG9pbnRTaGFkb3dzIT09U3x8SC5udW1TcG90U2hhZG93cyE9PUwpJiYoci5kaXJlY3Rpb25hbC5sZW5ndGg9eCxyLnNwb3QubGVuZ3RoPW0sci5yZWN0QXJlYS5sZW5ndGg9cCxyLnBvaW50Lmxlbmd0aD12LHIuaGVtaS5sZW5ndGg9YixyLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aD1fLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoPV8sci5wb2ludFNoYWRvdy5sZW5ndGg9UyxyLnBvaW50U2hhZG93TWFwLmxlbmd0aD1TLHIuc3BvdFNoYWRvdy5sZW5ndGg9TCxyLnNwb3RTaGFkb3dNYXAubGVuZ3RoPUwsci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC5sZW5ndGg9XyxyLnBvaW50U2hhZG93TWF0cml4Lmxlbmd0aD1TLHIuc3BvdFNoYWRvd01hdHJpeC5sZW5ndGg9TCxILmRpcmVjdGlvbmFsTGVuZ3RoPXgsSC5wb2ludExlbmd0aD12LEguc3BvdExlbmd0aD1tLEgucmVjdEFyZWFMZW5ndGg9cCxILmhlbWlMZW5ndGg9YixILm51bURpcmVjdGlvbmFsU2hhZG93cz1fLEgubnVtUG9pbnRTaGFkb3dzPVMsSC5udW1TcG90U2hhZG93cz1MLHIudmVyc2lvbj1NRSsrKX1mdW5jdGlvbiBjKHUsaCl7bGV0IGY9MCxkPTAsZz0wLHg9MCx2PTAsbT1oLm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IHA9MCxiPXUubGVuZ3RoO3A8YjtwKyspe2xldCBfPXVbcF07aWYoXy5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBTPXIuZGlyZWN0aW9uYWxbZl07Uy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLHMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8udGFyZ2V0Lm1hdHJpeFdvcmxkKSxTLmRpcmVjdGlvbi5zdWIocyksUy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKG0pLGYrK31lbHNlIGlmKF8uaXNTcG90TGlnaHQpe2xldCBTPXIuc3BvdFtnXTtTLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLm1hdHJpeFdvcmxkKSxTLnBvc2l0aW9uLmFwcGx5TWF0cml4NChtKSxTLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oXy5tYXRyaXhXb3JsZCkscy5zZXRGcm9tTWF0cml4UG9zaXRpb24oXy50YXJnZXQubWF0cml4V29ybGQpLFMuZGlyZWN0aW9uLnN1YihzKSxTLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24obSksZysrfWVsc2UgaWYoXy5pc1JlY3RBcmVhTGlnaHQpe2xldCBTPXIucmVjdEFyZWFbeF07Uy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oXy5tYXRyaXhXb3JsZCksUy5wb3NpdGlvbi5hcHBseU1hdHJpeDQobSksYS5pZGVudGl0eSgpLG8uY29weShfLm1hdHJpeFdvcmxkKSxvLnByZW11bHRpcGx5KG0pLGEuZXh0cmFjdFJvdGF0aW9uKG8pLFMuaGFsZldpZHRoLnNldChfLndpZHRoKi41LDAsMCksUy5oYWxmSGVpZ2h0LnNldCgwLF8uaGVpZ2h0Ki41LDApLFMuaGFsZldpZHRoLmFwcGx5TWF0cml4NChhKSxTLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KGEpLHgrK31lbHNlIGlmKF8uaXNQb2ludExpZ2h0KXtsZXQgUz1yLnBvaW50W2RdO1MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLFMucG9zaXRpb24uYXBwbHlNYXRyaXg0KG0pLGQrK31lbHNlIGlmKF8uaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBTPXIuaGVtaVt2XTtTLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oXy5tYXRyaXhXb3JsZCksUy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKG0pLFMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLHYrK319fXJldHVybntzZXR1cDpsLHNldHVwVmlldzpjLHN0YXRlOnJ9fWZ1bmN0aW9uIHpnKG4sdCl7bGV0IGU9bmV3IFNFKG4sdCksaT1bXSxyPVtdO2Z1bmN0aW9uIHMoKXtpLmxlbmd0aD0wLHIubGVuZ3RoPTB9ZnVuY3Rpb24gbyhoKXtpLnB1c2goaCl9ZnVuY3Rpb24gYShoKXtyLnB1c2goaCl9ZnVuY3Rpb24gbChoKXtlLnNldHVwKGksaCl9ZnVuY3Rpb24gYyhoKXtlLnNldHVwVmlldyhpLGgpfXJldHVybntpbml0OnMsc3RhdGU6e2xpZ2h0c0FycmF5Omksc2hhZG93c0FycmF5OnIsbGlnaHRzOmV9LHNldHVwTGlnaHRzOmwsc2V0dXBMaWdodHNWaWV3OmMscHVzaExpZ2h0Om8scHVzaFNoYWRvdzphfX1mdW5jdGlvbiBFRShuLHQpe2xldCBlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGkocyxvPTApe2xldCBhO3JldHVybiBlLmhhcyhzKT09PSExPyhhPW5ldyB6ZyhuLHQpLGUuc2V0KHMsW2FdKSk6bz49ZS5nZXQocykubGVuZ3RoPyhhPW5ldyB6ZyhuLHQpLGUuZ2V0KHMpLnB1c2goYSkpOmE9ZS5nZXQocylbb10sYX1mdW5jdGlvbiByKCl7ZT1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OmksZGlzcG9zZTpyfX12YXIgY2w9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERlcHRoTWF0ZXJpYWwiLHRoaXMuZGVwdGhQYWNraW5nPUt3LHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlcHRoUGFja2luZz10LmRlcHRoUGFja2luZyx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpc319O2NsLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwO3ZhciB1bD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGlzdGFuY2VNYXRlcmlhbCIsdGhpcy5yZWZlcmVuY2VQb3NpdGlvbj1uZXcgVCx0aGlzLm5lYXJEaXN0YW5jZT0xLHRoaXMuZmFyRGlzdGFuY2U9MWUzLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5yZWZlcmVuY2VQb3NpdGlvbi5jb3B5KHQucmVmZXJlbmNlUG9zaXRpb24pLHRoaXMubmVhckRpc3RhbmNlPXQubmVhckRpc3RhbmNlLHRoaXMuZmFyRGlzdGFuY2U9dC5mYXJEaXN0YW5jZSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpc319O3VsLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwO3ZhciBURT1gdm9pZCBtYWluKCkgewoJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7Cn1gLEFFPWB1bmlmb3JtIHNhbXBsZXIyRCBzaGFkb3dfcGFzczsKdW5pZm9ybSB2ZWMyIHJlc29sdXRpb247CnVuaWZvcm0gZmxvYXQgcmFkaXVzOwojaW5jbHVkZSA8cGFja2luZz4Kdm9pZCBtYWluKCkgewoJY29uc3QgZmxvYXQgc2FtcGxlcyA9IGZsb2F0KCBWU01fU0FNUExFUyApOwoJZmxvYXQgbWVhbiA9IDAuMDsKCWZsb2F0IHNxdWFyZWRfbWVhbiA9IDAuMDsKCWZsb2F0IHV2U3RyaWRlID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAyLjAgLyAoIHNhbXBsZXMgLSAxLjAgKTsKCWZsb2F0IHV2U3RhcnQgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IC0gMS4wOwoJZm9yICggZmxvYXQgaSA9IDAuMDsgaSA8IHNhbXBsZXM7IGkgKysgKSB7CgkJZmxvYXQgdXZPZmZzZXQgPSB1dlN0YXJ0ICsgaSAqIHV2U3RyaWRlOwoJCSNpZmRlZiBIT1JJWk9OVEFMX1BBU1MKCQkJdmVjMiBkaXN0cmlidXRpb24gPSB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCB1dk9mZnNldCwgMC4wICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApOwoJCQltZWFuICs9IGRpc3RyaWJ1dGlvbi54OwoJCQlzcXVhcmVkX21lYW4gKz0gZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSArIGRpc3RyaWJ1dGlvbi54ICogZGlzdHJpYnV0aW9uLng7CgkJI2Vsc2UKCQkJZmxvYXQgZGVwdGggPSB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAwLjAsIHV2T2Zmc2V0ICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApOwoJCQltZWFuICs9IGRlcHRoOwoJCQlzcXVhcmVkX21lYW4gKz0gZGVwdGggKiBkZXB0aDsKCQkjZW5kaWYKCX0KCW1lYW4gPSBtZWFuIC8gc2FtcGxlczsKCXNxdWFyZWRfbWVhbiA9IHNxdWFyZWRfbWVhbiAvIHNhbXBsZXM7CglmbG9hdCBzdGRfZGV2ID0gc3FydCggc3F1YXJlZF9tZWFuIC0gbWVhbiAqIG1lYW4gKTsKCWdsX0ZyYWdDb2xvciA9IHBhY2sySGFsZlRvUkdCQSggdmVjMiggbWVhbiwgc3RkX2RldiApICk7Cn1gO2Z1bmN0aW9uIFQwKG4sdCxlKXtsZXQgaT1uZXcgcXIscj1uZXcgSyxzPW5ldyBLLG89bmV3IFd0LGE9bmV3IGNsKHtkZXB0aFBhY2tpbmc6UXd9KSxsPW5ldyB1bCxjPXt9LHU9ZS5tYXhUZXh0dXJlU2l6ZSxoPXswOmhlLDE6ZW8sMjpIcn0sZj1uZXcgRm4oe2RlZmluZXM6e1ZTTV9TQU1QTEVTOjh9LHVuaWZvcm1zOntzaGFkb3dfcGFzczp7dmFsdWU6bnVsbH0scmVzb2x1dGlvbjp7dmFsdWU6bmV3IEt9LHJhZGl1czp7dmFsdWU6NH19LHZlcnRleFNoYWRlcjpURSxmcmFnbWVudFNoYWRlcjpBRX0pLGQ9Zi5jbG9uZSgpO2QuZGVmaW5lcy5IT1JJWk9OVEFMX1BBU1M9MTtsZXQgZz1uZXcgSHQ7Zy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgUXQobmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLjUsMywtMSwuNSwtMSwzLC41XSksMykpO2xldCB4PW5ldyBvZShnLGYpLHY9dGhpczt0aGlzLmVuYWJsZWQ9ITEsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy50eXBlPWwwLHRoaXMucmVuZGVyPWZ1bmN0aW9uKF8sUyxMKXtpZih2LmVuYWJsZWQ9PT0hMXx8di5hdXRvVXBkYXRlPT09ITEmJnYubmVlZHNVcGRhdGU9PT0hMXx8Xy5sZW5ndGg9PT0wKXJldHVybjtsZXQgQT1uLmdldFJlbmRlclRhcmdldCgpLEg9bi5nZXRBY3RpdmVDdWJlRmFjZSgpLHR0PW4uZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKSxYPW4uc3RhdGU7WC5zZXRCbGVuZGluZyhqbiksWC5idWZmZXJzLmNvbG9yLnNldENsZWFyKDEsMSwxLDEpLFguYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxYLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IHk9MCxSPV8ubGVuZ3RoO3k8Ujt5Kyspe2xldCBEPV9beV0sRj1ELnNoYWRvdztpZihGPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsRCwiaGFzIG5vIHNoYWRvdy4iKTtjb250aW51ZX1pZihGLmF1dG9VcGRhdGU9PT0hMSYmRi5uZWVkc1VwZGF0ZT09PSExKWNvbnRpbnVlO3IuY29weShGLm1hcFNpemUpO2xldCB6PUYuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoci5tdWx0aXBseSh6KSxzLmNvcHkoRi5tYXBTaXplKSwoci54PnV8fHIueT51KSYmKHIueD51JiYocy54PU1hdGguZmxvb3IodS96LngpLHIueD1zLngqei54LEYubWFwU2l6ZS54PXMueCksci55PnUmJihzLnk9TWF0aC5mbG9vcih1L3oueSksci55PXMueSp6LnksRi5tYXBTaXplLnk9cy55KSksRi5tYXA9PT1udWxsJiYhRi5pc1BvaW50TGlnaHRTaGFkb3cmJnRoaXMudHlwZT09PUpzKXtsZXQgVj17bWluRmlsdGVyOmJlLG1hZ0ZpbHRlcjpiZSxmb3JtYXQ6UmV9O0YubWFwPW5ldyBOZShyLngsci55LFYpLEYubWFwLnRleHR1cmUubmFtZT1ELm5hbWUrIi5zaGFkb3dNYXAiLEYubWFwUGFzcz1uZXcgTmUoci54LHIueSxWKSxGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9aWYoRi5tYXA9PT1udWxsKXtsZXQgVj17bWluRmlsdGVyOmZlLG1hZ0ZpbHRlcjpmZSxmb3JtYXQ6UmV9O0YubWFwPW5ldyBOZShyLngsci55LFYpLEYubWFwLnRleHR1cmUubmFtZT1ELm5hbWUrIi5zaGFkb3dNYXAiLEYuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1uLnNldFJlbmRlclRhcmdldChGLm1hcCksbi5jbGVhcigpO2xldCBOPUYuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgVj0wO1Y8TjtWKyspe2xldCBRPUYuZ2V0Vmlld3BvcnQoVik7by5zZXQocy54KlEueCxzLnkqUS55LHMueCpRLnoscy55KlEudyksWC52aWV3cG9ydChvKSxGLnVwZGF0ZU1hdHJpY2VzKEQsViksaT1GLmdldEZydXN0dW0oKSxiKFMsTCxGLmNhbWVyYSxELHRoaXMudHlwZSl9IUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1KcyYmbShGLEwpLEYubmVlZHNVcGRhdGU9ITF9di5uZWVkc1VwZGF0ZT0hMSxuLnNldFJlbmRlclRhcmdldChBLEgsdHQpfTtmdW5jdGlvbiBtKF8sUyl7bGV0IEw9dC51cGRhdGUoeCk7Zi5kZWZpbmVzLlZTTV9TQU1QTEVTIT09Xy5ibHVyU2FtcGxlcyYmKGYuZGVmaW5lcy5WU01fU0FNUExFUz1fLmJsdXJTYW1wbGVzLGQuZGVmaW5lcy5WU01fU0FNUExFUz1fLmJsdXJTYW1wbGVzLGYubmVlZHNVcGRhdGU9ITAsZC5uZWVkc1VwZGF0ZT0hMCksZi51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1fLm1hcC50ZXh0dXJlLGYudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1fLm1hcFNpemUsZi51bmlmb3Jtcy5yYWRpdXMudmFsdWU9Xy5yYWRpdXMsbi5zZXRSZW5kZXJUYXJnZXQoXy5tYXBQYXNzKSxuLmNsZWFyKCksbi5yZW5kZXJCdWZmZXJEaXJlY3QoUyxudWxsLEwsZix4LG51bGwpLGQudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9Xy5tYXBQYXNzLnRleHR1cmUsZC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPV8ubWFwU2l6ZSxkLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1fLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChfLm1hcCksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KFMsbnVsbCxMLGQseCxudWxsKX1mdW5jdGlvbiBwKF8sUyxMLEEsSCx0dCxYKXtsZXQgeT1udWxsLFI9QS5pc1BvaW50TGlnaHQ9PT0hMD9fLmN1c3RvbURpc3RhbmNlTWF0ZXJpYWw6Xy5jdXN0b21EZXB0aE1hdGVyaWFsO2lmKFIhPT12b2lkIDA/eT1SOnk9QS5pc1BvaW50TGlnaHQ9PT0hMD9sOmEsbi5sb2NhbENsaXBwaW5nRW5hYmxlZCYmTC5jbGlwU2hhZG93cz09PSEwJiZMLmNsaXBwaW5nUGxhbmVzLmxlbmd0aCE9PTB8fEwuZGlzcGxhY2VtZW50TWFwJiZMLmRpc3BsYWNlbWVudFNjYWxlIT09MHx8TC5hbHBoYU1hcCYmTC5hbHBoYVRlc3Q+MCl7bGV0IEQ9eS51dWlkLEY9TC51dWlkLHo9Y1tEXTt6PT09dm9pZCAwJiYoej17fSxjW0RdPXopO2xldCBOPXpbRl07Tj09PXZvaWQgMCYmKE49eS5jbG9uZSgpLHpbRl09TikseT1OfXJldHVybiB5LnZpc2libGU9TC52aXNpYmxlLHkud2lyZWZyYW1lPUwud2lyZWZyYW1lLFg9PT1Kcz95LnNpZGU9TC5zaGFkb3dTaWRlIT09bnVsbD9MLnNoYWRvd1NpZGU6TC5zaWRlOnkuc2lkZT1MLnNoYWRvd1NpZGUhPT1udWxsP0wuc2hhZG93U2lkZTpoW0wuc2lkZV0seS5hbHBoYU1hcD1MLmFscGhhTWFwLHkuYWxwaGFUZXN0PUwuYWxwaGFUZXN0LHkuY2xpcFNoYWRvd3M9TC5jbGlwU2hhZG93cyx5LmNsaXBwaW5nUGxhbmVzPUwuY2xpcHBpbmdQbGFuZXMseS5jbGlwSW50ZXJzZWN0aW9uPUwuY2xpcEludGVyc2VjdGlvbix5LmRpc3BsYWNlbWVudE1hcD1MLmRpc3BsYWNlbWVudE1hcCx5LmRpc3BsYWNlbWVudFNjYWxlPUwuZGlzcGxhY2VtZW50U2NhbGUseS5kaXNwbGFjZW1lbnRCaWFzPUwuZGlzcGxhY2VtZW50Qmlhcyx5LndpcmVmcmFtZUxpbmV3aWR0aD1MLndpcmVmcmFtZUxpbmV3aWR0aCx5LmxpbmV3aWR0aD1MLmxpbmV3aWR0aCxBLmlzUG9pbnRMaWdodD09PSEwJiZ5LmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw9PT0hMCYmKHkucmVmZXJlbmNlUG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLHkubmVhckRpc3RhbmNlPUgseS5mYXJEaXN0YW5jZT10dCkseX1mdW5jdGlvbiBiKF8sUyxMLEEsSCl7aWYoXy52aXNpYmxlPT09ITEpcmV0dXJuO2lmKF8ubGF5ZXJzLnRlc3QoUy5sYXllcnMpJiYoXy5pc01lc2h8fF8uaXNMaW5lfHxfLmlzUG9pbnRzKSYmKF8uY2FzdFNoYWRvd3x8Xy5yZWNlaXZlU2hhZG93JiZIPT09SnMpJiYoIV8uZnJ1c3R1bUN1bGxlZHx8aS5pbnRlcnNlY3RzT2JqZWN0KF8pKSl7Xy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhMLm1hdHJpeFdvcmxkSW52ZXJzZSxfLm1hdHJpeFdvcmxkKTtsZXQgeT10LnVwZGF0ZShfKSxSPV8ubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShSKSl7bGV0IEQ9eS5ncm91cHM7Zm9yKGxldCBGPTAsej1ELmxlbmd0aDtGPHo7RisrKXtsZXQgTj1EW0ZdLFY9UltOLm1hdGVyaWFsSW5kZXhdO2lmKFYmJlYudmlzaWJsZSl7bGV0IFE9cChfLHksVixBLEwubmVhcixMLmZhcixIKTtuLnJlbmRlckJ1ZmZlckRpcmVjdChMLG51bGwseSxRLF8sTil9fX1lbHNlIGlmKFIudmlzaWJsZSl7bGV0IEQ9cChfLHksUixBLEwubmVhcixMLmZhcixIKTtuLnJlbmRlckJ1ZmZlckRpcmVjdChMLG51bGwseSxELF8sbnVsbCl9fWxldCBYPV8uY2hpbGRyZW47Zm9yKGxldCB5PTAsUj1YLmxlbmd0aDt5PFI7eSsrKWIoWFt5XSxTLEwsQSxIKX19ZnVuY3Rpb24gQ0Uobix0LGUpe2xldCBpPWUuaXNXZWJHTDI7ZnVuY3Rpb24gcigpe2xldCBQPSExLHB0PW5ldyBXdCxodD1udWxsLEV0PW5ldyBXdCgwLDAsMCwwKTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihZKXtodCE9PVkmJiFQJiYobi5jb2xvck1hc2soWSxZLFksWSksaHQ9WSl9LHNldExvY2tlZDpmdW5jdGlvbihZKXtQPVl9LHNldENsZWFyOmZ1bmN0aW9uKFksTXQsRHQsanQsemUpe3plPT09ITAmJihZKj1qdCxNdCo9anQsRHQqPWp0KSxwdC5zZXQoWSxNdCxEdCxqdCksRXQuZXF1YWxzKHB0KT09PSExJiYobi5jbGVhckNvbG9yKFksTXQsRHQsanQpLEV0LmNvcHkocHQpKX0scmVzZXQ6ZnVuY3Rpb24oKXtQPSExLGh0PW51bGwsRXQuc2V0KC0xLDAsMCwwKX19fWZ1bmN0aW9uIHMoKXtsZXQgUD0hMSxwdD1udWxsLGh0PW51bGwsRXQ9bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbihZKXtZP2soMjkyOSk6RnQoMjkyOSl9LHNldE1hc2s6ZnVuY3Rpb24oWSl7cHQhPT1ZJiYhUCYmKG4uZGVwdGhNYXNrKFkpLHB0PVkpfSxzZXRGdW5jOmZ1bmN0aW9uKFkpe2lmKGh0IT09WSl7aWYoWSlzd2l0Y2goWSl7Y2FzZSB5dzpuLmRlcHRoRnVuYyg1MTIpO2JyZWFrO2Nhc2Ugdnc6bi5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIF93Om4uZGVwdGhGdW5jKDUxMyk7YnJlYWs7Y2FzZSB6dTpuLmRlcHRoRnVuYyg1MTUpO2JyZWFrO2Nhc2Ugd3c6bi5kZXB0aEZ1bmMoNTE0KTticmVhaztjYXNlIE13Om4uZGVwdGhGdW5jKDUxOCk7YnJlYWs7Y2FzZSBidzpuLmRlcHRoRnVuYyg1MTYpO2JyZWFrO2Nhc2UgU3c6bi5kZXB0aEZ1bmMoNTE3KTticmVhaztkZWZhdWx0Om4uZGVwdGhGdW5jKDUxNSl9ZWxzZSBuLmRlcHRoRnVuYyg1MTUpO2h0PVl9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oWSl7UD1ZfSxzZXRDbGVhcjpmdW5jdGlvbihZKXtFdCE9PVkmJihuLmNsZWFyRGVwdGgoWSksRXQ9WSl9LHJlc2V0OmZ1bmN0aW9uKCl7UD0hMSxwdD1udWxsLGh0PW51bGwsRXQ9bnVsbH19fWZ1bmN0aW9uIG8oKXtsZXQgUD0hMSxwdD1udWxsLGh0PW51bGwsRXQ9bnVsbCxZPW51bGwsTXQ9bnVsbCxEdD1udWxsLGp0PW51bGwsemU9bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbihuZSl7UHx8KG5lP2soMjk2MCk6RnQoMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKG5lKXtwdCE9PW5lJiYhUCYmKG4uc3RlbmNpbE1hc2sobmUpLHB0PW5lKX0sc2V0RnVuYzpmdW5jdGlvbihuZSxlbix5bil7KGh0IT09bmV8fEV0IT09ZW58fFkhPT15bikmJihuLnN0ZW5jaWxGdW5jKG5lLGVuLHluKSxodD1uZSxFdD1lbixZPXluKX0sc2V0T3A6ZnVuY3Rpb24obmUsZW4seW4peyhNdCE9PW5lfHxEdCE9PWVufHxqdCE9PXluKSYmKG4uc3RlbmNpbE9wKG5lLGVuLHluKSxNdD1uZSxEdD1lbixqdD15bil9LHNldExvY2tlZDpmdW5jdGlvbihuZSl7UD1uZX0sc2V0Q2xlYXI6ZnVuY3Rpb24obmUpe3plIT09bmUmJihuLmNsZWFyU3RlbmNpbChuZSksemU9bmUpfSxyZXNldDpmdW5jdGlvbigpe1A9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGwsWT1udWxsLE10PW51bGwsRHQ9bnVsbCxqdD1udWxsLHplPW51bGx9fX1sZXQgYT1uZXcgcixsPW5ldyBzLGM9bmV3IG8sdT17fSxoPXt9LGY9bmV3IFdlYWtNYXAsZD1bXSxnPW51bGwseD0hMSx2PW51bGwsbT1udWxsLHA9bnVsbCxiPW51bGwsXz1udWxsLFM9bnVsbCxMPW51bGwsQT0hMSxIPW51bGwsdHQ9bnVsbCxYPW51bGwseT1udWxsLFI9bnVsbCxEPW4uZ2V0UGFyYW1ldGVyKDM1NjYxKSxGPSExLHo9MCxOPW4uZ2V0UGFyYW1ldGVyKDc5MzgpO04uaW5kZXhPZigiV2ViR0wiKSE9PS0xPyh6PXBhcnNlRmxvYXQoL15XZWJHTCAoXGQpLy5leGVjKE4pWzFdKSxGPXo+PTEpOk4uaW5kZXhPZigiT3BlbkdMIEVTIikhPT0tMSYmKHo9cGFyc2VGbG9hdCgvXk9wZW5HTCBFUyAoXGQpLy5leGVjKE4pWzFdKSxGPXo+PTIpO2xldCBWPW51bGwsUT17fSxhdD1uLmdldFBhcmFtZXRlcigzMDg4KSxHPW4uZ2V0UGFyYW1ldGVyKDI5NzgpLCQ9bmV3IFd0KCkuZnJvbUFycmF5KGF0KSxsdD1uZXcgV3QoKS5mcm9tQXJyYXkoRyk7ZnVuY3Rpb24gZHQoUCxwdCxodCl7bGV0IEV0PW5ldyBVaW50OEFycmF5KDQpLFk9bi5jcmVhdGVUZXh0dXJlKCk7bi5iaW5kVGV4dHVyZShQLFkpLG4udGV4UGFyYW1ldGVyaShQLDEwMjQxLDk3MjgpLG4udGV4UGFyYW1ldGVyaShQLDEwMjQwLDk3MjgpO2ZvcihsZXQgTXQ9MDtNdDxodDtNdCsrKW4udGV4SW1hZ2UyRChwdCtNdCwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLEV0KTtyZXR1cm4gWX1sZXQgeHQ9e307eHRbMzU1M109ZHQoMzU1MywzNTUzLDEpLHh0WzM0MDY3XT1kdCgzNDA2NywzNDA2OSw2KSxhLnNldENsZWFyKDAsMCwwLDEpLGwuc2V0Q2xlYXIoMSksYy5zZXRDbGVhcigwKSxrKDI5MjkpLGwuc2V0RnVuYyh6dSksSighMSksaXQoQW0pLGsoMjg4NCksQyhqbik7ZnVuY3Rpb24gayhQKXt1W1BdIT09ITAmJihuLmVuYWJsZShQKSx1W1BdPSEwKX1mdW5jdGlvbiBGdChQKXt1W1BdIT09ITEmJihuLmRpc2FibGUoUCksdVtQXT0hMSl9ZnVuY3Rpb24gbXQoUCxwdCl7cmV0dXJuIGhbUF0hPT1wdD8obi5iaW5kRnJhbWVidWZmZXIoUCxwdCksaFtQXT1wdCxpJiYoUD09PTM2MDA5JiYoaFszNjE2MF09cHQpLFA9PT0zNjE2MCYmKGhbMzYwMDldPXB0KSksITApOiExfWZ1bmN0aW9uIFN0KFAscHQpe2xldCBodD1kLEV0PSExO2lmKFApaWYoaHQ9Zi5nZXQocHQpLGh0PT09dm9pZCAwJiYoaHQ9W10sZi5zZXQocHQsaHQpKSxQLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMpe2xldCBZPVAudGV4dHVyZTtpZihodC5sZW5ndGghPT1ZLmxlbmd0aHx8aHRbMF0hPT0zNjA2NCl7Zm9yKGxldCBNdD0wLER0PVkubGVuZ3RoO010PER0O010KyspaHRbTXRdPTM2MDY0K010O2h0Lmxlbmd0aD1ZLmxlbmd0aCxFdD0hMH19ZWxzZSBodFswXSE9PTM2MDY0JiYoaHRbMF09MzYwNjQsRXQ9ITApO2Vsc2UgaHRbMF0hPT0xMDI5JiYoaHRbMF09MTAyOSxFdD0hMCk7RXQmJihlLmlzV2ViR0wyP24uZHJhd0J1ZmZlcnMoaHQpOnQuZ2V0KCJXRUJHTF9kcmF3X2J1ZmZlcnMiKS5kcmF3QnVmZmVyc1dFQkdMKGh0KSl9ZnVuY3Rpb24gQihQKXtyZXR1cm4gZyE9PVA/KG4udXNlUHJvZ3JhbShQKSxnPVAsITApOiExfWxldCBzdD17W0lyXTozMjc3NCxbYXddOjMyNzc4LFtsd106MzI3Nzl9O2lmKGkpc3RbUG1dPTMyNzc1LHN0W0RtXT0zMjc3NjtlbHNle2xldCBQPXQuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iik7UCE9PW51bGwmJihzdFtQbV09UC5NSU5fRVhULHN0W0RtXT1QLk1BWF9FWFQpfWxldCBudD17W2N3XTowLFt1d106MSxbaHddOjc2OCxbdTBdOjc3MCxbeHddOjc3NixbbXddOjc3NCxbZHddOjc3MixbZnddOjc2OSxbaDBdOjc3MSxbZ3ddOjc3NSxbcHddOjc3M307ZnVuY3Rpb24gQyhQLHB0LGh0LEV0LFksTXQsRHQsanQpe2lmKFA9PT1qbil7eD09PSEwJiYoRnQoMzA0MikseD0hMSk7cmV0dXJufWlmKHg9PT0hMSYmKGsoMzA0MikseD0hMCksUCE9PW93KXtpZihQIT09dnx8anQhPT1BKXtpZigobSE9PUlyfHxfIT09SXIpJiYobi5ibGVuZEVxdWF0aW9uKDMyNzc0KSxtPUlyLF89SXIpLGp0KXN3aXRjaChQKXtjYXNlIEtzOm4uYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgQ206bi5ibGVuZEZ1bmMoMSwxKTticmVhaztjYXNlIFJtOm4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIExtOm4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixQKTticmVha31lbHNlIHN3aXRjaChQKXtjYXNlIEtzOm4uYmxlbmRGdW5jU2VwYXJhdGUoNzcwLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSBDbTpuLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSBSbTpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY5LDAsMSk7YnJlYWs7Y2FzZSBMbTpuLmJsZW5kRnVuYygwLDc2OCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAiLFApO2JyZWFrfXA9bnVsbCxiPW51bGwsUz1udWxsLEw9bnVsbCx2PVAsQT1qdH1yZXR1cm59WT1ZfHxwdCxNdD1NdHx8aHQsRHQ9RHR8fEV0LChwdCE9PW18fFkhPT1fKSYmKG4uYmxlbmRFcXVhdGlvblNlcGFyYXRlKHN0W3B0XSxzdFtZXSksbT1wdCxfPVkpLChodCE9PXB8fEV0IT09Ynx8TXQhPT1TfHxEdCE9PUwpJiYobi5ibGVuZEZ1bmNTZXBhcmF0ZShudFtodF0sbnRbRXRdLG50W010XSxudFtEdF0pLHA9aHQsYj1FdCxTPU10LEw9RHQpLHY9UCxBPW51bGx9ZnVuY3Rpb24gaihQLHB0KXtQLnNpZGU9PT1Icj9GdCgyODg0KTprKDI4ODQpO2xldCBodD1QLnNpZGU9PT1oZTtwdCYmKGh0PSFodCksSihodCksUC5ibGVuZGluZz09PUtzJiZQLnRyYW5zcGFyZW50PT09ITE/Qyhqbik6QyhQLmJsZW5kaW5nLFAuYmxlbmRFcXVhdGlvbixQLmJsZW5kU3JjLFAuYmxlbmREc3QsUC5ibGVuZEVxdWF0aW9uQWxwaGEsUC5ibGVuZFNyY0FscGhhLFAuYmxlbmREc3RBbHBoYSxQLnByZW11bHRpcGxpZWRBbHBoYSksbC5zZXRGdW5jKFAuZGVwdGhGdW5jKSxsLnNldFRlc3QoUC5kZXB0aFRlc3QpLGwuc2V0TWFzayhQLmRlcHRoV3JpdGUpLGEuc2V0TWFzayhQLmNvbG9yV3JpdGUpO2xldCBFdD1QLnN0ZW5jaWxXcml0ZTtjLnNldFRlc3QoRXQpLEV0JiYoYy5zZXRNYXNrKFAuc3RlbmNpbFdyaXRlTWFzayksYy5zZXRGdW5jKFAuc3RlbmNpbEZ1bmMsUC5zdGVuY2lsUmVmLFAuc3RlbmNpbEZ1bmNNYXNrKSxjLnNldE9wKFAuc3RlbmNpbEZhaWwsUC5zdGVuY2lsWkZhaWwsUC5zdGVuY2lsWlBhc3MpKSx2dChQLnBvbHlnb25PZmZzZXQsUC5wb2x5Z29uT2Zmc2V0RmFjdG9yLFAucG9seWdvbk9mZnNldFVuaXRzKSxQLmFscGhhVG9Db3ZlcmFnZT09PSEwP2soMzI5MjYpOkZ0KDMyOTI2KX1mdW5jdGlvbiBKKFApe0ghPT1QJiYoUD9uLmZyb250RmFjZSgyMzA0KTpuLmZyb250RmFjZSgyMzA1KSxIPVApfWZ1bmN0aW9uIGl0KFApe1AhPT1pdz8oaygyODg0KSxQIT09dHQmJihQPT09QW0/bi5jdWxsRmFjZSgxMDI5KTpQPT09cnc/bi5jdWxsRmFjZSgxMDI4KTpuLmN1bGxGYWNlKDEwMzIpKSk6RnQoMjg4NCksdHQ9UH1mdW5jdGlvbiBldChQKXtQIT09WCYmKEYmJm4ubGluZVdpZHRoKFApLFg9UCl9ZnVuY3Rpb24gdnQoUCxwdCxodCl7UD8oaygzMjgyMyksKHkhPT1wdHx8UiE9PWh0KSYmKG4ucG9seWdvbk9mZnNldChwdCxodCkseT1wdCxSPWh0KSk6RnQoMzI4MjMpfWZ1bmN0aW9uIGJ0KFApe1A/aygzMDg5KTpGdCgzMDg5KX1mdW5jdGlvbiBJdChQKXtQPT09dm9pZCAwJiYoUD0zMzk4NCtELTEpLFYhPT1QJiYobi5hY3RpdmVUZXh0dXJlKFApLFY9UCl9ZnVuY3Rpb24gWnQoUCxwdCl7Vj09PW51bGwmJkl0KCk7bGV0IGh0PVFbVl07aHQ9PT12b2lkIDAmJihodD17dHlwZTp2b2lkIDAsdGV4dHVyZTp2b2lkIDB9LFFbVl09aHQpLChodC50eXBlIT09UHx8aHQudGV4dHVyZSE9PXB0KSYmKG4uYmluZFRleHR1cmUoUCxwdHx8eHRbUF0pLGh0LnR5cGU9UCxodC50ZXh0dXJlPXB0KX1mdW5jdGlvbiBxdCgpe2xldCBQPVFbVl07UCE9PXZvaWQgMCYmUC50eXBlIT09dm9pZCAwJiYobi5iaW5kVGV4dHVyZShQLnR5cGUsbnVsbCksUC50eXBlPXZvaWQgMCxQLnRleHR1cmU9dm9pZCAwKX1mdW5jdGlvbiBFKCl7dHJ5e24uY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gdygpe3RyeXtuLnRleFN1YkltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gcSgpe3RyeXtuLnRleFN1YkltYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gcnQoKXt0cnl7bi5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goUCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLFApfX1mdW5jdGlvbiBndCgpe3RyeXtuLnRleFN0b3JhZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goUCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLFApfX1mdW5jdGlvbiBXKCl7dHJ5e24udGV4U3RvcmFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIF90KCl7dHJ5e24udGV4SW1hZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goUCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLFApfX1mdW5jdGlvbiB5dCgpe3RyeXtuLnRleEltYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gdXQoUCl7JC5lcXVhbHMoUCk9PT0hMSYmKG4uc2Npc3NvcihQLngsUC55LFAueixQLncpLCQuY29weShQKSl9ZnVuY3Rpb24gY3QoUCl7bHQuZXF1YWxzKFApPT09ITEmJihuLnZpZXdwb3J0KFAueCxQLnksUC56LFAudyksbHQuY29weShQKSl9ZnVuY3Rpb24gQXQoKXtuLmRpc2FibGUoMzA0Miksbi5kaXNhYmxlKDI4ODQpLG4uZGlzYWJsZSgyOTI5KSxuLmRpc2FibGUoMzI4MjMpLG4uZGlzYWJsZSgzMDg5KSxuLmRpc2FibGUoMjk2MCksbi5kaXNhYmxlKDMyOTI2KSxuLmJsZW5kRXF1YXRpb24oMzI3NzQpLG4uYmxlbmRGdW5jKDEsMCksbi5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDAsMSwwKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCksbi5jbGVhckNvbG9yKDAsMCwwLDApLG4uZGVwdGhNYXNrKCEwKSxuLmRlcHRoRnVuYyg1MTMpLG4uY2xlYXJEZXB0aCgxKSxuLnN0ZW5jaWxNYXNrKDQyOTQ5NjcyOTUpLG4uc3RlbmNpbEZ1bmMoNTE5LDAsNDI5NDk2NzI5NSksbi5zdGVuY2lsT3AoNzY4MCw3NjgwLDc2ODApLG4uY2xlYXJTdGVuY2lsKDApLG4uY3VsbEZhY2UoMTAyOSksbi5mcm9udEZhY2UoMjMwNSksbi5wb2x5Z29uT2Zmc2V0KDAsMCksbi5hY3RpdmVUZXh0dXJlKDMzOTg0KSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxpPT09ITAmJihuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxudWxsKSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSksbi51c2VQcm9ncmFtKG51bGwpLG4ubGluZVdpZHRoKDEpLG4uc2Npc3NvcigwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxuLnZpZXdwb3J0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLHU9e30sVj1udWxsLFE9e30saD17fSxmPW5ldyBXZWFrTWFwLGQ9W10sZz1udWxsLHg9ITEsdj1udWxsLG09bnVsbCxwPW51bGwsYj1udWxsLF89bnVsbCxTPW51bGwsTD1udWxsLEE9ITEsSD1udWxsLHR0PW51bGwsWD1udWxsLHk9bnVsbCxSPW51bGwsJC5zZXQoMCwwLG4uY2FudmFzLndpZHRoLG4uY2FudmFzLmhlaWdodCksbHQuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGEucmVzZXQoKSxsLnJlc2V0KCksYy5yZXNldCgpfXJldHVybntidWZmZXJzOntjb2xvcjphLGRlcHRoOmwsc3RlbmNpbDpjfSxlbmFibGU6ayxkaXNhYmxlOkZ0LGJpbmRGcmFtZWJ1ZmZlcjptdCxkcmF3QnVmZmVyczpTdCx1c2VQcm9ncmFtOkIsc2V0QmxlbmRpbmc6QyxzZXRNYXRlcmlhbDpqLHNldEZsaXBTaWRlZDpKLHNldEN1bGxGYWNlOml0LHNldExpbmVXaWR0aDpldCxzZXRQb2x5Z29uT2Zmc2V0OnZ0LHNldFNjaXNzb3JUZXN0OmJ0LGFjdGl2ZVRleHR1cmU6SXQsYmluZFRleHR1cmU6WnQsdW5iaW5kVGV4dHVyZTpxdCxjb21wcmVzc2VkVGV4SW1hZ2UyRDpFLHRleEltYWdlMkQ6X3QsdGV4SW1hZ2UzRDp5dCx0ZXhTdG9yYWdlMkQ6Z3QsdGV4U3RvcmFnZTNEOlcsdGV4U3ViSW1hZ2UyRDp3LHRleFN1YkltYWdlM0Q6cSxjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDpydCxzY2lzc29yOnV0LHZpZXdwb3J0OmN0LHJlc2V0OkF0fX1mdW5jdGlvbiBSRShuLHQsZSxpLHIscyxvKXtsZXQgYT1yLmlzV2ViR0wyLGw9ci5tYXhUZXh0dXJlcyxjPXIubWF4Q3ViZW1hcFNpemUsdT1yLm1heFRleHR1cmVTaXplLGg9ci5tYXhTYW1wbGVzLGQ9dC5oYXMoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpP3QuZ2V0KCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKTp2b2lkIDAsZz1uZXcgV2Vha01hcCx4LHY9ITE7dHJ5e3Y9dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyE9InVuZGVmaW5lZCImJm5ldyBPZmZzY3JlZW5DYW52YXMoMSwxKS5nZXRDb250ZXh0KCIyZCIpIT09bnVsbH1jYXRjaChFKXt9ZnVuY3Rpb24gbShFLHcpe3JldHVybiB2P25ldyBPZmZzY3JlZW5DYW52YXMoRSx3KTpybygiY2FudmFzIil9ZnVuY3Rpb24gcChFLHcscSxydCl7bGV0IGd0PTE7aWYoKEUud2lkdGg+cnR8fEUuaGVpZ2h0PnJ0KSYmKGd0PXJ0L01hdGgubWF4KEUud2lkdGgsRS5oZWlnaHQpKSxndDwxfHx3PT09ITApaWYodHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZFIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmRSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXAhPSJ1bmRlZmluZWQiJiZFIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApe2xldCBXPXc/bk06TWF0aC5mbG9vcixfdD1XKGd0KkUud2lkdGgpLHl0PVcoZ3QqRS5oZWlnaHQpO3g9PT12b2lkIDAmJih4PW0oX3QseXQpKTtsZXQgdXQ9cT9tKF90LHl0KTp4O3JldHVybiB1dC53aWR0aD1fdCx1dC5oZWlnaHQ9eXQsdXQuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UoRSwwLDAsX3QseXQpLGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBoYXMgYmVlbiByZXNpemVkIGZyb20gKCIrRS53aWR0aCsieCIrRS5oZWlnaHQrIikgdG8gKCIrX3QrIngiK3l0KyIpLiIpLHV0fWVsc2UgcmV0dXJuImRhdGEiaW4gRSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBJbWFnZSBpbiBEYXRhVGV4dHVyZSBpcyB0b28gYmlnICgiK0Uud2lkdGgrIngiK0UuaGVpZ2h0KyIpLiIpLEU7cmV0dXJuIEV9ZnVuY3Rpb24gYihFKXtyZXR1cm4gaWcoRS53aWR0aCkmJmlnKEUuaGVpZ2h0KX1mdW5jdGlvbiBfKEUpe3JldHVybiBhPyExOkUud3JhcFMhPT1WZXx8RS53cmFwVCE9PVZlfHxFLm1pbkZpbHRlciE9PWZlJiZFLm1pbkZpbHRlciE9PWJlfWZ1bmN0aW9uIFMoRSx3KXtyZXR1cm4gRS5nZW5lcmF0ZU1pcG1hcHMmJncmJkUubWluRmlsdGVyIT09ZmUmJkUubWluRmlsdGVyIT09YmV9ZnVuY3Rpb24gTChFKXtuLmdlbmVyYXRlTWlwbWFwKEUpfWZ1bmN0aW9uIEEoRSx3LHEscnQsZ3Q9ITEpe2lmKGE9PT0hMSlyZXR1cm4gdztpZihFIT09bnVsbCl7aWYobltFXSE9PXZvaWQgMClyZXR1cm4gbltFXTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gdXNlIG5vbi1leGlzdGluZyBXZWJHTCBpbnRlcm5hbCBmb3JtYXQgJyIrRSsiJyIpfWxldCBXPXc7cmV0dXJuIHc9PT02NDAzJiYocT09PTUxMjYmJihXPTMzMzI2KSxxPT09NTEzMSYmKFc9MzMzMjUpLHE9PT01MTIxJiYoVz0zMzMyMSkpLHc9PT0zMzMxOSYmKHE9PT01MTI2JiYoVz0zMzMyOCkscT09PTUxMzEmJihXPTMzMzI3KSxxPT09NTEyMSYmKFc9MzMzMjMpKSx3PT09NjQwOCYmKHE9PT01MTI2JiYoVz0zNDgzNikscT09PTUxMzEmJihXPTM0ODQyKSxxPT09NTEyMSYmKFc9cnQ9PT0kdCYmZ3Q9PT0hMT8zNTkwNzozMjg1NikscT09PTMyODE5JiYoVz0zMjg1NCkscT09PTMyODIwJiYoVz0zMjg1NSkpLChXPT09MzMzMjV8fFc9PT0zMzMyNnx8Vz09PTMzMzI3fHxXPT09MzMzMjh8fFc9PT0zNDg0Mnx8Vz09PTM0ODM2KSYmdC5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSxXfWZ1bmN0aW9uIEgoRSx3LHEpe3JldHVybiBTKEUscSk9PT0hMHx8RS5pc0ZyYW1lYnVmZmVyVGV4dHVyZSYmRS5taW5GaWx0ZXIhPT1mZSYmRS5taW5GaWx0ZXIhPT1iZT9NYXRoLmxvZzIoTWF0aC5tYXgody53aWR0aCx3LmhlaWdodCkpKzE6RS5taXBtYXBzIT09dm9pZCAwJiZFLm1pcG1hcHMubGVuZ3RoPjA/RS5taXBtYXBzLmxlbmd0aDpFLmlzQ29tcHJlc3NlZFRleHR1cmUmJkFycmF5LmlzQXJyYXkoRS5pbWFnZSk/dy5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIHR0KEUpe3JldHVybiBFPT09ZmV8fEU9PT1JbXx8RT09PU5tPzk3Mjg6OTcyOX1mdW5jdGlvbiBYKEUpe2xldCB3PUUudGFyZ2V0O3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsWCksUih3KSx3LmlzVmlkZW9UZXh0dXJlJiZnLmRlbGV0ZSh3KSxvLm1lbW9yeS50ZXh0dXJlcy0tfWZ1bmN0aW9uIHkoRSl7bGV0IHc9RS50YXJnZXQ7dy5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIix5KSxEKHcpfWZ1bmN0aW9uIFIoRSl7bGV0IHc9aS5nZXQoRSk7dy5fX3dlYmdsSW5pdCE9PXZvaWQgMCYmKG4uZGVsZXRlVGV4dHVyZSh3Ll9fd2ViZ2xUZXh0dXJlKSxpLnJlbW92ZShFKSl9ZnVuY3Rpb24gRChFKXtsZXQgdz1FLnRleHR1cmUscT1pLmdldChFKSxydD1pLmdldCh3KTtpZighIUUpe2lmKHJ0Ll9fd2ViZ2xUZXh0dXJlIT09dm9pZCAwJiYobi5kZWxldGVUZXh0dXJlKHJ0Ll9fd2ViZ2xUZXh0dXJlKSxvLm1lbW9yeS50ZXh0dXJlcy0tKSxFLmRlcHRoVGV4dHVyZSYmRS5kZXB0aFRleHR1cmUuZGlzcG9zZSgpLEUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpZm9yKGxldCBndD0wO2d0PDY7Z3QrKyluLmRlbGV0ZUZyYW1lYnVmZmVyKHEuX193ZWJnbEZyYW1lYnVmZmVyW2d0XSkscS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKHEuX193ZWJnbERlcHRoYnVmZmVyW2d0XSk7ZWxzZSBuLmRlbGV0ZUZyYW1lYnVmZmVyKHEuX193ZWJnbEZyYW1lYnVmZmVyKSxxLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIocS5fX3dlYmdsRGVwdGhidWZmZXIpLHEuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyJiZuLmRlbGV0ZUZyYW1lYnVmZmVyKHEuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxxLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIocS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpLHEuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihxLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcik7aWYoRS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKWZvcihsZXQgZ3Q9MCxXPXcubGVuZ3RoO2d0PFc7Z3QrKyl7bGV0IF90PWkuZ2V0KHdbZ3RdKTtfdC5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShfdC5fX3dlYmdsVGV4dHVyZSksby5tZW1vcnkudGV4dHVyZXMtLSksaS5yZW1vdmUod1tndF0pfWkucmVtb3ZlKHcpLGkucmVtb3ZlKEUpfX1sZXQgRj0wO2Z1bmN0aW9uIHooKXtGPTB9ZnVuY3Rpb24gTigpe2xldCBFPUY7cmV0dXJuIEU+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK0UrIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIitsKSxGKz0xLEV9ZnVuY3Rpb24gVihFLHcpe2xldCBxPWkuZ2V0KEUpO2lmKEUuaXNWaWRlb1RleHR1cmUmJmV0KEUpLEUudmVyc2lvbj4wJiZxLl9fdmVyc2lvbiE9PUUudmVyc2lvbil7bGV0IHJ0PUUuaW1hZ2U7aWYocnQ9PT12b2lkIDApY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNlIGlmKHJ0LmNvbXBsZXRlPT09ITEpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlIik7ZWxzZXtrKHEsRSx3KTtyZXR1cm59fWUuYWN0aXZlVGV4dHVyZSgzMzk4NCt3KSxlLmJpbmRUZXh0dXJlKDM1NTMscS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gUShFLHcpe2xldCBxPWkuZ2V0KEUpO2lmKEUudmVyc2lvbj4wJiZxLl9fdmVyc2lvbiE9PUUudmVyc2lvbil7ayhxLEUsdyk7cmV0dXJufWUuYWN0aXZlVGV4dHVyZSgzMzk4NCt3KSxlLmJpbmRUZXh0dXJlKDM1ODY2LHEuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIGF0KEUsdyl7bGV0IHE9aS5nZXQoRSk7aWYoRS52ZXJzaW9uPjAmJnEuX192ZXJzaW9uIT09RS52ZXJzaW9uKXtrKHEsRSx3KTtyZXR1cm59ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K3cpLGUuYmluZFRleHR1cmUoMzI4NzkscS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gRyhFLHcpe2xldCBxPWkuZ2V0KEUpO2lmKEUudmVyc2lvbj4wJiZxLl9fdmVyc2lvbiE9PUUudmVyc2lvbil7RnQocSxFLHcpO3JldHVybn1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrdyksZS5iaW5kVGV4dHVyZSgzNDA2NyxxLl9fd2ViZ2xUZXh0dXJlKX1sZXQgJD17W091XToxMDQ5NyxbVmVdOjMzMDcxLFtrdV06MzM2NDh9LGx0PXtbZmVdOjk3MjgsW0ltXTo5OTg0LFtObV06OTk4NixbYmVdOjk3MjksW0R3XTo5OTg1LFtMbF06OTk4N307ZnVuY3Rpb24gZHQoRSx3LHEpe2lmKHE/KG4udGV4UGFyYW1ldGVyaShFLDEwMjQyLCRbdy53cmFwU10pLG4udGV4UGFyYW1ldGVyaShFLDEwMjQzLCRbdy53cmFwVF0pLChFPT09MzI4Nzl8fEU9PT0zNTg2NikmJm4udGV4UGFyYW1ldGVyaShFLDMyODgyLCRbdy53cmFwUl0pLG4udGV4UGFyYW1ldGVyaShFLDEwMjQwLGx0W3cubWFnRmlsdGVyXSksbi50ZXhQYXJhbWV0ZXJpKEUsMTAyNDEsbHRbdy5taW5GaWx0ZXJdKSk6KG4udGV4UGFyYW1ldGVyaShFLDEwMjQyLDMzMDcxKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MywzMzA3MSksKEU9PT0zMjg3OXx8RT09PTM1ODY2KSYmbi50ZXhQYXJhbWV0ZXJpKEUsMzI4ODIsMzMwNzEpLCh3LndyYXBTIT09VmV8fHcud3JhcFQhPT1WZSkmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLndyYXBTIGFuZCBUZXh0dXJlLndyYXBUIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuQ2xhbXBUb0VkZ2VXcmFwcGluZy4iKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MCx0dCh3Lm1hZ0ZpbHRlcikpLG4udGV4UGFyYW1ldGVyaShFLDEwMjQxLHR0KHcubWluRmlsdGVyKSksdy5taW5GaWx0ZXIhPT1mZSYmdy5taW5GaWx0ZXIhPT1iZSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuIikpLHQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKT09PSEwKXtsZXQgcnQ9dC5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2lmKHcudHlwZT09PVVpJiZ0LmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik9PT0hMXx8YT09PSExJiZ3LnR5cGU9PT1VciYmdC5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik9PT0hMSlyZXR1cm47KHcuYW5pc290cm9weT4xfHxpLmdldCh3KS5fX2N1cnJlbnRBbmlzb3Ryb3B5KSYmKG4udGV4UGFyYW1ldGVyZihFLHJ0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULE1hdGgubWluKHcuYW5pc290cm9weSxyLmdldE1heEFuaXNvdHJvcHkoKSkpLGkuZ2V0KHcpLl9fY3VycmVudEFuaXNvdHJvcHk9dy5hbmlzb3Ryb3B5KX19ZnVuY3Rpb24geHQoRSx3KXtFLl9fd2ViZ2xJbml0PT09dm9pZCAwJiYoRS5fX3dlYmdsSW5pdD0hMCx3LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFgpLEUuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCksby5tZW1vcnkudGV4dHVyZXMrKyl9ZnVuY3Rpb24gayhFLHcscSl7bGV0IHJ0PTM1NTM7dy5pc0RhdGFUZXh0dXJlMkRBcnJheSYmKHJ0PTM1ODY2KSx3LmlzRGF0YVRleHR1cmUzRCYmKHJ0PTMyODc5KSx4dChFLHcpLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtxKSxlLmJpbmRUZXh0dXJlKHJ0LEUuX193ZWJnbFRleHR1cmUpLG4ucGl4ZWxTdG9yZWkoMzc0NDAsdy5mbGlwWSksbi5waXhlbFN0b3JlaSgzNzQ0MSx3LnByZW11bHRpcGx5QWxwaGEpLG4ucGl4ZWxTdG9yZWkoMzMxNyx3LnVucGFja0FsaWdubWVudCksbi5waXhlbFN0b3JlaSgzNzQ0MywwKTtsZXQgZ3Q9Xyh3KSYmYih3LmltYWdlKT09PSExLFc9cCh3LmltYWdlLGd0LCExLHUpO1c9dnQodyxXKTtsZXQgX3Q9YihXKXx8YSx5dD1zLmNvbnZlcnQody5mb3JtYXQsdy5lbmNvZGluZyksdXQ9cy5jb252ZXJ0KHcudHlwZSksY3Q9QSh3LmludGVybmFsRm9ybWF0LHl0LHV0LHcuZW5jb2Rpbmcsdy5pc1ZpZGVvVGV4dHVyZSk7ZHQocnQsdyxfdCk7bGV0IEF0LFA9dy5taXBtYXBzLHB0PWEmJncuaXNWaWRlb1RleHR1cmUhPT0hMCxodD1FLl9fdmVyc2lvbj09PXZvaWQgMCxFdD1IKHcsVyxfdCk7aWYody5pc0RlcHRoVGV4dHVyZSljdD02NDAyLGE/dy50eXBlPT09VWk/Y3Q9MzYwMTI6dy50eXBlPT09UWE/Y3Q9MzMxOTA6dy50eXBlPT09QnI/Y3Q9MzUwNTY6Y3Q9MzMxODk6dy50eXBlPT09VWkmJmNvbnNvbGUuZXJyb3IoIldlYkdMUmVuZGVyZXI6IEZsb2F0aW5nIHBvaW50IGRlcHRoIHRleHR1cmUgcmVxdWlyZXMgV2ViR0wyLiIpLHcuZm9ybWF0PT09T2kmJmN0PT09NjQwMiYmdy50eXBlIT09bm8mJncudHlwZSE9PVFhJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRTaG9ydFR5cGUgb3IgVW5zaWduZWRJbnRUeXBlIGZvciBEZXB0aEZvcm1hdCBEZXB0aFRleHR1cmUuIiksdy50eXBlPW5vLHV0PXMuY29udmVydCh3LnR5cGUpKSx3LmZvcm1hdD09PVZyJiZjdD09PTY0MDImJihjdD0zNDA0MSx3LnR5cGUhPT1CciYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkSW50MjQ4VHlwZSBmb3IgRGVwdGhTdGVuY2lsRm9ybWF0IERlcHRoVGV4dHVyZS4iKSx3LnR5cGU9QnIsdXQ9cy5jb252ZXJ0KHcudHlwZSkpKSxwdCYmaHQ/ZS50ZXhTdG9yYWdlMkQoMzU1MywxLGN0LFcud2lkdGgsVy5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsY3QsVy53aWR0aCxXLmhlaWdodCwwLHl0LHV0LG51bGwpO2Vsc2UgaWYody5pc0RhdGFUZXh0dXJlKWlmKFAubGVuZ3RoPjAmJl90KXtwdCYmaHQmJmUudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsUFswXS53aWR0aCxQWzBdLmhlaWdodCk7Zm9yKGxldCBZPTAsTXQ9UC5sZW5ndGg7WTxNdDtZKyspQXQ9UFtZXSxwdD9lLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxBdC53aWR0aCxBdC5oZWlnaHQseXQsdXQsQXQuZGF0YSk6ZS50ZXhJbWFnZTJEKDM1NTMsWSxjdCxBdC53aWR0aCxBdC5oZWlnaHQsMCx5dCx1dCxBdC5kYXRhKTt3LmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHB0PyhodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxXLndpZHRoLFcuaGVpZ2h0KSxlLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxXLndpZHRoLFcuaGVpZ2h0LHl0LHV0LFcuZGF0YSkpOmUudGV4SW1hZ2UyRCgzNTUzLDAsY3QsVy53aWR0aCxXLmhlaWdodCwwLHl0LHV0LFcuZGF0YSk7ZWxzZSBpZih3LmlzQ29tcHJlc3NlZFRleHR1cmUpe3B0JiZodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxQWzBdLndpZHRoLFBbMF0uaGVpZ2h0KTtmb3IobGV0IFk9MCxNdD1QLmxlbmd0aDtZPE10O1krKylBdD1QW1ldLHcuZm9ybWF0IT09UmU/eXQhPT1udWxsP3B0P2UuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1MyxZLDAsMCxBdC53aWR0aCxBdC5oZWlnaHQseXQsQXQuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLFksY3QsQXQud2lkdGgsQXQuaGVpZ2h0LDAsQXQuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAudXBsb2FkVGV4dHVyZSgpIik6cHQ/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsWSwwLDAsQXQud2lkdGgsQXQuaGVpZ2h0LHl0LHV0LEF0LmRhdGEpOmUudGV4SW1hZ2UyRCgzNTUzLFksY3QsQXQud2lkdGgsQXQuaGVpZ2h0LDAseXQsdXQsQXQuZGF0YSl9ZWxzZSBpZih3LmlzRGF0YVRleHR1cmUyREFycmF5KXB0PyhodCYmZS50ZXhTdG9yYWdlM0QoMzU4NjYsRXQsY3QsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoKSxlLnRleFN1YkltYWdlM0QoMzU4NjYsMCwwLDAsMCxXLndpZHRoLFcuaGVpZ2h0LFcuZGVwdGgseXQsdXQsVy5kYXRhKSk6ZS50ZXhJbWFnZTNEKDM1ODY2LDAsY3QsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLDAseXQsdXQsVy5kYXRhKTtlbHNlIGlmKHcuaXNEYXRhVGV4dHVyZTNEKXB0PyhodCYmZS50ZXhTdG9yYWdlM0QoMzI4NzksRXQsY3QsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoKSxlLnRleFN1YkltYWdlM0QoMzI4NzksMCwwLDAsMCxXLndpZHRoLFcuaGVpZ2h0LFcuZGVwdGgseXQsdXQsVy5kYXRhKSk6ZS50ZXhJbWFnZTNEKDMyODc5LDAsY3QsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLDAseXQsdXQsVy5kYXRhKTtlbHNlIGlmKHcuaXNGcmFtZWJ1ZmZlclRleHR1cmUpcHQmJmh0P2UudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsVy53aWR0aCxXLmhlaWdodCk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxjdCxXLndpZHRoLFcuaGVpZ2h0LDAseXQsdXQsbnVsbCk7ZWxzZSBpZihQLmxlbmd0aD4wJiZfdCl7cHQmJmh0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFBbMF0ud2lkdGgsUFswXS5oZWlnaHQpO2ZvcihsZXQgWT0wLE10PVAubGVuZ3RoO1k8TXQ7WSsrKUF0PVBbWV0scHQ/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsWSwwLDAseXQsdXQsQXQpOmUudGV4SW1hZ2UyRCgzNTUzLFksY3QseXQsdXQsQXQpO3cuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2UgcHQ/KGh0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFcud2lkdGgsVy5oZWlnaHQpLGUudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLHl0LHV0LFcpKTplLnRleEltYWdlMkQoMzU1MywwLGN0LHl0LHV0LFcpO1ModyxfdCkmJkwocnQpLEUuX192ZXJzaW9uPXcudmVyc2lvbix3Lm9uVXBkYXRlJiZ3Lm9uVXBkYXRlKHcpfWZ1bmN0aW9uIEZ0KEUsdyxxKXtpZih3LmltYWdlLmxlbmd0aCE9PTYpcmV0dXJuO3h0KEUsdyksZS5hY3RpdmVUZXh0dXJlKDMzOTg0K3EpLGUuYmluZFRleHR1cmUoMzQwNjcsRS5fX3dlYmdsVGV4dHVyZSksbi5waXhlbFN0b3JlaSgzNzQ0MCx3LmZsaXBZKSxuLnBpeGVsU3RvcmVpKDM3NDQxLHcucHJlbXVsdGlwbHlBbHBoYSksbi5waXhlbFN0b3JlaSgzMzE3LHcudW5wYWNrQWxpZ25tZW50KSxuLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCBydD13JiYody5pc0NvbXByZXNzZWRUZXh0dXJlfHx3LmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpLGd0PXcuaW1hZ2VbMF0mJncuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxXPVtdO2ZvcihsZXQgWT0wO1k8NjtZKyspIXJ0JiYhZ3Q/V1tZXT1wKHcuaW1hZ2VbWV0sITEsITAsYyk6V1tZXT1ndD93LmltYWdlW1ldLmltYWdlOncuaW1hZ2VbWV0sV1tZXT12dCh3LFdbWV0pO2xldCBfdD1XWzBdLHl0PWIoX3QpfHxhLHV0PXMuY29udmVydCh3LmZvcm1hdCx3LmVuY29kaW5nKSxjdD1zLmNvbnZlcnQody50eXBlKSxBdD1BKHcuaW50ZXJuYWxGb3JtYXQsdXQsY3Qsdy5lbmNvZGluZyksUD1hJiZ3LmlzVmlkZW9UZXh0dXJlIT09ITAscHQ9RS5fX3ZlcnNpb249PT12b2lkIDAsaHQ9SCh3LF90LHl0KTtkdCgzNDA2Nyx3LHl0KTtsZXQgRXQ7aWYocnQpe1AmJnB0JiZlLnRleFN0b3JhZ2UyRCgzNDA2NyxodCxBdCxfdC53aWR0aCxfdC5oZWlnaHQpO2ZvcihsZXQgWT0wO1k8NjtZKyspe0V0PVdbWV0ubWlwbWFwcztmb3IobGV0IE10PTA7TXQ8RXQubGVuZ3RoO010Kyspe2xldCBEdD1FdFtNdF07dy5mb3JtYXQhPT1SZT91dCE9PW51bGw/UD9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K1ksTXQsMCwwLER0LndpZHRoLER0LmhlaWdodCx1dCxEdC5kYXRhKTplLmNvbXByZXNzZWRUZXhJbWFnZTJEKDM0MDY5K1ksTXQsQXQsRHQud2lkdGgsRHQuaGVpZ2h0LDAsRHQuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKSIpOlA/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1ksTXQsMCwwLER0LndpZHRoLER0LmhlaWdodCx1dCxjdCxEdC5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWSxNdCxBdCxEdC53aWR0aCxEdC5oZWlnaHQsMCx1dCxjdCxEdC5kYXRhKX19fWVsc2V7RXQ9dy5taXBtYXBzLFAmJnB0JiYoRXQubGVuZ3RoPjAmJmh0KyssZS50ZXhTdG9yYWdlMkQoMzQwNjcsaHQsQXQsV1swXS53aWR0aCxXWzBdLmhlaWdodCkpO2ZvcihsZXQgWT0wO1k8NjtZKyspaWYoZ3Qpe1A/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1ksMCwwLDAsV1tZXS53aWR0aCxXW1ldLmhlaWdodCx1dCxjdCxXW1ldLmRhdGEpOmUudGV4SW1hZ2UyRCgzNDA2OStZLDAsQXQsV1tZXS53aWR0aCxXW1ldLmhlaWdodCwwLHV0LGN0LFdbWV0uZGF0YSk7Zm9yKGxldCBNdD0wO010PEV0Lmxlbmd0aDtNdCsrKXtsZXQganQ9RXRbTXRdLmltYWdlW1ldLmltYWdlO1A/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1ksTXQrMSwwLDAsanQud2lkdGgsanQuaGVpZ2h0LHV0LGN0LGp0LmRhdGEpOmUudGV4SW1hZ2UyRCgzNDA2OStZLE10KzEsQXQsanQud2lkdGgsanQuaGVpZ2h0LDAsdXQsY3QsanQuZGF0YSl9fWVsc2V7UD9lLnRleFN1YkltYWdlMkQoMzQwNjkrWSwwLDAsMCx1dCxjdCxXW1ldKTplLnRleEltYWdlMkQoMzQwNjkrWSwwLEF0LHV0LGN0LFdbWV0pO2ZvcihsZXQgTXQ9MDtNdDxFdC5sZW5ndGg7TXQrKyl7bGV0IER0PUV0W010XTtQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10KzEsMCwwLHV0LGN0LER0LmltYWdlW1ldKTplLnRleEltYWdlMkQoMzQwNjkrWSxNdCsxLEF0LHV0LGN0LER0LmltYWdlW1ldKX19fVModyx5dCkmJkwoMzQwNjcpLEUuX192ZXJzaW9uPXcudmVyc2lvbix3Lm9uVXBkYXRlJiZ3Lm9uVXBkYXRlKHcpfWZ1bmN0aW9uIG10KEUsdyxxLHJ0LGd0KXtsZXQgVz1zLmNvbnZlcnQocS5mb3JtYXQscS5lbmNvZGluZyksX3Q9cy5jb252ZXJ0KHEudHlwZSkseXQ9QShxLmludGVybmFsRm9ybWF0LFcsX3QscS5lbmNvZGluZyk7aS5nZXQodykuX19oYXNFeHRlcm5hbFRleHR1cmVzfHwoZ3Q9PT0zMjg3OXx8Z3Q9PT0zNTg2Nj9lLnRleEltYWdlM0QoZ3QsMCx5dCx3LndpZHRoLHcuaGVpZ2h0LHcuZGVwdGgsMCxXLF90LG51bGwpOmUudGV4SW1hZ2UyRChndCwwLHl0LHcud2lkdGgsdy5oZWlnaHQsMCxXLF90LG51bGwpKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxFKSx3LnVzZVJlbmRlclRvVGV4dHVyZT9kLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAscnQsZ3QsaS5nZXQocSkuX193ZWJnbFRleHR1cmUsMCxpdCh3KSk6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCxydCxndCxpLmdldChxKS5fX3dlYmdsVGV4dHVyZSwwKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBTdChFLHcscSl7aWYobi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLEUpLHcuZGVwdGhCdWZmZXImJiF3LnN0ZW5jaWxCdWZmZXIpe2xldCBydD0zMzE4OTtpZihxfHx3LnVzZVJlbmRlclRvVGV4dHVyZSl7bGV0IGd0PXcuZGVwdGhUZXh0dXJlO2d0JiZndC5pc0RlcHRoVGV4dHVyZSYmKGd0LnR5cGU9PT1VaT9ydD0zNjAxMjpndC50eXBlPT09UWEmJihydD0zMzE5MCkpO2xldCBXPWl0KHcpO3cudXNlUmVuZGVyVG9UZXh0dXJlP2QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLFcscnQsdy53aWR0aCx3LmhlaWdodCk6bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsVyxydCx3LndpZHRoLHcuaGVpZ2h0KX1lbHNlIG4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxydCx3LndpZHRoLHcuaGVpZ2h0KTtuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDk2LDM2MTYxLEUpfWVsc2UgaWYody5kZXB0aEJ1ZmZlciYmdy5zdGVuY2lsQnVmZmVyKXtsZXQgcnQ9aXQodyk7cSYmdy51c2VSZW5kZXJidWZmZXI/bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEscnQsMzUwNTYsdy53aWR0aCx3LmhlaWdodCk6dy51c2VSZW5kZXJUb1RleHR1cmU/ZC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEscnQsMzUwNTYsdy53aWR0aCx3LmhlaWdodCk6bi5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLHcud2lkdGgsdy5oZWlnaHQpLG4uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsRSl9ZWxzZXtsZXQgcnQ9dy5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/dy50ZXh0dXJlWzBdOncudGV4dHVyZSxndD1zLmNvbnZlcnQocnQuZm9ybWF0LHJ0LmVuY29kaW5nKSxXPXMuY29udmVydChydC50eXBlKSxfdD1BKHJ0LmludGVybmFsRm9ybWF0LGd0LFcscnQuZW5jb2RpbmcpLHl0PWl0KHcpO3EmJncudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHl0LF90LHcud2lkdGgsdy5oZWlnaHQpOncudXNlUmVuZGVyVG9UZXh0dXJlP2QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLHl0LF90LHcud2lkdGgsdy5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxfdCx3LndpZHRoLHcuaGVpZ2h0KX1uLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCl9ZnVuY3Rpb24gQihFLHcpe2lmKHcmJncuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpdGhyb3cgbmV3IEVycm9yKCJEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsRSksISh3LmRlcHRoVGV4dHVyZSYmdy5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpKXRocm93IG5ldyBFcnJvcigicmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFRIUkVFLkRlcHRoVGV4dHVyZSIpOyghaS5nZXQody5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlfHx3LmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aCE9PXcud2lkdGh8fHcuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCE9PXcuaGVpZ2h0KSYmKHcuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPXcud2lkdGgsdy5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PXcuaGVpZ2h0LHcuZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlPSEwKSxWKHcuZGVwdGhUZXh0dXJlLDApO2xldCBydD1pLmdldCh3LmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsZ3Q9aXQodyk7aWYody5kZXB0aFRleHR1cmUuZm9ybWF0PT09T2kpdy51c2VSZW5kZXJUb1RleHR1cmU/ZC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMscnQsMCxndCk6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLHJ0LDApO2Vsc2UgaWYody5kZXB0aFRleHR1cmUuZm9ybWF0PT09VnIpdy51c2VSZW5kZXJUb1RleHR1cmU/ZC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDMzMzA2LDM1NTMscnQsMCxndCk6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLHJ0LDApO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKX1mdW5jdGlvbiBzdChFKXtsZXQgdz1pLmdldChFKSxxPUUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9PT0hMDtpZihFLmRlcHRoVGV4dHVyZSYmIXcuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcil7aWYocSl0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7Qih3Ll9fd2ViZ2xGcmFtZWJ1ZmZlcixFKX1lbHNlIGlmKHEpe3cuX193ZWJnbERlcHRoYnVmZmVyPVtdO2ZvcihsZXQgcnQ9MDtydDw2O3J0KyspZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdy5fX3dlYmdsRnJhbWVidWZmZXJbcnRdKSx3Ll9fd2ViZ2xEZXB0aGJ1ZmZlcltydF09bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxTdCh3Ll9fd2ViZ2xEZXB0aGJ1ZmZlcltydF0sRSwhMSl9ZWxzZSBlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx3Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksdy5fX3dlYmdsRGVwdGhidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxTdCh3Ll9fd2ViZ2xEZXB0aGJ1ZmZlcixFLCExKTtlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBudChFLHcscSl7bGV0IHJ0PWkuZ2V0KEUpO3chPT12b2lkIDAmJm10KHJ0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcixFLEUudGV4dHVyZSwzNjA2NCwzNTUzKSxxIT09dm9pZCAwJiZzdChFKX1mdW5jdGlvbiBDKEUpe2xldCB3PUUudGV4dHVyZSxxPWkuZ2V0KEUpLHJ0PWkuZ2V0KHcpO0UuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIseSksRS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIT09ITAmJihydC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKHJ0Ll9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpKSxydC5fX3ZlcnNpb249dy52ZXJzaW9uLG8ubWVtb3J5LnRleHR1cmVzKyspO2xldCBndD1FLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITAsVz1FLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9PT0hMCxfdD13LmlzRGF0YVRleHR1cmUzRHx8dy5pc0RhdGFUZXh0dXJlMkRBcnJheSx5dD1iKEUpfHxhO2lmKGd0KXtxLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1bXTtmb3IobGV0IHV0PTA7dXQ8Njt1dCsrKXEuX193ZWJnbEZyYW1lYnVmZmVyW3V0XT1uLmNyZWF0ZUZyYW1lYnVmZmVyKCl9ZWxzZSBpZihxLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1uLmNyZWF0ZUZyYW1lYnVmZmVyKCksVylpZihyLmRyYXdCdWZmZXJzKXtsZXQgdXQ9RS50ZXh0dXJlO2ZvcihsZXQgY3Q9MCxBdD11dC5sZW5ndGg7Y3Q8QXQ7Y3QrKyl7bGV0IFA9aS5nZXQodXRbY3RdKTtQLl9fd2ViZ2xUZXh0dXJlPT09dm9pZCAwJiYoUC5fX3dlYmdsVGV4dHVyZT1uLmNyZWF0ZVRleHR1cmUoKSxvLm1lbW9yeS50ZXh0dXJlcysrKX19ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIgb3IgV0VCR0xfZHJhd19idWZmZXJzIGV4dGVuc2lvbi4iKTtlbHNlIGlmKEUudXNlUmVuZGVyYnVmZmVyKWlmKGEpe3EuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyPW4uY3JlYXRlRnJhbWVidWZmZXIoKSxxLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxxLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcik7bGV0IHV0PXMuY29udmVydCh3LmZvcm1hdCx3LmVuY29kaW5nKSxjdD1zLmNvbnZlcnQody50eXBlKSxBdD1BKHcuaW50ZXJuYWxGb3JtYXQsdXQsY3Qsdy5lbmNvZGluZyksUD1pdChFKTtuLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxQLEF0LEUud2lkdGgsRS5oZWlnaHQpLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHEuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDY0LDM2MTYxLHEuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksRS5kZXB0aEJ1ZmZlciYmKHEuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksU3QocS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIsRSwhMCkpLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7aWYoZ3Qpe2UuYmluZFRleHR1cmUoMzQwNjcscnQuX193ZWJnbFRleHR1cmUpLGR0KDM0MDY3LHcseXQpO2ZvcihsZXQgdXQ9MDt1dDw2O3V0KyspbXQocS5fX3dlYmdsRnJhbWVidWZmZXJbdXRdLEUsdywzNjA2NCwzNDA2OSt1dCk7Uyh3LHl0KSYmTCgzNDA2NyksZS51bmJpbmRUZXh0dXJlKCl9ZWxzZSBpZihXKXtsZXQgdXQ9RS50ZXh0dXJlO2ZvcihsZXQgY3Q9MCxBdD11dC5sZW5ndGg7Y3Q8QXQ7Y3QrKyl7bGV0IFA9dXRbY3RdLHB0PWkuZ2V0KFApO2UuYmluZFRleHR1cmUoMzU1MyxwdC5fX3dlYmdsVGV4dHVyZSksZHQoMzU1MyxQLHl0KSxtdChxLl9fd2ViZ2xGcmFtZWJ1ZmZlcixFLFAsMzYwNjQrY3QsMzU1MyksUyhQLHl0KSYmTCgzNTUzKX1lLnVuYmluZFRleHR1cmUoKX1lbHNle2xldCB1dD0zNTUzO190JiYoYT91dD13LmlzRGF0YVRleHR1cmUzRD8zMjg3OTozNTg2Njpjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheSBvbmx5IHN1cHBvcnRlZCB3aXRoIFdlYkdMMi4iKSksZS5iaW5kVGV4dHVyZSh1dCxydC5fX3dlYmdsVGV4dHVyZSksZHQodXQsdyx5dCksbXQocS5fX3dlYmdsRnJhbWVidWZmZXIsRSx3LDM2MDY0LHV0KSxTKHcseXQpJiZMKHV0KSxlLnVuYmluZFRleHR1cmUoKX1FLmRlcHRoQnVmZmVyJiZzdChFKX1mdW5jdGlvbiBqKEUpe2xldCB3PWIoRSl8fGEscT1FLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9PT0hMD9FLnRleHR1cmU6W0UudGV4dHVyZV07Zm9yKGxldCBydD0wLGd0PXEubGVuZ3RoO3J0PGd0O3J0Kyspe2xldCBXPXFbcnRdO2lmKFMoVyx3KSl7bGV0IF90PUUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/MzQwNjc6MzU1Myx5dD1pLmdldChXKS5fX3dlYmdsVGV4dHVyZTtlLmJpbmRUZXh0dXJlKF90LHl0KSxMKF90KSxlLnVuYmluZFRleHR1cmUoKX19fWZ1bmN0aW9uIEooRSl7aWYoRS51c2VSZW5kZXJidWZmZXIpaWYoYSl7bGV0IHc9RS53aWR0aCxxPUUuaGVpZ2h0LHJ0PTE2Mzg0LGd0PVszNjA2NF0sVz1FLnN0ZW5jaWxCdWZmZXI/MzMzMDY6MzYwOTY7RS5kZXB0aEJ1ZmZlciYmZ3QucHVzaChXKSxFLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5fHwoRS5kZXB0aEJ1ZmZlciYmKHJ0fD0yNTYpLEUuc3RlbmNpbEJ1ZmZlciYmKHJ0fD0xMDI0KSk7bGV0IF90PWkuZ2V0KEUpO2UuYmluZEZyYW1lYnVmZmVyKDM2MDA4LF90Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksZS5iaW5kRnJhbWVidWZmZXIoMzYwMDksX3QuX193ZWJnbEZyYW1lYnVmZmVyKSxFLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5JiYobi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsW1ddKSxuLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOSxbV10pKSxuLmJsaXRGcmFtZWJ1ZmZlcigwLDAsdyxxLDAsMCx3LHEscnQsOTcyOCksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsZ3QpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG51bGwpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LF90Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcil9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKX1mdW5jdGlvbiBpdChFKXtyZXR1cm4gYSYmKEUudXNlUmVuZGVyYnVmZmVyfHxFLnVzZVJlbmRlclRvVGV4dHVyZSk/TWF0aC5taW4oaCxFLnNhbXBsZXMpOjB9ZnVuY3Rpb24gZXQoRSl7bGV0IHc9by5yZW5kZXIuZnJhbWU7Zy5nZXQoRSkhPT13JiYoZy5zZXQoRSx3KSxFLnVwZGF0ZSgpKX1mdW5jdGlvbiB2dChFLHcpe2xldCBxPUUuZW5jb2RpbmcscnQ9RS5mb3JtYXQsZ3Q9RS50eXBlO3JldHVybiBFLmlzQ29tcHJlc3NlZFRleHR1cmU9PT0hMHx8RS5pc1ZpZGVvVGV4dHVyZT09PSEwfHxFLmZvcm1hdD09PUh1fHxxIT09cmkmJihxPT09JHQ/YT09PSExP3QuaGFzKCJFWFRfc1JHQiIpPT09ITAmJnJ0PT09UmU/KEUuZm9ybWF0PUh1LEUubWluRmlsdGVyPWJlLEUuZ2VuZXJhdGVNaXBtYXBzPSExKTp3PU5uLnNSR0JUb0xpbmVhcih3KToocnQhPT1SZXx8Z3QhPT1laSkmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogc1JHQiBlbmNvZGVkIHRleHR1cmVzIGhhdmUgdG8gdXNlIFJHQkFGb3JtYXQgYW5kIFVuc2lnbmVkQnl0ZVR5cGUuIik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xUZXh0dXJlczogVW5zdXBwb3J0ZWQgdGV4dHVyZSBlbmNvZGluZzoiLHEpKSx3fWxldCBidD0hMSxJdD0hMTtmdW5jdGlvbiBadChFLHcpe0UmJkUuaXNXZWJHTFJlbmRlclRhcmdldCYmKGJ0PT09ITEmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxidD0hMCksRT1FLnRleHR1cmUpLFYoRSx3KX1mdW5jdGlvbiBxdChFLHcpe0UmJkUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJihJdD09PSExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlQ3ViZTogZG9uJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLEl0PSEwKSxFPUUudGV4dHVyZSksRyhFLHcpfXRoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdD1OLHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9eix0aGlzLnNldFRleHR1cmUyRD1WLHRoaXMuc2V0VGV4dHVyZTJEQXJyYXk9USx0aGlzLnNldFRleHR1cmUzRD1hdCx0aGlzLnNldFRleHR1cmVDdWJlPUcsdGhpcy5yZWJpbmRUZXh0dXJlcz1udCx0aGlzLnNldHVwUmVuZGVyVGFyZ2V0PUMsdGhpcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXA9aix0aGlzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PUosdGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyPXN0LHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmU9bXQsdGhpcy5zYWZlU2V0VGV4dHVyZTJEPVp0LHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPXF0fWZ1bmN0aW9uIExFKG4sdCxlKXtsZXQgaT1lLmlzV2ViR0wyO2Z1bmN0aW9uIHIocyxvPW51bGwpe2xldCBhO2lmKHM9PT1laSlyZXR1cm4gNTEyMTtpZihzPT09encpcmV0dXJuIDMyODE5O2lmKHM9PT1VdylyZXR1cm4gMzI4MjA7aWYocz09PUl3KXJldHVybiA1MTIwO2lmKHM9PT1OdylyZXR1cm4gNTEyMjtpZihzPT09bm8pcmV0dXJuIDUxMjM7aWYocz09PUZ3KXJldHVybiA1MTI0O2lmKHM9PT1RYSlyZXR1cm4gNTEyNTtpZihzPT09VWkpcmV0dXJuIDUxMjY7aWYocz09PVVyKXJldHVybiBpPzUxMzE6KGE9dC5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxhIT09bnVsbD9hLkhBTEZfRkxPQVRfT0VTOm51bGwpO2lmKHM9PT1CdylyZXR1cm4gNjQwNjtpZihzPT09UmUpcmV0dXJuIDY0MDg7aWYocz09PU93KXJldHVybiA2NDA5O2lmKHM9PT1rdylyZXR1cm4gNjQxMDtpZihzPT09T2kpcmV0dXJuIDY0MDI7aWYocz09PVZyKXJldHVybiAzNDA0MTtpZihzPT09SHcpcmV0dXJuIDY0MDM7aWYocz09PUh1KXJldHVybiBhPXQuZ2V0KCJFWFRfc1JHQiIpLGEhPT1udWxsP2EuU1JHQl9BTFBIQV9FWFQ6bnVsbDtpZihzPT09VncpcmV0dXJuIDM2MjQ0O2lmKHM9PT1HdylyZXR1cm4gMzMzMTk7aWYocz09PVd3KXJldHVybiAzMzMyMDtpZihzPT09cXcpcmV0dXJuIDM2MjQ5O2lmKHM9PT1LY3x8cz09PVFjfHxzPT09amN8fHM9PT10dSlpZihvPT09JHQpaWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGNfc3JnYiIpLGEhPT1udWxsKXtpZihzPT09S2MpcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9FWFQ7aWYocz09PVFjKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDFfRVhUO2lmKHM9PT1qYylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX0VYVDtpZihzPT09dHUpcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtlbHNlIGlmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIiksYSE9PW51bGwpe2lmKHM9PT1LYylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO2lmKHM9PT1RYylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtpZihzPT09amMpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7aWYocz09PXR1KXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUfWVsc2UgcmV0dXJuIG51bGw7aWYocz09PUZtfHxzPT09em18fHM9PT1VbXx8cz09PUJtKWlmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLGEhPT1udWxsKXtpZihzPT09Rm0pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRztpZihzPT09em0pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRztpZihzPT09VW0pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYocz09PUJtKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HfWVsc2UgcmV0dXJuIG51bGw7aWYocz09PVh3KXJldHVybiBhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIpLGEhPT1udWxsP2EuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDpudWxsO2lmKHM9PT1PbXx8cz09PWttKWlmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMiKSxhIT09bnVsbCl7aWYocz09PU9tKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0VUQzI6YS5DT01QUkVTU0VEX1JHQjhfRVRDMjtpZihzPT09a20pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOmEuQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQ31lbHNlIHJldHVybiBudWxsO2lmKHM9PT1IbXx8cz09PVZtfHxzPT09R218fHM9PT1XbXx8cz09PXFtfHxzPT09WG18fHM9PT1ZbXx8cz09PVptfHxzPT09Sm18fHM9PT0kbXx8cz09PUttfHxzPT09UW18fHM9PT1qbXx8cz09PXRnKWlmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjIiksYSE9PW51bGwpe2lmKHM9PT1IbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjtpZihzPT09Vm0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NF9LSFI7aWYocz09PUdtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSO2lmKHM9PT1XbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjtpZihzPT09cW0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4Nl9LSFI7aWYocz09PVhtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDVfS0hSO2lmKHM9PT1ZbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjtpZihzPT09Wm0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFI7aWYocz09PUptKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFI7aWYocz09PSRtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI7aWYocz09PUttKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9LSFI7aWYocz09PVFtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tIUjtpZihzPT09am0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSO2lmKHM9PT10ZylyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMl9LSFJ9ZWxzZSByZXR1cm4gbnVsbDtpZihzPT09ZWcpaWYoYT10LmdldCgiRVhUX3RleHR1cmVfY29tcHJlc3Npb25fYnB0YyIpLGEhPT1udWxsKXtpZihzPT09ZWcpcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDphLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1lbHNlIHJldHVybiBudWxsO2lmKHM9PT1CcilyZXR1cm4gaT8zNDA0MjooYT10LmdldCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLGEhPT1udWxsP2EuVU5TSUdORURfSU5UXzI0XzhfV0VCR0w6bnVsbCl9cmV0dXJue2NvbnZlcnQ6cn19dmFyIGhsPWNsYXNzIGV4dGVuZHMgU2V7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLmNhbWVyYXM9dH19O2hsLnByb3RvdHlwZS5pc0FycmF5Q2FtZXJhPSEwO3ZhciBCaT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikdyb3VwIn19O0JpLnByb3RvdHlwZS5pc0dyb3VwPSEwO3ZhciBQRT17dHlwZToibW92ZSJ9LFFzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fdGFyZ2V0UmF5PW51bGwsdGhpcy5fZ3JpcD1udWxsLHRoaXMuX2hhbmQ9bnVsbH1nZXRIYW5kU3BhY2UoKXtyZXR1cm4gdGhpcy5faGFuZD09PW51bGwmJih0aGlzLl9oYW5kPW5ldyBCaSx0aGlzLl9oYW5kLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5faGFuZC52aXNpYmxlPSExLHRoaXMuX2hhbmQuam9pbnRzPXt9LHRoaXMuX2hhbmQuaW5wdXRTdGF0ZT17cGluY2hpbmc6ITF9KSx0aGlzLl9oYW5kfWdldFRhcmdldFJheVNwYWNlKCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheT09PW51bGwmJih0aGlzLl90YXJnZXRSYXk9bmV3IEJpLHRoaXMuX3RhcmdldFJheS5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExLHRoaXMuX3RhcmdldFJheS5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl90YXJnZXRSYXkubGluZWFyVmVsb2NpdHk9bmV3IFQsdGhpcy5fdGFyZ2V0UmF5Lmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl90YXJnZXRSYXkuYW5ndWxhclZlbG9jaXR5PW5ldyBUKSx0aGlzLl90YXJnZXRSYXl9Z2V0R3JpcFNwYWNlKCl7cmV0dXJuIHRoaXMuX2dyaXA9PT1udWxsJiYodGhpcy5fZ3JpcD1uZXcgQmksdGhpcy5fZ3JpcC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2dyaXAudmlzaWJsZT0hMSx0aGlzLl9ncmlwLmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAubGluZWFyVmVsb2NpdHk9bmV3IFQsdGhpcy5fZ3JpcC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5hbmd1bGFyVmVsb2NpdHk9bmV3IFQpLHRoaXMuX2dyaXB9ZGlzcGF0Y2hFdmVudCh0KXtyZXR1cm4gdGhpcy5fdGFyZ2V0UmF5IT09bnVsbCYmdGhpcy5fdGFyZ2V0UmF5LmRpc3BhdGNoRXZlbnQodCksdGhpcy5fZ3JpcCE9PW51bGwmJnRoaXMuX2dyaXAuZGlzcGF0Y2hFdmVudCh0KSx0aGlzLl9oYW5kIT09bnVsbCYmdGhpcy5faGFuZC5kaXNwYXRjaEV2ZW50KHQpLHRoaXN9ZGlzY29ubmVjdCh0KXtyZXR1cm4gdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNjb25uZWN0ZWQiLGRhdGE6dH0pLHRoaXMuX3RhcmdldFJheSE9PW51bGwmJih0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSksdGhpcy5fZ3JpcCE9PW51bGwmJih0aGlzLl9ncmlwLnZpc2libGU9ITEpLHRoaXMuX2hhbmQhPT1udWxsJiYodGhpcy5faGFuZC52aXNpYmxlPSExKSx0aGlzfXVwZGF0ZSh0LGUsaSl7bGV0IHI9bnVsbCxzPW51bGwsbz1udWxsLGE9dGhpcy5fdGFyZ2V0UmF5LGw9dGhpcy5fZ3JpcCxjPXRoaXMuX2hhbmQ7aWYodCYmZS5zZXNzaW9uLnZpc2liaWxpdHlTdGF0ZSE9PSJ2aXNpYmxlLWJsdXJyZWQiKWlmKGEhPT1udWxsJiYocj1lLmdldFBvc2UodC50YXJnZXRSYXlTcGFjZSxpKSxyIT09bnVsbCYmKGEubWF0cml4LmZyb21BcnJheShyLnRyYW5zZm9ybS5tYXRyaXgpLGEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucm90YXRpb24sYS5zY2FsZSksci5saW5lYXJWZWxvY2l0eT8oYS5oYXNMaW5lYXJWZWxvY2l0eT0hMCxhLmxpbmVhclZlbG9jaXR5LmNvcHkoci5saW5lYXJWZWxvY2l0eSkpOmEuaGFzTGluZWFyVmVsb2NpdHk9ITEsci5hbmd1bGFyVmVsb2NpdHk/KGEuaGFzQW5ndWxhclZlbG9jaXR5PSEwLGEuYW5ndWxhclZlbG9jaXR5LmNvcHkoci5hbmd1bGFyVmVsb2NpdHkpKTphLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoUEUpKSksYyYmdC5oYW5kKXtvPSEwO2ZvcihsZXQgeCBvZiB0LmhhbmQudmFsdWVzKCkpe2xldCB2PWUuZ2V0Sm9pbnRQb3NlKHgsaSk7aWYoYy5qb2ludHNbeC5qb2ludE5hbWVdPT09dm9pZCAwKXtsZXQgcD1uZXcgQmk7cC5tYXRyaXhBdXRvVXBkYXRlPSExLHAudmlzaWJsZT0hMSxjLmpvaW50c1t4LmpvaW50TmFtZV09cCxjLmFkZChwKX1sZXQgbT1jLmpvaW50c1t4LmpvaW50TmFtZV07diE9PW51bGwmJihtLm1hdHJpeC5mcm9tQXJyYXkodi50cmFuc2Zvcm0ubWF0cml4KSxtLm1hdHJpeC5kZWNvbXBvc2UobS5wb3NpdGlvbixtLnJvdGF0aW9uLG0uc2NhbGUpLG0uam9pbnRSYWRpdXM9di5yYWRpdXMpLG0udmlzaWJsZT12IT09bnVsbH1sZXQgdT1jLmpvaW50c1siaW5kZXgtZmluZ2VyLXRpcCJdLGg9Yy5qb2ludHNbInRodW1iLXRpcCJdLGY9dS5wb3NpdGlvbi5kaXN0YW5jZVRvKGgucG9zaXRpb24pLGQ9LjAyLGc9LjAwNTtjLmlucHV0U3RhdGUucGluY2hpbmcmJmY+ZCtnPyhjLmlucHV0U3RhdGUucGluY2hpbmc9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaGVuZCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSk6IWMuaW5wdXRTdGF0ZS5waW5jaGluZyYmZjw9ZC1nJiYoYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSEwLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hzdGFydCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSl9ZWxzZSBsIT09bnVsbCYmdC5ncmlwU3BhY2UmJihzPWUuZ2V0UG9zZSh0LmdyaXBTcGFjZSxpKSxzIT09bnVsbCYmKGwubWF0cml4LmZyb21BcnJheShzLnRyYW5zZm9ybS5tYXRyaXgpLGwubWF0cml4LmRlY29tcG9zZShsLnBvc2l0aW9uLGwucm90YXRpb24sbC5zY2FsZSkscy5saW5lYXJWZWxvY2l0eT8obC5oYXNMaW5lYXJWZWxvY2l0eT0hMCxsLmxpbmVhclZlbG9jaXR5LmNvcHkocy5saW5lYXJWZWxvY2l0eSkpOmwuaGFzTGluZWFyVmVsb2NpdHk9ITEscy5hbmd1bGFyVmVsb2NpdHk/KGwuaGFzQW5ndWxhclZlbG9jaXR5PSEwLGwuYW5ndWxhclZlbG9jaXR5LmNvcHkocy5hbmd1bGFyVmVsb2NpdHkpKTpsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSkpO3JldHVybiBhIT09bnVsbCYmKGEudmlzaWJsZT1yIT09bnVsbCksbCE9PW51bGwmJihsLnZpc2libGU9cyE9PW51bGwpLGMhPT1udWxsJiYoYy52aXNpYmxlPW8hPT1udWxsKSx0aGlzfX0sdW89Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0LGUsaSxyLHMsbyxhLGwsYyx1KXtpZih1PXUhPT12b2lkIDA/dTpPaSx1IT09T2kmJnUhPT1Wcil0aHJvdyBuZXcgRXJyb3IoIkRlcHRoVGV4dHVyZSBmb3JtYXQgbXVzdCBiZSBlaXRoZXIgVEhSRUUuRGVwdGhGb3JtYXQgb3IgVEhSRUUuRGVwdGhTdGVuY2lsRm9ybWF0Iik7aT09PXZvaWQgMCYmdT09PU9pJiYoaT1ubyksaT09PXZvaWQgMCYmdT09PVZyJiYoaT1Cciksc3VwZXIobnVsbCxyLHMsbyxhLGwsdSxpLGMpLHRoaXMuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OmV9LHRoaXMubWFnRmlsdGVyPWEhPT12b2lkIDA/YTpmZSx0aGlzLm1pbkZpbHRlcj1sIT09dm9pZCAwP2w6ZmUsdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX19O3VvLnByb3RvdHlwZS5pc0RlcHRoVGV4dHVyZT0hMDt2YXIgWnU9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCk7bGV0IGk9dGhpcyxyPW51bGwscz0xLG89bnVsbCxhPSJsb2NhbC1mbG9vciIsbD10LmV4dGVuc2lvbnMuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSxjPW51bGwsdT1udWxsLGg9bnVsbCxmPW51bGwsZD0hMSxnPW51bGwseD1lLmdldENvbnRleHRBdHRyaWJ1dGVzKCksdj1udWxsLG09bnVsbCxwPVtdLGI9bmV3IE1hcCxfPW5ldyBTZTtfLmxheWVycy5lbmFibGUoMSksXy52aWV3cG9ydD1uZXcgV3Q7bGV0IFM9bmV3IFNlO1MubGF5ZXJzLmVuYWJsZSgyKSxTLnZpZXdwb3J0PW5ldyBXdDtsZXQgTD1bXyxTXSxBPW5ldyBobDtBLmxheWVycy5lbmFibGUoMSksQS5sYXllcnMuZW5hYmxlKDIpO2xldCBIPW51bGwsdHQ9bnVsbDt0aGlzLmNhbWVyYUF1dG9VcGRhdGU9ITAsdGhpcy5lbmFibGVkPSExLHRoaXMuaXNQcmVzZW50aW5nPSExLHRoaXMuZ2V0Q29udHJvbGxlcj1mdW5jdGlvbihHKXtsZXQgJD1wW0ddO3JldHVybiAkPT09dm9pZCAwJiYoJD1uZXcgUXMscFtHXT0kKSwkLmdldFRhcmdldFJheVNwYWNlKCl9LHRoaXMuZ2V0Q29udHJvbGxlckdyaXA9ZnVuY3Rpb24oRyl7bGV0ICQ9cFtHXTtyZXR1cm4gJD09PXZvaWQgMCYmKCQ9bmV3IFFzLHBbR109JCksJC5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKEcpe2xldCAkPXBbR107cmV0dXJuICQ9PT12b2lkIDAmJigkPW5ldyBRcyxwW0ddPSQpLCQuZ2V0SGFuZFNwYWNlKCl9O2Z1bmN0aW9uIFgoRyl7bGV0ICQ9Yi5nZXQoRy5pbnB1dFNvdXJjZSk7JCYmJC5kaXNwYXRjaEV2ZW50KHt0eXBlOkcudHlwZSxkYXRhOkcuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiB5KCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKEcsJCl7Ry5kaXNjb25uZWN0KCQpfSksYi5jbGVhcigpLEg9bnVsbCx0dD1udWxsLHQuc2V0UmVuZGVyVGFyZ2V0KHYpLGY9bnVsbCxoPW51bGwsdT1udWxsLHI9bnVsbCxtPW51bGwsYXQuc3RvcCgpLGkuaXNQcmVzZW50aW5nPSExLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX10aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3I9ZnVuY3Rpb24oRyl7cz1HLGkuaXNQcmVzZW50aW5nPT09ITAmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKEcpe2E9RyxpLmlzUHJlc2VudGluZz09PSEwJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSByZWZlcmVuY2Ugc3BhY2UgdHlwZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLmdldFJlZmVyZW5jZVNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG99LHRoaXMuZ2V0QmFzZUxheWVyPWZ1bmN0aW9uKCl7cmV0dXJuIGghPT1udWxsP2g6Zn0sdGhpcy5nZXRCaW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHV9LHRoaXMuZ2V0RnJhbWU9ZnVuY3Rpb24oKXtyZXR1cm4gZ30sdGhpcy5nZXRTZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHRoaXMuc2V0U2Vzc2lvbj1mdW5jdGlvbihHKXtyZXR1cm4gaGYodGhpcyxudWxsLGZ1bmN0aW9uKigpe2lmKHI9RyxyIT09bnVsbCl7aWYodj10LmdldFJlbmRlclRhcmdldCgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0IixYKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixYKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVuZCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplIixYKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplZW5kIixYKSxyLmFkZEV2ZW50TGlzdGVuZXIoImVuZCIseSksci5hZGRFdmVudExpc3RlbmVyKCJpbnB1dHNvdXJjZXNjaGFuZ2UiLFIpLHgueHJDb21wYXRpYmxlIT09ITAmJih5aWVsZCBlLm1ha2VYUkNvbXBhdGlibGUoKSksci5yZW5kZXJTdGF0ZS5sYXllcnM9PT12b2lkIDB8fHQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyPT09ITEpe2xldCAkPXthbnRpYWxpYXM6ci5yZW5kZXJTdGF0ZS5sYXllcnM9PT12b2lkIDA/eC5hbnRpYWxpYXM6ITAsYWxwaGE6eC5hbHBoYSxkZXB0aDp4LmRlcHRoLHN0ZW5jaWw6eC5zdGVuY2lsLGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6c307Zj1uZXcgWFJXZWJHTExheWVyKHIsZSwkKSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtiYXNlTGF5ZXI6Zn0pLG09bmV3IE5lKGYuZnJhbWVidWZmZXJXaWR0aCxmLmZyYW1lYnVmZmVySGVpZ2h0LHtmb3JtYXQ6UmUsdHlwZTplaSxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9ZWxzZXtkPXguYW50aWFsaWFzO2xldCAkPW51bGwsbHQ9bnVsbCxkdD1udWxsO3guZGVwdGgmJihkdD14LnN0ZW5jaWw/MzUwNTY6MzMxOTAsJD14LnN0ZW5jaWw/VnI6T2ksbHQ9eC5zdGVuY2lsP0JyOm5vKTtsZXQgeHQ9e2NvbG9yRm9ybWF0OnQub3V0cHV0RW5jb2Rpbmc9PT0kdD8zNTkwNzozMjg1NixkZXB0aEZvcm1hdDpkdCxzY2FsZUZhY3RvcjpzfTt1PW5ldyBYUldlYkdMQmluZGluZyhyLGUpLGg9dS5jcmVhdGVQcm9qZWN0aW9uTGF5ZXIoeHQpLHIudXBkYXRlUmVuZGVyU3RhdGUoe2xheWVyczpbaF19KSxkP209bmV3IHNvKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCx7Zm9ybWF0OlJlLHR5cGU6ZWksZGVwdGhUZXh0dXJlOm5ldyB1byhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQsbHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsJCksc3RlbmNpbEJ1ZmZlcjp4LnN0ZW5jaWwsaWdub3JlRGVwdGg6aC5pZ25vcmVEZXB0aFZhbHVlcyx1c2VSZW5kZXJUb1RleHR1cmU6bCxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSk6bT1uZXcgTmUoaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6UmUsdHlwZTplaSxkZXB0aFRleHR1cmU6bmV3IHVvKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCxsdCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwkKSxzdGVuY2lsQnVmZmVyOnguc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1tLmlzWFJSZW5kZXJUYXJnZXQ9ITAsdGhpcy5zZXRGb3ZlYXRpb24oMSksbz15aWVsZCByLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShhKSxhdC5zZXRDb250ZXh0KHIpLGF0LnN0YXJ0KCksaS5pc1ByZXNlbnRpbmc9ITAsaS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uc3RhcnQifSl9fSl9O2Z1bmN0aW9uIFIoRyl7bGV0ICQ9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBsdD0wO2x0PHAubGVuZ3RoO2x0KyspYi5zZXQoJFtsdF0scFtsdF0pO2ZvcihsZXQgbHQ9MDtsdDxHLnJlbW92ZWQubGVuZ3RoO2x0Kyspe2xldCBkdD1HLnJlbW92ZWRbbHRdLHh0PWIuZ2V0KGR0KTt4dCYmKHh0LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpkdH0pLGIuZGVsZXRlKGR0KSl9Zm9yKGxldCBsdD0wO2x0PEcuYWRkZWQubGVuZ3RoO2x0Kyspe2xldCBkdD1HLmFkZGVkW2x0XSx4dD1iLmdldChkdCk7eHQmJnh0LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNvbm5lY3RlZCIsZGF0YTpkdH0pfX1sZXQgRD1uZXcgVCxGPW5ldyBUO2Z1bmN0aW9uIHooRywkLGx0KXtELnNldEZyb21NYXRyaXhQb3NpdGlvbigkLm1hdHJpeFdvcmxkKSxGLnNldEZyb21NYXRyaXhQb3NpdGlvbihsdC5tYXRyaXhXb3JsZCk7bGV0IGR0PUQuZGlzdGFuY2VUbyhGKSx4dD0kLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsaz1sdC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLEZ0PXh0WzE0XS8oeHRbMTBdLTEpLG10PXh0WzE0XS8oeHRbMTBdKzEpLFN0PSh4dFs5XSsxKS94dFs1XSxCPSh4dFs5XS0xKS94dFs1XSxzdD0oeHRbOF0tMSkveHRbMF0sbnQ9KGtbOF0rMSkva1swXSxDPUZ0KnN0LGo9RnQqbnQsSj1kdC8oLXN0K250KSxpdD1KKi1zdDskLm1hdHJpeFdvcmxkLmRlY29tcG9zZShHLnBvc2l0aW9uLEcucXVhdGVybmlvbixHLnNjYWxlKSxHLnRyYW5zbGF0ZVgoaXQpLEcudHJhbnNsYXRlWihKKSxHLm1hdHJpeFdvcmxkLmNvbXBvc2UoRy5wb3NpdGlvbixHLnF1YXRlcm5pb24sRy5zY2FsZSksRy5tYXRyaXhXb3JsZEludmVyc2UuY29weShHLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQgZXQ9RnQrSix2dD1tdCtKLGJ0PUMtaXQsSXQ9aisoZHQtaXQpLFp0PVN0Km10L3Z0KmV0LHF0PUIqbXQvdnQqZXQ7Ry5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShidCxJdCxadCxxdCxldCx2dCl9ZnVuY3Rpb24gTihHLCQpeyQ9PT1udWxsP0cubWF0cml4V29ybGQuY29weShHLm1hdHJpeCk6Ry5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKCQubWF0cml4V29ybGQsRy5tYXRyaXgpLEcubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoRy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dGhpcy51cGRhdGVDYW1lcmE9ZnVuY3Rpb24oRyl7aWYocj09PW51bGwpcmV0dXJuO0EubmVhcj1TLm5lYXI9Xy5uZWFyPUcubmVhcixBLmZhcj1TLmZhcj1fLmZhcj1HLmZhciwoSCE9PUEubmVhcnx8dHQhPT1BLmZhcikmJihyLnVwZGF0ZVJlbmRlclN0YXRlKHtkZXB0aE5lYXI6QS5uZWFyLGRlcHRoRmFyOkEuZmFyfSksSD1BLm5lYXIsdHQ9QS5mYXIpO2xldCAkPUcucGFyZW50LGx0PUEuY2FtZXJhcztOKEEsJCk7Zm9yKGxldCB4dD0wO3h0PGx0Lmxlbmd0aDt4dCsrKU4obHRbeHRdLCQpO0EubWF0cml4V29ybGQuZGVjb21wb3NlKEEucG9zaXRpb24sQS5xdWF0ZXJuaW9uLEEuc2NhbGUpLEcucG9zaXRpb24uY29weShBLnBvc2l0aW9uKSxHLnF1YXRlcm5pb24uY29weShBLnF1YXRlcm5pb24pLEcuc2NhbGUuY29weShBLnNjYWxlKSxHLm1hdHJpeC5jb3B5KEEubWF0cml4KSxHLm1hdHJpeFdvcmxkLmNvcHkoQS5tYXRyaXhXb3JsZCk7bGV0IGR0PUcuY2hpbGRyZW47Zm9yKGxldCB4dD0wLGs9ZHQubGVuZ3RoO3h0PGs7eHQrKylkdFt4dF0udXBkYXRlTWF0cml4V29ybGQoITApO2x0Lmxlbmd0aD09PTI/eihBLF8sUyk6QS5wcm9qZWN0aW9uTWF0cml4LmNvcHkoXy5wcm9qZWN0aW9uTWF0cml4KX0sdGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gQX0sdGhpcy5nZXRGb3ZlYXRpb249ZnVuY3Rpb24oKXtpZihoIT09bnVsbClyZXR1cm4gaC5maXhlZEZvdmVhdGlvbjtpZihmIT09bnVsbClyZXR1cm4gZi5maXhlZEZvdmVhdGlvbn0sdGhpcy5zZXRGb3ZlYXRpb249ZnVuY3Rpb24oRyl7aCE9PW51bGwmJihoLmZpeGVkRm92ZWF0aW9uPUcpLGYhPT1udWxsJiZmLmZpeGVkRm92ZWF0aW9uIT09dm9pZCAwJiYoZi5maXhlZEZvdmVhdGlvbj1HKX07bGV0IFY9bnVsbDtmdW5jdGlvbiBRKEcsJCl7aWYoYz0kLmdldFZpZXdlclBvc2UobyksZz0kLGMhPT1udWxsKXtsZXQgZHQ9Yy52aWV3cztmIT09bnVsbCYmKHQuc2V0UmVuZGVyVGFyZ2V0RnJhbWVidWZmZXIobSxmLmZyYW1lYnVmZmVyKSx0LnNldFJlbmRlclRhcmdldChtKSk7bGV0IHh0PSExO2R0Lmxlbmd0aCE9PUEuY2FtZXJhcy5sZW5ndGgmJihBLmNhbWVyYXMubGVuZ3RoPTAseHQ9ITApO2ZvcihsZXQgaz0wO2s8ZHQubGVuZ3RoO2srKyl7bGV0IEZ0PWR0W2tdLG10PW51bGw7aWYoZiE9PW51bGwpbXQ9Zi5nZXRWaWV3cG9ydChGdCk7ZWxzZXtsZXQgQj11LmdldFZpZXdTdWJJbWFnZShoLEZ0KTttdD1CLnZpZXdwb3J0LGs9PT0wJiYodC5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyhtLEIuY29sb3JUZXh0dXJlLGguaWdub3JlRGVwdGhWYWx1ZXM/dm9pZCAwOkIuZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQobSkpfWxldCBTdD1MW2tdO1N0Lm1hdHJpeC5mcm9tQXJyYXkoRnQudHJhbnNmb3JtLm1hdHJpeCksU3QucHJvamVjdGlvbk1hdHJpeC5mcm9tQXJyYXkoRnQucHJvamVjdGlvbk1hdHJpeCksU3Qudmlld3BvcnQuc2V0KG10LngsbXQueSxtdC53aWR0aCxtdC5oZWlnaHQpLGs9PT0wJiZBLm1hdHJpeC5jb3B5KFN0Lm1hdHJpeCkseHQ9PT0hMCYmQS5jYW1lcmFzLnB1c2goU3QpfX1sZXQgbHQ9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBkdD0wO2R0PHAubGVuZ3RoO2R0Kyspe2xldCB4dD1wW2R0XSxrPWx0W2R0XTt4dC51cGRhdGUoaywkLG8pfVYmJlYoRywkKSxnPW51bGx9bGV0IGF0PW5ldyBnMDthdC5zZXRBbmltYXRpb25Mb29wKFEpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihHKXtWPUd9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe319fTtmdW5jdGlvbiBERShuKXtmdW5jdGlvbiB0KG0scCl7bS5mb2dDb2xvci52YWx1ZS5jb3B5KHAuY29sb3IpLHAuaXNGb2c/KG0uZm9nTmVhci52YWx1ZT1wLm5lYXIsbS5mb2dGYXIudmFsdWU9cC5mYXIpOnAuaXNGb2dFeHAyJiYobS5mb2dEZW5zaXR5LnZhbHVlPXAuZGVuc2l0eSl9ZnVuY3Rpb24gZShtLHAsYixfLFMpe3AuaXNNZXNoQmFzaWNNYXRlcmlhbD9pKG0scCk6cC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGkobSxwKSxsKG0scCkpOnAuaXNNZXNoVG9vbk1hdGVyaWFsPyhpKG0scCksdShtLHApKTpwLmlzTWVzaFBob25nTWF0ZXJpYWw/KGkobSxwKSxjKG0scCkpOnAuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD8oaShtLHApLHAuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD9mKG0scCxTKTpoKG0scCkpOnAuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw/KGkobSxwKSxkKG0scCkpOnAuaXNNZXNoRGVwdGhNYXRlcmlhbD8oaShtLHApLGcobSxwKSk6cC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhpKG0scCkseChtLHApKTpwLmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhpKG0scCksdihtLHApKTpwLmlzTGluZUJhc2ljTWF0ZXJpYWw/KHIobSxwKSxwLmlzTGluZURhc2hlZE1hdGVyaWFsJiZzKG0scCkpOnAuaXNQb2ludHNNYXRlcmlhbD9vKG0scCxiLF8pOnAuaXNTcHJpdGVNYXRlcmlhbD9hKG0scCk6cC5pc1NoYWRvd01hdGVyaWFsPyhtLmNvbG9yLnZhbHVlLmNvcHkocC5jb2xvciksbS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eSk6cC5pc1NoYWRlck1hdGVyaWFsJiYocC51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfWZ1bmN0aW9uIGkobSxwKXttLm9wYWNpdHkudmFsdWU9cC5vcGFjaXR5LHAuY29sb3ImJm0uZGlmZnVzZS52YWx1ZS5jb3B5KHAuY29sb3IpLHAuZW1pc3NpdmUmJm0uZW1pc3NpdmUudmFsdWUuY29weShwLmVtaXNzaXZlKS5tdWx0aXBseVNjYWxhcihwLmVtaXNzaXZlSW50ZW5zaXR5KSxwLm1hcCYmKG0ubWFwLnZhbHVlPXAubWFwKSxwLmFscGhhTWFwJiYobS5hbHBoYU1hcC52YWx1ZT1wLmFscGhhTWFwKSxwLnNwZWN1bGFyTWFwJiYobS5zcGVjdWxhck1hcC52YWx1ZT1wLnNwZWN1bGFyTWFwKSxwLmFscGhhVGVzdD4wJiYobS5hbHBoYVRlc3QudmFsdWU9cC5hbHBoYVRlc3QpO2xldCBiPW4uZ2V0KHApLmVudk1hcDtiJiYobS5lbnZNYXAudmFsdWU9YixtLmZsaXBFbnZNYXAudmFsdWU9Yi5pc0N1YmVUZXh0dXJlJiZiLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExPy0xOjEsbS5yZWZsZWN0aXZpdHkudmFsdWU9cC5yZWZsZWN0aXZpdHksbS5pb3IudmFsdWU9cC5pb3IsbS5yZWZyYWN0aW9uUmF0aW8udmFsdWU9cC5yZWZyYWN0aW9uUmF0aW8pLHAubGlnaHRNYXAmJihtLmxpZ2h0TWFwLnZhbHVlPXAubGlnaHRNYXAsbS5saWdodE1hcEludGVuc2l0eS52YWx1ZT1wLmxpZ2h0TWFwSW50ZW5zaXR5KSxwLmFvTWFwJiYobS5hb01hcC52YWx1ZT1wLmFvTWFwLG0uYW9NYXBJbnRlbnNpdHkudmFsdWU9cC5hb01hcEludGVuc2l0eSk7bGV0IF87cC5tYXA/Xz1wLm1hcDpwLnNwZWN1bGFyTWFwP189cC5zcGVjdWxhck1hcDpwLmRpc3BsYWNlbWVudE1hcD9fPXAuZGlzcGxhY2VtZW50TWFwOnAubm9ybWFsTWFwP189cC5ub3JtYWxNYXA6cC5idW1wTWFwP189cC5idW1wTWFwOnAucm91Z2huZXNzTWFwP189cC5yb3VnaG5lc3NNYXA6cC5tZXRhbG5lc3NNYXA/Xz1wLm1ldGFsbmVzc01hcDpwLmFscGhhTWFwP189cC5hbHBoYU1hcDpwLmVtaXNzaXZlTWFwP189cC5lbWlzc2l2ZU1hcDpwLmNsZWFyY29hdE1hcD9fPXAuY2xlYXJjb2F0TWFwOnAuY2xlYXJjb2F0Tm9ybWFsTWFwP189cC5jbGVhcmNvYXROb3JtYWxNYXA6cC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/Xz1wLmNsZWFyY29hdFJvdWdobmVzc01hcDpwLnNwZWN1bGFySW50ZW5zaXR5TWFwP189cC5zcGVjdWxhckludGVuc2l0eU1hcDpwLnNwZWN1bGFyQ29sb3JNYXA/Xz1wLnNwZWN1bGFyQ29sb3JNYXA6cC50cmFuc21pc3Npb25NYXA/Xz1wLnRyYW5zbWlzc2lvbk1hcDpwLnRoaWNrbmVzc01hcD9fPXAudGhpY2tuZXNzTWFwOnAuc2hlZW5Db2xvck1hcD9fPXAuc2hlZW5Db2xvck1hcDpwLnNoZWVuUm91Z2huZXNzTWFwJiYoXz1wLnNoZWVuUm91Z2huZXNzTWFwKSxfIT09dm9pZCAwJiYoXy5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoXz1fLnRleHR1cmUpLF8ubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZfLnVwZGF0ZU1hdHJpeCgpLG0udXZUcmFuc2Zvcm0udmFsdWUuY29weShfLm1hdHJpeCkpO2xldCBTO3AuYW9NYXA/Uz1wLmFvTWFwOnAubGlnaHRNYXAmJihTPXAubGlnaHRNYXApLFMhPT12b2lkIDAmJihTLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihTPVMudGV4dHVyZSksUy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJlMudXBkYXRlTWF0cml4KCksbS51djJUcmFuc2Zvcm0udmFsdWUuY29weShTLm1hdHJpeCkpfWZ1bmN0aW9uIHIobSxwKXttLmRpZmZ1c2UudmFsdWUuY29weShwLmNvbG9yKSxtLm9wYWNpdHkudmFsdWU9cC5vcGFjaXR5fWZ1bmN0aW9uIHMobSxwKXttLmRhc2hTaXplLnZhbHVlPXAuZGFzaFNpemUsbS50b3RhbFNpemUudmFsdWU9cC5kYXNoU2l6ZStwLmdhcFNpemUsbS5zY2FsZS52YWx1ZT1wLnNjYWxlfWZ1bmN0aW9uIG8obSxwLGIsXyl7bS5kaWZmdXNlLnZhbHVlLmNvcHkocC5jb2xvciksbS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eSxtLnNpemUudmFsdWU9cC5zaXplKmIsbS5zY2FsZS52YWx1ZT1fKi41LHAubWFwJiYobS5tYXAudmFsdWU9cC5tYXApLHAuYWxwaGFNYXAmJihtLmFscGhhTWFwLnZhbHVlPXAuYWxwaGFNYXApLHAuYWxwaGFUZXN0PjAmJihtLmFscGhhVGVzdC52YWx1ZT1wLmFscGhhVGVzdCk7bGV0IFM7cC5tYXA/Uz1wLm1hcDpwLmFscGhhTWFwJiYoUz1wLmFscGhhTWFwKSxTIT09dm9pZCAwJiYoUy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJlMudXBkYXRlTWF0cml4KCksbS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KFMubWF0cml4KSl9ZnVuY3Rpb24gYShtLHApe20uZGlmZnVzZS52YWx1ZS5jb3B5KHAuY29sb3IpLG0ub3BhY2l0eS52YWx1ZT1wLm9wYWNpdHksbS5yb3RhdGlvbi52YWx1ZT1wLnJvdGF0aW9uLHAubWFwJiYobS5tYXAudmFsdWU9cC5tYXApLHAuYWxwaGFNYXAmJihtLmFscGhhTWFwLnZhbHVlPXAuYWxwaGFNYXApLHAuYWxwaGFUZXN0PjAmJihtLmFscGhhVGVzdC52YWx1ZT1wLmFscGhhVGVzdCk7bGV0IGI7cC5tYXA/Yj1wLm1hcDpwLmFscGhhTWFwJiYoYj1wLmFscGhhTWFwKSxiIT09dm9pZCAwJiYoYi5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJmIudXBkYXRlTWF0cml4KCksbS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGIubWF0cml4KSl9ZnVuY3Rpb24gbChtLHApe3AuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApfWZ1bmN0aW9uIGMobSxwKXttLnNwZWN1bGFyLnZhbHVlLmNvcHkocC5zcGVjdWxhciksbS5zaGluaW5lc3MudmFsdWU9TWF0aC5tYXgocC5zaGluaW5lc3MsMWUtNCkscC5lbWlzc2l2ZU1hcCYmKG0uZW1pc3NpdmVNYXAudmFsdWU9cC5lbWlzc2l2ZU1hcCkscC5idW1wTWFwJiYobS5idW1wTWFwLnZhbHVlPXAuYnVtcE1hcCxtLmJ1bXBTY2FsZS52YWx1ZT1wLmJ1bXBTY2FsZSxwLnNpZGU9PT1oZSYmKG0uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHAubm9ybWFsTWFwJiYobS5ub3JtYWxNYXAudmFsdWU9cC5ub3JtYWxNYXAsbS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAubm9ybWFsU2NhbGUpLHAuc2lkZT09PWhlJiZtLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiB1KG0scCl7cC5ncmFkaWVudE1hcCYmKG0uZ3JhZGllbnRNYXAudmFsdWU9cC5ncmFkaWVudE1hcCkscC5lbWlzc2l2ZU1hcCYmKG0uZW1pc3NpdmVNYXAudmFsdWU9cC5lbWlzc2l2ZU1hcCkscC5idW1wTWFwJiYobS5idW1wTWFwLnZhbHVlPXAuYnVtcE1hcCxtLmJ1bXBTY2FsZS52YWx1ZT1wLmJ1bXBTY2FsZSxwLnNpZGU9PT1oZSYmKG0uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHAubm9ybWFsTWFwJiYobS5ub3JtYWxNYXAudmFsdWU9cC5ub3JtYWxNYXAsbS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAubm9ybWFsU2NhbGUpLHAuc2lkZT09PWhlJiZtLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBoKG0scCl7bS5yb3VnaG5lc3MudmFsdWU9cC5yb3VnaG5lc3MsbS5tZXRhbG5lc3MudmFsdWU9cC5tZXRhbG5lc3MscC5yb3VnaG5lc3NNYXAmJihtLnJvdWdobmVzc01hcC52YWx1ZT1wLnJvdWdobmVzc01hcCkscC5tZXRhbG5lc3NNYXAmJihtLm1ldGFsbmVzc01hcC52YWx1ZT1wLm1ldGFsbmVzc01hcCkscC5lbWlzc2l2ZU1hcCYmKG0uZW1pc3NpdmVNYXAudmFsdWU9cC5lbWlzc2l2ZU1hcCkscC5idW1wTWFwJiYobS5idW1wTWFwLnZhbHVlPXAuYnVtcE1hcCxtLmJ1bXBTY2FsZS52YWx1ZT1wLmJ1bXBTY2FsZSxwLnNpZGU9PT1oZSYmKG0uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHAubm9ybWFsTWFwJiYobS5ub3JtYWxNYXAudmFsdWU9cC5ub3JtYWxNYXAsbS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAubm9ybWFsU2NhbGUpLHAuc2lkZT09PWhlJiZtLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKSxuLmdldChwKS5lbnZNYXAmJihtLmVudk1hcEludGVuc2l0eS52YWx1ZT1wLmVudk1hcEludGVuc2l0eSl9ZnVuY3Rpb24gZihtLHAsYil7aChtLHApLG0uaW9yLnZhbHVlPXAuaW9yLHAuc2hlZW4+MCYmKG0uc2hlZW5Db2xvci52YWx1ZS5jb3B5KHAuc2hlZW5Db2xvcikubXVsdGlwbHlTY2FsYXIocC5zaGVlbiksbS5zaGVlblJvdWdobmVzcy52YWx1ZT1wLnNoZWVuUm91Z2huZXNzLHAuc2hlZW5Db2xvck1hcCYmKG0uc2hlZW5Db2xvck1hcC52YWx1ZT1wLnNoZWVuQ29sb3JNYXApLHAuc2hlZW5Sb3VnaG5lc3NNYXAmJihtLnNoZWVuUm91Z2huZXNzTWFwLnZhbHVlPXAuc2hlZW5Sb3VnaG5lc3NNYXApKSxwLmNsZWFyY29hdD4wJiYobS5jbGVhcmNvYXQudmFsdWU9cC5jbGVhcmNvYXQsbS5jbGVhcmNvYXRSb3VnaG5lc3MudmFsdWU9cC5jbGVhcmNvYXRSb3VnaG5lc3MscC5jbGVhcmNvYXRNYXAmJihtLmNsZWFyY29hdE1hcC52YWx1ZT1wLmNsZWFyY29hdE1hcCkscC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJihtLmNsZWFyY29hdFJvdWdobmVzc01hcC52YWx1ZT1wLmNsZWFyY29hdFJvdWdobmVzc01hcCkscC5jbGVhcmNvYXROb3JtYWxNYXAmJihtLmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLmNvcHkocC5jbGVhcmNvYXROb3JtYWxTY2FsZSksbS5jbGVhcmNvYXROb3JtYWxNYXAudmFsdWU9cC5jbGVhcmNvYXROb3JtYWxNYXAscC5zaWRlPT09aGUmJm0uY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpKSxwLnRyYW5zbWlzc2lvbj4wJiYobS50cmFuc21pc3Npb24udmFsdWU9cC50cmFuc21pc3Npb24sbS50cmFuc21pc3Npb25TYW1wbGVyTWFwLnZhbHVlPWIudGV4dHVyZSxtLnRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnZhbHVlLnNldChiLndpZHRoLGIuaGVpZ2h0KSxwLnRyYW5zbWlzc2lvbk1hcCYmKG0udHJhbnNtaXNzaW9uTWFwLnZhbHVlPXAudHJhbnNtaXNzaW9uTWFwKSxtLnRoaWNrbmVzcy52YWx1ZT1wLnRoaWNrbmVzcyxwLnRoaWNrbmVzc01hcCYmKG0udGhpY2tuZXNzTWFwLnZhbHVlPXAudGhpY2tuZXNzTWFwKSxtLmF0dGVudWF0aW9uRGlzdGFuY2UudmFsdWU9cC5hdHRlbnVhdGlvbkRpc3RhbmNlLG0uYXR0ZW51YXRpb25Db2xvci52YWx1ZS5jb3B5KHAuYXR0ZW51YXRpb25Db2xvcikpLG0uc3BlY3VsYXJJbnRlbnNpdHkudmFsdWU9cC5zcGVjdWxhckludGVuc2l0eSxtLnNwZWN1bGFyQ29sb3IudmFsdWUuY29weShwLnNwZWN1bGFyQ29sb3IpLHAuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJihtLnNwZWN1bGFySW50ZW5zaXR5TWFwLnZhbHVlPXAuc3BlY3VsYXJJbnRlbnNpdHlNYXApLHAuc3BlY3VsYXJDb2xvck1hcCYmKG0uc3BlY3VsYXJDb2xvck1hcC52YWx1ZT1wLnNwZWN1bGFyQ29sb3JNYXApfWZ1bmN0aW9uIGQobSxwKXtwLm1hdGNhcCYmKG0ubWF0Y2FwLnZhbHVlPXAubWF0Y2FwKSxwLmJ1bXBNYXAmJihtLmJ1bXBNYXAudmFsdWU9cC5idW1wTWFwLG0uYnVtcFNjYWxlLnZhbHVlPXAuYnVtcFNjYWxlLHAuc2lkZT09PWhlJiYobS5idW1wU2NhbGUudmFsdWUqPS0xKSkscC5ub3JtYWxNYXAmJihtLm5vcm1hbE1hcC52YWx1ZT1wLm5vcm1hbE1hcCxtLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkocC5ub3JtYWxTY2FsZSkscC5zaWRlPT09aGUmJm0ubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHAuZGlzcGxhY2VtZW50TWFwJiYobS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9cC5kaXNwbGFjZW1lbnRNYXAsbS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1wLmRpc3BsYWNlbWVudFNjYWxlLG0uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1wLmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGcobSxwKXtwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiB4KG0scCl7cC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50QmlhcyksbS5yZWZlcmVuY2VQb3NpdGlvbi52YWx1ZS5jb3B5KHAucmVmZXJlbmNlUG9zaXRpb24pLG0ubmVhckRpc3RhbmNlLnZhbHVlPXAubmVhckRpc3RhbmNlLG0uZmFyRGlzdGFuY2UudmFsdWU9cC5mYXJEaXN0YW5jZX1mdW5jdGlvbiB2KG0scCl7cC5idW1wTWFwJiYobS5idW1wTWFwLnZhbHVlPXAuYnVtcE1hcCxtLmJ1bXBTY2FsZS52YWx1ZT1wLmJ1bXBTY2FsZSxwLnNpZGU9PT1oZSYmKG0uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHAubm9ybWFsTWFwJiYobS5ub3JtYWxNYXAudmFsdWU9cC5ub3JtYWxNYXAsbS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAubm9ybWFsU2NhbGUpLHAuc2lkZT09PWhlJiZtLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKX1yZXR1cm57cmVmcmVzaEZvZ1VuaWZvcm1zOnQscmVmcmVzaE1hdGVyaWFsVW5pZm9ybXM6ZX19ZnVuY3Rpb24gSUUoKXtsZXQgbj1ybygiY2FudmFzIik7cmV0dXJuIG4uc3R5bGUuZGlzcGxheT0iYmxvY2siLG59ZnVuY3Rpb24gVnQobj17fSl7bGV0IHQ9bi5jYW52YXMhPT12b2lkIDA/bi5jYW52YXM6SUUoKSxlPW4uY29udGV4dCE9PXZvaWQgMD9uLmNvbnRleHQ6bnVsbCxpPW4uYWxwaGEhPT12b2lkIDA/bi5hbHBoYTohMSxyPW4uZGVwdGghPT12b2lkIDA/bi5kZXB0aDohMCxzPW4uc3RlbmNpbCE9PXZvaWQgMD9uLnN0ZW5jaWw6ITAsbz1uLmFudGlhbGlhcyE9PXZvaWQgMD9uLmFudGlhbGlhczohMSxhPW4ucHJlbXVsdGlwbGllZEFscGhhIT09dm9pZCAwP24ucHJlbXVsdGlwbGllZEFscGhhOiEwLGw9bi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIhPT12b2lkIDA/bi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEsYz1uLnBvd2VyUHJlZmVyZW5jZSE9PXZvaWQgMD9uLnBvd2VyUHJlZmVyZW5jZToiZGVmYXVsdCIsdT1uLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQhPT12b2lkIDA/bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiExLGg9bnVsbCxmPW51bGwsZD1bXSxnPVtdO3RoaXMuZG9tRWxlbWVudD10LHRoaXMuZGVidWc9e2NoZWNrU2hhZGVyRXJyb3JzOiEwfSx0aGlzLmF1dG9DbGVhcj0hMCx0aGlzLmF1dG9DbGVhckNvbG9yPSEwLHRoaXMuYXV0b0NsZWFyRGVwdGg9ITAsdGhpcy5hdXRvQ2xlYXJTdGVuY2lsPSEwLHRoaXMuc29ydE9iamVjdHM9ITAsdGhpcy5jbGlwcGluZ1BsYW5lcz1bXSx0aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkPSExLHRoaXMub3V0cHV0RW5jb2Rpbmc9cmksdGhpcy5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz0hMSx0aGlzLnRvbmVNYXBwaW5nPXRpLHRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZT0xO2xldCB4PXRoaXMsdj0hMSxtPTAscD0wLGI9bnVsbCxfPS0xLFM9bnVsbCxMPW5ldyBXdCxBPW5ldyBXdCxIPW51bGwsdHQ9dC53aWR0aCxYPXQuaGVpZ2h0LHk9MSxSPW51bGwsRD1udWxsLEY9bmV3IFd0KDAsMCx0dCxYKSx6PW5ldyBXdCgwLDAsdHQsWCksTj0hMSxWPW5ldyBxcixRPSExLGF0PSExLEc9bnVsbCwkPW5ldyB3dCxsdD1uZXcgVCxkdD17YmFja2dyb3VuZDpudWxsLGZvZzpudWxsLGVudmlyb25tZW50Om51bGwsb3ZlcnJpZGVNYXRlcmlhbDpudWxsLGlzU2NlbmU6ITB9O2Z1bmN0aW9uIHh0KCl7cmV0dXJuIGI9PT1udWxsP3k6MX1sZXQgaz1lO2Z1bmN0aW9uIEZ0KE0sSSl7Zm9yKGxldCBPPTA7TzxNLmxlbmd0aDtPKyspe2xldCBVPU1bT10sWj10LmdldENvbnRleHQoVSxJKTtpZihaIT09bnVsbClyZXR1cm4gWn1yZXR1cm4gbnVsbH10cnl7bGV0IE09e2FscGhhOiEwLGRlcHRoOnIsc3RlbmNpbDpzLGFudGlhbGlhczpvLHByZW11bHRpcGxpZWRBbHBoYTphLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpsLHBvd2VyUHJlZmVyZW5jZTpjLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dX07aWYoInNldEF0dHJpYnV0ZSJpbiB0JiZ0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbmdpbmUiLGB0aHJlZS5qcyByJHskaH1gKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEF0LCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixQLCExKSxrPT09bnVsbCl7bGV0IEk9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKHguaXNXZWJHTDFSZW5kZXJlcj09PSEwJiZJLnNoaWZ0KCksaz1GdChJLE0pLGs9PT1udWxsKXRocm93IEZ0KEkpP25ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dCB3aXRoIHlvdXIgc2VsZWN0ZWQgYXR0cmlidXRlcy4iKTpuZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQuIil9ay5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9PT12b2lkIDAmJihrLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdD1mdW5jdGlvbigpe3JldHVybntyYW5nZU1pbjoxLHJhbmdlTWF4OjEscHJlY2lzaW9uOjF9fSl9Y2F0Y2goTSl7dGhyb3cgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIitNLm1lc3NhZ2UpLE19bGV0IG10LFN0LEIsc3QsbnQsQyxqLEosaXQsZXQsdnQsYnQsSXQsWnQscXQsRSx3LHEscnQsZ3QsVyxfdCx5dDtmdW5jdGlvbiB1dCgpe210PW5ldyBlUyhrKSxTdD1uZXcgSjEoayxtdCxuKSxtdC5pbml0KFN0KSxfdD1uZXcgTEUoayxtdCxTdCksQj1uZXcgQ0UoayxtdCxTdCksc3Q9bmV3IHJTKGspLG50PW5ldyB4RSxDPW5ldyBSRShrLG10LEIsbnQsU3QsX3Qsc3QpLGo9bmV3IEsxKHgpLEo9bmV3IHRTKHgpLGl0PW5ldyB2TShrLFN0KSx5dD1uZXcgWTEoayxtdCxpdCxTdCksZXQ9bmV3IG5TKGssaXQsc3QseXQpLHZ0PW5ldyBsUyhrLGV0LGl0LHN0KSxydD1uZXcgYVMoayxTdCxDKSxFPW5ldyAkMShudCksYnQ9bmV3IGdFKHgsaixKLG10LFN0LHl0LEUpLEl0PW5ldyBERShudCksWnQ9bmV3IHZFLHF0PW5ldyBFRShtdCxTdCkscT1uZXcgWDEoeCxqLEIsdnQsaSxhKSx3PW5ldyBUMCh4LHZ0LFN0KSxndD1uZXcgWjEoayxtdCxzdCxTdCksVz1uZXcgaVMoayxtdCxzdCxTdCksc3QucHJvZ3JhbXM9YnQucHJvZ3JhbXMseC5jYXBhYmlsaXRpZXM9U3QseC5leHRlbnNpb25zPW10LHgucHJvcGVydGllcz1udCx4LnJlbmRlckxpc3RzPVp0LHguc2hhZG93TWFwPXcseC5zdGF0ZT1CLHguaW5mbz1zdH11dCgpO2xldCBjdD1uZXcgWnUoeCxrKTt0aGlzLnhyPWN0LHRoaXMuZ2V0Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBrfSx0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGsuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX0sdGhpcy5mb3JjZUNvbnRleHRMb3NzPWZ1bmN0aW9uKCl7bGV0IE09bXQuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtNJiZNLmxvc2VDb250ZXh0KCl9LHRoaXMuZm9yY2VDb250ZXh0UmVzdG9yZT1mdW5jdGlvbigpe2xldCBNPW10LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7TSYmTS5yZXN0b3JlQ29udGV4dCgpfSx0aGlzLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXtyZXR1cm4geX0sdGhpcy5zZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKE0pe00hPT12b2lkIDAmJih5PU0sdGhpcy5zZXRTaXplKHR0LFgsITEpKX0sdGhpcy5nZXRTaXplPWZ1bmN0aW9uKE0pe3JldHVybiBNLnNldCh0dCxYKX0sdGhpcy5zZXRTaXplPWZ1bmN0aW9uKE0sSSxPKXtpZihjdC5pc1ByZXNlbnRpbmcpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ2FuJ3QgY2hhbmdlIHNpemUgd2hpbGUgVlIgZGV2aWNlIGlzIHByZXNlbnRpbmcuIik7cmV0dXJufXR0PU0sWD1JLHQud2lkdGg9TWF0aC5mbG9vcihNKnkpLHQuaGVpZ2h0PU1hdGguZmxvb3IoSSp5KSxPIT09ITEmJih0LnN0eWxlLndpZHRoPU0rInB4Iix0LnN0eWxlLmhlaWdodD1JKyJweCIpLHRoaXMuc2V0Vmlld3BvcnQoMCwwLE0sSSl9LHRoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oTSl7cmV0dXJuIE0uc2V0KHR0KnksWCp5KS5mbG9vcigpfSx0aGlzLnNldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKE0sSSxPKXt0dD1NLFg9SSx5PU8sdC53aWR0aD1NYXRoLmZsb29yKE0qTyksdC5oZWlnaHQ9TWF0aC5mbG9vcihJKk8pLHRoaXMuc2V0Vmlld3BvcnQoMCwwLE0sSSl9LHRoaXMuZ2V0Q3VycmVudFZpZXdwb3J0PWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkoTCl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24oTSl7cmV0dXJuIE0uY29weShGKX0sdGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbihNLEksTyxVKXtNLmlzVmVjdG9yND9GLnNldChNLngsTS55LE0ueixNLncpOkYuc2V0KE0sSSxPLFUpLEIudmlld3BvcnQoTC5jb3B5KEYpLm11bHRpcGx5U2NhbGFyKHkpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24oTSl7cmV0dXJuIE0uY29weSh6KX0sdGhpcy5zZXRTY2lzc29yPWZ1bmN0aW9uKE0sSSxPLFUpe00uaXNWZWN0b3I0P3ouc2V0KE0ueCxNLnksTS56LE0udyk6ei5zZXQoTSxJLE8sVSksQi5zY2lzc29yKEEuY29weSh6KS5tdWx0aXBseVNjYWxhcih5KS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yVGVzdD1mdW5jdGlvbigpe3JldHVybiBOfSx0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKE0pe0Iuc2V0U2Npc3NvclRlc3QoTj1NKX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKE0pe1I9TX0sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24oTSl7RD1NfSx0aGlzLmdldENsZWFyQ29sb3I9ZnVuY3Rpb24oTSl7cmV0dXJuIE0uY29weShxLmdldENsZWFyQ29sb3IoKSl9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe3Euc2V0Q2xlYXJDb2xvci5hcHBseShxLGFyZ3VtZW50cyl9LHRoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBxLmdldENsZWFyQWxwaGEoKX0sdGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cS5zZXRDbGVhckFscGhhLmFwcGx5KHEsYXJndW1lbnRzKX0sdGhpcy5jbGVhcj1mdW5jdGlvbihNLEksTyl7bGV0IFU9MDsoTT09PXZvaWQgMHx8TSkmJihVfD0xNjM4NCksKEk9PT12b2lkIDB8fEkpJiYoVXw9MjU2KSwoTz09PXZvaWQgMHx8TykmJihVfD0xMDI0KSxrLmNsZWFyKFUpfSx0aGlzLmNsZWFyQ29sb3I9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCEwLCExLCExKX0sdGhpcy5jbGVhckRlcHRoPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMCwhMSl9LHRoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsQXQsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLFAsITEpLFp0LmRpc3Bvc2UoKSxxdC5kaXNwb3NlKCksbnQuZGlzcG9zZSgpLGouZGlzcG9zZSgpLEouZGlzcG9zZSgpLHZ0LmRpc3Bvc2UoKSx5dC5kaXNwb3NlKCksYnQuZGlzcG9zZSgpLGN0LmRpc3Bvc2UoKSxjdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLER0KSxjdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixqdCksRyYmKEcuZGlzcG9zZSgpLEc9bnVsbCksemUuc3RvcCgpfTtmdW5jdGlvbiBBdChNKXtNLnByZXZlbnREZWZhdWx0KCksY29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgTG9zdC4iKSx2PSEwfWZ1bmN0aW9uIFAoKXtjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBSZXN0b3JlZC4iKSx2PSExO2xldCBNPXN0LmF1dG9SZXNldCxJPXcuZW5hYmxlZCxPPXcuYXV0b1VwZGF0ZSxVPXcubmVlZHNVcGRhdGUsWj13LnR5cGU7dXQoKSxzdC5hdXRvUmVzZXQ9TSx3LmVuYWJsZWQ9SSx3LmF1dG9VcGRhdGU9Tyx3Lm5lZWRzVXBkYXRlPVUsdy50eXBlPVp9ZnVuY3Rpb24gcHQoTSl7bGV0IEk9TS50YXJnZXQ7SS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixwdCksaHQoSSl9ZnVuY3Rpb24gaHQoTSl7RXQoTSksbnQucmVtb3ZlKE0pfWZ1bmN0aW9uIEV0KE0pe2xldCBJPW50LmdldChNKS5wcm9ncmFtcztJIT09dm9pZCAwJiYoSS5mb3JFYWNoKGZ1bmN0aW9uKE8pe2J0LnJlbGVhc2VQcm9ncmFtKE8pfSksTS5pc1NoYWRlck1hdGVyaWFsJiZidC5yZWxlYXNlU2hhZGVyQ2FjaGUoTSkpfXRoaXMucmVuZGVyQnVmZmVyRGlyZWN0PWZ1bmN0aW9uKE0sSSxPLFUsWixUdCl7ST09PW51bGwmJihJPWR0KTtsZXQgQ3Q9Wi5pc01lc2gmJloubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKTwwLEx0PUIwKE0sSSxPLFUsWik7Qi5zZXRNYXRlcmlhbChVLEN0KTtsZXQgUnQ9Ty5pbmRleCxHdD1PLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoUnQ9PT1udWxsKXtpZihHdD09PXZvaWQgMHx8R3QuY291bnQ9PT0wKXJldHVybn1lbHNlIGlmKFJ0LmNvdW50PT09MClyZXR1cm47bGV0IHp0PTE7VS53aXJlZnJhbWU9PT0hMCYmKFJ0PWV0LmdldFdpcmVmcmFtZUF0dHJpYnV0ZShPKSx6dD0yKSx5dC5zZXR1cChaLFUsTHQsTyxSdCk7bGV0IFV0LGllPWd0O1J0IT09bnVsbCYmKFV0PWl0LmdldChSdCksaWU9VyxpZS5zZXRJbmRleChVdCkpO2xldCBmaT1SdCE9PW51bGw/UnQuY291bnQ6R3QuY291bnQsWmk9Ty5kcmF3UmFuZ2Uuc3RhcnQqenQsT3Q9Ty5kcmF3UmFuZ2UuY291bnQqenQsbm49VHQhPT1udWxsP1R0LnN0YXJ0Knp0OjAsbGU9VHQhPT1udWxsP1R0LmNvdW50Knp0OjEvMCxybj1NYXRoLm1heChaaSxubiksSW89TWF0aC5taW4oZmksWmkrT3Qsbm4rbGUpLTEsc249TWF0aC5tYXgoMCxJby1ybisxKTtpZihzbiE9PTApe2lmKFouaXNNZXNoKVUud2lyZWZyYW1lPT09ITA/KEIuc2V0TGluZVdpZHRoKFUud2lyZWZyYW1lTGluZXdpZHRoKnh0KCkpLGllLnNldE1vZGUoMSkpOmllLnNldE1vZGUoNCk7ZWxzZSBpZihaLmlzTGluZSl7bGV0IHZuPVUubGluZXdpZHRoO3ZuPT09dm9pZCAwJiYodm49MSksQi5zZXRMaW5lV2lkdGgodm4qeHQoKSksWi5pc0xpbmVTZWdtZW50cz9pZS5zZXRNb2RlKDEpOlouaXNMaW5lTG9vcD9pZS5zZXRNb2RlKDIpOmllLnNldE1vZGUoMyl9ZWxzZSBaLmlzUG9pbnRzP2llLnNldE1vZGUoMCk6Wi5pc1Nwcml0ZSYmaWUuc2V0TW9kZSg0KTtpZihaLmlzSW5zdGFuY2VkTWVzaClpZS5yZW5kZXJJbnN0YW5jZXMocm4sc24sWi5jb3VudCk7ZWxzZSBpZihPLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpe2xldCB2bj1NYXRoLm1pbihPLmluc3RhbmNlQ291bnQsTy5fbWF4SW5zdGFuY2VDb3VudCk7aWUucmVuZGVySW5zdGFuY2VzKHJuLHNuLHZuKX1lbHNlIGllLnJlbmRlcihybixzbil9fSx0aGlzLmNvbXBpbGU9ZnVuY3Rpb24oTSxJKXtmPXF0LmdldChNKSxmLmluaXQoKSxnLnB1c2goZiksTS50cmF2ZXJzZVZpc2libGUoZnVuY3Rpb24oTyl7Ty5pc0xpZ2h0JiZPLmxheWVycy50ZXN0KEkubGF5ZXJzKSYmKGYucHVzaExpZ2h0KE8pLE8uY2FzdFNoYWRvdyYmZi5wdXNoU2hhZG93KE8pKX0pLGYuc2V0dXBMaWdodHMoeC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyksTS50cmF2ZXJzZShmdW5jdGlvbihPKXtsZXQgVT1PLm1hdGVyaWFsO2lmKFUpaWYoQXJyYXkuaXNBcnJheShVKSlmb3IobGV0IFo9MDtaPFUubGVuZ3RoO1orKyl7bGV0IFR0PVVbWl07T2woVHQsTSxPKX1lbHNlIE9sKFUsTSxPKX0pLGcucG9wKCksZj1udWxsfTtsZXQgWT1udWxsO2Z1bmN0aW9uIE10KE0pe1kmJlkoTSl9ZnVuY3Rpb24gRHQoKXt6ZS5zdG9wKCl9ZnVuY3Rpb24ganQoKXt6ZS5zdGFydCgpfWxldCB6ZT1uZXcgZzA7emUuc2V0QW5pbWF0aW9uTG9vcChNdCksdHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJnplLnNldENvbnRleHQod2luZG93KSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24oTSl7WT1NLGN0LnNldEFuaW1hdGlvbkxvb3AoTSksTT09PW51bGw/emUuc3RvcCgpOnplLnN0YXJ0KCl9LGN0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsRHQpLGN0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLGp0KSx0aGlzLnJlbmRlcj1mdW5jdGlvbihNLEkpe2lmKEkhPT12b2lkIDAmJkkuaXNDYW1lcmEhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXI6IGNhbWVyYSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQ2FtZXJhLiIpO3JldHVybn1pZih2PT09ITApcmV0dXJuO00uYXV0b1VwZGF0ZT09PSEwJiZNLnVwZGF0ZU1hdHJpeFdvcmxkKCksSS5wYXJlbnQ9PT1udWxsJiZJLnVwZGF0ZU1hdHJpeFdvcmxkKCksY3QuZW5hYmxlZD09PSEwJiZjdC5pc1ByZXNlbnRpbmc9PT0hMCYmKGN0LmNhbWVyYUF1dG9VcGRhdGU9PT0hMCYmY3QudXBkYXRlQ2FtZXJhKEkpLEk9Y3QuZ2V0Q2FtZXJhKCkpLE0uaXNTY2VuZT09PSEwJiZNLm9uQmVmb3JlUmVuZGVyKHgsTSxJLGIpLGY9cXQuZ2V0KE0sZy5sZW5ndGgpLGYuaW5pdCgpLGcucHVzaChmKSwkLm11bHRpcGx5TWF0cmljZXMoSS5wcm9qZWN0aW9uTWF0cml4LEkubWF0cml4V29ybGRJbnZlcnNlKSxWLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCQpLGF0PXRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQsUT1FLmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxhdCxJKSxoPVp0LmdldChNLGQubGVuZ3RoKSxoLmluaXQoKSxkLnB1c2goaCksbmUoTSxJLDAseC5zb3J0T2JqZWN0cyksaC5maW5pc2goKSx4LnNvcnRPYmplY3RzPT09ITAmJmguc29ydChSLEQpLFE9PT0hMCYmRS5iZWdpblNoYWRvd3MoKTtsZXQgTz1mLnN0YXRlLnNoYWRvd3NBcnJheTtpZih3LnJlbmRlcihPLE0sSSksUT09PSEwJiZFLmVuZFNoYWRvd3MoKSx0aGlzLmluZm8uYXV0b1Jlc2V0PT09ITAmJnRoaXMuaW5mby5yZXNldCgpLHEucmVuZGVyKGgsTSksZi5zZXR1cExpZ2h0cyh4LnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSxJLmlzQXJyYXlDYW1lcmEpe2xldCBVPUkuY2FtZXJhcztmb3IobGV0IFo9MCxUdD1VLmxlbmd0aDtaPFR0O1orKyl7bGV0IEN0PVVbWl07ZW4oaCxNLEN0LEN0LnZpZXdwb3J0KX19ZWxzZSBlbihoLE0sSSk7YiE9PW51bGwmJihDLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KGIpLEMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGIpKSxNLmlzU2NlbmU9PT0hMCYmTS5vbkFmdGVyUmVuZGVyKHgsTSxJKSxCLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksQi5idWZmZXJzLmRlcHRoLnNldE1hc2soITApLEIuYnVmZmVycy5jb2xvci5zZXRNYXNrKCEwKSxCLnNldFBvbHlnb25PZmZzZXQoITEpLHl0LnJlc2V0RGVmYXVsdFN0YXRlKCksXz0tMSxTPW51bGwsZy5wb3AoKSxnLmxlbmd0aD4wP2Y9Z1tnLmxlbmd0aC0xXTpmPW51bGwsZC5wb3AoKSxkLmxlbmd0aD4wP2g9ZFtkLmxlbmd0aC0xXTpoPW51bGx9O2Z1bmN0aW9uIG5lKE0sSSxPLFUpe2lmKE0udmlzaWJsZT09PSExKXJldHVybjtpZihNLmxheWVycy50ZXN0KEkubGF5ZXJzKSl7aWYoTS5pc0dyb3VwKU89TS5yZW5kZXJPcmRlcjtlbHNlIGlmKE0uaXNMT0QpTS5hdXRvVXBkYXRlPT09ITAmJk0udXBkYXRlKEkpO2Vsc2UgaWYoTS5pc0xpZ2h0KWYucHVzaExpZ2h0KE0pLE0uY2FzdFNoYWRvdyYmZi5wdXNoU2hhZG93KE0pO2Vsc2UgaWYoTS5pc1Nwcml0ZSl7aWYoIU0uZnJ1c3R1bUN1bGxlZHx8Vi5pbnRlcnNlY3RzU3ByaXRlKE0pKXtVJiZsdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oTS5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KCQpO2xldCBDdD12dC51cGRhdGUoTSksTHQ9TS5tYXRlcmlhbDtMdC52aXNpYmxlJiZoLnB1c2goTSxDdCxMdCxPLGx0LnosbnVsbCl9fWVsc2UgaWYoKE0uaXNNZXNofHxNLmlzTGluZXx8TS5pc1BvaW50cykmJihNLmlzU2tpbm5lZE1lc2gmJk0uc2tlbGV0b24uZnJhbWUhPT1zdC5yZW5kZXIuZnJhbWUmJihNLnNrZWxldG9uLnVwZGF0ZSgpLE0uc2tlbGV0b24uZnJhbWU9c3QucmVuZGVyLmZyYW1lKSwhTS5mcnVzdHVtQ3VsbGVkfHxWLmludGVyc2VjdHNPYmplY3QoTSkpKXtVJiZsdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oTS5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KCQpO2xldCBDdD12dC51cGRhdGUoTSksTHQ9TS5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KEx0KSl7bGV0IFJ0PUN0Lmdyb3Vwcztmb3IobGV0IEd0PTAsenQ9UnQubGVuZ3RoO0d0PHp0O0d0Kyspe2xldCBVdD1SdFtHdF0saWU9THRbVXQubWF0ZXJpYWxJbmRleF07aWUmJmllLnZpc2libGUmJmgucHVzaChNLEN0LGllLE8sbHQueixVdCl9fWVsc2UgTHQudmlzaWJsZSYmaC5wdXNoKE0sQ3QsTHQsTyxsdC56LG51bGwpfX1sZXQgVHQ9TS5jaGlsZHJlbjtmb3IobGV0IEN0PTAsTHQ9VHQubGVuZ3RoO0N0PEx0O0N0KyspbmUoVHRbQ3RdLEksTyxVKX1mdW5jdGlvbiBlbihNLEksTyxVKXtsZXQgWj1NLm9wYXF1ZSxUdD1NLnRyYW5zbWlzc2l2ZSxDdD1NLnRyYW5zcGFyZW50O2Yuc2V0dXBMaWdodHNWaWV3KE8pLFR0Lmxlbmd0aD4wJiZ5bihaLEksTyksVSYmQi52aWV3cG9ydChMLmNvcHkoVSkpLFoubGVuZ3RoPjAmJkRvKFosSSxPKSxUdC5sZW5ndGg+MCYmRG8oVHQsSSxPKSxDdC5sZW5ndGg+MCYmRG8oQ3QsSSxPKX1mdW5jdGlvbiB5bihNLEksTyl7aWYoRz09PW51bGwpe2xldCBDdD1vPT09ITAmJlN0LmlzV2ViR0wyPT09ITA/c286TmU7Rz1uZXcgQ3QoMTAyNCwxMDI0LHtnZW5lcmF0ZU1pcG1hcHM6ITAsdHlwZTpfdC5jb252ZXJ0KFVyKSE9PW51bGw/VXI6ZWksbWluRmlsdGVyOkxsLG1hZ0ZpbHRlcjpmZSx3cmFwUzpWZSx3cmFwVDpWZSx1c2VSZW5kZXJUb1RleHR1cmU6bXQuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0pfWxldCBVPXguZ2V0UmVuZGVyVGFyZ2V0KCk7eC5zZXRSZW5kZXJUYXJnZXQoRykseC5jbGVhcigpO2xldCBaPXgudG9uZU1hcHBpbmc7eC50b25lTWFwcGluZz10aSxEbyhNLEksTykseC50b25lTWFwcGluZz1aLEMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoRyksQy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoRykseC5zZXRSZW5kZXJUYXJnZXQoVSl9ZnVuY3Rpb24gRG8oTSxJLE8pe2xldCBVPUkuaXNTY2VuZT09PSEwP0kub3ZlcnJpZGVNYXRlcmlhbDpudWxsO2ZvcihsZXQgWj0wLFR0PU0ubGVuZ3RoO1o8VHQ7WisrKXtsZXQgQ3Q9TVtaXSxMdD1DdC5vYmplY3QsUnQ9Q3QuZ2VvbWV0cnksR3Q9VT09PW51bGw/Q3QubWF0ZXJpYWw6VSx6dD1DdC5ncm91cDtMdC5sYXllcnMudGVzdChPLmxheWVycykmJlUwKEx0LEksTyxSdCxHdCx6dCl9fWZ1bmN0aW9uIFUwKE0sSSxPLFUsWixUdCl7TS5vbkJlZm9yZVJlbmRlcih4LEksTyxVLFosVHQpLE0ubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoTy5tYXRyaXhXb3JsZEludmVyc2UsTS5tYXRyaXhXb3JsZCksTS5ub3JtYWxNYXRyaXguZ2V0Tm9ybWFsTWF0cml4KE0ubW9kZWxWaWV3TWF0cml4KSxaLm9uQmVmb3JlUmVuZGVyKHgsSSxPLFUsTSxUdCksWi50cmFuc3BhcmVudD09PSEwJiZaLnNpZGU9PT1Icj8oWi5zaWRlPWhlLFoubmVlZHNVcGRhdGU9ITAseC5yZW5kZXJCdWZmZXJEaXJlY3QoTyxJLFUsWixNLFR0KSxaLnNpZGU9ZW8sWi5uZWVkc1VwZGF0ZT0hMCx4LnJlbmRlckJ1ZmZlckRpcmVjdChPLEksVSxaLE0sVHQpLFouc2lkZT1Icik6eC5yZW5kZXJCdWZmZXJEaXJlY3QoTyxJLFUsWixNLFR0KSxNLm9uQWZ0ZXJSZW5kZXIoeCxJLE8sVSxaLFR0KX1mdW5jdGlvbiBPbChNLEksTyl7SS5pc1NjZW5lIT09ITAmJihJPWR0KTtsZXQgVT1udC5nZXQoTSksWj1mLnN0YXRlLmxpZ2h0cyxUdD1mLnN0YXRlLnNoYWRvd3NBcnJheSxDdD1aLnN0YXRlLnZlcnNpb24sTHQ9YnQuZ2V0UGFyYW1ldGVycyhNLFouc3RhdGUsVHQsSSxPKSxSdD1idC5nZXRQcm9ncmFtQ2FjaGVLZXkoTHQpLEd0PVUucHJvZ3JhbXM7VS5lbnZpcm9ubWVudD1NLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SS5lbnZpcm9ubWVudDpudWxsLFUuZm9nPUkuZm9nLFUuZW52TWFwPShNLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SjpqKS5nZXQoTS5lbnZNYXB8fFUuZW52aXJvbm1lbnQpLEd0PT09dm9pZCAwJiYoTS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixwdCksR3Q9bmV3IE1hcCxVLnByb2dyYW1zPUd0KTtsZXQgenQ9R3QuZ2V0KFJ0KTtpZih6dCE9PXZvaWQgMCl7aWYoVS5jdXJyZW50UHJvZ3JhbT09PXp0JiZVLmxpZ2h0c1N0YXRlVmVyc2lvbj09PUN0KXJldHVybiBvZihNLEx0KSx6dH1lbHNlIEx0LnVuaWZvcm1zPWJ0LmdldFVuaWZvcm1zKE0pLE0ub25CdWlsZChPLEx0LHgpLE0ub25CZWZvcmVDb21waWxlKEx0LHgpLHp0PWJ0LmFjcXVpcmVQcm9ncmFtKEx0LFJ0KSxHdC5zZXQoUnQsenQpLFUudW5pZm9ybXM9THQudW5pZm9ybXM7bGV0IFV0PVUudW5pZm9ybXM7KCFNLmlzU2hhZGVyTWF0ZXJpYWwmJiFNLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fE0uY2xpcHBpbmc9PT0hMCkmJihVdC5jbGlwcGluZ1BsYW5lcz1FLnVuaWZvcm0pLG9mKE0sTHQpLFUubmVlZHNMaWdodHM9azAoTSksVS5saWdodHNTdGF0ZVZlcnNpb249Q3QsVS5uZWVkc0xpZ2h0cyYmKFV0LmFtYmllbnRMaWdodENvbG9yLnZhbHVlPVouc3RhdGUuYW1iaWVudCxVdC5saWdodFByb2JlLnZhbHVlPVouc3RhdGUucHJvYmUsVXQuZGlyZWN0aW9uYWxMaWdodHMudmFsdWU9Wi5zdGF0ZS5kaXJlY3Rpb25hbCxVdC5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy52YWx1ZT1aLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LFV0LnNwb3RMaWdodHMudmFsdWU9Wi5zdGF0ZS5zcG90LFV0LnNwb3RMaWdodFNoYWRvd3MudmFsdWU9Wi5zdGF0ZS5zcG90U2hhZG93LFV0LnJlY3RBcmVhTGlnaHRzLnZhbHVlPVouc3RhdGUucmVjdEFyZWEsVXQubHRjXzEudmFsdWU9Wi5zdGF0ZS5yZWN0QXJlYUxUQzEsVXQubHRjXzIudmFsdWU9Wi5zdGF0ZS5yZWN0QXJlYUxUQzIsVXQucG9pbnRMaWdodHMudmFsdWU9Wi5zdGF0ZS5wb2ludCxVdC5wb2ludExpZ2h0U2hhZG93cy52YWx1ZT1aLnN0YXRlLnBvaW50U2hhZG93LFV0LmhlbWlzcGhlcmVMaWdodHMudmFsdWU9Wi5zdGF0ZS5oZW1pLFV0LmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPVouc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsVXQuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9Wi5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeCxVdC5zcG90U2hhZG93TWFwLnZhbHVlPVouc3RhdGUuc3BvdFNoYWRvd01hcCxVdC5zcG90U2hhZG93TWF0cml4LnZhbHVlPVouc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxVdC5wb2ludFNoYWRvd01hcC52YWx1ZT1aLnN0YXRlLnBvaW50U2hhZG93TWFwLFV0LnBvaW50U2hhZG93TWF0cml4LnZhbHVlPVouc3RhdGUucG9pbnRTaGFkb3dNYXRyaXgpO2xldCBpZT16dC5nZXRVbmlmb3JtcygpLGZpPWlpLnNlcVdpdGhWYWx1ZShpZS5zZXEsVXQpO3JldHVybiBVLmN1cnJlbnRQcm9ncmFtPXp0LFUudW5pZm9ybXNMaXN0PWZpLHp0fWZ1bmN0aW9uIG9mKE0sSSl7bGV0IE89bnQuZ2V0KE0pO08ub3V0cHV0RW5jb2Rpbmc9SS5vdXRwdXRFbmNvZGluZyxPLmluc3RhbmNpbmc9SS5pbnN0YW5jaW5nLE8uc2tpbm5pbmc9SS5za2lubmluZyxPLm1vcnBoVGFyZ2V0cz1JLm1vcnBoVGFyZ2V0cyxPLm1vcnBoTm9ybWFscz1JLm1vcnBoTm9ybWFscyxPLm1vcnBoVGFyZ2V0c0NvdW50PUkubW9ycGhUYXJnZXRzQ291bnQsTy5udW1DbGlwcGluZ1BsYW5lcz1JLm51bUNsaXBwaW5nUGxhbmVzLE8ubnVtSW50ZXJzZWN0aW9uPUkubnVtQ2xpcEludGVyc2VjdGlvbixPLnZlcnRleEFscGhhcz1JLnZlcnRleEFscGhhcyxPLnZlcnRleFRhbmdlbnRzPUkudmVydGV4VGFuZ2VudHMsTy50b25lTWFwcGluZz1JLnRvbmVNYXBwaW5nfWZ1bmN0aW9uIEIwKE0sSSxPLFUsWil7SS5pc1NjZW5lIT09ITAmJihJPWR0KSxDLnJlc2V0VGV4dHVyZVVuaXRzKCk7bGV0IFR0PUkuZm9nLEN0PVUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9JLmVudmlyb25tZW50Om51bGwsTHQ9Yj09PW51bGw/eC5vdXRwdXRFbmNvZGluZzpiLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9iLnRleHR1cmUuZW5jb2Rpbmc6cmksUnQ9KFUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9KOmopLmdldChVLmVudk1hcHx8Q3QpLEd0PVUudmVydGV4Q29sb3JzPT09ITAmJiEhTy5hdHRyaWJ1dGVzLmNvbG9yJiZPLmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemU9PT00LHp0PSEhVS5ub3JtYWxNYXAmJiEhTy5hdHRyaWJ1dGVzLnRhbmdlbnQsVXQ9ISFPLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixpZT0hIU8ubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxmaT1PLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj9PLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg6MCxaaT1VLnRvbmVNYXBwZWQ/eC50b25lTWFwcGluZzp0aSxPdD1udC5nZXQoVSksbm49Zi5zdGF0ZS5saWdodHM7aWYoUT09PSEwJiYoYXQ9PT0hMHx8TSE9PVMpKXtsZXQgWmU9TT09PVMmJlUuaWQ9PT1fO0Uuc2V0U3RhdGUoVSxNLFplKX1sZXQgbGU9ITE7VS52ZXJzaW9uPT09T3QuX192ZXJzaW9uPyhPdC5uZWVkc0xpZ2h0cyYmT3QubGlnaHRzU3RhdGVWZXJzaW9uIT09bm4uc3RhdGUudmVyc2lvbnx8T3Qub3V0cHV0RW5jb2RpbmchPT1MdHx8Wi5pc0luc3RhbmNlZE1lc2gmJk90Lmluc3RhbmNpbmc9PT0hMXx8IVouaXNJbnN0YW5jZWRNZXNoJiZPdC5pbnN0YW5jaW5nPT09ITB8fFouaXNTa2lubmVkTWVzaCYmT3Quc2tpbm5pbmc9PT0hMXx8IVouaXNTa2lubmVkTWVzaCYmT3Quc2tpbm5pbmc9PT0hMHx8T3QuZW52TWFwIT09UnR8fFUuZm9nJiZPdC5mb2chPT1UdHx8T3QubnVtQ2xpcHBpbmdQbGFuZXMhPT12b2lkIDAmJihPdC5udW1DbGlwcGluZ1BsYW5lcyE9PUUubnVtUGxhbmVzfHxPdC5udW1JbnRlcnNlY3Rpb24hPT1FLm51bUludGVyc2VjdGlvbil8fE90LnZlcnRleEFscGhhcyE9PUd0fHxPdC52ZXJ0ZXhUYW5nZW50cyE9PXp0fHxPdC5tb3JwaFRhcmdldHMhPT1VdHx8T3QubW9ycGhOb3JtYWxzIT09aWV8fE90LnRvbmVNYXBwaW5nIT09Wml8fFN0LmlzV2ViR0wyPT09ITAmJk90Lm1vcnBoVGFyZ2V0c0NvdW50IT09ZmkpJiYobGU9ITApOihsZT0hMCxPdC5fX3ZlcnNpb249VS52ZXJzaW9uKTtsZXQgcm49T3QuY3VycmVudFByb2dyYW07bGU9PT0hMCYmKHJuPU9sKFUsSSxaKSk7bGV0IElvPSExLHNuPSExLHZuPSExLF9lPXJuLmdldFVuaWZvcm1zKCksbnM9T3QudW5pZm9ybXM7aWYoQi51c2VQcm9ncmFtKHJuLnByb2dyYW0pJiYoSW89ITAsc249ITAsdm49ITApLFUuaWQhPT1fJiYoXz1VLmlkLHNuPSEwKSxJb3x8UyE9PU0pe2lmKF9lLnNldFZhbHVlKGssInByb2plY3Rpb25NYXRyaXgiLE0ucHJvamVjdGlvbk1hdHJpeCksU3QubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmX2Uuc2V0VmFsdWUoaywibG9nRGVwdGhCdWZGQyIsMi8oTWF0aC5sb2coTS5mYXIrMSkvTWF0aC5MTjIpKSxTIT09TSYmKFM9TSxzbj0hMCx2bj0hMCksVS5pc1NoYWRlck1hdGVyaWFsfHxVLmlzTWVzaFBob25nTWF0ZXJpYWx8fFUuaXNNZXNoVG9vbk1hdGVyaWFsfHxVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFUuZW52TWFwKXtsZXQgWmU9X2UubWFwLmNhbWVyYVBvc2l0aW9uO1plIT09dm9pZCAwJiZaZS5zZXRWYWx1ZShrLGx0LnNldEZyb21NYXRyaXhQb3NpdGlvbihNLm1hdHJpeFdvcmxkKSl9KFUuaXNNZXNoUGhvbmdNYXRlcmlhbHx8VS5pc01lc2hUb29uTWF0ZXJpYWx8fFUuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxVLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fFUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8VS5pc1NoYWRlck1hdGVyaWFsKSYmX2Uuc2V0VmFsdWUoaywiaXNPcnRob2dyYXBoaWMiLE0uaXNPcnRob2dyYXBoaWNDYW1lcmE9PT0hMCksKFUuaXNNZXNoUGhvbmdNYXRlcmlhbHx8VS5pc01lc2hUb29uTWF0ZXJpYWx8fFUuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxVLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fFUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8VS5pc1NoYWRlck1hdGVyaWFsfHxVLmlzU2hhZG93TWF0ZXJpYWx8fFouaXNTa2lubmVkTWVzaCkmJl9lLnNldFZhbHVlKGssInZpZXdNYXRyaXgiLE0ubWF0cml4V29ybGRJbnZlcnNlKX1pZihaLmlzU2tpbm5lZE1lc2gpe19lLnNldE9wdGlvbmFsKGssWiwiYmluZE1hdHJpeCIpLF9lLnNldE9wdGlvbmFsKGssWiwiYmluZE1hdHJpeEludmVyc2UiKTtsZXQgWmU9Wi5za2VsZXRvbjtaZSYmKFN0LmZsb2F0VmVydGV4VGV4dHVyZXM/KFplLmJvbmVUZXh0dXJlPT09bnVsbCYmWmUuY29tcHV0ZUJvbmVUZXh0dXJlKCksX2Uuc2V0VmFsdWUoaywiYm9uZVRleHR1cmUiLFplLmJvbmVUZXh0dXJlLEMpLF9lLnNldFZhbHVlKGssImJvbmVUZXh0dXJlU2l6ZSIsWmUuYm9uZVRleHR1cmVTaXplKSk6X2Uuc2V0T3B0aW9uYWwoayxaZSwiYm9uZU1hdHJpY2VzIikpfXJldHVybiEhTyYmKE8ubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uIT09dm9pZCAwfHxPLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwhPT12b2lkIDApJiZydC51cGRhdGUoWixPLFUscm4pLChzbnx8T3QucmVjZWl2ZVNoYWRvdyE9PVoucmVjZWl2ZVNoYWRvdykmJihPdC5yZWNlaXZlU2hhZG93PVoucmVjZWl2ZVNoYWRvdyxfZS5zZXRWYWx1ZShrLCJyZWNlaXZlU2hhZG93IixaLnJlY2VpdmVTaGFkb3cpKSxzbiYmKF9lLnNldFZhbHVlKGssInRvbmVNYXBwaW5nRXhwb3N1cmUiLHgudG9uZU1hcHBpbmdFeHBvc3VyZSksT3QubmVlZHNMaWdodHMmJk8wKG5zLHZuKSxUdCYmVS5mb2cmJkl0LnJlZnJlc2hGb2dVbmlmb3JtcyhucyxUdCksSXQucmVmcmVzaE1hdGVyaWFsVW5pZm9ybXMobnMsVSx5LFgsRyksaWkudXBsb2FkKGssT3QudW5pZm9ybXNMaXN0LG5zLEMpKSxVLmlzU2hhZGVyTWF0ZXJpYWwmJlUudW5pZm9ybXNOZWVkVXBkYXRlPT09ITAmJihpaS51cGxvYWQoayxPdC51bmlmb3Jtc0xpc3QsbnMsQyksVS51bmlmb3Jtc05lZWRVcGRhdGU9ITEpLFUuaXNTcHJpdGVNYXRlcmlhbCYmX2Uuc2V0VmFsdWUoaywiY2VudGVyIixaLmNlbnRlciksX2Uuc2V0VmFsdWUoaywibW9kZWxWaWV3TWF0cml4IixaLm1vZGVsVmlld01hdHJpeCksX2Uuc2V0VmFsdWUoaywibm9ybWFsTWF0cml4IixaLm5vcm1hbE1hdHJpeCksX2Uuc2V0VmFsdWUoaywibW9kZWxNYXRyaXgiLFoubWF0cml4V29ybGQpLHJufWZ1bmN0aW9uIE8wKE0sSSl7TS5hbWJpZW50TGlnaHRDb2xvci5uZWVkc1VwZGF0ZT1JLE0ubGlnaHRQcm9iZS5uZWVkc1VwZGF0ZT1JLE0uZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9SSxNLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPUksTS5wb2ludExpZ2h0cy5uZWVkc1VwZGF0ZT1JLE0ucG9pbnRMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9SSxNLnNwb3RMaWdodHMubmVlZHNVcGRhdGU9SSxNLnNwb3RMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9SSxNLnJlY3RBcmVhTGlnaHRzLm5lZWRzVXBkYXRlPUksTS5oZW1pc3BoZXJlTGlnaHRzLm5lZWRzVXBkYXRlPUl9ZnVuY3Rpb24gazAoTSl7cmV0dXJuIE0uaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxNLmlzTWVzaFRvb25NYXRlcmlhbHx8TS5pc01lc2hQaG9uZ01hdGVyaWFsfHxNLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fE0uaXNTaGFkb3dNYXRlcmlhbHx8TS5pc1NoYWRlck1hdGVyaWFsJiZNLmxpZ2h0cz09PSEwfXRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gbX0sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBwfSx0aGlzLmdldFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBifSx0aGlzLnNldFJlbmRlclRhcmdldFRleHR1cmVzPWZ1bmN0aW9uKE0sSSxPKXtudC5nZXQoTS50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1JLG50LmdldChNLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU9TztsZXQgVT1udC5nZXQoTSk7VS5fX2hhc0V4dGVybmFsVGV4dHVyZXM9ITAsVS5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJihVLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXI9Tz09PXZvaWQgMCxVLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fE0udXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxNLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxNLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKE0sSSl7bGV0IE89bnQuZ2V0KE0pO08uX193ZWJnbEZyYW1lYnVmZmVyPUksTy5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlcj1JPT09dm9pZCAwfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihNLEk9MCxPPTApe2I9TSxtPUkscD1PO2xldCBVPSEwO2lmKE0pe2xldCBSdD1udC5nZXQoTSk7UnQuX191c2VEZWZhdWx0RnJhbWVidWZmZXIhPT12b2lkIDA/KEIuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpLFU9ITEpOlJ0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcj09PXZvaWQgMD9DLnNldHVwUmVuZGVyVGFyZ2V0KE0pOlJ0Ll9faGFzRXh0ZXJuYWxUZXh0dXJlcyYmQy5yZWJpbmRUZXh0dXJlcyhNLG50LmdldChNLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLG50LmdldChNLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBaPW51bGwsVHQ9ITEsQ3Q9ITE7aWYoTSl7bGV0IFJ0PU0udGV4dHVyZTsoUnQuaXNEYXRhVGV4dHVyZTNEfHxSdC5pc0RhdGFUZXh0dXJlMkRBcnJheSkmJihDdD0hMCk7bGV0IEd0PW50LmdldChNKS5fX3dlYmdsRnJhbWVidWZmZXI7TS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8oWj1HdFtJXSxUdD0hMCk6TS51c2VSZW5kZXJidWZmZXI/Wj1udC5nZXQoTSkuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyOlo9R3QsTC5jb3B5KE0udmlld3BvcnQpLEEuY29weShNLnNjaXNzb3IpLEg9TS5zY2lzc29yVGVzdH1lbHNlIEwuY29weShGKS5tdWx0aXBseVNjYWxhcih5KS5mbG9vcigpLEEuY29weSh6KS5tdWx0aXBseVNjYWxhcih5KS5mbG9vcigpLEg9TjtpZihCLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxaKSYmU3QuZHJhd0J1ZmZlcnMmJlUmJkIuZHJhd0J1ZmZlcnMoTSxaKSxCLnZpZXdwb3J0KEwpLEIuc2Npc3NvcihBKSxCLnNldFNjaXNzb3JUZXN0KEgpLFR0KXtsZXQgUnQ9bnQuZ2V0KE0udGV4dHVyZSk7ay5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStJLFJ0Ll9fd2ViZ2xUZXh0dXJlLE8pfWVsc2UgaWYoQ3Qpe2xldCBSdD1udC5nZXQoTS50ZXh0dXJlKSxHdD1JfHwwO2suZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoMzYxNjAsMzYwNjQsUnQuX193ZWJnbFRleHR1cmUsT3x8MCxHdCl9Xz0tMX0sdGhpcy5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzPWZ1bmN0aW9uKE0sSSxPLFUsWixUdCxDdCl7aWYoIShNJiZNLmlzV2ViR0xSZW5kZXJUYXJnZXQpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuIik7cmV0dXJufWxldCBMdD1udC5nZXQoTSkuX193ZWJnbEZyYW1lYnVmZmVyO2lmKE0uaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJkN0IT09dm9pZCAwJiYoTHQ9THRbQ3RdKSxMdCl7Qi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsTHQpO3RyeXtsZXQgUnQ9TS50ZXh0dXJlLEd0PVJ0LmZvcm1hdCx6dD1SdC50eXBlO2lmKEd0IT09UmUmJl90LmNvbnZlcnQoR3QpIT09ay5nZXRQYXJhbWV0ZXIoMzU3MzkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gUkdCQSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGZvcm1hdC4iKTtyZXR1cm59bGV0IFV0PXp0PT09VXImJihtdC5oYXMoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpfHxTdC5pc1dlYkdMMiYmbXQuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IikpO2lmKHp0IT09ZWkmJl90LmNvbnZlcnQoenQpIT09ay5nZXRQYXJhbWV0ZXIoMzU3MzgpJiYhKHp0PT09VWkmJihTdC5pc1dlYkdMMnx8bXQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpfHxtdC5oYXMoIldFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKSkmJiFVdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpO3JldHVybn1rLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApPT09MzYwNTM/ST49MCYmSTw9TS53aWR0aC1VJiZPPj0wJiZPPD1NLmhlaWdodC1aJiZrLnJlYWRQaXhlbHMoSSxPLFUsWixfdC5jb252ZXJ0KEd0KSxfdC5jb252ZXJ0KHp0KSxUdCk6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZWFkUGl4ZWxzIGZyb20gcmVuZGVyVGFyZ2V0IGZhaWxlZC4gRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLiIpfWZpbmFsbHl7bGV0IFJ0PWIhPT1udWxsP250LmdldChiKS5fX3dlYmdsRnJhbWVidWZmZXI6bnVsbDtCLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxSdCl9fX0sdGhpcy5jb3B5RnJhbWVidWZmZXJUb1RleHR1cmU9ZnVuY3Rpb24oTSxJLE89MCl7aWYoSS5pc0ZyYW1lYnVmZmVyVGV4dHVyZSE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBjb3B5RnJhbWVidWZmZXJUb1RleHR1cmUoKSBjYW4gb25seSBiZSB1c2VkIHdpdGggRnJhbWVidWZmZXJUZXh0dXJlLiIpO3JldHVybn1sZXQgVT1NYXRoLnBvdygyLC1PKSxaPU1hdGguZmxvb3IoSS5pbWFnZS53aWR0aCpVKSxUdD1NYXRoLmZsb29yKEkuaW1hZ2UuaGVpZ2h0KlUpO0Muc2V0VGV4dHVyZTJEKEksMCksay5jb3B5VGV4U3ViSW1hZ2UyRCgzNTUzLE8sMCwwLE0ueCxNLnksWixUdCksQi51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmU9ZnVuY3Rpb24oTSxJLE8sVT0wKXtsZXQgWj1JLmltYWdlLndpZHRoLFR0PUkuaW1hZ2UuaGVpZ2h0LEN0PV90LmNvbnZlcnQoTy5mb3JtYXQpLEx0PV90LmNvbnZlcnQoTy50eXBlKTtDLnNldFRleHR1cmUyRChPLDApLGsucGl4ZWxTdG9yZWkoMzc0NDAsTy5mbGlwWSksay5waXhlbFN0b3JlaSgzNzQ0MSxPLnByZW11bHRpcGx5QWxwaGEpLGsucGl4ZWxTdG9yZWkoMzMxNyxPLnVucGFja0FsaWdubWVudCksSS5pc0RhdGFUZXh0dXJlP2sudGV4U3ViSW1hZ2UyRCgzNTUzLFUsTS54LE0ueSxaLFR0LEN0LEx0LEkuaW1hZ2UuZGF0YSk6SS5pc0NvbXByZXNzZWRUZXh0dXJlP2suY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1MyxVLE0ueCxNLnksSS5taXBtYXBzWzBdLndpZHRoLEkubWlwbWFwc1swXS5oZWlnaHQsQ3QsSS5taXBtYXBzWzBdLmRhdGEpOmsudGV4U3ViSW1hZ2UyRCgzNTUzLFUsTS54LE0ueSxDdCxMdCxJLmltYWdlKSxVPT09MCYmTy5nZW5lcmF0ZU1pcG1hcHMmJmsuZ2VuZXJhdGVNaXBtYXAoMzU1MyksQi51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRD1mdW5jdGlvbihNLEksTyxVLFo9MCl7aWYoeC5pc1dlYkdMMVJlbmRlcmVyKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtyZXR1cm59bGV0IFR0PU0ubWF4LngtTS5taW4ueCsxLEN0PU0ubWF4LnktTS5taW4ueSsxLEx0PU0ubWF4LnotTS5taW4ueisxLFJ0PV90LmNvbnZlcnQoVS5mb3JtYXQpLEd0PV90LmNvbnZlcnQoVS50eXBlKSx6dDtpZihVLmlzRGF0YVRleHR1cmUzRClDLnNldFRleHR1cmUzRChVLDApLHp0PTMyODc5O2Vsc2UgaWYoVS5pc0RhdGFUZXh0dXJlMkRBcnJheSlDLnNldFRleHR1cmUyREFycmF5KFUsMCksenQ9MzU4NjY7ZWxzZXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogb25seSBzdXBwb3J0cyBUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkuIik7cmV0dXJufWsucGl4ZWxTdG9yZWkoMzc0NDAsVS5mbGlwWSksay5waXhlbFN0b3JlaSgzNzQ0MSxVLnByZW11bHRpcGx5QWxwaGEpLGsucGl4ZWxTdG9yZWkoMzMxNyxVLnVucGFja0FsaWdubWVudCk7bGV0IFV0PWsuZ2V0UGFyYW1ldGVyKDMzMTQpLGllPWsuZ2V0UGFyYW1ldGVyKDMyODc4KSxmaT1rLmdldFBhcmFtZXRlcigzMzE2KSxaaT1rLmdldFBhcmFtZXRlcigzMzE1KSxPdD1rLmdldFBhcmFtZXRlcigzMjg3Nyksbm49Ty5pc0NvbXByZXNzZWRUZXh0dXJlP08ubWlwbWFwc1swXTpPLmltYWdlO2sucGl4ZWxTdG9yZWkoMzMxNCxubi53aWR0aCksay5waXhlbFN0b3JlaSgzMjg3OCxubi5oZWlnaHQpLGsucGl4ZWxTdG9yZWkoMzMxNixNLm1pbi54KSxrLnBpeGVsU3RvcmVpKDMzMTUsTS5taW4ueSksay5waXhlbFN0b3JlaSgzMjg3NyxNLm1pbi56KSxPLmlzRGF0YVRleHR1cmV8fE8uaXNEYXRhVGV4dHVyZTNEP2sudGV4U3ViSW1hZ2UzRCh6dCxaLEkueCxJLnksSS56LFR0LEN0LEx0LFJ0LEd0LG5uLmRhdGEpOk8uaXNDb21wcmVzc2VkVGV4dHVyZT8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IHVudGVzdGVkIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgc3JjVGV4dHVyZS4iKSxrLmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKHp0LFosSS54LEkueSxJLnosVHQsQ3QsTHQsUnQsbm4uZGF0YSkpOmsudGV4U3ViSW1hZ2UzRCh6dCxaLEkueCxJLnksSS56LFR0LEN0LEx0LFJ0LEd0LG5uKSxrLnBpeGVsU3RvcmVpKDMzMTQsVXQpLGsucGl4ZWxTdG9yZWkoMzI4NzgsaWUpLGsucGl4ZWxTdG9yZWkoMzMxNixmaSksay5waXhlbFN0b3JlaSgzMzE1LFppKSxrLnBpeGVsU3RvcmVpKDMyODc3LE90KSxaPT09MCYmVS5nZW5lcmF0ZU1pcG1hcHMmJmsuZ2VuZXJhdGVNaXBtYXAoenQpLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmluaXRUZXh0dXJlPWZ1bmN0aW9uKE0pe0Muc2V0VGV4dHVyZTJEKE0sMCksQi51bmJpbmRUZXh0dXJlKCl9LHRoaXMucmVzZXRTdGF0ZT1mdW5jdGlvbigpe209MCxwPTAsYj1udWxsLEIucmVzZXQoKSx5dC5yZXNldCgpfSx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9VnQucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJlcj0hMDt2YXIgSnU9Y2xhc3MgZXh0ZW5kcyBWdHt9O0p1LnByb3RvdHlwZS5pc1dlYkdMMVJlbmRlcmVyPSEwO3ZhciBobz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MjVlLTUpe3RoaXMubmFtZT0iIix0aGlzLmNvbG9yPW5ldyBmdCh0KSx0aGlzLmRlbnNpdHk9ZX1jbG9uZSgpe3JldHVybiBuZXcgaG8odGhpcy5jb2xvcix0aGlzLmRlbnNpdHkpfXRvSlNPTigpe3JldHVybnt0eXBlOiJGb2dFeHAyIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLGRlbnNpdHk6dGhpcy5kZW5zaXR5fX19O2hvLnByb3RvdHlwZS5pc0ZvZ0V4cDI9ITA7dmFyIGZvPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0xLGk9MWUzKXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgZnQodCksdGhpcy5uZWFyPWUsdGhpcy5mYXI9aX1jbG9uZSgpe3JldHVybiBuZXcgZm8odGhpcy5jb2xvcix0aGlzLm5lYXIsdGhpcy5mYXIpfXRvSlNPTigpe3JldHVybnt0eXBlOiJGb2ciLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksbmVhcjp0aGlzLm5lYXIsZmFyOnRoaXMuZmFyfX19O2ZvLnByb3RvdHlwZS5pc0ZvZz0hMDt2YXIgWXI9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJTY2VuZSIsdGhpcy5iYWNrZ3JvdW5kPW51bGwsdGhpcy5lbnZpcm9ubWVudD1udWxsLHRoaXMuZm9nPW51bGwsdGhpcy5vdmVycmlkZU1hdGVyaWFsPW51bGwsdGhpcy5hdXRvVXBkYXRlPSEwLHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18hPSJ1bmRlZmluZWQiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0LmJhY2tncm91bmQhPT1udWxsJiYodGhpcy5iYWNrZ3JvdW5kPXQuYmFja2dyb3VuZC5jbG9uZSgpKSx0LmVudmlyb25tZW50IT09bnVsbCYmKHRoaXMuZW52aXJvbm1lbnQ9dC5lbnZpcm9ubWVudC5jbG9uZSgpKSx0LmZvZyE9PW51bGwmJih0aGlzLmZvZz10LmZvZy5jbG9uZSgpKSx0Lm92ZXJyaWRlTWF0ZXJpYWwhPT1udWxsJiYodGhpcy5vdmVycmlkZU1hdGVyaWFsPXQub3ZlcnJpZGVNYXRlcmlhbC5jbG9uZSgpKSx0aGlzLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiB0aGlzLmZvZyE9PW51bGwmJihlLm9iamVjdC5mb2c9dGhpcy5mb2cudG9KU09OKCkpLGV9fTtZci5wcm90b3R5cGUuaXNTY2VuZT0hMDt2YXIgR2k9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLmFycmF5PXQsdGhpcy5zdHJpZGU9ZSx0aGlzLmNvdW50PXQhPT12b2lkIDA/dC5sZW5ndGgvZTowLHRoaXMudXNhZ2U9aW8sdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wLHRoaXMudXVpZD10bigpfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5jb3VudD10LmNvdW50LHRoaXMuc3RyaWRlPXQuc3RyaWRlLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfWNvcHlBdCh0LGUsaSl7dCo9dGhpcy5zdHJpZGUsaSo9ZS5zdHJpZGU7Zm9yKGxldCByPTAscz10aGlzLnN0cmlkZTtyPHM7cisrKXRoaXMuYXJyYXlbdCtyXT1lLmFycmF5W2krcl07cmV0dXJuIHRoaXN9c2V0KHQsZT0wKXtyZXR1cm4gdGhpcy5hcnJheS5zZXQodCxlKSx0aGlzfWNsb25lKHQpe3QuYXJyYXlCdWZmZXJzPT09dm9pZCAwJiYodC5hcnJheUJ1ZmZlcnM9e30pLHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPT09dm9pZCAwJiYodGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9dG4oKSksdC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPT09dm9pZCAwJiYodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPXRoaXMuYXJyYXkuc2xpY2UoMCkuYnVmZmVyKTtsZXQgZT1uZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0pLGk9bmV3IHRoaXMuY29uc3RydWN0b3IoZSx0aGlzLnN0cmlkZSk7cmV0dXJuIGkuc2V0VXNhZ2UodGhpcy51c2FnZSksaX1vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc310b0pTT04odCl7cmV0dXJuIHQuYXJyYXlCdWZmZXJzPT09dm9pZCAwJiYodC5hcnJheUJ1ZmZlcnM9e30pLHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPT09dm9pZCAwJiYodGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9dG4oKSksdC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPT09dm9pZCAwJiYodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5LmJ1ZmZlcikpKSx7dXVpZDp0aGlzLnV1aWQsYnVmZmVyOnRoaXMuYXJyYXkuYnVmZmVyLl91dWlkLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLHN0cmlkZTp0aGlzLnN0cmlkZX19fTtHaS5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgc2U9bmV3IFQsV2k9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscj0hMSl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT10LHRoaXMuaXRlbVNpemU9ZSx0aGlzLm9mZnNldD1pLHRoaXMubm9ybWFsaXplZD1yPT09ITB9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuZGF0YS5jb3VudH1nZXQgYXJyYXkoKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5fXNldCBuZWVkc1VwZGF0ZSh0KXt0aGlzLmRhdGEubmVlZHNVcGRhdGU9dH1hcHBseU1hdHJpeDQodCl7Zm9yKGxldCBlPTAsaT10aGlzLmRhdGEuY291bnQ7ZTxpO2UrKylzZS54PXRoaXMuZ2V0WChlKSxzZS55PXRoaXMuZ2V0WShlKSxzZS56PXRoaXMuZ2V0WihlKSxzZS5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxzZS54LHNlLnksc2Uueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspc2UueD10aGlzLmdldFgoZSksc2UueT10aGlzLmdldFkoZSksc2Uuej10aGlzLmdldFooZSksc2UuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSxzZS54LHNlLnksc2Uueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKXNlLng9dGhpcy5nZXRYKGUpLHNlLnk9dGhpcy5nZXRZKGUpLHNlLno9dGhpcy5nZXRaKGUpLHNlLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLHNlLngsc2UueSxzZS56KTtyZXR1cm4gdGhpc31zZXRYKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdPWUsdGhpc31zZXRZKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV09ZSx0aGlzfXNldFoodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXT1lLHRoaXN9c2V0Vyh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdPWUsdGhpc31nZXRYKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XX1nZXRZKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdfWdldFoodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl19Z2V0Vyh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXX1zZXRYWSh0LGUsaSl7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzfXNldFhZWih0LGUsaSxyKXtyZXR1cm4gdD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQsdGhpcy5kYXRhLmFycmF5W3QrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1pLHRoaXMuZGF0YS5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIscyl7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzLmRhdGEuYXJyYXlbdCsyXT1yLHRoaXMuZGF0YS5hcnJheVt0KzNdPXMsdGhpc31jbG9uZSh0KXtpZih0PT09dm9pZCAwKXtjb25zb2xlLmxvZygiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUuY2xvbmUoKTogQ2xvbmluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuIik7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0aGlzLmNvdW50O2krKyl7bGV0IHI9aSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0O2ZvcihsZXQgcz0wO3M8dGhpcy5pdGVtU2l6ZTtzKyspZS5wdXNoKHRoaXMuZGF0YS5hcnJheVtyK3NdKX1yZXR1cm4gbmV3IFF0KG5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKGUpLHRoaXMuaXRlbVNpemUsdGhpcy5ub3JtYWxpemVkKX1lbHNlIHJldHVybiB0LmludGVybGVhdmVkQnVmZmVycz09PXZvaWQgMCYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLmNsb25lKHQpKSxuZXcgV2kodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdLHRoaXMuaXRlbVNpemUsdGhpcy5vZmZzZXQsdGhpcy5ub3JtYWxpemVkKX10b0pTT04odCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLnRvSlNPTigpOiBTZXJpYWxpemluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuIik7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0aGlzLmNvdW50O2krKyl7bGV0IHI9aSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0O2ZvcihsZXQgcz0wO3M8dGhpcy5pdGVtU2l6ZTtzKyspZS5wdXNoKHRoaXMuZGF0YS5hcnJheVtyK3NdKX1yZXR1cm57aXRlbVNpemU6dGhpcy5pdGVtU2l6ZSx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTplLG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfX1lbHNlIHJldHVybiB0LmludGVybGVhdmVkQnVmZmVycz09PXZvaWQgMCYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLnRvSlNPTih0KSkse2lzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6ITAsaXRlbVNpemU6dGhpcy5pdGVtU2l6ZSxkYXRhOnRoaXMuZGF0YS51dWlkLG9mZnNldDp0aGlzLm9mZnNldCxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19fTtXaS5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgZmw9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU3ByaXRlTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnJvdGF0aW9uPTAsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy50cmFuc3BhcmVudD0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtmbC5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMDt2YXIgUnIsV3M9bmV3IFQsTHI9bmV3IFQsUHI9bmV3IFQsRHI9bmV3IEsscXM9bmV3IEssQTA9bmV3IHd0LE9hPW5ldyBULFhzPW5ldyBULGthPW5ldyBULFVnPW5ldyBLLFJ1PW5ldyBLLEJnPW5ldyBLLCR1PWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IodCl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZSIsUnI9PT12b2lkIDApe1JyPW5ldyBIdDtsZXQgZT1uZXcgRmxvYXQzMkFycmF5KFstLjUsLS41LDAsMCwwLC41LC0uNSwwLDEsMCwuNSwuNSwwLDEsMSwtLjUsLjUsMCwwLDFdKSxpPW5ldyBHaShlLDUpO1JyLnNldEluZGV4KFswLDEsMiwwLDIsM10pLFJyLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBXaShpLDMsMCwhMSkpLFJyLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBXaShpLDIsMywhMSkpfXRoaXMuZ2VvbWV0cnk9UnIsdGhpcy5tYXRlcmlhbD10IT09dm9pZCAwP3Q6bmV3IGZsLHRoaXMuY2VudGVyPW5ldyBLKC41LC41KX1yYXljYXN0KHQsZSl7dC5jYW1lcmE9PT1udWxsJiZjb25zb2xlLmVycm9yKCdUSFJFRS5TcHJpdGU6ICJSYXljYXN0ZXIuY2FtZXJhIiBuZWVkcyB0byBiZSBzZXQgaW4gb3JkZXIgdG8gcmF5Y2FzdCBhZ2FpbnN0IHNwcml0ZXMuJyksTHIuc2V0RnJvbU1hdHJpeFNjYWxlKHRoaXMubWF0cml4V29ybGQpLEEwLmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLFByLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmdGhpcy5tYXRlcmlhbC5zaXplQXR0ZW51YXRpb249PT0hMSYmTHIubXVsdGlwbHlTY2FsYXIoLVByLnopO2xldCBpPXRoaXMubWF0ZXJpYWwucm90YXRpb24scixzO2khPT0wJiYocz1NYXRoLmNvcyhpKSxyPU1hdGguc2luKGkpKTtsZXQgbz10aGlzLmNlbnRlcjtIYShPYS5zZXQoLS41LC0uNSwwKSxQcixvLExyLHIscyksSGEoWHMuc2V0KC41LC0uNSwwKSxQcixvLExyLHIscyksSGEoa2Euc2V0KC41LC41LDApLFByLG8sTHIscixzKSxVZy5zZXQoMCwwKSxSdS5zZXQoMSwwKSxCZy5zZXQoMSwxKTtsZXQgYT10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShPYSxYcyxrYSwhMSxXcyk7aWYoYT09PW51bGwmJihIYShYcy5zZXQoLS41LC41LDApLFByLG8sTHIscixzKSxSdS5zZXQoMCwxKSxhPXQucmF5LmludGVyc2VjdFRyaWFuZ2xlKE9hLGthLFhzLCExLFdzKSxhPT09bnVsbCkpcmV0dXJuO2xldCBsPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKFdzKTtsPHQubmVhcnx8bD50LmZhcnx8ZS5wdXNoKHtkaXN0YW5jZTpsLHBvaW50OldzLmNsb25lKCksdXY6cmUuZ2V0VVYoV3MsT2EsWHMsa2EsVWcsUnUsQmcsbmV3IEspLGZhY2U6bnVsbCxvYmplY3Q6dGhpc30pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdC5jZW50ZXIhPT12b2lkIDAmJnRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzfX07JHUucHJvdG90eXBlLmlzU3ByaXRlPSEwO2Z1bmN0aW9uIEhhKG4sdCxlLGkscixzKXtEci5zdWJWZWN0b3JzKG4sZSkuYWRkU2NhbGFyKC41KS5tdWx0aXBseShpKSxyIT09dm9pZCAwPyhxcy54PXMqRHIueC1yKkRyLnkscXMueT1yKkRyLngrcypEci55KTpxcy5jb3B5KERyKSxuLmNvcHkodCksbi54Kz1xcy54LG4ueSs9cXMueSxuLmFwcGx5TWF0cml4NChBMCl9dmFyIE9nPW5ldyBULGtnPW5ldyBXdCxIZz1uZXcgV3QsTkU9bmV3IFQsVmc9bmV3IHd0LGRsPWNsYXNzIGV4dGVuZHMgb2V7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iU2tpbm5lZE1lc2giLHRoaXMuYmluZE1vZGU9ImF0dGFjaGVkIix0aGlzLmJpbmRNYXRyaXg9bmV3IHd0LHRoaXMuYmluZE1hdHJpeEludmVyc2U9bmV3IHd0fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5iaW5kTW9kZT10LmJpbmRNb2RlLHRoaXMuYmluZE1hdHJpeC5jb3B5KHQuYmluZE1hdHJpeCksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHQuYmluZE1hdHJpeEludmVyc2UpLHRoaXMuc2tlbGV0b249dC5za2VsZXRvbix0aGlzfWJpbmQodCxlKXt0aGlzLnNrZWxldG9uPXQsZT09PXZvaWQgMCYmKHRoaXMudXBkYXRlTWF0cml4V29ybGQoITApLHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKSxlPXRoaXMubWF0cml4V29ybGQpLHRoaXMuYmluZE1hdHJpeC5jb3B5KGUpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShlKS5pbnZlcnQoKX1wb3NlKCl7dGhpcy5za2VsZXRvbi5wb3NlKCl9bm9ybWFsaXplU2tpbldlaWdodHMoKXtsZXQgdD1uZXcgV3QsZT10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodDtmb3IobGV0IGk9MCxyPWUuY291bnQ7aTxyO2krKyl7dC54PWUuZ2V0WChpKSx0Lnk9ZS5nZXRZKGkpLHQuej1lLmdldFooaSksdC53PWUuZ2V0VyhpKTtsZXQgcz0xL3QubWFuaGF0dGFuTGVuZ3RoKCk7cyE9PTEvMD90Lm11bHRpcGx5U2NhbGFyKHMpOnQuc2V0KDEsMCwwLDApLGUuc2V0WFlaVyhpLHQueCx0LnksdC56LHQudyl9fXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMuYmluZE1vZGU9PT0iYXR0YWNoZWQiP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTp0aGlzLmJpbmRNb2RlPT09ImRldGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5iaW5kTWF0cml4KS5pbnZlcnQoKTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9Ym9uZVRyYW5zZm9ybSh0LGUpe2xldCBpPXRoaXMuc2tlbGV0b24scj10aGlzLmdlb21ldHJ5O2tnLmZyb21CdWZmZXJBdHRyaWJ1dGUoci5hdHRyaWJ1dGVzLnNraW5JbmRleCx0KSxIZy5mcm9tQnVmZmVyQXR0cmlidXRlKHIuYXR0cmlidXRlcy5za2luV2VpZ2h0LHQpLE9nLmNvcHkoZSkuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCksZS5zZXQoMCwwLDApO2ZvcihsZXQgcz0wO3M8NDtzKyspe2xldCBvPUhnLmdldENvbXBvbmVudChzKTtpZihvIT09MCl7bGV0IGE9a2cuZ2V0Q29tcG9uZW50KHMpO1ZnLm11bHRpcGx5TWF0cmljZXMoaS5ib25lc1thXS5tYXRyaXhXb3JsZCxpLmJvbmVJbnZlcnNlc1thXSksZS5hZGRTY2FsZWRWZWN0b3IoTkUuY29weShPZykuYXBwbHlNYXRyaXg0KFZnKSxvKX19cmV0dXJuIGUuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeEludmVyc2UpfX07ZGwucHJvdG90eXBlLmlzU2tpbm5lZE1lc2g9ITA7dmFyIEt1PWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQm9uZSJ9fTtLdS5wcm90b3R5cGUuaXNCb25lPSEwO3ZhciBRdT1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHIscyxvLGEsbCxjPWZlLHU9ZmUsaCxmKXtzdXBlcihudWxsLG8sYSxsLGMsdSxyLHMsaCxmKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aX0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O1F1LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciBwbz1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSxpLHI9MSl7dHlwZW9mIGk9PSJudW1iZXIiJiYocj1pLGk9ITEsY29uc29sZS5lcnJvcigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgbm9ybWFsaXplZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQuIikpLHN1cGVyKHQsZSxpKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9cn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwLHR9fTtwby5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIEdnPW5ldyB3dCxXZz1uZXcgd3QsVmE9W10sWXM9bmV3IG9lLGp1PWNsYXNzIGV4dGVuZHMgb2V7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsZSksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcgcG8obmV3IEZsb2F0MzJBcnJheShpKjE2KSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1pLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSx0Lmluc3RhbmNlQ29sb3IhPT1udWxsJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9Z2V0TWF0cml4QXQodCxlKXtlLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LHQqMTYpfXJheWNhc3QodCxlKXtsZXQgaT10aGlzLm1hdHJpeFdvcmxkLHI9dGhpcy5jb3VudDtpZihZcy5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LFlzLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsWXMubWF0ZXJpYWwhPT12b2lkIDApZm9yKGxldCBzPTA7czxyO3MrKyl7dGhpcy5nZXRNYXRyaXhBdChzLEdnKSxXZy5tdWx0aXBseU1hdHJpY2VzKGksR2cpLFlzLm1hdHJpeFdvcmxkPVdnLFlzLnJheWNhc3QodCxWYSk7Zm9yKGxldCBvPTAsYT1WYS5sZW5ndGg7bzxhO28rKyl7bGV0IGw9VmFbb107bC5pbnN0YW5jZUlkPXMsbC5vYmplY3Q9dGhpcyxlLnB1c2gobCl9VmEubGVuZ3RoPTB9fXNldENvbG9yQXQodCxlKXt0aGlzLmluc3RhbmNlQ29sb3I9PT1udWxsJiYodGhpcy5pbnN0YW5jZUNvbG9yPW5ldyBwbyhuZXcgRmxvYXQzMkFycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguY291bnQqMyksMykpLGUudG9BcnJheSh0aGlzLmluc3RhbmNlQ29sb3IuYXJyYXksdCozKX1zZXRNYXRyaXhBdCh0LGUpe2UudG9BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LHQqMTYpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07anUucHJvdG90eXBlLmlzSW5zdGFuY2VkTWVzaD0hMDt2YXIgem49Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUJhc2ljTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLmxpbmV3aWR0aD0xLHRoaXMubGluZWNhcD0icm91bmQiLHRoaXMubGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLmxpbmV3aWR0aD10LmxpbmV3aWR0aCx0aGlzLmxpbmVjYXA9dC5saW5lY2FwLHRoaXMubGluZWpvaW49dC5saW5lam9pbix0aGlzfX07em4ucHJvdG90eXBlLmlzTGluZUJhc2ljTWF0ZXJpYWw9ITA7dmFyIHFnPW5ldyBULFhnPW5ldyBULFlnPW5ldyB3dCxMdT1uZXcgb2ksR2E9bmV3IHNpLG1vPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IodD1uZXcgSHQsZT1uZXcgem4pe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZih0LmluZGV4PT09bnVsbCl7bGV0IGU9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLGk9WzBdO2ZvcihsZXQgcj0xLHM9ZS5jb3VudDtyPHM7cisrKXFnLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyLTEpLFhnLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyKSxpW3JdPWlbci0xXSxpW3JdKz1xZy5kaXN0YW5jZVRvKFhnKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgZWUoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc31yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0cml4V29ybGQscz10LnBhcmFtcy5MaW5lLnRocmVzaG9sZCxvPWkuZHJhd1JhbmdlO2lmKGkuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLEdhLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksR2EuYXBwbHlNYXRyaXg0KHIpLEdhLnJhZGl1cys9cyx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKEdhKT09PSExKXJldHVybjtZZy5jb3B5KHIpLmludmVydCgpLEx1LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChZZyk7bGV0IGE9cy8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPWEqYSxjPW5ldyBULHU9bmV3IFQsaD1uZXcgVCxmPW5ldyBULGQ9dGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYoaS5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZz1pLmluZGV4LHY9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKGchPT1udWxsKXtsZXQgbT1NYXRoLm1heCgwLG8uc3RhcnQpLHA9TWF0aC5taW4oZy5jb3VudCxvLnN0YXJ0K28uY291bnQpO2ZvcihsZXQgYj1tLF89cC0xO2I8XztiKz1kKXtsZXQgUz1nLmdldFgoYiksTD1nLmdldFgoYisxKTtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUodixTKSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUodixMKSxMdS5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxmLGgpPmwpY29udGludWU7Zi5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IEg9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oZik7SDx0Lm5lYXJ8fEg+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6SCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmIsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSl9fWVsc2V7bGV0IG09TWF0aC5tYXgoMCxvLnN0YXJ0KSxwPU1hdGgubWluKHYuY291bnQsby5zdGFydCtvLmNvdW50KTtmb3IobGV0IGI9bSxfPXAtMTtiPF87Yis9ZCl7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKHYsYiksdS5mcm9tQnVmZmVyQXR0cmlidXRlKHYsYisxKSxMdS5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxmLGgpPmwpY29udGludWU7Zi5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IEw9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oZik7TDx0Lm5lYXJ8fEw+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6TCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmIsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSl9fX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHIhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgcz0wLG89ci5sZW5ndGg7czxvO3MrKyl7bGV0IGE9cltzXS5uYW1lfHxTdHJpbmcocyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVthXT1zfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7ZSE9PXZvaWQgMCYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTttby5wcm90b3R5cGUuaXNMaW5lPSEwO3ZhciBaZz1uZXcgVCxKZz1uZXcgVCxnbz1jbGFzcyBleHRlbmRzIG1ve2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkxpbmVTZWdtZW50cyJ9Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZih0LmluZGV4PT09bnVsbCl7bGV0IGU9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLGk9W107Zm9yKGxldCByPTAscz1lLmNvdW50O3I8cztyKz0yKVpnLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyKSxKZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUscisxKSxpW3JdPXI9PT0wPzA6aVtyLTFdLGlbcisxXT1pW3JdK1pnLmRpc3RhbmNlVG8oSmcpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyBlZShpLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc319O2dvLnByb3RvdHlwZS5pc0xpbmVTZWdtZW50cz0hMDt2YXIgdGg9Y2xhc3MgZXh0ZW5kcyBtb3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJMaW5lTG9vcCJ9fTt0aC5wcm90b3R5cGUuaXNMaW5lTG9vcD0hMDt2YXIgcGw9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnNpemU9MSx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07cGwucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITA7dmFyICRnPW5ldyB3dCxlaD1uZXcgb2ksV2E9bmV3IHNpLHFhPW5ldyBULG5oPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IodD1uZXcgSHQsZT1uZXcgcGwpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHMiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0cml4V29ybGQscz10LnBhcmFtcy5Qb2ludHMudGhyZXNob2xkLG89aS5kcmF3UmFuZ2U7aWYoaS5ib3VuZGluZ1NwaGVyZT09PW51bGwmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksV2EuY29weShpLmJvdW5kaW5nU3BoZXJlKSxXYS5hcHBseU1hdHJpeDQociksV2EucmFkaXVzKz1zLHQucmF5LmludGVyc2VjdHNTcGhlcmUoV2EpPT09ITEpcmV0dXJuOyRnLmNvcHkocikuaW52ZXJ0KCksZWguY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KCRnKTtsZXQgYT1zLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9YSphO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGM9aS5pbmRleCxoPWkuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihjIT09bnVsbCl7bGV0IGY9TWF0aC5tYXgoMCxvLnN0YXJ0KSxkPU1hdGgubWluKGMuY291bnQsby5zdGFydCtvLmNvdW50KTtmb3IobGV0IGc9Zix4PWQ7Zzx4O2crKyl7bGV0IHY9Yy5nZXRYKGcpO3FhLmZyb21CdWZmZXJBdHRyaWJ1dGUoaCx2KSxLZyhxYSx2LGwscix0LGUsdGhpcyl9fWVsc2V7bGV0IGY9TWF0aC5tYXgoMCxvLnN0YXJ0KSxkPU1hdGgubWluKGguY291bnQsby5zdGFydCtvLmNvdW50KTtmb3IobGV0IGc9Zix4PWQ7Zzx4O2crKylxYS5mcm9tQnVmZmVyQXR0cmlidXRlKGgsZyksS2cocWEsZyxsLHIsdCxlLHRoaXMpfX1lbHNlIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHIhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgcz0wLG89ci5sZW5ndGg7czxvO3MrKyl7bGV0IGE9cltzXS5uYW1lfHxTdHJpbmcocyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVthXT1zfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7ZSE9PXZvaWQgMCYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O25oLnByb3RvdHlwZS5pc1BvaW50cz0hMDtmdW5jdGlvbiBLZyhuLHQsZSxpLHIscyxvKXtsZXQgYT1laC5kaXN0YW5jZVNxVG9Qb2ludChuKTtpZihhPGUpe2xldCBsPW5ldyBUO2VoLmNsb3Nlc3RQb2ludFRvUG9pbnQobixsKSxsLmFwcGx5TWF0cml4NChpKTtsZXQgYz1yLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhsKTtpZihjPHIubmVhcnx8Yz5yLmZhcilyZXR1cm47cy5wdXNoKHtkaXN0YW5jZTpjLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KGEpLHBvaW50OmwsaW5kZXg6dCxmYWNlOm51bGwsb2JqZWN0Om99KX19dmFyIGloPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMpe3N1cGVyKHQsZSxpLHIscyxvLGEsbCxjKSx0aGlzLm1pbkZpbHRlcj1vIT09dm9pZCAwP286YmUsdGhpcy5tYWdGaWx0ZXI9cyE9PXZvaWQgMD9zOmJlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2xldCB1PXRoaXM7ZnVuY3Rpb24gaCgpe3UubmVlZHNVcGRhdGU9ITAsdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGgpfSJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfXVwZGF0ZSgpe2xldCB0PXRoaXMuaW1hZ2U7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdD09PSExJiZ0LnJlYWR5U3RhdGU+PXQuSEFWRV9DVVJSRU5UX0RBVEEmJih0aGlzLm5lZWRzVXBkYXRlPSEwKX19O2loLnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZT0hMDt2YXIgcmg9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoe3dpZHRoOnQsaGVpZ2h0OmV9KSx0aGlzLmZvcm1hdD1pLHRoaXMubWFnRmlsdGVyPWZlLHRoaXMubWluRmlsdGVyPWZlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9fTtyaC5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmU9ITA7dmFyIHNoPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMsdSxoLGYpe3N1cGVyKG51bGwsbyxhLGwsYyx1LHIscyxoLGYpLHRoaXMuaW1hZ2U9e3dpZHRoOmUsaGVpZ2h0Oml9LHRoaXMubWlwbWFwcz10LHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTtzaC5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZT0hMDt2YXIgb2g9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0LGUsaSxyLHMsbyxhLGwsYyl7c3VwZXIodCxlLGkscixzLG8sYSxsLGMpLHRoaXMubmVlZHNVcGRhdGU9ITB9fTtvaC5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO3ZhciBacj1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKHQ9MSxlPTgsaT0wLHI9TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6ZSx0aGV0YVN0YXJ0OmksdGhldGFMZW5ndGg6cn0sZT1NYXRoLm1heCgzLGUpO2xldCBzPVtdLG89W10sYT1bXSxsPVtdLGM9bmV3IFQsdT1uZXcgSztvLnB1c2goMCwwLDApLGEucHVzaCgwLDAsMSksbC5wdXNoKC41LC41KTtmb3IobGV0IGg9MCxmPTM7aDw9ZTtoKyssZis9Myl7bGV0IGQ9aStoL2UqcjtjLng9dCpNYXRoLmNvcyhkKSxjLnk9dCpNYXRoLnNpbihkKSxvLnB1c2goYy54LGMueSxjLnopLGEucHVzaCgwLDAsMSksdS54PShvW2ZdL3QrMSkvMix1Lnk9KG9bZisxXS90KzEpLzIsbC5wdXNoKHUueCx1LnkpfWZvcihsZXQgaD0xO2g8PWU7aCsrKXMucHVzaChoLGgrMSwwKTt0aGlzLnNldEluZGV4KHMpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBlZShhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZShsLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBacih0LnJhZGl1cyx0LnNlZ21lbnRzLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19O3ZhciBTaz1uZXcgVCxFaz1uZXcgVCxUaz1uZXcgVCxBaz1uZXcgcmU7dmFyIEZlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPSJDdXJ2ZSIsdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwfWdldFBvaW50KCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5nZXRQb2ludCgpIG5vdCBpbXBsZW1lbnRlZC4iKSxudWxsfWdldFBvaW50QXQodCxlKXtsZXQgaT10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFBvaW50KGksZSl9Z2V0UG9pbnRzKHQ9NSl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaS90KSk7cmV0dXJuIGV9Z2V0U3BhY2VkUG9pbnRzKHQ9NSl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnRBdChpL3QpKTtyZXR1cm4gZX1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldExlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX1nZXRMZW5ndGhzKHQ9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMpe2lmKHRoaXMuY2FjaGVBcmNMZW5ndGhzJiZ0aGlzLmNhY2hlQXJjTGVuZ3Rocy5sZW5ndGg9PT10KzEmJiF0aGlzLm5lZWRzVXBkYXRlKXJldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Roczt0aGlzLm5lZWRzVXBkYXRlPSExO2xldCBlPVtdLGkscj10aGlzLmdldFBvaW50KDApLHM9MDtlLnB1c2goMCk7Zm9yKGxldCBvPTE7bzw9dDtvKyspaT10aGlzLmdldFBvaW50KG8vdCkscys9aS5kaXN0YW5jZVRvKHIpLGUucHVzaChzKSxyPWk7cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWUsZX11cGRhdGVBcmNMZW5ndGhzKCl7dGhpcy5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdldExlbmd0aHMoKX1nZXRVdG9UbWFwcGluZyh0LGUpe2xldCBpPXRoaXMuZ2V0TGVuZ3RocygpLHI9MCxzPWkubGVuZ3RoLG87ZT9vPWU6bz10Kmlbcy0xXTtsZXQgYT0wLGw9cy0xLGM7Zm9yKDthPD1sOylpZihyPU1hdGguZmxvb3IoYSsobC1hKS8yKSxjPWlbcl0tbyxjPDApYT1yKzE7ZWxzZSBpZihjPjApbD1yLTE7ZWxzZXtsPXI7YnJlYWt9aWYocj1sLGlbcl09PT1vKXJldHVybiByLyhzLTEpO2xldCB1PWlbcl0sZj1pW3IrMV0tdSxkPShvLXUpL2Y7cmV0dXJuKHIrZCkvKHMtMSl9Z2V0VGFuZ2VudCh0LGUpe2xldCByPXQtMWUtNCxzPXQrMWUtNDtyPDAmJihyPTApLHM+MSYmKHM9MSk7bGV0IG89dGhpcy5nZXRQb2ludChyKSxhPXRoaXMuZ2V0UG9pbnQocyksbD1lfHwoby5pc1ZlY3RvcjI/bmV3IEs6bmV3IFQpO3JldHVybiBsLmNvcHkoYSkuc3ViKG8pLm5vcm1hbGl6ZSgpLGx9Z2V0VGFuZ2VudEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KGksZSl9Y29tcHV0ZUZyZW5ldEZyYW1lcyh0LGUpe2xldCBpPW5ldyBULHI9W10scz1bXSxvPVtdLGE9bmV3IFQsbD1uZXcgd3Q7Zm9yKGxldCBkPTA7ZDw9dDtkKyspe2xldCBnPWQvdDtyW2RdPXRoaXMuZ2V0VGFuZ2VudEF0KGcsbmV3IFQpfXNbMF09bmV3IFQsb1swXT1uZXcgVDtsZXQgYz1OdW1iZXIuTUFYX1ZBTFVFLHU9TWF0aC5hYnMoclswXS54KSxoPU1hdGguYWJzKHJbMF0ueSksZj1NYXRoLmFicyhyWzBdLnopO3U8PWMmJihjPXUsaS5zZXQoMSwwLDApKSxoPD1jJiYoYz1oLGkuc2V0KDAsMSwwKSksZjw9YyYmaS5zZXQoMCwwLDEpLGEuY3Jvc3NWZWN0b3JzKHJbMF0saSkubm9ybWFsaXplKCksc1swXS5jcm9zc1ZlY3RvcnMoclswXSxhKSxvWzBdLmNyb3NzVmVjdG9ycyhyWzBdLHNbMF0pO2ZvcihsZXQgZD0xO2Q8PXQ7ZCsrKXtpZihzW2RdPXNbZC0xXS5jbG9uZSgpLG9bZF09b1tkLTFdLmNsb25lKCksYS5jcm9zc1ZlY3RvcnMocltkLTFdLHJbZF0pLGEubGVuZ3RoKCk+TnVtYmVyLkVQU0lMT04pe2Eubm9ybWFsaXplKCk7bGV0IGc9TWF0aC5hY29zKEllKHJbZC0xXS5kb3QocltkXSksLTEsMSkpO3NbZF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhhLGcpKX1vW2RdLmNyb3NzVmVjdG9ycyhyW2RdLHNbZF0pfWlmKGU9PT0hMCl7bGV0IGQ9TWF0aC5hY29zKEllKHNbMF0uZG90KHNbdF0pLC0xLDEpKTtkLz10LHJbMF0uZG90KGEuY3Jvc3NWZWN0b3JzKHNbMF0sc1t0XSkpPjAmJihkPS1kKTtmb3IobGV0IGc9MTtnPD10O2crKylzW2ddLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMocltnXSxkKmcpKSxvW2ddLmNyb3NzVmVjdG9ycyhyW2ddLHNbZ10pfXJldHVybnt0YW5nZW50czpyLG5vcm1hbHM6cyxiaW5vcm1hbHM6b319Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJDdXJ2ZSIsZ2VuZXJhdG9yOiJDdXJ2ZS50b0pTT04ifX07cmV0dXJuIHQuYXJjTGVuZ3RoRGl2aXNpb25zPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zLHQudHlwZT10aGlzLnR5cGUsdH1mcm9tSlNPTih0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc319LEpyPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD0wLGU9MCxpPTEscj0xLHM9MCxvPU1hdGguUEkqMixhPSExLGw9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IkVsbGlwc2VDdXJ2ZSIsdGhpcy5hWD10LHRoaXMuYVk9ZSx0aGlzLnhSYWRpdXM9aSx0aGlzLnlSYWRpdXM9cix0aGlzLmFTdGFydEFuZ2xlPXMsdGhpcy5hRW5kQW5nbGU9byx0aGlzLmFDbG9ja3dpc2U9YSx0aGlzLmFSb3RhdGlvbj1sfWdldFBvaW50KHQsZSl7bGV0IGk9ZXx8bmV3IEsscj1NYXRoLlBJKjIscz10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlLG89TWF0aC5hYnMocyk8TnVtYmVyLkVQU0lMT047Zm9yKDtzPDA7KXMrPXI7Zm9yKDtzPnI7KXMtPXI7czxOdW1iZXIuRVBTSUxPTiYmKG8/cz0wOnM9ciksdGhpcy5hQ2xvY2t3aXNlPT09ITAmJiFvJiYocz09PXI/cz0tcjpzPXMtcik7bGV0IGE9dGhpcy5hU3RhcnRBbmdsZSt0KnMsbD10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhhKSxjPXRoaXMuYVkrdGhpcy55UmFkaXVzKk1hdGguc2luKGEpO2lmKHRoaXMuYVJvdGF0aW9uIT09MCl7bGV0IHU9TWF0aC5jb3ModGhpcy5hUm90YXRpb24pLGg9TWF0aC5zaW4odGhpcy5hUm90YXRpb24pLGY9bC10aGlzLmFYLGQ9Yy10aGlzLmFZO2w9Zip1LWQqaCt0aGlzLmFYLGM9ZipoK2QqdSt0aGlzLmFZfXJldHVybiBpLnNldChsLGMpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5hWD10aGlzLmFYLHQuYVk9dGhpcy5hWSx0LnhSYWRpdXM9dGhpcy54UmFkaXVzLHQueVJhZGl1cz10aGlzLnlSYWRpdXMsdC5hU3RhcnRBbmdsZT10aGlzLmFTdGFydEFuZ2xlLHQuYUVuZEFuZ2xlPXRoaXMuYUVuZEFuZ2xlLHQuYUNsb2Nrd2lzZT10aGlzLmFDbG9ja3dpc2UsdC5hUm90YXRpb249dGhpcy5hUm90YXRpb24sdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc319O0pyLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDt2YXIgbWw9Y2xhc3MgZXh0ZW5kcyBKcntjb25zdHJ1Y3Rvcih0LGUsaSxyLHMsbyl7c3VwZXIodCxlLGksaSxyLHMsbyksdGhpcy50eXBlPSJBcmNDdXJ2ZSJ9fTttbC5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDtmdW5jdGlvbiB0Zigpe2xldCBuPTAsdD0wLGU9MCxpPTA7ZnVuY3Rpb24gcihzLG8sYSxsKXtuPXMsdD1hLGU9LTMqcyszKm8tMiphLWwsaT0yKnMtMipvK2ErbH1yZXR1cm57aW5pdENhdG11bGxSb206ZnVuY3Rpb24ocyxvLGEsbCxjKXtyKG8sYSxjKihhLXMpLGMqKGwtbykpfSxpbml0Tm9udW5pZm9ybUNhdG11bGxSb206ZnVuY3Rpb24ocyxvLGEsbCxjLHUsaCl7bGV0IGY9KG8tcykvYy0oYS1zKS8oYyt1KSsoYS1vKS91LGQ9KGEtbykvdS0obC1vKS8odStoKSsobC1hKS9oO2YqPXUsZCo9dSxyKG8sYSxmLGQpfSxjYWxjOmZ1bmN0aW9uKHMpe2xldCBvPXMqcyxhPW8qcztyZXR1cm4gbit0KnMrZSpvK2kqYX19fXZhciBYYT1uZXcgVCxQdT1uZXcgdGYsRHU9bmV3IHRmLEl1PW5ldyB0ZixnbD1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKHQ9W10sZT0hMSxpPSJjZW50cmlwZXRhbCIscj0uNSl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhdG11bGxSb21DdXJ2ZTMiLHRoaXMucG9pbnRzPXQsdGhpcy5jbG9zZWQ9ZSx0aGlzLmN1cnZlVHlwZT1pLHRoaXMudGVuc2lvbj1yfWdldFBvaW50KHQsZT1uZXcgVCl7bGV0IGk9ZSxyPXRoaXMucG9pbnRzLHM9ci5sZW5ndGgsbz0ocy0odGhpcy5jbG9zZWQ/MDoxKSkqdCxhPU1hdGguZmxvb3IobyksbD1vLWE7dGhpcy5jbG9zZWQ/YSs9YT4wPzA6KE1hdGguZmxvb3IoTWF0aC5hYnMoYSkvcykrMSkqczpsPT09MCYmYT09PXMtMSYmKGE9cy0yLGw9MSk7bGV0IGMsdTt0aGlzLmNsb3NlZHx8YT4wP2M9clsoYS0xKSVzXTooWGEuc3ViVmVjdG9ycyhyWzBdLHJbMV0pLmFkZChyWzBdKSxjPVhhKTtsZXQgaD1yW2Elc10sZj1yWyhhKzEpJXNdO2lmKHRoaXMuY2xvc2VkfHxhKzI8cz91PXJbKGErMiklc106KFhhLnN1YlZlY3RvcnMocltzLTFdLHJbcy0yXSkuYWRkKHJbcy0xXSksdT1YYSksdGhpcy5jdXJ2ZVR5cGU9PT0iY2VudHJpcGV0YWwifHx0aGlzLmN1cnZlVHlwZT09PSJjaG9yZGFsIil7bGV0IGQ9dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCI/LjU6LjI1LGc9TWF0aC5wb3coYy5kaXN0YW5jZVRvU3F1YXJlZChoKSxkKSx4PU1hdGgucG93KGguZGlzdGFuY2VUb1NxdWFyZWQoZiksZCksdj1NYXRoLnBvdyhmLmRpc3RhbmNlVG9TcXVhcmVkKHUpLGQpO3g8MWUtNCYmKHg9MSksZzwxZS00JiYoZz14KSx2PDFlLTQmJih2PXgpLFB1LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLngsaC54LGYueCx1LngsZyx4LHYpLER1LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksZyx4LHYpLEl1LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLnosaC56LGYueix1LnosZyx4LHYpfWVsc2UgdGhpcy5jdXJ2ZVR5cGU9PT0iY2F0bXVsbHJvbSImJihQdS5pbml0Q2F0bXVsbFJvbShjLngsaC54LGYueCx1LngsdGhpcy50ZW5zaW9uKSxEdS5pbml0Q2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksdGhpcy50ZW5zaW9uKSxJdS5pbml0Q2F0bXVsbFJvbShjLnosaC56LGYueix1LnosdGhpcy50ZW5zaW9uKSk7cmV0dXJuIGkuc2V0KFB1LmNhbGMobCksRHUuY2FsYyhsKSxJdS5jYWxjKGwpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKHIuY2xvbmUoKSl9cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXRoaXMucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10aGlzLnBvaW50c1tlXTt0LnBvaW50cy5wdXNoKHIudG9BcnJheSgpKX1yZXR1cm4gdC5jbG9zZWQ9dGhpcy5jbG9zZWQsdC5jdXJ2ZVR5cGU9dGhpcy5jdXJ2ZVR5cGUsdC50ZW5zaW9uPXRoaXMudGVuc2lvbix0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2gobmV3IFQoKS5mcm9tQXJyYXkocikpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9fTtnbC5wcm90b3R5cGUuaXNDYXRtdWxsUm9tQ3VydmUzPSEwO2Z1bmN0aW9uIFFnKG4sdCxlLGkscil7bGV0IHM9KGktdCkqLjUsbz0oci1lKSouNSxhPW4qbixsPW4qYTtyZXR1cm4oMiplLTIqaStzK28pKmwrKC0zKmUrMyppLTIqcy1vKSphK3MqbitlfWZ1bmN0aW9uIEZFKG4sdCl7bGV0IGU9MS1uO3JldHVybiBlKmUqdH1mdW5jdGlvbiB6RShuLHQpe3JldHVybiAyKigxLW4pKm4qdH1mdW5jdGlvbiBVRShuLHQpe3JldHVybiBuKm4qdH1mdW5jdGlvbiBqcyhuLHQsZSxpKXtyZXR1cm4gRkUobix0KSt6RShuLGUpK1VFKG4saSl9ZnVuY3Rpb24gQkUobix0KXtsZXQgZT0xLW47cmV0dXJuIGUqZSplKnR9ZnVuY3Rpb24gT0Uobix0KXtsZXQgZT0xLW47cmV0dXJuIDMqZSplKm4qdH1mdW5jdGlvbiBrRShuLHQpe3JldHVybiAzKigxLW4pKm4qbip0fWZ1bmN0aW9uIEhFKG4sdCl7cmV0dXJuIG4qbipuKnR9ZnVuY3Rpb24gdG8obix0LGUsaSxyKXtyZXR1cm4gQkUobix0KStPRShuLGUpK2tFKG4saSkrSEUobixyKX12YXIgeG89Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBLLGU9bmV3IEssaT1uZXcgSyxyPW5ldyBLKXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWksdGhpcy52Mz1yfWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZSxyPXRoaXMudjAscz10aGlzLnYxLG89dGhpcy52MixhPXRoaXMudjM7cmV0dXJuIGkuc2V0KHRvKHQsci54LHMueCxvLngsYS54KSx0byh0LHIueSxzLnksby55LGEueSkpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07eG8ucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZT0hMDt2YXIgeGw9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQsaT1uZXcgVCxyPW5ldyBUKXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3IFQpe2xldCBpPWUscj10aGlzLnYwLHM9dGhpcy52MSxvPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBpLnNldCh0byh0LHIueCxzLngsby54LGEueCksdG8odCxyLnkscy55LG8ueSxhLnkpLHRvKHQsci56LHMueixvLnosYS56KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTt4bC5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDt2YXIgJHI9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBLLGU9bmV3IEspe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUiLHRoaXMudjE9dCx0aGlzLnYyPWV9Z2V0UG9pbnQodCxlPW5ldyBLKXtsZXQgaT1lO3JldHVybiB0PT09MT9pLmNvcHkodGhpcy52Mik6KGkuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksaS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLGl9Z2V0UG9pbnRBdCh0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9Z2V0VGFuZ2VudCh0LGUpe2xldCBpPWV8fG5ldyBLO3JldHVybiBpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLm5vcm1hbGl6ZSgpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07JHIucHJvdG90eXBlLmlzTGluZUN1cnZlPSEwO3ZhciBhaD1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZTMiLHRoaXMuaXNMaW5lQ3VydmUzPSEwLHRoaXMudjE9dCx0aGlzLnYyPWV9Z2V0UG9pbnQodCxlPW5ldyBUKXtsZXQgaT1lO3JldHVybiB0PT09MT9pLmNvcHkodGhpcy52Mik6KGkuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksaS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLGl9Z2V0UG9pbnRBdCh0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX0seW89Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBLLGU9bmV3IEssaT1uZXcgSyl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aX1nZXRQb2ludCh0LGU9bmV3IEspe2xldCBpPWUscj10aGlzLnYwLHM9dGhpcy52MSxvPXRoaXMudjI7cmV0dXJuIGkuc2V0KGpzKHQsci54LHMueCxvLngpLGpzKHQsci55LHMueSxvLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O3lvLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlPSEwO3ZhciB5bD1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCxpPW5ldyBUKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aX1nZXRQb2ludCh0LGU9bmV3IFQpe2xldCBpPWUscj10aGlzLnYwLHM9dGhpcy52MSxvPXRoaXMudjI7cmV0dXJuIGkuc2V0KGpzKHQsci54LHMueCxvLngpLGpzKHQsci55LHMueSxvLnkpLGpzKHQsci56LHMueixvLnopKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O3lsLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlMz0hMDt2YXIgdm89Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMudHlwZT0iU3BsaW5lQ3VydmUiLHRoaXMucG9pbnRzPXR9Z2V0UG9pbnQodCxlPW5ldyBLKXtsZXQgaT1lLHI9dGhpcy5wb2ludHMscz0oci5sZW5ndGgtMSkqdCxvPU1hdGguZmxvb3IocyksYT1zLW8sbD1yW289PT0wP286by0xXSxjPXJbb10sdT1yW28+ci5sZW5ndGgtMj9yLmxlbmd0aC0xOm8rMV0saD1yW28+ci5sZW5ndGgtMz9yLmxlbmd0aC0xOm8rMl07cmV0dXJuIGkuc2V0KFFnKGEsbC54LGMueCx1LngsaC54KSxRZyhhLGwueSxjLnksdS55LGgueSkpLGl9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2goci5jbG9uZSgpKX1yZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXRoaXMucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10aGlzLnBvaW50c1tlXTt0LnBvaW50cy5wdXNoKHIudG9BcnJheSgpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBLKCkuZnJvbUFycmF5KHIpKX1yZXR1cm4gdGhpc319O3ZvLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3ZhciBDMD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxBcmNDdXJ2ZTptbCxDYXRtdWxsUm9tQ3VydmUzOmdsLEN1YmljQmV6aWVyQ3VydmU6eG8sQ3ViaWNCZXppZXJDdXJ2ZTM6eGwsRWxsaXBzZUN1cnZlOkpyLExpbmVDdXJ2ZTokcixMaW5lQ3VydmUzOmFoLFF1YWRyYXRpY0JlemllckN1cnZlOnlvLFF1YWRyYXRpY0JlemllckN1cnZlMzp5bCxTcGxpbmVDdXJ2ZTp2b30pLGxoPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQ3VydmVQYXRoIix0aGlzLmN1cnZlcz1bXSx0aGlzLmF1dG9DbG9zZT0hMX1hZGQodCl7dGhpcy5jdXJ2ZXMucHVzaCh0KX1jbG9zZVBhdGgoKXtsZXQgdD10aGlzLmN1cnZlc1swXS5nZXRQb2ludCgwKSxlPXRoaXMuY3VydmVzW3RoaXMuY3VydmVzLmxlbmd0aC0xXS5nZXRQb2ludCgxKTt0LmVxdWFscyhlKXx8dGhpcy5jdXJ2ZXMucHVzaChuZXcgJHIoZSx0KSl9Z2V0UG9pbnQodCxlKXtsZXQgaT10KnRoaXMuZ2V0TGVuZ3RoKCkscj10aGlzLmdldEN1cnZlTGVuZ3RocygpLHM9MDtmb3IoO3M8ci5sZW5ndGg7KXtpZihyW3NdPj1pKXtsZXQgbz1yW3NdLWksYT10aGlzLmN1cnZlc1tzXSxsPWEuZ2V0TGVuZ3RoKCksYz1sPT09MD8wOjEtby9sO3JldHVybiBhLmdldFBvaW50QXQoYyxlKX1zKyt9cmV0dXJuIG51bGx9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX11cGRhdGVBcmNMZW5ndGhzKCl7dGhpcy5uZWVkc1VwZGF0ZT0hMCx0aGlzLmNhY2hlTGVuZ3Rocz1udWxsLHRoaXMuZ2V0Q3VydmVMZW5ndGhzKCl9Z2V0Q3VydmVMZW5ndGhzKCl7aWYodGhpcy5jYWNoZUxlbmd0aHMmJnRoaXMuY2FjaGVMZW5ndGhzLmxlbmd0aD09PXRoaXMuY3VydmVzLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM7bGV0IHQ9W10sZT0wO2ZvcihsZXQgaT0wLHI9dGhpcy5jdXJ2ZXMubGVuZ3RoO2k8cjtpKyspZSs9dGhpcy5jdXJ2ZXNbaV0uZ2V0TGVuZ3RoKCksdC5wdXNoKGUpO3JldHVybiB0aGlzLmNhY2hlTGVuZ3Rocz10LHR9Z2V0U3BhY2VkUG9pbnRzKHQ9NDApe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50KGkvdCkpO3JldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5wdXNoKGVbMF0pLGV9Z2V0UG9pbnRzKHQ9MTIpe2xldCBlPVtdLGk7Zm9yKGxldCByPTAscz10aGlzLmN1cnZlcztyPHMubGVuZ3RoO3IrKyl7bGV0IG89c1tyXSxhPW8mJm8uaXNFbGxpcHNlQ3VydmU/dCoyOm8mJihvLmlzTGluZUN1cnZlfHxvLmlzTGluZUN1cnZlMyk/MTpvJiZvLmlzU3BsaW5lQ3VydmU/dCpvLnBvaW50cy5sZW5ndGg6dCxsPW8uZ2V0UG9pbnRzKGEpO2ZvcihsZXQgYz0wO2M8bC5sZW5ndGg7YysrKXtsZXQgdT1sW2NdO2kmJmkuZXF1YWxzKHUpfHwoZS5wdXNoKHUpLGk9dSl9fXJldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5sZW5ndGg+MSYmIWVbZS5sZW5ndGgtMV0uZXF1YWxzKGVbMF0pJiZlLnB1c2goZVswXSksZX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsaT10LmN1cnZlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5jdXJ2ZXNbZV07dGhpcy5jdXJ2ZXMucHVzaChyLmNsb25lKCkpfXJldHVybiB0aGlzLmF1dG9DbG9zZT10LmF1dG9DbG9zZSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QuYXV0b0Nsb3NlPXRoaXMuYXV0b0Nsb3NlLHQuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXRoaXMuY3VydmVzW2VdO3QuY3VydmVzLnB1c2goci50b0pTT04oKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpcy5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsaT10LmN1cnZlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5jdXJ2ZXNbZV07dGhpcy5jdXJ2ZXMucHVzaChuZXcgQzBbci50eXBlXSgpLmZyb21KU09OKHIpKX1yZXR1cm4gdGhpc319LF9vPWNsYXNzIGV4dGVuZHMgbGh7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBhdGgiLHRoaXMuY3VycmVudFBvaW50PW5ldyBLLHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgZT0xLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmxpbmVUbyh0W2VdLngsdFtlXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxlKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31saW5lVG8odCxlKXtsZXQgaT1uZXcgJHIodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgSyh0LGUpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChpKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQodCxlKSx0aGlzfXF1YWRyYXRpY0N1cnZlVG8odCxlLGkscil7bGV0IHM9bmV3IHlvKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IEsodCxlKSxuZXcgSyhpLHIpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChzKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQoaSxyKSx0aGlzfWJlemllckN1cnZlVG8odCxlLGkscixzLG8pe2xldCBhPW5ldyB4byh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBLKHQsZSksbmV3IEsoaSxyKSxuZXcgSyhzLG8pKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChhKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQocyxvKSx0aGlzfXNwbGluZVRocnUodCl7bGV0IGU9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSxpPW5ldyB2byhlKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChpKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQsZSxpLHIscyxvKXtsZXQgYT10aGlzLmN1cnJlbnRQb2ludC54LGw9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNhcmModCthLGUrbCxpLHIscyxvKSx0aGlzfWFic2FyYyh0LGUsaSxyLHMsbyl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LGUsaSxpLHIscyxvKSx0aGlzfWVsbGlwc2UodCxlLGkscixzLG8sYSxsKXtsZXQgYz10aGlzLmN1cnJlbnRQb2ludC54LHU9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrYyxlK3UsaSxyLHMsbyxhLGwpLHRoaXN9YWJzZWxsaXBzZSh0LGUsaSxyLHMsbyxhLGwpe2xldCBjPW5ldyBKcih0LGUsaSxyLHMsbyxhLGwpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtsZXQgaD1jLmdldFBvaW50KDApO2guZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oaC54LGgueSl9dGhpcy5jdXJ2ZXMucHVzaChjKTtsZXQgdT1jLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHUpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX0sVW49Y2xhc3MgZXh0ZW5kcyBfb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9dG4oKSx0aGlzLnR5cGU9IlNoYXBlIix0aGlzLmhvbGVzPVtdfWdldFBvaW50c0hvbGVzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dGhpcy5ob2xlcy5sZW5ndGg7aTxyO2krKyllW2ldPXRoaXMuaG9sZXNbaV0uZ2V0UG9pbnRzKHQpO3JldHVybiBlfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5ob2xlc1tlXTt0aGlzLmhvbGVzLnB1c2goci5jbG9uZSgpKX1yZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10aGlzLmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10aGlzLmhvbGVzW2VdO3QuaG9sZXMucHVzaChyLnRvSlNPTigpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10LmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LmhvbGVzW2VdO3RoaXMuaG9sZXMucHVzaChuZXcgX28oKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fSxWRT17dHJpYW5ndWxhdGU6ZnVuY3Rpb24obix0LGU9Mil7bGV0IGk9dCYmdC5sZW5ndGgscj1pP3RbMF0qZTpuLmxlbmd0aCxzPVIwKG4sMCxyLGUsITApLG89W107aWYoIXN8fHMubmV4dD09PXMucHJldilyZXR1cm4gbztsZXQgYSxsLGMsdSxoLGYsZDtpZihpJiYocz1ZRShuLHQscyxlKSksbi5sZW5ndGg+ODAqZSl7YT1jPW5bMF0sbD11PW5bMV07Zm9yKGxldCBnPWU7ZzxyO2crPWUpaD1uW2ddLGY9bltnKzFdLGg8YSYmKGE9aCksZjxsJiYobD1mKSxoPmMmJihjPWgpLGY+dSYmKHU9Zik7ZD1NYXRoLm1heChjLWEsdS1sKSxkPWQhPT0wPzEvZDowfXJldHVybiB3byhzLG8sZSxhLGwsZCksb319O2Z1bmN0aW9uIFIwKG4sdCxlLGkscil7bGV0IHMsbztpZihyPT09clQobix0LGUsaSk+MClmb3Iocz10O3M8ZTtzKz1pKW89amcocyxuW3NdLG5bcysxXSxvKTtlbHNlIGZvcihzPWUtaTtzPj10O3MtPWkpbz1qZyhzLG5bc10sbltzKzFdLG8pO3JldHVybiBvJiZEbChvLG8ubmV4dCkmJihibyhvKSxvPW8ubmV4dCksb31mdW5jdGlvbiBsaShuLHQpe2lmKCFuKXJldHVybiBuO3R8fCh0PW4pO2xldCBlPW4saTtkbyBpZihpPSExLCFlLnN0ZWluZXImJihEbChlLGUubmV4dCl8fHRlKGUucHJldixlLGUubmV4dCk9PT0wKSl7aWYoYm8oZSksZT10PWUucHJldixlPT09ZS5uZXh0KWJyZWFrO2k9ITB9ZWxzZSBlPWUubmV4dDt3aGlsZShpfHxlIT09dCk7cmV0dXJuIHR9ZnVuY3Rpb24gd28obix0LGUsaSxyLHMsbyl7aWYoIW4pcmV0dXJuOyFvJiZzJiZRRShuLGkscixzKTtsZXQgYT1uLGwsYztmb3IoO24ucHJldiE9PW4ubmV4dDspe2lmKGw9bi5wcmV2LGM9bi5uZXh0LHM/V0UobixpLHIscyk6R0Uobikpe3QucHVzaChsLmkvZSksdC5wdXNoKG4uaS9lKSx0LnB1c2goYy5pL2UpLGJvKG4pLG49Yy5uZXh0LGE9Yy5uZXh0O2NvbnRpbnVlfWlmKG49YyxuPT09YSl7bz9vPT09MT8obj1xRShsaShuKSx0LGUpLHdvKG4sdCxlLGkscixzLDIpKTpvPT09MiYmWEUobix0LGUsaSxyLHMpOndvKGxpKG4pLHQsZSxpLHIscywxKTticmVha319fWZ1bmN0aW9uIEdFKG4pe2xldCB0PW4ucHJldixlPW4saT1uLm5leHQ7aWYodGUodCxlLGkpPj0wKXJldHVybiExO2xldCByPW4ubmV4dC5uZXh0O2Zvcig7ciE9PW4ucHJldjspe2lmKHpyKHQueCx0LnksZS54LGUueSxpLngsaS55LHIueCxyLnkpJiZ0ZShyLnByZXYscixyLm5leHQpPj0wKXJldHVybiExO3I9ci5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIFdFKG4sdCxlLGkpe2xldCByPW4ucHJldixzPW4sbz1uLm5leHQ7aWYodGUocixzLG8pPj0wKXJldHVybiExO2xldCBhPXIueDxzLng/ci54PG8ueD9yLng6by54OnMueDxvLng/cy54Om8ueCxsPXIueTxzLnk/ci55PG8ueT9yLnk6by55OnMueTxvLnk/cy55Om8ueSxjPXIueD5zLng/ci54Pm8ueD9yLng6by54OnMueD5vLng/cy54Om8ueCx1PXIueT5zLnk/ci55Pm8ueT9yLnk6by55OnMueT5vLnk/cy55Om8ueSxoPWNoKGEsbCx0LGUsaSksZj1jaChjLHUsdCxlLGkpLGQ9bi5wcmV2WixnPW4ubmV4dFo7Zm9yKDtkJiZkLno+PWgmJmcmJmcuejw9Zjspe2lmKGQhPT1uLnByZXYmJmQhPT1uLm5leHQmJnpyKHIueCxyLnkscy54LHMueSxvLngsby55LGQueCxkLnkpJiZ0ZShkLnByZXYsZCxkLm5leHQpPj0wfHwoZD1kLnByZXZaLGchPT1uLnByZXYmJmchPT1uLm5leHQmJnpyKHIueCxyLnkscy54LHMueSxvLngsby55LGcueCxnLnkpJiZ0ZShnLnByZXYsZyxnLm5leHQpPj0wKSlyZXR1cm4hMTtnPWcubmV4dFp9Zm9yKDtkJiZkLno+PWg7KXtpZihkIT09bi5wcmV2JiZkIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxkLngsZC55KSYmdGUoZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQucHJldlp9Zm9yKDtnJiZnLno8PWY7KXtpZihnIT09bi5wcmV2JiZnIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxnLngsZy55KSYmdGUoZy5wcmV2LGcsZy5uZXh0KT49MClyZXR1cm4hMTtnPWcubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gcUUobix0LGUpe2xldCBpPW47ZG97bGV0IHI9aS5wcmV2LHM9aS5uZXh0Lm5leHQ7IURsKHIscykmJkwwKHIsaSxpLm5leHQscykmJk1vKHIscykmJk1vKHMscikmJih0LnB1c2goci5pL2UpLHQucHVzaChpLmkvZSksdC5wdXNoKHMuaS9lKSxibyhpKSxibyhpLm5leHQpLGk9bj1zKSxpPWkubmV4dH13aGlsZShpIT09bik7cmV0dXJuIGxpKGkpfWZ1bmN0aW9uIFhFKG4sdCxlLGkscixzKXtsZXQgbz1uO2Rve2xldCBhPW8ubmV4dC5uZXh0O2Zvcig7YSE9PW8ucHJldjspe2lmKG8uaSE9PWEuaSYmZVQobyxhKSl7bGV0IGw9UDAobyxhKTtvPWxpKG8sby5uZXh0KSxsPWxpKGwsbC5uZXh0KSx3byhvLHQsZSxpLHIscyksd28obCx0LGUsaSxyLHMpO3JldHVybn1hPWEubmV4dH1vPW8ubmV4dH13aGlsZShvIT09bil9ZnVuY3Rpb24gWUUobix0LGUsaSl7bGV0IHI9W10scyxvLGEsbCxjO2ZvcihzPTAsbz10Lmxlbmd0aDtzPG87cysrKWE9dFtzXSppLGw9czxvLTE/dFtzKzFdKmk6bi5sZW5ndGgsYz1SMChuLGEsbCxpLCExKSxjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxyLnB1c2godFQoYykpO2ZvcihyLnNvcnQoWkUpLHM9MDtzPHIubGVuZ3RoO3MrKylKRShyW3NdLGUpLGU9bGkoZSxlLm5leHQpO3JldHVybiBlfWZ1bmN0aW9uIFpFKG4sdCl7cmV0dXJuIG4ueC10Lnh9ZnVuY3Rpb24gSkUobix0KXtpZih0PSRFKG4sdCksdCl7bGV0IGU9UDAodCxuKTtsaSh0LHQubmV4dCksbGkoZSxlLm5leHQpfX1mdW5jdGlvbiAkRShuLHQpe2xldCBlPXQsaT1uLngscj1uLnkscz0tMS8wLG87ZG97aWYocjw9ZS55JiZyPj1lLm5leHQueSYmZS5uZXh0LnkhPT1lLnkpe2xldCBmPWUueCsoci1lLnkpKihlLm5leHQueC1lLngpLyhlLm5leHQueS1lLnkpO2lmKGY8PWkmJmY+cyl7aWYocz1mLGY9PT1pKXtpZihyPT09ZS55KXJldHVybiBlO2lmKHI9PT1lLm5leHQueSlyZXR1cm4gZS5uZXh0fW89ZS54PGUubmV4dC54P2U6ZS5uZXh0fX1lPWUubmV4dH13aGlsZShlIT09dCk7aWYoIW8pcmV0dXJuIG51bGw7aWYoaT09PXMpcmV0dXJuIG87bGV0IGE9byxsPW8ueCxjPW8ueSx1PTEvMCxoO2U9bztkbyBpPj1lLngmJmUueD49bCYmaSE9PWUueCYmenIocjxjP2k6cyxyLGwsYyxyPGM/czppLHIsZS54LGUueSkmJihoPU1hdGguYWJzKHItZS55KS8oaS1lLngpLE1vKGUsbikmJihoPHV8fGg9PT11JiYoZS54Pm8ueHx8ZS54PT09by54JiZLRShvLGUpKSkmJihvPWUsdT1oKSksZT1lLm5leHQ7d2hpbGUoZSE9PWEpO3JldHVybiBvfWZ1bmN0aW9uIEtFKG4sdCl7cmV0dXJuIHRlKG4ucHJldixuLHQucHJldik8MCYmdGUodC5uZXh0LG4sbi5uZXh0KTwwfWZ1bmN0aW9uIFFFKG4sdCxlLGkpe2xldCByPW47ZG8gci56PT09bnVsbCYmKHIuej1jaChyLngsci55LHQsZSxpKSksci5wcmV2Wj1yLnByZXYsci5uZXh0Wj1yLm5leHQscj1yLm5leHQ7d2hpbGUociE9PW4pO3IucHJldloubmV4dFo9bnVsbCxyLnByZXZaPW51bGwsakUocil9ZnVuY3Rpb24gakUobil7bGV0IHQsZSxpLHIscyxvLGEsbCxjPTE7ZG97Zm9yKGU9bixuPW51bGwscz1udWxsLG89MDtlOyl7Zm9yKG8rKyxpPWUsYT0wLHQ9MDt0PGMmJihhKyssaT1pLm5leHRaLCEhaSk7dCsrKTtmb3IobD1jO2E+MHx8bD4wJiZpOylhIT09MCYmKGw9PT0wfHwhaXx8ZS56PD1pLnopPyhyPWUsZT1lLm5leHRaLGEtLSk6KHI9aSxpPWkubmV4dFosbC0tKSxzP3MubmV4dFo9cjpuPXIsci5wcmV2Wj1zLHM9cjtlPWl9cy5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUobz4xKTtyZXR1cm4gbn1mdW5jdGlvbiBjaChuLHQsZSxpLHIpe3JldHVybiBuPTMyNzY3KihuLWUpKnIsdD0zMjc2NyoodC1pKSpyLG49KG58bjw8OCkmMTY3MTE5MzUsbj0obnxuPDw0KSYyNTI2NDUxMzUsbj0obnxuPDwyKSY4NTg5OTM0NTksbj0obnxuPDwxKSYxNDMxNjU1NzY1LHQ9KHR8dDw8OCkmMTY3MTE5MzUsdD0odHx0PDw0KSYyNTI2NDUxMzUsdD0odHx0PDwyKSY4NTg5OTM0NTksdD0odHx0PDwxKSYxNDMxNjU1NzY1LG58dDw8MX1mdW5jdGlvbiB0VChuKXtsZXQgdD1uLGU9bjtkbyh0Lng8ZS54fHx0Lng9PT1lLngmJnQueTxlLnkpJiYoZT10KSx0PXQubmV4dDt3aGlsZSh0IT09bik7cmV0dXJuIGV9ZnVuY3Rpb24genIobix0LGUsaSxyLHMsbyxhKXtyZXR1cm4oci1vKSoodC1hKS0obi1vKSoocy1hKT49MCYmKG4tbykqKGktYSktKGUtbykqKHQtYSk+PTAmJihlLW8pKihzLWEpLShyLW8pKihpLWEpPj0wfWZ1bmN0aW9uIGVUKG4sdCl7cmV0dXJuIG4ubmV4dC5pIT09dC5pJiZuLnByZXYuaSE9PXQuaSYmIW5UKG4sdCkmJihNbyhuLHQpJiZNbyh0LG4pJiZpVChuLHQpJiYodGUobi5wcmV2LG4sdC5wcmV2KXx8dGUobix0LnByZXYsdCkpfHxEbChuLHQpJiZ0ZShuLnByZXYsbixuLm5leHQpPjAmJnRlKHQucHJldix0LHQubmV4dCk+MCl9ZnVuY3Rpb24gdGUobix0LGUpe3JldHVybih0Lnktbi55KSooZS54LXQueCktKHQueC1uLngpKihlLnktdC55KX1mdW5jdGlvbiBEbChuLHQpe3JldHVybiBuLng9PT10LngmJm4ueT09PXQueX1mdW5jdGlvbiBMMChuLHQsZSxpKXtsZXQgcj1aYSh0ZShuLHQsZSkpLHM9WmEodGUobix0LGkpKSxvPVphKHRlKGUsaSxuKSksYT1aYSh0ZShlLGksdCkpO3JldHVybiEhKHIhPT1zJiZvIT09YXx8cj09PTAmJllhKG4sZSx0KXx8cz09PTAmJllhKG4saSx0KXx8bz09PTAmJllhKGUsbixpKXx8YT09PTAmJllhKGUsdCxpKSl9ZnVuY3Rpb24gWWEobix0LGUpe3JldHVybiB0Lng8PU1hdGgubWF4KG4ueCxlLngpJiZ0Lng+PU1hdGgubWluKG4ueCxlLngpJiZ0Lnk8PU1hdGgubWF4KG4ueSxlLnkpJiZ0Lnk+PU1hdGgubWluKG4ueSxlLnkpfWZ1bmN0aW9uIFphKG4pe3JldHVybiBuPjA/MTpuPDA/LTE6MH1mdW5jdGlvbiBuVChuLHQpe2xldCBlPW47ZG97aWYoZS5pIT09bi5pJiZlLm5leHQuaSE9PW4uaSYmZS5pIT09dC5pJiZlLm5leHQuaSE9PXQuaSYmTDAoZSxlLm5leHQsbix0KSlyZXR1cm4hMDtlPWUubmV4dH13aGlsZShlIT09bik7cmV0dXJuITF9ZnVuY3Rpb24gTW8obix0KXtyZXR1cm4gdGUobi5wcmV2LG4sbi5uZXh0KTwwP3RlKG4sdCxuLm5leHQpPj0wJiZ0ZShuLG4ucHJldix0KT49MDp0ZShuLHQsbi5wcmV2KTwwfHx0ZShuLG4ubmV4dCx0KTwwfWZ1bmN0aW9uIGlUKG4sdCl7bGV0IGU9bixpPSExLHI9KG4ueCt0LngpLzIscz0obi55K3QueSkvMjtkbyBlLnk+cyE9ZS5uZXh0Lnk+cyYmZS5uZXh0LnkhPT1lLnkmJnI8KGUubmV4dC54LWUueCkqKHMtZS55KS8oZS5uZXh0LnktZS55KStlLngmJihpPSFpKSxlPWUubmV4dDt3aGlsZShlIT09bik7cmV0dXJuIGl9ZnVuY3Rpb24gUDAobix0KXtsZXQgZT1uZXcgdWgobi5pLG4ueCxuLnkpLGk9bmV3IHVoKHQuaSx0LngsdC55KSxyPW4ubmV4dCxzPXQucHJldjtyZXR1cm4gbi5uZXh0PXQsdC5wcmV2PW4sZS5uZXh0PXIsci5wcmV2PWUsaS5uZXh0PWUsZS5wcmV2PWkscy5uZXh0PWksaS5wcmV2PXMsaX1mdW5jdGlvbiBqZyhuLHQsZSxpKXtsZXQgcj1uZXcgdWgobix0LGUpO3JldHVybiBpPyhyLm5leHQ9aS5uZXh0LHIucHJldj1pLGkubmV4dC5wcmV2PXIsaS5uZXh0PXIpOihyLnByZXY9cixyLm5leHQ9cikscn1mdW5jdGlvbiBibyhuKXtuLm5leHQucHJldj1uLnByZXYsbi5wcmV2Lm5leHQ9bi5uZXh0LG4ucHJldlomJihuLnByZXZaLm5leHRaPW4ubmV4dFopLG4ubmV4dFomJihuLm5leHRaLnByZXZaPW4ucHJldlopfWZ1bmN0aW9uIHVoKG4sdCxlKXt0aGlzLmk9bix0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiByVChuLHQsZSxpKXtsZXQgcj0wO2ZvcihsZXQgcz10LG89ZS1pO3M8ZTtzKz1pKXIrPShuW29dLW5bc10pKihuW3MrMV0rbltvKzFdKSxvPXM7cmV0dXJuIHJ9dmFyIGRuPWNsYXNze3N0YXRpYyBhcmVhKHQpe2xldCBlPXQubGVuZ3RoLGk9MDtmb3IobGV0IHI9ZS0xLHM9MDtzPGU7cj1zKyspaSs9dFtyXS54KnRbc10ueS10W3NdLngqdFtyXS55O3JldHVybiBpKi41fXN0YXRpYyBpc0Nsb2NrV2lzZSh0KXtyZXR1cm4gZG4uYXJlYSh0KTwwfXN0YXRpYyB0cmlhbmd1bGF0ZVNoYXBlKHQsZSl7bGV0IGk9W10scj1bXSxzPVtdO3QwKHQpLGUwKGksdCk7bGV0IG89dC5sZW5ndGg7ZS5mb3JFYWNoKHQwKTtmb3IobGV0IGw9MDtsPGUubGVuZ3RoO2wrKylyLnB1c2gobyksbys9ZVtsXS5sZW5ndGgsZTAoaSxlW2xdKTtsZXQgYT1WRS50cmlhbmd1bGF0ZShpLHIpO2ZvcihsZXQgbD0wO2w8YS5sZW5ndGg7bCs9MylzLnB1c2goYS5zbGljZShsLGwrMykpO3JldHVybiBzfX07ZnVuY3Rpb24gdDAobil7bGV0IHQ9bi5sZW5ndGg7dD4yJiZuW3QtMV0uZXF1YWxzKG5bMF0pJiZuLnBvcCgpfWZ1bmN0aW9uIGUwKG4sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbi5wdXNoKHRbZV0ueCksbi5wdXNoKHRbZV0ueSl9dmFyIGNpPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD1uZXcgVW4oW25ldyBLKC41LC41KSxuZXcgSygtLjUsLjUpLG5ldyBLKC0uNSwtLjUpLG5ldyBLKC41LC0uNSldKSxlPXt9KXtzdXBlcigpLHRoaXMudHlwZT0iRXh0cnVkZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczp0LG9wdGlvbnM6ZX0sdD1BcnJheS5pc0FycmF5KHQpP3Q6W3RdO2xldCBpPXRoaXMscj1bXSxzPVtdO2ZvcihsZXQgYT0wLGw9dC5sZW5ndGg7YTxsO2ErKyl7bGV0IGM9dFthXTtvKGMpfXRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKHIsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGVlKHMsMikpLHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtmdW5jdGlvbiBvKGEpe2xldCBsPVtdLGM9ZS5jdXJ2ZVNlZ21lbnRzIT09dm9pZCAwP2UuY3VydmVTZWdtZW50czoxMix1PWUuc3RlcHMhPT12b2lkIDA/ZS5zdGVwczoxLGg9ZS5kZXB0aCE9PXZvaWQgMD9lLmRlcHRoOjEsZj1lLmJldmVsRW5hYmxlZCE9PXZvaWQgMD9lLmJldmVsRW5hYmxlZDohMCxkPWUuYmV2ZWxUaGlja25lc3MhPT12b2lkIDA/ZS5iZXZlbFRoaWNrbmVzczouMixnPWUuYmV2ZWxTaXplIT09dm9pZCAwP2UuYmV2ZWxTaXplOmQtLjEseD1lLmJldmVsT2Zmc2V0IT09dm9pZCAwP2UuYmV2ZWxPZmZzZXQ6MCx2PWUuYmV2ZWxTZWdtZW50cyE9PXZvaWQgMD9lLmJldmVsU2VnbWVudHM6MyxtPWUuZXh0cnVkZVBhdGgscD1lLlVWR2VuZXJhdG9yIT09dm9pZCAwP2UuVVZHZW5lcmF0b3I6c1Q7ZS5hbW91bnQhPT12b2lkIDAmJihjb25zb2xlLndhcm4oIlRIUkVFLkV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTogYW1vdW50IGhhcyBiZWVuIHJlbmFtZWQgdG8gZGVwdGguIiksaD1lLmFtb3VudCk7bGV0IGIsXz0hMSxTLEwsQSxIO20mJihiPW0uZ2V0U3BhY2VkUG9pbnRzKHUpLF89ITAsZj0hMSxTPW0uY29tcHV0ZUZyZW5ldEZyYW1lcyh1LCExKSxMPW5ldyBULEE9bmV3IFQsSD1uZXcgVCksZnx8KHY9MCxkPTAsZz0wLHg9MCk7bGV0IHR0PWEuZXh0cmFjdFBvaW50cyhjKSxYPXR0LnNoYXBlLHk9dHQuaG9sZXM7aWYoIWRuLmlzQ2xvY2tXaXNlKFgpKXtYPVgucmV2ZXJzZSgpO2ZvcihsZXQgQz0wLGo9eS5sZW5ndGg7QzxqO0MrKyl7bGV0IEo9eVtDXTtkbi5pc0Nsb2NrV2lzZShKKSYmKHlbQ109Si5yZXZlcnNlKCkpfX1sZXQgRD1kbi50cmlhbmd1bGF0ZVNoYXBlKFgseSksRj1YO2ZvcihsZXQgQz0wLGo9eS5sZW5ndGg7QzxqO0MrKyl7bGV0IEo9eVtDXTtYPVguY29uY2F0KEopfWZ1bmN0aW9uIHooQyxqLEope3JldHVybiBqfHxjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IHZlYyBkb2VzIG5vdCBleGlzdCIpLGouY2xvbmUoKS5tdWx0aXBseVNjYWxhcihKKS5hZGQoQyl9bGV0IE49WC5sZW5ndGgsVj1ELmxlbmd0aDtmdW5jdGlvbiBRKEMsaixKKXtsZXQgaXQsZXQsdnQsYnQ9Qy54LWoueCxJdD1DLnktai55LFp0PUoueC1DLngscXQ9Si55LUMueSxFPWJ0KmJ0K0l0Kkl0LHc9YnQqcXQtSXQqWnQ7aWYoTWF0aC5hYnModyk+TnVtYmVyLkVQU0lMT04pe2xldCBxPU1hdGguc3FydChFKSxydD1NYXRoLnNxcnQoWnQqWnQrcXQqcXQpLGd0PWoueC1JdC9xLFc9ai55K2J0L3EsX3Q9Si54LXF0L3J0LHl0PUoueStadC9ydCx1dD0oKF90LWd0KSpxdC0oeXQtVykqWnQpLyhidCpxdC1JdCpadCk7aXQ9Z3QrYnQqdXQtQy54LGV0PVcrSXQqdXQtQy55O2xldCBjdD1pdCppdCtldCpldDtpZihjdDw9MilyZXR1cm4gbmV3IEsoaXQsZXQpO3Z0PU1hdGguc3FydChjdC8yKX1lbHNle2xldCBxPSExO2J0Pk51bWJlci5FUFNJTE9OP1p0Pk51bWJlci5FUFNJTE9OJiYocT0hMCk6YnQ8LU51bWJlci5FUFNJTE9OP1p0PC1OdW1iZXIuRVBTSUxPTiYmKHE9ITApOk1hdGguc2lnbihJdCk9PT1NYXRoLnNpZ24ocXQpJiYocT0hMCkscT8oaXQ9LUl0LGV0PWJ0LHZ0PU1hdGguc3FydChFKSk6KGl0PWJ0LGV0PUl0LHZ0PU1hdGguc3FydChFLzIpKX1yZXR1cm4gbmV3IEsoaXQvdnQsZXQvdnQpfWxldCBhdD1bXTtmb3IobGV0IEM9MCxqPUYubGVuZ3RoLEo9ai0xLGl0PUMrMTtDPGo7QysrLEorKyxpdCsrKUo9PT1qJiYoSj0wKSxpdD09PWomJihpdD0wKSxhdFtDXT1RKEZbQ10sRltKXSxGW2l0XSk7bGV0IEc9W10sJCxsdD1hdC5jb25jYXQoKTtmb3IobGV0IEM9MCxqPXkubGVuZ3RoO0M8ajtDKyspe2xldCBKPXlbQ107JD1bXTtmb3IobGV0IGl0PTAsZXQ9Si5sZW5ndGgsdnQ9ZXQtMSxidD1pdCsxO2l0PGV0O2l0KyssdnQrKyxidCsrKXZ0PT09ZXQmJih2dD0wKSxidD09PWV0JiYoYnQ9MCksJFtpdF09UShKW2l0XSxKW3Z0XSxKW2J0XSk7Ry5wdXNoKCQpLGx0PWx0LmNvbmNhdCgkKX1mb3IobGV0IEM9MDtDPHY7QysrKXtsZXQgaj1DL3YsSj1kKk1hdGguY29zKGoqTWF0aC5QSS8yKSxpdD1nKk1hdGguc2luKGoqTWF0aC5QSS8yKSt4O2ZvcihsZXQgZXQ9MCx2dD1GLmxlbmd0aDtldDx2dDtldCsrKXtsZXQgYnQ9eihGW2V0XSxhdFtldF0saXQpO210KGJ0LngsYnQueSwtSil9Zm9yKGxldCBldD0wLHZ0PXkubGVuZ3RoO2V0PHZ0O2V0Kyspe2xldCBidD15W2V0XTskPUdbZXRdO2ZvcihsZXQgSXQ9MCxadD1idC5sZW5ndGg7SXQ8WnQ7SXQrKyl7bGV0IHF0PXooYnRbSXRdLCRbSXRdLGl0KTttdChxdC54LHF0LnksLUopfX19bGV0IGR0PWcreDtmb3IobGV0IEM9MDtDPE47QysrKXtsZXQgaj1mP3ooWFtDXSxsdFtDXSxkdCk6WFtDXTtfPyhBLmNvcHkoUy5ub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcihqLngpLEwuY29weShTLmJpbm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoai55KSxILmNvcHkoYlswXSkuYWRkKEEpLmFkZChMKSxtdChILngsSC55LEgueikpOm10KGoueCxqLnksMCl9Zm9yKGxldCBDPTE7Qzw9dTtDKyspZm9yKGxldCBqPTA7ajxOO2orKyl7bGV0IEo9Zj96KFhbal0sbHRbal0sZHQpOlhbal07Xz8oQS5jb3B5KFMubm9ybWFsc1tDXSkubXVsdGlwbHlTY2FsYXIoSi54KSxMLmNvcHkoUy5iaW5vcm1hbHNbQ10pLm11bHRpcGx5U2NhbGFyKEoueSksSC5jb3B5KGJbQ10pLmFkZChBKS5hZGQoTCksbXQoSC54LEgueSxILnopKTptdChKLngsSi55LGgvdSpDKX1mb3IobGV0IEM9di0xO0M+PTA7Qy0tKXtsZXQgaj1DL3YsSj1kKk1hdGguY29zKGoqTWF0aC5QSS8yKSxpdD1nKk1hdGguc2luKGoqTWF0aC5QSS8yKSt4O2ZvcihsZXQgZXQ9MCx2dD1GLmxlbmd0aDtldDx2dDtldCsrKXtsZXQgYnQ9eihGW2V0XSxhdFtldF0saXQpO210KGJ0LngsYnQueSxoK0opfWZvcihsZXQgZXQ9MCx2dD15Lmxlbmd0aDtldDx2dDtldCsrKXtsZXQgYnQ9eVtldF07JD1HW2V0XTtmb3IobGV0IEl0PTAsWnQ9YnQubGVuZ3RoO0l0PFp0O0l0Kyspe2xldCBxdD16KGJ0W0l0XSwkW0l0XSxpdCk7Xz9tdChxdC54LHF0LnkrYlt1LTFdLnksYlt1LTFdLngrSik6bXQocXQueCxxdC55LGgrSil9fX14dCgpLGsoKTtmdW5jdGlvbiB4dCgpe2xldCBDPXIubGVuZ3RoLzM7aWYoZil7bGV0IGo9MCxKPU4qajtmb3IobGV0IGl0PTA7aXQ8VjtpdCsrKXtsZXQgZXQ9RFtpdF07U3QoZXRbMl0rSixldFsxXStKLGV0WzBdK0opfWo9dSt2KjIsSj1OKmo7Zm9yKGxldCBpdD0wO2l0PFY7aXQrKyl7bGV0IGV0PURbaXRdO1N0KGV0WzBdK0osZXRbMV0rSixldFsyXStKKX19ZWxzZXtmb3IobGV0IGo9MDtqPFY7aisrKXtsZXQgSj1EW2pdO1N0KEpbMl0sSlsxXSxKWzBdKX1mb3IobGV0IGo9MDtqPFY7aisrKXtsZXQgSj1EW2pdO1N0KEpbMF0rTip1LEpbMV0rTip1LEpbMl0rTip1KX19aS5hZGRHcm91cChDLHIubGVuZ3RoLzMtQywwKX1mdW5jdGlvbiBrKCl7bGV0IEM9ci5sZW5ndGgvMyxqPTA7RnQoRixqKSxqKz1GLmxlbmd0aDtmb3IobGV0IEo9MCxpdD15Lmxlbmd0aDtKPGl0O0orKyl7bGV0IGV0PXlbSl07RnQoZXQsaiksais9ZXQubGVuZ3RofWkuYWRkR3JvdXAoQyxyLmxlbmd0aC8zLUMsMSl9ZnVuY3Rpb24gRnQoQyxqKXtsZXQgSj1DLmxlbmd0aDtmb3IoOy0tSj49MDspe2xldCBpdD1KLGV0PUotMTtldDwwJiYoZXQ9Qy5sZW5ndGgtMSk7Zm9yKGxldCB2dD0wLGJ0PXUrdioyO3Z0PGJ0O3Z0Kyspe2xldCBJdD1OKnZ0LFp0PU4qKHZ0KzEpLHF0PWoraXQrSXQsRT1qK2V0K0l0LHc9aitldCtadCxxPWoraXQrWnQ7QihxdCxFLHcscSl9fX1mdW5jdGlvbiBtdChDLGosSil7bC5wdXNoKEMpLGwucHVzaChqKSxsLnB1c2goSil9ZnVuY3Rpb24gU3QoQyxqLEope3N0KEMpLHN0KGopLHN0KEopO2xldCBpdD1yLmxlbmd0aC8zLGV0PXAuZ2VuZXJhdGVUb3BVVihpLHIsaXQtMyxpdC0yLGl0LTEpO250KGV0WzBdKSxudChldFsxXSksbnQoZXRbMl0pfWZ1bmN0aW9uIEIoQyxqLEosaXQpe3N0KEMpLHN0KGopLHN0KGl0KSxzdChqKSxzdChKKSxzdChpdCk7bGV0IGV0PXIubGVuZ3RoLzMsdnQ9cC5nZW5lcmF0ZVNpZGVXYWxsVVYoaSxyLGV0LTYsZXQtMyxldC0yLGV0LTEpO250KHZ0WzBdKSxudCh2dFsxXSksbnQodnRbM10pLG50KHZ0WzFdKSxudCh2dFsyXSksbnQodnRbM10pfWZ1bmN0aW9uIHN0KEMpe3IucHVzaChsW0MqMyswXSksci5wdXNoKGxbQyozKzFdKSxyLnB1c2gobFtDKjMrMl0pfWZ1bmN0aW9uIG50KEMpe3MucHVzaChDLngpLHMucHVzaChDLnkpfX19dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCksZT10aGlzLnBhcmFtZXRlcnMuc2hhcGVzLGk9dGhpcy5wYXJhbWV0ZXJzLm9wdGlvbnM7cmV0dXJuIG9UKGUsaSx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IHM9MCxvPXQuc2hhcGVzLmxlbmd0aDtzPG87cysrKXtsZXQgYT1lW3Quc2hhcGVzW3NdXTtpLnB1c2goYSl9bGV0IHI9dC5vcHRpb25zLmV4dHJ1ZGVQYXRoO3JldHVybiByIT09dm9pZCAwJiYodC5vcHRpb25zLmV4dHJ1ZGVQYXRoPW5ldyBDMFtyLnR5cGVdKCkuZnJvbUpTT04ocikpLG5ldyBjaShpLHQub3B0aW9ucyl9fSxzVD17Z2VuZXJhdGVUb3BVVjpmdW5jdGlvbihuLHQsZSxpLHIpe2xldCBzPXRbZSozXSxvPXRbZSozKzFdLGE9dFtpKjNdLGw9dFtpKjMrMV0sYz10W3IqM10sdT10W3IqMysxXTtyZXR1cm5bbmV3IEsocyxvKSxuZXcgSyhhLGwpLG5ldyBLKGMsdSldfSxnZW5lcmF0ZVNpZGVXYWxsVVY6ZnVuY3Rpb24obix0LGUsaSxyLHMpe2xldCBvPXRbZSozXSxhPXRbZSozKzFdLGw9dFtlKjMrMl0sYz10W2kqM10sdT10W2kqMysxXSxoPXRbaSozKzJdLGY9dFtyKjNdLGQ9dFtyKjMrMV0sZz10W3IqMysyXSx4PXRbcyozXSx2PXRbcyozKzFdLG09dFtzKjMrMl07cmV0dXJuIE1hdGguYWJzKGEtdSk8TWF0aC5hYnMoby1jKT9bbmV3IEsobywxLWwpLG5ldyBLKGMsMS1oKSxuZXcgSyhmLDEtZyksbmV3IEsoeCwxLW0pXTpbbmV3IEsoYSwxLWwpLG5ldyBLKHUsMS1oKSxuZXcgSyhkLDEtZyksbmV3IEsodiwxLW0pXX19O2Z1bmN0aW9uIG9UKG4sdCxlKXtpZihlLnNoYXBlcz1bXSxBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgaT0wLHI9bi5sZW5ndGg7aTxyO2krKyl7bGV0IHM9bltpXTtlLnNoYXBlcy5wdXNoKHMudXVpZCl9ZWxzZSBlLnNoYXBlcy5wdXNoKG4udXVpZCk7cmV0dXJuIHQuZXh0cnVkZVBhdGghPT12b2lkIDAmJihlLm9wdGlvbnMuZXh0cnVkZVBhdGg9dC5leHRydWRlUGF0aC50b0pTT04oKSksZX12YXIgcWk9Y2xhc3MgZXh0ZW5kcyBIdHtjb25zdHJ1Y3Rvcih0PW5ldyBVbihbbmV3IEsoMCwuNSksbmV3IEsoLS41LC0uNSksbmV3IEsoLjUsLS41KV0pLGU9MTIpe3N1cGVyKCksdGhpcy50eXBlPSJTaGFwZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczp0LGN1cnZlU2VnbWVudHM6ZX07bGV0IGk9W10scj1bXSxzPVtdLG89W10sYT0wLGw9MDtpZihBcnJheS5pc0FycmF5KHQpPT09ITEpYyh0KTtlbHNlIGZvcihsZXQgdT0wO3U8dC5sZW5ndGg7dSsrKWModFt1XSksdGhpcy5hZGRHcm91cChhLGwsdSksYSs9bCxsPTA7dGhpcy5zZXRJbmRleChpKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZWUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZWUobywyKSk7ZnVuY3Rpb24gYyh1KXtsZXQgaD1yLmxlbmd0aC8zLGY9dS5leHRyYWN0UG9pbnRzKGUpLGQ9Zi5zaGFwZSxnPWYuaG9sZXM7ZG4uaXNDbG9ja1dpc2UoZCk9PT0hMSYmKGQ9ZC5yZXZlcnNlKCkpO2ZvcihsZXQgdj0wLG09Zy5sZW5ndGg7djxtO3YrKyl7bGV0IHA9Z1t2XTtkbi5pc0Nsb2NrV2lzZShwKT09PSEwJiYoZ1t2XT1wLnJldmVyc2UoKSl9bGV0IHg9ZG4udHJpYW5ndWxhdGVTaGFwZShkLGcpO2ZvcihsZXQgdj0wLG09Zy5sZW5ndGg7djxtO3YrKyl7bGV0IHA9Z1t2XTtkPWQuY29uY2F0KHApfWZvcihsZXQgdj0wLG09ZC5sZW5ndGg7djxtO3YrKyl7bGV0IHA9ZFt2XTtyLnB1c2gocC54LHAueSwwKSxzLnB1c2goMCwwLDEpLG8ucHVzaChwLngscC55KX1mb3IobGV0IHY9MCxtPXgubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPXhbdl0sYj1wWzBdK2gsXz1wWzFdK2gsUz1wWzJdK2g7aS5wdXNoKGIsXyxTKSxsKz0zfX19dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCksZT10aGlzLnBhcmFtZXRlcnMuc2hhcGVzO3JldHVybiBhVChlLHQpfXN0YXRpYyBmcm9tSlNPTih0LGUpe2xldCBpPVtdO2ZvcihsZXQgcj0wLHM9dC5zaGFwZXMubGVuZ3RoO3I8cztyKyspe2xldCBvPWVbdC5zaGFwZXNbcl1dO2kucHVzaChvKX1yZXR1cm4gbmV3IHFpKGksdC5jdXJ2ZVNlZ21lbnRzKX19O2Z1bmN0aW9uIGFUKG4sdCl7aWYodC5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MCxpPW4ubGVuZ3RoO2U8aTtlKyspe2xldCByPW5bZV07dC5zaGFwZXMucHVzaChyLnV1aWQpfWVsc2UgdC5zaGFwZXMucHVzaChuLnV1aWQpO3JldHVybiB0fXZhciBoaD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJTaGFkb3dNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMCksdGhpcy50cmFuc3BhcmVudD0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzfX07aGgucHJvdG90eXBlLmlzU2hhZG93TWF0ZXJpYWw9ITA7dmFyIHZsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLnR5cGU9Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5yb3VnaG5lc3M9MSx0aGlzLm1ldGFsbmVzcz0wLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5yb3VnaG5lc3NNYXA9bnVsbCx0aGlzLm1ldGFsbmVzc01hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuZW52TWFwSW50ZW5zaXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MsdGhpcy5tZXRhbG5lc3M9dC5tZXRhbG5lc3MsdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5yb3VnaG5lc3NNYXA9dC5yb3VnaG5lc3NNYXAsdGhpcy5tZXRhbG5lc3NNYXA9dC5tZXRhbG5lc3NNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuZW52TWFwSW50ZW5zaXR5PXQuZW52TWFwSW50ZW5zaXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07dmwucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITA7dmFyIGZoPWNsYXNzIGV4dGVuZHMgdmx7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLnR5cGU9Ik1lc2hQaHlzaWNhbE1hdGVyaWFsIix0aGlzLmNsZWFyY29hdE1hcD1udWxsLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPTAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9bnVsbCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9bnVsbCx0aGlzLmlvcj0xLjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInJlZmxlY3Rpdml0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBJZSgyLjUqKHRoaXMuaW9yLTEpLyh0aGlzLmlvcisxKSwwLDEpfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5pb3I9KDErLjQqZSkvKDEtLjQqZSl9fSksdGhpcy5zaGVlbkNvbG9yPW5ldyBmdCgwKSx0aGlzLnNoZWVuQ29sb3JNYXA9bnVsbCx0aGlzLnNoZWVuUm91Z2huZXNzPTEsdGhpcy5zaGVlblJvdWdobmVzc01hcD1udWxsLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy50aGlja25lc3M9MCx0aGlzLnRoaWNrbmVzc01hcD1udWxsLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT0wLHRoaXMuYXR0ZW51YXRpb25Db2xvcj1uZXcgZnQoMSwxLDEpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPW51bGwsdGhpcy5zcGVjdWxhckNvbG9yPW5ldyBmdCgxLDEsMSksdGhpcy5zcGVjdWxhckNvbG9yTWFwPW51bGwsdGhpcy5fc2hlZW49MCx0aGlzLl9jbGVhcmNvYXQ9MCx0aGlzLl90cmFuc21pc3Npb249MCx0aGlzLnNldFZhbHVlcyh0KX1nZXQgc2hlZW4oKXtyZXR1cm4gdGhpcy5fc2hlZW59c2V0IHNoZWVuKHQpe3RoaXMuX3NoZWVuPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fc2hlZW49dH1nZXQgY2xlYXJjb2F0KCl7cmV0dXJuIHRoaXMuX2NsZWFyY29hdH1zZXQgY2xlYXJjb2F0KHQpe3RoaXMuX2NsZWFyY29hdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2NsZWFyY29hdD10fWdldCB0cmFuc21pc3Npb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNtaXNzaW9ufXNldCB0cmFuc21pc3Npb24odCl7dGhpcy5fdHJhbnNtaXNzaW9uPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fdHJhbnNtaXNzaW9uPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5pb3I9dC5pb3IsdGhpcy5zaGVlbj10LnNoZWVuLHRoaXMuc2hlZW5Db2xvci5jb3B5KHQuc2hlZW5Db2xvciksdGhpcy5zaGVlbkNvbG9yTWFwPXQuc2hlZW5Db2xvck1hcCx0aGlzLnNoZWVuUm91Z2huZXNzPXQuc2hlZW5Sb3VnaG5lc3MsdGhpcy5zaGVlblJvdWdobmVzc01hcD10LnNoZWVuUm91Z2huZXNzTWFwLHRoaXMudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uLHRoaXMudHJhbnNtaXNzaW9uTWFwPXQudHJhbnNtaXNzaW9uTWFwLHRoaXMudGhpY2tuZXNzPXQudGhpY2tuZXNzLHRoaXMudGhpY2tuZXNzTWFwPXQudGhpY2tuZXNzTWFwLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UsdGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkodC5hdHRlbnVhdGlvbkNvbG9yKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PXQuc3BlY3VsYXJJbnRlbnNpdHksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD10LnNwZWN1bGFySW50ZW5zaXR5TWFwLHRoaXMuc3BlY3VsYXJDb2xvci5jb3B5KHQuc3BlY3VsYXJDb2xvciksdGhpcy5zcGVjdWxhckNvbG9yTWFwPXQuc3BlY3VsYXJDb2xvck1hcCx0aGlzfX07ZmgucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITA7dmFyIGRoPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hQaG9uZ01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5zcGVjdWxhcj1uZXcgZnQoMTExODQ4MSksdGhpcy5zaGluaW5lc3M9MzAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgZnQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPXRzLHRoaXMubm9ybWFsU2NhbGU9bmV3IEsoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPUNsLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5zcGVjdWxhci5jb3B5KHQuc3BlY3VsYXIpLHRoaXMuc2hpbmluZXNzPXQuc2hpbmluZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O2RoLnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwO3ZhciBwaD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtUT09OOiIifSx0aGlzLnR5cGU9Ik1lc2hUb29uTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuZ3JhZGllbnRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgZnQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPXRzLHRoaXMubm9ybWFsU2NhbGU9bmV3IEsoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5ncmFkaWVudE1hcD10LmdyYWRpZW50TWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX07cGgucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMDt2YXIgbWg9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaE5vcm1hbE1hdGVyaWFsIix0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPXRzLHRoaXMubm9ybWFsU2NhbGU9bmV3IEsoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07bWgucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwO3ZhciBnaD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgZnQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPUNsLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O2doLnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7dmFyIHhoPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLm1hdGNhcD1udWxsLHRoaXMubWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWF0Y2FwPXQubWF0Y2FwLHRoaXMubWFwPXQubWFwLHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07eGgucHJvdG90eXBlLmlzTWVzaE1hdGNhcE1hdGVyaWFsPSEwO3ZhciB5aD1jbGFzcyBleHRlbmRzIHpue2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiLHRoaXMuc2NhbGU9MSx0aGlzLmRhc2hTaXplPTMsdGhpcy5nYXBTaXplPTEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnNjYWxlPXQuc2NhbGUsdGhpcy5kYXNoU2l6ZT10LmRhc2hTaXplLHRoaXMuZ2FwU2l6ZT10LmdhcFNpemUsdGhpc319O3loLnByb3RvdHlwZS5pc0xpbmVEYXNoZWRNYXRlcmlhbD0hMDt2YXIgS3Q9e2FycmF5U2xpY2U6ZnVuY3Rpb24obix0LGUpe3JldHVybiBLdC5pc1R5cGVkQXJyYXkobik/bmV3IG4uY29uc3RydWN0b3Iobi5zdWJhcnJheSh0LGUhPT12b2lkIDA/ZTpuLmxlbmd0aCkpOm4uc2xpY2UodCxlKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4hbnx8IWUmJm4uY29uc3RydWN0b3I9PT10P246dHlwZW9mIHQuQllURVNfUEVSX0VMRU1FTlQ9PSJudW1iZXIiP25ldyB0KG4pOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pfSxpc1R5cGVkQXJyYXk6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSxnZXRLZXlmcmFtZU9yZGVyOmZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQocixzKXtyZXR1cm4gbltyXS1uW3NdfWxldCBlPW4ubGVuZ3RoLGk9bmV3IEFycmF5KGUpO2ZvcihsZXQgcj0wO3IhPT1lOysrcilpW3JdPXI7cmV0dXJuIGkuc29ydCh0KSxpfSxzb3J0ZWRBcnJheTpmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5sZW5ndGgscj1uZXcgbi5jb25zdHJ1Y3RvcihpKTtmb3IobGV0IHM9MCxvPTA7byE9PWk7KytzKXtsZXQgYT1lW3NdKnQ7Zm9yKGxldCBsPTA7bCE9PXQ7KytsKXJbbysrXT1uW2ErbF19cmV0dXJuIHJ9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPTEscz1uWzBdO2Zvcig7cyE9PXZvaWQgMCYmc1tpXT09PXZvaWQgMDspcz1uW3IrK107aWYocz09PXZvaWQgMClyZXR1cm47bGV0IG89c1tpXTtpZihvIT09dm9pZCAwKWlmKEFycmF5LmlzQXJyYXkobykpZG8gbz1zW2ldLG8hPT12b2lkIDAmJih0LnB1c2gocy50aW1lKSxlLnB1c2guYXBwbHkoZSxvKSkscz1uW3IrK107d2hpbGUocyE9PXZvaWQgMCk7ZWxzZSBpZihvLnRvQXJyYXkhPT12b2lkIDApZG8gbz1zW2ldLG8hPT12b2lkIDAmJih0LnB1c2gocy50aW1lKSxvLnRvQXJyYXkoZSxlLmxlbmd0aCkpLHM9bltyKytdO3doaWxlKHMhPT12b2lkIDApO2Vsc2UgZG8gbz1zW2ldLG8hPT12b2lkIDAmJih0LnB1c2gocy50aW1lKSxlLnB1c2gobykpLHM9bltyKytdO3doaWxlKHMhPT12b2lkIDApfSxzdWJjbGlwOmZ1bmN0aW9uKG4sdCxlLGkscj0zMCl7bGV0IHM9bi5jbG9uZSgpO3MubmFtZT10O2xldCBvPVtdO2ZvcihsZXQgbD0wO2w8cy50cmFja3MubGVuZ3RoOysrbCl7bGV0IGM9cy50cmFja3NbbF0sdT1jLmdldFZhbHVlU2l6ZSgpLGg9W10sZj1bXTtmb3IobGV0IGQ9MDtkPGMudGltZXMubGVuZ3RoOysrZCl7bGV0IGc9Yy50aW1lc1tkXSpyO2lmKCEoZzxlfHxnPj1pKSl7aC5wdXNoKGMudGltZXNbZF0pO2ZvcihsZXQgeD0wO3g8dTsrK3gpZi5wdXNoKGMudmFsdWVzW2QqdSt4XSl9fWgubGVuZ3RoIT09MCYmKGMudGltZXM9S3QuY29udmVydEFycmF5KGgsYy50aW1lcy5jb25zdHJ1Y3RvciksYy52YWx1ZXM9S3QuY29udmVydEFycmF5KGYsYy52YWx1ZXMuY29uc3RydWN0b3IpLG8ucHVzaChjKSl9cy50cmFja3M9bztsZXQgYT0xLzA7Zm9yKGxldCBsPTA7bDxzLnRyYWNrcy5sZW5ndGg7KytsKWE+cy50cmFja3NbbF0udGltZXNbMF0mJihhPXMudHJhY2tzW2xdLnRpbWVzWzBdKTtmb3IobGV0IGw9MDtsPHMudHJhY2tzLmxlbmd0aDsrK2wpcy50cmFja3NbbF0uc2hpZnQoLTEqYSk7cmV0dXJuIHMucmVzZXREdXJhdGlvbigpLHN9LG1ha2VDbGlwQWRkaXRpdmU6ZnVuY3Rpb24obix0PTAsZT1uLGk9MzApe2k8PTAmJihpPTMwKTtsZXQgcj1lLnRyYWNrcy5sZW5ndGgscz10L2k7Zm9yKGxldCBvPTA7bzxyOysrbyl7bGV0IGE9ZS50cmFja3Nbb10sbD1hLlZhbHVlVHlwZU5hbWU7aWYobD09PSJib29sInx8bD09PSJzdHJpbmciKWNvbnRpbnVlO2xldCBjPW4udHJhY2tzLmZpbmQoZnVuY3Rpb24obSl7cmV0dXJuIG0ubmFtZT09PWEubmFtZSYmbS5WYWx1ZVR5cGVOYW1lPT09bH0pO2lmKGM9PT12b2lkIDApY29udGludWU7bGV0IHU9MCxoPWEuZ2V0VmFsdWVTaXplKCk7YS5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHU9aC8zKTtsZXQgZj0wLGQ9Yy5nZXRWYWx1ZVNpemUoKTtjLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYoZj1kLzMpO2xldCBnPWEudGltZXMubGVuZ3RoLTEseDtpZihzPD1hLnRpbWVzWzBdKXtsZXQgbT11LHA9aC11O3g9S3QuYXJyYXlTbGljZShhLnZhbHVlcyxtLHApfWVsc2UgaWYocz49YS50aW1lc1tnXSl7bGV0IG09ZypoK3UscD1tK2gtdTt4PUt0LmFycmF5U2xpY2UoYS52YWx1ZXMsbSxwKX1lbHNle2xldCBtPWEuY3JlYXRlSW50ZXJwb2xhbnQoKSxwPXUsYj1oLXU7bS5ldmFsdWF0ZShzKSx4PUt0LmFycmF5U2xpY2UobS5yZXN1bHRCdWZmZXIscCxiKX1sPT09InF1YXRlcm5pb24iJiZuZXcgRWUoKS5mcm9tQXJyYXkoeCkubm9ybWFsaXplKCkuY29uanVnYXRlKCkudG9BcnJheSh4KTtsZXQgdj1jLnRpbWVzLmxlbmd0aDtmb3IobGV0IG09MDttPHY7KyttKXtsZXQgcD1tKmQrZjtpZihsPT09InF1YXRlcm5pb24iKUVlLm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KGMudmFsdWVzLHAseCwwLGMudmFsdWVzLHApO2Vsc2V7bGV0IGI9ZC1mKjI7Zm9yKGxldCBfPTA7XzxiOysrXyljLnZhbHVlc1twK19dLT14W19dfX19cmV0dXJuIG4uYmxlbmRNb2RlPWQwLG59fSxwbj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9ciE9PXZvaWQgMD9yOm5ldyBlLmNvbnN0cnVjdG9yKGkpLHRoaXMuc2FtcGxlVmFsdWVzPWUsdGhpcy52YWx1ZVNpemU9aSx0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCBlPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLGk9dGhpcy5fY2FjaGVkSW5kZXgscj1lW2ldLHM9ZVtpLTFdO3Q6e2U6e2xldCBvO246e2k6aWYoISh0PHIpKXtmb3IobGV0IGE9aSsyOzspe2lmKHI9PT12b2lkIDApe2lmKHQ8cylicmVhayBpO3JldHVybiBpPWUubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5hZnRlckVuZF8oaS0xLHQscyl9aWYoaT09PWEpYnJlYWs7aWYocz1yLHI9ZVsrK2ldLHQ8cilicmVhayBlfW89ZS5sZW5ndGg7YnJlYWsgbn1pZighKHQ+PXMpKXtsZXQgYT1lWzFdO3Q8YSYmKGk9MixzPWEpO2ZvcihsZXQgbD1pLTI7Oyl7aWYocz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQscik7aWYoaT09PWwpYnJlYWs7aWYocj1zLHM9ZVstLWktMV0sdD49cylicmVhayBlfW89aSxpPTA7YnJlYWsgbn1icmVhayB0fWZvcig7aTxvOyl7bGV0IGE9aStvPj4+MTt0PGVbYV0/bz1hOmk9YSsxfWlmKHI9ZVtpXSxzPWVbaS0xXSxzPT09dm9pZCAwKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxyKTtpZihyPT09dm9pZCAwKXJldHVybiBpPWUubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5hZnRlckVuZF8oaS0xLHMsdCl9dGhpcy5fY2FjaGVkSW5kZXg9aSx0aGlzLmludGVydmFsQ2hhbmdlZF8oaSxzLHIpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhpLHMsdCxyKX1nZXRTZXR0aW5nc18oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffWNvcHlTYW1wbGVWYWx1ZV8odCl7bGV0IGU9dGhpcy5yZXN1bHRCdWZmZXIsaT10aGlzLnNhbXBsZVZhbHVlcyxyPXRoaXMudmFsdWVTaXplLHM9dCpyO2ZvcihsZXQgbz0wO28hPT1yOysrbyllW29dPWlbcytvXTtyZXR1cm4gZX1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319O3BuLnByb3RvdHlwZS5iZWZvcmVTdGFydF89cG4ucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87cG4ucHJvdG90eXBlLmFmdGVyRW5kXz1wbi5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXzt2YXIgdmg9Y2xhc3MgZXh0ZW5kcyBwbntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKSx0aGlzLl93ZWlnaHRQcmV2PS0wLHRoaXMuX29mZnNldFByZXY9LTAsdGhpcy5fd2VpZ2h0TmV4dD0tMCx0aGlzLl9vZmZzZXROZXh0PS0wLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17ZW5kaW5nU3RhcnQ6TnIsZW5kaW5nRW5kOk5yfX1pbnRlcnZhbENoYW5nZWRfKHQsZSxpKXtsZXQgcj10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxzPXQtMixvPXQrMSxhPXJbc10sbD1yW29dO2lmKGE9PT12b2lkIDApc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2UgRnI6cz10LGE9MiplLWk7YnJlYWs7Y2FzZSBlbDpzPXIubGVuZ3RoLTIsYT1lK3Jbc10tcltzKzFdO2JyZWFrO2RlZmF1bHQ6cz10LGE9aX1pZihsPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ0VuZCl7Y2FzZSBGcjpvPXQsbD0yKmktZTticmVhaztjYXNlIGVsOm89MSxsPWkrclsxXS1yWzBdO2JyZWFrO2RlZmF1bHQ6bz10LTEsbD1lfWxldCBjPShpLWUpKi41LHU9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhlLWEpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1pKSx0aGlzLl9vZmZzZXRQcmV2PXMqdSx0aGlzLl9vZmZzZXROZXh0PW8qdX1pbnRlcnBvbGF0ZV8odCxlLGkscil7bGV0IHM9dGhpcy5yZXN1bHRCdWZmZXIsbz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLGw9dCphLGM9bC1hLHU9dGhpcy5fb2Zmc2V0UHJldixoPXRoaXMuX29mZnNldE5leHQsZj10aGlzLl93ZWlnaHRQcmV2LGQ9dGhpcy5fd2VpZ2h0TmV4dCxnPShpLWUpLyhyLWUpLHg9ZypnLHY9eCpnLG09LWYqdisyKmYqeC1mKmcscD0oMStmKSp2KygtMS41LTIqZikqeCsoLS41K2YpKmcrMSxiPSgtMS1kKSp2KygxLjUrZCkqeCsuNSpnLF89ZCp2LWQqeDtmb3IobGV0IFM9MDtTIT09YTsrK1Mpc1tTXT1tKm9bdStTXStwKm9bYytTXStiKm9bbCtTXStfKm9baCtTXTtyZXR1cm4gc319LF9sPWNsYXNzIGV4dGVuZHMgcG57Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBzPXRoaXMucmVzdWx0QnVmZmVyLG89dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSx1PShpLWUpLyhyLWUpLGg9MS11O2ZvcihsZXQgZj0wO2YhPT1hOysrZilzW2ZdPW9bYytmXSpoK29bbCtmXSp1O3JldHVybiBzfX0sX2g9Y2xhc3MgZXh0ZW5kcyBwbntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sWGU9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYoZT09PXZvaWQgMHx8ZS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1LdC5jb252ZXJ0QXJyYXkoZSx0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1LdC5jb252ZXJ0QXJyYXkoaSx0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHJ8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IGU9dC5jb25zdHJ1Y3RvcixpO2lmKGUudG9KU09OIT09dGhpcy50b0pTT04paT1lLnRvSlNPTih0KTtlbHNle2k9e25hbWU6dC5uYW1lLHRpbWVzOkt0LmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6S3QuY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IHI9dC5nZXRJbnRlcnBvbGF0aW9uKCk7ciE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihpLmludGVycG9sYXRpb249cil9cmV0dXJuIGkudHlwZT10LlZhbHVlVHlwZU5hbWUsaX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IF9oKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBfbCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgdmgodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgamE6ZT10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlO2JyZWFrO2Nhc2UgdGw6ZT10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjticmVhaztjYXNlIGV1OmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg7YnJlYWt9aWYoZT09PXZvaWQgMCl7bGV0IGk9InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodGhpcy5jcmVhdGVJbnRlcnBvbGFudD09PXZvaWQgMClpZih0IT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoaSk7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuS2V5ZnJhbWVUcmFjazoiLGkpLHRoaXN9cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9ZSx0aGlzfWdldEludGVycG9sYXRpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiBqYTtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnJldHVybiB0bDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiBldX19Z2V0VmFsdWVTaXplKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH1zaGlmdCh0KXtpZih0IT09MCl7bGV0IGU9dGhpcy50aW1lcztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSllW2ldKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKHQhPT0xKXtsZXQgZT10aGlzLnRpbWVzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKWVbaV0qPXR9cmV0dXJuIHRoaXN9dHJpbSh0LGUpe2xldCBpPXRoaXMudGltZXMscj1pLmxlbmd0aCxzPTAsbz1yLTE7Zm9yKDtzIT09ciYmaVtzXTx0OykrK3M7Zm9yKDtvIT09LTEmJmlbb10+ZTspLS1vO2lmKCsrbyxzIT09MHx8byE9PXIpe3M+PW8mJihvPU1hdGgubWF4KG8sMSkscz1vLTEpO2xldCBhPXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1LdC5hcnJheVNsaWNlKGkscyxvKSx0aGlzLnZhbHVlcz1LdC5hcnJheVNsaWNlKHRoaXMudmFsdWVzLHMqYSxvKmEpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITAsZT10aGlzLmdldFZhbHVlU2l6ZSgpO2UtTWF0aC5mbG9vcihlKSE9PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suIix0aGlzKSx0PSExKTtsZXQgaT10aGlzLnRpbWVzLHI9dGhpcy52YWx1ZXMscz1pLmxlbmd0aDtzPT09MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRyYWNrIGlzIGVtcHR5LiIsdGhpcyksdD0hMSk7bGV0IG89bnVsbDtmb3IobGV0IGE9MDthIT09czthKyspe2xldCBsPWlbYV07aWYodHlwZW9mIGw9PSJudW1iZXIiJiZpc05hTihsKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLGEsbCksdD0hMTticmVha31pZihvIT09bnVsbCYmbz5sKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMsYSxsLG8pLHQ9ITE7YnJlYWt9bz1sfWlmKHIhPT12b2lkIDAmJkt0LmlzVHlwZWRBcnJheShyKSlmb3IobGV0IGE9MCxsPXIubGVuZ3RoO2EhPT1sOysrYSl7bGV0IGM9clthXTtpZihpc05hTihjKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxhLGMpLHQ9ITE7YnJlYWt9fXJldHVybiB0fW9wdGltaXplKCl7bGV0IHQ9S3QuYXJyYXlTbGljZSh0aGlzLnRpbWVzKSxlPUt0LmFycmF5U2xpY2UodGhpcy52YWx1ZXMpLGk9dGhpcy5nZXRWYWx1ZVNpemUoKSxyPXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpPT09ZXUscz10Lmxlbmd0aC0xLG89MTtmb3IobGV0IGE9MTthPHM7KythKXtsZXQgbD0hMSxjPXRbYV0sdT10W2ErMV07aWYoYyE9PXUmJihhIT09MXx8YyE9PXRbMF0pKWlmKHIpbD0hMDtlbHNle2xldCBoPWEqaSxmPWgtaSxkPWgraTtmb3IobGV0IGc9MDtnIT09aTsrK2cpe2xldCB4PWVbaCtnXTtpZih4IT09ZVtmK2ddfHx4IT09ZVtkK2ddKXtsPSEwO2JyZWFrfX19aWYobCl7aWYoYSE9PW8pe3Rbb109dFthXTtsZXQgaD1hKmksZj1vKmk7Zm9yKGxldCBkPTA7ZCE9PWk7KytkKWVbZitkXT1lW2grZF19KytvfX1pZihzPjApe3Rbb109dFtzXTtmb3IobGV0IGE9cyppLGw9byppLGM9MDtjIT09aTsrK2MpZVtsK2NdPWVbYStjXTsrK299cmV0dXJuIG8hPT10Lmxlbmd0aD8odGhpcy50aW1lcz1LdC5hcnJheVNsaWNlKHQsMCxvKSx0aGlzLnZhbHVlcz1LdC5hcnJheVNsaWNlKGUsMCxvKmkpKToodGhpcy50aW1lcz10LHRoaXMudmFsdWVzPWUpLHRoaXN9Y2xvbmUoKXtsZXQgdD1LdC5hcnJheVNsaWNlKHRoaXMudGltZXMsMCksZT1LdC5hcnJheVNsaWNlKHRoaXMudmFsdWVzLDApLGk9dGhpcy5jb25zdHJ1Y3RvcixyPW5ldyBpKHRoaXMubmFtZSx0LGUpO3JldHVybiByLmNyZWF0ZUludGVycG9sYW50PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQscn19O1hlLnByb3RvdHlwZS5UaW1lQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7WGUucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7WGUucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPXRsO3ZhciB1aT1jbGFzcyBleHRlbmRzIFhle307dWkucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiO3VpLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXk7dWkucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPWphO3VpLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwO3VpLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciB3bD1jbGFzcyBleHRlbmRzIFhle307d2wucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImNvbG9yIjt2YXIgS3I9Y2xhc3MgZXh0ZW5kcyBYZXt9O0tyLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO3ZhciB3aD1jbGFzcyBleHRlbmRzIHBue2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgcz10aGlzLnJlc3VsdEJ1ZmZlcixvPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUsbD0oaS1lKS8oci1lKSxjPXQqYTtmb3IobGV0IHU9YythO2MhPT11O2MrPTQpRWUuc2xlcnBGbGF0KHMsMCxvLGMtYSxvLGMsbCk7cmV0dXJuIHN9fSxYaT1jbGFzcyBleHRlbmRzIFhle0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IHdoKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX19O1hpLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJxdWF0ZXJuaW9uIjtYaS5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249dGw7WGkucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIGhpPWNsYXNzIGV4dGVuZHMgWGV7fTtoaS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ic3RyaW5nIjtoaS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O2hpLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1qYTtoaS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDtoaS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgUXI9Y2xhc3MgZXh0ZW5kcyBYZXt9O1FyLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciBNbD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9LTEsaSxyPVFoKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1pLHRoaXMuZHVyYXRpb249ZSx0aGlzLmJsZW5kTW9kZT1yLHRoaXMudXVpZD10bigpLHRoaXMuZHVyYXRpb248MCYmdGhpcy5yZXNldER1cmF0aW9uKCl9c3RhdGljIHBhcnNlKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj0xLyh0LmZwc3x8MSk7Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvIT09YTsrK28pZS5wdXNoKGNUKGlbb10pLnNjYWxlKHIpKTtsZXQgcz1uZXcgdGhpcyh0Lm5hbWUsdC5kdXJhdGlvbixlLHQuYmxlbmRNb2RlKTtyZXR1cm4gcy51dWlkPXQudXVpZCxzfXN0YXRpYyB0b0pTT04odCl7bGV0IGU9W10saT10LnRyYWNrcyxyPXtuYW1lOnQubmFtZSxkdXJhdGlvbjp0LmR1cmF0aW9uLHRyYWNrczplLHV1aWQ6dC51dWlkLGJsZW5kTW9kZTp0LmJsZW5kTW9kZX07Zm9yKGxldCBzPTAsbz1pLmxlbmd0aDtzIT09bzsrK3MpZS5wdXNoKFhlLnRvSlNPTihpW3NdKSk7cmV0dXJuIHJ9c3RhdGljIENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHQsZSxpLHIpe2xldCBzPWUubGVuZ3RoLG89W107Zm9yKGxldCBhPTA7YTxzO2ErKyl7bGV0IGw9W10sYz1bXTtsLnB1c2goKGErcy0xKSVzLGEsKGErMSklcyksYy5wdXNoKDAsMSwwKTtsZXQgdT1LdC5nZXRLZXlmcmFtZU9yZGVyKGwpO2w9S3Quc29ydGVkQXJyYXkobCwxLHUpLGM9S3Quc29ydGVkQXJyYXkoYywxLHUpLCFyJiZsWzBdPT09MCYmKGwucHVzaChzKSxjLnB1c2goY1swXSkpLG8ucHVzaChuZXcgS3IoIi5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIitlW2FdLm5hbWUrIl0iLGwsYykuc2NhbGUoMS9pKSl9cmV0dXJuIG5ldyB0aGlzKHQsLTEsbyl9c3RhdGljIGZpbmRCeU5hbWUodCxlKXtsZXQgaT10O2lmKCFBcnJheS5pc0FycmF5KHQpKXtsZXQgcj10O2k9ci5nZW9tZXRyeSYmci5nZW9tZXRyeS5hbmltYXRpb25zfHxyLmFuaW1hdGlvbnN9Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaWYoaVtyXS5uYW1lPT09ZSlyZXR1cm4gaVtyXTtyZXR1cm4gbnVsbH1zdGF0aWMgQ3JlYXRlQ2xpcHNGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZXModCxlLGkpe2xldCByPXt9LHM9L14oW1x3LV0qPykoW1xkXSspJC87Zm9yKGxldCBhPTAsbD10Lmxlbmd0aDthPGw7YSsrKXtsZXQgYz10W2FdLHU9Yy5uYW1lLm1hdGNoKHMpO2lmKHUmJnUubGVuZ3RoPjEpe2xldCBoPXVbMV0sZj1yW2hdO2Z8fChyW2hdPWY9W10pLGYucHVzaChjKX19bGV0IG89W107Zm9yKGxldCBhIGluIHIpby5wdXNoKHRoaXMuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UoYSxyW2FdLGUsaSkpO3JldHVybiBvfXN0YXRpYyBwYXJzZUFuaW1hdGlvbih0LGUpe2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLiIpLG51bGw7bGV0IGk9ZnVuY3Rpb24oaCxmLGQsZyx4KXtpZihkLmxlbmd0aCE9PTApe2xldCB2PVtdLG09W107S3QuZmxhdHRlbkpTT04oZCx2LG0sZyksdi5sZW5ndGghPT0wJiZ4LnB1c2gobmV3IGgoZix2LG0pKX19LHI9W10scz10Lm5hbWV8fCJkZWZhdWx0IixvPXQuZnBzfHwzMCxhPXQuYmxlbmRNb2RlLGw9dC5sZW5ndGh8fC0xLGM9dC5oaWVyYXJjaHl8fFtdO2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7aCsrKXtsZXQgZj1jW2hdLmtleXM7aWYoISghZnx8Zi5sZW5ndGg9PT0wKSlpZihmWzBdLm1vcnBoVGFyZ2V0cyl7bGV0IGQ9e30sZztmb3IoZz0wO2c8Zi5sZW5ndGg7ZysrKWlmKGZbZ10ubW9ycGhUYXJnZXRzKWZvcihsZXQgeD0wO3g8ZltnXS5tb3JwaFRhcmdldHMubGVuZ3RoO3grKylkW2ZbZ10ubW9ycGhUYXJnZXRzW3hdXT0tMTtmb3IobGV0IHggaW4gZCl7bGV0IHY9W10sbT1bXTtmb3IobGV0IHA9MDtwIT09ZltnXS5tb3JwaFRhcmdldHMubGVuZ3RoOysrcCl7bGV0IGI9ZltnXTt2LnB1c2goYi50aW1lKSxtLnB1c2goYi5tb3JwaFRhcmdldD09PXg/MTowKX1yLnB1c2gobmV3IEtyKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VbIit4KyJdIix2LG0pKX1sPWQubGVuZ3RoKihvfHwxKX1lbHNle2xldCBkPSIuYm9uZXNbIitlW2hdLm5hbWUrIl0iO2koUXIsZCsiLnBvc2l0aW9uIixmLCJwb3MiLHIpLGkoWGksZCsiLnF1YXRlcm5pb24iLGYsInJvdCIsciksaShRcixkKyIuc2NhbGUiLGYsInNjbCIscil9fXJldHVybiByLmxlbmd0aD09PTA/bnVsbDpuZXcgdGhpcyhzLGwscixhKX1yZXNldER1cmF0aW9uKCl7bGV0IHQ9dGhpcy50cmFja3MsZT0wO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz10aGlzLnRyYWNrc1tpXTtlPU1hdGgubWF4KGUscy50aW1lc1tzLnRpbWVzLmxlbmd0aC0xXSl9cmV0dXJuIHRoaXMuZHVyYXRpb249ZSx0aGlzfXRyaW0oKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0udHJpbSgwLHRoaXMuZHVyYXRpb24pO3JldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITA7Zm9yKGxldCBlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKXQ9dCYmdGhpcy50cmFja3NbZV0udmFsaWRhdGUoKTtyZXR1cm4gdH1vcHRpbWl6ZSgpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS5vcHRpbWl6ZSgpO3JldHVybiB0aGlzfWNsb25lKCl7bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKXQucHVzaCh0aGlzLnRyYWNrc1tlXS5jbG9uZSgpKTtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5uYW1lLHRoaXMuZHVyYXRpb24sdCx0aGlzLmJsZW5kTW9kZSl9dG9KU09OKCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9KU09OKHRoaXMpfX07ZnVuY3Rpb24gbFQobil7c3dpdGNoKG4udG9Mb3dlckNhc2UoKSl7Y2FzZSJzY2FsYXIiOmNhc2UiZG91YmxlIjpjYXNlImZsb2F0IjpjYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjpyZXR1cm4gS3I7Y2FzZSJ2ZWN0b3IiOmNhc2UidmVjdG9yMiI6Y2FzZSJ2ZWN0b3IzIjpjYXNlInZlY3RvcjQiOnJldHVybiBRcjtjYXNlImNvbG9yIjpyZXR1cm4gd2w7Y2FzZSJxdWF0ZXJuaW9uIjpyZXR1cm4gWGk7Y2FzZSJib29sIjpjYXNlImJvb2xlYW4iOnJldHVybiB1aTtjYXNlInN0cmluZyI6cmV0dXJuIGhpfXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVW5zdXBwb3J0ZWQgdHlwZU5hbWU6ICIrbil9ZnVuY3Rpb24gY1Qobil7aWYobi50eXBlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtsZXQgdD1sVChuLnR5cGUpO2lmKG4udGltZXM9PT12b2lkIDApe2xldCBlPVtdLGk9W107S3QuZmxhdHRlbkpTT04obi5rZXlzLGUsaSwidmFsdWUiKSxuLnRpbWVzPWUsbi52YWx1ZXM9aX1yZXR1cm4gdC5wYXJzZSE9PXZvaWQgMD90LnBhcnNlKG4pOm5ldyB0KG4ubmFtZSxuLnRpbWVzLG4udmFsdWVzLG4uaW50ZXJwb2xhdGlvbil9dmFyIGpyPXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbihuLHQpe3RoaXMuZW5hYmxlZCE9PSExJiYodGhpcy5maWxlc1tuXT10KX0sZ2V0OmZ1bmN0aW9uKG4pe2lmKHRoaXMuZW5hYmxlZCE9PSExKXJldHVybiB0aGlzLmZpbGVzW25dfSxyZW1vdmU6ZnVuY3Rpb24obil7ZGVsZXRlIHRoaXMuZmlsZXNbbl19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19LE1oPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcj10aGlzLHM9ITEsbz0wLGE9MCxsLGM9W107dGhpcy5vblN0YXJ0PXZvaWQgMCx0aGlzLm9uTG9hZD10LHRoaXMub25Qcm9ncmVzcz1lLHRoaXMub25FcnJvcj1pLHRoaXMuaXRlbVN0YXJ0PWZ1bmN0aW9uKHUpe2ErKyxzPT09ITEmJnIub25TdGFydCE9PXZvaWQgMCYmci5vblN0YXJ0KHUsbyxhKSxzPSEwfSx0aGlzLml0ZW1FbmQ9ZnVuY3Rpb24odSl7bysrLHIub25Qcm9ncmVzcyE9PXZvaWQgMCYmci5vblByb2dyZXNzKHUsbyxhKSxvPT09YSYmKHM9ITEsci5vbkxvYWQhPT12b2lkIDAmJnIub25Mb2FkKCkpfSx0aGlzLml0ZW1FcnJvcj1mdW5jdGlvbih1KXtyLm9uRXJyb3IhPT12b2lkIDAmJnIub25FcnJvcih1KX0sdGhpcy5yZXNvbHZlVVJMPWZ1bmN0aW9uKHUpe3JldHVybiBsP2wodSk6dX0sdGhpcy5zZXRVUkxNb2RpZmllcj1mdW5jdGlvbih1KXtyZXR1cm4gbD11LHRoaXN9LHRoaXMuYWRkSGFuZGxlcj1mdW5jdGlvbih1LGgpe3JldHVybiBjLnB1c2godSxoKSx0aGlzfSx0aGlzLnJlbW92ZUhhbmRsZXI9ZnVuY3Rpb24odSl7bGV0IGg9Yy5pbmRleE9mKHUpO3JldHVybiBoIT09LTEmJmMuc3BsaWNlKGgsMiksdGhpc30sdGhpcy5nZXRIYW5kbGVyPWZ1bmN0aW9uKHUpe2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grPTIpe2xldCBkPWNbaF0sZz1jW2grMV07aWYoZC5nbG9iYWwmJihkLmxhc3RJbmRleD0wKSxkLnRlc3QodSkpcmV0dXJuIGd9cmV0dXJuIG51bGx9fX0sdVQ9bmV3IE1oLG1uPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubWFuYWdlcj10IT09dm9pZCAwP3Q6dVQsdGhpcy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnBhdGg9IiIsdGhpcy5yZXNvdXJjZVBhdGg9IiIsdGhpcy5yZXF1ZXN0SGVhZGVyPXt9fWxvYWQoKXt9bG9hZEFzeW5jKHQsZSl7bGV0IGk9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixzKXtpLmxvYWQodCxyLGUscyl9KX1wYXJzZSgpe31zZXRDcm9zc09yaWdpbih0KXtyZXR1cm4gdGhpcy5jcm9zc09yaWdpbj10LHRoaXN9c2V0V2l0aENyZWRlbnRpYWxzKHQpe3JldHVybiB0aGlzLndpdGhDcmVkZW50aWFscz10LHRoaXN9c2V0UGF0aCh0KXtyZXR1cm4gdGhpcy5wYXRoPXQsdGhpc31zZXRSZXNvdXJjZVBhdGgodCl7cmV0dXJuIHRoaXMucmVzb3VyY2VQYXRoPXQsdGhpc31zZXRSZXF1ZXN0SGVhZGVyKHQpe3JldHVybiB0aGlzLnJlcXVlc3RIZWFkZXI9dCx0aGlzfX0sRG49e30sYmg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe3Q9PT12b2lkIDAmJih0PSIiKSx0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBzPWpyLmdldCh0KTtpZihzIT09dm9pZCAwKXJldHVybiB0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKCk9PntlJiZlKHMpLHRoaXMubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxzO2lmKERuW3RdIT09dm9pZCAwKXtEblt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7cmV0dXJufURuW3RdPVtdLERuW3RdLnB1c2goe29uTG9hZDplLG9uUHJvZ3Jlc3M6aSxvbkVycm9yOnJ9KTtsZXQgbz1uZXcgUmVxdWVzdCh0LHtoZWFkZXJzOm5ldyBIZWFkZXJzKHRoaXMucmVxdWVzdEhlYWRlciksY3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiJ9KSxhPXRoaXMubWltZVR5cGUsbD10aGlzLnJlc3BvbnNlVHlwZTtmZXRjaChvKS50aGVuKGM9PntpZihjLnN0YXR1cz09PTIwMHx8Yy5zdGF0dXM9PT0wKXtpZihjLnN0YXR1cz09PTAmJmNvbnNvbGUud2FybigiVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4iKSx0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJ1bmRlZmluZWQifHxjLmJvZHkuZ2V0UmVhZGVyPT09dm9pZCAwKXJldHVybiBjO2xldCB1PURuW3RdLGg9Yy5ib2R5LmdldFJlYWRlcigpLGY9Yy5oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiKSxkPWY/cGFyc2VJbnQoZik6MCxnPWQhPT0wLHg9MCx2PW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQobSl7cCgpO2Z1bmN0aW9uIHAoKXtoLnJlYWQoKS50aGVuKCh7ZG9uZTpiLHZhbHVlOl99KT0+e2lmKGIpbS5jbG9zZSgpO2Vsc2V7eCs9Xy5ieXRlTGVuZ3RoO2xldCBTPW5ldyBQcm9ncmVzc0V2ZW50KCJwcm9ncmVzcyIse2xlbmd0aENvbXB1dGFibGU6Zyxsb2FkZWQ6eCx0b3RhbDpkfSk7Zm9yKGxldCBMPTAsQT11Lmxlbmd0aDtMPEE7TCsrKXtsZXQgSD11W0xdO0gub25Qcm9ncmVzcyYmSC5vblByb2dyZXNzKFMpfW0uZW5xdWV1ZShfKSxwKCl9fSl9fX0pO3JldHVybiBuZXcgUmVzcG9uc2Uodil9ZWxzZSB0aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh1LGEpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKGE9PT12b2lkIDApcmV0dXJuIGMudGV4dCgpO3tsZXQgaD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMoYSksZj1oJiZoWzFdP2hbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAsZD1uZXcgVGV4dERlY29kZXIoZik7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGc9PmQuZGVjb2RlKGcpKX19fSkudGhlbihjPT57anIuYWRkKHQsYyk7bGV0IHU9RG5bdF07ZGVsZXRlIERuW3RdO2ZvcihsZXQgaD0wLGY9dS5sZW5ndGg7aDxmO2grKyl7bGV0IGQ9dVtoXTtkLm9uTG9hZCYmZC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PURuW3RdO2lmKHU9PT12b2lkIDApdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBEblt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBkPXVbaF07ZC5vbkVycm9yJiZkLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX07dmFyIGJsPWNsYXNzIGV4dGVuZHMgbW57Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXt0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBzPXRoaXMsbz1qci5nZXQodCk7aWYobyE9PXZvaWQgMClyZXR1cm4gcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZSYmZShvKSxzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksbztsZXQgYT1ybygiaW1nIik7ZnVuY3Rpb24gbCgpe3UoKSxqci5hZGQodCx0aGlzKSxlJiZlKHRoaXMpLHMubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIGMoaCl7dSgpLHImJnIoaCkscy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxzLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiB1KCl7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKX1yZXR1cm4gYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKSx0LnN1YnN0cigwLDUpIT09ImRhdGE6IiYmdGhpcy5jcm9zc09yaWdpbiE9PXZvaWQgMCYmKGEuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbikscy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxhLnNyYz10LGF9fSxTaD1jbGFzcyBleHRlbmRzIG1ue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7bGV0IHM9bmV3IFdyLG89bmV3IGJsKHRoaXMubWFuYWdlcik7by5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKSxvLnNldFBhdGgodGhpcy5wYXRoKTtsZXQgYT0wO2Z1bmN0aW9uIGwoYyl7by5sb2FkKHRbY10sZnVuY3Rpb24odSl7cy5pbWFnZXNbY109dSxhKyssYT09PTYmJihzLm5lZWRzVXBkYXRlPSEwLGUmJmUocykpfSx2b2lkIDAscil9Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDsrK2MpbChjKTtyZXR1cm4gc319O3ZhciBFaD1jbGFzcyBleHRlbmRzIG1ue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7bGV0IHM9bmV3IGFlLG89bmV3IGJsKHRoaXMubWFuYWdlcik7cmV0dXJuIG8uc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksby5zZXRQYXRoKHRoaXMucGF0aCksby5sb2FkKHQsZnVuY3Rpb24oYSl7cy5pbWFnZT1hLHMubmVlZHNVcGRhdGU9ITAsZSE9PXZvaWQgMCYmZShzKX0saSxyKSxzfX0sWWU9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0LGU9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpZ2h0Iix0aGlzLmNvbG9yPW5ldyBmdCh0KSx0aGlzLmludGVuc2l0eT1lfWRpc3Bvc2UoKXt9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpLGUub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eSx0aGlzLmdyb3VuZENvbG9yIT09dm9pZCAwJiYoZS5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSksdGhpcy5kaXN0YW5jZSE9PXZvaWQgMCYmKGUub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpLHRoaXMuYW5nbGUhPT12b2lkIDAmJihlLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKSx0aGlzLmRlY2F5IT09dm9pZCAwJiYoZS5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSksdGhpcy5wZW51bWJyYSE9PXZvaWQgMCYmKGUub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpLHRoaXMuc2hhZG93IT09dm9pZCAwJiYoZS5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKSxlfX07WWUucHJvdG90eXBlLmlzTGlnaHQ9ITA7dmFyIFRoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsaSksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShrdC5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgZnQoZSl9Y29weSh0KXtyZXR1cm4gWWUucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX07VGgucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciBuMD1uZXcgd3QsaTA9bmV3IFQscjA9bmV3IFQsU289Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3IEsoNTEyLDUxMiksdGhpcy5tYXA9bnVsbCx0aGlzLm1hcFBhc3M9bnVsbCx0aGlzLm1hdHJpeD1uZXcgd3QsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy5fZnJ1c3R1bT1uZXcgcXIsdGhpcy5fZnJhbWVFeHRlbnRzPW5ldyBLKDEsMSksdGhpcy5fdmlld3BvcnRDb3VudD0xLHRoaXMuX3ZpZXdwb3J0cz1bbmV3IFd0KDAsMCwxLDEpXX1nZXRWaWV3cG9ydENvdW50KCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0Q291bnR9Z2V0RnJ1c3R1bSgpe3JldHVybiB0aGlzLl9mcnVzdHVtfXVwZGF0ZU1hdHJpY2VzKHQpe2xldCBlPXRoaXMuY2FtZXJhLGk9dGhpcy5tYXRyaXg7aTAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGUucG9zaXRpb24uY29weShpMCkscjAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxlLmxvb2tBdChyMCksZS51cGRhdGVNYXRyaXhXb3JsZCgpLG4wLm11bHRpcGx5TWF0cmljZXMoZS5wcm9qZWN0aW9uTWF0cml4LGUubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KG4wKSxpLnNldCguNSwwLDAsLjUsMCwuNSwwLC41LDAsMCwuNSwuNSwwLDAsMCwxKSxpLm11bHRpcGx5KGUucHJvamVjdGlvbk1hdHJpeCksaS5tdWx0aXBseShlLm1hdHJpeFdvcmxkSW52ZXJzZSl9Z2V0Vmlld3BvcnQodCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0c1t0XX1nZXRGcmFtZUV4dGVudHMoKXtyZXR1cm4gdGhpcy5fZnJhbWVFeHRlbnRzfWRpc3Bvc2UoKXt0aGlzLm1hcCYmdGhpcy5tYXAuZGlzcG9zZSgpLHRoaXMubWFwUGFzcyYmdGhpcy5tYXBQYXNzLmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiB0aGlzLmNhbWVyYT10LmNhbWVyYS5jbG9uZSgpLHRoaXMuYmlhcz10LmJpYXMsdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpcy5tYXBTaXplLmNvcHkodC5tYXBTaXplKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD17fTtyZXR1cm4gdGhpcy5iaWFzIT09MCYmKHQuYmlhcz10aGlzLmJpYXMpLHRoaXMubm9ybWFsQmlhcyE9PTAmJih0Lm5vcm1hbEJpYXM9dGhpcy5ub3JtYWxCaWFzKSx0aGlzLnJhZGl1cyE9PTEmJih0LnJhZGl1cz10aGlzLnJhZGl1cyksKHRoaXMubWFwU2l6ZS54IT09NTEyfHx0aGlzLm1hcFNpemUueSE9PTUxMikmJih0Lm1hcFNpemU9dGhpcy5tYXBTaXplLnRvQXJyYXkoKSksdC5jYW1lcmE9dGhpcy5jYW1lcmEudG9KU09OKCExKS5vYmplY3QsZGVsZXRlIHQuY2FtZXJhLm1hdHJpeCx0fX0sU2w9Y2xhc3MgZXh0ZW5kcyBTb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBTZSg1MCwxLC41LDUwMCkpLHRoaXMuZm9jdXM9MX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPVZ1KjIqdC5hbmdsZSp0aGlzLmZvY3VzLHI9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQscz10LmRpc3RhbmNlfHxlLmZhcjsoaSE9PWUuZm92fHxyIT09ZS5hc3BlY3R8fHMhPT1lLmZhcikmJihlLmZvdj1pLGUuYXNwZWN0PXIsZS5mYXI9cyxlLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksc3VwZXIudXBkYXRlTWF0cmljZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZvY3VzPXQuZm9jdXMsdGhpc319O1NsLnByb3RvdHlwZS5pc1Nwb3RMaWdodFNoYWRvdz0hMDt2YXIgQWg9Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0LGUsaT0wLHI9TWF0aC5QSS8zLHM9MCxvPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTcG90TGlnaHQiLHRoaXMucG9zaXRpb24uY29weShrdC5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IGt0LHRoaXMuZGlzdGFuY2U9aSx0aGlzLmFuZ2xlPXIsdGhpcy5wZW51bWJyYT1zLHRoaXMuZGVjYXk9byx0aGlzLnNoYWRvdz1uZXcgU2x9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvTWF0aC5QSX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBlbnVtYnJhPXQucGVudW1icmEsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX07QWgucHJvdG90eXBlLmlzU3BvdExpZ2h0PSEwO3ZhciBzMD1uZXcgd3QsWnM9bmV3IFQsTnU9bmV3IFQsRWw9Y2xhc3MgZXh0ZW5kcyBTb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBTZSg5MCwxLC41LDUwMCkpLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgSyg0LDIpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9Nix0aGlzLl92aWV3cG9ydHM9W25ldyBXdCgyLDEsMSwxKSxuZXcgV3QoMCwxLDEsMSksbmV3IFd0KDMsMSwxLDEpLG5ldyBXdCgxLDEsMSwxKSxuZXcgV3QoMywwLDEsMSksbmV3IFd0KDEsMCwxLDEpXSx0aGlzLl9jdWJlRGlyZWN0aW9ucz1bbmV3IFQoMSwwLDApLG5ldyBUKC0xLDAsMCksbmV3IFQoMCwwLDEpLG5ldyBUKDAsMCwtMSksbmV3IFQoMCwxLDApLG5ldyBUKDAsLTEsMCldLHRoaXMuX2N1YmVVcHM9W25ldyBUKDAsMSwwKSxuZXcgVCgwLDEsMCksbmV3IFQoMCwxLDApLG5ldyBUKDAsMSwwKSxuZXcgVCgwLDAsMSksbmV3IFQoMCwwLC0xKV19dXBkYXRlTWF0cmljZXModCxlPTApe2xldCBpPXRoaXMuY2FtZXJhLHI9dGhpcy5tYXRyaXgscz10LmRpc3RhbmNlfHxpLmZhcjtzIT09aS5mYXImJihpLmZhcj1zLGkudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxacy5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksaS5wb3NpdGlvbi5jb3B5KFpzKSxOdS5jb3B5KGkucG9zaXRpb24pLE51LmFkZCh0aGlzLl9jdWJlRGlyZWN0aW9uc1tlXSksaS51cC5jb3B5KHRoaXMuX2N1YmVVcHNbZV0pLGkubG9va0F0KE51KSxpLnVwZGF0ZU1hdHJpeFdvcmxkKCksci5tYWtlVHJhbnNsYXRpb24oLVpzLngsLVpzLnksLVpzLnopLHMwLm11bHRpcGx5TWF0cmljZXMoaS5wcm9qZWN0aW9uTWF0cml4LGkubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHMwKX19O0VsLnByb3RvdHlwZS5pc1BvaW50TGlnaHRTaGFkb3c9ITA7dmFyIENoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlLGk9MCxyPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJQb2ludExpZ2h0Iix0aGlzLmRpc3RhbmNlPWksdGhpcy5kZWNheT1yLHRoaXMuc2hhZG93PW5ldyBFbH1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqNCpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyg0Kk1hdGguUEkpfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0NoLnByb3RvdHlwZS5pc1BvaW50TGlnaHQ9ITA7dmFyIFRsPWNsYXNzIGV4dGVuZHMgU297Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgVmkoLTUsNSw1LC01LC41LDUwMCkpfX07VGwucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodFNoYWRvdz0hMDt2YXIgUmg9Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJEaXJlY3Rpb25hbExpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa3QuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMudGFyZ2V0PW5ldyBrdCx0aGlzLnNoYWRvdz1uZXcgVGx9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX07UmgucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodD0hMDt2YXIgTGg9Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJBbWJpZW50TGlnaHQifX07TGgucHJvdG90eXBlLmlzQW1iaWVudExpZ2h0PSEwO3ZhciBQaD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQsZSxpPTEwLHI9MTApe3N1cGVyKHQsZSksdGhpcy50eXBlPSJSZWN0QXJlYUxpZ2h0Iix0aGlzLndpZHRoPWksdGhpcy5oZWlnaHQ9cn1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqdGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0Kk1hdGguUEkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Qud2lkdGg9dGhpcy53aWR0aCxlLm9iamVjdC5oZWlnaHQ9dGhpcy5oZWlnaHQsZX19O1BoLnByb3RvdHlwZS5pc1JlY3RBcmVhTGlnaHQ9ITA7dmFyIEFsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jb2VmZmljaWVudHM9W107Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyBUKX1zZXQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5jb3B5KHRbZV0pO3JldHVybiB0aGlzfXplcm8oKXtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzW3RdLnNldCgwLDAsMCk7cmV0dXJuIHRoaXN9Z2V0QXQodCxlKXtsZXQgaT10Lngscj10Lnkscz10Lnosbz10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KG9bMF0pLm11bHRpcGx5U2NhbGFyKC4yODIwOTUpLGUuYWRkU2NhbGVkVmVjdG9yKG9bMV0sLjQ4ODYwMypyKSxlLmFkZFNjYWxlZFZlY3RvcihvWzJdLC40ODg2MDMqcyksZS5hZGRTY2FsZWRWZWN0b3Iob1szXSwuNDg4NjAzKmkpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNF0sMS4wOTI1NDgqKGkqcikpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNV0sMS4wOTI1NDgqKHIqcykpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNl0sLjMxNTM5MiooMypzKnMtMSkpLGUuYWRkU2NhbGVkVmVjdG9yKG9bN10sMS4wOTI1NDgqKGkqcykpLGUuYWRkU2NhbGVkVmVjdG9yKG9bOF0sLjU0NjI3NCooaSppLXIqcikpLGV9Z2V0SXJyYWRpYW5jZUF0KHQsZSl7bGV0IGk9dC54LHI9dC55LHM9dC56LG89dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShvWzBdKS5tdWx0aXBseVNjYWxhciguODg2MjI3KSxlLmFkZFNjYWxlZFZlY3RvcihvWzFdLDIqLjUxMTY2NCpyKSxlLmFkZFNjYWxlZFZlY3RvcihvWzJdLDIqLjUxMTY2NCpzKSxlLmFkZFNjYWxlZFZlY3RvcihvWzNdLDIqLjUxMTY2NCppKSxlLmFkZFNjYWxlZFZlY3RvcihvWzRdLDIqLjQyOTA0MyppKnIpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNV0sMiouNDI5MDQzKnIqcyksZS5hZGRTY2FsZWRWZWN0b3Iob1s2XSwuNzQzMTI1KnMqcy0uMjQ3NzA4KSxlLmFkZFNjYWxlZFZlY3RvcihvWzddLDIqLjQyOTA0MyppKnMpLGUuYWRkU2NhbGVkVmVjdG9yKG9bOF0sLjQyOTA0MyooaSppLXIqcikpLGV9YWRkKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uYWRkKHQuY29lZmZpY2llbnRzW2VdKTtyZXR1cm4gdGhpc31hZGRTY2FsZWRTSCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0uYWRkU2NhbGVkVmVjdG9yKHQuY29lZmZpY2llbnRzW2ldLGUpO3JldHVybiB0aGlzfXNjYWxlKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0ubXVsdGlwbHlTY2FsYXIodCk7cmV0dXJuIHRoaXN9bGVycCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0ubGVycCh0LmNvZWZmaWNpZW50c1tpXSxlKTtyZXR1cm4gdGhpc31lcXVhbHModCl7Zm9yKGxldCBlPTA7ZTw5O2UrKylpZighdGhpcy5jb2VmZmljaWVudHNbZV0uZXF1YWxzKHQuY29lZmZpY2llbnRzW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH1jb3B5KHQpe3JldHVybiB0aGlzLnNldCh0LmNvZWZmaWNpZW50cyl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWZyb21BcnJheSh0LGU9MCl7bGV0IGk9dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpW3JdLmZyb21BcnJheSh0LGUrciozKTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmNvZWZmaWNpZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlbcl0udG9BcnJheSh0LGUrciozKTtyZXR1cm4gdH1zdGF0aWMgZ2V0QmFzaXNBdCh0LGUpe2xldCBpPXQueCxyPXQueSxzPXQuejtlWzBdPS4yODIwOTUsZVsxXT0uNDg4NjAzKnIsZVsyXT0uNDg4NjAzKnMsZVszXT0uNDg4NjAzKmksZVs0XT0xLjA5MjU0OCppKnIsZVs1XT0xLjA5MjU0OCpyKnMsZVs2XT0uMzE1MzkyKigzKnMqcy0xKSxlWzddPTEuMDkyNTQ4KmkqcyxlWzhdPS41NDYyNzQqKGkqaS1yKnIpfX07QWwucHJvdG90eXBlLmlzU3BoZXJpY2FsSGFybW9uaWNzMz0hMDt2YXIgRW89Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0PW5ldyBBbCxlPTEpe3N1cGVyKHZvaWQgMCxlKSx0aGlzLnNoPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnNoLmNvcHkodC5zaCksdGhpc31mcm9tSlNPTih0KXtyZXR1cm4gdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpcy5zaC5mcm9tQXJyYXkodC5zaCksdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5zaD10aGlzLnNoLnRvQXJyYXkoKSxlfX07RW8ucHJvdG90eXBlLmlzTGlnaHRQcm9iZT0hMDt2YXIgRGg9Y2xhc3N7c3RhdGljIGRlY29kZVRleHQodCl7aWYodHlwZW9mIFRleHREZWNvZGVyIT0idW5kZWZpbmVkIilyZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHQpO2xldCBlPSIiO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlKSl9Y2F0Y2goaSl7cmV0dXJuIGV9fXN0YXRpYyBleHRyYWN0VXJsQmFzZSh0KXtsZXQgZT10Lmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIGU9PT0tMT8iLi8iOnQuc3Vic3RyKDAsZSsxKX1zdGF0aWMgcmVzb2x2ZVVSTCh0LGUpe3JldHVybiB0eXBlb2YgdCE9InN0cmluZyJ8fHQ9PT0iIj8iIjooL15odHRwcz86XC9cLy9pLnRlc3QoZSkmJi9eXC8vLnRlc3QodCkmJihlPWUucmVwbGFjZSgvKF5odHRwcz86XC9cL1teXC9dKykuKi9pLCIkMSIpKSwvXihodHRwcz86KT9cL1wvL2kudGVzdCh0KXx8L15kYXRhOi4qLC4qJC9pLnRlc3QodCl8fC9eYmxvYjouKiQvaS50ZXN0KHQpP3Q6ZSt0KX19LEloPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5zdGFuY2VDb3VudD0xLzB9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlQ291bnQ9dC5pbnN0YW5jZUNvdW50LHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTih0aGlzKTtyZXR1cm4gdC5pbnN0YW5jZUNvdW50PXRoaXMuaW5zdGFuY2VDb3VudCx0LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk9ITAsdH19O0loLnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwO3ZhciBOaD1jbGFzcyBleHRlbmRzIG1ue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcD09InVuZGVmaW5lZCImJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGNyZWF0ZUltYWdlQml0bWFwKCkgbm90IHN1cHBvcnRlZC4iKSx0eXBlb2YgZmV0Y2g9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBmZXRjaCgpIG5vdCBzdXBwb3J0ZWQuIiksdGhpcy5vcHRpb25zPXtwcmVtdWx0aXBseUFscGhhOiJub25lIn19c2V0T3B0aW9ucyh0KXtyZXR1cm4gdGhpcy5vcHRpb25zPXQsdGhpc31sb2FkKHQsZSxpLHIpe3Q9PT12b2lkIDAmJih0PSIiKSx0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBzPXRoaXMsbz1qci5nZXQodCk7aWYobyE9PXZvaWQgMClyZXR1cm4gcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZSYmZShvKSxzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksbztsZXQgYT17fTthLmNyZWRlbnRpYWxzPXRoaXMuY3Jvc3NPcmlnaW49PT0iYW5vbnltb3VzIj8ic2FtZS1vcmlnaW4iOiJpbmNsdWRlIixhLmhlYWRlcnM9dGhpcy5yZXF1ZXN0SGVhZGVyLGZldGNoKHQsYSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gbC5ibG9iKCl9KS50aGVuKGZ1bmN0aW9uKGwpe3JldHVybiBjcmVhdGVJbWFnZUJpdG1hcChsLE9iamVjdC5hc3NpZ24ocy5vcHRpb25zLHtjb2xvclNwYWNlQ29udmVyc2lvbjoibm9uZSJ9KSl9KS50aGVuKGZ1bmN0aW9uKGwpe2pyLmFkZCh0LGwpLGUmJmUobCkscy5tYW5hZ2VyLml0ZW1FbmQodCl9KS5jYXRjaChmdW5jdGlvbihsKXtyJiZyKGwpLHMubWFuYWdlci5pdGVtRXJyb3IodCkscy5tYW5hZ2VyLml0ZW1FbmQodCl9KSxzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpfX07TmgucHJvdG90eXBlLmlzSW1hZ2VCaXRtYXBMb2FkZXI9ITA7dmFyIEphLGhUPXtnZXRDb250ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIEphPT09dm9pZCAwJiYoSmE9bmV3KHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKSxKYX0sc2V0Q29udGV4dDpmdW5jdGlvbihuKXtKYT1ufX0sRmg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBzPXRoaXMsbz1uZXcgYmgodGhpcy5tYW5hZ2VyKTtvLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxvLnNldFBhdGgodGhpcy5wYXRoKSxvLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxvLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyksby5sb2FkKHQsZnVuY3Rpb24oYSl7dHJ5e2xldCBsPWEuc2xpY2UoMCk7aFQuZ2V0Q29udGV4dCgpLmRlY29kZUF1ZGlvRGF0YShsLGZ1bmN0aW9uKHUpe2UodSl9KX1jYXRjaChsKXtyP3IobCk6Y29uc29sZS5lcnJvcihsKSxzLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0saSxyKX19LHpoPWNsYXNzIGV4dGVuZHMgRW97Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodm9pZCAwLGkpO2xldCByPW5ldyBmdCgpLnNldCh0KSxzPW5ldyBmdCgpLnNldChlKSxvPW5ldyBUKHIucixyLmcsci5iKSxhPW5ldyBUKHMucixzLmcscy5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShvKS5hZGQoYSkubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShvKS5zdWIoYSkubXVsdGlwbHlTY2FsYXIoYyl9fTt6aC5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHRQcm9iZT0hMDt2YXIgVWg9Y2xhc3MgZXh0ZW5kcyBFb3tjb25zdHJ1Y3Rvcih0LGU9MSl7c3VwZXIodm9pZCAwLGUpO2xldCBpPW5ldyBmdCgpLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQoaS5yLGkuZyxpLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19O1VoLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciBCaD1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpbyIsdGhpcy5saXN0ZW5lcj10LHRoaXMuY29udGV4dD10LmNvbnRleHQsdGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCksdGhpcy5nYWluLmNvbm5lY3QodC5nZXRJbnB1dCgpKSx0aGlzLmF1dG9wbGF5PSExLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5kZXR1bmU9MCx0aGlzLmxvb3A9ITEsdGhpcy5sb29wU3RhcnQ9MCx0aGlzLmxvb3BFbmQ9MCx0aGlzLm9mZnNldD0wLHRoaXMuZHVyYXRpb249dm9pZCAwLHRoaXMucGxheWJhY2tSYXRlPTEsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITAsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLnNvdXJjZVR5cGU9ImVtcHR5Iix0aGlzLl9zdGFydGVkQXQ9MCx0aGlzLl9wcm9ncmVzcz0wLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLmZpbHRlcnM9W119Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMuZ2Fpbn1zZXROb2RlU291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9ImF1ZGlvTm9kZSIsdGhpcy5zb3VyY2U9dCx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldE1lZGlhRWxlbWVudFNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYVN0cmVhbVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYVN0cmVhbU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZSh0KSx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciIsdGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCksdGhpc31wbGF5KHQ9MCl7aWYodGhpcy5pc1BsYXlpbmc9PT0hMCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO3JldHVybn1pZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn10aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IGU9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiBlLmJ1ZmZlcj10aGlzLmJ1ZmZlcixlLmxvb3A9dGhpcy5sb29wLGUubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LGUubG9vcEVuZD10aGlzLmxvb3BFbmQsZS5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLGUuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPWUsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsdGhpcy5sb29wPT09ITAmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzfXN0b3AoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExLHRoaXN9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLHRoaXMuX2Nvbm5lY3RlZD09PSEwPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdGhpcy5zb3VyY2UuZGV0dW5lIT09dm9pZCAwKXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLnBsYXliYWNrUmF0ZT10LHRoaXMuaXNQbGF5aW5nPT09ITAmJnRoaXMuc291cmNlLnBsYXliYWNrUmF0ZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMT8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMubG9vcD10LHRoaXMuaXNQbGF5aW5nPT09ITAmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc31zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fTt2YXIgT2g9Y2xhc3N7Y29uc3RydWN0b3IodCxlPTIwNDgpe3RoaXMuYW5hbHlzZXI9dC5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCksdGhpcy5hbmFseXNlci5mZnRTaXplPWUsdGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHRoaXMuYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQpLHQuZ2V0T3V0cHV0KCkuY29ubmVjdCh0aGlzLmFuYWx5c2VyKX1nZXRGcmVxdWVuY3lEYXRhKCl7cmV0dXJuIHRoaXMuYW5hbHlzZXIuZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEodGhpcy5kYXRhKSx0aGlzLmRhdGF9Z2V0QXZlcmFnZUZyZXF1ZW5jeSgpe2xldCB0PTAsZT10aGlzLmdldEZyZXF1ZW5jeURhdGEoKTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl0Kz1lW2ldO3JldHVybiB0L2UubGVuZ3RofX0sa2g9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuYmluZGluZz10LHRoaXMudmFsdWVTaXplPWk7bGV0IHIscyxvO3N3aXRjaChlKXtjYXNlInF1YXRlcm5pb24iOnI9dGhpcy5fc2xlcnAscz10aGlzLl9zbGVycEFkZGl0aXZlLG89dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb24sdGhpcy5idWZmZXI9bmV3IEZsb2F0NjRBcnJheShpKjYpLHRoaXMuX3dvcmtJbmRleD01O2JyZWFrO2Nhc2Uic3RyaW5nIjpjYXNlImJvb2wiOnI9dGhpcy5fc2VsZWN0LHM9dGhpcy5fc2VsZWN0LG89dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyLHRoaXMuYnVmZmVyPW5ldyBBcnJheShpKjUpO2JyZWFrO2RlZmF1bHQ6cj10aGlzLl9sZXJwLHM9dGhpcy5fbGVycEFkZGl0aXZlLG89dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMsdGhpcy5idWZmZXI9bmV3IEZsb2F0NjRBcnJheShpKjUpfXRoaXMuX21peEJ1ZmZlclJlZ2lvbj1yLHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlPXMsdGhpcy5fc2V0SWRlbnRpdHk9byx0aGlzLl9vcmlnSW5kZXg9Myx0aGlzLl9hZGRJbmRleD00LHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsdGhpcy51c2VDb3VudD0wLHRoaXMucmVmZXJlbmNlQ291bnQ9MH1hY2N1bXVsYXRlKHQsZSl7bGV0IGk9dGhpcy5idWZmZXIscj10aGlzLnZhbHVlU2l6ZSxzPXQqcityLG89dGhpcy5jdW11bGF0aXZlV2VpZ2h0O2lmKG89PT0wKXtmb3IobGV0IGE9MDthIT09cjsrK2EpaVtzK2FdPWlbYV07bz1lfWVsc2V7bys9ZTtsZXQgYT1lL287dGhpcy5fbWl4QnVmZmVyUmVnaW9uKGkscywwLGEscil9dGhpcy5jdW11bGF0aXZlV2VpZ2h0PW99YWNjdW11bGF0ZUFkZGl0aXZlKHQpe2xldCBlPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUscj1pKnRoaXMuX2FkZEluZGV4O3RoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPT09MCYmdGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShlLHIsMCx0LGkpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlKz10fWFwcGx5KHQpe2xldCBlPXRoaXMudmFsdWVTaXplLGk9dGhpcy5idWZmZXIscj10KmUrZSxzPXRoaXMuY3VtdWxhdGl2ZVdlaWdodCxvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlLGE9dGhpcy5iaW5kaW5nO2lmKHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsczwxKXtsZXQgbD1lKnRoaXMuX29yaWdJbmRleDt0aGlzLl9taXhCdWZmZXJSZWdpb24oaSxyLGwsMS1zLGUpfW8+MCYmdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoaSxyLHRoaXMuX2FkZEluZGV4KmUsMSxlKTtmb3IobGV0IGw9ZSxjPWUrZTtsIT09YzsrK2wpaWYoaVtsXSE9PWlbbCtlXSl7YS5zZXRWYWx1ZShpLHIpO2JyZWFrfX1zYXZlT3JpZ2luYWxTdGF0ZSgpe2xldCB0PXRoaXMuYmluZGluZyxlPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUscj1pKnRoaXMuX29yaWdJbmRleDt0LmdldFZhbHVlKGUscik7Zm9yKGxldCBzPWksbz1yO3MhPT1vOysrcyllW3NdPWVbcitzJWldO3RoaXMuX3NldElkZW50aXR5KCksdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MH1yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpe2xldCB0PXRoaXMudmFsdWVTaXplKjM7dGhpcy5iaW5kaW5nLnNldFZhbHVlKHRoaXMuYnVmZmVyLHQpfV9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpe2xldCB0PXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplLGU9dCt0aGlzLnZhbHVlU2l6ZTtmb3IobGV0IGk9dDtpPGU7aSsrKXRoaXMuYnVmZmVyW2ldPTB9X3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uKCl7dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKSx0aGlzLmJ1ZmZlclt0aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSszXT0xfV9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIoKXtsZXQgdD10aGlzLl9vcmlnSW5kZXgqdGhpcy52YWx1ZVNpemUsZT10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZTtmb3IobGV0IGk9MDtpPHRoaXMudmFsdWVTaXplO2krKyl0aGlzLmJ1ZmZlcltlK2ldPXRoaXMuYnVmZmVyW3QraV19X3NlbGVjdCh0LGUsaSxyLHMpe2lmKHI+PS41KWZvcihsZXQgbz0wO28hPT1zOysrbyl0W2Urb109dFtpK29dfV9zbGVycCh0LGUsaSxyKXtFZS5zbGVycEZsYXQodCxlLHQsZSx0LGkscil9X3NsZXJwQWRkaXRpdmUodCxlLGkscixzKXtsZXQgbz10aGlzLl93b3JrSW5kZXgqcztFZS5tdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LG8sdCxlLHQsaSksRWUuc2xlcnBGbGF0KHQsZSx0LGUsdCxvLHIpfV9sZXJwKHQsZSxpLHIscyl7bGV0IG89MS1yO2ZvcihsZXQgYT0wO2EhPT1zOysrYSl7bGV0IGw9ZSthO3RbbF09dFtsXSpvK3RbaSthXSpyfX1fbGVycEFkZGl0aXZlKHQsZSxpLHIscyl7Zm9yKGxldCBvPTA7byE9PXM7KytvKXtsZXQgYT1lK287dFthXT10W2FdK3RbaStvXSpyfX19LGVmPSJcXFtcXF1cXC46XFwvIixmVD1uZXcgUmVnRXhwKCJbIitlZisiXSIsImciKSxuZj0iW14iK2VmKyJdIixkVD0iW14iK2VmLnJlcGxhY2UoIlxcLiIsIiIpKyJdIixwVD0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLG5mKSxtVD0vKFdDT0QrKT8vLnNvdXJjZS5yZXBsYWNlKCJXQ09EIixkVCksZ1Q9Lyg/OlwuKFdDKykoPzpcWyguKylcXSk/KT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsbmYpLHhUPS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIixuZikseVQ9bmV3IFJlZ0V4cCgiXiIrcFQrbVQrZ1QreFQrIiQiKSx2VD1bIm1hdGVyaWFsIiwibWF0ZXJpYWxzIiwiYm9uZXMiXSxIaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHI9aXx8TnQucGFyc2VUcmFja05hbWUoZSk7dGhpcy5fdGFyZ2V0R3JvdXA9dCx0aGlzLl9iaW5kaW5ncz10LnN1YnNjcmliZV8oZSxyKX1nZXRWYWx1ZSh0LGUpe3RoaXMuYmluZCgpO2xldCBpPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxyPXRoaXMuX2JpbmRpbmdzW2ldO3IhPT12b2lkIDAmJnIuZ2V0VmFsdWUodCxlKX1zZXRWYWx1ZSh0LGUpe2xldCBpPXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgcj10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18scz1pLmxlbmd0aDtyIT09czsrK3IpaVtyXS5zZXRWYWx1ZSh0LGUpfWJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0uYmluZCgpfXVuYmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgZT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18saT10Lmxlbmd0aDtlIT09aTsrK2UpdFtlXS51bmJpbmQoKX19LE50PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnBhdGg9ZSx0aGlzLnBhcnNlZFBhdGg9aXx8TnQucGFyc2VUcmFja05hbWUoZSksdGhpcy5ub2RlPU50LmZpbmROb2RlKHQsdGhpcy5wYXJzZWRQYXRoLm5vZGVOYW1lKXx8dCx0aGlzLnJvb3ROb2RlPXQsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH1zdGF0aWMgY3JlYXRlKHQsZSxpKXtyZXR1cm4gdCYmdC5pc0FuaW1hdGlvbk9iamVjdEdyb3VwP25ldyBOdC5Db21wb3NpdGUodCxlLGkpOm5ldyBOdCh0LGUsaSl9c3RhdGljIHNhbml0aXplTm9kZU5hbWUodCl7cmV0dXJuIHQucmVwbGFjZSgvXHMvZywiXyIpLnJlcGxhY2UoZlQsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZSh0KXtsZXQgZT15VC5leGVjKHQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBDYW5ub3QgcGFyc2UgdHJhY2tOYW1lOiAiK3QpO2xldCBpPXtub2RlTmFtZTplWzJdLG9iamVjdE5hbWU6ZVszXSxvYmplY3RJbmRleDplWzRdLHByb3BlcnR5TmFtZTplWzVdLHByb3BlcnR5SW5kZXg6ZVs2XX0scj1pLm5vZGVOYW1lJiZpLm5vZGVOYW1lLmxhc3RJbmRleE9mKCIuIik7aWYociE9PXZvaWQgMCYmciE9PS0xKXtsZXQgcz1pLm5vZGVOYW1lLnN1YnN0cmluZyhyKzEpO3ZULmluZGV4T2YocykhPT0tMSYmKGkubm9kZU5hbWU9aS5ub2RlTmFtZS5zdWJzdHJpbmcoMCxyKSxpLm9iamVjdE5hbWU9cyl9aWYoaS5wcm9wZXJ0eU5hbWU9PT1udWxsfHxpLnByb3BlcnR5TmFtZS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBjYW4gbm90IHBhcnNlIHByb3BlcnR5TmFtZSBmcm9tIHRyYWNrTmFtZTogIit0KTtyZXR1cm4gaX1zdGF0aWMgZmluZE5vZGUodCxlKXtpZighZXx8ZT09PSIifHxlPT09Ii4ifHxlPT09LTF8fGU9PT10Lm5hbWV8fGU9PT10LnV1aWQpcmV0dXJuIHQ7aWYodC5za2VsZXRvbil7bGV0IGk9dC5za2VsZXRvbi5nZXRCb25lQnlOYW1lKGUpO2lmKGkhPT12b2lkIDApcmV0dXJuIGl9aWYodC5jaGlsZHJlbil7bGV0IGk9ZnVuY3Rpb24ocyl7Zm9yKGxldCBvPTA7bzxzLmxlbmd0aDtvKyspe2xldCBhPXNbb107aWYoYS5uYW1lPT09ZXx8YS51dWlkPT09ZSlyZXR1cm4gYTtsZXQgbD1pKGEuY2hpbGRyZW4pO2lmKGwpcmV0dXJuIGx9cmV0dXJuIG51bGx9LHI9aSh0LmNoaWxkcmVuKTtpZihyKXJldHVybiByfXJldHVybiBudWxsfV9nZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fc2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X2dldFZhbHVlX2RpcmVjdCh0LGUpe3RbZV09dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdfV9nZXRWYWx1ZV9hcnJheSh0LGUpe2xldCBpPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IHI9MCxzPWkubGVuZ3RoO3IhPT1zOysrcil0W2UrK109aVtyXX1fZ2V0VmFsdWVfYXJyYXlFbGVtZW50KHQsZSl7dFtlXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX1fZ2V0VmFsdWVfdG9BcnJheSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS50b0FycmF5KHQsZSl9X3NldFZhbHVlX2RpcmVjdCh0LGUpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W2VdfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUodCxlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheSh0LGUpe2xldCBpPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IHI9MCxzPWkubGVuZ3RoO3IhPT1zOysrcilpW3JdPXRbZSsrXX1fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpaVtyXT10W2UrK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpaVtyXT10W2UrK107dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50KHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtlXX1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlKHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W2VdLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxlKX1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlKHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LGUpLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxlKSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9nZXRWYWx1ZV91bmJvdW5kKHQsZSl7dGhpcy5iaW5kKCksdGhpcy5nZXRWYWx1ZSh0LGUpfV9zZXRWYWx1ZV91bmJvdW5kKHQsZSl7dGhpcy5iaW5kKCksdGhpcy5zZXRWYWx1ZSh0LGUpfWJpbmQoKXtsZXQgdD10aGlzLm5vZGUsZT10aGlzLnBhcnNlZFBhdGgsaT1lLm9iamVjdE5hbWUscj1lLnByb3BlcnR5TmFtZSxzPWUucHJvcGVydHlJbmRleDtpZih0fHwodD1OdC5maW5kTm9kZSh0aGlzLnJvb3ROb2RlLGUubm9kZU5hbWUpfHx0aGlzLnJvb3ROb2RlLHRoaXMubm9kZT10KSx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYXZhaWxhYmxlLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5hdmFpbGFibGUsIXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIit0aGlzLnBhdGgrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIpO3JldHVybn1pZihpKXtsZXQgYz1lLm9iamVjdEluZGV4O3N3aXRjaChpKXtjYXNlIm1hdGVyaWFscyI6aWYoIXQubWF0ZXJpYWwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFsLiIsdGhpcyk7cmV0dXJufWlmKCF0Lm1hdGVyaWFsLm1hdGVyaWFscyl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwubWF0ZXJpYWxzIGFzIG5vZGUubWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFscyBhcnJheS4iLHRoaXMpO3JldHVybn10PXQubWF0ZXJpYWwubWF0ZXJpYWxzO2JyZWFrO2Nhc2UiYm9uZXMiOmlmKCF0LnNrZWxldG9uKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO3JldHVybn10PXQuc2tlbGV0b24uYm9uZXM7Zm9yKGxldCB1PTA7dTx0Lmxlbmd0aDt1KyspaWYodFt1XS5uYW1lPT09Yyl7Yz11O2JyZWFrfWJyZWFrO2RlZmF1bHQ6aWYodFtpXT09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gb2JqZWN0TmFtZSBvZiBub2RlIHVuZGVmaW5lZC4iLHRoaXMpO3JldHVybn10PXRbaV19aWYoYyE9PXZvaWQgMCl7aWYodFtjXT09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gYmluZCB0byBvYmplY3RJbmRleCBvZiBvYmplY3ROYW1lLCBidXQgaXMgdW5kZWZpbmVkLiIsdGhpcyx0KTtyZXR1cm59dD10W2NdfX1sZXQgbz10W3JdO2lmKG89PT12b2lkIDApe2xldCBjPWUubm9kZU5hbWU7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIHByb3BlcnR5IGZvciB0cmFjazogIitjKyIuIityKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iLHQpO3JldHVybn1sZXQgYT10aGlzLlZlcnNpb25pbmcuTm9uZTt0aGlzLnRhcmdldE9iamVjdD10LHQubmVlZHNVcGRhdGUhPT12b2lkIDA/YT10aGlzLlZlcnNpb25pbmcuTmVlZHNVcGRhdGU6dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlIT09dm9pZCAwJiYoYT10aGlzLlZlcnNpb25pbmcuTWF0cml4V29ybGROZWVkc1VwZGF0ZSk7bGV0IGw9dGhpcy5CaW5kaW5nVHlwZS5EaXJlY3Q7aWYocyE9PXZvaWQgMCl7aWYocj09PSJtb3JwaFRhcmdldEluZmx1ZW5jZXMiKXtpZighdC5nZW9tZXRyeSl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkuIix0aGlzKTtyZXR1cm59aWYodC5nZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KXtpZighdC5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy4iLHRoaXMpO3JldHVybn10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXSE9PXZvaWQgMCYmKHM9dC5tb3JwaFRhcmdldERpY3Rpb25hcnlbc10pfWVsc2V7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIG9uIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iLHRoaXMpO3JldHVybn19bD10aGlzLkJpbmRpbmdUeXBlLkFycmF5RWxlbWVudCx0aGlzLnJlc29sdmVkUHJvcGVydHk9byx0aGlzLnByb3BlcnR5SW5kZXg9c31lbHNlIG8uZnJvbUFycmF5IT09dm9pZCAwJiZvLnRvQXJyYXkhPT12b2lkIDA/KGw9dGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9byk6QXJyYXkuaXNBcnJheShvKT8obD10aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1vKTp0aGlzLnByb3BlcnR5TmFtZT1yO3RoaXMuZ2V0VmFsdWU9dGhpcy5HZXR0ZXJCeUJpbmRpbmdUeXBlW2xdLHRoaXMuc2V0VmFsdWU9dGhpcy5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZ1tsXVthXX11bmJpbmQoKXt0aGlzLm5vZGU9bnVsbCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfX07TnQuQ29tcG9zaXRlPUhoO050LnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfTtOdC5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfTtOdC5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bTnQucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsTnQucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxOdC5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxOdC5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldO050LnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW050LnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LE50LnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtOdC5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsTnQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbTnQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsTnQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsTnQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW050LnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LE50LnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXTt2YXIgVmg9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnV1aWQ9dG4oKSx0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksdGhpcy5uQ2FjaGVkT2JqZWN0c189MDtsZXQgdD17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPXQ7Zm9yKGxldCBpPTAscj1hcmd1bWVudHMubGVuZ3RoO2khPT1yOysraSl0W2FyZ3VtZW50c1tpXS51dWlkXT1pO3RoaXMuX3BhdGhzPVtdLHRoaXMuX3BhcnNlZFBhdGhzPVtdLHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aD17fTtsZXQgZT10aGlzO3RoaXMuc3RhdHM9e29iamVjdHM6e2dldCB0b3RhbCgpe3JldHVybiBlLl9vYmplY3RzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHRoaXMudG90YWwtZS5uQ2FjaGVkT2JqZWN0c199fSxnZXQgYmluZGluZ3NQZXJPYmplY3QoKXtyZXR1cm4gZS5fYmluZGluZ3MubGVuZ3RofX19YWRkKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxlPXRoaXMuX2luZGljZXNCeVVVSUQsaT10aGlzLl9wYXRocyxyPXRoaXMuX3BhcnNlZFBhdGhzLHM9dGhpcy5fYmluZGluZ3Msbz1zLmxlbmd0aCxhLGw9dC5sZW5ndGgsYz10aGlzLm5DYWNoZWRPYmplY3RzXztmb3IobGV0IHU9MCxoPWFyZ3VtZW50cy5sZW5ndGg7dSE9PWg7Kyt1KXtsZXQgZj1hcmd1bWVudHNbdV0sZD1mLnV1aWQsZz1lW2RdO2lmKGc9PT12b2lkIDApe2c9bCsrLGVbZF09Zyx0LnB1c2goZik7Zm9yKGxldCB4PTAsdj1vO3ghPT12OysreClzW3hdLnB1c2gobmV3IE50KGYsaVt4XSxyW3hdKSl9ZWxzZSBpZihnPGMpe2E9dFtnXTtsZXQgeD0tLWMsdj10W3hdO2Vbdi51dWlkXT1nLHRbZ109dixlW2RdPXgsdFt4XT1mO2ZvcihsZXQgbT0wLHA9bzttIT09cDsrK20pe2xldCBiPXNbbV0sXz1iW3hdLFM9YltnXTtiW2ddPV8sUz09PXZvaWQgMCYmKFM9bmV3IE50KGYsaVttXSxyW21dKSksYlt4XT1TfX1lbHNlIHRbZ10hPT1hJiZjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25PYmplY3RHcm91cDogRGlmZmVyZW50IG9iamVjdHMgd2l0aCB0aGUgc2FtZSBVVUlEIGRldGVjdGVkLiBDbGVhbiB0aGUgY2FjaGVzIG9yIHJlY3JlYXRlIHlvdXIgaW5mcmFzdHJ1Y3R1cmUgd2hlbiByZWxvYWRpbmcgc2NlbmVzLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWN9cmVtb3ZlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxlPXRoaXMuX2luZGljZXNCeVVVSUQsaT10aGlzLl9iaW5kaW5ncyxyPWkubGVuZ3RoLHM9dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCBvPTAsYT1hcmd1bWVudHMubGVuZ3RoO28hPT1hOysrbyl7bGV0IGw9YXJndW1lbnRzW29dLGM9bC51dWlkLHU9ZVtjXTtpZih1IT09dm9pZCAwJiZ1Pj1zKXtsZXQgaD1zKyssZj10W2hdO2VbZi51dWlkXT11LHRbdV09ZixlW2NdPWgsdFtoXT1sO2ZvcihsZXQgZD0wLGc9cjtkIT09ZzsrK2Qpe2xldCB4PWlbZF0sdj14W2hdLG09eFt1XTt4W3VdPXYseFtoXT1tfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189c311bmNhY2hlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxlPXRoaXMuX2luZGljZXNCeVVVSUQsaT10aGlzLl9iaW5kaW5ncyxyPWkubGVuZ3RoLHM9dGhpcy5uQ2FjaGVkT2JqZWN0c18sbz10Lmxlbmd0aDtmb3IobGV0IGE9MCxsPWFyZ3VtZW50cy5sZW5ndGg7YSE9PWw7KythKXtsZXQgYz1hcmd1bWVudHNbYV0sdT1jLnV1aWQsaD1lW3VdO2lmKGghPT12b2lkIDApaWYoZGVsZXRlIGVbdV0saDxzKXtsZXQgZj0tLXMsZD10W2ZdLGc9LS1vLHg9dFtnXTtlW2QudXVpZF09aCx0W2hdPWQsZVt4LnV1aWRdPWYsdFtmXT14LHQucG9wKCk7Zm9yKGxldCB2PTAsbT1yO3YhPT1tOysrdil7bGV0IHA9aVt2XSxiPXBbZl0sXz1wW2ddO3BbaF09YixwW2ZdPV8scC5wb3AoKX19ZWxzZXtsZXQgZj0tLW8sZD10W2ZdO2Y+MCYmKGVbZC51dWlkXT1oKSx0W2hdPWQsdC5wb3AoKTtmb3IobGV0IGc9MCx4PXI7ZyE9PXg7KytnKXtsZXQgdj1pW2ddO3ZbaF09dltmXSx2LnBvcCgpfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189c31zdWJzY3JpYmVfKHQsZSl7bGV0IGk9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLHI9aVt0XSxzPXRoaXMuX2JpbmRpbmdzO2lmKHIhPT12b2lkIDApcmV0dXJuIHNbcl07bGV0IG89dGhpcy5fcGF0aHMsYT10aGlzLl9wYXJzZWRQYXRocyxsPXRoaXMuX29iamVjdHMsYz1sLmxlbmd0aCx1PXRoaXMubkNhY2hlZE9iamVjdHNfLGg9bmV3IEFycmF5KGMpO3I9cy5sZW5ndGgsaVt0XT1yLG8ucHVzaCh0KSxhLnB1c2goZSkscy5wdXNoKGgpO2ZvcihsZXQgZj11LGQ9bC5sZW5ndGg7ZiE9PWQ7KytmKXtsZXQgZz1sW2ZdO2hbZl09bmV3IE50KGcsdCxlKX1yZXR1cm4gaH11bnN1YnNjcmliZV8odCl7bGV0IGU9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLGk9ZVt0XTtpZihpIT09dm9pZCAwKXtsZXQgcj10aGlzLl9wYXRocyxzPXRoaXMuX3BhcnNlZFBhdGhzLG89dGhpcy5fYmluZGluZ3MsYT1vLmxlbmd0aC0xLGw9b1thXSxjPXRbYV07ZVtjXT1pLG9baV09bCxvLnBvcCgpLHNbaV09c1thXSxzLnBvcCgpLHJbaV09clthXSxyLnBvcCgpfX19O1ZoLnByb3RvdHlwZS5pc0FuaW1hdGlvbk9iamVjdEdyb3VwPSEwO3ZhciBHaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT1udWxsLHI9ZS5ibGVuZE1vZGUpe3RoaXMuX21peGVyPXQsdGhpcy5fY2xpcD1lLHRoaXMuX2xvY2FsUm9vdD1pLHRoaXMuYmxlbmRNb2RlPXI7bGV0IHM9ZS50cmFja3Msbz1zLmxlbmd0aCxhPW5ldyBBcnJheShvKSxsPXtlbmRpbmdTdGFydDpOcixlbmRpbmdFbmQ6TnJ9O2ZvcihsZXQgYz0wO2MhPT1vOysrYyl7bGV0IHU9c1tjXS5jcmVhdGVJbnRlcnBvbGFudChudWxsKTthW2NdPXUsdS5zZXR0aW5ncz1sfXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M9bCx0aGlzLl9pbnRlcnBvbGFudHM9YSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzPW5ldyBBcnJheShvKSx0aGlzLl9jYWNoZUluZGV4PW51bGwsdGhpcy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLmxvb3A9WncsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTEsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPTEsdGhpcy53ZWlnaHQ9MSx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9MSx0aGlzLnJlcGV0aXRpb25zPTEvMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD0hMSx0aGlzLnplcm9TbG9wZUF0U3RhcnQ9ITAsdGhpcy56ZXJvU2xvcGVBdEVuZD0hMH1wbGF5KCl7cmV0dXJuIHRoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzfXN0b3AoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2RlYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpcy5yZXNldCgpfXJlc2V0KCl7cmV0dXJuIHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRpbWU9MCx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKX1pc1J1bm5pbmcoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5wYXVzZWQmJnRoaXMudGltZVNjYWxlIT09MCYmdGhpcy5fc3RhcnRUaW1lPT09bnVsbCYmdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfWlzU2NoZWR1bGVkKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1zdGFydEF0KHQpe3JldHVybiB0aGlzLl9zdGFydFRpbWU9dCx0aGlzfXNldExvb3AodCxlKXtyZXR1cm4gdGhpcy5sb29wPXQsdGhpcy5yZXBldGl0aW9ucz1lLHRoaXN9c2V0RWZmZWN0aXZlV2VpZ2h0KHQpe3JldHVybiB0aGlzLndlaWdodD10LHRoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLmVuYWJsZWQ/dDowLHRoaXMuc3RvcEZhZGluZygpfWdldEVmZmVjdGl2ZVdlaWdodCgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHR9ZmFkZUluKHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDAsMSl9ZmFkZU91dCh0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwxLDApfWNyb3NzRmFkZUZyb20odCxlLGkpe2lmKHQuZmFkZU91dChlKSx0aGlzLmZhZGVJbihlKSxpKXtsZXQgcj10aGlzLl9jbGlwLmR1cmF0aW9uLHM9dC5fY2xpcC5kdXJhdGlvbixvPXMvcixhPXIvczt0LndhcnAoMSxvLGUpLHRoaXMud2FycChhLDEsZSl9cmV0dXJuIHRoaXN9Y3Jvc3NGYWRlVG8odCxlLGkpe3JldHVybiB0LmNyb3NzRmFkZUZyb20odGhpcyxlLGkpfXN0b3BGYWRpbmcoKXtsZXQgdD10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtyZXR1cm4gdCE9PW51bGwmJih0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31zZXRFZmZlY3RpdmVUaW1lU2NhbGUodCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXQsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPXRoaXMucGF1c2VkPzA6dCx0aGlzLnN0b3BXYXJwaW5nKCl9Z2V0RWZmZWN0aXZlVGltZVNjYWxlKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZX1zZXREdXJhdGlvbih0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dGhpcy5fY2xpcC5kdXJhdGlvbi90LHRoaXMuc3RvcFdhcnBpbmcoKX1zeW5jV2l0aCh0KXtyZXR1cm4gdGhpcy50aW1lPXQudGltZSx0aGlzLnRpbWVTY2FsZT10LnRpbWVTY2FsZSx0aGlzLnN0b3BXYXJwaW5nKCl9aGFsdCh0KXtyZXR1cm4gdGhpcy53YXJwKHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwwLHQpfXdhcnAodCxlLGkpe2xldCByPXRoaXMuX21peGVyLHM9ci50aW1lLG89dGhpcy50aW1lU2NhbGUsYT10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDthPT09bnVsbCYmKGE9ci5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PWEpO2xldCBsPWEucGFyYW1ldGVyUG9zaXRpb25zLGM9YS5zYW1wbGVWYWx1ZXM7cmV0dXJuIGxbMF09cyxsWzFdPXMraSxjWzBdPXQvbyxjWzFdPWUvbyx0aGlzfXN0b3BXYXJwaW5nKCl7bGV0IHQ9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7cmV0dXJuIHQhPT1udWxsJiYodGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9Z2V0TWl4ZXIoKXtyZXR1cm4gdGhpcy5fbWl4ZXJ9Z2V0Q2xpcCgpe3JldHVybiB0aGlzLl9jbGlwfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHx0aGlzLl9taXhlci5fcm9vdH1fdXBkYXRlKHQsZSxpLHIpe2lmKCF0aGlzLmVuYWJsZWQpe3RoaXMuX3VwZGF0ZVdlaWdodCh0KTtyZXR1cm59bGV0IHM9dGhpcy5fc3RhcnRUaW1lO2lmKHMhPT1udWxsKXtsZXQgbD0odC1zKSppO2lmKGw8MHx8aT09PTApcmV0dXJuO3RoaXMuX3N0YXJ0VGltZT1udWxsLGU9aSpsfWUqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZSh0KTtsZXQgbz10aGlzLl91cGRhdGVUaW1lKGUpLGE9dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2lmKGE+MCl7bGV0IGw9dGhpcy5faW50ZXJwb2xhbnRzLGM9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztzd2l0Y2godGhpcy5ibGVuZE1vZGUpe2Nhc2UgZDA6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShvKSxjW3VdLmFjY3VtdWxhdGVBZGRpdGl2ZShhKTticmVhaztjYXNlIFFoOmRlZmF1bHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShvKSxjW3VdLmFjY3VtdWxhdGUocixhKX19fV91cGRhdGVXZWlnaHQodCl7bGV0IGU9MDtpZih0aGlzLmVuYWJsZWQpe2U9dGhpcy53ZWlnaHQ7bGV0IGk9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYoaSE9PW51bGwpe2xldCByPWkuZXZhbHVhdGUodClbMF07ZSo9cix0PmkucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCkscj09PTAmJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1lLGV9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgZT0wO2lmKCF0aGlzLnBhdXNlZCl7ZT10aGlzLnRpbWVTY2FsZTtsZXQgaT10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtpIT09bnVsbCYmKGUqPWkuZXZhbHVhdGUodClbMF0sdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSxlPT09MD90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1lKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1lLGV9X3VwZGF0ZVRpbWUodCl7bGV0IGU9dGhpcy5fY2xpcC5kdXJhdGlvbixpPXRoaXMubG9vcCxyPXRoaXMudGltZSt0LHM9dGhpcy5fbG9vcENvdW50LG89aT09PUp3O2lmKHQ9PT0wKXJldHVybiBzPT09LTE/cjpvJiYocyYxKT09PTE/ZS1yOnI7aWYoaT09PVl3KXtzPT09LTEmJih0aGlzLl9sb29wQ291bnQ9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLCEwLCExKSk7dDp7aWYocj49ZSlyPWU7ZWxzZSBpZihyPDApcj0wO2Vsc2V7dGhpcy50aW1lPXI7YnJlYWsgdH10aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ8MD8tMToxfSl9fWVsc2V7aWYocz09PS0xJiYodD49MD8ocz0wLHRoaXMuX3NldEVuZGluZ3MoITAsdGhpcy5yZXBldGl0aW9ucz09PTAsbykpOnRoaXMuX3NldEVuZGluZ3ModGhpcy5yZXBldGl0aW9ucz09PTAsITAsbykpLHI+PWV8fHI8MCl7bGV0IGE9TWF0aC5mbG9vcihyL2UpO3ItPWUqYSxzKz1NYXRoLmFicyhhKTtsZXQgbD10aGlzLnJlcGV0aXRpb25zLXM7aWYobDw9MCl0aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSxyPXQ+MD9lOjAsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PjA/MTotMX0pO2Vsc2V7aWYobD09PTEpe2xldCBjPXQ8MDt0aGlzLl9zZXRFbmRpbmdzKGMsIWMsbyl9ZWxzZSB0aGlzLl9zZXRFbmRpbmdzKCExLCExLG8pO3RoaXMuX2xvb3BDb3VudD1zLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6Imxvb3AiLGFjdGlvbjp0aGlzLGxvb3BEZWx0YTphfSl9fWVsc2UgdGhpcy50aW1lPXI7aWYobyYmKHMmMSk9PT0xKXJldHVybiBlLXJ9cmV0dXJuIHJ9X3NldEVuZGluZ3ModCxlLGkpe2xldCByPXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M7aT8oci5lbmRpbmdTdGFydD1GcixyLmVuZGluZ0VuZD1Gcik6KHQ/ci5lbmRpbmdTdGFydD10aGlzLnplcm9TbG9wZUF0U3RhcnQ/RnI6TnI6ci5lbmRpbmdTdGFydD1lbCxlP3IuZW5kaW5nRW5kPXRoaXMuemVyb1Nsb3BlQXRFbmQ/RnI6TnI6ci5lbmRpbmdFbmQ9ZWwpfV9zY2hlZHVsZUZhZGluZyh0LGUsaSl7bGV0IHI9dGhpcy5fbWl4ZXIscz1yLnRpbWUsbz10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtvPT09bnVsbCYmKG89ci5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3dlaWdodEludGVycG9sYW50PW8pO2xldCBhPW8ucGFyYW1ldGVyUG9zaXRpb25zLGw9by5zYW1wbGVWYWx1ZXM7cmV0dXJuIGFbMF09cyxsWzBdPWUsYVsxXT1zK3QsbFsxXT1pLHRoaXN9fSxXaD1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX1fYmluZEFjdGlvbih0LGUpe2xldCBpPXQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCxyPXQuX2NsaXAudHJhY2tzLHM9ci5sZW5ndGgsbz10Ll9wcm9wZXJ0eUJpbmRpbmdzLGE9dC5faW50ZXJwb2xhbnRzLGw9aS51dWlkLGM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHU9Y1tsXTt1PT09dm9pZCAwJiYodT17fSxjW2xdPXUpO2ZvcihsZXQgaD0wO2ghPT1zOysraCl7bGV0IGY9cltoXSxkPWYubmFtZSxnPXVbZF07aWYoZyE9PXZvaWQgMCkrK2cucmVmZXJlbmNlQ291bnQsb1toXT1nO2Vsc2V7aWYoZz1vW2hdLGchPT12b2lkIDApe2cuX2NhY2hlSW5kZXg9PT1udWxsJiYoKytnLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhnLGwsZCkpO2NvbnRpbnVlfWxldCB4PWUmJmUuX3Byb3BlcnR5QmluZGluZ3NbaF0uYmluZGluZy5wYXJzZWRQYXRoO2c9bmV3IGtoKE50LmNyZWF0ZShpLGQseCksZi5WYWx1ZVR5cGVOYW1lLGYuZ2V0VmFsdWVTaXplKCkpLCsrZy5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZyxsLGQpLG9baF09Z31hW2hdLnJlc3VsdEJ1ZmZlcj1nLmJ1ZmZlcn19X2FjdGl2YXRlQWN0aW9uKHQpe2lmKCF0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7aWYodC5fY2FjaGVJbmRleD09PW51bGwpe2xldCBpPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQscj10Ll9jbGlwLnV1aWQscz10aGlzLl9hY3Rpb25zQnlDbGlwW3JdO3RoaXMuX2JpbmRBY3Rpb24odCxzJiZzLmtub3duQWN0aW9uc1swXSksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24odCxyLGkpfWxldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBzPWVbaV07cy51c2VDb3VudCsrPT09MCYmKHRoaXMuX2xlbmRCaW5kaW5nKHMpLHMuc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbih0KX19X2RlYWN0aXZhdGVBY3Rpb24odCl7aWYodGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2xldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBzPWVbaV07LS1zLnVzZUNvdW50PT09MCYmKHMucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl90YWtlQmFja0JpbmRpbmcocykpfXRoaXMuX3Rha2VCYWNrQWN0aW9uKHQpfX1faW5pdE1lbW9yeU1hbmFnZXIoKXt0aGlzLl9hY3Rpb25zPVtdLHRoaXMuX25BY3RpdmVBY3Rpb25zPTAsdGhpcy5fYWN0aW9uc0J5Q2xpcD17fSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9uQWN0aXZlQmluZGluZ3M9MCx0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWU9e30sdGhpcy5fY29udHJvbEludGVycG9sYW50cz1bXSx0aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cz0wO2xldCB0PXRoaXM7dGhpcy5zdGF0cz17YWN0aW9uczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2FjdGlvbnMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUFjdGlvbnN9fSxiaW5kaW5nczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2JpbmRpbmdzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVCaW5kaW5nc319LGNvbnRyb2xJbnRlcnBvbGFudHM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9jb250cm9sSW50ZXJwb2xhbnRzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzfX19fV9pc0FjdGl2ZUFjdGlvbih0KXtsZXQgZT10Ll9jYWNoZUluZGV4O3JldHVybiBlIT09bnVsbCYmZTx0aGlzLl9uQWN0aXZlQWN0aW9uc31fYWRkSW5hY3RpdmVBY3Rpb24odCxlLGkpe2xldCByPXRoaXMuX2FjdGlvbnMscz10aGlzLl9hY3Rpb25zQnlDbGlwLG89c1tlXTtpZihvPT09dm9pZCAwKW89e2tub3duQWN0aW9uczpbdF0sYWN0aW9uQnlSb290Ont9fSx0Ll9ieUNsaXBDYWNoZUluZGV4PTAsc1tlXT1vO2Vsc2V7bGV0IGE9by5rbm93bkFjdGlvbnM7dC5fYnlDbGlwQ2FjaGVJbmRleD1hLmxlbmd0aCxhLnB1c2godCl9dC5fY2FjaGVJbmRleD1yLmxlbmd0aCxyLnB1c2godCksby5hY3Rpb25CeVJvb3RbaV09dH1fcmVtb3ZlSW5hY3RpdmVBY3Rpb24odCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPWVbZS5sZW5ndGgtMV0scj10Ll9jYWNoZUluZGV4O2kuX2NhY2hlSW5kZXg9cixlW3JdPWksZS5wb3AoKSx0Ll9jYWNoZUluZGV4PW51bGw7bGV0IHM9dC5fY2xpcC51dWlkLG89dGhpcy5fYWN0aW9uc0J5Q2xpcCxhPW9bc10sbD1hLmtub3duQWN0aW9ucyxjPWxbbC5sZW5ndGgtMV0sdT10Ll9ieUNsaXBDYWNoZUluZGV4O2MuX2J5Q2xpcENhY2hlSW5kZXg9dSxsW3VdPWMsbC5wb3AoKSx0Ll9ieUNsaXBDYWNoZUluZGV4PW51bGw7bGV0IGg9YS5hY3Rpb25CeVJvb3QsZj0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkO2RlbGV0ZSBoW2ZdLGwubGVuZ3RoPT09MCYmZGVsZXRlIG9bc10sdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KXtsZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1lW2ldOy0tcy5yZWZlcmVuY2VDb3VudD09PTAmJnRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhzKX19X2xlbmRBY3Rpb24odCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQuX2NhY2hlSW5kZXgscj10aGlzLl9uQWN0aXZlQWN0aW9ucysrLHM9ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LHMuX2NhY2hlSW5kZXg9aSxlW2ldPXN9X3Rha2VCYWNrQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9LS10aGlzLl9uQWN0aXZlQWN0aW9ucyxzPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxzLl9jYWNoZUluZGV4PWksZVtpXT1zfV9hZGRJbmFjdGl2ZUJpbmRpbmcodCxlLGkpe2xldCByPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxzPXRoaXMuX2JpbmRpbmdzLG89cltlXTtvPT09dm9pZCAwJiYobz17fSxyW2VdPW8pLG9baV09dCx0Ll9jYWNoZUluZGV4PXMubGVuZ3RoLHMucHVzaCh0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5iaW5kaW5nLHI9aS5yb290Tm9kZS51dWlkLHM9aS5wYXRoLG89dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGE9b1tyXSxsPWVbZS5sZW5ndGgtMV0sYz10Ll9jYWNoZUluZGV4O2wuX2NhY2hlSW5kZXg9YyxlW2NdPWwsZS5wb3AoKSxkZWxldGUgYVtzXSxPYmplY3Qua2V5cyhhKS5sZW5ndGg9PT0wJiZkZWxldGUgb1tyXX1fbGVuZEJpbmRpbmcodCl7bGV0IGU9dGhpcy5fYmluZGluZ3MsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzKysscz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQscy5fY2FjaGVJbmRleD1pLGVbaV09c31fdGFrZUJhY2tCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLHM9ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LHMuX2NhY2hlSW5kZXg9aSxlW2ldPXN9X2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKXtsZXQgdD10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLGU9dGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMrKyxpPXRbZV07cmV0dXJuIGk9PT12b2lkIDAmJihpPW5ldyBfbChuZXcgRmxvYXQzMkFycmF5KDIpLG5ldyBGbG9hdDMyQXJyYXkoMiksMSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyKSxpLl9fY2FjaGVJbmRleD1lLHRbZV09aSksaX1fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCl7bGV0IGU9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxpPXQuX19jYWNoZUluZGV4LHI9LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyxzPWVbcl07dC5fX2NhY2hlSW5kZXg9cixlW3JdPXQscy5fX2NhY2hlSW5kZXg9aSxlW2ldPXN9Y2xpcEFjdGlvbih0LGUsaSl7bGV0IHI9ZXx8dGhpcy5fcm9vdCxzPXIudXVpZCxvPXR5cGVvZiB0PT0ic3RyaW5nIj9NbC5maW5kQnlOYW1lKHIsdCk6dCxhPW8hPT1udWxsP28udXVpZDp0LGw9dGhpcy5fYWN0aW9uc0J5Q2xpcFthXSxjPW51bGw7aWYoaT09PXZvaWQgMCYmKG8hPT1udWxsP2k9by5ibGVuZE1vZGU6aT1RaCksbCE9PXZvaWQgMCl7bGV0IGg9bC5hY3Rpb25CeVJvb3Rbc107aWYoaCE9PXZvaWQgMCYmaC5ibGVuZE1vZGU9PT1pKXJldHVybiBoO2M9bC5rbm93bkFjdGlvbnNbMF0sbz09PW51bGwmJihvPWMuX2NsaXApfWlmKG89PT1udWxsKXJldHVybiBudWxsO2xldCB1PW5ldyBHaCh0aGlzLG8sZSxpKTtyZXR1cm4gdGhpcy5fYmluZEFjdGlvbih1LGMpLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHUsYSxzKSx1fWV4aXN0aW5nQWN0aW9uKHQsZSl7bGV0IGk9ZXx8dGhpcy5fcm9vdCxyPWkudXVpZCxzPXR5cGVvZiB0PT0ic3RyaW5nIj9NbC5maW5kQnlOYW1lKGksdCk6dCxvPXM/cy51dWlkOnQsYT10aGlzLl9hY3Rpb25zQnlDbGlwW29dO3JldHVybiBhIT09dm9pZCAwJiZhLmFjdGlvbkJ5Um9vdFtyXXx8bnVsbH1zdG9wQWxsQWN0aW9uKCl7bGV0IHQ9dGhpcy5fYWN0aW9ucyxlPXRoaXMuX25BY3RpdmVBY3Rpb25zO2ZvcihsZXQgaT1lLTE7aT49MDstLWkpdFtpXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe3QqPXRoaXMudGltZVNjYWxlO2xldCBlPXRoaXMuX2FjdGlvbnMsaT10aGlzLl9uQWN0aXZlQWN0aW9ucyxyPXRoaXMudGltZSs9dCxzPU1hdGguc2lnbih0KSxvPXRoaXMuX2FjY3VJbmRleF49MTtmb3IobGV0IGM9MDtjIT09aTsrK2MpZVtjXS5fdXBkYXRlKHIsdCxzLG8pO2xldCBhPXRoaXMuX2JpbmRpbmdzLGw9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihsZXQgYz0wO2MhPT1sOysrYylhW2NdLmFwcGx5KG8pO3JldHVybiB0aGlzfXNldFRpbWUodCl7dGhpcy50aW1lPTA7Zm9yKGxldCBlPTA7ZTx0aGlzLl9hY3Rpb25zLmxlbmd0aDtlKyspdGhpcy5fYWN0aW9uc1tlXS50aW1lPTA7cmV0dXJuIHRoaXMudXBkYXRlKHQpfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdH11bmNhY2hlQ2xpcCh0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC51dWlkLHI9dGhpcy5fYWN0aW9uc0J5Q2xpcCxzPXJbaV07aWYocyE9PXZvaWQgMCl7bGV0IG89cy5rbm93bkFjdGlvbnM7Zm9yKGxldCBhPTAsbD1vLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPW9bYV07dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKTtsZXQgdT1jLl9jYWNoZUluZGV4LGg9ZVtlLmxlbmd0aC0xXTtjLl9jYWNoZUluZGV4PW51bGwsYy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLGguX2NhY2hlSW5kZXg9dSxlW3VdPWgsZS5wb3AoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKGMpfWRlbGV0ZSByW2ldfX11bmNhY2hlUm9vdCh0KXtsZXQgZT10LnV1aWQsaT10aGlzLl9hY3Rpb25zQnlDbGlwO2ZvcihsZXQgbyBpbiBpKXtsZXQgYT1pW29dLmFjdGlvbkJ5Um9vdCxsPWFbZV07bCE9PXZvaWQgMCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCByPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxzPXJbZV07aWYocyE9PXZvaWQgMClmb3IobGV0IG8gaW4gcyl7bGV0IGE9c1tvXTthLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKGEpfX11bmNhY2hlQWN0aW9uKHQsZSl7bGV0IGk9dGhpcy5leGlzdGluZ0FjdGlvbih0LGUpO2khPT1udWxsJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihpKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihpKSl9fTtXaC5wcm90b3R5cGUuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI9bmV3IEZsb2F0MzJBcnJheSgxKTt2YXIgVG89Y2xhc3N7Y29uc3RydWN0b3IodCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYoY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLiIpLHQ9YXJndW1lbnRzWzFdKSx0aGlzLnZhbHVlPXR9Y2xvbmUoKXtyZXR1cm4gbmV3IFRvKHRoaXMudmFsdWUuY2xvbmU9PT12b2lkIDA/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfX0scWg9Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0LGUsaT0xKXtzdXBlcih0LGUpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCBlPXN1cGVyLmNsb25lKHQpO3JldHVybiBlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLGUubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsZX19O3FoLnByb3RvdHlwZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwO3ZhciBYaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLHMpe3RoaXMuYnVmZmVyPXQsdGhpcy50eXBlPWUsdGhpcy5pdGVtU2l6ZT1pLHRoaXMuZWxlbWVudFNpemU9cix0aGlzLmNvdW50PXMsdGhpcy52ZXJzaW9uPTB9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0QnVmZmVyKHQpe3JldHVybiB0aGlzLmJ1ZmZlcj10LHRoaXN9c2V0VHlwZSh0LGUpe3JldHVybiB0aGlzLnR5cGU9dCx0aGlzLmVsZW1lbnRTaXplPWUsdGhpc31zZXRJdGVtU2l6ZSh0KXtyZXR1cm4gdGhpcy5pdGVtU2l6ZT10LHRoaXN9c2V0Q291bnQodCl7cmV0dXJuIHRoaXMuY291bnQ9dCx0aGlzfX07WGgucHJvdG90eXBlLmlzR0xCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIG8wPW5ldyBLLFlpPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IEsoMS8wLDEvMCksZT1uZXcgSygtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7bGV0IGk9bzAuY29weShlKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKGkpLHRoaXMubWF4LmNvcHkodCkuYWRkKGkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxlKXtyZXR1cm4gZS5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBvMC5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX07WWkucHJvdG90eXBlLmlzQm94Mj0hMDt2YXIgYTA9bmV3IFQsJGE9bmV3IFQsWWg9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgVCxlPW5ldyBUKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5zdGFydC5jb3B5KHQpLHRoaXMuZW5kLmNvcHkoZSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnN0YXJ0LmNvcHkodC5zdGFydCksdGhpcy5lbmQuY29weSh0LmVuZCksdGhpc31nZXRDZW50ZXIodCl7cmV0dXJuIHQuYWRkVmVjdG9ycyh0aGlzLnN0YXJ0LHRoaXMuZW5kKS5tdWx0aXBseVNjYWxhciguNSl9ZGVsdGEodCl7cmV0dXJuIHQuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KX1kaXN0YW5jZVNxKCl7cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5lbmQpfWRpc3RhbmNlKCl7cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUbyh0aGlzLmVuZCl9YXQodCxlKXtyZXR1cm4gdGhpcy5kZWx0YShlKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5zdGFydCl9Y2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcih0LGUpe2EwLnN1YlZlY3RvcnModCx0aGlzLnN0YXJ0KSwkYS5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpO2xldCBpPSRhLmRvdCgkYSkscz0kYS5kb3QoYTApL2k7cmV0dXJuIGUmJihzPUllKHMsMCwxKSksc31jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSxpKXtsZXQgcj10aGlzLmNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIodCxlKTtyZXR1cm4gdGhpcy5kZWx0YShpKS5tdWx0aXBseVNjYWxhcihyKS5hZGQodGhpcy5zdGFydCl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLnN0YXJ0LmFwcGx5TWF0cml4NCh0KSx0aGlzLmVuZC5hcHBseU1hdHJpeDQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuc3RhcnQuZXF1YWxzKHRoaXMuc3RhcnQpJiZ0LmVuZC5lcXVhbHModGhpcy5lbmQpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O3ZhciBRbj1uZXcgVCxLYT1uZXcgd3QsRnU9bmV3IHd0LFpoPWNsYXNzIGV4dGVuZHMgZ297Y29uc3RydWN0b3IodCl7bGV0IGU9RDAodCksaT1uZXcgSHQscj1bXSxzPVtdLG89bmV3IGZ0KDAsMCwxKSxhPW5ldyBmdCgwLDEsMCk7Zm9yKGxldCBjPTA7YzxlLmxlbmd0aDtjKyspe2xldCB1PWVbY107dS5wYXJlbnQmJnUucGFyZW50LmlzQm9uZSYmKHIucHVzaCgwLDAsMCksci5wdXNoKDAsMCwwKSxzLnB1c2goby5yLG8uZyxvLmIpLHMucHVzaChhLnIsYS5nLGEuYikpfWkuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKHIsMykpLGkuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IGVlKHMsMykpO2xldCBsPW5ldyB6bih7dmVydGV4Q29sb3JzOiEwLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITEsdHJhbnNwYXJlbnQ6ITB9KTtzdXBlcihpLGwpLHRoaXMudHlwZT0iU2tlbGV0b25IZWxwZXIiLHRoaXMuaXNTa2VsZXRvbkhlbHBlcj0hMCx0aGlzLnJvb3Q9dCx0aGlzLmJvbmVzPWUsdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITF9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IGU9dGhpcy5ib25lcyxpPXRoaXMuZ2VvbWV0cnkscj1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtGdS5jb3B5KHRoaXMucm9vdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Zm9yKGxldCBzPTAsbz0wO3M8ZS5sZW5ndGg7cysrKXtsZXQgYT1lW3NdO2EucGFyZW50JiZhLnBhcmVudC5pc0JvbmUmJihLYS5tdWx0aXBseU1hdHJpY2VzKEZ1LGEubWF0cml4V29ybGQpLFFuLnNldEZyb21NYXRyaXhQb3NpdGlvbihLYSksci5zZXRYWVoobyxRbi54LFFuLnksUW4ueiksS2EubXVsdGlwbHlNYXRyaWNlcyhGdSxhLnBhcmVudC5tYXRyaXhXb3JsZCksUW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEthKSxyLnNldFhZWihvKzEsUW4ueCxRbi55LFFuLnopLG8rPTIpfWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfX07ZnVuY3Rpb24gRDAobil7bGV0IHQ9W107biYmbi5pc0JvbmUmJnQucHVzaChuKTtmb3IobGV0IGU9MDtlPG4uY2hpbGRyZW4ubGVuZ3RoO2UrKyl0LnB1c2guYXBwbHkodCxEMChuLmNoaWxkcmVuW2VdKSk7cmV0dXJuIHR9dmFyIEpoPWNsYXNzIGV4dGVuZHMgZ297Y29uc3RydWN0b3IodD0xMCxlPTEwLGk9NDQ3MzkyNCxyPTg5NDc4NDgpe2k9bmV3IGZ0KGkpLHI9bmV3IGZ0KHIpO2xldCBzPWUvMixvPXQvZSxhPXQvMixsPVtdLGM9W107Zm9yKGxldCBmPTAsZD0wLGc9LWE7Zjw9ZTtmKyssZys9byl7bC5wdXNoKC1hLDAsZyxhLDAsZyksbC5wdXNoKGcsMCwtYSxnLDAsYSk7bGV0IHg9Zj09PXM/aTpyO3gudG9BcnJheShjLGQpLGQrPTMseC50b0FycmF5KGMsZCksZCs9Myx4LnRvQXJyYXkoYyxkKSxkKz0zLHgudG9BcnJheShjLGQpLGQrPTN9bGV0IHU9bmV3IEh0O3Uuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKGwsMykpLHUuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IGVlKGMsMykpO2xldCBoPW5ldyB6bih7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcih1LGgpLHRoaXMudHlwZT0iR3JpZEhlbHBlciJ9fTt2YXIgX1Q9bmV3IEZsb2F0MzJBcnJheSgxKSxDaz1uZXcgSW50MzJBcnJheShfVC5idWZmZXIpO0ZlLmNyZWF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRmUucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG4ucHJvdG90eXBlLmdldFBvaW50PXQsbn07X28ucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKG4pfTtKaC5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuR3JpZEhlbHBlcjogc2V0Q29sb3JzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGFzcyB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiIpfTtaaC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tlbGV0b25IZWxwZXI6IHVwZGF0ZSgpIG5vIGxvbmdlciBuZWVkcyB0byBiZSBjYWxsZWQuIil9O21uLnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Mb2FkZXI6IC5leHRyYWN0VXJsQmFzZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5Mb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSgpIGluc3RlYWQuIiksRGguZXh0cmFjdFVybEJhc2Uobil9O21uLkhhbmRsZXJzPXthZGQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmFkZCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5hZGRIYW5kbGVyKCkgaW5zdGVhZC4iKX0sZ2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5nZXQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuZ2V0SGFuZGxlcigpIGluc3RlYWQuIil9fTtZaS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihuKX07WWkucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTtZaS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX07WWkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKG4pfTtHZS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihuKX07R2UucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTtHZS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX07R2UucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUobil9O0dlLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX07c2kucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9O3FyLnByb3RvdHlwZS5zZXRGcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4iKSx0aGlzLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KG4pfTtZaC5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9O2RlLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KG4sdCl9O2RlLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXgzKHRoaXMpfTtkZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtkZS5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXgzKHRoaXMpfTtkZS5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07ZGUucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShuKS5pbnZlcnQoKX07d3QucHJvdG90eXBlLmV4dHJhY3RQb3NpdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZXh0cmFjdFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY29weVBvc2l0aW9uKCkuIiksdGhpcy5jb3B5UG9zaXRpb24obil9O3d0LnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KG4sdCl9O3d0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRQb3NpdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuZXcgVCgpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX07d3QucHJvdG90eXBlLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpLHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24obil9O3d0LnByb3RvdHlwZS5tdWx0aXBseVRvQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVRvQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX07d3QucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yND1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3d0LnByb3RvdHlwZS5yb3RhdGVBeGlzPWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy50cmFuc2Zvcm1EaXJlY3Rpb24oIG1hdHJpeCApIGluc3RlYWQuIiksbi50cmFuc2Zvcm1EaXJlY3Rpb24odGhpcyl9O3d0LnByb3RvdHlwZS5jcm9zc1ZlY3Rvcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX07d3QucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVYKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3d0LnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVooKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlQnlBeGlzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3d0LnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUubWFrZUZydXN0dW09ZnVuY3Rpb24obix0LGUsaSxyLHMpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlRnJ1c3R1bSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIGluc3RlYWQuIiksdGhpcy5tYWtlUGVyc3BlY3RpdmUobix0LGksZSxyLHMpfTt3dC5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KG4pLmludmVydCgpfTtqZS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKSx0aGlzLmludGVyc2VjdHNMaW5lKG4pfTtFZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgaXMgbm93IHZlY3Rvci5hcHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKSBpbnN0ZWFkLiIpLG4uYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTtFZS5wcm90b3R5cGUuaW52ZXJzZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4iKSx0aGlzLmludmVydCgpfTtvaS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KG4pfTtvaS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25QbGFuZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1BsYW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzUGxhbmUobil9O29pLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUobil9O3JlLnByb3RvdHlwZS5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5hcmVhKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QXJlYSgpLiIpLHRoaXMuZ2V0QXJlYSgpfTtyZS5wcm90b3R5cGUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx0aGlzLmdldEJhcnljb29yZChuLHQpfTtyZS5wcm90b3R5cGUubWlkcG9pbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5taWRwb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE1pZHBvaW50KCkuIiksdGhpcy5nZXRNaWRwb2ludChuKX07cmUucHJvdG90eXBlbm9ybWFsPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksdGhpcy5nZXROb3JtYWwobil9O3JlLnByb3RvdHlwZS5wbGFuZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLnBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0UGxhbmUoKS4iKSx0aGlzLmdldFBsYW5lKG4pfTtyZS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24obix0LGUsaSxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLHJlLmdldEJhcnljb29yZChuLHQsZSxpLHIpfTtyZS5ub3JtYWw9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSxyZS5nZXROb3JtYWwobix0LGUsaSl9O1VuLnByb3RvdHlwZS5leHRyYWN0QWxsUG9pbnRzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuIiksdGhpcy5leHRyYWN0UG9pbnRzKG4pfTtVbi5wcm90b3R5cGUuZXh0cnVkZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJ1ZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXh0cnVkZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgY2kodGhpcyxuKX07VW4ucHJvdG90eXBlLm1ha2VHZW9tZXRyeT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLm1ha2VHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBTaGFwZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgcWkodGhpcyxuKX07Sy5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX07Sy5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8obil9O0sucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtULnByb3RvdHlwZS5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfTtULnByb3RvdHlwZS5zZXRFdWxlckZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfTtULnByb3RvdHlwZS5nZXRQb3NpdGlvbkZyb21NYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFBvc2l0aW9uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhQb3NpdGlvbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKG4pfTtULnByb3RvdHlwZS5nZXRTY2FsZUZyb21NYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFNjYWxlKG4pfTtULnByb3RvdHlwZS5nZXRDb2x1bW5Gcm9tTWF0cml4PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsbil9O1QucHJvdG90eXBlLmFwcGx5UHJvamVjdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlQcm9qZWN0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5hcHBseU1hdHJpeDQoIG0gKSBpbnN0ZWFkLiIpLHRoaXMuYXBwbHlNYXRyaXg0KG4pfTtULnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUobix0LGUpfTtULnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhuKX07VC5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O1d0LnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUobix0LGUpfTtXdC5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O2t0LnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldENoaWxkQnlOYW1lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0T2JqZWN0QnlOYW1lKCkuIiksdGhpcy5nZXRPYmplY3RCeU5hbWUobil9O2t0LnByb3RvdHlwZS5yZW5kZXJEZXB0aD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfTtrdC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSBpbnN0ZWFkLiIpLHRoaXMudHJhbnNsYXRlT25BeGlzKHQsbil9O2t0LnByb3RvdHlwZS5nZXRXb3JsZFJvdGF0aW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkgaW5zdGVhZC4iKX07a3QucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NChuKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoa3QucHJvdG90eXBlLHtldWxlck9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyPW59fSx1c2VRdWF0ZXJuaW9uOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KTtvZS5wcm90b3R5cGUuc2V0RHJhd01vZGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuc2V0RHJhd01vZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvZS5wcm90b3R5cGUse2RyYXdNb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIiksJHd9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfX19KTtkbC5wcm90b3R5cGUuaW5pdEJvbmVzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tpbm5lZE1lc2g6IGluaXRCb25lcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1NlLnByb3RvdHlwZS5zZXRMZW5zPWZ1bmN0aW9uKG4sdCl7Y29uc29sZS53YXJuKCJUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuIFVzZSAuc2V0Rm9jYWxMZW5ndGggYW5kIC5maWxtR2F1Z2UgZm9yIGEgcGhvdG9ncmFwaGljIHNldHVwLiIpLHQhPT12b2lkIDAmJih0aGlzLmZpbG1HYXVnZT10KSx0aGlzLnNldEZvY2FsTGVuZ3RoKG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhZZS5wcm90b3R5cGUse29ubHlTaGFkb3c6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5vbmx5U2hhZG93IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dDYW1lcmFGb3Y6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRm92IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mb3YuIiksdGhpcy5zaGFkb3cuY2FtZXJhLmZvdj1ufX0sc2hhZG93Q2FtZXJhTGVmdDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFMZWZ0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5sZWZ0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5sZWZ0PW59fSxzaGFkb3dDYW1lcmFSaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFSaWdodCBpcyBub3cgLnNoYWRvdy5jYW1lcmEucmlnaHQuIiksdGhpcy5zaGFkb3cuY2FtZXJhLnJpZ2h0PW59fSxzaGFkb3dDYW1lcmFUb3A6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVG9wIGlzIG5vdyAuc2hhZG93LmNhbWVyYS50b3AuIiksdGhpcy5zaGFkb3cuY2FtZXJhLnRvcD1ufX0sc2hhZG93Q2FtZXJhQm90dG9tOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUJvdHRvbSBpcyBub3cgLnNoYWRvdy5jYW1lcmEuYm90dG9tLiIpLHRoaXMuc2hhZG93LmNhbWVyYS5ib3R0b209bn19LHNoYWRvd0NhbWVyYU5lYXI6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTmVhciBpcyBub3cgLnNoYWRvdy5jYW1lcmEubmVhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubmVhcj1ufX0sc2hhZG93Q2FtZXJhRmFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZhciBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZmFyLiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mYXI9bn19LHNoYWRvd0NhbWVyYVZpc2libGU6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFWaXNpYmxlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQ2FtZXJhSGVscGVyKCBsaWdodC5zaGFkb3cuY2FtZXJhICkgaW5zdGVhZC4iKX19LHNoYWRvd0JpYXM6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93QmlhcyBpcyBub3cgLnNoYWRvdy5iaWFzLiIpLHRoaXMuc2hhZG93LmJpYXM9bn19LHNoYWRvd0RhcmtuZXNzOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93RGFya25lc3MgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHNoYWRvd01hcFdpZHRoOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd01hcFdpZHRoIGlzIG5vdyAuc2hhZG93Lm1hcFNpemUud2lkdGguIiksdGhpcy5zaGFkb3cubWFwU2l6ZS53aWR0aD1ufX0sc2hhZG93TWFwSGVpZ2h0OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd01hcEhlaWdodCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLmhlaWdodC4iKSx0aGlzLnNoYWRvdy5tYXBTaXplLmhlaWdodD1ufX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhRdC5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAubGVuZ3RoIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuY291bnQgaW5zdGVhZC4iKSx0aGlzLmFycmF5Lmxlbmd0aH19LGR5bmFtaWM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmR5bmFtaWMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC51c2FnZSBpbnN0ZWFkLiIpLHRoaXMudXNhZ2U9PT1ubH0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKG5sKX19fSk7UXQucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0RHluYW1pYygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0VXNhZ2UoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2Uobj09PSEwP25sOmlvKSx0aGlzfTtRdC5wcm90b3R5cGUuY29weUluZGljZXNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmNvcHlJbmRpY2VzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxRdC5wcm90b3R5cGUuc2V0QXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXRBcnJheSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgQnVmZmVyR2VvbWV0cnkgLnNldEF0dHJpYnV0ZSB0byByZXBsYWNlL3Jlc2l6ZSBhdHRyaWJ1dGUgYnVmZmVycyIpfTtIdC5wcm90b3R5cGUuYWRkSW5kZXg9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEluZGV4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0SW5kZXgoKS4iKSx0aGlzLnNldEluZGV4KG4pfTtIdC5wcm90b3R5cGUuYWRkQXR0cmlidXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRBdHRyaWJ1dGUoKS4iKSwhKHQmJnQuaXNCdWZmZXJBdHRyaWJ1dGUpJiYhKHQmJnQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSk/KGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBub3cgZXhwZWN0cyAoIG5hbWUsIGF0dHJpYnV0ZSApLiIpLHRoaXMuc2V0QXR0cmlidXRlKG4sbmV3IFF0KGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pKSk6bj09PSJpbmRleCI/KGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkuYWRkQXR0cmlidXRlOiBVc2UgLnNldEluZGV4KCkgZm9yIGluZGV4IGF0dHJpYnV0ZS4iKSx0aGlzLnNldEluZGV4KHQpLHRoaXMpOnRoaXMuc2V0QXR0cmlidXRlKG4sdCl9O0h0LnByb3RvdHlwZS5hZGREcmF3Q2FsbD1mdW5jdGlvbihuLHQsZSl7ZSE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZERyYXdDYWxsKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIGluZGV4T2Zmc2V0LiIpLGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIGlzIG5vdyAuYWRkR3JvdXAoKS4iKSx0aGlzLmFkZEdyb3VwKG4sdCl9O0h0LnByb3RvdHlwZS5jbGVhckRyYXdDYWxscz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4iKSx0aGlzLmNsZWFyR3JvdXBzKCl9O0h0LnByb3RvdHlwZS5jb21wdXRlT2Zmc2V0cz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlT2Zmc2V0cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O0h0LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5yZW1vdmVBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5kZWxldGVBdHRyaWJ1dGUoKS4iKSx0aGlzLmRlbGV0ZUF0dHJpYnV0ZShuKX07SHQucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NChuKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSHQucHJvdG90eXBlLHtkcmF3Y2FsbHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmRyYXdjYWxscyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIiksdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLm9mZnNldHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX19KTtHaS5wcm90b3R5cGUuc2V0RHluYW1pYz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKG49PT0hMD9ubDppbyksdGhpc307R2kucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXRBcnJheSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgQnVmZmVyR2VvbWV0cnkgLnNldEF0dHJpYnV0ZSB0byByZXBsYWNlL3Jlc2l6ZSBhdHRyaWJ1dGUgYnVmZmVycyIpfTtjaS5wcm90b3R5cGUuZ2V0QXJyYXlzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuZ2V0QXJyYXlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07Y2kucHJvdG90eXBlLmFkZFNoYXBlTGlzdD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlTGlzdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2NpLnByb3RvdHlwZS5hZGRTaGFwZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07WXIucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZTogLmRpc3Bvc2UoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtUby5wcm90b3R5cGUub25VcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiAub25VcGRhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2Ugb2JqZWN0Lm9uQmVmb3JlUmVuZGVyKCkgaW5zdGVhZC4iKSx0aGlzfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh4ZS5wcm90b3R5cGUse3dyYXBBcm91bmQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxvdmVyZHJhdzp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sd3JhcFJHQjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwUkdCIGhhcyBiZWVuIHJlbW92ZWQuIiksbmV3IGZ0fX0sc2hhZGluZzp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIiksdGhpcy5mbGF0U2hhZGluZz1uPT09YzB9fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPW59fSx2ZXJ0ZXhUYW5nZW50czp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm4ucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1ufX19KTtWdC5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KG4pLHRoaXMuY2xlYXIodCxlLGkpfTtWdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKG4pfTtWdC5wcm90b3R5cGUuZ2V0Q3VycmVudFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKSx0aGlzLmdldFJlbmRlclRhcmdldCgpfTtWdC5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX07VnQucHJvdG90eXBlLmdldFByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufTtWdC5wcm90b3R5cGUucmVzZXRHTFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4iKSx0aGlzLnN0YXRlLnJlc2V0KCl9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKX07VnQucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX07VnQucHJvdG90eXBlLnN1cHBvcnRzQmxlbmRNaW5NYXg9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKX07VnQucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9O1Z0LnByb3RvdHlwZS5lbmFibGVTY2lzc29yVGVzdD1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKSx0aGlzLnNldFNjaXNzb3JUZXN0KG4pfTtWdC5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VnQucHJvdG90eXBlLmFkZFByZVBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0RmFjZUN1bGxpbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFZ0LnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIiksdGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1ufX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIiksdGhpcy5zaGFkb3dNYXAudHlwZT1ufX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxjb250ZXh0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY29udGV4dCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmdldENvbnRleHQoKSBpbnN0ZWFkLiIpLHRoaXMuZ2V0Q29udGV4dCgpfX0sdnI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC52ciBoYXMgYmVlbiByZW5hbWVkIHRvIC54ciIpLHRoaXMueHJ9fSxnYW1tYUlucHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIil9fSxnYW1tYU91dHB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLHRoaXMub3V0cHV0RW5jb2Rpbmc9bj09PSEwPyR0OnJpfX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxnYW1tYUZhY3Rvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIiksMn0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVDAucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyUmV2ZXJzZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclNpbmdsZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE5lLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPW59fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9bn19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9bn19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9bn19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PW59fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PW59fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PW59fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PW59fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT1ufX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1ufX19KTtCaC5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtsZXQgdD10aGlzO3JldHVybiBuZXcgRmgoKS5sb2FkKG4sZnVuY3Rpb24oaSl7dC5zZXRCdWZmZXIoaSl9KSx0aGlzfTtPaC5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvQW5hbHlzZXI6IC5nZXREYXRhKCkgaXMgbm93IC5nZXRGcmVxdWVuY3lEYXRhKCkuIiksdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCl9O2FvLnByb3RvdHlwZS51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLnVwZGF0ZUN1YmVNYXAoKSBpcyBub3cgLnVwZGF0ZSgpLiIpLHRoaXMudXBkYXRlKG4sdCl9O2FvLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbihuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdWJlQ2FtZXJhOiAuY2xlYXIoKSBpcyBub3cgLnJlbmRlclRhcmdldC5jbGVhcigpLiIpLHRoaXMucmVuZGVyVGFyZ2V0LmNsZWFyKG4sdCxlLGkpfTtObi5jcm9zc09yaWdpbj12b2lkIDA7Tm4ubG9hZFRleHR1cmU9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgRWg7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgcz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKHMubWFwcGluZz10KSxzfTtObi5sb2FkVGV4dHVyZUN1YmU9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpO2xldCByPW5ldyBTaDtyLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2xldCBzPXIubG9hZChuLGUsdm9pZCAwLGkpO3JldHVybiB0JiYocy5tYXBwaW5nPXQpLHN9O05uLmxvYWRDb21wcmVzc2VkVGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX07Tm4ubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O3R5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18hPSJ1bmRlZmluZWQiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJlZ2lzdGVyIix7ZGV0YWlsOntyZXZpc2lvbjokaH19KSk7dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJih3aW5kb3cuX19USFJFRV9fP2NvbnNvbGUud2FybigiV0FSTklORzogTXVsdGlwbGUgaW5zdGFuY2VzIG9mIFRocmVlLmpzIGJlaW5nIGltcG9ydGVkLiIpOndpbmRvdy5fX1RIUkVFX189JGgpO2Z1bmN0aW9uIHJmKG4sdCxlKXtpZihlPT09MSlyZXR1cm4gbmV3IGZ0KHQpO2xldCBpPXBpKHQpO2lmKCFpKXRocm93IG5ldyBFcnJvcihgZDMgZmFpbGVkIHRvIHJlY29nbml6ZSB0aGUgY29sb3I6ICR7dH1gKTtyZXR1cm4gbmV3IGZ0KHNjKGksbikoMS1lKSl9dmFyIGduOyhmdW5jdGlvbihuKXtuW24uQ0lSQ0xFPTBdPSJDSVJDTEUiLG5bbi5MSU5FPTFdPSJMSU5FIixuW24uVFJJQU5HTEU9Ml09IlRSSUFOR0xFIixuW24uVFJBUEVaT0lEPTNdPSJUUkFQRVpPSUQifSkoZ258fChnbj17fSkpO2Z1bmN0aW9uIE4wKG4sdCl7bGV0IGU9dC5sZW5ndGgvMixpPW4uYXR0cmlidXRlcy5wb3NpdGlvbjsoIWl8fGkuY291bnQhPT1lKjMpJiYoaT1uZXcgUXQobmV3IEZsb2F0MzJBcnJheShlKjMpLDMpLG4uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsaSkpO2xldCByPWkuYXJyYXk7Zm9yKGxldCBzPTA7czxlO3MrKylyW3MqM109dFtzKjJdLHJbcyozKzFdPXRbcyoyKzFdO2kubmVlZHNVcGRhdGU9ITAsbi5zZXREcmF3UmFuZ2UoMCxlKjMpLG4uY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9ZnVuY3Rpb24gRjAobix0LGUpe2xldCBpPU1hdGgubWF4KHQubGVuZ3RoLzItMSwwKSxyPWkqMiozLHM9ciozLG89bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghb3x8by5jb3VudCE9PXIpJiYobz1uZXcgUXQobmV3IEZsb2F0MzJBcnJheShzKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG8pKTtsZXQgYT1vLmFycmF5O2ZvcihsZXQgbD0wO2w8aTtsKyspe2xldFtjLHUsaCxmXT1bdFsyKmxdLHRbMipsKzFdLHRbMipsKzJdLHRbMipsKzNdXSxkPW5ldyBLKGMsdSksZz1uZXcgSyhoLGYpLHg9bmV3IEsoaC1jLGYtdSksdj1uZXcgSygteC55LHgueCkuc2V0TGVuZ3RoKGUvMiksbT1kLmNsb25lKCkuYWRkKHYpLHA9ZC5jbG9uZSgpLnN1Yih2KSxiPWcuY2xvbmUoKS5hZGQodiksXz1nLmNsb25lKCkuc3ViKHYpLFM9W20ueCxtLnksMCxwLngscC55LDAsYi54LGIueSwwLGIueCxiLnksMCxwLngscC55LDAsXy54LF8ueSwwXTthLnNldChTLGwqUy5sZW5ndGgpfW8ubmVlZHNVcGRhdGU9ITAsbi5zZXREcmF3UmFuZ2UoMCxzKSxuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfWZ1bmN0aW9uIElsKG4sdCxlLGkpe2xldHt2aXNpYmxlOnIsY29sb3I6cyxvcGFjaXR5Om99PWk7aWYoQXJyYXkuaXNBcnJheSh0Lm1hdGVyaWFsKSl0aHJvdyBuZXcgRXJyb3IoIkludmFyaWFudCBlcnJvcjogb25seSBleHBlY3Qgb25lIG1hdGVyaWFsIG9uIGFuIG9iamVjdCIpO2xldCBhPXQubWF0ZXJpYWw7aWYoYS52aXNpYmxlIT09ciYmKGEudmlzaWJsZT1yLGEubmVlZHNVcGRhdGU9ITApLCFyKXJldHVybiExO2xldCBsPXJmKG4scyxvIT1udWxsP286MSksYz1lKHQuZ2VvbWV0cnkpO3JldHVybiB0Lmdlb21ldHJ5IT09YyYmKHQuZ2VvbWV0cnk9YyksYS5jb2xvci5lcXVhbHMobCl8fChhLmNvbG9yLnNldChsKSxhLm5lZWRzVXBkYXRlPSEwKSwhMH12YXIgd1Q9e2NyZWF0ZVNjZW5lOigpPT5uZXcgWXJ9LFJvPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnNjZW5lPXdULmNyZWF0ZVNjZW5lKCksdGhpcy5iYWNrZ3JvdW5kQ29sb3I9IiNmZmYiLERpLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCkmJnQgaW5zdGFuY2VvZiBPZmZzY3JlZW5DYW52YXMmJih0LnN0eWxlPXQuc3R5bGV8fHt9KSxyJiZ0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHIpLHRoaXMucmVuZGVyZXI9bmV3IFZ0KHtjYW52YXM6dCxhbnRpYWxpYXM6ITAsYWxwaGE6ITB9KSx0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8oaSl9b25SZXNpemUodCl7dGhpcy5yZW5kZXJlci5zZXRTaXplKHQud2lkdGgsdC5oZWlnaHQpfWRlc3Ryb3lPYmplY3QodCl7bGV0IGU9dC5vYmozZDtpZih0aGlzLnNjZW5lLnJlbW92ZShlKSxlIGluc3RhbmNlb2Ygb2Upe2UuZ2VvbWV0cnkuZGlzcG9zZSgpO2xldCBpPUFycmF5LmlzQXJyYXkoZS5tYXRlcmlhbCk/ZS5tYXRlcmlhbDpbZS5tYXRlcmlhbF07Zm9yKGxldCByIG9mIGkpci5kaXNwb3NlKCl9fXNldFVzZURhcmtNb2RlKHQpe3RoaXMuYmFja2dyb3VuZENvbG9yPXQ/IiMzMDMwMzAiOiIjZmZmIn1jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodCxlLGkpe3ZhciB1O2lmKCF0JiYhaS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOnIsd2lkdGg6c309aTtpZighdCl7bGV0IGg9cmYodGhpcy5iYWNrZ3JvdW5kQ29sb3IsaS5jb2xvciwodT1pLm9wYWNpdHkpIT1udWxsP3U6MSksZj1uZXcgSHQsZD1uZXcgem4oe2NvbG9yOmh9KSxnPW5ldyBvZShmLGQpO3JldHVybiBkLnZpc2libGU9cixGMChmLGUscyksdGhpcy5zY2VuZS5hZGQoZykse3R5cGU6Z24uTElORSxkYXRhOmUsb2JqM2Q6Zyx3aWR0aDpzfX1sZXR7ZGF0YTpvLG9iajNkOmEsd2lkdGg6bH09dDtyZXR1cm4gSWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IsYSxoPT4oKHMhPT1sfHwhb3x8IURpLmFyZVBvbHlsaW5lc0VxdWFsKG8sZSkpJiZGMChoLGUscyksaCksaSk/e3R5cGU6Z24uTElORSxkYXRhOmUsb2JqM2Q6YSx3aWR0aDpzfTp0fWNyZWF0ZU1lc2godCxlKXtpZighZS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOmksY29sb3I6cixvcGFjaXR5OnN9PWUsbz1yZih0aGlzLmJhY2tncm91bmRDb2xvcixyLHMhPW51bGw/czoxKSxhPW5ldyBraSh7Y29sb3I6byx2aXNpYmxlOml9KTtyZXR1cm4gbmV3IG9lKHQsYSl9Y3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0LGUsaSl7bGV0e3NpemU6cn09aSxzPXIqTWF0aC5zcXJ0KDMpLzIsbz1uZXcgRmxvYXQzMkFycmF5KFtlLngtci8yLGUueS1zLzMsZS54K3IvMixlLnktcy8zLGUueCxlLnkrcyoyLzNdKTtpZighdCl7bGV0IGw9bmV3IEh0O04wKGwsbyk7bGV0IGM9dGhpcy5jcmVhdGVNZXNoKGwsaSk7cmV0dXJuIGM9PT1udWxsP251bGw6KHRoaXMuc2NlbmUuYWRkKGMpLHt0eXBlOmduLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDpjfSl9cmV0dXJuIElsKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsbD0+KE4wKGwsbyksbCksaSk/e3R5cGU6Z24uVFJJQU5HTEUsZGF0YTplLG9iajNkOnQub2JqM2R9OnR9Y3JlYXRlT3JVcGRhdGVDaXJjbGVPYmplY3QodCxlLGkpe2xldHtyYWRpdXM6cn09aSxzPW5ldyBacihpLnJhZGl1cyk7aWYoIXQpe2xldCBhPXRoaXMuY3JlYXRlTWVzaChzLGkpO3JldHVybiBhPT09bnVsbD9udWxsOihhLnBvc2l0aW9uLnNldChlLngsZS55LDApLHRoaXMuc2NlbmUuYWRkKGEpLHt0eXBlOmduLkNJUkNMRSxkYXRhOntsb2M6ZSxyYWRpdXM6cn0sb2JqM2Q6YX0pfXJldHVybiBJbCh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLCgpPT5zLGkpPyh0Lm9iajNkLnBvc2l0aW9uLnNldChlLngsZS55LDApLHt0eXBlOmduLkNJUkNMRSxkYXRhOntsb2M6ZSxyYWRpdXM6cn0sb2JqM2Q6dC5vYmozZH0pOnR9Y3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodCxlLGkscil7aWYoZS55IT09aS55KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnB1dCBlcnJvcjogc3RhcnQueSAhPSBlbmQueS4iKTtsZXR7YWx0aXR1ZGU6c309cixvPTIvTWF0aC5zcXJ0KDMpKnMsYT1uZXcgVW4oW25ldyBLKGUueC1vLzIsZS55LXMvMiksbmV3IEsoZS54LGUueStzLzIpLG5ldyBLKGkueCxpLnkrcy8yKSxuZXcgSyhpLngrby8yLGkueS1zLzIpXSk7YS5hdXRvQ2xvc2U9ITA7bGV0IGw9bmV3IHFpKGEpO2lmKCF0KXtsZXQgdT10aGlzLmNyZWF0ZU1lc2gobCxyKTtyZXR1cm4gdT09PW51bGw/bnVsbDoodGhpcy5zY2VuZS5hZGQodSkse3R5cGU6Z24uVFJBUEVaT0lELGRhdGE6W2UsaV0sb2JqM2Q6dX0pfXJldHVybiBJbCh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLCgpPT5sLHIpP3t0eXBlOmduLlRSQVBFWk9JRCxkYXRhOltlLGldLG9iajNkOnQub2JqM2R9OnR9Zmx1c2goKXt0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLHRoaXMuY29vcmRpbmF0b3IuZ2V0Q2FtZXJhKCkpfWRpc3Bvc2UoKXt0aGlzLnJlbmRlcmVyLmRpc3Bvc2UoKX19O3ZhciBObD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucmVuZGVyQ2FjaGU9dCx0aGlzLnJlbmRlcmVyPWV9c2V0TGluZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkpO3ImJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxyKX1zZXRUcmlhbmdsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0Q2lyY2xlKHQsZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJhcGV6b2lkKHQsZSxpLHIpe2xldCBzPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkscik7cyYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHMpfX07dmFyIHNmPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5wcmV2RnJhbWVDYWNoZT1uZXcgTWFwLHRoaXMuY3VyckZyYW1lQ2FjaGU9bmV3IE1hcH1nZXRGcm9tUHJldmlvdXNGcmFtZSh0KXtsZXQgZT10aGlzLnByZXZGcmFtZUNhY2hlLmdldCh0KTtyZXR1cm4gZSE9bnVsbD9lOm51bGx9c2V0VG9DdXJyZW50RnJhbWUodCxlKXt0aGlzLmN1cnJGcmFtZUNhY2hlLnNldCh0LGUpfWZpbmFsaXplRnJhbWVBbmRHZXRSZW1vdmVkKCl7bGV0IHQ9W107Zm9yKGxldFtlLGldb2YgdGhpcy5wcmV2RnJhbWVDYWNoZS5lbnRyaWVzKCkpdGhpcy5jdXJyRnJhbWVDYWNoZS5oYXMoZSl8fHQucHVzaChpKTtyZXR1cm4gdGhpcy5wcmV2RnJhbWVDYWNoZT10aGlzLmN1cnJGcmFtZUNhY2hlLHRoaXMuY3VyckZyYW1lQ2FjaGU9bmV3IE1hcCx0fX0sRmw9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5yYXdTZXJpZXNEYXRhPVtdLHRoaXMuc2VyaWVzPVtdLHRoaXMucGFpbnREaXJ0eT0hMCx0aGlzLnJlbmRlckNhY2hlPW5ldyBzZix0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGwsdGhpcy5sYXlvdXQ9e3g6MCx3aWR0aDoxLHk6MCxoZWlnaHQ6MX0sdGhpcy5nZXRNZXRhZGF0YU1hcEltcGw9dC5nZXRNZXRhZGF0YU1hcCx0aGlzLmNvb3JkaW5hdG9yPXQuY29vcmRpbmF0b3IsdGhpcy5yZW5kZXJlcj10LnJlbmRlcmVyLHRoaXMucGFpbnRCcnVzaD1uZXcgTmwodGhpcy5yZW5kZXJDYWNoZSx0aGlzLnJlbmRlcmVyKX1zZXRMYXlvdXRSZWN0KHQpeyh0aGlzLmxheW91dC54IT09dC54fHx0aGlzLmxheW91dC53aWR0aCE9PXQud2lkdGh8fHRoaXMubGF5b3V0LnkhPT10Lnl8fHRoaXMubGF5b3V0LmhlaWdodCE9PXQuaGVpZ2h0KSYmKHRoaXMucGFpbnREaXJ0eT0hMCksdGhpcy5sYXlvdXQ9dH1nZXRMYXlvdXRSZWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0fWdldE1ldGFkYXRhTWFwKCl7cmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsKCl9bWFya0FzUGFpbnREaXJ0eSgpe3RoaXMucGFpbnREaXJ0eT0hMH1yZW5kZXIoKXtpZih0aGlzLnRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpLCEhdGhpcy5wYWludERpcnR5KXt0aGlzLnJlZHJhdygpO2ZvcihsZXQgdCBvZiB0aGlzLnJlbmRlckNhY2hlLmZpbmFsaXplRnJhbWVBbmRHZXRSZW1vdmVkKCkpdGhpcy5yZW5kZXJlci5kZXN0cm95T2JqZWN0KHQpO3RoaXMucGFpbnREaXJ0eT0hMX19aXNDb29yZGluYXRlVXBkYXRlZCgpe3JldHVybiB0aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSE9PXRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXJ9Y2xlYXJDb29yZGluYXRlSWRlbnRpZmllcigpe3RoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbH1zZXREYXRhKHQpe3RoaXMuY2xlYXJDb29yZGluYXRlSWRlbnRpZmllcigpLHRoaXMucmF3U2VyaWVzRGF0YT10fXRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpe2lmKCF0aGlzLmlzQ29vcmRpbmF0ZVVwZGF0ZWQoKSlyZXR1cm47bGV0IHQ9dGhpcy5nZXRMYXlvdXRSZWN0KCk7dGhpcy5zZXJpZXM9bmV3IEFycmF5KHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dGhpcy5yYXdTZXJpZXNEYXRhLmxlbmd0aDtlKyspe2xldCBpPXRoaXMucmF3U2VyaWVzRGF0YVtlXTt0aGlzLnNlcmllc1tlXT17aWQ6aS5pZCxwb2x5bGluZTpuZXcgRmxvYXQzMkFycmF5KGkucG9pbnRzLmxlbmd0aCoyKX07Zm9yKGxldCByPTA7cjxpLnBvaW50cy5sZW5ndGg7cisrKXtsZXRbcyxvXT10aGlzLmNvb3JkaW5hdG9yLnRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxbaS5wb2ludHNbcl0ueCxpLnBvaW50c1tyXS55XSk7dGhpcy5zZXJpZXNbZV0ucG9seWxpbmVbcioyXT1zLHRoaXMuc2VyaWVzW2VdLnBvbHlsaW5lW3IqMisxXT1vfX10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPXRoaXMuY29vcmRpbmF0b3IuZ2V0VXBkYXRlSWRlbnRpZmllcigpLHRoaXMubWFya0FzUGFpbnREaXJ0eSgpfX07dmFyIExvOyhmdW5jdGlvbihuKXtuW24uTlVNQkVSPTBdPSJOVU1CRVIiLG5bbi5OQU49MV09Ik5BTiJ9KShMb3x8KExvPXt9KSk7dmFyIHpsPWNsYXNzIGV4dGVuZHMgRmx7cmVjb3JkUGFydGl0aW9uKHQsZSxpKXtyZXR1cm4gdD97dHlwZTpMby5OVU1CRVIscG9seWxpbmU6ZX06e3R5cGU6TG8uTkFOLHBvbHlsaW5lOmUubWFwKChyLHMpPT5pc05hTihyKT9zJTI9PT0wP2kueDppLnk6cil9fXBhcnRpdGlvblBvbHlsaW5lKHQpe2xldCBlPVtdLGk9MCxyPSExLHM9dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHRoaXMuZ2V0TGF5b3V0UmVjdCgpLFswLDBdKSxvPXt4OnNbMF0seTpzWzFdfSxhPW51bGw7Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKz0yKXtsZXQgYz10W2xdLHU9dFtsKzFdLGg9aXNOYU4oYyl8fGlzTmFOKHUpO2ghPT1yJiZpIT09bCYmKGUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksbCksYT09PW51bGw/e3g6Yyx5OnV9OmEpKSxpPWwpLGh8fChhPXt4OmMseTp1fSkscj1ofXJldHVybiBpIT09dC5sZW5ndGgtMSYmZS5wdXNoKHRoaXMucmVjb3JkUGFydGl0aW9uKCFyLHQuc2xpY2UoaSx0Lmxlbmd0aCksYSE9bnVsbD9hOm8pKSxlfXJlZHJhdygpe3ZhciB0LGUsaTtmb3IobGV0IHIgb2YgdGhpcy5zZXJpZXMpe2xldCBvPXRoaXMuZ2V0TWV0YWRhdGFNYXAoKVtyLmlkXTtpZighbyljb250aW51ZTtpZihyLnBvbHlsaW5lLmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBoYXZlIG9kZCBsZW5ndGgtZWQgcG9seWxpbmU6ICR7ci5wb2x5bGluZS5sZW5ndGh9YCk7bGV0IGE9dGhpcy5wYXJ0aXRpb25Qb2x5bGluZShyLnBvbHlsaW5lKTtmb3IobGV0W2wse3R5cGU6Yyxwb2x5bGluZTp1fV1vZiBhLmVudHJpZXMoKSlpZihjPT09TG8uTlVNQkVSKXUubGVuZ3RoPT09Mj90aGlzLnBhaW50QnJ1c2guc2V0Q2lyY2xlKEpTT04uc3RyaW5naWZ5KFsiY2lyY2xlIixyLmlkLGxdKSx7eDp1WzBdLHk6dVsxXX0se2NvbG9yOm8uY29sb3IsdmlzaWJsZTpvLnZpc2libGUsb3BhY2l0eToodD1vLm9wYWNpdHkpIT1udWxsP3Q6MSxyYWRpdXM6NH0pOnRoaXMucGFpbnRCcnVzaC5zZXRMaW5lKEpTT04uc3RyaW5naWZ5KFsibGluZSIsci5pZCxsXSksdSx7Y29sb3I6by5jb2xvcix2aXNpYmxlOm8udmlzaWJsZSxvcGFjaXR5OihlPW8ub3BhY2l0eSkhPW51bGw/ZToxLHdpZHRoOjJ9KTtlbHNlIGlmKCFvLmF1eClmb3IobGV0IGg9MDtoPHUubGVuZ3RoO2grPTIpdGhpcy5wYWludEJydXNoLnNldFRyaWFuZ2xlKEpTT04uc3RyaW5naWZ5KFsiTmFOIixyLmlkLHVbaF0sdVtoKzFdXSkse3g6dVtoXSx5OnVbaCsxXX0se2NvbG9yOm8uY29sb3IsdmlzaWJsZTpvLnZpc2libGUsb3BhY2l0eTooaT1vLm9wYWNpdHkpIT1udWxsP2k6MSxzaXplOjEyfSl9fX07dmFyIFVsPWNsYXNzIGV4dGVuZHMgZHJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY2FtZXJhPW5ldyBWaSgwLDFlMywxZTMsMCwwLDEwMCl9aXNZQXhpc1BvaW50ZWREb3duKCl7cmV0dXJuITF9c2V0RG9tQ29udGFpbmVyUmVjdCh0KXtzdXBlci5zZXREb21Db250YWluZXJSZWN0KHQpLHRoaXMuY2FtZXJhLmxlZnQ9dC54LHRoaXMuY2FtZXJhLnJpZ2h0PXQueCt0LndpZHRoLHRoaXMuY2FtZXJhLnRvcD10LnkrdC5oZWlnaHQsdGhpcy5jYW1lcmEuYm90dG9tPXQueSx0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Z2V0Q2FtZXJhKCl7cmV0dXJuIHRoaXMuY2FtZXJhfX07dmFyIE1UPXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWU6bj0+c2VsZi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9LEJsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3N3aXRjaCh0aGlzLm1ldGFkYXRhTWFwPXt9LHRoaXMuc2hvdWxkUmVwYWludD0hMSx0aGlzLmNhbGxiYWNrcz10LmNhbGxiYWNrcyx0LnR5cGUpe2Nhc2UgVG4uU1ZHOnt0aGlzLmNvb3JkaW5hdG9yPW5ldyBkcix0aGlzLnJlbmRlcmVyPW5ldyBPcyh0LmNvbnRhaW5lcik7YnJlYWt9Y2FzZSBUbi5XRUJHTDp7bGV0IGU9bmV3IFVsO3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnJlbmRlcmVyPW5ldyBSbyh0LmNvbnRhaW5lcixlLHQuZGV2aWNlUGl4ZWxSYXRpbyx0LmNhbGxiYWNrcy5vbkNvbnRleHRMb3N0KTticmVha319dGhpcy5yZW5kZXJlci5zZXRVc2VEYXJrTW9kZSh0LnVzZURhcmtNb2RlKSx0aGlzLnNlcmllc0xpbmVWaWV3PW5ldyB6bCh7cmVuZGVyZXI6dGhpcy5yZW5kZXJlcixjb29yZGluYXRvcjp0aGlzLmNvb3JkaW5hdG9yLGdldE1ldGFkYXRhTWFwOigpPT50aGlzLm1ldGFkYXRhTWFwfSksdGhpcy5yZXNpemUodC5kb21EaW1lbnNpb24pfWRpc3Bvc2UoKXt9c2V0WFNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFhTY2FsZShmcih0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRZU2NhbGVUeXBlKHQpe3RoaXMuY29vcmRpbmF0b3Iuc2V0WVNjYWxlKGZyKHQpKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXJlc2l6ZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldERvbUNvbnRhaW5lclJlY3QoTm8oe3g6MCx5OjB9LHQpKSx0aGlzLnJlbmRlcmVyLm9uUmVzaXplKE5vKHt4OjAseTowfSx0KSksdGhpcy5zZXJpZXNMaW5lVmlldy5zZXRMYXlvdXRSZWN0KHVmKE5vKHt9LHQpLHt4OjAseTowfSkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0TWV0YWRhdGEodCl7bGV0IGU9ITE7T2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW2kscl0pPT57bGV0IHM9dGhpcy5tZXRhZGF0YU1hcFtpXTsoIXN8fHIuY29sb3IhPT1zLmNvbG9yfHxyLnZpc2libGUhPT1zLnZpc2libGV8fHIub3BhY2l0eSE9PXMub3BhY2l0eSkmJihlPSEwKSx0aGlzLm1ldGFkYXRhTWFwW2ldPXJ9KSxlJiZ0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFZpZXdCb3godCl7dGhpcy5jb29yZGluYXRvci5zZXRWaWV3Qm94UmVjdCh7eDp0LnhbMF0sd2lkdGg6dC54WzFdLXQueFswXSx5OnQueVswXSxoZWlnaHQ6dC55WzFdLXQueVswXX0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0RGF0YSh0KXt0aGlzLnNlcmllc0xpbmVWaWV3LnNldERhdGEodCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnJlbmRlcmVyLnNldFVzZURhcmtNb2RlKHQpLHRoaXMuc2VyaWVzTGluZVZpZXcubWFya0FzUGFpbnREaXJ0eSgpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2NoZWR1bGVSZXBhaW50KCl7dGhpcy5zaG91bGRSZXBhaW50fHwodGhpcy5zaG91bGRSZXBhaW50PSEwLE1ULnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMucmVwYWludCgpLHRoaXMuc2hvdWxkUmVwYWludD0hMX0pKX1yZXBhaW50KCl7dGhpcy5zZXJpZXNMaW5lVmlldy5yZW5kZXIoKSx0aGlzLnJlbmRlcmVyLmZsdXNoKCksdGhpcy5jYWxsYmFja3Mub25EcmF3RW5kKCl9fTtmdW5jdGlvbiB6MChuKXtsZXR7ZmxhdHRlbmVkU2VyaWVzOnQsaWRzQW5kTGVuZ3RoczplfT1uLGk9bmV3IEZsb2F0NjRBcnJheSh0KSxyPVtdO2lmKGkubGVuZ3RoJTIhPT0wKXRocm93IG5ldyBFcnJvcigiYGZsYXR0ZW5lZFNlcmllc2AgbXVzdCBoYXZlIGV2ZW4gbnVtYmVyIG9mIGVsZW1lbnRzIik7bGV0IHM9MDtmb3IobGV0e2lkOm8sbGVuZ3RoOmF9b2YgZSl7bGV0IGw9W107Zm9yKGxldCBjPTA7YzxhO2MrKylsLnB1c2goe3g6aVtzKytdLHk6aVtzKytdfSk7ci5wdXNoKHtpZDpvLHBvaW50czpsfSl9cmV0dXJuIHJ9dmFyIHhuOyhmdW5jdGlvbihuKXtuW24uU0VSSUVTX0RBVEFfVVBEQVRFRD0wXT0iU0VSSUVTX0RBVEFfVVBEQVRFRCIsbltuLlNFUklFU19NRVRBREFUQV9DSEFOR0VEPTFdPSJTRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCIsbltuLlNDQUxFX1VQREFURUQ9Ml09IlNDQUxFX1VQREFURUQiLG5bbi5WSUVXX0JPWF9VUERBVEVEPTNdPSJWSUVXX0JPWF9VUERBVEVEIixuW24uSU5JVD00XT0iSU5JVCIsbltuLkRPTV9SRVNJWkVEPTVdPSJET01fUkVTSVpFRCIsbltuLkRBUktfTU9ERV9VUERBVEVEPTZdPSJEQVJLX01PREVfVVBEQVRFRCIsbltuLkRJU1BPU0VEPTddPSJESVNQT1NFRCJ9KSh4bnx8KHhuPXt9KSk7dmFyIFBvOyhmdW5jdGlvbihuKXtuW24uT05fUkVEUkFXX0VORD0wXT0iT05fUkVEUkFXX0VORCIsbltuLk9OX0NPTlRFWFRfTE9TVD0xXT0iT05fQ09OVEVYVF9MT1NUIn0pKFBvfHwoUG89e30pKTtzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG49PntiVChuLnBvcnRzWzBdLG4uZGF0YSl9KTtmdW5jdGlvbiBiVChuLHQpe2xldHtjYW52YXM6ZSxkZXZpY2VQaXhlbFJhdGlvOmksZGltOnIscmVuZGVyZXJUeXBlOnMsdXNlRGFya01vZGU6b309dCxhPXtvbkRyYXdFbmQ6KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOlBvLk9OX1JFRFJBV19FTkR9KX0sb25Db250ZXh0TG9zdDooKT0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6UG8uT05fQ09OVEVYVF9MT1NUfSl9fSxsO3N3aXRjaChzKXtjYXNlIFRuLldFQkdMOmw9e3R5cGU6VG4uV0VCR0wsZG9tRGltZW5zaW9uOnIsY2FsbGJhY2tzOmEsY29udGFpbmVyOmUsZGV2aWNlUGl4ZWxSYXRpbzppLHVzZURhcmtNb2RlOm99O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFyaWFudCBlcnJvcjogY2Fubm90IGhhdmUgT2Zmc2NyZWVuIGNoYXJ0IGZvciByZW5kZXJlciB0eXBlOiAke3N9YCl9bGV0IGM9bmV3IEJsKGwpO24ub25tZXNzYWdlPWZ1bmN0aW9uKHUpe2xldCBoPXUuZGF0YTtzd2l0Y2goaC50eXBlKXtjYXNlIHhuLlNFUklFU19EQVRBX1VQREFURUQ6e2xldCBmPXowKGguY29tcGFjdERhdGFTZXJpZXMpO2Muc2V0RGF0YShmKTticmVha31jYXNlIHhuLlNFUklFU19NRVRBREFUQV9DSEFOR0VEOntjLnNldE1ldGFkYXRhKGgubWV0YWRhdGEpO2JyZWFrfWNhc2UgeG4uVklFV19CT1hfVVBEQVRFRDp7Yy5zZXRWaWV3Qm94KGguZXh0ZW50KTticmVha31jYXNlIHhuLkRPTV9SRVNJWkVEOntjLnJlc2l6ZShoLmRpbSk7YnJlYWt9Y2FzZSB4bi5EQVJLX01PREVfVVBEQVRFRDp7Yy5zZXRVc2VEYXJrTW9kZShoLnVzZURhcmtNb2RlKTticmVha31jYXNlIHhuLlNDQUxFX1VQREFURUQ6e3N3aXRjaChoLmF4aXMpe2Nhc2UieCI6Yy5zZXRYU2NhbGVUeXBlKGguc2NhbGVUeXBlKTticmVhaztjYXNlInkiOmMuc2V0WVNjYWxlVHlwZShoLnNjYWxlVHlwZSk7YnJlYWs7ZGVmYXVsdDpsZXQgZj1oLmF4aXM7dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVua25vd24gYXhpczogJHtmfWApfWJyZWFrfWNhc2UgeG4uRElTUE9TRUQ6e2MuZGlzcG9zZSgpO2JyZWFrfX19fX0pKCk7Ci8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgMjAxMC0yMDIyIFRocmVlLmpzIEF1dGhvcnMKICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAogKi8KLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hhcnRfd29ya2VyLmpzLm1hcAo=", "headers": [ [ "content-type", "text/javascript; charset=utf-8" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/data/environment": { "data": "eyJ2ZXJzaW9uIjogIjIuMTIuMSIsICJkYXRhX2xvY2F0aW9uIjogIi4vd29ya19kaXJzIiwgIndpbmRvd190aXRsZSI6ICIiLCAiZXhwZXJpbWVudF9uYW1lIjogIiIsICJleHBlcmltZW50X2Rlc2NyaXB0aW9uIjogIiIsICJjcmVhdGlvbl90aW1lIjogMCwgImRlYnVnIjogeyJkYXRhX3Byb3ZpZGVyIjogIk11bHRpcGxleGVyRGF0YVByb3ZpZGVyKGxvZ2Rpcj0nLi93b3JrX2RpcnMnKSIsICJmbGFncyI6IHsibG9nZGlyIjogIi4vd29ya19kaXJzIiwgImxvZ2Rpcl9zcGVjIjogIiIsICJob3N0IjogbnVsbCwgImJpbmRfYWxsIjogZmFsc2UsICJwb3J0IjogbnVsbCwgInJldXNlX3BvcnQiOiBmYWxzZSwgImxvYWRfZmFzdCI6ICJhdXRvIiwgImV4dHJhX2RhdGFfc2VydmVyX2ZsYWdzIjogIiIsICJncnBjX2NyZWRzX3R5cGUiOiAibG9jYWwiLCAiZ3JwY19kYXRhX3Byb3ZpZGVyIjogIiIsICJwdXJnZV9vcnBoYW5lZF9kYXRhIjogdHJ1ZSwgImRiIjogIiIsICJkYl9pbXBvcnQiOiBmYWxzZSwgImluc3BlY3QiOiBmYWxzZSwgInZlcnNpb25fdGIiOiBmYWxzZSwgInRhZyI6ICIiLCAiZXZlbnRfZmlsZSI6ICIiLCAicGF0aF9wcmVmaXgiOiAiIiwgIndpbmRvd190aXRsZSI6ICIiLCAibWF4X3JlbG9hZF90aHJlYWRzIjogMSwgInJlbG9hZF9pbnRlcnZhbCI6IDUuMCwgInJlbG9hZF90YXNrIjogImF1dG8iLCAicmVsb2FkX211bHRpZmlsZSI6IG51bGwsICJyZWxvYWRfbXVsdGlmaWxlX2luYWN0aXZlX3NlY3MiOiA4NjQwMCwgImdlbmVyaWNfZGF0YSI6ICJhdXRvIiwgInNhbXBsZXNfcGVyX3BsdWdpbiI6IHt9LCAiZGV0ZWN0X2ZpbGVfcmVwbGFjZW1lbnQiOiBudWxsLCAiY3VzdG9tX3ByZWRpY3RfZm4iOiAiIiwgIndpdF9kYXRhX2RpciI6ICIiLCAiX190ZW5zb3Jib2FyZF9zdWJjb21tYW5kIjogInNlcnZlIn19fQ==", "headers": [ [ "content-type", "application/json" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/data/plugins_listing": { "data": "eyJ0aW1lc2VyaWVzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJUaW1lIFNlcmllcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJOR19DT01QT05FTlQifX0sICJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJzY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1zY2FsYXItZGFzaGJvYXJkIn19LCAiY3VzdG9tX3NjYWxhcnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJDdXN0b20gU2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQifX0sICJpbWFnZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJpbWFnZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWltYWdlLWRhc2hib2FyZCJ9fSwgImF1ZGlvIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiYXVkaW8iLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWF1ZGlvLWRhc2hib2FyZCJ9fSwgImRlYnVnZ2VyLXYyIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiRGVidWdnZXIgVjIiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAiZ3JhcGhzIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJncmFwaHMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWdyYXBoLWRhc2hib2FyZCJ9fSwgImRpc3RyaWJ1dGlvbnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJkaXN0cmlidXRpb25zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIn19LCAiaGlzdG9ncmFtcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImhpc3RvZ3JhbXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWhpc3RvZ3JhbS1kYXNoYm9hcmQifX0sICJ0ZXh0IjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJ0ZXh0IiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi10ZXh0LWRhc2hib2FyZCJ9fSwgInByX2N1cnZlcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlBSIEN1cnZlcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtcHItY3VydmUtZGFzaGJvYXJkIn19LCAicHJvZmlsZV9yZWRpcmVjdCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlByb2ZpbGUiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIn19LCAiaHBhcmFtcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImhwYXJhbXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWhwYXJhbXMtZGFzaGJvYXJkIn19LCAibWVzaCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIm1lc2giLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogIm1lc2gtZGFzaGJvYXJkIn19LCAicHJvamVjdG9yIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJwcm9qZWN0b3IiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiSUZSQU1FIiwgIm1vZHVsZV9wYXRoIjogIi9kYXRhL3BsdWdpbi9wcm9qZWN0b3IvaW5kZXguanMifX0sICJ3aGF0aWYiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJXaGF0LUlmIFRvb2wiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiSUZSQU1FIiwgIm1vZHVsZV9wYXRoIjogIi9kYXRhL3BsdWdpbi93aGF0aWYvaW5kZXguanMifX19", "headers": [ [ "content-type", "application/json" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/data/runs": { "data": "WyJydG1kZXRfdGlueV8xeGI0LTIwZV9iYWxsb29uLzIwMjMwNDE3XzEwMjgzNS92aXNfZGF0YSJd", "headers": [ [ "content-type", "application/json" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/tags": { "data": "eyJzY2FsYXJzIjogeyJydW5UYWdJbmZvIjogeyJydG1kZXRfdGlueV8xeGI0LTIwZV9iYWxsb29uLzIwMjMwNDE3XzEwMjgzNS92aXNfZGF0YSI6IFsiY29jby9iYm94X21BUCIsICJjb2NvL2Jib3hfbUFQXzUwIiwgImNvY28vYmJveF9tQVBfNzUiLCAiY29jby9iYm94X21BUF9sIiwgImNvY28vYmJveF9tQVBfbSIsICJjb2NvL2Jib3hfbUFQX3MiLCAiZGF0YV90aW1lIiwgImVwb2NoIiwgImxvc3MiLCAibG9zc19iYm94IiwgImxvc3NfY2xzIiwgImxyIiwgIm1lbW9yeSIsICJ0aW1lIl19LCAidGFnRGVzY3JpcHRpb25zIjoge319LCAiaGlzdG9ncmFtcyI6IHsicnVuVGFnSW5mbyI6IHt9LCAidGFnRGVzY3JpcHRpb25zIjoge319LCAiaW1hZ2VzIjogeyJ0YWdEZXNjcmlwdGlvbnMiOiB7fSwgInRhZ1J1blNhbXBsZWRJbmZvIjoge319fQ==", "headers": [ [ "content-type", "application/json" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22coco/bbox_mAP%22%7D%5D": { "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogImNvY28vYmJveF9tQVAiLCAicnVuVG9TZXJpZXMiOiB7InJ0bWRldF90aW55XzF4YjQtMjBlX2JhbGxvb24vMjAyMzA0MTdfMTAyODM1L3Zpc19kYXRhIjogW3sid2FsbFRpbWUiOiAxNjgxNzI3MzM1LjQ0MjIzNzksICJzdGVwIjogMSwgInZhbHVlIjogMC4wNDM5OTk5OTk3NjE1ODE0Mn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzQ1LjYzOTAwNTcsICJzdGVwIjogMiwgInZhbHVlIjogMC4xMjgwMDAwMDYwNzk2NzM3N30sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzUyLjk2ODcxOTIsICJzdGVwIjogMywgInZhbHVlIjogMC4zMDc5OTk5OTgzMzEwNjk5NX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzYyLjQ5MTM0OSwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjQwNTk5OTk4ODMxNzQ4OTZ9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM3MS42NTA0NDAyLCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNDI1OTk5OTk5MDQ2MzI1N30sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzgxLjQyNjk5MSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjQ1NTAwMDAxMzExMzAyMTg1fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczODkuNTM3NDE4OCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjQ5Mzk5OTk4Nzg0MDY1MjQ3fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczOTcuNjg0OTgxLCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNTQxOTk5OTk1NzA4NDY1Nn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDA3LjAzMzE4MSwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjYxMTAwMDAwMTQzMDUxMTV9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQxNi4wMzkzMTk1LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjYyMzAwMDAyNTc0OTIwNjV9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQyNS42NTUyMzgyLCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjY0NDk5OTk4MDkyNjUxMzd9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQzMy4wMDQyMzY1LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjYxNjk5OTk4Mzc4NzUzNjZ9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ0Mi4wNDk3MzIyLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjYzNDk5OTk5MDQ2MzI1Njh9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ0Ny45MzQ3MzksICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNjM1OTk5OTc3NTg4NjUzNn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDU3Ljk3NTI4NTMsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNjQzOTk5OTkzODAxMTE2OX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDYzLjgyNTkzMTgsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNjY2OTk5OTk1NzA4NDY1Nn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDczLjQ2ODcxMDIsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNjcwMDAwMDE2Njg5MzAwNX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDgwLjc4OTkzNzUsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNjU3MDAwMDA1MjQ1MjA4N30sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDg4LjkyMzkyOCwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC42NDgwMDAwMDE5MDczNDg2fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0OTQuNTY5MzkzLCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjY1MjAwMDAxMDAxMzU4MDN9XX19XQ==", "headers": [ [ "content-type", "application/json" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22coco/bbox_mAP_50%22%7D%5D": { "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogImNvY28vYmJveF9tQVBfNTAiLCAicnVuVG9TZXJpZXMiOiB7InJ0bWRldF90aW55XzF4YjQtMjBlX2JhbGxvb24vMjAyMzA0MTdfMTAyODM1L3Zpc19kYXRhIjogW3sid2FsbFRpbWUiOiAxNjgxNzI3MzM1LjQ0MjQ1MDMsICJzdGVwIjogMSwgInZhbHVlIjogMC4wNTkwMDAwMDAzNTc2Mjc4N30sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzQ1LjYzOTEwOTYsICJzdGVwIjogMiwgInZhbHVlIjogMC4xNjUwMDAwMDY1NTY1MTA5M30sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzUyLjk2ODgxNDgsICJzdGVwIjogMywgInZhbHVlIjogMC4zODEwMDAwMTIxNTkzNDc1M30sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzYyLjQ5MTQ1MDgsICJzdGVwIjogNCwgInZhbHVlIjogMC41MzEwMDAwMTgxMTk4MTJ9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM3MS42NTA2MTc2LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNTQ2OTk5OTkwOTQwMDk0fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczODEuNDI3MDg5NywgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjU3ODk5OTk5NjE4NTMwMjd9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM4OS41Mzc1NDI4LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNjU3OTk5OTkyMzcwNjA1NX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3Mzk3LjY4NTA4NTMsICJzdGVwIjogOCwgInZhbHVlIjogMC42OTMwMDAwMTg1OTY2NDkyfSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0MDcuMDMzMzAyNSwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjcyNTAwMDAyMzg0MTg1Nzl9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQxNi4wMzk0NTQyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjc0MDk5OTk5NjY2MjEzOTl9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQyNS42NTUzNTAyLCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjc3MjAwMDAxNDc4MTk1MTl9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQzMy4wMDQzMzczLCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjc1MDk5OTk4NzEyNTM5Njd9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ0Mi4wNDk4MjUsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNzU0OTk5OTk1MjMxNjI4NH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDQ3LjkzNDgzMTEsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNzM5MDAwMDIyNDExMzQ2NH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDU3Ljk3NTQwNTIsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNzV9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ2My44MjYwMjU3LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjc2ODk5OTk5MzgwMTExNjl9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ3My40Njg4MDgsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNzY4OTk5OTkzODAxMTE2OX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDgwLjc5MDAzMzgsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNzU0OTk5OTk1MjMxNjI4NH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDg4LjkyNDAyNTUsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNzU4MDAwMDE2MjEyNDYzNH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDk0LjU2OTUyMywgInN0ZXAiOiAyMCwgInZhbHVlIjogMC43OTQwMDAwMjk1NjM5MDM4fV19fV0=", "headers": [ [ "content-type", "application/json" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2": { "data": "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", "headers": [ [ "content-type", "font/woff2" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/font-roboto/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2": { "data": "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", "headers": [ [ "content-type", "font/woff2" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/font-roboto/vPcynSL0qHq_6dX7lKVByXYhjbSpvc47ee6xR_80Hnw.woff2": { "data": "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", "headers": [ [ "content-type", "font/woff2" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/icon_bundle.svg": { "data": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmc+PGRlZnM+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iYXJyb3dfZG93bndhcmRfMjRweCI+PHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJhcnJvd191cHdhcmRfMjRweCI+PHBhdGggZD0iTTQgMTJsMS40MSAxLjQxTDExIDcuODNWMjBoMlY3LjgzbDUuNTggNS41OUwyMCAxMmwtOC04LTggOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJicmlnaHRuZXNzXzZfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJidWdfcmVwb3J0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgOGgtMi44MWMtLjQ1LS43OC0xLjA3LTEuNDUtMS44Mi0xLjk2TDE3IDQuNDEgMTUuNTkgM2wtMi4xNyAyLjE3QzEyLjk2IDUuMDYgMTIuNDkgNSAxMiA1Yy0uNDkgMC0uOTYuMDYtMS40MS4xN0w4LjQxIDMgNyA0LjQxbDEuNjIgMS42M0M3Ljg4IDYuNTUgNy4yNiA3LjIyIDYuODEgOEg0djJoMi4wOWMtLjA1LjMzLS4wOS42Ni0uMDkgMXYxSDR2MmgydjFjMCAuMzQuMDQuNjcuMDkgMUg0djJoMi44MWMxLjA0IDEuNzkgMi45NyAzIDUuMTkgM3M0LjE1LTEuMjEgNS4xOS0zSDIwdi0yaC0yLjA5Yy4wNS0uMzMuMDktLjY2LjA5LTF2LTFoMnYtMmgtMnYtMWMwLS4zNC0uMDQtLjY3LS4wOS0xSDIwVjh6bS02IDhoLTR2LTJoNHYyem0wLTRoLTR2LTJoNHYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNhbmNlbF8yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptNSAxMy41OUwxNS41OSAxNyAxMiAxMy40MSA4LjQxIDE3IDcgMTUuNTkgMTAuNTkgMTIgNyA4LjQxIDguNDEgNyAxMiAxMC41OSAxNS41OSA3IDE3IDguNDEgMTMuNDEgMTIgMTcgMTUuNTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2hhbmdlX2hpc3RvcnlfMjRweCI+PHBhdGggZD0iTTEyIDcuNzdMMTguMzkgMThINS42MUwxMiA3Ljc3TTEyIDRMMiAyMGgyMEwxMiA0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNoZXZyb25fbGVmdF8yNHB4Ij48cGF0aCBkPSJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjaGV2cm9uX3JpZ2h0XzI0cHgiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjbGVhcl8yNHB4Ij48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImNsb3NlXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNvbnRlbnRfY29weV8yNHB4Ij48cGF0aCBkPSJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImRhcmtfbW9kZV8yNHB4Ij48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48cGF0aCBkPSJNMTIsM2MtNC45NywwLTksNC4wMy05LDlzNC4wMyw5LDksOXM5LTQuMDMsOS05YzAtMC40Ni0wLjA0LTAuOTItMC4xLTEuMzZjLTAuOTgsMS4zNy0yLjU4LDIuMjYtNC40LDIuMjYgYy0yLjk4LDAtNS40LTIuNDItNS40LTUuNGMwLTEuODEsMC44OS0zLjQyLDIuMjYtNC40QzEyLjkyLDMuMDQsMTIuNDYsMywxMiwzTDEyLDN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZG9uZV8yNHB4Ij48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImRyYWdfaW5kaWNhdG9yXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMSAxOGMwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTIgLjktMiAyLTIgMiAuOSAyIDJ6bS0yLThjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wLTZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem02IDRjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0wIDJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImVkaXRfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXJyb3JfMjRweCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTJoMnYyem0wLTRoLTJWN2gydjZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXhwYW5kX2xlc3NfMjRweCI+PHBhdGggZD0iTTEyIDhsLTYgNiAxLjQxIDEuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImV4cGFuZF9tb3JlXzI0cHgiPjxwYXRoIGQ9Ik0xNi41OSA4LjU5TDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImZpbHRlcl9hbHRfMjRweCI+PGc+PHBhdGggZD0iTTAsMGgyNCBNMjQsMjRIMCIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik00LjI1LDUuNjFDNi4yNyw4LjIsMTAsMTMsMTAsMTN2NmMwLDAuNTUsMC40NSwxLDEsMWgyYzAuNTUsMCwxLTAuNDUsMS0xdi02YzAsMCwzLjcyLTQuOCw1Ljc0LTcuMzkgQzIwLjI1LDQuOTUsMTkuNzgsNCwxOC45NSw0SDUuMDRDNC4yMSw0LDMuNzQsNC45NSw0LjI1LDUuNjF6Ii8+PHBhdGggZD0iTTAsMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImZsYWdfMjRweCI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZnVsbHNjcmVlbl8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTcgMTRINXY1aDV2LTJIN3YtM3ptLTItNGgyVjdoM1Y1SDV2NXptMTIgN2gtM3YyaDV2LTVoLTJ2M3pNMTQgNXYyaDN2M2gyVjVoLTV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZnVsbHNjcmVlbl9leGl0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNSAxNmgzdjNoMnYtNUg1djJ6bTMtOEg1djJoNVY1SDh2M3ptNiAxMWgydi0zaDN2LTJoLTV2NXptMi0xMVY1aC0ydjVoNVY4aC0zeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImdldF9hcHBfMjRweCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJncm91cF93b3JrXzI0cHgiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek04IDE3LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41ek05LjUgOGMwLTEuMzggMS4xMi0yLjUgMi41LTIuNXMyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjVTOS41IDkuMzggOS41IDh6bTYuNSA5LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImhlbHBfb3V0bGluZV8yNHB4Ij48cGF0aCBkPSJNMTEgMThoMnYtMmgtMnYyem0xLTE2QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMC0xNGMtMi4yMSAwLTQgMS43OS00IDRoMmMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgMi0zIDEuNzUtMyA1aDJjMC0yLjI1IDMtMi41IDMtNSAwLTIuMjEtMS43OS00LTQtNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJpbWFnZV9zZWFyY2hfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xOCAxM3Y3SDRWNmg1LjAyYy4wNS0uNzEuMjItMS4zOC40OC0ySDRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTVsLTItMnptLTEuNSA1aC0xMWwyLjc1LTMuNTMgMS45NiAyLjM2IDIuNzUtMy41NHptMi44LTkuMTFjLjQ0LS43LjctMS41MS43LTIuMzlDMjAgNC4wMSAxNy45OSAyIDE1LjUgMlMxMSA0LjAxIDExIDYuNXMyLjAxIDQuNSA0LjQ5IDQuNWMuODggMCAxLjctLjI2IDIuMzktLjdMMjEgMTMuNDIgMjIuNDIgMTIgMTkuMyA4Ljg5ek0xNS41IDlDMTQuMTIgOSAxMyA3Ljg4IDEzIDYuNVMxNC4xMiA0IDE1LjUgNCAxOCA1LjEyIDE4IDYuNSAxNi44OCA5IDE1LjUgOXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJpbmZvX291dGxpbmVfMjRweCI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImtlZXBfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0xNiw5VjRsMSwwYzAuNTUsMCwxLTAuNDUsMS0xdjBjMC0wLjU1LTAuNDUtMS0xLTFIN0M2LjQ1LDIsNiwyLjQ1LDYsM3YwIGMwLDAuNTUsMC40NSwxLDEsMWwxLDB2NWMwLDEuNjYtMS4zNCwzLTMsM2gwdjJoNS45N3Y3bDEsMWwxLTF2LTdIMTl2LTJoMEMxNy4zNCwxMiwxNiwxMC42NiwxNiw5eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJrZWVwX291dGxpbmVfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0xNCw0djVjMCwxLjEyLDAuMzcsMi4xNiwxLDNIOWMwLjY1LTAuODYsMS0xLjksMS0zVjRIMTQgTTE3LDJIN0M2LjQ1LDIsNiwyLjQ1LDYsM2MwLDAuNTUsMC40NSwxLDEsMWMwLDAsMCwwLDAsMGwxLDB2NSBjMCwxLjY2LTEuMzQsMy0zLDN2Mmg1Ljk3djdsMSwxbDEtMXYtN0gxOXYtMmMwLDAsMCwwLDAsMGMtMS42NiwwLTMtMS4zNC0zLTNWNGwxLDBjMCwwLDAsMCwwLDBjMC41NSwwLDEtMC40NSwxLTEgQzE4LDIuNDUsMTcuNTUsMiwxNywyTDE3LDJ6Ii8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJsaWdodF9tb2RlXzI0cHgiPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjxwYXRoIGQ9Ik0xMiw3Yy0yLjc2LDAtNSwyLjI0LTUsNXMyLjI0LDUsNSw1czUtMi4yNCw1LTVTMTQuNzYsNywxMiw3TDEyLDd6IE0yLDEzbDIsMGMwLjU1LDAsMS0wLjQ1LDEtMXMtMC40NS0xLTEtMWwtMiwwIGMtMC41NSwwLTEsMC40NS0xLDFTMS40NSwxMywyLDEzeiBNMjAsMTNsMiwwYzAuNTUsMCwxLTAuNDUsMS0xcy0wLjQ1LTEtMS0xbC0yLDBjLTAuNTUsMC0xLDAuNDUtMSwxUzE5LjQ1LDEzLDIwLDEzeiBNMTEsMnYyIGMwLDAuNTUsMC40NSwxLDEsMXMxLTAuNDUsMS0xVjJjMC0wLjU1LTAuNDUtMS0xLTFTMTEsMS40NSwxMSwyeiBNMTEsMjB2MmMwLDAuNTUsMC40NSwxLDEsMXMxLTAuNDUsMS0xdi0yYzAtMC41NS0wLjQ1LTEtMS0xIEMxMS40NSwxOSwxMSwxOS40NSwxMSwyMHogTTUuOTksNC41OGMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxbDEuMDYsMS4wNiBjMC4zOSwwLjM5LDEuMDMsMC4zOSwxLjQxLDBzMC4zOS0xLjAzLDAtMS40MUw1Ljk5LDQuNTh6IE0xOC4zNiwxNi45NWMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxIGwxLjA2LDEuMDZjMC4zOSwwLjM5LDEuMDMsMC4zOSwxLjQxLDBjMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDFMMTguMzYsMTYuOTV6IE0xOS40Miw1Ljk5YzAuMzktMC4zOSwwLjM5LTEuMDMsMC0xLjQxIGMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBsLTEuMDYsMS4wNmMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFzMS4wMywwLjM5LDEuNDEsMEwxOS40Miw1Ljk5eiBNNy4wNSwxOC4zNiBjMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDFjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwbC0xLjA2LDEuMDZjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxczEuMDMsMC4zOSwxLjQxLDBMNy4wNSwxOC4zNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibGluZV93ZWlnaHRfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0IiB4PSIwIi8+PC9nPjxnPjxnPjxnPjxwYXRoIGQ9Ik0zLDE3aDE4di0ySDNWMTd6IE0zLDIwaDE4di0xSDNWMjB6IE0zLDEzaDE4di0zSDNWMTN6IE0zLDR2NGgxOFY0SDN6Ii8+PC9nPjwvZz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibW9yZV92ZXJ0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibm90aWZpY2F0aW9uc19ub25lXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIgMjJjMS4xIDAgMi0uOSAyLTJoLTRjMCAxLjEuOSAyIDIgMnptNi02di01YzAtMy4wNy0xLjYzLTUuNjQtNC41LTYuMzJWNGMwLS44My0uNjctMS41LTEuNS0xLjVzLTEuNS42Ny0xLjUgMS41di42OEM3LjY0IDUuMzYgNiA3LjkyIDYgMTF2NWwtMiAydjFoMTZ2LTFsLTItMnptLTIgMUg4di02YzAtMi40OCAxLjUxLTQuNSA0LTQuNXM0IDIuMDIgNCA0LjV2NnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJwYWxldHRlXzI0cHgiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0icmVmcmVzaF8yNHB4Ij48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0ic2VhcmNoXzI0cHgiPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InNldHRpbmdzXzI0cHgiPjxwYXRoIGQ9Ik0xOS40MyAxMi45OGMuMDQtLjMyLjA3LS42NC4wNy0uOThzLS4wMy0uNjYtLjA3LS45OGwyLjExLTEuNjVjLjE5LS4xNS4yNC0uNDIuMTItLjY0bC0yLTMuNDZjLS4xMi0uMjItLjM5LS4zLS42MS0uMjJsLTIuNDkgMWMtLjUyLS40LTEuMDgtLjczLTEuNjktLjk4bC0uMzgtMi42NUMxNC40NiAyLjE4IDE0LjI1IDIgMTQgMmgtNGMtLjI1IDAtLjQ2LjE4LS40OS40MmwtLjM4IDIuNjVjLS42MS4yNS0xLjE3LjU5LTEuNjkuOThsLTIuNDktMWMtLjIzLS4wOS0uNDkgMC0uNjEuMjJsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4cy4wMy42Ni4wNy45OGwtMi4xMSAxLjY1Yy0uMTkuMTUtLjI0LjQyLS4xMi42NGwyIDMuNDZjLjEyLjIyLjM5LjMuNjEuMjJsMi40OS0xYy41Mi40IDEuMDguNzMgMS42OS45OGwuMzggMi42NWMuMDMuMjQuMjQuNDIuNDkuNDJoNGMuMjUgMCAuNDYtLjE4LjQ5LS40MmwuMzgtMi42NWMuNjEtLjI1IDEuMTctLjU5IDEuNjktLjk4bDIuNDkgMWMuMjMuMDkuNDkgMCAuNjEtLjIybDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6TTEyIDE1LjVjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41czEuNTctMy41IDMuNS0zLjUgMy41IDEuNTcgMy41IDMuNS0xLjU3IDMuNS0zLjUgMy41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9InNldHRpbmdzX2JhY2t1cF9yZXN0b3JlXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTQgMTJjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAyIC45IDIgMiAyIDItLjkgMi0yem0tMi05Yy00Ljk3IDAtOSA0LjAzLTkgOUgwbDQgNCA0LTRINWMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuNTEgMC0yLjkxLS40OS00LjA2LTEuM2wtMS40MiAxLjQ0QzguMDQgMjAuMyA5Ljk0IDIxIDEyIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9InNldHRpbmdzX292ZXJzY2FuXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIuMDEgNS41TDEwIDhoNGwtMS45OS0yLjV6TTE4IDEwdjRsMi41LTEuOTlMMTggMTB6TTYgMTBsLTIuNSAyLjAxTDYgMTR2LTR6bTggNmgtNGwyLjAxIDIuNUwxNCAxNnptNy0xM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InZpc2liaWxpdHlfb2ZmXzI0cHgiPjxwYXRoIGQ9Ik0xMiA3YzIuNzYgMCA1IDIuMjQgNSA1IDAgLjY1LS4xMyAxLjI2LS4zNiAxLjgzbDIuOTIgMi45MmMxLjUxLTEuMjYgMi43LTIuODkgMy40My00Ljc1LTEuNzMtNC4zOS02LTcuNS0xMS03LjUtMS40IDAtMi43NC4yNS0zLjk4LjdsMi4xNiAyLjE2QzEwLjc0IDcuMTMgMTEuMzUgNyAxMiA3ek0yIDQuMjdsMi4yOCAyLjI4LjQ2LjQ2QzMuMDggOC4zIDEuNzggMTAuMDIgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41IDEuNTUgMCAzLjAzLS4zIDQuMzgtLjg0bC40Mi40MkwxOS43MyAyMiAyMSAyMC43MyAzLjI3IDMgMiA0LjI3ek03LjUzIDkuOGwxLjU1IDEuNTVjLS4wNS4yMS0uMDguNDMtLjA4LjY1IDAgMS42NiAxLjM0IDMgMyAzIC4yMiAwIC40NC0uMDMuNjUtLjA4bDEuNTUgMS41NWMtLjY3LjMzLTEuNDEuNTMtMi4yLjUzLTIuNzYgMC01LTIuMjQtNS01IDAtLjc5LjItMS41My41My0yLjJ6bTQuMzEtLjc4bDMuMTUgMy4xNS4wMi0uMTZjMC0xLjY2LTEuMzQtMy0zLTNsLS4xNy4wMXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJ3YXJuaW5nXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiIvPjwvc3ZnPjwvZGVmcz48L3N2Zz4K", "headers": [ [ "content-type", "image/svg+xml; charset=utf-8" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/index.js?_file_hash=486f34d2": { "data": "dmFyIENMT1NVUkVfTk9fREVQUyA9IHRydWU7CndpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvID0gdHJ1ZTsKLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oKXt2YXIgYT17fSxiPXt9LGM9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGE7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdO3JldHVybiBifWZ1bmN0aW9uIGQoKXt0aGlzLl9kZWxheT0wLHRoaXMuX2VuZERlbGF5PTAsdGhpcy5fZmlsbD0ibm9uZSIsdGhpcy5faXRlcmF0aW9uU3RhcnQ9MCx0aGlzLl9pdGVyYXRpb25zPTEsdGhpcy5fZHVyYXRpb249MCx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9kaXJlY3Rpb249Im5vcm1hbCIsdGhpcy5fZWFzaW5nPSJsaW5lYXIiLHRoaXMuX2Vhc2luZ0Z1bmN0aW9uPXh9ZnVuY3Rpb24gZSgpe3JldHVybiBhLmlzRGVwcmVjYXRlZCgiSW52YWxpZCB0aW1pbmcgaW5wdXRzIiwiMjAxNi0wMy0wMiIsIlR5cGVFcnJvciBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGluc3RlYWQuIiwhMCl9ZnVuY3Rpb24gZihiLGMsZSl7dmFyIGY9bmV3IGQ7cmV0dXJuIGMmJihmLmZpbGw9ImJvdGgiLGYuZHVyYXRpb249ImF1dG8iKSwibnVtYmVyIiE9dHlwZW9mIGJ8fGlzTmFOKGIpP3ZvaWQgMCE9PWImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoImF1dG8iIT1iW2NdKXtpZigoIm51bWJlciI9PXR5cGVvZiBmW2NdfHwiZHVyYXRpb24iPT1jKSYmKCJudW1iZXIiIT10eXBlb2YgYltjXXx8aXNOYU4oYltjXSkpKXJldHVybjtpZigiZmlsbCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKCJkaXJlY3Rpb24iPT1jJiYtMT09dy5pbmRleE9mKGJbY10pKXJldHVybjtpZigicGxheWJhY2tSYXRlIj09YyYmMSE9PWJbY10mJmEuaXNEZXByZWNhdGVkKCJBbmltYXRpb25FZmZlY3RUaW1pbmcucGxheWJhY2tSYXRlIiwiMjAxNC0xMS0yOCIsIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuIikpcmV0dXJuO2ZbY109YltjXX19KTpmLmR1cmF0aW9uPWIsZn1mdW5jdGlvbiBnKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIGE8MHx8YT4xfHxjPDB8fGM+MT94OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKGU8PTApe3ZhciBnPTA7cmV0dXJuIGE+MD9nPWIvYTohYiYmYz4wJiYoZz1kL2MpLGcqZX1pZihlPj0xKXt2YXIgaD0wO3JldHVybiBjPDE/aD0oZC0xKS8oYy0xKToxPT1jJiZhPDEmJihoPShiLTEpLyhhLTEpKSwxK2gqKGUtMSl9Zm9yKHZhciBpPTAsaj0xO2k8ajspe3ZhciBrPShpK2opLzIsbD1mKGEsYyxrKTtpZihNYXRoLmFicyhlLWwpPDFlLTUpcmV0dXJuIGYoYixkLGspO2w8ZT9pPWs6aj1rfXJldHVybiBmKGIsZCxrKX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4oYys9YipkKS1jJWR9fWZ1bmN0aW9uIGsoYSl7Q3x8KEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUpLEMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249IiIsQy5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj1hO3ZhciBiPUMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb247aWYoIiI9PWImJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgZWFzaW5nIik7cmV0dXJuIGJ9ZnVuY3Rpb24gbChhKXtpZigibGluZWFyIj09YSlyZXR1cm4geDt2YXIgYj1FLmV4ZWMoYSk7aWYoYilyZXR1cm4gaS5hcHBseSh0aGlzLGIuc2xpY2UoMSkubWFwKE51bWJlcikpO3ZhciBjPUYuZXhlYyhhKTtpZihjKXJldHVybiBqKE51bWJlcihjWzFdKSxBKTt2YXIgZD1HLmV4ZWMoYSk7cmV0dXJuIGQ/aihOdW1iZXIoZFsxXSkse3N0YXJ0OnksbWlkZGxlOnosZW5kOkF9W2RbMl1dKTpCW2FdfHx4fWZ1bmN0aW9uIG0oYSl7cmV0dXJuIE1hdGguYWJzKG4oYSkvYS5wbGF5YmFja1JhdGUpfWZ1bmN0aW9uIG4oYSl7cmV0dXJuIDA9PT1hLmR1cmF0aW9ufHwwPT09YS5pdGVyYXRpb25zPzA6YS5kdXJhdGlvbiphLml0ZXJhdGlvbnN9ZnVuY3Rpb24gbyhhLGIsYyl7aWYobnVsbD09YilyZXR1cm4gSDt2YXIgZD1jLmRlbGF5K2ErYy5lbmREZWxheTtyZXR1cm4gYjxNYXRoLm1pbihjLmRlbGF5LGQpP0k6Yj49TWF0aC5taW4oYy5kZWxheSthLGQpP0o6S31mdW5jdGlvbiBwKGEsYixjLGQsZSl7c3dpdGNoKGQpe2Nhc2UgSTpyZXR1cm4iYmFja3dhcmRzIj09Ynx8ImJvdGgiPT1iPzA6bnVsbDtjYXNlIEs6cmV0dXJuIGMtZTtjYXNlIEo6cmV0dXJuImZvcndhcmRzIj09Ynx8ImJvdGgiPT1iP2E6bnVsbDtjYXNlIEg6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoYSxiLGMsZCxlKXt2YXIgZj1lO3JldHVybiAwPT09YT9iIT09SSYmKGYrPWMpOmYrPWQvYSxmfWZ1bmN0aW9uIHIoYSxiLGMsZCxlLGYpe3ZhciBnPWE9PT0xLzA/YiUxOmElMTtyZXR1cm4gMCE9PWd8fGMhPT1KfHwwPT09ZHx8MD09PWUmJjAhPT1mfHwoZz0xKSxnfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuIGE9PT1KJiZiPT09MS8wPzEvMDoxPT09Yz9NYXRoLmZsb29yKGQpLTE6TWF0aC5mbG9vcihkKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1hO2lmKCJub3JtYWwiIT09YSYmInJldmVyc2UiIT09YSl7dmFyIGU9YjsiYWx0ZXJuYXRlLXJldmVyc2UiPT09YSYmKGUrPTEpLGQ9Im5vcm1hbCIsZSE9PTEvMCYmZSUyIT0wJiYoZD0icmV2ZXJzZSIpfXJldHVybiJub3JtYWwiPT09ZD9jOjEtY31mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD1vKGEsYixjKSxlPXAoYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBmPXEoYy5kdXJhdGlvbixkLGMuaXRlcmF0aW9ucyxlLGMuaXRlcmF0aW9uU3RhcnQpLGc9cihmLGMuaXRlcmF0aW9uU3RhcnQsZCxjLml0ZXJhdGlvbnMsZSxjLmR1cmF0aW9uKSxoPXMoZCxjLml0ZXJhdGlvbnMsZyxmKSxpPXQoYy5kaXJlY3Rpb24saCxnKTtyZXR1cm4gYy5fZWFzaW5nRnVuY3Rpb24oaSl9dmFyIHY9ImJhY2t3YXJkc3xmb3J3YXJkc3xib3RofG5vbmUiLnNwbGl0KCJ8Iiksdz0icmV2ZXJzZXxhbHRlcm5hdGV8YWx0ZXJuYXRlLXJldmVyc2UiLnNwbGl0KCJ8IikseD1mdW5jdGlvbihhKXtyZXR1cm4gYX07ZC5wcm90b3R5cGU9e19zZXRNZW1iZXI6ZnVuY3Rpb24oYixjKXt0aGlzWyJfIitiXT1jLHRoaXMuX2VmZmVjdCYmKHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXRbYl09Yyx0aGlzLl9lZmZlY3QuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXQpLHRoaXMuX2VmZmVjdC5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX2VmZmVjdC5fdGltaW5nKSx0aGlzLl9lZmZlY3QuX2FuaW1hdGlvbiYmdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCkpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IGRlbGF5KGEpe3RoaXMuX3NldE1lbWJlcigiZGVsYXkiLGEpfSxnZXQgZGVsYXkoKXtyZXR1cm4gdGhpcy5fZGVsYXl9LHNldCBlbmREZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoImVuZERlbGF5IixhKX0sZ2V0IGVuZERlbGF5KCl7cmV0dXJuIHRoaXMuX2VuZERlbGF5fSxzZXQgZmlsbChhKXt0aGlzLl9zZXRNZW1iZXIoImZpbGwiLGEpfSxnZXQgZmlsbCgpe3JldHVybiB0aGlzLl9maWxsfSxzZXQgaXRlcmF0aW9uU3RhcnQoYSl7aWYoKGlzTmFOKGEpfHxhPDApJiZlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0aW9uU3RhcnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9uU3RhcnQiLGEpfSxnZXQgaXRlcmF0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy5faXRlcmF0aW9uU3RhcnR9LHNldCBkdXJhdGlvbihhKXtpZigiYXV0byIhPWEmJihpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoImR1cmF0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIG9yIGF1dG8sIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiZHVyYXRpb24iLGEpfSxnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fZHVyYXRpb259LHNldCBkaXJlY3Rpb24oYSl7dGhpcy5fc2V0TWVtYmVyKCJkaXJlY3Rpb24iLGEpfSxnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn0sc2V0IGVhc2luZyhhKXt0aGlzLl9lYXNpbmdGdW5jdGlvbj1sKGsoYSkpLHRoaXMuX3NldE1lbWJlcigiZWFzaW5nIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdGlvbnMgbXVzdCBiZSBub24tbmVnYXRpdmUsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9ucyIsYSl9LGdldCBpdGVyYXRpb25zKCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnN9fTt2YXIgeT0xLHo9LjUsQT0wLEI9e2Vhc2U6aSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjppKC40MiwwLDEsMSksImVhc2Utb3V0IjppKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjppKC40MiwwLC41OCwxKSwic3RlcC1zdGFydCI6aigxLHkpLCJzdGVwLW1pZGRsZSI6aigxLHopLCJzdGVwLWVuZCI6aigxLEEpfSxDPW51bGwsRD0iXFxzKigtP1xcZCtcXC4/XFxkKnwtP1xcLlxcZCspXFxzKiIsRT1uZXcgUmVnRXhwKCJjdWJpYy1iZXppZXJcXCgiK0QrIiwiK0QrIiwiK0QrIiwiK0QrIlxcKSIpLEY9L3N0ZXBzXChccyooXGQrKVxzKlwpLyxHPS9zdGVwc1woXHMqKFxkKylccyosXHMqKHN0YXJ0fG1pZGRsZXxlbmQpXHMqXCkvLEg9MCxJPTEsSj0yLEs9MzthLmNsb25lVGltaW5nSW5wdXQ9YyxhLm1ha2VUaW1pbmc9ZixhLm51bWVyaWNUaW1pbmdUb09iamVjdD1nLGEubm9ybWFsaXplVGltaW5nSW5wdXQ9aCxhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uPW0sYS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcz11LGEuY2FsY3VsYXRlUGhhc2U9byxhLm5vcm1hbGl6ZUVhc2luZz1rLGEucGFyc2VFYXNpbmdGdW5jdGlvbj1sfShhKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4gYSBpbiBrP2tbYV1bYl18fGI6Yn1mdW5jdGlvbiBkKGEpe3JldHVybiJkaXNwbGF5Ij09PWF8fDA9PT1hLmxhc3RJbmRleE9mKCJhbmltYXRpb24iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidHJhbnNpdGlvbiIsMCl9ZnVuY3Rpb24gZShhLGIsZSl7aWYoIWQoYSkpe3ZhciBmPWhbYV07aWYoZil7aS5zdHlsZVthXT1iO2Zvcih2YXIgZyBpbiBmKXt2YXIgaj1mW2ddLGs9aS5zdHlsZVtqXTtlW2pdPWMoaixrKX19ZWxzZSBlW2FdPWMoYSxiKX19ZnVuY3Rpb24gZihhKXt2YXIgYj1bXTtmb3IodmFyIGMgaW4gYSlpZighKGMgaW5bImVhc2luZyIsIm9mZnNldCIsImNvbXBvc2l0ZSJdKSl7dmFyIGQ9YVtjXTtBcnJheS5pc0FycmF5KGQpfHwoZD1bZF0pO2Zvcih2YXIgZSxmPWQubGVuZ3RoLGc9MDtnPGY7ZysrKWU9e30sZS5vZmZzZXQ9Im9mZnNldCJpbiBhP2Eub2Zmc2V0OjE9PWY/MTpnLyhmLTEpLCJlYXNpbmciaW4gYSYmKGUuZWFzaW5nPWEuZWFzaW5nKSwiY29tcG9zaXRlImluIGEmJihlLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZSksZVtjXT1kW2ddLGIucHVzaChlKX1yZXR1cm4gYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub2Zmc2V0LWIub2Zmc2V0fSksYn1mdW5jdGlvbiBnKGIpe2Z1bmN0aW9uIGMoKXt2YXIgYT1kLmxlbmd0aDtudWxsPT1kW2EtMV0ub2Zmc2V0JiYoZFthLTFdLm9mZnNldD0xKSxhPjEmJm51bGw9PWRbMF0ub2Zmc2V0JiYoZFswXS5vZmZzZXQ9MCk7Zm9yKHZhciBiPTAsYz1kWzBdLm9mZnNldCxlPTE7ZTxhO2UrKyl7dmFyIGY9ZFtlXS5vZmZzZXQ7aWYobnVsbCE9Zil7Zm9yKHZhciBnPTE7ZzxlLWI7ZysrKWRbYitnXS5vZmZzZXQ9YysoZi1jKSpnLyhlLWIpO2I9ZSxjPWZ9fX1pZihudWxsPT1iKXJldHVybltdO3dpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8KGI9ZihiKSk7Zm9yKHZhciBkPWIubWFwKGZ1bmN0aW9uKGIpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiBiKXt2YXIgZj1iW2RdO2lmKCJvZmZzZXQiPT1kKXtpZihudWxsIT1mKXtpZihmPU51bWJlcihmKSwhaXNGaW5pdGUoZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIG51bWJlcnMuIik7aWYoZjwwfHxmPjEpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKX19ZWxzZSBpZigiY29tcG9zaXRlIj09ZCl7aWYoImFkZCI9PWZ8fCJhY2N1bXVsYXRlIj09Zil0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiYWRkIGNvbXBvc2l0aW5nIGlzIG5vdCBzdXBwb3J0ZWQifTtpZigicmVwbGFjZSIhPWYpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjb21wb3NpdGUgbW9kZSAiK2YrIi4iKX1lbHNlIGY9ImVhc2luZyI9PWQ/YS5ub3JtYWxpemVFYXNpbmcoZik6IiIrZjtlKGQsZixjKX1yZXR1cm4gdm9pZCAwPT1jLm9mZnNldCYmKGMub2Zmc2V0PW51bGwpLHZvaWQgMD09Yy5lYXNpbmcmJihjLmVhc2luZz0ibGluZWFyIiksY30pLGc9ITAsaD0tMS8wLGk9MDtpPGQubGVuZ3RoO2krKyl7dmFyIGo9ZFtpXS5vZmZzZXQ7aWYobnVsbCE9ail7aWYoajxoKXRocm93IG5ldyBUeXBlRXJyb3IoIktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuIik7aD1qfWVsc2UgZz0hMX1yZXR1cm4gZD1kLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXQ+PTAmJmEub2Zmc2V0PD0xfSksZ3x8YygpLGR9dmFyIGg9e2JhY2tncm91bmQ6WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRPcmlnaW4iLCJiYWNrZ3JvdW5kQ2xpcCIsImJhY2tncm91bmRDb2xvciJdLGJvcmRlcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRXaWR0aCJdLGJvcmRlckJvdHRvbTpbImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21Db2xvciJdLGJvcmRlckNvbG9yOlsiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiXSxib3JkZXJMZWZ0OlsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyUmFkaXVzOlsiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIl0sYm9yZGVyUmlnaHQ6WyJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiXSxib3JkZXJUb3A6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiXSxib3JkZXJXaWR0aDpbImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIl0sZmxleDpbImZsZXhHcm93IiwiZmxleFNocmluayIsImZsZXhCYXNpcyJdLGZvbnQ6WyJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Il0sbWFyZ2luOlsibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5MZWZ0Il0sb3V0bGluZTpbIm91dGxpbmVDb2xvciIsIm91dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCJdLHBhZGRpbmc6WyJwYWRkaW5nVG9wIiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0Il19LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iiksaj17dGhpbjoiMXB4IixtZWRpdW06IjNweCIsdGhpY2s6IjVweCJ9LGs9e2JvcmRlckJvdHRvbVdpZHRoOmosYm9yZGVyTGVmdFdpZHRoOmosYm9yZGVyUmlnaHRXaWR0aDpqLGJvcmRlclRvcFdpZHRoOmosZm9udFNpemU6eyJ4eC1zbWFsbCI6IjYwJSIsIngtc21hbGwiOiI3NSUiLHNtYWxsOiI4OSUiLG1lZGl1bToiMTAwJSIsbGFyZ2U6IjEyMCUiLCJ4LWxhcmdlIjoiMTUwJSIsInh4LWxhcmdlIjoiMjAwJSJ9LGZvbnRXZWlnaHQ6e25vcm1hbDoiNDAwIixib2xkOiI3MDAifSxvdXRsaW5lV2lkdGg6aix0ZXh0U2hhZG93Ontub25lOiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9LGJveFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50In19O2EuY29udmVydFRvQXJyYXlGb3JtPWYsYS5ub3JtYWxpemVLZXlmcmFtZXM9Z30oYSksZnVuY3Rpb24oYSl7dmFyIGI9e307YS5pc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiLGc9bmV3IERhdGUsaD1uZXcgRGF0ZShjKTtyZXR1cm4gaC5zZXRNb250aChoLmdldE1vbnRoKCkrMyksIShnPGgmJihhIGluIGJ8fGNvbnNvbGUud2FybigiV2ViIEFuaW1hdGlvbnM6ICIrYSsiICIrZisiIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc3RvcCB3b3JraW5nIG9uICIraC50b0RhdGVTdHJpbmcoKSsiLiAiK2QpLGJbYV09ITAsMSkpfSxhLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiO2lmKGEuaXNEZXByZWNhdGVkKGIsYyxkLGUpKXRocm93IG5ldyBFcnJvcihiKyIgIitmKyIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIitkKX19KGEpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGQ9ITA7aWYoYyYmKGQ9ITEsInBsYXl8Y3VycmVudFRpbWV8cGF1c2V8cmV2ZXJzZXxwbGF5YmFja1JhdGV8Y2FuY2VsfGZpbmlzaHxzdGFydFRpbWV8cGxheVN0YXRlIi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwPT09Y1thXSYmKGQ9ITApfSkpLCFkKXJldHVybn0hZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKylmb3IodmFyIGQgaW4gYVtjXSlpZigib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kKXt2YXIgZT17b2Zmc2V0OmFbY10ub2Zmc2V0LGVhc2luZzphW2NdLmVhc2luZyx2YWx1ZTphW2NdW2RdfTtiW2RdPWJbZF18fFtdLGJbZF0ucHVzaChlKX1mb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtpZigwIT1nWzBdLm9mZnNldHx8MSE9Z1tnLmxlbmd0aC0xXS5vZmZzZXQpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZToiTm90U3VwcG9ydGVkRXJyb3IiLG1lc3NhZ2U6IlBhcnRpYWwga2V5ZnJhbWVzIGFyZSBub3Qgc3VwcG9ydGVkIn19cmV0dXJuIGJ9ZnVuY3Rpb24gZShjKXt2YXIgZD1bXTtmb3IodmFyIGUgaW4gYylmb3IodmFyIGY9Y1tlXSxnPTA7ZzxmLmxlbmd0aC0xO2crKyl7dmFyIGg9ZyxpPWcrMSxqPWZbaF0ub2Zmc2V0LGs9ZltpXS5vZmZzZXQsbD1qLG09azswPT1nJiYobD0tMS8wLDA9PWsmJihpPWgpKSxnPT1mLmxlbmd0aC0yJiYobT0xLzAsMT09aiYmKGg9aSkpLGQucHVzaCh7YXBwbHlGcm9tOmwsYXBwbHlUbzptLHN0YXJ0T2Zmc2V0OmZbaF0ub2Zmc2V0LGVuZE9mZnNldDpmW2ldLm9mZnNldCxlYXNpbmdGdW5jdGlvbjphLnBhcnNlRWFzaW5nRnVuY3Rpb24oZltoXS5lYXNpbmcpLHByb3BlcnR5OmUsaW50ZXJwb2xhdGlvbjpiLnByb3BlcnR5SW50ZXJwb2xhdGlvbihlLGZbaF0udmFsdWUsZltpXS52YWx1ZSl9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnRPZmZzZXQtYi5zdGFydE9mZnNldH0pLGR9Yi5jb252ZXJ0RWZmZWN0SW5wdXQ9ZnVuY3Rpb24oYyl7dmFyIGY9YS5ub3JtYWxpemVLZXlmcmFtZXMoYyksZz1kKGYpLGg9ZShnKTtyZXR1cm4gZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBjPj1hLmFwcGx5RnJvbSYmYzxhLmFwcGx5VG99KS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWMtZC5zdGFydE9mZnNldCxmPWQuZW5kT2Zmc2V0LWQuc3RhcnRPZmZzZXQsZz0wPT1mPzA6ZC5lYXNpbmdGdW5jdGlvbihlL2YpO2IuYXBwbHkoYSxkLnByb3BlcnR5LGQuaW50ZXJwb2xhdGlvbihnKSl9KTtlbHNlIGZvcih2YXIgZCBpbiBnKSJvZmZzZXQiIT1kJiYiZWFzaW5nIiE9ZCYmImNvbXBvc2l0ZSIhPWQmJmIuY2xlYXIoYSxkKX19fShhLGIpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLnJlcGxhY2UoLy0oLikvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBlKGEsYixjKXtoW2NdPWhbY118fFtdLGhbY10ucHVzaChbYSxiXSl9ZnVuY3Rpb24gZihhLGIsYyl7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe2UoYSxiLGQoY1tmXSkpfX1mdW5jdGlvbiBnKGMsZSxmKXt2YXIgZz1jOy8tLy50ZXN0KGMpJiYhYS5pc0RlcHJlY2F0ZWQoIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXMiLCIyMDE2LTAzLTIyIiwiVXNlIGNhbWVsQ2FzZSBpbnN0ZWFkLiIsITApJiYoZz1kKGMpKSwiaW5pdGlhbCIhPWUmJiJpbml0aWFsIiE9Znx8KCJpbml0aWFsIj09ZSYmKGU9aVtnXSksImluaXRpYWwiPT1mJiYoZj1pW2ddKSk7Zm9yKHZhciBqPWU9PWY/W106aFtnXSxrPTA7aiYmazxqLmxlbmd0aDtrKyspe3ZhciBsPWpba11bMF0oZSksbT1qW2tdWzBdKGYpO2lmKHZvaWQgMCE9PWwmJnZvaWQgMCE9PW0pe3ZhciBuPWpba11bMV0obCxtKTtpZihuKXt2YXIgbz1iLkludGVycG9sYXRpb24uYXBwbHkobnVsbCxuKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWE/ZToxPT1hP2Y6byhhKX19fX1yZXR1cm4gYi5JbnRlcnBvbGF0aW9uKCExLCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhP2Y6ZX0pfXZhciBoPXt9O2IuYWRkUHJvcGVydGllc0hhbmRsZXI9Zjt2YXIgaT17YmFja2dyb3VuZENvbG9yOiJ0cmFuc3BhcmVudCIsYmFja2dyb3VuZFBvc2l0aW9uOiIwJSAwJSIsYm9yZGVyQm90dG9tQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21SaWdodFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21XaWR0aDoiM3B4Iixib3JkZXJMZWZ0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyTGVmdFdpZHRoOiIzcHgiLGJvcmRlclJpZ2h0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyUmlnaHRXaWR0aDoiM3B4Iixib3JkZXJTcGFjaW5nOiIycHgiLGJvcmRlclRvcENvbG9yOiJjdXJyZW50Q29sb3IiLGJvcmRlclRvcExlZnRSYWRpdXM6IjBweCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6IjBweCIsYm9yZGVyVG9wV2lkdGg6IjNweCIsYm90dG9tOiJhdXRvIixjbGlwOiJyZWN0KDBweCwgMHB4LCAwcHgsIDBweCkiLGNvbG9yOiJibGFjayIsZm9udFNpemU6IjEwMCUiLGZvbnRXZWlnaHQ6IjQwMCIsaGVpZ2h0OiJhdXRvIixsZWZ0OiJhdXRvIixsZXR0ZXJTcGFjaW5nOiJub3JtYWwiLGxpbmVIZWlnaHQ6IjEyMCUiLG1hcmdpbkJvdHRvbToiMHB4IixtYXJnaW5MZWZ0OiIwcHgiLG1hcmdpblJpZ2h0OiIwcHgiLG1hcmdpblRvcDoiMHB4IixtYXhIZWlnaHQ6Im5vbmUiLG1heFdpZHRoOiJub25lIixtaW5IZWlnaHQ6IjBweCIsbWluV2lkdGg6IjBweCIsb3BhY2l0eToiMS4wIixvdXRsaW5lQ29sb3I6ImludmVydCIsb3V0bGluZU9mZnNldDoiMHB4IixvdXRsaW5lV2lkdGg6IjNweCIscGFkZGluZ0JvdHRvbToiMHB4IixwYWRkaW5nTGVmdDoiMHB4IixwYWRkaW5nUmlnaHQ6IjBweCIscGFkZGluZ1RvcDoiMHB4IixyaWdodDoiYXV0byIsc3Ryb2tlRGFzaGFycmF5OiJub25lIixzdHJva2VEYXNob2Zmc2V0OiIwcHgiLHRleHRJbmRlbnQ6IjBweCIsdGV4dFNoYWRvdzoiMHB4IDBweCAwcHggdHJhbnNwYXJlbnQiLHRvcDoiYXV0byIsdHJhbnNmb3JtOiIiLHZlcnRpY2FsQWxpZ246IjBweCIsdmlzaWJpbGl0eToidmlzaWJsZSIsd2lkdGg6ImF1dG8iLHdvcmRTcGFjaW5nOiJub3JtYWwiLHpJbmRleDoiYXV0byJ9O2IucHJvcGVydHlJbnRlcnBvbGF0aW9uPWd9KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGMsZCxiKX07cmV0dXJuIGQuX3RvdGFsRHVyYXRpb249Yi5kZWxheStjK2IuZW5kRGVsYXksZH1iLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoLGk9ZChhLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGYpKSxqPWIuY29udmVydEVmZmVjdElucHV0KGUpLGs9ZnVuY3Rpb24oKXtqKGMsaCl9O3JldHVybiBrLl91cGRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT0oaD1pKGEpKX0say5fY2xlYXI9ZnVuY3Rpb24oKXtqKGMsbnVsbCl9LGsuX2hhc1NhbWVUYXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hfSxrLl90YXJnZXQ9YyxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfX0oYSxiKSxmdW5jdGlvbihhLGIpe2EuYXBwbHk9ZnVuY3Rpb24oYixjLGQpe2Iuc3R5bGVbYS5wcm9wZXJ0eU5hbWUoYyldPWR9LGEuY2xlYXI9ZnVuY3Rpb24oYixjKXtiLnN0eWxlW2EucHJvcGVydHlOYW1lKGMpXT0iIn19KGIpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGEudGltZWxpbmUuX3BsYXkoYS5LZXlmcmFtZUVmZmVjdCh0aGlzLGIsYyxkKSl9fShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBiKXJldHVybiBkPC41P2E6YjtpZihhLmxlbmd0aD09Yi5sZW5ndGgpe2Zvcih2YXIgZT1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspZS5wdXNoKGMoYVtmXSxiW2ZdLGQpKTtyZXR1cm4gZX10aHJvdyJNaXNtYXRjaGVkIGludGVycG9sYXRpb24gYXJndW1lbnRzICIrYSsiOiIrYn1hLkludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZChjKGEsYixlKSl9fX0oYiksZnVuY3Rpb24oYSxiLGMpe2Euc2VxdWVuY2VOdW1iZXI9MDt2YXIgZD1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImZpbmlzaCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfTtiLkFuaW1hdGlvbj1mdW5jdGlvbihiKXt0aGlzLmlkPSIiLGImJmIuX2lkJiYodGhpcy5pZD1iLl9pZCksdGhpcy5fc2VxdWVuY2VOdW1iZXI9YS5zZXF1ZW5jZU51bWJlcisrLHRoaXMuX2N1cnJlbnRUaW1lPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3BsYXliYWNrUmF0ZT0xLHRoaXMuX2luVGltZWxpbmU9ITAsdGhpcy5fZmluaXNoZWRGbGFnPSEwLHRoaXMub25maW5pc2g9bnVsbCx0aGlzLl9maW5pc2hIYW5kbGVycz1bXSx0aGlzLl9lZmZlY3Q9Yix0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgwKSx0aGlzLl9pZGxlPSEwLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfZW5zdXJlQWxpdmU6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZTwwJiYwPT09dGhpcy5jdXJyZW50VGltZT90aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgtMSk6dGhpcy5faW5FZmZlY3Q9dGhpcy5fZWZmZWN0Ll91cGRhdGUodGhpcy5jdXJyZW50VGltZSksdGhpcy5faW5UaW1lbGluZXx8IXRoaXMuX2luRWZmZWN0JiZ0aGlzLl9maW5pc2hlZEZsYWd8fCh0aGlzLl9pblRpbWVsaW5lPSEwLGIudGltZWxpbmUuX2FuaW1hdGlvbnMucHVzaCh0aGlzKSl9LF90aWNrQ3VycmVudFRpbWU6ZnVuY3Rpb24oYSxiKXthIT10aGlzLl9jdXJyZW50VGltZSYmKHRoaXMuX2N1cnJlbnRUaW1lPWEsdGhpcy5faXNGaW5pc2hlZCYmIWImJih0aGlzLl9jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjApLHRoaXMuX2Vuc3VyZUFsaXZlKCkpfSxnZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5faWRsZXx8dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nP251bGw6dGhpcy5fY3VycmVudFRpbWV9LHNldCBjdXJyZW50VGltZShhKXthPSthLGlzTmFOKGEpfHwoYi5yZXN0YXJ0KCksdGhpcy5fcGF1c2VkfHxudWxsPT10aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9dGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtYS90aGlzLl9wbGF5YmFja1JhdGUpLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9jdXJyZW50VGltZSE9YSYmKHRoaXMuX2lkbGUmJih0aGlzLl9pZGxlPSExLHRoaXMuX3BhdXNlZD0hMCksdGhpcy5fdGlja0N1cnJlbnRUaW1lKGEsITApLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKSl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX3N0YXJ0VGltZT1hLHRoaXMuX3RpY2tDdXJyZW50VGltZSgodGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXtpZihhIT10aGlzLl9wbGF5YmFja1JhdGUpe3ZhciBjPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fcGxheWJhY2tSYXRlPWEsdGhpcy5fc3RhcnRUaW1lPW51bGwsInBhdXNlZCIhPXRoaXMucGxheVN0YXRlJiYiaWRsZSIhPXRoaXMucGxheVN0YXRlJiYodGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSksbnVsbCE9YyYmKHRoaXMuY3VycmVudFRpbWU9Yyl9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlPyJpZGxlIjpudWxsPT10aGlzLl9zdGFydFRpbWUmJiF0aGlzLl9wYXVzZWQmJjAhPXRoaXMucGxheWJhY2tSYXRlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/InBlbmRpbmciOnRoaXMuX3BhdXNlZD8icGF1c2VkIjp0aGlzLl9pc0ZpbmlzaGVkPyJmaW5pc2hlZCI6InJ1bm5pbmcifSxfcmV3aW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5fcGxheWJhY2tSYXRlPj0wKXRoaXMuX2N1cnJlbnRUaW1lPTA7ZWxzZXtpZighKHRoaXMuX3RvdGFsRHVyYXRpb248MS8wKSl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJVbmFibGUgdG8gcmV3aW5kIG5lZ2F0aXZlIHBsYXliYWNrIHJhdGUgYW5pbWF0aW9uIHdpdGggaW5maW5pdGUgZHVyYXRpb24iLCJJbnZhbGlkU3RhdGVFcnJvciIpO3RoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb259fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSExLCh0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl9pZGxlKSYmKHRoaXMuX3Jld2luZCgpLHRoaXMuX3N0YXJ0VGltZT1udWxsKSx0aGlzLl9maW5pc2hlZEZsYWc9ITEsdGhpcy5faWRsZT0hMSx0aGlzLl9lbnN1cmVBbGl2ZSgpLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZT90aGlzLl9pZGxlJiYodGhpcy5fcmV3aW5kKCksdGhpcy5faWRsZT0hMSk6dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSEwLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX3BhdXNlZD0hMH0sZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5faWRsZXx8KHRoaXMuY3VycmVudFRpbWU9dGhpcy5fcGxheWJhY2tSYXRlPjA/dGhpcy5fdG90YWxEdXJhdGlvbjowLHRoaXMuX3N0YXJ0VGltZT10aGlzLl90b3RhbER1cmF0aW9uLXRoaXMuY3VycmVudFRpbWUsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5faW5FZmZlY3QmJih0aGlzLl9pbkVmZmVjdD0hMSx0aGlzLl9pZGxlPSEwLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9lZmZlY3QuX3VwZGF0ZShudWxsKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSl9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZSo9LTEsdGhpcy5wbGF5KCl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZpbmlzaCI9PWEmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnB1c2goYil9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZigiZmluaXNoIj09YSl7dmFyIGM9dGhpcy5fZmluaXNoSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9maW5pc2hIYW5kbGVycy5zcGxpY2UoYywxKX19LF9maXJlRXZlbnRzOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzRmluaXNoZWQpe2lmKCF0aGlzLl9maW5pc2hlZEZsYWcpe3ZhciBiPW5ldyBkKHRoaXMsdGhpcy5fY3VycmVudFRpbWUsYSksYz10aGlzLl9maW5pc2hIYW5kbGVycy5jb25jYXQodGhpcy5vbmZpbmlzaD9bdGhpcy5vbmZpbmlzaF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGIudGFyZ2V0LGIpfSl9LDApLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMH19ZWxzZSB0aGlzLl9maW5pc2hlZEZsYWc9ITF9LF90aWNrOmZ1bmN0aW9uKGEsYil7dGhpcy5faWRsZXx8dGhpcy5fcGF1c2VkfHwobnVsbD09dGhpcy5fc3RhcnRUaW1lP2ImJih0aGlzLnN0YXJ0VGltZT1hLXRoaXMuX2N1cnJlbnRUaW1lL3RoaXMucGxheWJhY2tSYXRlKTp0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl90aWNrQ3VycmVudFRpbWUoKGEtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSkpLGImJih0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsdGhpcy5fZmlyZUV2ZW50cyhhKSl9LGdldCBfbmVlZHNUaWNrKCl7cmV0dXJuIHRoaXMucGxheVN0YXRlIGlue3BlbmRpbmc6MSxydW5uaW5nOjF9fHwhdGhpcy5fZmluaXNoZWRGbGFnfSxfdGFyZ2V0QW5pbWF0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2VmZmVjdC5fdGFyZ2V0O3JldHVybiBhLl9hY3RpdmVBbmltYXRpb25zfHwoYS5fYWN0aXZlQW5pbWF0aW9ucz1bXSksYS5fYWN0aXZlQW5pbWF0aW9uc30sX21hcmtUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl90YXJnZXRBbmltYXRpb25zKCk7LTE9PT1hLmluZGV4T2YodGhpcykmJmEucHVzaCh0aGlzKX0sX3VubWFya1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RhcmdldEFuaW1hdGlvbnMoKSxiPWEuaW5kZXhPZih0aGlzKTstMSE9PWImJmEuc3BsaWNlKGIsMSl9fX0oYSxiKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYj1qO2o9W10sYTxxLmN1cnJlbnRUaW1lJiYoYT1xLmN1cnJlbnRUaW1lKSxxLl9hbmltYXRpb25zLnNvcnQoZSkscS5fYW5pbWF0aW9ucz1oKGEsITAscS5fYW5pbWF0aW9ucylbMF0sYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMV0oYSl9KSxnKCksbD12b2lkIDB9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLl9zZXF1ZW5jZU51bWJlci1iLl9zZXF1ZW5jZU51bWJlcn1mdW5jdGlvbiBmKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOjB9ZnVuY3Rpb24gZygpe28uZm9yRWFjaChmdW5jdGlvbihhKXthKCl9KSxvLmxlbmd0aD0wfWZ1bmN0aW9uIGgoYSxjLGQpe3A9ITAsbj0hMSxiLnRpbWVsaW5lLmN1cnJlbnRUaW1lPWEsbT0hMTt2YXIgZT1bXSxmPVtdLGc9W10saD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuX3RpY2soYSxjKSxiLl9pbkVmZmVjdD8oZi5wdXNoKGIuX2VmZmVjdCksYi5fbWFya1RhcmdldCgpKTooZS5wdXNoKGIuX2VmZmVjdCksYi5fdW5tYXJrVGFyZ2V0KCkpLGIuX25lZWRzVGljayYmKG09ITApO3ZhciBkPWIuX2luRWZmZWN0fHxiLl9uZWVkc1RpY2s7Yi5faW5UaW1lbGluZT1kLGQ/Zy5wdXNoKGIpOmgucHVzaChiKX0pLG8ucHVzaC5hcHBseShvLGUpLG8ucHVzaC5hcHBseShvLGYpLG0mJnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLHA9ITEsW2csaF19dmFyIGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSxqPVtdLGs9MDt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPWsrKztyZXR1cm4gMD09ai5sZW5ndGgmJmkoZCksai5wdXNoKFtiLGFdKSxifSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7ai5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMF09PWEmJihiWzFdPWZ1bmN0aW9uKCl7fSl9KX0sZi5wcm90b3R5cGU9e19wbGF5OmZ1bmN0aW9uKGMpe2MuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMudGltaW5nKTt2YXIgZD1uZXcgYi5BbmltYXRpb24oYyk7cmV0dXJuIGQuX2lkbGU9ITEsZC5fdGltZWxpbmU9dGhpcyx0aGlzLl9hbmltYXRpb25zLnB1c2goZCksYi5yZXN0YXJ0KCksYi5hcHBseURpcnRpZWRBbmltYXRpb24oZCksZH19O3ZhciBsPXZvaWQgMCxtPSExLG49ITE7Yi5yZXN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG18fChtPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLG49ITApLG59LGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uPWZ1bmN0aW9uKGEpe2lmKCFwKXthLl9tYXJrVGFyZ2V0KCk7dmFyIGM9YS5fdGFyZ2V0QW5pbWF0aW9ucygpO2Muc29ydChlKSxoKGIudGltZWxpbmUuY3VycmVudFRpbWUsITEsYy5zbGljZSgpKVsxXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXEuX2FuaW1hdGlvbnMuaW5kZXhPZihhKTstMSE9PWImJnEuX2FuaW1hdGlvbnMuc3BsaWNlKGIsMSl9KSxnKCl9fTt2YXIgbz1bXSxwPSExLHE9bmV3IGY7Yi50aW1lbGluZT1xfShhLGIpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYz1hLmV4ZWMoYik7aWYoYylyZXR1cm4gYz1hLmlnbm9yZUNhc2U/Y1swXS50b0xvd2VyQ2FzZSgpOmNbMF0sW2MsYi5zdWJzdHIoYy5sZW5ndGgpXX1mdW5jdGlvbiBjKGEsYil7Yj1iLnJlcGxhY2UoL15ccyovLCIiKTt2YXIgYz1hKGIpO2lmKGMpcmV0dXJuW2NbMF0sY1sxXS5yZXBsYWNlKC9eXHMqLywiIildfWZ1bmN0aW9uIGQoYSxkLGUpe2E9Yy5iaW5kKG51bGwsYSk7Zm9yKHZhciBmPVtdOzspe3ZhciBnPWEoZSk7aWYoIWcpcmV0dXJuW2YsZV07aWYoZi5wdXNoKGdbMF0pLGU9Z1sxXSwhKGc9YihkLGUpKXx8IiI9PWdbMV0pcmV0dXJuW2YsZV07ZT1nWzFdfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGgmJighL1xzfCwvLnRlc3QoYltkXSl8fDAhPWMpO2QrKylpZigiKCI9PWJbZF0pYysrO2Vsc2UgaWYoIikiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKyxjPD0wKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYShjKXx8W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fCIiPT1mWzBdKXJldHVybjt2b2lkIDAhPT1mWzBdJiZkLnB1c2goZlswXSksYz1mWzFdfWlmKCIiPT1jKXJldHVybiBkfWZ1bmN0aW9uIGooYSxiLGMsZCxlKXtmb3IodmFyIGc9W10saD1bXSxpPVtdLGo9ZihkLmxlbmd0aCxlLmxlbmd0aCksaz0wO2s8ajtrKyspe3ZhciBsPWIoZFtrJWQubGVuZ3RoXSxlW2slZS5sZW5ndGhdKTtpZighbClyZXR1cm47Zy5wdXNoKGxbMF0pLGgucHVzaChsWzFdKSxpLnB1c2gobFsyXSl9cmV0dXJuW2csaCxmdW5jdGlvbihiKXt2YXIgZD1iLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiBpW2JdKGEpfSkuam9pbihjKTtyZXR1cm4gYT9hKGQpOmR9XX1mdW5jdGlvbiBrKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmPVtdLGc9MCxoPTA7aDxjLmxlbmd0aDtoKyspaWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1mW2NdKGFbY10pO3JldHVybiBifV19YS5jb25zdW1lVG9rZW49YixhLmNvbnN1bWVUcmltbWVkPWMsYS5jb25zdW1lUmVwZWF0ZWQ9ZCxhLmNvbnN1bWVQYXJlbnRoZXNpc2VkPWUsYS5pZ25vcmU9ZyxhLm9wdGlvbmFsPWgsYS5jb25zdW1lTGlzdD1pLGEubWVyZ2VOZXN0ZWRSZXBlYXRlZD1qLmJpbmQobnVsbCxudWxsKSxhLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkPWosYS5tZXJnZUxpc3Q9a30oYiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPWEuY29uc3VtZVRva2VuKC9eaW5zZXQvaSxiKTtyZXR1cm4gYz8oZC5pbnNldD0hMCxjKTooYz1hLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYikpPyhkLmxlbmd0aHMucHVzaChjWzBdKSxjKTooYz1hLmNvbnN1bWVDb2xvcihiKSxjPyhkLmNvbG9yPWNbMF0sYyk6dm9pZCAwKX12YXIgZD17aW5zZXQ6ITEsbGVuZ3RoczpbXSxjb2xvcjpudWxsfSxlPWEuY29uc3VtZVJlcGVhdGVkKGMsL14vLGIpO2lmKGUmJmVbMF0ubGVuZ3RoKXJldHVybltkLGVbMV1dfWZ1bmN0aW9uIGMoYyl7dmFyIGQ9YS5jb25zdW1lUmVwZWF0ZWQoYiwvXiwvLGMpO2lmKGQmJiIiPT1kWzFdKXJldHVybiBkWzBdfWZ1bmN0aW9uIGQoYixjKXtmb3IoO2IubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYi5sZW5ndGhzLnB1c2goe3B4OjB9KTtmb3IoO2MubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYy5sZW5ndGhzLnB1c2goe3B4OjB9KTtpZihiLmluc2V0PT1jLmluc2V0JiYhIWIuY29sb3I9PSEhYy5jb2xvcil7Zm9yKHZhciBkLGU9W10sZj1bW10sMF0sZz1bW10sMF0saD0wO2g8Yi5sZW5ndGhzLmxlbmd0aDtoKyspe3ZhciBpPWEubWVyZ2VEaW1lbnNpb25zKGIubGVuZ3Roc1toXSxjLmxlbmd0aHNbaF0sMj09aCk7ZlswXS5wdXNoKGlbMF0pLGdbMF0ucHVzaChpWzFdKSxlLnB1c2goaVsyXSl9aWYoYi5jb2xvciYmYy5jb2xvcil7dmFyIGo9YS5tZXJnZUNvbG9ycyhiLmNvbG9yLGMuY29sb3IpO2ZbMV09alswXSxnWzFdPWpbMV0sZD1qWzJdfXJldHVybltmLGcsZnVuY3Rpb24oYSl7Zm9yKHZhciBjPWIuaW5zZXQ/Imluc2V0ICI6IiAiLGY9MDtmPGUubGVuZ3RoO2YrKyljKz1lW2ZdKGFbMF1bZl0pKyIgIjtyZXR1cm4gZCYmKGMrPWQoYVsxXSkpLGN9XX19ZnVuY3Rpb24gZShiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3JldHVybntpbnNldDphLGNvbG9yOlswLDAsMCwwXSxsZW5ndGhzOlt7cHg6MH0se3B4OjB9LHtweDowfSx7cHg6MH1dfX1mb3IodmFyIGc9W10saD1bXSxpPTA7aTxkLmxlbmd0aHx8aTxlLmxlbmd0aDtpKyspe3ZhciBqPWRbaV18fGYoZVtpXS5pbnNldCksaz1lW2ldfHxmKGRbaV0uaW5zZXQpO2cucHVzaChqKSxoLnB1c2goayl9cmV0dXJuIGEubWVyZ2VOZXN0ZWRSZXBlYXRlZChiLGMsZyxoKX12YXIgZj1lLmJpbmQobnVsbCxkLCIsICIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxmLFsiYm94LXNoYWRvdyIsInRleHQtc2hhZG93Il0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGEudG9GaXhlZCgzKS5yZXBsYWNlKC8wKyQvLCIiKS5yZXBsYWNlKC9cLiQvLCIiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe2lmKC9eXHMqWy0rXT8oXGQqXC4pP1xkK1xzKiQvLnRlc3QoYSkpcmV0dXJuIE51bWJlcihhKX1mdW5jdGlvbiBmKGEsYil7cmV0dXJuW2EsYixjXX1mdW5jdGlvbiBnKGEsYil7aWYoMCE9YSlyZXR1cm4gaSgwLDEvMCkoYSxiKX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChkKDEsMS8wLGEpKX1dfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm5bZSxmLGZ1bmN0aW9uKGUpe3JldHVybiBjKGQoYSxiLGUpKX1dfX1mdW5jdGlvbiBqKGEpe3ZhciBiPWEudHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGY9ZShiW2RdKTtpZih2b2lkIDA9PT1mKXJldHVybjtjLnB1c2goZil9cmV0dXJuIGN9fWZ1bmN0aW9uIGsoYSxiKXtpZihhLmxlbmd0aD09Yi5sZW5ndGgpcmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoYykuam9pbigiICIpfV19ZnVuY3Rpb24gbChhLGIpe3JldHVyblthLGIsTWF0aC5yb3VuZF19YS5jbGFtcD1kLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaixrLFsic3Ryb2tlLWRhc2hhcnJheSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEvMCksWyJib3JkZXItaW1hZ2Utd2lkdGgiLCJsaW5lLWhlaWdodCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEpLFsib3BhY2l0eSIsInNoYXBlLWltYWdlLXRocmVzaG9sZCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsZyxbImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxoLFsib3JwaGFucyIsIndpZG93cyJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsbCxbInotaW5kZXgiXSksYS5wYXJzZU51bWJlcj1lLGEucGFyc2VOdW1iZXJMaXN0PWosYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKCJ2aXNpYmxlIj09YXx8InZpc2libGUiPT1iKXJldHVyblswLDEsZnVuY3Rpb24oYyl7cmV0dXJuIGM8PTA/YTpjPj0xP2I6InZpc2libGUifV19YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbInZpc2liaWxpdHkiXSl9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXthPWEudHJpbSgpLGYuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxTdHlsZT1hO3ZhciBiPWYuZmlsbFN0eWxlO2lmKGYuZmlsbFN0eWxlPSIjZmZmIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDtkPDM7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLCJyZ2JhKCIrYi5qb2luKCIsIikrIikifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZS53aWR0aD1lLmhlaWdodD0xO3ZhciBmPWUuZ2V0Q29udGV4dCgiMmQiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbImJhY2tncm91bmQtY29sb3IiLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItdG9wLWNvbG9yIiwiY29sb3IiLCJmaWxsIiwiZmxvb2QtY29sb3IiLCJsaWdodGluZy1jb2xvciIsIm91dGxpbmUtY29sb3IiLCJzdG9wLWNvbG9yIiwic3Ryb2tlIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIl0pLGEuY29uc3VtZUNvbG9yPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGMpLGEubWVyZ2VDb2xvcnM9ZH0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYj1oLmV4ZWMoYSk7Zz1iP2JbMF06dm9pZCAwfWZ1bmN0aW9uIGMoKXt2YXIgYT1OdW1iZXIoZyk7cmV0dXJuIGIoKSxhfWZ1bmN0aW9uIGQoKXtpZigiKCIhPT1nKXJldHVybiBjKCk7YigpO3ZhciBhPWYoKTtyZXR1cm4iKSIhPT1nP05hTjooYigpLGEpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ZCgpOyIqIj09PWd8fCIvIj09PWc7KXt2YXIgYz1nO2IoKTt2YXIgZT1kKCk7IioiPT09Yz9hKj1lOmEvPWV9cmV0dXJuIGF9ZnVuY3Rpb24gZigpe2Zvcih2YXIgYT1lKCk7IisiPT09Z3x8Ii0iPT09Zzspe3ZhciBjPWc7YigpO3ZhciBkPWUoKTsiKyI9PT1jP2ErPWQ6YS09ZH1yZXR1cm4gYX12YXIgZyxoPS8oW1wrXC1cd1wuXSt8W1woXClcKlwvXSkvZztyZXR1cm4gYigpLGYoKX1mdW5jdGlvbiBkKGEsYil7aWYoIjAiPT0oYj1iLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSYmInB4Ii5zZWFyY2goYSk+PTApcmV0dXJue3B4OjB9O2lmKC9eW14oXSokfF5jYWxjLy50ZXN0KGIpKXtiPWIucmVwbGFjZSgvY2FsY1woL2csIigiKTt2YXIgZD17fTtiPWIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBkW2FdPW51bGwsIlUiK2F9KTtmb3IodmFyIGU9IlUoIithLnNvdXJjZSsiKSIsZj1iLnJlcGxhY2UoL1stK10/KFxkKlwuKT9cZCsoW0VlXVstK10/XGQrKT8vZywiTiIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiTiIrZSwiZyIpLCJEIikucmVwbGFjZSgvXHNbKy1dXHMvZywiTyIpLnJlcGxhY2UoL1xzL2csIiIpLGc9Wy9OXCooRCkvZywvKE58RClbKlwvXU4vZywvKE58RClPXDEvZywvXCgoTnxEKVwpL2ddLGg9MDtoPGcubGVuZ3RoOylnW2hdLnRlc3QoZik/KGY9Zi5yZXBsYWNlKGdbaF0sIiQxIiksaD0wKTpoKys7aWYoIkQiPT1mKXtmb3IodmFyIGkgaW4gZCl7dmFyIGo9YyhiLnJlcGxhY2UobmV3IFJlZ0V4cCgiVSIraSwiZyIpLCIiKS5yZXBsYWNlKG5ldyBSZWdFeHAoZSwiZyIpLCIqMCIpKTtpZighaXNGaW5pdGUoaikpcmV0dXJuO2RbaV09an1yZXR1cm4gZH19fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gZihhLGIsITApfWZ1bmN0aW9uIGYoYixjLGQpe3ZhciBlLGY9W107Zm9yKGUgaW4gYilmLnB1c2goZSk7Zm9yKGUgaW4gYylmLmluZGV4T2YoZSk8MCYmZi5wdXNoKGUpO3JldHVybiBiPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfHwwfSksYz1mLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gY1thXXx8MH0pLFtiLGMsZnVuY3Rpb24oYil7dmFyIGM9Yi5tYXAoZnVuY3Rpb24oYyxlKXtyZXR1cm4gMT09Yi5sZW5ndGgmJmQmJihjPU1hdGgubWF4KGMsMCkpLGEubnVtYmVyVG9TdHJpbmcoYykrZltlXX0pLmpvaW4oIiArICIpO3JldHVybiBiLmxlbmd0aD4xPyJjYWxjKCIrYysiKSI6Y31dfXZhciBnPSJweHxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjIixoPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZywiZyIpKSxpPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZysifCUiLCJnIikpLGo9ZC5iaW5kKG51bGwsL2RlZ3xyYWR8Z3JhZHx0dXJuL2cpO2EucGFyc2VMZW5ndGg9aCxhLnBhcnNlTGVuZ3RoT3JQZXJjZW50PWksYS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50PWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGkpLGEucGFyc2VBbmdsZT1qLGEubWVyZ2VEaW1lbnNpb25zPWY7dmFyIGs9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsaCksbD1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxrLC9eLyksbT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxsLC9eLC8pO2EuY29uc3VtZVNpemVQYWlyTGlzdD1tO3ZhciBuPWZ1bmN0aW9uKGEpe3ZhciBiPW0oYSk7aWYoYiYmIiI9PWJbMV0pcmV0dXJuIGJbMF19LG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGUsIiAiKSxwPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKHZvaWQgMCxvLCIsIik7YS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXI9byxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKG4scCxbImJhY2tncm91bmQtc2l6ZSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGksZSxbImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci10b3Atd2lkdGgiLCJmbGV4LWJhc2lzIiwiZm9udC1zaXplIiwiaGVpZ2h0IiwibGluZS1oZWlnaHQiLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwib3V0bGluZS13aWR0aCIsIndpZHRoIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaSxmLFsiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm90dG9tIiwibGVmdCIsImxldHRlci1zcGFjaW5nIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1pbi1oZWlnaHQiLCJtaW4td2lkdGgiLCJvdXRsaW5lLW9mZnNldCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGVyc3BlY3RpdmUiLCJyaWdodCIsInNoYXBlLW1hcmdpbiIsInN0cm9rZS1kYXNob2Zmc2V0IiwidGV4dC1pbmRlbnQiLCJ0b3AiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndvcmQtc3BhY2luZyJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwoLykpLGEuY29uc3VtZVJlcGVhdGVkLmJpbmQobnVsbCxjLC9eLC8pLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwpLykpXSxiKTtpZihkJiY0PT1kWzBdLmxlbmd0aClyZXR1cm4gZFswXX1mdW5jdGlvbiBlKGIsYyl7cmV0dXJuImF1dG8iPT1ifHwiYXV0byI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKCJhdXRvIj09ZSlyZXR1cm4iYXV0byI7dmFyIGY9YS5tZXJnZURpbWVuc2lvbnMoZSxlKTtyZXR1cm4gZlsyXShmWzBdKX1dOmEubWVyZ2VEaW1lbnNpb25zKGIsYyl9ZnVuY3Rpb24gZihhKXtyZXR1cm4icmVjdCgiK2ErIikifXZhciBnPWEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGYsZSwiLCAiKTthLnBhcnNlQm94PWQsYS5tZXJnZUJveGVzPWcsYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLGcsWyJjbGlwIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoIm5vbmUiPT0oYj1iLnRvTG93ZXJDYXNlKCkudHJpbSgpKSlyZXR1cm5bXTtmb3IodmFyIGMsZD0vXHMqKFx3KylcKChbXildKilcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KCIsIiksaj1oWzBdO2lmKGoubGVuZ3RoPGkubGVuZ3RoKXJldHVybjtmb3IodmFyIGs9W10sbz0wO288ai5sZW5ndGg7bysrKXt2YXIgcCxxPWlbb10scj1qW29dO2lmKHZvaWQgMD09PShwPXE/e0E6ZnVuY3Rpb24oYil7cmV0dXJuIjAiPT1iLnRyaW0oKT9tOmEucGFyc2VBbmdsZShiKX0sTjphLnBhcnNlTnVtYmVyLFQ6YS5wYXJzZUxlbmd0aE9yUGVyY2VudCxMOmEucGFyc2VMZW5ndGh9W3IudG9VcHBlckNhc2UoKV0ocSk6e2E6bSxuOmtbMF0sdDpsfVtyXSkpcmV0dXJuO2sucHVzaChwKX1pZihlLnB1c2goe3Q6ZyxkOmt9KSxkLmxhc3RJbmRleD09Yi5sZW5ndGgpcmV0dXJuIGV9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEudG9GaXhlZCg2KS5yZXBsYWNlKCIuMDAwMDAwIiwiIil9ZnVuY3Rpb24gZyhiLGMpe2lmKGIuZGVjb21wb3NpdGlvblBhaXIhPT1jKXtiLmRlY29tcG9zaXRpb25QYWlyPWM7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihiKX1pZihjLmRlY29tcG9zaXRpb25QYWlyIT09Yil7Yy5kZWNvbXBvc2l0aW9uUGFpcj1iO3ZhciBlPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24oYyl9cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWVbMF0/W1shMV0sWyEwXSxmdW5jdGlvbihhKXtyZXR1cm4gYT9jWzBdLmQ6YlswXS5kfV06KGRbMF0ucHVzaCgwKSxlWzBdLnB1c2goMSksW2QsZSxmdW5jdGlvbihiKXt2YXIgYz1hLnF1YXQoZFswXVszXSxlWzBdWzNdLGJbNV0pO3JldHVybiBhLmNvbXBvc2VNYXRyaXgoYlswXSxiWzFdLGJbMl0sYyxiWzRdKS5tYXAoZikuam9pbigiLCIpfV0pfWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGEucmVwbGFjZSgvW3h5XS8sIiIpfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVwbGFjZSgvKHh8eXx6fDNkKT8kLywiM2QiKX1mdW5jdGlvbiBqKGIsYyl7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbiYmITAsZT0hMTtpZighYi5sZW5ndGh8fCFjLmxlbmd0aCl7Yi5sZW5ndGh8fChlPSEwLGI9YyxjPVtdKTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGo9YltmXS50LGs9YltmXS5kLGw9InNjYWxlIj09ai5zdWJzdHIoMCw1KT8xOjA7Yy5wdXNoKHt0OmosZDprLm1hcChmdW5jdGlvbihhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGw7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1sO3JldHVybiBifSl9KX19dmFyIG09ZnVuY3Rpb24oYSxiKXtyZXR1cm4icGVyc3BlY3RpdmUiPT1hJiYicGVyc3BlY3RpdmUiPT1ifHwoIm1hdHJpeCI9PWF8fCJtYXRyaXgzZCI9PWEpJiYoIm1hdHJpeCI9PWJ8fCJtYXRyaXgzZCI9PWIpfSxvPVtdLHA9W10scT1bXTtpZihiLmxlbmd0aCE9Yy5sZW5ndGgpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dfWVsc2UgZm9yKHZhciBmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBqLHM9YltmXS50LHQ9Y1tmXS50LHU9YltmXS5kLHY9Y1tmXS5kLHc9bltzXSx4PW5bdF07aWYobShzLHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhbYltmXV0sW2NbZl1dKTtvLnB1c2goclswXSkscC5wdXNoKHJbMV0pLHEucHVzaChbIm1hdHJpeCIsW3JbMl1dXSl9ZWxzZXtpZihzPT10KWo9cztlbHNlIGlmKHdbMl0mJnhbMl0mJmgocyk9PWgodCkpaj1oKHMpLHU9d1syXSh1KSx2PXhbMl0odik7ZWxzZXtpZighd1sxXXx8IXhbMV18fGkocykhPWkodCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dO2JyZWFrfWo9aShzKSx1PXdbMV0odSksdj14WzFdKHYpfWZvcih2YXIgeT1bXSx6PVtdLEE9W10sQj0wO0I8dS5sZW5ndGg7QisrKXt2YXIgQz0ibnVtYmVyIj09dHlwZW9mIHVbQl0/YS5tZXJnZU51bWJlcnM6YS5tZXJnZURpbWVuc2lvbnMscj1DKHVbQl0sdltCXSk7eVtCXT1yWzBdLHpbQl09clsxXSxBLnB1c2goclsyXSl9by5wdXNoKHkpLHAucHVzaCh6KSxxLnB1c2goW2osQV0pfX1pZihlKXt2YXIgRD1vO289cCxwPUR9cmV0dXJuW28scCxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm1hcChmdW5jdGlvbihhLGMpe3JldHVybiBxW2JdWzFdW2NdKGEpfSkuam9pbigiLCIpO3JldHVybiJtYXRyaXgiPT1xW2JdWzBdJiYxNj09Yy5zcGxpdCgiLCIpLmxlbmd0aCYmKHFbYl1bMF09Im1hdHJpeDNkIikscVtiXVswXSsiKCIrYysiKSJ9KS5qb2luKCIgIil9XX12YXIgaz1udWxsLGw9e3B4OjB9LG09e2RlZzowfSxuPXttYXRyaXg6WyJOTk5OTk4iLFtrLGssMCwwLGssaywwLDAsMCwwLDEsMCxrLGssMCwxXSxkXSxtYXRyaXgzZDpbIk5OTk5OTk5OTk5OTk5OTk4iLGRdLHJvdGF0ZTpbIkEiXSxyb3RhdGV4OlsiQSJdLHJvdGF0ZXk6WyJBIl0scm90YXRlejpbIkEiXSxyb3RhdGUzZDpbIk5OTkEiXSxwZXJzcGVjdGl2ZTpbIkwiXSxzY2FsZTpbIk5uIixjKFtrLGssMV0pLGRdLHNjYWxleDpbIk4iLGMoW2ssMSwxXSksYyhbaywxXSldLHNjYWxleTpbIk4iLGMoWzEsaywxXSksYyhbMSxrXSldLHNjYWxlejpbIk4iLGMoWzEsMSxrXSldLHNjYWxlM2Q6WyJOTk4iLGRdLHNrZXc6WyJBYSIsbnVsbCxkXSxza2V3eDpbIkEiLG51bGwsYyhbayxtXSldLHNrZXd5OlsiQSIsbnVsbCxjKFttLGtdKV0sdHJhbnNsYXRlOlsiVHQiLGMoW2ssayxsXSksZF0sdHJhbnNsYXRleDpbIlQiLGMoW2ssbCxsXSksYyhbayxsXSldLHRyYW5zbGF0ZXk6WyJUIixjKFtsLGssbF0pLGMoW2wsa10pXSx0cmFuc2xhdGV6OlsiTCIsYyhbbCxsLGtdKV0sdHJhbnNsYXRlM2Q6WyJUVEwiLGRdfTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaixbInRyYW5zZm9ybSJdKSxhLnRyYW5zZm9ybVRvU3ZnTWF0cml4PWZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNmb3JtTGlzdFRvTWF0cml4KGUoYikpO3JldHVybiJtYXRyaXgoIitmKGNbMF0pKyIgIitmKGNbMV0pKyIgIitmKGNbNF0pKyIgIitmKGNbNV0pKyIgIitmKGNbMTJdKSsiICIrZihjWzEzXSkrIikifX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5jb25jYXQoW2FdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiYoZFthXT1iKSxlW2JdPWF9KX12YXIgZD17fSxlPXt9O2MoInRyYW5zZm9ybSIsWyJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxjKCJ0cmFuc2Zvcm1PcmlnaW4iLFsid2Via2l0VHJhbnNmb3JtT3JpZ2luIl0pLGMoInBlcnNwZWN0aXZlIixbIndlYmtpdFBlcnNwZWN0aXZlIl0pLGMoInBlcnNwZWN0aXZlT3JpZ2luIixbIndlYmtpdFBlcnNwZWN0aXZlT3JpZ2luIl0pLGEucHJvcGVydHlOYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBkW2FdfHxhfSxhLnVucHJlZml4ZWRQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGVbYV18fGF9fShiKX0oKSxmdW5jdGlvbigpe2lmKHZvaWQgMD09PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmFuaW1hdGUoW10pLm9uY2FuY2VsKXt2YXIgYTtpZih3aW5kb3cucGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl2YXIgYT1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07ZWxzZSB2YXIgYT1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfTt2YXIgYj1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImNhbmNlbCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7ImZ1bmN0aW9uIj09dHlwZW9mIGImJiJjYW5jZWwiPT1hP3RoaXMuX2NhbmNlbEhhbmRsZXJzLnB1c2goYik6aC5jYWxsKHRoaXMsYSxiKX07dmFyIGk9Zi5yZW1vdmVFdmVudExpc3RlbmVyO3JldHVybiBmLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXtpZigiY2FuY2VsIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpLGY9IjAiPT1lPyIxIjoiMCI7Yz1iLmFuaW1hdGUoe29wYWNpdHk6W2YsZl19LHtkdXJhdGlvbjoxfSksYy5jdXJyZW50VGltZT0wLGQ9Z2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5Iik9PWZ9Y2F0Y2goYSl7fWZpbmFsbHl7YyYmYy5jYW5jZWwoKX1pZighZCl7dmFyIGc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oYixjKXtyZXR1cm4gd2luZG93LlN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZBcnJheS5wcm90b3R5cGUuZnJvbSYmYltTeW1ib2wuaXRlcmF0b3JdJiYoYj1BcnJheS5mcm9tKGIpKSxBcnJheS5pc0FycmF5KGIpfHxudWxsPT09Ynx8KGI9YS5jb252ZXJ0VG9BcnJheUZvcm0oYikpLGcuY2FsbCh0aGlzLGIsYyl9fX0oYSksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGM9Yi50aW1lbGluZTtjLmN1cnJlbnRUaW1lPWEsYy5fZGlzY2FyZEFuaW1hdGlvbnMoKSwwPT1jLl9hbmltYXRpb25zLmxlbmd0aD9mPSExOnJlcXVlc3RBbmltYXRpb25GcmFtZShkKX12YXIgZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoZnVuY3Rpb24oYyl7Yi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYShjKSxiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKX0pfSxiLkFuaW1hdGlvblRpbWVsaW5lPWZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXZvaWQgMH0sYi5BbmltYXRpb25UaW1lbGluZS5wcm90b3R5cGU9e2dldEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY2FyZEFuaW1hdGlvbnMoKSx0aGlzLl9hbmltYXRpb25zLnNsaWNlKCl9LF91cGRhdGVBbmltYXRpb25zUHJvbWlzZXM6ZnVuY3Rpb24oKXtiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXM9Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5fdXBkYXRlUHJvbWlzZXMoKX0pfSxfZGlzY2FyZEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb25zPXRoaXMuX2FuaW1hdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiJmaW5pc2hlZCIhPWEucGxheVN0YXRlJiYiaWRsZSIhPWEucGxheVN0YXRlfSl9LF9wbGF5OmZ1bmN0aW9uKGEpe3ZhciBjPW5ldyBiLkFuaW1hdGlvbihhLHRoaXMpO3JldHVybiB0aGlzLl9hbmltYXRpb25zLnB1c2goYyksYi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrKCksYy5fdXBkYXRlUHJvbWlzZXMoKSxjLl9hbmltYXRpb24ucGxheSgpLGMuX3VwZGF0ZVByb21pc2VzKCksY30scGxheTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5yZW1vdmUoKSx0aGlzLl9wbGF5KGEpfX07dmFyIGY9ITE7Yi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrPWZ1bmN0aW9uKCl7Znx8KGY9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpKX07dmFyIGc9bmV3IGIuQW5pbWF0aW9uVGltZWxpbmU7Yi50aW1lbGluZT1nO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmRvY3VtZW50LCJ0aW1lbGluZSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ319KX1jYXRjaChhKXt9dHJ5e3dpbmRvdy5kb2N1bWVudC50aW1lbGluZT1nfWNhdGNoKGEpe319KDAsYyksZnVuY3Rpb24oYSxiLGMpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1bXSxiLkFuaW1hdGlvbj1mdW5jdGlvbihiLGMpe2lmKHRoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLmVmZmVjdD1iLGImJihiLl9hbmltYXRpb249dGhpcyksIWMpdGhyb3cgbmV3IEVycm9yKCJBbmltYXRpb24gd2l0aCBudWxsIHRpbWVsaW5lIGlzIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLl90aW1lbGluZT1jLHRoaXMuX3NlcXVlbmNlTnVtYmVyPWEuc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9ob2xkVGltZT0wLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9pc0dyb3VwPSExLHRoaXMuX2FuaW1hdGlvbj1udWxsLHRoaXMuX2NoaWxkQW5pbWF0aW9ucz1bXSx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX29sZFBsYXlTdGF0ZT0iaWRsZSIsdGhpcy5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfdXBkYXRlUHJvbWlzZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vbGRQbGF5U3RhdGUsYj10aGlzLnBsYXlTdGF0ZTtyZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0UmVhZHlQcm9taXNlKCksdGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCk6InBlbmRpbmciPT1hP3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2UoKToicGVuZGluZyI9PWImJih0aGlzLl9yZWFkeVByb21pc2U9dm9pZCAwKSksdGhpcy5fZmluaXNoZWRQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0RmluaXNoZWRQcm9taXNlKCksdGhpcy5fZmluaXNoZWRQcm9taXNlPXZvaWQgMCk6ImZpbmlzaGVkIj09Yj90aGlzLl9yZXNvbHZlRmluaXNoZWRQcm9taXNlKCk6ImZpbmlzaGVkIj09YSYmKHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApKSx0aGlzLl9vbGRQbGF5U3RhdGU9dGhpcy5wbGF5U3RhdGUsdGhpcy5fcmVhZHlQcm9taXNlfHx0aGlzLl9maW5pc2hlZFByb21pc2V9LF9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGEsYyxkLGUsZj0hIXRoaXMuX2FuaW1hdGlvbjtmJiYoYT10aGlzLnBsYXliYWNrUmF0ZSxjPXRoaXMuX3BhdXNlZCxkPXRoaXMuc3RhcnRUaW1lLGU9dGhpcy5jdXJyZW50VGltZSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fYW5pbWF0aW9uLl93cmFwcGVyPW51bGwsdGhpcy5fYW5pbWF0aW9uPW51bGwpLCghdGhpcy5lZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LktleWZyYW1lRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcykpLCh0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8dGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuR3JvdXBFZmZlY3QpJiYodGhpcy5fYW5pbWF0aW9uPWIubmV3VW5kZXJseWluZ0FuaW1hdGlvbkZvckdyb3VwKHRoaXMuZWZmZWN0KSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cCh0aGlzKSksdGhpcy5lZmZlY3QmJnRoaXMuZWZmZWN0Ll9vbnNhbXBsZSYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KHRoaXMpLGYmJigxIT1hJiYodGhpcy5wbGF5YmFja1JhdGU9YSksbnVsbCE9PWQ/dGhpcy5zdGFydFRpbWU9ZDpudWxsIT09ZT90aGlzLmN1cnJlbnRUaW1lPWU6bnVsbCE9PXRoaXMuX2hvbGRUaW1lJiYodGhpcy5jdXJyZW50VGltZT10aGlzLl9ob2xkVGltZSksYyYmdGhpcy5wYXVzZSgpKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihjKXt0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oYyxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMuZWZmZWN0KSl9LmJpbmQodGhpcykpfX0sX3NldEV4dGVybmFsQW5pbWF0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKWZvcih2YXIgYj0wO2I8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoO2IrKyl0aGlzLmVmZmVjdC5jaGlsZHJlbltiXS5fYW5pbWF0aW9uPWEsdGhpcy5fY2hpbGRBbmltYXRpb25zW2JdLl9zZXRFeHRlcm5hbEFuaW1hdGlvbihhKX0sX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKXt2YXIgYT10aGlzLmVmZmVjdC5fdGltaW5nLmRlbGF5O3RoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuZWZmZWN0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9Yi50aW1lbGluZS5fcGxheShjKTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMucHVzaChkKSxkLnBsYXliYWNrUmF0ZT10aGlzLnBsYXliYWNrUmF0ZSx0aGlzLl9wYXVzZWQmJmQucGF1c2UoKSxjLl9hbmltYXRpb249dGhpcy5lZmZlY3QuX2FuaW1hdGlvbix0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oZCxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMpKX0uYmluZCh0aGlzKSl9fSxfYXJyYW5nZUNoaWxkcmVuOmZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMuc3RhcnRUaW1lP2EuY3VycmVudFRpbWU9dGhpcy5jdXJyZW50VGltZS1iL3RoaXMucGxheWJhY2tSYXRlOmEuc3RhcnRUaW1lIT09dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSYmKGEuc3RhcnRUaW1lPXRoaXMuc3RhcnRUaW1lK2IvdGhpcy5wbGF5YmFja1JhdGUpfSxnZXQgdGltZWxpbmUoKXtyZXR1cm4gdGhpcy5fdGltZWxpbmV9LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uP3RoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUifSxnZXQgZmluaXNoZWQoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX2ZpbmlzaGVkUHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fZmluaXNoZWRQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksImZpbmlzaGVkIj09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVGaW5pc2hlZFByb21pc2UoKSksdGhpcy5fZmluaXNoZWRQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IHJlYWR5KCl7cmV0dXJuIHdpbmRvdy5Qcm9taXNlPyh0aGlzLl9yZWFkeVByb21pc2V8fCgtMT09Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmluZGV4T2YodGhpcykmJmIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5wdXNoKHRoaXMpLHRoaXMuX3JlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGIpe3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXthKHRoaXMpfSx0aGlzLl9yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXtiKHt0eXBlOkRPTUV4Y2VwdGlvbi5BQk9SVF9FUlIsbmFtZToiQWJvcnRFcnJvciJ9KX19LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9PXRoaXMucGxheVN0YXRlJiZ0aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCkpLHRoaXMuX3JlYWR5UHJvbWlzZSk6KGNvbnNvbGUud2FybigiQW5pbWF0aW9uIFByb21pc2VzIHJlcXVpcmUgSmF2YVNjcmlwdCBQcm9taXNlIGNvbnN0cnVjdG9yIiksbnVsbCl9LGdldCBvbmZpbmlzaCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ub25maW5pc2h9LHNldCBvbmZpbmlzaChhKXt0aGlzLl9hbmltYXRpb24ub25maW5pc2g9ImZ1bmN0aW9uIj09dHlwZW9mIGE/ZnVuY3Rpb24oYil7Yi50YXJnZXQ9dGhpcyxhLmNhbGwodGhpcyxiKX0uYmluZCh0aGlzKTphfSxnZXQgb25jYW5jZWwoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsfSxzZXQgb25jYW5jZWwoYSl7dGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2Z1bmN0aW9uKGIpe2IudGFyZ2V0PXRoaXMsYS5jYWxsKHRoaXMsYil9LmJpbmQodGhpcyk6YX0sZ2V0IGN1cnJlbnRUaW1lKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKTt2YXIgYT10aGlzLl9hbmltYXRpb24uY3VycmVudFRpbWU7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2VzKCksYX0sc2V0IGN1cnJlbnRUaW1lKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lPWlzRmluaXRlKGEpP2E6TWF0aC5zaWduKGEpKk51bWJlci5NQVhfVkFMVUUsdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYixjKXtiLmN1cnJlbnRUaW1lPWEtY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnN0YXJ0VGltZX0sc2V0IHN0YXJ0VGltZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5zdGFydFRpbWU9aXNGaW5pdGUoYSk/YTpNYXRoLnNpZ24oYSkqTnVtYmVyLk1BWF9WQUxVRSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiLGMpe2Iuc3RhcnRUaW1lPWErY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBiPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZT1hLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiKXtiLnBsYXliYWNrUmF0ZT1hfSksbnVsbCE9PWImJih0aGlzLmN1cnJlbnRUaW1lPWIpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9hbmltYXRpb24ucGxheSgpLC0xPT10aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpJiZ0aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpLHRoaXMuX3JlZ2lzdGVyKCksYi5hd2FpdFN0YXJ0VGltZSh0aGlzKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7dmFyIGI9YS5jdXJyZW50VGltZTthLnBsYXkoKSxhLmN1cnJlbnRUaW1lPWJ9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5jdXJyZW50VGltZSYmKHRoaXMuX2hvbGRUaW1lPXRoaXMuY3VycmVudFRpbWUpLHRoaXMuX2FuaW1hdGlvbi5wYXVzZSgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe2EucGF1c2UoKX0pLHRoaXMuX3BhdXNlZD0hMCx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5maW5pc2goKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGE9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucmV2ZXJzZSgpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnJldmVyc2UoKX0pLG51bGwhPT1hJiYodGhpcy5jdXJyZW50VGltZT1hKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YjsiZnVuY3Rpb24iPT10eXBlb2YgYiYmKGM9ZnVuY3Rpb24oYSl7YS50YXJnZXQ9dGhpcyxiLmNhbGwodGhpcyxhKX0uYmluZCh0aGlzKSxiLl93cmFwcGVyPWMpLHRoaXMuX2FuaW1hdGlvbi5hZGRFdmVudExpc3RlbmVyKGEsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLl9hbmltYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGImJmIuX3dyYXBwZXJ8fGIpfSxfcmVtb3ZlQ2hpbGRBbmltYXRpb25zOmZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9jaGlsZEFuaW1hdGlvbnMubGVuZ3RoOyl0aGlzLl9jaGlsZEFuaW1hdGlvbnMucG9wKCkuY2FuY2VsKCl9LF9mb3JFYWNoQ2hpbGQ6ZnVuY3Rpb24oYil7dmFyIGM9MDtpZih0aGlzLmVmZmVjdC5jaGlsZHJlbiYmdGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDx0aGlzLmVmZmVjdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9ucygpLHRoaXMuX2NoaWxkQW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEsYyksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihjKz1hLmVmZmVjdC5hY3RpdmVEdXJhdGlvbil9LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBkPXRoaXMuZWZmZWN0Ll90aW1pbmcsZT10aGlzLmN1cnJlbnRUaW1lO251bGwhPT1lJiYoZT1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZCksZSxkKSksKG51bGw9PWV8fGlzTmFOKGUpKSYmdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCl9fX0sd2luZG93LkFuaW1hdGlvbj1iLkFuaW1hdGlvbn0oYSxjKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChiKXt0aGlzLl9mcmFtZXM9YS5ub3JtYWxpemVLZXlmcmFtZXMoYil9ZnVuY3Rpb24gZSgpe2Zvcih2YXIgYT0hMTtpLmxlbmd0aDspaS5zaGlmdCgpLl91cGRhdGVDaGlsZHJlbigpLGE9ITA7cmV0dXJuIGF9dmFyIGY9ZnVuY3Rpb24oYSl7aWYoYS5fYW5pbWF0aW9uPXZvaWQgMCxhIGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0fHxhIGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KWZvcih2YXIgYj0wO2I8YS5jaGlsZHJlbi5sZW5ndGg7YisrKWYoYS5jaGlsZHJlbltiXSl9O2IucmVtb3ZlTXVsdGk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtkLl9wYXJlbnQ/KC0xPT1iLmluZGV4T2YoZC5fcGFyZW50KSYmYi5wdXNoKGQuX3BhcmVudCksZC5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShkLl9wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkKSwxKSxkLl9wYXJlbnQ9bnVsbCxmKGQpKTpkLl9hbmltYXRpb24mJmQuX2FuaW1hdGlvbi5lZmZlY3Q9PWQmJihkLl9hbmltYXRpb24uY2FuY2VsKCksZC5fYW5pbWF0aW9uLmVmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSksZC5fYW5pbWF0aW9uLl9jYWxsYmFjayYmKGQuX2FuaW1hdGlvbi5fY2FsbGJhY2suX2FuaW1hdGlvbj1udWxsKSxkLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksZihkKSl9Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdLl9yZWJ1aWxkKCl9LGIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYixjLGUsZil7cmV0dXJuIHRoaXMudGFyZ2V0PWIsdGhpcy5fcGFyZW50PW51bGwsZT1hLm51bWVyaWNUaW1pbmdUb09iamVjdChlKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoZSksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoZSksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGUsITEsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBjPyhhLmRlcHJlY2F0ZWQoIkN1c3RvbSBLZXlmcmFtZUVmZmVjdCIsIjIwMTUtMDYtMjIiLCJVc2UgS2V5ZnJhbWVFZmZlY3Qub25zYW1wbGUgaW5zdGVhZC4iKSx0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPWMpOnRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM9bmV3IGQoYyksdGhpcy5fa2V5ZnJhbWVzPWMsdGhpcy5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX3RpbWluZyksdGhpcy5faWQ9Zix0aGlzfSxiLktleWZyYW1lRWZmZWN0LnByb3RvdHlwZT17Z2V0RnJhbWVzOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM/dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lczp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLl9mcmFtZXN9LHNldCBvbnNhbXBsZShhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgb25zYW1wbGUgb24gY3VzdG9tIGVmZmVjdCBLZXlmcmFtZUVmZmVjdCBpcyBub3Qgc3VwcG9ydGVkLiIpO3RoaXMuX29uc2FtcGxlPWEsdGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxjbG9uZTpmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmdldEZyYW1lcygpKXRocm93IG5ldyBFcnJvcigiQ2xvbmluZyBjdXN0b20gZWZmZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiIpO3ZhciBiPW5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLnRhcmdldCxbXSxhLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLHRoaXMuX2lkKTtyZXR1cm4gYi5fbm9ybWFsaXplZEtleWZyYW1lcz10aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLGIuX2tleWZyYW1lcz10aGlzLl9rZXlmcmFtZXMsYn0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX07dmFyIGc9RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTtFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGIudGltZWxpbmUuX3BsYXkobmV3IGIuS2V5ZnJhbWVFZmZlY3QodGhpcyxhLGMsZCkpfTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKTtiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1hLnRhcmdldHx8aCxjPWEuX2tleWZyYW1lczsiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9W10pO3ZhciBkPWEuX3RpbWluZ0lucHV0O2QuaWQ9YS5faWR9ZWxzZSB2YXIgYj1oLGM9W10sZD0wO3JldHVybiBnLmFwcGx5KGIsW2MsZF0pfSxiLmJpbmRBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXthLmVmZmVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZWZmZWN0Ll9ub3JtYWxpemVkS2V5ZnJhbWVzJiZiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3QoYSl9O3ZhciBpPVtdO2IuYXdhaXRTdGFydFRpbWU9ZnVuY3Rpb24oYSl7bnVsbD09PWEuc3RhcnRUaW1lJiZhLl9pc0dyb3VwJiYoMD09aS5sZW5ndGgmJnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxpLnB1c2goYSkpfTt2YXIgaj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJnZXRDb21wdXRlZFN0eWxlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKTt2YXIgYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZSgpJiYoYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYX19KSx3aW5kb3cuS2V5ZnJhbWVFZmZlY3Q9Yi5LZXlmcmFtZUVmZmVjdCx3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuZ2V0QW5pbWF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC50aW1lbGluZS5nZXRBbmltYXRpb25zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09YS5lZmZlY3QmJmEuZWZmZWN0LnRhcmdldD09dGhpc30uYmluZCh0aGlzKSl9fShhLGMpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2EuX3JlZ2lzdGVyZWR8fChhLl9yZWdpc3RlcmVkPSEwLGcucHVzaChhKSxofHwoaD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSkpKX1mdW5jdGlvbiBlKGEpe3ZhciBiPWc7Zz1bXSxiLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fc2VxdWVuY2VOdW1iZXItYi5fc2VxdWVuY2VOdW1iZXJ9KSxiPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe2EoKTt2YXIgYj1hLl9hbmltYXRpb24/YS5fYW5pbWF0aW9uLnBsYXlTdGF0ZToiaWRsZSI7cmV0dXJuInJ1bm5pbmciIT1iJiYicGVuZGluZyIhPWImJihhLl9yZWdpc3RlcmVkPSExKSxhLl9yZWdpc3RlcmVkfSksZy5wdXNoLmFwcGx5KGcsYiksZy5sZW5ndGg/KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKTpoPSExfXZhciBmPShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKSwwKTtiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3Q9ZnVuY3Rpb24oYil7dmFyIGMsZT1iLmVmZmVjdC50YXJnZXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgYi5lZmZlY3QuZ2V0RnJhbWVzKCk7Yz1nP2IuZWZmZWN0LmdldEZyYW1lcygpOmIuZWZmZWN0Ll9vbnNhbXBsZTt2YXIgaD1iLmVmZmVjdC50aW1pbmcsaT1udWxsO2g9YS5ub3JtYWxpemVUaW1pbmdJbnB1dChoKTt2YXIgaj1mdW5jdGlvbigpe3ZhciBkPWouX2FuaW1hdGlvbj9qLl9hbmltYXRpb24uY3VycmVudFRpbWU6bnVsbDtudWxsIT09ZCYmKGQ9YS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcyhhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKGgpLGQsaCksaXNOYU4oZCkmJihkPW51bGwpKSxkIT09aSYmKGc/YyhkLGUsYi5lZmZlY3QpOmMoZCxiLmVmZmVjdCxiLmVmZmVjdC5fYW5pbWF0aW9uKSksaT1kfTtqLl9hbmltYXRpb249YixqLl9yZWdpc3RlcmVkPSExLGouX3NlcXVlbmNlTnVtYmVyPWYrKyxiLl9jYWxsYmFjaz1qLGQoail9O3ZhciBnPVtdLGg9ITE7Yi5BbmltYXRpb24ucHJvdG90eXBlLl9yZWdpc3Rlcj1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrJiZkKHRoaXMuX2NhbGxiYWNrKX19KGEsYyksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEuX3RpbWluZy5kZWxheSthLmFjdGl2ZUR1cmF0aW9uK2EuX3RpbWluZy5lbmREZWxheX1mdW5jdGlvbiBlKGIsYyxkKXt0aGlzLl9pZD1kLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49Ynx8W10sdGhpcy5fcmVwYXJlbnQodGhpcy5jaGlsZHJlbiksYz1hLm51bWVyaWNUaW1pbmdUb09iamVjdChjKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoYyksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYywhMCksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGMsITAsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJhdXRvIj09PXRoaXMuX3RpbWluZy5kdXJhdGlvbiYmKHRoaXMuX3RpbWluZy5kdXJhdGlvbj10aGlzLmFjdGl2ZUR1cmF0aW9uKX13aW5kb3cuU2VxdWVuY2VFZmZlY3Q9ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sd2luZG93Lkdyb3VwRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlPXtfaXNBbmNlc3RvcjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcztudWxsIT09Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9wYXJlbnR9cmV0dXJuITF9LF9yZWJ1aWxkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YTspImF1dG8iPT09YS50aW1pbmcuZHVyYXRpb24mJihhLl90aW1pbmcuZHVyYXRpb249YS5hY3RpdmVEdXJhdGlvbiksYT1hLl9wYXJlbnQ7dGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LF9yZXBhcmVudDpmdW5jdGlvbihhKXtiLnJlbW92ZU11bHRpKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX3BhcmVudD10aGlzfSxfcHV0Q2hpbGQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yj8iQ2Fubm90IGFwcGVuZCBhbiBhbmNlc3RvciBvciBzZWxmIjoiQ2Fubm90IHByZXBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKHRoaXMuX2lzQW5jZXN0b3IoYVtkXSkpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSLG5hbWU6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsbWVzc2FnZTpjfTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliP3RoaXMuY2hpbGRyZW4ucHVzaChhW2RdKTp0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYVtkXSk7dGhpcy5fcmVwYXJlbnQoYSksdGhpcy5fcmVidWlsZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wdXRDaGlsZChhcmd1bWVudHMsITApfSxwcmVwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCExKX0sZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bMF06bnVsbH0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEuY2xvbmVUaW1pbmdJbnB1dCh0aGlzLl90aW1pbmdJbnB1dCksYz1bXSxkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bZF0uY2xvbmUoKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHcm91cEVmZmVjdD9uZXcgR3JvdXBFZmZlY3QoYyxiKTpuZXcgU2VxdWVuY2VFZmZlY3QoYyxiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX0sd2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YSs9ZChiKX0pLE1hdGgubWF4KGEsMCl9fSksd2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YT1NYXRoLm1heChhLGQoYikpfSksYX19KSxiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihjKXt2YXIgZCxlPW51bGwsZj1mdW5jdGlvbihiKXt2YXIgYz1kLl93cmFwcGVyO2lmKGMmJiJwZW5kaW5nIiE9Yy5wbGF5U3RhdGUmJmMuZWZmZWN0KXJldHVybiBudWxsPT1iP3ZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCk6MD09YiYmYy5wbGF5YmFja1JhdGU8MCYmKGV8fChlPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy5lZmZlY3QudGltaW5nKSksYj1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZSksLTEsZSksaXNOYU4oYil8fG51bGw9PWIpPyhjLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5jdXJyZW50VGltZT0tMX0pLHZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCkpOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGEsYyl9KCk7KCgpPT57dmFyIGQxZT1PYmplY3QuY3JlYXRlO3ZhciBCTT1PYmplY3QuZGVmaW5lUHJvcGVydHksbTFlPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLGcxZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLF8xZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyx5MWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsaGR0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsdjFlPU9iamVjdC5nZXRQcm90b3R5cGVPZixwZHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx4MWU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgRUk9TWF0aC5wb3csZmR0PShlLHQscik9PnQgaW4gZT9CTShlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTplW3RdPXIsS2w9KGUsdCk9Pntmb3IodmFyIHIgaW4gdHx8KHQ9e30pKXBkdC5jYWxsKHQscikmJmZkdChlLHIsdFtyXSk7aWYoaGR0KWZvcih2YXIgciBvZiBoZHQodCkpeDFlLmNhbGwodCxyKSYmZmR0KGUscix0W3JdKTtyZXR1cm4gZX0sTXg9KGUsdCk9Pm0xZShlLF8xZSh0KSk7dmFyIEV4PShlPT50eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0eXBlb2YgUHJveHkhPSJ1bmRlZmluZWQiP25ldyBQcm94eShlLHtnZXQ6KHQscik9Pih0eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0KVtyXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlIT0idW5kZWZpbmVkIilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgbmV3IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KTt2YXIgTT0oZSx0KT0+KCk9PihlJiYodD1lKGU9MCkpLHQpO3ZhciBIPShlLHQpPT4oKT0+KHR8fGUoKHQ9e2V4cG9ydHM6e319KS5leHBvcnRzLHQpLHQuZXhwb3J0cyksS3M9KGUsdCk9Pntmb3IodmFyIHIgaW4gdClCTShlLHIse2dldDp0W3JdLGVudW1lcmFibGU6ITB9KX0sZGR0PShlLHQscixuKT0+e2lmKHQmJnR5cGVvZiB0PT0ib2JqZWN0Inx8dHlwZW9mIHQ9PSJmdW5jdGlvbiIpZm9yKGxldCBpIG9mIHkxZSh0KSkhcGR0LmNhbGwoZSxpKSYmaSE9PXImJkJNKGUsaSx7Z2V0OigpPT50W2ldLGVudW1lcmFibGU6IShuPWcxZSh0LGkpKXx8bi5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9O3ZhciBFZT0oZSx0LHIpPT4ocj1lIT1udWxsP2QxZSh2MWUoZSkpOnt9LGRkdCh0fHwhZXx8IWUuX19lc01vZHVsZT9CTShyLCJkZWZhdWx0Iix7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwfSk6cixlKSksVXQ9ZT0+ZGR0KEJNKHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKTt2YXIgUmk9KGUsdCxyKT0+bmV3IFByb21pc2UoKG4saSk9Pnt2YXIgbz1sPT57dHJ5e3Moci5uZXh0KGwpKX1jYXRjaChjKXtpKGMpfX0sYT1sPT57dHJ5e3Moci50aHJvdyhsKSl9Y2F0Y2goYyl7aShjKX19LHM9bD0+bC5kb25lP24obC52YWx1ZSk6UHJvbWlzZS5yZXNvbHZlKGwudmFsdWUpLnRoZW4obyxhKTtzKChyPXIuYXBwbHkoZSx0KSkubmV4dCgpKX0pO3ZhciBPZHQ9SCgobF9yLEFJKT0+e3ZhciBtZHQsZ2R0LF9kdCx5ZHQsdmR0LHhkdCxiZHQsd2R0LFNkdCxUSSx1RyxNZHQsRWR0LFRkdCxUeCxDZHQsQWR0LFBkdCxJZHQsTGR0LGtkdCxSZHQsTmR0LERkdCxDSTsoZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIGdsb2JhbD09Im9iamVjdCI/Z2xvYmFsOnR5cGVvZiBzZWxmPT0ib2JqZWN0Ij9zZWxmOnR5cGVvZiB0aGlzPT0ib2JqZWN0Ij90aGlzOnt9O3R5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKCJ0c2xpYiIsWyJleHBvcnRzIl0sZnVuY3Rpb24obil7ZShyKHQscihuKSkpfSk6dHlwZW9mIEFJPT0ib2JqZWN0IiYmdHlwZW9mIEFJLmV4cG9ydHM9PSJvYmplY3QiP2Uocih0LHIoQUkuZXhwb3J0cykpKTplKHIodCkpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbiE9PXQmJih0eXBlb2YgT2JqZWN0LmNyZWF0ZT09ImZ1bmN0aW9uIj9PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk6bi5fX2VzTW9kdWxlPSEwKSxmdW5jdGlvbihvLGEpe3JldHVybiBuW29dPWk/aShvLGEpOmF9fX0pKGZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihuLGkpe24uX19wcm90b19fPWl9fHxmdW5jdGlvbihuLGkpe2Zvcih2YXIgbyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG8pJiYobltvXT1pW29dKX07bWR0PWZ1bmN0aW9uKG4saSl7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiImJmkhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7dChuLGkpO2Z1bmN0aW9uIG8oKXt0aGlzLmNvbnN0cnVjdG9yPW59bi5wcm90b3R5cGU9aT09PW51bGw/T2JqZWN0LmNyZWF0ZShpKTooby5wcm90b3R5cGU9aS5wcm90b3R5cGUsbmV3IG8pfSxnZHQ9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24obil7Zm9yKHZhciBpLG89MSxhPWFyZ3VtZW50cy5sZW5ndGg7bzxhO28rKyl7aT1hcmd1bWVudHNbb107Zm9yKHZhciBzIGluIGkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGkscykmJihuW3NdPWlbc10pfXJldHVybiBufSxfZHQ9ZnVuY3Rpb24obixpKXt2YXIgbz17fTtmb3IodmFyIGEgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixhKSYmaS5pbmRleE9mKGEpPDAmJihvW2FdPW5bYV0pO2lmKG4hPW51bGwmJnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iKWZvcih2YXIgcz0wLGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKTtzPGEubGVuZ3RoO3MrKylpLmluZGV4T2YoYVtzXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG4sYVtzXSkmJihvW2Fbc11dPW5bYVtzXV0pO3JldHVybiBvfSx5ZHQ9ZnVuY3Rpb24obixpLG8sYSl7dmFyIHM9YXJndW1lbnRzLmxlbmd0aCxsPXM8Mz9pOmE9PT1udWxsP2E9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpLG8pOmEsYztpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0LmRlY29yYXRlPT0iZnVuY3Rpb24iKWw9UmVmbGVjdC5kZWNvcmF0ZShuLGksbyxhKTtlbHNlIGZvcih2YXIgdT1uLmxlbmd0aC0xO3U+PTA7dS0tKShjPW5bdV0pJiYobD0oczwzP2MobCk6cz4zP2MoaSxvLGwpOmMoaSxvKSl8fGwpO3JldHVybiBzPjMmJmwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLG8sbCksbH0sdmR0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7aShvLGEsbil9fSx4ZHQ9ZnVuY3Rpb24obixpKXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG4saSl9LGJkdD1mdW5jdGlvbihuLGksbyxhKXtmdW5jdGlvbiBzKGwpe3JldHVybiBsIGluc3RhbmNlb2Ygbz9sOm5ldyBvKGZ1bmN0aW9uKGMpe2MobCl9KX1yZXR1cm4gbmV3KG98fChvPVByb21pc2UpKShmdW5jdGlvbihsLGMpe2Z1bmN0aW9uIHUocCl7dHJ5e2YoYS5uZXh0KHApKX1jYXRjaChkKXtjKGQpfX1mdW5jdGlvbiBoKHApe3RyeXtmKGEudGhyb3cocCkpfWNhdGNoKGQpe2MoZCl9fWZ1bmN0aW9uIGYocCl7cC5kb25lP2wocC52YWx1ZSk6cyhwLnZhbHVlKS50aGVuKHUsaCl9ZigoYT1hLmFwcGx5KG4saXx8W10pKS5uZXh0KCkpfSl9LHdkdD1mdW5jdGlvbihuLGkpe3ZhciBvPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihsWzBdJjEpdGhyb3cgbFsxXTtyZXR1cm4gbFsxXX0sdHJ5czpbXSxvcHM6W119LGEscyxsLGM7cmV0dXJuIGM9e25leHQ6dSgwKSx0aHJvdzp1KDEpLHJldHVybjp1KDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoY1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGZ1bmN0aW9uKHApe3JldHVybiBoKFtmLHBdKX19ZnVuY3Rpb24gaChmKXtpZihhKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2MmJihjPTAsZlswXSYmKG89MCkpLG87KXRyeXtpZihhPTEscyYmKGw9ZlswXSYyP3MucmV0dXJuOmZbMF0/cy50aHJvd3x8KChsPXMucmV0dXJuKSYmbC5jYWxsKHMpLDApOnMubmV4dCkmJiEobD1sLmNhbGwocyxmWzFdKSkuZG9uZSlyZXR1cm4gbDtzd2l0Y2gocz0wLGwmJihmPVtmWzBdJjIsbC52YWx1ZV0pLGZbMF0pe2Nhc2UgMDpjYXNlIDE6bD1mO2JyZWFrO2Nhc2UgNDpyZXR1cm4gby5sYWJlbCsrLHt2YWx1ZTpmWzFdLGRvbmU6ITF9O2Nhc2UgNTpvLmxhYmVsKysscz1mWzFdLGY9WzBdO2NvbnRpbnVlO2Nhc2UgNzpmPW8ub3BzLnBvcCgpLG8udHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKGw9by50cnlzLCEobD1sLmxlbmd0aD4wJiZsW2wubGVuZ3RoLTFdKSYmKGZbMF09PT02fHxmWzBdPT09Mikpe289MDtjb250aW51ZX1pZihmWzBdPT09MyYmKCFsfHxmWzFdPmxbMF0mJmZbMV08bFszXSkpe28ubGFiZWw9ZlsxXTticmVha31pZihmWzBdPT09NiYmby5sYWJlbDxsWzFdKXtvLmxhYmVsPWxbMV0sbD1mO2JyZWFrfWlmKGwmJm8ubGFiZWw8bFsyXSl7by5sYWJlbD1sWzJdLG8ub3BzLnB1c2goZik7YnJlYWt9bFsyXSYmby5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlfWY9aS5jYWxsKG4sbyl9Y2F0Y2gocCl7Zj1bNixwXSxzPTB9ZmluYWxseXthPWw9MH1pZihmWzBdJjUpdGhyb3cgZlsxXTtyZXR1cm57dmFsdWU6ZlswXT9mWzFdOnZvaWQgMCxkb25lOiEwfX19LFNkdD1mdW5jdGlvbihuLGkpe2Zvcih2YXIgbyBpbiBuKW8hPT0iZGVmYXVsdCImJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmQ0koaSxuLG8pfSxDST1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG4saSxvLGEpe2E9PT12b2lkIDAmJihhPW8pO3ZhciBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaSxvKTsoIXN8fCgiZ2V0ImluIHM/IWkuX19lc01vZHVsZTpzLndyaXRhYmxlfHxzLmNvbmZpZ3VyYWJsZSkpJiYocz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaVtvXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixhLHMpfTpmdW5jdGlvbihuLGksbyxhKXthPT09dm9pZCAwJiYoYT1vKSxuW2FdPWlbb119LFRJPWZ1bmN0aW9uKG4pe3ZhciBpPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5pdGVyYXRvcixvPWkmJm5baV0sYT0wO2lmKG8pcmV0dXJuIG8uY2FsbChuKTtpZihuJiZ0eXBlb2Ygbi5sZW5ndGg9PSJudW1iZXIiKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG4mJmE+PW4ubGVuZ3RoJiYobj12b2lkIDApLHt2YWx1ZTpuJiZuW2ErK10sZG9uZTohbn19fTt0aHJvdyBuZXcgVHlwZUVycm9yKGk/Ik9iamVjdCBpcyBub3QgaXRlcmFibGUuIjoiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpfSx1Rz1mdW5jdGlvbihuLGkpe3ZhciBvPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJm5bU3ltYm9sLml0ZXJhdG9yXTtpZighbylyZXR1cm4gbjt2YXIgYT1vLmNhbGwobikscyxsPVtdLGM7dHJ5e2Zvcig7KGk9PT12b2lkIDB8fGktLSA+MCkmJiEocz1hLm5leHQoKSkuZG9uZTspbC5wdXNoKHMudmFsdWUpfWNhdGNoKHUpe2M9e2Vycm9yOnV9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihvPWEucmV0dXJuKSYmby5jYWxsKGEpfWZpbmFsbHl7aWYoYyl0aHJvdyBjLmVycm9yfX1yZXR1cm4gbH0sTWR0PWZ1bmN0aW9uKCl7Zm9yKHZhciBuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW49bi5jb25jYXQodUcoYXJndW1lbnRzW2ldKSk7cmV0dXJuIG59LEVkdD1mdW5jdGlvbigpe2Zvcih2YXIgbj0wLGk9MCxvPWFyZ3VtZW50cy5sZW5ndGg7aTxvO2krKyluKz1hcmd1bWVudHNbaV0ubGVuZ3RoO2Zvcih2YXIgYT1BcnJheShuKSxzPTAsaT0wO2k8bztpKyspZm9yKHZhciBsPWFyZ3VtZW50c1tpXSxjPTAsdT1sLmxlbmd0aDtjPHU7YysrLHMrKylhW3NdPWxbY107cmV0dXJuIGF9LFRkdD1mdW5jdGlvbihuLGksbyl7aWYob3x8YXJndW1lbnRzLmxlbmd0aD09PTIpZm9yKHZhciBhPTAscz1pLmxlbmd0aCxsO2E8czthKyspKGx8fCEoYSBpbiBpKSkmJihsfHwobD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpLDAsYSkpLGxbYV09aVthXSk7cmV0dXJuIG4uY29uY2F0KGx8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGkpKX0sVHg9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBUeD8odGhpcy52PW4sdGhpcyk6bmV3IFR4KG4pfSxDZHQ9ZnVuY3Rpb24obixpLG8pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgYT1vLmFwcGx5KG4saXx8W10pLHMsbD1bXTtyZXR1cm4gcz17fSxjKCJuZXh0IiksYygidGhyb3ciKSxjKCJyZXR1cm4iKSxzW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxzO2Z1bmN0aW9uIGMoZyl7YVtnXSYmKHNbZ109ZnVuY3Rpb24oXyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHkseCl7bC5wdXNoKFtnLF8seSx4XSk+MXx8dShnLF8pfSl9KX1mdW5jdGlvbiB1KGcsXyl7dHJ5e2goYVtnXShfKSl9Y2F0Y2goeSl7ZChsWzBdWzNdLHkpfX1mdW5jdGlvbiBoKGcpe2cudmFsdWUgaW5zdGFuY2VvZiBUeD9Qcm9taXNlLnJlc29sdmUoZy52YWx1ZS52KS50aGVuKGYscCk6ZChsWzBdWzJdLGcpfWZ1bmN0aW9uIGYoZyl7dSgibmV4dCIsZyl9ZnVuY3Rpb24gcChnKXt1KCJ0aHJvdyIsZyl9ZnVuY3Rpb24gZChnLF8pe2coXyksbC5zaGlmdCgpLGwubGVuZ3RoJiZ1KGxbMF1bMF0sbFswXVsxXSl9fSxBZHQ9ZnVuY3Rpb24obil7dmFyIGksbztyZXR1cm4gaT17fSxhKCJuZXh0IiksYSgidGhyb3ciLGZ1bmN0aW9uKHMpe3Rocm93IHN9KSxhKCJyZXR1cm4iKSxpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKHMsbCl7aVtzXT1uW3NdP2Z1bmN0aW9uKGMpe3JldHVybihvPSFvKT97dmFsdWU6VHgobltzXShjKSksZG9uZTpzPT09InJldHVybiJ9Omw/bChjKTpjfTpsfX0sUGR0PWZ1bmN0aW9uKG4pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgaT1uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSxvO3JldHVybiBpP2kuY2FsbChuKToobj10eXBlb2YgVEk9PSJmdW5jdGlvbiI/VEkobik6bltTeW1ib2wuaXRlcmF0b3JdKCksbz17fSxhKCJuZXh0IiksYSgidGhyb3ciKSxhKCJyZXR1cm4iKSxvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvKTtmdW5jdGlvbiBhKGwpe29bbF09bltsXSYmZnVuY3Rpb24oYyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHUsaCl7Yz1uW2xdKGMpLHModSxoLGMuZG9uZSxjLnZhbHVlKX0pfX1mdW5jdGlvbiBzKGwsYyx1LGgpe1Byb21pc2UucmVzb2x2ZShoKS50aGVuKGZ1bmN0aW9uKGYpe2woe3ZhbHVlOmYsZG9uZTp1fSl9LGMpfX0sSWR0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkobiwicmF3Iix7dmFsdWU6aX0pOm4ucmF3PWksbn07dmFyIHI9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihuLGkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTppfSl9OmZ1bmN0aW9uKG4saSl7bi5kZWZhdWx0PWl9O0xkdD1mdW5jdGlvbihuKXtpZihuJiZuLl9fZXNNb2R1bGUpcmV0dXJuIG47dmFyIGk9e307aWYobiE9bnVsbClmb3IodmFyIG8gaW4gbilvIT09ImRlZmF1bHQiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixvKSYmQ0koaSxuLG8pO3JldHVybiByKGksbiksaX0sa2R0PWZ1bmN0aW9uKG4pe3JldHVybiBuJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufX0sUmR0PWZ1bmN0aW9uKG4saSxvLGEpe2lmKG89PT0iYSImJiFhKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpO2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iP24hPT1pfHwhYTohaS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIG89PT0ibSI/YTpvPT09ImEiP2EuY2FsbChuKTphP2EudmFsdWU6aS5nZXQobil9LE5kdD1mdW5jdGlvbihuLGksbyxhLHMpe2lmKGE9PT0ibSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlIik7aWYoYT09PSJhIiYmIXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyIik7aWYodHlwZW9mIGk9PSJmdW5jdGlvbiI/biE9PWl8fCFzOiFpLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiBhPT09ImEiP3MuY2FsbChuLG8pOnM/cy52YWx1ZT1vOmkuc2V0KG4sbyksb30sRGR0PWZ1bmN0aW9uKG4saSl7aWYoaT09PW51bGx8fHR5cGVvZiBpIT0ib2JqZWN0IiYmdHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiI/aT09PW46bi5oYXMoaSl9LGUoIl9fZXh0ZW5kcyIsbWR0KSxlKCJfX2Fzc2lnbiIsZ2R0KSxlKCJfX3Jlc3QiLF9kdCksZSgiX19kZWNvcmF0ZSIseWR0KSxlKCJfX3BhcmFtIix2ZHQpLGUoIl9fbWV0YWRhdGEiLHhkdCksZSgiX19hd2FpdGVyIixiZHQpLGUoIl9fZ2VuZXJhdG9yIix3ZHQpLGUoIl9fZXhwb3J0U3RhciIsU2R0KSxlKCJfX2NyZWF0ZUJpbmRpbmciLENJKSxlKCJfX3ZhbHVlcyIsVEkpLGUoIl9fcmVhZCIsdUcpLGUoIl9fc3ByZWFkIixNZHQpLGUoIl9fc3ByZWFkQXJyYXlzIixFZHQpLGUoIl9fc3ByZWFkQXJyYXkiLFRkdCksZSgiX19hd2FpdCIsVHgpLGUoIl9fYXN5bmNHZW5lcmF0b3IiLENkdCksZSgiX19hc3luY0RlbGVnYXRvciIsQWR0KSxlKCJfX2FzeW5jVmFsdWVzIixQZHQpLGUoIl9fbWFrZVRlbXBsYXRlT2JqZWN0IixJZHQpLGUoIl9faW1wb3J0U3RhciIsTGR0KSxlKCJfX2ltcG9ydERlZmF1bHQiLGtkdCksZSgiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsUmR0KSxlKCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IixOZHQpLGUoIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsRGR0KX0pfSk7dmFyIE9lPUgoKFJ4LCRNKT0+eyhmdW5jdGlvbigpe3ZhciBlLHQ9IjQuMTcuMjEiLHI9MjAwLG49IlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLiIsaT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsbz0iSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAiLGE9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHM9NTAwLGw9Il9fbG9kYXNoX3BsYWNlaG9sZGVyX18iLGM9MSx1PTIsaD00LGY9MSxwPTIsZD0xLGc9MixfPTQseT04LHg9MTYsYj0zMixTPTY0LEM9MTI4LFA9MjU2LGs9NTEyLE89MzAsRD0iLi4uIixCPTgwMCxJPTE2LEw9MSxSPTIsRj0zLHo9MS8wLFU9OTAwNzE5OTI1NDc0MDk5MSxXPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixaPTAvMCxydD00Mjk0OTY3Mjk1LG90PXJ0LTEsc3Q9cnQ+Pj4xLFN0PVtbImFyeSIsQ10sWyJiaW5kIixkXSxbImJpbmRLZXkiLGddLFsiY3VycnkiLHldLFsiY3VycnlSaWdodCIseF0sWyJmbGlwIixrXSxbInBhcnRpYWwiLGJdLFsicGFydGlhbFJpZ2h0IixTXSxbInJlYXJnIixQXV0sYnQ9IltvYmplY3QgQXJndW1lbnRzXSIsTXQ9IltvYmplY3QgQXJyYXldIixsdD0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsS3Q9IltvYmplY3QgQm9vbGVhbl0iLF90PSJbb2JqZWN0IERhdGVdIixjdD0iW29iamVjdCBET01FeGNlcHRpb25dIixYPSJbb2JqZWN0IEVycm9yXSIsZXQ9IltvYmplY3QgRnVuY3Rpb25dIixkdD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLHE9IltvYmplY3QgTWFwXSIscHQ9IltvYmplY3QgTnVtYmVyXSIsaHQ9IltvYmplY3QgTnVsbF0iLHd0PSJbb2JqZWN0IE9iamVjdF0iLGt0PSJbb2JqZWN0IFByb21pc2VdIixpZT0iW29iamVjdCBQcm94eV0iLGVlPSJbb2JqZWN0IFJlZ0V4cF0iLExlPSJbb2JqZWN0IFNldF0iLGFyPSJbb2JqZWN0IFN0cmluZ10iLGZyPSJbb2JqZWN0IFN5bWJvbF0iLHR0PSJbb2JqZWN0IFVuZGVmaW5lZF0iLCQ9IltvYmplY3QgV2Vha01hcF0iLEl0PSJbb2JqZWN0IFdlYWtTZXRdIiwkdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGhlPSJbb2JqZWN0IERhdGFWaWV3XSIsVHQ9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsYmU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsbnQ9IltvYmplY3QgSW50OEFycmF5XSIsQ3Q9IltvYmplY3QgSW50MTZBcnJheV0iLFd0PSJbb2JqZWN0IEludDMyQXJyYXldIixmZT0iW29iamVjdCBVaW50OEFycmF5XSIsYXQ9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixzZT0iW29iamVjdCBVaW50MTZBcnJheV0iLFF0PSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ2U9L1xiX19wIFwrPSAnJzsvZyxQdD0vXGIoX19wIFwrPSkgJycgXCsvZyxOdD0vKF9fZVwoLio/XCl8XGJfX3RcKSkgXCtcbicnOy9nLHplPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx5bj0vWyY8PiInXS9nLFdpPVJlZ0V4cCh6ZS5zb3VyY2UpLEFyPVJlZ0V4cCh5bi5zb3VyY2UpLFBhPS88JS0oW1xzXFNdKz8pJT4vZyxobz0vPCUoW1xzXFNdKz8pJT4vZyxJYT0vPCU9KFtcc1xTXSs/KSU+L2csbHg9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sY209L15cdyokLyxKMD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxjbj0vW1xcXiQuKis/KClbXF17fXxdL2csY3g9UmVnRXhwKGNuLnNvdXJjZSkscnA9L15ccysvLEs9L1xzLyxndD0vXHsoPzpcblwvXCogXFt3cmFwcGVkIHdpdGggLitcXSBcKlwvKT9cbj8vLEV0PS9ce1xuXC9cKiBcW3dyYXBwZWQgd2l0aCAoLispXF0gXCovLHh0PS8sPyAmIC8sRnQ9L1teXHgwMC1ceDJmXHgzYS1ceDQwXHg1Yi1ceDYwXHg3Yi1ceDdmXSsvZyxWZT0vWygpPSx7fVxbXF1cL1xzXS8sVWU9L1xcKFxcKT8vZyx0cj0vXCRceyhbXlxcfV0qKD86XFwuW15cXH1dKikqKVx9L2csS2U9L1x3KiQvLFhyPS9eWy0rXTB4WzAtOWEtZl0rJC9pLF9yPS9eMGJbMDFdKyQvaSxQcj0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxYbj0vXjBvWzAtN10rJC9pLG5wPS9eKD86MHxbMS05XVxkKikkLyx1bT0vW1x4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHhmZlx1MDEwMC1cdTAxN2ZdL2csbXI9LygkXikvLEZsPS9bJ1xuXHJcdTIwMjhcdTIwMjlcXF0vZywkbj0iXFx1ZDgwMC1cXHVkZmZmIixCbD0iXFx1MDMwMC1cXHUwMzZmIix1eD0iXFx1ZmUyMC1cXHVmZTJmIixIbD0iXFx1MjBkMC1cXHUyMGZmIixWbD1CbCt1eCtIbCxZaT0iXFx1MjcwMC1cXHUyN2JmIixobT0iYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZiIscXM9IlxceGFjXFx4YjFcXHhkN1xceGY3IixocGU9IlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmIixmcGU9IlxcdTIwMDAtXFx1MjA2ZiIscHBlPSIgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDAiLHFodD0iQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZSIsR2h0PSJcXHVmZTBlXFx1ZmUwZiIsV2h0PXFzK2hwZStmcGUrcHBlLHRxPSJbJ1x1MjAxOV0iLGRwZT0iWyIrJG4rIl0iLFlodD0iWyIrV2h0KyJdIixCNj0iWyIrVmwrIl0iLGpodD0iXFxkKyIsbXBlPSJbIitZaSsiXSIsWGh0PSJbIitobSsiXSIsJGh0PSJbXiIrJG4rV2h0K2podCtZaStobStxaHQrIl0iLGVxPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLGdwZT0iKD86IitCNisifCIrZXErIikiLEtodD0iW14iKyRuKyJdIixycT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsbnE9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGh4PSJbIitxaHQrIl0iLFpodD0iXFx1MjAwZCIsSmh0PSIoPzoiK1hodCsifCIrJGh0KyIpIixfcGU9Iig/OiIraHgrInwiKyRodCsiKSIsUWh0PSIoPzoiK3RxKyIoPzpkfGxsfG18cmV8c3x0fHZlKSk/Iix0ZnQ9Iig/OiIrdHErIig/OkR8TEx8TXxSRXxTfFR8VkUpKT8iLGVmdD1ncGUrIj8iLHJmdD0iWyIrR2h0KyJdPyIseXBlPSIoPzoiK1podCsiKD86IitbS2h0LHJxLG5xXS5qb2luKCJ8IikrIikiK3JmdCtlZnQrIikqIix2cGU9IlxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXGR0aCkoPz1cXGJ8W0EtWl9dKSIseHBlPSJcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxkVEgpKD89XFxifFthLXpfXSkiLG5mdD1yZnQrZWZ0K3lwZSxicGU9Iig/OiIrW21wZSxycSxucV0uam9pbigifCIpKyIpIituZnQsd3BlPSIoPzoiK1tLaHQrQjYrIj8iLEI2LHJxLG5xLGRwZV0uam9pbigifCIpKyIpIixTcGU9UmVnRXhwKHRxLCJnIiksTXBlPVJlZ0V4cChCNiwiZyIpLGlxPVJlZ0V4cChlcSsiKD89IitlcSsiKXwiK3dwZStuZnQsImciKSxFcGU9UmVnRXhwKFtoeCsiPyIrWGh0KyIrIitRaHQrIig/PSIrW1lodCxoeCwiJCJdLmpvaW4oInwiKSsiKSIsX3BlKyIrIit0ZnQrIig/PSIrW1lodCxoeCtKaHQsIiQiXS5qb2luKCJ8IikrIikiLGh4KyI/IitKaHQrIisiK1FodCxoeCsiKyIrdGZ0LHhwZSx2cGUsamh0LGJwZV0uam9pbigifCIpLCJnIiksVHBlPVJlZ0V4cCgiWyIrWmh0KyRuK1ZsK0dodCsiXSIpLENwZT0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxBcGU9WyJBcnJheSIsIkJ1ZmZlciIsIkRhdGFWaWV3IiwiRGF0ZSIsIkVycm9yIiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiRnVuY3Rpb24iLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIk1hcCIsIk1hdGgiLCJPYmplY3QiLCJQcm9taXNlIiwiUmVnRXhwIiwiU2V0IiwiU3RyaW5nIiwiU3ltYm9sIiwiVHlwZUVycm9yIiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIldlYWtNYXAiLCJfIiwiY2xlYXJUaW1lb3V0IiwiaXNGaW5pdGUiLCJwYXJzZUludCIsInNldFRpbWVvdXQiXSxQcGU9LTEsUm49e307Um5bVHRdPVJuW2JlXT1SbltudF09Um5bQ3RdPVJuW1d0XT1SbltmZV09Um5bYXRdPVJuW3NlXT1SbltRdF09ITAsUm5bYnRdPVJuW010XT1SblskdF09Um5bS3RdPVJuW2hlXT1SbltfdF09Um5bWF09Um5bZXRdPVJuW3FdPVJuW3B0XT1Sblt3dF09Um5bZWVdPVJuW0xlXT1Sblthcl09Um5bJF09ITE7dmFyIFRuPXt9O1RuW2J0XT1UbltNdF09VG5bJHRdPVRuW2hlXT1UbltLdF09VG5bX3RdPVRuW1R0XT1UbltiZV09VG5bbnRdPVRuW0N0XT1UbltXdF09VG5bcV09VG5bcHRdPVRuW3d0XT1UbltlZV09VG5bTGVdPVRuW2FyXT1Ubltmcl09VG5bZmVdPVRuW2F0XT1UbltzZV09VG5bUXRdPSEwLFRuW1hdPVRuW2V0XT1UblskXT0hMTt2YXIgSXBlPXtcdTAwQzA6IkEiLFx1MDBDMToiQSIsXHUwMEMyOiJBIixcdTAwQzM6IkEiLFx1MDBDNDoiQSIsXHUwMEM1OiJBIixcdTAwRTA6ImEiLFx1MDBFMToiYSIsXHUwMEUyOiJhIixcdTAwRTM6ImEiLFx1MDBFNDoiYSIsXHUwMEU1OiJhIixcdTAwQzc6IkMiLFx1MDBFNzoiYyIsXHUwMEQwOiJEIixcdTAwRjA6ImQiLFx1MDBDODoiRSIsXHUwMEM5OiJFIixcdTAwQ0E6IkUiLFx1MDBDQjoiRSIsXHUwMEU4OiJlIixcdTAwRTk6ImUiLFx1MDBFQToiZSIsXHUwMEVCOiJlIixcdTAwQ0M6IkkiLFx1MDBDRDoiSSIsXHUwMENFOiJJIixcdTAwQ0Y6IkkiLFx1MDBFQzoiaSIsXHUwMEVEOiJpIixcdTAwRUU6ImkiLFx1MDBFRjoiaSIsXHUwMEQxOiJOIixcdTAwRjE6Im4iLFx1MDBEMjoiTyIsXHUwMEQzOiJPIixcdTAwRDQ6Ik8iLFx1MDBENToiTyIsXHUwMEQ2OiJPIixcdTAwRDg6Ik8iLFx1MDBGMjoibyIsXHUwMEYzOiJvIixcdTAwRjQ6Im8iLFx1MDBGNToibyIsXHUwMEY2OiJvIixcdTAwRjg6Im8iLFx1MDBEOToiVSIsXHUwMERBOiJVIixcdTAwREI6IlUiLFx1MDBEQzoiVSIsXHUwMEY5OiJ1IixcdTAwRkE6InUiLFx1MDBGQjoidSIsXHUwMEZDOiJ1IixcdTAwREQ6IlkiLFx1MDBGRDoieSIsXHUwMEZGOiJ5IixcdTAwQzY6IkFlIixcdTAwRTY6ImFlIixcdTAwREU6IlRoIixcdTAwRkU6InRoIixcdTAwREY6InNzIixcdTAxMDA6IkEiLFx1MDEwMjoiQSIsXHUwMTA0OiJBIixcdTAxMDE6ImEiLFx1MDEwMzoiYSIsXHUwMTA1OiJhIixcdTAxMDY6IkMiLFx1MDEwODoiQyIsXHUwMTBBOiJDIixcdTAxMEM6IkMiLFx1MDEwNzoiYyIsXHUwMTA5OiJjIixcdTAxMEI6ImMiLFx1MDEwRDoiYyIsXHUwMTBFOiJEIixcdTAxMTA6IkQiLFx1MDEwRjoiZCIsXHUwMTExOiJkIixcdTAxMTI6IkUiLFx1MDExNDoiRSIsXHUwMTE2OiJFIixcdTAxMTg6IkUiLFx1MDExQToiRSIsXHUwMTEzOiJlIixcdTAxMTU6ImUiLFx1MDExNzoiZSIsXHUwMTE5OiJlIixcdTAxMUI6ImUiLFx1MDExQzoiRyIsXHUwMTFFOiJHIixcdTAxMjA6IkciLFx1MDEyMjoiRyIsXHUwMTFEOiJnIixcdTAxMUY6ImciLFx1MDEyMToiZyIsXHUwMTIzOiJnIixcdTAxMjQ6IkgiLFx1MDEyNjoiSCIsXHUwMTI1OiJoIixcdTAxMjc6ImgiLFx1MDEyODoiSSIsXHUwMTJBOiJJIixcdTAxMkM6IkkiLFx1MDEyRToiSSIsXHUwMTMwOiJJIixcdTAxMjk6ImkiLFx1MDEyQjoiaSIsXHUwMTJEOiJpIixcdTAxMkY6ImkiLFx1MDEzMToiaSIsXHUwMTM0OiJKIixcdTAxMzU6ImoiLFx1MDEzNjoiSyIsXHUwMTM3OiJrIixcdTAxMzg6ImsiLFx1MDEzOToiTCIsXHUwMTNCOiJMIixcdTAxM0Q6IkwiLFx1MDEzRjoiTCIsXHUwMTQxOiJMIixcdTAxM0E6ImwiLFx1MDEzQzoibCIsXHUwMTNFOiJsIixcdTAxNDA6ImwiLFx1MDE0MjoibCIsXHUwMTQzOiJOIixcdTAxNDU6Ik4iLFx1MDE0NzoiTiIsXHUwMTRBOiJOIixcdTAxNDQ6Im4iLFx1MDE0NjoibiIsXHUwMTQ4OiJuIixcdTAxNEI6Im4iLFx1MDE0QzoiTyIsXHUwMTRFOiJPIixcdTAxNTA6Ik8iLFx1MDE0RDoibyIsXHUwMTRGOiJvIixcdTAxNTE6Im8iLFx1MDE1NDoiUiIsXHUwMTU2OiJSIixcdTAxNTg6IlIiLFx1MDE1NToiciIsXHUwMTU3OiJyIixcdTAxNTk6InIiLFx1MDE1QToiUyIsXHUwMTVDOiJTIixcdTAxNUU6IlMiLFx1MDE2MDoiUyIsXHUwMTVCOiJzIixcdTAxNUQ6InMiLFx1MDE1RjoicyIsXHUwMTYxOiJzIixcdTAxNjI6IlQiLFx1MDE2NDoiVCIsXHUwMTY2OiJUIixcdTAxNjM6InQiLFx1MDE2NToidCIsXHUwMTY3OiJ0IixcdTAxNjg6IlUiLFx1MDE2QToiVSIsXHUwMTZDOiJVIixcdTAxNkU6IlUiLFx1MDE3MDoiVSIsXHUwMTcyOiJVIixcdTAxNjk6InUiLFx1MDE2QjoidSIsXHUwMTZEOiJ1IixcdTAxNkY6InUiLFx1MDE3MToidSIsXHUwMTczOiJ1IixcdTAxNzQ6IlciLFx1MDE3NToidyIsXHUwMTc2OiJZIixcdTAxNzc6InkiLFx1MDE3ODoiWSIsXHUwMTc5OiJaIixcdTAxN0I6IloiLFx1MDE3RDoiWiIsXHUwMTdBOiJ6IixcdTAxN0M6InoiLFx1MDE3RToieiIsXHUwMTMyOiJJSiIsXHUwMTMzOiJpaiIsXHUwMTUyOiJPZSIsXHUwMTUzOiJvZSIsXHUwMTQ5OiInbiIsXHUwMTdGOiJzIn0sTHBlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxrcGU9eyImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+IiwiJnF1b3Q7IjonIicsIiYjMzk7IjoiJyJ9LFJwZT17IlxcIjoiXFwiLCInIjoiJyIsIlxuIjoibiIsIlxyIjoiciIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxOcGU9cGFyc2VGbG9hdCxEcGU9cGFyc2VJbnQsaWZ0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCxPcGU9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmbz1pZnR8fE9wZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxvcT10eXBlb2YgUng9PSJvYmplY3QiJiZSeCYmIVJ4Lm5vZGVUeXBlJiZSeCxRMD1vcSYmdHlwZW9mICRNPT0ib2JqZWN0IiYmJE0mJiEkTS5ub2RlVHlwZSYmJE0sb2Z0PVEwJiZRMC5leHBvcnRzPT09b3EsYXE9b2Z0JiZpZnQucHJvY2VzcyxVbD1mdW5jdGlvbigpe3RyeXt2YXIgdXQ9UTAmJlEwLnJlcXVpcmUmJlEwLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gdXR8fGFxJiZhcS5iaW5kaW5nJiZhcS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2goQXQpe319KCksYWZ0PVVsJiZVbC5pc0FycmF5QnVmZmVyLHNmdD1VbCYmVWwuaXNEYXRlLGxmdD1VbCYmVWwuaXNNYXAsY2Z0PVVsJiZVbC5pc1JlZ0V4cCx1ZnQ9VWwmJlVsLmlzU2V0LGhmdD1VbCYmVWwuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIEdzKHV0LEF0LHZ0KXtzd2l0Y2godnQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHV0LmNhbGwoQXQpO2Nhc2UgMTpyZXR1cm4gdXQuY2FsbChBdCx2dFswXSk7Y2FzZSAyOnJldHVybiB1dC5jYWxsKEF0LHZ0WzBdLHZ0WzFdKTtjYXNlIDM6cmV0dXJuIHV0LmNhbGwoQXQsdnRbMF0sdnRbMV0sdnRbMl0pfXJldHVybiB1dC5hcHBseShBdCx2dCl9ZnVuY3Rpb24genBlKHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrV2U8JHI7KXt2YXIgamk9dXRbV2VdO0F0KGdlLGppLHZ0KGppKSx1dCl9cmV0dXJuIGdlfWZ1bmN0aW9uIHFsKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrdnQ8Z2UmJkF0KHV0W3Z0XSx2dCx1dCkhPT0hMTspO3JldHVybiB1dH1mdW5jdGlvbiBGcGUodXQsQXQpe2Zvcih2YXIgdnQ9dXQ9PW51bGw/MDp1dC5sZW5ndGg7dnQtLSYmQXQodXRbdnRdLHZ0LHV0KSE9PSExOyk7cmV0dXJuIHV0fWZ1bmN0aW9uIGZmdCh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZighQXQodXRbdnRdLHZ0LHV0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBmbSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdO0F0KGppLHZ0LHV0KSYmKCRyW1dlKytdPWppKX1yZXR1cm4gJHJ9ZnVuY3Rpb24gSDYodXQsQXQpe3ZhciB2dD11dD09bnVsbD8wOnV0Lmxlbmd0aDtyZXR1cm4hIXZ0JiZmeCh1dCxBdCwwKT4tMX1mdW5jdGlvbiBzcSh1dCxBdCx2dCl7Zm9yKHZhciBnZT0tMSxXZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK2dlPFdlOylpZih2dChBdCx1dFtnZV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEtuKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoLFdlPUFycmF5KGdlKTsrK3Z0PGdlOylXZVt2dF09QXQodXRbdnRdLHZ0LHV0KTtyZXR1cm4gV2V9ZnVuY3Rpb24gcG0odXQsQXQpe2Zvcih2YXIgdnQ9LTEsZ2U9QXQubGVuZ3RoLFdlPXV0Lmxlbmd0aDsrK3Z0PGdlOyl1dFtXZSt2dF09QXRbdnRdO3JldHVybiB1dH1mdW5jdGlvbiBscSh1dCxBdCx2dCxnZSl7dmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoO2ZvcihnZSYmJHImJih2dD11dFsrK1dlXSk7KytXZTwkcjspdnQ9QXQodnQsdXRbV2VdLFdlLHV0KTtyZXR1cm4gdnR9ZnVuY3Rpb24gQnBlKHV0LEF0LHZ0LGdlKXt2YXIgV2U9dXQ9PW51bGw/MDp1dC5sZW5ndGg7Zm9yKGdlJiZXZSYmKHZ0PXV0Wy0tV2VdKTtXZS0tOyl2dD1BdCh2dCx1dFtXZV0sV2UsdXQpO3JldHVybiB2dH1mdW5jdGlvbiBjcSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZihBdCh1dFt2dF0sdnQsdXQpKXJldHVybiEwO3JldHVybiExfXZhciBIcGU9dXEoImxlbmd0aCIpO2Z1bmN0aW9uIFZwZSh1dCl7cmV0dXJuIHV0LnNwbGl0KCIiKX1mdW5jdGlvbiBVcGUodXQpe3JldHVybiB1dC5tYXRjaChGdCl8fFtdfWZ1bmN0aW9uIHBmdCh1dCxBdCx2dCl7dmFyIGdlO3JldHVybiB2dCh1dCxmdW5jdGlvbihXZSwkcixqaSl7aWYoQXQoV2UsJHIsamkpKXJldHVybiBnZT0kciwhMX0pLGdlfWZ1bmN0aW9uIFY2KHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPXV0Lmxlbmd0aCwkcj12dCsoZ2U/MTotMSk7Z2U/JHItLTorKyRyPFdlOylpZihBdCh1dFskcl0sJHIsdXQpKXJldHVybiAkcjtyZXR1cm4tMX1mdW5jdGlvbiBmeCh1dCxBdCx2dCl7cmV0dXJuIEF0PT09QXQ/dGRlKHV0LEF0LHZ0KTpWNih1dCxkZnQsdnQpfWZ1bmN0aW9uIHFwZSh1dCxBdCx2dCxnZSl7Zm9yKHZhciBXZT12dC0xLCRyPXV0Lmxlbmd0aDsrK1dlPCRyOylpZihnZSh1dFtXZV0sQXQpKXJldHVybiBXZTtyZXR1cm4tMX1mdW5jdGlvbiBkZnQodXQpe3JldHVybiB1dCE9PXV0fWZ1bmN0aW9uIG1mdCh1dCxBdCl7dmFyIHZ0PXV0PT1udWxsPzA6dXQubGVuZ3RoO3JldHVybiB2dD9mcSh1dCxBdCkvdnQ6Wn1mdW5jdGlvbiB1cSh1dCl7cmV0dXJuIGZ1bmN0aW9uKEF0KXtyZXR1cm4gQXQ9PW51bGw/ZTpBdFt1dF19fWZ1bmN0aW9uIGhxKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dD09bnVsbD9lOnV0W0F0XX19ZnVuY3Rpb24gZ2Z0KHV0LEF0LHZ0LGdlLFdlKXtyZXR1cm4gV2UodXQsZnVuY3Rpb24oJHIsamksdm4pe3Z0PWdlPyhnZT0hMSwkcik6QXQodnQsJHIsamksdm4pfSksdnR9ZnVuY3Rpb24gR3BlKHV0LEF0KXt2YXIgdnQ9dXQubGVuZ3RoO2Zvcih1dC5zb3J0KEF0KTt2dC0tOyl1dFt2dF09dXRbdnRdLnZhbHVlO3JldHVybiB1dH1mdW5jdGlvbiBmcSh1dCxBdCl7Zm9yKHZhciB2dCxnZT0tMSxXZT11dC5sZW5ndGg7KytnZTxXZTspe3ZhciAkcj1BdCh1dFtnZV0pOyRyIT09ZSYmKHZ0PXZ0PT09ZT8kcjp2dCskcil9cmV0dXJuIHZ0fWZ1bmN0aW9uIHBxKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPUFycmF5KHV0KTsrK3Z0PHV0OylnZVt2dF09QXQodnQpO3JldHVybiBnZX1mdW5jdGlvbiBXcGUodXQsQXQpe3JldHVybiBLbihBdCxmdW5jdGlvbih2dCl7cmV0dXJuW3Z0LHV0W3Z0XV19KX1mdW5jdGlvbiBfZnQodXQpe3JldHVybiB1dCYmdXQuc2xpY2UoMCxiZnQodXQpKzEpLnJlcGxhY2UocnAsIiIpfWZ1bmN0aW9uIFdzKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dChBdCl9fWZ1bmN0aW9uIGRxKHV0LEF0KXtyZXR1cm4gS24oQXQsZnVuY3Rpb24odnQpe3JldHVybiB1dFt2dF19KX1mdW5jdGlvbiBNTSh1dCxBdCl7cmV0dXJuIHV0LmhhcyhBdCl9ZnVuY3Rpb24geWZ0KHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aDsrK3Z0PGdlJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gdmZ0KHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aDt2dC0tJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gWXBlKHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aCxnZT0wO3Z0LS07KXV0W3Z0XT09PUF0JiYrK2dlO3JldHVybiBnZX12YXIganBlPWhxKElwZSksWHBlPWhxKExwZSk7ZnVuY3Rpb24gJHBlKHV0KXtyZXR1cm4iXFwiK1JwZVt1dF19ZnVuY3Rpb24gS3BlKHV0LEF0KXtyZXR1cm4gdXQ9PW51bGw/ZTp1dFtBdF19ZnVuY3Rpb24gcHgodXQpe3JldHVybiBUcGUudGVzdCh1dCl9ZnVuY3Rpb24gWnBlKHV0KXtyZXR1cm4gQ3BlLnRlc3QodXQpfWZ1bmN0aW9uIEpwZSh1dCl7Zm9yKHZhciBBdCx2dD1bXTshKEF0PXV0Lm5leHQoKSkuZG9uZTspdnQucHVzaChBdC52YWx1ZSk7cmV0dXJuIHZ0fWZ1bmN0aW9uIG1xKHV0KXt2YXIgQXQ9LTEsdnQ9QXJyYXkodXQuc2l6ZSk7cmV0dXJuIHV0LmZvckVhY2goZnVuY3Rpb24oZ2UsV2Upe3Z0WysrQXRdPVtXZSxnZV19KSx2dH1mdW5jdGlvbiB4ZnQodXQsQXQpe3JldHVybiBmdW5jdGlvbih2dCl7cmV0dXJuIHV0KEF0KHZ0KSl9fWZ1bmN0aW9uIGRtKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdOyhqaT09PUF0fHxqaT09PWwpJiYodXRbdnRdPWwsJHJbV2UrK109dnQpfXJldHVybiAkcn1mdW5jdGlvbiBVNih1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1nZX0pLHZ0fWZ1bmN0aW9uIFFwZSh1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1bZ2UsZ2VdfSksdnR9ZnVuY3Rpb24gdGRlKHV0LEF0LHZ0KXtmb3IodmFyIGdlPXZ0LTEsV2U9dXQubGVuZ3RoOysrZ2U8V2U7KWlmKHV0W2dlXT09PUF0KXJldHVybiBnZTtyZXR1cm4tMX1mdW5jdGlvbiBlZGUodXQsQXQsdnQpe2Zvcih2YXIgZ2U9dnQrMTtnZS0tOylpZih1dFtnZV09PT1BdClyZXR1cm4gZ2U7cmV0dXJuIGdlfWZ1bmN0aW9uIGR4KHV0KXtyZXR1cm4gcHgodXQpP25kZSh1dCk6SHBlKHV0KX1mdW5jdGlvbiB0dSh1dCl7cmV0dXJuIHB4KHV0KT9pZGUodXQpOlZwZSh1dCl9ZnVuY3Rpb24gYmZ0KHV0KXtmb3IodmFyIEF0PXV0Lmxlbmd0aDtBdC0tJiZLLnRlc3QodXQuY2hhckF0KEF0KSk7KTtyZXR1cm4gQXR9dmFyIHJkZT1ocShrcGUpO2Z1bmN0aW9uIG5kZSh1dCl7Zm9yKHZhciBBdD1pcS5sYXN0SW5kZXg9MDtpcS50ZXN0KHV0KTspKytBdDtyZXR1cm4gQXR9ZnVuY3Rpb24gaWRlKHV0KXtyZXR1cm4gdXQubWF0Y2goaXEpfHxbXX1mdW5jdGlvbiBvZGUodXQpe3JldHVybiB1dC5tYXRjaChFcGUpfHxbXX12YXIgYWRlPWZ1bmN0aW9uIHV0KEF0KXtBdD1BdD09bnVsbD9mbzptbS5kZWZhdWx0cyhmby5PYmplY3QoKSxBdCxtbS5waWNrKGZvLEFwZSkpO3ZhciB2dD1BdC5BcnJheSxnZT1BdC5EYXRlLFdlPUF0LkVycm9yLCRyPUF0LkZ1bmN0aW9uLGppPUF0Lk1hdGgsdm49QXQuT2JqZWN0LGdxPUF0LlJlZ0V4cCxzZGU9QXQuU3RyaW5nLEdsPUF0LlR5cGVFcnJvcixxNj12dC5wcm90b3R5cGUsbGRlPSRyLnByb3RvdHlwZSxteD12bi5wcm90b3R5cGUsRzY9QXRbIl9fY29yZS1qc19zaGFyZWRfXyJdLFc2PWxkZS50b1N0cmluZyx1bj1teC5oYXNPd25Qcm9wZXJ0eSxjZGU9MCx3ZnQ9ZnVuY3Rpb24oKXt2YXIgbT0vW14uXSskLy5leGVjKEc2JiZHNi5rZXlzJiZHNi5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIG0/IlN5bWJvbChzcmMpXzEuIittOiIifSgpLFk2PW14LnRvU3RyaW5nLHVkZT1XNi5jYWxsKHZuKSxoZGU9Zm8uXyxmZGU9Z3EoIl4iK1c2LmNhbGwodW4pLnJlcGxhY2UoY24sIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksajY9b2Z0P0F0LkJ1ZmZlcjplLGdtPUF0LlN5bWJvbCxYNj1BdC5VaW50OEFycmF5LFNmdD1qNj9qNi5hbGxvY1Vuc2FmZTplLCQ2PXhmdCh2bi5nZXRQcm90b3R5cGVPZix2biksTWZ0PXZuLmNyZWF0ZSxFZnQ9bXgucHJvcGVydHlJc0VudW1lcmFibGUsSzY9cTYuc3BsaWNlLFRmdD1nbT9nbS5pc0NvbmNhdFNwcmVhZGFibGU6ZSxFTT1nbT9nbS5pdGVyYXRvcjplLHRfPWdtP2dtLnRvU3RyaW5nVGFnOmUsWjY9ZnVuY3Rpb24oKXt0cnl7dmFyIG09b18odm4sImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIG0oe30sIiIse30pLG19Y2F0Y2godil7fX0oKSxwZGU9QXQuY2xlYXJUaW1lb3V0IT09Zm8uY2xlYXJUaW1lb3V0JiZBdC5jbGVhclRpbWVvdXQsZGRlPWdlJiZnZS5ub3chPT1mby5EYXRlLm5vdyYmZ2Uubm93LG1kZT1BdC5zZXRUaW1lb3V0IT09Zm8uc2V0VGltZW91dCYmQXQuc2V0VGltZW91dCxKNj1qaS5jZWlsLFE2PWppLmZsb29yLF9xPXZuLmdldE93blByb3BlcnR5U3ltYm9scyxnZGU9ajY/ajYuaXNCdWZmZXI6ZSxDZnQ9QXQuaXNGaW5pdGUsX2RlPXE2LmpvaW4seWRlPXhmdCh2bi5rZXlzLHZuKSxYaT1qaS5tYXgscmE9amkubWluLHZkZT1nZS5ub3cseGRlPUF0LnBhcnNlSW50LEFmdD1qaS5yYW5kb20sYmRlPXE2LnJldmVyc2UseXE9b18oQXQsIkRhdGFWaWV3IiksVE09b18oQXQsIk1hcCIpLHZxPW9fKEF0LCJQcm9taXNlIiksZ3g9b18oQXQsIlNldCIpLENNPW9fKEF0LCJXZWFrTWFwIiksQU09b18odm4sImNyZWF0ZSIpLHRJPUNNJiZuZXcgQ00sX3g9e30sd2RlPWFfKHlxKSxTZGU9YV8oVE0pLE1kZT1hXyh2cSksRWRlPWFfKGd4KSxUZGU9YV8oQ00pLGVJPWdtP2dtLnByb3RvdHlwZTplLFBNPWVJP2VJLnZhbHVlT2Y6ZSxQZnQ9ZUk/ZUkudG9TdHJpbmc6ZTtmdW5jdGlvbiBHKG0pe2lmKGxpKG0pJiYhJGUobSkmJiEobSBpbnN0YW5jZW9mIGdyKSl7aWYobSBpbnN0YW5jZW9mIFdsKXJldHVybiBtO2lmKHVuLmNhbGwobSwiX193cmFwcGVkX18iKSlyZXR1cm4gSXB0KG0pfXJldHVybiBuZXcgV2wobSl9dmFyIHl4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe31yZXR1cm4gZnVuY3Rpb24odil7aWYoIXJpKHYpKXJldHVybnt9O2lmKE1mdClyZXR1cm4gTWZ0KHYpO20ucHJvdG90eXBlPXY7dmFyIFQ9bmV3IG07cmV0dXJuIG0ucHJvdG90eXBlPWUsVH19KCk7ZnVuY3Rpb24gckkoKXt9ZnVuY3Rpb24gV2wobSx2KXt0aGlzLl9fd3JhcHBlZF9fPW0sdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXYsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189ZX1HLnRlbXBsYXRlU2V0dGluZ3M9e2VzY2FwZTpQYSxldmFsdWF0ZTpobyxpbnRlcnBvbGF0ZTpJYSx2YXJpYWJsZToiIixpbXBvcnRzOntfOkd9fSxHLnByb3RvdHlwZT1ySS5wcm90b3R5cGUsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9RyxXbC5wcm90b3R5cGU9eXgockkucHJvdG90eXBlKSxXbC5wcm90b3R5cGUuY29uc3RydWN0b3I9V2w7ZnVuY3Rpb24gZ3IobSl7dGhpcy5fX3dyYXBwZWRfXz1tLHRoaXMuX19hY3Rpb25zX189W10sdGhpcy5fX2Rpcl9fPTEsdGhpcy5fX2ZpbHRlcmVkX189ITEsdGhpcy5fX2l0ZXJhdGVlc19fPVtdLHRoaXMuX190YWtlQ291bnRfXz1ydCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBDZGUoKXt2YXIgbT1uZXcgZ3IodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuIG0uX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyksbS5fX2Rpcl9fPXRoaXMuX19kaXJfXyxtLl9fZmlsdGVyZWRfXz10aGlzLl9fZmlsdGVyZWRfXyxtLl9faXRlcmF0ZWVzX189cHModGhpcy5fX2l0ZXJhdGVlc19fKSxtLl9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fLG0uX192aWV3c19fPXBzKHRoaXMuX192aWV3c19fKSxtfWZ1bmN0aW9uIEFkZSgpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgbT1uZXcgZ3IodGhpcyk7bS5fX2Rpcl9fPS0xLG0uX19maWx0ZXJlZF9fPSEwfWVsc2UgbT10aGlzLmNsb25lKCksbS5fX2Rpcl9fKj0tMTtyZXR1cm4gbX1mdW5jdGlvbiBQZGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksdj10aGlzLl9fZGlyX18sVD0kZShtKSxOPXY8MCxWPVQ/bS5sZW5ndGg6MCxZPVZtZSgwLFYsdGhpcy5fX3ZpZXdzX18pLEo9WS5zdGFydCxpdD1ZLmVuZCxmdD1pdC1KLER0PU4/aXQ6Si0xLE90PXRoaXMuX19pdGVyYXRlZXNfXyxWdD1PdC5sZW5ndGgsb2U9MCxUZT1yYShmdCx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFUfHwhTiYmVj09ZnQmJlRlPT1mdClyZXR1cm4gUWZ0KG0sdGhpcy5fX2FjdGlvbnNfXyk7dmFyIE5lPVtdO3Q6Zm9yKDtmdC0tJiZvZTxUZTspe0R0Kz12O2Zvcih2YXIgZXI9LTEsRGU9bVtEdF07KytlcjxWdDspe3ZhciBwcj1PdFtlcl0seXI9cHIuaXRlcmF0ZWUsWHM9cHIudHlwZSxSYT15cihEZSk7aWYoWHM9PVIpRGU9UmE7ZWxzZSBpZighUmEpe2lmKFhzPT1MKWNvbnRpbnVlIHQ7YnJlYWsgdH19TmVbb2UrK109RGV9cmV0dXJuIE5lfWdyLnByb3RvdHlwZT15eChySS5wcm90b3R5cGUpLGdyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ncjtmdW5jdGlvbiBlXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBJZGUoKXt0aGlzLl9fZGF0YV9fPUFNP0FNKG51bGwpOnt9LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIExkZShtKXt2YXIgdj10aGlzLmhhcyhtKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bbV07cmV0dXJuIHRoaXMuc2l6ZS09dj8xOjAsdn1mdW5jdGlvbiBrZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXztpZihBTSl7dmFyIFQ9dlttXTtyZXR1cm4gVD09PWE/ZTpUfXJldHVybiB1bi5jYWxsKHYsbSk/dlttXTplfWZ1bmN0aW9uIFJkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fO3JldHVybiBBTT92W21dIT09ZTp1bi5jYWxsKHYsbSl9ZnVuY3Rpb24gTmRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhtKT8wOjEsVFttXT1BTSYmdj09PWU/YTp2LHRoaXN9ZV8ucHJvdG90eXBlLmNsZWFyPUlkZSxlXy5wcm90b3R5cGUuZGVsZXRlPUxkZSxlXy5wcm90b3R5cGUuZ2V0PWtkZSxlXy5wcm90b3R5cGUuaGFzPVJkZSxlXy5wcm90b3R5cGUuc2V0PU5kZTtmdW5jdGlvbiBpcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBEZGUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIE9kZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9bkkodixtKTtpZihUPDApcmV0dXJuITE7dmFyIE49di5sZW5ndGgtMTtyZXR1cm4gVD09Tj92LnBvcCgpOks2LmNhbGwodixULDEpLC0tdGhpcy5zaXplLCEwfWZ1bmN0aW9uIHpkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9bkkodixtKTtyZXR1cm4gVDwwP2U6dltUXVsxXX1mdW5jdGlvbiBGZGUobSl7cmV0dXJuIG5JKHRoaXMuX19kYXRhX18sbSk+LTF9ZnVuY3Rpb24gQmRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXyxOPW5JKFQsbSk7cmV0dXJuIE48MD8oKyt0aGlzLnNpemUsVC5wdXNoKFttLHZdKSk6VFtOXVsxXT12LHRoaXN9aXAucHJvdG90eXBlLmNsZWFyPURkZSxpcC5wcm90b3R5cGUuZGVsZXRlPU9kZSxpcC5wcm90b3R5cGUuZ2V0PXpkZSxpcC5wcm90b3R5cGUuaGFzPUZkZSxpcC5wcm90b3R5cGUuc2V0PUJkZTtmdW5jdGlvbiBvcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBIZGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBlXyxtYXA6bmV3KFRNfHxpcCksc3RyaW5nOm5ldyBlX319ZnVuY3Rpb24gVmRlKG0pe3ZhciB2PW1JKHRoaXMsbSkuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemUtPXY/MTowLHZ9ZnVuY3Rpb24gVWRlKG0pe3JldHVybiBtSSh0aGlzLG0pLmdldChtKX1mdW5jdGlvbiBxZGUobSl7cmV0dXJuIG1JKHRoaXMsbSkuaGFzKG0pfWZ1bmN0aW9uIEdkZShtLHYpe3ZhciBUPW1JKHRoaXMsbSksTj1ULnNpemU7cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplKz1ULnNpemU9PU4/MDoxLHRoaXN9b3AucHJvdG90eXBlLmNsZWFyPUhkZSxvcC5wcm90b3R5cGUuZGVsZXRlPVZkZSxvcC5wcm90b3R5cGUuZ2V0PVVkZSxvcC5wcm90b3R5cGUuaGFzPXFkZSxvcC5wcm90b3R5cGUuc2V0PUdkZTtmdW5jdGlvbiByXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgb3A7Kyt2PFQ7KXRoaXMuYWRkKG1bdl0pfWZ1bmN0aW9uIFdkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQobSxhKSx0aGlzfWZ1bmN0aW9uIFlkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMobSl9cl8ucHJvdG90eXBlLmFkZD1yXy5wcm90b3R5cGUucHVzaD1XZGUscl8ucHJvdG90eXBlLmhhcz1ZZGU7ZnVuY3Rpb24gZXUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXz1uZXcgaXAobSk7dGhpcy5zaXplPXYuc2l6ZX1mdW5jdGlvbiBqZGUoKXt0aGlzLl9fZGF0YV9fPW5ldyBpcCx0aGlzLnNpemU9MH1mdW5jdGlvbiBYZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXyxUPXYuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemU9di5zaXplLFR9ZnVuY3Rpb24gJGRlKG0pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChtKX1mdW5jdGlvbiBLZGUobSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKG0pfWZ1bmN0aW9uIFpkZShtLHYpe3ZhciBUPXRoaXMuX19kYXRhX187aWYoVCBpbnN0YW5jZW9mIGlwKXt2YXIgTj1ULl9fZGF0YV9fO2lmKCFUTXx8Ti5sZW5ndGg8ci0xKXJldHVybiBOLnB1c2goW20sdl0pLHRoaXMuc2l6ZT0rK1Quc2l6ZSx0aGlzO1Q9dGhpcy5fX2RhdGFfXz1uZXcgb3AoTil9cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplPVQuc2l6ZSx0aGlzfWV1LnByb3RvdHlwZS5jbGVhcj1qZGUsZXUucHJvdG90eXBlLmRlbGV0ZT1YZGUsZXUucHJvdG90eXBlLmdldD0kZGUsZXUucHJvdG90eXBlLmhhcz1LZGUsZXUucHJvdG90eXBlLnNldD1aZGU7ZnVuY3Rpb24gSWZ0KG0sdil7dmFyIFQ9JGUobSksTj0hVCYmc18obSksVj0hVCYmIU4mJmJtKG0pLFk9IVQmJiFOJiYhViYmd3gobSksSj1UfHxOfHxWfHxZLGl0PUo/cHEobS5sZW5ndGgsc2RlKTpbXSxmdD1pdC5sZW5ndGg7Zm9yKHZhciBEdCBpbiBtKSh2fHx1bi5jYWxsKG0sRHQpKSYmIShKJiYoRHQ9PSJsZW5ndGgifHxWJiYoRHQ9PSJvZmZzZXQifHxEdD09InBhcmVudCIpfHxZJiYoRHQ9PSJidWZmZXIifHxEdD09ImJ5dGVMZW5ndGgifHxEdD09ImJ5dGVPZmZzZXQiKXx8Y3AoRHQsZnQpKSkmJml0LnB1c2goRHQpO3JldHVybiBpdH1mdW5jdGlvbiBMZnQobSl7dmFyIHY9bS5sZW5ndGg7cmV0dXJuIHY/bVtJcSgwLHYtMSldOmV9ZnVuY3Rpb24gSmRlKG0sdil7cmV0dXJuIGdJKHBzKG0pLG5fKHYsMCxtLmxlbmd0aCkpfWZ1bmN0aW9uIFFkZShtKXtyZXR1cm4gZ0kocHMobSkpfWZ1bmN0aW9uIHhxKG0sdixUKXsoVCE9PWUmJiFydShtW3ZdLFQpfHxUPT09ZSYmISh2IGluIG0pKSYmYXAobSx2LFQpfWZ1bmN0aW9uIElNKG0sdixUKXt2YXIgTj1tW3ZdOyghKHVuLmNhbGwobSx2KSYmcnUoTixUKSl8fFQ9PT1lJiYhKHYgaW4gbSkpJiZhcChtLHYsVCl9ZnVuY3Rpb24gbkkobSx2KXtmb3IodmFyIFQ9bS5sZW5ndGg7VC0tOylpZihydShtW1RdWzBdLHYpKXJldHVybiBUO3JldHVybi0xfWZ1bmN0aW9uIHRtZShtLHYsVCxOKXtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7dihOLFYsVChWKSxKKX0pLE59ZnVuY3Rpb24ga2Z0KG0sdil7cmV0dXJuIG0mJmdoKHYscG8odiksbSl9ZnVuY3Rpb24gZW1lKG0sdil7cmV0dXJuIG0mJmdoKHYsbXModiksbSl9ZnVuY3Rpb24gYXAobSx2LFQpe3Y9PSJfX3Byb3RvX18iJiZaNj9aNihtLHYse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOlQsd3JpdGFibGU6ITB9KTptW3ZdPVR9ZnVuY3Rpb24gYnEobSx2KXtmb3IodmFyIFQ9LTEsTj12Lmxlbmd0aCxWPXZ0KE4pLFk9bT09bnVsbDsrK1Q8TjspVltUXT1ZP2U6ZUcobSx2W1RdKTtyZXR1cm4gVn1mdW5jdGlvbiBuXyhtLHYsVCl7cmV0dXJuIG09PT1tJiYoVCE9PWUmJihtPW08PVQ/bTpUKSx2IT09ZSYmKG09bT49dj9tOnYpKSxtfWZ1bmN0aW9uIFlsKG0sdixULE4sVixZKXt2YXIgSixpdD12JmMsZnQ9diZ1LER0PXYmaDtpZihUJiYoSj1WP1QobSxOLFYsWSk6VChtKSksSiE9PWUpcmV0dXJuIEo7aWYoIXJpKG0pKXJldHVybiBtO3ZhciBPdD0kZShtKTtpZihPdCl7aWYoSj1xbWUobSksIWl0KXJldHVybiBwcyhtLEopfWVsc2V7dmFyIFZ0PW5hKG0pLG9lPVZ0PT1ldHx8VnQ9PWR0O2lmKGJtKG0pKXJldHVybiBycHQobSxpdCk7aWYoVnQ9PXd0fHxWdD09YnR8fG9lJiYhVil7aWYoSj1mdHx8b2U/e306YnB0KG0pLCFpdClyZXR1cm4gZnQ/a21lKG0sZW1lKEosbSkpOkxtZShtLGtmdChKLG0pKX1lbHNle2lmKCFUbltWdF0pcmV0dXJuIFY/bTp7fTtKPUdtZShtLFZ0LGl0KX19WXx8KFk9bmV3IGV1KTt2YXIgVGU9WS5nZXQobSk7aWYoVGUpcmV0dXJuIFRlO1kuc2V0KG0sSiksS3B0KG0pP20uZm9yRWFjaChmdW5jdGlvbihEZSl7Si5hZGQoWWwoRGUsdixULERlLG0sWSkpfSk6WHB0KG0pJiZtLmZvckVhY2goZnVuY3Rpb24oRGUscHIpe0ouc2V0KHByLFlsKERlLHYsVCxwcixtLFkpKX0pO3ZhciBOZT1EdD9mdD9WcTpIcTpmdD9tczpwbyxlcj1PdD9lOk5lKG0pO3JldHVybiBxbChlcnx8bSxmdW5jdGlvbihEZSxwcil7ZXImJihwcj1EZSxEZT1tW3ByXSksSU0oSixwcixZbChEZSx2LFQscHIsbSxZKSl9KSxKfWZ1bmN0aW9uIHJtZShtKXt2YXIgdj1wbyhtKTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFJmdChULG0sdil9fWZ1bmN0aW9uIFJmdChtLHYsVCl7dmFyIE49VC5sZW5ndGg7aWYobT09bnVsbClyZXR1cm4hTjtmb3IobT12bihtKTtOLS07KXt2YXIgVj1UW05dLFk9dltWXSxKPW1bVl07aWYoSj09PWUmJiEoViBpbiBtKXx8IVkoSikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gTmZ0KG0sdixUKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHpNKGZ1bmN0aW9uKCl7bS5hcHBseShlLFQpfSx2KX1mdW5jdGlvbiBMTShtLHYsVCxOKXt2YXIgVj0tMSxZPUg2LEo9ITAsaXQ9bS5sZW5ndGgsZnQ9W10sRHQ9di5sZW5ndGg7aWYoIWl0KXJldHVybiBmdDtUJiYodj1Lbih2LFdzKFQpKSksTj8oWT1zcSxKPSExKTp2Lmxlbmd0aD49ciYmKFk9TU0sSj0hMSx2PW5ldyByXyh2KSk7dDpmb3IoOysrVjxpdDspe3ZhciBPdD1tW1ZdLFZ0PVQ9PW51bGw/T3Q6VChPdCk7aWYoT3Q9Tnx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1EdDtvZS0tOylpZih2W29lXT09PVZ0KWNvbnRpbnVlIHQ7ZnQucHVzaChPdCl9ZWxzZSBZKHYsVnQsTil8fGZ0LnB1c2goT3QpfXJldHVybiBmdH12YXIgX209c3B0KG1oKSxEZnQ9c3B0KFNxLCEwKTtmdW5jdGlvbiBubWUobSx2KXt2YXIgVD0hMDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9ISF2KE4sVixZKSxUfSksVH1mdW5jdGlvbiBpSShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5sZW5ndGg7KytOPFY7KXt2YXIgWT1tW05dLEo9dihZKTtpZihKIT1udWxsJiYoaXQ9PT1lP0o9PT1KJiYhanMoSik6VChKLGl0KSkpdmFyIGl0PUosZnQ9WX1yZXR1cm4gZnR9ZnVuY3Rpb24gaW1lKG0sdixULE4pe3ZhciBWPW0ubGVuZ3RoO2ZvcihUPVFlKFQpLFQ8MCYmKFQ9LVQ+Vj8wOlYrVCksTj1OPT09ZXx8Tj5WP1Y6UWUoTiksTjwwJiYoTis9ViksTj1UPk4/MDpKcHQoTik7VDxOOyltW1QrK109djtyZXR1cm4gbX1mdW5jdGlvbiBPZnQobSx2KXt2YXIgVD1bXTtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7dihOLFYsWSkmJlQucHVzaChOKX0pLFR9ZnVuY3Rpb24gUm8obSx2LFQsTixWKXt2YXIgWT0tMSxKPW0ubGVuZ3RoO2ZvcihUfHwoVD1ZbWUpLFZ8fChWPVtdKTsrK1k8Sjspe3ZhciBpdD1tW1ldO3Y+MCYmVChpdCk/dj4xP1JvKGl0LHYtMSxULE4sVik6cG0oVixpdCk6Tnx8KFZbVi5sZW5ndGhdPWl0KX1yZXR1cm4gVn12YXIgd3E9bHB0KCksemZ0PWxwdCghMCk7ZnVuY3Rpb24gbWgobSx2KXtyZXR1cm4gbSYmd3EobSx2LHBvKX1mdW5jdGlvbiBTcShtLHYpe3JldHVybiBtJiZ6ZnQobSx2LHBvKX1mdW5jdGlvbiBvSShtLHYpe3JldHVybiBmbSh2LGZ1bmN0aW9uKFQpe3JldHVybiB1cChtW1RdKX0pfWZ1bmN0aW9uIGlfKG0sdil7dj12bSh2LG0pO2Zvcih2YXIgVD0wLE49di5sZW5ndGg7bSE9bnVsbCYmVDxOOyltPW1bX2godltUKytdKV07cmV0dXJuIFQmJlQ9PU4/bTplfWZ1bmN0aW9uIEZmdChtLHYsVCl7dmFyIE49dihtKTtyZXR1cm4gJGUobSk/TjpwbShOLFQobSkpfWZ1bmN0aW9uIExhKG0pe3JldHVybiBtPT1udWxsP209PT1lP3R0Omh0OnRfJiZ0XyBpbiB2bihtKT9IbWUobSk6UW1lKG0pfWZ1bmN0aW9uIE1xKG0sdil7cmV0dXJuIG0+dn1mdW5jdGlvbiBvbWUobSx2KXtyZXR1cm4gbSE9bnVsbCYmdW4uY2FsbChtLHYpfWZ1bmN0aW9uIGFtZShtLHYpe3JldHVybiBtIT1udWxsJiZ2IGluIHZuKG0pfWZ1bmN0aW9uIHNtZShtLHYsVCl7cmV0dXJuIG0+PXJhKHYsVCkmJm08WGkodixUKX1mdW5jdGlvbiBFcShtLHYsVCl7Zm9yKHZhciBOPVQ/c3E6SDYsVj1tWzBdLmxlbmd0aCxZPW0ubGVuZ3RoLEo9WSxpdD12dChZKSxmdD0xLzAsRHQ9W107Si0tOyl7dmFyIE90PW1bSl07SiYmdiYmKE90PUtuKE90LFdzKHYpKSksZnQ9cmEoT3QubGVuZ3RoLGZ0KSxpdFtKXT0hVCYmKHZ8fFY+PTEyMCYmT3QubGVuZ3RoPj0xMjApP25ldyByXyhKJiZPdCk6ZX1PdD1tWzBdO3ZhciBWdD0tMSxvZT1pdFswXTt0OmZvcig7KytWdDxWJiZEdC5sZW5ndGg8ZnQ7KXt2YXIgVGU9T3RbVnRdLE5lPXY/dihUZSk6VGU7aWYoVGU9VHx8VGUhPT0wP1RlOjAsIShvZT9NTShvZSxOZSk6TihEdCxOZSxUKSkpe2ZvcihKPVk7LS1KOyl7dmFyIGVyPWl0W0pdO2lmKCEoZXI/TU0oZXIsTmUpOk4obVtKXSxOZSxUKSkpY29udGludWUgdH1vZSYmb2UucHVzaChOZSksRHQucHVzaChUZSl9fXJldHVybiBEdH1mdW5jdGlvbiBsbWUobSx2LFQsTil7cmV0dXJuIG1oKG0sZnVuY3Rpb24oVixZLEope3YoTixUKFYpLFksSil9KSxOfWZ1bmN0aW9uIGtNKG0sdixUKXt2PXZtKHYsbSksbT1FcHQobSx2KTt2YXIgTj1tPT1udWxsP206bVtfaChYbCh2KSldO3JldHVybiBOPT1udWxsP2U6R3MoTixtLFQpfWZ1bmN0aW9uIEJmdChtKXtyZXR1cm4gbGkobSkmJkxhKG0pPT1idH1mdW5jdGlvbiBjbWUobSl7cmV0dXJuIGxpKG0pJiZMYShtKT09JHR9ZnVuY3Rpb24gdW1lKG0pe3JldHVybiBsaShtKSYmTGEobSk9PV90fWZ1bmN0aW9uIFJNKG0sdixULE4sVil7cmV0dXJuIG09PT12PyEwOm09PW51bGx8fHY9PW51bGx8fCFsaShtKSYmIWxpKHYpP20hPT1tJiZ2IT09djpobWUobSx2LFQsTixSTSxWKX1mdW5jdGlvbiBobWUobSx2LFQsTixWLFkpe3ZhciBKPSRlKG0pLGl0PSRlKHYpLGZ0PUo/TXQ6bmEobSksRHQ9aXQ/TXQ6bmEodik7ZnQ9ZnQ9PWJ0P3d0OmZ0LER0PUR0PT1idD93dDpEdDt2YXIgT3Q9ZnQ9PXd0LFZ0PUR0PT13dCxvZT1mdD09RHQ7aWYob2UmJmJtKG0pKXtpZighYm0odikpcmV0dXJuITE7Sj0hMCxPdD0hMX1pZihvZSYmIU90KXJldHVybiBZfHwoWT1uZXcgZXUpLEp8fHd4KG0pP3lwdChtLHYsVCxOLFYsWSk6Rm1lKG0sdixmdCxULE4sVixZKTtpZighKFQmZikpe3ZhciBUZT1PdCYmdW4uY2FsbChtLCJfX3dyYXBwZWRfXyIpLE5lPVZ0JiZ1bi5jYWxsKHYsIl9fd3JhcHBlZF9fIik7aWYoVGV8fE5lKXt2YXIgZXI9VGU/bS52YWx1ZSgpOm0sRGU9TmU/di52YWx1ZSgpOnY7cmV0dXJuIFl8fChZPW5ldyBldSksVihlcixEZSxULE4sWSl9fXJldHVybiBvZT8oWXx8KFk9bmV3IGV1KSxCbWUobSx2LFQsTixWLFkpKTohMX1mdW5jdGlvbiBmbWUobSl7cmV0dXJuIGxpKG0pJiZuYShtKT09cX1mdW5jdGlvbiBUcShtLHYsVCxOKXt2YXIgVj1ULmxlbmd0aCxZPVYsSj0hTjtpZihtPT1udWxsKXJldHVybiFZO2ZvcihtPXZuKG0pO1YtLTspe3ZhciBpdD1UW1ZdO2lmKEomJml0WzJdP2l0WzFdIT09bVtpdFswXV06IShpdFswXWluIG0pKXJldHVybiExfWZvcig7KytWPFk7KXtpdD1UW1ZdO3ZhciBmdD1pdFswXSxEdD1tW2Z0XSxPdD1pdFsxXTtpZihKJiZpdFsyXSl7aWYoRHQ9PT1lJiYhKGZ0IGluIG0pKXJldHVybiExfWVsc2V7dmFyIFZ0PW5ldyBldTtpZihOKXZhciBvZT1OKER0LE90LGZ0LG0sdixWdCk7aWYoIShvZT09PWU/Uk0oT3QsRHQsZnxwLE4sVnQpOm9lKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gSGZ0KG0pe2lmKCFyaShtKXx8WG1lKG0pKXJldHVybiExO3ZhciB2PXVwKG0pP2ZkZTpQcjtyZXR1cm4gdi50ZXN0KGFfKG0pKX1mdW5jdGlvbiBwbWUobSl7cmV0dXJuIGxpKG0pJiZMYShtKT09ZWV9ZnVuY3Rpb24gZG1lKG0pe3JldHVybiBsaShtKSYmbmEobSk9PUxlfWZ1bmN0aW9uIG1tZShtKXtyZXR1cm4gbGkobSkmJndJKG0ubGVuZ3RoKSYmISFSbltMYShtKV19ZnVuY3Rpb24gVmZ0KG0pe3JldHVybiB0eXBlb2YgbT09ImZ1bmN0aW9uIj9tOm09PW51bGw/Z3M6dHlwZW9mIG09PSJvYmplY3QiPyRlKG0pP0dmdChtWzBdLG1bMV0pOnFmdChtKTpjZHQobSl9ZnVuY3Rpb24gQ3EobSl7aWYoIU9NKG0pKXJldHVybiB5ZGUobSk7dmFyIHY9W107Zm9yKHZhciBUIGluIHZuKG0pKXVuLmNhbGwobSxUKSYmVCE9ImNvbnN0cnVjdG9yIiYmdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIGdtZShtKXtpZighcmkobSkpcmV0dXJuIEptZShtKTt2YXIgdj1PTShtKSxUPVtdO2Zvcih2YXIgTiBpbiBtKU49PSJjb25zdHJ1Y3RvciImJih2fHwhdW4uY2FsbChtLE4pKXx8VC5wdXNoKE4pO3JldHVybiBUfWZ1bmN0aW9uIEFxKG0sdil7cmV0dXJuIG08dn1mdW5jdGlvbiBVZnQobSx2KXt2YXIgVD0tMSxOPWRzKG0pP3Z0KG0ubGVuZ3RoKTpbXTtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7TlsrK1RdPXYoVixZLEopfSksTn1mdW5jdGlvbiBxZnQobSl7dmFyIHY9cXEobSk7cmV0dXJuIHYubGVuZ3RoPT0xJiZ2WzBdWzJdP1NwdCh2WzBdWzBdLHZbMF1bMV0pOmZ1bmN0aW9uKFQpe3JldHVybiBUPT09bXx8VHEoVCxtLHYpfX1mdW5jdGlvbiBHZnQobSx2KXtyZXR1cm4gV3EobSkmJndwdCh2KT9TcHQoX2gobSksdik6ZnVuY3Rpb24oVCl7dmFyIE49ZUcoVCxtKTtyZXR1cm4gTj09PWUmJk49PT12P3JHKFQsbSk6Uk0odixOLGZ8cCl9fWZ1bmN0aW9uIGFJKG0sdixULE4sVil7bSE9PXYmJndxKHYsZnVuY3Rpb24oWSxKKXtpZihWfHwoVj1uZXcgZXUpLHJpKFkpKV9tZShtLHYsSixULGFJLE4sVik7ZWxzZXt2YXIgaXQ9Tj9OKGpxKG0sSiksWSxKKyIiLG0sdixWKTplO2l0PT09ZSYmKGl0PVkpLHhxKG0sSixpdCl9fSxtcyl9ZnVuY3Rpb24gX21lKG0sdixULE4sVixZLEope3ZhciBpdD1qcShtLFQpLGZ0PWpxKHYsVCksRHQ9Si5nZXQoZnQpO2lmKER0KXt4cShtLFQsRHQpO3JldHVybn12YXIgT3Q9WT9ZKGl0LGZ0LFQrIiIsbSx2LEopOmUsVnQ9T3Q9PT1lO2lmKFZ0KXt2YXIgb2U9JGUoZnQpLFRlPSFvZSYmYm0oZnQpLE5lPSFvZSYmIVRlJiZ3eChmdCk7T3Q9ZnQsb2V8fFRlfHxOZT8kZShpdCk/T3Q9aXQ6YmkoaXQpP090PXBzKGl0KTpUZT8oVnQ9ITEsT3Q9cnB0KGZ0LCEwKSk6TmU/KFZ0PSExLE90PW5wdChmdCwhMCkpOk90PVtdOkZNKGZ0KXx8c18oZnQpPyhPdD1pdCxzXyhpdCk/T3Q9UXB0KGl0KTooIXJpKGl0KXx8dXAoaXQpKSYmKE90PWJwdChmdCkpKTpWdD0hMX1WdCYmKEouc2V0KGZ0LE90KSxWKE90LGZ0LE4sWSxKKSxKLmRlbGV0ZShmdCkpLHhxKG0sVCxPdCl9ZnVuY3Rpb24gV2Z0KG0sdil7dmFyIFQ9bS5sZW5ndGg7aWYoISFUKXJldHVybiB2Kz12PDA/VDowLGNwKHYsVCk/bVt2XTplfWZ1bmN0aW9uIFlmdChtLHYsVCl7di5sZW5ndGg/dj1Lbih2LGZ1bmN0aW9uKFkpe3JldHVybiAkZShZKT9mdW5jdGlvbihKKXtyZXR1cm4gaV8oSixZLmxlbmd0aD09PTE/WVswXTpZKX06WX0pOnY9W2dzXTt2YXIgTj0tMTt2PUtuKHYsV3Moa2UoKSkpO3ZhciBWPVVmdChtLGZ1bmN0aW9uKFksSixpdCl7dmFyIGZ0PUtuKHYsZnVuY3Rpb24oRHQpe3JldHVybiBEdChZKX0pO3JldHVybntjcml0ZXJpYTpmdCxpbmRleDorK04sdmFsdWU6WX19KTtyZXR1cm4gR3BlKFYsZnVuY3Rpb24oWSxKKXtyZXR1cm4gSW1lKFksSixUKX0pfWZ1bmN0aW9uIHltZShtLHYpe3JldHVybiBqZnQobSx2LGZ1bmN0aW9uKFQsTil7cmV0dXJuIHJHKG0sTil9KX1mdW5jdGlvbiBqZnQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9e307KytOPFY7KXt2YXIgSj12W05dLGl0PWlfKG0sSik7VChpdCxKKSYmTk0oWSx2bShKLG0pLGl0KX1yZXR1cm4gWX1mdW5jdGlvbiB2bWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBpXyh2LG0pfX1mdW5jdGlvbiBQcShtLHYsVCxOKXt2YXIgVj1OP3FwZTpmeCxZPS0xLEo9di5sZW5ndGgsaXQ9bTtmb3IobT09PXYmJih2PXBzKHYpKSxUJiYoaXQ9S24obSxXcyhUKSkpOysrWTxKOylmb3IodmFyIGZ0PTAsRHQ9dltZXSxPdD1UP1QoRHQpOkR0OyhmdD1WKGl0LE90LGZ0LE4pKT4tMTspaXQhPT1tJiZLNi5jYWxsKGl0LGZ0LDEpLEs2LmNhbGwobSxmdCwxKTtyZXR1cm4gbX1mdW5jdGlvbiBYZnQobSx2KXtmb3IodmFyIFQ9bT92Lmxlbmd0aDowLE49VC0xO1QtLTspe3ZhciBWPXZbVF07aWYoVD09Tnx8ViE9PVkpe3ZhciBZPVY7Y3AoVik/SzYuY2FsbChtLFYsMSk6UnEobSxWKX19cmV0dXJuIG19ZnVuY3Rpb24gSXEobSx2KXtyZXR1cm4gbStRNihBZnQoKSoodi1tKzEpKX1mdW5jdGlvbiB4bWUobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9WGkoSjYoKHYtbSkvKFR8fDEpKSwwKSxKPXZ0KFkpO1ktLTspSltOP1k6KytWXT1tLG0rPVQ7cmV0dXJuIEp9ZnVuY3Rpb24gTHEobSx2KXt2YXIgVD0iIjtpZighbXx8djwxfHx2PlUpcmV0dXJuIFQ7ZG8gdiUyJiYoVCs9bSksdj1RNih2LzIpLHYmJihtKz1tKTt3aGlsZSh2KTtyZXR1cm4gVH1mdW5jdGlvbiBucihtLHYpe3JldHVybiBYcShNcHQobSx2LGdzKSxtKyIiKX1mdW5jdGlvbiBibWUobSl7cmV0dXJuIExmdChTeChtKSl9ZnVuY3Rpb24gd21lKG0sdil7dmFyIFQ9U3gobSk7cmV0dXJuIGdJKFQsbl8odiwwLFQubGVuZ3RoKSl9ZnVuY3Rpb24gTk0obSx2LFQsTil7aWYoIXJpKG0pKXJldHVybiBtO3Y9dm0odixtKTtmb3IodmFyIFY9LTEsWT12Lmxlbmd0aCxKPVktMSxpdD1tO2l0IT1udWxsJiYrK1Y8WTspe3ZhciBmdD1faCh2W1ZdKSxEdD1UO2lmKGZ0PT09Il9fcHJvdG9fXyJ8fGZ0PT09ImNvbnN0cnVjdG9yInx8ZnQ9PT0icHJvdG90eXBlIilyZXR1cm4gbTtpZihWIT1KKXt2YXIgT3Q9aXRbZnRdO0R0PU4/TihPdCxmdCxpdCk6ZSxEdD09PWUmJihEdD1yaShPdCk/T3Q6Y3AodltWKzFdKT9bXTp7fSl9SU0oaXQsZnQsRHQpLGl0PWl0W2Z0XX1yZXR1cm4gbX12YXIgJGZ0PXRJP2Z1bmN0aW9uKG0sdil7cmV0dXJuIHRJLnNldChtLHYpLG19OmdzLFNtZT1aNj9mdW5jdGlvbihtLHYpe3JldHVybiBaNihtLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOmlHKHYpLHdyaXRhYmxlOiEwfSl9OmdzO2Z1bmN0aW9uIE1tZShtKXtyZXR1cm4gZ0koU3gobSkpfWZ1bmN0aW9uIGpsKG0sdixUKXt2YXIgTj0tMSxWPW0ubGVuZ3RoO3Y8MCYmKHY9LXY+Vj8wOlYrdiksVD1UPlY/VjpULFQ8MCYmKFQrPVYpLFY9dj5UPzA6VC12Pj4+MCx2Pj4+PTA7Zm9yKHZhciBZPXZ0KFYpOysrTjxWOylZW05dPW1bTit2XTtyZXR1cm4gWX1mdW5jdGlvbiBFbWUobSx2KXt2YXIgVDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9dihOLFYsWSksIVR9KSwhIVR9ZnVuY3Rpb24gc0kobSx2LFQpe3ZhciBOPTAsVj1tPT1udWxsP046bS5sZW5ndGg7aWYodHlwZW9mIHY9PSJudW1iZXIiJiZ2PT09diYmVjw9c3Qpe2Zvcig7TjxWOyl7dmFyIFk9TitWPj4+MSxKPW1bWV07SiE9PW51bGwmJiFqcyhKKSYmKFQ/Sjw9djpKPHYpP049WSsxOlY9WX1yZXR1cm4gVn1yZXR1cm4ga3EobSx2LGdzLFQpfWZ1bmN0aW9uIGtxKG0sdixULE4pe3ZhciBWPTAsWT1tPT1udWxsPzA6bS5sZW5ndGg7aWYoWT09PTApcmV0dXJuIDA7dj1UKHYpO2Zvcih2YXIgSj12IT09dixpdD12PT09bnVsbCxmdD1qcyh2KSxEdD12PT09ZTtWPFk7KXt2YXIgT3Q9UTYoKFYrWSkvMiksVnQ9VChtW090XSksb2U9VnQhPT1lLFRlPVZ0PT09bnVsbCxOZT1WdD09PVZ0LGVyPWpzKFZ0KTtpZihKKXZhciBEZT1OfHxOZTtlbHNlIER0P0RlPU5lJiYoTnx8b2UpOml0P0RlPU5lJiZvZSYmKE58fCFUZSk6ZnQ/RGU9TmUmJm9lJiYhVGUmJihOfHwhZXIpOlRlfHxlcj9EZT0hMTpEZT1OP1Z0PD12OlZ0PHY7RGU/Vj1PdCsxOlk9T3R9cmV0dXJuIHJhKFksb3QpfWZ1bmN0aW9uIEtmdChtLHYpe2Zvcih2YXIgVD0tMSxOPW0ubGVuZ3RoLFY9MCxZPVtdOysrVDxOOyl7dmFyIEo9bVtUXSxpdD12P3YoSik6SjtpZighVHx8IXJ1KGl0LGZ0KSl7dmFyIGZ0PWl0O1lbVisrXT1KPT09MD8wOkp9fXJldHVybiBZfWZ1bmN0aW9uIFpmdChtKXtyZXR1cm4gdHlwZW9mIG09PSJudW1iZXIiP206anMobSk/WjorbX1mdW5jdGlvbiBZcyhtKXtpZih0eXBlb2YgbT09InN0cmluZyIpcmV0dXJuIG07aWYoJGUobSkpcmV0dXJuIEtuKG0sWXMpKyIiO2lmKGpzKG0pKXJldHVybiBQZnQ/UGZ0LmNhbGwobSk6IiI7dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiB5bShtLHYsVCl7dmFyIE49LTEsVj1INixZPW0ubGVuZ3RoLEo9ITAsaXQ9W10sZnQ9aXQ7aWYoVClKPSExLFY9c3E7ZWxzZSBpZihZPj1yKXt2YXIgRHQ9dj9udWxsOk9tZShtKTtpZihEdClyZXR1cm4gVTYoRHQpO0o9ITEsVj1NTSxmdD1uZXcgcl99ZWxzZSBmdD12P1tdOml0O3Q6Zm9yKDsrK048WTspe3ZhciBPdD1tW05dLFZ0PXY/dihPdCk6T3Q7aWYoT3Q9VHx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1mdC5sZW5ndGg7b2UtLTspaWYoZnRbb2VdPT09VnQpY29udGludWUgdDt2JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KX1lbHNlIFYoZnQsVnQsVCl8fChmdCE9PWl0JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KSl9cmV0dXJuIGl0fWZ1bmN0aW9uIFJxKG0sdil7cmV0dXJuIHY9dm0odixtKSxtPUVwdChtLHYpLG09PW51bGx8fGRlbGV0ZSBtW19oKFhsKHYpKV19ZnVuY3Rpb24gSmZ0KG0sdixULE4pe3JldHVybiBOTShtLHYsVChpXyhtLHYpKSxOKX1mdW5jdGlvbiBsSShtLHYsVCxOKXtmb3IodmFyIFY9bS5sZW5ndGgsWT1OP1Y6LTE7KE4/WS0tOisrWTxWKSYmdihtW1ldLFksbSk7KTtyZXR1cm4gVD9qbChtLE4/MDpZLE4/WSsxOlYpOmpsKG0sTj9ZKzE6MCxOP1Y6WSl9ZnVuY3Rpb24gUWZ0KG0sdil7dmFyIFQ9bTtyZXR1cm4gVCBpbnN0YW5jZW9mIGdyJiYoVD1ULnZhbHVlKCkpLGxxKHYsZnVuY3Rpb24oTixWKXtyZXR1cm4gVi5mdW5jLmFwcGx5KFYudGhpc0FyZyxwbShbTl0sVi5hcmdzKSl9LFQpfWZ1bmN0aW9uIE5xKG0sdixUKXt2YXIgTj1tLmxlbmd0aDtpZihOPDIpcmV0dXJuIE4/eW0obVswXSk6W107Zm9yKHZhciBWPS0xLFk9dnQoTik7KytWPE47KWZvcih2YXIgSj1tW1ZdLGl0PS0xOysraXQ8TjspaXQhPVYmJihZW1ZdPUxNKFlbVl18fEosbVtpdF0sdixUKSk7cmV0dXJuIHltKFJvKFksMSksdixUKX1mdW5jdGlvbiB0cHQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPW0ubGVuZ3RoLFk9di5sZW5ndGgsSj17fTsrK048Vjspe3ZhciBpdD1OPFk/dltOXTplO1QoSixtW05dLGl0KX1yZXR1cm4gSn1mdW5jdGlvbiBEcShtKXtyZXR1cm4gYmkobSk/bTpbXX1mdW5jdGlvbiBPcShtKXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bTpnc31mdW5jdGlvbiB2bShtLHYpe3JldHVybiAkZShtKT9tOldxKG0sdik/W21dOlBwdChvbihtKSl9dmFyIFRtZT1ucjtmdW5jdGlvbiB4bShtLHYsVCl7dmFyIE49bS5sZW5ndGg7cmV0dXJuIFQ9VD09PWU/TjpULCF2JiZUPj1OP206amwobSx2LFQpfXZhciBlcHQ9cGRlfHxmdW5jdGlvbihtKXtyZXR1cm4gZm8uY2xlYXJUaW1lb3V0KG0pfTtmdW5jdGlvbiBycHQobSx2KXtpZih2KXJldHVybiBtLnNsaWNlKCk7dmFyIFQ9bS5sZW5ndGgsTj1TZnQ/U2Z0KFQpOm5ldyBtLmNvbnN0cnVjdG9yKFQpO3JldHVybiBtLmNvcHkoTiksTn1mdW5jdGlvbiB6cShtKXt2YXIgdj1uZXcgbS5jb25zdHJ1Y3RvcihtLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgWDYodikuc2V0KG5ldyBYNihtKSksdn1mdW5jdGlvbiBDbWUobSx2KXt2YXIgVD12P3pxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBBbWUobSl7dmFyIHY9bmV3IG0uY29uc3RydWN0b3IobS5zb3VyY2UsS2UuZXhlYyhtKSk7cmV0dXJuIHYubGFzdEluZGV4PW0ubGFzdEluZGV4LHZ9ZnVuY3Rpb24gUG1lKG0pe3JldHVybiBQTT92bihQTS5jYWxsKG0pKTp7fX1mdW5jdGlvbiBucHQobSx2KXt2YXIgVD12P3pxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5sZW5ndGgpfWZ1bmN0aW9uIGlwdChtLHYpe2lmKG0hPT12KXt2YXIgVD1tIT09ZSxOPW09PT1udWxsLFY9bT09PW0sWT1qcyhtKSxKPXYhPT1lLGl0PXY9PT1udWxsLGZ0PXY9PT12LER0PWpzKHYpO2lmKCFpdCYmIUR0JiYhWSYmbT52fHxZJiZKJiZmdCYmIWl0JiYhRHR8fE4mJkomJmZ0fHwhVCYmZnR8fCFWKXJldHVybiAxO2lmKCFOJiYhWSYmIUR0JiZtPHZ8fER0JiZUJiZWJiYhTiYmIVl8fGl0JiZUJiZWfHwhSiYmVnx8IWZ0KXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIEltZShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5jcml0ZXJpYSxZPXYuY3JpdGVyaWEsSj1WLmxlbmd0aCxpdD1ULmxlbmd0aDsrK048Sjspe3ZhciBmdD1pcHQoVltOXSxZW05dKTtpZihmdCl7aWYoTj49aXQpcmV0dXJuIGZ0O3ZhciBEdD1UW05dO3JldHVybiBmdCooRHQ9PSJkZXNjIj8tMToxKX19cmV0dXJuIG0uaW5kZXgtdi5pbmRleH1mdW5jdGlvbiBvcHQobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9bS5sZW5ndGgsSj1ULmxlbmd0aCxpdD0tMSxmdD12Lmxlbmd0aCxEdD1YaShZLUosMCksT3Q9dnQoZnQrRHQpLFZ0PSFOOysraXQ8ZnQ7KU90W2l0XT12W2l0XTtmb3IoOysrVjxKOykoVnR8fFY8WSkmJihPdFtUW1ZdXT1tW1ZdKTtmb3IoO0R0LS07KU90W2l0KytdPW1bVisrXTtyZXR1cm4gT3R9ZnVuY3Rpb24gYXB0KG0sdixULE4pe2Zvcih2YXIgVj0tMSxZPW0ubGVuZ3RoLEo9LTEsaXQ9VC5sZW5ndGgsZnQ9LTEsRHQ9di5sZW5ndGgsT3Q9WGkoWS1pdCwwKSxWdD12dChPdCtEdCksb2U9IU47KytWPE90OylWdFtWXT1tW1ZdO2Zvcih2YXIgVGU9VjsrK2Z0PER0OylWdFtUZStmdF09dltmdF07Zm9yKDsrK0o8aXQ7KShvZXx8VjxZKSYmKFZ0W1RlK1RbSl1dPW1bVisrXSk7cmV0dXJuIFZ0fWZ1bmN0aW9uIHBzKG0sdil7dmFyIFQ9LTEsTj1tLmxlbmd0aDtmb3Iodnx8KHY9dnQoTikpOysrVDxOOyl2W1RdPW1bVF07cmV0dXJuIHZ9ZnVuY3Rpb24gZ2gobSx2LFQsTil7dmFyIFY9IVQ7VHx8KFQ9e30pO2Zvcih2YXIgWT0tMSxKPXYubGVuZ3RoOysrWTxKOyl7dmFyIGl0PXZbWV0sZnQ9Tj9OKFRbaXRdLG1baXRdLGl0LFQsbSk6ZTtmdD09PWUmJihmdD1tW2l0XSksVj9hcChULGl0LGZ0KTpJTShULGl0LGZ0KX1yZXR1cm4gVH1mdW5jdGlvbiBMbWUobSx2KXtyZXR1cm4gZ2gobSxHcShtKSx2KX1mdW5jdGlvbiBrbWUobSx2KXtyZXR1cm4gZ2gobSx2cHQobSksdil9ZnVuY3Rpb24gY0kobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVj0kZShUKT96cGU6dG1lLFk9dj92KCk6e307cmV0dXJuIFYoVCxtLGtlKE4sMiksWSl9fWZ1bmN0aW9uIHZ4KG0pe3JldHVybiBucihmdW5jdGlvbih2LFQpe3ZhciBOPS0xLFY9VC5sZW5ndGgsWT1WPjE/VFtWLTFdOmUsSj1WPjI/VFsyXTplO2ZvcihZPW0ubGVuZ3RoPjMmJnR5cGVvZiBZPT0iZnVuY3Rpb24iPyhWLS0sWSk6ZSxKJiZrYShUWzBdLFRbMV0sSikmJihZPVY8Mz9lOlksVj0xKSx2PXZuKHYpOysrTjxWOyl7dmFyIGl0PVRbTl07aXQmJm0odixpdCxOLFkpfXJldHVybiB2fSl9ZnVuY3Rpb24gc3B0KG0sdil7cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD09bnVsbClyZXR1cm4gVDtpZighZHMoVCkpcmV0dXJuIG0oVCxOKTtmb3IodmFyIFY9VC5sZW5ndGgsWT12P1Y6LTEsSj12bihUKTsodj9ZLS06KytZPFYpJiZOKEpbWV0sWSxKKSE9PSExOyk7cmV0dXJuIFR9fWZ1bmN0aW9uIGxwdChtKXtyZXR1cm4gZnVuY3Rpb24odixULE4pe2Zvcih2YXIgVj0tMSxZPXZuKHYpLEo9Tih2KSxpdD1KLmxlbmd0aDtpdC0tOyl7dmFyIGZ0PUpbbT9pdDorK1ZdO2lmKFQoWVtmdF0sZnQsWSk9PT0hMSlicmVha31yZXR1cm4gdn19ZnVuY3Rpb24gUm1lKG0sdixUKXt2YXIgTj12JmQsVj1ETShtKTtmdW5jdGlvbiBZKCl7dmFyIEo9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgWT9WOm07cmV0dXJuIEouYXBwbHkoTj9UOnRoaXMsYXJndW1lbnRzKX1yZXR1cm4gWX1mdW5jdGlvbiBjcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3Y9b24odik7dmFyIFQ9cHgodik/dHUodik6ZSxOPVQ/VFswXTp2LmNoYXJBdCgwKSxWPVQ/eG0oVCwxKS5qb2luKCIiKTp2LnNsaWNlKDEpO3JldHVybiBOW21dKCkrVn19ZnVuY3Rpb24geHgobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBscShzZHQoYWR0KHYpLnJlcGxhY2UoU3BlLCIiKSksbSwiIil9fWZ1bmN0aW9uIERNKG0pe3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWFyZ3VtZW50cztzd2l0Y2godi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG07Y2FzZSAxOnJldHVybiBuZXcgbSh2WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSk7Y2FzZSA0OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSx2WzJdLHZbM10sdls0XSk7Y2FzZSA2OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSk7Y2FzZSA3OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSx2WzZdKX12YXIgVD15eChtLnByb3RvdHlwZSksTj1tLmFwcGx5KFQsdik7cmV0dXJuIHJpKE4pP046VH19ZnVuY3Rpb24gTm1lKG0sdixUKXt2YXIgTj1ETShtKTtmdW5jdGlvbiBWKCl7Zm9yKHZhciBZPWFyZ3VtZW50cy5sZW5ndGgsSj12dChZKSxpdD1ZLGZ0PWJ4KFYpO2l0LS07KUpbaXRdPWFyZ3VtZW50c1tpdF07dmFyIER0PVk8MyYmSlswXSE9PWZ0JiZKW1ktMV0hPT1mdD9bXTpkbShKLGZ0KTtpZihZLT1EdC5sZW5ndGgsWTxUKXJldHVybiBkcHQobSx2LHVJLFYucGxhY2Vob2xkZXIsZSxKLER0LGUsZSxULVkpO3ZhciBPdD10aGlzJiZ0aGlzIT09Zm8mJnRoaXMgaW5zdGFuY2VvZiBWP046bTtyZXR1cm4gR3MoT3QsdGhpcyxKKX1yZXR1cm4gVn1mdW5jdGlvbiB1cHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYsVCxOKXt2YXIgVj12bih2KTtpZighZHModikpe3ZhciBZPWtlKFQsMyk7dj1wbyh2KSxUPWZ1bmN0aW9uKGl0KXtyZXR1cm4gWShWW2l0XSxpdCxWKX19dmFyIEo9bSh2LFQsTik7cmV0dXJuIEo+LTE/VltZP3ZbSl06Sl06ZX19ZnVuY3Rpb24gaHB0KG0pe3JldHVybiBscChmdW5jdGlvbih2KXt2YXIgVD12Lmxlbmd0aCxOPVQsVj1XbC5wcm90b3R5cGUudGhydTtmb3IobSYmdi5yZXZlcnNlKCk7Ti0tOyl7dmFyIFk9dltOXTtpZih0eXBlb2YgWSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7aWYoViYmIUomJmRJKFkpPT0id3JhcHBlciIpdmFyIEo9bmV3IFdsKFtdLCEwKX1mb3IoTj1KP046VDsrK048VDspe1k9dltOXTt2YXIgaXQ9ZEkoWSksZnQ9aXQ9PSJ3cmFwcGVyIj9VcShZKTplO2Z0JiZZcShmdFswXSkmJmZ0WzFdPT0oQ3x5fGJ8UCkmJiFmdFs0XS5sZW5ndGgmJmZ0WzldPT0xP0o9SltkSShmdFswXSldLmFwcGx5KEosZnRbM10pOko9WS5sZW5ndGg9PTEmJllxKFkpP0pbaXRdKCk6Si50aHJ1KFkpfXJldHVybiBmdW5jdGlvbigpe3ZhciBEdD1hcmd1bWVudHMsT3Q9RHRbMF07aWYoSiYmRHQubGVuZ3RoPT0xJiYkZShPdCkpcmV0dXJuIEoucGxhbnQoT3QpLnZhbHVlKCk7Zm9yKHZhciBWdD0wLG9lPVQ/dltWdF0uYXBwbHkodGhpcyxEdCk6T3Q7KytWdDxUOylvZT12W1Z0XS5jYWxsKHRoaXMsb2UpO3JldHVybiBvZX19KX1mdW5jdGlvbiB1SShtLHYsVCxOLFYsWSxKLGl0LGZ0LER0KXt2YXIgT3Q9diZDLFZ0PXYmZCxvZT12JmcsVGU9diYoeXx4KSxOZT12JmssZXI9b2U/ZTpETShtKTtmdW5jdGlvbiBEZSgpe2Zvcih2YXIgcHI9YXJndW1lbnRzLmxlbmd0aCx5cj12dChwciksWHM9cHI7WHMtLTspeXJbWHNdPWFyZ3VtZW50c1tYc107aWYoVGUpdmFyIFJhPWJ4KERlKSwkcz1ZcGUoeXIsUmEpO2lmKE4mJih5cj1vcHQoeXIsTixWLFRlKSksWSYmKHlyPWFwdCh5cixZLEosVGUpKSxwci09JHMsVGUmJnByPER0KXt2YXIgd2k9ZG0oeXIsUmEpO3JldHVybiBkcHQobSx2LHVJLERlLnBsYWNlaG9sZGVyLFQseXIsd2ksaXQsZnQsRHQtcHIpfXZhciBudT1WdD9UOnRoaXMsZnA9b2U/bnVbbV06bTtyZXR1cm4gcHI9eXIubGVuZ3RoLGl0P3lyPXRnZSh5cixpdCk6TmUmJnByPjEmJnlyLnJldmVyc2UoKSxPdCYmZnQ8cHImJih5ci5sZW5ndGg9ZnQpLHRoaXMmJnRoaXMhPT1mbyYmdGhpcyBpbnN0YW5jZW9mIERlJiYoZnA9ZXJ8fERNKGZwKSksZnAuYXBwbHkobnUseXIpfXJldHVybiBEZX1mdW5jdGlvbiBmcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXtyZXR1cm4gbG1lKFQsbSx2KE4pLHt9KX19ZnVuY3Rpb24gaEkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVjtpZihUPT09ZSYmTj09PWUpcmV0dXJuIHY7aWYoVCE9PWUmJihWPVQpLE4hPT1lKXtpZihWPT09ZSlyZXR1cm4gTjt0eXBlb2YgVD09InN0cmluZyJ8fHR5cGVvZiBOPT0ic3RyaW5nIj8oVD1ZcyhUKSxOPVlzKE4pKTooVD1aZnQoVCksTj1aZnQoTikpLFY9bShULE4pfXJldHVybiBWfX1mdW5jdGlvbiBGcShtKXtyZXR1cm4gbHAoZnVuY3Rpb24odil7cmV0dXJuIHY9S24odixXcyhrZSgpKSksbnIoZnVuY3Rpb24oVCl7dmFyIE49dGhpcztyZXR1cm4gbSh2LGZ1bmN0aW9uKFYpe3JldHVybiBHcyhWLE4sVCl9KX0pfSl9ZnVuY3Rpb24gZkkobSx2KXt2PXY9PT1lPyIgIjpZcyh2KTt2YXIgVD12Lmxlbmd0aDtpZihUPDIpcmV0dXJuIFQ/THEodixtKTp2O3ZhciBOPUxxKHYsSjYobS9keCh2KSkpO3JldHVybiBweCh2KT94bSh0dShOKSwwLG0pLmpvaW4oIiIpOk4uc2xpY2UoMCxtKX1mdW5jdGlvbiBEbWUobSx2LFQsTil7dmFyIFY9diZkLFk9RE0obSk7ZnVuY3Rpb24gSigpe2Zvcih2YXIgaXQ9LTEsZnQ9YXJndW1lbnRzLmxlbmd0aCxEdD0tMSxPdD1OLmxlbmd0aCxWdD12dChPdCtmdCksb2U9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgSj9ZOm07KytEdDxPdDspVnRbRHRdPU5bRHRdO2Zvcig7ZnQtLTspVnRbRHQrK109YXJndW1lbnRzWysraXRdO3JldHVybiBHcyhvZSxWP1Q6dGhpcyxWdCl9cmV0dXJuIEp9ZnVuY3Rpb24gcHB0KG0pe3JldHVybiBmdW5jdGlvbih2LFQsTil7cmV0dXJuIE4mJnR5cGVvZiBOIT0ibnVtYmVyIiYma2EodixULE4pJiYoVD1OPWUpLHY9aHAodiksVD09PWU/KFQ9dix2PTApOlQ9aHAoVCksTj1OPT09ZT92PFQ/MTotMTpocChOKSx4bWUodixULE4sbSl9fWZ1bmN0aW9uIHBJKG0pe3JldHVybiBmdW5jdGlvbih2LFQpe3JldHVybiB0eXBlb2Ygdj09InN0cmluZyImJnR5cGVvZiBUPT0ic3RyaW5nInx8KHY9JGwodiksVD0kbChUKSksbSh2LFQpfX1mdW5jdGlvbiBkcHQobSx2LFQsTixWLFksSixpdCxmdCxEdCl7dmFyIE90PXYmeSxWdD1PdD9KOmUsb2U9T3Q/ZTpKLFRlPU90P1k6ZSxOZT1PdD9lOlk7dnw9T3Q/YjpTLHYmPX4oT3Q/UzpiKSx2Jl98fCh2Jj1+KGR8ZykpO3ZhciBlcj1bbSx2LFYsVGUsVnQsTmUsb2UsaXQsZnQsRHRdLERlPVQuYXBwbHkoZSxlcik7cmV0dXJuIFlxKG0pJiZUcHQoRGUsZXIpLERlLnBsYWNlaG9sZGVyPU4sQ3B0KERlLG0sdil9ZnVuY3Rpb24gQnEobSl7dmFyIHY9amlbbV07cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD0kbChUKSxOPU49PW51bGw/MDpyYShRZShOKSwyOTIpLE4mJkNmdChUKSl7dmFyIFY9KG9uKFQpKyJlIikuc3BsaXQoImUiKSxZPXYoVlswXSsiZSIrKCtWWzFdK04pKTtyZXR1cm4gVj0ob24oWSkrImUiKS5zcGxpdCgiZSIpLCsoVlswXSsiZSIrKCtWWzFdLU4pKX1yZXR1cm4gdihUKX19dmFyIE9tZT1neCYmMS9VNihuZXcgZ3goWywtMF0pKVsxXT09ej9mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGd4KG0pfTpzRztmdW5jdGlvbiBtcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3ZhciBUPW5hKHYpO3JldHVybiBUPT1xP21xKHYpOlQ9PUxlP1FwZSh2KTpXcGUodixtKHYpKX19ZnVuY3Rpb24gc3AobSx2LFQsTixWLFksSixpdCl7dmFyIGZ0PXYmZztpZighZnQmJnR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2YXIgRHQ9Tj9OLmxlbmd0aDowO2lmKER0fHwodiY9fihifFMpLE49Vj1lKSxKPUo9PT1lP0o6WGkoUWUoSiksMCksaXQ9aXQ9PT1lP2l0OlFlKGl0KSxEdC09Vj9WLmxlbmd0aDowLHYmUyl7dmFyIE90PU4sVnQ9VjtOPVY9ZX12YXIgb2U9ZnQ/ZTpVcShtKSxUZT1bbSx2LFQsTixWLE90LFZ0LFksSixpdF07aWYob2UmJlptZShUZSxvZSksbT1UZVswXSx2PVRlWzFdLFQ9VGVbMl0sTj1UZVszXSxWPVRlWzRdLGl0PVRlWzldPVRlWzldPT09ZT9mdD8wOm0ubGVuZ3RoOlhpKFRlWzldLUR0LDApLCFpdCYmdiYoeXx4KSYmKHYmPX4oeXx4KSksIXZ8fHY9PWQpdmFyIE5lPVJtZShtLHYsVCk7ZWxzZSB2PT15fHx2PT14P05lPU5tZShtLHYsaXQpOih2PT1ifHx2PT0oZHxiKSkmJiFWLmxlbmd0aD9OZT1EbWUobSx2LFQsTik6TmU9dUkuYXBwbHkoZSxUZSk7dmFyIGVyPW9lPyRmdDpUcHQ7cmV0dXJuIENwdChlcihOZSxUZSksbSx2KX1mdW5jdGlvbiBncHQobSx2LFQsTil7cmV0dXJuIG09PT1lfHxydShtLG14W1RdKSYmIXVuLmNhbGwoTixUKT92Om19ZnVuY3Rpb24gX3B0KG0sdixULE4sVixZKXtyZXR1cm4gcmkobSkmJnJpKHYpJiYoWS5zZXQodixtKSxhSShtLHYsZSxfcHQsWSksWS5kZWxldGUodikpLG19ZnVuY3Rpb24gem1lKG0pe3JldHVybiBGTShtKT9lOm19ZnVuY3Rpb24geXB0KG0sdixULE4sVixZKXt2YXIgSj1UJmYsaXQ9bS5sZW5ndGgsZnQ9di5sZW5ndGg7aWYoaXQhPWZ0JiYhKEomJmZ0Pml0KSlyZXR1cm4hMTt2YXIgRHQ9WS5nZXQobSksT3Q9WS5nZXQodik7aWYoRHQmJk90KXJldHVybiBEdD09diYmT3Q9PW07dmFyIFZ0PS0xLG9lPSEwLFRlPVQmcD9uZXcgcl86ZTtmb3IoWS5zZXQobSx2KSxZLnNldCh2LG0pOysrVnQ8aXQ7KXt2YXIgTmU9bVtWdF0sZXI9dltWdF07aWYoTil2YXIgRGU9Sj9OKGVyLE5lLFZ0LHYsbSxZKTpOKE5lLGVyLFZ0LG0sdixZKTtpZihEZSE9PWUpe2lmKERlKWNvbnRpbnVlO29lPSExO2JyZWFrfWlmKFRlKXtpZighY3EodixmdW5jdGlvbihwcix5cil7aWYoIU1NKFRlLHlyKSYmKE5lPT09cHJ8fFYoTmUscHIsVCxOLFkpKSlyZXR1cm4gVGUucHVzaCh5cil9KSl7b2U9ITE7YnJlYWt9fWVsc2UgaWYoIShOZT09PWVyfHxWKE5lLGVyLFQsTixZKSkpe29lPSExO2JyZWFrfX1yZXR1cm4gWS5kZWxldGUobSksWS5kZWxldGUodiksb2V9ZnVuY3Rpb24gRm1lKG0sdixULE4sVixZLEope3N3aXRjaChUKXtjYXNlIGhlOmlmKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHxtLmJ5dGVPZmZzZXQhPXYuYnl0ZU9mZnNldClyZXR1cm4hMTttPW0uYnVmZmVyLHY9di5idWZmZXI7Y2FzZSAkdDpyZXR1cm4hKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHwhWShuZXcgWDYobSksbmV3IFg2KHYpKSk7Y2FzZSBLdDpjYXNlIF90OmNhc2UgcHQ6cmV0dXJuIHJ1KCttLCt2KTtjYXNlIFg6cmV0dXJuIG0ubmFtZT09di5uYW1lJiZtLm1lc3NhZ2U9PXYubWVzc2FnZTtjYXNlIGVlOmNhc2UgYXI6cmV0dXJuIG09PXYrIiI7Y2FzZSBxOnZhciBpdD1tcTtjYXNlIExlOnZhciBmdD1OJmY7aWYoaXR8fChpdD1VNiksbS5zaXplIT12LnNpemUmJiFmdClyZXR1cm4hMTt2YXIgRHQ9Si5nZXQobSk7aWYoRHQpcmV0dXJuIER0PT12O058PXAsSi5zZXQobSx2KTt2YXIgT3Q9eXB0KGl0KG0pLGl0KHYpLE4sVixZLEopO3JldHVybiBKLmRlbGV0ZShtKSxPdDtjYXNlIGZyOmlmKFBNKXJldHVybiBQTS5jYWxsKG0pPT1QTS5jYWxsKHYpfXJldHVybiExfWZ1bmN0aW9uIEJtZShtLHYsVCxOLFYsWSl7dmFyIEo9VCZmLGl0PUhxKG0pLGZ0PWl0Lmxlbmd0aCxEdD1IcSh2KSxPdD1EdC5sZW5ndGg7aWYoZnQhPU90JiYhSilyZXR1cm4hMTtmb3IodmFyIFZ0PWZ0O1Z0LS07KXt2YXIgb2U9aXRbVnRdO2lmKCEoSj9vZSBpbiB2OnVuLmNhbGwodixvZSkpKXJldHVybiExfXZhciBUZT1ZLmdldChtKSxOZT1ZLmdldCh2KTtpZihUZSYmTmUpcmV0dXJuIFRlPT12JiZOZT09bTt2YXIgZXI9ITA7WS5zZXQobSx2KSxZLnNldCh2LG0pO2Zvcih2YXIgRGU9SjsrK1Z0PGZ0Oyl7b2U9aXRbVnRdO3ZhciBwcj1tW29lXSx5cj12W29lXTtpZihOKXZhciBYcz1KP04oeXIscHIsb2UsdixtLFkpOk4ocHIseXIsb2UsbSx2LFkpO2lmKCEoWHM9PT1lP3ByPT09eXJ8fFYocHIseXIsVCxOLFkpOlhzKSl7ZXI9ITE7YnJlYWt9RGV8fChEZT1vZT09ImNvbnN0cnVjdG9yIil9aWYoZXImJiFEZSl7dmFyIFJhPW0uY29uc3RydWN0b3IsJHM9di5jb25zdHJ1Y3RvcjtSYSE9JHMmJiJjb25zdHJ1Y3RvciJpbiBtJiYiY29uc3RydWN0b3IiaW4gdiYmISh0eXBlb2YgUmE9PSJmdW5jdGlvbiImJlJhIGluc3RhbmNlb2YgUmEmJnR5cGVvZiAkcz09ImZ1bmN0aW9uIiYmJHMgaW5zdGFuY2VvZiAkcykmJihlcj0hMSl9cmV0dXJuIFkuZGVsZXRlKG0pLFkuZGVsZXRlKHYpLGVyfWZ1bmN0aW9uIGxwKG0pe3JldHVybiBYcShNcHQobSxlLFJwdCksbSsiIil9ZnVuY3Rpb24gSHEobSl7cmV0dXJuIEZmdChtLHBvLEdxKX1mdW5jdGlvbiBWcShtKXtyZXR1cm4gRmZ0KG0sbXMsdnB0KX12YXIgVXE9dEk/ZnVuY3Rpb24obSl7cmV0dXJuIHRJLmdldChtKX06c0c7ZnVuY3Rpb24gZEkobSl7Zm9yKHZhciB2PW0ubmFtZSsiIixUPV94W3ZdLE49dW4uY2FsbChfeCx2KT9ULmxlbmd0aDowO04tLTspe3ZhciBWPVRbTl0sWT1WLmZ1bmM7aWYoWT09bnVsbHx8WT09bSlyZXR1cm4gVi5uYW1lfXJldHVybiB2fWZ1bmN0aW9uIGJ4KG0pe3ZhciB2PXVuLmNhbGwoRywicGxhY2Vob2xkZXIiKT9HOm07cmV0dXJuIHYucGxhY2Vob2xkZXJ9ZnVuY3Rpb24ga2UoKXt2YXIgbT1HLml0ZXJhdGVlfHxvRztyZXR1cm4gbT1tPT09b0c/VmZ0Om0sYXJndW1lbnRzLmxlbmd0aD9tKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOm19ZnVuY3Rpb24gbUkobSx2KXt2YXIgVD1tLl9fZGF0YV9fO3JldHVybiBqbWUodik/VFt0eXBlb2Ygdj09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpULm1hcH1mdW5jdGlvbiBxcShtKXtmb3IodmFyIHY9cG8obSksVD12Lmxlbmd0aDtULS07KXt2YXIgTj12W1RdLFY9bVtOXTt2W1RdPVtOLFYsd3B0KFYpXX1yZXR1cm4gdn1mdW5jdGlvbiBvXyhtLHYpe3ZhciBUPUtwZShtLHYpO3JldHVybiBIZnQoVCk/VDplfWZ1bmN0aW9uIEhtZShtKXt2YXIgdj11bi5jYWxsKG0sdF8pLFQ9bVt0X107dHJ5e21bdF9dPWU7dmFyIE49ITB9Y2F0Y2goWSl7fXZhciBWPVk2LmNhbGwobSk7cmV0dXJuIE4mJih2P21bdF9dPVQ6ZGVsZXRlIG1bdF9dKSxWfXZhciBHcT1fcT9mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD9bXToobT12bihtKSxmbShfcShtKSxmdW5jdGlvbih2KXtyZXR1cm4gRWZ0LmNhbGwobSx2KX0pKX06bEcsdnB0PV9xP2Z1bmN0aW9uKG0pe2Zvcih2YXIgdj1bXTttOylwbSh2LEdxKG0pKSxtPSQ2KG0pO3JldHVybiB2fTpsRyxuYT1MYTsoeXEmJm5hKG5ldyB5cShuZXcgQXJyYXlCdWZmZXIoMSkpKSE9aGV8fFRNJiZuYShuZXcgVE0pIT1xfHx2cSYmbmEodnEucmVzb2x2ZSgpKSE9a3R8fGd4JiZuYShuZXcgZ3gpIT1MZXx8Q00mJm5hKG5ldyBDTSkhPSQpJiYobmE9ZnVuY3Rpb24obSl7dmFyIHY9TGEobSksVD12PT13dD9tLmNvbnN0cnVjdG9yOmUsTj1UP2FfKFQpOiIiO2lmKE4pc3dpdGNoKE4pe2Nhc2Ugd2RlOnJldHVybiBoZTtjYXNlIFNkZTpyZXR1cm4gcTtjYXNlIE1kZTpyZXR1cm4ga3Q7Y2FzZSBFZGU6cmV0dXJuIExlO2Nhc2UgVGRlOnJldHVybiAkfXJldHVybiB2fSk7ZnVuY3Rpb24gVm1lKG0sdixUKXtmb3IodmFyIE49LTEsVj1ULmxlbmd0aDsrK048Vjspe3ZhciBZPVRbTl0sSj1ZLnNpemU7c3dpdGNoKFkudHlwZSl7Y2FzZSJkcm9wIjptKz1KO2JyZWFrO2Nhc2UiZHJvcFJpZ2h0Ijp2LT1KO2JyZWFrO2Nhc2UidGFrZSI6dj1yYSh2LG0rSik7YnJlYWs7Y2FzZSJ0YWtlUmlnaHQiOm09WGkobSx2LUopO2JyZWFrfX1yZXR1cm57c3RhcnQ6bSxlbmQ6dn19ZnVuY3Rpb24gVW1lKG0pe3ZhciB2PW0ubWF0Y2goRXQpO3JldHVybiB2P3ZbMV0uc3BsaXQoeHQpOltdfWZ1bmN0aW9uIHhwdChtLHYsVCl7dj12bSh2LG0pO2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9ITE7KytOPFY7KXt2YXIgSj1faCh2W05dKTtpZighKFk9bSE9bnVsbCYmVChtLEopKSlicmVhazttPW1bSl19cmV0dXJuIFl8fCsrTiE9Vj9ZOihWPW09PW51bGw/MDptLmxlbmd0aCwhIVYmJndJKFYpJiZjcChKLFYpJiYoJGUobSl8fHNfKG0pKSl9ZnVuY3Rpb24gcW1lKG0pe3ZhciB2PW0ubGVuZ3RoLFQ9bmV3IG0uY29uc3RydWN0b3Iodik7cmV0dXJuIHYmJnR5cGVvZiBtWzBdPT0ic3RyaW5nIiYmdW4uY2FsbChtLCJpbmRleCIpJiYoVC5pbmRleD1tLmluZGV4LFQuaW5wdXQ9bS5pbnB1dCksVH1mdW5jdGlvbiBicHQobSl7cmV0dXJuIHR5cGVvZiBtLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhT00obSk/eXgoJDYobSkpOnt9fWZ1bmN0aW9uIEdtZShtLHYsVCl7dmFyIE49bS5jb25zdHJ1Y3Rvcjtzd2l0Y2godil7Y2FzZSAkdDpyZXR1cm4genEobSk7Y2FzZSBLdDpjYXNlIF90OnJldHVybiBuZXcgTigrbSk7Y2FzZSBoZTpyZXR1cm4gQ21lKG0sVCk7Y2FzZSBUdDpjYXNlIGJlOmNhc2UgbnQ6Y2FzZSBDdDpjYXNlIFd0OmNhc2UgZmU6Y2FzZSBhdDpjYXNlIHNlOmNhc2UgUXQ6cmV0dXJuIG5wdChtLFQpO2Nhc2UgcTpyZXR1cm4gbmV3IE47Y2FzZSBwdDpjYXNlIGFyOnJldHVybiBuZXcgTihtKTtjYXNlIGVlOnJldHVybiBBbWUobSk7Y2FzZSBMZTpyZXR1cm4gbmV3IE47Y2FzZSBmcjpyZXR1cm4gUG1lKG0pfX1mdW5jdGlvbiBXbWUobSx2KXt2YXIgVD12Lmxlbmd0aDtpZighVClyZXR1cm4gbTt2YXIgTj1ULTE7cmV0dXJuIHZbTl09KFQ+MT8iJiAiOiIiKSt2W05dLHY9di5qb2luKFQ+Mj8iLCAiOiIgIiksbS5yZXBsYWNlKGd0LGB7Ci8qIFt3cmFwcGVkIHdpdGggYCt2K2BdICovCmApfWZ1bmN0aW9uIFltZShtKXtyZXR1cm4gJGUobSl8fHNfKG0pfHwhIShUZnQmJm0mJm1bVGZ0XSl9ZnVuY3Rpb24gY3AobSx2KXt2YXIgVD10eXBlb2YgbTtyZXR1cm4gdj12PT1udWxsP1U6diwhIXYmJihUPT0ibnVtYmVyInx8VCE9InN5bWJvbCImJm5wLnRlc3QobSkpJiZtPi0xJiZtJTE9PTAmJm08dn1mdW5jdGlvbiBrYShtLHYsVCl7aWYoIXJpKFQpKXJldHVybiExO3ZhciBOPXR5cGVvZiB2O3JldHVybihOPT0ibnVtYmVyIj9kcyhUKSYmY3AodixULmxlbmd0aCk6Tj09InN0cmluZyImJnYgaW4gVCk/cnUoVFt2XSxtKTohMX1mdW5jdGlvbiBXcShtLHYpe2lmKCRlKG0pKXJldHVybiExO3ZhciBUPXR5cGVvZiBtO3JldHVybiBUPT0ibnVtYmVyInx8VD09InN5bWJvbCJ8fFQ9PSJib29sZWFuInx8bT09bnVsbHx8anMobSk/ITA6Y20udGVzdChtKXx8IWx4LnRlc3QobSl8fHYhPW51bGwmJm0gaW4gdm4odil9ZnVuY3Rpb24gam1lKG0pe3ZhciB2PXR5cGVvZiBtO3JldHVybiB2PT0ic3RyaW5nInx8dj09Im51bWJlciJ8fHY9PSJzeW1ib2wifHx2PT0iYm9vbGVhbiI/bSE9PSJfX3Byb3RvX18iOm09PT1udWxsfWZ1bmN0aW9uIFlxKG0pe3ZhciB2PWRJKG0pLFQ9R1t2XTtpZih0eXBlb2YgVCE9ImZ1bmN0aW9uInx8ISh2IGluIGdyLnByb3RvdHlwZSkpcmV0dXJuITE7aWYobT09PVQpcmV0dXJuITA7dmFyIE49VXEoVCk7cmV0dXJuISFOJiZtPT09TlswXX1mdW5jdGlvbiBYbWUobSl7cmV0dXJuISF3ZnQmJndmdCBpbiBtfXZhciAkbWU9RzY/dXA6Y0c7ZnVuY3Rpb24gT00obSl7dmFyIHY9bSYmbS5jb25zdHJ1Y3RvcixUPXR5cGVvZiB2PT0iZnVuY3Rpb24iJiZ2LnByb3RvdHlwZXx8bXg7cmV0dXJuIG09PT1UfWZ1bmN0aW9uIHdwdChtKXtyZXR1cm4gbT09PW0mJiFyaShtKX1mdW5jdGlvbiBTcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFQ9PW51bGw/ITE6VFttXT09PXYmJih2IT09ZXx8bSBpbiB2bihUKSl9fWZ1bmN0aW9uIEttZShtKXt2YXIgdj14SShtLGZ1bmN0aW9uKE4pe3JldHVybiBULnNpemU9PT1zJiZULmNsZWFyKCksTn0pLFQ9di5jYWNoZTtyZXR1cm4gdn1mdW5jdGlvbiBabWUobSx2KXt2YXIgVD1tWzFdLE49dlsxXSxWPVR8TixZPVY8KGR8Z3xDKSxKPU49PUMmJlQ9PXl8fE49PUMmJlQ9PVAmJm1bN10ubGVuZ3RoPD12WzhdfHxOPT0oQ3xQKSYmdls3XS5sZW5ndGg8PXZbOF0mJlQ9PXk7aWYoIShZfHxKKSlyZXR1cm4gbTtOJmQmJihtWzJdPXZbMl0sVnw9VCZkPzA6Xyk7dmFyIGl0PXZbM107aWYoaXQpe3ZhciBmdD1tWzNdO21bM109ZnQ/b3B0KGZ0LGl0LHZbNF0pOml0LG1bNF09ZnQ/ZG0obVszXSxsKTp2WzRdfXJldHVybiBpdD12WzVdLGl0JiYoZnQ9bVs1XSxtWzVdPWZ0P2FwdChmdCxpdCx2WzZdKTppdCxtWzZdPWZ0P2RtKG1bNV0sbCk6dls2XSksaXQ9dls3XSxpdCYmKG1bN109aXQpLE4mQyYmKG1bOF09bVs4XT09bnVsbD92WzhdOnJhKG1bOF0sdls4XSkpLG1bOV09PW51bGwmJihtWzldPXZbOV0pLG1bMF09dlswXSxtWzFdPVYsbX1mdW5jdGlvbiBKbWUobSl7dmFyIHY9W107aWYobSE9bnVsbClmb3IodmFyIFQgaW4gdm4obSkpdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIFFtZShtKXtyZXR1cm4gWTYuY2FsbChtKX1mdW5jdGlvbiBNcHQobSx2LFQpe3JldHVybiB2PVhpKHY9PT1lP20ubGVuZ3RoLTE6diwwKSxmdW5jdGlvbigpe2Zvcih2YXIgTj1hcmd1bWVudHMsVj0tMSxZPVhpKE4ubGVuZ3RoLXYsMCksSj12dChZKTsrK1Y8WTspSltWXT1OW3YrVl07Vj0tMTtmb3IodmFyIGl0PXZ0KHYrMSk7KytWPHY7KWl0W1ZdPU5bVl07cmV0dXJuIGl0W3ZdPVQoSiksR3MobSx0aGlzLGl0KX19ZnVuY3Rpb24gRXB0KG0sdil7cmV0dXJuIHYubGVuZ3RoPDI/bTppXyhtLGpsKHYsMCwtMSkpfWZ1bmN0aW9uIHRnZShtLHYpe2Zvcih2YXIgVD1tLmxlbmd0aCxOPXJhKHYubGVuZ3RoLFQpLFY9cHMobSk7Ti0tOyl7dmFyIFk9dltOXTttW05dPWNwKFksVCk/VltZXTplfXJldHVybiBtfWZ1bmN0aW9uIGpxKG0sdil7aWYoISh2PT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIG1bdl09PSJmdW5jdGlvbiIpJiZ2IT0iX19wcm90b19fIilyZXR1cm4gbVt2XX12YXIgVHB0PUFwdCgkZnQpLHpNPW1kZXx8ZnVuY3Rpb24obSx2KXtyZXR1cm4gZm8uc2V0VGltZW91dChtLHYpfSxYcT1BcHQoU21lKTtmdW5jdGlvbiBDcHQobSx2LFQpe3ZhciBOPXYrIiI7cmV0dXJuIFhxKG0sV21lKE4sZWdlKFVtZShOKSxUKSkpfWZ1bmN0aW9uIEFwdChtKXt2YXIgdj0wLFQ9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgTj12ZGUoKSxWPUktKE4tVCk7aWYoVD1OLFY+MCl7aWYoKyt2Pj1CKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB2PTA7cmV0dXJuIG0uYXBwbHkoZSxhcmd1bWVudHMpfX1mdW5jdGlvbiBnSShtLHYpe3ZhciBUPS0xLE49bS5sZW5ndGgsVj1OLTE7Zm9yKHY9dj09PWU/Tjp2OysrVDx2Oyl7dmFyIFk9SXEoVCxWKSxKPW1bWV07bVtZXT1tW1RdLG1bVF09Sn1yZXR1cm4gbS5sZW5ndGg9dixtfXZhciBQcHQ9S21lKGZ1bmN0aW9uKG0pe3ZhciB2PVtdO3JldHVybiBtLmNoYXJDb2RlQXQoMCk9PT00NiYmdi5wdXNoKCIiKSxtLnJlcGxhY2UoSjAsZnVuY3Rpb24oVCxOLFYsWSl7di5wdXNoKFY/WS5yZXBsYWNlKFVlLCIkMSIpOk58fFQpfSksdn0pO2Z1bmN0aW9uIF9oKG0pe2lmKHR5cGVvZiBtPT0ic3RyaW5nInx8anMobSkpcmV0dXJuIG07dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiBhXyhtKXtpZihtIT1udWxsKXt0cnl7cmV0dXJuIFc2LmNhbGwobSl9Y2F0Y2godil7fXRyeXtyZXR1cm4gbSsiIn1jYXRjaCh2KXt9fXJldHVybiIifWZ1bmN0aW9uIGVnZShtLHYpe3JldHVybiBxbChTdCxmdW5jdGlvbihUKXt2YXIgTj0iXy4iK1RbMF07diZUWzFdJiYhSDYobSxOKSYmbS5wdXNoKE4pfSksbS5zb3J0KCl9ZnVuY3Rpb24gSXB0KG0pe2lmKG0gaW5zdGFuY2VvZiBncilyZXR1cm4gbS5jbG9uZSgpO3ZhciB2PW5ldyBXbChtLl9fd3JhcHBlZF9fLG0uX19jaGFpbl9fKTtyZXR1cm4gdi5fX2FjdGlvbnNfXz1wcyhtLl9fYWN0aW9uc19fKSx2Ll9faW5kZXhfXz1tLl9faW5kZXhfXyx2Ll9fdmFsdWVzX189bS5fX3ZhbHVlc19fLHZ9ZnVuY3Rpb24gcmdlKG0sdixUKXsoVD9rYShtLHYsVCk6dj09PWUpP3Y9MTp2PVhpKFFlKHYpLDApO3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTnx8djwxKXJldHVybltdO2Zvcih2YXIgVj0wLFk9MCxKPXZ0KEo2KE4vdikpO1Y8TjspSltZKytdPWpsKG0sVixWKz12KTtyZXR1cm4gSn1mdW5jdGlvbiBuZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49MCxWPVtdOysrdjxUOyl7dmFyIFk9bVt2XTtZJiYoVltOKytdPVkpfXJldHVybiBWfWZ1bmN0aW9uIGlnZSgpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg7aWYoIW0pcmV0dXJuW107Zm9yKHZhciB2PXZ0KG0tMSksVD1hcmd1bWVudHNbMF0sTj1tO04tLTspdltOLTFdPWFyZ3VtZW50c1tOXTtyZXR1cm4gcG0oJGUoVCk/cHMoVCk6W1RdLFJvKHYsMSkpfXZhciBvZ2U9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gYmkobSk/TE0obSxSbyh2LDEsYmksITApKTpbXX0pLGFnZT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPVhsKHYpO3JldHVybiBiaShUKSYmKFQ9ZSksYmkobSk/TE0obSxSbyh2LDEsYmksITApLGtlKFQsMikpOltdfSksc2dlPW5yKGZ1bmN0aW9uKG0sdil7dmFyIFQ9WGwodik7cmV0dXJuIGJpKFQpJiYoVD1lKSxiaShtKT9MTShtLFJvKHYsMSxiaSwhMCksZSxUKTpbXX0pO2Z1bmN0aW9uIGxnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBjZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gTj8odj1UfHx2PT09ZT8xOlFlKHYpLHY9Ti12LGpsKG0sMCx2PDA/MDp2KSk6W119ZnVuY3Rpb24gdWdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2xJKG0sa2UodiwzKSwhMCwhMCk6W119ZnVuY3Rpb24gaGdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2xJKG0sa2UodiwzKSwhMCk6W119ZnVuY3Rpb24gZmdlKG0sdixULE4pe3ZhciBWPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gVj8oVCYmdHlwZW9mIFQhPSJudW1iZXIiJiZrYShtLHYsVCkmJihUPTAsTj1WKSxpbWUobSx2LFQsTikpOltdfWZ1bmN0aW9uIExwdChtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO2lmKCFOKXJldHVybi0xO3ZhciBWPVQ9PW51bGw/MDpRZShUKTtyZXR1cm4gVjwwJiYoVj1YaShOK1YsMCkpLFY2KG0sa2UodiwzKSxWKX1mdW5jdGlvbiBrcHQobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1OLTE7cmV0dXJuIFQhPT1lJiYoVj1RZShUKSxWPVQ8MD9YaShOK1YsMCk6cmEoVixOLTEpKSxWNihtLGtlKHYsMyksViwhMCl9ZnVuY3Rpb24gUnB0KG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9SbyhtLDEpOltdfWZ1bmN0aW9uIHBnZShtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/Um8obSx6KTpbXX1mdW5jdGlvbiBkZ2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIFQ/KHY9dj09PWU/MTpRZSh2KSxSbyhtLHYpKTpbXX1mdW5jdGlvbiBtZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49e307Kyt2PFQ7KXt2YXIgVj1tW3ZdO05bVlswXV09VlsxXX1yZXR1cm4gTn1mdW5jdGlvbiBOcHQobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP21bMF06ZX1mdW5jdGlvbiBnZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1UPT1udWxsPzA6UWUoVCk7cmV0dXJuIFY8MCYmKFY9WGkoTitWLDApKSxmeChtLHYsVil9ZnVuY3Rpb24gX2dlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDAsLTEpOltdfXZhciB5Z2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9S24obSxEcSk7cmV0dXJuIHYubGVuZ3RoJiZ2WzBdPT09bVswXT9FcSh2KTpbXX0pLHZnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKSxUPUtuKG0sRHEpO3JldHVybiB2PT09WGwoVCk/dj1lOlQucG9wKCksVC5sZW5ndGgmJlRbMF09PT1tWzBdP0VxKFQsa2UodiwyKSk6W119KSx4Z2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSksVD1LbihtLERxKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsdiYmVC5wb3AoKSxULmxlbmd0aCYmVFswXT09PW1bMF0/RXEoVCxlLHYpOltdfSk7ZnVuY3Rpb24gYmdlKG0sdil7cmV0dXJuIG09PW51bGw/IiI6X2RlLmNhbGwobSx2KX1mdW5jdGlvbiBYbChtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/bVt2LTFdOmV9ZnVuY3Rpb24gd2dlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7aWYoIU4pcmV0dXJuLTE7dmFyIFY9TjtyZXR1cm4gVCE9PWUmJihWPVFlKFQpLFY9VjwwP1hpKE4rViwwKTpyYShWLE4tMSkpLHY9PT12P2VkZShtLHYsVik6VjYobSxkZnQsViwhMCl9ZnVuY3Rpb24gU2dlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP1dmdChtLFFlKHYpKTplfXZhciBNZ2U9bnIoRHB0KTtmdW5jdGlvbiBEcHQobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP1BxKG0sdik6bX1mdW5jdGlvbiBFZ2UobSx2LFQpe3JldHVybiBtJiZtLmxlbmd0aCYmdiYmdi5sZW5ndGg/UHEobSx2LGtlKFQsMikpOm19ZnVuY3Rpb24gVGdlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP1BxKG0sdixlLFQpOm19dmFyIENnZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aCxOPWJxKG0sdik7cmV0dXJuIFhmdChtLEtuKHYsZnVuY3Rpb24oVil7cmV0dXJuIGNwKFYsVCk/K1Y6Vn0pLnNvcnQoaXB0KSksTn0pO2Z1bmN0aW9uIEFnZShtLHYpe3ZhciBUPVtdO2lmKCEobSYmbS5sZW5ndGgpKXJldHVybiBUO3ZhciBOPS0xLFY9W10sWT1tLmxlbmd0aDtmb3Iodj1rZSh2LDMpOysrTjxZOyl7dmFyIEo9bVtOXTt2KEosTixtKSYmKFQucHVzaChKKSxWLnB1c2goTikpfXJldHVybiBYZnQobSxWKSxUfWZ1bmN0aW9uICRxKG0pe3JldHVybiBtPT1udWxsP206YmRlLmNhbGwobSl9ZnVuY3Rpb24gUGdlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIE4/KFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpPyh2PTAsVD1OKToodj12PT1udWxsPzA6UWUodiksVD1UPT09ZT9OOlFlKFQpKSxqbChtLHYsVCkpOltdfWZ1bmN0aW9uIElnZShtLHYpe3JldHVybiBzSShtLHYpfWZ1bmN0aW9uIExnZShtLHYsVCl7cmV0dXJuIGtxKG0sdixrZShULDIpKX1mdW5jdGlvbiBrZ2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7aWYoVCl7dmFyIE49c0kobSx2KTtpZihOPFQmJnJ1KG1bTl0sdikpcmV0dXJuIE59cmV0dXJuLTF9ZnVuY3Rpb24gUmdlKG0sdil7cmV0dXJuIHNJKG0sdiwhMCl9ZnVuY3Rpb24gTmdlKG0sdixUKXtyZXR1cm4ga3EobSx2LGtlKFQsMiksITApfWZ1bmN0aW9uIERnZShtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aDtpZihUKXt2YXIgTj1zSShtLHYsITApLTE7aWYocnUobVtOXSx2KSlyZXR1cm4gTn1yZXR1cm4tMX1mdW5jdGlvbiBPZ2UobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP0tmdChtKTpbXX1mdW5jdGlvbiB6Z2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/S2Z0KG0sa2UodiwyKSk6W119ZnVuY3Rpb24gRmdlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDEsdik6W119ZnVuY3Rpb24gQmdlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGg/KHY9VHx8dj09PWU/MTpRZSh2KSxqbChtLDAsdjwwPzA6dikpOltdfWZ1bmN0aW9uIEhnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksdj1OLXYsamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBWZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/bEkobSxrZSh2LDMpLCExLCEwKTpbXX1mdW5jdGlvbiBVZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/bEkobSxrZSh2LDMpKTpbXX12YXIgcWdlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiB5bShSbyhtLDEsYmksITApKX0pLEdnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4gYmkodikmJih2PWUpLHltKFJvKG0sMSxiaSwhMCksa2UodiwyKSl9KSxXZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLHltKFJvKG0sMSxiaSwhMCksZSx2KX0pO2Z1bmN0aW9uIFlnZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/eW0obSk6W119ZnVuY3Rpb24gamdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP3ltKG0sa2UodiwyKSk6W119ZnVuY3Rpb24gWGdlKG0sdil7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLG0mJm0ubGVuZ3RoP3ltKG0sZSx2KTpbXX1mdW5jdGlvbiBLcShtKXtpZighKG0mJm0ubGVuZ3RoKSlyZXR1cm5bXTt2YXIgdj0wO3JldHVybiBtPWZtKG0sZnVuY3Rpb24oVCl7aWYoYmkoVCkpcmV0dXJuIHY9WGkoVC5sZW5ndGgsdiksITB9KSxwcSh2LGZ1bmN0aW9uKFQpe3JldHVybiBLbihtLHVxKFQpKX0pfWZ1bmN0aW9uIE9wdChtLHYpe2lmKCEobSYmbS5sZW5ndGgpKXJldHVybltdO3ZhciBUPUtxKG0pO3JldHVybiB2PT1udWxsP1Q6S24oVCxmdW5jdGlvbihOKXtyZXR1cm4gR3ModixlLE4pfSl9dmFyICRnZT1ucihmdW5jdGlvbihtLHYpe3JldHVybiBiaShtKT9MTShtLHYpOltdfSksS2dlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiBOcShmbShtLGJpKSl9KSxaZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIGJpKHYpJiYodj1lKSxOcShmbShtLGJpKSxrZSh2LDIpKX0pLEpnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsTnEoZm0obSxiaSksZSx2KX0pLFFnZT1ucihLcSk7ZnVuY3Rpb24gdDBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxJTSl9ZnVuY3Rpb24gZTBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxOTSl9dmFyIHIwZT1ucihmdW5jdGlvbihtKXt2YXIgdj1tLmxlbmd0aCxUPXY+MT9tW3YtMV06ZTtyZXR1cm4gVD10eXBlb2YgVD09ImZ1bmN0aW9uIj8obS5wb3AoKSxUKTplLE9wdChtLFQpfSk7ZnVuY3Rpb24genB0KG0pe3ZhciB2PUcobSk7cmV0dXJuIHYuX19jaGFpbl9fPSEwLHZ9ZnVuY3Rpb24gbjBlKG0sdil7cmV0dXJuIHYobSksbX1mdW5jdGlvbiBfSShtLHYpe3JldHVybiB2KG0pfXZhciBpMGU9bHAoZnVuY3Rpb24obSl7dmFyIHY9bS5sZW5ndGgsVD12P21bMF06MCxOPXRoaXMuX193cmFwcGVkX18sVj1mdW5jdGlvbihZKXtyZXR1cm4gYnEoWSxtKX07cmV0dXJuIHY+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGh8fCEoTiBpbnN0YW5jZW9mIGdyKXx8IWNwKFQpP3RoaXMudGhydShWKTooTj1OLnNsaWNlKFQsK1QrKHY/MTowKSksTi5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOl9JLGFyZ3M6W1ZdLHRoaXNBcmc6ZX0pLG5ldyBXbChOLHRoaXMuX19jaGFpbl9fKS50aHJ1KGZ1bmN0aW9uKFkpe3JldHVybiB2JiYhWS5sZW5ndGgmJlkucHVzaChlKSxZfSkpfSk7ZnVuY3Rpb24gbzBlKCl7cmV0dXJuIHpwdCh0aGlzKX1mdW5jdGlvbiBhMGUoKXtyZXR1cm4gbmV3IFdsKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9ZnVuY3Rpb24gczBlKCl7dGhpcy5fX3ZhbHVlc19fPT09ZSYmKHRoaXMuX192YWx1ZXNfXz1acHQodGhpcy52YWx1ZSgpKSk7dmFyIG09dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGgsdj1tP2U6dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO3JldHVybntkb25lOm0sdmFsdWU6dn19ZnVuY3Rpb24gbDBlKCl7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gYzBlKG0pe2Zvcih2YXIgdixUPXRoaXM7VCBpbnN0YW5jZW9mIHJJOyl7dmFyIE49SXB0KFQpO04uX19pbmRleF9fPTAsTi5fX3ZhbHVlc19fPWUsdj9WLl9fd3JhcHBlZF9fPU46dj1OO3ZhciBWPU47VD1ULl9fd3JhcHBlZF9ffXJldHVybiBWLl9fd3JhcHBlZF9fPW0sdn1mdW5jdGlvbiB1MGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fO2lmKG0gaW5zdGFuY2VvZiBncil7dmFyIHY9bTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih2PW5ldyBncih0aGlzKSksdj12LnJldmVyc2UoKSx2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6X0ksYXJnczpbJHFdLHRoaXNBcmc6ZX0pLG5ldyBXbCh2LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KCRxKX1mdW5jdGlvbiBoMGUoKXtyZXR1cm4gUWZ0KHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9dmFyIGYwZT1jSShmdW5jdGlvbihtLHYsVCl7dW4uY2FsbChtLFQpPysrbVtUXTphcChtLFQsMSl9KTtmdW5jdGlvbiBwMGUobSx2LFQpe3ZhciBOPSRlKG0pP2ZmdDpubWU7cmV0dXJuIFQmJmthKG0sdixUKSYmKHY9ZSksTihtLGtlKHYsMykpfWZ1bmN0aW9uIGQwZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciBtMGU9dXB0KExwdCksZzBlPXVwdChrcHQpO2Z1bmN0aW9uIF8wZShtLHYpe3JldHVybiBSbyh5SShtLHYpLDEpfWZ1bmN0aW9uIHkwZShtLHYpe3JldHVybiBSbyh5SShtLHYpLHopfWZ1bmN0aW9uIHYwZShtLHYsVCl7cmV0dXJuIFQ9VD09PWU/MTpRZShUKSxSbyh5SShtLHYpLFQpfWZ1bmN0aW9uIEZwdChtLHYpe3ZhciBUPSRlKG0pP3FsOl9tO3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gQnB0KG0sdil7dmFyIFQ9JGUobSk/RnBlOkRmdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciB4MGU9Y0koZnVuY3Rpb24obSx2LFQpe3VuLmNhbGwobSxUKT9tW1RdLnB1c2godik6YXAobSxULFt2XSl9KTtmdW5jdGlvbiBiMGUobSx2LFQsTil7bT1kcyhtKT9tOlN4KG0pLFQ9VCYmIU4/UWUoVCk6MDt2YXIgVj1tLmxlbmd0aDtyZXR1cm4gVDwwJiYoVD1YaShWK1QsMCkpLFNJKG0pP1Q8PVYmJm0uaW5kZXhPZih2LFQpPi0xOiEhViYmZngobSx2LFQpPi0xfXZhciB3MGU9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPS0xLFY9dHlwZW9mIHY9PSJmdW5jdGlvbiIsWT1kcyhtKT92dChtLmxlbmd0aCk6W107cmV0dXJuIF9tKG0sZnVuY3Rpb24oSil7WVsrK05dPVY/R3ModixKLFQpOmtNKEosdixUKX0pLFl9KSxTMGU9Y0koZnVuY3Rpb24obSx2LFQpe2FwKG0sVCx2KX0pO2Z1bmN0aW9uIHlJKG0sdil7dmFyIFQ9JGUobSk/S246VWZ0O3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gTTBlKG0sdixULE4pe3JldHVybiBtPT1udWxsP1tdOigkZSh2KXx8KHY9dj09bnVsbD9bXTpbdl0pLFQ9Tj9lOlQsJGUoVCl8fChUPVQ9PW51bGw/W106W1RdKSxZZnQobSx2LFQpKX12YXIgRTBlPWNJKGZ1bmN0aW9uKG0sdixUKXttW1Q/MDoxXS5wdXNoKHYpfSxmdW5jdGlvbigpe3JldHVybltbXSxbXV19KTtmdW5jdGlvbiBUMGUobSx2LFQpe3ZhciBOPSRlKG0pP2xxOmdmdCxWPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gTihtLGtlKHYsNCksVCxWLF9tKX1mdW5jdGlvbiBDMGUobSx2LFQpe3ZhciBOPSRlKG0pP0JwZTpnZnQsVj1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIE4obSxrZSh2LDQpLFQsVixEZnQpfWZ1bmN0aW9uIEEwZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLGJJKGtlKHYsMykpKX1mdW5jdGlvbiBQMGUobSl7dmFyIHY9JGUobSk/TGZ0OmJtZTtyZXR1cm4gdihtKX1mdW5jdGlvbiBJMGUobSx2LFQpeyhUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodik7dmFyIE49JGUobSk/SmRlOndtZTtyZXR1cm4gTihtLHYpfWZ1bmN0aW9uIEwwZShtKXt2YXIgdj0kZShtKT9RZGU6TW1lO3JldHVybiB2KG0pfWZ1bmN0aW9uIGswZShtKXtpZihtPT1udWxsKXJldHVybiAwO2lmKGRzKG0pKXJldHVybiBTSShtKT9keChtKTptLmxlbmd0aDt2YXIgdj1uYShtKTtyZXR1cm4gdj09cXx8dj09TGU/bS5zaXplOkNxKG0pLmxlbmd0aH1mdW5jdGlvbiBSMGUobSx2LFQpe3ZhciBOPSRlKG0pP2NxOkVtZTtyZXR1cm4gVCYma2EobSx2LFQpJiYodj1lKSxOKG0sa2UodiwzKSl9dmFyIE4wZT1ucihmdW5jdGlvbihtLHYpe2lmKG09PW51bGwpcmV0dXJuW107dmFyIFQ9di5sZW5ndGg7cmV0dXJuIFQ+MSYma2EobSx2WzBdLHZbMV0pP3Y9W106VD4yJiZrYSh2WzBdLHZbMV0sdlsyXSkmJih2PVt2WzBdXSksWWZ0KG0sUm8odiwxKSxbXSl9KSx2ST1kZGV8fGZ1bmN0aW9uKCl7cmV0dXJuIGZvLkRhdGUubm93KCl9O2Z1bmN0aW9uIEQwZShtLHYpe2lmKHR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gbT1RZShtKSxmdW5jdGlvbigpe2lmKC0tbTwxKXJldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHB0KG0sdixUKXtyZXR1cm4gdj1UP2U6dix2PW0mJnY9PW51bGw/bS5sZW5ndGg6dixzcChtLEMsZSxlLGUsZSx2KX1mdW5jdGlvbiBWcHQobSx2KXt2YXIgVDtpZih0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIG09UWUobSksZnVuY3Rpb24oKXtyZXR1cm4tLW0+MCYmKFQ9di5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG08PTEmJih2PWUpLFR9fXZhciBacT1ucihmdW5jdGlvbihtLHYsVCl7dmFyIE49ZDtpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChacSkpO058PWJ9cmV0dXJuIHNwKG0sTix2LFQsVil9KSxVcHQ9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPWR8ZztpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChVcHQpKTtOfD1ifXJldHVybiBzcCh2LE4sbSxULFYpfSk7ZnVuY3Rpb24gcXB0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seSxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9cXB0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gR3B0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seCxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9R3B0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gV3B0KG0sdixUKXt2YXIgTixWLFksSixpdCxmdCxEdD0wLE90PSExLFZ0PSExLG9lPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2PSRsKHYpfHwwLHJpKFQpJiYoT3Q9ISFULmxlYWRpbmcsVnQ9Im1heFdhaXQiaW4gVCxZPVZ0P1hpKCRsKFQubWF4V2FpdCl8fDAsdik6WSxvZT0idHJhaWxpbmciaW4gVD8hIVQudHJhaWxpbmc6b2UpO2Z1bmN0aW9uIFRlKHdpKXt2YXIgbnU9TixmcD1WO3JldHVybiBOPVY9ZSxEdD13aSxKPW0uYXBwbHkoZnAsbnUpLEp9ZnVuY3Rpb24gTmUod2kpe3JldHVybiBEdD13aSxpdD16TShwcix2KSxPdD9UZSh3aSk6Sn1mdW5jdGlvbiBlcih3aSl7dmFyIG51PXdpLWZ0LGZwPXdpLUR0LHVkdD12LW51O3JldHVybiBWdD9yYSh1ZHQsWS1mcCk6dWR0fWZ1bmN0aW9uIERlKHdpKXt2YXIgbnU9d2ktZnQsZnA9d2ktRHQ7cmV0dXJuIGZ0PT09ZXx8bnU+PXZ8fG51PDB8fFZ0JiZmcD49WX1mdW5jdGlvbiBwcigpe3ZhciB3aT12SSgpO2lmKERlKHdpKSlyZXR1cm4geXIod2kpO2l0PXpNKHByLGVyKHdpKSl9ZnVuY3Rpb24geXIod2kpe3JldHVybiBpdD1lLG9lJiZOP1RlKHdpKTooTj1WPWUsSil9ZnVuY3Rpb24gWHMoKXtpdCE9PWUmJmVwdChpdCksRHQ9MCxOPWZ0PVY9aXQ9ZX1mdW5jdGlvbiBSYSgpe3JldHVybiBpdD09PWU/Sjp5cih2SSgpKX1mdW5jdGlvbiAkcygpe3ZhciB3aT12SSgpLG51PURlKHdpKTtpZihOPWFyZ3VtZW50cyxWPXRoaXMsZnQ9d2ksbnUpe2lmKGl0PT09ZSlyZXR1cm4gTmUoZnQpO2lmKFZ0KXJldHVybiBlcHQoaXQpLGl0PXpNKHByLHYpLFRlKGZ0KX1yZXR1cm4gaXQ9PT1lJiYoaXQ9ek0ocHIsdikpLEp9cmV0dXJuICRzLmNhbmNlbD1Ycywkcy5mbHVzaD1SYSwkc312YXIgTzBlPW5yKGZ1bmN0aW9uKG0sdil7cmV0dXJuIE5mdChtLDEsdil9KSx6MGU9bnIoZnVuY3Rpb24obSx2LFQpe3JldHVybiBOZnQobSwkbCh2KXx8MCxUKX0pO2Z1bmN0aW9uIEYwZShtKXtyZXR1cm4gc3AobSxrKX1mdW5jdGlvbiB4SShtLHYpe2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24ifHx2IT1udWxsJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7dmFyIFQ9ZnVuY3Rpb24oKXt2YXIgTj1hcmd1bWVudHMsVj12P3YuYXBwbHkodGhpcyxOKTpOWzBdLFk9VC5jYWNoZTtpZihZLmhhcyhWKSlyZXR1cm4gWS5nZXQoVik7dmFyIEo9bS5hcHBseSh0aGlzLE4pO3JldHVybiBULmNhY2hlPVkuc2V0KFYsSil8fFksSn07cmV0dXJuIFQuY2FjaGU9bmV3KHhJLkNhY2hlfHxvcCksVH14SS5DYWNoZT1vcDtmdW5jdGlvbiBiSShtKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9YXJndW1lbnRzO3N3aXRjaCh2Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiFtLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFtLmNhbGwodGhpcyx2WzBdKTtjYXNlIDI6cmV0dXJuIW0uY2FsbCh0aGlzLHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiFtLmNhbGwodGhpcyx2WzBdLHZbMV0sdlsyXSl9cmV0dXJuIW0uYXBwbHkodGhpcyx2KX19ZnVuY3Rpb24gQjBlKG0pe3JldHVybiBWcHQoMixtKX12YXIgSDBlPVRtZShmdW5jdGlvbihtLHYpe3Y9di5sZW5ndGg9PTEmJiRlKHZbMF0pP0tuKHZbMF0sV3Moa2UoKSkpOktuKFJvKHYsMSksV3Moa2UoKSkpO3ZhciBUPXYubGVuZ3RoO3JldHVybiBucihmdW5jdGlvbihOKXtmb3IodmFyIFY9LTEsWT1yYShOLmxlbmd0aCxUKTsrK1Y8WTspTltWXT12W1ZdLmNhbGwodGhpcyxOW1ZdKTtyZXR1cm4gR3MobSx0aGlzLE4pfSl9KSxKcT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoSnEpKTtyZXR1cm4gc3AobSxiLGUsdixUKX0pLFlwdD1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoWXB0KSk7cmV0dXJuIHNwKG0sUyxlLHYsVCl9KSxWMGU9bHAoZnVuY3Rpb24obSx2KXtyZXR1cm4gc3AobSxQLGUsZSxlLHYpfSk7ZnVuY3Rpb24gVTBlKG0sdil7aWYodHlwZW9mIG0hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEdsKGkpO3JldHVybiB2PXY9PT1lP3Y6UWUodiksbnIobSx2KX1mdW5jdGlvbiBxMGUobSx2KXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHY9dj09bnVsbD8wOlhpKFFlKHYpLDApLG5yKGZ1bmN0aW9uKFQpe3ZhciBOPVRbdl0sVj14bShULDAsdik7cmV0dXJuIE4mJnBtKFYsTiksR3MobSx0aGlzLFYpfSl9ZnVuY3Rpb24gRzBlKG0sdixUKXt2YXIgTj0hMCxWPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gcmkoVCkmJihOPSJsZWFkaW5nImluIFQ/ISFULmxlYWRpbmc6TixWPSJ0cmFpbGluZyJpbiBUPyEhVC50cmFpbGluZzpWKSxXcHQobSx2LHtsZWFkaW5nOk4sbWF4V2FpdDp2LHRyYWlsaW5nOlZ9KX1mdW5jdGlvbiBXMGUobSl7cmV0dXJuIEhwdChtLDEpfWZ1bmN0aW9uIFkwZShtLHYpe3JldHVybiBKcShPcSh2KSxtKX1mdW5jdGlvbiBqMGUoKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTt2YXIgbT1hcmd1bWVudHNbMF07cmV0dXJuICRlKG0pP206W21dfWZ1bmN0aW9uIFgwZShtKXtyZXR1cm4gWWwobSxoKX1mdW5jdGlvbiAkMGUobSx2KXtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsWWwobSxoLHYpfWZ1bmN0aW9uIEswZShtKXtyZXR1cm4gWWwobSxjfGgpfWZ1bmN0aW9uIFowZShtLHYpe3JldHVybiB2PXR5cGVvZiB2PT0iZnVuY3Rpb24iP3Y6ZSxZbChtLGN8aCx2KX1mdW5jdGlvbiBKMGUobSx2KXtyZXR1cm4gdj09bnVsbHx8UmZ0KG0sdixwbyh2KSl9ZnVuY3Rpb24gcnUobSx2KXtyZXR1cm4gbT09PXZ8fG0hPT1tJiZ2IT09dn12YXIgUTBlPXBJKE1xKSx0X2U9cEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbT49dn0pLHNfPUJmdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0JmdDpmdW5jdGlvbihtKXtyZXR1cm4gbGkobSkmJnVuLmNhbGwobSwiY2FsbGVlIikmJiFFZnQuY2FsbChtLCJjYWxsZWUiKX0sJGU9dnQuaXNBcnJheSxlX2U9YWZ0P1dzKGFmdCk6Y21lO2Z1bmN0aW9uIGRzKG0pe3JldHVybiBtIT1udWxsJiZ3SShtLmxlbmd0aCkmJiF1cChtKX1mdW5jdGlvbiBiaShtKXtyZXR1cm4gbGkobSkmJmRzKG0pfWZ1bmN0aW9uIHJfZShtKXtyZXR1cm4gbT09PSEwfHxtPT09ITF8fGxpKG0pJiZMYShtKT09S3R9dmFyIGJtPWdkZXx8Y0csbl9lPXNmdD9XcyhzZnQpOnVtZTtmdW5jdGlvbiBpX2UobSl7cmV0dXJuIGxpKG0pJiZtLm5vZGVUeXBlPT09MSYmIUZNKG0pfWZ1bmN0aW9uIG9fZShtKXtpZihtPT1udWxsKXJldHVybiEwO2lmKGRzKG0pJiYoJGUobSl8fHR5cGVvZiBtPT0ic3RyaW5nInx8dHlwZW9mIG0uc3BsaWNlPT0iZnVuY3Rpb24ifHxibShtKXx8d3gobSl8fHNfKG0pKSlyZXR1cm4hbS5sZW5ndGg7dmFyIHY9bmEobSk7aWYodj09cXx8dj09TGUpcmV0dXJuIW0uc2l6ZTtpZihPTShtKSlyZXR1cm4hQ3EobSkubGVuZ3RoO2Zvcih2YXIgVCBpbiBtKWlmKHVuLmNhbGwobSxUKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBhX2UobSx2KXtyZXR1cm4gUk0obSx2KX1mdW5jdGlvbiBzX2UobSx2LFQpe1Q9dHlwZW9mIFQ9PSJmdW5jdGlvbiI/VDplO3ZhciBOPVQ/VChtLHYpOmU7cmV0dXJuIE49PT1lP1JNKG0sdixlLFQpOiEhTn1mdW5jdGlvbiBRcShtKXtpZighbGkobSkpcmV0dXJuITE7dmFyIHY9TGEobSk7cmV0dXJuIHY9PVh8fHY9PWN0fHx0eXBlb2YgbS5tZXNzYWdlPT0ic3RyaW5nIiYmdHlwZW9mIG0ubmFtZT09InN0cmluZyImJiFGTShtKX1mdW5jdGlvbiBsX2UobSl7cmV0dXJuIHR5cGVvZiBtPT0ibnVtYmVyIiYmQ2Z0KG0pfWZ1bmN0aW9uIHVwKG0pe2lmKCFyaShtKSlyZXR1cm4hMTt2YXIgdj1MYShtKTtyZXR1cm4gdj09ZXR8fHY9PWR0fHx2PT1sdHx8dj09aWV9ZnVuY3Rpb24ganB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm09PVFlKG0pfWZ1bmN0aW9uIHdJKG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm0+LTEmJm0lMT09MCYmbTw9VX1mdW5jdGlvbiByaShtKXt2YXIgdj10eXBlb2YgbTtyZXR1cm4gbSE9bnVsbCYmKHY9PSJvYmplY3QifHx2PT0iZnVuY3Rpb24iKX1mdW5jdGlvbiBsaShtKXtyZXR1cm4gbSE9bnVsbCYmdHlwZW9mIG09PSJvYmplY3QifXZhciBYcHQ9bGZ0P1dzKGxmdCk6Zm1lO2Z1bmN0aW9uIGNfZShtLHYpe3JldHVybiBtPT09dnx8VHEobSx2LHFxKHYpKX1mdW5jdGlvbiB1X2UobSx2LFQpe3JldHVybiBUPXR5cGVvZiBUPT0iZnVuY3Rpb24iP1Q6ZSxUcShtLHYscXEodiksVCl9ZnVuY3Rpb24gaF9lKG0pe3JldHVybiAkcHQobSkmJm0hPSttfWZ1bmN0aW9uIGZfZShtKXtpZigkbWUobSkpdGhyb3cgbmV3IFdlKG4pO3JldHVybiBIZnQobSl9ZnVuY3Rpb24gcF9lKG0pe3JldHVybiBtPT09bnVsbH1mdW5jdGlvbiBkX2UobSl7cmV0dXJuIG09PW51bGx9ZnVuY3Rpb24gJHB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciJ8fGxpKG0pJiZMYShtKT09cHR9ZnVuY3Rpb24gRk0obSl7aWYoIWxpKG0pfHxMYShtKSE9d3QpcmV0dXJuITE7dmFyIHY9JDYobSk7aWYodj09PW51bGwpcmV0dXJuITA7dmFyIFQ9dW4uY2FsbCh2LCJjb25zdHJ1Y3RvciIpJiZ2LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgVD09ImZ1bmN0aW9uIiYmVCBpbnN0YW5jZW9mIFQmJlc2LmNhbGwoVCk9PXVkZX12YXIgdEc9Y2Z0P1dzKGNmdCk6cG1lO2Z1bmN0aW9uIG1fZShtKXtyZXR1cm4ganB0KG0pJiZtPj0tVSYmbTw9VX12YXIgS3B0PXVmdD9Xcyh1ZnQpOmRtZTtmdW5jdGlvbiBTSShtKXtyZXR1cm4gdHlwZW9mIG09PSJzdHJpbmcifHwhJGUobSkmJmxpKG0pJiZMYShtKT09YXJ9ZnVuY3Rpb24ganMobSl7cmV0dXJuIHR5cGVvZiBtPT0ic3ltYm9sInx8bGkobSkmJkxhKG0pPT1mcn12YXIgd3g9aGZ0P1dzKGhmdCk6bW1lO2Z1bmN0aW9uIGdfZShtKXtyZXR1cm4gbT09PWV9ZnVuY3Rpb24gX19lKG0pe3JldHVybiBsaShtKSYmbmEobSk9PSR9ZnVuY3Rpb24geV9lKG0pe3JldHVybiBsaShtKSYmTGEobSk9PUl0fXZhciB2X2U9cEkoQXEpLHhfZT1wSShmdW5jdGlvbihtLHYpe3JldHVybiBtPD12fSk7ZnVuY3Rpb24gWnB0KG0pe2lmKCFtKXJldHVybltdO2lmKGRzKG0pKXJldHVybiBTSShtKT90dShtKTpwcyhtKTtpZihFTSYmbVtFTV0pcmV0dXJuIEpwZShtW0VNXSgpKTt2YXIgdj1uYShtKSxUPXY9PXE/bXE6dj09TGU/VTY6U3g7cmV0dXJuIFQobSl9ZnVuY3Rpb24gaHAobSl7aWYoIW0pcmV0dXJuIG09PT0wP206MDtpZihtPSRsKG0pLG09PT16fHxtPT09LXope3ZhciB2PW08MD8tMToxO3JldHVybiB2Kld9cmV0dXJuIG09PT1tP206MH1mdW5jdGlvbiBRZShtKXt2YXIgdj1ocChtKSxUPXYlMTtyZXR1cm4gdj09PXY/VD92LVQ6djowfWZ1bmN0aW9uIEpwdChtKXtyZXR1cm4gbT9uXyhRZShtKSwwLHJ0KTowfWZ1bmN0aW9uICRsKG0pe2lmKHR5cGVvZiBtPT0ibnVtYmVyIilyZXR1cm4gbTtpZihqcyhtKSlyZXR1cm4gWjtpZihyaShtKSl7dmFyIHY9dHlwZW9mIG0udmFsdWVPZj09ImZ1bmN0aW9uIj9tLnZhbHVlT2YoKTptO209cmkodik/disiIjp2fWlmKHR5cGVvZiBtIT0ic3RyaW5nIilyZXR1cm4gbT09PTA/bTorbTttPV9mdChtKTt2YXIgVD1fci50ZXN0KG0pO3JldHVybiBUfHxYbi50ZXN0KG0pP0RwZShtLnNsaWNlKDIpLFQ/Mjo4KTpYci50ZXN0KG0pP1o6K219ZnVuY3Rpb24gUXB0KG0pe3JldHVybiBnaChtLG1zKG0pKX1mdW5jdGlvbiBiX2UobSl7cmV0dXJuIG0/bl8oUWUobSksLVUsVSk6bT09PTA/bTowfWZ1bmN0aW9uIG9uKG0pe3JldHVybiBtPT1udWxsPyIiOllzKG0pfXZhciB3X2U9dngoZnVuY3Rpb24obSx2KXtpZihPTSh2KXx8ZHModikpe2doKHYscG8odiksbSk7cmV0dXJufWZvcih2YXIgVCBpbiB2KXVuLmNhbGwodixUKSYmSU0obSxULHZbVF0pfSksdGR0PXZ4KGZ1bmN0aW9uKG0sdil7Z2godixtcyh2KSxtKX0pLE1JPXZ4KGZ1bmN0aW9uKG0sdixULE4pe2doKHYsbXModiksbSxOKX0pLFNfZT12eChmdW5jdGlvbihtLHYsVCxOKXtnaCh2LHBvKHYpLG0sTil9KSxNX2U9bHAoYnEpO2Z1bmN0aW9uIEVfZShtLHYpe3ZhciBUPXl4KG0pO3JldHVybiB2PT1udWxsP1Q6a2Z0KFQsdil9dmFyIFRfZT1ucihmdW5jdGlvbihtLHYpe209dm4obSk7dmFyIFQ9LTEsTj12Lmxlbmd0aCxWPU4+Mj92WzJdOmU7Zm9yKFYmJmthKHZbMF0sdlsxXSxWKSYmKE49MSk7KytUPE47KWZvcih2YXIgWT12W1RdLEo9bXMoWSksaXQ9LTEsZnQ9Si5sZW5ndGg7KytpdDxmdDspe3ZhciBEdD1KW2l0XSxPdD1tW0R0XTsoT3Q9PT1lfHxydShPdCxteFtEdF0pJiYhdW4uY2FsbChtLER0KSkmJihtW0R0XT1ZW0R0XSl9cmV0dXJuIG19KSxDX2U9bnIoZnVuY3Rpb24obSl7cmV0dXJuIG0ucHVzaChlLF9wdCksR3MoZWR0LGUsbSl9KTtmdW5jdGlvbiBBX2UobSx2KXtyZXR1cm4gcGZ0KG0sa2UodiwzKSxtaCl9ZnVuY3Rpb24gUF9lKG0sdil7cmV0dXJuIHBmdChtLGtlKHYsMyksU3EpfWZ1bmN0aW9uIElfZShtLHYpe3JldHVybiBtPT1udWxsP206d3EobSxrZSh2LDMpLG1zKX1mdW5jdGlvbiBMX2UobSx2KXtyZXR1cm4gbT09bnVsbD9tOnpmdChtLGtlKHYsMyksbXMpfWZ1bmN0aW9uIGtfZShtLHYpe3JldHVybiBtJiZtaChtLGtlKHYsMykpfWZ1bmN0aW9uIFJfZShtLHYpe3JldHVybiBtJiZTcShtLGtlKHYsMykpfWZ1bmN0aW9uIE5fZShtKXtyZXR1cm4gbT09bnVsbD9bXTpvSShtLHBvKG0pKX1mdW5jdGlvbiBEX2UobSl7cmV0dXJuIG09PW51bGw/W106b0kobSxtcyhtKSl9ZnVuY3Rpb24gZUcobSx2LFQpe3ZhciBOPW09PW51bGw/ZTppXyhtLHYpO3JldHVybiBOPT09ZT9UOk59ZnVuY3Rpb24gT19lKG0sdil7cmV0dXJuIG0hPW51bGwmJnhwdChtLHYsb21lKX1mdW5jdGlvbiByRyhtLHYpe3JldHVybiBtIT1udWxsJiZ4cHQobSx2LGFtZSl9dmFyIHpfZT1mcHQoZnVuY3Rpb24obSx2LFQpe3YhPW51bGwmJnR5cGVvZiB2LnRvU3RyaW5nIT0iZnVuY3Rpb24iJiYodj1ZNi5jYWxsKHYpKSxtW3ZdPVR9LGlHKGdzKSksRl9lPWZwdChmdW5jdGlvbihtLHYsVCl7diE9bnVsbCYmdHlwZW9mIHYudG9TdHJpbmchPSJmdW5jdGlvbiImJih2PVk2LmNhbGwodikpLHVuLmNhbGwobSx2KT9tW3ZdLnB1c2goVCk6bVt2XT1bVF19LGtlKSxCX2U9bnIoa00pO2Z1bmN0aW9uIHBvKG0pe3JldHVybiBkcyhtKT9JZnQobSk6Q3EobSl9ZnVuY3Rpb24gbXMobSl7cmV0dXJuIGRzKG0pP0lmdChtLCEwKTpnbWUobSl9ZnVuY3Rpb24gSF9lKG0sdil7dmFyIFQ9e307cmV0dXJuIHY9a2UodiwzKSxtaChtLGZ1bmN0aW9uKE4sVixZKXthcChULHYoTixWLFkpLE4pfSksVH1mdW5jdGlvbiBWX2UobSx2KXt2YXIgVD17fTtyZXR1cm4gdj1rZSh2LDMpLG1oKG0sZnVuY3Rpb24oTixWLFkpe2FwKFQsVix2KE4sVixZKSl9KSxUfXZhciBVX2U9dngoZnVuY3Rpb24obSx2LFQpe2FJKG0sdixUKX0pLGVkdD12eChmdW5jdGlvbihtLHYsVCxOKXthSShtLHYsVCxOKX0pLHFfZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPXt9O2lmKG09PW51bGwpcmV0dXJuIFQ7dmFyIE49ITE7dj1Lbih2LGZ1bmN0aW9uKFkpe3JldHVybiBZPXZtKFksbSksTnx8KE49WS5sZW5ndGg+MSksWX0pLGdoKG0sVnEobSksVCksTiYmKFQ9WWwoVCxjfHV8aCx6bWUpKTtmb3IodmFyIFY9di5sZW5ndGg7Vi0tOylScShULHZbVl0pO3JldHVybiBUfSk7ZnVuY3Rpb24gR19lKG0sdil7cmV0dXJuIHJkdChtLGJJKGtlKHYpKSl9dmFyIFdfZT1scChmdW5jdGlvbihtLHYpe3JldHVybiBtPT1udWxsP3t9OnltZShtLHYpfSk7ZnVuY3Rpb24gcmR0KG0sdil7aWYobT09bnVsbClyZXR1cm57fTt2YXIgVD1LbihWcShtKSxmdW5jdGlvbihOKXtyZXR1cm5bTl19KTtyZXR1cm4gdj1rZSh2KSxqZnQobSxULGZ1bmN0aW9uKE4sVil7cmV0dXJuIHYoTixWWzBdKX0pfWZ1bmN0aW9uIFlfZShtLHYsVCl7dj12bSh2LG0pO3ZhciBOPS0xLFY9di5sZW5ndGg7Zm9yKFZ8fChWPTEsbT1lKTsrK048Vjspe3ZhciBZPW09PW51bGw/ZTptW19oKHZbTl0pXTtZPT09ZSYmKE49VixZPVQpLG09dXAoWSk/WS5jYWxsKG0pOll9cmV0dXJuIG19ZnVuY3Rpb24gal9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOk5NKG0sdixUKX1mdW5jdGlvbiBYX2UobSx2LFQsTil7cmV0dXJuIE49dHlwZW9mIE49PSJmdW5jdGlvbiI/TjplLG09PW51bGw/bTpOTShtLHYsVCxOKX12YXIgbmR0PW1wdChwbyksaWR0PW1wdChtcyk7ZnVuY3Rpb24gJF9lKG0sdixUKXt2YXIgTj0kZShtKSxWPU58fGJtKG0pfHx3eChtKTtpZih2PWtlKHYsNCksVD09bnVsbCl7dmFyIFk9bSYmbS5jb25zdHJ1Y3RvcjtWP1Q9Tj9uZXcgWTpbXTpyaShtKT9UPXVwKFkpP3l4KCQ2KG0pKTp7fTpUPXt9fXJldHVybihWP3FsOm1oKShtLGZ1bmN0aW9uKEosaXQsZnQpe3JldHVybiB2KFQsSixpdCxmdCl9KSxUfWZ1bmN0aW9uIEtfZShtLHYpe3JldHVybiBtPT1udWxsPyEwOlJxKG0sdil9ZnVuY3Rpb24gWl9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOkpmdChtLHYsT3EoVCkpfWZ1bmN0aW9uIEpfZShtLHYsVCxOKXtyZXR1cm4gTj10eXBlb2YgTj09ImZ1bmN0aW9uIj9OOmUsbT09bnVsbD9tOkpmdChtLHYsT3EoVCksTil9ZnVuY3Rpb24gU3gobSl7cmV0dXJuIG09PW51bGw/W106ZHEobSxwbyhtKSl9ZnVuY3Rpb24gUV9lKG0pe3JldHVybiBtPT1udWxsP1tdOmRxKG0sbXMobSkpfWZ1bmN0aW9uIHR5ZShtLHYsVCl7cmV0dXJuIFQ9PT1lJiYoVD12LHY9ZSksVCE9PWUmJihUPSRsKFQpLFQ9VD09PVQ/VDowKSx2IT09ZSYmKHY9JGwodiksdj12PT09dj92OjApLG5fKCRsKG0pLHYsVCl9ZnVuY3Rpb24gZXllKG0sdixUKXtyZXR1cm4gdj1ocCh2KSxUPT09ZT8oVD12LHY9MCk6VD1ocChUKSxtPSRsKG0pLHNtZShtLHYsVCl9ZnVuY3Rpb24gcnllKG0sdixUKXtpZihUJiZ0eXBlb2YgVCE9ImJvb2xlYW4iJiZrYShtLHYsVCkmJih2PVQ9ZSksVD09PWUmJih0eXBlb2Ygdj09ImJvb2xlYW4iPyhUPXYsdj1lKTp0eXBlb2YgbT09ImJvb2xlYW4iJiYoVD1tLG09ZSkpLG09PT1lJiZ2PT09ZT8obT0wLHY9MSk6KG09aHAobSksdj09PWU/KHY9bSxtPTApOnY9aHAodikpLG0+dil7dmFyIE49bTttPXYsdj1OfWlmKFR8fG0lMXx8diUxKXt2YXIgVj1BZnQoKTtyZXR1cm4gcmEobStWKih2LW0rTnBlKCIxZS0iKygoVisiIikubGVuZ3RoLTEpKSksdil9cmV0dXJuIElxKG0sdil9dmFyIG55ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIHY9di50b0xvd2VyQ2FzZSgpLG0rKFQ/b2R0KHYpOnYpfSk7ZnVuY3Rpb24gb2R0KG0pe3JldHVybiBuRyhvbihtKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBhZHQobSl7cmV0dXJuIG09b24obSksbSYmbS5yZXBsYWNlKHVtLGpwZSkucmVwbGFjZShNcGUsIiIpfWZ1bmN0aW9uIGl5ZShtLHYsVCl7bT1vbihtKSx2PVlzKHYpO3ZhciBOPW0ubGVuZ3RoO1Q9VD09PWU/TjpuXyhRZShUKSwwLE4pO3ZhciBWPVQ7cmV0dXJuIFQtPXYubGVuZ3RoLFQ+PTAmJm0uc2xpY2UoVCxWKT09dn1mdW5jdGlvbiBveWUobSl7cmV0dXJuIG09b24obSksbSYmQXIudGVzdChtKT9tLnJlcGxhY2UoeW4sWHBlKTptfWZ1bmN0aW9uIGF5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZjeC50ZXN0KG0pP20ucmVwbGFjZShjbiwiXFwkJiIpOm19dmFyIHN5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/Ii0iOiIiKSt2LnRvTG93ZXJDYXNlKCl9KSxseWU9eHgoZnVuY3Rpb24obSx2LFQpe3JldHVybiBtKyhUPyIgIjoiIikrdi50b0xvd2VyQ2FzZSgpfSksY3llPWNwdCgidG9Mb3dlckNhc2UiKTtmdW5jdGlvbiB1eWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7aWYoIXZ8fE4+PXYpcmV0dXJuIG07dmFyIFY9KHYtTikvMjtyZXR1cm4gZkkoUTYoViksVCkrbStmSShKNihWKSxUKX1mdW5jdGlvbiBoeWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7cmV0dXJuIHYmJk48dj9tK2ZJKHYtTixUKTptfWZ1bmN0aW9uIGZ5ZShtLHYsVCl7bT1vbihtKSx2PVFlKHYpO3ZhciBOPXY/ZHgobSk6MDtyZXR1cm4gdiYmTjx2P2ZJKHYtTixUKSttOm19ZnVuY3Rpb24gcHllKG0sdixUKXtyZXR1cm4gVHx8dj09bnVsbD92PTA6diYmKHY9K3YpLHhkZShvbihtKS5yZXBsYWNlKHJwLCIiKSx2fHwwKX1mdW5jdGlvbiBkeWUobSx2LFQpe3JldHVybihUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodiksTHEob24obSksdil9ZnVuY3Rpb24gbXllKCl7dmFyIG09YXJndW1lbnRzLHY9b24obVswXSk7cmV0dXJuIG0ubGVuZ3RoPDM/djp2LnJlcGxhY2UobVsxXSxtWzJdKX12YXIgZ3llPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iXyI6IiIpK3YudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIF95ZShtLHYsVCl7cmV0dXJuIFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpJiYodj1UPWUpLFQ9VD09PWU/cnQ6VD4+PjAsVD8obT1vbihtKSxtJiYodHlwZW9mIHY9PSJzdHJpbmcifHx2IT1udWxsJiYhdEcodikpJiYodj1Zcyh2KSwhdiYmcHgobSkpP3htKHR1KG0pLDAsVCk6bS5zcGxpdCh2LFQpKTpbXX12YXIgeXllPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iICI6IiIpK25HKHYpfSk7ZnVuY3Rpb24gdnllKG0sdixUKXtyZXR1cm4gbT1vbihtKSxUPVQ9PW51bGw/MDpuXyhRZShUKSwwLG0ubGVuZ3RoKSx2PVlzKHYpLG0uc2xpY2UoVCxUK3YubGVuZ3RoKT09dn1mdW5jdGlvbiB4eWUobSx2LFQpe3ZhciBOPUcudGVtcGxhdGVTZXR0aW5ncztUJiZrYShtLHYsVCkmJih2PWUpLG09b24obSksdj1NSSh7fSx2LE4sZ3B0KTt2YXIgVj1NSSh7fSx2LmltcG9ydHMsTi5pbXBvcnRzLGdwdCksWT1wbyhWKSxKPWRxKFYsWSksaXQsZnQsRHQ9MCxPdD12LmludGVycG9sYXRlfHxtcixWdD0iX19wICs9ICciLG9lPWdxKCh2LmVzY2FwZXx8bXIpLnNvdXJjZSsifCIrT3Quc291cmNlKyJ8IisoT3Q9PT1JYT90cjptcikuc291cmNlKyJ8Iisodi5ldmFsdWF0ZXx8bXIpLnNvdXJjZSsifCQiLCJnIiksVGU9Ii8vIyBzb3VyY2VVUkw9IisodW4uY2FsbCh2LCJzb3VyY2VVUkwiKT8odi5zb3VyY2VVUkwrIiIpLnJlcGxhY2UoL1xzL2csIiAiKToibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArK1BwZSsiXSIpK2AKYDttLnJlcGxhY2Uob2UsZnVuY3Rpb24oRGUscHIseXIsWHMsUmEsJHMpe3JldHVybiB5cnx8KHlyPVhzKSxWdCs9bS5zbGljZShEdCwkcykucmVwbGFjZShGbCwkcGUpLHByJiYoaXQ9ITAsVnQrPWAnICsKX19lKGArcHIrYCkgKwonYCksUmEmJihmdD0hMCxWdCs9YCc7CmArUmErYDsKX19wICs9ICdgKSx5ciYmKFZ0Kz1gJyArCigoX190ID0gKGAreXIrYCkpID09IG51bGwgPyAnJyA6IF9fdCkgKwonYCksRHQ9JHMrRGUubGVuZ3RoLERlfSksVnQrPWAnOwpgO3ZhciBOZT11bi5jYWxsKHYsInZhcmlhYmxlIikmJnYudmFyaWFibGU7aWYoIU5lKVZ0PWB3aXRoIChvYmopIHsKYCtWdCtgCn0KYDtlbHNlIGlmKFZlLnRlc3QoTmUpKXRocm93IG5ldyBXZShvKTtWdD0oZnQ/VnQucmVwbGFjZShDZSwiIik6VnQpLnJlcGxhY2UoUHQsIiQxIikucmVwbGFjZShOdCwiJDE7IiksVnQ9ImZ1bmN0aW9uKCIrKE5lfHwib2JqIikrYCkgewpgKyhOZT8iIjpgb2JqIHx8IChvYmogPSB7fSk7CmApKyJ2YXIgX190LCBfX3AgPSAnJyIrKGl0PyIsIF9fZSA9IF8uZXNjYXBlIjoiIikrKGZ0P2AsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luOwpmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH0KYDpgOwpgKStWdCtgcmV0dXJuIF9fcAp9YDt2YXIgZXI9bGR0KGZ1bmN0aW9uKCl7cmV0dXJuICRyKFksVGUrInJldHVybiAiK1Z0KS5hcHBseShlLEopfSk7aWYoZXIuc291cmNlPVZ0LFFxKGVyKSl0aHJvdyBlcjtyZXR1cm4gZXJ9ZnVuY3Rpb24gYnllKG0pe3JldHVybiBvbihtKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHd5ZShtKXtyZXR1cm4gb24obSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBTeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gX2Z0KG0pO2lmKCFtfHwhKHY9WXModikpKXJldHVybiBtO3ZhciBOPXR1KG0pLFY9dHUodiksWT15ZnQoTixWKSxKPXZmdChOLFYpKzE7cmV0dXJuIHhtKE4sWSxKKS5qb2luKCIiKX1mdW5jdGlvbiBNeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gbS5zbGljZSgwLGJmdChtKSsxKTtpZighbXx8ISh2PVlzKHYpKSlyZXR1cm4gbTt2YXIgTj10dShtKSxWPXZmdChOLHR1KHYpKSsxO3JldHVybiB4bShOLDAsVikuam9pbigiIil9ZnVuY3Rpb24gRXllKG0sdixUKXtpZihtPW9uKG0pLG0mJihUfHx2PT09ZSkpcmV0dXJuIG0ucmVwbGFjZShycCwiIik7aWYoIW18fCEodj1Zcyh2KSkpcmV0dXJuIG07dmFyIE49dHUobSksVj15ZnQoTix0dSh2KSk7cmV0dXJuIHhtKE4sVikuam9pbigiIil9ZnVuY3Rpb24gVHllKG0sdil7dmFyIFQ9TyxOPUQ7aWYocmkodikpe3ZhciBWPSJzZXBhcmF0b3IiaW4gdj92LnNlcGFyYXRvcjpWO1Q9Imxlbmd0aCJpbiB2P1FlKHYubGVuZ3RoKTpULE49Im9taXNzaW9uImluIHY/WXModi5vbWlzc2lvbik6Tn1tPW9uKG0pO3ZhciBZPW0ubGVuZ3RoO2lmKHB4KG0pKXt2YXIgSj10dShtKTtZPUoubGVuZ3RofWlmKFQ+PVkpcmV0dXJuIG07dmFyIGl0PVQtZHgoTik7aWYoaXQ8MSlyZXR1cm4gTjt2YXIgZnQ9Sj94bShKLDAsaXQpLmpvaW4oIiIpOm0uc2xpY2UoMCxpdCk7aWYoVj09PWUpcmV0dXJuIGZ0K047aWYoSiYmKGl0Kz1mdC5sZW5ndGgtaXQpLHRHKFYpKXtpZihtLnNsaWNlKGl0KS5zZWFyY2goVikpe3ZhciBEdCxPdD1mdDtmb3IoVi5nbG9iYWx8fChWPWdxKFYuc291cmNlLG9uKEtlLmV4ZWMoVikpKyJnIikpLFYubGFzdEluZGV4PTA7RHQ9Vi5leGVjKE90KTspdmFyIFZ0PUR0LmluZGV4O2Z0PWZ0LnNsaWNlKDAsVnQ9PT1lP2l0OlZ0KX19ZWxzZSBpZihtLmluZGV4T2YoWXMoViksaXQpIT1pdCl7dmFyIG9lPWZ0Lmxhc3RJbmRleE9mKFYpO29lPi0xJiYoZnQ9ZnQuc2xpY2UoMCxvZSkpfXJldHVybiBmdCtOfWZ1bmN0aW9uIEN5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZXaS50ZXN0KG0pP20ucmVwbGFjZSh6ZSxyZGUpOm19dmFyIEF5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/IiAiOiIiKSt2LnRvVXBwZXJDYXNlKCl9KSxuRz1jcHQoInRvVXBwZXJDYXNlIik7ZnVuY3Rpb24gc2R0KG0sdixUKXtyZXR1cm4gbT1vbihtKSx2PVQ/ZTp2LHY9PT1lP1pwZShtKT9vZGUobSk6VXBlKG0pOm0ubWF0Y2godil8fFtdfXZhciBsZHQ9bnIoZnVuY3Rpb24obSx2KXt0cnl7cmV0dXJuIEdzKG0sZSx2KX1jYXRjaChUKXtyZXR1cm4gUXEoVCk/VDpuZXcgV2UoVCl9fSksUHllPWxwKGZ1bmN0aW9uKG0sdil7cmV0dXJuIHFsKHYsZnVuY3Rpb24oVCl7VD1faChUKSxhcChtLFQsWnEobVtUXSxtKSl9KSxtfSk7ZnVuY3Rpb24gSXllKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aCxUPWtlKCk7cmV0dXJuIG09dj9LbihtLGZ1bmN0aW9uKE4pe2lmKHR5cGVvZiBOWzFdIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm5bVChOWzBdKSxOWzFdXX0pOltdLG5yKGZ1bmN0aW9uKE4pe2Zvcih2YXIgVj0tMTsrK1Y8djspe3ZhciBZPW1bVl07aWYoR3MoWVswXSx0aGlzLE4pKXJldHVybiBHcyhZWzFdLHRoaXMsTil9fSl9ZnVuY3Rpb24gTHllKG0pe3JldHVybiBybWUoWWwobSxjKSl9ZnVuY3Rpb24gaUcobSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG19fWZ1bmN0aW9uIGt5ZShtLHYpe3JldHVybiBtPT1udWxsfHxtIT09bT92Om19dmFyIFJ5ZT1ocHQoKSxOeWU9aHB0KCEwKTtmdW5jdGlvbiBncyhtKXtyZXR1cm4gbX1mdW5jdGlvbiBvRyhtKXtyZXR1cm4gVmZ0KHR5cGVvZiBtPT0iZnVuY3Rpb24iP206WWwobSxjKSl9ZnVuY3Rpb24gRHllKG0pe3JldHVybiBxZnQoWWwobSxjKSl9ZnVuY3Rpb24gT3llKG0sdil7cmV0dXJuIEdmdChtLFlsKHYsYykpfXZhciB6eWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKFQsbSx2KX19KSxGeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKG0sVCx2KX19KTtmdW5jdGlvbiBhRyhtLHYsVCl7dmFyIE49cG8odiksVj1vSSh2LE4pO1Q9PW51bGwmJiEocmkodikmJihWLmxlbmd0aHx8IU4ubGVuZ3RoKSkmJihUPXYsdj1tLG09dGhpcyxWPW9JKHYscG8odikpKTt2YXIgWT0hKHJpKFQpJiYiY2hhaW4iaW4gVCl8fCEhVC5jaGFpbixKPXVwKG0pO3JldHVybiBxbChWLGZ1bmN0aW9uKGl0KXt2YXIgZnQ9dltpdF07bVtpdF09ZnQsSiYmKG0ucHJvdG90eXBlW2l0XT1mdW5jdGlvbigpe3ZhciBEdD10aGlzLl9fY2hhaW5fXztpZihZfHxEdCl7dmFyIE90PW0odGhpcy5fX3dyYXBwZWRfXyksVnQ9T3QuX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyk7cmV0dXJuIFZ0LnB1c2goe2Z1bmM6ZnQsYXJnczphcmd1bWVudHMsdGhpc0FyZzptfSksT3QuX19jaGFpbl9fPUR0LE90fXJldHVybiBmdC5hcHBseShtLHBtKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSxtfWZ1bmN0aW9uIEJ5ZSgpe3JldHVybiBmby5fPT09dGhpcyYmKGZvLl89aGRlKSx0aGlzfWZ1bmN0aW9uIHNHKCl7fWZ1bmN0aW9uIEh5ZShtKXtyZXR1cm4gbT1RZShtKSxucihmdW5jdGlvbih2KXtyZXR1cm4gV2Z0KHYsbSl9KX12YXIgVnllPUZxKEtuKSxVeWU9RnEoZmZ0KSxxeWU9RnEoY3EpO2Z1bmN0aW9uIGNkdChtKXtyZXR1cm4gV3EobSk/dXEoX2gobSkpOnZtZShtKX1mdW5jdGlvbiBHeWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBtPT1udWxsP2U6aV8obSx2KX19dmFyIFd5ZT1wcHQoKSxZeWU9cHB0KCEwKTtmdW5jdGlvbiBsRygpe3JldHVybltdfWZ1bmN0aW9uIGNHKCl7cmV0dXJuITF9ZnVuY3Rpb24ganllKCl7cmV0dXJue319ZnVuY3Rpb24gWHllKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gJHllKCl7cmV0dXJuITB9ZnVuY3Rpb24gS3llKG0sdil7aWYobT1RZShtKSxtPDF8fG0+VSlyZXR1cm5bXTt2YXIgVD1ydCxOPXJhKG0scnQpO3Y9a2UodiksbS09cnQ7Zm9yKHZhciBWPXBxKE4sdik7KytUPG07KXYoVCk7cmV0dXJuIFZ9ZnVuY3Rpb24gWnllKG0pe3JldHVybiAkZShtKT9LbihtLF9oKTpqcyhtKT9bbV06cHMoUHB0KG9uKG0pKSl9ZnVuY3Rpb24gSnllKG0pe3ZhciB2PSsrY2RlO3JldHVybiBvbihtKSt2fXZhciBReWU9aEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSt2fSwwKSx0MWU9QnEoImNlaWwiKSxlMWU9aEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbS92fSwxKSxyMWU9QnEoImZsb29yIik7ZnVuY3Rpb24gbjFlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9pSShtLGdzLE1xKTplfWZ1bmN0aW9uIGkxZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9pSShtLGtlKHYsMiksTXEpOmV9ZnVuY3Rpb24gbzFlKG0pe3JldHVybiBtZnQobSxncyl9ZnVuY3Rpb24gYTFlKG0sdil7cmV0dXJuIG1mdChtLGtlKHYsMikpfWZ1bmN0aW9uIHMxZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/aUkobSxncyxBcSk6ZX1mdW5jdGlvbiBsMWUobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/aUkobSxrZSh2LDIpLEFxKTplfXZhciBjMWU9aEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSp2fSwxKSx1MWU9QnEoInJvdW5kIiksaDFlPWhJKGZ1bmN0aW9uKG0sdil7cmV0dXJuIG0tdn0sMCk7ZnVuY3Rpb24gZjFlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9mcShtLGdzKTowfWZ1bmN0aW9uIHAxZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9mcShtLGtlKHYsMikpOjB9cmV0dXJuIEcuYWZ0ZXI9RDBlLEcuYXJ5PUhwdCxHLmFzc2lnbj13X2UsRy5hc3NpZ25Jbj10ZHQsRy5hc3NpZ25JbldpdGg9TUksRy5hc3NpZ25XaXRoPVNfZSxHLmF0PU1fZSxHLmJlZm9yZT1WcHQsRy5iaW5kPVpxLEcuYmluZEFsbD1QeWUsRy5iaW5kS2V5PVVwdCxHLmNhc3RBcnJheT1qMGUsRy5jaGFpbj16cHQsRy5jaHVuaz1yZ2UsRy5jb21wYWN0PW5nZSxHLmNvbmNhdD1pZ2UsRy5jb25kPUl5ZSxHLmNvbmZvcm1zPUx5ZSxHLmNvbnN0YW50PWlHLEcuY291bnRCeT1mMGUsRy5jcmVhdGU9RV9lLEcuY3Vycnk9cXB0LEcuY3VycnlSaWdodD1HcHQsRy5kZWJvdW5jZT1XcHQsRy5kZWZhdWx0cz1UX2UsRy5kZWZhdWx0c0RlZXA9Q19lLEcuZGVmZXI9TzBlLEcuZGVsYXk9ejBlLEcuZGlmZmVyZW5jZT1vZ2UsRy5kaWZmZXJlbmNlQnk9YWdlLEcuZGlmZmVyZW5jZVdpdGg9c2dlLEcuZHJvcD1sZ2UsRy5kcm9wUmlnaHQ9Y2dlLEcuZHJvcFJpZ2h0V2hpbGU9dWdlLEcuZHJvcFdoaWxlPWhnZSxHLmZpbGw9ZmdlLEcuZmlsdGVyPWQwZSxHLmZsYXRNYXA9XzBlLEcuZmxhdE1hcERlZXA9eTBlLEcuZmxhdE1hcERlcHRoPXYwZSxHLmZsYXR0ZW49UnB0LEcuZmxhdHRlbkRlZXA9cGdlLEcuZmxhdHRlbkRlcHRoPWRnZSxHLmZsaXA9RjBlLEcuZmxvdz1SeWUsRy5mbG93UmlnaHQ9TnllLEcuZnJvbVBhaXJzPW1nZSxHLmZ1bmN0aW9ucz1OX2UsRy5mdW5jdGlvbnNJbj1EX2UsRy5ncm91cEJ5PXgwZSxHLmluaXRpYWw9X2dlLEcuaW50ZXJzZWN0aW9uPXlnZSxHLmludGVyc2VjdGlvbkJ5PXZnZSxHLmludGVyc2VjdGlvbldpdGg9eGdlLEcuaW52ZXJ0PXpfZSxHLmludmVydEJ5PUZfZSxHLmludm9rZU1hcD13MGUsRy5pdGVyYXRlZT1vRyxHLmtleUJ5PVMwZSxHLmtleXM9cG8sRy5rZXlzSW49bXMsRy5tYXA9eUksRy5tYXBLZXlzPUhfZSxHLm1hcFZhbHVlcz1WX2UsRy5tYXRjaGVzPUR5ZSxHLm1hdGNoZXNQcm9wZXJ0eT1PeWUsRy5tZW1vaXplPXhJLEcubWVyZ2U9VV9lLEcubWVyZ2VXaXRoPWVkdCxHLm1ldGhvZD16eWUsRy5tZXRob2RPZj1GeWUsRy5taXhpbj1hRyxHLm5lZ2F0ZT1iSSxHLm50aEFyZz1IeWUsRy5vbWl0PXFfZSxHLm9taXRCeT1HX2UsRy5vbmNlPUIwZSxHLm9yZGVyQnk9TTBlLEcub3Zlcj1WeWUsRy5vdmVyQXJncz1IMGUsRy5vdmVyRXZlcnk9VXllLEcub3ZlclNvbWU9cXllLEcucGFydGlhbD1KcSxHLnBhcnRpYWxSaWdodD1ZcHQsRy5wYXJ0aXRpb249RTBlLEcucGljaz1XX2UsRy5waWNrQnk9cmR0LEcucHJvcGVydHk9Y2R0LEcucHJvcGVydHlPZj1HeWUsRy5wdWxsPU1nZSxHLnB1bGxBbGw9RHB0LEcucHVsbEFsbEJ5PUVnZSxHLnB1bGxBbGxXaXRoPVRnZSxHLnB1bGxBdD1DZ2UsRy5yYW5nZT1XeWUsRy5yYW5nZVJpZ2h0PVl5ZSxHLnJlYXJnPVYwZSxHLnJlamVjdD1BMGUsRy5yZW1vdmU9QWdlLEcucmVzdD1VMGUsRy5yZXZlcnNlPSRxLEcuc2FtcGxlU2l6ZT1JMGUsRy5zZXQ9al9lLEcuc2V0V2l0aD1YX2UsRy5zaHVmZmxlPUwwZSxHLnNsaWNlPVBnZSxHLnNvcnRCeT1OMGUsRy5zb3J0ZWRVbmlxPU9nZSxHLnNvcnRlZFVuaXFCeT16Z2UsRy5zcGxpdD1feWUsRy5zcHJlYWQ9cTBlLEcudGFpbD1GZ2UsRy50YWtlPUJnZSxHLnRha2VSaWdodD1IZ2UsRy50YWtlUmlnaHRXaGlsZT1WZ2UsRy50YWtlV2hpbGU9VWdlLEcudGFwPW4wZSxHLnRocm90dGxlPUcwZSxHLnRocnU9X0ksRy50b0FycmF5PVpwdCxHLnRvUGFpcnM9bmR0LEcudG9QYWlyc0luPWlkdCxHLnRvUGF0aD1aeWUsRy50b1BsYWluT2JqZWN0PVFwdCxHLnRyYW5zZm9ybT0kX2UsRy51bmFyeT1XMGUsRy51bmlvbj1xZ2UsRy51bmlvbkJ5PUdnZSxHLnVuaW9uV2l0aD1XZ2UsRy51bmlxPVlnZSxHLnVuaXFCeT1qZ2UsRy51bmlxV2l0aD1YZ2UsRy51bnNldD1LX2UsRy51bnppcD1LcSxHLnVuemlwV2l0aD1PcHQsRy51cGRhdGU9Wl9lLEcudXBkYXRlV2l0aD1KX2UsRy52YWx1ZXM9U3gsRy52YWx1ZXNJbj1RX2UsRy53aXRob3V0PSRnZSxHLndvcmRzPXNkdCxHLndyYXA9WTBlLEcueG9yPUtnZSxHLnhvckJ5PVpnZSxHLnhvcldpdGg9SmdlLEcuemlwPVFnZSxHLnppcE9iamVjdD10MGUsRy56aXBPYmplY3REZWVwPWUwZSxHLnppcFdpdGg9cjBlLEcuZW50cmllcz1uZHQsRy5lbnRyaWVzSW49aWR0LEcuZXh0ZW5kPXRkdCxHLmV4dGVuZFdpdGg9TUksYUcoRyxHKSxHLmFkZD1ReWUsRy5hdHRlbXB0PWxkdCxHLmNhbWVsQ2FzZT1ueWUsRy5jYXBpdGFsaXplPW9kdCxHLmNlaWw9dDFlLEcuY2xhbXA9dHllLEcuY2xvbmU9WDBlLEcuY2xvbmVEZWVwPUswZSxHLmNsb25lRGVlcFdpdGg9WjBlLEcuY2xvbmVXaXRoPSQwZSxHLmNvbmZvcm1zVG89SjBlLEcuZGVidXJyPWFkdCxHLmRlZmF1bHRUbz1reWUsRy5kaXZpZGU9ZTFlLEcuZW5kc1dpdGg9aXllLEcuZXE9cnUsRy5lc2NhcGU9b3llLEcuZXNjYXBlUmVnRXhwPWF5ZSxHLmV2ZXJ5PXAwZSxHLmZpbmQ9bTBlLEcuZmluZEluZGV4PUxwdCxHLmZpbmRLZXk9QV9lLEcuZmluZExhc3Q9ZzBlLEcuZmluZExhc3RJbmRleD1rcHQsRy5maW5kTGFzdEtleT1QX2UsRy5mbG9vcj1yMWUsRy5mb3JFYWNoPUZwdCxHLmZvckVhY2hSaWdodD1CcHQsRy5mb3JJbj1JX2UsRy5mb3JJblJpZ2h0PUxfZSxHLmZvck93bj1rX2UsRy5mb3JPd25SaWdodD1SX2UsRy5nZXQ9ZUcsRy5ndD1RMGUsRy5ndGU9dF9lLEcuaGFzPU9fZSxHLmhhc0luPXJHLEcuaGVhZD1OcHQsRy5pZGVudGl0eT1ncyxHLmluY2x1ZGVzPWIwZSxHLmluZGV4T2Y9Z2dlLEcuaW5SYW5nZT1leWUsRy5pbnZva2U9Ql9lLEcuaXNBcmd1bWVudHM9c18sRy5pc0FycmF5PSRlLEcuaXNBcnJheUJ1ZmZlcj1lX2UsRy5pc0FycmF5TGlrZT1kcyxHLmlzQXJyYXlMaWtlT2JqZWN0PWJpLEcuaXNCb29sZWFuPXJfZSxHLmlzQnVmZmVyPWJtLEcuaXNEYXRlPW5fZSxHLmlzRWxlbWVudD1pX2UsRy5pc0VtcHR5PW9fZSxHLmlzRXF1YWw9YV9lLEcuaXNFcXVhbFdpdGg9c19lLEcuaXNFcnJvcj1RcSxHLmlzRmluaXRlPWxfZSxHLmlzRnVuY3Rpb249dXAsRy5pc0ludGVnZXI9anB0LEcuaXNMZW5ndGg9d0ksRy5pc01hcD1YcHQsRy5pc01hdGNoPWNfZSxHLmlzTWF0Y2hXaXRoPXVfZSxHLmlzTmFOPWhfZSxHLmlzTmF0aXZlPWZfZSxHLmlzTmlsPWRfZSxHLmlzTnVsbD1wX2UsRy5pc051bWJlcj0kcHQsRy5pc09iamVjdD1yaSxHLmlzT2JqZWN0TGlrZT1saSxHLmlzUGxhaW5PYmplY3Q9Rk0sRy5pc1JlZ0V4cD10RyxHLmlzU2FmZUludGVnZXI9bV9lLEcuaXNTZXQ9S3B0LEcuaXNTdHJpbmc9U0ksRy5pc1N5bWJvbD1qcyxHLmlzVHlwZWRBcnJheT13eCxHLmlzVW5kZWZpbmVkPWdfZSxHLmlzV2Vha01hcD1fX2UsRy5pc1dlYWtTZXQ9eV9lLEcuam9pbj1iZ2UsRy5rZWJhYkNhc2U9c3llLEcubGFzdD1YbCxHLmxhc3RJbmRleE9mPXdnZSxHLmxvd2VyQ2FzZT1seWUsRy5sb3dlckZpcnN0PWN5ZSxHLmx0PXZfZSxHLmx0ZT14X2UsRy5tYXg9bjFlLEcubWF4Qnk9aTFlLEcubWVhbj1vMWUsRy5tZWFuQnk9YTFlLEcubWluPXMxZSxHLm1pbkJ5PWwxZSxHLnN0dWJBcnJheT1sRyxHLnN0dWJGYWxzZT1jRyxHLnN0dWJPYmplY3Q9anllLEcuc3R1YlN0cmluZz1YeWUsRy5zdHViVHJ1ZT0keWUsRy5tdWx0aXBseT1jMWUsRy5udGg9U2dlLEcubm9Db25mbGljdD1CeWUsRy5ub29wPXNHLEcubm93PXZJLEcucGFkPXV5ZSxHLnBhZEVuZD1oeWUsRy5wYWRTdGFydD1meWUsRy5wYXJzZUludD1weWUsRy5yYW5kb209cnllLEcucmVkdWNlPVQwZSxHLnJlZHVjZVJpZ2h0PUMwZSxHLnJlcGVhdD1keWUsRy5yZXBsYWNlPW15ZSxHLnJlc3VsdD1ZX2UsRy5yb3VuZD11MWUsRy5ydW5JbkNvbnRleHQ9dXQsRy5zYW1wbGU9UDBlLEcuc2l6ZT1rMGUsRy5zbmFrZUNhc2U9Z3llLEcuc29tZT1SMGUsRy5zb3J0ZWRJbmRleD1JZ2UsRy5zb3J0ZWRJbmRleEJ5PUxnZSxHLnNvcnRlZEluZGV4T2Y9a2dlLEcuc29ydGVkTGFzdEluZGV4PVJnZSxHLnNvcnRlZExhc3RJbmRleEJ5PU5nZSxHLnNvcnRlZExhc3RJbmRleE9mPURnZSxHLnN0YXJ0Q2FzZT15eWUsRy5zdGFydHNXaXRoPXZ5ZSxHLnN1YnRyYWN0PWgxZSxHLnN1bT1mMWUsRy5zdW1CeT1wMWUsRy50ZW1wbGF0ZT14eWUsRy50aW1lcz1LeWUsRy50b0Zpbml0ZT1ocCxHLnRvSW50ZWdlcj1RZSxHLnRvTGVuZ3RoPUpwdCxHLnRvTG93ZXI9YnllLEcudG9OdW1iZXI9JGwsRy50b1NhZmVJbnRlZ2VyPWJfZSxHLnRvU3RyaW5nPW9uLEcudG9VcHBlcj13eWUsRy50cmltPVN5ZSxHLnRyaW1FbmQ9TXllLEcudHJpbVN0YXJ0PUV5ZSxHLnRydW5jYXRlPVR5ZSxHLnVuZXNjYXBlPUN5ZSxHLnVuaXF1ZUlkPUp5ZSxHLnVwcGVyQ2FzZT1BeWUsRy51cHBlckZpcnN0PW5HLEcuZWFjaD1GcHQsRy5lYWNoUmlnaHQ9QnB0LEcuZmlyc3Q9TnB0LGFHKEcsZnVuY3Rpb24oKXt2YXIgbT17fTtyZXR1cm4gbWgoRyxmdW5jdGlvbih2LFQpe3VuLmNhbGwoRy5wcm90b3R5cGUsVCl8fChtW1RdPXYpfSksbX0oKSx7Y2hhaW46ITF9KSxHLlZFUlNJT049dCxxbChbImJpbmQiLCJiaW5kS2V5IiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwicGFydGlhbCIsInBhcnRpYWxSaWdodCJdLGZ1bmN0aW9uKG0pe0dbbV0ucGxhY2Vob2xkZXI9R30pLHFsKFsiZHJvcCIsInRha2UiXSxmdW5jdGlvbihtLHYpe2dyLnByb3RvdHlwZVttXT1mdW5jdGlvbihUKXtUPVQ9PT1lPzE6WGkoUWUoVCksMCk7dmFyIE49dGhpcy5fX2ZpbHRlcmVkX18mJiF2P25ldyBncih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIE4uX19maWx0ZXJlZF9fP04uX190YWtlQ291bnRfXz1yYShULE4uX190YWtlQ291bnRfXyk6Ti5fX3ZpZXdzX18ucHVzaCh7c2l6ZTpyYShULHJ0KSx0eXBlOm0rKE4uX19kaXJfXzwwPyJSaWdodCI6IiIpfSksTn0sZ3IucHJvdG90eXBlW20rIlJpZ2h0Il09ZnVuY3Rpb24oVCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW21dKFQpLnJldmVyc2UoKX19KSxxbChbImZpbHRlciIsIm1hcCIsInRha2VXaGlsZSJdLGZ1bmN0aW9uKG0sdil7dmFyIFQ9disxLE49VD09THx8VD09Rjtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oVil7dmFyIFk9dGhpcy5jbG9uZSgpO3JldHVybiBZLl9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6a2UoViwzKSx0eXBlOlR9KSxZLl9fZmlsdGVyZWRfXz1ZLl9fZmlsdGVyZWRfX3x8TixZfX0pLHFsKFsiaGVhZCIsImxhc3QiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJ0YWtlIisodj8iUmlnaHQiOiIiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tUXSgxKS52YWx1ZSgpWzBdfX0pLHFsKFsiaW5pdGlhbCIsInRhaWwiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJkcm9wIisodj8iIjoiUmlnaHQiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3IGdyKHRoaXMpOnRoaXNbVF0oMSl9fSksZ3IucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoZ3MpfSxnci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5maWx0ZXIobSkuaGVhZCgpfSxnci5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQobSl9LGdyLnByb3RvdHlwZS5pbnZva2VNYXA9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bmV3IGdyKHRoaXMpOnRoaXMubWFwKGZ1bmN0aW9uKFQpe3JldHVybiBrTShULG0sdil9KX0pLGdyLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuZmlsdGVyKGJJKGtlKG0pKSl9LGdyLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihtLHYpe209UWUobSk7dmFyIFQ9dGhpcztyZXR1cm4gVC5fX2ZpbHRlcmVkX18mJihtPjB8fHY8MCk/bmV3IGdyKFQpOihtPDA/VD1ULnRha2VSaWdodCgtbSk6bSYmKFQ9VC5kcm9wKG0pKSx2IT09ZSYmKHY9UWUodiksVD12PDA/VC5kcm9wUmlnaHQoLXYpOlQudGFrZSh2LW0pKSxUKX0sZ3IucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUobSkucmV2ZXJzZSgpfSxnci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UocnQpfSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh2KSxOPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodiksVj1HW04/InRha2UiKyh2PT0ibGFzdCI/IlJpZ2h0IjoiIik6dl0sWT1OfHwvXmZpbmQvLnRlc3Qodik7IVZ8fChHLnByb3RvdHlwZVt2XT1mdW5jdGlvbigpe3ZhciBKPXRoaXMuX193cmFwcGVkX18saXQ9Tj9bMV06YXJndW1lbnRzLGZ0PUogaW5zdGFuY2VvZiBncixEdD1pdFswXSxPdD1mdHx8JGUoSiksVnQ9ZnVuY3Rpb24ocHIpe3ZhciB5cj1WLmFwcGx5KEcscG0oW3ByXSxpdCkpO3JldHVybiBOJiZvZT95clswXTp5cn07T3QmJlQmJnR5cGVvZiBEdD09ImZ1bmN0aW9uIiYmRHQubGVuZ3RoIT0xJiYoZnQ9T3Q9ITEpO3ZhciBvZT10aGlzLl9fY2hhaW5fXyxUZT0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLE5lPVkmJiFvZSxlcj1mdCYmIVRlO2lmKCFZJiZPdCl7Sj1lcj9KOm5ldyBncih0aGlzKTt2YXIgRGU9bS5hcHBseShKLGl0KTtyZXR1cm4gRGUuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpfSSxhcmdzOltWdF0sdGhpc0FyZzplfSksbmV3IFdsKERlLG9lKX1yZXR1cm4gTmUmJmVyP20uYXBwbHkodGhpcyxpdCk6KERlPXRoaXMudGhydShWdCksTmU/Tj9EZS52YWx1ZSgpWzBdOkRlLnZhbHVlKCk6RGUpfSl9KSxxbChbInBvcCIsInB1c2giLCJzaGlmdCIsInNvcnQiLCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24obSl7dmFyIHY9cTZbbV0sVD0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobSk/InRhcCI6InRocnUiLE49L14oPzpwb3B8c2hpZnQpJC8udGVzdChtKTtHLnByb3RvdHlwZVttXT1mdW5jdGlvbigpe3ZhciBWPWFyZ3VtZW50cztpZihOJiYhdGhpcy5fX2NoYWluX18pe3ZhciBZPXRoaXMudmFsdWUoKTtyZXR1cm4gdi5hcHBseSgkZShZKT9ZOltdLFYpfXJldHVybiB0aGlzW1RdKGZ1bmN0aW9uKEope3JldHVybiB2LmFwcGx5KCRlKEopP0o6W10sVil9KX19KSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD1HW3ZdO2lmKFQpe3ZhciBOPVQubmFtZSsiIjt1bi5jYWxsKF94LE4pfHwoX3hbTl09W10pLF94W05dLnB1c2goe25hbWU6dixmdW5jOlR9KX19KSxfeFt1SShlLGcpLm5hbWVdPVt7bmFtZToid3JhcHBlciIsZnVuYzplfV0sZ3IucHJvdG90eXBlLmNsb25lPUNkZSxnci5wcm90b3R5cGUucmV2ZXJzZT1BZGUsZ3IucHJvdG90eXBlLnZhbHVlPVBkZSxHLnByb3RvdHlwZS5hdD1pMGUsRy5wcm90b3R5cGUuY2hhaW49bzBlLEcucHJvdG90eXBlLmNvbW1pdD1hMGUsRy5wcm90b3R5cGUubmV4dD1zMGUsRy5wcm90b3R5cGUucGxhbnQ9YzBlLEcucHJvdG90eXBlLnJldmVyc2U9dTBlLEcucHJvdG90eXBlLnRvSlNPTj1HLnByb3RvdHlwZS52YWx1ZU9mPUcucHJvdG90eXBlLnZhbHVlPWgwZSxHLnByb3RvdHlwZS5maXJzdD1HLnByb3RvdHlwZS5oZWFkLEVNJiYoRy5wcm90b3R5cGVbRU1dPWwwZSksR30sbW09YWRlKCk7dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGRlZmluZS5hbWQ9PSJvYmplY3QiJiZkZWZpbmUuYW1kPyhmby5fPW1tLGRlZmluZShmdW5jdGlvbigpe3JldHVybiBtbX0pKTpRMD8oKFEwLmV4cG9ydHM9bW0pLl89bW0sb3EuXz1tbSk6Zm8uXz1tbX0pLmNhbGwoUngpfSk7ZnVuY3Rpb24gZl90KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IFo5KHIpfWZ1bmN0aW9uIFo5KGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGgyZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIGYyZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGhfdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09dTJlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgdTJlLHZzLHBfdD1NKCgpPT57dTJlPXt2YWx1ZTpmdW5jdGlvbigpe319O1o5LnByb3RvdHlwZT1mX3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpaOSxvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPWgyZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPWYyZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09aF90KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09aF90KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBaOShlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dnM9Zl90fSk7dmFyIGttPU0oKCk9PntwX3QoKX0pO2Z1bmN0aW9uIHlZKGUpe3JldHVybitlfXZhciB3MXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZZKGUpe3JldHVybiBlKmV9ZnVuY3Rpb24geFkoZSl7cmV0dXJuIGUqKDItZSl9ZnVuY3Rpb24gUEwoZSl7cmV0dXJuKChlKj0yKTw9MT9lKmU6LS1lKigyLWUpKzEpLzJ9dmFyIFMxdD1NKCgpPT57fSk7ZnVuY3Rpb24gYlkoZSl7cmV0dXJuIGUqZSplfWZ1bmN0aW9uIHdZKGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiB4cyhlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgTTF0PU0oKCk9Pnt9KTt2YXIgU1ksTVksRVksSUwsRTF0PU0oKCk9PntTWT0zLE1ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0oU1kpLEVZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiAxLU1hdGgucG93KDEtbix0KX1yZXR1cm4gci5leHBvbmVudD1lLHJ9KFNZKSxJTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPD0xP01hdGgucG93KG4sdCk6Mi1NYXRoLnBvdygyLW4sdCkpLzJ9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfShTWSl9KTtmdW5jdGlvbiBUWShlKXtyZXR1cm4rZT09MT8xOjEtTWF0aC5jb3MoZSpDMXQpfWZ1bmN0aW9uIENZKGUpe3JldHVybiBNYXRoLnNpbihlKkMxdCl9ZnVuY3Rpb24gTEwoZSl7cmV0dXJuKDEtTWF0aC5jb3MoVDF0KmUpKS8yfXZhciBUMXQsQzF0LEExdD1NKCgpPT57VDF0PU1hdGguUEksQzF0PVQxdC8yfSk7ZnVuY3Rpb24gRGgoZSl7cmV0dXJuKE1hdGgucG93KDIsLTEwKmUpLS4wMDA5NzY1NjI1KSoxLjAwMDk3NzUxNzEwNjU0OTR9dmFyIEFZPU0oKCk9Pnt9KTtmdW5jdGlvbiBQWShlKXtyZXR1cm4gRGgoMS0rZSl9ZnVuY3Rpb24gSVkoZSl7cmV0dXJuIDEtRGgoZSl9ZnVuY3Rpb24ga0woZSl7cmV0dXJuKChlKj0yKTw9MT9EaCgxLWUpOjItRGgoZS0xKSkvMn12YXIgUDF0PU0oKCk9PntBWSgpfSk7ZnVuY3Rpb24gTFkoZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX1mdW5jdGlvbiBrWShlKXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tZSplKX1mdW5jdGlvbiBSTChlKXtyZXR1cm4oKGUqPTIpPD0xPzEtTWF0aC5zcXJ0KDEtZSplKTpNYXRoLnNxcnQoMS0oZS09MikqZSkrMSkvMn12YXIgSTF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBOWShlKXtyZXR1cm4gMS1QXygxLWUpfWZ1bmN0aW9uIFBfKGUpe3JldHVybihlPStlKTxSWT9OTCplKmU6ZTxvU2U/TkwqKGUtPWlTZSkqZSthU2U6ZTxsU2U/TkwqKGUtPXNTZSkqZStjU2U6TkwqKGUtPXVTZSkqZStoU2V9ZnVuY3Rpb24gRFkoZSl7cmV0dXJuKChlKj0yKTw9MT8xLVBfKDEtZSk6UF8oZS0xKSsxKS8yfXZhciBSWSxpU2Usb1NlLGFTZSxzU2UsbFNlLGNTZSx1U2UsaFNlLE5MLEwxdD1NKCgpPT57Ulk9LjM2MzYzNjM2MzYzNjM2MzY1LGlTZT02LzExLG9TZT04LzExLGFTZT0zLzQsc1NlPTkvMTEsbFNlPTEwLzExLGNTZT0xNS8xNix1U2U9MjEvMjIsaFNlPTYzLzY0LE5MPTEvUlkvUll9KTt2YXIgT1kselksRlksREwsazF0PU0oKCk9PntPWT0xLjcwMTU4LHpZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybihuPStuKSpuKih0KihuLTEpK24pfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KE9ZKSxGWT1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4tLW4qbiooKG4rMSkqdCtuKSsxfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KE9ZKSxETD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPDE/bipuKigodCsxKSpuLXQpOihuLT0yKSpuKigodCsxKSpuK3QpKzIpLzJ9cmV0dXJuIHIub3ZlcnNob290PWUscn0oT1kpfSk7dmFyIFNiLEJZLEhZLFZZLE9MLFVZLFIxdD1NKCgpPT57QVkoKTtTYj0yKk1hdGguUEksQlk9MSxIWT0uMyxWWT1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gdCpEaCgtIC0tbykqTWF0aC5zaW4oKG4tbykvcil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKG8pe3JldHVybiBlKG8scipTYil9LGkucGVyaW9kPWZ1bmN0aW9uKG8pe3JldHVybiBlKHQsbyl9LGl9KEJZLEhZKSxPTD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gMS10KkRoKG89K28pKk1hdGguc2luKChvK24pL3IpfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihvKXtyZXR1cm4gZShvLHIqU2IpfSxpLnBlcmlvZD1mdW5jdGlvbihvKXtyZXR1cm4gZSh0LG8pfSxpfShCWSxIWSksVVk9ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPU1hdGguYXNpbigxLyh0PU1hdGgubWF4KDEsdCkpKSooci89U2IpO2Z1bmN0aW9uIGkobyl7cmV0dXJuKChvPW8qMi0xKTwwP3QqRGgoLW8pKk1hdGguc2luKChuLW8pL3IpOjItdCpEaChvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKlNiKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oQlksSFkpfSk7dmFyIE4xdD17fTtLcyhOMXQse2Vhc2VCYWNrOigpPT5ETCxlYXNlQmFja0luOigpPT56WSxlYXNlQmFja0luT3V0OigpPT5ETCxlYXNlQmFja091dDooKT0+RlksZWFzZUJvdW5jZTooKT0+UF8sZWFzZUJvdW5jZUluOigpPT5OWSxlYXNlQm91bmNlSW5PdXQ6KCk9PkRZLGVhc2VCb3VuY2VPdXQ6KCk9PlBfLGVhc2VDaXJjbGU6KCk9PlJMLGVhc2VDaXJjbGVJbjooKT0+TFksZWFzZUNpcmNsZUluT3V0OigpPT5STCxlYXNlQ2lyY2xlT3V0OigpPT5rWSxlYXNlQ3ViaWM6KCk9PnhzLGVhc2VDdWJpY0luOigpPT5iWSxlYXNlQ3ViaWNJbk91dDooKT0+eHMsZWFzZUN1YmljT3V0OigpPT53WSxlYXNlRWxhc3RpYzooKT0+T0wsZWFzZUVsYXN0aWNJbjooKT0+VlksZWFzZUVsYXN0aWNJbk91dDooKT0+VVksZWFzZUVsYXN0aWNPdXQ6KCk9Pk9MLGVhc2VFeHA6KCk9PmtMLGVhc2VFeHBJbjooKT0+UFksZWFzZUV4cEluT3V0OigpPT5rTCxlYXNlRXhwT3V0OigpPT5JWSxlYXNlTGluZWFyOigpPT55WSxlYXNlUG9seTooKT0+SUwsZWFzZVBvbHlJbjooKT0+TVksZWFzZVBvbHlJbk91dDooKT0+SUwsZWFzZVBvbHlPdXQ6KCk9PkVZLGVhc2VRdWFkOigpPT5QTCxlYXNlUXVhZEluOigpPT52WSxlYXNlUXVhZEluT3V0OigpPT5QTCxlYXNlUXVhZE91dDooKT0+eFksZWFzZVNpbjooKT0+TEwsZWFzZVNpbkluOigpPT5UWSxlYXNlU2luSW5PdXQ6KCk9PkxMLGVhc2VTaW5PdXQ6KCk9PkNZfSk7dmFyIElfPU0oKCk9Pnt3MXQoKTtTMXQoKTtNMXQoKTtFMXQoKTtBMXQoKTtQMXQoKTtJMXQoKTtMMXQoKTtrMXQoKTtSMXQoKX0pO2Z1bmN0aW9uIFdMKCl7fWZ1bmN0aW9uIFgxdChlLHQpe3ZhciByPW5ldyBXTDtpZihlIGluc3RhbmNlb2YgV0wpZS5lYWNoKGZ1bmN0aW9uKHMsbCl7ci5zZXQobCxzKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG49LTEsaT1lLmxlbmd0aCxvO2lmKHQ9PW51bGwpZm9yKDsrK248aTspci5zZXQobixlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuc2V0KHQobz1lW25dLG4sZSksbyl9ZWxzZSBpZihlKWZvcih2YXIgYSBpbiBlKXIuc2V0KGEsZVthXSk7cmV0dXJuIHJ9dmFyIGVsLEppLFlMPU0oKCk9PntlbD0iJCI7V0wucHJvdG90eXBlPVgxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOldMLGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZWwrZSBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZWwrZV19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzW2VsK2VdPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PWVsK2U7cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWVsJiZkZWxldGUgdGhpc1tlXX0sa2V5czpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBlfSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUucHVzaCh0aGlzW3RdKTtyZXR1cm4gZX0sZW50cmllczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIGV9LHNpemU6ZnVuY3Rpb24oKXt2YXIgZT0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmKytlO3JldHVybiBlfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWlmKGVbMF09PT1lbClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUodGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07Smk9WDF0fSk7ZnVuY3Rpb24gWjF0KCl7dmFyIGU9W10sdD1bXSxyLG4saTtmdW5jdGlvbiBvKHMsbCxjLHUpe2lmKGw+PWUubGVuZ3RoKXJldHVybiByIT1udWxsJiZzLnNvcnQociksbiE9bnVsbD9uKHMpOnM7Zm9yKHZhciBoPS0xLGY9cy5sZW5ndGgscD1lW2wrK10sZCxnLF89SmkoKSx5LHg9YygpOysraDxmOykoeT1fLmdldChkPXAoZz1zW2hdKSsiIikpP3kucHVzaChnKTpfLnNldChkLFtnXSk7cmV0dXJuIF8uZWFjaChmdW5jdGlvbihiLFMpe3UoeCxTLG8oYixsLGMsdSkpfSkseH1mdW5jdGlvbiBhKHMsbCl7aWYoKytsPmUubGVuZ3RoKXJldHVybiBzO3ZhciBjLHU9dFtsLTFdO3JldHVybiBuIT1udWxsJiZsPj1lLmxlbmd0aD9jPXMuZW50cmllcygpOihjPVtdLHMuZWFjaChmdW5jdGlvbihoLGYpe2MucHVzaCh7a2V5OmYsdmFsdWVzOmEoaCxsKX0pfSkpLHUhPW51bGw/Yy5zb3J0KGZ1bmN0aW9uKGgsZil7cmV0dXJuIHUoaC5rZXksZi5rZXkpfSk6Y31yZXR1cm4gaT17b2JqZWN0OmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCxQU2UsSVNlKX0sbWFwOmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCwkMXQsSzF0KX0sZW50cmllczpmdW5jdGlvbihzKXtyZXR1cm4gYShvKHMsMCwkMXQsSzF0KSwwKX0sa2V5OmZ1bmN0aW9uKHMpe3JldHVybiBlLnB1c2gocyksaX0sc29ydEtleXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHRbZS5sZW5ndGgtMV09cyxpfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKHMpe3JldHVybiByPXMsaX0scm9sbHVwOmZ1bmN0aW9uKHMpe3JldHVybiBuPXMsaX19fWZ1bmN0aW9uIFBTZSgpe3JldHVybnt9fWZ1bmN0aW9uIElTZShlLHQscil7ZVt0XT1yfWZ1bmN0aW9uICQxdCgpe3JldHVybiBKaSgpfWZ1bmN0aW9uIEsxdChlLHQscil7ZS5zZXQodCxyKX12YXIgSjF0PU0oKCk9PntZTCgpfSk7ZnVuY3Rpb24gakwoKXt9ZnVuY3Rpb24gUTF0KGUsdCl7dmFyIHI9bmV3IGpMO2lmKGUgaW5zdGFuY2VvZiBqTCllLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIga18sdHZ0LGV2dD1NKCgpPT57WUwoKTtrXz1KaS5wcm90b3R5cGU7akwucHJvdG90eXBlPVExdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpMLGhhczprXy5oYXMsYWRkOmZ1bmN0aW9uKGUpe3JldHVybiBlKz0iIix0aGlzW2VsK2VdPWUsdGhpc30scmVtb3ZlOmtfLnJlbW92ZSxjbGVhcjprXy5jbGVhcix2YWx1ZXM6a18ua2V5cyxzaXplOmtfLnNpemUsZW1wdHk6a18uZW1wdHksZWFjaDprXy5lYWNofTt0dnQ9UTF0fSk7ZnVuY3Rpb24gWEwoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBydnQ9TSgoKT0+e30pO2Z1bmN0aW9uIG52dChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIGl2dD1NKCgpPT57fSk7ZnVuY3Rpb24gb3Z0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBhdnQ9TSgoKT0+e30pO3ZhciBUYj1NKCgpPT57SjF0KCk7ZXZ0KCk7WUwoKTtydnQoKTtpdnQoKTthdnQoKX0pO2Z1bmN0aW9uIGR2dChlKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK2UubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIityKyddIHx8ICIiJ30pLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIEJTZShlLHQpe3ZhciByPWR2dChlKTtyZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4gdChyKG4pLGksZSl9fWZ1bmN0aW9uIHB2dChlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtmb3IodmFyIGkgaW4gbilpIGluIHR8fHIucHVzaCh0W2ldPWkpfSkscn1mdW5jdGlvbiB3cyhlLHQpe3ZhciByPWUrIiIsbj1yLmxlbmd0aDtyZXR1cm4gbjx0P25ldyBBcnJheSh0LW4rMSkuam9pbigwKStyOnJ9ZnVuY3Rpb24gSFNlKGUpe3JldHVybiBlPDA/Ii0iK3dzKC1lLDYpOmU+OTk5OT8iKyIrd3MoZSw2KTp3cyhlLDQpfWZ1bmN0aW9uIFZTZShlKXt2YXIgdD1lLmdldFVUQ0hvdXJzKCkscj1lLmdldFVUQ01pbnV0ZXMoKSxuPWUuZ2V0VVRDU2Vjb25kcygpLGk9ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtyZXR1cm4gaXNOYU4oZSk/IkludmFsaWQgRGF0ZSI6SFNlKGUuZ2V0VVRDRnVsbFllYXIoKSw0KSsiLSIrd3MoZS5nZXRVVENNb250aCgpKzEsMikrIi0iK3dzKGUuZ2V0VVRDRGF0ZSgpLDIpKyhpPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyIuIit3cyhpLDMpKyJaIjpuPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyJaIjpyfHx0PyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyJaIjoiIil9ZnVuY3Rpb24gV20oZSl7dmFyIHQ9bmV3IFJlZ0V4cCgnWyInK2UrYApccl1gKSxyPWUuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBuKGgsZil7dmFyIHAsZCxnPWkoaCxmdW5jdGlvbihfLHkpe2lmKHApcmV0dXJuIHAoXyx5LTEpO2Q9XyxwPWY/QlNlKF8sZik6ZHZ0KF8pfSk7cmV0dXJuIGcuY29sdW1ucz1kfHxbXSxnfWZ1bmN0aW9uIGkoaCxmKXt2YXIgcD1bXSxkPWgubGVuZ3RoLGc9MCxfPTAseSx4PWQ8PTAsYj0hMTtoLmNoYXJDb2RlQXQoZC0xKT09PVZFJiYtLWQsaC5jaGFyQ29kZUF0KGQtMSk9PT1paiYmLS1kO2Z1bmN0aW9uIFMoKXtpZih4KXJldHVybiByajtpZihiKXJldHVybiBiPSExLGZ2dDt2YXIgUCxrPWcsTztpZihoLmNoYXJDb2RlQXQoayk9PT1uail7Zm9yKDtnKys8ZCYmaC5jaGFyQ29kZUF0KGcpIT09bmp8fGguY2hhckNvZGVBdCgrK2cpPT09bmo7KTtyZXR1cm4oUD1nKT49ZD94PSEwOihPPWguY2hhckNvZGVBdChnKyspKT09PVZFP2I9ITA6Tz09PWlqJiYoYj0hMCxoLmNoYXJDb2RlQXQoZyk9PT1WRSYmKytnKSxoLnNsaWNlKGsrMSxQLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2c8ZDspe2lmKChPPWguY2hhckNvZGVBdChQPWcrKykpPT09VkUpYj0hMDtlbHNlIGlmKE89PT1pailiPSEwLGguY2hhckNvZGVBdChnKT09PVZFJiYrK2c7ZWxzZSBpZihPIT09ciljb250aW51ZTtyZXR1cm4gaC5zbGljZShrLFApfXJldHVybiB4PSEwLGguc2xpY2UoayxkKX1mb3IoOyh5PVMoKSkhPT1yajspe2Zvcih2YXIgQz1bXTt5IT09ZnZ0JiZ5IT09cmo7KUMucHVzaCh5KSx5PVMoKTtmJiYoQz1mKEMsXysrKSk9PW51bGx8fHAucHVzaChDKX1yZXR1cm4gcH1mdW5jdGlvbiBvKGgsZil7cmV0dXJuIGgubWFwKGZ1bmN0aW9uKHApe3JldHVybiBmLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gdShwW2RdKX0pLmpvaW4oZSl9KX1mdW5jdGlvbiBhKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPXB2dChoKSksW2YubWFwKHUpLmpvaW4oZSldLmNvbmNhdChvKGgsZikpLmpvaW4oYApgKX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPXB2dChoKSksbyhoLGYpLmpvaW4oYApgKX1mdW5jdGlvbiBsKGgpe3JldHVybiBoLm1hcChjKS5qb2luKGAKYCl9ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaC5tYXAodSkuam9pbihlKX1mdW5jdGlvbiB1KGgpe3JldHVybiBoPT1udWxsPyIiOmggaW5zdGFuY2VvZiBEYXRlP1ZTZShoKTp0LnRlc3QoaCs9IiIpPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aH1yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6YSxmb3JtYXRCb2R5OnMsZm9ybWF0Um93czpsLGZvcm1hdFJvdzpjLGZvcm1hdFZhbHVlOnV9fXZhciBmdnQscmosbmosVkUsaWosUUw9TSgoKT0+e2Z2dD17fSxyaj17fSxuaj0zNCxWRT0xMCxpaj0xM30pO3ZhciBSXyxDYixtdnQsZ3Z0LF92dCx5dnQsdnZ0LHh2dCxidnQ9TSgoKT0+e1FMKCk7Ul89V20oIiwiKSxDYj1SXy5wYXJzZSxtdnQ9Ul8ucGFyc2VSb3dzLGd2dD1SXy5mb3JtYXQsX3Z0PVJfLmZvcm1hdEJvZHkseXZ0PVJfLmZvcm1hdFJvd3MsdnZ0PVJfLmZvcm1hdFJvdyx4dnQ9Ul8uZm9ybWF0VmFsdWV9KTt2YXIgTl8sQWIsd3Z0LFN2dCxNdnQsRXZ0LFR2dCxDdnQsQXZ0PU0oKCk9PntRTCgpO05fPVdtKCIJIiksQWI9Tl8ucGFyc2Usd3Z0PU5fLnBhcnNlUm93cyxTdnQ9Tl8uZm9ybWF0LE12dD1OXy5mb3JtYXRCb2R5LEV2dD1OXy5mb3JtYXRSb3dzLFR2dD1OXy5mb3JtYXRSb3csQ3Z0PU5fLmZvcm1hdFZhbHVlfSk7ZnVuY3Rpb24gb2ooZSl7Zm9yKHZhciB0IGluIGUpe3ZhciByPWVbdF0udHJpbSgpLG4saTtpZighcilyPW51bGw7ZWxzZSBpZihyPT09InRydWUiKXI9ITA7ZWxzZSBpZihyPT09ImZhbHNlIilyPSExO2Vsc2UgaWYocj09PSJOYU4iKXI9TmFOO2Vsc2UgaWYoIWlzTmFOKG49K3IpKXI9bjtlbHNlIGlmKGk9ci5tYXRjaCgvXihbLStdXGR7Mn0pP1xkezR9KC1cZHsyfSgtXGR7Mn0pPyk/KFRcZHsyfTpcZHsyfSg6XGR7Mn0oXC5cZHszfSk/KT8oWnxbLStdXGR7Mn06XGR7Mn0pPyk/JC8pKVVTZSYmISFpWzRdJiYhaVs3XSYmKHI9ci5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxyPW5ldyBEYXRlKHIpO2Vsc2UgY29udGludWU7ZVt0XT1yfXJldHVybiBlfXZhciBVU2UsUHZ0PU0oKCk9PntVU2U9bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCl9KTt2YXIgVUU9TSgoKT0+e1FMKCk7YnZ0KCk7QXZ0KCk7UHZ0KCl9KTt2YXIgcGU9e307S3MocGUse19fYXNzaWduOigpPT5wNWUsX19hc3luY0RlbGVnYXRvcjooKT0+UzVlLF9fYXN5bmNHZW5lcmF0b3I6KCk9Pnc1ZSxfX2FzeW5jVmFsdWVzOigpPT5NNWUsX19hd2FpdDooKT0+VjUsX19hd2FpdGVyOigpPT55NWUsX19kZWNvcmF0ZTooKT0+bTVlLF9fZXhwb3J0U3RhcjooKT0+eDVlLF9fZXh0ZW5kczooKT0+ZjVlLF9fZ2VuZXJhdG9yOigpPT52NWUsX19tYWtlVGVtcGxhdGVPYmplY3Q6KCk9PkU1ZSxfX21ldGFkYXRhOigpPT5fNWUsX19wYXJhbTooKT0+ZzVlLF9fcmVhZDooKT0+SjN0LF9fcmVzdDooKT0+ZDVlLF9fc3ByZWFkOigpPT5iNWUsX192YWx1ZXM6KCk9PnYkfSk7ZnVuY3Rpb24gZjVlKGUsdCl7aDVlKGUsdCk7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1lLnByb3RvdHlwZT10PT09bnVsbD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9ZnVuY3Rpb24gZDVlKGUsdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnQuaW5kZXhPZihuKTwwJiYocltuXT1lW25dKTtpZihlIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIGk9MCxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7aTxuLmxlbmd0aDtpKyspdC5pbmRleE9mKG5baV0pPDAmJihyW25baV1dPWVbbltpXV0pO3JldHVybiByfWZ1bmN0aW9uIG01ZShlLHQscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLG89aTwzP3Q6bj09PW51bGw/bj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6bixhO2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGU9PSJmdW5jdGlvbiIpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG4pO2Vsc2UgZm9yKHZhciBzPWUubGVuZ3RoLTE7cz49MDtzLS0pKGE9ZVtzXSkmJihvPShpPDM/YShvKTppPjM/YSh0LHIsbyk6YSh0LHIpKXx8byk7cmV0dXJuIGk+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixvKSxvfWZ1bmN0aW9uIGc1ZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3QocixuLGUpfX1mdW5jdGlvbiBfNWUoZSx0KXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGUsdCl9ZnVuY3Rpb24geTVlKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShjKXt0cnl7bChuLm5leHQoYykpfWNhdGNoKHUpe28odSl9fWZ1bmN0aW9uIHMoYyl7dHJ5e2wobi50aHJvdyhjKSl9Y2F0Y2godSl7byh1KX19ZnVuY3Rpb24gbChjKXtjLmRvbmU/aShjLnZhbHVlKTpuZXcgcihmdW5jdGlvbih1KXt1KGMudmFsdWUpfSkudGhlbihhLHMpfWwoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pfWZ1bmN0aW9uIHY1ZShlLHQpe3ZhciByPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihvWzBdJjEpdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LG4saSxvLGE7cmV0dXJuIGE9e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoYVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhO2Z1bmN0aW9uIHMoYyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBsKFtjLHVdKX19ZnVuY3Rpb24gbChjKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3I7KXRyeXtpZihuPTEsaSYmKG89aVtjWzBdJjI/InJldHVybiI6Y1swXT8idGhyb3ciOiJuZXh0Il0pJiYhKG89by5jYWxsKGksY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKGk9MCxvJiYoYz1bMCxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiByLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OnIubGFiZWwrKyxpPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9ci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobz1yLnRyeXMsIShvPW8ubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoY1swXT09PTZ8fGNbMF09PT0yKSl7cj0wO2NvbnRpbnVlfWlmKGNbMF09PT0zJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7ci5sYWJlbD1jWzFdO2JyZWFrfWlmKGNbMF09PT02JiZyLmxhYmVsPG9bMV0pe3IubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmci5sYWJlbDxvWzJdKXtyLmxhYmVsPW9bMl0sci5vcHMucHVzaChjKTticmVha31vWzJdJiZyLm9wcy5wb3AoKSxyLnRyeXMucG9wKCk7Y29udGludWV9Yz10LmNhbGwoZSxyKX1jYXRjaCh1KXtjPVs2LHVdLGk9MH1maW5hbGx5e249bz0wfWlmKGNbMF0mNSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX1mdW5jdGlvbiB4NWUoZSx0KXtmb3IodmFyIHIgaW4gZSl0Lmhhc093blByb3BlcnR5KHIpfHwodFtyXT1lW3JdKX1mdW5jdGlvbiB2JChlKXt2YXIgdD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlW1N5bWJvbC5pdGVyYXRvcl0scj0wO3JldHVybiB0P3QuY2FsbChlKTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX19ZnVuY3Rpb24gSjN0KGUsdCl7dmFyIHI9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFyKXJldHVybiBlO3ZhciBuPXIuY2FsbChlKSxpLG89W10sYTt0cnl7Zm9yKDsodD09PXZvaWQgMHx8dC0tID4wKSYmIShpPW4ubmV4dCgpKS5kb25lOylvLnB1c2goaS52YWx1ZSl9Y2F0Y2gocyl7YT17ZXJyb3I6c319ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKHI9bi5yZXR1cm4pJiZyLmNhbGwobil9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fXJldHVybiBvfWZ1bmN0aW9uIGI1ZSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KEozdChhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX1mdW5jdGlvbiBWNShlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFY1Pyh0aGlzLnY9ZSx0aGlzKTpuZXcgVjUoZSl9ZnVuY3Rpb24gdzVlKGUsdCxyKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIG49ci5hcHBseShlLHR8fFtdKSxpLG89W107cmV0dXJuIGk9e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKGYpe25bZl0mJihpW2ZdPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGcpe28ucHVzaChbZixwLGQsZ10pPjF8fHMoZixwKX0pfSl9ZnVuY3Rpb24gcyhmLHApe3RyeXtsKG5bZl0ocCkpfWNhdGNoKGQpe2gob1swXVszXSxkKX19ZnVuY3Rpb24gbChmKXtmLnZhbHVlIGluc3RhbmNlb2YgVjU/UHJvbWlzZS5yZXNvbHZlKGYudmFsdWUudikudGhlbihjLHUpOmgob1swXVsyXSxmKX1mdW5jdGlvbiBjKGYpe3MoIm5leHQiLGYpfWZ1bmN0aW9uIHUoZil7cygidGhyb3ciLGYpfWZ1bmN0aW9uIGgoZixwKXtmKHApLG8uc2hpZnQoKSxvLmxlbmd0aCYmcyhvWzBdWzBdLG9bMF1bMV0pfX1mdW5jdGlvbiBTNWUoZSl7dmFyIHQscjtyZXR1cm4gdD17fSxuKCJuZXh0IiksbigidGhyb3ciLGZ1bmN0aW9uKGkpe3Rocm93IGl9KSxuKCJyZXR1cm4iKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiBuKGksbyl7ZVtpXSYmKHRbaV09ZnVuY3Rpb24oYSl7cmV0dXJuKHI9IXIpP3t2YWx1ZTpWNShlW2ldKGEpKSxkb25lOmk9PT0icmV0dXJuIn06bz9vKGEpOmF9KX19ZnVuY3Rpb24gTTVlKGUpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgdD1lW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gdD90LmNhbGwoZSk6dHlwZW9mIHYkPT0iZnVuY3Rpb24iP3YkKGUpOmVbU3ltYm9sLml0ZXJhdG9yXSgpfWZ1bmN0aW9uIEU1ZShlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9dmFyIGg1ZSxwNWUsZGU9TSgoKT0+e2g1ZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX07cDVlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspe3I9YXJndW1lbnRzW25dO2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYodFtvXT1yW29dKX1yZXR1cm4gdH19KTt2YXIgUTN0LHRNdD1NKCgpPT57UTN0PSI0LjEzLjAifSk7ZnVuY3Rpb24gX2MoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIHB5PU0oKCk9Pnt9KTtmdW5jdGlvbiBvUihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1UNWUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBUNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9jKGUodCkscil9fXZhciB4JD1NKCgpPT57cHkoKX0pO3ZhciBlTXQsYiQsck10LGFSLHckPU0oKCk9PntweSgpO3gkKCk7ZU10PW9SKF9jKSxiJD1lTXQucmlnaHQsck10PWVNdC5sZWZ0LGFSPWIkfSk7ZnVuY3Rpb24gbk10KGUsdCl7dD09bnVsbCYmKHQ9UyQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbMF0sbz1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylvW3JdPXQoaSxpPWVbKytyXSk7cmV0dXJuIG99ZnVuY3Rpb24gUyQoZSx0KXtyZXR1cm5bZSx0XX12YXIgTSQ9TSgoKT0+e30pO2Z1bmN0aW9uIGlNdChlLHQscil7dmFyIG49ZS5sZW5ndGgsaT10Lmxlbmd0aCxvPW5ldyBBcnJheShuKmkpLGEscyxsLGM7Zm9yKHI9PW51bGwmJihyPVMkKSxhPWw9MDthPG47KythKWZvcihjPWVbYV0scz0wO3M8aTsrK3MsKytsKW9bbF09cihjLHRbc10pO3JldHVybiBvfXZhciBvTXQ9TSgoKT0+e00kKCl9KTtmdW5jdGlvbiBhTXQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIHNNdD1NKCgpPT57fSk7ZnVuY3Rpb24gYWwoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX12YXIgbDI9TSgoKT0+e30pO2Z1bmN0aW9uIHNSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0wLGk9LTEsbz0wLGEscyxsPTA7aWYodD09bnVsbClmb3IoOysraTxyOylpc05hTihhPWFsKGVbaV0pKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2Vsc2UgZm9yKDsrK2k8cjspaXNOYU4oYT1hbCh0KGVbaV0saSxlKSkpfHwocz1hLW8sbys9cy8rK24sbCs9cyooYS1vKSk7aWYobj4xKXJldHVybiBsLyhuLTEpfXZhciBFJD1NKCgpPT57bDIoKX0pO2Z1bmN0aW9uIGxSKGUsdCl7dmFyIHI9c1IoZSx0KTtyZXR1cm4gciYmTWF0aC5zcXJ0KHIpfXZhciBUJD1NKCgpPT57RSQoKX0pO2Z1bmN0aW9uIGNSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG8sYTtpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiYobz5pJiYobz1pKSxhPGkmJihhPWkpKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSk7cmV0dXJuW28sYV19dmFyIEMkPU0oKCk9Pnt9KTt2YXIgbE10LGNNdCx1TXQsQSQ9TSgoKT0+e2xNdD1BcnJheS5wcm90b3R5cGUsY010PWxNdC5zbGljZSx1TXQ9bE10Lm1hcH0pO2Z1bmN0aW9uIFU1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgaE10PU0oKCk9Pnt9KTtmdW5jdGlvbiBmTXQoZSl7cmV0dXJuIGV9dmFyIHBNdD1NKCgpPT57fSk7ZnVuY3Rpb24gdVIoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIFAkPU0oKCk9Pnt9KTtmdW5jdGlvbiBkTXQoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1SJChlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gUiQoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1JJD8xMDpvPj1MJD81Om8+PWskPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49SSQ/MTA6bz49TCQ/NTpvPj1rJD8yOjEpfWZ1bmN0aW9uIGhSKGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1JJD9pKj0xMDpvPj1MJD9pKj01Om8+PWskJiYoaSo9MiksdDxlPy1pOml9dmFyIEkkLEwkLGskLE4kPU0oKCk9PntJJD1NYXRoLnNxcnQoNTApLEwkPU1hdGguc3FydCgxMCksayQ9TWF0aC5zcXJ0KDIpfSk7ZnVuY3Rpb24gZlIoZSl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIpKzF9dmFyIEQkPU0oKCk9Pnt9KTtmdW5jdGlvbiBtTXQoKXt2YXIgZT1mTXQsdD1jUixyPWZSO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPWhSKHUsaCxmKSxmPXVSKE1hdGguY2VpbCh1L2YpKmYsTWF0aC5mbG9vcihoL2YpKmYsZikpO2Zvcih2YXIgcD1mLmxlbmd0aDtmWzBdPD11OylmLnNoaWZ0KCksLS1wO2Zvcig7ZltwLTFdPmg7KWYucG9wKCksLS1wO3ZhciBkPW5ldyBBcnJheShwKzEpLGc7Zm9yKG89MDtvPD1wOysrbylnPWRbb109W10sZy54MD1vPjA/ZltvLTFdOnUsZy54MT1vPHA/ZltvXTpoO2ZvcihvPTA7bzxhOysrbylzPWxbb10sdTw9cyYmczw9aCYmZFthUihmLHMsMCxwKV0ucHVzaChpW29dKTtyZXR1cm4gZH1yZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOlU1KGkpLG4pOmV9LG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6VTUoW2lbMF0saVsxXV0pLG4pOnR9LG4udGhyZXNob2xkcz1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkFycmF5LmlzQXJyYXkoaSk/VTUoY010LmNhbGwoaSkpOlU1KGkpLG4pOnJ9LG59dmFyIGdNdD1NKCgpPT57QSQoKTt3JCgpO2hNdCgpO0MkKCk7cE10KCk7UCQoKTtOJCgpO0QkKCl9KTtmdW5jdGlvbiBkeShlLHQscil7aWYocj09bnVsbCYmKHI9YWwpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX12YXIgcFI9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiBfTXQoZSx0LHIpe3JldHVybiBlPXVNdC5jYWxsKGUsYWwpLnNvcnQoX2MpLE1hdGguY2VpbCgoci10KS8oMiooZHkoZSwuNzUpLWR5KGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgeU10PU0oKCk9PntBJCgpO3B5KCk7bDIoKTtwUigpfSk7ZnVuY3Rpb24gdk10KGUsdCxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLXQpLygzLjUqbFIoZSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgeE10PU0oKCk9PntUJCgpfSk7ZnVuY3Rpb24gYk10KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfXZhciB3TXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFNNdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1hbChlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPWFsKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufXZhciBNTXQ9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiBFTXQoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz1bXTtpZih0PT1udWxsKWZvcig7KytuPHI7KWlzTmFOKGk9YWwoZVtuXSkpfHxvLnB1c2goaSk7ZWxzZSBmb3IoOysrbjxyOylpc05hTihpPWFsKHQoZVtuXSxuLGUpKSl8fG8ucHVzaChpKTtyZXR1cm4gZHkoby5zb3J0KF9jKSwuNSl9dmFyIFRNdD1NKCgpPT57cHkoKTtsMigpO3BSKCl9KTtmdW5jdGlvbiBDTXQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHIsbj0tMSxpPTAsbyxhOysrbjx0OylpKz1lW25dLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkoaSk7LS10Pj0wOylmb3IoYT1lW3RdLHI9YS5sZW5ndGg7LS1yPj0wOylvWy0taV09YVtyXTtyZXR1cm4gb312YXIgQU10PU0oKCk9Pnt9KTtmdW5jdGlvbiBkUihlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvO2lmKHQ9PW51bGwpe2Zvcig7KytuPHI7KWlmKChpPWVbbl0pIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiZvPmkmJihvPWkpfWVsc2UgZm9yKDsrK248cjspaWYoKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmbz5pJiYobz1pKTtyZXR1cm4gb312YXIgTyQ9TSgoKT0+e30pO2Z1bmN0aW9uIFBNdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn12YXIgSU10PU0oKCk9Pnt9KTtmdW5jdGlvbiBMTXQoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9X2MpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX12YXIga010PU0oKCk9PntweSgpfSk7ZnVuY3Rpb24gUk10KGUsdCxyKXtmb3IodmFyIG49KHI9PW51bGw/ZS5sZW5ndGg6ciktKHQ9dD09bnVsbD8wOit0KSxpLG87bjspbz1NYXRoLnJhbmRvbSgpKm4tLXwwLGk9ZVtuK3RdLGVbbit0XT1lW28rdF0sZVtvK3RdPWk7cmV0dXJuIGV9dmFyIE5NdD1NKCgpPT57fSk7ZnVuY3Rpb24gRE10KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG89MDtpZih0PT1udWxsKWZvcig7KytuPHI7KShpPStlW25dKSYmKG8rPWkpO2Vsc2UgZm9yKDsrK248cjspKGk9K3QoZVtuXSxuLGUpKSYmKG8rPWkpO3JldHVybiBvfXZhciBPTXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1SKGUpe2lmKCEobz1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciB0PS0xLHI9ZFIoZSxDNWUpLG49bmV3IEFycmF5KHIpOysrdDxyOylmb3IodmFyIGk9LTEsbyxhPW5bdF09bmV3IEFycmF5KG8pOysraTxvOylhW2ldPWVbaV1bdF07cmV0dXJuIG59ZnVuY3Rpb24gQzVlKGUpe3JldHVybiBlLmxlbmd0aH12YXIgeiQ9TSgoKT0+e08kKCl9KTtmdW5jdGlvbiB6TXQoKXtyZXR1cm4gbVIoYXJndW1lbnRzKX12YXIgRk10PU0oKCk9Pnt6JCgpfSk7dmFyIEJNdD1NKCgpPT57dyQoKTtweSgpO3gkKCk7b010KCk7c010KCk7VCQoKTtDJCgpO2dNdCgpO3lNdCgpO3hNdCgpO0QkKCk7d010KCk7TU10KCk7VE10KCk7QU10KCk7TyQoKTtNJCgpO0lNdCgpO3BSKCk7UCQoKTtrTXQoKTtOTXQoKTtPTXQoKTtOJCgpO3okKCk7RSQoKTtGTXQoKX0pO3ZhciBnUixITXQ9TSgoKT0+e2dSPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIFZNdChlKXtyZXR1cm4gZX12YXIgVU10PU0oKCk9Pnt9KTtmdW5jdGlvbiBBNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgiKyhlKy41KSsiLDApIn1mdW5jdGlvbiBQNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGUrLjUpKyIpIn1mdW5jdGlvbiBJNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybitlKHQpfX1mdW5jdGlvbiBMNWUoZSl7dmFyIHQ9TWF0aC5tYXgoMCxlLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIGUucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24ocil7cmV0dXJuK2UocikrdH19ZnVuY3Rpb24gazVlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIHZSKGUsdCl7dmFyIHI9W10sbj1udWxsLGk9bnVsbCxvPTYsYT02LHM9MyxsPWU9PT1fUnx8ZT09PXE1Py0xOjEsYz1lPT09cTV8fGU9PT15Uj8ieCI6InkiLHU9ZT09PV9SfHxlPT09RiQ/QTVlOlA1ZTtmdW5jdGlvbiBoKGYpe3ZhciBwPW49PW51bGw/dC50aWNrcz90LnRpY2tzLmFwcGx5KHQscik6dC5kb21haW4oKTpuLGQ9aT09bnVsbD90LnRpY2tGb3JtYXQ/dC50aWNrRm9ybWF0LmFwcGx5KHQscik6Vk10OmksZz1NYXRoLm1heChvLDApK3MsXz10LnJhbmdlKCkseT0rX1swXSsuNSx4PStfW18ubGVuZ3RoLTFdKy41LGI9KHQuYmFuZHdpZHRoP0w1ZTpJNWUpKHQuY29weSgpKSxTPWYuc2VsZWN0aW9uP2Yuc2VsZWN0aW9uKCk6ZixDPVMuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLFA9Uy5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLHQpLm9yZGVyKCksaz1QLmV4aXQoKSxPPVAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxEPVAuc2VsZWN0KCJsaW5lIiksQj1QLnNlbGVjdCgidGV4dCIpO0M9Qy5tZXJnZShDLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKSksUD1QLm1lcmdlKE8pLEQ9RC5tZXJnZShPLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cihjLGwqZykuYXR0cigiZHkiLGU9PT1fUj8iMGVtIjplPT09RiQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxmIT09UyYmKEM9Qy50cmFuc2l0aW9uKGYpLFA9UC50cmFuc2l0aW9uKGYpLEQ9RC50cmFuc2l0aW9uKGYpLEI9Qi50cmFuc2l0aW9uKGYpLGs9ay50cmFuc2l0aW9uKGYpLmF0dHIoIm9wYWNpdHkiLHFNdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXtyZXR1cm4gaXNGaW5pdGUoST1iKEkpKT91KEkpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLE8uYXR0cigib3BhY2l0eSIscU10KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3ZhciBMPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHUoTCYmaXNGaW5pdGUoTD1MKEkpKT9MOmIoSSkpfSkpLGsucmVtb3ZlKCksQy5hdHRyKCJkIixlPT09cTV8fGU9PXlSPyJNIitsKmErIiwiK3krIkgwLjVWIit4KyJIIitsKmE6Ik0iK3krIiwiK2wqYSsiVjAuNUgiK3grIlYiK2wqYSksUC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiB1KGIoSSkpfSksRC5hdHRyKGMrIjIiLGwqbyksQi5hdHRyKGMsbCpnKS50ZXh0KGQpLFMuZmlsdGVyKGs1ZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZT09PXlSPyJzdGFydCI6ZT09PXE1PyJlbmQiOiJtaWRkbGUiKSxTLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ifSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZixoKTp0fSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHI9Z1IuY2FsbChhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1mPT1udWxsP1tdOmdSLmNhbGwoZiksaCk6ci5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Zj09bnVsbD9udWxsOmdSLmNhbGwoZiksaCk6biYmbi5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZixoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K2YsaCk6b30saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStmLGgpOm99LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rZixoKTphfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStmLGgpOnN9LGh9ZnVuY3Rpb24gR010KGUpe3JldHVybiB2UihfUixlKX1mdW5jdGlvbiBXTXQoZSl7cmV0dXJuIHZSKHlSLGUpfWZ1bmN0aW9uIFlNdChlKXtyZXR1cm4gdlIoRiQsZSl9ZnVuY3Rpb24gak10KGUpe3JldHVybiB2UihxNSxlKX12YXIgX1IseVIsRiQscTUscU10LFhNdD1NKCgpPT57SE10KCk7VU10KCk7X1I9MSx5Uj0yLEYkPTMscTU9NCxxTXQ9MWUtNn0pO3ZhciAkTXQ9TSgoKT0+e1hNdCgpfSk7ZnVuY3Rpb24gWk10KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IHhSKHIpfWZ1bmN0aW9uIHhSKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIE41ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIEQ1ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIEtNdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09UjVlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgUjVlLEc1LEpNdD1NKCgpPT57UjVlPXt2YWx1ZTpmdW5jdGlvbigpe319O3hSLnByb3RvdHlwZT1aTXQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4UixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPU41ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPUQ1ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09S010KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09S010KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyB4UihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07RzU9Wk10fSk7dmFyIEIkPU0oKCk9PntKTXQoKX0pO3ZhciBiUixIJCxWJD1NKCgpPT57YlI9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEgkPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpiUix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gVnAoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksSCQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkgkW3RdLGxvY2FsOmV9OmV9dmFyIHdSPU0oKCk9PntWJCgpfSk7ZnVuY3Rpb24gTzVlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09YlImJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PWJSP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiB6NWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gU1IoZSl7dmFyIHQ9VnAoZSk7cmV0dXJuKHQubG9jYWw/ejVlOk81ZSkodCl9dmFyIFUkPU0oKCk9Pnt3UigpO1YkKCl9KTtmdW5jdGlvbiBGNWUoKXt9ZnVuY3Rpb24gbXkoZSl7cmV0dXJuIGU9PW51bGw/RjVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIE1SPU0oKCk9Pnt9KTtmdW5jdGlvbiBRTXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgcGkobix0aGlzLl9wYXJlbnRzKX12YXIgdEV0PU0oKCk9Pnt3dSgpO01SKCl9KTtmdW5jdGlvbiBCNWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBXNShlKXtyZXR1cm4gZT09bnVsbD9CNWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgcSQ9TSgoKT0+e30pO2Z1bmN0aW9uIGVFdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9VzUoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPVtdLGk9W10sbz0wO288cjsrK28pZm9yKHZhciBhPXRbb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiYobi5wdXNoKGUuY2FsbChsLGwuX19kYXRhX18sYyxhKSksaS5wdXNoKGwpKTtyZXR1cm4gbmV3IHBpKG4saSl9dmFyIHJFdD1NKCgpPT57d3UoKTtxJCgpfSk7ZnVuY3Rpb24gWTUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIEckPU0oKCk9Pnt9KTtmdW5jdGlvbiBuRXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVk1KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBpRXQ9TSgoKT0+e3d1KCk7RyQoKX0pO2Z1bmN0aW9uIEVSKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBXJD1NKCgpPT57fSk7ZnVuY3Rpb24gb0V0KCl7cmV0dXJuIG5ldyBwaSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChFUiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gajUoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIFkkPU0oKCk9PntXJCgpO3d1KCk7ajUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpqNSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIGFFdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHNFdD1NKCgpPT57fSk7ZnVuY3Rpb24gSDVlKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBqNShlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gVjVlKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9bEV0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9bEV0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IGo1KGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gY0V0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9WNWU6SDVlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9YUV0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBwaShhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIGxFdCx1RXQ9TSgoKT0+e3d1KCk7WSQoKTtzRXQoKTtsRXQ9IiQifSk7ZnVuY3Rpb24gaEV0KCl7cmV0dXJuIG5ldyBwaSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKEVSKSx0aGlzLl9wYXJlbnRzKX12YXIgZkV0PU0oKCk9PntXJCgpO3d1KCl9KTtmdW5jdGlvbiBwRXQoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIGRFdD1NKCgpPT57fSk7ZnVuY3Rpb24gbUV0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBwaShhLHRoaXMuX3BhcmVudHMpfXZhciBnRXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiBfRXQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciB5RXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZFdChlKXtlfHwoZT1VNWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgcGkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIFU1ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgeEV0PU0oKCk9Pnt3dSgpfSk7ZnVuY3Rpb24gYkV0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciB3RXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFNFdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBNRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEVFdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIFRFdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ0V0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgQUV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBQRXQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIElFdD1NKCgpPT57fSk7ZnVuY3Rpb24gTEV0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIga0V0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIEc1ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFc1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIFk1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBqNWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFg1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBSRXQoZSx0KXt2YXIgcj1WcChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/RzVlOnE1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP1g1ZTpqNWU6ci5sb2NhbD9ZNWU6VzVlKShyLHQpKX12YXIgTkV0PU0oKCk9Pnt3UigpfSk7ZnVuY3Rpb24gVFIoZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBqJD1NKCgpPT57fSk7ZnVuY3Rpb24gJDVlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIEs1ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIFo1ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBERXQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsPyQ1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9aNWU6SzVlKShlLHQscj09bnVsbD8iIjpyKSk6YWcodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gYWcoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxUUihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgWCQ9TSgoKT0+e2okKCl9KTtmdW5jdGlvbiBKNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIFE1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gdFRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIE9FdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0o1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90VGU6UTVlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgekV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGRXQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uICQkKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IEJFdChlKX1mdW5jdGlvbiBCRXQoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPUZFdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIEhFdChlLHQpe2Zvcih2YXIgcj0kJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIFZFdChlLHQpe2Zvcih2YXIgcj0kJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGVUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtIRXQodGhpcyxlKX19ZnVuY3Rpb24gclRlKGUpe3JldHVybiBmdW5jdGlvbigpe1ZFdCh0aGlzLGUpfX1mdW5jdGlvbiBuVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/SEV0OlZFdCkodGhpcyxlKX19ZnVuY3Rpb24gVUV0KGUsdCl7dmFyIHI9RkV0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPSQkKHRoaXMubm9kZSgpKSxpPS0xLG89ci5sZW5ndGg7KytpPG87KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP25UZTp0P2VUZTpyVGUpKHIsdCkpfXZhciBxRXQ9TSgoKT0+e0JFdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX19KTtmdW5jdGlvbiBpVGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIG9UZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIGFUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gR0V0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP2lUZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/YVRlOm9UZSkoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fXZhciBXRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHNUZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIGxUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfX1mdW5jdGlvbiBjVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBZRXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/c1RlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9jVGU6bFRlKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfXZhciBqRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHVUZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBYRXQoKXtyZXR1cm4gdGhpcy5lYWNoKHVUZSl9dmFyICRFdD1NKCgpPT57fSk7ZnVuY3Rpb24gaFRlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gS0V0KCl7cmV0dXJuIHRoaXMuZWFjaChoVGUpfXZhciBaRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEpFdChlKXt2YXIgdD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlNSKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfXZhciBRRXQ9TSgoKT0+e1UkKCl9KTtmdW5jdGlvbiBmVGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB0NXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlNSKGUpLG49dD09bnVsbD9mVGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpteSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIGU1dD1NKCgpPT57VSQoKTtNUigpfSk7ZnVuY3Rpb24gcFRlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gcjV0KCl7cmV0dXJuIHRoaXMuZWFjaChwVGUpfXZhciBuNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGRUZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gbVRlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBpNXQoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/bVRlOmRUZSl9dmFyIG81dD1NKCgpPT57fSk7ZnVuY3Rpb24gYTV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgczV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBnVGUoZSx0LHIpe3JldHVybiBlPXU1dChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiB1NXQoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT13cjt3cj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXt3cj1pfX19ZnVuY3Rpb24gX1RlKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiB5VGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gdlRlKGUsdCxyKXt2YXIgbj1jNXQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9nVGU6dTV0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIGg1dChlLHQscil7dmFyIG49X1RlKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD92VGU6eVRlLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uIEskKGUsdCxyLG4pe3ZhciBpPXdyO2Uuc291cmNlRXZlbnQ9d3Isd3I9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e3dyPWl9fXZhciBjNXQsd3IsbDV0LENSPU0oKCk9PntjNXQ9e30sd3I9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYobDV0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIGw1dHx8KGM1dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiBmNXQoZSx0LHIpe3ZhciBuPVRSKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIHhUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmNXQodGhpcyxlLHQpfX1mdW5jdGlvbiBiVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZjV0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIHA1dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP2JUZTp4VGUpKGUsdCkpfXZhciBkNXQ9TSgoKT0+e2okKCl9KTtmdW5jdGlvbiBwaShlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBtNXQoKXtyZXR1cm4gbmV3IHBpKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sWiQpfXZhciBaJCxVcCx3dT1NKCgpPT57dEV0KCk7ckV0KCk7aUV0KCk7dUV0KCk7WSQoKTtmRXQoKTtkRXQoKTtnRXQoKTt5RXQoKTt4RXQoKTt3RXQoKTtNRXQoKTtURXQoKTtBRXQoKTtJRXQoKTtrRXQoKTtORXQoKTtYJCgpO3pFdCgpO3FFdCgpO1dFdCgpO2pFdCgpOyRFdCgpO1pFdCgpO1FFdCgpO2U1dCgpO241dCgpO281dCgpO3M1dCgpO0NSKCk7ZDV0KCk7WiQ9W251bGxdO3BpLnByb3RvdHlwZT1tNXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpwaSxzZWxlY3Q6UU10LHNlbGVjdEFsbDplRXQsZmlsdGVyOm5FdCxkYXRhOmNFdCxlbnRlcjpvRXQsZXhpdDpoRXQsam9pbjpwRXQsbWVyZ2U6bUV0LG9yZGVyOl9FdCxzb3J0OnZFdCxjYWxsOmJFdCxub2RlczpTRXQsbm9kZTpFRXQsc2l6ZTpDRXQsZW1wdHk6UEV0LGVhY2g6TEV0LGF0dHI6UkV0LHN0eWxlOkRFdCxwcm9wZXJ0eTpPRXQsY2xhc3NlZDpVRXQsdGV4dDpHRXQsaHRtbDpZRXQscmFpc2U6WEV0LGxvd2VyOktFdCxhcHBlbmQ6SkV0LGluc2VydDp0NXQscmVtb3ZlOnI1dCxjbG9uZTppNXQsZGF0dW06YTV0LG9uOmg1dCxkaXNwYXRjaDpwNXR9O1VwPW01dH0pO2Z1bmN0aW9uIHFwKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IHBpKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgcGkoW1tlXV0sWiQpfXZhciBnNXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiBfNXQoKXtmb3IodmFyIGU9d3IsdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgeTV0PU0oKCk9PntDUigpfSk7ZnVuY3Rpb24gdjV0KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIHg1dD1NKCgpPT57fSk7ZnVuY3Rpb24gQVIoZSl7dmFyIHQ9XzV0KCk7cmV0dXJuIHQuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pLHY1dChlLHQpfXZhciBiNXQ9TSgoKT0+e3k1dCgpO3g1dCgpfSk7dmFyIEVzPU0oKCk9PntHJCgpO2I1dCgpO3dSKCk7ZzV0KCk7d3UoKTtNUigpO3EkKCk7WCQoKTtDUigpfSk7ZnVuY3Rpb24gUFIoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB3NXQ9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBKJChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXFwKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsUFIsITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsUFIsITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIFEkKGUsdCl7dmFyIHI9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1xcChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO3QmJihuLm9uKCJjbGljay5kcmFnIixQUiwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe24ub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gcj9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooci5zdHlsZS5Nb3pVc2VyU2VsZWN0PXIuX19ub3NlbGVjdCxkZWxldGUgci5fX25vc2VsZWN0KX12YXIgUzV0PU0oKCk9PntFcygpO3c1dCgpfSk7dmFyIE01dD1NKCgpPT57UzV0KCl9KTtmdW5jdGlvbiBJUihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gdEsoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIEU1dD1NKCgpPT57fSk7ZnVuY3Rpb24gSzUoKXt9ZnVuY3Rpb24gQzV0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gUFRlKCl7cmV0dXJuIFI1dCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBBNXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBTdShlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD13VGUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9QNXQodCk6cj09PTM/bmV3IHNsKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9MUih0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9MUih0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PVNUZS5leGVjKGUpKT9uZXcgc2wodFsxXSx0WzJdLHRbM10sMSk6KHQ9TVRlLmV4ZWMoZSkpP25ldyBzbCh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1FVGUuZXhlYyhlKSk/TFIodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9VFRlLmV4ZWMoZSkpP0xSKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PUNUZS5leGVjKGUpKT9rNXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1BVGUuZXhlYyhlKSk/azV0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6VDV0Lmhhc093blByb3BlcnR5KGUpP1A1dChUNXRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBzbChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFA1dChlKXtyZXR1cm4gbmV3IHNsKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBMUihlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHNsKGUsdCxyLG4pfWZ1bmN0aW9uIElUZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEs1fHwoZT1TdShlKSksZT8oZT1lLnJnYigpLG5ldyBzbChlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgc2x9ZnVuY3Rpb24gdTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0lUZShlKTpuZXcgc2woZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHNsKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBJNXQoKXtyZXR1cm4iIyIrZUsodGhpcy5yKStlSyh0aGlzLmcpK2VLKHRoaXMuYil9ZnVuY3Rpb24gTDV0KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIGVLKGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGs1dChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IEtoKGUsdCxyLG4pfWZ1bmN0aW9uIFI1dChlKXtpZihlIGluc3RhbmNlb2YgS2gpcmV0dXJuIG5ldyBLaChlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBLNXx8KGU9U3UoZSkpLCFlKXJldHVybiBuZXcgS2g7aWYoZSBpbnN0YW5jZW9mIEtoKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IEtoKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gTjV0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9SNXQoZSk6bmV3IEtoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBLaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gcksoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyIFg1LGtSLGMyLCQ1LFpoLHdUZSxTVGUsTVRlLEVUZSxUVGUsQ1RlLEFUZSxUNXQsRDV0PU0oKCk9PntFNXQoKTtYNT0uNyxrUj0xL1g1LGMyPSJcXHMqKFsrLV0/XFxkKylcXHMqIiwkNT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixaaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsd1RlPS9eIyhbMC05YS1mXXszLDh9KSQvLFNUZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbYzIsYzIsYzJdKyJcXCkkIiksTVRlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1taaCxaaCxaaF0rIlxcKSQiKSxFVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tjMixjMixjMiwkNV0rIlxcKSQiKSxUVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1taaCxaaCxaaCwkNV0rIlxcKSQiKSxDVGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrWyQ1LFpoLFpoXSsiXFwpJCIpLEFUZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrWyQ1LFpoLFpoLCQ1XSsiXFwpJCIpLFQ1dD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtJUihLNSxTdSx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpDNXQsZm9ybWF0SGV4OkM1dCxmb3JtYXRIc2w6UFRlLGZvcm1hdFJnYjpBNXQsdG9TdHJpbmc6QTV0fSk7SVIoc2wsdTIsdEsoSzUse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/a1I6TWF0aC5wb3coa1IsZSksbmV3IHNsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1g1Ok1hdGgucG93KFg1LGUpLG5ldyBzbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Okk1dCxmb3JtYXRIZXg6STV0LGZvcm1hdFJnYjpMNXQsdG9TdHJpbmc6TDV0fSkpO0lSKEtoLE41dCx0SyhLNSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9rUjpNYXRoLnBvdyhrUixlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9YNTpNYXRoLnBvdyhYNSxlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBzbChySyhlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxySyhlLGksbikscksoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgUlI9TSgoKT0+e0Q1dCgpfSk7ZnVuY3Rpb24gbksoZSx0LHIsbixpKXt2YXIgbz1lKmUsYT1vKmU7cmV0dXJuKCgxLTMqZSszKm8tYSkqdCsoNC02Km8rMyphKSpyKygxKzMqZSszKm8tMyphKSpuK2EqaSkvNn1mdW5jdGlvbiBPNXQoZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLHQtMSk6TWF0aC5mbG9vcihyKnQpLGk9ZVtuXSxvPWVbbisxXSxhPW4+MD9lW24tMV06MippLW8scz1uPHQtMT9lW24rMl06MipvLWk7cmV0dXJuIG5LKChyLW4vdCkqdCxhLGksbyxzKX19dmFyIGlLPU0oKCk9Pnt9KTtmdW5jdGlvbiB6NXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBuSygoci1uL3QpKnQsaSxvLGEscyl9fXZhciBGNXQ9TSgoKT0+e2lLKCl9KTtmdW5jdGlvbiBaNShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIG9LPU0oKCk9Pnt9KTtmdW5jdGlvbiBMVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBrVGUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBCNXQoZSl7cmV0dXJuKGU9K2UpPT0xP05SOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9rVGUodCxyLGUpOlo1KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIE5SKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP0xUZShlLHIpOlo1KGlzTmFOKGUpP3Q6ZSl9dmFyIEg1dD1NKCgpPT57b0soKX0pO2Z1bmN0aW9uIFY1dChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPXUyKHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBneSxSVGUsTlRlLGFLPU0oKCk9PntSUigpO2lLKCk7RjV0KCk7SDV0KCk7Z3k9ZnVuY3Rpb24gZSh0KXt2YXIgcj1CNXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9dTIoaSkpLnIsKG89dTIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1OUihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7UlRlPVY1dChPNXQpLE5UZT1WNXQoejV0KX0pO2Z1bmN0aW9uIFU1dChlLHQpe3R8fCh0PVtdKTt2YXIgcj1lP01hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTowLG49dC5zbGljZSgpLGk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpPTA7aTxyOysraSluW2ldPWVbaV0qKDEtbykrdFtpXSpvO3JldHVybiBufX1mdW5jdGlvbiBxNXQoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfXZhciBHNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFc1dChlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPV95KGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIFk1dD1NKCgpPT57RFIoKX0pO2Z1bmN0aW9uIGo1dChlLHQpe3ZhciByPW5ldyBEYXRlO3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZShlKigxLW4pK3Qqbikscn19dmFyIFg1dD1NKCgpPT57fSk7ZnVuY3Rpb24gVWEoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIEo1PU0oKCk9Pnt9KTtmdW5jdGlvbiAkNXQoZSx0KXt2YXIgcj17fSxuPXt9LGk7KGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpJiYoZT17fSksKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpJiYodD17fSk7Zm9yKGkgaW4gdClpIGluIGU/cltpXT1feShlW2ldLHRbaV0pOm5baV09dFtpXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGkgaW4gciluW2ldPXJbaV0obyk7cmV0dXJuIG59fXZhciBLNXQ9TSgoKT0+e0RSKCl9KTtmdW5jdGlvbiBEVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIE9UZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIFE1KGUsdCl7dmFyIHI9bEsubGFzdEluZGV4PXNLLmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPWxLLmV4ZWMoZSkpJiYoaT1zSy5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6VWEobixpKX0pKSxyPXNLLmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9PVGUobFswXS54KTpEVGUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIGxLLHNLLGNLPU0oKCk9PntKNSgpO2xLPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxzSz1uZXcgUmVnRXhwKGxLLnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gX3koZSx0KXt2YXIgcj10eXBlb2YgdCxuO3JldHVybiB0PT1udWxsfHxyPT09ImJvb2xlYW4iP1o1KHQpOihyPT09Im51bWJlciI/VWE6cj09PSJzdHJpbmciPyhuPVN1KHQpKT8odD1uLGd5KTpRNTp0IGluc3RhbmNlb2YgU3U/Z3k6dCBpbnN0YW5jZW9mIERhdGU/ajV0OnE1dCh0KT9VNXQ6QXJyYXkuaXNBcnJheSh0KT9XNXQ6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpPyQ1dDpVYSkoZSx0KX12YXIgRFI9TSgoKT0+e1JSKCk7YUsoKTtZNXQoKTtYNXQoKTtKNSgpO0s1dCgpO2NLKCk7b0soKTtHNXQoKX0pO2Z1bmN0aW9uIHVLKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKlo1dCxza2V3WDpNYXRoLmF0YW4obCkqWjV0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgWjV0LE9SLEo1dD1NKCgpPT57WjV0PTE4MC9NYXRoLlBJLE9SPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gdFR0KGUpe3JldHVybiBlPT09Im5vbmUiP09SOih0VHx8KHRUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGhLPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxRNXQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLHRULnN0eWxlLnRyYW5zZm9ybT1lLGU9UTV0LmdldENvbXB1dGVkU3R5bGUoaEsuYXBwZW5kQ2hpbGQodFQpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLGhLLnJlbW92ZUNoaWxkKHRUKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSx1SygrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIGVUdChlKXtyZXR1cm4gZT09bnVsbD9PUjooelJ8fCh6Uj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx6Ui5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9elIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsdUsoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpPUil9dmFyIHRULGhLLFE1dCx6UixyVHQ9TSgoKT0+e0o1dCgpfSk7ZnVuY3Rpb24gblR0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6VWEoYyxoKX0se2k6Zy0yLHg6VWEodSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpVYShjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OlVhKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpVYShjLGgpfSx7aTpnLTIseDpVYSh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBmSyxwSyxpVHQ9TSgoKT0+e0o1KCk7clR0KCk7Zks9blR0KHRUdCwicHgsICIsInB4KSIsImRlZykiKSxwSz1uVHQoZVR0LCIsICIsIikiLCIpIil9KTt2YXIgZVQ9TSgoKT0+e0RSKCk7SjUoKTtjSygpO2lUdCgpO2FLKCl9KTtmdW5jdGlvbiBmMigpe3JldHVybiB5eXx8KHNUdCh6VGUpLHl5PW9ULm5vdygpK0hSKX1mdW5jdGlvbiB6VGUoKXt5eT0wfWZ1bmN0aW9uIGFUKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBWUihlLHQscil7dmFyIG49bmV3IGFUO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gbFR0KCl7ZjIoKSwrK2gyO2Zvcih2YXIgZT1GUix0O2U7KSh0PXl5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1oMn1mdW5jdGlvbiBvVHQoKXt5eT0oQlI9b1Qubm93KCkpK0hSLGgyPW5UPTA7dHJ5e2xUdCgpfWZpbmFsbHl7aDI9MCxCVGUoKSx5eT0wfX1mdW5jdGlvbiBGVGUoKXt2YXIgZT1vVC5ub3coKSx0PWUtQlI7dD5hVHQmJihIUi09dCxCUj1lKX1mdW5jdGlvbiBCVGUoKXtmb3IodmFyIGUsdD1GUixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpGUj1yKTtpVD1lLGRLKG4pfWZ1bmN0aW9uIGRLKGUpe2lmKCFoMil7blQmJihuVD1jbGVhclRpbWVvdXQoblQpKTt2YXIgdD1lLXl5O3Q+MjQ/KGU8MS8wJiYoblQ9c2V0VGltZW91dChvVHQsZS1vVC5ub3coKS1IUikpLHJUJiYoclQ9Y2xlYXJJbnRlcnZhbChyVCkpKTooclR8fChCUj1vVC5ub3coKSxyVD1zZXRJbnRlcnZhbChGVGUsYVR0KSksaDI9MSxzVHQob1R0KSl9fXZhciBoMixuVCxyVCxhVHQsRlIsaVQsQlIseXksSFIsb1Qsc1R0LG1LPU0oKCk9PntoMj0wLG5UPTAsclQ9MCxhVHQ9MWUzLEJSPTAseXk9MCxIUj0wLG9UPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLHNUdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTthVC5wcm90b3R5cGU9VlIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphVCxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/ZjIoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmlUIT09dGhpcyYmKGlUP2lULl9uZXh0PXRoaXM6RlI9dGhpcyxpVD10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLGRLKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLGRLKCkpfX19KTtmdW5jdGlvbiBVUihlLHQscil7dmFyIG49bmV3IGFUO3JldHVybiB0PXQ9PW51bGw/MDordCxuLnJlc3RhcnQoZnVuY3Rpb24oaSl7bi5zdG9wKCksZShpK3QpfSx0LHIpLG59dmFyIGNUdD1NKCgpPT57bUsoKX0pO3ZhciBnSz1NKCgpPT57bUsoKTtjVHQoKX0pO2Z1bmN0aW9uIHNnKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47VVRlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpIVGUsdHdlZW46VlRlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmhUdH0pfWZ1bmN0aW9uIGxUKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPmhUdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIHFhKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPnFSKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFFpKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gVVRlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPVZSKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1fSyxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PV9LKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09cVIpcmV0dXJuIFVSKGEpO3Auc3RhdGU9PT11VHQ/KHAuc3RhdGU9c1QscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1zVCxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKFVSKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PXFSJiYoci5zdGF0ZT11VHQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1HUixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09R1Ipe2ZvcihyLnN0YXRlPXFSLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVdSLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVdSJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9c1Qsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIEhUZSxWVGUsaFR0LF9LLEdSLHFSLHVUdCxXUixzVCxUcz1NKCgpPT57QiQoKTtnSygpO0hUZT1HNSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxWVGU9W10saFR0PTAsX0s9MSxHUj0yLHFSPTMsdVR0PTQsV1I9NSxzVD02fSk7ZnVuY3Rpb24gcDIoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+R1ImJm4uc3RhdGU8V1Isbi5zdGF0ZT1zVCxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciB5Sz1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGZUdChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cDIodGhpcyxlKX0pfXZhciBwVHQ9TSgoKT0+e3lLKCl9KTtmdW5jdGlvbiBxVGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXFhKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBHVGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXFhKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIGRUdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVFpKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3FUZTpHVGUpKHIsZSx0KSl9ZnVuY3Rpb24gZDIoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1xYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIFFpKGksbikudmFsdWVbdF19fXZhciBjVD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIFlSKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9VYTp0IGluc3RhbmNlb2YgU3U/Z3k6KHI9U3UodCkpPyh0PXIsZ3kpOlE1KShlLHQpfXZhciB2Sz1NKCgpPT57UlIoKTtlVCgpfSk7ZnVuY3Rpb24gV1RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBZVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBqVGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gWFRlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiAkVGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBLVGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIG1UdChlLHQpe3ZhciByPVZwKGUpLG49cj09PSJ0cmFuc2Zvcm0iP3BLOllSO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP0tUZTokVGUpKHIsbixkMih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9ZVGU6V1RlKShyKTooci5sb2NhbD9YVGU6alRlKShyLG4sdCkpfXZhciBnVHQ9TSgoKT0+e2VUKCk7RXMoKTtjVCgpO3ZLKCl9KTtmdW5jdGlvbiBaVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIEpUZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIFFUZShlLHQpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKHI9KG49bykmJkpUZShlLG8pKSxyfXJldHVybiBpLl92YWx1ZT10LGl9ZnVuY3Rpb24gdENlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmWlRlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBfVHQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPVZwKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/UVRlOnRDZSkobix0KSl9dmFyIHlUdD1NKCgpPT57RXMoKX0pO2Z1bmN0aW9uIGVDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2xUKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiByQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2xUKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gdlR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/ZUNlOnJDZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIHhUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIG5DZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBpQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gYlR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/bkNlOmlDZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIHdUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIG9DZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtxYSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gU1R0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChvQ2UodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZWFzZX12YXIgTVR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gRVR0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1ZNShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgdWEobix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBUVHQ9TSgoKT0+e0VzKCk7R3AoKX0pO2Z1bmN0aW9uIENUdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgdWEoYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBBVHQ9TSgoKT0+e0dwKCl9KTtmdW5jdGlvbiBhQ2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBzQ2UoZSx0LHIpe3ZhciBuLGksbz1hQ2UodCk/bFQ6cWE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gUFR0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9RaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goc0NlKHIsZSx0KSl9dmFyIElUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGxDZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gTFR0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGxDZSh0aGlzLl9pZCkpfXZhciBrVHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFJUdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsc2coY1tmXSx0LHIsZixjLFFpKHUscikpKTtyZXR1cm4gbmV3IHVhKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBOVHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gRFR0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9VzUoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9UWkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZzZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IHVhKG8sYSx0LHIpfXZhciBPVHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gelR0KCl7cmV0dXJuIG5ldyBjQ2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBjQ2UsRlR0PU0oKCk9PntFcygpO2NDZT1VcC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiB1Q2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YWcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLGFnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gQlR0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGhDZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9YWcodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIGZDZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWFnKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxhZyh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBwQ2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1xYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9QlR0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gSFR0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9mSzpZUjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSx1Q2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsQlR0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxmQ2UoZSxuLGQyKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2gocENlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxoQ2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciBWVHQ9TSgoKT0+e2VUKCk7RXMoKTtUcygpO2NUKCk7dksoKX0pO2Z1bmN0aW9uIGRDZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gbUNlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZkQ2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24gVVR0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLG1DZShlLHQscj09bnVsbD8iIjpyKSl9dmFyIHFUdD1NKCgpPT57fSk7ZnVuY3Rpb24gZ0NlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gX0NlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEdUdChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/X0NlKGQyKHRoaXMsInRleHQiLGUpKTpnQ2UoZT09bnVsbD8iIjplKyIiKSl9dmFyIFdUdD1NKCgpPT57Y1QoKX0pO2Z1bmN0aW9uIHlDZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1lLmNhbGwodGhpcyx0KX19ZnVuY3Rpb24gdkNlKGUpe3ZhciB0LHI7ZnVuY3Rpb24gbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKHQ9KHI9aSkmJnlDZShpKSksdH1yZXR1cm4gbi5fdmFsdWU9ZSxufWZ1bmN0aW9uIFlUdChlKXt2YXIgdD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybih0PXRoaXMudHdlZW4odCkpJiZ0Ll92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHQsbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHQsdkNlKGUpKX12YXIgalR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYVHQoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9alIoKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PVFpKGwsdCk7c2cobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyB1YShuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgJFR0PU0oKCk9PntHcCgpO1RzKCl9KTtmdW5jdGlvbiBLVHQoKXt2YXIgZSx0LHI9dGhpcyxuPXIuX2lkLGk9ci5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sYSl7dmFyIHM9e3ZhbHVlOmF9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7LS1pPT09MCYmbygpfX07ci5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9cWEodGhpcyxuKSx1PWMub247dSE9PWUmJih0PShlPXUpLmNvcHkoKSx0Ll8uY2FuY2VsLnB1c2gocyksdC5fLmludGVycnVwdC5wdXNoKHMpLHQuXy5lbmQucHVzaChsKSksYy5vbj10fSl9KX12YXIgWlR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gdWEoZSx0LHIsbil7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9cix0aGlzLl9pZD1ufWZ1bmN0aW9uIHhLKGUpe3JldHVybiBVcCgpLnRyYW5zaXRpb24oZSl9ZnVuY3Rpb24galIoKXtyZXR1cm4rK3hDZX12YXIgeENlLG0yLEdwPU0oKCk9PntFcygpO2dUdCgpO3lUdCgpO3hUdCgpO3dUdCgpO01UdCgpO1RUdCgpO0FUdCgpO0lUdCgpO2tUdCgpO05UdCgpO09UdCgpO0ZUdCgpO1ZUdCgpO3FUdCgpO1dUdCgpO2pUdCgpOyRUdCgpO2NUKCk7WlR0KCk7eENlPTA7bTI9VXAucHJvdG90eXBlO3VhLnByb3RvdHlwZT14Sy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnVhLHNlbGVjdDpSVHQsc2VsZWN0QWxsOkRUdCxmaWx0ZXI6RVR0LG1lcmdlOkNUdCxzZWxlY3Rpb246elR0LHRyYW5zaXRpb246WFR0LGNhbGw6bTIuY2FsbCxub2RlczptMi5ub2Rlcyxub2RlOm0yLm5vZGUsc2l6ZTptMi5zaXplLGVtcHR5Om0yLmVtcHR5LGVhY2g6bTIuZWFjaCxvbjpQVHQsYXR0cjptVHQsYXR0clR3ZWVuOl9UdCxzdHlsZTpIVHQsc3R5bGVUd2VlbjpVVHQsdGV4dDpHVHQsdGV4dFR3ZWVuOllUdCxyZW1vdmU6TFR0LHR3ZWVuOmRUdCxkZWxheTp2VHQsZHVyYXRpb246YlR0LGVhc2U6U1R0LGVuZDpLVHR9fSk7ZnVuY3Rpb24gYkNlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIGJLLnRpbWU9ZjIoKSxiSztyZXR1cm4gcn1mdW5jdGlvbiBKVHQoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgdWE/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1qUigpLChyPWJLKS50aW1lPWYyKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmc2cobCxlLHQsYyxhLHJ8fGJDZShsLHQpKTtyZXR1cm4gbmV3IHVhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciBiSyxRVHQ9TSgoKT0+e0dwKCk7VHMoKTtJXygpO2dLKCk7Yks9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciB0Q3Q9TSgoKT0+e0VzKCk7cFR0KCk7UVR0KCk7VXAucHJvdG90eXBlLmludGVycnVwdD1mVHQ7VXAucHJvdG90eXBlLnRyYW5zaXRpb249SlR0fSk7dmFyIGVDdD1NKCgpPT57R3AoKTtUcygpfSk7dmFyIHJDdD1NKCgpPT57dEN0KCk7R3AoKTtlQ3QoKTt5SygpfSk7ZnVuY3Rpb24gd0soZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBuQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGlDdChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfXZhciBvQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFNLKCl7d3Iuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gdVQoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBhQ3Q9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBoVChlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiBFQ2UoKXtyZXR1cm4hd3IuYnV0dG9ufWZ1bmN0aW9uIFRDZSgpe3ZhciBlPXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybltbMCwwXSxbZS53aWR0aC5iYXNlVmFsLnZhbHVlLGUuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBFSyhlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIFRLKGUpe3JldHVybiBlWzBdWzBdPT09ZVsxXVswXXx8ZVswXVsxXT09PWVbMV1bMV19ZnVuY3Rpb24gdUN0KGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gaEN0KCl7cmV0dXJuIENLKFhSKX1mdW5jdGlvbiBmQ3QoKXtyZXR1cm4gQ0soJFIpfWZ1bmN0aW9uIHBDdCgpe3JldHVybiBDSyh3Q2UpfWZ1bmN0aW9uIENLKGUpe3ZhciB0PVRDZSxyPUVDZSxuPUc1KGEsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxpPTYsbztmdW5jdGlvbiBhKGYpe3ZhciBwPWYucHJvcGVydHkoIl9fYnJ1c2giLGgpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtoVCgib3ZlcmxheSIpXSk7cC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KS5tZXJnZShwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9RUsodGhpcykuZXh0ZW50O3FwKHRoaXMpLmF0dHIoIngiLGdbMF1bMF0pLmF0dHIoInkiLGdbMF1bMV0pLmF0dHIoIndpZHRoIixnWzFdWzBdLWdbMF1bMF0pLmF0dHIoImhlaWdodCIsZ1sxXVsxXS1nWzBdWzFdKX0pLGYuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbaFQoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsV3Auc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGQ9Zi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKGUuaGFuZGxlcyxmdW5jdGlvbihnKXtyZXR1cm4gZy50eXBlfSk7ZC5leGl0KCkucmVtb3ZlKCksZC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihnKXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIitnLnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKGcpe3JldHVybiBXcFtnLnR5cGVdfSksZi5lYWNoKHMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsdSl9YS5tb3ZlPWZ1bmN0aW9uKGYscCl7Zi5zZWxlY3Rpb24/Zi5vbigic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2VlbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxnPWQuX19icnVzaCxfPWwoZCxhcmd1bWVudHMpLHk9Zy5zZWxlY3Rpb24seD1lLmlucHV0KHR5cGVvZiBwPT0iZnVuY3Rpb24iP3AuYXBwbHkodGhpcyxhcmd1bWVudHMpOnAsZy5leHRlbnQpLGI9X3koeSx4KTtmdW5jdGlvbiBTKEMpe2cuc2VsZWN0aW9uPUM9PT0xJiZUSyh4KT9udWxsOmIoQykscy5jYWxsKGQpLF8uYnJ1c2goKX1yZXR1cm4geSYmeD9TOlMoMSl9KTpmLmVhY2goZnVuY3Rpb24oKXt2YXIgZD10aGlzLGc9YXJndW1lbnRzLF89ZC5fX2JydXNoLHk9ZS5pbnB1dCh0eXBlb2YgcD09ImZ1bmN0aW9uIj9wLmFwcGx5KGQsZyk6cCxfLmV4dGVudCkseD1sKGQsZykuYmVmb3Jlc3RhcnQoKTtwMihkKSxfLnNlbGVjdGlvbj15PT1udWxsfHxUSyh5KT9udWxsOnkscy5jYWxsKGQpLHguc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9O2Z1bmN0aW9uIHMoKXt2YXIgZj1xcCh0aGlzKSxwPUVLKHRoaXMpLnNlbGVjdGlvbjtwPyhmLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixwWzBdWzBdKS5hdHRyKCJ5IixwWzBdWzFdKS5hdHRyKCJ3aWR0aCIscFsxXVswXS1wWzBdWzBdKS5hdHRyKCJoZWlnaHQiLHBbMV1bMV0tcFswXVsxXSksZi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVtkLnR5cGUubGVuZ3RoLTFdPT09ImUiP3BbMV1bMF0taS8yOnBbMF1bMF0taS8yfSkuYXR0cigieSIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVswXT09PSJzIj9wWzFdWzFdLWkvMjpwWzBdWzFdLWkvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbihkKXtyZXR1cm4gZC50eXBlPT09Im4ifHxkLnR5cGU9PT0icyI/cFsxXVswXS1wWzBdWzBdK2k6aX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZT09PSJlInx8ZC50eXBlPT09InciP3BbMV1bMV0tcFswXVsxXStpOml9KSk6Zi5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGwoZixwKXtyZXR1cm4gZi5fX2JydXNoLmVtaXR0ZXJ8fG5ldyBjKGYscCl9ZnVuY3Rpb24gYyhmLHApe3RoaXMudGhhdD1mLHRoaXMuYXJncz1wLHRoaXMuc3RhdGU9Zi5fX2JydXNoLHRoaXMuYWN0aXZlPTB9Yy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihmKXtLJChuZXcgaUN0KGEsZixlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG4uYXBwbHksbixbZix0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiB1KCl7aWYod3IudG91Y2hlcyl7aWYod3IuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHdyLnRvdWNoZXMubGVuZ3RoKXJldHVybiB1VCgpfWVsc2UgaWYobylyZXR1cm47aWYoIXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgZj10aGlzLHA9d3IudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsZD0od3IubWV0YUtleT9wPSJvdmVybGF5IjpwKT09PSJzZWxlY3Rpb24iP3NDdDp3ci5hbHRLZXk/XzI6ZzIsZz1lPT09JFI/bnVsbDpTQ2VbcF0sXz1lPT09WFI/bnVsbDpNQ2VbcF0seT1FSyhmKSx4PXkuZXh0ZW50LGI9eS5zZWxlY3Rpb24sUz14WzBdWzBdLEMsUCxrPXhbMF1bMV0sTyxELEI9eFsxXVswXSxJLEwsUj14WzFdWzFdLEYseixVLFcsWixydD1nJiZfJiZ3ci5zaGlmdEtleSxvdCxzdCxTdD1BUihmKSxidD1TdCxNdD1sKGYsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpO3A9PT0ib3ZlcmxheSI/eS5zZWxlY3Rpb249Yj1bW0M9ZT09PSRSP1M6U3RbMF0sTz1lPT09WFI/azpTdFsxXV0sW0k9ZT09PSRSP0I6QyxGPWU9PT1YUj9SOk9dXTooQz1iWzBdWzBdLE89YlswXVsxXSxJPWJbMV1bMF0sRj1iWzFdWzFdKSxQPUMsRD1PLEw9SSx6PUY7dmFyIGx0PXFwKGYpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEt0PWx0LnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLFdwW3BdKTtpZih3ci50b3VjaGVzKWx0Lm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGN0LCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGV0LCEwKTtlbHNle3ZhciBfdD1xcCh3ci52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsZHQsITApLm9uKCJrZXl1cC5icnVzaCIscSwhMCkub24oIm1vdXNlbW92ZS5icnVzaCIsY3QsITApLm9uKCJtb3VzZXVwLmJydXNoIixldCwhMCk7SiQod3Iudmlldyl9U0soKSxwMihmKSxzLmNhbGwoZiksTXQuc3RhcnQoKTtmdW5jdGlvbiBjdCgpe3ZhciBwdD1BUihmKTtydCYmIW90JiYhc3QmJihNYXRoLmFicyhwdFswXS1idFswXSk+TWF0aC5hYnMocHRbMV0tYnRbMV0pP3N0PSEwOm90PSEwKSxidD1wdCxaPSEwLHVUKCksWCgpfWZ1bmN0aW9uIFgoKXt2YXIgcHQ7c3dpdGNoKFU9YnRbMF0tU3RbMF0sVz1idFsxXS1TdFsxXSxkKXtjYXNlIE1LOmNhc2Ugc0N0OntnJiYoVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1JLFUpKSxQPUMrVSxMPUkrVSksXyYmKFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItRixXKSksRD1PK1csej1GK1cpO2JyZWFrfWNhc2UgZzI6e2c8MD8oVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1DLFUpKSxQPUMrVSxMPUkpOmc+MCYmKFU9TWF0aC5tYXgoUy1JLE1hdGgubWluKEItSSxVKSksUD1DLEw9SStVKSxfPDA/KFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItTyxXKSksRD1PK1csej1GKTpfPjAmJihXPU1hdGgubWF4KGstRixNYXRoLm1pbihSLUYsVykpLEQ9Tyx6PUYrVyk7YnJlYWt9Y2FzZSBfMjp7ZyYmKFA9TWF0aC5tYXgoUyxNYXRoLm1pbihCLEMtVSpnKSksTD1NYXRoLm1heChTLE1hdGgubWluKEIsSStVKmcpKSksXyYmKEQ9TWF0aC5tYXgoayxNYXRoLm1pbihSLE8tVypfKSksej1NYXRoLm1heChrLE1hdGgubWluKFIsRitXKl8pKSk7YnJlYWt9fUw8UCYmKGcqPS0xLHB0PUMsQz1JLEk9cHQscHQ9UCxQPUwsTD1wdCxwIGluIGxDdCYmS3QuYXR0cigiY3Vyc29yIixXcFtwPWxDdFtwXV0pKSx6PEQmJihfKj0tMSxwdD1PLE89RixGPXB0LHB0PUQsRD16LHo9cHQscCBpbiBjQ3QmJkt0LmF0dHIoImN1cnNvciIsV3BbcD1jQ3RbcF1dKSkseS5zZWxlY3Rpb24mJihiPXkuc2VsZWN0aW9uKSxvdCYmKFA9YlswXVswXSxMPWJbMV1bMF0pLHN0JiYoRD1iWzBdWzFdLHo9YlsxXVsxXSksKGJbMF1bMF0hPT1QfHxiWzBdWzFdIT09RHx8YlsxXVswXSE9PUx8fGJbMV1bMV0hPT16KSYmKHkuc2VsZWN0aW9uPVtbUCxEXSxbTCx6XV0scy5jYWxsKGYpLE10LmJydXNoKCkpfWZ1bmN0aW9uIGV0KCl7aWYoU0soKSx3ci50b3VjaGVzKXtpZih3ci50b3VjaGVzLmxlbmd0aClyZXR1cm47byYmY2xlYXJUaW1lb3V0KG8pLG89c2V0VGltZW91dChmdW5jdGlvbigpe289bnVsbH0sNTAwKSxsdC5vbigidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixudWxsKX1lbHNlIFEkKHdyLnZpZXcsWiksX3Qub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO2x0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksS3QuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KSx5LnNlbGVjdGlvbiYmKGI9eS5zZWxlY3Rpb24pLFRLKGIpJiYoeS5zZWxlY3Rpb249bnVsbCxzLmNhbGwoZikpLE10LmVuZCgpfWZ1bmN0aW9uIGR0KCl7c3dpdGNoKHdyLmtleUNvZGUpe2Nhc2UgMTY6e3J0PWcmJl87YnJlYWt9Y2FzZSAxODp7ZD09PWcyJiYoZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMixYKCkpO2JyZWFrfWNhc2UgMzI6eyhkPT09ZzJ8fGQ9PT1fMikmJihnPDA/ST1MLVU6Zz4wJiYoQz1QLVUpLF88MD9GPXotVzpfPjAmJihPPUQtVyksZD1NSyxLdC5hdHRyKCJjdXJzb3IiLFdwLnNlbGVjdGlvbiksWCgpKTticmVha31kZWZhdWx0OnJldHVybn11VCgpfWZ1bmN0aW9uIHEoKXtzd2l0Y2god3Iua2V5Q29kZSl7Y2FzZSAxNjp7cnQmJihvdD1zdD1ydD0hMSxYKCkpO2JyZWFrfWNhc2UgMTg6e2Q9PT1fMiYmKGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMixYKCkpO2JyZWFrfWNhc2UgMzI6e2Q9PT1NSyYmKHdyLmFsdEtleT8oZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMik6KGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMiksS3QuYXR0cigiY3Vyc29yIixXcFtwXSksWCgpKTticmVha31kZWZhdWx0OnJldHVybn11VCgpfX1mdW5jdGlvbiBoKCl7dmFyIGY9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBmLmV4dGVudD10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmLmRpbT1lLGZ9cmV0dXJuIGEuZXh0ZW50PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6d0soW1srZlswXVswXSwrZlswXVsxXV0sWytmWzFdWzBdLCtmWzFdWzFdXV0pLGEpOnR9LGEuZmlsdGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6d0soISFmKSxhKTpyfSxhLmhhbmRsZVNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2YsYSk6aX0sYS5vbj1mdW5jdGlvbigpe3ZhciBmPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBmPT09bj9hOmZ9LGF9dmFyIHNDdCxNSyxnMixfMixYUiwkUix3Q2UsV3AsbEN0LGNDdCxTQ2UsTUNlLGRDdD1NKCgpPT57QiQoKTtNNXQoKTtlVCgpO0VzKCk7ckN0KCk7bkN0KCk7b0N0KCk7YUN0KCk7c0N0PXtuYW1lOiJkcmFnIn0sTUs9e25hbWU6InNwYWNlIn0sZzI9e25hbWU6ImhhbmRsZSJ9LF8yPXtuYW1lOiJjZW50ZXIifSxYUj17bmFtZToieCIsaGFuZGxlczpbImUiLCJ3Il0ubWFwKGhUKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlJiZbW2VbMF0sdFswXVsxXV0sW2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sJFI9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChoVCksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmW1t0WzBdWzBdLGVbMF1dLFt0WzFdWzBdLGVbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LHdDZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoaFQpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxXcD17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sbEN0PXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxjQ3Q9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LFNDZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxNQ2U9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX19KTt2YXIgbUN0PU0oKCk9PntkQ3QoKX0pO2Z1bmN0aW9uIGxnKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciB2eT1NKCgpPT57fSk7ZnVuY3Rpb24gQUsoZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9Q0NlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gQ0NlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBsZyhlKHQpLHIpfX12YXIgUEs9TSgoKT0+e3Z5KCl9KTt2YXIgZ0N0LEFDZSxQQ2UsSUs9TSgoKT0+e3Z5KCk7UEsoKTtnQ3Q9QUsobGcpLEFDZT1nQ3QucmlnaHQsUENlPWdDdC5sZWZ0fSk7dmFyIExLPU0oKCk9Pnt9KTt2YXIgX0N0PU0oKCk9PntMSygpfSk7dmFyIHlDdD1NKCgpPT57fSk7dmFyIHkyPU0oKCk9Pnt9KTt2YXIga0s9TSgoKT0+e3kyKCl9KTt2YXIgUks9TSgoKT0+e2tLKCl9KTt2YXIgTks9TSgoKT0+e30pO3ZhciB2Q3QsTENlLGtDZSxESz1NKCgpPT57dkN0PUFycmF5LnByb3RvdHlwZSxMQ2U9dkN0LnNsaWNlLGtDZT12Q3QubWFwfSk7dmFyIHhDdD1NKCgpPT57fSk7dmFyIGJDdD1NKCgpPT57fSk7ZnVuY3Rpb24gZlQoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIE9LPU0oKCk9Pnt9KTt2YXIgZmxuLHBsbixkbG4seks9TSgoKT0+e2Zsbj1NYXRoLnNxcnQoNTApLHBsbj1NYXRoLnNxcnQoMTApLGRsbj1NYXRoLnNxcnQoMil9KTt2YXIgRks9TSgoKT0+e30pO3ZhciB3Q3Q9TSgoKT0+e0RLKCk7SUsoKTt4Q3QoKTtOSygpO2JDdCgpO09LKCk7eksoKTtGSygpfSk7dmFyIFpSPU0oKCk9Pnt5MigpfSk7dmFyIE1DdD1NKCgpPT57REsoKTt2eSgpO3kyKCk7WlIoKX0pO3ZhciBFQ3Q9TSgoKT0+e1JLKCl9KTt2YXIgVEN0PU0oKCk9Pnt9KTt2YXIgQ0N0PU0oKCk9Pnt5MigpfSk7dmFyIEFDdD1NKCgpPT57dnkoKTt5MigpO1pSKCl9KTt2YXIgUEN0PU0oKCk9Pnt9KTt2YXIgQks9TSgoKT0+e30pO3ZhciBJQ3Q9TSgoKT0+e30pO3ZhciBMQ3Q9TSgoKT0+e3Z5KCl9KTt2YXIga0N0PU0oKCk9Pnt9KTt2YXIgUkN0PU0oKCk9Pnt9KTt2YXIgSEs9TSgoKT0+e0JLKCl9KTt2YXIgTkN0PU0oKCk9PntISygpfSk7dmFyIERDdD1NKCgpPT57SUsoKTt2eSgpO1BLKCk7X0N0KCk7eUN0KCk7UksoKTtOSygpO3dDdCgpO01DdCgpO0VDdCgpO0ZLKCk7VEN0KCk7Q0N0KCk7QUN0KCk7UEN0KCk7QksoKTtMSygpO0lDdCgpO1pSKCk7T0soKTtMQ3QoKTtrQ3QoKTtSQ3QoKTt6SygpO0hLKCk7a0soKTtOQ3QoKX0pO3ZhciBWSyxVSyxPQ3QscFQscUssR0ssV0s9TSgoKT0+e1ZLPU1hdGguY29zLFVLPU1hdGguc2luLE9DdD1NYXRoLlBJLHBUPU9DdC8yLHFLPU9DdCoyLEdLPU1hdGgubWF4fSk7ZnVuY3Rpb24gSENlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLHIuc291cmNlLnZhbHVlK3IudGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gekN0KCl7dmFyIGU9MCx0PW51bGwscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8pe3ZhciBhPW8ubGVuZ3RoLHM9W10sbD1mVChhKSxjPVtdLHU9W10saD11Lmdyb3Vwcz1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSphKSxwLGQsZyxfLHkseDtmb3IocD0wLHk9LTE7Kyt5PGE7KXtmb3IoZD0wLHg9LTE7Kyt4PGE7KWQrPW9beV1beF07cy5wdXNoKGQpLGMucHVzaChmVChhKSkscCs9ZH1mb3IodCYmbC5zb3J0KGZ1bmN0aW9uKEIsSSl7cmV0dXJuIHQoc1tCXSxzW0ldKX0pLHImJmMuZm9yRWFjaChmdW5jdGlvbihCLEkpe0Iuc29ydChmdW5jdGlvbihMLFIpe3JldHVybiByKG9bSV1bTF0sb1tJXVtSXSl9KX0pLHA9R0soMCxxSy1lKmEpL3AsXz1wP2U6cUsvYSxkPTAseT0tMTsrK3k8YTspe2ZvcihnPWQseD0tMTsrK3g8YTspe3ZhciBiPWxbeV0sUz1jW2JdW3hdLEM9b1tiXVtTXSxQPWQsaz1kKz1DKnA7ZltTKmErYl09e2luZGV4OmIsc3ViaW5kZXg6UyxzdGFydEFuZ2xlOlAsZW5kQW5nbGU6ayx2YWx1ZTpDfX1oW2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpkLHZhbHVlOnNbYl19LGQrPV99Zm9yKHk9LTE7Kyt5PGE7KWZvcih4PXktMTsrK3g8YTspe3ZhciBPPWZbeCphK3ldLEQ9Zlt5KmEreF07KE8udmFsdWV8fEQudmFsdWUpJiZ1LnB1c2goTy52YWx1ZTxELnZhbHVlP3tzb3VyY2U6RCx0YXJnZXQ6T306e3NvdXJjZTpPLHRhcmdldDpEfSl9cmV0dXJuIG4/dS5zb3J0KG4pOnV9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9R0soMCxvKSxpKTplfSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9byxpKTp0fSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9byxpKTpyfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89PW51bGw/bj1udWxsOihuPUhDZShvKSkuXz1vLGkpOm4mJm4uX30saX12YXIgRkN0PU0oKCk9PntEQ3QoKTtXSygpfSk7dmFyIEJDdCxIQ3Q9TSgoKT0+e0JDdD1BcnJheS5wcm90b3R5cGUuc2xpY2V9KTtmdW5jdGlvbiBKUihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFZDdD1NKCgpPT57fSk7ZnVuY3Rpb24gWEsoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBVQ3QoKXtyZXR1cm4gbmV3IFhLfXZhciBZSyxqSyx4eSxWQ2UsJEsscUN0PU0oKCk9PntZSz1NYXRoLlBJLGpLPTIqWUsseHk9MWUtNixWQ2U9aksteHk7WEsucHJvdG90eXBlPVVDdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhLLG1vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPSt0KX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJRIisgK2UrIiwiKyArdCsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fKz0iQyIrICtlKyIsIisgK3QrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbihlLHQscixuLGkpe2U9K2UsdD0rdCxyPStyLG49K24saT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9ci1lLGw9bi10LGM9by1lLHU9YS10LGg9YypjK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2UgaWYoaD54eSlpZighKE1hdGguYWJzKHUqcy1sKmMpPnh5KXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZXt2YXIgZj1yLW8scD1uLWEsZD1zKnMrbCpsLGc9ZipmK3AqcCxfPU1hdGguc3FydChkKSx5PU1hdGguc3FydChoKSx4PWkqTWF0aC50YW4oKFlLLU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnh5JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnh5fHxNYXRoLmFicyh0aGlzLl95MS1jKT54eSkmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJWpLK2pLKSxoPlZDZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKGUtYSkrIiwiKyh0LXMpKyJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD54eSYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoaD49WUspKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTskSz1VQ3R9KTt2YXIgR0N0PU0oKCk9PntxQ3QoKX0pO2Z1bmN0aW9uIFVDZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gcUNlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBHQ2UoZSl7cmV0dXJuIGUucmFkaXVzfWZ1bmN0aW9uIFdDZShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIFlDZShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBXQ3QoKXt2YXIgZT1VQ2UsdD1xQ2Uscj1HQ2Usbj1XQ2UsaT1ZQ2Usbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcyxsPUJDdC5jYWxsKGFyZ3VtZW50cyksYz1lLmFwcGx5KHRoaXMsbCksdT10LmFwcGx5KHRoaXMsbCksaD0rci5hcHBseSh0aGlzLChsWzBdPWMsbCkpLGY9bi5hcHBseSh0aGlzLGwpLXBULHA9aS5hcHBseSh0aGlzLGwpLXBULGQ9aCpWSyhmKSxnPWgqVUsoZiksXz0rci5hcHBseSh0aGlzLChsWzBdPXUsbCkpLHk9bi5hcHBseSh0aGlzLGwpLXBULHg9aS5hcHBseSh0aGlzLGwpLXBUO2lmKG98fChvPXM9JEsoKSksby5tb3ZlVG8oZCxnKSxvLmFyYygwLDAsaCxmLHApLChmIT09eXx8cCE9PXgpJiYoby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxfKlZLKHkpLF8qVUsoeSkpLG8uYXJjKDAsMCxfLHkseCkpLG8ucXVhZHJhdGljQ3VydmVUbygwLDAsZCxnKSxvLmNsb3NlUGF0aCgpLHMpcmV0dXJuIG89bnVsbCxzKyIifHxudWxsfXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkpSKCtzKSxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpKUigrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkpSKCtzKSxhKTppfSxhLnNvdXJjZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zLGEpOmV9LGEudGFyZ2V0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXM9PW51bGw/bnVsbDpzLGEpOm99LGF9dmFyIFlDdD1NKCgpPT57SEN0KCk7VkN0KCk7V0soKTtHQ3QoKX0pO3ZhciBqQ3Q9TSgoKT0+e0ZDdCgpO1lDdCgpfSk7ZnVuY3Rpb24gUVIoKXt9ZnVuY3Rpb24gWEN0KGUsdCl7dmFyIHI9bmV3IFFSO2lmKGUgaW5zdGFuY2VvZiBRUillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgbGwsYnksdE49TSgoKT0+e2xsPSIkIjtRUi5wcm90b3R5cGU9WEN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6UVIsaGFzOmZ1bmN0aW9uKGUpe3JldHVybiBsbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tsbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbbGwrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bGwrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09bGwmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWxsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtieT1YQ3R9KTtmdW5jdGlvbiBaQ3QoKXt2YXIgZT1bXSx0PVtdLHIsbixpO2Z1bmN0aW9uIG8ocyxsLGMsdSl7aWYobD49ZS5sZW5ndGgpcmV0dXJuIHIhPW51bGwmJnMuc29ydChyKSxuIT1udWxsP24ocyk6cztmb3IodmFyIGg9LTEsZj1zLmxlbmd0aCxwPWVbbCsrXSxkLGcsXz1ieSgpLHkseD1jKCk7KytoPGY7KSh5PV8uZ2V0KGQ9cChnPXNbaF0pKyIiKSk/eS5wdXNoKGcpOl8uc2V0KGQsW2ddKTtyZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGIsUyl7dSh4LFMsbyhiLGwsYyx1KSl9KSx4fWZ1bmN0aW9uIGEocyxsKXtpZigrK2w+ZS5sZW5ndGgpcmV0dXJuIHM7dmFyIGMsdT10W2wtMV07cmV0dXJuIG4hPW51bGwmJmw+PWUubGVuZ3RoP2M9cy5lbnRyaWVzKCk6KGM9W10scy5lYWNoKGZ1bmN0aW9uKGgsZil7Yy5wdXNoKHtrZXk6Zix2YWx1ZXM6YShoLGwpfSl9KSksdSE9bnVsbD9jLnNvcnQoZnVuY3Rpb24oaCxmKXtyZXR1cm4gdShoLmtleSxmLmtleSl9KTpjfXJldHVybiBpPXtvYmplY3Q6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLGpDZSxYQ2UpfSxtYXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLCRDdCxLQ3QpfSxlbnRyaWVzOmZ1bmN0aW9uKHMpe3JldHVybiBhKG8ocywwLCRDdCxLQ3QpLDApfSxrZXk6ZnVuY3Rpb24ocyl7cmV0dXJuIGUucHVzaChzKSxpfSxzb3J0S2V5czpmdW5jdGlvbihzKXtyZXR1cm4gdFtlLmxlbmd0aC0xXT1zLGl9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHI9cyxpfSxyb2xsdXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG49cyxpfX19ZnVuY3Rpb24gakNlKCl7cmV0dXJue319ZnVuY3Rpb24gWENlKGUsdCxyKXtlW3RdPXJ9ZnVuY3Rpb24gJEN0KCl7cmV0dXJuIGJ5KCl9ZnVuY3Rpb24gS0N0KGUsdCxyKXtlLnNldCh0LHIpfXZhciBKQ3Q9TSgoKT0+e3ROKCl9KTtmdW5jdGlvbiBlTigpe31mdW5jdGlvbiBRQ3QoZSx0KXt2YXIgcj1uZXcgZU47aWYoZSBpbnN0YW5jZW9mIGVOKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciB3eSx0QXQsZUF0PU0oKCk9Pnt0TigpO3d5PWJ5LnByb3RvdHlwZTtlTi5wcm90b3R5cGU9UUN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZU4saGFzOnd5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbbGwrZV09ZSx0aGlzfSxyZW1vdmU6d3kucmVtb3ZlLGNsZWFyOnd5LmNsZWFyLHZhbHVlczp3eS5rZXlzLHNpemU6d3kuc2l6ZSxlbXB0eTp3eS5lbXB0eSxlYWNoOnd5LmVhY2h9O3RBdD1RQ3R9KTtmdW5jdGlvbiByQXQoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBuQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGlBdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIG9BdD1NKCgpPT57fSk7ZnVuY3Rpb24gYUF0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBzQXQ9TSgoKT0+e30pO3ZhciBsQXQ9TSgoKT0+e0pDdCgpO2VBdCgpO3ROKCk7bkF0KCk7b0F0KCk7c0F0KCl9KTtmdW5jdGlvbiBZcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gY2coZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIHJOPU0oKCk9Pnt9KTtmdW5jdGlvbiB0Zigpe31mdW5jdGlvbiB4MihlKXt2YXIgdDtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9JENlLmV4ZWMoZSkpPyh0PXBhcnNlSW50KHRbMV0sMTYpLG5ldyB0byh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSkpOih0PUtDZS5leGVjKGUpKT91QXQocGFyc2VJbnQodFsxXSwxNikpOih0PVpDZS5leGVjKGUpKT9uZXcgdG8odFsxXSx0WzJdLHRbM10sMSk6KHQ9SkNlLmV4ZWMoZSkpP25ldyB0byh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1RQ2UuZXhlYyhlKSk/aEF0KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PXRBZS5leGVjKGUpKT9oQXQodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9ZUFlLmV4ZWMoZSkpP2ZBdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PXJBZS5leGVjKGUpKT9mQXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpjQXQuaGFzT3duUHJvcGVydHkoZSk/dUF0KGNBdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IHRvKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gdUF0KGUpe3JldHVybiBuZXcgdG8oZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIGhBdChlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHRvKGUsdCxyLG4pfWZ1bmN0aW9uIG1UKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGZ8fChlPXgyKGUpKSxlPyhlPWUucmdiKCksbmV3IHRvKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyB0b31mdW5jdGlvbiBaSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/bVQoZSk6bmV3IHRvKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiB0byhlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gZkF0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgSmgoZSx0LHIsbil9ZnVuY3Rpb24gbkFlKGUpe2lmKGUgaW5zdGFuY2VvZiBKaClyZXR1cm4gbmV3IEpoKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIHRmfHwoZT14MihlKSksIWUpcmV0dXJuIG5ldyBKaDtpZihlIGluc3RhbmNlb2YgSmgpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgSmgoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBKSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/bkFlKGUpOm5ldyBKaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gSmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEtLKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciB1ZyxTeSx2MixkVCxRaCwkQ2UsS0NlLFpDZSxKQ2UsUUNlLHRBZSxlQWUsckFlLGNBdCxuTj1NKCgpPT57ck4oKTt1Zz0uNyxTeT0xL3VnLHYyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixkVD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixRaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsJENlPS9eIyhbMC05YS1mXXszfSkkLyxLQ2U9L14jKFswLTlhLWZdezZ9KSQvLFpDZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbdjIsdjIsdjJdKyJcXCkkIiksSkNlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tRaCxRaCxRaF0rIlxcKSQiKSxRQ2U9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1t2Mix2Mix2MixkVF0rIlxcKSQiKSx0QWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tRaCxRaCxRaCxkVF0rIlxcKSQiKSxlQWU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2RULFFoLFFoXSsiXFwpJCIpLHJBZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW2RULFFoLFFoLGRUXSsiXFwpJCIpLGNBdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtZcCh0Zix4Mix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pO1lwKHRvLFpLLGNnKHRmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1N5Ok1hdGgucG93KFN5LGUpLG5ldyB0byh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91ZzpNYXRoLnBvdyh1ZyxlKSxuZXcgdG8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSk7WXAoSmgsSkssY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgdG8oS0soZT49MjQwP2UtMjQwOmUrMTIwLGksbiksS0soZSxpLG4pLEtLKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpfSk7dmFyIGlOLG9OLFFLPU0oKCk9PntpTj1NYXRoLlBJLzE4MCxvTj0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIGlaKGUpe2lmKGUgaW5zdGFuY2VvZiBqcClyZXR1cm4gbmV3IGpwKGUubCxlLmEsZS5iLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhnKXt2YXIgdD1lLmgqaU47cmV0dXJuIG5ldyBqcChlLmwsTWF0aC5jb3ModCkqZS5jLE1hdGguc2luKHQpKmUuYyxlLm9wYWNpdHkpfWUgaW5zdGFuY2VvZiB0b3x8KGU9bVQoZSkpO3ZhciByPW5aKGUuciksbj1uWihlLmcpLGk9blooZS5iKSxvPXRaKCguNDEyNDU2NCpyKy4zNTc1NzYxKm4rLjE4MDQzNzUqaSkvcEF0KSxhPXRaKCguMjEyNjcyOSpyKy43MTUxNTIyKm4rLjA3MjE3NSppKS9kQXQpLHM9dFooKC4wMTkzMzM5KnIrLjExOTE5MipuKy45NTAzMDQxKmkpL21BdCk7cmV0dXJuIG5ldyBqcCgxMTYqYS0xNiw1MDAqKG8tYSksMjAwKihhLXMpLGUub3BhY2l0eSl9ZnVuY3Rpb24gc04oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2laKGUpOm5ldyBqcChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24ganAoZSx0LHIsbil7dGhpcy5sPStlLHRoaXMuYT0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIHRaKGUpe3JldHVybiBlPmlBZT9NYXRoLnBvdyhlLDEvMyk6ZS9fQXQrZ0F0fWZ1bmN0aW9uIGVaKGUpe3JldHVybiBlPmIyP2UqZSplOl9BdCooZS1nQXQpfWZ1bmN0aW9uIHJaKGUpe3JldHVybiAyNTUqKGU8PS4wMDMxMzA4PzEyLjkyKmU6MS4wNTUqTWF0aC5wb3coZSwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gblooZSl7cmV0dXJuKGUvPTI1NSk8PS4wNDA0NT9lLzEyLjkyOk1hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gb0FlKGUpe2lmKGUgaW5zdGFuY2VvZiBoZylyZXR1cm4gbmV3IGhnKGUuaCxlLmMsZS5sLGUub3BhY2l0eSk7ZSBpbnN0YW5jZW9mIGpwfHwoZT1pWihlKSk7dmFyIHQ9TWF0aC5hdGFuMihlLmIsZS5hKSpvTjtyZXR1cm4gbmV3IGhnKHQ8MD90KzM2MDp0LE1hdGguc3FydChlLmEqZS5hK2UuYiplLmIpLGUubCxlLm9wYWNpdHkpfWZ1bmN0aW9uIG9aKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9vQWUoZSk6bmV3IGhnKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBoZyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5jPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIGFOLHBBdCxkQXQsbUF0LGdBdCxiMixfQXQsaUFlLHlBdD1NKCgpPT57ck4oKTtuTigpO1FLKCk7YU49MTgscEF0PS45NTA0NyxkQXQ9MSxtQXQ9MS4wODg4MyxnQXQ9NC8yOSxiMj02LzI5LF9BdD0zKmIyKmIyLGlBZT1iMipiMipiMjtZcChqcCxzTixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqcCh0aGlzLmwrYU4qKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpwKHRoaXMubC1hTiooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIGU9ZEF0KmVaKGUpLHQ9cEF0KmVaKHQpLHI9bUF0KmVaKHIpLG5ldyB0byhyWigzLjI0MDQ1NDIqdC0xLjUzNzEzODUqZS0uNDk4NTMxNCpyKSxyWigtLjk2OTI2Nip0KzEuODc2MDEwOCplKy4wNDE1NTYqciksclooLjA1NTY0MzQqdC0uMjA0MDI1OSplKzEuMDU3MjI1MipyKSx0aGlzLm9wYWNpdHkpfX0pKTtZcChoZyxvWixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoZyh0aGlzLmgsdGhpcy5jLHRoaXMubCthTiooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhnKHRoaXMuaCx0aGlzLmMsdGhpcy5sLWFOKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIGlaKHRoaXMpLnJnYigpfX0pKX0pO2Z1bmN0aW9uIGFBZShlKXtpZihlIGluc3RhbmNlb2YgTXkpcmV0dXJuIG5ldyBNeShlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiB0b3x8KGU9bVQoZSkpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPShiQXQqbit2QXQqdC14QXQqcikvKGJBdCt2QXQteEF0KSxvPW4taSxhPShnVCooci1pKS1zWipvKS9sTixzPU1hdGguc3FydChhKmErbypvKS8oZ1QqaSooMS1pKSksbD1zP01hdGguYXRhbjIoYSxvKSpvTi0xMjA6TmFOO3JldHVybiBuZXcgTXkobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gY04oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2FBZShlKTpuZXcgTXkoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIE15KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgd0F0LGFaLHNaLGxOLGdULHZBdCx4QXQsYkF0LFNBdD1NKCgpPT57ck4oKTtuTigpO1FLKCk7d0F0PS0uMTQ4NjEsYVo9MS43ODI3NyxzWj0tLjI5MjI3LGxOPS0uOTA2NDksZ1Q9MS45NzI5NCx2QXQ9Z1QqbE4seEF0PWdUKmFaLGJBdD1hWipzWi1sTip3QXQ7WXAoTXksY04sY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSppTix0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgdG8oMjU1Kih0K3IqKHdBdCpuK2FaKmkpKSwyNTUqKHQrciooc1oqbitsTippKSksMjU1Kih0K3IqKGdUKm4pKSx0aGlzLm9wYWNpdHkpfX0pKX0pO3ZhciBNQXQ9TSgoKT0+e25OKCk7eUF0KCk7U0F0KCl9KTtmdW5jdGlvbiBUQXQoKXtmb3IodmFyIGU9MCx0PWFyZ3VtZW50cy5sZW5ndGgscj17fSxuO2U8dDsrK2Upe2lmKCEobj1hcmd1bWVudHNbZV0rIiIpfHxuIGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IHVOKHIpfWZ1bmN0aW9uIHVOKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGxBZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIGNBZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIEVBdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09c0FlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgc0FlLENBdCxBQXQ9TSgoKT0+e3NBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTt1Ti5wcm90b3R5cGU9VEF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dU4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1sQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1jQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPUVBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPUVBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgdU4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O0NBdD1UQXR9KTt2YXIgUEF0PU0oKCk9PntBQXQoKX0pO2Z1bmN0aW9uIExBdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBoTihyKX1mdW5jdGlvbiBoTihlKXt0aGlzLl89ZX1mdW5jdGlvbiBoQWUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBmQWUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBJQXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPXVBZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIHVBZSxsWixrQXQ9TSgoKT0+e3VBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtoTi5wcm90b3R5cGU9TEF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aE4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1oQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1mQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPUlBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPUlBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgaE4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O2xaPUxBdH0pO3ZhciBSQXQ9TSgoKT0+e2tBdCgpfSk7dmFyIGZOLGNaLHVaPU0oKCk9PntmTj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsY1o9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOmZOLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBwTihlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxjWi5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6Y1pbdF0sbG9jYWw6ZX06ZX12YXIgaFo9TSgoKT0+e3VaKCl9KTtmdW5jdGlvbiBwQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1mTiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09Zk4/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIGRBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBkTihlKXt2YXIgdD1wTihlKTtyZXR1cm4odC5sb2NhbD9kQWU6cEFlKSh0KX12YXIgZlo9TSgoKT0+e2haKCk7dVooKX0pO2Z1bmN0aW9uIG1BZSgpe31mdW5jdGlvbiBtTihlKXtyZXR1cm4gZT09bnVsbD9tQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGUpfX12YXIgcFo9TSgoKT0+e30pO2Z1bmN0aW9uIE5BdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9bU4oZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1uZXcgQXJyYXkoYSksbCxjLHU9MDt1PGE7Kyt1KShsPW9bdV0pJiYoYz1lLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLHNbdV09Yyk7cmV0dXJuIG5ldyBkaShuLHRoaXMuX3BhcmVudHMpfXZhciBEQXQ9TSgoKT0+e2VmKCk7cFooKX0pO2Z1bmN0aW9uIGdBZSgpe3JldHVybltdfWZ1bmN0aW9uIE9BdChlKXtyZXR1cm4gZT09bnVsbD9nQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgekF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGQXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPU9BdChlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgZGkobixpKX12YXIgQkF0PU0oKCk9PntlZigpO3pBdCgpfSk7ZnVuY3Rpb24gSEF0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fXZhciBWQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFVBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9SEF0KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBkaShuLHRoaXMuX3BhcmVudHMpfXZhciBxQXQ9TSgoKT0+e2VmKCk7VkF0KCl9KTtmdW5jdGlvbiBnTihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgZFo9TSgoKT0+e30pO2Z1bmN0aW9uIEdBdCgpe3JldHVybiBuZXcgZGkodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoZ04pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIF9UKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBtWj1NKCgpPT57ZFooKTtlZigpO19ULnByb3RvdHlwZT17Y29uc3RydWN0b3I6X1QsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBXQXQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBZQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIF9BZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgX1QoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIHlBZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPWpBdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPWpBdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyBfVChlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIFhBdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/eUFlOl9BZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVdBdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgZGkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBqQXQsJEF0PU0oKCk9PntlZigpO21aKCk7WUF0KCk7akF0PSIkIn0pO2Z1bmN0aW9uIEtBdCgpe3JldHVybiBuZXcgZGkodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChnTiksdGhpcy5fcGFyZW50cyl9dmFyIFpBdD1NKCgpPT57ZFooKTtlZigpfSk7ZnVuY3Rpb24gSkF0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBRQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHQ0dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgZGkoYSx0aGlzLl9wYXJlbnRzKX12YXIgZTR0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gcjR0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgbjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBpNHQoZSl7ZXx8KGU9dkFlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IGRpKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiB2QWUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIG80dD1NKCgpPT57ZWYoKX0pO2Z1bmN0aW9uIGE0dCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgczR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsNHQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgYzR0PU0oKCk9Pnt9KTtmdW5jdGlvbiB1NHQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBoNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGY0dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIHA0dD1NKCgpPT57fSk7ZnVuY3Rpb24gZDR0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBtNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGc0dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIF80dD1NKCgpPT57fSk7ZnVuY3Rpb24geEFlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBiQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiB3QWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBTQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gTUFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBFQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24geTR0KGUsdCl7dmFyIHI9cE4oZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP2JBZTp4QWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9FQWU6TUFlOnIubG9jYWw/U0FlOndBZSkocix0KSl9dmFyIHY0dD1NKCgpPT57aFooKX0pO2Z1bmN0aW9uIF9OKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgZ1o9TSgoKT0+e30pO2Z1bmN0aW9uIFRBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBDQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBBQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24geDR0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9UQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/QUFlOkNBZSkoZSx0LHI9PW51bGw/IiI6cikpOlBBZSh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBQQWUoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxfTihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgYjR0PU0oKCk9PntnWigpfSk7ZnVuY3Rpb24gSUFlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBMQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIGtBZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiB3NHQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9JQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/a0FlOkxBZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIFM0dD1NKCgpPT57fSk7ZnVuY3Rpb24gTTR0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBfWihlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBFNHQoZSl9ZnVuY3Rpb24gRTR0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1NNHQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBUNHQoZSx0KXtmb3IodmFyIHI9X1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLmFkZCh0W25dKX1mdW5jdGlvbiBDNHQoZSx0KXtmb3IodmFyIHI9X1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBSQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7VDR0KHRoaXMsZSl9fWZ1bmN0aW9uIE5BZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtDNHQodGhpcyxlKX19ZnVuY3Rpb24gREFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP1Q0dDpDNHQpKHRoaXMsZSl9fWZ1bmN0aW9uIEE0dChlLHQpe3ZhciByPU00dChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1fWih0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9EQWU6dD9SQWU6TkFlKShyLHQpKX12YXIgUDR0PU0oKCk9PntFNHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gT0FlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiB6QWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBGQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEk0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9PQWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0ZBZTp6QWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgTDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCQWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBIQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gVkFlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gazR0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0JBZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/VkFlOkhBZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgUjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBVQWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gTjR0KCl7cmV0dXJuIHRoaXMuZWFjaChVQWUpfXZhciBENHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFBZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIE80dCgpe3JldHVybiB0aGlzLmVhY2gocUFlKX12YXIgejR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGNHQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpkTihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgQjR0PU0oKCk9PntmWigpfSk7ZnVuY3Rpb24gR0FlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gSDR0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpkTihlKSxuPXQ9PW51bGw/R0FlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6bU4odCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBWNHQ9TSgoKT0+e2ZaKCk7cFooKX0pO2Z1bmN0aW9uIFdBZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIFU0dCgpe3JldHVybiB0aGlzLmVhY2goV0FlKX12YXIgcTR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBZQWUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIGpBZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gRzR0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP2pBZTpZQWUpfXZhciBXNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFk0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIGo0dD1NKCgpPT57fSk7ZnVuY3Rpb24gWEFlKGUsdCxyKXtyZXR1cm4gZT1LNHQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gSzR0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9c247c249bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7c249aX19fWZ1bmN0aW9uICRBZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gS0FlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIFpBZShlLHQscil7dmFyIG49JDR0Lmhhc093blByb3BlcnR5KGUudHlwZSk/WEFlOks0dDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBaNHQoZSx0LHIpe3ZhciBuPSRBZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/WkFlOktBZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiB5TihlLHQscixuKXt2YXIgaT1zbjtlLnNvdXJjZUV2ZW50PXNuLHNuPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtzbj1pfX12YXIgJDR0LHNuLFg0dCx2Tj1NKCgpPT57JDR0PXt9LHNuPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFg0dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBYNHR8fCgkNHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gSjR0KGUsdCxyKXt2YXIgbj1fTihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBKQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSjR0KHRoaXMsZSx0KX19ZnVuY3Rpb24gUUFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEo0dCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBRNHQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9RQWU6SkFlKShlLHQpKX12YXIgdFB0PU0oKCk9PntnWigpfSk7ZnVuY3Rpb24gZGkoZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gdDRlKCl7cmV0dXJuIG5ldyBkaShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHlaKX12YXIgeVosZWY9TSgoKT0+e0RBdCgpO0JBdCgpO3FBdCgpOyRBdCgpO21aKCk7WkF0KCk7UUF0KCk7ZTR0KCk7bjR0KCk7bzR0KCk7czR0KCk7YzR0KCk7aDR0KCk7cDR0KCk7bTR0KCk7XzR0KCk7djR0KCk7YjR0KCk7UzR0KCk7UDR0KCk7TDR0KCk7UjR0KCk7RDR0KCk7ejR0KCk7QjR0KCk7VjR0KCk7cTR0KCk7VzR0KCk7ajR0KCk7dk4oKTt0UHQoKTt5Wj1bbnVsbF07ZGkucHJvdG90eXBlPXQ0ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRpLHNlbGVjdDpOQXQsc2VsZWN0QWxsOkZBdCxmaWx0ZXI6VUF0LGRhdGE6WEF0LGVudGVyOkdBdCxleGl0OktBdCxqb2luOkpBdCxtZXJnZTp0NHQsb3JkZXI6cjR0LHNvcnQ6aTR0LGNhbGw6YTR0LG5vZGVzOmw0dCxub2RlOnU0dCxzaXplOmY0dCxlbXB0eTpkNHQsZWFjaDpnNHQsYXR0cjp5NHQsc3R5bGU6eDR0LHByb3BlcnR5Onc0dCxjbGFzc2VkOkE0dCx0ZXh0Okk0dCxodG1sOms0dCxyYWlzZTpONHQsbG93ZXI6TzR0LGFwcGVuZDpGNHQsaW5zZXJ0Okg0dCxyZW1vdmU6VTR0LGNsb25lOkc0dCxkYXR1bTpZNHQsb246WjR0LGRpc3BhdGNoOlE0dH19KTtmdW5jdGlvbiBFeShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBkaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGRpKFtbZV1dLHlaKX12YXIgZVB0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24geE4oKXtmb3IodmFyIGU9c24sdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgdlo9TSgoKT0+e3ZOKCl9KTtmdW5jdGlvbiBiTihlLHQpe3ZhciByPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBuPXIuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PXQuY2xpZW50WCxuLnk9dC5jbGllbnRZLG49bi5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtuLngsbi55XX12YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktaS50b3AtZS5jbGllbnRUb3BdfXZhciB4Wj1NKCgpPT57fSk7ZnVuY3Rpb24gYlooZSl7dmFyIHQ9eE4oKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksYk4oZSx0KX12YXIgclB0PU0oKCk9Pnt2WigpO3haKCl9KTtmdW5jdGlvbiB3WihlLHQscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9eE4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBuPTAsaT10P3QubGVuZ3RoOjAsbztuPGk7KytuKWlmKChvPXRbbl0pLmlkZW50aWZpZXI9PT1yKXJldHVybiBiTihlLG8pO3JldHVybiBudWxsfXZhciBuUHQ9TSgoKT0+e3ZaKCk7eFooKX0pO3ZhciB3Tj1NKCgpPT57clB0KCk7ZVB0KCk7blB0KCk7dk4oKX0pO2Z1bmN0aW9uIFNOKCl7c24uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZmcoKXtzbi5wcmV2ZW50RGVmYXVsdCgpLHNuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBTWj1NKCgpPT57d04oKX0pO2Z1bmN0aW9uIE1OKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9RXkoZSkub24oImRyYWdzdGFydC5kcmFnIixmZywhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixmZywhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gRU4oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUV5KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLGZnLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfXZhciBNWj1NKCgpPT57d04oKTtTWigpfSk7ZnVuY3Rpb24geVQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBpUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZUKGUsdCxyLG4saSxvLGEscyxsLGMpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy5zdWJqZWN0PXIsdGhpcy5pZGVudGlmaWVyPW4sdGhpcy5hY3RpdmU9aSx0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT1sLHRoaXMuXz1jfXZhciBvUHQ9TSgoKT0+e3ZULnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gZT09PXRoaXMuXz90aGlzOmV9fSk7ZnVuY3Rpb24gZTRlKCl7cmV0dXJuIXNuLmJ1dHRvbn1mdW5jdGlvbiByNGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIG40ZShlKXtyZXR1cm4gZT09bnVsbD97eDpzbi54LHk6c24ueX06ZX1mdW5jdGlvbiBpNGUoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gYVB0KCl7dmFyIGU9ZTRlLHQ9cjRlLHI9bjRlLG49aTRlLGk9e30sbz1sWigic3RhcnQiLCJkcmFnIiwiZW5kIiksYT0wLHMsbCxjLHUsaD0wO2Z1bmN0aW9uIGYoUyl7Uy5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihuKS5vbigidG91Y2hzdGFydC5kcmFnIixfKS5vbigidG91Y2htb3ZlLmRyYWciLHkpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHgpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoISh1fHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpKXt2YXIgUz1iKCJtb3VzZSIsdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYlosdGhpcyxhcmd1bWVudHMpOyFTfHwoRXkoc24udmlldykub24oIm1vdXNlbW92ZS5kcmFnIixkLCEwKS5vbigibW91c2V1cC5kcmFnIixnLCEwKSxNTihzbi52aWV3KSxTTigpLGM9ITEscz1zbi5jbGllbnRYLGw9c24uY2xpZW50WSxTKCJzdGFydCIpKX19ZnVuY3Rpb24gZCgpe2lmKGZnKCksIWMpe3ZhciBTPXNuLmNsaWVudFgtcyxDPXNuLmNsaWVudFktbDtjPVMqUytDKkM+aH1pLm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24gZygpe0V5KHNuLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLEVOKHNuLnZpZXcsYyksZmcoKSxpLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBfKCl7aWYoISFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFM9c24uY2hhbmdlZFRvdWNoZXMsQz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxQPVMubGVuZ3RoLGssTztmb3Ioaz0wO2s8UDsrK2spKE89YihTW2tdLmlkZW50aWZpZXIsQyx3Wix0aGlzLGFyZ3VtZW50cykpJiYoU04oKSxPKCJzdGFydCIpKX19ZnVuY3Rpb24geSgpe3ZhciBTPXNuLmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2ZvcihQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoZmcoKSxrKCJkcmFnIikpfWZ1bmN0aW9uIHgoKXt2YXIgUz1zbi5jaGFuZ2VkVG91Y2hlcyxDPVMubGVuZ3RoLFAsaztmb3IodSYmY2xlYXJUaW1lb3V0KHUpLHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sNTAwKSxQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoU04oKSxrKCJlbmQiKSl9ZnVuY3Rpb24gYihTLEMsUCxrLE8pe3ZhciBEPVAoQyxTKSxCLEksTCxSPW8uY29weSgpO2lmKCEheU4obmV3IHZUKGYsImJlZm9yZXN0YXJ0IixCLFMsYSxEWzBdLERbMV0sMCwwLFIpLGZ1bmN0aW9uKCl7cmV0dXJuKHNuLnN1YmplY3Q9Qj1yLmFwcGx5KGssTykpPT1udWxsPyExOihJPUIueC1EWzBdfHwwLEw9Qi55LURbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIEYoeil7dmFyIFU9RCxXO3N3aXRjaCh6KXtjYXNlInN0YXJ0IjppW1NdPUYsVz1hKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBpW1NdLC0tYTtjYXNlImRyYWciOkQ9UChDLFMpLFc9YTticmVha315TihuZXcgdlQoZix6LEIsUyxXLERbMF0rSSxEWzFdK0wsRFswXS1VWzBdLERbMV0tVVsxXSxSKSxSLmFwcGx5LFIsW3osayxPXSl9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnlUKCEhUyksZik6ZX0sZi5jb250YWluZXI9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp5VChTKSxmKTp0fSxmLnN1YmplY3Q9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp5VChTKSxmKTpyfSxmLnRvdWNoYWJsZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnlUKCEhUyksZik6bn0sZi5vbj1mdW5jdGlvbigpe3ZhciBTPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBTPT09bz9mOlN9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0oUz0rUykqUyxmKTpNYXRoLnNxcnQoaCl9LGZ9dmFyIHNQdD1NKCgpPT57UkF0KCk7d04oKTtNWigpO1NaKCk7aVB0KCk7b1B0KCl9KTt2YXIgbFB0PU0oKCk9PntzUHQoKTtNWigpfSk7ZnVuY3Rpb24gdVB0KGUpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrZS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK3IrIl0ifSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gbzRlKGUsdCl7dmFyIHI9dVB0KGUpO3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiB0KHIobiksaSxlKX19ZnVuY3Rpb24gYTRlKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaSBpbiBuKWkgaW4gdHx8ci5wdXNoKHRbaV09aSl9KSxyfWZ1bmN0aW9uIHcyKGUpe3ZhciB0PW5ldyBSZWdFeHAoJ1siJytlK2AKXHJdYCkscj1lLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gbihjLHUpe3ZhciBoLGYscD1pKGMsZnVuY3Rpb24oZCxnKXtpZihoKXJldHVybiBoKGQsZy0xKTtmPWQsaD11P280ZShkLHUpOnVQdChkKX0pO3JldHVybiBwLmNvbHVtbnM9Znx8W10scH1mdW5jdGlvbiBpKGMsdSl7dmFyIGg9W10sZj1jLmxlbmd0aCxwPTAsZD0wLGcsXz1mPD0wLHk9ITE7Yy5jaGFyQ29kZUF0KGYtMSk9PT14VCYmLS1mLGMuY2hhckNvZGVBdChmLTEpPT09Q1omJi0tZjtmdW5jdGlvbiB4KCl7aWYoXylyZXR1cm4gRVo7aWYoeSlyZXR1cm4geT0hMSxjUHQ7dmFyIFMsQz1wLFA7aWYoYy5jaGFyQ29kZUF0KEMpPT09VFope2Zvcig7cCsrPGYmJmMuY2hhckNvZGVBdChwKSE9PVRafHxjLmNoYXJDb2RlQXQoKytwKT09PVRaOyk7cmV0dXJuKFM9cCk+PWY/Xz0hMDooUD1jLmNoYXJDb2RlQXQocCsrKSk9PT14VD95PSEwOlA9PT1DWiYmKHk9ITAsYy5jaGFyQ29kZUF0KHApPT09eFQmJisrcCksYy5zbGljZShDKzEsUy0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtwPGY7KXtpZigoUD1jLmNoYXJDb2RlQXQoUz1wKyspKT09PXhUKXk9ITA7ZWxzZSBpZihQPT09Q1opeT0hMCxjLmNoYXJDb2RlQXQocCk9PT14VCYmKytwO2Vsc2UgaWYoUCE9PXIpY29udGludWU7cmV0dXJuIGMuc2xpY2UoQyxTKX1yZXR1cm4gXz0hMCxjLnNsaWNlKEMsZil9Zm9yKDsoZz14KCkpIT09RVo7KXtmb3IodmFyIGI9W107ZyE9PWNQdCYmZyE9PUVaOyliLnB1c2goZyksZz14KCk7dSYmKGI9dShiLGQrKykpPT1udWxsfHxoLnB1c2goYil9cmV0dXJuIGh9ZnVuY3Rpb24gbyhjLHUpe3JldHVybiB1PT1udWxsJiYodT1hNGUoYykpLFt1Lm1hcChsKS5qb2luKGUpXS5jb25jYXQoYy5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBsKGhbZl0pfSkuam9pbihlKX0pKS5qb2luKGAKYCl9ZnVuY3Rpb24gYShjKXtyZXR1cm4gYy5tYXAocykuam9pbihgCmApfWZ1bmN0aW9uIHMoYyl7cmV0dXJuIGMubWFwKGwpLmpvaW4oZSl9ZnVuY3Rpb24gbChjKXtyZXR1cm4gYz09bnVsbD8iIjp0LnRlc3QoYys9IiIpPyciJytjLnJlcGxhY2UoLyIvZywnIiInKSsnIic6Y31yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6byxmb3JtYXRSb3dzOmF9fXZhciBjUHQsRVosVFoseFQsQ1osVE49TSgoKT0+e2NQdD17fSxFWj17fSxUWj0zNCx4VD0xMCxDWj0xM30pO3ZhciBDTixoUHQsZlB0LHBQdCxkUHQsbVB0PU0oKCk9PntUTigpO0NOPXcyKCIsIiksaFB0PUNOLnBhcnNlLGZQdD1DTi5wYXJzZVJvd3MscFB0PUNOLmZvcm1hdCxkUHQ9Q04uZm9ybWF0Um93c30pO3ZhciBBTixnUHQsX1B0LHlQdCx2UHQseFB0PU0oKCk9PntUTigpO0FOPXcyKCIJIiksZ1B0PUFOLnBhcnNlLF9QdD1BTi5wYXJzZVJvd3MseVB0PUFOLmZvcm1hdCx2UHQ9QU4uZm9ybWF0Um93c30pO3ZhciBiUHQ9TSgoKT0+e1ROKCk7bVB0KCk7eFB0KCl9KTtmdW5jdGlvbiB3UHQoZSl7cmV0dXJuK2V9dmFyIFNQdD1NKCgpPT57fSk7ZnVuY3Rpb24gTVB0KGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gRVB0KGUpe3JldHVybiBlKigyLWUpfWZ1bmN0aW9uIEFaKGUpe3JldHVybigoZSo9Mik8PTE/ZSplOi0tZSooMi1lKSsxKS8yfXZhciBUUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIENQdChlKXtyZXR1cm4gZSplKmV9ZnVuY3Rpb24gQVB0KGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiBQWihlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgUFB0PU0oKCk9Pnt9KTt2YXIgSVosSVB0LExQdCxMWixrUHQ9TSgoKT0+e0laPTMsSVB0PWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0oSVopLExQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gMS1NYXRoLnBvdygxLW4sdCl9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfShJWiksTFo9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTw9MT9NYXRoLnBvdyhuLHQpOjItTWF0aC5wb3coMi1uLHQpKS8yfXJldHVybiByLmV4cG9uZW50PWUscn0oSVopfSk7ZnVuY3Rpb24gRFB0KGUpe3JldHVybiAxLU1hdGguY29zKGUqTlB0KX1mdW5jdGlvbiBPUHQoZSl7cmV0dXJuIE1hdGguc2luKGUqTlB0KX1mdW5jdGlvbiBrWihlKXtyZXR1cm4oMS1NYXRoLmNvcyhSUHQqZSkpLzJ9dmFyIFJQdCxOUHQselB0PU0oKCk9PntSUHQ9TWF0aC5QSSxOUHQ9UlB0LzJ9KTtmdW5jdGlvbiBGUHQoZSl7cmV0dXJuIE1hdGgucG93KDIsMTAqZS0xMCl9ZnVuY3Rpb24gQlB0KGUpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKmUpfWZ1bmN0aW9uIFJaKGUpe3JldHVybigoZSo9Mik8PTE/TWF0aC5wb3coMiwxMCplLTEwKToyLU1hdGgucG93KDIsMTAtMTAqZSkpLzJ9dmFyIEhQdD1NKCgpPT57fSk7ZnVuY3Rpb24gVlB0KGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9ZnVuY3Rpb24gVVB0KGUpe3JldHVybiBNYXRoLnNxcnQoMS0gLS1lKmUpfWZ1bmN0aW9uIE5aKGUpe3JldHVybigoZSo9Mik8PTE/MS1NYXRoLnNxcnQoMS1lKmUpOk1hdGguc3FydCgxLShlLT0yKSplKSsxKS8yfXZhciBxUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEdQdChlKXtyZXR1cm4gMS1TMigxLWUpfWZ1bmN0aW9uIFMyKGUpe3JldHVybihlPStlKTxEWj9QTiplKmU6ZTxsNGU/UE4qKGUtPXM0ZSkqZStjNGU6ZTxoNGU/UE4qKGUtPXU0ZSkqZStmNGU6UE4qKGUtPXA0ZSkqZStkNGV9ZnVuY3Rpb24gV1B0KGUpe3JldHVybigoZSo9Mik8PTE/MS1TMigxLWUpOlMyKGUtMSkrMSkvMn12YXIgRFosczRlLGw0ZSxjNGUsdTRlLGg0ZSxmNGUscDRlLGQ0ZSxQTixZUHQ9TSgoKT0+e0RaPS4zNjM2MzYzNjM2MzYzNjM2NSxzNGU9Ni8xMSxsNGU9OC8xMSxjNGU9My80LHU0ZT05LzExLGg0ZT0xMC8xMSxmNGU9MTUvMTYscDRlPTIxLzIyLGQ0ZT02My82NCxQTj0xL0RaL0RafSk7dmFyIE9aLGpQdCxYUHQselosJFB0PU0oKCk9PntPWj0xLjcwMTU4LGpQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbipuKigodCsxKSpuLXQpfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KE9aKSxYUHQ9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuLS1uKm4qKCh0KzEpKm4rdCkrMX1yZXR1cm4gci5vdmVyc2hvb3Q9ZSxyfShPWikselo9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTwxP24qbiooKHQrMSkqbi10KToobi09MikqbiooKHQrMSkqbit0KSsyKS8yfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KE9aKX0pO3ZhciBNMixGWixCWixLUHQsSFosWlB0LEpQdD1NKCgpPT57TTI9MipNYXRoLlBJLEZaPTEsQlo9LjMsS1B0PWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiB0Kk1hdGgucG93KDIsMTAqLS1vKSpNYXRoLnNpbigobi1vKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oRlosQlopLEhaPWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiAxLXQqTWF0aC5wb3coMiwtMTAqKG89K28pKSpNYXRoLnNpbigobytuKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oRlosQlopLFpQdD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1NMik7ZnVuY3Rpb24gaShvKXtyZXR1cm4oKG89byoyLTEpPDA/dCpNYXRoLnBvdygyLDEwKm8pKk1hdGguc2luKChuLW8pL3IpOjItdCpNYXRoLnBvdygyLC0xMCpvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oRlosQlopfSk7dmFyIFFQdD1NKCgpPT57U1B0KCk7VFB0KCk7UFB0KCk7a1B0KCk7elB0KCk7SFB0KCk7cVB0KCk7WVB0KCk7JFB0KCk7SlB0KCl9KTtmdW5jdGlvbiB0NnQoZSx0KXt2YXIgcjtlPT1udWxsJiYoZT0wKSx0PT1udWxsJiYodD0wKTtmdW5jdGlvbiBuKCl7dmFyIGksbz1yLmxlbmd0aCxhLHM9MCxsPTA7Zm9yKGk9MDtpPG87KytpKWE9cltpXSxzKz1hLngsbCs9YS55O2ZvcihzPXMvby1lLGw9bC9vLXQsaT0wO2k8bzsrK2kpYT1yW2ldLGEueC09cyxhLnktPWx9cmV0dXJuIG4uaW5pdGlhbGl6ZT1mdW5jdGlvbihpKXtyPWl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0raSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2ksbik6dH0sbn12YXIgZTZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFR5PU0oKCk9Pnt9KTtmdW5jdGlvbiBNdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fXZhciBJTj1NKCgpPT57fSk7ZnVuY3Rpb24gcjZ0KGUpe3ZhciB0PSt0aGlzLl94LmNhbGwobnVsbCxlKSxyPSt0aGlzLl95LmNhbGwobnVsbCxlKTtyZXR1cm4gbjZ0KHRoaXMuY292ZXIodCxyKSx0LHIsZSl9ZnVuY3Rpb24gbjZ0KGUsdCxyLG4pe2lmKGlzTmFOKHQpfHxpc05hTihyKSlyZXR1cm4gZTt2YXIgaSxvPWUuX3Jvb3QsYT17ZGF0YTpufSxzPWUuX3gwLGw9ZS5feTAsYz1lLl94MSx1PWUuX3kxLGgsZixwLGQsZyxfLHkseDtpZighbylyZXR1cm4gZS5fcm9vdD1hLGU7Zm9yKDtvLmxlbmd0aDspaWYoKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWYsaT1vLCEobz1vW3k9Xzw8MXxnXSkpcmV0dXJuIGlbeV09YSxlO2lmKHA9K2UuX3guY2FsbChudWxsLG8uZGF0YSksZD0rZS5feS5jYWxsKG51bGwsby5kYXRhKSx0PT09cCYmcj09PWQpcmV0dXJuIGEubmV4dD1vLGk/aVt5XT1hOmUuX3Jvb3Q9YSxlO2RvIGk9aT9pW3ldPW5ldyBBcnJheSg0KTplLl9yb290PW5ldyBBcnJheSg0KSwoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9Zjt3aGlsZSgoeT1fPDwxfGcpPT09KHg9KGQ+PWYpPDwxfHA+PWgpKTtyZXR1cm4gaVt4XT1vLGlbeV09YSxlfWZ1bmN0aW9uIGk2dChlKXt2YXIgdCxyLG49ZS5sZW5ndGgsaSxvLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzA7Zm9yKHI9MDtyPG47KytyKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHQ9ZVtyXSkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSl8fChhW3JdPWksc1tyXT1vLGk8bCYmKGw9aSksaT51JiYodT1pKSxvPGMmJihjPW8pLG8+aCYmKGg9bykpO2lmKGw+dXx8Yz5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrciluNnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIG82dD1NKCgpPT57fSk7ZnVuY3Rpb24gYTZ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZXtmb3IodmFyIGE9aS1yLHM9dGhpcy5fcm9vdCxsLGM7cj5lfHxlPj1pfHxuPnR8fHQ+PW87KXN3aXRjaChjPSh0PG4pPDwxfGU8cixsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sLGEqPTIsYyl7Y2FzZSAwOmk9cithLG89bithO2JyZWFrO2Nhc2UgMTpyPWktYSxvPW4rYTticmVhaztjYXNlIDI6aT1yK2Esbj1vLWE7YnJlYWs7Y2FzZSAzOnI9aS1hLG49by1hO2JyZWFrfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1zKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBzNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGw2dCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciBjNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHU2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgaDZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIgTE49TSgoKT0+e30pO2Z1bmN0aW9uIGY2dChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBTbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IFNvKHBbM10sXyx5LGwsYyksbmV3IFNvKHBbMl0sYSx5LF8sYyksbmV3IFNvKHBbMV0sXyxzLGwseSksbmV3IFNvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIHA2dD1NKCgpPT57TE4oKX0pO2Z1bmN0aW9uIGQ2dChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiBtNnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBnNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIF82dCgpe3JldHVybiB0aGlzLl9yb290fXZhciB5NnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHY2dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIHg2dD1NKCgpPT57fSk7ZnVuY3Rpb24gYjZ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBTbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgU28oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgU28oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgU28oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgU28oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIHc2dD1NKCgpPT57TE4oKX0pO2Z1bmN0aW9uIFM2dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgU28odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgU28obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgU28obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgU28obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgU28obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgTTZ0PU0oKCk9PntMTigpfSk7ZnVuY3Rpb24gRTZ0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIFQ2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIEM2dD1NKCgpPT57fSk7ZnVuY3Rpb24gQTZ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIFA2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIEk2dD1NKCgpPT57fSk7ZnVuY3Rpb24gQ3koZSx0LHIpe3ZhciBuPW5ldyBWWih0PT1udWxsP0U2dDp0LHI9PW51bGw/QTZ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIFZaKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gTDZ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgR2EsazZ0PU0oKCk9PntvNnQoKTtzNnQoKTtjNnQoKTtoNnQoKTtwNnQoKTtnNnQoKTt5NnQoKTt4NnQoKTt3NnQoKTtNNnQoKTtDNnQoKTtJNnQoKTtHYT1DeS5wcm90b3R5cGU9VloucHJvdG90eXBlO0dhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVloodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1MNnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1MNnQobikpO3JldHVybiBlfTtHYS5hZGQ9cjZ0O0dhLmFkZEFsbD1pNnQ7R2EuY292ZXI9YTZ0O0dhLmRhdGE9bDZ0O0dhLmV4dGVudD11NnQ7R2EuZmluZD1mNnQ7R2EucmVtb3ZlPWQ2dDtHYS5yZW1vdmVBbGw9bTZ0O0dhLnJvb3Q9XzZ0O0dhLnNpemU9djZ0O0dhLnZpc2l0PWI2dDtHYS52aXNpdEFmdGVyPVM2dDtHYS54PVQ2dDtHYS55PVA2dH0pO3ZhciBVWj1NKCgpPT57azZ0KCl9KTtmdW5jdGlvbiBtNGUoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uIGc0ZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gUjZ0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Rm4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PUN5KHQsbTRlLGc0ZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9TXUoKSxMKz1CKkIpLEk9PT0wJiYoST1NdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6Rm4oK2wpLHMoKSxvKTplfSxvfXZhciBONnQ9TSgoKT0+e1R5KCk7SU4oKTtVWigpfSk7ZnVuY3Rpb24ga04oKXt9ZnVuY3Rpb24gRDZ0KGUsdCl7dmFyIHI9bmV3IGtOO2lmKGUgaW5zdGFuY2VvZiBrTillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgY2wscGcsUk49TSgoKT0+e2NsPSIkIjtrTi5wcm90b3R5cGU9RDZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6a04saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBjbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tjbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbY2wrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9Y2wrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09Y2wmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWNsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtwZz1ENnR9KTt2YXIgTzZ0PU0oKCk9PntSTigpfSk7ZnVuY3Rpb24gTk4oKXt9ZnVuY3Rpb24gXzRlKGUsdCl7dmFyIHI9bmV3IE5OO2lmKGUgaW5zdGFuY2VvZiBOTillLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIgQXksejZ0PU0oKCk9PntSTigpO0F5PXBnLnByb3RvdHlwZTtOTi5wcm90b3R5cGU9XzRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Tk4saGFzOkF5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbY2wrZV09ZSx0aGlzfSxyZW1vdmU6QXkucmVtb3ZlLGNsZWFyOkF5LmNsZWFyLHZhbHVlczpBeS5rZXlzLHNpemU6QXkuc2l6ZSxlbXB0eTpBeS5lbXB0eSxlYWNoOkF5LmVhY2h9fSk7dmFyIEY2dD1NKCgpPT57fSk7dmFyIEI2dD1NKCgpPT57fSk7dmFyIEg2dD1NKCgpPT57fSk7dmFyIHFaPU0oKCk9PntPNnQoKTt6NnQoKTtSTigpO0Y2dCgpO0I2dCgpO0g2dCgpfSk7ZnVuY3Rpb24geTRlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIFY2dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBVNnQoZSl7dmFyIHQ9eTRlLHI9dSxuLGk9Rm4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxNdSgpLGs9Qy55K0MudnktUy55LVMudnl8fE11KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1wZyhhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPVY2dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PVY2dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6Rm4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6Rm4oK2cpLGQoKSxoKTppfSxofXZhciBxNnQ9TSgoKT0+e1R5KCk7SU4oKTtxWigpfSk7ZnVuY3Rpb24gVzZ0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEROKHIpfWZ1bmN0aW9uIEROKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIHg0ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIGI0ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIEc2dChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09djRlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgdjRlLEdaLFk2dD1NKCgpPT57djRlPXt2YWx1ZTpmdW5jdGlvbigpe319O0ROLnByb3RvdHlwZT1XNnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpETixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPXg0ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPWI0ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09RzZ0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09RzZ0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBETihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07R1o9VzZ0fSk7dmFyIGo2dD1NKCgpPT57WTZ0KCl9KTtmdW5jdGlvbiBqWigpe3JldHVybiBQeXx8KEs2dCh3NGUpLFB5PU1ULm5vdygpK0ZOKX1mdW5jdGlvbiB3NGUoKXtQeT0wfWZ1bmN0aW9uIFdaKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBCTihlLHQscil7dmFyIG49bmV3IFdaO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gWjZ0KCl7alooKSwrK0UyO2Zvcih2YXIgZT1PTix0O2U7KSh0PVB5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1FMn1mdW5jdGlvbiBYNnQoKXtQeT0oek49TVQubm93KCkpK0ZOLEUyPXdUPTA7dHJ5e1o2dCgpfWZpbmFsbHl7RTI9MCxNNGUoKSxQeT0wfX1mdW5jdGlvbiBTNGUoKXt2YXIgZT1NVC5ub3coKSx0PWUtek47dD4kNnQmJihGTi09dCx6Tj1lKX1mdW5jdGlvbiBNNGUoKXtmb3IodmFyIGUsdD1PTixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpPTj1yKTtTVD1lLFlaKG4pfWZ1bmN0aW9uIFlaKGUpe2lmKCFFMil7d1QmJih3VD1jbGVhclRpbWVvdXQod1QpKTt2YXIgdD1lLVB5O3Q+MjQ/KGU8MS8wJiYod1Q9c2V0VGltZW91dChYNnQsZS1NVC5ub3coKS1GTikpLGJUJiYoYlQ9Y2xlYXJJbnRlcnZhbChiVCkpKTooYlR8fCh6Tj1NVC5ub3coKSxiVD1zZXRJbnRlcnZhbChTNGUsJDZ0KSksRTI9MSxLNnQoWDZ0KSl9fXZhciBFMix3VCxiVCwkNnQsT04sU1Qsek4sUHksRk4sTVQsSzZ0LEo2dD1NKCgpPT57RTI9MCx3VD0wLGJUPTAsJDZ0PTFlMyx6Tj0wLFB5PTAsRk49MCxNVD10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxLNnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07V1oucHJvdG90eXBlPUJOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6V1oscmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP2paKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZTVCE9PXRoaXMmJihTVD9TVC5fbmV4dD10aGlzOk9OPXRoaXMsU1Q9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixZWigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxZWigpKX19fSk7dmFyIFE2dD1NKCgpPT57SjZ0KCl9KTtmdW5jdGlvbiB0SXQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBlSXQoZSl7cmV0dXJuIGUueX1mdW5jdGlvbiBySXQoZSl7dmFyIHQscj0xLG49LjAwMSxpPTEtTWF0aC5wb3cobiwxLzMwMCksbz0wLGE9LjYscz1wZygpLGw9Qk4odSksYz1HWigidGljayIsImVuZCIpO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KCl7aCgpLGMuY2FsbCgidGljayIsdCkscjxuJiYobC5zdG9wKCksYy5jYWxsKCJlbmQiLHQpKX1mdW5jdGlvbiBoKCl7dmFyIGQsZz1lLmxlbmd0aCxfO2ZvcihyKz0oby1yKSppLHMuZWFjaChmdW5jdGlvbih5KXt5KHIpfSksZD0wO2Q8ZzsrK2QpXz1lW2RdLF8uZng9PW51bGw/Xy54Kz1fLnZ4Kj1hOihfLng9Xy5meCxfLnZ4PTApLF8uZnk9PW51bGw/Xy55Kz1fLnZ5Kj1hOihfLnk9Xy5meSxfLnZ5PTApfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGQ9MCxnPWUubGVuZ3RoLF87ZDxnOysrZCl7aWYoXz1lW2RdLF8uaW5kZXg9ZCxpc05hTihfLngpfHxpc05hTihfLnkpKXt2YXIgeT1FNGUqTWF0aC5zcXJ0KGQpLHg9ZCpUNGU7Xy54PXkqTWF0aC5jb3MoeCksXy55PXkqTWF0aC5zaW4oeCl9KGlzTmFOKF8udngpfHxpc05hTihfLnZ5KSkmJihfLnZ4PV8udnk9MCl9fWZ1bmN0aW9uIHAoZCl7cmV0dXJuIGQuaW5pdGlhbGl6ZSYmZC5pbml0aWFsaXplKGUpLGR9cmV0dXJuIGYoKSx0PXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBsLnJlc3RhcnQodSksdH0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBsLnN0b3AoKSx0fSxub2RlczpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kLGYoKSxzLmVhY2gocCksdCk6ZX0sYWxwaGE6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2QsdCk6cn0sYWxwaGFNaW46ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2QsdCk6bn0sYWxwaGFEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rZCx0KToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2QsdCk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLWQsdCk6MS1hfSxmb3JjZTpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGc9PW51bGw/cy5yZW1vdmUoZCk6cy5zZXQoZCxwKGcpKSx0KTpzLmdldChkKX0sZmluZDpmdW5jdGlvbihkLGcsXyl7dmFyIHk9MCx4PWUubGVuZ3RoLGIsUyxDLFAsaztmb3IoXz09bnVsbD9fPTEvMDpfKj1fLHk9MDt5PHg7Kyt5KVA9ZVt5XSxiPWQtUC54LFM9Zy1QLnksQz1iKmIrUypTLEM8XyYmKGs9UCxfPUMpO3JldHVybiBrfSxvbjpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGMub24oZCxnKSx0KTpjLm9uKGQpfX19dmFyIEU0ZSxUNGUsWFo9TSgoKT0+e2o2dCgpO3FaKCk7UTZ0KCk7RTRlPTEwLFQ0ZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSl9KTtmdW5jdGlvbiBuSXQoKXt2YXIgZSx0LHIsbj1GbigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPUN5KGUsdEl0LGVJdCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkZuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH12YXIgaUl0PU0oKCk9PntUeSgpO0lOKCk7VVooKTtYWigpfSk7ZnVuY3Rpb24gb0l0KGUsdCxyKXt2YXIgbixpPUZuKC4xKSxvLGE7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUZuKCtlKSksdD09bnVsbCYmKHQ9MCkscj09bnVsbCYmKHI9MCk7ZnVuY3Rpb24gcyhjKXtmb3IodmFyIHU9MCxoPW4ubGVuZ3RoO3U8aDsrK3Upe3ZhciBmPW5bdV0scD1mLngtdHx8MWUtNixkPWYueS1yfHwxZS02LGc9TWF0aC5zcXJ0KHAqcCtkKmQpLF89KGFbdV0tZykqb1t1XSpjL2c7Zi52eCs9cCpfLGYudnkrPWQqX319ZnVuY3Rpb24gbCgpe2lmKCEhbil7dmFyIGMsdT1uLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkodSksYT1uZXcgQXJyYXkodSksYz0wO2M8dTsrK2MpYVtjXT0rZShuW2NdLGMsbiksb1tjXT1pc05hTihhW2NdKT8wOitpKG5bY10sYyxuKX19cmV0dXJuIHMuaW5pdGlhbGl6ZT1mdW5jdGlvbihjKXtuPWMsbCgpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6Rm4oK2MpLGwoKSxzKTppfSxzLnJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkZuKCtjKSxsKCkscyk6ZX0scy54PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStjLHMpOnR9LHMueT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rYyxzKTpyfSxzfXZhciBhSXQ9TSgoKT0+e1R5KCl9KTtmdW5jdGlvbiBzSXQoZSl7dmFyIHQ9Rm4oLjEpLHIsbixpO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1GbihlPT1udWxsPzA6K2UpKTtmdW5jdGlvbiBvKHMpe2Zvcih2YXIgbD0wLGM9ci5sZW5ndGgsdTtsPGM7KytsKXU9cltsXSx1LnZ4Kz0oaVtsXS11LngpKm5bbF0qc31mdW5jdGlvbiBhKCl7aWYoISFyKXt2YXIgcyxsPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShsKSxpPW5ldyBBcnJheShsKSxzPTA7czxsOysrcyluW3NdPWlzTmFOKGlbc109K2UocltzXSxzLHIpKT8wOit0KHJbc10scyxyKX19cmV0dXJuIG8uaW5pdGlhbGl6ZT1mdW5jdGlvbihzKXtyPXMsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6Rm4oK3MpLGEoKSxvKTp0fSxvLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpGbigrcyksYSgpLG8pOmV9LG99dmFyIGxJdD1NKCgpPT57VHkoKX0pO2Z1bmN0aW9uIGNJdChlKXt2YXIgdD1GbiguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUZuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpGbigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkZuKCtzKSxhKCksbyk6ZX0sb312YXIgdUl0PU0oKCk9PntUeSgpfSk7dmFyIGhJdD1NKCgpPT57ZTZ0KCk7TjZ0KCk7cTZ0KCk7aUl0KCk7YUl0KCk7WFooKTtsSXQoKTt1SXQoKX0pO2Z1bmN0aW9uIEl5KGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfXZhciBITj1NKCgpPT57fSk7ZnVuY3Rpb24gcmYoZSl7cmV0dXJuIGU9SXkoTWF0aC5hYnMoZSkpLGU/ZVsxXTpOYU59dmFyIEVUPU0oKCk9PntITigpfSk7ZnVuY3Rpb24gZkl0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLG89W10sYT0wLHM9ZVswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5uJiYocz1NYXRoLm1heCgxLG4tbCkpLG8ucHVzaChyLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fXZhciBwSXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGRJdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihyKXtyZXR1cm4gZVsrcl19KX19dmFyIG1JdD1NKCgpPT57fSk7ZnVuY3Rpb24gZ0l0KGUsdCl7ZT1lLnRvUHJlY2lzaW9uKHQpO3Q6Zm9yKHZhciByPWUubGVuZ3RoLG49MSxpPS0xLG87bjxyOysrbilzd2l0Y2goZVtuXSl7Y2FzZSIuIjppPW89bjticmVhaztjYXNlIjAiOmk9PT0wJiYoaT1uKSxvPW47YnJlYWs7Y2FzZSJlIjpicmVhayB0O2RlZmF1bHQ6aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP2Uuc2xpY2UoMCxpKStlLnNsaWNlKG8rMSk6ZX12YXIgX0l0PU0oKCk9Pnt9KTtmdW5jdGlvbiB5SXQoZSx0KXt2YXIgcj1JeShlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oJFo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSozKSsxLGE9bi5sZW5ndGg7cmV0dXJuIG89PT1hP246bz5hP24rbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP24uc2xpY2UoMCxvKSsiLiIrbi5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStJeShlLE1hdGgubWF4KDAsdCtvLTEpKVswXX12YXIgJFosS1o9TSgoKT0+e0hOKCl9KTtmdW5jdGlvbiBaWihlLHQpe3ZhciByPUl5KGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK246bi5sZW5ndGg+aSsxP24uc2xpY2UoMCxpKzEpKyIuIituLnNsaWNlKGkrMSk6bituZXcgQXJyYXkoaS1uLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIHZJdD1NKCgpPT57SE4oKX0pO3ZhciBWTixKWj1NKCgpPT57X0l0KCk7S1ooKTt2SXQoKTtWTj17IiI6Z0l0LCIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9GaXhlZCh0KX0sZzpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFpaKGUqMTAwLHQpfSxyOlpaLHM6eUl0LFg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpfX19KTtmdW5jdGlvbiBMeShlKXtyZXR1cm4gbmV3IFFaKGUpfWZ1bmN0aW9uIFFaKGUpe2lmKCEodD1DNGUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdCxyPXRbMV18fCIgIixuPXRbMl18fCI+IixpPXRbM118fCItIixvPXRbNF18fCIiLGE9ISF0WzVdLHM9dFs2XSYmK3RbNl0sbD0hIXRbN10sYz10WzhdJiYrdFs4XS5zbGljZSgxKSx1PXRbOV18fCIiO3U9PT0ibiI/KGw9ITAsdT0iZyIpOlZOW3VdfHwodT0iIiksKGF8fHI9PT0iMCImJm49PT0iPSIpJiYoYT0hMCxyPSIwIixuPSI9IiksdGhpcy5maWxsPXIsdGhpcy5hbGlnbj1uLHRoaXMuc2lnbj1pLHRoaXMuc3ltYm9sPW8sdGhpcy56ZXJvPWEsdGhpcy53aWR0aD1zLHRoaXMuY29tbWE9bCx0aGlzLnByZWNpc2lvbj1jLHRoaXMudHlwZT11fXZhciBDNGUsdEo9TSgoKT0+e0paKCk7QzRlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KFthLXolXSk/JC9pO0x5LnByb3RvdHlwZT1RWi5wcm90b3R5cGU7UVoucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PW51bGw/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09bnVsbD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIGVKKGUpe3JldHVybiBlfXZhciB4SXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFVOKGUpe3ZhciB0PWUuZ3JvdXBpbmcmJmUudGhvdXNhbmRzP2ZJdChlLmdyb3VwaW5nLGUudGhvdXNhbmRzKTplSixyPWUuY3VycmVuY3ksbj1lLmRlY2ltYWwsaT1lLm51bWVyYWxzP2RJdChlLm51bWVyYWxzKTplSixvPWUucGVyY2VudHx8IiUiO2Z1bmN0aW9uIGEobCl7bD1MeShsKTt2YXIgYz1sLmZpbGwsdT1sLmFsaWduLGg9bC5zaWduLGY9bC5zeW1ib2wscD1sLnplcm8sZD1sLndpZHRoLGc9bC5jb21tYSxfPWwucHJlY2lzaW9uLHk9bC50eXBlLHg9Zj09PSIkIj9yWzBdOmY9PT0iIyImJi9bYm94WF0vLnRlc3QoeSk/IjAiK3kudG9Mb3dlckNhc2UoKToiIixiPWY9PT0iJCI/clsxXTovWyVwXS8udGVzdCh5KT9vOiIiLFM9Vk5beV0sQz0heXx8L1tkZWZncHJzJV0vLnRlc3QoeSk7Xz1fPT1udWxsP3k/NjoxMjovW2dwcnNdLy50ZXN0KHkpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsXykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsXykpO2Z1bmN0aW9uIFAoayl7dmFyIE89eCxEPWIsQixJLEw7aWYoeT09PSJjIilEPVMoaykrRCxrPSIiO2Vsc2V7az0razt2YXIgUj1rPDA7aWYoaz1TKE1hdGguYWJzKGspLF8pLFImJitrPT0wJiYoUj0hMSksTz0oUj9oPT09IigiP2g6Ii0iOmg9PT0iLSJ8fGg9PT0iKCI/IiI6aCkrTyxEPSh5PT09InMiP2JJdFs4KyRaLzNdOiIiKStEKyhSJiZoPT09IigiPyIpIjoiIiksQyl7Zm9yKEI9LTEsST1rLmxlbmd0aDsrK0I8STspaWYoTD1rLmNoYXJDb2RlQXQoQiksNDg+THx8TD41Nyl7RD0oTD09PTQ2P24ray5zbGljZShCKzEpOmsuc2xpY2UoQikpK0Qsaz1rLnNsaWNlKDAsQik7YnJlYWt9fX1nJiYhcCYmKGs9dChrLDEvMCkpO3ZhciBGPU8ubGVuZ3RoK2subGVuZ3RoK0QubGVuZ3RoLHo9RjxkP25ldyBBcnJheShkLUYrMSkuam9pbihjKToiIjtzd2l0Y2goZyYmcCYmKGs9dCh6K2ssei5sZW5ndGg/ZC1ELmxlbmd0aDoxLzApLHo9IiIpLHUpe2Nhc2UiPCI6az1PK2srRCt6O2JyZWFrO2Nhc2UiPSI6az1PK3oraytEO2JyZWFrO2Nhc2UiXiI6az16LnNsaWNlKDAsRj16Lmxlbmd0aD4+MSkrTytrK0Qrei5zbGljZShGKTticmVhaztkZWZhdWx0Oms9eitPK2srRDticmVha31yZXR1cm4gaShrKX1yZXR1cm4gUC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBsKyIifSxQfWZ1bmN0aW9uIHMobCxjKXt2YXIgdT1hKChsPUx5KGwpLGwudHlwZT0iZiIsbCkpLGg9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJmKGMpLzMpKSkqMyxmPU1hdGgucG93KDEwLC1oKSxwPWJJdFs4K2gvM107cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiB1KGYqZCkrcH19cmV0dXJue2Zvcm1hdDphLGZvcm1hdFByZWZpeDpzfX12YXIgYkl0LHJKPU0oKCk9PntFVCgpO3BJdCgpO21JdCgpO3RKKCk7SlooKTtLWigpO3hJdCgpO2JJdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIEdOKGUpe3JldHVybiBxTj1VTihlKSxuSj1xTi5mb3JtYXQsaUo9cU4uZm9ybWF0UHJlZml4LHFOfXZhciBxTixuSixpSix3SXQ9TSgoKT0+e3JKKCk7R04oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSl9KTtmdW5jdGlvbiBTSXQoZSl7cmV0dXJuIE1hdGgubWF4KDAsLXJmKE1hdGguYWJzKGUpKSl9dmFyIE1JdD1NKCgpPT57RVQoKX0pO2Z1bmN0aW9uIEVJdChlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyZih0KS8zKSkpKjMtcmYoTWF0aC5hYnMoZSkpKX12YXIgVEl0PU0oKCk9PntFVCgpfSk7ZnVuY3Rpb24gQ0l0KGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAscmYodCktcmYoZSkpKzF9dmFyIEFJdD1NKCgpPT57RVQoKX0pO3ZhciBQSXQ9TSgoKT0+e3dJdCgpO3JKKCk7dEooKTtNSXQoKTtUSXQoKTtBSXQoKX0pO2Z1bmN0aW9uIENzKCl7cmV0dXJuIG5ldyBZTn1mdW5jdGlvbiBZTigpe3RoaXMucmVzZXQoKX1mdW5jdGlvbiBJSXQoZSx0LHIpe3ZhciBuPWUucz10K3IsaT1uLXQsbz1uLWk7ZS50PXQtbysoci1pKX12YXIgV04sa3k9TSgoKT0+e1lOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WU4scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbihlKXtJSXQoV04sZSx0aGlzLnQpLElJdCh0aGlzLFdOLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1XTi50OnRoaXMucz1XTi50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O1dOPW5ldyBZTn0pO2Z1bmN0aW9uICROKGUpe3JldHVybiBlPjE/MDplPC0xP3JyOk1hdGguYWNvcyhlKX1mdW5jdGlvbiBKbihlKXtyZXR1cm4gZT4xP0JuOmU8LTE/LUJuOk1hdGguYXNpbihlKX1mdW5jdGlvbiBhSihlKXtyZXR1cm4oZT1KdChlLzIpKSplfXZhciBjZSxvSixycixCbixUMixCaSxVcix3ZSxZZSx5YyxTbixhZSxUVCxqTixSeSxYTixKdCxkZyxScixDMixscj1NKCgpPT57Y2U9MWUtNixvSj0xZS0xMixycj1NYXRoLlBJLEJuPXJyLzIsVDI9cnIvNCxCaT1ycioyLFVyPTE4MC9ycix3ZT1yci8xODAsWWU9TWF0aC5hYnMseWM9TWF0aC5hdGFuLFNuPU1hdGguYXRhbjIsYWU9TWF0aC5jb3MsVFQ9TWF0aC5jZWlsLGpOPU1hdGguZXhwLFJ5PU1hdGgubG9nLFhOPU1hdGgucG93LEp0PU1hdGguc2luLGRnPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSxScj1NYXRoLnNxcnQsQzI9TWF0aC50YW59KTtmdW5jdGlvbiBxcigpe312YXIgWHA9TSgoKT0+e30pO2Z1bmN0aW9uIEtOKGUsdCl7ZSYma0l0Lmhhc093blByb3BlcnR5KGUudHlwZSkmJmtJdFtlLnR5cGVdKGUsdCl9ZnVuY3Rpb24gc0ooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gUkl0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspc0ooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIE1vKGUsdCl7ZSYmTEl0Lmhhc093blByb3BlcnR5KGUudHlwZSk/TEl0W2UudHlwZV0oZSx0KTpLTihlLHQpfXZhciBMSXQsa0l0LG1nPU0oKCk9PntMSXQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtLTihlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspS04ocltuXS5nZW9tZXRyeSx0KX19LGtJdD17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWU9cltuXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe3NKKGUuY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylzSihyW25dLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtSSXQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylSSXQocltuXSx0KX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KUtOKHJbbl0sdCl9fX0pO2Z1bmN0aW9uIEE0ZSgpe0V1LnBvaW50PUk0ZX1mdW5jdGlvbiBQNGUoKXtPSXQoTkl0LERJdCl9ZnVuY3Rpb24gSTRlKGUsdCl7RXUucG9pbnQ9T0l0LE5JdD1lLERJdD10LGUqPXdlLHQqPXdlLGxKPWUsY0o9YWUodD10LzIrVDIpLHVKPUp0KHQpfWZ1bmN0aW9uIE9JdChlLHQpe2UqPXdlLHQqPXdlLHQ9dC8yK1QyO3ZhciByPWUtbEosbj1yPj0wPzE6LTEsaT1uKnIsbz1hZSh0KSxhPUp0KHQpLHM9dUoqYSxsPWNKKm8rcyphZShpKSxjPXMqbipKdChpKTtDVC5hZGQoU24oYyxsKSksbEo9ZSxjSj1vLHVKPWF9ZnVuY3Rpb24gekl0KGUpe3JldHVybiBaTi5yZXNldCgpLE1vKGUsRXUpLFpOKjJ9dmFyIENULFpOLE5JdCxESXQsbEosY0osdUosRXUsaEo9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO21nKCk7Q1Q9Q3MoKSxaTj1DcygpLEV1PXtwb2ludDpxcixsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtDVC5yZXNldCgpLEV1LmxpbmVTdGFydD1BNGUsRXUubGluZUVuZD1QNGV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT0rQ1Q7Wk4uYWRkKGU8MD9CaStlOmUpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PXFyfSxzcGhlcmU6ZnVuY3Rpb24oKXtaTi5hZGQoQmkpfX19KTtmdW5jdGlvbiBOeShlKXtyZXR1cm5bU24oZVsxXSxlWzBdKSxKbihlWzJdKV19ZnVuY3Rpb24gdmMoZSl7dmFyIHQ9ZVswXSxyPWVbMV0sbj1hZShyKTtyZXR1cm5bbiphZSh0KSxuKkp0KHQpLEp0KHIpXX1mdW5jdGlvbiBBVChlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXX1mdW5jdGlvbiAkcChlLHQpe3JldHVybltlWzFdKnRbMl0tZVsyXSp0WzFdLGVbMl0qdFswXS1lWzBdKnRbMl0sZVswXSp0WzFdLWVbMV0qdFswXV19ZnVuY3Rpb24gSk4oZSx0KXtlWzBdKz10WzBdLGVbMV0rPXRbMV0sZVsyXSs9dFsyXX1mdW5jdGlvbiBQVChlLHQpe3JldHVybltlWzBdKnQsZVsxXSp0LGVbMl0qdF19ZnVuY3Rpb24gRHkoZSl7dmFyIHQ9UnIoZVswXSplWzBdK2VbMV0qZVsxXStlWzJdKmVbMl0pO2VbMF0vPXQsZVsxXS89dCxlWzJdLz10fXZhciBBMj1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGZKKGUsdCl7Z2cucHVzaChacD1bbWk9ZSxFaT1lXSksdDxobCYmKGhsPXQpLHQ+eGMmJih4Yz10KX1mdW5jdGlvbiBxSXQoZSx0KXt2YXIgcj12YyhbZSp3ZSx0KndlXSk7aWYoUDIpe3ZhciBuPSRwKFAyLHIpLGk9W25bMV0sLW5bMF0sMF0sbz0kcChpLG4pO0R5KG8pLG89Tnkobyk7dmFyIGE9ZS1PeSxzPWE+MD8xOi0xLGw9b1swXSpVcipzLGMsdT1ZZShhKT4xODA7dV4ocypPeTxsJiZsPHMqZSk/KGM9b1sxXSpVcixjPnhjJiYoeGM9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKk95PGwmJmw8cyplKT8oYz0tb1sxXSpVcixjPGhsJiYoaGw9YykpOih0PGhsJiYoaGw9dCksdD54YyYmKHhjPXQpKSksdT9lPE95P3VsKG1pLGUpPnVsKG1pLEVpKSYmKEVpPWUpOnVsKGUsRWkpPnVsKG1pLEVpKSYmKG1pPWUpOkVpPj1taT8oZTxtaSYmKG1pPWUpLGU+RWkmJihFaT1lKSk6ZT5PeT91bChtaSxlKT51bChtaSxFaSkmJihFaT1lKTp1bChlLEVpKT51bChtaSxFaSkmJihtaT1lKX1lbHNlIGdnLnB1c2goWnA9W21pPWUsRWk9ZV0pO3Q8aGwmJihobD10KSx0PnhjJiYoeGM9dCksUDI9cixPeT1lfWZ1bmN0aW9uIEZJdCgpe0twLnBvaW50PXFJdH1mdW5jdGlvbiBCSXQoKXtacFswXT1taSxacFsxXT1FaSxLcC5wb2ludD1mSixQMj1udWxsfWZ1bmN0aW9uIEdJdChlLHQpe2lmKFAyKXt2YXIgcj1lLU95O0lULmFkZChZZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIFZJdD1lLFVJdD10O0V1LnBvaW50KGUsdCkscUl0KGUsdCl9ZnVuY3Rpb24gTDRlKCl7RXUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gazRlKCl7R0l0KFZJdCxVSXQpLEV1LmxpbmVFbmQoKSxZZShJVCk+Y2UmJihtaT0tKEVpPTE4MCkpLFpwWzBdPW1pLFpwWzFdPUVpLFAyPW51bGx9ZnVuY3Rpb24gdWwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIFI0ZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gSEl0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBXSXQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYoeGM9RWk9LShtaT1obD0xLzApLGdnPVtdLE1vKGUsS3ApLHI9Z2cubGVuZ3RoKXtmb3IoZ2cuc29ydChSNGUpLHQ9MSxuPWdnWzBdLG89W25dO3Q8cjsrK3QpaT1nZ1t0XSxISXQobixpWzBdKXx8SEl0KG4saVsxXSk/KHVsKG5bMF0saVsxXSk+dWwoblswXSxuWzFdKSYmKG5bMV09aVsxXSksdWwoaVswXSxuWzFdKT51bChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXVsKG5bMV0saVswXSkpPmEmJihhPXMsbWk9aVswXSxFaT1uWzFdKX1yZXR1cm4gZ2c9WnA9bnVsbCxtaT09PTEvMHx8aGw9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbbWksaGxdLFtFaSx4Y11dfXZhciBtaSxobCxFaSx4YyxPeSxWSXQsVUl0LFAyLElULGdnLFpwLEtwLFlJdD1NKCgpPT57a3koKTtoSigpO0EyKCk7bHIoKTttZygpO0lUPUNzKCksS3A9e3BvaW50OmZKLGxpbmVTdGFydDpGSXQsbGluZUVuZDpCSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7S3AucG9pbnQ9R0l0LEtwLmxpbmVTdGFydD1MNGUsS3AubGluZUVuZD1rNGUsSVQucmVzZXQoKSxFdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0V1LnBvbHlnb25FbmQoKSxLcC5wb2ludD1mSixLcC5saW5lU3RhcnQ9Rkl0LEtwLmxpbmVFbmQ9Qkl0LENUPDA/KG1pPS0oRWk9MTgwKSxobD0tKHhjPTkwKSk6SVQ+Y2U/eGM9OTA6SVQ8LWNlJiYoaGw9LTkwKSxacFswXT1taSxacFsxXT1FaX19fSk7ZnVuY3Rpb24gZ0ooZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtrVChyKmFlKGUpLHIqSnQoZSksSnQodCkpfWZ1bmN0aW9uIGtUKGUsdCxyKXsrK0xULHREKz0oZS10RCkvTFQsZUQrPSh0LWVEKS9MVCxyRCs9KHItckQpL0xUfWZ1bmN0aW9uIGpJdCgpe1R1LnBvaW50PU40ZX1mdW5jdGlvbiBONGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksVHUucG9pbnQ9RDRlLGtUKFdhLFlhLGphKX1mdW5jdGlvbiBENGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KSxuPXIqYWUoZSksaT1yKkp0KGUpLG89SnQodCksYT1TbihScigoYT1ZYSpvLWphKmkpKmErKGE9amEqbi1XYSpvKSphKyhhPVdhKmktWWEqbikqYSksV2EqbitZYSppK2phKm8pO1FOKz1hLG5EKz1hKihXYSsoV2E9bikpLGlEKz1hKihZYSsoWWE9aSkpLG9EKz1hKihqYSsoamE9bykpLGtUKFdhLFlhLGphKX1mdW5jdGlvbiBYSXQoKXtUdS5wb2ludD1nSn1mdW5jdGlvbiBPNGUoKXtUdS5wb2ludD1GNGV9ZnVuY3Rpb24gejRlKCl7Wkl0KCRJdCxLSXQpLFR1LnBvaW50PWdKfWZ1bmN0aW9uIEY0ZShlLHQpeyRJdD1lLEtJdD10LGUqPXdlLHQqPXdlLFR1LnBvaW50PVpJdDt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksa1QoV2EsWWEsamEpfWZ1bmN0aW9uIFpJdChlLHQpe2UqPXdlLHQqPXdlO3ZhciByPWFlKHQpLG49ciphZShlKSxpPXIqSnQoZSksbz1KdCh0KSxhPVlhKm8tamEqaSxzPWphKm4tV2EqbyxsPVdhKmktWWEqbixjPVJyKGEqYStzKnMrbCpsKSx1PUpuKGMpLGg9YyYmLXUvYztwSis9aCphLGRKKz1oKnMsbUorPWgqbCxRTis9dSxuRCs9dSooV2ErKFdhPW4pKSxpRCs9dSooWWErKFlhPWkpKSxvRCs9dSooamErKGphPW8pKSxrVChXYSxZYSxqYSl9ZnVuY3Rpb24gSkl0KGUpe0xUPVFOPXREPWVEPXJEPW5EPWlEPW9EPXBKPWRKPW1KPTAsTW8oZSxUdSk7dmFyIHQ9cEoscj1kSixuPW1KLGk9dCp0K3IqcituKm47cmV0dXJuIGk8b0omJih0PW5ELHI9aUQsbj1vRCxRTjxjZSYmKHQ9dEQscj1lRCxuPXJEKSxpPXQqdCtyKnIrbipuLGk8b0opP1tOYU4sTmFOXTpbU24ocix0KSpVcixKbihuL1JyKGkpKSpVcl19dmFyIExULFFOLHRELGVELHJELG5ELGlELG9ELHBKLGRKLG1KLCRJdCxLSXQsV2EsWWEsamEsVHUsUUl0PU0oKCk9PntscigpO1hwKCk7bWcoKTtUdT17c3BoZXJlOnFyLHBvaW50OmdKLGxpbmVTdGFydDpqSXQsbGluZUVuZDpYSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7VHUubGluZVN0YXJ0PU80ZSxUdS5saW5lRW5kPXo0ZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1R1LmxpbmVTdGFydD1qSXQsVHUubGluZUVuZD1YSXR9fX0pO2Z1bmN0aW9uIHp5KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgdDl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBhRChlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9dmFyIF9KPU0oKCk9Pnt9KTtmdW5jdGlvbiB5SihlLHQpe3JldHVybltlPnJyP2UtQmk6ZTwtcnI/ZStCaTplLHRdfWZ1bmN0aW9uIFJUKGUsdCxyKXtyZXR1cm4oZSU9QmkpP3R8fHI/YUQocjl0KGUpLG45dCh0LHIpKTpyOXQoZSk6dHx8cj9uOXQodCxyKTp5Sn1mdW5jdGlvbiBlOXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrPWUsW3Q+cnI/dC1CaTp0PC1ycj90K0JpOnQscl19fWZ1bmN0aW9uIHI5dChlKXt2YXIgdD1lOXQoZSk7cmV0dXJuIHQuaW52ZXJ0PWU5dCgtZSksdH1mdW5jdGlvbiBuOXQoZSx0KXt2YXIgcj1hZShlKSxuPUp0KGUpLGk9YWUodCksbz1KdCh0KTtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZipyK3UqbjtyZXR1cm5bU24oaCppLXAqbyx1KnItZipuKSxKbihwKmkraCpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZippLWgqbztyZXR1cm5bU24oaCppK2Yqbyx1KnIrcCpuKSxKbihwKnItdSpuKV19LGF9ZnVuY3Rpb24gc0QoZSl7ZT1SVChlWzBdKndlLGVbMV0qd2UsZS5sZW5ndGg+Mj9lWzJdKndlOjApO2Z1bmN0aW9uIHQocil7cmV0dXJuIHI9ZShyWzBdKndlLHJbMV0qd2UpLHJbMF0qPVVyLHJbMV0qPVVyLHJ9cmV0dXJuIHQuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW52ZXJ0KHJbMF0qd2UsclsxXSp3ZSksclswXSo9VXIsclsxXSo9VXIscn0sdH12YXIgTlQ9TSgoKT0+e19KKCk7bHIoKTt5Si5pbnZlcnQ9eUp9KTtmdW5jdGlvbiB2SihlLHQscixuLGksbyl7aWYoISFyKXt2YXIgYT1hZSh0KSxzPUp0KHQpLGw9bipyO2k9PW51bGw/KGk9dCtuKkJpLG89dC1sLzIpOihpPWk5dChhLGkpLG89aTl0KGEsbyksKG4+MD9pPG86aT5vKSYmKGkrPW4qQmkpKTtmb3IodmFyIGMsdT1pO24+MD91Pm86dTxvO3UtPWwpYz1OeShbYSwtcyphZSh1KSwtcypKdCh1KV0pLGUucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gaTl0KGUsdCl7dD12Yyh0KSx0WzBdLT1lLER5KHQpO3ZhciByPSROKC10WzFdKTtyZXR1cm4oKC10WzJdPDA/LXI6cikrQmktY2UpJUJpfWZ1bmN0aW9uIG85dCgpe3ZhciBlPXp5KFswLDBdKSx0PXp5KDkwKSxyPXp5KDYpLG4saSxvPXtwb2ludDphfTtmdW5jdGlvbiBhKGwsYyl7bi5wdXNoKGw9aShsLGMpKSxsWzBdKj1VcixsWzFdKj1Vcn1mdW5jdGlvbiBzKCl7dmFyIGw9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSp3ZSx1PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKndlO3JldHVybiBuPVtdLGk9UlQoLWxbMF0qd2UsLWxbMV0qd2UsMCkuaW52ZXJ0LHZKKG8sYyx1LDEpLGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltuXX0sbj1pPW51bGwsbH1yZXR1cm4gcy5jZW50ZXI9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDp6eShbK2xbMF0sK2xbMV1dKSxzKTplfSxzLnJhZGl1cz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTp0fSxzLnByZWNpc2lvbj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTpyfSxzfXZhciB4Sj1NKCgpPT57QTIoKTt0OXQoKTtscigpO05UKCl9KTtmdW5jdGlvbiBsRCgpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbil7dC5wdXNoKFtyLG5dKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOnFyLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn19fXZhciBiSj1NKCgpPT57WHAoKX0pO2Z1bmN0aW9uIEkyKGUsdCl7cmV0dXJuIFllKGVbMF0tdFswXSk8Y2UmJlllKGVbMV0tdFsxXSk8Y2V9dmFyIHdKPU0oKCk9PntscigpfSk7ZnVuY3Rpb24gY0QoZSx0LHIsbil7dGhpcy54PWUsdGhpcy56PXQsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiB1RChlLHQscixuLGkpe3ZhciBvPVtdLGE9W10scyxsO2lmKGUuZm9yRWFjaChmdW5jdGlvbihkKXtpZighKChnPWQubGVuZ3RoLTEpPD0wKSl7dmFyIGcsXz1kWzBdLHk9ZFtnXSx4O2lmKEkyKF8seSkpe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufW8ucHVzaCh4PW5ldyBjRChfLGQsbnVsbCwhMCkpLGEucHVzaCh4Lm89bmV3IGNEKF8sbnVsbCx4LCExKSksby5wdXNoKHg9bmV3IGNEKHksZCxudWxsLCExKSksYS5wdXNoKHgubz1uZXcgY0QoeSxudWxsLHgsITApKX19KSwhIW8ubGVuZ3RoKXtmb3IoYS5zb3J0KHQpLGE5dChvKSxhOXQoYSkscz0wLGw9YS5sZW5ndGg7czxsOysrcylhW3NdLmU9cj0hcjtmb3IodmFyIGM9b1swXSx1LGg7Oyl7Zm9yKHZhciBmPWMscD0hMDtmLnY7KWlmKChmPWYubik9PT1jKXJldHVybjt1PWYueixpLmxpbmVTdGFydCgpO2Rve2lmKGYudj1mLm8udj0hMCxmLmUpe2lmKHApZm9yKHM9MCxsPXUubGVuZ3RoO3M8bDsrK3MpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4oZi54LGYubi54LDEsaSk7Zj1mLm59ZWxzZXtpZihwKWZvcih1PWYucC56LHM9dS5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5wLngsLTEsaSk7Zj1mLnB9Zj1mLm8sdT1mLnoscD0hcH13aGlsZSghZi52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIGE5dChlKXtpZighISh0PWUubGVuZ3RoKSl7Zm9yKHZhciB0LHI9MCxuPWVbMF0saTsrK3I8dDspbi5uPWk9ZVtyXSxpLnA9bixuPWk7bi5uPWk9ZVswXSxpLnA9bn19dmFyIFNKPU0oKCk9Pnt3SigpfSk7ZnVuY3Rpb24gaEQoZSx0KXt2YXIgcj10WzBdLG49dFsxXSxpPVtKdChyKSwtYWUociksMF0sbz0wLGE9MDtNSi5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsOysrcylpZighISh1PShjPWVbc10pLmxlbmd0aCkpZm9yKHZhciBjLHUsaD1jW3UtMV0sZj1oWzBdLHA9aFsxXS8yK1QyLGQ9SnQocCksZz1hZShwKSxfPTA7Xzx1OysrXyxmPXgsZD1TLGc9QyxoPXkpe3ZhciB5PWNbX10seD15WzBdLGI9eVsxXS8yK1QyLFM9SnQoYiksQz1hZShiKSxQPXgtZixrPVA+PTA/MTotMSxPPWsqUCxEPU8+cnIsQj1kKlM7aWYoTUouYWRkKFNuKEIqaypKdChPKSxnKkMrQiphZShPKSkpLG8rPUQ/UCtrKkJpOlAsRF5mPj1yXng+PXIpe3ZhciBJPSRwKHZjKGgpLHZjKHkpKTtEeShJKTt2YXIgTD0kcChpLEkpO0R5KEwpO3ZhciBSPShEXlA+PTA/LTE6MSkqSm4oTFsyXSk7KG4+Unx8bj09PVImJihJWzBdfHxJWzFdKSkmJihhKz1EXlA+PTA/MTotMSl9fXJldHVybihvPC1jZXx8bzxjZSYmTUo8LWNlKV5hJjF9dmFyIE1KLEVKPU0oKCk9PntreSgpO0EyKCk7bHIoKTtNSj1DcygpfSk7ZnVuY3Rpb24gX2coZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEZ5PU0oKCk9Pnt9KTtmdW5jdGlvbiBUSihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1CNGUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBCNGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9nKGUodCkscil9fXZhciBDSj1NKCgpPT57RnkoKX0pO3ZhciBzOXQsSDRlLFY0ZSxBSj1NKCgpPT57RnkoKTtDSigpO3M5dD1USihfZyksSDRlPXM5dC5yaWdodCxWNGU9czl0LmxlZnR9KTt2YXIgUEo9TSgoKT0+e30pO3ZhciBsOXQ9TSgoKT0+e1BKKCl9KTt2YXIgYzl0PU0oKCk9Pnt9KTt2YXIgTDI9TSgoKT0+e30pO3ZhciBJSj1NKCgpPT57TDIoKX0pO3ZhciBMSj1NKCgpPT57SUooKX0pO3ZhciBrSj1NKCgpPT57fSk7dmFyIHU5dCxxNGUsRzRlLFJKPU0oKCk9Pnt1OXQ9QXJyYXkucHJvdG90eXBlLHE0ZT11OXQuc2xpY2UsRzRlPXU5dC5tYXB9KTt2YXIgaDl0PU0oKCk9Pnt9KTt2YXIgZjl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKcChlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgTko9TSgoKT0+e30pO3ZhciBiMG4sdzBuLFMwbixESj1NKCgpPT57YjBuPU1hdGguc3FydCg1MCksdzBuPU1hdGguc3FydCgxMCksUzBuPU1hdGguc3FydCgyKX0pO3ZhciBPSj1NKCgpPT57fSk7dmFyIHA5dD1NKCgpPT57UkooKTtBSigpO2g5dCgpO2tKKCk7Zjl0KCk7TkooKTtESigpO09KKCl9KTt2YXIgcEQ9TSgoKT0+e0wyKCl9KTt2YXIgbTl0PU0oKCk9PntSSigpO0Z5KCk7TDIoKTtwRCgpfSk7dmFyIGc5dD1NKCgpPT57TEooKX0pO3ZhciBfOXQ9TSgoKT0+e30pO3ZhciB5OXQ9TSgoKT0+e0wyKCl9KTt2YXIgdjl0PU0oKCk9PntGeSgpO0wyKCk7cEQoKX0pO2Z1bmN0aW9uIERUKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyLG49LTEsaT0wLG8sYTsrK248dDspaSs9ZVtuXS5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KGkpOy0tdD49MDspZm9yKGE9ZVt0XSxyPWEubGVuZ3RoOy0tcj49MDspb1stLWldPWFbcl07cmV0dXJuIG99dmFyIHg5dD1NKCgpPT57fSk7dmFyIHpKPU0oKCk9Pnt9KTt2YXIgYjl0PU0oKCk9Pnt9KTt2YXIgdzl0PU0oKCk9PntGeSgpfSk7dmFyIFM5dD1NKCgpPT57fSk7dmFyIE05dD1NKCgpPT57fSk7dmFyIEZKPU0oKCk9Pnt6SigpfSk7dmFyIEU5dD1NKCgpPT57RkooKX0pO3ZhciBkRD1NKCgpPT57QUooKTtGeSgpO0NKKCk7bDl0KCk7Yzl0KCk7TEooKTtrSigpO3A5dCgpO205dCgpO2c5dCgpO09KKCk7Xzl0KCk7eTl0KCk7djl0KCk7eDl0KCk7ekooKTtQSigpO2I5dCgpO3BEKCk7TkooKTt3OXQoKTtTOXQoKTtNOXQoKTtESigpO0ZKKCk7SUooKTtFOXQoKX0pO2Z1bmN0aW9uIG1EKGUsdCxyLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz10KGkpLGE9bEQoKSxzPXQoYSksbD0hMSxjLHUsaCxmPXtwb2ludDpwLGxpbmVTdGFydDpnLGxpbmVFbmQ6Xyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXksZi5saW5lU3RhcnQ9eCxmLmxpbmVFbmQ9Yix1PVtdLGM9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PXAsZi5saW5lU3RhcnQ9ZyxmLmxpbmVFbmQ9Xyx1PURUKHUpO3ZhciBTPWhEKGMsbik7dS5sZW5ndGg/KGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLHVEKHUsUTRlLFMscixpKSk6UyYmKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSksbCYmKGkucG9seWdvbkVuZCgpLGw9ITEpLHU9Yz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHAoUyxDKXtlKFMsQykmJmkucG9pbnQoUyxDKX1mdW5jdGlvbiBkKFMsQyl7by5wb2ludChTLEMpfWZ1bmN0aW9uIGcoKXtmLnBvaW50PWQsby5saW5lU3RhcnQoKX1mdW5jdGlvbiBfKCl7Zi5wb2ludD1wLG8ubGluZUVuZCgpfWZ1bmN0aW9uIHkoUyxDKXtoLnB1c2goW1MsQ10pLHMucG9pbnQoUyxDKX1mdW5jdGlvbiB4KCl7cy5saW5lU3RhcnQoKSxoPVtdfWZ1bmN0aW9uIGIoKXt5KGhbMF1bMF0saFswXVsxXSkscy5saW5lRW5kKCk7dmFyIFM9cy5jbGVhbigpLEM9YS5yZXN1bHQoKSxQLGs9Qy5sZW5ndGgsTyxELEI7aWYoaC5wb3AoKSxjLnB1c2goaCksaD1udWxsLCEhayl7aWYoUyYxKXtpZihEPUNbMF0sKE89RC5sZW5ndGgtMSk+MCl7Zm9yKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCksUD0wO1A8TzsrK1ApaS5wb2ludCgoQj1EW1BdKVswXSxCWzFdKTtpLmxpbmVFbmQoKX1yZXR1cm59az4xJiZTJjImJkMucHVzaChDLnBvcCgpLmNvbmNhdChDLnNoaWZ0KCkpKSx1LnB1c2goQy5maWx0ZXIoSjRlKSl9fXJldHVybiBmfX1mdW5jdGlvbiBKNGUoZSl7cmV0dXJuIGUubGVuZ3RoPjF9ZnVuY3Rpb24gUTRlKGUsdCl7cmV0dXJuKChlPWUueClbMF08MD9lWzFdLUJuLWNlOkJuLWVbMV0pLSgodD10LngpWzBdPDA/dFsxXS1Cbi1jZTpCbi10WzFdKX12YXIgQko9TSgoKT0+e2JKKCk7U0ooKTtscigpO0VKKCk7ZEQoKX0pO2Z1bmN0aW9uIHRQZShlKXt2YXIgdD1OYU4scj1OYU4sbj1OYU4saTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKSxpPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHM9bz4wP3JyOi1ycixsPVllKG8tdCk7WWUobC1ycik8Y2U/KGUucG9pbnQodCxyPShyK2EpLzI+MD9CbjotQm4pLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxlLnBvaW50KG8sciksaT0wKTpuIT09cyYmbD49cnImJihZZSh0LW4pPGNlJiYodC09bipjZSksWWUoby1zKTxjZSYmKG8tPXMqY2UpLHI9ZVBlKHQscixvLGEpLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxpPTApLGUucG9pbnQodD1vLHI9YSksbj1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksdD1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1pfX19ZnVuY3Rpb24gZVBlKGUsdCxyLG4pe3ZhciBpLG8sYT1KdChlLXIpO3JldHVybiBZZShhKT5jZT95YygoSnQodCkqKG89YWUobikpKkp0KHIpLUp0KG4pKihpPWFlKHQpKSpKdChlKSkvKGkqbyphKSk6KHQrbikvMn1mdW5jdGlvbiByUGUoZSx0LHIsbil7dmFyIGk7aWYoZT09bnVsbClpPXIqQm4sbi5wb2ludCgtcnIsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQocnIsaSksbi5wb2ludChyciwwKSxuLnBvaW50KHJyLC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLXJyLC1pKSxuLnBvaW50KC1yciwwKSxuLnBvaW50KC1ycixpKTtlbHNlIGlmKFllKGVbMF0tdFswXSk+Y2Upe3ZhciBvPWVbMF08dFswXT9ycjotcnI7aT1yKm8vMixuLnBvaW50KC1vLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KG8saSl9ZWxzZSBuLnBvaW50KHRbMF0sdFsxXSl9dmFyIE9ULEhKPU0oKCk9PntCSigpO2xyKCk7T1Q9bUQoZnVuY3Rpb24oKXtyZXR1cm4hMH0sdFBlLHJQZSxbLXJyLC1Cbl0pfSk7ZnVuY3Rpb24gZ0QoZSl7dmFyIHQ9YWUoZSkscj02KndlLG49dD4wLGk9WWUodCk+Y2U7ZnVuY3Rpb24gbyh1LGgsZixwKXt2SihwLGUscixmLHUsaCl9ZnVuY3Rpb24gYSh1LGgpe3JldHVybiBhZSh1KSphZShoKT50fWZ1bmN0aW9uIHModSl7dmFyIGgsZixwLGQsZztyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZD1wPSExLGc9MX0scG9pbnQ6ZnVuY3Rpb24oXyx5KXt2YXIgeD1bXyx5XSxiLFM9YShfLHkpLEM9bj9TPzA6YyhfLHkpOlM/YyhfKyhfPDA/cnI6LXJyKSx5KTowO2lmKCFoJiYoZD1wPVMpJiZ1LmxpbmVTdGFydCgpLFMhPT1wJiYoYj1sKGgseCksKCFifHxJMihoLGIpfHxJMih4LGIpKSYmKHhbMF0rPWNlLHhbMV0rPWNlLFM9YSh4WzBdLHhbMV0pKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0pLHUubGluZUVuZCgpKSxoPWI7ZWxzZSBpZihpJiZoJiZuXlMpe3ZhciBQOyEoQyZmKSYmKFA9bCh4LGgsITApKSYmKGc9MCxuPyh1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdKSx1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCkpOih1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCksdS5saW5lU3RhcnQoKSx1LnBvaW50KFBbMF1bMF0sUFswXVsxXSkpKX1TJiYoIWh8fCFJMihoLHgpKSYmdS5wb2ludCh4WzBdLHhbMV0pLGg9eCxwPVMsZj1DfSxsaW5lRW5kOmZ1bmN0aW9uKCl7cCYmdS5saW5lRW5kKCksaD1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBnfChkJiZwKTw8MX19fWZ1bmN0aW9uIGwodSxoLGYpe3ZhciBwPXZjKHUpLGQ9dmMoaCksZz1bMSwwLDBdLF89JHAocCxkKSx5PUFUKF8sXykseD1fWzBdLGI9eS14Kng7aWYoIWIpcmV0dXJuIWYmJnU7dmFyIFM9dCp5L2IsQz0tdCp4L2IsUD0kcChnLF8pLGs9UFQoZyxTKSxPPVBUKF8sQyk7Sk4oayxPKTt2YXIgRD1QLEI9QVQoayxEKSxJPUFUKEQsRCksTD1CKkItSSooQVQoayxrKS0xKTtpZighKEw8MCkpe3ZhciBSPVJyKEwpLEY9UFQoRCwoLUItUikvSSk7aWYoSk4oRixrKSxGPU55KEYpLCFmKXJldHVybiBGO3ZhciB6PXVbMF0sVT1oWzBdLFc9dVsxXSxaPWhbMV0scnQ7VTx6JiYocnQ9eix6PVUsVT1ydCk7dmFyIG90PVUteixzdD1ZZShvdC1ycik8Y2UsU3Q9c3R8fG90PGNlO2lmKCFzdCYmWjxXJiYocnQ9VyxXPVosWj1ydCksU3Q/c3Q/VytaPjBeRlsxXTwoWWUoRlswXS16KTxjZT9XOlopOlc8PUZbMV0mJkZbMV08PVo6b3Q+cnJeKHo8PUZbMF0mJkZbMF08PVUpKXt2YXIgYnQ9UFQoRCwoLUIrUikvSSk7cmV0dXJuIEpOKGJ0LGspLFtGLE55KGJ0KV19fX1mdW5jdGlvbiBjKHUsaCl7dmFyIGY9bj9lOnJyLWUscD0wO3JldHVybiB1PC1mP3B8PTE6dT5mJiYocHw9MiksaDwtZj9wfD00Omg+ZiYmKHB8PTgpLHB9cmV0dXJuIG1EKGEscyxvLG4/WzAsLWVdOlstcnIsZS1ycl0pfXZhciBWSj1NKCgpPT57QTIoKTt4SigpO2xyKCk7d0ooKTtCSigpfSk7ZnVuY3Rpb24gVDl0KGUsdCxyLG4saSxvKXt2YXIgYT1lWzBdLHM9ZVsxXSxsPXRbMF0sYz10WzFdLHU9MCxoPTEsZj1sLWEscD1jLXMsZDtpZihkPXItYSwhKCFmJiZkPjApKXtpZihkLz1mLGY8MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWVsc2UgaWYoZj4wKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9aWYoZD1pLWEsISghZiYmZDwwKSl7aWYoZC89ZixmPDApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1lbHNlIGlmKGY+MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWlmKGQ9bi1zLCEoIXAmJmQ+MCkpe2lmKGQvPXAscDwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihwPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPW8tcywhKCFwJiZkPDApKXtpZihkLz1wLHA8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYocD4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9cmV0dXJuIHU+MCYmKGVbMF09YSt1KmYsZVsxXT1zK3UqcCksaDwxJiYodFswXT1hK2gqZix0WzFdPXMraCpwKSwhMH19fX19dmFyIEM5dD1NKCgpPT57fSk7ZnVuY3Rpb24gUXAoZSx0LHIsbil7ZnVuY3Rpb24gaShjLHUpe3JldHVybiBlPD1jJiZjPD1yJiZ0PD11JiZ1PD1ufWZ1bmN0aW9uIG8oYyx1LGgsZil7dmFyIHA9MCxkPTA7aWYoYz09bnVsbHx8KHA9YShjLGgpKSE9PShkPWEodSxoKSl8fGwoYyx1KTwwXmg+MClkbyBmLnBvaW50KHA9PT0wfHxwPT09Mz9lOnIscD4xP246dCk7d2hpbGUoKHA9KHAraCs0KSU0KSE9PWQpO2Vsc2UgZi5wb2ludCh1WzBdLHVbMV0pfWZ1bmN0aW9uIGEoYyx1KXtyZXR1cm4gWWUoY1swXS1lKTxjZT91PjA/MDozOlllKGNbMF0tcik8Y2U/dT4wPzI6MTpZZShjWzFdLXQpPGNlP3U+MD8xOjA6dT4wPzM6Mn1mdW5jdGlvbiBzKGMsdSl7cmV0dXJuIGwoYy54LHUueCl9ZnVuY3Rpb24gbChjLHUpe3ZhciBoPWEoYywxKSxmPWEodSwxKTtyZXR1cm4gaCE9PWY/aC1mOmg9PT0wP3VbMV0tY1sxXTpoPT09MT9jWzBdLXVbMF06aD09PTI/Y1sxXS11WzFdOnVbMF0tY1swXX1yZXR1cm4gZnVuY3Rpb24oYyl7dmFyIHU9YyxoPWxEKCksZixwLGQsZyxfLHkseCxiLFMsQyxQLGs9e3BvaW50Ok8sbGluZVN0YXJ0OkwsbGluZUVuZDpSLHBvbHlnb25TdGFydDpCLHBvbHlnb25FbmQ6SX07ZnVuY3Rpb24gTyh6LFUpe2koeixVKSYmdS5wb2ludCh6LFUpfWZ1bmN0aW9uIEQoKXtmb3IodmFyIHo9MCxVPTAsVz1wLmxlbmd0aDtVPFc7KytVKWZvcih2YXIgWj1wW1VdLHJ0PTEsb3Q9Wi5sZW5ndGgsc3Q9WlswXSxTdCxidCxNdD1zdFswXSxsdD1zdFsxXTtydDxvdDsrK3J0KVN0PU10LGJ0PWx0LHN0PVpbcnRdLE10PXN0WzBdLGx0PXN0WzFdLGJ0PD1uP2x0Pm4mJihNdC1TdCkqKG4tYnQpPihsdC1idCkqKGUtU3QpJiYrK3o6bHQ8PW4mJihNdC1TdCkqKG4tYnQpPChsdC1idCkqKGUtU3QpJiYtLXo7cmV0dXJuIHp9ZnVuY3Rpb24gQigpe3U9aCxmPVtdLHA9W10sUD0hMH1mdW5jdGlvbiBJKCl7dmFyIHo9RCgpLFU9UCYmeixXPShmPURUKGYpKS5sZW5ndGg7KFV8fFcpJiYoYy5wb2x5Z29uU3RhcnQoKSxVJiYoYy5saW5lU3RhcnQoKSxvKG51bGwsbnVsbCwxLGMpLGMubGluZUVuZCgpKSxXJiZ1RChmLHMseixvLGMpLGMucG9seWdvbkVuZCgpKSx1PWMsZj1wPWQ9bnVsbH1mdW5jdGlvbiBMKCl7ay5wb2ludD1GLHAmJnAucHVzaChkPVtdKSxDPSEwLFM9ITEseD1iPU5hTn1mdW5jdGlvbiBSKCl7ZiYmKEYoZyxfKSx5JiZTJiZoLnJlam9pbigpLGYucHVzaChoLnJlc3VsdCgpKSksay5wb2ludD1PLFMmJnUubGluZUVuZCgpfWZ1bmN0aW9uIEYoeixVKXt2YXIgVz1pKHosVSk7aWYocCYmZC5wdXNoKFt6LFVdKSxDKWc9eixfPVUseT1XLEM9ITEsVyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpKTtlbHNlIGlmKFcmJlMpdS5wb2ludCh6LFUpO2Vsc2V7dmFyIFo9W3g9TWF0aC5tYXgoX0QsTWF0aC5taW4oelQseCkpLGI9TWF0aC5tYXgoX0QsTWF0aC5taW4oelQsYikpXSxydD1bej1NYXRoLm1heChfRCxNYXRoLm1pbih6VCx6KSksVT1NYXRoLm1heChfRCxNYXRoLm1pbih6VCxVKSldO1Q5dChaLHJ0LGUsdCxyLG4pPyhTfHwodS5saW5lU3RhcnQoKSx1LnBvaW50KFpbMF0sWlsxXSkpLHUucG9pbnQocnRbMF0scnRbMV0pLFd8fHUubGluZUVuZCgpLFA9ITEpOlcmJih1LmxpbmVTdGFydCgpLHUucG9pbnQoeixVKSxQPSExKX14PXosYj1VLFM9V31yZXR1cm4ga319dmFyIHpULF9ELEZUPU0oKCk9PntscigpO2JKKCk7Qzl0KCk7U0ooKTtkRCgpO3pUPTFlOSxfRD0telR9KTtmdW5jdGlvbiBBOXQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9UXAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgUDl0PU0oKCk9PntGVCgpfSk7ZnVuY3Rpb24gblBlKCl7azIucG9pbnQ9b1BlLGsyLmxpbmVFbmQ9aVBlfWZ1bmN0aW9uIGlQZSgpe2syLnBvaW50PWsyLmxpbmVFbmQ9cXJ9ZnVuY3Rpb24gb1BlKGUsdCl7ZSo9d2UsdCo9d2UscUo9ZSx5RD1KdCh0KSx2RD1hZSh0KSxrMi5wb2ludD1hUGV9ZnVuY3Rpb24gYVBlKGUsdCl7ZSo9d2UsdCo9d2U7dmFyIHI9SnQodCksbj1hZSh0KSxpPVllKGUtcUopLG89YWUoaSksYT1KdChpKSxzPW4qYSxsPXZEKnIteUQqbipvLGM9eUQqcit2RCpuKm87VUouYWRkKFNuKFJyKHMqcytsKmwpLGMpKSxxSj1lLHlEPXIsdkQ9bn1mdW5jdGlvbiB4RChlKXtyZXR1cm4gVUoucmVzZXQoKSxNbyhlLGsyKSwrVUp9dmFyIFVKLHFKLHlELHZELGsyLEdKPU0oKCk9PntreSgpO2xyKCk7WHAoKTttZygpO1VKPUNzKCksazI9e3NwaGVyZTpxcixwb2ludDpxcixsaW5lU3RhcnQ6blBlLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OnFyLHBvbHlnb25FbmQ6cXJ9fSk7ZnVuY3Rpb24gQnkoZSx0KXtyZXR1cm4gV0pbMF09ZSxXSlsxXT10LHhEKHNQZSl9dmFyIFdKLHNQZSxZSj1NKCgpPT57R0ooKTtXSj1bbnVsbCxudWxsXSxzUGU9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOldKfX0pO2Z1bmN0aW9uIGJEKGUsdCl7cmV0dXJuIGUmJkw5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP0w5dFtlLnR5cGVdKGUsdCk6ITF9ZnVuY3Rpb24gazl0KGUsdCl7cmV0dXJuIEJ5KGUsdCk9PT0wfWZ1bmN0aW9uIFI5dChlLHQpe3ZhciByPUJ5KGVbMF0sZVsxXSksbj1CeShlWzBdLHQpLGk9QnkodCxlWzFdKTtyZXR1cm4gbitpPD1yK2NlfWZ1bmN0aW9uIE45dChlLHQpe3JldHVybiEhaEQoZS5tYXAobFBlKSxEOXQodCkpfWZ1bmN0aW9uIGxQZShlKXtyZXR1cm4gZT1lLm1hcChEOXQpLGUucG9wKCksZX1mdW5jdGlvbiBEOXQoZSl7cmV0dXJuW2VbMF0qd2UsZVsxXSp3ZV19ZnVuY3Rpb24gTzl0KGUsdCl7cmV0dXJuKGUmJkk5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP0k5dFtlLnR5cGVdOmJEKShlLHQpfXZhciBJOXQsTDl0LHo5dD1NKCgpPT57RUooKTtZSigpO2xyKCk7STl0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGJEKGUuZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihiRChyW25dLmdlb21ldHJ5LHQpKXJldHVybiEwO3JldHVybiExfX0sTDl0PXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gazl0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKGs5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFI5dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFI5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE45dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKE45dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5nZW9tZXRyaWVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoYkQocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX19fSk7ZnVuY3Rpb24gRjl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gQjl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gd0QoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIEpwKFRUKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSnAoVFQocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSnAoVFQodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJXUpPmNlfSkubWFwKGYpKS5jb25jYXQoSnAoVFQoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJWgpPmNlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPUY5dChvLGksOTApLHA9Qjl0KHQsZSxfKSxkPUY5dChzLGEsOTApLGc9Qjl0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArY2VdLFsxODAsOTAtY2VdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1jZV0sWzE4MCw4MCtjZV1dKX1mdW5jdGlvbiBIOXQoKXtyZXR1cm4gd0QoKSgpfXZhciBWOXQ9TSgoKT0+e2REKCk7bHIoKX0pO2Z1bmN0aW9uIFU5dChlLHQpe3ZhciByPWVbMF0qd2Usbj1lWzFdKndlLGk9dFswXSp3ZSxvPXRbMV0qd2UsYT1hZShuKSxzPUp0KG4pLGw9YWUobyksYz1KdChvKSx1PWEqYWUociksaD1hKkp0KHIpLGY9bCphZShpKSxwPWwqSnQoaSksZD0yKkpuKFJyKGFKKG8tbikrYSpsKmFKKGktcikpKSxnPUp0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1KdCh5Kj1kKS9nLGI9SnQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltTbihDLFMpKlVyLFNuKFAsUnIoUypTK0MqQykpKlVyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcipVcixuKlVyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffXZhciBxOXQ9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBuZihlKXtyZXR1cm4gZX12YXIgU0Q9TSgoKT0+e30pO2Z1bmN0aW9uIGNQZSgpe3lnLnBvaW50PXVQZX1mdW5jdGlvbiB1UGUoZSx0KXt5Zy5wb2ludD1ZOXQsRzl0PSRKPWUsVzl0PUtKPXR9ZnVuY3Rpb24gWTl0KGUsdCl7WEouYWRkKEtKKmUtJEoqdCksJEo9ZSxLSj10fWZ1bmN0aW9uIGhQZSgpe1k5dChHOXQsVzl0KX12YXIgakosWEosRzl0LFc5dCwkSixLSix5ZyxaSixqOXQ9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO2pKPUNzKCksWEo9Q3MoKSx5Zz17cG9pbnQ6cXIsbGluZVN0YXJ0OnFyLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eWcubGluZVN0YXJ0PWNQZSx5Zy5saW5lRW5kPWhQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3lnLmxpbmVTdGFydD15Zy5saW5lRW5kPXlnLnBvaW50PXFyLGpKLmFkZChZZShYSikpLFhKLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPWpKLzI7cmV0dXJuIGpKLnJlc2V0KCksZX19O1pKPXlnfSk7ZnVuY3Rpb24gcFBlKGUsdCl7ZTxSMiYmKFIyPWUpLGU+QlQmJihCVD1lKSx0PE1EJiYoTUQ9dCksdD5FRCYmKEVEPXQpfXZhciBSMixNRCxCVCxFRCxmUGUsTjIsSko9TSgoKT0+e1hwKCk7UjI9MS8wLE1EPVIyLEJUPS1SMixFRD1CVCxmUGU9e3BvaW50OnBQZSxsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6cXIscG9seWdvbkVuZDpxcixyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1bW1IyLE1EXSxbQlQsRURdXTtyZXR1cm4gQlQ9RUQ9LShNRD1SMj0xLzApLGV9fTtOMj1mUGV9KTtmdW5jdGlvbiBIeShlLHQpe1FKKz1lLHRRKz10LCsrSFR9ZnVuY3Rpb24gWDl0KCl7Q3UucG9pbnQ9ZFBlfWZ1bmN0aW9uIGRQZShlLHQpe0N1LnBvaW50PW1QZSxIeShvZj1lLGFmPXQpfWZ1bmN0aW9uIG1QZShlLHQpe3ZhciByPWUtb2Ysbj10LWFmLGk9UnIocipyK24qbik7VEQrPWkqKG9mK2UpLzIsQ0QrPWkqKGFmK3QpLzIsRDIrPWksSHkob2Y9ZSxhZj10KX1mdW5jdGlvbiAkOXQoKXtDdS5wb2ludD1IeX1mdW5jdGlvbiBnUGUoKXtDdS5wb2ludD15UGV9ZnVuY3Rpb24gX1BlKCl7Sjl0KEs5dCxaOXQpfWZ1bmN0aW9uIHlQZShlLHQpe0N1LnBvaW50PUo5dCxIeShLOXQ9b2Y9ZSxaOXQ9YWY9dCl9ZnVuY3Rpb24gSjl0KGUsdCl7dmFyIHI9ZS1vZixuPXQtYWYsaT1ScihyKnIrbipuKTtURCs9aSoob2YrZSkvMixDRCs9aSooYWYrdCkvMixEMis9aSxpPWFmKmUtb2YqdCxlUSs9aSoob2YrZSksclErPWkqKGFmK3QpLFZUKz1pKjMsSHkob2Y9ZSxhZj10KX12YXIgUUosdFEsSFQsVEQsQ0QsRDIsZVEsclEsVlQsSzl0LFo5dCxvZixhZixDdSxuUSxROXQ9TSgoKT0+e2xyKCk7UUo9MCx0UT0wLEhUPTAsVEQ9MCxDRD0wLEQyPTAsZVE9MCxyUT0wLFZUPTAsQ3U9e3BvaW50Okh5LGxpbmVTdGFydDpYOXQsbGluZUVuZDokOXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Q3UubGluZVN0YXJ0PWdQZSxDdS5saW5lRW5kPV9QZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0N1LnBvaW50PUh5LEN1LmxpbmVTdGFydD1YOXQsQ3UubGluZUVuZD0kOXR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVZUP1tlUS9WVCxyUS9WVF06RDI/W1REL0QyLENEL0QyXTpIVD9bUUovSFQsdFEvSFRdOltOYU4sTmFOXTtyZXR1cm4gUUo9dFE9SFQ9VEQ9Q0Q9RDI9ZVE9clE9VlQ9MCxlfX07blE9Q3V9KTtmdW5jdGlvbiBBRChlKXt0aGlzLl9jb250ZXh0PWV9dmFyIHRMdD1NKCgpPT57bHIoKTtYcCgpO0FELnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JhZGl1cz1lLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT09PTAmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NvbnRleHQubW92ZVRvKGUrdGhpcy5fcmFkaXVzLHQpLHRoaXMuX2NvbnRleHQuYXJjKGUsdCx0aGlzLl9yYWRpdXMsMCxCaSk7YnJlYWt9fX0scmVzdWx0OnFyfX0pO2Z1bmN0aW9uIHZQZShlLHQpe1BELnBvaW50PW5MdCxlTHQ9VVQ9ZSxyTHQ9cVQ9dH1mdW5jdGlvbiBuTHQoZSx0KXtVVC09ZSxxVC09dCxvUS5hZGQoUnIoVVQqVVQrcVQqcVQpKSxVVD1lLHFUPXR9dmFyIG9RLGlRLGVMdCxyTHQsVVQscVQsUEQsYVEsaUx0PU0oKCk9PntreSgpO2xyKCk7WHAoKTtvUT1DcygpLFBEPXtwb2ludDpxcixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtQRC5wb2ludD12UGV9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtpUSYmbkx0KGVMdCxyTHQpLFBELnBvaW50PXFyfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtpUT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe2lRPW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPStvUTtyZXR1cm4gb1EucmVzZXQoKSxlfX07YVE9UER9KTtmdW5jdGlvbiBJRCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiBvTHQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9dmFyIGFMdD1NKCgpPT57SUQucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOm9MdCg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybihlPStlKSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz1lLHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9zdHJpbmcucHVzaCgiTCIsZSwiLCIsdCk7YnJlYWt9ZGVmYXVsdDp7dGhpcy5fY2lyY2xlPT1udWxsJiYodGhpcy5fY2lyY2xlPW9MdCh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsZSwiLCIsdCx0aGlzLl9jaXJjbGUpO2JyZWFrfX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciBlPXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLGV9ZWxzZSByZXR1cm4gbnVsbH19fSk7ZnVuY3Rpb24gc0x0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxNbyhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihaSikpLFpKLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihhUSkpLGFRLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gTW8oYSxuKE4yKSksTjIucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihuUSkpLG5RLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLG5mKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgSUQpOm5ldyBBRCh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfXZhciBsTHQ9TSgoKT0+e1NEKCk7bWcoKTtqOXQoKTtKSigpO1E5dCgpO3RMdCgpO2lMdCgpO2FMdCgpfSk7ZnVuY3Rpb24gY0x0KGUpe3JldHVybntzdHJlYW06dmcoZSl9fWZ1bmN0aW9uIHZnKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1uZXcgc1E7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByLnN0cmVhbT10LHJ9fWZ1bmN0aW9uIHNRKCl7fXZhciBHVD1NKCgpPT57c1EucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzUSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUsdCl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fX0pO2Z1bmN0aW9uIGxRKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksTW8ocixlLnN0cmVhbShOMikpLHQoTjIucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIFZ5KGUsdCxyKXtyZXR1cm4gbFEoZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gTzIoZSx0LHIpe3JldHVybiBWeShlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiB6MihlLHQscil7cmV0dXJuIGxRKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gRjIoZSx0LHIpe3JldHVybiBsUShlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBMRD1NKCgpPT57bWcoKTtKSigpfSk7ZnVuY3Rpb24gY1EoZSx0KXtyZXR1cm4rdD93UGUoZSx0KTpiUGUoZSl9ZnVuY3Rpb24gYlBlKGUpe3JldHVybiB2Zyh7cG9pbnQ6ZnVuY3Rpb24odCxyKXt0PWUodCxyKSx0aGlzLnN0cmVhbS5wb2ludCh0WzBdLHRbMV0pfX0pfWZ1bmN0aW9uIHdQZShlLHQpe2Z1bmN0aW9uIHIobixpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfKXt2YXIgeT1jLW4seD11LWksYj15KnkreCp4O2lmKGI+NCp0JiZnLS0pe3ZhciBTPWErZixDPXMrcCxQPWwrZCxrPVJyKFMqUytDKkMrUCpQKSxPPUpuKFAvPWspLEQ9WWUoWWUoUCktMSk8Y2V8fFllKG8taCk8Y2U/KG8raCkvMjpTbihDLFMpLEI9ZShELE8pLEk9QlswXSxMPUJbMV0sUj1JLW4sRj1MLWksej14KlIteSpGOyh6KnovYj50fHxZZSgoeSpSK3gqRikvYi0uNSk+LjN8fGEqZitzKnArbCpkPHhQZSkmJihyKG4saSxvLGEscyxsLEksTCxELFMvPWssQy89ayxQLGcsXyksXy5wb2ludChJLEwpLHIoSSxMLEQsUyxDLFAsYyx1LGgsZixwLGQsZyxfKSl9fXJldHVybiBmdW5jdGlvbihuKXt2YXIgaSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXz17cG9pbnQ6eSxsaW5lU3RhcnQ6eCxsaW5lRW5kOlMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKSxfLmxpbmVTdGFydD1DfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCksXy5saW5lU3RhcnQ9eH19O2Z1bmN0aW9uIHkoTyxEKXtPPWUoTyxEKSxuLnBvaW50KE9bMF0sT1sxXSl9ZnVuY3Rpb24geCgpe2g9TmFOLF8ucG9pbnQ9YixuLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGIoTyxEKXt2YXIgQj12YyhbTyxEXSksST1lKE8sRCk7cihoLGYsdSxwLGQsZyxoPUlbMF0sZj1JWzFdLHU9TyxwPUJbMF0sZD1CWzFdLGc9QlsyXSx1THQsbiksbi5wb2ludChoLGYpfWZ1bmN0aW9uIFMoKXtfLnBvaW50PXksbi5saW5lRW5kKCl9ZnVuY3Rpb24gQygpe3goKSxfLnBvaW50PVAsXy5saW5lRW5kPWt9ZnVuY3Rpb24gUChPLEQpe2IoaT1PLEQpLG89aCxhPWYscz1wLGw9ZCxjPWcsXy5wb2ludD1ifWZ1bmN0aW9uIGsoKXtyKGgsZix1LHAsZCxnLG8sYSxpLHMsbCxjLHVMdCxuKSxfLmxpbmVFbmQ9UyxTKCl9cmV0dXJuIF99fXZhciB1THQseFBlLGhMdD1NKCgpPT57QTIoKTtscigpO0dUKCk7dUx0PTE2LHhQZT1hZSgzMCp3ZSl9KTtmdW5jdGlvbiBNUGUoZSl7cmV0dXJuIHZnKHtwb2ludDpmdW5jdGlvbih0LHIpe3ZhciBuPWUodCxyKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX1mdW5jdGlvbiBlbyhlKXtyZXR1cm4gV1QoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKCl9ZnVuY3Rpb24gV1QoZSl7dmFyIHQscj0xNTAsbj00ODAsaT0yNTAsbyxhLHM9MCxsPTAsYz0wLHU9MCxoPTAsZixwLGQ9bnVsbCxnPU9ULF89bnVsbCx5LHgsYixTPW5mLEM9LjUsUD1jUShJLEMpLGssTztmdW5jdGlvbiBEKEYpe3JldHVybiBGPXAoRlswXSp3ZSxGWzFdKndlKSxbRlswXSpyK28sYS1GWzFdKnJdfWZ1bmN0aW9uIEIoRil7cmV0dXJuIEY9cC5pbnZlcnQoKEZbMF0tbykvciwoYS1GWzFdKS9yKSxGJiZbRlswXSpVcixGWzFdKlVyXX1mdW5jdGlvbiBJKEYseil7cmV0dXJuIEY9dChGLHopLFtGWzBdKnIrbyxhLUZbMV0qcl19RC5zdHJlYW09ZnVuY3Rpb24oRil7cmV0dXJuIGsmJk89PT1GP2s6az1TUGUoTVBlKGYpKGcoUChTKE89RikpKSkpfSxELnByZWNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9RixkPXZvaWQgMCxSKCkpOmd9LEQucG9zdGNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9RixfPXk9eD1iPW51bGwsUigpKTpTfSxELmNsaXBBbmdsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rRj9nRChkPUYqd2UpOihkPW51bGwsT1QpLFIoKSk6ZCpVcn0sRC5jbGlwRXh0ZW50PWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPUY9PW51bGw/KF89eT14PWI9bnVsbCxuZik6UXAoXz0rRlswXVswXSx5PStGWzBdWzFdLHg9K0ZbMV1bMF0sYj0rRlsxXVsxXSksUigpKTpfPT1udWxsP251bGw6W1tfLHldLFt4LGJdXX0sRC5zY2FsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rRixMKCkpOnJ9LEQudHJhbnNsYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStGWzBdLGk9K0ZbMV0sTCgpKTpbbixpXX0sRC5jZW50ZXI9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RlswXSUzNjAqd2UsbD1GWzFdJTM2MCp3ZSxMKCkpOltzKlVyLGwqVXJdfSxELnJvdGF0ZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1GWzBdJTM2MCp3ZSx1PUZbMV0lMzYwKndlLGg9Ri5sZW5ndGg+Mj9GWzJdJTM2MCp3ZTowLEwoKSk6W2MqVXIsdSpVcixoKlVyXX0sRC5wcmVjaXNpb249ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9Y1EoSSxDPUYqRiksUigpKTpScihDKX0sRC5maXRFeHRlbnQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gVnkoRCxGLHopfSxELmZpdFNpemU9ZnVuY3Rpb24oRix6KXtyZXR1cm4gTzIoRCxGLHopfSxELmZpdFdpZHRoPWZ1bmN0aW9uKEYseil7cmV0dXJuIHoyKEQsRix6KX0sRC5maXRIZWlnaHQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gRjIoRCxGLHopfTtmdW5jdGlvbiBMKCl7cD1hRChmPVJUKGMsdSxoKSx0KTt2YXIgRj10KHMsbCk7cmV0dXJuIG89bi1GWzBdKnIsYT1pK0ZbMV0qcixSKCl9ZnVuY3Rpb24gUigpe3JldHVybiBrPU89bnVsbCxEfXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLEQuaW52ZXJ0PXQuaW52ZXJ0JiZCLEwoKX19dmFyIFNQZSxBdT1NKCgpPT57SEooKTtWSigpO0ZUKCk7X0ooKTtTRCgpO2xyKCk7TlQoKTtHVCgpO0xEKCk7aEx0KCk7U1BlPXZnKHtwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUqd2UsdCp3ZSl9fSl9KTtmdW5jdGlvbiBCMihlKXt2YXIgdD0wLHI9cnIvMyxuPVdUKGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp3ZSxyPW9bMV0qd2UpOlt0KlVyLHIqVXJdfSxpfXZhciBrRD1NKCgpPT57bHIoKTtBdSgpfSk7ZnVuY3Rpb24gZkx0KGUpe3ZhciB0PWFlKGUpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm5bbip0LEp0KGkpL3RdfXJldHVybiByLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybltuL3QsSm4oaSp0KV19LHJ9dmFyIHBMdD1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIHVRKGUsdCl7dmFyIHI9SnQoZSksbj0ocitKdCh0KSkvMjtpZihZZShuKTxjZSlyZXR1cm4gZkx0KGUpO3ZhciBpPTErciooMipuLXIpLG89UnIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9UnIoaS0yKm4qSnQobCkpL247cmV0dXJuW2MqSnQocyo9biksby1jKmFlKHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWw7cmV0dXJuW1NuKHMsWWUoYykpL24qZGcoYyksSm4oKGktKHMqcytjKmMpKm4qbikvKDIqbikpXX0sYX1mdW5jdGlvbiBVeSgpe3JldHVybiBCMih1USkuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX12YXIgUkQ9TSgoKT0+e2xyKCk7a0QoKTtwTHQoKX0pO2Z1bmN0aW9uIE5EKCl7cmV0dXJuIFV5KCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9dmFyIGhRPU0oKCk9PntSRCgpfSk7ZnVuY3Rpb24gRVBlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBkTHQoKXt2YXIgZSx0LHI9TkQoKSxuLGk9VXkoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1VeSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1FUGUoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2NlLGcrLjEyKnArY2VdLFtkLS4yMTQqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArY2UsZysuMTY2KnArY2VdLFtkLS4xMTUqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBWeSh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBPMih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gejIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBGMih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX12YXIgbUx0PU0oKCk9PntscigpO2hRKCk7UkQoKTtMRCgpfSk7ZnVuY3Rpb24gREQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49YWUodCksaT1hZShyKSxvPWUobippKTtyZXR1cm5bbyppKkp0KHQpLG8qSnQocildfX1mdW5jdGlvbiBzZihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1Scih0KnQrcipyKSxpPWUobiksbz1KdChpKSxhPWFlKGkpO3JldHVybltTbih0Km8sbiphKSxKbihuJiZyKm8vbildfX12YXIgSDI9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBnTHQoKXtyZXR1cm4gZW8oT0QpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE4MC0uMDAxKX12YXIgT0QsX0x0PU0oKCk9PntscigpO0gyKCk7QXUoKTtPRD1ERChmdW5jdGlvbihlKXtyZXR1cm4gUnIoMi8oMStlKSl9KTtPRC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqSm4oZS8yKX0pfSk7ZnVuY3Rpb24geUx0KCl7cmV0dXJuIGVvKHpEKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciB6RCx2THQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO3pEPUREKGZ1bmN0aW9uKGUpe3JldHVybihlPSROKGUpKSYmZS9KdChlKX0pO3pELmludmVydD1zZihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfSk7ZnVuY3Rpb24gcXkoZSx0KXtyZXR1cm5bZSxSeShDMigoQm4rdCkvMikpXX1mdW5jdGlvbiB4THQoKXtyZXR1cm4gZlEocXkpLnNjYWxlKDk2MS9CaSl9ZnVuY3Rpb24gZlEoZSl7dmFyIHQ9ZW8oZSkscj10LmNlbnRlcixuPXQuc2NhbGUsaT10LnRyYW5zbGF0ZSxvPXQuY2xpcEV4dGVudCxhPW51bGwscyxsLGM7dC5zY2FsZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obihoKSx1KCkpOm4oKX0sdC50cmFuc2xhdGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkoaCksdSgpKTppKCl9LHQuY2VudGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKGgpLHUoKSk6cigpfSx0LmNsaXBFeHRlbnQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9PW51bGw/YT1zPWw9Yz1udWxsOihhPStoWzBdWzBdLHM9K2hbMF1bMV0sbD0raFsxXVswXSxjPStoWzFdWzFdKSx1KCkpOmE9PW51bGw/bnVsbDpbW2Esc10sW2wsY11dfTtmdW5jdGlvbiB1KCl7dmFyIGg9cnIqbigpLGY9dChzRCh0LnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gbyhhPT1udWxsP1tbZlswXS1oLGZbMV0taF0sW2ZbMF0raCxmWzFdK2hdXTplPT09cXk/W1tNYXRoLm1heChmWzBdLWgsYSksc10sW01hdGgubWluKGZbMF0raCxsKSxjXV06W1thLE1hdGgubWF4KGZbMV0taCxzKV0sW2wsTWF0aC5taW4oZlsxXStoLGMpXV0pfXJldHVybiB1KCl9dmFyIEZEPU0oKCk9PntscigpO05UKCk7QXUoKTtxeS5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKnljKGpOKHQpKS1Cbl19fSk7ZnVuY3Rpb24gQkQoZSl7cmV0dXJuIEMyKChCbitlKS8yKX1mdW5jdGlvbiBwUShlLHQpe3ZhciByPWFlKGUpLG49ZT09PXQ/SnQoZSk6Unkoci9hZSh0KSkvUnkoQkQodCkvQkQoZSkpLGk9cipYTihCRChlKSxuKS9uO2lmKCFuKXJldHVybiBxeTtmdW5jdGlvbiBvKGEscyl7aT4wP3M8LUJuK2NlJiYocz0tQm4rY2UpOnM+Qm4tY2UmJihzPUJuLWNlKTt2YXIgbD1pL1hOKEJEKHMpLG4pO3JldHVybltsKkp0KG4qYSksaS1sKmFlKG4qYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbihhLHMpe3ZhciBsPWktcyxjPWRnKG4pKlJyKGEqYStsKmwpO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLDIqeWMoWE4oaS9jLDEvbikpLUJuXX0sb31mdW5jdGlvbiBiTHQoKXtyZXR1cm4gQjIocFEpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9dmFyIHdMdD1NKCgpPT57bHIoKTtrRCgpO0ZEKCl9KTtmdW5jdGlvbiBHeShlLHQpe3JldHVybltlLHRdfWZ1bmN0aW9uIFNMdCgpe3JldHVybiBlbyhHeSkuc2NhbGUoMTUyLjYzKX12YXIgZFE9TSgoKT0+e0F1KCk7R3kuaW52ZXJ0PUd5fSk7ZnVuY3Rpb24gbVEoZSx0KXt2YXIgcj1hZShlKSxuPWU9PT10P0p0KGUpOihyLWFlKHQpKS8odC1lKSxpPXIvbitlO2lmKFllKG4pPGNlKXJldHVybiBHeTtmdW5jdGlvbiBvKGEscyl7dmFyIGw9aS1zLGM9biphO3JldHVybltsKkp0KGMpLGktbCphZShjKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLGktZGcobikqUnIoYSphK2wqbCldfSxvfWZ1bmN0aW9uIE1MdCgpe3JldHVybiBCMihtUSkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX12YXIgRUx0PU0oKCk9PntscigpO2tEKCk7ZFEoKX0pO2Z1bmN0aW9uIEhEKGUsdCl7dmFyIHI9YWUodCksbj1hZShlKSpyO3JldHVybltyKkp0KGUpL24sSnQodCkvbl19ZnVuY3Rpb24gVEx0KCl7cmV0dXJuIGVvKEhEKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfXZhciBDTHQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO0hELmludmVydD1zZih5Yyl9KTtmdW5jdGlvbiBWRChlLHQscixuKXtyZXR1cm4gZT09PTEmJnQ9PT0xJiZyPT09MCYmbj09PTA/bmY6dmcoe3BvaW50OmZ1bmN0aW9uKGksbyl7dGhpcy5zdHJlYW0ucG9pbnQoaSplK3Isbyp0K24pfX0pfWZ1bmN0aW9uIEFMdCgpe3ZhciBlPTEsdD0wLHI9MCxuPTEsaT0xLG89bmYsYT1udWxsLHMsbCxjLHU9bmYsaCxmLHA7ZnVuY3Rpb24gZCgpe3JldHVybiBoPWY9bnVsbCxwfXJldHVybiBwPXtzdHJlYW06ZnVuY3Rpb24oZyl7cmV0dXJuIGgmJmY9PT1nP2g6aD1vKHUoZj1nKSl9LHBvc3RjbGlwOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWcsYT1zPWw9Yz1udWxsLGQoKSk6dX0sY2xpcEV4dGVudDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1nPT1udWxsPyhhPXM9bD1jPW51bGwsbmYpOlFwKGE9K2dbMF1bMF0scz0rZ1swXVsxXSxsPStnWzFdWzBdLGM9K2dbMV1bMV0pLGQoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19LHNjYWxlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVZEKChlPStnKSpuLGUqaSx0LHIpLGQoKSk6ZX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVZEKGUqbixlKmksdD0rZ1swXSxyPStnWzFdKSxkKCkpOlt0LHJdfSxyZWZsZWN0WDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1WRChlKihuPWc/LTE6MSksZSppLHQsciksZCgpKTpuPDB9LHJlZmxlY3RZOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVZEKGUqbixlKihpPWc/LTE6MSksdCxyKSxkKCkpOmk8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIFZ5KHAsZyxfKX0sZml0U2l6ZTpmdW5jdGlvbihnLF8pe3JldHVybiBPMihwLGcsXyl9LGZpdFdpZHRoOmZ1bmN0aW9uKGcsXyl7cmV0dXJuIHoyKHAsZyxfKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIEYyKHAsZyxfKX19fXZhciBQTHQ9TSgoKT0+e0ZUKCk7U0QoKTtHVCgpO0xEKCl9KTtmdW5jdGlvbiBVRChlLHQpe3ZhciByPXQqdCxuPXIqcjtyZXR1cm5bZSooLjg3MDctLjEzMTk3OSpyK24qKC0uMDEzNzkxK24qKC4wMDM5NzEqci0uMDAxNTI5Km4pKSksdCooMS4wMDcyMjYrciooLjAxNTA4NStuKigtLjA0NDQ3NSsuMDI4ODc0KnItLjAwNTkxNipuKSkpXX1mdW5jdGlvbiBJTHQoKXtyZXR1cm4gZW8oVUQpLnNjYWxlKDE3NS4yOTUpfXZhciBMTHQ9TSgoKT0+e0F1KCk7bHIoKTtVRC5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LG49MjUsaTtkb3t2YXIgbz1yKnIsYT1vKm87ci09aT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKigtLjA0NDQ3NSsuMDI4ODc0Km8tLjAwNTkxNiphKSkpLXQpLygxLjAwNzIyNitvKiguMDE1MDg1KjMrYSooLS4wNDQ0NzUqNysuMDI4ODc0Kjkqby0uMDA1OTE2KjExKmEpKSl9d2hpbGUoWWUoaSk+Y2UmJi0tbj4wKTtyZXR1cm5bZS8oLjg3MDcrKG89cipyKSooLS4xMzE5NzkrbyooLS4wMTM3OTErbypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKSkpKSxyXX19KTtmdW5jdGlvbiBxRChlLHQpe3JldHVyblthZSh0KSpKdChlKSxKdCh0KV19ZnVuY3Rpb24ga0x0KCl7cmV0dXJuIGVvKHFEKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2NlKX12YXIgUkx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtxRC5pbnZlcnQ9c2YoSm4pfSk7ZnVuY3Rpb24gR0QoZSx0KXt2YXIgcj1hZSh0KSxuPTErYWUoZSkqcjtyZXR1cm5bcipKdChlKS9uLEp0KHQpL25dfWZ1bmN0aW9uIE5MdCgpe3JldHVybiBlbyhHRCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX12YXIgREx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtHRC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqeWMoZSl9KX0pO2Z1bmN0aW9uIFdEKGUsdCl7cmV0dXJuW1J5KEMyKChCbit0KS8yKSksLWVdfWZ1bmN0aW9uIE9MdCgpe3ZhciBlPWZRKFdEKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9dmFyIHpMdD1NKCgpPT57bHIoKTtGRCgpO1dELmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKnljKGpOKGUpKS1Cbl19fSk7dmFyIEZMdD1NKCgpPT57aEooKTtZSXQoKTtRSXQoKTt4SigpO0hKKCk7VkooKTtQOXQoKTtGVCgpO3o5dCgpO1lKKCk7Vjl0KCk7cTl0KCk7R0ooKTtsTHQoKTtoUSgpO21MdCgpO19MdCgpO3ZMdCgpO3dMdCgpO1JEKCk7RUx0KCk7ZFEoKTtDTHQoKTtQTHQoKTtBdSgpO0ZEKCk7TEx0KCk7Ukx0KCk7REx0KCk7ekx0KCk7TlQoKTttZygpO0dUKCl9KTtmdW5jdGlvbiBUUGUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gQ1BlKGUpe3JldHVybiBlLnJlZHVjZShBUGUsMCkvZS5sZW5ndGh9ZnVuY3Rpb24gQVBlKGUsdCl7cmV0dXJuIGUrdC54fWZ1bmN0aW9uIFBQZShlKXtyZXR1cm4gMStlLnJlZHVjZShJUGUsMCl9ZnVuY3Rpb24gSVBlKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsdC55KX1mdW5jdGlvbiBMUGUoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10WzBdO3JldHVybiBlfWZ1bmN0aW9uIGtQZShlKXtmb3IodmFyIHQ7dD1lLmNoaWxkcmVuOyllPXRbdC5sZW5ndGgtMV07cmV0dXJuIGV9ZnVuY3Rpb24gQkx0KCl7dmFyIGU9VFBlLHQ9MSxyPTEsbj0hMTtmdW5jdGlvbiBpKG8pe3ZhciBhLHM9MDtvLmVhY2hBZnRlcihmdW5jdGlvbihmKXt2YXIgcD1mLmNoaWxkcmVuO3A/KGYueD1DUGUocCksZi55PVBQZShwKSk6KGYueD1hP3MrPWUoZixhKTowLGYueT0wLGE9Zil9KTt2YXIgbD1MUGUobyksYz1rUGUobyksdT1sLngtZShsLGMpLzIsaD1jLngrZShjLGwpLzI7cmV0dXJuIG8uZWFjaEFmdGVyKG4/ZnVuY3Rpb24oZil7Zi54PShmLngtby54KSp0LGYueT0oby55LWYueSkqcn06ZnVuY3Rpb24oZil7Zi54PShmLngtdSkvKGgtdSkqdCxmLnk9KDEtKG8ueT9mLnkvby55OjEpKSpyfSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuc2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSx0PStvWzBdLHI9K29bMV0saSk6bj9udWxsOlt0LHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLHQ9K29bMF0scj0rb1sxXSxpKTpuP1t0LHJdOm51bGx9LGl9dmFyIEhMdD1NKCgpPT57fSk7ZnVuY3Rpb24gUlBlKGUpe3ZhciB0PTAscj1lLmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYoIW4pdD0xO2Vsc2UgZm9yKDstLW4+PTA7KXQrPXJbbl0udmFsdWU7ZS52YWx1ZT10fWZ1bmN0aW9uIFZMdCgpe3JldHVybiB0aGlzLmVhY2hBZnRlcihSUGUpfXZhciBVTHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFMdChlKXt2YXIgdD10aGlzLHIsbj1bdF0saSxvLGE7ZG8gZm9yKHI9bi5yZXZlcnNlKCksbj1bXTt0PXIucG9wKCk7KWlmKGUodCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pbi5wdXNoKGlbb10pO3doaWxlKG4ubGVuZ3RoKTtyZXR1cm4gdGhpc312YXIgR0x0PU0oKCk9Pnt9KTtmdW5jdGlvbiBXTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbixpO3Q9ci5wb3AoKTspaWYoZSh0KSxuPXQuY2hpbGRyZW4sbilmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXIucHVzaChuW2ldKTtyZXR1cm4gdGhpc312YXIgWUx0PU0oKCk9Pnt9KTtmdW5jdGlvbiBqTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbj1bXSxpLG8sYTt0PXIucG9wKCk7KWlmKG4ucHVzaCh0KSxpPXQuY2hpbGRyZW4saSlmb3Iobz0wLGE9aS5sZW5ndGg7bzxhOysrbylyLnB1c2goaVtvXSk7Zm9yKDt0PW4ucG9wKCk7KWUodCk7cmV0dXJuIHRoaXN9dmFyIFhMdD1NKCgpPT57fSk7ZnVuY3Rpb24gJEx0KGUpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9K2UodC5kYXRhKXx8MCxuPXQuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7dC52YWx1ZT1yfSl9dmFyIEtMdD1NKCgpPT57fSk7ZnVuY3Rpb24gWkx0KGUpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb3J0KGUpfSl9dmFyIEpMdD1NKCgpPT57fSk7ZnVuY3Rpb24gUUx0KGUpe2Zvcih2YXIgdD10aGlzLHI9TlBlKHQsZSksbj1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsbi5wdXNoKHQpO2Zvcih2YXIgaT1uLmxlbmd0aDtlIT09cjspbi5zcGxpY2UoaSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gTlBlKGUsdCl7aWYoZT09PXQpcmV0dXJuIGU7dmFyIHI9ZS5hbmNlc3RvcnMoKSxuPXQuYW5jZXN0b3JzKCksaT1udWxsO2ZvcihlPXIucG9wKCksdD1uLnBvcCgpO2U9PT10OylpPWUsZT1yLnBvcCgpLHQ9bi5wb3AoKTtyZXR1cm4gaX12YXIgdGt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBla3QoKXtmb3IodmFyIGU9dGhpcyx0PVtlXTtlPWUucGFyZW50Oyl0LnB1c2goZSk7cmV0dXJuIHR9dmFyIHJrdD1NKCgpPT57fSk7ZnVuY3Rpb24gbmt0KCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfXZhciBpa3Q9TSgoKT0+e30pO2Z1bmN0aW9uIG9rdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8ZS5wdXNoKHQpfSksZX12YXIgYWt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBza3QoKXt2YXIgZT10aGlzLHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihyKXtyIT09ZSYmdC5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLHR9dmFyIGxrdD1NKCgpPT57fSk7ZnVuY3Rpb24gWVQoZSx0KXt2YXIgcj1uZXcgeGcoZSksbj0rZS52YWx1ZSYmKHIudmFsdWU9ZS52YWx1ZSksaSxvPVtyXSxhLHMsbCxjO2Zvcih0PT1udWxsJiYodD1PUGUpO2k9by5wb3AoKTspaWYobiYmKGkudmFsdWU9K2kuZGF0YS52YWx1ZSksKHM9dChpLmRhdGEpKSYmKGM9cy5sZW5ndGgpKWZvcihpLmNoaWxkcmVuPW5ldyBBcnJheShjKSxsPWMtMTtsPj0wOy0tbClvLnB1c2goYT1pLmNoaWxkcmVuW2xdPW5ldyB4ZyhzW2xdKSksYS5wYXJlbnQ9aSxhLmRlcHRoPWkuZGVwdGgrMTtyZXR1cm4gci5lYWNoQmVmb3JlKGdRKX1mdW5jdGlvbiBEUGUoKXtyZXR1cm4gWVQodGhpcykuZWFjaEJlZm9yZSh6UGUpfWZ1bmN0aW9uIE9QZShlKXtyZXR1cm4gZS5jaGlsZHJlbn1mdW5jdGlvbiB6UGUoZSl7ZS5kYXRhPWUuZGF0YS5kYXRhfWZ1bmN0aW9uIGdRKGUpe3ZhciB0PTA7ZG8gZS5oZWlnaHQ9dDt3aGlsZSgoZT1lLnBhcmVudCkmJmUuaGVpZ2h0PCsrdCl9ZnVuY3Rpb24geGcoZSl7dGhpcy5kYXRhPWUsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9dmFyIFlEPU0oKCk9PntVTHQoKTtHTHQoKTtZTHQoKTtYTHQoKTtLTHQoKTtKTHQoKTt0a3QoKTtya3QoKTtpa3QoKTtha3QoKTtsa3QoKTt4Zy5wcm90b3R5cGU9WVQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4Zyxjb3VudDpWTHQsZWFjaDpxTHQsZWFjaEFmdGVyOmpMdCxlYWNoQmVmb3JlOldMdCxzdW06JEx0LHNvcnQ6Wkx0LHBhdGg6UUx0LGFuY2VzdG9yczpla3QsZGVzY2VuZGFudHM6bmt0LGxlYXZlczpva3QsbGlua3M6c2t0LGNvcHk6RFBlfX0pO2Z1bmN0aW9uIHVrdChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX12YXIgY2t0LGhrdD1NKCgpPT57Y2t0PUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIFhEKGUpe2Zvcih2YXIgdD0wLHI9KGU9dWt0KGNrdC5jYWxsKGUpKSkubGVuZ3RoLG49W10saSxvO3Q8cjspaT1lW3RdLG8mJmZrdChvLGkpPysrdDoobz1CUGUobj1GUGUobixpKSksdD0wKTtyZXR1cm4gb31mdW5jdGlvbiBGUGUoZSx0KXt2YXIgcixuO2lmKF9RKHQsZSkpcmV0dXJuW3RdO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3IpaWYoakQodCxlW3JdKSYmX1EoalQoZVtyXSx0KSxlKSlyZXR1cm5bZVtyXSx0XTtmb3Iocj0wO3I8ZS5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248ZS5sZW5ndGg7KytuKWlmKGpEKGpUKGVbcl0sZVtuXSksdCkmJmpEKGpUKGVbcl0sdCksZVtuXSkmJmpEKGpUKGVbbl0sdCksZVtyXSkmJl9RKHBrdChlW3JdLGVbbl0sdCksZSkpcmV0dXJuW2Vbcl0sZVtuXSx0XTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gakQoZSx0KXt2YXIgcj1lLnItdC5yLG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gZmt0KGUsdCl7dmFyIHI9ZS5yLXQucisxZS02LG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gX1EoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZighZmt0KGUsdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQlBlKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBIUGUoZVswXSk7Y2FzZSAyOnJldHVybiBqVChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gcGt0KGVbMF0sZVsxXSxlWzJdKX19ZnVuY3Rpb24gSFBlKGUpe3JldHVybnt4OmUueCx5OmUueSxyOmUucn19ZnVuY3Rpb24galQoZSx0KXt2YXIgcj1lLngsbj1lLnksaT1lLnIsbz10LngsYT10Lnkscz10LnIsbD1vLXIsYz1hLW4sdT1zLWksaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrbytsL2gqdSkvMix5OihuK2ErYy9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIHBrdChlLHQscil7dmFyIG49ZS54LGk9ZS55LG89ZS5yLGE9dC54LHM9dC55LGw9dC5yLGM9ci54LHU9ci55LGg9ci5yLGY9bi1hLHA9bi1jLGQ9aS1zLGc9aS11LF89bC1vLHk9aC1vLHg9bipuK2kqaS1vKm8sYj14LWEqYS1zKnMrbCpsLFM9eC1jKmMtdSp1K2gqaCxDPXAqZC1mKmcsUD0oZCpTLWcqYikvKEMqMiktbixrPShnKl8tZCp5KS9DLE89KHAqYi1mKlMpLyhDKjIpLWksRD0oZip5LXAqXykvQyxCPWsqaytEKkQtMSxJPTIqKG8rUCprK08qRCksTD1QKlArTypPLW8qbyxSPS0oQj8oSStNYXRoLnNxcnQoSSpJLTQqQipMKSkvKDIqQik6TC9JKTtyZXR1cm57eDpuK1AraypSLHk6aStPK0QqUixyOlJ9fXZhciB5UT1NKCgpPT57aGt0KCl9KTtmdW5jdGlvbiBka3QoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPXQucityLnIsYT1lLnIrci5yLHM9dC54LW4sbD10LnktaSxjPXMqcytsKmw7aWYoYyl7dmFyIHU9LjUrKChhKj1hKS0obyo9bykpLygyKmMpLGg9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihhK2MpLShhLT1jKSphLW8qbykpLygyKmMpO3IueD1uK3UqcytoKmwsci55PWkrdSpsLWgqc31lbHNlIHIueD1uK2Esci55PWl9ZnVuY3Rpb24gbWt0KGUsdCl7dmFyIHI9dC54LWUueCxuPXQueS1lLnksaT1lLnIrdC5yO3JldHVybiBpKmktMWUtNj5yKnIrbipufWZ1bmN0aW9uIGdrdChlKXt2YXIgdD1lLl8scj1lLm5leHQuXyxuPXQucityLnIsaT0odC54KnIucityLngqdC5yKS9uLG89KHQueSpyLnIrci55KnQucikvbjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiAkRChlKXt0aGlzLl89ZSx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gdlEoZSl7aWYoIShpPWUubGVuZ3RoKSlyZXR1cm4gMDt2YXIgdCxyLG4saSxvLGEscyxsLGMsdSxoO2lmKHQ9ZVswXSx0Lng9MCx0Lnk9MCwhKGk+MSkpcmV0dXJuIHQucjtpZihyPWVbMV0sdC54PS1yLnIsci54PXQucixyLnk9MCwhKGk+MikpcmV0dXJuIHQucityLnI7ZGt0KHIsdCxuPWVbMl0pLHQ9bmV3ICREKHQpLHI9bmV3ICREKHIpLG49bmV3ICREKG4pLHQubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PXQucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz10O3Q6Zm9yKHM9MztzPGk7KytzKXtka3QodC5fLHIuXyxuPWVbc10pLG49bmV3ICREKG4pLGw9ci5uZXh0LGM9dC5wcmV2aW91cyx1PXIuXy5yLGg9dC5fLnI7ZG8gaWYodTw9aCl7aWYobWt0KGwuXyxuLl8pKXtyPWwsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYobWt0KGMuXyxuLl8pKXt0PWMsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c313aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz10LG4ubmV4dD1yLHQubmV4dD1yLnByZXZpb3VzPXI9bixvPWdrdCh0KTsobj1uLm5leHQpIT09cjspKGE9Z2t0KG4pKTxvJiYodD1uLG89YSk7cj10Lm5leHR9Zm9yKHQ9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyl0LnB1c2gobi5fKTtmb3Iobj1YRCh0KSxzPTA7czxpOysrcyl0PWVbc10sdC54LT1uLngsdC55LT1uLnk7cmV0dXJuIG4ucn1mdW5jdGlvbiBfa3QoZSl7cmV0dXJuIHZRKGUpLGV9dmFyIHhRPU0oKCk9Pnt5USgpfSk7ZnVuY3Rpb24geWt0KGUpe3JldHVybiBlPT1udWxsP251bGw6VjIoZSl9ZnVuY3Rpb24gVjIoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBlfXZhciBLRD1NKCgpPT57fSk7ZnVuY3Rpb24gdGQoKXtyZXR1cm4gMH1mdW5jdGlvbiBiZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGJRPU0oKCk9Pnt9KTtmdW5jdGlvbiBWUGUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiBia3QoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj10ZDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUodmt0KGUpKS5lYWNoQWZ0ZXIod1EobiwuNSkpLmVhY2hCZWZvcmUoeGt0KDEpKTpvLmVhY2hCZWZvcmUodmt0KFZQZSkpLmVhY2hBZnRlcih3USh0ZCwxKSkuZWFjaEFmdGVyKHdRKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKHhrdChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT15a3QobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOmJnKCtvKSxpKTpufSxpfWZ1bmN0aW9uIHZrdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIHdRKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9dlEobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiB4a3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19dmFyIHdrdD1NKCgpPT57eFEoKTtLRCgpO2JRKCl9KTtmdW5jdGlvbiBaRChlKXtlLngwPU1hdGgucm91bmQoZS54MCksZS55MD1NYXRoLnJvdW5kKGUueTApLGUueDE9TWF0aC5yb3VuZChlLngxKSxlLnkxPU1hdGgucm91bmQoZS55MSl9dmFyIFNRPU0oKCk9Pnt9KTtmdW5jdGlvbiBsZihlLHQscixuLGkpe2Zvcih2YXIgbz1lLmNoaWxkcmVuLGEscz0tMSxsPW8ubGVuZ3RoLGM9ZS52YWx1ZSYmKG4tdCkvZS52YWx1ZTsrK3M8bDspYT1vW3NdLGEueTA9cixhLnkxPWksYS54MD10LGEueDE9dCs9YS52YWx1ZSpjfXZhciBVMj1NKCgpPT57fSk7ZnVuY3Rpb24gU2t0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKFpEKSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmbGYobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIE1rdD1NKCgpPT57U1EoKTtVMigpfSk7ZnVuY3Rpb24gcVBlKGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uIEdQZShlKXtyZXR1cm4gZS5wYXJlbnRJZH1mdW5jdGlvbiBDa3QoKXt2YXIgZT1xUGUsdD1HUGU7ZnVuY3Rpb24gcihuKXt2YXIgaSxvLGE9bi5sZW5ndGgscyxsLGMsdT1uZXcgQXJyYXkoYSksaCxmLHA9e307Zm9yKG89MDtvPGE7KytvKWk9bltvXSxjPXVbb109bmV3IHhnKGkpLChoPWUoaSxvLG4pKSE9bnVsbCYmKGgrPSIiKSYmKGY9RWt0KyhjLmlkPWgpLHBbZl09ZiBpbiBwP1RrdDpjKTtmb3Iobz0wO288YTsrK28paWYoYz11W29dLGg9dChuW29dLG8sbiksaD09bnVsbHx8IShoKz0iIikpe2lmKHMpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO3M9Y31lbHNle2lmKGw9cFtFa3QraF0sIWwpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2gpO2lmKGw9PT1Ua3QpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIraCk7bC5jaGlsZHJlbj9sLmNoaWxkcmVuLnB1c2goYyk6bC5jaGlsZHJlbj1bY10sYy5wYXJlbnQ9bH1pZighcyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihzLnBhcmVudD1VUGUscy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGQpe2QuZGVwdGg9ZC5wYXJlbnQuZGVwdGgrMSwtLWF9KS5lYWNoQmVmb3JlKGdRKSxzLnBhcmVudD1udWxsLGE+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIHN9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIobikscik6ZX0sci5wYXJlbnRJZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1WMihuKSxyKTp0fSxyfXZhciBFa3QsVVBlLFRrdCxBa3Q9TSgoKT0+e0tEKCk7WUQoKTtFa3Q9IiQiLFVQZT17ZGVwdGg6LTF9LFRrdD17fX0pO2Z1bmN0aW9uIFdQZShlLHQpe3JldHVybiBlLnBhcmVudD09PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBNUShlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbMF06ZS50fWZ1bmN0aW9uIEVRKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHQ/dFt0Lmxlbmd0aC0xXTplLnR9ZnVuY3Rpb24gWVBlKGUsdCxyKXt2YXIgbj1yLyh0LmktZS5pKTt0LmMtPW4sdC5zKz1yLGUuYys9bix0LnorPXIsdC5tKz1yfWZ1bmN0aW9uIGpQZShlKXtmb3IodmFyIHQ9MCxyPTAsbj1lLmNoaWxkcmVuLGk9bi5sZW5ndGgsbzstLWk+PTA7KW89bltpXSxvLnorPXQsby5tKz10LHQrPW8ucysocis9by5jKX1mdW5jdGlvbiBYUGUoZSx0LHIpe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOnJ9ZnVuY3Rpb24gSkQoZSx0KXt0aGlzLl89ZSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9dH1mdW5jdGlvbiAkUGUoZSl7Zm9yKHZhciB0PW5ldyBKRChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBKRChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgSkQobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gUGt0KCl7dmFyIGU9V1BlLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9JFBlKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe2pQZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD1FUShkKSxmPU1RKGYpLGQmJmY7KWc9TVEoZykscD1FUShwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoWVBlKFhQZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhRVEocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIU1RKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfXZhciBJa3Q9TSgoKT0+e1lEKCk7SkQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGcucHJvdG90eXBlKX0pO2Z1bmN0aW9uIHdnKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyIFhUPU0oKCk9Pnt9KTtmdW5jdGlvbiBDUShlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/bGYobCxyLG4saSxnP24rPWQqXy9nOm8pOndnKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgVFEsUUQsdE89TSgoKT0+e1UyKCk7WFQoKTtUUT0oMStNYXRoLnNxcnQoNSkpLzI7UUQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7Q1EodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KFRRKX0pO2Z1bmN0aW9uIExrdCgpe3ZhciBlPVFELHQ9ITEscj0xLG49MSxpPVswXSxvPXRkLGE9dGQscz10ZCxsPXRkLGM9dGQ7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZi54MD1mLnkwPTAsZi54MT1yLGYueTE9bixmLmVhY2hCZWZvcmUoaCksaT1bMF0sdCYmZi5lYWNoQmVmb3JlKFpEKSxmfWZ1bmN0aW9uIGgoZil7dmFyIHA9aVtmLmRlcHRoXSxkPWYueDArcCxnPWYueTArcCxfPWYueDEtcCx5PWYueTEtcDtfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGYueDA9ZCxmLnkwPWcsZi54MT1fLGYueTE9eSxmLmNoaWxkcmVuJiYocD1pW2YuZGVwdGgrMV09byhmKS8yLGQrPWMoZiktcCxnKz1hKGYpLXAsXy09cyhmKS1wLHktPWwoZiktcCxfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGUoZixkLGcsXyx5KSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFmLHUpOnR9LHUuc2l6ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZlswXSxuPStmWzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIoZiksdSk6ZX0sdS5wYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKGYpLnBhZGRpbmdPdXRlcihmKTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpvfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AoZikucGFkZGluZ1JpZ2h0KGYpLnBhZGRpbmdCb3R0b20oZikucGFkZGluZ0xlZnQoZik6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTphfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpiZygrZiksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpjfSx1fXZhciBra3Q9TSgoKT0+e1NRKCk7dE8oKTtLRCgpO2JRKCl9KTtmdW5jdGlvbiBSa3QoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX12YXIgTmt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBEa3QoZSx0LHIsbixpKXsoZS5kZXB0aCYxP3dnOmxmKShlLHQscixuLGkpfXZhciBPa3Q9TSgoKT0+e1UyKCk7WFQoKX0pO3ZhciB6a3QsRmt0PU0oKCk9PntVMigpO1hUKCk7dE8oKTt6a3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP2xmKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTp3ZyhjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9Q1EodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShUUSl9KTt2YXIgQmt0PU0oKCk9PntITHQoKTtZRCgpO3drdCgpO3hRKCk7eVEoKTtNa3QoKTtBa3QoKTtJa3QoKTtra3QoKTtOa3QoKTtVMigpO1hUKCk7T2t0KCk7dE8oKTtGa3QoKX0pO2Z1bmN0aW9uIGVkKGUsdCxyKXtlLnByb3RvdHlwZT10LnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBTZyhlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgZU89TSgoKT0+e30pO2Z1bmN0aW9uIGhmKCl7fWZ1bmN0aW9uIFZrdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIG42ZSgpe3JldHVybiBqa3QodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gVWt0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gRWcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9S1BlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/cWt0KHQpOnI9PT0zP25ldyBybyh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/ck8odD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/ck8odD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1aUGUuZXhlYyhlKSk/bmV3IHJvKHRbMV0sdFsyXSx0WzNdLDEpOih0PUpQZS5leGVjKGUpKT9uZXcgcm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9UVBlLmV4ZWMoZSkpP3JPKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PXQ2ZS5leGVjKGUpKT9yTyh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1lNmUuZXhlYyhlKSk/WWt0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9cjZlLmV4ZWMoZSkpP1lrdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOkhrdC5oYXNPd25Qcm9wZXJ0eShlKT9xa3QoSGt0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgcm8oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBxa3QoZSl7cmV0dXJuIG5ldyBybyhlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gck8oZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBybyhlLHQscixuKX1mdW5jdGlvbiBLVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksZT8oZT1lLnJnYigpLG5ldyBybyhlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgcm99ZnVuY3Rpb24gRzIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0tUKGUpOm5ldyBybyhlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcm8oZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEdrdCgpe3JldHVybiIjIitBUSh0aGlzLnIpK0FRKHRoaXMuZykrQVEodGhpcy5iKX1mdW5jdGlvbiBXa3QoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gQVEoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gWWt0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgY2YoZSx0LHIsbil9ZnVuY3Rpb24gamt0KGUpe2lmKGUgaW5zdGFuY2VvZiBjZilyZXR1cm4gbmV3IGNmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksIWUpcmV0dXJuIG5ldyBjZjtpZihlIGluc3RhbmNlb2YgY2YpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgY2YoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBaVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/amt0KGUpOm5ldyBjZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gY2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFBRKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBNZyxXeSxxMiwkVCx1ZixLUGUsWlBlLEpQZSxRUGUsdDZlLGU2ZSxyNmUsSGt0LG5PPU0oKCk9PntlTygpO01nPS43LFd5PTEvTWcscTI9IlxccyooWystXT9cXGQrKVxccyoiLCRUPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHVmPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixLUGU9L14jKFswLTlhLWZdezMsOH0pJC8sWlBlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1txMixxMixxMl0rIlxcKSQiKSxKUGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3VmLHVmLHVmXSsiXFwpJCIpLFFQZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3EyLHEyLHEyLCRUXSsiXFwpJCIpLHQ2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3VmLHVmLHVmLCRUXSsiXFwpJCIpLGU2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbJFQsdWYsdWZdKyJcXCkkIikscjZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbJFQsdWYsdWYsJFRdKyJcXCkkIiksSGt0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2VkKGhmLEVnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlZrdCxmb3JtYXRIZXg6Vmt0LGZvcm1hdEhzbDpuNmUsZm9ybWF0UmdiOlVrdCx0b1N0cmluZzpVa3R9KTtlZChybyxHMixTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9XeTpNYXRoLnBvdyhXeSxlKSxuZXcgcm8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IHJvKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6R2t0LGZvcm1hdEhleDpHa3QsZm9ybWF0UmdiOldrdCx0b1N0cmluZzpXa3R9KSk7ZWQoY2YsWlQsU2coaGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/V3k6TWF0aC5wb3coV3ksZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgcm8oUFEoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksUFEoZSxpLG4pLFBRKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpfSk7dmFyIGlPLG9PLElRPU0oKCk9PntpTz1NYXRoLlBJLzE4MCxvTz0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIFFrdChlKXtpZihlIGluc3RhbmNlb2YgZmYpcmV0dXJuIG5ldyBmZihlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiByZClyZXR1cm4gdDh0KGUpO2UgaW5zdGFuY2VvZiByb3x8KGU9S1QoZSkpO3ZhciB0PU5RKGUucikscj1OUShlLmcpLG49TlEoZS5iKSxpPUxRKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikvJGt0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1MUSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL1hrdCksYT1MUSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL0trdCkpLG5ldyBmZigxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gWTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1FrdChlKTpuZXcgZmYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGZmKGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBMUShlKXtyZXR1cm4gZT5pNmU/TWF0aC5wb3coZSwxLzMpOmUvSmt0K1prdH1mdW5jdGlvbiBrUShlKXtyZXR1cm4gZT5XMj9lKmUqZTpKa3QqKGUtWmt0KX1mdW5jdGlvbiBSUShlKXtyZXR1cm4gMjU1KihlPD0uMDAzMTMwOD8xMi45MiplOjEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIE5RKGUpe3JldHVybihlLz0yNTUpPD0uMDQwNDU/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIG82ZShlKXtpZihlIGluc3RhbmNlb2YgcmQpcmV0dXJuIG5ldyByZChlLmgsZS5jLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBmZnx8KGU9UWt0KGUpKSxlLmE9PT0wJiZlLmI9PT0wKXJldHVybiBuZXcgcmQoTmFOLDA8ZS5sJiZlLmw8MTAwPzA6TmFOLGUubCxlLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIoZS5iLGUuYSkqb087cmV0dXJuIG5ldyByZCh0PDA/dCszNjA6dCxNYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKSxlLmwsZS5vcGFjaXR5KX1mdW5jdGlvbiBKVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/bzZlKGUpOm5ldyByZChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcmQoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIHQ4dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgZmYoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCppTztyZXR1cm4gbmV3IGZmKGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9dmFyIGFPLFhrdCwka3QsS2t0LFprdCxXMixKa3QsaTZlLGU4dD1NKCgpPT57ZU8oKTtuTygpO0lRKCk7YU89MTgsWGt0PS45NjQyMiwka3Q9MSxLa3Q9LjgyNTIxLFprdD00LzI5LFcyPTYvMjksSmt0PTMqVzIqVzIsaTZlPVcyKlcyKlcyO2VkKGZmLFkyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZmKHRoaXMubCthTyooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZmYodGhpcy5sLWFPKihlPT1udWxsPzE6ZSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP2U6ZSt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT9lOmUtdGhpcy5iLzIwMDtyZXR1cm4gdD1Ya3Qqa1EodCksZT0ka3Qqa1EoZSkscj1La3Qqa1EociksbmV3IHJvKFJRKDMuMTMzODU2MSp0LTEuNjE2ODY2NyplLS40OTA2MTQ2KnIpLFJRKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSplKy4wMzM0NTQqciksUlEoLjA3MTk0NTMqdC0uMjI4OTkxNCplKzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKTtlZChyZCxKVCxTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByZCh0aGlzLmgsdGhpcy5jLHRoaXMubCthTyooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJkKHRoaXMuaCx0aGlzLmMsdGhpcy5sLWFPKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHQ4dCh0aGlzKS5yZ2IoKX19KSl9KTtmdW5jdGlvbiBhNmUoZSl7aWYoZSBpbnN0YW5jZW9mIFl5KXJldHVybiBuZXcgWXkoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2Ygcm98fChlPUtUKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oaTh0Km4rcjh0KnQtbjh0KnIpLyhpOHQrcjh0LW44dCksbz1uLWksYT0oUVQqKHItaSktT1Eqbykvc08scz1NYXRoLnNxcnQoYSphK28qbykvKFFUKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqb08tMTIwOk5hTjtyZXR1cm4gbmV3IFl5KGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGoyKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9hNmUoZSk6bmV3IFl5KGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBZeShlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIG84dCxEUSxPUSxzTyxRVCxyOHQsbjh0LGk4dCxhOHQ9TSgoKT0+e2VPKCk7bk8oKTtJUSgpO284dD0tLjE0ODYxLERRPTEuNzgyNzcsT1E9LS4yOTIyNyxzTz0tLjkwNjQ5LFFUPTEuOTcyOTQscjh0PVFUKnNPLG44dD1RVCpEUSxpOHQ9RFEqT1Etc08qbzh0O2VkKFl5LGoyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1d5Ok1hdGgucG93KFd5LGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP01nOk1hdGgucG93KE1nLGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqaU8sdD0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyp0KigxLXQpLG49TWF0aC5jb3MoZSksaT1NYXRoLnNpbihlKTtyZXR1cm4gbmV3IHJvKDI1NSoodCtyKihvOHQqbitEUSppKSksMjU1Kih0K3IqKE9RKm4rc08qaSkpLDI1NSoodCtyKihRVCpuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgank9TSgoKT0+e25PKCk7ZTh0KCk7YTh0KCl9KTtmdW5jdGlvbiB6UShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGxPKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiB6USgoci1uL3QpKnQsYSxpLG8scyl9fXZhciBjTz1NKCgpPT57fSk7ZnVuY3Rpb24gdU8oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiB6USgoci1uL3QpKnQsaSxvLGEscyl9fXZhciBGUT1NKCgpPT57Y08oKX0pO2Z1bmN0aW9uIFgyKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgQlE9TSgoKT0+e30pO2Z1bmN0aW9uIHM4dChlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIHM2ZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uICQyKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP3M4dChlLHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6WDIoaXNOYU4oZSk/dDplKX1mdW5jdGlvbiBsOHQoZSl7cmV0dXJuKGU9K2UpPT0xP1FuOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9zNmUodCxyLGUpOlgyKGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIFFuKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP3M4dChlLHIpOlgyKGlzTmFOKGUpP3Q6ZSl9dmFyIEsyPU0oKCk9PntCUSgpfSk7ZnVuY3Rpb24gYzh0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9RzIodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIHRDLHU4dCxoOHQsSFE9TSgoKT0+e2p5KCk7Y08oKTtGUSgpO0syKCk7dEM9ZnVuY3Rpb24gZSh0KXt2YXIgcj1sOHQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9RzIoaSkpLnIsKG89RzIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1RbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7dTh0PWM4dChsTyksaDh0PWM4dCh1Tyl9KTtmdW5jdGlvbiBoTyhlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPVoyKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIFZRPU0oKCk9PntmTygpfSk7ZnVuY3Rpb24gcE8oZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSt0Km4pLHJ9fXZhciBVUT1NKCgpPT57fSk7ZnVuY3Rpb24gQXMoZSx0KXtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKHIpe3JldHVybiBlK3Qqcn19dmFyIGVDPU0oKCk9Pnt9KTtmdW5jdGlvbiBkTyhlLHQpe3ZhciByPXt9LG49e30saTsoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KSwodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KTtmb3IoaSBpbiB0KWkgaW4gZT9yW2ldPVoyKGVbaV0sdFtpXSk6bltpXT10W2ldO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaSBpbiByKW5baV09cltpXShvKTtyZXR1cm4gbn19dmFyIHFRPU0oKCk9PntmTygpfSk7ZnVuY3Rpb24gbDZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBjNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBtTyhlLHQpe3ZhciByPVdRLmxhc3RJbmRleD1HUS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1XUS5leGVjKGUpKSYmKGk9R1EuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OkFzKG4saSl9KSkscj1HUS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/YzZlKGxbMF0ueCk6bDZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBXUSxHUSxZUT1NKCgpPT57ZUMoKTtXUT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csR1E9bmV3IFJlZ0V4cChXUS5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIFoyKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9YMih0KToocj09PSJudW1iZXIiP0FzOnI9PT0ic3RyaW5nIj8obj1FZyh0KSk/KHQ9bix0Qyk6bU86dCBpbnN0YW5jZW9mIEVnP3RDOnQgaW5zdGFuY2VvZiBEYXRlP3BPOkFycmF5LmlzQXJyYXkodCk/aE86dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP2RPOkFzKShlLHQpfXZhciBmTz1NKCgpPT57ankoKTtIUSgpO1ZRKCk7VVEoKTtlQygpO3FRKCk7WVEoKTtCUSgpfSk7ZnVuY3Rpb24gZjh0KGUsdCl7cmV0dXJuIGU9K2UsdC09ZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZChlK3Qqcil9fXZhciBwOHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGpRKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKmQ4dCxza2V3WDpNYXRoLmF0YW4obCkqZDh0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgZDh0LGdPLG04dD1NKCgpPT57ZDh0PTE4MC9NYXRoLlBJLGdPPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gXzh0KGUpe3JldHVybiBlPT09Im5vbmUiP2dPOihyQ3x8KHJDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLFhRPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxnOHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLHJDLnN0eWxlLnRyYW5zZm9ybT1lLGU9Zzh0LmdldENvbXB1dGVkU3R5bGUoWFEuYXBwZW5kQ2hpbGQockMpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLFhRLnJlbW92ZUNoaWxkKHJDKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxqUSgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIHk4dChlKXtyZXR1cm4gZT09bnVsbD9nTzooX098fChfTz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxfTy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9X08udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsalEoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpnTyl9dmFyIHJDLFhRLGc4dCxfTyx2OHQ9TSgoKT0+e204dCgpfSk7ZnVuY3Rpb24geDh0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6QXMoYyxoKX0se2k6Zy0yLHg6QXModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpBcyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkFzKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpBcyhjLGgpfSx7aTpnLTIseDpBcyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBiOHQsdzh0LFM4dD1NKCgpPT57ZUMoKTt2OHQoKTtiOHQ9eDh0KF84dCwicHgsICIsInB4KSIsImRlZykiKSx3OHQ9eDh0KHk4dCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gRTh0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIGg2ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBmNmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIFQ4dChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8dTZlKWY9TWF0aC5sb2cocy9pKS9uQyxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKG5DKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK004dCp1KS8oMippKiRRKnApLGc9KHMqcy1pKmktTTh0KnUpLygyKnMqJFEqcCksXz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtmPSh5LV8pL25DLGg9ZnVuY3Rpb24oeCl7dmFyIGI9eCpmLFM9RTh0KF8pLEM9aS8oJFEqcCkqKFMqZjZlKG5DKmIrXyktaDZlKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL0U4dChuQypiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgbkMsJFEsTTh0LHU2ZSxDOHQ9TSgoKT0+e25DPU1hdGguU1FSVDIsJFE9MixNOHQ9NCx1NmU9MWUtMTJ9KTtmdW5jdGlvbiBBOHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1aVCh0KSkuaCwocj1aVChyKSkuaCksaT1Rbih0LnMsci5zKSxvPVFuKHQubCxyLmwpLGE9UW4odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LnM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyIFA4dCxJOHQsTDh0PU0oKCk9PntqeSgpO0syKCk7UDh0PUE4dCgkMiksSTh0PUE4dChRbil9KTtmdW5jdGlvbiBLUShlLHQpe3ZhciByPVFuKChlPVkyKGUpKS5sLCh0PVkyKHQpKS5sKSxuPVFuKGUuYSx0LmEpLGk9UW4oZS5iLHQuYiksbz1RbihlLm9wYWNpdHksdC5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGUubD1yKGEpLGUuYT1uKGEpLGUuYj1pKGEpLGUub3BhY2l0eT1vKGEpLGUrIiJ9fXZhciBrOHQ9TSgoKT0+e2p5KCk7SzIoKX0pO2Z1bmN0aW9uIFI4dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PUpUKHQpKS5oLChyPUpUKHIpKS5oKSxpPVFuKHQuYyxyLmMpLG89UW4odC5sLHIubCksYT1Rbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQuYz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgTjh0LEQ4dCxPOHQ9TSgoKT0+e2p5KCk7SzIoKTtOOHQ9Ujh0KCQyKSxEOHQ9Ujh0KFFuKX0pO2Z1bmN0aW9uIHo4dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWoyKGkpKS5oLChvPWoyKG8pKS5oKSxzPVFuKGkucyxvLnMpLGw9UW4oaS5sLG8ubCksYz1RbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIEY4dCxCOHQsSDh0PU0oKCk9PntqeSgpO0syKCk7Rjh0PXo4dCgkMiksQjh0PXo4dChRbil9KTtmdW5jdGlvbiBWOHQoZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuLyh0LTEpKTtyZXR1cm4gcn12YXIgVTh0PU0oKCk9Pnt9KTt2YXIgcTh0PU0oKCk9PntmTygpO1ZRKCk7Y08oKTtGUSgpO1VRKCk7ZUMoKTtxUSgpO3A4dCgpO1lRKCk7Uzh0KCk7Qzh0KCk7SFEoKTtMOHQoKTtrOHQoKTtPOHQoKTtIOHQoKTtVOHQoKX0pO2Z1bmN0aW9uIFFRKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gRzh0KCl7cmV0dXJuIG5ldyBRUX12YXIgWlEsSlEsWHkscDZlLFc4dCxZOHQ9TSgoKT0+e1pRPU1hdGguUEksSlE9MipaUSxYeT0xZS02LHA2ZT1KUS1YeTtRUS5wcm90b3R5cGU9Rzh0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6UVEsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPlh5KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+WHkpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigoWlEtTWF0aC5hY29zKChkK2gtZykvKDIqXyp5KSkpLzIpLGI9eC95LFM9eC9fO01hdGguYWJzKGItMSk+WHkmJih0aGlzLl8rPSJMIisoZStiKmMpKyIsIisodCtiKnUpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsodSpmPmMqcCkrIiwiKyh0aGlzLl94MT1lK1MqcykrIiwiKyh0aGlzLl95MT10K1MqbCl9fSxhcmM6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe2U9K2UsdD0rdCxyPStyO3ZhciBhPXIqTWF0aC5jb3Mobikscz1yKk1hdGguc2luKG4pLGw9ZSthLGM9dCtzLHU9MV5vLGg9bz9uLWk6aS1uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIityKTt0aGlzLl94MT09PW51bGw/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+WHl8fE1hdGguYWJzKHRoaXMuX3kxLWMpPlh5KSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLHImJihoPDAmJihoPWglSlErSlEpLGg+cDZlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPlh5JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj1aUSkrIiwiK3UrIiwiKyh0aGlzLl94MT1lK3IqTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9dCtyKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCkrImgiKyArcisidiIrICtuKyJoIistcisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O1c4dD1HOHR9KTt2YXIgajh0PU0oKCk9PntZOHQoKX0pO2Z1bmN0aW9uIFg4dChlKXtmb3IodmFyIHQ9LTEscj1lLmxlbmd0aCxuLGk9ZVtyLTFdLG89MDsrK3Q8cjspbj1pLGk9ZVt0XSxvKz1uWzFdKmlbMF0tblswXSppWzFdO3JldHVybiBvLzJ9dmFyICQ4dD1NKCgpPT57fSk7ZnVuY3Rpb24gSzh0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG49MCxpPTAsbyxhPWVbci0xXSxzLGw9MDsrK3Q8cjspbz1hLGE9ZVt0XSxsKz1zPW9bMF0qYVsxXS1hWzBdKm9bMV0sbis9KG9bMF0rYVswXSkqcyxpKz0ob1sxXSthWzFdKSpzO3JldHVybiBsKj0zLFtuL2wsaS9sXX12YXIgWjh0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKOHQoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pLSh0WzFdLWVbMV0pKihyWzBdLWVbMF0pfXZhciBROHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGQ2ZShlLHQpe3JldHVybiBlWzBdLXRbMF18fGVbMV0tdFsxXX1mdW5jdGlvbiB0UnQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9WzAsMV0sbj0yLGk9MjtpPHQ7KytpKXtmb3IoO24+MSYmSjh0KGVbcltuLTJdXSxlW3Jbbi0xXV0sZVtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIGVSdChlKXtpZigocj1lLmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgdCxyLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpO2Zvcih0PTA7dDxyOysrdCluW3RdPVsrZVt0XVswXSwrZVt0XVsxXSx0XTtmb3Iobi5zb3J0KGQ2ZSksdD0wO3Q8cjsrK3QpaVt0XT1bblt0XVswXSwtblt0XVsxXV07dmFyIG89dFJ0KG4pLGE9dFJ0KGkpLHM9YVswXT09PW9bMF0sbD1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2Zvcih0PW8ubGVuZ3RoLTE7dD49MDstLXQpYy5wdXNoKGVbbltvW3RdXVsyXV0pO2Zvcih0PStzO3Q8YS5sZW5ndGgtbDsrK3QpYy5wdXNoKGVbblthW3RdXVsyXV0pO3JldHVybiBjfXZhciByUnQ9TSgoKT0+e1E4dCgpfSk7ZnVuY3Rpb24gblJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX12YXIgaVJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBvUnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9dmFyIGFSdD1NKCgpPT57fSk7dmFyIHNSdD1NKCgpPT57JDh0KCk7Wjh0KCk7clJ0KCk7aVJ0KCk7YVJ0KCl9KTtmdW5jdGlvbiBsUnQoZSl7dmFyIHQ9K3RoaXMuX3guY2FsbChudWxsLGUpLHI9K3RoaXMuX3kuY2FsbChudWxsLGUpO3JldHVybiBjUnQodGhpcy5jb3Zlcih0LHIpLHQscixlKX1mdW5jdGlvbiBjUnQoZSx0LHIsbil7aWYoaXNOYU4odCl8fGlzTmFOKHIpKXJldHVybiBlO3ZhciBpLG89ZS5fcm9vdCxhPXtkYXRhOm59LHM9ZS5feDAsbD1lLl95MCxjPWUuX3gxLHU9ZS5feTEsaCxmLHAsZCxnLF8seSx4O2lmKCFvKXJldHVybiBlLl9yb290PWEsZTtmb3IoO28ubGVuZ3RoOylpZigoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9ZixpPW8sIShvPW9beT1fPDwxfGddKSlyZXR1cm4gaVt5XT1hLGU7aWYocD0rZS5feC5jYWxsKG51bGwsby5kYXRhKSxkPStlLl95LmNhbGwobnVsbCxvLmRhdGEpLHQ9PT1wJiZyPT09ZClyZXR1cm4gYS5uZXh0PW8saT9pW3ldPWE6ZS5fcm9vdD1hLGU7ZG8gaT1pP2lbeV09bmV3IEFycmF5KDQpOmUuX3Jvb3Q9bmV3IEFycmF5KDQpLChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mO3doaWxlKCh5PV88PDF8Zyk9PT0oeD0oZD49Zik8PDF8cD49aCkpO3JldHVybiBpW3hdPW8saVt5XT1hLGV9ZnVuY3Rpb24gdVJ0KGUpe3ZhciB0LHIsbj1lLmxlbmd0aCxpLG8sYT1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iocj0wO3I8bjsrK3IpaXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsdD1lW3JdKSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKXx8KGFbcl09aSxzW3JdPW8saTxsJiYobD1pKSxpPnUmJih1PWkpLG88YyYmKGM9byksbz5oJiYoaD1vKSk7Zm9yKHU8bCYmKGw9dGhpcy5feDAsdT10aGlzLl94MSksaDxjJiYoYz10aGlzLl95MCxoPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrciljUnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIGhSdD1NKCgpPT57fSk7ZnVuY3Rpb24gZlJ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZSBpZihyPmV8fGU+aXx8bj50fHx0Pm8pe3ZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3N3aXRjaChjPSh0PChuK28pLzIpPDwxfGU8KHIraSkvMil7Y2FzZSAwOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIsaT1yK2Esbz1uK2EsZT5pfHx0Pm8pO2JyZWFrfWNhc2UgMTp7ZG8gbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bDt3aGlsZShhKj0yLHI9aS1hLG89bithLHI+ZXx8dD5vKTticmVha31jYXNlIDI6e2RvIGw9bmV3IEFycmF5KDQpLGxbY109cyxzPWw7d2hpbGUoYSo9MixpPXIrYSxuPW8tYSxlPml8fG4+dCk7YnJlYWt9Y2FzZSAzOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIscj1pLWEsbj1vLWEscj5lfHxuPnQpO2JyZWFrfX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9ZWxzZSByZXR1cm4gdGhpcztyZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBwUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGRSdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciBtUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGdSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgX1J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIgeU89TSgoKT0+e30pO2Z1bmN0aW9uIHlSdChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBFbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IEVvKHBbM10sXyx5LGwsYyksbmV3IEVvKHBbMl0sYSx5LF8sYyksbmV3IEVvKHBbMV0sXyxzLGwseSksbmV3IEVvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIHZSdD1NKCgpPT57eU8oKX0pO2Z1bmN0aW9uIHhSdChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiBiUnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciB3UnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFNSdCgpe3JldHVybiB0aGlzLl9yb290fXZhciBNUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEVSdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIFRSdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ1J0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBFbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgRW8oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgRW8oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgRW8oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgRW8oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIEFSdD1NKCgpPT57eU8oKX0pO2Z1bmN0aW9uIFBSdChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgRW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgRW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgRW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgRW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgRW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgSVJ0PU0oKCk9Pnt5TygpfSk7ZnVuY3Rpb24gTFJ0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIGtSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIFJSdD1NKCgpPT57fSk7ZnVuY3Rpb24gTlJ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIERSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIE9SdD1NKCgpPT57fSk7ZnVuY3Rpb24gdk8oZSx0LHIpe3ZhciBuPW5ldyB0dHQodD09bnVsbD9MUnQ6dCxyPT1udWxsP05SdDpyLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIGU9PW51bGw/bjpuLmFkZEFsbChlKX1mdW5jdGlvbiB0dHQoZSx0LHIsbixpLG8pe3RoaXMuX3g9ZSx0aGlzLl95PXQsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiB6UnQoZSl7Zm9yKHZhciB0PXtkYXRhOmUuZGF0YX0scj10O2U9ZS5uZXh0OylyPXIubmV4dD17ZGF0YTplLmRhdGF9O3JldHVybiB0fXZhciBYYSxGUnQ9TSgoKT0+e2hSdCgpO3BSdCgpO21SdCgpO19SdCgpO3ZSdCgpO3dSdCgpO01SdCgpO1RSdCgpO0FSdCgpO0lSdCgpO1JSdCgpO09SdCgpO1hhPXZPLnByb3RvdHlwZT10dHQucHJvdG90eXBlO1hhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgdHR0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSksdD10aGlzLl9yb290LHIsbjtpZighdClyZXR1cm4gZTtpZighdC5sZW5ndGgpcmV0dXJuIGUuX3Jvb3Q9elJ0KHQpLGU7Zm9yKHI9W3tzb3VyY2U6dCx0YXJnZXQ6ZS5fcm9vdD1uZXcgQXJyYXkoNCl9XTt0PXIucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKG49dC5zb3VyY2VbaV0pJiYobi5sZW5ndGg/ci5wdXNoKHtzb3VyY2U6bix0YXJnZXQ6dC50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6dC50YXJnZXRbaV09elJ0KG4pKTtyZXR1cm4gZX07WGEuYWRkPWxSdDtYYS5hZGRBbGw9dVJ0O1hhLmNvdmVyPWZSdDtYYS5kYXRhPWRSdDtYYS5leHRlbnQ9Z1J0O1hhLmZpbmQ9eVJ0O1hhLnJlbW92ZT14UnQ7WGEucmVtb3ZlQWxsPWJSdDtYYS5yb290PVNSdDtYYS5zaXplPUVSdDtYYS52aXNpdD1DUnQ7WGEudmlzaXRBZnRlcj1QUnQ7WGEueD1rUnQ7WGEueT1EUnR9KTt2YXIgQlJ0PU0oKCk9PntGUnQoKX0pO3ZhciBIUnQsVlJ0PU0oKCk9PntIUnQ9W10uc2xpY2V9KTtmdW5jdGlvbiBldHQoZSl7dGhpcy5fc2l6ZT1lLHRoaXMuX2NhbGw9dGhpcy5fZXJyb3I9bnVsbCx0aGlzLl90YXNrcz1bXSx0aGlzLl9kYXRhPVtdLHRoaXMuX3dhaXRpbmc9dGhpcy5fYWN0aXZlPXRoaXMuX2VuZGVkPXRoaXMuX3N0YXJ0PTB9ZnVuY3Rpb24gVVJ0KGUpe2lmKCFlLl9zdGFydCl0cnl7ZzZlKGUpfWNhdGNoKHQpe2lmKGUuX3Rhc2tzW2UuX2VuZGVkK2UuX2FjdGl2ZS0xXSlydHQoZSx0KTtlbHNlIGlmKCFlLl9kYXRhKXRocm93IHR9fWZ1bmN0aW9uIGc2ZShlKXtmb3IoO2UuX3N0YXJ0PWUuX3dhaXRpbmcmJmUuX2FjdGl2ZTxlLl9zaXplOyl7dmFyIHQ9ZS5fZW5kZWQrZS5fYWN0aXZlLHI9ZS5fdGFza3NbdF0sbj1yLmxlbmd0aC0xLGk9cltuXTtyW25dPV82ZShlLHQpLC0tZS5fd2FpdGluZywrK2UuX2FjdGl2ZSxyPWkuYXBwbHkobnVsbCxyKSxlLl90YXNrc1t0XSYmKGUuX3Rhc2tzW3RdPXJ8fG02ZSl9fWZ1bmN0aW9uIF82ZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4peyFlLl90YXNrc1t0XXx8KC0tZS5fYWN0aXZlLCsrZS5fZW5kZWQsZS5fdGFza3NbdF09bnVsbCxlLl9lcnJvcj09bnVsbCYmKHIhPW51bGw/cnR0KGUscik6KGUuX2RhdGFbdF09bixlLl93YWl0aW5nP1VSdChlKTp4TyhlKSkpKX19ZnVuY3Rpb24gcnR0KGUsdCl7dmFyIHI9ZS5fdGFza3MubGVuZ3RoLG47Zm9yKGUuX2Vycm9yPXQsZS5fZGF0YT12b2lkIDAsZS5fd2FpdGluZz1OYU47LS1yPj0wOylpZigobj1lLl90YXNrc1tyXSkmJihlLl90YXNrc1tyXT1udWxsLG4uYWJvcnQpKXRyeXtuLmFib3J0KCl9Y2F0Y2goaSl7fWUuX2FjdGl2ZT1OYU4seE8oZSl9ZnVuY3Rpb24geE8oZSl7aWYoIWUuX2FjdGl2ZSYmZS5fY2FsbCl7dmFyIHQ9ZS5fZGF0YTtlLl9kYXRhPXZvaWQgMCxlLl9jYWxsKGUuX2Vycm9yLHQpfX1mdW5jdGlvbiBiTyhlKXtpZihlPT1udWxsKWU9MS8wO2Vsc2UgaWYoISgoZT0rZSk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb25jdXJyZW5jeSIpO3JldHVybiBuZXcgZXR0KGUpfXZhciBtNmUscVJ0PU0oKCk9PntWUnQoKTttNmU9e307ZXR0LnByb3RvdHlwZT1iTy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmV0dCxkZWZlcjpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2siKTtpZih0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcigiZGVmZXIgYWZ0ZXIgYXdhaXQiKTtpZih0aGlzLl9lcnJvciE9bnVsbClyZXR1cm4gdGhpczt2YXIgdD1IUnQuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHQucHVzaChlKSwrK3RoaXMuX3dhaXRpbmcsdGhpcy5fdGFza3MucHVzaCh0KSxVUnQodGhpcyksdGhpc30sYWJvcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXJyb3I9PW51bGwmJnJ0dCh0aGlzLG5ldyBFcnJvcigiYWJvcnQiKSksdGhpc30sYXdhaXQ6ZnVuY3Rpb24oZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrIik7aWYodGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIGF3YWl0Iik7cmV0dXJuIHRoaXMuX2NhbGw9ZnVuY3Rpb24odCxyKXtlLmFwcGx5KG51bGwsW3RdLmNvbmNhdChyKSl9LHhPKHRoaXMpLHRoaXN9LGF3YWl0QWxsOmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjayIpO2lmKHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSBhd2FpdCIpO3JldHVybiB0aGlzLl9jYWxsPWUseE8odGhpcyksdGhpc319fSk7dmFyIEdSdD1NKCgpPT57cVJ0KCl9KTtmdW5jdGlvbiBiYygpe3JldHVybiBNYXRoLnJhbmRvbSgpfXZhciAkeT1NKCgpPT57fSk7dmFyIFdSdCxZUnQ9TSgoKT0+eyR5KCk7V1J0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3JldHVybiBuPW49PW51bGw/MDorbixpPWk9PW51bGw/MToraSxhcmd1bWVudHMubGVuZ3RoPT09MT8oaT1uLG49MCk6aS09bixmdW5jdGlvbigpe3JldHVybiB0KCkqaStufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgd08sbnR0PU0oKCk9PnskeSgpO3dPPWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3ZhciBvLGE7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGZ1bmN0aW9uKCl7dmFyIHM7aWYobyE9bnVsbClzPW8sbz1udWxsO2Vsc2UgZG8gbz10KCkqMi0xLHM9dCgpKjItMSxhPW8qbytzKnM7d2hpbGUoIWF8fGE+MSk7cmV0dXJuIG4raSpzKk1hdGguc3FydCgtMipNYXRoLmxvZyhhKS9hKX19cmV0dXJuIHIuc291cmNlPWUscn0oYmMpfSk7dmFyIGpSdCxYUnQ9TSgoKT0+eyR5KCk7bnR0KCk7alJ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcigpe3ZhciBuPXdPLnNvdXJjZSh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKG4oKSl9fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciBTTyxpdHQ9TSgoKT0+eyR5KCk7U089ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgaT0wLG89MDtvPG47KytvKWkrPXQoKTtyZXR1cm4gaX19cmV0dXJuIHIuc291cmNlPWUscn0oYmMpfSk7dmFyICRSdCxLUnQ9TSgoKT0+eyR5KCk7aXR0KCk7JFJ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXt2YXIgaT1TTy5zb3VyY2UodCkobik7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkoKS9ufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgWlJ0LEpSdD1NKCgpPT57JHkoKTtaUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYmMpfSk7dmFyIFFSdD1NKCgpPT57WVJ0KCk7bnR0KCk7WFJ0KCk7S1J0KCk7aXR0KCk7SlJ0KCl9KTtmdW5jdGlvbiBKMihlLHQpe3ZhciByLG49dnMoImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLGksbz1KaSgpLGE9bmV3IFhNTEh0dHBSZXF1ZXN0LHM9bnVsbCxsPW51bGwsYyx1LGg9MDt0eXBlb2YgWERvbWFpblJlcXVlc3QhPSJ1bmRlZmluZWQiJiYhKCJ3aXRoQ3JlZGVudGlhbHMiaW4gYSkmJi9eKGh0dHAocyk/Oik/XC9cLy8udGVzdChlKSYmKGE9bmV3IFhEb21haW5SZXF1ZXN0KSwib25sb2FkImluIGE/YS5vbmxvYWQ9YS5vbmVycm9yPWEub250aW1lb3V0PWY6YS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24ocCl7YS5yZWFkeVN0YXRlPjMmJmYocCl9O2Z1bmN0aW9uIGYocCl7dmFyIGQ9YS5zdGF0dXMsZztpZighZCYmdjZlKGEpfHxkPj0yMDAmJmQ8MzAwfHxkPT09MzA0KXtpZihjKXRyeXtnPWMuY2FsbChyLGEpfWNhdGNoKF8pe24uY2FsbCgiZXJyb3IiLHIsXyk7cmV0dXJufWVsc2UgZz1hO24uY2FsbCgibG9hZCIscixnKX1lbHNlIG4uY2FsbCgiZXJyb3IiLHIscCl9aWYoYS5vbnByb2dyZXNzPWZ1bmN0aW9uKHApe24uY2FsbCgicHJvZ3Jlc3MiLHIscCl9LHI9e2hlYWRlcjpmdW5jdGlvbihwLGQpe3JldHVybiBwPShwKyIiKS50b0xvd2VyQ2FzZSgpLGFyZ3VtZW50cy5sZW5ndGg8Mj9vLmdldChwKTooZD09bnVsbD9vLnJlbW92ZShwKTpvLnNldChwLGQrIiIpLHIpfSxtaW1lVHlwZTpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1wPT1udWxsP251bGw6cCsiIixyKTppfSxyZXNwb25zZVR5cGU6ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9cCxyKTp1fSx0aW1lb3V0OmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPStwLHIpOmh9LHVzZXI6ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT9zOihzPXA9PW51bGw/bnVsbDpwKyIiLHIpfSxwYXNzd29yZDpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP2w6KGw9cD09bnVsbD9udWxsOnArIiIscil9LHJlc3BvbnNlOmZ1bmN0aW9uKHApe3JldHVybiBjPXAscn0sZ2V0OmZ1bmN0aW9uKHAsZCl7cmV0dXJuIHIuc2VuZCgiR0VUIixwLGQpfSxwb3N0OmZ1bmN0aW9uKHAsZCl7cmV0dXJuIHIuc2VuZCgiUE9TVCIscCxkKX0sc2VuZDpmdW5jdGlvbihwLGQsZyl7cmV0dXJuIGEub3BlbihwLGUsITAscyxsKSxpIT1udWxsJiYhby5oYXMoImFjY2VwdCIpJiZvLnNldCgiYWNjZXB0IixpKyIsKi8qIiksYS5zZXRSZXF1ZXN0SGVhZGVyJiZvLmVhY2goZnVuY3Rpb24oXyx5KXthLnNldFJlcXVlc3RIZWFkZXIoeSxfKX0pLGkhPW51bGwmJmEub3ZlcnJpZGVNaW1lVHlwZSYmYS5vdmVycmlkZU1pbWVUeXBlKGkpLHUhPW51bGwmJihhLnJlc3BvbnNlVHlwZT11KSxoPjAmJihhLnRpbWVvdXQ9aCksZz09bnVsbCYmdHlwZW9mIGQ9PSJmdW5jdGlvbiImJihnPWQsZD1udWxsKSxnIT1udWxsJiZnLmxlbmd0aD09PTEmJihnPXk2ZShnKSksZyE9bnVsbCYmci5vbigiZXJyb3IiLGcpLm9uKCJsb2FkIixmdW5jdGlvbihfKXtnKG51bGwsXyl9KSxuLmNhbGwoImJlZm9yZXNlbmQiLHIsYSksYS5zZW5kKGQ9PW51bGw/bnVsbDpkKSxyfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiBhLmFib3J0KCkscn0sb246ZnVuY3Rpb24oKXt2YXIgcD1uLm9uLmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gcD09PW4/cjpwfX0sdCE9bnVsbCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO3JldHVybiByLmdldCh0KX1yZXR1cm4gcn1mdW5jdGlvbiB5NmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0PT1udWxsP3I6bnVsbCl9fWZ1bmN0aW9uIHY2ZShlKXt2YXIgdD1lLnJlc3BvbnNlVHlwZTtyZXR1cm4gdCYmdCE9PSJ0ZXh0Ij9lLnJlc3BvbnNlOmUucmVzcG9uc2VUZXh0fXZhciBNTz1NKCgpPT57VGIoKTtrbSgpfSk7ZnVuY3Rpb24gVGcoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT1KMihyKS5taW1lVHlwZShlKS5yZXNwb25zZSh0KTtpZihuIT1udWxsKXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrbik7cmV0dXJuIGkuZ2V0KG4pfXJldHVybiBpfX12YXIgaUM9TSgoKT0+e01PKCl9KTt2YXIgdE50LGVOdD1NKCgpPT57aUMoKTt0TnQ9VGcoInRleHQvaHRtbCIsZnVuY3Rpb24oZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGUucmVzcG9uc2VUZXh0KX0pfSk7dmFyIHJOdCxuTnQ9TSgoKT0+e2lDKCk7ck50PVRnKCJhcHBsaWNhdGlvbi9qc29uIixmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5wYXJzZShlLnJlc3BvbnNlVGV4dCl9KX0pO3ZhciBpTnQsb050PU0oKCk9PntpQygpO2lOdD1UZygidGV4dC9wbGFpbiIsZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVzcG9uc2VUZXh0fSl9KTt2YXIgYU50LHNOdD1NKCgpPT57aUMoKTthTnQ9VGcoImFwcGxpY2F0aW9uL3htbCIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXNwb25zZVhNTDtpZighdCl0aHJvdyBuZXcgRXJyb3IoInBhcnNlIGVycm9yIik7cmV0dXJuIHR9KX0pO2Z1bmN0aW9uIEVPKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXthcmd1bWVudHMubGVuZ3RoPDMmJihpPW4sbj1udWxsKTt2YXIgbz1KMihyKS5taW1lVHlwZShlKTtyZXR1cm4gby5yb3c9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/by5yZXNwb25zZSh4NmUodCxuPWEpKTpufSxvLnJvdyhuKSxpP28uZ2V0KGkpOm99fWZ1bmN0aW9uIHg2ZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZShyLnJlc3BvbnNlVGV4dCx0KX19dmFyIG90dD1NKCgpPT57TU8oKX0pO3ZhciBsTnQsY050PU0oKCk9PntVRSgpO290dCgpO2xOdD1FTygidGV4dC9jc3YiLENiKX0pO3ZhciB1TnQsaE50PU0oKCk9PntVRSgpO290dCgpO3VOdD1FTygidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIsQWIpfSk7dmFyIGZOdD1NKCgpPT57TU8oKTtlTnQoKTtuTnQoKTtvTnQoKTtzTnQoKTtjTnQoKTtoTnQoKX0pO2Z1bmN0aW9uIHBmKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciBLeT1NKCgpPT57fSk7ZnVuY3Rpb24gb0MoZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9YjZlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gYjZlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBwZihlKHQpLHIpfX12YXIgYXR0PU0oKCk9PntLeSgpfSk7dmFyIHBOdCxkTnQsdzZlLGRmLHN0dD1NKCgpPT57S3koKTthdHQoKTtwTnQ9b0MocGYpLGROdD1wTnQucmlnaHQsdzZlPXBOdC5sZWZ0LGRmPWROdH0pO3ZhciBsdHQ9TSgoKT0+e30pO3ZhciBtTnQ9TSgoKT0+e2x0dCgpfSk7dmFyIGdOdD1NKCgpPT57fSk7ZnVuY3Rpb24gUTIoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX12YXIgdHc9TSgoKT0+e30pO3ZhciBjdHQ9TSgoKT0+e3R3KCl9KTt2YXIgdXR0PU0oKCk9PntjdHQoKX0pO3ZhciBodHQ9TSgoKT0+e30pO3ZhciBfTnQsTTZlLEU2ZSxmdHQ9TSgoKT0+e19OdD1BcnJheS5wcm90b3R5cGUsTTZlPV9OdC5zbGljZSxFNmU9X050Lm1hcH0pO3ZhciB5TnQ9TSgoKT0+e30pO3ZhciB2TnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFRPKGUsdCxyKXtlPStlLHQ9K3Qscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyh0PWUsZT0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPU1hdGgubWF4KDAsTWF0aC5jZWlsKCh0LWUpL3IpKXwwLG89bmV3IEFycmF5KGkpOysrbjxpOylvW25dPWUrbipyO3JldHVybiBvfXZhciBwdHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGFDKGUsdCxyKXt2YXIgbixpPS0xLG8sYSxzO2lmKHQ9K3QsZT0rZSxyPStyLGU9PT10JiZyPjApcmV0dXJuW2VdO2lmKChuPXQ8ZSkmJihvPWUsZT10LHQ9byksKHM9ZXcoZSx0LHIpKT09PTB8fCFpc0Zpbml0ZShzKSlyZXR1cm5bXTtpZihzPjApZm9yKGU9TWF0aC5jZWlsKGUvcyksdD1NYXRoLmZsb29yKHQvcyksYT1uZXcgQXJyYXkobz1NYXRoLmNlaWwodC1lKzEpKTsrK2k8bzspYVtpXT0oZStpKSpzO2Vsc2UgZm9yKGU9TWF0aC5mbG9vcihlKnMpLHQ9TWF0aC5jZWlsKHQqcyksYT1uZXcgQXJyYXkobz1NYXRoLmNlaWwoZS10KzEpKTsrK2k8bzspYVtpXT0oZS1pKS9zO3JldHVybiBuJiZhLnJldmVyc2UoKSxhfWZ1bmN0aW9uIGV3KGUsdCxyKXt2YXIgbj0odC1lKS9NYXRoLm1heCgwLHIpLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTApLG89bi9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8obz49ZHR0PzEwOm8+PW10dD81Om8+PWd0dD8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKG8+PWR0dD8xMDpvPj1tdHQ/NTpvPj1ndHQ/MjoxKX1mdW5jdGlvbiBaeShlLHQscil7dmFyIG49TWF0aC5hYnModC1lKS9NYXRoLm1heCgwLHIpLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTApKSxvPW4vaTtyZXR1cm4gbz49ZHR0P2kqPTEwOm8+PW10dD9pKj01Om8+PWd0dCYmKGkqPTIpLHQ8ZT8taTppfXZhciBkdHQsbXR0LGd0dCxfdHQ9TSgoKT0+e2R0dD1NYXRoLnNxcnQoNTApLG10dD1NYXRoLnNxcnQoMTApLGd0dD1NYXRoLnNxcnQoMil9KTt2YXIgeXR0PU0oKCk9Pnt9KTt2YXIgeE50PU0oKCk9PntmdHQoKTtzdHQoKTt5TnQoKTtodHQoKTt2TnQoKTtwdHQoKTtfdHQoKTt5dHQoKX0pO2Z1bmN0aW9uIHNDKGUsdCxyKXtpZihyPT1udWxsJiYocj1RMiksISEobj1lLmxlbmd0aCkpe2lmKCh0PSt0KTw9MHx8bjwyKXJldHVybityKGVbMF0sMCxlKTtpZih0Pj0xKXJldHVybityKGVbbi0xXSxuLTEsZSk7dmFyIG4saT0obi0xKSp0LG89TWF0aC5mbG9vcihpKSxhPStyKGVbb10sbyxlKSxzPStyKGVbbysxXSxvKzEsZSk7cmV0dXJuIGErKHMtYSkqKGktbyl9fXZhciBDTz1NKCgpPT57dHcoKX0pO3ZhciBiTnQ9TSgoKT0+e2Z0dCgpO0t5KCk7dHcoKTtDTygpfSk7dmFyIHdOdD1NKCgpPT57dXR0KCl9KTt2YXIgU050PU0oKCk9Pnt9KTt2YXIgTU50PU0oKCk9Pnt0dygpfSk7dmFyIEVOdD1NKCgpPT57S3koKTt0dygpO0NPKCl9KTt2YXIgVE50PU0oKCk9Pnt9KTt2YXIgdnR0PU0oKCk9Pnt9KTt2YXIgQ050PU0oKCk9Pnt9KTt2YXIgQU50PU0oKCk9PntLeSgpfSk7dmFyIFBOdD1NKCgpPT57fSk7dmFyIElOdD1NKCgpPT57fSk7dmFyIHh0dD1NKCgpPT57dnR0KCl9KTt2YXIgTE50PU0oKCk9Pnt4dHQoKX0pO3ZhciBtZj1NKCgpPT57c3R0KCk7S3koKTthdHQoKTttTnQoKTtnTnQoKTt1dHQoKTtodHQoKTt4TnQoKTtiTnQoKTt3TnQoKTt5dHQoKTtTTnQoKTtNTnQoKTtFTnQoKTtUTnQoKTt2dHQoKTtsdHQoKTtDTnQoKTtDTygpO3B0dCgpO0FOdCgpO1BOdCgpO0lOdCgpO190dCgpO3h0dCgpO2N0dCgpO0xOdCgpfSk7ZnVuY3Rpb24gQU8oKXt9ZnVuY3Rpb24ga050KGUsdCl7dmFyIHI9bmV3IEFPO2lmKGUgaW5zdGFuY2VvZiBBTyllLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgZmwsSnksUE89TSgoKT0+e2ZsPSIkIjtBTy5wcm90b3R5cGU9a050LnByb3RvdHlwZT17Y29uc3RydWN0b3I6QU8saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBmbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tmbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbZmwrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZmwrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09ZmwmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1mbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWZsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1mbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtKeT1rTnR9KTt2YXIgUk50PU0oKCk9PntQTygpfSk7ZnVuY3Rpb24gSU8oKXt9ZnVuY3Rpb24gTDZlKGUsdCl7dmFyIHI9bmV3IElPO2lmKGUgaW5zdGFuY2VvZiBJTyllLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIgUXksTk50PU0oKCk9PntQTygpO1F5PUp5LnByb3RvdHlwZTtJTy5wcm90b3R5cGU9TDZlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6SU8saGFzOlF5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbZmwrZV09ZSx0aGlzfSxyZW1vdmU6UXkucmVtb3ZlLGNsZWFyOlF5LmNsZWFyLHZhbHVlczpReS5rZXlzLHNpemU6UXkuc2l6ZSxlbXB0eTpReS5lbXB0eSxlYWNoOlF5LmVhY2h9fSk7dmFyIEROdD1NKCgpPT57fSk7dmFyIE9OdD1NKCgpPT57fSk7dmFyIHpOdD1NKCgpPT57fSk7dmFyIEZOdD1NKCgpPT57Uk50KCk7Tk50KCk7UE8oKTtETnQoKTtPTnQoKTt6TnQoKX0pO3ZhciBCTnQscncscGwsQ2c9TSgoKT0+e0JOdD1BcnJheS5wcm90b3R5cGUscnc9Qk50Lm1hcCxwbD1CTnQuc2xpY2V9KTtmdW5jdGlvbiBudyhlKXt2YXIgdD1KeSgpLHI9W10sbj1MTztlPWU9PW51bGw/W106cGwuY2FsbChlKTtmdW5jdGlvbiBpKG8pe3ZhciBhPW8rIiIscz10LmdldChhKTtpZighcyl7aWYobiE9PUxPKXJldHVybiBuO3Quc2V0KGEscz1yLnB1c2gobykpfXJldHVybiBlWyhzLTEpJWUubGVuZ3RoXX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24obyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHIuc2xpY2UoKTtyPVtdLHQ9SnkoKTtmb3IodmFyIGE9LTEscz1vLmxlbmd0aCxsLGM7KythPHM7KXQuaGFzKGM9KGw9b1thXSkrIiIpfHx0LnNldChjLHIucHVzaChsKSk7cmV0dXJuIGl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cGwuY2FsbChvKSxpKTplLnNsaWNlKCl9LGkudW5rbm93bj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1vLGkpOm59LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBudygpLmRvbWFpbihyKS5yYW5nZShlKS51bmtub3duKG4pfSxpfXZhciBMTyxidHQ9TSgoKT0+e0ZOdCgpO0NnKCk7TE89e25hbWU6ImltcGxpY2l0In19KTtmdW5jdGlvbiBsQygpe3ZhciBlPW53KCkudW5rbm93bih2b2lkIDApLHQ9ZS5kb21haW4scj1lLnJhbmdlLG49WzAsMV0saSxvLGE9ITEscz0wLGw9MCxjPS41O2RlbGV0ZSBlLnVua25vd247ZnVuY3Rpb24gdSgpe3ZhciBoPXQoKS5sZW5ndGgsZj1uWzFdPG5bMF0scD1uW2YtMF0sZD1uWzEtZl07aT0oZC1wKS9NYXRoLm1heCgxLGgtcytsKjIpLGEmJihpPU1hdGguZmxvb3IoaSkpLHArPShkLXAtaSooaC1zKSkqYyxvPWkqKDEtcyksYSYmKHA9TWF0aC5yb3VuZChwKSxvPU1hdGgucm91bmQobykpO3ZhciBnPVRPKGgpLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gcCtpKl99KTtyZXR1cm4gcihmP2cucmV2ZXJzZSgpOmcpfXJldHVybiBlLmRvbWFpbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odChoKSx1KCkpOnQoKX0sZS5yYW5nZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1bK2hbMF0sK2hbMV1dLHUoKSk6bi5zbGljZSgpfSxlLnJhbmdlUm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIG49WytoWzBdLCtoWzFdXSxhPSEwLHUoKX0sZS5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gb30sZS5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIGl9LGUucm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ISFoLHUoKSk6YX0sZS5wYWRkaW5nPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWw9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGgpKSx1KCkpOnN9LGUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpzfSxlLnBhZGRpbmdPdXRlcj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6bH0sZS5hbGlnbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6Y30sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGxDKCkuZG9tYWluKHQoKSkucmFuZ2Uobikucm91bmQoYSkucGFkZGluZ0lubmVyKHMpLnBhZGRpbmdPdXRlcihsKS5hbGlnbihjKX0sdSgpfWZ1bmN0aW9uIEhOdChlKXt2YXIgdD1lLmNvcHk7cmV0dXJuIGUucGFkZGluZz1lLnBhZGRpbmdPdXRlcixkZWxldGUgZS5wYWRkaW5nSW5uZXIsZGVsZXRlIGUucGFkZGluZ091dGVyLGUuY29weT1mdW5jdGlvbigpe3JldHVybiBITnQodCgpKX0sZX1mdW5jdGlvbiBWTnQoKXtyZXR1cm4gSE50KGxDKCkucGFkZGluZ0lubmVyKDEpKX12YXIgVU50PU0oKCk9PnttZigpO2J0dCgpfSk7ZnVuY3Rpb24gaXcoZSx0LHIpe2UucHJvdG90eXBlPXQucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj1lfWZ1bmN0aW9uIGNDKGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByfXZhciB3dHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGUxKCl7fWZ1bmN0aW9uIEdOdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIEI2ZSgpe3JldHVybiBLTnQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gV050KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gUGcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9azZlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/WU50KHQpOnI9PT0zP25ldyBoYSh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/a08odD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/a08odD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1SNmUuZXhlYyhlKSk/bmV3IGhhKHRbMV0sdFsyXSx0WzNdLDEpOih0PU42ZS5leGVjKGUpKT9uZXcgaGEodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9RDZlLmV4ZWMoZSkpP2tPKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PU82ZS5leGVjKGUpKT9rTyh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD16NmUuZXhlYyhlKSk/JE50KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9RjZlLmV4ZWMoZSkpPyROdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOnFOdC5oYXNPd25Qcm9wZXJ0eShlKT9ZTnQocU50W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgaGEoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBZTnQoZSl7cmV0dXJuIG5ldyBoYShlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24ga08oZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBoYShlLHQscixuKX1mdW5jdGlvbiBFdHQoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBlMXx8KGU9UGcoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgaGEoZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IGhhfWZ1bmN0aW9uIGF3KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9FdHQoZSk6bmV3IGhhKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBoYShlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gak50KCl7cmV0dXJuIiMiK1N0dCh0aGlzLnIpK1N0dCh0aGlzLmcpK1N0dCh0aGlzLmIpfWZ1bmN0aW9uIFhOdCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBTdHQoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gJE50KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgZ2YoZSx0LHIsbil9ZnVuY3Rpb24gS050KGUpe2lmKGUgaW5zdGFuY2VvZiBnZilyZXR1cm4gbmV3IGdmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGUxfHwoZT1QZyhlKSksIWUpcmV0dXJuIG5ldyBnZjtpZihlIGluc3RhbmNlb2YgZ2YpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgZ2YoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBaTnQoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0tOdChlKTpuZXcgZ2YoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGdmKGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBNdHQoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyIEFnLHQxLG93LHVDLF9mLGs2ZSxSNmUsTjZlLEQ2ZSxPNmUsejZlLEY2ZSxxTnQsVHR0PU0oKCk9Pnt3dHQoKTtBZz0uNyx0MT0xL0FnLG93PSJcXHMqKFsrLV0/XFxkKylcXHMqIix1Qz0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixfZj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsazZlPS9eIyhbMC05YS1mXXszLDh9KSQvLFI2ZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbb3csb3csb3ddKyJcXCkkIiksTjZlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tfZixfZixfZl0rIlxcKSQiKSxENmU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tvdyxvdyxvdyx1Q10rIlxcKSQiKSxPNmU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tfZixfZixfZix1Q10rIlxcKSQiKSx6NmU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW3VDLF9mLF9mXSsiXFwpJCIpLEY2ZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW3VDLF9mLF9mLHVDXSsiXFwpJCIpLHFOdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtpdyhlMSxQZyx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpHTnQsZm9ybWF0SGV4OkdOdCxmb3JtYXRIc2w6QjZlLGZvcm1hdFJnYjpXTnQsdG9TdHJpbmc6V050fSk7aXcoaGEsYXcsY0MoZTEse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dDE6TWF0aC5wb3codDEsZSksbmV3IGhhKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBoYSh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmpOdCxmb3JtYXRIZXg6ak50LGZvcm1hdFJnYjpYTnQsdG9TdHJpbmc6WE50fSkpO2l3KGdmLFpOdCxjQyhlMSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD90MTpNYXRoLnBvdyh0MSxlKSxuZXcgZ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9BZzpNYXRoLnBvdyhBZyxlKSxuZXcgZ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBoYShNdHQoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksTXR0KGUsaSxuKSxNdHQoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgSk50LFFOdCx0RHQ9TSgoKT0+e0pOdD1NYXRoLlBJLzE4MCxRTnQ9MTgwL01hdGguUEl9KTtmdW5jdGlvbiBINmUoZSl7aWYoZSBpbnN0YW5jZW9mIHIxKXJldHVybiBuZXcgcjEoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2YgaGF8fChlPUV0dChlKSk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9KG5EdCpuK2VEdCp0LXJEdCpyKS8obkR0K2VEdC1yRHQpLG89bi1pLGE9KGhDKihyLWkpLUF0dCpvKS9STyxzPU1hdGguc3FydChhKmErbypvKS8oaEMqaSooMS1pKSksbD1zP01hdGguYXRhbjIoYSxvKSpRTnQtMTIwOk5hTjtyZXR1cm4gbmV3IHIxKGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uICRhKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9INmUoZSk6bmV3IHIxKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiByMShlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIGlEdCxDdHQsQXR0LFJPLGhDLGVEdCxyRHQsbkR0LG9EdD1NKCgpPT57d3R0KCk7VHR0KCk7dER0KCk7aUR0PS0uMTQ4NjEsQ3R0PTEuNzgyNzcsQXR0PS0uMjkyMjcsUk89LS45MDY0OSxoQz0xLjk3Mjk0LGVEdD1oQypSTyxyRHQ9aEMqQ3R0LG5EdD1DdHQqQXR0LVJPKmlEdDtpdyhyMSwkYSxjQyhlMSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD90MTpNYXRoLnBvdyh0MSxlKSxuZXcgcjEodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9BZzpNYXRoLnBvdyhBZyxlKSxuZXcgcjEodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKkpOdCx0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgaGEoMjU1Kih0K3IqKGlEdCpuK0N0dCppKSksMjU1Kih0K3IqKEF0dCpuK1JPKmkpKSwyNTUqKHQrciooaEMqbikpLHRoaXMub3BhY2l0eSl9fSkpfSk7dmFyIHN3PU0oKCk9PntUdHQoKTtvRHQoKX0pO2Z1bmN0aW9uIFB0dChlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGFEdChlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsdC0xKTpNYXRoLmZsb29yKHIqdCksaT1lW25dLG89ZVtuKzFdLGE9bj4wP2Vbbi0xXToyKmktbyxzPW48dC0xP2VbbisyXToyKm8taTtyZXR1cm4gUHR0KChyLW4vdCkqdCxhLGksbyxzKX19dmFyIEl0dD1NKCgpPT57fSk7ZnVuY3Rpb24gc0R0KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gUHR0KChyLW4vdCkqdCxpLG8sYSxzKX19dmFyIGxEdD1NKCgpPT57SXR0KCl9KTtmdW5jdGlvbiBsdyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIEx0dD1NKCgpPT57fSk7ZnVuY3Rpb24gY0R0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gVjZlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24gdUR0KGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2NEdChlLHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6bHcoaXNOYU4oZSk/dDplKX1mdW5jdGlvbiBoRHQoZSl7cmV0dXJuKGU9K2UpPT0xP25kOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9WNmUodCxyLGUpOmx3KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIG5kKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2NEdChlLHIpOmx3KGlzTmFOKGUpP3Q6ZSl9dmFyIGt0dD1NKCgpPT57THR0KCl9KTtmdW5jdGlvbiBmRHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGEscztmb3IoYT0wO2E8cjsrK2Epcz1hdyh0W2FdKSxuW2FdPXMucnx8MCxpW2FdPXMuZ3x8MCxvW2FdPXMuYnx8MDtyZXR1cm4gbj1lKG4pLGk9ZShpKSxvPWUobykscy5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIHMucj1uKGwpLHMuZz1pKGwpLHMuYj1vKGwpLHMrIiJ9fX12YXIgUnR0LGE1bixzNW4scER0PU0oKCk9PntzdygpO0l0dCgpO2xEdCgpO2t0dCgpO1J0dD1mdW5jdGlvbiBlKHQpe3ZhciByPWhEdCh0KTtmdW5jdGlvbiBuKGksbyl7dmFyIGE9cigoaT1hdyhpKSkuciwobz1hdyhvKSkucikscz1yKGkuZyxvLmcpLGw9cihpLmIsby5iKSxjPW5kKGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5yPWEodSksaS5nPXModSksaS5iPWwodSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9ZSxufSgxKTthNW49ZkR0KGFEdCksczVuPWZEdChzRHQpfSk7ZnVuY3Rpb24gZER0KGUsdCl7dHx8KHQ9W10pO3ZhciByPWU/TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpOjAsbj10LnNsaWNlKCksaTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGk9MDtpPHI7KytpKW5baV09ZVtpXSooMS1vKSt0W2ldKm87cmV0dXJuIG59fWZ1bmN0aW9uIG1EdChlKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGUpJiYhKGUgaW5zdGFuY2VvZiBEYXRhVmlldyl9dmFyIGdEdD1NKCgpPT57fSk7ZnVuY3Rpb24gX0R0KGUsdCl7dmFyIHI9dD90Lmxlbmd0aDowLG49ZT9NYXRoLm1pbihyLGUubGVuZ3RoKTowLGk9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KHIpLGE7Zm9yKGE9MDthPG47KythKWlbYV09bjEoZVthXSx0W2FdKTtmb3IoO2E8cjsrK2Epb1thXT10W2FdO3JldHVybiBmdW5jdGlvbihzKXtmb3IoYT0wO2E8bjsrK2Epb1thXT1pW2FdKHMpO3JldHVybiBvfX12YXIgeUR0PU0oKCk9PntOTygpfSk7ZnVuY3Rpb24gdkR0KGUsdCl7dmFyIHI9bmV3IERhdGU7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gci5zZXRUaW1lKGUqKDEtbikrdCpuKSxyfX12YXIgeER0PU0oKCk9Pnt9KTtmdW5jdGlvbiB5ZihlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIGUqKDEtcikrdCpyfX12YXIgRE89TSgoKT0+e30pO2Z1bmN0aW9uIGJEdChlLHQpe3ZhciByPXt9LG49e30saTsoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KSwodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KTtmb3IoaSBpbiB0KWkgaW4gZT9yW2ldPW4xKGVbaV0sdFtpXSk6bltpXT10W2ldO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaSBpbiByKW5baV09cltpXShvKTtyZXR1cm4gbn19dmFyIHdEdD1NKCgpPT57Tk8oKX0pO2Z1bmN0aW9uIFU2ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gcTZlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSsiIn19ZnVuY3Rpb24gU0R0KGUsdCl7dmFyIHI9RHR0Lmxhc3RJbmRleD1OdHQubGFzdEluZGV4PTAsbixpLG8sYT0tMSxzPVtdLGw9W107Zm9yKGU9ZSsiIix0PXQrIiI7KG49RHR0LmV4ZWMoZSkpJiYoaT1OdHQuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OnlmKG4saSl9KSkscj1OdHQubGFzdEluZGV4O3JldHVybiByPHQubGVuZ3RoJiYobz10LnNsaWNlKHIpLHNbYV0/c1thXSs9bzpzWysrYV09bykscy5sZW5ndGg8Mj9sWzBdP3E2ZShsWzBdLngpOlU2ZSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIHU9MCxoO3U8dDsrK3Upc1soaD1sW3VdKS5pXT1oLngoYyk7cmV0dXJuIHMuam9pbigiIil9KX12YXIgRHR0LE50dCxNRHQ9TSgoKT0+e0RPKCk7RHR0PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxOdHQ9bmV3IFJlZ0V4cChEdHQuc291cmNlLCJnIil9KTtmdW5jdGlvbiBuMShlLHQpe3ZhciByPXR5cGVvZiB0LG47cmV0dXJuIHQ9PW51bGx8fHI9PT0iYm9vbGVhbiI/bHcodCk6KHI9PT0ibnVtYmVyIj95ZjpyPT09InN0cmluZyI/KG49UGcodCkpPyh0PW4sUnR0KTpTRHQ6dCBpbnN0YW5jZW9mIFBnP1J0dDp0IGluc3RhbmNlb2YgRGF0ZT92RHQ6bUR0KHQpP2REdDpBcnJheS5pc0FycmF5KHQpP19EdDp0eXBlb2YgdC52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4odCk/YkR0OnlmKShlLHQpfXZhciBOTz1NKCgpPT57c3coKTtwRHQoKTt5RHQoKTt4RHQoKTtETygpO3dEdCgpO01EdCgpO0x0dCgpO2dEdCgpfSk7ZnVuY3Rpb24gT3R0KGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZChlKigxLXIpK3Qqcil9fXZhciBFRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFREdChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPSRhKGkpKS5oLChvPSRhKG8pKS5oKSxzPW5kKGkucyxvLnMpLGw9bmQoaS5sLG8ubCksYz1uZChpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIEc2ZSxjdyxDRHQ9TSgoKT0+e3N3KCk7a3R0KCk7RzZlPVREdCh1RHQpLGN3PVREdChuZCl9KTt2YXIgdXc9TSgoKT0+e05PKCk7RE8oKTtFRHQoKTtDRHQoKX0pO2Z1bmN0aW9uIGh3KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgT089TSgoKT0+e30pO2Z1bmN0aW9uIHpPKGUpe3JldHVybitlfXZhciB6dHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGZDKGUsdCl7cmV0dXJuKHQtPWU9K2UpP2Z1bmN0aW9uKHIpe3JldHVybihyLWUpL3R9Omh3KHQpfWZ1bmN0aW9uIFc2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQ9K3Qscj0rcik7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBpPD10PzA6aT49cj8xOm4oaSl9fX1mdW5jdGlvbiBZNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSh0PSt0LHI9K3IpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gaTw9MD90Omk+PTE/cjpuKGkpfX19ZnVuY3Rpb24gajZlKGUsdCxyLG4pe3ZhciBpPWVbMF0sbz1lWzFdLGE9dFswXSxzPXRbMV07cmV0dXJuIG88aT8oaT1yKG8saSksYT1uKHMsYSkpOihpPXIoaSxvKSxhPW4oYSxzKSksZnVuY3Rpb24obCl7cmV0dXJuIGEoaShsKSl9fWZ1bmN0aW9uIFg2ZShlLHQscixuKXt2YXIgaT1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCktMSxvPW5ldyBBcnJheShpKSxhPW5ldyBBcnJheShpKSxzPS0xO2ZvcihlW2ldPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8aTspb1tzXT1yKGVbc10sZVtzKzFdKSxhW3NdPW4odFtzXSx0W3MrMV0pO3JldHVybiBmdW5jdGlvbihsKXt2YXIgYz1kZihlLGwsMSxpKS0xO3JldHVybiBhW2NdKG9bY10obCkpfX1mdW5jdGlvbiBJZyhlLHQpe3JldHVybiB0LmRvbWFpbihlLmRvbWFpbigpKS5yYW5nZShlLnJhbmdlKCkpLmludGVycG9sYXRlKGUuaW50ZXJwb2xhdGUoKSkuY2xhbXAoZS5jbGFtcCgpKX1mdW5jdGlvbiBpZChlLHQpe3ZhciByPUFEdCxuPUFEdCxpPW4xLG89ITEsYSxzLGw7ZnVuY3Rpb24gYygpe3JldHVybiBhPU1hdGgubWluKHIubGVuZ3RoLG4ubGVuZ3RoKT4yP1g2ZTpqNmUscz1sPW51bGwsdX1mdW5jdGlvbiB1KGgpe3JldHVybihzfHwocz1hKHIsbixvP1c2ZShlKTplLGkpKSkoK2gpfXJldHVybiB1LmludmVydD1mdW5jdGlvbihoKXtyZXR1cm4obHx8KGw9YShuLHIsZkMsbz9ZNmUodCk6dCkpKSgraCl9LHUuZG9tYWluPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXJ3LmNhbGwoaCx6TyksYygpKTpyLnNsaWNlKCl9LHUucmFuZ2U9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cGwuY2FsbChoKSxjKCkpOm4uc2xpY2UoKX0sdS5yYW5nZVJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBuPXBsLmNhbGwoaCksaT1PdHQsYygpfSx1LmNsYW1wPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhaCxjKCkpOm99LHUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9aCxjKCkpOml9LGMoKX12YXIgQUR0LHBDPU0oKCk9PnttZigpO3V3KCk7Q2coKTtPTygpO3p0dCgpO0FEdD1bMCwxXX0pO2Z1bmN0aW9uIFBEdChlKXtyZXR1cm4gTWF0aC5hYnMoZT1NYXRoLnJvdW5kKGUpKT49MWUyMT9lLnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6ZS50b1N0cmluZygxMCl9ZnVuY3Rpb24gaTEoZSx0KXtpZigocj0oZT10P2UudG9FeHBvbmVudGlhbCh0LTEpOmUudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIHIsbj1lLnNsaWNlKDAscik7cmV0dXJuW24ubGVuZ3RoPjE/blswXStuLnNsaWNlKDIpOm4sK2Uuc2xpY2UocisxKV19dmFyIGRDPU0oKCk9Pnt9KTtmdW5jdGlvbiB2ZihlKXtyZXR1cm4gZT1pMShNYXRoLmFicyhlKSksZT9lWzFdOk5hTn12YXIgbUM9TSgoKT0+e2RDKCl9KTtmdW5jdGlvbiBJRHQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXtmb3IodmFyIGk9ci5sZW5ndGgsbz1bXSxhPTAscz1lWzBdLGw9MDtpPjAmJnM+MCYmKGwrcysxPm4mJihzPU1hdGgubWF4KDEsbi1sKSksby5wdXNoKHIuc3Vic3RyaW5nKGktPXMsaStzKSksISgobCs9cysxKT5uKSk7KXM9ZVthPShhKzEpJWUubGVuZ3RoXTtyZXR1cm4gby5yZXZlcnNlKCkuam9pbih0KX19dmFyIExEdD1NKCgpPT57fSk7ZnVuY3Rpb24ga0R0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKHIpe3JldHVybiBlWytyXX0pfX12YXIgUkR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBMZyhlKXtpZighKHQ9JDZlLmV4ZWMoZSkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrZSk7dmFyIHQ7cmV0dXJuIG5ldyBGTyh7ZmlsbDp0WzFdLGFsaWduOnRbMl0sc2lnbjp0WzNdLHN5bWJvbDp0WzRdLHplcm86dFs1XSx3aWR0aDp0WzZdLGNvbW1hOnRbN10scHJlY2lzaW9uOnRbOF0mJnRbOF0uc2xpY2UoMSksdHJpbTp0WzldLHR5cGU6dFsxMF19KX1mdW5jdGlvbiBGTyhlKXt0aGlzLmZpbGw9ZS5maWxsPT09dm9pZCAwPyIgIjplLmZpbGwrIiIsdGhpcy5hbGlnbj1lLmFsaWduPT09dm9pZCAwPyI+IjplLmFsaWduKyIiLHRoaXMuc2lnbj1lLnNpZ249PT12b2lkIDA/Ii0iOmUuc2lnbisiIix0aGlzLnN5bWJvbD1lLnN5bWJvbD09PXZvaWQgMD8iIjplLnN5bWJvbCsiIix0aGlzLnplcm89ISFlLnplcm8sdGhpcy53aWR0aD1lLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorZS53aWR0aCx0aGlzLmNvbW1hPSEhZS5jb21tYSx0aGlzLnByZWNpc2lvbj1lLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K2UucHJlY2lzaW9uLHRoaXMudHJpbT0hIWUudHJpbSx0aGlzLnR5cGU9ZS50eXBlPT09dm9pZCAwPyIiOmUudHlwZSsiIn12YXIgJDZlLEZ0dD1NKCgpPT57JDZlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO0xnLnByb3RvdHlwZT1GTy5wcm90b3R5cGU7Rk8ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PT12b2lkIDA/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09PXZvaWQgMD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX19KTtmdW5jdGlvbiBORHQoZSl7dDpmb3IodmFyIHQ9ZS5sZW5ndGgscj0xLG49LTEsaTtyPHQ7KytyKXN3aXRjaChlW3JdKXtjYXNlIi4iOm49aT1yO2JyZWFrO2Nhc2UiMCI6bj09PTAmJihuPXIpLGk9cjticmVhaztkZWZhdWx0OmlmKCErZVtyXSlicmVhayB0O24+MCYmKG49MCk7YnJlYWt9cmV0dXJuIG4+MD9lLnNsaWNlKDAsbikrZS5zbGljZShpKzEpOmV9dmFyIEREdD1NKCgpPT57fSk7ZnVuY3Rpb24gT0R0KGUsdCl7dmFyIHI9aTEoZSx0KTtpZighcilyZXR1cm4gZSsiIjt2YXIgbj1yWzBdLGk9clsxXSxvPWktKEJ0dD1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKjMpKzEsYT1uLmxlbmd0aDtyZXR1cm4gbz09PWE/bjpvPmE/bituZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/bi5zbGljZSgwLG8pKyIuIituLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK2kxKGUsTWF0aC5tYXgoMCx0K28tMSkpWzBdfXZhciBCdHQsSHR0PU0oKCk9PntkQygpfSk7ZnVuY3Rpb24gVnR0KGUsdCl7dmFyIHI9aTEoZSx0KTtpZighcilyZXR1cm4gZSsiIjt2YXIgbj1yWzBdLGk9clsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbjpuLmxlbmd0aD5pKzE/bi5zbGljZSgwLGkrMSkrIi4iK24uc2xpY2UoaSsxKTpuK25ldyBBcnJheShpLW4ubGVuZ3RoKzIpLmpvaW4oIjAiKX12YXIgekR0PU0oKCk9PntkQygpfSk7dmFyIFV0dCxGRHQ9TSgoKT0+e2RDKCk7SHR0KCk7ekR0KCk7VXR0PXsiJSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZSoxMDApLnRvRml4ZWQodCl9LGI6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrIiJ9LGQ6UER0LGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9GaXhlZCh0KX0sZzpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFZ0dChlKjEwMCx0KX0scjpWdHQsczpPRHQsWDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNil9fX0pO2Z1bmN0aW9uIHF0dChlKXtyZXR1cm4gZX12YXIgQkR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBVRHQoZSl7dmFyIHQ9ZS5ncm91cGluZz09PXZvaWQgMHx8ZS50aG91c2FuZHM9PT12b2lkIDA/cXR0OklEdChIRHQuY2FsbChlLmdyb3VwaW5nLE51bWJlciksZS50aG91c2FuZHMrIiIpLHI9ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzBdKyIiLG49ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzFdKyIiLGk9ZS5kZWNpbWFsPT09dm9pZCAwPyIuIjplLmRlY2ltYWwrIiIsbz1lLm51bWVyYWxzPT09dm9pZCAwP3F0dDprRHQoSER0LmNhbGwoZS5udW1lcmFscyxTdHJpbmcpKSxhPWUucGVyY2VudD09PXZvaWQgMD8iJSI6ZS5wZXJjZW50KyIiLHM9ZS5taW51cz09PXZvaWQgMD8iLSI6ZS5taW51cysiIixsPWUubmFuPT09dm9pZCAwPyJOYU4iOmUubmFuKyIiO2Z1bmN0aW9uIGMoaCl7aD1MZyhoKTt2YXIgZj1oLmZpbGwscD1oLmFsaWduLGQ9aC5zaWduLGc9aC5zeW1ib2wsXz1oLnplcm8seT1oLndpZHRoLHg9aC5jb21tYSxiPWgucHJlY2lzaW9uLFM9aC50cmltLEM9aC50eXBlO0M9PT0ibiI/KHg9ITAsQz0iZyIpOlV0dFtDXXx8KGI9PT12b2lkIDAmJihiPTEyKSxTPSEwLEM9ImciKSwoX3x8Zj09PSIwIiYmcD09PSI9IikmJihfPSEwLGY9IjAiLHA9Ij0iKTt2YXIgUD1nPT09IiQiP3I6Zz09PSIjIiYmL1tib3hYXS8udGVzdChDKT8iMCIrQy50b0xvd2VyQ2FzZSgpOiIiLGs9Zz09PSIkIj9uOi9bJXBdLy50ZXN0KEMpP2E6IiIsTz1VdHRbQ10sRD0vW2RlZmdwcnMlXS8udGVzdChDKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KEMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIEIoSSl7dmFyIEw9UCxSPWssRix6LFU7aWYoQz09PSJjIilSPU8oSSkrUixJPSIiO2Vsc2V7ST0rSTt2YXIgVz1JPDB8fDEvSTwwO2lmKEk9aXNOYU4oSSk/bDpPKE1hdGguYWJzKEkpLGIpLFMmJihJPU5EdChJKSksVyYmK0k9PTAmJmQhPT0iKyImJihXPSExKSxMPShXP2Q9PT0iKCI/ZDpzOmQ9PT0iLSJ8fGQ9PT0iKCI/IiI6ZCkrTCxSPShDPT09InMiP1ZEdFs4K0J0dC8zXToiIikrUisoVyYmZD09PSIoIj8iKSI6IiIpLEQpe2ZvcihGPS0xLHo9SS5sZW5ndGg7KytGPHo7KWlmKFU9SS5jaGFyQ29kZUF0KEYpLDQ4PlV8fFU+NTcpe1I9KFU9PT00Nj9pK0kuc2xpY2UoRisxKTpJLnNsaWNlKEYpKStSLEk9SS5zbGljZSgwLEYpO2JyZWFrfX19eCYmIV8mJihJPXQoSSwxLzApKTt2YXIgWj1MLmxlbmd0aCtJLmxlbmd0aCtSLmxlbmd0aCxydD1aPHk/bmV3IEFycmF5KHktWisxKS5qb2luKGYpOiIiO3N3aXRjaCh4JiZfJiYoST10KHJ0K0kscnQubGVuZ3RoP3ktUi5sZW5ndGg6MS8wKSxydD0iIikscCl7Y2FzZSI8IjpJPUwrSStSK3J0O2JyZWFrO2Nhc2UiPSI6ST1MK3J0K0krUjticmVhaztjYXNlIl4iOkk9cnQuc2xpY2UoMCxaPXJ0Lmxlbmd0aD4+MSkrTCtJK1IrcnQuc2xpY2UoWik7YnJlYWs7ZGVmYXVsdDpJPXJ0K0wrSStSO2JyZWFrfXJldHVybiBvKEkpfXJldHVybiBCLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGgrIiJ9LEJ9ZnVuY3Rpb24gdShoLGYpe3ZhciBwPWMoKGg9TGcoaCksaC50eXBlPSJmIixoKSksZD1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IodmYoZikvMykpKSozLGc9TWF0aC5wb3coMTAsLWQpLF89VkR0WzgrZC8zXTtyZXR1cm4gZnVuY3Rpb24oeSl7cmV0dXJuIHAoZyp5KStffX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OnV9fXZhciBIRHQsVkR0LHFEdD1NKCgpPT57bUMoKTtMRHQoKTtSRHQoKTtGdHQoKTtERHQoKTtGRHQoKTtIdHQoKTtCRHQoKTtIRHQ9QXJyYXkucHJvdG90eXBlLm1hcCxWRHQ9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceEI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl19KTtmdW5jdGlvbiBHdHQoZSl7cmV0dXJuIEJPPVVEdChlKSxmdz1CTy5mb3JtYXQsSE89Qk8uZm9ybWF0UHJlZml4LEJPfXZhciBCTyxmdyxITyxHRHQ9TSgoKT0+e3FEdCgpO0d0dCh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSl9KTtmdW5jdGlvbiBXdHQoZSl7cmV0dXJuIE1hdGgubWF4KDAsLXZmKE1hdGguYWJzKGUpKSl9dmFyIFdEdD1NKCgpPT57bUMoKX0pO2Z1bmN0aW9uIFl0dChlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcih2Zih0KS8zKSkpKjMtdmYoTWF0aC5hYnMoZSkpKX12YXIgWUR0PU0oKCk9PnttQygpfSk7ZnVuY3Rpb24ganR0KGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAsdmYodCktdmYoZSkpKzF9dmFyIGpEdD1NKCgpPT57bUMoKX0pO3ZhciBYdHQ9TSgoKT0+e0dEdCgpO0Z0dCgpO1dEdCgpO1lEdCgpO2pEdCgpfSk7ZnVuY3Rpb24gWER0KGUsdCxyKXt2YXIgbj1lWzBdLGk9ZVtlLmxlbmd0aC0xXSxvPVp5KG4saSx0PT1udWxsPzEwOnQpLGE7c3dpdGNoKHI9TGcocj09bnVsbD8iLGYiOnIpLHIudHlwZSl7Y2FzZSJzIjp7dmFyIHM9TWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnMoaSkpO3JldHVybiByLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9WXR0KG8scykpJiYoci5wcmVjaXNpb249YSksSE8ocixzKX1jYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjp7ci5wcmVjaXNpb249PW51bGwmJiFpc05hTihhPWp0dChvLE1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKGkpKSkpJiYoci5wcmVjaXNpb249YS0oci50eXBlPT09ImUiKSk7YnJlYWt9Y2FzZSJmIjpjYXNlIiUiOntyLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9V3R0KG8pKSYmKHIucHJlY2lzaW9uPWEtKHIudHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiBmdyhyKX12YXIgJER0PU0oKCk9PnttZigpO1h0dCgpfSk7ZnVuY3Rpb24gb2QoZSl7dmFyIHQ9ZS5kb21haW47cmV0dXJuIGUudGlja3M9ZnVuY3Rpb24ocil7dmFyIG49dCgpO3JldHVybiBhQyhuWzBdLG5bbi5sZW5ndGgtMV0scj09bnVsbD8xMDpyKX0sZS50aWNrRm9ybWF0PWZ1bmN0aW9uKHIsbil7cmV0dXJuIFhEdCh0KCkscixuKX0sZS5uaWNlPWZ1bmN0aW9uKHIpe3I9PW51bGwmJihyPTEwKTt2YXIgbj10KCksaT0wLG89bi5sZW5ndGgtMSxhPW5baV0scz1uW29dLGw7cmV0dXJuIHM8YSYmKGw9YSxhPXMscz1sLGw9aSxpPW8sbz1sKSxsPWV3KGEscyxyKSxsPjA/KGE9TWF0aC5mbG9vcihhL2wpKmwscz1NYXRoLmNlaWwocy9sKSpsLGw9ZXcoYSxzLHIpKTpsPDAmJihhPU1hdGguY2VpbChhKmwpL2wscz1NYXRoLmZsb29yKHMqbCkvbCxsPWV3KGEscyxyKSksbD4wPyhuW2ldPU1hdGguZmxvb3IoYS9sKSpsLG5bb109TWF0aC5jZWlsKHMvbCkqbCx0KG4pKTpsPDAmJihuW2ldPU1hdGguY2VpbChhKmwpL2wsbltvXT1NYXRoLmZsb29yKHMqbCkvbCx0KG4pKSxlfSxlfWZ1bmN0aW9uIFZPKCl7dmFyIGU9aWQoZkMseWYpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWcoZSxWTygpKX0sb2QoZSl9dmFyIHB3PU0oKCk9PnttZigpO3V3KCk7cEMoKTskRHQoKX0pO2Z1bmN0aW9uIFVPKCl7dmFyIGU9WzAsMV07ZnVuY3Rpb24gdChyKXtyZXR1cm4rcn1yZXR1cm4gdC5pbnZlcnQ9dCx0LmRvbWFpbj10LnJhbmdlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXJ3LmNhbGwocix6TyksdCk6ZS5zbGljZSgpfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVU8oKS5kb21haW4oZSl9LG9kKHQpfXZhciBLRHQ9TSgoKT0+e0NnKCk7cHcoKTt6dHQoKX0pO2Z1bmN0aW9uIHFPKGUsdCl7ZT1lLnNsaWNlKCk7dmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lW3JdLG89ZVtuXSxhO3JldHVybiBvPGkmJihhPXIscj1uLG49YSxhPWksaT1vLG89YSksZVtyXT10LmZsb29yKGkpLGVbbl09dC5jZWlsKG8pLGV9dmFyICR0dD1NKCgpPT57fSk7ZnVuY3Rpb24gSzZlKGUsdCl7cmV0dXJuKHQ9TWF0aC5sb2codC9lKSk/ZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubG9nKHIvZSkvdH06aHcodCl9ZnVuY3Rpb24gWjZlKGUsdCl7cmV0dXJuIGU8MD9mdW5jdGlvbihyKXtyZXR1cm4tTWF0aC5wb3coLXQscikqTWF0aC5wb3coLWUsMS1yKX06ZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQscikqTWF0aC5wb3coZSwxLXIpfX1mdW5jdGlvbiBKNmUoZSl7cmV0dXJuIGlzRmluaXRlKGUpPysoIjFlIitlKTplPDA/MDplfWZ1bmN0aW9uIFpEdChlKXtyZXR1cm4gZT09PTEwP0o2ZTplPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhlLHQpfX1mdW5jdGlvbiBKRHQoZSl7cmV0dXJuIGU9PT1NYXRoLkU/TWF0aC5sb2c6ZT09PTEwJiZNYXRoLmxvZzEwfHxlPT09MiYmTWF0aC5sb2cyfHwoZT1NYXRoLmxvZyhlKSxmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvZX0pfWZ1bmN0aW9uIFFEdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLWUoLXQpfX1mdW5jdGlvbiBHTygpe3ZhciBlPWlkKEs2ZSxaNmUpLmRvbWFpbihbMSwxMF0pLHQ9ZS5kb21haW4scj0xMCxuPUpEdCgxMCksaT1aRHQoMTApO2Z1bmN0aW9uIG8oKXtyZXR1cm4gbj1KRHQociksaT1aRHQociksdCgpWzBdPDAmJihuPVFEdChuKSxpPVFEdChpKSksZX1yZXR1cm4gZS5iYXNlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLG8oKSk6cn0sZS5kb21haW49ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQoYSksbygpKTp0KCl9LGUudGlja3M9ZnVuY3Rpb24oYSl7dmFyIHM9dCgpLGw9c1swXSxjPXNbcy5sZW5ndGgtMV0sdTsodT1jPGwpJiYoaD1sLGw9YyxjPWgpO3ZhciBoPW4obCksZj1uKGMpLHAsZCxnLF89YT09bnVsbD8xMDorYSx5PVtdO2lmKCEociUxKSYmZi1oPF8pe2lmKGg9TWF0aC5yb3VuZChoKS0xLGY9TWF0aC5yb3VuZChmKSsxLGw+MCl7Zm9yKDtoPGY7KytoKWZvcihkPTEscD1pKGgpO2Q8cjsrK2QpaWYoZz1wKmQsIShnPGwpKXtpZihnPmMpYnJlYWs7eS5wdXNoKGcpfX1lbHNlIGZvcig7aDxmOysraClmb3IoZD1yLTEscD1pKGgpO2Q+PTE7LS1kKWlmKGc9cCpkLCEoZzxsKSl7aWYoZz5jKWJyZWFrO3kucHVzaChnKX19ZWxzZSB5PWFDKGgsZixNYXRoLm1pbihmLWgsXykpLm1hcChpKTtyZXR1cm4gdT95LnJldmVyc2UoKTp5fSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oYSxzKXtpZihzPT1udWxsJiYocz1yPT09MTA/Ii4wZSI6IiwiKSx0eXBlb2YgcyE9ImZ1bmN0aW9uIiYmKHM9ZncocykpLGE9PT0xLzApcmV0dXJuIHM7YT09bnVsbCYmKGE9MTApO3ZhciBsPU1hdGgubWF4KDEsciphL2UudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbihjKXt2YXIgdT1jL2koTWF0aC5yb3VuZChuKGMpKSk7cmV0dXJuIHUqcjxyLS41JiYodSo9ciksdTw9bD9zKGMpOiIifX0sZS5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHQocU8odCgpLHtmbG9vcjpmdW5jdGlvbihhKXtyZXR1cm4gaShNYXRoLmZsb29yKG4oYSkpKX0sY2VpbDpmdW5jdGlvbihhKXtyZXR1cm4gaShNYXRoLmNlaWwobihhKSkpfX0pKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIElnKGUsR08oKS5iYXNlKHIpKX0sZX12YXIgdE90PU0oKCk9PnttZigpO1h0dCgpO09PKCk7JHR0KCk7cEMoKX0pO2Z1bmN0aW9uIGR3KGUsdCl7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsdCk6TWF0aC5wb3coZSx0KX1mdW5jdGlvbiBnQygpe3ZhciBlPTEsdD1pZChuLGkpLHI9dC5kb21haW47ZnVuY3Rpb24gbihvLGEpe3JldHVybihhPWR3KGEsZSktKG89ZHcobyxlKSkpP2Z1bmN0aW9uKHMpe3JldHVybihkdyhzLGUpLW8pL2F9Omh3KGEpfWZ1bmN0aW9uIGkobyxhKXtyZXR1cm4gYT1kdyhhLGUpLShvPWR3KG8sZSkpLGZ1bmN0aW9uKHMpe3JldHVybiBkdyhvK2EqcywxL2UpfX1yZXR1cm4gdC5leHBvbmVudD1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rbyxyKHIoKSkpOmV9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyh0LGdDKCkuZXhwb25lbnQoZSkpfSxvZCh0KX1mdW5jdGlvbiBlT3QoKXtyZXR1cm4gZ0MoKS5leHBvbmVudCguNSl9dmFyIHJPdD1NKCgpPT57T08oKTtwdygpO3BDKCl9KTtmdW5jdGlvbiBXTygpe3ZhciBlPVtdLHQ9W10scj1bXTtmdW5jdGlvbiBuKCl7dmFyIG89MCxhPU1hdGgubWF4KDEsdC5sZW5ndGgpO2ZvcihyPW5ldyBBcnJheShhLTEpOysrbzxhOylyW28tMV09c0MoZSxvL2EpO3JldHVybiBpfWZ1bmN0aW9uIGkobyl7aWYoIWlzTmFOKG89K28pKXJldHVybiB0W2RmKHIsbyldfXJldHVybiBpLmludmVydEV4dGVudD1mdW5jdGlvbihvKXt2YXIgYT10LmluZGV4T2Yobyk7cmV0dXJuIGE8MD9bTmFOLE5hTl06W2E+MD9yW2EtMV06ZVswXSxhPHIubGVuZ3RoP3JbYV06ZVtlLmxlbmd0aC0xXV19LGkuZG9tYWluPWZ1bmN0aW9uKG8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXTtmb3IodmFyIGE9MCxzPW8ubGVuZ3RoLGw7YTxzOysrYSlsPW9bYV0sbCE9bnVsbCYmIWlzTmFOKGw9K2wpJiZlLnB1c2gobCk7cmV0dXJuIGUuc29ydChwZiksbigpfSxpLnJhbmdlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXBsLmNhbGwobyksbigpKTp0LnNsaWNlKCl9LGkucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuc2xpY2UoKX0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFdPKCkuZG9tYWluKGUpLnJhbmdlKHQpfSxpfXZhciBuT3Q9TSgoKT0+e21mKCk7Q2coKX0pO2Z1bmN0aW9uIFlPKCl7dmFyIGU9MCx0PTEscj0xLG49Wy41XSxpPVswLDFdO2Z1bmN0aW9uIG8ocyl7aWYoczw9cylyZXR1cm4gaVtkZihuLHMsMCxyKV19ZnVuY3Rpb24gYSgpe3ZhciBzPS0xO2ZvcihuPW5ldyBBcnJheShyKTsrK3M8cjspbltzXT0oKHMrMSkqdC0ocy1yKSplKS8ocisxKTtyZXR1cm4gb31yZXR1cm4gby5kb21haW49ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3NbMF0sdD0rc1sxXSxhKCkpOltlLHRdfSxvLnJhbmdlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPShpPXBsLmNhbGwocykpLmxlbmd0aC0xLGEoKSk6aS5zbGljZSgpfSxvLmludmVydEV4dGVudD1mdW5jdGlvbihzKXt2YXIgbD1pLmluZGV4T2Yocyk7cmV0dXJuIGw8MD9bTmFOLE5hTl06bDwxP1tlLG5bMF1dOmw+PXI/W25bci0xXSx0XTpbbltsLTFdLG5bbF1dfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWU8oKS5kb21haW4oW2UsdF0pLnJhbmdlKGkpfSxvZChvKX12YXIgaU90PU0oKCk9PnttZigpO0NnKCk7cHcoKX0pO2Z1bmN0aW9uIGpPKCl7dmFyIGU9Wy41XSx0PVswLDFdLHI9MTtmdW5jdGlvbiBuKGkpe2lmKGk8PWkpcmV0dXJuIHRbZGYoZSxpLDAscildfXJldHVybiBuLmRvbWFpbj1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wbC5jYWxsKGkpLHI9TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgtMSksbik6ZS5zbGljZSgpfSxuLnJhbmdlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXBsLmNhbGwoaSkscj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxuKTp0LnNsaWNlKCl9LG4uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGkpe3ZhciBvPXQuaW5kZXhPZihpKTtyZXR1cm5bZVtvLTFdLGVbb11dfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gak8oKS5kb21haW4oZSkucmFuZ2UodCl9LG59dmFyIG9PdD1NKCgpPT57bWYoKTtDZygpfSk7ZnVuY3Rpb24gTnIoZSx0LHIsbil7ZnVuY3Rpb24gaShvKXtyZXR1cm4gZShvPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCtvKSksb31yZXR1cm4gaS5mbG9vcj1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKCtvKSksb30saS5jZWlsPWZ1bmN0aW9uKG8pe3JldHVybiBlKG89bmV3IERhdGUoby0xKSksdChvLDEpLGUobyksb30saS5yb3VuZD1mdW5jdGlvbihvKXt2YXIgYT1pKG8pLHM9aS5jZWlsKG8pO3JldHVybiBvLWE8cy1vP2E6c30saS5vZmZzZXQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gdChvPW5ldyBEYXRlKCtvKSxhPT1udWxsPzE6TWF0aC5mbG9vcihhKSksb30saS5yYW5nZT1mdW5jdGlvbihvLGEscyl7dmFyIGw9W10sYztpZihvPWkuY2VpbChvKSxzPXM9PW51bGw/MTpNYXRoLmZsb29yKHMpLCEobzxhKXx8IShzPjApKXJldHVybiBsO2RvIGwucHVzaChjPW5ldyBEYXRlKCtvKSksdChvLHMpLGUobyk7d2hpbGUoYzxvJiZvPGEpO3JldHVybiBsfSxpLmZpbHRlcj1mdW5jdGlvbihvKXtyZXR1cm4gTnIoZnVuY3Rpb24oYSl7aWYoYT49YSlmb3IoO2UoYSksIW8oYSk7KWEuc2V0VGltZShhLTEpfSxmdW5jdGlvbihhLHMpe2lmKGE+PWEpaWYoczwwKWZvcig7KytzPD0wOylmb3IoO3QoYSwtMSksIW8oYSk7KTtlbHNlIGZvcig7LS1zPj0wOylmb3IoO3QoYSwxKSwhbyhhKTspO30pfSxyJiYoaS5jb3VudD1mdW5jdGlvbihvLGEpe3JldHVybiBLdHQuc2V0VGltZSgrbyksWnR0LnNldFRpbWUoK2EpLGUoS3R0KSxlKFp0dCksTWF0aC5mbG9vcihyKEt0dCxadHQpKX0saS5ldmVyeT1mdW5jdGlvbihvKXtyZXR1cm4gbz1NYXRoLmZsb29yKG8pLCFpc0Zpbml0ZShvKXx8IShvPjApP251bGw6bz4xP2kuZmlsdGVyKG4/ZnVuY3Rpb24oYSl7cmV0dXJuIG4oYSklbz09PTB9OmZ1bmN0aW9uKGEpe3JldHVybiBpLmNvdW50KDAsYSklbz09PTB9KTppfSksaX12YXIgS3R0LFp0dCxLYT1NKCgpPT57S3R0PW5ldyBEYXRlLFp0dD1uZXcgRGF0ZX0pO3ZhciBYTyxtdyxhT3Qsc090PU0oKCk9PntLYSgpO1hPPU5yKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC1lfSk7WE8uZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5mbG9vcihlKSwhaXNGaW5pdGUoZSl8fCEoZT4wKT9udWxsOmU+MT9OcihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L2UpKmUpfSxmdW5jdGlvbih0LHIpe3Quc2V0VGltZSgrdCtyKmUpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL2V9KTpYT307bXc9WE8sYU90PVhPLnJhbmdlfSk7dmFyIG8xLHdjLGd3LCRPLEtPLHhmPU0oKCk9PntvMT0xZTMsd2M9NmU0LGd3PTM2ZTUsJE89ODY0ZTUsS089NjA0OGU1fSk7dmFyIGxPdCxfdyxjT3QsdU90PU0oKCk9PntLYSgpO3hmKCk7bE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCkpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0Km8xKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9vMX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDU2Vjb25kcygpfSksX3c9bE90LGNPdD1sT3QucmFuZ2V9KTt2YXIgaE90LEp0dCxRNmUsZk90PU0oKCk9PntLYSgpO3hmKCk7aE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqbzEpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KndjKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS93Y30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TWludXRlcygpfSksSnR0PWhPdCxRNmU9aE90LnJhbmdlfSk7dmFyIHBPdCxRdHQsdEllLGRPdD1NKCgpPT57S2EoKTt4ZigpO3BPdD1OcihmdW5jdGlvbihlKXtlLnNldFRpbWUoZS1lLmdldE1pbGxpc2Vjb25kcygpLWUuZ2V0U2Vjb25kcygpKm8xLWUuZ2V0TWludXRlcygpKndjKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpndyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvZ3d9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEhvdXJzKCl9KSxRdHQ9cE90LHRJZT1wT3QucmFuZ2V9KTt2YXIgbU90LHl3LGVJZSxnT3Q9TSgoKT0+e0thKCk7eGYoKTttT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqd2MpLyRPfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLHl3PW1PdCxlSWU9bU90LnJhbmdlfSk7ZnVuY3Rpb24gYTEoZSl7cmV0dXJuIE5yKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LWUpJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdC0oci5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqd2MpL0tPfSl9dmFyIHMxLHZ3LF9PdCx5T3Qsa2csdk90LHhPdCxiT3QsckllLG5JZSxpSWUsb0llLGFJZSxzSWUsd090PU0oKCk9PntLYSgpO3hmKCk7czE9YTEoMCksdnc9YTEoMSksX090PWExKDIpLHlPdD1hMSgzKSxrZz1hMSg0KSx2T3Q9YTEoNSkseE90PWExKDYpLGJPdD1zMS5yYW5nZSxySWU9dncucmFuZ2UsbkllPV9PdC5yYW5nZSxpSWU9eU90LnJhbmdlLG9JZT1rZy5yYW5nZSxhSWU9dk90LnJhbmdlLHNJZT14T3QucmFuZ2V9KTt2YXIgU090LHRldCxsSWUsTU90PU0oKCk9PntLYSgpO1NPdD1OcihmdW5jdGlvbihlKXtlLnNldERhdGUoMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldE1vbnRoKGUuZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRNb250aCgpLWUuZ2V0TW9udGgoKSsodC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1vbnRoKCl9KSx0ZXQ9U090LGxJZT1TT3QucmFuZ2V9KTt2YXIgZWV0LGFkLGNJZSxFT3Q9TSgoKT0+e0thKCk7ZWV0PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7ZWV0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpOcihmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07YWQ9ZWV0LGNJZT1lZXQucmFuZ2V9KTt2YXIgVE90LHJldCx1SWUsQ090PU0oKCk9PntLYSgpO3hmKCk7VE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KndjKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS93Y30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSkscmV0PVRPdCx1SWU9VE90LnJhbmdlfSk7dmFyIEFPdCxuZXQsaEllLFBPdD1NKCgpPT57S2EoKTt4ZigpO0FPdD1OcihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0Kmd3KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9nd30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLG5ldD1BT3QsaEllPUFPdC5yYW5nZX0pO3ZhciBJT3QseHcsZkllLExPdD1NKCgpPT57S2EoKTt4ZigpO0lPdD1OcihmdW5jdGlvbihlKXtlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS8kT30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRGF0ZSgpLTF9KSx4dz1JT3QsZkllPUlPdC5yYW5nZX0pO2Z1bmN0aW9uIGwxKGUpe3JldHVybiBOcihmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCktKHQuZ2V0VVRDRGF5KCkrNy1lKSU3KSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL0tPfSl9dmFyIGMxLGJ3LGtPdCxST3QsUmcsTk90LERPdCxPT3QscEllLGRJZSxtSWUsZ0llLF9JZSx5SWUsek90PU0oKCk9PntLYSgpO3hmKCk7YzE9bDEoMCksYnc9bDEoMSksa090PWwxKDIpLFJPdD1sMSgzKSxSZz1sMSg0KSxOT3Q9bDEoNSksRE90PWwxKDYpLE9PdD1jMS5yYW5nZSxwSWU9YncucmFuZ2UsZEllPWtPdC5yYW5nZSxtSWU9Uk90LnJhbmdlLGdJZT1SZy5yYW5nZSxfSWU9Tk90LnJhbmdlLHlJZT1ET3QucmFuZ2V9KTt2YXIgRk90LGlldCx2SWUsQk90PU0oKCk9PntLYSgpO0ZPdD1OcihmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpLWUuZ2V0VVRDTW9udGgoKSsodC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCl9KSxpZXQ9Rk90LHZJZT1GT3QucmFuZ2V9KTt2YXIgb2V0LHNkLHhJZSxIT3Q9TSgoKT0+e0thKCk7b2V0PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpfSk7b2V0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpOcihmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL2UpKmUpLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK3IqZSl9KX07c2Q9b2V0LHhJZT1vZXQucmFuZ2V9KTt2YXIgWk89TSgoKT0+e3NPdCgpO3VPdCgpO2ZPdCgpO2RPdCgpO2dPdCgpO3dPdCgpO01PdCgpO0VPdCgpO0NPdCgpO1BPdCgpO0xPdCgpO3pPdCgpO0JPdCgpO0hPdCgpfSk7ZnVuY3Rpb24gYWV0KGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpO3JldHVybiB0LnNldEZ1bGxZZWFyKGUueSksdH1yZXR1cm4gbmV3IERhdGUoZS55LGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKX1mdW5jdGlvbiBzZXQoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZShEYXRlLlVUQygtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpO3JldHVybiB0LnNldFVUQ0Z1bGxZZWFyKGUueSksdH1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZS55LGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSl9ZnVuY3Rpb24gX0MoZSx0LHIpe3JldHVybnt5OmUsbTp0LGQ6cixIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIGNldChlKXt2YXIgdD1lLmRhdGVUaW1lLHI9ZS5kYXRlLG49ZS50aW1lLGk9ZS5wZXJpb2RzLG89ZS5kYXlzLGE9ZS5zaG9ydERheXMscz1lLm1vbnRocyxsPWUuc2hvcnRNb250aHMsYz15QyhpKSx1PXZDKGkpLGg9eUMobyksZj12QyhvKSxwPXlDKGEpLGQ9dkMoYSksZz15QyhzKSxfPXZDKHMpLHk9eUMobCkseD12QyhsKSxiPXthOlcsQTpaLGI6cnQsQjpvdCxjOm51bGwsZDpZT3QsZTpZT3QsZjpxSWUsZzpRSWUsRzplOWUsSDpISWUsSTpWSWUsajpVSWUsTDpaT3QsbTpHSWUsTTpXSWUscDpzdCxxOlN0LFE6JE90LHM6S090LFM6WUllLHU6akllLFU6WEllLFY6JEllLHc6S0llLFc6WkllLHg6bnVsbCxYOm51bGwseTpKSWUsWTp0OWUsWjpyOWUsIiUiOlhPdH0sUz17YTpidCxBOk10LGI6bHQsQjpLdCxjOm51bGwsZDpqT3QsZTpqT3QsZjphOWUsZzpnOWUsRzp5OWUsSDpuOWUsSTppOWUsajpvOWUsTDpRT3QsbTpzOWUsTTpsOWUscDpfdCxxOmN0LFE6JE90LHM6S090LFM6YzllLHU6dTllLFU6aDllLFY6ZjllLHc6cDllLFc6ZDllLHg6bnVsbCxYOm51bGwseTptOWUsWTpfOWUsWjp2OWUsIiUiOlhPdH0sQz17YTpCLEE6SSxiOkwsQjpSLGM6RixkOkdPdCxlOkdPdCxmOk9JZSxnOnFPdCxHOlVPdCxIOldPdCxJOldPdCxqOmtJZSxMOkRJZSxtOkxJZSxNOlJJZSxwOkQscTpJSWUsUTpGSWUsczpCSWUsUzpOSWUsdTpFSWUsVTpUSWUsVjpDSWUsdzpNSWUsVzpBSWUseDp6LFg6VSx5OnFPdCxZOlVPdCxaOlBJZSwiJSI6ekllfTtiLng9UChyLGIpLGIuWD1QKG4sYiksYi5jPVAodCxiKSxTLng9UChyLFMpLFMuWD1QKG4sUyksUy5jPVAodCxTKTtmdW5jdGlvbiBQKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9W10scHQ9LTEsaHQ9MCx3dD1YLmxlbmd0aCxrdCxpZSxlZTtmb3IoZHQgaW5zdGFuY2VvZiBEYXRlfHwoZHQ9bmV3IERhdGUoK2R0KSk7KytwdDx3dDspWC5jaGFyQ29kZUF0KHB0KT09PTM3JiYocS5wdXNoKFguc2xpY2UoaHQscHQpKSwoaWU9Vk90W2t0PVguY2hhckF0KCsrcHQpXSkhPW51bGw/a3Q9WC5jaGFyQXQoKytwdCk6aWU9a3Q9PT0iZSI/IiAiOiIwIiwoZWU9ZXRba3RdKSYmKGt0PWVlKGR0LGllKSkscS5wdXNoKGt0KSxodD1wdCsxKTtyZXR1cm4gcS5wdXNoKFguc2xpY2UoaHQscHQpKSxxLmpvaW4oIiIpfX1mdW5jdGlvbiBrKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9X0MoMTkwMCx2b2lkIDAsMSkscHQ9TyhxLFgsZHQrPSIiLDApLGh0LHd0O2lmKHB0IT1kdC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gcSlyZXR1cm4gbmV3IERhdGUocS5RKTtpZigicyJpbiBxKXJldHVybiBuZXcgRGF0ZShxLnMqMWUzKygiTCJpbiBxP3EuTDowKSk7aWYoZXQmJiEoIloiaW4gcSkmJihxLlo9MCksInAiaW4gcSYmKHEuSD1xLkglMTIrcS5wKjEyKSxxLm09PT12b2lkIDAmJihxLm09InEiaW4gcT9xLnE6MCksIlYiaW4gcSl7aWYocS5WPDF8fHEuVj41MylyZXR1cm4gbnVsbDsidyJpbiBxfHwocS53PTEpLCJaImluIHE/KGh0PXNldChfQyhxLnksMCwxKSksd3Q9aHQuZ2V0VVRDRGF5KCksaHQ9d3Q+NHx8d3Q9PT0wP2J3LmNlaWwoaHQpOmJ3KGh0KSxodD14dy5vZmZzZXQoaHQsKHEuVi0xKSo3KSxxLnk9aHQuZ2V0VVRDRnVsbFllYXIoKSxxLm09aHQuZ2V0VVRDTW9udGgoKSxxLmQ9aHQuZ2V0VVRDRGF0ZSgpKyhxLncrNiklNyk6KGh0PWFldChfQyhxLnksMCwxKSksd3Q9aHQuZ2V0RGF5KCksaHQ9d3Q+NHx8d3Q9PT0wP3Z3LmNlaWwoaHQpOnZ3KGh0KSxodD15dy5vZmZzZXQoaHQsKHEuVi0xKSo3KSxxLnk9aHQuZ2V0RnVsbFllYXIoKSxxLm09aHQuZ2V0TW9udGgoKSxxLmQ9aHQuZ2V0RGF0ZSgpKyhxLncrNiklNyl9ZWxzZSgiVyJpbiBxfHwiVSJpbiBxKSYmKCJ3ImluIHF8fChxLnc9InUiaW4gcT9xLnUlNzoiVyJpbiBxPzE6MCksd3Q9IloiaW4gcT9zZXQoX0MocS55LDAsMSkpLmdldFVUQ0RheSgpOmFldChfQyhxLnksMCwxKSkuZ2V0RGF5KCkscS5tPTAscS5kPSJXImluIHE/KHEudys2KSU3K3EuVyo3LSh3dCs1KSU3OnEudytxLlUqNy0od3QrNiklNyk7cmV0dXJuIloiaW4gcT8ocS5IKz1xLlovMTAwfDAscS5NKz1xLlolMTAwLHNldChxKSk6YWV0KHEpfX1mdW5jdGlvbiBPKFgsZXQsZHQscSl7Zm9yKHZhciBwdD0wLGh0PWV0Lmxlbmd0aCx3dD1kdC5sZW5ndGgsa3QsaWU7cHQ8aHQ7KXtpZihxPj13dClyZXR1cm4tMTtpZihrdD1ldC5jaGFyQ29kZUF0KHB0KyspLGt0PT09Mzcpe2lmKGt0PWV0LmNoYXJBdChwdCsrKSxpZT1DW2t0IGluIFZPdD9ldC5jaGFyQXQocHQrKyk6a3RdLCFpZXx8KHE9aWUoWCxkdCxxKSk8MClyZXR1cm4tMX1lbHNlIGlmKGt0IT1kdC5jaGFyQ29kZUF0KHErKykpcmV0dXJuLTF9cmV0dXJuIHF9ZnVuY3Rpb24gRChYLGV0LGR0KXt2YXIgcT1jLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5wPXVbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQihYLGV0LGR0KXt2YXIgcT1wLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWRbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSShYLGV0LGR0KXt2YXIgcT1oLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWZbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTChYLGV0LGR0KXt2YXIgcT15LmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPXhbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUihYLGV0LGR0KXt2YXIgcT1nLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPV9bcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRihYLGV0LGR0KXtyZXR1cm4gTyhYLHQsZXQsZHQpfWZ1bmN0aW9uIHooWCxldCxkdCl7cmV0dXJuIE8oWCxyLGV0LGR0KX1mdW5jdGlvbiBVKFgsZXQsZHQpe3JldHVybiBPKFgsbixldCxkdCl9ZnVuY3Rpb24gVyhYKXtyZXR1cm4gYVtYLmdldERheSgpXX1mdW5jdGlvbiBaKFgpe3JldHVybiBvW1guZ2V0RGF5KCldfWZ1bmN0aW9uIHJ0KFgpe3JldHVybiBsW1guZ2V0TW9udGgoKV19ZnVuY3Rpb24gb3QoWCl7cmV0dXJuIHNbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChYKXtyZXR1cm4gaVsrKFguZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBTdChYKXtyZXR1cm4gMSt+fihYLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gYnQoWCl7cmV0dXJuIGFbWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gTXQoWCl7cmV0dXJuIG9bWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gbHQoWCl7cmV0dXJuIGxbWC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBLdChYKXtyZXR1cm4gc1tYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIF90KFgpe3JldHVybiBpWysoWC5nZXRVVENIb3VycygpPj0xMildfWZ1bmN0aW9uIGN0KFgpe3JldHVybiAxK35+KFguZ2V0VVRDTW9udGgoKS8zKX1yZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLGIpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0scGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITEpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjRm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLFMpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjUGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITApO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH19fWZ1bmN0aW9uIEdyKGUsdCxyKXt2YXIgbj1lPDA/Ii0iOiIiLGk9KG4/LWU6ZSkrIiIsbz1pLmxlbmd0aDtyZXR1cm4gbisobzxyP25ldyBBcnJheShyLW8rMSkuam9pbih0KStpOmkpfWZ1bmN0aW9uIFNJZShlKXtyZXR1cm4gZS5yZXBsYWNlKHdJZSwiXFwkJiIpfWZ1bmN0aW9uIHlDKGUpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86IitlLm1hcChTSWUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiB2QyhlKXtmb3IodmFyIHQ9e30scj0tMSxuPWUubGVuZ3RoOysrcjxuOyl0W2Vbcl0udG9Mb3dlckNhc2UoKV09cjtyZXR1cm4gdH1mdW5jdGlvbiBNSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRUllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS51PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFRJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBDSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlY9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQUllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFVPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscis0KSk7cmV0dXJuIG4/KGUueT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxT3QoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLnk9K25bMF0rKCtuWzBdPjY4PzE5MDA6MmUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQSWUoZSx0LHIpe3ZhciBuPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKHQuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8oZS5aPW5bMV0/MDotKG5bMl0rKG5bM118fCIwMCIpKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnE9blswXSozLTMscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTEllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHT3QoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24ga0llKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5tPTAsZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTkllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIERJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gekllKGUsdCxyKXt2YXIgbj1iSWUuZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBGSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUucz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZT3QoZSx0KXtyZXR1cm4gR3IoZS5nZXREYXRlKCksdCwyKX1mdW5jdGlvbiBISWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRIb3VycygpLHQsMil9ZnVuY3Rpb24gVkllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0SG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBVSWUoZSx0KXtyZXR1cm4gR3IoMSt5dy5jb3VudChhZChlKSxlKSx0LDMpfWZ1bmN0aW9uIFpPdChlLHQpe3JldHVybiBHcihlLmdldE1pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gcUllKGUsdCl7cmV0dXJuIFpPdChlLHQpKyIwMDAifWZ1bmN0aW9uIEdJZShlLHQpe3JldHVybiBHcihlLmdldE1vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIFdJZShlLHQpe3JldHVybiBHcihlLmdldE1pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIFlJZShlLHQpe3JldHVybiBHcihlLmdldFNlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIGpJZShlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gWEllKGUsdCl7cmV0dXJuIEdyKHMxLmNvdW50KGFkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBKT3QoZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/a2coZSk6a2cuY2VpbChlKX1mdW5jdGlvbiAkSWUoZSx0KXtyZXR1cm4gZT1KT3QoZSksR3Ioa2cuY291bnQoYWQoZSksZSkrKGFkKGUpLmdldERheSgpPT09NCksdCwyKX1mdW5jdGlvbiBLSWUoZSl7cmV0dXJuIGUuZ2V0RGF5KCl9ZnVuY3Rpb24gWkllKGUsdCl7cmV0dXJuIEdyKHZ3LmNvdW50KGFkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBKSWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFFJZShlLHQpe3JldHVybiBlPUpPdChlKSxHcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gdDllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBlOWUoZSx0KXt2YXIgcj1lLmdldERheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP2tnKGUpOmtnLmNlaWwoZSksR3IoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIHI5ZShlKXt2YXIgdD1lLmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKHQ+MD8iLSI6KHQqPS0xLCIrIikpK0dyKHQvNjB8MCwiMCIsMikrR3IodCU2MCwiMCIsMil9ZnVuY3Rpb24gak90KGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDRGF0ZSgpLHQsMil9ZnVuY3Rpb24gbjllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDSG91cnMoKSx0LDIpfWZ1bmN0aW9uIGk5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ0hvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gbzllKGUsdCl7cmV0dXJuIEdyKDEreHcuY291bnQoc2QoZSksZSksdCwzKX1mdW5jdGlvbiBRT3QoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIGE5ZShlLHQpe3JldHVybiBRT3QoZSx0KSsiMDAwIn1mdW5jdGlvbiBzOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBsOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBjOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiB1OWUoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIGg5ZShlLHQpe3JldHVybiBHcihjMS5jb3VudChzZChlKS0xLGUpLHQsMil9ZnVuY3Rpb24gdDd0KGUpe3ZhciB0PWUuZ2V0VVRDRGF5KCk7cmV0dXJuIHQ+PTR8fHQ9PT0wP1JnKGUpOlJnLmNlaWwoZSl9ZnVuY3Rpb24gZjllKGUsdCl7cmV0dXJuIGU9dDd0KGUpLEdyKFJnLmNvdW50KHNkKGUpLGUpKyhzZChlKS5nZXRVVENEYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gcDllKGUpe3JldHVybiBlLmdldFVUQ0RheSgpfWZ1bmN0aW9uIGQ5ZShlLHQpe3JldHVybiBHcihidy5jb3VudChzZChlKS0xLGUpLHQsMil9ZnVuY3Rpb24gbTllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDRnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBnOWUoZSx0KXtyZXR1cm4gZT10N3QoZSksR3IoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIF85ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24geTllKGUsdCl7dmFyIHI9ZS5nZXRVVENEYXkoKTtyZXR1cm4gZT1yPj00fHxyPT09MD9SZyhlKTpSZy5jZWlsKGUpLEdyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB2OWUoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIFhPdCgpe3JldHVybiIlIn1mdW5jdGlvbiAkT3QoZSl7cmV0dXJuK2V9ZnVuY3Rpb24gS090KGUpe3JldHVybiBNYXRoLmZsb29yKCtlLzFlMyl9dmFyIFZPdCxUbyxiSWUsd0llLGU3dD1NKCgpPT57Wk8oKTtWT3Q9eyItIjoiIixfOiIgIiwwOiIwIn0sVG89L15ccypcZCsvLGJJZT0vXiUvLHdJZT0vW1xcXiQqKz98W1xdKCkue31dL2d9KTtmdW5jdGlvbiB1ZXQoZSl7cmV0dXJuIHd3PWNldChlKSxKTz13dy5mb3JtYXQscjd0PXd3LnBhcnNlLFFPPXd3LnV0Y0Zvcm1hdCxuN3Q9d3cudXRjUGFyc2Usd3d9dmFyIHd3LEpPLHI3dCxRTyxuN3QsaTd0PU0oKCk9PntlN3QoKTt1ZXQoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KX0pO3ZhciBoZXQ9TSgoKT0+e2k3dCgpfSk7ZnVuY3Rpb24gYjllKGUpe3JldHVybiBuZXcgRGF0ZShlKX1mdW5jdGlvbiB3OWUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlPytlOituZXcgRGF0ZSgrZSl9ZnVuY3Rpb24gdDcoZSx0LHIsbixpLG8sYSxzLGwpe3ZhciBjPWlkKGZDLHlmKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxwPWwoIjolUyIpLGQ9bCgiJUk6JU0iKSxnPWwoIiVJICVwIiksXz1sKCIlYSAlZCIpLHk9bCgiJWIgJWQiKSx4PWwoIiVCIiksYj1sKCIlWSIpLFM9W1thLDEseENdLFthLDUsNSp4Q10sW2EsMTUsMTUqeENdLFthLDMwLDMwKnhDXSxbbywxLGJDXSxbbyw1LDUqYkNdLFtvLDE1LDE1KmJDXSxbbywzMCwzMCpiQ10sW2ksMSx3Q10sW2ksMywzKndDXSxbaSw2LDYqd0NdLFtpLDEyLDEyKndDXSxbbiwxLFNDXSxbbiwyLDIqU0NdLFtyLDEseDllXSxbdCwxLG83dF0sW3QsMywzKm83dF0sW2UsMSxmZXRdXTtmdW5jdGlvbiBDKGspe3JldHVybihhKGspPGs/ZjpvKGspPGs/cDppKGspPGs/ZDpuKGspPGs/Zzp0KGspPGs/cihrKTxrP186eTplKGspPGs/eDpiKShrKX1mdW5jdGlvbiBQKGssTyxELEIpe2lmKGs9PW51bGwmJihrPTEwKSx0eXBlb2Ygaz09Im51bWJlciIpe3ZhciBJPU1hdGguYWJzKEQtTykvayxMPW9DKGZ1bmN0aW9uKFIpe3JldHVybiBSWzJdfSkucmlnaHQoUyxJKTtMPT09Uy5sZW5ndGg/KEI9WnkoTy9mZXQsRC9mZXQsayksaz1lKTpMPyhMPVNbSS9TW0wtMV1bMl08U1tMXVsyXS9JP0wtMTpMXSxCPUxbMV0saz1MWzBdKTooQj1NYXRoLm1heChaeShPLEQsayksMSksaz1zKX1yZXR1cm4gQj09bnVsbD9rOmsuZXZlcnkoQil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKGspe3JldHVybiBuZXcgRGF0ZSh1KGspKX0sYy5kb21haW49ZnVuY3Rpb24oayl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChydy5jYWxsKGssdzllKSk6aCgpLm1hcChiOWUpfSxjLnRpY2tzPWZ1bmN0aW9uKGssTyl7dmFyIEQ9aCgpLEI9RFswXSxJPURbRC5sZW5ndGgtMV0sTD1JPEIsUjtyZXR1cm4gTCYmKFI9QixCPUksST1SKSxSPVAoayxCLEksTyksUj1SP1IucmFuZ2UoQixJKzEpOltdLEw/Ui5yZXZlcnNlKCk6Un0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKGssTyl7cmV0dXJuIE89PW51bGw/QzpsKE8pfSxjLm5pY2U9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCk7cmV0dXJuKGs9UChrLERbMF0sRFtELmxlbmd0aC0xXSxPKSk/aChxTyhELGspKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWcoYyx0NyhlLHQscixuLGksbyxhLHMsbCkpfSxjfWZ1bmN0aW9uIGE3dCgpe3JldHVybiB0NyhhZCx0ZXQsczEseXcsUXR0LEp0dCxfdyxtdyxKTykuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pfXZhciB4QyxiQyx3QyxTQyx4OWUsbzd0LGZldCxwZXQ9TSgoKT0+e21mKCk7dXcoKTtaTygpO2hldCgpO0NnKCk7cEMoKTskdHQoKTt4Qz0xZTMsYkM9eEMqNjAsd0M9YkMqNjAsU0M9d0MqMjQseDllPVNDKjcsbzd0PVNDKjMwLGZldD1TQyozNjV9KTtmdW5jdGlvbiBzN3QoKXtyZXR1cm4gdDcoc2QsaWV0LGMxLHh3LG5ldCxyZXQsX3csbXcsUU8pLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKX12YXIgbDd0PU0oKCk9PntwZXQoKTtoZXQoKTtaTygpfSk7ZnVuY3Rpb24gZGwoZSl7cmV0dXJuIGUubWF0Y2goLy57Nn0vZykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiIjIit0fSl9dmFyIFN3PU0oKCk9Pnt9KTt2YXIgYzd0LHU3dD1NKCgpPT57U3coKTtjN3Q9ZGwoIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZiIpfSk7dmFyIGg3dCxmN3Q9TSgoKT0+e1N3KCk7aDd0PWRsKCIzOTNiNzk1MjU0YTM2YjZlY2Y5YzllZGU2Mzc5Mzk4Y2EyNTJiNWNmNmJjZWRiOWM4YzZkMzFiZDllMzllN2JhNTJlN2NiOTQ4NDNjMzlhZDQ5NGFkNjYxNmJlNzk2OWM3YjQxNzNhNTUxOTRjZTZkYmRkZTllZDYiKX0pO3ZhciBwN3QsZDd0PU0oKCk9PntTdygpO3A3dD1kbCgiMzE4MmJkNmJhZWQ2OWVjYWUxYzZkYmVmZTY1NTBkZmQ4ZDNjZmRhZTZiZmRkMGEyMzFhMzU0NzRjNDc2YTFkOTliYzdlOWMwNzU2YmIxOWU5YWM4YmNiZGRjZGFkYWViNjM2MzYzOTY5Njk2YmRiZGJkZDlkOWQ5Iil9KTt2YXIgbTd0LGc3dD1NKCgpPT57U3coKTttN3Q9ZGwoIjFmNzdiNGFlYzdlOGZmN2YwZWZmYmI3ODJjYTAyYzk4ZGY4YWQ2MjcyOGZmOTg5Njk0NjdiZGM1YjBkNThjNTY0YmM0OWM5NGUzNzdjMmY3YjZkMjdmN2Y3ZmM3YzdjN2JjYmQyMmRiZGI4ZDE3YmVjZjllZGFlNSIpfSk7dmFyIF83dCx5N3Q9TSgoKT0+e3N3KCk7dXcoKTtfN3Q9Y3coJGEoMzAwLC41LDApLCRhKC0yNDAsLjUsMSkpfSk7ZnVuY3Rpb24gYjd0KGUpeyhlPDB8fGU+MSkmJihlLT1NYXRoLmZsb29yKGUpKTt2YXIgdD1NYXRoLmFicyhlLS41KTtyZXR1cm4gZTcuaD0zNjAqZS0xMDAsZTcucz0xLjUtMS41KnQsZTcubD0uOC0uOSp0LGU3KyIifXZhciB2N3QseDd0LGU3LHc3dD1NKCgpPT57c3coKTt1dygpO3Y3dD1jdygkYSgtMTAwLC43NSwuMzUpLCRhKDgwLDEuNSwuOCkpLHg3dD1jdygkYSgyNjAsLjc1LC4zNSksJGEoODAsMS41LC44KSksZTc9JGEoKX0pO2Z1bmN0aW9uIHI3KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZVtNYXRoLm1heCgwLE1hdGgubWluKHQtMSxNYXRoLmZsb29yKHIqdCkpKV19fXZhciBTN3QsTTd0LEU3dCxUN3QsQzd0PU0oKCk9PntTdygpO1M3dD1yNyhkbCgiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLE03dD1yNyhkbCgiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTA5MDIwMjBiMDIwMjBkMDMwMzBmMDMwMzEyMDQwNDE0MDUwNDE2MDYwNTE4MDYwNTFhMDcwNjFjMDgwNzFlMDkwNzIwMGEwODIyMGIwOTI0MGMwOTI2MGQwYTI5MGUwYjJiMTAwYjJkMTEwYzJmMTIwZDMxMTMwZDM0MTQwZTM2MTUwZTM4MTYwZjNiMTgwZjNkMTkxMDNmMWExMDQyMWMxMDQ0MWQxMTQ3MWUxMTQ5MjAxMTRiMjExMTRlMjIxMTUwMjQxMjUzMjUxMjU1MjcxMjU4MjkxMTVhMmExMTVjMmMxMTVmMmQxMTYxMmYxMTYzMzExMTY1MzMxMDY3MzQxMDY5MzYxMDZiMzgxMDZjMzkwZjZlM2IwZjcwM2QwZjcxM2YwZjcyNDAwZjc0NDIwZjc1NDQwZjc2NDUxMDc3NDcxMDc4NDkxMDc4NGExMDc5NGMxMTdhNGUxMTdiNGYxMjdiNTExMjdjNTIxMzdjNTQxMzdkNTYxNDdkNTcxNTdlNTkxNTdlNWExNjdlNWMxNjdmNWQxNzdmNWYxODdmNjAxODgwNjIxOTgwNjQxYTgwNjUxYTgwNjcxYjgwNjgxYzgxNmExYzgxNmIxZDgxNmQxZDgxNmUxZTgxNzAxZjgxNzIxZjgxNzMyMDgxNzUyMTgxNzYyMTgxNzgyMjgxNzkyMjgyN2IyMzgyN2MyMzgyN2UyNDgyODAyNTgyODEyNTgxODMyNjgxODQyNjgxODYyNzgxODgyNzgxODkyODgxOGIyOTgxOGMyOTgxOGUyYTgxOTAyYTgxOTEyYjgxOTMyYjgwOTQyYzgwOTYyYzgwOTgyZDgwOTkyZDgwOWIyZTdmOWMyZTdmOWUyZjdmYTAyZjdmYTEzMDdlYTMzMDdlYTUzMTdlYTYzMTdkYTgzMjdkYWEzMzdkYWIzMzdjYWQzNDdjYWUzNDdiYjAzNTdiYjIzNTdiYjMzNjdhYjUzNjdhYjczNzc5YjgzNzc5YmEzODc4YmMzOTc4YmQzOTc3YmYzYTc3YzAzYTc2YzIzYjc1YzQzYzc1YzUzYzc0YzczZDczYzgzZTczY2EzZTcyY2MzZjcxY2Q0MDcxY2Y0MDcwZDA0MTZmZDI0MjZmZDM0MzZlZDU0NDZkZDY0NTZjZDg0NTZjZDk0NjZiZGI0NzZhZGM0ODY5ZGU0OTY4ZGY0YTY4ZTA0YzY3ZTI0ZDY2ZTM0ZTY1ZTQ0ZjY0ZTU1MDY0ZTc1MjYzZTg1MzYyZTk1NDYyZWE1NjYxZWI1NzYwZWM1ODYwZWQ1YTVmZWU1YjVlZWY1ZDVlZjA1ZjVlZjE2MDVkZjI2MjVkZjI2NDVjZjM2NTVjZjQ2NzVjZjQ2OTVjZjU2YjVjZjY2YzVjZjY2ZTVjZjc3MDVjZjc3MjVjZjg3NDVjZjg3NjVjZjk3ODVkZjk3OTVkZjk3YjVkZmE3ZDVlZmE3ZjVlZmE4MTVmZmI4MzVmZmI4NTYwZmI4NzYxZmM4OTYxZmM4YTYyZmM4YzYzZmM4ZTY0ZmM5MDY1ZmQ5MjY2ZmQ5NDY3ZmQ5NjY4ZmQ5ODY5ZmQ5YTZhZmQ5YjZiZmU5ZDZjZmU5ZjZkZmVhMTZlZmVhMzZmZmVhNTcxZmVhNzcyZmVhOTczZmVhYTc0ZmVhYzc2ZmVhZTc3ZmViMDc4ZmViMjdhZmViNDdiZmViNjdjZmViNzdlZmViOTdmZmViYjgxZmViZDgyZmViZjg0ZmVjMTg1ZmVjMjg3ZmVjNDg4ZmVjNjhhZmVjODhjZmVjYThkZmVjYzhmZmVjZDkwZmVjZjkyZmVkMTk0ZmVkMzk1ZmVkNTk3ZmVkNzk5ZmVkODlhZmRkYTljZmRkYzllZmRkZWEwZmRlMGExZmRlMmEzZmRlM2E1ZmRlNWE3ZmRlN2E5ZmRlOWFhZmRlYmFjZmNlY2FlZmNlZWIwZmNmMGIyZmNmMmI0ZmNmNGI2ZmNmNmI4ZmNmN2I5ZmNmOWJiZmNmYmJkZmNmZGJmIikpLEU3dD1yNyhkbCgiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0IikpLFQ3dD1yNyhkbCgiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpfSk7ZnVuY3Rpb24gbjcoZSl7dmFyIHQ9MCxyPTEsbj0hMTtmdW5jdGlvbiBpKG8pe3ZhciBhPShvLXQpLyhyLXQpO3JldHVybiBlKG4/TWF0aC5tYXgoMCxNYXRoLm1pbigxLGEpKTphKX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K29bMF0scj0rb1sxXSxpKTpbdCxyXX0saS5jbGFtcD1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hIW8saSk6bn0saS5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9byxpKTplfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbjcoZSkuZG9tYWluKFt0LHJdKS5jbGFtcChuKX0sb2QoaSl9dmFyIEE3dD1NKCgpPT57cHcoKX0pO3ZhciBQN3Q9TSgoKT0+e1VOdCgpO0tEdCgpO3B3KCk7dE90KCk7YnR0KCk7ck90KCk7bk90KCk7aU90KCk7b090KCk7cGV0KCk7bDd0KCk7dTd0KCk7Zjd0KCk7ZDd0KCk7Zzd0KCk7eTd0KCk7dzd0KCk7Qzd0KCk7QTd0KCl9KTt2YXIgaTcsTUMsbzc9TSgoKT0+e2k3PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixNQz17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6aTcseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifX0pO2Z1bmN0aW9uIE13KGUpe3ZhciB0PWUrPSIiLHI9dC5pbmRleE9mKCI6Iik7cmV0dXJuIHI+PTAmJih0PWUuc2xpY2UoMCxyKSkhPT0ieG1sbnMiJiYoZT1lLnNsaWNlKHIrMSkpLE1DLmhhc093blByb3BlcnR5KHQpP3tzcGFjZTpNQ1t0XSxsb2NhbDplfTplfXZhciBhNz1NKCgpPT57bzcoKX0pO2Z1bmN0aW9uIFM5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PWk3JiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1pNz90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gTTllKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIE5nKGUpe3ZhciB0PU13KGUpO3JldHVybih0LmxvY2FsP005ZTpTOWUpKHQpfXZhciBFQz1NKCgpPT57YTcoKTtvNygpfSk7ZnVuY3Rpb24gRTllKCl7fWZ1bmN0aW9uIEV3KGUpe3JldHVybiBlPT1udWxsP0U5ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoZSl9fXZhciBzNz1NKCgpPT57fSk7ZnVuY3Rpb24gSTd0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1FdyhlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IEhuKG4sdGhpcy5fcGFyZW50cyl9dmFyIEw3dD1NKCgpPT57U2MoKTtzNygpfSk7ZnVuY3Rpb24gVDllKCl7cmV0dXJuW119ZnVuY3Rpb24gbDcoZSl7cmV0dXJuIGU9PW51bGw/VDllOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19dmFyIGRldD1NKCgpPT57fSk7ZnVuY3Rpb24gazd0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1sNyhlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgSG4obixpKX12YXIgUjd0PU0oKCk9PntTYygpO2RldCgpfSk7dmFyIEQ3dCxUdyxON3QsYzcsbWV0PU0oKCk9PntEN3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19O3R5cGVvZiBkb2N1bWVudCE9InVuZGVmaW5lZCImJihUdz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsVHcubWF0Y2hlc3x8KE43dD1Udy53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fFR3Lm1zTWF0Y2hlc1NlbGVjdG9yfHxUdy5tb3pNYXRjaGVzU2VsZWN0b3J8fFR3Lm9NYXRjaGVzU2VsZWN0b3IsRDd0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBON3QuY2FsbCh0aGlzLGUpfX0pKTtjNz1EN3R9KTtmdW5jdGlvbiBPN3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWM3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBIbihuLHRoaXMuX3BhcmVudHMpfXZhciB6N3Q9TSgoKT0+e1NjKCk7bWV0KCl9KTtmdW5jdGlvbiB1NyhlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgZ2V0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGN3QoKXtyZXR1cm4gbmV3IEhuKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKHU3KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBUQyhlLHQpe3RoaXMub3duZXJEb2N1bWVudD1lLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9ZS5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1lLHRoaXMuX19kYXRhX189dH12YXIgX2V0PU0oKCk9PntnZXQoKTtTYygpO1RDLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VEMsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBCN3QoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBIN3Q9TSgoKT0+e30pO2Z1bmN0aW9uIEM5ZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgVEMoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIEE5ZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPVY3dCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPVY3dCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyBUQyhlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIFU3dChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/QTllOkM5ZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUI3dChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgSG4oYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBWN3QscTd0PU0oKCk9PntTYygpO19ldCgpO0g3dCgpO1Y3dD0iJCJ9KTtmdW5jdGlvbiBHN3QoKXtyZXR1cm4gbmV3IEhuKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAodTcpLHRoaXMuX3BhcmVudHMpfXZhciBXN3Q9TSgoKT0+e2dldCgpO1NjKCl9KTtmdW5jdGlvbiBZN3QoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IEhuKGEsdGhpcy5fcGFyZW50cyl9dmFyIGo3dD1NKCgpPT57U2MoKX0pO2Z1bmN0aW9uIFg3dCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0tMSxyPWUubGVuZ3RoOysrdDxyOylmb3IodmFyIG49ZVt0XSxpPW4ubGVuZ3RoLTEsbz1uW2ldLGE7LS1pPj0wOykoYT1uW2ldKSYmKG8mJm8hPT1hLm5leHRTaWJsaW5nJiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgJDd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBLN3QoZSl7ZXx8KGU9UDllKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IEhuKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBQOWUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIFo3dD1NKCgpPT57U2MoKX0pO2Z1bmN0aW9uIEo3dCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgUTd0PU0oKCk9Pnt9KTtmdW5jdGlvbiB0enQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgZXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByenQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBuenQ9TSgoKT0+e30pO2Z1bmN0aW9uIGl6dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIG96dD1NKCgpPT57fSk7ZnVuY3Rpb24gYXp0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBzenQ9TSgoKT0+e30pO2Z1bmN0aW9uIGx6dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIGN6dD1NKCgpPT57fSk7ZnVuY3Rpb24gSTllKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBMOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBrOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBSOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gTjllKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBEOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gdXp0KGUsdCl7dmFyIHI9TXcoZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP0w5ZTpJOWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9EOWU6TjllOnIubG9jYWw/UjllOms5ZSkocix0KSl9dmFyIGh6dD1NKCgpPT57YTcoKX0pO2Z1bmN0aW9uIEN3KGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgaDc9TSgoKT0+e30pO2Z1bmN0aW9uIE85ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiB6OWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBGOWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gZnp0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9POWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/RjllOno5ZSkoZSx0LHI9PW51bGw/IiI6cikpOnlldCh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiB5ZXQoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxDdyhlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgdmV0PU0oKCk9PntoNygpfSk7ZnVuY3Rpb24gQjllKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBIOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIFY5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBwenQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9COWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/VjllOkg5ZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIGR6dD1NKCgpPT57fSk7ZnVuY3Rpb24gbXp0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiB4ZXQoZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgZ3p0KGUpfWZ1bmN0aW9uIGd6dChlKXt0aGlzLl9ub2RlPWUsdGhpcy5fbmFtZXM9bXp0KGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gX3p0KGUsdCl7Zm9yKHZhciByPXhldChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIHl6dChlLHQpe2Zvcih2YXIgcj14ZXQoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBVOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7X3p0KHRoaXMsZSl9fWZ1bmN0aW9uIHE5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt5enQodGhpcyxlKX19ZnVuY3Rpb24gRzllKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP196dDp5enQpKHRoaXMsZSl9fWZ1bmN0aW9uIHZ6dChlLHQpe3ZhciByPW16dChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj14ZXQodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/RzllOnQ/VTllOnE5ZSkocix0KSl9dmFyIHh6dD1NKCgpPT57Z3p0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dDwwJiYodGhpcy5fbmFtZXMucHVzaChlKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoZSk+PTB9fX0pO2Z1bmN0aW9uIFc5ZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gWTllKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gajllKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBienQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/VzllOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9qOWU6WTllKShlKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIHd6dD1NKCgpPT57fSk7ZnVuY3Rpb24gWDllKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gJDllKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWV9fWZ1bmN0aW9uIEs5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFN6dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9YOWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0s5ZTokOWUpKGUpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9dmFyIE16dD1NKCgpPT57fSk7ZnVuY3Rpb24gWjllKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIEV6dCgpe3JldHVybiB0aGlzLmVhY2goWjllKX12YXIgVHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKOWUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBDenQoKXtyZXR1cm4gdGhpcy5lYWNoKEo5ZSl9dmFyIEF6dD1NKCgpPT57fSk7ZnVuY3Rpb24gUHp0KGUpe3ZhciB0PXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6TmcoZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIEl6dD1NKCgpPT57RUMoKX0pO2Z1bmN0aW9uIFE5ZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIEx6dChlLHQpe3ZhciByPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6TmcoZSksbj10PT1udWxsP1E5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OkV3KHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX12YXIga3p0PU0oKCk9PntFQygpO3M3KCl9KTtmdW5jdGlvbiB0TGUoKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBSenQoKXtyZXR1cm4gdGhpcy5lYWNoKHRMZSl9dmFyIE56dD1NKCgpPT57fSk7ZnVuY3Rpb24gZUxlKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITEpLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIHJMZSgpe3JldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKCEwKSx0aGlzLm5leHRTaWJsaW5nKX1mdW5jdGlvbiBEenQoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/ckxlOmVMZSl9dmFyIE96dD1NKCgpPT57fSk7ZnVuY3Rpb24genp0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgRnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBuTGUoZSx0LHIpe3JldHVybiBlPVZ6dChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBWenQoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1QdTtQdT1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtQdT1pfX19ZnVuY3Rpb24gaUxlKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiBvTGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gYUxlKGUsdCxyKXt2YXIgbj1IenQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9uTGU6Vnp0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIFV6dChlLHQscil7dmFyIG49aUxlKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9hTGU6b0xlLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uIHF6dChlLHQscixuKXt2YXIgaT1QdTtlLnNvdXJjZUV2ZW50PVB1LFB1PWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtQdT1pfX12YXIgSHp0LFB1LEJ6dCxmNz1NKCgpPT57SHp0PXt9LFB1PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKEJ6dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBCenR8fChIenQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gR3p0KGUsdCxyKXt2YXIgbj1DdyhlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBzTGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gR3p0KHRoaXMsZSx0KX19ZnVuY3Rpb24gbExlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEd6dCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBXenQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9sTGU6c0xlKShlLHQpKX12YXIgWXp0PU0oKCk9PntoNygpfSk7ZnVuY3Rpb24gSG4oZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24ganp0KCl7cmV0dXJuIG5ldyBIbihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLENDKX12YXIgQ0MsWHp0LFNjPU0oKCk9PntMN3QoKTtSN3QoKTt6N3QoKTtxN3QoKTtfZXQoKTtXN3QoKTtqN3QoKTskN3QoKTtaN3QoKTtRN3QoKTtlenQoKTtuenQoKTtvenQoKTtzenQoKTtjenQoKTtoenQoKTt2ZXQoKTtkenQoKTt4enQoKTt3enQoKTtNenQoKTtUenQoKTtBenQoKTtJenQoKTtrenQoKTtOenQoKTtPenQoKTtGenQoKTtmNygpO1l6dCgpO0NDPVtudWxsXTtIbi5wcm90b3R5cGU9anp0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6SG4sc2VsZWN0Okk3dCxzZWxlY3RBbGw6azd0LGZpbHRlcjpPN3QsZGF0YTpVN3QsZW50ZXI6Rjd0LGV4aXQ6Rzd0LG1lcmdlOlk3dCxvcmRlcjpYN3Qsc29ydDpLN3QsY2FsbDpKN3Qsbm9kZXM6dHp0LG5vZGU6cnp0LHNpemU6aXp0LGVtcHR5OmF6dCxlYWNoOmx6dCxhdHRyOnV6dCxzdHlsZTpmenQscHJvcGVydHk6cHp0LGNsYXNzZWQ6dnp0LHRleHQ6Ynp0LGh0bWw6U3p0LHJhaXNlOkV6dCxsb3dlcjpDenQsYXBwZW5kOlB6dCxpbnNlcnQ6THp0LHJlbW92ZTpSenQsY2xvbmU6RHp0LGRhdHVtOnp6dCxvbjpVenQsZGlzcGF0Y2g6V3p0fTtYenQ9anp0fSk7ZnVuY3Rpb24gcDcoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgSG4oW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBIbihbW2VdXSxDQyl9dmFyIGJldD1NKCgpPT57U2MoKX0pO2Z1bmN0aW9uICR6dChlKXtyZXR1cm4gcDcoTmcoZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX12YXIgS3p0PU0oKCk9PntFQygpO2JldCgpfSk7ZnVuY3Rpb24gZDcoKXtyZXR1cm4gbmV3IHdldH1mdW5jdGlvbiB3ZXQoKXt0aGlzLl89IkAiKygrK2NMZSkudG9TdHJpbmcoMzYpfXZhciBjTGUsWnp0PU0oKCk9PntjTGU9MDt3ZXQucHJvdG90eXBlPWQ3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6d2V0LGdldDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5fOyEodCBpbiBlKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiBlW3RdfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0aGlzLl9dPXR9LHJlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fIGluIGUmJmRlbGV0ZSBlW3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319fSk7ZnVuY3Rpb24gQXcoKXtmb3IodmFyIGU9UHUsdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgbTc9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBEZyhlLHQpe3ZhciByPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBuPXIuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PXQuY2xpZW50WCxuLnk9dC5jbGllbnRZLG49bi5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtuLngsbi55XX12YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktaS50b3AtZS5jbGllbnRUb3BdfXZhciBBQz1NKCgpPT57fSk7ZnVuY3Rpb24gSnp0KGUpe3ZhciB0PUF3KCk7cmV0dXJuIHQuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pLERnKGUsdCl9dmFyIFF6dD1NKCgpPT57bTcoKTtBQygpfSk7ZnVuY3Rpb24gdEZ0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IEhuKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEhuKFtlPT1udWxsP1tdOmVdLENDKX12YXIgZUZ0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gckZ0KGUsdCxyKXthcmd1bWVudHMubGVuZ3RoPDMmJihyPXQsdD1BdygpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIG49MCxpPXQ/dC5sZW5ndGg6MCxvO248aTsrK24paWYoKG89dFtuXSkuaWRlbnRpZmllcj09PXIpcmV0dXJuIERnKGUsbyk7cmV0dXJuIG51bGx9dmFyIG5GdD1NKCgpPT57bTcoKTtBQygpfSk7ZnVuY3Rpb24gaUZ0KGUsdCl7dD09bnVsbCYmKHQ9QXcoKS50b3VjaGVzKTtmb3IodmFyIHI9MCxuPXQ/dC5sZW5ndGg6MCxpPW5ldyBBcnJheShuKTtyPG47KytyKWlbcl09RGcoZSx0W3JdKTtyZXR1cm4gaX12YXIgb0Z0PU0oKCk9PnttNygpO0FDKCl9KTt2YXIgYUZ0PU0oKCk9PntLenQoKTtFQygpO1p6dCgpO21ldCgpO1F6dCgpO2E3KCk7bzcoKTtBQygpO2JldCgpO2VGdCgpO1NjKCk7czcoKTtkZXQoKTt2ZXQoKTtuRnQoKTtvRnQoKTtoNygpO2Y3KCl9KTtmdW5jdGlvbiBUZXQoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBzRnQoKXtyZXR1cm4gbmV3IFRldH12YXIgTWV0LEVldCx1MSx1TGUsSXUsbEZ0PU0oKCk9PntNZXQ9TWF0aC5QSSxFZXQ9MipNZXQsdTE9MWUtNix1TGU9RWV0LXUxO1RldC5wcm90b3R5cGU9c0Z0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VGV0LG1vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPSt0KX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJRIisgK2UrIiwiKyArdCsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fKz0iQyIrICtlKyIsIisgK3QrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbihlLHQscixuLGkpe2U9K2UsdD0rdCxyPStyLG49K24saT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9ci1lLGw9bi10LGM9by1lLHU9YS10LGg9YypjK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2UgaWYoaD51MSlpZighKE1hdGguYWJzKHUqcy1sKmMpPnUxKXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZXt2YXIgZj1yLW8scD1uLWEsZD1zKnMrbCpsLGc9ZipmK3AqcCxfPU1hdGguc3FydChkKSx5PU1hdGguc3FydChoKSx4PWkqTWF0aC50YW4oKE1ldC1NYXRoLmFjb3MoKGQraC1nKS8oMipfKnkpKSkvMiksYj14L3ksUz14L187TWF0aC5hYnMoYi0xKT51MSYmKHRoaXMuXys9IkwiKyhlK2IqYykrIiwiKyh0K2IqdSkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyh1KmY+YypwKSsiLCIrKHRoaXMuX3gxPWUrUypzKSsiLCIrKHRoaXMuX3kxPXQrUypsKX19LGFyYzpmdW5jdGlvbihlLHQscixuLGksbyl7ZT0rZSx0PSt0LHI9K3Isbz0hIW87dmFyIGE9cipNYXRoLmNvcyhuKSxzPXIqTWF0aC5zaW4obiksbD1lK2EsYz10K3MsdT0xXm8saD1vP24taTppLW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO3RoaXMuX3gxPT09bnVsbD90aGlzLl8rPSJNIitsKyIsIitjOihNYXRoLmFicyh0aGlzLl94MS1sKT51MXx8TWF0aC5hYnModGhpcy5feTEtYyk+dTEpJiYodGhpcy5fKz0iTCIrbCsiLCIrYyksciYmKGg8MCYmKGg9aCVFZXQrRWV0KSxoPnVMZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKGUtYSkrIiwiKyh0LXMpKyJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD51MSYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoaD49TWV0KSsiLCIrdSsiLCIrKHRoaXMuX3gxPWUrcipNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT10K3IqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07SXU9c0Z0fSk7dmFyIFB3PU0oKCk9PntsRnQoKX0pO2Z1bmN0aW9uIEdlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgT2c9TSgoKT0+e30pO2Z1bmN0aW9uIHVGdChlKXtyZXR1cm4gZT4xPzA6ZTwtMT9rdTpNYXRoLmFjb3MoZSl9ZnVuY3Rpb24gQWV0KGUpe3JldHVybiBlPj0xP1BDOmU8PS0xPy1QQzpNYXRoLmFzaW4oZSl9dmFyIENldCxIbyx6ZyxjRnQsZzcsTHUsaDEsQ28sa3UsUEMsTWMsSXc9TSgoKT0+e0NldD1NYXRoLmFicyxIbz1NYXRoLmF0YW4yLHpnPU1hdGguY29zLGNGdD1NYXRoLm1heCxnNz1NYXRoLm1pbixMdT1NYXRoLnNpbixoMT1NYXRoLnNxcnQsQ289MWUtMTIsa3U9TWF0aC5QSSxQQz1rdS8yLE1jPTIqa3V9KTtmdW5jdGlvbiBoTGUoZSl7cmV0dXJuIGUuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gZkxlKGUpe3JldHVybiBlLm91dGVyUmFkaXVzfWZ1bmN0aW9uIHBMZShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIGRMZShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBtTGUoZSl7cmV0dXJuIGUmJmUucGFkQW5nbGV9ZnVuY3Rpb24gZ0xlKGUsdCxyLG4saSxvLGEscyl7dmFyIGw9ci1lLGM9bi10LHU9YS1pLGg9cy1vLGY9KHUqKHQtbyktaCooZS1pKSkvKGgqbC11KmMpO3JldHVybltlK2YqbCx0K2YqY119ZnVuY3Rpb24gXzcoZSx0LHIsbixpLG8sYSl7dmFyIHM9ZS1yLGw9dC1uLGM9KGE/bzotbykvaDEocypzK2wqbCksdT1jKmwsaD0tYypzLGY9ZSt1LHA9dCtoLGQ9cit1LGc9bitoLF89KGYrZCkvMix5PShwK2cpLzIseD1kLWYsYj1nLXAsUz14KngrYipiLEM9aS1vLFA9ZipnLWQqcCxrPShiPDA/LTE6MSkqaDEoY0Z0KDAsQypDKlMtUCpQKSksTz0oUCpiLXgqaykvUyxEPSgtUCp4LWIqaykvUyxCPShQKmIreCprKS9TLEk9KC1QKngrYiprKS9TLEw9Ty1fLFI9RC15LEY9Qi1fLHo9SS15O3JldHVybiBMKkwrUipSPkYqRit6KnomJihPPUIsRD1JKSx7Y3g6TyxjeTpELHgwMTotdSx5MDE6LWgseDExOk8qKGkvQy0xKSx5MTE6RCooaS9DLTEpfX1mdW5jdGlvbiBoRnQoKXt2YXIgZT1oTGUsdD1mTGUscj1HZSgwKSxuPW51bGwsaT1wTGUsbz1kTGUsYT1tTGUscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgYyx1LGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHA9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktUEMsZD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1QQyxnPUNldChkLXApLF89ZD5wO2lmKHN8fChzPWM9SXUoKSksZjxoJiYodT1mLGY9aCxoPXUpLCEoZj5Dbykpcy5tb3ZlVG8oMCwwKTtlbHNlIGlmKGc+TWMtQ28pcy5tb3ZlVG8oZip6ZyhwKSxmKkx1KHApKSxzLmFyYygwLDAsZixwLGQsIV8pLGg+Q28mJihzLm1vdmVUbyhoKnpnKGQpLGgqTHUoZCkpLHMuYXJjKDAsMCxoLGQscCxfKSk7ZWxzZXt2YXIgeT1wLHg9ZCxiPXAsUz1kLEM9ZyxQPWcsaz1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLE89az5DbyYmKG4/K24uYXBwbHkodGhpcyxhcmd1bWVudHMpOmgxKGgqaCtmKmYpKSxEPWc3KENldChmLWgpLzIsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxCPUQsST1ELEwsUjtpZihPPkNvKXt2YXIgRj1BZXQoTy9oKkx1KGspKSx6PUFldChPL2YqTHUoaykpOyhDLT1GKjIpPkNvPyhGKj1fPzE6LTEsYis9RixTLT1GKTooQz0wLGI9Uz0ocCtkKS8yKSwoUC09eioyKT5Dbz8oeio9Xz8xOi0xLHkrPXoseC09eik6KFA9MCx5PXg9KHArZCkvMil9dmFyIFU9Zip6Zyh5KSxXPWYqTHUoeSksWj1oKnpnKFMpLHJ0PWgqTHUoUyk7aWYoRD5Dbyl7dmFyIG90PWYqemcoeCksc3Q9ZipMdSh4KSxTdD1oKnpnKGIpLGJ0PWgqTHUoYik7aWYoZzxrdSl7dmFyIE10PUM+Q28/Z0xlKFUsVyxTdCxidCxvdCxzdCxaLHJ0KTpbWixydF0sbHQ9VS1NdFswXSxLdD1XLU10WzFdLF90PW90LU10WzBdLGN0PXN0LU10WzFdLFg9MS9MdSh1RnQoKGx0Kl90K0t0KmN0KS8oaDEobHQqbHQrS3QqS3QpKmgxKF90Kl90K2N0KmN0KSkpLzIpLGV0PWgxKE10WzBdKk10WzBdK010WzFdKk10WzFdKTtCPWc3KEQsKGgtZXQpLyhYLTEpKSxJPWc3KEQsKGYtZXQpLyhYKzEpKX19UD5Dbz9JPkNvPyhMPV83KFN0LGJ0LFUsVyxmLEksXyksUj1fNyhvdCxzdCxaLHJ0LGYsSSxfKSxzLm1vdmVUbyhMLmN4K0wueDAxLEwuY3krTC55MDEpLEk8RD9zLmFyYyhMLmN4LEwuY3ksSSxIbyhMLnkwMSxMLngwMSksSG8oUi55MDEsUi54MDEpLCFfKToocy5hcmMoTC5jeCxMLmN5LEksSG8oTC55MDEsTC54MDEpLEhvKEwueTExLEwueDExKSwhXykscy5hcmMoMCwwLGYsSG8oTC5jeStMLnkxMSxMLmN4K0wueDExKSxIbyhSLmN5K1IueTExLFIuY3grUi54MTEpLCFfKSxzLmFyYyhSLmN4LFIuY3ksSSxIbyhSLnkxMSxSLngxMSksSG8oUi55MDEsUi54MDEpLCFfKSkpOihzLm1vdmVUbyhVLFcpLHMuYXJjKDAsMCxmLHkseCwhXykpOnMubW92ZVRvKFUsVyksIShoPkNvKXx8IShDPkNvKT9zLmxpbmVUbyhaLHJ0KTpCPkNvPyhMPV83KFoscnQsb3Qsc3QsaCwtQixfKSxSPV83KFUsVyxTdCxidCxoLC1CLF8pLHMubGluZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksQjxEP3MuYXJjKEwuY3gsTC5jeSxCLEhvKEwueTAxLEwueDAxKSxIbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksQixIbyhMLnkwMSxMLngwMSksSG8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsaCxIbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEhvKFIuY3krUi55MTEsUi5jeCtSLngxMSksXykscy5hcmMoUi5jeCxSLmN5LEIsSG8oUi55MTEsUi54MTEpLEhvKFIueTAxLFIueDAxKSwhXykpKTpzLmFyYygwLDAsaCxTLGIsXyl9aWYocy5jbG9zZVBhdGgoKSxjKXJldHVybiBzPW51bGwsYysiInx8bnVsbH1yZXR1cm4gbC5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBjPSgrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMix1PSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1rdS8yO3JldHVyblt6Zyh1KSpjLEx1KHUpKmNdfSxsLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6R2UoK2MpLGwpOmV9LGwub3V0ZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6dH0sbC5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6cn0sbC5wYWRSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Yz09bnVsbD9udWxsOnR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6R2UoK2MpLGwpOm59LGwuc3RhcnRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTppfSxsLmVuZEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6R2UoK2MpLGwpOm99LGwucGFkQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6YX0sbC5jb250ZXh0PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWM9PW51bGw/bnVsbDpjLGwpOnN9LGx9dmFyIGZGdD1NKCgpPT57UHcoKTtPZygpO0l3KCl9KTtmdW5jdGlvbiBwRnQoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIEZnKGUpe3JldHVybiBuZXcgcEZ0KGUpfXZhciBJQz1NKCgpPT57cEZ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfX19fSk7ZnVuY3Rpb24gTHcoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24ga3coZSl7cmV0dXJuIGVbMV19dmFyIHk3PU0oKCk9Pnt9KTtmdW5jdGlvbiBSdygpe3ZhciBlPUx3LHQ9a3cscj1HZSghMCksbj1udWxsLGk9Rmcsbz1udWxsO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGg9ITEsZjtmb3Iobj09bnVsbCYmKG89aShmPUl1KCkpKSxsPTA7bDw9YzsrK2wpIShsPGMmJnIodT1zW2xdLGwscykpPT09aCYmKChoPSFoKT9vLmxpbmVTdGFydCgpOm8ubGluZUVuZCgpKSxoJiZvLnBvaW50KCtlKHUsbCxzKSwrdCh1LGwscykpO2lmKGYpcmV0dXJuIG89bnVsbCxmKyIifHxudWxsfXJldHVybiBhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6ZX0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOnR9LGEuZGVmaW5lZD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCEhcyksYSk6cn0sYS5jdXJ2ZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1zLG4hPW51bGwmJihvPWkobikpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz09bnVsbD9uPW89bnVsbDpvPWkobj1zKSxhKTpufSxhfXZhciB2Nz1NKCgpPT57UHcoKTtPZygpO0lDKCk7eTcoKX0pO2Z1bmN0aW9uIHg3KCl7dmFyIGU9THcsdD1udWxsLHI9R2UoMCksbj1rdyxpPUdlKCEwKSxvPW51bGwsYT1GZyxzPW51bGw7ZnVuY3Rpb24gbCh1KXt2YXIgaCxmLHAsZD11Lmxlbmd0aCxnLF89ITEseSx4PW5ldyBBcnJheShkKSxiPW5ldyBBcnJheShkKTtmb3Iobz09bnVsbCYmKHM9YSh5PUl1KCkpKSxoPTA7aDw9ZDsrK2gpe2lmKCEoaDxkJiZpKGc9dVtoXSxoLHUpKT09PV8paWYoXz0hXylmPWgscy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCkscD1oLTE7cD49ZjstLXApcy5wb2ludCh4W3BdLGJbcF0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfV8mJih4W2hdPStlKGcsaCx1KSxiW2hdPStyKGcsaCx1KSxzLnBvaW50KHQ/K3QoZyxoLHUpOnhbaF0sbj8rbihnLGgsdSk6YltoXSkpfWlmKHkpcmV0dXJuIHM9bnVsbCx5KyIifHxudWxsfWZ1bmN0aW9uIGMoKXtyZXR1cm4gUncoKS5kZWZpbmVkKGkpLmN1cnZlKGEpLmNvbnRleHQobyl9cmV0dXJuIGwueD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSx0PW51bGwsbCk6ZX0sbC54MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTplfSxsLngxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTp0fSxsLnk9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpHZSgrdSksbj1udWxsLGwpOnJ9LGwueTA9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpHZSgrdSksbCk6cn0sbC55MT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj11PT1udWxsP251bGw6dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpHZSgrdSksbCk6bn0sbC5saW5lWDA9bC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShyKX0sbC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShuKX0sbC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShyKX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoISF1KSxsKTppfSxsLmN1cnZlPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXUsbyE9bnVsbCYmKHM9YShvKSksbCk6YX0sbC5jb250ZXh0PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PT1udWxsP289cz1udWxsOnM9YShvPXUpLGwpOm99LGx9dmFyIFBldD1NKCgpPT57UHcoKTtPZygpO0lDKCk7djcoKTt5NygpfSk7ZnVuY3Rpb24gZEZ0KGUsdCl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfXZhciBtRnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGdGdChlKXtyZXR1cm4gZX12YXIgX0Z0PU0oKCk9Pnt9KTtmdW5jdGlvbiB5RnQoKXt2YXIgZT1nRnQsdD1kRnQscj1udWxsLG49R2UoMCksaT1HZShNYyksbz1HZSgwKTtmdW5jdGlvbiBhKHMpe3ZhciBsLGM9cy5sZW5ndGgsdSxoLGY9MCxwPW5ldyBBcnJheShjKSxkPW5ldyBBcnJheShjKSxnPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfPU1hdGgubWluKE1jLE1hdGgubWF4KC1NYyxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSkseSx4PU1hdGgubWluKE1hdGguYWJzKF8pL2Msby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooXzwwPy0xOjEpLFM7Zm9yKGw9MDtsPGM7KytsKShTPWRbcFtsXT1sXT0rZShzW2xdLGwscykpPjAmJihmKz1TKTtmb3IodCE9bnVsbD9wLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gdChkW0NdLGRbUF0pfSk6ciE9bnVsbCYmcC5zb3J0KGZ1bmN0aW9uKEMsUCl7cmV0dXJuIHIoc1tDXSxzW1BdKX0pLGw9MCxoPWY/KF8tYypiKS9mOjA7bDxjOysrbCxnPXkpdT1wW2xdLFM9ZFt1XSx5PWcrKFM+MD9TKmg6MCkrYixkW3VdPXtkYXRhOnNbdV0saW5kZXg6bCx2YWx1ZTpTLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTp5LHBhZEFuZ2xlOnh9O3JldHVybiBkfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOmV9LGEuc29ydFZhbHVlcz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLHI9bnVsbCxhKTp0fSxhLnNvcnQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyx0PW51bGwsYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6aX0sYS5wYWRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTpvfSxhfXZhciB2RnQ9TSgoKT0+e09nKCk7bUZ0KCk7X0Z0KCk7SXcoKX0pO2Z1bmN0aW9uIHhGdChlKXt0aGlzLl9jdXJ2ZT1lfWZ1bmN0aW9uIE53KGUpe2Z1bmN0aW9uIHQocil7cmV0dXJuIG5ldyB4RnQoZShyKSl9cmV0dXJuIHQuX2N1cnZlPWUsdH12YXIgYjcsSWV0PU0oKCk9PntJQygpO2I3PU53KEZnKTt4RnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5fY3VydmUucG9pbnQodCpNYXRoLnNpbihlKSx0Ki1NYXRoLmNvcyhlKSl9fX0pO2Z1bmN0aW9uIER3KGUpe3ZhciB0PWUuY3VydmU7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5yYWRpdXM9ZS55LGRlbGV0ZSBlLnksZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KE53KHIpKTp0KCkuX2N1cnZlfSxlfWZ1bmN0aW9uIExldCgpe3JldHVybiBEdyhSdygpLmN1cnZlKGI3KSl9dmFyIGtldD1NKCgpPT57SWV0KCk7djcoKX0pO2Z1bmN0aW9uIFJldCgpe3ZhciBlPXg3KCkuY3VydmUoYjcpLHQ9ZS5jdXJ2ZSxyPWUubGluZVgwLG49ZS5saW5lWDEsaT1lLmxpbmVZMCxvPWUubGluZVkxO3JldHVybiBlLmFuZ2xlPWUueCxkZWxldGUgZS54LGUuc3RhcnRBbmdsZT1lLngwLGRlbGV0ZSBlLngwLGUuZW5kQW5nbGU9ZS54MSxkZWxldGUgZS54MSxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmlubmVyUmFkaXVzPWUueTAsZGVsZXRlIGUueTAsZS5vdXRlclJhZGl1cz1lLnkxLGRlbGV0ZSBlLnkxLGUubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRHcocigpKX0sZGVsZXRlIGUubGluZVgwLGUubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIER3KG4oKSl9LGRlbGV0ZSBlLmxpbmVYMSxlLmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBEdyhpKCkpfSxkZWxldGUgZS5saW5lWTAsZS5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gRHcobygpKX0sZGVsZXRlIGUubGluZVkxLGUuY3VydmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChOdyhhKSk6dCgpLl9jdXJ2ZX0sZX12YXIgYkZ0PU0oKCk9PntJZXQoKTtQZXQoKTtrZXQoKX0pO2Z1bmN0aW9uIGYxKGUsdCl7cmV0dXJuWyh0PSt0KSpNYXRoLmNvcyhlLT1NYXRoLlBJLzIpLHQqTWF0aC5zaW4oZSldfXZhciBOZXQ9TSgoKT0+e30pO3ZhciBMQyxEZXQ9TSgoKT0+e0xDPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIF9MZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24geUxlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBPZXQoZSl7dmFyIHQ9X0xlLHI9eUxlLG49THcsaT1rdyxvPW51bGw7ZnVuY3Rpb24gYSgpe3ZhciBzLGw9TEMuY2FsbChhcmd1bWVudHMpLGM9dC5hcHBseSh0aGlzLGwpLHU9ci5hcHBseSh0aGlzLGwpO2lmKG98fChvPXM9SXUoKSksZShvLCtuLmFwcGx5KHRoaXMsKGxbMF09YyxsKSksK2kuYXBwbHkodGhpcyxsKSwrbi5hcHBseSh0aGlzLChsWzBdPXUsbCkpLCtpLmFwcGx5KHRoaXMsbCkpLHMpcmV0dXJuIG89bnVsbCxzKyIifHxudWxsfXJldHVybiBhLnNvdXJjZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLGEpOnR9LGEudGFyZ2V0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXMsYSk6cn0sYS54PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOm59LGEueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTppfSxhLmNvbnRleHQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89cz09bnVsbD9udWxsOnMsYSk6b30sYX1mdW5jdGlvbiB2TGUoZSx0LHIsbixpKXtlLm1vdmVUbyh0LHIpLGUuYmV6aWVyQ3VydmVUbyh0PSh0K24pLzIscix0LGksbixpKX1mdW5jdGlvbiB4TGUoZSx0LHIsbixpKXtlLm1vdmVUbyh0LHIpLGUuYmV6aWVyQ3VydmVUbyh0LHI9KHIraSkvMixuLHIsbixpKX1mdW5jdGlvbiBiTGUoZSx0LHIsbixpKXt2YXIgbz1mMSh0LHIpLGE9ZjEodCxyPShyK2kpLzIpLHM9ZjEobixyKSxsPWYxKG4saSk7ZS5tb3ZlVG8ob1swXSxvWzFdKSxlLmJlemllckN1cnZlVG8oYVswXSxhWzFdLHNbMF0sc1sxXSxsWzBdLGxbMV0pfWZ1bmN0aW9uIHdGdCgpe3JldHVybiBPZXQodkxlKX1mdW5jdGlvbiBTRnQoKXtyZXR1cm4gT2V0KHhMZSl9ZnVuY3Rpb24gTUZ0KCl7dmFyIGU9T2V0KGJMZSk7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5yYWRpdXM9ZS55LGRlbGV0ZSBlLnksZX12YXIgRUZ0PU0oKCk9PntQdygpO0RldCgpO09nKCk7eTcoKTtOZXQoKX0pO3ZhciBrQyx6ZXQ9TSgoKT0+e0l3KCk7a0M9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodC9rdSk7ZS5tb3ZlVG8ociwwKSxlLmFyYygwLDAsciwwLE1jKX19fSk7dmFyIHc3LEZldD1NKCgpPT57dzc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodC81KS8yO2UubW92ZVRvKC0zKnIsLXIpLGUubGluZVRvKC1yLC1yKSxlLmxpbmVUbygtciwtMypyKSxlLmxpbmVUbyhyLC0zKnIpLGUubGluZVRvKHIsLXIpLGUubGluZVRvKDMqciwtciksZS5saW5lVG8oMypyLHIpLGUubGluZVRvKHIsciksZS5saW5lVG8ociwzKnIpLGUubGluZVRvKC1yLDMqciksZS5saW5lVG8oLXIsciksZS5saW5lVG8oLTMqcixyKSxlLmNsb3NlUGF0aCgpfX19KTt2YXIgVEZ0LHdMZSxTNyxCZXQ9TSgoKT0+e1RGdD1NYXRoLnNxcnQoLjMzMzMzMzMzMzMzMzMzMzMpLHdMZT1URnQqMixTNz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L3dMZSksbj1yKlRGdDtlLm1vdmVUbygwLC1yKSxlLmxpbmVUbyhuLDApLGUubGluZVRvKDAsciksZS5saW5lVG8oLW4sMCksZS5jbG9zZVBhdGgoKX19fSk7dmFyIFNMZSxDRnQsTUxlLEVMZSxNNyxIZXQ9TSgoKT0+e0l3KCk7U0xlPS44OTA4MTMwOTE1MjkyODUyLENGdD1NYXRoLnNpbihrdS8xMCkvTWF0aC5zaW4oNyprdS8xMCksTUxlPU1hdGguc2luKE1jLzEwKSpDRnQsRUxlPS1NYXRoLmNvcyhNYy8xMCkqQ0Z0LE03PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQqU0xlKSxuPU1MZSpyLGk9RUxlKnI7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obixpKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1NYypvLzUscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO2UubGluZVRvKGwqciwtcypyKSxlLmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfWUuY2xvc2VQYXRoKCl9fX0pO3ZhciBFNyxWZXQ9TSgoKT0+e0U3PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQpLG49LXIvMjtlLnJlY3QobixuLHIscil9fX0pO3ZhciBVZXQsVDcscWV0PU0oKCk9PntVZXQ9TWF0aC5zcXJ0KDMpLFQ3PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9LU1hdGguc3FydCh0LyhVZXQqMykpO2UubW92ZVRvKDAscioyKSxlLmxpbmVUbygtVWV0KnIsLXIpLGUubGluZVRvKFVldCpyLC1yKSxlLmNsb3NlUGF0aCgpfX19KTt2YXIgRWMsVGMsR2V0LFRMZSxDNyxXZXQ9TSgoKT0+e0VjPS0uNSxUYz1NYXRoLnNxcnQoMykvMixHZXQ9MS9NYXRoLnNxcnQoMTIpLFRMZT0oR2V0LzIrMSkqMyxDNz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L1RMZSksbj1yLzIsaT1yKkdldCxvPW4sYT1yKkdldCtyLHM9LW8sbD1hO2UubW92ZVRvKG4saSksZS5saW5lVG8obyxhKSxlLmxpbmVUbyhzLGwpLGUubGluZVRvKEVjKm4tVGMqaSxUYypuK0VjKmkpLGUubGluZVRvKEVjKm8tVGMqYSxUYypvK0VjKmEpLGUubGluZVRvKEVjKnMtVGMqbCxUYypzK0VjKmwpLGUubGluZVRvKEVjKm4rVGMqaSxFYyppLVRjKm4pLGUubGluZVRvKEVjKm8rVGMqYSxFYyphLVRjKm8pLGUubGluZVRvKEVjKnMrVGMqbCxFYypsLVRjKnMpLGUuY2xvc2VQYXRoKCl9fX0pO2Z1bmN0aW9uIFBGdCgpe3ZhciBlPUdlKGtDKSx0PUdlKDY0KSxyPW51bGw7ZnVuY3Rpb24gbigpe3ZhciBpO2lmKHJ8fChyPWk9SXUoKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaSlyZXR1cm4gcj1udWxsLGkrIiJ8fG51bGx9cmV0dXJuIG4udHlwZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkdlKGkpLG4pOmV9LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkdlKCtpKSxuKTp0fSxuLmNvbnRleHQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOmksbik6cn0sbn12YXIgQUZ0LElGdD1NKCgpPT57UHcoKTt6ZXQoKTtGZXQoKTtCZXQoKTtIZXQoKTtWZXQoKTtxZXQoKTtXZXQoKTtPZygpO0FGdD1ba0MsdzcsUzcsRTcsTTcsVDcsQzddfSk7ZnVuY3Rpb24gQ2MoKXt9dmFyIFJDPU0oKCk9Pnt9KTtmdW5jdGlvbiBPdyhlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmUuX3gwK2UuX3gxKS8zLCgyKmUuX3kwK2UuX3kxKS8zLChlLl94MCsyKmUuX3gxKS8zLChlLl95MCsyKmUuX3kxKS8zLChlLl94MCs0KmUuX3gxK3QpLzYsKGUuX3kwKzQqZS5feTErcikvNil9ZnVuY3Rpb24gTkMoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIExGdChlKXtyZXR1cm4gbmV3IE5DKGUpfXZhciBEQz1NKCgpPT57TkMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzpPdyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpPdyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10fX19KTtmdW5jdGlvbiBrRnQoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIFJGdChlKXtyZXR1cm4gbmV3IGtGdChlKX12YXIgTkZ0PU0oKCk9PntSQygpO0RDKCk7a0Z0LnByb3RvdHlwZT17YXJlYVN0YXJ0OkNjLGFyZWFFbmQ6Q2MsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp7dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAyOnt0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPWUsdGhpcy5feTI9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9ZSx0aGlzLl95ND10LHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK2UpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErdCkvNik7YnJlYWs7ZGVmYXVsdDpPdyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10fX19KTtmdW5jdGlvbiBERnQoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIE9GdChlKXtyZXR1cm4gbmV3IERGdChlKX12YXIgekZ0PU0oKCk9PntEQygpO0RGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgcj0odGhpcy5feDArNCp0aGlzLl94MStlKS82LG49KHRoaXMuX3kwKzQqdGhpcy5feTErdCkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHIsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8ocixuKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIEZGdChlLHQpe3RoaXMuX2Jhc2lzPW5ldyBOQyhlKSx0aGlzLl9iZXRhPXR9dmFyIEJGdCxIRnQ9TSgoKT0+e0RDKCk7RkZ0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG49ZVswXSxpPXRbMF0sbz1lW3JdLW4sYT10W3JdLWkscz0tMSxsOysrczw9cjspbD1zL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSplW3NdKygxLXRoaXMuX2JldGEpKihuK2wqbyksdGhpcy5fYmV0YSp0W3NdKygxLXRoaXMuX2JldGEpKihpK2wqYSkpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTtCRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0PT09MT9uZXcgTkMobik6bmV3IEZGdChuLHQpfXJldHVybiByLmJldGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguODUpfSk7ZnVuY3Rpb24gencoZSx0LHIpe2UuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLl94MStlLl9rKihlLl94Mi1lLl94MCksZS5feTErZS5fayooZS5feTItZS5feTApLGUuX3gyK2UuX2sqKGUuX3gxLXQpLGUuX3kyK2UuX2sqKGUuX3kxLXIpLGUuX3gyLGUuX3kyKX1mdW5jdGlvbiBBNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIFZGdCxPQz1NKCgpPT57QTcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnp3KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT1lLHRoaXMuX3kxPXQ7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDp6dyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07VkZ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IEE3KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApfSk7ZnVuY3Rpb24gUDcoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5faz0oMS10KS82fXZhciBVRnQsWWV0PU0oKCk9PntSQygpO09DKCk7UDcucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDp6dyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07VUZ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IFA3KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApfSk7ZnVuY3Rpb24gSTcoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5faz0oMS10KS82fXZhciBxRnQsamV0PU0oKCk9PntPQygpO0k3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtxRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgSTcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiB6QyhlLHQscil7dmFyIG49ZS5feDEsaT1lLl95MSxvPWUuX3gyLGE9ZS5feTI7aWYoZS5fbDAxX2E+Q28pe3ZhciBzPTIqZS5fbDAxXzJhKzMqZS5fbDAxX2EqZS5fbDEyX2ErZS5fbDEyXzJhLGw9MyplLl9sMDFfYSooZS5fbDAxX2ErZS5fbDEyX2EpO249KG4qcy1lLl94MCplLl9sMTJfMmErZS5feDIqZS5fbDAxXzJhKS9sLGk9KGkqcy1lLl95MCplLl9sMTJfMmErZS5feTIqZS5fbDAxXzJhKS9sfWlmKGUuX2wyM19hPkNvKXt2YXIgYz0yKmUuX2wyM18yYSszKmUuX2wyM19hKmUuX2wxMl9hK2UuX2wxMl8yYSx1PTMqZS5fbDIzX2EqKGUuX2wyM19hK2UuX2wxMl9hKTtvPShvKmMrZS5feDEqZS5fbDIzXzJhLXQqZS5fbDEyXzJhKS91LGE9KGEqYytlLl95MSplLl9sMjNfMmEtciplLl9sMTJfMmEpL3V9ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxvLGEsZS5feDIsZS5feTIpfWZ1bmN0aW9uIEdGdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fXZhciBXRnQsTDc9TSgoKT0+e0l3KCk7T0MoKTtHRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtpZihlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLWUsbj10aGlzLl95Mi10O3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDp6Qyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O1dGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IEdGdChuLHQpOm5ldyBBNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gWUZ0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIGpGdCxYRnQ9TSgoKT0+e1lldCgpO1JDKCk7TDcoKTtZRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtpZihlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLWUsbj10aGlzLl95Mi10O3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9ZSx0aGlzLl95Mz10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PWUsdGhpcy5feTQ9dCk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9ZSx0aGlzLl95NT10O2JyZWFrO2RlZmF1bHQ6ekModGhpcyxlLHQpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtqRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0P25ldyBZRnQobix0KTpuZXcgUDcobiwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC41KX0pO2Z1bmN0aW9uICRGdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fXZhciBLRnQsWkZ0PU0oKCk9PntqZXQoKTtMNygpOyRGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtpZihlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLWUsbj10aGlzLl95Mi10O3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6ekModGhpcyxlLHQpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtLRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0P25ldyAkRnQobix0KTpuZXcgSTcobiwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC41KX0pO2Z1bmN0aW9uIEpGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gUUZ0KGUpe3JldHVybiBuZXcgSkZ0KGUpfXZhciB0QnQ9TSgoKT0+e1JDKCk7SkZ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OkNjLGFyZWFFbmQ6Q2MsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe2U9K2UsdD0rdCx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCkpfX19KTtmdW5jdGlvbiBlQnQoZSl7cmV0dXJuIGU8MD8tMToxfWZ1bmN0aW9uIHJCdChlLHQscil7dmFyIG49ZS5feDEtZS5feDAsaT10LWUuX3gxLG89KGUuX3kxLWUuX3kwKS8obnx8aTwwJiYtMCksYT0oci1lLl95MSkvKGl8fG48MCYmLTApLHM9KG8qaSthKm4pLyhuK2kpO3JldHVybihlQnQobykrZUJ0KGEpKSpNYXRoLm1pbihNYXRoLmFicyhvKSxNYXRoLmFicyhhKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gbkJ0KGUsdCl7dmFyIHI9ZS5feDEtZS5feDA7cmV0dXJuIHI/KDMqKGUuX3kxLWUuX3kwKS9yLXQpLzI6dH1mdW5jdGlvbiBYZXQoZSx0LHIpe3ZhciBuPWUuX3gwLGk9ZS5feTAsbz1lLl94MSxhPWUuX3kxLHM9KG8tbikvMztlLl9jb250ZXh0LmJlemllckN1cnZlVG8obitzLGkrcyp0LG8tcyxhLXMqcixvLGEpfWZ1bmN0aW9uIGs3KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBpQnQoZSl7dGhpcy5fY29udGV4dD1uZXcgb0J0KGUpfWZ1bmN0aW9uIG9CdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gYUJ0KGUpe3JldHVybiBuZXcgazcoZSl9ZnVuY3Rpb24gc0J0KGUpe3JldHVybiBuZXcgaUJ0KGUpfXZhciBsQnQ9TSgoKT0+e2s3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpYZXQodGhpcyx0aGlzLl90MCxuQnQodGhpcyx0aGlzLl90MCkpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj1OYU47aWYoZT0rZSx0PSt0LCEoZT09PXRoaXMuX3gxJiZ0PT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLFhldCh0aGlzLG5CdCh0aGlzLHI9ckJ0KHRoaXMsZSx0KSkscik7YnJlYWs7ZGVmYXVsdDpYZXQodGhpcyx0aGlzLl90MCxyPXJCdCh0aGlzLGUsdCkpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dCx0aGlzLl90MD1yfX19OyhpQnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoazcucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24oZSx0KXtrNy5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLHQsZSl9O29CdC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubW92ZVRvKHQsZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0LGUsbixyLG8saSl9fX0pO2Z1bmN0aW9uIHVCdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gY0J0KGUpe3ZhciB0LHI9ZS5sZW5ndGgtMSxuLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpO2ZvcihpWzBdPTAsb1swXT0yLGFbMF09ZVswXSsyKmVbMV0sdD0xO3Q8ci0xOysrdClpW3RdPTEsb1t0XT00LGFbdF09NCplW3RdKzIqZVt0KzFdO2ZvcihpW3ItMV09MixvW3ItMV09NyxhW3ItMV09OCplW3ItMV0rZVtyXSx0PTE7dDxyOysrdCluPWlbdF0vb1t0LTFdLG9bdF0tPW4sYVt0XS09biphW3QtMV07Zm9yKGlbci0xXT1hW3ItMV0vb1tyLTFdLHQ9ci0yO3Q+PTA7LS10KWlbdF09KGFbdF0taVt0KzFdKS9vW3RdO2ZvcihvW3ItMV09KGVbcl0raVtyLTFdKS8yLHQ9MDt0PHItMTsrK3Qpb1t0XT0yKmVbdCsxXS1pW3QrMV07cmV0dXJuW2ksb119ZnVuY3Rpb24gaEJ0KGUpe3JldHVybiBuZXcgdUJ0KGUpfXZhciBmQnQ9TSgoKT0+e3VCdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94LHQ9dGhpcy5feSxyPWUubGVuZ3RoO2lmKHIpaWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlWzBdLHRbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKGVbMF0sdFswXSkscj09PTIpdGhpcy5fY29udGV4dC5saW5lVG8oZVsxXSx0WzFdKTtlbHNlIGZvcih2YXIgbj1jQnQoZSksaT1jQnQodCksbz0wLGE9MTthPHI7KytvLCsrYSl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oblswXVtvXSxpWzBdW29dLG5bMV1bb10saVsxXVtvXSxlW2FdLHRbYV0pOyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmcj09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX3gucHVzaCgrZSksdGhpcy5feS5wdXNoKCt0KX19fSk7ZnVuY3Rpb24gUjcoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fdD10fWZ1bmN0aW9uIHBCdChlKXtyZXR1cm4gbmV3IFI3KGUsLjUpfWZ1bmN0aW9uIGRCdChlKXtyZXR1cm4gbmV3IFI3KGUsMCl9ZnVuY3Rpb24gbUJ0KGUpe3JldHVybiBuZXcgUjcoZSwxKX12YXIgZ0J0PU0oKCk9PntSNy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmdGhpcy5fcG9pbnQ9PT0yJiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6e2lmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2Vsc2V7dmFyIHI9dGhpcy5feCooMS10aGlzLl90KStlKnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8ocix0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHQpfWJyZWFrfX10aGlzLl94PWUsdGhpcy5feT10fX19KTtmdW5jdGlvbiBSdShlLHQpe2lmKChhPWUubGVuZ3RoKT4xKWZvcih2YXIgcj0xLG4saSxvPWVbdFswXV0sYSxzPW8ubGVuZ3RoO3I8YTsrK3IpZm9yKGk9byxvPWVbdFtyXV0sbj0wO248czsrK24pb1tuXVsxXSs9b1tuXVswXT1pc05hTihpW25dWzFdKT9pW25dWzBdOmlbbl1bMV19dmFyIEZ3PU0oKCk9Pnt9KTtmdW5jdGlvbiBOdShlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1uZXcgQXJyYXkodCk7LS10Pj0wOylyW3RdPXQ7cmV0dXJuIHJ9dmFyIEJ3PU0oKCk9Pnt9KTtmdW5jdGlvbiBDTGUoZSx0KXtyZXR1cm4gZVt0XX1mdW5jdGlvbiBfQnQoKXt2YXIgZT1HZShbXSksdD1OdSxyPVJ1LG49Q0xlO2Z1bmN0aW9uIGkobyl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykscyxsPW8ubGVuZ3RoLGM9YS5sZW5ndGgsdT1uZXcgQXJyYXkoYyksaDtmb3Iocz0wO3M8YzsrK3Mpe2Zvcih2YXIgZj1hW3NdLHA9dVtzXT1uZXcgQXJyYXkobCksZD0wLGc7ZDxsOysrZClwW2RdPWc9WzAsK24ob1tkXSxmLGQsbyldLGcuZGF0YT1vW2RdO3Aua2V5PWZ9Zm9yKHM9MCxoPXQodSk7czxjOysrcyl1W2hbc11dLmluZGV4PXM7cmV0dXJuIHIodSxoKSx1fXJldHVybiBpLmtleXM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpHZShMQy5jYWxsKG8pKSxpKTplfSxpLnZhbHVlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBvPT0iZnVuY3Rpb24iP286R2UoK28pLGkpOm59LGkub3JkZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bz09bnVsbD9OdTp0eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOkdlKExDLmNhbGwobykpLGkpOnR9LGkub2Zmc2V0PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW89PW51bGw/UnU6byxpKTpyfSxpfXZhciB5QnQ9TSgoKT0+e0RldCgpO09nKCk7RncoKTtCdygpfSk7ZnVuY3Rpb24gdkJ0KGUsdCl7aWYoKG49ZS5sZW5ndGgpPjApe2Zvcih2YXIgcixuLGk9MCxvPWVbMF0ubGVuZ3RoLGE7aTxvOysraSl7Zm9yKGE9cj0wO3I8bjsrK3IpYSs9ZVtyXVtpXVsxXXx8MDtpZihhKWZvcihyPTA7cjxuOysrcillW3JdW2ldWzFdLz1hfVJ1KGUsdCl9fXZhciB4QnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBiQnQoZSx0KXtpZigobD1lLmxlbmd0aCk+MSlmb3IodmFyIHIsbj0wLGksbyxhLHMsbCxjPWVbdFswXV0ubGVuZ3RoO248YzsrK24pZm9yKGE9cz0wLHI9MDtyPGw7KytyKShvPShpPWVbdFtyXV1bbl0pWzFdLWlbMF0pPj0wPyhpWzBdPWEsaVsxXT1hKz1vKTpvPDA/KGlbMV09cyxpWzBdPXMrPW8pOmlbMF09YX12YXIgd0J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTQnQoZSx0KXtpZigoaT1lLmxlbmd0aCk+MCl7Zm9yKHZhciByPTAsbj1lW3RbMF1dLGksbz1uLmxlbmd0aDtyPG87KytyKXtmb3IodmFyIGE9MCxzPTA7YTxpOysrYSlzKz1lW2FdW3JdWzFdfHwwO25bcl1bMV0rPW5bcl1bMF09LXMvMn1SdShlLHQpfX12YXIgTUJ0PU0oKCk9PntGdygpfSk7ZnVuY3Rpb24gRUJ0KGUsdCl7aWYoISghKChhPWUubGVuZ3RoKT4wKXx8ISgobz0oaT1lW3RbMF1dKS5sZW5ndGgpPjApKSl7Zm9yKHZhciByPTAsbj0xLGksbyxhO248bzsrK24pe2Zvcih2YXIgcz0wLGw9MCxjPTA7czxhOysrcyl7Zm9yKHZhciB1PWVbdFtzXV0saD11W25dWzFdfHwwLGY9dVtuLTFdWzFdfHwwLHA9KGgtZikvMixkPTA7ZDxzOysrZCl7dmFyIGc9ZVt0W2RdXSxfPWdbbl1bMV18fDAseT1nW24tMV1bMV18fDA7cCs9Xy15fWwrPWgsYys9cCpofWlbbi0xXVsxXSs9aVtuLTFdWzBdPXIsbCYmKHItPWMvbCl9aVtuLTFdWzFdKz1pW24tMV1bMF09cixSdShlLHQpfX12YXIgVEJ0PU0oKCk9PntGdygpfSk7ZnVuY3Rpb24gTjcoZSl7dmFyIHQ9ZS5tYXAoJGV0KTtyZXR1cm4gTnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiAkZXQoZSl7Zm9yKHZhciB0PTAscj0tMSxuPWUubGVuZ3RoLGk7KytyPG47KShpPStlW3JdWzFdKSYmKHQrPWkpO3JldHVybiB0fXZhciBENz1NKCgpPT57QncoKX0pO2Z1bmN0aW9uIENCdChlKXtyZXR1cm4gTjcoZSkucmV2ZXJzZSgpfXZhciBBQnQ9TSgoKT0+e0Q3KCl9KTtmdW5jdGlvbiBQQnQoZSl7dmFyIHQ9ZS5sZW5ndGgscixuLGk9ZS5tYXAoJGV0KSxvPU51KGUpLnNvcnQoZnVuY3Rpb24odSxoKXtyZXR1cm4gaVtoXS1pW3VdfSksYT0wLHM9MCxsPVtdLGM9W107Zm9yKHI9MDtyPHQ7KytyKW49b1tyXSxhPHM/KGErPWlbbl0sbC5wdXNoKG4pKToocys9aVtuXSxjLnB1c2gobikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQobCl9dmFyIElCdD1NKCgpPT57QncoKTtENygpfSk7ZnVuY3Rpb24gTEJ0KGUpe3JldHVybiBOdShlKS5yZXZlcnNlKCl9dmFyIGtCdD1NKCgpPT57QncoKX0pO3ZhciBSQnQ9TSgoKT0+e2ZGdCgpO1BldCgpO3Y3KCk7dkZ0KCk7YkZ0KCk7a2V0KCk7TmV0KCk7RUZ0KCk7SUZ0KCk7emV0KCk7RmV0KCk7QmV0KCk7VmV0KCk7SGV0KCk7cWV0KCk7V2V0KCk7TkZ0KCk7ekZ0KCk7REMoKTtIRnQoKTtZZXQoKTtqZXQoKTtPQygpO1hGdCgpO1pGdCgpO0w3KCk7dEJ0KCk7SUMoKTtsQnQoKTtmQnQoKTtnQnQoKTt5QnQoKTt4QnQoKTt3QnQoKTtGdygpO01CdCgpO1RCdCgpO0Q3KCk7QUJ0KCk7SUJ0KCk7QncoKTtrQnQoKX0pO2Z1bmN0aW9uIFNyKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9aSxpLmNlaWw9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZShvLTEpKSx0KG8sMSksZShvKSxvfSxpLnJvdW5kPWZ1bmN0aW9uKG8pe3ZhciBhPWkobykscz1pLmNlaWwobyk7cmV0dXJuIG8tYTxzLW8/YTpzfSxpLm9mZnNldD1mdW5jdGlvbihvLGEpe3JldHVybiB0KG89bmV3IERhdGUoK28pLGE9PW51bGw/MTpNYXRoLmZsb29yKGEpKSxvfSxpLnJhbmdlPWZ1bmN0aW9uKG8sYSxzKXt2YXIgbD1bXSxjO2lmKG89aS5jZWlsKG8pLHM9cz09bnVsbD8xOk1hdGguZmxvb3IocyksIShvPGEpfHwhKHM+MCkpcmV0dXJuIGw7ZG8gbC5wdXNoKGM9bmV3IERhdGUoK28pKSx0KG8scyksZShvKTt3aGlsZShjPG8mJm88YSk7cmV0dXJuIGx9LGkuZmlsdGVyPWZ1bmN0aW9uKG8pe3JldHVybiBTcihmdW5jdGlvbihhKXtpZihhPj1hKWZvcig7ZShhKSwhbyhhKTspYS5zZXRUaW1lKGEtMSl9LGZ1bmN0aW9uKGEscyl7aWYoYT49YSlpZihzPDApZm9yKDsrK3M8PTA7KWZvcig7dChhLC0xKSwhbyhhKTspO2Vsc2UgZm9yKDstLXM+PTA7KWZvcig7dChhLDEpLCFvKGEpOyk7fSl9LHImJihpLmNvdW50PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIEtldC5zZXRUaW1lKCtvKSxaZXQuc2V0VGltZSgrYSksZShLZXQpLGUoWmV0KSxNYXRoLmZsb29yKHIoS2V0LFpldCkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKG8pe3JldHVybiBvPU1hdGguZmxvb3IobyksIWlzRmluaXRlKG8pfHwhKG8+MCk/bnVsbDpvPjE/aS5maWx0ZXIobj9mdW5jdGlvbihhKXtyZXR1cm4gbihhKSVvPT09MH06ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY291bnQoMCxhKSVvPT09MH0pOml9KSxpfXZhciBLZXQsWmV0LGZhPU0oKCk9PntLZXQ9bmV3IERhdGUsWmV0PW5ldyBEYXRlfSk7dmFyIE83LEpldCxRZXQsTkJ0PU0oKCk9PntmYSgpO083PVNyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC1lfSk7TzcuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5mbG9vcihlKSwhaXNGaW5pdGUoZSl8fCEoZT4wKT9udWxsOmU+MT9TcihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L2UpKmUpfSxmdW5jdGlvbih0LHIpe3Quc2V0VGltZSgrdCtyKmUpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL2V9KTpPN307SmV0PU83LFFldD1PNy5yYW5nZX0pO3ZhciBGQyxQcyxiZix6NyxGNyx3Zj1NKCgpPT57RkM9MWUzLFBzPTZlNCxiZj0zNmU1LHo3PTg2NGU1LEY3PTYwNDhlNX0pO3ZhciBEQnQsdHJ0LGVydCxPQnQ9TSgoKT0+e2ZhKCk7d2YoKTtEQnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS9GQykqRkMpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkZDKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9GQ30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDU2Vjb25kcygpfSksdHJ0PURCdCxlcnQ9REJ0LnJhbmdlfSk7dmFyIHpCdCxGQnQsQkJ0LEhCdD1NKCgpPT57ZmEoKTt3ZigpO3pCdD1TcihmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL1BzKSpQcyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqUHMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL1BzfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxGQnQ9ekJ0LEJCdD16QnQucmFuZ2V9KTt2YXIgVkJ0LFVCdCxxQnQsR0J0PU0oKCk9PntmYSgpO3dmKCk7VkJ0PVNyKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKSpQcyViZjt0PDAmJih0Kz1iZiksZS5zZXRUaW1lKE1hdGguZmxvb3IoKCtlLXQpL2JmKSpiZit0KX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpiZil9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvYmZ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEhvdXJzKCl9KSxVQnQ9VkJ0LHFCdD1WQnQucmFuZ2V9KTt2YXIgV0J0LFlCdCxqQnQsWEJ0PU0oKCk9PntmYSgpO3dmKCk7V0J0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUtKHQuZ2V0VGltZXpvbmVPZmZzZXQoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkpKlBzKS96N30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RGF0ZSgpLTF9KSxZQnQ9V0J0LGpCdD1XQnQucmFuZ2V9KTtmdW5jdGlvbiBwMShlKXtyZXR1cm4gU3IoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctZSklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldERhdGUodC5nZXREYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10LShyLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpQcykvRjd9KX12YXIgQjcscnJ0LG5ydCxpcnQsb3J0LGFydCxzcnQsbHJ0LCRCdCxLQnQsWkJ0LEpCdCxRQnQsdEh0LGVIdD1NKCgpPT57ZmEoKTt3ZigpO0I3PXAxKDApLHJydD1wMSgxKSxucnQ9cDEoMiksaXJ0PXAxKDMpLG9ydD1wMSg0KSxhcnQ9cDEoNSksc3J0PXAxKDYpLGxydD1CNy5yYW5nZSwkQnQ9cnJ0LnJhbmdlLEtCdD1ucnQucmFuZ2UsWkJ0PWlydC5yYW5nZSxKQnQ9b3J0LnJhbmdlLFFCdD1hcnQucmFuZ2UsdEh0PXNydC5yYW5nZX0pO3ZhciBySHQsbkh0LGlIdCxvSHQ9TSgoKT0+e2ZhKCk7ckh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLG5IdD1ySHQsaUh0PXJIdC5yYW5nZX0pO3ZhciBjcnQsYUh0LHNIdCxsSHQ9TSgoKT0+e2ZhKCk7Y3J0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7Y3J0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpTcihmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07YUh0PWNydCxzSHQ9Y3J0LnJhbmdlfSk7dmFyIGNIdCx1SHQsaEh0LGZIdD1NKCgpPT57ZmEoKTt3ZigpO2NIdD1TcihmdW5jdGlvbihlKXtlLnNldFVUQ1NlY29uZHMoMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpQcyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvUHN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01pbnV0ZXMoKX0pLHVIdD1jSHQsaEh0PWNIdC5yYW5nZX0pO3ZhciBwSHQsZEh0LG1IdCxnSHQ9TSgoKT0+e2ZhKCk7d2YoKTtwSHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRVVENNaW51dGVzKDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpiZil9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvYmZ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0hvdXJzKCl9KSxkSHQ9cEh0LG1IdD1wSHQucmFuZ2V9KTt2YXIgX0h0LHlIdCx2SHQseEh0PU0oKCk9PntmYSgpO3dmKCk7X0h0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3o3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENEYXRlKCktMX0pLHlIdD1fSHQsdkh0PV9IdC5yYW5nZX0pO2Z1bmN0aW9uIGQxKGUpe3JldHVybiBTcihmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCktKHQuZ2V0VVRDRGF5KCkrNy1lKSU3KSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL0Y3fSl9dmFyIEg3LHVydCxocnQsZnJ0LHBydCxkcnQsbXJ0LGdydCxiSHQsd0h0LFNIdCxNSHQsRUh0LFRIdCxDSHQ9TSgoKT0+e2ZhKCk7d2YoKTtINz1kMSgwKSx1cnQ9ZDEoMSksaHJ0PWQxKDIpLGZydD1kMSgzKSxwcnQ9ZDEoNCksZHJ0PWQxKDUpLG1ydD1kMSg2KSxncnQ9SDcucmFuZ2UsYkh0PXVydC5yYW5nZSx3SHQ9aHJ0LnJhbmdlLFNIdD1mcnQucmFuZ2UsTUh0PXBydC5yYW5nZSxFSHQ9ZHJ0LnJhbmdlLFRIdD1tcnQucmFuZ2V9KTt2YXIgQUh0LFBIdCxJSHQsTEh0PU0oKCk9PntmYSgpO0FIdD1TcihmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpLWUuZ2V0VVRDTW9udGgoKSsodC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCl9KSxQSHQ9QUh0LElIdD1BSHQucmFuZ2V9KTt2YXIgX3J0LGtIdCxSSHQsTkh0PU0oKCk9PntmYSgpO19ydD1TcihmdW5jdGlvbihlKXtlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKX0pO19ydC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6U3IoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O2tIdD1fcnQsUkh0PV9ydC5yYW5nZX0pO3ZhciBESHQ9TSgoKT0+e2ZhKCk7TkJ0KCk7T0J0KCk7SEJ0KCk7R0J0KCk7WEJ0KCk7ZUh0KCk7b0h0KCk7bEh0KCk7Zkh0KCk7Z0h0KCk7eEh0KCk7Q0h0KCk7TEh0KCk7Tkh0KCl9KTtmdW5jdGlvbiBwYShlLHQscixuKXtmdW5jdGlvbiBpKG8pe3JldHVybiBlKG89YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK28pKSxvfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKG8pe3JldHVybiBlKG89bmV3IERhdGUoK28pKSxvfSxpLmNlaWw9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZShvLTEpKSx0KG8sMSksZShvKSxvfSxpLnJvdW5kPWZ1bmN0aW9uKG8pe3ZhciBhPWkobykscz1pLmNlaWwobyk7cmV0dXJuIG8tYTxzLW8/YTpzfSxpLm9mZnNldD1mdW5jdGlvbihvLGEpe3JldHVybiB0KG89bmV3IERhdGUoK28pLGE9PW51bGw/MTpNYXRoLmZsb29yKGEpKSxvfSxpLnJhbmdlPWZ1bmN0aW9uKG8sYSxzKXt2YXIgbD1bXSxjO2lmKG89aS5jZWlsKG8pLHM9cz09bnVsbD8xOk1hdGguZmxvb3IocyksIShvPGEpfHwhKHM+MCkpcmV0dXJuIGw7ZG8gbC5wdXNoKGM9bmV3IERhdGUoK28pKSx0KG8scyksZShvKTt3aGlsZShjPG8mJm88YSk7cmV0dXJuIGx9LGkuZmlsdGVyPWZ1bmN0aW9uKG8pe3JldHVybiBwYShmdW5jdGlvbihhKXtpZihhPj1hKWZvcig7ZShhKSwhbyhhKTspYS5zZXRUaW1lKGEtMSl9LGZ1bmN0aW9uKGEscyl7aWYoYT49YSlpZihzPDApZm9yKDsrK3M8PTA7KWZvcig7dChhLC0xKSwhbyhhKTspO2Vsc2UgZm9yKDstLXM+PTA7KWZvcig7dChhLDEpLCFvKGEpOyk7fSl9LHImJihpLmNvdW50PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHlydC5zZXRUaW1lKCtvKSx2cnQuc2V0VGltZSgrYSksZSh5cnQpLGUodnJ0KSxNYXRoLmZsb29yKHIoeXJ0LHZydCkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKG8pe3JldHVybiBvPU1hdGguZmxvb3IobyksIWlzRmluaXRlKG8pfHwhKG8+MCk/bnVsbDpvPjE/aS5maWx0ZXIobj9mdW5jdGlvbihhKXtyZXR1cm4gbihhKSVvPT09MH06ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY291bnQoMCxhKSVvPT09MH0pOml9KSxpfXZhciB5cnQsdnJ0LG0xPU0oKCk9Pnt5cnQ9bmV3IERhdGUsdnJ0PW5ldyBEYXRlfSk7dmFyIFY3LFU3LHE3LEJDPU0oKCk9PntWNz02ZTQsVTc9ODY0ZTUscTc9NjA0OGU1fSk7dmFyIE9IdCxHNyxBTGUsekh0PU0oKCk9PnttMSgpO0JDKCk7T0h0PXBhKGZ1bmN0aW9uKGUpe2Uuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUtKHQuZ2V0VGltZXpvbmVPZmZzZXQoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkpKlY3KS9VN30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RGF0ZSgpLTF9KSxHNz1PSHQsQUxlPU9IdC5yYW5nZX0pO2Z1bmN0aW9uIGcxKGUpe3JldHVybiBwYShmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKlY3KS9xN30pfXZhciBIQyxIdyxGSHQsQkh0LFZ3LEhIdCxWSHQsVUh0LFBMZSxJTGUsTExlLGtMZSxSTGUsTkxlLHFIdD1NKCgpPT57bTEoKTtCQygpO0hDPWcxKDApLEh3PWcxKDEpLEZIdD1nMSgyKSxCSHQ9ZzEoMyksVnc9ZzEoNCksSEh0PWcxKDUpLFZIdD1nMSg2KSxVSHQ9SEMucmFuZ2UsUExlPUh3LnJhbmdlLElMZT1GSHQucmFuZ2UsTExlPUJIdC5yYW5nZSxrTGU9VncucmFuZ2UsUkxlPUhIdC5yYW5nZSxOTGU9Vkh0LnJhbmdlfSk7dmFyIHhydCxfMSxETGUsR0h0PU0oKCk9PnttMSgpO3hydD1wYShmdW5jdGlvbihlKXtlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKX0pO3hydC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6cGEoZnVuY3Rpb24odCl7dC5zZXRGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0RnVsbFllYXIoKS9lKSplKSx0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStyKmUpfSl9O18xPXhydCxETGU9eHJ0LnJhbmdlfSk7dmFyIFdIdCxXNyxPTGUsWUh0PU0oKCk9PnttMSgpO0JDKCk7V0h0PXBhKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL1U3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENEYXRlKCktMX0pLFc3PVdIdCxPTGU9V0h0LnJhbmdlfSk7ZnVuY3Rpb24geTEoZSl7cmV0dXJuIHBhKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvcTd9KX12YXIgVkMsVXcsakh0LFhIdCxxdywkSHQsS0h0LFpIdCx6TGUsRkxlLEJMZSxITGUsVkxlLFVMZSxKSHQ9TSgoKT0+e20xKCk7QkMoKTtWQz15MSgwKSxVdz15MSgxKSxqSHQ9eTEoMiksWEh0PXkxKDMpLHF3PXkxKDQpLCRIdD15MSg1KSxLSHQ9eTEoNiksWkh0PVZDLnJhbmdlLHpMZT1Vdy5yYW5nZSxGTGU9akh0LnJhbmdlLEJMZT1YSHQucmFuZ2UsSExlPXF3LnJhbmdlLFZMZT0kSHQucmFuZ2UsVUxlPUtIdC5yYW5nZX0pO3ZhciBicnQsdjEscUxlLFFIdD1NKCgpPT57bTEoKTticnQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTticnQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOnBhKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvZSkqZSksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrciplKX0pfTt2MT1icnQscUxlPWJydC5yYW5nZX0pO3ZhciB0VnQ9TSgoKT0+e3pIdCgpO3FIdCgpO0dIdCgpO1lIdCgpO0pIdCgpO1FIdCgpfSk7ZnVuY3Rpb24gR0xlKGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpO3JldHVybiB0LnNldEZ1bGxZZWFyKGUueSksdH1yZXR1cm4gbmV3IERhdGUoZS55LGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKX1mdW5jdGlvbiBZNyhlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKX1mdW5jdGlvbiBVQyhlKXtyZXR1cm57eTplLG06MCxkOjEsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBXQyhlKXt2YXIgdD1lLmRhdGVUaW1lLHI9ZS5kYXRlLG49ZS50aW1lLGk9ZS5wZXJpb2RzLG89ZS5kYXlzLGE9ZS5zaG9ydERheXMscz1lLm1vbnRocyxsPWUuc2hvcnRNb250aHMsYz1xQyhpKSx1PUdDKGkpLGg9cUMobyksZj1HQyhvKSxwPXFDKGEpLGQ9R0MoYSksZz1xQyhzKSxfPUdDKHMpLHk9cUMobCkseD1HQyhsKSxiPXthOlcsQTpaLGI6cnQsQjpvdCxjOm51bGwsZDppVnQsZTppVnQsZjpka2UsSDpoa2UsSTpma2Usajpwa2UsTDpjVnQsbTpta2UsTTpna2UscDpzdCxROnNWdCxzOmxWdCxTOl9rZSx1OnlrZSxVOnZrZSxWOnhrZSx3OmJrZSxXOndrZSx4Om51bGwsWDpudWxsLHk6U2tlLFk6TWtlLFo6RWtlLCIlIjphVnR9LFM9e2E6U3QsQTpidCxiOk10LEI6bHQsYzpudWxsLGQ6b1Z0LGU6b1Z0LGY6UGtlLEg6VGtlLEk6Q2tlLGo6QWtlLEw6dVZ0LG06SWtlLE06TGtlLHA6S3QsUTpzVnQsczpsVnQsUzpra2UsdTpSa2UsVTpOa2UsVjpEa2UsdzpPa2UsVzp6a2UseDpudWxsLFg6bnVsbCx5OkZrZSxZOkJrZSxaOkhrZSwiJSI6YVZ0fSxDPXthOkIsQTpJLGI6TCxCOlIsYzpGLGQ6clZ0LGU6clZ0LGY6c2tlLEg6blZ0LEk6blZ0LGo6bmtlLEw6YWtlLG06cmtlLE06aWtlLHA6RCxROmNrZSxzOnVrZSxTOm9rZSx1OiRMZSxVOktMZSxWOlpMZSx3OlhMZSxXOkpMZSx4OnosWDpVLHk6dGtlLFk6UUxlLFo6ZWtlLCIlIjpsa2V9O2IueD1QKHIsYiksYi5YPVAobixiKSxiLmM9UCh0LGIpLFMueD1QKHIsUyksUy5YPVAobixTKSxTLmM9UCh0LFMpO2Z1bmN0aW9uIFAoX3QsY3Qpe3JldHVybiBmdW5jdGlvbihYKXt2YXIgZXQ9W10sZHQ9LTEscT0wLHB0PV90Lmxlbmd0aCxodCx3dCxrdDtmb3IoWCBpbnN0YW5jZW9mIERhdGV8fChYPW5ldyBEYXRlKCtYKSk7KytkdDxwdDspX3QuY2hhckNvZGVBdChkdCk9PT0zNyYmKGV0LnB1c2goX3Quc2xpY2UocSxkdCkpLCh3dD1lVnRbaHQ9X3QuY2hhckF0KCsrZHQpXSkhPW51bGw/aHQ9X3QuY2hhckF0KCsrZHQpOnd0PWh0PT09ImUiPyIgIjoiMCIsKGt0PWN0W2h0XSkmJihodD1rdChYLHd0KSksZXQucHVzaChodCkscT1kdCsxKTtyZXR1cm4gZXQucHVzaChfdC5zbGljZShxLGR0KSksZXQuam9pbigiIil9fWZ1bmN0aW9uIGsoX3QsY3Qpe3JldHVybiBmdW5jdGlvbihYKXt2YXIgZXQ9VUMoMTkwMCksZHQ9TyhldCxfdCxYKz0iIiwwKSxxLHB0O2lmKGR0IT1YLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBldClyZXR1cm4gbmV3IERhdGUoZXQuUSk7aWYoInAiaW4gZXQmJihldC5IPWV0LkglMTIrZXQucCoxMiksIlYiaW4gZXQpe2lmKGV0LlY8MXx8ZXQuVj41MylyZXR1cm4gbnVsbDsidyJpbiBldHx8KGV0Lnc9MSksIloiaW4gZXQ/KHE9WTcoVUMoZXQueSkpLHB0PXEuZ2V0VVRDRGF5KCkscT1wdD40fHxwdD09PTA/VXcuY2VpbChxKTpVdyhxKSxxPVc3Lm9mZnNldChxLChldC5WLTEpKjcpLGV0Lnk9cS5nZXRVVENGdWxsWWVhcigpLGV0Lm09cS5nZXRVVENNb250aCgpLGV0LmQ9cS5nZXRVVENEYXRlKCkrKGV0LncrNiklNyk6KHE9Y3QoVUMoZXQueSkpLHB0PXEuZ2V0RGF5KCkscT1wdD40fHxwdD09PTA/SHcuY2VpbChxKTpIdyhxKSxxPUc3Lm9mZnNldChxLChldC5WLTEpKjcpLGV0Lnk9cS5nZXRGdWxsWWVhcigpLGV0Lm09cS5nZXRNb250aCgpLGV0LmQ9cS5nZXREYXRlKCkrKGV0LncrNiklNyl9ZWxzZSgiVyJpbiBldHx8IlUiaW4gZXQpJiYoInciaW4gZXR8fChldC53PSJ1ImluIGV0P2V0LnUlNzoiVyJpbiBldD8xOjApLHB0PSJaImluIGV0P1k3KFVDKGV0LnkpKS5nZXRVVENEYXkoKTpjdChVQyhldC55KSkuZ2V0RGF5KCksZXQubT0wLGV0LmQ9IlciaW4gZXQ/KGV0LncrNiklNytldC5XKjctKHB0KzUpJTc6ZXQudytldC5VKjctKHB0KzYpJTcpO3JldHVybiJaImluIGV0PyhldC5IKz1ldC5aLzEwMHwwLGV0Lk0rPWV0LlolMTAwLFk3KGV0KSk6Y3QoZXQpfX1mdW5jdGlvbiBPKF90LGN0LFgsZXQpe2Zvcih2YXIgZHQ9MCxxPWN0Lmxlbmd0aCxwdD1YLmxlbmd0aCxodCx3dDtkdDxxOyl7aWYoZXQ+PXB0KXJldHVybi0xO2lmKGh0PWN0LmNoYXJDb2RlQXQoZHQrKyksaHQ9PT0zNyl7aWYoaHQ9Y3QuY2hhckF0KGR0KyspLHd0PUNbaHQgaW4gZVZ0P2N0LmNoYXJBdChkdCsrKTpodF0sIXd0fHwoZXQ9d3QoX3QsWCxldCkpPDApcmV0dXJuLTF9ZWxzZSBpZihodCE9WC5jaGFyQ29kZUF0KGV0KyspKXJldHVybi0xfXJldHVybiBldH1mdW5jdGlvbiBEKF90LGN0LFgpe3ZhciBldD1jLmV4ZWMoY3Quc2xpY2UoWCkpO3JldHVybiBldD8oX3QucD11W2V0WzBdLnRvTG93ZXJDYXNlKCldLFgrZXRbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCKF90LGN0LFgpe3ZhciBldD1wLmV4ZWMoY3Quc2xpY2UoWCkpO3JldHVybiBldD8oX3Qudz1kW2V0WzBdLnRvTG93ZXJDYXNlKCldLFgrZXRbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKF90LGN0LFgpe3ZhciBldD1oLmV4ZWMoY3Quc2xpY2UoWCkpO3JldHVybiBldD8oX3Qudz1mW2V0WzBdLnRvTG93ZXJDYXNlKCldLFgrZXRbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKF90LGN0LFgpe3ZhciBldD15LmV4ZWMoY3Quc2xpY2UoWCkpO3JldHVybiBldD8oX3QubT14W2V0WzBdLnRvTG93ZXJDYXNlKCldLFgrZXRbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKF90LGN0LFgpe3ZhciBldD1nLmV4ZWMoY3Quc2xpY2UoWCkpO3JldHVybiBldD8oX3QubT1fW2V0WzBdLnRvTG93ZXJDYXNlKCldLFgrZXRbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKF90LGN0LFgpe3JldHVybiBPKF90LHQsY3QsWCl9ZnVuY3Rpb24geihfdCxjdCxYKXtyZXR1cm4gTyhfdCxyLGN0LFgpfWZ1bmN0aW9uIFUoX3QsY3QsWCl7cmV0dXJuIE8oX3QsbixjdCxYKX1mdW5jdGlvbiBXKF90KXtyZXR1cm4gYVtfdC5nZXREYXkoKV19ZnVuY3Rpb24gWihfdCl7cmV0dXJuIG9bX3QuZ2V0RGF5KCldfWZ1bmN0aW9uIHJ0KF90KXtyZXR1cm4gbFtfdC5nZXRNb250aCgpXX1mdW5jdGlvbiBvdChfdCl7cmV0dXJuIHNbX3QuZ2V0TW9udGgoKV19ZnVuY3Rpb24gc3QoX3Qpe3JldHVybiBpWysoX3QuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBTdChfdCl7cmV0dXJuIGFbX3QuZ2V0VVRDRGF5KCldfWZ1bmN0aW9uIGJ0KF90KXtyZXR1cm4gb1tfdC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gTXQoX3Qpe3JldHVybiBsW190LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIGx0KF90KXtyZXR1cm4gc1tfdC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBLdChfdCl7cmV0dXJuIGlbKyhfdC5nZXRVVENIb3VycygpPj0xMildfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oX3Qpe3ZhciBjdD1QKF90Kz0iIixiKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSxwYXJzZTpmdW5jdGlvbihfdCl7dmFyIGN0PWsoX3QrPSIiLEdMZSk7cmV0dXJuIGN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIF90fSxjdH0sdXRjRm9ybWF0OmZ1bmN0aW9uKF90KXt2YXIgY3Q9UChfdCs9IiIsUyk7cmV0dXJuIGN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIF90fSxjdH0sdXRjUGFyc2U6ZnVuY3Rpb24oX3Qpe3ZhciBjdD1rKF90LFk3KTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fX19ZnVuY3Rpb24gZ24oZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gakxlKGUpe3JldHVybiBlLnJlcGxhY2UoWUxlLCJcXCQmIil9ZnVuY3Rpb24gcUMoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKGpMZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIEdDKGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIFhMZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkTGUoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS0xlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFpMZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBKTGUoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUUxlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVrZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUubT1uWzBdLTEscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gclZ0KGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5rZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUubT0wLGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuVnQoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG9rZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuUz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBha2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc2tlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8oZS5MPU1hdGguZmxvb3IoblswXS8xZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxrZShlLHQscil7dmFyIG49V0xlLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuP3IrblswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gY2tlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocikpO3JldHVybiBuPyhlLlE9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocikpO3JldHVybiBuPyhlLlE9K25bMF0qMWUzLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlWdChlLHQpe3JldHVybiBnbihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIGhrZShlLHQpe3JldHVybiBnbihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBma2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIHBrZShlLHQpe3JldHVybiBnbigxK0c3LmNvdW50KF8xKGUpLGUpLHQsMyl9ZnVuY3Rpb24gY1Z0KGUsdCl7cmV0dXJuIGduKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBka2UoZSx0KXtyZXR1cm4gY1Z0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gbWtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gZ2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gX2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24geWtlKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiB2a2UoZSx0KXtyZXR1cm4gZ24oSEMuY291bnQoXzEoZSksZSksdCwyKX1mdW5jdGlvbiB4a2UoZSx0KXt2YXIgcj1lLmdldERheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP1Z3KGUpOlZ3LmNlaWwoZSksZ24oVncuY291bnQoXzEoZSksZSkrKF8xKGUpLmdldERheSgpPT09NCksdCwyKX1mdW5jdGlvbiBia2UoZSl7cmV0dXJuIGUuZ2V0RGF5KCl9ZnVuY3Rpb24gd2tlKGUsdCl7cmV0dXJuIGduKEh3LmNvdW50KF8xKGUpLGUpLHQsMil9ZnVuY3Rpb24gU2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBNa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIEVrZShlKXt2YXIgdD1lLmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKHQ+MD8iLSI6KHQqPS0xLCIrIikpK2duKHQvNjB8MCwiMCIsMikrZ24odCU2MCwiMCIsMil9ZnVuY3Rpb24gb1Z0KGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDRGF0ZSgpLHQsMil9ZnVuY3Rpb24gVGtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDSG91cnMoKSx0LDIpfWZ1bmN0aW9uIENrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ0hvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gQWtlKGUsdCl7cmV0dXJuIGduKDErVzcuY291bnQodjEoZSksZSksdCwzKX1mdW5jdGlvbiB1VnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIFBrZShlLHQpe3JldHVybiB1VnQoZSx0KSsiMDAwIn1mdW5jdGlvbiBJa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBMa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBra2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBSa2UoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIE5rZShlLHQpe3JldHVybiBnbihWQy5jb3VudCh2MShlKSxlKSx0LDIpfWZ1bmN0aW9uIERrZShlLHQpe3ZhciByPWUuZ2V0VVRDRGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/cXcoZSk6cXcuY2VpbChlKSxnbihxdy5jb3VudCh2MShlKSxlKSsodjEoZSkuZ2V0VVRDRGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIE9rZShlKXtyZXR1cm4gZS5nZXRVVENEYXkoKX1mdW5jdGlvbiB6a2UoZSx0KXtyZXR1cm4gZ24oVXcuY291bnQodjEoZSksZSksdCwyKX1mdW5jdGlvbiBGa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEJrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gSGtlKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBhVnQoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gc1Z0KGUpe3JldHVybitlfWZ1bmN0aW9uIGxWdChlKXtyZXR1cm4gTWF0aC5mbG9vcigrZS8xZTMpfXZhciBlVnQsVm8sV0xlLFlMZSx3cnQ9TSgoKT0+e3RWdCgpO2VWdD17Ii0iOiIiLF86IiAiLDA6IjAifSxWbz0vXlxzKlxkKy8sV0xlPS9eJS8sWUxlPS9bXFxeJCorP3xbXF0oKS57fV0vZ30pO2Z1bmN0aW9uIGo3KGUpe3JldHVybiBHdz1XQyhlKSxTcnQ9R3cuZm9ybWF0LE1ydD1Hdy5wYXJzZSxZQz1Hdy51dGNGb3JtYXQsakM9R3cudXRjUGFyc2UsR3d9dmFyIEd3LFNydCxNcnQsWUMsakMsWDc9TSgoKT0+e3dydCgpO2o3KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSl9KTtmdW5jdGlvbiBWa2UoZSl7cmV0dXJuIGUudG9JU09TdHJpbmcoKX12YXIgRXJ0LFVrZSxoVnQsVHJ0PU0oKCk9PntYNygpO0VydD0iJVktJW0tJWRUJUg6JU06JVMuJUxaIjtVa2U9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/VmtlOllDKEVydCksaFZ0PVVrZX0pO2Z1bmN0aW9uIHFrZShlKXt2YXIgdD1uZXcgRGF0ZShlKTtyZXR1cm4gaXNOYU4odCk/bnVsbDp0fXZhciBHa2UsZlZ0LHBWdD1NKCgpPT57VHJ0KCk7WDcoKTtHa2U9K25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKT9xa2U6akMoRXJ0KSxmVnQ9R2tlfSk7dmFyIGRWdD1NKCgpPT57WDcoKTt3cnQoKTtUcnQoKTtwVnQoKX0pO2Z1bmN0aW9uIFl3KCl7cmV0dXJuIHgxfHwoX1Z0KFdrZSkseDE9WkMubm93KCkrWjcpfWZ1bmN0aW9uIFdrZSgpe3gxPTB9ZnVuY3Rpb24gYjEoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIEFydChlLHQscil7dmFyIG49bmV3IGIxO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gUHJ0KCl7WXcoKSwrK1d3O2Zvcih2YXIgZT0kNyx0O2U7KSh0PXgxLWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1Xd31mdW5jdGlvbiBtVnQoKXt4MT0oSzc9WkMubm93KCkpK1o3LFd3PSRDPTA7dHJ5e1BydCgpfWZpbmFsbHl7V3c9MCxqa2UoKSx4MT0wfX1mdW5jdGlvbiBZa2UoKXt2YXIgZT1aQy5ub3coKSx0PWUtSzc7dD5nVnQmJihaNy09dCxLNz1lKX1mdW5jdGlvbiBqa2UoKXtmb3IodmFyIGUsdD0kNyxyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjokNz1yKTtLQz1lLENydChuKX1mdW5jdGlvbiBDcnQoZSl7aWYoIVd3KXskQyYmKCRDPWNsZWFyVGltZW91dCgkQykpO3ZhciB0PWUteDE7dD4yND8oZTwxLzAmJigkQz1zZXRUaW1lb3V0KG1WdCxlLVpDLm5vdygpLVo3KSksWEMmJihYQz1jbGVhckludGVydmFsKFhDKSkpOihYQ3x8KEs3PVpDLm5vdygpLFhDPXNldEludGVydmFsKFlrZSxnVnQpKSxXdz0xLF9WdChtVnQpKX19dmFyIFd3LCRDLFhDLGdWdCwkNyxLQyxLNyx4MSxaNyxaQyxfVnQsSjc9TSgoKT0+e1d3PTAsJEM9MCxYQz0wLGdWdD0xZTMsSzc9MCx4MT0wLFo3PTAsWkM9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsX1Z0PXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSwxNyl9O2IxLnByb3RvdHlwZT1BcnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiMSxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/WXcoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJktDIT09dGhpcyYmKEtDP0tDLl9uZXh0PXRoaXM6JDc9dGhpcyxLQz10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLENydCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxDcnQoKSl9fX0pO2Z1bmN0aW9uIHlWdChlLHQscil7dmFyIG49bmV3IGIxO3JldHVybiB0PXQ9PW51bGw/MDordCxuLnJlc3RhcnQoZnVuY3Rpb24oaSl7bi5zdG9wKCksZShpK3QpfSx0LHIpLG59dmFyIHZWdD1NKCgpPT57SjcoKX0pO2Z1bmN0aW9uIHhWdChlLHQscil7dmFyIG49bmV3IGIxLGk9dDtyZXR1cm4gdD09bnVsbD8obi5yZXN0YXJ0KGUsdCxyKSxuKToodD0rdCxyPXI9PW51bGw/WXcoKTorcixuLnJlc3RhcnQoZnVuY3Rpb24gbyhhKXthKz1pLG4ucmVzdGFydChvLGkrPXQsciksZShhKX0sdCxyKSxuKX12YXIgYlZ0PU0oKCk9PntKNygpfSk7dmFyIHdWdD1NKCgpPT57SjcoKTt2VnQoKTtiVnQoKX0pO3ZhciBRNyxJcnQsTHJ0PU0oKCk9PntRNz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsSXJ0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpRNyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gbGQoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksSXJ0Lmhhc093blByb3BlcnR5KHQpP3tzcGFjZTpJcnRbdF0sbG9jYWw6ZX06ZX12YXIgdHo9TSgoKT0+e0xydCgpfSk7ZnVuY3Rpb24gWGtlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09UTcmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVE3P3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiAka2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gZXooZSl7dmFyIHQ9bGQoZSk7cmV0dXJuKHQubG9jYWw/JGtlOlhrZSkodCl9dmFyIGtydD1NKCgpPT57dHooKTtMcnQoKX0pO2Z1bmN0aW9uIEtrZSgpe31mdW5jdGlvbiB3MShlKXtyZXR1cm4gZT09bnVsbD9La2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGUpfX12YXIgcno9TSgoKT0+e30pO2Z1bmN0aW9uIFNWdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dzEoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1uZXcgQXJyYXkoYSksbCxjLHU9MDt1PGE7Kyt1KShsPW9bdV0pJiYoYz1lLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLHNbdV09Yyk7cmV0dXJuIG5ldyBubyhuLHRoaXMuX3BhcmVudHMpfXZhciBNVnQ9TSgoKT0+e1NmKCk7cnooKX0pO2Z1bmN0aW9uIFprZSgpe3JldHVybltdfWZ1bmN0aW9uIEpDKGUpe3JldHVybiBlPT1udWxsP1prZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fXZhciBScnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEVWdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9SkMoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPVtdLGk9W10sbz0wO288cjsrK28pZm9yKHZhciBhPXRbb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiYobi5wdXNoKGUuY2FsbChsLGwuX19kYXRhX18sYyxhKSksaS5wdXNoKGwpKTtyZXR1cm4gbmV3IG5vKG4saSl9dmFyIFRWdD1NKCgpPT57U2YoKTtScnQoKX0pO2Z1bmN0aW9uIFFDKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fXZhciBOcnQ9TSgoKT0+e30pO2Z1bmN0aW9uIENWdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9UUMoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IG5vKG4sdGhpcy5fcGFyZW50cyl9dmFyIEFWdD1NKCgpPT57U2YoKTtOcnQoKX0pO2Z1bmN0aW9uIG56KGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBEcnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFBWdCgpe3JldHVybiBuZXcgbm8odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAobnopLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHRBKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBPcnQ9TSgoKT0+e0RydCgpO1NmKCk7dEEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0QSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIElWdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIExWdD1NKCgpPT57fSk7ZnVuY3Rpb24gSmtlKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyB0QShlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gUWtlKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9a1Z0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9a1Z0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IHRBKGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gUlZ0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9Ra2U6SmtlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9SVZ0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBubyhhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIGtWdCxOVnQ9TSgoKT0+e1NmKCk7T3J0KCk7TFZ0KCk7a1Z0PSIkIn0pO2Z1bmN0aW9uIERWdCgpe3JldHVybiBuZXcgbm8odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChueiksdGhpcy5fcGFyZW50cyl9dmFyIE9WdD1NKCgpPT57RHJ0KCk7U2YoKX0pO2Z1bmN0aW9uIHpWdChlLHQscil7dmFyIG49dGhpcy5lbnRlcigpLGk9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBuPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6bi5hcHBlbmQoZSsiIiksdCE9bnVsbCYmKGk9dChpKSkscj09bnVsbD9vLnJlbW92ZSgpOnIobyksbiYmaT9uLm1lcmdlKGkpLm9yZGVyKCk6aX12YXIgRlZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCVnQoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IG5vKGEsdGhpcy5fcGFyZW50cyl9dmFyIEhWdD1NKCgpPT57U2YoKX0pO2Z1bmN0aW9uIFZWdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0tMSxyPWUubGVuZ3RoOysrdDxyOylmb3IodmFyIG49ZVt0XSxpPW4ubGVuZ3RoLTEsbz1uW2ldLGE7LS1pPj0wOykoYT1uW2ldKSYmKG8mJmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24obyleNCYmby5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLG8pLG89YSk7cmV0dXJuIHRoaXN9dmFyIFVWdD1NKCgpPT57fSk7ZnVuY3Rpb24gcVZ0KGUpe2V8fChlPXQ4ZSk7ZnVuY3Rpb24gdChoLGYpe3JldHVybiBoJiZmP2UoaC5fX2RhdGFfXyxmLl9fZGF0YV9fKTohaC0hZn1mb3IodmFyIHI9dGhpcy5fZ3JvdXBzLG49ci5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz0wO288bjsrK28pe2Zvcih2YXIgYT1yW29dLHM9YS5sZW5ndGgsbD1pW29dPW5ldyBBcnJheShzKSxjLHU9MDt1PHM7Kyt1KShjPWFbdV0pJiYobFt1XT1jKTtsLnNvcnQodCl9cmV0dXJuIG5ldyBubyhpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9ZnVuY3Rpb24gdDhlKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciBHVnQ9TSgoKT0+e1NmKCl9KTtmdW5jdGlvbiBXVnQoKXt2YXIgZT1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLGUuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9dmFyIFlWdD1NKCgpPT57fSk7ZnVuY3Rpb24galZ0KCl7dmFyIGU9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtlWysrdF09dGhpc30pLGV9dmFyIFhWdD1NKCgpPT57fSk7ZnVuY3Rpb24gJFZ0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KWZvcih2YXIgbj1lW3RdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpe3ZhciBhPW5baV07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH12YXIgS1Z0PU0oKCk9Pnt9KTtmdW5jdGlvbiBaVnQoKXt2YXIgZT0wO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsrK2V9KSxlfXZhciBKVnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFFWdCgpe3JldHVybiF0aGlzLm5vZGUoKX12YXIgdFV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBlVXQoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLG89MCxhPWkubGVuZ3RoLHM7bzxhOysrbykocz1pW29dKSYmZS5jYWxsKHMscy5fX2RhdGFfXyxvLGkpO3JldHVybiB0aGlzfXZhciByVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGU4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX19ZnVuY3Rpb24gcjhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gbjhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0KX19ZnVuY3Rpb24gaThlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsdCl9fWZ1bmN0aW9uIG84ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6dGhpcy5zZXRBdHRyaWJ1dGUoZSxyKX19ZnVuY3Rpb24gYThlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwscil9fWZ1bmN0aW9uIG5VdChlLHQpe3ZhciByPWxkKGUpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIG49dGhpcy5ub2RlKCk7cmV0dXJuIHIubG9jYWw/bi5nZXRBdHRyaWJ1dGVOUyhyLnNwYWNlLHIubG9jYWwpOm4uZ2V0QXR0cmlidXRlKHIpfXJldHVybiB0aGlzLmVhY2goKHQ9PW51bGw/ci5sb2NhbD9yOGU6ZThlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3IubG9jYWw/YThlOm84ZTpyLmxvY2FsP2k4ZTpuOGUpKHIsdCkpfXZhciBpVXQ9TSgoKT0+e3R6KCl9KTtmdW5jdGlvbiBpeihlKXtyZXR1cm4gZS5vd25lckRvY3VtZW50JiZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGUuZG9jdW1lbnQmJmV8fGUuZGVmYXVsdFZpZXd9dmFyIHpydD1NKCgpPT57fSk7ZnVuY3Rpb24gczhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGw4ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIGM4ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBvVXQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP3M4ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9jOGU6bDhlKShlLHQscj09bnVsbD8iIjpyKSk6QmcodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gQmcoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxpeihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgRnJ0PU0oKCk9Pnt6cnQoKX0pO2Z1bmN0aW9uIHU4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tlXX19ZnVuY3Rpb24gaDhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tlXT10fX1mdW5jdGlvbiBmOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP2RlbGV0ZSB0aGlzW2VdOnRoaXNbZV09cn19ZnVuY3Rpb24gYVV0KGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/dThlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP2Y4ZTpoOGUpKGUsdCkpOnRoaXMubm9kZSgpW2VdfXZhciBzVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGxVdChlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gQnJ0KGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IGNVdChlKX1mdW5jdGlvbiBjVXQoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPWxVdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIHVVdChlLHQpe2Zvcih2YXIgcj1CcnQoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLmFkZCh0W25dKX1mdW5jdGlvbiBoVXQoZSx0KXtmb3IodmFyIHI9QnJ0KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5yZW1vdmUodFtuXSl9ZnVuY3Rpb24gcDhlKGUpe3JldHVybiBmdW5jdGlvbigpe3VVdCh0aGlzLGUpfX1mdW5jdGlvbiBkOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aFV0KHRoaXMsZSl9fWZ1bmN0aW9uIG04ZShlLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT91VXQ6aFV0KSh0aGlzLGUpfX1mdW5jdGlvbiBmVXQoZSx0KXt2YXIgcj1sVXQoZSsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49QnJ0KHRoaXMubm9kZSgpKSxpPS0xLG89ci5sZW5ndGg7KytpPG87KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP204ZTp0P3A4ZTpkOGUpKHIsdCkpfXZhciBwVXQ9TSgoKT0+e2NVdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX19KTtmdW5jdGlvbiBnOGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIF84ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIHk4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gZFV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP2c4ZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/eThlOl84ZSkoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fXZhciBtVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHY4ZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIHg4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfX1mdW5jdGlvbiBiOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBnVXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/djhlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9iOGU6eDhlKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfXZhciBfVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHc4ZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiB5VXQoKXtyZXR1cm4gdGhpcy5lYWNoKHc4ZSl9dmFyIHZVdD1NKCgpPT57fSk7ZnVuY3Rpb24gUzhlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24geFV0KCl7cmV0dXJuIHRoaXMuZWFjaChTOGUpfXZhciBiVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHdVdChlKXt2YXIgdD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOmV6KGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfXZhciBTVXQ9TSgoKT0+e2tydCgpfSk7ZnVuY3Rpb24gTThlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gTVV0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpleihlKSxuPXQ9PW51bGw/TThlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6dzEodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBFVXQ9TSgoKT0+e2tydCgpO3J6KCl9KTtmdW5jdGlvbiBFOGUoKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBUVXQoKXtyZXR1cm4gdGhpcy5lYWNoKEU4ZSl9dmFyIENVdD1NKCgpPT57fSk7ZnVuY3Rpb24gVDhlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBDOGUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMCksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIEFVdChlKXtyZXR1cm4gdGhpcy5zZWxlY3QoZT9DOGU6VDhlKX12YXIgUFV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBJVXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGUpOnRoaXMubm9kZSgpLl9fZGF0YV9ffXZhciBMVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEE4ZShlLHQscil7cmV0dXJuIGU9TlV0KGUsdCxyKSxmdW5jdGlvbihuKXt2YXIgaT1uLnJlbGF0ZWRUYXJnZXQ7KCFpfHxpIT09dGhpcyYmIShpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpJjgpKSYmZS5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIE5VdChlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPUhydDtIcnQ9bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7SHJ0PWl9fX1mdW5jdGlvbiBQOGUoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgcj0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYocj10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTpyfX0pfWZ1bmN0aW9uIEk4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYoISF0KXtmb3IodmFyIHI9MCxuPS0xLGk9dC5sZW5ndGgsbztyPGk7KytyKW89dFtyXSwoIWUudHlwZXx8by50eXBlPT09ZS50eXBlKSYmby5uYW1lPT09ZS5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsby5saXN0ZW5lcixvLmNhcHR1cmUpOnRbKytuXT1vOysrbj90Lmxlbmd0aD1uOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBMOGUoZSx0LHIpe3ZhciBuPVJVdC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP0E4ZTpOVXQ7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz10aGlzLl9fb24sbCxjPW4odCxvLGEpO2lmKHMpe2Zvcih2YXIgdT0wLGg9cy5sZW5ndGg7dTxoOysrdSlpZigobD1zW3VdKS50eXBlPT09ZS50eXBlJiZsLm5hbWU9PT1lLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1yKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoZS50eXBlLGMsciksbD17dHlwZTplLnR5cGUsbmFtZTplLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6cn0scz9zLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gRFV0KGUsdCxyKXt2YXIgbj1QOGUoZSsiIiksaSxvPW4ubGVuZ3RoLGE7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpe2Zvcih2YXIgbD0wLGM9cy5sZW5ndGgsdTtsPGM7KytsKWZvcihpPTAsdT1zW2xdO2k8bzsrK2kpaWYoKGE9bltpXSkudHlwZT09PXUudHlwZSYmYS5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfXJldHVybn1mb3Iocz10P0w4ZTpJOGUscj09bnVsbCYmKHI9ITEpLGk9MDtpPG87KytpKXRoaXMuZWFjaChzKG5baV0sdCxyKSk7cmV0dXJuIHRoaXN9dmFyIFJVdCxIcnQsa1V0LE9VdD1NKCgpPT57UlV0PXt9LEhydD1udWxsO3R5cGVvZiBkb2N1bWVudCE9InVuZGVmaW5lZCImJihrVXQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJvbm1vdXNlZW50ZXIiaW4ga1V0fHwoUlV0PXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKX0pO2Z1bmN0aW9uIHpVdChlLHQscil7dmFyIG49aXooZSksaT1uLkN1c3RvbUV2ZW50O3R5cGVvZiBpPT0iZnVuY3Rpb24iP2k9bmV3IGkodCxyKTooaT1uLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLHI/KGkuaW5pdEV2ZW50KHQsci5idWJibGVzLHIuY2FuY2VsYWJsZSksaS5kZXRhaWw9ci5kZXRhaWwpOmkuaW5pdEV2ZW50KHQsITEsITEpKSxlLmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gazhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHpVdCh0aGlzLGUsdCl9fWZ1bmN0aW9uIFI4ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB6VXQodGhpcyxlLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gRlV0KGUsdCl7cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/UjhlOms4ZSkoZSx0KSl9dmFyIEJVdD1NKCgpPT57enJ0KCl9KTtmdW5jdGlvbiBubyhlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBIVXQoKXtyZXR1cm4gbmV3IG5vKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sTjhlKX12YXIgTjhlLGNkLFNmPU0oKCk9PntNVnQoKTtUVnQoKTtBVnQoKTtOVnQoKTtPcnQoKTtPVnQoKTtGVnQoKTtIVnQoKTtVVnQoKTtHVnQoKTtZVnQoKTtYVnQoKTtLVnQoKTtKVnQoKTt0VXQoKTtyVXQoKTtpVXQoKTtGcnQoKTtzVXQoKTtwVXQoKTttVXQoKTtfVXQoKTt2VXQoKTtiVXQoKTtTVXQoKTtFVXQoKTtDVXQoKTtQVXQoKTtMVXQoKTtPVXQoKTtCVXQoKTtOOGU9W251bGxdO25vLnByb3RvdHlwZT1IVXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpubyxzZWxlY3Q6U1Z0LHNlbGVjdEFsbDpFVnQsZmlsdGVyOkNWdCxkYXRhOlJWdCxlbnRlcjpQVnQsZXhpdDpEVnQsam9pbjp6VnQsbWVyZ2U6QlZ0LG9yZGVyOlZWdCxzb3J0OnFWdCxjYWxsOldWdCxub2RlczpqVnQsbm9kZTokVnQsc2l6ZTpaVnQsZW1wdHk6UVZ0LGVhY2g6ZVV0LGF0dHI6blV0LHN0eWxlOm9VdCxwcm9wZXJ0eTphVXQsY2xhc3NlZDpmVXQsdGV4dDpkVXQsaHRtbDpnVXQscmFpc2U6eVV0LGxvd2VyOnhVdCxhcHBlbmQ6d1V0LGluc2VydDpNVXQscmVtb3ZlOlRVdCxjbG9uZTpBVXQsZGF0dW06SVV0LG9uOkRVdCxkaXNwYXRjaDpGVXR9O2NkPUhVdH0pO3ZhciBNZj1NKCgpPT57TnJ0KCk7dHooKTtTZigpO3J6KCk7UnJ0KCk7RnJ0KCl9KTtmdW5jdGlvbiBVVXQoKXtmb3IodmFyIGU9MCx0PWFyZ3VtZW50cy5sZW5ndGgscj17fSxuO2U8dDsrK2Upe2lmKCEobj1hcmd1bWVudHNbZV0rIiIpfHxuIGluIHJ8fC9bXHMuXS8udGVzdChuKSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIituKTtyW25dPVtdfXJldHVybiBuZXcgb3oocil9ZnVuY3Rpb24gb3ooZSl7dGhpcy5fPWV9ZnVuY3Rpb24gTzhlKGUsdCl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihyKXt2YXIgbj0iIixpPXIuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihuPXIuc2xpY2UoaSsxKSxyPXIuc2xpY2UoMCxpKSksciYmIXQuaGFzT3duUHJvcGVydHkocikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrcik7cmV0dXJue3R5cGU6cixuYW1lOm59fSl9ZnVuY3Rpb24gejhlKGUsdCl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aCxpO3I8bjsrK3IpaWYoKGk9ZVtyXSkubmFtZT09PXQpcmV0dXJuIGkudmFsdWV9ZnVuY3Rpb24gVlV0KGUsdCxyKXtmb3IodmFyIG49MCxpPWUubGVuZ3RoO248aTsrK24paWYoZVtuXS5uYW1lPT09dCl7ZVtuXT1EOGUsZT1lLnNsaWNlKDAsbikuY29uY2F0KGUuc2xpY2UobisxKSk7YnJlYWt9cmV0dXJuIHIhPW51bGwmJmUucHVzaCh7bmFtZTp0LHZhbHVlOnJ9KSxlfXZhciBEOGUsVnJ0LHFVdD1NKCgpPT57RDhlPXt2YWx1ZTpmdW5jdGlvbigpe319O296LnByb3RvdHlwZT1VVXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpveixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPU84ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPXo4ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09VlV0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09VlV0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBveihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07VnJ0PVVVdH0pO3ZhciBHVXQ9TSgoKT0+e3FVdCgpfSk7ZnVuY3Rpb24gWHcoKXtyZXR1cm4gUzF8fChqVXQoRjhlKSxTMT1pQS5ub3coKStseil9ZnVuY3Rpb24gRjhlKCl7UzE9MH1mdW5jdGlvbiBvQSgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gY3ooZSx0LHIpe3ZhciBuPW5ldyBvQTtyZXR1cm4gbi5yZXN0YXJ0KGUsdCxyKSxufWZ1bmN0aW9uIFhVdCgpe1h3KCksKytqdztmb3IodmFyIGU9YXosdDtlOykodD1TMS1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0tand9ZnVuY3Rpb24gV1V0KCl7UzE9KHN6PWlBLm5vdygpKStseixqdz1yQT0wO3RyeXtYVXQoKX1maW5hbGx5e2p3PTAsSDhlKCksUzE9MH19ZnVuY3Rpb24gQjhlKCl7dmFyIGU9aUEubm93KCksdD1lLXN6O3Q+WVV0JiYobHotPXQsc3o9ZSl9ZnVuY3Rpb24gSDhlKCl7Zm9yKHZhciBlLHQ9YXoscixuPTEvMDt0Oyl0Ll9jYWxsPyhuPnQuX3RpbWUmJihuPXQuX3RpbWUpLGU9dCx0PXQuX25leHQpOihyPXQuX25leHQsdC5fbmV4dD1udWxsLHQ9ZT9lLl9uZXh0PXI6YXo9cik7bkE9ZSxVcnQobil9ZnVuY3Rpb24gVXJ0KGUpe2lmKCFqdyl7ckEmJihyQT1jbGVhclRpbWVvdXQockEpKTt2YXIgdD1lLVMxO3Q+MjQ/KGU8MS8wJiYockE9c2V0VGltZW91dChXVXQsZS1pQS5ub3coKS1seikpLGVBJiYoZUE9Y2xlYXJJbnRlcnZhbChlQSkpKTooZUF8fChzej1pQS5ub3coKSxlQT1zZXRJbnRlcnZhbChCOGUsWVV0KSksanc9MSxqVXQoV1V0KSl9fXZhciBqdyxyQSxlQSxZVXQsYXosbkEsc3osUzEsbHosaUEsalV0LHFydD1NKCgpPT57anc9MCxyQT0wLGVBPTAsWVV0PTFlMyxzej0wLFMxPTAsbHo9MCxpQT10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxqVXQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07b0EucHJvdG90eXBlPWN6LnByb3RvdHlwZT17Y29uc3RydWN0b3I6b0EscmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP1h3KCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZuQSE9PXRoaXMmJihuQT9uQS5fbmV4dD10aGlzOmF6PXRoaXMsbkE9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixVcnQoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsVXJ0KCkpfX19KTtmdW5jdGlvbiB1eihlLHQscil7dmFyIG49bmV3IG9BO3JldHVybiB0PXQ9PW51bGw/MDordCxuLnJlc3RhcnQoZnVuY3Rpb24oaSl7bi5zdG9wKCksZShpK3QpfSx0LHIpLG59dmFyICRVdD1NKCgpPT57cXJ0KCl9KTt2YXIgR3J0PU0oKCk9PntxcnQoKTskVXQoKX0pO2Z1bmN0aW9uIEhnKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47cThlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpWOGUsdHdlZW46VThlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOlpVdH0pfWZ1bmN0aW9uIGxBKGUsdCl7dmFyIHI9aW8oZSx0KTtpZihyLnN0YXRlPlpVdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIER1KGUsdCl7dmFyIHI9aW8oZSx0KTtpZihyLnN0YXRlPnNBKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc3RhcnRlZCIpO3JldHVybiByfWZ1bmN0aW9uIGlvKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gcThlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPWN6KG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1oeixyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PWh6KXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09V3J0KXJldHVybiB1eihhKTtwLnN0YXRlPT09S1V0PyhwLnN0YXRlPWFBLHAudGltZXIuc3RvcCgpLHAub24uY2FsbCgiaW50ZXJydXB0IixlLGUuX19kYXRhX18scC5pbmRleCxwLmdyb3VwKSxkZWxldGUgblt1XSk6K3U8dCYmKHAuc3RhdGU9YUEscC50aW1lci5zdG9wKCksZGVsZXRlIG5bdV0pfWlmKHV6KGZ1bmN0aW9uKCl7ci5zdGF0ZT09PVdydCYmKHIuc3RhdGU9S1V0LHIudGltZXIucmVzdGFydChzLHIuZGVsYXksci50aW1lKSxzKGMpKX0pLHIuc3RhdGU9c0Esci5vbi5jYWxsKCJzdGFydCIsZSxlLl9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCksci5zdGF0ZT09PXNBKXtmb3Ioci5zdGF0ZT1XcnQsaT1uZXcgQXJyYXkoZj1yLnR3ZWVuLmxlbmd0aCksdT0wLGg9LTE7dTxmOysrdSkocD1yLnR3ZWVuW3VdLnZhbHVlLmNhbGwoZSxlLl9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCkpJiYoaVsrK2hdPXApO2kubGVuZ3RoPWgrMX19ZnVuY3Rpb24gcyhjKXtmb3IodmFyIHU9YzxyLmR1cmF0aW9uP3IuZWFzZS5jYWxsKG51bGwsYy9yLmR1cmF0aW9uKTooci50aW1lci5yZXN0YXJ0KGwpLHIuc3RhdGU9ZnosMSksaD0tMSxmPWkubGVuZ3RoOysraDxmOylpW2hdLmNhbGwobnVsbCx1KTtyLnN0YXRlPT09ZnomJihyLm9uLmNhbGwoImVuZCIsZSxlLl9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCksbCgpKX1mdW5jdGlvbiBsKCl7ci5zdGF0ZT1hQSxyLnRpbWVyLnN0b3AoKSxkZWxldGUgblt0XTtmb3IodmFyIGMgaW4gbilyZXR1cm47ZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgVjhlLFU4ZSxaVXQsaHosc0EsV3J0LEtVdCxmeixhQSxBYz1NKCgpPT57R1V0KCk7R3J0KCk7VjhlPVZydCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSxVOGU9W10sWlV0PTAsaHo9MSxzQT0yLFdydD0zLEtVdD00LGZ6PTUsYUE9Nn0pO2Z1bmN0aW9uIHB6KGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb24sbixpLG89ITAsYTtpZighIXIpe3Q9dD09bnVsbD9udWxsOnQrIiI7Zm9yKGEgaW4gcil7aWYoKG49clthXSkubmFtZSE9PXQpe289ITE7Y29udGludWV9aT1uLnN0YXRlPnNBJiZuLnN0YXRlPGZ6LG4uc3RhdGU9YUEsbi50aW1lci5zdG9wKCksaSYmbi5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSByW2FdfW8mJmRlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIFlydD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIEpVdChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cHoodGhpcyxlKX0pfXZhciBRVXQ9TSgoKT0+e1lydCgpfSk7ZnVuY3Rpb24gZHooZSx0LHIpe2UucHJvdG90eXBlPXQucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj1lfWZ1bmN0aW9uIGpydChlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgdHF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBoQSgpe31mdW5jdGlvbiBycXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBaOGUoKXtyZXR1cm4gbHF0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIG5xdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIFZnKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PUc4ZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P2lxdCh0KTpyPT09Mz9uZXcgbWwodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P216KHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P216KHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9VzhlLmV4ZWMoZSkpP25ldyBtbCh0WzFdLHRbMl0sdFszXSwxKToodD1ZOGUuZXhlYyhlKSk/bmV3IG1sKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PWo4ZS5leGVjKGUpKT9teih0WzFdLHRbMl0sdFszXSx0WzRdKToodD1YOGUuZXhlYyhlKSk/bXoodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9JDhlLmV4ZWMoZSkpP3NxdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PUs4ZS5leGVjKGUpKT9zcXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTplcXQuaGFzT3duUHJvcGVydHkoZSk/aXF0KGVxdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IG1sKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gaXF0KGUpe3JldHVybiBuZXcgbWwoZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIG16KGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgbWwoZSx0LHIsbil9ZnVuY3Rpb24gSjhlKGUpe3JldHVybiBlIGluc3RhbmNlb2YgaEF8fChlPVZnKGUpKSxlPyhlPWUucmdiKCksbmV3IG1sKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyBtbH1mdW5jdGlvbiBLdyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/SjhlKGUpOm5ldyBtbChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gbWwoZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIG9xdCgpe3JldHVybiIjIitYcnQodGhpcy5yKStYcnQodGhpcy5nKStYcnQodGhpcy5iKX1mdW5jdGlvbiBhcXQoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gWHJ0KGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHNxdChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IEVmKGUsdCxyLG4pfWZ1bmN0aW9uIGxxdChlKXtpZihlIGluc3RhbmNlb2YgRWYpcmV0dXJuIG5ldyBFZihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBoQXx8KGU9VmcoZSkpLCFlKXJldHVybiBuZXcgRWY7aWYoZSBpbnN0YW5jZW9mIEVmKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IEVmKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gY3F0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9scXQoZSk6bmV3IEVmKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBFZihlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gJHJ0KGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBjQSxneiwkdyx1QSxUZixHOGUsVzhlLFk4ZSxqOGUsWDhlLCQ4ZSxLOGUsZXF0LHVxdD1NKCgpPT57dHF0KCk7Y0E9LjcsZ3o9MS9jQSwkdz0iXFxzKihbKy1dP1xcZCspXFxzKiIsdUE9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsVGY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLEc4ZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxXOGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrWyR3LCR3LCR3XSsiXFwpJCIpLFk4ZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbVGYsVGYsVGZdKyJcXCkkIiksajhlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbJHcsJHcsJHcsdUFdKyJcXCkkIiksWDhlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbVGYsVGYsVGYsdUFdKyJcXCkkIiksJDhlPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1t1QSxUZixUZl0rIlxcKSQiKSxLOGU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1t1QSxUZixUZix1QV0rIlxcKSQiKSxlcXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZHooaEEsVmcse2NvcHk6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxlKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6cnF0LGZvcm1hdEhleDpycXQsZm9ybWF0SHNsOlo4ZSxmb3JtYXRSZ2I6bnF0LHRvU3RyaW5nOm5xdH0pO2R6KG1sLEt3LGpydChoQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9nejpNYXRoLnBvdyhneixlKSxuZXcgbWwodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Y0E6TWF0aC5wb3coY0EsZSksbmV3IG1sKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6b3F0LGZvcm1hdEhleDpvcXQsZm9ybWF0UmdiOmFxdCx0b1N0cmluZzphcXR9KSk7ZHooRWYsY3F0LGpydChoQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9nejpNYXRoLnBvdyhneixlKSxuZXcgRWYodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9jQTpNYXRoLnBvdyhjQSxlKSxuZXcgRWYodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBtbCgkcnQoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksJHJ0KGUsaSxuKSwkcnQoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgS3J0PU0oKCk9Pnt1cXQoKX0pO2Z1bmN0aW9uIFpydChlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGhxdChlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsdC0xKTpNYXRoLmZsb29yKHIqdCksaT1lW25dLG89ZVtuKzFdLGE9bj4wP2Vbbi0xXToyKmktbyxzPW48dC0xP2VbbisyXToyKm8taTtyZXR1cm4gWnJ0KChyLW4vdCkqdCxhLGksbyxzKX19dmFyIEpydD1NKCgpPT57fSk7ZnVuY3Rpb24gZnF0KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gWnJ0KChyLW4vdCkqdCxpLG8sYSxzKX19dmFyIHBxdD1NKCgpPT57SnJ0KCl9KTtmdW5jdGlvbiBRcnQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBkcXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFE4ZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIHRSZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uIG1xdChlKXtyZXR1cm4oZT0rZSk9PTE/X3o6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P3RSZSh0LHIsZSk6UXJ0KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIF96KGUsdCl7dmFyIHI9dC1lO3JldHVybiByP1E4ZShlLHIpOlFydChpc05hTihlKT90OmUpfXZhciBncXQ9TSgoKT0+e2RxdCgpfSk7ZnVuY3Rpb24gX3F0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9S3codFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIHl6LGVSZSxyUmUseXF0PU0oKCk9PntLcnQoKTtKcnQoKTtwcXQoKTtncXQoKTt5ej1mdW5jdGlvbiBlKHQpe3ZhciByPW1xdCh0KTtmdW5jdGlvbiBuKGksbyl7dmFyIGE9cigoaT1LdyhpKSkuciwobz1LdyhvKSkucikscz1yKGkuZyxvLmcpLGw9cihpLmIsby5iKSxjPV96KGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5yPWEodSksaS5nPXModSksaS5iPWwodSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9ZSxufSgxKTtlUmU9X3F0KGhxdCksclJlPV9xdChmcXQpfSk7ZnVuY3Rpb24gUGMoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIHZ6PU0oKCk9Pnt9KTtmdW5jdGlvbiBuUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGlSZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIHJudChlLHQpe3ZhciByPWVudC5sYXN0SW5kZXg9dG50Lmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPWVudC5leGVjKGUpKSYmKGk9dG50LmV4ZWModCkpOykobz1pLmluZGV4KT5yJiYobz10LnNsaWNlKHIsbyksc1thXT9zW2FdKz1vOnNbKythXT1vKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpQYyhuLGkpfSkpLHI9dG50Lmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9pUmUobFswXS54KTpuUmUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIGVudCx0bnQsdnF0PU0oKCk9Pnt2eigpO2VudD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csdG50PW5ldyBSZWdFeHAoZW50LnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gbm50KGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKnhxdCxza2V3WDpNYXRoLmF0YW4obCkqeHF0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgeHF0LHh6LGJxdD1NKCgpPT57eHF0PTE4MC9NYXRoLlBJLHh6PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gU3F0KGUpe3JldHVybiBlPT09Im5vbmUiP3h6OihmQXx8KGZBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGludD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsd3F0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxmQS5zdHlsZS50cmFuc2Zvcm09ZSxlPXdxdC5nZXRDb21wdXRlZFN0eWxlKGludC5hcHBlbmRDaGlsZChmQSksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksaW50LnJlbW92ZUNoaWxkKGZBKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxubnQoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiBNcXQoZSl7cmV0dXJuIGU9PW51bGw/eHo6KGJ6fHwoYno9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksYnouc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPWJ6LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LG5udChlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZikpOnh6KX12YXIgZkEsaW50LHdxdCxieixFcXQ9TSgoKT0+e2JxdCgpfSk7ZnVuY3Rpb24gVHF0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6UGMoYyxoKX0se2k6Zy0yLHg6UGModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpQYyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OlBjKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpQYyhjLGgpfSx7aTpnLTIseDpQYyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBvbnQsYW50LENxdD1NKCgpPT57dnooKTtFcXQoKTtvbnQ9VHF0KFNxdCwicHgsICIsInB4KSIsImRlZykiKSxhbnQ9VHF0KE1xdCwiLCAiLCIpIiwiKSIpfSk7dmFyIHd6PU0oKCk9Pnt2eigpO3ZxdCgpO0NxdCgpO3lxdCgpfSk7ZnVuY3Rpb24gb1JlKGUsdCl7dmFyIHIsbjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1EdSh0aGlzLGUpLG89aS50d2VlbjtpZihvIT09cil7bj1yPW87Zm9yKHZhciBhPTAscz1uLmxlbmd0aDthPHM7KythKWlmKG5bYV0ubmFtZT09PXQpe249bi5zbGljZSgpLG4uc3BsaWNlKGEsMSk7YnJlYWt9fWkudHdlZW49bn19ZnVuY3Rpb24gYVJlKGUsdCxyKXt2YXIgbixpO2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1EdSh0aGlzLGUpLGE9by50d2VlbjtpZihhIT09bil7aT0obj1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTp0LHZhbHVlOnJ9LGw9MCxjPWkubGVuZ3RoO2w8YzsrK2wpaWYoaVtsXS5uYW1lPT09dCl7aVtsXT1zO2JyZWFrfWw9PT1jJiZpLnB1c2gocyl9by50d2Vlbj1pfX1mdW5jdGlvbiBBcXQoZSx0KXt2YXIgcj10aGlzLl9pZDtpZihlKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1pbyh0aGlzLm5vZGUoKSxyKS50d2VlbixpPTAsbz1uLmxlbmd0aCxhO2k8bzsrK2kpaWYoKGE9bltpXSkubmFtZT09PWUpcmV0dXJuIGEudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9vUmU6YVJlKShyLGUsdCkpfWZ1bmN0aW9uIFp3KGUsdCxyKXt2YXIgbj1lLl9pZDtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9RHUodGhpcyxuKTsoaS52YWx1ZXx8KGkudmFsdWU9e30pKVt0XT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKGkpe3JldHVybiBpbyhpLG4pLnZhbHVlW3RdfX12YXIgcEE9TSgoKT0+e0FjKCl9KTtmdW5jdGlvbiBTeihlLHQpe3ZhciByO3JldHVybih0eXBlb2YgdD09Im51bWJlciI/UGM6dCBpbnN0YW5jZW9mIFZnP3l6OihyPVZnKHQpKT8odD1yLHl6KTpybnQpKGUsdCl9dmFyIHNudD1NKCgpPT57S3J0KCk7d3ooKX0pO2Z1bmN0aW9uIHNSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX19ZnVuY3Rpb24gbFJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gY1JlKGUsdCxyKXt2YXIgbixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24gdVJlKGUsdCxyKXt2YXIgbixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTtyZXR1cm4gbz09PXI/bnVsbDpvPT09bj9pOmk9dChuPW8scil9fWZ1bmN0aW9uIGhSZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHM9cih0aGlzKTtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGE9PT1zP251bGw6YT09PW4mJnM9PT1pP286bz10KG49YSxpPXMpKX19ZnVuY3Rpb24gZlJlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1yKHRoaXMpO3JldHVybiBzPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOihhPXRoaXMuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKSxhPT09cz9udWxsOmE9PT1uJiZzPT09aT9vOm89dChuPWEsaT1zKSl9fWZ1bmN0aW9uIFBxdChlLHQpe3ZhciByPWxkKGUpLG49cj09PSJ0cmFuc2Zvcm0iP2FudDpTejtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oZSx0eXBlb2YgdD09ImZ1bmN0aW9uIj8oci5sb2NhbD9mUmU6aFJlKShyLG4sWncodGhpcywiYXR0ci4iK2UsdCkpOnQ9PW51bGw/KHIubG9jYWw/bFJlOnNSZSkocik6KHIubG9jYWw/dVJlOmNSZSkocixuLHQrIiIpKX12YXIgSXF0PU0oKCk9Pnt3eigpO01mKCk7cEEoKTtzbnQoKX0pO2Z1bmN0aW9uIHBSZShlLHQpe2Z1bmN0aW9uIHIoKXt2YXIgbj10aGlzLGk9dC5hcHBseShuLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKG8pe24uc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLGkobykpfX1yZXR1cm4gci5fdmFsdWU9dCxyfWZ1bmN0aW9uIGRSZShlLHQpe2Z1bmN0aW9uIHIoKXt2YXIgbj10aGlzLGk9dC5hcHBseShuLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKG8pe24uc2V0QXR0cmlidXRlKGUsaShvKSl9fXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gTHF0KGUsdCl7dmFyIHI9ImF0dHIuIitlO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjt2YXIgbj1sZChlKTtyZXR1cm4gdGhpcy50d2VlbihyLChuLmxvY2FsP3BSZTpkUmUpKG4sdCkpfXZhciBrcXQ9TSgoKT0+e01mKCl9KTtmdW5jdGlvbiBtUmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtsQSh0aGlzLGUpLmRlbGF5PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gZ1JlKGUsdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtsQSh0aGlzLGUpLmRlbGF5PXR9fWZ1bmN0aW9uIFJxdChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP21SZTpnUmUpKHQsZSkpOmlvKHRoaXMubm9kZSgpLHQpLmRlbGF5fXZhciBOcXQ9TSgoKT0+e0FjKCl9KTtmdW5jdGlvbiBfUmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtEdSh0aGlzLGUpLmR1cmF0aW9uPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24geVJlKGUsdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtEdSh0aGlzLGUpLmR1cmF0aW9uPXR9fWZ1bmN0aW9uIERxdChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP19SZTp5UmUpKHQsZSkpOmlvKHRoaXMubm9kZSgpLHQpLmR1cmF0aW9ufXZhciBPcXQ9TSgoKT0+e0FjKCl9KTtmdW5jdGlvbiB2UmUoZSx0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7RHUodGhpcyxlKS5lYXNlPXR9fWZ1bmN0aW9uIHpxdChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2godlJlKHQsZSkpOmlvKHRoaXMubm9kZSgpLHQpLmVhc2V9dmFyIEZxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIEJxdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9UUMoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IFVvKG4sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX12YXIgSHF0PU0oKCk9PntNZigpO3VkKCl9KTtmdW5jdGlvbiBWcXQoZSl7aWYoZS5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IFVvKGEsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX12YXIgVXF0PU0oKCk9Pnt1ZCgpfSk7ZnVuY3Rpb24geFJlKGUpe3JldHVybihlKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIHI9dC5pbmRleE9mKCIuIik7cmV0dXJuIHI+PTAmJih0PXQuc2xpY2UoMCxyKSksIXR8fHQ9PT0ic3RhcnQifSl9ZnVuY3Rpb24gYlJlKGUsdCxyKXt2YXIgbixpLG89eFJlKHQpP2xBOkR1O3JldHVybiBmdW5jdGlvbigpe3ZhciBhPW8odGhpcyxlKSxzPWEub247cyE9PW4mJihpPShuPXMpLmNvcHkoKSkub24odCxyKSxhLm9uPWl9fWZ1bmN0aW9uIHFxdChlLHQpe3ZhciByPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/aW8odGhpcy5ub2RlKCkscikub24ub24oZSk6dGhpcy5lYWNoKGJSZShyLGUsdCkpfXZhciBHcXQ9TSgoKT0+e0FjKCl9KTtmdW5jdGlvbiB3UmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgciBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrciE9PWUpcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIFdxdCgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIix3UmUodGhpcy5faWQpKX12YXIgWXF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBqcXQoZSl7dmFyIHQ9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT13MShlKSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89bmV3IEFycmF5KGkpLGE9MDthPGk7KythKWZvcih2YXIgcz1uW2FdLGw9cy5sZW5ndGgsYz1vW2FdPW5ldyBBcnJheShsKSx1LGgsZj0wO2Y8bDsrK2YpKHU9c1tmXSkmJihoPWUuY2FsbCh1LHUuX19kYXRhX18sZixzKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksY1tmXT1oLEhnKGNbZl0sdCxyLGYsYyxpbyh1LHIpKSk7cmV0dXJuIG5ldyBVbyhvLHRoaXMuX3BhcmVudHMsdCxyKX12YXIgWHF0PU0oKCk9PntNZigpO3VkKCk7QWMoKX0pO2Z1bmN0aW9uICRxdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUpDKGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1bXSxhPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgbD1uW3NdLGM9bC5sZW5ndGgsdSxoPTA7aDxjOysraClpZih1PWxbaF0pe2Zvcih2YXIgZj1lLmNhbGwodSx1Ll9fZGF0YV9fLGgsbCkscCxkPWlvKHUsciksZz0wLF89Zi5sZW5ndGg7ZzxfOysrZykocD1mW2ddKSYmSGcocCx0LHIsZyxmLGQpO28ucHVzaChmKSxhLnB1c2godSl9cmV0dXJuIG5ldyBVbyhvLGEsdCxyKX12YXIgS3F0PU0oKCk9PntNZigpO3VkKCk7QWMoKX0pO2Z1bmN0aW9uIFpxdCgpe3JldHVybiBuZXcgU1JlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX12YXIgU1JlLEpxdD1NKCgpPT57TWYoKTtTUmU9Y2QucHJvdG90eXBlLmNvbnN0cnVjdG9yfSk7ZnVuY3Rpb24gTVJlKGUsdCl7dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUJnKHRoaXMsZSksYT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxCZyh0aGlzLGUpKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09ciYmYT09PW4/aTppPXQocj1vLG49YSl9fWZ1bmN0aW9uIEVSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBUUmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89QmcodGhpcyxlKTtyZXR1cm4gbz09PXI/bnVsbDpvPT09bj9pOmk9dChuPW8scil9fWZ1bmN0aW9uIENSZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPUJnKHRoaXMsZSkscz1yKHRoaXMpO3JldHVybiBzPT1udWxsJiYocz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxCZyh0aGlzLGUpKSksYT09PXM/bnVsbDphPT09biYmcz09PWk/bzpvPXQobj1hLGk9cyl9fWZ1bmN0aW9uIFFxdChlLHQscil7dmFyIG49KGUrPSIiKT09InRyYW5zZm9ybSI/b250OlN6O3JldHVybiB0PT1udWxsP3RoaXMuc3R5bGVUd2VlbihlLE1SZShlLG4pKS5vbigiZW5kLnN0eWxlLiIrZSxFUmUoZSkpOnRoaXMuc3R5bGVUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iP0NSZShlLG4sWncodGhpcywic3R5bGUuIitlLHQpKTpUUmUoZSxuLHQrIiIpLHIpfXZhciB0R3Q9TSgoKT0+e3d6KCk7TWYoKTtwQSgpO3NudCgpfSk7ZnVuY3Rpb24gQVJlKGUsdCxyKXtmdW5jdGlvbiBuKCl7dmFyIGk9dGhpcyxvPXQuYXBwbHkoaSxhcmd1bWVudHMpO3JldHVybiBvJiZmdW5jdGlvbihhKXtpLnN0eWxlLnNldFByb3BlcnR5KGUsbyhhKSxyKX19cmV0dXJuIG4uX3ZhbHVlPXQsbn1mdW5jdGlvbiBlR3QoZSx0LHIpe3ZhciBuPSJzdHlsZS4iKyhlKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKG4sQVJlKGUsdCxyPT1udWxsPyIiOnIpKX12YXIgckd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBQUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBJUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gbkd0KGUpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2YgZT09ImZ1bmN0aW9uIj9JUmUoWncodGhpcywidGV4dCIsZSkpOlBSZShlPT1udWxsPyIiOmUrIiIpKX12YXIgaUd0PU0oKCk9PntwQSgpfSk7ZnVuY3Rpb24gb0d0KCl7Zm9yKHZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZCxyPU16KCksbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpaWYobD1hW2NdKXt2YXIgdT1pbyhsLHQpO0hnKGwsZSxyLGMsYSx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgVW8obix0aGlzLl9wYXJlbnRzLGUscil9dmFyIGFHdD1NKCgpPT57dWQoKTtBYygpfSk7ZnVuY3Rpb24gVW8oZSx0LHIsbil7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9cix0aGlzLl9pZD1ufWZ1bmN0aW9uIEV6KGUpe3JldHVybiBjZCgpLnRyYW5zaXRpb24oZSl9ZnVuY3Rpb24gTXooKXtyZXR1cm4rK0xSZX12YXIgTFJlLEp3LHVkPU0oKCk9PntNZigpO0lxdCgpO2txdCgpO05xdCgpO09xdCgpO0ZxdCgpO0hxdCgpO1VxdCgpO0dxdCgpO1lxdCgpO1hxdCgpO0txdCgpO0pxdCgpO3RHdCgpO3JHdCgpO2lHdCgpO2FHdCgpO3BBKCk7TFJlPTA7Snc9Y2QucHJvdG90eXBlO1VvLnByb3RvdHlwZT1Fei5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVvLHNlbGVjdDpqcXQsc2VsZWN0QWxsOiRxdCxmaWx0ZXI6QnF0LG1lcmdlOlZxdCxzZWxlY3Rpb246WnF0LHRyYW5zaXRpb246b0d0LGNhbGw6SncuY2FsbCxub2RlczpKdy5ub2Rlcyxub2RlOkp3Lm5vZGUsc2l6ZTpKdy5zaXplLGVtcHR5Okp3LmVtcHR5LGVhY2g6SncuZWFjaCxvbjpxcXQsYXR0cjpQcXQsYXR0clR3ZWVuOkxxdCxzdHlsZTpRcXQsc3R5bGVUd2VlbjplR3QsdGV4dDpuR3QscmVtb3ZlOldxdCx0d2VlbjpBcXQsZGVsYXk6UnF0LGR1cmF0aW9uOkRxdCxlYXNlOnpxdH19KTtmdW5jdGlvbiBrUmUoZSx0KXtmb3IodmFyIHI7IShyPWUuX190cmFuc2l0aW9uKXx8IShyPXJbdF0pOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm4gbG50LnRpbWU9WHcoKSxsbnQ7cmV0dXJuIHJ9ZnVuY3Rpb24gc0d0KGUpe3ZhciB0LHI7ZSBpbnN0YW5jZW9mIFVvPyh0PWUuX2lkLGU9ZS5fbmFtZSk6KHQ9TXooKSwocj1sbnQpLnRpbWU9WHcoKSxlPWU9PW51bGw/bnVsbDplKyIiKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiZIZyhsLGUsdCxjLGEscnx8a1JlKGwsdCkpO3JldHVybiBuZXcgVW8obix0aGlzLl9wYXJlbnRzLGUsdCl9dmFyIGxudCxsR3Q9TSgoKT0+e3VkKCk7QWMoKTtJXygpO0dydCgpO2xudD17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6eHN9fSk7dmFyIGNHdD1NKCgpPT57TWYoKTtRVXQoKTtsR3QoKTtjZC5wcm90b3R5cGUuaW50ZXJydXB0PUpVdDtjZC5wcm90b3R5cGUudHJhbnNpdGlvbj1zR3R9KTtmdW5jdGlvbiB1R3QoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGk7aWYocil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoaSBpbiByKWlmKChuPXJbaV0pLnN0YXRlPmh6JiZuLm5hbWU9PT10KXJldHVybiBuZXcgVW8oW1tlXV0sUlJlLHQsK2kpfXJldHVybiBudWxsfXZhciBSUmUsaEd0PU0oKCk9Pnt1ZCgpO0FjKCk7UlJlPVtudWxsXX0pO3ZhciBmR3Q9TSgoKT0+e2NHdCgpO3VkKCk7aEd0KCk7WXJ0KCl9KTtmdW5jdGlvbiBjbnQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBwR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGRHdChlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBtR3QoZSl7cmV0dXJuIGVbMV19dmFyIGdHdD1NKCgpPT57fSk7ZnVuY3Rpb24gdW50KCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gUXcoZSl7ZS5VPWUuQz1lLkw9ZS5SPWUuUD1lLk49bnVsbH1mdW5jdGlvbiBkQShlLHQpe3ZhciByPXQsbj10LlIsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOmUuXz1uLG4uVT1pLHIuVT1uLHIuUj1uLkwsci5SJiYoci5SLlU9ciksbi5MPXJ9ZnVuY3Rpb24gbUEoZSx0KXt2YXIgcj10LG49dC5MLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjplLl89bixuLlU9aSxyLlU9bixyLkw9bi5SLHIuTCYmKHIuTC5VPXIpLG4uUj1yfWZ1bmN0aW9uIF9HdChlKXtmb3IoO2UuTDspZT1lLkw7cmV0dXJuIGV9dmFyIGhudCxUej1NKCgpPT57dW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dW50LGluc2VydDpmdW5jdGlvbihlLHQpe3ZhciByLG4saTtpZihlKXtpZih0LlA9ZSx0Lk49ZS5OLGUuTiYmKGUuTi5QPXQpLGUuTj10LGUuUil7Zm9yKGU9ZS5SO2UuTDspZT1lLkw7ZS5MPXR9ZWxzZSBlLlI9dDtyPWV9ZWxzZSB0aGlzLl8/KGU9X0d0KHRoaXMuXyksdC5QPW51bGwsdC5OPWUsZS5QPWUuTD10LHI9ZSk6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxyPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPXIsdC5DPSEwLGU9dDtyJiZyLkM7KW49ci5VLHI9PT1uLkw/KGk9bi5SLGkmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsZT1uKTooZT09PXIuUiYmKGRBKHRoaXMsciksZT1yLHI9ZS5VKSxyLkM9ITEsbi5DPSEwLG1BKHRoaXMsbikpKTooaT1uLkwsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5MJiYobUEodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsZEEodGhpcyxuKSkpLHI9ZS5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24oZSl7ZS5OJiYoZS5OLlA9ZS5QKSxlLlAmJihlLlAuTj1lLk4pLGUuTj1lLlA9bnVsbDt2YXIgdD1lLlUscixuPWUuTCxpPWUuUixvLGE7aWYobj9pP289X0d0KGkpOm89bjpvPWksdD90Lkw9PT1lP3QuTD1vOnQuUj1vOnRoaXMuXz1vLG4mJmk/KGE9by5DLG8uQz1lLkMsby5MPW4sbi5VPW8sbyE9PWk/KHQ9by5VLG8uVT1lLlUsZT1vLlIsdC5MPWUsby5SPWksaS5VPW8pOihvLlU9dCx0PW8sZT1vLlIpKTooYT1lLkMsZT1vKSxlJiYoZS5VPXQpLCFhKXtpZihlJiZlLkMpe2UuQz0hMTtyZXR1cm59ZG97aWYoZT09PXRoaXMuXylicmVhaztpZihlPT09dC5MKXtpZihyPXQuUixyLkMmJihyLkM9ITEsdC5DPSEwLGRBKHRoaXMsdCkscj10LlIpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5SfHwhci5SLkMpJiYoci5MLkM9ITEsci5DPSEwLG1BKHRoaXMscikscj10LlIpLHIuQz10LkMsdC5DPXIuUi5DPSExLGRBKHRoaXMsdCksZT10aGlzLl87YnJlYWt9fWVsc2UgaWYocj10Lkwsci5DJiYoci5DPSExLHQuQz0hMCxtQSh0aGlzLHQpLHI9dC5MKSxyLkwmJnIuTC5DfHxyLlImJnIuUi5DKXsoIXIuTHx8IXIuTC5DKSYmKHIuUi5DPSExLHIuQz0hMCxkQSh0aGlzLHIpLHI9dC5MKSxyLkM9dC5DLHQuQz1yLkwuQz0hMSxtQSh0aGlzLHQpLGU9dGhpcy5fO2JyZWFrfXIuQz0hMCxlPXQsdD10LlV9d2hpbGUoIWUuQyk7ZSYmKGUuQz0hMSl9fX07aG50PXVudH0pO2Z1bmN0aW9uIHRTKGUsdCxyLG4pe3ZhciBpPVtudWxsLG51bGxdLG89QW8ucHVzaChpKS0xO3JldHVybiBpLmxlZnQ9ZSxpLnJpZ2h0PXQsciYmZ0EoaSxlLHQsciksbiYmZ0EoaSx0LGUsbiksWmFbZS5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksWmFbdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksaX1mdW5jdGlvbiBlUyhlLHQscil7dmFyIG49W3Qscl07cmV0dXJuIG4ubGVmdD1lLG59ZnVuY3Rpb24gZ0EoZSx0LHIsbil7IWVbMF0mJiFlWzFdPyhlWzBdPW4sZS5sZWZ0PXQsZS5yaWdodD1yKTplLmxlZnQ9PT1yP2VbMV09bjplWzBdPW59ZnVuY3Rpb24gTlJlKGUsdCxyLG4saSl7dmFyIG89ZVswXSxhPWVbMV0scz1vWzBdLGw9b1sxXSxjPWFbMF0sdT1hWzFdLGg9MCxmPTEscD1jLXMsZD11LWwsZztpZihnPXQtcywhKCFwJiZnPjApKXtpZihnLz1wLHA8MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWVsc2UgaWYocD4wKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9aWYoZz1uLXMsISghcCYmZzwwKSl7aWYoZy89cCxwPDApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1lbHNlIGlmKHA+MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWlmKGc9ci1sLCEoIWQmJmc+MCkpe2lmKGcvPWQsZDwwKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9ZWxzZSBpZihkPjApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1pZihnPWktbCwhKCFkJiZnPDApKXtpZihnLz1kLGQ8MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWVsc2UgaWYoZD4wKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9cmV0dXJuIShoPjApJiYhKGY8MSl8fChoPjAmJihlWzBdPVtzK2gqcCxsK2gqZF0pLGY8MSYmKGVbMV09W3MrZipwLGwrZipkXSkpLCEwfX19fX1mdW5jdGlvbiBEUmUoZSx0LHIsbixpKXt2YXIgbz1lWzFdO2lmKG8pcmV0dXJuITA7dmFyIGE9ZVswXSxzPWUubGVmdCxsPWUucmlnaHQsYz1zWzBdLHU9c1sxXSxoPWxbMF0sZj1sWzFdLHA9KGMraCkvMixkPSh1K2YpLzIsZyxfO2lmKGY9PT11KXtpZihwPHR8fHA+PW4pcmV0dXJuO2lmKGM+aCl7aWYoIWEpYT1bcCxyXTtlbHNlIGlmKGFbMV0+PWkpcmV0dXJuO289W3AsaV19ZWxzZXtpZighYSlhPVtwLGldO2Vsc2UgaWYoYVsxXTxyKXJldHVybjtvPVtwLHJdfX1lbHNlIGlmKGc9KGMtaCkvKGYtdSksXz1kLWcqcCxnPC0xfHxnPjEpaWYoYz5oKXtpZighYSlhPVsoci1fKS9nLHJdO2Vsc2UgaWYoYVsxXT49aSlyZXR1cm47bz1bKGktXykvZyxpXX1lbHNle2lmKCFhKWE9WyhpLV8pL2csaV07ZWxzZSBpZihhWzFdPHIpcmV0dXJuO289WyhyLV8pL2cscl19ZWxzZSBpZih1PGYpe2lmKCFhKWE9W3QsZyp0K19dO2Vsc2UgaWYoYVswXT49bilyZXR1cm47bz1bbixnKm4rX119ZWxzZXtpZighYSlhPVtuLGcqbitfXTtlbHNlIGlmKGFbMF08dClyZXR1cm47bz1bdCxnKnQrX119cmV0dXJuIGVbMF09YSxlWzFdPW8sITB9ZnVuY3Rpb24geUd0KGUsdCxyLG4pe2Zvcih2YXIgaT1Bby5sZW5ndGgsbztpLS07KSghRFJlKG89QW9baV0sZSx0LHIsbil8fCFOUmUobyxlLHQscixuKXx8IShNYXRoLmFicyhvWzBdWzBdLW9bMV1bMF0pPldyfHxNYXRoLmFicyhvWzBdWzFdLW9bMV1bMV0pPldyKSkmJmRlbGV0ZSBBb1tpXX12YXIgQ3o9TSgoKT0+e3JTKCl9KTtmdW5jdGlvbiB2R3QoZSl7cmV0dXJuIFphW2UuaW5kZXhdPXtzaXRlOmUsaGFsZmVkZ2VzOltdfX1mdW5jdGlvbiBPUmUoZSx0KXt2YXIgcj1lLnNpdGUsbj10LmxlZnQsaT10LnJpZ2h0O3JldHVybiByPT09aSYmKGk9bixuPXIpLGk/TWF0aC5hdGFuMihpWzFdLW5bMV0saVswXS1uWzBdKToocj09PW4/KG49dFsxXSxpPXRbMF0pOihuPXRbMF0saT10WzFdKSxNYXRoLmF0YW4yKG5bMF0taVswXSxpWzFdLW5bMV0pKX1mdW5jdGlvbiBmbnQoZSx0KXtyZXR1cm4gdFsrKHQubGVmdCE9PWUuc2l0ZSldfWZ1bmN0aW9uIHpSZShlLHQpe3JldHVybiB0WysodC5sZWZ0PT09ZS5zaXRlKV19ZnVuY3Rpb24geEd0KCl7Zm9yKHZhciBlPTAsdD1aYS5sZW5ndGgscixuLGksbztlPHQ7KytlKWlmKChyPVphW2VdKSYmKG89KG49ci5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKTtmb3IoaT0wO2k8bzsrK2kpYVtpXT1pLHNbaV09T1JlKHIsQW9bbltpXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gc1tjXS1zW2xdfSksaT0wO2k8bzsrK2kpc1tpXT1uW2FbaV1dO2ZvcihpPTA7aTxvOysraSluW2ldPXNbaV19fWZ1bmN0aW9uIGJHdChlLHQscixuKXt2YXIgaT1aYS5sZW5ndGgsbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8seT0hMDtmb3Iobz0wO288aTsrK28paWYoYT1aYVtvXSl7Zm9yKHM9YS5zaXRlLGM9YS5oYWxmZWRnZXMsbD1jLmxlbmd0aDtsLS07KUFvW2NbbF1dfHxjLnNwbGljZShsLDEpO2ZvcihsPTAsdT1jLmxlbmd0aDtsPHU7KWQ9elJlKGEsQW9bY1tsXV0pLGc9ZFswXSxfPWRbMV0saD1mbnQoYSxBb1tjWysrbCV1XV0pLGY9aFswXSxwPWhbMV0sKE1hdGguYWJzKGctZik+V3J8fE1hdGguYWJzKF8tcCk+V3IpJiYoYy5zcGxpY2UobCwwLEFvLnB1c2goZVMocyxkLE1hdGguYWJzKGctZSk8V3ImJm4tXz5Xcj9bZSxNYXRoLmFicyhmLWUpPFdyP3A6bl06TWF0aC5hYnMoXy1uKTxXciYmci1nPldyP1tNYXRoLmFicyhwLW4pPFdyP2Y6cixuXTpNYXRoLmFicyhnLXIpPFdyJiZfLXQ+V3I/W3IsTWF0aC5hYnMoZi1yKTxXcj9wOnRdOk1hdGguYWJzKF8tdCk8V3ImJmctZT5Xcj9bTWF0aC5hYnMocC10KTxXcj9mOmUsdF06bnVsbCkpLTEpLCsrdSk7dSYmKHk9ITEpfWlmKHkpe3ZhciB4LGIsUyxDPTEvMDtmb3Iobz0wLHk9bnVsbDtvPGk7KytvKShhPVphW29dKSYmKHM9YS5zaXRlLHg9c1swXS1lLGI9c1sxXS10LFM9eCp4K2IqYixTPEMmJihDPVMseT1hKSk7aWYoeSl7dmFyIFA9W2UsdF0saz1bZSxuXSxPPVtyLG5dLEQ9W3IsdF07eS5oYWxmZWRnZXMucHVzaChBby5wdXNoKGVTKHM9eS5zaXRlLFAsaykpLTEsQW8ucHVzaChlUyhzLGssTykpLTEsQW8ucHVzaChlUyhzLE8sRCkpLTEsQW8ucHVzaChlUyhzLEQsUCkpLTEpfX1mb3Iobz0wO288aTsrK28pKGE9WmFbb10pJiYoYS5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgWmFbb10pfXZhciBwbnQ9TSgoKT0+e0N6KCk7clMoKX0pO2Z1bmN0aW9uIEZSZSgpe1F3KHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBNMShlKXt2YXIgdD1lLlAscj1lLk47aWYoISghdHx8IXIpKXt2YXIgbj10LnNpdGUsaT1lLnNpdGUsbz1yLnNpdGU7aWYobiE9PW8pe3ZhciBhPWlbMF0scz1pWzFdLGw9blswXS1hLGM9blsxXS1zLHU9b1swXS1hLGg9b1sxXS1zLGY9MioobCpoLWMqdSk7aWYoIShmPj0tU0d0KSl7dmFyIHA9bCpsK2MqYyxkPXUqdStoKmgsZz0oaCpwLWMqZCkvZixfPShsKmQtdSpwKS9mLHk9d0d0LnBvcCgpfHxuZXcgRlJlO3kuYXJjPWUseS5zaXRlPWkseS54PWcrYSx5Lnk9KHkuY3k9XytzKStNYXRoLnNxcnQoZypnK18qXyksZS5jaXJjbGU9eTtmb3IodmFyIHg9bnVsbCxiPW5TLl87YjspaWYoeS55PGIueXx8eS55PT09Yi55JiZ5Lng8PWIueClpZihiLkwpYj1iLkw7ZWxzZXt4PWIuUDticmVha31lbHNlIGlmKGIuUiliPWIuUjtlbHNle3g9YjticmVha31uUy5pbnNlcnQoeCx5KSx4fHwoQXo9eSl9fX19ZnVuY3Rpb24gRTEoZSl7dmFyIHQ9ZS5jaXJjbGU7dCYmKHQuUHx8KEF6PXQuTiksblMucmVtb3ZlKHQpLHdHdC5wdXNoKHQpLFF3KHQpLGUuY2lyY2xlPW51bGwpfXZhciB3R3QsQXosZG50PU0oKCk9PntUeigpO3JTKCk7d0d0PVtdfSk7ZnVuY3Rpb24gQlJlKCl7UXcodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIE1HdChlKXt2YXIgdD1FR3QucG9wKCl8fG5ldyBCUmU7cmV0dXJuIHQuc2l0ZT1lLHR9ZnVuY3Rpb24gbW50KGUpe0UxKGUpLFQxLnJlbW92ZShlKSxFR3QucHVzaChlKSxRdyhlKX1mdW5jdGlvbiBUR3QoZSl7dmFyIHQ9ZS5jaXJjbGUscj10Lngsbj10LmN5LGk9W3Isbl0sbz1lLlAsYT1lLk4scz1bZV07bW50KGUpO2Zvcih2YXIgbD1vO2wuY2lyY2xlJiZNYXRoLmFicyhyLWwuY2lyY2xlLngpPFdyJiZNYXRoLmFicyhuLWwuY2lyY2xlLmN5KTxXcjspbz1sLlAscy51bnNoaWZ0KGwpLG1udChsKSxsPW87cy51bnNoaWZ0KGwpLEUxKGwpO2Zvcih2YXIgYz1hO2MuY2lyY2xlJiZNYXRoLmFicyhyLWMuY2lyY2xlLngpPFdyJiZNYXRoLmFicyhuLWMuY2lyY2xlLmN5KTxXcjspYT1jLk4scy5wdXNoKGMpLG1udChjKSxjPWE7cy5wdXNoKGMpLEUxKGMpO3ZhciB1PXMubGVuZ3RoLGg7Zm9yKGg9MTtoPHU7KytoKWM9c1toXSxsPXNbaC0xXSxnQShjLmVkZ2UsbC5zaXRlLGMuc2l0ZSxpKTtsPXNbMF0sYz1zW3UtMV0sYy5lZGdlPXRTKGwuc2l0ZSxjLnNpdGUsbnVsbCxpKSxNMShsKSxNMShjKX1mdW5jdGlvbiBDR3QoZSl7Zm9yKHZhciB0PWVbMF0scj1lWzFdLG4saSxvLGEscz1UMS5fO3M7KWlmKG89QUd0KHMsciktdCxvPldyKXM9cy5MO2Vsc2UgaWYoYT10LUhSZShzLHIpLGE+V3Ipe2lmKCFzLlIpe249czticmVha31zPXMuUn1lbHNle28+LVdyPyhuPXMuUCxpPXMpOmE+LVdyPyhuPXMsaT1zLk4pOm49aT1zO2JyZWFrfXZHdChlKTt2YXIgbD1NR3QoZSk7aWYoVDEuaW5zZXJ0KG4sbCksISghbiYmIWkpKXtpZihuPT09aSl7RTEobiksaT1NR3Qobi5zaXRlKSxUMS5pbnNlcnQobCxpKSxsLmVkZ2U9aS5lZGdlPXRTKG4uc2l0ZSxsLnNpdGUpLE0xKG4pLE0xKGkpO3JldHVybn1pZighaSl7bC5lZGdlPXRTKG4uc2l0ZSxsLnNpdGUpO3JldHVybn1FMShuKSxFMShpKTt2YXIgYz1uLnNpdGUsdT1jWzBdLGg9Y1sxXSxmPWVbMF0tdSxwPWVbMV0taCxkPWkuc2l0ZSxnPWRbMF0tdSxfPWRbMV0taCx5PTIqKGYqXy1wKmcpLHg9ZipmK3AqcCxiPWcqZytfKl8sUz1bKF8qeC1wKmIpL3krdSwoZipiLWcqeCkveStoXTtnQShpLmVkZ2UsYyxkLFMpLGwuZWRnZT10UyhjLGUsbnVsbCxTKSxpLmVkZ2U9dFMoZSxkLG51bGwsUyksTTEobiksTTEoaSl9fWZ1bmN0aW9uIEFHdChlLHQpe3ZhciByPWUuc2l0ZSxuPXJbMF0saT1yWzFdLG89aS10O2lmKCFvKXJldHVybiBuO3ZhciBhPWUuUDtpZighYSlyZXR1cm4tMS8wO3I9YS5zaXRlO3ZhciBzPXJbMF0sbD1yWzFdLGM9bC10O2lmKCFjKXJldHVybiBzO3ZhciB1PXMtbixoPTEvby0xL2MsZj11L2M7cmV0dXJuIGg/KC1mK01hdGguc3FydChmKmYtMipoKih1KnUvKC0yKmMpLWwrYy8yK2ktby8yKSkpL2grbjoobitzKS8yfWZ1bmN0aW9uIEhSZShlLHQpe3ZhciByPWUuTjtpZihyKXJldHVybiBBR3Qocix0KTt2YXIgbj1lLnNpdGU7cmV0dXJuIG5bMV09PT10P25bMF06MS8wfXZhciBFR3QsUEd0PU0oKCk9PntUeigpO3BudCgpO2RudCgpO0N6KCk7clMoKTtFR3Q9W119KTtmdW5jdGlvbiBWUmUoZSx0LHIpe3JldHVybihlWzBdLXJbMF0pKih0WzFdLWVbMV0pLShlWzBdLXRbMF0pKihyWzFdLWVbMV0pfWZ1bmN0aW9uIFVSZShlLHQpe3JldHVybiB0WzFdLWVbMV18fHRbMF0tZVswXX1mdW5jdGlvbiBfQShlLHQpe3ZhciByPWUuc29ydChVUmUpLnBvcCgpLG4saSxvO2ZvcihBbz1bXSxaYT1uZXcgQXJyYXkoZS5sZW5ndGgpLFQxPW5ldyBobnQsblM9bmV3IGhudDs7KWlmKG89QXosciYmKCFvfHxyWzFdPG8ueXx8clsxXT09PW8ueSYmclswXTxvLngpKShyWzBdIT09bnx8clsxXSE9PWkpJiYoQ0d0KHIpLG49clswXSxpPXJbMV0pLHI9ZS5wb3AoKTtlbHNlIGlmKG8pVEd0KG8uYXJjKTtlbHNlIGJyZWFrO2lmKHhHdCgpLHQpe3ZhciBhPSt0WzBdWzBdLHM9K3RbMF1bMV0sbD0rdFsxXVswXSxjPSt0WzFdWzFdO3lHdChhLHMsbCxjKSxiR3QoYSxzLGwsYyl9dGhpcy5lZGdlcz1Bbyx0aGlzLmNlbGxzPVphLFQxPW5TPUFvPVphPW51bGx9dmFyIFdyLFNHdCxUMSxaYSxuUyxBbyxyUz1NKCgpPT57UEd0KCk7cG50KCk7ZG50KCk7Q3ooKTtUeigpO1dyPTFlLTYsU0d0PTFlLTEyO19BLnByb3RvdHlwZT17Y29uc3RydWN0b3I6X0EscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGZudCh0LGVbbl0pfSk7cmV0dXJuIHIuZGF0YT10LnNpdGUuZGF0YSxyfSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7aWYoISEocz0obz1yLmhhbGZlZGdlcykubGVuZ3RoKSlmb3IodmFyIGk9ci5zaXRlLG8sYT0tMSxzLGwsYz10W29bcy0xXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0OysrYTxzOylsPXUsYz10W29bYV1dLHU9Yy5sZWZ0PT09aT9jLnJpZ2h0OmMubGVmdCxsJiZ1JiZuPGwuaW5kZXgmJm48dS5pbmRleCYmVlJlKGksbCx1KTwwJiZlLnB1c2goW2kuZGF0YSxsLmRhdGEsdS5kYXRhXSl9KSxlfSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5yaWdodH0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOmUubGVmdC5kYXRhLHRhcmdldDplLnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj10aGlzLGksbz1uLl9mb3VuZHx8MCxhPW4uY2VsbHMubGVuZ3RoLHM7IShzPW4uY2VsbHNbb10pOylpZigrK28+PWEpcmV0dXJuIG51bGw7dmFyIGw9ZS1zLnNpdGVbMF0sYz10LXMuc2l0ZVsxXSx1PWwqbCtjKmM7ZG8gcz1uLmNlbGxzW2k9b10sbz1udWxsLHMuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oaCl7dmFyIGY9bi5lZGdlc1toXSxwPWYubGVmdDtpZighKChwPT09cy5zaXRlfHwhcCkmJiEocD1mLnJpZ2h0KSkpe3ZhciBkPWUtcFswXSxnPXQtcFsxXSxfPWQqZCtnKmc7Xzx1JiYodT1fLG89cC5pbmRleCl9fSk7d2hpbGUobyE9PW51bGwpO3JldHVybiBuLl9mb3VuZD1pLHI9PW51bGx8fHU8PXIqcj9zLnNpdGU6bnVsbH19fSk7ZnVuY3Rpb24gSUd0KCl7dmFyIGU9ZEd0LHQ9bUd0LHI9bnVsbDtmdW5jdGlvbiBuKGkpe3JldHVybiBuZXcgX0EoaS5tYXAoZnVuY3Rpb24obyxhKXt2YXIgcz1bTWF0aC5yb3VuZChlKG8sYSxpKS9XcikqV3IsTWF0aC5yb3VuZCh0KG8sYSxpKS9XcikqV3JdO3JldHVybiBzLmluZGV4PWEscy5kYXRhPW8sc30pLHIpfXJldHVybiBuLnBvbHlnb25zPWZ1bmN0aW9uKGkpe3JldHVybiBuKGkpLnBvbHlnb25zKCl9LG4ubGlua3M9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkubGlua3MoKX0sbi50cmlhbmdsZXM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkudHJpYW5nbGVzKCl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmNudCgraSksbik6ZX0sbi55PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6Y250KCtpKSxuKTp0fSxuLmV4dGVudD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6W1sraVswXVswXSwraVswXVsxXV0sWytpWzFdWzBdLCtpWzFdWzFdXV0sbik6ciYmW1tyWzBdWzBdLHJbMF1bMV1dLFtyWzFdWzBdLHJbMV1bMV1dXX0sbi5zaXplPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9PW51bGw/bnVsbDpbWzAsMF0sWytpWzBdLCtpWzFdXV0sbik6ciYmW3JbMV1bMF0tclswXVswXSxyWzFdWzFdLXJbMF1bMV1dfSxufXZhciBMR3Q9TSgoKT0+e3BHdCgpO2dHdCgpO3JTKCl9KTt2YXIga0d0PU0oKCk9PntMR3QoKX0pO2Z1bmN0aW9uIE5HdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBQeihyKX1mdW5jdGlvbiBQeihlKXt0aGlzLl89ZX1mdW5jdGlvbiBHUmUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBXUmUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBSR3QoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPXFSZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIHFSZSx5QSxER3Q9TSgoKT0+e3FSZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtQei5wcm90b3R5cGU9Tkd0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6UHosb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1HUmUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1XUmUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPVJHdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPVJHdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgUHooZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O3lBPU5HdH0pO3ZhciBnbnQ9TSgoKT0+e0RHdCgpfSk7dmFyIEl6LF9udCx5bnQ9TSgoKT0+e0l6PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixfbnQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOkl6LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBoZChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxfbnQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOl9udFt0XSxsb2NhbDplfTplfXZhciBMej1NKCgpPT57eW50KCl9KTtmdW5jdGlvbiBZUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1JeiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09SXo/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIGpSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBreihlKXt2YXIgdD1oZChlKTtyZXR1cm4odC5sb2NhbD9qUmU6WVJlKSh0KX12YXIgdm50PU0oKCk9PntMeigpO3ludCgpfSk7ZnVuY3Rpb24gWFJlKCl7fWZ1bmN0aW9uIEMxKGUpe3JldHVybiBlPT1udWxsP1hSZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoZSl9fXZhciBSej1NKCgpPT57fSk7ZnVuY3Rpb24gT0d0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1DMShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IGdpKG4sdGhpcy5fcGFyZW50cyl9dmFyIHpHdD1NKCgpPT57T3UoKTtSeigpfSk7ZnVuY3Rpb24gJFJlKCl7cmV0dXJuW119ZnVuY3Rpb24gdkEoZSl7cmV0dXJuIGU9PW51bGw/JFJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19dmFyIHhudD1NKCgpPT57fSk7ZnVuY3Rpb24gRkd0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT12QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgZ2kobixpKX12YXIgQkd0PU0oKCk9PntPdSgpO3hudCgpfSk7ZnVuY3Rpb24geEEoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIGJudD1NKCgpPT57fSk7ZnVuY3Rpb24gSEd0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT14QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgZ2kobix0aGlzLl9wYXJlbnRzKX12YXIgVkd0PU0oKCk9PntPdSgpO2JudCgpfSk7ZnVuY3Rpb24gTnooZSl7cmV0dXJuIG5ldyBBcnJheShlLmxlbmd0aCl9dmFyIHdudD1NKCgpPT57fSk7ZnVuY3Rpb24gVUd0KCl7cmV0dXJuIG5ldyBnaSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChOeiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gYkEoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIFNudD1NKCgpPT57d250KCk7T3UoKTtiQS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmJBLGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGUpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChlKX19fSk7ZnVuY3Rpb24gcUd0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgR0d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBLUmUoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IGJBKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiBaUmUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD1XR3QrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD1XR3QrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgYkEoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBZR3QoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P1pSZTpLUmUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1xR3QoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IGdpKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX12YXIgV0d0LGpHdD1NKCgpPT57T3UoKTtTbnQoKTtHR3QoKTtXR3Q9IiQifSk7ZnVuY3Rpb24gWEd0KCl7cmV0dXJuIG5ldyBnaSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKE56KSx0aGlzLl9wYXJlbnRzKX12YXIgJEd0PU0oKCk9Pnt3bnQoKTtPdSgpfSk7ZnVuY3Rpb24gS0d0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBaR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIEpHdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgZ2koYSx0aGlzLl9wYXJlbnRzKX12YXIgUUd0PU0oKCk9PntPdSgpfSk7ZnVuY3Rpb24gdFd0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgZVd0PU0oKCk9Pnt9KTtmdW5jdGlvbiByV3QoZSl7ZXx8KGU9SlJlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IGdpKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBKUmUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIG5XdD1NKCgpPT57T3UoKX0pO2Z1bmN0aW9uIGlXdCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgb1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBhV3QoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgc1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsV3QoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBjV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHVXdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIGhXdD1NKCgpPT57fSk7ZnVuY3Rpb24gZld0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBwV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGRXdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIG1XdD1NKCgpPT57fSk7ZnVuY3Rpb24gUVJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiB0TmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBlTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiByTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gbk5lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBpTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gZ1d0KGUsdCl7dmFyIHI9aGQoZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP3ROZTpRUmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9pTmU6bk5lOnIubG9jYWw/ck5lOmVOZSkocix0KSl9dmFyIF9XdD1NKCgpPT57THooKX0pO2Z1bmN0aW9uIER6KGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgTW50PU0oKCk9Pnt9KTtmdW5jdGlvbiBvTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gYU5lKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdCxyKX19ZnVuY3Rpb24gc05lKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLG4scil9fWZ1bmN0aW9uIHlXdChlLHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/b05lOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3NOZTphTmUpKGUsdCxyPT1udWxsPyIiOnIpKTpVZyh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBVZyhlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fER6KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciBFbnQ9TSgoKT0+e01udCgpfSk7ZnVuY3Rpb24gbE5lKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBjTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIHVOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiB2V3QoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9sTmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dU5lOmNOZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIHhXdD1NKCgpPT57fSk7ZnVuY3Rpb24gYld0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBUbnQoZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgd1d0KGUpfWZ1bmN0aW9uIHdXdChlKXt0aGlzLl9ub2RlPWUsdGhpcy5fbmFtZXM9Yld0KGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gU1d0KGUsdCl7Zm9yKHZhciByPVRudChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIE1XdChlLHQpe2Zvcih2YXIgcj1UbnQoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBoTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7U1d0KHRoaXMsZSl9fWZ1bmN0aW9uIGZOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtNV3QodGhpcyxlKX19ZnVuY3Rpb24gcE5lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP1NXdDpNV3QpKHRoaXMsZSl9fWZ1bmN0aW9uIEVXdChlLHQpe3ZhciByPWJXdChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1UbnQodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/cE5lOnQ/aE5lOmZOZSkocix0KSl9dmFyIFRXdD1NKCgpPT57d1d0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dDwwJiYodGhpcy5fbmFtZXMucHVzaChlKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoZSk+PTB9fX0pO2Z1bmN0aW9uIGROZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gbU5lKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gZ05lKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBDV3QoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/ZE5lOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9nTmU6bU5lKShlKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIEFXdD1NKCgpPT57fSk7ZnVuY3Rpb24gX05lKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24geU5lKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWV9fWZ1bmN0aW9uIHZOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFBXdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9fTmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP3ZOZTp5TmUpKGUpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9dmFyIElXdD1NKCgpPT57fSk7ZnVuY3Rpb24geE5lKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIExXdCgpe3JldHVybiB0aGlzLmVhY2goeE5lKX12YXIga1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBiTmUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBSV3QoKXtyZXR1cm4gdGhpcy5lYWNoKGJOZSl9dmFyIE5XdD1NKCgpPT57fSk7ZnVuY3Rpb24gRFd0KGUpe3ZhciB0PXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6a3ooZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIE9XdD1NKCgpPT57dm50KCl9KTtmdW5jdGlvbiB3TmUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB6V3QoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOmt6KGUpLG49dD09bnVsbD93TmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpDMSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIEZXdD1NKCgpPT57dm50KCk7UnooKX0pO2Z1bmN0aW9uIFNOZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIEJXdCgpe3JldHVybiB0aGlzLmVhY2goU05lKX12YXIgSFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBNTmUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIEVOZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gVld0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP0VOZTpNTmUpfXZhciBVV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHFXdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIEdXdD1NKCgpPT57fSk7ZnVuY3Rpb24gVE5lKGUsdCxyKXtyZXR1cm4gZT1qV3QoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gald0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9WXI7WXI9bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7WXI9aX19fWZ1bmN0aW9uIENOZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gQU5lKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIFBOZShlLHQscil7dmFyIG49WVd0Lmhhc093blByb3BlcnR5KGUudHlwZSk/VE5lOmpXdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBYV3QoZSx0LHIpe3ZhciBuPUNOZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/UE5lOkFOZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBDbnQoZSx0LHIsbil7dmFyIGk9WXI7ZS5zb3VyY2VFdmVudD1ZcixZcj1lO3RyeXtyZXR1cm4gdC5hcHBseShyLG4pfWZpbmFsbHl7WXI9aX19dmFyIFlXdCxZcixXV3QsT3o9TSgoKT0+e1lXdD17fSxZcj1udWxsO3R5cGVvZiBkb2N1bWVudCE9InVuZGVmaW5lZCImJihXV3Q9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJvbm1vdXNlZW50ZXIiaW4gV1d0fHwoWVd0PXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKX0pO2Z1bmN0aW9uICRXdChlLHQscil7dmFyIG49RHooZSksaT1uLkN1c3RvbUV2ZW50O3R5cGVvZiBpPT0iZnVuY3Rpb24iP2k9bmV3IGkodCxyKTooaT1uLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLHI/KGkuaW5pdEV2ZW50KHQsci5idWJibGVzLHIuY2FuY2VsYWJsZSksaS5kZXRhaWw9ci5kZXRhaWwpOmkuaW5pdEV2ZW50KHQsITEsITEpKSxlLmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gSU5lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuICRXdCh0aGlzLGUsdCl9fWZ1bmN0aW9uIExOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiAkV3QodGhpcyxlLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gS1d0KGUsdCl7cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/TE5lOklOZSkoZSx0KSl9dmFyIFpXdD1NKCgpPT57TW50KCl9KTtmdW5jdGlvbiBnaShlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBKV3QoKXtyZXR1cm4gbmV3IGdpKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sQW50KX12YXIgQW50LGZkLE91PU0oKCk9Pnt6R3QoKTtCR3QoKTtWR3QoKTtqR3QoKTtTbnQoKTskR3QoKTtaR3QoKTtRR3QoKTtlV3QoKTtuV3QoKTtvV3QoKTtzV3QoKTtjV3QoKTtoV3QoKTtwV3QoKTttV3QoKTtfV3QoKTtFbnQoKTt4V3QoKTtUV3QoKTtBV3QoKTtJV3QoKTtrV3QoKTtOV3QoKTtPV3QoKTtGV3QoKTtIV3QoKTtVV3QoKTtHV3QoKTtPeigpO1pXdCgpO0FudD1bbnVsbF07Z2kucHJvdG90eXBlPUpXdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmdpLHNlbGVjdDpPR3Qsc2VsZWN0QWxsOkZHdCxmaWx0ZXI6SEd0LGRhdGE6WUd0LGVudGVyOlVHdCxleGl0OlhHdCxqb2luOktHdCxtZXJnZTpKR3Qsb3JkZXI6dFd0LHNvcnQ6cld0LGNhbGw6aVd0LG5vZGVzOmFXdCxub2RlOmxXdCxzaXplOnVXdCxlbXB0eTpmV3QsZWFjaDpkV3QsYXR0cjpnV3Qsc3R5bGU6eVd0LHByb3BlcnR5OnZXdCxjbGFzc2VkOkVXdCx0ZXh0OkNXdCxodG1sOlBXdCxyYWlzZTpMV3QsbG93ZXI6Uld0LGFwcGVuZDpEV3QsaW5zZXJ0OnpXdCxyZW1vdmU6Qld0LGNsb25lOlZXdCxkYXR1bTpxV3Qsb246WFd0LGRpc3BhdGNoOktXdH07ZmQ9Sld0fSk7ZnVuY3Rpb24gcGQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgZ2koW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBnaShbW2VdXSxBbnQpfXZhciBRV3Q9TSgoKT0+e091KCl9KTtmdW5jdGlvbiB6eigpe2Zvcih2YXIgZT1Zcix0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfXZhciBQbnQ9TSgoKT0+e096KCl9KTtmdW5jdGlvbiBGeihlLHQpe3ZhciByPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBuPXIuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PXQuY2xpZW50WCxuLnk9dC5jbGllbnRZLG49bi5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtuLngsbi55XX12YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktaS50b3AtZS5jbGllbnRUb3BdfXZhciBJbnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGlTKGUpe3ZhciB0PXp6KCk7cmV0dXJuIHQuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pLEZ6KGUsdCl9dmFyIHRZdD1NKCgpPT57UG50KCk7SW50KCl9KTtmdW5jdGlvbiBCeihlLHQscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9enooKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBuPTAsaT10P3QubGVuZ3RoOjAsbztuPGk7KytuKWlmKChvPXRbbl0pLmlkZW50aWZpZXI9PT1yKXJldHVybiBGeihlLG8pO3JldHVybiBudWxsfXZhciBlWXQ9TSgoKT0+e1BudCgpO0ludCgpfSk7dmFyIElzPU0oKCk9PntibnQoKTt0WXQoKTtMeigpO1FXdCgpO091KCk7UnooKTt4bnQoKTtFbnQoKTtlWXQoKTtPeigpfSk7ZnVuY3Rpb24gSHooKXtZci5wcmV2ZW50RGVmYXVsdCgpLFlyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciByWXQ9TSgoKT0+e0lzKCl9KTtmdW5jdGlvbiBMbnQoZSl7dmFyIHQ9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscj1wZChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLEh6LCEwKTsib25zZWxlY3RzdGFydCJpbiB0P3Iub24oInNlbGVjdHN0YXJ0LmRyYWciLEh6LCEwKToodC5fX25vc2VsZWN0PXQuc3R5bGUuTW96VXNlclNlbGVjdCx0LnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBrbnQoZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPXBkKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLEh6LCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfXZhciBuWXQ9TSgoKT0+e0lzKCk7cll0KCl9KTt2YXIgaVl0PU0oKCk9PntuWXQoKX0pO2Z1bmN0aW9uIFZ6KGUsdCxyKXtlLnByb3RvdHlwZT10LnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBSbnQoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIG9ZdD1NKCgpPT57fSk7ZnVuY3Rpb24gTUEoKXt9ZnVuY3Rpb24gc1l0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gQk5lKCl7cmV0dXJuIHBZdCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBsWXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBxZyhlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1rTmUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9jWXQodCk6cj09PTM/bmV3IGdsKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9Veih0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9Veih0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PVJOZS5leGVjKGUpKT9uZXcgZ2wodFsxXSx0WzJdLHRbM10sMSk6KHQ9Tk5lLmV4ZWMoZSkpP25ldyBnbCh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1ETmUuZXhlYyhlKSk/VXoodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9T05lLmV4ZWMoZSkpP1V6KHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PXpOZS5leGVjKGUpKT9mWXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1GTmUuZXhlYyhlKSk/Zll0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6YVl0Lmhhc093blByb3BlcnR5KGUpP2NZdChhWXRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBnbChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIGNZdChlKXtyZXR1cm4gbmV3IGdsKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBVeihlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IGdsKGUsdCxyLG4pfWZ1bmN0aW9uIEhOZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIE1BfHwoZT1xZyhlKSksZT8oZT1lLnJnYigpLG5ldyBnbChlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgZ2x9ZnVuY3Rpb24gYVMoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0hOZShlKTpuZXcgZ2woZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGdsKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiB1WXQoKXtyZXR1cm4iIyIrTm50KHRoaXMucikrTm50KHRoaXMuZykrTm50KHRoaXMuYil9ZnVuY3Rpb24gaFl0KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIE5udChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBmWXQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBDZihlLHQscixuKX1mdW5jdGlvbiBwWXQoZSl7aWYoZSBpbnN0YW5jZW9mIENmKXJldHVybiBuZXcgQ2YoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgTUF8fChlPXFnKGUpKSwhZSlyZXR1cm4gbmV3IENmO2lmKGUgaW5zdGFuY2VvZiBDZilyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBDZihhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIGRZdChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/cFl0KGUpOm5ldyBDZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gQ2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIERudChlLHQscil7cmV0dXJuKGU8NjA/dCsoci10KSplLzYwOmU8MTgwP3I6ZTwyNDA/dCsoci10KSooMjQwLWUpLzYwOnQpKjI1NX12YXIgd0EscXosb1MsU0EsQWYsa05lLFJOZSxOTmUsRE5lLE9OZSx6TmUsRk5lLGFZdCxtWXQ9TSgoKT0+e29ZdCgpO3dBPS43LHF6PTEvd0Esb1M9IlxccyooWystXT9cXGQrKVxccyoiLFNBPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLEFmPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixrTmU9L14jKFswLTlhLWZdezMsOH0pJC8sUk5lPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tvUyxvUyxvU10rIlxcKSQiKSxOTmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW0FmLEFmLEFmXSsiXFwpJCIpLEROZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW29TLG9TLG9TLFNBXSsiXFwpJCIpLE9OZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW0FmLEFmLEFmLFNBXSsiXFwpJCIpLHpOZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbU0EsQWYsQWZdKyJcXCkkIiksRk5lPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbU0EsQWYsQWYsU0FdKyJcXCkkIiksYVl0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O1Z6KE1BLHFnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OnNZdCxmb3JtYXRIZXg6c1l0LGZvcm1hdEhzbDpCTmUsZm9ybWF0UmdiOmxZdCx0b1N0cmluZzpsWXR9KTtWeihnbCxhUyxSbnQoTUEse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/cXo6TWF0aC5wb3cocXosZSksbmV3IGdsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3dBOk1hdGgucG93KHdBLGUpLG5ldyBnbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OnVZdCxmb3JtYXRIZXg6dVl0LGZvcm1hdFJnYjpoWXQsdG9TdHJpbmc6aFl0fSkpO1Z6KENmLGRZdCxSbnQoTUEse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/cXo6TWF0aC5wb3cocXosZSksbmV3IENmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/d0E6TWF0aC5wb3cod0EsZSksbmV3IENmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgZ2woRG50KGU+PTI0MD9lLTI0MDplKzEyMCxpLG4pLERudChlLGksbiksRG50KGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpfSk7dmFyIE9udD1NKCgpPT57bVl0KCl9KTtmdW5jdGlvbiB6bnQoZSx0LHIsbixpKXt2YXIgbz1lKmUsYT1vKmU7cmV0dXJuKCgxLTMqZSszKm8tYSkqdCsoNC02Km8rMyphKSpyKygxKzMqZSszKm8tMyphKSpuK2EqaSkvNn1mdW5jdGlvbiBnWXQoZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLHQtMSk6TWF0aC5mbG9vcihyKnQpLGk9ZVtuXSxvPWVbbisxXSxhPW4+MD9lW24tMV06MippLW8scz1uPHQtMT9lW24rMl06MipvLWk7cmV0dXJuIHpudCgoci1uL3QpKnQsYSxpLG8scyl9fXZhciBGbnQ9TSgoKT0+e30pO2Z1bmN0aW9uIF9ZdChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49TWF0aC5mbG9vcigoKHIlPTEpPDA/KytyOnIpKnQpLGk9ZVsobit0LTEpJXRdLG89ZVtuJXRdLGE9ZVsobisxKSV0XSxzPWVbKG4rMikldF07cmV0dXJuIHpudCgoci1uL3QpKnQsaSxvLGEscyl9fXZhciB5WXQ9TSgoKT0+e0ZudCgpfSk7ZnVuY3Rpb24gQm50KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgdll0PU0oKCk9Pnt9KTtmdW5jdGlvbiBWTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBVTmUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiB4WXQoZSl7cmV0dXJuKGU9K2UpPT0xP0d6OmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9VTmUodCxyLGUpOkJudChpc05hTih0KT9yOnQpfX1mdW5jdGlvbiBHeihlLHQpe3ZhciByPXQtZTtyZXR1cm4gcj9WTmUoZSxyKTpCbnQoaXNOYU4oZSk/dDplKX12YXIgYll0PU0oKCk9Pnt2WXQoKX0pO2Z1bmN0aW9uIHdZdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPWFTKHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBXeixxTmUsR05lLFNZdD1NKCgpPT57T250KCk7Rm50KCk7eVl0KCk7Yll0KCk7V3o9ZnVuY3Rpb24gZSh0KXt2YXIgcj14WXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9YVMoaSkpLnIsKG89YVMobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1HeihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7cU5lPXdZdChnWXQpLEdOZT13WXQoX1l0KX0pO2Z1bmN0aW9uIEljKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fXZhciBZej1NKCgpPT57fSk7ZnVuY3Rpb24gV05lKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBZTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBVbnQoZSx0KXt2YXIgcj1WbnQubGFzdEluZGV4PUhudC5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1WbnQuZXhlYyhlKSkmJihpPUhudC5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6SWMobixpKX0pKSxyPUhudC5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/WU5lKGxbMF0ueCk6V05lKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBWbnQsSG50LE1ZdD1NKCgpPT57WXooKTtWbnQ9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLEhudD1uZXcgUmVnRXhwKFZudC5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIHFudChlLHQscixuLGksbyl7dmFyIGEscyxsO3JldHVybihhPU1hdGguc3FydChlKmUrdCp0KSkmJihlLz1hLHQvPWEpLChsPWUqcit0Km4pJiYoci09ZSpsLG4tPXQqbCksKHM9TWF0aC5zcXJ0KHIqcituKm4pKSYmKHIvPXMsbi89cyxsLz1zKSxlKm48dCpyJiYoZT0tZSx0PS10LGw9LWwsYT0tYSkse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIodCxlKSpFWXQsc2tld1g6TWF0aC5hdGFuKGwpKkVZdCxzY2FsZVg6YSxzY2FsZVk6c319dmFyIEVZdCxqeixUWXQ9TSgoKT0+e0VZdD0xODAvTWF0aC5QSSxqej17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfX0pO2Z1bmN0aW9uIEFZdChlKXtyZXR1cm4gZT09PSJub25lIj9qejooRUF8fChFQT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxHbnQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LENZdD1kb2N1bWVudC5kZWZhdWx0VmlldyksRUEuc3R5bGUudHJhbnNmb3JtPWUsZT1DWXQuZ2V0Q29tcHV0ZWRTdHlsZShHbnQuYXBwZW5kQ2hpbGQoRUEpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLEdudC5yZW1vdmVDaGlsZChFQSksZT1lLnNsaWNlKDcsLTEpLnNwbGl0KCIsIikscW50KCtlWzBdLCtlWzFdLCtlWzJdLCtlWzNdLCtlWzRdLCtlWzVdKSl9ZnVuY3Rpb24gUFl0KGUpe3JldHVybiBlPT1udWxsP2p6OihYenx8KFh6PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLFh6LnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixlKSwoZT1Yei50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT8oZT1lLm1hdHJpeCxxbnQoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpqeil9dmFyIEVBLEdudCxDWXQsWHosSVl0PU0oKCk9PntUWXQoKX0pO2Z1bmN0aW9uIExZdChlLHQscixuKXtmdW5jdGlvbiBpKGMpe3JldHVybiBjLmxlbmd0aD9jLnBvcCgpKyIgIjoiIn1mdW5jdGlvbiBvKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaCgidHJhbnNsYXRlKCIsbnVsbCx0LG51bGwscik7ZC5wdXNoKHtpOmctNCx4OkljKGMsaCl9LHtpOmctMix4OkljKHUsZil9KX1lbHNlKGh8fGYpJiZwLnB1c2goInRyYW5zbGF0ZSgiK2grdCtmK3IpfWZ1bmN0aW9uIGEoYyx1LGgsZil7YyE9PXU/KGMtdT4xODA/dSs9MzYwOnUtYz4xODAmJihjKz0zNjApLGYucHVzaCh7aTpoLnB1c2goaShoKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6SWMoYyx1KX0pKTp1JiZoLnB1c2goaShoKSsicm90YXRlKCIrdStuKX1mdW5jdGlvbiBzKGMsdSxoLGYpe2MhPT11P2YucHVzaCh7aTpoLnB1c2goaShoKSsic2tld1goIixudWxsLG4pLTIseDpJYyhjLHUpfSk6dSYmaC5wdXNoKGkoaCkrInNrZXdYKCIrdStuKX1mdW5jdGlvbiBsKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaChpKHApKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtkLnB1c2goe2k6Zy00LHg6SWMoYyxoKX0se2k6Zy0yLHg6SWModSxmKX0pfWVsc2UoaCE9PTF8fGYhPT0xKSYmcC5wdXNoKGkocCkrInNjYWxlKCIraCsiLCIrZisiKSIpfXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBoPVtdLGY9W107cmV0dXJuIGM9ZShjKSx1PWUodSksbyhjLnRyYW5zbGF0ZVgsYy50cmFuc2xhdGVZLHUudHJhbnNsYXRlWCx1LnRyYW5zbGF0ZVksaCxmKSxhKGMucm90YXRlLHUucm90YXRlLGgsZikscyhjLnNrZXdYLHUuc2tld1gsaCxmKSxsKGMuc2NhbGVYLGMuc2NhbGVZLHUuc2NhbGVYLHUuc2NhbGVZLGgsZiksYz11PW51bGwsZnVuY3Rpb24ocCl7Zm9yKHZhciBkPS0xLGc9Zi5sZW5ndGgsXzsrK2Q8ZzspaFsoXz1mW2RdKS5pXT1fLngocCk7cmV0dXJuIGguam9pbigiIil9fX12YXIgV250LFludCxrWXQ9TSgoKT0+e1l6KCk7SVl0KCk7V250PUxZdChBWXQsInB4LCAiLCJweCkiLCJkZWcpIiksWW50PUxZdChQWXQsIiwgIiwiKSIsIikiKX0pO2Z1bmN0aW9uIE5ZdChlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpKzEvZSkvMn1mdW5jdGlvbiBYTmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKGUpKS0xL2UpLzJ9ZnVuY3Rpb24gJE5lKGUpe3JldHVybigoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKX1mdW5jdGlvbiBYbnQoZSx0KXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sbz10WzBdLGE9dFsxXSxzPXRbMl0sbD1vLXIsYz1hLW4sdT1sKmwrYypjLGgsZjtpZih1PGpOZSlmPU1hdGgubG9nKHMvaSkvVEEsaD1mdW5jdGlvbih4KXtyZXR1cm5bcit4Kmwsbit4KmMsaSpNYXRoLmV4cChUQSp4KmYpXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQodSksZD0ocypzLWkqaStSWXQqdSkvKDIqaSpqbnQqcCksZz0ocypzLWkqaS1SWXQqdSkvKDIqcypqbnQqcCksXz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtmPSh5LV8pL1RBLGg9ZnVuY3Rpb24oeCl7dmFyIGI9eCpmLFM9Tll0KF8pLEM9aS8oam50KnApKihTKiROZShUQSpiK18pLVhOZShfKSk7cmV0dXJuW3IrQypsLG4rQypjLGkqUy9OWXQoVEEqYitfKV19fXJldHVybiBoLmR1cmF0aW9uPWYqMWUzLGh9dmFyIFRBLGpudCxSWXQsak5lLERZdD1NKCgpPT57VEE9TWF0aC5TUVJUMixqbnQ9MixSWXQ9NCxqTmU9MWUtMTJ9KTt2YXIgQ0E9TSgoKT0+e1l6KCk7TVl0KCk7a1l0KCk7RFl0KCk7U1l0KCl9KTtmdW5jdGlvbiBsUygpe3JldHVybiBBMXx8KEZZdChLTmUpLEExPUxBLm5vdygpK1p6KX1mdW5jdGlvbiBLTmUoKXtBMT0wfWZ1bmN0aW9uIGtBKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBKeihlLHQscil7dmFyIG49bmV3IGtBO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gQll0KCl7bFMoKSwrK3NTO2Zvcih2YXIgZT0keix0O2U7KSh0PUExLWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1zU31mdW5jdGlvbiBPWXQoKXtBMT0oS3o9TEEubm93KCkpK1p6LHNTPVBBPTA7dHJ5e0JZdCgpfWZpbmFsbHl7c1M9MCxKTmUoKSxBMT0wfX1mdW5jdGlvbiBaTmUoKXt2YXIgZT1MQS5ub3coKSx0PWUtS3o7dD56WXQmJihaei09dCxLej1lKX1mdW5jdGlvbiBKTmUoKXtmb3IodmFyIGUsdD0keixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjokej1yKTtJQT1lLCRudChuKX1mdW5jdGlvbiAkbnQoZSl7aWYoIXNTKXtQQSYmKFBBPWNsZWFyVGltZW91dChQQSkpO3ZhciB0PWUtQTE7dD4yND8oZTwxLzAmJihQQT1zZXRUaW1lb3V0KE9ZdCxlLUxBLm5vdygpLVp6KSksQUEmJihBQT1jbGVhckludGVydmFsKEFBKSkpOihBQXx8KEt6PUxBLm5vdygpLEFBPXNldEludGVydmFsKFpOZSx6WXQpKSxzUz0xLEZZdChPWXQpKX19dmFyIHNTLFBBLEFBLHpZdCwkeixJQSxLeixBMSxaeixMQSxGWXQsS250PU0oKCk9PntzUz0wLFBBPTAsQUE9MCx6WXQ9MWUzLEt6PTAsQTE9MCxaej0wLExBPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLEZZdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTtrQS5wcm90b3R5cGU9SnoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjprQSxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/bFMoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJklBIT09dGhpcyYmKElBP0lBLl9uZXh0PXRoaXM6JHo9dGhpcyxJQT10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLCRudCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCwkbnQoKSl9fX0pO2Z1bmN0aW9uIFF6KGUsdCxyKXt2YXIgbj1uZXcga0E7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgSFl0PU0oKCk9PntLbnQoKX0pO3ZhciBabnQ9TSgoKT0+e0tudCgpO0hZdCgpfSk7ZnVuY3Rpb24gR2coZSx0LHIsbixpLG8pe3ZhciBhPWUuX190cmFuc2l0aW9uO2lmKCFhKWUuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYociBpbiBhKXJldHVybjtlRGUoZSxyLHtuYW1lOnQsaW5kZXg6bixncm91cDppLG9uOlFOZSx0d2Vlbjp0RGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6VVl0fSl9ZnVuY3Rpb24gTkEoZSx0KXt2YXIgcj1vbyhlLHQpO2lmKHIuc3RhdGU+VVl0KXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gSmEoZSx0KXt2YXIgcj1vbyhlLHQpO2lmKHIuc3RhdGU+dEYpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIHJ9ZnVuY3Rpb24gb28oZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbjtpZighcnx8IShyPXJbdF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gcn1mdW5jdGlvbiBlRGUoZSx0LHIpe3ZhciBuPWUuX190cmFuc2l0aW9uLGk7blt0XT1yLHIudGltZXI9SnoobywwLHIudGltZSk7ZnVuY3Rpb24gbyhjKXtyLnN0YXRlPUpudCxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PUpudClyZXR1cm4gbCgpO2Zvcih1IGluIG4paWYocD1uW3VdLHAubmFtZT09PXIubmFtZSl7aWYocC5zdGF0ZT09PXRGKXJldHVybiBReihhKTtwLnN0YXRlPT09Vll0PyhwLnN0YXRlPVJBLHAudGltZXIuc3RvcCgpLHAub24uY2FsbCgiaW50ZXJydXB0IixlLGUuX19kYXRhX18scC5pbmRleCxwLmdyb3VwKSxkZWxldGUgblt1XSk6K3U8dCYmKHAuc3RhdGU9UkEscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJjYW5jZWwiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKX1pZihReihmdW5jdGlvbigpe3Iuc3RhdGU9PT10RiYmKHIuc3RhdGU9Vll0LHIudGltZXIucmVzdGFydChzLHIuZGVsYXksci50aW1lKSxzKGMpKX0pLHIuc3RhdGU9ZUYsci5vbi5jYWxsKCJzdGFydCIsZSxlLl9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCksci5zdGF0ZT09PWVGKXtmb3Ioci5zdGF0ZT10RixpPW5ldyBBcnJheShmPXIudHdlZW4ubGVuZ3RoKSx1PTAsaD0tMTt1PGY7Kyt1KShwPXIudHdlZW5bdV0udmFsdWUuY2FsbChlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSkmJihpWysraF09cCk7aS5sZW5ndGg9aCsxfX1mdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT1jPHIuZHVyYXRpb24/ci5lYXNlLmNhbGwobnVsbCxjL3IuZHVyYXRpb24pOihyLnRpbWVyLnJlc3RhcnQobCksci5zdGF0ZT1yRiwxKSxoPS0xLGY9aS5sZW5ndGg7KytoPGY7KWlbaF0uY2FsbChlLHUpO3Iuc3RhdGU9PT1yRiYmKHIub24uY2FsbCgiZW5kIixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxsKCkpfWZ1bmN0aW9uIGwoKXtyLnN0YXRlPVJBLHIudGltZXIuc3RvcCgpLGRlbGV0ZSBuW3RdO2Zvcih2YXIgYyBpbiBuKXJldHVybjtkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBRTmUsdERlLFVZdCxKbnQsZUYsdEYsVll0LHJGLFJBLExzPU0oKCk9PntnbnQoKTtabnQoKTtRTmU9eUEoInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0IiksdERlPVtdLFVZdD0wLEpudD0xLGVGPTIsdEY9MyxWWXQ9NCxyRj01LFJBPTZ9KTtmdW5jdGlvbiBQMShlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saSxvPSEwLGE7aWYoISFyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihhIGluIHIpe2lmKChuPXJbYV0pLm5hbWUhPT10KXtvPSExO2NvbnRpbnVlfWk9bi5zdGF0ZT5lRiYmbi5zdGF0ZTxyRixuLnN0YXRlPVJBLG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChpPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGUsZS5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSByW2FdfW8mJmRlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIFFudD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIHFZdChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7UDEodGhpcyxlKX0pfXZhciBHWXQ9TSgoKT0+e1FudCgpfSk7ZnVuY3Rpb24gckRlKGUsdCl7dmFyIHIsbjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1KYSh0aGlzLGUpLG89aS50d2VlbjtpZihvIT09cil7bj1yPW87Zm9yKHZhciBhPTAscz1uLmxlbmd0aDthPHM7KythKWlmKG5bYV0ubmFtZT09PXQpe249bi5zbGljZSgpLG4uc3BsaWNlKGEsMSk7YnJlYWt9fWkudHdlZW49bn19ZnVuY3Rpb24gbkRlKGUsdCxyKXt2YXIgbixpO2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1KYSh0aGlzLGUpLGE9by50d2VlbjtpZihhIT09bil7aT0obj1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTp0LHZhbHVlOnJ9LGw9MCxjPWkubGVuZ3RoO2w8YzsrK2wpaWYoaVtsXS5uYW1lPT09dCl7aVtsXT1zO2JyZWFrfWw9PT1jJiZpLnB1c2gocyl9by50d2Vlbj1pfX1mdW5jdGlvbiBXWXQoZSx0KXt2YXIgcj10aGlzLl9pZDtpZihlKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1vbyh0aGlzLm5vZGUoKSxyKS50d2VlbixpPTAsbz1uLmxlbmd0aCxhO2k8bzsrK2kpaWYoKGE9bltpXSkubmFtZT09PWUpcmV0dXJuIGEudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yRGU6bkRlKShyLGUsdCkpfWZ1bmN0aW9uIGNTKGUsdCxyKXt2YXIgbj1lLl9pZDtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9SmEodGhpcyxuKTsoaS52YWx1ZXx8KGkudmFsdWU9e30pKVt0XT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKGkpe3JldHVybiBvbyhpLG4pLnZhbHVlW3RdfX12YXIgREE9TSgoKT0+e0xzKCl9KTtmdW5jdGlvbiBuRihlLHQpe3ZhciByO3JldHVybih0eXBlb2YgdD09Im51bWJlciI/SWM6dCBpbnN0YW5jZW9mIHFnP1d6OihyPXFnKHQpKT8odD1yLFd6KTpVbnQpKGUsdCl9dmFyIHRpdD1NKCgpPT57T250KCk7Q0EoKX0pO2Z1bmN0aW9uIGlEZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX19ZnVuY3Rpb24gb0RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gYURlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZShlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIHNEZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gbERlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1yKHRoaXMpLGw7cmV0dXJuIHM9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTooYT10aGlzLmdldEF0dHJpYnV0ZShlKSxsPXMrIiIsYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpKX19ZnVuY3Rpb24gY0RlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1yKHRoaXMpLGw7cmV0dXJuIHM9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6KGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBZWXQoZSx0KXt2YXIgcj1oZChlKSxuPXI9PT0idHJhbnNmb3JtIj9ZbnQ6bkY7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKGUsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KHIubG9jYWw/Y0RlOmxEZSkocixuLGNTKHRoaXMsImF0dHIuIitlLHQpKTp0PT1udWxsPyhyLmxvY2FsP29EZTppRGUpKHIpOihyLmxvY2FsP3NEZTphRGUpKHIsbix0KSl9dmFyIGpZdD1NKCgpPT57Q0EoKTtJcygpO0RBKCk7dGl0KCl9KTtmdW5jdGlvbiB1RGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIGhEZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIGZEZShlLHQpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKHI9KG49bykmJmhEZShlLG8pKSxyfXJldHVybiBpLl92YWx1ZT10LGl9ZnVuY3Rpb24gcERlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmdURlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBYWXQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPWhkKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/ZkRlOnBEZSkobix0KSl9dmFyICRZdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIGREZShlLHQpe3JldHVybiBmdW5jdGlvbigpe05BKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBtRGUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe05BKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gS1l0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/ZERlOm1EZSkodCxlKSk6b28odGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIFpZdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGdEZShlLHQpe3JldHVybiBmdW5jdGlvbigpe0phKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBfRGUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe0phKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gSll0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/Z0RlOl9EZSkodCxlKSk6b28odGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIFFZdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIHlEZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtKYSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gdGp0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh5RGUodCxlKSk6b28odGhpcy5ub2RlKCksdCkuZWFzZX12YXIgZWp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gcmp0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT14QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgZGEobix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBuanQ9TSgoKT0+e0lzKCk7ZGQoKX0pO2Z1bmN0aW9uIGlqdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgZGEoYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBvanQ9TSgoKT0+e2RkKCl9KTtmdW5jdGlvbiB2RGUoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiB4RGUoZSx0LHIpe3ZhciBuLGksbz12RGUodCk/TkE6SmE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gYWp0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9vbyh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goeERlKHIsZSx0KSl9dmFyIHNqdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGJEZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gbGp0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGJEZSh0aGlzLl9pZCkpfXZhciBjanQ9TSgoKT0+e30pO2Z1bmN0aW9uIHVqdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUMxKGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsR2coY1tmXSx0LHIsZixjLG9vKHUscikpKTtyZXR1cm4gbmV3IGRhKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBoanQ9TSgoKT0+e0lzKCk7ZGQoKTtMcygpfSk7ZnVuY3Rpb24gZmp0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dkEoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9b28odSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZHZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IGRhKG8sYSx0LHIpfXZhciBwanQ9TSgoKT0+e0lzKCk7ZGQoKTtMcygpfSk7ZnVuY3Rpb24gZGp0KCl7cmV0dXJuIG5ldyB3RGUodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciB3RGUsbWp0PU0oKCk9PntJcygpO3dEZT1mZC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBTRGUoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89VWcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFVnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gZ2p0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIE1EZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9VWcodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIEVEZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVVnKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxVZyh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBURGUoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1KYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9Z2p0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gX2p0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9XbnQ6bkY7cmV0dXJuIHQ9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKGUsU0RlKGUsbikpLm9uKCJlbmQuc3R5bGUuIitlLGdqdChlKSk6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKGUsRURlKGUsbixjUyh0aGlzLCJzdHlsZS4iK2UsdCkpKS5lYWNoKFREZSh0aGlzLl9pZCxlKSk6dGhpcy5zdHlsZVR3ZWVuKGUsTURlKGUsbix0KSxyKS5vbigiZW5kLnN0eWxlLiIrZSxudWxsKX12YXIgeWp0PU0oKCk9PntDQSgpO0lzKCk7THMoKTtEQSgpO3RpdCgpfSk7ZnVuY3Rpb24gQ0RlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQuY2FsbCh0aGlzLG4pLHIpfX1mdW5jdGlvbiBBRGUoZSx0LHIpe3ZhciBuLGk7ZnVuY3Rpb24gbygpe3ZhciBhPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKG49KGk9YSkmJkNEZShlLGEscikpLG59cmV0dXJuIG8uX3ZhbHVlPXQsb31mdW5jdGlvbiB2anQoZSx0LHIpe3ZhciBuPSJzdHlsZS4iKyhlKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKG4sQURlKGUsdCxyPT1udWxsPyIiOnIpKX12YXIgeGp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBQRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBJRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gYmp0KGUpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2YgZT09ImZ1bmN0aW9uIj9JRGUoY1ModGhpcywidGV4dCIsZSkpOlBEZShlPT1udWxsPyIiOmUrIiIpKX12YXIgd2p0PU0oKCk9PntEQSgpfSk7ZnVuY3Rpb24gTERlKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnRleHRDb250ZW50PWUuY2FsbCh0aGlzLHQpfX1mdW5jdGlvbiBrRGUoZSl7dmFyIHQscjtmdW5jdGlvbiBuKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYodD0ocj1pKSYmTERlKGkpKSx0fXJldHVybiBuLl92YWx1ZT1lLG59ZnVuY3Rpb24gU2p0KGUpe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKGU9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxrRGUoZSkpfXZhciBNanQ9TSgoKT0+e30pO2Z1bmN0aW9uIEVqdCgpe2Zvcih2YXIgZT10aGlzLl9uYW1lLHQ9dGhpcy5faWQscj1pRigpLG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKWlmKGw9YVtjXSl7dmFyIHU9b28obCx0KTtHZyhsLGUscixjLGEse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IGRhKG4sdGhpcy5fcGFyZW50cyxlLHIpfXZhciBUanQ9TSgoKT0+e2RkKCk7THMoKX0pO2Z1bmN0aW9uIENqdCgpe3ZhciBlLHQscj10aGlzLG49ci5faWQsaT1yLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXstLWk9PT0wJiZvKCl9fTtyLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1KYSh0aGlzLG4pLHU9Yy5vbjt1IT09ZSYmKHQ9KGU9dSkuY29weSgpLHQuXy5jYW5jZWwucHVzaChzKSx0Ll8uaW50ZXJydXB0LnB1c2gocyksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfXZhciBBanQ9TSgoKT0+e0xzKCl9KTtmdW5jdGlvbiBkYShlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gZWl0KGUpe3JldHVybiBmZCgpLnRyYW5zaXRpb24oZSl9ZnVuY3Rpb24gaUYoKXtyZXR1cm4rK1JEZX12YXIgUkRlLHVTLGRkPU0oKCk9PntJcygpO2pZdCgpOyRZdCgpO1pZdCgpO1FZdCgpO2VqdCgpO25qdCgpO29qdCgpO3NqdCgpO2NqdCgpO2hqdCgpO3BqdCgpO21qdCgpO3lqdCgpO3hqdCgpO3dqdCgpO01qdCgpO1RqdCgpO0RBKCk7QWp0KCk7UkRlPTA7dVM9ZmQucHJvdG90eXBlO2RhLnByb3RvdHlwZT1laXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkYSxzZWxlY3Q6dWp0LHNlbGVjdEFsbDpmanQsZmlsdGVyOnJqdCxtZXJnZTppanQsc2VsZWN0aW9uOmRqdCx0cmFuc2l0aW9uOkVqdCxjYWxsOnVTLmNhbGwsbm9kZXM6dVMubm9kZXMsbm9kZTp1Uy5ub2RlLHNpemU6dVMuc2l6ZSxlbXB0eTp1Uy5lbXB0eSxlYWNoOnVTLmVhY2gsb246YWp0LGF0dHI6WVl0LGF0dHJUd2VlbjpYWXQsc3R5bGU6X2p0LHN0eWxlVHdlZW46dmp0LHRleHQ6Ymp0LHRleHRUd2VlbjpTanQscmVtb3ZlOmxqdCx0d2VlbjpXWXQsZGVsYXk6S1l0LGR1cmF0aW9uOkpZdCxlYXNlOnRqdCxlbmQ6Q2p0fX0pO2Z1bmN0aW9uIE5EZShlLHQpe2Zvcih2YXIgcjshKHI9ZS5fX3RyYW5zaXRpb24pfHwhKHI9clt0XSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybiByaXQudGltZT1sUygpLHJpdDtyZXR1cm4gcn1mdW5jdGlvbiBQanQoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgZGE/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1pRigpLChyPXJpdCkudGltZT1sUygpLGU9ZT09bnVsbD9udWxsOmUrIiIpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJkdnKGwsZSx0LGMsYSxyfHxORGUobCx0KSk7cmV0dXJuIG5ldyBkYShuLHRoaXMuX3BhcmVudHMsZSx0KX12YXIgcml0LElqdD1NKCgpPT57ZGQoKTtMcygpO0lfKCk7Wm50KCk7cml0PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTp4c319KTt2YXIgTGp0PU0oKCk9PntJcygpO0dZdCgpO0lqdCgpO2ZkLnByb3RvdHlwZS5pbnRlcnJ1cHQ9cVl0O2ZkLnByb3RvdHlwZS50cmFuc2l0aW9uPVBqdH0pO3ZhciBranQ9TSgoKT0+e2RkKCk7THMoKX0pO3ZhciBSanQ9TSgoKT0+e0xqdCgpO2RkKCk7a2p0KCk7UW50KCl9KTtmdW5jdGlvbiBPQShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIE5qdD1NKCgpPT57fSk7ZnVuY3Rpb24gbml0KGUsdCxyKXt0aGlzLnRhcmdldD1lLHRoaXMudHlwZT10LHRoaXMudHJhbnNmb3JtPXJ9dmFyIERqdD1NKCgpPT57fSk7ZnVuY3Rpb24gUGYoZSx0LHIpe3RoaXMuaz1lLHRoaXMueD10LHRoaXMueT1yfWZ1bmN0aW9uIG9GKGUpe3JldHVybiBlLl9fem9vbXx8aFN9dmFyIGhTLGlpdD1NKCgpPT57UGYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQZixzY2FsZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PTE/dGhpczpuZXcgUGYodGhpcy5rKmUsdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPT09MCZ0PT09MD90aGlzOm5ldyBQZih0aGlzLmssdGhpcy54K3RoaXMuayplLHRoaXMueSt0aGlzLmsqdCl9LGFwcGx5OmZ1bmN0aW9uKGUpe3JldHVybltlWzBdKnRoaXMuayt0aGlzLngsZVsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbihlKXtyZXR1cm4gZSp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuWyhlWzBdLXRoaXMueCkvdGhpcy5rLChlWzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbihlKXtyZXR1cm4oZS10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbihlKXtyZXR1cm4oZS10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29weSgpLmRvbWFpbihlLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAoZS5pbnZlcnQsZSkpfSxyZXNjYWxlWTpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19O2hTPW5ldyBQZigxLDAsMCk7b0YucHJvdG90eXBlPVBmLnByb3RvdHlwZX0pO2Z1bmN0aW9uIGFGKCl7WXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZlMoKXtZci5wcmV2ZW50RGVmYXVsdCgpLFlyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBPanQ9TSgoKT0+e0lzKCl9KTtmdW5jdGlvbiBERGUoKXtyZXR1cm4hWXIuYnV0dG9ufWZ1bmN0aW9uIE9EZSgpe3ZhciBlPXRoaXMsdCxyO3JldHVybiBlIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oZT1lLm93bmVyU1ZHRWxlbWVudHx8ZSx0PWUud2lkdGguYmFzZVZhbC52YWx1ZSxyPWUuaGVpZ2h0LmJhc2VWYWwudmFsdWUpOih0PWUuY2xpZW50V2lkdGgscj1lLmNsaWVudEhlaWdodCksW1swLDBdLFt0LHJdXX1mdW5jdGlvbiB6anQoKXtyZXR1cm4gdGhpcy5fX3pvb218fGhTfWZ1bmN0aW9uIHpEZSgpe3JldHVybi1Zci5kZWx0YVkqKFlyLmRlbHRhTW9kZT8xMjA6MSkvNTAwfWZ1bmN0aW9uIEZEZSgpe3JldHVybiJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBCRGUoZSx0LHIpe3ZhciBuPWUuaW52ZXJ0WCh0WzBdWzBdKS1yWzBdWzBdLGk9ZS5pbnZlcnRYKHRbMV1bMF0pLXJbMV1bMF0sbz1lLmludmVydFkodFswXVsxXSktclswXVsxXSxhPWUuaW52ZXJ0WSh0WzFdWzFdKS1yWzFdWzFdO3JldHVybiBlLnRyYW5zbGF0ZShpPm4/KG4raSkvMjpNYXRoLm1pbigwLG4pfHxNYXRoLm1heCgwLGkpLGE+bz8obythKS8yOk1hdGgubWluKDAsbyl8fE1hdGgubWF4KDAsYSkpfWZ1bmN0aW9uIEZqdCgpe3ZhciBlPUREZSx0PU9EZSxyPUJEZSxuPXpEZSxpPUZEZSxvPVswLDEvMF0sYT1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxzPTI1MCxsPVhudCxjPVtdLHU9eUEoInN0YXJ0Iiwiem9vbSIsImVuZCIpLGgsZixwPTUwMCxkPTE1MCxnPTA7ZnVuY3Rpb24gXyhSKXtSLnByb3BlcnR5KCJfX3pvb20iLHpqdCkub24oIndoZWVsLnpvb20iLGspLm9uKCJtb3VzZWRvd24uem9vbSIsTykub24oImRibGNsaWNrLnpvb20iLEQpLmZpbHRlcihpKS5vbigidG91Y2hzdGFydC56b29tIixCKS5vbigidG91Y2htb3ZlLnpvb20iLEkpLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb20iLEwpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1fLnRyYW5zZm9ybT1mdW5jdGlvbihSLEYpe3ZhciB6PVIuc2VsZWN0aW9uP1Iuc2VsZWN0aW9uKCk6Ujt6LnByb3BlcnR5KCJfX3pvb20iLHpqdCksUiE9PXo/UyhSLEYpOnouaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpe0ModGhpcyxhcmd1bWVudHMpLnN0YXJ0KCkuem9vbShudWxsLHR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYpLmVuZCgpfSl9LF8uc2NhbGVCeT1mdW5jdGlvbihSLEYpe18uc2NhbGVUbyhSLGZ1bmN0aW9uKCl7dmFyIHo9dGhpcy5fX3pvb20uayxVPXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkY7cmV0dXJuIHoqVX0pfSxfLnNjYWxlVG89ZnVuY3Rpb24oUixGKXtfLnRyYW5zZm9ybShSLGZ1bmN0aW9uKCl7dmFyIHo9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksVT10aGlzLl9fem9vbSxXPWIoeiksWj1VLmludmVydChXKSxydD10eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpGO3JldHVybiByKHgoeShVLHJ0KSxXLFopLHosYSl9KX0sXy50cmFuc2xhdGVCeT1mdW5jdGlvbihSLEYseil7Xy50cmFuc2Zvcm0oUixmdW5jdGlvbigpe3JldHVybiByKHRoaXMuX196b29tLnRyYW5zbGF0ZSh0eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpGLHR5cGVvZiB6PT0iZnVuY3Rpb24iP3ouYXBwbHkodGhpcyxhcmd1bWVudHMpOnopLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEpfSl9LF8udHJhbnNsYXRlVG89ZnVuY3Rpb24oUixGLHope18udHJhbnNmb3JtKFIsZnVuY3Rpb24oKXt2YXIgVT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxXPXRoaXMuX196b29tLFo9YihVKTtyZXR1cm4gcihoUy50cmFuc2xhdGUoWlswXSxaWzFdKS5zY2FsZShXLmspLnRyYW5zbGF0ZSh0eXBlb2YgRj09ImZ1bmN0aW9uIj8tRi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LUYsdHlwZW9mIHo9PSJmdW5jdGlvbiI/LXouYXBwbHkodGhpcyxhcmd1bWVudHMpOi16KSxVLGEpfSl9O2Z1bmN0aW9uIHkoUixGKXtyZXR1cm4gRj1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sRikpLEY9PT1SLms/UjpuZXcgUGYoRixSLngsUi55KX1mdW5jdGlvbiB4KFIsRix6KXt2YXIgVT1GWzBdLXpbMF0qUi5rLFc9RlsxXS16WzFdKlIuaztyZXR1cm4gVT09PVIueCYmVz09PVIueT9SOm5ldyBQZihSLmssVSxXKX1mdW5jdGlvbiBiKFIpe3JldHVyblsoK1JbMF1bMF0rICtSWzFdWzBdKS8yLCgrUlswXVsxXSsgK1JbMV1bMV0pLzJdfWZ1bmN0aW9uIFMoUixGLHope1Iub24oInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7Qyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsZnVuY3Rpb24oKXtDKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciBVPXRoaXMsVz1hcmd1bWVudHMsWj1DKFUsVykscnQ9dC5hcHBseShVLFcpLG90PXp8fGIocnQpLHN0PU1hdGgubWF4KHJ0WzFdWzBdLXJ0WzBdWzBdLHJ0WzFdWzFdLXJ0WzBdWzFdKSxTdD1VLl9fem9vbSxidD10eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KFUsVyk6RixNdD1sKFN0LmludmVydChvdCkuY29uY2F0KHN0L1N0LmspLGJ0LmludmVydChvdCkuY29uY2F0KHN0L2J0LmspKTtyZXR1cm4gZnVuY3Rpb24obHQpe2lmKGx0PT09MSlsdD1idDtlbHNle3ZhciBLdD1NdChsdCksX3Q9c3QvS3RbMl07bHQ9bmV3IFBmKF90LG90WzBdLUt0WzBdKl90LG90WzFdLUt0WzFdKl90KX1aLnpvb20obnVsbCxsdCl9fSl9ZnVuY3Rpb24gQyhSLEYpe2Zvcih2YXIgej0wLFU9Yy5sZW5ndGgsVzt6PFU7Kyt6KWlmKChXPWNbel0pLnRoYXQ9PT1SKXJldHVybiBXO3JldHVybiBuZXcgUChSLEYpfWZ1bmN0aW9uIFAoUixGKXt0aGlzLnRoYXQ9Uix0aGlzLmFyZ3M9Rix0aGlzLmluZGV4PS0xLHRoaXMuYWN0aXZlPTAsdGhpcy5leHRlbnQ9dC5hcHBseShSLEYpfVAucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybisrdGhpcy5hY3RpdmU9PT0xJiYodGhpcy5pbmRleD1jLnB1c2godGhpcyktMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oUixGKXtyZXR1cm4gdGhpcy5tb3VzZSYmUiE9PSJtb3VzZSImJih0aGlzLm1vdXNlWzFdPUYuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmUiE9PSJ0b3VjaCImJih0aGlzLnRvdWNoMFsxXT1GLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiZSIT09InRvdWNoIiYmKHRoaXMudG91Y2gxWzFdPUYuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1GLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybi0tdGhpcy5hY3RpdmU9PT0wJiYoYy5zcGxpY2UodGhpcy5pbmRleCwxKSx0aGlzLmluZGV4PS0xLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oUil7Q250KG5ldyBuaXQoXyxSLHRoaXMudGhhdC5fX3pvb20pLHUuYXBwbHksdSxbUix0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBrKCl7aWYoIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgUj1DKHRoaXMsYXJndW1lbnRzKSxGPXRoaXMuX196b29tLHo9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLEYuaypNYXRoLnBvdygyLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLFU9aVModGhpcyk7aWYoUi53aGVlbCkoUi5tb3VzZVswXVswXSE9PVVbMF18fFIubW91c2VbMF1bMV0hPT1VWzFdKSYmKFIubW91c2VbMV09Ri5pbnZlcnQoUi5tb3VzZVswXT1VKSksY2xlYXJUaW1lb3V0KFIud2hlZWwpO2Vsc2V7aWYoRi5rPT09eilyZXR1cm47Ui5tb3VzZT1bVSxGLmludmVydChVKV0sUDEodGhpcyksUi5zdGFydCgpfWZTKCksUi53aGVlbD1zZXRUaW1lb3V0KFcsZCksUi56b29tKCJtb3VzZSIscih4KHkoRix6KSxSLm1vdXNlWzBdLFIubW91c2VbMV0pLFIuZXh0ZW50LGEpKTtmdW5jdGlvbiBXKCl7Ui53aGVlbD1udWxsLFIuZW5kKCl9fWZ1bmN0aW9uIE8oKXtpZihmfHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9cGQoWXIudmlldykub24oIm1vdXNlbW92ZS56b29tIixaLCEwKS5vbigibW91c2V1cC56b29tIixydCwhMCksej1pUyh0aGlzKSxVPVlyLmNsaWVudFgsVz1Zci5jbGllbnRZO0xudChZci52aWV3KSxhRigpLFIubW91c2U9W3osdGhpcy5fX3pvb20uaW52ZXJ0KHopXSxQMSh0aGlzKSxSLnN0YXJ0KCk7ZnVuY3Rpb24gWigpe2lmKGZTKCksIVIubW92ZWQpe3ZhciBvdD1Zci5jbGllbnRYLVUsc3Q9WXIuY2xpZW50WS1XO1IubW92ZWQ9b3Qqb3Qrc3Qqc3Q+Z31SLnpvb20oIm1vdXNlIixyKHgoUi50aGF0Ll9fem9vbSxSLm1vdXNlWzBdPWlTKFIudGhhdCksUi5tb3VzZVsxXSksUi5leHRlbnQsYSkpfWZ1bmN0aW9uIHJ0KCl7Ri5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxrbnQoWXIudmlldyxSLm1vdmVkKSxmUygpLFIuZW5kKCl9fWZ1bmN0aW9uIEQoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUj10aGlzLl9fem9vbSxGPWlTKHRoaXMpLHo9Ui5pbnZlcnQoRiksVT1SLmsqKFlyLnNoaWZ0S2V5Py41OjIpLFc9cih4KHkoUixVKSxGLHopLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEpO2ZTKCkscz4wP3BkKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzKS5jYWxsKFMsVyxGKTpwZCh0aGlzKS5jYWxsKF8udHJhbnNmb3JtLFcpfX1mdW5jdGlvbiBCKCl7aWYoISFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFI9Qyh0aGlzLGFyZ3VtZW50cyksRj1Zci5jaGFuZ2VkVG91Y2hlcyx6LFU9Ri5sZW5ndGgsVyxaLHJ0O2ZvcihhRigpLFc9MDtXPFU7KytXKVo9RltXXSxydD1Ceih0aGlzLEYsWi5pZGVudGlmaWVyKSxydD1bcnQsdGhpcy5fX3pvb20uaW52ZXJ0KHJ0KSxaLmlkZW50aWZpZXJdLFIudG91Y2gwP1IudG91Y2gxfHwoUi50b3VjaDE9cnQpOihSLnRvdWNoMD1ydCx6PSEwKTtpZihoJiYoaD1jbGVhclRpbWVvdXQoaCksIVIudG91Y2gxKSl7Ui5lbmQoKSxydD1wZCh0aGlzKS5vbigiZGJsY2xpY2suem9vbSIpLHJ0JiZydC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJufXomJihoPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoPW51bGx9LHApLFAxKHRoaXMpLFIuc3RhcnQoKSl9fWZ1bmN0aW9uIEkoKXt2YXIgUj1DKHRoaXMsYXJndW1lbnRzKSxGPVlyLmNoYW5nZWRUb3VjaGVzLHo9Ri5sZW5ndGgsVSxXLFoscnQ7Zm9yKGZTKCksaCYmKGg9Y2xlYXJUaW1lb3V0KGgpKSxVPTA7VTx6OysrVSlXPUZbVV0sWj1Ceih0aGlzLEYsVy5pZGVudGlmaWVyKSxSLnRvdWNoMCYmUi50b3VjaDBbMl09PT1XLmlkZW50aWZpZXI/Ui50b3VjaDBbMF09WjpSLnRvdWNoMSYmUi50b3VjaDFbMl09PT1XLmlkZW50aWZpZXImJihSLnRvdWNoMVswXT1aKTtpZihXPVIudGhhdC5fX3pvb20sUi50b3VjaDEpe3ZhciBvdD1SLnRvdWNoMFswXSxzdD1SLnRvdWNoMFsxXSxTdD1SLnRvdWNoMVswXSxidD1SLnRvdWNoMVsxXSxNdD0oTXQ9U3RbMF0tb3RbMF0pKk10KyhNdD1TdFsxXS1vdFsxXSkqTXQsbHQ9KGx0PWJ0WzBdLXN0WzBdKSpsdCsobHQ9YnRbMV0tc3RbMV0pKmx0O1c9eShXLE1hdGguc3FydChNdC9sdCkpLFo9WyhvdFswXStTdFswXSkvMiwob3RbMV0rU3RbMV0pLzJdLHJ0PVsoc3RbMF0rYnRbMF0pLzIsKHN0WzFdK2J0WzFdKS8yXX1lbHNlIGlmKFIudG91Y2gwKVo9Ui50b3VjaDBbMF0scnQ9Ui50b3VjaDBbMV07ZWxzZSByZXR1cm47Ui56b29tKCJ0b3VjaCIscih4KFcsWixydCksUi5leHRlbnQsYSkpfWZ1bmN0aW9uIEwoKXt2YXIgUj1DKHRoaXMsYXJndW1lbnRzKSxGPVlyLmNoYW5nZWRUb3VjaGVzLHo9Ri5sZW5ndGgsVSxXO2ZvcihhRigpLGYmJmNsZWFyVGltZW91dChmKSxmPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtmPW51bGx9LHApLFU9MDtVPHo7KytVKVc9RltVXSxSLnRvdWNoMCYmUi50b3VjaDBbMl09PT1XLmlkZW50aWZpZXI/ZGVsZXRlIFIudG91Y2gwOlIudG91Y2gxJiZSLnRvdWNoMVsyXT09PVcuaWRlbnRpZmllciYmZGVsZXRlIFIudG91Y2gxO1IudG91Y2gxJiYhUi50b3VjaDAmJihSLnRvdWNoMD1SLnRvdWNoMSxkZWxldGUgUi50b3VjaDEpLFIudG91Y2gwP1IudG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChSLnRvdWNoMFswXSk6Ui5lbmQoKX1yZXR1cm4gXy53aGVlbERlbHRhPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBSPT0iZnVuY3Rpb24iP1I6T0EoK1IpLF8pOm59LF8uZmlsdGVyPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBSPT0iZnVuY3Rpb24iP1I6T0EoISFSKSxfKTplfSxfLnRvdWNoYWJsZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgUj09ImZ1bmN0aW9uIj9SOk9BKCEhUiksXyk6aX0sXy5leHRlbnQ9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIFI9PSJmdW5jdGlvbiI/UjpPQShbWytSWzBdWzBdLCtSWzBdWzFdXSxbK1JbMV1bMF0sK1JbMV1bMV1dXSksXyk6dH0sXy5zY2FsZUV4dGVudD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ob1swXT0rUlswXSxvWzFdPStSWzFdLF8pOltvWzBdLG9bMV1dfSxfLnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYVswXVswXT0rUlswXVswXSxhWzFdWzBdPStSWzFdWzBdLGFbMF1bMV09K1JbMF1bMV0sYVsxXVsxXT0rUlsxXVsxXSxfKTpbW2FbMF1bMF0sYVswXVsxXV0sW2FbMV1bMF0sYVsxXVsxXV1dfSxfLmNvbnN0cmFpbj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1SLF8pOnJ9LF8uZHVyYXRpb249ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K1IsXyk6c30sXy5pbnRlcnBvbGF0ZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1SLF8pOmx9LF8ub249ZnVuY3Rpb24oKXt2YXIgUj11Lm9uLmFwcGx5KHUsYXJndW1lbnRzKTtyZXR1cm4gUj09PXU/XzpSfSxfLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9KFI9K1IpKlIsXyk6TWF0aC5zcXJ0KGcpfSxffXZhciBCanQ9TSgoKT0+e2dudCgpO2lZdCgpO0NBKCk7SXMoKTtSanQoKTtOanQoKTtEanQoKTtpaXQoKTtPanQoKX0pO3ZhciBIanQ9TSgoKT0+e0JqdCgpO2lpdCgpfSk7dmFyIE1yPXt9O0tzKE1yLHthY3RpdmU6KCk9PnVHdCxhcmM6KCk9PmhGdCxhcmVhOigpPT54NyxhcmVhUmFkaWFsOigpPT5SZXQsYXNjZW5kaW5nOigpPT5fYyxheGlzQm90dG9tOigpPT5ZTXQsYXhpc0xlZnQ6KCk9PmpNdCxheGlzUmlnaHQ6KCk9PldNdCxheGlzVG9wOigpPT5HTXQsYmlzZWN0OigpPT5hUixiaXNlY3RMZWZ0OigpPT5yTXQsYmlzZWN0UmlnaHQ6KCk9PmIkLGJpc2VjdG9yOigpPT5vUixicnVzaDooKT0+cEN0LGJydXNoU2VsZWN0aW9uOigpPT51Q3QsYnJ1c2hYOigpPT5oQ3QsYnJ1c2hZOigpPT5mQ3QsY2hvcmQ6KCk9PnpDdCxjbGllbnRQb2ludDooKT0+RGcsY2x1c3RlcjooKT0+Qkx0LGNvbG9yOigpPT54MixjcmVhdGU6KCk9PiR6dCxjcmVhdG9yOigpPT5OZyxjcm9zczooKT0+aU10LGNzdjooKT0+bE50LGNzdkZvcm1hdDooKT0+cFB0LGNzdkZvcm1hdFJvd3M6KCk9PmRQdCxjc3ZQYXJzZTooKT0+aFB0LGNzdlBhcnNlUm93czooKT0+ZlB0LGN1YmVoZWxpeDooKT0+Y04sY3VydmVCYXNpczooKT0+TEZ0LGN1cnZlQmFzaXNDbG9zZWQ6KCk9PlJGdCxjdXJ2ZUJhc2lzT3BlbjooKT0+T0Z0LGN1cnZlQnVuZGxlOigpPT5CRnQsY3VydmVDYXJkaW5hbDooKT0+VkZ0LGN1cnZlQ2FyZGluYWxDbG9zZWQ6KCk9PlVGdCxjdXJ2ZUNhcmRpbmFsT3BlbjooKT0+cUZ0LGN1cnZlQ2F0bXVsbFJvbTooKT0+V0Z0LGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDooKT0+akZ0LGN1cnZlQ2F0bXVsbFJvbU9wZW46KCk9PktGdCxjdXJ2ZUxpbmVhcjooKT0+RmcsY3VydmVMaW5lYXJDbG9zZWQ6KCk9PlFGdCxjdXJ2ZU1vbm90b25lWDooKT0+YUJ0LGN1cnZlTW9ub3RvbmVZOigpPT5zQnQsY3VydmVOYXR1cmFsOigpPT5oQnQsY3VydmVTdGVwOigpPT5wQnQsY3VydmVTdGVwQWZ0ZXI6KCk9Pm1CdCxjdXJ2ZVN0ZXBCZWZvcmU6KCk9PmRCdCxjdXN0b21FdmVudDooKT0+cXp0LGRlc2NlbmRpbmc6KCk9PmFNdCxkZXZpYXRpb246KCk9PmxSLGRpc3BhdGNoOigpPT5DQXQsZHJhZzooKT0+YVB0LGRyYWdEaXNhYmxlOigpPT5NTixkcmFnRW5hYmxlOigpPT5FTixkc3ZGb3JtYXQ6KCk9PncyLGVhc2VCYWNrOigpPT56WixlYXNlQmFja0luOigpPT5qUHQsZWFzZUJhY2tJbk91dDooKT0+elosZWFzZUJhY2tPdXQ6KCk9PlhQdCxlYXNlQm91bmNlOigpPT5TMixlYXNlQm91bmNlSW46KCk9PkdQdCxlYXNlQm91bmNlSW5PdXQ6KCk9PldQdCxlYXNlQm91bmNlT3V0OigpPT5TMixlYXNlQ2lyY2xlOigpPT5OWixlYXNlQ2lyY2xlSW46KCk9PlZQdCxlYXNlQ2lyY2xlSW5PdXQ6KCk9Pk5aLGVhc2VDaXJjbGVPdXQ6KCk9PlVQdCxlYXNlQ3ViaWM6KCk9PlBaLGVhc2VDdWJpY0luOigpPT5DUHQsZWFzZUN1YmljSW5PdXQ6KCk9PlBaLGVhc2VDdWJpY091dDooKT0+QVB0LGVhc2VFbGFzdGljOigpPT5IWixlYXNlRWxhc3RpY0luOigpPT5LUHQsZWFzZUVsYXN0aWNJbk91dDooKT0+WlB0LGVhc2VFbGFzdGljT3V0OigpPT5IWixlYXNlRXhwOigpPT5SWixlYXNlRXhwSW46KCk9PkZQdCxlYXNlRXhwSW5PdXQ6KCk9PlJaLGVhc2VFeHBPdXQ6KCk9PkJQdCxlYXNlTGluZWFyOigpPT53UHQsZWFzZVBvbHk6KCk9PkxaLGVhc2VQb2x5SW46KCk9PklQdCxlYXNlUG9seUluT3V0OigpPT5MWixlYXNlUG9seU91dDooKT0+TFB0LGVhc2VRdWFkOigpPT5BWixlYXNlUXVhZEluOigpPT5NUHQsZWFzZVF1YWRJbk91dDooKT0+QVosZWFzZVF1YWRPdXQ6KCk9PkVQdCxlYXNlU2luOigpPT5rWixlYXNlU2luSW46KCk9PkRQdCxlYXNlU2luSW5PdXQ6KCk9PmtaLGVhc2VTaW5PdXQ6KCk9Pk9QdCxlbnRyaWVzOigpPT5hQXQsZXZlbnQ6KCk9PlB1LGV4dGVudDooKT0+Y1IsZm9yY2VDZW50ZXI6KCk9PnQ2dCxmb3JjZUNvbGxpZGU6KCk9PlI2dCxmb3JjZUxpbms6KCk9PlU2dCxmb3JjZU1hbnlCb2R5OigpPT5uSXQsZm9yY2VSYWRpYWw6KCk9Pm9JdCxmb3JjZVNpbXVsYXRpb246KCk9PnJJdCxmb3JjZVg6KCk9PnNJdCxmb3JjZVk6KCk9PmNJdCxmb3JtYXQ6KCk9Pm5KLGZvcm1hdERlZmF1bHRMb2NhbGU6KCk9PkdOLGZvcm1hdExvY2FsZTooKT0+VU4sZm9ybWF0UHJlZml4OigpPT5pSixmb3JtYXRTcGVjaWZpZXI6KCk9Pkx5LGdlb0FsYmVyczooKT0+TkQsZ2VvQWxiZXJzVXNhOigpPT5kTHQsZ2VvQXJlYTooKT0+ekl0LGdlb0F6aW11dGhhbEVxdWFsQXJlYTooKT0+Z0x0LGdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdzooKT0+T0QsZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnQ6KCk9PnlMdCxnZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdzooKT0+ekQsZ2VvQm91bmRzOigpPT5XSXQsZ2VvQ2VudHJvaWQ6KCk9PkpJdCxnZW9DaXJjbGU6KCk9Pm85dCxnZW9DbGlwQW50aW1lcmlkaWFuOigpPT5PVCxnZW9DbGlwQ2lyY2xlOigpPT5nRCxnZW9DbGlwRXh0ZW50OigpPT5BOXQsZ2VvQ2xpcFJlY3RhbmdsZTooKT0+UXAsZ2VvQ29uaWNDb25mb3JtYWw6KCk9PmJMdCxnZW9Db25pY0NvbmZvcm1hbFJhdzooKT0+cFEsZ2VvQ29uaWNFcXVhbEFyZWE6KCk9PlV5LGdlb0NvbmljRXF1YWxBcmVhUmF3OigpPT51USxnZW9Db25pY0VxdWlkaXN0YW50OigpPT5NTHQsZ2VvQ29uaWNFcXVpZGlzdGFudFJhdzooKT0+bVEsZ2VvQ29udGFpbnM6KCk9Pk85dCxnZW9EaXN0YW5jZTooKT0+QnksZ2VvRXF1aXJlY3Rhbmd1bGFyOigpPT5TTHQsZ2VvRXF1aXJlY3Rhbmd1bGFyUmF3OigpPT5HeSxnZW9Hbm9tb25pYzooKT0+VEx0LGdlb0dub21vbmljUmF3OigpPT5IRCxnZW9HcmF0aWN1bGU6KCk9PndELGdlb0dyYXRpY3VsZTEwOigpPT5IOXQsZ2VvSWRlbnRpdHk6KCk9PkFMdCxnZW9JbnRlcnBvbGF0ZTooKT0+VTl0LGdlb0xlbmd0aDooKT0+eEQsZ2VvTWVyY2F0b3I6KCk9PnhMdCxnZW9NZXJjYXRvclJhdzooKT0+cXksZ2VvTmF0dXJhbEVhcnRoMTooKT0+SUx0LGdlb05hdHVyYWxFYXJ0aDFSYXc6KCk9PlVELGdlb09ydGhvZ3JhcGhpYzooKT0+a0x0LGdlb09ydGhvZ3JhcGhpY1JhdzooKT0+cUQsZ2VvUGF0aDooKT0+c0x0LGdlb1Byb2plY3Rpb246KCk9PmVvLGdlb1Byb2plY3Rpb25NdXRhdG9yOigpPT5XVCxnZW9Sb3RhdGlvbjooKT0+c0QsZ2VvU3RlcmVvZ3JhcGhpYzooKT0+Tkx0LGdlb1N0ZXJlb2dyYXBoaWNSYXc6KCk9PkdELGdlb1N0cmVhbTooKT0+TW8sZ2VvVHJhbnNmb3JtOigpPT5jTHQsZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yOigpPT5PTHQsZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yUmF3OigpPT5XRCxoY2w6KCk9Pm9aLGhpZXJhcmNoeTooKT0+WVQsaGlzdG9ncmFtOigpPT5tTXQsaHNsOigpPT5KSyxodG1sOigpPT50TnQsaW50ZXJwb2xhdGU6KCk9PloyLGludGVycG9sYXRlQXJyYXk6KCk9PmhPLGludGVycG9sYXRlQmFzaXM6KCk9PmxPLGludGVycG9sYXRlQmFzaXNDbG9zZWQ6KCk9PnVPLGludGVycG9sYXRlQ29vbDooKT0+eDd0LGludGVycG9sYXRlQ3ViZWhlbGl4OigpPT5GOHQsaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0OigpPT5fN3QsaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nOigpPT5COHQsaW50ZXJwb2xhdGVEYXRlOigpPT5wTyxpbnRlcnBvbGF0ZUhjbDooKT0+Tjh0LGludGVycG9sYXRlSGNsTG9uZzooKT0+RDh0LGludGVycG9sYXRlSHNsOigpPT5QOHQsaW50ZXJwb2xhdGVIc2xMb25nOigpPT5JOHQsaW50ZXJwb2xhdGVJbmZlcm5vOigpPT5FN3QsaW50ZXJwb2xhdGVMYWI6KCk9PktRLGludGVycG9sYXRlTWFnbWE6KCk9Pk03dCxpbnRlcnBvbGF0ZU51bWJlcjooKT0+QXMsaW50ZXJwb2xhdGVPYmplY3Q6KCk9PmRPLGludGVycG9sYXRlUGxhc21hOigpPT5UN3QsaW50ZXJwb2xhdGVSYWluYm93OigpPT5iN3QsaW50ZXJwb2xhdGVSZ2I6KCk9PnRDLGludGVycG9sYXRlUmdiQmFzaXM6KCk9PnU4dCxpbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkOigpPT5oOHQsaW50ZXJwb2xhdGVSb3VuZDooKT0+Zjh0LGludGVycG9sYXRlU3RyaW5nOigpPT5tTyxpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzczooKT0+Yjh0LGludGVycG9sYXRlVHJhbnNmb3JtU3ZnOigpPT53OHQsaW50ZXJwb2xhdGVWaXJpZGlzOigpPT5TN3QsaW50ZXJwb2xhdGVXYXJtOigpPT52N3QsaW50ZXJwb2xhdGVab29tOigpPT5UOHQsaW50ZXJydXB0OigpPT5weixpbnRlcnZhbDooKT0+eFZ0LGlzb0Zvcm1hdDooKT0+aFZ0LGlzb1BhcnNlOigpPT5mVnQsanNvbjooKT0+ck50LGtleXM6KCk9PnJBdCxsYWI6KCk9PnNOLGxpbmU6KCk9PlJ3LGxpbmVSYWRpYWw6KCk9PkxldCxsaW5rSG9yaXpvbnRhbDooKT0+d0Z0LGxpbmtSYWRpYWw6KCk9Pk1GdCxsaW5rVmVydGljYWw6KCk9PlNGdCxsb2NhbDooKT0+ZDcsbWFwOigpPT5ieSxtYXRjaGVyOigpPT5jNyxtYXg6KCk9PmJNdCxtZWFuOigpPT5TTXQsbWVkaWFuOigpPT5FTXQsbWVyZ2U6KCk9PkNNdCxtaW46KCk9PmRSLG1vdXNlOigpPT5KenQsbmFtZXNwYWNlOigpPT5NdyxuYW1lc3BhY2VzOigpPT5NQyxuZXN0OigpPT5aQ3Qsbm93OigpPT5ZdyxwYWNrOigpPT5ia3QscGFja0VuY2xvc2U6KCk9PlhELHBhY2tTaWJsaW5nczooKT0+X2t0LHBhaXJzOigpPT5uTXQscGFydGl0aW9uOigpPT5Ta3QscGF0aDooKT0+Vzh0LHBlcm11dGU6KCk9PlBNdCxwaWU6KCk9PnlGdCxwb2ludFJhZGlhbDooKT0+ZjEscG9seWdvbkFyZWE6KCk9Plg4dCxwb2x5Z29uQ2VudHJvaWQ6KCk9Pks4dCxwb2x5Z29uQ29udGFpbnM6KCk9Pm5SdCxwb2x5Z29uSHVsbDooKT0+ZVJ0LHBvbHlnb25MZW5ndGg6KCk9Pm9SdCxwcmVjaXNpb25GaXhlZDooKT0+U0l0LHByZWNpc2lvblByZWZpeDooKT0+RUl0LHByZWNpc2lvblJvdW5kOigpPT5DSXQscXVhZHRyZWU6KCk9PnZPLHF1YW50aWxlOigpPT5keSxxdWFudGl6ZTooKT0+Vjh0LHF1ZXVlOigpPT5iTyxyYWRpYWxBcmVhOigpPT5SZXQscmFkaWFsTGluZTooKT0+TGV0LHJhbmRvbUJhdGVzOigpPT4kUnQscmFuZG9tRXhwb25lbnRpYWw6KCk9PlpSdCxyYW5kb21JcndpbkhhbGw6KCk9PlNPLHJhbmRvbUxvZ05vcm1hbDooKT0+alJ0LHJhbmRvbU5vcm1hbDooKT0+d08scmFuZG9tVW5pZm9ybTooKT0+V1J0LHJhbmdlOigpPT51UixyZXF1ZXN0OigpPT5KMixyZ2I6KCk9PlpLLHJpYmJvbjooKT0+V0N0LHNjYWxlQmFuZDooKT0+bEMsc2NhbGVJZGVudGl0eTooKT0+VU8sc2NhbGVJbXBsaWNpdDooKT0+TE8sc2NhbGVMaW5lYXI6KCk9PlZPLHNjYWxlTG9nOigpPT5HTyxzY2FsZU9yZGluYWw6KCk9Pm53LHNjYWxlUG9pbnQ6KCk9PlZOdCxzY2FsZVBvdzooKT0+Z0Msc2NhbGVRdWFudGlsZTooKT0+V08sc2NhbGVRdWFudGl6ZTooKT0+WU8sc2NhbGVTZXF1ZW50aWFsOigpPT5uNyxzY2FsZVNxcnQ6KCk9PmVPdCxzY2FsZVRocmVzaG9sZDooKT0+ak8sc2NhbGVUaW1lOigpPT5hN3Qsc2NhbGVVdGM6KCk9PnM3dCxzY2FuOigpPT5MTXQsc2NoZW1lQ2F0ZWdvcnkxMDooKT0+Yzd0LHNjaGVtZUNhdGVnb3J5MjA6KCk9Pm03dCxzY2hlbWVDYXRlZ29yeTIwYjooKT0+aDd0LHNjaGVtZUNhdGVnb3J5MjBjOigpPT5wN3Qsc2VsZWN0OigpPT5wNyxzZWxlY3RBbGw6KCk9PnRGdCxzZWxlY3Rpb246KCk9Plh6dCxzZWxlY3RvcjooKT0+RXcsc2VsZWN0b3JBbGw6KCk9Pmw3LHNldDooKT0+dEF0LHNodWZmbGU6KCk9PlJNdCxzdGFjazooKT0+X0J0LHN0YWNrT2Zmc2V0RGl2ZXJnaW5nOigpPT5iQnQsc3RhY2tPZmZzZXRFeHBhbmQ6KCk9PnZCdCxzdGFja09mZnNldE5vbmU6KCk9PlJ1LHN0YWNrT2Zmc2V0U2lsaG91ZXR0ZTooKT0+U0J0LHN0YWNrT2Zmc2V0V2lnZ2xlOigpPT5FQnQsc3RhY2tPcmRlckFzY2VuZGluZzooKT0+Tjcsc3RhY2tPcmRlckRlc2NlbmRpbmc6KCk9PkNCdCxzdGFja09yZGVySW5zaWRlT3V0OigpPT5QQnQsc3RhY2tPcmRlck5vbmU6KCk9Pk51LHN0YWNrT3JkZXJSZXZlcnNlOigpPT5MQnQsc3RyYXRpZnk6KCk9PkNrdCxzdHlsZTooKT0+eWV0LHN1bTooKT0+RE10LHN5bWJvbDooKT0+UEZ0LHN5bWJvbENpcmNsZTooKT0+a0Msc3ltYm9sQ3Jvc3M6KCk9Pnc3LHN5bWJvbERpYW1vbmQ6KCk9PlM3LHN5bWJvbFNxdWFyZTooKT0+RTcsc3ltYm9sU3RhcjooKT0+TTcsc3ltYm9sVHJpYW5nbGU6KCk9PlQ3LHN5bWJvbFd5ZTooKT0+Qzcsc3ltYm9sczooKT0+QUZ0LHRleHQ6KCk9PmlOdCx0aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzOigpPT5fTXQsdGhyZXNob2xkU2NvdHQ6KCk9PnZNdCx0aHJlc2hvbGRTdHVyZ2VzOigpPT5mUix0aWNrSW5jcmVtZW50OigpPT5SJCx0aWNrU3RlcDooKT0+aFIsdGlja3M6KCk9PmRNdCx0aW1lRGF5OigpPT5ZQnQsdGltZURheXM6KCk9PmpCdCx0aW1lRm9ybWF0OigpPT5TcnQsdGltZUZvcm1hdERlZmF1bHRMb2NhbGU6KCk9Pmo3LHRpbWVGb3JtYXRMb2NhbGU6KCk9PldDLHRpbWVGcmlkYXk6KCk9PmFydCx0aW1lRnJpZGF5czooKT0+UUJ0LHRpbWVIb3VyOigpPT5VQnQsdGltZUhvdXJzOigpPT5xQnQsdGltZUludGVydmFsOigpPT5Tcix0aW1lTWlsbGlzZWNvbmQ6KCk9PkpldCx0aW1lTWlsbGlzZWNvbmRzOigpPT5RZXQsdGltZU1pbnV0ZTooKT0+RkJ0LHRpbWVNaW51dGVzOigpPT5CQnQsdGltZU1vbmRheTooKT0+cnJ0LHRpbWVNb25kYXlzOigpPT4kQnQsdGltZU1vbnRoOigpPT5uSHQsdGltZU1vbnRoczooKT0+aUh0LHRpbWVQYXJzZTooKT0+TXJ0LHRpbWVTYXR1cmRheTooKT0+c3J0LHRpbWVTYXR1cmRheXM6KCk9PnRIdCx0aW1lU2Vjb25kOigpPT50cnQsdGltZVNlY29uZHM6KCk9PmVydCx0aW1lU3VuZGF5OigpPT5CNyx0aW1lU3VuZGF5czooKT0+bHJ0LHRpbWVUaHVyc2RheTooKT0+b3J0LHRpbWVUaHVyc2RheXM6KCk9PkpCdCx0aW1lVHVlc2RheTooKT0+bnJ0LHRpbWVUdWVzZGF5czooKT0+S0J0LHRpbWVXZWRuZXNkYXk6KCk9PmlydCx0aW1lV2VkbmVzZGF5czooKT0+WkJ0LHRpbWVXZWVrOigpPT5CNyx0aW1lV2Vla3M6KCk9PmxydCx0aW1lWWVhcjooKT0+YUh0LHRpbWVZZWFyczooKT0+c0h0LHRpbWVvdXQ6KCk9PnlWdCx0aW1lcjooKT0+QXJ0LHRpbWVyRmx1c2g6KCk9PlBydCx0b3VjaDooKT0+ckZ0LHRvdWNoZXM6KCk9PmlGdCx0cmFuc2l0aW9uOigpPT5Feix0cmFuc3Bvc2U6KCk9Pm1SLHRyZWU6KCk9PlBrdCx0cmVlbWFwOigpPT5Ma3QsdHJlZW1hcEJpbmFyeTooKT0+Umt0LHRyZWVtYXBEaWNlOigpPT5sZix0cmVlbWFwUmVzcXVhcmlmeTooKT0+emt0LHRyZWVtYXBTbGljZTooKT0+d2csdHJlZW1hcFNsaWNlRGljZTooKT0+RGt0LHRyZWVtYXBTcXVhcmlmeTooKT0+UUQsdHN2OigpPT51TnQsdHN2Rm9ybWF0OigpPT55UHQsdHN2Rm9ybWF0Um93czooKT0+dlB0LHRzdlBhcnNlOigpPT5nUHQsdHN2UGFyc2VSb3dzOigpPT5fUHQsdXRjRGF5OigpPT55SHQsdXRjRGF5czooKT0+dkh0LHV0Y0Zvcm1hdDooKT0+WUMsdXRjRnJpZGF5OigpPT5kcnQsdXRjRnJpZGF5czooKT0+RUh0LHV0Y0hvdXI6KCk9PmRIdCx1dGNIb3VyczooKT0+bUh0LHV0Y01pbGxpc2Vjb25kOigpPT5KZXQsdXRjTWlsbGlzZWNvbmRzOigpPT5RZXQsdXRjTWludXRlOigpPT51SHQsdXRjTWludXRlczooKT0+aEh0LHV0Y01vbmRheTooKT0+dXJ0LHV0Y01vbmRheXM6KCk9PmJIdCx1dGNNb250aDooKT0+UEh0LHV0Y01vbnRoczooKT0+SUh0LHV0Y1BhcnNlOigpPT5qQyx1dGNTYXR1cmRheTooKT0+bXJ0LHV0Y1NhdHVyZGF5czooKT0+VEh0LHV0Y1NlY29uZDooKT0+dHJ0LHV0Y1NlY29uZHM6KCk9PmVydCx1dGNTdW5kYXk6KCk9Pkg3LHV0Y1N1bmRheXM6KCk9PmdydCx1dGNUaHVyc2RheTooKT0+cHJ0LHV0Y1RodXJzZGF5czooKT0+TUh0LHV0Y1R1ZXNkYXk6KCk9PmhydCx1dGNUdWVzZGF5czooKT0+d0h0LHV0Y1dlZG5lc2RheTooKT0+ZnJ0LHV0Y1dlZG5lc2RheXM6KCk9PlNIdCx1dGNXZWVrOigpPT5INyx1dGNXZWVrczooKT0+Z3J0LHV0Y1llYXI6KCk9PmtIdCx1dGNZZWFyczooKT0+Ukh0LHZhbHVlczooKT0+aUF0LHZhcmlhbmNlOigpPT5zUix2ZXJzaW9uOigpPT5RM3Qsdm9yb25vaTooKT0+SUd0LHdpbmRvdzooKT0+Q3cseG1sOigpPT5hTnQsemlwOigpPT56TXQsem9vbTooKT0+Rmp0LHpvb21JZGVudGl0eTooKT0+aFMsem9vbVRyYW5zZm9ybTooKT0+b0Z9KTt2YXIgRXI9TSgoKT0+e3RNdCgpO0JNdCgpOyRNdCgpO21DdCgpO2pDdCgpO2xBdCgpO01BdCgpO1BBdCgpO2xQdCgpO2JQdCgpO1FQdCgpO2hJdCgpO1BJdCgpO0ZMdCgpO0JrdCgpO3E4dCgpO2o4dCgpO3NSdCgpO0JSdCgpO0dSdCgpO1FSdCgpO2ZOdCgpO1A3dCgpO2FGdCgpO1JCdCgpO0RIdCgpO2RWdCgpO3dWdCgpO2ZHdCgpO2tHdCgpO0hqdCgpfSk7dmFyIEdqdD1IKHFqdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocWp0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgVmp0PShFcigpLFV0KE1yKSksV2c9Vmp0LFVqdD1WanQ7ZnVuY3Rpb24gSERlKGUsdCl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLG49V2cuc2VsZWN0KHRoaXMpO2Zvcih2YXIgaSBpbiByKW4uYXR0cihpLHJbaV0pfSl9ZnVuY3Rpb24gVkRlKGUsdCl7Zm9yKHZhciByIGluIHQpZS5hdHRyKHIsdFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gVURlKGUpe3JldHVybih0eXBlb2YgZT09ImZ1bmN0aW9uIj9IRGU6VkRlKSh0aGlzLGUpfWZ1bmN0aW9uIHFEZShlLHQscil7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGk9V2cuc2VsZWN0KHRoaXMpO2Zvcih2YXIgbyBpbiBuKWkuc3R5bGUobyxuW29dLHIpfSl9ZnVuY3Rpb24gR0RlKGUsdCxyKXtmb3IodmFyIG4gaW4gdCllLnN0eWxlKG4sdFtuXSxyKTtyZXR1cm4gZX1mdW5jdGlvbiBXRGUoZSx0KXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/cURlOkdEZSkodGhpcyxlLHQ9PW51bGw/IiI6dCl9ZnVuY3Rpb24gWURlKGUsdCl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLG49V2cuc2VsZWN0KHRoaXMpO2Zvcih2YXIgaSBpbiByKW4ucHJvcGVydHkoaSxyW2ldKX0pfWZ1bmN0aW9uIGpEZShlLHQpe2Zvcih2YXIgciBpbiB0KWUucHJvcGVydHkocix0W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBYRGUoZSl7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iP1lEZTpqRGUpKHRoaXMsZSl9ZnVuY3Rpb24gJERlKGUsdCl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLG49V2cuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oZSk7Zm9yKHZhciBpIGluIHIpbi5hdHRyKGkscltpXSl9KX1mdW5jdGlvbiBLRGUoZSx0KXtmb3IodmFyIHIgaW4gdCllLmF0dHIocix0W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBaRGUoZSl7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iPyREZTpLRGUpKHRoaXMsZSl9ZnVuY3Rpb24gSkRlKGUsdCxyKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1XZy5zZWxlY3QodGhpcykudHJhbnNpdGlvbihlKTtmb3IodmFyIG8gaW4gbilpLnN0eWxlKG8sbltvXSxyKX0pfWZ1bmN0aW9uIFFEZShlLHQscil7Zm9yKHZhciBuIGluIHQpZS5zdHlsZShuLHRbbl0scik7cmV0dXJuIGV9ZnVuY3Rpb24gdE9lKGUsdCl7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iP0pEZTpRRGUpKHRoaXMsZSx0PT1udWxsPyIiOnQpfVdnLnNlbGVjdGlvbi5wcm90b3R5cGUuYXR0cnM9VURlO1dnLnNlbGVjdGlvbi5wcm90b3R5cGUuc3R5bGVzPVdEZTtXZy5zZWxlY3Rpb24ucHJvdG90eXBlLnByb3BlcnRpZXM9WERlO1VqdC50cmFuc2l0aW9uLnByb3RvdHlwZS5hdHRycz1aRGU7VWp0LnRyYW5zaXRpb24ucHJvdG90eXBlLnN0eWxlcz10T2V9KTt2YXIgWWc9SChvaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG9pdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdqdD0oRXIoKSxVdChNcikpO2Z1bmN0aW9uIGVPZShlKXtpZihlLmF0dHJzPT1udWxsKWlmKGUubm9kZXM9PW51bGwpe3ZhciB0PVtdO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt0LnB1c2godGhpcyl9KSxXanQuc2VsZWN0QWxsKHQpfWVsc2UgcmV0dXJuIFdqdC5zZWxlY3RBbGwoZS5ub2RlcygpKTtlbHNlIHJldHVybiBlfW9pdC5jb2VyY2VFeHRlcm5hbEQzPWVPZX0pO3ZhciBJZj1IKGFpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYWl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiByT2UoZSl7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHRbcl09cix0fSx7fSl9YWl0Lm1ha2VFbnVtPXJPZX0pO3ZhciBqanQ9SChzRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc0YsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBkcj0oSV8oKSxVdChOMXQpKSxuT2U9WWcoKSxpT2U9SWYoKSxZanQ9e2xpbmVhcjpkci5lYXNlTGluZWFyLHF1YWQ6ZHIuZWFzZVF1YWQscXVhZEluOmRyLmVhc2VRdWFkSW4scXVhZE91dDpkci5lYXNlUXVhZE91dCxxdWFkSW5PdXQ6ZHIuZWFzZVF1YWRJbk91dCxjdWJpYzpkci5lYXNlQ3ViaWMsY3ViaWNJbjpkci5lYXNlQ3ViaWNJbixjdWJpY091dDpkci5lYXNlQ3ViaWNPdXQsY3ViaWNJbk91dDpkci5lYXNlQ3ViaWNJbk91dCxwb2x5OmRyLmVhc2VQb2x5LHBvbHlJbjpkci5lYXNlUG9seUluLHBvbHlPdXQ6ZHIuZWFzZVBvbHlPdXQscG9seUluT3V0OmRyLmVhc2VQb2x5SW5PdXQsc2luOmRyLmVhc2VTaW4sc2luSW46ZHIuZWFzZVNpbkluLHNpbk91dDpkci5lYXNlU2luT3V0LHNpbkluT3V0OmRyLmVhc2VTaW5Jbk91dCxleHA6ZHIuZWFzZUV4cCxleHBJbjpkci5lYXNlRXhwSW4sZXhwT3V0OmRyLmVhc2VFeHBPdXQsZXhwSW5PdXQ6ZHIuZWFzZUV4cEluT3V0LGNpcmNsZTpkci5lYXNlQ2lyY2xlLGNpcmNsZUluOmRyLmVhc2VDaXJjbGVJbixjaXJjbGVPdXQ6ZHIuZWFzZUNpcmNsZU91dCxjaXJjbGVJbk91dDpkci5lYXNlQ2lyY2xlSW5PdXQsYm91bmNlOmRyLmVhc2VCb3VuY2UsYm91bmNlSW46ZHIuZWFzZUJvdW5jZUluLGJvdW5jZU91dDpkci5lYXNlQm91bmNlT3V0LGJvdW5jZUluT3V0OmRyLmVhc2VCb3VuY2VJbk91dCxiYWNrOmRyLmVhc2VCYWNrLGJhY2tJbjpkci5lYXNlQmFja0luLGJhY2tPdXQ6ZHIuZWFzZUJhY2tPdXQsYmFja0luT3V0OmRyLmVhc2VCYWNrSW5PdXQsZWxhc3RpYzpkci5lYXNlRWxhc3RpYyxlbGFzdGljSW46ZHIuZWFzZUVsYXN0aWNJbixlbGFzdGljT3V0OmRyLmVhc2VFbGFzdGljT3V0LGVsYXN0aWNJbk91dDpkci5lYXNlRWxhc3RpY0luT3V0fTtzRi5FYXNlTmFtZT1pT2UubWFrZUVudW0oWyJsaW5lYXIiLCJxdWFkIiwicXVhZEluIiwicXVhZE91dCIsInF1YWRJbk91dCIsImN1YmljIiwiY3ViaWNJbiIsImN1YmljT3V0IiwiY3ViaWNJbk91dCIsInBvbHkiLCJwb2x5SW4iLCJwb2x5T3V0IiwicG9seUluT3V0Iiwic2luIiwic2luSW4iLCJzaW5PdXQiLCJzaW5Jbk91dCIsImV4cCIsImV4cEluIiwiZXhwT3V0IiwiZXhwSW5PdXQiLCJjaXJjbGUiLCJjaXJjbGVJbiIsImNpcmNsZU91dCIsImNpcmNsZUluT3V0IiwiYm91bmNlIiwiYm91bmNlSW4iLCJib3VuY2VPdXQiLCJib3VuY2VJbk91dCIsImJhY2siLCJiYWNrSW4iLCJiYWNrT3V0IiwiYmFja0luT3V0IiwiZWxhc3RpYyIsImVsYXN0aWNJbiIsImVsYXN0aWNPdXQiLCJlbGFzdGljSW5PdXQiXSk7dmFyIG9PZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9zdGFydERlbGF5PWUuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTLHRoaXMuX3N0ZXBEdXJhdGlvbj1lLl9ERUZBVUxUX1NURVBfRFVSQVRJT05fTUlMTElTRUNPTkRTLHRoaXMuX3N0ZXBEZWxheT1lLl9ERUZBVUxUX0lURVJBVElWRV9ERUxBWV9NSUxMSVNFQ09ORFMsdGhpcy5fbWF4VG90YWxEdXJhdGlvbj1lLl9ERUZBVUxUX01BWF9UT1RBTF9EVVJBVElPTl9NSUxMSVNFQ09ORFMsdGhpcy5fZWFzaW5nTW9kZT1lLl9ERUZBVUxUX0VBU0lOR19NT0RFfXJldHVybiBlLnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheSh0KTtyZXR1cm4gdGhpcy5zdGFydERlbGF5KCkrcipNYXRoLm1heCh0LTEsMCkrdGhpcy5zdGVwRHVyYXRpb24oKX0sZS5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7dD1uT2UuY29lcmNlRXh0ZXJuYWxEMyh0KTt2YXIgaT10LnNpemUoKSxvPXRoaXMuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXkoaSk7cmV0dXJuIHQudHJhbnNpdGlvbigpLmVhc2UodGhpcy5fZ2V0RWFzZUZhY3RvcnkoKSkuZHVyYXRpb24odGhpcy5zdGVwRHVyYXRpb24oKSkuZGVsYXkoZnVuY3Rpb24oYSxzKXtyZXR1cm4gbi5zdGFydERlbGF5KCkrbypzfSkuYXR0cnMocil9LGUucHJvdG90eXBlLnN0YXJ0RGVsYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fc3RhcnREZWxheToodGhpcy5fc3RhcnREZWxheT10LHRoaXMpfSxlLnByb3RvdHlwZS5zdGVwRHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/TWF0aC5taW4odGhpcy5fc3RlcER1cmF0aW9uLHRoaXMuX21heFRvdGFsRHVyYXRpb24pOih0aGlzLl9zdGVwRHVyYXRpb249dCx0aGlzKX0sZS5wcm90b3R5cGUuc3RlcERlbGF5PWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX3N0ZXBEZWxheToodGhpcy5fc3RlcERlbGF5PXQsdGhpcyl9LGUucHJvdG90eXBlLm1heFRvdGFsRHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fbWF4VG90YWxEdXJhdGlvbjoodGhpcy5fbWF4VG90YWxEdXJhdGlvbj10LHRoaXMpfSxlLnByb3RvdHlwZS5lYXNpbmdNb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2Vhc2luZ01vZGU6KHRoaXMuX2Vhc2luZ01vZGU9dCx0aGlzKX0sZS5wcm90b3R5cGUuX2dldEVhc2VGYWN0b3J5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lYXNpbmdNb2RlKCk7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXt2YXIgcj1ZanRbdF07cmV0dXJuIHI9PW51bGw/WWp0LmxpbmVhcjpyfWVsc2UgcmV0dXJuIHR9LGUucHJvdG90eXBlLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5PWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMubWF4VG90YWxEdXJhdGlvbigpLXRoaXMuc3RlcER1cmF0aW9uKCk7cj1NYXRoLm1heChyLDApO3ZhciBuPXIvTWF0aC5tYXgodC0xLDEpO3JldHVybiBNYXRoLm1pbih0aGlzLnN0ZXBEZWxheSgpLG4pfSxlLl9ERUZBVUxUX1NUQVJUX0RFTEFZX01JTExJU0VDT05EUz0wLGUuX0RFRkFVTFRfU1RFUF9EVVJBVElPTl9NSUxMSVNFQ09ORFM9MzAwLGUuX0RFRkFVTFRfSVRFUkFUSVZFX0RFTEFZX01JTExJU0VDT05EUz0xNSxlLl9ERUZBVUxUX01BWF9UT1RBTF9EVVJBVElPTl9NSUxMSVNFQ09ORFM9MS8wLGUuX0RFRkFVTFRfRUFTSU5HX01PREU9ImV4cE91dCIsZX0oKTtzRi5FYXNpbmc9b09lfSk7dmFyIFhqdD1IKHNpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYU9lPVlnKCksc09lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUudG90YWxUaW1lPWZ1bmN0aW9uKHQpe3JldHVybiAwfSxlLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQscil7cmV0dXJuIHQ9YU9lLmNvZXJjZUV4dGVybmFsRDModCksdC5hdHRycyhyKX0sZX0oKTtzaXQuTnVsbD1zT2V9KTt2YXIgTGY9SChsRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciAkanQ9KGRlKCksVXQocGUpKTskanQuX19leHBvcnRTdGFyKGpqdCgpLGxGKTskanQuX19leHBvcnRTdGFyKFhqdCgpLGxGKX0pO3ZhciBLanQ9SChsaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGxPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5jYWNoZT17fSx0aGlzLmNvbXB1dGU9dH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNhY2hlLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5jYWNoZVt0XT10aGlzLmNvbXB1dGUodCkpLHRoaXMuY2FjaGVbdF19LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FjaGU9e30sdGhpc30sZX0oKTtsaXQuQ2FjaGU9bE9lfSk7dmFyIFpqdD1IKGNpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoY2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgY09lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5hcnJheUVxPWZ1bmN0aW9uKHQscil7aWYodD09bnVsbHx8cj09bnVsbClyZXR1cm4gdD09PXI7aWYodC5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dIT09cltuXSlyZXR1cm4hMTtyZXR1cm4hMH0sZS5vYmpFcT1mdW5jdGlvbih0LHIpe2lmKHQ9PW51bGx8fHI9PW51bGwpcmV0dXJuIHQ9PT1yO3ZhciBuPU9iamVjdC5rZXlzKHQpLnNvcnQoKSxpPU9iamVjdC5rZXlzKHIpLnNvcnQoKSxvPW4ubWFwKGZ1bmN0aW9uKHMpe3JldHVybiB0W3NdfSksYT1pLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gcltzXX0pO3JldHVybiBlLmFycmF5RXEobixpKSYmZS5hcnJheUVxKG8sYSl9LGUuc3RyaWN0RXE9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD09PXJ9LGUuZGVmYXVsdHM9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07aWYodD09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QiKTt2YXIgaT1PYmplY3QodCk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvKXtpZihvIT1udWxsKWZvcih2YXIgYSBpbiBvKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLGEpJiYoaVthXT1vW2FdKX0pLGl9LGV9KCk7Y2l0Lk1ldGhvZHM9Y09lfSk7dmFyIEpqdD1IKHVpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodWl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdU9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5jb21iaW5lV2hpdGVzcGFjZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bIFx0XSsvZywiICIpfSxlLmlzTm90RW1wdHlTdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQudHJpbSgpIT09IiJ9LGUudHJpbVN0YXJ0PWZ1bmN0aW9uKHQscil7aWYoIXQpcmV0dXJuIHQ7dmFyIG49dC5zcGxpdCgiIiksaT1yP2Z1bmN0aW9uKG8pe3JldHVybiBvLnNwbGl0KHIpLnNvbWUoZS5pc05vdEVtcHR5U3RyaW5nKX06ZS5pc05vdEVtcHR5U3RyaW5nO3JldHVybiBuLnJlZHVjZShmdW5jdGlvbihvLGEpe3JldHVybiBpKG8rYSk/bythOm99LCIiKX0sZS50cmltRW5kPWZ1bmN0aW9uKHQscil7aWYoIXQpcmV0dXJuIHQ7dmFyIG49dC5zcGxpdCgiIik7cmV0dXJuIG4ucmV2ZXJzZSgpLG49ZS50cmltU3RhcnQobi5qb2luKCIiKSxyKS5zcGxpdCgiIiksbi5yZXZlcnNlKCksbi5qb2luKCIiKX0sZX0oKTt1aXQuU3RyaW5nTWV0aG9kcz11T2V9KTt2YXIgUWp0PUgoaGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5Xb3JkRGl2aWRlclJlZ0V4cD1uZXcgUmVnRXhwKCJcXFciKSx0aGlzLldoaXRlc3BhY2VSZWdFeHA9bmV3IFJlZ0V4cCgiXFxzIil9cmV0dXJuIGUucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXM7cmV0dXJuIHQuc3BsaXQoIiIpLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuLnNsaWNlKDAsLTEpLmNvbmNhdChyLnNob3VsZENyZWF0ZU5ld1Rva2VuKG5bbi5sZW5ndGgtMV0saSkpfSxbIiJdKX0sZS5wcm90b3R5cGUuc2hvdWxkQ3JlYXRlTmV3VG9rZW49ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm5bcl07dmFyIG49dFt0Lmxlbmd0aC0xXTtyZXR1cm4gdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3QobikmJnRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KHIpP1t0K3JdOnRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KG4pfHx0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChyKT9bdCxyXTp0aGlzLldvcmREaXZpZGVyUmVnRXhwLnRlc3Qobik/bj09PXI/W3Qrcl06W3Qscl06W3Qrcl19LGV9KCk7aGl0LlRva2VuaXplcj1oT2V9KTt2YXIgcFM9SChjRj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB1RihlKXtmb3IodmFyIHQgaW4gZSljRi5oYXNPd25Qcm9wZXJ0eSh0KXx8KGNGW3RdPWVbdF0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dUYoS2p0KCkpO3VGKFpqdCgpKTt1RihKanQoKSk7dUYoUWp0KCkpfSk7dmFyIGVYdD1IKGZpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdFh0PXBTKCksZk9lPXt0ZXh0Um90YXRpb246MCx0ZXh0U2hlYXI6MCx4QWxpZ246ImxlZnQiLHlBbGlnbjoidG9wIn0saEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXt0aGlzLl9tZWFzdXJlcj10LHRoaXMuX3BlbkZhY3Rvcnk9cix0aGlzLl93cmFwcGVyPW59cmV0dXJuIGUucHJvdG90eXBlLm1lYXN1cmVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tZWFzdXJlcj10LHRoaXN9LGUucHJvdG90eXBlLndyYXBwZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3dyYXBwZXI9dCx0aGlzfSxlLnByb3RvdHlwZS5wZW5GYWN0b3J5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wZW5GYWN0b3J5PXQsdGhpc30sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxyLG4saSxvKXtpZihpPT09dm9pZCAwJiYoaT17fSksaT10WHQuTWV0aG9kcy5kZWZhdWx0cyh7fSxmT2UsaSksZS5TdXBwb3J0ZWRSb3RhdGlvbi5pbmRleE9mKGkudGV4dFJvdGF0aW9uKT09PS0xKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgcm90YXRpb24gLSAiK2kudGV4dFJvdGF0aW9uKyIuIFN1cHBvcnRlZCByb3RhdGlvbnMgYXJlICIrZS5TdXBwb3J0ZWRSb3RhdGlvbi5qb2luKCIsICIpKTtpZihpLnRleHRTaGVhciE9bnVsbCYmaS50ZXh0U2hlYXI8LTgwfHxpLnRleHRTaGVhcj44MCl0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHNoZWFyIGFuZ2xlIC0gIitpLnRleHRTaGVhcisiLiBNdXN0IGJlIGJldHdlZW4gLTgwIGFuZCA4MCIpO3ZhciBhPU1hdGguYWJzKE1hdGguYWJzKGkudGV4dFJvdGF0aW9uKS05MCk+NDUscz1hP3I6bixsPWE/bjpyLGM9aS50ZXh0U2hlYXIsdT1jKk1hdGguUEkvMTgwLGg9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCxmPWgqTWF0aC50YW4odSkscD1zL01hdGguY29zKHUpLU1hdGguYWJzKGYpLGQ9bCpNYXRoLmNvcyh1KSxnPXRYdC5TdHJpbmdNZXRob2RzLmNvbWJpbmVXaGl0ZXNwYWNlKHQpLF89dGhpcy5fd3JhcHBlcj90aGlzLl93cmFwcGVyLndyYXAoZyx0aGlzLl9tZWFzdXJlcixwLGQpLndyYXBwZWRUZXh0OmcseT1fLnNwbGl0KGAKYCkseD1lLlhPZmZzZXRGYWN0b3JbaS54QWxpZ25dKnAqTWF0aC5zaW4odSksYj1lLllPZmZzZXRGYWN0b3JbaS55QWxpZ25dKihkLXkubGVuZ3RoKmgpLFM9eC1iLEM9WzAsMF0sUD1pLnRleHRSb3RhdGlvbitjO3N3aXRjaChpLnRleHRSb3RhdGlvbil7Y2FzZSA5MDpDPVtyK1MsMF07YnJlYWs7Y2FzZS05MDpDPVstUyxuXTticmVhaztjYXNlIDE4MDpDPVtyLG4rU107YnJlYWs7ZGVmYXVsdDpDPVswLC1TXTticmVha312YXIgaz10aGlzLl9wZW5GYWN0b3J5LmNyZWF0ZVBlbih0LHt0cmFuc2xhdGU6Qyxyb3RhdGU6UH0sbyk7dGhpcy53cml0ZUxpbmVzKHksayxwLGgsZixpLnhBbGlnbiksay5kZXN0cm95IT1udWxsJiZrLmRlc3Ryb3koKX0sZS5wcm90b3R5cGUud3JpdGVMaW5lcz1mdW5jdGlvbih0LHIsbixpLG8sYSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHMsbCl7dmFyIGM9bz4wPyhsKzEpKm86bCpvO3Iud3JpdGUocyxuLGEsYywobCsxKSppKX0pfSxlfSgpO2hGLlhPZmZzZXRGYWN0b3I9e2NlbnRlcjouNSxsZWZ0OjAscmlnaHQ6MX07aEYuWU9mZnNldEZhY3Rvcj17Ym90dG9tOjEsY2VudGVyOi41LHRvcDowfTtoRi5TdXBwb3J0ZWRSb3RhdGlvbj1bLTkwLDAsMTgwLDkwXTtmaXQuV3JpdGVyPWhGfSk7dmFyIHpBPUgoZkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcE9lKGUpe2Zvcih2YXIgdCBpbiBlKWZGLmhhc093blByb3BlcnR5KHQpfHwoZkZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGZGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtwT2UoZVh0KCkpfSk7dmFyIHBpdD1IKHBGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShwRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEZBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5hcHBlbmQ9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49W10saT0yO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbltpLTJdPWFyZ3VtZW50c1tpXTt2YXIgbz1lLmNyZWF0ZS5hcHBseShlLFtyXS5jb25jYXQobikpO3JldHVybiB0LmFwcGVuZENoaWxkKG8pLG99LGUuY3JlYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7cmV0dXJuIGUuYWRkQ2xhc3Nlcy5hcHBseShlLFtpXS5jb25jYXQocikpLGl9LGUuYWRkQ2xhc3Nlcz1mdW5jdGlvbih0KXtmb3IodmFyIHI9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTFdPWFyZ3VtZW50c1tuXTtyPXIuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpIT1udWxsfSksdC5jbGFzc0xpc3QhPW51bGw/ci5mb3JFYWNoKGZ1bmN0aW9uKGkpe3QuY2xhc3NMaXN0LmFkZChpKX0pOnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsci5qb2luKCIgIikpfSxlLmdldERpbWVuc2lvbnM9ZnVuY3Rpb24odCl7aWYodC5nZXRCb3VuZGluZ0NsaWVudFJlY3QpdHJ5e3ZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLndpZHRoLGk9ci5oZWlnaHQ7cmV0dXJue3dpZHRoOm4saGVpZ2h0Oml9fWNhdGNoKG8pe31yZXR1cm57aGVpZ2h0OjAsd2lkdGg6MH19LGV9KCk7cEYuSHRtbFV0aWxzPUZBO3ZhciBkT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXtuPT09dm9pZCAwJiYobj0hMSk7dmFyIGk9dGhpczt0aGlzLmVsZW1lbnQ9dCx0aGlzLmNsYXNzTmFtZT1yLHRoaXMuYWRkVGl0bGU9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBhPUZBLmFwcGVuZChpLmVsZW1lbnQsInNwYW4iLCJ0ZXh0LXRtcCIsaS5jbGFzc05hbWUpO2EudGV4dENvbnRlbnQ9bzt2YXIgcz1GQS5nZXREaW1lbnNpb25zKGEpO3JldHVybiBpLmVsZW1lbnQucmVtb3ZlQ2hpbGQoYSksc319LHRoaXMuY3JlYXRlUGVuPWZ1bmN0aW9uKG8sYSxzKXtzPT1udWxsJiYocz1pLmVsZW1lbnQpO3ZhciBsPUZBLmFwcGVuZChzLCJkaXYiLCJ0ZXh0LWJsb2NrIixpLmNsYXNzTmFtZSk7cmV0dXJuIGwuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixsLnN0eWxlLnRyYW5zZm9ybT0idHJhbnNsYXRlKDAsIC0xZW0pICIrKCJ0cmFuc2xhdGUoIithLnRyYW5zbGF0ZVswXSsicHgsICIrYS50cmFuc2xhdGVbMV0rInB4KSAiKSsoInJvdGF0ZSgiK2Eucm90YXRlKyJkZWcpIiksbC5zdHlsZS50cmFuc2Zvcm1PcmlnaW49IjAgMS4yZW0iLGkuYWRkVGl0bGUmJmwuc2V0QXR0cmlidXRlKCJ0aXRsZSIsbyksaS5jcmVhdGVIdG1sTGluZVBlbihsKX19cmV0dXJuIGUucHJvdG90eXBlLnNldEFkZFRpdGxlPWZ1bmN0aW9uKHQpe3RoaXMuYWRkVGl0bGU9dH0sZS5wcm90b3R5cGUuY3JlYXRlSHRtbExpbmVQZW49ZnVuY3Rpb24odCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKHIsbixpLG8sYSl7dmFyIHM9RkEuYXBwZW5kKHQsImRpdiIsInRleHQtbGluZSIpO3MudGV4dENvbnRlbnQ9cixzLnN0eWxlLndpZHRoPW4rInB4IixzLnN0eWxlLnRleHRBbGlnbj1pLHMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixzLnN0eWxlLndoaXRlU3BhY2U9Im5vd3JhcCIscy5zdHlsZS50b3A9YSsicHgiLHMuc3R5bGUubGVmdD1vKyJweCJ9fX0sZX0oKTtwRi5IdG1sQ29udGV4dD1kT2V9KTt2YXIgaVh0PUgoZEY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbU9lPXpBKCksclh0PXBpdCgpLGpnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5hcHBlbmQ9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49W10saT0yO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbltpLTJdPWFyZ3VtZW50c1tpXTt2YXIgbz1lLmNyZWF0ZS5hcHBseShlLFtyXS5jb25jYXQobikpO3JldHVybiB0LmFwcGVuZENoaWxkKG8pLG99LGUuY3JlYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLlNWR19OUyx0KTtyZXR1cm4gclh0Lkh0bWxVdGlscy5hZGRDbGFzc2VzLmFwcGx5KHJYdC5IdG1sVXRpbHMsW2ldLmNvbmNhdChyKSksaX0sZS5nZXREaW1lbnNpb25zPWZ1bmN0aW9uKHQpe2lmKHQuZ2V0QkJveCl0cnl7dmFyIHI9dC5nZXRCQm94KCksbj1yLndpZHRoLGk9ci5oZWlnaHQ7cmV0dXJue3dpZHRoOm4saGVpZ2h0Oml9fWNhdGNoKG8pe31yZXR1cm57aGVpZ2h0OjAsd2lkdGg6MH19LGV9KCk7amcuU1ZHX05TPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7ZEYuU3ZnVXRpbHM9amc7dmFyIG5YdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzO3RoaXMuZWxlbWVudD10LHRoaXMuY2xhc3NOYW1lPXIsdGhpcy5hZGRUaXRsZUVsZW1lbnQ9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7dmFyIG89aS5nZXRUZXh0RWxlbWVudHMoaS5lbGVtZW50KSxhPW8ucGFyZW50RWxlbWVudCxzPW8uY29udGFpbmVyRWxlbWVudCxsPW8udGV4dEVsZW1lbnQ7cmV0dXJuIGZ1bmN0aW9uKGMpe2EuYXBwZW5kQ2hpbGQocyksbC50ZXh0Q29udGVudD1jO3ZhciB1PWpnLmdldERpbWVuc2lvbnMobCk7cmV0dXJuIGEucmVtb3ZlQ2hpbGQocyksdX19LHRoaXMuY3JlYXRlUGVuPWZ1bmN0aW9uKG8sYSxzKXtzPT1udWxsJiYocz1pLmVsZW1lbnQpO3ZhciBsPWpnLmFwcGVuZChzLCJnIiwidGV4dC1jb250YWluZXIiLGkuY2xhc3NOYW1lKTtpLmFkZFRpdGxlRWxlbWVudCYmKGpnLmFwcGVuZChsLCJ0aXRsZSIpLnRleHRDb250ZW50PW8sbC5zZXRBdHRyaWJ1dGUoInRpdGxlIixvKSk7dmFyIGM9amcuYXBwZW5kKGwsImciLCJ0ZXh0LWFyZWEiKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2EudHJhbnNsYXRlWzBdKyIsIithLnRyYW5zbGF0ZVsxXSsiKSIrKCJyb3RhdGUoIithLnJvdGF0ZSsiKSIpKSxpLmNyZWF0ZVN2Z0xpbmVQZW4oYyl9fXJldHVybiBlLnByb3RvdHlwZS5zZXRBZGRUaXRsZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dGhpcy5hZGRUaXRsZUVsZW1lbnQ9dH0sZS5wcm90b3R5cGUuY3JlYXRlU3ZnTGluZVBlbj1mdW5jdGlvbih0KXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24ocixuLGksbyxhKXtvKz1uKm1PZS5Xcml0ZXIuWE9mZnNldEZhY3RvcltpXTt2YXIgcz1qZy5hcHBlbmQodCwidGV4dCIsInRleHQtbGluZSIpO3MudGV4dENvbnRlbnQ9cixzLnNldEF0dHJpYnV0ZSgidGV4dC1hbmNob3IiLGUuQW5jaG9yTWFwW2ldKSxzLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbysiLCIrYSsiKSIpLHMuc2V0QXR0cmlidXRlKCJ5IiwiLTAuMjVlbSIpfX19LGUucHJvdG90eXBlLmdldFRleHRFbGVtZW50cz1mdW5jdGlvbih0KXtpZih0LnRhZ05hbWU9PT0idGV4dCIpe3ZhciByPXQucGFyZW50RWxlbWVudDtyZXR1cm4gcj09bnVsbCYmKHI9dC5wYXJlbnROb2RlKSxyLnJlbW92ZUNoaWxkKHQpLHtjb250YWluZXJFbGVtZW50OnQscGFyZW50RWxlbWVudDpyLHRleHRFbGVtZW50OnR9fXZhciBuPXQucXVlcnlTZWxlY3RvcigidGV4dCIpO2lmKG4hPW51bGwpe3ZhciByPW4ucGFyZW50RWxlbWVudDtyZXR1cm4gcj09bnVsbCYmKHI9bi5wYXJlbnROb2RlKSxyLnJlbW92ZUNoaWxkKG4pLHtjb250YWluZXJFbGVtZW50Om4scGFyZW50RWxlbWVudDpyLHRleHRFbGVtZW50Om59fXZhciBpPWpnLmNyZWF0ZSgidGV4dCIsdGhpcy5jbGFzc05hbWUpO3JldHVybntjb250YWluZXJFbGVtZW50OmkscGFyZW50RWxlbWVudDp0LHRleHRFbGVtZW50Oml9fSxlfSgpO25YdC5BbmNob3JNYXA9e2NlbnRlcjoibWlkZGxlIixsZWZ0OiJzdGFydCIscmlnaHQ6ImVuZCJ9O2RGLlN2Z0NvbnRleHQ9blh0fSk7dmFyIG9YdD1IKGRpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZGl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ09lPXpBKCksX09lPSIjNDQ0Iix5T2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXtyPT09dm9pZCAwJiYocj0xMCksbj09PXZvaWQgMCYmKG49e30pO3ZhciBpPXRoaXM7dGhpcy5jdHg9dCx0aGlzLmxpbmVIZWlnaHQ9cix0aGlzLnN0eWxlPW4sdGhpcy5jcmVhdGVSdWxlcj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihvKXtpLmN0eC5mb250PWkuc3R5bGUuZm9udDt2YXIgYT1pLmN0eC5tZWFzdXJlVGV4dChvKS53aWR0aDtyZXR1cm57d2lkdGg6YSxoZWlnaHQ6aS5saW5lSGVpZ2h0fX19LHRoaXMuY3JlYXRlUGVuPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gcz09bnVsbCYmKHM9aS5jdHgpLHMuc2F2ZSgpLHMudHJhbnNsYXRlKGEudHJhbnNsYXRlWzBdLGEudHJhbnNsYXRlWzFdKSxzLnJvdGF0ZShhLnJvdGF0ZSpNYXRoLlBJLzE4MCksaS5jcmVhdGVDYW52YXNQZW4ocyl9LHRoaXMuc3R5bGUuZmlsbD09PXZvaWQgMCYmKHRoaXMuc3R5bGUuZmlsbD1fT2UpfXJldHVybiBlLnByb3RvdHlwZS5jcmVhdGVDYW52YXNQZW49ZnVuY3Rpb24odCl7dmFyIHI9dGhpcztyZXR1cm57ZGVzdHJveTpmdW5jdGlvbigpe3QucmVzdG9yZSgpfSx3cml0ZTpmdW5jdGlvbihuLGksbyxhLHMpe2ErPWkqZ09lLldyaXRlci5YT2Zmc2V0RmFjdG9yW29dLHQudGV4dEFsaWduPW8sci5zdHlsZS5mb250IT1udWxsJiYodC5mb250PXIuc3R5bGUuZm9udCksci5zdHlsZS5maWxsIT1udWxsJiYodC5maWxsU3R5bGU9ci5zdHlsZS5maWxsLHQuZmlsbFRleHQobixhLHMpKSxyLnN0eWxlLnN0cm9rZSE9bnVsbCYmKHQuc3Ryb2tlU3R5bGU9ci5zdHlsZS5maWxsLHQuc3Ryb2tlVGV4dChuLGEscykpfX19LGV9KCk7ZGl0LkNhbnZhc0NvbnRleHQ9eU9lfSk7dmFyIGdpdD1IKG1GPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG1pdChlKXtmb3IodmFyIHQgaW4gZSltRi5oYXNPd25Qcm9wZXJ0eSh0KXx8KG1GW3RdPWVbdF0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShtRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7bWl0KGlYdCgpKTttaXQob1h0KCkpO21pdChwaXQoKSl9KTt2YXIgZ0Y9SChfaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9pdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGFYdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dC5jcmVhdGVSdWxlciE9bnVsbD90aGlzLnJ1bGVyPXQuY3JlYXRlUnVsZXIoKTp0aGlzLnJ1bGVyPXR9cmV0dXJuIGUucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT12b2lkIDAmJih0PWUuSEVJR0hUX1RFWFQpLHRoaXMucnVsZXIodCl9LGV9KCk7YVh0LkhFSUdIVF9URVhUPSJiZHBxbCI7X2l0LkFic3RyYWN0TWVhc3VyZXI9YVh0fSk7dmFyIHlpdD1IKEJBPT57InVzZSBzdHJpY3QiO3ZhciB2T2U9QkEmJkJBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQkEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBfRj1nRigpLHhPZT1mdW5jdGlvbihlKXt2T2UodCxlKTtmdW5jdGlvbiB0KHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPWUuY2FsbCh0aGlzLHIpfHx0aGlzO3JldHVybiBpLnVzZUd1YXJkcz1uLGl9cmV0dXJuIHQucHJvdG90eXBlLl9hZGRHdWFyZHM9ZnVuY3Rpb24ocil7cmV0dXJuIF9GLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQrcitfRi5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUfSx0LnByb3RvdHlwZS5fbWVhc3VyZUxpbmU9ZnVuY3Rpb24ocixuKXtuPT09dm9pZCAwJiYobj0hMSk7dmFyIGk9dGhpcy51c2VHdWFyZHN8fG58fC9eW1x0IF0kLy50ZXN0KHIpLG89aT90aGlzLl9hZGRHdWFyZHMocik6cixhPWUucHJvdG90eXBlLm1lYXN1cmUuY2FsbCh0aGlzLG8pO3JldHVybiBhLndpZHRoLT1pPzIqdGhpcy5nZXRHdWFyZFdpZHRoKCk6MCxhfSx0LnByb3RvdHlwZS5tZWFzdXJlPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYocj09PXZvaWQgMCYmKHI9X0YuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCksci50cmltKCk9PT0iIilyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07dmFyIGk9ci50cmltKCkuc3BsaXQoYApgKS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVMaW5lKG8pfSk7cmV0dXJue2hlaWdodDppLnJlZHVjZShmdW5jdGlvbihvLGEpe3JldHVybiBvK2EuaGVpZ2h0fSwwKSx3aWR0aDppLnJlZHVjZShmdW5jdGlvbihvLGEpe3JldHVybiBNYXRoLm1heChvLGEud2lkdGgpfSwwKX19LHQucHJvdG90eXBlLmdldEd1YXJkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ndWFyZFdpZHRoPT1udWxsJiYodGhpcy5ndWFyZFdpZHRoPWUucHJvdG90eXBlLm1lYXN1cmUuY2FsbCh0aGlzKS53aWR0aCksdGhpcy5ndWFyZFdpZHRofSx0fShfRi5BYnN0cmFjdE1lYXN1cmVyKTtCQS5NZWFzdXJlcj14T2V9KTt2YXIgdml0PUgoSEE9PnsidXNlIHN0cmljdCI7dmFyIGJPZT1IQSYmSEEuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LHIpe3QuX19wcm90b19fPXJ9fHxmdW5jdGlvbih0LHIpe2Zvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0W25dPXJbbl0pfTtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQscik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1yPT09bnVsbD9PYmplY3QuY3JlYXRlKHIpOihuLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbil9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHdPZT15aXQoKSxTT2U9ZnVuY3Rpb24oZSl7Yk9lKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLl9tZWFzdXJlQ2hhcmFjdGVyPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5fbWVhc3VyZUxpbmUuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fbWVhc3VyZUxpbmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXIuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbWVhc3VyZUNoYXJhY3RlcihvKX0pO3JldHVybntoZWlnaHQ6aS5yZWR1Y2UoZnVuY3Rpb24obyxhKXtyZXR1cm4gTWF0aC5tYXgobyxhLmhlaWdodCl9LDApLHdpZHRoOmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIG8rYS53aWR0aH0sMCl9fSx0fSh3T2UuTWVhc3VyZXIpO0hBLkNoYXJhY3Rlck1lYXN1cmVyPVNPZX0pO3ZhciB4aXQ9SChWQT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTU9lPVZBJiZWQS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQscil7dC5fX3Byb3RvX189cn18fGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09cltuXSl9O3JldHVybiBmdW5jdGlvbih0LHIpe2UodCxyKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXQucHJvdG90eXBlPXI9PT1udWxsP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFZBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRU9lPXBTKCksVE9lPXZpdCgpLENPZT1mdW5jdGlvbihlKXtNT2UodCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMscixuKXx8dGhpcztyZXR1cm4gaS5jYWNoZT1uZXcgRU9lLkNhY2hlKGZ1bmN0aW9uKG8pe3JldHVybiBpLl9tZWFzdXJlQ2hhcmFjdGVyTm90RnJvbUNhY2hlKG8pfSksaX1yZXR1cm4gdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXJOb3RGcm9tQ2FjaGU9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9tZWFzdXJlQ2hhcmFjdGVyLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuY2FjaGUuZ2V0KHIpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuY2FjaGUuY2xlYXIoKX0sdH0oVE9lLkNoYXJhY3Rlck1lYXN1cmVyKTtWQS5DYWNoZUNoYXJhY3Rlck1lYXN1cmVyPUNPZX0pO3ZhciBzWHQ9SChVQT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQU9lPVVBJiZVQS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQscil7dC5fX3Byb3RvX189cn18fGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09cltuXSl9O3JldHVybiBmdW5jdGlvbih0LHIpe2UodCxyKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXQucHJvdG90eXBlPXI9PT1udWxsP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFVBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUE9lPXBTKCksSU9lPWdGKCksTE9lPXhpdCgpLGtPZT1mdW5jdGlvbihlKXtBT2UodCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzLHIpfHx0aGlzO3JldHVybiBuLmRpbUNhY2hlPW5ldyBQT2UuQ2FjaGUoZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVOb3RGcm9tQ2FjaGUoaSl9KSxufXJldHVybiB0LnByb3RvdHlwZS5fbWVhc3VyZU5vdEZyb21DYWNoZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT12b2lkIDAmJihyPUlPZS5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUKSx0aGlzLmRpbUNhY2hlLmdldChyKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmRpbUNhY2hlLmNsZWFyKCksZS5wcm90b3R5cGUucmVzZXQuY2FsbCh0aGlzKX0sdH0oTE9lLkNhY2hlQ2hhcmFjdGVyTWVhc3VyZXIpO1VBLkNhY2hlTWVhc3VyZXI9a09lfSk7dmFyIGJpdD1IKHlGPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHFBKGUpe2Zvcih2YXIgdCBpbiBlKXlGLmhhc093blByb3BlcnR5KHQpfHwoeUZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHlGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtxQShnRigpKTtxQSh4aXQoKSk7cUEoc1h0KCkpO3FBKHZpdCgpKTtxQSh5aXQoKSl9KTt2YXIgU2l0PUgod2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBHQT1wUygpLFJPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm1heExpbmVzKDEvMCksdGhpcy50ZXh0VHJpbW1pbmcoImVsbGlwc2lzIiksdGhpcy5hbGxvd0JyZWFraW5nV29yZHMoITEpLHRoaXMuX3Rva2VuaXplcj1uZXcgR0EuVG9rZW5pemVyLHRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyPSItIn1yZXR1cm4gZS5wcm90b3R5cGUubWF4TGluZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fbWF4TGluZXM6KHRoaXMuX21heExpbmVzPXQsdGhpcyl9LGUucHJvdG90eXBlLnRleHRUcmltbWluZz1mdW5jdGlvbih0KXtpZih0PT1udWxsKXJldHVybiB0aGlzLl90ZXh0VHJpbW1pbmc7aWYodCE9PSJlbGxpcHNpcyImJnQhPT0ibm9uZSIpdGhyb3cgbmV3IEVycm9yKHQrIiAtIHVuc3VwcG9ydGVkIHRleHQgdHJpbW1pbmcgb3B0aW9uLiIpO3JldHVybiB0aGlzLl90ZXh0VHJpbW1pbmc9dCx0aGlzfSxlLnByb3RvdHlwZS5hbGxvd0JyZWFraW5nV29yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fYWxsb3dCcmVha2luZ1dvcmRzOih0aGlzLl9hbGxvd0JyZWFraW5nV29yZHM9dCx0aGlzKX0sZS5wcm90b3R5cGUud3JhcD1mdW5jdGlvbih0LHIsbixpKXt2YXIgbz10aGlzO2k9PT12b2lkIDAmJihpPTEvMCk7dmFyIGE9e25vQnJva2VXb3JkczowLG5vTGluZXM6MCxvcmlnaW5hbFRleHQ6dCx0cnVuY2F0ZWRUZXh0OiIiLHdyYXBwZWRUZXh0OiIifSxzPXthdmFpbGFibGVMaW5lczpNYXRoLm1pbihNYXRoLmZsb29yKGkvci5tZWFzdXJlKCkuaGVpZ2h0KSx0aGlzLl9tYXhMaW5lcyksYXZhaWxhYmxlV2lkdGg6bixjYW5GaXRUZXh0OiEwLGN1cnJlbnRMaW5lOiIiLHdyYXBwaW5nOmF9LGw9dC5zcGxpdChgCmApO3JldHVybiBsLnJlZHVjZShmdW5jdGlvbihjLHUsaCl7cmV0dXJuIG8uYnJlYWtMaW5lVG9GaXRXaWR0aChjLHUsaCE9PWwubGVuZ3RoLTEscil9LHMpLndyYXBwaW5nfSxlLnByb3RvdHlwZS5icmVha0xpbmVUb0ZpdFdpZHRoPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBvPXRoaXM7IXQuY2FuRml0VGV4dCYmdC53cmFwcGluZy50cnVuY2F0ZWRUZXh0IT09IiImJih0LndyYXBwaW5nLnRydW5jYXRlZFRleHQrPWAKYCk7dmFyIGE9dGhpcy5fdG9rZW5pemVyLnRva2VuaXplKHIpO3Q9YS5yZWR1Y2UoZnVuY3Rpb24obCxjKXtyZXR1cm4gby53cmFwTmV4dFRva2VuKGMsbCxpKX0sdCk7dmFyIHM9R0EuU3RyaW5nTWV0aG9kcy50cmltRW5kKHQuY3VycmVudExpbmUpO3JldHVybiB0LndyYXBwaW5nLm5vTGluZXMrPSsocyE9PSIiKSx0LndyYXBwaW5nLm5vTGluZXM9PT10LmF2YWlsYWJsZUxpbmVzJiZ0aGlzLl90ZXh0VHJpbW1pbmchPT0ibm9uZSImJm4/dC5jYW5GaXRUZXh0PSExOnQud3JhcHBpbmcud3JhcHBlZFRleHQrPXMsdC5jdXJyZW50TGluZT1gCmAsdH0sZS5wcm90b3R5cGUuY2FuRml0VG9rZW49ZnVuY3Rpb24odCxyLG4pe3ZhciBpPXRoaXMsbz10LnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oYSxzKXtyZXR1cm4gcyE9PXQubGVuZ3RoLTE/YStpLl9icmVha2luZ0NoYXJhY3RlcjphfSk7cmV0dXJuIG4ubWVhc3VyZSh0KS53aWR0aDw9cnx8by5ldmVyeShmdW5jdGlvbihhKXtyZXR1cm4gbi5tZWFzdXJlKGEpLndpZHRoPD1yfSl9LGUucHJvdG90eXBlLmFkZEVsbGlwc2lzPWZ1bmN0aW9uKHQscixuKXtpZih0aGlzLl90ZXh0VHJpbW1pbmc9PT0ibm9uZSIpcmV0dXJue3JlbWFpbmluZ1Rva2VuOiIiLHdyYXBwZWRUb2tlbjp0fTt2YXIgaT10LnN1YnN0cmluZygwKS50cmltKCksbz1uLm1lYXN1cmUoaSkud2lkdGgsYT1uLm1lYXN1cmUoIi4uLiIpLndpZHRoLHM9dC5sZW5ndGg+MCYmdFswXT09PWAKYD9gCmA6IiI7aWYocjw9YSl7dmFyIGw9YS8zLGM9TWF0aC5mbG9vcihyL2wpO3JldHVybntyZW1haW5pbmdUb2tlbjp0LHdyYXBwZWRUb2tlbjpzKyIuLi4iLnN1YnN0cigwLGMpfX1mb3IoO28rYT5yOylpPUdBLlN0cmluZ01ldGhvZHMudHJpbUVuZChpLnN1YnN0cigwLGkubGVuZ3RoLTEpKSxvPW4ubWVhc3VyZShpKS53aWR0aDtyZXR1cm57cmVtYWluaW5nVG9rZW46R0EuU3RyaW5nTWV0aG9kcy50cmltRW5kKHQuc3Vic3RyaW5nKGkubGVuZ3RoKSwiLSIpLnRyaW0oKSx3cmFwcGVkVG9rZW46cytpKyIuLi4ifX0sZS5wcm90b3R5cGUud3JhcE5leHRUb2tlbj1mdW5jdGlvbih0LHIsbil7aWYoIXIuY2FuRml0VGV4dHx8ci5hdmFpbGFibGVMaW5lcz09PXIud3JhcHBpbmcubm9MaW5lc3x8IXRoaXMuY2FuRml0VG9rZW4odCxyLmF2YWlsYWJsZVdpZHRoLG4pKXJldHVybiB0aGlzLmZpbmlzaFdyYXBwaW5nKHQscixuKTtmb3IodmFyIGk9dDtpOyl7dmFyIG89dGhpcy5icmVha1Rva2VuVG9GaXRJbldpZHRoKGksci5jdXJyZW50TGluZSxyLmF2YWlsYWJsZVdpZHRoLG4pO2lmKHIuY3VycmVudExpbmU9by5saW5lLGk9by5yZW1haW5pbmdUb2tlbixpIT1udWxsKWlmKHIud3JhcHBpbmcubm9Ccm9rZVdvcmRzKz0rby5icmVha1dvcmQsKytyLndyYXBwaW5nLm5vTGluZXMsci5hdmFpbGFibGVMaW5lcz09PXIud3JhcHBpbmcubm9MaW5lcyl7dmFyIGE9dGhpcy5hZGRFbGxpcHNpcyhyLmN1cnJlbnRMaW5lLHIuYXZhaWxhYmxlV2lkdGgsbik7cmV0dXJuIHIud3JhcHBpbmcud3JhcHBlZFRleHQrPWEud3JhcHBlZFRva2VuLHIud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9YS5yZW1haW5pbmdUb2tlbitpLHIuY3VycmVudExpbmU9YApgLHJ9ZWxzZSByLndyYXBwaW5nLndyYXBwZWRUZXh0Kz1HQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQoci5jdXJyZW50TGluZSksci5jdXJyZW50TGluZT1gCmB9cmV0dXJuIHJ9LGUucHJvdG90eXBlLmZpbmlzaFdyYXBwaW5nPWZ1bmN0aW9uKHQscixuKXtpZihyLmNhbkZpdFRleHQmJnIuYXZhaWxhYmxlTGluZXMhPT1yLndyYXBwaW5nLm5vTGluZXMmJnRoaXMuX3RleHRUcmltbWluZyE9PSJub25lIil7dmFyIGk9dGhpcy5hZGRFbGxpcHNpcyhyLmN1cnJlbnRMaW5lK3Qsci5hdmFpbGFibGVXaWR0aCxuKTtyLndyYXBwaW5nLndyYXBwZWRUZXh0Kz1pLndyYXBwZWRUb2tlbixyLndyYXBwaW5nLnRydW5jYXRlZFRleHQrPWkucmVtYWluaW5nVG9rZW4sci53cmFwcGluZy5ub0Jyb2tlV29yZHMrPSsoaS5yZW1haW5pbmdUb2tlbi5sZW5ndGg8dC5sZW5ndGgpLHIud3JhcHBpbmcubm9MaW5lcys9KyhpLndyYXBwZWRUb2tlbi5sZW5ndGg+MCksci5jdXJyZW50TGluZT0iIn1lbHNlIHIud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9dDtyZXR1cm4gci5jYW5GaXRUZXh0PSExLHJ9LGUucHJvdG90eXBlLmJyZWFrVG9rZW5Ub0ZpdEluV2lkdGg9ZnVuY3Rpb24odCxyLG4saSxvKXtpZihvPT09dm9pZCAwJiYobz10aGlzLl9icmVha2luZ0NoYXJhY3RlciksaS5tZWFzdXJlKHIrdCkud2lkdGg8PW4pcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIrdCxyZW1haW5pbmdUb2tlbjpudWxsfTtpZih0LnRyaW0oKT09PSIiKXJldHVybnticmVha1dvcmQ6ITEsbGluZTpyLHJlbWFpbmluZ1Rva2VuOiIifTtpZighdGhpcy5fYWxsb3dCcmVha2luZ1dvcmRzJiZyLnRyaW0oKSE9PSIiKXJldHVybnticmVha1dvcmQ6ITEsbGluZTpyLHJlbWFpbmluZ1Rva2VuOnR9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGgmJmkubWVhc3VyZShyK3Quc3Vic3RyaW5nKDAsYSsxKStvKS53aWR0aDw9bjspKythO3ZhciBzPSIiO3JldHVybiBhPjAmJihzPW8pLHticmVha1dvcmQ6YT4wLGxpbmU6cit0LnN1YnN0cmluZygwLGEpK3MscmVtYWluaW5nVG9rZW46dC5zdWJzdHJpbmcoYSl9fSxlfSgpO3dpdC5XcmFwcGVyPVJPZX0pO3ZhciBjWHQ9SChXQT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTk9lPVdBJiZXQS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQscil7dC5fX3Byb3RvX189cn18fGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09cltuXSl9O3JldHVybiBmdW5jdGlvbih0LHIpe2UodCxyKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXQucHJvdG90eXBlPXI9PT1udWxsP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFdBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRE9lPVNpdCgpLGxYdD1mdW5jdGlvbihlKXtOT2UodCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihyLG4saSxvKXt2YXIgYT10aGlzO289PT12b2lkIDAmJihvPTEvMCk7dmFyIHM9ci5zcGxpdChgCmApO2lmKHMubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJTaW5nbGVMaW5lV3JhcHBlciBpcyBkZXNpZ25lZCB0byB3b3JrIG9ubHkgb24gc2luZ2xlIGxpbmUiKTt2YXIgbD1mdW5jdGlvbihnKXtyZXR1cm4gZS5wcm90b3R5cGUud3JhcC5jYWxsKGEscixuLGcsbyl9LGM9bChpKTtpZihjLm5vTGluZXM8MilyZXR1cm4gYztmb3IodmFyIHU9MCxoPWksZj0wO2Y8dC5OT19XUkFQX0lURVJBVElPTlMmJmg+dTsrK2Ype3ZhciBwPShoK3UpLzIsZD1sKHApO3RoaXMuYXJlU2FtZVJlc3VsdHMoYyxkKT8oaD1wLGM9ZCk6dT1wfXJldHVybiBjfSx0LnByb3RvdHlwZS5hcmVTYW1lUmVzdWx0cz1mdW5jdGlvbihyLG4pe3JldHVybiByLm5vTGluZXM9PT1uLm5vTGluZXMmJnIudHJ1bmNhdGVkVGV4dD09PW4udHJ1bmNhdGVkVGV4dH0sdH0oRE9lLldyYXBwZXIpO2xYdC5OT19XUkFQX0lURVJBVElPTlM9NTtXQS5TaW5nbGVMaW5lV3JhcHBlcj1sWHR9KTt2YXIgTWl0PUgodkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdVh0KGUpe2Zvcih2YXIgdCBpbiBlKXZGLmhhc093blByb3BlcnR5KHQpfHwodkZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHZGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt1WHQoY1h0KCkpO3VYdChTaXQoKSl9KTt2YXIgaFh0PUgoVGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShUaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBFaXQ9Z2l0KCksT09lPWJpdCgpLHpPZT1NaXQoKSxGT2U9ekEoKSxCT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXMuY29udGV4dD10LHRoaXMubWVhc3VyZXI9bmV3IE9PZS5DYWNoZU1lYXN1cmVyKHRoaXMuY29udGV4dCksdGhpcy53cmFwcGVyPW5ldyB6T2UuV3JhcHBlcix0aGlzLndyaXRlcj1uZXcgRk9lLldyaXRlcih0aGlzLm1lYXN1cmVyLHRoaXMuY29udGV4dCx0aGlzLndyYXBwZXIpfXJldHVybiBlLnN2Zz1mdW5jdGlvbih0LHIsbil7cmV0dXJuIG5ldyBlKG5ldyBFaXQuU3ZnQ29udGV4dCh0LHIsbikpfSxlLmNhbnZhcz1mdW5jdGlvbih0LHIsbil7cmV0dXJuIG5ldyBlKG5ldyBFaXQuQ2FudmFzQ29udGV4dCh0LHIsbikpfSxlLmh0bWw9ZnVuY3Rpb24odCxyLG4pe3JldHVybiBuZXcgZShuZXcgRWl0Lkh0bWxDb250ZXh0KHQscixuKSl9LGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQscixuLGksbyl7dGhpcy53cml0ZXIud3JpdGUodCxyLG4saSxvKX0sZS5wcm90b3R5cGUuY2xlYXJNZWFzdXJlckNhY2hlPWZ1bmN0aW9uKCl7dGhpcy5tZWFzdXJlci5yZXNldCgpfSxlfSgpO1RpdC5UeXBlc2V0dGVyPUJPZX0pO3ZhciBfbD1IKHhGPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGRTKGUpe2Zvcih2YXIgdCBpbiBlKXhGLmhhc093blByb3BlcnR5KHQpfHwoeEZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHhGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtkUyhnaXQoKSk7ZFMoYml0KCkpO2RTKGhYdCgpKTtkUyhwUygpKTtkUyhNaXQoKSk7ZFMoekEoKSl9KTt2YXIgZlh0PUgobVM9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1TLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSE9lPShFcigpLFV0KE1yKSksVk9lPXdpbmRvdy5BcnJheTtmdW5jdGlvbiBVT2UoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYXR0ZW1wdGVkIHRvIGFkZCBhcnJheXMgb2YgdW5lcXVhbCBsZW5ndGgiKTtyZXR1cm4gZS5tYXAoZnVuY3Rpb24ocixuKXtyZXR1cm4gZVtuXSt0W25dfSl9bVMuYWRkPVVPZTtmdW5jdGlvbiBxT2UoZSl7dmFyIHQ9SE9lLnNldCgpLHI9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXt0LmhhcyhTdHJpbmcobikpfHwodC5hZGQoU3RyaW5nKG4pKSxyLnB1c2gobikpfSkscn1tUy51bmlxPXFPZTtmdW5jdGlvbiBHT2UoZSl7cmV0dXJuIFZPZS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfW1TLmZsYXR0ZW49R09lO2Z1bmN0aW9uIFdPZShlLHQpe2Zvcih2YXIgcj1bXSxuPTA7bjx0O24rKylyW25dPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6ZTtyZXR1cm4gcn1tUy5jcmVhdGVGaWxsZWRBcnJheT1XT2V9KTt2YXIgbVh0PUgoWUE9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFlBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZFh0PShFcigpLFV0KE1yKSksWU9lPXdpbmRvdy5NYXRoO2Z1bmN0aW9uIGpPZShlLHQpe3ZhciByPXBYdChlKSsuMDUsbj1wWHQodCkrLjA1O3JldHVybiByPm4/ci9uOm4vcn1ZQS5jb250cmFzdD1qT2U7ZnVuY3Rpb24gWE9lKGUsdCl7dmFyIHI9ZFh0LmNvbG9yKGUpLmJyaWdodGVyKHQpO3JldHVybiByLnJnYigpLnRvU3RyaW5nKCl9WUEubGlnaHRlbkNvbG9yPVhPZTtmdW5jdGlvbiAkT2UoZSx0KXtlLmNsYXNzZWQodCwhMCk7dmFyIHI9ZS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIpO2lmKHI9PT0idHJhbnNwYXJlbnQiKXJldHVybiBudWxsO3ZhciBuPS9cKCguKylcKS8uZXhlYyhyKTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1uWzFdLnNwbGl0KCIsIikubWFwKGZ1bmN0aW9uKGEpe3ZhciBzPSthLGw9cy50b1N0cmluZygxNik7cmV0dXJuIHM8MTY/IjAiK2w6bH0pO2lmKGkubGVuZ3RoPT09NCYmaVszXT09PSIwMCIpcmV0dXJuIG51bGw7dmFyIG89IiMiK2kuam9pbigiIik7cmV0dXJuIGUuY2xhc3NlZCh0LCExKSxvfVlBLmNvbG9yVGVzdD0kT2U7ZnVuY3Rpb24gcFh0KGUpe3ZhciB0PWRYdC5yZ2IoZSkscj1mdW5jdGlvbihhKXtyZXR1cm4gYT1hLzI1NSxhPD0uMDM5Mjg/YS8xMi45MjpZT2UucG93KChhKy4wNTUpLzEuMDU1LDIuNCl9LG49cih0LnIpLGk9cih0LmcpLG89cih0LmIpO3JldHVybiAuMjEyNipuKy43MTUyKmkrLjA3MjIqb319KTt2YXIgQWl0PUgoYW89PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQ2l0PShFcigpLFV0KE1yKSksbWE9d2luZG93Lk1hdGg7ZnVuY3Rpb24gS09lKGUsdCl7Zm9yKHZhciByPXQ7ciE9bnVsbCYmciE9PWU7KXI9ci5wYXJlbnROb2RlO3JldHVybiByPT09ZX1hby5jb250YWlucz1LT2U7ZnVuY3Rpb24gX1h0KGUpe3ZhciB0O3RyeXt0PWUubm9kZSgpLmdldEJCb3goKX1jYXRjaChyKXt0PXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9fXJldHVybiB0fWFvLmVsZW1lbnRCQm94PV9YdDtmdW5jdGlvbiBaT2UoZSl7aWYoZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpcmV0dXJuIF9YdChDaXQuc2VsZWN0KGUpKTtpZihlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3g6dC5sZWZ0LHk6dC50b3Asd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fWVsc2UgcmV0dXJue3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19YW8uZW50aXR5Qm91bmRzPVpPZTthby5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUz0xZTMvNjA7ZnVuY3Rpb24gSk9lKGUpe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUhPW51bGw/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKTpzZXRUaW1lb3V0KGUsYW8uU0NSRUVOX1JFRlJFU0hfUkFURV9NSUxMSVNFQ09ORFMpfWFvLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsPUpPZTtmdW5jdGlvbiBRT2UoZSl7dmFyIHQ9ZSBpbnN0YW5jZW9mIENpdC5zZWxlY3Rpb24/ZS5ub2RlKCk6ZSxyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpO3JldHVybiBrZihyLCJ3aWR0aCIpK2tmKHIsInBhZGRpbmctbGVmdCIpK2tmKHIsInBhZGRpbmctcmlnaHQiKStrZihyLCJib3JkZXItbGVmdC13aWR0aCIpK2tmKHIsImJvcmRlci1yaWdodC13aWR0aCIpfWFvLmVsZW1lbnRXaWR0aD1RT2U7ZnVuY3Rpb24gdDdlKGUpe3ZhciB0PWUgaW5zdGFuY2VvZiBDaXQuc2VsZWN0aW9uP2Uubm9kZSgpOmUscj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTtyZXR1cm4ga2YociwiaGVpZ2h0Iikra2YociwicGFkZGluZy10b3AiKStrZihyLCJwYWRkaW5nLWJvdHRvbSIpK2tmKHIsImJvcmRlci10b3Atd2lkdGgiKStrZihyLCJib3JkZXItYm90dG9tLXdpZHRoIil9YW8uZWxlbWVudEhlaWdodD10N2U7dmFyIExjPSJcXHMiLGpBPSIoPzpbLStdP1swLTldKlxcLj9bMC05XSspIix5WHQ9Iig/Oig/OiIrTGMrIissPyIrTGMrIiopfCg/OiwiK0xjKyIqKSkiLGU3ZT1uZXcgUmVnRXhwKCJ0cmFuc2xhdGUiK0xjKyIqXFwoIitMYysiKigiK2pBKyIpKD86Iit5WHQrIigiK2pBKyIpKT8iK0xjKyIqXFwpIikscjdlPW5ldyBSZWdFeHAoInJvdGF0ZSIrTGMrIipcXCgiK0xjKyIqKCIrakErIikiK0xjKyIqXFwpIiksbjdlPW5ldyBSZWdFeHAoInNjYWxlIitMYysiKlxcKCIrTGMrIiooIitqQSsiKSg/OiIreVh0KyIoIitqQSsiKSk/IitMYysiKlxcKSIpO2Z1bmN0aW9uIGk3ZShlKXt2YXIgdD1lN2UuZXhlYyhlLmF0dHIoInRyYW5zZm9ybSIpKTtpZih0IT1udWxsKXt2YXIgcj10WzFdLG49dFsyXSxpPW49PT12b2lkIDA/MDpuO3JldHVyblsrciwraV19ZWxzZSByZXR1cm5bMCwwXX1hby5nZXRUcmFuc2xhdGVWYWx1ZXM9aTdlO2Z1bmN0aW9uIG83ZShlKXt2YXIgdD1yN2UuZXhlYyhlLmF0dHIoInRyYW5zZm9ybSIpKTtpZih0IT1udWxsKXt2YXIgcj10WzFdO3JldHVybityfWVsc2UgcmV0dXJuIDB9YW8uZ2V0Um90YXRlPW83ZTtmdW5jdGlvbiBhN2UoZSl7dmFyIHQ9bjdlLmV4ZWMoZS5hdHRyKCJ0cmFuc2Zvcm0iKSk7aWYodCE9bnVsbCl7dmFyIHI9dFsxXSxuPXRbMl07cmV0dXJuWytyLG49PW51bGw/K3I6K25dfWVsc2UgcmV0dXJuWzAsMF19YW8uZ2V0U2NhbGVWYWx1ZXM9YTdlO2Z1bmN0aW9uIHM3ZShlLHQpe3JldHVybiEobWEuZmxvb3IoZS5yaWdodCk8PW1hLmNlaWwodC5sZWZ0KXx8bWEuY2VpbChlLmxlZnQpPj1tYS5mbG9vcih0LnJpZ2h0KXx8bWEuZmxvb3IoZS5ib3R0b20pPD1tYS5jZWlsKHQudG9wKXx8bWEuY2VpbChlLnRvcCk+PW1hLmZsb29yKHQuYm90dG9tKSl9YW8uY2xpZW50UmVjdHNPdmVybGFwPXM3ZTtmdW5jdGlvbiBsN2UoZSx0KXtyZXR1cm57bGVmdDplLmxlZnQtdCx0b3A6ZS50b3AtdCxyaWdodDplLnJpZ2h0K3QsYm90dG9tOmUuYm90dG9tK3Qsd2lkdGg6ZS53aWR0aCt0KjIsaGVpZ2h0OmUuaGVpZ2h0K3QqMn19YW8uZXhwYW5kUmVjdD1sN2U7ZnVuY3Rpb24gYzdlKGUsdCl7cmV0dXJuIG1hLmZsb29yKHQubGVmdCk8PW1hLmNlaWwoZS5sZWZ0KSYmbWEuZmxvb3IodC50b3ApPD1tYS5jZWlsKGUudG9wKSYmbWEuZmxvb3IoZS5yaWdodCk8PW1hLmNlaWwodC5yaWdodCkmJm1hLmZsb29yKGUuYm90dG9tKTw9bWEuY2VpbCh0LmJvdHRvbSl9YW8uY2xpZW50UmVjdEluc2lkZT1jN2U7ZnVuY3Rpb24gdTdlKGUsdCxyLG4pe249PT12b2lkIDAmJihuPS41KTt2YXIgaT1nWHQoZSksbz1nWHQodCk7cmV0dXJuIHIueCtyLndpZHRoPj1pLm1pbi1uJiZyLng8PWkubWF4K24mJnIueStyLmhlaWdodD49by5taW4tbiYmci55PD1vLm1heCtufWFvLmludGVyc2VjdHNCQm94PXU3ZTtmdW5jdGlvbiBnWHQoZSl7aWYodHlwZW9mIGU9PSJudW1iZXIiKXt2YXIgdD1lO3JldHVybnttaW46dCxtYXg6dH19dmFyIHI9ZTtpZihyIGluc3RhbmNlb2YgT2JqZWN0JiYibWluImluIHImJiJtYXgiaW4gcilyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoImlucHV0ICciK2UrIicgY2FuJ3QgYmUgcGFyc2VkIGFzIGFuIFJhbmdlIil9ZnVuY3Rpb24ga2YoZSx0KXt2YXIgcj1lLmdldFByb3BlcnR5VmFsdWUodCksbj1wYXJzZUZsb2F0KHIpO3JldHVybiBufHwwfWZ1bmN0aW9uIGg3ZShlKXtmb3IodmFyIHQ9W107ZSYmZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50Oyl0LnB1c2goZSksZT1lLnBhcmVudEVsZW1lbnQ7cmV0dXJuIHR9YW8uZ2V0SHRtbEVsZW1lbnRBbmNlc3RvcnM9aDdlO2Z1bmN0aW9uIGY3ZShlKXt2YXIgdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLHI9dC5nZXRQcm9wZXJ0eVZhbHVlKCItd2Via2l0LXRyYW5zZm9ybSIpfHx0LmdldFByb3BlcnR5VmFsdWUoIi1tb3otdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW1zLXRyYW5zZm9ybSIpfHx0LmdldFByb3BlcnR5VmFsdWUoIi1vLXRyYW5zZm9ybSIpfHx0LmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpO3JldHVybiBtN2Uocil9YW8uZ2V0RWxlbWVudFRyYW5zZm9ybT1mN2U7dmFyIHA3ZT0vXm1hdHJpeFwoKFteKV0rKVwpJC8sZDdlPS9bLCBdKy87ZnVuY3Rpb24gbTdlKGUpe2lmKGU9PW51bGx8fGU9PT0ibm9uZSIpcmV0dXJuIG51bGw7dmFyIHQ9ZS5tYXRjaChwN2UpO2lmKHQ9PW51bGx8fHQubGVuZ3RoPDIpcmV0dXJuIG51bGw7dmFyIHI9dFsxXS5zcGxpdChkN2UpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gcGFyc2VGbG9hdChuKX0pO3JldHVybiByLmxlbmd0aCE9Nj9udWxsOnJ9fSk7dmFyIFBpdD1IKHNvPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzbywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHdGPShFcigpLFV0KE1yKSksdlh0PUFpdCgpLG1kPXdpbmRvdy5NYXRoLGc3ZT1bMSwwLDAsMSwwLDBdO2Z1bmN0aW9uIF83ZShlLHQscil7cmV0dXJuIG1kLm1pbih0LHIpPD1lJiZlPD1tZC5tYXgodCxyKX1zby5pblJhbmdlPV83ZTtmdW5jdGlvbiB5N2UoZSx0LHIpe3JldHVybiBtZC5taW4obWQubWF4KHQsZSkscil9c28uY2xhbXA9eTdlO2Z1bmN0aW9uIHY3ZShlLHQscil7dmFyIG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpudWxsLGk9bj09bnVsbD90OnIsbz1uPT1udWxsP3dGLm1heChlKTp3Ri5tYXgoZSxuKTtyZXR1cm4gbyE9PXZvaWQgMD9vOml9c28ubWF4PXY3ZTtmdW5jdGlvbiB4N2UoZSx0LHIpe3ZhciBuPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6bnVsbCxpPW49PW51bGw/dDpyLG89bj09bnVsbD93Ri5taW4oZSk6d0YubWluKGUsbik7cmV0dXJuIG8hPT12b2lkIDA/bzppfXNvLm1pbj14N2U7ZnVuY3Rpb24gYjdlKGUpe3JldHVybiBlIT09ZX1zby5pc05hTj1iN2U7ZnVuY3Rpb24gdzdlKGUpe3JldHVybiB0eXBlb2YgZT09Im51bWJlciImJmUtZTwxfXNvLmlzVmFsaWROdW1iZXI9dzdlO2Z1bmN0aW9uIFM3ZShlLHQscil7aWYocj09PXZvaWQgMCYmKHI9MSkscj09PTApdGhyb3cgbmV3IEVycm9yKCJzdGVwIGNhbm5vdCBiZSAwIik7Zm9yKHZhciBuPW1kLm1heChtZC5jZWlsKCh0LWUpL3IpLDApLGk9W10sbz0wO288bjsrK28paVtvXT1lK3IqbztyZXR1cm4gaX1zby5yYW5nZT1TN2U7ZnVuY3Rpb24gTTdlKGUsdCl7cmV0dXJuIG1kLnBvdyh0LnktZS55LDIpK21kLnBvdyh0LngtZS54LDIpfXNvLmRpc3RhbmNlU3F1YXJlZD1NN2U7ZnVuY3Rpb24gRTdlKGUpe3JldHVybiBlLzM2MCptZC5QSSoyfXNvLmRlZ3JlZXNUb1JhZGlhbnM9RTdlO2Z1bmN0aW9uIFQ3ZShlLHQpe3JldHVybiB0LnRvcExlZnQueDw9ZS54JiZ0LmJvdHRvbVJpZ2h0Lng+PWUueCYmdC50b3BMZWZ0Lnk8PWUueSYmdC5ib3R0b21SaWdodC55Pj1lLnl9c28ud2l0aGluPVQ3ZTtmdW5jdGlvbiBDN2UoZSx0LHIsbixpLG8sYSxzKXtyZXR1cm4gZTw9aSthJiZpPD1lK3ImJnQ8PW8rcyYmbzw9dCtufXNvLmJvdW5kc0ludGVyc2VjdHM9QzdlO2Z1bmN0aW9uIEE3ZShlKXtmb3IodmFyIHQ9dlh0LmdldEh0bWxFbGVtZW50QW5jZXN0b3JzKGUpLHI9ZzdlLG49bnVsbCxpPTAsbz10O2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldLHM9dlh0LmdldEVsZW1lbnRUcmFuc2Zvcm0oYSk7aWYocyE9bnVsbCl7dmFyIGw9YS5jbGllbnRXaWR0aC8yLGM9YS5jbGllbnRIZWlnaHQvMjtyPWJGKHIsW2wsY10pLHI9eFh0KHIsYlh0KHMpKSxyPWJGKHIsWy1sLC1jXSl9dmFyIHU9YS5zY3JvbGxMZWZ0LGg9YS5zY3JvbGxUb3A7KG49PT1udWxsfHxhPT09bikmJih1LT1hLm9mZnNldExlZnQrYS5jbGllbnRMZWZ0LGgtPWEub2Zmc2V0VG9wK2EuY2xpZW50VG9wLG49YS5vZmZzZXRQYXJlbnQpLHI9YkYocixbdSxoXSl9cmV0dXJuIHJ9c28uZ2V0Q3VtdWxhdGl2ZVRyYW5zZm9ybT1BN2U7ZnVuY3Rpb24geFh0KGUsdCl7cmV0dXJuW2VbMF0qdFswXStlWzJdKnRbMV0sZVsxXSp0WzBdK2VbM10qdFsxXSxlWzBdKnRbMl0rZVsyXSp0WzNdLGVbMV0qdFsyXStlWzNdKnRbM10sZVswXSp0WzRdK2VbMl0qdFs1XStlWzRdLGVbMV0qdFs0XStlWzNdKnRbNV0rZVs1XV19c28ubXVsdGlwbHlNYXRyaXg9eFh0O2Z1bmN0aW9uIFA3ZShlLHQpe3JldHVyblt0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0rZVswXSx0WzVdK2VbMV1dfXNvLnByZW11bHRpcGx5VHJhbnNsYXRlPVA3ZTtmdW5jdGlvbiBiRihlLHQpe3JldHVybltlWzBdLGVbMV0sZVsyXSxlWzNdLGVbMF0qdFswXStlWzJdKnRbMV0rZVs0XSxlWzFdKnRbMF0rZVszXSp0WzFdK2VbNV1dfXNvLm11bHRpcGx5VHJhbnNsYXRlPWJGO2Z1bmN0aW9uIGJYdChlKXt2YXIgdD1lWzBdKmVbM10tZVsxXSplWzJdO2lmKHQ9PT0wKXRocm93IG5ldyBFcnJvcigic2luZ3VsYXIgbWF0cml4Iik7dmFyIHI9MS90O3JldHVybltyKmVbM10sciotZVsxXSxyKi1lWzJdLHIqZVswXSxyKigtZVszXSplWzRdK2VbMl0qZVs1XSksciooZVsxXSplWzRdKy1lWzBdKmVbNV0pXX1zby5pbnZlcnRNYXRyaXg9Ylh0O2Z1bmN0aW9uIEk3ZShlLHQpe3JldHVybnt4OmVbMF0qdC54K2VbMl0qdC55K2VbNF0seTplWzFdKnQueCtlWzNdKnQueStlWzVdfX1zby5hcHBseVRyYW5zZm9ybT1JN2V9KTt2YXIgd1h0PUgoU0Y9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTDdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49TWF0aC5jZWlsKHQubGVuZ3RoLzIpLGk9MDtpPG47aSsrKXJbMF0uaW5zZXJ0KHRbaV0pO2Zvcih2YXIgaT1uO2k8dC5sZW5ndGg7aSsrKXJbMV0uaW5zZXJ0KHRbaV0pfSxlfSgpO1NGLlNwbGl0U3RyYXRlZ3lUcml2aWFsPUw3ZTt2YXIgazdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxyKXtmb3IodD10LnNsaWNlKCksdGhpcy5jaG9vc2VGaXJzdFNwbGl0KHQscik7dC5sZW5ndGg+MDspdGhpcy5hZGROZXh0KHQscil9LGUucHJvdG90eXBlLmNob29zZUZpcnN0U3BsaXQ9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49MCxpPTAsbz10Lmxlbmd0aC0xLGE9dC5sZW5ndGgtMSxzPTE7czx0Lmxlbmd0aC0xO3MrKyl7dmFyIGw9dFtzXTtsLmJvdW5kcy54bD50W29dLmJvdW5kcy54bD9vPXM6bC5ib3VuZHMueGg8dFtuXS5ib3VuZHMueGgmJihuPXMpLGwuYm91bmRzLnlsPnRbYV0uYm91bmRzLnlsP2E9czpsLmJvdW5kcy55aDx0W2ldLmJvdW5kcy55aCYmKGk9cyl9dmFyIGM9TWF0aC5hYnModFtuXS5ib3VuZHMueGgtdFtvXS5ib3VuZHMueGwpLHU9TWF0aC5hYnModFtpXS5ib3VuZHMueWgtdFthXS5ib3VuZHMueWwpLGg9Yz51P1tuLG9dOltpLGFdLGY9aFswXSxwPWhbMV07Zj09PXAmJihmPTAscD10Lmxlbmd0aC0xKSxyWzBdLmluc2VydCh0LnNwbGljZShNYXRoLm1heChmLHApLDEpWzBdKSxyWzFdLmluc2VydCh0LnNwbGljZShNYXRoLm1pbihmLHApLDEpWzBdKX0sZS5wcm90b3R5cGUuYWRkTmV4dD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1udWxsLGk9bnVsbCxvPW51bGwsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgcz10W2FdLGw9clswXS51bmlvbkFyZWFEaWZmZXJlbmNlKHMuYm91bmRzKSxjPXJbMV0udW5pb25BcmVhRGlmZmVyZW5jZShzLmJvdW5kcyk7KGw8aXx8bj09bnVsbCkmJihuPWEsaT1sLG89clswXSksYzxpJiYobj1hLGk9YyxvPXJbMV0pfW8uaW5zZXJ0KHQuc3BsaWNlKG4sMSlbMF0pfSxlfSgpO1NGLlNwbGl0U3RyYXRlZ3lMaW5lYXI9azdlfSk7dmFyIExpdD1IKGdkPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShnZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFI3ZT13WHQoKSxON2U9NSxEN2U9bmV3IFI3ZS5TcGxpdFN0cmF0ZWd5TGluZWFyLFJmOyhmdW5jdGlvbihlKXtlW2UuUEFTUz0wXT0iUEFTUyIsZVtlLkZBSUw9MV09IkZBSUwiLGVbZS5QQVNTX0FORF9PVkVSV1JJVEU9Ml09IlBBU1NfQU5EX09WRVJXUklURSJ9KShSZj1nZC5RdWVyeVByZWRpY2F0ZVJlc3VsdHx8KGdkLlF1ZXJ5UHJlZGljYXRlUmVzdWx0PXt9KSk7ZnVuY3Rpb24gTUYoZSx0LHIpe3ZhciBuPTEvMCxpPTEvMCxvPTEvMDtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIHM9dChhLmJvdW5kcyxlKSxsPXIoYS5ib3VuZHMsZSk7cmV0dXJuIGEudmFsdWUhPW51bGw/czxuPyhuPXMsaT1zLG89bCxSZi5QQVNTX0FORF9PVkVSV1JJVEUpOnM9PT1uP1JmLlBBU1M6UmYuRkFJTDpzPm8/UmYuRkFJTDooaT1NYXRoLm1pbihzLGkpLG89TWF0aC5tYXgobCxvKSxSZi5QQVNTKX19Z2QuY3JlYXRlTWluaW1pemluZ05vZGVQcmVkaWNhdGU9TUY7ZnVuY3Rpb24gSWl0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIHQobi5ib3VuZHMsZSktdChyLmJvdW5kcyxlKX19Z2QuY3JlYXRlTm9kZVNvcnQ9SWl0O3ZhciBPN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dD09PXZvaWQgMCYmKHQ9TjdlKSxyPT09dm9pZCAwJiYocj1EN2UpLHRoaXMubWF4Tm9kZUNoaWxkcmVuPXQsdGhpcy5zcGxpdFN0cmF0ZWd5PXIsdGhpcy5yb290PW5ldyBFRighMCksdGhpcy5zaXplPTB9cmV0dXJuIGUucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290fSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMucm9vdD1uZXcgRUYoITApLHRoaXMuc2l6ZT0wfSxlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49dGhpcy5yb290OyFuLmxlYWY7KW49bi5zdWJ0cmVlKHQpO3ZhciBpPUVGLnZhbHVlTm9kZSh0LHIpO2ZvcihuLmluc2VydChpKSx0aGlzLnNpemUrPTE7bi5vdmVyZmxvdyh0aGlzLm1heE5vZGVDaGlsZHJlbik7KW49bi5zcGxpdCh0aGlzLnNwbGl0U3RyYXRlZ3kpLG4ucGFyZW50PT1udWxsJiYodGhpcy5yb290PW4pO3JldHVybiBpfSxlLnByb3RvdHlwZS5sb2NhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuY29udGFpbnModCl9KX0sZS5wcm90b3R5cGUubG9jYXRlTmVhcmVzdD1mdW5jdGlvbih0KXt2YXIgcj1NRih0LFFhLmRpc3RhbmNlU3F1YXJlZFRvTmVhckVkZ2UsUWEuZGlzdGFuY2VTcXVhcmVkVG9GYXJFZGdlKSxuPXRoaXMucXVlcnlOb2RlcyhyKTtyZXR1cm4gbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkudmFsdWV9KX0sZS5wcm90b3R5cGUubG9jYXRlTmVhcmVzdFg9ZnVuY3Rpb24odCl7dmFyIHI9TUYodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgsUWEuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVgpLG49dGhpcy5xdWVyeU5vZGVzKHIpO3JldHVybiBuLnNvcnQoSWl0KHQsUWEuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VZKSksbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkudmFsdWV9KX0sZS5wcm90b3R5cGUubG9jYXRlTmVhcmVzdFk9ZnVuY3Rpb24odCl7dmFyIHI9TUYodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVksUWEuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVkpLG49dGhpcy5xdWVyeU5vZGVzKHIpO3JldHVybiBuLnNvcnQoSWl0KHQsUWEuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYKSksbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkudmFsdWV9KX0sZS5wcm90b3R5cGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiBRYS5pc0JvdW5kc092ZXJsYXBCb3VuZHMocix0KX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3RYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiBRYS5pc0JvdW5kc092ZXJsYXBYKHIsdCl9KX0sZS5wcm90b3R5cGUuaW50ZXJzZWN0WT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihyKXtyZXR1cm4gUWEuaXNCb3VuZHNPdmVybGFwWShyLHQpfSl9LGUucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQpe3ZhciByPVtdO2lmKHRoaXMucm9vdC5ib3VuZHMhPW51bGwmJiF0KHRoaXMucm9vdC5ib3VuZHMpKXJldHVybiByO2Zvcih2YXIgbj1bdGhpcy5yb290XTtuLmxlbmd0aD4wOylmb3IodmFyIGk9bi5zaGlmdCgpLG89MDtvPGkuZW50cmllcy5sZW5ndGg7bysrKXt2YXIgYT1pLmVudHJpZXNbb107dChhLmJvdW5kcykmJihpLmxlYWY/ci5wdXNoKGEudmFsdWUpOm4ucHVzaChhKSl9cmV0dXJuIHJ9LGUucHJvdG90eXBlLnF1ZXJ5Tm9kZXM9ZnVuY3Rpb24odCl7dmFyIHI9W107aWYodGhpcy5yb290LmJvdW5kcyE9bnVsbCYmdCh0aGlzLnJvb3QpPT09UmYuRkFJTClyZXR1cm4gcjtmb3IodmFyIG49W3RoaXMucm9vdF07bi5sZW5ndGg+MDspZm9yKHZhciBpPW4uc2hpZnQoKSxvPTA7bzxpLmVudHJpZXMubGVuZ3RoO28rKyl7dmFyIGE9aS5lbnRyaWVzW29dLHM9dChhKTtzPT09UmYuUEFTU19BTkRfT1ZFUldSSVRFJiYocj1bXSksKHM9PT1SZi5QQVNTfHxzPT09UmYuUEFTU19BTkRfT1ZFUldSSVRFKSYmKGkubGVhZj9yLnB1c2goYSk6bi5wdXNoKGEpKX1yZXR1cm4gcn0sZX0oKTtnZC5SVHJlZT1PN2U7dmFyIEVGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLmxlYWY9dCx0aGlzLmJvdW5kcz1udWxsLHRoaXMuZW50cmllcz1bXSx0aGlzLnBhcmVudD1udWxsLHRoaXMudmFsdWU9bnVsbH1yZXR1cm4gZS52YWx1ZU5vZGU9ZnVuY3Rpb24odCxyKXt2YXIgbj1uZXcgZSghMCk7cmV0dXJuIG4uYm91bmRzPXQsbi52YWx1ZT1yLG59LGUucHJvdG90eXBlLm92ZXJmbG93PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVudHJpZXMubGVuZ3RoPnR9LGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0KXt0aGlzLmVudHJpZXMucHVzaCh0KSx0LnBhcmVudD10aGlzO2Zvcih2YXIgcj10aGlzO3IhPW51bGw7KXIuYm91bmRzPVFhLnVuaW9uQWxsKFtyLmJvdW5kcyx0LmJvdW5kc10pLHI9ci5wYXJlbnQ7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLmVudHJpZXMuaW5kZXhPZih0KTtpZihyPj0wKXt0aGlzLmVudHJpZXMuc3BsaWNlKHIsMSk7Zm9yKHZhciBuPXRoaXM7biE9bnVsbDspbi5ib3VuZHM9UWEudW5pb25BbGwobi5lbnRyaWVzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS5ib3VuZHN9KSksbj1uLnBhcmVudH1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUuc3VidHJlZT1mdW5jdGlvbih0KXtmb3IodmFyIHI9MS8wLG49bnVsbCxpPTA7aTx0aGlzLmVudHJpZXMubGVuZ3RoO2krKyl7dmFyIG89dGhpcy5lbnRyaWVzW2ldLGE9by51bmlvbkFyZWFEaWZmZXJlbmNlKHQpOyhhPHJ8fGE9PT1yJiZuIT1udWxsJiZvLmVudHJpZXMubGVuZ3RoPG4uZW50cmllcy5sZW5ndGgpJiYobj1vKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQhPW51bGwmJnRoaXMucGFyZW50LnJlbW92ZSh0aGlzKTt2YXIgcj1bbmV3IGUodGhpcy5sZWFmKSxuZXcgZSh0aGlzLmxlYWYpXTt0LnNwbGl0KHRoaXMuZW50cmllcyxyKTt2YXIgbj10aGlzLnBhcmVudCE9bnVsbD90aGlzLnBhcmVudDpuZXcgZSghMSk7cmV0dXJuIG4uaW5zZXJ0KHJbMF0pLG4uaW5zZXJ0KHJbMV0pLG4ubGVhZj0hMSxufSxlLnByb3RvdHlwZS51bmlvbkFyZWFEaWZmZXJlbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyhRYS51bmlvbih0aGlzLmJvdW5kcyx0KS5hcmVhKCktdGhpcy5ib3VuZHMuYXJlYSgpKX0sZS5wcm90b3R5cGUubWF4RGVwdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZWFmPzE6MSt0aGlzLmVudHJpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1heERlcHRoKCl9KS5yZWR1Y2UoZnVuY3Rpb24odCxyKXtyZXR1cm4gTWF0aC5tYXgodCxyKX0pfSxlfSgpO2dkLlJUcmVlTm9kZT1FRjt2YXIgUWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuLGkpe3RoaXMueGw9dCx0aGlzLnlsPXIsdGhpcy54aD1uLHRoaXMueWg9aSx0aGlzLndpZHRoPXRoaXMueGgtdGhpcy54bCx0aGlzLmhlaWdodD10aGlzLnloLXRoaXMueWx9cmV0dXJuIGUueHl3aD1mdW5jdGlvbih0LHIsbixpKXtyZXR1cm4gbmV3IGUodCxyLHQrbixyK2kpfSxlLmVudGl0eUJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodC54LHQueSx0LngrdC53aWR0aCx0LnkrdC5oZWlnaHQpfSxlLmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gZS5wb2ludFBhaXIodC50b3BMZWZ0LHQuYm90dG9tUmlnaHQpfSxlLnBvaW50UGFpcj1mdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZShNYXRoLm1pbih0Lngsci54KSxNYXRoLm1pbih0Lnksci55KSxNYXRoLm1heCh0Lngsci54KSxNYXRoLm1heCh0Lnksci55KSl9LGUucG9pbnRzPWZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCJuZWVkIGF0IGxlYXN0IDIgcG9pbnRzIHRvIGNyZWF0ZSBib3VuZHMiKTt2YXIgcj10Lm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS54fSksbj10Lm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS55fSk7cmV0dXJuIG5ldyBlKHIucmVkdWNlKGZ1bmN0aW9uKGksbyl7cmV0dXJuIE1hdGgubWluKGksbyl9KSxuLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBNYXRoLm1pbihpLG8pfSksci5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5tYXgoaSxvKX0pLG4ucmVkdWNlKGZ1bmN0aW9uKGksbyl7cmV0dXJuIE1hdGgubWF4KGksbyl9KSl9LGUudW5pb249ZnVuY3Rpb24odCxyKXtyZXR1cm4gbmV3IGUoTWF0aC5taW4odC54bCxyLnhsKSxNYXRoLm1pbih0LnlsLHIueWwpLE1hdGgubWF4KHQueGgsci54aCksTWF0aC5tYXgodC55aCxyLnloKSl9LGUudW5pb25BbGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIhPW51bGx9KSx0Lmxlbmd0aD09PTA/bnVsbDp0LnJlZHVjZShmdW5jdGlvbihyLG4pe3JldHVybiBlLnVuaW9uKHIsbil9KX0sZS5pc0JvdW5kc092ZXJsYXBCb3VuZHM9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5pc0JvdW5kc092ZXJsYXBYKHQscikmJmUuaXNCb3VuZHNPdmVybGFwWSh0LHIpfSxlLmlzQm91bmRzT3ZlcmxhcFg9ZnVuY3Rpb24odCxyKXtyZXR1cm4hKHQueGg8ci54bCkmJiEodC54bD5yLnhoKX0sZS5pc0JvdW5kc092ZXJsYXBZPWZ1bmN0aW9uKHQscil7cmV0dXJuISh0LnloPHIueWwpJiYhKHQueWw+ci55aCl9LGUuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYPWZ1bmN0aW9uKHQscil7dmFyIG49dC53aWR0aC8yLGk9dC54bCtuO3JldHVybiBNYXRoLm1heChNYXRoLmFicyhyLngtaSktbiwwKX0sZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVk9ZnVuY3Rpb24odCxyKXt2YXIgbj10LmhlaWdodC8yLGk9dC55bCtuO3JldHVybiBNYXRoLm1heChNYXRoLmFicyhyLnktaSktbiwwKX0sZS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWD1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYKHQscik7cmV0dXJuIG49PT0wPzA6bit0LndpZHRofSxlLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VZPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVkodCxyKTtyZXR1cm4gbj09PTA/MDpuK3QuaGVpZ2h0fSxlLmRpc3RhbmNlU3F1YXJlZFRvTmVhckVkZ2U9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWCh0LHIpLGk9ZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVkodCxyKTtyZXR1cm4gbipuK2kqaX0sZS5kaXN0YW5jZVNxdWFyZWRUb0ZhckVkZ2U9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VYKHQsciksaT1lLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VZKHQscik7cmV0dXJuIG4qbitpKml9LGUucHJvdG90eXBlLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcmVhQ2FjaGVkPT1udWxsJiYodGhpcy5hcmVhQ2FjaGVkPSh0aGlzLnhoLXRoaXMueGwpKih0aGlzLnloLXRoaXMueWwpKSx0aGlzLmFyZWFDYWNoZWR9LGUucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnhsPD10LngmJnRoaXMueGg+PXQueCYmdGhpcy55bDw9dC55JiZ0aGlzLnloPj10Lnl9LGV9KCk7Z2QuUlRyZWVCb3VuZHM9UWF9KTt2YXIgRVh0PUgoX2Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9kLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU1h0PShFcigpLFV0KE1yKSksejdlPU9lKCksWGc9RmUoKSxGN2U9SWYoKTtfZC5JU3RhY2tpbmdPcmRlcj1GN2UubWFrZUVudW0oWyJ0b3Bkb3duIiwiYm90dG9tdXAiXSk7dmFyIE1YdD13aW5kb3cuTWF0aDtmdW5jdGlvbiBCN2UoZSx0LHIsbil7bj09PXZvaWQgMCYmKG49ImJvdHRvbXVwIik7dmFyIGk9U1h0Lm1hcCgpLG89U1h0Lm1hcCgpLGE9bmV3IFhnLk1hcDtuPT09InRvcGRvd24iJiYoZT1lLnNsaWNlKCksZS5yZXZlcnNlKCkpO2Zvcih2YXIgcz0wLGw9ZTtzPGwubGVuZ3RoO3MrKyl7Zm9yKHZhciBjPWxbc10sdT1uZXcgWGcuTWFwLGg9Yy5kYXRhKCksZj1oLmxlbmd0aCxwPTA7cDxmO3ArKyl7dmFyIGQ9aFtwXSxnPXQoZCxwLGMpLF89X2Qubm9ybWFsaXplS2V5KGcpLHk9K3IoZCxwLGMpLHg9dm9pZCAwLGI9eT49MD9pOm87Yi5oYXMoXyk/KHg9Yi5nZXQoXyksYi5zZXQoXyx4K3kpKTooeD0wLGIuc2V0KF8seSkpLHUuc2V0KF8se29mZnNldDp4LHZhbHVlOnksYXhpc1ZhbHVlOmcsb3JpZ2luYWxEYXR1bTpkLG9yaWdpbmFsRGF0YXNldDpjLG9yaWdpbmFsSW5kZXg6cH0pfWEuc2V0KGMsdSl9cmV0dXJuIGF9X2Quc3RhY2s9QjdlO2Z1bmN0aW9uIEg3ZShlKXt2YXIgdD1uZXcgWGcuTWFwLHI9bmV3IFhnLk1hcDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uZm9yRWFjaChmdW5jdGlvbihpLG8pe3ZhciBhPWkub2Zmc2V0K2kudmFsdWUscz1YZy5NYXRoLm1heChbYSxpLm9mZnNldF0saS5vZmZzZXQpLGw9WGcuTWF0aC5taW4oW2EsaS5vZmZzZXRdLGkub2Zmc2V0KSxjPWkuYXhpc1ZhbHVlO3QuaGFzKG8pP3QuZ2V0KG8pLmV4dGVudDxzJiZ0LnNldChvLHtleHRlbnQ6cyxheGlzVmFsdWU6YyxzdGFja2VkRGF0dW06aX0pOnQuc2V0KG8se2V4dGVudDpzLGF4aXNWYWx1ZTpjLHN0YWNrZWREYXR1bTppfSksci5oYXMobyk/ci5nZXQobykuZXh0ZW50PmwmJnIuc2V0KG8se2V4dGVudDpsLGF4aXNWYWx1ZTpjLHN0YWNrZWREYXR1bTppfSk6ci5zZXQobyx7ZXh0ZW50OmwsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KX0pfSkse21heGltdW1FeHRlbnRzOnQsbWluaW11bUV4dGVudHM6cn19X2Quc3RhY2tlZEV4dGVudHM9SDdlO2Z1bmN0aW9uIFY3ZShlLHQscil7dmFyIG49W107ZS5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPXMuZGF0YSgpLGM9bC5sZW5ndGgsdT0wO3U8Yzt1Kyspe3ZhciBoPWxbdV07aWYoIShyIT1udWxsJiYhcihoLHUscykpKXt2YXIgZj1hLmdldChfZC5ub3JtYWxpemVLZXkodChoLHUscykpKTtuLnB1c2goZi52YWx1ZStmLm9mZnNldCl9fX0pO3ZhciBpPVhnLk1hdGgubWF4KG4sMCksbz1YZy5NYXRoLm1pbihuLDApO3JldHVybltNWHQubWluKG8sMCksTVh0Lm1heCgwLGkpXX1fZC5zdGFja2VkRXh0ZW50PVY3ZTtfZC5ub3JtYWxpemVLZXk9ejdlLm1lbW9pemUoZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKX0pfSk7dmFyIFhBPUgoVEY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFRGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtURi5TSE9XX1dBUk5JTkdTPSEwO1RGLkFERF9USVRMRV9FTEVNRU5UUz0hMH0pO3ZhciBDRj1IKGdTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShnUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFU3ZT1YQSgpO2Z1bmN0aW9uIFRYdChlKXshVTdlLlNIT1dfV0FSTklOR1N8fGNvbnNvbGUud2FybihlKX1nUy53YXJuPVRYdDtmdW5jdGlvbiBDWHQoZSx0KXtmb3IodmFyIHI9W10sbj0yO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTJdPWFyZ3VtZW50c1tuXTtyZXR1cm4gdD09PTA/KGUociksLTEpOndpbmRvdy5zZXRUaW1lb3V0KGUsdCxyKX1nUy5zZXRUaW1lb3V0PUNYdDtmdW5jdGlvbiBxN2UoZSx0LHIpe3ZhciBuPW51bGwsaT1bXSxvPWZ1bmN0aW9uKCl7dC5hcHBseShyLGkpfTtyZXR1cm4gZnVuY3Rpb24oKXtpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksY2xlYXJUaW1lb3V0KG4pLG49Q1h0KG8sZSl9fWdTLmRlYm91bmNlPXE3ZTtmdW5jdGlvbiBHN2UoZSx0LHIpe3I9PT12b2lkIDAmJihyPSIiKSxUWHQoIk1ldGhvZCAiK2UrIiBoYXMgYmVlbiBkZXByZWNhdGVkIGluIHZlcnNpb24gIit0KyIuIFBsZWFzZSByZWZlciB0byB0aGUgcmVsZWFzZSBub3Rlcy4gIityKX1nUy5kZXByZWNhdGVkPUc3ZX0pO3ZhciBBWHQ9SChraXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGtpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFc3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3RoaXMuZW50cnlJbmRleD10LHRoaXMuZXhpdEluZGV4PXQsdGhpcy5taW5JbmRleD10LHRoaXMubWF4SW5kZXg9dCx0aGlzLmJ1Y2tldFZhbHVlPXIsdGhpcy5taW5WYWx1ZT1uLHRoaXMubWF4VmFsdWU9bn1yZXR1cm4gZS5wcm90b3R5cGUuaXNJbkJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gdD09dGhpcy5idWNrZXRWYWx1ZX0sZS5wcm90b3R5cGUuYWRkVG9CdWNrZXQ9ZnVuY3Rpb24odCxyKXt0PHRoaXMubWluVmFsdWUmJih0aGlzLm1pblZhbHVlPXQsdGhpcy5taW5JbmRleD1yKSx0PnRoaXMubWF4VmFsdWUmJih0aGlzLm1heFZhbHVlPXQsdGhpcy5tYXhJbmRleD1yKSx0aGlzLmV4aXRJbmRleD1yfSxlLnByb3RvdHlwZS5nZXRVbmlxdWVJbmRpY2VzPWZ1bmN0aW9uKCl7dmFyIHQ9W3RoaXMuZW50cnlJbmRleCx0aGlzLm1heEluZGV4LHRoaXMubWluSW5kZXgsdGhpcy5leGl0SW5kZXhdO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihyLG4pe3JldHVybiBuPT0wfHxyIT10W24tMV19KX0sZX0oKTtraXQuQnVja2V0PVc3ZX0pO3ZhciBOaXQ9SChSaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFJpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFk3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0eXBlb2Ygd2luZG93LlNldD09ImZ1bmN0aW9uIj90aGlzLl9lczZTZXQ9bmV3IHdpbmRvdy5TZXQ6dGhpcy5fdmFsdWVzPVtdLHRoaXMuc2l6ZT0wfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2VzNlNldCE9bnVsbD8odGhpcy5fZXM2U2V0LmFkZCh0KSx0aGlzLnNpemU9dGhpcy5fZXM2U2V0LnNpemUsdGhpcyk6KHRoaXMuaGFzKHQpfHwodGhpcy5fdmFsdWVzLnB1c2godCksdGhpcy5zaXplPXRoaXMuX3ZhbHVlcy5sZW5ndGgpLHRoaXMpfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXM2U2V0IT1udWxsKXt2YXIgcj10aGlzLl9lczZTZXQuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemU9dGhpcy5fZXM2U2V0LnNpemUscn12YXIgbj10aGlzLl92YWx1ZXMuaW5kZXhPZih0KTtyZXR1cm4gbiE9PS0xPyh0aGlzLl92YWx1ZXMuc3BsaWNlKG4sMSksdGhpcy5zaXplPXRoaXMuX3ZhbHVlcy5sZW5ndGgsITApOiExfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2VzNlNldCE9bnVsbD90aGlzLl9lczZTZXQuaGFzKHQpOnRoaXMuX3ZhbHVlcy5pbmRleE9mKHQpIT09LTF9LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzO2lmKHRoaXMuX2VzNlNldCE9bnVsbCl7dmFyIGk9ZnVuY3Rpb24obyxhKXtyZXR1cm4gdC5jYWxsKHIsbyxhLG4pfTt0aGlzLl9lczZTZXQuZm9yRWFjaChpLHIpO3JldHVybn10aGlzLl92YWx1ZXMuZm9yRWFjaChmdW5jdGlvbihvKXt0LmNhbGwocixvLG8sbil9KX0sZX0oKTtSaXQuU2V0PVk3ZX0pO3ZhciBQWHQ9SChEaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KERpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGo3ZT0oZGUoKSxVdChwZSkpLFg3ZT1OaXQoKSwkN2U9ZnVuY3Rpb24oZSl7ajdlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS5jYWxsQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMsbj1bXSxpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe28uYXBwbHkocixuKX0pLHRoaXN9LHR9KFg3ZS5TZXQpO0RpdC5DYWxsYmFja1NldD0kN2V9KTt2YXIgSVh0PUgoT2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciAkZz1MaXQoKSxLN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fZW50aXRpZXM9W10sdGhpcy5fcnRyZWU9bmV3ICRnLlJUcmVlfXJldHVybiBlLnByb3RvdHlwZS5hZGRBbGw9ZnVuY3Rpb24odCxyLG4pe2lmKHRoaXMuX2VudGl0aWVzPXRoaXMuX2VudGl0aWVzLmNvbmNhdCh0KSxuIT09dm9pZCAwKWZvcih2YXIgaT0kZy5SVHJlZUJvdW5kcy5ib3VuZHMobiksbz0wO288dC5sZW5ndGg7bysrKXt2YXIgYT10W29dLHM9JGcuUlRyZWVCb3VuZHMuZW50aXR5Qm91bmRzKHIoYSkpOyRnLlJUcmVlQm91bmRzLmlzQm91bmRzT3ZlcmxhcEJvdW5kcyhpLHMpJiZ0aGlzLl9ydHJlZS5pbnNlcnQocyxhKX1lbHNlIGZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgYT10W29dLHM9JGcuUlRyZWVCb3VuZHMuZW50aXR5Qm91bmRzKHIoYSkpO3RoaXMuX3J0cmVlLmluc2VydChzLGEpfX0sZS5wcm90b3R5cGUuZW50aXR5TmVhcmVzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUubG9jYXRlTmVhcmVzdCh0KS5wb3AoKX0sZS5wcm90b3R5cGUuZW50aXR5TmVhcmVzdFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3J0cmVlLmxvY2F0ZU5lYXJlc3RYKHQpLnBvcCgpfSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0WT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUubG9jYXRlTmVhcmVzdFkodCkucG9wKCl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5Cb3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3J0cmVlLmludGVyc2VjdCgkZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHModCkpfSxlLnByb3RvdHlwZS5lbnRpdGllc0luWEJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0WCgkZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHModCkpfSxlLnByb3RvdHlwZS5lbnRpdGllc0luWUJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0WSgkZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHModCkpfSxlLnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbnRpdGllc30sZX0oKTtPaXQuRW50aXR5U3RvcmU9SzdlfSk7dmFyIExYdD1IKHppdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWjdlPVBpdCgpLEo3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0eXBlb2Ygd2luZG93Lk1hcD09ImZ1bmN0aW9uIj90aGlzLl9lczZNYXA9bmV3IHdpbmRvdy5NYXA6dGhpcy5fa2V5VmFsdWVQYWlycz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQscil7aWYoWjdlLmlzTmFOKHQpKXRocm93IG5ldyBFcnJvcigiTmFOIG1heSBub3QgYmUgdXNlZCBhcyBhIGtleSB0byB0aGUgTWFwIik7aWYodGhpcy5fZXM2TWFwIT1udWxsKXJldHVybiB0aGlzLl9lczZNYXAuc2V0KHQsciksdGhpcztmb3IodmFyIG49MDtuPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO24rKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW25dLmtleT09PXQpcmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnNbbl0udmFsdWU9cix0aGlzO3JldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzLnB1c2goe2tleTp0LHZhbHVlOnJ9KSx0aGlzfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXM2TWFwIT1udWxsKXJldHVybiB0aGlzLl9lczZNYXAuZ2V0KHQpO2Zvcih2YXIgcj0wO3I8dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7cisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbcl0ua2V5PT09dClyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlyc1tyXS52YWx1ZX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2VzNk1hcCE9bnVsbClyZXR1cm4gdGhpcy5fZXM2TWFwLmhhcyh0KTtmb3IodmFyIHI9MDtyPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO3IrKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW3JdLmtleT09PXQpcmV0dXJuITA7cmV0dXJuITF9LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzO2lmKHRoaXMuX2VzNk1hcCE9bnVsbCl7dmFyIGk9ZnVuY3Rpb24obyxhKXtyZXR1cm4gdC5jYWxsKHIsbyxhLG4pfTt0aGlzLl9lczZNYXAuZm9yRWFjaChpLHIpO3JldHVybn10aGlzLl9rZXlWYWx1ZVBhaXJzLmZvckVhY2goZnVuY3Rpb24obyl7dC5jYWxsKHIsby52YWx1ZSxvLmtleSxuKX0pfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXM2TWFwIT1udWxsKXJldHVybiB0aGlzLl9lczZNYXAuZGVsZXRlKHQpO2Zvcih2YXIgcj0wO3I8dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7cisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbcl0ua2V5PT09dClyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlycy5zcGxpY2UociwxKSwhMDtyZXR1cm4hMX0sZX0oKTt6aXQuTWFwPUo3ZX0pO3ZhciBrWHQ9SChGaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEZpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZnVuY3Rpb24gUTdlKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgcj17fSxuPTAsaT1lO248aS5sZW5ndGg7bisrKWZvcih2YXIgbz1pW25dLGE9T2JqZWN0LmtleXMobykscz0wLGw9YTtzPGwubGVuZ3RoO3MrKyl7dmFyIGM9bFtzXTtyW2NdPW9bY119cmV0dXJuIHJ9Rml0LmFzc2lnbj1RN2V9KTt2YXIgRFh0PUgoQUY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEFGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQml0PUZlKCksUlh0PSJfX1Bsb3R0YWJsZV9DbGllbnRUcmFuc2xhdG9yIjtmdW5jdGlvbiB0emUoZSl7dmFyIHQ9ZS5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkscj10W1JYdF07cmV0dXJuIHI9PW51bGwmJihyPW5ldyBOWHQodCksdFtSWHRdPXIpLHJ9QUYuZ2V0VHJhbnNsYXRvcj10emU7dmFyIE5YdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5fcm9vdEVsZW1lbnQ9dH1yZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZVBvc2l0aW9uPWZ1bmN0aW9uKHQscil7dmFyIG49e3g6dCx5OnJ9LGk9Qml0Lk1hdGguZ2V0Q3VtdWxhdGl2ZVRyYW5zZm9ybSh0aGlzLl9yb290RWxlbWVudCk7aWYoaT09bnVsbClyZXR1cm4gbjt2YXIgbz1CaXQuTWF0aC5hcHBseVRyYW5zZm9ybShpLG4pO3JldHVybiBvfSxlLmlzRXZlbnRJbnNpZGU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gQml0LkRPTS5jb250YWlucyh0LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSxyLnRhcmdldCl9LGV9KCk7QUYuVHJhbnNsYXRvcj1OWHR9KTt2YXIgRmU9SChxbz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocW8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBLZz0oZGUoKSxVdChwZSkpLGV6ZT1mWHQoKTtxby5BcnJheT1lemU7dmFyIHJ6ZT1tWHQoKTtxby5Db2xvcj1yemU7dmFyIG56ZT1BaXQoKTtxby5ET009bnplO3ZhciBpemU9UGl0KCk7cW8uTWF0aD1pemU7dmFyIG96ZT1MaXQoKTtxby5SVHJlZT1vemU7dmFyIGF6ZT1FWHQoKTtxby5TdGFja2luZz1hemU7dmFyIHN6ZT1DRigpO3FvLldpbmRvdz1zemU7S2cuX19leHBvcnRTdGFyKEFYdCgpLHFvKTtLZy5fX2V4cG9ydFN0YXIoUFh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihZZygpLHFvKTtLZy5fX2V4cG9ydFN0YXIoSVh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihMWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKGtYdCgpLHFvKTtLZy5fX2V4cG9ydFN0YXIoTml0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihEWHQoKSxxbyl9KTt2YXIgVml0PUgoJEE9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgT1h0PUZlKCksSGl0PVBGKCksbHplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7SGl0LmZsdXNoKCl9LGV9KCk7JEEuSW1tZWRpYXRlPWx6ZTt2YXIgY3plPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7T1h0LkRPTS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbChIaXQuZmx1c2gpfSxlfSgpOyRBLkFuaW1hdGlvbkZyYW1lPWN6ZTt2YXIgdXplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX3RpbWVvdXRNc2VjPU9YdC5ET00uU0NSRUVOX1JFRlJFU0hfUkFURV9NSUxMSVNFQ09ORFN9cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3NldFRpbWVvdXQoSGl0LmZsdXNoLHRoaXMuX3RpbWVvdXRNc2VjKX0sZX0oKTskQS5UaW1lb3V0PXV6ZX0pO3ZhciBQRj1IKHp1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh6dSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIF9TPUZlKCksaHplPUlmKCksSUY9Vml0KCksWkE9bmV3IF9TLlNldCxVaXQ9bmV3IF9TLlNldCxMRj0hMSxxaXQ9ITE7enUuUG9saWN5PWh6ZS5tYWtlRW51bShbImltbWVkaWF0ZSIsImFuaW1hdGlvbkZyYW1lIiwidGltZW91dCJdKTt2YXIgS0E9bmV3IElGLkFuaW1hdGlvbkZyYW1lO2Z1bmN0aW9uIGZ6ZShlKXtpZihlPT1udWxsKXJldHVybiBLQTtzd2l0Y2goZSl7Y2FzZSB6dS5Qb2xpY3kuaW1tZWRpYXRlOktBPW5ldyBJRi5JbW1lZGlhdGU7YnJlYWs7Y2FzZSB6dS5Qb2xpY3kuYW5pbWF0aW9uRnJhbWU6S0E9bmV3IElGLkFuaW1hdGlvbkZyYW1lO2JyZWFrO2Nhc2UgenUuUG9saWN5LnRpbWVvdXQ6S0E9bmV3IElGLlRpbWVvdXQ7YnJlYWs7ZGVmYXVsdDpfUy5XaW5kb3cud2FybigiVW5yZWNvZ25pemVkIHJlbmRlclBvbGljeTogIitlKX19enUucmVuZGVyUG9saWN5PWZ6ZTtmdW5jdGlvbiBwemUoZSl7cWl0JiZfUy5XaW5kb3cud2FybigiUmVnaXN0ZXJlZCB0byByZW5kZXIgd2hpbGUgb3RoZXIgY29tcG9uZW50cyBhcmUgZmx1c2hpbmc6IHJlcXVlc3QgbWF5IGJlIGlnbm9yZWQiKSxaQS5hZGQoZSksRlh0KCl9enUucmVnaXN0ZXJUb1JlbmRlcj1wemU7ZnVuY3Rpb24gelh0KGUpe1VpdC5hZGQoZSksWkEuYWRkKGUpLEZYdCgpfXp1LnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyPXpYdDtmdW5jdGlvbiBkemUoZSl7elh0KGUpfXp1LnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0PWR6ZTtmdW5jdGlvbiBGWHQoKXtMRnx8KExGPSEwLEtBLnJlbmRlcigpKX1mdW5jdGlvbiBtemUoKXtpZihMRil7VWl0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuY29tcHV0ZUxheW91dCgpfSksWkEuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZW5kZXIoKX0pLHFpdD0hMDt2YXIgZT1uZXcgX1MuU2V0O1pBLmZvckVhY2goZnVuY3Rpb24odCl7dHJ5e3QucmVuZGVySW1tZWRpYXRlbHkoKX1jYXRjaChyKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IHJ9LDApLGUuYWRkKHQpfX0pLFVpdD1uZXcgX1MuU2V0LFpBPWUsTEY9ITEscWl0PSExfX16dS5mbHVzaD1temV9KTt2YXIga2M9SChKQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSkEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCWHQ9KEVyKCksVXQoTXIpKSxrRj1QRigpLHlTPUZlKCksZ3plPU9lKCksSFh0PVlnKCksVlh0PUlmKCk7SkEuWEFsaWdubWVudD1WWHQubWFrZUVudW0oWyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSk7SkEuWUFsaWdubWVudD1WWHQubWFrZUVudW0oWyJ0b3AiLCJjZW50ZXIiLCJib3R0b20iXSk7dmFyIF96ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9vdmVyZmxvd0hpZGRlbj0hMSx0aGlzLl9vcmlnaW49e3g6MCx5OjB9LHRoaXMuX3hBbGlnbm1lbnQ9ImxlZnQiLHRoaXMuX3lBbGlnbm1lbnQ9InRvcCIsdGhpcy5faXNTZXR1cD0hMSx0aGlzLl9pc0FuY2hvcmVkPSExLHRoaXMuX2Nzc0NsYXNzZXM9bmV3IHlTLlNldCx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25BbmNob3JDYWxsYmFja3M9bmV3IHlTLkNhbGxiYWNrU2V0LHRoaXMuX29uRGV0YWNoQ2FsbGJhY2tzPW5ldyB5Uy5DYWxsYmFja1NldCx0aGlzLl9jc3NDbGFzc2VzLmFkZCgiY29tcG9uZW50Iil9cmV0dXJuIGUucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbih0KXtpZih0PUhYdC5jb2VyY2VFeHRlcm5hbEQzKHQpLHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkNhbid0IHJldXNlIGRlc3Ryb3koKS1lZCBDb21wb25lbnRzISIpO3JldHVybiB0aGlzLmlzUm9vdCgpJiYodGhpcy5fcm9vdEVsZW1lbnQ9dCx0aGlzLl9yb290RWxlbWVudC5jbGFzc2VkKCJwbG90dGFibGUiLCEwKSksdGhpcy5fZWxlbWVudCE9bnVsbD90Lm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50Lm5vZGUoKSk6KHRoaXMuX2VsZW1lbnQ9dC5hcHBlbmQoImRpdiIpLHRoaXMuX3NldHVwKCkpLHRoaXMuX2lzQW5jaG9yZWQ9ITAsdGhpcy5fb25BbmNob3JDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKSx0aGlzfSxlLnByb3RvdHlwZS5vbkFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faXNBbmNob3JlZCYmdCh0aGlzKSx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9pc1NldHVwfHwodGhpcy5fY3NzQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uKHIpe3QuX2VsZW1lbnQuY2xhc3NlZChyLCEwKX0pLHRoaXMuX2Nzc0NsYXNzZXM9bmV3IHlTLlNldCx0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyPXRoaXMuX2VsZW1lbnQuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJiYWNrZ3JvdW5kLWNvbnRhaW5lciIsITApLHRoaXMuX2NvbnRlbnQ9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImNvbnRlbnQiLCEwKSx0aGlzLl9mb3JlZ3JvdW5kQ29udGFpbmVyPXRoaXMuX2VsZW1lbnQuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJmb3JlZ3JvdW5kLWNvbnRhaW5lciIsITApLHRoaXMuX292ZXJmbG93SGlkZGVuP3RoaXMuX2NvbnRlbnQuY2xhc3NlZCgiY29tcG9uZW50LW92ZXJmbG93LWhpZGRlbiIsITApOnRoaXMuX2NvbnRlbnQuY2xhc3NlZCgiY29tcG9uZW50LW92ZXJmbG93LXZpc2libGUiLCEwKSx0aGlzLl9pc1NldHVwPSEwKX0sZS5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24odCxyKXtyZXR1cm57bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH19LGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24odCxyLG4pe2lmKHQ9PW51bGx8fHI9PW51bGx8fG49PW51bGwpe2lmKHRoaXMuX2VsZW1lbnQ9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJhbmNob3IoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgY29tcHV0ZUxheW91dCgpIik7aWYodGhpcy5fcm9vdEVsZW1lbnQhPW51bGwpe3Q9e3g6MCx5OjB9O3ZhciBpPXRoaXMuX3Jvb3RFbGVtZW50Lm5vZGUoKTtyPXlTLkRPTS5lbGVtZW50V2lkdGgoaSksbj15Uy5ET00uZWxlbWVudEhlaWdodChpKX1lbHNlIHRocm93IG5ldyBFcnJvcigibnVsbCBhcmd1bWVudHMgY2Fubm90IGJlIHBhc3NlZCB0byBjb21wdXRlTGF5b3V0KCkgb24gYSBub24tcm9vdCwgdW5hbmNob3JlZCBub2RlIil9dmFyIG89dGhpcy5fc2l6ZUZyb21PZmZlcihyLG4pLGE9by5oZWlnaHQscz1vLndpZHRoLGw9ZS5feEFsaWduVG9Qcm9wb3J0aW9uW3RoaXMuX3hBbGlnbm1lbnRdLGM9ZS5feUFsaWduVG9Qcm9wb3J0aW9uW3RoaXMuX3lBbGlnbm1lbnRdLHU9dC54KyhyLXMpKmwsaD10LnkrKG4tYSkqYztyZXR1cm4gdGhpcy5zZXRCb3VuZHMocyxhLHUsaCksdGhpc30sZS5wcm90b3R5cGUuc2V0Qm91bmRzPWZ1bmN0aW9uKHQscixuLGkpe3JldHVybiBuPT09dm9pZCAwJiYobj0wKSxpPT09dm9pZCAwJiYoaT0wKSx0aGlzLl93aWR0aD10LHRoaXMuX2hlaWdodD1yLHRoaXMuX29yaWdpbj17eDpuLHk6aX0sdGhpcy5fZWxlbWVudCE9bnVsbCYmdGhpcy5fZWxlbWVudC5zdHlsZXMoe2xlZnQ6bisicHgiLGhlaWdodDpyKyJweCIsdG9wOmkrInB4Iix3aWR0aDp0KyJweCJ9KSx0aGlzLl9yZXNpemVIYW5kbGVyIT1udWxsJiZ0aGlzLl9yZXNpemVIYW5kbGVyKHt3aWR0aDp0LGhlaWdodDpyfSksdGhpc30sZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLnJlcXVlc3RlZFNwYWNlKHQscik7cmV0dXJue3dpZHRoOnRoaXMuZml4ZWRXaWR0aCgpP01hdGgubWluKHQsbi5taW5XaWR0aCk6dCxoZWlnaHQ6dGhpcy5maXhlZEhlaWdodCgpP01hdGgubWluKHIsbi5taW5IZWlnaHQpOnJ9fSxlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNBbmNob3JlZCYmdGhpcy5faXNTZXR1cCYmdGhpcy53aWR0aCgpPj0wJiZ0aGlzLmhlaWdodCgpPj0wJiZrRi5yZWdpc3RlclRvUmVuZGVyKHRoaXMpLHRoaXN9LGUucHJvdG90eXBlLnJlbmRlckxvd1ByaW9yaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyKCl9LGUucHJvdG90eXBlLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiZrRi5yZWdpc3RlclRvQ29tcHV0ZUxheW91dEFuZFJlbmRlcih0aGlzKX0sZS5wcm90b3R5cGUub25SZXNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc2l6ZUhhbmRsZXI9dCx0aGlzfSxlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNBbmNob3JlZCYmdGhpcy5faXNTZXR1cCYmKHRoaXMuaXNSb290KCk/dGhpcy5fc2NoZWR1bGVDb21wdXRlTGF5b3V0KCk6dGhpcy5wYXJlbnQoKS5yZWRyYXcoKSksdGhpc30sZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5yZW5kZXJUbz1mdW5jdGlvbih0KXtpZih0aGlzLmRldGFjaCgpLHQhPW51bGwpe3ZhciByPXZvaWQgMDtpZih0eXBlb2YgdD09InN0cmluZyJ8fGd6ZS5pc0VsZW1lbnQodCk/cj1CWHQuc2VsZWN0KHQpOnI9SFh0LmNvZXJjZUV4dGVybmFsRDModCksIXIubm9kZSgpfHxyLm5vZGUoKS5ub2RlTmFtZT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIlBsb3R0YWJsZSByZXF1aXJlcyBhIHZhbGlkIEVsZW1lbnQgdG8gcmVuZGVyVG8iKTtpZihyLm5vZGUoKS5ub2RlTmFtZT09PSJzdmciKXRocm93IG5ldyBFcnJvcigiUGxvdHRhYmxlIDMueCBhbmQgbGF0ZXIgY2FuIG9ubHkgcmVuZGVyVG8gYW4gSFRNTCBjb21wb25lbnQ7IHBhc3MgYSBkaXYgaW5zdGVhZCEiKTt0aGlzLmFuY2hvcihyKX1pZih0aGlzLl9lbGVtZW50PT1udWxsKXRocm93IG5ldyBFcnJvcigiSWYgYSBDb21wb25lbnQgaGFzIG5ldmVyIGJlZW4gcmVuZGVyZWQgYmVmb3JlLCB0aGVuIHJlbmRlclRvIG11c3QgYmUgZ2l2ZW4gYSBub2RlIHRvIHJlbmRlciB0bywgb3IgYSBkMy5TZWxlY3Rpb24sIG9yIGEgc2VsZWN0b3Igc3RyaW5nIik7cmV0dXJuIGtGLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpLGtGLmZsdXNoKCksdGhpc30sZS5wcm90b3R5cGUueEFsaWdubWVudD1mdW5jdGlvbih0KXtpZih0PT1udWxsKXJldHVybiB0aGlzLl94QWxpZ25tZW50O2lmKHQ9dC50b0xvd2VyQ2FzZSgpLGUuX3hBbGlnblRvUHJvcG9ydGlvblt0XT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGFsaWdubWVudDogIit0KTtyZXR1cm4gdGhpcy5feEFsaWdubWVudD10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUueUFsaWdubWVudD1mdW5jdGlvbih0KXtpZih0PT1udWxsKXJldHVybiB0aGlzLl95QWxpZ25tZW50O2lmKHQ9dC50b0xvd2VyQ2FzZSgpLGUuX3lBbGlnblRvUHJvcG9ydGlvblt0XT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGFsaWdubWVudDogIit0KTtyZXR1cm4gdGhpcy5feUFsaWdubWVudD10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUuaGFzQ2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/ITE6dGhpcy5fZWxlbWVudD09bnVsbD90aGlzLl9jc3NDbGFzc2VzLmhhcyh0KTp0aGlzLl9lbGVtZW50LmNsYXNzZWQodCl9LGUucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXM6KHRoaXMuX2VsZW1lbnQ9PW51bGw/dGhpcy5fY3NzQ2xhc3Nlcy5hZGQodCk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHQsITApLHRoaXMpfSxlLnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzOih0aGlzLl9lbGVtZW50PT1udWxsP3RoaXMuX2Nzc0NsYXNzZXMuZGVsZXRlKHQpOnRoaXMuX2VsZW1lbnQuY2xhc3NlZCh0LCExKSx0aGlzKX0sZS5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQobnVsbCksdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fZWxlbWVudC5yZW1vdmUoKSx0aGlzLl9pc0FuY2hvcmVkPSExLHRoaXMuX29uRGV0YWNoQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyksdGhpc30sZS5wcm90b3R5cGUub25EZXRhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uRGV0YWNoQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEZXRhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uRGV0YWNoQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24odCl7aWYodD09PXZvaWQgMClyZXR1cm4gdGhpcy5fcGFyZW50O2lmKHQhPT1udWxsJiYhdC5oYXModGhpcykpdGhyb3cgbmV3IEVycm9yKCJQYXNzZWQgaW52YWxpZCBwYXJlbnQiKTtyZXR1cm4gdGhpcy5fcGFyZW50PXQsdGhpc30sZS5wcm90b3R5cGUuYm91bmRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcmlnaW4oKTtyZXR1cm57dG9wTGVmdDp0LGJvdHRvbVJpZ2h0Ont4OnQueCt0aGlzLndpZHRoKCkseTp0LnkrdGhpcy5oZWlnaHQoKX19fSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuZGV0YWNoKCl9LGUucHJvdG90eXBlLndpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dpZHRofSxlLnByb3RvdHlwZS5oZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVpZ2h0fSxlLnByb3RvdHlwZS5vcmlnaW49ZnVuY3Rpb24oKXtyZXR1cm57eDp0aGlzLl9vcmlnaW4ueCx5OnRoaXMuX29yaWdpbi55fX0sZS5wcm90b3R5cGUub3JpZ2luVG9Sb290PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMub3JpZ2luKCkscj10aGlzLnBhcmVudCgpO3IhPW51bGw7KXt2YXIgbj1yLm9yaWdpbigpO3QueCs9bi54LHQueSs9bi55LHI9ci5wYXJlbnQoKX1yZXR1cm4gdH0sZS5wcm90b3R5cGUucm9vdD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzOyF0LmlzUm9vdCgpOyl0PXQucGFyZW50KCk7cmV0dXJuIHR9LGUucHJvdG90eXBlLmlzUm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpPT1udWxsfSxlLnByb3RvdHlwZS5mb3JlZ3JvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvcmVncm91bmRDb250YWluZXJ9LGUucHJvdG90eXBlLmNvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudH0sZS5wcm90b3R5cGUuZWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50fSxlLnByb3RvdHlwZS5yb290RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3QoKS5fcm9vdEVsZW1lbnR9LGUucHJvdG90eXBlLmJhY2tncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbnRhaW5lcn0sZS5feEFsaWduVG9Qcm9wb3J0aW9uPXtsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjF9LGUuX3lBbGlnblRvUHJvcG9ydGlvbj17dG9wOjAsY2VudGVyOi41LGJvdHRvbToxfSxlfSgpO0pBLkNvbXBvbmVudD1femV9KTt2YXIgQnU9SChGdT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRnUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB2Uz0oRXIoKSxVdChNcikpLHl6ZT0hMTtmdW5jdGlvbiB2emUoZSx0LHIpe2U9PT12b2lkIDAmJihlPTIpLHQ9PT12b2lkIDAmJih0PSIkIikscj09PXZvaWQgMCYmKHI9ITApO3ZhciBuPUdpdChlKTtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG89bihNYXRoLmFicyhpKSk7cmV0dXJuIG8hPT0iIiYmKHI/bz10K286bys9dCxpPDAmJihvPSItIitvKSksb319RnUuY3VycmVuY3k9dnplO2Z1bmN0aW9uIEdpdChlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MyksUkYoZSksZnVuY3Rpb24odCl7cmV0dXJuIHQudG9GaXhlZChlKX19RnUuZml4ZWQ9R2l0O2Z1bmN0aW9uIHh6ZShlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MyksUkYoZSksZnVuY3Rpb24odCl7aWYodHlwZW9mIHQ9PSJudW1iZXIiKXt2YXIgcj1NYXRoLnBvdygxMCxlKTtyZXR1cm4gU3RyaW5nKE1hdGgucm91bmQodCpyKS9yKX1lbHNlIHJldHVybiBTdHJpbmcodCl9fUZ1LmdlbmVyYWw9eHplO2Z1bmN0aW9uIGJ6ZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpfX1GdS5pZGVudGl0eT1iemU7ZnVuY3Rpb24gd3plKGUpe2U9PT12b2lkIDAmJihlPTApO3ZhciB0PUdpdChlKTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cioxMDAsaT1yLnRvU3RyaW5nKCksbz1NYXRoLnBvdygxMCxpLmxlbmd0aC0oaS5pbmRleE9mKCIuIikrMSkpO3JldHVybiBuPXBhcnNlSW50KChuKm8pLnRvU3RyaW5nKCksMTApL28sdChuKSsiJSJ9fUZ1LnBlcmNlbnRhZ2U9d3plO2Z1bmN0aW9uIFN6ZShlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MyksUkYoZSksZnVuY3Rpb24odCl7cmV0dXJuIHZTLmZvcm1hdCgiLiIrZSsicyIpKHQpfX1GdS5zaVN1ZmZpeD1TemU7ZnVuY3Rpb24gTXplKGUpe2U9PT12b2lkIDAmJihlPTMpLFJGKGUpO3ZhciB0PSJLTUJUUSIscj12Uy5mb3JtYXQoIi4iK2UrImUiKSxuPXZTLmZvcm1hdCgiLiIrZSsiZiIpLGk9TWF0aC5wb3coMTAsMyoodC5sZW5ndGgrMSkpLG89TWF0aC5wb3coMTAsLWUpO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz1NYXRoLmFicyhhKTtpZigoczxvfHxzPj1pKSYmcyE9PTApcmV0dXJuIHIoYSk7Zm9yKHZhciBsPS0xO3M+PU1hdGgucG93KDFlMyxsKzIpJiZsPHQubGVuZ3RoLTE7KWwrKzt2YXIgYz0iIjtyZXR1cm4gbD09PS0xP2M9bihhKTpjPW4oYS9NYXRoLnBvdygxZTMsbCsxKSkrdFtsXSwoYT4wJiZjLnN1YnN0cigwLDQpPT09IjEwMDAifHxhPDAmJmMuc3Vic3RyKDAsNSk9PT0iLTEwMDAiKSYmKGw8dC5sZW5ndGgtMT8obCsrLGM9bihhL01hdGgucG93KDFlMyxsKzEpKSt0W2xdKTpjPXIoYSkpLGN9fUZ1LnNob3J0U2NhbGU9TXplO2Z1bmN0aW9uIEV6ZSgpe3ZhciBlPVt7c3BlY2lmaWVyOiIuJUwiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaWxsaXNlY29uZHMoKSE9PTB9fSx7c3BlY2lmaWVyOiI6JVMiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRTZWNvbmRzKCkhPT0wfX0se3NwZWNpZmllcjoiJUk6JU0iLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCkhPT0wfX0se3NwZWNpZmllcjoiJUkgJXAiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpIT09MH19LHtzcGVjaWZpZXI6IiVhICVkIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF5KCkhPT0wJiZ0LmdldERhdGUoKSE9PTF9fSx7c3BlY2lmaWVyOiIlYiAlZCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKSE9PTF9fSx7c3BlY2lmaWVyOiIlYiIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCkhPT0wfX1dO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1lLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gaS5wcmVkaWNhdGUodCl9KSxuPXIubGVuZ3RoPjA/clswXS5zcGVjaWZpZXI6IiVZIjtyZXR1cm4gdlMudGltZUZvcm1hdChuKSh0KX19RnUubXVsdGlUaW1lPUV6ZTtmdW5jdGlvbiBUemUoZSx0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9eXplKSx0P3ZTLnV0Y0Zvcm1hdChlKTp2Uy50aW1lRm9ybWF0KGUpfUZ1LnRpbWU9VHplO2Z1bmN0aW9uIFJGKGUpe2lmKGU8MHx8ZT4yMCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRm9ybWF0dGVyIHByZWNpc2lvbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjAiKTtpZihlIT09TWF0aC5mbG9vcihlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRm9ybWF0dGVyIHByZWNpc2lvbiBtdXN0IGJlIGFuIGludGVnZXIiKX19KTt2YXIgUUE9SChORj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBDemU9KGRlKCksVXQocGUpKSx5ZD0oRXIoKSxVdChNcikpLFdpdD1fbCgpLEF6ZT1rYygpLFVYdD1CdSgpLHhTPUZlKCksUHplPUlmKCk7TkYuQXhpc09yaWVudGF0aW9uPVB6ZS5tYWtlRW51bShbImJvdHRvbSIsImxlZnQiLCJyaWdodCIsInRvcCJdKTt2YXIgSXplPWZ1bmN0aW9uKGUpe0N6ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKGkuX2VuZFRpY2tMZW5ndGg9NSxpLl9pbm5lclRpY2tMZW5ndGg9NSxpLl90aWNrTGFiZWxQYWRkaW5nPTEwLGkuX21hcmdpbj0xNSxpLl9zaG93RW5kVGlja0xhYmVscz0hMSxpLl9hbm5vdGF0aW9uc0VuYWJsZWQ9ITEsaS5fYW5ub3RhdGlvblRpZXJDb3VudD0xLHI9PW51bGx8fG49PW51bGwpdGhyb3cgbmV3IEVycm9yKCJBeGlzIHJlcXVpcmVzIGEgc2NhbGUgYW5kIG9yaWVudGF0aW9uIik7cmV0dXJuIGkuX3NjYWxlPXIsaS5vcmllbnRhdGlvbihuKSxpLl9zZXREZWZhdWx0QWxpZ25tZW50KCksaS5hZGRDbGFzcygiYXhpcyIpLGkuaXNIb3Jpem9udGFsKCk/aS5hZGRDbGFzcygieC1heGlzIik6aS5hZGRDbGFzcygieS1heGlzIiksaS5mb3JtYXR0ZXIoVVh0LmlkZW50aXR5KCkpLGkuX3Jlc2NhbGVDYWxsYmFjaz1mdW5jdGlvbihvKXtyZXR1cm4gaS5fcmVzY2FsZSgpfSxpLl9zY2FsZS5vblVwZGF0ZShpLl9yZXNjYWxlQ2FsbGJhY2spLGkuX2Fubm90YXRlZFRpY2tzPVtdLGkuX2Fubm90YXRpb25Gb3JtYXR0ZXI9VVh0LmlkZW50aXR5KCksaX1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVzY2FsZUNhbGxiYWNrKX0sdC5wcm90b3R5cGUudGlja0xhYmVsRGF0YU9uRWxlbWVudD1mdW5jdGlvbihyKXtpZihyIT1udWxsKXtmb3IodmFyIG47ciE9bnVsbCYmci5jbGFzc0xpc3QmJm49PT12b2lkIDA7KXIuY2xhc3NMaXN0LmNvbnRhaW5zKHQuVElDS19MQUJFTF9DTEFTUyk/bj1yOnI9ci5wYXJlbnROb2RlO3JldHVybiByPT09dm9pZCAwP3ZvaWQgMDp5ZC5zZWxlY3QocikuZGF0dW0oKX19LHQucHJvdG90eXBlLl9jb21wdXRlV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCl9LHQucHJvdG90eXBlLl9jb21wdXRlSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPTAsbz0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpe2lmKG89dGhpcy5fY29tcHV0ZUhlaWdodCgpK3RoaXMuX21hcmdpbix0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpKXt2YXIgYT10aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCsyKnQuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORztvKz1hKnRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpfX1lbHNlIGlmKGk9dGhpcy5fY29tcHV0ZVdpZHRoKCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciBhPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HO2krPWEqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCl9cmV0dXJue21pbldpZHRoOmksbWluSGVpZ2h0Om99fSx0LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNIb3Jpem9udGFsKCl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXIoKX0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX3NjYWxlLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuX3NjYWxlLnJhbmdlKFt0aGlzLmhlaWdodCgpLDBdKSx0aGlzfSx0LnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMucmVxdWVzdGVkU3BhY2UocixuKTtyZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKT97d2lkdGg6cixoZWlnaHQ6aS5taW5IZWlnaHR9OntoZWlnaHQ6bix3aWR0aDppLm1pbldpZHRofX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fdGlja01hcmtDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApLHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElDS19MQUJFTF9DTEFTUysiLWNvbnRhaW5lciIsITApLHRoaXMuX2Jhc2VsaW5lPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWNvbnRhaW5lciIsITApLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1saW5lLWNvbnRhaW5lciIsITApLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXJlY3QtY29udGFpbmVyIiwhMCk7dmFyIHI9dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWxhYmVsLWNvbnRhaW5lciIsITApLG49bmV3IFdpdC5TdmdDb250ZXh0KHIubm9kZSgpKTt0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXI9bmV3IFdpdC5DYWNoZU1lYXN1cmVyKG4pLHRoaXMuX2Fubm90YXRpb25Xcml0ZXI9bmV3IFdpdC5Xcml0ZXIodGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLG4pfSx0LnByb3RvdHlwZS5fZ2V0VGlja1ZhbHVlcz1mdW5jdGlvbigpe3JldHVybltdfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxuPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX01BUktfQ0xBU1MpLmRhdGEociksaT1uLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCh0LlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2Uobik7cmV0dXJuIGkuYXR0cnModGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCkpLHlkLnNlbGVjdChpLm5vZGVzKClbMF0pLmNsYXNzZWQodC5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKSx5ZC5zZWxlY3QoaS5ub2RlcygpW3IubGVuZ3RoLTFdKS5jbGFzc2VkKHQuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCkuYXR0cnModGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCEwKSksbi5leGl0KCkucmVtb3ZlKCksdGhpcy5fYmFzZWxpbmUuYXR0cnModGhpcy5fZ2VuZXJhdGVCYXNlbGluZUF0dHJIYXNoKCkpLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCk/dGhpcy5fZHJhd0Fubm90YXRpb25zKCk6dGhpcy5fcmVtb3ZlQW5ub3RhdGlvbnMoKSx0aGlzfSx0LnByb3RvdHlwZS5hbm5vdGF0ZWRUaWNrcz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9hbm5vdGF0ZWRUaWNrczoodGhpcy5fYW5ub3RhdGVkVGlja3M9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5hbm5vdGF0aW9uRm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Fubm90YXRpb25Gb3JtYXR0ZXI6KHRoaXMuX2Fubm90YXRpb25Gb3JtYXR0ZXI9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5hbm5vdGF0aW9uc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5ub3RhdGlvbnNFbmFibGVkOih0aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWQ9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5hbm5vdGF0aW9uVGllckNvdW50PWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2Fubm90YXRpb25UaWVyQ291bnQ7aWYocjwwKXRocm93IG5ldyBFcnJvcigiYW5ub3RhdGlvblRpZXJDb3VudCBjYW5ub3QgYmUgbmVnYXRpdmUiKTtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudD1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuX2RyYXdBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10Ll9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkcsaT1uZXcgeFMuTWFwLG89dGhpcy5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcigpO28uZm9yRWFjaChmdW5jdGlvbihQKXt2YXIgaz1yLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZShyLmFubm90YXRpb25Gb3JtYXR0ZXIoKShQKSksTz17d2lkdGg6ay53aWR0aCsyKm4saGVpZ2h0OmsuaGVpZ2h0KzIqbn07aS5zZXQoUCxPKX0pO3ZhciBhPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqbixzPXRoaXMuX2Fubm90YXRpb25Ub1RpZXIoaSksbD1uZXcgeFMuU2V0LGM9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLmhlaWdodCgpOnRoaXMud2lkdGgoKSx1PXRoaXMuX2NvcmVTaXplKCksaD1NYXRoLm1pbih0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKSxNYXRoLmZsb29yKChjLXUpL2EpKTtzLmZvckVhY2goZnVuY3Rpb24oUCxrKXsoUD09PS0xfHxQPj1oKSYmbC5hZGQoayl9KTt2YXIgZj1mdW5jdGlvbihQLGssTyl7dmFyIEQ9UC5zZWxlY3RBbGwoIi4iK08pLmRhdGEobyksQj1ELmVudGVyKCkuYXBwZW5kKGspLmNsYXNzZWQoTywhMCkubWVyZ2UoRCk7cmV0dXJuIEQuZXhpdCgpLnJlbW92ZSgpLEJ9LHA9ZnVuY3Rpb24oUCl7c3dpdGNoKHIub3JpZW50YXRpb24oKSl7Y2FzZSJib3R0b20iOmNhc2UicmlnaHQiOnJldHVybiBzLmdldChQKSphK3U7Y2FzZSJ0b3AiOmNhc2UibGVmdCI6cmV0dXJuIGMtdS1zLmdldChQKSphfX0sZD1mdW5jdGlvbihQKXtyZXR1cm4gci5fc2NhbGUuc2NhbGUoUCl9LGc9ZnVuY3Rpb24oUCl7cmV0dXJuIGwuaGFzKFApPyJoaWRkZW4iOiJ2aXNpYmxlIn0sXztzd2l0Y2godGhpcy5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6Y2FzZSJyaWdodCI6Xz0wO2JyZWFrO2Nhc2UidG9wIjpfPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJsZWZ0IjpfPXRoaXMud2lkdGgoKTticmVha312YXIgeT10aGlzLmlzSG9yaXpvbnRhbCgpO2YodGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3QoIi5hbm5vdGF0aW9uLWxpbmUtY29udGFpbmVyIiksImxpbmUiLHQuQU5OT1RBVElPTl9MSU5FX0NMQVNTKS5hdHRycyh7eDE6eT9kOl8seDI6eT9kOnAseTE6eT9fOmQseTI6eT9wOmQsdmlzaWJpbGl0eTpnfSksZih0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tY2lyY2xlLWNvbnRhaW5lciIpLCJjaXJjbGUiLHQuQU5OT1RBVElPTl9DSVJDTEVfQ0xBU1MpLmF0dHJzKHtjeDp5P2Q6XyxjeTp5P186ZCxyOjN9KTt2YXIgeD1mdW5jdGlvbihQKXtzd2l0Y2goci5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6Y2FzZSJyaWdodCI6cmV0dXJuIHAoUCk7Y2FzZSJ0b3AiOmNhc2UibGVmdCI6cmV0dXJuIHAoUCktaS5nZXQoUCkuaGVpZ2h0fX07Zih0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tcmVjdC1jb250YWluZXIiKSwicmVjdCIsdC5BTk5PVEFUSU9OX1JFQ1RfQ0xBU1MpLmF0dHJzKHt4Onk/ZDp4LHk6eT94OmQsd2lkdGg6eT9mdW5jdGlvbihQKXtyZXR1cm4gaS5nZXQoUCkud2lkdGh9OmZ1bmN0aW9uKFApe3JldHVybiBpLmdldChQKS5oZWlnaHR9LGhlaWdodDp5P2Z1bmN0aW9uKFApe3JldHVybiBpLmdldChQKS5oZWlnaHR9OmZ1bmN0aW9uKFApe3JldHVybiBpLmdldChQKS53aWR0aH0sdmlzaWJpbGl0eTpnfSk7dmFyIGI9dGhpcy5fYW5ub3RhdGlvbldyaXRlcixTPXRoaXMuYW5ub3RhdGlvbkZvcm1hdHRlcigpLEM9Zih0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tbGFiZWwtY29udGFpbmVyIiksImciLHQuQU5OT1RBVElPTl9MQUJFTF9DTEFTUyk7Qy5zZWxlY3RBbGwoIi50ZXh0LWNvbnRhaW5lciIpLnJlbW92ZSgpLEMuYXR0cnMoe3RyYW5zZm9ybTpmdW5jdGlvbihQKXt2YXIgaz15P2QoUCk6eChQKSxPPXk/eChQKTpkKFApO3JldHVybiJ0cmFuc2xhdGUoIitrKyIsIitPKyIpIn0sdmlzaWJpbGl0eTpnfSkuZWFjaChmdW5jdGlvbihQKXtiLndyaXRlKFMoUCkseT9pLmdldChQKS53aWR0aDppLmdldChQKS5oZWlnaHQseT9pLmdldChQKS5oZWlnaHQ6aS5nZXQoUCkud2lkdGgse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciIsdGV4dFJvdGF0aW9uOnk/MDo5MH0seWQuc2VsZWN0KHRoaXMpLm5vZGUoKSl9KX0sdC5wcm90b3R5cGUuX2Fubm90YXRlZFRpY2tzVG9SZW5kZXI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fc2NhbGUucmFuZ2UoKTtyZXR1cm4geFMuQXJyYXkudW5pcSh0aGlzLmFubm90YXRlZFRpY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpPT1udWxsPyExOnhTLk1hdGguaW5SYW5nZShyLl9zY2FsZS5zY2FsZShpKSxuWzBdLG5bMV0pfSkpfSx0LnByb3RvdHlwZS5fY29yZVNpemU9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLG49dGhpcy5pc0hvcml6b250YWwoKT90aGlzLl9jb21wdXRlSGVpZ2h0KCk6dGhpcy5fY29tcHV0ZVdpZHRoKCk7cmV0dXJuIE1hdGgubWluKG4scil9LHQucHJvdG90eXBlLl9hbm5vdGF0aW9uVGllckhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCsyKnQuX0FOTk9UQVRJT05fTEFCRUxfUEFERElOR30sdC5wcm90b3R5cGUuX2Fubm90YXRpb25Ub1RpZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPVtbXV0sbz1uZXcgeFMuTWFwLGE9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLndpZHRoKCk6dGhpcy5oZWlnaHQoKTtyZXR1cm4gdGhpcy5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcigpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9bi5fc2NhbGUuc2NhbGUocyksYz1yLmdldChzKS53aWR0aDtpZihsPDB8fGwrYz5hKXtvLnNldChzLC0xKTtyZXR1cm59Zm9yKHZhciB1PWZ1bmN0aW9uKGYpe3JldHVybiBpW2ZdLnNvbWUoZnVuY3Rpb24ocCl7dmFyIGQ9bi5fc2NhbGUuc2NhbGUocCksZz1yLmdldChwKS53aWR0aDtyZXR1cm4gbCtjPj1kJiZsPD1kK2d9KX0saD0wO3UoaCk7KWgrKyxpLmxlbmd0aD09PWgmJmkucHVzaChbXSk7aVtoXS5wdXNoKHMpLG8uc2V0KHMsaCl9KSxvfSx0LnByb3RvdHlwZS5fcmVtb3ZlQW5ub3RhdGlvbnM9ZnVuY3Rpb24oKXt0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tbGluZSIpLnJlbW92ZSgpLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1jaXJjbGUiKS5yZW1vdmUoKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tcmVjdCIpLnJlbW92ZSgpLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1sYWJlbCIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVCYXNlbGluZUF0dHJIYXNoPWZ1bmN0aW9uKCl7dmFyIHI9e3gxOjAseTE6MCx4MjowLHkyOjB9O3N3aXRjaCh0aGlzLl9vcmllbnRhdGlvbil7Y2FzZSJib3R0b20iOnIueDI9dGhpcy53aWR0aCgpO2JyZWFrO2Nhc2UidG9wIjpyLngyPXRoaXMud2lkdGgoKSxyLnkxPXRoaXMuaGVpZ2h0KCksci55Mj10aGlzLmhlaWdodCgpO2JyZWFrO2Nhc2UibGVmdCI6ci54MT10aGlzLndpZHRoKCksci54Mj10aGlzLndpZHRoKCksci55Mj10aGlzLmhlaWdodCgpO2JyZWFrO2Nhc2UicmlnaHQiOnIueTI9dGhpcy5oZWlnaHQoKTticmVha31yZXR1cm4gcn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3I9PT12b2lkIDAmJihyPSExKTt2YXIgaT17eDE6MCx5MTowLHgyOjAseTI6MH0sbz1mdW5jdGlvbihzKXtyZXR1cm4gbi5fc2NhbGUuc2NhbGUocyl9O3RoaXMuaXNIb3Jpem9udGFsKCk/KGkueDE9byxpLngyPW8pOihpLnkxPW8saS55Mj1vKTt2YXIgYT1yP3RoaXMuX2VuZFRpY2tMZW5ndGg6dGhpcy5faW5uZXJUaWNrTGVuZ3RoO3N3aXRjaCh0aGlzLl9vcmllbnRhdGlvbil7Y2FzZSJib3R0b20iOmkueTI9YTticmVhaztjYXNlInRvcCI6aS55MT10aGlzLmhlaWdodCgpLGkueTI9dGhpcy5oZWlnaHQoKS1hO2JyZWFrO2Nhc2UibGVmdCI6aS54MT10aGlzLndpZHRoKCksaS54Mj10aGlzLndpZHRoKCktYTticmVhaztjYXNlInJpZ2h0IjppLngyPWE7YnJlYWt9cmV0dXJuIGl9LHQucHJvdG90eXBlLl9zZXREZWZhdWx0QWxpZ25tZW50PWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6dGhpcy55QWxpZ25tZW50KCJ0b3AiKTticmVhaztjYXNlInRvcCI6dGhpcy55QWxpZ25tZW50KCJib3R0b20iKTticmVhaztjYXNlImxlZnQiOnRoaXMueEFsaWdubWVudCgicmlnaHQiKTticmVhaztjYXNlInJpZ2h0Ijp0aGlzLnhBbGlnbm1lbnQoImxlZnQiKTticmVha319LHQucHJvdG90eXBlLmlzSG9yaXpvbnRhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj09PSJ0b3AifHx0aGlzLl9vcmllbnRhdGlvbj09PSJib3R0b20ifSx0LnByb3RvdHlwZS5nZXRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zY2FsZX0sdC5wcm90b3R5cGUuZm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Zvcm1hdHRlcjoodGhpcy5fZm9ybWF0dGVyPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUuaW5uZXJUaWNrTGVuZ3RoPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2lubmVyVGlja0xlbmd0aDtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJpbm5lciB0aWNrIGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX2lubmVyVGlja0xlbmd0aD1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuZW5kVGlja0xlbmd0aD1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9lbmRUaWNrTGVuZ3RoO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImVuZCB0aWNrIGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX2VuZFRpY2tMZW5ndGg9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLl9tYXhMYWJlbFRpY2tMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93RW5kVGlja0xhYmVscygpP01hdGgubWF4KHRoaXMuaW5uZXJUaWNrTGVuZ3RoKCksdGhpcy5lbmRUaWNrTGVuZ3RoKCkpOnRoaXMuaW5uZXJUaWNrTGVuZ3RoKCl9LHQucHJvdG90eXBlLnRpY2tMYWJlbFBhZGRpbmc9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGlja0xhYmVsUGFkZGluZztpZihyPDApdGhyb3cgbmV3IEVycm9yKCJ0aWNrIGxhYmVsIHBhZGRpbmcgbXVzdCBiZSBwb3NpdGl2ZSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5tYXJnaW49ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fbWFyZ2luO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoIm1hcmdpbiBzaXplIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5fbWFyZ2luPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9vcmllbnRhdGlvbjt2YXIgbj1yLnRvTG93ZXJDYXNlKCk7aWYobiE9PSJ0b3AiJiZuIT09ImJvdHRvbSImJm4hPT0ibGVmdCImJm4hPT0icmlnaHQiKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgb3JpZW50YXRpb24iKTtyZXR1cm4gdGhpcy5fb3JpZW50YXRpb249bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnNob3dFbmRUaWNrTGFiZWxzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3Nob3dFbmRUaWNrTGFiZWxzOih0aGlzLl9zaG93RW5kVGlja0xhYmVscz1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9zaG93QWxsVGlja01hcmtzPWZ1bmN0aW9uKCl7dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIit0LlRJQ0tfTUFSS19DTEFTUykuZWFjaChmdW5jdGlvbigpe3lkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKX0pfSx0LnByb3RvdHlwZS5fc2hvd0FsbFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt0aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit0LlRJQ0tfTEFCRUxfQ0xBU1MpLmVhY2goZnVuY3Rpb24oKXt5ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0Iil9KX0sdC5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit0LlRJQ0tfTEFCRUxfQ0xBU1MpO24uZW1wdHkoKXx8bi5lYWNoKGZ1bmN0aW9uKGksbyl7eFMuRE9NLmNsaWVudFJlY3RJbnNpZGUodGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyKXx8eWQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9KX0sdC5wcm90b3R5cGUuX2hpZGVUaWNrTWFya3NXaXRob3V0TGFiZWw9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19NQVJLX0NMQVNTKSxuPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKG8sYSl7dmFyIHM9eWQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuIHM9PT0iaW5oZXJpdCJ8fHM9PT0idmlzaWJsZSJ9KSxpPW4uZGF0YSgpO3IuZWFjaChmdW5jdGlvbihvLGEpe2kuaW5kZXhPZihvKT09PS0xJiZ5ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIucmVzZXQoKX0sdC5FTkRfVElDS19NQVJLX0NMQVNTPSJlbmQtdGljay1tYXJrIix0LlRJQ0tfTUFSS19DTEFTUz0idGljay1tYXJrIix0LlRJQ0tfTEFCRUxfQ0xBU1M9InRpY2stbGFiZWwiLHQuQU5OT1RBVElPTl9MSU5FX0NMQVNTPSJhbm5vdGF0aW9uLWxpbmUiLHQuQU5OT1RBVElPTl9SRUNUX0NMQVNTPSJhbm5vdGF0aW9uLXJlY3QiLHQuQU5OT1RBVElPTl9DSVJDTEVfQ0xBU1M9ImFubm90YXRpb24tY2lyY2xlIix0LkFOTk9UQVRJT05fTEFCRUxfQ0xBU1M9ImFubm90YXRpb24tbGFiZWwiLHQuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORz00LHR9KEF6ZS5Db21wb25lbnQpO05GLkF4aXM9SXplfSk7dmFyIEdYdD1IKFhpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWGl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTHplPShkZSgpLFV0KHBlKSksWWl0PShFcigpLFV0KE1yKSksREY9X2woKSxremU9a2MoKSxxWHQ9RmUoKSxqaXQ9UUEoKSxSemU9ZnVuY3Rpb24oZSl7THplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXtuPT09dm9pZCAwJiYobj0iYm90dG9tIik7dmFyIGk9ZS5jYWxsKHRoaXMscixuKXx8dGhpcztyZXR1cm4gaS5fdGlja0xhYmVsQW5nbGU9MCxpLl90aWNrTGFiZWxTaGVhckFuZ2xlPTAsaS5hZGRDbGFzcygiY2F0ZWdvcnktYXhpcyIpLGl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX3dyYXBwZXIiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgcj1uZXcgREYuV3JhcHBlcjtyZXR1cm4gdGhpcy5fdGlja0xhYmVsTWF4TGluZXMhPW51bGwmJnIubWF4TGluZXModGhpcy5fdGlja0xhYmVsTWF4TGluZXMpLHJ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfd3JpdGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBERi5Xcml0ZXIodGhpcy5fbWVhc3VyZXIsdGhpcy5fdHlwZXNldHRlckNvbnRleHQsdGhpcy5fd3JhcHBlcil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fdHlwZXNldHRlckNvbnRleHQ9bmV3IERGLlN2Z0NvbnRleHQodGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLm5vZGUoKSksdGhpcy5fbWVhc3VyZXI9bmV3IERGLkNhY2hlTWVhc3VyZXIodGhpcy5fdHlwZXNldHRlckNvbnRleHQpfSx0LnByb3RvdHlwZS5fcmVzY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhdygpfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuaXNIb3Jpem9udGFsKCk/MDp0aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpK3RoaXMubWFyZ2luKCksbz10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkrdGhpcy5tYXJnaW4oKTowO2lmKHRoaXMuX3NjYWxlLmRvbWFpbigpLmxlbmd0aD09PTApcmV0dXJue21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O2lmKHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciBhPXRoaXMuX2Fubm90YXRpb25UaWVySGVpZ2h0KCkqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCk7dGhpcy5pc0hvcml6b250YWwoKT9vKz1hOmkrPWF9dmFyIHM9dGhpcy5fbWVhc3VyZVRpY2tMYWJlbHMocixuKTtyZXR1cm57bWluV2lkdGg6cy51c2VkV2lkdGgraSxtaW5IZWlnaHQ6cy51c2VkSGVpZ2h0K299fSx0LnByb3RvdHlwZS5fY29yZVNpemU9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLG49dGhpcy5pc0hvcml6b250YWwoKT90aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5IZWlnaHQ6dGhpcy5yZXF1ZXN0ZWRTcGFjZSh0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSkubWluV2lkdGgsaT10aGlzLm1hcmdpbigpK3RoaXMuX2Fubm90YXRpb25UaWVySGVpZ2h0KCksbz1uLWk7cmV0dXJuIE1hdGgubWluKG8scil9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RG93bnNhbXBsZUluZm8oKS5kb21haW59LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGt6ZS5Db21wb25lbnQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyLmNhbGwodGhpcyxyLG4pfSx0LnByb3RvdHlwZS5nZXREb3duc2FtcGxlSW5mbz1mdW5jdGlvbihyLG4pe3I9PT12b2lkIDAmJihyPXRoaXMuX3NjYWxlKSxuPT09dm9pZCAwJiYobj1yLmludmVydFJhbmdlKCkpO3ZhciBpPXRoaXMuX3RpY2tMYWJlbEFuZ2xlPT09MD8xOjEvTWF0aC5jb3ModGhpcy5fdGlja0xhYmVsU2hlYXJBbmdsZS8xODAqTWF0aC5QSSksbz10Ll9NSU5JTVVNX1dJRFRIX1BFUl9MQUJFTF9QWCppLGE9TWF0aC5jZWlsKG8vci5zdGVwV2lkdGgoKSk7cmV0dXJue2RvbWFpbjpuLmZpbHRlcihmdW5jdGlvbihzLGwpe3JldHVybiBsJWE9PT0wfSksc3RlcFdpZHRoOmEqci5zdGVwV2lkdGgoKX19LHQucHJvdG90eXBlLnRpY2tMYWJlbEFuZ2xlPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3RpY2tMYWJlbEFuZ2xlO2lmKHIhPT0wJiZyIT09OTAmJnIhPT0tOTApdGhyb3cgbmV3IEVycm9yKCJBbmdsZSAiK3IrIiBub3Qgc3VwcG9ydGVkOyBvbmx5IDAsIDkwLCBhbmQgLTkwIGFyZSB2YWxpZCB2YWx1ZXMiKTtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQW5nbGU9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnRpY2tMYWJlbFNoZWFyQW5nbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGlja0xhYmVsU2hlYXJBbmdsZTtpZihyPC04MHx8cj44MCl0aHJvdyBuZXcgRXJyb3IoIkFuZ2xlICIrcisiIG5vdCBzdXBwb3J0ZWQ7IE11c3QgYmUgYmV0d2VlbiBbLTgwLCA4MF0iKTtyZXR1cm4gdGhpcy5fdGlja0xhYmVsU2hlYXJBbmdsZT1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudGlja0xhYmVsTWF4V2lkdGg9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX3RpY2tMYWJlbE1heFdpZHRoOih0aGlzLl90aWNrTGFiZWxNYXhXaWR0aD1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLnRpY2tMYWJlbE1heExpbmVzPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl90aWNrTGFiZWxNYXhMaW5lczoodGhpcy5fdGlja0xhYmVsTWF4TGluZXM9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5fdGlja1NwYWNlUmVxdWlyZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCl9LHQucHJvdG90eXBlLl9kcmF3VGlja3M9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLG8sYTtzd2l0Y2godGhpcy50aWNrTGFiZWxBbmdsZSgpKXtjYXNlIDA6bz17bGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0Iix0b3A6ImNlbnRlciIsYm90dG9tOiJjZW50ZXIifSxhPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoiYm90dG9tIixib3R0b206InRvcCJ9O2JyZWFrO2Nhc2UgOTA6bz17bGVmdDoiY2VudGVyIixyaWdodDoiY2VudGVyIix0b3A6InJpZ2h0Iixib3R0b206ImxlZnQifSxhPXtsZWZ0OiJ0b3AiLHJpZ2h0OiJib3R0b20iLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9O2JyZWFrO2Nhc2UtOTA6bz17bGVmdDoiY2VudGVyIixyaWdodDoiY2VudGVyIix0b3A6ImxlZnQiLGJvdHRvbToicmlnaHQifSxhPXtsZWZ0OiJib3R0b20iLHJpZ2h0OiJ0b3AiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9O2JyZWFrfW4uZWFjaChmdW5jdGlvbihzKXt2YXIgbD1ZaXQuc2VsZWN0KHRoaXMpLGM9aS5pc0hvcml6b250YWwoKT9yOmkud2lkdGgoKS1pLl90aWNrU3BhY2VSZXF1aXJlZCgpLHU9aS5pc0hvcml6b250YWwoKT9pLmhlaWdodCgpLWkuX3RpY2tTcGFjZVJlcXVpcmVkKCk6cixoPXt4QWxpZ246b1tpLm9yaWVudGF0aW9uKCldLHlBbGlnbjphW2kub3JpZW50YXRpb24oKV0sdGV4dFJvdGF0aW9uOmkudGlja0xhYmVsQW5nbGUoKSx0ZXh0U2hlYXI6aS50aWNrTGFiZWxTaGVhckFuZ2xlKCl9O2lmKGkuX3RpY2tMYWJlbE1heFdpZHRoIT1udWxsKXtpZihpLm9yaWVudGF0aW9uKCk9PT0ibGVmdCImJmM+aS5fdGlja0xhYmVsTWF4V2lkdGgpe3ZhciBmPWMtaS5fdGlja0xhYmVsTWF4V2lkdGgscD1sLmF0dHIoInRyYW5zZm9ybSIpKyIgdHJhbnNsYXRlKCIrZisiLCAwKSI7bC5hdHRyKCJ0cmFuc2Zvcm0iLHApfWM9TWF0aC5taW4oYyxpLl90aWNrTGFiZWxNYXhXaWR0aCl9aS5fd3JpdGVyLndyaXRlKGkuZm9ybWF0dGVyKCkocyksYyx1LGgsbC5ub2RlKCkpfSl9LHQucHJvdG90eXBlLl9tZWFzdXJlVGlja0xhYmVscz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl9zY2FsZSxhPW8uY2xvbmVXaXRob3V0UHJvdmlkZXJzKCkucmFuZ2UoWzAsdGhpcy5pc0hvcml6b250YWwoKT9yOm5dKSxzPXRoaXMuZ2V0RG93bnNhbXBsZUluZm8oYSksbD1zLmRvbWFpbixjPXMuc3RlcFdpZHRoLHU9ci10aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpO3RoaXMuaXNIb3Jpem9udGFsKCkmJih1PWMsdGhpcy5fdGlja0xhYmVsQW5nbGUhPT0wJiYodT1uLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkpLHU9TWF0aC5tYXgodSwwKSk7dmFyIGg9Yzt0aGlzLmlzSG9yaXpvbnRhbCgpJiYoaD1uLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCksdGhpcy5fdGlja0xhYmVsQW5nbGUhPT0wJiYoaD1yLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkpLGg9TWF0aC5tYXgoaCwwKSksdGhpcy5fdGlja0xhYmVsTWF4V2lkdGghPW51bGwmJih1PU1hdGgubWluKHUsdGhpcy5fdGlja0xhYmVsTWF4V2lkdGgpKTt2YXIgZj1sLm1hcChmdW5jdGlvbih4KXtyZXR1cm4gaS5fd3JhcHBlci53cmFwKGkuZm9ybWF0dGVyKCkoeCksaS5fbWVhc3VyZXIsdSxoKX0pLHA9dGhpcy5pc0hvcml6b250YWwoKSYmdGhpcy5fdGlja0xhYmVsQW5nbGU9PT0wP1lpdC5zdW06cVh0Lk1hdGgubWF4LGQ9dGhpcy5pc0hvcml6b250YWwoKSYmdGhpcy5fdGlja0xhYmVsQW5nbGU9PT0wP3FYdC5NYXRoLm1heDpZaXQuc3VtLGc9cChmLGZ1bmN0aW9uKHgpe3JldHVybiBpLl9tZWFzdXJlci5tZWFzdXJlKHgud3JhcHBlZFRleHQpLndpZHRofSwwKSxfPWQoZixmdW5jdGlvbih4KXtyZXR1cm4gaS5fbWVhc3VyZXIubWVhc3VyZSh4LndyYXBwZWRUZXh0KS5oZWlnaHR9LDApO3JldHVybiB0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJih5PVtfLGddLGc9eVswXSxfPXlbMV0pLHt1c2VkV2lkdGg6Zyx1c2VkSGVpZ2h0Ol99O3ZhciB5fSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt2YXIgbj10aGlzLl9zY2FsZSxpPXRoaXMuZ2V0RG93bnNhbXBsZUluZm8obiksbz1pLmRvbWFpbixhPWkuc3RlcFdpZHRoLHM9YTt0aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCE9bnVsbCYmKHM9TWF0aC5taW4ocyx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCkpO3ZhciBsPWZ1bmN0aW9uKHAsZCl7dmFyIGc9bi5zY2FsZShwKS1zLzIsXz1yLmlzSG9yaXpvbnRhbCgpP2c6MCx5PXIuaXNIb3Jpem9udGFsKCk/MDpnO3JldHVybiJ0cmFuc2xhdGUoIitfKyIsIit5KyIpIn0sYz10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIitqaXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5kYXRhKG8pLHU9Yy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoaml0LkF4aXMuVElDS19MQUJFTF9DTEFTUywhMCkubWVyZ2UoYyk7Yy5leGl0KCkucmVtb3ZlKCksdS5hdHRyKCJ0cmFuc2Zvcm0iLGwpLHUudGV4dCgiIiksdGhpcy5fZHJhd1RpY2tzKGEsdSk7dmFyIGg9dGhpcy5vcmllbnRhdGlvbigpPT09InJpZ2h0Ij90aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpOjAsZj10aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj90aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpOjA7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitoKyIsIitmKyIpIiksdGhpcy5fc2hvd0FsbFRpY2tNYXJrcygpLHRoaXMuX3Nob3dBbGxUaWNrTGFiZWxzKCksdGhpcy5faGlkZVRpY2tNYXJrc1dpdGhvdXRMYWJlbCgpLHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5pc0hvcml6b250YWwoKXx8dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pLHRoaXN9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX21lYXN1cmVyLnJlc2V0KCl9LHQuX01JTklNVU1fV0lEVEhfUEVSX0xBQkVMX1BYPTE1LHR9KGppdC5BeGlzKTtYaXQuQ2F0ZWdvcnk9UnplfSk7dmFyIFdYdD1IKEtpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTnplPShkZSgpLFV0KHBlKSksT0Y9KEVyKCksVXQoTXIpKSwkaXQ9X2woKSxEemU9QnUoKSxiUz1GZSgpLHdTPVFBKCksT3plPWZ1bmN0aW9uKGUpe056ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMscixuKXx8dGhpcztyZXR1cm4gaS5fdGlja0xhYmVsUG9zaXRpb25pbmc9ImNlbnRlciIsaS5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb249ITEsaS5mb3JtYXR0ZXIoRHplLmdlbmVyYWwoKSksaX1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIHI9bmV3ICRpdC5TdmdDb250ZXh0KHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5ub2RlKCksd1MuQXhpcy5USUNLX0xBQkVMX0NMQVNTKTt0aGlzLl9tZWFzdXJlcj1uZXcgJGl0LkNhY2hlTWVhc3VyZXIociksdGhpcy5fd3JhcHBlcj1uZXcgJGl0LldyYXBwZXIoKS5tYXhMaW5lcygxKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uP3RoaXMuX2NvbXB1dGVBcHByb3hpbWF0ZVRleHRXaWR0aCgpOnRoaXMuX2NvbXB1dGVFeGFjdFRleHRXaWR0aCgpO3JldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZz09PSJjZW50ZXIiP3RoaXMuX21heExhYmVsVGlja0xlbmd0aCgpK3RoaXMudGlja0xhYmVsUGFkZGluZygpK3I6TWF0aC5tYXgodGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcil9LHQucHJvdG90eXBlLl9jb21wdXRlRXhhY3RUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0VGlja1ZhbHVlcygpLGk9bi5tYXAoZnVuY3Rpb24obyl7dmFyIGE9ci5mb3JtYXR0ZXIoKShvKTtyZXR1cm4gci5fbWVhc3VyZXIubWVhc3VyZShhKS53aWR0aH0pO3JldHVybiBiUy5NYXRoLm1heChpLDApfSx0LnByb3RvdHlwZS5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxpPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoIk0iKS53aWR0aCxvPW4ubWFwKGZ1bmN0aW9uKGEpe3ZhciBzPXIuZm9ybWF0dGVyKCkoYSk7cmV0dXJuIHMubGVuZ3RoKml9KTtyZXR1cm4gYlMuTWF0aC5tYXgobywwKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3JldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZz09PSJjZW50ZXIiP3RoaXMuX21heExhYmVsVGlja0xlbmd0aCgpK3RoaXMudGlja0xhYmVsUGFkZGluZygpK3I6TWF0aC5tYXgodGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcil9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fc2NhbGUsbj1yLmRvbWFpbigpLGk9blswXTw9blsxXT9uWzBdOm5bMV0sbz1uWzBdPj1uWzFdP25bMF06blsxXTtyZXR1cm4gci50aWNrcygpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYT49aSYmYTw9b30pfSx0LnByb3RvdHlwZS5fcmVzY2FsZT1mdW5jdGlvbigpe2lmKCEhdGhpcy5faXNTZXR1cCl7aWYoIXRoaXMuaXNIb3Jpem9udGFsKCkpe3ZhciByPXRoaXMuX2NvbXB1dGVXaWR0aCgpO2lmKHI+dGhpcy53aWR0aCgpfHxyPHRoaXMud2lkdGgoKS10aGlzLm1hcmdpbigpKXt0aGlzLnJlZHJhdygpO3JldHVybn19dGhpcy5yZW5kZXIoKX19LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXt4OjAseTowLGR4OiIwZW0iLGR5OiIwLjNlbSJ9LGk9dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksbz10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSxhPSJtaWRkbGUiLHM9MCxsPTAsYz0wLHU9MDtpZih0aGlzLmlzSG9yaXpvbnRhbCgpKXN3aXRjaCh0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZyl7Y2FzZSJsZWZ0IjphPSJlbmQiLHM9LW8sdT1vO2JyZWFrO2Nhc2UiY2VudGVyIjp1PWkrbzticmVhaztjYXNlInJpZ2h0IjphPSJzdGFydCIscz1vLHU9bzticmVha31lbHNlIHN3aXRjaCh0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZyl7Y2FzZSJ0b3AiOm4uZHk9Ii0wLjNlbSIsYz1vLGw9LW87YnJlYWs7Y2FzZSJjZW50ZXIiOmM9aStvO2JyZWFrO2Nhc2UiYm90dG9tIjpuLmR5PSIxZW0iLGM9byxsPW87YnJlYWt9dmFyIGg9dGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCk7c3dpdGNoKHRoaXMub3JpZW50YXRpb24oKSl7Y2FzZSJib3R0b20iOm4ueD1oLngxLG4uZHk9IjAuOTVlbSIsbD1oLnkxK3U7YnJlYWs7Y2FzZSJ0b3AiOm4ueD1oLngxLG4uZHk9Ii0uMjVlbSIsbD1oLnkxLXU7YnJlYWs7Y2FzZSJsZWZ0IjphPSJlbmQiLHM9aC54MS1jLG4ueT1oLnkxO2JyZWFrO2Nhc2UicmlnaHQiOmE9InN0YXJ0IixzPWgueDErYyxuLnk9aC55MTticmVha312YXIgZj10aGlzLl9nZXRUaWNrVmFsdWVzKCkscD10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEoZik7cC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9cC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQod1MuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKS5tZXJnZShwKTtkLnN0eWxlKCJ0ZXh0LWFuY2hvciIsYSkuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0IikuYXR0cnMobikudGV4dChmdW5jdGlvbihfKXtyZXR1cm4gci5mb3JtYXR0ZXIoKShfKX0pO3ZhciBnPSJ0cmFuc2xhdGUoIitzKyIsICIrbCsiKSI7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5hdHRyKCJ0cmFuc2Zvcm0iLGcpLHRoaXMuX3Nob3dBbGxUaWNrTWFya3MoKSx0aGlzLnNob3dFbmRUaWNrTGFiZWxzKCl8fHRoaXMuX2hpZGVFbmRUaWNrTGFiZWxzKCksdGhpcy5faGlkZU92ZXJmbG93aW5nVGlja0xhYmVscygpLHRoaXMuX2hpZGVPdmVybGFwcGluZ1RpY2tMYWJlbHMoKSx0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZyE9PSJjZW50ZXIiJiZ0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCksdGhpc30sdC5wcm90b3R5cGUudGlja0xhYmVsUG9zaXRpb249ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc7dmFyIG49ci50b0xvd2VyQ2FzZSgpO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpe2lmKCEobj09PSJsZWZ0Inx8bj09PSJjZW50ZXIifHxuPT09InJpZ2h0IikpdGhyb3cgbmV3IEVycm9yKG4rIiBpcyBub3QgYSB2YWxpZCB0aWNrIGxhYmVsIHBvc2l0aW9uIGZvciBhIGhvcml6b250YWwgTnVtZXJpY0F4aXMiKX1lbHNlIGlmKCEobj09PSJ0b3AifHxuPT09ImNlbnRlciJ8fG49PT0iYm90dG9tIikpdGhyb3cgbmV3IEVycm9yKG4rIiBpcyBub3QgYSB2YWxpZCB0aWNrIGxhYmVsIHBvc2l0aW9uIGZvciBhIHZlcnRpY2FsIE51bWVyaWNBeGlzIik7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPW4sdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS51c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbjoodGhpcy5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb249cix0aGlzKX0sdC5wcm90b3R5cGUuX2hpZGVFbmRUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrd1MuQXhpcy5USUNLX0xBQkVMX0NMQVNTKTtpZihuLnNpemUoKSE9PTApe3ZhciBpPW4ubm9kZXMoKVswXTtiUy5ET00uY2xpZW50UmVjdEluc2lkZShpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHxPRi5zZWxlY3QoaSkuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKTt2YXIgbz1uLm5vZGVzKClbbi5zaXplKCktMV07YlMuRE9NLmNsaWVudFJlY3RJbnNpZGUoby5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyKXx8T0Yuc2VsZWN0KG8pLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9fSx0LnByb3RvdHlwZS5faGlkZU92ZXJsYXBwaW5nVGlja0xhYmVscz1mdW5jdGlvbigpe2Zvcih2YXIgcj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbihvLGEpe3ZhciBzPU9GLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIpO3JldHVybiBzPT09ImluaGVyaXQifHxzPT09InZpc2libGUifSksbj1yLm5vZGVzKCkubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSksaT0xOyF0aGlzLl9oYXNPdmVybGFwV2l0aEludGVydmFsKGksbikmJmk8bi5sZW5ndGg7KWkrPTE7ci5lYWNoKGZ1bmN0aW9uKG8sYSl7dmFyIHM9T0Yuc2VsZWN0KHRoaXMpO2ElaSE9PTAmJnMuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfSx0LnByb3RvdHlwZS5faGFzT3ZlcmxhcFdpdGhJbnRlcnZhbD1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT10aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZz09PSJjZW50ZXIiP3RoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMudGlja0xhYmVsUGFkZGluZygpKjMsbz1uLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYlMuRE9NLmV4cGFuZFJlY3QoYyxpKX0pLGE9MDthPG8ubGVuZ3RoLXI7YSs9cil7dmFyIHM9b1thXSxsPW9bYStyXTtpZihiUy5ET00uY2xpZW50UmVjdHNPdmVybGFwKHMsbCkpcmV0dXJuITF9cmV0dXJuITB9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX21lYXN1cmVyLnJlc2V0KCl9LHR9KHdTLkF4aXMpO0tpdC5OdW1lcmljPU96ZX0pO3ZhciBZWHQ9SCh6Rj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoekYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6emU9RmUoKTtmdW5jdGlvbiBGemUoZSl7aWYoZTw9MCl0aHJvdyBuZXcgRXJyb3IoImludGVydmFsIG11c3QgYmUgcG9zaXRpdmUgbnVtYmVyIik7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQuZG9tYWluKCksbj1NYXRoLm1pbihyWzBdLHJbMV0pLGk9TWF0aC5tYXgoclswXSxyWzFdKSxvPU1hdGguY2VpbChuL2UpKmUsYT1NYXRoLmZsb29yKChpLW8pL2UpKzEscz1uJWU9PT0wP1tdOltuXSxsPXp6ZS5NYXRoLnJhbmdlKDAsYSkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiBvK3UqZX0pLGM9aSVlPT09MD9bXTpbaV07cmV0dXJuIHMuY29uY2F0KGwpLmNvbmNhdChjKX19ekYuaW50ZXJ2YWxUaWNrR2VuZXJhdG9yPUZ6ZTtmdW5jdGlvbiBCemUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kZWZhdWx0VGlja3MoKTtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24ocixuKXtyZXR1cm4gciUxPT09MHx8bj09PTB8fG49PT10Lmxlbmd0aC0xfSl9fXpGLmludGVnZXJUaWNrR2VuZXJhdG9yPUJ6ZX0pO3ZhciB0ND1IKEkxPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShJMSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZnVuY3Rpb24gSml0KGUsdCxyKXtyZXR1cm4gci0oci1lKSp0fUkxLnpvb21PdXQ9Sml0O2Z1bmN0aW9uIFppdChlLHQscil7cmV0dXJuKGUqdC1yKS8odC0xKX1mdW5jdGlvbiBIemUoZSx0LHIsbixpLG8sYSl7cmV0dXJuIHQ9alh0KGUsdCxuLGkpLFhYdChlLHQscixvLGEpfUkxLmNvbnN0cmFpbmVkWm9vbT1IemU7ZnVuY3Rpb24galh0KGUsdCxyLG4pe3ZhciBpPXQ+MSxvPWk/bjpyO2lmKG89PW51bGwpcmV0dXJuIHQ7dmFyIGE9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLHM9YVswXSxsPWFbMV0sYz1NYXRoLmFicyhsLXMpLHU9aT9NYXRoLm1pbjpNYXRoLm1heDtyZXR1cm4gdSh0LG8vYyl9STEuY29uc3RyYWluWm9vbUV4dGVudHM9alh0O2Z1bmN0aW9uIFhYdChlLHQscixuLGkpe2lmKHQ8PTEpcmV0dXJue2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fTtpZihuPT1udWxsJiZpPT1udWxsKXJldHVybntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6dH07dmFyIG89JFh0KGUpLGE9VXplKGUpLHM9YT8xLzA6LTEvMCxsPWE/LTEvMDoxLzA7bj1uPT1udWxsP3M6bixpPWk9PW51bGw/bDppO3ZhciBjPWUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKSx1PWNbMF0saD1jWzFdLGY9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKGkpLHA9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKGgpLGQ9Sml0KHAsdCxyKSxnPWUuc2NhbGVUcmFuc2Zvcm1hdGlvbihuKSxfPWUuc2NhbGVUcmFuc2Zvcm1hdGlvbih1KSx5PUppdChfLHQscikseD1NYXRoLmFicyhmLWcpLGI9TWF0aC5hYnMoZC15KTtpZihiPngpe3ZhciBTPShmLWcpLyhwLV8pO2lmKFMhPT0xKXt2YXIgQz1aaXQocCxTLGYpO3JldHVybntjZW50ZXJQb2ludDpDLHpvb21BbW91bnQ6U319ZWxzZSByZXR1cm57Y2VudGVyUG9pbnQ6cix6b29tQW1vdW50OlN9fWVsc2UgcmV0dXJuIGQ+ZiE9bz97Y2VudGVyUG9pbnQ6Wml0KHAsdCxmKSx6b29tQW1vdW50OnR9Onk8ZyE9bz97Y2VudGVyUG9pbnQ6Wml0KF8sdCxnKSx6b29tQW1vdW50OnR9OntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6dH19STEuY29uc3RyYWluWm9vbVZhbHVlcz1YWHQ7ZnVuY3Rpb24gVnplKGUsdCxyLG4pe3ZhciBpPWUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKSxvPWlbMF0sYT1pWzFdLHM9JFh0KGUpO2lmKHQ+MCE9PXMpe3ZhciBsPW47aWYobCE9bnVsbCl7dmFyIGM9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKGEpLHU9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKGwpO3Q9KHM/TWF0aC5tYXg6TWF0aC5taW4pKGMrdCx1KS1jfX1lbHNle3ZhciBsPXI7aWYobCE9bnVsbCl7dmFyIGg9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKG8pLGY9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKGwpO3Q9KHM/TWF0aC5taW46TWF0aC5tYXgpKGgrdCxmKS1ofX1yZXR1cm4gdH1JMS5jb25zdHJhaW5lZFRyYW5zbGF0aW9uPVZ6ZTtmdW5jdGlvbiAkWHQoZSl7dmFyIHQ9ZS5yYW5nZSgpO3JldHVybiB0WzFdPHRbMF19ZnVuY3Rpb24gVXplKGUpe3ZhciB0PWUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKTtyZXR1cm4gdFsxXTx0WzBdfX0pO3ZhciBMMT1IKFFpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUWl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS1h0PUZlKCkscXplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX2F1dG9Eb21haW5BdXRvbWF0aWNhbGx5PSEwLHRoaXMuX2RvbWFpbk1vZGlmaWNhdGlvbkluUHJvZ3Jlc3M9ITEsdGhpcy5fdXBkYXRlSWQ9MCx0aGlzLl9jYWxsYmFja3M9bmV3IEtYdC5DYWxsYmFja1NldCx0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycz1uZXcgS1h0LlNldH1yZXR1cm4gZS5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuW119LGUucHJvdG90eXBlLl9nZXRBbGxJbmNsdWRlZFZhbHVlcz1mdW5jdGlvbih0KXt2YXIgcj10aGlzO3Q9PT12b2lkIDAmJih0PSExKTt2YXIgbj1bXTtyZXR1cm4gdGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbz1pKHIsdCk7bj1uLmNvbmNhdChvKX0pLG59LGUucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZS5wcm90b3R5cGUub25VcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLl9kaXNwYXRjaFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUlkKyssdGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9LGUucHJvdG90eXBlLmF1dG9Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITAsdGhpcy5fc2V0RG9tYWluKHRoaXMuX2dldEV4dGVudCgpKSx0aGlzfSxlLnByb3RvdHlwZS5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlPWZ1bmN0aW9uKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHkmJnRoaXMuYXV0b0RvbWFpbigpfSxlLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHNjYWxlIil9LGUucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LGUucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9nZXREb21haW4oKToodGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITEsdGhpcy5fc2V0RG9tYWluKHQpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0RG9tYWluIil9LGUucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24odCl7dGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzc3x8KHRoaXMuX2RvbWFpbk1vZGlmaWNhdGlvbkluUHJvZ3Jlc3M9ITAsdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKHQpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSl9LGUucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfYmFja2luZ0RvbWFpbiIpfSxlLnByb3RvdHlwZS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9nZXRSYW5nZSgpOih0aGlzLl9zZXRSYW5nZSh0KSx0aGlzKX0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0UmFuZ2UiKX0sZS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX3NldFJhbmdlIil9LGUucHJvdG90eXBlLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmFkZCh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSxlLnByb3RvdHlwZS5yZW1vdmVJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5kZWxldGUodCksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sZS5wcm90b3R5cGUudXBkYXRlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlSWR9LGV9KCk7UWl0LlNjYWxlPXF6ZX0pO3ZhciByb3Q9SChlb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGVvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEd6ZT0oZGUoKSxVdChwZSkpLEZGPShFcigpLFV0KE1yKSksV3plPXQ0KCksWlh0PUZlKCksWXplPUwxKCksdG90PVswLDFdLGp6ZT1mdW5jdGlvbihlKXtHemUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyLl9yYW5nZT1bMCwxXSxyLl9kM1NjYWxlPUZGLnNjYWxlQmFuZCgpLHIuX2QzU2NhbGUucmFuZ2UodG90KSxyLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGU9RkYuc2NhbGVMaW5lYXIoKSxyLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHRvdCk7dmFyIG49LjM7cmV0dXJuIHIuX2lubmVyUGFkZGluZz10Ll9jb252ZXJ0VG9QbG90dGFibGVJbm5lclBhZGRpbmcobiksci5fb3V0ZXJQYWRkaW5nPXQuX2NvbnZlcnRUb1Bsb3R0YWJsZU91dGVyUGFkZGluZyguNSxuKSxyfXJldHVybiB0LnByb3RvdHlwZS5jbG9uZVdpdGhvdXRQcm92aWRlcnM9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgdCgpLmRvbWFpbih0aGlzLmRvbWFpbigpKS5yYW5nZSh0aGlzLnJhbmdlKCkpLmlubmVyUGFkZGluZyh0aGlzLmlubmVyUGFkZGluZygpKS5vdXRlclBhZGRpbmcodGhpcy5vdXRlclBhZGRpbmcoKSk7cmV0dXJuIHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpKSxyfSx0LnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gWlh0LkFycmF5LnVuaXEocil9LHQucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gWlh0LkFycmF5LnVuaXEodGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKSl9LHQucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuZG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuaW52ZXJ0UmFuZ2U9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyPT09dm9pZCAwJiYocj10aGlzLnJhbmdlKCkpO3ZhciBpPXRoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCksbz10aGlzLmludmVydGVkVHJhbnNmb3JtYXRpb24oclswXSksYT10aGlzLmludmVydGVkVHJhbnNmb3JtYXRpb24oclsxXSkscz10aGlzLl9kM1NjYWxlLmRvbWFpbigpLGw9cy5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIG4uX2QzU2NhbGUoaCkraS8yfSksYz1GRi5iaXNlY3QobCxvKSx1PUZGLmJpc2VjdChsLGEpO3JldHVybiBzLnNsaWNlKGMsdSl9LHQucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5yYW5nZS5jYWxsKHRoaXMscil9LHQuX2NvbnZlcnRUb1Bsb3R0YWJsZUlubmVyUGFkZGluZz1mdW5jdGlvbihyKXtyZXR1cm4gMS8oMS1yKS0xfSx0Ll9jb252ZXJ0VG9QbG90dGFibGVPdXRlclBhZGRpbmc9ZnVuY3Rpb24ocixuKXtyZXR1cm4gci8oMS1uKX0sdC5wcm90b3R5cGUuX3NldEJhbmRzPWZ1bmN0aW9uKCl7dmFyIHI9MS0xLygxK3RoaXMuaW5uZXJQYWRkaW5nKCkpLG49dGhpcy5vdXRlclBhZGRpbmcoKS8oMSt0aGlzLmlubmVyUGFkZGluZygpKTt0aGlzLl9kM1NjYWxlLnBhZGRpbmdJbm5lcihyKSx0aGlzLl9kM1NjYWxlLnBhZGRpbmdPdXRlcihuKX0sdC5wcm90b3R5cGUucmFuZ2VCYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc2NhbGVCYW5kKHRoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkpfSx0LnByb3RvdHlwZS5zdGVwV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzY2FsZUJhbmQodGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSooMSt0aGlzLmlubmVyUGFkZGluZygpKSl9LHQucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLmlubmVyUGFkZGluZz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9pbm5lclBhZGRpbmc6KHRoaXMuX2lubmVyUGFkZGluZz1yLHRoaXMucmFuZ2UodGhpcy5yYW5nZSgpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5vdXRlclBhZGRpbmc9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fb3V0ZXJQYWRkaW5nOih0aGlzLl9vdXRlclBhZGRpbmc9cix0aGlzLnJhbmdlKHRoaXMucmFuZ2UoKSksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZDNTY2FsZShyKSt0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpLzI7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZShuKX0sdC5wcm90b3R5cGUuem9vbT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz1mdW5jdGlvbihhKXtyZXR1cm4gaS5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmludmVydChXemUuem9vbU91dChhLHIsbikpfTt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5yYW5nZSgpLm1hcChvKSksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX0sdC5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbihvKXtyZXR1cm4gbi5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmludmVydChvK3IpfTt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5yYW5nZSgpLm1hcChpKSksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKHIpfSx0LnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0b3R9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4oKX0sdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocil7dGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbihyKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMuX3NldEJhbmRzKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYW5nZX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX3JhbmdlPXIsdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKHIpLHRoaXMuX3NldEJhbmRzKCl9LHQucHJvdG90eXBlLl9yZXNjYWxlQmFuZD1mdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5hYnModGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKHIpLXRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZSgwKSl9LHR9KFl6ZS5TY2FsZSk7ZW90LkNhdGVnb3J5PWp6ZX0pO3ZhciBKWHQ9SChub3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG5vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFh6ZT0oZGUoKSxVdChwZSkpLE5mPShFcigpLFV0KE1yKSksU1M9RmUoKSwkemU9TDEoKSxLemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5jb3VudD0wLHRoaXMudHJhY2tlcj17fX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0SW5kZXg9ZnVuY3Rpb24odCl7aWYodGhpcy50cmFja2VyW3RdIT1udWxsKXJldHVybiB0aGlzLnRyYWNrZXJbdF07dmFyIHI9dGhpcy5jb3VudDtyZXR1cm4gdGhpcy50cmFja2VyW3RdPXIsdGhpcy5jb3VudCs9MSxyfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuY291bnQ9MCx0aGlzLnRyYWNrZXI9e319LGV9KCksWnplPWZ1bmN0aW9uKGUpe1h6ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztuLl9yYW5nZUxlbmd0aD0xLG4uX3RyYWNrZXI9bmV3IEt6ZTt2YXIgaTtzd2l0Y2gocil7Y2FzZSBudWxsOmNhc2Ugdm9pZCAwOnQuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9PW51bGwmJih0Ll9wbG90dGFibGVDb2xvckNhY2hlPXQuX2dldFBsb3R0YWJsZUNvbG9ycygpKSxpPU5mLnNjYWxlT3JkaW5hbCgpLnJhbmdlKHQuX3Bsb3R0YWJsZUNvbG9yQ2FjaGUpO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkxMCI6Y2FzZSJjYXRlZ29yeTEwIjpjYXNlIjEwIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTEwKTticmVhaztjYXNlIkNhdGVnb3J5MjAiOmNhc2UiY2F0ZWdvcnkyMCI6Y2FzZSIyMCI6aT1OZi5zY2FsZU9yZGluYWwoTmYuc2NoZW1lQ2F0ZWdvcnkyMCk7YnJlYWs7Y2FzZSJDYXRlZ29yeTIwYiI6Y2FzZSJjYXRlZ29yeTIwYiI6Y2FzZSIyMGIiOmk9TmYuc2NhbGVPcmRpbmFsKE5mLnNjaGVtZUNhdGVnb3J5MjBiKTticmVhaztjYXNlIkNhdGVnb3J5MjBjIjpjYXNlImNhdGVnb3J5MjBjIjpjYXNlIjIwYyI6aT1OZi5zY2FsZU9yZGluYWwoTmYuc2NoZW1lQ2F0ZWdvcnkyMGMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDb2xvclNjYWxlIHR5cGUiKX1yZXR1cm4gbi5fZDNTY2FsZT1pLG4uX3JhbmdlTGVuZ3RoPW4uX2QzU2NhbGUucmFuZ2UoKS5sZW5ndGgsbn1yZXR1cm4gdC5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24ocil7cmV0dXJuIFNTLkFycmF5LnVuaXEocil9LHQucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gU1MuQXJyYXkudW5pcSh0aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpKX0sdC5pbnZhbGlkYXRlQ29sb3JDYWNoZT1mdW5jdGlvbigpe3QuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9bnVsbH0sdC5fZ2V0UGxvdHRhYmxlQ29sb3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPVtdLG49TmYuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJwbG90dGFibGUtY29sb3ItdGVzdGVyIiksaT1TUy5Db2xvci5jb2xvclRlc3QobiwiIiksbz0wLGE9U1MuQ29sb3IuY29sb3JUZXN0KG4sInBsb3R0YWJsZS1jb2xvcnMtMCIpO2EhPW51bGwmJm88dGhpcy5fTUFYSU1VTV9DT0xPUlNfRlJPTV9DU1MmJiEoYT09PWkmJmE9PT1yW3IubGVuZ3RoLTFdKTspci5wdXNoKGEpLG8rKyxhPVNTLkNvbG9yLmNvbG9yVGVzdChuLCJwbG90dGFibGUtY29sb3JzLSIrbyk7cmV0dXJuIG4ucmVtb3ZlKCkscn0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZDNTY2FsZShyKSxpPXRoaXMuX3RyYWNrZXIuZ2V0SW5kZXgociksbz1NYXRoLmZsb29yKGkvdGhpcy5fcmFuZ2VMZW5ndGgpO2lmKG89PT0wKXJldHVybiBuO3ZhciBhPU1hdGgubG9nKG8qdC5fTE9PUF9MSUdIVEVOX0ZBQ1RPUisxKTtyZXR1cm4gU1MuQ29sb3IubGlnaHRlbkNvbG9yKG4sYSl9LHQucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcy5fdHJhY2tlci5jbGVhcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fZDNTY2FsZS5yYW5nZShyKSx0aGlzLl9yYW5nZUxlbmd0aD1yLmxlbmd0aH0sdC5fTE9PUF9MSUdIVEVOX0ZBQ1RPUj0xLjYsdC5fTUFYSU1VTV9DT0xPUlNfRlJPTV9DU1M9MjU2LHR9KCR6ZS5TY2FsZSk7bm90LkNvbG9yPVp6ZX0pO3ZhciB0JHQ9SChpb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEp6ZT0oZGUoKSxVdChwZSkpLE1TPShFcigpLFV0KE1yKSksUVh0PUZlKCksUXplPUwxKCksdEZlPWZ1bmN0aW9uKGUpe0p6ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSJsaW5lYXIiKTt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7c3dpdGNoKHIpe2Nhc2UibGluZWFyIjpuLl9jb2xvclNjYWxlPU1TLnNjYWxlTGluZWFyKCk7YnJlYWs7Y2FzZSJsb2ciOm4uX2NvbG9yU2NhbGU9TVMuc2NhbGVMb2coKTticmVhaztjYXNlInNxcnQiOm4uX2NvbG9yU2NhbGU9TVMuc2NhbGVTcXJ0KCk7YnJlYWs7Y2FzZSJwb3ciOm4uX2NvbG9yU2NhbGU9TVMuc2NhbGVQb3coKTticmVha31pZihuLl9jb2xvclNjYWxlPT1udWxsKXRocm93IG5ldyBFcnJvcigidW5rbm93biBRdWFudGl0YXRpdmVTY2FsZSBzY2FsZSB0eXBlICIrcik7cmV0dXJuIG4ucmFuZ2UodC5SRURTKSxufXJldHVybiB0LnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihyKXt2YXIgbj1NUy5leHRlbnQocik7cmV0dXJuIG5bMF09PW51bGx8fG5bMV09PW51bGw/W106bn0sdC5wcm90b3R5cGUuX2QzSW50ZXJwb2xhdGVkU2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZS5yYW5nZShbMCwxXSkuaW50ZXJwb2xhdGUodGhpcy5faW50ZXJwb2xhdGVDb2xvcnMoKSl9LHQucHJvdG90eXBlLl9pbnRlcnBvbGF0ZUNvbG9ycz1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2NvbG9yUmFuZ2U7aWYoci5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIkNvbG9yIHNjYWxlIGFycmF5cyBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIGVsZW1lbnRzLiIpO3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiBmdW5jdGlvbihvKXtvPU1hdGgubWF4KDAsTWF0aC5taW4oMSxvKSk7dmFyIGE9byooci5sZW5ndGgtMSkscz1NYXRoLmZsb29yKGEpLGw9TWF0aC5jZWlsKGEpLGM9YS1zO3JldHVybiBNUy5pbnRlcnBvbGF0ZUxhYihyW3NdLHJbbF0pKGMpfX19LHQucHJvdG90eXBlLl9yZXNldFNjYWxlPWZ1bmN0aW9uKCl7dGhpcy5fZDNTY2FsZT10aGlzLl9kM0ludGVycG9sYXRlZFNjYWxlKCksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX0sdC5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCk7cmV0dXJuIHIubGVuZ3RoPjAmJnRoaXMuX3NldERvbWFpbihbUVh0Lk1hdGgubWluKHIsMCksUVh0Lk1hdGgubWF4KHIsMCldKSx0aGlzfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbG9yUmFuZ2V9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9jb2xvclJhbmdlPXIsdGhpcy5fcmVzZXRTY2FsZSgpfSx0LlJFRFM9WyIjRkZGRkZGIiwiI0ZGRjZFMSIsIiNGRUY0QzAiLCIjRkVEOTc2IiwiI0ZFQjI0QyIsIiNGRDhEM0MiLCIjRkM0RTJBIiwiI0UzMUExQyIsIiNCMTAwMjYiXSx0LkJMVUVTPVsiI0ZGRkZGRiIsIiNDQ0ZGRkYiLCIjQTVGRkZEIiwiIzg1RjdGQiIsIiM2RUQzRUYiLCIjNTVBN0UwIiwiIzQxN0ZEMCIsIiMyNTQ1RDMiLCIjMEIwMkUxIl0sdC5QT1NORUc9WyIjMEIwMkUxIiwiIzI1NDVEMyIsIiM0MTdGRDAiLCIjNTVBN0UwIiwiIzZFRDNFRiIsIiM4NUY3RkIiLCIjQTVGRkZEIiwiI0NDRkZGRiIsIiNGRkZGRkYiLCIjRkZGNkUxIiwiI0ZFRjRDMCIsIiNGRUQ5NzYiLCIjRkVCMjRDIiwiI0ZEOEQzQyIsIiNGQzRFMkEiLCIjRTMxQTFDIiwiI0IxMDAyNiJdLHR9KFF6ZS5TY2FsZSk7aW90LkludGVycG9sYXRlZENvbG9yPXRGZX0pO3ZhciB2ZD1IKG9vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkob290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZUZlPShkZSgpLFV0KHBlKSksckZlPShFcigpLFV0KE1yKSksbkZlPXQ0KCksRVM9RmUoKSxpRmU9TDEoKSxvRmU9ZnVuY3Rpb24oZSl7ZUZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX3RpY2tHZW5lcmF0b3I9ZnVuY3Rpb24obil7cmV0dXJuIG4uZGVmYXVsdFRpY2tzKCl9LHIuX3BhZFByb3BvcnRpb249LjA1LHIuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD0hMCxyLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycz1uZXcgRVMuU2V0LHJ9cmV0dXJuIHQucHJvdG90eXBlLmF1dG9Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9tYWluTWluPW51bGwsdGhpcy5fZG9tYWluTWF4PW51bGwsZS5wcm90b3R5cGUuYXV0b0RvbWFpbi5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9kb21haW5NaW4hPW51bGwmJnRoaXMuX2RvbWFpbk1heCE9bnVsbCl7dGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4sdGhpcy5fZG9tYWluTWF4XSk7cmV0dXJufXZhciByPXRoaXMuX2dldEV4dGVudCgpO2lmKHRoaXMuX2RvbWFpbk1pbiE9bnVsbCl7dmFyIG49clsxXTt0aGlzLl9kb21haW5NaW4+PW4mJihuPXRoaXMuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluKFt0aGlzLl9kb21haW5NaW4sdGhpcy5fZG9tYWluTWluXSlbMV0pLHRoaXMuX3NldERvbWFpbihbdGhpcy5fZG9tYWluTWluLG5dKTtyZXR1cm59aWYodGhpcy5fZG9tYWluTWF4IT1udWxsKXt2YXIgaT1yWzBdO3RoaXMuX2RvbWFpbk1heDw9aSYmKGk9dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1heCx0aGlzLl9kb21haW5NYXhdKVswXSksdGhpcy5fc2V0RG9tYWluKFtpLHRoaXMuX2RvbWFpbk1heF0pO3JldHVybn1lLnByb3RvdHlwZS5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlLmNhbGwodGhpcyl9LHQucHJvdG90eXBlLl9nZXRVbmJvdW5kZWRFeHRlbnQ9ZnVuY3Rpb24ocil7cj09PXZvaWQgMCYmKHI9ITEpO3ZhciBuPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHIpLGk9dGhpcy5fZGVmYXVsdEV4dGVudCgpO2lmKG4ubGVuZ3RoIT09MCl7dmFyIG89W0VTLk1hdGgubWluKG4saVswXSksRVMuTWF0aC5tYXgobixpWzFdKV07aT10aGlzLl9wYWREb21haW4obyl9cmV0dXJuIGl9LHQucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoKTtyZXR1cm4gdGhpcy5fZG9tYWluTWluIT1udWxsJiYoclswXT10aGlzLl9kb21haW5NaW4pLHRoaXMuX2RvbWFpbk1heCE9bnVsbCYmKHJbMV09dGhpcy5fZG9tYWluTWF4KSxyfSx0LnByb3RvdHlwZS5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5hZGQociksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnMuZGVsZXRlKHIpLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LHQucHJvdG90eXBlLnBhZFByb3BvcnRpb249ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJwYWRQcm9wb3J0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7cmV0dXJuIHRoaXMuX3BhZFByb3BvcnRpb249cix0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSx0LnByb3RvdHlwZS5fcGFkRG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYoclswXS52YWx1ZU9mKCk9PT1yWzFdLnZhbHVlT2YoKSlyZXR1cm4gdGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4ocik7aWYodGhpcy5fcGFkUHJvcG9ydGlvbj09PTApcmV0dXJuIHI7dmFyIGk9dGhpcy5fcGFkUHJvcG9ydGlvbi8yLG89clswXSxhPXJbMV0scz0hMSxsPSExO3RoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmZvckVhY2goZnVuY3Rpb24oZil7dmFyIHA9ZihuKTtwLmZvckVhY2goZnVuY3Rpb24oZCl7ZC52YWx1ZU9mKCk9PT1vLnZhbHVlT2YoKSYmKHM9ITApLGQudmFsdWVPZigpPT09YS52YWx1ZU9mKCkmJihsPSEwKX0pfSk7dmFyIGM9dGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCk7dGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKHIpO3ZhciB1PXM/bzp0aGlzLmludmVydCh0aGlzLnNjYWxlKG8pLSh0aGlzLnNjYWxlKGEpLXRoaXMuc2NhbGUobykpKmkpLGg9bD9hOnRoaXMuaW52ZXJ0KHRoaXMuc2NhbGUoYSkrKHRoaXMuc2NhbGUoYSktdGhpcy5zY2FsZShvKSkqaSk7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbihjKSx0aGlzLl9zbmFwcGluZ0RvbWFpbkVuYWJsZWQ/dGhpcy5fbmljZURvbWFpbihbdSxoXSk6W3UsaF19LHQucHJvdG90eXBlLnNuYXBwaW5nRG9tYWluRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zbmFwcGluZ0RvbWFpbkVuYWJsZWQ6KHRoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD1yLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHJ9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGludmVydCIpfSx0LnByb3RvdHlwZS5kb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHIhPW51bGwmJih0aGlzLl9kb21haW5NaW49clswXSx0aGlzLl9kb21haW5NYXg9clsxXSksZS5wcm90b3R5cGUuZG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuZG9tYWluTWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuZG9tYWluKClbMF06KHRoaXMuX2RvbWFpbk1pbj1yLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5kb21haW5NYXg9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5kb21haW4oKVsxXToodGhpcy5fZG9tYWluTWF4PXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXJGZS5leHRlbnQoci5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIEVTLk1hdGguaXNWYWxpZE51bWJlcigraSl9KSk7cmV0dXJuIG5bMF09PW51bGx8fG5bMV09PW51bGw/W106bn0sdC5wcm90b3R5cGUuem9vbT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz1mdW5jdGlvbihhKXtyZXR1cm4gaS5pbnZlcnQobkZlLnpvb21PdXQoYSxyLG4pKX07dGhpcy5kb21haW4odGhpcy5yYW5nZSgpLm1hcChvKSl9LHQucHJvdG90eXBlLnBhbj1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ZnVuY3Rpb24obyl7cmV0dXJuIG4uaW52ZXJ0KG8rcil9O3RoaXMuZG9tYWluKHRoaXMucmFuZ2UoKS5tYXAoaSkpfSx0LnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGVUcmFuc2Zvcm1hdGlvbiIpfSx0LnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbiIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQiKX0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGdldFRyYW5zZm9ybWF0aW9uRG9tYWluIil9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKX0sdC5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbihyKXt2YXIgbj1mdW5jdGlvbihpKXtyZXR1cm4gRVMuTWF0aC5pc05hTihpKXx8aT09PTEvMHx8aT09PS0xLzB9O2lmKG4oclswXSl8fG4oclsxXSkpe0VTLldpbmRvdy53YXJuKCJXYXJuaW5nOiBRdWFudGl0YXRpdmVTY2FsZXMgY2Fubm90IHRha2UgTmFOIG9yIEluZmluaXR5IGFzIGEgZG9tYWluIHZhbHVlLiBJZ25vcmluZy4iKTtyZXR1cm59ZS5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2dldERlZmF1bHRUaWNrcyIpfSx0LnByb3RvdHlwZS50aWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90aWNrR2VuZXJhdG9yKHRoaXMpfSx0LnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihyLG4pe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX25pY2VEb21haW4iKX0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9kZWZhdWx0RXh0ZW50Iil9LHQucHJvdG90eXBlLnRpY2tHZW5lcmF0b3I9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fdGlja0dlbmVyYXRvcjoodGhpcy5fdGlja0dlbmVyYXRvcj1yLHRoaXMpfSx0Ll9ERUZBVUxUX05VTV9USUNLUz0xMCx0fShpRmUuU2NhbGUpO29vdC5RdWFudGl0YXRpdmVTY2FsZT1vRmV9KTt2YXIgZSR0PUgoYW90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhRmU9KGRlKCksVXQocGUpKSxzRmU9KEVyKCksVXQoTXIpKSxsRmU9dmQoKSxjRmU9ZnVuY3Rpb24oZSl7YUZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2QzU2NhbGU9c0ZlLnNjYWxlTGluZWFyKCkscn1yZXR1cm4gdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCwxXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByWzBdPT09clsxXT9bclswXS0xLHJbMV0rMV06cn0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUocil9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLmRvbWFpbihyKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHIpLm5pY2UobikuZG9tYWluKCl9LHR9KGxGZS5RdWFudGl0YXRpdmVTY2FsZSk7YW90LkxpbmVhcj1jRmV9KTt2YXIgciR0PUgoc290PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB1RmU9KGRlKCksVXQocGUpKSxoRmU9KEVyKCksVXQoTXIpKSxmRmU9dmQoKSxwRmU9ZnVuY3Rpb24oZSl7dUZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9MTApO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZDNTY2FsZT1oRmUuc2NhbGVMb2coKS5iYXNlKHIpLG4uX3NldERvbWFpbihuLl9kZWZhdWx0RXh0ZW50KCkpLG59cmV0dXJuIHQucHJvdG90eXBlLl9kZWZhdWx0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuWzEsdGhpcy5fZDNTY2FsZS5iYXNlKCldfSx0LnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHJbMF09PT1yWzFdP1tyWzBdL3RoaXMuX2QzU2NhbGUuYmFzZSgpLHJbMV0qdGhpcy5fZDNTY2FsZS5iYXNlKCldOnJ9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHIpfSx0LnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnNjYWxlKHIpfSx0LnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmludmVydChyKX0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocil7dGhpcy5kb21haW4ocil9LHQucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpfSx0LnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyh0Ll9ERUZBVUxUX05VTV9USUNLUyl9LHQucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2QzU2NhbGUuY29weSgpLmRvbWFpbihyKS5uaWNlKCkuZG9tYWluKCl9LHR9KGZGZS5RdWFudGl0YXRpdmVTY2FsZSk7c290LkxvZz1wRmV9KTt2YXIgbiR0PUgoY290PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBkRmU9KGRlKCksVXQocGUpKSxlND0oRXIoKSxVdChNcikpLFRTPUZlKCksbG90PWtzKCksbUZlPXZkKCksZ0ZlPWZ1bmN0aW9uKGUpe2RGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPTEwKTt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7aWYobi5fbG9nVGlja0dlbmVyYXRvcj1mdW5jdGlvbihpKXt2YXIgbz1mdW5jdGlvbih4LGIsUyl7cmV0dXJuW3gsYixTXS5zb3J0KGZ1bmN0aW9uKEMsUCl7cmV0dXJuIEMtUH0pWzFdfSxhPVRTLk1hdGgubWluKG4uX3VudHJhbnNmb3JtZWREb21haW4sMCkscz1UUy5NYXRoLm1heChuLl91bnRyYW5zZm9ybWVkRG9tYWluLDApLGw9YSxjPW8oYSxzLC1uLl9waXZvdCksdT1vKGEscyxuLl9waXZvdCksaD1zLGY9bi5fbG9nVGlja3MoLWMsLWwpLm1hcChmdW5jdGlvbih4KXtyZXR1cm4teH0pLnJldmVyc2UoKSxwPW4uX2xvZ1RpY2tzKHUsaCksZD1NYXRoLm1heChhLC1uLl9waXZvdCksZz1NYXRoLm1pbihzLG4uX3Bpdm90KSxfPWU0LnNjYWxlTGluZWFyKCkuZG9tYWluKFtkLGddKS50aWNrcyhuLl9ob3dNYW55VGlja3MoZCxnKSkseT1mLmNvbmNhdChfKS5jb25jYXQocCk7cmV0dXJuIHkubGVuZ3RoPD0xJiYoeT1lNC5zY2FsZUxpbmVhcigpLmRvbWFpbihbYSxzXSkudGlja3MobG90Lk1vZGlmaWVkTG9nLl9ERUZBVUxUX05VTV9USUNLUykpLHl9LG4uX2QzU2NhbGU9ZTQuc2NhbGVMaW5lYXIoKSxuLl9iYXNlPXIsbi5fcGl2b3Q9bi5fYmFzZSxuLl9zZXREb21haW4obi5fZGVmYXVsdEV4dGVudCgpKSxuLnRpY2tHZW5lcmF0b3Iobi5fbG9nVGlja0dlbmVyYXRvcikscjw9MSl0aHJvdyBuZXcgRXJyb3IoIk1vZGlmaWVkTG9nU2NhbGU6IFRoZSBiYXNlIG11c3QgYmUgPiAxIik7cmV0dXJuIG59cmV0dXJuIHQucHJvdG90eXBlLl9hZGp1c3RlZExvZz1mdW5jdGlvbihyKXt2YXIgbj1yPDA/LTE6MTtyZXR1cm4gcio9bixyPHRoaXMuX3Bpdm90JiYocis9KHRoaXMuX3Bpdm90LXIpL3RoaXMuX3Bpdm90KSxyPU1hdGgubG9nKHIpL01hdGgubG9nKHRoaXMuX2Jhc2UpLHIqPW4scn0sdC5wcm90b3R5cGUuX2ludmVydGVkQWRqdXN0ZWRMb2c9ZnVuY3Rpb24ocil7dmFyIG49cjwwPy0xOjE7cmV0dXJuIHIqPW4scj1NYXRoLnBvdyh0aGlzLl9iYXNlLHIpLHI8dGhpcy5fcGl2b3QmJihyPXRoaXMuX3Bpdm90KihyLTEpLyh0aGlzLl9waXZvdC0xKSkscio9bixyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZSh0aGlzLl9hZGp1c3RlZExvZyhyKSl9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5faW52ZXJ0ZWRBZGp1c3RlZExvZyh0aGlzLl9kM1NjYWxlLmludmVydChyKSl9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLmRvbWFpbihyKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWlufSx0LnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuX3VudHJhbnNmb3JtZWREb21haW49cjt2YXIgbj1bdGhpcy5fYWRqdXN0ZWRMb2coclswXSksdGhpcy5fYWRqdXN0ZWRMb2coclsxXSldO2UucHJvdG90eXBlLl9zZXREb21haW4uY2FsbCh0aGlzLG4pfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fbG9nVGlja3M9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLG89dGhpcy5faG93TWFueVRpY2tzKHIsbik7aWYobz09PTApcmV0dXJuW107dmFyIGE9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLmxvZyh0aGlzLl9iYXNlKSkscz1NYXRoLmNlaWwoTWF0aC5sb2cobikvTWF0aC5sb2codGhpcy5fYmFzZSkpLGw9ZTQucmFuZ2UocyxhLC1NYXRoLmNlaWwoKHMtYSkvbykpLGM9ZTQucmFuZ2UodGhpcy5fYmFzZSwxLC0odGhpcy5fYmFzZS0xKSkubWFwKE1hdGguZmxvb3IpLHU9VFMuQXJyYXkudW5pcShjKSxoPWwubWFwKGZ1bmN0aW9uKGcpe3JldHVybiB1Lm1hcChmdW5jdGlvbihfKXtyZXR1cm4gTWF0aC5wb3coaS5fYmFzZSxnLTEpKl99KX0pLGY9VFMuQXJyYXkuZmxhdHRlbihoKSxwPWYuZmlsdGVyKGZ1bmN0aW9uKGcpe3JldHVybiByPD1nJiZnPD1ufSksZD1wLnNvcnQoZnVuY3Rpb24oZyxfKXtyZXR1cm4gZy1ffSk7cmV0dXJuIGR9LHQucHJvdG90eXBlLl9ob3dNYW55VGlja3M9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9hZGp1c3RlZExvZyhUUy5NYXRoLm1pbih0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluLDApKSxvPXRoaXMuX2FkanVzdGVkTG9nKFRTLk1hdGgubWF4KHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLGE9dGhpcy5fYWRqdXN0ZWRMb2cocikscz10aGlzLl9hZGp1c3RlZExvZyhuKSxsPShzLWEpLyhvLWkpLGM9TWF0aC5jZWlsKGwqbG90Lk1vZGlmaWVkTG9nLl9ERUZBVUxUX05VTV9USUNLUyk7cmV0dXJuIGN9LHQucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHJ9LHQucHJvdG90eXBlLl9kZWZhdWx0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuWzAsdGhpcy5fYmFzZV19LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtpZihyWzBdPT09clsxXSl7dmFyIG49clswXTtyZXR1cm4gbj4wP1tuL3RoaXMuX2Jhc2Usbip0aGlzLl9iYXNlXTpuPT09MD9bLXRoaXMuX2Jhc2UsdGhpcy5fYmFzZV06W24qdGhpcy5fYmFzZSxuL3RoaXMuX2Jhc2VdfXJldHVybiByfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fZDNTY2FsZS5yYW5nZShyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUudGlja3MobG90Lk1vZGlmaWVkTG9nLl9ERUZBVUxUX05VTV9USUNLUyl9LHR9KG1GZS5RdWFudGl0YXRpdmVTY2FsZSk7Y290Lk1vZGlmaWVkTG9nPWdGZX0pO3ZhciBpJHQ9SCh1b3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIF9GZT0oZGUoKSxVdChwZSkpLGdhPShFcigpLFV0KE1yKSksazE9QkYoKSx5RmU9dmQoKSx2RmU9ZnVuY3Rpb24oZSl7X0ZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2QzU2NhbGU9Z2Euc2NhbGVUaW1lKCksci5hdXRvRG9tYWluKCkscn1yZXR1cm4gdC5wcm90b3R5cGUudGlja0ludGVydmFsPWZ1bmN0aW9uKHIsbixpKXtuPT09dm9pZCAwJiYobj0xKSxpPT09dm9pZCAwJiYoaT0hMSk7dmFyIG89Z2Euc2NhbGVUaW1lKCksYT10LnRpbWVJbnRlcnZhbFRvRDNUaW1lKHIsaSkuZXZlcnkobik7cmV0dXJuIG8uZG9tYWluKHRoaXMuZG9tYWluKCkpLG8ucmFuZ2UodGhpcy5yYW5nZSgpKSxvLnRpY2tzKGEpfSx0LnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe2lmKHJbMV08clswXSl0aHJvdyBuZXcgRXJyb3IoIlNjYWxlLlRpbWUgZG9tYWluIHZhbHVlcyBtdXN0IGJlIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIiKTtyZXR1cm4gZS5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9kZWZhdWx0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuW25ldyBEYXRlKCIxOTcwLTAxLTAxIiksbmV3IERhdGUoIjE5NzAtMDEtMDIiKV19LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXt2YXIgbj1yWzBdLmdldFRpbWUoKSxpPXJbMV0uZ2V0VGltZSgpO2lmKG49PT1pKXt2YXIgbz1uZXcgRGF0ZShuKTtvLnNldERhdGUoby5nZXREYXRlKCktMSk7dmFyIGE9bmV3IERhdGUoaSk7cmV0dXJuIGEuc2V0RGF0ZShhLmdldERhdGUoKSsxKSxbbyxhXX1yZXR1cm4gcn0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUocil9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUobmV3IERhdGUocikpfSx0LnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmludmVydChyKS5nZXRUaW1lKCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKTtyZXR1cm5bclswXS52YWx1ZU9mKCksclsxXS52YWx1ZU9mKCldfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3ZhciByPXRoaXMuZG9tYWluKCk7cmV0dXJuW3JbMF0udmFsdWVPZigpLHJbMV0udmFsdWVPZigpXX0sdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocil7dmFyIG49clswXSxpPXJbMV07dGhpcy5kb21haW4oW25ldyBEYXRlKG4pLG5ldyBEYXRlKGkpXSl9LHQucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpfSx0LnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyh0Ll9ERUZBVUxUX05VTV9USUNLUyl9LHQucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlLmNvcHkoKS5kb21haW4ocikubmljZSgpLmRvbWFpbigpfSx0LnRpbWVJbnRlcnZhbFRvRDNUaW1lPWZ1bmN0aW9uKHIsbil7c3dpdGNoKHIpe2Nhc2UgazEuVGltZUludGVydmFsLnNlY29uZDpyZXR1cm4gbj9nYS51dGNTZWNvbmQ6Z2EudGltZVNlY29uZDtjYXNlIGsxLlRpbWVJbnRlcnZhbC5taW51dGU6cmV0dXJuIG4/Z2EudXRjTWludXRlOmdhLnRpbWVNaW51dGU7Y2FzZSBrMS5UaW1lSW50ZXJ2YWwuaG91cjpyZXR1cm4gbj9nYS51dGNIb3VyOmdhLnRpbWVIb3VyO2Nhc2UgazEuVGltZUludGVydmFsLmRheTpyZXR1cm4gbj9nYS51dGNEYXk6Z2EudGltZURheTtjYXNlIGsxLlRpbWVJbnRlcnZhbC53ZWVrOnJldHVybiBuP2dhLnV0Y1dlZWs6Z2EudGltZVdlZWs7Y2FzZSBrMS5UaW1lSW50ZXJ2YWwubW9udGg6cmV0dXJuIG4/Z2EudXRjTW9udGg6Z2EudGltZU1vbnRoO2Nhc2UgazEuVGltZUludGVydmFsLnllYXI6cmV0dXJuIG4/Z2EudXRjWWVhcjpnYS50aW1lWWVhcjtkZWZhdWx0OnRocm93IEVycm9yKCJUaW1lSW50ZXJ2YWwgc3BlY2lmaWVkIGRvZXMgbm90IGV4aXN0OiAiK3IpfX0sdH0oeUZlLlF1YW50aXRhdGl2ZVNjYWxlKTt1b3QuVGltZT12RmV9KTt2YXIga3M9SChIdT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSHUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBSMT0oZGUoKSxVdChwZSkpLHhGZT1ZWHQoKTtIdS5UaWNrR2VuZXJhdG9ycz14RmU7UjEuX19leHBvcnRTdGFyKHJvdCgpLEh1KTtSMS5fX2V4cG9ydFN0YXIoSlh0KCksSHUpO1IxLl9fZXhwb3J0U3Rhcih0JHQoKSxIdSk7UjEuX19leHBvcnRTdGFyKGUkdCgpLEh1KTtSMS5fX2V4cG9ydFN0YXIociR0KCksSHUpO1IxLl9fZXhwb3J0U3RhcihuJHQoKSxIdSk7UjEuX19leHBvcnRTdGFyKGkkdCgpLEh1KTt2YXIgYkZlPXJvdCgpLHdGZT12ZCgpO2Z1bmN0aW9uIFNGZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHdGZS5RdWFudGl0YXRpdmVTY2FsZXx8ZSBpbnN0YW5jZW9mIGJGZS5DYXRlZ29yeX1IdS5pc1RyYW5zZm9ybWFibGU9U0ZlfSk7dmFyIEJGPUgoU2U9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTUZlPShkZSgpLFV0KHBlKSksVnU9KEVyKCksVXQoTXIpKSxvJHQ9X2woKSxhJHQ9QnUoKSxFRmU9a3MoKSxyND1GZSgpLGhvdD1JZigpLHRzPVFBKCk7U2UuVGltZUludGVydmFsPWhvdC5tYWtlRW51bShbInNlY29uZCIsIm1pbnV0ZSIsImhvdXIiLCJkYXkiLCJ3ZWVrIiwibW9udGgiLCJ5ZWFyIl0pO1NlLlRpbWVBeGlzT3JpZW50YXRpb249aG90Lm1ha2VFbnVtKFsidG9wIiwiYm90dG9tIl0pO1NlLlRpZXJMYWJlbFBvc2l0aW9uPWhvdC5tYWtlRW51bShbImJldHdlZW4iLCJjZW50ZXIiXSk7dmFyIFRGZT1mdW5jdGlvbihlKXtNRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4saSl7dmFyIG89ZS5jYWxsKHRoaXMscixuKXx8dGhpcztyZXR1cm4gby5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uPW51bGwsby5fdGllckxhYmVsUG9zaXRpb25zPVtdLG8uX3VzZVVUQz1pLG8uYWRkQ2xhc3MoInRpbWUtYXhpcyIpLG8udGlja0xhYmVsUGFkZGluZyg1KSxvLmF4aXNDb25maWd1cmF0aW9ucyh0Ll9ERUZBVUxUX1RJTUVfQVhJU19DT05GSUdVUkFUSU9OUyhvLl91c2VVVEMpKSxvLmFubm90YXRpb25Gb3JtYXR0ZXIoYSR0LnRpbWUoIiVhICViICVkLCAlWSIsby5fdXNlVVRDKSksb31yZXR1cm4gdC5wcm90b3R5cGUudGllckxhYmVsUG9zaXRpb25zPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9ucztpZighci5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4gbi50b0xvd2VyQ2FzZSgpPT09ImJldHdlZW4ifHxuLnRvTG93ZXJDYXNlKCk9PT0iY2VudGVyIn0pKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgcG9zaXRpb24gZm9yIHRpZXIgbGFiZWxzIik7cmV0dXJuIHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9ucz1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUubWF4VGltZUludGVydmFsUHJlY2lzaW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbjoodGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUuY3VycmVudEF4aXNDb25maWd1cmF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XX0sdC5wcm90b3R5cGUuYXhpc0NvbmZpZ3VyYXRpb25zPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uczt0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnM9cix0aGlzLl9udW1UaWVycz1yNC5NYXRoLm1heCh0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0pLDApLHRoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX3NldHVwRG9tRWxlbWVudHMoKTtmb3IodmFyIG49dGhpcy50aWVyTGFiZWxQb3NpdGlvbnMoKSxpPVtdLG89MDtvPHRoaXMuX251bVRpZXJzO28rKylpLnB1c2gobltvXXx8ImJldHdlZW4iKTtyZXR1cm4gdGhpcy50aWVyTGFiZWxQb3NpdGlvbnMoaSksdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5fZ2V0TW9zdFByZWNpc2VDb25maWd1cmF0aW9uSW5kZXg9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLmxlbmd0aDtyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24oaSxvKXtvPG4mJmkuZXZlcnkoZnVuY3Rpb24oYSl7cmV0dXJuIHIuX2NoZWNrVGltZUF4aXNUaWVyQ29uZmlndXJhdGlvbihhKX0pJiYobj1vKX0pLG49PT10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubGVuZ3RoJiYocjQuV2luZG93Lndhcm4oInpvb21lZCBvdXQgdG9vIGZhcjogY291bGQgbm90IGZpbmQgc3VpdGFibGUgaW50ZXJ2YWwgdG8gZGlzcGxheSBsYWJlbHMiKSwtLW4pLG59LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe2lmKHImJihyLnRvTG93ZXJDYXNlKCk9PT0icmlnaHQifHxyLnRvTG93ZXJDYXNlKCk9PT0ibGVmdCIpKXRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgc3VwcG9ydGVkIG9yaWVudGF0aW9uIGZvciBUaW1lQXhpcyAtIG9ubHkgaG9yaXpvbnRhbCBvcmllbnRhdGlvbnMgYXJlIHN1cHBvcnRlZCIpO3JldHVybiBlLnByb3RvdHlwZS5vcmllbnRhdGlvbi5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9jb21wdXRlSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodDt0aGlzLl90aWVySGVpZ2h0cz1bXTtmb3IodmFyIG49MDtuPHRoaXMuX251bVRpZXJzO24rKyl0aGlzLl90aWVySGVpZ2h0cy5wdXNoKHIrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrKHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT09PSJiZXR3ZWVuIj8wOnRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpKSk7cmV0dXJuIFZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cyl9LHQucHJvdG90eXBlLl9nZXRJbnRlcnZhbExlbmd0aD1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9zY2FsZS5kb21haW4oKVswXSxpPUVGZS5UaW1lLnRpbWVJbnRlcnZhbFRvRDNUaW1lKHIuaW50ZXJ2YWwsdGhpcy5fdXNlVVRDKSxvPWkub2Zmc2V0KG4sci5zdGVwKTtpZihvPnRoaXMuX3NjYWxlLmRvbWFpbigpWzFdKXJldHVybiB0aGlzLndpZHRoKCk7dmFyIGE9TWF0aC5hYnModGhpcy5fc2NhbGUuc2NhbGUobyktdGhpcy5fc2NhbGUuc2NhbGUobikpO3JldHVybiBhfSx0LnByb3RvdHlwZS5fbWF4V2lkdGhGb3JJbnRlcnZhbD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fbWVhc3VyZXIubWVhc3VyZShyLmZvcm1hdHRlcih0Ll9MT05HX0RBVEUpKS53aWR0aH0sdC5wcm90b3R5cGUuX2NoZWNrVGltZUF4aXNUaWVyQ29uZmlndXJhdGlvbj1mdW5jdGlvbihyKXtpZih0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb24hPW51bGwpe3ZhciBuPXQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYW3RoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbl0saT10Ll9TT1JURURfVElNRV9JTlRFUlZBTF9JTkRFWFtyLmludGVydmFsXTtpZihuIT1udWxsJiZpIT1udWxsJiZpPG4pcmV0dXJuITF9dmFyIG89dGhpcy5fbWF4V2lkdGhGb3JJbnRlcnZhbChyKSsyKnRoaXMudGlja0xhYmVsUGFkZGluZygpO3JldHVybiBNYXRoLm1pbih0aGlzLl9nZXRJbnRlcnZhbExlbmd0aChyKSx0aGlzLndpZHRoKCkpPj1vfSx0LnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihyLG4pe3ZhciBpPWUucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyLmNhbGwodGhpcyxyLG4pLG89dGhpcy5fdGllckhlaWdodHMucmVkdWNlKGZ1bmN0aW9uKHMsbCxjLHUpe3JldHVybiBzK2w+aS5oZWlnaHQ/czpzK2x9KSxhPXRoaXMubWFyZ2luKCkrKHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCk/dGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCkqdGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKTowKTtyZXR1cm4gaS5oZWlnaHQ9TWF0aC5taW4oaS5oZWlnaHQsbythKSxpfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zZXR1cERvbUVsZW1lbnRzKCl9LHQucHJvdG90eXBlLl9zZXR1cERvbUVsZW1lbnRzPWZ1bmN0aW9uKCl7dGhpcy5jb250ZW50KCkuc2VsZWN0QWxsKCIuIit0LlRJTUVfQVhJU19USUVSX0NMQVNTKS5yZW1vdmUoKSx0aGlzLl90aWVyTGFiZWxDb250YWluZXJzPVtdLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVycz1bXSx0aGlzLl90aWVyQmFzZWxpbmVzPVtdLHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5yZW1vdmUoKSx0aGlzLl9iYXNlbGluZS5yZW1vdmUoKTtmb3IodmFyIHI9MDtyPHRoaXMuX251bVRpZXJzOysrcil7dmFyIG49dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LlRJTUVfQVhJU19USUVSX0NMQVNTLCEwKTt0aGlzLl90aWVyTGFiZWxDb250YWluZXJzLnB1c2gobi5hcHBlbmQoImciKS5jbGFzc2VkKHRzLkF4aXMuVElDS19MQUJFTF9DTEFTUysiLWNvbnRhaW5lciIsITApKSx0aGlzLl90aWVyTWFya0NvbnRhaW5lcnMucHVzaChuLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX01BUktfQ0xBU1MrIi1jb250YWluZXIiLCEwKSksdGhpcy5fdGllckJhc2VsaW5lcy5wdXNoKG4uYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKSl9dmFyIGk9bmV3IG8kdC5TdmdDb250ZXh0KHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnNbMF0ubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgbyR0LkNhY2hlTWVhc3VyZXIoaSl9LHQucHJvdG90eXBlLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXM9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbChyLmludGVydmFsLHIuc3RlcCx0aGlzLl91c2VVVEMpfSx0LnByb3RvdHlwZS5fZ2V0VGlja1ZhbHVlcz1mdW5jdGlvbigpe3ZhciByPXRoaXM7cmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XS5yZWR1Y2UoZnVuY3Rpb24obixpKXtyZXR1cm4gbi5jb25jYXQoci5fZ2V0VGlja0ludGVydmFsVmFsdWVzKGkpKX0sW10pfSx0LnByb3RvdHlwZS5fY2xlYW5UaWVycz1mdW5jdGlvbigpe2Zvcih2YXIgcj0wO3I8dGhpcy5fdGllckxhYmVsQ29udGFpbmVycy5sZW5ndGg7cisrKXRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnNbcl0uc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVyc1tyXS5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19NQVJLX0NMQVNTKS5yZW1vdmUoKSx0aGlzLl90aWVyQmFzZWxpbmVzW3JdLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbj1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9zY2FsZS50aWNrSW50ZXJ2YWwoci5pbnRlcnZhbCxyLnN0ZXAsdGhpcy5fdXNlVVRDKSxpPXRoaXMuX3NjYWxlLmRvbWFpbigpLG89bi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEudmFsdWVPZigpfSk7cmV0dXJuIG8uaW5kZXhPZihpWzBdLnZhbHVlT2YoKSk9PT0tMSYmbi51bnNoaWZ0KGlbMF0pLG8uaW5kZXhPZihpWzFdLnZhbHVlT2YoKSk9PT0tMSYmbi5wdXNoKGlbMV0pLG59LHQucHJvdG90eXBlLl9yZW5kZXJUaWVyTGFiZWxzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLGE9dGhpcy5fZ2V0VGlja1ZhbHVlc0ZvckNvbmZpZ3VyYXRpb24obikscz1bXTt0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbaV09PT0iYmV0d2VlbiImJm4uc3RlcD09PTE/YS5tYXAoZnVuY3Rpb24oZyxfKXtfKzE+PWEubGVuZ3RofHxzLnB1c2gobmV3IERhdGUoKGFbXysxXS52YWx1ZU9mKCktYVtfXS52YWx1ZU9mKCkpLzIrYVtfXS52YWx1ZU9mKCkpKX0pOnM9YTt2YXIgbD1yLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5kYXRhKHMsZnVuY3Rpb24oZyl7cmV0dXJuIFN0cmluZyhnLnZhbHVlT2YoKSl9KSxjPWwuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHRzLkF4aXMuVElDS19MQUJFTF9DTEFTUywhMCk7Yy5hcHBlbmQoInRleHQiKTt2YXIgdT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbaV09PT0iY2VudGVyInx8bi5zdGVwPT09MT8wOnRoaXMudGlja0xhYmVsUGFkZGluZygpLGg7dGhpcy5vcmllbnRhdGlvbigpPT09ImJvdHRvbSI/aD1WdS5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxpKzEpKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTp0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbaV09PT0iY2VudGVyIj9oPXRoaXMuaGVpZ2h0KCktVnUuc3VtKHRoaXMuX3RpZXJIZWlnaHRzLnNsaWNlKDAsaSkpLXRoaXMudGlja0xhYmVsUGFkZGluZygpLXRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpOmg9dGhpcy5oZWlnaHQoKS1WdS5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxpKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7dmFyIGY9bC5tZXJnZShjKSxwPWYuc2VsZWN0QWxsKCJ0ZXh0Iik7cC5zaXplKCk+MCYmcC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit1KyIsIitoKyIpIiksbC5leGl0KCkucmVtb3ZlKCksZi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGcpe3JldHVybiJ0cmFuc2xhdGUoIitvLl9zY2FsZS5zY2FsZShnKSsiLDApIn0pO3ZhciBkPXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIifHxuLnN0ZXA9PT0xPyJtaWRkbGUiOiJzdGFydCI7Zi5zZWxlY3RBbGwoInRleHQiKS50ZXh0KG4uZm9ybWF0dGVyKS5zdHlsZSgidGV4dC1hbmNob3IiLGQpfSx0LnByb3RvdHlwZS5fcmVuZGVyVGlja01hcmtzPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fdGllck1hcmtDb250YWluZXJzW25dLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmRhdGEociksbz1pLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2UoaSksYT10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKSxzPXRoaXMuX3RpZXJIZWlnaHRzLnNsaWNlKDAsbikucmVkdWNlKGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGwrY30sMCk7dGhpcy5vcmllbnRhdGlvbigpPT09ImJvdHRvbSI/KGEueTE9cyxhLnkyPXMrKHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT09PSJjZW50ZXIiP3RoaXMuaW5uZXJUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKTooYS55MT10aGlzLmhlaWdodCgpLXMsYS55Mj10aGlzLmhlaWdodCgpLShzKyh0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbbl09PT0iY2VudGVyIj90aGlzLmlubmVyVGlja0xlbmd0aCgpOnRoaXMuX3RpZXJIZWlnaHRzW25dKSkpLG8uYXR0cnMoYSksdGhpcy5vcmllbnRhdGlvbigpPT09ImJvdHRvbSI/KGEueTE9cyxhLnkyPXMrKHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT09PSJjZW50ZXIiP3RoaXMuZW5kVGlja0xlbmd0aCgpOnRoaXMuX3RpZXJIZWlnaHRzW25dKSk6KGEueTE9dGhpcy5oZWlnaHQoKS1zLGEueTI9dGhpcy5oZWlnaHQoKS0ocysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5lbmRUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKSksVnUuc2VsZWN0KG8ubm9kZXMoKVswXSkuYXR0cnMoYSksVnUuc2VsZWN0KG8ubm9kZXMoKVtvLnNpemUoKS0xXSkuYXR0cnMoYSksVnUuc2VsZWN0KG8ubm9kZXMoKVswXSkuY2xhc3NlZCh0cy5BeGlzLkVORF9USUNLX01BUktfQ0xBU1MsITApLFZ1LnNlbGVjdChvLm5vZGVzKClbby5zaXplKCktMV0pLmNsYXNzZWQodHMuQXhpcy5FTkRfVElDS19NQVJLX0NMQVNTLCEwKSxpLmV4aXQoKS5yZW1vdmUoKX0sdC5wcm90b3R5cGUuX3JlbmRlckxhYmVsbGVzc1RpY2tNYXJrcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19NQVJLX0NMQVNTKS5kYXRhKHIpLGk9bi5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQodHMuQXhpcy5USUNLX01BUktfQ0xBU1MsITApLm1lcmdlKG4pLG89dGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCk7by55Mj10aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj90aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTp0aGlzLmhlaWdodCgpLXRoaXMudGlja0xhYmVsUGFkZGluZygpLGkuYXR0cnMobyksbi5leGl0KCkucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUxhYmVsbGVzc1RpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXg8MT9bXTp0aGlzLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXModGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXgtMV1bMF0pfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleD10aGlzLl9nZXRNb3N0UHJlY2lzZUNvbmZpZ3VyYXRpb25JbmRleCgpO3ZhciBuPXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XTt0aGlzLl9jbGVhblRpZXJzKCksbi5mb3JFYWNoKGZ1bmN0aW9uKGgsZil7cmV0dXJuIHIuX3JlbmRlclRpZXJMYWJlbHMoci5fdGllckxhYmVsQ29udGFpbmVyc1tmXSxoLGYpfSk7Zm9yKHZhciBpPW4ubWFwKGZ1bmN0aW9uKGgsZil7cmV0dXJuIHIuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uKGgpfSksbz0wLGE9MDthPE1hdGgubWF4KG4ubGVuZ3RoLDEpOysrYSl7dmFyIHM9dGhpcy5fZ2VuZXJhdGVCYXNlbGluZUF0dHJIYXNoKCk7cy55MSs9dGhpcy5vcmllbnRhdGlvbigpPT09ImJvdHRvbSI/bzotbyxzLnkyPXMueTEsdGhpcy5fdGllckJhc2VsaW5lc1thXS5hdHRycyhzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKSxvKz10aGlzLl90aWVySGVpZ2h0c1thXX12YXIgbD1bXSxjPXRoaXMuX3NjYWxlLmRvbWFpbigpLHU9dGhpcy5fc2NhbGUuc2NhbGUoY1sxXSktdGhpcy5fc2NhbGUuc2NhbGUoY1swXSk7dGhpcy5fZ2V0SW50ZXJ2YWxMZW5ndGgoblswXSkqMS41Pj11JiYobD10aGlzLl9nZW5lcmF0ZUxhYmVsbGVzc1RpY2tzKCkpLHRoaXMuX3JlbmRlckxhYmVsbGVzc1RpY2tNYXJrcyhsKSx0aGlzLl9oaWRlT3ZlcmZsb3dpbmdUaWVycygpO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7KythKXRoaXMuX3JlbmRlclRpY2tNYXJrcyhpW2FdLGEpLHRoaXMuX2hpZGVPdmVybGFwcGluZ0FuZEN1dE9mZkxhYmVscyhhKTtyZXR1cm4gdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LHQucHJvdG90eXBlLl9oaWRlT3ZlcmZsb3dpbmdUaWVycz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLmhlaWdodCgpLGk9MDt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK3QuVElNRV9BWElTX1RJRVJfQ0xBU1MpLmF0dHIoInZpc2liaWxpdHkiLGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkrPXIuX3RpZXJIZWlnaHRzW2FdLGk8PW4/ImluaGVyaXQiOiJoaWRkZW4ifSl9LHQucHJvdG90eXBlLl9oaWRlT3ZlcmxhcHBpbmdBbmRDdXRPZmZMYWJlbHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuZWxlbWVudCgpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWZ1bmN0aW9uKHUpe3JldHVybiBNYXRoLmZsb29yKGkubGVmdCk8PU1hdGguY2VpbCh1LmxlZnQpJiZNYXRoLmZsb29yKGkudG9wKTw9TWF0aC5jZWlsKHUudG9wKSYmTWF0aC5mbG9vcih1LnJpZ2h0KTw9TWF0aC5jZWlsKGkubGVmdCtuLndpZHRoKCkpJiZNYXRoLmZsb29yKHUuYm90dG9tKTw9TWF0aC5jZWlsKGkudG9wK24uaGVpZ2h0KCkpfSxhPXRoaXMuX3RpZXJNYXJrQ29udGFpbmVyc1tyXS5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19NQVJLX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24odSxoKXt2YXIgZj1WdS5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gZj09PSJ2aXNpYmxlInx8Zj09PSJpbmhlcml0In0pLHM9YS5ub2RlcygpLm1hcChmdW5jdGlvbih1KXtyZXR1cm4gdS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0pLGw9dGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1tyXS5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKHUsaCl7dmFyIGY9VnUuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuIGY9PT0idmlzaWJsZSJ8fGY9PT0iaW5oZXJpdCJ9KSxjO2wuZWFjaChmdW5jdGlvbih1LGgpe3ZhciBmPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscD1WdS5zZWxlY3QodGhpcyksZD1zW2hdLGc9c1toKzFdLF89YyE9bnVsbCYmcjQuRE9NLmNsaWVudFJlY3RzT3ZlcmxhcChmLGMpLHk9ZCE9bnVsbCYmcjQuRE9NLmNsaWVudFJlY3RzT3ZlcmxhcChmLGQpLHg9ZyE9bnVsbCYmcjQuRE9NLmNsaWVudFJlY3RzT3ZlcmxhcChmLGcpOyFvKGYpfHxffHx5fHx4P3Auc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKTooYz1mLHAuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0IikpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX21lYXN1cmVyLnJlc2V0KCl9LHQuVElNRV9BWElTX1RJRVJfQ0xBU1M9InRpbWUtYXhpcy10aWVyIix0Ll9TT1JURURfVElNRV9JTlRFUlZBTF9JTkRFWD0oeGQ9e30seGRbU2UuVGltZUludGVydmFsLnNlY29uZF09MCx4ZFtTZS5UaW1lSW50ZXJ2YWwubWludXRlXT0xLHhkW1NlLlRpbWVJbnRlcnZhbC5ob3VyXT0yLHhkW1NlLlRpbWVJbnRlcnZhbC5kYXldPTMseGRbU2UuVGltZUludGVydmFsLndlZWtdPTQseGRbU2UuVGltZUludGVydmFsLm1vbnRoXT01LHhkW1NlLlRpbWVJbnRlcnZhbC55ZWFyXT02LHhkKSx0Ll9ERUZBVUxUX1RJTUVfQVhJU19DT05GSUdVUkFUSU9OUz1mdW5jdGlvbihyKXt2YXIgbj1mdW5jdGlvbihpKXtyZXR1cm4gYSR0LnRpbWUoaSxyKX07cmV0dXJuW1t7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDo1LGZvcm1hdHRlcjpuKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MTAsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxNSxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjMwLGZvcm1hdHRlcjpuKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjUsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDoxMCxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjE1LGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MzAsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDozLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjYsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6MTIsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlYSAlZSIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLm1vbnRoLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVlIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlYiIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDozLGZvcm1hdHRlcjpuKCIlYiIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDo2LGZvcm1hdHRlcjpuKCIlYiIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJXkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDo1LGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjI1LGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUwLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEwMCxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoyMDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NTAwLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjFlMyxmb3JtYXR0ZXI6bigiJVkiKX1dXX0sdC5fTE9OR19EQVRFPW5ldyBEYXRlKDk5OTksOCwyOSwxMiw1OSw5OTk5KSx0fSh0cy5BeGlzKTtTZS5UaW1lPVRGZTt2YXIgeGR9KTt2YXIgcyR0PUgobjQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG40LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZm90PShkZSgpLFV0KHBlKSk7Zm90Ll9fZXhwb3J0U3RhcihHWHQoKSxuNCk7Zm90Ll9fZXhwb3J0U3RhcihXWHQoKSxuNCk7Zm90Ll9fZXhwb3J0U3RhcihCRigpLG40KX0pO3ZhciBpND1IKHBvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQ0ZlPUZlKCksQUZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb249e30sdGhpcy5fZXZlbnRUYXJnZXQ9ZG9jdW1lbnQsdGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldD17fSx0aGlzLl9jb25uZWN0ZWQ9ITF9cmV0dXJuIGUucHJvdG90eXBlLl9oYXNOb0NhbGxiYWNrcz1mdW5jdGlvbigpe2Zvcih2YXIgdD1PYmplY3Qua2V5cyh0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0KSxyPTA7cjx0Lmxlbmd0aDtyKyspaWYodGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0W3JdXS5zaXplIT09MClyZXR1cm4hMTtyZXR1cm4hMH0sZS5wcm90b3R5cGUuX2Nvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2Nvbm5lY3RlZHx8KE9iamVjdC5rZXlzKHRoaXMuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb24pLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG49dC5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltyXSxpPXI9PT0id2hlZWwiP3twYXNzaXZlOiExfTp2b2lkIDA7dC5fZXZlbnRUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihyLG4saSl9KSx0aGlzLl9jb25uZWN0ZWQ9ITApfSxlLnByb3RvdHlwZS5fZGlzY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29ubmVjdGVkJiZ0aGlzLl9oYXNOb0NhbGxiYWNrcygpJiYoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbj10Ll9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3JdO3QuX2V2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIocixuKX0pLHRoaXMuX2Nvbm5lY3RlZD0hMSl9LGUucHJvdG90eXBlLl9hZGRDYWxsYmFja0ZvckV2ZW50PWZ1bmN0aW9uKHQscil7dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XT09bnVsbCYmKHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF09bmV3IENGZS5DYWxsYmFja1NldCksdGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XS5hZGQociksdGhpcy5fY29ubmVjdCgpfSxlLnByb3RvdHlwZS5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudD1mdW5jdGlvbih0LHIpe3RoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF0hPW51bGwmJnRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF0uZGVsZXRlKHIpLHRoaXMuX2Rpc2Nvbm5lY3QoKX0sZS5wcm90b3R5cGUuX2NhbGxDYWxsYmFja3NGb3JFdmVudD1mdW5jdGlvbih0KXtmb3IodmFyIHI9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTFdPWFyZ3VtZW50c1tuXTt2YXIgaT10aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdO2khPW51bGwmJmkuY2FsbENhbGxiYWNrcy5hcHBseShpLHIpfSxlfSgpO3BvdC5EaXNwYXRjaGVyPUFGZX0pO3ZhciBsJHQ9SChkb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFBGZT0oZGUoKSxVdChwZSkpLElGZT1pNCgpLExGZT1mdW5jdGlvbihlKXtQRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9LRVlET1dOX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG4pe3JldHVybiByLl9wcm9jZXNzS2V5ZG93bihuKX0sci5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9LRVlVUF9FVkVOVF9OQU1FXT1mdW5jdGlvbihuKXtyZXR1cm4gci5fcHJvY2Vzc0tleXVwKG4pfSxyfXJldHVybiB0LmdldERpc3BhdGNoZXI9ZnVuY3Rpb24oKXt2YXIgcj1kb2N1bWVudFt0Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIHI9PW51bGwmJihyPW5ldyB0LGRvY3VtZW50W3QuX0RJU1BBVENIRVJfS0VZXT1yKSxyfSx0LnByb3RvdHlwZS5fcHJvY2Vzc0tleWRvd249ZnVuY3Rpb24ocil7dGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KHQuX0tFWURPV05fRVZFTlRfTkFNRSxyLmtleUNvZGUscil9LHQucHJvdG90eXBlLl9wcm9jZXNzS2V5dXA9ZnVuY3Rpb24ocil7dGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KHQuX0tFWVVQX0VWRU5UX05BTUUsci5rZXlDb2RlLHIpfSx0LnByb3RvdHlwZS5vbktleURvd249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQodC5fS0VZRE9XTl9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZktleURvd249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fS0VZRE9XTl9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9uS2V5VXA9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQodC5fS0VZVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZLZXlVcD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlVUF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQuX0RJU1BBVENIRVJfS0VZPSJfX1Bsb3R0YWJsZV9EaXNwYXRjaGVyX0tleSIsdC5fS0VZRE9XTl9FVkVOVF9OQU1FPSJrZXlkb3duIix0Ll9LRVlVUF9FVkVOVF9OQU1FPSJrZXl1cCIsdH0oSUZlLkRpc3BhdGNoZXIpO2RvdC5LZXk9TEZlfSk7dmFyIHUkdD1IKG1vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIga0ZlPShkZSgpLFV0KHBlKSksYyR0PUZlKCksUkZlPWk0KCksTkZlPWZ1bmN0aW9uKGUpe2tGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztuLl9sYXN0TW91c2VQb3NpdGlvbj17eDotMSx5Oi0xfSxuLl90cmFuc2xhdG9yPWMkdC5nZXRUcmFuc2xhdG9yKHIpO3ZhciBpPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixvLHQuX01PVVNFTU9WRV9FVkVOVF9OQU1FLCJwYWdlIil9O3JldHVybiBuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFT1ZFUl9FVkVOVF9OQU1FXT1pLG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fTU9VU0VNT1ZFX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRU9VVF9FVkVOVF9OQU1FXT1pLG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fTU9VU0VET1dOX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixvLHQuX01PVVNFRE9XTl9FVkVOVF9OQU1FKX0sbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRVVQX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixvLHQuX01PVVNFVVBfRVZFTlRfTkFNRSwicGFnZSIpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1dIRUVMX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixvLHQuX1dIRUVMX0VWRU5UX05BTUUpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0RCTENMSUNLX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixvLHQuX0RCTENMSUNLX0VWRU5UX05BTUUpfSxufXJldHVybiB0LmdldERpc3BhdGNoZXI9ZnVuY3Rpb24ocil7dmFyIG49ci5yb290KCkucm9vdEVsZW1lbnQoKSxpPW5bdC5fRElTUEFUQ0hFUl9LRVldO3JldHVybiBpPT1udWxsJiYoaT1uZXcgdChyKSxuW3QuX0RJU1BBVENIRVJfS0VZXT1pKSxpfSx0LnByb3RvdHlwZS5vbk1vdXNlTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZU1vdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQodC5fTU9VU0VET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmTW91c2VEb3duPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFRE9XTl9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9uTW91c2VVcD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRVVQX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmTW91c2VVcD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRVVQX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25XaGVlbD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9XSEVFTF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZldoZWVsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1dIRUVMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25EYmxDbGljaz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9EQkxDTElDS19FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRibENsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX0RCTENMSUNLX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUuX21lYXN1cmVBbmREaXNwYXRjaD1mdW5jdGlvbihyLG4saSxvKXtpZihvPT09dm9pZCAwJiYobz0iZWxlbWVudCIpLG8hPT0icGFnZSImJm8hPT0iZWxlbWVudCIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK28rIicsIG11c3QgYmUgJ2VsZW1lbnQnIG9yICdwYWdlJyIpO2lmKG89PT0icGFnZSJ8fHRoaXMuZXZlbnRJbnNpZGUocixuKSl7dmFyIGE9dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24obi5jbGllbnRYLG4uY2xpZW50WSk7dGhpcy5fbGFzdE1vdXNlUG9zaXRpb249YSx0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQoaSx0aGlzLmxhc3RNb3VzZVBvc2l0aW9uKCksbil9fSx0LnByb3RvdHlwZS5ldmVudEluc2lkZT1mdW5jdGlvbihyLG4pe3JldHVybiBjJHQuVHJhbnNsYXRvci5pc0V2ZW50SW5zaWRlKHIsbil9LHQucHJvdG90eXBlLmxhc3RNb3VzZVBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhc3RNb3VzZVBvc2l0aW9ufSx0Ll9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Nb3VzZSIsdC5fTU9VU0VPVkVSX0VWRU5UX05BTUU9Im1vdXNlb3ZlciIsdC5fTU9VU0VNT1ZFX0VWRU5UX05BTUU9Im1vdXNlbW92ZSIsdC5fTU9VU0VPVVRfRVZFTlRfTkFNRT0ibW91c2VvdXQiLHQuX01PVVNFRE9XTl9FVkVOVF9OQU1FPSJtb3VzZWRvd24iLHQuX01PVVNFVVBfRVZFTlRfTkFNRT0ibW91c2V1cCIsdC5fV0hFRUxfRVZFTlRfTkFNRT0id2hlZWwiLHQuX0RCTENMSUNLX0VWRU5UX05BTUU9ImRibGNsaWNrIix0fShSRmUuRGlzcGF0Y2hlcik7bW90Lk1vdXNlPU5GZX0pO3ZhciBmJHQ9SChnb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIERGZT0oZGUoKSxVdChwZSkpLGgkdD1GZSgpLE9GZT1pNCgpLHpGZT1mdW5jdGlvbihlKXtERmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX3RyYW5zbGF0b3I9aCR0LmdldFRyYW5zbGF0b3Iociksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9UT1VDSFNUQVJUX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSwicGFnZSIpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNITU9WRV9FVkVOVF9OQU1FXT1mdW5jdGlvbihpKXtyZXR1cm4gbi5fbWVhc3VyZUFuZERpc3BhdGNoKHIsaSx0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRSwicGFnZSIpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIRU5EX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNIRU5EX0VWRU5UX05BTUUsInBhZ2UiKX0sbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9UT1VDSENBTkNFTF9FVkVOVF9OQU1FXT1mdW5jdGlvbihpKXtyZXR1cm4gbi5fbWVhc3VyZUFuZERpc3BhdGNoKHIsaSx0Ll9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLCJwYWdlIil9LG59cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbihyKXt2YXIgbj1yLnJvb3QoKS5yb290RWxlbWVudCgpLGk9blt0Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIGk9PW51bGwmJihpPW5ldyB0KHIpLG5bdC5fRElTUEFUQ0hFUl9LRVldPWkpLGl9LHQucHJvdG90eXBlLm9uVG91Y2hTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSFNUQVJUX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmVG91Y2hTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSFNUQVJUX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaE1vdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQodC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmVG91Y2hNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNITU9WRV9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9uVG91Y2hFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQodC5fVE9VQ0hFTkRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaEVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSEVORF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9uVG91Y2hDYW5jZWw9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQodC5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaENhbmNlbD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLl9tZWFzdXJlQW5kRGlzcGF0Y2g9ZnVuY3Rpb24ocixuLGksbyl7aWYobz09PXZvaWQgMCYmKG89ImVsZW1lbnQiKSxvIT09InBhZ2UiJiZvIT09ImVsZW1lbnQiKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzY29wZSAnIitvKyInLCBtdXN0IGJlICdlbGVtZW50JyBvciAncGFnZSciKTtpZighKG89PT0iZWxlbWVudCImJiF0aGlzLmV2ZW50SW5zaWRlKHIsbikpKXtmb3IodmFyIGE9bi5jaGFuZ2VkVG91Y2hlcyxzPXt9LGw9W10sYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGg9dS5pZGVudGlmaWVyLGY9dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24odS5jbGllbnRYLHUuY2xpZW50WSk7ZiE9bnVsbCYmKHNbaF09ZixsLnB1c2goaCkpfWwubGVuZ3RoPjAmJnRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChpLGwscyxuKX19LHQucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGgkdC5UcmFuc2xhdG9yLmlzRXZlbnRJbnNpZGUocixuKX0sdC5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfVG91Y2giLHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRT0idG91Y2hzdGFydCIsdC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUU9InRvdWNobW92ZSIsdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRT0idG91Y2hlbmQiLHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUU9InRvdWNoY2FuY2VsIix0fShPRmUuRGlzcGF0Y2hlcik7Z290LlRvdWNoPXpGZX0pO3ZhciBOMT1IKG80PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvNCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIF9vdD0oZGUoKSxVdChwZSkpO19vdC5fX2V4cG9ydFN0YXIobCR0KCksbzQpO19vdC5fX2V4cG9ydFN0YXIodSR0KCksbzQpO19vdC5fX2V4cG9ydFN0YXIoZiR0KCksbzQpfSk7dmFyIEQxPUgoeW90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5b3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGRmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9dGhpczt0aGlzLl9hbmNob3JDYWxsYmFjaz1mdW5jdGlvbihyKXtyZXR1cm4gdC5fYW5jaG9yKHIpfSx0aGlzLl9lbmFibGVkPSEwfXJldHVybiBlLnByb3RvdHlwZS5hdHRhY2hUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZGlzY29ubmVjdCgpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89dCx0aGlzLl9jb25uZWN0KCksdGhpc30sZS5wcm90b3R5cGUuZGV0YWNoRnJvbT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZXRhY2goKX0sZS5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2Nvbm5lY3QoKSx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvPW51bGwsdGhpc30sZS5wcm90b3R5cGUuZW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9lbmFibGVkOih0aGlzLl9lbmFibGVkPXQsdGhpcy5fZW5hYmxlZD90aGlzLl9jb25uZWN0KCk6dGhpcy5fZGlzY29ubmVjdCgpLHRoaXMpfSxlLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHQpe3RoaXMuX2lzQW5jaG9yZWQ9ITB9LGUucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQ9ITF9LGUucHJvdG90eXBlLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub3JpZ2luVG9Sb290KCk7cmV0dXJue3g6dC54LXIueCx5OnQueS1yLnl9fSxlLnByb3RvdHlwZS5faXNJbnNpZGVDb21wb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIDA8PXQueCYmMDw9dC55JiZ0Lng8PXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSYmdC55PD10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpfSxlLnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZCgpJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvIT1udWxsJiYhdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vbkFuY2hvcih0aGlzLl9hbmNob3JDYWxsYmFjayl9LGUucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZCYmdGhpcy5fdW5hbmNob3IoKSx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvIT1udWxsJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9mZkFuY2hvcih0aGlzLl9hbmNob3JDYWxsYmFjayl9LGV9KCk7eW90LkludGVyYWN0aW9uPUZGZX0pO3ZhciBtJHQ9SCh2b3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHZvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEJGZT0oZGUoKSxVdChwZSkpLHAkdD1OMSgpLGQkdD1GZSgpLEhGZT1EMSgpLFZGZT1mdW5jdGlvbihlKXtCRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gci5fY2xpY2tlZERvd249ITEsci5fZG91YmxlQ2xpY2tpbmc9ITEsci5fb25DbGlja0NhbGxiYWNrcz1uZXcgZCR0LkNhbGxiYWNrU2V0LHIuX29uRG91YmxlQ2xpY2tDYWxsYmFja3M9bmV3IGQkdC5DYWxsYmFja1NldCxyLl9tb3VzZURvd25DYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVDbGlja0Rvd24obixpKX0sci5fbW91c2VVcENhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrVXAobixpKX0sci5fZGJsQ2xpY2tDYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVEYmxDbGljayhuLGkpfSxyLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24obixpLG8pe3JldHVybiByLl9oYW5kbGVDbGlja0Rvd24oaVtuWzBdXSxvKX0sci5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrVXAoaVtuWzBdXSxvKX0sci5fdG91Y2hDYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9jbGlja2VkRG93bj0hMX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9cCR0Lk1vdXNlLmdldERpc3BhdGNoZXIociksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uRGJsQ2xpY2sodGhpcy5fZGJsQ2xpY2tDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPXAkdC5Ub3VjaC5nZXREaXNwYXRjaGVyKHIpLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaENhbmNlbCh0aGlzLl90b3VjaENhbmNlbENhbGxiYWNrKX0sdC5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3VuYW5jaG9yLmNhbGwodGhpcyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZk1vdXNlRG93bih0aGlzLl9tb3VzZURvd25DYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmRGJsQ2xpY2sodGhpcy5fZGJsQ2xpY2tDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfSx0LnByb3RvdHlwZS5faGFuZGxlQ2xpY2tEb3duPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKSYmKHRoaXMuX2NsaWNrZWREb3duPSEwLHRoaXMuX2NsaWNrZWRQb2ludD1pKX0sdC5wcm90b3R5cGUuX2hhbmRsZUNsaWNrVXA9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLG89dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9jbGlja2VkRG93biYmdC5fcG9pbnRzRXF1YWwobyx0aGlzLl9jbGlja2VkUG9pbnQpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5fZG91YmxlQ2xpY2tpbmd8fGkuX29uQ2xpY2tDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhvLG4pfSwwKSx0aGlzLl9jbGlja2VkRG93bj0hMX0sdC5wcm90b3R5cGUuX2hhbmRsZURibENsaWNrPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uocik7dGhpcy5fZG91YmxlQ2xpY2tpbmc9ITAsdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG8sbiksc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBpLl9kb3VibGVDbGlja2luZz0hMX0sMCl9LHQuX3BvaW50c0VxdWFsPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHIueD09PW4ueCYmci55PT09bi55fSx0LnByb3RvdHlwZS5vbkNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZDbGljaz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb25DbGlja0NhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Eb3VibGVDbGljaz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRG91YmxlQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29uRG91YmxlQ2xpY2tDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHR9KEhGZS5JbnRlcmFjdGlvbik7dm90LkNsaWNrPVZGZX0pO3ZhciBfJHQ9SCh4b3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHhvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFVGZT0oZGUoKSxVdChwZSkpLGckdD1OMSgpLGE0PUZlKCkscUZlPUQxKCksR0ZlPWZ1bmN0aW9uKGUpe1VGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZHJhZ2dpbmc9ITEsbi5fY29uc3RyYWluZWRUb0NvbXBvbmVudD0hMCxuLl9tb3VzZUZpbHRlcj10Ll9ERUZBVUxUX01PVVNFX0ZJTFRFUixuLl9kcmFnU3RhcnRDYWxsYmFja3M9bmV3IGE0LkNhbGxiYWNrU2V0LG4uX2RyYWdDYWxsYmFja3M9bmV3IGE0LkNhbGxiYWNrU2V0LG4uX2RyYWdFbmRDYWxsYmFja3M9bmV3IGE0LkNhbGxiYWNrU2V0LG4uX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKGksbyl7cmV0dXJuIG4uX3N0YXJ0RHJhZyhpLG8pfSxuLl9tb3VzZU1vdmVDYWxsYmFjaz1mdW5jdGlvbihpLG8pe3JldHVybiBuLl9kb0RyYWcoaSxvKX0sbi5fbW91c2VVcENhbGxiYWNrPWZ1bmN0aW9uKGksbyl7cmV0dXJuIG4uX2VuZERyYWcoaSxvKX0sbi5fdG91Y2hTdGFydENhbGxiYWNrPWZ1bmN0aW9uKGksbyxhKXtyZXR1cm4gbi5fc3RhcnREcmFnKG9baVswXV0sYSl9LG4uX3RvdWNoTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKGksbyxhKXtyZXR1cm4gbi5fZG9EcmFnKG9baVswXV0sYSl9LG4uX3RvdWNoRW5kQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9lbmREcmFnKG9baVswXV0sYSl9LG4uX21vdXNlQnV0dG9uPXIhPT12b2lkIDA/cjowLG59cmV0dXJuIHQucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fbW91c2VEaXNwYXRjaGVyPWckdC5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlRG93bih0aGlzLl9tb3VzZURvd25DYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPWckdC5Ub3VjaC5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfSx0LnByb3RvdHlwZS5fdHJhbnNsYXRlQW5kQ29uc3RyYWluPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uocik7cmV0dXJuIHRoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ/e3g6YTQuTWF0aC5jbGFtcChuLngsMCx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLndpZHRoKCkpLHk6YTQuTWF0aC5jbGFtcChuLnksMCx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpKX06bn0sdC5wcm90b3R5cGUuX3N0YXJ0RHJhZz1mdW5jdGlvbihyLG4pe2lmKCEobiBpbnN0YW5jZW9mIE1vdXNlRXZlbnQmJiF0aGlzLl9tb3VzZUZpbHRlcihuKSkpe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uocik7dGhpcy5faXNJbnNpZGVDb21wb25lbnQoaSkmJihuLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZHJhZ2dpbmc9ITAsdGhpcy5fZHJhZ09yaWdpbj1pLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMuX2RyYWdPcmlnaW4pKX19LHQucHJvdG90eXBlLl9kb0RyYWc9ZnVuY3Rpb24ocixuKXt0aGlzLl9kcmFnZ2luZyYmdGhpcy5fZHJhZ0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMuX2RyYWdPcmlnaW4sdGhpcy5fdHJhbnNsYXRlQW5kQ29uc3RyYWluKHIpKX0sdC5wcm90b3R5cGUuX2VuZERyYWc9ZnVuY3Rpb24ocixuKXtuIGluc3RhbmNlb2YgTW91c2VFdmVudCYmbi5idXR0b24hPT10aGlzLl9tb3VzZUJ1dHRvbnx8dGhpcy5fZHJhZ2dpbmcmJih0aGlzLl9kcmFnZ2luZz0hMSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4ocikpKX0sdC5wcm90b3R5cGUuY29uc3RyYWluZWRUb0NvbXBvbmVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50Oih0aGlzLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50PXIsdGhpcyl9LHQucHJvdG90eXBlLm1vdXNlRmlsdGVyPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl9tb3VzZUZpbHRlcjoodGhpcy5fbW91c2VGaWx0ZXI9cix0aGlzKX0sdC5wcm90b3R5cGUub25EcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZ1N0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uRHJhZz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0NhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0NhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0Ll9ERUZBVUxUX01PVVNFX0ZJTFRFUj1mdW5jdGlvbihyKXtyZXR1cm4gci5idXR0b249PT0wfSx0fShxRmUuSW50ZXJhY3Rpb24pO3hvdC5EcmFnPUdGZX0pO3ZhciBTb3Q9SCh3b3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdGZT0oZGUoKSxVdChwZSkpLHkkdD1OMSgpLGJvdD1GZSgpLFlGZT1EMSgpLGpGZT1mdW5jdGlvbihlKXtXRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gci5fa2V5UHJlc3NDYWxsYmFja3M9e30sci5fa2V5UmVsZWFzZUNhbGxiYWNrcz17fSxyLl9tb3VzZU1vdmVDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4hMX0sci5fZG93bmVkS2V5cz1uZXcgYm90LlNldCxyLl9rZXlEb3duQ2FsbGJhY2s9ZnVuY3Rpb24obixpKXtyZXR1cm4gci5faGFuZGxlS2V5RG93bkV2ZW50KG4saSl9LHIuX2tleVVwQ2FsbGJhY2s9ZnVuY3Rpb24obil7cmV0dXJuIHIuX2hhbmRsZUtleVVwRXZlbnQobil9LHJ9cmV0dXJuIHQucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyPXkkdC5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlci5vbk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlcj15JHQuS2V5LmdldERpc3BhdGNoZXIoKSx0aGlzLl9rZXlEaXNwYXRjaGVyLm9uS2V5RG93bih0aGlzLl9rZXlEb3duQ2FsbGJhY2spLHRoaXMuX2tleURpc3BhdGNoZXIub25LZXlVcCh0aGlzLl9rZXlVcENhbGxiYWNrKX0sdC5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3VuYW5jaG9yLmNhbGwodGhpcyksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9mZk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyPW51bGwsdGhpcy5fa2V5RGlzcGF0Y2hlci5vZmZLZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlci5vZmZLZXlVcCh0aGlzLl9rZXlVcENhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl9oYW5kbGVLZXlEb3duRXZlbnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHRoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlci5sYXN0TW91c2VQb3NpdGlvbigpKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKSYmIW4ucmVwZWF0JiYodGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0mJnRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdLmNhbGxDYWxsYmFja3MociksdGhpcy5fZG93bmVkS2V5cy5hZGQocikpfSx0LnByb3RvdHlwZS5faGFuZGxlS2V5VXBFdmVudD1mdW5jdGlvbihyKXt0aGlzLl9kb3duZWRLZXlzLmhhcyhyKSYmdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXSYmdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5jYWxsQ2FsbGJhY2tzKHIpLHRoaXMuX2Rvd25lZEtleXMuZGVsZXRlKHIpfSx0LnByb3RvdHlwZS5vbktleVByZXNzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdfHwodGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl09bmV3IGJvdC5DYWxsYmFja1NldCksdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uYWRkKG4pLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVByZXNzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdLmRlbGV0ZShuKSx0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXS5zaXplPT09MCYmZGVsZXRlIHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdLHRoaXN9LHQucHJvdG90eXBlLm9uS2V5UmVsZWFzZT1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdfHwodGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXT1uZXcgYm90LkNhbGxiYWNrU2V0KSx0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdLmFkZChuKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZLZXlSZWxlYXNlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0uZGVsZXRlKG4pLHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0uc2l6ZT09PTAmJmRlbGV0ZSB0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdLHRoaXN9LHR9KFlGZS5JbnRlcmFjdGlvbik7d290LktleT1qRmV9KTt2YXIgdyR0PUgoTW90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBYRmU9KGRlKCksVXQocGUpKSwkRmU9KEVyKCksVXQoTXIpKSx2JHQ9TjEoKSx4JHQ9a3MoKSx5bD1GZSgpLEtGZT1zNCgpLFpGZT1EMSgpLGIkdD10NCgpLEpGZT1mdW5jdGlvbihlKXtYRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fd2hlZWxGaWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuITB9LGkuX3doZWVsQ2FsbGJhY2s9ZnVuY3Rpb24obyxhKXtyZXR1cm4gaS5faGFuZGxlV2hlZWxFdmVudChvLGEpfSxpLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpLl9oYW5kbGVUb3VjaFN0YXJ0KG8sYSxzKX0saS5fdG91Y2hNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpLl9oYW5kbGVQaW5jaChvLGEscyl9LGkuX3RvdWNoRW5kQ2FsbGJhY2s9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpLl9oYW5kbGVUb3VjaEVuZChvLGEscyl9LGkuX3RvdWNoQ2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpLl9oYW5kbGVUb3VjaEVuZChvLGEscyl9LGkuX3BhbkVuZENhbGxiYWNrcz1uZXcgeWwuQ2FsbGJhY2tTZXQsaS5fem9vbUVuZENhbGxiYWNrcz1uZXcgeWwuQ2FsbGJhY2tTZXQsaS5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcz1uZXcgeWwuQ2FsbGJhY2tTZXQsaS5feFNjYWxlcz1uZXcgeWwuU2V0LGkuX3lTY2FsZXM9bmV3IHlsLlNldCxpLl9kcmFnSW50ZXJhY3Rpb249bmV3IEtGZS5EcmFnLGkuX3NldHVwRHJhZ0ludGVyYWN0aW9uKCksaS5fdG91Y2hJZHM9JEZlLm1hcCgpLGkuX21pbkRvbWFpbkV4dGVudHM9bmV3IHlsLk1hcCxpLl9tYXhEb21haW5FeHRlbnRzPW5ldyB5bC5NYXAsaS5fbWluRG9tYWluVmFsdWVzPW5ldyB5bC5NYXAsaS5fbWF4RG9tYWluVmFsdWVzPW5ldyB5bC5NYXAsciE9bnVsbCYmaS5hZGRYU2NhbGUociksbiE9bnVsbCYmaS5hZGRZU2NhbGUobiksaX1yZXR1cm4gdC5wcm90b3R5cGUuZHJhZ0ludGVyYWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdJbnRlcmFjdGlvbn0sdC5wcm90b3R5cGUud2hlZWxGaWx0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX3doZWVsRmlsdGVyOih0aGlzLl93aGVlbEZpbHRlcj1yLHRoaXMpfSx0LnByb3RvdHlwZS5wYW49ZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kucGFuKG4uX2NvbnN0cmFpbmVkVHJhbnNsYXRpb24oaSxyLngpKX0pLHRoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5wYW4obi5fY29uc3RyYWluZWRUcmFuc2xhdGlvbihpLHIueSkpfSksdGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9LHQucHJvdG90eXBlLnpvb209ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7aT09PXZvaWQgMCYmKGk9ITApO3ZhciBhLHM7cmV0dXJuIG4hPW51bGwmJihhPW4ueCxzPW4ueSxpJiYodGhpcy54U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1vLl9jb25zdHJhaW5lZFpvb20obCxyLGEpO2E9Yy5jZW50ZXJQb2ludCxyPWMuem9vbUFtb3VudH0pLHRoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obCl7dmFyIGM9by5fY29uc3RyYWluZWRab29tKGwscixzKTtzPWMuY2VudGVyUG9pbnQscj1jLnpvb21BbW91bnR9KSkpLHRoaXMueFNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obCl7dmFyIGM9bC5yYW5nZSgpLHU9YT09bnVsbD8oY1sxXStjWzBdKS8yOmE7bC56b29tKHIsdSl9KSx0aGlzLnlTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3ZhciBjPWwucmFuZ2UoKSx1PXM9PW51bGw/KGNbMV0rY1swXSkvMjpzO2wuem9vbShyLHUpfSksdGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCkse3pvb21BbW91bnQ6cixjZW50ZXJWYWx1ZTp7Y2VudGVyWDphLGNlbnRlclk6c319fSx0LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHIpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyhyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9diR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uV2hlZWwodGhpcy5fd2hlZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPXYkdC5Ub3VjaC5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmV2hlZWwodGhpcy5fd2hlZWxDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX0sdC5wcm90b3R5cGUuX2hhbmRsZVRvdWNoU3RhcnQ9ZnVuY3Rpb24ocixuLGkpe2Zvcih2YXIgbz0wO288ci5sZW5ndGgmJnRoaXMuX3RvdWNoSWRzLnNpemUoKTwyO28rKyl7dmFyIGE9cltvXTt0aGlzLl90b3VjaElkcy5zZXQoYS50b1N0cmluZygpLHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoblthXSkpfX0sdC5wcm90b3R5cGUuX2hhbmRsZVBpbmNoPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzO2lmKCEodGhpcy5fdG91Y2hJZHMuc2l6ZSgpPDIpKXt2YXIgYT10aGlzLl90b3VjaElkcy52YWx1ZXMoKTtpZighKCF0aGlzLl9pc0luc2lkZUNvbXBvbmVudCh0aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKGFbMF0pKXx8IXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoYVsxXSkpKSl7dmFyIHM9dC5fcG9pbnREaXN0YW5jZShhWzBdLGFbMV0pO2lmKHMhPT0wKXtyLmZvckVhY2goZnVuY3Rpb24oUyl7by5fdG91Y2hJZHMuaGFzKFMudG9TdHJpbmcoKSkmJm8uX3RvdWNoSWRzLnNldChTLnRvU3RyaW5nKCksby5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShuW1NdKSl9KTt2YXIgbD10aGlzLl90b3VjaElkcy52YWx1ZXMoKSxjPXQuX3BvaW50RGlzdGFuY2UobFswXSxsWzFdKTtpZihjIT09MCl7dmFyIHU9cy9jLGg9bC5tYXAoZnVuY3Rpb24oUyxDKXtyZXR1cm57eDooUy54LWFbQ10ueCkvdSx5OihTLnktYVtDXS55KS91fX0pLGY9dC5jZW50ZXJQb2ludChhWzBdLGFbMV0pLHA9dGhpcy56b29tKHUsZiksZD1wLmNlbnRlclZhbHVlLGc9cC56b29tQW1vdW50LF89ZC5jZW50ZXJYLHk9ZC5jZW50ZXJZLHg9YS5tYXAoZnVuY3Rpb24oUyxDKXtyZXR1cm57eDpoW0NdLngqZytTLngseTpoW0NdLnkqZytTLnl9fSksYj17eDpfLSh4WzBdLngreFsxXS54KS8yLHk6eS0oeFswXS55K3hbMV0ueSkvMn07dGhpcy5wYW4oYil9fX19fSx0LmNlbnRlclBvaW50PWZ1bmN0aW9uKHIsbil7dmFyIGk9TWF0aC5taW4oci54LG4ueCksbz1NYXRoLm1heChyLngsbi54KSxhPU1hdGgubWluKHIueSxuLnkpLHM9TWF0aC5tYXgoci55LG4ueSk7cmV0dXJue3g6KGkrbykvMix5OihzK2EpLzJ9fSx0Ll9wb2ludERpc3RhbmNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9TWF0aC5taW4oci54LG4ueCksbz1NYXRoLm1heChyLngsbi54KSxhPU1hdGgubWluKHIueSxuLnkpLHM9TWF0aC5tYXgoci55LG4ueSk7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhvLWksMikrTWF0aC5wb3cocy1hLDIpKX0sdC5wcm90b3R5cGUuX2hhbmRsZVRvdWNoRW5kPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzO3IuZm9yRWFjaChmdW5jdGlvbihhKXtvLl90b3VjaElkcy5yZW1vdmUoYS50b1N0cmluZygpKX0pLHRoaXMuX3RvdWNoSWRzLnNpemUoKT4wJiZ0aGlzLl96b29tRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0sdC5wcm90b3R5cGUuX2hhbmRsZVdoZWVsRXZlbnQ9ZnVuY3Rpb24ocixuKXtpZighIXRoaXMuX3doZWVsRmlsdGVyKG4pKXt2YXIgaT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO2lmKHRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpKXtuLnByZXZlbnREZWZhdWx0KCk7dmFyIG89bi5kZWx0YVkhPT0wP24uZGVsdGFZOm4uZGVsdGFYLGE9byoobi5kZWx0YU1vZGU/dC5fUElYRUxTX1BFUl9MSU5FOjEpLHM9TWF0aC5wb3coMixhKi4wMDIpO3RoaXMuem9vbShzLGkpLHRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfX19LHQucHJvdG90eXBlLl9jb25zdHJhaW5lZFpvb209ZnVuY3Rpb24ocixuLGkpe3JldHVybiBiJHQuY29uc3RyYWluZWRab29tKHIsbixpLHRoaXMubWluRG9tYWluRXh0ZW50KHIpLHRoaXMubWF4RG9tYWluRXh0ZW50KHIpLHRoaXMubWluRG9tYWluVmFsdWUociksdGhpcy5tYXhEb21haW5WYWx1ZShyKSl9LHQucHJvdG90eXBlLl9jb25zdHJhaW5lZFRyYW5zbGF0aW9uPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGIkdC5jb25zdHJhaW5lZFRyYW5zbGF0aW9uKHIsbix0aGlzLm1pbkRvbWFpblZhbHVlKHIpLHRoaXMubWF4RG9tYWluVmFsdWUocikpfSx0LnByb3RvdHlwZS5fc2V0dXBEcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5jb25zdHJhaW5lZFRvQ29tcG9uZW50KCExKTt2YXIgbjt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4gbj1udWxsfSksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZyhmdW5jdGlvbihpLG8pe2lmKCEoci5fdG91Y2hJZHMuc2l6ZSgpPj0yKSl7dmFyIGE9e3g6KG49PW51bGw/aS54Om4ueCktby54LHk6KG49PW51bGw/aS55Om4ueSktby55fTtyLnBhbihhKSxuPW99fSksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChmdW5jdGlvbigpe3JldHVybiByLl9wYW5FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSl9LHQucHJvdG90eXBlLl9ub25MaW5lYXJTY2FsZVdpdGhFeHRlbnRzPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLm1pbkRvbWFpbkV4dGVudChyKSE9bnVsbCYmdGhpcy5tYXhEb21haW5FeHRlbnQocikhPW51bGwmJiEociBpbnN0YW5jZW9mIHgkdC5MaW5lYXIpJiYhKHIgaW5zdGFuY2VvZiB4JHQuVGltZSl9LHQucHJvdG90eXBlLnhTY2FsZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT1udWxsKXt2YXIgaT1bXTtyZXR1cm4gdGhpcy5feFNjYWxlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2kucHVzaChvKX0pLGl9cmV0dXJuIHRoaXMuX3hTY2FsZXM9bmV3IHlsLlNldCxyLmZvckVhY2goZnVuY3Rpb24obyl7bi5hZGRYU2NhbGUobyl9KSx0aGlzfSx0LnByb3RvdHlwZS55U2NhbGVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYocj09bnVsbCl7dmFyIGk9W107cmV0dXJuIHRoaXMuX3lTY2FsZXMuZm9yRWFjaChmdW5jdGlvbihvKXtpLnB1c2gobyl9KSxpfXJldHVybiB0aGlzLl95U2NhbGVzPW5ldyB5bC5TZXQsci5mb3JFYWNoKGZ1bmN0aW9uKG8pe24uYWRkWVNjYWxlKG8pfSksdGhpc30sdC5wcm90b3R5cGUuYWRkWFNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl94U2NhbGVzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVYU2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3hTY2FsZXMuZGVsZXRlKHIpLHRoaXMuX21pbkRvbWFpbkV4dGVudHMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpbkV4dGVudHMuZGVsZXRlKHIpLHRoaXMuX21pbkRvbWFpblZhbHVlcy5kZWxldGUociksdGhpcy5fbWF4RG9tYWluVmFsdWVzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5hZGRZU2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3lTY2FsZXMuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZVlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feVNjYWxlcy5kZWxldGUociksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm1pbkRvbWFpbkV4dGVudD1mdW5jdGlvbihyLG4pe2lmKG49PW51bGwpcmV0dXJuIHRoaXMuX21pbkRvbWFpbkV4dGVudHMuZ2V0KHIpO2lmKG4udmFsdWVPZigpPDApdGhyb3cgbmV3IEVycm9yKCJleHRlbnQgbXVzdCBiZSBub24tbmVnYXRpdmUiKTt2YXIgaT10aGlzLm1heERvbWFpbkV4dGVudChyKTtpZihpIT1udWxsJiZpLnZhbHVlT2YoKTxuLnZhbHVlT2YoKSl0aHJvdyBuZXcgRXJyb3IoIm1pbkRvbWFpbkV4dGVudCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXhEb21haW5FeHRlbnQgZm9yIHRoZSBzYW1lIFNjYWxlIik7cmV0dXJuIHRoaXMuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHMocikmJnlsLldpbmRvdy53YXJuKCJQYW5uaW5nIGFuZCB6b29taW5nIHdpdGggZXh0ZW50cyBvbiBhIG5vbmxpbmVhciBzY2FsZSBtYXkgaGF2ZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpLHRoaXMuX21pbkRvbWFpbkV4dGVudHMuc2V0KHIsbiksdGhpc30sdC5wcm90b3R5cGUubWF4RG9tYWluRXh0ZW50PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5nZXQocik7aWYobi52YWx1ZU9mKCk8PTApdGhyb3cgbmV3IEVycm9yKCJleHRlbnQgbXVzdCBiZSBwb3NpdGl2ZSIpO3ZhciBpPXRoaXMubWluRG9tYWluRXh0ZW50KHIpO2lmKGkhPW51bGwmJm4udmFsdWVPZigpPGkudmFsdWVPZigpKXRocm93IG5ldyBFcnJvcigibWF4RG9tYWluRXh0ZW50IG11c3QgYmUgbGFyZ2VyIHRoYW4gbWluRG9tYWluRXh0ZW50IGZvciB0aGUgc2FtZSBTY2FsZSIpO3JldHVybiB0aGlzLl9ub25MaW5lYXJTY2FsZVdpdGhFeHRlbnRzKHIpJiZ5bC5XaW5kb3cud2FybigiUGFubmluZyBhbmQgem9vbWluZyB3aXRoIGV4dGVudHMgb24gYSBub25saW5lYXIgc2NhbGUgbWF5IGhhdmUgdW5pbnRlbmRlZCBiZWhhdmlvci4iKSx0aGlzLl9tYXhEb21haW5FeHRlbnRzLnNldChyLG4pLHRoaXN9LHQucHJvdG90eXBlLm1pbkRvbWFpblZhbHVlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PW51bGw/dGhpcy5fbWluRG9tYWluVmFsdWVzLmdldChyKToodGhpcy5fbWluRG9tYWluVmFsdWVzLnNldChyLG4pLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhEb21haW5WYWx1ZT1mdW5jdGlvbihyLG4pe3JldHVybiBuPT1udWxsP3RoaXMuX21heERvbWFpblZhbHVlcy5nZXQocik6KHRoaXMuX21heERvbWFpblZhbHVlcy5zZXQocixuKSx0aGlzKX0sdC5wcm90b3R5cGUuc2V0TWluTWF4RG9tYWluVmFsdWVzVG89ZnVuY3Rpb24ocil7dGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHIpO3ZhciBuPXIuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKSxpPW5bMF0sbz1uWzFdO3JldHVybiB0aGlzLm1pbkRvbWFpblZhbHVlKHIsaSksdGhpcy5tYXhEb21haW5WYWx1ZShyLG8pLHRoaXN9LHQucHJvdG90eXBlLm9uUGFuRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5FbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBhbkVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcGFuRW5kQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vblpvb21FbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3pvb21FbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlpvb21FbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3pvb21FbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uUGFuWm9vbVVwZGF0ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmUGFuWm9vbVVwZGF0ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5fUElYRUxTX1BFUl9MSU5FPTEyMCx0fShaRmUuSW50ZXJhY3Rpb24pO01vdC5QYW5ab29tPUpGZX0pO3ZhciBNJHQ9SChUb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFRvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFGZT0oZGUoKSxVdChwZSkpLFMkdD1OMSgpLEVvdD1GZSgpLHRCZT1EMSgpLGVCZT1mdW5jdGlvbihlKXtRRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gci5fb3ZlckNvbXBvbmVudD0hMSxyLl9wb2ludGVyRW50ZXJDYWxsYmFja3M9bmV3IEVvdC5DYWxsYmFja1NldCxyLl9wb2ludGVyTW92ZUNhbGxiYWNrcz1uZXcgRW90LkNhbGxiYWNrU2V0LHIuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzPW5ldyBFb3QuQ2FsbGJhY2tTZXQsci5fbW91c2VNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24obixpKXtyZXR1cm4gci5faGFuZGxlTW91c2VFdmVudChuLGkpfSxyLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24obixpLG8pe3JldHVybiByLl9oYW5kbGVUb3VjaEV2ZW50KGlbblswXV0sbyl9LHJ9cmV0dXJuIHQucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fbW91c2VEaXNwYXRjaGVyPVMkdC5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPVMkdC5Ub3VjaC5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKX0sdC5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3VuYW5jaG9yLmNhbGwodGhpcyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9bnVsbH0sdC5wcm90b3R5cGUuX2hhbmRsZU1vdXNlRXZlbnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9tb3VzZURpc3BhdGNoZXIuZXZlbnRJbnNpZGUodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyxuKTt0aGlzLl9oYW5kbGVQb2ludGVyRXZlbnQocixpKX0sdC5wcm90b3R5cGUuX2hhbmRsZVRvdWNoRXZlbnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90b3VjaERpc3BhdGNoZXIuZXZlbnRJbnNpZGUodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyxuKTt0aGlzLl9oYW5kbGVQb2ludGVyRXZlbnQocixpKX0sdC5wcm90b3R5cGUuX2hhbmRsZVBvaW50ZXJFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uociksbz10aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKTtvJiZuPyh0aGlzLl9vdmVyQ29tcG9uZW50fHx0aGlzLl9wb2ludGVyRW50ZXJDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhpKSx0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGkpKTp0aGlzLl9vdmVyQ29tcG9uZW50JiZ0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGkpLHRoaXMuX292ZXJDb21wb25lbnQ9byYmbn0sdC5wcm90b3R5cGUub25Qb2ludGVyRW50ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmUG9pbnRlckVudGVyPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyRW50ZXJDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uUG9pbnRlck1vdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQb2ludGVyTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uUG9pbnRlckV4aXQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQb2ludGVyRXhpdD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHR9KHRCZS5JbnRlcmFjdGlvbik7VG90LlBvaW50ZXI9ZUJlfSk7dmFyIHM0PUgoWmc9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFpnLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbDQ9KGRlKCksVXQocGUpKTtsNC5fX2V4cG9ydFN0YXIobSR0KCksWmcpO2w0Ll9fZXhwb3J0U3RhcihfJHQoKSxaZyk7bDQuX19leHBvcnRTdGFyKFNvdCgpLFpnKTtsNC5fX2V4cG9ydFN0YXIodyR0KCksWmcpO2w0Ll9fZXhwb3J0U3RhcihNJHQoKSxaZyk7dmFyIHJCZT10NCgpO1pnLnpvb21PdXQ9ckJlLnpvb21PdXR9KTt2YXIgQ290PUgoYzQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGM0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbkJlPShkZSgpLFV0KHBlKSksSEY9RmUoKSxpQmU9a2MoKSxlczsoZnVuY3Rpb24oZSl7ZVtlLlZBTFVFPTBdPSJWQUxVRSIsZVtlLlBJWEVMPTFdPSJQSVhFTCJ9KShlcz1jNC5Qcm9wZXJ0eU1vZGV8fChjNC5Qcm9wZXJ0eU1vZGU9e30pKTt2YXIgb0JlPWZ1bmN0aW9uKGUpe25CZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9ib3hWaXNpYmxlPSExLHIuX2JveEJvdW5kcz17dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6MCx5OjB9fSxyLl94Qm91bmRzTW9kZT1lcy5QSVhFTCxyLl95Qm91bmRzTW9kZT1lcy5QSVhFTCxyLmFkZENsYXNzKCJzZWxlY3Rpb24tYm94LWxheWVyIiksci5fYWRqdXN0Qm91bmRzQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyLnJlbmRlcigpfSxyLl9vdmVyZmxvd0hpZGRlbj0hMCxyLl94RXh0ZW50PVt2b2lkIDAsdm9pZCAwXSxyLl95RXh0ZW50PVt2b2lkIDAsdm9pZCAwXSxyfXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9ib3g9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2VsZWN0aW9uLWJveCIsITApLnJlbW92ZSgpLHRoaXMuX2JveEFyZWE9dGhpcy5fYm94LmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNlbGVjdGlvbi1hcmVhIiwhMCl9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZ2V0Qm91bmRzKCk6KHRoaXMuX3NldEJvdW5kcyhyKSx0aGlzLl94Qm91bmRzTW9kZT1lcy5QSVhFTCx0aGlzLl95Qm91bmRzTW9kZT1lcy5QSVhFTCx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fc2V0Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXt4Ok1hdGgubWluKHIudG9wTGVmdC54LHIuYm90dG9tUmlnaHQueCkseTpNYXRoLm1pbihyLnRvcExlZnQueSxyLmJvdHRvbVJpZ2h0LnkpfSxpPXt4Ok1hdGgubWF4KHIudG9wTGVmdC54LHIuYm90dG9tUmlnaHQueCkseTpNYXRoLm1heChyLnRvcExlZnQueSxyLmJvdHRvbVJpZ2h0LnkpfTt0aGlzLl9ib3hCb3VuZHM9e3RvcExlZnQ6bixib3R0b21SaWdodDppfX0sdC5wcm90b3R5cGUuX2dldEJvdW5kcz1mdW5jdGlvbigpe3JldHVybnt0b3BMZWZ0Ont4OnRoaXMuX3hCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLnRvcExlZnQueDp0aGlzLl94U2NhbGU9PW51bGw/MDpNYXRoLm1pbih0aGlzLnhTY2FsZSgpLnNjYWxlKHRoaXMueEV4dGVudCgpWzBdKSx0aGlzLnhTY2FsZSgpLnNjYWxlKHRoaXMueEV4dGVudCgpWzFdKSkseTp0aGlzLl95Qm91bmRzTW9kZT09PWVzLlBJWEVMP3RoaXMuX2JveEJvdW5kcy50b3BMZWZ0Lnk6dGhpcy5feVNjYWxlPT1udWxsPzA6TWF0aC5taW4odGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVswXSksdGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVsxXSkpfSxib3R0b21SaWdodDp7eDp0aGlzLl94Qm91bmRzTW9kZT09PWVzLlBJWEVMP3RoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC54OnRoaXMuX3hTY2FsZT09bnVsbD8wOk1hdGgubWF4KHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMF0pLHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMV0pKSx5OnRoaXMuX3lCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lnk6dGhpcy5feVNjYWxlPT1udWxsPzA6TWF0aC5tYXgodGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVswXSksdGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVsxXSkpfX19LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7aWYoZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9ib3hWaXNpYmxlKXt2YXIgcj10aGlzLmJvdW5kcygpLG49ci50b3BMZWZ0LnksaT1yLmJvdHRvbVJpZ2h0Lnksbz1yLnRvcExlZnQueCxhPXIuYm90dG9tUmlnaHQueDtpZighKEhGLk1hdGguaXNWYWxpZE51bWJlcihuKSYmSEYuTWF0aC5pc1ZhbGlkTnVtYmVyKGkpJiZIRi5NYXRoLmlzVmFsaWROdW1iZXIobykmJkhGLk1hdGguaXNWYWxpZE51bWJlcihhKSkpdGhyb3cgbmV3IEVycm9yKCJib3VuZHMgaGF2ZSBub3QgYmVlbiBwcm9wZXJseSBzZXQiKTt0aGlzLl9ib3hBcmVhLmF0dHJzKHt4Om8seTpuLHdpZHRoOmEtbyxoZWlnaHQ6aS1ufSksdGhpcy5jb250ZW50KCkubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2JveC5ub2RlKCkpfWVsc2UgdGhpcy5fYm94LnJlbW92ZSgpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5ib3hWaXNpYmxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2JveFZpc2libGU6KHRoaXMuX2JveFZpc2libGU9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQucHJvdG90eXBlLnhTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl94U2NhbGU6KHRoaXMuX3hTY2FsZSE9bnVsbCYmdGhpcy5feFNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feFNjYWxlPXIsdGhpcy5feEJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5feFNjYWxlLm9uVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS55U2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5feVNjYWxlOih0aGlzLl95U2NhbGUhPW51bGwmJnRoaXMuX3lTY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spLHRoaXMuX3lTY2FsZT1yLHRoaXMuX3lCb3VuZHNNb2RlPWVzLlZBTFVFLHRoaXMuX3lTY2FsZS5vblVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRYRXh0ZW50KCk6KHRoaXMuX3NldFhFeHRlbnQociksdGhpcy5feEJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFhFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feEJvdW5kc01vZGU9PT1lcy5WQUxVRT90aGlzLl94RXh0ZW50OnRoaXMuX3hTY2FsZT09bnVsbD9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3hTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueCksdGhpcy5feFNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueCldfSx0LnByb3RvdHlwZS5fc2V0WEV4dGVudD1mdW5jdGlvbihyKXt0aGlzLl94RXh0ZW50PXJ9LHQucHJvdG90eXBlLnlFeHRlbnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZ2V0WUV4dGVudCgpOih0aGlzLl9zZXRZRXh0ZW50KHIpLHRoaXMuX3lCb3VuZHNNb2RlPWVzLlZBTFVFLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRZRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3lCb3VuZHNNb2RlPT09ZXMuVkFMVUU/dGhpcy5feUV4dGVudDp0aGlzLl95U2NhbGU9PW51bGw/W3ZvaWQgMCx2b2lkIDBdOlt0aGlzLl95U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy50b3BMZWZ0LnkpLHRoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0LnkpXX0sdC5wcm90b3R5cGUuX3NldFlFeHRlbnQ9ZnVuY3Rpb24ocil7dGhpcy5feUV4dGVudD1yfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3hTY2FsZSE9bnVsbCYmdGhpcy54U2NhbGUoKS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spLHRoaXMuX3lTY2FsZSE9bnVsbCYmdGhpcy55U2NhbGUoKS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spfSx0fShpQmUuQ29tcG9uZW50KTtjNC5TZWxlY3Rpb25Cb3hMYXllcj1vQmV9KTt2YXIgVUY9SChQb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFBvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGFCZT0oZGUoKSxVdChwZSkpLHNCZT1zNCgpLEFvdD1GZSgpLGxCZT1ZZygpLFZGPUlvdCgpLGNCZT1Db3QoKSx1QmU9ZnVuY3Rpb24oZSl7YUJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2RldGVjdGlvblJhZGl1cz0zLHIuX3Jlc2l6YWJsZT0hMSxyLl9tb3ZhYmxlPSExLHIuX2hhc0Nvcm5lcnM9ITAsci5hZGRDbGFzcygiZHJhZy1ib3gtbGF5ZXIiKSxyLl9kcmFnSW50ZXJhY3Rpb249bmV3IHNCZS5EcmFnLHIuX3NldFVwQ2FsbGJhY2tzKCksci5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHIpLHIuX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgQW90LkNhbGxiYWNrU2V0LHIuX2RyYWdDYWxsYmFja3M9bmV3IEFvdC5DYWxsYmFja1NldCxyLl9kcmFnRW5kQ2FsbGJhY2tzPW5ldyBBb3QuQ2FsbGJhY2tTZXQscn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldFVwQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuLGksbyxhLHM9e25ld0JveDowLHJlc2l6ZToxLG1vdmU6Mn0sbD1zLm5ld0JveCxjPWZ1bmN0aW9uKGYpe249ci5fZ2V0UmVzaXppbmdFZGdlcyhmKTt2YXIgcD1yLmJvdW5kcygpLGQ9cC50b3BMZWZ0Lng8PWYueCYmZi54PD1wLmJvdHRvbVJpZ2h0LngmJnAudG9wTGVmdC55PD1mLnkmJmYueTw9cC5ib3R0b21SaWdodC55O3IuYm94VmlzaWJsZSgpJiYobi50b3B8fG4uYm90dG9tfHxuLmxlZnR8fG4ucmlnaHQpP2w9cy5yZXNpemU6ci5ib3hWaXNpYmxlKCkmJnIubW92YWJsZSgpJiZkP2w9cy5tb3ZlOihsPXMubmV3Qm94LHIuX3NldEJvdW5kcyh7dG9wTGVmdDpmLGJvdHRvbVJpZ2h0OmZ9KSxyLl94Qm91bmRzTW9kZT09PVZGLlByb3BlcnR5TW9kZS5WQUxVRSYmci54U2NhbGUoKSE9bnVsbCYmci5fc2V0WEV4dGVudChbci54U2NhbGUoKS5pbnZlcnQoZi54KSxyLnhTY2FsZSgpLmludmVydChmLngpXSksci5feUJvdW5kc01vZGU9PT1WRi5Qcm9wZXJ0eU1vZGUuVkFMVUUmJnIueVNjYWxlKCkhPW51bGwmJnIuX3NldFlFeHRlbnQoW3IueVNjYWxlKCkuaW52ZXJ0KGYueSksci55U2NhbGUoKS5pbnZlcnQoZi55KV0pLHIucmVuZGVyKCkpLHIuYm94VmlzaWJsZSghMCkscD1yLmJvdW5kcygpLGk9e3g6cC50b3BMZWZ0LngseTpwLnRvcExlZnQueX0sbz17eDpwLmJvdHRvbVJpZ2h0LngseTpwLmJvdHRvbVJpZ2h0Lnl9LGE9ZixyLl9kcmFnU3RhcnRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhwKX0sdT1mdW5jdGlvbihmLHApe3N3aXRjaChsKXtjYXNlIHMubmV3Qm94Om8ueD1wLngsby55PXAueTticmVhaztjYXNlIHMucmVzaXplOm4uYm90dG9tP28ueT1wLnk6bi50b3AmJihpLnk9cC55KSxuLnJpZ2h0P28ueD1wLng6bi5sZWZ0JiYoaS54PXAueCk7YnJlYWs7Y2FzZSBzLm1vdmU6dmFyIGQ9cC54LWEueCxnPXAueS1hLnk7aS54Kz1kLGkueSs9ZyxvLngrPWQsby55Kz1nLGE9cDticmVha31yLl9zZXRCb3VuZHMoe3RvcExlZnQ6aSxib3R0b21SaWdodDpvfSksci5feEJvdW5kc01vZGU9PT1WRi5Qcm9wZXJ0eU1vZGUuVkFMVUUmJnIueFNjYWxlKCkhPW51bGwmJnIuX3NldFhFeHRlbnQoW3IueFNjYWxlKCkuaW52ZXJ0KGkueCksci54U2NhbGUoKS5pbnZlcnQoby54KV0pLHIuX3lCb3VuZHNNb2RlPT09VkYuUHJvcGVydHlNb2RlLlZBTFVFJiZyLnlTY2FsZSgpIT1udWxsJiZyLl9zZXRZRXh0ZW50KFtyLnlTY2FsZSgpLmludmVydChpLnkpLHIueVNjYWxlKCkuaW52ZXJ0KG8ueSldKSxyLnJlbmRlcigpLHIuX2RyYWdDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhyLmJvdW5kcygpKX0saD1mdW5jdGlvbihmLHApe2w9PT1zLm5ld0JveCYmZi54PT09cC54JiZmLnk9PT1wLnkmJnIuYm94VmlzaWJsZSghMSksci5fZHJhZ0VuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHIuYm91bmRzKCkpfTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoYyksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZyh1KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKGgpLHRoaXMuX2Rpc2Nvbm5lY3RJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3IuX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnU3RhcnQoYyksci5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWcodSksci5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdFbmQoaCksci5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpfX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt2YXIgbj1mdW5jdGlvbigpe3JldHVybiByLl9ib3guYXBwZW5kKCJsaW5lIikuc3R5bGVzKHtvcGFjaXR5OjAsc3Ryb2tlOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlU3Ryb2tlIn0pfTtpZih0aGlzLl9kZXRlY3Rpb25FZGdlVD1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCksdGhpcy5fZGV0ZWN0aW9uRWRnZUI9bigpLmNsYXNzZWQoImRyYWctZWRnZS10YiIsITApLHRoaXMuX2RldGVjdGlvbkVkZ2VMPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtbHIiLCEwKSx0aGlzLl9kZXRlY3Rpb25FZGdlUj1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLWxyIiwhMCksdGhpcy5faGFzQ29ybmVycyl7dmFyIGk9ZnVuY3Rpb24oKXtyZXR1cm4gci5fYm94LmFwcGVuZCgiY2lyY2xlIikuc3R5bGVzKHtvcGFjaXR5OjAsZmlsbDoicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZUZpbGwifSl9O3RoaXMuX2RldGVjdGlvbkNvcm5lclRMPWkoKS5jbGFzc2VkKCJkcmFnLWNvcm5lci10bCIsITApLHRoaXMuX2RldGVjdGlvbkNvcm5lclRSPWkoKS5jbGFzc2VkKCJkcmFnLWNvcm5lci10ciIsITApLHRoaXMuX2RldGVjdGlvbkNvcm5lckJMPWkoKS5jbGFzc2VkKCJkcmFnLWNvcm5lci1ibCIsITApLHRoaXMuX2RldGVjdGlvbkNvcm5lckJSPWkoKS5jbGFzc2VkKCJkcmFnLWNvcm5lci1iciIsITApfX0sdC5wcm90b3R5cGUuX2dldFJlc2l6aW5nRWRnZXM9ZnVuY3Rpb24ocil7dmFyIG49e3RvcDohMSxib3R0b206ITEsbGVmdDohMSxyaWdodDohMX07aWYoIXRoaXMucmVzaXphYmxlKCkpcmV0dXJuIG47dmFyIGk9dGhpcy5ib3VuZHMoKSxvPWkudG9wTGVmdC55LGE9aS5ib3R0b21SaWdodC55LHM9aS50b3BMZWZ0LngsbD1pLmJvdHRvbVJpZ2h0LngsYz10aGlzLl9kZXRlY3Rpb25SYWRpdXM7cmV0dXJuIHMtYzw9ci54JiZyLng8PWwrYyYmKG4udG9wPW8tYzw9ci55JiZyLnk8PW8rYyxuLmJvdHRvbT1hLWM8PXIueSYmci55PD1hK2MpLG8tYzw9ci55JiZyLnk8PWErYyYmKG4ubGVmdD1zLWM8PXIueCYmci54PD1zK2Msbi5yaWdodD1sLWM8PXIueCYmci54PD1sK2MpLG59LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7aWYoZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLmJveFZpc2libGUoKSl7dmFyIHI9dGhpcy5ib3VuZHMoKSxuPXIudG9wTGVmdC55LGk9ci5ib3R0b21SaWdodC55LG89ci50b3BMZWZ0LngsYT1yLmJvdHRvbVJpZ2h0Lng7dGhpcy5fZGV0ZWN0aW9uRWRnZVQuYXR0cnMoe3gxOm8seTE6bix4MjphLHkyOm4sInN0cm9rZS13aWR0aCI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzKjJ9KSx0aGlzLl9kZXRlY3Rpb25FZGdlQi5hdHRycyh7eDE6byx5MTppLHgyOmEseTI6aSwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2RldGVjdGlvbkVkZ2VMLmF0dHJzKHt4MTpvLHkxOm4seDI6byx5MjppLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpcy5fZGV0ZWN0aW9uRWRnZVIuYXR0cnMoe3gxOmEseTE6bix4MjphLHkyOmksInN0cm9rZS13aWR0aCI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzKjJ9KSx0aGlzLl9oYXNDb3JuZXJzJiYodGhpcy5fZGV0ZWN0aW9uQ29ybmVyVEwuYXR0cnMoe2N4Om8sY3k6bixyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lclRSLmF0dHJzKHtjeDphLGN5Om4scjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCTC5hdHRycyh7Y3g6byxjeTppLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQlIuYXR0cnMoe2N4OmEsY3k6aSxyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZGV0ZWN0aW9uUmFkaXVzPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cztpZihyPDApdGhyb3cgbmV3IEVycm9yKCJkZXRlY3Rpb24gcmFkaXVzIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzPXIsdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5yZXNpemFibGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcmVzaXphYmxlOih0aGlzLl9yZXNpemFibGU9cix0aGlzLl9zZXRSZXNpemFibGVDbGFzc2VzKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fc2V0UmVzaXphYmxlQ2xhc3Nlcz1mdW5jdGlvbihyKXtyJiZ0aGlzLmVuYWJsZWQoKT8odGhpcy5hZGRDbGFzcygieC1yZXNpemFibGUiKSx0aGlzLmFkZENsYXNzKCJ5LXJlc2l6YWJsZSIpKToodGhpcy5yZW1vdmVDbGFzcygieC1yZXNpemFibGUiKSx0aGlzLnJlbW92ZUNsYXNzKCJ5LXJlc2l6YWJsZSIpKX0sdC5wcm90b3R5cGUubW92YWJsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9tb3ZhYmxlOih0aGlzLl9tb3ZhYmxlPXIsdGhpcy5fc2V0TW92YWJsZUNsYXNzKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRNb3ZhYmxlQ2xhc3M9ZnVuY3Rpb24oKXt0aGlzLm1vdmFibGUoKSYmdGhpcy5lbmFibGVkKCk/dGhpcy5hZGRDbGFzcygibW92YWJsZSIpOnRoaXMucmVtb3ZlQ2xhc3MoIm1vdmFibGUiKX0sdC5wcm90b3R5cGUub25EcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZ1N0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uRHJhZz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0NhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0NhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5kcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufSx0LnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5lbmFibGVkKCk6KHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5lbmFibGVkKHIpLHRoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXModGhpcy5yZXNpemFibGUoKSksdGhpcy5fc2V0TW92YWJsZUNsYXNzKCksdGhpcyl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0NhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kcmFnQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2RyYWdDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnRW5kQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2Rpc2Nvbm5lY3RJbnRlcmFjdGlvbigpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzZXRTdGF0ZSgpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKSxlLnByb3RvdHlwZS5kZXRhY2guY2FsbCh0aGlzKSx0aGlzfSx0LnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24ocil7cmV0dXJuIHI9bEJlLmNvZXJjZUV4dGVybmFsRDMociksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHRoaXMpLGUucHJvdG90eXBlLmFuY2hvci5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX3Jlc2V0U3RhdGU9ZnVuY3Rpb24oKXt0aGlzLmJvdW5kcyh7dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6MCx5OjB9fSl9LHR9KGNCZS5TZWxlY3Rpb25Cb3hMYXllcik7UG90LkRyYWdCb3hMYXllcj11QmV9KTt2YXIga290PUgoTG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShMb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoQmU9KGRlKCksVXQocGUpKSxmQmU9RmUoKSxwQmU9a2MoKSxPMTsoZnVuY3Rpb24oZSl7ZVtlLlZBTFVFPTBdPSJWQUxVRSIsZVtlLlBJWEVMPTFdPSJQSVhFTCJ9KShPMXx8KE8xPXt9KSk7dmFyIGRCZT1mdW5jdGlvbihlKXtoQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7aWYobi5fbW9kZT1PMS5WQUxVRSxyIT09dC5PUklFTlRBVElPTl9WRVJUSUNBTCYmciE9PXQuT1JJRU5UQVRJT05fSE9SSVpPTlRBTCl0aHJvdyBuZXcgRXJyb3IocisiIGlzIG5vdCBhIHZhbGlkIG9yaWVudGF0aW9uIGZvciBHdWlkZUxpbmVMYXllciIpO3JldHVybiBuLl9vcmllbnRhdGlvbj1yLG4uX292ZXJmbG93SGlkZGVuPSEwLG4uYWRkQ2xhc3MoImd1aWRlLWxpbmUtbGF5ZXIiKSxuLl9pc1ZlcnRpY2FsKCk/bi5hZGRDbGFzcygidmVydGljYWwiKTpuLmFkZENsYXNzKCJob3Jpem9udGFsIiksbi5fc2NhbGVVcGRhdGVDYWxsYmFjaz1mdW5jdGlvbigpe24uX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKSxuLnJlbmRlcigpfSxufXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9ndWlkZUxpbmU9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiZ3VpZGUtbGluZSIsITApfSx0LnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihyLG4pe3JldHVybnt3aWR0aDpyLGhlaWdodDpufX0sdC5wcm90b3R5cGUuX2lzVmVydGljYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZW50YXRpb249PT10Lk9SSUVOVEFUSU9OX1ZFUlRJQ0FMfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5zY2FsZSgpIT1udWxsJiYodGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMuc2NhbGUoKS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTp0aGlzLnNjYWxlKCkucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pKSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKSx0aGlzLl9ndWlkZUxpbmUuYXR0cnMoe3gxOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLnBpeGVsUG9zaXRpb24oKTowLHkxOnRoaXMuX2lzVmVydGljYWwoKT8wOnRoaXMucGl4ZWxQb3NpdGlvbigpLHgyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLnBpeGVsUG9zaXRpb24oKTp0aGlzLndpZHRoKCkseTI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy5waXhlbFBvc2l0aW9uKCl9KSx0aGlzfSx0LnByb3RvdHlwZS5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZT1mdW5jdGlvbigpe3RoaXMuc2NhbGUoKSE9bnVsbCYmKHRoaXMuX21vZGU9PT1PMS5WQUxVRSYmdGhpcy52YWx1ZSgpIT1udWxsP3RoaXMuX3BpeGVsUG9zaXRpb249dGhpcy5zY2FsZSgpLnNjYWxlKHRoaXMudmFsdWUoKSk6dGhpcy5fbW9kZT09PU8xLlBJWEVMJiZ0aGlzLnBpeGVsUG9zaXRpb24oKSE9bnVsbCYmKHRoaXMuX3ZhbHVlPXRoaXMuc2NhbGUoKS5pbnZlcnQodGhpcy5waXhlbFBvc2l0aW9uKCkpKSl9LHQucHJvdG90eXBlLl9zZXRQaXhlbFBvc2l0aW9uV2l0aG91dENoYW5naW5nTW9kZT1mdW5jdGlvbihyKXt0aGlzLl9waXhlbFBvc2l0aW9uPXIsdGhpcy5zY2FsZSgpIT1udWxsJiYodGhpcy5fdmFsdWU9dGhpcy5zY2FsZSgpLmludmVydCh0aGlzLnBpeGVsUG9zaXRpb24oKSkpLHRoaXMucmVuZGVyKCl9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3NjYWxlO3ZhciBuPXRoaXMuX3NjYWxlO3JldHVybiBuIT1udWxsJiZuLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKSx0aGlzLl9zY2FsZT1yLHRoaXMuX3NjYWxlLm9uVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spLHRoaXMuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKSx0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3ZhbHVlOih0aGlzLl92YWx1ZT1yLHRoaXMuX21vZGU9TzEuVkFMVUUsdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnBpeGVsUG9zaXRpb249ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcGl4ZWxQb3NpdGlvbjtpZighZkJlLk1hdGguaXNWYWxpZE51bWJlcihyKSl0aHJvdyBuZXcgRXJyb3IoInBpeGVsUG9zaXRpb24gbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIiKTtyZXR1cm4gdGhpcy5fcGl4ZWxQb3NpdGlvbj1yLHRoaXMuX21vZGU9TzEuUElYRUwsdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLnNjYWxlKCkhPW51bGwmJnRoaXMuc2NhbGUoKS5vZmZVcGRhdGUodGhpcy5fc2NhbGVVcGRhdGVDYWxsYmFjayl9LHQuT1JJRU5UQVRJT05fVkVSVElDQUw9InZlcnRpY2FsIix0Lk9SSUVOVEFUSU9OX0hPUklaT05UQUw9Imhvcml6b250YWwiLHR9KHBCZS5Db21wb25lbnQpO0xvdC5HdWlkZUxpbmVMYXllcj1kQmV9KTt2YXIgRSR0PUgoTm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBtQmU9KGRlKCksVXQocGUpKSxnQmU9a290KCksX0JlPXM0KCksUm90PUZlKCkseUJlPWZ1bmN0aW9uKGUpe21CZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzLHIpfHx0aGlzO24uX2RldGVjdGlvblJhZGl1cz0zLG4uX2VuYWJsZWQ9ITAsbi5hZGRDbGFzcygiZHJhZy1saW5lLWxheWVyIiksbi5hZGRDbGFzcygiZW5hYmxlZCIpLG4uX2RyYWdJbnRlcmFjdGlvbj1uZXcgX0JlLkRyYWcsbi5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKG4pO3ZhciBpPWZ1bmN0aW9uKGMpe3JldHVybiBuLl9pc1ZlcnRpY2FsKCkmJm4ucGl4ZWxQb3NpdGlvbigpLW4uZGV0ZWN0aW9uUmFkaXVzKCk8PWMueCYmYy54PD1uLnBpeGVsUG9zaXRpb24oKStuLmRldGVjdGlvblJhZGl1cygpfHwhbi5faXNWZXJ0aWNhbCgpJiZuLnBpeGVsUG9zaXRpb24oKS1uLmRldGVjdGlvblJhZGl1cygpPD1jLnkmJmMueTw9bi5waXhlbFBvc2l0aW9uKCkrbi5kZXRlY3Rpb25SYWRpdXMoKX0sbz0hMSxhPWZ1bmN0aW9uKGMpe2koYykmJihvPSEwLG4uX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG4pKX07bi5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KGEpO3ZhciBzPWZ1bmN0aW9uKGMsdSl7byYmKG4uX3NldFBpeGVsUG9zaXRpb25XaXRob3V0Q2hhbmdpbmdNb2RlKG4uX2lzVmVydGljYWwoKT91Lng6dS55KSxuLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtuLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKHMpO3ZhciBsPWZ1bmN0aW9uKGMsdSl7byYmKG89ITEsbi5fZHJhZ0VuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG4pKX07cmV0dXJuIG4uX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQobCksbi5fZGlzY29ubmVjdEludGVyYWN0aW9uPWZ1bmN0aW9uKCl7bi5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdTdGFydChhKSxuLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZyhzKSxuLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ0VuZChsKSxuLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9LG4uX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgUm90LkNhbGxiYWNrU2V0LG4uX2RyYWdDYWxsYmFja3M9bmV3IFJvdC5DYWxsYmFja1NldCxuLl9kcmFnRW5kQ2FsbGJhY2tzPW5ldyBSb3QuQ2FsbGJhY2tTZXQsbn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fZGV0ZWN0aW9uRWRnZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSkuY2xhc3NlZCgiZHJhZy1lZGdlIiwhMCl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fZGV0ZWN0aW9uRWRnZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKSwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXN9LHQucHJvdG90eXBlLmRldGVjdGlvblJhZGl1cz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXM7aWYocjwwKXRocm93IG5ldyBFcnJvcigiZGV0ZWN0aW9uIHJhZGl1cyBjYW5ub3QgYmUgbmVnYXRpdmUuIik7cmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cz1yLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuZW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9lbmFibGVkOih0aGlzLl9lbmFibGVkPXIscj90aGlzLmFkZENsYXNzKCJlbmFibGVkIik6dGhpcy5yZW1vdmVDbGFzcygiZW5hYmxlZCIpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5lbmFibGVkKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0NhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9LHR9KGdCZS5HdWlkZUxpbmVMYXllcik7Tm90LkRyYWdMaW5lTGF5ZXI9eUJlfSk7dmFyIFQkdD1IKERvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdkJlPShkZSgpLFV0KHBlKSkseEJlPWtjKCk7ZnVuY3Rpb24gcUYoZSx0LHIpe3ZhciBuPXt9O2lmKHIhPT12b2lkIDApZm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXJbaS0xXSxhPXJbaV07blthXT1vfXJldHVybiBmdW5jdGlvbihzKXt2YXIgbD1lLnNjYWxlKHMpO2lmKCF0KXJldHVybiBsO3ZhciBjLHU9bltzXT09PXZvaWQgMD92b2lkIDA6ZS5zY2FsZShuW3NdKTtyZXR1cm4gdSE9PXZvaWQgMCYmKGM9dSsobC11KS8yKSxjfX12YXIgYkJlPWZ1bmN0aW9uKGUpe3ZCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmFkZENsYXNzKCJncmlkbGluZXMiKSxpLl94U2NhbGU9cixpLl95U2NhbGU9bixpLl9yZW5kZXJDYWxsYmFjaz1mdW5jdGlvbihvKXtyZXR1cm4gaS5yZW5kZXIoKX0saS5feFNjYWxlJiZpLl94U2NhbGUub25VcGRhdGUoaS5fcmVuZGVyQ2FsbGJhY2spLGkuX3lTY2FsZSYmaS5feVNjYWxlLm9uVXBkYXRlKGkuX3JlbmRlckNhbGxiYWNrKSxpfXJldHVybiB0LnByb3RvdHlwZS5iZXR3ZWVuWD1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMD90aGlzLl9iZXR3ZWVuWDoociE9PXRoaXMuX2JldHdlZW5YJiYodGhpcy5fYmV0d2Vlblg9cix0aGlzLnJlbmRlcigpKSx0aGlzKX0sdC5wcm90b3R5cGUuYmV0d2Vlblk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fYmV0d2Vlblk6KHIhPT10aGlzLl9iZXR3ZWVuWSYmKHRoaXMuX2JldHdlZW5ZPXIsdGhpcy5yZW5kZXIoKSksdGhpcyl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3hTY2FsZSYmdGhpcy5feFNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksdGhpcy5feVNjYWxlJiZ0aGlzLl95U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0aGlzfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl94TGluZXNDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1ncmlkbGluZXMiLCEwKSx0aGlzLl95TGluZXNDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgieS1ncmlkbGluZXMiLCEwKX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9yZWRyYXdYTGluZXMoKSx0aGlzLl9yZWRyYXdZTGluZXMoKSx0aGlzfSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3hTY2FsZSE9bnVsbCYmdGhpcy5feFNjYWxlLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pLHRoaXMuX3lTY2FsZSE9bnVsbCYmdGhpcy5feVNjYWxlLnJhbmdlKFt0aGlzLmhlaWdodCgpLDBdKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVkcmF3WExpbmVzPWZ1bmN0aW9uKCl7aWYodGhpcy5feFNjYWxlKXt2YXIgcj10aGlzLmJldHdlZW5YKCksbj10aGlzLl94U2NhbGUudGlja3MoKS5zbGljZShyPzE6MCksaT10aGlzLl94TGluZXNDb250YWluZXIuc2VsZWN0QWxsKCJsaW5lIikuZGF0YShuKSxvPWkuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5tZXJnZShpKTtvLmF0dHIoIngxIixxRih0aGlzLl94U2NhbGUscix0aGlzLl94U2NhbGUudGlja3MoKSkpLmF0dHIoInkxIiwwKS5hdHRyKCJ4MiIscUYodGhpcy5feFNjYWxlLHIsdGhpcy5feFNjYWxlLnRpY2tzKCkpKS5hdHRyKCJ5MiIsdGhpcy5oZWlnaHQoKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHIpLmNsYXNzZWQoInplcm9saW5lIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PTB9KSxpLmV4aXQoKS5yZW1vdmUoKX19LHQucHJvdG90eXBlLl9yZWRyYXdZTGluZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl95U2NhbGUpe3ZhciByPXRoaXMuYmV0d2VlblkoKSxuPXRoaXMuX3lTY2FsZS50aWNrcygpLnNsaWNlKHI/MTowKSxpPXRoaXMuX3lMaW5lc0NvbnRhaW5lci5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKG4pLG89aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLm1lcmdlKGkpO28uYXR0cigieDEiLDApLmF0dHIoInkxIixxRih0aGlzLl95U2NhbGUscix0aGlzLl95U2NhbGUudGlja3MoKSkpLmF0dHIoIngyIix0aGlzLndpZHRoKCkpLmF0dHIoInkyIixxRih0aGlzLl95U2NhbGUscix0aGlzLl95U2NhbGUudGlja3MoKSkpLmNsYXNzZWQoImJldHdlZW5saW5lIixyKS5jbGFzc2VkKCJ6ZXJvbGluZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT0wfSksaS5leGl0KCkucmVtb3ZlKCl9fSx0fSh4QmUuQ29tcG9uZW50KTtEb3QuR3JpZGxpbmVzPWJCZX0pO3ZhciBHRj1IKE9vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgd0JlPShkZSgpLFV0KHBlKSksU0JlPVlnKCksTUJlPWtjKCksRUJlPWZ1bmN0aW9uKGUpe3dCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9kZXRhY2hDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5yZW1vdmUobil9LHJ9cmV0dXJuIHQucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3JldHVybiByPVNCZS5jb2VyY2VFeHRlcm5hbEQzKHIpLGUucHJvdG90eXBlLmFuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fZm9yRWFjaChmdW5jdGlvbihpKXtyZXR1cm4gaS5hbmNob3Iobi5lbGVtZW50KCkpfSksdGhpc30sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIucmVuZGVyKCl9KSx0aGlzfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJoYXMoKSBpcyBub3QgaW1wbGVtZW50ZWQgb24gQ29tcG9uZW50Q29udGFpbmVyIil9LHQucHJvdG90eXBlLl9hZG9wdEFuZEFuY2hvcj1mdW5jdGlvbihyKXtyLnBhcmVudCh0aGlzKSxyLm9uRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKSx0aGlzLl9pc0FuY2hvcmVkJiZyLmFuY2hvcih0aGlzLmVsZW1lbnQoKSl9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5oYXMocikmJihyLm9mZkRldGFjaCh0aGlzLl9kZXRhY2hDYWxsYmFjayksdGhpcy5fcmVtb3ZlKHIpLHIuZGV0YWNoKCksdGhpcy5yZWRyYXcoKSksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbihyKXtyZXR1cm4hMX0sdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJfZm9yRWFjaCgpIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBDb21wb25lbnRDb250YWluZXIiKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiByLmRlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiByLmludmFsaWRhdGVDYWNoZSgpfSl9LHR9KE1CZS5Db21wb25lbnQpO09vdC5Db21wb25lbnRDb250YWluZXI9RUJlfSk7dmFyIEZvdD1IKHpvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoem90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgVEJlPShkZSgpLFV0KHBlKSksQyR0PUZlKCksQ0JlPUdGKCksQUJlPWZ1bmN0aW9uKGUpe1RCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPVtdKTt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2NvbXBvbmVudHM9W10sbi5hZGRDbGFzcygiY29tcG9uZW50LWdyb3VwIiksci5mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBuLmFwcGVuZChpKX0pLG59cmV0dXJuIHQucHJvdG90eXBlLl9mb3JFYWNoPWZ1bmN0aW9uKHIpe3RoaXMuY29tcG9uZW50cygpLmZvckVhY2gocil9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50cy5pbmRleE9mKHIpPj0wfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2NvbXBvbmVudHMubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBvLnJlcXVlc3RlZFNwYWNlKHIsbil9KTtyZXR1cm57bWluV2lkdGg6QyR0Lk1hdGgubWF4KGksZnVuY3Rpb24obyl7cmV0dXJuIG8ubWluV2lkdGh9LDApLG1pbkhlaWdodDpDJHQuTWF0aC5tYXgoaSxmdW5jdGlvbihvKXtyZXR1cm4gby5taW5IZWlnaHR9LDApfX0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcztyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX2ZvckVhY2goZnVuY3Rpb24oYSl7YS5jb21wdXRlTGF5b3V0KHt4OjAseTowfSxvLndpZHRoKCksby5oZWlnaHQoKSl9KSx0aGlzfSx0LnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihyLG4pe3JldHVybnt3aWR0aDpyLGhlaWdodDpufX0sdC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmV2ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiByLmZpeGVkV2lkdGgoKX0pfSx0LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmV2ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiByLmZpeGVkSGVpZ2h0KCl9KX0sdC5wcm90b3R5cGUuY29tcG9uZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLnNsaWNlKCl9LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbCYmIXRoaXMuaGFzKHIpJiYoci5kZXRhY2goKSx0aGlzLl9jb21wb25lbnRzLnB1c2gociksdGhpcy5fYWRvcHRBbmRBbmNob3IociksdGhpcy5yZWRyYXcoKSksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9jb21wb25lbnRzLmluZGV4T2Yocik7cmV0dXJuIG4+PTA/KHRoaXMuX2NvbXBvbmVudHMuc3BsaWNlKG4sMSksITApOiExfSx0fShDQmUuQ29tcG9uZW50Q29udGFpbmVyKTt6b3QuR3JvdXA9QUJlfSk7dmFyIEEkdD1IKEJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUEJlPShkZSgpLFV0KHBlKSksV0Y9X2woKSxJQmU9WEEoKSxMQmU9QnUoKSxrQmU9RmUoKSxSQmU9a2MoKSxOQmU9ZnVuY3Rpb24oZSl7UEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX3RleHRQYWRkaW5nPTUscj09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkludGVycG9sYXRlZENvbG9yTGVnZW5kIHJlcXVpcmVzIGEgaW50ZXJwb2xhdGVkQ29sb3JTY2FsZSIpO3JldHVybiBuLl9zY2FsZT1yLG4uX3JlZHJhd0NhbGxiYWNrPWZ1bmN0aW9uKGkpe3JldHVybiBuLnJlZHJhdygpfSxuLl9zY2FsZS5vblVwZGF0ZShuLl9yZWRyYXdDYWxsYmFjayksbi5fZm9ybWF0dGVyPUxCZS5nZW5lcmFsKCksbi5fb3JpZW50YXRpb249Imhvcml6b250YWwiLG4uX2V4cGFuZHM9ITEsbi5hZGRDbGFzcygibGVnZW5kIiksbi5hZGRDbGFzcygiaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCIpLG59cmV0dXJuIHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5fc2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlZHJhd0NhbGxiYWNrKX0sdC5wcm90b3R5cGUuZm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT09dm9pZCAwP3RoaXMuX2Zvcm1hdHRlcjoodGhpcy5fZm9ybWF0dGVyPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUuZXhwYW5kcz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9leHBhbmRzOih0aGlzLl9leHBhbmRzPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5fZW5zdXJlT3JpZW50YXRpb249ZnVuY3Rpb24ocil7aWYocj1yLnRvTG93ZXJDYXNlKCkscj09PSJob3Jpem9udGFsInx8cj09PSJsZWZ0Inx8cj09PSJyaWdodCIpcmV0dXJuIHI7dGhyb3cgbmV3IEVycm9yKCciJytyKyciIGlzIG5vdCBhIHZhbGlkIG9yaWVudGF0aW9uIGZvciBJbnRlcnBvbGF0ZWRDb2xvckxlZ2VuZCcpfSx0LnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9vcmllbnRhdGlvbjoodGhpcy5fb3JpZW50YXRpb249dC5fZW5zdXJlT3JpZW50YXRpb24ociksdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmV4cGFuZHMoKXx8dGhpcy5faXNWZXJ0aWNhbCgpfSx0LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmV4cGFuZHMoKXx8IXRoaXMuX2lzVmVydGljYWwoKX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlVGlja3M9ZnVuY3Rpb24ocil7cj09PXZvaWQgMCYmKHI9dC5fREVGQVVMVF9OVU1fU1dBVENIRVMpO3ZhciBuPXRoaXMuX3NjYWxlLmRvbWFpbigpO2lmKHI9PT0xKXJldHVybltuWzBdXTtmb3IodmFyIGk9KG5bMV0tblswXSkvKHItMSksbz1bXSxhPTA7YTxyO2ErKylvLnB1c2goblswXStpKmEpO3JldHVybiBvfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zd2F0Y2hDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic3dhdGNoLWNvbnRhaW5lciIsITApLHRoaXMuX3N3YXRjaEJvdW5kaW5nQm94PXRoaXMuY29udGVudCgpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInN3YXRjaC1ib3VuZGluZy1ib3giLCEwKSx0aGlzLl9sb3dlckxhYmVsPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5MRUdFTkRfTEFCRUxfQ0xBU1MsITApLHRoaXMuX3VwcGVyTGFiZWw9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9MQUJFTF9DTEFTUywhMCk7dmFyIHI9bmV3IFdGLlN2Z0NvbnRleHQodGhpcy5jb250ZW50KCkubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgV0YuTWVhc3VyZXIociksdGhpcy5fd3JhcHBlcj1uZXcgV0YuV3JhcHBlcix0aGlzLl93cml0ZXI9bmV3IFdGLldyaXRlcih0aGlzLl9tZWFzdXJlcixyLHRoaXMuX3dyYXBwZXIpfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGE9byxzPXRoaXMuX3NjYWxlLmRvbWFpbigpLGw9cy5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIGkuX21lYXN1cmVyLm1lYXN1cmUoaS5fZm9ybWF0dGVyKHApKS53aWR0aH0pLGMsdSxoPXQuX0RFRkFVTFRfTlVNX1NXQVRDSEVTO2lmKHRoaXMuX2lzVmVydGljYWwoKSl7dmFyIGY9a0JlLk1hdGgubWF4KGwsMCk7dT1hK28rdGhpcy5fdGV4dFBhZGRpbmcrZit0aGlzLl90ZXh0UGFkZGluZyxjPWgqb31lbHNlIGM9YStvK2EsdT10aGlzLl90ZXh0UGFkZGluZytsWzBdK2gqbytsWzFdK3RoaXMuX3RleHRQYWRkaW5nO3JldHVybnttaW5XaWR0aDp1LG1pbkhlaWdodDpjfX0sdC5wcm90b3R5cGUuX2lzVmVydGljYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZW50YXRpb24hPT0iaG9yaXpvbnRhbCJ9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXRoaXMuX3NjYWxlLmRvbWFpbigpLGk9dGhpcy5fZm9ybWF0dGVyKG5bMF0pLG89dGhpcy5fbWVhc3VyZXIubWVhc3VyZShpKS53aWR0aCxhPXRoaXMuX2Zvcm1hdHRlcihuWzFdKSxzPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoYSkud2lkdGgsbD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGM9dGhpcy5fdGV4dFBhZGRpbmcsdT17eDowLHk6MH0saD17eDowLHk6MH0sZj17eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246MH0scD17eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246MH0sZCxnLF8seSx4PXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9LGIsUztpZih0aGlzLl9pc1ZlcnRpY2FsKCkpe1M9TWF0aC5mbG9vcih0aGlzLmhlaWdodCgpKTt2YXIgQz1NYXRoLm1heChvLHMpO2I9KHRoaXMud2lkdGgoKS1DLTIqdGhpcy5fdGV4dFBhZGRpbmcpLzIsZD1NYXRoLm1heCh0aGlzLndpZHRoKCktYi0yKmMtQywwKSxnPTEseT1mdW5jdGlvbihMLFIpe3JldHVybiByLmhlaWdodCgpLShSKzEpfSxwLnlBbGlnbj0idG9wIix1Lnk9MCxmLnlBbGlnbj0iYm90dG9tIixoLnk9MCx0aGlzLl9vcmllbnRhdGlvbj09PSJsZWZ0Ij8oXz1mdW5jdGlvbihMLFIpe3JldHVybiBjK0MrY30scC54QWxpZ249InJpZ2h0Iix1Lng9LShiK2QrYyksZi54QWxpZ249InJpZ2h0IixoLng9LShiK2QrYykpOihfPWZ1bmN0aW9uKEwsUil7cmV0dXJuIGJ9LHAueEFsaWduPSJsZWZ0Iix1Lng9YitkK2MsZi54QWxpZ249ImxlZnQiLGgueD1iK2QrYykseC53aWR0aD1kLHguaGVpZ2h0PVMqZ31lbHNlIGI9TWF0aC5tYXgoYywodGhpcy5oZWlnaHQoKS1sKS8yKSxTPU1hdGgubWF4KE1hdGguZmxvb3IodGhpcy53aWR0aCgpLWMqNC1vLXMpLDApLGQ9MSxnPU1hdGgubWF4KHRoaXMuaGVpZ2h0KCktMipiLDApLF89ZnVuY3Rpb24oTCxSKXtyZXR1cm4gTWF0aC5mbG9vcihvKzIqYykrUn0seT1mdW5jdGlvbihMLFIpe3JldHVybiBifSxwLnhBbGlnbj0icmlnaHQiLHUueD0tYyxmLnhBbGlnbj0ibGVmdCIsaC54PWMseC55PWIseC53aWR0aD1TKmQseC5oZWlnaHQ9Zzt4Lng9XyhudWxsLDApLHRoaXMuX3VwcGVyTGFiZWwudGV4dCgiIiksdGhpcy5fd3JpdGVyLndyaXRlKGEsdGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkscCx0aGlzLl91cHBlckxhYmVsLm5vZGUoKSk7dmFyIFA9InRyYW5zbGF0ZSgiK3UueCsiLCAiK3UueSsiKSI7dGhpcy5fdXBwZXJMYWJlbC5hdHRyKCJ0cmFuc2Zvcm0iLFApLHRoaXMuX2xvd2VyTGFiZWwudGV4dCgiIiksdGhpcy5fd3JpdGVyLndyaXRlKGksdGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCksZix0aGlzLl9sb3dlckxhYmVsLm5vZGUoKSk7dmFyIGs9InRyYW5zbGF0ZSgiK2gueCsiLCAiK2gueSsiKSI7dGhpcy5fbG93ZXJMYWJlbC5hdHRyKCJ0cmFuc2Zvcm0iLGspLHRoaXMuX3N3YXRjaEJvdW5kaW5nQm94LmF0dHJzKHgpO3ZhciBPPXRoaXMuX2dlbmVyYXRlVGlja3MoUyksRD10aGlzLl9zd2F0Y2hDb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnN3YXRjaCIpLmRhdGEoTyksQj1ELmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic3dhdGNoIiwhMCksST1ELm1lcmdlKEIpO3JldHVybiBELmV4aXQoKS5yZW1vdmUoKSxJLmF0dHJzKHtmaWxsOmZ1bmN0aW9uKEwsUil7cmV0dXJuIHIuX3NjYWxlLnNjYWxlKEwpfSx3aWR0aDpkLGhlaWdodDpnLHg6Xyx5LCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pLElCZS5BRERfVElUTEVfRUxFTUVOVFMmJkIuYXBwZW5kKCJ0aXRsZSIpLnRleHQoZnVuY3Rpb24oTCl7cmV0dXJuIHIuX2Zvcm1hdHRlcihMKX0pLHRoaXN9LHQuX0RFRkFVTFRfTlVNX1NXQVRDSEVTPTExLHQuTEVHRU5EX0xBQkVMX0NMQVNTPSJsZWdlbmQtbGFiZWwiLHR9KFJCZS5Db21wb25lbnQpO0JvdC5JbnRlcnBvbGF0ZWRDb2xvckxlZ2VuZD1OQmV9KTt2YXIgVW90PUgodTQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHU0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSG90PShkZSgpLFV0KHBlKSksWUY9X2woKSxEQmU9a2MoKSxWb3Q9ZnVuY3Rpb24oZSl7SG90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXtyPT09dm9pZCAwJiYocj0iIiksbj09PXZvaWQgMCYmKG49MCk7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmFkZENsYXNzKCJsYWJlbCIpLGkudGV4dChyKSxpLmFuZ2xlKG4pLGkueEFsaWdubWVudCgiY2VudGVyIikueUFsaWdubWVudCgiY2VudGVyIiksaS5fcGFkZGluZz0wLGl9cmV0dXJuIHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KSxvPSh0aGlzLmFuZ2xlKCk9PT0wP2kud2lkdGg6aS5oZWlnaHQpKzIqdGhpcy5wYWRkaW5nKCksYT0odGhpcy5hbmdsZSgpPT09MD9pLmhlaWdodDppLndpZHRoKSsyKnRoaXMucGFkZGluZygpO3JldHVybnttaW5XaWR0aDpvLG1pbkhlaWdodDphfX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fdGV4dENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKTt2YXIgcj1uZXcgWUYuU3ZnQ29udGV4dCh0aGlzLl90ZXh0Q29udGFpbmVyLm5vZGUoKSk7dGhpcy5fbWVhc3VyZXI9bmV3IFlGLkNhY2hlTWVhc3VyZXIociksdGhpcy5fd3JhcHBlcj1uZXcgWUYuV3JhcHBlcix0aGlzLl93cml0ZXI9bmV3IFlGLldyaXRlcih0aGlzLl9tZWFzdXJlcixyLHRoaXMuX3dyYXBwZXIpLHRoaXMudGV4dCh0aGlzLl90ZXh0KX0sdC5wcm90b3R5cGUudGV4dD1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90ZXh0O2lmKHR5cGVvZiByIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIkxhYmVsLnRleHQoKSBvbmx5IHRha2VzIHN0cmluZ3MgYXMgaW5wdXQiKTtyZXR1cm4gdGhpcy5fdGV4dD1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuYW5nbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fYW5nbGU7aWYociU9MzYwLHI+MTgwP3ItPTM2MDpyPC0xODAmJihyKz0zNjApLHI9PT0tOTB8fHI9PT0wfHxyPT09OTApdGhpcy5fYW5nbGU9cjtlbHNlIHRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgdmFsaWQgYW5nbGUgZm9yIExhYmVsIik7cmV0dXJuIHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUucGFkZGluZz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wYWRkaW5nO2lmKHI9K3IscjwwKXRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgdmFsaWQgcGFkZGluZyB2YWx1ZS4gQ2Fubm90IGJlIGxlc3MgdGhhbiAwLiIpO3JldHVybiB0aGlzLl9wYWRkaW5nPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl90ZXh0Q29udGFpbmVyLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciByPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUodGhpcy5fdGV4dCksbj1NYXRoLm1heChNYXRoLm1pbigodGhpcy5oZWlnaHQoKS1yLmhlaWdodCkvMix0aGlzLnBhZGRpbmcoKSksMCksaT1NYXRoLm1heChNYXRoLm1pbigodGhpcy53aWR0aCgpLXIud2lkdGgpLzIsdGhpcy5wYWRkaW5nKCkpLDApO3RoaXMuX3RleHRDb250YWluZXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCIrbisiKSIpO3ZhciBvPXRoaXMud2lkdGgoKS0yKmksYT10aGlzLmhlaWdodCgpLTIqbixzPXt4QWxpZ246dGhpcy54QWxpZ25tZW50KCkseUFsaWduOnRoaXMueUFsaWdubWVudCgpLHRleHRSb3RhdGlvbjp0aGlzLmFuZ2xlKCl9O3JldHVybiB0aGlzLl93cml0ZXIud3JpdGUodGhpcy5fdGV4dCxvLGEscyksdGhpc30sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdH0oREJlLkNvbXBvbmVudCk7dTQuTGFiZWw9Vm90O3ZhciBPQmU9ZnVuY3Rpb24oZSl7SG90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLmFkZENsYXNzKHQuVElUTEVfTEFCRUxfQ0xBU1MpLGl9cmV0dXJuIHQuVElUTEVfTEFCRUxfQ0xBU1M9InRpdGxlLWxhYmVsIix0fShWb3QpO3U0LlRpdGxlTGFiZWw9T0JlO3ZhciB6QmU9ZnVuY3Rpb24oZSl7SG90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLmFkZENsYXNzKHQuQVhJU19MQUJFTF9DTEFTUyksaX1yZXR1cm4gdC5BWElTX0xBQkVMX0NMQVNTPSJheGlzLWxhYmVsIix0fShWb3QpO3U0LkF4aXNMYWJlbD16QmV9KTt2YXIgakY9SChiZD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYmQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBScz0oRXIoKSxVdChNcikpO2Z1bmN0aW9uIEZCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xDaXJjbGUpLnNpemUoTWF0aC5QSSpNYXRoLnBvdyhlLzIsMikpfX1iZC5jaXJjbGU9RkJlO2Z1bmN0aW9uIEJCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xTcXVhcmUpLnNpemUoTWF0aC5wb3coZSwyKSl9fWJkLnNxdWFyZT1CQmU7ZnVuY3Rpb24gSEJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbENyb3NzKS5zaXplKDUvOSpNYXRoLnBvdyhlLDIpKX19YmQuY3Jvc3M9SEJlO2Z1bmN0aW9uIFZCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xEaWFtb25kKS5zaXplKE1hdGgudGFuKE1hdGguUEkvNikqTWF0aC5wb3coZSwyKS8yKX19YmQuZGlhbW9uZD1WQmU7ZnVuY3Rpb24gVUJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbFRyaWFuZ2xlKS5zaXplKE1hdGguc3FydCgzKSpNYXRoLnBvdyhlLzIsMikpfX1iZC50cmlhbmdsZT1VQmU7dmFyIHFCZT0uODkwODEzMDkxNTI5Mjg1MjtmdW5jdGlvbiBHQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sU3Rhcikuc2l6ZShxQmUqTWF0aC5wb3coZS8yLDIpKX19YmQuc3Rhcj1HQmU7dmFyIFdCZT0oMS9NYXRoLnNxcnQoMTIpLzIrMSkqMztmdW5jdGlvbiBZQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sV3llKS5zaXplKFdCZSpNYXRoLnBvdyhlLzIuNCwyKSl9fWJkLnd5ZT1ZQmV9KTt2YXIgUCR0PUgoR290PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShHb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBqQmU9KGRlKCksVXQocGUpKSx6MT0oRXIoKSxVdChNcikpLFhGPV9sKCksWEJlPVhBKCksJEJlPUJ1KCksS0JlPWpGKCksSmc9RmUoKSxaQmU9a2MoKSxxb3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXt0PT09dm9pZCAwJiYodD1bXSkscj09PXZvaWQgMCYmKHI9MCksbj09PXZvaWQgMCYmKG49MS8wKSx0aGlzLmNvbHVtbnM9dCx0aGlzLmJvdHRvbVBhZGRpbmc9cix0aGlzLm1heFdpZHRoPW59cmV0dXJuIGUucHJvdG90eXBlLmFkZENvbHVtbj1mdW5jdGlvbih0KXt2YXIgcj10LndpZHRoLG49dGhpcy5nZXRXaWR0aEF2YWlsYWJsZSgpO3Qud2lkdGg9TWF0aC5taW4obixyKSx0aGlzLmNvbHVtbnMucHVzaCh0KX0sZS5wcm90b3R5cGUuZ2V0Qm91bmRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10aGlzLmNvbHVtbnNbdF0sbj0wLGk9MDtpPHQ7aSsrKW4rPXRoaXMuY29sdW1uc1tpXS53aWR0aDtyZXR1cm57dG9wTGVmdDp7eDpuLHk6MH0sYm90dG9tUmlnaHQ6e3g6bityLndpZHRoLHk6ci5oZWlnaHR9fX0sZS5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIEpnLk1hdGgubWF4KHRoaXMuY29sdW1ucy5tYXAoZnVuY3Rpb24odCl7dmFyIHI9dC5oZWlnaHQ7cmV0dXJuIHJ9KSwwKSt0aGlzLmJvdHRvbVBhZGRpbmd9LGUucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWluKHRoaXMuY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24odCxyKXt2YXIgbj1yLndpZHRoO3JldHVybiB0K259LDApLHRoaXMubWF4V2lkdGgpfSxlLnByb3RvdHlwZS5nZXRXaWR0aEF2YWlsYWJsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0V2lkdGgoKTtyZXR1cm4gTWF0aC5tYXgodGhpcy5tYXhXaWR0aC10LDApfSxlfSgpLEpCZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7dD09PXZvaWQgMCYmKHQ9MS8wKSxyPT09dm9pZCAwJiYocj0xLzApLG49PT12b2lkIDAmJihuPTApLGk9PT12b2lkIDAmJihpPVtdKSx0aGlzLm1heFdpZHRoPXQsdGhpcy5tYXhIZWlnaHQ9cix0aGlzLnBhZGRpbmc9bix0aGlzLnJvd3M9aX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkUm93PWZ1bmN0aW9uKHQpe3QubWF4V2lkdGg9dGhpcy5tYXhXaWR0aC10aGlzLnBhZGRpbmcqMix0aGlzLnJvd3MucHVzaCh0KX0sZS5wcm90b3R5cGUuZ2V0Q29sdW1uQm91bmRzPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5nZXRSb3dCb3VuZHModCksaT10aGlzLnJvd3NbdF0uZ2V0Qm91bmRzKHIpO3JldHVybiBpLnRvcExlZnQueCs9bi50b3BMZWZ0LngsaS5ib3R0b21SaWdodC54Kz1uLnRvcExlZnQueCxpLnRvcExlZnQueSs9bi50b3BMZWZ0LnksaS5ib3R0b21SaWdodC55Kz1uLnRvcExlZnQueSxpfSxlLnByb3RvdHlwZS5nZXRSb3dCb3VuZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciByPXRoaXMucGFkZGluZyxuPXRoaXMucGFkZGluZyxpPTA7aTx0O2krKyluKz10aGlzLnJvd3NbaV0uZ2V0SGVpZ2h0KCk7dmFyIG89e3RvcExlZnQ6e3g6cix5Om59LGJvdHRvbVJpZ2h0Ont4OnIrdGhpcy5yb3dzW3RdLmdldFdpZHRoKCkseTpuK3RoaXMucm93c1t0XS5nZXRIZWlnaHQoKX19O3JldHVybiBvfSxlLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5yb3dzLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiB0K3IuZ2V0SGVpZ2h0KCl9LDApK3RoaXMucGFkZGluZyoyLHRoaXMubWF4SGVpZ2h0KX0sZS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4oSmcuTWF0aC5tYXgodGhpcy5yb3dzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRXaWR0aCgpfSksMCkrdGhpcy5wYWRkaW5nKjIsdGhpcy5tYXhXaWR0aCl9LGV9KCksUUJlPWZ1bmN0aW9uKGUpe2pCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9wYWRkaW5nPTUsbi5fcm93Qm90dG9tUGFkZGluZz0zLG4uYWRkQ2xhc3MoImxlZ2VuZCIpLG4ubWF4RW50cmllc1BlclJvdygxKSxyPT1udWxsKXRocm93IG5ldyBFcnJvcigiTGVnZW5kIHJlcXVpcmVzIGEgY29sb3JTY2FsZSIpO3JldHVybiBuLl9jb2xvclNjYWxlPXIsbi5fcmVkcmF3Q2FsbGJhY2s9ZnVuY3Rpb24oaSl7cmV0dXJuIG4ucmVkcmF3KCl9LG4uX2NvbG9yU2NhbGUub25VcGRhdGUobi5fcmVkcmF3Q2FsbGJhY2spLG4uX2Zvcm1hdHRlcj0kQmUuaWRlbnRpdHkoKSxuLm1heExpbmVzUGVyRW50cnkoMSksbi54QWxpZ25tZW50KCJyaWdodCIpLnlBbGlnbm1lbnQoInRvcCIpLG4uY29tcGFyYXRvcihmdW5jdGlvbihpLG8pe3ZhciBhPW4uX2NvbG9yU2NhbGUuZG9tYWluKCkuc2xpY2UoKS5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIG4uX2Zvcm1hdHRlcihzKX0pO3JldHVybiBhLmluZGV4T2YoaSktYS5pbmRleE9mKG8pfSksbi5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yPWZ1bmN0aW9uKCl7cmV0dXJuIEtCZS5jaXJjbGUoKX0sbi5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yPWZ1bmN0aW9uKCl7cmV0dXJuIDF9LG59cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciByPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5MRUdFTkRfUk9XX0NMQVNTLCEwKSxuPXIuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9FTlRSWV9DTEFTUywhMCk7bi5hcHBlbmQoInRleHQiKTt2YXIgaT1uZXcgWEYuU3ZnQ29udGV4dChyLm5vZGUoKSxudWxsLFhCZS5BRERfVElUTEVfRUxFTUVOVFMpO3RoaXMuX21lYXN1cmVyPW5ldyBYRi5DYWNoZU1lYXN1cmVyKGkpLHRoaXMuX3dyYXBwZXI9bmV3IFhGLldyYXBwZXIoKS5tYXhMaW5lcyh0aGlzLm1heExpbmVzUGVyRW50cnkoKSksdGhpcy5fd3JpdGVyPW5ldyBYRi5Xcml0ZXIodGhpcy5fbWVhc3VyZXIsaSx0aGlzLl93cmFwcGVyKX0sdC5wcm90b3R5cGUuZm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Zvcm1hdHRlcjoodGhpcy5fZm9ybWF0dGVyPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUubWF4RW50cmllc1BlclJvdz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9tYXhFbnRyaWVzUGVyUm93Oih0aGlzLl9tYXhFbnRyaWVzUGVyUm93PXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUubWF4TGluZXNQZXJFbnRyeT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9tYXhMaW5lc1BlckVudHJ5Oih0aGlzLl9tYXhMaW5lc1BlckVudHJ5PXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUubWF4V2lkdGg9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbWF4V2lkdGg6KHRoaXMuX21heFdpZHRoPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUuY29tcGFyYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jb21wYXJhdG9yOih0aGlzLl9jb21wYXJhdG9yPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUuY29sb3JTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbD8odGhpcy5fY29sb3JTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMuX2NvbG9yU2NhbGU9cix0aGlzLl9jb2xvclNjYWxlLm9uVXBkYXRlKHRoaXMuX3JlZHJhd0NhbGxiYWNrKSx0aGlzLnJlZHJhdygpLHRoaXMpOnRoaXMuX2NvbG9yU2NhbGV9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5fY29sb3JTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5fYnVpbGRMZWdlbmRUYWJsZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGE9bmV3IEpCZShyLG4sdGhpcy5fcGFkZGluZykscz10aGlzLl9jb2xvclNjYWxlLmRvbWFpbigpLnNsaWNlKCkuc29ydChmdW5jdGlvbihjLHUpe3JldHVybiBpLl9jb21wYXJhdG9yKGkuX2Zvcm1hdHRlcihjKSxpLl9mb3JtYXR0ZXIodSkpfSksbD1uZXcgcW90O3JldHVybiBhLmFkZFJvdyhsKSxsLmJvdHRvbVBhZGRpbmc9dGhpcy5fcm93Qm90dG9tUGFkZGluZyxzLmZvckVhY2goZnVuY3Rpb24oYyx1KXtsLmNvbHVtbnMubGVuZ3RoLzI9PT1pLm1heEVudHJpZXNQZXJSb3coKSYmKGw9bmV3IHFvdCxsLmJvdHRvbVBhZGRpbmc9aS5fcm93Qm90dG9tUGFkZGluZyxhLmFkZFJvdyhsKSk7dmFyIGg9bC5nZXRXaWR0aEF2YWlsYWJsZSgpLGY9aS5fZm9ybWF0dGVyKGMpLHA9aS5fbWVhc3VyZXIubWVhc3VyZShmKS53aWR0aCxkPWgtby1wPDA7ZCYmbC5jb2x1bW5zLmxlbmd0aD4xJiYobD1uZXcgcW90LGwuYm90dG9tUGFkZGluZz1pLl9yb3dCb3R0b21QYWRkaW5nLGEuYWRkUm93KGwpKTt2YXIgZz17d2lkdGg6byxoZWlnaHQ6byxkYXRhOntuYW1lOmMsdHlwZToic3ltYm9sIn19O2wuYWRkQ29sdW1uKGcpLGg9bC5nZXRXaWR0aEF2YWlsYWJsZSgpO3ZhciBfPU1hdGgubWluKGgscCk7aS5fd3JhcHBlci5tYXhMaW5lcyhpLm1heExpbmVzUGVyRW50cnkoKSk7dmFyIHk9aS5fd3JhcHBlci53cmFwKGYsaS5fbWVhc3VyZXIsXykubm9MaW5lcyx4PXkqbyxiPXt3aWR0aDpfLGhlaWdodDp4LGRhdGE6e25hbWU6Yyx0eXBlOiJ0ZXh0In19O2wuYWRkQ29sdW1uKGIpfSksYX0sdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9idWlsZExlZ2VuZFRhYmxlKEpnLk1hdGgubWluKFt0aGlzLm1heFdpZHRoKCkscl0sciksbik7cmV0dXJue21pbkhlaWdodDppLmdldEhlaWdodCgpLG1pbldpZHRoOmkuZ2V0V2lkdGgoKX19LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZighdGhpcy5faXNTZXR1cClyZXR1cm5bXTt2YXIgaT10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKTtyZXR1cm4gaS5yb3dzLnJlZHVjZShmdW5jdGlvbihvLGEscyl7aWYoby5sZW5ndGghPT0wKXJldHVybiBvO3ZhciBsPWkuZ2V0Um93Qm91bmRzKHMpLGM9SmcuTWF0aC53aXRoaW4ocixsKTtyZXR1cm4gYz9hLmNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uKHUsaCxmKXt2YXIgcD1pLmdldENvbHVtbkJvdW5kcyhzLGYpLGQ9SmcuTWF0aC53aXRoaW4ocixwKTtpZihkKXt2YXIgZz1uLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK3QuTEVHRU5EX1JPV19DTEFTUykubm9kZXMoKVtzXSxfPXoxLnNlbGVjdChnKS5zZWxlY3RBbGwoIi4iK3QuTEVHRU5EX0VOVFJZX0NMQVNTKS5ub2RlcygpW01hdGguZmxvb3IoZi8yKV0seT16MS5zZWxlY3QoXykuc2VsZWN0KCIuIit0LkxFR0VORF9TWU1CT0xfQ0xBU1MpLHg9SmcuRE9NLmdldFRyYW5zbGF0ZVZhbHVlcyh6MS5zZWxlY3QoZykpLGI9SmcuRE9NLmdldFRyYW5zbGF0ZVZhbHVlcyh5KTtyZXR1cm5be2JvdW5kczpKZy5ET00uZWxlbWVudEJCb3goejEuc2VsZWN0KGcpKSxkYXR1bTpoLmRhdGEubmFtZSxwb3NpdGlvbjp7eDp4WzBdK2JbMF0seTp4WzFdK2JbMV19LHNlbGVjdGlvbjp6MS5zZWxlY3QoXyksY29tcG9uZW50Om59XX1yZXR1cm4gdX0sbyk6b30sW10pfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIHI9dGhpcy5fYnVpbGRMZWdlbmRUYWJsZSh0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSk7dGhpcy5jb250ZW50KCkuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7dmFyIG49dGhpcy5jb250ZW50KCkuc2VsZWN0QWxsKCJnLiIrdC5MRUdFTkRfUk9XX0NMQVNTKS5kYXRhKHIucm93cyksaT1uLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9ST1dfQ0xBU1MsITApLm1lcmdlKG4pO24uZXhpdCgpLnJlbW92ZSgpLGkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihhLHMpe3ZhciBsPXIuZ2V0Um93Qm91bmRzKHMpO3JldHVybiJ0cmFuc2xhdGUoIitsLnRvcExlZnQueCsiLCAiK2wudG9wTGVmdC55KyIpIn0pO3ZhciBvPXRoaXM7cmV0dXJuIGkuZWFjaChmdW5jdGlvbihhLHMpe2Zvcih2YXIgbD1bXSxjPTA7YzxhLmNvbHVtbnMubGVuZ3RoO2MrPTIpbC5wdXNoKFthLmNvbHVtbnNbY10sYS5jb2x1bW5zW2MrMV1dKTt2YXIgdT16MS5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLiIrdC5MRUdFTkRfRU5UUllfQ0xBU1MpLmRhdGEobCksaD11LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9FTlRSWV9DTEFTUywhMCkubWVyZ2UodSk7aC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixmdW5jdGlvbihmLHApe3ZhciBkPWZbMF07cmV0dXJuIG8uc3ltYm9sKCkoZC5kYXRhLm5hbWUscykoZC5oZWlnaHQqLjYpKG51bGwpfSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihmLHApe3ZhciBkPWZbMF0sZz1yLnJvd3Nbc10uY29sdW1ucy5pbmRleE9mKGQpLF89ci5nZXRDb2x1bW5Cb3VuZHMocyxnKTtyZXR1cm4idHJhbnNsYXRlKCIrKF8udG9wTGVmdC54K2Qud2lkdGgvMikrIiwgIitkLmhlaWdodC8yKyIpIn0pLmF0dHIoImZpbGwiLGZ1bmN0aW9uKGYpe3JldHVybiBvLl9jb2xvclNjYWxlLnNjYWxlKGZbMF0uZGF0YS5uYW1lKX0pLmF0dHIoIm9wYWNpdHkiLGZ1bmN0aW9uKGYscCl7cmV0dXJuIG8uc3ltYm9sT3BhY2l0eSgpKGZbMF0uZGF0YS5uYW1lLHMpfSkuY2xhc3NlZCh0LkxFR0VORF9TWU1CT0xfQ0xBU1MsITApLGguYXBwZW5kKCJnIikuY2xhc3NlZCgidGV4dC1jb250YWluZXIiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlsxXSxnPXIucm93c1tzXS5jb2x1bW5zLmluZGV4T2YoZCksXz1yLmdldENvbHVtbkJvdW5kcyhzLGcpO3JldHVybiJ0cmFuc2xhdGUoIitfLnRvcExlZnQueCsiLCAwKSJ9KS5lYWNoKGZ1bmN0aW9uKGYscCxkKXt2YXIgZz16MS5zZWxlY3QodGhpcyksXz1mWzFdLHk9e3hBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AiLHRleHRSb3RhdGlvbjowfTtvLl93cml0ZXIud3JpdGUoby5fZm9ybWF0dGVyKF8uZGF0YS5uYW1lKSxfLndpZHRoLG8uaGVpZ2h0KCkseSxnLm5vZGUoKSl9KSx1LmV4aXQoKS5yZW1vdmUoKX0pLHRoaXN9LHQucHJvdG90eXBlLnN5bWJvbD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zeW1ib2xGYWN0b3J5QWNjZXNzb3I6KHRoaXMuX3N5bWJvbEZhY3RvcnlBY2Nlc3Nvcj1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnN5bWJvbE9wYWNpdHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yOih0eXBlb2Ygcj09Im51bWJlciI/dGhpcy5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yPWZ1bmN0aW9uKCl7cmV0dXJuIHJ9OnRoaXMuX3N5bWJvbE9wYWNpdHlBY2Nlc3Nvcj1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5MRUdFTkRfUk9XX0NMQVNTPSJsZWdlbmQtcm93Iix0LkxFR0VORF9FTlRSWV9DTEFTUz0ibGVnZW5kLWVudHJ5Iix0LkxFR0VORF9TWU1CT0xfQ0xBU1M9ImxlZ2VuZC1zeW1ib2wiLHR9KFpCZS5Db21wb25lbnQpO0dvdC5MZWdlbmQ9UUJlfSk7dmFyIFdvdD1IKCRGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHRIZTsoZnVuY3Rpb24oZSl7ZS5NQUlOPSJtYWluIixlLlJFU0VUPSJyZXNldCJ9KSh0SGU9JEYuQW5pbWF0b3J8fCgkRi5BbmltYXRvcj17fSkpfSk7dmFyIEwkdD1IKChHcW4sSSR0KT0+eyJ1c2Ugc3RyaWN0IjtJJHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiJiZBcnJheS5pc0FycmF5KHQpPT09ITF9fSk7dmFyIE4kdD1IKChXcW4sUiR0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZUhlPUwkdCgpO2Z1bmN0aW9uIGskdChlKXtyZXR1cm4gZUhlKGUpPT09ITAmJk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PSJbb2JqZWN0IE9iamVjdF0ifVIkdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciByLG47cmV0dXJuIShrJHQodCk9PT0hMXx8KHI9dC5jb25zdHJ1Y3Rvcix0eXBlb2YgciE9ImZ1bmN0aW9uIil8fChuPXIucHJvdG90eXBlLGskdChuKT09PSExKXx8bi5oYXNPd25Qcm9wZXJ0eSgiaXNQcm90b3R5cGVPZiIpPT09ITEpfX0pO3ZhciBqb3Q9SChZb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFlvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHJIZT1GZSgpLEQkdD0wLG5IZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0PT09dm9pZCAwJiYodD1bXSkscj09PXZvaWQgMCYmKHI9e30pLHRoaXMuX3VwZGF0ZUlkPUQkdCsrLHRoaXMuX2RhdGE9dCx0aGlzLl9tZXRhZGF0YT1yLHRoaXMuX2NhbGxiYWNrcz1uZXcgckhlLkNhbGxiYWNrU2V0fXJldHVybiBlLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZVcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuZGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9kYXRhOih0aGlzLl9kYXRhPXQsdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzKX0sZS5wcm90b3R5cGUubWV0YWRhdGE9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fbWV0YWRhdGE6KHRoaXMuX21ldGFkYXRhPXQsdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzKX0sZS5wcm90b3R5cGUudXBkYXRlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlSWR9LGUucHJvdG90eXBlLl9kaXNwYXRjaFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUlkPUQkdCsrLHRoaXMuX2NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpfSxlfSgpO1lvdC5EYXRhc2V0PW5IZX0pO3ZhciBLb3Q9SChSYz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUmMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBYb3Q9KGRlKCksVXQocGUpKSxpSGU9TiR0KCksb0hlPWpvdCgpLGFIZT1MMSgpO2Z1bmN0aW9uICRvdChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGY0P2U6ZSBpbnN0YW5jZW9mIERhdGU/aDQoZS52YWx1ZU9mKCkpOmUgaW5zdGFuY2VvZiBhSGUuU2NhbGU/TyR0KGUpOmUgaW5zdGFuY2VvZiBvSGUuRGF0YXNldD96JHQoZSk6aUhlKGUpP0tGKGUpOkFycmF5LmlzQXJyYXkoZSk/RiR0KGUpOmg0KGUpfVJjLnNpZ249JG90O2Z1bmN0aW9uIE8kdChlKXt2YXIgdD17ZG9tYWluOmUuZG9tYWluKCkscmFuZ2U6ZS5yYW5nZSgpLHVwZGF0ZUlkOmUudXBkYXRlSWQoKSxyZWY6aDQoZSl9O3JldHVybiBLRih0KX1SYy5zaWduU2NhbGU9TyR0O2Z1bmN0aW9uIHokdChlKXt2YXIgdD17cmVmOmg0KGUpLHVwZGF0ZUlkOmUudXBkYXRlSWQoKX07cmV0dXJuIEtGKHQpfVJjLnNpZ25EYXRhc2V0PXokdDtmdW5jdGlvbiBoNChlKXtyZXR1cm4gbmV3IEgkdChlKX1SYy5zaWduUmVmPWg0O2Z1bmN0aW9uIEYkdChlKXtyZXR1cm4gbmV3IEIkdChlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gJG90KHQpfSkpfVJjLnNpZ25BcnJheT1GJHQ7ZnVuY3Rpb24gS0YoZSl7dmFyIHQ9e307Zm9yKHZhciByIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYmKHRbcl09JG90KGVbcl0pKTtyZXR1cm4gbmV3IFYkdCh0KX1SYy5zaWduT2JqPUtGO3ZhciBmND1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmlzRGlmZmVyZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj90aGlzLmlzU2lnbmF0dXJlRGlmZmVyZW50KHQpOiEwfSxlfSgpO1JjLlNpZ25hdHVyZT1mNDt2YXIgQiR0PWZ1bmN0aW9uKGUpe1hvdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5hcnJheT1yLG59cmV0dXJuIHQucHJvdG90eXBlLmlzU2lnbmF0dXJlRGlmZmVyZW50PWZ1bmN0aW9uKHIpe2lmKHIuYXJyYXkubGVuZ3RoIT09dGhpcy5hcnJheS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjx0aGlzLmFycmF5Lmxlbmd0aDtuKyspaWYodGhpcy5hcnJheVtuXS5pc0RpZmZlcmVudChyLmFycmF5W25dKSlyZXR1cm4hMDtyZXR1cm4hMX0sdH0oZjQpO1JjLkFycmF5U2lnbmF0dXJlPUIkdDt2YXIgSCR0PWZ1bmN0aW9uKGUpe1hvdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5yZWY9cixufXJldHVybiB0LnByb3RvdHlwZS5pc1NpZ25hdHVyZURpZmZlcmVudD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5yZWYhPT1yLnJlZn0sdH0oZjQpO1JjLlJlZmVyZW5jZVNpZ25hdHVyZT1IJHQ7dmFyIFYkdD1mdW5jdGlvbihlKXtYb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4ub2JqPXIsbn1yZXR1cm4gdC5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24ocil7dmFyIG49T2JqZWN0LmtleXModGhpcy5vYmopLGk9T2JqZWN0LmtleXMoci5vYmopO2lmKG4ubGVuZ3RoIT09aS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBvPTAsYT1uO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO2lmKCFyLm9iai5oYXNPd25Qcm9wZXJ0eShzKXx8dGhpcy5vYmpbc10uaXNEaWZmZXJlbnQoci5vYmpbc10pKXJldHVybiEwfXJldHVybiExfSx0fShmNCk7UmMuT2JqZWN0U2lnbmF0dXJlPVYkdH0pO3ZhciBVJHQ9SChab3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFpvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHNIZT1Lb3QoKTtmdW5jdGlvbiBsSGUoZSl7dmFyIHQ9dm9pZCAwLHIsbj0hMSxpPSExLG89ZnVuY3Rpb24oKXtmb3IodmFyIGE9W10scz0wO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspYVtzXT1hcmd1bWVudHNbc107aWYobilyZXR1cm4gcjt2YXIgbD1zSGUuc2lnbkFycmF5KGEpO3JldHVybiB0PT09dm9pZCAwfHx0LmlzRGlmZmVyZW50KGwpPyhpJiZjb25zb2xlLndhcm4oImNhY2hlIG1pc3MhIGNvbXB1dGluZyIpLHQ9bCxyPWUuYXBwbHkodGhpcyxhKSk6aSYmY29uc29sZS53YXJuKCJjYWNoZSBoaXQhIikscn07cmV0dXJuIG8uZG9Mb2NrZWQ9ZnVuY3Rpb24oYSl7aWYobil0aHJvdyBuZXcgRXJyb3IoIkxvY2tpbmcgYW4gYWxyZWFkeSBsb2NrZWQgbWVtb2l6ZSBmdW5jdGlvbiEiKTtuPSEwO3ZhciBzPWEuYXBwbHkodGhpcyk7cmV0dXJuIG49ITEsc30sby5sb2dQZXJmb3JtYW5jZT1mdW5jdGlvbihhKXtyZXR1cm4gYT09PXZvaWQgMCYmKGE9ITApLGk9YSx0aGlzfSxvfVpvdC5tZW1vaXplPWxIZX0pO3ZhciBXJHQ9SChaRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBjSGU9T2UoKSxKb3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5tYXA9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmV4aXN0cz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIGRlbGV0ZSB0aGlzLm1hcFt0XSxkZWxldGUgdGhpcy5leGlzdHNbdF0sITB9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXBbdF19LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMuZXhpc3RzW3RdfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5tYXBbdF09cix0aGlzLmV4aXN0c1t0XT0hMCx0aGlzfSxlfSgpLHEkdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm1hcD1uZXcgSm90fXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmdldCh0WzBdKS5nZXQodFsxXSl9LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHRbMF0pJiZ0aGlzLm1hcC5nZXQodFswXSkuaGFzKHRbMV0pfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5tYXAuaGFzKHRbMF0pfHx0aGlzLm1hcC5zZXQodFswXSxuZXcgSm90KSx0aGlzLm1hcC5nZXQodFswXSkuc2V0KHRbMV0sciksdGhpc30sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSkmJnRoaXMubWFwLmdldCh0WzBdKS5kZWxldGUodFsxXSksITB9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5tYXA9bmV3IEpvdH0sZS5yZXNvbHZlcj1mdW5jdGlvbih0LHIsbil7cmV0dXJuW24udXBkYXRlSWQoKSxyXX0sZX0oKTtmdW5jdGlvbiBHJHQoZSl7dmFyIHQ9Y0hlLm1lbW9pemUoZSxxJHQucmVzb2x2ZXIpO3JldHVybiB0LmNhY2hlPW5ldyBxJHQsdH1aRi5tZW1vaXplUHJvamVjdG9yPUckdDtmdW5jdGlvbiB1SGUoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1HJHQoZVt0XSl9KSxlfVpGLm1lbW9pemVQcm9qZWN0b3JzPXVIZX0pO3ZhciBZJHQ9SChRb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGhIZT1DUygpO2Z1bmN0aW9uIGZIZSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgcj1lLnNsaWNlKDAsLTEpLG49ZVtlLmxlbmd0aC0xXSxpPWhIZS5tZW1vaXplKG4pLG89ZnVuY3Rpb24oKXt2YXIgYT10aGlzLHM9ci5tYXAoZnVuY3Rpb24obCl7cmV0dXJuIGwuYXBwbHkoYSl9KTtyZXR1cm4gaS5hcHBseSh2b2lkIDAscyl9O3JldHVybiBvfVFvdC5tZW1UaHVuaz1mSGV9KTt2YXIgQ1M9SChBUz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQVMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0YXQ9KGRlKCksVXQocGUpKTt0YXQuX19leHBvcnRTdGFyKFUkdCgpLEFTKTt0YXQuX19leHBvcnRTdGFyKFckdCgpLEFTKTt0YXQuX19leHBvcnRTdGFyKFkkdCgpLEFTKTt2YXIgcEhlPUtvdCgpO0FTLnNpZ249cEhlLnNpZ259KTt2YXIgRjE9SChOYz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTmMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBqJHQ9KEVyKCksVXQoTXIpKSxkSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fY29udGV4dD10LHRoaXMuX2RyYXdTdGVwPXJ9cmV0dXJuIGUucHJvdG90eXBlLmdldERyYXdTdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYXdTdGVwfSxlLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQscil7dmFyIG49cltyLmxlbmd0aC0xXS5hdHRyVG9BcHBsaWVkUHJvamVjdG9yO3RoaXMuX2NvbnRleHQuc2F2ZSgpLHRoaXMuX2RyYXdTdGVwKHRoaXMuX2NvbnRleHQsdCxuKSx0aGlzLl9jb250ZXh0LnJlc3RvcmUoKX0sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybltdfSxlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt9LGV9KCk7TmMuQ2FudmFzRHJhd2VyPWRIZTtOYy5Db250ZXh0U3R5bGVBdHRycz1bImZpbGwtb3BhY2l0eSIsImZpbGwiLCJvcGFjaXR5Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2Utd2lkdGgiLCJzdHJva2UiLCJzdHJva2UtZGFzaGFycmF5Il07ZnVuY3Rpb24gbUhlKGUsdCxyLG4pe3ZhciBpPU5jLkNvbnRleHRTdHlsZUF0dHJzLmNvbmNhdCh0KTtyZXR1cm4gWCR0KGUsaSxyLG4pfU5jLnJlc29sdmVBdHRyaWJ1dGVzU3Vic2V0V2l0aFN0eWxlcz1tSGU7ZnVuY3Rpb24gWCR0KGUsdCxyLG4pe2Zvcih2YXIgaT17fSxvPTAsYT10O288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO2UuaGFzT3duUHJvcGVydHkocykmJihpW3NdPWVbc10ocixuKSl9cmV0dXJuIGl9TmMucmVzb2x2ZUF0dHJpYnV0ZXM9WCR0O2Z1bmN0aW9uIGdIZShlKXt2YXIgdD1lLm9wYWNpdHkhPW51bGw/cGFyc2VGbG9hdChlLm9wYWNpdHkpOjEscj1lWyJzdHJva2Utb3BhY2l0eSJdIT1udWxsP3BhcnNlRmxvYXQoZVsic3Ryb2tlLW9wYWNpdHkiXSk6MTtyZXR1cm4gcip0fWZ1bmN0aW9uIF9IZShlKXt2YXIgdD1lLm9wYWNpdHkhPW51bGw/cGFyc2VGbG9hdChlLm9wYWNpdHkpOjEscj1lWyJmaWxsLW9wYWNpdHkiXSE9bnVsbD9wYXJzZUZsb2F0KGVbImZpbGwtb3BhY2l0eSJdKToxO3JldHVybiByKnR9ZnVuY3Rpb24gJCR0KGUpe3JldHVybiBlWyJzdHJva2Utd2lkdGgiXSE9bnVsbD9wYXJzZUZsb2F0KGVbInN0cm9rZS13aWR0aCJdKToxfU5jLmdldFN0cm9rZVdpZHRoPSQkdDtmdW5jdGlvbiBLJHQoZSl7dmFyIHQ9ZVsic3Ryb2tlLWRhc2hhcnJheSJdO2lmKHQhPW51bGwpdHJ5e3JldHVybiB0LnNwbGl0KC9bICxdKy8pLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gcGFyc2VJbnQociwxMCl9KX1jYXRjaChyKXtyZXR1cm4gY29uc29sZS5lcnJvcigiZ2V0U3Ryb2tlRGFzaEFycmF5IGZhaWxlZCB3aXRoOiAiK3IpLFtdfXJldHVybltdfU5jLmdldFN0cm9rZURhc2hBcnJheT1LJHQ7ZnVuY3Rpb24geUhlKGUsdCxyLG4pe2Uuc2F2ZSgpLGUuYmVnaW5QYXRoKCksdC5jb250ZXh0KGUpLHQociksZS5saW5lSm9pbj0icm91bmQiLGVhdChlLG4pLGUucmVzdG9yZSgpfU5jLnJlbmRlckFyZWE9eUhlO2Z1bmN0aW9uIHZIZShlLHQscixuKXtlLnNhdmUoKSxlLmJlZ2luUGF0aCgpLHQuY29udGV4dChlKSx0KHIpLGUubGluZUpvaW49InJvdW5kIixlYXQoZSxuKSxlLnJlc3RvcmUoKX1OYy5yZW5kZXJMaW5lPXZIZTtmdW5jdGlvbiBlYXQoZSx0KXtpZih0LnN0cm9rZSl7ZS5saW5lV2lkdGg9JCR0KHQpO3ZhciByPWokdC5jb2xvcih0LnN0cm9rZSksbj1LJHQodCk7ZS5zZXRMaW5lRGFzaChuKSxyLm9wYWNpdHkqPWdIZSh0KSxlLnN0cm9rZVN0eWxlPXIudG9TdHJpbmcoKSxlLnN0cm9rZSgpfWlmKHQuZmlsbCl7dmFyIGk9aiR0LmNvbG9yKHQuZmlsbCk7aS5vcGFjaXR5Kj1fSGUodCksZS5maWxsU3R5bGU9aS50b1N0cmluZygpLGUuZmlsbCgpfX1OYy5yZW5kZXJQYXRoV2l0aFN0eWxlPWVhdH0pO3ZhciBVdT1IKHJhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgeEhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3RoaXMuX3N2Z0RyYXdlckZhY3Rvcnk9dCx0aGlzLl9jYW52YXNEcmF3ZXJGYWN0b3J5PXJ9cmV0dXJuIGUucHJvdG90eXBlLnVzZVNWRz1mdW5jdGlvbih0KXt0aGlzLl9jdXJyZW50RHJhd2VyIT1udWxsJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpO3ZhciByPXRoaXMuX3N2Z0RyYXdlckZhY3RvcnkoKTtyLmF0dGFjaFRvKHQpLHRoaXMuX2N1cnJlbnREcmF3ZXI9cn0sZS5wcm90b3R5cGUudXNlQ2FudmFzPWZ1bmN0aW9uKHQpe3RoaXMuX2N1cnJlbnREcmF3ZXIhPW51bGwmJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCksdGhpcy5fY3VycmVudERyYXdlcj10aGlzLl9jYW52YXNEcmF3ZXJGYWN0b3J5KHQubm9kZSgpLmdldENvbnRleHQoIjJkIikpfSxlLnByb3RvdHlwZS5nZXREcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlcn0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudERyYXdlciE9bnVsbCYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKX0sZS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LHIpe3RoaXMuX2N1cnJlbnREcmF3ZXIuZHJhdyh0LHIpfSxlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnREcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlcygpfSxlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXgodCl9LGV9KCk7cmF0LlByb3h5RHJhd2VyPXhIZX0pO3ZhciBEZj1IKG5hdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYkhlPShFcigpLFV0KE1yKSksWiR0PUZlKCksd0hlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3RoaXMuX3Jvb3Q9YkhlLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx0aGlzLl9jbGFzc05hbWU9cix0aGlzLl9zdmdFbGVtZW50TmFtZT10fXJldHVybiBlLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQscil7dmFyIG49dGhpczt0aGlzLl9jcmVhdGVBbmREZXN0cm95RE9NRWxlbWVudHModCk7Zm9yKHZhciBpPTAsbz1yLmxlbmd0aCxhPWZ1bmN0aW9uKGwpe3ZhciBjPXJbbF07WiR0LldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdTdGVwKGMpfSxpKSxpKz1jLmFuaW1hdG9yLnRvdGFsVGltZSh0Lmxlbmd0aCl9LHM9MDtzPG87cysrKWEocyl9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPT1udWxsJiYodGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPXRoaXMuX3NlbGVjdGlvbi5ub2RlcygpKSx0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXN9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwPT1udWxsP251bGw6dGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVNYXAuZ2V0KHQpfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yb290LnJlbW92ZSgpfSxlLnByb3RvdHlwZS5hdHRhY2hUbz1mdW5jdGlvbih0KXt0Lm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9yb290Lm5vZGUoKSl9LGUucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sZS5wcm90b3R5cGUuc2VsZWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3ZnRWxlbWVudE5hbWV9LGUucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe30sZS5wcm90b3R5cGUuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cz1mdW5jdGlvbih0KXt2YXIgcj10Lm1hcChmdW5jdGlvbihhLHMpe3JldHVybiBhIT1udWxsP3tkOmEsaTpzfTpudWxsfSksbj1yLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYSE9bnVsbH0pLGk9dGhpcy5fcm9vdC5zZWxlY3RBbGwodGhpcy5zZWxlY3RvcigpKS5kYXRhKG4pO3RoaXMuX3NlbGVjdGlvbj1pLmVudGVyKCkuYXBwZW5kKHRoaXMuX3N2Z0VsZW1lbnROYW1lKS5tZXJnZShpKSxpLmV4aXQoKS5yZW1vdmUoKTt2YXIgbz1uZXcgWiR0Lk1hcDt0aGlzLl9zZWxlY3Rpb24uZWFjaChmdW5jdGlvbihhKXtvLnNldChhLmksdGhpcyl9KSx0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZU1hcD1vLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlcz1udWxsLHRoaXMuX3NlbGVjdGlvbi5kYXRhKHRoaXMuX3NlbGVjdGlvbi5kYXRhKCkubWFwKGZ1bmN0aW9uKGEpe3ZhciBzPWEuZDtyZXR1cm4gc30pKSx0aGlzLl9jbGFzc05hbWUhPW51bGwmJnRoaXMuX3NlbGVjdGlvbi5jbGFzc2VkKHRoaXMuX2NsYXNzTmFtZSwhMCksdGhpcy5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcyh0aGlzLl9zZWxlY3Rpb24pfSxlLnByb3RvdHlwZS5fZHJhd1N0ZXA9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcyxuPVsiZmlsbCIsInN0cm9rZSJdO24uZm9yRWFjaChmdW5jdGlvbihpKXt0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3JbaV0hPW51bGwmJnIuX3NlbGVjdGlvbi5hdHRyKGksdC5hdHRyVG9BcHBsaWVkUHJvamVjdG9yW2ldKX0pLHQuYW5pbWF0b3IuYW5pbWF0ZSh0aGlzLl9zZWxlY3Rpb24sdC5hdHRyVG9BcHBsaWVkUHJvamVjdG9yKSx0aGlzLl9jbGFzc05hbWUhPW51bGwmJnRoaXMuX3NlbGVjdGlvbi5jbGFzc2VkKHRoaXMuX2NsYXNzTmFtZSwhMCl9LGV9KCk7bmF0LlNWR0RyYXdlcj13SGV9KTt2YXIgb2F0PUgoaWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBKJHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9dGhpczt0aGlzLnNjYWxlPTAsdGhpcy50cmFuc2xhdGU9MCx0aGlzLmNhY2hlZERvbWFpbj1bbnVsbCxudWxsXSx0aGlzLmxhc3RTZWVuRG9tYWluPVtudWxsLG51bGxdLHRoaXMudXBkYXRlRG9tYWluPWZ1bmN0aW9uKHIpe3QubGFzdFNlZW5Eb21haW49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpO3ZhciBuPXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0LmNhY2hlZERvbWFpblsxXSktci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQuY2FjaGVkRG9tYWluWzBdKSxpPXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzFdKS1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5sYXN0U2VlbkRvbWFpblswXSk7dC5zY2FsZT1uL2l8fDEsdC50cmFuc2xhdGU9ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQuY2FjaGVkRG9tYWluWzBdKS1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5sYXN0U2VlbkRvbWFpblswXSkqdC5zY2FsZXx8MH19cmV0dXJuIGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5zY2FsZT0xLHRoaXMudHJhbnNsYXRlPTAsdGhpcy5jYWNoZWREb21haW49dGhpcy5sYXN0U2VlbkRvbWFpbn0sZS5wcm90b3R5cGUuc2V0RG9tYWluPWZ1bmN0aW9uKHQpe3RoaXMuY2FjaGVkRG9tYWluPXQuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKX0sZX0oKSxTSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dmFyIG49dGhpczt0aGlzLnJlbmRlckNhbGxiYWNrPXQsdGhpcy5hcHBseVRyYW5zZm9ybUNhbGxiYWNrPXIsdGhpcy5kb21haW5UcmFuc2Zvcm1YPW5ldyBKJHQsdGhpcy5kb21haW5UcmFuc2Zvcm1ZPW5ldyBKJHQsdGhpcy5yZW5kZXJEZWZlcnJlZD1mdW5jdGlvbigpe24uYXBwbHlUcmFuc2Zvcm0oKSxjbGVhclRpbWVvdXQobi50aW1lb3V0VG9rZW4pLG4udGltZW91dFRva2VuPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLnJlbmRlckNhbGxiYWNrKCl9LGUuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZKX19cmV0dXJuIGUucHJvdG90eXBlLnNldERvbWFpbnM9ZnVuY3Rpb24odCxyKXt0JiZ0aGlzLmRvbWFpblRyYW5zZm9ybVguc2V0RG9tYWluKHQpLHImJnRoaXMuZG9tYWluVHJhbnNmb3JtWS5zZXREb21haW4ociksdGhpcy5yZW5kZXJEZWZlcnJlZCgpfSxlLnByb3RvdHlwZS51cGRhdGVEb21haW5zPWZ1bmN0aW9uKHQscil7dCYmdGhpcy5kb21haW5UcmFuc2Zvcm1YLnVwZGF0ZURvbWFpbih0KSxyJiZ0aGlzLmRvbWFpblRyYW5zZm9ybVkudXBkYXRlRG9tYWluKHIpLHRoaXMucmVuZGVyRGVmZXJyZWQoKX0sZS5wcm90b3R5cGUucmVzZXRUcmFuc2Zvcm1zPWZ1bmN0aW9uKCl7dGhpcy5kb21haW5UcmFuc2Zvcm1YLnJlc2V0KCksdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnJlc2V0KCksdGhpcy5hcHBseVRyYW5zZm9ybSgpfSxlLnByb3RvdHlwZS5hcHBseVRyYW5zZm9ybT1mdW5jdGlvbigpe3RoaXMuYXBwbHlUcmFuc2Zvcm1DYWxsYmFjayh0aGlzLmRvbWFpblRyYW5zZm9ybVgudHJhbnNsYXRlLHRoaXMuZG9tYWluVHJhbnNmb3JtWS50cmFuc2xhdGUsdGhpcy5kb21haW5UcmFuc2Zvcm1YLnNjYWxlLHRoaXMuZG9tYWluVHJhbnNmb3JtWS5zY2FsZSl9LGUuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZPTIwMCxlfSgpO2lhdC5EZWZlcnJlZFJlbmRlcmVyPVNIZX0pO3ZhciBycz1IKEpGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE1IZT0oZGUoKSxVdChwZSkpLHdkPShFcigpLFV0KE1yKSkscDQ9TGYoKSxTZD1GZSgpLFEkdD1Xb3QoKSxhYXQ9Q1MoKSxFSGU9a2MoKSxUSGU9RjEoKSxDSGU9VXUoKSxBSGU9RGYoKSxQSGU9WWcoKSxJSGU9SWYoKSxMSGU9b2F0KCk7SkYuUmVuZGVyZXI9SUhlLm1ha2VFbnVtKFsic3ZnIiwiY2FudmFzIl0pO3ZhciBrSGU9ZnVuY3Rpb24oZSl7TUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fZGF0YUNoYW5nZWQ9ITEsci5fYXR0ckV4dGVudHM9e30sci5fYW5pbWF0ZT0hMSxyLl9hbmltYXRvcnM9e30sci5fcHJvcGVydHlFeHRlbnRzPXt9LHIuX3Jlc2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24oKXtyLl9jYWNoZWRFbnRpdHlTdG9yZT12b2lkIDB9LHIuX292ZXJmbG93SGlkZGVuPSEwLHIuYWRkQ2xhc3MoInBsb3QiKSxyLl9kYXRhc2V0VG9EcmF3ZXI9bmV3IFNkLk1hcCxyLl9hdHRyQmluZGluZ3M9d2QubWFwKCksci5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbihpLG8pe3JldHVybiByLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlKGksbyl9LHIuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHIucmVuZGVyKCl9LHIuX29uRGF0YXNldFVwZGF0ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX29uRGF0YXNldFVwZGF0ZSgpfSxyLl9wcm9wZXJ0eUJpbmRpbmdzPXdkLm1hcCgpO3ZhciBuPW5ldyBwNC5FYXNpbmcoKS5tYXhUb3RhbER1cmF0aW9uKHQuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pO3JldHVybiByLmFuaW1hdG9yKFEkdC5BbmltYXRvci5NQUlOLG4pLHIuYW5pbWF0b3IoUSR0LkFuaW1hdG9yLlJFU0VULG5ldyBwNC5OdWxsKSxyLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmU9U2QuV2luZG93LmRlYm91bmNlKExIZS5EZWZlcnJlZFJlbmRlcmVyLkRFRkVSUkVEX1JFTkRFUklOR19ERUxBWSxyLl9yZXNldEVudGl0eVN0b3JlKSxyfXJldHVybiB0LmdldFRvdGFsRHJhd1RpbWU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gbi5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gaStvLmFuaW1hdG9yLnRvdGFsVGltZShyLmxlbmd0aCl9LDApfSx0LmFwcGx5RHJhd1N0ZXBzPWZ1bmN0aW9uKHIsbil7dmFyIGk9ci5tYXAoZnVuY3Rpb24obyl7dmFyIGE9by5hdHRyVG9Qcm9qZWN0b3Iscz17fTtyZXR1cm4gT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihsKXtzW2xdPWZ1bmN0aW9uKGMsdSl7cmV0dXJuIGFbbF0oYyx1LG4pfX0pLHthdHRyVG9BcHBsaWVkUHJvamVjdG9yOnMsYW5pbWF0b3I6by5hbmltYXRvcn19KTtyZXR1cm4gaX0sdC5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHIpe3JldHVybiByPVBIZS5jb2VyY2VFeHRlcm5hbEQzKHIpLGUucHJvdG90eXBlLmFuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fZGF0YUNoYW5nZWQ9ITAsdGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3RoaXMuX2lzU2V0dXB8fChlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9jYW52YXMhPW51bGwmJnRoaXMuX2FwcGVuZENhbnZhc05vZGUoKSx0aGlzLl9yZW5kZXJBcmVhPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJlbmRlci1hcmVhIiwhMCksdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldChuKX0pKX0sdC5wcm90b3R5cGUuX2FwcGVuZENhbnZhc05vZGU9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmVsZW1lbnQoKS5zZWxlY3QoIi5wbG90LWNhbnZhcy1jb250YWluZXIiKTtyLmVtcHR5KCkmJihyPXRoaXMuZWxlbWVudCgpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGxvdC1jYW52YXMtY29udGFpbmVyIiwhMCksci5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fY2FudmFzLm5vZGUoKSkpfSx0LnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24ocixuLGksbyl7aWYoZS5wcm90b3R5cGUuc2V0Qm91bmRzLmNhbGwodGhpcyxyLG4saSxvKSx0aGlzLl91cGRhdGVFeHRlbnRzKCksdGhpcy5fY2FudmFzIT1udWxsKXtpZih0aGlzLl9idWZmZXJDYW52YXMmJiF0aGlzLl9idWZmZXJDYW52YXNWYWxpZCl7dGhpcy5fYnVmZmVyQ2FudmFzLmF0dHIoIndpZHRoIix0aGlzLl9jYW52YXMuYXR0cigid2lkdGgiKSksdGhpcy5fYnVmZmVyQ2FudmFzLmF0dHIoImhlaWdodCIsdGhpcy5fY2FudmFzLmF0dHIoImhlaWdodCIpKTt2YXIgYT10aGlzLl9idWZmZXJDYW52YXMubm9kZSgpLmdldENvbnRleHQoIjJkIik7aWYoYSl7dmFyIHM9dGhpcy5fY2FudmFzLm5vZGUoKTtzLndpZHRoPjAmJnMuaGVpZ2h0PjA/YS5jYW52YXMud2lkdGg+MCYmYS5jYW52YXMuaGVpZ2h0PjAmJmEuZHJhd0ltYWdlKHMsMCwwKTpjb25zb2xlLndhcm4oIkZhaWxlZCB0byBmaWxsIGJ1ZmZlciBjYW52YXMgd2l0aCB3aXRoIDB4MCBjYW52YXMiKX10aGlzLl9idWZmZXJDYW52YXNWYWxpZD0hMH12YXIgbD13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyE9bnVsbD93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbzoxO3RoaXMuX2NhbnZhcy5hdHRyKCJ3aWR0aCIscipsKSx0aGlzLl9jYW52YXMuYXR0cigiaGVpZ2h0IixuKmwpO3ZhciBjPXRoaXMuX2NhbnZhcy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKTtpZihjJiYoYy5zZXRUcmFuc2Zvcm0obCwwLDAsbCwwLDApLHRoaXMuX2J1ZmZlckNhbnZhcykpe3ZhciB1PXRoaXMuX2J1ZmZlckNhbnZhcy5ub2RlKCk7dS53aWR0aD4wJiZ1LmhlaWdodD4wP2MuY2FudmFzLndpZHRoPjAmJmMuY2FudmFzLmhlaWdodD4wJiZjLmRyYXdJbWFnZSh1LDAsMCxyLG4pOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZpbGwgY2FudmFzIHdpdGggMHgwIGJ1ZmZlciBjYW52YXMiKX19cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBuLm9mZlVwZGF0ZShyLl9yZW5kZXJDYWxsYmFjayl9KSx0aGlzLmRhdGFzZXRzKFtdKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KHIpO3JldHVybiB0aGlzLnJlbmRlcmVyKCk9PT0ic3ZnIj9uLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTpuLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpLG59LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBDSGUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFIZS5TVkdEcmF3ZXIoInBhdGgiLCIiKX0sZnVuY3Rpb24obil7cmV0dXJuIG5ldyBUSGUuQ2FudmFzRHJhd2VyKG4sZnVuY3Rpb24oKXt9KX0pfSx0LnByb3RvdHlwZS5fZ2V0QW5pbWF0b3I9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKT90aGlzLl9hbmltYXRvcnNbcl18fG5ldyBwNC5OdWxsOm5ldyBwNC5OdWxsfSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXMuX2RhdGFDaGFuZ2VkPSEwLHRoaXMuX3Jlc2V0RW50aXR5U3RvcmUoKSx0aGlzLnJlbmRlckxvd1ByaW9yaXR5KCl9LHQucHJvdG90eXBlLmF0dHI9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBuPT1udWxsP3RoaXMuX2F0dHJCaW5kaW5ncy5nZXQocik6KHRoaXMuX2JpbmRBdHRyKHIsbixpKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fYmluZFByb3BlcnR5PWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHIpLHM9YSE9bnVsbD9hLnNjYWxlOm51bGwsbD10eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOmZ1bmN0aW9uKCl7cmV0dXJuIG59O3RoaXMuX3Byb3BlcnR5QmluZGluZ3Muc2V0KHIse2FjY2Vzc29yOmwsc2NhbGU6aSxwb3N0U2NhbGU6b30pLHMhPW51bGwmJnRoaXMuX3VuaW5zdGFsbFNjYWxlRm9yS2V5KHMsciksaSE9bnVsbCYmdGhpcy5faW5zdGFsbFNjYWxlRm9yS2V5KGksciksdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpfSx0LnByb3RvdHlwZS5fYmluZEF0dHI9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMuX2F0dHJCaW5kaW5ncy5nZXQociksYT1vIT1udWxsP28uc2NhbGU6bnVsbCxzPXR5cGVvZiBuPT0iZnVuY3Rpb24iP246ZnVuY3Rpb24oKXtyZXR1cm4gbn07dGhpcy5fYXR0ckJpbmRpbmdzLnNldChyLHthY2Nlc3NvcjpzLHNjYWxlOml9KSxhIT1udWxsJiZ0aGlzLl91bmluc3RhbGxTY2FsZUZvcktleShhLHIpLGkhPW51bGwmJnRoaXMuX2luc3RhbGxTY2FsZUZvcktleShpLHIpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKX0sdC5wcm90b3R5cGUuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGU9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yfSx0LnByb3RvdHlwZS5fZ2V0QXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7aWYodGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yPT1udWxsKXt2YXIgcj10aGlzLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3RvcigpO3QuT1BUSU1JWkVfTUVNT0laRV9QUk9KRUNUT1JTJiYocj1hYXQubWVtb2l6ZVByb2plY3RvcnMocikpLHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcj1yfXJldHVybiBTZC5hc3NpZ24oe30sdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yKX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9e307dGhpcy5fYXR0ckJpbmRpbmdzLmVhY2goZnVuY3Rpb24oaSxvKXtyW29dPXQuX3NjYWxlZEFjY2Vzc29yKGkpfSk7dmFyIG49dGhpcy5fcHJvcGVydHlQcm9qZWN0b3JzKCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24oaSl7cltpXT09bnVsbCYmKHJbaV09bltpXSl9KSxyfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX2lzQW5jaG9yZWQmJih0aGlzLl9wYWludCgpLHRoaXMuX2RhdGFDaGFuZ2VkPSExKSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXJMb3dQcmlvcml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJDYWxsYmFjaygpLHRoaXN9LHQucHJvdG90eXBlLmFuaW1hdGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2FuaW1hdGU6KHRoaXMuX2FuaW1hdGU9cix0aGlzKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzfSx0LnByb3RvdHlwZS5fc2NhbGVzPWZ1bmN0aW9uKCl7dmFyIHI9W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKG4saSl7dmFyIG89bi5zY2FsZTtvIT1udWxsJiZyLmluZGV4T2Yobyk9PT0tMSYmci5wdXNoKG8pfSksdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKG4saSl7dmFyIG89bi5zY2FsZTtvIT1udWxsJiZyLmluZGV4T2Yobyk9PT0tMSYmci5wdXNoKG8pfSkscn0sdC5wcm90b3R5cGUuX3VwZGF0ZUV4dGVudHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3RoaXMuX3Jlc2V0RW50aXR5U3RvcmUoKSx0aGlzLl9zY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBuLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIoci5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9KX0sdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3JldHVybiBudWxsfSx0LnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yQXR0cj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHRoaXMuX2F0dHJFeHRlbnRzW3JdPT1udWxsKXt2YXIgaT1hYXQubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gbi5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiBuLl9hdHRyQmluZGluZ3MuZ2V0KHIpfSxmdW5jdGlvbihvLGEpe3JldHVybiBhPT1udWxsfHxhLmFjY2Vzc29yPT1udWxsP251bGw6by5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIHRLdChzLGEsbnVsbCl9KX0pO3RoaXMuX2F0dHJFeHRlbnRzW3JdPWl9cmV0dXJuIHRoaXMuX2F0dHJFeHRlbnRzW3JdKCl9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHRoaXMuX3Byb3BlcnR5RXh0ZW50c1tyXT09bnVsbCl7dmFyIGk9YWF0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fcHJvcGVydHlCaW5kaW5ncy5nZXQocil9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2ZpbHRlckZvclByb3BlcnR5KHIpfSxmdW5jdGlvbihvLGEscyl7cmV0dXJuIGE9PW51bGx8fGEuYWNjZXNzb3I9PW51bGw/bnVsbDpvLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gdEt0KGwsYSxzKX0pfSk7dGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdPWl9cmV0dXJuIHRoaXMuX3Byb3BlcnR5RXh0ZW50c1tyXSgpfSx0LnByb3RvdHlwZS5faW5jbHVkZWRWYWx1ZXNGb3JTY2FsZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXM7aWYoIXRoaXMuX2lzQW5jaG9yZWQmJiFuKXJldHVybltdO3ZhciBvPVtdO3JldHVybiB0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihhLHMpe2lmKGEuc2NhbGU9PT1yKXt2YXIgbD1pLmdldEV4dGVudHNGb3JBdHRyKHMpO2whPW51bGwmJihvPW8uY29uY2F0KHdkLm1lcmdlKGwpKSl9fSksdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKGEscyl7aWYoYS5zY2FsZT09PXIpe3ZhciBsPWkuZ2V0RXh0ZW50c0ZvclByb3BlcnR5KHMpO2whPW51bGwmJihvPW8uY29uY2F0KHdkLm1lcmdlKGwpKSl9fSksb30sdC5wcm90b3R5cGUuYW5pbWF0b3I9ZnVuY3Rpb24ocixuKXtyZXR1cm4gbj09PXZvaWQgMD90aGlzLl9hbmltYXRvcnNbcl06KHRoaXMuX2FuaW1hdG9yc1tyXT1uLHRoaXMpfSx0LnByb3RvdHlwZS5yZW5kZXJlcj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3JldHVybiByPT09dm9pZCAwP3RoaXMuX2NhbnZhcz09bnVsbD8ic3ZnIjoiY2FudmFzIjoodGhpcy5fY2FudmFzPT1udWxsJiZyPT09ImNhbnZhcyI/KHRoaXMuX2NhbnZhcz13ZC5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLmNsYXNzZWQoInBsb3QtY2FudmFzIiwhMCksdGhpcy5fYnVmZmVyQ2FudmFzPXdkLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSksdGhpcy5lbGVtZW50KCkhPW51bGwmJnRoaXMuX2FwcGVuZENhbnZhc05vZGUoKSx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZm9yRWFjaChmdW5jdGlvbihpKXtpLnVzZUNhbnZhcyhuLl9jYW52YXMpfSksdGhpcy5yZW5kZXIoKSk6dGhpcy5fY2FudmFzIT1udWxsJiZyPT0ic3ZnIiYmKHRoaXMuX2NhbnZhcy5yZW1vdmUoKSx0aGlzLl9jYW52YXM9bnVsbCx0aGlzLl9idWZmZXJDYW52YXM9bnVsbCx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZm9yRWFjaChmdW5jdGlvbihpKXtpLnVzZVNWRyhuLl9yZW5kZXJBcmVhKX0pLHRoaXMucmVuZGVyKCkpLHRoaXMpfSx0LnByb3RvdHlwZS5hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGREYXRhc2V0KHIpLHRoaXMuX29uRGF0YXNldFVwZGF0ZSgpLHRoaXN9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3RoaXMuX3JlbW92ZURhdGFzZXQocik7dmFyIG49dGhpcy5fY3JlYXRlRHJhd2VyKHIpO3JldHVybiB0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuc2V0KHIsbiksdGhpcy5faXNTZXR1cCYmdGhpcy5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0KHIpLHIub25VcGRhdGUodGhpcy5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2spLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZURhdGFzZXQociksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5pbmRleE9mKHIpPT09LTE/dGhpczoodGhpcy5fcmVtb3ZlRGF0YXNldE5vZGVzKHIpLHIub2ZmVXBkYXRlKHRoaXMuX29uRGF0YXNldFVwZGF0ZUNhbGxiYWNrKSx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZGVsZXRlKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQocik7bi5yZW1vdmUoKX0sdC5wcm90b3R5cGUuZGF0YXNldHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPVtdO3JldHVybiB0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZm9yRWFjaChmdW5jdGlvbihvLGEpe3JldHVybiBpLnB1c2goYSl9KSxyPT1udWxsP2k6KGkuZm9yRWFjaChmdW5jdGlvbihvKXtyZXR1cm4gbi5fcmVtb3ZlRGF0YXNldChvKX0pLHIuZm9yRWFjaChmdW5jdGlvbihvKXtyZXR1cm4gbi5fYWRkRGF0YXNldChvKX0pLHRoaXMuX29uRGF0YXNldFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXtyZXR1cm5be2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjpuZXcgcDQuTnVsbH1dfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHIpe30sdC5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPVtdO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyxhKXtmb3IodmFyIHM9bi5fZGF0YXNldFRvRHJhd2VyLmdldChvKSxsPTAsYz1vLmRhdGEoKSx1PWMubGVuZ3RoLGg9ZnVuY3Rpb24ocCl7dmFyIGQ9Y1twXSxnPW4uX3BpeGVsUG9pbnQoZCxwLG8pO2lmKFNkLk1hdGguaXNOYU4oZy54KXx8U2QuTWF0aC5pc05hTihnLnkpKXJldHVybiJjb250aW51ZSI7dmFyIF89bjtpLnB1c2goe2RhdHVtOmQsZ2V0IHBvc2l0aW9uKCl7cmV0dXJuIF8uX3BpeGVsUG9pbnQuY2FsbChfLGQscCxvKX0saW5kZXg6cCxkYXRhc2V0Om8sZGF0YXNldEluZGV4OmEsY29tcG9uZW50Om4sZHJhd2VyOnMsdmFsaWREYXR1bUluZGV4Omx9KSxsKyt9LGY9MDtmPHU7ZisrKWgoZil9KSxpfSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPW5ldyBTZC5NYXA7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLnNldChuLG4uZGF0YSgpKX0pLHJ9LHQucHJvdG90eXBlLl9wYWludD1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZGVsZXRlIHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcjt2YXIgbj10aGlzLl9nZW5lcmF0ZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLG89dGhpcy5kYXRhc2V0cygpLm1hcChmdW5jdGlvbih1KXtyZXR1cm4gci5fZGF0YXNldFRvRHJhd2VyLmdldCh1KX0pO2lmKHRoaXMucmVuZGVyZXIoKT09PSJjYW52YXMiKXt2YXIgYT10aGlzLl9jYW52YXMubm9kZSgpLHM9YS5nZXRDb250ZXh0KCIyZCIpO3MuY2xlYXJSZWN0KDAsMCxhLmNsaWVudFdpZHRoLGEuY2xpZW50SGVpZ2h0KSx0aGlzLl9idWZmZXJDYW52YXNWYWxpZD0hMX10aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbih1LGgpe3ZhciBmPXQuYXBwbHlEcmF3U3RlcHMobix1KTtvW2hdLmRyYXcoaS5nZXQodSksZil9KTt2YXIgbD10aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKHUsaCl7cmV0dXJuIHQuZ2V0VG90YWxEcmF3VGltZShpLmdldCh1KSxuKX0pLGM9U2QuTWF0aC5tYXgobCwwKTt0aGlzLl9hZGRpdGlvbmFsUGFpbnQoYyl9LHQucHJvdG90eXBlLnNlbGVjdGlvbnM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpLHRoaXMucmVuZGVyZXIoKT09PSJjYW52YXMiKXJldHVybiB3ZC5zZWxlY3RBbGwoKTt2YXIgaT1bXTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPW4uX2RhdGFzZXRUb0RyYXdlci5nZXQobyk7aWYoYSE9bnVsbCl7dmFyIHM9YS5nZXRWaXN1YWxQcmltaXRpdmVzKCk7aS5wdXNoLmFwcGx5KGkscyl9fSksd2Quc2VsZWN0QWxsKGkpfSx0LnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3JldHVybiB0aGlzLl9nZXRFbnRpdHlTdG9yZShyKS5lbnRpdGllcygpLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gbi5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KGkpfSl9LHQucHJvdG90eXBlLmZpbHRlckVudGl0aWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXMoKS5maWx0ZXIocikubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoaSl9KX0sdC5wcm90b3R5cGUuX2dldEVudGl0eVN0b3JlPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbihhKXtyZXR1cm4gbi5fZW50aXR5Qm91bmRzKGEpfTtpZihyIT09dm9pZCAwKXt2YXIgbz1uZXcgU2QuRW50aXR5U3RvcmU7cmV0dXJuIG8uYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXMociksaSx0aGlzLl9sb2NhbE9yaWdpbkJvdW5kcygpKSxvfWVsc2UgaWYodGhpcy5fY2FjaGVkRW50aXR5U3RvcmU9PT12b2lkIDApe3ZhciBvPW5ldyBTZC5FbnRpdHlTdG9yZTtvLmFkZEFsbCh0aGlzLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzKHRoaXMuZGF0YXNldHMoKSksaSx0aGlzLl9sb2NhbE9yaWdpbkJvdW5kcygpKSx0aGlzLl9jYWNoZWRFbnRpdHlTdG9yZT1vfXJldHVybiB0aGlzLl9jYWNoZWRFbnRpdHlTdG9yZX0sdC5wcm90b3R5cGUuX2xvY2FsT3JpZ2luQm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6MCx5OjB9LGJvdHRvbVJpZ2h0Ont4OnRoaXMud2lkdGgoKSx5OnRoaXMuaGVpZ2h0KCl9fX0sdC5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbihyKXt2YXIgbj1yLmRhdHVtLGk9ci5pbmRleCxvPXIuZGF0YXNldCxhPXRoaXMuX3BpeGVsUG9pbnQobixpLG8pLHM9YS54LGw9YS55O3JldHVybnt4OnMseTpsLHdpZHRoOjAsaGVpZ2h0OjB9fSx0LnByb3RvdHlwZS5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5PWZ1bmN0aW9uKHIpe3ZhciBuPXtib3VuZHM6dGhpcy5fZW50aXR5Qm91bmRzKHIpLGNvbXBvbmVudDpyLmNvbXBvbmVudCxkYXRhc2V0OnIuZGF0YXNldCxkYXRhc2V0SW5kZXg6ci5kYXRhc2V0SW5kZXgsZGF0dW06ci5kYXR1bSxpbmRleDpyLmluZGV4LHBvc2l0aW9uOnIucG9zaXRpb24sc2VsZWN0aW9uOndkLnNlbGVjdChyLmRyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KHIudmFsaWREYXR1bUluZGV4KSl9O3JldHVybiBufSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigicGxvdHMgbXVzdCBpbXBsZW1lbnQgZW50aXRpZXNBdCIpfSx0LnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXR5TmVhcmVzdChyKTtyZXR1cm4gbj09PXZvaWQgMD92b2lkIDA6dGhpcy5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KG4pfSx0LnByb3RvdHlwZS5lbnRpdGllc0luPWZ1bmN0aW9uKHIsbil7dmFyIGk7aWYobj09bnVsbCl7dmFyIG89cjtpPXt4Om8udG9wTGVmdC54LHk6by50b3BMZWZ0Lnksd2lkdGg6by5ib3R0b21SaWdodC54LW8udG9wTGVmdC54LGhlaWdodDpvLmJvdHRvbVJpZ2h0Lnktby50b3BMZWZ0Lnl9fWVsc2V7dmFyIGE9cjtpPXt4OmEubWluLHk6bi5taW4sd2lkdGg6YS5tYXgtYS5taW4saGVpZ2h0Om4ubWF4LW4ubWlufX1yZXR1cm4gdGhpcy5lbnRpdGllc0luQm91bmRzKGkpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT10aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzSW5Cb3VuZHMocik7aWYoISFpKXJldHVybiBpLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KG8pfSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT10aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzSW5YQm91bmRzKHIpO2lmKCEhaSlyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShvKX0pfSx0LnByb3RvdHlwZS5lbnRpdGllc0luWUJvdW5kcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllc0luWUJvdW5kcyhyKTtpZighIWkpcmV0dXJuIGkubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9KX0sdC5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKHIsbil7ci5vZmZVcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spLHIub2ZmVXBkYXRlKHRoaXMuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZSksci5yZW1vdmVJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXIpfSx0LnByb3RvdHlwZS5faW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKHIsbil7ci5vblVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksci5vblVwZGF0ZSh0aGlzLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmUpLHIuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3JldHVybnt9fSx0Ll9zY2FsZWRBY2Nlc3Nvcj1mdW5jdGlvbihyKXt2YXIgbj1yLnNjYWxlLGk9ci5hY2Nlc3NvcixvPXIucG9zdFNjYWxlLGE9bj09bnVsbD9pOmZ1bmN0aW9uKGwsYyx1KXtyZXR1cm4gbi5zY2FsZShpKGwsYyx1KSl9LHM9bz09bnVsbD9hOmZ1bmN0aW9uKGwsYyx1KXtyZXR1cm4gbyhhKGwsYyx1KSxsLGMsdSl9O3JldHVybiBzfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7cmV0dXJue3g6MCx5OjB9fSx0LnByb3RvdHlwZS5fYW5pbWF0ZU9uTmV4dFJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRlJiZ0aGlzLl9kYXRhQ2hhbmdlZH0sdC5PUFRJTUlaRV9NRU1PSVpFX1BST0pFQ1RPUlM9ITEsdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTj02MDAsdH0oRUhlLkNvbXBvbmVudCk7SkYuUGxvdD1rSGU7ZnVuY3Rpb24gdEt0KGUsdCxyKXt2YXIgbj10LmFjY2Vzc29yLGk9dC5zY2FsZTtpZihpPT1udWxsKXJldHVybltdO3ZhciBvPWUuZGF0YSgpO3IhPW51bGwmJihvPW8uZmlsdGVyKGZ1bmN0aW9uKGwsYyl7cmV0dXJuIHIobCxjLGUpfSkpO3ZhciBhPWZ1bmN0aW9uKGwsYyl7cmV0dXJuIG4obCxjLGUpfSxzPW8ubWFwKGEpO3JldHVybiBpLmV4dGVudE9mVmFsdWVzKHMpfX0pO3ZhciBlS3Q9SChzYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJIZT0oZGUoKSxVdChwZSkpLE5IZT1ycygpLERIZT1GZSgpLE9IZT1Gb3QoKSx6SGU9ZnVuY3Rpb24oZSl7UkhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHIpe3ZhciBuLGk9MS8wO3JldHVybiB0aGlzLmNvbXBvbmVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPW8scz1hLmVudGl0eU5lYXJlc3Qocik7aWYocyE9bnVsbCl7dmFyIGw9REhlLk1hdGguZGlzdGFuY2VTcXVhcmVkKHMucG9zaXRpb24scik7bDw9aSYmKGk9bCxuPXMpfX0pLG59LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihyKXtpZihyIT1udWxsJiYhKHIgaW5zdGFuY2VvZiBOSGUuUGxvdCkpdGhyb3cgbmV3IEVycm9yKCJQbG90IEdyb3VwIG9ubHkgYWNjZXB0cyBwbG90cyIpO3JldHVybiBlLnByb3RvdHlwZS5hcHBlbmQuY2FsbCh0aGlzLHIpLHRoaXN9LHR9KE9IZS5Hcm91cCk7c2F0LlBsb3RHcm91cD16SGV9KTt2YXIgckt0PUgobGF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGSGU9KGRlKCksVXQocGUpKSxxdT0oRXIoKSxVdChNcikpLEdvPUZlKCksQkhlPUdGKCksSEhlPWZ1bmN0aW9uKGUpe0ZIZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPVtdKTt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX3Jvd1BhZGRpbmc9MCxuLl9jb2x1bW5QYWRkaW5nPTAsbi5fcm93cz1bXSxuLl9yb3dXZWlnaHRzPVtdLG4uX2NvbHVtbldlaWdodHM9W10sbi5fblJvd3M9MCxuLl9uQ29scz0wLG4uX2NhbGN1bGF0ZWRMYXlvdXQ9bnVsbCxuLmFkZENsYXNzKCJ0YWJsZSIpLHIuZm9yRWFjaChmdW5jdGlvbihpLG8pe2kuZm9yRWFjaChmdW5jdGlvbihhLHMpe2EhPW51bGwmJm4uYWRkKGEsbyxzKX0pfSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspdGhpcy5fcm93c1tuXVtpXSE9bnVsbCYmcih0aGlzLl9yb3dzW25dW2ldKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0wO248dGhpcy5fblJvd3M7bisrKWZvcih2YXIgaT0wO2k8dGhpcy5fbkNvbHM7aSsrKWlmKHRoaXMuX3Jvd3Nbbl1baV09PT1yKXJldHVybiEwO3JldHVybiExfSx0LnByb3RvdHlwZS5jb21wb25lbnRBdD1mdW5jdGlvbihyLG4pe3JldHVybiByPDB8fHI+PXRoaXMuX25Sb3dzfHxuPDB8fG4+PXRoaXMuX25Db2xzP251bGw6dGhpcy5fcm93c1tyXVtuXX0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHIsbixpKXtpZihyPT1udWxsKXRocm93IEVycm9yKCJDYW5ub3QgYWRkIG51bGwgdG8gYSB0YWJsZSBjZWxsIik7aWYoIXRoaXMuaGFzKHIpKXt2YXIgbz10aGlzLl9yb3dzW25dJiZ0aGlzLl9yb3dzW25dW2ldO2lmKG8hPW51bGwpdGhyb3cgbmV3IEVycm9yKCJjZWxsIGlzIG9jY3VwaWVkIik7ci5kZXRhY2goKSx0aGlzLl9uUm93cz1NYXRoLm1heChuKzEsdGhpcy5fblJvd3MpLHRoaXMuX25Db2xzPU1hdGgubWF4KGkrMSx0aGlzLl9uQ29scyksdGhpcy5fcGFkVGFibGVUb1NpemUodGhpcy5fblJvd3MsdGhpcy5fbkNvbHMpLHRoaXMuX3Jvd3Nbbl1baV09cix0aGlzLl9hZG9wdEFuZEFuY2hvcihyKSx0aGlzLnJlZHJhdygpfXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0wO248dGhpcy5fblJvd3M7bisrKWZvcih2YXIgaT0wO2k8dGhpcy5fbkNvbHM7aSsrKWlmKHRoaXMuX3Jvd3Nbbl1baV09PT1yKXJldHVybiB0aGlzLl9yb3dzW25dW2ldPW51bGwsITA7cmV0dXJuITF9LHQucHJvdG90eXBlLl9pdGVyYXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtpPT09dm9pZCAwJiYoaT0hMSk7Zm9yKHZhciBvPXRoaXMuX3Jvd3MsYT1xdS50cmFuc3Bvc2UodGhpcy5fcm93cykscz1yLXRoaXMuX2NvbHVtblBhZGRpbmcqKHRoaXMuX25Db2xzLTEpLGw9bi10aGlzLl9yb3dQYWRkaW5nKih0aGlzLl9uUm93cy0xKSxjPXQuX2NhbGNDb21wb25lbnRXZWlnaHRzKHRoaXMuX3Jvd1dlaWdodHMsbyxmdW5jdGlvbih6KXtyZXR1cm4gej09bnVsbHx8ei5maXhlZEhlaWdodCgpfSksdT10Ll9jYWxjQ29tcG9uZW50V2VpZ2h0cyh0aGlzLl9jb2x1bW5XZWlnaHRzLGEsZnVuY3Rpb24oeil7cmV0dXJuIHo9PW51bGx8fHouZml4ZWRXaWR0aCgpfSksaD11Lm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej09PTA/LjU6en0pLGY9Yy5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHo9PT0wPy41Onp9KSxwPXQuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShoLHMpLGQ9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGYsbCksZz1Hby5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Db2xzKSxfPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpLHkseCxiPTAsUyxDLFA7Oyl7dmFyIGs9R28uQXJyYXkuYWRkKF8sZCksTz1Hby5BcnJheS5hZGQoZyxwKTtTPXRoaXMuX2RldGVybWluZUd1YXJhbnRlZXMoTyxrLGkpLGc9Uy5ndWFyYW50ZWVkV2lkdGhzLF89Uy5ndWFyYW50ZWVkSGVpZ2h0cyxDPVMud2FudHNXaWR0aEFyci5zb21lKGZ1bmN0aW9uKHope3JldHVybiB6fSksUD1TLndhbnRzSGVpZ2h0QXJyLnNvbWUoZnVuY3Rpb24oeil7cmV0dXJuIHp9KTt2YXIgRD15LEI9eDt5PXMtcXUuc3VtKFMuZ3VhcmFudGVlZFdpZHRocykseD1sLXF1LnN1bShTLmd1YXJhbnRlZWRIZWlnaHRzKTt2YXIgST12b2lkIDA7Qz8oST1TLndhbnRzV2lkdGhBcnIubWFwKGZ1bmN0aW9uKHope3JldHVybiB6Py4xOjB9KSxJPUdvLkFycmF5LmFkZChJLHUpKTpJPXU7dmFyIEw9dm9pZCAwO1A/KEw9Uy53YW50c0hlaWdodEFyci5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHo/LjE6MH0pLEw9R28uQXJyYXkuYWRkKEwsYykpOkw9YyxwPXQuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShJLHkpLGQ9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKEwseCksYisrO3ZhciBSPXk+MCYmeSE9PUQsRj14PjAmJnghPT1CO2lmKCEoUnx8Ril8fGI+NSlicmVha31yZXR1cm4geT1zLXF1LnN1bShTLmd1YXJhbnRlZWRXaWR0aHMpLHg9bC1xdS5zdW0oUy5ndWFyYW50ZWVkSGVpZ2h0cykscD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UodSx5KSxkPXQuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShjLHgpLHtjb2xQcm9wb3J0aW9uYWxTcGFjZTpwLHJvd1Byb3BvcnRpb25hbFNwYWNlOmQsZ3VhcmFudGVlZFdpZHRoczpTLmd1YXJhbnRlZWRXaWR0aHMsZ3VhcmFudGVlZEhlaWdodHM6Uy5ndWFyYW50ZWVkSGVpZ2h0cyx3YW50c1dpZHRoOkMsd2FudHNIZWlnaHQ6UH19LHQucHJvdG90eXBlLl9kZXRlcm1pbmVHdWFyYW50ZWVzPWZ1bmN0aW9uKHIsbixpKXtpPT09dm9pZCAwJiYoaT0hMSk7dmFyIG89R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uQ29scyksYT1Hby5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Sb3dzKSxzPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KCExLHRoaXMuX25Db2xzKSxsPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KCExLHRoaXMuX25Sb3dzKTtyZXR1cm4gdGhpcy5fcm93cy5mb3JFYWNoKGZ1bmN0aW9uKGMsdSl7Yy5mb3JFYWNoKGZ1bmN0aW9uKGgsZil7dmFyIHA7aCE9bnVsbD9wPWgucmVxdWVzdGVkU3BhY2UocltmXSxuW3VdKTpwPXttaW5XaWR0aDowLG1pbkhlaWdodDowfTt2YXIgZD1pP01hdGgubWluKHAubWluV2lkdGgscltmXSk6cC5taW5XaWR0aDtvW2ZdPU1hdGgubWF4KG9bZl0sZCk7dmFyIGc9aT9NYXRoLm1pbihwLm1pbkhlaWdodCxuW3VdKTpwLm1pbkhlaWdodDthW3VdPU1hdGgubWF4KGFbdV0sZyk7dmFyIF89cC5taW5XaWR0aD5yW2ZdO3NbZl09c1tmXXx8Xzt2YXIgeT1wLm1pbkhlaWdodD5uW3VdO2xbdV09bFt1XXx8eX0pfSkse2d1YXJhbnRlZWRXaWR0aHM6byxndWFyYW50ZWVkSGVpZ2h0czphLHdhbnRzV2lkdGhBcnI6cyx3YW50c0hlaWdodEFycjpsfX0sdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlZExheW91dD10aGlzLl9pdGVyYXRlTGF5b3V0KHIsbikse21pbldpZHRoOnF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRXaWR0aHMpLG1pbkhlaWdodDpxdS5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkSGVpZ2h0cyl9fSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzO2UucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKTt2YXIgYT1xdS5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkV2lkdGhzKSxzPXF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKSxsPXRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQ7KGE+dGhpcy53aWR0aCgpfHxzPnRoaXMuaGVpZ2h0KCkpJiYobD10aGlzLl9pdGVyYXRlTGF5b3V0KHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpLCEwKSk7dmFyIGM9MCx1PUdvLkFycmF5LmFkZChsLnJvd1Byb3BvcnRpb25hbFNwYWNlLGwuZ3VhcmFudGVlZEhlaWdodHMpLGg9R28uQXJyYXkuYWRkKGwuY29sUHJvcG9ydGlvbmFsU3BhY2UsbC5ndWFyYW50ZWVkV2lkdGhzKTtyZXR1cm4gdGhpcy5fcm93cy5mb3JFYWNoKGZ1bmN0aW9uKGYscCl7dmFyIGQ9MDtmLmZvckVhY2goZnVuY3Rpb24oZyxfKXtnIT1udWxsJiZnLmNvbXB1dGVMYXlvdXQoe3g6ZCx5OmN9LGhbX10sdVtwXSksZCs9aFtfXStvLl9jb2x1bW5QYWRkaW5nfSksYys9dVtwXStvLl9yb3dQYWRkaW5nfSksdGhpc30sdC5wcm90b3R5cGUucm93UGFkZGluZz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9yb3dQYWRkaW5nO2lmKCFHby5NYXRoLmlzVmFsaWROdW1iZXIocil8fHI8MCl0aHJvdyBFcnJvcigicm93UGFkZGluZyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3JldHVybiB0aGlzLl9yb3dQYWRkaW5nPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5jb2x1bW5QYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2NvbHVtblBhZGRpbmc7aWYoIUdvLk1hdGguaXNWYWxpZE51bWJlcihyKXx8cjwwKXRocm93IEVycm9yKCJjb2x1bW5QYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX2NvbHVtblBhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnJvd1dlaWdodD1mdW5jdGlvbihyLG4pe2lmKG49PW51bGwpcmV0dXJuIHRoaXMuX3Jvd1dlaWdodHNbcl07aWYoIUdvLk1hdGguaXNWYWxpZE51bWJlcihuKXx8bjwwKXRocm93IEVycm9yKCJyb3dXZWlnaHQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTtyZXR1cm4gdGhpcy5fcm93V2VpZ2h0c1tyXT1uLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuY29sdW1uV2VpZ2h0PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fY29sdW1uV2VpZ2h0c1tyXTtpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKG4pfHxuPDApdGhyb3cgRXJyb3IoImNvbHVtbldlaWdodCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3JldHVybiB0aGlzLl9jb2x1bW5XZWlnaHRzW3JdPW4sdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHI9cXUudHJhbnNwb3NlKHRoaXMuX3Jvd3MpO3JldHVybiB0Ll9maXhlZFNwYWNlKHIsZnVuY3Rpb24obil7cmV0dXJuIG49PW51bGx8fG4uZml4ZWRXaWR0aCgpfSl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuX2ZpeGVkU3BhY2UodGhpcy5fcm93cyxmdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbHx8ci5maXhlZEhlaWdodCgpfSl9LHQucHJvdG90eXBlLl9wYWRUYWJsZVRvU2l6ZT1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0wO2k8cjtpKyspe3RoaXMuX3Jvd3NbaV09PT12b2lkIDAmJih0aGlzLl9yb3dzW2ldPVtdLHRoaXMuX3Jvd1dlaWdodHNbaV09bnVsbCk7Zm9yKHZhciBvPTA7bzxuO28rKyl0aGlzLl9yb3dzW2ldW29dPT09dm9pZCAwJiYodGhpcy5fcm93c1tpXVtvXT1udWxsKX1mb3IodmFyIG89MDtvPG47bysrKXRoaXMuX2NvbHVtbldlaWdodHNbb109PT12b2lkIDAmJih0aGlzLl9jb2x1bW5XZWlnaHRzW29dPW51bGwpfSx0Ll9jYWxjQ29tcG9uZW50V2VpZ2h0cz1mdW5jdGlvbihyLG4saSl7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKG8sYSl7aWYobyE9bnVsbClyZXR1cm4gbzt2YXIgcz1uW2FdLm1hcChpKSxsPXMucmVkdWNlKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIGMmJnV9LCEwKTtyZXR1cm4gbD8wOjF9KX0sdC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9cXUuc3VtKHIpO3JldHVybiBpPT09MD9Hby5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHIubGVuZ3RoKTpyLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbipvL2l9KX0sdC5fZml4ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlZHVjZShmdW5jdGlvbihzLGwpe3JldHVybiBzJiZsfSwhMCl9LG89ZnVuY3Rpb24oYSl7cmV0dXJuIGkoYS5tYXAobikpfTtyZXR1cm4gaShyLm1hcChvKSl9LHR9KEJIZS5Db21wb25lbnRDb250YWluZXIpO2xhdC5UYWJsZT1ISGV9KTt2YXIgbkt0PUgoY2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBWSGU9KGRlKCksVXQocGUpKSxVSGU9VW90KCkscUhlPTIsR0hlPWZ1bmN0aW9uKGUpe1ZIZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9tYXhMaW5lcz1xSGUscn1yZXR1cm4gdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocixuKXt0aGlzLl93cmFwcGVyLm1heExpbmVzKHRoaXMuX21heExpbmVzKTt2YXIgaT10aGlzLmFuZ2xlKCk9PT0wP3I6bjtpPT09MCYmKGk9MS8wKTt2YXIgbz10aGlzLl93cmFwcGVyLndyYXAodGhpcy5fdGV4dCx0aGlzLl9tZWFzdXJlcixpKSxhPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoby53cmFwcGVkVGV4dCkscz0odGhpcy5hbmdsZSgpPT09MD9hLndpZHRoOmEuaGVpZ2h0KSsyKnRoaXMucGFkZGluZygpLGw9KHRoaXMuYW5nbGUoKT09PTA/YS5oZWlnaHQ6YS53aWR0aCkrMip0aGlzLnBhZGRpbmcoKTtyZXR1cm57bWluV2lkdGg6cyxtaW5IZWlnaHQ6bH19LHQucHJvdG90eXBlLm1heExpbmVzPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl9tYXhMaW5lczoodGhpcy5fbWF4TGluZXM9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0fShVSGUuTGFiZWwpO2NhdC5XcmFwcGVkTGFiZWw9R0hlfSk7dmFyIGlLdD1IKHVhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgV0hlPShkZSgpLFV0KHBlKSksWUhlPVVGKCksakhlPWZ1bmN0aW9uKGUpe1dIZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJ4LWRyYWctYm94LWxheWVyIiksci5faGFzQ29ybmVycz0hMSxyfXJldHVybiB0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3NldEJvdW5kcyh0aGlzLmJvdW5kcygpKSx0aGlzfSx0LnByb3RvdHlwZS5fc2V0Qm91bmRzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9zZXRCb3VuZHMuY2FsbCh0aGlzLHt0b3BMZWZ0Ont4OnIudG9wTGVmdC54LHk6MH0sYm90dG9tUmlnaHQ6e3g6ci5ib3R0b21SaWdodC54LHk6dGhpcy5oZWlnaHQoKX19KX0sdC5wcm90b3R5cGUuX3NldFJlc2l6YWJsZUNsYXNzZXM9ZnVuY3Rpb24ocil7ciYmdGhpcy5lbmFibGVkKCk/dGhpcy5hZGRDbGFzcygieC1yZXNpemFibGUiKTp0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpfSx0LnByb3RvdHlwZS55U2NhbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueVNjYWxlLmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJ5U2NhbGVzIGNhbm5vdCBiZSBzZXQgb24gYW4gWERyYWdCb3hMYXllciIpfSx0LnByb3RvdHlwZS55RXh0ZW50PWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnlFeHRlbnQuY2FsbCh0aGlzKTt0aHJvdyBuZXcgRXJyb3IoIlhEcmFnQm94TGF5ZXIgaGFzIG5vIHlFeHRlbnQiKX0sdH0oWUhlLkRyYWdCb3hMYXllcik7dWF0LlhEcmFnQm94TGF5ZXI9akhlfSk7dmFyIG9LdD1IKGhhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWEhlPShkZSgpLFV0KHBlKSksJEhlPVVGKCksS0hlPWZ1bmN0aW9uKGUpe1hIZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJ5LWRyYWctYm94LWxheWVyIiksci5faGFzQ29ybmVycz0hMSxyfXJldHVybiB0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3NldEJvdW5kcyh0aGlzLmJvdW5kcygpKSx0aGlzfSx0LnByb3RvdHlwZS5fc2V0Qm91bmRzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9zZXRCb3VuZHMuY2FsbCh0aGlzLHt0b3BMZWZ0Ont4OjAseTpyLnRvcExlZnQueX0sYm90dG9tUmlnaHQ6e3g6dGhpcy53aWR0aCgpLHk6ci5ib3R0b21SaWdodC55fX0pfSx0LnByb3RvdHlwZS5fc2V0UmVzaXphYmxlQ2xhc3Nlcz1mdW5jdGlvbihyKXtyJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJ5LXJlc2l6YWJsZSIpOnRoaXMucmVtb3ZlQ2xhc3MoInktcmVzaXphYmxlIil9LHQucHJvdG90eXBlLnhTY2FsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS54U2NhbGUuY2FsbCh0aGlzKTt0aHJvdyBuZXcgRXJyb3IoInhTY2FsZXMgY2Fubm90IGJlIHNldCBvbiBhbiBZRHJhZ0JveExheWVyIil9LHQucHJvdG90eXBlLnhFeHRlbnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueEV4dGVudC5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigiWURyYWdCb3hMYXllciBoYXMgbm8geEV4dGVudCIpfSx0fSgkSGUuRHJhZ0JveExheWVyKTtoYXQuWURyYWdCb3hMYXllcj1LSGV9KTt2YXIgSW90PUgoX2E9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9hLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTnM9KGRlKCksVXQocGUpKTtOcy5fX2V4cG9ydFN0YXIoVUYoKSxfYSk7TnMuX19leHBvcnRTdGFyKEUkdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoVCR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihGb3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKGtvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoQSR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihVb3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKFAkdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoZUt0KCksX2EpO05zLl9fZXhwb3J0U3RhcihDb3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKHJLdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIobkt0KCksX2EpO05zLl9fZXhwb3J0U3RhcihpS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKG9LdCgpLF9hKX0pO3ZhciBwYXQ9SChmYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGZhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFpIZT0oZGUoKSxVdChwZSkpLEpIZT1EZigpLFFIZT1mdW5jdGlvbihlKXtaSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyYyBmaWxsIil8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHIpe3Iuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0sdH0oSkhlLlNWR0RyYXdlcik7ZmF0LkFyY1NWR0RyYXdlcj1RSGV9KTt2YXIgbWF0PUgoZGF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0VmU9KGRlKCksVXQocGUpKSxlVmU9RGYoKSxyVmU9ZnVuY3Rpb24oZSl7dFZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZS5jYWxsKHRoaXMsInBhdGgiLCJhcmMgb3V0bGluZSIpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz1mdW5jdGlvbihyKXtyLnN0eWxlKCJmaWxsIiwibm9uZSIpfSx0fShlVmUuU1ZHRHJhd2VyKTtkYXQuQXJjT3V0bGluZVNWR0RyYXdlcj1yVmV9KTt2YXIgZ2F0PUgodEI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgblZlPShkZSgpLFV0KHBlKSksUUY9RjEoKSxpVmU9RGYoKSxvVmU9ZnVuY3Rpb24oZSl7blZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZS5jYWxsKHRoaXMsInBhdGgiLCJhcmVhIil8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHIpe3Iuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0sdC5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleC5jYWxsKHRoaXMsMCl9LHR9KGlWZS5TVkdEcmF3ZXIpO3RCLkFyZWFTVkdEcmF3ZXI9b1ZlO3ZhciBhVmU9WyJvcGFjaXR5IiwiZmlsbCIsImZpbGwtb3BhY2l0eSJdLHNWZT1bIm9wYWNpdHkiLCJzdHJva2UiLCJzdHJva2Utd2lkdGgiXTtmdW5jdGlvbiBsVmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3ZhciBvPVFGLnJlc29sdmVBdHRyaWJ1dGVzKGksYVZlLG5bMF0sMCk7UUYucmVuZGVyQXJlYShyLGUoKSxuWzBdLG8pO3ZhciBhPVFGLnJlc29sdmVBdHRyaWJ1dGVzKGksc1ZlLG5bMF0sMCk7UUYucmVuZGVyTGluZShyLHQoKSxuWzBdLGEpfX10Qi5tYWtlQXJlYUNhbnZhc0RyYXdTdGVwPWxWZX0pO3ZhciByQj1IKGVCPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGNWZT0oZGUoKSxVdChwZSkpLGFLdD1GMSgpLHVWZT1EZigpLGhWZT1mdW5jdGlvbihlKXtjVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImxpbmUiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgiZmlsbCIsIm5vbmUiKX0sdC5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleC5jYWxsKHRoaXMsMCl9LHR9KHVWZS5TVkdEcmF3ZXIpO2VCLkxpbmVTVkdEcmF3ZXI9aFZlO3ZhciBmVmU9WyJvcGFjaXR5Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2Utd2lkdGgiLCJzdHJva2UiLCJzdHJva2UtZGFzaGFycmF5Il07ZnVuY3Rpb24gcFZlKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7dmFyIGk9YUt0LnJlc29sdmVBdHRyaWJ1dGVzKG4sZlZlLHJbMF0sMCk7YUt0LnJlbmRlckxpbmUodCxlKCksclswXSxpKX19ZUIubWFrZUxpbmVDYW52YXNEcmF3U3RlcD1wVmV9KTt2YXIgaUI9SChQUz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzS3Q9KGRlKCksVXQocGUpKSxuQj1GMSgpLGRWZT1EZigpLG1WZT1mdW5jdGlvbihlKXtzS3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXtyPT09dm9pZCAwJiYocj0iIik7dmFyIG49ZS5jYWxsKHRoaXMsInJlY3QiLCIiKXx8dGhpcztyZXR1cm4gbi5fcm9vdENsYXNzTmFtZT1yLG4uX3Jvb3QuY2xhc3NlZChuLl9yb290Q2xhc3NOYW1lLCEwKSxufXJldHVybiB0fShkVmUuU1ZHRHJhd2VyKTtQUy5SZWN0YW5nbGVTVkdEcmF3ZXI9bVZlO3ZhciBnVmU9bkIuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KFsieCIsInkiLCJ3aWR0aCIsImhlaWdodCJdKTtQUy5SZWN0YW5nbGVDYW52YXNEcmF3U3RlcD1mdW5jdGlvbihlLHQscil7ZS5zYXZlKCk7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MDtpPG47aSsrKXt2YXIgbz10W2ldO2lmKG8hPW51bGwpe3ZhciBhPW5CLnJlc29sdmVBdHRyaWJ1dGVzKHIsZ1ZlLG8saSk7ZS5iZWdpblBhdGgoKSxlLnJlY3QoYS54LGEueSxhLndpZHRoLGEuaGVpZ2h0KSxuQi5yZW5kZXJQYXRoV2l0aFN0eWxlKGUsYSl9fWUucmVzdG9yZSgpfTt2YXIgX1ZlPWZ1bmN0aW9uKGUpe3NLdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3JldHVybiBlLmNhbGwodGhpcyxyLFBTLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwKXx8dGhpc31yZXR1cm4gdH0obkIuQ2FudmFzRHJhd2VyKTtQUy5SZWN0YW5nbGVDYW52YXNEcmF3ZXI9X1ZlfSk7dmFyIHlhdD1IKF9hdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgeVZlPShkZSgpLFV0KHBlKSksdlZlPURmKCkseFZlPWZ1bmN0aW9uKGUpe3lWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJsaW5lIiwiIil8fHRoaXN9cmV0dXJuIHR9KHZWZS5TVkdEcmF3ZXIpO19hdC5TZWdtZW50U1ZHRHJhd2VyPXhWZX0pO3ZhciBsS3Q9SCh2YXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHZhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGJWZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe249PT12b2lkIDAmJihuPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLnNjcmVlbldpZHRoPXQsdGhpcy5zY3JlZW5IZWlnaHQ9cix0aGlzLmRldmljZVBpeGVsUmF0aW89bix0aGlzLnBpeGVsV2lkdGg9dCpuLHRoaXMucGl4ZWxIZWlnaHQ9cipuLHRoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIiksZS5zaXplUGl4ZWxzKHRoaXMuY3R4LHQscixuKX1yZXR1cm4gZS5zaXplUGl4ZWxzPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBvPXQuY2FudmFzO28ud2lkdGg9cippLG8uaGVpZ2h0PW4qaSxvLnN0eWxlLndpZHRoPXIrInB4IixvLnN0eWxlLmhlaWdodD1uKyJweCIsdC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHQuc2NhbGUoaSxpKX0sZS5wcm90b3R5cGUuYmxpdD1mdW5jdGlvbih0LHIsbil7cj09PXZvaWQgMCYmKHI9MCksbj09PXZvaWQgMCYmKG49MCksdC5kcmF3SW1hZ2UodGhpcy5jYW52YXMscixuLHRoaXMuc2NyZWVuV2lkdGgsdGhpcy5zY3JlZW5IZWlnaHQpfSxlLnByb3RvdHlwZS5ibGl0Q2VudGVyPWZ1bmN0aW9uKHQscixuKXtyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0wKSx0aGlzLmJsaXQodCxNYXRoLmZsb29yKHItdGhpcy5zY3JlZW5XaWR0aC8yKSxNYXRoLmZsb29yKG4tdGhpcy5zY3JlZW5IZWlnaHQvMikpfSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzLmRldmljZVBpeGVsUmF0aW87cmV0dXJuIHRoaXMuc2NyZWVuV2lkdGg9dCx0aGlzLnNjcmVlbkhlaWdodD1yLHRoaXMucGl4ZWxXaWR0aD10KmksdGhpcy5waXhlbEhlaWdodD1yKmksZS5zaXplUGl4ZWxzKHRoaXMuY3R4LHQscixpKSxuJiZ0aGlzLmN0eC50cmFuc2xhdGUodC8yLHQvMiksdGhpc30sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcyxuPXIucGl4ZWxXaWR0aCxpPXIucGl4ZWxIZWlnaHQsbz1yLmN0eDtyZXR1cm4gby5zYXZlKCksby5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHQ9PW51bGw/by5jbGVhclJlY3QoMCwwLG4saSk6KG8uZmlsbFN0eWxlPXQsby5maWxsUmVjdCgwLDAsbixpKSksby5yZXN0b3JlKCksdGhpc30sZS5wcm90b3R5cGUuZ2V0SW1hZ2VEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LmdldEltYWdlRGF0YSgwLDAsdGhpcy5waXhlbFdpZHRoLHRoaXMucGl4ZWxIZWlnaHQpfSxlfSgpO3ZhdC5DYW52YXNCdWZmZXI9YlZlfSk7dmFyIHhhdD1IKG9CPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHdWZT0oZGUoKSxVdChwZSkpLGQ0PUYxKCksU1ZlPWxLdCgpLE1WZT1EZigpLEVWZT1mdW5jdGlvbihlKXt3VmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsInN5bWJvbCIpfHx0aGlzfXJldHVybiB0fShNVmUuU1ZHRHJhd2VyKTtvQi5TeW1ib2xTVkdEcmF3ZXI9RVZlO3ZhciBUVmU9ZDQuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KFsieCIsInkiXSk7ZnVuY3Rpb24gQ1ZlKGUsdCxyLG4pe3ZhciBpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG8sYSxzKXtmb3IodmFyIGw9by5jYW52YXMsYz1sLmNsaWVudFdpZHRoLHU9bC5jbGllbnRIZWlnaHQsaD1uPT09dm9pZCAwP25ldyBTVmUuQ2FudmFzQnVmZmVyKDAsMCk6bixmPXQoKSxwPXIoKSxkPW51bGwsZz1udWxsLF89bnVsbCx5PTA7eTxhLmxlbmd0aDt5Kyspe3ZhciB4PWFbeV07aWYoeCE9bnVsbCl7dmFyIGI9ZDQucmVzb2x2ZUF0dHJpYnV0ZXMocyxUVmUseCx5KSxTPXAoeCx5LGUpO2lmKCEhQVZlKGMsdSxiLngsYi55LFMpKXt2YXIgQz1QVmUoZCxiLGQ0LkNvbnRleHRTdHlsZUF0dHJzKSxQPWYoeCx5LGkuX2RhdGFzZXQpO2lmKCEoQyYmXz09UyYmZz09UCkpe3ZhciBrPWQ0LmdldFN0cm9rZVdpZHRoKGIpLE89UytrKzE7KE8+aC5zY3JlZW5XaWR0aHx8Tz5oLnNjcmVlbkhlaWdodCkmJmgucmVzaXplKE8sTywhMCksaC5jbGVhcigpO3ZhciBEPWguY3R4O0QuYmVnaW5QYXRoKCksUChTKS5jb250ZXh0KEQpKG51bGwpLEQuY2xvc2VQYXRoKCksZDQucmVuZGVyUGF0aFdpdGhTdHlsZShELGIpLGc9UCxfPVMsZD1ifWguYmxpdENlbnRlcihvLGIueCxiLnkpfX19fX1vQi5tYWtlU3ltYm9sQ2FudmFzRHJhd1N0ZXA9Q1ZlO2Z1bmN0aW9uIEFWZShlLHQscixuLGkpe3JldHVybiByK2k+PTAmJnItaTw9ZSYmbitpPj0wJiZuLWk8PXR9ZnVuY3Rpb24gUFZlKGUsdCxyKXtpZihlPT1udWxsKXJldHVybiExO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKGVbaV0hPXRbaV0pcmV0dXJuITF9cmV0dXJuITB9fSk7dmFyIEIxPUgoRGM9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KERjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgT2Y9KGRlKCksVXQocGUpKTtPZi5fX2V4cG9ydFN0YXIocGF0KCksRGMpO09mLl9fZXhwb3J0U3RhcihtYXQoKSxEYyk7T2YuX19leHBvcnRTdGFyKGdhdCgpLERjKTtPZi5fX2V4cG9ydFN0YXIoRjEoKSxEYyk7T2YuX19leHBvcnRTdGFyKFV1KCksRGMpO09mLl9fZXhwb3J0U3RhcihyQigpLERjKTtPZi5fX2V4cG9ydFN0YXIoaUIoKSxEYyk7T2YuX19leHBvcnRTdGFyKHlhdCgpLERjKTtPZi5fX2V4cG9ydFN0YXIoRGYoKSxEYyk7T2YuX19leHBvcnRTdGFyKHhhdCgpLERjKX0pO3ZhciBIMT1IKHdhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkod2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSVZlPShkZSgpLFV0KHBlKSksY0t0PWtzKCksYmF0PUZlKCksTFZlPW9hdCgpLG00PXJzKCksa1ZlPWZ1bmN0aW9uKGUpe0lWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExLHIuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITEsci5fZGVmZXJyZWRSZW5kZXJpbmc9ITEsci5fYXBwbHlEZWZlcnJlZFJlbmRlcmluZ1RyYW5zZm9ybT1mdW5jdGlvbihuLGksbyxhKXshci5faXNBbmNob3JlZHx8KHIuX3JlbmRlckFyZWEhPW51bGwmJnIuX3JlbmRlckFyZWEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbisiLCAiK2krIikgc2NhbGUoIitvKyIsICIrYSsiKSIpLHIuX2NhbnZhcyE9bnVsbCYmci5fY2FudmFzLnN0eWxlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituKyJweCwgIitpKyJweCkgc2NhbGUoIitvKyIsICIrYSsiKSIpKX0sci5hZGRDbGFzcygieHktcGxvdCIpLHIuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s9ZnVuY3Rpb24obil7cmV0dXJuIHIuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YKCl9LHIuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2s9ZnVuY3Rpb24obil7cmV0dXJuIHIuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZKCl9LHIuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKCl7aWYoci5kZWZlcnJlZFJlbmRlcmluZygpKXt2YXIgbj1yLngoKSYmci54KCkuc2NhbGUsaT1yLnkoKSYmci55KCkuc2NhbGU7ci5fZGVmZXJyZWRSZW5kZXJlci51cGRhdGVEb21haW5zKG4saSl9ZWxzZSByLnJlbmRlcigpfSxyLl9kZWZlcnJlZFJlbmRlcmVyPW5ldyBMVmUuRGVmZXJyZWRSZW5kZXJlcihmdW5jdGlvbigpe3JldHVybiByLnJlbmRlcigpfSxyLl9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtKSxyfXJldHVybiB0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZlcnJlZFJlbmRlcmluZygpJiZ0aGlzLl9kZWZlcnJlZFJlbmRlcmVyLnJlc2V0VHJhbnNmb3JtcygpLGUucHJvdG90eXBlLnJlbmRlci5jYWxsKHRoaXMpfSx0LnByb3RvdHlwZS5kZWZlcnJlZFJlbmRlcmluZz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9kZWZlcnJlZFJlbmRlcmluZztpZihyKXt2YXIgbj10aGlzLngoKSYmdGhpcy54KCkuc2NhbGUsaT10aGlzLnkoKSYmdGhpcy55KCkuc2NhbGU7dGhpcy5fZGVmZXJyZWRSZW5kZXJlci5zZXREb21haW5zKG4saSl9cmV0dXJuIHRoaXMuX2RlZmVycmVkUmVuZGVyaW5nPXIsdGhpc30sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWF9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YX0tFWSxyLG4saSk7dmFyIG89dGhpcy53aWR0aCgpO3JldHVybiBuIT1udWxsJiZvIT1udWxsJiZuLnJhbmdlKFswLG9dKSx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1lfS0VZKTt0aGlzLl9iaW5kUHJvcGVydHkodC5fWV9LRVkscixuLGkpO3ZhciBvPXRoaXMuaGVpZ2h0KCk7cmV0dXJuIG4hPW51bGwmJm8hPW51bGwmJihuIGluc3RhbmNlb2YgY0t0LkNhdGVnb3J5P24ucmFuZ2UoWzAsb10pOm4ucmFuZ2UoW28sMF0pKSx0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVYRXh0ZW50c0FuZEF1dG9kb21haW4oKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PSJ4IiYmdGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj90aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieSIpOihyPT09InkifHxyPT09InkwIikmJnRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW4/dGhpcy5fbWFrZUZpbHRlckJ5UHJvcGVydHkoIngiKTpudWxsfSx0LnByb3RvdHlwZS5fbWFrZUZpbHRlckJ5UHJvcGVydHk9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQocik7aWYobiE9bnVsbCl7dmFyIGk9bi5hY2Nlc3NvcixvPW4uc2NhbGU7aWYobyE9bnVsbClyZXR1cm4gZnVuY3Rpb24oYSxzLGwpe3ZhciBjPW8ucmFuZ2UoKTtyZXR1cm4gYmF0Lk1hdGguaW5SYW5nZShvLnNjYWxlKGkoYSxzLGwpKSxjWzBdLGNbMV0pfX1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKHIsbil7ZS5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5LmNhbGwodGhpcyxyLG4pO3ZhciBpPW49PT10Ll9YX0tFWT90aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrOnRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2s7ci5vZmZVcGRhdGUoaSl9LHQucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtlLnByb3RvdHlwZS5faW5zdGFsbFNjYWxlRm9yS2V5LmNhbGwodGhpcyxyLG4pO3ZhciBpPW49PT10Ll9YX0tFWT90aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrOnRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2s7ci5vblVwZGF0ZShpKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy54KCkuc2NhbGUmJnRoaXMueCgpLnNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrKSx0aGlzLnkoKS5zY2FsZSYmdGhpcy55KCkuc2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2spLHRoaXN9LHQucHJvdG90eXBlLmF1dG9yYW5nZU1vZGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj8ieCI6dGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj8ieSI6Im5vbmUiO3N3aXRjaChyKXtjYXNlIngiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITAsdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMSx0aGlzLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWSgpO2JyZWFrO2Nhc2UieSI6dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMSx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSEwLHRoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YKCk7YnJlYWs7Y2FzZSJub25lIjp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2NhbGUgbmFtZSAnIityKyInLCBtdXN0IGJlICd4JywgJ3knIG9yICdub25lJyIpfXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSk7dmFyIG89dGhpcy54KCksYT1vJiZvLnNjYWxlO2EhPW51bGwmJmEucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk7dmFyIHM9dGhpcy55KCksbD1zJiZzLnNjYWxlO3JldHVybiBsIT1udWxsJiYobCBpbnN0YW5jZW9mIGNLdC5DYXRlZ29yeT9sLnJhbmdlKFswLHRoaXMuaGVpZ2h0KCldKTpsLnJhbmdlKFt0aGlzLmhlaWdodCgpLDBdKSksdGhpc30sdC5wcm90b3R5cGUuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbj1mdW5jdGlvbigpe3ZhciByPXRoaXMueCgpLnNjYWxlO3IhPW51bGwmJnIuYXV0b0RvbWFpbigpfSx0LnByb3RvdHlwZS5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCkuc2NhbGU7ciE9bnVsbCYmci5hdXRvRG9tYWluKCl9LHQucHJvdG90eXBlLnNob3dBbGxEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMuX3VwZGF0ZVlFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXN9LHQucHJvdG90eXBlLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWD1mdW5jdGlvbigpeyF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKXx8dGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbiYmdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCl9LHQucHJvdG90eXBlLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWT1mdW5jdGlvbigpeyF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKXx8dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbiYmdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCl9LHQucHJvdG90eXBlLl9wcm9qZWN0b3JzUmVhZHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLngoKSxuPXRoaXMueSgpO3JldHVybiByIT1udWxsJiZyLmFjY2Vzc29yIT1udWxsJiZuIT1udWxsJiZuLmFjY2Vzc29yIT1udWxsfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89bTQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLGE9bTQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpO3JldHVybnt4Om8ocixuLGkpLHk6YShyLG4saSl9fSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdy5jYWxsKHRoaXMpLGk9dGhpcy5hdHRyKCJkZWZpbmVkIiksbz1mdW5jdGlvbihhLHMsbCl7dmFyIGM9bTQuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci54KCkpKGEscyxsKSx1PW00LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHIueSgpKShhLHMsbCk7cmV0dXJuIGkmJmkuYWNjZXNzb3IoYSxzLGwpPT09ITE/ITE6YmF0Lk1hdGguaXNWYWxpZE51bWJlcihjKSYmYmF0Lk1hdGguaXNWYWxpZE51bWJlcih1KX07cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe24uc2V0KGEsbi5nZXQoYSkuZmlsdGVyKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIG8ocyxsLGEpfSkpfSksbn0sdC5fWF9LRVk9IngiLHQuX1lfS0VZPSJ5Iix0fShtNC5QbG90KTt3YXQuWFlQbG90PWtWZX0pO3ZhciBNYXQ9SChzQj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc0IsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBSVmU9KGRlKCksVXQocGUpKSx5YT0oRXIoKSxVdChNcikpLE5WZT1MZigpLERWZT1CMSgpLE9WZT1VdSgpLHVLdD1yQigpLHpWZT1rcygpLGFCPXZkKCksUWc9RmUoKSxGVmU9SWYoKSxTYXQ9SVMoKSx2bD1ycygpLEJWZT1IMSgpLGhLdD17bGluZWFyOnlhLmN1cnZlTGluZWFyLGxpbmVhckNsb3NlZDp5YS5jdXJ2ZUxpbmVhckNsb3NlZCxzdGVwOnlhLmN1cnZlU3RlcCxzdGVwQmVmb3JlOnlhLmN1cnZlU3RlcEJlZm9yZSxzdGVwQWZ0ZXI6eWEuY3VydmVTdGVwQWZ0ZXIsYmFzaXM6eWEuY3VydmVCYXNpcyxiYXNpc09wZW46eWEuY3VydmVCYXNpc09wZW4sYmFzaXNDbG9zZWQ6eWEuY3VydmVCYXNpc0Nsb3NlZCxidW5kbGU6eWEuY3VydmVCdW5kbGUsY2FyZGluYWw6eWEuY3VydmVDYXJkaW5hbCxjYXJkaW5hbE9wZW46eWEuY3VydmVDYXJkaW5hbE9wZW4sY2FyZGluYWxDbG9zZWQ6eWEuY3VydmVDYXJkaW5hbENsb3NlZCxtb25vdG9uZTp5YS5jdXJ2ZU1vbm90b25lWH07c0IuQ3VydmVOYW1lPUZWZS5tYWtlRW51bShbImxpbmVhciIsImxpbmVhckNsb3NlZCIsInN0ZXAiLCJzdGVwQmVmb3JlIiwic3RlcEFmdGVyIiwiYmFzaXMiLCJiYXNpc09wZW4iLCJiYXNpc0Nsb3NlZCIsImJ1bmRsZSIsImNhcmRpbmFsIiwiY2FyZGluYWxPcGVuIiwiY2FyZGluYWxDbG9zZWQiLCJtb25vdG9uZSJdKTt2YXIgSFZlPWZ1bmN0aW9uKGUpe1JWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IuX2N1cnZlPSJsaW5lYXIiLHIuX2F1dG9yYW5nZVNtb290aD0hMSxyLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZD0hMCxyLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ9ITEsci5fZG93bnNhbXBsaW5nRW5hYmxlZD0hMSxyLmFkZENsYXNzKCJsaW5lLXBsb3QiKTt2YXIgbj1uZXcgTlZlLkVhc2luZztyZXR1cm4gbi5zdGVwRHVyYXRpb24odmwuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksbi5lYXNpbmdNb2RlKCJleHBJbk91dCIpLG4ubWF4VG90YWxEdXJhdGlvbih2bC5QbG90Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OKSxyLmFuaW1hdG9yKFNhdC5BbmltYXRvci5NQUlOLG4pLHIuYXR0cigic3Ryb2tlIixuZXcgelZlLkNvbG9yKCkucmFuZ2UoKVswXSksci5hdHRyKCJzdHJva2Utd2lkdGgiLCIycHgiKSxyfXJldHVybiB0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS54LmNhbGwodGhpcyk6KGUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbixpKSx0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCksdGhpcyl9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuLGkpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzKTooZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sdC5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlLmNhbGwodGhpcyk6KGUucHJvdG90eXBlLmF1dG9yYW5nZU1vZGUuY2FsbCh0aGlzLHIpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sdC5wcm90b3R5cGUuYXV0b3JhbmdlU21vb3RoPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2F1dG9yYW5nZVNtb290aDoodGhpcy5fYXV0b3JhbmdlU21vb3RoPXIsdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5fc2V0U2NhbGVTbmFwcGluZz1mdW5jdGlvbigpe3RoaXMuYXV0b3JhbmdlTW9kZSgpPT09IngiJiZ0aGlzLngoKSYmdGhpcy54KCkuc2NhbGUmJnRoaXMueCgpLnNjYWxlIGluc3RhbmNlb2YgYUIuUXVhbnRpdGF0aXZlU2NhbGUmJnRoaXMueCgpLnNjYWxlLnNuYXBwaW5nRG9tYWluRW5hYmxlZCghdGhpcy5hdXRvcmFuZ2VTbW9vdGgoKSksdGhpcy5hdXRvcmFuZ2VNb2RlKCk9PT0ieSImJnRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZSYmdGhpcy55KCkuc2NhbGUgaW5zdGFuY2VvZiBhQi5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy55KCkuc2NhbGUuc25hcHBpbmdEb21haW5FbmFibGVkKCF0aGlzLmF1dG9yYW5nZVNtb290aCgpKX0sdC5wcm90b3R5cGUuY3VydmU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY3VydmU6KHRoaXMuX2N1cnZlPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kb3duc2FtcGxpbmdFbmFibGVkOih0aGlzLl9kb3duc2FtcGxpbmdFbmFibGVkPXIsdGhpcyl9LHQucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkOih0aGlzLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmNvbGxhcHNlRGVuc2VMaW5lc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY29sbGFwc2VEZW5zZVZlcnRpY2FsTGluZXNFbmFibGVkOih0aGlzLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBPVmUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHVLdC5MaW5lU1ZHRHJhd2VyfSxmdW5jdGlvbihpKXtyZXR1cm4gbmV3IERWZS5DYW52YXNEcmF3ZXIoaSx1S3QubWFrZUxpbmVDYW52YXNEcmF3U3RlcChmdW5jdGlvbigpe3JldHVybiBuLl9kM0xpbmVGYWN0b3J5KHIpfSkpfSl9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHIpO2lmKCF0aGlzLl9hdXRvcmFuZ2VTbW9vdGh8fHRoaXMuYXV0b3JhbmdlTW9kZSgpIT09cnx8dGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT0ieCImJnRoaXMuYXV0b3JhbmdlTW9kZSgpIT09InkiKXJldHVybiBuO3ZhciBpPXRoaXMuX2dldEVkZ2VJbnRlcnNlY3Rpb25Qb2ludHMoKSxvO3JldHVybiB0aGlzLmF1dG9yYW5nZU1vZGUoKT09PSJ5Ij9vPWkubGVmdC5jb25jYXQoaS5yaWdodCkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnl9KTpvPWkudG9wLmNvbmNhdChpLmJvdHRvbSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnh9KSxuLm1hcChmdW5jdGlvbihhKXtyZXR1cm4geWEuZXh0ZW50KHlhLm1lcmdlKFthLG9dKSl9KX0sdC5wcm90b3R5cGUuX2dldEVkZ2VJbnRlcnNlY3Rpb25Qb2ludHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2lmKCEodGhpcy55KCkuc2NhbGUgaW5zdGFuY2VvZiBhQi5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBhQi5RdWFudGl0YXRpdmVTY2FsZSkpcmV0dXJue2xlZnQ6W10scmlnaHQ6W10sdG9wOltdLGJvdHRvbTpbXX07dmFyIG49dGhpcy55KCkuc2NhbGUsaT10aGlzLngoKS5zY2FsZSxvPXtsZWZ0OltdLHJpZ2h0OltdLHRvcDpbXSxib3R0b206W119LGE9aS5zY2FsZShpLmRvbWFpbigpWzBdKSxzPWkuc2NhbGUoaS5kb21haW4oKVsxXSksbD1uLnNjYWxlKG4uZG9tYWluKClbMF0pLGM9bi5zY2FsZShuLmRvbWFpbigpWzFdKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24odSl7Zm9yKHZhciBoPXUuZGF0YSgpLGYscCxkLGcsXyx5LHgsYixTPTE7UzxoLmxlbmd0aDtTKyspXz14fHxpLnNjYWxlKHIueCgpLmFjY2Vzc29yKGhbUy0xXSxTLTEsdSkpLHk9Ynx8bi5zY2FsZShyLnkoKS5hY2Nlc3NvcihoW1MtMV0sUy0xLHUpKSx4PWkuc2NhbGUoci54KCkuYWNjZXNzb3IoaFtTXSxTLHUpKSxiPW4uc2NhbGUoci55KCkuYWNjZXNzb3IoaFtTXSxTLHUpKSxfPGE9PWE8PXgmJihmPWEtXyxwPXgtXyxnPWIteSxkPWYqZy9wLG8ubGVmdC5wdXNoKHt4OmEseTpuLmludmVydCh5K2QpfSkpLF88cz09czw9eCYmKGY9cy1fLHA9eC1fLGc9Yi15LGQ9ZipnL3Asby5yaWdodC5wdXNoKHt4OnMseTpuLmludmVydCh5K2QpfSkpLHk8Yz09Yzw9YiYmKHA9eC1fLGQ9Yy15LGc9Yi15LGY9ZCpwL2csby50b3AucHVzaCh7eDppLmludmVydChfK2YpLHk6Y30pKSx5PGw9PWw8PWImJihwPXgtXyxkPWwteSxnPWIteSxmPWQqcC9nLG8uYm90dG9tLnB1c2goe3g6aS5pbnZlcnQoXytmKSx5Omx9KSl9KSxvfSx0LnByb3RvdHlwZS5fZ2V0UmVzZXRZRnVuY3Rpb249ZnVuY3Rpb24oKXt2YXIgcj10aGlzLnkoKS5zY2FsZS5kb21haW4oKSxuPU1hdGgubWF4KHJbMF0sclsxXSksaT1NYXRoLm1pbihyWzBdLHJbMV0pLG89bjwwJiZufHxpPjAmJml8fDAsYT10aGlzLnkoKS5zY2FsZS5zY2FsZShvKTtyZXR1cm4gZnVuY3Rpb24ocyxsLGMpe3JldHVybiBhfX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHI9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtuLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3Rvcih2bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSksci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihTYXQuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKFNhdC5BbmltYXRvci5NQUlOKX0pLHJ9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpO3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKG4hPT0iZCIpe3ZhciBpPXJbbl07cltuXT1mdW5jdGlvbihvLGEscyl7cmV0dXJuIG8ubGVuZ3RoPjA/aShvWzBdLGEscyk6bnVsbH19fSkscn0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzLmVudGl0eU5lYXJlc3RCeVhUaGVuWShyKTtyZXR1cm4gbiE9bnVsbD9bbl06W119LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3RCeVhUaGVuWT1mdW5jdGlvbihyKXtmb3IodmFyIG49MS8wLGk9MS8wLG8sYT10aGlzLmJvdW5kcygpLHM9dGhpcy5lbnRpdGllcygpLGw9cy5sZW5ndGgsYz0wO2M8bDtjKyspe3ZhciB1PXNbY107aWYoISFRZy5NYXRoLndpdGhpbih1LnBvc2l0aW9uLGEpKXt2YXIgaD1NYXRoLmFicyhyLngtdS5wb3NpdGlvbi54KSxmPU1hdGguYWJzKHIueS11LnBvc2l0aW9uLnkpOyhoPG58fGg9PT1uJiZmPGkpJiYobz11LG49aCxpPWYpfX1yZXR1cm4gb30sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTtyZXR1cm4gci5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IodmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSkscn0sdC5wcm90b3R5cGUuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3I9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzO3JldHVybiBmdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2QzTGluZUZhY3RvcnkocyxyLG4pKG8pfX0sdC5wcm90b3R5cGUuX2QzTGluZUZhY3Rvcnk9ZnVuY3Rpb24ocixuLGkpe249PT12b2lkIDAmJihuPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSksaT09PXZvaWQgMCYmKGk9dmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKTt2YXIgbz1mdW5jdGlvbihhLHMsbCl7dmFyIGM9bihhLHMsbCksdT1pKGEscyxsKTtyZXR1cm4gUWcuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZRZy5NYXRoLmlzVmFsaWROdW1iZXIodSl9O3JldHVybiB5YS5saW5lKCkueChmdW5jdGlvbihhLHMpe3JldHVybiBuKGEscyxyKX0pLnkoZnVuY3Rpb24oYSxzKXtyZXR1cm4gaShhLHMscil9KS5jdXJ2ZSh0aGlzLl9nZXRDdXJ2ZUZhY3RvcnkoKSkuZGVmaW5lZChmdW5jdGlvbihhLHMpe3JldHVybiBvKGEscyxyKX0pfSx0LnByb3RvdHlwZS5fZ2V0Q3VydmVGYWN0b3J5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5jdXJ2ZSgpO2lmKHR5cGVvZiByPT0ic3RyaW5nIil7dmFyIG49aEt0W3JdO3JldHVybiBuPT1udWxsP2hLdC5saW5lYXI6bn1lbHNlIHJldHVybiByfSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1uZXcgUWcuTWFwO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbz1pLmRhdGEoKTtpZighci5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQmJiFyLl9kb3duc2FtcGxpbmdFbmFibGVkKXtuLnNldChpLFtvXSk7cmV0dXJufWZvcih2YXIgYT1bXSxzPW8ubGVuZ3RoLGw9MDtsPHM7bCsrKWFbbF09bDtyLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZCYmKGE9ci5fZmlsdGVyQ3JvcHBlZFJlbmRlcmluZyhpLGEpKSxyLl9kb3duc2FtcGxpbmdFbmFibGVkJiYoYT1yLl9maWx0ZXJEb3duc2FtcGxpbmcoaSxhKSksci5fY29sbGFwc2VEZW5zZVZlcnRpY2FsTGluZXNFbmFibGVkJiYoYT1yLl9maWx0ZXJEZW5zZUxpbmVzKGksYSkpO2Zvcih2YXIgYz1bXSx1PWEubGVuZ3RoLGw9MDtsPHU7bCsrKXt2YXIgaD1hW2xdO2NbbF09b1toXX1uLnNldChpLFtjXSl9KSxufSx0LnByb3RvdHlwZS5fZmlsdGVyQ3JvcHBlZFJlbmRlcmluZz1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT10aGlzLG89dmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLGE9dmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLHM9ci5kYXRhKCksbD1bXSxjPWZ1bmN0aW9uKHgsYil7cmV0dXJuIFFnLk1hdGguaW5SYW5nZSh4LDAsaS53aWR0aCgpKSYmUWcuTWF0aC5pblJhbmdlKGIsMCxpLmhlaWdodCgpKX0sdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgaD1vKHNbblt1XV0sblt1XSxyKSxmPWEoc1tuW3VdXSxuW3VdLHIpLHA9YyhoLGYpO2lmKCFwJiZuW3UtMV0hPW51bGwmJnNbblt1LTFdXSE9bnVsbCl7dmFyIGQ9byhzW25bdS0xXV0sblt1LTFdLHIpLGc9YShzW25bdS0xXV0sblt1LTFdLHIpO3A9cHx8YyhkLGcpfWlmKCFwJiZuW3UrMV0hPW51bGwmJnNbblt1KzFdXSE9bnVsbCl7dmFyIF89byhzW25bdSsxXV0sblt1KzFdLHIpLHk9YShzW25bdSsxXV0sblt1KzFdLHIpO3A9cHx8YyhfLHkpfXAmJmwucHVzaChuW3VdKX1yZXR1cm4gbH0sdC5wcm90b3R5cGUuX2ZpbHRlckRvd25zYW1wbGluZz1mdW5jdGlvbihyLG4pe2lmKG4ubGVuZ3RoPT09MClyZXR1cm5bXTtmb3IodmFyIGk9ci5kYXRhKCksbz12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkscz1bblswXV0sbD1mdW5jdGlvbihrLE8pe3ZhciBEPW8oaVtuW2tdXSxuW2tdLHIpLEI9YShpW25ba11dLG5ba10sciksST1vKGlbbltrKzFdXSxuW2srMV0sciksTD1hKGlbbltrKzFdXSxuW2srMV0scik7aWYoTz09PTEvMClyZXR1cm4gTWF0aC5mbG9vcihEKT09PU1hdGguZmxvb3IoSSk7dmFyIFI9QisoSS1EKSpPO3JldHVybiBNYXRoLmZsb29yKEwpPT09TWF0aC5mbG9vcihSKX0sYz0wO2M8bi5sZW5ndGgtMTspe2Zvcih2YXIgdT1uW2NdLGg9byhpW25bY11dLG5bY10sciksZj1hKGlbbltjXV0sbltjXSxyKSxwPW8oaVtuW2MrMV1dLG5bYysxXSxyKSxkPWEoaVtuW2MrMV1dLG5bYysxXSxyKSxnPU1hdGguZmxvb3IoaCk9PT1NYXRoLmZsb29yKHApPzEvMDooZC1mKS8ocC1oKSxfPW5bY10seT1nPT09MS8wP2Y6aCx4PV8sYj15LFM9ITA7YzxuLmxlbmd0aC0xJiYoU3x8bChjLGcpKTspe2MrKyxTPSExO3ZhciBDPWc9PT0xLzA/YShpW25bY11dLG5bY10scik6byhpW25bY11dLG5bY10scik7Qz5iJiYoYj1DLHg9bltjXSksQzx5JiYoeT1DLF89bltjXSl9dmFyIFA9bltjXTtfIT09dSYmcy5wdXNoKF8pLHghPT1fJiZ4IT09dSYmcy5wdXNoKHgpLFAhPT11JiZQIT09XyYmUCE9PXgmJnMucHVzaChQKX1yZXR1cm4gc30sdC5wcm90b3R5cGUuX2ZpbHRlckRlbnNlTGluZXM9ZnVuY3Rpb24ocixuKXtpZihuLmxlbmd0aD09PTApcmV0dXJuW107dmFyIGk9ci5kYXRhKCksbz12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkscz1mdW5jdGlvbihjKXtyZXR1cm4gbyhpW2NdLGMscil9LGw9ZnVuY3Rpb24oYyl7cmV0dXJuIGEoaVtjXSxjLHIpfTtyZXR1cm4gdGhpcy5fYnVja2V0QnlYKHIsbixzLGwpfSx0LnByb3RvdHlwZS5fYnVja2V0QnlYPWZ1bmN0aW9uKHIsbixpLG8pe2Zvcih2YXIgYT1bXSxzPXIuZGF0YSgpLGw9bnVsbCxjPW4ubGVuZ3RoLHU9MDt1PD1jOysrdSl7dmFyIGg9blt1XTtpZihzW2hdIT1udWxsKXt2YXIgZj1NYXRoLmZsb29yKGkoaCkpLHA9byhoKTtsPT1udWxsP2w9bmV3IFFnLkJ1Y2tldChoLGYscCk6bC5pc0luQnVja2V0KGYpP2wuYWRkVG9CdWNrZXQocCxoKTooYS5wdXNoLmFwcGx5KGEsbC5nZXRVbmlxdWVJbmRpY2VzKCkpLGw9bmV3IFFnLkJ1Y2tldChoLGYscCkpfX1yZXR1cm4gbCE9bnVsbCYmYS5wdXNoLmFwcGx5KGEsbC5nZXRVbmlxdWVJbmRpY2VzKCkpLGF9LHR9KEJWZS5YWVBsb3QpO3NCLkxpbmU9SFZlfSk7dmFyIENhdD1IKFRhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgVlZlPShkZSgpLFV0KHBlKSksbEI9KEVyKCksVXQoTXIpKSxVVmU9a3MoKSxnND1GZSgpLEVhdD1CMSgpLGZLdD1nYXQoKSxxVmU9VXUoKSxwS3Q9ckIoKSxjQj1JUygpLEdWZT1NYXQoKSxEcz1ycygpLFdWZT1mdW5jdGlvbihlKXtWVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5hZGRDbGFzcygiYXJlYS1wbG90Iiksci55MCgwKSxyLmF0dHIoImZpbGwtb3BhY2l0eSIsLjI1KSxyLmF0dHIoImZpbGwiLG5ldyBVVmUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLl9saW5lRHJhd2Vycz1uZXcgZzQuTWFwLHJ9cmV0dXJuIHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55LmNhbGwodGhpcyk7aWYobj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTplLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4pLG4hPW51bGwpe3ZhciBpPXRoaXMueTAoKS5hY2Nlc3NvcjtpIT1udWxsJiZ0aGlzLl9iaW5kUHJvcGVydHkodC5fWTBfS0VZLGksbiksdGhpcy5fdXBkYXRlWVNjYWxlKCl9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnkwPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1kwX0tFWSk7dmFyIG49dGhpcy55KCksaT1uJiZuLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWTBfS0VZLHIsaSksdGhpcy5fdXBkYXRlWVNjYWxlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZVlTY2FsZSgpfSx0LnByb3RvdHlwZS5fYWRkRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3JldHVybiB0aGlzLl9saW5lRHJhd2Vycy5zZXQocixuZXcgRWF0LlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwS3QuTGluZVNWR0RyYXdlcn0sZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyBFYXQuQ2FudmFzRHJhd2VyKGkscEt0Lm1ha2VMaW5lQ2FudmFzRHJhd1N0ZXAoZnVuY3Rpb24oKXt2YXIgbz1Ecy5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLngoKSksYT1Ecy5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLnkoKSk7cmV0dXJuIG4uX2QzTGluZUZhY3RvcnkocixvLGEpfSkpfSkpLGUucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuX2xpbmVEcmF3ZXJzLmdldChyKTtyZXR1cm4gdGhpcy5yZW5kZXJlcigpPT09InN2ZyI/bi51c2VTVkcodGhpcy5fcmVuZGVyQXJlYSk6bi51c2VDYW52YXModGhpcy5fY2FudmFzKSxufSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpLHRoaXMuX2xpbmVEcmF3ZXJzLmdldChyKS5yZW1vdmUoKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9nZW5lcmF0ZUxpbmVEcmF3U3RlcHMoKSxpPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihvKXt2YXIgYT1Ecy5QbG90LmFwcGx5RHJhd1N0ZXBzKG4sbyk7ci5fbGluZURyYXdlcnMuZ2V0KG8pLmRyYXcoaS5nZXQobyksYSl9KX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlTGluZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yKCk7bi5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHRoaXMuX2dldFJlc2V0WUZ1bmN0aW9uKCkpLHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoY0IuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dlbmVyYXRlTGluZUF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKGNCLkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlTGluZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiByLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKSxyfSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBxVmUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZLdC5BcmVhU1ZHRHJhd2VyfSxmdW5jdGlvbihpKXtyZXR1cm4gbmV3IEVhdC5DYW52YXNEcmF3ZXIoaSxmS3QubWFrZUFyZWFDYW52YXNEcmF3U3RlcChmdW5jdGlvbigpe3ZhciBvPW4uX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksYT1vWzBdLHM9b1sxXSxsPW9bMl0sYz1uLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yKGEscyk7cmV0dXJuIG4uX2NyZWF0ZUFyZWFHZW5lcmF0b3IoYSxzLGwsYyxyKX0sZnVuY3Rpb24oKXt2YXIgbz1uLl9jb29yZGluYXRlUHJvamVjdG9ycygpLGE9b1swXSxzPW9bMV0sbD1uLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yKGEscyk7cmV0dXJuIG4uX2NyZWF0ZVRvcExpbmVHZW5lcmF0b3IoYSxzLGwscil9KSl9KX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHI9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtuLmQ9dGhpcy5fY29uc3RydWN0QXJlYVByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpKSxyLnB1c2goe2F0dHJUb1Byb2plY3RvcjpuLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKGNCLkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiByLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihjQi5BbmltYXRvci5NQUlOKX0pLHJ9LHQucHJvdG90eXBlLl91cGRhdGVZU2NhbGU9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmdldEV4dGVudHNGb3JQcm9wZXJ0eSgieTAiKSxuPWc0LkFycmF5LmZsYXR0ZW4ociksaT1nNC5BcnJheS51bmlxKG4pLG89aS5sZW5ndGg9PT0xP2lbMF06bnVsbCxhPXRoaXMueSgpLHM9YSYmYS5zY2FsZTtzIT1udWxsJiYodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIhPW51bGwmJihzLnJlbW92ZVBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIpLHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyPW51bGwpLG8hPW51bGwmJih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltvXX0scy5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSkpfSx0LnByb3RvdHlwZS5fZ2V0UmVzZXRZRnVuY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MCgpKX0sdC5wcm90b3R5cGUuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7cmV0dXJuW0RzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MCgpKV19LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksbj10aGlzLl9jb29yZGluYXRlUHJvamVjdG9ycygpLGk9blswXSxvPW5bMV0sYT1uWzJdO3JldHVybiByLmQ9dGhpcy5fY29uc3RydWN0QXJlYVByb2plY3RvcihpLG8sYSkscn0sdC5wcm90b3R5cGUuc2VsZWN0aW9ucz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PT12b2lkIDAmJihyPXRoaXMuZGF0YXNldHMoKSksdGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpcmV0dXJuIGxCLnNlbGVjdEFsbCgpO3ZhciBpPWUucHJvdG90eXBlLnNlbGVjdGlvbnMuY2FsbCh0aGlzLHIpLm5vZGVzKCksbz1yLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gbi5fbGluZURyYXdlcnMuZ2V0KGEpfSkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT1udWxsfSk7cmV0dXJuIG8uZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gaS5wdXNoLmFwcGx5KGksYS5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSksbEIuc2VsZWN0QWxsKGkpfSx0LnByb3RvdHlwZS5fY29uc3RydWN0QXJlYVByb2plY3Rvcj1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcyxhPXRoaXMuX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSk7cmV0dXJuIGZ1bmN0aW9uKHMsbCxjKXt2YXIgdT1vLl9jcmVhdGVBcmVhR2VuZXJhdG9yKHIsbixpLGEsYyk7cmV0dXJuIHUocyl9fSx0LnByb3RvdHlwZS5fY3JlYXRlRGVmaW5lZFByb2plY3Rvcj1mdW5jdGlvbihyLG4pe3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9cihpLG8sYSksbD1uKGksbyxhKTtyZXR1cm4gZzQuTWF0aC5pc1ZhbGlkTnVtYmVyKHMpJiZnNC5NYXRoLmlzVmFsaWROdW1iZXIobCl9fSx0LnByb3RvdHlwZS5fY3JlYXRlQXJlYUdlbmVyYXRvcj1mdW5jdGlvbihyLG4saSxvLGEpe3ZhciBzPXRoaXMuX2dldEN1cnZlRmFjdG9yeSgpLGw9bEIuYXJlYSgpLngoZnVuY3Rpb24oYyx1KXtyZXR1cm4gcihjLHUsYSl9KS55MShmdW5jdGlvbihjLHUpe3JldHVybiBuKGMsdSxhKX0pLnkwKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIGkoYyx1LGEpfSkuY3VydmUocykuZGVmaW5lZChmdW5jdGlvbihjLHUpe3JldHVybiBvKGMsdSxhKX0pO3JldHVybiBsfSx0LnByb3RvdHlwZS5fY3JlYXRlVG9wTGluZUdlbmVyYXRvcj1mdW5jdGlvbihyLG4saSxvKXt2YXIgYT10aGlzLl9nZXRDdXJ2ZUZhY3RvcnkoKSxzPWxCLmxpbmUoKS54KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIHIobCxjLG8pfSkueShmdW5jdGlvbihsLGMpe3JldHVybiBuKGwsYyxvKX0pLmN1cnZlKGEpLmRlZmluZWQoZnVuY3Rpb24obCxjKXtyZXR1cm4gaShsLGMsbyl9KTtyZXR1cm4gc30sdC5fWTBfS0VZPSJ5MCIsdH0oR1ZlLkxpbmUpO1RhdC5BcmVhPVdWZX0pO3ZhciBfND1IKEd1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShHdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFlWZT0oZGUoKSxVdChwZSkpLFBhdD0oRXIoKSxVdChNcikpLEFhdD1fbCgpLGpWZT1MZigpLFhWZT1CdSgpLCRWZT1CMSgpLEtWZT1VdSgpLFpWZT1pQigpLEpWZT1DUygpLElhdD1rcygpLGRLdD12ZCgpLHhsPUZlKCksa2F0PUlmKCksbUt0PUlTKCksdUI9cnMoKSxRVmU9SDEoKTtHdS5CYXJPcmllbnRhdGlvbj1rYXQubWFrZUVudW0oWyJ2ZXJ0aWNhbCIsImhvcml6b250YWwiXSk7R3UuTGFiZWxzUG9zaXRpb249a2F0Lm1ha2VFbnVtKFsic3RhcnQiLCJtaWRkbGUiLCJlbmQiLCJvdXRzaWRlIl0pO0d1LkJhckFsaWdubWVudD1rYXQubWFrZUVudW0oWyJzdGFydCIsIm1pZGRsZSIsImVuZCJdKTt2YXIgTGF0PWZ1bmN0aW9uKGUpe1lWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSJ2ZXJ0aWNhbCIpO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9sYWJlbEZvcm1hdHRlcj1YVmUuaWRlbnRpdHkoKSxuLl9sYWJlbHNFbmFibGVkPSExLG4uX2xhYmVsc1Bvc2l0aW9uPUd1LkxhYmVsc1Bvc2l0aW9uLmVuZCxuLl9oaWRlQmFyc0lmQW55QXJlVG9vV2lkZT0hMCxuLl9iYXJBbGlnbm1lbnQ9Im1pZGRsZSIsbi5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzPUpWZS5tZW1vaXplKHRVZSksbi5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz0hMCxuLmFkZENsYXNzKCJiYXItcGxvdCIpLHIhPT0idmVydGljYWwiJiZyIT09Imhvcml6b250YWwiKXRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIFBsb3RzLkJhciIpO3JldHVybiBuLl9pc1ZlcnRpY2FsPXI9PT0idmVydGljYWwiLG4uYW5pbWF0b3IoImJhc2VsaW5lIixuZXcgalZlLk51bGwpLG4uYXR0cigiZmlsbCIsbmV3IElhdC5Db2xvcigpLnJhbmdlKClbMF0pLG4uYXR0cih0Ll9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbigpe3JldHVybiBuLl9iYXJQaXhlbFRoaWNrbmVzcygpfSksbi5fbGFiZWxDb25maWc9bmV3IHhsLk1hcCxuLl9iYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bbi5iYXNlbGluZVZhbHVlKCldfSxufXJldHVybiB0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpOihuPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbiksdGhpcy5fdXBkYXRlVGhpY2tuZXNzQXR0cigpLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcyl9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscixuKSx0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD90aGlzLnkoKTp0aGlzLngoKX0sdC5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD90aGlzLngoKTp0aGlzLnkoKX0sdC5wcm90b3R5cGUuYmFyRW5kPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX0JBUl9FTkRfS0VZKTt2YXIgbj10aGlzLnBvc2l0aW9uKCksaT1uJiZuLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fQkFSX0VORF9LRVkscixpKSx0aGlzLl91cGRhdGVUaGlja25lc3NBdHRyKCksdGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLmJhckFsaWdubWVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9iYXJBbGlnbm1lbnQ6KHRoaXMuX2JhckFsaWdubWVudD1yLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwifSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLVmUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpWZS5SZWN0YW5nbGVTVkdEcmF3ZXIodC5fQkFSX0FSRUFfQ0xBU1MpfSxmdW5jdGlvbihyKXtyZXR1cm4gbmV3ICRWZS5SZWN0YW5nbGVDYW52YXNEcmF3ZXIocil9KX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fYmFzZWxpbmU9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApfSx0LnByb3RvdHlwZS5iYXNlbGluZVZhbHVlPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpe2lmKHRoaXMuX2Jhc2VsaW5lVmFsdWUhPW51bGwpcmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU7aWYoIXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXJldHVybiAwO3ZhciBuPXRoaXMubGVuZ3RoKCkuc2NhbGU7cmV0dXJuIG4mJm4gaW5zdGFuY2VvZiBJYXQuVGltZT9uZXcgRGF0ZSgwKTowfXJldHVybiB0aGlzLl9iYXNlbGluZVZhbHVlPXIsdGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5hZGREYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fYWRkRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX2FkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLnJlbW92ZURhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuZGF0YXNldHM9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUuZGF0YXNldHMuY2FsbCh0aGlzKTooZS5wcm90b3R5cGUuZGF0YXNldHMuY2FsbCh0aGlzLHIpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD1yLG4hPW51bGwmJih0aGlzLl9sYWJlbHNQb3NpdGlvbj1uKSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUubGFiZWxGb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxGb3JtYXR0ZXI6KHRoaXMuX2xhYmVsRm9ybWF0dGVyPXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7dmFyIG49ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMsciksaT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fTEFCRUxfQVJFQV9DTEFTUywhMCksbz1uZXcgQWF0LlN2Z0NvbnRleHQoaS5ub2RlKCkpLGE9bmV3IEFhdC5DYWNoZU1lYXN1cmVyKG8pLHM9bmV3IEFhdC5Xcml0ZXIoYSxvKTtyZXR1cm4gdGhpcy5fbGFiZWxDb25maWcuc2V0KHIse2xhYmVsQXJlYTppLG1lYXN1cmVyOmEsd3JpdGVyOnN9KSxufSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuX2xhYmVsQ29uZmlnLmdldChyKTtuIT1udWxsJiYobi5sYWJlbEFyZWEucmVtb3ZlKCksdGhpcy5fbGFiZWxDb25maWcuZGVsZXRlKHIpKX0sdC5wcm90b3R5cGUuZW50aXR5TmVhcmVzdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ZnVuY3Rpb24oKXt2YXIgbz1uLl9pc1ZlcnRpY2FsP24uX2dldEVudGl0eVN0b3JlKCkuZW50aXR5TmVhcmVzdFgocik6bi5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0WShyKTtyZXR1cm4gbz09PXZvaWQgMD92b2lkIDA6bi5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KG8pfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQoaSk6aSgpfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBuLl9lbnRpdGllc0ludGVyc2VjdGluZyhyLngsci55KX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcy5jYWxsKG4scil9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChpKTppKCl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5lbnRpdGllc0luWEJvdW5kcy5jYWxsKG4scil9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChpKTppKCl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5lbnRpdGllc0luWUJvdW5kcy5jYWxsKG4scil9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChpKTppKCl9LHQucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1bXSxvPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXMoKSxhPW8ubGVuZ3RoLHM9MDtzPGE7cysrKXt2YXIgbD1vW3NdO3hsLkRPTS5pbnRlcnNlY3RzQkJveChyLG4sdGhpcy5fZW50aXR5Qm91bmRzKGwpKSYmaS5wdXNoKHRoaXMuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShsKSl9cmV0dXJuIGl9LHQucHJvdG90eXBlLl91cGRhdGVMZW5ndGhTY2FsZT1mdW5jdGlvbigpe2lmKCEhdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpe3ZhciByPXRoaXMubGVuZ3RoKCkuc2NhbGU7ciBpbnN0YW5jZW9mIGRLdC5RdWFudGl0YXRpdmVTY2FsZSYmKHIuYWRkUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9iYXNlbGluZVZhbHVlUHJvdmlkZXIpLHIuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9iYXNlbGluZVZhbHVlUHJvdmlkZXIpKX19LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fYmFyUGl4ZWxUaGlja25lc3MoKSx0aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQoZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbChyKX0pfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT17eDE6dGhpcy5faXNWZXJ0aWNhbD8wOm8seTE6dGhpcy5faXNWZXJ0aWNhbD9vOjAseDI6dGhpcy5faXNWZXJ0aWNhbD90aGlzLndpZHRoKCk6byx5Mjp0aGlzLl9pc1ZlcnRpY2FsP286dGhpcy5oZWlnaHQoKX07dGhpcy5fZ2V0QW5pbWF0b3IoImJhc2VsaW5lIikuYW5pbWF0ZSh0aGlzLl9iYXNlbGluZSxhKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihzKXtyZXR1cm4gbi5fbGFiZWxDb25maWcuZ2V0KHMpLmxhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKX0pLHRoaXMuX2xhYmVsc0VuYWJsZWQmJnhsLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxyKSxvO2lmKHI9PT0ieCImJnRoaXMuX2lzVmVydGljYWwpbz10aGlzLngoKTtlbHNlIGlmKHI9PT0ieSImJiF0aGlzLl9pc1ZlcnRpY2FsKW89dGhpcy55KCk7ZWxzZSByZXR1cm4gaTtpZighKG8mJm8uc2NhbGUmJm8uc2NhbGUgaW5zdGFuY2VvZiBkS3QuUXVhbnRpdGF0aXZlU2NhbGUpKXJldHVybiBpO3ZhciBhPW8uc2NhbGUscz10aGlzLl9iYXJQaXhlbFRoaWNrbmVzcygpO3JldHVybiBpPWkubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBQYXQuZXh0ZW50KFthLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzBdKSxzKSksYS5pbnZlcnQobi5fZ2V0UG9zaXRpb25BdHRyKGEuc2NhbGUobFswXSkscykrcyksYS5pbnZlcnQobi5fZ2V0UG9zaXRpb25BdHRyKGEuc2NhbGUobFsxXSkscykpLGEuaW52ZXJ0KG4uX2dldFBvc2l0aW9uQXR0cihhLnNjYWxlKGxbMV0pLHMpK3MpXSl9KSxpfSx0LnByb3RvdHlwZS5fZ2V0UG9zaXRpb25BdHRyPWZ1bmN0aW9uKHIsbil7c3dpdGNoKHRoaXMuX2lzVmVydGljYWx8fChyLT1uLG4qPS0xKSx0aGlzLl9iYXJBbGlnbm1lbnQpe2Nhc2Uic3RhcnQiOnJldHVybiByO2Nhc2UiZW5kIjpyZXR1cm4gci1uO2Nhc2UibWlkZGxlIjpkZWZhdWx0OnJldHVybiByLW4vMn19LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKSxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG89dGhpcy5kYXRhc2V0cygpLnNvbWUoZnVuY3Rpb24oYSl7cmV0dXJuIG4uZ2V0KGEpLnNvbWUoZnVuY3Rpb24ocyxsKXtyZXR1cm4gcz09bnVsbD8hMTpyLl9kcmF3TGFiZWwocyxsLGEsaSl9KX0pO3RoaXMuX2hpZGVCYXJzSWZBbnlBcmVUb29XaWRlJiZvJiZ0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gci5fbGFiZWxDb25maWcuZ2V0KGEpLmxhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKX0pfSx0LnByb3RvdHlwZS5fZHJhd0xhYmVsPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMuX2xhYmVsQ29uZmlnLmdldChpKSxzPWEubGFiZWxBcmVhLGw9YS5tZWFzdXJlcixjPWEud3JpdGVyLHU9dGhpcy5sZW5ndGgoKS5hY2Nlc3NvcixoPXUocixuLGkpLGY9dGhpcy5sZW5ndGgoKS5zY2FsZSxwPWYhPW51bGw/Zi5zY2FsZShoKTpoLGQ9ZiE9bnVsbD9mLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKTp0aGlzLmJhc2VsaW5lVmFsdWUoKSxnPXt4Om8ueChyLG4saSkseTpvLnkocixuLGkpfSxfPXt3aWR0aDpvLndpZHRoKHIsbixpKSxoZWlnaHQ6by5oZWlnaHQocixuLGkpfSx5PXRoaXMuX2xhYmVsRm9ybWF0dGVyKGgscixuLGkpLHg9bC5tZWFzdXJlKHkpLGI9dGhpcy5fc2hvdWxkU2hvd0xhYmVsT25CYXIoZyxfLHgpLFM9dGhpcy5faXNWZXJ0aWNhbD9wPD1kOnA8ZCxDPXRoaXMuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcyhnLF8seCxiLFMpLFA9Qy5jb250YWluZXJEaW1lbnNpb25zLGs9Qy5sYWJlbENvbnRhaW5lck9yaWdpbixPPUMubGFiZWxPcmlnaW4sRD1DLmFsaWdubWVudCxCPW8uZmlsbChyLG4saSksST10aGlzLl9jcmVhdGVMYWJlbENvbnRhaW5lcihzLGssTyx4LGIsQiksTD17eEFsaWduOkQueCx5QWxpZ246RC55fTtjLndyaXRlKHksUC53aWR0aCxQLmhlaWdodCxMLEkubm9kZSgpKTt2YXIgUj10aGlzLl9pc1ZlcnRpY2FsP18ud2lkdGg8eC53aWR0aDpfLmhlaWdodDx4LmhlaWdodDtyZXR1cm4gUn0sdC5wcm90b3R5cGUuX3Nob3VsZFNob3dMYWJlbE9uQmFyPWZ1bmN0aW9uKHIsbixpKXtpZih0aGlzLl9sYWJlbHNQb3NpdGlvbj09PUd1LkxhYmVsc1Bvc2l0aW9uLm91dHNpZGUpcmV0dXJuITE7dmFyIG89dGhpcy5faXNWZXJ0aWNhbD9yLnk6ci54LGE9dGhpcy5faXNWZXJ0aWNhbD9uLmhlaWdodDpuLndpZHRoLHM9dGhpcy5faXNWZXJ0aWNhbD90aGlzLmhlaWdodCgpOnRoaXMud2lkdGgoKSxsPXRoaXMuX2lzVmVydGljYWw/aS5oZWlnaHQ6aS53aWR0aCxjPW8rYSx1PWE7cmV0dXJuIGM+cz91PXMtbzpvPDAmJih1PWMpLGwrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVI8PXV9LHQucHJvdG90eXBlLl9jYWxjdWxhdGVMYWJlbFByb3BlcnRpZXM9ZnVuY3Rpb24ocixuLGksbyxhKXt2YXIgcz10aGlzLGw9dGhpcy5faXNWZXJ0aWNhbD9yLnk6ci54LGM9dGhpcy5faXNWZXJ0aWNhbD9uLmhlaWdodDpuLndpZHRoLHU9dGhpcy5faXNWZXJ0aWNhbD9pLmhlaWdodDppLndpZHRoLGg9ImNlbnRlciIsZj1jLHA9bCxkPWwsZz1mdW5jdGlvbihfKXtzd2l0Y2goXyl7Y2FzZSJ0b3BMZWZ0IjpoPXMuX2lzVmVydGljYWw/InRvcCI6ImxlZnQiLHArPXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLGQrPXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSO3JldHVybjtjYXNlImNlbnRlciI6ZCs9KGMrdSkvMjtyZXR1cm47Y2FzZSJib3R0b21SaWdodCI6aD1zLl9pc1ZlcnRpY2FsPyJib3R0b20iOiJyaWdodCIscC09dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIsZCs9Zi10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUi11O3JldHVybn19O2lmKG8pc3dpdGNoKHRoaXMuX2xhYmVsc1Bvc2l0aW9uKXtjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLnN0YXJ0OmcoYT8iYm90dG9tUmlnaHQiOiJ0b3BMZWZ0Iik7YnJlYWs7Y2FzZSBHdS5MYWJlbHNQb3NpdGlvbi5taWRkbGU6ZygiY2VudGVyIik7YnJlYWs7Y2FzZSBHdS5MYWJlbHNQb3NpdGlvbi5lbmQ6ZyhhPyJ0b3BMZWZ0IjoiYm90dG9tUmlnaHQiKTticmVha31lbHNlIGE/KGg9dGhpcy5faXNWZXJ0aWNhbD8idG9wIjoibGVmdCIsZj1jK3QuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK3UscC09dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxkLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUit1KTooaD10aGlzLl9pc1ZlcnRpY2FsPyJib3R0b20iOiJyaWdodCIsZj1jK3QuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK3UsZCs9Yyt0Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUik7cmV0dXJue2NvbnRhaW5lckRpbWVuc2lvbnM6e3dpZHRoOnRoaXMuX2lzVmVydGljYWw/bi53aWR0aDpmLGhlaWdodDp0aGlzLl9pc1ZlcnRpY2FsP2Y6bi5oZWlnaHR9LGxhYmVsQ29udGFpbmVyT3JpZ2luOnt4OnRoaXMuX2lzVmVydGljYWw/ci54OnAseTp0aGlzLl9pc1ZlcnRpY2FsP3A6ci55fSxsYWJlbE9yaWdpbjp7eDp0aGlzLl9pc1ZlcnRpY2FsP3IueCtuLndpZHRoLzItaS53aWR0aC8yOmQseTp0aGlzLl9pc1ZlcnRpY2FsP2Q6ci55K24uaGVpZ2h0LzItaS5oZWlnaHQvMn0sYWxpZ25tZW50Ont4OnRoaXMuX2lzVmVydGljYWw/ImNlbnRlciI6aCx5OnRoaXMuX2lzVmVydGljYWw/aDoiY2VudGVyIn19fSx0LnByb3RvdHlwZS5fY3JlYXRlTGFiZWxDb250YWluZXI9ZnVuY3Rpb24ocixuLGksbyxhLHMpe3ZhciBsPXIuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbi54KyIsICIrbi55KyIpIik7aWYoYSl7bC5jbGFzc2VkKCJvbi1iYXItbGFiZWwiLCEwKTt2YXIgYz14bC5Db2xvci5jb250cmFzdCgid2hpdGUiLHMpKjEuNjx4bC5Db2xvci5jb250cmFzdCgiYmxhY2siLHMpO2wuY2xhc3NlZChjPyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiLCEwKX1lbHNlIGwuY2xhc3NlZCgib2ZmLWJhci1sYWJlbCIsITApO3JldHVybiBsfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGk9dGhpcy5sZW5ndGgoKS5zY2FsZSxvPWkuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpLGE9dGhpcy5faXNWZXJ0aWNhbD8ieSI6IngiLHM9dGhpcy5faXNWZXJ0aWNhbD8iaGVpZ2h0Ijoid2lkdGgiO25bYV09ZnVuY3Rpb24oKXtyZXR1cm4gb30sbltzXT1mdW5jdGlvbigpe3JldHVybiAwfSxyLnB1c2goe2F0dHJUb1Byb2plY3RvcjpuLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKG1LdC5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IobUt0LkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLGk9dGhpcy5sZW5ndGgoKS5zY2FsZSxvPWkuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpLGE9dGhpcy5faXNWZXJ0aWNhbD8ieSI6IngiLHM9dGhpcy5faXNWZXJ0aWNhbD8ieCI6InkiLGw9dUIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5wb3NpdGlvbigpKSxjPXVCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMubGVuZ3RoKCkpLHU9ZnVuY3Rpb24oZCxnLF8pe3JldHVybiBNYXRoLmFicyhvLWMoZCxnLF8pKX0saD1uW3QuX0JBUl9USElDS05FU1NfS0VZXSxmPW4uZ2FwLHA9Zj09bnVsbD9oOmZ1bmN0aW9uKGQsZyxfKXt2YXIgeT1oKGQsZyxfKTtyZXR1cm4geTx0Ll9CQVJfR0FQTEVTU19USFJFU0hPTERfUFg/eTp5LWYoZCxnLF8pfTtyZXR1cm4gbi53aWR0aD10aGlzLl9pc1ZlcnRpY2FsP3A6dSxuLmhlaWdodD10aGlzLl9pc1ZlcnRpY2FsP3U6cCxuW2FdPWZ1bmN0aW9uKGQsZyxfKXt2YXIgeT1jKGQsZyxfKTtyZXR1cm4geT5vP286eX0sbltzXT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIHIuX2dldFBvc2l0aW9uQXR0cihsKGQsZyxfKSxoKGQsZyxfKSl9LG59LHQucHJvdG90eXBlLl91cGRhdGVUaGlja25lc3NBdHRyPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMucG9zaXRpb24oKSxpPXRoaXMuYmFyRW5kKCk7biE9bnVsbCYmaSE9bnVsbD8odGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz0hMSx0aGlzLmF0dHIodC5fQkFSX1RISUNLTkVTU19LRVksZnVuY3Rpb24obyxhLHMpe3ZhciBsPW4uYWNjZXNzb3IobyxhLHMpLGM9aS5hY2Nlc3NvcihvLGEscyk7cmV0dXJuIGw9bi5zY2FsZT9uLnNjYWxlLnNjYWxlKGwpOmwsYz1pLnNjYWxlP2kuc2NhbGUuc2NhbGUoYyk6YyxNYXRoLmFicyhjLWwpfSkpOih0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwLHRoaXMuYXR0cih0Ll9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbigpe3JldHVybiByLl9iYXJQaXhlbFRoaWNrbmVzcygpfSkpfSx0LnByb3RvdHlwZS5fYmFyUGl4ZWxUaGlja25lc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcyYmdGhpcy5fcHJvamVjdG9yc1JlYWR5KCk/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzKHRoaXMucG9zaXRpb24oKSx0aGlzLmRhdGFzZXRzKCksdGhpcy5faXNWZXJ0aWNhbD90aGlzLndpZHRoKCk6dGhpcy5oZWlnaHQoKSk6MH0sdC5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24ocil7aWYocj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKSwhdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpcmV0dXJuW107dmFyIG49ZS5wcm90b3R5cGUuZW50aXRpZXMuY2FsbCh0aGlzLHIpO3JldHVybiBufSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0O3JldHVybiB0aGlzLl9waXhlbEJvdW5kcyhuLGksbyl9LHQucHJvdG90eXBlLl9waXhlbEJvdW5kcz1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJue3g6by54KHIsbixpKSx5Om8ueShyLG4saSksd2lkdGg6by53aWR0aChyLG4saSksaGVpZ2h0Om8uaGVpZ2h0KHIsbixpKX19LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLl9waXhlbEJvdW5kcyhyLG4saSksYT0odGhpcy5faXNWZXJ0aWNhbD91Qi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6dUIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpKShyLG4saSkscz0odGhpcy5faXNWZXJ0aWNhbD90aGlzLnkoKS5zY2FsZTp0aGlzLngoKS5zY2FsZSkuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpO3JldHVybiB0aGlzLl9waXhlbFBvaW50QmFyKGEscyxvKX0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnRCYXI9ZnVuY3Rpb24ocixuLGkpe3ZhciBvLGE7cmV0dXJuIHRoaXMuX2lzVmVydGljYWw/KG89aS54K2kud2lkdGgvMixhPXI8PW4/aS55OmkueStpLmhlaWdodCk6KG89cj49bj9pLngraS53aWR0aDppLngsYT1pLnkraS5oZWlnaHQvMikse3g6byx5OmF9fSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtlLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbil9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPW5ldyB4bC5NYXAsaT10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxvPXRoaXMud2lkdGgoKSxhPXRoaXMuaGVpZ2h0KCk7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3ZhciBsPXMuZGF0YSgpLm1hcChmdW5jdGlvbihjLHUpe3ZhciBoPXIuX2lzRGF0dW1PblNjcmVlbihpLG8sYSxjLHUscyk7cmV0dXJuIGg/YzpudWxsfSk7bi5zZXQocyxsKX0pLG59LHQucHJvdG90eXBlLl9pc0RhdHVtT25TY3JlZW49ZnVuY3Rpb24ocixuLGksbyxhLHMpe3ZhciBsPXIueChvLGEscyksYz1yLnkobyxhLHMpLHU9ci53aWR0aChvLGEscyksaD1yLmhlaWdodChvLGEscyksZj14bC5NYXRoLmlzVmFsaWROdW1iZXIobCkmJnhsLk1hdGguaXNWYWxpZE51bWJlcihjKSYmeGwuTWF0aC5pc1ZhbGlkTnVtYmVyKHUpJiZ4bC5NYXRoLmlzVmFsaWROdW1iZXIoaCk7cmV0dXJuIGY/eGwuTWF0aC5ib3VuZHNJbnRlcnNlY3RzKGwsYyx1LGgsMCwwLG4saSk6ITF9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2xhYmVsQ29uZmlnLmdldChuKS5tZWFzdXJlci5yZXNldCgpfSl9LHQuX0JBUl9USElDS05FU1NfUkFUSU89Ljk1LHQuX0JBUl9HQVBMRVNTX1RIUkVTSE9MRF9QWD0zLHQuX1NJTkdMRV9CQVJfRElNRU5TSU9OX1JBVElPPS40LHQuX0JBUl9BUkVBX0NMQVNTPSJiYXItYXJlYSIsdC5fQkFSX0VORF9LRVk9ImJhckVuZCIsdC5fQkFSX1RISUNLTkVTU19LRVk9IndpZHRoIix0Ll9MQUJFTF9BUkVBX0NMQVNTPSJiYXItbGFiZWwtdGV4dC1hcmVhIix0Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUj0xMCx0fShRVmUuWFlQbG90KTtHdS5CYXI9TGF0O2Z1bmN0aW9uIHRVZShlLHQscil7dmFyIG4saT1lLnNjYWxlO2lmKGkgaW5zdGFuY2VvZiBJYXQuQ2F0ZWdvcnkpbj1pLnJhbmdlQmFuZCgpO2Vsc2V7dmFyIG89ZS5hY2Nlc3NvcixhPVBhdC5zZXQoeGwuQXJyYXkuZmxhdHRlbih0Lm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYy5kYXRhKCkubWFwKGZ1bmN0aW9uKHUsaCl7cmV0dXJuIG8odSxoLGMpfSkuZmlsdGVyKGZ1bmN0aW9uKHUpe3JldHVybiB1IT1udWxsfSkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiB1LnZhbHVlT2YoKX0pfSkpKS52YWx1ZXMoKS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuK2N9KTthLnNvcnQoZnVuY3Rpb24oYyx1KXtyZXR1cm4gYy11fSk7dmFyIHM9YS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGkuc2NhbGUoYyl9KSxsPVBhdC5wYWlycyhzKTtuPXhsLk1hdGgubWluKGwsZnVuY3Rpb24oYyx1KXtyZXR1cm4gTWF0aC5hYnMoY1sxXS1jWzBdKX0scipMYXQuX1NJTkdMRV9CQVJfRElNRU5TSU9OX1JBVElPKSxuKj1MYXQuX0JBUl9USElDS05FU1NfUkFUSU99cmV0dXJuIG59fSk7dmFyIF9LdD1IKFJhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZVVlPShkZSgpLFV0KHBlKSksclVlPWtzKCksblVlPUZlKCksZ0t0PV80KCksaVVlPXJzKCksb1VlPWZ1bmN0aW9uKGUpe2VVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSJ2ZXJ0aWNhbCIpO3ZhciBuPWUuY2FsbCh0aGlzLHIpfHx0aGlzO3JldHVybiBuLl9jbHVzdGVyT2Zmc2V0cz1uZXcgblVlLk1hcCxufXJldHVybiB0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLl9tYWtlSW5uZXJTY2FsZSgpLG89ZnVuY3Rpb24obCxjKXtyZXR1cm4gaS5yYW5nZUJhbmQoKX07bi53aWR0aD10aGlzLl9pc1ZlcnRpY2FsP286bi53aWR0aCxuLmhlaWdodD10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om87dmFyIGE9bi54LHM9bi55O3JldHVybiBuLng9dGhpcy5faXNWZXJ0aWNhbD9mdW5jdGlvbihsLGMsdSl7cmV0dXJuIGEobCxjLHUpK3IuX2NsdXN0ZXJPZmZzZXRzLmdldCh1KX06ZnVuY3Rpb24obCxjLHUpe3JldHVybiBhKGwsYyx1KX0sbi55PXRoaXMuX2lzVmVydGljYWw/ZnVuY3Rpb24obCxjLHUpe3JldHVybiBzKGwsYyx1KX06ZnVuY3Rpb24obCxjLHUpe3JldHVybiBzKGwsYyx1KStyLl9jbHVzdGVyT2Zmc2V0cy5nZXQodSl9LG59LHQucHJvdG90eXBlLl91cGRhdGVDbHVzdGVyUG9zaXRpb249ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fbWFrZUlubmVyU2NhbGUoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpLG8pe3JldHVybiByLl9jbHVzdGVyT2Zmc2V0cy5zZXQoaSxuLnNjYWxlKFN0cmluZyhvKSktbi5yYW5nZUJhbmQoKS8yKX0pfSx0LnByb3RvdHlwZS5fbWFrZUlubmVyU2NhbGU9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgclVlLkNhdGVnb3J5O3IuZG9tYWluKHRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24oaSxvKXtyZXR1cm4gU3RyaW5nKG8pfSkpO3ZhciBuPWlVZS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmF0dHIoZ0t0LkJhci5fQkFSX1RISUNLTkVTU19LRVkpKTtyZXR1cm4gci5yYW5nZShbMCxuKG51bGwsMCxudWxsKV0pLHJ9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZUNsdXN0ZXJQb3NpdGlvbigpLGUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyl9LHR9KGdLdC5CYXIpO1JhdC5DbHVzdGVyZWRCYXI9b1VlfSk7dmFyIHlLdD1IKERhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYVVlPShkZSgpLFV0KHBlKSkseTQ9KEVyKCksVXQoTXIpKSxOYXQ9X2woKSxzVWU9TGYoKSxsVWU9QnUoKSxjVWU9a3MoKSxWMT1GZSgpLHVVZT1wYXQoKSxoVWU9bWF0KCksZlVlPVV1KCkscFVlPUNGKCksTWQ9cnMoKSxkVWU9ZnVuY3Rpb24oZSl7YVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX3N0YXJ0QW5nbGU9MCxyLl9lbmRBbmdsZT0yKk1hdGguUEksci5fbGFiZWxGb3JtYXR0ZXI9bFVlLmlkZW50aXR5KCksci5fbGFiZWxzRW5hYmxlZD0hMSxyLmlubmVyUmFkaXVzKDApLHIub3V0ZXJSYWRpdXMoZnVuY3Rpb24oKXt2YXIgbj1yLl9waWVDZW50ZXIoKTtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoci53aWR0aCgpLW4ueCxuLngpLE1hdGgubWF4KHIuaGVpZ2h0KCktbi55LG4ueSkpfSksci5hZGRDbGFzcygicGllLXBsb3QiKSxyLmF0dHIoImZpbGwiLGZ1bmN0aW9uKG4saSl7cmV0dXJuIFN0cmluZyhpKX0sbmV3IGNVZS5Db2xvciksci5fc3Ryb2tlRHJhd2Vycz1uZXcgVjEuTWFwLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fc3Ryb2tlRHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBuLmF0dGFjaFRvKHIuX3JlbmRlckFyZWEpfSl9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2UucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKTt2YXIgbz10aGlzLl9waWVDZW50ZXIoKTt0aGlzLl9yZW5kZXJBcmVhLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28ueCsiLCIrby55KyIpIik7dmFyIGE9TWF0aC5taW4oTWF0aC5tYXgodGhpcy53aWR0aCgpLW8ueCxvLngpLE1hdGgubWF4KHRoaXMuaGVpZ2h0KCktby55LG8ueSkpO3JldHVybiB0aGlzLmlubmVyUmFkaXVzKCkuc2NhbGUhPW51bGwmJnRoaXMuaW5uZXJSYWRpdXMoKS5zY2FsZS5yYW5nZShbMCxhXSksdGhpcy5vdXRlclJhZGl1cygpLnNjYWxlIT1udWxsJiZ0aGlzLm91dGVyUmFkaXVzKCkuc2NhbGUucmFuZ2UoWzAsYV0pLHRoaXN9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe2lmKHRoaXMuZGF0YXNldHMoKS5sZW5ndGg9PT0xKXJldHVybiBWMS5XaW5kb3cud2FybigiT25seSBvbmUgZGF0YXNldCBpcyBzdXBwb3J0ZWQgaW4gUGllIHBsb3RzIiksdGhpczt0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSxlLnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMscik7dmFyIG49bmV3IGhVZS5BcmNPdXRsaW5lU1ZHRHJhd2VyO3JldHVybiB0aGlzLl9pc1NldHVwJiZuLmF0dGFjaFRvKHRoaXMuX3JlbmRlckFyZWEpLHRoaXMuX3N0cm9rZURyYXdlcnMuc2V0KHIsbiksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUucmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcz1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzLmNhbGwodGhpcyxyKSx0aGlzLl9zdHJva2VEcmF3ZXJzLmdldChyKS5yZW1vdmUoKX0sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzLl9zdHJva2VEcmF3ZXJzLmRlbGV0ZShyKSx0aGlzLl9zdGFydEFuZ2xlcz1bXSx0aGlzLl9lbmRBbmdsZXM9W10sdGhpc30sdC5wcm90b3R5cGUuc2VsZWN0aW9ucz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3I9PT12b2lkIDAmJihyPXRoaXMuZGF0YXNldHMoKSk7dmFyIGk9ZS5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMscikubm9kZXMoKTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPW4uX3N0cm9rZURyYXdlcnMuZ2V0KG8pO2EhPW51bGwmJmkucHVzaC5hcHBseShpLGEuZ2V0VmlzdWFsUHJpbWl0aXZlcygpKX0pLHk0LnNlbGVjdEFsbChpKX0sdC5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGUuY2FsbCh0aGlzKSx0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpfSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmVWUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHVVZS5BcmNTVkdEcmF3ZXJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHBVZS53YXJuKCJjYW52YXMgcmVuZGVyZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBQaWUgUGxvdCEiKSxudWxsfSl9LHQucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKTt2YXIgaT1lLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMscik7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKG8pe28ucG9zaXRpb24ueCs9bi53aWR0aCgpLzIsby5wb3NpdGlvbi55Kz1uLmhlaWdodCgpLzI7dmFyIGE9eTQuc2VsZWN0KG4uX3N0cm9rZURyYXdlcnMuZ2V0KG8uZGF0YXNldCkuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleChvLmluZGV4KSkscz1vO3JldHVybiBzLnN0cm9rZVNlbGVjdGlvbj1hLHN9KX0sdC5wcm90b3R5cGUuc2VjdG9yVmFsdWU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TRUNUT1JfVkFMVUVfS0VZKToodGhpcy5fYmluZFByb3BlcnR5KHQuX1NFQ1RPUl9WQUxVRV9LRVkscixuKSx0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5pbm5lclJhZGl1cz1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX0lOTkVSX1JBRElVU19LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkodC5fSU5ORVJfUkFESVVTX0tFWSxyLG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fT1VURVJfUkFESVVTX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9PVVRFUl9SQURJVVNfS0VZLHIsbiksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuc3RhcnRBbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zdGFydEFuZ2xlOih0aGlzLl9zdGFydEFuZ2xlPXIsdGhpcy5fdXBkYXRlUGllQW5nbGVzKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuZW5kQW5nbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZW5kQW5nbGU6KHRoaXMuX2VuZEFuZ2xlPXIsdGhpcy5fdXBkYXRlUGllQW5nbGVzKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUubGFiZWxzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUubGFiZWxGb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxGb3JtYXR0ZXI6KHRoaXMuX2xhYmVsRm9ybWF0dGVyPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj17eDp0aGlzLndpZHRoKCkvMix5OnRoaXMuaGVpZ2h0KCkvMn0saT17eDpyLngtbi54LHk6ci55LW4ueX0sbz10aGlzLl9zbGljZUluZGV4Rm9yUG9pbnQoaSk7cmV0dXJuIG89PW51bGw/W106W3RoaXMuZW50aXRpZXMoKVtvXV19LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLGk9TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5pbm5lclJhZGl1cygpKSxvPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMub3V0ZXJSYWRpdXMoKSk7cmV0dXJuIG4uZD1mdW5jdGlvbihhLHMsbCl7cmV0dXJuIHk0LmFyYygpLmlubmVyUmFkaXVzKGkoYSxzLGwpKS5vdXRlclJhZGl1cyhvKGEscyxsKSkuc3RhcnRBbmdsZShyLl9zdGFydEFuZ2xlc1tzXSkuZW5kQW5nbGUoci5fZW5kQW5nbGVzW3NdKShhLHMpfSxufSx0LnByb3RvdHlwZS5fdXBkYXRlUGllQW5nbGVzPWZ1bmN0aW9uKCl7aWYodGhpcy5zZWN0b3JWYWx1ZSgpIT1udWxsJiZ0aGlzLmRhdGFzZXRzKCkubGVuZ3RoIT09MCl7dmFyIHI9TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zZWN0b3JWYWx1ZSgpKSxuPXRoaXMuZGF0YXNldHMoKVswXSxpPXRoaXMuX2dldERhdGFUb0RyYXcoKS5nZXQobiksbz15NC5waWUoKS5zb3J0KG51bGwpLnN0YXJ0QW5nbGUodGhpcy5fc3RhcnRBbmdsZSkuZW5kQW5nbGUodGhpcy5fZW5kQW5nbGUpLnZhbHVlKGZ1bmN0aW9uKGEscyl7cmV0dXJuIHIoYSxzLG4pfSkoaSk7dGhpcy5fc3RhcnRBbmdsZXM9by5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuc3RhcnRBbmdsZX0pLHRoaXMuX2VuZEFuZ2xlcz1vLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5lbmRBbmdsZX0pfX0sdC5wcm90b3R5cGUuX3BpZUNlbnRlcj1mdW5jdGlvbigpe3ZhciByPXRoaXMuX3N0YXJ0QW5nbGU8dGhpcy5fZW5kQW5nbGU/dGhpcy5fc3RhcnRBbmdsZTp0aGlzLl9lbmRBbmdsZSxuPXRoaXMuX3N0YXJ0QW5nbGU8dGhpcy5fZW5kQW5nbGU/dGhpcy5fZW5kQW5nbGU6dGhpcy5fc3RhcnRBbmdsZSxpPU1hdGguc2luKHIpLG89TWF0aC5jb3MociksYT1NYXRoLnNpbihuKSxzPU1hdGguY29zKG4pLGwsYyx1LGg7cmV0dXJuIGk+PTAmJmE+PTA/bz49MCYmcz49MD8obD1vLGM9MCxoPTAsdT1hKTpvPDAmJnM8MD8obD0wLGM9LXMsaD0wLHU9aSk6bz49MCYmczwwPyhsPW8sYz0tcyxoPTAsdT1pKTpvPDAmJnM+PTAmJihsPTEsYz0xLGg9MSx1PU1hdGgubWF4KGksYSkpOmk+PTAmJmE8MD9vPj0wJiZzPj0wPyhsPU1hdGgubWF4KG8scyksYz0xLGg9MSx1PTEpOm88MCYmczwwPyhsPTAsYz0xLGg9LWEsdT1pKTpvPj0wJiZzPDA/KGw9byxjPTEsaD0tYSx1PTEpOm88MCYmcz49MCYmKGw9cyxjPTEsaD0xLHU9aSk6aTwwJiZhPj0wP28+PTAmJnM+PTA/KGw9MSxjPTAsaD0taSx1PWEpOm88MCYmczwwPyhsPTEsYz1NYXRoLm1heCgtbywtcyksaD0xLHU9MSk6bz49MCYmczwwPyhsPTEsYz0tcyxoPS1pLHU9MSk6bzwwJiZzPj0wJiYobD0xLGM9LW8saD0xLHU9YSk6aTwwJiZhPDAmJihvPj0wJiZzPj0wPyhsPXMsYz0wLGg9LWksdT0wKTpvPDAmJnM8MD8obD0wLGM9LW8saD0tYSx1PTApOm8+PTAmJnM8MD8obD0xLGM9MSxoPU1hdGgubWF4KG8sLXMpLHU9MSk6bzwwJiZzPj0wJiYobD1zLGM9LW8saD0xLHU9MCkpLHt4OmgrdT09MD8wOmgvKGgrdSkqdGhpcy53aWR0aCgpLHk6bCtjPT0wPzA6bC8obCtjKSp0aGlzLmhlaWdodCgpfX0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdy5jYWxsKHRoaXMpO2lmKHRoaXMuZGF0YXNldHMoKS5sZW5ndGg9PT0wKXJldHVybiByO3ZhciBuPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSksaT10aGlzLmRhdGFzZXRzKClbMF0sbz1yLmdldChpKSxhPW8uZmlsdGVyKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIHQuX2lzVmFsaWREYXRhKG4ocyxsLGkpKX0pO3JldHVybiByLnNldChpLGEpLHJ9LHQuX2lzVmFsaWREYXRhPWZ1bmN0aW9uKHIpe3JldHVybiBWMS5NYXRoLmlzVmFsaWROdW1iZXIocikmJnI+PTB9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpO2lmKCF0Ll9pc1ZhbGlkRGF0YShvKHIsbixpKSkpcmV0dXJue3g6TmFOLHk6TmFOfTt2YXIgYT1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpKHIsbixpKSxzPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMub3V0ZXJSYWRpdXMoKSkocixuLGkpLGw9KGErcykvMixjPXk0LnBpZSgpLnNvcnQobnVsbCkudmFsdWUoZnVuY3Rpb24ocCxkKXt2YXIgZz1vKHAsZCxpKTtyZXR1cm4gdC5faXNWYWxpZERhdGEoZyk/ZzowfSkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkoaS5kYXRhKCkpLHU9Y1tuXS5zdGFydEFuZ2xlLGg9Y1tuXS5lbmRBbmdsZSxmPSh1K2gpLzI7cmV0dXJue3g6bCpNYXRoLnNpbihmKSx5Oi1sKk1hdGguY29zKGYpfX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuX3JlbmRlckFyZWEuc2VsZWN0KCIubGFiZWwtYXJlYSIpLnJlbW92ZSgpLHRoaXMuX2xhYmVsc0VuYWJsZWQmJlYxLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scik7dmFyIGk9dGhpcy5fZ2VuZXJhdGVTdHJva2VEcmF3U3RlcHMoKSxvPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgcz1NZC5QbG90LmFwcGx5RHJhd1N0ZXBzKGksYSk7bi5fc3Ryb2tlRHJhd2Vycy5nZXQoYSkuZHJhdyhvLmdldChhKSxzKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVTdHJva2VEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm5be2F0dHJUb1Byb2plY3RvcjpyLGFuaW1hdG9yOm5ldyBzVWUuTnVsbH1dfSx0LnByb3RvdHlwZS5fc2xpY2VJbmRleEZvclBvaW50PWZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguc3FydChNYXRoLnBvdyhyLngsMikrTWF0aC5wb3coci55LDIpKSxpPU1hdGguYWNvcygtci55L24pO3IueDwwJiYoaT1NYXRoLlBJKjItaSk7Zm9yKHZhciBvLGE9MDthPHRoaXMuX3N0YXJ0QW5nbGVzLmxlbmd0aDthKyspaWYodGhpcy5fc3RhcnRBbmdsZXNbYV08aSYmdGhpcy5fZW5kQW5nbGVzW2FdPmkpe289YTticmVha31pZihvIT09dm9pZCAwKXt2YXIgcz10aGlzLmRhdGFzZXRzKClbMF0sbD1zLmRhdGEoKVtvXSxjPXRoaXMuaW5uZXJSYWRpdXMoKS5hY2Nlc3NvcihsLG8scyksdT10aGlzLm91dGVyUmFkaXVzKCkuYWNjZXNzb3IobCxvLHMpO2lmKG4+YyYmbjx1KXJldHVybiBvfXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fZHJhd0xhYmVscz1mdW5jdGlvbigpe2Zvcih2YXIgcj10aGlzLG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxhYmVsLWFyZWEiLCEwKSxvPW5ldyBOYXQuU3ZnQ29udGV4dChpLm5vZGUoKSksYT1uZXcgTmF0LkNhY2hlTWVhc3VyZXIobykscz1uZXcgTmF0LldyaXRlcihhLG8pLGw9dGhpcy5kYXRhc2V0cygpWzBdLGM9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChsKSx1PWMubGVuZ3RoLGg9ZnVuY3Rpb24oZCl7dmFyIGc9Y1tkXSxfPWYuc2VjdG9yVmFsdWUoKS5hY2Nlc3NvcihnLGQsbCk7aWYoIVYxLk1hdGguaXNWYWxpZE51bWJlcihfKSlyZXR1cm4iY29udGludWUiO189Zi5fbGFiZWxGb3JtYXR0ZXIoXyxnLGQsbCk7dmFyIHk9YS5tZWFzdXJlKF8pLHg9KGYuX2VuZEFuZ2xlc1tkXStmLl9zdGFydEFuZ2xlc1tkXSkvMixiPWYub3V0ZXJSYWRpdXMoKS5hY2Nlc3NvcihnLGQsbCk7Zi5vdXRlclJhZGl1cygpLnNjYWxlJiYoYj1mLm91dGVyUmFkaXVzKCkuc2NhbGUuc2NhbGUoYikpO3ZhciBTPWYuaW5uZXJSYWRpdXMoKS5hY2Nlc3NvcihnLGQsbCk7Zi5pbm5lclJhZGl1cygpLnNjYWxlJiYoUz1mLmlubmVyUmFkaXVzKCkuc2NhbGUuc2NhbGUoUykpO3ZhciBDPShiK1MpLzIsUD1NYXRoLnNpbih4KSpDLXkud2lkdGgvMixrPS1NYXRoLmNvcyh4KSpDLXkuaGVpZ2h0LzIsTz1be3g6UCx5Omt9LHt4OlAseTprK3kuaGVpZ2h0fSx7eDpQK3kud2lkdGgseTprfSx7eDpQK3kud2lkdGgseTprK3kuaGVpZ2h0fV0sRD1PLmV2ZXJ5KGZ1bmN0aW9uKHope3JldHVybiBNYXRoLmFicyh6LngpPD1yLndpZHRoKCkvMiYmTWF0aC5hYnMoei55KTw9ci5oZWlnaHQoKS8yfSk7aWYoRCl7dmFyIEI9Ty5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHIuX3NsaWNlSW5kZXhGb3JQb2ludCh6KX0pO0Q9Qi5ldmVyeShmdW5jdGlvbih6KXtyZXR1cm4gej09PWR9KX12YXIgST1uLmZpbGwoZyxkLGwpLEw9VjEuQ29sb3IuY29udHJhc3QoIndoaXRlIixJKSoxLjY8VjEuQ29sb3IuY29udHJhc3QoImJsYWNrIixJKSxSPWkuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUCsiLCIraysiKSIpLEY9TD8iZGFyay1sYWJlbCI6ImxpZ2h0LWxhYmVsIjtSLmNsYXNzZWQoRiwhMCksUi5zdHlsZSgidmlzaWJpbGl0eSIsRD8iaW5oZXJpdCI6ImhpZGRlbiIpLHMud3JpdGUoXyx5LndpZHRoLHkuaGVpZ2h0LHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSxSLm5vZGUoKSl9LGY9dGhpcyxwPTA7cDx1O3ArKyloKHApfSx0Ll9JTk5FUl9SQURJVVNfS0VZPSJpbm5lci1yYWRpdXMiLHQuX09VVEVSX1JBRElVU19LRVk9Im91dGVyLXJhZGl1cyIsdC5fU0VDVE9SX1ZBTFVFX0tFWT0ic2VjdG9yLXZhbHVlIix0fShNZC5QbG90KTtEYXQuUGllPWRVZX0pO3ZhciB2S3Q9SCh6YXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHphdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG1VZT0oZGUoKSxVdChwZSkpLGdVZT0oRXIoKSxVdChNcikpLE9hdD1fbCgpLF9VZT1MZigpLHlVZT1CMSgpLHZVZT1VdSgpLHhVZT1pQigpLGhCPWtzKCksT2M9RmUoKSxmQj1ycygpLGJVZT1IMSgpLHdVZT1mdW5jdGlvbihlKXttVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fbGFiZWxzRW5hYmxlZD0hMSxyLl9sYWJlbD1udWxsLHIuYW5pbWF0b3IoInJlY3RhbmdsZXMiLG5ldyBfVWUuTnVsbCksci5hZGRDbGFzcygicmVjdGFuZ2xlLXBsb3QiKSxyLmF0dHIoImZpbGwiLG5ldyBoQi5Db2xvcigpLnJhbmdlKClbMF0pLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHZVZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgeFVlLlJlY3RhbmdsZVNWR0RyYXdlcn0sZnVuY3Rpb24ocil7cmV0dXJuIG5ldyB5VWUuUmVjdGFuZ2xlQ2FudmFzRHJhd2VyKHIpfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPWZCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxvPW5bdC5fWDJfS0VZXSxhPWZCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPW5bdC5fWTJfS0VZXSxsPXRoaXMueCgpLnNjYWxlLGM9dGhpcy55KCkuc2NhbGU7cmV0dXJuIG8hPW51bGw/KG4ud2lkdGg9ZnVuY3Rpb24odSxoLGYpe3JldHVybiBNYXRoLmFicyhvKHUsaCxmKS1pKHUsaCxmKSl9LG4ueD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGgubWluKG8odSxoLGYpLGkodSxoLGYpKX0pOihuLndpZHRoPWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gci5fcmVjdGFuZ2xlV2lkdGgobCl9LG4ueD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIGkodSxoLGYpLS41Km4ud2lkdGgodSxoLGYpfSkscyE9bnVsbD8obi5oZWlnaHQ9ZnVuY3Rpb24odSxoLGYpe3JldHVybiBNYXRoLmFicyhzKHUsaCxmKS1hKHUsaCxmKSl9LG4ueT1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGgubWF4KHModSxoLGYpLGEodSxoLGYpKS1uLmhlaWdodCh1LGgsZil9KToobi5oZWlnaHQ9ZnVuY3Rpb24odSxoLGYpe3JldHVybiByLl9yZWN0YW5nbGVXaWR0aChjKX0sbi55PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gYSh1LGgsZiktLjUqbi5oZWlnaHQodSxoLGYpfSksZGVsZXRlIG5bdC5fWDJfS0VZXSxkZWxldGUgblt0Ll9ZMl9LRVldLG59LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKCJyZWN0YW5nbGVzIil9XX0sdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3JldHVybiByPT09IngyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ4Iik6cj09PSJ5MiI/ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcywieSIpOmUucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnguY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbixpKSxuIT1udWxsKXt2YXIgbz10aGlzLngyKCksYT1vJiZvLmFjY2Vzc29yO2EhPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVksYSxuLG8ucG9zdFNjYWxlKX1yZXR1cm4gbiBpbnN0YW5jZW9mIGhCLkNhdGVnb3J5JiZuLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCksdGhpc30sdC5wcm90b3R5cGUueDI9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9YMl9LRVkpO3ZhciBpPXRoaXMueCgpLG89aSYmaS5zY2FsZTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KHQuX1gyX0tFWSxyLG8sbiksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS55PWZ1bmN0aW9uKHIsbixpKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55LmNhbGwodGhpcyk7aWYobj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTplLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4saSksbiE9bnVsbCl7dmFyIG89dGhpcy55MigpLGE9byYmby5hY2Nlc3NvcjthIT1udWxsJiZ0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLGEsbixvLnBvc3RTY2FsZSl9cmV0dXJuIG4gaW5zdGFuY2VvZiBoQi5DYXRlZ29yeSYmbi5pbm5lclBhZGRpbmcoMCkub3V0ZXJQYWRkaW5nKDApLHRoaXN9LHQucHJvdG90eXBlLnkyPWZ1bmN0aW9uKHIsbil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWTJfS0VZKTt2YXIgaT10aGlzLnkoKSxvPWkmJmkuc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMl9LRVkscixvLG4pLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm4gdGhpcy5lbnRpdGllcygpLmZpbHRlcihmdW5jdGlvbihpKXt2YXIgbz1pLmRhdHVtLGE9aS5pbmRleCxzPWkuZGF0YXNldCxsPW4ueChvLGEscyksYz1uLnkobyxhLHMpLHU9bi53aWR0aChvLGEscyksaD1uLmhlaWdodChvLGEscyk7cmV0dXJuIGw8PXIueCYmci54PD1sK3UmJmM8PXIueSYmci55PD1jK2h9KX0sdC5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbihyKXt2YXIgbj1yLmRhdHVtLGk9ci5pbmRleCxvPXIuZGF0YXNldDtyZXR1cm4gdGhpcy5fZW50aXR5QkJveChuLGksbyx0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSl9LHQucHJvdG90eXBlLl9lbnRpdHlCQm94PWZ1bmN0aW9uKHIsbixpLG8pe3JldHVybnt4Om8ueChyLG4saSkseTpvLnkocixuLGkpLHdpZHRoOm8ud2lkdGgocixuLGkpLGhlaWdodDpvLmhlaWdodChyLG4saSl9fSx0LnByb3RvdHlwZS5sYWJlbD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbDoodGhpcy5fbGFiZWw9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsc0VuYWJsZWQ6KHRoaXMuX2xhYmVsc0VuYWJsZWQ9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiB0aGlzLngyKCkhPW51bGwmJihyLngyPWZCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueDIoKSkpLHRoaXMueTIoKSE9bnVsbCYmKHIueTI9ZkIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MigpKSkscn0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGE9by54KHIsbixpKSxzPW8ueShyLG4saSksbD1vLndpZHRoKHIsbixpKSxjPW8uaGVpZ2h0KHIsbixpKSx1PWErbC8yLGg9cytjLzI7cmV0dXJue3g6dSx5Omh9fSx0LnByb3RvdHlwZS5fcmVjdGFuZ2xlV2lkdGg9ZnVuY3Rpb24ocil7aWYociBpbnN0YW5jZW9mIGhCLkNhdGVnb3J5KXJldHVybiByLnJhbmdlQmFuZCgpO3ZhciBuPXI9PT10aGlzLngoKS5zY2FsZT90aGlzLngoKS5hY2Nlc3Nvcjp0aGlzLnkoKS5hY2Nlc3NvcixpPWdVZS5zZXQoT2MuQXJyYXkuZmxhdHRlbih0aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLmRhdGEoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gbih1LGgsYykudmFsdWVPZigpfSl9KSkpLnZhbHVlcygpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4rY30pLG89T2MuTWF0aC5taW4oaSwwKSxhPU9jLk1hdGgubWF4KGksMCkscz1yLnNjYWxlKG8pLGw9ci5zY2FsZShhKTtyZXR1cm4obC1zKS9NYXRoLmFicyhhLW8pfSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPW5ldyBPYy5NYXAsbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIG89aS5kYXRhKCkubWFwKGZ1bmN0aW9uKGEscyl7dmFyIGw9T2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4ueChhLHMsaSkpJiZPYy5NYXRoLmlzVmFsaWROdW1iZXIobi55KGEscyxpKSkmJk9jLk1hdGguaXNWYWxpZE51bWJlcihuLndpZHRoKGEscyxpKSkmJk9jLk1hdGguaXNWYWxpZE51bWJlcihuLmhlaWdodChhLHMsaSkpO3JldHVybiBsP2E6bnVsbH0pO3Iuc2V0KGksbyl9KSxyfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7dGhpcy5fcmVuZGVyQXJlYS5zZWxlY3RBbGwoIi5sYWJlbC1hcmVhIikucmVtb3ZlKCksdGhpcy5fbGFiZWxzRW5hYmxlZCYmdGhpcy5sYWJlbCgpIT1udWxsJiZPYy5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLl9kcmF3TGFiZWxzKCl9LHIpfSx0LnByb3RvdHlwZS5fZHJhd0xhYmVscz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9nZXREYXRhVG9EcmF3KCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oaSxvKXtyZXR1cm4gci5fZHJhd0xhYmVsKG4saSxvKX0pfSx0LnByb3RvdHlwZS5fZHJhd0xhYmVsPWZ1bmN0aW9uKHIsbixpKXtmb3IodmFyIG89dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxhYmVsLWFyZWEiLCEwKSxzPW5ldyBPYXQuU3ZnQ29udGV4dChhLm5vZGUoKSksbD1uZXcgT2F0LkNhY2hlTWVhc3VyZXIocyksYz1uZXcgT2F0LldyaXRlcihsLHMpLHU9dGhpcy54KCkuc2NhbGUucmFuZ2UoKSxoPXRoaXMueSgpLnNjYWxlLnJhbmdlKCksZj1NYXRoLm1pbi5hcHBseShudWxsLHUpLHA9TWF0aC5tYXguYXBwbHkobnVsbCx1KSxkPU1hdGgubWluLmFwcGx5KG51bGwsaCksZz1NYXRoLm1heC5hcHBseShudWxsLGgpLF89ci5nZXQobikseT1fLmxlbmd0aCx4PTA7eDx5O3grKyl7dmFyIGI9X1t4XTtpZihiIT1udWxsKXt2YXIgUz0iIit0aGlzLmxhYmVsKCkoYix4LG4pLEM9bC5tZWFzdXJlKFMpLFA9by54KGIseCxuKSxrPW8ueShiLHgsbiksTz1vLndpZHRoKGIseCxuKSxEPW8uaGVpZ2h0KGIseCxuKTtpZihDLmhlaWdodDw9RCYmQy53aWR0aDw9Tyl7dmFyIEI9KE8tQy53aWR0aCkvMixJPShELUMuaGVpZ2h0KS8yO1ArPUIsays9STt2YXIgTD17bWluOlAsbWF4OlArQy53aWR0aH0sUj17bWluOmssbWF4OmsrQy5oZWlnaHR9O2lmKEwubWluPGZ8fEwubWF4PnB8fFIubWluPGR8fFIubWF4Pmd8fHRoaXMuX292ZXJsYXlMYWJlbChMLFIseCxpLHIpKWNvbnRpbnVlO3ZhciBGPW8uZmlsbChiLHgsbiksej1PYy5Db2xvci5jb250cmFzdCgid2hpdGUiLEYpKjEuNjxPYy5Db2xvci5jb250cmFzdCgiYmxhY2siLEYpLFU9YS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitQKyIsIitrKyIpIiksVz16PyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiO1UuY2xhc3NlZChXLCEwKSxjLndyaXRlKFMsQy53aWR0aCxDLmhlaWdodCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIn0sVS5ub2RlKCkpfX19fSx0LnByb3RvdHlwZS5fb3ZlcmxheUxhYmVsPWZ1bmN0aW9uKHIsbixpLG8sYSl7Zm9yKHZhciBzPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGw9dGhpcy5kYXRhc2V0cygpLGM9bztjPGwubGVuZ3RoO2MrKylmb3IodmFyIHU9bFtjXSxoPWEuZ2V0KHUpLGY9aC5sZW5ndGgscD1jPT09bz9pKzE6MDtwPGY7cCsrKWlmKE9jLkRPTS5pbnRlcnNlY3RzQkJveChyLG4sdGhpcy5fZW50aXR5QkJveChoW3BdLHAsdSxzKSkpcmV0dXJuITA7cmV0dXJuITF9LHQuX1gyX0tFWT0ieDIiLHQuX1kyX0tFWT0ieTIiLHR9KGJVZS5YWVBsb3QpO3phdC5SZWN0YW5nbGU9d1VlfSk7dmFyIGJLdD1IKFZhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU1VlPShkZSgpLFV0KHBlKSksRmF0PV9sKCksTVVlPUJ1KCksRVVlPWpGKCksVFVlPVV1KCkseEt0PXhhdCgpLENVZT1MZigpLEFVZT1CMSgpLFBVZT1rcygpLEJhdD1GZSgpLEhhdD1JUygpLGJsPXJzKCksSVVlPUgxKCksTFVlPWZ1bmN0aW9uKGUpe1NVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IuX2xhYmVsRm9ybWF0dGVyPU1VZS5pZGVudGl0eSgpLHIuX2xhYmVsc0VuYWJsZWQ9ITEsci5hZGRDbGFzcygic2NhdHRlci1wbG90Iik7dmFyIG49bmV3IENVZS5FYXNpbmc7bi5zdGFydERlbGF5KDUpLG4uc3RlcER1cmF0aW9uKDI1MCksbi5tYXhUb3RhbER1cmF0aW9uKGJsLlBsb3QuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pLHIuYW5pbWF0b3IoSGF0LkFuaW1hdG9yLk1BSU4sbiksci5hdHRyKCJvcGFjaXR5IiwuNiksci5hdHRyKCJmaWxsIixuZXcgUFVlLkNvbG9yKCkucmFuZ2UoKVswXSksci5zaXplKDYpO3ZhciBpPUVVZS5jaXJjbGUoKTtyZXR1cm4gci5zeW1ib2woZnVuY3Rpb24oKXtyZXR1cm4gaX0pLHIuX2xhYmVsQ29uZmlnPW5ldyBCYXQuTWFwLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1lLnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcy5jYWxsKHRoaXMscik7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKG8pe3ZhciBhPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4uc2l6ZSgpKShvLmRhdHVtLG8uaW5kZXgsby5kYXRhc2V0KTtyZXR1cm4gby5kaWFtZXRlcj1hLG99KX0sdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3JldHVybiBuZXcgVFVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB4S3QuU3ltYm9sU1ZHRHJhd2VyfSxmdW5jdGlvbihpKXtyZXR1cm4gbmV3IEFVZS5DYW52YXNEcmF3ZXIoaSx4S3QubWFrZVN5bWJvbENhbnZhc0RyYXdTdGVwKHIsZnVuY3Rpb24oKXtyZXR1cm4gYmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zeW1ib2woKSl9LGZ1bmN0aW9uKCl7cmV0dXJuIGJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4uc2l6ZSgpKX0pKX0pfSx0LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fU0laRV9LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkodC5fU0laRV9LRVkscixuKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5zeW1ib2w9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fU1lNQk9MX0tFWSk6KHRoaXMuX3Byb3BlcnR5QmluZGluZ3Muc2V0KHQuX1NZTUJPTF9LRVkse2FjY2Vzc29yOnJ9KSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGk9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zeW1ib2woKSk7bi5kPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gaShvLGEscykoMCkobnVsbCl9LHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoSGF0LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiByLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihIYXQuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLG49YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLGk9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpO3JldHVybiByLng9bixyLnk9aSxyLnRyYW5zZm9ybT1mdW5jdGlvbihvLGEscyl7cmV0dXJuInRyYW5zbGF0ZSgiK24obyxhLHMpKyIsIitpKG8sYSxzKSsiKSJ9LHIuZD10aGlzLl9jb25zdHJ1Y3RTeW1ib2xHZW5lcmF0b3IoKSxyfSx0LnByb3RvdHlwZS5fY29uc3RydWN0U3ltYm9sR2VuZXJhdG9yPWZ1bmN0aW9uKCl7dmFyIHI9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zeW1ib2woKSksbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNpemUoKSk7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXtyZXR1cm4gcihpLG8sYSkobihpLG8sYSkpKG51bGwpfX0sdC5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbihyKXtyZXR1cm57eDpyLnBvc2l0aW9uLngtci5kaWFtZXRlci8yLHk6ci5wb3NpdGlvbi55LXIuZGlhbWV0ZXIvMix3aWR0aDpyLmRpYW1ldGVyLGhlaWdodDpyLmRpYW1ldGVyfX0sdC5wcm90b3R5cGUuX2VudGl0eVZpc2libGVPblBsb3Q9ZnVuY3Rpb24ocixuKXt2YXIgaT17bWluOm4udG9wTGVmdC54LG1heDpuLmJvdHRvbVJpZ2h0Lnh9LG89e21pbjpuLnRvcExlZnQueSxtYXg6bi5ib3R0b21SaWdodC55fSxhPXRoaXMuX2VudGl0eUJvdW5kcyhyKTtyZXR1cm4gQmF0LkRPTS5pbnRlcnNlY3RzQkJveChpLG8sYSl9LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dmFyIG49YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLGk9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLG89YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zaXplKCkpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3ZhciBzPWEuZGF0dW0sbD1hLmluZGV4LGM9YS5kYXRhc2V0LHU9bihzLGwsYyksaD1pKHMsbCxjKSxmPW8ocyxsLGMpO3JldHVybiB1LWYvMjw9ci54JiZyLng8PXUrZi8yJiZoLWYvMjw9ci55JiZyLnk8PWgrZi8yfSl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD1yLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPWUucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLHIpLGk9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKHQuX0xBQkVMX0FSRUFfQ0xBU1MsITApLG89bmV3IEZhdC5TdmdDb250ZXh0KGkubm9kZSgpKSxhPW5ldyBGYXQuQ2FjaGVNZWFzdXJlcihvKSxzPW5ldyBGYXQuV3JpdGVyKGEsbyk7cmV0dXJuIHRoaXMuX2xhYmVsQ29uZmlnLnNldChyLHtsYWJlbEFyZWE6aSxtZWFzdXJlcjphLHdyaXRlcjpzfSksbn0sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcz1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzLmNhbGwodGhpcyxyKTt2YXIgbj10aGlzLl9sYWJlbENvbmZpZy5nZXQocik7biE9bnVsbCYmKG4ubGFiZWxBcmVhLnJlbW92ZSgpLHRoaXMuX2xhYmVsQ29uZmlnLmRlbGV0ZShyKSl9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpKXtyZXR1cm4gbi5fbGFiZWxDb25maWcuZ2V0KGkpLmxhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKX0pLHRoaXMuX2xhYmVsc0VuYWJsZWQmJkJhdC5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLl9kcmF3TGFiZWxzKCl9LHIpfSx0LnByb3RvdHlwZS5fZHJhd0xhYmVscz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9nZXREYXRhVG9EcmF3KCksaT10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihvKXtmb3IodmFyIGE9bi5nZXQobykscz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIGM9YVtsXTtjIT1udWxsJiZyLl9kcmF3TGFiZWwoYyxsLG8saSl9fSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGksbyl7aWYoci5sYWJlbCE9bnVsbCl7dmFyIGE9dGhpcy5fbGFiZWxDb25maWcuZ2V0KGkpLHM9YS5sYWJlbEFyZWEsbD1hLm1lYXN1cmVyLGM9YS53cml0ZXIsdT17eDpvLngocixuLGkpLHk6by55KHIsbixpKX0saD1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNpemUoKSksZj1oKHIsbixpKSxwPXRoaXMuX2xhYmVsRm9ybWF0dGVyKHIubGFiZWwscixuLGkpLGQ9bC5tZWFzdXJlKHApLGc9dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKHUsZixkKSxfPWcuY29udGFpbmVyRGltZW5zaW9ucyx5PWcubGFiZWxDb250YWluZXJPcmlnaW4seD1nLmxhYmVsT3JpZ2luLGI9Zy5hbGlnbm1lbnQsUz10aGlzLl9jcmVhdGVMYWJlbENvbnRhaW5lcihzLHkseCxkKSxDPXt4QWxpZ246Yi54LHlBbGlnbjpiLnl9O2Mud3JpdGUocCxfLndpZHRoLF8uaGVpZ2h0LEMsUy5ub2RlKCkpfX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbihyLG4saSl7dmFyIG89bjxpLmhlaWdodD9uLzIrdC5fTEFCRUxfTUFSR0lOX0ZST01fQlVCQkxFOjA7cmV0dXJue2NvbnRhaW5lckRpbWVuc2lvbnM6e3dpZHRoOmkud2lkdGgsaGVpZ2h0OmkuaGVpZ2h0fSxsYWJlbENvbnRhaW5lck9yaWdpbjp7eDpyLngtaS53aWR0aC8yLHk6ci55LWkuaGVpZ2h0LzIrb30sbGFiZWxPcmlnaW46e3g6ci54LHk6ci55fSxhbGlnbm1lbnQ6e3g6ImNlbnRlciIseToiY2VudGVyIn19fSx0LnByb3RvdHlwZS5fY3JlYXRlTGFiZWxDb250YWluZXI9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9ci5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituLngrIiwgIituLnkrIikiKTtyZXR1cm4gYS5jbGFzc2VkKCJvbi1iYXItbGFiZWwiLCEwKSxhfSx0Ll9TSVpFX0tFWT0ic2l6ZSIsdC5fU1lNQk9MX0tFWT0ic3ltYm9sIix0Ll9MQUJFTF9BUkVBX0NMQVNTPSJzY2F0dGVyLWxhYmVsLXRleHQtYXJlYSIsdC5fTEFCRUxfTUFSR0lOX0ZST01fQlVCQkxFPTE1LHR9KElVZS5YWVBsb3QpO1ZhdC5TY2F0dGVyPUxVZX0pO3ZhciB3S3Q9SChVYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFVhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGtVZT0oZGUoKSxVdChwZSkpLFJVZT1MZigpLE5VZT1VdSgpLERVZT15YXQoKSxPVWU9a3MoKSx6VWU9Q0YoKSxMUz1ycygpLEZVZT1IMSgpLEJVZT1mdW5jdGlvbihlKXtrVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5hZGRDbGFzcygic2VnbWVudC1wbG90Iiksci5hdHRyKCJzdHJva2UiLG5ldyBPVWUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLmF0dHIoInN0cm9rZS13aWR0aCIsIjJweCIpLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE5VZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgRFVlLlNlZ21lbnRTVkdEcmF3ZXJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHpVZS53YXJuKCJjYW52YXMgcmVuZGVyZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBTZWdtZW50IFBsb3QhIiksbnVsbH0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXtyZXR1cm5be2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjpuZXcgUlVlLk51bGx9XX0sdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3JldHVybiByPT09IngyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ4Iik6cj09PSJ5MiI/ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcywieSIpOmUucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS54LmNhbGwodGhpcyk7aWYobj09bnVsbCllLnByb3RvdHlwZS54LmNhbGwodGhpcyxyKTtlbHNle2UucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbik7dmFyIGk9dGhpcy54MigpLG89aSYmaS5hY2Nlc3NvcjtvIT1udWxsJiZ0aGlzLl9iaW5kUHJvcGVydHkodC5fWDJfS0VZLG8sbil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLngyPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1gyX0tFWSk7dmFyIG49dGhpcy54KCksaT1uJiZuLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWDJfS0VZLHIsaSksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS55PWZ1bmN0aW9uKHIsbil7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueS5jYWxsKHRoaXMpO2lmKG49PW51bGwpZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscik7ZWxzZXtlLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4pO3ZhciBpPXRoaXMueTIoKSxvPWkmJmkuYWNjZXNzb3I7byE9bnVsbCYmdGhpcy5fYmluZFByb3BlcnR5KHQuX1kyX0tFWSxvLG4pfXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS55Mj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9ZMl9LRVkpO3ZhciBuPXRoaXMueSgpLGk9biYmbi5zY2FsZTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KHQuX1kyX0tFWSxyLGkpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTtyZXR1cm4gci54MT1MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksci54Mj10aGlzLngyKCk9PW51bGw/TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpOkxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueDIoKSksci55MT1MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksci55Mj10aGlzLnkyKCk9PW51bGw/TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpOkxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTIoKSkscn0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzLmVudGl0eU5lYXJlc3Qocik7cmV0dXJuIG4hPW51bGw/W25dOltdfSx0LnByb3RvdHlwZS5lbnRpdGllc0luPWZ1bmN0aW9uKHIsbil7dmFyIGksbztpZihuPT1udWxsKXt2YXIgYT1yO2k9e21pbjphLnRvcExlZnQueCxtYXg6YS5ib3R0b21SaWdodC54fSxvPXttaW46YS50b3BMZWZ0LnksbWF4OmEuYm90dG9tUmlnaHQueX19ZWxzZSBpPXIsbz1uO3JldHVybiB0aGlzLl9lbnRpdGllc0ludGVyc2VjdGluZyhpLG8pfSx0LnByb3RvdHlwZS5fZW50aXRpZXNJbnRlcnNlY3Rpbmc9ZnVuY3Rpb24ocixuKXtmb3IodmFyIGk9W10sbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhPXRoaXMuZW50aXRpZXMoKSxzPWEubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgYz1hW2xdO3RoaXMuX2xpbmVJbnRlcnNlY3RzQm94KGMscixuLG8pJiZpLnB1c2goYyl9cmV0dXJuIGl9LHQucHJvdG90eXBlLl9saW5lSW50ZXJzZWN0c0JveD1mdW5jdGlvbihyLG4saSxvKXt2YXIgYT10aGlzLHM9by54MShyLmRhdHVtLHIuaW5kZXgsci5kYXRhc2V0KSxsPW8ueDIoci5kYXR1bSxyLmluZGV4LHIuZGF0YXNldCksYz1vLnkxKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpLHU9by55MihyLmRhdHVtLHIuaW5kZXgsci5kYXRhc2V0KTtpZihuLm1pbjw9cyYmczw9bi5tYXgmJmkubWluPD1jJiZjPD1pLm1heHx8bi5taW48PWwmJmw8PW4ubWF4JiZpLm1pbjw9dSYmdTw9aS5tYXgpcmV0dXJuITA7dmFyIGg9e3g6cyx5OmN9LGY9e3g6bCx5OnV9LHA9W3t4Om4ubWluLHk6aS5taW59LHt4Om4ubWluLHk6aS5tYXh9LHt4Om4ubWF4LHk6aS5tYXh9LHt4Om4ubWF4LHk6aS5taW59XSxkPXAuZmlsdGVyKGZ1bmN0aW9uKGcsXyl7cmV0dXJuIF8hPT0wP2EuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChoLGYsZyxwW18tMV0pJiZhLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQoZyxwW18tMV0saCxmKTohMX0pO3JldHVybiBkLmxlbmd0aD4wfSx0LnByb3RvdHlwZS5fbGluZUludGVyc2VjdHNTZWdtZW50PWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPWZ1bmN0aW9uKHMsbCxjKXtyZXR1cm4obC54LXMueCkqKGMueS1sLnkpLShsLnktcy55KSooYy54LWwueCl9O3JldHVybiBhKHIsbixpKSphKHIsbixvKTwwfSx0Ll9YMl9LRVk9IngyIix0Ll9ZMl9LRVk9InkyIix0fShGVWUuWFlQbG90KTtVYXQuU2VnbWVudD1CVWV9KTt2YXIgRUt0PUgocWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBIVWU9KGRlKCksVXQocGUpKSxTS3Q9KEVyKCksVXQoTXIpKSxWVWU9TGYoKSxNS3Q9Q1MoKSx0MD1GZSgpLFVVZT1DYXQoKSxxVWU9cnMoKSxHVWU9ZnVuY3Rpb24oZSl7SFVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX3N0YWNraW5nUmVzdWx0PU1LdC5tZW1UaHVuayhmdW5jdGlvbigpe3JldHVybiByLmRhdGFzZXRzKCl9LGZ1bmN0aW9uKCl7cmV0dXJuIHIueCgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiByLnkoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gci5fc3RhY2tpbmdPcmRlcn0sZnVuY3Rpb24obixpLG8sYSl7cmV0dXJuIHQwLlN0YWNraW5nLnN0YWNrKG4saSxvLGEpfSksci5fc3RhY2tlZEV4dGVudD1NS3QubWVtVGh1bmsoci5fc3RhY2tpbmdSZXN1bHQsZnVuY3Rpb24oKXtyZXR1cm4gci54KCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHIuX2ZpbHRlckZvclByb3BlcnR5KCJ5Iil9LGZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gdDAuU3RhY2tpbmcuc3RhY2tlZEV4dGVudChuLGksbyl9KSxyLl9iYXNlbGluZVZhbHVlPTAsci5fc3RhY2tpbmdPcmRlcj0iYm90dG9tdXAiLHIuYWRkQ2xhc3MoInN0YWNrZWQtYXJlYS1wbG90Iiksci5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuW3IuX2Jhc2VsaW5lVmFsdWVdfSxyLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkKCExKSxyfXJldHVybiB0LnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZC5jYWxsKHRoaXMpOnI/KHQwLldpbmRvdy53YXJuKCJXYXJuaW5nOiBTdGFja2VkIEFyZWEgUGxvdCBkb2VzIG5vdCBzdXBwb3J0IGNyb3BwZWQgcmVuZGVyaW5nLiIpLHRoaXMpOmUucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2dldEFuaW1hdG9yPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcgVlVlLk51bGx9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2Jhc2VsaW5lPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzKToobj09bnVsbD9lLnByb3RvdHlwZS54LmNhbGwodGhpcyxyKTplLnByb3RvdHlwZS54LmNhbGwodGhpcyxyLG4pLHRoaXMuX2NoZWNrU2FtZURvbWFpbigpLHRoaXMpfSx0LnByb3RvdHlwZS55PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMpOihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbiksdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksdGhpcyl9LHQucHJvdG90eXBlLnlPZmZzZXQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9zdGFja2luZ1Jlc3VsdCgpO2lmKGkhPW51bGwpe3ZhciBvPWkuZ2V0KHIpO2lmKG8hPW51bGwpe3ZhciBhPW8uZ2V0KFN0cmluZyhuKSk7aWYoYSE9bnVsbClyZXR1cm4gYS5vZmZzZXR9fX0sdC5wcm90b3R5cGUuc3RhY2tpbmdPcmRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zdGFja2luZ09yZGVyOih0aGlzLl9zdGFja2luZ09yZGVyPXIsdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLmRvd25zYW1wbGluZ0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZC5jYWxsKHRoaXMpOih0MC5XaW5kb3cud2FybigiV2FybmluZzogU3RhY2tlZCBBcmVhIFBsb3QgZG9lcyBub3Qgc3VwcG9ydCBkb3duc2FtcGxpbmciKSx0aGlzKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbigpe3ZhciByPXRoaXMueSgpLnNjYWxlLnNjYWxlKHRoaXMuX2Jhc2VsaW5lVmFsdWUpLG49e3gxOjAseTE6cix4Mjp0aGlzLndpZHRoKCkseTI6cn07dGhpcy5fZ2V0QW5pbWF0b3IoImJhc2VsaW5lIikuYW5pbWF0ZSh0aGlzLl9iYXNlbGluZSxuKX0sdC5wcm90b3R5cGUuX3VwZGF0ZVlTY2FsZT1mdW5jdGlvbigpe3ZhciByPXRoaXMueSgpLG49ciYmci5zY2FsZTtuIT1udWxsJiYobi5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlciksbi5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcikpfSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrU2FtZURvbWFpbigpLGUucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGUuY2FsbCh0aGlzKSx0aGlzfSx0LnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7dmFyIG49InkiO3JldHVybiByPT09bj9bdGhpcy5fc3RhY2tlZEV4dGVudCgpXTplLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fY2hlY2tTYW1lRG9tYWluPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSl7dmFyIHI9dGhpcy5kYXRhc2V0cygpLG49dGhpcy54KCkuYWNjZXNzb3IsaT1yLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gU0t0LnNldChhLmRhdGEoKS5tYXAoZnVuY3Rpb24ocyxsKXtyZXR1cm4gdDAuU3RhY2tpbmcubm9ybWFsaXplS2V5KG4ocyxsLGEpKX0pKS52YWx1ZXMoKX0pLG89dC5fZG9tYWluS2V5cyhyLG4pO2kuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGghPT1vLmxlbmd0aH0pJiZ0MC5XaW5kb3cud2FybigidGhlIGRvbWFpbnMgYWNyb3NzIHRoZSBkYXRhc2V0cyBhcmUgbm90IHRoZSBzYW1lLiBQbG90IG1heSBwcm9kdWNlIHVuaW50ZW5kZWQgYmVoYXZpb3IuIil9fSx0Ll9kb21haW5LZXlzPWZ1bmN0aW9uKHIsbil7dmFyIGk9U0t0LnNldCgpO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7Zm9yKHZhciBhPW8uZGF0YSgpLHM9YS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciBjPWFbbF07aS5hZGQobihjLGwsbykpfX0pLGkudmFsdWVzKCl9LHQucHJvdG90eXBlLl9jb29yZGluYXRlUHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1xVWUuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLGk9dGhpcy55KCkuYWNjZXNzb3Isbz10aGlzLngoKS5hY2Nlc3NvcixhPWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gdDAuU3RhY2tpbmcubm9ybWFsaXplS2V5KG8odSxoLGYpKX0scz10aGlzLl9zdGFja2luZ1Jlc3VsdCgpLGw9ZnVuY3Rpb24odSxoLGYpe3ZhciBwPStpKHUsaCxmKSxkPXMuZ2V0KGYpLmdldChhKHUsaCxmKSkub2Zmc2V0O3JldHVybiByLnkoKS5zY2FsZS5zY2FsZShwK2QpfSxjPWZ1bmN0aW9uKHUsaCxmKXt2YXIgcD1zLmdldChmKS5nZXQoYSh1LGgsZikpLm9mZnNldDtyZXR1cm4gci55KCkuc2NhbGUuc2NhbGUocCl9O3JldHVybltuLGwsY119LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksbj10aGlzLl9jb29yZGluYXRlUHJvamVjdG9ycygpLGk9blswXSxvPW5bMV0sYT1uWzJdO3JldHVybiByLmQ9dGhpcy5fY29uc3RydWN0QXJlYVByb2plY3RvcihpLG8sYSkscn0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPWUucHJvdG90eXBlLl9waXhlbFBvaW50LmNhbGwodGhpcyxyLG4saSksYT10aGlzLngoKS5hY2Nlc3NvcihyLG4saSkscz10aGlzLnkoKS5hY2Nlc3NvcihyLG4saSksbD10aGlzLnkoKS5zY2FsZS5zY2FsZSgrcyt0aGlzLl9zdGFja2luZ1Jlc3VsdCgpLmdldChpKS5nZXQodDAuU3RhY2tpbmcubm9ybWFsaXplS2V5KGEpKS5vZmZzZXQpO3JldHVybnt4Om8ueCx5Omx9fSx0fShVVWUuQXJlYSk7cWF0LlN0YWNrZWRBcmVhPUdVZX0pO3ZhciBDS3Q9SChZYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFlhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdVZT0oZGUoKSxVdChwZSkpLEdhdD1fbCgpLFlVZT1CdSgpLFRLdD1DUygpLHBCPUZlKCksV2F0PV80KCksalVlPXJzKCksWFVlPWZ1bmN0aW9uKGUpe1dVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSJ2ZXJ0aWNhbCIpO3ZhciBuPWUuY2FsbCh0aGlzLHIpfHx0aGlzO3JldHVybiBuLl9leHRyZW1hRm9ybWF0dGVyPVlVZS5pZGVudGl0eSgpLG4uX3N0YWNraW5nUmVzdWx0PVRLdC5tZW1UaHVuayhmdW5jdGlvbigpe3JldHVybiBuLmRhdGFzZXRzKCl9LGZ1bmN0aW9uKCl7cmV0dXJuIG4ucG9zaXRpb24oKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gbi5sZW5ndGgoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fc3RhY2tpbmdPcmRlcn0sZnVuY3Rpb24oaSxvLGEscyl7cmV0dXJuIHBCLlN0YWNraW5nLnN0YWNrKGksbyxhLHMpfSksbi5fc3RhY2tlZEV4dGVudD1US3QubWVtVGh1bmsobi5fc3RhY2tpbmdSZXN1bHQsZnVuY3Rpb24oKXtyZXR1cm4gbi5wb3NpdGlvbigpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLl9maWx0ZXJGb3JQcm9wZXJ0eShuLl9pc1ZlcnRpY2FsPyJ5IjoieCIpfSxmdW5jdGlvbihpLG8sYSl7cmV0dXJuIHBCLlN0YWNraW5nLnN0YWNrZWRFeHRlbnQoaSxvLGEpfSksbi5hZGRDbGFzcygic3RhY2tlZC1iYXItcGxvdCIpLG4uX3N0YWNraW5nT3JkZXI9ImJvdHRvbXVwIixufXJldHVybiB0LnByb3RvdHlwZS5zdGFja2luZ09yZGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YWNraW5nT3JkZXI6KHRoaXMuX3N0YWNraW5nT3JkZXI9cix0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZXh0cmVtYUZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fZXh0cmVtYUZvcm1hdHRlcjoodGhpcy5fZXh0cmVtYUZvcm1hdHRlcj1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2xhYmVsQXJlYT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQoV2F0LkJhci5fTEFCRUxfQVJFQV9DTEFTUywhMCk7dmFyIHI9bmV3IEdhdC5TdmdDb250ZXh0KHRoaXMuX2xhYmVsQXJlYS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBHYXQuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cml0ZXI9bmV3IEdhdC5Xcml0ZXIodGhpcy5fbWVhc3VyZXIscil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5fZHJhd0xhYmVscy5jYWxsKHRoaXMpLHRoaXMuX2xhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKTt2YXIgbj0rdGhpcy5iYXNlbGluZVZhbHVlKCksaT10aGlzLnBvc2l0aW9uKCkuc2NhbGUsbz10aGlzLmxlbmd0aCgpLnNjYWxlLGE9cEIuU3RhY2tpbmcuc3RhY2tlZEV4dGVudHModGhpcy5fc3RhY2tpbmdSZXN1bHQoKSkscz1hLm1heGltdW1FeHRlbnRzLGw9YS5taW5pbXVtRXh0ZW50cyxjPVtdLHU9ZnVuY3Rpb24oZixwLGQpe3ZhciBnPXAudG9wTGVmdCxfPWcueCx5PWcueSx4PXAuYm90dG9tUmlnaHQueC1wLnRvcExlZnQueCxiPXAuYm90dG9tUmlnaHQueS1wLnRvcExlZnQueSxTPXIuX2lzVmVydGljYWw/eD5kOmI+ZDtpZighUyl7dmFyIEM9ci5fbGFiZWxBcmVhLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK18rIiwgIit5KyIpIik7Qy5jbGFzc2VkKCJzdGFja2VkLWJhci1sYWJlbCIsITApO3ZhciBQPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifTtyLl93cml0ZXIud3JpdGUoZix4LGIsUCxDLm5vZGUoKSl9cmV0dXJuIFN9LGg9ZnVuY3Rpb24oZixwKXt2YXIgZD1yLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3RvcigpLGc9ci53aWR0aCgpLF89ci5oZWlnaHQoKTtmLmZvckVhY2goZnVuY3Rpb24oeSl7aWYoeS5leHRlbnQhPT1uKXt2YXIgeD1yLmV4dHJlbWFGb3JtYXR0ZXIoKSh5LmV4dGVudCksYj1yLl9tZWFzdXJlci5tZWFzdXJlKHgpLFM9eS5zdGFja2VkRGF0dW0sQz1TLm9yaWdpbmFsRGF0dW0sUD1TLm9yaWdpbmFsSW5kZXgsaz1TLm9yaWdpbmFsRGF0YXNldDtpZighci5faXNEYXR1bU9uU2NyZWVuKGQsZyxfLEMsUCxrKSlyZXR1cm47dmFyIE89alVlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHIuYXR0cihXYXQuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpKEMsUCxrKSxEPW8uc2NhbGUoeS5leHRlbnQpLEI9ci5fZ2V0UG9zaXRpb25BdHRyKGkuc2NhbGUoeS5heGlzVmFsdWUpLE8pK08vMixJPXIuX2lzVmVydGljYWw/e3g6Qix5OkR9Ont4OkQseTpCfSxMPXAoSSxiLE8pLFI9dSh4LHt0b3BMZWZ0OkwsYm90dG9tUmlnaHQ6e3g6TC54K2Iud2lkdGgseTpMLnkrYi5oZWlnaHR9fSxPKTtjLnB1c2goUil9fSl9O2gocyxmdW5jdGlvbihmLHAsZCl7dmFyIGc9ci5faXNWZXJ0aWNhbD9wLndpZHRoOnAuaGVpZ2h0LF89ci5faXNWZXJ0aWNhbD9wLmhlaWdodDpwLndpZHRoO3JldHVybnt4OnIuX2lzVmVydGljYWw/Zi54LWcvMjpmLngrdC5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVIseTpyLl9pc1ZlcnRpY2FsP2YueS1fOmYueS1nLzJ9fSksaChsLGZ1bmN0aW9uKGYscCxkKXt2YXIgZz1yLl9pc1ZlcnRpY2FsP3Aud2lkdGg6cC5oZWlnaHQsXz1yLl9pc1ZlcnRpY2FsP3AuaGVpZ2h0OnAud2lkdGg7cmV0dXJue3g6ci5faXNWZXJ0aWNhbD9mLngtZy8yOmYueC1fLHk6ci5faXNWZXJ0aWNhbD9mLnkrdC5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI6Zi55LWcvMn19KSxjLnNvbWUoZnVuY3Rpb24oZil7cmV0dXJuIGZ9KSYmdGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIsbz10aGlzLmxlbmd0aCgpLnNjYWxlLGE9dGhpcy5sZW5ndGgoKS5hY2Nlc3NvcixzPXRoaXMucG9zaXRpb24oKS5hY2Nlc3NvcixsPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gcEIuU3RhY2tpbmcubm9ybWFsaXplS2V5KHMoZCxnLF8pKX0sYz10aGlzLl9zdGFja2luZ1Jlc3VsdCgpLHU9ZnVuY3Rpb24oZCxnLF8pe3JldHVybiBvLnNjYWxlKGMuZ2V0KF8pLmdldChsKGQsZyxfKSkub2Zmc2V0KX0saD1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIG8uc2NhbGUoK2EoZCxnLF8pK2MuZ2V0KF8pLmdldChsKGQsZyxfKSkub2Zmc2V0KX0sZj1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIE1hdGguYWJzKGgoZCxnLF8pLXUoZCxnLF8pKX07blt0aGlzLl9pc1ZlcnRpY2FsPyJoZWlnaHQiOiJ3aWR0aCJdPWY7dmFyIHA9ZnVuY3Rpb24oZCxnLF8pe3JldHVybithKGQsZyxfKTwwP3UoZCxnLF8pOmgoZCxnLF8pfTtyZXR1cm4gbltpXT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIHIuX2lzVmVydGljYWw/cChkLGcsXyk6cChkLGcsXyktZihkLGcsXyl9LG59LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCI7cmV0dXJuIHI9PT1uP1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX21lYXN1cmVyLnJlc2V0KCl9LHQuX0VYVFJFTUFfTEFCRUxfTUFSR0lOX0ZST01fQkFSPTUsdH0oV2F0LkJhcik7WWF0LlN0YWNrZWRCYXI9WFVlfSk7dmFyIEFLdD1IKGphdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoamF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgJFVlPShkZSgpLFV0KHBlKSksS1VlPUZlKCksWlVlPV80KCksSlVlPXJzKCksUVVlPWZ1bmN0aW9uKGUpeyRVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9jb25uZWN0b3JzRW5hYmxlZD0hMSxyLmFkZENsYXNzKCJ3YXRlcmZhbGwtcGxvdCIpLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbm5lY3RvcnNFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Nvbm5lY3RvcnNFbmFibGVkOih0aGlzLl9jb25uZWN0b3JzRW5hYmxlZD1yLHRoaXMpfSx0LnByb3RvdHlwZS50b3RhbD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9UT1RBTF9LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkodC5fVE9UQUxfS0VZLHIsbnVsbCksdGhpcyl9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLl9jb25uZWN0b3JBcmVhLnNlbGVjdEFsbCgibGluZSIpLnJlbW92ZSgpLHRoaXMuX2Nvbm5lY3RvcnNFbmFibGVkJiZLVWUuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0Nvbm5lY3RvcnMoKX0scil9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7dmFyIG49ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMscik7cmV0dXJuIHRoaXMuX2Nvbm5lY3RvckFyZWE9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKHQuX0NPTk5FQ1RPUl9BUkVBX0NMQVNTLCEwKSxufSx0LnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7dmFyIG49InkiO3JldHVybiByPT09bj9bdGhpcy5fZXh0ZW50XTplLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLnkoKS5zY2FsZSxvPUpVZS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnRvdGFsKCkpLGE9dGhpcy5hdHRyKCJ5Iik7YT09bnVsbCYmKG4ueT1mdW5jdGlvbihsLGMsdSl7dmFyIGg9ci55KCkuYWNjZXNzb3IobCxjLHUpLGY9byhsLGMsdSk7aWYoZilyZXR1cm4gTWF0aC5taW4oaS5zY2FsZShoKSxpLnNjYWxlKDApKTt2YXIgcD1yLl9zdWJ0b3RhbHNbY107aWYoYz09PTApcmV0dXJuIGg8MD9pLnNjYWxlKHAtaCk6aS5zY2FsZShwKTt2YXIgZD1yLl9zdWJ0b3RhbHNbYy0xXTtyZXR1cm4gcD5kP2kuc2NhbGUocCk6aS5zY2FsZShkKX0pO3ZhciBzPXRoaXMuYXR0cigiaGVpZ2h0Iik7cmV0dXJuIHM9PW51bGwmJihuLmhlaWdodD1mdW5jdGlvbihsLGMsdSl7dmFyIGg9byhsLGMsdSksZj1yLnkoKS5hY2Nlc3NvcihsLGMsdSk7aWYoaClyZXR1cm4gTWF0aC5hYnMoaS5zY2FsZShmKS1pLnNjYWxlKDApKTt2YXIgcD1yLl9zdWJ0b3RhbHNbY107aWYoYz09PTApcmV0dXJuIE1hdGguYWJzKGkuc2NhbGUocCktaS5zY2FsZShwLWYpKTt2YXIgZD1yLl9zdWJ0b3RhbHNbYy0xXTtyZXR1cm4gTWF0aC5hYnMoaS5zY2FsZShwKS1pLnNjYWxlKGQpKX0pLG4uY2xhc3M9ZnVuY3Rpb24obCxjLHUpe3ZhciBoPSIiO3IuYXR0cigiY2xhc3MiKSE9bnVsbCYmKGg9ci5hdHRyKCJjbGFzcyIpLmFjY2Vzc29yKGwsYyx1KSsiICIpO3ZhciBmPW8obCxjLHUpO2lmKGYpcmV0dXJuIGgrdC5fQkFSX1RPVEFMX0NMQVNTO3ZhciBwPXIueSgpLmFjY2Vzc29yKGwsYyx1KTtyZXR1cm4gaCsocD4wP3QuX0JBUl9HUk9XVEhfQ0xBU1M6dC5fQkFSX0RFQ0xJTkVfQ0xBU1MpfSxufSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVN1YnRvdGFscygpLGUucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGUuY2FsbCh0aGlzKSx0aGlzfSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlU3VidG90YWxzQW5kRXh0ZW50PWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1OdW1iZXIuTUFYX1ZBTFVFLGk9TnVtYmVyLk1JTl9WQUxVRSxvPTAsYT0hMSxzPXIuZGF0YSgpLGw9cy5sZW5ndGgsYz0wO2M8bDtjKyspe3ZhciB1PXNbY10saD10aGlzLnkoKS5hY2Nlc3Nvcih1LGMsciksZj10aGlzLnRvdGFsKCkuYWNjZXNzb3IodSxjLHIpO2lmKCghZnx8Yz09PTApJiYobys9aCksdGhpcy5fc3VidG90YWxzLnB1c2gobyksbzxuJiYobj1vKSxvPmkmJihpPW8pLGYmJihoPG4mJihuPWgpLGg+aSYmKGk9aCkpLCFhJiZmKXtmb3IodmFyIHA9aC1vLGQ9MDtkPHRoaXMuX3N1YnRvdGFscy5sZW5ndGg7ZCsrKXRoaXMuX3N1YnRvdGFsc1tkXSs9cDthPSEwLG8rPXAsbis9cCxpKz1wfX10aGlzLl9leHRlbnQ9W24saV19LHQucHJvdG90eXBlLl9kcmF3Q29ubmVjdG9ycz1mdW5jdGlvbigpe2Zvcih2YXIgcj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxuPXRoaXMuZGF0YXNldHMoKVswXSxpPTE7aTxuLmRhdGEoKS5sZW5ndGg7aSsrKXt2YXIgbz1pLTEsYT1uLmRhdGEoKVtpXSxzPW4uZGF0YSgpW29dLGw9ci54KHMsbyxuKSxjPXIueChhLGksbikrci53aWR0aChhLGksbiksdT1yLnkoYSxpLG4pOyh0aGlzLl9zdWJ0b3RhbHNbaV0+MCYmdGhpcy5fc3VidG90YWxzW2ldPnRoaXMuX3N1YnRvdGFsc1tvXXx8dGhpcy5fc3VidG90YWxzW2ldPDAmJnRoaXMuX3N1YnRvdGFsc1tpXT49dGhpcy5fc3VidG90YWxzW29dKSYmKHU9ci55KGEsaSxuKStyLmhlaWdodChhLGksbikpLHRoaXMuX2Nvbm5lY3RvckFyZWEuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCh0Ll9DT05ORUNUT1JfQ0xBU1MsITApLmF0dHIoIngxIixsKS5hdHRyKCJ4MiIsYykuYXR0cigieTEiLHUpLmF0dHIoInkyIix1KX19LHQucHJvdG90eXBlLl91cGRhdGVTdWJ0b3RhbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmRhdGFzZXRzKCk7aWYoci5sZW5ndGg+MCl7dmFyIG49cltyLmxlbmd0aC0xXTt0aGlzLl9zdWJ0b3RhbHM9bmV3IEFycmF5LHRoaXMuX2NhbGN1bGF0ZVN1YnRvdGFsc0FuZEV4dGVudChuKX19LHQuX0JBUl9ERUNMSU5FX0NMQVNTPSJ3YXRlcmZhbGwtZGVjbGluZSIsdC5fQkFSX0dST1dUSF9DTEFTUz0id2F0ZXJmYWxsLWdyb3d0aCIsdC5fQkFSX1RPVEFMX0NMQVNTPSJ3YXRlcmZhbGwtdG90YWwiLHQuX0NPTk5FQ1RPUl9DTEFTUz0iY29ubmVjdG9yIix0Ll9DT05ORUNUT1JfQVJFQV9DTEFTUz0iY29ubmVjdG9yLWFyZWEiLHQuX1RPVEFMX0tFWT0idG90YWwiLHR9KFpVZS5CYXIpO2phdC5XYXRlcmZhbGw9UVVlfSk7dmFyIElTPUgoT3M9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE9zLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgemM9KGRlKCksVXQocGUpKTt6Yy5fX2V4cG9ydFN0YXIoQ2F0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihfNCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoV290KCksT3MpO3pjLl9fZXhwb3J0U3RhcihfS3QoKSxPcyk7emMuX19leHBvcnRTdGFyKE1hdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoeUt0KCksT3MpO3pjLl9fZXhwb3J0U3Rhcih2S3QoKSxPcyk7emMuX19leHBvcnRTdGFyKGJLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIod0t0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihFS3QoKSxPcyk7emMuX19leHBvcnRTdGFyKENLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoQUt0KCksT3MpfSk7dmFyIFBLdD1IKFhhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtYYXQudmVyc2lvbj0iMy45LjAifSk7dmFyIHdsPUgobG49PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRmM9KGRlKCksVXQocGUpKTtHanQoKTt2YXIgdHFlPUxmKCk7bG4uQW5pbWF0b3JzPXRxZTt2YXIgZXFlPXMkdCgpO2xuLkF4ZXM9ZXFlO3ZhciBycWU9SW90KCk7bG4uQ29tcG9uZW50cz1ycWU7dmFyIG5xZT1YQSgpO2xuLkNvbmZpZ3M9bnFlO3ZhciBpcWU9QnUoKTtsbi5Gb3JtYXR0ZXJzPWlxZTt2YXIgb3FlPVBGKCk7bG4uUmVuZGVyQ29udHJvbGxlcj1vcWU7dmFyIGFxZT1WaXQoKTtsbi5SZW5kZXJQb2xpY2llcz1hcWU7dmFyIHNxZT1qRigpO2xuLlN5bWJvbEZhY3Rvcmllcz1zcWU7dmFyIGxxZT1OMSgpO2xuLkRpc3BhdGNoZXJzPWxxZTt2YXIgY3FlPUIxKCk7bG4uRHJhd2Vycz1jcWU7dmFyIHVxZT1zNCgpO2xuLkludGVyYWN0aW9ucz11cWU7dmFyIGhxZT1JUygpO2xuLlBsb3RzPWhxZTt2YXIgZnFlPWtzKCk7bG4uU2NhbGVzPWZxZTt2YXIgcHFlPUZlKCk7bG4uVXRpbHM9cHFlO0ZjLl9fZXhwb3J0U3RhcihRQSgpLGxuKTt2YXIgZHFlPUJGKCk7bG4uVGltZUludGVydmFsPWRxZS5UaW1lSW50ZXJ2YWw7RmMuX19leHBvcnRTdGFyKGtjKCksbG4pO0ZjLl9fZXhwb3J0U3RhcihHRigpLGxuKTtGYy5fX2V4cG9ydFN0YXIoam90KCksbG4pO3ZhciBtcWU9UEt0KCk7bG4udmVyc2lvbj1tcWUudmVyc2lvbjtGYy5fX2V4cG9ydFN0YXIoaTQoKSxsbik7RmMuX19leHBvcnRTdGFyKFV1KCksbG4pO0ZjLl9fZXhwb3J0U3RhcihEMSgpLGxuKTtGYy5fX2V4cG9ydFN0YXIoU290KCksbG4pO0ZjLl9fZXhwb3J0U3RhcihIMSgpLGxuKTtGYy5fX2V4cG9ydFN0YXIocnMoKSxsbik7RmMuX19leHBvcnRTdGFyKHZkKCksbG4pO0ZjLl9fZXhwb3J0U3RhcihMMSgpLGxuKX0pO3ZhciBYS3Q9SCgoS2puLGpLdCk9PntmdW5jdGlvbiBOcWUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWpLdC5leHBvcnRzPU5xZX0pO3ZhciBZMT1IKChaam4sJEt0KT0+e2Z1bmN0aW9uIERxZShlLHQpe3JldHVybiBlPT09dHx8ZSE9PWUmJnQhPT10fSRLdC5leHBvcnRzPURxZX0pO3ZhciBTND1IKChKam4sS0t0KT0+e3ZhciBPcWU9WTEoKTtmdW5jdGlvbiB6cWUoZSx0KXtmb3IodmFyIHI9ZS5sZW5ndGg7ci0tOylpZihPcWUoZVtyXVswXSx0KSlyZXR1cm4gcjtyZXR1cm4tMX1LS3QuZXhwb3J0cz16cWV9KTt2YXIgSkt0PUgoKFFqbixaS3QpPT57dmFyIEZxZT1TNCgpLEJxZT1BcnJheS5wcm90b3R5cGUsSHFlPUJxZS5zcGxpY2U7ZnVuY3Rpb24gVnFlKGUpe3ZhciB0PXRoaXMuX19kYXRhX18scj1GcWUodCxlKTtpZihyPDApcmV0dXJuITE7dmFyIG49dC5sZW5ndGgtMTtyZXR1cm4gcj09bj90LnBvcCgpOkhxZS5jYWxsKHQsciwxKSwtLXRoaXMuc2l6ZSwhMH1aS3QuZXhwb3J0cz1WcWV9KTt2YXIgdFp0PUgoKHRYbixRS3QpPT57dmFyIFVxZT1TNCgpO2Z1bmN0aW9uIHFxZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLHI9VXFlKHQsZSk7cmV0dXJuIHI8MD92b2lkIDA6dFtyXVsxXX1RS3QuZXhwb3J0cz1xcWV9KTt2YXIgclp0PUgoKGVYbixlWnQpPT57dmFyIEdxZT1TNCgpO2Z1bmN0aW9uIFdxZShlKXtyZXR1cm4gR3FlKHRoaXMuX19kYXRhX18sZSk+LTF9ZVp0LmV4cG9ydHM9V3FlfSk7dmFyIGladD1IKChyWG4sblp0KT0+e3ZhciBZcWU9UzQoKTtmdW5jdGlvbiBqcWUoZSx0KXt2YXIgcj10aGlzLl9fZGF0YV9fLG49WXFlKHIsZSk7cmV0dXJuIG48MD8oKyt0aGlzLnNpemUsci5wdXNoKFtlLHRdKSk6cltuXVsxXT10LHRoaXN9blp0LmV4cG9ydHM9anFlfSk7dmFyIE00PUgoKG5YbixvWnQpPT57dmFyIFhxZT1YS3QoKSwkcWU9Skt0KCksS3FlPXRadCgpLFpxZT1yWnQoKSxKcWU9aVp0KCk7ZnVuY3Rpb24gelMoZSl7dmFyIHQ9LTEscj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8cjspe3ZhciBuPWVbdF07dGhpcy5zZXQoblswXSxuWzFdKX19elMucHJvdG90eXBlLmNsZWFyPVhxZTt6Uy5wcm90b3R5cGUuZGVsZXRlPSRxZTt6Uy5wcm90b3R5cGUuZ2V0PUtxZTt6Uy5wcm90b3R5cGUuaGFzPVpxZTt6Uy5wcm90b3R5cGUuc2V0PUpxZTtvWnQuZXhwb3J0cz16U30pO3ZhciBzWnQ9SCgoaVhuLGFadCk9Pnt2YXIgUXFlPU00KCk7ZnVuY3Rpb24gdEdlKCl7dGhpcy5fX2RhdGFfXz1uZXcgUXFlLHRoaXMuc2l6ZT0wfWFadC5leHBvcnRzPXRHZX0pO3ZhciBjWnQ9SCgob1huLGxadCk9PntmdW5jdGlvbiBlR2UoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPXQuZGVsZXRlKGUpO3JldHVybiB0aGlzLnNpemU9dC5zaXplLHJ9bFp0LmV4cG9ydHM9ZUdlfSk7dmFyIGhadD1IKChhWG4sdVp0KT0+e2Z1bmN0aW9uIHJHZShlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoZSl9dVp0LmV4cG9ydHM9ckdlfSk7dmFyIHBadD1IKChzWG4sZlp0KT0+e2Z1bmN0aW9uIG5HZShlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9Zlp0LmV4cG9ydHM9bkdlfSk7dmFyIHVzdD1IKChsWG4sZFp0KT0+e3ZhciBpR2U9dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsO2RadC5leHBvcnRzPWlHZX0pO3ZhciBIYz1IKChjWG4sbVp0KT0+e3ZhciBvR2U9dXN0KCksYUdlPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsc0dlPW9HZXx8YUdlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO21adC5leHBvcnRzPXNHZX0pO3ZhciBqMT1IKCh1WG4sZ1p0KT0+e3ZhciBsR2U9SGMoKSxjR2U9bEdlLlN5bWJvbDtnWnQuZXhwb3J0cz1jR2V9KTt2YXIgeFp0PUgoKGhYbix2WnQpPT57dmFyIF9adD1qMSgpLHladD1PYmplY3QucHJvdG90eXBlLHVHZT15WnQuaGFzT3duUHJvcGVydHksaEdlPXladC50b1N0cmluZyxFND1fWnQ/X1p0LnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBmR2UoZSl7dmFyIHQ9dUdlLmNhbGwoZSxFNCkscj1lW0U0XTt0cnl7ZVtFNF09dm9pZCAwO3ZhciBuPSEwfWNhdGNoKG8pe312YXIgaT1oR2UuY2FsbChlKTtyZXR1cm4gbiYmKHQ/ZVtFNF09cjpkZWxldGUgZVtFNF0pLGl9dlp0LmV4cG9ydHM9ZkdlfSk7dmFyIHdadD1IKChmWG4sYlp0KT0+e3ZhciBwR2U9T2JqZWN0LnByb3RvdHlwZSxkR2U9cEdlLnRvU3RyaW5nO2Z1bmN0aW9uIG1HZShlKXtyZXR1cm4gZEdlLmNhbGwoZSl9Ylp0LmV4cG9ydHM9bUdlfSk7dmFyIHMwPUgoKHBYbixFWnQpPT57dmFyIFNadD1qMSgpLGdHZT14WnQoKSxfR2U9d1p0KCkseUdlPSJbb2JqZWN0IE51bGxdIix2R2U9IltvYmplY3QgVW5kZWZpbmVkXSIsTVp0PVNadD9TWnQudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIHhHZShlKXtyZXR1cm4gZT09bnVsbD9lPT09dm9pZCAwP3ZHZTp5R2U6TVp0JiZNWnQgaW4gT2JqZWN0KGUpP2dHZShlKTpfR2UoZSl9RVp0LmV4cG9ydHM9eEdlfSk7dmFyIE1sPUgoKGRYbixUWnQpPT57ZnVuY3Rpb24gYkdlKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBlIT1udWxsJiYodD09Im9iamVjdCJ8fHQ9PSJmdW5jdGlvbiIpfVRadC5leHBvcnRzPWJHZX0pO3ZhciBGUz1IKChtWG4sQ1p0KT0+e3ZhciB3R2U9czAoKSxTR2U9TWwoKSxNR2U9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLEVHZT0iW29iamVjdCBGdW5jdGlvbl0iLFRHZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLENHZT0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIEFHZShlKXtpZighU0dlKGUpKXJldHVybiExO3ZhciB0PXdHZShlKTtyZXR1cm4gdD09RUdlfHx0PT1UR2V8fHQ9PU1HZXx8dD09Q0dlfUNadC5leHBvcnRzPUFHZX0pO3ZhciBQWnQ9SCgoZ1huLEFadCk9Pnt2YXIgUEdlPUhjKCksSUdlPVBHZVsiX19jb3JlLWpzX3NoYXJlZF9fIl07QVp0LmV4cG9ydHM9SUdlfSk7dmFyIGtadD1IKChfWG4sTFp0KT0+e3ZhciBoc3Q9UFp0KCksSVp0PWZ1bmN0aW9uKCl7dmFyIGU9L1teLl0rJC8uZXhlYyhoc3QmJmhzdC5rZXlzJiZoc3Qua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiBlPyJTeW1ib2woc3JjKV8xLiIrZToiIn0oKTtmdW5jdGlvbiBMR2UoZSl7cmV0dXJuISFJWnQmJkladCBpbiBlfUxadC5leHBvcnRzPUxHZX0pO3ZhciBmc3Q9SCgoeVhuLFJadCk9Pnt2YXIga0dlPUZ1bmN0aW9uLnByb3RvdHlwZSxSR2U9a0dlLnRvU3RyaW5nO2Z1bmN0aW9uIE5HZShlKXtpZihlIT1udWxsKXt0cnl7cmV0dXJuIFJHZS5jYWxsKGUpfWNhdGNoKHQpe310cnl7cmV0dXJuIGUrIiJ9Y2F0Y2godCl7fX1yZXR1cm4iIn1SWnQuZXhwb3J0cz1OR2V9KTt2YXIgRFp0PUgoKHZYbixOWnQpPT57dmFyIERHZT1GUygpLE9HZT1rWnQoKSx6R2U9TWwoKSxGR2U9ZnN0KCksQkdlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxIR2U9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sVkdlPUZ1bmN0aW9uLnByb3RvdHlwZSxVR2U9T2JqZWN0LnByb3RvdHlwZSxxR2U9VkdlLnRvU3RyaW5nLEdHZT1VR2UuaGFzT3duUHJvcGVydHksV0dlPVJlZ0V4cCgiXiIrcUdlLmNhbGwoR0dlKS5yZXBsYWNlKEJHZSwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtmdW5jdGlvbiBZR2UoZSl7aWYoIXpHZShlKXx8T0dlKGUpKXJldHVybiExO3ZhciB0PURHZShlKT9XR2U6SEdlO3JldHVybiB0LnRlc3QoRkdlKGUpKX1OWnQuZXhwb3J0cz1ZR2V9KTt2YXIgelp0PUgoKHhYbixPWnQpPT57ZnVuY3Rpb24gakdlKGUsdCl7cmV0dXJuIGU9PW51bGw/dm9pZCAwOmVbdF19T1p0LmV4cG9ydHM9akdlfSk7dmFyIGwwPUgoKGJYbixGWnQpPT57dmFyIFhHZT1EWnQoKSwkR2U9elp0KCk7ZnVuY3Rpb24gS0dlKGUsdCl7dmFyIHI9JEdlKGUsdCk7cmV0dXJuIFhHZShyKT9yOnZvaWQgMH1GWnQuZXhwb3J0cz1LR2V9KTt2YXIgT0I9SCgod1huLEJadCk9Pnt2YXIgWkdlPWwwKCksSkdlPUhjKCksUUdlPVpHZShKR2UsIk1hcCIpO0JadC5leHBvcnRzPVFHZX0pO3ZhciBUND1IKChTWG4sSFp0KT0+e3ZhciB0V2U9bDAoKSxlV2U9dFdlKE9iamVjdCwiY3JlYXRlIik7SFp0LmV4cG9ydHM9ZVdlfSk7dmFyIHFadD1IKChNWG4sVVp0KT0+e3ZhciBWWnQ9VDQoKTtmdW5jdGlvbiByV2UoKXt0aGlzLl9fZGF0YV9fPVZadD9WWnQobnVsbCk6e30sdGhpcy5zaXplPTB9VVp0LmV4cG9ydHM9cldlfSk7dmFyIFdadD1IKChFWG4sR1p0KT0+e2Z1bmN0aW9uIG5XZShlKXt2YXIgdD10aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV07cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1HWnQuZXhwb3J0cz1uV2V9KTt2YXIgalp0PUgoKFRYbixZWnQpPT57dmFyIGlXZT1UNCgpLG9XZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsYVdlPU9iamVjdC5wcm90b3R5cGUsc1dlPWFXZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBsV2UoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztpZihpV2Upe3ZhciByPXRbZV07cmV0dXJuIHI9PT1vV2U/dm9pZCAwOnJ9cmV0dXJuIHNXZS5jYWxsKHQsZSk/dFtlXTp2b2lkIDB9WVp0LmV4cG9ydHM9bFdlfSk7dmFyICRadD1IKChDWG4sWFp0KT0+e3ZhciBjV2U9VDQoKSx1V2U9T2JqZWN0LnByb3RvdHlwZSxoV2U9dVdlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGZXZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBjV2U/dFtlXSE9PXZvaWQgMDpoV2UuY2FsbCh0LGUpfVhadC5leHBvcnRzPWZXZX0pO3ZhciBaWnQ9SCgoQVhuLEtadCk9Pnt2YXIgcFdlPVQ0KCksZFdlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBtV2UoZSx0KXt2YXIgcj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGUpPzA6MSxyW2VdPXBXZSYmdD09PXZvaWQgMD9kV2U6dCx0aGlzfUtadC5leHBvcnRzPW1XZX0pO3ZhciBRWnQ9SCgoUFhuLEpadCk9Pnt2YXIgZ1dlPXFadCgpLF9XZT1XWnQoKSx5V2U9alp0KCksdldlPSRadCgpLHhXZT1aWnQoKTtmdW5jdGlvbiBCUyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1CUy5wcm90b3R5cGUuY2xlYXI9Z1dlO0JTLnByb3RvdHlwZS5kZWxldGU9X1dlO0JTLnByb3RvdHlwZS5nZXQ9eVdlO0JTLnByb3RvdHlwZS5oYXM9dldlO0JTLnByb3RvdHlwZS5zZXQ9eFdlO0padC5leHBvcnRzPUJTfSk7dmFyIHJKdD1IKChJWG4sZUp0KT0+e3ZhciB0SnQ9UVp0KCksYldlPU00KCksd1dlPU9CKCk7ZnVuY3Rpb24gU1dlKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgdEp0LG1hcDpuZXcod1dlfHxiV2UpLHN0cmluZzpuZXcgdEp0fX1lSnQuZXhwb3J0cz1TV2V9KTt2YXIgaUp0PUgoKExYbixuSnQpPT57ZnVuY3Rpb24gTVdlKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiB0PT0ic3RyaW5nInx8dD09Im51bWJlciJ8fHQ9PSJzeW1ib2wifHx0PT0iYm9vbGVhbiI/ZSE9PSJfX3Byb3RvX18iOmU9PT1udWxsfW5KdC5leHBvcnRzPU1XZX0pO3ZhciBDND1IKChrWG4sb0p0KT0+e3ZhciBFV2U9aUp0KCk7ZnVuY3Rpb24gVFdlKGUsdCl7dmFyIHI9ZS5fX2RhdGFfXztyZXR1cm4gRVdlKHQpP3JbdHlwZW9mIHQ9PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06ci5tYXB9b0p0LmV4cG9ydHM9VFdlfSk7dmFyIHNKdD1IKChSWG4sYUp0KT0+e3ZhciBDV2U9QzQoKTtmdW5jdGlvbiBBV2UoZSl7dmFyIHQ9Q1dlKHRoaXMsZSkuZGVsZXRlKGUpO3JldHVybiB0aGlzLnNpemUtPXQ/MTowLHR9YUp0LmV4cG9ydHM9QVdlfSk7dmFyIGNKdD1IKChOWG4sbEp0KT0+e3ZhciBQV2U9QzQoKTtmdW5jdGlvbiBJV2UoZSl7cmV0dXJuIFBXZSh0aGlzLGUpLmdldChlKX1sSnQuZXhwb3J0cz1JV2V9KTt2YXIgaEp0PUgoKERYbix1SnQpPT57dmFyIExXZT1DNCgpO2Z1bmN0aW9uIGtXZShlKXtyZXR1cm4gTFdlKHRoaXMsZSkuaGFzKGUpfXVKdC5leHBvcnRzPWtXZX0pO3ZhciBwSnQ9SCgoT1huLGZKdCk9Pnt2YXIgUldlPUM0KCk7ZnVuY3Rpb24gTldlKGUsdCl7dmFyIHI9UldlKHRoaXMsZSksbj1yLnNpemU7cmV0dXJuIHIuc2V0KGUsdCksdGhpcy5zaXplKz1yLnNpemU9PW4/MDoxLHRoaXN9Zkp0LmV4cG9ydHM9TldlfSk7dmFyIHpCPUgoKHpYbixkSnQpPT57dmFyIERXZT1ySnQoKSxPV2U9c0p0KCkseldlPWNKdCgpLEZXZT1oSnQoKSxCV2U9cEp0KCk7ZnVuY3Rpb24gSFMoZSl7dmFyIHQ9LTEscj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8cjspe3ZhciBuPWVbdF07dGhpcy5zZXQoblswXSxuWzFdKX19SFMucHJvdG90eXBlLmNsZWFyPURXZTtIUy5wcm90b3R5cGUuZGVsZXRlPU9XZTtIUy5wcm90b3R5cGUuZ2V0PXpXZTtIUy5wcm90b3R5cGUuaGFzPUZXZTtIUy5wcm90b3R5cGUuc2V0PUJXZTtkSnQuZXhwb3J0cz1IU30pO3ZhciBnSnQ9SCgoRlhuLG1KdCk9Pnt2YXIgSFdlPU00KCksVldlPU9CKCksVVdlPXpCKCkscVdlPTIwMDtmdW5jdGlvbiBHV2UoZSx0KXt2YXIgcj10aGlzLl9fZGF0YV9fO2lmKHIgaW5zdGFuY2VvZiBIV2Upe3ZhciBuPXIuX19kYXRhX187aWYoIVZXZXx8bi5sZW5ndGg8cVdlLTEpcmV0dXJuIG4ucHVzaChbZSx0XSksdGhpcy5zaXplPSsrci5zaXplLHRoaXM7cj10aGlzLl9fZGF0YV9fPW5ldyBVV2Uobil9cmV0dXJuIHIuc2V0KGUsdCksdGhpcy5zaXplPXIuc2l6ZSx0aGlzfW1KdC5leHBvcnRzPUdXZX0pO3ZhciBBND1IKChCWG4sX0p0KT0+e3ZhciBXV2U9TTQoKSxZV2U9c1p0KCksaldlPWNadCgpLFhXZT1oWnQoKSwkV2U9cFp0KCksS1dlPWdKdCgpO2Z1bmN0aW9uIFZTKGUpe3ZhciB0PXRoaXMuX19kYXRhX189bmV3IFdXZShlKTt0aGlzLnNpemU9dC5zaXplfVZTLnByb3RvdHlwZS5jbGVhcj1ZV2U7VlMucHJvdG90eXBlLmRlbGV0ZT1qV2U7VlMucHJvdG90eXBlLmdldD1YV2U7VlMucHJvdG90eXBlLmhhcz0kV2U7VlMucHJvdG90eXBlLnNldD1LV2U7X0p0LmV4cG9ydHM9VlN9KTt2YXIgRkI9SCgoSFhuLHlKdCk9PntmdW5jdGlvbiBaV2UoZSx0KXtmb3IodmFyIHI9LTEsbj1lPT1udWxsPzA6ZS5sZW5ndGg7KytyPG4mJnQoZVtyXSxyLGUpIT09ITE7KTtyZXR1cm4gZX15SnQuZXhwb3J0cz1aV2V9KTt2YXIgcHN0PUgoKFZYbix2SnQpPT57dmFyIEpXZT1sMCgpLFFXZT1mdW5jdGlvbigpe3RyeXt2YXIgZT1KV2UoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiBlKHt9LCIiLHt9KSxlfWNhdGNoKHQpe319KCk7dkp0LmV4cG9ydHM9UVdlfSk7dmFyIFA0PUgoKFVYbixiSnQpPT57dmFyIHhKdD1wc3QoKTtmdW5jdGlvbiB0WWUoZSx0LHIpe3Q9PSJfX3Byb3RvX18iJiZ4SnQ/eEp0KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cix3cml0YWJsZTohMH0pOmVbdF09cn1iSnQuZXhwb3J0cz10WWV9KTt2YXIgSTQ9SCgocVhuLHdKdCk9Pnt2YXIgZVllPVA0KCksclllPVkxKCksblllPU9iamVjdC5wcm90b3R5cGUsaVllPW5ZZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBvWWUoZSx0LHIpe3ZhciBuPWVbdF07KCEoaVllLmNhbGwoZSx0KSYmclllKG4scikpfHxyPT09dm9pZCAwJiYhKHQgaW4gZSkpJiZlWWUoZSx0LHIpfXdKdC5leHBvcnRzPW9ZZX0pO3ZhciBVUz1IKChHWG4sU0p0KT0+e3ZhciBhWWU9STQoKSxzWWU9UDQoKTtmdW5jdGlvbiBsWWUoZSx0LHIsbil7dmFyIGk9IXI7cnx8KHI9e30pO2Zvcih2YXIgbz0tMSxhPXQubGVuZ3RoOysrbzxhOyl7dmFyIHM9dFtvXSxsPW4/bihyW3NdLGVbc10scyxyLGUpOnZvaWQgMDtsPT09dm9pZCAwJiYobD1lW3NdKSxpP3NZZShyLHMsbCk6YVllKHIscyxsKX1yZXR1cm4gcn1TSnQuZXhwb3J0cz1sWWV9KTt2YXIgRUp0PUgoKFdYbixNSnQpPT57ZnVuY3Rpb24gY1llKGUsdCl7Zm9yKHZhciByPS0xLG49QXJyYXkoZSk7KytyPGU7KW5bcl09dChyKTtyZXR1cm4gbn1NSnQuZXhwb3J0cz1jWWV9KTt2YXIgWXU9SCgoWVhuLFRKdCk9PntmdW5jdGlvbiB1WWUoZSl7cmV0dXJuIGUhPW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0In1USnQuZXhwb3J0cz11WWV9KTt2YXIgQUp0PUgoKGpYbixDSnQpPT57dmFyIGhZZT1zMCgpLGZZZT1ZdSgpLHBZZT0iW29iamVjdCBBcmd1bWVudHNdIjtmdW5jdGlvbiBkWWUoZSl7cmV0dXJuIGZZZShlKSYmaFllKGUpPT1wWWV9Q0p0LmV4cG9ydHM9ZFllfSk7dmFyIHFTPUgoKFhYbixMSnQpPT57dmFyIFBKdD1BSnQoKSxtWWU9WXUoKSxJSnQ9T2JqZWN0LnByb3RvdHlwZSxnWWU9SUp0Lmhhc093blByb3BlcnR5LF9ZZT1JSnQucHJvcGVydHlJc0VudW1lcmFibGUseVllPVBKdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP1BKdDpmdW5jdGlvbihlKXtyZXR1cm4gbVllKGUpJiZnWWUuY2FsbChlLCJjYWxsZWUiKSYmIV9ZZS5jYWxsKGUsImNhbGxlZSIpfTtMSnQuZXhwb3J0cz15WWV9KTt2YXIgVGk9SCgoJFhuLGtKdCk9Pnt2YXIgdlllPUFycmF5LmlzQXJyYXk7a0p0LmV4cG9ydHM9dlllfSk7dmFyIE5KdD1IKChLWG4sUkp0KT0+e2Z1bmN0aW9uIHhZZSgpe3JldHVybiExfVJKdC5leHBvcnRzPXhZZX0pO3ZhciBYMT1IKChMNCxHUyk9Pnt2YXIgYlllPUhjKCksd1llPU5KdCgpLHpKdD10eXBlb2YgTDQ9PSJvYmplY3QiJiZMNCYmIUw0Lm5vZGVUeXBlJiZMNCxESnQ9ekp0JiZ0eXBlb2YgR1M9PSJvYmplY3QiJiZHUyYmIUdTLm5vZGVUeXBlJiZHUyxTWWU9REp0JiZESnQuZXhwb3J0cz09PXpKdCxPSnQ9U1llP2JZZS5CdWZmZXI6dm9pZCAwLE1ZZT1PSnQ/T0p0LmlzQnVmZmVyOnZvaWQgMCxFWWU9TVllfHx3WWU7R1MuZXhwb3J0cz1FWWV9KTt2YXIgazQ9SCgoWlhuLEZKdCk9Pnt2YXIgVFllPTkwMDcxOTkyNTQ3NDA5OTEsQ1llPS9eKD86MHxbMS05XVxkKikkLztmdW5jdGlvbiBBWWUoZSx0KXt2YXIgcj10eXBlb2YgZTtyZXR1cm4gdD10PT1udWxsP1RZZTp0LCEhdCYmKHI9PSJudW1iZXIifHxyIT0ic3ltYm9sIiYmQ1llLnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH1GSnQuZXhwb3J0cz1BWWV9KTt2YXIgQkI9SCgoSlhuLEJKdCk9Pnt2YXIgUFllPTkwMDcxOTkyNTQ3NDA5OTE7ZnVuY3Rpb24gSVllKGUpe3JldHVybiB0eXBlb2YgZT09Im51bWJlciImJmU+LTEmJmUlMT09MCYmZTw9UFllfUJKdC5leHBvcnRzPUlZZX0pO3ZhciBWSnQ9SCgoUVhuLEhKdCk9Pnt2YXIgTFllPXMwKCksa1llPUJCKCksUlllPVl1KCksTlllPSJbb2JqZWN0IEFyZ3VtZW50c10iLERZZT0iW29iamVjdCBBcnJheV0iLE9ZZT0iW29iamVjdCBCb29sZWFuXSIselllPSJbb2JqZWN0IERhdGVdIixGWWU9IltvYmplY3QgRXJyb3JdIixCWWU9IltvYmplY3QgRnVuY3Rpb25dIixIWWU9IltvYmplY3QgTWFwXSIsVlllPSJbb2JqZWN0IE51bWJlcl0iLFVZZT0iW29iamVjdCBPYmplY3RdIixxWWU9IltvYmplY3QgUmVnRXhwXSIsR1llPSJbb2JqZWN0IFNldF0iLFdZZT0iW29iamVjdCBTdHJpbmddIixZWWU9IltvYmplY3QgV2Vha01hcF0iLGpZZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLFhZZT0iW29iamVjdCBEYXRhVmlld10iLCRZZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixLWWU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsWlllPSJbb2JqZWN0IEludDhBcnJheV0iLEpZZT0iW29iamVjdCBJbnQxNkFycmF5XSIsUVllPSJbb2JqZWN0IEludDMyQXJyYXldIix0amU9IltvYmplY3QgVWludDhBcnJheV0iLGVqZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLHJqZT0iW29iamVjdCBVaW50MTZBcnJheV0iLG5qZT0iW29iamVjdCBVaW50MzJBcnJheV0iLFVuPXt9O1VuWyRZZV09VW5bS1llXT1VbltaWWVdPVVuW0pZZV09VW5bUVllXT1Vblt0amVdPVVuW2VqZV09VW5bcmplXT1VbltuamVdPSEwO1VuW05ZZV09VW5bRFllXT1VbltqWWVdPVVuW09ZZV09VW5bWFllXT1Vblt6WWVdPVVuW0ZZZV09VW5bQlllXT1VbltIWWVdPVVuW1ZZZV09VW5bVVllXT1VbltxWWVdPVVuW0dZZV09VW5bV1llXT1VbltZWWVdPSExO2Z1bmN0aW9uIGlqZShlKXtyZXR1cm4gUlllKGUpJiZrWWUoZS5sZW5ndGgpJiYhIVVuW0xZZShlKV19SEp0LmV4cG9ydHM9aWplfSk7dmFyIFI0PUgoKHQkbixVSnQpPT57ZnVuY3Rpb24gb2plKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KX19VUp0LmV4cG9ydHM9b2plfSk7dmFyIEhCPUgoKE40LFdTKT0+e3ZhciBhamU9dXN0KCkscUp0PXR5cGVvZiBOND09Im9iamVjdCImJk40JiYhTjQubm9kZVR5cGUmJk40LEQ0PXFKdCYmdHlwZW9mIFdTPT0ib2JqZWN0IiYmV1MmJiFXUy5ub2RlVHlwZSYmV1Msc2plPUQ0JiZENC5leHBvcnRzPT09cUp0LGRzdD1zamUmJmFqZS5wcm9jZXNzLGxqZT1mdW5jdGlvbigpe3RyeXt2YXIgZT1ENCYmRDQucmVxdWlyZSYmRDQucmVxdWlyZSgidXRpbCIpLnR5cGVzO3JldHVybiBlfHxkc3QmJmRzdC5iaW5kaW5nJiZkc3QuYmluZGluZygidXRpbCIpfWNhdGNoKHQpe319KCk7V1MuZXhwb3J0cz1samV9KTt2YXIgWVM9SCgoZSRuLFlKdCk9Pnt2YXIgY2plPVZKdCgpLHVqZT1SNCgpLEdKdD1IQigpLFdKdD1HSnQmJkdKdC5pc1R5cGVkQXJyYXksaGplPVdKdD91amUoV0p0KTpjamU7WUp0LmV4cG9ydHM9aGplfSk7dmFyIG1zdD1IKChyJG4sakp0KT0+e3ZhciBmamU9RUp0KCkscGplPXFTKCksZGplPVRpKCksbWplPVgxKCksZ2plPWs0KCksX2plPVlTKCkseWplPU9iamVjdC5wcm90b3R5cGUsdmplPXlqZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB4amUoZSx0KXt2YXIgcj1kamUoZSksbj0hciYmcGplKGUpLGk9IXImJiFuJiZtamUoZSksbz0hciYmIW4mJiFpJiZfamUoZSksYT1yfHxufHxpfHxvLHM9YT9mamUoZS5sZW5ndGgsU3RyaW5nKTpbXSxsPXMubGVuZ3RoO2Zvcih2YXIgYyBpbiBlKSh0fHx2amUuY2FsbChlLGMpKSYmIShhJiYoYz09Imxlbmd0aCJ8fGkmJihjPT0ib2Zmc2V0Inx8Yz09InBhcmVudCIpfHxvJiYoYz09ImJ1ZmZlciJ8fGM9PSJieXRlTGVuZ3RoInx8Yz09ImJ5dGVPZmZzZXQiKXx8Z2plKGMsbCkpKSYmcy5wdXNoKGMpO3JldHVybiBzfWpKdC5leHBvcnRzPXhqZX0pO3ZhciBPND1IKChuJG4sWEp0KT0+e3ZhciBiamU9T2JqZWN0LnByb3RvdHlwZTtmdW5jdGlvbiB3amUoZSl7dmFyIHQ9ZSYmZS5jb25zdHJ1Y3RvcixyPXR5cGVvZiB0PT0iZnVuY3Rpb24iJiZ0LnByb3RvdHlwZXx8YmplO3JldHVybiBlPT09cn1YSnQuZXhwb3J0cz13amV9KTt2YXIgZ3N0PUgoKGkkbiwkSnQpPT57ZnVuY3Rpb24gU2plKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlKHQocikpfX0kSnQuZXhwb3J0cz1TamV9KTt2YXIgWkp0PUgoKG8kbixLSnQpPT57dmFyIE1qZT1nc3QoKSxFamU9TWplKE9iamVjdC5rZXlzLE9iamVjdCk7S0p0LmV4cG9ydHM9RWplfSk7dmFyIFZCPUgoKGEkbixKSnQpPT57dmFyIFRqZT1PNCgpLENqZT1aSnQoKSxBamU9T2JqZWN0LnByb3RvdHlwZSxQamU9QWplLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIElqZShlKXtpZighVGplKGUpKXJldHVybiBDamUoZSk7dmFyIHQ9W107Zm9yKHZhciByIGluIE9iamVjdChlKSlQamUuY2FsbChlLHIpJiZyIT0iY29uc3RydWN0b3IiJiZ0LnB1c2gocik7cmV0dXJuIHR9Skp0LmV4cG9ydHM9SWplfSk7dmFyIEJmPUgoKHMkbixRSnQpPT57dmFyIExqZT1GUygpLGtqZT1CQigpO2Z1bmN0aW9uIFJqZShlKXtyZXR1cm4gZSE9bnVsbCYma2plKGUubGVuZ3RoKSYmIUxqZShlKX1RSnQuZXhwb3J0cz1SamV9KTt2YXIgQWQ9SCgobCRuLHRRdCk9Pnt2YXIgTmplPW1zdCgpLERqZT1WQigpLE9qZT1CZigpO2Z1bmN0aW9uIHpqZShlKXtyZXR1cm4gT2plKGUpP05qZShlKTpEamUoZSl9dFF0LmV4cG9ydHM9emplfSk7dmFyIHJRdD1IKChjJG4sZVF0KT0+e3ZhciBGamU9VVMoKSxCamU9QWQoKTtmdW5jdGlvbiBIamUoZSx0KXtyZXR1cm4gZSYmRmplKHQsQmplKHQpLGUpfWVRdC5leHBvcnRzPUhqZX0pO3ZhciBpUXQ9SCgodSRuLG5RdCk9PntmdW5jdGlvbiBWamUoZSl7dmFyIHQ9W107aWYoZSE9bnVsbClmb3IodmFyIHIgaW4gT2JqZWN0KGUpKXQucHVzaChyKTtyZXR1cm4gdH1uUXQuZXhwb3J0cz1WamV9KTt2YXIgYVF0PUgoKGgkbixvUXQpPT57dmFyIFVqZT1NbCgpLHFqZT1PNCgpLEdqZT1pUXQoKSxXamU9T2JqZWN0LnByb3RvdHlwZSxZamU9V2plLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGpqZShlKXtpZighVWplKGUpKXJldHVybiBHamUoZSk7dmFyIHQ9cWplKGUpLHI9W107Zm9yKHZhciBuIGluIGUpbj09ImNvbnN0cnVjdG9yIiYmKHR8fCFZamUuY2FsbChlLG4pKXx8ci5wdXNoKG4pO3JldHVybiByfW9RdC5leHBvcnRzPWpqZX0pO3ZhciBjMD1IKChmJG4sc1F0KT0+e3ZhciBYamU9bXN0KCksJGplPWFRdCgpLEtqZT1CZigpO2Z1bmN0aW9uIFpqZShlKXtyZXR1cm4gS2plKGUpP1hqZShlLCEwKTokamUoZSl9c1F0LmV4cG9ydHM9WmplfSk7dmFyIGNRdD1IKChwJG4sbFF0KT0+e3ZhciBKamU9VVMoKSxRamU9YzAoKTtmdW5jdGlvbiB0WGUoZSx0KXtyZXR1cm4gZSYmSmplKHQsUWplKHQpLGUpfWxRdC5leHBvcnRzPXRYZX0pO3ZhciBfc3Q9SCgoejQsalMpPT57dmFyIGVYZT1IYygpLHBRdD10eXBlb2YgejQ9PSJvYmplY3QiJiZ6NCYmIXo0Lm5vZGVUeXBlJiZ6NCx1UXQ9cFF0JiZ0eXBlb2YgalM9PSJvYmplY3QiJiZqUyYmIWpTLm5vZGVUeXBlJiZqUyxyWGU9dVF0JiZ1UXQuZXhwb3J0cz09PXBRdCxoUXQ9clhlP2VYZS5CdWZmZXI6dm9pZCAwLGZRdD1oUXQ/aFF0LmFsbG9jVW5zYWZlOnZvaWQgMDtmdW5jdGlvbiBuWGUoZSx0KXtpZih0KXJldHVybiBlLnNsaWNlKCk7dmFyIHI9ZS5sZW5ndGgsbj1mUXQ/ZlF0KHIpOm5ldyBlLmNvbnN0cnVjdG9yKHIpO3JldHVybiBlLmNvcHkobiksbn1qUy5leHBvcnRzPW5YZX0pO3ZhciB5c3Q9SCgoZCRuLGRRdCk9PntmdW5jdGlvbiBpWGUoZSx0KXt2YXIgcj0tMSxuPWUubGVuZ3RoO2Zvcih0fHwodD1BcnJheShuKSk7KytyPG47KXRbcl09ZVtyXTtyZXR1cm4gdH1kUXQuZXhwb3J0cz1pWGV9KTt2YXIgdnN0PUgoKG0kbixtUXQpPT57ZnVuY3Rpb24gb1hlKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoLGk9MCxvPVtdOysrcjxuOyl7dmFyIGE9ZVtyXTt0KGEscixlKSYmKG9baSsrXT1hKX1yZXR1cm4gb31tUXQuZXhwb3J0cz1vWGV9KTt2YXIgeHN0PUgoKGckbixnUXQpPT57ZnVuY3Rpb24gYVhlKCl7cmV0dXJuW119Z1F0LmV4cG9ydHM9YVhlfSk7dmFyIFVCPUgoKF8kbix5UXQpPT57dmFyIHNYZT12c3QoKSxsWGU9eHN0KCksY1hlPU9iamVjdC5wcm90b3R5cGUsdVhlPWNYZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxfUXQ9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxoWGU9X1F0P2Z1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP1tdOihlPU9iamVjdChlKSxzWGUoX1F0KGUpLGZ1bmN0aW9uKHQpe3JldHVybiB1WGUuY2FsbChlLHQpfSkpfTpsWGU7eVF0LmV4cG9ydHM9aFhlfSk7dmFyIHhRdD1IKCh5JG4sdlF0KT0+e3ZhciBmWGU9VVMoKSxwWGU9VUIoKTtmdW5jdGlvbiBkWGUoZSx0KXtyZXR1cm4gZlhlKGUscFhlKGUpLHQpfXZRdC5leHBvcnRzPWRYZX0pO3ZhciBxQj1IKCh2JG4sYlF0KT0+e2Z1bmN0aW9uIG1YZShlLHQpe2Zvcih2YXIgcj0tMSxuPXQubGVuZ3RoLGk9ZS5sZW5ndGg7KytyPG47KWVbaStyXT10W3JdO3JldHVybiBlfWJRdC5leHBvcnRzPW1YZX0pO3ZhciBGND1IKCh4JG4sd1F0KT0+e3ZhciBnWGU9Z3N0KCksX1hlPWdYZShPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTt3UXQuZXhwb3J0cz1fWGV9KTt2YXIgYnN0PUgoKGIkbixTUXQpPT57dmFyIHlYZT1xQigpLHZYZT1GNCgpLHhYZT1VQigpLGJYZT14c3QoKSx3WGU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxTWGU9d1hlP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXTtlOyl5WGUodCx4WGUoZSkpLGU9dlhlKGUpO3JldHVybiB0fTpiWGU7U1F0LmV4cG9ydHM9U1hlfSk7dmFyIEVRdD1IKCh3JG4sTVF0KT0+e3ZhciBNWGU9VVMoKSxFWGU9YnN0KCk7ZnVuY3Rpb24gVFhlKGUsdCl7cmV0dXJuIE1YZShlLEVYZShlKSx0KX1NUXQuZXhwb3J0cz1UWGV9KTt2YXIgd3N0PUgoKFMkbixUUXQpPT57dmFyIENYZT1xQigpLEFYZT1UaSgpO2Z1bmN0aW9uIFBYZShlLHQscil7dmFyIG49dChlKTtyZXR1cm4gQVhlKGUpP246Q1hlKG4scihlKSl9VFF0LmV4cG9ydHM9UFhlfSk7dmFyIFNzdD1IKChNJG4sQ1F0KT0+e3ZhciBJWGU9d3N0KCksTFhlPVVCKCksa1hlPUFkKCk7ZnVuY3Rpb24gUlhlKGUpe3JldHVybiBJWGUoZSxrWGUsTFhlKX1DUXQuZXhwb3J0cz1SWGV9KTt2YXIgUFF0PUgoKEUkbixBUXQpPT57dmFyIE5YZT13c3QoKSxEWGU9YnN0KCksT1hlPWMwKCk7ZnVuY3Rpb24gelhlKGUpe3JldHVybiBOWGUoZSxPWGUsRFhlKX1BUXQuZXhwb3J0cz16WGV9KTt2YXIgTFF0PUgoKFQkbixJUXQpPT57dmFyIEZYZT1sMCgpLEJYZT1IYygpLEhYZT1GWGUoQlhlLCJEYXRhVmlldyIpO0lRdC5leHBvcnRzPUhYZX0pO3ZhciBSUXQ9SCgoQyRuLGtRdCk9Pnt2YXIgVlhlPWwwKCksVVhlPUhjKCkscVhlPVZYZShVWGUsIlByb21pc2UiKTtrUXQuZXhwb3J0cz1xWGV9KTt2YXIgTXN0PUgoKEEkbixOUXQpPT57dmFyIEdYZT1sMCgpLFdYZT1IYygpLFlYZT1HWGUoV1hlLCJTZXQiKTtOUXQuZXhwb3J0cz1ZWGV9KTt2YXIgT1F0PUgoKFAkbixEUXQpPT57dmFyIGpYZT1sMCgpLFhYZT1IYygpLCRYZT1qWGUoWFhlLCJXZWFrTWFwIik7RFF0LmV4cG9ydHM9JFhlfSk7dmFyIEsxPUgoKEkkbixxUXQpPT57dmFyIEVzdD1MUXQoKSxUc3Q9T0IoKSxDc3Q9UlF0KCksQXN0PU1zdCgpLFBzdD1PUXQoKSxVUXQ9czAoKSxYUz1mc3QoKSx6UXQ9IltvYmplY3QgTWFwXSIsS1hlPSJbb2JqZWN0IE9iamVjdF0iLEZRdD0iW29iamVjdCBQcm9taXNlXSIsQlF0PSJbb2JqZWN0IFNldF0iLEhRdD0iW29iamVjdCBXZWFrTWFwXSIsVlF0PSJbb2JqZWN0IERhdGFWaWV3XSIsWlhlPVhTKEVzdCksSlhlPVhTKFRzdCksUVhlPVhTKENzdCksdCRlPVhTKEFzdCksZSRlPVhTKFBzdCksJDE9VVF0OyhFc3QmJiQxKG5ldyBFc3QobmV3IEFycmF5QnVmZmVyKDEpKSkhPVZRdHx8VHN0JiYkMShuZXcgVHN0KSE9elF0fHxDc3QmJiQxKENzdC5yZXNvbHZlKCkpIT1GUXR8fEFzdCYmJDEobmV3IEFzdCkhPUJRdHx8UHN0JiYkMShuZXcgUHN0KSE9SFF0KSYmKCQxPWZ1bmN0aW9uKGUpe3ZhciB0PVVRdChlKSxyPXQ9PUtYZT9lLmNvbnN0cnVjdG9yOnZvaWQgMCxuPXI/WFMocik6IiI7aWYobilzd2l0Y2gobil7Y2FzZSBaWGU6cmV0dXJuIFZRdDtjYXNlIEpYZTpyZXR1cm4gelF0O2Nhc2UgUVhlOnJldHVybiBGUXQ7Y2FzZSB0JGU6cmV0dXJuIEJRdDtjYXNlIGUkZTpyZXR1cm4gSFF0fXJldHVybiB0fSk7cVF0LmV4cG9ydHM9JDF9KTt2YXIgV1F0PUgoKEwkbixHUXQpPT57dmFyIHIkZT1PYmplY3QucHJvdG90eXBlLG4kZT1yJGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gaSRlKGUpe3ZhciB0PWUubGVuZ3RoLHI9bmV3IGUuY29uc3RydWN0b3IodCk7cmV0dXJuIHQmJnR5cGVvZiBlWzBdPT0ic3RyaW5nIiYmbiRlLmNhbGwoZSwiaW5kZXgiKSYmKHIuaW5kZXg9ZS5pbmRleCxyLmlucHV0PWUuaW5wdXQpLHJ9R1F0LmV4cG9ydHM9aSRlfSk7dmFyIElzdD1IKChrJG4sWVF0KT0+e3ZhciBvJGU9SGMoKSxhJGU9byRlLlVpbnQ4QXJyYXk7WVF0LmV4cG9ydHM9YSRlfSk7dmFyIEdCPUgoKFIkbixYUXQpPT57dmFyIGpRdD1Jc3QoKTtmdW5jdGlvbiBzJGUoZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IGpRdCh0KS5zZXQobmV3IGpRdChlKSksdH1YUXQuZXhwb3J0cz1zJGV9KTt2YXIgS1F0PUgoKE4kbiwkUXQpPT57dmFyIGwkZT1HQigpO2Z1bmN0aW9uIGMkZShlLHQpe3ZhciByPXQ/bCRlKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IocixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX0kUXQuZXhwb3J0cz1jJGV9KTt2YXIgSlF0PUgoKEQkbixaUXQpPT57dmFyIHUkZT0vXHcqJC87ZnVuY3Rpb24gaCRlKGUpe3ZhciB0PW5ldyBlLmNvbnN0cnVjdG9yKGUuc291cmNlLHUkZS5leGVjKGUpKTtyZXR1cm4gdC5sYXN0SW5kZXg9ZS5sYXN0SW5kZXgsdH1aUXQuZXhwb3J0cz1oJGV9KTt2YXIgbnRlPUgoKE8kbixydGUpPT57dmFyIFFRdD1qMSgpLHR0ZT1RUXQ/UVF0LnByb3RvdHlwZTp2b2lkIDAsZXRlPXR0ZT90dGUudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24gZiRlKGUpe3JldHVybiBldGU/T2JqZWN0KGV0ZS5jYWxsKGUpKTp7fX1ydGUuZXhwb3J0cz1mJGV9KTt2YXIgTHN0PUgoKHokbixpdGUpPT57dmFyIHAkZT1HQigpO2Z1bmN0aW9uIGQkZShlLHQpe3ZhciByPXQ/cCRlKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IocixlLmJ5dGVPZmZzZXQsZS5sZW5ndGgpfWl0ZS5leHBvcnRzPWQkZX0pO3ZhciBhdGU9SCgoRiRuLG90ZSk9Pnt2YXIgbSRlPUdCKCksZyRlPUtRdCgpLF8kZT1KUXQoKSx5JGU9bnRlKCksdiRlPUxzdCgpLHgkZT0iW29iamVjdCBCb29sZWFuXSIsYiRlPSJbb2JqZWN0IERhdGVdIix3JGU9IltvYmplY3QgTWFwXSIsUyRlPSJbb2JqZWN0IE51bWJlcl0iLE0kZT0iW29iamVjdCBSZWdFeHBdIixFJGU9IltvYmplY3QgU2V0XSIsVCRlPSJbb2JqZWN0IFN0cmluZ10iLEMkZT0iW29iamVjdCBTeW1ib2xdIixBJGU9IltvYmplY3QgQXJyYXlCdWZmZXJdIixQJGU9IltvYmplY3QgRGF0YVZpZXddIixJJGU9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsTCRlPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLGskZT0iW29iamVjdCBJbnQ4QXJyYXldIixSJGU9IltvYmplY3QgSW50MTZBcnJheV0iLE4kZT0iW29iamVjdCBJbnQzMkFycmF5XSIsRCRlPSJbb2JqZWN0IFVpbnQ4QXJyYXldIixPJGU9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIix6JGU9IltvYmplY3QgVWludDE2QXJyYXldIixGJGU9IltvYmplY3QgVWludDMyQXJyYXldIjtmdW5jdGlvbiBCJGUoZSx0LHIpe3ZhciBuPWUuY29uc3RydWN0b3I7c3dpdGNoKHQpe2Nhc2UgQSRlOnJldHVybiBtJGUoZSk7Y2FzZSB4JGU6Y2FzZSBiJGU6cmV0dXJuIG5ldyBuKCtlKTtjYXNlIFAkZTpyZXR1cm4gZyRlKGUscik7Y2FzZSBJJGU6Y2FzZSBMJGU6Y2FzZSBrJGU6Y2FzZSBSJGU6Y2FzZSBOJGU6Y2FzZSBEJGU6Y2FzZSBPJGU6Y2FzZSB6JGU6Y2FzZSBGJGU6cmV0dXJuIHYkZShlLHIpO2Nhc2UgdyRlOnJldHVybiBuZXcgbjtjYXNlIFMkZTpjYXNlIFQkZTpyZXR1cm4gbmV3IG4oZSk7Y2FzZSBNJGU6cmV0dXJuIF8kZShlKTtjYXNlIEUkZTpyZXR1cm4gbmV3IG47Y2FzZSBDJGU6cmV0dXJuIHkkZShlKX19b3RlLmV4cG9ydHM9QiRlfSk7dmFyIGtzdD1IKChCJG4sbHRlKT0+e3ZhciBIJGU9TWwoKSxzdGU9T2JqZWN0LmNyZWF0ZSxWJGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBmdW5jdGlvbih0KXtpZighSCRlKHQpKXJldHVybnt9O2lmKHN0ZSlyZXR1cm4gc3RlKHQpO2UucHJvdG90eXBlPXQ7dmFyIHI9bmV3IGU7cmV0dXJuIGUucHJvdG90eXBlPXZvaWQgMCxyfX0oKTtsdGUuZXhwb3J0cz1WJGV9KTt2YXIgUnN0PUgoKEgkbixjdGUpPT57dmFyIFUkZT1rc3QoKSxxJGU9RjQoKSxHJGU9TzQoKTtmdW5jdGlvbiBXJGUoZSl7cmV0dXJuIHR5cGVvZiBlLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhRyRlKGUpP1UkZShxJGUoZSkpOnt9fWN0ZS5leHBvcnRzPVckZX0pO3ZhciBodGU9SCgoViRuLHV0ZSk9Pnt2YXIgWSRlPUsxKCksaiRlPVl1KCksWCRlPSJbb2JqZWN0IE1hcF0iO2Z1bmN0aW9uICQkZShlKXtyZXR1cm4gaiRlKGUpJiZZJGUoZSk9PVgkZX11dGUuZXhwb3J0cz0kJGV9KTt2YXIgbXRlPUgoKFUkbixkdGUpPT57dmFyIEskZT1odGUoKSxaJGU9UjQoKSxmdGU9SEIoKSxwdGU9ZnRlJiZmdGUuaXNNYXAsSiRlPXB0ZT9aJGUocHRlKTpLJGU7ZHRlLmV4cG9ydHM9SiRlfSk7dmFyIF90ZT1IKChxJG4sZ3RlKT0+e3ZhciBRJGU9SzEoKSx0S2U9WXUoKSxlS2U9IltvYmplY3QgU2V0XSI7ZnVuY3Rpb24gcktlKGUpe3JldHVybiB0S2UoZSkmJlEkZShlKT09ZUtlfWd0ZS5leHBvcnRzPXJLZX0pO3ZhciBidGU9SCgoRyRuLHh0ZSk9Pnt2YXIgbktlPV90ZSgpLGlLZT1SNCgpLHl0ZT1IQigpLHZ0ZT15dGUmJnl0ZS5pc1NldCxvS2U9dnRlP2lLZSh2dGUpOm5LZTt4dGUuZXhwb3J0cz1vS2V9KTt2YXIgTnN0PUgoKFckbixFdGUpPT57dmFyIGFLZT1BNCgpLHNLZT1GQigpLGxLZT1JNCgpLGNLZT1yUXQoKSx1S2U9Y1F0KCksaEtlPV9zdCgpLGZLZT15c3QoKSxwS2U9eFF0KCksZEtlPUVRdCgpLG1LZT1Tc3QoKSxnS2U9UFF0KCksX0tlPUsxKCkseUtlPVdRdCgpLHZLZT1hdGUoKSx4S2U9UnN0KCksYktlPVRpKCksd0tlPVgxKCksU0tlPW10ZSgpLE1LZT1NbCgpLEVLZT1idGUoKSxUS2U9QWQoKSxDS2U9YzAoKSxBS2U9MSxQS2U9MixJS2U9NCx3dGU9IltvYmplY3QgQXJndW1lbnRzXSIsTEtlPSJbb2JqZWN0IEFycmF5XSIsa0tlPSJbb2JqZWN0IEJvb2xlYW5dIixSS2U9IltvYmplY3QgRGF0ZV0iLE5LZT0iW29iamVjdCBFcnJvcl0iLFN0ZT0iW29iamVjdCBGdW5jdGlvbl0iLERLZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLE9LZT0iW29iamVjdCBNYXBdIix6S2U9IltvYmplY3QgTnVtYmVyXSIsTXRlPSJbb2JqZWN0IE9iamVjdF0iLEZLZT0iW29iamVjdCBSZWdFeHBdIixCS2U9IltvYmplY3QgU2V0XSIsSEtlPSJbb2JqZWN0IFN0cmluZ10iLFZLZT0iW29iamVjdCBTeW1ib2xdIixVS2U9IltvYmplY3QgV2Vha01hcF0iLHFLZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEdLZT0iW29iamVjdCBEYXRhVmlld10iLFdLZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixZS2U9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsaktlPSJbb2JqZWN0IEludDhBcnJheV0iLFhLZT0iW29iamVjdCBJbnQxNkFycmF5XSIsJEtlPSJbb2JqZWN0IEludDMyQXJyYXldIixLS2U9IltvYmplY3QgVWludDhBcnJheV0iLFpLZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLEpLZT0iW29iamVjdCBVaW50MTZBcnJheV0iLFFLZT0iW29iamVjdCBVaW50MzJBcnJheV0iLEFuPXt9O0FuW3d0ZV09QW5bTEtlXT1BbltxS2VdPUFuW0dLZV09QW5ba0tlXT1BbltSS2VdPUFuW1dLZV09QW5bWUtlXT1BbltqS2VdPUFuW1hLZV09QW5bJEtlXT1BbltPS2VdPUFuW3pLZV09QW5bTXRlXT1BbltGS2VdPUFuW0JLZV09QW5bSEtlXT1BbltWS2VdPUFuW0tLZV09QW5bWktlXT1BbltKS2VdPUFuW1FLZV09ITA7QW5bTktlXT1BbltTdGVdPUFuW1VLZV09ITE7ZnVuY3Rpb24gV0IoZSx0LHIsbixpLG8pe3ZhciBhLHM9dCZBS2UsbD10JlBLZSxjPXQmSUtlO2lmKHImJihhPWk/cihlLG4saSxvKTpyKGUpKSxhIT09dm9pZCAwKXJldHVybiBhO2lmKCFNS2UoZSkpcmV0dXJuIGU7dmFyIHU9YktlKGUpO2lmKHUpe2lmKGE9eUtlKGUpLCFzKXJldHVybiBmS2UoZSxhKX1lbHNle3ZhciBoPV9LZShlKSxmPWg9PVN0ZXx8aD09REtlO2lmKHdLZShlKSlyZXR1cm4gaEtlKGUscyk7aWYoaD09TXRlfHxoPT13dGV8fGYmJiFpKXtpZihhPWx8fGY/e306eEtlKGUpLCFzKXJldHVybiBsP2RLZShlLHVLZShhLGUpKTpwS2UoZSxjS2UoYSxlKSl9ZWxzZXtpZighQW5baF0pcmV0dXJuIGk/ZTp7fTthPXZLZShlLGgscyl9fW98fChvPW5ldyBhS2UpO3ZhciBwPW8uZ2V0KGUpO2lmKHApcmV0dXJuIHA7by5zZXQoZSxhKSxFS2UoZSk/ZS5mb3JFYWNoKGZ1bmN0aW9uKF8pe2EuYWRkKFdCKF8sdCxyLF8sZSxvKSl9KTpTS2UoZSkmJmUuZm9yRWFjaChmdW5jdGlvbihfLHkpe2Euc2V0KHksV0IoXyx0LHIseSxlLG8pKX0pO3ZhciBkPWM/bD9nS2U6bUtlOmw/Q0tlOlRLZSxnPXU/dm9pZCAwOmQoZSk7cmV0dXJuIHNLZShnfHxlLGZ1bmN0aW9uKF8seSl7ZyYmKHk9XyxfPWVbeV0pLGxLZShhLHksV0IoXyx0LHIseSxlLG8pKX0pLGF9RXRlLmV4cG9ydHM9V0J9KTt2YXIgQ3RlPUgoKFkkbixUdGUpPT57dmFyIHRaZT1Oc3QoKSxlWmU9NDtmdW5jdGlvbiByWmUoZSl7cmV0dXJuIHRaZShlLGVaZSl9VHRlLmV4cG9ydHM9clplfSk7dmFyIFlCPUgoKGokbixBdGUpPT57ZnVuY3Rpb24gblplKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1BdGUuZXhwb3J0cz1uWmV9KTt2YXIgSXRlPUgoKFgkbixQdGUpPT57ZnVuY3Rpb24gaVplKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7Zm9yKHZhciBpPS0xLG89T2JqZWN0KHQpLGE9bih0KSxzPWEubGVuZ3RoO3MtLTspe3ZhciBsPWFbZT9zOisraV07aWYocihvW2xdLGwsbyk9PT0hMSlicmVha31yZXR1cm4gdH19UHRlLmV4cG9ydHM9aVplfSk7dmFyIGpCPUgoKCQkbixMdGUpPT57dmFyIG9aZT1JdGUoKSxhWmU9b1plKCk7THRlLmV4cG9ydHM9YVplfSk7dmFyIFhCPUgoKEskbixrdGUpPT57dmFyIHNaZT1qQigpLGxaZT1BZCgpO2Z1bmN0aW9uIGNaZShlLHQpe3JldHVybiBlJiZzWmUoZSx0LGxaZSl9a3RlLmV4cG9ydHM9Y1plfSk7dmFyIE50ZT1IKChaJG4sUnRlKT0+e3ZhciB1WmU9QmYoKTtmdW5jdGlvbiBoWmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiByO2lmKCF1WmUocikpcmV0dXJuIGUocixuKTtmb3IodmFyIGk9ci5sZW5ndGgsbz10P2k6LTEsYT1PYmplY3Qocik7KHQ/by0tOisrbzxpKSYmbihhW29dLG8sYSkhPT0hMTspO3JldHVybiByfX1SdGUuZXhwb3J0cz1oWmV9KTt2YXIgQjQ9SCgoSiRuLER0ZSk9Pnt2YXIgZlplPVhCKCkscFplPU50ZSgpLGRaZT1wWmUoZlplKTtEdGUuZXhwb3J0cz1kWmV9KTt2YXIgdTA9SCgoUSRuLE90ZSk9PntmdW5jdGlvbiBtWmUoZSl7cmV0dXJuIGV9T3RlLmV4cG9ydHM9bVplfSk7dmFyIERzdD1IKCh0S24senRlKT0+e3ZhciBnWmU9dTAoKTtmdW5jdGlvbiBfWmUoZSl7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6Z1plfXp0ZS5leHBvcnRzPV9aZX0pO3ZhciBPc3Q9SCgoZUtuLEZ0ZSk9Pnt2YXIgeVplPUZCKCksdlplPUI0KCkseFplPURzdCgpLGJaZT1UaSgpO2Z1bmN0aW9uIHdaZShlLHQpe3ZhciByPWJaZShlKT95WmU6dlplO3JldHVybiByKGUseFplKHQpKX1GdGUuZXhwb3J0cz13WmV9KTt2YXIgenN0PUgoKHJLbixCdGUpPT57QnRlLmV4cG9ydHM9T3N0KCl9KTt2YXIgVnRlPUgoKG5LbixIdGUpPT57dmFyIFNaZT1CNCgpO2Z1bmN0aW9uIE1aZShlLHQpe3ZhciByPVtdO3JldHVybiBTWmUoZSxmdW5jdGlvbihuLGksbyl7dChuLGksbykmJnIucHVzaChuKX0pLHJ9SHRlLmV4cG9ydHM9TVplfSk7dmFyIHF0ZT1IKChpS24sVXRlKT0+e3ZhciBFWmU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO2Z1bmN0aW9uIFRaZShlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQoZSxFWmUpLHRoaXN9VXRlLmV4cG9ydHM9VFplfSk7dmFyIFd0ZT1IKChvS24sR3RlKT0+e2Z1bmN0aW9uIENaZShlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9R3RlLmV4cG9ydHM9Q1plfSk7dmFyIEZzdD1IKChhS24sWXRlKT0+e3ZhciBBWmU9ekIoKSxQWmU9cXRlKCksSVplPVd0ZSgpO2Z1bmN0aW9uICRCKGUpe3ZhciB0PS0xLHI9ZT09bnVsbD8wOmUubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBBWmU7Kyt0PHI7KXRoaXMuYWRkKGVbdF0pfSRCLnByb3RvdHlwZS5hZGQ9JEIucHJvdG90eXBlLnB1c2g9UFplOyRCLnByb3RvdHlwZS5oYXM9SVplO1l0ZS5leHBvcnRzPSRCfSk7dmFyIFh0ZT1IKChzS24sanRlKT0+e2Z1bmN0aW9uIExaZShlLHQpe2Zvcih2YXIgcj0tMSxuPWU9PW51bGw/MDplLmxlbmd0aDsrK3I8bjspaWYodChlW3JdLHIsZSkpcmV0dXJuITA7cmV0dXJuITF9anRlLmV4cG9ydHM9TFplfSk7dmFyIEJzdD1IKChsS24sJHRlKT0+e2Z1bmN0aW9uIGtaZShlLHQpe3JldHVybiBlLmhhcyh0KX0kdGUuZXhwb3J0cz1rWmV9KTt2YXIgSHN0PUgoKGNLbixLdGUpPT57dmFyIFJaZT1Gc3QoKSxOWmU9WHRlKCksRFplPUJzdCgpLE9aZT0xLHpaZT0yO2Z1bmN0aW9uIEZaZShlLHQscixuLGksbyl7dmFyIGE9ciZPWmUscz1lLmxlbmd0aCxsPXQubGVuZ3RoO2lmKHMhPWwmJiEoYSYmbD5zKSlyZXR1cm4hMTt2YXIgYz1vLmdldChlKSx1PW8uZ2V0KHQpO2lmKGMmJnUpcmV0dXJuIGM9PXQmJnU9PWU7dmFyIGg9LTEsZj0hMCxwPXImelplP25ldyBSWmU6dm9pZCAwO2ZvcihvLnNldChlLHQpLG8uc2V0KHQsZSk7KytoPHM7KXt2YXIgZD1lW2hdLGc9dFtoXTtpZihuKXZhciBfPWE/bihnLGQsaCx0LGUsbyk6bihkLGcsaCxlLHQsbyk7aWYoXyE9PXZvaWQgMCl7aWYoXyljb250aW51ZTtmPSExO2JyZWFrfWlmKHApe2lmKCFOWmUodCxmdW5jdGlvbih5LHgpe2lmKCFEWmUocCx4KSYmKGQ9PT15fHxpKGQseSxyLG4sbykpKXJldHVybiBwLnB1c2goeCl9KSl7Zj0hMTticmVha319ZWxzZSBpZighKGQ9PT1nfHxpKGQsZyxyLG4sbykpKXtmPSExO2JyZWFrfX1yZXR1cm4gby5kZWxldGUoZSksby5kZWxldGUodCksZn1LdGUuZXhwb3J0cz1GWmV9KTt2YXIgSnRlPUgoKHVLbixadGUpPT57ZnVuY3Rpb24gQlplKGUpe3ZhciB0PS0xLHI9QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7clsrK3RdPVtpLG5dfSkscn1adGUuZXhwb3J0cz1CWmV9KTt2YXIgS0I9SCgoaEtuLFF0ZSk9PntmdW5jdGlvbiBIWmUoZSl7dmFyIHQ9LTEscj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obil7clsrK3RdPW59KSxyfVF0ZS5leHBvcnRzPUhaZX0pO3ZhciBpZWU9SCgoZktuLG5lZSk9Pnt2YXIgdGVlPWoxKCksZWVlPUlzdCgpLFZaZT1ZMSgpLFVaZT1Ic3QoKSxxWmU9SnRlKCksR1plPUtCKCksV1plPTEsWVplPTIsalplPSJbb2JqZWN0IEJvb2xlYW5dIixYWmU9IltvYmplY3QgRGF0ZV0iLCRaZT0iW29iamVjdCBFcnJvcl0iLEtaZT0iW29iamVjdCBNYXBdIixaWmU9IltvYmplY3QgTnVtYmVyXSIsSlplPSJbb2JqZWN0IFJlZ0V4cF0iLFFaZT0iW29iamVjdCBTZXRdIix0SmU9IltvYmplY3QgU3RyaW5nXSIsZUplPSJbb2JqZWN0IFN5bWJvbF0iLHJKZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLG5KZT0iW29iamVjdCBEYXRhVmlld10iLHJlZT10ZWU/dGVlLnByb3RvdHlwZTp2b2lkIDAsVnN0PXJlZT9yZWUudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24gaUplKGUsdCxyLG4saSxvLGEpe3N3aXRjaChyKXtjYXNlIG5KZTppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2UgckplOnJldHVybiEoZS5ieXRlTGVuZ3RoIT10LmJ5dGVMZW5ndGh8fCFvKG5ldyBlZWUoZSksbmV3IGVlZSh0KSkpO2Nhc2UgalplOmNhc2UgWFplOmNhc2UgWlplOnJldHVybiBWWmUoK2UsK3QpO2Nhc2UgJFplOnJldHVybiBlLm5hbWU9PXQubmFtZSYmZS5tZXNzYWdlPT10Lm1lc3NhZ2U7Y2FzZSBKWmU6Y2FzZSB0SmU6cmV0dXJuIGU9PXQrIiI7Y2FzZSBLWmU6dmFyIHM9cVplO2Nhc2UgUVplOnZhciBsPW4mV1plO2lmKHN8fChzPUdaZSksZS5zaXplIT10LnNpemUmJiFsKXJldHVybiExO3ZhciBjPWEuZ2V0KGUpO2lmKGMpcmV0dXJuIGM9PXQ7bnw9WVplLGEuc2V0KGUsdCk7dmFyIHU9VVplKHMoZSkscyh0KSxuLGksbyxhKTtyZXR1cm4gYS5kZWxldGUoZSksdTtjYXNlIGVKZTppZihWc3QpcmV0dXJuIFZzdC5jYWxsKGUpPT1Wc3QuY2FsbCh0KX1yZXR1cm4hMX1uZWUuZXhwb3J0cz1pSmV9KTt2YXIgc2VlPUgoKHBLbixhZWUpPT57dmFyIG9lZT1Tc3QoKSxvSmU9MSxhSmU9T2JqZWN0LnByb3RvdHlwZSxzSmU9YUplLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGxKZShlLHQscixuLGksbyl7dmFyIGE9ciZvSmUscz1vZWUoZSksbD1zLmxlbmd0aCxjPW9lZSh0KSx1PWMubGVuZ3RoO2lmKGwhPXUmJiFhKXJldHVybiExO2Zvcih2YXIgaD1sO2gtLTspe3ZhciBmPXNbaF07aWYoIShhP2YgaW4gdDpzSmUuY2FsbCh0LGYpKSlyZXR1cm4hMX12YXIgcD1vLmdldChlKSxkPW8uZ2V0KHQpO2lmKHAmJmQpcmV0dXJuIHA9PXQmJmQ9PWU7dmFyIGc9ITA7by5zZXQoZSx0KSxvLnNldCh0LGUpO2Zvcih2YXIgXz1hOysraDxsOyl7Zj1zW2hdO3ZhciB5PWVbZl0seD10W2ZdO2lmKG4pdmFyIGI9YT9uKHgseSxmLHQsZSxvKTpuKHkseCxmLGUsdCxvKTtpZighKGI9PT12b2lkIDA/eT09PXh8fGkoeSx4LHIsbixvKTpiKSl7Zz0hMTticmVha31ffHwoXz1mPT0iY29uc3RydWN0b3IiKX1pZihnJiYhXyl7dmFyIFM9ZS5jb25zdHJ1Y3RvcixDPXQuY29uc3RydWN0b3I7UyE9QyYmImNvbnN0cnVjdG9yImluIGUmJiJjb25zdHJ1Y3RvciJpbiB0JiYhKHR5cGVvZiBTPT0iZnVuY3Rpb24iJiZTIGluc3RhbmNlb2YgUyYmdHlwZW9mIEM9PSJmdW5jdGlvbiImJkMgaW5zdGFuY2VvZiBDKSYmKGc9ITEpfXJldHVybiBvLmRlbGV0ZShlKSxvLmRlbGV0ZSh0KSxnfWFlZS5leHBvcnRzPWxKZX0pO3ZhciBtZWU9SCgoZEtuLGRlZSk9Pnt2YXIgVXN0PUE0KCksY0plPUhzdCgpLHVKZT1pZWUoKSxoSmU9c2VlKCksbGVlPUsxKCksY2VlPVRpKCksdWVlPVgxKCksZkplPVlTKCkscEplPTEsaGVlPSJbb2JqZWN0IEFyZ3VtZW50c10iLGZlZT0iW29iamVjdCBBcnJheV0iLFpCPSJbb2JqZWN0IE9iamVjdF0iLGRKZT1PYmplY3QucHJvdG90eXBlLHBlZT1kSmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gbUplKGUsdCxyLG4saSxvKXt2YXIgYT1jZWUoZSkscz1jZWUodCksbD1hP2ZlZTpsZWUoZSksYz1zP2ZlZTpsZWUodCk7bD1sPT1oZWU/WkI6bCxjPWM9PWhlZT9aQjpjO3ZhciB1PWw9PVpCLGg9Yz09WkIsZj1sPT1jO2lmKGYmJnVlZShlKSl7aWYoIXVlZSh0KSlyZXR1cm4hMTthPSEwLHU9ITF9aWYoZiYmIXUpcmV0dXJuIG98fChvPW5ldyBVc3QpLGF8fGZKZShlKT9jSmUoZSx0LHIsbixpLG8pOnVKZShlLHQsbCxyLG4saSxvKTtpZighKHImcEplKSl7dmFyIHA9dSYmcGVlLmNhbGwoZSwiX193cmFwcGVkX18iKSxkPWgmJnBlZS5jYWxsKHQsIl9fd3JhcHBlZF9fIik7aWYocHx8ZCl7dmFyIGc9cD9lLnZhbHVlKCk6ZSxfPWQ/dC52YWx1ZSgpOnQ7cmV0dXJuIG98fChvPW5ldyBVc3QpLGkoZyxfLHIsbixvKX19cmV0dXJuIGY/KG98fChvPW5ldyBVc3QpLGhKZShlLHQscixuLGksbykpOiExfWRlZS5leHBvcnRzPW1KZX0pO3ZhciBxc3Q9SCgobUtuLHllZSk9Pnt2YXIgZ0plPW1lZSgpLGdlZT1ZdSgpO2Z1bmN0aW9uIF9lZShlLHQscixuLGkpe3JldHVybiBlPT09dD8hMDplPT1udWxsfHx0PT1udWxsfHwhZ2VlKGUpJiYhZ2VlKHQpP2UhPT1lJiZ0IT09dDpnSmUoZSx0LHIsbixfZWUsaSl9eWVlLmV4cG9ydHM9X2VlfSk7dmFyIHhlZT1IKChnS24sdmVlKT0+e3ZhciBfSmU9QTQoKSx5SmU9cXN0KCksdkplPTEseEplPTI7ZnVuY3Rpb24gYkplKGUsdCxyLG4pe3ZhciBpPXIubGVuZ3RoLG89aSxhPSFuO2lmKGU9PW51bGwpcmV0dXJuIW87Zm9yKGU9T2JqZWN0KGUpO2ktLTspe3ZhciBzPXJbaV07aWYoYSYmc1syXT9zWzFdIT09ZVtzWzBdXTohKHNbMF1pbiBlKSlyZXR1cm4hMX1mb3IoOysraTxvOyl7cz1yW2ldO3ZhciBsPXNbMF0sYz1lW2xdLHU9c1sxXTtpZihhJiZzWzJdKXtpZihjPT09dm9pZCAwJiYhKGwgaW4gZSkpcmV0dXJuITF9ZWxzZXt2YXIgaD1uZXcgX0plO2lmKG4pdmFyIGY9bihjLHUsbCxlLHQsaCk7aWYoIShmPT09dm9pZCAwP3lKZSh1LGMsdkplfHhKZSxuLGgpOmYpKXJldHVybiExfX1yZXR1cm4hMH12ZWUuZXhwb3J0cz1iSmV9KTt2YXIgR3N0PUgoKF9LbixiZWUpPT57dmFyIHdKZT1NbCgpO2Z1bmN0aW9uIFNKZShlKXtyZXR1cm4gZT09PWUmJiF3SmUoZSl9YmVlLmV4cG9ydHM9U0plfSk7dmFyIFNlZT1IKCh5S24sd2VlKT0+e3ZhciBNSmU9R3N0KCksRUplPUFkKCk7ZnVuY3Rpb24gVEplKGUpe2Zvcih2YXIgdD1FSmUoZSkscj10Lmxlbmd0aDtyLS07KXt2YXIgbj10W3JdLGk9ZVtuXTt0W3JdPVtuLGksTUplKGkpXX1yZXR1cm4gdH13ZWUuZXhwb3J0cz1USmV9KTt2YXIgV3N0PUgoKHZLbixNZWUpPT57ZnVuY3Rpb24gQ0plKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsPyExOnJbZV09PT10JiYodCE9PXZvaWQgMHx8ZSBpbiBPYmplY3QocikpfX1NZWUuZXhwb3J0cz1DSmV9KTt2YXIgVGVlPUgoKHhLbixFZWUpPT57dmFyIEFKZT14ZWUoKSxQSmU9U2VlKCksSUplPVdzdCgpO2Z1bmN0aW9uIExKZShlKXt2YXIgdD1QSmUoZSk7cmV0dXJuIHQubGVuZ3RoPT0xJiZ0WzBdWzJdP0lKZSh0WzBdWzBdLHRbMF1bMV0pOmZ1bmN0aW9uKHIpe3JldHVybiByPT09ZXx8QUplKHIsZSx0KX19RWVlLmV4cG9ydHM9TEplfSk7dmFyIFoxPUgoKGJLbixDZWUpPT57dmFyIGtKZT1zMCgpLFJKZT1ZdSgpLE5KZT0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiBESmUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3ltYm9sInx8UkplKGUpJiZrSmUoZSk9PU5KZX1DZWUuZXhwb3J0cz1ESmV9KTt2YXIgSkI9SCgod0tuLEFlZSk9Pnt2YXIgT0plPVRpKCksekplPVoxKCksRkplPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLEJKZT0vXlx3KiQvO2Z1bmN0aW9uIEhKZShlLHQpe2lmKE9KZShlKSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgZTtyZXR1cm4gcj09Im51bWJlciJ8fHI9PSJzeW1ib2wifHxyPT0iYm9vbGVhbiJ8fGU9PW51bGx8fHpKZShlKT8hMDpCSmUudGVzdChlKXx8IUZKZS50ZXN0KGUpfHx0IT1udWxsJiZlIGluIE9iamVjdCh0KX1BZWUuZXhwb3J0cz1ISmV9KTt2YXIgTGVlPUgoKFNLbixJZWUpPT57dmFyIFBlZT16QigpLFZKZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gWXN0KGUsdCl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiJ8fHQhPW51bGwmJnR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoVkplKTt2YXIgcj1mdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxpPXQ/dC5hcHBseSh0aGlzLG4pOm5bMF0sbz1yLmNhY2hlO2lmKG8uaGFzKGkpKXJldHVybiBvLmdldChpKTt2YXIgYT1lLmFwcGx5KHRoaXMsbik7cmV0dXJuIHIuY2FjaGU9by5zZXQoaSxhKXx8byxhfTtyZXR1cm4gci5jYWNoZT1uZXcoWXN0LkNhY2hlfHxQZWUpLHJ9WXN0LkNhY2hlPVBlZTtJZWUuZXhwb3J0cz1Zc3R9KTt2YXIgUmVlPUgoKE1LbixrZWUpPT57dmFyIFVKZT1MZWUoKSxxSmU9NTAwO2Z1bmN0aW9uIEdKZShlKXt2YXIgdD1VSmUoZSxmdW5jdGlvbihuKXtyZXR1cm4gci5zaXplPT09cUplJiZyLmNsZWFyKCksbn0pLHI9dC5jYWNoZTtyZXR1cm4gdH1rZWUuZXhwb3J0cz1HSmV9KTt2YXIgRGVlPUgoKEVLbixOZWUpPT57dmFyIFdKZT1SZWUoKSxZSmU9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csakplPS9cXChcXCk/L2csWEplPVdKZShmdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gZS5jaGFyQ29kZUF0KDApPT09NDYmJnQucHVzaCgiIiksZS5yZXBsYWNlKFlKZSxmdW5jdGlvbihyLG4saSxvKXt0LnB1c2goaT9vLnJlcGxhY2UoakplLCIkMSIpOm58fHIpfSksdH0pO05lZS5leHBvcnRzPVhKZX0pO3ZhciBIND1IKChUS24sT2VlKT0+e2Z1bmN0aW9uICRKZShlLHQpe2Zvcih2YXIgcj0tMSxuPWU9PW51bGw/MDplLmxlbmd0aCxpPUFycmF5KG4pOysrcjxuOylpW3JdPXQoZVtyXSxyLGUpO3JldHVybiBpfU9lZS5leHBvcnRzPSRKZX0pO3ZhciBVZWU9SCgoQ0tuLFZlZSk9Pnt2YXIgemVlPWoxKCksS0plPUg0KCksWkplPVRpKCksSkplPVoxKCksUUplPTEvMCxGZWU9emVlP3plZS5wcm90b3R5cGU6dm9pZCAwLEJlZT1GZWU/RmVlLnRvU3RyaW5nOnZvaWQgMDtmdW5jdGlvbiBIZWUoZSl7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlO2lmKFpKZShlKSlyZXR1cm4gS0plKGUsSGVlKSsiIjtpZihKSmUoZSkpcmV0dXJuIEJlZT9CZWUuY2FsbChlKToiIjt2YXIgdD1lKyIiO3JldHVybiB0PT0iMCImJjEvZT09LVFKZT8iLTAiOnR9VmVlLmV4cG9ydHM9SGVlfSk7dmFyIGpzdD1IKChBS24scWVlKT0+e3ZhciB0UWU9VWVlKCk7ZnVuY3Rpb24gZVFlKGUpe3JldHVybiBlPT1udWxsPyIiOnRRZShlKX1xZWUuZXhwb3J0cz1lUWV9KTt2YXIgVjQ9SCgoUEtuLEdlZSk9Pnt2YXIgclFlPVRpKCksblFlPUpCKCksaVFlPURlZSgpLG9RZT1qc3QoKTtmdW5jdGlvbiBhUWUoZSx0KXtyZXR1cm4gclFlKGUpP2U6blFlKGUsdCk/W2VdOmlRZShvUWUoZSkpfUdlZS5leHBvcnRzPWFRZX0pO3ZhciAkUz1IKChJS24sV2VlKT0+e3ZhciBzUWU9WjEoKSxsUWU9MS8wO2Z1bmN0aW9uIGNRZShlKXtpZih0eXBlb2YgZT09InN0cmluZyJ8fHNRZShlKSlyZXR1cm4gZTt2YXIgdD1lKyIiO3JldHVybiB0PT0iMCImJjEvZT09LWxRZT8iLTAiOnR9V2VlLmV4cG9ydHM9Y1FlfSk7dmFyIFU0PUgoKExLbixZZWUpPT57dmFyIHVRZT1WNCgpLGhRZT0kUygpO2Z1bmN0aW9uIGZRZShlLHQpe3Q9dVFlKHQsZSk7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtlIT1udWxsJiZyPG47KWU9ZVtoUWUodFtyKytdKV07cmV0dXJuIHImJnI9PW4/ZTp2b2lkIDB9WWVlLmV4cG9ydHM9ZlFlfSk7dmFyIFhlZT1IKChrS24samVlKT0+e3ZhciBwUWU9VTQoKTtmdW5jdGlvbiBkUWUoZSx0LHIpe3ZhciBuPWU9PW51bGw/dm9pZCAwOnBRZShlLHQpO3JldHVybiBuPT09dm9pZCAwP3I6bn1qZWUuZXhwb3J0cz1kUWV9KTt2YXIgS2VlPUgoKFJLbiwkZWUpPT57ZnVuY3Rpb24gbVFlKGUsdCl7cmV0dXJuIGUhPW51bGwmJnQgaW4gT2JqZWN0KGUpfSRlZS5leHBvcnRzPW1RZX0pO3ZhciBYc3Q9SCgoTktuLFplZSk9Pnt2YXIgZ1FlPVY0KCksX1FlPXFTKCkseVFlPVRpKCksdlFlPWs0KCkseFFlPUJCKCksYlFlPSRTKCk7ZnVuY3Rpb24gd1FlKGUsdCxyKXt0PWdRZSh0LGUpO2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLG89ITE7KytuPGk7KXt2YXIgYT1iUWUodFtuXSk7aWYoIShvPWUhPW51bGwmJnIoZSxhKSkpYnJlYWs7ZT1lW2FdfXJldHVybiBvfHwrK24hPWk/bzooaT1lPT1udWxsPzA6ZS5sZW5ndGgsISFpJiZ4UWUoaSkmJnZRZShhLGkpJiYoeVFlKGUpfHxfUWUoZSkpKX1aZWUuZXhwb3J0cz13UWV9KTt2YXIgJHN0PUgoKERLbixKZWUpPT57dmFyIFNRZT1LZWUoKSxNUWU9WHN0KCk7ZnVuY3Rpb24gRVFlKGUsdCl7cmV0dXJuIGUhPW51bGwmJk1RZShlLHQsU1FlKX1KZWUuZXhwb3J0cz1FUWV9KTt2YXIgdHJlPUgoKE9LbixRZWUpPT57dmFyIFRRZT1xc3QoKSxDUWU9WGVlKCksQVFlPSRzdCgpLFBRZT1KQigpLElRZT1Hc3QoKSxMUWU9V3N0KCksa1FlPSRTKCksUlFlPTEsTlFlPTI7ZnVuY3Rpb24gRFFlKGUsdCl7cmV0dXJuIFBRZShlKSYmSVFlKHQpP0xRZShrUWUoZSksdCk6ZnVuY3Rpb24ocil7dmFyIG49Q1FlKHIsZSk7cmV0dXJuIG49PT12b2lkIDAmJm49PT10P0FRZShyLGUpOlRRZSh0LG4sUlFlfE5RZSl9fVFlZS5leHBvcnRzPURRZX0pO3ZhciBLc3Q9SCgoektuLGVyZSk9PntmdW5jdGlvbiBPUWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3ZvaWQgMDp0W2VdfX1lcmUuZXhwb3J0cz1PUWV9KTt2YXIgbnJlPUgoKEZLbixycmUpPT57dmFyIHpRZT1VNCgpO2Z1bmN0aW9uIEZRZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHpRZSh0LGUpfX1ycmUuZXhwb3J0cz1GUWV9KTt2YXIgb3JlPUgoKEJLbixpcmUpPT57dmFyIEJRZT1Lc3QoKSxIUWU9bnJlKCksVlFlPUpCKCksVVFlPSRTKCk7ZnVuY3Rpb24gcVFlKGUpe3JldHVybiBWUWUoZSk/QlFlKFVRZShlKSk6SFFlKGUpfWlyZS5leHBvcnRzPXFRZX0pO3ZhciBIZj1IKChIS24sYXJlKT0+e3ZhciBHUWU9VGVlKCksV1FlPXRyZSgpLFlRZT11MCgpLGpRZT1UaSgpLFhRZT1vcmUoKTtmdW5jdGlvbiAkUWUoZSl7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6ZT09bnVsbD9ZUWU6dHlwZW9mIGU9PSJvYmplY3QiP2pRZShlKT9XUWUoZVswXSxlWzFdKTpHUWUoZSk6WFFlKGUpfWFyZS5leHBvcnRzPSRRZX0pO3ZhciBac3Q9SCgoVktuLHNyZSk9Pnt2YXIgS1FlPXZzdCgpLFpRZT1WdGUoKSxKUWU9SGYoKSxRUWU9VGkoKTtmdW5jdGlvbiB0dHIoZSx0KXt2YXIgcj1RUWUoZSk/S1FlOlpRZTtyZXR1cm4gcihlLEpRZSh0LDMpKX1zcmUuZXhwb3J0cz10dHJ9KTt2YXIgY3JlPUgoKFVLbixscmUpPT57dmFyIGV0cj1PYmplY3QucHJvdG90eXBlLHJ0cj1ldHIuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gbnRyKGUsdCl7cmV0dXJuIGUhPW51bGwmJnJ0ci5jYWxsKGUsdCl9bHJlLmV4cG9ydHM9bnRyfSk7dmFyIEpzdD1IKChxS24sdXJlKT0+e3ZhciBpdHI9Y3JlKCksb3RyPVhzdCgpO2Z1bmN0aW9uIGF0cihlLHQpe3JldHVybiBlIT1udWxsJiZvdHIoZSx0LGl0cil9dXJlLmV4cG9ydHM9YXRyfSk7dmFyIGZyZT1IKChHS24saHJlKT0+e3ZhciBzdHI9VkIoKSxsdHI9SzEoKSxjdHI9cVMoKSx1dHI9VGkoKSxodHI9QmYoKSxmdHI9WDEoKSxwdHI9TzQoKSxkdHI9WVMoKSxtdHI9IltvYmplY3QgTWFwXSIsZ3RyPSJbb2JqZWN0IFNldF0iLF90cj1PYmplY3QucHJvdG90eXBlLHl0cj1fdHIuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gdnRyKGUpe2lmKGU9PW51bGwpcmV0dXJuITA7aWYoaHRyKGUpJiYodXRyKGUpfHx0eXBlb2YgZT09InN0cmluZyJ8fHR5cGVvZiBlLnNwbGljZT09ImZ1bmN0aW9uInx8ZnRyKGUpfHxkdHIoZSl8fGN0cihlKSkpcmV0dXJuIWUubGVuZ3RoO3ZhciB0PWx0cihlKTtpZih0PT1tdHJ8fHQ9PWd0cilyZXR1cm4hZS5zaXplO2lmKHB0cihlKSlyZXR1cm4hc3RyKGUpLmxlbmd0aDtmb3IodmFyIHIgaW4gZSlpZih5dHIuY2FsbChlLHIpKXJldHVybiExO3JldHVybiEwfWhyZS5leHBvcnRzPXZ0cn0pO3ZhciBRc3Q9SCgoV0tuLHByZSk9PntmdW5jdGlvbiB4dHIoZSl7cmV0dXJuIGU9PT12b2lkIDB9cHJlLmV4cG9ydHM9eHRyfSk7dmFyIHRsdD1IKChZS24sZHJlKT0+e3ZhciBidHI9QjQoKSx3dHI9QmYoKTtmdW5jdGlvbiBTdHIoZSx0KXt2YXIgcj0tMSxuPXd0cihlKT9BcnJheShlLmxlbmd0aCk6W107cmV0dXJuIGJ0cihlLGZ1bmN0aW9uKGksbyxhKXtuWysrcl09dChpLG8sYSl9KSxufWRyZS5leHBvcnRzPVN0cn0pO3ZhciBlbHQ9SCgoaktuLG1yZSk9Pnt2YXIgTXRyPUg0KCksRXRyPUhmKCksVHRyPXRsdCgpLEN0cj1UaSgpO2Z1bmN0aW9uIEF0cihlLHQpe3ZhciByPUN0cihlKT9NdHI6VHRyO3JldHVybiByKGUsRXRyKHQsMykpfW1yZS5leHBvcnRzPUF0cn0pO3ZhciBfcmU9SCgoWEtuLGdyZSk9PntmdW5jdGlvbiBQdHIoZSx0LHIsbil7dmFyIGk9LTEsbz1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKG4mJm8mJihyPWVbKytpXSk7KytpPG87KXI9dChyLGVbaV0saSxlKTtyZXR1cm4gcn1ncmUuZXhwb3J0cz1QdHJ9KTt2YXIgdnJlPUgoKCRLbix5cmUpPT57ZnVuY3Rpb24gSXRyKGUsdCxyLG4saSl7cmV0dXJuIGkoZSxmdW5jdGlvbihvLGEscyl7cj1uPyhuPSExLG8pOnQocixvLGEscyl9KSxyfXlyZS5leHBvcnRzPUl0cn0pO3ZhciBybHQ9SCgoS0tuLHhyZSk9Pnt2YXIgTHRyPV9yZSgpLGt0cj1CNCgpLFJ0cj1IZigpLE50cj12cmUoKSxEdHI9VGkoKTtmdW5jdGlvbiBPdHIoZSx0LHIpe3ZhciBuPUR0cihlKT9MdHI6TnRyLGk9YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiBuKGUsUnRyKHQsNCkscixpLGt0cil9eHJlLmV4cG9ydHM9T3RyfSk7dmFyIHdyZT1IKChaS24sYnJlKT0+e3ZhciB6dHI9czAoKSxGdHI9VGkoKSxCdHI9WXUoKSxIdHI9IltvYmplY3QgU3RyaW5nXSI7ZnVuY3Rpb24gVnRyKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyJ8fCFGdHIoZSkmJkJ0cihlKSYmenRyKGUpPT1IdHJ9YnJlLmV4cG9ydHM9VnRyfSk7dmFyIE1yZT1IKChKS24sU3JlKT0+e3ZhciBVdHI9S3N0KCkscXRyPVV0cigibGVuZ3RoIik7U3JlLmV4cG9ydHM9cXRyfSk7dmFyIFRyZT1IKChRS24sRXJlKT0+e3ZhciBHdHI9IlxcdWQ4MDAtXFx1ZGZmZiIsV3RyPSJcXHUwMzAwLVxcdTAzNmYiLFl0cj0iXFx1ZmUyMC1cXHVmZTJmIixqdHI9IlxcdTIwZDAtXFx1MjBmZiIsWHRyPVd0citZdHIranRyLCR0cj0iXFx1ZmUwZVxcdWZlMGYiLEt0cj0iXFx1MjAwZCIsWnRyPVJlZ0V4cCgiWyIrS3RyK0d0citYdHIrJHRyKyJdIik7ZnVuY3Rpb24gSnRyKGUpe3JldHVybiBadHIudGVzdChlKX1FcmUuZXhwb3J0cz1KdHJ9KTt2YXIgRHJlPUgoKHRabixOcmUpPT57dmFyIEFyZT0iXFx1ZDgwMC1cXHVkZmZmIixRdHI9IlxcdTAzMDAtXFx1MDM2ZiIsdGVyPSJcXHVmZTIwLVxcdWZlMmYiLGVlcj0iXFx1MjBkMC1cXHUyMGZmIixyZXI9UXRyK3RlcitlZXIsbmVyPSJcXHVmZTBlXFx1ZmUwZiIsaWVyPSJbIitBcmUrIl0iLG5sdD0iWyIrcmVyKyJdIixpbHQ9IlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSIsb2VyPSIoPzoiK25sdCsifCIraWx0KyIpIixQcmU9IlteIitBcmUrIl0iLElyZT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsTHJlPSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIixhZXI9IlxcdTIwMGQiLGtyZT1vZXIrIj8iLFJyZT0iWyIrbmVyKyJdPyIsc2VyPSIoPzoiK2FlcisiKD86IitbUHJlLElyZSxMcmVdLmpvaW4oInwiKSsiKSIrUnJlK2tyZSsiKSoiLGxlcj1ScmUra3JlK3NlcixjZXI9Iig/OiIrW1ByZStubHQrIj8iLG5sdCxJcmUsTHJlLGllcl0uam9pbigifCIpKyIpIixDcmU9UmVnRXhwKGlsdCsiKD89IitpbHQrIil8IitjZXIrbGVyLCJnIik7ZnVuY3Rpb24gdWVyKGUpe2Zvcih2YXIgdD1DcmUubGFzdEluZGV4PTA7Q3JlLnRlc3QoZSk7KSsrdDtyZXR1cm4gdH1OcmUuZXhwb3J0cz11ZXJ9KTt2YXIgenJlPUgoKGVabixPcmUpPT57dmFyIGhlcj1NcmUoKSxmZXI9VHJlKCkscGVyPURyZSgpO2Z1bmN0aW9uIGRlcihlKXtyZXR1cm4gZmVyKGUpP3BlcihlKTpoZXIoZSl9T3JlLmV4cG9ydHM9ZGVyfSk7dmFyIEJyZT1IKChyWm4sRnJlKT0+e3ZhciBtZXI9VkIoKSxnZXI9SzEoKSxfZXI9QmYoKSx5ZXI9d3JlKCksdmVyPXpyZSgpLHhlcj0iW29iamVjdCBNYXBdIixiZXI9IltvYmplY3QgU2V0XSI7ZnVuY3Rpb24gd2VyKGUpe2lmKGU9PW51bGwpcmV0dXJuIDA7aWYoX2VyKGUpKXJldHVybiB5ZXIoZSk/dmVyKGUpOmUubGVuZ3RoO3ZhciB0PWdlcihlKTtyZXR1cm4gdD09eGVyfHx0PT1iZXI/ZS5zaXplOm1lcihlKS5sZW5ndGh9RnJlLmV4cG9ydHM9d2VyfSk7dmFyIFZyZT1IKChuWm4sSHJlKT0+e3ZhciBTZXI9RkIoKSxNZXI9a3N0KCksRWVyPVhCKCksVGVyPUhmKCksQ2VyPUY0KCksQWVyPVRpKCksUGVyPVgxKCksSWVyPUZTKCksTGVyPU1sKCksa2VyPVlTKCk7ZnVuY3Rpb24gUmVyKGUsdCxyKXt2YXIgbj1BZXIoZSksaT1ufHxQZXIoZSl8fGtlcihlKTtpZih0PVRlcih0LDQpLHI9PW51bGwpe3ZhciBvPWUmJmUuY29uc3RydWN0b3I7aT9yPW4/bmV3IG86W106TGVyKGUpP3I9SWVyKG8pP01lcihDZXIoZSkpOnt9OnI9e319cmV0dXJuKGk/U2VyOkVlcikoZSxmdW5jdGlvbihhLHMsbCl7cmV0dXJuIHQocixhLHMsbCl9KSxyfUhyZS5leHBvcnRzPVJlcn0pO3ZhciBXcmU9SCgoaVpuLEdyZSk9Pnt2YXIgVXJlPWoxKCksTmVyPXFTKCksRGVyPVRpKCkscXJlPVVyZT9VcmUuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDtmdW5jdGlvbiBPZXIoZSl7cmV0dXJuIERlcihlKXx8TmVyKGUpfHwhIShxcmUmJmUmJmVbcXJlXSl9R3JlLmV4cG9ydHM9T2VyfSk7dmFyIFFCPUgoKG9abixqcmUpPT57dmFyIHplcj1xQigpLEZlcj1XcmUoKTtmdW5jdGlvbiBZcmUoZSx0LHIsbixpKXt2YXIgbz0tMSxhPWUubGVuZ3RoO2ZvcihyfHwocj1GZXIpLGl8fChpPVtdKTsrK288YTspe3ZhciBzPWVbb107dD4wJiZyKHMpP3Q+MT9ZcmUocyx0LTEscixuLGkpOnplcihpLHMpOm58fChpW2kubGVuZ3RoXT1zKX1yZXR1cm4gaX1qcmUuZXhwb3J0cz1ZcmV9KTt2YXIgJHJlPUgoKGFabixYcmUpPT57ZnVuY3Rpb24gQmVyKGUsdCxyKXtzd2l0Y2goci5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZS5jYWxsKHQpO2Nhc2UgMTpyZXR1cm4gZS5jYWxsKHQsclswXSk7Y2FzZSAyOnJldHVybiBlLmNhbGwodCxyWzBdLHJbMV0pO2Nhc2UgMzpyZXR1cm4gZS5jYWxsKHQsclswXSxyWzFdLHJbMl0pfXJldHVybiBlLmFwcGx5KHQscil9WHJlLmV4cG9ydHM9QmVyfSk7dmFyIG9sdD1IKChzWm4sWnJlKT0+e3ZhciBIZXI9JHJlKCksS3JlPU1hdGgubWF4O2Z1bmN0aW9uIFZlcihlLHQscil7cmV0dXJuIHQ9S3JlKHQ9PT12b2lkIDA/ZS5sZW5ndGgtMTp0LDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBuPWFyZ3VtZW50cyxpPS0xLG89S3JlKG4ubGVuZ3RoLXQsMCksYT1BcnJheShvKTsrK2k8bzspYVtpXT1uW3QraV07aT0tMTtmb3IodmFyIHM9QXJyYXkodCsxKTsrK2k8dDspc1tpXT1uW2ldO3JldHVybiBzW3RdPXIoYSksSGVyKGUsdGhpcyxzKX19WnJlLmV4cG9ydHM9VmVyfSk7dmFyIHRuZT1IKChsWm4sUXJlKT0+e3ZhciBVZXI9WUIoKSxKcmU9cHN0KCkscWVyPXUwKCksR2VyPUpyZT9mdW5jdGlvbihlLHQpe3JldHVybiBKcmUoZSwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpVZXIodCksd3JpdGFibGU6ITB9KX06cWVyO1FyZS5leHBvcnRzPUdlcn0pO3ZhciBybmU9SCgoY1puLGVuZSk9Pnt2YXIgV2VyPTgwMCxZZXI9MTYsamVyPURhdGUubm93O2Z1bmN0aW9uIFhlcihlKXt2YXIgdD0wLHI9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1qZXIoKSxpPVllci0obi1yKTtpZihyPW4saT4wKXtpZigrK3Q+PVdlcilyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgdD0wO3JldHVybiBlLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX1lbmUuZXhwb3J0cz1YZXJ9KTt2YXIgYWx0PUgoKHVabixubmUpPT57dmFyICRlcj10bmUoKSxLZXI9cm5lKCksWmVyPUtlcigkZXIpO25uZS5leHBvcnRzPVplcn0pO3ZhciBxND1IKChoWm4saW5lKT0+e3ZhciBKZXI9dTAoKSxRZXI9b2x0KCksdHJyPWFsdCgpO2Z1bmN0aW9uIGVycihlLHQpe3JldHVybiB0cnIoUWVyKGUsdCxKZXIpLGUrIiIpfWluZS5leHBvcnRzPWVycn0pO3ZhciBzbHQ9SCgoZlpuLG9uZSk9PntmdW5jdGlvbiBycnIoZSx0LHIsbil7Zm9yKHZhciBpPWUubGVuZ3RoLG89cisobj8xOi0xKTtuP28tLTorK288aTspaWYodChlW29dLG8sZSkpcmV0dXJuIG87cmV0dXJuLTF9b25lLmV4cG9ydHM9cnJyfSk7dmFyIHNuZT1IKChwWm4sYW5lKT0+e2Z1bmN0aW9uIG5ycihlKXtyZXR1cm4gZSE9PWV9YW5lLmV4cG9ydHM9bnJyfSk7dmFyIGNuZT1IKChkWm4sbG5lKT0+e2Z1bmN0aW9uIGlycihlLHQscil7Zm9yKHZhciBuPXItMSxpPWUubGVuZ3RoOysrbjxpOylpZihlW25dPT09dClyZXR1cm4gbjtyZXR1cm4tMX1sbmUuZXhwb3J0cz1pcnJ9KTt2YXIgaG5lPUgoKG1abix1bmUpPT57dmFyIG9ycj1zbHQoKSxhcnI9c25lKCksc3JyPWNuZSgpO2Z1bmN0aW9uIGxycihlLHQscil7cmV0dXJuIHQ9PT10P3NycihlLHQscik6b3JyKGUsYXJyLHIpfXVuZS5leHBvcnRzPWxycn0pO3ZhciBwbmU9SCgoZ1puLGZuZSk9Pnt2YXIgY3JyPWhuZSgpO2Z1bmN0aW9uIHVycihlLHQpe3ZhciByPWU9PW51bGw/MDplLmxlbmd0aDtyZXR1cm4hIXImJmNycihlLHQsMCk+LTF9Zm5lLmV4cG9ydHM9dXJyfSk7dmFyIG1uZT1IKChfWm4sZG5lKT0+e2Z1bmN0aW9uIGhycihlLHQscil7Zm9yKHZhciBuPS0xLGk9ZT09bnVsbD8wOmUubGVuZ3RoOysrbjxpOylpZihyKHQsZVtuXSkpcmV0dXJuITA7cmV0dXJuITF9ZG5lLmV4cG9ydHM9aHJyfSk7dmFyIF9uZT1IKCh5Wm4sZ25lKT0+e2Z1bmN0aW9uIGZycigpe31nbmUuZXhwb3J0cz1mcnJ9KTt2YXIgdm5lPUgoKHZabix5bmUpPT57dmFyIGxsdD1Nc3QoKSxwcnI9X25lKCksZHJyPUtCKCksbXJyPTEvMCxncnI9bGx0JiYxL2RycihuZXcgbGx0KFssLTBdKSlbMV09PW1ycj9mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGxsdChlKX06cHJyO3luZS5leHBvcnRzPWdycn0pO3ZhciBibmU9SCgoeFpuLHhuZSk9Pnt2YXIgX3JyPUZzdCgpLHlycj1wbmUoKSx2cnI9bW5lKCkseHJyPUJzdCgpLGJycj12bmUoKSx3cnI9S0IoKSxTcnI9MjAwO2Z1bmN0aW9uIE1ycihlLHQscil7dmFyIG49LTEsaT15cnIsbz1lLmxlbmd0aCxhPSEwLHM9W10sbD1zO2lmKHIpYT0hMSxpPXZycjtlbHNlIGlmKG8+PVNycil7dmFyIGM9dD9udWxsOmJycihlKTtpZihjKXJldHVybiB3cnIoYyk7YT0hMSxpPXhycixsPW5ldyBfcnJ9ZWxzZSBsPXQ/W106czt0OmZvcig7KytuPG87KXt2YXIgdT1lW25dLGg9dD90KHUpOnU7aWYodT1yfHx1IT09MD91OjAsYSYmaD09PWgpe2Zvcih2YXIgZj1sLmxlbmd0aDtmLS07KWlmKGxbZl09PT1oKWNvbnRpbnVlIHQ7dCYmbC5wdXNoKGgpLHMucHVzaCh1KX1lbHNlIGkobCxoLHIpfHwobCE9PXMmJmwucHVzaChoKSxzLnB1c2godSkpfXJldHVybiBzfXhuZS5leHBvcnRzPU1ycn0pO3ZhciBjbHQ9SCgoYlpuLHduZSk9Pnt2YXIgRXJyPUJmKCksVHJyPVl1KCk7ZnVuY3Rpb24gQ3JyKGUpe3JldHVybiBUcnIoZSkmJkVycihlKX13bmUuZXhwb3J0cz1DcnJ9KTt2YXIgTW5lPUgoKHdabixTbmUpPT57dmFyIEFycj1RQigpLFBycj1xNCgpLElycj1ibmUoKSxMcnI9Y2x0KCksa3JyPVBycihmdW5jdGlvbihlKXtyZXR1cm4gSXJyKEFycihlLDEsTHJyLCEwKSl9KTtTbmUuZXhwb3J0cz1rcnJ9KTt2YXIgVG5lPUgoKFNabixFbmUpPT57dmFyIFJycj1INCgpO2Z1bmN0aW9uIE5ycihlLHQpe3JldHVybiBScnIodCxmdW5jdGlvbihyKXtyZXR1cm4gZVtyXX0pfUVuZS5leHBvcnRzPU5ycn0pO3ZhciB1bHQ9SCgoTVpuLENuZSk9Pnt2YXIgRHJyPVRuZSgpLE9ycj1BZCgpO2Z1bmN0aW9uIHpycihlKXtyZXR1cm4gZT09bnVsbD9bXTpEcnIoZSxPcnIoZSkpfUNuZS5leHBvcnRzPXpycn0pO3ZhciBFbD1IKChFWm4sQW5lKT0+e3ZhciB0SDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e3RIPXtjbG9uZTpDdGUoKSxjb25zdGFudDpZQigpLGVhY2g6enN0KCksZmlsdGVyOlpzdCgpLGhhczpKc3QoKSxpc0FycmF5OlRpKCksaXNFbXB0eTpmcmUoKSxpc0Z1bmN0aW9uOkZTKCksaXNVbmRlZmluZWQ6UXN0KCksa2V5czpBZCgpLG1hcDplbHQoKSxyZWR1Y2U6cmx0KCksc2l6ZTpCcmUoKSx0cmFuc2Zvcm06VnJlKCksdW5pb246TW5lKCksdmFsdWVzOnVsdCgpfX1jYXRjaChlKXt9dEh8fCh0SD13aW5kb3cuXyk7QW5lLmV4cG9ydHM9dEh9KTt2YXIgZUg9SCgoQ1puLGtuZSk9PnsidXNlIHN0cmljdCI7dmFyIGplPUVsKCk7a25lLmV4cG9ydHM9Y3I7dmFyIEZycj0iXDAiLEoxPSJcMCIsUG5lPSIBIjtmdW5jdGlvbiBjcihlKXt0aGlzLl9pc0RpcmVjdGVkPWplLmhhcyhlLCJkaXJlY3RlZCIpP2UuZGlyZWN0ZWQ6ITAsdGhpcy5faXNNdWx0aWdyYXBoPWplLmhhcyhlLCJtdWx0aWdyYXBoIik/ZS5tdWx0aWdyYXBoOiExLHRoaXMuX2lzQ29tcG91bmQ9amUuaGFzKGUsImNvbXBvdW5kIik/ZS5jb21wb3VuZDohMSx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPWplLmNvbnN0YW50KHZvaWQgMCksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPWplLmNvbnN0YW50KHZvaWQgMCksdGhpcy5fbm9kZXM9e30sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudD17fSx0aGlzLl9jaGlsZHJlbj17fSx0aGlzLl9jaGlsZHJlbltKMV09e30pLHRoaXMuX2luPXt9LHRoaXMuX3ByZWRzPXt9LHRoaXMuX291dD17fSx0aGlzLl9zdWNzPXt9LHRoaXMuX2VkZ2VPYmpzPXt9LHRoaXMuX2VkZ2VMYWJlbHM9e319Y3IucHJvdG90eXBlLl9ub2RlQ291bnQ9MDtjci5wcm90b3R5cGUuX2VkZ2VDb3VudD0wO2NyLnByb3RvdHlwZS5pc0RpcmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9O2NyLnByb3RvdHlwZS5pc011bHRpZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNNdWx0aWdyYXBofTtjci5wcm90b3R5cGUuaXNDb21wb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0NvbXBvdW5kfTtjci5wcm90b3R5cGUuc2V0R3JhcGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xhYmVsPWUsdGhpc307Y3IucHJvdG90eXBlLmdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhYmVsfTtjci5wcm90b3R5cGUuc2V0RGVmYXVsdE5vZGVMYWJlbD1mdW5jdGlvbihlKXtyZXR1cm4gamUuaXNGdW5jdGlvbihlKXx8KGU9amUuY29uc3RhbnQoZSkpLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1lLHRoaXN9O2NyLnByb3RvdHlwZS5ub2RlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9kZUNvdW50fTtjci5wcm90b3R5cGUubm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gamUua2V5cyh0aGlzLl9ub2Rlcyl9O2NyLnByb3RvdHlwZS5zb3VyY2VzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gamUuZmlsdGVyKHRoaXMubm9kZXMoKSxmdW5jdGlvbih0KXtyZXR1cm4gamUuaXNFbXB0eShlLl9pblt0XSl9KX07Y3IucHJvdG90eXBlLnNpbmtzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gamUuZmlsdGVyKHRoaXMubm9kZXMoKSxmdW5jdGlvbih0KXtyZXR1cm4gamUuaXNFbXB0eShlLl9vdXRbdF0pfSl9O2NyLnByb3RvdHlwZS5zZXROb2Rlcz1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cyxuPXRoaXM7cmV0dXJuIGplLmVhY2goZSxmdW5jdGlvbihpKXtyLmxlbmd0aD4xP24uc2V0Tm9kZShpLHQpOm4uc2V0Tm9kZShpKX0pLHRoaXN9O2NyLnByb3RvdHlwZS5zZXROb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGplLmhhcyh0aGlzLl9ub2RlcyxlKT8oYXJndW1lbnRzLmxlbmd0aD4xJiYodGhpcy5fbm9kZXNbZV09dCksdGhpcyk6KHRoaXMuX25vZGVzW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT90OnRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbihlKSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50W2VdPUoxLHRoaXMuX2NoaWxkcmVuW2VdPXt9LHRoaXMuX2NoaWxkcmVuW0oxXVtlXT0hMCksdGhpcy5faW5bZV09e30sdGhpcy5fcHJlZHNbZV09e30sdGhpcy5fb3V0W2VdPXt9LHRoaXMuX3N1Y3NbZV09e30sKyt0aGlzLl9ub2RlQ291bnQsdGhpcyl9O2NyLnByb3RvdHlwZS5ub2RlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9ub2Rlc1tlXX07Y3IucHJvdG90eXBlLmhhc05vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGplLmhhcyh0aGlzLl9ub2RlcyxlKX07Y3IucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZihqZS5oYXModGhpcy5fbm9kZXMsZSkpe3ZhciByPWZ1bmN0aW9uKG4pe3QucmVtb3ZlRWRnZSh0Ll9lZGdlT2Jqc1tuXSl9O2RlbGV0ZSB0aGlzLl9ub2Rlc1tlXSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QoZSksZGVsZXRlIHRoaXMuX3BhcmVudFtlXSxqZS5lYWNoKHRoaXMuY2hpbGRyZW4oZSksZnVuY3Rpb24obil7dC5zZXRQYXJlbnQobil9KSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bZV0pLGplLmVhY2goamUua2V5cyh0aGlzLl9pbltlXSksciksZGVsZXRlIHRoaXMuX2luW2VdLGRlbGV0ZSB0aGlzLl9wcmVkc1tlXSxqZS5lYWNoKGplLmtleXModGhpcy5fb3V0W2VdKSxyKSxkZWxldGUgdGhpcy5fb3V0W2VdLGRlbGV0ZSB0aGlzLl9zdWNzW2VdLC0tdGhpcy5fbm9kZUNvdW50fXJldHVybiB0aGlzfTtjci5wcm90b3R5cGUuc2V0UGFyZW50PWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2lzQ29tcG91bmQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IHBhcmVudCBpbiBhIG5vbi1jb21wb3VuZCBncmFwaCIpO2lmKGplLmlzVW5kZWZpbmVkKHQpKXQ9SjE7ZWxzZXt0Kz0iIjtmb3IodmFyIHI9dDshamUuaXNVbmRlZmluZWQocik7cj10aGlzLnBhcmVudChyKSlpZihyPT09ZSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgIit0KyIgYXMgcGFyZW50IG9mICIrZSsiIHdvdWxkIGNyZWF0ZSBhIGN5Y2xlIik7dGhpcy5zZXROb2RlKHQpfXJldHVybiB0aGlzLnNldE5vZGUoZSksdGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QoZSksdGhpcy5fcGFyZW50W2VdPXQsdGhpcy5fY2hpbGRyZW5bdF1bZV09ITAsdGhpc307Y3IucHJvdG90eXBlLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdD1mdW5jdGlvbihlKXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W2VdXVtlXX07Y3IucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbihlKXtpZih0aGlzLl9pc0NvbXBvdW5kKXt2YXIgdD10aGlzLl9wYXJlbnRbZV07aWYodCE9PUoxKXJldHVybiB0fX07Y3IucHJvdG90eXBlLmNoaWxkcmVuPWZ1bmN0aW9uKGUpe2lmKGplLmlzVW5kZWZpbmVkKGUpJiYoZT1KMSksdGhpcy5faXNDb21wb3VuZCl7dmFyIHQ9dGhpcy5fY2hpbGRyZW5bZV07aWYodClyZXR1cm4gamUua2V5cyh0KX1lbHNle2lmKGU9PT1KMSlyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZShlKSlyZXR1cm5bXX19O2NyLnByb3RvdHlwZS5wcmVkZWNlc3NvcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcHJlZHNbZV07aWYodClyZXR1cm4gamUua2V5cyh0KX07Y3IucHJvdG90eXBlLnN1Y2Nlc3NvcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fc3Vjc1tlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfTtjci5wcm90b3R5cGUubmVpZ2hib3JzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJlZGVjZXNzb3JzKGUpO2lmKHQpcmV0dXJuIGplLnVuaW9uKHQsdGhpcy5zdWNjZXNzb3JzKGUpKX07Y3IucHJvdG90eXBlLmlzTGVhZj1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdGhpcy5pc0RpcmVjdGVkKCk/dD10aGlzLnN1Y2Nlc3NvcnMoZSk6dD10aGlzLm5laWdoYm9ycyhlKSx0Lmxlbmd0aD09PTB9O2NyLnByb3RvdHlwZS5maWx0ZXJOb2Rlcz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih7ZGlyZWN0ZWQ6dGhpcy5faXNEaXJlY3RlZCxtdWx0aWdyYXBoOnRoaXMuX2lzTXVsdGlncmFwaCxjb21wb3VuZDp0aGlzLl9pc0NvbXBvdW5kfSk7dC5zZXRHcmFwaCh0aGlzLmdyYXBoKCkpO3ZhciByPXRoaXM7amUuZWFjaCh0aGlzLl9ub2RlcyxmdW5jdGlvbihvLGEpe2UoYSkmJnQuc2V0Tm9kZShhLG8pfSksamUuZWFjaCh0aGlzLl9lZGdlT2JqcyxmdW5jdGlvbihvKXt0Lmhhc05vZGUoby52KSYmdC5oYXNOb2RlKG8udykmJnQuc2V0RWRnZShvLHIuZWRnZShvKSl9KTt2YXIgbj17fTtmdW5jdGlvbiBpKG8pe3ZhciBhPXIucGFyZW50KG8pO3JldHVybiBhPT09dm9pZCAwfHx0Lmhhc05vZGUoYSk/KG5bb109YSxhKTphIGluIG4/blthXTppKGEpfXJldHVybiB0aGlzLl9pc0NvbXBvdW5kJiZqZS5lYWNoKHQubm9kZXMoKSxmdW5jdGlvbihvKXt0LnNldFBhcmVudChvLGkobykpfSksdH07Y3IucHJvdG90eXBlLnNldERlZmF1bHRFZGdlTGFiZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGplLmlzRnVuY3Rpb24oZSl8fChlPWplLmNvbnN0YW50KGUpKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49ZSx0aGlzfTtjci5wcm90b3R5cGUuZWRnZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VkZ2VDb3VudH07Y3IucHJvdG90eXBlLmVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIGplLnZhbHVlcyh0aGlzLl9lZGdlT2Jqcyl9O2NyLnByb3RvdHlwZS5zZXRQYXRoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gamUucmVkdWNlKGUsZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5sZW5ndGg+MT9yLnNldEVkZ2UoaSxvLHQpOnIuc2V0RWRnZShpLG8pLG99KSx0aGlzfTtjci5wcm90b3R5cGUuc2V0RWRnZT1mdW5jdGlvbigpe3ZhciBlLHQscixuLGk9ITEsbz1hcmd1bWVudHNbMF07dHlwZW9mIG89PSJvYmplY3QiJiZvIT09bnVsbCYmInYiaW4gbz8oZT1vLnYsdD1vLncscj1vLm5hbWUsYXJndW1lbnRzLmxlbmd0aD09PTImJihuPWFyZ3VtZW50c1sxXSxpPSEwKSk6KGU9byx0PWFyZ3VtZW50c1sxXSxyPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJihuPWFyZ3VtZW50c1syXSxpPSEwKSksZT0iIitlLHQ9IiIrdCxqZS5pc1VuZGVmaW5lZChyKXx8KHI9IiIrcik7dmFyIGE9RzQodGhpcy5faXNEaXJlY3RlZCxlLHQscik7aWYoamUuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsYSkpcmV0dXJuIGkmJih0aGlzLl9lZGdlTGFiZWxzW2FdPW4pLHRoaXM7aWYoIWplLmlzVW5kZWZpbmVkKHIpJiYhdGhpcy5faXNNdWx0aWdyYXBoKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBhIG5hbWVkIGVkZ2Ugd2hlbiBpc011bHRpZ3JhcGggPSBmYWxzZSIpO3RoaXMuc2V0Tm9kZShlKSx0aGlzLnNldE5vZGUodCksdGhpcy5fZWRnZUxhYmVsc1thXT1pP246dGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuKGUsdCxyKTt2YXIgcz1CcnIodGhpcy5faXNEaXJlY3RlZCxlLHQscik7cmV0dXJuIGU9cy52LHQ9cy53LE9iamVjdC5mcmVlemUocyksdGhpcy5fZWRnZU9ianNbYV09cyxJbmUodGhpcy5fcHJlZHNbdF0sZSksSW5lKHRoaXMuX3N1Y3NbZV0sdCksdGhpcy5faW5bdF1bYV09cyx0aGlzLl9vdXRbZV1bYV09cyx0aGlzLl9lZGdlQ291bnQrKyx0aGlzfTtjci5wcm90b3R5cGUuZWRnZT1mdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD09PTE/aGx0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpHNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gdGhpcy5fZWRnZUxhYmVsc1tuXX07Y3IucHJvdG90eXBlLmhhc0VkZ2U9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg9PT0xP2hsdCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6RzQodGhpcy5faXNEaXJlY3RlZCxlLHQscik7cmV0dXJuIGplLmhhcyh0aGlzLl9lZGdlTGFiZWxzLG4pfTtjci5wcm90b3R5cGUucmVtb3ZlRWRnZT1mdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD09PTE/aGx0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpHNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKSxpPXRoaXMuX2VkZ2VPYmpzW25dO3JldHVybiBpJiYoZT1pLnYsdD1pLncsZGVsZXRlIHRoaXMuX2VkZ2VMYWJlbHNbbl0sZGVsZXRlIHRoaXMuX2VkZ2VPYmpzW25dLExuZSh0aGlzLl9wcmVkc1t0XSxlKSxMbmUodGhpcy5fc3Vjc1tlXSx0KSxkZWxldGUgdGhpcy5faW5bdF1bbl0sZGVsZXRlIHRoaXMuX291dFtlXVtuXSx0aGlzLl9lZGdlQ291bnQtLSksdGhpc307Y3IucHJvdG90eXBlLmluRWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9pbltlXTtpZihyKXt2YXIgbj1qZS52YWx1ZXMocik7cmV0dXJuIHQ/amUuZmlsdGVyKG4sZnVuY3Rpb24oaSl7cmV0dXJuIGkudj09PXR9KTpufX07Y3IucHJvdG90eXBlLm91dEVkZ2VzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fb3V0W2VdO2lmKHIpe3ZhciBuPWplLnZhbHVlcyhyKTtyZXR1cm4gdD9qZS5maWx0ZXIobixmdW5jdGlvbihpKXtyZXR1cm4gaS53PT09dH0pOm59fTtjci5wcm90b3R5cGUubm9kZUVkZ2VzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5pbkVkZ2VzKGUsdCk7aWYocilyZXR1cm4gci5jb25jYXQodGhpcy5vdXRFZGdlcyhlLHQpKX07ZnVuY3Rpb24gSW5lKGUsdCl7ZVt0XT9lW3RdKys6ZVt0XT0xfWZ1bmN0aW9uIExuZShlLHQpey0tZVt0XXx8ZGVsZXRlIGVbdF19ZnVuY3Rpb24gRzQoZSx0LHIsbil7dmFyIGk9IiIrdCxvPSIiK3I7aWYoIWUmJmk+byl7dmFyIGE9aTtpPW8sbz1hfXJldHVybiBpK1BuZStvK1BuZSsoamUuaXNVbmRlZmluZWQobik/RnJyOm4pfWZ1bmN0aW9uIEJycihlLHQscixuKXt2YXIgaT0iIit0LG89IiIrcjtpZighZSYmaT5vKXt2YXIgYT1pO2k9byxvPWF9dmFyIHM9e3Y6aSx3Om99O3JldHVybiBuJiYocy5uYW1lPW4pLHN9ZnVuY3Rpb24gaGx0KGUsdCl7cmV0dXJuIEc0KGUsdC52LHQudyx0Lm5hbWUpfX0pO3ZhciBObmU9SCgoQVpuLFJuZSk9PntSbmUuZXhwb3J0cz0iMi4xLjgifSk7dmFyIE9uZT1IKChQWm4sRG5lKT0+e0RuZS5leHBvcnRzPXtHcmFwaDplSCgpLHZlcnNpb246Tm5lKCl9fSk7dmFyIEZuZT1IKChJWm4sem5lKT0+e3ZhciBWZj1FbCgpLEhycj1lSCgpO3puZS5leHBvcnRzPXt3cml0ZTpWcnIscmVhZDpHcnJ9O2Z1bmN0aW9uIFZycihlKXt2YXIgdD17b3B0aW9uczp7ZGlyZWN0ZWQ6ZS5pc0RpcmVjdGVkKCksbXVsdGlncmFwaDplLmlzTXVsdGlncmFwaCgpLGNvbXBvdW5kOmUuaXNDb21wb3VuZCgpfSxub2RlczpVcnIoZSksZWRnZXM6cXJyKGUpfTtyZXR1cm4gVmYuaXNVbmRlZmluZWQoZS5ncmFwaCgpKXx8KHQudmFsdWU9VmYuY2xvbmUoZS5ncmFwaCgpKSksdH1mdW5jdGlvbiBVcnIoZSl7cmV0dXJuIFZmLm1hcChlLm5vZGVzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLG49ZS5wYXJlbnQodCksaT17djp0fTtyZXR1cm4gVmYuaXNVbmRlZmluZWQocil8fChpLnZhbHVlPXIpLFZmLmlzVW5kZWZpbmVkKG4pfHwoaS5wYXJlbnQ9biksaX0pfWZ1bmN0aW9uIHFycihlKXtyZXR1cm4gVmYubWFwKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCksbj17djp0LnYsdzp0Lnd9O3JldHVybiBWZi5pc1VuZGVmaW5lZCh0Lm5hbWUpfHwobi5uYW1lPXQubmFtZSksVmYuaXNVbmRlZmluZWQocil8fChuLnZhbHVlPXIpLG59KX1mdW5jdGlvbiBHcnIoZSl7dmFyIHQ9bmV3IEhycihlLm9wdGlvbnMpLnNldEdyYXBoKGUudmFsdWUpO3JldHVybiBWZi5lYWNoKGUubm9kZXMsZnVuY3Rpb24ocil7dC5zZXROb2RlKHIudixyLnZhbHVlKSxyLnBhcmVudCYmdC5zZXRQYXJlbnQoci52LHIucGFyZW50KX0pLFZmLmVhY2goZS5lZGdlcyxmdW5jdGlvbihyKXt0LnNldEVkZ2Uoe3Y6ci52LHc6ci53LG5hbWU6ci5uYW1lfSxyLnZhbHVlKX0pLHR9fSk7dmFyIEhuZT1IKChMWm4sQm5lKT0+e3ZhciBySD1FbCgpO0JuZS5leHBvcnRzPVdycjtmdW5jdGlvbiBXcnIoZSl7dmFyIHQ9e30scj1bXSxuO2Z1bmN0aW9uIGkobyl7ckguaGFzKHQsbyl8fCh0W29dPSEwLG4ucHVzaChvKSxySC5lYWNoKGUuc3VjY2Vzc29ycyhvKSxpKSxySC5lYWNoKGUucHJlZGVjZXNzb3JzKG8pLGkpKX1yZXR1cm4gckguZWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7bj1bXSxpKG8pLG4ubGVuZ3RoJiZyLnB1c2gobil9KSxyfX0pO3ZhciBmbHQ9SCgoa1puLFVuZSk9Pnt2YXIgVm5lPUVsKCk7VW5lLmV4cG9ydHM9VmM7ZnVuY3Rpb24gVmMoKXt0aGlzLl9hcnI9W10sdGhpcy5fa2V5SW5kaWNlcz17fX1WYy5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubGVuZ3RofTtWYy5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0pfTtWYy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBWbmUuaGFzKHRoaXMuX2tleUluZGljZXMsZSl9O1ZjLnByb3RvdHlwZS5wcmlvcml0eT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9rZXlJbmRpY2VzW2VdO2lmKHQhPT12b2lkIDApcmV0dXJuIHRoaXMuX2Fyclt0XS5wcmlvcml0eX07VmMucHJvdG90eXBlLm1pbj1mdW5jdGlvbigpe2lmKHRoaXMuc2l6ZSgpPT09MCl0aHJvdyBuZXcgRXJyb3IoIlF1ZXVlIHVuZGVyZmxvdyIpO3JldHVybiB0aGlzLl9hcnJbMF0ua2V5fTtWYy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fa2V5SW5kaWNlcztpZihlPVN0cmluZyhlKSwhVm5lLmhhcyhyLGUpKXt2YXIgbj10aGlzLl9hcnIsaT1uLmxlbmd0aDtyZXR1cm4gcltlXT1pLG4ucHVzaCh7a2V5OmUscHJpb3JpdHk6dH0pLHRoaXMuX2RlY3JlYXNlKGkpLCEwfXJldHVybiExfTtWYy5wcm90b3R5cGUucmVtb3ZlTWluPWZ1bmN0aW9uKCl7dGhpcy5fc3dhcCgwLHRoaXMuX2Fyci5sZW5ndGgtMSk7dmFyIGU9dGhpcy5fYXJyLnBvcCgpO3JldHVybiBkZWxldGUgdGhpcy5fa2V5SW5kaWNlc1tlLmtleV0sdGhpcy5faGVhcGlmeSgwKSxlLmtleX07VmMucHJvdG90eXBlLmRlY3JlYXNlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fa2V5SW5kaWNlc1tlXTtpZih0PnRoaXMuX2FycltyXS5wcmlvcml0eSl0aHJvdyBuZXcgRXJyb3IoIk5ldyBwcmlvcml0eSBpcyBncmVhdGVyIHRoYW4gY3VycmVudCBwcmlvcml0eS4gS2V5OiAiK2UrIiBPbGQ6ICIrdGhpcy5fYXJyW3JdLnByaW9yaXR5KyIgTmV3OiAiK3QpO3RoaXMuX2FycltyXS5wcmlvcml0eT10LHRoaXMuX2RlY3JlYXNlKHIpfTtWYy5wcm90b3R5cGUuX2hlYXBpZnk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fYXJyLHI9MiplLG49cisxLGk9ZTtyPHQubGVuZ3RoJiYoaT10W3JdLnByaW9yaXR5PHRbaV0ucHJpb3JpdHk/cjppLG48dC5sZW5ndGgmJihpPXRbbl0ucHJpb3JpdHk8dFtpXS5wcmlvcml0eT9uOmkpLGkhPT1lJiYodGhpcy5fc3dhcChlLGkpLHRoaXMuX2hlYXBpZnkoaSkpKX07VmMucHJvdG90eXBlLl9kZWNyZWFzZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5fYXJyLHI9dFtlXS5wcmlvcml0eSxuO2UhPT0wJiYobj1lPj4xLCEodFtuXS5wcmlvcml0eTxyKSk7KXRoaXMuX3N3YXAoZSxuKSxlPW59O1ZjLnByb3RvdHlwZS5fc3dhcD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2FycixuPXRoaXMuX2tleUluZGljZXMsaT1yW2VdLG89clt0XTtyW2VdPW8sclt0XT1pLG5bby5rZXldPWUsbltpLmtleV09dH19KTt2YXIgcGx0PUgoKFJabixxbmUpPT57dmFyIFlycj1FbCgpLGpycj1mbHQoKTtxbmUuZXhwb3J0cz0kcnI7dmFyIFhycj1ZcnIuY29uc3RhbnQoMSk7ZnVuY3Rpb24gJHJyKGUsdCxyLG4pe3JldHVybiBLcnIoZSxTdHJpbmcodCkscnx8WHJyLG58fGZ1bmN0aW9uKGkpe3JldHVybiBlLm91dEVkZ2VzKGkpfSl9ZnVuY3Rpb24gS3JyKGUsdCxyLG4pe3ZhciBpPXt9LG89bmV3IGpycixhLHMsbD1mdW5jdGlvbihjKXt2YXIgdT1jLnYhPT1hP2MudjpjLncsaD1pW3VdLGY9cihjKSxwPXMuZGlzdGFuY2UrZjtpZihmPDApdGhyb3cgbmV3IEVycm9yKCJkaWprc3RyYSBkb2VzIG5vdCBhbGxvdyBuZWdhdGl2ZSBlZGdlIHdlaWdodHMuIEJhZCBlZGdlOiAiK2MrIiBXZWlnaHQ6ICIrZik7cDxoLmRpc3RhbmNlJiYoaC5kaXN0YW5jZT1wLGgucHJlZGVjZXNzb3I9YSxvLmRlY3JlYXNlKHUscCkpfTtmb3IoZS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIHU9Yz09PXQ/MDpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7aVtjXT17ZGlzdGFuY2U6dX0sby5hZGQoYyx1KX0pO28uc2l6ZSgpPjAmJihhPW8ucmVtb3ZlTWluKCkscz1pW2FdLHMuZGlzdGFuY2UhPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOyluKGEpLmZvckVhY2gobCk7cmV0dXJuIGl9fSk7dmFyIFduZT1IKChOWm4sR25lKT0+e3ZhciBacnI9cGx0KCksSnJyPUVsKCk7R25lLmV4cG9ydHM9UXJyO2Z1bmN0aW9uIFFycihlLHQscil7cmV0dXJuIEpyci50cmFuc2Zvcm0oZS5ub2RlcygpLGZ1bmN0aW9uKG4saSl7bltpXT1acnIoZSxpLHQscil9LHt9KX19KTt2YXIgZGx0PUgoKERabixqbmUpPT57dmFyIFluZT1FbCgpO2puZS5leHBvcnRzPXRucjtmdW5jdGlvbiB0bnIoZSl7dmFyIHQ9MCxyPVtdLG49e30saT1bXTtmdW5jdGlvbiBvKGEpe3ZhciBzPW5bYV09e29uU3RhY2s6ITAsbG93bGluazp0LGluZGV4OnQrK307aWYoci5wdXNoKGEpLGUuc3VjY2Vzc29ycyhhKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe1luZS5oYXMobix1KT9uW3VdLm9uU3RhY2smJihzLmxvd2xpbms9TWF0aC5taW4ocy5sb3dsaW5rLG5bdV0uaW5kZXgpKToobyh1KSxzLmxvd2xpbms9TWF0aC5taW4ocy5sb3dsaW5rLG5bdV0ubG93bGluaykpfSkscy5sb3dsaW5rPT09cy5pbmRleCl7dmFyIGw9W10sYztkbyBjPXIucG9wKCksbltjXS5vblN0YWNrPSExLGwucHVzaChjKTt3aGlsZShhIT09Yyk7aS5wdXNoKGwpfX1yZXR1cm4gZS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oYSl7WW5lLmhhcyhuLGEpfHxvKGEpfSksaX19KTt2YXIgJG5lPUgoKE9abixYbmUpPT57dmFyIGVucj1FbCgpLHJucj1kbHQoKTtYbmUuZXhwb3J0cz1ubnI7ZnVuY3Rpb24gbm5yKGUpe3JldHVybiBlbnIuZmlsdGVyKHJucihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MXx8dC5sZW5ndGg9PT0xJiZlLmhhc0VkZ2UodFswXSx0WzBdKX0pfX0pO3ZhciBabmU9SCgoelpuLEtuZSk9Pnt2YXIgaW5yPUVsKCk7S25lLmV4cG9ydHM9YW5yO3ZhciBvbnI9aW5yLmNvbnN0YW50KDEpO2Z1bmN0aW9uIGFucihlLHQscil7cmV0dXJuIHNucihlLHR8fG9ucixyfHxmdW5jdGlvbihuKXtyZXR1cm4gZS5vdXRFZGdlcyhuKX0pfWZ1bmN0aW9uIHNucihlLHQscil7dmFyIG49e30saT1lLm5vZGVzKCk7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihvKXtuW29dPXt9LG5bb11bb109e2Rpc3RhbmNlOjB9LGkuZm9yRWFjaChmdW5jdGlvbihhKXtvIT09YSYmKG5bb11bYV09e2Rpc3RhbmNlOk51bWJlci5QT1NJVElWRV9JTkZJTklUWX0pfSkscihvKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPWEudj09PW8/YS53OmEudixsPXQoYSk7bltvXVtzXT17ZGlzdGFuY2U6bCxwcmVkZWNlc3NvcjpvfX0pfSksaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPW5bb107aS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3ZhciBsPW5bc107aS5mb3JFYWNoKGZ1bmN0aW9uKGMpe3ZhciB1PWxbb10saD1hW2NdLGY9bFtjXSxwPXUuZGlzdGFuY2UraC5kaXN0YW5jZTtwPGYuZGlzdGFuY2UmJihmLmRpc3RhbmNlPXAsZi5wcmVkZWNlc3Nvcj1oLnByZWRlY2Vzc29yKX0pfSl9KSxufX0pO3ZhciBtbHQ9SCgoRlpuLFFuZSk9Pnt2YXIgVzQ9RWwoKTtRbmUuZXhwb3J0cz1KbmU7Sm5lLkN5Y2xlRXhjZXB0aW9uPW5IO2Z1bmN0aW9uIEpuZShlKXt2YXIgdD17fSxyPXt9LG49W107ZnVuY3Rpb24gaShvKXtpZihXNC5oYXMocixvKSl0aHJvdyBuZXcgbkg7VzQuaGFzKHQsbyl8fChyW29dPSEwLHRbb109ITAsVzQuZWFjaChlLnByZWRlY2Vzc29ycyhvKSxpKSxkZWxldGUgcltvXSxuLnB1c2gobykpfWlmKFc0LmVhY2goZS5zaW5rcygpLGkpLFc0LnNpemUodCkhPT1lLm5vZGVDb3VudCgpKXRocm93IG5ldyBuSDtyZXR1cm4gbn1mdW5jdGlvbiBuSCgpe31uSC5wcm90b3R5cGU9bmV3IEVycm9yfSk7dmFyIHJpZT1IKChCWm4sZWllKT0+e3ZhciB0aWU9bWx0KCk7ZWllLmV4cG9ydHM9bG5yO2Z1bmN0aW9uIGxucihlKXt0cnl7dGllKGUpfWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiB0aWUuQ3ljbGVFeGNlcHRpb24pcmV0dXJuITE7dGhyb3cgdH1yZXR1cm4hMH19KTt2YXIgZ2x0PUgoKEhabixpaWUpPT57dmFyIGlIPUVsKCk7aWllLmV4cG9ydHM9Y25yO2Z1bmN0aW9uIGNucihlLHQscil7aUguaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgbj0oZS5pc0RpcmVjdGVkKCk/ZS5zdWNjZXNzb3JzOmUubmVpZ2hib3JzKS5iaW5kKGUpLGk9W10sbz17fTtyZXR1cm4gaUguZWFjaCh0LGZ1bmN0aW9uKGEpe2lmKCFlLmhhc05vZGUoYSkpdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICIrYSk7bmllKGUsYSxyPT09InBvc3QiLG8sbixpKX0pLGl9ZnVuY3Rpb24gbmllKGUsdCxyLG4saSxvKXtpSC5oYXMobix0KXx8KG5bdF09ITAscnx8by5wdXNoKHQpLGlILmVhY2goaSh0KSxmdW5jdGlvbihhKXtuaWUoZSxhLHIsbixpLG8pfSksciYmby5wdXNoKHQpKX19KTt2YXIgYWllPUgoKFZabixvaWUpPT57dmFyIHVucj1nbHQoKTtvaWUuZXhwb3J0cz1obnI7ZnVuY3Rpb24gaG5yKGUsdCl7cmV0dXJuIHVucihlLHQsInBvc3QiKX19KTt2YXIgbGllPUgoKFVabixzaWUpPT57dmFyIGZucj1nbHQoKTtzaWUuZXhwb3J0cz1wbnI7ZnVuY3Rpb24gcG5yKGUsdCl7cmV0dXJuIGZucihlLHQsInByZSIpfX0pO3ZhciBoaWU9SCgocVpuLHVpZSk9Pnt2YXIgY2llPUVsKCksZG5yPWVIKCksbW5yPWZsdCgpO3VpZS5leHBvcnRzPWducjtmdW5jdGlvbiBnbnIoZSx0KXt2YXIgcj1uZXcgZG5yLG49e30saT1uZXcgbW5yLG87ZnVuY3Rpb24gYShsKXt2YXIgYz1sLnY9PT1vP2wudzpsLnYsdT1pLnByaW9yaXR5KGMpO2lmKHUhPT12b2lkIDApe3ZhciBoPXQobCk7aDx1JiYobltjXT1vLGkuZGVjcmVhc2UoYyxoKSl9fWlmKGUubm9kZUNvdW50KCk9PT0wKXJldHVybiByO2NpZS5lYWNoKGUubm9kZXMoKSxmdW5jdGlvbihsKXtpLmFkZChsLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksci5zZXROb2RlKGwpfSksaS5kZWNyZWFzZShlLm5vZGVzKClbMF0sMCk7Zm9yKHZhciBzPSExO2kuc2l6ZSgpPjA7KXtpZihvPWkucmVtb3ZlTWluKCksY2llLmhhcyhuLG8pKXIuc2V0RWRnZShvLG5bb10pO2Vsc2V7aWYocyl0aHJvdyBuZXcgRXJyb3IoIklucHV0IGdyYXBoIGlzIG5vdCBjb25uZWN0ZWQ6ICIrZSk7cz0hMH1lLm5vZGVFZGdlcyhvKS5mb3JFYWNoKGEpfXJldHVybiByfX0pO3ZhciBwaWU9SCgoR1puLGZpZSk9PntmaWUuZXhwb3J0cz17Y29tcG9uZW50czpIbmUoKSxkaWprc3RyYTpwbHQoKSxkaWprc3RyYUFsbDpXbmUoKSxmaW5kQ3ljbGVzOiRuZSgpLGZsb3lkV2Fyc2hhbGw6Wm5lKCksaXNBY3ljbGljOnJpZSgpLHBvc3RvcmRlcjphaWUoKSxwcmVvcmRlcjpsaWUoKSxwcmltOmhpZSgpLHRhcmphbjpkbHQoKSx0b3Bzb3J0Om1sdCgpfX0pO3ZhciBnaWU9SCgoV1puLG1pZSk9Pnt2YXIgZGllPU9uZSgpO21pZS5leHBvcnRzPXtHcmFwaDpkaWUuR3JhcGgsanNvbjpGbmUoKSxhbGc6cGllKCksdmVyc2lvbjpkaWUudmVyc2lvbn19KTt2YXIgVWM9SCgoWVpuLF9pZSk9Pnt2YXIgb0g7aWYodHlwZW9mIEV4PT0iZnVuY3Rpb24iKXRyeXtvSD1naWUoKX1jYXRjaChlKXt9b0h8fChvSD13aW5kb3cuZ3JhcGhsaWIpO19pZS5leHBvcnRzPW9IfSk7dmFyIHZpZT1IKChYWm4seWllKT0+e3ZhciBfbnI9TnN0KCkseW5yPTEsdm5yPTQ7ZnVuY3Rpb24geG5yKGUpe3JldHVybiBfbnIoZSx5bnJ8dm5yKX15aWUuZXhwb3J0cz14bnJ9KTt2YXIgWTQ9SCgoJFpuLHhpZSk9Pnt2YXIgYm5yPVkxKCksd25yPUJmKCksU25yPWs0KCksTW5yPU1sKCk7ZnVuY3Rpb24gRW5yKGUsdCxyKXtpZighTW5yKHIpKXJldHVybiExO3ZhciBuPXR5cGVvZiB0O3JldHVybihuPT0ibnVtYmVyIj93bnIocikmJlNucih0LHIubGVuZ3RoKTpuPT0ic3RyaW5nIiYmdCBpbiByKT9ibnIoclt0XSxlKTohMX14aWUuZXhwb3J0cz1FbnJ9KTt2YXIgU2llPUgoKEtabix3aWUpPT57dmFyIFRucj1xNCgpLENucj1ZMSgpLEFucj1ZNCgpLFBucj1jMCgpLGJpZT1PYmplY3QucHJvdG90eXBlLElucj1iaWUuaGFzT3duUHJvcGVydHksTG5yPVRucihmdW5jdGlvbihlLHQpe2U9T2JqZWN0KGUpO3ZhciByPS0xLG49dC5sZW5ndGgsaT1uPjI/dFsyXTp2b2lkIDA7Zm9yKGkmJkFucih0WzBdLHRbMV0saSkmJihuPTEpOysrcjxuOylmb3IodmFyIG89dFtyXSxhPVBucihvKSxzPS0xLGw9YS5sZW5ndGg7KytzPGw7KXt2YXIgYz1hW3NdLHU9ZVtjXTsodT09PXZvaWQgMHx8Q25yKHUsYmllW2NdKSYmIUluci5jYWxsKGUsYykpJiYoZVtjXT1vW2NdKX1yZXR1cm4gZX0pO3dpZS5leHBvcnRzPUxucn0pO3ZhciBFaWU9SCgoWlpuLE1pZSk9Pnt2YXIga25yPUhmKCksUm5yPUJmKCksTm5yPUFkKCk7ZnVuY3Rpb24gRG5yKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7dmFyIGk9T2JqZWN0KHQpO2lmKCFSbnIodCkpe3ZhciBvPWtucihyLDMpO3Q9Tm5yKHQpLHI9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oaVtzXSxzLGkpfX12YXIgYT1lKHQscixuKTtyZXR1cm4gYT4tMT9pW28/dFthXTphXTp2b2lkIDB9fU1pZS5leHBvcnRzPURucn0pO3ZhciBDaWU9SCgoSlpuLFRpZSk9Pnt2YXIgT25yPS9ccy87ZnVuY3Rpb24gem5yKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDt0LS0mJk9uci50ZXN0KGUuY2hhckF0KHQpKTspO3JldHVybiB0fVRpZS5leHBvcnRzPXpucn0pO3ZhciBQaWU9SCgoUVpuLEFpZSk9Pnt2YXIgRm5yPUNpZSgpLEJucj0vXlxzKy87ZnVuY3Rpb24gSG5yKGUpe3JldHVybiBlJiZlLnNsaWNlKDAsRm5yKGUpKzEpLnJlcGxhY2UoQm5yLCIiKX1BaWUuZXhwb3J0cz1IbnJ9KTt2YXIgUmllPUgoKHRKbixraWUpPT57dmFyIFZucj1QaWUoKSxJaWU9TWwoKSxVbnI9WjEoKSxMaWU9MC8wLHFucj0vXlstK10weFswLTlhLWZdKyQvaSxHbnI9L14wYlswMV0rJC9pLFducj0vXjBvWzAtN10rJC9pLFlucj1wYXJzZUludDtmdW5jdGlvbiBqbnIoZSl7aWYodHlwZW9mIGU9PSJudW1iZXIiKXJldHVybiBlO2lmKFVucihlKSlyZXR1cm4gTGllO2lmKElpZShlKSl7dmFyIHQ9dHlwZW9mIGUudmFsdWVPZj09ImZ1bmN0aW9uIj9lLnZhbHVlT2YoKTplO2U9SWllKHQpP3QrIiI6dH1pZih0eXBlb2YgZSE9InN0cmluZyIpcmV0dXJuIGU9PT0wP2U6K2U7ZT1WbnIoZSk7dmFyIHI9R25yLnRlc3QoZSk7cmV0dXJuIHJ8fFduci50ZXN0KGUpP1lucihlLnNsaWNlKDIpLHI/Mjo4KTpxbnIudGVzdChlKT9MaWU6K2V9a2llLmV4cG9ydHM9am5yfSk7dmFyIF9sdD1IKChlSm4sRGllKT0+e3ZhciBYbnI9UmllKCksTmllPTEvMCwkbnI9MTc5NzY5MzEzNDg2MjMxNTdlMjkyO2Z1bmN0aW9uIEtucihlKXtpZighZSlyZXR1cm4gZT09PTA/ZTowO2lmKGU9WG5yKGUpLGU9PT1OaWV8fGU9PT0tTmllKXt2YXIgdD1lPDA/LTE6MTtyZXR1cm4gdCokbnJ9cmV0dXJuIGU9PT1lP2U6MH1EaWUuZXhwb3J0cz1LbnJ9KTt2YXIgemllPUgoKHJKbixPaWUpPT57dmFyIFpucj1fbHQoKTtmdW5jdGlvbiBKbnIoZSl7dmFyIHQ9Wm5yKGUpLHI9dCUxO3JldHVybiB0PT09dD9yP3Qtcjp0OjB9T2llLmV4cG9ydHM9Sm5yfSk7dmFyIEJpZT1IKChuSm4sRmllKT0+e3ZhciBRbnI9c2x0KCksdGlyPUhmKCksZWlyPXppZSgpLHJpcj1NYXRoLm1heDtmdW5jdGlvbiBuaXIoZSx0LHIpe3ZhciBuPWU9PW51bGw/MDplLmxlbmd0aDtpZighbilyZXR1cm4tMTt2YXIgaT1yPT1udWxsPzA6ZWlyKHIpO3JldHVybiBpPDAmJihpPXJpcihuK2ksMCkpLFFucihlLHRpcih0LDMpLGkpfUZpZS5leHBvcnRzPW5pcn0pO3ZhciBWaWU9SCgoaUpuLEhpZSk9Pnt2YXIgaWlyPUVpZSgpLG9pcj1CaWUoKSxhaXI9aWlyKG9pcik7SGllLmV4cG9ydHM9YWlyfSk7dmFyIHlsdD1IKChvSm4sVWllKT0+e3ZhciBzaXI9UUIoKTtmdW5jdGlvbiBsaXIoZSl7dmFyIHQ9ZT09bnVsbD8wOmUubGVuZ3RoO3JldHVybiB0P3NpcihlLDEpOltdfVVpZS5leHBvcnRzPWxpcn0pO3ZhciBHaWU9SCgoYUpuLHFpZSk9Pnt2YXIgY2lyPWpCKCksdWlyPURzdCgpLGhpcj1jMCgpO2Z1bmN0aW9uIGZpcihlLHQpe3JldHVybiBlPT1udWxsP2U6Y2lyKGUsdWlyKHQpLGhpcil9cWllLmV4cG9ydHM9ZmlyfSk7dmFyIFlpZT1IKChzSm4sV2llKT0+e2Z1bmN0aW9uIHBpcihlKXt2YXIgdD1lPT1udWxsPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/ZVt0LTFdOnZvaWQgMH1XaWUuZXhwb3J0cz1waXJ9KTt2YXIgWGllPUgoKGxKbixqaWUpPT57dmFyIGRpcj1QNCgpLG1pcj1YQigpLGdpcj1IZigpO2Z1bmN0aW9uIF9pcihlLHQpe3ZhciByPXt9O3JldHVybiB0PWdpcih0LDMpLG1pcihlLGZ1bmN0aW9uKG4saSxvKXtkaXIocixpLHQobixpLG8pKX0pLHJ9amllLmV4cG9ydHM9X2lyfSk7dmFyIGFIPUgoKGNKbiwkaWUpPT57dmFyIHlpcj1aMSgpO2Z1bmN0aW9uIHZpcihlLHQscil7Zm9yKHZhciBuPS0xLGk9ZS5sZW5ndGg7KytuPGk7KXt2YXIgbz1lW25dLGE9dChvKTtpZihhIT1udWxsJiYocz09PXZvaWQgMD9hPT09YSYmIXlpcihhKTpyKGEscykpKXZhciBzPWEsbD1vfXJldHVybiBsfSRpZS5leHBvcnRzPXZpcn0pO3ZhciBaaWU9SCgodUpuLEtpZSk9PntmdW5jdGlvbiB4aXIoZSx0KXtyZXR1cm4gZT50fUtpZS5leHBvcnRzPXhpcn0pO3ZhciBRaWU9SCgoaEpuLEppZSk9Pnt2YXIgYmlyPWFIKCksd2lyPVppZSgpLFNpcj11MCgpO2Z1bmN0aW9uIE1pcihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/YmlyKGUsU2lyLHdpcik6dm9pZCAwfUppZS5leHBvcnRzPU1pcn0pO3ZhciB2bHQ9SCgoZkpuLHRvZSk9Pnt2YXIgRWlyPVA0KCksVGlyPVkxKCk7ZnVuY3Rpb24gQ2lyKGUsdCxyKXsociE9PXZvaWQgMCYmIVRpcihlW3RdLHIpfHxyPT09dm9pZCAwJiYhKHQgaW4gZSkpJiZFaXIoZSx0LHIpfXRvZS5leHBvcnRzPUNpcn0pO3ZhciBub2U9SCgocEpuLHJvZSk9Pnt2YXIgQWlyPXMwKCksUGlyPUY0KCksSWlyPVl1KCksTGlyPSJbb2JqZWN0IE9iamVjdF0iLGtpcj1GdW5jdGlvbi5wcm90b3R5cGUsUmlyPU9iamVjdC5wcm90b3R5cGUsZW9lPWtpci50b1N0cmluZyxOaXI9UmlyLmhhc093blByb3BlcnR5LERpcj1lb2UuY2FsbChPYmplY3QpO2Z1bmN0aW9uIE9pcihlKXtpZighSWlyKGUpfHxBaXIoZSkhPUxpcilyZXR1cm4hMTt2YXIgdD1QaXIoZSk7aWYodD09PW51bGwpcmV0dXJuITA7dmFyIHI9TmlyLmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4gdHlwZW9mIHI9PSJmdW5jdGlvbiImJnIgaW5zdGFuY2VvZiByJiZlb2UuY2FsbChyKT09RGlyfXJvZS5leHBvcnRzPU9pcn0pO3ZhciB4bHQ9SCgoZEpuLGlvZSk9PntmdW5jdGlvbiB6aXIoZSx0KXtpZighKHQ9PT0iY29uc3RydWN0b3IiJiZ0eXBlb2YgZVt0XT09ImZ1bmN0aW9uIikmJnQhPSJfX3Byb3RvX18iKXJldHVybiBlW3RdfWlvZS5leHBvcnRzPXppcn0pO3ZhciBhb2U9SCgobUpuLG9vZSk9Pnt2YXIgRmlyPVVTKCksQmlyPWMwKCk7ZnVuY3Rpb24gSGlyKGUpe3JldHVybiBGaXIoZSxCaXIoZSkpfW9vZS5leHBvcnRzPUhpcn0pO3ZhciBmb2U9SCgoZ0puLGhvZSk9Pnt2YXIgc29lPXZsdCgpLFZpcj1fc3QoKSxVaXI9THN0KCkscWlyPXlzdCgpLEdpcj1Sc3QoKSxsb2U9cVMoKSxjb2U9VGkoKSxXaXI9Y2x0KCksWWlyPVgxKCksamlyPUZTKCksWGlyPU1sKCksJGlyPW5vZSgpLEtpcj1ZUygpLHVvZT14bHQoKSxaaXI9YW9lKCk7ZnVuY3Rpb24gSmlyKGUsdCxyLG4saSxvLGEpe3ZhciBzPXVvZShlLHIpLGw9dW9lKHQsciksYz1hLmdldChsKTtpZihjKXtzb2UoZSxyLGMpO3JldHVybn12YXIgdT1vP28ocyxsLHIrIiIsZSx0LGEpOnZvaWQgMCxoPXU9PT12b2lkIDA7aWYoaCl7dmFyIGY9Y29lKGwpLHA9IWYmJllpcihsKSxkPSFmJiYhcCYmS2lyKGwpO3U9bCxmfHxwfHxkP2NvZShzKT91PXM6V2lyKHMpP3U9cWlyKHMpOnA/KGg9ITEsdT1WaXIobCwhMCkpOmQ/KGg9ITEsdT1VaXIobCwhMCkpOnU9W106JGlyKGwpfHxsb2UobCk/KHU9cyxsb2Uocyk/dT1aaXIocyk6KCFYaXIocyl8fGppcihzKSkmJih1PUdpcihsKSkpOmg9ITF9aCYmKGEuc2V0KGwsdSksaSh1LGwsbixvLGEpLGEuZGVsZXRlKGwpKSxzb2UoZSxyLHUpfWhvZS5leHBvcnRzPUppcn0pO3ZhciBtb2U9SCgoX0puLGRvZSk9Pnt2YXIgUWlyPUE0KCksdG9yPXZsdCgpLGVvcj1qQigpLHJvcj1mb2UoKSxub3I9TWwoKSxpb3I9YzAoKSxvb3I9eGx0KCk7ZnVuY3Rpb24gcG9lKGUsdCxyLG4saSl7ZSE9PXQmJmVvcih0LGZ1bmN0aW9uKG8sYSl7aWYoaXx8KGk9bmV3IFFpciksbm9yKG8pKXJvcihlLHQsYSxyLHBvZSxuLGkpO2Vsc2V7dmFyIHM9bj9uKG9vcihlLGEpLG8sYSsiIixlLHQsaSk6dm9pZCAwO3M9PT12b2lkIDAmJihzPW8pLHRvcihlLGEscyl9fSxpb3IpfWRvZS5leHBvcnRzPXBvZX0pO3ZhciBfb2U9SCgoeUpuLGdvZSk9Pnt2YXIgYW9yPXE0KCksc29yPVk0KCk7ZnVuY3Rpb24gbG9yKGUpe3JldHVybiBhb3IoZnVuY3Rpb24odCxyKXt2YXIgbj0tMSxpPXIubGVuZ3RoLG89aT4xP3JbaS0xXTp2b2lkIDAsYT1pPjI/clsyXTp2b2lkIDA7Zm9yKG89ZS5sZW5ndGg+MyYmdHlwZW9mIG89PSJmdW5jdGlvbiI/KGktLSxvKTp2b2lkIDAsYSYmc29yKHJbMF0sclsxXSxhKSYmKG89aTwzP3ZvaWQgMDpvLGk9MSksdD1PYmplY3QodCk7KytuPGk7KXt2YXIgcz1yW25dO3MmJmUodCxzLG4sbyl9cmV0dXJuIHR9KX1nb2UuZXhwb3J0cz1sb3J9KTt2YXIgdm9lPUgoKHZKbix5b2UpPT57dmFyIGNvcj1tb2UoKSx1b3I9X29lKCksaG9yPXVvcihmdW5jdGlvbihlLHQscil7Y29yKGUsdCxyKX0pO3lvZS5leHBvcnRzPWhvcn0pO3ZhciBibHQ9SCgoeEpuLHhvZSk9PntmdW5jdGlvbiBwb3IoZSx0KXtyZXR1cm4gZTx0fXhvZS5leHBvcnRzPXBvcn0pO3ZhciB3b2U9SCgoYkpuLGJvZSk9Pnt2YXIgZG9yPWFIKCksbW9yPWJsdCgpLGdvcj11MCgpO2Z1bmN0aW9uIF9vcihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/ZG9yKGUsZ29yLG1vcik6dm9pZCAwfWJvZS5leHBvcnRzPV9vcn0pO3ZhciBNb2U9SCgod0puLFNvZSk9Pnt2YXIgeW9yPWFIKCksdm9yPUhmKCkseG9yPWJsdCgpO2Z1bmN0aW9uIGJvcihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD95b3IoZSx2b3IodCwyKSx4b3IpOnZvaWQgMH1Tb2UuZXhwb3J0cz1ib3J9KTt2YXIgVG9lPUgoKFNKbixFb2UpPT57dmFyIHdvcj1IYygpLFNvcj1mdW5jdGlvbigpe3JldHVybiB3b3IuRGF0ZS5ub3coKX07RW9lLmV4cG9ydHM9U29yfSk7dmFyIFBvZT1IKChNSm4sQW9lKT0+e3ZhciBNb3I9STQoKSxFb3I9VjQoKSxUb3I9azQoKSxDb2U9TWwoKSxDb3I9JFMoKTtmdW5jdGlvbiBBb3IoZSx0LHIsbil7aWYoIUNvZShlKSlyZXR1cm4gZTt0PUVvcih0LGUpO2Zvcih2YXIgaT0tMSxvPXQubGVuZ3RoLGE9by0xLHM9ZTtzIT1udWxsJiYrK2k8bzspe3ZhciBsPUNvcih0W2ldKSxjPXI7aWYobD09PSJfX3Byb3RvX18ifHxsPT09ImNvbnN0cnVjdG9yInx8bD09PSJwcm90b3R5cGUiKXJldHVybiBlO2lmKGkhPWEpe3ZhciB1PXNbbF07Yz1uP24odSxsLHMpOnZvaWQgMCxjPT09dm9pZCAwJiYoYz1Db2UodSk/dTpUb3IodFtpKzFdKT9bXTp7fSl9TW9yKHMsbCxjKSxzPXNbbF19cmV0dXJuIGV9QW9lLmV4cG9ydHM9QW9yfSk7dmFyIExvZT1IKChFSm4sSW9lKT0+e3ZhciBQb3I9VTQoKSxJb3I9UG9lKCksTG9yPVY0KCk7ZnVuY3Rpb24ga29yKGUsdCxyKXtmb3IodmFyIG49LTEsaT10Lmxlbmd0aCxvPXt9OysrbjxpOyl7dmFyIGE9dFtuXSxzPVBvcihlLGEpO3IocyxhKSYmSW9yKG8sTG9yKGEsZSkscyl9cmV0dXJuIG99SW9lLmV4cG9ydHM9a29yfSk7dmFyIFJvZT1IKChUSm4sa29lKT0+e3ZhciBSb3I9TG9lKCksTm9yPSRzdCgpO2Z1bmN0aW9uIERvcihlLHQpe3JldHVybiBSb3IoZSx0LGZ1bmN0aW9uKHIsbil7cmV0dXJuIE5vcihlLG4pfSl9a29lLmV4cG9ydHM9RG9yfSk7dmFyIERvZT1IKChDSm4sTm9lKT0+e3ZhciBPb3I9eWx0KCksem9yPW9sdCgpLEZvcj1hbHQoKTtmdW5jdGlvbiBCb3IoZSl7cmV0dXJuIEZvcih6b3IoZSx2b2lkIDAsT29yKSxlKyIiKX1Ob2UuZXhwb3J0cz1Cb3J9KTt2YXIgem9lPUgoKEFKbixPb2UpPT57dmFyIEhvcj1Sb2UoKSxWb3I9RG9lKCksVW9yPVZvcihmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP3t9OkhvcihlLHQpfSk7T29lLmV4cG9ydHM9VW9yfSk7dmFyIEJvZT1IKChQSm4sRm9lKT0+e3ZhciBxb3I9TWF0aC5jZWlsLEdvcj1NYXRoLm1heDtmdW5jdGlvbiBXb3IoZSx0LHIsbil7Zm9yKHZhciBpPS0xLG89R29yKHFvcigodC1lKS8ocnx8MSkpLDApLGE9QXJyYXkobyk7by0tOylhW24/bzorK2ldPWUsZSs9cjtyZXR1cm4gYX1Gb2UuZXhwb3J0cz1Xb3J9KTt2YXIgVm9lPUgoKElKbixIb2UpPT57dmFyIFlvcj1Cb2UoKSxqb3I9WTQoKSx3bHQ9X2x0KCk7ZnVuY3Rpb24gWG9yKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIG4mJnR5cGVvZiBuIT0ibnVtYmVyIiYmam9yKHQscixuKSYmKHI9bj12b2lkIDApLHQ9d2x0KHQpLHI9PT12b2lkIDA/KHI9dCx0PTApOnI9d2x0KHIpLG49bj09PXZvaWQgMD90PHI/MTotMTp3bHQobiksWW9yKHQscixuLGUpfX1Ib2UuZXhwb3J0cz1Yb3J9KTt2YXIgcW9lPUgoKExKbixVb2UpPT57dmFyICRvcj1Wb2UoKSxLb3I9JG9yKCk7VW9lLmV4cG9ydHM9S29yfSk7dmFyIFdvZT1IKChrSm4sR29lKT0+e2Z1bmN0aW9uIFpvcihlLHQpe3ZhciByPWUubGVuZ3RoO2ZvcihlLnNvcnQodCk7ci0tOyllW3JdPWVbcl0udmFsdWU7cmV0dXJuIGV9R29lLmV4cG9ydHM9Wm9yfSk7dmFyIFhvZT1IKChSSm4sam9lKT0+e3ZhciBZb2U9WjEoKTtmdW5jdGlvbiBKb3IoZSx0KXtpZihlIT09dCl7dmFyIHI9ZSE9PXZvaWQgMCxuPWU9PT1udWxsLGk9ZT09PWUsbz1Zb2UoZSksYT10IT09dm9pZCAwLHM9dD09PW51bGwsbD10PT09dCxjPVlvZSh0KTtpZighcyYmIWMmJiFvJiZlPnR8fG8mJmEmJmwmJiFzJiYhY3x8biYmYSYmbHx8IXImJmx8fCFpKXJldHVybiAxO2lmKCFuJiYhbyYmIWMmJmU8dHx8YyYmciYmaSYmIW4mJiFvfHxzJiZyJiZpfHwhYSYmaXx8IWwpcmV0dXJuLTF9cmV0dXJuIDB9am9lLmV4cG9ydHM9Sm9yfSk7dmFyIEtvZT1IKChOSm4sJG9lKT0+e3ZhciBRb3I9WG9lKCk7ZnVuY3Rpb24gdGFyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmNyaXRlcmlhLG89dC5jcml0ZXJpYSxhPWkubGVuZ3RoLHM9ci5sZW5ndGg7KytuPGE7KXt2YXIgbD1Rb3IoaVtuXSxvW25dKTtpZihsKXtpZihuPj1zKXJldHVybiBsO3ZhciBjPXJbbl07cmV0dXJuIGwqKGM9PSJkZXNjIj8tMToxKX19cmV0dXJuIGUuaW5kZXgtdC5pbmRleH0kb2UuZXhwb3J0cz10YXJ9KTt2YXIgSm9lPUgoKERKbixab2UpPT57dmFyIFNsdD1INCgpLGVhcj1VNCgpLHJhcj1IZigpLG5hcj10bHQoKSxpYXI9V29lKCksb2FyPVI0KCksYWFyPUtvZSgpLHNhcj11MCgpLGxhcj1UaSgpO2Z1bmN0aW9uIGNhcihlLHQscil7dC5sZW5ndGg/dD1TbHQodCxmdW5jdGlvbihvKXtyZXR1cm4gbGFyKG8pP2Z1bmN0aW9uKGEpe3JldHVybiBlYXIoYSxvLmxlbmd0aD09PTE/b1swXTpvKX06b30pOnQ9W3Nhcl07dmFyIG49LTE7dD1TbHQodCxvYXIocmFyKSk7dmFyIGk9bmFyKGUsZnVuY3Rpb24obyxhLHMpe3ZhciBsPVNsdCh0LGZ1bmN0aW9uKGMpe3JldHVybiBjKG8pfSk7cmV0dXJue2NyaXRlcmlhOmwsaW5kZXg6KytuLHZhbHVlOm99fSk7cmV0dXJuIGlhcihpLGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGFhcihvLGEscil9KX1ab2UuZXhwb3J0cz1jYXJ9KTt2YXIgZWFlPUgoKE9Kbix0YWUpPT57dmFyIHVhcj1RQigpLGhhcj1Kb2UoKSxmYXI9cTQoKSxRb2U9WTQoKSxwYXI9ZmFyKGZ1bmN0aW9uKGUsdCl7aWYoZT09bnVsbClyZXR1cm5bXTt2YXIgcj10Lmxlbmd0aDtyZXR1cm4gcj4xJiZRb2UoZSx0WzBdLHRbMV0pP3Q9W106cj4yJiZRb2UodFswXSx0WzFdLHRbMl0pJiYodD1bdFswXV0pLGhhcihlLHVhcih0LDEpLFtdKX0pO3RhZS5leHBvcnRzPXBhcn0pO3ZhciBuYWU9SCgoekpuLHJhZSk9Pnt2YXIgZGFyPWpzdCgpLG1hcj0wO2Z1bmN0aW9uIGdhcihlKXt2YXIgdD0rK21hcjtyZXR1cm4gZGFyKGUpK3R9cmFlLmV4cG9ydHM9Z2FyfSk7dmFyIG9hZT1IKChGSm4saWFlKT0+e2Z1bmN0aW9uIF9hcihlLHQscil7Zm9yKHZhciBuPS0xLGk9ZS5sZW5ndGgsbz10Lmxlbmd0aCxhPXt9OysrbjxpOyl7dmFyIHM9bjxvP3Rbbl06dm9pZCAwO3IoYSxlW25dLHMpfXJldHVybiBhfWlhZS5leHBvcnRzPV9hcn0pO3ZhciBzYWU9SCgoQkpuLGFhZSk9Pnt2YXIgeWFyPUk0KCkseGFyPW9hZSgpO2Z1bmN0aW9uIGJhcihlLHQpe3JldHVybiB4YXIoZXx8W10sdHx8W10seWFyKX1hYWUuZXhwb3J0cz1iYXJ9KTt2YXIgcW49SCgoSEpuLGxhZSk9Pnt2YXIgc0g7aWYodHlwZW9mIEV4PT0iZnVuY3Rpb24iKXRyeXtzSD17Y2xvbmVEZWVwOnZpZSgpLGNvbnN0YW50OllCKCksZGVmYXVsdHM6U2llKCksZWFjaDp6c3QoKSxmaWx0ZXI6WnN0KCksZmluZDpWaWUoKSxmbGF0dGVuOnlsdCgpLGZvckVhY2g6T3N0KCksZm9ySW46R2llKCksaGFzOkpzdCgpLGlzVW5kZWZpbmVkOlFzdCgpLGxhc3Q6WWllKCksbWFwOmVsdCgpLG1hcFZhbHVlczpYaWUoKSxtYXg6UWllKCksbWVyZ2U6dm9lKCksbWluOndvZSgpLG1pbkJ5Ok1vZSgpLG5vdzpUb2UoKSxwaWNrOnpvZSgpLHJhbmdlOnFvZSgpLHJlZHVjZTpybHQoKSxzb3J0Qnk6ZWFlKCksdW5pcXVlSWQ6bmFlKCksdmFsdWVzOnVsdCgpLHppcE9iamVjdDpzYWUoKX19Y2F0Y2goZSl7fXNIfHwoc0g9d2luZG93Ll8pO2xhZS5leHBvcnRzPXNIfSk7dmFyIGhhZT1IKChVSm4sdWFlKT0+e3VhZS5leHBvcnRzPWxIO2Z1bmN0aW9uIGxIKCl7dmFyIGU9e307ZS5fbmV4dD1lLl9wcmV2PWUsdGhpcy5fc2VudGluZWw9ZX1sSC5wcm90b3R5cGUuZGVxdWV1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX3NlbnRpbmVsLHQ9ZS5fcHJldjtpZih0IT09ZSlyZXR1cm4gY2FlKHQpLHR9O2xILnByb3RvdHlwZS5lbnF1ZXVlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3NlbnRpbmVsO2UuX3ByZXYmJmUuX25leHQmJmNhZShlKSxlLl9uZXh0PXQuX25leHQsdC5fbmV4dC5fcHJldj1lLHQuX25leHQ9ZSxlLl9wcmV2PXR9O2xILnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PXRoaXMuX3NlbnRpbmVsLHI9dC5fcHJldjtyIT09dDspZS5wdXNoKEpTT04uc3RyaW5naWZ5KHIsd2FyKSkscj1yLl9wcmV2O3JldHVybiJbIitlLmpvaW4oIiwgIikrIl0ifTtmdW5jdGlvbiBjYWUoZSl7ZS5fcHJldi5fbmV4dD1lLl9uZXh0LGUuX25leHQuX3ByZXY9ZS5fcHJldixkZWxldGUgZS5fbmV4dCxkZWxldGUgZS5fcHJldn1mdW5jdGlvbiB3YXIoZSx0KXtpZihlIT09Il9uZXh0IiYmZSE9PSJfcHJldiIpcmV0dXJuIHR9fSk7dmFyIHBhZT1IKChxSm4sZmFlKT0+e3ZhciBQZD1xbigpLFNhcj1VYygpLkdyYXBoLE1hcj1oYWUoKTtmYWUuZXhwb3J0cz1UYXI7dmFyIEVhcj1QZC5jb25zdGFudCgxKTtmdW5jdGlvbiBUYXIoZSx0KXtpZihlLm5vZGVDb3VudCgpPD0xKXJldHVybltdO3ZhciByPUFhcihlLHR8fEVhciksbj1DYXIoci5ncmFwaCxyLmJ1Y2tldHMsci56ZXJvSWR4KTtyZXR1cm4gUGQuZmxhdHRlbihQZC5tYXAobixmdW5jdGlvbihpKXtyZXR1cm4gZS5vdXRFZGdlcyhpLnYsaS53KX0pLCEwKX1mdW5jdGlvbiBDYXIoZSx0LHIpe2Zvcih2YXIgbj1bXSxpPXRbdC5sZW5ndGgtMV0sbz10WzBdLGE7ZS5ub2RlQ291bnQoKTspe2Zvcig7YT1vLmRlcXVldWUoKTspTWx0KGUsdCxyLGEpO2Zvcig7YT1pLmRlcXVldWUoKTspTWx0KGUsdCxyLGEpO2lmKGUubm9kZUNvdW50KCkpe2Zvcih2YXIgcz10Lmxlbmd0aC0yO3M+MDstLXMpaWYoYT10W3NdLmRlcXVldWUoKSxhKXtuPW4uY29uY2F0KE1sdChlLHQscixhLCEwKSk7YnJlYWt9fX1yZXR1cm4gbn1mdW5jdGlvbiBNbHQoZSx0LHIsbixpKXt2YXIgbz1pP1tdOnZvaWQgMDtyZXR1cm4gUGQuZm9yRWFjaChlLmluRWRnZXMobi52KSxmdW5jdGlvbihhKXt2YXIgcz1lLmVkZ2UoYSksbD1lLm5vZGUoYS52KTtpJiZvLnB1c2goe3Y6YS52LHc6YS53fSksbC5vdXQtPXMsRWx0KHQscixsKX0pLFBkLmZvckVhY2goZS5vdXRFZGdlcyhuLnYpLGZ1bmN0aW9uKGEpe3ZhciBzPWUuZWRnZShhKSxsPWEudyxjPWUubm9kZShsKTtjLmluLT1zLEVsdCh0LHIsYyl9KSxlLnJlbW92ZU5vZGUobi52KSxvfWZ1bmN0aW9uIEFhcihlLHQpe3ZhciByPW5ldyBTYXIsbj0wLGk9MDtQZC5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihzKXtyLnNldE5vZGUocyx7djpzLGluOjAsb3V0OjB9KX0pLFBkLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHMpe3ZhciBsPXIuZWRnZShzLnYscy53KXx8MCxjPXQocyksdT1sK2M7ci5zZXRFZGdlKHMudixzLncsdSksaT1NYXRoLm1heChpLHIubm9kZShzLnYpLm91dCs9Yyksbj1NYXRoLm1heChuLHIubm9kZShzLncpLmluKz1jKX0pO3ZhciBvPVBkLnJhbmdlKGkrbiszKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE1hcn0pLGE9bisxO3JldHVybiBQZC5mb3JFYWNoKHIubm9kZXMoKSxmdW5jdGlvbihzKXtFbHQobyxhLHIubm9kZShzKSl9KSx7Z3JhcGg6cixidWNrZXRzOm8semVyb0lkeDphfX1mdW5jdGlvbiBFbHQoZSx0LHIpe3Iub3V0P3IuaW4/ZVtyLm91dC1yLmluK3RdLmVucXVldWUocik6ZVtlLmxlbmd0aC0xXS5lbnF1ZXVlKHIpOmVbMF0uZW5xdWV1ZShyKX19KTt2YXIgbWFlPUgoKEdKbixkYWUpPT57InVzZSBzdHJpY3QiO3ZhciBRMT1xbigpLFBhcj1wYWUoKTtkYWUuZXhwb3J0cz17cnVuOklhcix1bmRvOmthcn07ZnVuY3Rpb24gSWFyKGUpe3ZhciB0PWUuZ3JhcGgoKS5hY3ljbGljZXI9PT0iZ3JlZWR5Ij9QYXIoZSxyKGUpKTpMYXIoZSk7UTEuZm9yRWFjaCh0LGZ1bmN0aW9uKG4pe3ZhciBpPWUuZWRnZShuKTtlLnJlbW92ZUVkZ2UobiksaS5mb3J3YXJkTmFtZT1uLm5hbWUsaS5yZXZlcnNlZD0hMCxlLnNldEVkZ2Uobi53LG4udixpLFExLnVuaXF1ZUlkKCJyZXYiKSl9KTtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5lZGdlKGkpLndlaWdodH19fWZ1bmN0aW9uIExhcihlKXt2YXIgdD1bXSxyPXt9LG49e307ZnVuY3Rpb24gaShvKXtRMS5oYXMobixvKXx8KG5bb109ITAscltvXT0hMCxRMS5mb3JFYWNoKGUub3V0RWRnZXMobyksZnVuY3Rpb24oYSl7UTEuaGFzKHIsYS53KT90LnB1c2goYSk6aShhLncpfSksZGVsZXRlIHJbb10pfXJldHVybiBRMS5mb3JFYWNoKGUubm9kZXMoKSxpKSx0fWZ1bmN0aW9uIGthcihlKXtRMS5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7aWYoci5yZXZlcnNlZCl7ZS5yZW1vdmVFZGdlKHQpO3ZhciBuPXIuZm9yd2FyZE5hbWU7ZGVsZXRlIHIucmV2ZXJzZWQsZGVsZXRlIHIuZm9yd2FyZE5hbWUsZS5zZXRFZGdlKHQudyx0LnYscixuKX19KX19KTt2YXIgbnM9SCgoV0puLHZhZSk9PnsidXNlIHN0cmljdCI7dmFyIFFyPXFuKCksZ2FlPVVjKCkuR3JhcGg7dmFlLmV4cG9ydHM9e2FkZER1bW15Tm9kZTpfYWUsc2ltcGxpZnk6UmFyLGFzTm9uQ29tcG91bmRHcmFwaDpOYXIsc3VjY2Vzc29yV2VpZ2h0czpEYXIscHJlZGVjZXNzb3JXZWlnaHRzOk9hcixpbnRlcnNlY3RSZWN0OnphcixidWlsZExheWVyTWF0cml4OkZhcixub3JtYWxpemVSYW5rczpCYXIscmVtb3ZlRW1wdHlSYW5rczpIYXIsYWRkQm9yZGVyTm9kZTpWYXIsbWF4UmFuazp5YWUscGFydGl0aW9uOlVhcix0aW1lOnFhcixub3RpbWU6R2FyfTtmdW5jdGlvbiBfYWUoZSx0LHIsbil7dmFyIGk7ZG8gaT1Rci51bmlxdWVJZChuKTt3aGlsZShlLmhhc05vZGUoaSkpO3JldHVybiByLmR1bW15PXQsZS5zZXROb2RlKGksciksaX1mdW5jdGlvbiBSYXIoZSl7dmFyIHQ9bmV3IGdhZSgpLnNldEdyYXBoKGUuZ3JhcGgoKSk7cmV0dXJuIFFyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3Quc2V0Tm9kZShyLGUubm9kZShyKSl9KSxRci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10LmVkZ2Uoci52LHIudyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0saT1lLmVkZ2Uocik7dC5zZXRFZGdlKHIudixyLncse3dlaWdodDpuLndlaWdodCtpLndlaWdodCxtaW5sZW46TWF0aC5tYXgobi5taW5sZW4saS5taW5sZW4pfSl9KSx0fWZ1bmN0aW9uIE5hcihlKXt2YXIgdD1uZXcgZ2FlKHttdWx0aWdyYXBoOmUuaXNNdWx0aWdyYXBoKCl9KS5zZXRHcmFwaChlLmdyYXBoKCkpO3JldHVybiBRci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihyKXtlLmNoaWxkcmVuKHIpLmxlbmd0aHx8dC5zZXROb2RlKHIsZS5ub2RlKHIpKX0pLFFyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHIpe3Quc2V0RWRnZShyLGUuZWRnZShyKSl9KSx0fWZ1bmN0aW9uIERhcihlKXt2YXIgdD1Rci5tYXAoZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXt9O3JldHVybiBRci5mb3JFYWNoKGUub3V0RWRnZXMociksZnVuY3Rpb24oaSl7bltpLnddPShuW2kud118fDApK2UuZWRnZShpKS53ZWlnaHR9KSxufSk7cmV0dXJuIFFyLnppcE9iamVjdChlLm5vZGVzKCksdCl9ZnVuY3Rpb24gT2FyKGUpe3ZhciB0PVFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49e307cmV0dXJuIFFyLmZvckVhY2goZS5pbkVkZ2VzKHIpLGZ1bmN0aW9uKGkpe25baS52XT0obltpLnZdfHwwKStlLmVkZ2UoaSkud2VpZ2h0fSksbn0pO3JldHVybiBRci56aXBPYmplY3QoZS5ub2RlcygpLHQpfWZ1bmN0aW9uIHphcihlLHQpe3ZhciByPWUueCxuPWUueSxpPXQueC1yLG89dC55LW4sYT1lLndpZHRoLzIscz1lLmhlaWdodC8yO2lmKCFpJiYhbyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZSIpO3ZhciBsLGM7cmV0dXJuIE1hdGguYWJzKG8pKmE+TWF0aC5hYnMoaSkqcz8obzwwJiYocz0tcyksbD1zKmkvbyxjPXMpOihpPDAmJihhPS1hKSxsPWEsYz1hKm8vaSkse3g6citsLHk6bitjfX1mdW5jdGlvbiBGYXIoZSl7dmFyIHQ9UXIubWFwKFFyLnJhbmdlKHlhZShlKSsxKSxmdW5jdGlvbigpe3JldHVybltdfSk7cmV0dXJuIFFyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPWUubm9kZShyKSxpPW4ucmFuaztRci5pc1VuZGVmaW5lZChpKXx8KHRbaV1bbi5vcmRlcl09cil9KSx0fWZ1bmN0aW9uIEJhcihlKXt2YXIgdD1Rci5taW4oUXIubWFwKGUubm9kZXMoKSxmdW5jdGlvbihyKXtyZXR1cm4gZS5ub2RlKHIpLnJhbmt9KSk7UXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpO1FyLmhhcyhuLCJyYW5rIikmJihuLnJhbmstPXQpfSl9ZnVuY3Rpb24gSGFyKGUpe3ZhciB0PVFyLm1pbihRci5tYXAoZS5ub2RlcygpLGZ1bmN0aW9uKG8pe3JldHVybiBlLm5vZGUobykucmFua30pKSxyPVtdO1FyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKG8pe3ZhciBhPWUubm9kZShvKS5yYW5rLXQ7clthXXx8KHJbYV09W10pLHJbYV0ucHVzaChvKX0pO3ZhciBuPTAsaT1lLmdyYXBoKCkubm9kZVJhbmtGYWN0b3I7UXIuZm9yRWFjaChyLGZ1bmN0aW9uKG8sYSl7UXIuaXNVbmRlZmluZWQobykmJmElaSE9PTA/LS1uOm4mJlFyLmZvckVhY2gobyxmdW5jdGlvbihzKXtlLm5vZGUocykucmFuays9bn0pfSl9ZnVuY3Rpb24gVmFyKGUsdCxyLG4pe3ZhciBpPXt3aWR0aDowLGhlaWdodDowfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49NCYmKGkucmFuaz1yLGkub3JkZXI9biksX2FlKGUsImJvcmRlciIsaSx0KX1mdW5jdGlvbiB5YWUoZSl7cmV0dXJuIFFyLm1heChRci5tYXAoZS5ub2RlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUubm9kZSh0KS5yYW5rO2lmKCFRci5pc1VuZGVmaW5lZChyKSlyZXR1cm4gcn0pKX1mdW5jdGlvbiBVYXIoZSx0KXt2YXIgcj17bGhzOltdLHJoczpbXX07cmV0dXJuIFFyLmZvckVhY2goZSxmdW5jdGlvbihuKXt0KG4pP3IubGhzLnB1c2gobik6ci5yaHMucHVzaChuKX0pLHJ9ZnVuY3Rpb24gcWFyKGUsdCl7dmFyIHI9UXIubm93KCk7dHJ5e3JldHVybiB0KCl9ZmluYWxseXtjb25zb2xlLmxvZyhlKyIgdGltZTogIisoUXIubm93KCktcikrIm1zIil9fWZ1bmN0aW9uIEdhcihlLHQpe3JldHVybiB0KCl9fSk7dmFyIHdhZT1IKChZSm4sYmFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeGFlPXFuKCksV2FyPW5zKCk7YmFlLmV4cG9ydHM9e3J1bjpZYXIsdW5kbzpYYXJ9O2Z1bmN0aW9uIFlhcihlKXtlLmdyYXBoKCkuZHVtbXlDaGFpbnM9W10seGFlLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe2phcihlLHQpfSl9ZnVuY3Rpb24gamFyKGUsdCl7dmFyIHI9dC52LG49ZS5ub2RlKHIpLnJhbmssaT10Lncsbz1lLm5vZGUoaSkucmFuayxhPXQubmFtZSxzPWUuZWRnZSh0KSxsPXMubGFiZWxSYW5rO2lmKG8hPT1uKzEpe2UucmVtb3ZlRWRnZSh0KTt2YXIgYyx1LGg7Zm9yKGg9MCwrK247bjxvOysraCwrK24pcy5wb2ludHM9W10sdT17d2lkdGg6MCxoZWlnaHQ6MCxlZGdlTGFiZWw6cyxlZGdlT2JqOnQscmFuazpufSxjPVdhci5hZGREdW1teU5vZGUoZSwiZWRnZSIsdSwiX2QiKSxuPT09bCYmKHUud2lkdGg9cy53aWR0aCx1LmhlaWdodD1zLmhlaWdodCx1LmR1bW15PSJlZGdlLWxhYmVsIix1LmxhYmVscG9zPXMubGFiZWxwb3MpLGUuc2V0RWRnZShyLGMse3dlaWdodDpzLndlaWdodH0sYSksaD09PTAmJmUuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKGMpLHI9YztlLnNldEVkZ2UocixpLHt3ZWlnaHQ6cy53ZWlnaHR9LGEpfX1mdW5jdGlvbiBYYXIoZSl7eGFlLmZvckVhY2goZS5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKHQpe3ZhciByPWUubm9kZSh0KSxuPXIuZWRnZUxhYmVsLGk7Zm9yKGUuc2V0RWRnZShyLmVkZ2VPYmosbik7ci5kdW1teTspaT1lLnN1Y2Nlc3NvcnModClbMF0sZS5yZW1vdmVOb2RlKHQpLG4ucG9pbnRzLnB1c2goe3g6ci54LHk6ci55fSksci5kdW1teT09PSJlZGdlLWxhYmVsIiYmKG4ueD1yLngsbi55PXIueSxuLndpZHRoPXIud2lkdGgsbi5oZWlnaHQ9ci5oZWlnaHQpLHQ9aSxyPWUubm9kZSh0KX0pfX0pO3ZhciBqND1IKChqSm4sU2FlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgY0g9cW4oKTtTYWUuZXhwb3J0cz17bG9uZ2VzdFBhdGg6JGFyLHNsYWNrOkthcn07ZnVuY3Rpb24gJGFyKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIHIobil7dmFyIGk9ZS5ub2RlKG4pO2lmKGNILmhhcyh0LG4pKXJldHVybiBpLnJhbms7dFtuXT0hMDt2YXIgbz1jSC5taW4oY0gubWFwKGUub3V0RWRnZXMobiksZnVuY3Rpb24oYSl7cmV0dXJuIHIoYS53KS1lLmVkZ2UoYSkubWlubGVufSkpO3JldHVybihvPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfHxvPT09dm9pZCAwfHxvPT09bnVsbCkmJihvPTApLGkucmFuaz1vfWNILmZvckVhY2goZS5zb3VyY2VzKCkscil9ZnVuY3Rpb24gS2FyKGUsdCl7cmV0dXJuIGUubm9kZSh0LncpLnJhbmstZS5ub2RlKHQudikucmFuay1lLmVkZ2UodCkubWlubGVufX0pO3ZhciBUbHQ9SCgoWEpuLE1hZSk9PnsidXNlIHN0cmljdCI7dmFyIHVIPXFuKCksWmFyPVVjKCkuR3JhcGgsaEg9ajQoKS5zbGFjaztNYWUuZXhwb3J0cz1KYXI7ZnVuY3Rpb24gSmFyKGUpe3ZhciB0PW5ldyBaYXIoe2RpcmVjdGVkOiExfSkscj1lLm5vZGVzKClbMF0sbj1lLm5vZGVDb3VudCgpO3Quc2V0Tm9kZShyLHt9KTtmb3IodmFyIGksbztRYXIodCxlKTxuOylpPXRzcih0LGUpLG89dC5oYXNOb2RlKGkudik/aEgoZSxpKTotaEgoZSxpKSxlc3IodCxlLG8pO3JldHVybiB0fWZ1bmN0aW9uIFFhcihlLHQpe2Z1bmN0aW9uIHIobil7dUguZm9yRWFjaCh0Lm5vZGVFZGdlcyhuKSxmdW5jdGlvbihpKXt2YXIgbz1pLnYsYT1uPT09bz9pLnc6bzshZS5oYXNOb2RlKGEpJiYhaEgodCxpKSYmKGUuc2V0Tm9kZShhLHt9KSxlLnNldEVkZ2UobixhLHt9KSxyKGEpKX0pfXJldHVybiB1SC5mb3JFYWNoKGUubm9kZXMoKSxyKSxlLm5vZGVDb3VudCgpfWZ1bmN0aW9uIHRzcihlLHQpe3JldHVybiB1SC5taW5CeSh0LmVkZ2VzKCksZnVuY3Rpb24ocil7aWYoZS5oYXNOb2RlKHIudikhPT1lLmhhc05vZGUoci53KSlyZXR1cm4gaEgodCxyKX0pfWZ1bmN0aW9uIGVzcihlLHQscil7dUguZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obil7dC5ub2RlKG4pLnJhbmsrPXJ9KX19KTt2YXIga2FlPUgoKCRKbixMYWUpPT57InVzZSBzdHJpY3QiO3ZhciBJZD1xbigpLHJzcj1UbHQoKSxuc3I9ajQoKS5zbGFjayxpc3I9ajQoKS5sb25nZXN0UGF0aCxvc3I9VWMoKS5hbGcucHJlb3JkZXIsYXNyPVVjKCkuYWxnLnBvc3RvcmRlcixzc3I9bnMoKS5zaW1wbGlmeTtMYWUuZXhwb3J0cz10djt0di5pbml0TG93TGltVmFsdWVzPUFsdDt0di5pbml0Q3V0VmFsdWVzPUNsdDt0di5jYWxjQ3V0VmFsdWU9VGFlO3R2LmxlYXZlRWRnZT1BYWU7dHYuZW50ZXJFZGdlPVBhZTt0di5leGNoYW5nZUVkZ2VzPUlhZTtmdW5jdGlvbiB0dihlKXtlPXNzcihlKSxpc3IoZSk7dmFyIHQ9cnNyKGUpO0FsdCh0KSxDbHQodCxlKTtmb3IodmFyIHIsbjtyPUFhZSh0KTspbj1QYWUodCxlLHIpLElhZSh0LGUscixuKX1mdW5jdGlvbiBDbHQoZSx0KXt2YXIgcj1hc3IoZSxlLm5vZGVzKCkpO3I9ci5zbGljZSgwLHIubGVuZ3RoLTEpLElkLmZvckVhY2gocixmdW5jdGlvbihuKXtsc3IoZSx0LG4pfSl9ZnVuY3Rpb24gbHNyKGUsdCxyKXt2YXIgbj1lLm5vZGUociksaT1uLnBhcmVudDtlLmVkZ2UocixpKS5jdXR2YWx1ZT1UYWUoZSx0LHIpfWZ1bmN0aW9uIFRhZShlLHQscil7dmFyIG49ZS5ub2RlKHIpLGk9bi5wYXJlbnQsbz0hMCxhPXQuZWRnZShyLGkpLHM9MDtyZXR1cm4gYXx8KG89ITEsYT10LmVkZ2UoaSxyKSkscz1hLndlaWdodCxJZC5mb3JFYWNoKHQubm9kZUVkZ2VzKHIpLGZ1bmN0aW9uKGwpe3ZhciBjPWwudj09PXIsdT1jP2wudzpsLnY7aWYodSE9PWkpe3ZhciBoPWM9PT1vLGY9dC5lZGdlKGwpLndlaWdodDtpZihzKz1oP2Y6LWYsdXNyKGUscix1KSl7dmFyIHA9ZS5lZGdlKHIsdSkuY3V0dmFsdWU7cys9aD8tcDpwfX19KSxzfWZ1bmN0aW9uIEFsdChlLHQpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9ZS5ub2RlcygpWzBdKSxDYWUoZSx7fSwxLHQpfWZ1bmN0aW9uIENhZShlLHQscixuLGkpe3ZhciBvPXIsYT1lLm5vZGUobik7cmV0dXJuIHRbbl09ITAsSWQuZm9yRWFjaChlLm5laWdoYm9ycyhuKSxmdW5jdGlvbihzKXtJZC5oYXModCxzKXx8KHI9Q2FlKGUsdCxyLHMsbikpfSksYS5sb3c9byxhLmxpbT1yKyssaT9hLnBhcmVudD1pOmRlbGV0ZSBhLnBhcmVudCxyfWZ1bmN0aW9uIEFhZShlKXtyZXR1cm4gSWQuZmluZChlLmVkZ2VzKCksZnVuY3Rpb24odCl7cmV0dXJuIGUuZWRnZSh0KS5jdXR2YWx1ZTwwfSl9ZnVuY3Rpb24gUGFlKGUsdCxyKXt2YXIgbj1yLnYsaT1yLnc7dC5oYXNFZGdlKG4saSl8fChuPXIudyxpPXIudik7dmFyIG89ZS5ub2RlKG4pLGE9ZS5ub2RlKGkpLHM9byxsPSExO28ubGltPmEubGltJiYocz1hLGw9ITApO3ZhciBjPUlkLmZpbHRlcih0LmVkZ2VzKCksZnVuY3Rpb24odSl7cmV0dXJuIGw9PT1FYWUoZSxlLm5vZGUodS52KSxzKSYmbCE9PUVhZShlLGUubm9kZSh1LncpLHMpfSk7cmV0dXJuIElkLm1pbkJ5KGMsZnVuY3Rpb24odSl7cmV0dXJuIG5zcih0LHUpfSl9ZnVuY3Rpb24gSWFlKGUsdCxyLG4pe3ZhciBpPXIudixvPXIudztlLnJlbW92ZUVkZ2UoaSxvKSxlLnNldEVkZ2Uobi52LG4udyx7fSksQWx0KGUpLENsdChlLHQpLGNzcihlLHQpfWZ1bmN0aW9uIGNzcihlLHQpe3ZhciByPUlkLmZpbmQoZS5ub2RlcygpLGZ1bmN0aW9uKGkpe3JldHVybiF0Lm5vZGUoaSkucGFyZW50fSksbj1vc3IoZSxyKTtuPW4uc2xpY2UoMSksSWQuZm9yRWFjaChuLGZ1bmN0aW9uKGkpe3ZhciBvPWUubm9kZShpKS5wYXJlbnQsYT10LmVkZ2UoaSxvKSxzPSExO2F8fChhPXQuZWRnZShvLGkpLHM9ITApLHQubm9kZShpKS5yYW5rPXQubm9kZShvKS5yYW5rKyhzP2EubWlubGVuOi1hLm1pbmxlbil9KX1mdW5jdGlvbiB1c3IoZSx0LHIpe3JldHVybiBlLmhhc0VkZ2UodCxyKX1mdW5jdGlvbiBFYWUoZSx0LHIpe3JldHVybiByLmxvdzw9dC5saW0mJnQubGltPD1yLmxpbX19KTt2YXIgT2FlPUgoKEtKbixEYWUpPT57InVzZSBzdHJpY3QiO3ZhciBoc3I9ajQoKSxOYWU9aHNyLmxvbmdlc3RQYXRoLGZzcj1UbHQoKSxwc3I9a2FlKCk7RGFlLmV4cG9ydHM9ZHNyO2Z1bmN0aW9uIGRzcihlKXtzd2l0Y2goZS5ncmFwaCgpLnJhbmtlcil7Y2FzZSJuZXR3b3JrLXNpbXBsZXgiOlJhZShlKTticmVhaztjYXNlInRpZ2h0LXRyZWUiOmdzcihlKTticmVhaztjYXNlImxvbmdlc3QtcGF0aCI6bXNyKGUpO2JyZWFrO2RlZmF1bHQ6UmFlKGUpfX12YXIgbXNyPU5hZTtmdW5jdGlvbiBnc3IoZSl7TmFlKGUpLGZzcihlKX1mdW5jdGlvbiBSYWUoZSl7cHNyKGUpfX0pO3ZhciBGYWU9SCgoWkpuLHphZSk9Pnt2YXIgUGx0PXFuKCk7emFlLmV4cG9ydHM9X3NyO2Z1bmN0aW9uIF9zcihlKXt2YXIgdD12c3IoZSk7UGx0LmZvckVhY2goZS5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1lLm5vZGUociksaT1uLmVkZ2VPYmosbz15c3IoZSx0LGkudixpLncpLGE9by5wYXRoLHM9by5sY2EsbD0wLGM9YVtsXSx1PSEwO3IhPT1pLnc7KXtpZihuPWUubm9kZShyKSx1KXtmb3IoOyhjPWFbbF0pIT09cyYmZS5ub2RlKGMpLm1heFJhbms8bi5yYW5rOylsKys7Yz09PXMmJih1PSExKX1pZighdSl7Zm9yKDtsPGEubGVuZ3RoLTEmJmUubm9kZShjPWFbbCsxXSkubWluUmFuazw9bi5yYW5rOylsKys7Yz1hW2xdfWUuc2V0UGFyZW50KHIsYykscj1lLnN1Y2Nlc3NvcnMocilbMF19fSl9ZnVuY3Rpb24geXNyKGUsdCxyLG4pe3ZhciBpPVtdLG89W10sYT1NYXRoLm1pbih0W3JdLmxvdyx0W25dLmxvdykscz1NYXRoLm1heCh0W3JdLmxpbSx0W25dLmxpbSksbCxjO2w9cjtkbyBsPWUucGFyZW50KGwpLGkucHVzaChsKTt3aGlsZShsJiYodFtsXS5sb3c+YXx8cz50W2xdLmxpbSkpO2ZvcihjPWwsbD1uOyhsPWUucGFyZW50KGwpKSE9PWM7KW8ucHVzaChsKTtyZXR1cm57cGF0aDppLmNvbmNhdChvLnJldmVyc2UoKSksbGNhOmN9fWZ1bmN0aW9uIHZzcihlKXt2YXIgdD17fSxyPTA7ZnVuY3Rpb24gbihpKXt2YXIgbz1yO1BsdC5mb3JFYWNoKGUuY2hpbGRyZW4oaSksbiksdFtpXT17bG93Om8sbGltOnIrK319cmV0dXJuIFBsdC5mb3JFYWNoKGUuY2hpbGRyZW4oKSxuKSx0fX0pO3ZhciBWYWU9SCgoSkpuLEhhZSk9Pnt2YXIgTGQ9cW4oKSxJbHQ9bnMoKTtIYWUuZXhwb3J0cz17cnVuOnhzcixjbGVhbnVwOlNzcn07ZnVuY3Rpb24geHNyKGUpe3ZhciB0PUlsdC5hZGREdW1teU5vZGUoZSwicm9vdCIse30sIl9yb290Iikscj1ic3IoZSksbj1MZC5tYXgoTGQudmFsdWVzKHIpKS0xLGk9MipuKzE7ZS5ncmFwaCgpLm5lc3RpbmdSb290PXQsTGQuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24oYSl7ZS5lZGdlKGEpLm1pbmxlbio9aX0pO3ZhciBvPXdzcihlKSsxO0xkLmZvckVhY2goZS5jaGlsZHJlbigpLGZ1bmN0aW9uKGEpe0JhZShlLHQsaSxvLG4scixhKX0pLGUuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1pfWZ1bmN0aW9uIEJhZShlLHQscixuLGksbyxhKXt2YXIgcz1lLmNoaWxkcmVuKGEpO2lmKCFzLmxlbmd0aCl7YSE9PXQmJmUuc2V0RWRnZSh0LGEse3dlaWdodDowLG1pbmxlbjpyfSk7cmV0dXJufXZhciBsPUlsdC5hZGRCb3JkZXJOb2RlKGUsIl9idCIpLGM9SWx0LmFkZEJvcmRlck5vZGUoZSwiX2JiIiksdT1lLm5vZGUoYSk7ZS5zZXRQYXJlbnQobCxhKSx1LmJvcmRlclRvcD1sLGUuc2V0UGFyZW50KGMsYSksdS5ib3JkZXJCb3R0b209YyxMZC5mb3JFYWNoKHMsZnVuY3Rpb24oaCl7QmFlKGUsdCxyLG4saSxvLGgpO3ZhciBmPWUubm9kZShoKSxwPWYuYm9yZGVyVG9wP2YuYm9yZGVyVG9wOmgsZD1mLmJvcmRlckJvdHRvbT9mLmJvcmRlckJvdHRvbTpoLGc9Zi5ib3JkZXJUb3A/bjoyKm4sXz1wIT09ZD8xOmktb1thXSsxO2Uuc2V0RWRnZShsLHAse3dlaWdodDpnLG1pbmxlbjpfLG5lc3RpbmdFZGdlOiEwfSksZS5zZXRFZGdlKGQsYyx7d2VpZ2h0OmcsbWlubGVuOl8sbmVzdGluZ0VkZ2U6ITB9KX0pLGUucGFyZW50KGEpfHxlLnNldEVkZ2UodCxsLHt3ZWlnaHQ6MCxtaW5sZW46aStvW2FdfSl9ZnVuY3Rpb24gYnNyKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIHIobixpKXt2YXIgbz1lLmNoaWxkcmVuKG4pO28mJm8ubGVuZ3RoJiZMZC5mb3JFYWNoKG8sZnVuY3Rpb24oYSl7cihhLGkrMSl9KSx0W25dPWl9cmV0dXJuIExkLmZvckVhY2goZS5jaGlsZHJlbigpLGZ1bmN0aW9uKG4pe3IobiwxKX0pLHR9ZnVuY3Rpb24gd3NyKGUpe3JldHVybiBMZC5yZWR1Y2UoZS5lZGdlcygpLGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrZS5lZGdlKHIpLndlaWdodH0sMCl9ZnVuY3Rpb24gU3NyKGUpe3ZhciB0PWUuZ3JhcGgoKTtlLnJlbW92ZU5vZGUodC5uZXN0aW5nUm9vdCksZGVsZXRlIHQubmVzdGluZ1Jvb3QsTGQuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5lZGdlKHIpO24ubmVzdGluZ0VkZ2UmJmUucmVtb3ZlRWRnZShyKX0pfX0pO3ZhciBHYWU9SCgoUUpuLHFhZSk9Pnt2YXIgTGx0PXFuKCksTXNyPW5zKCk7cWFlLmV4cG9ydHM9RXNyO2Z1bmN0aW9uIEVzcihlKXtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2hpbGRyZW4ociksaT1lLm5vZGUocik7aWYobi5sZW5ndGgmJkxsdC5mb3JFYWNoKG4sdCksTGx0LmhhcyhpLCJtaW5SYW5rIikpe2kuYm9yZGVyTGVmdD1bXSxpLmJvcmRlclJpZ2h0PVtdO2Zvcih2YXIgbz1pLm1pblJhbmssYT1pLm1heFJhbmsrMTtvPGE7KytvKVVhZShlLCJib3JkZXJMZWZ0IiwiX2JsIixyLGksbyksVWFlKGUsImJvcmRlclJpZ2h0IiwiX2JyIixyLGksbyl9fUxsdC5mb3JFYWNoKGUuY2hpbGRyZW4oKSx0KX1mdW5jdGlvbiBVYWUoZSx0LHIsbixpLG8pe3ZhciBhPXt3aWR0aDowLGhlaWdodDowLHJhbms6byxib3JkZXJUeXBlOnR9LHM9aVt0XVtvLTFdLGw9TXNyLmFkZER1bW15Tm9kZShlLCJib3JkZXIiLGEscik7aVt0XVtvXT1sLGUuc2V0UGFyZW50KGwsbikscyYmZS5zZXRFZGdlKHMsbCx7d2VpZ2h0OjF9KX19KTt2YXIgWGFlPUgoKHRRbixqYWUpPT57InVzZSBzdHJpY3QiO3ZhciBVZj1xbigpO2phZS5leHBvcnRzPXthZGp1c3Q6VHNyLHVuZG86Q3NyfTtmdW5jdGlvbiBUc3IoZSl7dmFyIHQ9ZS5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsodD09PSJsciJ8fHQ9PT0icmwiKSYmWWFlKGUpfWZ1bmN0aW9uIENzcihlKXt2YXIgdD1lLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyh0PT09ImJ0Inx8dD09PSJybCIpJiZBc3IoZSksKHQ9PT0ibHIifHx0PT09InJsIikmJihQc3IoZSksWWFlKGUpKX1mdW5jdGlvbiBZYWUoZSl7VWYuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24odCl7V2FlKGUubm9kZSh0KSl9KSxVZi5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXtXYWUoZS5lZGdlKHQpKX0pfWZ1bmN0aW9uIFdhZShlKXt2YXIgdD1lLndpZHRoO2Uud2lkdGg9ZS5oZWlnaHQsZS5oZWlnaHQ9dH1mdW5jdGlvbiBBc3IoZSl7VWYuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24odCl7a2x0KGUubm9kZSh0KSl9KSxVZi5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7VWYuZm9yRWFjaChyLnBvaW50cyxrbHQpLFVmLmhhcyhyLCJ5IikmJmtsdChyKX0pfWZ1bmN0aW9uIGtsdChlKXtlLnk9LWUueX1mdW5jdGlvbiBQc3IoZSl7VWYuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24odCl7Umx0KGUubm9kZSh0KSl9KSxVZi5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7VWYuZm9yRWFjaChyLnBvaW50cyxSbHQpLFVmLmhhcyhyLCJ4IikmJlJsdChyKX0pfWZ1bmN0aW9uIFJsdChlKXt2YXIgdD1lLng7ZS54PWUueSxlLnk9dH19KTt2YXIgS2FlPUgoKGVRbiwkYWUpPT57InVzZSBzdHJpY3QiO3ZhciBrZD1xbigpOyRhZS5leHBvcnRzPUlzcjtmdW5jdGlvbiBJc3IoZSl7dmFyIHQ9e30scj1rZC5maWx0ZXIoZS5ub2RlcygpLGZ1bmN0aW9uKHMpe3JldHVybiFlLmNoaWxkcmVuKHMpLmxlbmd0aH0pLG49a2QubWF4KGtkLm1hcChyLGZ1bmN0aW9uKHMpe3JldHVybiBlLm5vZGUocykucmFua30pKSxpPWtkLm1hcChrZC5yYW5nZShuKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtmdW5jdGlvbiBvKHMpe2lmKCFrZC5oYXModCxzKSl7dFtzXT0hMDt2YXIgbD1lLm5vZGUocyk7aVtsLnJhbmtdLnB1c2gocyksa2QuZm9yRWFjaChlLnN1Y2Nlc3NvcnMocyksbyl9fXZhciBhPWtkLnNvcnRCeShyLGZ1bmN0aW9uKHMpe3JldHVybiBlLm5vZGUocykucmFua30pO3JldHVybiBrZC5mb3JFYWNoKGEsbyksaX19KTt2YXIgSmFlPUgoKHJRbixaYWUpPT57InVzZSBzdHJpY3QiO3ZhciBoMD1xbigpO1phZS5leHBvcnRzPUxzcjtmdW5jdGlvbiBMc3IoZSx0KXtmb3IodmFyIHI9MCxuPTE7bjx0Lmxlbmd0aDsrK24pcis9a3NyKGUsdFtuLTFdLHRbbl0pO3JldHVybiByfWZ1bmN0aW9uIGtzcihlLHQscil7Zm9yKHZhciBuPWgwLnppcE9iamVjdChyLGgwLm1hcChyLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIHV9KSksaT1oMC5mbGF0dGVuKGgwLm1hcCh0LGZ1bmN0aW9uKGMpe3JldHVybiBoMC5zb3J0QnkoaDAubWFwKGUub3V0RWRnZXMoYyksZnVuY3Rpb24odSl7cmV0dXJue3BvczpuW3Uud10sd2VpZ2h0OmUuZWRnZSh1KS53ZWlnaHR9fSksInBvcyIpfSksITApLG89MTtvPHIubGVuZ3RoOylvPDw9MTt2YXIgYT0yKm8tMTtvLT0xO3ZhciBzPWgwLm1hcChuZXcgQXJyYXkoYSksZnVuY3Rpb24oKXtyZXR1cm4gMH0pLGw9MDtyZXR1cm4gaDAuZm9yRWFjaChpLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIHU9Yy5wb3MrbztzW3VdKz1jLndlaWdodDtmb3IodmFyIGg9MDt1PjA7KXUlMiYmKGgrPXNbdSsxXSksdT11LTE+PjEsc1t1XSs9Yy53ZWlnaHQ7bCs9Yy53ZWlnaHQqaH0pKSxsfX0pO3ZhciBlc2U9SCgoblFuLHRzZSk9Pnt2YXIgUWFlPXFuKCk7dHNlLmV4cG9ydHM9UnNyO2Z1bmN0aW9uIFJzcihlLHQpe3JldHVybiBRYWUubWFwKHQsZnVuY3Rpb24ocil7dmFyIG49ZS5pbkVkZ2VzKHIpO2lmKG4ubGVuZ3RoKXt2YXIgaT1RYWUucmVkdWNlKG4sZnVuY3Rpb24obyxhKXt2YXIgcz1lLmVkZ2UoYSksbD1lLm5vZGUoYS52KTtyZXR1cm57c3VtOm8uc3VtK3Mud2VpZ2h0Kmwub3JkZXIsd2VpZ2h0Om8ud2VpZ2h0K3Mud2VpZ2h0fX0se3N1bTowLHdlaWdodDowfSk7cmV0dXJue3Y6cixiYXJ5Y2VudGVyOmkuc3VtL2kud2VpZ2h0LHdlaWdodDppLndlaWdodH19ZWxzZSByZXR1cm57djpyfX0pfX0pO3ZhciBuc2U9SCgoaVFuLHJzZSk9PnsidXNlIHN0cmljdCI7dmFyIFRsPXFuKCk7cnNlLmV4cG9ydHM9TnNyO2Z1bmN0aW9uIE5zcihlLHQpe3ZhciByPXt9O1RsLmZvckVhY2goZSxmdW5jdGlvbihpLG8pe3ZhciBhPXJbaS52XT17aW5kZWdyZWU6MCxpbjpbXSxvdXQ6W10sdnM6W2kudl0saTpvfTtUbC5pc1VuZGVmaW5lZChpLmJhcnljZW50ZXIpfHwoYS5iYXJ5Y2VudGVyPWkuYmFyeWNlbnRlcixhLndlaWdodD1pLndlaWdodCl9KSxUbC5mb3JFYWNoKHQuZWRnZXMoKSxmdW5jdGlvbihpKXt2YXIgbz1yW2kudl0sYT1yW2kud107IVRsLmlzVW5kZWZpbmVkKG8pJiYhVGwuaXNVbmRlZmluZWQoYSkmJihhLmluZGVncmVlKyssby5vdXQucHVzaChyW2kud10pKX0pO3ZhciBuPVRsLmZpbHRlcihyLGZ1bmN0aW9uKGkpe3JldHVybiFpLmluZGVncmVlfSk7cmV0dXJuIERzcihuKX1mdW5jdGlvbiBEc3IoZSl7dmFyIHQ9W107ZnVuY3Rpb24gcihvKXtyZXR1cm4gZnVuY3Rpb24oYSl7YS5tZXJnZWR8fChUbC5pc1VuZGVmaW5lZChhLmJhcnljZW50ZXIpfHxUbC5pc1VuZGVmaW5lZChvLmJhcnljZW50ZXIpfHxhLmJhcnljZW50ZXI+PW8uYmFyeWNlbnRlcikmJk9zcihvLGEpfX1mdW5jdGlvbiBuKG8pe3JldHVybiBmdW5jdGlvbihhKXthLmluLnB1c2gobyksLS1hLmluZGVncmVlPT09MCYmZS5wdXNoKGEpfX1mb3IoO2UubGVuZ3RoOyl7dmFyIGk9ZS5wb3AoKTt0LnB1c2goaSksVGwuZm9yRWFjaChpLmluLnJldmVyc2UoKSxyKGkpKSxUbC5mb3JFYWNoKGkub3V0LG4oaSkpfXJldHVybiBUbC5tYXAoVGwuZmlsdGVyKHQsZnVuY3Rpb24obyl7cmV0dXJuIW8ubWVyZ2VkfSksZnVuY3Rpb24obyl7cmV0dXJuIFRsLnBpY2sobyxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KX1mdW5jdGlvbiBPc3IoZSx0KXt2YXIgcj0wLG49MDtlLndlaWdodCYmKHIrPWUuYmFyeWNlbnRlciplLndlaWdodCxuKz1lLndlaWdodCksdC53ZWlnaHQmJihyKz10LmJhcnljZW50ZXIqdC53ZWlnaHQsbis9dC53ZWlnaHQpLGUudnM9dC52cy5jb25jYXQoZS52cyksZS5iYXJ5Y2VudGVyPXIvbixlLndlaWdodD1uLGUuaT1NYXRoLm1pbih0LmksZS5pKSx0Lm1lcmdlZD0hMH19KTt2YXIgYXNlPUgoKG9Rbixvc2UpPT57dmFyIFg0PXFuKCksenNyPW5zKCk7b3NlLmV4cG9ydHM9RnNyO2Z1bmN0aW9uIEZzcihlLHQpe3ZhciByPXpzci5wYXJ0aXRpb24oZSxmdW5jdGlvbih1KXtyZXR1cm4gWDQuaGFzKHUsImJhcnljZW50ZXIiKX0pLG49ci5saHMsaT1YNC5zb3J0Qnkoci5yaHMsZnVuY3Rpb24odSl7cmV0dXJuLXUuaX0pLG89W10sYT0wLHM9MCxsPTA7bi5zb3J0KEJzcighIXQpKSxsPWlzZShvLGksbCksWDQuZm9yRWFjaChuLGZ1bmN0aW9uKHUpe2wrPXUudnMubGVuZ3RoLG8ucHVzaCh1LnZzKSxhKz11LmJhcnljZW50ZXIqdS53ZWlnaHQscys9dS53ZWlnaHQsbD1pc2UobyxpLGwpfSk7dmFyIGM9e3ZzOlg0LmZsYXR0ZW4obywhMCl9O3JldHVybiBzJiYoYy5iYXJ5Y2VudGVyPWEvcyxjLndlaWdodD1zKSxjfWZ1bmN0aW9uIGlzZShlLHQscil7Zm9yKHZhciBuO3QubGVuZ3RoJiYobj1YNC5sYXN0KHQpKS5pPD1yOyl0LnBvcCgpLGUucHVzaChuLnZzKSxyKys7cmV0dXJuIHJ9ZnVuY3Rpb24gQnNyKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiB0LmJhcnljZW50ZXI8ci5iYXJ5Y2VudGVyPy0xOnQuYmFyeWNlbnRlcj5yLmJhcnljZW50ZXI/MTplP3IuaS10Lmk6dC5pLXIuaX19fSk7dmFyIGNzZT1IKChhUW4sbHNlKT0+e3ZhciBmMD1xbigpLEhzcj1lc2UoKSxWc3I9bnNlKCksVXNyPWFzZSgpO2xzZS5leHBvcnRzPXNzZTtmdW5jdGlvbiBzc2UoZSx0LHIsbil7dmFyIGk9ZS5jaGlsZHJlbih0KSxvPWUubm9kZSh0KSxhPW8/by5ib3JkZXJMZWZ0OnZvaWQgMCxzPW8/by5ib3JkZXJSaWdodDp2b2lkIDAsbD17fTthJiYoaT1mMC5maWx0ZXIoaSxmdW5jdGlvbihkKXtyZXR1cm4gZCE9PWEmJmQhPT1zfSkpO3ZhciBjPUhzcihlLGkpO2YwLmZvckVhY2goYyxmdW5jdGlvbihkKXtpZihlLmNoaWxkcmVuKGQudikubGVuZ3RoKXt2YXIgZz1zc2UoZSxkLnYscixuKTtsW2Qudl09ZyxmMC5oYXMoZywiYmFyeWNlbnRlciIpJiZHc3IoZCxnKX19KTt2YXIgdT1Wc3IoYyxyKTtxc3IodSxsKTt2YXIgaD1Vc3IodSxuKTtpZihhJiYoaC52cz1mMC5mbGF0dGVuKFthLGgudnMsc10sITApLGUucHJlZGVjZXNzb3JzKGEpLmxlbmd0aCkpe3ZhciBmPWUubm9kZShlLnByZWRlY2Vzc29ycyhhKVswXSkscD1lLm5vZGUoZS5wcmVkZWNlc3NvcnMocylbMF0pO2YwLmhhcyhoLCJiYXJ5Y2VudGVyIil8fChoLmJhcnljZW50ZXI9MCxoLndlaWdodD0wKSxoLmJhcnljZW50ZXI9KGguYmFyeWNlbnRlcipoLndlaWdodCtmLm9yZGVyK3Aub3JkZXIpLyhoLndlaWdodCsyKSxoLndlaWdodCs9Mn1yZXR1cm4gaH1mdW5jdGlvbiBxc3IoZSx0KXtmMC5mb3JFYWNoKGUsZnVuY3Rpb24ocil7ci52cz1mMC5mbGF0dGVuKHIudnMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0W25dP3Rbbl0udnM6bn0pLCEwKX0pfWZ1bmN0aW9uIEdzcihlLHQpe2YwLmlzVW5kZWZpbmVkKGUuYmFyeWNlbnRlcik/KGUuYmFyeWNlbnRlcj10LmJhcnljZW50ZXIsZS53ZWlnaHQ9dC53ZWlnaHQpOihlLmJhcnljZW50ZXI9KGUuYmFyeWNlbnRlciplLndlaWdodCt0LmJhcnljZW50ZXIqdC53ZWlnaHQpLyhlLndlaWdodCt0LndlaWdodCksZS53ZWlnaHQrPXQud2VpZ2h0KX19KTt2YXIgaHNlPUgoKHNRbix1c2UpPT57dmFyICQ0PXFuKCksV3NyPVVjKCkuR3JhcGg7dXNlLmV4cG9ydHM9WXNyO2Z1bmN0aW9uIFlzcihlLHQscil7dmFyIG49anNyKGUpLGk9bmV3IFdzcih7Y29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cm9vdDpufSkuc2V0RGVmYXVsdE5vZGVMYWJlbChmdW5jdGlvbihvKXtyZXR1cm4gZS5ub2RlKG8pfSk7cmV0dXJuICQ0LmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKG8pe3ZhciBhPWUubm9kZShvKSxzPWUucGFyZW50KG8pOyhhLnJhbms9PT10fHxhLm1pblJhbms8PXQmJnQ8PWEubWF4UmFuaykmJihpLnNldE5vZGUobyksaS5zZXRQYXJlbnQobyxzfHxuKSwkNC5mb3JFYWNoKGVbcl0obyksZnVuY3Rpb24obCl7dmFyIGM9bC52PT09bz9sLnc6bC52LHU9aS5lZGdlKGMsbyksaD0kNC5pc1VuZGVmaW5lZCh1KT8wOnUud2VpZ2h0O2kuc2V0RWRnZShjLG8se3dlaWdodDplLmVkZ2UobCkud2VpZ2h0K2h9KX0pLCQ0LmhhcyhhLCJtaW5SYW5rIikmJmkuc2V0Tm9kZShvLHtib3JkZXJMZWZ0OmEuYm9yZGVyTGVmdFt0XSxib3JkZXJSaWdodDphLmJvcmRlclJpZ2h0W3RdfSkpfSksaX1mdW5jdGlvbiBqc3IoZSl7Zm9yKHZhciB0O2UuaGFzTm9kZSh0PSQ0LnVuaXF1ZUlkKCJfcm9vdCIpKTspO3JldHVybiB0fX0pO3ZhciBwc2U9SCgobFFuLGZzZSk9Pnt2YXIgWHNyPXFuKCk7ZnNlLmV4cG9ydHM9JHNyO2Z1bmN0aW9uICRzcihlLHQscil7dmFyIG49e30saTtYc3IuZm9yRWFjaChyLGZ1bmN0aW9uKG8pe2Zvcih2YXIgYT1lLnBhcmVudChvKSxzLGw7YTspe2lmKHM9ZS5wYXJlbnQoYSkscz8obD1uW3NdLG5bc109YSk6KGw9aSxpPWEpLGwmJmwhPT1hKXt0LnNldEVkZ2UobCxhKTtyZXR1cm59YT1zfX0pfX0pO3ZhciB5c2U9SCgoY1FuLF9zZSk9PnsidXNlIHN0cmljdCI7dmFyIHAwPXFuKCksS3NyPUthZSgpLFpzcj1KYWUoKSxKc3I9Y3NlKCksUXNyPWhzZSgpLHRscj1wc2UoKSxlbHI9VWMoKS5HcmFwaCxkc2U9bnMoKTtfc2UuZXhwb3J0cz1ybHI7ZnVuY3Rpb24gcmxyKGUpe3ZhciB0PWRzZS5tYXhSYW5rKGUpLHI9bXNlKGUscDAucmFuZ2UoMSx0KzEpLCJpbkVkZ2VzIiksbj1tc2UoZSxwMC5yYW5nZSh0LTEsLTEsLTEpLCJvdXRFZGdlcyIpLGk9S3NyKGUpO2dzZShlLGkpO2Zvcih2YXIgbz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYSxzPTAsbD0wO2w8NDsrK3MsKytsKXtubHIocyUyP3I6bixzJTQ+PTIpLGk9ZHNlLmJ1aWxkTGF5ZXJNYXRyaXgoZSk7dmFyIGM9WnNyKGUsaSk7YzxvJiYobD0wLGE9cDAuY2xvbmVEZWVwKGkpLG89Yyl9Z3NlKGUsYSl9ZnVuY3Rpb24gbXNlKGUsdCxyKXtyZXR1cm4gcDAubWFwKHQsZnVuY3Rpb24obil7cmV0dXJuIFFzcihlLG4scil9KX1mdW5jdGlvbiBubHIoZSx0KXt2YXIgcj1uZXcgZWxyO3AwLmZvckVhY2goZSxmdW5jdGlvbihuKXt2YXIgaT1uLmdyYXBoKCkucm9vdCxvPUpzcihuLGkscix0KTtwMC5mb3JFYWNoKG8udnMsZnVuY3Rpb24oYSxzKXtuLm5vZGUoYSkub3JkZXI9c30pLHRscihuLHIsby52cyl9KX1mdW5jdGlvbiBnc2UoZSx0KXtwMC5mb3JFYWNoKHQsZnVuY3Rpb24ocil7cDAuZm9yRWFjaChyLGZ1bmN0aW9uKG4saSl7ZS5ub2RlKG4pLm9yZGVyPWl9KX0pfX0pO3ZhciBBc2U9SCgodVFuLENzZSk9PnsidXNlIHN0cmljdCI7dmFyIFhlPXFuKCksaWxyPVVjKCkuR3JhcGgsb2xyPW5zKCk7Q3NlLmV4cG9ydHM9e3Bvc2l0aW9uWDpsbHIsZmluZFR5cGUxQ29uZmxpY3RzOnZzZSxmaW5kVHlwZTJDb25mbGljdHM6eHNlLGFkZENvbmZsaWN0Ok5sdCxoYXNDb25mbGljdDpic2UsdmVydGljYWxBbGlnbm1lbnQ6d3NlLGhvcml6b250YWxDb21wYWN0aW9uOlNzZSxhbGlnbkNvb3JkaW5hdGVzOkVzZSxmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudDpNc2UsYmFsYW5jZTpUc2V9O2Z1bmN0aW9uIHZzZShlLHQpe3ZhciByPXt9O2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT0wLHM9MCxsPWkubGVuZ3RoLGM9WGUubGFzdChvKTtyZXR1cm4gWGUuZm9yRWFjaChvLGZ1bmN0aW9uKHUsaCl7dmFyIGY9YWxyKGUsdSkscD1mP2Uubm9kZShmKS5vcmRlcjpsOyhmfHx1PT09YykmJihYZS5mb3JFYWNoKG8uc2xpY2UocyxoKzEpLGZ1bmN0aW9uKGQpe1hlLmZvckVhY2goZS5wcmVkZWNlc3NvcnMoZCksZnVuY3Rpb24oZyl7dmFyIF89ZS5ub2RlKGcpLHk9Xy5vcmRlcjsoeTxhfHxwPHkpJiYhKF8uZHVtbXkmJmUubm9kZShkKS5kdW1teSkmJk5sdChyLGcsZCl9KX0pLHM9aCsxLGE9cCl9KSxvfXJldHVybiBYZS5yZWR1Y2UodCxuKSxyfWZ1bmN0aW9uIHhzZShlLHQpe3ZhciByPXt9O2Z1bmN0aW9uIG4obyxhLHMsbCxjKXt2YXIgdTtYZS5mb3JFYWNoKFhlLnJhbmdlKGEscyksZnVuY3Rpb24oaCl7dT1vW2hdLGUubm9kZSh1KS5kdW1teSYmWGUuZm9yRWFjaChlLnByZWRlY2Vzc29ycyh1KSxmdW5jdGlvbihmKXt2YXIgcD1lLm5vZGUoZik7cC5kdW1teSYmKHAub3JkZXI8bHx8cC5vcmRlcj5jKSYmTmx0KHIsZix1KX0pfSl9ZnVuY3Rpb24gaShvLGEpe3ZhciBzPS0xLGwsYz0wO3JldHVybiBYZS5mb3JFYWNoKGEsZnVuY3Rpb24odSxoKXtpZihlLm5vZGUodSkuZHVtbXk9PT0iYm9yZGVyIil7dmFyIGY9ZS5wcmVkZWNlc3NvcnModSk7Zi5sZW5ndGgmJihsPWUubm9kZShmWzBdKS5vcmRlcixuKGEsYyxoLHMsbCksYz1oLHM9bCl9bihhLGMsYS5sZW5ndGgsbCxvLmxlbmd0aCl9KSxhfXJldHVybiBYZS5yZWR1Y2UodCxpKSxyfWZ1bmN0aW9uIGFscihlLHQpe2lmKGUubm9kZSh0KS5kdW1teSlyZXR1cm4gWGUuZmluZChlLnByZWRlY2Vzc29ycyh0KSxmdW5jdGlvbihyKXtyZXR1cm4gZS5ub2RlKHIpLmR1bW15fSl9ZnVuY3Rpb24gTmx0KGUsdCxyKXtpZih0PnIpe3ZhciBuPXQ7dD1yLHI9bn12YXIgaT1lW3RdO2l8fChlW3RdPWk9e30pLGlbcl09ITB9ZnVuY3Rpb24gYnNlKGUsdCxyKXtpZih0PnIpe3ZhciBuPXQ7dD1yLHI9bn1yZXR1cm4gWGUuaGFzKGVbdF0scil9ZnVuY3Rpb24gd3NlKGUsdCxyLG4pe3ZhciBpPXt9LG89e30sYT17fTtyZXR1cm4gWGUuZm9yRWFjaCh0LGZ1bmN0aW9uKHMpe1hlLmZvckVhY2gocyxmdW5jdGlvbihsLGMpe2lbbF09bCxvW2xdPWwsYVtsXT1jfSl9KSxYZS5mb3JFYWNoKHQsZnVuY3Rpb24ocyl7dmFyIGw9LTE7WGUuZm9yRWFjaChzLGZ1bmN0aW9uKGMpe3ZhciB1PW4oYyk7aWYodS5sZW5ndGgpe3U9WGUuc29ydEJ5KHUsZnVuY3Rpb24oZyl7cmV0dXJuIGFbZ119KTtmb3IodmFyIGg9KHUubGVuZ3RoLTEpLzIsZj1NYXRoLmZsb29yKGgpLHA9TWF0aC5jZWlsKGgpO2Y8PXA7KytmKXt2YXIgZD11W2ZdO29bY109PT1jJiZsPGFbZF0mJiFic2UocixjLGQpJiYob1tkXT1jLG9bY109aVtjXT1pW2RdLGw9YVtkXSl9fX0pfSkse3Jvb3Q6aSxhbGlnbjpvfX1mdW5jdGlvbiBTc2UoZSx0LHIsbixpKXt2YXIgbz17fSxhPXNscihlLHQscixpKSxzPWk/ImJvcmRlckxlZnQiOiJib3JkZXJSaWdodCI7ZnVuY3Rpb24gbChoLGYpe2Zvcih2YXIgcD1hLm5vZGVzKCksZD1wLnBvcCgpLGc9e307ZDspZ1tkXT9oKGQpOihnW2RdPSEwLHAucHVzaChkKSxwPXAuY29uY2F0KGYoZCkpKSxkPXAucG9wKCl9ZnVuY3Rpb24gYyhoKXtvW2hdPWEuaW5FZGdlcyhoKS5yZWR1Y2UoZnVuY3Rpb24oZixwKXtyZXR1cm4gTWF0aC5tYXgoZixvW3Audl0rYS5lZGdlKHApKX0sMCl9ZnVuY3Rpb24gdShoKXt2YXIgZj1hLm91dEVkZ2VzKGgpLnJlZHVjZShmdW5jdGlvbihkLGcpe3JldHVybiBNYXRoLm1pbihkLG9bZy53XS1hLmVkZ2UoZykpfSxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHA9ZS5ub2RlKGgpO2YhPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkmJnAuYm9yZGVyVHlwZSE9PXMmJihvW2hdPU1hdGgubWF4KG9baF0sZikpfXJldHVybiBsKGMsYS5wcmVkZWNlc3NvcnMuYmluZChhKSksbCh1LGEuc3VjY2Vzc29ycy5iaW5kKGEpKSxYZS5mb3JFYWNoKG4sZnVuY3Rpb24oaCl7b1toXT1vW3JbaF1dfSksb31mdW5jdGlvbiBzbHIoZSx0LHIsbil7dmFyIGk9bmV3IGlscixvPWUuZ3JhcGgoKSxhPWNscihvLm5vZGVzZXAsby5lZGdlc2VwLG4pO3JldHVybiBYZS5mb3JFYWNoKHQsZnVuY3Rpb24ocyl7dmFyIGw7WGUuZm9yRWFjaChzLGZ1bmN0aW9uKGMpe3ZhciB1PXJbY107aWYoaS5zZXROb2RlKHUpLGwpe3ZhciBoPXJbbF0sZj1pLmVkZ2UoaCx1KTtpLnNldEVkZ2UoaCx1LE1hdGgubWF4KGEoZSxjLGwpLGZ8fDApKX1sPWN9KX0pLGl9ZnVuY3Rpb24gTXNlKGUsdCl7cmV0dXJuIFhlLm1pbkJ5KFhlLnZhbHVlcyh0KSxmdW5jdGlvbihyKXt2YXIgbj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksaT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIFhlLmZvckluKHIsZnVuY3Rpb24obyxhKXt2YXIgcz11bHIoZSxhKS8yO249TWF0aC5tYXgobytzLG4pLGk9TWF0aC5taW4oby1zLGkpfSksbi1pfSl9ZnVuY3Rpb24gRXNlKGUsdCl7dmFyIHI9WGUudmFsdWVzKHQpLG49WGUubWluKHIpLGk9WGUubWF4KHIpO1hlLmZvckVhY2goWyJ1IiwiZCJdLGZ1bmN0aW9uKG8pe1hlLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKGEpe3ZhciBzPW8rYSxsPWVbc10sYztpZihsIT09dCl7dmFyIHU9WGUudmFsdWVzKGwpO2M9YT09PSJsIj9uLVhlLm1pbih1KTppLVhlLm1heCh1KSxjJiYoZVtzXT1YZS5tYXBWYWx1ZXMobCxmdW5jdGlvbihoKXtyZXR1cm4gaCtjfSkpfX0pfSl9ZnVuY3Rpb24gVHNlKGUsdCl7cmV0dXJuIFhlLm1hcFZhbHVlcyhlLnVsLGZ1bmN0aW9uKHIsbil7aWYodClyZXR1cm4gZVt0LnRvTG93ZXJDYXNlKCldW25dO3ZhciBpPVhlLnNvcnRCeShYZS5tYXAoZSxuKSk7cmV0dXJuKGlbMV0raVsyXSkvMn0pfWZ1bmN0aW9uIGxscihlKXt2YXIgdD1vbHIuYnVpbGRMYXllck1hdHJpeChlKSxyPVhlLm1lcmdlKHZzZShlLHQpLHhzZShlLHQpKSxuPXt9LGk7WGUuZm9yRWFjaChbInUiLCJkIl0sZnVuY3Rpb24oYSl7aT1hPT09InUiP3Q6WGUudmFsdWVzKHQpLnJldmVyc2UoKSxYZS5mb3JFYWNoKFsibCIsInIiXSxmdW5jdGlvbihzKXtzPT09InIiJiYoaT1YZS5tYXAoaSxmdW5jdGlvbihoKXtyZXR1cm4gWGUudmFsdWVzKGgpLnJldmVyc2UoKX0pKTt2YXIgbD0oYT09PSJ1Ij9lLnByZWRlY2Vzc29yczplLnN1Y2Nlc3NvcnMpLmJpbmQoZSksYz13c2UoZSxpLHIsbCksdT1Tc2UoZSxpLGMucm9vdCxjLmFsaWduLHM9PT0iciIpO3M9PT0iciImJih1PVhlLm1hcFZhbHVlcyh1LGZ1bmN0aW9uKGgpe3JldHVybi1ofSkpLG5bYStzXT11fSl9KTt2YXIgbz1Nc2UoZSxuKTtyZXR1cm4gRXNlKG4sbyksVHNlKG4sZS5ncmFwaCgpLmFsaWduKX1mdW5jdGlvbiBjbHIoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuLGksbyl7dmFyIGE9bi5ub2RlKGkpLHM9bi5ub2RlKG8pLGw9MCxjO2lmKGwrPWEud2lkdGgvMixYZS5oYXMoYSwibGFiZWxwb3MiKSlzd2l0Y2goYS5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmM9LWEud2lkdGgvMjticmVhaztjYXNlInIiOmM9YS53aWR0aC8yO2JyZWFrfWlmKGMmJihsKz1yP2M6LWMpLGM9MCxsKz0oYS5kdW1teT90OmUpLzIsbCs9KHMuZHVtbXk/dDplKS8yLGwrPXMud2lkdGgvMixYZS5oYXMocywibGFiZWxwb3MiKSlzd2l0Y2gocy5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmM9cy53aWR0aC8yO2JyZWFrO2Nhc2UiciI6Yz0tcy53aWR0aC8yO2JyZWFrfXJldHVybiBjJiYobCs9cj9jOi1jKSxjPTAsbH19ZnVuY3Rpb24gdWxyKGUsdCl7cmV0dXJuIGUubm9kZSh0KS53aWR0aH19KTt2YXIgTHNlPUgoKGhRbixJc2UpPT57InVzZSBzdHJpY3QiO3ZhciBLND1xbigpLFBzZT1ucygpLGhscj1Bc2UoKS5wb3NpdGlvblg7SXNlLmV4cG9ydHM9ZmxyO2Z1bmN0aW9uIGZscihlKXtlPVBzZS5hc05vbkNvbXBvdW5kR3JhcGgoZSkscGxyKGUpLEs0LmZvckVhY2goaGxyKGUpLGZ1bmN0aW9uKHQscil7ZS5ub2RlKHIpLng9dH0pfWZ1bmN0aW9uIHBscihlKXt2YXIgdD1Qc2UuYnVpbGRMYXllck1hdHJpeChlKSxyPWUuZ3JhcGgoKS5yYW5rc2VwLG49MDtLNC5mb3JFYWNoKHQsZnVuY3Rpb24oaSl7dmFyIG89SzQubWF4KEs0Lm1hcChpLGZ1bmN0aW9uKGEpe3JldHVybiBlLm5vZGUoYSkuaGVpZ2h0fSkpO0s0LmZvckVhY2goaSxmdW5jdGlvbihhKXtlLm5vZGUoYSkueT1uK28vMn0pLG4rPW8rcn0pfX0pO3ZhciB6c2U9SCgoZlFuLE9zZSk9PnsidXNlIHN0cmljdCI7dmFyIGlyPXFuKCksa3NlPW1hZSgpLFJzZT13YWUoKSxkbHI9T2FlKCksbWxyPW5zKCkubm9ybWFsaXplUmFua3MsZ2xyPUZhZSgpLF9scj1ucygpLnJlbW92ZUVtcHR5UmFua3MsTnNlPVZhZSgpLHlscj1HYWUoKSxEc2U9WGFlKCksdmxyPXlzZSgpLHhscj1Mc2UoKSxkMD1ucygpLGJscj1VYygpLkdyYXBoO09zZS5leHBvcnRzPXdscjtmdW5jdGlvbiB3bHIoZSx0KXt2YXIgcj10JiZ0LmRlYnVnVGltaW5nP2QwLnRpbWU6ZDAubm90aW1lO3IoImxheW91dCIsZnVuY3Rpb24oKXt2YXIgbj1yKCIgIGJ1aWxkTGF5b3V0R3JhcGgiLGZ1bmN0aW9uKCl7cmV0dXJuIFJscihlKX0pO3IoIiAgcnVuTGF5b3V0IixmdW5jdGlvbigpe1NscihuLHIpfSkscigiICB1cGRhdGVJbnB1dEdyYXBoIixmdW5jdGlvbigpe01scihlLG4pfSl9KX1mdW5jdGlvbiBTbHIoZSx0KXt0KCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsZnVuY3Rpb24oKXtObHIoZSl9KSx0KCIgICAgcmVtb3ZlU2VsZkVkZ2VzIixmdW5jdGlvbigpe3FscihlKX0pLHQoIiAgICBhY3ljbGljIixmdW5jdGlvbigpe2tzZS5ydW4oZSl9KSx0KCIgICAgbmVzdGluZ0dyYXBoLnJ1biIsZnVuY3Rpb24oKXtOc2UucnVuKGUpfSksdCgiICAgIHJhbmsiLGZ1bmN0aW9uKCl7ZGxyKGQwLmFzTm9uQ29tcG91bmRHcmFwaChlKSl9KSx0KCIgICAgaW5qZWN0RWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtEbHIoZSl9KSx0KCIgICAgcmVtb3ZlRW1wdHlSYW5rcyIsZnVuY3Rpb24oKXtfbHIoZSl9KSx0KCIgICAgbmVzdGluZ0dyYXBoLmNsZWFudXAiLGZ1bmN0aW9uKCl7TnNlLmNsZWFudXAoZSl9KSx0KCIgICAgbm9ybWFsaXplUmFua3MiLGZ1bmN0aW9uKCl7bWxyKGUpfSksdCgiICAgIGFzc2lnblJhbmtNaW5NYXgiLGZ1bmN0aW9uKCl7T2xyKGUpfSksdCgiICAgIHJlbW92ZUVkZ2VMYWJlbFByb3hpZXMiLGZ1bmN0aW9uKCl7emxyKGUpfSksdCgiICAgIG5vcm1hbGl6ZS5ydW4iLGZ1bmN0aW9uKCl7UnNlLnJ1bihlKX0pLHQoIiAgICBwYXJlbnREdW1teUNoYWlucyIsZnVuY3Rpb24oKXtnbHIoZSl9KSx0KCIgICAgYWRkQm9yZGVyU2VnbWVudHMiLGZ1bmN0aW9uKCl7eWxyKGUpfSksdCgiICAgIG9yZGVyIixmdW5jdGlvbigpe3ZscihlKX0pLHQoIiAgICBpbnNlcnRTZWxmRWRnZXMiLGZ1bmN0aW9uKCl7R2xyKGUpfSksdCgiICAgIGFkanVzdENvb3JkaW5hdGVTeXN0ZW0iLGZ1bmN0aW9uKCl7RHNlLmFkanVzdChlKX0pLHQoIiAgICBwb3NpdGlvbiIsZnVuY3Rpb24oKXt4bHIoZSl9KSx0KCIgICAgcG9zaXRpb25TZWxmRWRnZXMiLGZ1bmN0aW9uKCl7V2xyKGUpfSksdCgiICAgIHJlbW92ZUJvcmRlck5vZGVzIixmdW5jdGlvbigpe1VscihlKX0pLHQoIiAgICBub3JtYWxpemUudW5kbyIsZnVuY3Rpb24oKXtSc2UudW5kbyhlKX0pLHQoIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsZnVuY3Rpb24oKXtIbHIoZSl9KSx0KCIgICAgdW5kb0Nvb3JkaW5hdGVTeXN0ZW0iLGZ1bmN0aW9uKCl7RHNlLnVuZG8oZSl9KSx0KCIgICAgdHJhbnNsYXRlR3JhcGgiLGZ1bmN0aW9uKCl7RmxyKGUpfSksdCgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIixmdW5jdGlvbigpe0JscihlKX0pLHQoIiAgICByZXZlcnNlUG9pbnRzIixmdW5jdGlvbigpe1ZscihlKX0pLHQoIiAgICBhY3ljbGljLnVuZG8iLGZ1bmN0aW9uKCl7a3NlLnVuZG8oZSl9KX1mdW5jdGlvbiBNbHIoZSx0KXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLm5vZGUociksaT10Lm5vZGUocik7biYmKG4ueD1pLngsbi55PWkueSx0LmNoaWxkcmVuKHIpLmxlbmd0aCYmKG4ud2lkdGg9aS53aWR0aCxuLmhlaWdodD1pLmhlaWdodCkpfSksaXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5lZGdlKHIpLGk9dC5lZGdlKHIpO24ucG9pbnRzPWkucG9pbnRzLGlyLmhhcyhpLCJ4IikmJihuLng9aS54LG4ueT1pLnkpfSksZS5ncmFwaCgpLndpZHRoPXQuZ3JhcGgoKS53aWR0aCxlLmdyYXBoKCkuaGVpZ2h0PXQuZ3JhcGgoKS5oZWlnaHR9dmFyIEVscj1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sVGxyPXtyYW5rc2VwOjUwLGVkZ2VzZXA6MjAsbm9kZXNlcDo1MCxyYW5rZGlyOiJ0YiJ9LENscj1bImFjeWNsaWNlciIsInJhbmtlciIsInJhbmtkaXIiLCJhbGlnbiJdLEFscj1bIndpZHRoIiwiaGVpZ2h0Il0sUGxyPXt3aWR0aDowLGhlaWdodDowfSxJbHI9WyJtaW5sZW4iLCJ3ZWlnaHQiLCJ3aWR0aCIsImhlaWdodCIsImxhYmVsb2Zmc2V0Il0sTGxyPXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0sa2xyPVsibGFiZWxwb3MiXTtmdW5jdGlvbiBSbHIoZSl7dmFyIHQ9bmV3IGJscih7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLHI9T2x0KGUuZ3JhcGgoKSk7cmV0dXJuIHQuc2V0R3JhcGgoaXIubWVyZ2Uoe30sVGxyLERsdChyLEVsciksaXIucGljayhyLENscikpKSxpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1PbHQoZS5ub2RlKG4pKTt0LnNldE5vZGUobixpci5kZWZhdWx0cyhEbHQoaSxBbHIpLFBscikpLHQuc2V0UGFyZW50KG4sZS5wYXJlbnQobikpfSksaXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24obil7dmFyIGk9T2x0KGUuZWRnZShuKSk7dC5zZXRFZGdlKG4saXIubWVyZ2Uoe30sTGxyLERsdChpLElsciksaXIucGljayhpLGtscikpKX0pLHR9ZnVuY3Rpb24gTmxyKGUpe3ZhciB0PWUuZ3JhcGgoKTt0LnJhbmtzZXAvPTIsaXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5lZGdlKHIpO24ubWlubGVuKj0yLG4ubGFiZWxwb3MudG9Mb3dlckNhc2UoKSE9PSJjIiYmKHQucmFua2Rpcj09PSJUQiJ8fHQucmFua2Rpcj09PSJCVCI/bi53aWR0aCs9bi5sYWJlbG9mZnNldDpuLmhlaWdodCs9bi5sYWJlbG9mZnNldCl9KX1mdW5jdGlvbiBEbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpO2lmKHIud2lkdGgmJnIuaGVpZ2h0KXt2YXIgbj1lLm5vZGUodC52KSxpPWUubm9kZSh0LncpLG89e3Jhbms6KGkucmFuay1uLnJhbmspLzIrbi5yYW5rLGU6dH07ZDAuYWRkRHVtbXlOb2RlKGUsImVkZ2UtcHJveHkiLG8sIl9lcCIpfX0pfWZ1bmN0aW9uIE9scihlKXt2YXIgdD0wO2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPWUubm9kZShyKTtuLmJvcmRlclRvcCYmKG4ubWluUmFuaz1lLm5vZGUobi5ib3JkZXJUb3ApLnJhbmssbi5tYXhSYW5rPWUubm9kZShuLmJvcmRlckJvdHRvbSkucmFuayx0PWlyLm1heCh0LG4ubWF4UmFuaykpfSksZS5ncmFwaCgpLm1heFJhbms9dH1mdW5jdGlvbiB6bHIoZSl7aXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpO3IuZHVtbXk9PT0iZWRnZS1wcm94eSImJihlLmVkZ2Uoci5lKS5sYWJlbFJhbms9ci5yYW5rLGUucmVtb3ZlTm9kZSh0KSl9KX1mdW5jdGlvbiBGbHIoZSl7dmFyIHQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHI9MCxuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxpPTAsbz1lLmdyYXBoKCksYT1vLm1hcmdpbnh8fDAscz1vLm1hcmdpbnl8fDA7ZnVuY3Rpb24gbChjKXt2YXIgdT1jLngsaD1jLnksZj1jLndpZHRoLHA9Yy5oZWlnaHQ7dD1NYXRoLm1pbih0LHUtZi8yKSxyPU1hdGgubWF4KHIsdStmLzIpLG49TWF0aC5taW4obixoLXAvMiksaT1NYXRoLm1heChpLGgrcC8yKX1pci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihjKXtsKGUubm9kZShjKSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihjKXt2YXIgdT1lLmVkZ2UoYyk7aXIuaGFzKHUsIngiKSYmbCh1KX0pLHQtPWEsbi09cyxpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihjKXt2YXIgdT1lLm5vZGUoYyk7dS54LT10LHUueS09bn0pLGlyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUuZWRnZShjKTtpci5mb3JFYWNoKHUucG9pbnRzLGZ1bmN0aW9uKGgpe2gueC09dCxoLnktPW59KSxpci5oYXModSwieCIpJiYodS54LT10KSxpci5oYXModSwieSIpJiYodS55LT1uKX0pLG8ud2lkdGg9ci10K2Esby5oZWlnaHQ9aS1uK3N9ZnVuY3Rpb24gQmxyKGUpe2lyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KSxuPWUubm9kZSh0LnYpLGk9ZS5ub2RlKHQudyksbyxhO3IucG9pbnRzPyhvPXIucG9pbnRzWzBdLGE9ci5wb2ludHNbci5wb2ludHMubGVuZ3RoLTFdKTooci5wb2ludHM9W10sbz1pLGE9biksci5wb2ludHMudW5zaGlmdChkMC5pbnRlcnNlY3RSZWN0KG4sbykpLHIucG9pbnRzLnB1c2goZDAuaW50ZXJzZWN0UmVjdChpLGEpKX0pfWZ1bmN0aW9uIEhscihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7aWYoaXIuaGFzKHIsIngiKSlzd2l0Y2goKHIubGFiZWxwb3M9PT0ibCJ8fHIubGFiZWxwb3M9PT0iciIpJiYoci53aWR0aC09ci5sYWJlbG9mZnNldCksci5sYWJlbHBvcyl7Y2FzZSJsIjpyLngtPXIud2lkdGgvMityLmxhYmVsb2Zmc2V0O2JyZWFrO2Nhc2UiciI6ci54Kz1yLndpZHRoLzIrci5sYWJlbG9mZnNldDticmVha319KX1mdW5jdGlvbiBWbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpO3IucmV2ZXJzZWQmJnIucG9pbnRzLnJldmVyc2UoKX0pfWZ1bmN0aW9uIFVscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtpZihlLmNoaWxkcmVuKHQpLmxlbmd0aCl7dmFyIHI9ZS5ub2RlKHQpLG49ZS5ub2RlKHIuYm9yZGVyVG9wKSxpPWUubm9kZShyLmJvcmRlckJvdHRvbSksbz1lLm5vZGUoaXIubGFzdChyLmJvcmRlckxlZnQpKSxhPWUubm9kZShpci5sYXN0KHIuYm9yZGVyUmlnaHQpKTtyLndpZHRoPU1hdGguYWJzKGEueC1vLngpLHIuaGVpZ2h0PU1hdGguYWJzKGkueS1uLnkpLHIueD1vLngrci53aWR0aC8yLHIueT1uLnkrci5oZWlnaHQvMn19KSxpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtlLm5vZGUodCkuZHVtbXk9PT0iYm9yZGVyIiYmZS5yZW1vdmVOb2RlKHQpfSl9ZnVuY3Rpb24gcWxyKGUpe2lyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe2lmKHQudj09PXQudyl7dmFyIHI9ZS5ub2RlKHQudik7ci5zZWxmRWRnZXN8fChyLnNlbGZFZGdlcz1bXSksci5zZWxmRWRnZXMucHVzaCh7ZTp0LGxhYmVsOmUuZWRnZSh0KX0pLGUucmVtb3ZlRWRnZSh0KX19KX1mdW5jdGlvbiBHbHIoZSl7dmFyIHQ9ZDAuYnVpbGRMYXllck1hdHJpeChlKTtpci5mb3JFYWNoKHQsZnVuY3Rpb24ocil7dmFyIG49MDtpci5mb3JFYWNoKHIsZnVuY3Rpb24oaSxvKXt2YXIgYT1lLm5vZGUoaSk7YS5vcmRlcj1vK24saXIuZm9yRWFjaChhLnNlbGZFZGdlcyxmdW5jdGlvbihzKXtkMC5hZGREdW1teU5vZGUoZSwic2VsZmVkZ2UiLHt3aWR0aDpzLmxhYmVsLndpZHRoLGhlaWdodDpzLmxhYmVsLmhlaWdodCxyYW5rOmEucmFuayxvcmRlcjpvKyArK24sZTpzLmUsbGFiZWw6cy5sYWJlbH0sIl9zZSIpfSksZGVsZXRlIGEuc2VsZkVkZ2VzfSl9KX1mdW5jdGlvbiBXbHIoZSl7aXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpO2lmKHIuZHVtbXk9PT0ic2VsZmVkZ2UiKXt2YXIgbj1lLm5vZGUoci5lLnYpLGk9bi54K24ud2lkdGgvMixvPW4ueSxhPXIueC1pLHM9bi5oZWlnaHQvMjtlLnNldEVkZ2Uoci5lLHIubGFiZWwpLGUucmVtb3ZlTm9kZSh0KSxyLmxhYmVsLnBvaW50cz1be3g6aSsyKmEvMyx5Om8tc30se3g6aSs1KmEvNix5Om8tc30se3g6aSthLHk6b30se3g6aSs1KmEvNix5Om8rc30se3g6aSsyKmEvMyx5Om8rc31dLHIubGFiZWwueD1yLngsci5sYWJlbC55PXIueX19KX1mdW5jdGlvbiBEbHQoZSx0KXtyZXR1cm4gaXIubWFwVmFsdWVzKGlyLnBpY2soZSx0KSxOdW1iZXIpfWZ1bmN0aW9uIE9sdChlKXt2YXIgdD17fTtyZXR1cm4gaXIuZm9yRWFjaChlLGZ1bmN0aW9uKHIsbil7dFtuLnRvTG93ZXJDYXNlKCldPXJ9KSx0fX0pO3ZhciBCc2U9SCgocFFuLEZzZSk9Pnt2YXIgZkg9cW4oKSxZbHI9bnMoKSxqbHI9VWMoKS5HcmFwaDtGc2UuZXhwb3J0cz17ZGVidWdPcmRlcmluZzpYbHJ9O2Z1bmN0aW9uIFhscihlKXt2YXIgdD1ZbHIuYnVpbGRMYXllck1hdHJpeChlKSxyPW5ldyBqbHIoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KS5zZXRHcmFwaCh7fSk7cmV0dXJuIGZILmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKG4pe3Iuc2V0Tm9kZShuLHtsYWJlbDpufSksci5zZXRQYXJlbnQobiwibGF5ZXIiK2Uubm9kZShuKS5yYW5rKX0pLGZILmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKG4pe3Iuc2V0RWRnZShuLnYsbi53LHt9LG4ubmFtZSl9KSxmSC5mb3JFYWNoKHQsZnVuY3Rpb24obixpKXt2YXIgbz0ibGF5ZXIiK2k7ci5zZXROb2RlKG8se3Jhbms6InNhbWUifSksZkgucmVkdWNlKG4sZnVuY3Rpb24oYSxzKXtyZXR1cm4gci5zZXRFZGdlKGEscyx7c3R5bGU6ImludmlzIn0pLHN9KX0pLHJ9fSk7dmFyIFZzZT1IKChkUW4sSHNlKT0+e0hzZS5leHBvcnRzPSIwLjguNSJ9KTt2YXIgemx0PUgoKG1RbixVc2UpPT57VXNlLmV4cG9ydHM9e2dyYXBobGliOlVjKCksbGF5b3V0OnpzZSgpLGRlYnVnOkJzZSgpLHV0aWw6e3RpbWU6bnMoKS50aW1lLG5vdGltZTpucygpLm5vdGltZX0sdmVyc2lvbjpWc2UoKX19KTt2YXIgemR0PUVlKE9kdCgpLDEpLHtfX2V4dGVuZHM6Y19yLF9fYXNzaWduOnVfcixfX3Jlc3Q6aF9yLF9fZGVjb3JhdGU6RSxfX3BhcmFtOmZfcixfX21ldGFkYXRhOncsX19hd2FpdGVyOnBfcixfX2dlbmVyYXRvcjpkX3IsX19leHBvcnRTdGFyOm1fcixfX2NyZWF0ZUJpbmRpbmc6Z19yLF9fdmFsdWVzOl9fcixfX3JlYWQ6eV9yLF9fc3ByZWFkOnZfcixfX3NwcmVhZEFycmF5czp4X3IsX19zcHJlYWRBcnJheTpiX3IsX19hd2FpdDp3X3IsX19hc3luY0dlbmVyYXRvcjpTX3IsX19hc3luY0RlbGVnYXRvcjpNX3IsX19hc3luY1ZhbHVlczpFX3IsX19tYWtlVGVtcGxhdGVPYmplY3Q6VF9yLF9faW1wb3J0U3RhcjpDX3IsX19pbXBvcnREZWZhdWx0OkFfcixfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0OlBfcixfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0OklfcixfX2NsYXNzUHJpdmF0ZUZpZWxkSW46TF9yfT16ZHQuZGVmYXVsdDtmdW5jdGlvbiB5dChlKXtyZXR1cm4gdD0+e2lmKGUpaWYodC5oYXNPd25Qcm9wZXJ0eSgiaXMiKSl7aWYoZSE9PXQuaXMpdGhyb3cgbmV3IEVycm9yKGBjdXN0b20gZWxlbWVudCB0YWcgbmFtZXMgZG8gbm90IG1hdGNoOiAoJHtlfSAhPT0gJHt0LmlzfSlgKX1lbHNlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpcyIse3ZhbHVlOmV9KTt3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQuaXMsdCl9fWZ1bmN0aW9uIEZkdChlLHQscil7ZS5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgicHJvcGVydGllcyIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5jb25zdHJ1Y3RvciwicHJvcGVydGllcyIse3ZhbHVlOnt9fSksZS5jb25zdHJ1Y3Rvci5wcm9wZXJ0aWVzW3RdPU9iamVjdC5hc3NpZ24oe30sZS5jb25zdHJ1Y3Rvci5wcm9wZXJ0aWVzW3RdLHIpfWZ1bmN0aW9uIEEoZSl7cmV0dXJuKHQscik9PntGZHQodCxyLGUpfX1mdW5jdGlvbiBCdCguLi5lKXtyZXR1cm4odCxyKT0+e3QuY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkoIm9ic2VydmVycyIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5jb25zdHJ1Y3Rvciwib2JzZXJ2ZXJzIix7dmFsdWU6W119KSx0LmNvbnN0cnVjdG9yLm9ic2VydmVycy5wdXNoKGAke3J9KCR7ZS5qb2luKCIsIil9KWApfX1mdW5jdGlvbiBSdChlLC4uLnQpe3JldHVybihyLG4saSk9PntsZXQgbz1gX19jb21wdXRlJHtufWA7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6aS5nZXR9KSxpLmdldD12b2lkIDA7bGV0IGE9W2UsLi4udF0uam9pbigiLCIpO0ZkdChyLG4se2NvbXB1dGVkOmAke299KCR7YX0pYH0pfX12YXIgUl9yPUJkdCgoZSx0KT0+ZS5xdWVyeVNlbGVjdG9yKHQpKSxOX3I9QmR0KChlLHQpPT5lLnF1ZXJ5U2VsZWN0b3JBbGwodCkpO2Z1bmN0aW9uIEJkdChlKXtyZXR1cm4gdD0+KHIsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkocixuLHtnZXQoKXtyZXR1cm4gZSh0aGlzLnNoYWRvd1Jvb3QsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fXdpbmRvdy5KU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9O3ZhciBiMWU9Lyh1cmxcKCkoW14pXSopKFwpKS9nLHcxZT0vKF5cL1teXC9dKXwoXiMpfCheW1x3LVxkXSo6KS8sUEksWnM7ZnVuY3Rpb24gbF8oZSx0KXtpZihlJiZ3MWUudGVzdChlKXx8ZT09PSIvLyIpcmV0dXJuIGU7aWYoUEk9PT12b2lkIDApe1BJPSExO3RyeXtsZXQgcj1uZXcgVVJMKCJiIiwiaHR0cDovL2EiKTtyLnBhdGhuYW1lPSJjJTIwZCIsUEk9ci5ocmVmPT09Imh0dHA6Ly9hL2MlMjBkIn1jYXRjaChyKXt9fWlmKHR8fCh0PWRvY3VtZW50LmJhc2VVUkl8fHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxQSSl0cnl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfWNhdGNoKHIpe3JldHVybiBlfXJldHVybiBac3x8KFpzPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgidGVtcCIpLFpzLmJhc2U9WnMuY3JlYXRlRWxlbWVudCgiYmFzZSIpLFpzLmhlYWQuYXBwZW5kQ2hpbGQoWnMuYmFzZSksWnMuYW5jaG9yPVpzLmNyZWF0ZUVsZW1lbnQoImEiKSxacy5ib2R5LmFwcGVuZENoaWxkKFpzLmFuY2hvcikpLFpzLmJhc2UuaHJlZj10LFpzLmFuY2hvci5ocmVmPWUsWnMuYW5jaG9yLmhyZWZ8fGV9ZnVuY3Rpb24gSE0oZSx0KXtyZXR1cm4gZS5yZXBsYWNlKGIxZSxmdW5jdGlvbihyLG4saSxvKXtyZXR1cm4gbisiJyIrbF8oaS5yZXBsYWNlKC9bIiddL2csIiIpLHQpKyInIitvfSl9ZnVuY3Rpb24gQ3goZSl7cmV0dXJuIGUuc3Vic3RyaW5nKDAsZS5sYXN0SW5kZXhPZigiLyIpKzEpfXZhciBjXz0hd2luZG93LlNoYWR5RE9NfHwhd2luZG93LlNoYWR5RE9NLmluVXNlLEhfcj1Cb29sZWFuKCF3aW5kb3cuU2hhZHlDU1N8fHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3MpLFZfcj0hd2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2ssSGR0PWNfJiYiYWRvcHRlZFN0eWxlU2hlZXRzImluIERvY3VtZW50LnByb3RvdHlwZSYmInJlcGxhY2VTeW5jImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBlJiYoKCk9Pnt0cnl7bGV0IGU9bmV3IENTU1N0eWxlU2hlZXQ7ZS5yZXBsYWNlU3luYygiIik7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHQuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLHQuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHM9W2VdLHQuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHNbMF09PT1lfWNhdGNoKGUpe3JldHVybiExfX0pKCksVmR0PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5yb290UGF0aHx8Q3goZG9jdW1lbnQuYmFzZVVSSXx8d2luZG93LmxvY2F0aW9uLmhyZWYpO3ZhciBWTT13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc2FuaXRpemVET01WYWx1ZXx8dm9pZCAwO3ZhciBVZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnNldFBhc3NpdmVUb3VjaEdlc3R1cmVzfHwhMTt2YXIgaXU9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN0cmljdFRlbXBsYXRlUG9saWN5fHwhMTt2YXIgcWR0PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5hbGxvd1RlbXBsYXRlRnJvbURvbU1vZHVsZXx8ITE7dmFyIHBwPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5sZWdhY3lPcHRpbWl6YXRpb25zfHwhMTt2YXIgSUk9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeVdhcm5pbmdzfHwhMTt2YXIgR2R0PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zeW5jSW5pdGlhbFJlbmRlcnx8ITE7dmFyIExJPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5sZWdhY3lVbmRlZmluZWR8fCExO3ZhciBXZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLm9yZGVyZWRDb21wdXRlZHx8ITE7dmFyIGhHPSEwO3ZhciBmRz13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIucmVtb3ZlTmVzdGVkVGVtcGxhdGVzfHwhMTt2YXIga0k9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmZhc3REb21JZnx8ITE7dmFyIFVNPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zdXBwcmVzc1RlbXBsYXRlTm90aWZpY2F0aW9uc3x8ITE7dmFyIHFNPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5sZWdhY3lOb09ic2VydmVkQXR0cmlidXRlc3x8ITE7dmFyIFlkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIudXNlQWRvcHRlZFN0eWxlU2hlZXRzV2l0aEJ1aWx0Q1NTfHwhMTt2YXIgUzFlPTA7ZnVuY3Rpb24gamR0KCl7fWpkdC5wcm90b3R5cGUuX19taXhpbkFwcGxpY2F0aW9ucztqZHQucHJvdG90eXBlLl9fbWl4aW5TZXQ7dmFyIE5uPWZ1bmN0aW9uKGUpe2xldCB0PWUuX19taXhpbkFwcGxpY2F0aW9uczt0fHwodD1uZXcgV2Vha01hcCxlLl9fbWl4aW5BcHBsaWNhdGlvbnM9dCk7bGV0IHI9UzFlKys7ZnVuY3Rpb24gbihpKXtsZXQgbz1pLl9fbWl4aW5TZXQ7aWYobyYmb1tyXSlyZXR1cm4gaTtsZXQgYT10LHM9YS5nZXQoaSk7aWYoIXMpe3M9ZShpKSxhLnNldChpLHMpO2xldCBsPU9iamVjdC5jcmVhdGUocy5fX21peGluU2V0fHxvfHxudWxsKTtsW3JdPSEwLHMuX19taXhpblNldD1sfXJldHVybiBzfXJldHVybiBufTt2YXIgcEc9e30sS2R0PXt9O2Z1bmN0aW9uIFhkdChlLHQpe3BHW2VdPUtkdFtlLnRvTG93ZXJDYXNlKCldPXR9ZnVuY3Rpb24gJGR0KGUpe3JldHVybiBwR1tlXXx8S2R0W2UudG9Mb3dlckNhc2UoKV19ZnVuY3Rpb24gTTFlKGUpe2UucXVlcnlTZWxlY3Rvcigic3R5bGUiKSYmY29uc29sZS53YXJuKCJkb20tbW9kdWxlICVzIGhhcyBzdHlsZSBvdXRzaWRlIHRlbXBsYXRlIixlLmlkKX12YXIgb3U9Y2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudHtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVyblsiaWQiXX1zdGF0aWMgaW1wb3J0KHQscil7aWYodCl7bGV0IG49JGR0KHQpO3JldHVybiBuJiZyP24ucXVlcnlTZWxlY3RvcihyKTpufXJldHVybiBudWxsfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LHIsbixpKXtyIT09biYmdGhpcy5yZWdpc3RlcigpfWdldCBhc3NldHBhdGgoKXtpZighdGhpcy5fX2Fzc2V0cGF0aCl7bGV0IHQ9d2luZG93LkhUTUxJbXBvcnRzJiZIVE1MSW1wb3J0cy5pbXBvcnRGb3JFbGVtZW50P0hUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQodGhpcyl8fGRvY3VtZW50OnRoaXMub3duZXJEb2N1bWVudCxyPWxfKHRoaXMuZ2V0QXR0cmlidXRlKCJhc3NldHBhdGgiKXx8IiIsdC5iYXNlVVJJKTt0aGlzLl9fYXNzZXRwYXRoPUN4KHIpfXJldHVybiB0aGlzLl9fYXNzZXRwYXRofXJlZ2lzdGVyKHQpe2lmKHQ9dHx8dGhpcy5pZCx0KXtpZihpdSYmJGR0KHQpIT09dm9pZCAwKXRocm93IFhkdCh0LG51bGwpLG5ldyBFcnJvcihgc3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1tb2R1bGUgJHt0fSByZS1yZWdpc3RlcmVkYCk7dGhpcy5pZD10LFhkdCh0LHRoaXMpLE0xZSh0aGlzKX19fTtvdS5wcm90b3R5cGUubW9kdWxlcz1wRztjdXN0b21FbGVtZW50cy5kZWZpbmUoImRvbS1tb2R1bGUiLG91KTt2YXIgRTFlPSJsaW5rW3JlbD1pbXBvcnRdW3R5cGV+PWNzc10iLFQxZT0iaW5jbHVkZSIsWmR0PSJzaGFkeS11bnNjb3BlZCI7ZnVuY3Rpb24gZEcoZSl7cmV0dXJuIG91LmltcG9ydChlKX1mdW5jdGlvbiBKZHQoZSl7bGV0IHQ9ZS5ib2R5P2UuYm9keTplLHI9SE0odC50ZXh0Q29udGVudCxlLmJhc2VVUkkpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gbi50ZXh0Q29udGVudD1yLG59ZnVuY3Rpb24gQzFlKGUpe2xldCB0PWUudHJpbSgpLnNwbGl0KC9ccysvKSxyPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXIucHVzaCguLi5BMWUodFtuXSkpO3JldHVybiByfWZ1bmN0aW9uIEExZShlKXtsZXQgdD1kRyhlKTtpZighdClyZXR1cm4gY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBzdHlsZSBkYXRhIGluIG1vZHVsZSBuYW1lZCIsZSksW107aWYodC5fc3R5bGVzPT09dm9pZCAwKXtsZXQgcj1bXTtyLnB1c2goLi4ubUcodCkpO2xldCBuPXQucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiZyLnB1c2goLi4uUkkobix0LmFzc2V0cGF0aCkpLHQuX3N0eWxlcz1yfXJldHVybiB0Ll9zdHlsZXN9ZnVuY3Rpb24gUkkoZSx0KXtpZighZS5fc3R5bGVzKXtsZXQgcj1bXSxuPWUuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgbz1uW2ldLGE9by5nZXRBdHRyaWJ1dGUoVDFlKTthJiZyLnB1c2goLi4uQzFlKGEpLmZpbHRlcihmdW5jdGlvbihzLGwsYyl7cmV0dXJuIGMuaW5kZXhPZihzKT09PWx9KSksdCYmKG8udGV4dENvbnRlbnQ9SE0oby50ZXh0Q29udGVudCx0KSksci5wdXNoKG8pfWUuX3N0eWxlcz1yfXJldHVybiBlLl9zdHlsZXN9ZnVuY3Rpb24gUWR0KGUpe2xldCB0PWRHKGUpO3JldHVybiB0P21HKHQpOltdfWZ1bmN0aW9uIG1HKGUpe2xldCB0PVtdLHI9ZS5xdWVyeVNlbGVjdG9yQWxsKEUxZSk7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspe2xldCBpPXJbbl07aWYoaS5pbXBvcnQpe2xldCBvPWkuaW1wb3J0LGE9aS5oYXNBdHRyaWJ1dGUoWmR0KTtpZihhJiYhby5fdW5zY29wZWRTdHlsZSl7bGV0IHM9SmR0KG8pO3Muc2V0QXR0cmlidXRlKFpkdCwiIiksby5fdW5zY29wZWRTdHlsZT1zfWVsc2Ugby5fc3R5bGV8fChvLl9zdHlsZT1KZHQobykpO3QucHVzaChhP28uX3Vuc2NvcGVkU3R5bGU6by5fc3R5bGUpfX1yZXR1cm4gdH1mdW5jdGlvbiB0bXQoZSl7bGV0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKy8pLHI9IiI7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspcis9UDFlKHRbbl0pO3JldHVybiByfWZ1bmN0aW9uIFAxZShlKXtsZXQgdD1kRyhlKTtpZih0JiZ0Ll9jc3NUZXh0PT09dm9pZCAwKXtsZXQgcj1MMWUodCksbj10LnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7biYmKHIrPUkxZShuLHQuYXNzZXRwYXRoKSksdC5fY3NzVGV4dD1yfHxudWxsfXJldHVybiB0fHxjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIHN0eWxlIGRhdGEgaW4gbW9kdWxlIG5hbWVkIixlKSx0JiZ0Ll9jc3NUZXh0fHwiIn1mdW5jdGlvbiBJMWUoZSx0KXtsZXQgcj0iIixuPVJJKGUsdCk7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV07by5wYXJlbnROb2RlJiZvLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobykscis9by50ZXh0Q29udGVudH1yZXR1cm4gcn1mdW5jdGlvbiBMMWUoZSl7bGV0IHQ9IiIscj1tRyhlKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl0Kz1yW25dLnRleHRDb250ZW50O3JldHVybiB0fXZhciB1ZT13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoJiZ3aW5kb3cuU2hhZHlET00ud3JhcD93aW5kb3cuU2hhZHlET00ud3JhcDp3aW5kb3cuU2hhZHlET00/ZT0+U2hhZHlET00ucGF0Y2goZSk6ZT0+ZTtmdW5jdGlvbiBOSShlKXtyZXR1cm4gZS5pbmRleE9mKCIuIik+PTB9ZnVuY3Rpb24gYXUoZSl7bGV0IHQ9ZS5pbmRleE9mKCIuIik7cmV0dXJuIHQ9PT0tMT9lOmUuc2xpY2UoMCx0KX1mdW5jdGlvbiBnRyhlLHQpe3JldHVybiBlLmluZGV4T2YodCsiLiIpPT09MH1mdW5jdGlvbiBBeChlLHQpe3JldHVybiB0LmluZGV4T2YoZSsiLiIpPT09MH1mdW5jdGlvbiBkcChlLHQscil7cmV0dXJuIHQrci5zbGljZShlLmxlbmd0aCl9ZnVuY3Rpb24gREkoZSx0KXtyZXR1cm4gZT09PXR8fGdHKGUsdCl8fEF4KGUsdCl9ZnVuY3Rpb24gUHgoZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7bGV0IHQ9W107Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldCBuPWVbcl0udG9TdHJpbmcoKS5zcGxpdCgiLiIpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXQucHVzaChuW2ldKX1yZXR1cm4gdC5qb2luKCIuIil9ZWxzZSByZXR1cm4gZX1mdW5jdGlvbiBlbXQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/UHgoZSkuc3BsaXQoIi4iKTplLnRvU3RyaW5nKCkuc3BsaXQoIi4iKX1mdW5jdGlvbiBObyhlLHQscil7bGV0IG49ZSxpPWVtdCh0KTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKyl7aWYoIW4pcmV0dXJuO2xldCBhPWlbb107bj1uW2FdfXJldHVybiByJiYoci5wYXRoPWkuam9pbigiLiIpKSxufWZ1bmN0aW9uIF9HKGUsdCxyKXtsZXQgbj1lLGk9ZW10KHQpLG89aVtpLmxlbmd0aC0xXTtpZihpLmxlbmd0aD4xKXtmb3IobGV0IGE9MDthPGkubGVuZ3RoLTE7YSsrKXtsZXQgcz1pW2FdO2lmKG49bltzXSwhbilyZXR1cm59bltvXT1yfWVsc2Ugblt0XT1yO3JldHVybiBpLmpvaW4oIi4iKX12YXIgT0k9e30sazFlPS8tW2Etel0vZyxSMWU9LyhbQS1aXSkvZztmdW5jdGlvbiB3bShlKXtyZXR1cm4gT0lbZV18fChPSVtlXT1lLmluZGV4T2YoIi0iKTwwP2U6ZS5yZXBsYWNlKGsxZSx0PT50WzFdLnRvVXBwZXJDYXNlKCkpKX1mdW5jdGlvbiBJeChlKXtyZXR1cm4gT0lbZV18fChPSVtlXT1lLnJlcGxhY2UoUjFlLCItJDEiKS50b0xvd2VyQ2FzZSgpKX12YXIgTjFlPTAscm10PTAsTHg9W10sRDFlPTAseUc9ITEsbm10PWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtuZXcgd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIoTzFlKS5vYnNlcnZlKG5tdCx7Y2hhcmFjdGVyRGF0YTohMH0pO2Z1bmN0aW9uIE8xZSgpe3lHPSExO2xldCBlPUx4Lmxlbmd0aDtmb3IobGV0IHQ9MDt0PGU7dCsrKXtsZXQgcj1MeFt0XTtpZihyKXRyeXtyKCl9Y2F0Y2gobil7c2V0VGltZW91dCgoKT0+e3Rocm93IG59KX19THguc3BsaWNlKDAsZSkscm10Kz1lfXZhciBtbz17YWZ0ZXIoZSl7cmV0dXJue3J1bih0KXtyZXR1cm4gd2luZG93LnNldFRpbWVvdXQodCxlKX0sY2FuY2VsKHQpe3dpbmRvdy5jbGVhclRpbWVvdXQodCl9fX0scnVuKGUsdCl7cmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGUsdCl9LGNhbmNlbChlKXt3aW5kb3cuY2xlYXJUaW1lb3V0KGUpfX07dmFyIE5pPXtydW4oZSl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9LGNhbmNlbChlKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoZSl9fTt2YXIga3g9e3J1bihlKXtyZXR1cm4gd2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2s/d2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2soZSk6d2luZG93LnNldFRpbWVvdXQoZSwxNil9LGNhbmNlbChlKXt3aW5kb3cuY2FuY2VsSWRsZUNhbGxiYWNrP3dpbmRvdy5jYW5jZWxJZGxlQ2FsbGJhY2soZSk6d2luZG93LmNsZWFyVGltZW91dChlKX19O3ZhciBjaT17cnVuKGUpe3JldHVybiB5R3x8KHlHPSEwLG5tdC50ZXh0Q29udGVudD1EMWUrKyksTHgucHVzaChlKSxOMWUrK30sY2FuY2VsKGUpe2xldCB0PWUtcm10O2lmKHQ+PTApe2lmKCFMeFt0XSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYXN5bmMgaGFuZGxlOiAiK2UpO0x4W3RdPW51bGx9fX07dmFyIHoxZT1jaSx6ST1ObihlPT57Y2xhc3MgdCBleHRlbmRzIGV7c3RhdGljIGNyZWF0ZVByb3BlcnRpZXMobil7bGV0IGk9dGhpcy5wcm90b3R5cGU7Zm9yKGxldCBvIGluIG4pbyBpbiBpfHxpLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKG8pfXN0YXRpYyBhdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkobil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKX1zdGF0aWMgdHlwZUZvclByb3BlcnR5KG4pe31fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihuLGkpe3RoaXMuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAobiksdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFIYXNBY2Nlc3NvciIsdGhpcykpfHwodGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcj1PYmplY3QuYXNzaWduKHt9LHRoaXMuX19kYXRhSGFzQWNjZXNzb3IpKSx0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW25dfHwodGhpcy5fX2RhdGFIYXNBY2Nlc3NvcltuXT0hMCx0aGlzLl9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKG4saSkpfV9hZGRQcm9wZXJ0eVRvQXR0cmlidXRlTWFwKG4pe3RoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19kYXRhQXR0cmlidXRlcyIsdGhpcykpfHwodGhpcy5fX2RhdGFBdHRyaWJ1dGVzPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fX2RhdGFBdHRyaWJ1dGVzKSk7bGV0IGk9dGhpcy5fX2RhdGFBdHRyaWJ1dGVzW25dO3JldHVybiBpfHwoaT10aGlzLmNvbnN0cnVjdG9yLmF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShuKSx0aGlzLl9fZGF0YUF0dHJpYnV0ZXNbaV09biksaX1fZGVmaW5lUHJvcGVydHlBY2Nlc3NvcihuLGkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLG4se2dldCgpe3JldHVybiB0aGlzLl9fZGF0YVtuXX0sc2V0Omk/ZnVuY3Rpb24oKXt9OmZ1bmN0aW9uKG8pe3RoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShuLG8sITApJiZ0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfX0pfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fZGF0YUVuYWJsZWQ9ITEsdGhpcy5fX2RhdGFSZWFkeT0hMSx0aGlzLl9fZGF0YUludmFsaWQ9ITEsdGhpcy5fX2RhdGE9e30sdGhpcy5fX2RhdGFQZW5kaW5nPW51bGwsdGhpcy5fX2RhdGFPbGQ9bnVsbCx0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHM9bnVsbCx0aGlzLl9fZGF0YUNvdW50ZXI9MCx0aGlzLl9fc2VyaWFsaXppbmc9ITEsdGhpcy5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKX1yZWFkeSgpe3RoaXMuX19kYXRhUmVhZHk9ITAsdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7Zm9yKGxldCBuIGluIHRoaXMuX19kYXRhSGFzQWNjZXNzb3IpdGhpcy5oYXNPd25Qcm9wZXJ0eShuKSYmKHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz10aGlzLl9fZGF0YUluc3RhbmNlUHJvcHN8fHt9LHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc1tuXT10aGlzW25dLGRlbGV0ZSB0aGlzW25dKX1faW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyhuKXtPYmplY3QuYXNzaWduKHRoaXMsbil9X3NldFByb3BlcnR5KG4saSl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4saSkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2dldFByb3BlcnR5KG4pe3JldHVybiB0aGlzLl9fZGF0YVtuXX1fc2V0UGVuZGluZ1Byb3BlcnR5KG4saSxvKXtsZXQgYT10aGlzLl9fZGF0YVtuXSxzPXRoaXMuX3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxhKTtyZXR1cm4gcyYmKHRoaXMuX19kYXRhUGVuZGluZ3x8KHRoaXMuX19kYXRhUGVuZGluZz17fSx0aGlzLl9fZGF0YU9sZD17fSksdGhpcy5fX2RhdGFPbGQmJiEobiBpbiB0aGlzLl9fZGF0YU9sZCkmJih0aGlzLl9fZGF0YU9sZFtuXT1hKSx0aGlzLl9fZGF0YVtuXT1pLHRoaXMuX19kYXRhUGVuZGluZ1tuXT1pKSxzfV9pc1Byb3BlcnR5UGVuZGluZyhuKXtyZXR1cm4hISh0aGlzLl9fZGF0YVBlbmRpbmcmJnRoaXMuX19kYXRhUGVuZGluZy5oYXNPd25Qcm9wZXJ0eShuKSl9X2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl7IXRoaXMuX19kYXRhSW52YWxpZCYmdGhpcy5fX2RhdGFSZWFkeSYmKHRoaXMuX19kYXRhSW52YWxpZD0hMCx6MWUucnVuKCgpPT57dGhpcy5fX2RhdGFJbnZhbGlkJiYodGhpcy5fX2RhdGFJbnZhbGlkPSExLHRoaXMuX2ZsdXNoUHJvcGVydGllcygpKX0pKX1fZW5hYmxlUHJvcGVydGllcygpe3RoaXMuX19kYXRhRW5hYmxlZHx8KHRoaXMuX19kYXRhRW5hYmxlZD0hMCx0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHMmJih0aGlzLl9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcyksdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzPW51bGwpLHRoaXMucmVhZHkoKSl9X2ZsdXNoUHJvcGVydGllcygpe3RoaXMuX19kYXRhQ291bnRlcisrO2xldCBuPXRoaXMuX19kYXRhLGk9dGhpcy5fX2RhdGFQZW5kaW5nLG89dGhpcy5fX2RhdGFPbGQ7dGhpcy5fc2hvdWxkUHJvcGVydGllc0NoYW5nZShuLGksbykmJih0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX3Byb3BlcnRpZXNDaGFuZ2VkKG4saSxvKSksdGhpcy5fX2RhdGFDb3VudGVyLS19X3Nob3VsZFByb3BlcnRpZXNDaGFuZ2UobixpLG8pe3JldHVybiBCb29sZWFuKGkpfV9wcm9wZXJ0aWVzQ2hhbmdlZChuLGksbyl7fV9zaG91bGRQcm9wZXJ0eUNoYW5nZShuLGksbyl7cmV0dXJuIG8hPT1pJiYobz09PW98fGk9PT1pKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobixpLG8sYSl7aSE9PW8mJnRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHkobixvKSxzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2smJnN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuLGksbyxhKX1fYXR0cmlidXRlVG9Qcm9wZXJ0eShuLGksbyl7aWYoIXRoaXMuX19zZXJpYWxpemluZyl7bGV0IGE9dGhpcy5fX2RhdGFBdHRyaWJ1dGVzLHM9YSYmYVtuXXx8bjt0aGlzW3NdPXRoaXMuX2Rlc2VyaWFsaXplVmFsdWUoaSxvfHx0aGlzLmNvbnN0cnVjdG9yLnR5cGVGb3JQcm9wZXJ0eShzKSl9fV9wcm9wZXJ0eVRvQXR0cmlidXRlKG4saSxvKXt0aGlzLl9fc2VyaWFsaXppbmc9ITAsbz1hcmd1bWVudHMubGVuZ3RoPDM/dGhpc1tuXTpvLHRoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKHRoaXMsbyxpfHx0aGlzLmNvbnN0cnVjdG9yLmF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShuKSksdGhpcy5fX3NlcmlhbGl6aW5nPSExfV92YWx1ZVRvTm9kZUF0dHJpYnV0ZShuLGksbyl7bGV0IGE9dGhpcy5fc2VyaWFsaXplVmFsdWUoaSk7KG89PT0iY2xhc3MifHxvPT09Im5hbWUifHxvPT09InNsb3QiKSYmKG49dWUobikpLGE9PT12b2lkIDA/bi5yZW1vdmVBdHRyaWJ1dGUobyk6bi5zZXRBdHRyaWJ1dGUobyxhKX1fc2VyaWFsaXplVmFsdWUobil7c3dpdGNoKHR5cGVvZiBuKXtjYXNlImJvb2xlYW4iOnJldHVybiBuPyIiOnZvaWQgMDtkZWZhdWx0OnJldHVybiBuIT1udWxsP24udG9TdHJpbmcoKTp2b2lkIDB9fV9kZXNlcmlhbGl6ZVZhbHVlKG4saSl7c3dpdGNoKGkpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gbiE9PW51bGw7Y2FzZSBOdW1iZXI6cmV0dXJuIE51bWJlcihuKTtkZWZhdWx0OnJldHVybiBufX19cmV0dXJuIHR9KTt2YXIgaW10PXt9LEZJPUhUTUxFbGVtZW50LnByb3RvdHlwZTtmb3IoO0ZJOyl7bGV0IGU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoRkkpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWltdFtlW3RdXT0hMDtGST1PYmplY3QuZ2V0UHJvdG90eXBlT2YoRkkpfWZ1bmN0aW9uIEYxZShlLHQpe2lmKCFpbXRbdF0pe2xldCByPWVbdF07ciE9PXZvaWQgMCYmKGUuX19kYXRhP2UuX3NldFBlbmRpbmdQcm9wZXJ0eSh0LHIpOihlLl9fZGF0YVByb3RvP2UuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19kYXRhUHJvdG8iLGUpKXx8KGUuX19kYXRhUHJvdG89T2JqZWN0LmNyZWF0ZShlLl9fZGF0YVByb3RvKSk6ZS5fX2RhdGFQcm90bz17fSxlLl9fZGF0YVByb3RvW3RdPXIpKX19dmFyIEJJPU5uKGU9PntsZXQgdD16SShlKTtjbGFzcyByIGV4dGVuZHMgdHtzdGF0aWMgY3JlYXRlUHJvcGVydGllc0ZvckF0dHJpYnV0ZXMoKXtsZXQgaT10aGlzLm9ic2VydmVkQXR0cmlidXRlcztmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKyl0aGlzLnByb3RvdHlwZS5fY3JlYXRlUHJvcGVydHlBY2Nlc3Nvcih3bShpW29dKSl9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShpKXtyZXR1cm4gSXgoaSl9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFQcm90byYmKHRoaXMuX2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXModGhpcy5fX2RhdGFQcm90byksdGhpcy5fX2RhdGFQcm90bz1udWxsKSxzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyhpKXtmb3IobGV0IG8gaW4gaSl0aGlzLl9zZXRQcm9wZXJ0eShvLGlbb10pfV9lbnN1cmVBdHRyaWJ1dGUoaSxvKXtsZXQgYT10aGlzO2EuaGFzQXR0cmlidXRlKGkpfHx0aGlzLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZShhLG8saSl9X3NlcmlhbGl6ZVZhbHVlKGkpe3N3aXRjaCh0eXBlb2YgaSl7Y2FzZSJvYmplY3QiOmlmKGkgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBpLnRvU3RyaW5nKCk7aWYoaSl0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGkpfWNhdGNoKG8pe3JldHVybiIifWRlZmF1bHQ6cmV0dXJuIHN1cGVyLl9zZXJpYWxpemVWYWx1ZShpKX19X2Rlc2VyaWFsaXplVmFsdWUoaSxvKXtsZXQgYTtzd2l0Y2gobyl7Y2FzZSBPYmplY3Q6dHJ5e2E9SlNPTi5wYXJzZShpKX1jYXRjaChzKXthPWl9YnJlYWs7Y2FzZSBBcnJheTp0cnl7YT1KU09OLnBhcnNlKGkpfWNhdGNoKHMpe2E9bnVsbCxjb25zb2xlLndhcm4oYFBvbHltZXI6OkF0dHJpYnV0ZXM6IGNvdWxkbid0IGRlY29kZSBBcnJheSBhcyBKU09OOiAke2l9YCl9YnJlYWs7Y2FzZSBEYXRlOmE9aXNOYU4oaSk/U3RyaW5nKGkpOk51bWJlcihpKSxhPW5ldyBEYXRlKGEpO2JyZWFrO2RlZmF1bHQ6YT1zdXBlci5fZGVzZXJpYWxpemVWYWx1ZShpLG8pO2JyZWFrfXJldHVybiBhfV9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKGksbyl7RjFlKHRoaXMsaSksc3VwZXIuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IoaSxvKX1faGFzQWNjZXNzb3IoaSl7cmV0dXJuIHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbaV19X2lzUHJvcGVydHlQZW5kaW5nKGkpe3JldHVybiBCb29sZWFuKHRoaXMuX19kYXRhUGVuZGluZyYmaSBpbiB0aGlzLl9fZGF0YVBlbmRpbmcpfX1yZXR1cm4gcn0pO3ZhciBCMWU9eyJkb20taWYiOiEwLCJkb20tcmVwZWF0IjohMH0sb210PSExLGFtdD0hMTtmdW5jdGlvbiBIMWUoKXtpZighb210KXtvbXQ9ITA7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtlLnBsYWNlaG9sZGVyPSJhIixhbXQ9ZS5wbGFjZWhvbGRlcj09PWUudGV4dENvbnRlbnR9cmV0dXJuIGFtdH1mdW5jdGlvbiBWMWUoZSl7SDFlKCkmJmUubG9jYWxOYW1lPT09InRleHRhcmVhIiYmZS5wbGFjZWhvbGRlciYmZS5wbGFjZWhvbGRlcj09PWUudGV4dENvbnRlbnQmJihlLnRleHRDb250ZW50PW51bGwpfWZ1bmN0aW9uIFUxZShlKXtsZXQgdD1lLmdldEF0dHJpYnV0ZSgiaXMiKTtpZih0JiZCMWVbdF0pe2xldCByPWU7Zm9yKHIucmVtb3ZlQXR0cmlidXRlKCJpcyIpLGU9ci5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCksci5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLHIpLGUuYXBwZW5kQ2hpbGQocik7ci5hdHRyaWJ1dGVzLmxlbmd0aDspZS5zZXRBdHRyaWJ1dGUoci5hdHRyaWJ1dGVzWzBdLm5hbWUsci5hdHRyaWJ1dGVzWzBdLnZhbHVlKSxyLnJlbW92ZUF0dHJpYnV0ZShyLmF0dHJpYnV0ZXNbMF0ubmFtZSl9cmV0dXJuIGV9ZnVuY3Rpb24gc210KGUsdCl7bGV0IHI9dC5wYXJlbnRJbmZvJiZzbXQoZSx0LnBhcmVudEluZm8pO2lmKHIpe2ZvcihsZXQgbj1yLmZpcnN0Q2hpbGQsaT0wO247bj1uLm5leHRTaWJsaW5nKWlmKHQucGFyZW50SW5kZXg9PT1pKyspcmV0dXJuIG59ZWxzZSByZXR1cm4gZX1mdW5jdGlvbiBxMWUoZSx0LHIsbil7bi5pZCYmKHRbbi5pZF09cil9ZnVuY3Rpb24gRzFlKGUsdCxyKXtpZihyLmV2ZW50cyYmci5ldmVudHMubGVuZ3RoKWZvcihsZXQgbj0wLGk9ci5ldmVudHMsbztuPGkubGVuZ3RoJiYobz1pW25dKTtuKyspZS5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZSh0LG8ubmFtZSxvLnZhbHVlLGUpfWZ1bmN0aW9uIFcxZShlLHQscixuKXtyLnRlbXBsYXRlSW5mbyYmKHQuX3RlbXBsYXRlSW5mbz1yLnRlbXBsYXRlSW5mbyx0Ll9wYXJlbnRUZW1wbGF0ZUluZm89bil9ZnVuY3Rpb24gWTFlKGUsdCxyKXtyZXR1cm4gZT1lLl9tZXRob2RIb3N0fHxlLGZ1bmN0aW9uKGkpe2Vbcl0/ZVtyXShpLGkuZGV0YWlsKTpjb25zb2xlLndhcm4oImxpc3RlbmVyIG1ldGhvZCBgIityKyJgIG5vdCBkZWZpbmVkIil9fXZhciBsbXQ9Tm4oZT0+e2NsYXNzIHQgZXh0ZW5kcyBle3N0YXRpYyBfcGFyc2VUZW1wbGF0ZShuLGkpe2lmKCFuLl90ZW1wbGF0ZUluZm8pe2xldCBvPW4uX3RlbXBsYXRlSW5mbz17fTtvLm5vZGVJbmZvTGlzdD1bXSxvLm5lc3RlZFRlbXBsYXRlPUJvb2xlYW4oaSksby5zdHJpcFdoaXRlU3BhY2U9aSYmaS5zdHJpcFdoaXRlU3BhY2V8fG4uaGFzQXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiksdGhpcy5fcGFyc2VUZW1wbGF0ZUNvbnRlbnQobixvLHtwYXJlbnQ6bnVsbH0pfXJldHVybiBuLl90ZW1wbGF0ZUluZm99c3RhdGljIF9wYXJzZVRlbXBsYXRlQ29udGVudChuLGksbyl7cmV0dXJuIHRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlKG4uY29udGVudCxpLG8pfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGUobixpLG8pe2xldCBhPSExLHM9bjtyZXR1cm4gcy5sb2NhbE5hbWU9PSJ0ZW1wbGF0ZSImJiFzLmhhc0F0dHJpYnV0ZSgicHJlc2VydmUtY29udGVudCIpP2E9dGhpcy5fcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKHMsaSxvKXx8YTpzLmxvY2FsTmFtZT09PSJzbG90IiYmKGkuaGFzSW5zZXJ0aW9uUG9pbnQ9ITApLFYxZShzKSxzLmZpcnN0Q2hpbGQmJnRoaXMuX3BhcnNlVGVtcGxhdGVDaGlsZE5vZGVzKHMsaSxvKSxzLmhhc0F0dHJpYnV0ZXMmJnMuaGFzQXR0cmlidXRlcygpJiYoYT10aGlzLl9wYXJzZVRlbXBsYXRlTm9kZUF0dHJpYnV0ZXMocyxpLG8pfHxhKSxhfHxvLm5vdGVkfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMobixpLG8pe2lmKCEobi5sb2NhbE5hbWU9PT0ic2NyaXB0Inx8bi5sb2NhbE5hbWU9PT0ic3R5bGUiKSlmb3IobGV0IGE9bi5maXJzdENoaWxkLHM9MCxsO2E7YT1sKXtpZihhLmxvY2FsTmFtZT09InRlbXBsYXRlIiYmKGE9VTFlKGEpKSxsPWEubmV4dFNpYmxpbmcsYS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKXtsZXQgdT1sO2Zvcig7dSYmdS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFOylhLnRleHRDb250ZW50Kz11LnRleHRDb250ZW50LGw9dS5uZXh0U2libGluZyxuLnJlbW92ZUNoaWxkKHUpLHU9bDtpZihpLnN0cmlwV2hpdGVTcGFjZSYmIWEudGV4dENvbnRlbnQudHJpbSgpKXtuLnJlbW92ZUNoaWxkKGEpO2NvbnRpbnVlfX1sZXQgYz17cGFyZW50SW5kZXg6cyxwYXJlbnRJbmZvOm99O3RoaXMuX3BhcnNlVGVtcGxhdGVOb2RlKGEsaSxjKSYmKGMuaW5mb0luZGV4PWkubm9kZUluZm9MaXN0LnB1c2goYyktMSksYS5wYXJlbnROb2RlJiZzKyt9fXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKG4saSxvKXtsZXQgYT1uLHM9dGhpcy5fcGFyc2VUZW1wbGF0ZShhLGkpO3JldHVybihzLmNvbnRlbnQ9YS5jb250ZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmRDaGlsZChhLmNvbnRlbnQpLG8udGVtcGxhdGVJbmZvPXMsITB9c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZUF0dHJpYnV0ZXMobixpLG8pe2xldCBhPSExLHM9QXJyYXkuZnJvbShuLmF0dHJpYnV0ZXMpO2ZvcihsZXQgbD1zLmxlbmd0aC0xLGM7Yz1zW2xdO2wtLSlhPXRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKG4saSxvLGMubmFtZSxjLnZhbHVlKXx8YTtyZXR1cm4gYX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKG4saSxvLGEscyl7cmV0dXJuIGEuc2xpY2UoMCwzKT09PSJvbi0iPyhuLnJlbW92ZUF0dHJpYnV0ZShhKSxvLmV2ZW50cz1vLmV2ZW50c3x8W10sby5ldmVudHMucHVzaCh7bmFtZTphLnNsaWNlKDMpLHZhbHVlOnN9KSwhMCk6YT09PSJpZCI/KG8uaWQ9cywhMCk6ITF9c3RhdGljIF9jb250ZW50Rm9yVGVtcGxhdGUobil7bGV0IGk9bi5fdGVtcGxhdGVJbmZvO3JldHVybiBpJiZpLmNvbnRlbnR8fG4uY29udGVudH1fc3RhbXBUZW1wbGF0ZShuLGkpe24mJiFuLmNvbnRlbnQmJndpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50JiZIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlJiZIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlKG4pLGk9aXx8dGhpcy5jb25zdHJ1Y3Rvci5fcGFyc2VUZW1wbGF0ZShuKTtsZXQgbz1pLm5vZGVJbmZvTGlzdCxhPWkuY29udGVudHx8bi5jb250ZW50LHM9ZG9jdW1lbnQuaW1wb3J0Tm9kZShhLCEwKTtzLl9fbm9JbnNlcnRpb25Qb2ludD0haS5oYXNJbnNlcnRpb25Qb2ludDtsZXQgbD1zLm5vZGVMaXN0PW5ldyBBcnJheShvLmxlbmd0aCk7cy4kPXt9O2ZvcihsZXQgYz0wLHU9by5sZW5ndGgsaDtjPHUmJihoPW9bY10pO2MrKyl7bGV0IGY9bFtjXT1zbXQocyxoKTtxMWUodGhpcyxzLiQsZixoKSxXMWUodGhpcyxmLGgsaSksRzFlKHRoaXMsZixoKX1yZXR1cm4gcz1zLHN9X2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUobixpLG8sYSl7YT1hfHxuO2xldCBzPVkxZShhLGksbyk7cmV0dXJuIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUobixpLHMpLHN9X2FkZEV2ZW50TGlzdGVuZXJUb05vZGUobixpLG8pe24uYWRkRXZlbnRMaXN0ZW5lcihpLG8pfV9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUobixpLG8pe24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihpLG8pfX1yZXR1cm4gdH0pO3ZhciBqTT0wLFhNPVtdLHpyPXtDT01QVVRFOiJfX2NvbXB1dGVFZmZlY3RzIixSRUZMRUNUOiJfX3JlZmxlY3RFZmZlY3RzIixOT1RJRlk6Il9fbm90aWZ5RWZmZWN0cyIsUFJPUEFHQVRFOiJfX3Byb3BhZ2F0ZUVmZmVjdHMiLE9CU0VSVkU6Il9fb2JzZXJ2ZUVmZmVjdHMiLFJFQURfT05MWToiX19yZWFkT25seSJ9LGdtdD0iX19jb21wdXRlSW5mbyIsajFlPS9bQS1aXS87ZnVuY3Rpb24gdkcoZSx0LHIpe2xldCBuPWVbdF07aWYoIW4pbj1lW3RdPXt9O2Vsc2UgaWYoIWUuaGFzT3duUHJvcGVydHkodCkmJihuPWVbdF09T2JqZWN0LmNyZWF0ZShlW3RdKSxyKSlmb3IobGV0IGkgaW4gbil7bGV0IG89bltpXSxhPW5baV09QXJyYXkoby5sZW5ndGgpO2ZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKWFbc109b1tzXX1yZXR1cm4gbn1mdW5jdGlvbiBZTShlLHQscixuLGksbyl7aWYodCl7bGV0IGE9ITEscz1qTSsrO2ZvcihsZXQgbCBpbiByKXtsZXQgYz1pP2F1KGwpOmwsdT10W2NdO2lmKHUpZm9yKGxldCBoPTAsZj11Lmxlbmd0aCxwO2g8ZiYmKHA9dVtoXSk7aCsrKSghcC5pbmZvfHxwLmluZm8ubGFzdFJ1biE9PXMpJiYoIWl8fFNHKGwscC50cmlnZ2VyKSkmJihwLmluZm8mJihwLmluZm8ubGFzdFJ1bj1zKSxwLmZuKGUsbCxyLG4scC5pbmZvLGksbyksYT0hMCl9cmV0dXJuIGF9cmV0dXJuITF9ZnVuY3Rpb24gWDFlKGUsdCxyLG4saSxvLGEscyl7bGV0IGw9ITEsYz1hP2F1KG4pOm4sdT10W2NdO2lmKHUpZm9yKGxldCBoPTAsZj11Lmxlbmd0aCxwO2g8ZiYmKHA9dVtoXSk7aCsrKSghcC5pbmZvfHxwLmluZm8ubGFzdFJ1biE9PXIpJiYoIWF8fFNHKG4scC50cmlnZ2VyKSkmJihwLmluZm8mJihwLmluZm8ubGFzdFJ1bj1yKSxwLmZuKGUsbixpLG8scC5pbmZvLGEscyksbD0hMCk7cmV0dXJuIGx9ZnVuY3Rpb24gU0coZSx0KXtpZih0KXtsZXQgcj10Lm5hbWU7cmV0dXJuIHI9PWV8fCEhKHQuc3RydWN0dXJlZCYmZ0cocixlKSl8fCEhKHQud2lsZGNhcmQmJkF4KHIsZSkpfWVsc2UgcmV0dXJuITB9ZnVuY3Rpb24gY210KGUsdCxyLG4saSl7bGV0IG89dHlwZW9mIGkubWV0aG9kPT0ic3RyaW5nIj9lW2kubWV0aG9kXTppLm1ldGhvZCxhPWkucHJvcGVydHk7bz9vLmNhbGwoZSxlLl9fZGF0YVthXSxuW2FdKTppLmR5bmFtaWNGbnx8Y29uc29sZS53YXJuKCJvYnNlcnZlciBtZXRob2QgYCIraS5tZXRob2QrImAgbm90IGRlZmluZWQiKX1mdW5jdGlvbiAkMWUoZSx0LHIsbixpKXtsZXQgbz1lW3pyLk5PVElGWV0sYSxzPWpNKys7Zm9yKGxldCBjIGluIHQpdFtjXSYmKG8mJlgxZShlLG8scyxjLHIsbixpKXx8aSYmSzFlKGUsYyxyKSkmJihhPSEwKTtsZXQgbDthJiYobD1lLl9fZGF0YUhvc3QpJiZsLl9pbnZhbGlkYXRlUHJvcGVydGllcyYmbC5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1mdW5jdGlvbiBLMWUoZSx0LHIpe2xldCBuPWF1KHQpO2lmKG4hPT10KXtsZXQgaT1JeChuKSsiLWNoYW5nZWQiO3JldHVybiBfbXQoZSxpLHJbdF0sdCksITB9cmV0dXJuITF9ZnVuY3Rpb24gX210KGUsdCxyLG4pe2xldCBpPXt2YWx1ZTpyLHF1ZXVlUHJvcGVydHk6ITB9O24mJihpLnBhdGg9biksdWUoZSkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQodCx7ZGV0YWlsOml9KSl9ZnVuY3Rpb24gWjFlKGUsdCxyLG4saSxvKXtsZXQgcz0obz9hdSh0KTp0KSE9dD90Om51bGwsbD1zP05vKGUscyk6ZS5fX2RhdGFbdF07cyYmbD09PXZvaWQgMCYmKGw9clt0XSksX210KGUsaS5ldmVudE5hbWUsbCxzKX1mdW5jdGlvbiBKMWUoZSx0LHIsbixpKXtsZXQgbyxhPWUuZGV0YWlsLHM9YSYmYS5wYXRoO3M/KG49ZHAocixuLHMpLG89YSYmYS52YWx1ZSk6bz1lLmN1cnJlbnRUYXJnZXRbcl0sbz1pPyFvOm8sKCF0W3pyLlJFQURfT05MWV18fCF0W3pyLlJFQURfT05MWV1bbl0pJiZ0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgobixvLCEwLEJvb2xlYW4ocykpJiYoIWF8fCFhLnF1ZXVlUHJvcGVydHkpJiZ0Ll9pbnZhbGlkYXRlUHJvcGVydGllcygpfWZ1bmN0aW9uIFExZShlLHQscixuLGkpe2xldCBvPWUuX19kYXRhW3RdO1ZNJiYobz1WTShvLGkuYXR0ck5hbWUsImF0dHJpYnV0ZSIsZSkpLGUuX3Byb3BlcnR5VG9BdHRyaWJ1dGUodCxpLmF0dHJOYW1lLG8pfWZ1bmN0aW9uIHR2ZShlLHQscixuKXtsZXQgaT1lW3pyLkNPTVBVVEVdO2lmKGkpaWYoV2R0KXtqTSsrO2xldCBvPXJ2ZShlKSxhPVtdO2ZvcihsZXQgbCBpbiB0KXVtdChsLGksYSxvLG4pO2xldCBzO2Zvcig7cz1hLnNoaWZ0KCk7KXltdChlLCIiLHQscixzKSYmdW10KHMubWV0aG9kSW5mbyxpLGEsbyxuKTtPYmplY3QuYXNzaWduKHIsZS5fX2RhdGFPbGQpLE9iamVjdC5hc3NpZ24odCxlLl9fZGF0YVBlbmRpbmcpLGUuX19kYXRhUGVuZGluZz1udWxsfWVsc2V7bGV0IG89dDtmb3IoO1lNKGUsaSxvLHIsbik7KU9iamVjdC5hc3NpZ24ocixlLl9fZGF0YU9sZCksT2JqZWN0LmFzc2lnbih0LGUuX19kYXRhUGVuZGluZyksbz1lLl9fZGF0YVBlbmRpbmcsZS5fX2RhdGFQZW5kaW5nPW51bGx9fXZhciBldmU9KGUsdCxyKT0+e2xldCBuPTAsaT10Lmxlbmd0aC0xLG89LTE7Zm9yKDtuPD1pOyl7bGV0IGE9bitpPj4xLHM9ci5nZXQodFthXS5tZXRob2RJbmZvKS1yLmdldChlLm1ldGhvZEluZm8pO2lmKHM8MCluPWErMTtlbHNlIGlmKHM+MClpPWEtMTtlbHNle289YTticmVha319bzwwJiYobz1pKzEpLHQuc3BsaWNlKG8sMCxlKX0sdW10PShlLHQscixuLGkpPT57bGV0IG89aT9hdShlKTplLGE9dFtvXTtpZihhKWZvcihsZXQgcz0wO3M8YS5sZW5ndGg7cysrKXtsZXQgbD1hW3NdO2wuaW5mby5sYXN0UnVuIT09ak0mJighaXx8U0coZSxsLnRyaWdnZXIpKSYmKGwuaW5mby5sYXN0UnVuPWpNLGV2ZShsLmluZm8scixuKSl9fTtmdW5jdGlvbiBydmUoZSl7bGV0IHQ9ZS5jb25zdHJ1Y3Rvci5fX29yZGVyZWRDb21wdXRlZERlcHM7aWYoIXQpe3Q9bmV3IE1hcDtsZXQgcj1lW3pyLkNPTVBVVEVdLHtjb3VudHM6bixyZWFkeTppLHRvdGFsOm99PW52ZShlKSxhO2Zvcig7YT1pLnNoaWZ0KCk7KXt0LnNldChhLHQuc2l6ZSk7bGV0IHM9clthXTtzJiZzLmZvckVhY2gobD0+e2xldCBjPWwuaW5mby5tZXRob2RJbmZvOy0tbywtLW5bY109PT0wJiZpLnB1c2goYyl9KX1vIT09MCYmY29uc29sZS53YXJuKGBDb21wdXRlZCBncmFwaCBmb3IgJHtlLmxvY2FsTmFtZX0gaW5jb21wbGV0ZTsgY2lyY3VsYXI/YCksZS5jb25zdHJ1Y3Rvci5fX29yZGVyZWRDb21wdXRlZERlcHM9dH1yZXR1cm4gdH1mdW5jdGlvbiBudmUoZSl7bGV0IHQ9ZVtnbXRdLHI9e30sbj1lW3pyLkNPTVBVVEVdLGk9W10sbz0wO2ZvcihsZXQgYSBpbiB0KXtsZXQgcz10W2FdO28rPXJbYV09cy5hcmdzLmZpbHRlcihsPT4hbC5saXRlcmFsKS5sZW5ndGgrKHMuZHluYW1pY0ZuPzE6MCl9Zm9yKGxldCBhIGluIG4pdFthXXx8aS5wdXNoKGEpO3JldHVybntjb3VudHM6cixyZWFkeTppLHRvdGFsOm99fWZ1bmN0aW9uIHltdChlLHQscixuLGkpe2xldCBvPXdHKGUsdCxyLG4saSk7aWYobz09PVhNKXJldHVybiExO2xldCBhPWkubWV0aG9kSW5mbztyZXR1cm4gZS5fX2RhdGFIYXNBY2Nlc3NvciYmZS5fX2RhdGFIYXNBY2Nlc3NvclthXT9lLl9zZXRQZW5kaW5nUHJvcGVydHkoYSxvLCEwKTooZVthXT1vLCExKX1mdW5jdGlvbiBpdmUoZSx0LHIpe2xldCBuPWUuX19kYXRhTGlua2VkUGF0aHM7aWYobil7bGV0IGk7Zm9yKGxldCBvIGluIG4pe2xldCBhPW5bb107QXgobyx0KT8oaT1kcChvLGEsdCksZS5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGksciwhMCwhMCkpOkF4KGEsdCkmJihpPWRwKGEsbyx0KSxlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxyLCEwLCEwKSl9fX1mdW5jdGlvbiB4RyhlLHQscixuLGksbyxhKXtyLmJpbmRpbmdzPXIuYmluZGluZ3N8fFtdO2xldCBzPXtraW5kOm4sdGFyZ2V0OmkscGFydHM6byxsaXRlcmFsOmEsaXNDb21wb3VuZDpvLmxlbmd0aCE9PTF9O2lmKHIuYmluZGluZ3MucHVzaChzKSxjdmUocykpe2xldHtldmVudDpjLG5lZ2F0ZTp1fT1zLnBhcnRzWzBdO3MubGlzdGVuZXJFdmVudD1jfHxJeChpKSsiLWNoYW5nZWQiLHMubGlzdGVuZXJOZWdhdGU9dX1sZXQgbD10Lm5vZGVJbmZvTGlzdC5sZW5ndGg7Zm9yKGxldCBjPTA7YzxzLnBhcnRzLmxlbmd0aDtjKyspe2xldCB1PXMucGFydHNbY107dS5jb21wb3VuZEluZGV4PWMsb3ZlKGUsdCxzLHUsbCl9fWZ1bmN0aW9uIG92ZShlLHQscixuLGkpe2lmKCFuLmxpdGVyYWwpaWYoci5raW5kPT09ImF0dHJpYnV0ZSImJnIudGFyZ2V0WzBdPT09Ii0iKWNvbnNvbGUud2FybigiQ2Fubm90IHNldCBhdHRyaWJ1dGUgIityLnRhcmdldCsnIGJlY2F1c2UgIi0iIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBzdGFydGluZyBjaGFyYWN0ZXInKTtlbHNle2xldCBvPW4uZGVwZW5kZW5jaWVzLGE9e2luZGV4OmksYmluZGluZzpyLHBhcnQ6bixldmFsdWF0b3I6ZX07Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspe2xldCBsPW9bc107dHlwZW9mIGw9PSJzdHJpbmciJiYobD14bXQobCksbC53aWxkY2FyZD0hMCksZS5fYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdCh0LGwucm9vdFByb3BlcnR5LHtmbjphdmUsaW5mbzphLHRyaWdnZXI6bH0pfX19ZnVuY3Rpb24gYXZlKGUsdCxyLG4saSxvLGEpe2xldCBzPWFbaS5pbmRleF0sbD1pLmJpbmRpbmcsYz1pLnBhcnQ7aWYobyYmYy5zb3VyY2UmJnQubGVuZ3RoPmMuc291cmNlLmxlbmd0aCYmbC5raW5kPT0icHJvcGVydHkiJiYhbC5pc0NvbXBvdW5kJiZzLl9faXNQcm9wZXJ0eUVmZmVjdHNDbGllbnQmJnMuX19kYXRhSGFzQWNjZXNzb3ImJnMuX19kYXRhSGFzQWNjZXNzb3JbbC50YXJnZXRdKXtsZXQgdT1yW3RdO3Q9ZHAoYy5zb3VyY2UsbC50YXJnZXQsdCkscy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHQsdSwhMSwhMCkmJmUuX2VucXVldWVDbGllbnQocyl9ZWxzZXtsZXQgdT1pLmV2YWx1YXRvci5fZXZhbHVhdGVCaW5kaW5nKGUsYyx0LHIsbixvKTt1IT09WE0mJnN2ZShlLHMsbCxjLHUpfX1mdW5jdGlvbiBzdmUoZSx0LHIsbixpKXtpZihpPWx2ZSh0LGkscixuKSxWTSYmKGk9Vk0oaSxyLnRhcmdldCxyLmtpbmQsdCkpLHIua2luZD09ImF0dHJpYnV0ZSIpZS5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodCxpLHIudGFyZ2V0KTtlbHNle2xldCBvPXIudGFyZ2V0O3QuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudCYmdC5fX2RhdGFIYXNBY2Nlc3NvciYmdC5fX2RhdGFIYXNBY2Nlc3NvcltvXT8oIXRbenIuUkVBRF9PTkxZXXx8IXRbenIuUkVBRF9PTkxZXVtvXSkmJnQuX3NldFBlbmRpbmdQcm9wZXJ0eShvLGkpJiZlLl9lbnF1ZXVlQ2xpZW50KHQpOmUuX3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQsbyxpKX19ZnVuY3Rpb24gbHZlKGUsdCxyLG4pe2lmKHIuaXNDb21wb3VuZCl7bGV0IGk9ZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2Vbci50YXJnZXRdO2lbbi5jb21wb3VuZEluZGV4XT10LHQ9aS5qb2luKCIiKX1yZXR1cm4gci5raW5kIT09ImF0dHJpYnV0ZSImJihyLnRhcmdldD09PSJ0ZXh0Q29udGVudCJ8fHIudGFyZ2V0PT09InZhbHVlIiYmKGUubG9jYWxOYW1lPT09ImlucHV0Inx8ZS5sb2NhbE5hbWU9PT0idGV4dGFyZWEiKSkmJih0PXQ9PW51bGw/IiI6dCksdH1mdW5jdGlvbiBjdmUoZSl7cmV0dXJuIEJvb2xlYW4oZS50YXJnZXQpJiZlLmtpbmQhPSJhdHRyaWJ1dGUiJiZlLmtpbmQhPSJ0ZXh0IiYmIWUuaXNDb21wb3VuZCYmZS5wYXJ0c1swXS5tb2RlPT09InsifWZ1bmN0aW9uIHV2ZShlLHQpe2xldHtub2RlTGlzdDpyLG5vZGVJbmZvTGlzdDpufT10O2lmKG4ubGVuZ3RoKWZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgbz1uW2ldLGE9cltpXSxzPW8uYmluZGluZ3M7aWYocylmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrKyl7bGV0IGM9c1tsXTtodmUoYSxjKSxmdmUoYSxlLGMpfWEuX19kYXRhSG9zdD1lfX1mdW5jdGlvbiBodmUoZSx0KXtpZih0LmlzQ29tcG91bmQpe2xldCByPWUuX19kYXRhQ29tcG91bmRTdG9yYWdlfHwoZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2U9e30pLG49dC5wYXJ0cyxpPW5ldyBBcnJheShuLmxlbmd0aCk7Zm9yKGxldCBhPTA7YTxuLmxlbmd0aDthKyspaVthXT1uW2FdLmxpdGVyYWw7bGV0IG89dC50YXJnZXQ7cltvXT1pLHQubGl0ZXJhbCYmdC5raW5kPT0icHJvcGVydHkiJiYobz09PSJjbGFzc05hbWUiJiYoZT11ZShlKSksZVtvXT10LmxpdGVyYWwpfX1mdW5jdGlvbiBmdmUoZSx0LHIpe2lmKHIubGlzdGVuZXJFdmVudCl7bGV0IG49ci5wYXJ0c1swXTtlLmFkZEV2ZW50TGlzdGVuZXIoci5saXN0ZW5lckV2ZW50LGZ1bmN0aW9uKGkpe0oxZShpLHQsci50YXJnZXQsbi5zb3VyY2Usbi5uZWdhdGUpfSl9fWZ1bmN0aW9uIGhtdChlLHQscixuLGksbyl7bz10LnN0YXRpY3x8byYmKHR5cGVvZiBvIT0ib2JqZWN0Inx8b1t0Lm1ldGhvZE5hbWVdKTtsZXQgYT17bWV0aG9kTmFtZTp0Lm1ldGhvZE5hbWUsYXJnczp0LmFyZ3MsbWV0aG9kSW5mbzppLGR5bmFtaWNGbjpvfTtmb3IobGV0IHM9MCxsO3M8dC5hcmdzLmxlbmd0aCYmKGw9dC5hcmdzW3NdKTtzKyspbC5saXRlcmFsfHxlLl9hZGRQcm9wZXJ0eUVmZmVjdChsLnJvb3RQcm9wZXJ0eSxyLHtmbjpuLGluZm86YSx0cmlnZ2VyOmx9KTtyZXR1cm4gbyYmZS5fYWRkUHJvcGVydHlFZmZlY3QodC5tZXRob2ROYW1lLHIse2ZuOm4saW5mbzphfSksYX1mdW5jdGlvbiB3RyhlLHQscixuLGkpe2xldCBvPWUuX21ldGhvZEhvc3R8fGUsYT1vW2kubWV0aG9kTmFtZV07aWYoYSl7bGV0IHM9ZS5fbWFyc2hhbEFyZ3MoaS5hcmdzLHQscik7cmV0dXJuIHM9PT1YTT9YTTphLmFwcGx5KG8scyl9ZWxzZSBpLmR5bmFtaWNGbnx8Y29uc29sZS53YXJuKCJtZXRob2QgYCIraS5tZXRob2ROYW1lKyJgIG5vdCBkZWZpbmVkIil9dmFyIHB2ZT1bXSx2bXQ9Iig/OlthLXpBLVpfJF1bXFx3LjokXFwtKl0qKSIsZHZlPSIoPzpbLStdP1swLTldKlxcLj9bMC05XSsoPzpbZUVdWy0rXT9bMC05XSspPykiLG12ZT0iKD86Jyg/OlteJ1xcXFxdfFxcXFwuKSonKSIsZ3ZlPScoPzoiKD86W14iXFxcXF18XFxcXC4pKiIpJyxfdmU9Iig/OiIrbXZlKyJ8IitndmUrIikiLGZtdD0iKD86KCIrdm10KyJ8IitkdmUrInwiK192ZSsiKVxccyopIix5dmU9Iig/OiIrZm10KyIoPzosXFxzKiIrZm10KyIpKikiLHZ2ZT0iKD86XFwoXFxzKig/OiIreXZlKyI/KVxcKVxccyopIix4dmU9IigiK3ZtdCsiXFxzKiIrdnZlKyI/KSIsYnZlPSIoXFxbXFxbfHt7KVxccyoiLHd2ZT0iKD86XV18fX0pIixTdmU9Iig/OighKVxccyopPyIsTXZlPWJ2ZStTdmUreHZlK3d2ZSxwbXQ9bmV3IFJlZ0V4cChNdmUsImciKTtmdW5jdGlvbiBkbXQoZSl7bGV0IHQ9IiI7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspdCs9ZVtyXS5saXRlcmFsfHwiIjtyZXR1cm4gdH1mdW5jdGlvbiBiRyhlKXtsZXQgdD1lLm1hdGNoKC8oW15cc10rPylcKChbXHNcU10qKVwpLyk7aWYodCl7bGV0IG49e21ldGhvZE5hbWU6dFsxXSxzdGF0aWM6ITAsYXJnczpwdmV9O2lmKHRbMl0udHJpbSgpKXtsZXQgaT10WzJdLnJlcGxhY2UoL1xcLC9nLCImY29tbWE7Iikuc3BsaXQoIiwiKTtyZXR1cm4gRXZlKGksbil9ZWxzZSByZXR1cm4gbn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBFdmUoZSx0KXtyZXR1cm4gdC5hcmdzPWUubWFwKGZ1bmN0aW9uKHIpe2xldCBuPXhtdChyKTtyZXR1cm4gbi5saXRlcmFsfHwodC5zdGF0aWM9ITEpLG59LHRoaXMpLHR9ZnVuY3Rpb24geG10KGUpe2xldCB0PWUudHJpbSgpLnJlcGxhY2UoLyZjb21tYTsvZywiLCIpLnJlcGxhY2UoL1xcKC4pL2csIiQxIikscj17bmFtZTp0LHZhbHVlOiIiLGxpdGVyYWw6ITF9LG49dFswXTtzd2l0Y2gobj09PSItIiYmKG49dFsxXSksbj49IjAiJiZuPD0iOSImJihuPSIjIiksbil7Y2FzZSInIjpjYXNlJyInOnIudmFsdWU9dC5zbGljZSgxLC0xKSxyLmxpdGVyYWw9ITA7YnJlYWs7Y2FzZSIjIjpyLnZhbHVlPU51bWJlcih0KSxyLmxpdGVyYWw9ITA7YnJlYWt9cmV0dXJuIHIubGl0ZXJhbHx8KHIucm9vdFByb3BlcnR5PWF1KHQpLHIuc3RydWN0dXJlZD1OSSh0KSxyLnN0cnVjdHVyZWQmJihyLndpbGRjYXJkPXQuc2xpY2UoLTIpPT0iLioiLHIud2lsZGNhcmQmJihyLm5hbWU9dC5zbGljZSgwLC0yKSkpKSxyfWZ1bmN0aW9uIG1tdChlLHQscil7bGV0IG49Tm8oZSxyKTtyZXR1cm4gbj09PXZvaWQgMCYmKG49dFtyXSksbn1mdW5jdGlvbiBibXQoZSx0LHIsbil7bGV0IGk9e2luZGV4U3BsaWNlczpufTtMSSYmIWUuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkJiYodC5zcGxpY2VzPWkpLGUubm90aWZ5UGF0aChyKyIuc3BsaWNlcyIsaSksZS5ub3RpZnlQYXRoKHIrIi5sZW5ndGgiLHQubGVuZ3RoKSxMSSYmIWUuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkJiYoaS5pbmRleFNwbGljZXM9W10pfWZ1bmN0aW9uIEdNKGUsdCxyLG4saSxvKXtibXQoZSx0LHIsW3tpbmRleDpuLGFkZGVkQ291bnQ6aSxyZW1vdmVkOm8sb2JqZWN0OnQsdHlwZToic3BsaWNlIn1dKX1mdW5jdGlvbiBUdmUoZSl7cmV0dXJuIGVbMF0udG9VcHBlckNhc2UoKStlLnN1YnN0cmluZygxKX12YXIgdV89Tm4oZT0+e2xldCB0PWxtdChCSShlKSk7Y2xhc3MgciBleHRlbmRzIHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudD0hMCx0aGlzLl9fZGF0YUNsaWVudHNSZWFkeSx0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzLHRoaXMuX19kYXRhVG9Ob3RpZnksdGhpcy5fX2RhdGFMaW5rZWRQYXRocyx0aGlzLl9fZGF0YUhhc1BhdGhzLHRoaXMuX19kYXRhQ29tcG91bmRTdG9yYWdlLHRoaXMuX19kYXRhSG9zdCx0aGlzLl9fZGF0YVRlbXAsdGhpcy5fX2RhdGFDbGllbnRzSW5pdGlhbGl6ZWQsdGhpcy5fX2RhdGEsdGhpcy5fX2RhdGFQZW5kaW5nLHRoaXMuX19kYXRhT2xkLHRoaXMuX19jb21wdXRlRWZmZWN0cyx0aGlzLl9fY29tcHV0ZUluZm8sdGhpcy5fX3JlZmxlY3RFZmZlY3RzLHRoaXMuX19ub3RpZnlFZmZlY3RzLHRoaXMuX19wcm9wYWdhdGVFZmZlY3RzLHRoaXMuX19vYnNlcnZlRWZmZWN0cyx0aGlzLl9fcmVhZE9ubHksdGhpcy5fX3RlbXBsYXRlSW5mbyx0aGlzLl9vdmVycmlkZUxlZ2FjeVVuZGVmaW5lZH1nZXQgUFJPUEVSVFlfRUZGRUNUX1RZUEVTKCl7cmV0dXJuIHpyfV9pbml0aWFsaXplUHJvcGVydGllcygpe3N1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX3JlZ2lzdGVySG9zdCgpLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5PSExLHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM9bnVsbCx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fX2RhdGFMaW5rZWRQYXRocz1udWxsLHRoaXMuX19kYXRhSGFzUGF0aHM9ITEsdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2U9dGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2V8fG51bGwsdGhpcy5fX2RhdGFIb3N0PXRoaXMuX19kYXRhSG9zdHx8bnVsbCx0aGlzLl9fZGF0YVRlbXA9e30sdGhpcy5fX2RhdGFDbGllbnRzSW5pdGlhbGl6ZWQ9ITF9X3JlZ2lzdGVySG9zdCgpe2lmKFdNLmxlbmd0aCl7bGV0IGk9V01bV00ubGVuZ3RoLTFdO2kuX2VucXVldWVDbGllbnQodGhpcyksdGhpcy5fX2RhdGFIb3N0PWl9fV9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKGkpe3RoaXMuX19kYXRhPU9iamVjdC5jcmVhdGUoaSksdGhpcy5fX2RhdGFQZW5kaW5nPU9iamVjdC5jcmVhdGUoaSksdGhpcy5fX2RhdGFPbGQ9e319X2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXMoaSl7bGV0IG89dGhpc1t6ci5SRUFEX09OTFldO2ZvcihsZXQgYSBpbiBpKSghb3x8IW9bYV0pJiYodGhpcy5fX2RhdGFQZW5kaW5nPXRoaXMuX19kYXRhUGVuZGluZ3x8e30sdGhpcy5fX2RhdGFPbGQ9dGhpcy5fX2RhdGFPbGR8fHt9LHRoaXMuX19kYXRhW2FdPXRoaXMuX19kYXRhUGVuZGluZ1thXT1pW2FdKX1fYWRkUHJvcGVydHlFZmZlY3QoaSxvLGEpe3RoaXMuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3IoaSxvPT16ci5SRUFEX09OTFkpO2xldCBzPXZHKHRoaXMsbywhMClbaV07c3x8KHM9dGhpc1tvXVtpXT1bXSkscy5wdXNoKGEpfV9yZW1vdmVQcm9wZXJ0eUVmZmVjdChpLG8sYSl7bGV0IHM9dkcodGhpcyxvLCEwKVtpXSxsPXMuaW5kZXhPZihhKTtsPj0wJiZzLnNwbGljZShsLDEpfV9oYXNQcm9wZXJ0eUVmZmVjdChpLG8pe2xldCBhPXRoaXNbb107cmV0dXJuIEJvb2xlYW4oYSYmYVtpXSl9X2hhc1JlYWRPbmx5RWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLlJFQURfT05MWSl9X2hhc05vdGlmeUVmZmVjdChpKXtyZXR1cm4gdGhpcy5faGFzUHJvcGVydHlFZmZlY3QoaSx6ci5OT1RJRlkpfV9oYXNSZWZsZWN0RWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLlJFRkxFQ1QpfV9oYXNDb21wdXRlZEVmZmVjdChpKXtyZXR1cm4gdGhpcy5faGFzUHJvcGVydHlFZmZlY3QoaSx6ci5DT01QVVRFKX1fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGksbyxhLHMpe2lmKHN8fGF1KEFycmF5LmlzQXJyYXkoaSk/aVswXTppKSE9PWkpe2lmKCFzKXtsZXQgbD1Obyh0aGlzLGkpO2lmKGk9X0codGhpcyxpLG8pLCFpfHwhc3VwZXIuX3Nob3VsZFByb3BlcnR5Q2hhbmdlKGksbyxsKSlyZXR1cm4hMX1pZih0aGlzLl9fZGF0YUhhc1BhdGhzPSEwLHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShpLG8sYSkpcmV0dXJuIGl2ZSh0aGlzLGksbyksITB9ZWxzZXtpZih0aGlzLl9fZGF0YUhhc0FjY2Vzc29yJiZ0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW2ldKXJldHVybiB0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkoaSxvLGEpO3RoaXNbaV09b31yZXR1cm4hMX1fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUoaSxvLGEpeyhhIT09aVtvXXx8dHlwZW9mIGE9PSJvYmplY3QiKSYmKG89PT0iY2xhc3NOYW1lIiYmKGk9dWUoaSkpLGlbb109YSl9X3NldFBlbmRpbmdQcm9wZXJ0eShpLG8sYSl7bGV0IHM9dGhpcy5fX2RhdGFIYXNQYXRocyYmTkkoaSksbD1zP3RoaXMuX19kYXRhVGVtcDp0aGlzLl9fZGF0YTtyZXR1cm4gdGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UoaSxvLGxbaV0pPyh0aGlzLl9fZGF0YVBlbmRpbmd8fCh0aGlzLl9fZGF0YVBlbmRpbmc9e30sdGhpcy5fX2RhdGFPbGQ9e30pLGkgaW4gdGhpcy5fX2RhdGFPbGR8fCh0aGlzLl9fZGF0YU9sZFtpXT10aGlzLl9fZGF0YVtpXSkscz90aGlzLl9fZGF0YVRlbXBbaV09bzp0aGlzLl9fZGF0YVtpXT1vLHRoaXMuX19kYXRhUGVuZGluZ1tpXT1vLChzfHx0aGlzW3pyLk5PVElGWV0mJnRoaXNbenIuTk9USUZZXVtpXSkmJih0aGlzLl9fZGF0YVRvTm90aWZ5PXRoaXMuX19kYXRhVG9Ob3RpZnl8fHt9LHRoaXMuX19kYXRhVG9Ob3RpZnlbaV09YSksITApOiExfV9zZXRQcm9wZXJ0eShpLG8pe3RoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShpLG8sITApJiZ0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfV9pbnZhbGlkYXRlUHJvcGVydGllcygpe3RoaXMuX19kYXRhUmVhZHkmJnRoaXMuX2ZsdXNoUHJvcGVydGllcygpfV9lbnF1ZXVlQ2xpZW50KGkpe3RoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM9dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50c3x8W10saSE9PXRoaXMmJnRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMucHVzaChpKX1fZmx1c2hDbGllbnRzKCl7dGhpcy5fX2RhdGFDbGllbnRzUmVhZHk/dGhpcy5fX2VuYWJsZU9yRmx1c2hDbGllbnRzKCk6KHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5PSEwLHRoaXMuX3JlYWR5Q2xpZW50cygpLHRoaXMuX19kYXRhUmVhZHk9ITApfV9fZW5hYmxlT3JGbHVzaENsaWVudHMoKXtsZXQgaT10aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzO2lmKGkpe3RoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM9bnVsbDtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKyl7bGV0IGE9aVtvXTthLl9fZGF0YUVuYWJsZWQ/YS5fX2RhdGFQZW5kaW5nJiZhLl9mbHVzaFByb3BlcnRpZXMoKTphLl9lbmFibGVQcm9wZXJ0aWVzKCl9fX1fcmVhZHlDbGllbnRzKCl7dGhpcy5fX2VuYWJsZU9yRmx1c2hDbGllbnRzKCl9c2V0UHJvcGVydGllcyhpLG8pe2ZvcihsZXQgYSBpbiBpKShvfHwhdGhpc1t6ci5SRUFEX09OTFldfHwhdGhpc1t6ci5SRUFEX09OTFldW2FdKSYmdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGEsaVthXSwhMCk7dGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1yZWFkeSgpe3RoaXMuX2ZsdXNoUHJvcGVydGllcygpLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5fHx0aGlzLl9mbHVzaENsaWVudHMoKSx0aGlzLl9fZGF0YVBlbmRpbmcmJnRoaXMuX2ZsdXNoUHJvcGVydGllcygpfV9wcm9wZXJ0aWVzQ2hhbmdlZChpLG8sYSl7bGV0IHM9dGhpcy5fX2RhdGFIYXNQYXRoczt0aGlzLl9fZGF0YUhhc1BhdGhzPSExO2xldCBsO3R2ZSh0aGlzLG8sYSxzKSxsPXRoaXMuX19kYXRhVG9Ob3RpZnksdGhpcy5fX2RhdGFUb05vdGlmeT1udWxsLHRoaXMuX3Byb3BhZ2F0ZVByb3BlcnR5Q2hhbmdlcyhvLGEscyksdGhpcy5fZmx1c2hDbGllbnRzKCksWU0odGhpcyx0aGlzW3pyLlJFRkxFQ1RdLG8sYSxzKSxZTSh0aGlzLHRoaXNbenIuT0JTRVJWRV0sbyxhLHMpLGwmJiQxZSh0aGlzLGwsbyxhLHMpLHRoaXMuX19kYXRhQ291bnRlcj09MSYmKHRoaXMuX19kYXRhVGVtcD17fSl9X3Byb3BhZ2F0ZVByb3BlcnR5Q2hhbmdlcyhpLG8sYSl7dGhpc1t6ci5QUk9QQUdBVEVdJiZZTSh0aGlzLHRoaXNbenIuUFJPUEFHQVRFXSxpLG8sYSksdGhpcy5fX3RlbXBsYXRlSW5mbyYmdGhpcy5fcnVuRWZmZWN0c0ZvclRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZUluZm8saSxvLGEpfV9ydW5FZmZlY3RzRm9yVGVtcGxhdGUoaSxvLGEscyl7bGV0IGw9KGMsdSk9PntZTSh0aGlzLGkucHJvcGVydHlFZmZlY3RzLGMsYSx1LGkubm9kZUxpc3QpO2ZvcihsZXQgaD1pLmZpcnN0Q2hpbGQ7aDtoPWgubmV4dFNpYmxpbmcpdGhpcy5fcnVuRWZmZWN0c0ZvclRlbXBsYXRlKGgsYyxhLHUpfTtpLnJ1bkVmZmVjdHM/aS5ydW5FZmZlY3RzKGwsbyxzKTpsKG8scyl9bGlua1BhdGhzKGksbyl7aT1QeChpKSxvPVB4KG8pLHRoaXMuX19kYXRhTGlua2VkUGF0aHM9dGhpcy5fX2RhdGFMaW5rZWRQYXRoc3x8e30sdGhpcy5fX2RhdGFMaW5rZWRQYXRoc1tpXT1vfXVubGlua1BhdGhzKGkpe2k9UHgoaSksdGhpcy5fX2RhdGFMaW5rZWRQYXRocyYmZGVsZXRlIHRoaXMuX19kYXRhTGlua2VkUGF0aHNbaV19bm90aWZ5U3BsaWNlcyhpLG8pe2xldCBhPXtwYXRoOiIifSxzPU5vKHRoaXMsaSxhKTtibXQodGhpcyxzLGEucGF0aCxvKX1nZXQoaSxvKXtyZXR1cm4gTm8ob3x8dGhpcyxpKX1zZXQoaSxvLGEpe2E/X0coYSxpLG8pOighdGhpc1t6ci5SRUFEX09OTFldfHwhdGhpc1t6ci5SRUFEX09OTFldW2ldKSYmdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGksbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9cHVzaChpLC4uLm8pe2xldCBhPXtwYXRoOiIifSxzPU5vKHRoaXMsaSxhKSxsPXMubGVuZ3RoLGM9cy5wdXNoKC4uLm8pO3JldHVybiBvLmxlbmd0aCYmR00odGhpcyxzLGEucGF0aCxsLG8ubGVuZ3RoLFtdKSxjfXBvcChpKXtsZXQgbz17cGF0aDoiIn0sYT1Obyh0aGlzLGksbykscz1Cb29sZWFuKGEubGVuZ3RoKSxsPWEucG9wKCk7cmV0dXJuIHMmJkdNKHRoaXMsYSxvLnBhdGgsYS5sZW5ndGgsMCxbbF0pLGx9c3BsaWNlKGksbyxhLC4uLnMpe2xldCBsPXtwYXRoOiIifSxjPU5vKHRoaXMsaSxsKTtvPDA/bz1jLmxlbmd0aC1NYXRoLmZsb29yKC1vKTpvJiYobz1NYXRoLmZsb29yKG8pKTtsZXQgdTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTI/dT1jLnNwbGljZShvKTp1PWMuc3BsaWNlKG8sYSwuLi5zKSwocy5sZW5ndGh8fHUubGVuZ3RoKSYmR00odGhpcyxjLGwucGF0aCxvLHMubGVuZ3RoLHUpLHV9c2hpZnQoaSl7bGV0IG89e3BhdGg6IiJ9LGE9Tm8odGhpcyxpLG8pLHM9Qm9vbGVhbihhLmxlbmd0aCksbD1hLnNoaWZ0KCk7cmV0dXJuIHMmJkdNKHRoaXMsYSxvLnBhdGgsMCwwLFtsXSksbH11bnNoaWZ0KGksLi4ubyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpLGw9cy51bnNoaWZ0KC4uLm8pO3JldHVybiBvLmxlbmd0aCYmR00odGhpcyxzLGEucGF0aCwwLG8ubGVuZ3RoLFtdKSxsfW5vdGlmeVBhdGgoaSxvKXtsZXQgYTtpZihhcmd1bWVudHMubGVuZ3RoPT0xKXtsZXQgcz17cGF0aDoiIn07bz1Obyh0aGlzLGkscyksYT1zLnBhdGh9ZWxzZSBBcnJheS5pc0FycmF5KGkpP2E9UHgoaSk6YT1pO3RoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChhLG8sITAsITApJiZ0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfV9jcmVhdGVSZWFkT25seVByb3BlcnR5KGksbyl7dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5SRUFEX09OTFkpLG8mJih0aGlzWyJfc2V0IitUdmUoaSldPWZ1bmN0aW9uKGEpe3RoaXMuX3NldFByb3BlcnR5KGksYSl9KX1fY3JlYXRlUHJvcGVydHlPYnNlcnZlcihpLG8sYSl7bGV0IHM9e3Byb3BlcnR5OmksbWV0aG9kOm8sZHluYW1pY0ZuOkJvb2xlYW4oYSl9O3RoaXMuX2FkZFByb3BlcnR5RWZmZWN0KGksenIuT0JTRVJWRSx7Zm46Y210LGluZm86cyx0cmlnZ2VyOntuYW1lOml9fSksYSYmdGhpcy5fYWRkUHJvcGVydHlFZmZlY3Qobyx6ci5PQlNFUlZFLHtmbjpjbXQsaW5mbzpzLHRyaWdnZXI6e25hbWU6b319KX1fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIoaSxvKXtsZXQgYT1iRyhpKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBvYnNlcnZlciBleHByZXNzaW9uICciK2krIiciKTtobXQodGhpcyxhLHpyLk9CU0VSVkUsd0csbnVsbCxvKX1fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoaSl7dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5OT1RJRlkse2ZuOloxZSxpbmZvOntldmVudE5hbWU6SXgoaSkrIi1jaGFuZ2VkIixwcm9wZXJ0eTppfX0pfV9jcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShpKXtsZXQgbz10aGlzLmNvbnN0cnVjdG9yLmF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShpKTtvWzBdPT09Ii0iP2NvbnNvbGUud2FybigiUHJvcGVydHkgIitpKyIgY2Fubm90IGJlIHJlZmxlY3RlZCB0byBhdHRyaWJ1dGUgIitvKycgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgc3RhcnRpbmcgYXR0cmlidXRlIG5hbWUuIFVzZSBhIGxvd2VyY2FzZSBmaXJzdCBsZXR0ZXIgZm9yIHRoZSBwcm9wZXJ0eSBpbnN0ZWFkLicpOnRoaXMuX2FkZFByb3BlcnR5RWZmZWN0KGksenIuUkVGTEVDVCx7Zm46UTFlLGluZm86e2F0dHJOYW1lOm99fSl9X2NyZWF0ZUNvbXB1dGVkUHJvcGVydHkoaSxvLGEpe2xldCBzPWJHKG8pO2lmKCFzKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIGNvbXB1dGVkIGV4cHJlc3Npb24gJyIrbysiJyIpO2xldCBsPWhtdCh0aGlzLHMsenIuQ09NUFVURSx5bXQsaSxhKTt2Ryh0aGlzLGdtdClbaV09bH1fbWFyc2hhbEFyZ3MoaSxvLGEpe2xldCBzPXRoaXMuX19kYXRhLGw9W107Zm9yKGxldCBjPTAsdT1pLmxlbmd0aDtjPHU7YysrKXtsZXR7bmFtZTpoLHN0cnVjdHVyZWQ6Zix3aWxkY2FyZDpwLHZhbHVlOmQsbGl0ZXJhbDpnfT1pW2NdO2lmKCFnKWlmKHApe2xldCBfPUF4KGgsbykseT1tbXQocyxhLF8/bzpoKTtkPXtwYXRoOl8/bzpoLHZhbHVlOnksYmFzZTpfP05vKHMsaCk6eX19ZWxzZSBkPWY/bW10KHMsYSxoKTpzW2hdO2lmKExJJiYhdGhpcy5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJmQ9PT12b2lkIDAmJmkubGVuZ3RoPjEpcmV0dXJuIFhNO2xbY109ZH1yZXR1cm4gbH1zdGF0aWMgYWRkUHJvcGVydHlFZmZlY3QoaSxvLGEpe3RoaXMucHJvdG90eXBlLl9hZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl9c3RhdGljIGNyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoaSxvLGEpe3RoaXMucHJvdG90eXBlLl9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKGksbyxhKX1zdGF0aWMgY3JlYXRlTWV0aG9kT2JzZXJ2ZXIoaSxvKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIoaSxvKX1zdGF0aWMgY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoaSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5KGkpfXN0YXRpYyBjcmVhdGVSZWFkT25seVByb3BlcnR5KGksbyl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKX1zdGF0aWMgY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkoaSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KGkpfXN0YXRpYyBjcmVhdGVDb21wdXRlZFByb3BlcnR5KGksbyxhKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShpLG8sYSl9c3RhdGljIGJpbmRUZW1wbGF0ZShpKXtyZXR1cm4gdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZShpKX1fYmluZFRlbXBsYXRlKGksbyl7bGV0IGE9dGhpcy5jb25zdHJ1Y3Rvci5fcGFyc2VUZW1wbGF0ZShpKSxzPXRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz09YTtpZighcylmb3IobGV0IGwgaW4gYS5wcm9wZXJ0eUVmZmVjdHMpdGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihsKTtpZihvKWlmKGE9T2JqZWN0LmNyZWF0ZShhKSxhLndhc1ByZUJvdW5kPXMsIXRoaXMuX190ZW1wbGF0ZUluZm8pdGhpcy5fX3RlbXBsYXRlSW5mbz1hO2Vsc2V7bGV0IGw9aS5fcGFyZW50VGVtcGxhdGVJbmZvfHx0aGlzLl9fdGVtcGxhdGVJbmZvLGM9bC5sYXN0Q2hpbGQ7YS5wYXJlbnQ9bCxsLmxhc3RDaGlsZD1hLGEucHJldmlvdXNTaWJsaW5nPWMsYz9jLm5leHRTaWJsaW5nPWE6bC5maXJzdENoaWxkPWF9ZWxzZSB0aGlzLl9fcHJlQm91bmRUZW1wbGF0ZUluZm89YTtyZXR1cm4gYX1zdGF0aWMgX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QoaSxvLGEpe2xldCBzPWkuaG9zdFByb3BzPWkuaG9zdFByb3BzfHx7fTtzW29dPSEwO2xldCBsPWkucHJvcGVydHlFZmZlY3RzPWkucHJvcGVydHlFZmZlY3RzfHx7fTsobFtvXT1sW29dfHxbXSkucHVzaChhKX1fc3RhbXBUZW1wbGF0ZShpLG8pe289b3x8dGhpcy5fYmluZFRlbXBsYXRlKGksITApLFdNLnB1c2godGhpcyk7bGV0IGE9c3VwZXIuX3N0YW1wVGVtcGxhdGUoaSxvKTtpZihXTS5wb3AoKSxvLm5vZGVMaXN0PWEubm9kZUxpc3QsIW8ud2FzUHJlQm91bmQpe2xldCBzPW8uY2hpbGROb2Rlcz1bXTtmb3IobGV0IGw9YS5maXJzdENoaWxkO2w7bD1sLm5leHRTaWJsaW5nKXMucHVzaChsKX1yZXR1cm4gYS50ZW1wbGF0ZUluZm89byx1dmUodGhpcyxvKSx0aGlzLl9fZGF0YUNsaWVudHNSZWFkeSYmKHRoaXMuX3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShvLHRoaXMuX19kYXRhLG51bGwsITEpLHRoaXMuX2ZsdXNoQ2xpZW50cygpKSxhfV9yZW1vdmVCb3VuZERvbShpKXtsZXQgbz1pLnRlbXBsYXRlSW5mbyx7cHJldmlvdXNTaWJsaW5nOmEsbmV4dFNpYmxpbmc6cyxwYXJlbnQ6bH09bzthP2EubmV4dFNpYmxpbmc9czpsJiYobC5maXJzdENoaWxkPXMpLHM/cy5wcmV2aW91c1NpYmxpbmc9YTpsJiYobC5sYXN0Q2hpbGQ9YSksby5uZXh0U2libGluZz1vLnByZXZpb3VzU2libGluZz1udWxsO2xldCBjPW8uY2hpbGROb2Rlcztmb3IobGV0IHU9MDt1PGMubGVuZ3RoO3UrKyl7bGV0IGg9Y1t1XTt1ZSh1ZShoKS5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZChoKX19c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZShpLG8sYSl7bGV0IHM9dC5fcGFyc2VUZW1wbGF0ZU5vZGUuY2FsbCh0aGlzLGksbyxhKTtpZihpLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe2xldCBsPXRoaXMuX3BhcnNlQmluZGluZ3MoaS50ZXh0Q29udGVudCxvKTtsJiYoaS50ZXh0Q29udGVudD1kbXQobCl8fCIgIix4Ryh0aGlzLG8sYSwidGV4dCIsInRleHRDb250ZW50IixsKSxzPSEwKX1yZXR1cm4gc31zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKGksbyxhLHMsbCl7bGV0IGM9dGhpcy5fcGFyc2VCaW5kaW5ncyhsLG8pO2lmKGMpe2xldCB1PXMsaD0icHJvcGVydHkiO2oxZS50ZXN0KHMpP2g9ImF0dHJpYnV0ZSI6c1tzLmxlbmd0aC0xXT09IiQiJiYocz1zLnNsaWNlKDAsLTEpLGg9ImF0dHJpYnV0ZSIpO2xldCBmPWRtdChjKTtyZXR1cm4gZiYmaD09ImF0dHJpYnV0ZSImJihzPT0iY2xhc3MiJiZpLmhhc0F0dHJpYnV0ZSgiY2xhc3MiKSYmKGYrPSIgIitpLmdldEF0dHJpYnV0ZShzKSksaS5zZXRBdHRyaWJ1dGUocyxmKSksaD09ImF0dHJpYnV0ZSImJnU9PSJkaXNhYmxlLXVwZ3JhZGUkIiYmaS5zZXRBdHRyaWJ1dGUocywiIiksaS5sb2NhbE5hbWU9PT0iaW5wdXQiJiZ1PT09InZhbHVlIiYmaS5zZXRBdHRyaWJ1dGUodSwiIiksaS5yZW1vdmVBdHRyaWJ1dGUodSksaD09PSJwcm9wZXJ0eSImJihzPXdtKHMpKSx4Ryh0aGlzLG8sYSxoLHMsYyxmKSwhMH1lbHNlIHJldHVybiB0Ll9wYXJzZVRlbXBsYXRlTm9kZUF0dHJpYnV0ZS5jYWxsKHRoaXMsaSxvLGEscyxsKX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOZXN0ZWRUZW1wbGF0ZShpLG8sYSl7bGV0IHM9dC5fcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlLmNhbGwodGhpcyxpLG8sYSksbD1pLnBhcmVudE5vZGUsYz1hLnRlbXBsYXRlSW5mbyx1PWwubG9jYWxOYW1lPT09ImRvbS1pZiIsaD1sLmxvY2FsTmFtZT09PSJkb20tcmVwZWF0IjtmRyYmKHV8fGgpJiYobC5yZW1vdmVDaGlsZChpKSxhPWEucGFyZW50SW5mbyxhLnRlbXBsYXRlSW5mbz1jLGEubm90ZWQ9ITAscz0hMSk7bGV0IGY9Yy5ob3N0UHJvcHM7aWYoa0kmJnUpZiYmKG8uaG9zdFByb3BzPU9iamVjdC5hc3NpZ24oby5ob3N0UHJvcHN8fHt9LGYpLGZHfHwoYS5wYXJlbnRJbmZvLm5vdGVkPSEwKSk7ZWxzZXtsZXQgcD0ieyI7Zm9yKGxldCBkIGluIGYpe2xldCBnPVt7bW9kZTpwLHNvdXJjZTpkLGRlcGVuZGVuY2llczpbZF0saG9zdFByb3A6ITB9XTt4Ryh0aGlzLG8sYSwicHJvcGVydHkiLCJfaG9zdF8iK2QsZyl9fXJldHVybiBzfXN0YXRpYyBfcGFyc2VCaW5kaW5ncyhpLG8pe2xldCBhPVtdLHM9MCxsO2Zvcig7KGw9cG10LmV4ZWMoaSkpIT09bnVsbDspe2wuaW5kZXg+cyYmYS5wdXNoKHtsaXRlcmFsOmkuc2xpY2UocyxsLmluZGV4KX0pO2xldCBjPWxbMV1bMF0sdT1Cb29sZWFuKGxbMl0pLGg9bFszXS50cmltKCksZj0hMSxwPSIiLGQ9LTE7Yz09InsiJiYoZD1oLmluZGV4T2YoIjo6IikpPjAmJihwPWguc3Vic3RyaW5nKGQrMiksaD1oLnN1YnN0cmluZygwLGQpLGY9ITApO2xldCBnPWJHKGgpLF89W107aWYoZyl7bGV0e2FyZ3M6eSxtZXRob2ROYW1lOnh9PWc7Zm9yKGxldCBTPTA7Uzx5Lmxlbmd0aDtTKyspe2xldCBDPXlbU107Qy5saXRlcmFsfHxfLnB1c2goQyl9bGV0IGI9by5keW5hbWljRm5zOyhiJiZiW3hdfHxnLnN0YXRpYykmJihfLnB1c2goeCksZy5keW5hbWljRm49ITApfWVsc2UgXy5wdXNoKGgpO2EucHVzaCh7c291cmNlOmgsbW9kZTpjLG5lZ2F0ZTp1LGN1c3RvbUV2ZW50OmYsc2lnbmF0dXJlOmcsZGVwZW5kZW5jaWVzOl8sZXZlbnQ6cH0pLHM9cG10Lmxhc3RJbmRleH1pZihzJiZzPGkubGVuZ3RoKXtsZXQgYz1pLnN1YnN0cmluZyhzKTtjJiZhLnB1c2goe2xpdGVyYWw6Y30pfXJldHVybiBhLmxlbmd0aD9hOm51bGx9c3RhdGljIF9ldmFsdWF0ZUJpbmRpbmcoaSxvLGEscyxsLGMpe2xldCB1O3JldHVybiBvLnNpZ25hdHVyZT91PXdHKGksYSxzLGwsby5zaWduYXR1cmUpOmEhPW8uc291cmNlP3U9Tm8oaSxvLnNvdXJjZSk6YyYmTkkoYSk/dT1ObyhpLGEpOnU9aS5fX2RhdGFbYV0sby5uZWdhdGUmJih1PSF1KSx1fX1yZXR1cm4gcn0pLFdNPVtdO3ZhciBDdmU9MDtmdW5jdGlvbiB3bXQoKXtDdmUrK312YXIgQXZlPVtdO2Z1bmN0aW9uIEhJKGUpe0F2ZS5wdXNoKGUpfWZ1bmN0aW9uIFB2ZShlKXtsZXQgdD17fTtmb3IobGV0IHIgaW4gZSl7bGV0IG49ZVtyXTt0W3JdPXR5cGVvZiBuPT0iZnVuY3Rpb24iP3t0eXBlOm59Om59cmV0dXJuIHR9dmFyIFNtdD1ObihlPT57bGV0IHQ9ekkoZSk7ZnVuY3Rpb24gcihvKXtsZXQgYT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7cmV0dXJuIGEucHJvdG90eXBlIGluc3RhbmNlb2YgaT9hOm51bGx9ZnVuY3Rpb24gbihvKXtpZighby5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX293blByb3BlcnRpZXMiLG8pKSl7bGV0IGE9bnVsbDtpZihvLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInByb3BlcnRpZXMiLG8pKSl7bGV0IHM9by5wcm9wZXJ0aWVzO3MmJihhPVB2ZShzKSl9by5fX293blByb3BlcnRpZXM9YX1yZXR1cm4gby5fX293blByb3BlcnRpZXN9Y2xhc3MgaSBleHRlbmRzIHR7c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX29ic2VydmVkQXR0cmlidXRlcyIsdGhpcykpKXtISSh0aGlzLnByb3RvdHlwZSk7bGV0IGE9dGhpcy5fcHJvcGVydGllczt0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzPWE/T2JqZWN0LmtleXMoYSkubWFwKHM9PnRoaXMucHJvdG90eXBlLl9hZGRQcm9wZXJ0eVRvQXR0cmlidXRlTWFwKHMpKTpbXX1yZXR1cm4gdGhpcy5fX29ic2VydmVkQXR0cmlidXRlc31zdGF0aWMgZmluYWxpemUoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2ZpbmFsaXplZCIsdGhpcykpKXtsZXQgYT1yKHRoaXMpO2EmJmEuZmluYWxpemUoKSx0aGlzLl9fZmluYWxpemVkPSEwLHRoaXMuX2ZpbmFsaXplQ2xhc3MoKX19c3RhdGljIF9maW5hbGl6ZUNsYXNzKCl7bGV0IGE9bih0aGlzKTthJiZ0aGlzLmNyZWF0ZVByb3BlcnRpZXMoYSl9c3RhdGljIGdldCBfcHJvcGVydGllcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fcHJvcGVydGllcyIsdGhpcykpKXtsZXQgYT1yKHRoaXMpO3RoaXMuX19wcm9wZXJ0aWVzPU9iamVjdC5hc3NpZ24oe30sYSYmYS5fcHJvcGVydGllcyxuKHRoaXMpKX1yZXR1cm4gdGhpcy5fX3Byb3BlcnRpZXN9c3RhdGljIHR5cGVGb3JQcm9wZXJ0eShhKXtsZXQgcz10aGlzLl9wcm9wZXJ0aWVzW2FdO3JldHVybiBzJiZzLnR5cGV9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7d210KCksdGhpcy5jb25zdHJ1Y3Rvci5maW5hbGl6ZSgpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fZW5hYmxlUHJvcGVydGllcygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCl9fXJldHVybiBpfSk7dmFyIE1tdD0iMy40LjEiLFZJPXdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkLFNtPU5uKGU9PntsZXQgdD1TbXQodV8oZSkpO2Z1bmN0aW9uIHIobCl7aWYoIWwuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19wcm9wZXJ0eURlZmF1bHRzIixsKSkpe2wuX19wcm9wZXJ0eURlZmF1bHRzPW51bGw7bGV0IGM9bC5fcHJvcGVydGllcztmb3IobGV0IHUgaW4gYyl7bGV0IGg9Y1t1XTsidmFsdWUiaW4gaCYmKGwuX19wcm9wZXJ0eURlZmF1bHRzPWwuX19wcm9wZXJ0eURlZmF1bHRzfHx7fSxsLl9fcHJvcGVydHlEZWZhdWx0c1t1XT1oKX19cmV0dXJuIGwuX19wcm9wZXJ0eURlZmF1bHRzfWZ1bmN0aW9uIG4obCl7cmV0dXJuIGwuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vd25PYnNlcnZlcnMiLGwpKXx8KGwuX19vd25PYnNlcnZlcnM9bC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJvYnNlcnZlcnMiLGwpKT9sLm9ic2VydmVyczpudWxsKSxsLl9fb3duT2JzZXJ2ZXJzfWZ1bmN0aW9uIGkobCxjLHUsaCl7dS5jb21wdXRlZCYmKHUucmVhZE9ubHk9ITApLHUuY29tcHV0ZWQmJihsLl9oYXNSZWFkT25seUVmZmVjdChjKT9jb25zb2xlLndhcm4oYENhbm5vdCByZWRlZmluZSBjb21wdXRlZCBwcm9wZXJ0eSAnJHtjfScuYCk6bC5fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShjLHUuY29tcHV0ZWQsaCkpLHUucmVhZE9ubHkmJiFsLl9oYXNSZWFkT25seUVmZmVjdChjKT9sLl9jcmVhdGVSZWFkT25seVByb3BlcnR5KGMsIXUuY29tcHV0ZWQpOnUucmVhZE9ubHk9PT0hMSYmbC5faGFzUmVhZE9ubHlFZmZlY3QoYykmJmNvbnNvbGUud2FybihgQ2Fubm90IG1ha2UgcmVhZE9ubHkgcHJvcGVydHkgJyR7Y30nIG5vbi1yZWFkT25seS5gKSx1LnJlZmxlY3RUb0F0dHJpYnV0ZSYmIWwuX2hhc1JlZmxlY3RFZmZlY3QoYyk/bC5fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkoYyk6dS5yZWZsZWN0VG9BdHRyaWJ1dGU9PT0hMSYmbC5faGFzUmVmbGVjdEVmZmVjdChjKSYmY29uc29sZS53YXJuKGBDYW5ub3QgbWFrZSByZWZsZWN0ZWQgcHJvcGVydHkgJyR7Y30nIG5vbi1yZWZsZWN0ZWQuYCksdS5ub3RpZnkmJiFsLl9oYXNOb3RpZnlFZmZlY3QoYyk/bC5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoYyk6dS5ub3RpZnk9PT0hMSYmbC5faGFzTm90aWZ5RWZmZWN0KGMpJiZjb25zb2xlLndhcm4oYENhbm5vdCBtYWtlIG5vdGlmeSBwcm9wZXJ0eSAnJHtjfScgbm9uLW5vdGlmeS5gKSx1Lm9ic2VydmVyJiZsLl9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKGMsdS5vYnNlcnZlcixoW3Uub2JzZXJ2ZXJdKSxsLl9hZGRQcm9wZXJ0eVRvQXR0cmlidXRlTWFwKGMpfWZ1bmN0aW9uIG8obCxjLHUsaCl7aWYoIVZJKXtsZXQgZj1jLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKSxwPVJJKGMpLGQ9UWR0KHUpLGc9Yy5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkO2ZvcihsZXQgeT0wO3k8ZC5sZW5ndGg7eSsrKXtsZXQgeD1kW3ldO3gudGV4dENvbnRlbnQ9bC5fcHJvY2Vzc1N0eWxlVGV4dCh4LnRleHRDb250ZW50LGgpLGMuY29udGVudC5pbnNlcnRCZWZvcmUoeCxnKX1sZXQgXz0wO2ZvcihsZXQgeT0wO3k8cC5sZW5ndGg7eSsrKXtsZXQgeD1wW3ldLGI9ZltfXTtiIT09eD8oeD14LmNsb25lTm9kZSghMCksYi5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh4LGIpKTpfKysseC50ZXh0Q29udGVudD1sLl9wcm9jZXNzU3R5bGVUZXh0KHgudGV4dENvbnRlbnQsaCl9fWlmKHdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZShjLHUpLFlkdCYmVkkmJkhkdCl7bGV0IGY9Yy5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIik7aWYoZil7bGV0IHA9IiI7QXJyYXkuZnJvbShmKS5mb3JFYWNoKGQ9PntwKz1kLnRleHRDb250ZW50LGQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkKX0pLGwuX3N0eWxlU2hlZXQ9bmV3IENTU1N0eWxlU2hlZXQsbC5fc3R5bGVTaGVldC5yZXBsYWNlU3luYyhwKX19fWZ1bmN0aW9uIGEobCl7bGV0IGM9bnVsbDtpZihsJiYoIWl1fHxxZHQpJiYoYz1vdS5pbXBvcnQobCwidGVtcGxhdGUiKSxpdSYmIWMpKXRocm93IG5ldyBFcnJvcihgc3RyaWN0VGVtcGxhdGVQb2xpY3k6IGV4cGVjdGluZyBkb20tbW9kdWxlIG9yIG51bGwgdGVtcGxhdGUgZm9yICR7bH1gKTtyZXR1cm4gY31jbGFzcyBzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHBvbHltZXJFbGVtZW50VmVyc2lvbigpe3JldHVybiBNbXR9c3RhdGljIF9maW5hbGl6ZUNsYXNzKCl7dC5fZmluYWxpemVDbGFzcy5jYWxsKHRoaXMpO2xldCBjPW4odGhpcyk7YyYmdGhpcy5jcmVhdGVPYnNlcnZlcnMoYyx0aGlzLl9wcm9wZXJ0aWVzKSx0aGlzLl9wcmVwYXJlVGVtcGxhdGUoKX1zdGF0aWMgX3ByZXBhcmVUZW1wbGF0ZSgpe2xldCBjPXRoaXMudGVtcGxhdGU7YyYmKHR5cGVvZiBjPT0ic3RyaW5nIj8oY29uc29sZS5lcnJvcigidGVtcGxhdGUgZ2V0dGVyIG11c3QgcmV0dXJuIEhUTUxUZW1wbGF0ZUVsZW1lbnQiKSxjPW51bGwpOnBwfHwoYz1jLmNsb25lTm9kZSghMCkpKSx0aGlzLnByb3RvdHlwZS5fdGVtcGxhdGU9Y31zdGF0aWMgY3JlYXRlUHJvcGVydGllcyhjKXtmb3IobGV0IHUgaW4gYylpKHRoaXMucHJvdG90eXBlLHUsY1t1XSxjKX1zdGF0aWMgY3JlYXRlT2JzZXJ2ZXJzKGMsdSl7bGV0IGg9dGhpcy5wcm90b3R5cGU7Zm9yKGxldCBmPTA7ZjxjLmxlbmd0aDtmKyspaC5fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIoY1tmXSx1KX1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzKSkpe2xldCBjPXRoaXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl90ZW1wbGF0ZSIsdGhpcy5wcm90b3R5cGUpKT90aGlzLnByb3RvdHlwZS5fdGVtcGxhdGU6dm9pZCAwO3RoaXMuX3RlbXBsYXRlPWMhPT12b2lkIDA/Yzp0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoImlzIix0aGlzKSkmJmEodGhpcy5pcyl8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuY29uc3RydWN0b3IudGVtcGxhdGV9cmV0dXJuIHRoaXMuX3RlbXBsYXRlfXN0YXRpYyBzZXQgdGVtcGxhdGUoYyl7dGhpcy5fdGVtcGxhdGU9Y31zdGF0aWMgZ2V0IGltcG9ydFBhdGgoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfaW1wb3J0UGF0aCIsdGhpcykpKXtsZXQgYz10aGlzLmltcG9ydE1ldGE7aWYoYyl0aGlzLl9pbXBvcnRQYXRoPUN4KGMudXJsKTtlbHNle2xldCB1PW91LmltcG9ydCh0aGlzLmlzKTt0aGlzLl9pbXBvcnRQYXRoPXUmJnUuYXNzZXRwYXRofHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yLmltcG9ydFBhdGh9fXJldHVybiB0aGlzLl9pbXBvcnRQYXRofWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl90ZW1wbGF0ZSx0aGlzLl9pbXBvcnRQYXRoLHRoaXMucm9vdFBhdGgsdGhpcy5pbXBvcnRQYXRoLHRoaXMucm9vdCx0aGlzLiR9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5jb25zdHJ1Y3Rvci5maW5hbGl6ZSgpLHRoaXMuY29uc3RydWN0b3IuX2ZpbmFsaXplVGVtcGxhdGUodGhpcy5sb2NhbE5hbWUpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMucm9vdFBhdGg9VmR0LHRoaXMuaW1wb3J0UGF0aD10aGlzLmNvbnN0cnVjdG9yLmltcG9ydFBhdGg7bGV0IGM9cih0aGlzLmNvbnN0cnVjdG9yKTtpZighIWMpZm9yKGxldCB1IGluIGMpe2xldCBoPWNbdV07aWYodGhpcy5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQodSkpe2xldCBmPXR5cGVvZiBoLnZhbHVlPT0iZnVuY3Rpb24iP2gudmFsdWUuY2FsbCh0aGlzKTpoLnZhbHVlO3RoaXMuX2hhc0FjY2Vzc29yKHUpP3RoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eSh1LGYsITApOnRoaXNbdV09Zn19fV9jYW5BcHBseVByb3BlcnR5RGVmYXVsdChjKXtyZXR1cm4hdGhpcy5oYXNPd25Qcm9wZXJ0eShjKX1zdGF0aWMgX3Byb2Nlc3NTdHlsZVRleHQoYyx1KXtyZXR1cm4gSE0oYyx1KX1zdGF0aWMgX2ZpbmFsaXplVGVtcGxhdGUoYyl7bGV0IHU9dGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlO2lmKHUmJiF1Ll9fcG9seW1lckZpbmFsaXplZCl7dS5fX3BvbHltZXJGaW5hbGl6ZWQ9ITA7bGV0IGg9dGhpcy5pbXBvcnRQYXRoLGY9aD9sXyhoKToiIjtvKHRoaXMsdSxjLGYpLHRoaXMucHJvdG90eXBlLl9iaW5kVGVtcGxhdGUodSl9fWNvbm5lY3RlZENhbGxiYWNrKCl7d2luZG93LlNoYWR5Q1NTJiZ0aGlzLl90ZW1wbGF0ZSYmd2luZG93LlNoYWR5Q1NTLnN0eWxlRWxlbWVudCh0aGlzKSxzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpfXJlYWR5KCl7dGhpcy5fdGVtcGxhdGUmJih0aGlzLnJvb3Q9dGhpcy5fc3RhbXBUZW1wbGF0ZSh0aGlzLl90ZW1wbGF0ZSksdGhpcy4kPXRoaXMucm9vdC4kKSxzdXBlci5yZWFkeSgpfV9yZWFkeUNsaWVudHMoKXt0aGlzLl90ZW1wbGF0ZSYmKHRoaXMucm9vdD10aGlzLl9hdHRhY2hEb20odGhpcy5yb290KSksc3VwZXIuX3JlYWR5Q2xpZW50cygpfV9hdHRhY2hEb20oYyl7bGV0IHU9dWUodGhpcyk7aWYodS5hdHRhY2hTaGFkb3cpcmV0dXJuIGM/KHUuc2hhZG93Um9vdHx8KHUuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIixzaGFkeVVwZ3JhZGVGcmFnbWVudDpjfSksdS5zaGFkb3dSb290LmFwcGVuZENoaWxkKGMpLHRoaXMuY29uc3RydWN0b3IuX3N0eWxlU2hlZXQmJih1LnNoYWRvd1Jvb3QuYWRvcHRlZFN0eWxlU2hlZXRzPVt0aGlzLmNvbnN0cnVjdG9yLl9zdHlsZVNoZWV0XSkpLEdkdCYmd2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uZmx1c2hJbml0aWFsKHUuc2hhZG93Um9vdCksdS5zaGFkb3dSb290KTpudWxsO3Rocm93IG5ldyBFcnJvcigiU2hhZG93RE9NIG5vdCBhdmFpbGFibGUuIFBvbHltZXJFbGVtZW50IGNhbiBjcmVhdGUgZG9tIGFzIGNoaWxkcmVuIGluc3RlYWQgb2YgaW4gU2hhZG93RE9NIGJ5IHNldHRpbmcgYHRoaXMucm9vdCA9IHRoaXM7YCBiZWZvcmUgYHJlYWR5YC4iKX11cGRhdGVTdHlsZXMoYyl7d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVTdWJ0cmVlKHRoaXMsYyl9cmVzb2x2ZVVybChjLHUpe3JldHVybiF1JiZ0aGlzLmltcG9ydFBhdGgmJih1PWxfKHRoaXMuaW1wb3J0UGF0aCkpLGxfKGMsdSl9c3RhdGljIF9wYXJzZVRlbXBsYXRlQ29udGVudChjLHUsaCl7cmV0dXJuIHUuZHluYW1pY0Zucz11LmR5bmFtaWNGbnN8fHRoaXMuX3Byb3BlcnRpZXMsdC5fcGFyc2VUZW1wbGF0ZUNvbnRlbnQuY2FsbCh0aGlzLGMsdSxoKX1zdGF0aWMgX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QoYyx1LGgpe3JldHVybiBJSSYmISh1IGluIHRoaXMuX3Byb3BlcnRpZXMpJiYhKGguaW5mby5wYXJ0LnNpZ25hdHVyZSYmaC5pbmZvLnBhcnQuc2lnbmF0dXJlLnN0YXRpYykmJiFoLmluZm8ucGFydC5ob3N0UHJvcCYmIWMubmVzdGVkVGVtcGxhdGUmJmNvbnNvbGUud2FybihgUHJvcGVydHkgJyR7dX0nIHVzZWQgaW4gdGVtcGxhdGUgYnV0IG5vdCBkZWNsYXJlZCBpbiAncHJvcGVydGllcyc7IGF0dHJpYnV0ZSB3aWxsIG5vdCBiZSBvYnNlcnZlZC5gKSx0Ll9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0LmNhbGwodGhpcyxjLHUsaCl9fXJldHVybiBzfSk7dmFyIFVJPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dC50b1N0cmluZygpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMudmFsdWV9fTtmdW5jdGlvbiBJdmUoZSl7aWYoZSBpbnN0YW5jZW9mIFVJKXJldHVybiBlLnZhbHVlO3Rocm93IG5ldyBFcnJvcihgbm9uLWxpdGVyYWwgdmFsdWUgcGFzc2VkIHRvIFBvbHltZXIncyBodG1sTGl0ZXJhbCBmdW5jdGlvbjogJHtlfWApfWZ1bmN0aW9uIEx2ZShlKXtpZihlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudClyZXR1cm4gZS5pbm5lckhUTUw7aWYoZSBpbnN0YW5jZW9mIFVJKXJldHVybiBJdmUoZSk7dGhyb3cgbmV3IEVycm9yKGBub24tdGVtcGxhdGUgdmFsdWUgcGFzc2VkIHRvIFBvbHltZXIncyBodG1sIGZ1bmN0aW9uOiAke2V9YCl9dmFyIFE9ZnVuY3Rpb24odCwuLi5yKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiBuLmlubmVySFRNTD1yLnJlZHVjZSgoaSxvLGEpPT5pK0x2ZShvKSt0W2ErMV0sdFswXSksbn07dmFyIG10PVNtKEhUTUxFbGVtZW50KTt2YXIgZnk9RWUoT2UoKSwxKTt2YXIgaF89ISh3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5pblVzZSkscUk7ZnVuY3Rpb24gRW10KGUpe2UmJmUuc2hpbWNzc3Byb3BlcnRpZXM/cUk9ITE6cUk9aF98fEJvb2xlYW4oIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XC82MDF8RWRnZVwvMTUvKSYmd2luZG93LkNTUyYmQ1NTLnN1cHBvcnRzJiZDU1Muc3VwcG9ydHMoImJveC1zaGFkb3ciLCIwIDAgMCB2YXIoLS1mb28pIikpfXZhciBNbTt3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCE9PXZvaWQgMCYmKE1tPXdpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCk7dmFyIEdJPUJvb2xlYW4od2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuZGlzYWJsZVJ1bnRpbWUpO3dpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzcyE9PXZvaWQgMD9xST13aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzOndpbmRvdy5TaGFkeUNTUz8oRW10KHdpbmRvdy5TaGFkeUNTUyksd2luZG93LlNoYWR5Q1NTPXZvaWQgMCk6RW10KHdpbmRvdy5XZWJDb21wb25lbnRzJiZ3aW5kb3cuV2ViQ29tcG9uZW50cy5mbGFncyk7dmFyIE54PXFJO3ZhciBXST1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhcnQ9MCx0aGlzLmVuZD0wLHRoaXMucHJldmlvdXM9bnVsbCx0aGlzLnBhcmVudD1udWxsLHRoaXMucnVsZXM9bnVsbCx0aGlzLnBhcnNlZENzc1RleHQ9IiIsdGhpcy5jc3NUZXh0PSIiLHRoaXMuYXRSdWxlPSExLHRoaXMudHlwZT0wLHRoaXMua2V5ZnJhbWVzTmFtZT0iIix0aGlzLnNlbGVjdG9yPSIiLHRoaXMucGFyc2VkU2VsZWN0b3I9IiJ9fTtmdW5jdGlvbiBNRyhlKXtyZXR1cm4gZT1rdmUoZSksVG10KFJ2ZShlKSxlKX1mdW5jdGlvbiBrdmUoZSl7cmV0dXJuIGUucmVwbGFjZShncC5jb21tZW50cywiIikucmVwbGFjZShncC5wb3J0LCIiKX1mdW5jdGlvbiBSdmUoZSl7bGV0IHQ9bmV3IFdJO3Quc3RhcnQ9MCx0LmVuZD1lLmxlbmd0aDtsZXQgcj10O2ZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpO24rKylpZihlW25dPT09Q210KXtyLnJ1bGVzfHwoci5ydWxlcz1bXSk7bGV0IG89cixhPW8ucnVsZXNbby5ydWxlcy5sZW5ndGgtMV18fG51bGw7cj1uZXcgV0ksci5zdGFydD1uKzEsci5wYXJlbnQ9byxyLnByZXZpb3VzPWEsby5ydWxlcy5wdXNoKHIpfWVsc2UgZVtuXT09PUFtdCYmKHIuZW5kPW4rMSxyPXIucGFyZW50fHx0KTtyZXR1cm4gdH1mdW5jdGlvbiBUbXQoZSx0KXtsZXQgcj10LnN1YnN0cmluZyhlLnN0YXJ0LGUuZW5kLTEpO2lmKGUucGFyc2VkQ3NzVGV4dD1lLmNzc1RleHQ9ci50cmltKCksZS5wYXJlbnQpe2xldCBpPWUucHJldmlvdXM/ZS5wcmV2aW91cy5lbmQ6ZS5wYXJlbnQuc3RhcnQ7cj10LnN1YnN0cmluZyhpLGUuc3RhcnQtMSkscj1OdmUocikscj1yLnJlcGxhY2UoZ3AubXVsdGlwbGVTcGFjZXMsIiAiKSxyPXIuc3Vic3RyaW5nKHIubGFzdEluZGV4T2YoIjsiKSsxKTtsZXQgbz1lLnBhcnNlZFNlbGVjdG9yPWUuc2VsZWN0b3I9ci50cmltKCk7ZS5hdFJ1bGU9by5pbmRleE9mKEh2ZSk9PT0wLGUuYXRSdWxlP28uaW5kZXhPZihCdmUpPT09MD9lLnR5cGU9bXAuTUVESUFfUlVMRTpvLm1hdGNoKGdwLmtleWZyYW1lc1J1bGUpJiYoZS50eXBlPW1wLktFWUZSQU1FU19SVUxFLGUua2V5ZnJhbWVzTmFtZT1lLnNlbGVjdG9yLnNwbGl0KGdwLm11bHRpcGxlU3BhY2VzKS5wb3AoKSk6by5pbmRleE9mKFBtdCk9PT0wP2UudHlwZT1tcC5NSVhJTl9SVUxFOmUudHlwZT1tcC5TVFlMRV9SVUxFfWxldCBuPWUucnVsZXM7aWYobilmb3IobGV0IGk9MCxvPW4ubGVuZ3RoLGE7aTxvJiYoYT1uW2ldKTtpKyspVG10KGEsdCk7cmV0dXJuIGV9ZnVuY3Rpb24gTnZlKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcKFswLTlhLWZdezEsNn0pXHMvZ2ksZnVuY3Rpb24oKXtsZXQgdD1hcmd1bWVudHNbMV0scj02LXQubGVuZ3RoO2Zvcig7ci0tOyl0PSIwIit0O3JldHVybiJcXCIrdH0pfWZ1bmN0aW9uIEVHKGUsdCxyPSIiKXtsZXQgbj0iIjtpZihlLmNzc1RleHR8fGUucnVsZXMpe2xldCBpPWUucnVsZXM7aWYoaSYmIUR2ZShpKSlmb3IobGV0IG89MCxhPWkubGVuZ3RoLHM7bzxhJiYocz1pW29dKTtvKyspbj1FRyhzLHQsbik7ZWxzZSBuPXQ/ZS5jc3NUZXh0Ok92ZShlLmNzc1RleHQpLG49bi50cmltKCksbiYmKG49IiAgIituK2AKYCl9cmV0dXJuIG4mJihlLnNlbGVjdG9yJiYocis9ZS5zZWxlY3RvcisiICIrQ210K2AKYCkscis9bixlLnNlbGVjdG9yJiYocis9QW10K2AKCmApKSxyfWZ1bmN0aW9uIER2ZShlKXtsZXQgdD1lWzBdO3JldHVybiBCb29sZWFuKHQpJiZCb29sZWFuKHQuc2VsZWN0b3IpJiZ0LnNlbGVjdG9yLmluZGV4T2YoUG10KT09PTB9ZnVuY3Rpb24gT3ZlKGUpe3JldHVybiBlPXp2ZShlKSxGdmUoZSl9ZnVuY3Rpb24genZlKGUpe3JldHVybiBlLnJlcGxhY2UoZ3AuY3VzdG9tUHJvcCwiIikucmVwbGFjZShncC5taXhpblByb3AsIiIpfWZ1bmN0aW9uIEZ2ZShlKXtyZXR1cm4gZS5yZXBsYWNlKGdwLm1peGluQXBwbHksIiIpLnJlcGxhY2UoZ3AudmFyQXBwbHksIiIpfXZhciBtcD17U1RZTEVfUlVMRToxLEtFWUZSQU1FU19SVUxFOjcsTUVESUFfUlVMRTo0LE1JWElOX1JVTEU6MWUzfSxDbXQ9InsiLEFtdD0ifSIsZ3A9e2NvbW1lbnRzOi9cL1wqW14qXSpcKisoW14vKl1bXipdKlwqKykqXC8vZ2ltLHBvcnQ6L0BpbXBvcnRbXjtdKjsvZ2ltLGN1c3RvbVByb3A6Lyg/Ol5bXjtcLVxzfV0rKT8tLVteO3t9XSo/Oltee307XSo/KD86Wztcbl18JCkvZ2ltLG1peGluUHJvcDovKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj97W159XSo/fSg/Ols7XG5dfCQpPy9naW0sbWl4aW5BcHBseTovQGFwcGx5XHMqXCg/W14pO10qXCk/XHMqKD86Wztcbl18JCk/L2dpbSx2YXJBcHBseTovW147Ol0qPzpbXjtdKj92YXJcKFteO10qXCkoPzpbO1xuXXwkKT8vZ2ltLGtleWZyYW1lc1J1bGU6L15AW15cc10qa2V5ZnJhbWVzLyxtdWx0aXBsZVNwYWNlczovXHMrL2d9LFBtdD0iLS0iLEJ2ZT0iQG1lZGlhIixIdmU9IkAiO3ZhciBLTT0vKD86XnxbO1xze11ccyopKC0tW1x3LV0qPylccyo6XHMqKD86KCg/OicoPzpcXCd8LikqPyd8Iig/OlxcInwuKSo/InxcKFteKV0qP1wpfFtefTt7XSkrKXxceyhbXn1dKilcfSg/Oig/PVs7XHN9XSl8JCkpL2dpLER4PS8oPzpefFxXKylAYXBwbHlccypcKD8oW14pO1xuXSopXCk/L2dpO3ZhciBJbXQ9L0BtZWRpYVxzKC4qKS87dmFyIExtdD1uZXcgU2V0LFZ2ZT0ic2hhZHktdW5zY29wZWQiO2Z1bmN0aW9uIGttdChlKXtsZXQgdD1lLnRleHRDb250ZW50O2lmKCFMbXQuaGFzKHQpKXtMbXQuYWRkKHQpO2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ci5zZXRBdHRyaWJ1dGUoInNoYWR5LXVuc2NvcGVkIiwiIiksci50ZXh0Q29udGVudD10LGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocil9fWZ1bmN0aW9uIFJtdChlKXtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoVnZlKX1mdW5jdGlvbiBaTShlLHQpe3JldHVybiBlPyh0eXBlb2YgZT09InN0cmluZyImJihlPU1HKGUpKSx0JiZPeChlLHQpLEVHKGUsTngpKToiIn1mdW5jdGlvbiBURyhlKXtyZXR1cm4hZS5fX2Nzc1J1bGVzJiZlLnRleHRDb250ZW50JiYoZS5fX2Nzc1J1bGVzPU1HKGUudGV4dENvbnRlbnQpKSxlLl9fY3NzUnVsZXN8fG51bGx9ZnVuY3Rpb24gT3goZSx0LHIsbil7aWYoIWUpcmV0dXJuO2xldCBpPSExLG89ZS50eXBlO2lmKG4mJm89PT1tcC5NRURJQV9SVUxFKXtsZXQgcz1lLnNlbGVjdG9yLm1hdGNoKEltdCk7cyYmKHdpbmRvdy5tYXRjaE1lZGlhKHNbMV0pLm1hdGNoZXN8fChpPSEwKSl9bz09PW1wLlNUWUxFX1JVTEU/dChlKTpyJiZvPT09bXAuS0VZRlJBTUVTX1JVTEU/cihlKTpvPT09bXAuTUlYSU5fUlVMRSYmKGk9ITApO2xldCBhPWUucnVsZXM7aWYoYSYmIWkpZm9yKGxldCBzPTAsbD1hLmxlbmd0aCxjO3M8bCYmKGM9YVtzXSk7cysrKU94KGMsdCxyLG4pfWZ1bmN0aW9uIFV2ZShlLHQpe2xldCByPTA7Zm9yKGxldCBuPXQsaT1lLmxlbmd0aDtuPGk7bisrKWlmKGVbbl09PT0iKCIpcisrO2Vsc2UgaWYoZVtuXT09PSIpIiYmLS1yPT09MClyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBDRyhlLHQpe2xldCByPWUuaW5kZXhPZigidmFyKCIpO2lmKHI9PT0tMSlyZXR1cm4gdChlLCIiLCIiLCIiKTtsZXQgbj1VdmUoZSxyKzMpLGk9ZS5zdWJzdHJpbmcocis0LG4pLG89ZS5zdWJzdHJpbmcoMCxyKSxhPUNHKGUuc3Vic3RyaW5nKG4rMSksdCkscz1pLmluZGV4T2YoIiwiKTtpZihzPT09LTEpcmV0dXJuIHQobyxpLnRyaW0oKSwiIixhKTtsZXQgbD1pLnN1YnN0cmluZygwLHMpLnRyaW0oKSxjPWkuc3Vic3RyaW5nKHMrMSkudHJpbSgpO3JldHVybiB0KG8sbCxjLGEpfXZhciBuMXI9d2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00ud3JhcHx8KGU9PmUpO2Z1bmN0aW9uIE5tdChlKXtsZXQgdD1lLmxvY2FsTmFtZSxyPSIiLG49IiI7cmV0dXJuIHQ/dC5pbmRleE9mKCItIik+LTE/cj10OihuPXQscj1lLmdldEF0dHJpYnV0ZSYmZS5nZXRBdHRyaWJ1dGUoImlzIil8fCIiKToocj1lLmlzLG49ZS5leHRlbmRzKSx7aXM6cix0eXBlRXh0ZW5zaW9uOm59fWZ1bmN0aW9uIERtdChlKXtsZXQgdD1bXSxyPWUucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl7bGV0IGk9cltuXTtSbXQoaSk/aF98fChrbXQoaSksaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKToodC5wdXNoKGkudGV4dENvbnRlbnQpLGkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKSl9cmV0dXJuIHQuam9pbigiIikudHJpbSgpfXZhciBPbXQ9ImNzcy1idWlsZCI7ZnVuY3Rpb24gcXZlKGUpe2lmKE1tIT09dm9pZCAwKXJldHVybiBNbTtpZihlLl9fY3NzQnVpbGQ9PT12b2lkIDApe2xldCB0PWUuZ2V0QXR0cmlidXRlKE9tdCk7aWYodCllLl9fY3NzQnVpbGQ9dDtlbHNle2xldCByPUd2ZShlKTtyIT09IiImJld2ZShlKSxlLl9fY3NzQnVpbGQ9cn19cmV0dXJuIGUuX19jc3NCdWlsZHx8IiJ9ZnVuY3Rpb24gQUcoZSl7cmV0dXJuIHF2ZShlKSE9PSIifWZ1bmN0aW9uIEd2ZShlKXtsZXQgdD1lLmxvY2FsTmFtZT09PSJ0ZW1wbGF0ZSI/ZS5jb250ZW50LmZpcnN0Q2hpbGQ6ZS5maXJzdENoaWxkO2lmKHQgaW5zdGFuY2VvZiBDb21tZW50KXtsZXQgcj10LnRleHRDb250ZW50LnRyaW0oKS5zcGxpdCgiOiIpO2lmKHJbMF09PT1PbXQpcmV0dXJuIHJbMV19cmV0dXJuIiJ9ZnVuY3Rpb24gV3ZlKGUpe2xldCB0PWUubG9jYWxOYW1lPT09InRlbXBsYXRlIj9lLmNvbnRlbnQuZmlyc3RDaGlsZDplLmZpcnN0Q2hpbGQ7dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfWZ1bmN0aW9uIEpNKGUsdCl7Zm9yKGxldCByIGluIHQpcj09PW51bGw/ZS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShyKTplLnN0eWxlLnNldFByb3BlcnR5KHIsdFtyXSl9ZnVuY3Rpb24gWUkoZSx0KXtsZXQgcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5nZXRQcm9wZXJ0eVZhbHVlKHQpO3JldHVybiByP3IudHJpbSgpOiIifWZ1bmN0aW9uIHptdChlKXtsZXQgdD1EeC50ZXN0KGUpfHxLTS50ZXN0KGUpO3JldHVybiBEeC5sYXN0SW5kZXg9MCxLTS5sYXN0SW5kZXg9MCx0fXZhciBZdmU9LztccyovbSxqdmU9L15ccyooaW5pdGlhbCl8KGluaGVyaXQpXHMqJC8sRm10PS9ccyohaW1wb3J0YW50LyxQRz0iXy1fIjt2YXIgSUc9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9e319c2V0KHQscil7dD10LnRyaW0oKSx0aGlzLl9tYXBbdF09e3Byb3BlcnRpZXM6cixkZXBlbmRhbnRzOnt9fX1nZXQodCl7cmV0dXJuIHQ9dC50cmltKCksdGhpcy5fbWFwW3RdfHxudWxsfX0sakk9bnVsbCxEbz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2N1cnJlbnRFbGVtZW50PW51bGwsdGhpcy5fbWVhc3VyZUVsZW1lbnQ9bnVsbCx0aGlzLl9tYXA9bmV3IElHfWRldGVjdE1peGluKHQpe3JldHVybiB6bXQodCl9Z2F0aGVyU3R5bGVzKHQpe2xldCByPURtdCh0LmNvbnRlbnQpO2lmKHIpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIG4udGV4dENvbnRlbnQ9cix0LmNvbnRlbnQuaW5zZXJ0QmVmb3JlKG4sdC5jb250ZW50LmZpcnN0Q2hpbGQpLG59cmV0dXJuIG51bGx9dHJhbnNmb3JtVGVtcGxhdGUodCxyKXt0Ll9nYXRoZXJlZFN0eWxlPT09dm9pZCAwJiYodC5fZ2F0aGVyZWRTdHlsZT10aGlzLmdhdGhlclN0eWxlcyh0KSk7bGV0IG49dC5fZ2F0aGVyZWRTdHlsZTtyZXR1cm4gbj90aGlzLnRyYW5zZm9ybVN0eWxlKG4scik6bnVsbH10cmFuc2Zvcm1TdHlsZSh0LHI9IiIpe2xldCBuPVRHKHQpO3JldHVybiB0aGlzLnRyYW5zZm9ybVJ1bGVzKG4sciksdC50ZXh0Q29udGVudD1aTShuKSxufXRyYW5zZm9ybUN1c3RvbVN0eWxlKHQpe2xldCByPVRHKHQpO3JldHVybiBPeChyLG49PntuLnNlbGVjdG9yPT09Ijpyb290IiYmKG4uc2VsZWN0b3I9Imh0bWwiKSx0aGlzLnRyYW5zZm9ybVJ1bGUobil9KSx0LnRleHRDb250ZW50PVpNKHIpLHJ9dHJhbnNmb3JtUnVsZXModCxyKXt0aGlzLl9jdXJyZW50RWxlbWVudD1yLE94KHQsbj0+e3RoaXMudHJhbnNmb3JtUnVsZShuKX0pLHRoaXMuX2N1cnJlbnRFbGVtZW50PW51bGx9dHJhbnNmb3JtUnVsZSh0KXt0LmNzc1RleHQ9dGhpcy50cmFuc2Zvcm1Dc3NUZXh0KHQucGFyc2VkQ3NzVGV4dCx0KSx0LnNlbGVjdG9yPT09Ijpyb290IiYmKHQuc2VsZWN0b3I9Ijpob3N0ID4gKiIpfXRyYW5zZm9ybUNzc1RleHQodCxyKXtyZXR1cm4gdD10LnJlcGxhY2UoS00sKG4saSxvLGEpPT50aGlzLl9wcm9kdWNlQ3NzUHJvcGVydGllcyhuLGksbyxhLHIpKSx0aGlzLl9jb25zdW1lQ3NzUHJvcGVydGllcyh0LHIpfV9nZXRJbml0aWFsVmFsdWVGb3JQcm9wZXJ0eSh0KXtyZXR1cm4gdGhpcy5fbWVhc3VyZUVsZW1lbnR8fCh0aGlzLl9tZWFzdXJlRWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJtZXRhIiksdGhpcy5fbWVhc3VyZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcHBseS1zaGltLW1lYXN1cmUiLCIiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zdHlsZS5hbGw9ImluaXRpYWwiLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodGhpcy5fbWVhc3VyZUVsZW1lbnQpKSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9tZWFzdXJlRWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1fZmFsbGJhY2tzRnJvbVByZXZpb3VzUnVsZXModCl7bGV0IHI9dDtmb3IoO3IucGFyZW50OylyPXIucGFyZW50O2xldCBuPXt9LGk9ITE7cmV0dXJuIE94KHIsbz0+e2k9aXx8bz09PXQsIWkmJm8uc2VsZWN0b3I9PT10LnNlbGVjdG9yJiZPYmplY3QuYXNzaWduKG4sdGhpcy5fY3NzVGV4dFRvTWFwKG8ucGFyc2VkQ3NzVGV4dCkpfSksbn1fY29uc3VtZUNzc1Byb3BlcnRpZXModCxyKXtsZXQgbj1udWxsO2Zvcig7bj1EeC5leGVjKHQpOyl7bGV0IGk9blswXSxvPW5bMV0sYT1uLmluZGV4LHM9YStpLmluZGV4T2YoIkBhcHBseSIpLGw9YStpLmxlbmd0aCxjPXQuc2xpY2UoMCxzKSx1PXQuc2xpY2UobCksaD1yP3RoaXMuX2ZhbGxiYWNrc0Zyb21QcmV2aW91c1J1bGVzKHIpOnt9O09iamVjdC5hc3NpZ24oaCx0aGlzLl9jc3NUZXh0VG9NYXAoYykpO2xldCBmPXRoaXMuX2F0QXBwbHlUb0Nzc1Byb3BlcnRpZXMobyxoKTt0PWAke2N9JHtmfSR7dX1gLER4Lmxhc3RJbmRleD1hK2YubGVuZ3RofXJldHVybiB0fV9hdEFwcGx5VG9Dc3NQcm9wZXJ0aWVzKHQscil7dD10LnJlcGxhY2UoWXZlLCIiKTtsZXQgbj1bXSxpPXRoaXMuX21hcC5nZXQodCk7aWYoaXx8KHRoaXMuX21hcC5zZXQodCx7fSksaT10aGlzLl9tYXAuZ2V0KHQpKSxpKXt0aGlzLl9jdXJyZW50RWxlbWVudCYmKGkuZGVwZW5kYW50c1t0aGlzLl9jdXJyZW50RWxlbWVudF09ITApO2xldCBvLGEscyxsPWkucHJvcGVydGllcztmb3IobyBpbiBsKXM9ciYmcltvXSxhPVtvLCI6IHZhcigiLHQsUEcsb10scyYmYS5wdXNoKCIsIixzLnJlcGxhY2UoRm10LCIiKSksYS5wdXNoKCIpIiksRm10LnRlc3QobFtvXSkmJmEucHVzaCgiICFpbXBvcnRhbnQiKSxuLnB1c2goYS5qb2luKCIiKSl9cmV0dXJuIG4uam9pbigiOyAiKX1fcmVwbGFjZUluaXRpYWxPckluaGVyaXQodCxyKXtsZXQgbj1qdmUuZXhlYyhyKTtyZXR1cm4gbiYmKG5bMV0/cj10aGlzLl9nZXRJbml0aWFsVmFsdWVGb3JQcm9wZXJ0eSh0KTpyPSJhcHBseS1zaGltLWluaGVyaXQiKSxyfV9jc3NUZXh0VG9NYXAodCxyPSExKXtsZXQgbj10LnNwbGl0KCI7IiksaSxvLGE9e307Zm9yKGxldCBzPTAsbCxjO3M8bi5sZW5ndGg7cysrKWw9bltzXSxsJiYoYz1sLnNwbGl0KCI6IiksYy5sZW5ndGg+MSYmKGk9Y1swXS50cmltKCksbz1jLnNsaWNlKDEpLmpvaW4oIjoiKSxyJiYobz10aGlzLl9yZXBsYWNlSW5pdGlhbE9ySW5oZXJpdChpLG8pKSxhW2ldPW8pKTtyZXR1cm4gYX1faW52YWxpZGF0ZU1peGluRW50cnkodCl7aWYoISFqSSlmb3IobGV0IHIgaW4gdC5kZXBlbmRhbnRzKXIhPT10aGlzLl9jdXJyZW50RWxlbWVudCYmakkocil9X3Byb2R1Y2VDc3NQcm9wZXJ0aWVzKHQscixuLGksbyl7aWYobiYmQ0cobiwoXyx5KT0+e3kmJnRoaXMuX21hcC5nZXQoeSkmJihpPWBAYXBwbHkgJHt5fTtgKX0pLCFpKXJldHVybiB0O2xldCBhPXRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKCIiK2ksbykscz10LnNsaWNlKDAsdC5pbmRleE9mKCItLSIpKSxsPXRoaXMuX2Nzc1RleHRUb01hcChhLCEwKSxjPWwsdT10aGlzLl9tYXAuZ2V0KHIpLGg9dSYmdS5wcm9wZXJ0aWVzO2g/Yz1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoaCksbCk6dGhpcy5fbWFwLnNldChyLGMpO2xldCBmPVtdLHAsZCxnPSExO2ZvcihwIGluIGMpZD1sW3BdLGQ9PT12b2lkIDAmJihkPSJpbml0aWFsIiksaCYmIShwIGluIGgpJiYoZz0hMCksZi5wdXNoKGAke3J9JHtQR30ke3B9OiAke2R9YCk7cmV0dXJuIGcmJnRoaXMuX2ludmFsaWRhdGVNaXhpbkVudHJ5KHUpLHUmJih1LnByb3BlcnRpZXM9YyksbiYmKHM9YCR7dH07JHtzfWApLGAke3N9JHtmLmpvaW4oIjsgIil9O2B9fTtEby5wcm90b3R5cGUuZGV0ZWN0TWl4aW49RG8ucHJvdG90eXBlLmRldGVjdE1peGluO0RvLnByb3RvdHlwZS50cmFuc2Zvcm1TdHlsZT1Eby5wcm90b3R5cGUudHJhbnNmb3JtU3R5bGU7RG8ucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1DdXN0b21TdHlsZTtEby5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM9RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGVzO0RvLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlO0RvLnByb3RvdHlwZS50cmFuc2Zvcm1UZW1wbGF0ZT1Eby5wcm90b3R5cGUudHJhbnNmb3JtVGVtcGxhdGU7RG8ucHJvdG90eXBlLl9zZXBhcmF0b3I9UEc7T2JqZWN0LmRlZmluZVByb3BlcnR5KERvLnByb3RvdHlwZSwiaW52YWxpZENhbGxiYWNrIix7Z2V0KCl7cmV0dXJuIGpJfSxzZXQoZSl7akk9ZX19KTt2YXIgQm10PURvO3ZhciBYdmU9e30sUU09WHZlO3ZhciBYST0iX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uIix6eD0iX2FwcGx5U2hpbU5leHRWZXJzaW9uIiwkST0iX2FwcGx5U2hpbVZhbGlkYXRpbmdWZXJzaW9uIiwkdmU9UHJvbWlzZS5yZXNvbHZlKCk7ZnVuY3Rpb24gSG10KGUpe2xldCB0PVFNW2VdO3QmJkt2ZSh0KX1mdW5jdGlvbiBLdmUoZSl7ZVtYSV09ZVtYSV18fDAsZVskSV09ZVskSV18fDAsZVt6eF09KGVbenhdfHwwKSsxfWZ1bmN0aW9uIExHKGUpe3JldHVybiBlW1hJXT09PWVbenhdfWZ1bmN0aW9uIFZtdChlKXtyZXR1cm4hTEcoZSkmJmVbJEldPT09ZVt6eF19ZnVuY3Rpb24gVW10KGUpe2VbJEldPWVbenhdLGUuX3ZhbGlkYXRpbmd8fChlLl92YWxpZGF0aW5nPSEwLCR2ZS50aGVuKGZ1bmN0aW9uKCl7ZVtYSV09ZVt6eF0sZS5fdmFsaWRhdGluZz0hMX0pKX12YXIga0c9bnVsbCxxbXQ9d2luZG93LkhUTUxJbXBvcnRzJiZ3aW5kb3cuSFRNTEltcG9ydHMud2hlblJlYWR5fHxudWxsLFJHO2Z1bmN0aW9uIEtJKGUpe3JlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3FtdD9xbXQoZSk6KGtHfHwoa0c9bmV3IFByb21pc2UodD0+e1JHPXR9KSxkb2N1bWVudC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIj9SRygpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLCgpPT57ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSImJlJHKCl9KSksa0cudGhlbihmdW5jdGlvbigpe2UmJmUoKX0pKX0pfXZhciBHbXQ9Il9fc2VlbkJ5U2hhZHlDU1MiLFpJPSJfX3NoYWR5Q1NTQ2FjaGVkU3R5bGUiLEpJPW51bGwsdEU9bnVsbCxabD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY3VzdG9tU3R5bGVzPVtdLHRoaXMuZW5xdWV1ZWQ9ITEsS0koKCk9Pnt3aW5kb3cuU2hhZHlDU1MuZmx1c2hDdXN0b21TdHlsZXMmJndpbmRvdy5TaGFkeUNTUy5mbHVzaEN1c3RvbVN0eWxlcygpfSl9ZW5xdWV1ZURvY3VtZW50VmFsaWRhdGlvbigpe3RoaXMuZW5xdWV1ZWR8fCF0RXx8KHRoaXMuZW5xdWV1ZWQ9ITAsS0kodEUpKX1hZGRDdXN0b21TdHlsZSh0KXt0W0dtdF18fCh0W0dtdF09ITAsdGhpcy5jdXN0b21TdHlsZXMucHVzaCh0KSx0aGlzLmVucXVldWVEb2N1bWVudFZhbGlkYXRpb24oKSl9Z2V0U3R5bGVGb3JDdXN0b21TdHlsZSh0KXtpZih0W1pJXSlyZXR1cm4gdFtaSV07bGV0IHI7cmV0dXJuIHQuZ2V0U3R5bGU/cj10LmdldFN0eWxlKCk6cj10LHJ9cHJvY2Vzc1N0eWxlcygpe2xldCB0PXRoaXMuY3VzdG9tU3R5bGVzO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2lmKG5bWkldKWNvbnRpbnVlO2xldCBpPXRoaXMuZ2V0U3R5bGVGb3JDdXN0b21TdHlsZShuKTtpZihpKXtsZXQgbz1pLl9fYXBwbGllZEVsZW1lbnR8fGk7SkkmJkpJKG8pLG5bWkldPW99fXJldHVybiB0fX07WmwucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlPVpsLnByb3RvdHlwZS5hZGRDdXN0b21TdHlsZTtabC5wcm90b3R5cGUuZ2V0U3R5bGVGb3JDdXN0b21TdHlsZT1abC5wcm90b3R5cGUuZ2V0U3R5bGVGb3JDdXN0b21TdHlsZTtabC5wcm90b3R5cGUucHJvY2Vzc1N0eWxlcz1abC5wcm90b3R5cGUucHJvY2Vzc1N0eWxlcztPYmplY3QuZGVmaW5lUHJvcGVydGllcyhabC5wcm90b3R5cGUse3RyYW5zZm9ybUNhbGxiYWNrOntnZXQoKXtyZXR1cm4gSkl9LHNldChlKXtKST1lfX0sdmFsaWRhdGVDYWxsYmFjazp7Z2V0KCl7cmV0dXJuIHRFfSxzZXQoZSl7bGV0IHQ9ITE7dEV8fCh0PSEwKSx0RT1lLHQmJnRoaXMuZW5xdWV1ZURvY3VtZW50VmFsaWRhdGlvbigpfX19KTt2YXIgZUU9bmV3IEJtdCxORz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2U9bnVsbCxlRS5pbnZhbGlkQ2FsbGJhY2s9SG10fWVuc3VyZSgpe3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2V8fHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSYmKHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2U9d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlLHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UudHJhbnNmb3JtQ2FsbGJhY2s9dD0+e2VFLnRyYW5zZm9ybUN1c3RvbVN0eWxlKHQpfSx0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnZhbGlkYXRlQ2FsbGJhY2s9KCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLmVucXVldWVkJiZ0aGlzLmZsdXNoQ3VzdG9tU3R5bGVzKCl9KX0pfXByZXBhcmVUZW1wbGF0ZSh0LHIpe2lmKHRoaXMuZW5zdXJlKCksQUcodCkpcmV0dXJuO1FNW3JdPXQ7bGV0IG49ZUUudHJhbnNmb3JtVGVtcGxhdGUodCxyKTt0Ll9zdHlsZUFzdD1ufWZsdXNoQ3VzdG9tU3R5bGVzKCl7aWYodGhpcy5lbnN1cmUoKSwhdGhpcy5jdXN0b21TdHlsZUludGVyZmFjZSlyZXR1cm47bGV0IHQ9dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5wcm9jZXNzU3R5bGVzKCk7aWYoISF0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLmVucXVldWVkKXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXSxpPXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZ2V0U3R5bGVGb3JDdXN0b21TdHlsZShuKTtpJiZlRS50cmFuc2Zvcm1DdXN0b21TdHlsZShpKX10aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLmVucXVldWVkPSExfX1zdHlsZVN1YnRyZWUodCxyKXtpZih0aGlzLmVuc3VyZSgpLHImJkpNKHQsciksdC5zaGFkb3dSb290KXt0aGlzLnN0eWxlRWxlbWVudCh0KTtsZXQgbj10LnNoYWRvd1Jvb3QuY2hpbGRyZW58fHQuc2hhZG93Um9vdC5jaGlsZE5vZGVzO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXRoaXMuc3R5bGVTdWJ0cmVlKG5baV0pfWVsc2V7bGV0IG49dC5jaGlsZHJlbnx8dC5jaGlsZE5vZGVzO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXRoaXMuc3R5bGVTdWJ0cmVlKG5baV0pfX1zdHlsZUVsZW1lbnQodCl7dGhpcy5lbnN1cmUoKTtsZXR7aXM6cn09Tm10KHQpLG49UU1bcl07aWYoIShuJiZBRyhuKSkmJm4mJiFMRyhuKSl7Vm10KG4pfHwodGhpcy5wcmVwYXJlVGVtcGxhdGUobixyKSxVbXQobikpO2xldCBpPXQuc2hhZG93Um9vdDtpZihpKXtsZXQgbz1pLnF1ZXJ5U2VsZWN0b3IoInN0eWxlIik7byYmKG8uX19jc3NSdWxlcz1uLl9zdHlsZUFzdCxvLnRleHRDb250ZW50PVpNKG4uX3N0eWxlQXN0KSl9fX1zdHlsZURvY3VtZW50KHQpe3RoaXMuZW5zdXJlKCksdGhpcy5zdHlsZVN1YnRyZWUoZG9jdW1lbnQuYm9keSx0KX19O2lmKCF3aW5kb3cuU2hhZHlDU1N8fCF3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0pe2xldCBlPW5ldyBORyx0PXdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlO3dpbmRvdy5TaGFkeUNTUz17cHJlcGFyZVRlbXBsYXRlKHIsbixpKXtlLmZsdXNoQ3VzdG9tU3R5bGVzKCksZS5wcmVwYXJlVGVtcGxhdGUocixuKX0scHJlcGFyZVRlbXBsYXRlU3R5bGVzKHIsbixpKXt3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlKHIsbixpKX0scHJlcGFyZVRlbXBsYXRlRG9tKHIsbil7fSxzdHlsZVN1YnRyZWUocixuKXtlLmZsdXNoQ3VzdG9tU3R5bGVzKCksZS5zdHlsZVN1YnRyZWUocixuKX0sc3R5bGVFbGVtZW50KHIpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlRWxlbWVudChyKX0sc3R5bGVEb2N1bWVudChyKXtlLmZsdXNoQ3VzdG9tU3R5bGVzKCksZS5zdHlsZURvY3VtZW50KHIpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWUocixuKXtyZXR1cm4gWUkocixuKX0sZmx1c2hDdXN0b21TdHlsZXMoKXtlLmZsdXNoQ3VzdG9tU3R5bGVzKCl9LG5hdGl2ZUNzczpOeCxuYXRpdmVTaGFkb3c6aF8sY3NzQnVpbGQ6TW0sZGlzYWJsZVJ1bnRpbWU6R0l9LHQmJih3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U9dCl9d2luZG93LlNoYWR5Q1NTLkFwcGx5U2hpbT1lRTt2YXIgc3I9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9hc3luY01vZHVsZT1udWxsLHRoaXMuX2NhbGxiYWNrPW51bGwsdGhpcy5fdGltZXI9bnVsbH1zZXRDb25maWcodCxyKXt0aGlzLl9hc3luY01vZHVsZT10LHRoaXMuX2NhbGxiYWNrPXIsdGhpcy5fdGltZXI9dGhpcy5fYXN5bmNNb2R1bGUucnVuKCgpPT57dGhpcy5fdGltZXI9bnVsbCxyRS5kZWxldGUodGhpcyksdGhpcy5fY2FsbGJhY2soKX0pfWNhbmNlbCgpe3RoaXMuaXNBY3RpdmUoKSYmKHRoaXMuX2NhbmNlbEFzeW5jKCksckUuZGVsZXRlKHRoaXMpKX1fY2FuY2VsQXN5bmMoKXt0aGlzLmlzQWN0aXZlKCkmJih0aGlzLl9hc3luY01vZHVsZS5jYW5jZWwodGhpcy5fdGltZXIpLHRoaXMuX3RpbWVyPW51bGwpfWZsdXNoKCl7dGhpcy5pc0FjdGl2ZSgpJiYodGhpcy5jYW5jZWwoKSx0aGlzLl9jYWxsYmFjaygpKX1pc0FjdGl2ZSgpe3JldHVybiB0aGlzLl90aW1lciE9bnVsbH1zdGF0aWMgZGVib3VuY2UodCxyLG4pe3JldHVybiB0IGluc3RhbmNlb2Ygc3I/dC5fY2FuY2VsQXN5bmMoKTp0PW5ldyBzcix0LnNldENvbmZpZyhyLG4pLHR9fSxyRT1uZXcgU2V0LEpsPWZ1bmN0aW9uKGUpe3JFLmFkZChlKX0sV210PWZ1bmN0aW9uKCl7bGV0IGU9Qm9vbGVhbihyRS5zaXplKTtyZXR1cm4gckUuZm9yRWFjaCh0PT57dHJ5e3QuZmx1c2goKX1jYXRjaChyKXtzZXRUaW1lb3V0KCgpPT57dGhyb3cgcn0pfX0pLGV9O3ZhciBGRz10eXBlb2YgZG9jdW1lbnQuaGVhZC5zdHlsZS50b3VjaEFjdGlvbj09InN0cmluZyIsdDk9Il9fcG9seW1lckdlc3R1cmVzIixRST0iX19wb2x5bWVyR2VzdHVyZXNIYW5kbGVkIixPRz0iX19wb2x5bWVyR2VzdHVyZXNUb3VjaEFjdGlvbiIsWW10PTI1LGptdD01LEp2ZT0yLFF2ZT0yNTAwLEptdD1bIm1vdXNlZG93biIsIm1vdXNlbW92ZSIsIm1vdXNldXAiLCJjbGljayJdLHR4ZT1bMCwxLDQsMl0sZXhlPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgTW91c2VFdmVudCgidGVzdCIse2J1dHRvbnM6MX0pLmJ1dHRvbnM9PT0xfWNhdGNoKGUpe3JldHVybiExfX0oKTtmdW5jdGlvbiBCRyhlKXtyZXR1cm4gSm10LmluZGV4T2YoZSk+LTF9dmFyIEhHPSExOyhmdW5jdGlvbigpe3RyeXtsZXQgZT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQoKXtIRz0hMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxlKX1jYXRjaChlKXt9fSkoKTtmdW5jdGlvbiBRbXQoZSl7aWYoIShCRyhlKXx8ZT09PSJ0b3VjaGVuZCIpJiZGRyYmSEcmJlVkdClyZXR1cm57cGFzc2l2ZTohMH19dmFyIHRndD1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OltvYV1kfGhvbmUpfEFuZHJvaWQvKSx6Rz1bXSxyeGU9e2J1dHRvbjohMCxpbnB1dDohMCxrZXlnZW46ITAsbWV0ZXI6ITAsb3V0cHV0OiEwLHRleHRhcmVhOiEwLHByb2dyZXNzOiEwLHNlbGVjdDohMH0sbnhlPXtidXR0b246ITAsY29tbWFuZDohMCxmaWVsZHNldDohMCxpbnB1dDohMCxrZXlnZW46ITAsb3B0Z3JvdXA6ITAsb3B0aW9uOiEwLHNlbGVjdDohMCx0ZXh0YXJlYTohMH07ZnVuY3Rpb24gaXhlKGUpe3JldHVybiByeGVbZS5sb2NhbE5hbWVdfHwhMX1mdW5jdGlvbiBveGUoZSl7bGV0IHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5sYWJlbHN8fFtdKTtpZighdC5sZW5ndGgpe3Q9W107bGV0IHI9ZS5nZXRSb290Tm9kZSgpO2lmKGUuaWQpe2xldCBuPXIucXVlcnlTZWxlY3RvckFsbChgbGFiZWxbZm9yID0gJHtlLmlkfV1gKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl0LnB1c2gobltpXSl9fXJldHVybiB0fXZhciBYbXQ9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5zb3VyY2VDYXBhYmlsaXRpZXM7aWYoISh0JiYhdC5maXJlc1RvdWNoRXZlbnRzKSYmKGVbUUldPXtza2lwOiEwfSxlLnR5cGU9PT0iY2xpY2siKSl7bGV0IHI9ITEsbj1yOShlKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7aWYobltpXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXtpZihuW2ldLmxvY2FsTmFtZT09PSJsYWJlbCIpekcucHVzaChuW2ldKTtlbHNlIGlmKGl4ZShuW2ldKSl7bGV0IG89b3hlKG5baV0pO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKXI9cnx8ekcuaW5kZXhPZihvW2FdKT4tMX19aWYobltpXT09PWlhLm1vdXNlLnRhcmdldClyZXR1cm59aWYocilyZXR1cm47ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCl9fTtmdW5jdGlvbiAkbXQoZSl7bGV0IHQ9dGd0P1siY2xpY2siXTpKbXQ7Zm9yKGxldCByPTAsbjtyPHQubGVuZ3RoO3IrKyluPXRbcl0sZT8oekcubGVuZ3RoPTAsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihuLFhtdCwhMCkpOmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobixYbXQsITApfWZ1bmN0aW9uIGF4ZShlKXtpZighaEcpcmV0dXJuO2lhLm1vdXNlLm1vdXNlSWdub3JlSm9ifHwkbXQoITApO2xldCB0PWZ1bmN0aW9uKCl7JG10KCksaWEubW91c2UudGFyZ2V0PW51bGwsaWEubW91c2UubW91c2VJZ25vcmVKb2I9bnVsbH07aWEubW91c2UudGFyZ2V0PXI5KGUpWzBdLGlhLm1vdXNlLm1vdXNlSWdub3JlSm9iPXNyLmRlYm91bmNlKGlhLm1vdXNlLm1vdXNlSWdub3JlSm9iLG1vLmFmdGVyKFF2ZSksdCl9ZnVuY3Rpb24gcF8oZSl7bGV0IHQ9ZS50eXBlO2lmKCFCRyh0KSlyZXR1cm4hMTtpZih0PT09Im1vdXNlbW92ZSIpe2xldCByPWUuYnV0dG9ucz09PXZvaWQgMD8xOmUuYnV0dG9ucztyZXR1cm4gZSBpbnN0YW5jZW9mIHdpbmRvdy5Nb3VzZUV2ZW50JiYhZXhlJiYocj10eGVbZS53aGljaF18fDApLEJvb2xlYW4ociYxKX1lbHNlIHJldHVybihlLmJ1dHRvbj09PXZvaWQgMD8wOmUuYnV0dG9uKT09PTB9ZnVuY3Rpb24gc3hlKGUpe2lmKGUudHlwZT09PSJjbGljayIpe2lmKGUuZGV0YWlsPT09MClyZXR1cm4hMDtsZXQgdD1fcChlKTtpZighdC5ub2RlVHlwZXx8dC5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiEwO2xldCByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1lLnBhZ2VYLGk9ZS5wYWdlWTtyZXR1cm4hKG4+PXIubGVmdCYmbjw9ci5yaWdodCYmaT49ci50b3AmJmk8PXIuYm90dG9tKX1yZXR1cm4hMX12YXIgaWE9e21vdXNlOnt0YXJnZXQ6bnVsbCxtb3VzZUlnbm9yZUpvYjpudWxsfSx0b3VjaDp7eDowLHk6MCxpZDotMSxzY3JvbGxEZWNpZGVkOiExfX07ZnVuY3Rpb24gbHhlKGUpe2xldCB0PSJhdXRvIixyPXI5KGUpO2ZvcihsZXQgbj0wLGk7bjxyLmxlbmd0aDtuKyspaWYoaT1yW25dLGlbT0ddKXt0PWlbT0ddO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGVndChlLHQscil7ZS5tb3ZlZm49dCxlLnVwZm49cixkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHQpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHIpfWZ1bmN0aW9uIEZ4KGUpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsZS5tb3ZlZm4pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGUudXBmbiksZS5tb3ZlZm49bnVsbCxlLnVwZm49bnVsbH1oRyYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGF4ZSxIRz97cGFzc2l2ZTohMH06ITEpO3ZhciByOT13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoP3dpbmRvdy5TaGFkeURPTS5jb21wb3NlZFBhdGg6ZT0+ZS5jb21wb3NlZFBhdGgmJmUuY29tcG9zZWRQYXRoKCl8fFtdLGlFPXt9LGZfPVtdO2Z1bmN0aW9uIGN4ZShlLHQpe2xldCByPWRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZSx0KSxuPXI7Zm9yKDtuJiZuLnNoYWRvd1Jvb3QmJiF3aW5kb3cuU2hhZHlET007KXtsZXQgaT1uO2lmKG49bi5zaGFkb3dSb290LmVsZW1lbnRGcm9tUG9pbnQoZSx0KSxpPT09bilicmVhaztuJiYocj1uKX1yZXR1cm4gcn1mdW5jdGlvbiBfcChlKXtsZXQgdD1yOShlKTtyZXR1cm4gdC5sZW5ndGg+MD90WzBdOmUudGFyZ2V0fWZ1bmN0aW9uIHJndChlKXtsZXQgdCxyPWUudHlwZSxpPWUuY3VycmVudFRhcmdldFt0OV07aWYoIWkpcmV0dXJuO2xldCBvPWlbcl07aWYoISFvKXtpZighZVtRSV0mJihlW1FJXT17fSxyLnNsaWNlKDAsNSk9PT0idG91Y2giKSl7ZT1lO2xldCBhPWUuY2hhbmdlZFRvdWNoZXNbMF07aWYocj09PSJ0b3VjaHN0YXJ0IiYmZS50b3VjaGVzLmxlbmd0aD09PTEmJihpYS50b3VjaC5pZD1hLmlkZW50aWZpZXIpLGlhLnRvdWNoLmlkIT09YS5pZGVudGlmaWVyKXJldHVybjtGR3x8KHI9PT0idG91Y2hzdGFydCJ8fHI9PT0idG91Y2htb3ZlIikmJnV4ZShlKX1pZih0PWVbUUldLCF0LnNraXApe2ZvcihsZXQgYT0wLHM7YTxmXy5sZW5ndGg7YSsrKXM9Zl9bYV0sb1tzLm5hbWVdJiYhdFtzLm5hbWVdJiZzLmZsb3cmJnMuZmxvdy5zdGFydC5pbmRleE9mKGUudHlwZSk+LTEmJnMucmVzZXQmJnMucmVzZXQoKTtmb3IobGV0IGE9MCxzO2E8Zl8ubGVuZ3RoO2ErKylzPWZfW2FdLG9bcy5uYW1lXSYmIXRbcy5uYW1lXSYmKHRbcy5uYW1lXT0hMCxzW3JdKGUpKX19fWZ1bmN0aW9uIHV4ZShlKXtsZXQgdD1lLmNoYW5nZWRUb3VjaGVzWzBdLHI9ZS50eXBlO2lmKHI9PT0idG91Y2hzdGFydCIpaWEudG91Y2gueD10LmNsaWVudFgsaWEudG91Y2gueT10LmNsaWVudFksaWEudG91Y2guc2Nyb2xsRGVjaWRlZD0hMTtlbHNlIGlmKHI9PT0idG91Y2htb3ZlIil7aWYoaWEudG91Y2guc2Nyb2xsRGVjaWRlZClyZXR1cm47aWEudG91Y2guc2Nyb2xsRGVjaWRlZD0hMDtsZXQgbj1seGUoZSksaT0hMSxvPU1hdGguYWJzKGlhLnRvdWNoLngtdC5jbGllbnRYKSxhPU1hdGguYWJzKGlhLnRvdWNoLnktdC5jbGllbnRZKTtlLmNhbmNlbGFibGUmJihuPT09Im5vbmUiP2k9ITA6bj09PSJwYW4teCI/aT1hPm86bj09PSJwYW4teSImJihpPW8+YSkpLGk/ZS5wcmV2ZW50RGVmYXVsdCgpOmU5KCJ0cmFjayIpfX1mdW5jdGlvbiBFbShlLHQscil7cmV0dXJuIGlFW3RdPyhoeGUoZSx0LHIpLCEwKTohMX1mdW5jdGlvbiBuZ3QoZSx0LHIpe3JldHVybiBpRVt0XT8oZnhlKGUsdCxyKSwhMCk6ITF9ZnVuY3Rpb24gaHhlKGUsdCxyKXtsZXQgbj1pRVt0XSxpPW4uZGVwcyxvPW4ubmFtZSxhPWVbdDldO2F8fChlW3Q5XT1hPXt9KTtmb3IobGV0IHM9MCxsLGM7czxpLmxlbmd0aDtzKyspbD1pW3NdLCEodGd0JiZCRyhsKSYmbCE9PSJjbGljayIpJiYoYz1hW2xdLGN8fChhW2xdPWM9e19jb3VudDowfSksYy5fY291bnQ9PT0wJiZlLmFkZEV2ZW50TGlzdGVuZXIobCxyZ3QsUW10KGwpKSxjW29dPShjW29dfHwwKSsxLGMuX2NvdW50PShjLl9jb3VudHx8MCkrMSk7ZS5hZGRFdmVudExpc3RlbmVyKHQsciksbi50b3VjaEFjdGlvbiYmZF8oZSxuLnRvdWNoQWN0aW9uKX1mdW5jdGlvbiBmeGUoZSx0LHIpe2xldCBuPWlFW3RdLGk9bi5kZXBzLG89bi5uYW1lLGE9ZVt0OV07aWYoYSlmb3IobGV0IHM9MCxsLGM7czxpLmxlbmd0aDtzKyspbD1pW3NdLGM9YVtsXSxjJiZjW29dJiYoY1tvXT0oY1tvXXx8MSktMSxjLl9jb3VudD0oYy5fY291bnR8fDEpLTEsYy5fY291bnQ9PT0wJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxyZ3QsUW10KGwpKSk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQscil9ZnVuY3Rpb24gVkcoZSl7Zl8ucHVzaChlKTtmb3IobGV0IHQ9MDt0PGUuZW1pdHMubGVuZ3RoO3QrKylpRVtlLmVtaXRzW3RdXT1lfWZ1bmN0aW9uIHB4ZShlKXtmb3IobGV0IHQ9MCxyO3Q8Zl8ubGVuZ3RoO3QrKyl7cj1mX1t0XTtmb3IobGV0IG49MCxpO248ci5lbWl0cy5sZW5ndGg7bisrKWlmKGk9ci5lbWl0c1tuXSxpPT09ZSlyZXR1cm4gcn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBkXyhlLHQpe0ZHJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmNpLnJ1bigoKT0+e2Uuc3R5bGUudG91Y2hBY3Rpb249dH0pLGVbT0ddPXR9ZnVuY3Rpb24gVUcoZSx0LHIpe2xldCBuPW5ldyBFdmVudCh0LHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsY29tcG9zZWQ6ITB9KTtpZihuLmRldGFpbD1yLHVlKGUpLmRpc3BhdGNoRXZlbnQobiksbi5kZWZhdWx0UHJldmVudGVkKXtsZXQgaT1yLnByZXZlbnRlcnx8ci5zb3VyY2VFdmVudDtpJiZpLnByZXZlbnREZWZhdWx0JiZpLnByZXZlbnREZWZhdWx0KCl9fWZ1bmN0aW9uIGU5KGUpe2xldCB0PXB4ZShlKTt0LmluZm8mJih0LmluZm8ucHJldmVudD0hMCl9Vkcoe25hbWU6ImRvd251cCIsZGVwczpbIm1vdXNlZG93biIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCJdLGZsb3c6e3N0YXJ0OlsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLGVuZDpbIm1vdXNldXAiLCJ0b3VjaGVuZCJdfSxlbWl0czpbImRvd24iLCJ1cCJdLGluZm86e21vdmVmbjpudWxsLHVwZm46bnVsbH0scmVzZXQ6ZnVuY3Rpb24oKXtGeCh0aGlzLmluZm8pfSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7aWYoIXBfKGUpKXJldHVybjtsZXQgdD1fcChlKSxyPXRoaXMsbj1mdW5jdGlvbihhKXtwXyhhKXx8KG5FKCJ1cCIsdCxhKSxGeChyLmluZm8pKX0saT1mdW5jdGlvbihhKXtwXyhhKSYmbkUoInVwIix0LGEpLEZ4KHIuaW5mbyl9O2VndCh0aGlzLmluZm8sbixpKSxuRSgiZG93biIsdCxlKX0sdG91Y2hzdGFydDpmdW5jdGlvbihlKXtuRSgiZG93biIsX3AoZSksZS5jaGFuZ2VkVG91Y2hlc1swXSxlKX0sdG91Y2hlbmQ6ZnVuY3Rpb24oZSl7bkUoInVwIixfcChlKSxlLmNoYW5nZWRUb3VjaGVzWzBdLGUpfX0pO2Z1bmN0aW9uIG5FKGUsdCxyLG4peyF0fHxVRyh0LGUse3g6ci5jbGllbnRYLHk6ci5jbGllbnRZLHNvdXJjZUV2ZW50OnIscHJldmVudGVyOm4scHJldmVudDpmdW5jdGlvbihpKXtyZXR1cm4gZTkoaSl9fSl9Vkcoe25hbWU6InRyYWNrIix0b3VjaEFjdGlvbjoibm9uZSIsZGVwczpbIm1vdXNlZG93biIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCJdLGZsb3c6e3N0YXJ0OlsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLGVuZDpbIm1vdXNldXAiLCJ0b3VjaGVuZCJdfSxlbWl0czpbInRyYWNrIl0saW5mbzp7eDowLHk6MCxzdGF0ZToic3RhcnQiLHN0YXJ0ZWQ6ITEsbW92ZXM6W10sYWRkTW92ZTpmdW5jdGlvbihlKXt0aGlzLm1vdmVzLmxlbmd0aD5KdmUmJnRoaXMubW92ZXMuc2hpZnQoKSx0aGlzLm1vdmVzLnB1c2goZSl9LG1vdmVmbjpudWxsLHVwZm46bnVsbCxwcmV2ZW50OiExfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5mby5zdGF0ZT0ic3RhcnQiLHRoaXMuaW5mby5zdGFydGVkPSExLHRoaXMuaW5mby5tb3Zlcz1bXSx0aGlzLmluZm8ueD0wLHRoaXMuaW5mby55PTAsdGhpcy5pbmZvLnByZXZlbnQ9ITEsRngodGhpcy5pbmZvKX0sbW91c2Vkb3duOmZ1bmN0aW9uKGUpe2lmKCFwXyhlKSlyZXR1cm47bGV0IHQ9X3AoZSkscj10aGlzLG49ZnVuY3Rpb24oYSl7bGV0IHM9YS5jbGllbnRYLGw9YS5jbGllbnRZO0ttdChyLmluZm8scyxsKSYmKHIuaW5mby5zdGF0ZT1yLmluZm8uc3RhcnRlZD9hLnR5cGU9PT0ibW91c2V1cCI/ImVuZCI6InRyYWNrIjoic3RhcnQiLHIuaW5mby5zdGF0ZT09PSJzdGFydCImJmU5KCJ0YXAiKSxyLmluZm8uYWRkTW92ZSh7eDpzLHk6bH0pLHBfKGEpfHwoci5pbmZvLnN0YXRlPSJlbmQiLEZ4KHIuaW5mbykpLHQmJkRHKHIuaW5mbyx0LGEpLHIuaW5mby5zdGFydGVkPSEwKX0saT1mdW5jdGlvbihhKXtyLmluZm8uc3RhcnRlZCYmbihhKSxGeChyLmluZm8pfTtlZ3QodGhpcy5pbmZvLG4saSksdGhpcy5pbmZvLng9ZS5jbGllbnRYLHRoaXMuaW5mby55PWUuY2xpZW50WX0sdG91Y2hzdGFydDpmdW5jdGlvbihlKXtsZXQgdD1lLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PXQuY2xpZW50WCx0aGlzLmluZm8ueT10LmNsaWVudFl9LHRvdWNobW92ZTpmdW5jdGlvbihlKXtsZXQgdD1fcChlKSxyPWUuY2hhbmdlZFRvdWNoZXNbMF0sbj1yLmNsaWVudFgsaT1yLmNsaWVudFk7S210KHRoaXMuaW5mbyxuLGkpJiYodGhpcy5pbmZvLnN0YXRlPT09InN0YXJ0IiYmZTkoInRhcCIpLHRoaXMuaW5mby5hZGRNb3ZlKHt4Om4seTppfSksREcodGhpcy5pbmZvLHQsciksdGhpcy5pbmZvLnN0YXRlPSJ0cmFjayIsdGhpcy5pbmZvLnN0YXJ0ZWQ9ITApfSx0b3VjaGVuZDpmdW5jdGlvbihlKXtsZXQgdD1fcChlKSxyPWUuY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5pbmZvLnN0YXJ0ZWQmJih0aGlzLmluZm8uc3RhdGU9ImVuZCIsdGhpcy5pbmZvLmFkZE1vdmUoe3g6ci5jbGllbnRYLHk6ci5jbGllbnRZfSksREcodGhpcy5pbmZvLHQscikpfX0pO2Z1bmN0aW9uIEttdChlLHQscil7aWYoZS5wcmV2ZW50KXJldHVybiExO2lmKGUuc3RhcnRlZClyZXR1cm4hMDtsZXQgbj1NYXRoLmFicyhlLngtdCksaT1NYXRoLmFicyhlLnktcik7cmV0dXJuIG4+PWptdHx8aT49am10fWZ1bmN0aW9uIERHKGUsdCxyKXtpZighdClyZXR1cm47bGV0IG49ZS5tb3Zlc1tlLm1vdmVzLmxlbmd0aC0yXSxpPWUubW92ZXNbZS5tb3Zlcy5sZW5ndGgtMV0sbz1pLngtZS54LGE9aS55LWUueSxzLGw9MDtuJiYocz1pLngtbi54LGw9aS55LW4ueSksVUcodCwidHJhY2siLHtzdGF0ZTplLnN0YXRlLHg6ci5jbGllbnRYLHk6ci5jbGllbnRZLGR4Om8sZHk6YSxkZHg6cyxkZHk6bCxzb3VyY2VFdmVudDpyLGhvdmVyOmZ1bmN0aW9uKCl7cmV0dXJuIGN4ZShyLmNsaWVudFgsci5jbGllbnRZKX19KX1WRyh7bmFtZToidGFwIixkZXBzOlsibW91c2Vkb3duIiwiY2xpY2siLCJ0b3VjaHN0YXJ0IiwidG91Y2hlbmQiXSxmbG93OntzdGFydDpbIm1vdXNlZG93biIsInRvdWNoc3RhcnQiXSxlbmQ6WyJjbGljayIsInRvdWNoZW5kIl19LGVtaXRzOlsidGFwIl0saW5mbzp7eDpOYU4seTpOYU4scHJldmVudDohMX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmluZm8ueD1OYU4sdGhpcy5pbmZvLnk9TmFOLHRoaXMuaW5mby5wcmV2ZW50PSExfSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7cF8oZSkmJih0aGlzLmluZm8ueD1lLmNsaWVudFgsdGhpcy5pbmZvLnk9ZS5jbGllbnRZKX0sY2xpY2s6ZnVuY3Rpb24oZSl7cF8oZSkmJlptdCh0aGlzLmluZm8sZSl9LHRvdWNoc3RhcnQ6ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmluZm8ueD10LmNsaWVudFgsdGhpcy5pbmZvLnk9dC5jbGllbnRZfSx0b3VjaGVuZDpmdW5jdGlvbihlKXtabXQodGhpcy5pbmZvLGUuY2hhbmdlZFRvdWNoZXNbMF0sZSl9fSk7ZnVuY3Rpb24gWm10KGUsdCxyKXtsZXQgbj1NYXRoLmFicyh0LmNsaWVudFgtZS54KSxpPU1hdGguYWJzKHQuY2xpZW50WS1lLnkpLG89X3Aocnx8dCk7IW98fG54ZVtvLmxvY2FsTmFtZV0mJm8uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHwoaXNOYU4obil8fGlzTmFOKGkpfHxuPD1ZbXQmJmk8PVltdHx8c3hlKHQpKSYmKGUucHJldmVudHx8VUcobywidGFwIix7eDp0LmNsaWVudFgseTp0LmNsaWVudFksc291cmNlRXZlbnQ6dCxwcmV2ZW50ZXI6cn0pKX12YXIgaWd0PV9wO3ZhciB5aD1ObihlPT57Y2xhc3MgdCBleHRlbmRzIGV7X2FkZEV2ZW50TGlzdGVuZXJUb05vZGUobixpLG8pe0VtKG4saSxvKXx8c3VwZXIuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUobixpLG8pfV9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUobixpLG8pe25ndChuLGksbyl8fHN1cGVyLl9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUobixpLG8pfX1yZXR1cm4gdH0pO3ZhciBkeGU9Lzpob3N0XCg6ZGlyXCgobHRyfHJ0bClcKVwpL2csbXhlPSc6aG9zdChbZGlyPSIkMSJdKScsZ3hlPS8oW1xzXHctI1wuXFtcXVwqXSopOmRpclwoKGx0cnxydGwpXCkvZyxfeGU9Jzpob3N0KFtkaXI9IiQyIl0pICQxJyx5eGU9LzpkaXJcKCg/Omx0cnxydGwpXCkvLGFndD1Cb29sZWFuKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKSxvRT1bXSxhRT1udWxsLHFHPSIiO2Z1bmN0aW9uIHNndCgpe3FHPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpfWZ1bmN0aW9uIGxndChlKXtlLl9fYXV0b0Rpck9wdE91dHx8ZS5zZXRBdHRyaWJ1dGUoImRpciIscUcpfWZ1bmN0aW9uIGNndCgpe3NndCgpLHFHPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpO2ZvcihsZXQgZT0wO2U8b0UubGVuZ3RoO2UrKylsZ3Qob0VbZV0pfWZ1bmN0aW9uIHZ4ZSgpe2FFJiZhRS50YWtlUmVjb3JkcygpLmxlbmd0aCYmY2d0KCl9dmFyIHVndD1ObihlPT57YWd0fHxhRXx8KHNndCgpLGFFPW5ldyBNdXRhdGlvbk9ic2VydmVyKGNndCksYUUub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQse2F0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsiZGlyIl19KSk7bGV0IHQ9QkkoZSk7Y2xhc3MgciBleHRlbmRzIHR7c3RhdGljIF9wcm9jZXNzU3R5bGVUZXh0KGksbyl7cmV0dXJuIGk9dC5fcHJvY2Vzc1N0eWxlVGV4dC5jYWxsKHRoaXMsaSxvKSwhYWd0JiZ5eGUudGVzdChpKSYmKGk9dGhpcy5fcmVwbGFjZURpckluQ3NzVGV4dChpKSx0aGlzLl9fYWN0aXZhdGVEaXI9ITApLGl9c3RhdGljIF9yZXBsYWNlRGlySW5Dc3NUZXh0KGkpe2xldCBvPWk7cmV0dXJuIG89by5yZXBsYWNlKGR4ZSxteGUpLG89by5yZXBsYWNlKGd4ZSxfeGUpLG99Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19hdXRvRGlyT3B0T3V0PSExfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9fYXV0b0Rpck9wdE91dD10aGlzLmhhc0F0dHJpYnV0ZSgiZGlyIil9Y29ubmVjdGVkQ2FsbGJhY2soKXt0LnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmNvbnN0cnVjdG9yLl9fYWN0aXZhdGVEaXImJih2eGUoKSxvRS5wdXNoKHRoaXMpLGxndCh0aGlzKSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtpZih0LnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmNvbnN0cnVjdG9yLl9fYWN0aXZhdGVEaXIpe2xldCBpPW9FLmluZGV4T2YodGhpcyk7aT4tMSYmb0Uuc3BsaWNlKGksMSl9fX1yZXR1cm4gci5fX2FjdGl2YXRlRGlyPSExLHJ9KTt2YXIgbjk9ITEsaGd0PVtdLGZndD1bXTtmdW5jdGlvbiBwZ3QoKXtuOT0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtuOT0hMSx4eGUoaGd0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YnhlKGZndCl9KX0pfWZ1bmN0aW9uIHh4ZShlKXtmb3IoO2UubGVuZ3RoOylkZ3QoZS5zaGlmdCgpKX1mdW5jdGlvbiBieGUoZSl7Zm9yKGxldCB0PTAscj1lLmxlbmd0aDt0PHI7dCsrKWRndChlLnNoaWZ0KCkpfWZ1bmN0aW9uIGRndChlKXtsZXQgdD1lWzBdLHI9ZVsxXSxuPWVbMl07dHJ5e3IuYXBwbHkodCxuKX1jYXRjaChpKXtzZXRUaW1lb3V0KCgpPT57dGhyb3cgaX0pfX1mdW5jdGlvbiBtZ3QoZSx0LHIpe245fHxwZ3QoKSxoZ3QucHVzaChbZSx0LHJdKX1mdW5jdGlvbiBUbShlLHQscil7bjl8fHBndCgpLGZndC5wdXNoKFtlLHQscl0pfWZ1bmN0aW9uIGdndCgpe2RvY3VtZW50LmJvZHkucmVtb3ZlQXR0cmlidXRlKCJ1bnJlc29sdmVkIil9ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJpbnRlcmFjdGl2ZSJ8fGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiP2dndCgpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixnZ3QpO2Z1bmN0aW9uIHNFKGUsdCxyKXtyZXR1cm57aW5kZXg6ZSxyZW1vdmVkOnQsYWRkZWRDb3VudDpyfX12YXIgX2d0PTAseWd0PTEsR0c9MixXRz0zO2Z1bmN0aW9uIHd4ZShlLHQscixuLGksbyl7bGV0IGE9by1pKzEscz1yLXQrMSxsPW5ldyBBcnJheShhKTtmb3IobGV0IGM9MDtjPGE7YysrKWxbY109bmV3IEFycmF5KHMpLGxbY11bMF09Yztmb3IobGV0IGM9MDtjPHM7YysrKWxbMF1bY109Yztmb3IobGV0IGM9MTtjPGE7YysrKWZvcihsZXQgdT0xO3U8czt1KyspaWYoWUcoZVt0K3UtMV0sbltpK2MtMV0pKWxbY11bdV09bFtjLTFdW3UtMV07ZWxzZXtsZXQgaD1sW2MtMV1bdV0rMSxmPWxbY11bdS0xXSsxO2xbY11bdV09aDxmP2g6Zn1yZXR1cm4gbH1mdW5jdGlvbiBTeGUoZSl7bGV0IHQ9ZS5sZW5ndGgtMSxyPWVbMF0ubGVuZ3RoLTEsbj1lW3RdW3JdLGk9W107Zm9yKDt0PjB8fHI+MDspe2lmKHQ9PTApe2kucHVzaChHRyksci0tO2NvbnRpbnVlfWlmKHI9PTApe2kucHVzaChXRyksdC0tO2NvbnRpbnVlfWxldCBvPWVbdC0xXVtyLTFdLGE9ZVt0LTFdW3JdLHM9ZVt0XVtyLTFdLGw7YTxzP2w9YTxvP2E6bzpsPXM8bz9zOm8sbD09bz8obz09bj9pLnB1c2goX2d0KTooaS5wdXNoKHlndCksbj1vKSx0LS0sci0tKTpsPT1hPyhpLnB1c2goV0cpLHQtLSxuPWEpOihpLnB1c2goR0cpLHItLSxuPXMpfXJldHVybiBpLnJldmVyc2UoKSxpfWZ1bmN0aW9uIE14ZShlLHQscixuLGksbyl7bGV0IGE9MCxzPTAsbCxjPU1hdGgubWluKHItdCxvLWkpO2lmKHQ9PTAmJmk9PTAmJihhPUV4ZShlLG4sYykpLHI9PWUubGVuZ3RoJiZvPT1uLmxlbmd0aCYmKHM9VHhlKGUsbixjLWEpKSx0Kz1hLGkrPWEsci09cyxvLT1zLHItdD09MCYmby1pPT0wKXJldHVybltdO2lmKHQ9PXIpe2ZvcihsPXNFKHQsW10sMCk7aTxvOylsLnJlbW92ZWQucHVzaChuW2krK10pO3JldHVybltsXX1lbHNlIGlmKGk9PW8pcmV0dXJuW3NFKHQsW10sci10KV07bGV0IHU9U3hlKHd4ZShlLHQscixuLGksbykpO2w9dm9pZCAwO2xldCBoPVtdLGY9dCxwPWk7Zm9yKGxldCBkPTA7ZDx1Lmxlbmd0aDtkKyspc3dpdGNoKHVbZF0pe2Nhc2UgX2d0OmwmJihoLnB1c2gobCksbD12b2lkIDApLGYrKyxwKys7YnJlYWs7Y2FzZSB5Z3Q6bHx8KGw9c0UoZixbXSwwKSksbC5hZGRlZENvdW50KyssZisrLGwucmVtb3ZlZC5wdXNoKG5bcF0pLHArKzticmVhaztjYXNlIEdHOmx8fChsPXNFKGYsW10sMCkpLGwuYWRkZWRDb3VudCsrLGYrKzticmVhaztjYXNlIFdHOmx8fChsPXNFKGYsW10sMCkpLGwucmVtb3ZlZC5wdXNoKG5bcF0pLHArKzticmVha31yZXR1cm4gbCYmaC5wdXNoKGwpLGh9ZnVuY3Rpb24gRXhlKGUsdCxyKXtmb3IobGV0IG49MDtuPHI7bisrKWlmKCFZRyhlW25dLHRbbl0pKXJldHVybiBuO3JldHVybiByfWZ1bmN0aW9uIFR4ZShlLHQscil7bGV0IG49ZS5sZW5ndGgsaT10Lmxlbmd0aCxvPTA7Zm9yKDtvPHImJllHKGVbLS1uXSx0Wy0taV0pOylvKys7cmV0dXJuIG99ZnVuY3Rpb24gaTkoZSx0KXtyZXR1cm4gTXhlKGUsMCxlLmxlbmd0aCx0LDAsdC5sZW5ndGgpfWZ1bmN0aW9uIFlHKGUsdCl7cmV0dXJuIGU9PT10fWZ1bmN0aW9uIEJ4KGUpe3JldHVybiBlLmxvY2FsTmFtZT09PSJzbG90In12YXIgdmg9Y2xhc3N7c3RhdGljIGdldEZsYXR0ZW5lZE5vZGVzKGUpe2xldCB0PXVlKGUpO3JldHVybiBCeChlKT8oZT1lLHQuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjohMH0pKTpBcnJheS5mcm9tKHQuY2hpbGROb2RlcykubWFwKHI9PkJ4KHIpPyhyPXIsdWUocikuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjohMH0pKTpbcl0pLnJlZHVjZSgocixuKT0+ci5jb25jYXQobiksW10pfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPW51bGwsdGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj1udWxsLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLl90YXJnZXQ9ZSx0aGlzLmNhbGxiYWNrPXQsdGhpcy5fZWZmZWN0aXZlTm9kZXM9W10sdGhpcy5fb2JzZXJ2ZXI9bnVsbCx0aGlzLl9zY2hlZHVsZWQ9ITEsdGhpcy5fYm91bmRTY2hlZHVsZT0oKT0+e3RoaXMuX3NjaGVkdWxlKCl9LHRoaXMuY29ubmVjdCgpLHRoaXMuX3NjaGVkdWxlKCl9Y29ubmVjdCgpe0J4KHRoaXMuX3RhcmdldCk/dGhpcy5fbGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOnVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4mJih0aGlzLl9saXN0ZW5TbG90cyh1ZSh0aGlzLl90YXJnZXQpLmNoaWxkcmVuKSx3aW5kb3cuU2hhZHlET00/dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPXdpbmRvdy5TaGFkeURPTS5vYnNlcnZlQ2hpbGRyZW4odGhpcy5fdGFyZ2V0LGU9Pnt0aGlzLl9wcm9jZXNzTXV0YXRpb25zKGUpfSk6KHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZT0+e3RoaXMuX3Byb2Nlc3NNdXRhdGlvbnMoZSl9KSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyLm9ic2VydmUodGhpcy5fdGFyZ2V0LHtjaGlsZExpc3Q6ITB9KSkpLHRoaXMuX2Nvbm5lY3RlZD0hMH1kaXNjb25uZWN0KCl7QngodGhpcy5fdGFyZ2V0KT90aGlzLl91bmxpc3RlblNsb3RzKFt0aGlzLl90YXJnZXRdKTp1ZSh0aGlzLl90YXJnZXQpLmNoaWxkcmVuJiYodGhpcy5fdW5saXN0ZW5TbG90cyh1ZSh0aGlzLl90YXJnZXQpLmNoaWxkcmVuKSx3aW5kb3cuU2hhZHlET00mJnRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlcj8od2luZG93LlNoYWR5RE9NLnVub2JzZXJ2ZUNoaWxkcmVuKHRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlciksdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPW51bGwpOnRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXImJih0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyPW51bGwpKSx0aGlzLl9jb25uZWN0ZWQ9ITF9X3NjaGVkdWxlKCl7dGhpcy5fc2NoZWR1bGVkfHwodGhpcy5fc2NoZWR1bGVkPSEwLGNpLnJ1bigoKT0+dGhpcy5mbHVzaCgpKSl9X3Byb2Nlc3NNdXRhdGlvbnMoZSl7dGhpcy5fcHJvY2Vzc1Nsb3RNdXRhdGlvbnMoZSksdGhpcy5mbHVzaCgpfV9wcm9jZXNzU2xvdE11dGF0aW9ucyhlKXtpZihlKWZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgcj1lW3RdO3IuYWRkZWROb2RlcyYmdGhpcy5fbGlzdGVuU2xvdHMoci5hZGRlZE5vZGVzKSxyLnJlbW92ZWROb2RlcyYmdGhpcy5fdW5saXN0ZW5TbG90cyhyLnJlbW92ZWROb2Rlcyl9fWZsdXNoKCl7aWYoIXRoaXMuX2Nvbm5lY3RlZClyZXR1cm4hMTt3aW5kb3cuU2hhZHlET00mJlNoYWR5RE9NLmZsdXNoKCksdGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj90aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyLnRha2VSZWNvcmRzKCkpOnRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlciYmdGhpcy5fcHJvY2Vzc1Nsb3RNdXRhdGlvbnModGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyLnRha2VSZWNvcmRzKCkpLHRoaXMuX3NjaGVkdWxlZD0hMTtsZXQgZT17dGFyZ2V0OnRoaXMuX3RhcmdldCxhZGRlZE5vZGVzOltdLHJlbW92ZWROb2RlczpbXX0sdD10aGlzLmNvbnN0cnVjdG9yLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMuX3RhcmdldCkscj1pOSh0LHRoaXMuX2VmZmVjdGl2ZU5vZGVzKTtmb3IobGV0IGk9MCxvO2k8ci5sZW5ndGgmJihvPXJbaV0pO2krKylmb3IobGV0IGE9MCxzO2E8by5yZW1vdmVkLmxlbmd0aCYmKHM9by5yZW1vdmVkW2FdKTthKyspZS5yZW1vdmVkTm9kZXMucHVzaChzKTtmb3IobGV0IGk9MCxvO2k8ci5sZW5ndGgmJihvPXJbaV0pO2krKylmb3IobGV0IGE9by5pbmRleDthPG8uaW5kZXgrby5hZGRlZENvdW50O2ErKyllLmFkZGVkTm9kZXMucHVzaCh0W2FdKTt0aGlzLl9lZmZlY3RpdmVOb2Rlcz10O2xldCBuPSExO3JldHVybihlLmFkZGVkTm9kZXMubGVuZ3RofHxlLnJlbW92ZWROb2Rlcy5sZW5ndGgpJiYobj0hMCx0aGlzLmNhbGxiYWNrLmNhbGwodGhpcy5fdGFyZ2V0LGUpKSxufV9saXN0ZW5TbG90cyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XTtCeChyKSYmci5hZGRFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl9ib3VuZFNjaGVkdWxlKX19X3VubGlzdGVuU2xvdHMoZSl7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07QngocikmJnIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2xvdGNoYW5nZSIsdGhpcy5fYm91bmRTY2hlZHVsZSl9fX07dmFyIHVpPWZ1bmN0aW9uKCl7bGV0IGUsdDtkbyBlPXdpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSYmd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltLmZsdXNoKCksdD1XbXQoKTt3aGlsZShlfHx0KX07dmFyIEh4PUVsZW1lbnQucHJvdG90eXBlLEN4ZT1IeC5tYXRjaGVzfHxIeC5tYXRjaGVzU2VsZWN0b3J8fEh4Lm1vek1hdGNoZXNTZWxlY3Rvcnx8SHgubXNNYXRjaGVzU2VsZWN0b3J8fEh4Lm9NYXRjaGVzU2VsZWN0b3J8fEh4LndlYmtpdE1hdGNoZXNTZWxlY3RvcixYRz1mdW5jdGlvbihlLHQpe3JldHVybiBDeGUuY2FsbChlLHQpfSxLcj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5pblVzZSYmd2luZG93LlNoYWR5RE9NLnBhdGNoKHQpLHRoaXMubm9kZT10fW9ic2VydmVOb2Rlcyh0KXtyZXR1cm4gbmV3IHZoKHRoaXMubm9kZSx0KX11bm9ic2VydmVOb2Rlcyh0KXt0LmRpc2Nvbm5lY3QoKX1ub3RpZnlPYnNlcnZlcigpe31kZWVwQ29udGFpbnModCl7aWYodWUodGhpcy5ub2RlKS5jb250YWlucyh0KSlyZXR1cm4hMDtsZXQgcj10LG49dC5vd25lckRvY3VtZW50O2Zvcig7ciYmciE9PW4mJnIhPT10aGlzLm5vZGU7KXI9dWUocikucGFyZW50Tm9kZXx8dWUocikuaG9zdDtyZXR1cm4gcj09PXRoaXMubm9kZX1nZXRPd25lclJvb3QoKXtyZXR1cm4gdWUodGhpcy5ub2RlKS5nZXRSb290Tm9kZSgpfWdldERpc3RyaWJ1dGVkTm9kZXMoKXtyZXR1cm4gdGhpcy5ub2RlLmxvY2FsTmFtZT09PSJzbG90Ij91ZSh0aGlzLm5vZGUpLmFzc2lnbmVkTm9kZXMoe2ZsYXR0ZW46ITB9KTpbXX1nZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cygpe2xldCB0PVtdLHI9dWUodGhpcy5ub2RlKS5hc3NpZ25lZFNsb3Q7Zm9yKDtyOyl0LnB1c2gocikscj11ZShyKS5hc3NpZ25lZFNsb3Q7cmV0dXJuIHR9aW1wb3J0Tm9kZSh0LHIpe2xldCBuPXRoaXMubm9kZSBpbnN0YW5jZW9mIERvY3VtZW50P3RoaXMubm9kZTp0aGlzLm5vZGUub3duZXJEb2N1bWVudDtyZXR1cm4gdWUobikuaW1wb3J0Tm9kZSh0LHIpfWdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKXtyZXR1cm4gdmguZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5ub2RlKX1xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModCl7bGV0IHI9dGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCksbj1bXTtmb3IobGV0IGk9MCxvPXIubGVuZ3RoLGE7aTxvJiYoYT1yW2ldKTtpKyspYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZYRyhhLHQpJiZuLnB1c2goYSk7cmV0dXJuIG59Z2V0IGFjdGl2ZUVsZW1lbnQoKXtsZXQgdD10aGlzLm5vZGU7cmV0dXJuIHQuX2FjdGl2ZUVsZW1lbnQhPT12b2lkIDA/dC5fYWN0aXZlRWxlbWVudDp0LmFjdGl2ZUVsZW1lbnR9fTtmdW5jdGlvbiBBeGUoZSx0KXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXTtlW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVtuXS5hcHBseSh0aGlzLm5vZGUsYXJndW1lbnRzKX19fWZ1bmN0aW9uIHZndChlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbbl19LGNvbmZpZ3VyYWJsZTohMH0pfX1mdW5jdGlvbiBQeGUoZSx0KXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW25dfSxzZXQ6ZnVuY3Rpb24oaSl7dGhpcy5ub2RlW25dPWl9LGNvbmZpZ3VyYWJsZTohMH0pfX12YXIgbEU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5ldmVudD10fWdldCByb290VGFyZ2V0KCl7cmV0dXJuIHRoaXMucGF0aFswXX1nZXQgbG9jYWxUYXJnZXQoKXtyZXR1cm4gdGhpcy5ldmVudC50YXJnZXR9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5ldmVudC5jb21wb3NlZFBhdGgoKX19O0tyLnByb3RvdHlwZS5jbG9uZU5vZGU7S3IucHJvdG90eXBlLmFwcGVuZENoaWxkO0tyLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU7S3IucHJvdG90eXBlLnJlbW92ZUNoaWxkO0tyLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQ7S3IucHJvdG90eXBlLnNldEF0dHJpYnV0ZTtLci5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlO0tyLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yO0tyLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsO0tyLnByb3RvdHlwZS5wYXJlbnROb2RlO0tyLnByb3RvdHlwZS5maXJzdENoaWxkO0tyLnByb3RvdHlwZS5sYXN0Q2hpbGQ7S3IucHJvdG90eXBlLm5leHRTaWJsaW5nO0tyLnByb3RvdHlwZS5wcmV2aW91c1NpYmxpbmc7S3IucHJvdG90eXBlLmZpcnN0RWxlbWVudENoaWxkO0tyLnByb3RvdHlwZS5sYXN0RWxlbWVudENoaWxkO0tyLnByb3RvdHlwZS5uZXh0RWxlbWVudFNpYmxpbmc7S3IucHJvdG90eXBlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7S3IucHJvdG90eXBlLmNoaWxkTm9kZXM7S3IucHJvdG90eXBlLmNoaWxkcmVuO0tyLnByb3RvdHlwZS5jbGFzc0xpc3Q7S3IucHJvdG90eXBlLnRleHRDb250ZW50O0tyLnByb3RvdHlwZS5pbm5lckhUTUw7dmFyIGpHPUtyO2lmKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlJiZ3aW5kb3cuU2hhZHlET00ubm9QYXRjaCYmd2luZG93LlNoYWR5RE9NLldyYXBwZXIpe2NsYXNzIGUgZXh0ZW5kcyB3aW5kb3cuU2hhZHlET00uV3JhcHBlcnt9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoS3IucHJvdG90eXBlKS5mb3JFYWNoKHQ9Pnt0IT0iYWN0aXZlRWxlbWVudCImJihlLnByb3RvdHlwZVt0XT1Lci5wcm90b3R5cGVbdF0pfSksdmd0KGUucHJvdG90eXBlLFsiY2xhc3NMaXN0Il0pLGpHPWUsT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobEUucHJvdG90eXBlLHtsb2NhbFRhcmdldDp7Z2V0KCl7bGV0IHQ9dGhpcy5ldmVudC5jdXJyZW50VGFyZ2V0LHI9dCYmenQodCkuZ2V0T3duZXJSb290KCksbj10aGlzLnBhdGg7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV07aWYoenQobykuZ2V0T3duZXJSb290KCk9PT1yKXJldHVybiBvfX0sY29uZmlndXJhYmxlOiEwfSxwYXRoOntnZXQoKXtyZXR1cm4gd2luZG93LlNoYWR5RE9NLmNvbXBvc2VkUGF0aCh0aGlzLmV2ZW50KX0sY29uZmlndXJhYmxlOiEwfX0pfWVsc2UgQXhlKEtyLnByb3RvdHlwZSxbImNsb25lTm9kZSIsImFwcGVuZENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwicmVtb3ZlQ2hpbGQiLCJyZXBsYWNlQ2hpbGQiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJxdWVyeVNlbGVjdG9yIiwicXVlcnlTZWxlY3RvckFsbCJdKSx2Z3QoS3IucHJvdG90eXBlLFsicGFyZW50Tm9kZSIsImZpcnN0Q2hpbGQiLCJsYXN0Q2hpbGQiLCJuZXh0U2libGluZyIsInByZXZpb3VzU2libGluZyIsImZpcnN0RWxlbWVudENoaWxkIiwibGFzdEVsZW1lbnRDaGlsZCIsIm5leHRFbGVtZW50U2libGluZyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJjaGlsZE5vZGVzIiwiY2hpbGRyZW4iLCJjbGFzc0xpc3QiXSksUHhlKEtyLnByb3RvdHlwZSxbInRleHRDb250ZW50IiwiaW5uZXJIVE1MIiwiY2xhc3NOYW1lIl0pO3ZhciB6dD1mdW5jdGlvbihlKXtpZihlPWV8fGRvY3VtZW50LGUgaW5zdGFuY2VvZiBqR3x8ZSBpbnN0YW5jZW9mIGxFKXJldHVybiBlO2xldCB0PWUuX19kb21BcGk7cmV0dXJuIHR8fChlIGluc3RhbmNlb2YgRXZlbnQ/dD1uZXcgbEUoZSk6dD1uZXcgakcoZSksZS5fX2RvbUFwaT10KSx0fTt2YXIgJEc9d2luZG93LlNoYWR5RE9NLHhndD13aW5kb3cuU2hhZHlDU1M7ZnVuY3Rpb24gYmd0KGUsdCl7cmV0dXJuIHVlKGUpLmdldFJvb3ROb2RlKCk9PT10fWZ1bmN0aW9uIHdndChlLHQ9ITEpe2lmKCEkR3x8IXhndHx8ISRHLmhhbmRsZXNEeW5hbWljU2NvcGluZylyZXR1cm4gbnVsbDtsZXQgcj14Z3QuU2NvcGluZ1NoaW07aWYoIXIpcmV0dXJuIG51bGw7bGV0IG49ci5zY29wZUZvck5vZGUoZSksaT11ZShlKS5nZXRSb290Tm9kZSgpLG89YT0+e2lmKCFiZ3QoYSxpKSlyZXR1cm47bGV0IHM9QXJyYXkuZnJvbSgkRy5uYXRpdmVNZXRob2RzLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChhLCIqIikpO3MucHVzaChhKTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrKyl7bGV0IGM9c1tsXTtpZighYmd0KGMsaSkpY29udGludWU7bGV0IHU9ci5jdXJyZW50U2NvcGVGb3JOb2RlKGMpO3UhPT1uJiYodSE9PSIiJiZyLnVuc2NvcGVOb2RlKGMsdSksci5zY29wZU5vZGUoYyxuKSl9fTtpZihvKGUpLHQpe2xldCBhPW5ldyBNdXRhdGlvbk9ic2VydmVyKHM9Pntmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrKyl7bGV0IGM9c1tsXTtmb3IobGV0IHU9MDt1PGMuYWRkZWROb2Rlcy5sZW5ndGg7dSsrKXtsZXQgaD1jLmFkZGVkTm9kZXNbdV07aC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZvKGgpfX19KTtyZXR1cm4gYS5vYnNlcnZlKGUse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksYX1lbHNlIHJldHVybiBudWxsfXZhciBLRz0iZGlzYWJsZS11cGdyYWRlIixaRz1lPT57Zm9yKDtlOyl7bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCJvYnNlcnZlZEF0dHJpYnV0ZXMiKTtpZih0KXJldHVybiB0LmdldDtlPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLnByb3RvdHlwZSkuY29uc3RydWN0b3J9cmV0dXJuKCk9PltdfSxndnI9Tm4oZT0+e2xldCB0PVNtKGUpLHI9WkcodCk7Y2xhc3MgbiBleHRlbmRzIHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZH1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVybiByLmNhbGwodGhpcykuY29uY2F0KEtHKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLmhhc0F0dHJpYnV0ZShLRyk/dGhpcy5fX2lzVXBncmFkZURpc2FibGVkPSEwOnN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfV9lbmFibGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5fZW5hYmxlUHJvcGVydGllcygpfV9jYW5BcHBseVByb3BlcnR5RGVmYXVsdChvKXtyZXR1cm4gc3VwZXIuX2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KG8pJiYhKHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZCYmdGhpcy5faXNQcm9wZXJ0eVBlbmRpbmcobykpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhvLGEscyxsKXtvPT1LRz90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJnM9PW51bGwmJihzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITEsdWUodGhpcykuaXNDb25uZWN0ZWQmJnN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCkpOnN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhvLGEscyxsKX1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19cmV0dXJuIG59KTt2YXIgbzk9ImRpc2FibGUtdXBncmFkZSIsSXhlPXdpbmRvdy5TaGFkeUNTUyxHdD1ObihlPT57bGV0IHQ9eWgoU20oZSkpLHI9Vkk/dDp1Z3QodCksbj1aRyhyKSxpPXt4OiJwYW4teCIseToicGFuLXkiLG5vbmU6Im5vbmUiLGFsbDoiYXV0byJ9O2NsYXNzIG8gZXh0ZW5kcyBye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmlzQXR0YWNoZWQsdGhpcy5fX2JvdW5kTGlzdGVuZXJzLHRoaXMuX2RlYm91bmNlcnMsdGhpcy5fX2lzVXBncmFkZURpc2FibGVkLHRoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZCx0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlc31zdGF0aWMgZ2V0IGltcG9ydE1ldGEoKXtyZXR1cm4gdGhpcy5wcm90b3R5cGUuaW1wb3J0TWV0YX1jcmVhdGVkKCl7fV9fYXR0cmlidXRlUmVhY3Rpb24ocyxsLGMpeyh0aGlzLl9fZGF0YUF0dHJpYnV0ZXMmJnRoaXMuX19kYXRhQXR0cmlidXRlc1tzXXx8cz09PW85KSYmdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socyxsLGMsbnVsbCl9c2V0QXR0cmlidXRlKHMsbCl7aWYocU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyl7bGV0IGM9dGhpcy5nZXRBdHRyaWJ1dGUocyk7c3VwZXIuc2V0QXR0cmlidXRlKHMsbCksdGhpcy5fX2F0dHJpYnV0ZVJlYWN0aW9uKHMsYyxTdHJpbmcobCkpfWVsc2Ugc3VwZXIuc2V0QXR0cmlidXRlKHMsbCl9cmVtb3ZlQXR0cmlidXRlKHMpe2lmKHFNJiYhdGhpcy5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXMpe2xldCBsPXRoaXMuZ2V0QXR0cmlidXRlKHMpO3N1cGVyLnJlbW92ZUF0dHJpYnV0ZShzKSx0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24ocyxsLG51bGwpfWVsc2Ugc3VwZXIucmVtb3ZlQXR0cmlidXRlKHMpfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuIHFNJiYhdGhpcy5wcm90b3R5cGUuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzPyh0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzIix0aGlzKSl8fCh0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzPVtdLEhJKHRoaXMucHJvdG90eXBlKSksdGhpcy5fX29ic2VydmVkQXR0cmlidXRlcyk6bi5jYWxsKHRoaXMpLmNvbmNhdChvOSl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fHN1cGVyLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KHMpe3JldHVybiBzdXBlci5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQocykmJiEodGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZ0aGlzLl9pc1Byb3BlcnR5UGVuZGluZyhzKSl9Y29ubmVjdGVkQ2FsbGJhY2soKXt0aGlzLl9fbmVlZHNBdHRyaWJ1dGVzQXRDb25uZWN0ZWQmJnRoaXMuX3Rha2VBdHRyaWJ1dGVzKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHwoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmlzQXR0YWNoZWQ9ITAsdGhpcy5hdHRhY2hlZCgpKX1hdHRhY2hlZCgpe31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8KHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5pc0F0dGFjaGVkPSExLHRoaXMuZGV0YWNoZWQoKSl9ZGV0YWNoZWQoKXt9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHMsbCxjLHUpe2whPT1jJiYocz09bzk/dGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZjPT1udWxsJiYodGhpcy5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITEsdWUodGhpcykuaXNDb25uZWN0ZWQmJnRoaXMuY29ubmVjdGVkQ2FsbGJhY2soKSk6KHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhzLGwsYyx1KSx0aGlzLmF0dHJpYnV0ZUNoYW5nZWQocyxsLGMpKSl9YXR0cmlidXRlQ2hhbmdlZChzLGwsYyl7fV9pbml0aWFsaXplUHJvcGVydGllcygpe2lmKHBwJiZ0aGlzLmhhc0F0dHJpYnV0ZShvOSkpdGhpcy5fX2lzVXBncmFkZURpc2FibGVkPSEwO2Vsc2V7bGV0IHM9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO3MuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19oYXNSZWdpc3RlckZpbmlzaGVkIixzKSl8fCh0aGlzLl9yZWdpc3RlcmVkKCkscy5fX2hhc1JlZ2lzdGVyRmluaXNoZWQ9ITApLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMucm9vdD10aGlzLHRoaXMuY3JlYXRlZCgpLHFNJiYhdGhpcy5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXMmJih0aGlzLmhhc0F0dHJpYnV0ZXMoKT90aGlzLl90YWtlQXR0cmlidXRlcygpOnRoaXMucGFyZW50Tm9kZXx8KHRoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZD0hMCkpLHRoaXMuX2FwcGx5TGlzdGVuZXJzKCl9fV90YWtlQXR0cmlidXRlcygpe2xldCBzPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGw9MCxjPXMubGVuZ3RoO2w8YztsKyspe2xldCB1PXNbbF07dGhpcy5fX2F0dHJpYnV0ZVJlYWN0aW9uKHUubmFtZSxudWxsLHUudmFsdWUpfX1fcmVnaXN0ZXJlZCgpe31yZWFkeSgpe3RoaXMuX2Vuc3VyZUF0dHJpYnV0ZXMoKSxzdXBlci5yZWFkeSgpfV9lbnN1cmVBdHRyaWJ1dGVzKCl7fV9hcHBseUxpc3RlbmVycygpe31zZXJpYWxpemUocyl7cmV0dXJuIHRoaXMuX3NlcmlhbGl6ZVZhbHVlKHMpfWRlc2VyaWFsaXplKHMsbCl7cmV0dXJuIHRoaXMuX2Rlc2VyaWFsaXplVmFsdWUocyxsKX1yZWZsZWN0UHJvcGVydHlUb0F0dHJpYnV0ZShzLGwsYyl7dGhpcy5fcHJvcGVydHlUb0F0dHJpYnV0ZShzLGwsYyl9c2VyaWFsaXplVmFsdWVUb0F0dHJpYnV0ZShzLGwsYyl7dGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUoY3x8dGhpcyxzLGwpfWV4dGVuZChzLGwpe2lmKCEocyYmbCkpcmV0dXJuIHN8fGw7bGV0IGM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobCk7Zm9yKGxldCB1PTAsaDt1PGMubGVuZ3RoJiYoaD1jW3VdKTt1Kyspe2xldCBmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxoKTtmJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocyxoLGYpfXJldHVybiBzfW1peGluKHMsbCl7Zm9yKGxldCBjIGluIGwpc1tjXT1sW2NdO3JldHVybiBzfWNoYWluT2JqZWN0KHMsbCl7cmV0dXJuIHMmJmwmJnMhPT1sJiYocy5fX3Byb3RvX189bCksc31pbnN0YW5jZVRlbXBsYXRlKHMpe2xldCBsPXRoaXMuY29uc3RydWN0b3IuX2NvbnRlbnRGb3JUZW1wbGF0ZShzKTtyZXR1cm4gZG9jdW1lbnQuaW1wb3J0Tm9kZShsLCEwKX1maXJlKHMsbCxjKXtjPWN8fHt9LGw9bD09bnVsbD97fTpsO2xldCB1PW5ldyBFdmVudChzLHtidWJibGVzOmMuYnViYmxlcz09PXZvaWQgMD8hMDpjLmJ1YmJsZXMsY2FuY2VsYWJsZTpCb29sZWFuKGMuY2FuY2VsYWJsZSksY29tcG9zZWQ6Yy5jb21wb3NlZD09PXZvaWQgMD8hMDpjLmNvbXBvc2VkfSk7dS5kZXRhaWw9bDtsZXQgaD1jLm5vZGV8fHRoaXM7cmV0dXJuIHVlKGgpLmRpc3BhdGNoRXZlbnQodSksdX1saXN0ZW4ocyxsLGMpe3M9c3x8dGhpcztsZXQgdT10aGlzLl9fYm91bmRMaXN0ZW5lcnN8fCh0aGlzLl9fYm91bmRMaXN0ZW5lcnM9bmV3IFdlYWtNYXApLGg9dS5nZXQocyk7aHx8KGg9e30sdS5zZXQocyxoKSk7bGV0IGY9bCtjO2hbZl18fChoW2ZdPXRoaXMuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUocyxsLGMsdGhpcykpfXVubGlzdGVuKHMsbCxjKXtzPXN8fHRoaXM7bGV0IHU9dGhpcy5fX2JvdW5kTGlzdGVuZXJzJiZ0aGlzLl9fYm91bmRMaXN0ZW5lcnMuZ2V0KHMpLGg9bCtjLGY9dSYmdVtoXTtmJiYodGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lckZyb21Ob2RlKHMsbCxmKSx1W2hdPW51bGwpfXNldFNjcm9sbERpcmVjdGlvbihzLGwpe2RfKGx8fHRoaXMsaVtzXXx8ImF1dG8iKX0kJChzKXtyZXR1cm4gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3Iocyl9Z2V0IGRvbUhvc3QoKXtsZXQgcz11ZSh0aGlzKS5nZXRSb290Tm9kZSgpO3JldHVybiBzIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudD9zLmhvc3Q6c31kaXN0cmlidXRlQ29udGVudCgpe2xldCBsPXp0KHRoaXMpO3dpbmRvdy5TaGFkeURPTSYmbC5zaGFkb3dSb290JiZTaGFkeURPTS5mbHVzaCgpfWdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKXtyZXR1cm4genQodGhpcykuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpfXF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyhzKXtyZXR1cm4genQodGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHMpfWdldEVmZmVjdGl2ZUNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLmZpbHRlcihmdW5jdGlvbihsKXtyZXR1cm4gbC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSl9Z2V0RWZmZWN0aXZlVGV4dENvbnRlbnQoKXtsZXQgcz10aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxsPVtdO2ZvcihsZXQgYz0wLHU7dT1zW2NdO2MrKyl1Lm5vZGVUeXBlIT09Tm9kZS5DT01NRU5UX05PREUmJmwucHVzaCh1LnRleHRDb250ZW50KTtyZXR1cm4gbC5qb2luKCIiKX1xdWVyeUVmZmVjdGl2ZUNoaWxkcmVuKHMpe2xldCBsPXRoaXMucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHMpO3JldHVybiBsJiZsWzBdfXF1ZXJ5QWxsRWZmZWN0aXZlQ2hpbGRyZW4ocyl7cmV0dXJuIHRoaXMucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHMpfWdldENvbnRlbnRDaGlsZE5vZGVzKHMpe2xldCBsPXRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKHN8fCJzbG90Iik7cmV0dXJuIGw/enQobCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpOltdfWdldENvbnRlbnRDaGlsZHJlbihzKXtyZXR1cm4gdGhpcy5nZXRDb250ZW50Q2hpbGROb2RlcyhzKS5maWx0ZXIoZnVuY3Rpb24oYyl7cmV0dXJuIGMubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0pfWlzTGlnaHREZXNjZW5kYW50KHMpe2xldCBsPXRoaXM7cmV0dXJuIGwhPT1zJiZ1ZShsKS5jb250YWlucyhzKSYmdWUobCkuZ2V0Um9vdE5vZGUoKT09PXVlKHMpLmdldFJvb3ROb2RlKCl9aXNMb2NhbERlc2NlbmRhbnQocyl7cmV0dXJuIHRoaXMucm9vdD09PXVlKHMpLmdldFJvb3ROb2RlKCl9c2NvcGVTdWJ0cmVlKHMsbD0hMSl7cmV0dXJuIHdndChzLGwpfWdldENvbXB1dGVkU3R5bGVWYWx1ZShzKXtyZXR1cm4gSXhlLmdldENvbXB1dGVkU3R5bGVWYWx1ZSh0aGlzLHMpfWRlYm91bmNlKHMsbCxjKXtyZXR1cm4gdGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fSx0aGlzLl9kZWJvdW5jZXJzW3NdPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcnNbc10sYz4wP21vLmFmdGVyKGMpOmNpLGwuYmluZCh0aGlzKSl9aXNEZWJvdW5jZXJBY3RpdmUocyl7dGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fTtsZXQgbD10aGlzLl9kZWJvdW5jZXJzW3NdO3JldHVybiEhKGwmJmwuaXNBY3RpdmUoKSl9Zmx1c2hEZWJvdW5jZXIocyl7dGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fTtsZXQgbD10aGlzLl9kZWJvdW5jZXJzW3NdO2wmJmwuZmx1c2goKX1jYW5jZWxEZWJvdW5jZXIocyl7dGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fTtsZXQgbD10aGlzLl9kZWJvdW5jZXJzW3NdO2wmJmwuY2FuY2VsKCl9YXN5bmMocyxsKXtyZXR1cm4gbD4wP21vLnJ1bihzLmJpbmQodGhpcyksbCk6fmNpLnJ1bihzLmJpbmQodGhpcykpfWNhbmNlbEFzeW5jKHMpe3M8MD9jaS5jYW5jZWwofnMpOm1vLmNhbmNlbChzKX1jcmVhdGUocyxsKXtsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHMpO2lmKGwpaWYoYy5zZXRQcm9wZXJ0aWVzKWMuc2V0UHJvcGVydGllcyhsKTtlbHNlIGZvcihsZXQgdSBpbiBsKWNbdV09bFt1XTtyZXR1cm4gY31lbGVtZW50TWF0Y2hlcyhzLGwpe3JldHVybiBYRyhsfHx0aGlzLHMpfXRvZ2dsZUF0dHJpYnV0ZShzLGwpe2xldCBjPXRoaXM7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0zJiYoYz1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg9PTEmJihsPSFjLmhhc0F0dHJpYnV0ZShzKSksbD8odWUoYykuc2V0QXR0cmlidXRlKHMsIiIpLCEwKToodWUoYykucmVtb3ZlQXR0cmlidXRlKHMpLCExKX10b2dnbGVDbGFzcyhzLGwsYyl7Yz1jfHx0aGlzLGFyZ3VtZW50cy5sZW5ndGg9PTEmJihsPSFjLmNsYXNzTGlzdC5jb250YWlucyhzKSksbD9jLmNsYXNzTGlzdC5hZGQocyk6Yy5jbGFzc0xpc3QucmVtb3ZlKHMpfXRyYW5zZm9ybShzLGwpe2w9bHx8dGhpcyxsLnN0eWxlLndlYmtpdFRyYW5zZm9ybT1zLGwuc3R5bGUudHJhbnNmb3JtPXN9dHJhbnNsYXRlM2QocyxsLGMsdSl7dT11fHx0aGlzLHRoaXMudHJhbnNmb3JtKCJ0cmFuc2xhdGUzZCgiK3MrIiwiK2wrIiwiK2MrIikiLHUpfWFycmF5RGVsZXRlKHMsbCl7bGV0IGM7aWYoQXJyYXkuaXNBcnJheShzKSl7aWYoYz1zLmluZGV4T2YobCksYz49MClyZXR1cm4gcy5zcGxpY2UoYywxKX1lbHNlIGlmKGM9Tm8odGhpcyxzKS5pbmRleE9mKGwpLGM+PTApcmV0dXJuIHRoaXMuc3BsaWNlKHMsYywxKTtyZXR1cm4gbnVsbH1fbG9nZ2VyKHMsbCl7c3dpdGNoKEFycmF5LmlzQXJyYXkobCkmJmwubGVuZ3RoPT09MSYmQXJyYXkuaXNBcnJheShsWzBdKSYmKGw9bFswXSkscyl7Y2FzZSJsb2ciOmNhc2Uid2FybiI6Y2FzZSJlcnJvciI6Y29uc29sZVtzXSguLi5sKX19X2xvZyguLi5zKXt0aGlzLl9sb2dnZXIoImxvZyIscyl9X3dhcm4oLi4ucyl7dGhpcy5fbG9nZ2VyKCJ3YXJuIixzKX1fZXJyb3IoLi4ucyl7dGhpcy5fbG9nZ2VyKCJlcnJvciIscyl9X2xvZ2YocywuLi5sKXtyZXR1cm5bIlslczo6JXNdIix0aGlzLmlzLHMsLi4ubF19fXJldHVybiBvLnByb3RvdHlwZS5pcz0iIixvfSk7dmFyIENtPUVlKE9lKCksMSk7ZnVuY3Rpb24geGgoZSx0KXtsZXQgcj0wLG49MDtmb3IoOzspe2lmKHI9PT1lLmxlbmd0aClyZXR1cm4gbj09PXQubGVuZ3RoPzA6LTE7aWYobj09PXQubGVuZ3RoKXJldHVybiAxO2lmKG1fKGVbcl0pJiZtXyh0W25dKSl7bGV0IGk9cixvPW47cj1TZ3QoZSxyKzEpLG49U2d0KHQsbisxKTtsZXQgYT1wYXJzZUZsb2F0KGUuc2xpY2UoaSxyKSkscz1wYXJzZUZsb2F0KHQuc2xpY2UobyxuKSk7aWYoYTxzKXJldHVybi0xO2lmKGE+cylyZXR1cm4gMTtjb250aW51ZX1pZihKRyhlW3JdKSl7aWYoIUpHKHRbbl0pKXJldHVybi0xfWVsc2V7aWYoSkcodFtuXSkpcmV0dXJuIDE7aWYoZVtyXTx0W25dKXJldHVybi0xO2lmKGVbcl0+dFtuXSlyZXR1cm4gMX1yKyssbisrfX1mdW5jdGlvbiBTZ3QoZSx0KXtsZXQgcjsoZnVuY3Rpb24oaSl7aVtpLk5BVFVSQUw9MF09Ik5BVFVSQUwiLGlbaS5SRUFMPTFdPSJSRUFMIixpW2kuRVhQT05FTlRfU0lHTj0yXT0iRVhQT05FTlRfU0lHTiIsaVtpLkVYUE9ORU5UPTNdPSJFWFBPTkVOVCJ9KShyfHwocj17fSkpO2xldCBuPXIuTkFUVVJBTDtmb3IoO3Q8ZS5sZW5ndGg7dCsrKWlmKG49PT1yLk5BVFVSQUwpe2lmKGVbdF09PT0iLiIpbj1yLlJFQUw7ZWxzZSBpZihlW3RdPT09ImUifHxlW3RdPT09IkUiKW49ci5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIW1fKGVbdF0pKWJyZWFrfWVsc2UgaWYobj09PXIuUkVBTCl7aWYoZVt0XT09PSJlInx8ZVt0XT09PSJFIiluPXIuRVhQT05FTlRfU0lHTjtlbHNlIGlmKCFtXyhlW3RdKSlicmVha31lbHNlIGlmKG49PT1yLkVYUE9ORU5UX1NJR04paWYobV8oZVt0XSl8fGVbdF09PT0iKyJ8fGVbdF09PT0iLSIpbj1yLkVYUE9ORU5UO2Vsc2UgYnJlYWs7ZWxzZSBpZihuPT09ci5FWFBPTkVOVCYmIW1fKGVbdF0pKWJyZWFrO3JldHVybiB0fWZ1bmN0aW9uIG1fKGUpe3JldHVybiIwIjw9ZSYmZTw9IjkifWZ1bmN0aW9uIEpHKGUpe3JldHVybiBlPT09Ii8ifHxlPT09Il8ifHxtXyhlKX12YXIgTHhlPVtdO2Z1bmN0aW9uIGt4ZShlKXtyZXR1cm4gQ20ua2V5cyhlKS5zb3J0KHhoKX1mdW5jdGlvbiAkaShlKXtyZXR1cm4gQ20udW5pb24uYXBwbHkobnVsbCxDbS52YWx1ZXMoZSkpLnNvcnQoeGgpfWZ1bmN0aW9uIFJ4ZShlLHQpe2xldCByPVtdO3JldHVybiB0LmZvckVhY2gobj0+cj1yLmNvbmNhdChlW25dKSksQ20udW5pcShyKS5zb3J0KHhoKX12YXIgRWd0PSJYLVRlbnNvckJvYXJkLUZlYXR1cmUtRmxhZ3MiO3ZhciB0Vz17fTtLcyh0Vyx7Z2V0RmVhdHVyZUZsYWdzOigpPT5EeGUsZ2V0RmVhdHVyZUZsYWdzVG9TZW5kVG9TZXJ2ZXI6KCk9PlFHLGluaXRpYWxpemVGZWF0dXJlRmxhZ3M6KCk9PlRndCxzZXRGZWF0dXJlRmxhZ3M6KCk9Pk54ZX0pO3ZhciBhOSxzOTtUZ3QoKTtmdW5jdGlvbiBUZ3QoKXthOT1udWxsLHM5PW51bGx9ZnVuY3Rpb24gTnhlKGUsdCl7YTk9ZSxzOT10fWZ1bmN0aW9uIER4ZSgpe2lmKGE5PT09bnVsbCl0aHJvdyBFcnJvcigiRmVhdHVyZUZsYWdzIGhhdmUgbm90IHlldCBiZWVuIGRldGVybWluZWQgYnkgVGVuc29yQm9hcmQuIik7cmV0dXJuIGE5fWZ1bmN0aW9uIFFHKCl7aWYoczk9PT1udWxsKXRocm93IEVycm9yKCJGZWF0dXJlRmxhZ3MgaGF2ZSBub3QgeWV0IGJlZW4gZGV0ZXJtaW5lZCBieSBUZW5zb3JCb2FyZC4iKTtyZXR1cm4gczl9dmFyIGw5PWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubmFtZT0iUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yIn19LFZ4PWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5uYW1lPSJJbnZhbGlkUmVxdWVzdE9wdGlvbnNFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsVngucHJvdG90eXBlKX19LGNFPWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxyKXtzdXBlcigpLHRoaXMubWVzc2FnZT1gUmVxdWVzdE5ldHdvcmtFcnJvcjogJHt0LnN0YXR1c30gYXQgJHtyfWAsdGhpcy5uYW1lPSJSZXF1ZXN0TmV0d29ya0Vycm9yIix0aGlzLnJlcT10LHRoaXMudXJsPXJ9fSxBbTsoZnVuY3Rpb24oZSl7ZS5HRVQ9IkdFVCIsZS5QT1NUPSJQT1NUIn0pKEFtfHwoQW09e30pKTt2YXIgVXg9Y2xhc3N7dmFsaWRhdGUoKXtpZih0aGlzLm1ldGhvZFR5cGU9PT1BbS5HRVQmJnRoaXMuYm9keSl0aHJvdyBuZXcgVngoImJvZHkgbXVzdCBiZSBtaXNzaW5nIGZvciBhIEdFVCByZXF1ZXN0LiIpfX0sQWU9Y2xhc3N7Y29uc3RydWN0b3IodD0xZTMscj0zKXt0aGlzLl9xdWV1ZT1bXSx0aGlzLl9uQWN0aXZlUmVxdWVzdHM9MCx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHM9dCx0aGlzLl9tYXhSZXRyaWVzPXJ9cmVxdWVzdCh0LHIpe2xldCBuPXp4ZShyKTtyZXR1cm4gdGhpcy5yZXF1ZXN0V2l0aE9wdGlvbnModCxuKX1yZXF1ZXN0V2l0aE9wdGlvbnModCxyKXtyZXR1cm4gci52YWxpZGF0ZSgpLG5ldyBQcm9taXNlKChpLG8pPT57bGV0IGE9e3Jlc29sdmU6aSxyZWplY3Q6b307dGhpcy5fcXVldWUucHVzaChhKSx0aGlzLmxhdW5jaFJlcXVlc3RzKCl9KS50aGVuKCgpPT50aGlzLnByb21pc2VXaXRoUmV0cmllcyh0LHRoaXMuX21heFJldHJpZXMscikpLnRoZW4oaT0+KHRoaXMuX25BY3RpdmVSZXF1ZXN0cy0tLHRoaXMubGF1bmNoUmVxdWVzdHMoKSxpKSxpPT4oaS5uYW1lPT09IlJlcXVlc3ROZXR3b3JrRXJyb3IiJiYodGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpKSxQcm9taXNlLnJlamVjdChpKSkpfWZldGNoKHQscil7cmV0dXJuIG5ldyBQcm9taXNlKChuLGkpPT57bGV0IG89e3Jlc29sdmU6bixyZWplY3Q6aX07dGhpcy5fcXVldWUucHVzaChvKSx0aGlzLmxhdW5jaFJlcXVlc3RzKCl9KS50aGVuKCgpPT57bGV0IG49MTtyZXR1cm4gbmV3IFByb21pc2UoaT0+e2xldCBvPSgpPT57ZmV0Y2godCxyKS50aGVuKGE9PntpZighYS5vayYmdGhpcy5fbWF4UmV0cmllcz5uKXtuKyssbygpO3JldHVybn1pKGEpLHRoaXMuX25BY3RpdmVSZXF1ZXN0cy0tLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pfTtvKCl9KX0pfWNsZWFyUXVldWUoKXt2YXIgdDtmb3IoO3RoaXMuX3F1ZXVlLmxlbmd0aD4wOykodD10aGlzLl9xdWV1ZS5wb3AoKSk9PW51bGx8fHQucmVqZWN0KG5ldyBsOSgiUmVxdWVzdCBjYW5jZWxsZWQgYnkgY2xlYXJRdWV1ZSIpKX1hY3RpdmVSZXF1ZXN0cygpe3JldHVybiB0aGlzLl9uQWN0aXZlUmVxdWVzdHN9b3V0c3RhbmRpbmdSZXF1ZXN0cygpe3JldHVybiB0aGlzLl9uQWN0aXZlUmVxdWVzdHMrdGhpcy5fcXVldWUubGVuZ3RofWxhdW5jaFJlcXVlc3RzKCl7Zm9yKDt0aGlzLl9uQWN0aXZlUmVxdWVzdHM8dGhpcy5fblNpbXVsdGFuZW91c1JlcXVlc3RzJiZ0aGlzLl9xdWV1ZS5sZW5ndGg+MDspdGhpcy5fbkFjdGl2ZVJlcXVlc3RzKyssdGhpcy5fcXVldWUucG9wKCkucmVzb2x2ZSh2b2lkIDApfXByb21pc2VXaXRoUmV0cmllcyh0LHIsbil7dmFyIGk9YT0+YSxvPWE9PnI+MD90aGlzLnByb21pc2VXaXRoUmV0cmllcyh0LHItMSxuKTpQcm9taXNlLnJlamVjdChhKTtyZXR1cm4gdGhpcy5fcHJvbWlzZUZyb21VcmwodCxuKS50aGVuKGksbyl9X3Byb21pc2VGcm9tVXJsKHQscil7cmV0dXJuIG5ldyBQcm9taXNlKChuLGkpPT57bGV0IG89T3hlKHIubWV0aG9kVHlwZSx0LHIud2l0aENyZWRlbnRpYWxzLHIuY29udGVudFR5cGUpO28uc2V0UmVxdWVzdEhlYWRlcihFZ3QsSlNPTi5zdHJpbmdpZnkoUUcoKSkpLG8ub25sb2FkPWZ1bmN0aW9uKCl7by5zdGF0dXM9PT0yMDA/bihKU09OLnBhcnNlKG8ucmVzcG9uc2VUZXh0KSk6aShuZXcgY0Uobyx0KSl9LG8ub25lcnJvcj1mdW5jdGlvbigpe2kobmV3IGNFKG8sdCkpfSxyLmJvZHk/by5zZW5kKHIuYm9keSk6by5zZW5kKCl9KX19O2Z1bmN0aW9uIE94ZShlLHQscixuKXtsZXQgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIGkub3BlbihlLHQpLHImJihpLndpdGhDcmVkZW50aWFscz1yKSxuJiZpLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsbiksaX1mdW5jdGlvbiB6eGUoZSl7bGV0IHQ9bmV3IFV4O3JldHVybiBlPyh0Lm1ldGhvZFR5cGU9QW0uUE9TVCx0LmJvZHk9RnhlKGUpLHQpOih0Lm1ldGhvZFR5cGU9QW0uR0VULHQpfWZ1bmN0aW9uIEZ4ZShlKXtsZXQgdD1uZXcgRm9ybURhdGE7Zm9yKGxldFtyLG5db2YgT2JqZWN0LmVudHJpZXMoZSkpe2xldCBpPUFycmF5LmlzQXJyYXkobik/bjpbbl07Zm9yKGxldCBvIG9mIGkpdC5hcHBlbmQocixvKX1yZXR1cm4gdH12YXIgQ2d0PSJleHBlcmltZW50YWxQbHVnaW4iLEJ4ZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLEFndD1QZ3QoKTtmdW5jdGlvbiBQZ3QoZT0iZGF0YSIsdD1CeGUpe3JldHVybiBlW2UubGVuZ3RoLTFdPT09Ii8iJiYoZT1lLnNsaWNlKDAsZS5sZW5ndGgtMSkpLHtlbnZpcm9ubWVudDooKT0+cXgoZSwiL2Vudmlyb25tZW50IiksZXhwZXJpbWVudHM6KCk9PnF4KGUsIi9leHBlcmltZW50cyIpLHBsdWdpblJvdXRlOihyLG4saSk9PnF4KGUrIi9wbHVnaW4iLGAvJHtyfSR7bn1gLGkpLHBsdWdpbnNMaXN0aW5nOigpPT5xeChlLCIvcGx1Z2luc19saXN0aW5nIixlVyh7W0NndF06dC5nZXRBbGwoQ2d0KX0pKSxydW5zOigpPT5xeChlLCIvcnVucyIpLHJ1bnNGb3JFeHBlcmltZW50OnI9PnF4KGUsIi9leHBlcmltZW50X3J1bnMiLGVXKHtleHBlcmltZW50OlN0cmluZyhyKX0pKX19ZnVuY3Rpb24gdmUoKXtyZXR1cm4gQWd0fWZ1bmN0aW9uIEh4ZShlKXtpZihlPT1udWxsKXRocm93IG5ldyBFcnJvcigiUm91dGVyIHJlcXVpcmVkLCBidXQgZ290OiAiK2UpO0FndD1lfWZ1bmN0aW9uIHF4KGUsdCxyPW5ldyBVUkxTZWFyY2hQYXJhbXMpe2xldCBuPWUrdDtyZXR1cm4gU3RyaW5nKHIpJiYobis9KHQuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iKStTdHJpbmcocikpLG59ZnVuY3Rpb24gZVcoZT17fSl7bGV0IHQ9T2JqZWN0LmtleXMoZSkuc29ydCgpLmZpbHRlcihuPT5lW25dKSxyPW5ldyBVUkxTZWFyY2hQYXJhbXM7cmV0dXJuIHQuZm9yRWFjaChuPT57bGV0IGk9ZVtuXTsoQXJyYXkuaXNBcnJheShpKT9pOltpXSkuZm9yRWFjaChhPT5yLmFwcGVuZChuLGEpKX0pLHJ9dmFyIGM5PUVlKE9lKCksMSk7dmFyIE5hOyhmdW5jdGlvbihlKXtlW2UuU0VBUkNIX1JFU1VMVFM9MF09IlNFQVJDSF9SRVNVTFRTIixlW2UuUFJFRklYX0dST1VQPTFdPSJQUkVGSVhfR1JPVVAifSkoTmF8fChOYT17fSkpO2Z1bmN0aW9uIFZ4ZShlLHQpe2xldCByPSgoKT0+e3RyeXtyZXR1cm4gbmV3IFJlZ0V4cCh0KX1jYXRjaChuKXtyZXR1cm4gbnVsbH19KSgpO3JldHVybntuYW1lOnQsbWV0YWRhdGE6e3R5cGU6TmEuU0VBUkNIX1JFU1VMVFMsdmFsaWRSZWdleDohIXIsdW5pdmVyc2FsUmVnZXg6dD09PSIuKiJ9LGl0ZW1zOnI/ZS5maWx0ZXIobj0+bi5tYXRjaChyKSk6W119fWZ1bmN0aW9uIFV4ZShlLHQ9Ii8iKXtsZXQgcj1bXSxuPXt9O3JldHVybiBlLmZvckVhY2goaT0+e2xldCBvPWkuaW5kZXhPZih0KSxhPW8+PTA/aS5zbGljZSgwLG8pOmk7aWYoIW5bYV0pe2xldCBzPXtuYW1lOmEsbWV0YWRhdGE6e3R5cGU6TmEuUFJFRklYX0dST1VQfSxpdGVtczpbXX07blthXT1zLHIucHVzaChzKX1uW2FdLml0ZW1zLnB1c2goaSl9KSxyfWZ1bmN0aW9uIHF4ZShlLHQ9IiIpe2xldCByPVtWeGUoZSx0KV0sbj1VeGUoZSk7cmV0dXJuIEFycmF5KCkuY29uY2F0KHIsbil9ZnVuY3Rpb24gdUUoZSx0LHIpe2xldCBuPSRpKGUpLGk9cXhlKG4sciksbz1HeGUoYzkucGljayhlLHQpKTtyZXR1cm4gaS5tYXAoKHtuYW1lOmEsbWV0YWRhdGE6cyxpdGVtczpsfSk9Pih7bmFtZTphLG1ldGFkYXRhOnMsaXRlbXM6bC5tYXAoYz0+KHt0YWc6YyxydW5zOihvLmdldChjKXx8W10pLnNsaWNlKCl9KSl9KSl9ZnVuY3Rpb24gR3hlKGUpe2xldCB0PW5ldyBNYXA7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2gocj0+e2Vbcl0uZm9yRWFjaChuPT57bGV0IGk9dC5nZXQobil8fFtdO2kucHVzaChyKSx0LnNldChuLGkpfSl9KSx0fWZ1bmN0aW9uIFd4ZShlLHQpe2xldCByPXhoKGUudGFnLHQudGFnKTtyZXR1cm4gciE9MD9yOnhoKGUucnVuLHQucnVuKX1mdW5jdGlvbiBRbChlLHQscil7bGV0IG49dUUoZSx0LHIpO2Z1bmN0aW9uIGkobyl7bGV0IGE9YzkuZmxhdHRlbihvLml0ZW1zLm1hcCgoe3RhZzpzLHJ1bnM6bH0pPT5sLm1hcChjPT4oe3RhZzpzLHJ1bjpjfSkpKSk7cmV0dXJuIGEuc29ydChXeGUpLHtuYW1lOm8ubmFtZSxtZXRhZGF0YTpvLm1ldGFkYXRhLGl0ZW1zOmF9fXJldHVybiBuLm1hcChpKX12YXIgdVc9e307S3ModVcse0lyb25SZXNpemFibGVCZWhhdmlvcjooKT0+SnN9KTt2YXIgWXhlPXthdHRhY2hlZDohMCxkZXRhY2hlZDohMCxyZWFkeTohMCxjcmVhdGVkOiEwLGJlZm9yZVJlZ2lzdGVyOiEwLHJlZ2lzdGVyZWQ6ITAsYXR0cmlidXRlQ2hhbmdlZDohMCxsaXN0ZW5lcnM6ITAsaG9zdEF0dHJpYnV0ZXM6ITB9LFJndD17YXR0YWNoZWQ6ITAsZGV0YWNoZWQ6ITAscmVhZHk6ITAsY3JlYXRlZDohMCxiZWZvcmVSZWdpc3RlcjohMCxyZWdpc3RlcmVkOiEwLGF0dHJpYnV0ZUNoYW5nZWQ6ITAsYmVoYXZpb3JzOiEwLF9ub0FjY2Vzc29yczohMH0sanhlPU9iamVjdC5hc3NpZ24oe2xpc3RlbmVyczohMCxob3N0QXR0cmlidXRlczohMCxwcm9wZXJ0aWVzOiEwLG9ic2VydmVyczohMH0sUmd0KTtmdW5jdGlvbiBYeGUoZSx0LHIpe2xldCBuPWUuX25vQWNjZXNzb3JzLGk9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSk7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspe2xldCBhPWlbb107aWYoIShhIGluIHIpKWlmKG4pdFthXT1lW2FdO2Vsc2V7bGV0IHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGEpO3MmJihzLmNvbmZpZ3VyYWJsZT0hMCxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxhLHMpKX19fWZ1bmN0aW9uIE5ndChlLHQpe3JldHVybiB6Z3Qoe30sR3QodCksZSl9ZnVuY3Rpb24gJHhlKGUsdCxyKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylEZ3QoZSx0W25dLHIsanhlKX1mdW5jdGlvbiBEZ3QoZSx0LHIsbil7WHhlKHQsZSxuKTtmb3IobGV0IGkgaW4gWXhlKXRbaV0mJihyW2ldPXJbaV18fFtdLHJbaV0ucHVzaCh0W2ldKSl9ZnVuY3Rpb24gT2d0KGUsdCxyKXt0PXR8fFtdO2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKXtsZXQgaT1lW25dO2k/QXJyYXkuaXNBcnJheShpKT9PZ3QoaSx0KTp0LmluZGV4T2YoaSk8MCYmKCFyfHxyLmluZGV4T2YoaSk8MCkmJnQudW5zaGlmdChpKTpjb25zb2xlLndhcm4oImJlaGF2aW9yIGlzIG51bGwsIGNoZWNrIGZvciBtaXNzaW5nIG9yIDQwNCBpbXBvcnQiKX1yZXR1cm4gdH1mdW5jdGlvbiBMZ3QoZSx0KXtmb3IobGV0IHIgaW4gdCl7bGV0IG49ZVtyXSxpPXRbcl07ISgidmFsdWUiaW4gaSkmJm4mJiJ2YWx1ZSJpbiBuP2Vbcl09T2JqZWN0LmFzc2lnbih7dmFsdWU6bi52YWx1ZX0saSk6ZVtyXT1pfX12YXIga2d0PUd0KEhUTUxFbGVtZW50KTtmdW5jdGlvbiB6Z3QoZSx0LHIpe2xldCBuLGk9e307Y2xhc3MgbyBleHRlbmRzIHR7c3RhdGljIF9maW5hbGl6ZUNsYXNzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiZ2VuZXJhdGVkRnJvbSIsdGhpcykpKXQuX2ZpbmFsaXplQ2xhc3MuY2FsbCh0aGlzKTtlbHNle2lmKG4pZm9yKGxldCBsPTAsYztsPG4ubGVuZ3RoO2wrKyljPW5bbF0sYy5wcm9wZXJ0aWVzJiZ0aGlzLmNyZWF0ZVByb3BlcnRpZXMoYy5wcm9wZXJ0aWVzKSxjLm9ic2VydmVycyYmdGhpcy5jcmVhdGVPYnNlcnZlcnMoYy5vYnNlcnZlcnMsYy5wcm9wZXJ0aWVzKTtlLnByb3BlcnRpZXMmJnRoaXMuY3JlYXRlUHJvcGVydGllcyhlLnByb3BlcnRpZXMpLGUub2JzZXJ2ZXJzJiZ0aGlzLmNyZWF0ZU9ic2VydmVycyhlLm9ic2VydmVycyxlLnByb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfX1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtsZXQgbD17fTtpZihuKWZvcihsZXQgYz0wO2M8bi5sZW5ndGg7YysrKUxndChsLG5bY10ucHJvcGVydGllcyk7cmV0dXJuIExndChsLGUucHJvcGVydGllcyksbH1zdGF0aWMgZ2V0IG9ic2VydmVycygpe2xldCBsPVtdO2lmKG4pZm9yKGxldCBjPTAsdTtjPG4ubGVuZ3RoO2MrKyl1PW5bY10sdS5vYnNlcnZlcnMmJihsPWwuY29uY2F0KHUub2JzZXJ2ZXJzKSk7cmV0dXJuIGUub2JzZXJ2ZXJzJiYobD1sLmNvbmNhdChlLm9ic2VydmVycykpLGx9Y3JlYXRlZCgpe3N1cGVyLmNyZWF0ZWQoKTtsZXQgbD1pLmNyZWF0ZWQ7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKylsW2NdLmNhbGwodGhpcyl9X3JlZ2lzdGVyZWQoKXtsZXQgbD1vLnByb3RvdHlwZTtpZighbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2hhc1JlZ2lzdGVyRmluaXNoZWQiLGwpKSl7bC5fX2hhc1JlZ2lzdGVyRmluaXNoZWQ9ITAsc3VwZXIuX3JlZ2lzdGVyZWQoKSxwcCYmYShsKTtsZXQgYz1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyksdT1pLmJlZm9yZVJlZ2lzdGVyO2lmKHUpZm9yKGxldCBoPTA7aDx1Lmxlbmd0aDtoKyspdVtoXS5jYWxsKGMpO2lmKHU9aS5yZWdpc3RlcmVkLHUpZm9yKGxldCBoPTA7aDx1Lmxlbmd0aDtoKyspdVtoXS5jYWxsKGMpfX1fYXBwbHlMaXN0ZW5lcnMoKXtzdXBlci5fYXBwbHlMaXN0ZW5lcnMoKTtsZXQgbD1pLmxpc3RlbmVycztpZihsKWZvcihsZXQgYz0wO2M8bC5sZW5ndGg7YysrKXtsZXQgdT1sW2NdO2lmKHUpZm9yKGxldCBoIGluIHUpdGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZSh0aGlzLGgsdVtoXSl9fV9lbnN1cmVBdHRyaWJ1dGVzKCl7bGV0IGw9aS5ob3N0QXR0cmlidXRlcztpZihsKWZvcihsZXQgYz1sLmxlbmd0aC0xO2M+PTA7Yy0tKXtsZXQgdT1sW2NdO2ZvcihsZXQgaCBpbiB1KXRoaXMuX2Vuc3VyZUF0dHJpYnV0ZShoLHVbaF0pfXN1cGVyLl9lbnN1cmVBdHRyaWJ1dGVzKCl9cmVhZHkoKXtzdXBlci5yZWFkeSgpO2xldCBsPWkucmVhZHk7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKylsW2NdLmNhbGwodGhpcyl9YXR0YWNoZWQoKXtzdXBlci5hdHRhY2hlZCgpO2xldCBsPWkuYXR0YWNoZWQ7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKylsW2NdLmNhbGwodGhpcyl9ZGV0YWNoZWQoKXtzdXBlci5kZXRhY2hlZCgpO2xldCBsPWkuZGV0YWNoZWQ7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKylsW2NdLmNhbGwodGhpcyl9YXR0cmlidXRlQ2hhbmdlZChsLGMsdSl7c3VwZXIuYXR0cmlidXRlQ2hhbmdlZCgpO2xldCBoPWkuYXR0cmlidXRlQ2hhbmdlZDtpZihoKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWhbZl0uY2FsbCh0aGlzLGwsYyx1KX19aWYocil7QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKTtsZXQgcz10LnByb3RvdHlwZS5iZWhhdmlvcnM7bj1PZ3QocixudWxsLHMpLG8ucHJvdG90eXBlLmJlaGF2aW9ycz1zP3MuY29uY2F0KHIpOm59bGV0IGE9cz0+e24mJiR4ZShzLG4saSksRGd0KHMsZSxpLFJndCl9O3JldHVybiBwcHx8YShvLnByb3RvdHlwZSksby5nZW5lcmF0ZWRGcm9tPWUsb312YXIgdTk9ZnVuY3Rpb24oZSx0KXtlfHxjb25zb2xlLndhcm4oIlBvbHltZXIuQ2xhc3MgcmVxdWlyZXMgYGluZm9gIGFyZ3VtZW50Iik7bGV0IHI9dD90KGtndCk6a2d0O3JldHVybiByPXpndChlLHIsZS5iZWhhdmlvcnMpLHIuaXM9ci5wcm90b3R5cGUuaXM9ZS5pcyxyfTt2YXIgWXQ9ZnVuY3Rpb24oZSl7bGV0IHQ7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iP3Q9ZTp0PVl0LkNsYXNzKGUpLGUuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzJiYodC5wcm90b3R5cGUuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzPWUuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzKSxjdXN0b21FbGVtZW50cy5kZWZpbmUodC5pcyx0KSx0fTtZdC5DbGFzcz11OTtmdW5jdGlvbiByVyhlLHQscixuLGkpe2xldCBvO2kmJihvPXR5cGVvZiByPT0ib2JqZWN0IiYmciE9PW51bGwsbyYmKG49ZS5fX2RhdGFUZW1wW3RdKSk7bGV0IGE9biE9PXImJihuPT09bnx8cj09PXIpO3JldHVybiBvJiZhJiYoZS5fX2RhdGFUZW1wW3RdPXIpLGF9dmFyIEd4PU5uKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtfc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLG8pe3JldHVybiByVyh0aGlzLG4saSxvLCEwKX19cmV0dXJuIHR9KSxoOT1ObihlPT57Y2xhc3MgdCBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue211dGFibGVEYXRhOkJvb2xlYW59fV9zaG91bGRQcm9wZXJ0eUNoYW5nZShuLGksbyl7cmV0dXJuIHJXKHRoaXMsbixpLG8sdGhpcy5tdXRhYmxlRGF0YSl9fXJldHVybiB0fSk7R3guX211dGFibGVQcm9wZXJ0eUNoYW5nZT1yVzt2YXIgblc9bnVsbDtmdW5jdGlvbiBpVygpe3JldHVybiBuV31pVy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShIVE1MVGVtcGxhdGVFbGVtZW50LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmlXLHdyaXRhYmxlOiEwfX0pO3ZhciBCZ3Q9dV8oaVcpLEt4ZT1HeChCZ3QpO2Z1bmN0aW9uIFp4ZShlLHQpe25XPWUsT2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdC5wcm90b3R5cGUpLG5ldyB0LG5XPW51bGx9dmFyIEp4ZT11XyhjbGFzc3t9KTtmdW5jdGlvbiBvVyhlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2lmKEJvb2xlYW4oZSkhPUJvb2xlYW4obi5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX18pKWlmKG4ubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSllPyhuLl9fcG9seW1lclRleHRDb250ZW50X189bi50ZXh0Q29udGVudCxuLnRleHRDb250ZW50PSIiKTpuLnRleHRDb250ZW50PW4uX19wb2x5bWVyVGV4dENvbnRlbnRfXztlbHNlIGlmKG4ubG9jYWxOYW1lPT09InNsb3QiKWlmKGUpbi5fX3BvbHltZXJSZXBsYWNlZF9fPWRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoImhpZGRlbi1zbG90IiksdWUodWUobikucGFyZW50Tm9kZSkucmVwbGFjZUNoaWxkKG4uX19wb2x5bWVyUmVwbGFjZWRfXyxuKTtlbHNle2xldCBpPW4uX19wb2x5bWVyUmVwbGFjZWRfXztpJiZ1ZSh1ZShpKS5wYXJlbnROb2RlKS5yZXBsYWNlQ2hpbGQobixpKX1lbHNlIG4uc3R5bGUmJihlPyhuLl9fcG9seW1lckRpc3BsYXlfXz1uLnN0eWxlLmRpc3BsYXksbi5zdHlsZS5kaXNwbGF5PSJub25lIik6bi5zdHlsZS5kaXNwbGF5PW4uX19wb2x5bWVyRGlzcGxheV9fKTtuLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXz1lLG4uX3Nob3dIaWRlQ2hpbGRyZW4mJm4uX3Nob3dIaWRlQ2hpbGRyZW4oZSl9fXZhciBiaD1jbGFzcyBleHRlbmRzIEp4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2NvbmZpZ3VyZVByb3BlcnRpZXModCksdGhpcy5yb290PXRoaXMuX3N0YW1wVGVtcGxhdGUodGhpcy5fX2RhdGFIb3N0KTtsZXQgcj1bXTt0aGlzLmNoaWxkcmVuPXI7Zm9yKGxldCBpPXRoaXMucm9vdC5maXJzdENoaWxkO2k7aT1pLm5leHRTaWJsaW5nKXIucHVzaChpKSxpLl9fdGVtcGxhdGl6ZUluc3RhbmNlPXRoaXM7dGhpcy5fX3RlbXBsYXRpemVPd25lciYmdGhpcy5fX3RlbXBsYXRpemVPd25lci5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX18mJnRoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oITApO2xldCBuPXRoaXMuX190ZW1wbGF0aXplT3B0aW9uczsodCYmbi5pbnN0YW5jZVByb3BzfHwhbi5pbnN0YW5jZVByb3BzKSYmdGhpcy5fZW5hYmxlUHJvcGVydGllcygpfV9jb25maWd1cmVQcm9wZXJ0aWVzKHQpe2lmKHRoaXMuX190ZW1wbGF0aXplT3B0aW9ucy5mb3J3YXJkSG9zdFByb3ApZm9yKGxldCBuIGluIHRoaXMuX19ob3N0UHJvcHMpdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sdGhpcy5fX2RhdGFIb3N0WyJfaG9zdF8iK25dKTtmb3IobGV0IG4gaW4gdCl0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkobix0W25dKX1mb3J3YXJkSG9zdFByb3AodCxyKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodCxyLCExLCEwKSYmdGhpcy5fX2RhdGFIb3N0Ll9lbnF1ZXVlQ2xpZW50KHRoaXMpfV9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKHQscixuKXtpZih0aGlzLl9tZXRob2RIb3N0JiZ0aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnMucGFyZW50TW9kZWwpdGhpcy5fbWV0aG9kSG9zdC5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsaT0+e2kubW9kZWw9dGhpcyxuKGkpfSk7ZWxzZXtsZXQgaT10aGlzLl9fZGF0YUhvc3QuX19kYXRhSG9zdDtpJiZpLl9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKHQscixuKX19X3Nob3dIaWRlQ2hpbGRyZW4odCl7b1codCx0aGlzLmNoaWxkcmVuKX1fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUodCxyLG4pe3QuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fJiZ0Lm5vZGVUeXBlPT1Ob2RlLlRFWFRfTk9ERSYmcj09InRleHRDb250ZW50Ij90Ll9fcG9seW1lclRleHRDb250ZW50X189bjpzdXBlci5fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUodCxyLG4pfWdldCBwYXJlbnRNb2RlbCgpe2xldCB0PXRoaXMuX19wYXJlbnRNb2RlbDtpZighdCl7bGV0IHI7dD10aGlzO2RvIHQ9dC5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7d2hpbGUoKHI9dC5fX3RlbXBsYXRpemVPcHRpb25zKSYmIXIucGFyZW50TW9kZWwpO3RoaXMuX19wYXJlbnRNb2RlbD10fXJldHVybiB0fWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuITB9fTtiaC5wcm90b3R5cGUuX19kYXRhSG9zdDtiaC5wcm90b3R5cGUuX190ZW1wbGF0aXplT3B0aW9ucztiaC5wcm90b3R5cGUuX21ldGhvZEhvc3Q7YmgucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU93bmVyO2JoLnByb3RvdHlwZS5fX2hvc3RQcm9wczt2YXIgUXhlPUd4KGJoKTtmdW5jdGlvbiBGZ3QoZSl7bGV0IHQ9ZS5fX2RhdGFIb3N0O3JldHVybiB0JiZ0Ll9tZXRob2RIb3N0fHx0fWZ1bmN0aW9uIHRiZShlLHQscil7bGV0IG49ci5tdXRhYmxlRGF0YT9ReGU6Ymg7dGMubWl4aW4mJihuPXRjLm1peGluKG4pKTtsZXQgaT1jbGFzcyBleHRlbmRzIG57fTtyZXR1cm4gaS5wcm90b3R5cGUuX190ZW1wbGF0aXplT3B0aW9ucz1yLGkucHJvdG90eXBlLl9iaW5kVGVtcGxhdGUoZSksbmJlKGksZSx0LHIpLGl9ZnVuY3Rpb24gZWJlKGUsdCxyLG4pe2xldCBpPXIuZm9yd2FyZEhvc3RQcm9wO2lmKGkmJnQuaGFzSG9zdFByb3BzKXtsZXQgbz1lLmxvY2FsTmFtZT09InRlbXBsYXRlIixhPXQudGVtcGxhdGl6ZVRlbXBsYXRlQ2xhc3M7aWYoIWEpe2lmKG8pe2xldCBsPXIubXV0YWJsZURhdGE/S3hlOkJndDtjbGFzcyBjIGV4dGVuZHMgbHt9YT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzPWN9ZWxzZXtsZXQgbD1lLmNvbnN0cnVjdG9yO2NsYXNzIGMgZXh0ZW5kcyBse31hPXQudGVtcGxhdGl6ZVRlbXBsYXRlQ2xhc3M9Y31sZXQgcz10Lmhvc3RQcm9wcztmb3IobGV0IGwgaW4gcylhLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QoIl9ob3N0XyIrbCxhLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuUFJPUEFHQVRFLHtmbjpyYmUobCxpKX0pLGEucHJvdG90eXBlLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eSgiX2hvc3RfIitsKTtJSSYmbiYmYWJlKHQscixuKX1pZihlLl9fZGF0YVByb3RvJiZPYmplY3QuYXNzaWduKGUuX19kYXRhLGUuX19kYXRhUHJvdG8pLG8pWnhlKGUsYSksZS5fX2RhdGFUZW1wPXt9LGUuX19kYXRhUGVuZGluZz1udWxsLGUuX19kYXRhT2xkPW51bGwsZS5fZW5hYmxlUHJvcGVydGllcygpO2Vsc2V7T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsYS5wcm90b3R5cGUpO2xldCBzPXQuaG9zdFByb3BzO2ZvcihsZXQgbCBpbiBzKWlmKGw9Il9ob3N0XyIrbCxsIGluIGUpe2xldCBjPWVbbF07ZGVsZXRlIGVbbF0sZS5fX2RhdGFbbF09Y319fX1mdW5jdGlvbiByYmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixpLG8pe3QuY2FsbChuLl9fdGVtcGxhdGl6ZU93bmVyLGkuc3Vic3RyaW5nKDYpLG9baV0pfX1mdW5jdGlvbiBuYmUoZSx0LHIsbil7bGV0IGk9ci5ob3N0UHJvcHN8fHt9O2ZvcihsZXQgbyBpbiBuLmluc3RhbmNlUHJvcHMpe2RlbGV0ZSBpW29dO2xldCBhPW4ubm90aWZ5SW5zdGFuY2VQcm9wO2EmJmUucHJvdG90eXBlLl9hZGRQcm9wZXJ0eUVmZmVjdChvLGUucHJvdG90eXBlLlBST1BFUlRZX0VGRkVDVF9UWVBFUy5OT1RJRlkse2ZuOmliZShvLGEpfSl9aWYobi5mb3J3YXJkSG9zdFByb3AmJnQuX19kYXRhSG9zdClmb3IobGV0IG8gaW4gaSlyLmhhc0hvc3RQcm9wc3x8KHIuaGFzSG9zdFByb3BzPSEwKSxlLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QobyxlLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLHtmbjpvYmUoKX0pfWZ1bmN0aW9uIGliZShlLHQpe3JldHVybiBmdW5jdGlvbihuLGksbyl7dC5jYWxsKG4uX190ZW1wbGF0aXplT3duZXIsbixpLG9baV0pfX1mdW5jdGlvbiBvYmUoKXtyZXR1cm4gZnVuY3Rpb24odCxyLG4pe3QuX19kYXRhSG9zdC5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKCJfaG9zdF8iK3IsbltyXSwhMCwhMCl9fWZ1bmN0aW9uIHRjKGUsdCxyKXtpZihpdSYmIUZndChlKSl0aHJvdyBuZXcgRXJyb3IoInN0cmljdFRlbXBsYXRlUG9saWN5OiB0ZW1wbGF0ZSBvd25lciBub3QgdHJ1c3RlZCIpO2lmKHI9cnx8e30sZS5fX3RlbXBsYXRpemVPd25lcil0aHJvdyBuZXcgRXJyb3IoIkEgPHRlbXBsYXRlPiBjYW4gb25seSBiZSB0ZW1wbGF0aXplZCBvbmNlIik7ZS5fX3RlbXBsYXRpemVPd25lcj10O2xldCBpPSh0P3QuY29uc3RydWN0b3I6YmgpLl9wYXJzZVRlbXBsYXRlKGUpLG89aS50ZW1wbGF0aXplSW5zdGFuY2VDbGFzcztvfHwobz10YmUoZSxpLHIpLGkudGVtcGxhdGl6ZUluc3RhbmNlQ2xhc3M9byk7bGV0IGE9Rmd0KGUpO2ViZShlLGkscixhKTtsZXQgcz1jbGFzcyBleHRlbmRzIG97fTtyZXR1cm4gcy5wcm90b3R5cGUuX21ldGhvZEhvc3Q9YSxzLnByb3RvdHlwZS5fX2RhdGFIb3N0PWUscy5wcm90b3R5cGUuX190ZW1wbGF0aXplT3duZXI9dCxzLnByb3RvdHlwZS5fX2hvc3RQcm9wcz1pLmhvc3RQcm9wcyxzPXMsc31mdW5jdGlvbiBhYmUoZSx0LHIpe2xldCBuPXIuY29uc3RydWN0b3IuX3Byb3BlcnRpZXMse3Byb3BlcnR5RWZmZWN0czppfT1lLHtpbnN0YW5jZVByb3BzOm99PXQ7Zm9yKGxldCBhIGluIGkpaWYoIW5bYV0mJiEobyYmb1thXSkpe2xldCBzPWlbYV07Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDtsKyspe2xldHtwYXJ0OmN9PXNbbF0uaW5mbztpZighKGMuc2lnbmF0dXJlJiZjLnNpZ25hdHVyZS5zdGF0aWMpKXtjb25zb2xlLndhcm4oYFByb3BlcnR5ICcke2F9JyB1c2VkIGluIHRlbXBsYXRlIGJ1dCBub3QgZGVjbGFyZWQgaW4gJ3Byb3BlcnRpZXMnOyBhdHRyaWJ1dGUgd2lsbCBub3QgYmUgb2JzZXJ2ZWQuYCk7YnJlYWt9fX19ZnVuY3Rpb24gZjkoZSx0KXtsZXQgcjtmb3IoO3Q7KWlmKHI9dC5fX2RhdGFIb3N0P3Q6dC5fX3RlbXBsYXRpemVJbnN0YW5jZSlpZihyLl9fZGF0YUhvc3QhPWUpdD1yLl9fZGF0YUhvc3Q7ZWxzZSByZXR1cm4gcjtlbHNlIHQ9dWUodCkucGFyZW50Tm9kZTtyZXR1cm4gbnVsbH12YXIgSGd0PXt0ZW1wbGF0aXplKGUsdCl7dGhpcy5fdGVtcGxhdGl6ZXJUZW1wbGF0ZT1lLHRoaXMuY3Rvcj10YyhlLHRoaXMse211dGFibGVEYXRhOkJvb2xlYW4odCkscGFyZW50TW9kZWw6dGhpcy5fcGFyZW50TW9kZWwsaW5zdGFuY2VQcm9wczp0aGlzLl9pbnN0YW5jZVByb3BzLGZvcndhcmRIb3N0UHJvcDp0aGlzLl9mb3J3YXJkSG9zdFByb3BWMixub3RpZnlJbnN0YW5jZVByb3A6dGhpcy5fbm90aWZ5SW5zdGFuY2VQcm9wVjJ9KX0sc3RhbXAoZSl7cmV0dXJuIG5ldyB0aGlzLmN0b3IoZSl9LG1vZGVsRm9yRWxlbWVudChlKXtyZXR1cm4gZjkodGhpcy5fdGVtcGxhdGl6ZXJUZW1wbGF0ZSxlKX19O3ZhciBWZ3Q9ITE7ZnVuY3Rpb24gV3goKXtpZihwcCYmIWNfKXtpZighVmd0KXtWZ3Q9ITA7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtlLnRleHRDb250ZW50PSJkb20tYmluZCxkb20taWYsZG9tLXJlcGVhdHtkaXNwbGF5Om5vbmU7fSIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlKX1yZXR1cm4hMH1yZXR1cm4hMX12YXIgc2JlPXloKGg5KHVfKEhUTUxFbGVtZW50KSkpLGFXPWNsYXNzIGV4dGVuZHMgc2Jle3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuWyJtdXRhYmxlLWRhdGEiXX1jb25zdHJ1Y3Rvcigpe2lmKHN1cGVyKCksaXUpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLWJpbmQgbm90IGFsbG93ZWQiKTt0aGlzLnJvb3Q9bnVsbCx0aGlzLiQ9bnVsbCx0aGlzLl9fY2hpbGRyZW49bnVsbH1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4saSl7dGhpcy5tdXRhYmxlRGF0YT0hMH1jb25uZWN0ZWRDYWxsYmFjaygpe1d4KCl8fCh0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLnJlbmRlcigpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX3JlbW92ZUNoaWxkcmVuKCl9X19pbnNlcnRDaGlsZHJlbigpe3VlKHVlKHRoaXMpLnBhcmVudE5vZGUpLmluc2VydEJlZm9yZSh0aGlzLnJvb3QsdGhpcyl9X19yZW1vdmVDaGlsZHJlbigpe2lmKHRoaXMuX19jaGlsZHJlbilmb3IobGV0IHQ9MDt0PHRoaXMuX19jaGlsZHJlbi5sZW5ndGg7dCsrKXRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLl9fY2hpbGRyZW5bdF0pfXJlbmRlcigpe2xldCB0O2lmKCF0aGlzLl9fY2hpbGRyZW4pe2lmKHQ9dHx8dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpLCF0KXtsZXQgcj1uZXcgTXV0YXRpb25PYnNlcnZlcigoKT0+e2lmKHQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpLHQpci5kaXNjb25uZWN0KCksdGhpcy5yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLWJpbmQgcmVxdWlyZXMgYSA8dGVtcGxhdGU+IGNoaWxkIil9KTtyLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSk7cmV0dXJufXRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHQpLHRoaXMuJD10aGlzLnJvb3QuJCx0aGlzLl9fY2hpbGRyZW49W107Zm9yKGxldCByPXRoaXMucm9vdC5maXJzdENoaWxkO3I7cj1yLm5leHRTaWJsaW5nKXRoaXMuX19jaGlsZHJlblt0aGlzLl9fY2hpbGRyZW4ubGVuZ3RoXT1yO3RoaXMuX2VuYWJsZVByb3BlcnRpZXMoKX10aGlzLl9faW5zZXJ0Q2hpbGRyZW4oKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJkb20tY2hhbmdlIix7YnViYmxlczohMCxjb21wb3NlZDohMH0pKX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLWJpbmQiLGFXKTt2YXIgbGJlPWg5KG10KSxwOT1jbGFzcyBleHRlbmRzIGxiZXtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImRvbS1yZXBlYXQifXN0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gbnVsbH1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57aXRlbXM6e3R5cGU6QXJyYXl9LGFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXRlbSJ9LGluZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbmRleCJ9LGl0ZW1zSW5kZXhBczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW1zSW5kZXgifSxzb3J0Ont0eXBlOkZ1bmN0aW9uLG9ic2VydmVyOiJfX3NvcnRDaGFuZ2VkIn0sZmlsdGVyOnt0eXBlOkZ1bmN0aW9uLG9ic2VydmVyOiJfX2ZpbHRlckNoYW5nZWQifSxvYnNlcnZlOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX19vYnNlcnZlQ2hhbmdlZCJ9LGRlbGF5Ok51bWJlcixyZW5kZXJlZEl0ZW1Db3VudDp7dHlwZTpOdW1iZXIsbm90aWZ5OiFVTSxyZWFkT25seTohMH0saW5pdGlhbENvdW50Ont0eXBlOk51bWJlcn0sdGFyZ2V0RnJhbWVyYXRlOnt0eXBlOk51bWJlcix2YWx1ZToyMH0sX3RhcmdldEZyYW1lVGltZTp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9fY29tcHV0ZUZyYW1lVGltZSh0YXJnZXRGcmFtZXJhdGUpIn0sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59LHJldXNlQ2h1bmtlZEluc3RhbmNlczp7dHlwZTpCb29sZWFufX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9faXRlbXNDaGFuZ2VkKGl0ZW1zLiopIl19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19pbnN0YW5jZXM9W10sdGhpcy5fX3JlbmRlckRlYm91bmNlcj1udWxsLHRoaXMuX19pdGVtc0lkeFRvSW5zdElkeD17fSx0aGlzLl9fY2h1bmtDb3VudD1udWxsLHRoaXMuX19yZW5kZXJTdGFydFRpbWU9bnVsbCx0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQ9ITEsdGhpcy5fX3Nob3VsZE1lYXN1cmVDaHVuaz0hMSx0aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZz0hMSx0aGlzLl9fY2h1bmtpbmdJZD0wLHRoaXMuX19zb3J0Rm49bnVsbCx0aGlzLl9fZmlsdGVyRm49bnVsbCx0aGlzLl9fb2JzZXJ2ZVBhdGhzPW51bGwsdGhpcy5fX2N0b3I9bnVsbCx0aGlzLl9faXNEZXRhY2hlZD0hMCx0aGlzLnRlbXBsYXRlPW51bGwsdGhpcy5fdGVtcGxhdGVJbmZvfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9faXNEZXRhY2hlZD0hMDtmb3IobGV0IHQ9MDt0PHRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO3QrKyl0aGlzLl9fZGV0YWNoSW5zdGFuY2UodCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtpZihzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLFd4KCl8fCh0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLl9faXNEZXRhY2hlZCl7dGhpcy5fX2lzRGV0YWNoZWQ9ITE7bGV0IHQ9dWUodWUodGhpcykucGFyZW50Tm9kZSk7Zm9yKGxldCByPTA7cjx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDtyKyspdGhpcy5fX2F0dGFjaEluc3RhbmNlKHIsdCl9fV9fZW5zdXJlVGVtcGxhdGl6ZWQoKXtpZighdGhpcy5fX2N0b3Ipe2xldCB0PXRoaXMscj10aGlzLnRlbXBsYXRlPXQuX3RlbXBsYXRlSW5mbz90OnRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtpZighcil7bGV0IGk9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih0aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIikpaS5kaXNjb25uZWN0KCksdGhpcy5fX3JlbmRlcigpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJkb20tcmVwZWF0IHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7cmV0dXJuIGkub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSwhMX1sZXQgbj17fTtuW3RoaXMuYXNdPSEwLG5bdGhpcy5pbmRleEFzXT0hMCxuW3RoaXMuaXRlbXNJbmRleEFzXT0hMCx0aGlzLl9fY3Rvcj10YyhyLHRoaXMse211dGFibGVEYXRhOnRoaXMubXV0YWJsZURhdGEscGFyZW50TW9kZWw6ITAsaW5zdGFuY2VQcm9wczpuLGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbihpLG8pe2xldCBhPXRoaXMuX19pbnN0YW5jZXM7Zm9yKGxldCBzPTAsbDtzPGEubGVuZ3RoJiYobD1hW3NdKTtzKyspbC5mb3J3YXJkSG9zdFByb3AoaSxvKX0sbm90aWZ5SW5zdGFuY2VQcm9wOmZ1bmN0aW9uKGksbyxhKXtpZihESSh0aGlzLmFzLG8pKXtsZXQgcz1pW3RoaXMuaXRlbXNJbmRleEFzXTtvPT10aGlzLmFzJiYodGhpcy5pdGVtc1tzXT1hKTtsZXQgbD1kcCh0aGlzLmFzLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtzfWAsbyk7dGhpcy5ub3RpZnlQYXRoKGwsYSl9fX0pfXJldHVybiEwfV9fZ2V0TWV0aG9kSG9zdCgpe3JldHVybiB0aGlzLl9fZGF0YUhvc3QuX21ldGhvZEhvc3R8fHRoaXMuX19kYXRhSG9zdH1fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXtsZXQgcj10LG49dGhpcy5fX2dldE1ldGhvZEhvc3QoKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbltyXS5hcHBseShuLGFyZ3VtZW50cyl9fXJldHVybiB0fV9fc29ydENoYW5nZWQodCl7dGhpcy5fX3NvcnRGbj10aGlzLl9fZnVuY3Rpb25Gcm9tUHJvcGVydHlWYWx1ZSh0KSx0aGlzLml0ZW1zJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcil9X19maWx0ZXJDaGFuZ2VkKHQpe3RoaXMuX19maWx0ZXJGbj10aGlzLl9fZnVuY3Rpb25Gcm9tUHJvcGVydHlWYWx1ZSh0KSx0aGlzLml0ZW1zJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcil9X19jb21wdXRlRnJhbWVUaW1lKHQpe3JldHVybiBNYXRoLmNlaWwoMWUzL3QpfV9fb2JzZXJ2ZUNoYW5nZWQoKXt0aGlzLl9fb2JzZXJ2ZVBhdGhzPXRoaXMub2JzZXJ2ZSYmdGhpcy5vYnNlcnZlLnJlcGxhY2UoIi4qIiwiLiIpLnNwbGl0KCIgIil9X19oYW5kbGVPYnNlcnZlZFBhdGhzKHQpe2lmKHRoaXMuX19zb3J0Rm58fHRoaXMuX19maWx0ZXJGbil7aWYoIXQpdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIsdGhpcy5kZWxheSk7ZWxzZSBpZih0aGlzLl9fb2JzZXJ2ZVBhdGhzKXtsZXQgcj10aGlzLl9fb2JzZXJ2ZVBhdGhzO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXQuaW5kZXhPZihyW25dKT09PTAmJnRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLHRoaXMuZGVsYXkpfX19X19pdGVtc0NoYW5nZWQodCl7dGhpcy5pdGVtcyYmIUFycmF5LmlzQXJyYXkodGhpcy5pdGVtcykmJmNvbnNvbGUud2FybigiZG9tLXJlcGVhdCBleHBlY3RlZCBhcnJheSBmb3IgYGl0ZW1zYCwgZm91bmQiLHRoaXMuaXRlbXMpLHRoaXMuX19oYW5kbGVJdGVtUGF0aCh0LnBhdGgsdC52YWx1ZSl8fCh0LnBhdGg9PT0iaXRlbXMiJiYodGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkPSEwKSx0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcikpfV9fZGVib3VuY2VSZW5kZXIodCxyPTApe3RoaXMuX19yZW5kZXJEZWJvdW5jZXI9c3IuZGVib3VuY2UodGhpcy5fX3JlbmRlckRlYm91bmNlcixyPjA/bW8uYWZ0ZXIocik6Y2ksdC5iaW5kKHRoaXMpKSxKbCh0aGlzLl9fcmVuZGVyRGVib3VuY2VyKX1yZW5kZXIoKXt0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlciksdWkoKX1fX3JlbmRlcigpe2lmKCF0aGlzLl9fZW5zdXJlVGVtcGxhdGl6ZWQoKSlyZXR1cm47bGV0IHQ9dGhpcy5pdGVtc3x8W10scj10aGlzLl9fc29ydEFuZEZpbHRlckl0ZW1zKHQpLG49dGhpcy5fX2NhbGN1bGF0ZUxpbWl0KHIubGVuZ3RoKTt0aGlzLl9fdXBkYXRlSW5zdGFuY2VzKHQsbixyKSx0aGlzLmluaXRpYWxDb3VudCYmKHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bmt8fHRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nKSYmKGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX19jaHVua2luZ0lkKSx0aGlzLl9fY2h1bmtpbmdJZD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX19jb250aW51ZUNodW5raW5nKCkpKSx0aGlzLl9zZXRSZW5kZXJlZEl0ZW1Db3VudCh0aGlzLl9faW5zdGFuY2VzLmxlbmd0aCksKCFVTXx8dGhpcy5ub3RpZnlEb21DaGFuZ2UpJiZ0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJkb20tY2hhbmdlIix7YnViYmxlczohMCxjb21wb3NlZDohMH0pKX1fX3NvcnRBbmRGaWx0ZXJJdGVtcyh0KXtsZXQgcj1uZXcgQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXJbbl09bjtyZXR1cm4gdGhpcy5fX2ZpbHRlckZuJiYocj1yLmZpbHRlcigobixpLG8pPT50aGlzLl9fZmlsdGVyRm4odFtuXSxpLG8pKSksdGhpcy5fX3NvcnRGbiYmci5zb3J0KChuLGkpPT50aGlzLl9fc29ydEZuKHRbbl0sdFtpXSkpLHJ9X19jYWxjdWxhdGVMaW1pdCh0KXtsZXQgcj10LG49dGhpcy5fX2luc3RhbmNlcy5sZW5ndGg7aWYodGhpcy5pbml0aWFsQ291bnQpe2xldCBpOyF0aGlzLl9fY2h1bmtDb3VudHx8dGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkJiYhdGhpcy5yZXVzZUNodW5rZWRJbnN0YW5jZXM/KHI9TWF0aC5taW4odCx0aGlzLmluaXRpYWxDb3VudCksaT1NYXRoLm1heChyLW4sMCksdGhpcy5fX2NodW5rQ291bnQ9aXx8MSk6KGk9TWF0aC5taW4oTWF0aC5tYXgodC1uLDApLHRoaXMuX19jaHVua0NvdW50KSxyPU1hdGgubWluKG4raSx0KSksdGhpcy5fX3Nob3VsZE1lYXN1cmVDaHVuaz1pPT09dGhpcy5fX2NodW5rQ291bnQsdGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmc9cjx0LHRoaXMuX19yZW5kZXJTdGFydFRpbWU9cGVyZm9ybWFuY2Uubm93KCl9cmV0dXJuIHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZD0hMSxyfV9fY29udGludWVDaHVua2luZygpe2lmKHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bmspe2xldCB0PXBlcmZvcm1hbmNlLm5vdygpLXRoaXMuX19yZW5kZXJTdGFydFRpbWUscj10aGlzLl90YXJnZXRGcmFtZVRpbWUvdDt0aGlzLl9fY2h1bmtDb3VudD1NYXRoLnJvdW5kKHRoaXMuX19jaHVua0NvdW50KnIpfHwxfXRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcil9X191cGRhdGVJbnN0YW5jZXModCxyLG4pe2xldCBpPXRoaXMuX19pdGVtc0lkeFRvSW5zdElkeD17fSxvO2ZvcihvPTA7bzxyO28rKyl7bGV0IGE9dGhpcy5fX2luc3RhbmNlc1tvXSxzPW5bb10sbD10W3NdO2lbc109byxhPyhhLl9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5hcyxsKSxhLl9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5pbmRleEFzLG8pLGEuX3NldFBlbmRpbmdQcm9wZXJ0eSh0aGlzLml0ZW1zSW5kZXhBcyxzKSxhLl9mbHVzaFByb3BlcnRpZXMoKSk6dGhpcy5fX2luc2VydEluc3RhbmNlKGwsbyxzKX1mb3IobGV0IGE9dGhpcy5fX2luc3RhbmNlcy5sZW5ndGgtMTthPj1vO2EtLSl0aGlzLl9fZGV0YWNoQW5kUmVtb3ZlSW5zdGFuY2UoYSl9X19kZXRhY2hJbnN0YW5jZSh0KXtsZXQgcj10aGlzLl9faW5zdGFuY2VzW3RdLG49dWUoci5yb290KTtmb3IobGV0IGk9MDtpPHIuY2hpbGRyZW4ubGVuZ3RoO2krKyl7bGV0IG89ci5jaGlsZHJlbltpXTtuLmFwcGVuZENoaWxkKG8pfXJldHVybiByfV9fYXR0YWNoSW5zdGFuY2UodCxyKXtsZXQgbj10aGlzLl9faW5zdGFuY2VzW3RdO3IuaW5zZXJ0QmVmb3JlKG4ucm9vdCx0aGlzKX1fX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKHQpe3RoaXMuX19kZXRhY2hJbnN0YW5jZSh0KSx0aGlzLl9faW5zdGFuY2VzLnNwbGljZSh0LDEpfV9fc3RhbXBJbnN0YW5jZSh0LHIsbil7bGV0IGk9e307cmV0dXJuIGlbdGhpcy5hc109dCxpW3RoaXMuaW5kZXhBc109cixpW3RoaXMuaXRlbXNJbmRleEFzXT1uLG5ldyB0aGlzLl9fY3RvcihpKX1fX2luc2VydEluc3RhbmNlKHQscixuKXtsZXQgaT10aGlzLl9fc3RhbXBJbnN0YW5jZSh0LHIsbiksbz10aGlzLl9faW5zdGFuY2VzW3IrMV0sYT1vP28uY2hpbGRyZW5bMF06dGhpcztyZXR1cm4gdWUodWUodGhpcykucGFyZW50Tm9kZSkuaW5zZXJ0QmVmb3JlKGkucm9vdCxhKSx0aGlzLl9faW5zdGFuY2VzW3JdPWksaX1fc2hvd0hpZGVDaGlsZHJlbih0KXtmb3IobGV0IHI9MDtyPHRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO3IrKyl0aGlzLl9faW5zdGFuY2VzW3JdLl9zaG93SGlkZUNoaWxkcmVuKHQpfV9faGFuZGxlSXRlbVBhdGgodCxyKXtsZXQgbj10LnNsaWNlKDYpLGk9bi5pbmRleE9mKCIuIiksbz1pPDA/bjpuLnN1YnN0cmluZygwLGkpO2lmKG89PXBhcnNlSW50KG8sMTApKXtsZXQgYT1pPDA/IiI6bi5zdWJzdHJpbmcoaSsxKTt0aGlzLl9faGFuZGxlT2JzZXJ2ZWRQYXRocyhhKTtsZXQgcz10aGlzLl9faXRlbXNJZHhUb0luc3RJZHhbb10sbD10aGlzLl9faW5zdGFuY2VzW3NdO2lmKGwpe2xldCBjPXRoaXMuYXMrKGE/Ii4iK2E6IiIpO2wuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChjLHIsITEsITApLGwuX2ZsdXNoUHJvcGVydGllcygpfXJldHVybiEwfX1pdGVtRm9yRWxlbWVudCh0KXtsZXQgcj10aGlzLm1vZGVsRm9yRWxlbWVudCh0KTtyZXR1cm4gciYmclt0aGlzLmFzXX1pbmRleEZvckVsZW1lbnQodCl7bGV0IHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodCk7cmV0dXJuIHImJnJbdGhpcy5pbmRleEFzXX1tb2RlbEZvckVsZW1lbnQodCl7cmV0dXJuIGY5KHRoaXMudGVtcGxhdGUsdCl9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUocDkuaXMscDkpO3ZhciBkOT1jbGFzcyBleHRlbmRzIG10e3N0YXRpYyBnZXQgaXMoKXtyZXR1cm4iZG9tLWlmIn1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIG51bGx9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2lmOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9fZGVib3VuY2VSZW5kZXIifSxyZXN0YW1wOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9fZGVib3VuY2VSZW5kZXIifSxub3RpZnlEb21DaGFuZ2U6e3R5cGU6Qm9vbGVhbn19fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fcmVuZGVyRGVib3VuY2VyPW51bGwsdGhpcy5fbGFzdElmPSExLHRoaXMuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fPSExLHRoaXMuX190ZW1wbGF0ZSx0aGlzLl90ZW1wbGF0ZUluZm99X19kZWJvdW5jZVJlbmRlcigpe3RoaXMuX19yZW5kZXJEZWJvdW5jZXI9c3IuZGVib3VuY2UodGhpcy5fX3JlbmRlckRlYm91bmNlcixjaSwoKT0+dGhpcy5fX3JlbmRlcigpKSxKbCh0aGlzLl9fcmVuZGVyRGVib3VuY2VyKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7bGV0IHQ9dWUodGhpcykucGFyZW50Tm9kZTsoIXR8fHQubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmIXVlKHQpLmhvc3QpJiZ0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5pZiYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKCl9X19lbnN1cmVUZW1wbGF0ZSgpe2lmKCF0aGlzLl9fdGVtcGxhdGUpe2xldCB0PXRoaXMscj10Ll90ZW1wbGF0ZUluZm8/dDp1ZSh0KS5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO2lmKCFyKXtsZXQgbj1uZXcgTXV0YXRpb25PYnNlcnZlcigoKT0+e2lmKHVlKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIikpbi5kaXNjb25uZWN0KCksdGhpcy5fX3JlbmRlcigpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJkb20taWYgcmVxdWlyZXMgYSA8dGVtcGxhdGU+IGNoaWxkIil9KTtyZXR1cm4gbi5vYnNlcnZlKHRoaXMse2NoaWxkTGlzdDohMH0pLCExfXRoaXMuX190ZW1wbGF0ZT1yfXJldHVybiEwfV9fZW5zdXJlSW5zdGFuY2UoKXtsZXQgdD11ZSh0aGlzKS5wYXJlbnROb2RlO2lmKHRoaXMuX19oYXNJbnN0YW5jZSgpKXtsZXQgcj10aGlzLl9fZ2V0SW5zdGFuY2VOb2RlcygpO2lmKHImJnIubGVuZ3RoJiZ1ZSh0aGlzKS5wcmV2aW91c1NpYmxpbmchPT1yW3IubGVuZ3RoLTFdKWZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKXVlKHQpLmluc2VydEJlZm9yZShvLHRoaXMpfWVsc2V7aWYoIXR8fCF0aGlzLl9fZW5zdXJlVGVtcGxhdGUoKSlyZXR1cm4hMTt0aGlzLl9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl9cmV0dXJuITB9cmVuZGVyKCl7dWkoKX1fX3JlbmRlcigpe2lmKHRoaXMuaWYpe2lmKCF0aGlzLl9fZW5zdXJlSW5zdGFuY2UoKSlyZXR1cm59ZWxzZSB0aGlzLnJlc3RhbXAmJnRoaXMuX190ZWFyZG93bkluc3RhbmNlKCk7dGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpLCghVU18fHRoaXMubm90aWZ5RG9tQ2hhbmdlKSYmdGhpcy5pZiE9dGhpcy5fbGFzdElmJiYodGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSksdGhpcy5fbGFzdElmPXRoaXMuaWYpfV9faGFzSW5zdGFuY2UoKXt9X19nZXRJbnN0YW5jZU5vZGVzKCl7fV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7fV9fdGVhcmRvd25JbnN0YW5jZSgpe31fc2hvd0hpZGVDaGlsZHJlbigpe319LHNXPWNsYXNzIGV4dGVuZHMgZDl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19zeW5jSW5mbz1udWxsfV9faGFzSW5zdGFuY2UoKXtyZXR1cm4gQm9vbGVhbih0aGlzLl9faW5zdGFuY2UpfV9fZ2V0SW5zdGFuY2VOb2Rlcygpe3JldHVybiB0aGlzLl9faW5zdGFuY2UudGVtcGxhdGVJbmZvLmNoaWxkTm9kZXN9X19jcmVhdGVBbmRJbnNlcnRJbnN0YW5jZSh0KXtsZXQgcj10aGlzLl9fZGF0YUhvc3R8fHRoaXM7aWYoaXUmJiF0aGlzLl9fZGF0YUhvc3QpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogdGVtcGxhdGUgb3duZXIgbm90IHRydXN0ZWQiKTtsZXQgbj1yLl9iaW5kVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlLCEwKTtuLnJ1bkVmZmVjdHM9KGksbyxhKT0+e2xldCBzPXRoaXMuX19zeW5jSW5mbztpZih0aGlzLmlmKXMmJih0aGlzLl9fc3luY0luZm89bnVsbCx0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCksbz1PYmplY3QuYXNzaWduKHMuY2hhbmdlZFByb3BzLG8pKSxpKG8sYSk7ZWxzZSBpZih0aGlzLl9faW5zdGFuY2UpaWYoc3x8KHM9dGhpcy5fX3N5bmNJbmZvPXtydW5FZmZlY3RzOmksY2hhbmdlZFByb3BzOnt9fSksYSlmb3IobGV0IGwgaW4gbyl7bGV0IGM9YXUobCk7cy5jaGFuZ2VkUHJvcHNbY109dGhpcy5fX2RhdGFIb3N0W2NdfWVsc2UgT2JqZWN0LmFzc2lnbihzLmNoYW5nZWRQcm9wcyxvKX0sdGhpcy5fX2luc3RhbmNlPXIuX3N0YW1wVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlLG4pLHVlKHQpLmluc2VydEJlZm9yZSh0aGlzLl9faW5zdGFuY2UsdGhpcyl9X19zeW5jSG9zdFByb3BlcnRpZXMoKXtsZXQgdD10aGlzLl9fc3luY0luZm87dCYmKHRoaXMuX19zeW5jSW5mbz1udWxsLHQucnVuRWZmZWN0cyh0LmNoYW5nZWRQcm9wcywhMSkpfV9fdGVhcmRvd25JbnN0YW5jZSgpe2xldCB0PXRoaXMuX19kYXRhSG9zdHx8dGhpczt0aGlzLl9faW5zdGFuY2UmJih0Ll9yZW1vdmVCb3VuZERvbSh0aGlzLl9faW5zdGFuY2UpLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19zeW5jSW5mbz1udWxsKX1fc2hvd0hpZGVDaGlsZHJlbigpe2xldCB0PXRoaXMuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9ffHwhdGhpcy5pZjt0aGlzLl9faW5zdGFuY2UmJkJvb2xlYW4odGhpcy5fX2luc3RhbmNlLl9faGlkZGVuKSE9PXQmJih0aGlzLl9faW5zdGFuY2UuX19oaWRkZW49dCxvVyh0LHRoaXMuX19pbnN0YW5jZS50ZW1wbGF0ZUluZm8uY2hpbGROb2RlcykpLHR8fHRoaXMuX19zeW5jSG9zdFByb3BlcnRpZXMoKX19LGxXPWNsYXNzIGV4dGVuZHMgZDl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19jdG9yPW51bGwsdGhpcy5fX2luc3RhbmNlPW51bGwsdGhpcy5fX2ludmFsaWRQcm9wcz1udWxsfV9faGFzSW5zdGFuY2UoKXtyZXR1cm4gQm9vbGVhbih0aGlzLl9faW5zdGFuY2UpfV9fZ2V0SW5zdGFuY2VOb2Rlcygpe3JldHVybiB0aGlzLl9faW5zdGFuY2UuY2hpbGRyZW59X19jcmVhdGVBbmRJbnNlcnRJbnN0YW5jZSh0KXt0aGlzLl9fY3Rvcnx8KHRoaXMuX19jdG9yPXRjKHRoaXMuX190ZW1wbGF0ZSx0aGlzLHttdXRhYmxlRGF0YTohMCxmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24ocixuKXt0aGlzLl9faW5zdGFuY2UmJih0aGlzLmlmP3RoaXMuX19pbnN0YW5jZS5mb3J3YXJkSG9zdFByb3AocixuKToodGhpcy5fX2ludmFsaWRQcm9wcz10aGlzLl9faW52YWxpZFByb3BzfHxPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX19pbnZhbGlkUHJvcHNbYXUocildPSEwKSl9fSkpLHRoaXMuX19pbnN0YW5jZT1uZXcgdGhpcy5fX2N0b3IsdWUodCkuaW5zZXJ0QmVmb3JlKHRoaXMuX19pbnN0YW5jZS5yb290LHRoaXMpfV9fdGVhcmRvd25JbnN0YW5jZSgpe2lmKHRoaXMuX19pbnN0YW5jZSl7bGV0IHQ9dGhpcy5fX2luc3RhbmNlLmNoaWxkcmVuO2lmKHQmJnQubGVuZ3RoKXtsZXQgcj11ZSh0WzBdKS5wYXJlbnROb2RlO2lmKHIpe3I9dWUocik7Zm9yKGxldCBuPTAsaTtuPHQubGVuZ3RoJiYoaT10W25dKTtuKyspci5yZW1vdmVDaGlsZChpKX19dGhpcy5fX2ludmFsaWRQcm9wcz1udWxsLHRoaXMuX19pbnN0YW5jZT1udWxsfX1fX3N5bmNIb3N0UHJvcGVydGllcygpe2xldCB0PXRoaXMuX19pbnZhbGlkUHJvcHM7aWYodCl7dGhpcy5fX2ludmFsaWRQcm9wcz1udWxsO2ZvcihsZXQgciBpbiB0KXRoaXMuX19pbnN0YW5jZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHIsdGhpcy5fX2RhdGFIb3N0W3JdKTt0aGlzLl9faW5zdGFuY2UuX2ZsdXNoUHJvcGVydGllcygpfX1fc2hvd0hpZGVDaGlsZHJlbigpe2xldCB0PXRoaXMuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9ffHwhdGhpcy5pZjt0aGlzLl9faW5zdGFuY2UmJkJvb2xlYW4odGhpcy5fX2luc3RhbmNlLl9faGlkZGVuKSE9PXQmJih0aGlzLl9faW5zdGFuY2UuX19oaWRkZW49dCx0aGlzLl9faW5zdGFuY2UuX3Nob3dIaWRlQ2hpbGRyZW4odCkpLHR8fHRoaXMuX19zeW5jSG9zdFByb3BlcnRpZXMoKX19LFVndD1rST9zVzpsVztjdXN0b21FbGVtZW50cy5kZWZpbmUoVWd0LmlzLFVndCk7dmFyIGNiZT1ObihlPT57bGV0IHQ9U20oZSk7Y2xhc3MgciBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOnt0eXBlOkFycmF5fSxtdWx0aTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzZWxlY3RlZDp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW06e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sdG9nZ2xlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX191cGRhdGVTZWxlY3Rpb24obXVsdGksIGl0ZW1zLiopIl19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19sYXN0SXRlbXM9bnVsbCx0aGlzLl9fbGFzdE11bHRpPW51bGwsdGhpcy5fX3NlbGVjdGVkTWFwPW51bGx9X191cGRhdGVTZWxlY3Rpb24oaSxvKXtsZXQgYT1vLnBhdGg7aWYoYT09SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpKXtsZXQgcz1vLmJhc2V8fFtdLGw9dGhpcy5fX2xhc3RJdGVtcyxjPXRoaXMuX19sYXN0TXVsdGk7aWYoaSE9PWMmJnRoaXMuY2xlYXJTZWxlY3Rpb24oKSxsKXtsZXQgdT1pOShzLGwpO3RoaXMuX19hcHBseVNwbGljZXModSl9dGhpcy5fX2xhc3RJdGVtcz1zLHRoaXMuX19sYXN0TXVsdGk9aX1lbHNlIGlmKG8ucGF0aD09YCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS5zcGxpY2VzYCl0aGlzLl9fYXBwbHlTcGxpY2VzKG8udmFsdWUuaW5kZXhTcGxpY2VzKTtlbHNle2xldCBzPWEuc2xpY2UoYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS5gLmxlbmd0aCksbD1wYXJzZUludChzLDEwKTtzLmluZGV4T2YoIi4iKTwwJiZzPT1sJiZ0aGlzLl9fZGVzZWxlY3RDaGFuZ2VkSWR4KGwpfX1fX2FwcGx5U3BsaWNlcyhpKXtsZXQgbz10aGlzLl9fc2VsZWN0ZWRNYXA7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspe2xldCBsPWlbc107by5mb3JFYWNoKChjLHUpPT57YzxsLmluZGV4fHwoYz49bC5pbmRleCtsLnJlbW92ZWQubGVuZ3RoP28uc2V0KHUsYytsLmFkZGVkQ291bnQtbC5yZW1vdmVkLmxlbmd0aCk6by5zZXQodSwtMSkpfSk7Zm9yKGxldCBjPTA7YzxsLmFkZGVkQ291bnQ7YysrKXtsZXQgdT1sLmluZGV4K2M7by5oYXModGhpcy5pdGVtc1t1XSkmJm8uc2V0KHRoaXMuaXRlbXNbdV0sdSl9fXRoaXMuX191cGRhdGVMaW5rcygpO2xldCBhPTA7by5mb3JFYWNoKChzLGwpPT57czwwPyh0aGlzLm11bHRpP3RoaXMuc3BsaWNlKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxhLDEpOnRoaXMuc2VsZWN0ZWQ9dGhpcy5zZWxlY3RlZEl0ZW09bnVsbCxvLmRlbGV0ZShsKSk6YSsrfSl9X191cGRhdGVMaW5rcygpe2lmKHRoaXMuX19kYXRhTGlua2VkUGF0aHM9e30sdGhpcy5tdWx0aSl7bGV0IGk9MDt0aGlzLl9fc2VsZWN0ZWRNYXAuZm9yRWFjaChvPT57bz49MCYmdGhpcy5saW5rUGF0aHMoYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS4ke299YCxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyl9LiR7aSsrfWApfSl9ZWxzZSB0aGlzLl9fc2VsZWN0ZWRNYXAuZm9yRWFjaChpPT57dGhpcy5saW5rUGF0aHMoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWApLHRoaXMubGlua1BhdGhzKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkSXRlbSIsdGhpcyksYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS4ke2l9YCl9KX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX19kYXRhTGlua2VkUGF0aHM9e30sdGhpcy5fX3NlbGVjdGVkTWFwPW5ldyBNYXAsdGhpcy5zZWxlY3RlZD10aGlzLm11bHRpP1tdOm51bGwsdGhpcy5zZWxlY3RlZEl0ZW09bnVsbH1pc1NlbGVjdGVkKGkpe3JldHVybiB0aGlzLl9fc2VsZWN0ZWRNYXAuaGFzKGkpfWlzSW5kZXhTZWxlY3RlZChpKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHRoaXMuaXRlbXNbaV0pfV9fZGVzZWxlY3RDaGFuZ2VkSWR4KGkpe2xldCBvPXRoaXMuX19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KGkpO2lmKG8+PTApe2xldCBhPTA7dGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goKHMsbCk9PntvPT1hKysmJnRoaXMuZGVzZWxlY3QobCl9KX19X19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KGkpe2xldCBvPXRoaXMuX19kYXRhTGlua2VkUGF0aHNbYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS4ke2l9YF07aWYobylyZXR1cm4gcGFyc2VJbnQoby5zbGljZShgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyl9LmAubGVuZ3RoKSwxMCl9ZGVzZWxlY3QoaSl7bGV0IG89dGhpcy5fX3NlbGVjdGVkTWFwLmdldChpKTtpZihvPj0wKXt0aGlzLl9fc2VsZWN0ZWRNYXAuZGVsZXRlKGkpO2xldCBhO3RoaXMubXVsdGkmJihhPXRoaXMuX19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KG8pKSx0aGlzLl9fdXBkYXRlTGlua3MoKSx0aGlzLm11bHRpP3RoaXMuc3BsaWNlKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxhLDEpOnRoaXMuc2VsZWN0ZWQ9dGhpcy5zZWxlY3RlZEl0ZW09bnVsbH19ZGVzZWxlY3RJbmRleChpKXt0aGlzLmRlc2VsZWN0KHRoaXMuaXRlbXNbaV0pfXNlbGVjdChpKXt0aGlzLnNlbGVjdEluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihpKSl9c2VsZWN0SW5kZXgoaSl7bGV0IG89dGhpcy5pdGVtc1tpXTt0aGlzLmlzU2VsZWN0ZWQobyk/dGhpcy50b2dnbGUmJnRoaXMuZGVzZWxlY3RJbmRleChpKToodGhpcy5tdWx0aXx8dGhpcy5fX3NlbGVjdGVkTWFwLmNsZWFyKCksdGhpcy5fX3NlbGVjdGVkTWFwLnNldChvLGkpLHRoaXMuX191cGRhdGVMaW5rcygpLHRoaXMubXVsdGk/dGhpcy5wdXNoKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxvKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW8pfX1yZXR1cm4gcn0pO3ZhciB1YmU9Y2JlKG10KSxtOT1jbGFzcyBleHRlbmRzIHViZXtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImFycmF5LXNlbGVjdG9yIn1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIG51bGx9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUobTkuaXMsbTkpO3ZhciBnOT1uZXcgWmw7d2luZG93LlNoYWR5Q1NTfHwod2luZG93LlNoYWR5Q1NTPXtwcmVwYXJlVGVtcGxhdGUoZSx0LHIpe30scHJlcGFyZVRlbXBsYXRlRG9tKGUsdCl7fSxwcmVwYXJlVGVtcGxhdGVTdHlsZXMoZSx0LHIpe30sc3R5bGVTdWJ0cmVlKGUsdCl7ZzkucHJvY2Vzc1N0eWxlcygpLEpNKGUsdCl9LHN0eWxlRWxlbWVudChlKXtnOS5wcm9jZXNzU3R5bGVzKCl9LHN0eWxlRG9jdW1lbnQoZSl7ZzkucHJvY2Vzc1N0eWxlcygpLEpNKGRvY3VtZW50LmJvZHksZSl9LGdldENvbXB1dGVkU3R5bGVWYWx1ZShlLHQpe3JldHVybiBZSShlLHQpfSxmbHVzaEN1c3RvbVN0eWxlcygpe30sbmF0aXZlQ3NzOk54LG5hdGl2ZVNoYWRvdzpoXyxjc3NCdWlsZDpNbSxkaXNhYmxlUnVudGltZTpHSX0pO3dpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT1nOTt2YXIgcWd0PSJpbmNsdWRlIixoYmU9d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlLGNXPWNsYXNzIGV4dGVuZHMgSFRNTEVsZW1lbnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3N0eWxlPW51bGwsaGJlLmFkZEN1c3RvbVN0eWxlKHRoaXMpfWdldFN0eWxlKCl7aWYodGhpcy5fc3R5bGUpcmV0dXJuIHRoaXMuX3N0eWxlO2xldCB0PXRoaXMucXVlcnlTZWxlY3Rvcigic3R5bGUiKTtpZighdClyZXR1cm4gbnVsbDt0aGlzLl9zdHlsZT10O2xldCByPXQuZ2V0QXR0cmlidXRlKHFndCk7cmV0dXJuIHImJih0LnJlbW92ZUF0dHJpYnV0ZShxZ3QpLHQudGV4dENvbnRlbnQ9dG10KHIpK3QudGV4dENvbnRlbnQpLHRoaXMub3duZXJEb2N1bWVudCE9PXdpbmRvdy5kb2N1bWVudCYmd2luZG93LmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodGhpcyksdGhpcy5fc3R5bGV9fTt3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCJjdXN0b20tc3R5bGUiLGNXKTt2YXIgR2d0O0dndD1HeC5fbXV0YWJsZVByb3BlcnR5Q2hhbmdlO3ZhciBXZ3Q9e3Byb3BlcnRpZXM6e211dGFibGVEYXRhOkJvb2xlYW59LF9zaG91bGRQcm9wZXJ0eUNoYW5nZShlLHQscil7cmV0dXJuIEdndCh0aGlzLGUsdCxyLHRoaXMubXV0YWJsZURhdGEpfX07dmFyIERhPUd0KEhUTUxFbGVtZW50KS5wcm90b3R5cGU7dmFyIF85PW5ldyBTZXQsSnM9e3Byb3BlcnRpZXM6e19wYXJlbnRSZXNpemFibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfcGFyZW50UmVzaXphYmxlQ2hhbmdlZCJ9LF9ub3RpZnlpbmdEZXNjZW5kYW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6eyJpcm9uLXJlcXVlc3QtcmVzaXplLW5vdGlmaWNhdGlvbnMiOiJfb25Jcm9uUmVxdWVzdFJlc2l6ZU5vdGlmaWNhdGlvbnMifSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXM9W10sdGhpcy5fYm91bmROb3RpZnlSZXNpemU9dGhpcy5ub3RpZnlSZXNpemUuYmluZCh0aGlzKSx0aGlzLl9ib3VuZE9uRGVzY2VuZGFudElyb25SZXNpemU9dGhpcy5fb25EZXNjZW5kYW50SXJvblJlc2l6ZS5iaW5kKHRoaXMpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcGFyZW50UmVzaXphYmxlP3RoaXMuX3BhcmVudFJlc2l6YWJsZS5zdG9wUmVzaXplTm90aWZpY2F0aW9uc0Zvcih0aGlzKTooXzkuZGVsZXRlKHRoaXMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplKSksdGhpcy5fcGFyZW50UmVzaXphYmxlPW51bGx9LG5vdGlmeVJlc2l6ZTpmdW5jdGlvbigpeyF0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RoaXMucmVzaXplclNob3VsZE5vdGlmeShlKSYmdGhpcy5fbm90aWZ5RGVzY2VuZGFudChlKX0sdGhpcyksdGhpcy5fZmlyZVJlc2l6ZSgpKX0sYXNzaWduUGFyZW50UmVzaXphYmxlOmZ1bmN0aW9uKGUpe3RoaXMuX3BhcmVudFJlc2l6YWJsZSYmdGhpcy5fcGFyZW50UmVzaXphYmxlLnN0b3BSZXNpemVOb3RpZmljYXRpb25zRm9yKHRoaXMpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT1lLGUmJmUuX2ludGVyZXN0ZWRSZXNpemFibGVzLmluZGV4T2YodGhpcyk9PT0tMSYmKGUuX2ludGVyZXN0ZWRSZXNpemFibGVzLnB1c2godGhpcyksZS5fc3Vic2NyaWJlSXJvblJlc2l6ZSh0aGlzKSl9LHN0b3BSZXNpemVOb3RpZmljYXRpb25zRm9yOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzLmluZGV4T2YoZSk7dD4tMSYmKHRoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzLnNwbGljZSh0LDEpLHRoaXMuX3Vuc3Vic2NyaWJlSXJvblJlc2l6ZShlKSl9LF9zdWJzY3JpYmVJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMuX2JvdW5kT25EZXNjZW5kYW50SXJvblJlc2l6ZSl9LF91bnN1YnNjcmliZUlyb25SZXNpemU6ZnVuY3Rpb24oZSl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJpcm9uLXJlc2l6ZSIsdGhpcy5fYm91bmRPbkRlc2NlbmRhbnRJcm9uUmVzaXplKX0scmVzaXplclNob3VsZE5vdGlmeTpmdW5jdGlvbihlKXtyZXR1cm4hMH0sX29uRGVzY2VuZGFudElyb25SZXNpemU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fbm90aWZ5aW5nRGVzY2VuZGFudCl7ZS5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm59Y198fHRoaXMuX2ZpcmVSZXNpemUoKX0sX2ZpcmVSZXNpemU6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoImlyb24tcmVzaXplIixudWxsLHtub2RlOnRoaXMsYnViYmxlczohMX0pfSxfb25Jcm9uUmVxdWVzdFJlc2l6ZU5vdGlmaWNhdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9enQoZSkucm9vdFRhcmdldDt0IT09dGhpcyYmKHQuYXNzaWduUGFyZW50UmVzaXphYmxlKHRoaXMpLHRoaXMuX25vdGlmeURlc2NlbmRhbnQodCksZS5zdG9wUHJvcGFnYXRpb24oKSl9LF9wYXJlbnRSZXNpemFibGVDaGFuZ2VkOmZ1bmN0aW9uKGUpe2UmJndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplKX0sX25vdGlmeURlc2NlbmRhbnQ6ZnVuY3Rpb24oZSl7IXRoaXMuaXNBdHRhY2hlZHx8KHRoaXMuX25vdGlmeWluZ0Rlc2NlbmRhbnQ9ITAsZS5ub3RpZnlSZXNpemUoKSx0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSExKX0sX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zOmZ1bmN0aW9uKCl7aWYoISF0aGlzLmlzQXR0YWNoZWQpaWYoZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJsb2FkaW5nIil7dmFyIGU9dGhpcy5fcmVxdWVzdFJlc2l6ZU5vdGlmaWNhdGlvbnMuYmluZCh0aGlzKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIixmdW5jdGlvbiB0KCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsdCksZSgpfSl9ZWxzZSB0aGlzLl9maW5kUGFyZW50KCksdGhpcy5fcGFyZW50UmVzaXphYmxlP3RoaXMuX3BhcmVudFJlc2l6YWJsZS5faW50ZXJlc3RlZFJlc2l6YWJsZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0IT09dGhpcyYmdC5fZmluZFBhcmVudCgpfSx0aGlzKTooXzkuZm9yRWFjaChmdW5jdGlvbih0KXt0IT09dGhpcyYmdC5fZmluZFBhcmVudCgpfSx0aGlzKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSksdGhpcy5ub3RpZnlSZXNpemUoKSl9LF9maW5kUGFyZW50OmZ1bmN0aW9uKCl7dGhpcy5hc3NpZ25QYXJlbnRSZXNpemFibGUobnVsbCksdGhpcy5maXJlKCJpcm9uLXJlcXVlc3QtcmVzaXplLW5vdGlmaWNhdGlvbnMiLG51bGwse25vZGU6dGhpcyxidWJibGVzOiEwLGNhbmNlbGFibGU6ITB9KSx0aGlzLl9wYXJlbnRSZXNpemFibGU/XzkuZGVsZXRlKHRoaXMpOl85LmFkZCh0aGlzKX19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLWlyb24tY29sbGFwc2UtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMzAwbXMpOwogICAgICAgIC8qIFNhZmFyaSAxMCBuZWVkcyB0aGlzIHByb3BlcnR5IHByZWZpeGVkIHRvIGNvcnJlY3RseSBhcHBseSB0aGUgY3VzdG9tIHByb3BlcnR5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1pcm9uLWNvbGxhcHNlLXRyYW5zaXRpb24tZHVyYXRpb24sIDMwMG1zKTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmlyb24tY29sbGFwc2UtY2xvc2VkKSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdCguaXJvbi1jb2xsYXBzZS1vcGVuZWQpKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6Imlyb24tY29sbGFwc2UiLGJlaGF2aW9yczpbSnNdLHByb3BlcnRpZXM6e2hvcml6b250YWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvcml6b250YWxDaGFuZ2VkIn0sb3BlbmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LHRyYW5zaXRpb25pbmc6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAscmVhZE9ubHk6ITB9LG5vQW5pbWF0aW9uOnt0eXBlOkJvb2xlYW59LF9kZXNpcmVkU2l6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxnZXQgZGltZW5zaW9uKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8id2lkdGgiOiJoZWlnaHQifSxnZXQgX2RpbWVuc2lvbk1heCgpe3JldHVybiB0aGlzLmhvcml6b250YWw/Im1heFdpZHRoIjoibWF4SGVpZ2h0In0sZ2V0IF9kaW1lbnNpb25NYXhDc3MoKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJtYXgtd2lkdGgiOiJtYXgtaGVpZ2h0In0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0sbGlzdGVuZXJzOnt0cmFuc2l0aW9uZW5kOiJfb25UcmFuc2l0aW9uRW5kIn0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9IXRoaXMub3BlbmVkfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITB9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD0hMX0sdXBkYXRlU2l6ZTpmdW5jdGlvbihlLHQpe2U9ZT09PSJhdXRvIj8iIjplO3ZhciByPXQmJiF0aGlzLm5vQW5pbWF0aW9uJiZ0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2Rlc2lyZWRTaXplIT09ZTtpZih0aGlzLl9kZXNpcmVkU2l6ZT1lLHRoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITEpLHIpe3ZhciBuPXRoaXMuX2NhbGNTaXplKCk7ZT09PSIiJiYodGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPSIiLGU9dGhpcy5fY2FsY1NpemUoKSksdGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPW4sdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3AsdGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMCkscj1lIT09bn10aGlzLnN0eWxlW3RoaXMuX2RpbWVuc2lvbk1heF09ZSxyfHx0aGlzLl90cmFuc2l0aW9uRW5kKCl9LGVuYWJsZVRyYW5zaXRpb246ZnVuY3Rpb24oZSl7RGEuX3dhcm4oImBlbmFibGVUcmFuc2l0aW9uKClgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgbm9BbmltYXRpb25gIGluc3RlYWQuIiksdGhpcy5ub0FuaW1hdGlvbj0hZX0sX3VwZGF0ZVRyYW5zaXRpb246ZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249ZSYmIXRoaXMubm9BbmltYXRpb24/IiI6IjBzIn0sX2hvcml6b250YWxDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS50cmFuc2l0aW9uUHJvcGVydHk9dGhpcy5fZGltZW5zaW9uTWF4Q3NzO3ZhciBlPXRoaXMuX2RpbWVuc2lvbk1heD09PSJtYXhXaWR0aCI/Im1heEhlaWdodCI6Im1heFdpZHRoIjt0aGlzLnN0eWxlW2VdPSIiLHRoaXMudXBkYXRlU2l6ZSh0aGlzLm9wZW5lZD8iYXV0byI6IjBweCIsITEpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsIXRoaXMub3BlbmVkKSx0aGlzLl9zZXRUcmFuc2l0aW9uaW5nKCEwKSx0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLWNsb3NlZCIsITEpLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2Utb3BlbmVkIiwhMSksdGhpcy51cGRhdGVTaXplKHRoaXMub3BlbmVkPyJhdXRvIjoiMHB4IiwhMCksdGhpcy5vcGVuZWQmJnRoaXMuZm9jdXMoKX0sX3RyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlW3RoaXMuX2RpbWVuc2lvbk1heF09dGhpcy5fZGVzaXJlZFNpemUsdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1jbG9zZWQiLCF0aGlzLm9wZW5lZCksdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1vcGVuZWQiLHRoaXMub3BlbmVkKSx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCExKSx0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX3NldFRyYW5zaXRpb25pbmcoITEpfSxfb25UcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUpe3p0KGUpLnJvb3RUYXJnZXQ9PT10aGlzJiZ0aGlzLl90cmFuc2l0aW9uRW5kKCl9LF9jYWxjU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuZGltZW5zaW9uXSsicHgifX0pO3ZhciBZZ3Q9UWAKLyogTW9zdCBjb21tb24gdXNlZCBmbGV4IHN0eWxlcyovCjxkb20tbW9kdWxlIGlkPSJpcm9uLWZsZXgiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmxheW91dC5ob3Jpem9udGFsLAogICAgICAubGF5b3V0LnZlcnRpY2FsIHsKICAgICAgICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5pbmxpbmUgewogICAgICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1mbGV4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICB9CgogICAgICAubGF5b3V0Lmhvcml6b250YWwgewogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICAubGF5b3V0LnZlcnRpY2FsIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLmxheW91dC53cmFwIHsKICAgICAgICAtbXMtZmxleC13cmFwOiB3cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwOwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQoKICAgICAgLmxheW91dC5uby13cmFwIHsKICAgICAgICAtbXMtZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmxheW91dC5jZW50ZXIsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5jZW50ZXItanVzdGlmaWVkLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAuZmxleCB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSAwLjAwMDAwMDAwMXB4OwogICAgICAgIC13ZWJraXQtZmxleDogMTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIC13ZWJraXQtZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgICBmbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICB9CgogICAgICAuZmxleC1hdXRvIHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfQoKICAgICAgLmZsZXgtbm9uZSB7CiAgICAgICAgLW1zLWZsZXg6IG5vbmU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiBub25lOwogICAgICAgIGZsZXg6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgovKiBCYXNpYyBmbGV4Ym94IHJldmVyc2Ugc3R5bGVzICovCjxkb20tbW9kdWxlIGlkPSJpcm9uLWZsZXgtcmV2ZXJzZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAubGF5b3V0Lmhvcml6b250YWwtcmV2ZXJzZSwKICAgICAgLmxheW91dC52ZXJ0aWNhbC1yZXZlcnNlIHsKICAgICAgICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5ob3Jpem9udGFsLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICB9CgogICAgICAubGF5b3V0LnZlcnRpY2FsLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9CgogICAgICAubGF5b3V0LndyYXAtcmV2ZXJzZSB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgovKiBGbGV4Ym94IGFsaWdubWVudCAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LWFsaWdubWVudCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAvKioKICAgICAgICogQWxpZ25tZW50IGluIGNyb3NzIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfQoKICAgICAgLmxheW91dC5jZW50ZXIsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5lbmQgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmJhc2VsaW5lIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmU7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQWxpZ25tZW50IGluIG1haW4gYXhpcy4KICAgICAgICovCiAgICAgIC5sYXlvdXQuc3RhcnQtanVzdGlmaWVkIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWp1c3RpZmllZCwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5lbmQtanVzdGlmaWVkIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuYXJvdW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CgogICAgICAubGF5b3V0Lmp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTZWxmIGFsaWdubWVudC4KICAgICAgICovCiAgICAgIC5zZWxmLXN0YXJ0IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgfQoKICAgICAgLnNlbGYtY2VudGVyIHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLnNlbGYtZW5kIHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLnNlbGYtc3RyZXRjaCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgIH0KCiAgICAgIC5zZWxmLWJhc2VsaW5lIHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICBhbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIG11bHRpLWxpbmUgYWxpZ25tZW50IGluIG1haW4gYXhpcy4KICAgICAgICovCiAgICAgIC5sYXlvdXQuc3RhcnQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgfQoKICAgICAgLmxheW91dC5lbmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAubGF5b3V0LmJldHdlZW4tYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgovKiBOb24tZmxleGJveCBwb3NpdGlvbmluZyBoZWxwZXIgc3R5bGVzICovCjxkb20tbW9kdWxlIGlkPSJpcm9uLWZsZXgtZmFjdG9ycyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuZmxleCwKICAgICAgLmZsZXgtMSB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSAwLjAwMDAwMDAwMXB4OwogICAgICAgIC13ZWJraXQtZmxleDogMTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIC13ZWJraXQtZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgICBmbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICB9CgogICAgICAuZmxleC0yIHsKICAgICAgICAtbXMtZmxleDogMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDI7CiAgICAgICAgZmxleDogMjsKICAgICAgfQoKICAgICAgLmZsZXgtMyB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH0KCiAgICAgIC5mbGV4LTQgewogICAgICAgIC1tcy1mbGV4OiA0OwogICAgICAgIC13ZWJraXQtZmxleDogNDsKICAgICAgICBmbGV4OiA0OwogICAgICB9CgogICAgICAuZmxleC01IHsKICAgICAgICAtbXMtZmxleDogNTsKICAgICAgICAtd2Via2l0LWZsZXg6IDU7CiAgICAgICAgZmxleDogNTsKICAgICAgfQoKICAgICAgLmZsZXgtNiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH0KCiAgICAgIC5mbGV4LTcgewogICAgICAgIC1tcy1mbGV4OiA3OwogICAgICAgIC13ZWJraXQtZmxleDogNzsKICAgICAgICBmbGV4OiA3OwogICAgICB9CgogICAgICAuZmxleC04IHsKICAgICAgICAtbXMtZmxleDogODsKICAgICAgICAtd2Via2l0LWZsZXg6IDg7CiAgICAgICAgZmxleDogODsKICAgICAgfQoKICAgICAgLmZsZXgtOSB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH0KCiAgICAgIC5mbGV4LTEwIHsKICAgICAgICAtbXMtZmxleDogMTA7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMDsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfQoKICAgICAgLmZsZXgtMTEgewogICAgICAgIC1tcy1mbGV4OiAxMTsKICAgICAgICAtd2Via2l0LWZsZXg6IDExOwogICAgICAgIGZsZXg6IDExOwogICAgICB9CgogICAgICAuZmxleC0xMiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1wb3NpdGlvbmluZyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuYmxvY2sgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaW52aXNpYmxlIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLnJlbGF0aXZlIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5maXQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIGJvZHkuZnVsbGJsZWVkIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfQoKICAgICAgLnNjcm9sbCB7CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAvKiBmaXhlZCBwb3NpdGlvbiAqLwogICAgICAuZml4ZWQtYm90dG9tLAogICAgICAuZml4ZWQtbGVmdCwKICAgICAgLmZpeGVkLXJpZ2h0LAogICAgICAuZml4ZWQtdG9wIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgIC5maXhlZC10b3AgewogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICB9CgogICAgICAuZml4ZWQtcmlnaHQgewogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5maXhlZC1ib3R0b20gewogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICAuZml4ZWQtbGVmdCB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KYDtZZ3Quc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChZZ3QuY29udGVudCk7dmFyIGpndD1RYAo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIFtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLS1sYXlvdXQ6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWlubGluZTogewogICAgICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1mbGV4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbDogewogICAgICAgIEBhcHBseSAtLWxheW91dDsKCiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH07CgogICAgICAtLWxheW91dC1ob3Jpem9udGFsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtdmVydGljYWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtdmVydGljYWwtcmV2ZXJzZTogewogICAgICAgIEBhcHBseSAtLWxheW91dDsKCiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC13cmFwOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH07CgogICAgICAtLWxheW91dC13cmFwLXJldmVyc2U6IHsKICAgICAgICAtbXMtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtYXV0bzogewogICAgICAgIC1tcy1mbGV4OiAxIDEgYXV0bzsKICAgICAgICAtd2Via2l0LWZsZXg6IDEgMSBhdXRvOwogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC1ub25lOiB7CiAgICAgICAgLW1zLWZsZXg6IG5vbmU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiBub25lOwogICAgICAgIGZsZXg6IG5vbmU7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4OiB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSAwLjAwMDAwMDAwMXB4OwogICAgICAgIC13ZWJraXQtZmxleDogMTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIC13ZWJraXQtZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgICBmbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0yOiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTM6IHsKICAgICAgICAtbXMtZmxleDogMzsKICAgICAgICAtd2Via2l0LWZsZXg6IDM7CiAgICAgICAgZmxleDogMzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNDogewogICAgICAgIC1tcy1mbGV4OiA0OwogICAgICAgIC13ZWJraXQtZmxleDogNDsKICAgICAgICBmbGV4OiA0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC01OiB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTY6IHsKICAgICAgICAtbXMtZmxleDogNjsKICAgICAgICAtd2Via2l0LWZsZXg6IDY7CiAgICAgICAgZmxleDogNjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNzogewogICAgICAgIC1tcy1mbGV4OiA3OwogICAgICAgIC13ZWJraXQtZmxleDogNzsKICAgICAgICBmbGV4OiA3OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC04OiB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTk6IHsKICAgICAgICAtbXMtZmxleDogOTsKICAgICAgICAtd2Via2l0LWZsZXg6IDk7CiAgICAgICAgZmxleDogOTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMTA6IHsKICAgICAgICAtbXMtZmxleDogMTA7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMDsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMTE6IHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMTI6IHsKICAgICAgICAtbXMtZmxleDogMTI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMjsKICAgICAgICBmbGV4OiAxMjsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBjcm9zcyBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydDogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtY2VudGVyOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZDogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmFzZWxpbmU6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmU7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogYWxpZ25tZW50IGluIG1haW4gYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWFyb3VuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1jZW50ZXI6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICB9OwoKICAgICAgLyogc2VsZiBhbGlnbm1lbnQgKi8KCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RhcnQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtY2VudGVyOiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWVuZDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1zdHJldGNoOiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH07CgogICAgICAvKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGVuZDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXI7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1iZXR3ZWVuLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGp1c3RpZnk7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZGlzdHJpYnV0ZTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfTsKCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICAgICBPdGhlciBMYXlvdXQKICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgICAgIC0tbGF5b3V0LWJsb2NrOiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbnZpc2libGU6IHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXJlbGF0aXZlOiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml0OiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNjcm9sbDogewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZ1bGxibGVlZDogewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICB9OwoKICAgICAgLyogZml4ZWQgcG9zaXRpb24gKi8KCiAgICAgIC0tbGF5b3V0LWZpeGVkLXRvcDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpeGVkLXJpZ2h0OiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1ib3R0b206IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1sZWZ0OiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfTsKCiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtqZ3Quc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChqZ3QuY29udGVudCk7dmFyIFhndD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO1hndC50ZXh0Q29udGVudD0iW2hpZGRlbl0geyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0iO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoWGd0KTt2YXIgZ289Y2xhc3N7Y29uc3RydWN0b3IodCl7Z29bIiAiXSh0KSx0aGlzLnR5cGU9dCYmdC50eXBlfHwiZGVmYXVsdCIsdGhpcy5rZXk9dCYmdC5rZXksdCYmInZhbHVlImluIHQmJih0aGlzLnZhbHVlPXQudmFsdWUpfWdldCB2YWx1ZSgpe3ZhciB0PXRoaXMudHlwZSxyPXRoaXMua2V5O2lmKHQmJnIpcmV0dXJuIGdvLnR5cGVzW3RdJiZnby50eXBlc1t0XVtyXX1zZXQgdmFsdWUodCl7dmFyIHI9dGhpcy50eXBlLG49dGhpcy5rZXk7ciYmbiYmKHI9Z28udHlwZXNbcl09Z28udHlwZXNbcl18fHt9LHQ9PW51bGw/ZGVsZXRlIHJbbl06cltuXT10KX1nZXQgbGlzdCgpe3ZhciB0PXRoaXMudHlwZTtpZih0KXt2YXIgcj1nby50eXBlc1t0aGlzLnR5cGVdO3JldHVybiByP09iamVjdC5rZXlzKHIpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gZmJlW3RoaXMudHlwZV1bbl19LHRoaXMpOltdfX1ieUtleSh0KXtyZXR1cm4gdGhpcy5rZXk9dCx0aGlzLnZhbHVlfX07Z29bIiAiXT1mdW5jdGlvbigpe307Z28udHlwZXM9e307dmFyIGZiZT1nby50eXBlcztZdCh7aXM6Imlyb24tbWV0YSIscHJvcGVydGllczp7dHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImRlZmF1bHQifSxrZXk6e3R5cGU6U3RyaW5nfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxmOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9zZWxmQ2hhbmdlZCJ9LF9fbWV0YTp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfX2NvbXB1dGVNZXRhKHR5cGUsIGtleSwgdmFsdWUpIn19LGhvc3RBdHRyaWJ1dGVzOntoaWRkZW46ITB9LF9fY29tcHV0ZU1ldGE6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPW5ldyBnbyh7dHlwZTplLGtleTp0fSk7cmV0dXJuIHIhPT12b2lkIDAmJnIhPT1uLnZhbHVlP24udmFsdWU9cjp0aGlzLnZhbHVlIT09bi52YWx1ZSYmKHRoaXMudmFsdWU9bi52YWx1ZSksbn0sZ2V0IGxpc3QoKXtyZXR1cm4gdGhpcy5fX21ldGEmJnRoaXMuX19tZXRhLmxpc3R9LF9zZWxmQ2hhbmdlZDpmdW5jdGlvbihlKXtlJiYodGhpcy52YWx1ZT10aGlzKX0sYnlLZXk6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnbyh7dHlwZTp0aGlzLnR5cGUsa2V5OmV9KS52YWx1ZX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKCiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgZmlsbDogdmFyKC0taXJvbi1pY29uLWZpbGwtY29sb3IsIGN1cnJlbnRjb2xvcik7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS1pcm9uLWljb24tc3Ryb2tlLWNvbG9yLCBub25lKTsKCiAgICAgICAgd2lkdGg6IHZhcigtLWlyb24taWNvbi13aWR0aCwgMjRweCk7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1pcm9uLWljb24taGVpZ2h0LCAyNHB4KTsKICAgICAgICBAYXBwbHkgLS1pcm9uLWljb247CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KYCxpczoiaXJvbi1pY29uIixwcm9wZXJ0aWVzOntpY29uOnt0eXBlOlN0cmluZ30sdGhlbWU6e3R5cGU6U3RyaW5nfSxzcmM6e3R5cGU6U3RyaW5nfSxfbWV0YTp7dmFsdWU6RGEuY3JlYXRlKCJpcm9uLW1ldGEiLHt0eXBlOiJpY29uc2V0In0pfX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZUljb24oX21ldGEsIGlzQXR0YWNoZWQpIiwiX3VwZGF0ZUljb24odGhlbWUsIGlzQXR0YWNoZWQpIiwiX3NyY0NoYW5nZWQoc3JjLCBpc0F0dGFjaGVkKSIsIl9pY29uQ2hhbmdlZChpY29uLCBpc0F0dGFjaGVkKSJdLF9ERUZBVUxUX0lDT05TRVQ6Imljb25zIixfaWNvbkNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9KGV8fCIiKS5zcGxpdCgiOiIpO3RoaXMuX2ljb25OYW1lPXQucG9wKCksdGhpcy5faWNvbnNldE5hbWU9dC5wb3AoKXx8dGhpcy5fREVGQVVMVF9JQ09OU0VULHRoaXMuX3VwZGF0ZUljb24oKX0sX3NyY0NoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5fdXBkYXRlSWNvbigpfSxfdXNlc0ljb25zZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29ufHwhdGhpcy5zcmN9LF91cGRhdGVJY29uOmZ1bmN0aW9uKCl7dGhpcy5fdXNlc0ljb25zZXQoKT8odGhpcy5faW1nJiZ0aGlzLl9pbWcucGFyZW50Tm9kZSYmenQodGhpcy5yb290KS5yZW1vdmVDaGlsZCh0aGlzLl9pbWcpLHRoaXMuX2ljb25OYW1lPT09IiI/dGhpcy5faWNvbnNldCYmdGhpcy5faWNvbnNldC5yZW1vdmVJY29uKHRoaXMpOnRoaXMuX2ljb25zZXROYW1lJiZ0aGlzLl9tZXRhJiYodGhpcy5faWNvbnNldD10aGlzLl9tZXRhLmJ5S2V5KHRoaXMuX2ljb25zZXROYW1lKSx0aGlzLl9pY29uc2V0Pyh0aGlzLl9pY29uc2V0LmFwcGx5SWNvbih0aGlzLHRoaXMuX2ljb25OYW1lLHRoaXMudGhlbWUpLHRoaXMudW5saXN0ZW4od2luZG93LCJpcm9uLWljb25zZXQtYWRkZWQiLCJfdXBkYXRlSWNvbiIpKTp0aGlzLmxpc3Rlbih3aW5kb3csImlyb24taWNvbnNldC1hZGRlZCIsIl91cGRhdGVJY29uIikpKToodGhpcy5faWNvbnNldCYmdGhpcy5faWNvbnNldC5yZW1vdmVJY29uKHRoaXMpLHRoaXMuX2ltZ3x8KHRoaXMuX2ltZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKSx0aGlzLl9pbWcuc3R5bGUud2lkdGg9IjEwMCUiLHRoaXMuX2ltZy5zdHlsZS5oZWlnaHQ9IjEwMCUiLHRoaXMuX2ltZy5kcmFnZ2FibGU9ITEpLHRoaXMuX2ltZy5zcmM9dGhpcy5zcmMsenQodGhpcy5yb290KS5hcHBlbmRDaGlsZCh0aGlzLl9pbWcpKX19KTtZdCh7aXM6Imlyb24taWNvbnNldC1zdmciLHByb3BlcnRpZXM6e25hbWU6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfbmFtZUNoYW5nZWQifSxzaXplOnt0eXBlOk51bWJlcix2YWx1ZToyNH0scnRsTWlycm9yaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHVzZUdsb2JhbFJ0bEF0dHJpYnV0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX21ldGE9bmV3IGdvKHt0eXBlOiJpY29uc2V0IixrZXk6bnVsbCx2YWx1ZTpudWxsfSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIn0sZ2V0SWNvbk5hbWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ljb25zPXRoaXMuX2NyZWF0ZUljb25NYXAoKSxPYmplY3Qua2V5cyh0aGlzLl9pY29ucykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5hbWUrIjoiK2V9LHRoaXMpfSxhcHBseUljb246ZnVuY3Rpb24oZSx0KXt0aGlzLnJlbW92ZUljb24oZSk7dmFyIHI9dGhpcy5fY2xvbmVJY29uKHQsdGhpcy5ydGxNaXJyb3JpbmcmJnRoaXMuX3RhcmdldElzUlRMKGUpKTtpZihyKXt2YXIgbj16dChlLnJvb3R8fGUpO3JldHVybiBuLmluc2VydEJlZm9yZShyLG4uY2hpbGROb2Rlc1swXSksZS5fc3ZnSWNvbj1yfXJldHVybiBudWxsfSxyZW1vdmVJY29uOmZ1bmN0aW9uKGUpe2UuX3N2Z0ljb24mJih6dChlLnJvb3R8fGUpLnJlbW92ZUNoaWxkKGUuX3N2Z0ljb24pLGUuX3N2Z0ljb249bnVsbCl9LF90YXJnZXRJc1JUTDpmdW5jdGlvbihlKXtpZih0aGlzLl9fdGFyZ2V0SXNSVEw9PW51bGwpaWYodGhpcy51c2VHbG9iYWxSdGxBdHRyaWJ1dGUpe3ZhciB0PWRvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCJkaXIiKT9kb2N1bWVudC5ib2R5OmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDt0aGlzLl9fdGFyZ2V0SXNSVEw9dC5nZXRBdHRyaWJ1dGUoImRpciIpPT09InJ0bCJ9ZWxzZSBlJiZlLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUmJihlPWUuaG9zdCksdGhpcy5fX3RhcmdldElzUlRMPWUmJndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmRpcmVjdGlvbj09PSJydGwiO3JldHVybiB0aGlzLl9fdGFyZ2V0SXNSVEx9LF9uYW1lQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX21ldGEudmFsdWU9bnVsbCx0aGlzLl9tZXRhLmtleT10aGlzLm5hbWUsdGhpcy5fbWV0YS52YWx1ZT10aGlzLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmZpcmUoImlyb24taWNvbnNldC1hZGRlZCIsdGhpcyx7bm9kZTp3aW5kb3d9KX0pfSxfY3JlYXRlSWNvbk1hcDpmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIHp0KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZF0iKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdC5pZF09dH0pLGV9LF9jbG9uZUljb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5faWNvbnM9dGhpcy5faWNvbnN8fHRoaXMuX2NyZWF0ZUljb25NYXAoKSx0aGlzLl9wcmVwYXJlU3ZnQ2xvbmUodGhpcy5faWNvbnNbZV0sdGhpcy5zaXplLHQpfSxfcHJlcGFyZVN2Z0Nsb25lOmZ1bmN0aW9uKGUsdCxyKXtpZihlKXt2YXIgbj1lLmNsb25lTm9kZSghMCksaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIiksbz1uLmdldEF0dHJpYnV0ZSgidmlld0JveCIpfHwiMCAwICIrdCsiICIrdCxhPSJwb2ludGVyLWV2ZW50czogbm9uZTsgZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IjtyZXR1cm4gciYmbi5oYXNBdHRyaWJ1dGUoIm1pcnJvci1pbi1ydGwiKSYmKGErPSItd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgtMSwxKTt0cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7IiksaS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLG8pLGkuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQgbWVldCIpLGkuc2V0QXR0cmlidXRlKCJmb2N1c2FibGUiLCJmYWxzZSIpLGkuc3R5bGUuY3NzVGV4dD1hLGkuYXBwZW5kQ2hpbGQobikucmVtb3ZlQXR0cmlidXRlKCJpZCIpLGl9cmV0dXJuIG51bGx9fSk7dmFyIHBiZT1RYDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9ImltYWdlIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSJhZGQtYS1waG90byI+PHBhdGggZD0iTTMgNFYxaDJ2M2gzdjJINXYzSDNWNkgwVjRoM3ptMyA2VjdoM1Y0aDdsMS44MyAySDIxYzEuMSAwIDIgLjkgMiAydjEyYzAgMS4xLS45IDItMiAySDVjLTEuMSAwLTItLjktMi0yVjEwaDN6bTcgOWMyLjc2IDAgNS0yLjI0IDUtNXMtMi4yNC01LTUtNS01IDIuMjQtNSA1IDIuMjQgNSA1IDV6bS0zLjItNWMwIDEuNzcgMS40MyAzLjIgMy4yIDMuMnMzLjItMS40MyAzLjItMy4yLTEuNDMtMy4yLTMuMi0zLjItMy4yIDEuNDMtMy4yIDMuMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtdG8tcGhvdG9zIj48cGF0aCBkPSJNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTE2LTRIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tMSA5aC00djRoLTJ2LTRIOVY5aDRWNWgydjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkanVzdCI+PHBhdGggZD0iTTEyIDJDNi40OSAyIDIgNi40OSAyIDEyczQuNDkgMTAgMTAgMTAgMTAtNC40OSAxMC0xMFMxNy41MSAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4em0zLThjMCAxLjY2LTEuMzQgMy0zIDNzLTMtMS4zNC0zLTMgMS4zNC0zIDMtMyAzIDEuMzQgMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lzdGFudCI+PHBhdGggZD0iTTE5IDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmg0bDMgMyAzLTNoNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNS4xMiAxMC44OEwxMiAxN2wtMS44OC00LjEyTDYgMTFsNC4xMi0xLjg4TDEyIDVsMS44OCA0LjEyTDE4IDExbC00LjEyIDEuODh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaXN0YW50LXBob3RvIj48cGF0aCBkPSJNMTQuNCA2TDE0IDRINXYxN2gydi03aDUuNmwuNCAyaDdWNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhdWRpb3RyYWNrIj48cGF0aCBkPSJNMTIgM3Y5LjI4Yy0uNDctLjE3LS45Ny0uMjgtMS41LS4yOEM4LjAxIDEyIDYgMTQuMDEgNiAxNi41UzguMDEgMjEgMTAuNSAyMWMyLjMxIDAgNC4yLTEuNzUgNC40NS00SDE1VjZoNFYzaC03eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJsdXItY2lyY3VsYXIiPjxwYXRoIGQ9Ik0xMCA5Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAgNGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xek03IDkuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTMgN2MtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bS0zLTNjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0zLTZjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xNCA5Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAtMS41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptMyA2Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMC00Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bTItMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMC0zLjVjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLWxpbmVhciI+PHBhdGggZD0iTTUgMTcuNWMuODMgMCAxLjUtLjY3IDEuNS0xLjVzLS42Ny0xLjUtMS41LTEuNS0xLjUuNjctMS41IDEuNS42NyAxLjUgMS41IDEuNXpNOSAxM2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wLTRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXpNMyAyMWgxOHYtMkgzdjJ6TTUgOS41Yy44MyAwIDEuNS0uNjcgMS41LTEuNVM1LjgzIDYuNSA1IDYuNSAzLjUgNy4xNyAzLjUgOCA0LjE3IDkuNSA1IDkuNXptMCA0Yy44MyAwIDEuNS0uNjcgMS41LTEuNXMtLjY3LTEuNS0xLjUtMS41LTEuNS42Ny0xLjUgMS41LjY3IDEuNSAxLjUgMS41ek05IDE3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTgtLjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0zIDN2MmgxOFYzSDN6bTE0IDUuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bTAgNGMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEzIDljLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMCA0Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAgNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJsdXItb2ZmIj48cGF0aCBkPSJNMTQgN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0tLjIgNC40OGwuMi4wMmMuODMgMCAxLjUtLjY3IDEuNS0xLjVzLS42Ny0xLjUtMS41LTEuNS0xLjUuNjctMS41IDEuNWwuMDIuMmMuMDkuNjcuNjEgMS4xOSAxLjI4IDEuMjh6TTE0IDMuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bS00IDBjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0xMSA3Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTAgN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem04IDhjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMC00Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0tNCAxMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNMi41IDUuMjdsMy43OCAzLjc4TDYgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTFjMC0uMS0uMDMtLjE5LS4wNi0uMjhsMi44MSAyLjgxYy0uNzEuMTEtMS4yNS43My0xLjI1IDEuNDcgMCAuODMuNjcgMS41IDEuNSAxLjUuNzQgMCAxLjM2LS41NCAxLjQ3LTEuMjVsMi44MSAyLjgxYy0uMDktLjAzLS4xOC0uMDYtLjI4LS4wNi0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMWMwLS4xLS4wMy0uMTktLjA2LS4yOGwzLjc4IDMuNzhMMjAgMjAuMjMgMy43NyA0IDIuNSA1LjI3ek0xMCAxN2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0xMS0zLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek02IDEzYy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6TTMgOS41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptNyAxMWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTYgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptLTMtMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLW9uIj48cGF0aCBkPSJNNiAxM2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wIDRjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMC04Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bS0zIC41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNNiA1Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTE1IDUuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTE0IDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMC0zLjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0tMTEgMTBjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em03IDdjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0wLTE3Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTAgN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wIDUuNWMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bTggLjVjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCA0Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAtOGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLTRjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMyA4LjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek0xNCAxN2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wIDMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bS00LTEyYy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptMCA4LjVjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptNC00LjVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em0wLTRjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyaWdodG5lc3MtMSI+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAiPjwvY2lyY2xlPjwvZz4KPGcgaWQ9ImJyaWdodG5lc3MtMiI+PHBhdGggZD0iTTEwIDJjLTEuODIgMC0zLjUzLjUtNSAxLjM1QzcuOTkgNS4wOCAxMCA4LjMgMTAgMTJzLTIuMDEgNi45Mi01IDguNjVDNi40NyAyMS41IDguMTggMjIgMTAgMjJjNS41MiAwIDEwLTQuNDggMTAtMTBTMTUuNTIgMiAxMCAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyaWdodG5lc3MtMyI+PHBhdGggZD0iTTkgMmMtMS4wNSAwLTIuMDUuMTYtMyAuNDYgNC4wNiAxLjI3IDcgNS4wNiA3IDkuNTQgMCA0LjQ4LTIuOTQgOC4yNy03IDkuNTQuOTUuMyAxLjk1LjQ2IDMgLjQ2IDUuNTIgMCAxMC00LjQ4IDEwLTEwUzE0LjUyIDIgOSAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyaWdodG5lc3MtNCI+PHBhdGggZD0iTTIwIDguNjlWNGgtNC42OUwxMiAuNjkgOC42OSA0SDR2NC42OUwuNjkgMTIgNCAxNS4zMVYyMGg0LjY5TDEyIDIzLjMxIDE1LjMxIDIwSDIwdi00LjY5TDIzLjMxIDEyIDIwIDguNjl6TTEyIDE4Yy0uODkgMC0xLjc0LS4yLTIuNS0uNTVDMTEuNTYgMTYuNSAxMyAxNC40MiAxMyAxMnMtMS40NC00LjUtMy41LTUuNDVDMTAuMjYgNi4yIDExLjExIDYgMTIgNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTUiPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThjLTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTYgNiAyLjY5IDYgNi0yLjY5IDYtNiA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyaWdodG5lc3MtNiI+PHBhdGggZD0iTTIwIDE1LjMxTDIzLjMxIDEyIDIwIDguNjlWNGgtNC42OUwxMiAuNjkgOC42OSA0SDR2NC42OUwuNjkgMTIgNCAxNS4zMVYyMGg0LjY5TDEyIDIzLjMxIDE1LjMxIDIwSDIwdi00LjY5ek0xMiAxOFY2YzMuMzEgMCA2IDIuNjkgNiA2cy0yLjY5IDYtNiA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyaWdodG5lc3MtNyI+PHBhdGggZD0iTTIwIDguNjlWNGgtNC42OUwxMiAuNjkgOC42OSA0SDR2NC42OUwuNjkgMTIgNCAxNS4zMVYyMGg0LjY5TDEyIDIzLjMxIDE1LjMxIDIwSDIwdi00LjY5TDIzLjMxIDEyIDIwIDguNjl6TTEyIDE4Yy0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02IDYgMi42OSA2IDYtMi42OSA2LTYgNnptMC0xMGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00LTEuNzktNC00LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJva2VuLWltYWdlIj48cGF0aCBkPSJNMjEgNXY2LjU5bC0zLTMuMDEtNCA0LjAxLTQtNC00IDQtMy0zLjAxVjVjMC0xLjEuOS0yIDItMmgxNGMxLjEgMCAyIC45IDIgMnptLTMgNi40MmwzIDMuMDFWMTljMCAxLjEtLjkgMi0yIDJINWMtMS4xIDAtMi0uOS0yLTJ2LTYuNThsMyAyLjk5IDQtNCA0IDQgNC0zLjk5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJydXNoIj48cGF0aCBkPSJNNyAxNGMtMS42NiAwLTMgMS4zNC0zIDMgMCAxLjMxLTEuMTYgMi0yIDIgLjkyIDEuMjIgMi40OSAyIDQgMiAyLjIxIDAgNC0xLjc5IDQtNCAwLTEuNjYtMS4zNC0zLTMtM3ptMTMuNzEtOS4zN2wtMS4zNC0xLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMEw5IDEyLjI1IDExLjc1IDE1bDguOTYtOC45NmMuMzktLjM5LjM5LTEuMDIgMC0xLjQxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJ1cnN0LW1vZGUiPjxwYXRoIGQ9Ik0xIDVoMnYxNEgxem00IDBoMnYxNEg1em0xNyAwSDEwYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoMTJjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xek0xMSAxN2wyLjUtMy4xNUwxNS4yOSAxNmwyLjUtMy4yMkwyMSAxN0gxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEiPjxwYXRoIGQ9Ik05LjQgMTAuNWw0Ljc3LTguMjZDMTMuNDcgMi4wOSAxMi43NSAyIDEyIDJjLTIuNCAwLTQuNi44NS02LjMyIDIuMjVsMy42NiA2LjM1LjA2LS4xek0yMS41NCA5Yy0uOTItMi45Mi0zLjE1LTUuMjYtNi02LjM0TDExLjg4IDloOS42NnptLjI2IDFoLTcuNDlsLjI5LjUgNC43NiA4LjI1QzIxIDE2Ljk3IDIyIDE0LjYxIDIyIDEyYzAtLjY5LS4wNy0xLjM1LS4yLTJ6TTguNTQgMTJsLTMuOS02Ljc1QzMuMDEgNy4wMyAyIDkuMzkgMiAxMmMwIC42OS4wNyAxLjM1LjIgMmg3LjQ5bC0xLjE1LTJ6bS02LjA4IDNjLjkyIDIuOTIgMy4xNSA1LjI2IDYgNi4zNEwxMi4xMiAxNUgyLjQ2em0xMS4yNyAwbC0zLjkgNi43NmMuNy4xNSAxLjQyLjI0IDIuMTcuMjQgMi40IDAgNC42LS44NSA2LjMyLTIuMjVsLTMuNjYtNi4zNS0uOTMgMS42eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1hbHQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTkgMkw3LjE3IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yaC0zLjE3TDE1IDJIOXptMyAxNWMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLWZyb250Ij48cGF0aCBkPSJNMTAgMjBINXYyaDV2MmwzLTMtMy0zdjJ6bTQgMHYyaDV2LTJoLTV6TTEyIDhjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTEuOTkuOS0xLjk5IDJTMTAuOSA4IDEyIDh6bTUtOEg3QzUuOSAwIDUgLjkgNSAydjE0YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWMmMwLTEuMS0uOS0yLTItMnpNNyAyaDEwdjEwLjVjMC0xLjY3LTMuMzMtMi41LTUtMi41cy01IC44My01IDIuNVYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1yZWFyIj48cGF0aCBkPSJNMTAgMjBINXYyaDV2MmwzLTMtMy0zdjJ6bTQgMHYyaDV2LTJoLTV6bTMtMjBIN0M1LjkgMCA1IC45IDUgMnYxNGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMi0yLTJ6bS01IDZjLTEuMTEgMC0yLS45LTItMnMuODktMiAxLjk5LTIgMiAuOSAyIDJDMTQgNS4xIDEzLjEgNiAxMiA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1yb2xsIj48cGF0aCBkPSJNMTQgNWMwLTEuMS0uOS0yLTItMmgtMVYyYzAtLjU1LS40NS0xLTEtMUg2Yy0uNTUgMC0xIC40NS0xIDF2MUg0Yy0xLjEgMC0yIC45LTIgMnYxNWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJoOFY1aC04em0tMiAxM2gtMnYtMmgydjJ6bTAtOWgtMlY3aDJ2MnptNCA5aC0ydi0yaDJ2MnptMC05aC0yVjdoMnYyem00IDloLTJ2LTJoMnYyem0wLTloLTJWN2gydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2VudGVyLWZvY3VzLXN0cm9uZyI+PHBhdGggZD0iTTEyIDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0tNyA3SDN2NGMwIDEuMS45IDIgMiAyaDR2LTJINXYtNHpNNSA1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnY0aDJWNXptMTQtMmgtNHYyaDR2NGgyVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZoLTR2Mmg0YzEuMSAwIDItLjkgMi0ydi00aC0ydjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2VudGVyLWZvY3VzLXdlYWsiPjxwYXRoIGQ9Ik01IDE1SDN2NGMwIDEuMS45IDIgMiAyaDR2LTJINXYtNHpNNSA1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnY0aDJWNXptMTQtMmgtNHYyaDR2NGgyVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZoLTR2Mmg0YzEuMSAwIDItLjkgMi0ydi00aC0ydjR6TTEyIDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0wIDZjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbGxlY3Rpb25zIj48cGF0aCBkPSJNMjIgMTZWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yem0tMTEtNGwyLjAzIDIuNzFMMTYgMTFsNCA1SDhsMy00ek0yIDZ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xsZWN0aW9ucy1ib29rbWFyayI+PHBhdGggZD0iTTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xNi00SDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptMCAxMGwtMi41LTEuNUwxNSAxMlY0aDV2OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xvci1sZW5zIj48cGF0aCBkPSJNMTIgM2MtNC45NyAwLTkgNC4wMy05IDlzNC4wMyA5IDkgOWMuODMgMCAxLjUtLjY3IDEuNS0xLjUgMC0uMzktLjE1LS43NC0uMzktMS4wMS0uMjMtLjI2LS4zOC0uNjEtLjM4LS45OSAwLS44My42Ny0xLjUgMS41LTEuNUgxNmMyLjc2IDAgNS0yLjI0IDUtNSAwLTQuNDItNC4wMy04LTktOHptLTUuNSA5Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTNS42NyA5IDYuNSA5IDggOS42NyA4IDEwLjUgNy4zMyAxMiA2LjUgMTJ6bTMtNEM4LjY3IDggOCA3LjMzIDggNi41UzguNjcgNSA5LjUgNXMxLjUuNjcgMS41IDEuNVMxMC4zMyA4IDkuNSA4em01IDBjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxMy42NyA1IDE0LjUgNXMxLjUuNjcgMS41IDEuNVMxNS4zMyA4IDE0LjUgOHptMyA0Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTYuNjcgOSAxNy41IDlzMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbG9yaXplIj48cGF0aCBkPSJNMjAuNzEgNS42M2wtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMy4xMiAzLjEyLTEuOTMtMS45MS0xLjQxIDEuNDEgMS40MiAxLjQyTDMgMTYuMjVWMjFoNC43NWw4LjkyLTguOTIgMS40MiAxLjQyIDEuNDEtMS40MS0xLjkyLTEuOTIgMy4xMi0zLjEyYy40LS40LjQtMS4wMy4wMS0xLjQyek02LjkyIDE5TDUgMTcuMDhsOC4wNi04LjA2IDEuOTIgMS45Mkw2LjkyIDE5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbXBhcmUiPjxwYXRoIGQ9Ik0xMCAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoNXYyaDJWMWgtMnYyem0wIDE1SDVsNS02djZ6bTktMTVoLTV2Mmg1djEzbC01LTZ2OWg1YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udHJvbC1wb2ludCI+PHBhdGggZD0iTTEzIDdoLTJ2NEg3djJoNHY0aDJ2LTRoNHYtMmgtNFY3em0tMS01QzYuNDkgMiAyIDYuNDkgMiAxMnM0LjQ5IDEwIDEwIDEwIDEwLTQuNDkgMTAtMTBTMTcuNTEgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb250cm9sLXBvaW50LWR1cGxpY2F0ZSI+PHBhdGggZD0iTTE2IDhoLTJ2M2gtM3YyaDN2M2gydi0zaDN2LTJoLTN6TTIgMTJjMC0yLjc5IDEuNjQtNS4yIDQuMDEtNi4zMlYzLjUyQzIuNTIgNC43NiAwIDguMDkgMCAxMnMyLjUyIDcuMjQgNi4wMSA4LjQ4di0yLjE2QzMuNjQgMTcuMiAyIDE0Ljc5IDIgMTJ6bTEzLTljLTQuOTYgMC05IDQuMDQtOSA5czQuMDQgOSA5IDkgOS00LjA0IDktOS00LjA0LTktOS05em0wIDE2Yy0zLjg2IDAtNy0zLjE0LTctN3MzLjE0LTcgNy03IDcgMy4xNCA3IDctMy4xNCA3LTcgN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wIj48cGF0aCBkPSJNMTcgMTVoMlY3YzAtMS4xLS45LTItMi0ySDl2Mmg4djh6TTcgMTdWMUg1djRIMXYyaDR2MTBjMCAxLjEuOSAyIDIgMmgxMHY0aDJ2LTRoNHYtMkg3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtMTYtOSI+PHBhdGggZD0iTTE5IDZINWMtMS4xIDAtMiAuOS0yIDJ2OGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bTAgMTBINVY4aDE0djh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC0zLTIiPjxwYXRoIGQ9Ik0xOSA0SDVjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNEg1VjZoMTR2MTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC01LTQiPjxwYXRoIGQ9Ik0xOSA1SDVjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxMkg1VjdoMTR2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC03LTUiPjxwYXRoIGQ9Ik0xOSA3SDVjLTEuMSAwLTIgLjktMiAydjZjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY5YzAtMS4xLS45LTItMi0yem0wIDhINVY5aDE0djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1kaW4iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1mcmVlIj48cGF0aCBkPSJNMyA1djRoMlY1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnptMiAxMEgzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6bTE0IDRoLTR2Mmg0YzEuMSAwIDItLjkgMi0ydi00aC0ydjR6bTAtMTZoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtbGFuZHNjYXBlIj48cGF0aCBkPSJNMTkgNUg1Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTJINVY3aDE0djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3Atb3JpZ2luYWwiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6bS01LjA0LTYuNzFsLTIuNzUgMy41NC0xLjk2LTIuMzZMNi41IDE3aDExbC0zLjU0LTQuNzF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1wb3J0cmFpdCI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDdWNWgxMHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLXJvdGF0ZSI+PHBhdGggZD0iTTcuNDcgMjEuNDlDNC4yIDE5LjkzIDEuODYgMTYuNzYgMS41IDEzSDBjLjUxIDYuMTYgNS42NiAxMSAxMS45NSAxMSAuMjMgMCAuNDQtLjAyLjY2LS4wM0w4LjggMjAuMTVsLTEuMzMgMS4zNHpNMTIuMDUgMGMtLjIzIDAtLjQ0LjAyLS42Ni4wNGwzLjgxIDMuODEgMS4zMy0xLjMzQzE5LjggNC4wNyAyMi4xNCA3LjI0IDIyLjUgMTFIMjRjLS41MS02LjE2LTUuNjYtMTEtMTEuOTUtMTF6TTE2IDE0aDJWOGMwLTEuMTEtLjktMi0yLTJoLTZ2Mmg2djZ6bS04IDJWNEg2djJINHYyaDJ2OGMwIDEuMS44OSAyIDIgMmg4djJoMnYtMmgydi0ySDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1zcXVhcmUiPjxwYXRoIGQ9Ik0xOCA0SDZjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNEg2VjZoMTJ2MTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVoYXplIj48cGF0aCBkPSJNMiAxNS41djJoMjB2LTJIMnptMC01djJoMjB2LTJIMnptMC01djJoMjB2LTJIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZXRhaWxzIj48cGF0aCBkPSJNMyA0bDkgMTYgOS0xNkgzem0zLjM4IDJoMTEuMjVMMTIgMTYgNi4zOCA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImVkaXQiPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUiPjxwYXRoIGQ9Ik0xNSAxN3YyaDJ2LTJoMnYtMmgtMnYtMmgtMnYyaC0ydjJoMnptNS0xNUg0Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTUgNWg2djJINVY1em0xNSAxNUg0TDIwIDR2MTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtbmVnLTEiPjxwYXRoIGQ9Ik00IDExdjJoOHYtMkg0em0xNSA3aC0yVjcuMzhMMTQgOC40VjYuN0wxOC43IDVoLjN2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtbmVnLTIiPjxwYXRoIGQ9Ik0xNS4wNSAxNi4yOWwyLjg2LTMuMDdjLjM4LS4zOS43Mi0uNzkgMS4wNC0xLjE4LjMyLS4zOS41OS0uNzguODItMS4xNy4yMy0uMzkuNDEtLjc4LjU0LTEuMTdzLjE5LS43OS4xOS0xLjE4YzAtLjUzLS4wOS0xLjAyLS4yNy0xLjQ2LS4xOC0uNDQtLjQ0LS44MS0uNzgtMS4xMS0uMzQtLjMxLS43Ny0uNTQtMS4yNi0uNzEtLjUxLS4xNi0xLjA4LS4yNC0xLjcyLS4yNC0uNjkgMC0xLjMxLjExLTEuODUuMzItLjU0LjIxLTEgLjUxLTEuMzYuODgtLjM3LjM3LS42NS44LS44NCAxLjMtLjE4LjQ3LS4yNy45Ny0uMjggMS41aDIuMTRjLjAxLS4zMS4wNS0uNi4xMy0uODcuMDktLjI5LjIzLS41NC40LS43NS4xOC0uMjEuNDEtLjM3LjY4LS40OS4yNy0uMTIuNi0uMTguOTYtLjE4LjMxIDAgLjU4LjA1LjgxLjE1LjIzLjEuNDMuMjUuNTkuNDMuMTYuMTguMjguNC4zNy42NS4wOC4yNS4xMy41Mi4xMy44MSAwIC4yMi0uMDMuNDMtLjA4LjY1LS4wNi4yMi0uMTUuNDUtLjI5LjctLjE0LjI1LS4zMi41My0uNTYuODMtLjIzLjMtLjUyLjY1LS44OCAxLjAzbC00LjE3IDQuNTVWMThIMjF2LTEuNzFoLTUuOTV6TTIgMTF2Mmg4di0ySDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtcGx1cy0xIj48cGF0aCBkPSJNMTAgN0g4djRINHYyaDR2NGgydi00aDR2LTJoLTRWN3ptMTAgMTFoLTJWNy4zOEwxNSA4LjRWNi43TDE5LjcgNWguM3YxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS1wbHVzLTIiPjxwYXRoIGQ9Ik0xNi4wNSAxNi4yOWwyLjg2LTMuMDdjLjM4LS4zOS43Mi0uNzkgMS4wNC0xLjE4LjMyLS4zOS41OS0uNzguODItMS4xNy4yMy0uMzkuNDEtLjc4LjU0LTEuMTcuMTMtLjM5LjE5LS43OS4xOS0xLjE4IDAtLjUzLS4wOS0xLjAyLS4yNy0xLjQ2LS4xOC0uNDQtLjQ0LS44MS0uNzgtMS4xMS0uMzQtLjMxLS43Ny0uNTQtMS4yNi0uNzEtLjUxLS4xNi0xLjA4LS4yNC0xLjcyLS4yNC0uNjkgMC0xLjMxLjExLTEuODUuMzItLjU0LjIxLTEgLjUxLTEuMzYuODgtLjM3LjM3LS42NS44LS44NCAxLjMtLjE4LjQ3LS4yNy45Ny0uMjggMS41aDIuMTRjLjAxLS4zMS4wNS0uNi4xMy0uODcuMDktLjI5LjIzLS41NC40LS43NS4xOC0uMjEuNDEtLjM3LjY4LS40OS4yNy0uMTIuNi0uMTguOTYtLjE4LjMxIDAgLjU4LjA1LjgxLjE1LjIzLjEuNDMuMjUuNTkuNDMuMTYuMTguMjguNC4zNy42NS4wOC4yNS4xMy41Mi4xMy44MSAwIC4yMi0uMDMuNDMtLjA4LjY1LS4wNi4yMi0uMTUuNDUtLjI5LjctLjE0LjI1LS4zMi41My0uNTYuODMtLjIzLjMtLjUyLjY1LS44OCAxLjAzbC00LjE3IDQuNTVWMThIMjJ2LTEuNzFoLTUuOTV6TTggN0g2djRIMnYyaDR2NGgydi00aDR2LTJIOFY3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLXplcm8iPjxwYXRoIGQ9Ik0xNi4xNCAxMi41YzAgMS0uMSAxLjg1LS4zIDIuNTUtLjIuNy0uNDggMS4yNy0uODMgMS43LS4zNi40NC0uNzkuNzUtMS4zLjk1LS41MS4yLTEuMDcuMy0xLjcuMy0uNjIgMC0xLjE4LS4xLTEuNjktLjMtLjUxLS4yLS45NS0uNTEtMS4zMS0uOTUtLjM2LS40NC0uNjUtMS4wMS0uODUtMS43LS4yLS43LS4zLTEuNTUtLjMtMi41NXYtMi4wNGMwLTEgLjEtMS44NS4zLTIuNTUuMi0uNy40OC0xLjI2Ljg0LTEuNjkuMzYtLjQzLjgtLjc0IDEuMzEtLjkzQzEwLjgxIDUuMSAxMS4zOCA1IDEyIDVjLjYzIDAgMS4xOS4xIDEuNy4yOS41MS4xOS45NS41IDEuMzEuOTMuMzYuNDMuNjQuOTkuODQgMS42OS4yLjcuMyAxLjU0LjMgMi41NXYyLjA0em0tMi4xMS0yLjM2YzAtLjY0LS4wNS0xLjE4LS4xMy0xLjYyLS4wOS0uNDQtLjIyLS43OS0uNC0xLjA2LS4xNy0uMjctLjM5LS40Ni0uNjQtLjU4LS4yNS0uMTMtLjU0LS4xOS0uODYtLjE5LS4zMiAwLS42MS4wNi0uODYuMThzLS40Ny4zMS0uNjQuNThjLS4xNy4yNy0uMzEuNjItLjQgMS4wNnMtLjEzLjk4LS4xMyAxLjYydjIuNjdjMCAuNjQuMDUgMS4xOC4xNCAxLjYyLjA5LjQ1LjIzLjgxLjQgMS4wOXMuMzkuNDguNjQuNjEuNTQuMTkuODcuMTljLjMzIDAgLjYyLS4wNi44Ny0uMTlzLjQ2LS4zMy42My0uNjFjLjE3LS4yOC4zLS42NC4zOS0xLjA5LjA5LS40NS4xMy0uOTkuMTMtMS42MnYtMi42NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXIiPjxwYXRoIGQ9Ik0xNS45NiAxMC4yOWwtMi43NSAzLjU0LTEuOTYtMi4zNkw4LjUgMTVoMTFsLTMuNTQtNC43MXpNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE4LTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItMSI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xMSAxMGgyVjVoLTR2Mmgydjh6bTctMTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItMiI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6bS00LTRoLTR2LTJoMmMxLjEgMCAyLS44OSAyLTJWN2MwLTEuMTEtLjktMi0yLTJoLTR2Mmg0djJoLTJjLTEuMSAwLTIgLjg5LTIgMnY0aDZ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTMiPjxwYXRoIGQ9Ik0yMSAxSDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6TTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xNCA4di0xLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41LjgzIDAgMS41LS42NyAxLjUtMS41VjdjMC0xLjExLS45LTItMi0yaC00djJoNHYyaC0ydjJoMnYyaC00djJoNGMxLjEgMCAyLS44OSAyLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTQiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTIgMTBoMlY1aC0ydjRoLTJWNWgtMnY2aDR2NHptNi0xNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci01Ij48cGF0aCBkPSJNMjEgMUg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTQgOHYtMmMwLTEuMTEtLjktMi0yLTJoLTJWN2g0VjVoLTZ2Nmg0djJoLTR2Mmg0YzEuMSAwIDItLjg5IDItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItNiI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6bS04LTJoMmMxLjEgMCAyLS44OSAyLTJ2LTJjMC0xLjExLS45LTItMi0yaC0yVjdoNFY1aC00Yy0xLjEgMC0yIC44OS0yIDJ2NmMwIDEuMTEuOSAyIDIgMnptMC00aDJ2MmgtMnYtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItNyI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6bS04LTJsNC04VjVoLTZ2Mmg0bC00IDhoMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItOCI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6bS04LTJoMmMxLjEgMCAyLS44OSAyLTJ2LTEuNWMwLS44My0uNjctMS41LTEuNS0xLjUuODMgMCAxLjUtLjY3IDEuNS0xLjVWN2MwLTEuMTEtLjktMi0yLTJoLTJjLTEuMSAwLTIgLjg5LTIgMnYxLjVjMCAuODMuNjcgMS41IDEuNSAxLjUtLjgzIDAtMS41LjY3LTEuNSAxLjVWMTNjMCAxLjExLjkgMiAyIDJ6bTAtOGgydjJoLTJWN3ptMCA0aDJ2MmgtMnYtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItOSI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6TTE1IDVoLTJjLTEuMSAwLTIgLjg5LTIgMnYyYzAgMS4xMS45IDIgMiAyaDJ2MmgtNHYyaDRjMS4xIDAgMi0uODkgMi0yVjdjMC0xLjExLS45LTItMi0yem0wIDRoLTJWN2gydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTktcGx1cyI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xMSA3VjhjMC0xLjExLS45LTItMi0yaC0xYy0xLjEgMC0yIC44OS0yIDJ2MWMwIDEuMTEuOSAyIDIgMmgxdjFIOXYyaDNjMS4xIDAgMi0uODkgMi0yem0tMy0zVjhoMXYxaC0xem0xMC04SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCA4aC0yVjdoLTJ2MmgtMnYyaDJ2Mmgydi0yaDJ2Nkg3VjNoMTR2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItYi1hbmQtdyI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2bC03LTh2OEg1bDctOFY1aDd2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWNlbnRlci1mb2N1cyI+PHBhdGggZD0iTTUgMTVIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00ek01IDVoNFYzSDVjLTEuMSAwLTIgLjktMiAydjRoMlY1em0xNC0yaC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmgtNHYyaDRjMS4xIDAgMi0uOSAyLTJ2LTRoLTJ2NHpNMTIgOWMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgMyAzLTEuMzQgMy0zLTEuMzQtMy0zLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWRyYW1hIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNjEgNS42NCA1LjM2IDguMDQgMi4zNSA4LjM2IDAgMTAuOSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xOSAxOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDRoMmMwLTIuNzYtMS44Ni01LjA4LTQuNC01Ljc4QzguNjEgNi44OCAxMC4yIDYgMTIgNmMzLjAzIDAgNS41IDIuNDcgNS41IDUuNXYuNUgxOWMxLjY1IDAgMyAxLjM1IDMgM3MtMS4zNSAzLTMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItZnJhbWVzIj48cGF0aCBkPSJNMjAgNGgtNGwtNC00LTQgNEg0Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTZINFY2aDQuNTJsMy41Mi0zLjVMMTUuNTIgNkgyMHYxNHpNMTggOEg2djEwaDEyIj48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWhkciI+PHBhdGggZD0iTTE0IDZsLTMuNzUgNSAyLjg1IDMuOC0xLjYgMS4yQzkuODEgMTMuNzUgNyAxMCA3IDEwbC02IDhoMjJMMTQgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItbm9uZSI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLXRpbHQtc2hpZnQiPjxwYXRoIGQ9Ik0xMSA0LjA3VjIuMDVjLTIuMDEuMi0zLjg0IDEtNS4zMiAyLjIxTDcuMSA1LjY5YzEuMTEtLjg2IDIuNDQtMS40NCAzLjktMS42MnptNy4zMi4xOUMxNi44NCAzLjA1IDE1LjAxIDIuMjUgMTMgMi4wNXYyLjAyYzEuNDYuMTggMi43OS43NiAzLjkgMS42MmwxLjQyLTEuNDN6TTE5LjkzIDExaDIuMDJjLS4yLTIuMDEtMS0zLjg0LTIuMjEtNS4zMkwxOC4zMSA3LjFjLjg2IDEuMTEgMS40NCAyLjQ0IDEuNjIgMy45ek01LjY5IDcuMUw0LjI2IDUuNjhDMy4wNSA3LjE2IDIuMjUgOC45OSAyLjA1IDExaDIuMDJjLjE4LTEuNDYuNzYtMi43OSAxLjYyLTMuOXpNNC4wNyAxM0gyLjA1Yy4yIDIuMDEgMSAzLjg0IDIuMjEgNS4zMmwxLjQzLTEuNDNjLS44Ni0xLjEtMS40NC0yLjQzLTEuNjItMy44OXpNMTUgMTJjMC0xLjY2LTEuMzQtMy0zLTNzLTMgMS4zNC0zIDMgMS4zNCAzIDMgMyAzLTEuMzQgMy0zem0zLjMxIDQuOWwxLjQzIDEuNDNjMS4yMS0xLjQ4IDIuMDEtMy4zMiAyLjIxLTUuMzJoLTIuMDJjLS4xOCAxLjQ1LS43NiAyLjc4LTEuNjIgMy44OXpNMTMgMTkuOTN2Mi4wMmMyLjAxLS4yIDMuODQtMSA1LjMyLTIuMjFsLTEuNDMtMS40M2MtMS4xLjg2LTIuNDMgMS40NC0zLjg5IDEuNjJ6bS03LjMyLS4xOUM3LjE2IDIwLjk1IDkgMjEuNzUgMTEgMjEuOTV2LTIuMDJjLTEuNDYtLjE4LTIuNzktLjc2LTMuOS0xLjYybC0xLjQyIDEuNDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLXZpbnRhZ2UiPjxwYXRoIGQ9Ik0xOC43IDEyLjRjLS4yOC0uMTYtLjU3LS4yOS0uODYtLjQuMjktLjExLjU4LS4yNC44Ni0uNCAxLjkyLTEuMTEgMi45OS0zLjEyIDMtNS4xOS0xLjc5LTEuMDMtNC4wNy0xLjExLTYgMC0uMjguMTYtLjU0LjM1LS43OC41NC4wNS0uMzEuMDgtLjYzLjA4LS45NSAwLTIuMjItMS4yMS00LjE1LTMtNS4xOUMxMC4yMSAxLjg1IDkgMy43OCA5IDZjMCAuMzIuMDMuNjQuMDguOTUtLjI0LS4yLS41LS4zOS0uNzgtLjU1LTEuOTItMS4xMS00LjItMS4wMy02IDAgMCAyLjA3IDEuMDcgNC4wOCAzIDUuMTkuMjguMTYuNTcuMjkuODYuNC0uMjkuMTEtLjU4LjI0LS44Ni40LTEuOTIgMS4xMS0yLjk5IDMuMTItMyA1LjE5IDEuNzkgMS4wMyA0LjA3IDEuMTEgNiAwIC4yOC0uMTYuNTQtLjM1Ljc4LS41NC0uMDUuMzItLjA4LjY0LS4wOC45NiAwIDIuMjIgMS4yMSA0LjE1IDMgNS4xOSAxLjc5LTEuMDQgMy0yLjk3IDMtNS4xOSAwLS4zMi0uMDMtLjY0LS4wOC0uOTUuMjQuMi41LjM4Ljc4LjU0IDEuOTIgMS4xMSA0LjIgMS4wMyA2IDAtLjAxLTIuMDctMS4wOC00LjA4LTMtNS4xOXpNMTIgMTZjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNC0xLjc5IDQtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYXJlIj48cGF0aCBkPSJNNyAxMUgxdjJoNnYtMnptMi4xNy0zLjI0TDcuMDUgNS42NCA1LjY0IDcuMDVsMi4xMiAyLjEyIDEuNDEtMS40MXpNMTMgMWgtMnY2aDJWMXptNS4zNiA2LjA1bC0xLjQxLTEuNDEtMi4xMiAyLjEyIDEuNDEgMS40MSAyLjEyLTIuMTJ6TTE3IDExdjJoNnYtMmgtNnptLTUtMmMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgMyAzLTEuMzQgMy0zLTEuMzQtMy0zLTN6bTIuODMgNy4yNGwyLjEyIDIuMTIgMS40MS0xLjQxLTIuMTItMi4xMi0xLjQxIDEuNDF6bS05LjE5LjcxbDEuNDEgMS40MSAyLjEyLTIuMTItMS40MS0xLjQxLTIuMTIgMi4xMnpNMTEgMjNoMnYtNmgtMnY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYXNoLWF1dG8iPjxwYXRoIGQ9Ik0zIDJ2MTJoM3Y5bDctMTJIOWw0LTlIM3ptMTYgMGgtMmwtMy4yIDloMS45bC43LTJoMy4ybC43IDJoMS45TDE5IDJ6bS0yLjE1IDUuNjVMMTggNGwxLjE1IDMuNjVoLTIuM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFzaC1vZmYiPjxwYXRoIGQ9Ik0zLjI3IDNMMiA0LjI3bDUgNVYxM2gzdjlsMy41OC02LjE0TDE3LjczIDIwIDE5IDE4LjczIDMuMjcgM3pNMTcgMTBoLTRsNC04SDd2Mi4xOGw4LjQ2IDguNDZMMTcgMTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhc2gtb24iPjxwYXRoIGQ9Ik03IDJ2MTFoM3Y5bDctMTJoLTRsNC04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaXAiPjxwYXRoIGQ9Ik0xNSAyMWgydi0yaC0ydjJ6bTQtMTJoMlY3aC0ydjJ6TTMgNXYxNGMwIDEuMS45IDIgMiAyaDR2LTJINVY1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnptMTYtMnYyaDJjMC0xLjEtLjktMi0yLTJ6bS04IDIwaDJWMWgtMnYyMnptOC02aDJ2LTJoLTJ2MnpNMTUgNWgyVjNoLTJ2MnptNCA4aDJ2LTJoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JhZGllbnQiPjxwYXRoIGQ9Ik0xMSA5aDJ2MmgtMnptLTIgMmgydjJIOXptNCAwaDJ2MmgtMnptMi0yaDJ2MmgtMnpNNyA5aDJ2Mkg3em0xMi02SDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxOEg3di0yaDJ2MnptNCAwaC0ydi0yaDJ2MnptNCAwaC0ydi0yaDJ2MnptMi03aC0ydjJoMnYyaC0ydi0yaC0ydjJoLTJ2LTJoLTJ2Mkg5di0ySDd2Mkg1di0yaDJ2LTJINVY1aDE0djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JhaW4iPjxwYXRoIGQ9Ik0xMCAxMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6TTYgOGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgOGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyLThjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0tNCA4Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNC00Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptLTQtNGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bS00LTRjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyaWQtb2ZmIj48cGF0aCBkPSJNOCA0djEuNDVsMiAyVjRoNHY0aC0zLjQ1bDIgMkgxNHYxLjQ1bDIgMlYxMGg0djRoLTMuNDVsMiAySDIwdjEuNDVsMiAyVjRjMC0xLjEtLjktMi0yLTJINC41NWwyIDJIOHptOCAwaDR2NGgtNFY0ek0xLjI3IDEuMjdMMCAyLjU1bDIgMlYyMGMwIDEuMS45IDIgMiAyaDE1LjQ2bDIgMiAxLjI3LTEuMjdMMS4yNyAxLjI3ek0xMCAxMi41NUwxMS40NSAxNEgxMHYtMS40NXptLTYtNkw1LjQ1IDhINFY2LjU1ek04IDIwSDR2LTRoNHY0em0wLTZINHYtNGgzLjQ1bC41NS41NVYxNHptNiA2aC00di00aDMuNDVsLjU1LjU0VjIwem0yIDB2LTEuNDZMMTcuNDYgMjBIMTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JpZC1vbiI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek04IDIwSDR2LTRoNHY0em0wLTZINHYtNGg0djR6bTAtNkg0VjRoNHY0em02IDEyaC00di00aDR2NHptMC02aC00di00aDR2NHptMC02aC00VjRoNHY0em02IDEyaC00di00aDR2NHptMC02aC00di00aDR2NHptMC02aC00VjRoNHY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhkci1vZmYiPjxwYXRoIGQ9Ik0xNy41IDE1di0yaDEuMWwuOSAySDIxbC0uOS0yLjFjLjUtLjIuOS0uOC45LTEuNHYtMWMwLS44LS43LTEuNS0xLjUtMS41SDE2djQuOWwxLjEgMS4xaC40em0wLTQuNWgydjFoLTJ2LTF6bS00LjUgMHYuNGwxLjUgMS41di0xLjljMC0uOC0uNy0xLjUtMS41LTEuNWgtMS45bDEuNSAxLjVoLjR6bS0zLjUtMWwtNy03LTEuMSAxTDYuOSA5aC0uNHYyaC0yVjlIM3Y2aDEuNXYtMi41aDJWMTVIOHYtNC45bDEuNSAxLjVWMTVoMy40bDcuNiA3LjYgMS4xLTEuMS0xMi4xLTEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhkci1vbiI+PHBhdGggZD0iTTIxIDExLjV2LTFjMC0uOC0uNy0xLjUtMS41LTEuNUgxNnY2aDEuNXYtMmgxLjFsLjkgMkgyMWwtLjktMi4xYy41LS4zLjktLjguOS0xLjR6bS0xLjUgMGgtMnYtMWgydjF6bS0xMy0uNWgtMlY5SDN2NmgxLjV2LTIuNWgyVjE1SDhWOUg2LjV2MnpNMTMgOUg5LjV2NkgxM2MuOCAwIDEuNS0uNyAxLjUtMS41di0zYzAtLjgtLjctMS41LTEuNS0xLjV6bTAgNC41aC0ydi0zaDJ2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItc3Ryb25nIj48cGF0aCBkPSJNMTcgNmMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6TTUgOGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00LTEuNzktNC00LTR6bTAgNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGRyLXdlYWsiPjxwYXRoIGQ9Ik01IDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0xMi0yYy0zLjMxIDAtNiAyLjY5LTYgNnMyLjY5IDYgNiA2IDYtMi42OSA2LTYtMi42OS02LTYtNnptMCAxMGMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0LTEuNzkgNC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGVhbGluZyI+PHBhdGggZD0iTTE3LjczIDEyLjAybDMuOTgtMy45OGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC00LjM0LTQuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0zLjk4IDMuOThMOCAyLjI5QzcuOCAyLjEgNy41NSAyIDcuMjkgMmMtLjI1IDAtLjUxLjEtLjcuMjlMMi4yNSA2LjYzYy0uMzkuMzktLjM5IDEuMDIgMCAxLjQxbDMuOTggMy45OEwyLjI1IDE2Yy0uMzkuMzktLjM5IDEuMDIgMCAxLjQxbDQuMzQgNC4zNGMuMzkuMzkgMS4wMi4zOSAxLjQxIDBsMy45OC0zLjk4IDMuOTggMy45OGMuMi4yLjQ1LjI5LjcxLjI5LjI2IDAgLjUxLS4xLjcxLS4yOWw0LjM0LTQuMzRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMy45OS0zLjk4ek0xMiA5Yy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bS00LjcxIDEuOTZMMy42NiA3LjM0bDMuNjMtMy42MyAzLjYyIDMuNjItMy42MiAzLjYzek0xMCAxM2MtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxem0yIDJjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptMi00Yy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTIuNjYgOS4zNGwtMy42My0zLjYyIDMuNjMtMy42MyAzLjYyIDMuNjItMy42MiAzLjYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImltYWdlIj48cGF0aCBkPSJNMjEgMTlWNWMwLTEuMS0uOS0yLTItMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yek04LjUgMTMuNWwyLjUgMy4wMUwxNC41IDEybDQuNSA2SDVsMy41LTQuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJpbWFnZS1hc3BlY3QtcmF0aW8iPjxwYXRoIGQ9Ik0xNiAxMGgtMnYyaDJ2LTJ6bTAgNGgtMnYyaDJ2LTJ6bS04LTRINnYyaDJ2LTJ6bTQgMGgtMnYyaDJ2LTJ6bTgtNkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINFY2aDE2djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImlzbyI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek01LjUgNy41aDJ2LTJIOXYyaDJWOUg5djJINy41VjloLTJWNy41ek0xOSAxOUg1TDE5IDV2MTR6bS0yLTJ2LTEuNWgtNVYxN2g1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxhbmRzY2FwZSI+PHBhdGggZD0iTTE0IDZsLTMuNzUgNSAyLjg1IDMuOC0xLjYgMS4yQzkuODEgMTMuNzUgNyAxMCA3IDEwbC02IDhoMjJMMTQgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsZWFrLWFkZCI+PHBhdGggZD0iTTYgM0gzdjNjMS42NiAwIDMtMS4zNCAzLTN6bTggMGgtMmMwIDQuOTctNC4wMyA5LTkgOXYyYzYuMDggMCAxMS00LjkzIDExLTExem0tNCAwSDhjMCAyLjc2LTIuMjQgNS01IDV2MmMzLjg3IDAgNy0zLjEzIDctN3ptMCAxOGgyYzAtNC45NyA0LjAzLTkgOS05di0yYy02LjA3IDAtMTEgNC45My0xMSAxMXptOCAwaDN2LTNjLTEuNjYgMC0zIDEuMzQtMyAzem0tNCAwaDJjMC0yLjc2IDIuMjQtNSA1LTV2LTJjLTMuODcgMC03IDMuMTMtNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxlYWstcmVtb3ZlIj48cGF0aCBkPSJNMTAgM0g4YzAgLjM3LS4wNC43Mi0uMTIgMS4wNmwxLjU5IDEuNTlDOS44MSA0Ljg0IDEwIDMuOTQgMTAgM3pNMyA0LjI3bDIuODQgMi44NEM1LjAzIDcuNjcgNC4wNiA4IDMgOHYyYzEuNjEgMCAzLjA5LS41NSA0LjI3LTEuNDZMOC43IDkuOTdDNy4xNCAxMS4yNCA1LjE2IDEyIDMgMTJ2MmMyLjcxIDAgNS4xOS0uOTkgNy4xMS0yLjYybDIuNSAyLjVDMTAuOTkgMTUuODEgMTAgMTguMjkgMTAgMjFoMmMwLTIuMTYuNzYtNC4xNCAyLjAzLTUuNjlsMS40MyAxLjQzQzE0LjU1IDE3LjkxIDE0IDE5LjM5IDE0IDIxaDJjMC0xLjA2LjMzLTIuMDMuODktMi44NEwxOS43MyAyMSAyMSAxOS43MyA0LjI3IDMgMyA0LjI3ek0xNCAzaC0yYzAgMS41LS4zNyAyLjkxLTEuMDIgNC4xNmwxLjQ2IDEuNDZDMTMuNDIgNi45OCAxNCA1LjA2IDE0IDN6bTUuOTQgMTMuMTJjLjM0LS4wOC42OS0uMTIgMS4wNi0uMTJ2LTJjLS45NCAwLTEuODQuMTktMi42Ni41MmwxLjYgMS42em0tNC41Ni00LjU2bDEuNDYgMS40NkMxOC4wOSAxMi4zNyAxOS41IDEyIDIxIDEydi0yYy0yLjA2IDAtMy45OC41OC01LjYyIDEuNTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGVucyI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGlua2VkLWNhbWVyYSI+PGNpcmNsZSBjeD0iMTIiIGN5PSIxNCIgcj0iMy4yIj48L2NpcmNsZT48cGF0aCBkPSJNMTYgMy4zM2MyLjU4IDAgNC42NyAyLjA5IDQuNjcgNC42N0gyMmMwLTMuMzEtMi42OS02LTYtNnYxLjMzTTE2IDZjMS4xMSAwIDIgLjg5IDIgMmgxLjMzYzAtMS44NC0xLjQ5LTMuMzMtMy4zMy0zLjMzVjYiPjwvcGF0aD48cGF0aCBkPSJNMTcgOWMwLTEuMTEtLjg5LTItMi0yVjRIOUw3LjE3IDZINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY5aC01em0tNSAxMGMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MiPjxwYXRoIGQ9Ik0xMiAxMGMtMy44NiAwLTcgMy4xNC03IDdoMmMwLTIuNzYgMi4yNC01IDUtNXM1IDIuMjQgNSA1aDJjMC0zLjg2LTMuMTQtNy03LTd6bTAtNEM1LjkzIDYgMSAxMC45MyAxIDE3aDJjMC00Ljk2IDQuMDQtOSA5LTlzOSA0LjA0IDkgOWgyYzAtNi4wNy00LjkzLTExLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLTMiPjxwYXRoIGQ9Ik0xOS4wMSAzaC0xNGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA3LjVjMCAuODMtLjY3IDEuNS0xLjUgMS41LjgzIDAgMS41LjY3IDEuNSAxLjVWMTVjMCAxLjExLS45IDItMiAyaC00di0yaDR2LTJoLTJ2LTJoMlY5aC00VjdoNGMxLjEgMCAyIC44OSAyIDJ2MS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLTQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgMTRoLTJ2LTRIOVY3aDJ2NGgyVjdoMnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy01Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDZoLTR2MmgyYzEuMSAwIDIgLjg5IDIgMnYyYzAgMS4xMS0uOSAyLTIgMkg5di0yaDR2LTJIOVY3aDZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy02Ij48cGF0aCBkPSJNMTEgMTVoMnYtMmgtMnYyem04LTEySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgNmgtNHYyaDJjMS4xIDAgMiAuODkgMiAydjJjMCAxLjExLS45IDItMiAyaC0yYy0xLjEgMC0yLS44OS0yLTJWOWMwLTEuMTEuOS0yIDItMmg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3Mtb25lIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS01IDE0aC0yVjloLTJWN2g0djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLXR3byI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA4YzAgMS4xMS0uOSAyLTIgMmgtMnYyaDR2Mkg5di00YzAtMS4xMS45LTIgMi0yaDJWOUg5VjdoNGMxLjEgMCAyIC44OSAyIDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb3VwZSI+PHBhdGggZD0iTTEzIDdoLTJ2NEg3djJoNHY0aDJ2LTRoNHYtMmgtNFY3em0tMS01QzYuNDkgMiAyIDYuNDkgMiAxMnM0LjQ5IDEwIDEwIDEwaDhjMS4xIDAgMi0uOSAyLTJ2LThjMC01LjUxLTQuNDktMTAtMTAtMTB6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1vbm9jaHJvbWUtcGhvdG9zIj48cGF0aCBkPSJNMjAgNWgtMy4yTDE1IDNIOUw3LjIgNUg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTRoLTh2LTFjLTIuOCAwLTUtMi4yLTUtNXMyLjItNSA1LTVWN2g4djEyem0tMy02YzAtMi44LTIuMi01LTUtNXYxLjhjMS44IDAgMy4yIDEuNCAzLjIgMy4ycy0xLjQgMy4yLTMuMiAzLjJWMThjMi44IDAgNS0yLjIgNS01em0tOC4yIDBjMCAxLjggMS40IDMuMiAzLjIgMy4yVjkuOGMtMS44IDAtMy4yIDEuNC0zLjIgMy4yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1vdmllLWNyZWF0aW9uIj48cGF0aCBkPSJNMTggNGwyIDRoLTNsLTItNGgtMmwyIDRoLTNsLTItNEg4bDIgNEg3TDUgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0aC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1vdmllLWZpbHRlciI+PHBhdGggZD0iTTE4IDRsMiAzaC0zbC0yLTNoLTJsMiAzaC0zbC0yLTNIOGwyIDNIN0w1IDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGgtNHptLTYuNzUgMTEuMjVMMTAgMThsLTEuMjUtMi43NUw2IDE0bDIuNzUtMS4yNUwxMCAxMGwxLjI1IDIuNzVMMTQgMTRsLTIuNzUgMS4yNXptNS42OS0zLjMxTDE2IDE0bC0uOTQtMi4wNkwxMyAxMWwyLjA2LS45NEwxNiA4bC45NCAyLjA2TDE5IDExbC0yLjA2Ljk0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im11c2ljLW5vdGUiPjxwYXRoIGQ9Ik0xMiAzdjEwLjU1Yy0uNTktLjM0LTEuMjctLjU1LTItLjU1LTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNFY3aDRWM2gtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJuYXR1cmUiPjxwYXRoIGQ9Ik0xMyAxNi4xMmMzLjQ3LS40MSA2LjE3LTMuMzYgNi4xNy02Ljk1IDAtMy44Ny0zLjEzLTctNy03cy03IDMuMTMtNyA3YzAgMy40NyAyLjUyIDYuMzQgNS44MyA2Ljg5VjIwSDV2MmgxNHYtMmgtNnYtMy44OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJuYXR1cmUtcGVvcGxlIj48cGF0aCBkPSJNMjIuMTcgOS4xN2MwLTMuODctMy4xMy03LTctN3MtNyAzLjEzLTcgN2MwIDMuNDcgMi41MiA2LjM0IDUuODMgNi44OVYyMEg2di0zaDF2LTRjMC0uNTUtLjQ1LTEtMS0xSDNjLS41NSAwLTEgLjQ1LTEgMXY0aDF2NWgxNnYtMmgtM3YtMy44OGMzLjQ3LS40MSA2LjE3LTMuMzYgNi4xNy02Ljk1ek00LjUgMTFjLjgzIDAgMS41LS42NyAxLjUtMS41UzUuMzMgOCA0LjUgOCAzIDguNjcgMyA5LjUgMy42NyAxMSA0LjUgMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF2aWdhdGUtYmVmb3JlIj48cGF0aCBkPSJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJuYXZpZ2F0ZS1uZXh0Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFsZXR0ZSI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYSI+PHBhdGggZD0iTTIzIDE4VjZjMC0xLjEtLjktMi0yLTJIM2MtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnpNOC41IDEyLjVsMi41IDMuMDFMMTQuNSAxMWw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEtZmlzaC1leWUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYS1ob3Jpem9udGFsIj48cGF0aCBkPSJNMjAgNi41NHYxMC45MWMtMi42LS43Ny01LjI4LTEuMTYtOC0xLjE2LTIuNzIgMC01LjQuMzktOCAxLjE2VjYuNTRjMi42Ljc3IDUuMjggMS4xNiA4IDEuMTYgMi43Mi4wMSA1LjQtLjM4IDgtMS4xNk0yMS40MyA0Yy0uMSAwLS4yLjAyLS4zMS4wNkMxOC4xOCA1LjE2IDE1LjA5IDUuNyAxMiA1LjdjLTMuMDkgMC02LjE4LS41NS05LjEyLTEuNjQtLjExLS4wNC0uMjItLjA2LS4zMS0uMDYtLjM0IDAtLjU3LjIzLS41Ny42M3YxNC43NWMwIC4zOS4yMy42Mi41Ny42Mi4xIDAgLjItLjAyLjMxLS4wNiAyLjk0LTEuMSA2LjAzLTEuNjQgOS4xMi0xLjY0IDMuMDkgMCA2LjE4LjU1IDkuMTIgMS42NC4xMS4wNC4yMS4wNi4zMS4wNi4zMyAwIC41Ny0uMjMuNTctLjYzVjQuNjNjMC0uNC0uMjQtLjYzLS41Ny0uNjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEtdmVydGljYWwiPjxwYXRoIGQ9Ik0xOS45NCAyMS4xMmMtMS4xLTIuOTQtMS42NC02LjAzLTEuNjQtOS4xMiAwLTMuMDkuNTUtNi4xOCAxLjY0LTkuMTIuMDQtLjExLjA2LS4yMi4wNi0uMzEgMC0uMzQtLjIzLS41Ny0uNjMtLjU3SDQuNjNjLS40IDAtLjYzLjIzLS42My41NyAwIC4xLjAyLjIuMDYuMzFDNS4xNiA1LjgyIDUuNzEgOC45MSA1LjcxIDEyYzAgMy4wOS0uNTUgNi4xOC0xLjY0IDkuMTItLjA1LjExLS4wNy4yMi0uMDcuMzEgMCAuMzMuMjMuNTcuNjMuNTdoMTQuNzVjLjM5IDAgLjYzLS4yNC42My0uNTctLjAxLS4xLS4wMy0uMi0uMDctLjMxek02LjU0IDIwYy43Ny0yLjYgMS4xNi01LjI4IDEuMTYtOCAwLTIuNzItLjM5LTUuNC0xLjE2LThoMTAuOTFjLS43NyAyLjYtMS4xNiA1LjI4LTEuMTYgOCAwIDIuNzIuMzkgNS40IDEuMTYgOEg2LjU0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLXdpZGUtYW5nbGUiPjxwYXRoIGQ9Ik0xMiA2YzIuNDUgMCA0LjcxLjIgNy4yOS42NC40NyAxLjc4LjcxIDMuNTguNzEgNS4zNiAwIDEuNzgtLjI0IDMuNTgtLjcxIDUuMzYtMi41OC40NC00Ljg0LjY0LTcuMjkuNjRzLTQuNzEtLjItNy4yOS0uNjRDNC4yNCAxNS41OCA0IDEzLjc4IDQgMTJjMC0xLjc4LjI0LTMuNTguNzEtNS4zNkM3LjI5IDYuMiA5LjU1IDYgMTIgNm0wLTJjLTIuNzMgMC01LjIyLjI0LTcuOTUuNzJsLS45My4xNi0uMjUuOUMyLjI5IDcuODUgMiA5LjkzIDIgMTJzLjI5IDQuMTUuODcgNi4yMmwuMjUuODkuOTMuMTZjMi43My40OSA1LjIyLjczIDcuOTUuNzNzNS4yMi0uMjQgNy45NS0uNzJsLjkzLS4xNi4yNS0uODljLjU4LTIuMDguODctNC4xNi44Ny02LjIzcy0uMjktNC4xNS0uODctNi4yMmwtLjI1LS44OS0uOTMtLjE2QzE3LjIyIDQuMjQgMTQuNzMgNCAxMiA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvIj48cGF0aCBkPSJNMjEgMTlWNWMwLTEuMS0uOS0yLTItMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yek04LjUgMTMuNWwyLjUgMy4wMUwxNC41IDEybDQuNSA2SDVsMy41LTQuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1hbGJ1bSI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHptMCAxNWwzLTMuODYgMi4xNCAyLjU4IDMtMy44NkwxOCAxOUg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLWNhbWVyYSI+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMy4yIj48L2NpcmNsZT48cGF0aCBkPSJNOSAyTDcuMTcgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJoLTMuMTdMMTUgMkg5em0zIDE1Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1maWx0ZXIiPjxwYXRoIGQ9Ik0xOS4wMiAxMHY5SDVWNWg5VjNINS4wMmMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtOWgtMnpNMTcgMTBsLjk0LTIuMDZMMjAgN2wtMi4wNi0uOTRMMTcgNGwtLjk0IDIuMDZMMTQgN2wyLjA2Ljk0em0tMy43NS43NUwxMiA4bC0xLjI1IDIuNzVMOCAxMmwyLjc1IDEuMjVMMTIgMTZsMS4yNS0yLjc1TDE2IDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLWxpYnJhcnkiPjxwYXRoIGQ9Ik0yMiAxNlY0YzAtMS4xLS45LTItMi0ySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJ6bS0xMS00bDIuMDMgMi43MUwxNiAxMWw0IDVIOGwzLTR6TTIgNnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNkgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LWFjdHVhbCI+PHBhdGggZD0iTTIxIDNIM0MyIDMgMSA0IDEgNXYxNGMwIDEuMS45IDIgMiAyaDE4YzEgMCAyLTEgMi0yVjVjMC0xLTEtMi0yLTJ6TTUgMTdsMy41LTQuNSAyLjUgMy4wMUwxNC41IDExbDQuNSA2SDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tc2l6ZS1zZWxlY3QtbGFyZ2UiPjxwYXRoIGQ9Ik0yMSAxNWgydjJoLTJ2LTJ6bTAtNGgydjJoLTJ2LTJ6bTIgOGgtMnYyYzEgMCAyLTEgMi0yek0xMyAzaDJ2MmgtMlYzem04IDRoMnYyaC0yVjd6bTAtNHYyaDJjMC0xLTEtMi0yLTJ6TTEgN2gydjJIMVY3em0xNi00aDJ2MmgtMlYzem0wIDE2aDJ2MmgtMnYtMnpNMyAzQzIgMyAxIDQgMSA1aDJWM3ptNiAwaDJ2Mkg5VjN6TTUgM2gydjJINVYzem0tNCA4djhjMCAxLjEuOSAyIDIgMmgxMlYxMUgxem0yIDhsMi41LTMuMjEgMS43OSAyLjE1IDIuNS0zLjIyTDEzIDE5SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tc2l6ZS1zZWxlY3Qtc21hbGwiPjxwYXRoIGQ9Ik0yMyAxNWgtMnYyaDJ2LTJ6bTAtNGgtMnYyaDJ2LTJ6bTAgOGgtMnYyYzEgMCAyLTEgMi0yek0xNSAzaC0ydjJoMlYzem04IDRoLTJ2MmgyVjd6bS0yLTR2MmgyYzAtMS0xLTItMi0yek0zIDIxaDh2LTZIMXY0YzAgMS4xLjkgMiAyIDJ6TTMgN0gxdjJoMlY3em0xMiAxMmgtMnYyaDJ2LTJ6bTQtMTZoLTJ2MmgyVjN6bTAgMTZoLTJ2Mmgydi0yek0zIDNDMiAzIDEgNCAxIDVoMlYzem0wIDhIMXYyaDJ2LTJ6bTgtOEg5djJoMlYzek03IDNINXYyaDJWM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwaWN0dXJlLWFzLXBkZiI+PHBhdGggZD0iTTIwIDJIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tOC41IDcuNWMwIC44My0uNjcgMS41LTEuNSAxLjVIOXYySDcuNVY3SDEwYy44MyAwIDEuNS42NyAxLjUgMS41djF6bTUgMmMwIC44My0uNjcgMS41LTEuNSAxLjVoLTIuNVY3SDE1Yy44MyAwIDEuNS42NyAxLjUgMS41djN6bTQtM0gxOXYxaDEuNVYxMUgxOXYyaC0xLjVWN2gzdjEuNXpNOSA5LjVoMXYtMUg5djF6TTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xMCA1LjVoMXYtM2gtMXYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBvcnRyYWl0Ij48cGF0aCBkPSJNMTIgMTIuMjVjMS4yNCAwIDIuMjUtMS4wMSAyLjI1LTIuMjVTMTMuMjQgNy43NSAxMiA3Ljc1IDkuNzUgOC43NiA5Ljc1IDEwczEuMDEgMi4yNSAyLjI1IDIuMjV6bTQuNSA0YzAtMS41LTMtMi4yNS00LjUtMi4yNXMtNC41Ljc1LTQuNSAyLjI1VjE3aDl2LS43NXpNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZS1yZWQtZXllIj48cGF0aCBkPSJNMTIgNC41QzcgNC41IDIuNzMgNy42MSAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjVzOS4yNy0zLjExIDExLTcuNWMtMS43My00LjM5LTYtNy41LTExLTcuNXpNMTIgMTdjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLThjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvdGF0ZS05MC1kZWdyZWVzLWNjdyI+PHBhdGggZD0iTTcuMzQgNi40MUwuODYgMTIuOWw2LjQ5IDYuNDggNi40OS02LjQ4LTYuNS02LjQ5ek0zLjY5IDEyLjlsMy42Ni0zLjY2TDExIDEyLjlsLTMuNjYgMy42Ni0zLjY1LTMuNjZ6bTE1LjY3LTYuMjZDMTcuNjEgNC44OCAxNS4zIDQgMTMgNFYuNzZMOC43NiA1IDEzIDkuMjRWNmMxLjc5IDAgMy41OC42OCA0Ljk1IDIuMDUgMi43MyAyLjczIDIuNzMgNy4xNyAwIDkuOUMxNi41OCAxOS4zMiAxNC43OSAyMCAxMyAyMGMtLjk3IDAtMS45NC0uMjEtMi44NC0uNjFsLTEuNDkgMS40OUMxMC4wMiAyMS42MiAxMS41MSAyMiAxMyAyMmMyLjMgMCA0LjYxLS44OCA2LjM2LTIuNjQgMy41Mi0zLjUxIDMuNTItOS4yMSAwLTEyLjcyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvdGF0ZS1sZWZ0Ij48cGF0aCBkPSJNNy4xMSA4LjUzTDUuNyA3LjExQzQuOCA4LjI3IDQuMjQgOS42MSA0LjA3IDExaDIuMDJjLjE0LS44Ny40OS0xLjcyIDEuMDItMi40N3pNNi4wOSAxM0g0LjA3Yy4xNyAxLjM5LjcyIDIuNzMgMS42MiAzLjg5bDEuNDEtMS40MmMtLjUyLS43NS0uODctMS41OS0xLjAxLTIuNDd6bTEuMDEgNS4zMmMxLjE2LjkgMi41MSAxLjQ0IDMuOSAxLjYxVjE3LjljLS44Ny0uMTUtMS43MS0uNDktMi40Ni0xLjAzTDcuMSAxOC4zMnpNMTMgNC4wN1YxTDguNDUgNS41NSAxMyAxMFY2LjA5YzIuODQuNDggNSAyLjk0IDUgNS45MXMtMi4xNiA1LjQzLTUgNS45MXYyLjAyYzMuOTUtLjQ5IDctMy44NSA3LTcuOTNzLTMuMDUtNy40NC03LTcuOTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icm90YXRlLXJpZ2h0Ij48cGF0aCBkPSJNMTUuNTUgNS41NUwxMSAxdjMuMDdDNy4wNiA0LjU2IDQgNy45MiA0IDEyczMuMDUgNy40NCA3IDcuOTN2LTIuMDJjLTIuODQtLjQ4LTUtMi45NC01LTUuOTFzMi4xNi01LjQzIDUtNS45MVYxMGw0LjU1LTQuNDV6TTE5LjkzIDExYy0uMTctMS4zOS0uNzItMi43My0xLjYyLTMuODlsLTEuNDIgMS40MmMuNTQuNzUuODggMS42IDEuMDIgMi40N2gyLjAyek0xMyAxNy45djIuMDJjMS4zOS0uMTcgMi43NC0uNzEgMy45LTEuNjFsLTEuNDQtMS40NGMtLjc1LjU0LTEuNTkuODktMi40NiAxLjAzem0zLjg5LTIuNDJsMS40MiAxLjQxYy45LTEuMTYgMS40NS0yLjUgMS42Mi0zLjg5aC0yLjAyYy0uMTQuODctLjQ4IDEuNzItMS4wMiAyLjQ4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNsaWRlc2hvdyI+PHBhdGggZD0iTTEwIDh2OGw1LTQtNS00em05LTVINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdHJhaWdodGVuIj48cGF0aCBkPSJNMjEgNkgzYy0xLjEgMC0yIC45LTIgMnY4YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnptMCAxMEgzVjhoMnY0aDJWOGgydjRoMlY4aDJ2NGgyVjhoMnY0aDJWOGgydjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3R5bGUiPjxwYXRoIGQ9Ik0yLjUzIDE5LjY1bDEuMzQuNTZ2LTkuMDNsLTIuNDMgNS44NmMtLjQxIDEuMDIuMDggMi4xOSAxLjA5IDIuNjF6bTE5LjUtMy43TDE3LjA3IDMuOThjLS4zMS0uNzUtMS4wNC0xLjIxLTEuODEtMS4yMy0uMjYgMC0uNTMuMDQtLjc5LjE1TDcuMSA1Ljk1Yy0uNzUuMzEtMS4yMSAxLjAzLTEuMjMgMS44LS4wMS4yNy4wNC41NC4xNS44bDQuOTYgMTEuOTdjLjMxLjc2IDEuMDUgMS4yMiAxLjgzIDEuMjMuMjYgMCAuNTItLjA1Ljc3LS4xNWw3LjM2LTMuMDVjMS4wMi0uNDIgMS41MS0xLjU5IDEuMDktMi42ek03Ljg4IDguNzVjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptLTIgMTFjMCAxLjEuOSAyIDIgMmgxLjQ1bC0zLjQ1LTguMzR2Ni4zNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2l0Y2gtY2FtZXJhIj48cGF0aCBkPSJNMjAgNGgtMy4xN0wxNSAySDlMNy4xNyA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptLTUgMTEuNVYxM0g5djIuNUw1LjUgMTIgOSA4LjVWMTFoNlY4LjVsMy41IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN3aXRjaC12aWRlbyI+PHBhdGggZD0iTTE4IDkuNVY2YzAtLjU1LS40NS0xLTEtMUgzYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoMTRjLjU1IDAgMS0uNDUgMS0xdi0zLjVsNCA0di0xM2wtNCA0em0tNSA2VjEzSDd2Mi41TDMuNSAxMiA3IDguNVYxMWg2VjguNWwzLjUgMy41LTMuNSAzLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGFnLWZhY2VzIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0zLjUtOWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTMTYuMzMgOCAxNS41IDggMTQgOC42NyAxNCA5LjVzLjY3IDEuNSAxLjUgMS41em0tNyAwYy44MyAwIDEuNS0uNjcgMS41LTEuNVM5LjMzIDggOC41IDggNyA4LjY3IDcgOS41IDcuNjcgMTEgOC41IDExem0zLjUgNi41YzIuMzMgMCA0LjMxLTEuNDYgNS4xMS0zLjVINi44OWMuOCAyLjA0IDIuNzggMy41IDUuMTEgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRleHR1cmUiPjxwYXRoIGQ9Ik0xOS41MSAzLjA4TDMuMDggMTkuNTFjLjA5LjM0LjI3LjY1LjUxLjkuMjUuMjQuNTYuNDIuOS41MUwyMC45MyA0LjQ5Yy0uMTktLjY5LS43My0xLjIzLTEuNDItMS40MXpNMTEuODggM0wzIDExLjg4djIuODNMMTQuNzEgM2gtMi44M3pNNSAzYy0xLjEgMC0yIC45LTIgMnYybDQtNEg1em0xNCAxOGMuNTUgMCAxLjA1LS4yMiAxLjQxLS41OS4zNy0uMzYuNTktLjg2LjU5LTEuNDF2LTJsLTQgNGgyem0tOS43MSAwaDIuODNMMjEgMTIuMTJWOS4yOUw5LjI5IDIxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVsYXBzZSI+PHBhdGggZD0iTTE2LjI0IDcuNzZDMTUuMDcgNi41OSAxMy41NCA2IDEyIDZ2NmwtNC4yNCA0LjI0YzIuMzQgMi4zNCA2LjE0IDIuMzQgOC40OSAwIDIuMzQtMi4zNCAyLjM0LTYuMTQtLjAxLTguNDh6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyIj48cGF0aCBkPSJNMTUgMUg5djJoNlYxem0tNCAxM2gyVjhoLTJ2NnptOC4wMy02LjYxbDEuNDItMS40MmMtLjQzLS41MS0uOS0uOTktMS40MS0xLjQxbC0xLjQyIDEuNDJDMTYuMDcgNC43NCAxNC4xMiA0IDEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDkgOS00LjAzIDktOWMwLTIuMTItLjc0LTQuMDctMS45Ny01LjYxek0xMiAyMGMtMy44NyAwLTctMy4xMy03LTdzMy4xMy03IDctNyA3IDMuMTMgNyA3LTMuMTMgNy03IDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZXItMTAiPjxwYXRoIGQ9Ik0wIDcuNzJWOS40bDMtMVYxOGgyVjZoLS4yNUwwIDcuNzJ6bTIzLjc4IDYuNjVjLS4xNC0uMjgtLjM1LS41My0uNjMtLjc0LS4yOC0uMjEtLjYxLS4zOS0xLjAxLS41M3MtLjg1LS4yNy0xLjM1LS4zOGMtLjM1LS4wNy0uNjQtLjE1LS44Ny0uMjMtLjIzLS4wOC0uNDEtLjE2LS41NS0uMjUtLjE0LS4wOS0uMjMtLjE5LS4yOC0uMy0uMDUtLjExLS4wOC0uMjQtLjA4LS4zOSAwLS4xNC4wMy0uMjguMDktLjQxLjA2LS4xMy4xNS0uMjUuMjctLjM0LjEyLS4xLjI3LS4xOC40NS0uMjRzLjQtLjA5LjY0LS4wOWMuMjUgMCAuNDcuMDQuNjYuMTEuMTkuMDcuMzUuMTcuNDguMjkuMTMuMTIuMjIuMjYuMjkuNDIuMDYuMTYuMS4zMi4xLjQ5aDEuOTVjMC0uMzktLjA4LS43NS0uMjQtMS4wOS0uMTYtLjM0LS4zOS0uNjMtLjY5LS44OC0uMy0uMjUtLjY2LS40NC0xLjA5LS41OUMyMS40OSA5LjA3IDIxIDkgMjAuNDYgOWMtLjUxIDAtLjk4LjA3LTEuMzkuMjEtLjQxLjE0LS43Ny4zMy0xLjA2LjU3LS4yOS4yNC0uNTEuNTItLjY3Ljg0LS4xNi4zMi0uMjMuNjUtLjIzIDEuMDFzLjA4LjY5LjIzLjk2Yy4xNS4yOC4zNi41Mi42NC43My4yNy4yMS42LjM4Ljk4LjUzLjM4LjE0LjgxLjI2IDEuMjcuMzYuMzkuMDguNzEuMTcuOTUuMjZzLjQzLjE5LjU3LjI5Yy4xMy4xLjIyLjIyLjI3LjM0LjA1LjEyLjA3LjI1LjA3LjM5IDAgLjMyLS4xMy41Ny0uNC43Ny0uMjcuMi0uNjYuMjktMS4xNy4yOS0uMjIgMC0uNDMtLjAyLS42NC0uMDgtLjIxLS4wNS0uNC0uMTMtLjU2LS4yNC0uMTctLjExLS4zLS4yNi0uNDEtLjQ0LS4xMS0uMTgtLjE3LS40MS0uMTgtLjY3aC0xLjg5YzAgLjM2LjA4LjcxLjI0IDEuMDUuMTYuMzQuMzkuNjUuNy45My4zMS4yNy42OS40OSAxLjE1LjY2LjQ2LjE3Ljk4LjI1IDEuNTguMjUuNTMgMCAxLjAxLS4wNiAxLjQ0LS4xOS40My0uMTMuOC0uMzEgMS4xMS0uNTQuMzEtLjIzLjU0LS41MS43MS0uODMuMTctLjMyLjI1LS42Ny4yNS0xLjA2LS4wMi0uNC0uMDktLjc0LS4yNC0xLjAyem0tOS45Ni03LjMyYy0uMzQtLjQtLjc1LS43LTEuMjMtLjg4LS40Ny0uMTgtMS4wMS0uMjctMS41OS0uMjctLjU4IDAtMS4xMS4wOS0xLjU5LjI3LS40OC4xOC0uODkuNDctMS4yMy44OC0uMzQuNDEtLjYuOTMtLjc5IDEuNTktLjE4LjY1LS4yOCAxLjQ1LS4yOCAyLjM5djEuOTJjMCAuOTQuMDkgMS43NC4yOCAyLjM5LjE5LjY2LjQ1IDEuMTkuOCAxLjYuMzQuNDEuNzUuNzEgMS4yMy44OS40OC4xOCAxLjAxLjI4IDEuNTkuMjguNTkgMCAxLjEyLS4wOSAxLjU5LS4yOC40OC0uMTguODgtLjQ4IDEuMjItLjg5LjM0LS40MS42LS45NC43OC0xLjYuMTgtLjY1LjI4LTEuNDUuMjgtMi4zOXYtMS45MmMwLS45NC0uMDktMS43NC0uMjgtMi4zOS0uMTgtLjY2LS40NC0xLjE5LS43OC0xLjU5em0tLjkyIDYuMTdjMCAuNi0uMDQgMS4xMS0uMTIgMS41My0uMDguNDItLjIuNzYtLjM2IDEuMDItLjE2LjI2LS4zNi40NS0uNTkuNTctLjIzLjEyLS41MS4xOC0uODIuMTgtLjMgMC0uNTgtLjA2LS44Mi0uMThzLS40NC0uMzEtLjYtLjU3Yy0uMTYtLjI2LS4yOS0uNi0uMzgtMS4wMi0uMDktLjQyLS4xMy0uOTMtLjEzLTEuNTN2LTIuNWMwLS42LjA0LTEuMTEuMTMtMS41Mi4wOS0uNDEuMjEtLjc0LjM4LTEgLjE2LS4yNS4zNi0uNDMuNi0uNTUuMjQtLjExLjUxLS4xNy44MS0uMTcuMzEgMCAuNTguMDYuODEuMTcuMjQuMTEuNDQuMjkuNi41NS4xNi4yNS4yOS41OC4zNy45OS4wOC40MS4xMy45Mi4xMyAxLjUydjIuNTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZXItMyI+PHBhdGggZD0iTTExLjYxIDEyLjk3Yy0uMTYtLjI0LS4zNi0uNDYtLjYyLS42NS0uMjUtLjE5LS41Ni0uMzUtLjkzLS40OC4zLS4xNC41Ny0uMy44LS41LjIzLS4yLjQyLS40MS41Ny0uNjQuMTUtLjIzLjI3LS40Ni4zNC0uNzEuMDgtLjI0LjExLS40OS4xMS0uNzMgMC0uNTUtLjA5LTEuMDQtLjI4LTEuNDYtLjE4LS40Mi0uNDQtLjc3LS43OC0xLjA2LS4zMy0uMjgtLjczLS41LTEuMi0uNjQtLjQ1LS4xMy0uOTctLjItMS41My0uMi0uNTUgMC0xLjA2LjA4LTEuNTIuMjQtLjQ3LjE3LS44Ny40LTEuMi42OS0uMzMuMjktLjYuNjMtLjc4IDEuMDMtLjIuMzktLjI5LjgzLS4yOSAxLjI5aDEuOThjMC0uMjYuMDUtLjQ5LjE0LS42OS4wOS0uMi4yMi0uMzguMzgtLjUyLjE3LS4xNC4zNi0uMjUuNTgtLjMzLjIyLS4wOC40Ni0uMTIuNzMtLjEyLjYxIDAgMS4wNi4xNiAxLjM2LjQ3LjMuMzEuNDQuNzUuNDQgMS4zMiAwIC4yNy0uMDQuNTItLjEyLjc0LS4wOC4yMi0uMjEuNDEtLjM4LjU3LS4xNy4xNi0uMzguMjgtLjYzLjM3LS4yNS4wOS0uNTUuMTMtLjg5LjEzSDYuNzJ2MS41N0g3LjljLjM0IDAgLjY0LjA0LjkxLjExLjI3LjA4LjUuMTkuNjkuMzUuMTkuMTYuMzQuMzYuNDQuNjEuMS4yNC4xNi41NC4xNi44NyAwIC42Mi0uMTggMS4wOS0uNTMgMS40Mi0uMzUuMzMtLjg0LjQ5LTEuNDUuNDktLjI5IDAtLjU2LS4wNC0uOC0uMTMtLjI0LS4wOC0uNDQtLjItLjYxLS4zNi0uMTctLjE2LS4zLS4zNC0uMzktLjU2LS4wOS0uMjItLjE0LS40Ni0uMTQtLjcySDQuMTljMCAuNTUuMTEgMS4wMy4zMiAxLjQ1LjIxLjQyLjUuNzcuODYgMS4wNXMuNzcuNDkgMS4yNC42My45Ni4yMSAxLjQ4LjIxYy41NyAwIDEuMDktLjA4IDEuNTgtLjIzLjQ5LS4xNS45MS0uMzggMS4yNi0uNjguMzYtLjMuNjQtLjY2Ljg0LTEuMS4yLS40My4zLS45My4zLTEuNDggMC0uMjktLjA0LS41OC0uMTEtLjg2LS4wOC0uMjUtLjE5LS41MS0uMzUtLjc2em05LjI2IDEuNGMtLjE0LS4yOC0uMzUtLjUzLS42My0uNzQtLjI4LS4yMS0uNjEtLjM5LTEuMDEtLjUzcy0uODUtLjI3LTEuMzUtLjM4Yy0uMzUtLjA3LS42NC0uMTUtLjg3LS4yMy0uMjMtLjA4LS40MS0uMTYtLjU1LS4yNS0uMTQtLjA5LS4yMy0uMTktLjI4LS4zLS4wNS0uMTEtLjA4LS4yNC0uMDgtLjM5cy4wMy0uMjguMDktLjQxYy4wNi0uMTMuMTUtLjI1LjI3LS4zNC4xMi0uMS4yNy0uMTguNDUtLjI0cy40LS4wOS42NC0uMDljLjI1IDAgLjQ3LjA0LjY2LjExLjE5LjA3LjM1LjE3LjQ4LjI5LjEzLjEyLjIyLjI2LjI5LjQyLjA2LjE2LjEuMzIuMS40OWgxLjk1YzAtLjM5LS4wOC0uNzUtLjI0LTEuMDktLjE2LS4zNC0uMzktLjYzLS42OS0uODgtLjMtLjI1LS42Ni0uNDQtMS4wOS0uNTktLjQzLS4xNS0uOTItLjIyLTEuNDYtLjIyLS41MSAwLS45OC4wNy0xLjM5LjIxLS40MS4xNC0uNzcuMzMtMS4wNi41Ny0uMjkuMjQtLjUxLjUyLS42Ny44NC0uMTYuMzItLjIzLjY1LS4yMyAxLjAxcy4wOC42OC4yMy45NmMuMTUuMjguMzcuNTIuNjQuNzMuMjcuMjEuNi4zOC45OC41My4zOC4xNC44MS4yNiAxLjI3LjM2LjM5LjA4LjcxLjE3Ljk1LjI2cy40My4xOS41Ny4yOWMuMTMuMS4yMi4yMi4yNy4zNC4wNS4xMi4wNy4yNS4wNy4zOSAwIC4zMi0uMTMuNTctLjQuNzctLjI3LjItLjY2LjI5LTEuMTcuMjktLjIyIDAtLjQzLS4wMi0uNjQtLjA4LS4yMS0uMDUtLjQtLjEzLS41Ni0uMjQtLjE3LS4xMS0uMy0uMjYtLjQxLS40NC0uMTEtLjE4LS4xNy0uNDEtLjE4LS42N2gtMS44OWMwIC4zNi4wOC43MS4yNCAxLjA1LjE2LjM0LjM5LjY1LjcuOTMuMzEuMjcuNjkuNDkgMS4xNS42Ni40Ni4xNy45OC4yNSAxLjU4LjI1LjUzIDAgMS4wMS0uMDYgMS40NC0uMTkuNDMtLjEzLjgtLjMxIDEuMTEtLjU0LjMxLS4yMy41NC0uNTEuNzEtLjgzLjE3LS4zMi4yNS0uNjcuMjUtMS4wNi0uMDItLjQtLjA5LS43NC0uMjQtMS4wMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lci1vZmYiPjxwYXRoIGQ9Ik0xOS4wNCA0LjU1bC0xLjQyIDEuNDJDMTYuMDcgNC43NCAxNC4xMiA0IDEyIDRjLTEuODMgMC0zLjUzLjU1LTQuOTUgMS40OGwxLjQ2IDEuNDZDOS41MyA2LjM1IDEwLjczIDYgMTIgNmMzLjg3IDAgNyAzLjEzIDcgNyAwIDEuMjctLjM1IDIuNDctLjk0IDMuNDlsMS40NSAxLjQ1QzIwLjQ1IDE2LjUzIDIxIDE0LjgzIDIxIDEzYzAtMi4xMi0uNzQtNC4wNy0xLjk3LTUuNjFsMS40Mi0xLjQyLTEuNDEtMS40MnpNMTUgMUg5djJoNlYxem0tNCA4LjQ0bDIgMlY4aC0ydjEuNDR6TTMuMDIgNEwxLjc1IDUuMjcgNC41IDguMDNDMy41NSA5LjQ1IDMgMTEuMTYgMyAxM2MwIDQuOTcgNC4wMiA5IDkgOSAxLjg0IDAgMy41NS0uNTUgNC45OC0xLjVsMi41IDIuNSAxLjI3LTEuMjctNy43MS03LjcxTDMuMDIgNHpNMTIgMjBjLTMuODcgMC03LTMuMTMtNy03IDAtMS4yOC4zNS0yLjQ4Ljk1LTMuNTJsOS41NiA5LjU2Yy0xLjAzLjYxLTIuMjMuOTYtMy41MS45NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b25hbGl0eSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0xIDE3LjkzYy0zLjk0LS40OS03LTMuODUtNy03LjkzczMuMDUtNy40NCA3LTcuOTN2MTUuODZ6bTItMTUuODZjMS4wMy4xMyAyIC40NSAyLjg3LjkzSDEzdi0uOTN6TTEzIDdoNS4yNGMuMjUuMzEuNDguNjUuNjggMUgxM1Y3em0wIDNoNi43NGMuMDguMzMuMTUuNjYuMTkgMUgxM3YtMXptMCA5LjkzVjE5aDIuODdjLS44Ny40OC0xLjg0LjgtMi44Ny45M3pNMTguMjQgMTdIMTN2LTFoNS45MmMtLjIuMzUtLjQzLjY5LS42OCAxem0xLjUtM0gxM3YtMWg2LjkzYy0uMDQuMzQtLjExLjY3LS4xOSAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyYW5zZm9ybSI+PHBhdGggZD0iTTIyIDE4di0ySDhWNGgyTDcgMSA0IDRoMnYySDJ2Mmg0djhjMCAxLjEuOSAyIDIgMmg4djJoLTJsMyAzIDMtM2gtMnYtMmg0ek0xMCA4aDZ2NmgyVjhjMC0xLjEtLjktMi0yLTJoLTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0dW5lIj48cGF0aCBkPSJNMyAxN3YyaDZ2LTJIM3pNMyA1djJoMTBWNUgzem0xMCAxNnYtMmg4di0yaC04di0yaC0ydjZoMnpNNyA5djJIM3YyaDR2MmgyVjlIN3ptMTQgNHYtMkgxMXYyaDEwem0tNi00aDJWN2g0VjVoLTRWM2gtMnY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctY29tZnkiPjxwYXRoIGQ9Ik0zIDloNFY1SDN2NHptMCA1aDR2LTRIM3Y0em01IDBoNHYtNEg4djR6bTUgMGg0di00aC00djR6TTggOWg0VjVIOHY0em01LTR2NGg0VjVoLTR6bTUgOWg0di00aC00djR6TTMgMTloNHYtNEgzdjR6bTUgMGg0di00SDh2NHptNSAwaDR2LTRoLTR2NHptNSAwaDR2LTRoLTR2NHptMC0xNHY0aDRWNWgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbXBhY3QiPjxwYXRoIGQ9Ik0zIDE5aDZ2LTdIM3Y3em03IDBoMTJ2LTdIMTB2N3pNMyA1djZoMTlWNUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZ25ldHRlIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS05IDE1Yy00LjQyIDAtOC0yLjY5LTgtNnMzLjU4LTYgOC02IDggMi42OSA4IDYtMy41OCA2LTggNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1hdXRvIj48cGF0aCBkPSJNNi44NSAxMi42NWgyLjNMOCA5bC0xLjE1IDMuNjV6TTIyIDdsLTEuMiA2LjI5TDE5LjMgN2gtMS42bC0xLjQ5IDYuMjlMMTUgN2gtLjc2QzEyLjc3IDUuMTcgMTAuNTMgNCA4IDRjLTQuNDIgMC04IDMuNTgtOCA4czMuNTggOCA4IDhjMy4xMyAwIDUuODQtMS44MSA3LjE1LTQuNDNsLjEuNDNIMTdsMS41LTYuMUwyMCAxNmgxLjc1bDIuMDUtOUgyMnptLTExLjcgOWwtLjctMkg2LjRsLS43IDJIMy44TDcgN2gybDMuMiA5aC0xLjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2ItY2xvdWR5Ij48cGF0aCBkPSJNMTkuMzYgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NC00Ljk2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWluY2FuZGVzY2VudCI+PHBhdGggZD0iTTMuNTUgMTguNTRsMS40MSAxLjQxIDEuNzktMS44LTEuNDEtMS40MS0xLjc5IDEuOHpNMTEgMjIuNDVoMlYxOS41aC0ydjIuOTV6TTQgMTAuNUgxdjJoM3YtMnptMTEtNC4xOVYxLjVIOXY0LjgxQzcuMjEgNy4zNSA2IDkuMjggNiAxMS41YzAgMy4zMSAyLjY5IDYgNiA2czYtMi42OSA2LTZjMC0yLjIyLTEuMjEtNC4xNS0zLTUuMTl6bTUgNC4xOXYyaDN2LTJoLTN6bS0yLjc2IDcuNjZsMS43OSAxLjggMS40MS0xLjQxLTEuOC0xLjc5LTEuNCAxLjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2ItaXJpZGVzY2VudCI+PHBhdGggZD0iTTUgMTQuNWgxNHYtNkg1djZ6TTExIC41NVYzLjVoMlYuNTVoLTJ6bTguMDQgMi41bC0xLjc5IDEuNzkgMS40MSAxLjQxIDEuOC0xLjc5LTEuNDItMS40MXpNMTMgMjIuNDVWMTkuNWgtMnYyLjk1aDJ6bTcuNDUtMy45MWwtMS44LTEuNzktMS40MSAxLjQxIDEuNzkgMS44IDEuNDItMS40MnpNMy41NSA0LjQ2bDEuNzkgMS43OSAxLjQxLTEuNDEtMS43OS0xLjc5LTEuNDEgMS40MXptMS40MSAxNS40OWwxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjc5IDEuNDEgMS40MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1zdW5ueSI+PHBhdGggZD0iTTYuNzYgNC44NGwtMS44LTEuNzktMS40MSAxLjQxIDEuNzkgMS43OSAxLjQyLTEuNDF6TTQgMTAuNUgxdjJoM3YtMnptOS05Ljk1aC0yVjMuNWgyVi41NXptNy40NSAzLjkxbC0xLjQxLTEuNDEtMS43OSAxLjc5IDEuNDEgMS40MSAxLjc5LTEuNzl6bS0zLjIxIDEzLjdsMS43OSAxLjggMS40MS0xLjQxLTEuOC0xLjc5LTEuNCAxLjR6TTIwIDEwLjV2Mmgzdi0yaC0zem0tOC01Yy0zLjMxIDAtNiAyLjY5LTYgNnMyLjY5IDYgNiA2IDYtMi42OSA2LTYtMi42OS02LTYtNnptLTEgMTYuOTVoMlYxOS41aC0ydjIuOTV6bS03LjQ1LTMuOTFsMS40MSAxLjQxIDEuNzktMS44LTEuNDEtMS40MS0xLjc5IDEuOHoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwYmUuY29udGVudCk7dmFyIGRiZT1RYDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9Imljb25zIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSIzZC1yb3RhdGlvbiI+PHBhdGggZD0iTTcuNTIgMjEuNDhDNC4yNSAxOS45NCAxLjkxIDE2Ljc2IDEuNTUgMTNILjA1Qy41NiAxOS4xNiA1LjcxIDI0IDEyIDI0bC42Ni0uMDMtMy44MS0zLjgxLTEuMzMgMS4zMnptLjg5LTYuNTJjLS4xOSAwLS4zNy0uMDMtLjUyLS4wOC0uMTYtLjA2LS4yOS0uMTMtLjQtLjI0LS4xMS0uMS0uMi0uMjItLjI2LS4zNy0uMDYtLjE0LS4wOS0uMy0uMDktLjQ3aC0xLjNjMCAuMzYuMDcuNjguMjEuOTUuMTQuMjcuMzMuNS41Ni42OS4yNC4xOC41MS4zMi44Mi40MS4zLjEuNjIuMTUuOTYuMTUuMzcgMCAuNzItLjA1IDEuMDMtLjE1LjMyLS4xLjYtLjI1LjgzLS40NHMuNDItLjQzLjU1LS43MmMuMTMtLjI5LjItLjYxLjItLjk3IDAtLjE5LS4wMi0uMzgtLjA3LS41Ni0uMDUtLjE4LS4xMi0uMzUtLjIzLS41MS0uMS0uMTYtLjI0LS4zLS40LS40My0uMTctLjEzLS4zNy0uMjMtLjYxLS4zMS4yLS4wOS4zNy0uMi41Mi0uMzMuMTUtLjEzLjI3LS4yNy4zNy0uNDIuMS0uMTUuMTctLjMuMjItLjQ2LjA1LS4xNi4wNy0uMzIuMDctLjQ4IDAtLjM2LS4wNi0uNjgtLjE4LS45Ni0uMTItLjI4LS4yOS0uNTEtLjUxLS42OS0uMi0uMTktLjQ3LS4zMy0uNzctLjQzQzkuMSA4LjA1IDguNzYgOCA4LjM5IDhjLS4zNiAwLS42OS4wNS0xIC4xNi0uMy4xMS0uNTcuMjYtLjc5LjQ1LS4yMS4xOS0uMzguNDEtLjUxLjY3LS4xMi4yNi0uMTguNTQtLjE4Ljg1aDEuM2MwLS4xNy4wMy0uMzIuMDktLjQ1cy4xNC0uMjUuMjUtLjM0Yy4xMS0uMDkuMjMtLjE3LjM4LS4yMi4xNS0uMDUuMy0uMDguNDgtLjA4LjQgMCAuNy4xLjg5LjMxLjE5LjIuMjkuNDkuMjkuODYgMCAuMTgtLjAzLjM0LS4wOC40OS0uMDUuMTUtLjE0LjI3LS4yNS4zNy0uMTEuMS0uMjUuMTgtLjQxLjI0LS4xNi4wNi0uMzYuMDktLjU4LjA5SDcuNXYxLjAzaC43N2MuMjIgMCAuNDIuMDIuNi4wN3MuMzMuMTMuNDUuMjNjLjEyLjExLjIyLjI0LjI5LjQuMDcuMTYuMS4zNS4xLjU3IDAgLjQxLS4xMi43Mi0uMzUuOTMtLjIzLjIzLS41NS4zMy0uOTUuMzN6bTguNTUtNS45MmMtLjMyLS4zMy0uNy0uNTktMS4xNC0uNzctLjQzLS4xOC0uOTItLjI3LTEuNDYtLjI3SDEydjhoMi4zYy41NSAwIDEuMDYtLjA5IDEuNTEtLjI3LjQ1LS4xOC44NC0uNDMgMS4xNi0uNzYuMzItLjMzLjU3LS43My43NC0xLjE5LjE3LS40Ny4yNi0uOTkuMjYtMS41N3YtLjRjMC0uNTgtLjA5LTEuMS0uMjYtMS41Ny0uMTgtLjQ3LS40My0uODctLjc1LTEuMnptLS4zOSAzLjE2YzAgLjQyLS4wNS43OS0uMTQgMS4xMy0uMS4zMy0uMjQuNjItLjQzLjg1LS4xOS4yMy0uNDMuNDEtLjcxLjUzLS4yOS4xMi0uNjIuMTgtLjk5LjE4aC0uOTFWOS4xMmguOTdjLjcyIDAgMS4yNy4yMyAxLjY0LjY5LjM4LjQ2LjU3IDEuMTIuNTcgMS45OXYuNHpNMTIgMGwtLjY2LjAzIDMuODEgMy44MSAxLjMzLTEuMzNjMy4yNyAxLjU1IDUuNjEgNC43MiA1Ljk2IDguNDhoMS41QzIzLjQ0IDQuODQgMTguMjkgMCAxMiAweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFjY2Vzc2liaWxpdHkiPjxwYXRoIGQ9Ik0xMiAyYzEuMSAwIDIgLjkgMiAycy0uOSAyLTIgMi0yLS45LTItMiAuOS0yIDItMnptOSA3aC02djEzaC0ydi02aC0ydjZIOVY5SDNWN2gxOHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFjY2Vzc2libGUiPjxjaXJjbGUgY3g9IjEyIiBjeT0iNCIgcj0iMiI+PC9jaXJjbGU+PHBhdGggZD0iTTE5IDEzdi0yYy0xLjU0LjAyLTMuMDktLjc1LTQuMDctMS44M2wtMS4yOS0xLjQzYy0uMTctLjE5LS4zOC0uMzQtLjYxLS40NS0uMDEgMC0uMDEtLjAxLS4wMi0uMDFIMTNjLS4zNS0uMi0uNzUtLjMtMS4xOS0uMjZDMTAuNzYgNy4xMSAxMCA4LjA0IDEwIDkuMDlWMTVjMCAxLjEuOSAyIDIgMmg1djVoMnYtNS41YzAtMS4xLS45LTItMi0yaC0zdi0zLjQ1YzEuMjkgMS4wNyAzLjI1IDEuOTQgNSAxLjk1em0tNi4xNyA1Yy0uNDEgMS4xNi0xLjUyIDItMi44MyAyLTEuNjYgMC0zLTEuMzQtMy0zIDAtMS4zMS44NC0yLjQxIDItMi44M1YxMi4xYy0yLjI4LjQ2LTQgMi40OC00IDQuOSAwIDIuNzYgMi4yNCA1IDUgNSAyLjQyIDAgNC40NC0xLjcyIDQuOS00aC0yLjA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFjY291bnQtYmFsYW5jZSI+PHBhdGggZD0iTTQgMTB2N2gzdi03SDR6bTYgMHY3aDN2LTdoLTN6TTIgMjJoMTl2LTNIMnYzem0xNC0xMnY3aDN2LTdoLTN6bS00LjUtOUwyIDZ2MmgxOVY2bC05LjUtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJhbGFuY2Utd2FsbGV0Ij48cGF0aCBkPSJNMjEgMTh2MWMwIDEuMS0uOSAyLTIgMkg1Yy0xLjExIDAtMi0uOS0yLTJWNWMwLTEuMS44OS0yIDItMmgxNGMxLjEgMCAyIC45IDIgMnYxaC05Yy0xLjExIDAtMiAuOS0yIDJ2OGMwIDEuMS44OSAyIDIgMmg5em0tOS0yaDEwVjhIMTJ2OHptNC0yLjVjLS44MyAwLTEuNS0uNjctMS41LTEuNXMuNjctMS41IDEuNS0xLjUgMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFjY291bnQtYm94Ij48cGF0aCBkPSJNMyA1djE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJINWMtMS4xMSAwLTIgLjktMiAyem0xMiA0YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3ptLTkgOGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjF2MUg2di0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFjY291bnQtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAzYzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptMCAxNC4yYy0yLjUgMC00LjcxLTEuMjgtNi0zLjIyLjAzLTEuOTkgNC0zLjA4IDYtMy4wOCAxLjk5IDAgNS45NyAxLjA5IDYgMy4wOC0xLjI5IDEuOTQtMy41IDMuMjItNiAzLjIyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZCI+PHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtYWxlcnQiPjxwYXRoIGQ9Ik0xMC4wMSAyMS4wMWMwIDEuMS44OSAxLjk5IDEuOTkgMS45OXMxLjk5LS44OSAxLjk5LTEuOTloLTMuOTh6bTguODctNC4xOVYxMWMwLTMuMjUtMi4yNS01Ljk3LTUuMjktNi42OXYtLjcyQzEzLjU5IDIuNzEgMTIuODggMiAxMiAycy0xLjU5LjcxLTEuNTkgMS41OXYuNzJDNy4zNyA1LjAzIDUuMTIgNy43NSA1LjEyIDExdjUuODJMMyAxOC45NFYyMGgxOHYtMS4wNmwtMi4xMi0yLjEyek0xNiAxMy4wMWgtM3YzaC0ydi0zSDhWMTFoM1Y4aDJ2M2gzdjIuMDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWJveCI+PHBhdGggZD0iTTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0yIDEwaC00djRoLTJ2LTRIN3YtMmg0VjdoMnY0aDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptNSAxMWgtNHY0aC0ydi00SDd2LTJoNFY3aDJ2NGg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWNpcmNsZS1vdXRsaW5lIj48cGF0aCBkPSJNMTMgN2gtMnY0SDd2Mmg0djRoMnYtNGg0di0yaC00Vjd6bS0xLTVDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1zaG9wcGluZy1jYXJ0Ij48cGF0aCBkPSJNMTEgOWgyVjZoM1Y0aC0zVjFoLTJ2M0g4djJoM3Yzem0tNCA5Yy0xLjEgMC0xLjk5LjktMS45OSAyUzUuOSAyMiA3IDIyczItLjkgMi0yLS45LTItMi0yem0xMCAwYy0xLjEgMC0xLjk5LjktMS45OSAycy44OSAyIDEuOTkgMiAyLS45IDItMi0uOS0yLTItMnptLTkuODMtMy4yNWwuMDMtLjEyLjktMS42M2g3LjQ1Yy43NSAwIDEuNDEtLjQxIDEuNzUtMS4wM2wzLjg2LTcuMDFMMTkuNDIgNGgtLjAxbC0xLjEgMi0yLjc2IDVIOC41M2wtLjEzLS4yN0w2LjE2IDZsLS45NS0yLS45NC0ySDF2MmgybDMuNiA3LjU5LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmgxMnYtMkg3LjQyYy0uMTMgMC0uMjUtLjExLS4yNS0uMjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWxhcm0iPjxwYXRoIGQ9Ik0yMiA1LjcybC00LjYtMy44Ni0xLjI5IDEuNTMgNC42IDMuODZMMjIgNS43MnpNNy44OCAzLjM5TDYuNiAxLjg2IDIgNS43MWwxLjI5IDEuNTMgNC41OS0zLjg1ek0xMi41IDhIMTF2Nmw0Ljc1IDIuODUuNzUtMS4yMy00LTIuMzdWOHpNMTIgNGMtNC45NyAwLTkgNC4wMy05IDlzNC4wMiA5IDkgOWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptMCAxNmMtMy44NyAwLTctMy4xMy03LTdzMy4xMy03IDctNyA3IDMuMTMgNyA3LTMuMTMgNy03IDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWxhcm0tYWRkIj48cGF0aCBkPSJNNy44OCAzLjM5TDYuNiAxLjg2IDIgNS43MWwxLjI5IDEuNTMgNC41OS0zLjg1ek0yMiA1LjcybC00LjYtMy44Ni0xLjI5IDEuNTMgNC42IDMuODZMMjIgNS43MnpNMTIgNGMtNC45NyAwLTkgNC4wMy05IDlzNC4wMiA5IDkgOWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptMCAxNmMtMy44NyAwLTctMy4xMy03LTdzMy4xMy03IDctNyA3IDMuMTMgNyA3LTMuMTMgNy03IDd6bTEtMTFoLTJ2M0g4djJoM3YzaDJ2LTNoM3YtMmgtM1Y5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtLW9mZiI+PHBhdGggZD0iTTEyIDZjMy44NyAwIDcgMy4xMyA3IDcgMCAuODQtLjE2IDEuNjUtLjQzIDIuNGwxLjUyIDEuNTJjLjU4LTEuMTkuOTEtMi41MS45MS0zLjkyIDAtNC45Ny00LjAzLTktOS05LTEuNDEgMC0yLjczLjMzLTMuOTIuOTFMOS42IDYuNDNDMTAuMzUgNi4xNiAxMS4xNiA2IDEyIDZ6bTEwLS4yOGwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTIuOTIgMi4yOUwxLjY1IDMuNTcgMi45OCA0LjlsLTEuMTEuOTMgMS40MiAxLjQyIDEuMTEtLjk0LjguOEMzLjgzIDguNjkgMyAxMC43NSAzIDEzYzAgNC45NyA0LjAyIDkgOSA5IDIuMjUgMCA0LjMxLS44MyA1Ljg5LTIuMmwyLjIgMi4yIDEuMjctMS4yN0wzLjg5IDMuMjdsLS45Ny0uOTh6bTEzLjU1IDE2LjFDMTUuMjYgMTkuMzkgMTMuNyAyMCAxMiAyMGMtMy44NyAwLTctMy4xMy03LTcgMC0xLjcuNjEtMy4yNiAxLjYxLTQuNDdsOS44NiA5Ljg2ek04LjAyIDMuMjhMNi42IDEuODZsLS44Ni43MSAxLjQyIDEuNDIuODYtLjcxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtLW9uIj48cGF0aCBkPSJNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIgNGMtNC45NyAwLTkgNC4wMy05IDlzNC4wMiA5IDkgOWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptMCAxNmMtMy44NyAwLTctMy4xMy03LTdzMy4xMy03IDctNyA3IDMuMTMgNyA3LTMuMTMgNy03IDd6bS0xLjQ2LTUuNDdMOC40MSAxMi40bC0xLjA2IDEuMDYgMy4xOCAzLjE4IDYtNi0xLjA2LTEuMDYtNC45MyA0Ljk1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsbC1vdXQiPjxwYXRoIGQ9Ik0xNi4yMSA0LjE2bDQgNHYtNHptNCAxMmwtNCA0aDR6bS0xMiA0bC00LTR2NHptLTQtMTJsNC00aC00em0xMi45NS0uOTVjLTIuNzMtMi43My03LjE3LTIuNzMtOS45IDBzLTIuNzMgNy4xNyAwIDkuOSA3LjE3IDIuNzMgOS45IDAgMi43My03LjE2IDAtOS45em0tMS4xIDguOGMtMi4xMyAyLjEzLTUuNTcgMi4xMy03LjcgMHMtMi4xMy01LjU3IDAtNy43IDUuNTctMi4xMyA3LjcgMCAyLjEzIDUuNTcgMCA3Ljd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYW5kcm9pZCI+PHBhdGggZD0iTTYgMThjMCAuNTUuNDUgMSAxIDFoMXYzLjVjMCAuODMuNjcgMS41IDEuNSAxLjVzMS41LS42NyAxLjUtMS41VjE5aDJ2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNVYxOWgxYy41NSAwIDEtLjQ1IDEtMVY4SDZ2MTB6TTMuNSA4QzIuNjcgOCAyIDguNjcgMiA5LjV2N2MwIC44My42NyAxLjUgMS41IDEuNVM1IDE3LjMzIDUgMTYuNXYtN0M1IDguNjcgNC4zMyA4IDMuNSA4em0xNyAwYy0uODMgMC0xLjUuNjctMS41IDEuNXY3YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNXYtN2MwLS44My0uNjctMS41LTEuNS0xLjV6bS00Ljk3LTUuODRsMS4zLTEuM2MuMi0uMi4yLS41MSAwLS43MS0uMi0uMi0uNTEtLjItLjcxIDBsLTEuNDggMS40OEMxMy44NSAxLjIzIDEyLjk1IDEgMTIgMWMtLjk2IDAtMS44Ni4yMy0yLjY2LjYzTDcuODUuMTVjLS4yLS4yLS41MS0uMi0uNzEgMC0uMi4yLS4yLjUxIDAgLjcxbDEuMzEgMS4zMUM2Ljk3IDMuMjYgNiA1LjAxIDYgN2gxMmMwLTEuOTktLjk3LTMuNzUtMi40Ny00Ljg0ek0xMCA1SDlWNGgxdjF6bTUgMGgtMVY0aDF2MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbm5vdW5jZW1lbnQiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAyMmw0LTRoMTRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTcgOWgtMlY1aDJ2NnptMCA0aC0ydi0yaDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcHBzIj48cGF0aCBkPSJNNCA4aDRWNEg0djR6bTYgMTJoNHYtNGgtNHY0em0tNiAwaDR2LTRINHY0em0wLTZoNHYtNEg0djR6bTYgMGg0di00aC00djR6bTYtMTB2NGg0VjRoLTR6bS02IDRoNFY0aC00djR6bTYgNmg0di00aC00djR6bTAgNmg0di00aC00djR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJjaGl2ZSI+PHBhdGggZD0iTTIwLjU0IDUuMjNsLTEuMzktMS42OEMxOC44OCAzLjIxIDE4LjQ3IDMgMTggM0g2Yy0uNDcgMC0uODguMjEtMS4xNi41NUwzLjQ2IDUuMjNDMy4xNyA1LjU3IDMgNi4wMiAzIDYuNVYxOWMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjYuNWMwLS40OC0uMTctLjkzLS40Ni0xLjI3ek0xMiAxNy41TDYuNSAxMkgxMHYtMmg0djJoMy41TDEyIDE3LjV6TTUuMTIgNWwuODEtMWgxMmwuOTQgMUg1LjEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFycm93LWJhY2siPjxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFycm93LWRvd253YXJkIj48cGF0aCBkPSJNMjAgMTJsLTEuNDEtMS40MUwxMyAxNi4xN1Y0aC0ydjEyLjE3bC01LjU4LTUuNTlMNCAxMmw4IDggOC04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFycm93LWRyb3AtZG93biI+PHBhdGggZD0iTTcgMTBsNSA1IDUtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLWRvd24tY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxMmwtNC00aDhsLTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLXVwIj48cGF0aCBkPSJNNyAxNGw1LTUgNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFycm93LWZvcndhcmQiPjxwYXRoIGQ9Ik0xMiA0bC0xLjQxIDEuNDFMMTYuMTcgMTFINHYyaDEyLjE3bC01LjU4IDUuNTlMMTIgMjBsOC04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFycm93LXVwd2FyZCI+PHBhdGggZD0iTTQgMTJsMS40MSAxLjQxTDExIDcuODNWMjBoMlY3LjgzbDUuNTggNS41OUwyMCAxMmwtOC04LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3BlY3QtcmF0aW8iPjxwYXRoIGQ9Ik0xOSAxMmgtMnYzaC0zdjJoNXYtNXpNNyA5aDNWN0g1djVoMlY5em0xNC02SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzZXNzbWVudCI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQiPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMiAxNEg3di0yaDd2MnptMy00SDd2LTJoMTB2MnptMC00SDdWN2gxMHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtaW5kIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTAgNGMxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTYgMTJINnYtMS40YzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMVYxOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LWxhdGUiPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS02IDE1aC0ydi0yaDJ2MnptMC00aC0yVjhoMnY2em0tMS05Yy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1yZXR1cm4iPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNCAxMmgtNHYzbC01LTUgNS01djNoNHY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtcmV0dXJuZWQiPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMCAxNWwtNS01aDNWOWg0djRoM2wtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtdHVybmVkLWluIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bS0yIDE0bC00LTQgMS40MS0xLjQxTDEwIDE0LjE3bDYuNTktNi41OUwxOCA5bC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXR0YWNobWVudCI+PHBhdGggZD0iTTIgMTIuNUMyIDkuNDYgNC40NiA3IDcuNSA3SDE4YzIuMjEgMCA0IDEuNzkgNCA0cy0xLjc5IDQtNCA0SDkuNUM4LjEyIDE1IDcgMTMuODggNyAxMi41UzguMTIgMTAgOS41IDEwSDE3djJIOS40MWMtLjU1IDAtLjU1IDEgMCAxSDE4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMkg3LjVDNS41NyA5IDQgMTAuNTcgNCAxMi41UzUuNTcgMTYgNy41IDE2SDE3djJINy41QzQuNDYgMTggMiAxNS41NCAyIDEyLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXV0b3JlbmV3Ij48cGF0aCBkPSJNMTIgNnYzbDQtNC00LTR2M2MtNC40MiAwLTggMy41OC04IDggMCAxLjU3LjQ2IDMuMDMgMS4yNCA0LjI2TDYuNyAxNC44Yy0uNDUtLjgzLS43LTEuNzktLjctMi44IDAtMy4zMSAyLjY5LTYgNi02em02Ljc2IDEuNzRMMTcuMyA5LjJjLjQ0Ljg0LjcgMS43OS43IDIuOCAwIDMuMzEtMi42OSA2LTYgNnYtM2wtNCA0IDQgNHYtM2M0LjQyIDAgOC0zLjU4IDgtOCAwLTEuNTctLjQ2LTMuMDMtMS4yNC00LjI2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJhY2tzcGFjZSI+PHBhdGggZD0iTTIyIDNIN2MtLjY5IDAtMS4yMy4zNS0xLjU5Ljg4TDAgMTJsNS40MSA4LjExYy4zNi41My45Ljg5IDEuNTkuODloMTVjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTMgMTIuNTlMMTcuNTkgMTcgMTQgMTMuNDEgMTAuNDEgMTcgOSAxNS41OSAxMi41OSAxMiA5IDguNDEgMTAuNDEgNyAxNCAxMC41OSAxNy41OSA3IDE5IDguNDEgMTUuNDEgMTIgMTkgMTUuNTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmFja3VwIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNCAxM3Y0aC00di00SDdsNS01IDUgNWgtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJibG9jayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTQgMTJjMC00LjQyIDMuNTgtOCA4LTggMS44NSAwIDMuNTUuNjMgNC45IDEuNjlMNS42OSAxNi45QzQuNjMgMTUuNTUgNCAxMy44NSA0IDEyem04IDhjLTEuODUgMC0zLjU1LS42My00LjktMS42OUwxOC4zMSA3LjFDMTkuMzcgOC40NSAyMCAxMC4xNSAyMCAxMmMwIDQuNDItMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rIj48cGF0aCBkPSJNMTggMkg2Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgNGg1djhsLTIuNS0xLjVMNiAxMlY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJvb2ttYXJrIj48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0xLjk5LjktMS45OSAyTDUgMjFsNy0zIDcgM1Y1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJvb2ttYXJrLWJvcmRlciI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnptMCAxNWwtNS0yLjE4TDcgMThWNWgxMHYxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJidWctcmVwb3J0Ij48cGF0aCBkPSJNMjAgOGgtMi44MWMtLjQ1LS43OC0xLjA3LTEuNDUtMS44Mi0xLjk2TDE3IDQuNDEgMTUuNTkgM2wtMi4xNyAyLjE3QzEyLjk2IDUuMDYgMTIuNDkgNSAxMiA1Yy0uNDkgMC0uOTYuMDYtMS40MS4xN0w4LjQxIDMgNyA0LjQxbDEuNjIgMS42M0M3Ljg4IDYuNTUgNy4yNiA3LjIyIDYuODEgOEg0djJoMi4wOWMtLjA1LjMzLS4wOS42Ni0uMDkgMXYxSDR2MmgydjFjMCAuMzQuMDQuNjcuMDkgMUg0djJoMi44MWMxLjA0IDEuNzkgMi45NyAzIDUuMTkgM3M0LjE1LTEuMjEgNS4xOS0zSDIwdi0yaC0yLjA5Yy4wNS0uMzMuMDktLjY2LjA5LTF2LTFoMnYtMmgtMnYtMWMwLS4zNC0uMDQtLjY3LS4wOS0xSDIwVjh6bS02IDhoLTR2LTJoNHYyem0wLTRoLTR2LTJoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJ1aWxkIj48cGF0aCBkPSJNMjIuNyAxOWwtOS4xLTkuMWMuOS0yLjMuNC01LTEuNS02LjktMi0yLTUtMi40LTcuNC0xLjNMOSA2IDYgOSAxLjYgNC43Qy40IDcuMS45IDEwLjEgMi45IDEyLjFjMS45IDEuOSA0LjYgMi40IDYuOSAxLjVsOS4xIDkuMWMuNC40IDEgLjQgMS40IDBsMi4zLTIuM2MuNS0uNC41LTEuMS4xLTEuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYWNoZWQiPjxwYXRoIGQ9Ik0xOSA4bC00IDRoM2MwIDMuMzEtMi42OSA2LTYgNi0xLjAxIDAtMS45Ny0uMjUtMi44LS43bC0xLjQ2IDEuNDZDOC45NyAxOS41NCAxMC40MyAyMCAxMiAyMGM0LjQyIDAgOC0zLjU4IDgtOGgzbC00LTR6TTYgMTJjMC0zLjMxIDIuNjktNiA2LTYgMS4wMSAwIDEuOTcuMjUgMi44LjdsMS40Ni0xLjQ2QzE1LjAzIDQuNDYgMTMuNTcgNCAxMiA0Yy00LjQyIDAtOCAzLjU4LTggOEgxbDQgNCA0LTRINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtZW5oYW5jZSI+PHBhdGggZD0iTTkgM0w3LjE3IDVINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yaC0zLjE3TDE1IDNIOXptMyAxNWMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6bTAtMWwxLjI1LTIuNzVMMTYgMTNsLTIuNzUtMS4yNUwxMiA5bC0xLjI1IDIuNzVMOCAxM2wyLjc1IDEuMjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FuY2VsIj48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptNSAxMy41OUwxNS41OSAxNyAxMiAxMy40MSA4LjQxIDE3IDcgMTUuNTkgMTAuNTkgMTIgNyA4LjQxIDguNDEgNyAxMiAxMC41OSAxNS41OSA3IDE3IDguNDEgMTMuNDEgMTIgMTcgMTUuNTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FyZC1naWZ0Y2FyZCI+PHBhdGggZD0iTTIwIDZoLTIuMThjLjExLS4zMS4xOC0uNjUuMTgtMSAwLTEuNjYtMS4zNC0zLTMtMy0xLjA1IDAtMS45Ni41NC0yLjUgMS4zNWwtLjUuNjctLjUtLjY4QzEwLjk2IDIuNTQgMTAuMDUgMiA5IDIgNy4zNCAyIDYgMy4zNCA2IDVjMCAuMzUuMDcuNjkuMTggMUg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS01LTJjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXpNOSA0Yy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTExIDE1SDR2LTJoMTZ2MnptMC01SDRWOGg1LjA4TDcgMTAuODMgOC42MiAxMiAxMSA4Ljc2bDEtMS4zNiAxIDEuMzZMMTUuMzggMTIgMTcgMTAuODMgMTQuOTIgOEgyMHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhcmQtbWVtYmVyc2hpcCI+PHBhdGggZD0iTTIwIDJINGMtMS4xMSAwLTIgLjg5LTIgMnYxMWMwIDEuMTEuODkgMiAyIDJoNHY1bDQtMiA0IDJ2LTVoNGMxLjExIDAgMi0uODkgMi0yVjRjMC0xLjExLS44OS0yLTItMnptMCAxM0g0di0yaDE2djJ6bTAtNUg0VjRoMTZ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYXJkLXRyYXZlbCI+PHBhdGggZD0iTTIwIDZoLTNWNGMwLTEuMTEtLjg5LTItMi0ySDljLTEuMTEgMC0yIC44OS0yIDJ2Mkg0Yy0xLjExIDAtMiAuODktMiAydjExYzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnpNOSA0aDZ2Mkg5VjR6bTExIDE1SDR2LTJoMTZ2MnptMC01SDRWOGgzdjJoMlY4aDZ2MmgyVjhoM3Y2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoYW5nZS1oaXN0b3J5Ij48cGF0aCBkPSJNMTIgNy43N0wxOC4zOSAxOEg1LjYxTDEyIDcuNzdNMTIgNEwyIDIwaDIwTDEyIDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hlY2siPjxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGVjay1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uOSAyLTJWNWMwLTEuMS0uODktMi0yLTJ6bS05IDE0bC01LTUgMS40MS0xLjQxTDEwIDE0LjE3bDcuNTktNy41OUwxOSA4bC05IDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hlY2stYm94LW91dGxpbmUtYmxhbmsiPjxwYXRoIGQ9Ik0xOSA1djE0SDVWNWgxNG0wLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0yIDE1bC01LTUgMS40MS0xLjQxTDEwIDE0LjE3bDcuNTktNy41OUwxOSA4bC05IDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hldnJvbi1sZWZ0Ij48cGF0aCBkPSJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGV2cm9uLXJpZ2h0Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hyb21lLXJlYWRlci1tb2RlIj48cGF0aCBkPSJNMTMgMTJoN3YxLjVoLTd6bTAtMi41aDdWMTFoLTd6bTAgNWg3VjE2aC03ek0yMSA0SDNjLTEuMSAwLTIgLjktMiAydjEzYzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNWgtOVY2aDl2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xhc3MiPjxwYXRoIGQ9Ik0xOCAySDZjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNNiA0aDV2OGwtMi41LTEuNUw2IDEyVjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xlYXIiPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvc2UiPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptNC41IDE0SDhjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTNsLjE0LjAxQzguNTggOC4yOCAxMC4xMyA3IDEyIDdjMi4yMSAwIDQgMS43OSA0IDRoLjVjMS4zOCAwIDIuNSAxLjEyIDIuNSAyLjVTMTcuODggMTYgMTYuNSAxNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG91ZC1kb25lIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xMCAxN2wtMy41LTMuNSAxLjQxLTEuNDFMMTAgMTQuMTcgMTUuMTggOWwxLjQxIDEuNDFMMTAgMTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtZG93bmxvYWQiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTE3IDEzbC01IDUtNS01aDNWOWg0djRoM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG91ZC1vZmYiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNGMtMS40OCAwLTIuODUuNDMtNC4wMSAxLjE3bDEuNDYgMS40NkMxMC4yMSA2LjIzIDExLjA4IDYgMTIgNmMzLjA0IDAgNS41IDIuNDYgNS41IDUuNXYuNUgxOWMxLjY2IDAgMyAxLjM0IDMgMyAwIDEuMTMtLjY0IDIuMTEtMS41NiAyLjYybDEuNDUgMS40NUMyMy4xNiAxOC4xNiAyNCAxNi42OCAyNCAxNWMwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMyA1LjI3bDIuNzUgMi43NEMyLjU2IDguMTUgMCAxMC43NyAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDExLjczbDIgMkwyMSAyMC43MyA0LjI3IDQgMyA1LjI3ek03LjczIDEwbDggOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aDEuNzN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtcXVldWUiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTE5IDE4SDZjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTRoLjcxQzcuMzcgNy42OSA5LjQ4IDYgMTIgNmMzLjA0IDAgNS41IDIuNDYgNS41IDUuNXYuNUgxOWMxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG91ZC11cGxvYWQiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTE0IDEzdjRoLTR2LTRIN2w1LTUgNSA1aC0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvZGUiPjxwYXRoIGQ9Ik05LjQgMTYuNkw0LjggMTJsNC42LTQuNkw4IDZsLTYgNiA2IDYgMS40LTEuNHptNS4yIDBsNC42LTQuNi00LjYtNC42TDE2IDZsNiA2LTYgNi0xLjQtMS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbXBhcmUtYXJyb3dzIj48cGF0aCBkPSJNOS4wMSAxNEgydjJoNy4wMXYzTDEzIDE1bC0zLjk5LTR2M3ptNS45OC0xdi0zSDIyVjhoLTcuMDFWNUwxMSA5bDMuOTkgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb250ZW50LWNvcHkiPjxwYXRoIGQ9Ik0xNiAxSDRjLTEuMSAwLTIgLjktMiAydjE0aDJWM2gxMlYxem0zIDRIOGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxMWMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE2SDhWN2gxMXYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb250ZW50LWN1dCI+PHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjb250ZW50LXBhc3RlIj48cGF0aCBkPSJNMTkgMmgtNC4xOEMxNC40Ljg0IDEzLjMgMCAxMiAwYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem03IDE4SDVWNGgydjNoMTBWNGgydjE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvcHlyaWdodCI+PHBhdGggZD0iTTEwLjA4IDEwLjg2Yy4wNS0uMzMuMTYtLjYyLjMtLjg3cy4zNC0uNDYuNTktLjYyYy4yNC0uMTUuNTQtLjIyLjkxLS4yMy4yMy4wMS40NC4wNS42My4xMy4yLjA5LjM4LjIxLjUyLjM2cy4yNS4zMy4zNC41My4xMy40Mi4xNC42NGgxLjc5Yy0uMDItLjQ3LS4xMS0uOS0uMjgtMS4yOXMtLjQtLjczLS43LTEuMDEtLjY2LS41LTEuMDgtLjY2LS44OC0uMjMtMS4zOS0uMjNjLS42NSAwLTEuMjIuMTEtMS43LjM0cy0uODguNTMtMS4yLjkyLS41Ni44NC0uNzEgMS4zNlM4IDExLjI5IDggMTEuODd2LjI3YzAgLjU4LjA4IDEuMTIuMjMgMS42NHMuMzkuOTcuNzEgMS4zNS43Mi42OSAxLjIuOTEgMS4wNS4zNCAxLjcuMzRjLjQ3IDAgLjkxLS4wOCAxLjMyLS4yM3MuNzctLjM2IDEuMDgtLjYzLjU2LS41OC43NC0uOTQuMjktLjc0LjMtMS4xNWgtMS43OWMtLjAxLjIxLS4wNi40LS4xNS41OHMtLjIxLjMzLS4zNi40Ni0uMzIuMjMtLjUyLjNjLS4xOS4wNy0uMzkuMDktLjYuMS0uMzYtLjAxLS42Ni0uMDgtLjg5LS4yMy0uMjUtLjE2LS40NS0uMzctLjU5LS42MnMtLjI1LS41NS0uMy0uODgtLjA4LS42Ny0uMDgtMXYtLjI3YzAtLjM1LjAzLS42OC4wOC0xLjAxek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcmVhdGUiPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JlYXRlLW5ldy1mb2xkZXIiPjxwYXRoIGQ9Ik0yMCA2aC04bC0yLTJINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tMSA4aC0zdjNoLTJ2LTNoLTN2LTJoM1Y5aDJ2M2gzdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JlZGl0LWNhcmQiPjxwYXRoIGQ9Ik0yMCA0SDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjZjMC0xLjExLS44OS0yLTItMnptMCAxNEg0di02aDE2djZ6bTAtMTBINFY2aDE2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGFzaGJvYXJkIj48cGF0aCBkPSJNMyAxM2g4VjNIM3YxMHptMCA4aDh2LTZIM3Y2em0xMCAwaDhWMTFoLTh2MTB6bTAtMTh2Nmg4VjNoLTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGF0ZS1yYW5nZSI+PHBhdGggZD0iTTkgMTFIN3YyaDJ2LTJ6bTQgMGgtMnYyaDJ2LTJ6bTQgMGgtMnYyaDJ2LTJ6bTItN2gtMVYyaC0ydjJIOFYySDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDIwYzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY5aDE0djExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlbGV0ZSI+PHBhdGggZD0iTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnpNMTkgNGgtMy41bC0xLTFoLTVsLTEgMUg1djJoMTRWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZWxldGUtZm9yZXZlciI+PHBhdGggZD0iTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnptMi40Ni03LjEybDEuNDEtMS40MUwxMiAxMi41OWwyLjEyLTIuMTIgMS40MSAxLjQxTDEzLjQxIDE0bDIuMTIgMi4xMi0xLjQxIDEuNDFMMTIgMTUuNDFsLTIuMTIgMi4xMi0xLjQxLTEuNDFMMTAuNTkgMTRsLTIuMTMtMi4xMnpNMTUuNSA0bC0xLTFoLTVsLTEgMUg1djJoMTRWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZWxldGUtc3dlZXAiPjxwYXRoIGQ9Ik0xNSAxNmg0djJoLTR6bTAtOGg3djJoLTd6bTAgNGg2djJoLTZ6TTMgMThjMCAxLjEuOSAyIDIgMmg2YzEuMSAwIDItLjkgMi0yVjhIM3YxMHpNMTQgNWgtM2wtMS0xSDZMNSA1SDJ2MmgxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZXNjcmlwdGlvbiI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptMiAxNkg4di0yaDh2MnptMC00SDh2LTJoOHYyem0tMy01VjMuNUwxOC41IDlIMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG5zIj48cGF0aCBkPSJNMjAgMTNINGMtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTZjLjU1IDAgMS0uNDUgMS0xdi02YzAtLjU1LS40NS0xLTEtMXpNNyAxOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6TTIwIDNINGMtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTZjLjU1IDAgMS0uNDUgMS0xVjRjMC0uNTUtLjQ1LTEtMS0xek03IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRvbmUiPjxwYXRoIGQ9Ik05IDE2LjJMNC44IDEybC0xLjQgMS40TDkgMTkgMjEgN2wtMS40LTEuNEw5IDE2LjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG9uZS1hbGwiPjxwYXRoIGQ9Ik0xOCA3bC0xLjQxLTEuNDEtNi4zNCA2LjM0IDEuNDEgMS40MUwxOCA3em00LjI0LTEuNDFMMTEuNjYgMTYuMTcgNy40OCAxMmwtMS40MSAxLjQxTDExLjY2IDE5bDEyLTEyLTEuNDItMS40MXpNLjQxIDEzLjQxTDYgMTlsMS40MS0xLjQxTDEuODMgMTIgLjQxIDEzLjQxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRvbnV0LWxhcmdlIj48cGF0aCBkPSJNMTEgNS4wOFYyYy01IC41LTkgNC44MS05IDEwczQgOS41IDkgMTB2LTMuMDhjLTMtLjQ4LTYtMy40LTYtNi45MnMzLTYuNDQgNi02Ljkyek0xOC45NyAxMUgyMmMtLjQ3LTUtNC04LjUzLTktOXYzLjA4QzE2IDUuNTEgMTguNTQgOCAxOC45NyAxMXpNMTMgMTguOTJWMjJjNS0uNDcgOC41My00IDktOWgtMy4wM2MtLjQzIDMtMi45NyA1LjQ5LTUuOTcgNS45MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb251dC1zbWFsbCI+PHBhdGggZD0iTTExIDkuMTZWMmMtNSAuNS05IDQuNzktOSAxMHM0IDkuNSA5IDEwdi03LjE2Yy0xLS40MS0yLTEuNTItMi0yLjg0czEtMi40MyAyLTIuODR6TTE0Ljg2IDExSDIyYy0uNDgtNC43NS00LTguNTMtOS05djcuMTZjMSAuMyAxLjUyLjk4IDEuODYgMS44NHpNMTMgMTQuODRWMjJjNS0uNDcgOC41Mi00LjI1IDktOWgtNy4xNGMtLjM0Ljg2LS44NiAxLjU0LTEuODYgMS44NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJkcmFmdHMiPjxwYXRoIGQ9Ik0yMS45OSA4YzAtLjcyLS4zNy0xLjM1LS45NC0xLjdMMTIgMSAyLjk1IDYuM0MyLjM4IDYuNjUgMiA3LjI4IDIgOHYxMGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0ybC0uMDEtMTB6TTEyIDEzTDMuNzQgNy44NCAxMiAzbDguMjYgNC44NEwxMiAxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJlamVjdCI+PHBhdGggZD0iTTUgMTdoMTR2Mkg1em03LTEyTDUuMzMgMTVoMTMuMzR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXJyb3IiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImVycm9yLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMSAxNWgydjJoLTJ6bTAtOGgydjZoLTJ6bS45OS01QzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXVyby1zeW1ib2wiPjxwYXRoIGQ9Ik0xNSAxOC41Yy0yLjUxIDAtNC42OC0xLjQyLTUuNzYtMy41SDE1di0ySDguNThjLS4wNS0uMzMtLjA4LS42Ni0uMDgtMXMuMDMtLjY3LjA4LTFIMTVWOUg5LjI0QzEwLjMyIDYuOTIgMTIuNSA1LjUgMTUgNS41YzEuNjEgMCAzLjA5LjU5IDQuMjMgMS41N0wyMSA1LjNDMTkuNDEgMy44NyAxNy4zIDMgMTUgM2MtMy45MiAwLTcuMjQgMi41MS04LjQ4IDZIM3YyaDMuMDZjLS4wNC4zMy0uMDYuNjYtLjA2IDEgMCAuMzQuMDIuNjcuMDYgMUgzdjJoMy41MmMxLjI0IDMuNDkgNC41NiA2IDguNDggNiAyLjMxIDAgNC40MS0uODcgNi0yLjNsLTEuNzgtMS43N2MtMS4xMy45OC0yLjYgMS41Ny00LjIyIDEuNTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXZlbnQiPjxwYXRoIGQ9Ik0xNyAxMmgtNXY1aDV2LTV6TTE2IDF2Mkg4VjFINnYySDVjLTEuMTEgMC0xLjk5LjktMS45OSAyTDMgMTljMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMmgtMVYxaC0yem0zIDE4SDVWOGgxNHYxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJldmVudC1zZWF0Ij48cGF0aCBkPSJNNCAxOHYzaDN2LTNoMTB2M2gzdi02SDR6bTE1LThoM3YzaC0zek0yIDEwaDN2M0gyem0xNSAzSDdWNWMwLTEuMS45LTIgMi0yaDZjMS4xIDAgMiAuOSAyIDJ2OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJleGl0LXRvLWFwcCI+PHBhdGggZD0iTTEwLjA5IDE1LjU5TDExLjUgMTdsNS01LTUtNS0xLjQxIDEuNDFMMTIuNjcgMTFIM3YyaDkuNjdsLTIuNTggMi41OXpNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2NGgyVjVoMTR2MTRINXYtNEgzdjRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBhbmQtbGVzcyI+PHBhdGggZD0iTTEyIDhsLTYgNiAxLjQxIDEuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cGFuZC1tb3JlIj48cGF0aCBkPSJNMTYuNTkgOC41OUwxMiAxMy4xNyA3LjQxIDguNTkgNiAxMGw2IDYgNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cGxvcmUiPjxwYXRoIGQ9Ik0xMiAxMC45Yy0uNjEgMC0xLjEuNDktMS4xIDEuMXMuNDkgMS4xIDEuMSAxLjFjLjYxIDAgMS4xLS40OSAxLjEtMS4xcy0uNDktMS4xLTEuMS0xLjF6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTIuMTkgMTIuMTlMNiAxOGwzLjgxLTguMTlMMTggNmwtMy44MSA4LjE5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4dGVuc2lvbiI+PHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZhY2UiPjxwYXRoIGQ9Ik05IDExLjc1Yy0uNjkgMC0xLjI1LjU2LTEuMjUgMS4yNXMuNTYgMS4yNSAxLjI1IDEuMjUgMS4yNS0uNTYgMS4yNS0xLjI1LS41Ni0xLjI1LTEuMjUtMS4yNXptNiAwYy0uNjkgMC0xLjI1LjU2LTEuMjUgMS4yNXMuNTYgMS4yNSAxLjI1IDEuMjUgMS4yNS0uNTYgMS4yNS0xLjI1LS41Ni0xLjI1LTEuMjUtMS4yNXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LTggMC0uMjkuMDItLjU4LjA1LS44NiAyLjM2LTEuMDUgNC4yMy0yLjk4IDUuMjEtNS4zN0MxMS4wNyA4LjMzIDE0LjA1IDEwIDE3LjQyIDEwYy43OCAwIDEuNTMtLjA5IDIuMjUtLjI2LjIxLjcxLjMzIDEuNDcuMzMgMi4yNiAwIDQuNDEtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmYXZvcml0ZSI+PHBhdGggZD0iTTEyIDIxLjM1bC0xLjQ1LTEuMzJDNS40IDE1LjM2IDIgMTIuMjggMiA4LjUgMiA1LjQyIDQuNDIgMyA3LjUgM2MxLjc0IDAgMy40MS44MSA0LjUgMi4wOUMxMy4wOSAzLjgxIDE0Ljc2IDMgMTYuNSAzIDE5LjU4IDMgMjIgNS40MiAyMiA4LjVjMCAzLjc4LTMuNCA2Ljg2LTguNTUgMTEuNTRMMTIgMjEuMzV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmF2b3JpdGUtYm9yZGVyIj48cGF0aCBkPSJNMTYuNSAzYy0xLjc0IDAtMy40MS44MS00LjUgMi4wOUMxMC45MSAzLjgxIDkuMjQgMyA3LjUgMyA0LjQyIDMgMiA1LjQyIDIgOC41YzAgMy43OCAzLjQgNi44NiA4LjU1IDExLjU0TDEyIDIxLjM1bDEuNDUtMS4zMkMxOC42IDE1LjM2IDIyIDEyLjI4IDIyIDguNSAyMiA1LjQyIDE5LjU4IDMgMTYuNSAzem0tNC40IDE1LjU1bC0uMS4xLS4xLS4xQzcuMTQgMTQuMjQgNCAxMS4zOSA0IDguNSA0IDYuNSA1LjUgNSA3LjUgNWMxLjU0IDAgMy4wNC45OSAzLjU3IDIuMzZoMS44N0MxMy40NiA1Ljk5IDE0Ljk2IDUgMTYuNSA1YzIgMCAzLjUgMS41IDMuNSAzLjUgMCAyLjg5LTMuMTQgNS43NC03LjkgMTAuMDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmVlZGJhY2siPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAyMmw0LTRoMTRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTcgMTJoLTJ2LTJoMnYyem0wLTRoLTJWNmgydjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsZS1kb3dubG9hZCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWxlLXVwbG9hZCI+PHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1saXN0Ij48cGF0aCBkPSJNMTAgMThoNHYtMmgtNHYyek0zIDZ2MmgxOFY2SDN6bTMgN2gxMnYtMkg2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmluZC1pbi1wYWdlIj48cGF0aCBkPSJNMjAgMTkuNTlWOGwtNi02SDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMuNDUgMCAuODUtLjE1IDEuMTktLjRsLTQuNDMtNC40M2MtLjguNTItMS43NC44My0yLjc2LjgzLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNWMwIDEuMDItLjMxIDEuOTYtLjgzIDIuNzVMMjAgMTkuNTl6TTkgMTNjMCAxLjY2IDEuMzQgMyAzIDNzMy0xLjM0IDMtMy0xLjM0LTMtMy0zLTMgMS4zNC0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmluZC1yZXBsYWNlIj48cGF0aCBkPSJNMTEgNmMxLjM4IDAgMi42My41NiAzLjU0IDEuNDZMMTIgMTBoNlY0bC0yLjA1IDIuMDVDMTQuNjggNC43OCAxMi45MyA0IDExIDRjLTMuNTMgMC02LjQzIDIuNjEtNi45MiA2SDYuMWMuNDYtMi4yOCAyLjQ4LTQgNC45LTR6bTUuNjQgOS4xNGMuNjYtLjkgMS4xMi0xLjk3IDEuMjgtMy4xNEgxNS45Yy0uNDYgMi4yOC0yLjQ4IDQtNC45IDQtMS4zOCAwLTIuNjMtLjU2LTMuNTQtMS40NkwxMCAxMkg0djZsMi4wNS0yLjA1QzcuMzIgMTcuMjIgOS4wNyAxOCAxMSAxOGMxLjU1IDAgMi45OC0uNTEgNC4xNC0xLjM2TDIwIDIxLjQ5IDIxLjQ5IDIwbC00Ljg1LTQuODZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmluZ2VycHJpbnQiPjxwYXRoIGQ9Ik0xNy44MSA0LjQ3Yy0uMDggMC0uMTYtLjAyLS4yMy0uMDZDMTUuNjYgMy40MiAxNCAzIDEyLjAxIDNjLTEuOTggMC0zLjg2LjQ3LTUuNTcgMS40MS0uMjQuMTMtLjU0LjA0LS42OC0uMi0uMTMtLjI0LS4wNC0uNTUuMi0uNjhDNy44MiAyLjUyIDkuODYgMiAxMi4wMSAyYzIuMTMgMCAzLjk5LjQ3IDYuMDMgMS41Mi4yNS4xMy4zNC40My4yMS42Ny0uMDkuMTgtLjI2LjI4LS40NC4yOHpNMy41IDkuNzJjLS4xIDAtLjItLjAzLS4yOS0uMDktLjIzLS4xNi0uMjgtLjQ3LS4xMi0uNy45OS0xLjQgMi4yNS0yLjUgMy43NS0zLjI3QzkuOTggNC4wNCAxNCA0LjAzIDE3LjE1IDUuNjVjMS41Ljc3IDIuNzYgMS44NiAzLjc1IDMuMjUuMTYuMjIuMTEuNTQtLjEyLjctLjIzLjE2LS41NC4xMS0uNy0uMTItLjktMS4yNi0yLjA0LTIuMjUtMy4zOS0yLjk0LTIuODctMS40Ny02LjU0LTEuNDctOS40LjAxLTEuMzYuNy0yLjUgMS43LTMuNCAyLjk2LS4wOC4xNC0uMjMuMjEtLjM5LjIxem02LjI1IDEyLjA3Yy0uMTMgMC0uMjYtLjA1LS4zNS0uMTUtLjg3LS44Ny0xLjM0LTEuNDMtMi4wMS0yLjY0LS42OS0xLjIzLTEuMDUtMi43My0xLjA1LTQuMzQgMC0yLjk3IDIuNTQtNS4zOSA1LjY2LTUuMzlzNS42NiAyLjQyIDUuNjYgNS4zOWMwIC4yOC0uMjIuNS0uNS41cy0uNS0uMjItLjUtLjVjMC0yLjQyLTIuMDktNC4zOS00LjY2LTQuMzktMi41NyAwLTQuNjYgMS45Ny00LjY2IDQuMzkgMCAxLjQ0LjMyIDIuNzcuOTMgMy44NS42NCAxLjE1IDEuMDggMS42NCAxLjg1IDIuNDIuMTkuMi4xOS41MSAwIC43MS0uMTEuMS0uMjQuMTUtLjM3LjE1em03LjE3LTEuODVjLTEuMTkgMC0yLjI0LS4zLTMuMS0uODktMS40OS0xLjAxLTIuMzgtMi42NS0yLjM4LTQuMzkgMC0uMjguMjItLjUuNS0uNXMuNS4yMi41LjVjMCAxLjQxLjcyIDIuNzQgMS45NCAzLjU2LjcxLjQ4IDEuNTQuNzEgMi41NC43MS4yNCAwIC42NC0uMDMgMS4wNC0uMS4yNy0uMDUuNTMuMTMuNTguNDEuMDUuMjctLjEzLjUzLS40MS41OC0uNTcuMTEtMS4wNy4xMi0xLjIxLjEyek0xNC45MSAyMmMtLjA0IDAtLjA5LS4wMS0uMTMtLjAyLTEuNTktLjQ0LTIuNjMtMS4wMy0zLjcyLTIuMS0xLjQtMS4zOS0yLjE3LTMuMjQtMi4xNy01LjIyIDAtMS42MiAxLjM4LTIuOTQgMy4wOC0yLjk0IDEuNyAwIDMuMDggMS4zMiAzLjA4IDIuOTQgMCAxLjA3LjkzIDEuOTQgMi4wOCAxLjk0czIuMDgtLjg3IDIuMDgtMS45NGMwLTMuNzctMy4yNS02LjgzLTcuMjUtNi44My0yLjg0IDAtNS40NCAxLjU4LTYuNjEgNC4wMy0uMzkuODEtLjU5IDEuNzYtLjU5IDIuOCAwIC43OC4wNyAyLjAxLjY3IDMuNjEuMS4yNi0uMDMuNTUtLjI5LjY0LS4yNi4xLS41NS0uMDQtLjY0LS4yOS0uNDktMS4zMS0uNzMtMi42MS0uNzMtMy45NiAwLTEuMi4yMy0yLjI5LjY4LTMuMjQgMS4zMy0yLjc5IDQuMjgtNC42IDcuNTEtNC42IDQuNTUgMCA4LjI1IDMuNTEgOC4yNSA3LjgzIDAgMS42Mi0xLjM4IDIuOTQtMy4wOCAyLjk0cy0zLjA4LTEuMzItMy4wOC0yLjk0YzAtMS4wNy0uOTMtMS45NC0yLjA4LTEuOTRzLTIuMDguODctMi4wOCAxLjk0YzAgMS43MS42NiAzLjMxIDEuODcgNC41MS45NS45NCAxLjg2IDEuNDYgMy4yNyAxLjg1LjI3LjA3LjQyLjM1LjM1LjYxLS4wNS4yMy0uMjYuMzgtLjQ3LjM4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpcnN0LXBhZ2UiPjxwYXRoIGQ9Ik0xOC40MSAxNi41OUwxMy44MiAxMmw0LjU5LTQuNTlMMTcgNmwtNiA2IDYgNnpNNiA2aDJ2MTJINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFnIj48cGF0aCBkPSJNMTQuNCA2TDE0IDRINXYxN2gydi03aDUuNmwuNCAyaDdWNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlnaHQtbGFuZCI+PHBhdGggZD0iTTIuNSAxOWgxOXYyaC0xOXptNy4xOC01LjczbDQuMzUgMS4xNiA1LjMxIDEuNDJjLjguMjEgMS42Mi0uMjYgMS44NC0xLjA2LjIxLS44LS4yNi0xLjYyLTEuMDYtMS44NGwtNS4zMS0xLjQyLTIuNzYtOS4wMkwxMC4xMiAydjguMjhMNS4xNSA4Ljk1bC0uOTMtMi4zMi0xLjQ1LS4zOXY1LjE3bDEuNi40MyA1LjMxIDEuNDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpZ2h0LXRha2VvZmYiPjxwYXRoIGQ9Ik0yLjUgMTloMTl2MmgtMTl6bTE5LjU3LTkuMzZjLS4yMS0uOC0xLjA0LTEuMjgtMS44NC0xLjA2TDE0LjkyIDEwbC02LjktNi40My0xLjkzLjUxIDQuMTQgNy4xNy00Ljk3IDEuMzMtMS45Ny0xLjU0LTEuNDUuMzkgMS44MiAzLjE2Ljc3IDEuMzMgMS42LS40MyA1LjMxLTEuNDIgNC4zNS0xLjE2TDIxIDExLjQ5Yy44MS0uMjMgMS4yOC0xLjA1IDEuMDctMS44NXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlwLXRvLWJhY2siPjxwYXRoIGQ9Ik05IDdIN3YyaDJWN3ptMCA0SDd2Mmgydi0yem0wLThjLTEuMTEgMC0yIC45LTIgMmgyVjN6bTQgMTJoLTJ2Mmgydi0yem02LTEydjJoMmMwLTEuMS0uOS0yLTItMnptLTYgMGgtMnYyaDJWM3pNOSAxN3YtMkg3YzAgMS4xLjg5IDIgMiAyem0xMC00aDJ2LTJoLTJ2MnptMC00aDJWN2gtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnpNNSA3SDN2MTJjMCAxLjEuODkgMiAyIDJoMTJ2LTJINVY3em0xMC0yaDJWM2gtMnYyem0wIDEyaDJ2LTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlwLXRvLWZyb250Ij48cGF0aCBkPSJNMyAxM2gydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0yIDR2LTJIM2MwIDEuMS44OSAyIDIgMnpNMyA5aDJWN0gzdjJ6bTEyIDEyaDJ2LTJoLTJ2MnptNC0xOEg5Yy0xLjExIDAtMiAuOS0yIDJ2MTBjMCAxLjEuODkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxMkg5VjVoMTB2MTB6bS04IDZoMnYtMmgtMnYyem0tNCAwaDJ2LTJIN3YyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZvbGRlciI+PHBhdGggZD0iTTEwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMmgtOGwtMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZvbGRlci1vcGVuIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bTAgMTJINFY4aDE2djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZvbGRlci1zaGFyZWQiPjxwYXRoIGQ9Ik0yMCA2aC04bC0yLTJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnptLTUgM2MxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDItMi0uOS0yLTIgLjktMiAyLTJ6bTQgOGgtOHYtMWMwLTEuMzMgMi42Ny0yIDQtMnM0IC42NyA0IDJ2MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb250LWRvd25sb2FkIj48cGF0aCBkPSJNOS45MyAxMy41aDQuMTRMMTIgNy45OHpNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS00LjA1IDE2LjVsLTEuMTQtM0g5LjE3bC0xLjEyIDNINS45Nmw1LjExLTEzaDEuODZsNS4xMSAxM2gtMi4wOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb3J3YXJkIj48cGF0aCBkPSJNMTIgOFY0bDggOC04IDh2LTRINFY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZ1bGxzY3JlZW4iPjxwYXRoIGQ9Ik03IDE0SDV2NWg1di0ySDd2LTN6bS0yLTRoMlY3aDNWNUg1djV6bTEyIDdoLTN2Mmg1di01aC0ydjN6TTE0IDV2MmgzdjNoMlY1aC01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZ1bGxzY3JlZW4tZXhpdCI+PHBhdGggZD0iTTUgMTZoM3YzaDJ2LTVINXYyem0zLThINXYyaDVWNUg4djN6bTYgMTFoMnYtM2gzdi0yaC01djV6bTItMTFWNWgtMnY1aDVWOGgtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJnLXRyYW5zbGF0ZSI+PHBhdGggZD0iTTIwIDVoLTkuMTJMMTAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxM2MwIDEuMS45IDIgMiAyaDdsMSAzaDhjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnpNNy4xNyAxNC41OWMtMi4yNSAwLTQuMDktMS44My00LjA5LTQuMDlzMS44My00LjA5IDQuMDktNC4wOWMxLjA0IDAgMS45OS4zNyAyLjc0IDEuMDdsLjA3LjA2LTEuMjMgMS4xOC0uMDYtLjA1Yy0uMjktLjI3LS43OC0uNTktMS41Mi0uNTktMS4zMSAwLTIuMzggMS4wOS0yLjM4IDIuNDJzMS4wNyAyLjQyIDIuMzggMi40MmMxLjM3IDAgMS45Ni0uODcgMi4xMi0xLjQ2SDcuMDhWOS45MWgzLjk1bC4wMS4wN2MuMDQuMjEuMDUuNC4wNS42MSAwIDIuMzUtMS42MSA0LTMuOTIgNHptNi4wMy0xLjcxYy4zMy42Ljc0IDEuMTggMS4xOSAxLjdsLS41NC41My0uNjUtMi4yM3ptLjc3LS43NmgtLjk5bC0uMzEtMS4wNGgzLjk5cy0uMzQgMS4zMS0xLjU2IDIuNzRjLS41Mi0uNjItLjg5LTEuMjMtMS4xMy0xLjd6TTIxIDIwYzAgLjU1LS40NSAxLTEgMWgtN2wyLTItLjgxLTIuNzcuOTItLjkyTDE3Ljc5IDE4bC43My0uNzMtMi43MS0yLjY4Yy45LTEuMDMgMS42LTIuMjUgMS45Mi0zLjUxSDE5di0xLjA0aC0zLjY0VjloLTEuMDR2MS4wNGgtMS45NkwxMS4xOCA2SDIwYy41NSAwIDEgLjQ1IDEgMXYxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJnYXZlbCI+PHBhdGggZD0iTTEgMjFoMTJ2Mkgxek01LjI0NSA4LjA3bDIuODMtMi44MjcgMTQuMTQgMTQuMTQyLTIuODI4IDIuODI4ek0xMi4zMTcgMWw1LjY1NyA1LjY1Ni0yLjgzIDIuODMtNS42NTQtNS42NnpNMy44MjUgOS40ODVsNS42NTcgNS42NTctMi44MjggMi44MjgtNS42NTctNS42NTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2VzdHVyZSI+PHBhdGggZD0iTTQuNTkgNi44OWMuNy0uNzEgMS40LTEuMzUgMS43MS0xLjIyLjUuMiAwIDEuMDMtLjMgMS41Mi0uMjUuNDItMi44NiAzLjg5LTIuODYgNi4zMSAwIDEuMjguNDggMi4zNCAxLjM0IDIuOTguNzUuNTYgMS43NC43MyAyLjY0LjQ2IDEuMDctLjMxIDEuOTUtMS40IDMuMDYtMi43NyAxLjIxLTEuNDkgMi44My0zLjQ0IDQuMDgtMy40NCAxLjYzIDAgMS42NSAxLjAxIDEuNzYgMS43OS0zLjc4LjY0LTUuMzggMy42Ny01LjM4IDUuMzcgMCAxLjcgMS40NCAzLjA5IDMuMjEgMy4wOSAxLjYzIDAgNC4yOS0xLjMzIDQuNjktNi4xSDIxdi0yLjVoLTIuNDdjLS4xNS0xLjY1LTEuMDktNC4yLTQuMDMtNC4yLTIuMjUgMC00LjE4IDEuOTEtNC45NCAyLjg0LS41OC43My0yLjA2IDIuNDgtMi4yOSAyLjcyLS4yNS4zLS42OC44NC0xLjExLjg0LS40NSAwLS43Mi0uODMtLjM2LTEuOTIuMzUtMS4wOSAxLjQtMi44NiAxLjg1LTMuNTIuNzgtMS4xNCAxLjMtMS45MiAxLjMtMy4yOEM4Ljk1IDMuNjkgNy4zMSAzIDYuNDQgMyA1LjEyIDMgMy45NyA0IDMuNzIgNC4yNWMtLjM2LjM2LS42Ni42Ni0uODguOTNsMS43NSAxLjcxem05LjI5IDExLjY2Yy0uMzEgMC0uNzQtLjI2LS43NC0uNzIgMC0uNi43My0yLjIgMi44Ny0yLjc2LS4zIDIuNjktMS40MyAzLjQ4LTIuMTMgMy40OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJnZXQtYXBwIj48cGF0aCBkPSJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdpZiI+PHBhdGggZD0iTTExLjUgOUgxM3Y2aC0xLjV6TTkgOUg2Yy0uNiAwLTEgLjUtMSAxdjRjMCAuNS40IDEgMSAxaDNjLjYgMCAxLS41IDEtMXYtMkg4LjV2MS41aC0ydi0zSDEwVjEwYzAtLjUtLjQtMS0xLTF6bTEwIDEuNVY5aC00LjV2NkgxNnYtMmgydi0xLjVoLTJ2LTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JhZGUiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJncm91cC13b3JrIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnpNOCAxNy41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXpNOS41IDhjMC0xLjM4IDEuMTItMi41IDIuNS0yLjVzMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41UzkuNSA5LjM4IDkuNSA4em02LjUgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZWxwIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxN2gtMnYtMmgydjJ6bTIuMDctNy43NWwtLjkuOTJDMTMuNDUgMTIuOSAxMyAxMy41IDEzIDE1aC0ydi0uNWMwLTEuMS40NS0yLjEgMS4xNy0yLjgzbDEuMjQtMS4yNmMuMzctLjM2LjU5LS44Ni41OS0xLjQxIDAtMS4xLS45LTItMi0ycy0yIC45LTIgMkg4YzAtMi4yMSAxLjc5LTQgNC00czQgMS43OSA0IDRjMCAuODgtLjM2IDEuNjgtLjkzIDIuMjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGVscC1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMThoMnYtMmgtMnYyem0xLTE2QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMC0xNGMtMi4yMSAwLTQgMS43OS00IDRoMmMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgMi0zIDEuNzUtMyA1aDJjMC0yLjI1IDMtMi41IDMtNSAwLTIuMjEtMS43OS00LTQtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoaWdobGlnaHQtb2ZmIj48cGF0aCBkPSJNMTQuNTkgOEwxMiAxMC41OSA5LjQxIDggOCA5LjQxIDEwLjU5IDEyIDggMTQuNTkgOS40MSAxNiAxMiAxMy40MSAxNC41OSAxNiAxNiAxNC41OSAxMy40MSAxMiAxNiA5LjQxIDE0LjU5IDh6TTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhpc3RvcnkiPjxwYXRoIGQ9Ik0xMyAzYy00Ljk3IDAtOSA0LjAzLTkgOUgxbDMuODkgMy44OS4wNy4xNEw5IDEySDZjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjkzIDAtMy42OC0uNzktNC45NC0yLjA2bC0xLjQyIDEuNDJDOC4yNyAxOS45OSAxMC41MSAyMSAxMyAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptLTEgNXY1bDQuMjggMi41NC43Mi0xLjIxLTMuNS0yLjA4VjhIMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG9tZSI+PHBhdGggZD0iTTEwIDIwdi02aDR2Nmg1di04aDNMMTIgMyAyIDEyaDN2OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJob3VyZ2xhc3MtZW1wdHkiPjxwYXRoIGQ9Ik02IDJ2NmguMDFMNiA4LjAxIDEwIDEybC00IDQgLjAxLjAxSDZWMjJoMTJ2LTUuOTloLS4wMUwxOCAxNmwtNC00IDQtMy45OS0uMDEtLjAxSDE4VjJINnptMTAgMTQuNVYyMEg4di0zLjVsNC00IDQgNHptLTQtNWwtNC00VjRoOHYzLjVsLTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJob3VyZ2xhc3MtZnVsbCI+PHBhdGggZD0iTTYgMnY2aC4wMUw2IDguMDEgMTAgMTJsLTQgNCAuMDEuMDFINlYyMmgxMnYtNS45OWgtLjAxTDE4IDE2bC00LTQgNC0zLjk5LS4wMS0uMDFIMThWMkg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imh0dHAiPjxwYXRoIGQ9Ik00LjUgMTFoLTJWOUgxdjZoMS41di0yLjVoMlYxNUg2VjlINC41djJ6bTIuNS0uNWgxLjVWMTVIMTB2LTQuNWgxLjVWOUg3djEuNXptNS41IDBIMTRWMTVoMS41di00LjVIMTdWOWgtNC41djEuNXptOS0xLjVIMTh2NmgxLjV2LTJoMmMuOCAwIDEuNS0uNyAxLjUtMS41di0xYzAtLjgtLjctMS41LTEuNS0xLjV6bTAgMi41aC0ydi0xaDJ2MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJodHRwcyI+PHBhdGggZD0iTTE4IDhoLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptLTYgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6bTMuMS05SDguOVY2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW1wb3J0YW50LWRldmljZXMiPjxwYXRoIGQ9Ik0yMyAxMS4wMUwxOCAxMWMtLjU1IDAtMSAuNDUtMSAxdjljMCAuNTUuNDUgMSAxIDFoNWMuNTUgMCAxLS40NSAxLTF2LTljMC0uNTUtLjQ1LS45OS0xLS45OXpNMjMgMjBoLTV2LTdoNXY3ek0yMCAySDJDLjg5IDIgMCAyLjg5IDAgNHYxMmMwIDEuMS44OSAyIDIgMmg3djJIN3YyaDh2LTJoLTJ2LTJoMnYtMkgyVjRoMTh2NWgyVjRjMC0xLjExLS45LTItMi0yem0tOC4wMyA3TDExIDZsLS45NyAzSDdsMi40NyAxLjc2LS45NCAyLjkxIDIuNDctMS44IDIuNDcgMS44LS45NC0yLjkxTDE1IDloLTMuMDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5ib3giPjxwYXRoIGQ9Ik0xOSAzSDQuOTljLTEuMTEgMC0xLjk4Ljg5LTEuOTggMkwzIDE5YzAgMS4xLjg4IDIgMS45OSAySDE5YzEuMSAwIDItLjkgMi0yVjVjMC0xLjExLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJpbmRldGVybWluYXRlLWNoZWNrLWJveCI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMEg3di0yaDEwdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5mbyI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTZoMnY2em0wLThoLTJWN2gydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5mby1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMTdoMnYtNmgtMnY2em0xLTE1QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHpNMTEgOWgyVjdoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpbnB1dCI+PHBhdGggZD0iTTIxIDMuMDFIM2MtMS4xIDAtMiAuOS0yIDJWOWgyVjQuOTloMTh2MTQuMDNIM1YxNUgxdjQuMDFjMCAxLjEuOSAxLjk4IDIgMS45OGgxOGMxLjEgMCAyLS44OCAyLTEuOTh2LTE0YzAtMS4xMS0uOS0yLTItMnpNMTEgMTZsNC00LTQtNHYzSDF2MmgxMHYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImludmVydC1jb2xvcnMiPjxwYXRoIGQ9Ik0xNy42NiA3LjkzTDEyIDIuMjcgNi4zNCA3LjkzYy0zLjEyIDMuMTItMy4xMiA4LjE5IDAgMTEuMzFDNy45IDIwLjggOS45NSAyMS41OCAxMiAyMS41OGMyLjA1IDAgNC4xLS43OCA1LjY2LTIuMzQgMy4xMi0zLjEyIDMuMTItOC4xOSAwLTExLjMxek0xMiAxOS41OWMtMS42IDAtMy4xMS0uNjItNC4yNC0xLjc2QzYuNjIgMTYuNjkgNiAxNS4xOSA2IDEzLjU5cy42Mi0zLjExIDEuNzYtNC4yNEwxMiA1LjF2MTQuNDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGFiZWwiPjxwYXRoIGQ9Ik0xNy42MyA1Ljg0QzE3LjI3IDUuMzMgMTYuNjcgNSAxNiA1TDUgNS4wMUMzLjkgNS4wMSAzIDUuOSAzIDd2MTBjMCAxLjEuOSAxLjk5IDIgMS45OUwxNiAxOWMuNjcgMCAxLjI3LS4zMyAxLjYzLS44NEwyMiAxMmwtNC4zNy02LjE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxhYmVsLW91dGxpbmUiPjxwYXRoIGQ9Ik0xNy42MyA1Ljg0QzE3LjI3IDUuMzMgMTYuNjcgNSAxNiA1TDUgNS4wMUMzLjkgNS4wMSAzIDUuOSAzIDd2MTBjMCAxLjEuOSAxLjk5IDIgMS45OUwxNiAxOWMuNjcgMCAxLjI3LS4zMyAxLjYzLS44NEwyMiAxMmwtNC4zNy02LjE2ek0xNiAxN0g1VjdoMTFsMy41NSA1TDE2IDE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxhbmd1YWdlIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNi45MyA2aC0yLjk1Yy0uMzItMS4yNS0uNzgtMi40NS0xLjM4LTMuNTYgMS44NC42MyAzLjM3IDEuOTEgNC4zMyAzLjU2ek0xMiA0LjA0Yy44MyAxLjIgMS40OCAyLjUzIDEuOTEgMy45NmgtMy44MmMuNDMtMS40MyAxLjA4LTIuNzYgMS45MS0zLjk2ek00LjI2IDE0QzQuMSAxMy4zNiA0IDEyLjY5IDQgMTJzLjEtMS4zNi4yNi0yaDMuMzhjLS4wOC42Ni0uMTQgMS4zMi0uMTQgMiAwIC42OC4wNiAxLjM0LjE0IDJINC4yNnptLjgyIDJoMi45NWMuMzIgMS4yNS43OCAyLjQ1IDEuMzggMy41Ni0xLjg0LS42My0zLjM3LTEuOS00LjMzLTMuNTZ6bTIuOTUtOEg1LjA4Yy45Ni0xLjY2IDIuNDktMi45MyA0LjMzLTMuNTZDOC44MSA1LjU1IDguMzUgNi43NSA4LjAzIDh6TTEyIDE5Ljk2Yy0uODMtMS4yLTEuNDgtMi41My0xLjkxLTMuOTZoMy44MmMtLjQzIDEuNDMtMS4wOCAyLjc2LTEuOTEgMy45NnpNMTQuMzQgMTRIOS42NmMtLjA5LS42Ni0uMTYtMS4zMi0uMTYtMiAwLS42OC4wNy0xLjM1LjE2LTJoNC42OGMuMDkuNjUuMTYgMS4zMi4xNiAyIDAgLjY4LS4wNyAxLjM0LS4xNiAyem0uMjUgNS41NmMuNi0xLjExIDEuMDYtMi4zMSAxLjM4LTMuNTZoMi45NWMtLjk2IDEuNjUtMi40OSAyLjkzLTQuMzMgMy41NnpNMTYuMzYgMTRjLjA4LS42Ni4xNC0xLjMyLjE0LTIgMC0uNjgtLjA2LTEuMzQtLjE0LTJoMy4zOGMuMTYuNjQuMjYgMS4zMS4yNiAycy0uMSAxLjM2LS4yNiAyaC0zLjM4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxhc3QtcGFnZSI+PHBhdGggZD0iTTUuNTkgNy40MUwxMC4xOCAxMmwtNC41OSA0LjU5TDcgMThsNi02LTYtNnpNMTYgNmgydjEyaC0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxhdW5jaCI+PHBhdGggZD0iTTE5IDE5SDVWNWg3VjNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi03aC0ydjd6TTE0IDN2MmgzLjU5bC05LjgzIDkuODMgMS40MSAxLjQxTDE5IDYuNDFWMTBoMlYzaC03eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpZ2h0YnVsYi1vdXRsaW5lIj48cGF0aCBkPSJNOSAyMWMwIC41NS40NSAxIDEgMWg0Yy41NSAwIDEtLjQ1IDEtMXYtMUg5djF6bTMtMTlDOC4xNCAyIDUgNS4xNCA1IDljMCAyLjM4IDEuMTkgNC40NyAzIDUuNzRWMTdjMCAuNTUuNDUgMSAxIDFoNmMuNTUgMCAxLS40NSAxLTF2LTIuMjZjMS44MS0xLjI3IDMtMy4zNiAzLTUuNzQgMC0zLjg2LTMuMTQtNy03LTd6bTIuODUgMTEuMWwtLjg1LjZWMTZoLTR2LTIuM2wtLjg1LS42QzcuOCAxMi4xNiA3IDEwLjYzIDcgOWMwLTIuNzYgMi4yNC01IDUtNXM1IDIuMjQgNSA1YzAgMS42My0uOCAzLjE2LTIuMTUgNC4xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpbmUtc3R5bGUiPjxwYXRoIGQ9Ik0zIDE2aDV2LTJIM3Yyem02LjUgMGg1di0yaC01djJ6bTYuNSAwaDV2LTJoLTV2MnpNMyAyMGgydi0ySDN2MnptNCAwaDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyek0zIDEyaDh2LTJIM3Yyem0xMCAwaDh2LTJoLTh2MnpNMyA0djRoMThWNEgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpbmUtd2VpZ2h0Ij48cGF0aCBkPSJNMyAxN2gxOHYtMkgzdjJ6bTAgM2gxOHYtMUgzdjF6bTAtN2gxOHYtM0gzdjN6bTAtOXY0aDE4VjRIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5rIj48cGF0aCBkPSJNMy45IDEyYzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xaDRWN0g3Yy0yLjc2IDAtNSAyLjI0LTUgNXMyLjI0IDUgNSA1aDR2LTEuOUg3Yy0xLjcxIDAtMy4xLTEuMzktMy4xLTMuMXpNOCAxM2g4di0ySDh2MnptOS02aC00djEuOWg0YzEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xcy0xLjM5IDMuMS0zLjEgMy4xaC00VjE3aDRjMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGlzdCI+PHBhdGggZD0iTTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMC04aDJWN0gzdjJ6bTQgNGgxNHYtMkg3djJ6bTAgNGgxNHYtMkg3djJ6TTcgN3YyaDE0VjdIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsb2NrIj48cGF0aCBkPSJNMTggOGgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZ2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yem0tNiA5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnptMy4xLTlIOC45VjZjMC0xLjcxIDEuMzktMy4xIDMuMS0zLjEgMS43MSAwIDMuMSAxLjM5IDMuMSAzLjF2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb2NrLW9wZW4iPjxwYXRoIGQ9Ik0xMiAxN2MxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTYtOWgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZoMS45YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptMCAxMkg2VjEwaDEydjEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxvY2stb3V0bGluZSI+PHBhdGggZD0iTTEyIDE3YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptNi05aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6TTguOSA2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xczMuMSAxLjM5IDMuMSAzLjF2Mkg4LjlWNnpNMTggMjBINlYxMGgxMnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb3ctcHJpb3JpdHkiPjxwYXRoIGQ9Ik0xNCA1aDh2MmgtOHptMCA1LjVoOHYyaC04em0wIDUuNWg4djJoLTh6TTIgMTEuNUMyIDE1LjA4IDQuOTIgMTggOC41IDE4SDl2MmwzLTMtMy0zdjJoLS41QzYuMDIgMTYgNCAxMy45OCA0IDExLjVTNi4wMiA3IDguNSA3SDEyVjVIOC41QzQuOTIgNSAyIDcuOTIgMiAxMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxveWFsdHkiPjxwYXRoIGQ9Ik0yMS40MSAxMS41OGwtOS05QzEyLjA1IDIuMjIgMTEuNTUgMiAxMSAySDRjLTEuMSAwLTIgLjktMiAydjdjMCAuNTUuMjIgMS4wNS41OSAxLjQybDkgOWMuMzYuMzYuODYuNTggMS40MS41OC41NSAwIDEuMDUtLjIyIDEuNDEtLjU5bDctN2MuMzctLjM2LjU5LS44Ni41OS0xLjQxIDAtLjU1LS4yMy0xLjA2LS41OS0xLjQyek01LjUgN0M0LjY3IDcgNCA2LjMzIDQgNS41UzQuNjcgNCA1LjUgNCA3IDQuNjcgNyA1LjUgNi4zMyA3IDUuNSA3em0xMS43NyA4LjI3TDEzIDE5LjU0bC00LjI3LTQuMjdDOC4yOCAxNC44MSA4IDE0LjE5IDggMTMuNWMwLTEuMzggMS4xMi0yLjUgMi41LTIuNS42OSAwIDEuMzIuMjggMS43Ny43NGwuNzMuNzIuNzMtLjczYy40NS0uNDUgMS4wOC0uNzMgMS43Ny0uNzMgMS4zOCAwIDIuNSAxLjEyIDIuNSAyLjUgMCAuNjktLjI4IDEuMzItLjczIDEuNzd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibWFpbCI+PHBhdGggZD0iTTIwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCA0bC04IDUtOC01VjZsOCA1IDgtNXYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1hcmt1bnJlYWQiPjxwYXRoIGQ9Ik0yMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgNGwtOCA1LTgtNVY2bDggNSA4LTV2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtYXJrdW5yZWFkLW1haWxib3giPjxwYXRoIGQ9Ik0yMCA2SDEwdjZIOFY0aDZWMEg2djZINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1lbnUiPjxwYXRoIGQ9Ik0zIDE4aDE4di0ySDN2MnptMC01aDE4di0ySDN2MnptMC03djJoMThWNkgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1vcmUtaG9yaXoiPjxwYXRoIGQ9Ik02IDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMTIgMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bS02IDBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1vcmUtdmVydCI+PHBhdGggZD0iTTEyIDhjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0wIDJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1vdG9yY3ljbGUiPjxwYXRoIGQ9Ik0xOS40NCA5LjAzTDE1LjQxIDVIMTF2MmgzLjU5bDIgMkg1Yy0yLjggMC01IDIuMi01IDVzMi4yIDUgNSA1YzIuNDYgMCA0LjQ1LTEuNjkgNC45LTRoMS42NWwyLjc3LTIuNzdjLS4yMS41NC0uMzIgMS4xNC0uMzIgMS43NyAwIDIuOCAyLjIgNSA1IDVzNS0yLjIgNS01YzAtMi42NS0xLjk3LTQuNzctNC41Ni00Ljk3ek03LjgyIDE1QzcuNCAxNi4xNSA2LjI4IDE3IDUgMTdjLTEuNjMgMC0zLTEuMzctMy0zczEuMzctMyAzLTNjMS4yOCAwIDIuNC44NSAyLjgyIDJINXYyaDIuODJ6TTE5IDE3Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZlLXRvLWluYm94Ij48cGF0aCBkPSJNMTkgM0g0Ljk5Yy0xLjExIDAtMS45OC45LTEuOTggMkwzIDE5YzAgMS4xLjg4IDIgMS45OSAySDE5YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTJoLTRjMCAxLjY2LTEuMzUgMy0zIDNzLTMtMS4zNC0zLTNINC45OVY1SDE5djEwem0tMy01aC0yVjdoLTR2M0g4bDQgNCA0LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmV4dC13ZWVrIj48cGF0aCBkPSJNMjAgN2gtNFY1YzAtLjU1LS4yMi0xLjA1LS41OS0xLjQxQzE1LjA1IDMuMjIgMTQuNTUgMyAxNCAzaC00Yy0xLjEgMC0yIC45LTIgMnYySDRjLTEuMSAwLTIgLjktMiAydjExYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOWMwLTEuMS0uOS0yLTItMnpNMTAgNWg0djJoLTRWNXptMSAxMy41bC0xLTEgMy0zLTMtMyAxLTEgNCA0LTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJub3RlLWFkZCI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptMiAxNGgtM3YzaC0ydi0zSDh2LTJoM3YtM2gydjNoM3Yyem0tMy03VjMuNUwxOC41IDlIMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib2ZmbGluZS1waW4iPjxwYXRoIGQ9Ik0xMiAyQzYuNSAyIDIgNi41IDIgMTJzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNy41IDIgMTIgMnptNSAxNkg3di0yaDEwdjJ6bS02LjctNEw3IDEwLjdsMS40LTEuNCAxLjkgMS45IDUuMy01LjNMMTcgNy4zIDEwLjMgMTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3BhY2l0eSI+PHBhdGggZD0iTTE3LjY2IDhMMTIgMi4zNSA2LjM0IDhDNC43OCA5LjU2IDQgMTEuNjQgNCAxMy42NHMuNzggNC4xMSAyLjM0IDUuNjcgMy42MSAyLjM1IDUuNjYgMi4zNSA0LjEtLjc5IDUuNjYtMi4zNVMyMCAxNS42NCAyMCAxMy42NCAxOS4yMiA5LjU2IDE3LjY2IDh6TTYgMTRjLjAxLTIgLjYyLTMuMjcgMS43Ni00LjRMMTIgNS4yN2w0LjI0IDQuMzhDMTcuMzggMTAuNzcgMTcuOTkgMTIgMTggMTRINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJvcGVuLWluLWJyb3dzZXIiPjxwYXRoIGQ9Ik0xOSA0SDVjLTEuMTEgMC0yIC45LTIgMnYxMmMwIDEuMS44OSAyIDIgMmg0di0ySDVWOGgxNHYxMGgtNHYyaDRjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uODktMi0yLTJ6bS03IDZsLTQgNGgzdjZoMnYtNmgzbC00LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi1pbi1uZXciPjxwYXRoIGQ9Ik0xOSAxOUg1VjVoN1YzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJvcGVuLXdpdGgiPjxwYXRoIGQ9Ik0xMCA5aDRWNmgzbC01LTUtNSA1aDN2M3ptLTEgMUg2VjdsLTUgNSA1IDV2LTNoM3YtNHptMTQgMmwtNS01djNoLTN2NGgzdjNsNS01em0tOSAzaC00djNIN2w1IDUgNS01aC0zdi0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhZ2V2aWV3Ij48cGF0aCBkPSJNMTEuNSA5QzEwLjEyIDkgOSAxMC4xMiA5IDExLjVzMS4xMiAyLjUgMi41IDIuNSAyLjUtMS4xMiAyLjUtMi41UzEyLjg4IDkgMTEuNSA5ek0yMCA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptLTMuMjEgMTQuMjFsLTIuOTEtMi45MWMtLjY5LjQ0LTEuNTEuNy0yLjM5LjdDOS4wMSAxNiA3IDEzLjk5IDcgMTEuNVM5LjAxIDcgMTEuNSA3IDE2IDkuMDEgMTYgMTEuNWMwIC44OC0uMjYgMS42OS0uNyAyLjM5bDIuOTEgMi45LTEuNDIgMS40MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW4tdG9vbCI+PHBhdGggZD0iTTIzIDUuNVYyMGMwIDIuMi0xLjggNC00IDRoLTcuM2MtMS4wOCAwLTIuMS0uNDMtMi44NS0xLjE5TDEgMTQuODNzMS4yNi0xLjIzIDEuMy0xLjI1Yy4yMi0uMTkuNDktLjI5Ljc5LS4yOS4yMiAwIC40Mi4wNi42LjE2LjA0LjAxIDQuMzEgMi40NiA0LjMxIDIuNDZWNGMwLS44My42Ny0xLjUgMS41LTEuNVMxMSAzLjE3IDExIDR2N2gxVjEuNWMwLS44My42Ny0xLjUgMS41LTEuNVMxNSAuNjcgMTUgMS41VjExaDFWMi41YzAtLjgzLjY3LTEuNSAxLjUtMS41czEuNS42NyAxLjUgMS41VjExaDFWNS41YzAtLjgzLjY3LTEuNSAxLjUtMS41czEuNS42NyAxLjUgMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBheW1lbnQiPjxwYXRoIGQ9Ik0yMCA0SDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjZjMC0xLjExLS44OS0yLTItMnptMCAxNEg0di02aDE2djZ6bTAtMTBINFY2aDE2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1jYW1lcmEtbWljIj48cGF0aCBkPSJNMjAgNWgtMy4xN0wxNSAzSDlMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoN3YtMi4wOWMtMi44My0uNDgtNS0yLjk0LTUtNS45MWgyYzAgMi4yMSAxLjc5IDQgNCA0czQtMS43OSA0LTRoMmMwIDIuOTctMi4xNyA1LjQzLTUgNS45MVYyMWg3YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bS02IDhjMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yVjljMC0xLjEuOS0yIDItMnMyIC45IDIgMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tY29udGFjdC1jYWxlbmRhciI+PHBhdGggZD0iTTE5IDNoLTFWMWgtMnYySDhWMUg2djJINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDNjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zem02IDEySDZ2LTFjMC0yIDQtMy4xIDYtMy4xczYgMS4xIDYgMy4xdjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1kYXRhLXNldHRpbmciPjxwYXRoIGQ9Ik0xOC45OSAxMS41Yy4zNCAwIC42Ny4wMyAxIC4wN0wyMCAwIDAgMjBoMTEuNTZjLS4wNC0uMzMtLjA3LS42Ni0uMDctMSAwLTQuMTQgMy4zNi03LjUgNy41LTcuNXptMy43MSA3Ljk5Yy4wMi0uMTYuMDQtLjMyLjA0LS40OSAwLS4xNy0uMDEtLjMzLS4wNC0uNDlsMS4wNi0uODNjLjA5LS4wOC4xMi0uMjEuMDYtLjMybC0xLTEuNzNjLS4wNi0uMTEtLjE5LS4xNS0uMzEtLjExbC0xLjI0LjVjLS4yNi0uMi0uNTQtLjM3LS44NS0uNDlsLS4xOS0xLjMyYy0uMDEtLjEyLS4xMi0uMjEtLjI0LS4yMWgtMmMtLjEyIDAtLjIzLjA5LS4yNS4yMWwtLjE5IDEuMzJjLS4zLjEzLS41OS4yOS0uODUuNDlsLTEuMjQtLjVjLS4xMS0uMDQtLjI0IDAtLjMxLjExbC0xIDEuNzNjLS4wNi4xMS0uMDQuMjQuMDYuMzJsMS4wNi44M2MtLjAyLjE2LS4wMy4zMi0uMDMuNDkgMCAuMTcuMDEuMzMuMDMuNDlsLTEuMDYuODNjLS4wOS4wOC0uMTIuMjEtLjA2LjMybDEgMS43M2MuMDYuMTEuMTkuMTUuMzEuMTFsMS4yNC0uNWMuMjYuMi41NC4zNy44NS40OWwuMTkgMS4zMmMuMDIuMTIuMTIuMjEuMjUuMjFoMmMuMTIgMCAuMjMtLjA5LjI1LS4yMWwuMTktMS4zMmMuMy0uMTMuNTktLjI5Ljg0LS40OWwxLjI1LjVjLjExLjA0LjI0IDAgLjMxLS4xMWwxLTEuNzNjLjA2LS4xMS4wMy0uMjQtLjA2LS4zMmwtMS4wNy0uODN6bS0zLjcxIDEuMDFjLS44MyAwLTEuNS0uNjctMS41LTEuNXMuNjctMS41IDEuNS0xLjUgMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tZGV2aWNlLWluZm9ybWF0aW9uIj48cGF0aCBkPSJNMTMgN2gtMnYyaDJWN3ptMCA0aC0ydjZoMnYtNnptNC05Ljk5TDcgMWMtMS4xIDAtMiAuOS0yIDJ2MThjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNyAxOUg3VjVoMTB2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1pZGVudGl0eSI+PHBhdGggZD0iTTEyIDUuOWMxLjE2IDAgMi4xLjk0IDIuMSAyLjFzLS45NCAyLjEtMi4xIDIuMVM5LjkgOS4xNiA5LjkgOHMuOTQtMi4xIDIuMS0yLjFtMCA5YzIuOTcgMCA2LjEgMS40NiA2LjEgMi4xdjEuMUg1LjlWMTdjMC0uNjQgMy4xMy0yLjEgNi4xLTIuMU0xMiA0QzkuNzkgNCA4IDUuNzkgOCA4czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0wIDljLTIuNjcgMC04IDEuMzQtOCA0djNoMTZ2LTNjMC0yLjY2LTUuMzMtNC04LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1tZWRpYSI+PHBhdGggZD0iTTIgNkgwdjVoLjAxTDAgMjBjMCAxLjEuOSAyIDIgMmgxOHYtMkgyVjZ6bTIwLTJoLThsLTItMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yek03IDE1bDQuNS02IDMuNSA0LjUxIDIuNS0zLjAxTDIxIDE1SDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1waG9uZS1tc2ciPjxwYXRoIGQ9Ik0yMCAxNS41Yy0xLjI1IDAtMi40NS0uMi0zLjU3LS41Ny0uMzUtLjExLS43NC0uMDMtMS4wMi4yNGwtMi4yIDIuMmMtMi44My0xLjQ0LTUuMTUtMy43NS02LjU5LTYuNThsMi4yLTIuMjFjLjI4LS4yNy4zNi0uNjYuMjUtMS4wMUM4LjcgNi40NSA4LjUgNS4yNSA4LjUgNGMwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxIDAgOS4zOSA3LjYxIDE3IDE3IDE3IC41NSAwIDEtLjQ1IDEtMXYtMy41YzAtLjU1LS40NS0xLTEtMXpNMTIgM3YxMGwzLTNoNlYzaC05eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tc2Nhbi13aWZpIj48cGF0aCBkPSJNMTIgM0M2Ljk1IDMgMy4xNSA0Ljg1IDAgNy4yM0wxMiAyMiAyNCA3LjI1QzIwLjg1IDQuODcgMTcuMDUgMyAxMiAzem0xIDEzaC0ydi02aDJ2NnptLTItOFY2aDJ2MmgtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXRzIj48Y2lyY2xlIGN4PSI0LjUiIGN5PSI5LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iOSIgY3k9IjUuNSIgcj0iMi41Ij48L2NpcmNsZT48Y2lyY2xlIGN4PSIxNSIgY3k9IjUuNSIgcj0iMi41Ij48L2NpcmNsZT48Y2lyY2xlIGN4PSIxOS41IiBjeT0iOS41IiByPSIyLjUiPjwvY2lyY2xlPjxwYXRoIGQ9Ik0xNy4zNCAxNC44NmMtLjg3LTEuMDItMS42LTEuODktMi40OC0yLjkxLS40Ni0uNTQtMS4wNS0xLjA4LTEuNzUtMS4zMi0uMTEtLjA0LS4yMi0uMDctLjMzLS4wOS0uMjUtLjA0LS41Mi0uMDQtLjc4LS4wNHMtLjUzIDAtLjc5LjA1Yy0uMTEuMDItLjIyLjA1LS4zMy4wOS0uNy4yNC0xLjI4Ljc4LTEuNzUgMS4zMi0uODcgMS4wMi0xLjYgMS44OS0yLjQ4IDIuOTEtMS4zMSAxLjMxLTIuOTIgMi43Ni0yLjYyIDQuNzkuMjkgMS4wMiAxLjAyIDIuMDMgMi4zMyAyLjMyLjczLjE1IDMuMDYtLjQ0IDUuNTQtLjQ0aC4xOGMyLjQ4IDAgNC44MS41OCA1LjU0LjQ0IDEuMzEtLjI5IDIuMDQtMS4zMSAyLjMzLTIuMzIuMzEtMi4wNC0xLjMtMy40OS0yLjYxLTQuOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaWN0dXJlLWluLXBpY3R1cmUiPjxwYXRoIGQ9Ik0xOSA3aC04djZoOFY3em0yLTRIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAxLjk4IDIgMS45OGgxOGMxLjEgMCAyLS44OCAyLTEuOThWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOThoMTh2MTQuMDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1pbi1waWN0dXJlLWFsdCI+PHBhdGggZD0iTTE5IDExaC04djZoOHYtNnptNCA4VjQuOThDMjMgMy44OCAyMi4xIDMgMjEgM0gzYy0xLjEgMC0yIC44OC0yIDEuOThWMTljMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnptLTIgLjAySDNWNC45N2gxOHYxNC4wNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwbGF5LWZvci13b3JrIj48cGF0aCBkPSJNMTEgNXY1LjU5SDcuNWw0LjUgNC41IDQuNS00LjVIMTNWNWgtMnptLTUgOWMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02aC0yYzAgMi4yMS0xLjc5IDQtNCA0cy00LTEuNzktNC00SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icG9seW1lciI+PHBhdGggZD0iTTE5IDRoLTRMNy4xMSAxNi42MyA0LjUgMTIgOSA0SDVMLjUgMTIgNSAyMGg0bDcuODktMTIuNjNMMTkuNSAxMiAxNSAyMGg0bDQuNS04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBvd2VyLXNldHRpbmdzLW5ldyI+PHBhdGggZD0iTTEzIDNoLTJ2MTBoMlYzem00LjgzIDIuMTdsLTEuNDIgMS40MkMxNy45OSA3Ljg2IDE5IDkuODEgMTkgMTJjMCAzLjg3LTMuMTMgNy03IDdzLTctMy4xMy03LTdjMC0yLjE5IDEuMDEtNC4xNCAyLjU4LTUuNDJMNi4xNyA1LjE3QzQuMjMgNi44MiAzIDkuMjYgMyAxMmMwIDQuOTcgNC4wMyA5IDkgOXM5LTQuMDMgOS05YzAtMi43NC0xLjIzLTUuMTgtMy4xNy02LjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InByZWduYW50LXdvbWFuIj48cGF0aCBkPSJNOSA0YzAtMS4xMS44OS0yIDItMnMyIC44OSAyIDItLjg5IDItMiAyLTItLjg5LTItMnptNyA5Yy0uMDEtMS4zNC0uODMtMi41MS0yLTMgMC0xLjY2LTEuMzQtMy0zLTNzLTMgMS4zNC0zIDN2N2gydjVoM3YtNWgzdi00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InByaW50Ij48cGF0aCBkPSJNMTkgOEg1Yy0xLjY2IDAtMyAxLjM0LTMgM3Y2aDR2NGgxMnYtNGg0di02YzAtMS42Ni0xLjM0LTMtMy0zem0tMyAxMUg4di01aDh2NXptMy03Yy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bS0xLTlINnY0aDEyVjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icXVlcnktYnVpbGRlciI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptLjUtMTNIMTF2Nmw1LjI1IDMuMTUuNzUtMS4yMy00LjUtMi42N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJxdWVzdGlvbi1hbnN3ZXIiPjxwYXRoIGQ9Ik0yMSA2aC0ydjlINnYyYzAgLjU1LjQ1IDEgMSAxaDExbDQgNFY3YzAtLjU1LS40NS0xLTEtMXptLTQgNlYzYzAtLjU1LS40NS0xLTEtMUgzYy0uNTUgMC0xIC40NS0xIDF2MTRsNC00aDEwYy41NSAwIDEtLjQ1IDEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyYWRpby1idXR0b24tY2hlY2tlZCI+PHBhdGggZD0iTTEyIDdjLTIuNzYgMC01IDIuMjQtNSA1czIuMjQgNSA1IDUgNS0yLjI0IDUtNS0yLjI0LTUtNS01em0wLTVDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJhZGlvLWJ1dHRvbi11bmNoZWNrZWQiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWNlaXB0Ij48cGF0aCBkPSJNMTggMTdINnYtMmgxMnYyem0wLTRINnYtMmgxMnYyem0wLTRINlY3aDEydjJ6TTMgMjJsMS41LTEuNUw2IDIybDEuNS0xLjVMOSAyMmwxLjUtMS41TDEyIDIybDEuNS0xLjVMMTUgMjJsMS41LTEuNUwxOCAyMmwxLjUtMS41TDIxIDIyVjJsLTEuNSAxLjVMMTggMmwtMS41IDEuNUwxNSAybC0xLjUgMS41TDEyIDJsLTEuNSAxLjVMOSAyIDcuNSAzLjUgNiAyIDQuNSAzLjUgMyAydjIweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlY29yZC12b2ljZS1vdmVyIj48Y2lyY2xlIGN4PSI5IiBjeT0iOSIgcj0iNCI+PC9jaXJjbGU+PHBhdGggZD0iTTkgMTVjLTIuNjcgMC04IDEuMzQtOCA0djJoMTZ2LTJjMC0yLjY2LTUuMzMtNC04LTR6bTcuNzYtOS42NGwtMS42OCAxLjY5Yy44NCAxLjE4Ljg0IDIuNzEgMCAzLjg5bDEuNjggMS42OWMyLjAyLTIuMDIgMi4wMi01LjA3IDAtNy4yN3pNMjAuMDcgMmwtMS42MyAxLjYzYzIuNzcgMy4wMiAyLjc3IDcuNTYgMCAxMC43NEwyMC4wNyAxNmMzLjktMy44OSAzLjkxLTkuOTUgMC0xNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWRlZW0iPjxwYXRoIGQ9Ik0yMCA2aC0yLjE4Yy4xMS0uMzEuMTgtLjY1LjE4LTEgMC0xLjY2LTEuMzQtMy0zLTMtMS4wNSAwLTEuOTYuNTQtMi41IDEuMzVsLS41LjY3LS41LS42OEMxMC45NiAyLjU0IDEwLjA1IDIgOSAyIDcuMzQgMiA2IDMuMzQgNiA1YzAgLjM1LjA3LjY5LjE4IDFINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNS0yYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6TTkgNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoNS4wOEw3IDEwLjgzIDguNjIgMTIgMTEgOC43NmwxLTEuMzYgMSAxLjM2TDE1LjM4IDEyIDE3IDEwLjgzIDE0LjkyIDhIMjB2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWRvIj48cGF0aCBkPSJNMTguNCAxMC42QzE2LjU1IDguOTkgMTQuMTUgOCAxMS41IDhjLTQuNjUgMC04LjU4IDMuMDMtOS45NiA3LjIyTDMuOSAxNmMxLjA1LTMuMTkgNC4wNS01LjUgNy42LTUuNSAxLjk1IDAgMy43My43MiA1LjEyIDEuODhMMTMgMTZoOVY3bC0zLjYgMy42eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlZnJlc2giPjxwYXRoIGQ9Ik0xNy42NSA2LjM1QzE2LjIgNC45IDE0LjIxIDQgMTIgNGMtNC40MiAwLTcuOTkgMy41OC03Ljk5IDhzMy41NyA4IDcuOTkgOGMzLjczIDAgNi44NC0yLjU1IDcuNzMtNmgtMi4wOGMtLjgyIDIuMzMtMy4wNCA0LTUuNjUgNC0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02YzEuNjYgMCAzLjE0LjY5IDQuMjIgMS43OEwxMyAxMWg3VjRsLTIuMzUgMi4zNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUiPjxwYXRoIGQ9Ik0xOSAxM0g1di0yaDE0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFIN3YtMmgxMHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZS1jaXJjbGUtb3V0bGluZSI+PHBhdGggZD0iTTcgMTF2MmgxMHYtMkg3em01LTlDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZS1zaG9wcGluZy1jYXJ0Ij48cGF0aCBkPSJNMjIuNzMgMjIuNzNMMi43NyAyLjc3IDIgMmwtLjczLS43M0wwIDIuNTRsNC4zOSA0LjM5IDIuMjEgNC42Ni0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoNy40NmwxLjM4IDEuMzhjLS41LjM2LS44My45NS0uODMgMS42MiAwIDEuMS44OSAyIDEuOTkgMiAuNjcgMCAxLjI2LS4zMyAxLjYyLS44NEwyMS40NiAyNGwxLjI3LTEuMjd6TTcuNDIgMTVjLS4xNCAwLS4yNS0uMTEtLjI1LS4yNWwuMDMtLjEyLjktMS42M2gyLjM2bDIgMkg3LjQyem04LjEzLTJjLjc1IDAgMS40MS0uNDEgMS43NS0xLjAzbDMuNTgtNi40OWMuMDgtLjE0LjEyLS4zMS4xMi0uNDggMC0uNTUtLjQ1LTEtMS0xSDYuNTRsOS4wMSA5ek03IDE4Yy0xLjEgMC0xLjk5LjktMS45OSAyUzUuOSAyMiA3IDIyczItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlb3JkZXIiPjxwYXRoIGQ9Ik0zIDE1aDE4di0ySDN2MnptMCA0aDE4di0ySDN2MnptMC04aDE4VjlIM3Yyem0wLTZ2MmgxOFY1SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVwbHkiPjxwYXRoIGQ9Ik0xMCA5VjVsLTcgNyA3IDd2LTQuMWM1IDAgOC41IDEuNiAxMSA1LjEtMS01LTQtMTAtMTEtMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVwbHktYWxsIj48cGF0aCBkPSJNNyA4VjVsLTcgNyA3IDd2LTNsLTQtNCA0LTR6bTYgMVY1bC03IDcgNyA3di00LjFjNSAwIDguNSAxLjYgMTEgNS4xLTEtNS00LTEwLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcG9ydCI+PHBhdGggZD0iTTE1LjczIDNIOC4yN0wzIDguMjd2Ny40Nkw4LjI3IDIxaDcuNDZMMjEgMTUuNzNWOC4yN0wxNS43MyAzek0xMiAxNy4zYy0uNzIgMC0xLjMtLjU4LTEuMy0xLjMgMC0uNzIuNTgtMS4zIDEuMy0xLjMuNzIgMCAxLjMuNTggMS4zIDEuMyAwIC43Mi0uNTggMS4zLTEuMyAxLjN6bTEtNC4zaC0yVjdoMnY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcG9ydC1wcm9ibGVtIj48cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlc3RvcmUiPjxwYXRoIGQ9Ik0xMyAzYy00Ljk3IDAtOSA0LjAzLTkgOUgxbDMuODkgMy44OS4wNy4xNEw5IDEySDZjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjkzIDAtMy42OC0uNzktNC45NC0yLjA2bC0xLjQyIDEuNDJDOC4yNyAxOS45OSAxMC41MSAyMSAxMyAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptLTEgNXY1bDQuMjggMi41NC43Mi0xLjIxLTMuNS0yLjA4VjhIMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVzdG9yZS1wYWdlIj48cGF0aCBkPSJNMTQgMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMi0uOSAyLTJWOGwtNi02em0tMiAxNmMtMi4wNSAwLTMuODEtMS4yNC00LjU4LTNoMS43MWMuNjMuOSAxLjY4IDEuNSAyLjg3IDEuNSAxLjkzIDAgMy41LTEuNTcgMy41LTMuNVMxMy45MyA5LjUgMTIgOS41Yy0xLjM1IDAtMi41Mi43OC0zLjEgMS45bDEuNiAxLjZoLTRWOWwxLjMgMS4zQzguNjkgOC45MiAxMC4yMyA4IDEyIDhjMi43NiAwIDUgMi4yNCA1IDVzLTIuMjQgNS01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icm9vbSI+PHBhdGggZD0iTTEyIDJDOC4xMyAyIDUgNS4xMyA1IDljMCA1LjI1IDcgMTMgNyAxM3M3LTcuNzUgNy0xM2MwLTMuODctMy4xMy03LTctN3ptMCA5LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvdW5kZWQtY29ybmVyIj48cGF0aCBkPSJNMTkgMTloMnYyaC0ydi0yem0wLTJoMnYtMmgtMnYyek0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTAtOGgyVjdIM3Yyem0wLTRoMlYzSDN2MnptNCAwaDJWM0g3djJ6bTggMTZoMnYtMmgtMnYyem0tNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnptLTggMGgydi0ySDd2MnptLTQgMGgydi0ySDN2MnpNMjEgOGMwLTIuNzYtMi4yNC01LTUtNWgtNXYyaDVjMS42NSAwIDMgMS4zNSAzIDN2NWgyVjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icm93aW5nIj48cGF0aCBkPSJNOC41IDE0LjVMNCAxOWwxLjUgMS41TDkgMTdoMmwtMi41LTIuNXpNMTUgMWMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTYgMjAuMDFMMTggMjRsLTIuOTktMy4wMVYxOS41bC03LjEtNy4wOWMtLjMxLjA1LS42MS4wNy0uOTEuMDd2LTIuMTZjMS42Ni4wMyAzLjYxLS44NyA0LjY3LTIuMDRsMS40LTEuNTVjLjE5LS4yMS40My0uMzguNjktLjUuMjktLjE0LjYyLS4yMy45Ni0uMjNoLjAzQzE1Ljk5IDYuMDEgMTcgNy4wMiAxNyA4LjI2djUuNzVjMCAuODQtLjM1IDEuNjEtLjkyIDIuMTZsLTMuNTgtMy41OHYtMi4yN2MtLjYzLjUyLTEuNDMgMS4wMi0yLjI5IDEuMzlMMTYuNSAxOEgxOGwzIDMuMDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2F2ZSI+PHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNjaGVkdWxlIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0uNS0xM0gxMXY2bDUuMjUgMy4xNS43NS0xLjIzLTQuNS0yLjY3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNlYXJjaCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2VsZWN0LWFsbCI+PHBhdGggZD0iTTMgNWgyVjNjLTEuMSAwLTIgLjktMiAyem0wIDhoMnYtMkgzdjJ6bTQgOGgydi0ySDd2MnpNMyA5aDJWN0gzdjJ6bTEwLTZoLTJ2MmgyVjN6bTYgMHYyaDJjMC0xLjEtLjktMi0yLTJ6TTUgMjF2LTJIM2MwIDEuMS45IDIgMiAyem0tMi00aDJ2LTJIM3Yyek05IDNIN3YyaDJWM3ptMiAxOGgydi0yaC0ydjJ6bTgtOGgydi0yaC0ydjJ6bTAgOGMxLjEgMCAyLS45IDItMmgtMnYyem0wLTEyaDJWN2gtMnYyem0wIDhoMnYtMmgtMnYyem0tNCA0aDJ2LTJoLTJ2MnptMC0xNmgyVjNoLTJ2MnpNNyAxN2gxMFY3SDd2MTB6bTItOGg2djZIOVY5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNlbmQiPjxwYXRoIGQ9Ik0yLjAxIDIxTDIzIDEyIDIuMDEgMyAyIDEwbDE1IDItMTUgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncyI+PHBhdGggZD0iTTE5LjQzIDEyLjk4Yy4wNC0uMzIuMDctLjY0LjA3LS45OHMtLjAzLS42Ni0uMDctLjk4bDIuMTEtMS42NWMuMTktLjE1LjI0LS40Mi4xMi0uNjRsLTItMy40NmMtLjEyLS4yMi0uMzktLjMtLjYxLS4yMmwtMi40OSAxYy0uNTItLjQtMS4wOC0uNzMtMS42OS0uOThsLS4zOC0yLjY1QzE0LjQ2IDIuMTggMTQuMjUgMiAxNCAyaC00Yy0uMjUgMC0uNDYuMTgtLjQ5LjQybC0uMzggMi42NWMtLjYxLjI1LTEuMTcuNTktMS42OS45OGwtMi40OS0xYy0uMjMtLjA5LS40OSAwLS42MS4yMmwtMiAzLjQ2Yy0uMTMuMjItLjA3LjQ5LjEyLjY0bDIuMTEgMS42NWMtLjA0LjMyLS4wNy42NS0uMDcuOThzLjAzLjY2LjA3Ljk4bC0yLjExIDEuNjVjLS4xOS4xNS0uMjQuNDItLjEyLjY0bDIgMy40NmMuMTIuMjIuMzkuMy42MS4yMmwyLjQ5LTFjLjUyLjQgMS4wOC43MyAxLjY5Ljk4bC4zOCAyLjY1Yy4wMy4yNC4yNC40Mi40OS40Mmg0Yy4yNSAwIC40Ni0uMTguNDktLjQybC4zOC0yLjY1Yy42MS0uMjUgMS4xNy0uNTkgMS42OS0uOThsMi40OSAxYy4yMy4wOS40OSAwIC42MS0uMjJsMi0zLjQ2Yy4xMi0uMjIuMDctLjQ5LS4xMi0uNjRsLTIuMTEtMS42NXpNMTIgMTUuNWMtMS45MyAwLTMuNS0xLjU3LTMuNS0zLjVzMS41Ny0zLjUgMy41LTMuNSAzLjUgMS41NyAzLjUgMy41LTEuNTcgMy41LTMuNSAzLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYXBwbGljYXRpb25zIj48cGF0aCBkPSJNMTIgMTBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem03LTdINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMTEgMCAyLS45IDItMlY1YzAtMS4xLS44OS0yLTItMnptLTEuNzUgOWMwIC4yMy0uMDIuNDYtLjA1LjY4bDEuNDggMS4xNmMuMTMuMTEuMTcuMy4wOC40NWwtMS40IDIuNDJjLS4wOS4xNS0uMjcuMjEtLjQzLjE1bC0xLjc0LS43Yy0uMzYuMjgtLjc2LjUxLTEuMTguNjlsLS4yNiAxLjg1Yy0uMDMuMTctLjE4LjMtLjM1LjNoLTIuOGMtLjE3IDAtLjMyLS4xMy0uMzUtLjI5bC0uMjYtMS44NWMtLjQzLS4xOC0uODItLjQxLTEuMTgtLjY5bC0xLjc0LjdjLS4xNi4wNi0uMzQgMC0uNDMtLjE1bC0xLjQtMi40MmMtLjA5LS4xNS0uMDUtLjM0LjA4LS40NWwxLjQ4LTEuMTZjLS4wMy0uMjMtLjA1LS40Ni0uMDUtLjY5IDAtLjIzLjAyLS40Ni4wNS0uNjhsLTEuNDgtMS4xNmMtLjEzLS4xMS0uMTctLjMtLjA4LS40NWwxLjQtMi40MmMuMDktLjE1LjI3LS4yMS40My0uMTVsMS43NC43Yy4zNi0uMjguNzYtLjUxIDEuMTgtLjY5bC4yNi0xLjg1Yy4wMy0uMTcuMTgtLjMuMzUtLjNoMi44Yy4xNyAwIC4zMi4xMy4zNS4yOWwuMjYgMS44NWMuNDMuMTguODIuNDEgMS4xOC42OWwxLjc0LS43Yy4xNi0uMDYuMzQgMCAuNDMuMTVsMS40IDIuNDJjLjA5LjE1LjA1LjM0LS4wOC40NWwtMS40OCAxLjE2Yy4wMy4yMy4wNS40Ni4wNS42OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1iYWNrdXAtcmVzdG9yZSI+PHBhdGggZD0iTTE0IDEyYzAtMS4xLS45LTItMi0ycy0yIC45LTIgMiAuOSAyIDIgMiAyLS45IDItMnptLTItOWMtNC45NyAwLTkgNC4wMy05IDlIMGw0IDQgNC00SDVjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjUxIDAtMi45MS0uNDktNC4wNi0xLjNsLTEuNDIgMS40NEM4LjA0IDIwLjMgOS45NCAyMSAxMiAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1ibHVldG9vdGgiPjxwYXRoIGQ9Ik0xMSAyNGgydi0yaC0ydjJ6bS00IDBoMnYtMkg3djJ6bTggMGgydi0yaC0ydjJ6bTIuNzEtMTguMjlMMTIgMGgtMXY3LjU5TDYuNDEgMyA1IDQuNDEgMTAuNTkgMTAgNSAxNS41OSA2LjQxIDE3IDExIDEyLjQxVjIwaDFsNS43MS01LjcxLTQuMy00LjI5IDQuMy00LjI5ek0xMyAzLjgzbDEuODggMS44OEwxMyA3LjU5VjMuODN6bTEuODggMTAuNDZMMTMgMTYuMTd2LTMuNzZsMS44OCAxLjg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWJyaWdodG5lc3MiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6TTggMTZoMi41bDEuNSAxLjUgMS41LTEuNUgxNnYtMi41bDEuNS0xLjUtMS41LTEuNVY4aC0yLjVMMTIgNi41IDEwLjUgOEg4djIuNUw2LjUgMTIgOCAxMy41VjE2em00LTdjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDNWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1jZWxsIj48cGF0aCBkPSJNNyAyNGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnpNMTYgLjAxTDggMEM2LjkgMCA2IC45IDYgMnYxNmMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWMmMwLTEuMS0uOS0xLjk5LTItMS45OXpNMTYgMTZIOFY0aDh2MTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtZXRoZXJuZXQiPjxwYXRoIGQ9Ik03Ljc3IDYuNzZMNi4yMyA1LjQ4LjgyIDEybDUuNDEgNi41MiAxLjU0LTEuMjhMMy40MiAxMmw0LjM1LTUuMjR6TTcgMTNoMnYtMkg3djJ6bTEwLTJoLTJ2Mmgydi0yem0tNiAyaDJ2LTJoLTJ2MnptNi43Ny03LjUybC0xLjU0IDEuMjhMMjAuNTggMTJsLTQuMzUgNS4yNCAxLjU0IDEuMjhMMjMuMTggMTJsLTUuNDEtNi41MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1hbnRlbm5hIj48cGF0aCBkPSJNMTIgNWMtMy44NyAwLTcgMy4xMy03IDdoMmMwLTIuNzYgMi4yNC01IDUtNXM1IDIuMjQgNSA1aDJjMC0zLjg3LTMuMTMtNy03LTd6bTEgOS4yOWMuODgtLjM5IDEuNS0xLjI2IDEuNS0yLjI5IDAtMS4zOC0xLjEyLTIuNS0yLjUtMi41UzkuNSAxMC42MiA5LjUgMTJjMCAxLjAyLjYyIDEuOSAxLjUgMi4yOXYzLjNMNy41OSAyMSA5IDIyLjQxbDMtMyAzIDNMMTYuNDEgMjEgMTMgMTcuNTl2LTMuM3pNMTIgMUM1LjkzIDEgMSA1LjkzIDEgMTJoMmMwLTQuOTcgNC4wMy05IDktOXM5IDQuMDMgOSA5aDJjMC02LjA3LTQuOTMtMTEtMTEtMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtY29tcG9uZW50Ij48cGF0aCBkPSJNNSAyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIMXY2aDZWNkg1VjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJIOXYyem0tOCAwYzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOEM2LjE2IDE4LjQgNyAxNy4zIDcgMTZ2LTJIMXYyek0yMSA2VjJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NGgtMnY2aDZWNmgtMnptLTgtNGMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDl2Nmg2VjZoLTJWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMmgtNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWNvbXBvc2l0ZSI+PHBhdGggZD0iTTUgMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDF2Nmg2VjZINVYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0ySDl2MnptLTggMGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThDNi4xNiAxOC40IDcgMTcuMyA3IDE2di0ySDF2MnpNMjEgNlYyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRoLTJ2Nmg2VjZoLTJ6bS04LTRjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEg5djZoNlY2aC0yVjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJoLTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1oZG1pIj48cGF0aCBkPSJNMTggN1Y0YzAtMS4xLS45LTItMi0ySDhjLTEuMSAwLTIgLjktMiAydjNINXY2bDMgNnYzaDh2LTNsMy02VjdoLTF6TTggNGg4djNoLTJWNWgtMXYyaC0yVjVoLTF2Mkg4VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtc3ZpZGVvIj48cGF0aCBkPSJNOCAxMS41YzAtLjgzLS42Ny0xLjUtMS41LTEuNVM1IDEwLjY3IDUgMTEuNSA1LjY3IDEzIDYuNSAxMyA4IDEyLjMzIDggMTEuNXptNy01YzAtLjgzLS42Ny0xLjUtMS41LTEuNWgtM0M5LjY3IDUgOSA1LjY3IDkgNi41UzkuNjcgOCAxMC41IDhoM2MuODMgMCAxLjUtLjY3IDEuNS0xLjV6TTguNSAxNWMtLjgzIDAtMS41LjY3LTEuNSAxLjVTNy42NyAxOCA4LjUgMThzMS41LS42NyAxLjUtMS41UzkuMzMgMTUgOC41IDE1ek0xMiAxQzUuOTMgMSAxIDUuOTMgMSAxMnM0LjkzIDExIDExIDExIDExLTQuOTMgMTEtMTFTMTguMDcgMSAxMiAxem0wIDIwYy00Ljk2IDAtOS00LjA0LTktOXM0LjA0LTkgOS05IDkgNC4wNCA5IDktNC4wNCA5LTkgOXptNS41LTExYy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptLTIgNWMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtb3ZlcnNjYW4iPjxwYXRoIGQ9Ik0xMi4wMSA1LjVMMTAgOGg0bC0xLjk5LTIuNXpNMTggMTB2NGwyLjUtMS45OUwxOCAxMHpNNiAxMGwtMi41IDIuMDFMNiAxNHYtNHptOCA2aC00bDIuMDEgMi41TDE0IDE2em03LTEzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcGhvbmUiPjxwYXRoIGQ9Ik0xMyA5aC0ydjJoMlY5em00IDBoLTJ2MmgyVjl6bTMgNi41Yy0xLjI1IDAtMi40NS0uMi0zLjU3LS41Ny0uMzUtLjExLS43NC0uMDMtMS4wMi4yNGwtMi4yIDIuMmMtMi44My0xLjQ0LTUuMTUtMy43NS02LjU5LTYuNThsMi4yLTIuMjFjLjI4LS4yNy4zNi0uNjYuMjUtMS4wMUM4LjcgNi40NSA4LjUgNS4yNSA4LjUgNGMwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxIDAgOS4zOSA3LjYxIDE3IDE3IDE3IC41NSAwIDEtLjQ1IDEtMXYtMy41YzAtLjU1LS40NS0xLTEtMXpNMTkgOXYyaDJWOWgtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1wb3dlciI+PHBhdGggZD0iTTcgMjRoMnYtMkg3djJ6bTQgMGgydi0yaC0ydjJ6bTItMjJoLTJ2MTBoMlYyem0zLjU2IDIuNDRsLTEuNDUgMS40NUMxNi44NCA2Ljk0IDE4IDguODMgMTggMTFjMCAzLjMxLTIuNjkgNi02IDZzLTYtMi42OS02LTZjMC0yLjE3IDEuMTYtNC4wNiAyLjg4LTUuMTJMNy40NCA0LjQ0QzUuMzYgNS44OCA0IDguMjggNCAxMWMwIDQuNDIgMy41OCA4IDggOHM4LTMuNTggOC04YzAtMi43Mi0xLjM2LTUuMTItMy40NC02LjU2ek0xNSAyNGgydi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcmVtb3RlIj48cGF0aCBkPSJNMTUgOUg5Yy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoNmMuNTUgMCAxLS40NSAxLTFWMTBjMC0uNTUtLjQ1LTEtMS0xem0tMyA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpNNy4wNSA2LjA1bDEuNDEgMS40MUM5LjM3IDYuNTYgMTAuNjIgNiAxMiA2czIuNjMuNTYgMy41NCAxLjQ2bDEuNDEtMS40MUMxNS42OCA0Ljc4IDEzLjkzIDQgMTIgNHMtMy42OC43OC00Ljk1IDIuMDV6TTEyIDBDOC45NiAwIDYuMjEgMS4yMyA0LjIyIDMuMjJsMS40MSAxLjQxQzcuMjYgMy4wMSA5LjUxIDIgMTIgMnM0Ljc0IDEuMDEgNi4zNiAyLjY0bDEuNDEtMS40MUMxNy43OSAxLjIzIDE1LjA0IDAgMTIgMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy12b2ljZSI+PHBhdGggZD0iTTcgMjRoMnYtMkg3djJ6bTUtMTFjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNMMTUgNGMwLTEuNjYtMS4zNC0zLTMtM1M5IDIuMzQgOSA0djZjMCAxLjY2IDEuMzQgMyAzIDN6bS0xIDExaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnptNC0xNGgtMS43YzAgMy0yLjU0IDUuMS01LjMgNS4xUzYuNyAxMyA2LjcgMTBINWMwIDMuNDEgMi43MiA2LjIzIDYgNi43MlYyMGgydi0zLjI4YzMuMjgtLjQ5IDYtMy4zMSA2LTYuNzJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcCI+PHBhdGggZD0iTTE2IDZWNGMwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJIMnYxM2MwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2aC02em0tNi0yaDR2MmgtNFY0ek05IDE4VjlsNy41IDRMOSAxOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzaG9wLXR3byI+PHBhdGggZD0iTTMgOUgxdjExYzAgMS4xMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uODkgMi0ySDNWOXptMTUtNFYzYzAtMS4xMS0uODktMi0yLTJoLTRjLTEuMTEgMC0yIC44OS0yIDJ2Mkg1djExYzAgMS4xMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uODkgMi0yVjVoLTV6bS02LTJoNHYyaC00VjN6bTAgMTJWOGw1LjUgMy01LjUgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzaG9wcGluZy1iYXNrZXQiPjxwYXRoIGQ9Ik0xNy4yMSA5bC00LjM4LTYuNTZjLS4xOS0uMjgtLjUxLS40Mi0uODMtLjQyLS4zMiAwLS42NC4xNC0uODMuNDNMNi43OSA5SDJjLS41NSAwLTEgLjQ1LTEgMSAwIC4wOS4wMS4xOC4wNC4yN2wyLjU0IDkuMjdjLjIzLjg0IDEgMS40NiAxLjkyIDEuNDZoMTNjLjkyIDAgMS42OS0uNjIgMS45My0xLjQ2bDIuNTQtOS4yN0wyMyAxMGMwLS41NS0uNDUtMS0xLTFoLTQuNzl6TTkgOWwzLTQuNEwxNSA5SDl6bTMgOGMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTcgMThjLTEuMSAwLTEuOTkuOS0xLjk5IDJTNS45IDIyIDcgMjJzMi0uOSAyLTItLjktMi0yLTJ6TTEgMnYyaDJsMy42IDcuNTktMS4zNSAyLjQ1Yy0uMTYuMjgtLjI1LjYxLS4yNS45NiAwIDEuMS45IDIgMiAyaDEydi0ySDcuNDJjLS4xNCAwLS4yNS0uMTEtLjI1LS4yNWwuMDMtLjEyLjktMS42M2g3LjQ1Yy43NSAwIDEuNDEtLjQxIDEuNzUtMS4wM2wzLjU4LTYuNDljLjA4LS4xNC4xMi0uMzEuMTItLjQ4IDAtLjU1LS40NS0xLTEtMUg1LjIxbC0uOTQtMkgxem0xNiAxNmMtMS4xIDAtMS45OS45LTEuOTkgMnMuODkgMiAxLjk5IDIgMi0uOSAyLTItLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic29ydCI+PHBhdGggZD0iTTMgMThoNnYtMkgzdjJ6TTMgNnYyaDE4VjZIM3ptMCA3aDEydi0ySDN2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzcGVha2VyLW5vdGVzIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTggMTRINnYtMmgydjJ6bTAtM0g2VjloMnYyem0wLTNINlY2aDJ2MnptNyA2aC01di0yaDV2MnptMy0zaC04VjloOHYyem0wLTNoLThWNmg4djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3BlYWtlci1ub3Rlcy1vZmYiPjxwYXRoIGQ9Ik0xMC41NCAxMWwtLjU0LS41NEw3LjU0IDggNiA2LjQ2IDIuMzggMi44NCAxLjI3IDEuNzMgMCAzbDIuMDEgMi4wMUwyIDIybDQtNGg5bDUuNzMgNS43M0wyMiAyMi40NiAxNy41NCAxOGwtNy03ek04IDE0SDZ2LTJoMnYyem0tMi0zVjlsMiAySDZ6bTE0LTlINC4wOEwxMCA3LjkyVjZoOHYyaC03LjkybDEgMUgxOHYyaC00LjkybDYuOTkgNi45OUMyMS4xNCAxNy45NSAyMiAxNy4wOCAyMiAxNlY0YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNwZWxsY2hlY2siPjxwYXRoIGQ9Ik0xMi40NSAxNmgyLjA5TDkuNDMgM0g3LjU3TDIuNDYgMTZoMi4wOWwxLjEyLTNoNS42NGwxLjE0IDN6bS02LjAyLTVMOC41IDUuNDggMTAuNTcgMTFINi40M3ptMTUuMTYuNTlsLTguMDkgOC4wOUw5LjgzIDE2bC0xLjQxIDEuNDEgNS4wOSA1LjA5TDIzIDEzbC0xLjQxLTEuNDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RhciI+PHBhdGggZD0iTTEyIDE3LjI3TDE4LjE4IDIxbC0xLjY0LTcuMDNMMjIgOS4yNGwtNy4xOS0uNjFMMTIgMiA5LjE5IDguNjMgMiA5LjI0bDUuNDYgNC43M0w1LjgyIDIxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXItYm9yZGVyIj48cGF0aCBkPSJNMjIgOS4yNGwtNy4xOS0uNjJMMTIgMiA5LjE5IDguNjMgMiA5LjI0bDUuNDYgNC43M0w1LjgyIDIxIDEyIDE3LjI3IDE4LjE4IDIxbC0xLjYzLTcuMDNMMjIgOS4yNHpNMTIgMTUuNGwtMy43NiAyLjI3IDEtNC4yOC0zLjMyLTIuODggNC4zOC0uMzhMMTIgNi4xbDEuNzEgNC4wNCA0LjM4LjM4LTMuMzIgMi44OCAxIDQuMjhMMTIgMTUuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdGFyLWhhbGYiPjxwYXRoIGQ9Ik0yMiA5LjI0bC03LjE5LS42MkwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjEgMTIgMTcuMjcgMTguMTggMjFsLTEuNjMtNy4wM0wyMiA5LjI0ek0xMiAxNS40VjYuMWwxLjcxIDQuMDQgNC4zOC4zOC0zLjMyIDIuODggMSA0LjI4TDEyIDE1LjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RhcnMiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyem00LjI0IDE2TDEyIDE1LjQ1IDcuNzcgMThsMS4xMi00LjgxLTMuNzMtMy4yMyA0LjkyLS40MkwxMiA1bDEuOTIgNC41MyA0LjkyLjQyLTMuNzMgMy4yM0wxNi4yMyAxOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdG9yZSI+PHBhdGggZD0iTTIwIDRINHYyaDE2VjR6bTEgMTB2LTJsLTEtNUg0bC0xIDV2MmgxdjZoMTB2LTZoNHY2aDJ2LTZoMXptLTkgNEg2di00aDZ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctbGVmdCI+PHBhdGggZD0iTTExIDlsMS40MiAxLjQyTDguODMgMTRIMThWNGgydjEySDguODNsMy41OSAzLjU4TDExIDIxbC02LTYgNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN1YmRpcmVjdG9yeS1hcnJvdy1yaWdodCI+PHBhdGggZD0iTTE5IDE1bC02IDYtMS40Mi0xLjQyTDE1LjE3IDE2SDRWNGgydjEwaDkuMTdsLTMuNTktMy41OEwxMyA5bDYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdWJqZWN0Ij48cGF0aCBkPSJNMTQgMTdINHYyaDEwdi0yem02LThINHYyaDE2Vjl6TTQgMTVoMTZ2LTJINHYyek00IDV2MmgxNlY1SDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3VwZXJ2aXNvci1hY2NvdW50Ij48cGF0aCBkPSJNMTYuNSAxMmMxLjM4IDAgMi40OS0xLjEyIDIuNDktMi41UzE3Ljg4IDcgMTYuNSA3QzE1LjEyIDcgMTQgOC4xMiAxNCA5LjVzMS4xMiAyLjUgMi41IDIuNXpNOSAxMWMxLjY2IDAgMi45OS0xLjM0IDIuOTktM1MxMC42NiA1IDkgNUM3LjM0IDUgNiA2LjM0IDYgOHMxLjM0IDMgMyAzem03LjUgM2MtMS44MyAwLTUuNS45Mi01LjUgMi43NVYxOWgxMXYtMi4yNWMwLTEuODMtMy42Ny0yLjc1LTUuNS0yLjc1ek05IDEzYy0yLjMzIDAtNyAxLjE3LTcgMy41VjE5aDd2LTIuMjVjMC0uODUuMzMtMi4zNCAyLjM3LTMuNDdDMTAuNSAxMy4xIDkuNjYgMTMgOSAxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLWhvcml6Ij48cGF0aCBkPSJNNi45OSAxMUwzIDE1bDMuOTkgNHYtM0gxNHYtMkg2Ljk5di0zek0yMSA5bC0zLjk5LTR2M0gxMHYyaDcuMDF2M0wyMSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN3YXAtdmVydCI+PHBhdGggZD0iTTE2IDE3LjAxVjEwaC0ydjcuMDFoLTNMMTUgMjFsNC0zLjk5aC0zek05IDNMNSA2Ljk5aDNWMTRoMlY2Ljk5aDNMOSAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN3YXAtdmVydGljYWwtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnpNNi41IDlMMTAgNS41IDEzLjUgOUgxMXY0SDlWOUg2LjV6bTExIDZMMTQgMTguNSAxMC41IDE1SDEzdi00aDJ2NGgyLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3lzdGVtLXVwZGF0ZS1hbHQiPjxwYXRoIGQ9Ik0xMiAxNi41bDQtNGgtM3YtOWgtMnY5SDhsNCA0em05LTEzaC02djEuOTloNnYxNC4wM0gzVjUuNDloNlYzLjVIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnYtMTRjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGFiIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZIM1Y1aDEwdjRoOHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0YWItdW5zZWxlY3RlZCI+PHBhdGggZD0iTTEgOWgyVjdIMXYyem0wIDRoMnYtMkgxdjJ6bTAtOGgyVjNjLTEuMSAwLTIgLjktMiAyem04IDE2aDJ2LTJIOXYyem0tOC00aDJ2LTJIMXYyem0yIDR2LTJIMWMwIDEuMS45IDIgMiAyek0yMSAzaC04djZoMTBWNWMwLTEuMS0uOS0yLTItMnptMCAxNGgydi0yaC0ydjJ6TTkgNWgyVjNIOXYyek01IDIxaDJ2LTJINXYyek01IDVoMlYzSDV2MnptMTYgMTZjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC04aDJ2LTJoLTJ2MnptLTggOGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGV4dC1mb3JtYXQiPjxwYXRoIGQ9Ik01IDE3djJoMTR2LTJINXptNC41LTQuMmg1bC45IDIuMmgyLjFMMTIuNzUgNGgtMS41TDYuNSAxNWgyLjFsLjktMi4yek0xMiA1Ljk4TDEzLjg3IDExaC0zLjc0TDEyIDUuOTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGhlYXRlcnMiPjxwYXRoIGQ9Ik0xOCAzdjJoLTJWM0g4djJINlYzSDR2MThoMnYtMmgydjJoOHYtMmgydjJoMlYzaC0yek04IDE3SDZ2LTJoMnYyem0wLTRINnYtMmgydjJ6bTAtNEg2VjdoMnYyem0xMCA4aC0ydi0yaDJ2MnptMC00aC0ydi0yaDJ2MnptMC00aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRodW1iLWRvd24iPjxwYXRoIGQ9Ik0xNSAzSDZjLS44MyAwLTEuNTQuNS0xLjg0IDEuMjJsLTMuMDIgNy4wNWMtLjA5LjIzLS4xNC40Ny0uMTQuNzN2MS45MWwuMDEuMDFMMSAxNGMwIDEuMS45IDIgMiAyaDYuMzFsLS45NSA0LjU3LS4wMy4zMmMwIC40MS4xNy43OS40NCAxLjA2TDkuODMgMjNsNi41OS02LjU5Yy4zNi0uMzYuNTgtLjg2LjU4LTEuNDFWNWMwLTEuMS0uOS0yLTItMnptNCAwdjEyaDRWM2gtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYi11cCI+PHBhdGggZD0iTTEgMjFoNFY5SDF2MTJ6bTIyLTExYzAtMS4xLS45LTItMi0yaC02LjMxbC45NS00LjU3LjAzLS4zMmMwLS40MS0uMTctLjc5LS40NC0xLjA2TDE0LjE3IDEgNy41OSA3LjU5QzcuMjIgNy45NSA3IDguNDUgNyA5djEwYzAgMS4xLjkgMiAyIDJoOWMuODMgMCAxLjU0LS41IDEuODQtMS4yMmwzLjAyLTcuMDVjLjA5LS4yMy4xNC0uNDcuMTQtLjczdi0xLjkxbC0uMDEtLjAxTDIzIDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRodW1icy11cC1kb3duIj48cGF0aCBkPSJNMTIgNmMwLS41NS0uNDUtMS0xLTFINS44MmwuNjYtMy4xOC4wMi0uMjNjMC0uMzEtLjEzLS41OS0uMzMtLjhMNS4zOCAwIC40NCA0Ljk0Qy4xNyA1LjIxIDAgNS41OSAwIDZ2Ni41YzAgLjgzLjY3IDEuNSAxLjUgMS41aDYuNzVjLjYyIDAgMS4xNS0uMzggMS4zOC0uOTFsMi4yNi01LjI5Yy4wNy0uMTcuMTEtLjM2LjExLS41NVY2em0xMC41IDRoLTYuNzVjLS42MiAwLTEuMTUuMzgtMS4zOC45MWwtMi4yNiA1LjI5Yy0uMDcuMTctLjExLjM2LS4xMS41NVYxOGMwIC41NS40NSAxIDEgMWg1LjE4bC0uNjYgMy4xOC0uMDIuMjRjMCAuMzEuMTMuNTkuMzMuOGwuNzkuNzggNC45NC00Ljk0Yy4yNy0uMjcuNDQtLjY1LjQ0LTEuMDZ2LTYuNWMwLS44My0uNjctMS41LTEuNS0xLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZWxpbmUiPjxwYXRoIGQ9Ik0yMyA4YzAgMS4xLS45IDItMiAyLS4xOCAwLS4zNS0uMDItLjUxLS4wN2wtMy41NiAzLjU1Yy4wNS4xNi4wNy4zNC4wNy41MiAwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTJjMC0uMTguMDItLjM2LjA3LS41MmwtMi41NS0yLjU1Yy0uMTYuMDUtLjM0LjA3LS41Mi4wN3MtLjM2LS4wMi0uNTItLjA3bC00LjU1IDQuNTZjLjA1LjE2LjA3LjMzLjA3LjUxIDAgMS4xLS45IDItMiAycy0yLS45LTItMiAuOS0yIDItMmMuMTggMCAuMzUuMDIuNTEuMDdsNC41Ni00LjU1QzguMDIgOS4zNiA4IDkuMTggOCA5YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJjMCAuMTgtLjAyLjM2LS4wNy41MmwyLjU1IDIuNTVjLjE2LS4wNS4zNC0uMDcuNTItLjA3cy4zNi4wMi41Mi4wN2wzLjU1LTMuNTZDMTkuMDIgOC4zNSAxOSA4LjE4IDE5IDhjMC0xLjEuOS0yIDItMnMyIC45IDIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2MiPjxwYXRoIGQ9Ik0zIDloMTRWN0gzdjJ6bTAgNGgxNHYtMkgzdjJ6bTAgNGgxNHYtMkgzdjJ6bTE2IDBoMnYtMmgtMnYyem0wLTEwdjJoMlY3aC0yem0wIDZoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRvZGF5Ij48cGF0aCBkPSJNMTkgM2gtMVYxaC0ydjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY4aDE0djExek03IDEwaDV2NUg3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRvbGwiPjxwYXRoIGQ9Ik0xNSA0Yy00LjQyIDAtOCAzLjU4LTggOHMzLjU4IDggOCA4IDgtMy41OCA4LTgtMy41OC04LTgtOHptMCAxNGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6TTMgMTJjMC0yLjYxIDEuNjctNC44MyA0LTUuNjVWNC4yNkMzLjU1IDUuMTUgMSA4LjI3IDEgMTJzMi41NSA2Ljg1IDYgNy43NHYtMi4wOWMtMi4zMy0uODItNC0zLjA0LTQtNS42NXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b3VjaC1hcHAiPjxwYXRoIGQ9Ik05IDExLjI0VjcuNUM5IDYuMTIgMTAuMTIgNSAxMS41IDVTMTQgNi4xMiAxNCA3LjV2My43NGMxLjIxLS44MSAyLTIuMTggMi0zLjc0QzE2IDUuMDEgMTMuOTkgMyAxMS41IDNTNyA1LjAxIDcgNy41YzAgMS41Ni43OSAyLjkzIDIgMy43NHptOS44NCA0LjYzbC00LjU0LTIuMjZjLS4xNy0uMDctLjM1LS4xMS0uNTQtLjExSDEzdi02YzAtLjgzLS42Ny0xLjUtMS41LTEuNVMxMCA2LjY3IDEwIDcuNXYxMC43NGwtMy40My0uNzJjLS4wOC0uMDEtLjE1LS4wMy0uMjQtLjAzLS4zMSAwLS41OS4xMy0uNzkuMzNsLS43OS44IDQuOTQgNC45NGMuMjcuMjcuNjUuNDQgMS4wNi40NGg2Ljc5Yy43NSAwIDEuMzMtLjU1IDEuNDQtMS4yOGwuNzUtNS4yN2MuMDEtLjA3LjAyLS4xNC4wMi0uMiAwLS42Mi0uMzgtMS4xNi0uOTEtMS4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmFjay1jaGFuZ2VzIj48cGF0aCBkPSJNMTkuMDcgNC45M2wtMS40MSAxLjQxQzE5LjEgNy43OSAyMCA5Ljc5IDIwIDEyYzAgNC40Mi0zLjU4IDgtOCA4cy04LTMuNTgtOC04YzAtNC4wOCAzLjA1LTcuNDQgNy03LjkzdjIuMDJDOC4xNiA2LjU3IDYgOS4wMyA2IDEyYzAgMy4zMSAyLjY5IDYgNiA2czYtMi42OSA2LTZjMC0xLjY2LS42Ny0zLjE2LTEuNzYtNC4yNGwtMS40MSAxLjQxQzE1LjU1IDkuOSAxNiAxMC45IDE2IDEyYzAgMi4yMS0xLjc5IDQtNCA0cy00LTEuNzktNC00YzAtMS44NiAxLjI4LTMuNDEgMy0zLjg2djIuMTRjLS42LjM1LTEgLjk4LTEgMS43MiAwIDEuMS45IDIgMiAyczItLjkgMi0yYzAtLjc0LS40LTEuMzgtMS0xLjcyVjJoLTFDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMGMwLTIuNzYtMS4xMi01LjI2LTIuOTMtNy4wN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmFuc2xhdGUiPjxwYXRoIGQ9Ik0xMi44NyAxNS4wN2wtMi41NC0yLjUxLjAzLS4wM2MxLjc0LTEuOTQgMi45OC00LjE3IDMuNzEtNi41M0gxN1Y0aC03VjJIOHYySDF2MS45OWgxMS4xN0MxMS41IDcuOTIgMTAuNDQgOS43NSA5IDExLjM1IDguMDcgMTAuMzIgNy4zIDkuMTkgNi42OSA4aC0yYy43MyAxLjYzIDEuNzMgMy4xNyAyLjk4IDQuNTZsLTUuMDkgNS4wMkw0IDE5bDUtNSAzLjExIDMuMTEuNzYtMi4wNHpNMTguNSAxMGgtMkwxMiAyMmgybDEuMTItM2g0Ljc1TDIxIDIyaDJsLTQuNS0xMnptLTIuNjIgN2wxLjYyLTQuMzNMMTkuMTIgMTdoLTMuMjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJlbmRpbmctZG93biI+PHBhdGggZD0iTTE2IDE4bDIuMjktMi4yOS00Ljg4LTQuODgtNCA0TDIgNy40MSAzLjQxIDZsNiA2IDQtNCA2LjMgNi4yOUwyMiAxMnY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLWZsYXQiPjxwYXRoIGQ9Ik0yMiAxMmwtNC00djNIM3YyaDE1djN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJlbmRpbmctdXAiPjxwYXRoIGQ9Ik0xNiA2bDIuMjkgMi4yOS00Ljg4IDQuODgtNC00TDIgMTYuNTkgMy40MSAxOGw2LTYgNCA0IDYuMy02LjI5TDIyIDEyVjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHVybmVkLWluIj48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0xLjk5LjktMS45OSAyTDUgMjFsNy0zIDcgM1Y1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InR1cm5lZC1pbi1ub3QiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTVsLTUtMi4xOEw3IDE4VjVoMTB2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idW5hcmNoaXZlIj48cGF0aCBkPSJNMjAuNTUgNS4yMmwtMS4zOS0xLjY4QzE4Ljg4IDMuMjEgMTguNDcgMyAxOCAzSDZjLS40NyAwLS44OC4yMS0xLjE1LjU1TDMuNDYgNS4yMkMzLjE3IDUuNTcgMyA2LjAxIDMgNi41VjE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjYuNWMwLS40OS0uMTctLjkzLS40NS0xLjI4ek0xMiA5LjVsNS41IDUuNUgxNHYyaC00di0ySDYuNUwxMiA5LjV6TTUuMTIgNWwuODItMWgxMmwuOTMgMUg1LjEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuZG8iPjxwYXRoIGQ9Ik0xMi41IDhjLTIuNjUgMC01LjA1Ljk5LTYuOSAyLjZMMiA3djloOWwtMy42Mi0zLjYyYzEuMzktMS4xNiAzLjE2LTEuODggNS4xMi0xLjg4IDMuNTQgMCA2LjU1IDIuMzEgNy42IDUuNWwyLjM3LS43OEMyMS4wOCAxMS4wMyAxNy4xNSA4IDEyLjUgOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ1bmZvbGQtbGVzcyI+PHBhdGggZD0iTTcuNDEgMTguNTlMOC44MyAyMCAxMiAxNi44MyAxNS4xNyAyMGwxLjQxLTEuNDFMMTIgMTRsLTQuNTkgNC41OXptOS4xOC0xMy4xOEwxNS4xNyA0IDEyIDcuMTcgOC44MyA0IDcuNDEgNS40MSAxMiAxMGw0LjU5LTQuNTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idW5mb2xkLW1vcmUiPjxwYXRoIGQ9Ik0xMiA1LjgzTDE1LjE3IDlsMS40MS0xLjQxTDEyIDMgNy40MSA3LjU5IDguODMgOSAxMiA1Ljgzem0wIDEyLjM0TDguODMgMTVsLTEuNDEgMS40MUwxMiAyMWw0LjU5LTQuNTlMMTUuMTcgMTUgMTIgMTguMTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idXBkYXRlIj48cGF0aCBkPSJNMjEgMTAuMTJoLTYuNzhsMi43NC0yLjgyYy0yLjczLTIuNy03LjE1LTIuOC05Ljg4LS4xLTIuNzMgMi43MS0yLjczIDcuMDggMCA5Ljc5IDIuNzMgMi43MSA3LjE1IDIuNzEgOS44OCAwQzE4LjMyIDE1LjY1IDE5IDE0LjA4IDE5IDEyLjFoMmMwIDEuOTgtLjg4IDQuNTUtMi42NCA2LjI5LTMuNTEgMy40OC05LjIxIDMuNDgtMTIuNzIgMC0zLjUtMy40Ny0zLjUzLTkuMTEtLjAyLTEyLjU4IDMuNTEtMy40NyA5LjE0LTMuNDcgMTIuNjUgMEwyMSAzdjcuMTJ6TTEyLjUgOHY0LjI1bDMuNSAyLjA4LS43MiAxLjIxTDExIDEzVjhoMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZlcmlmaWVkLXVzZXIiPjxwYXRoIGQ9Ik0xMiAxTDMgNXY2YzAgNS41NSAzLjg0IDEwLjc0IDkgMTIgNS4xNi0xLjI2IDktNi40NSA5LTEyVjVsLTktNHptLTIgMTZsLTQtNCAxLjQxLTEuNDFMMTAgMTQuMTdsNi41OS02LjU5TDE4IDlsLTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWFnZW5kYSI+PHBhdGggZD0iTTIwIDEzSDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMXYtNmMwLS41NS0uNDUtMS0xLTF6bTAtMTBIM2MtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTdjLjU1IDAgMS0uNDUgMS0xVjRjMC0uNTUtLjQ1LTEtMS0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctYXJyYXkiPjxwYXRoIGQ9Ik00IDE4aDNWNUg0djEzek0xOCA1djEzaDNWNWgtM3pNOCAxOGg5VjVIOHYxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNhcm91c2VsIj48cGF0aCBkPSJNNyAxOWgxMFY0SDd2MTV6bS01LTJoNFY2SDJ2MTF6TTE4IDZ2MTFoNFY2aC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctY29sdW1uIj48cGF0aCBkPSJNMTAgMThoNVY1aC01djEzem0tNiAwaDVWNUg0djEzek0xNiA1djEzaDVWNWgtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWRheSI+PHBhdGggZD0iTTIgMjFoMTl2LTNIMnYzek0yMCA4SDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMVY5YzAtLjU1LS40NS0xLTEtMXpNMiAzdjNoMTlWM0gyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctaGVhZGxpbmUiPjxwYXRoIGQ9Ik00IDE1aDE2di0ySDR2MnptMCA0aDE2di0ySDR2MnptMC04aDE2VjlINHYyem0wLTZ2MmgxNlY1SDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1saXN0Ij48cGF0aCBkPSJNNCAxNGg0di00SDR2NHptMCA1aDR2LTRINHY0ek00IDloNFY1SDR2NHptNSA1aDEydi00SDl2NHptMCA1aDEydi00SDl2NHpNOSA1djRoMTJWNUg5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctbW9kdWxlIj48cGF0aCBkPSJNNCAxMWg1VjVINHY2em0wIDdoNXYtNkg0djZ6bTYgMGg1di02aC01djZ6bTYgMGg1di02aC01djZ6bS02LTdoNVY1aC01djZ6bTYtNnY2aDVWNWgtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LXF1aWx0Ij48cGF0aCBkPSJNMTAgMThoNXYtNmgtNXY2em0tNiAwaDVWNUg0djEzem0xMiAwaDV2LTZoLTV2NnpNMTAgNXY2aDExVjVIMTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1zdHJlYW0iPjxwYXRoIGQ9Ik00IDE4aDE3di02SDR2NnpNNCA1djZoMTdWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctd2VlayI+PHBhdGggZD0iTTYgNUgzYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6bTE0IDBoLTNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXptLTcgMGgtM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpc2liaWxpdHkiPjxwYXRoIGQ9Ik0xMiA0LjVDNyA0LjUgMi43MyA3LjYxIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNXM5LjI3LTMuMTEgMTEtNy41Yy0xLjczLTQuMzktNi03LjUtMTEtNy41ek0xMiAxN2MtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6bTAtOGMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgMyAzLTEuMzQgMy0zLTEuMzQtMy0zLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlzaWJpbGl0eS1vZmYiPjxwYXRoIGQ9Ik0xMiA3YzIuNzYgMCA1IDIuMjQgNSA1IDAgLjY1LS4xMyAxLjI2LS4zNiAxLjgzbDIuOTIgMi45MmMxLjUxLTEuMjYgMi43LTIuODkgMy40My00Ljc1LTEuNzMtNC4zOS02LTcuNS0xMS03LjUtMS40IDAtMi43NC4yNS0zLjk4LjdsMi4xNiAyLjE2QzEwLjc0IDcuMTMgMTEuMzUgNyAxMiA3ek0yIDQuMjdsMi4yOCAyLjI4LjQ2LjQ2QzMuMDggOC4zIDEuNzggMTAuMDIgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41IDEuNTUgMCAzLjAzLS4zIDQuMzgtLjg0bC40Mi40MkwxOS43MyAyMiAyMSAyMC43MyAzLjI3IDMgMiA0LjI3ek03LjUzIDkuOGwxLjU1IDEuNTVjLS4wNS4yMS0uMDguNDMtLjA4LjY1IDAgMS42NiAxLjM0IDMgMyAzIC4yMiAwIC40NC0uMDMuNjUtLjA4bDEuNTUgMS41NWMtLjY3LjMzLTEuNDEuNTMtMi4yLjUzLTIuNzYgMC01LTIuMjQtNS01IDAtLjc5LjItMS41My41My0yLjJ6bTQuMzEtLjc4bDMuMTUgMy4xNS4wMi0uMTZjMC0xLjY2LTEuMzQtMy0zLTNsLS4xNy4wMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3YXJuaW5nIj48cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndhdGNoLWxhdGVyIj48cGF0aCBkPSJNMTIgMkM2LjUgMiAyIDYuNSAyIDEyczQuNSAxMCAxMCAxMCAxMC00LjUgMTAtMTBTMTcuNSAyIDEyIDJ6bTQuMiAxNC4yTDExIDEzVjdoMS41djUuMmw0LjUgMi43LS44IDEuM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ3ZWVrZW5kIj48cGF0aCBkPSJNMjEgMTBjLTEuMSAwLTIgLjktMiAydjNINXYtM2MwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJ2NWMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0ydi01YzAtMS4xLS45LTItMi0yem0tMy01SDZjLTEuMSAwLTIgLjktMiAydjIuMTVjMS4xNi40MSAyIDEuNTEgMiAyLjgyVjE0aDEydi0yLjAzYzAtMS4zLjg0LTIuNCAyLTIuODJWN2MwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3b3JrIj48cGF0aCBkPSJNMjAgNmgtNFY0YzAtMS4xMS0uODktMi0yLTJoLTRjLTEuMTEgMC0yIC44OS0yIDJ2Mkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS02IDBoLTRWNGg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ieW91dHViZS1zZWFyY2hlZC1mb3IiPjxwYXRoIGQ9Ik0xNy4wMSAxNGgtLjhsLS4yNy0uMjdjLjk4LTEuMTQgMS41Ny0yLjYxIDEuNTctNC4yMyAwLTMuNTktMi45MS02LjUtNi41LTYuNXMtNi41IDMtNi41IDYuNUgybDMuODQgNCA0LjE2LTRINi41MUM2LjUxIDcgOC41MyA1IDExLjAxIDVzNC41IDIuMDEgNC41IDQuNWMwIDIuNDgtMi4wMiA0LjUtNC41IDQuNS0uNjUgMC0xLjI2LS4xNC0xLjgyLS4zOEw3LjcxIDE1LjFjLjk3LjU3IDIuMDkuOSAzLjMuOSAxLjYxIDAgMy4wOC0uNTkgNC4yMi0xLjU3bC4yNy4yN3YuNzlsNS4wMSA0Ljk5TDIyIDE5bC00Ljk5LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iem9vbS1pbiI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6bTIuNS00aC0ydjJIOXYtMkg3VjloMlY3aDF2MmgydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iem9vbS1vdXQiPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0ek03IDloNXYxSDd6Ij48L3BhdGg+PC9nPgo8L2RlZnM+PC9zdmc+CjwvaXJvbi1pY29uc2V0LXN2Zz5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZGJlLmNvbnRlbnQpO3ZhciAkZ3Q9eyJVKzAwMDgiOiJiYWNrc3BhY2UiLCJVKzAwMDkiOiJ0YWIiLCJVKzAwMUIiOiJlc2MiLCJVKzAwMjAiOiJzcGFjZSIsIlUrMDA3RiI6ImRlbCJ9LG1iZT17ODoiYmFja3NwYWNlIiw5OiJ0YWIiLDEzOiJlbnRlciIsMjc6ImVzYyIsMzM6InBhZ2V1cCIsMzQ6InBhZ2Vkb3duIiwzNToiZW5kIiwzNjoiaG9tZSIsMzI6InNwYWNlIiwzNzoibGVmdCIsMzg6InVwIiwzOToicmlnaHQiLDQwOiJkb3duIiw0NjoiZGVsIiwxMDY6IioifSxLZ3Q9e3NoaWZ0OiJzaGlmdEtleSIsY3RybDoiY3RybEtleSIsYWx0OiJhbHRLZXkiLG1ldGE6Im1ldGFLZXkifSxnYmU9L1thLXowLTkqXS8sX2JlPS9VXCsvLHliZT0vXmFycm93Lyx2YmU9L15zcGFjZShiYXIpPy8seGJlPS9eZXNjYXBlJC87ZnVuY3Rpb24gWmd0KGUsdCl7dmFyIHI9IiI7aWYoZSl7dmFyIG49ZS50b0xvd2VyQ2FzZSgpO249PT0iICJ8fHZiZS50ZXN0KG4pP3I9InNwYWNlIjp4YmUudGVzdChuKT9yPSJlc2MiOm4ubGVuZ3RoPT0xPyghdHx8Z2JlLnRlc3QobikpJiYocj1uKTp5YmUudGVzdChuKT9yPW4ucmVwbGFjZSgiYXJyb3ciLCIiKTpuPT0ibXVsdGlwbHkiP3I9IioiOnI9bn1yZXR1cm4gcn1mdW5jdGlvbiBiYmUoZSl7dmFyIHQ9IiI7cmV0dXJuIGUmJihlIGluICRndD90PSRndFtlXTpfYmUudGVzdChlKT8oZT1wYXJzZUludChlLnJlcGxhY2UoIlUrIiwiMHgiKSwxNiksdD1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpLnRvTG93ZXJDYXNlKCkpOnQ9ZS50b0xvd2VyQ2FzZSgpKSx0fWZ1bmN0aW9uIHdiZShlKXt2YXIgdD0iIjtyZXR1cm4gTnVtYmVyKGUpJiYoZT49NjUmJmU8PTkwP3Q9U3RyaW5nLmZyb21DaGFyQ29kZSgzMitlKTplPj0xMTImJmU8PTEyMz90PSJmIisoZS0xMTIrMSk6ZT49NDgmJmU8PTU3P3Q9U3RyaW5nKGUtNDgpOmU+PTk2JiZlPD0xMDU/dD1TdHJpbmcoZS05Nik6dD1tYmVbZV0pLHR9ZnVuY3Rpb24gU2JlKGUsdCl7cmV0dXJuIGUua2V5P1pndChlLmtleSx0KTplLmRldGFpbCYmZS5kZXRhaWwua2V5P1pndChlLmRldGFpbC5rZXksdCk6YmJlKGUua2V5SWRlbnRpZmllcil8fHdiZShlLmtleUNvZGUpfHwiIn1mdW5jdGlvbiBKZ3QoZSx0KXt2YXIgcj1TYmUodCxlLmhhc01vZGlmaWVycyk7cmV0dXJuIHI9PT1lLmtleSYmKCFlLmhhc01vZGlmaWVyc3x8ISF0LnNoaWZ0S2V5PT0hIWUuc2hpZnRLZXkmJiEhdC5jdHJsS2V5PT0hIWUuY3RybEtleSYmISF0LmFsdEtleT09ISFlLmFsdEtleSYmISF0Lm1ldGFLZXk9PSEhZS5tZXRhS2V5KX1mdW5jdGlvbiBNYmUoZSl7cmV0dXJuIGUubGVuZ3RoPT09MT97Y29tYm86ZSxrZXk6ZSxldmVudDoia2V5ZG93biJ9OmUuc3BsaXQoIisiKS5yZWR1Y2UoZnVuY3Rpb24odCxyKXt2YXIgbj1yLnNwbGl0KCI6IiksaT1uWzBdLG89blsxXTtyZXR1cm4gaSBpbiBLZ3Q/KHRbS2d0W2ldXT0hMCx0Lmhhc01vZGlmaWVycz0hMCk6KHQua2V5PWksdC5ldmVudD1vfHwia2V5ZG93biIpLHR9LHtjb21ibzplLnNwbGl0KCI6Iikuc2hpZnQoKX0pfWZ1bmN0aW9uIFFndChlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoIiAiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIE1iZSh0KX0pfXZhciBPbz17cHJvcGVydGllczp7a2V5RXZlbnRUYXJnZXQ6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSxzdG9wS2V5Ym9hcmRFdmVudFByb3BhZ2F0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9ib3VuZEtleUhhbmRsZXJzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfaW1wZXJhdGl2ZUtleUJpbmRpbmdzOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX19LG9ic2VydmVyczpbIl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKGtleUV2ZW50VGFyZ2V0LCBfYm91bmRLZXlIYW5kbGVycykiXSxrZXlCaW5kaW5nczp7fSxyZWdpc3RlcmVkOmZ1bmN0aW9uKCl7dGhpcy5fcHJlcEtleUJpbmRpbmdzKCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fbGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91bmxpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGFkZE93bktleUJpbmRpbmc6ZnVuY3Rpb24oZSx0KXt0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3NbZV09dCx0aGlzLl9wcmVwS2V5QmluZGluZ3MoKSx0aGlzLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKCl9LHJlbW92ZU93bktleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzPXt9LHRoaXMuX3ByZXBLZXlCaW5kaW5ncygpLHRoaXMuX3Jlc2V0S2V5RXZlbnRMaXN0ZW5lcnMoKX0sa2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVFndCh0KSxuPTA7bjxyLmxlbmd0aDsrK24paWYoSmd0KHJbbl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LF9jb2xsZWN0S2V5QmluZGluZ3M6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJlaGF2aW9ycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5QmluZGluZ3N9KTtyZXR1cm4gZS5pbmRleE9mKHRoaXMua2V5QmluZGluZ3MpPT09LTEmJmUucHVzaCh0aGlzLmtleUJpbmRpbmdzKSxlfSxfcHJlcEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dGhpcy5fa2V5QmluZGluZ3M9e30sdGhpcy5fY29sbGVjdEtleUJpbmRpbmdzKCkuZm9yRWFjaChmdW5jdGlvbihyKXtmb3IodmFyIG4gaW4gcil0aGlzLl9hZGRLZXlCaW5kaW5nKG4scltuXSl9LHRoaXMpO2Zvcih2YXIgZSBpbiB0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3MpdGhpcy5fYWRkS2V5QmluZGluZyhlLHRoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5nc1tlXSk7Zm9yKHZhciB0IGluIHRoaXMuX2tleUJpbmRpbmdzKXRoaXMuX2tleUJpbmRpbmdzW3RdLnNvcnQoZnVuY3Rpb24ocixuKXt2YXIgaT1yWzBdLmhhc01vZGlmaWVycyxvPW5bMF0uaGFzTW9kaWZpZXJzO3JldHVybiBpPT09bz8wOmk/LTE6MX0pfSxfYWRkS2V5QmluZGluZzpmdW5jdGlvbihlLHQpe1FndChlKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3RoaXMuX2tleUJpbmRpbmdzW3IuZXZlbnRdPXRoaXMuX2tleUJpbmRpbmdzW3IuZXZlbnRdfHxbXSx0aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XS5wdXNoKFtyLHRdKX0sdGhpcyl9LF9yZXNldEtleUV2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpLHRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKX0sX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKCl7IXRoaXMua2V5RXZlbnRUYXJnZXR8fE9iamVjdC5rZXlzKHRoaXMuX2tleUJpbmRpbmdzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2tleUJpbmRpbmdzW2VdLHI9dGhpcy5fb25LZXlCaW5kaW5nRXZlbnQuYmluZCh0aGlzLHQpO3RoaXMuX2JvdW5kS2V5SGFuZGxlcnMucHVzaChbdGhpcy5rZXlFdmVudFRhcmdldCxlLHJdKSx0aGlzLmtleUV2ZW50VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZSxyKX0sdGhpcyl9LF91bmxpc3RlbktleUV2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQscixuO3RoaXMuX2JvdW5kS2V5SGFuZGxlcnMubGVuZ3RoOyllPXRoaXMuX2JvdW5kS2V5SGFuZGxlcnMucG9wKCksdD1lWzBdLHI9ZVsxXSxuPWVbMl0sdC5yZW1vdmVFdmVudExpc3RlbmVyKHIsbil9LF9vbktleUJpbmRpbmdFdmVudDpmdW5jdGlvbihlLHQpe2lmKHRoaXMuc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbiYmdC5zdG9wUHJvcGFnYXRpb24oKSwhdC5kZWZhdWx0UHJldmVudGVkKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdWzBdLGk9ZVtyXVsxXTtpZihKZ3Qobix0KSYmKHRoaXMuX3RyaWdnZXJLZXlIYW5kbGVyKG4saSx0KSx0LmRlZmF1bHRQcmV2ZW50ZWQpKXJldHVybn19LF90cmlnZ2VyS2V5SGFuZGxlcjpmdW5jdGlvbihlLHQscil7dmFyIG49T2JqZWN0LmNyZWF0ZShlKTtuLmtleWJvYXJkRXZlbnQ9cjt2YXIgaT1uZXcgQ3VzdG9tRXZlbnQoZS5ldmVudCx7ZGV0YWlsOm4sY2FuY2VsYWJsZTohMH0pO3RoaXNbdF0uY2FsbCh0aGlzLGkpLGkuZGVmYXVsdFByZXZlbnRlZCYmci5wcmV2ZW50RGVmYXVsdCgpfX07dmFyIHk5PXtwcm9wZXJ0aWVzOntzY3JvbGxUYXJnZXQ6e3R5cGU6SFRNTEVsZW1lbnQsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFNjcm9sbFRhcmdldH19fSxvYnNlcnZlcnM6WyJfc2Nyb2xsVGFyZ2V0Q2hhbmdlZChzY3JvbGxUYXJnZXQsIGlzQXR0YWNoZWQpIl0sX3Nob3VsZEhhdmVMaXN0ZW5lcjohMCxfc2Nyb2xsVGFyZ2V0Q2hhbmdlZDpmdW5jdGlvbihlLHQpe3ZhciByO2lmKHRoaXMuX29sZFNjcm9sbFRhcmdldCYmKHRoaXMuX3RvZ2dsZVNjcm9sbExpc3RlbmVyKCExLHRoaXMuX29sZFNjcm9sbFRhcmdldCksdGhpcy5fb2xkU2Nyb2xsVGFyZ2V0PW51bGwpLCEhdClpZihlPT09ImRvY3VtZW50Iil0aGlzLnNjcm9sbFRhcmdldD10aGlzLl9kb2M7ZWxzZSBpZih0eXBlb2YgZT09InN0cmluZyIpe3ZhciBuPXRoaXMuZG9tSG9zdDt0aGlzLnNjcm9sbFRhcmdldD1uJiZuLiQ/bi4kW2VdOnp0KHRoaXMub3duZXJEb2N1bWVudCkucXVlcnlTZWxlY3RvcigiIyIrZSl9ZWxzZSB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLl9vbGRTY3JvbGxUYXJnZXQ9ZSx0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcih0aGlzLl9zaG91bGRIYXZlTGlzdGVuZXIsZSkpfSxfc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbigpe30sZ2V0IF9kZWZhdWx0U2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuX2RvY30sZ2V0IF9kb2MoKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudH0sZ2V0IF9zY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5wYWdlWU9mZnNldDp0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A6MH0sZ2V0IF9zY3JvbGxMZWZ0KCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cucGFnZVhPZmZzZXQ6dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdDowfSxzZXQgX3Njcm9sbFRvcChlKXt0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8od2luZG93LnBhZ2VYT2Zmc2V0LGUpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD1lKX0sc2V0IF9zY3JvbGxMZWZ0KGUpe3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5zY3JvbGxUbyhlLHdpbmRvdy5wYWdlWU9mZnNldCk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD1lKX0sc2Nyb2xsOmZ1bmN0aW9uKGUsdCl7dmFyIHI7dHlwZW9mIGU9PSJvYmplY3QiPyhyPWUubGVmdCx0PWUudG9wKTpyPWUscj1yfHwwLHQ9dHx8MCx0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8ocix0KTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxMZWZ0PXIsdGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wPXQpfSxnZXQgX3Njcm9sbFRhcmdldFdpZHRoKCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuaW5uZXJXaWR0aDp0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRXaWR0aDowfSxnZXQgX3Njcm9sbFRhcmdldEhlaWdodCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LmlubmVySGVpZ2h0OnRoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldEhlaWdodDowfSxfaXNWYWxpZFNjcm9sbFRhcmdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNjcm9sbFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fSxfdG9nZ2xlU2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXt2YXIgcj10PT09dGhpcy5fZG9jP3dpbmRvdzp0O2U/dGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyfHwodGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyPXRoaXMuX3Njcm9sbEhhbmRsZXIuYmluZCh0aGlzKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyKSk6dGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyJiYoci5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlciksdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyPW51bGwpfSx0b2dnbGVTY3JvbGxMaXN0ZW5lcjpmdW5jdGlvbihlKXt0aGlzLl9zaG91bGRIYXZlTGlzdGVuZXI9ZSx0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcihlLHRoaXMuc2Nyb2xsVGFyZ2V0KX19O3ZhciB0MHQ9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpob25lfGFkOyg/OiBVOyk/IENQVSkgT1MgKFxkKykvKSxFYmU9dDB0JiZ0MHRbMV0+PTgsZTB0PTMscjB0PSItMTAwMDBweCIsaEU9LTEwMDtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1tYXgtZGV2aWNlLXBpeGVsLXJhdGlvOiAxKSB7CiAgICAgICAgOmhvc3QgewogICAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICNpdGVtcyB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1saXN0LWl0ZW1zLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2dyaWRdKSkgI2l0ZW1zID4gOjpzbG90dGVkKCopIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2l0ZW1zID4gOjpzbG90dGVkKCopIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGFycmF5LXNlbGVjdG9yIGlkPSJzZWxlY3RvciIgaXRlbXM9Int7aXRlbXN9fSIgc2VsZWN0ZWQ9Int7c2VsZWN0ZWRJdGVtc319IiBzZWxlY3RlZC1pdGVtPSJ7e3NlbGVjdGVkSXRlbX19Ij48L2FycmF5LXNlbGVjdG9yPgoKICAgIDxkaXYgaWQ9Iml0ZW1zIj4KICAgICAgPHNsb3Q+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6Imlyb24tbGlzdCIscHJvcGVydGllczp7aXRlbXM6e3R5cGU6QXJyYXl9LGFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXRlbSJ9LGluZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbmRleCJ9LHNlbGVjdGVkQXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJzZWxlY3RlZCJ9LGdyaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9ncmlkQ2hhbmdlZCJ9LHNlbGVjdGlvbkVuYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHNlbGVjdGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sbXVsdGlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2Nyb2xsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowfX0sb2JzZXJ2ZXJzOlsiX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSIsIl9zZWxlY3Rpb25FbmFibGVkQ2hhbmdlZChzZWxlY3Rpb25FbmFibGVkKSIsIl9tdWx0aVNlbGVjdGlvbkNoYW5nZWQobXVsdGlTZWxlY3Rpb24pIiwiX3NldE92ZXJmbG93KHNjcm9sbFRhcmdldCwgc2Nyb2xsT2Zmc2V0KSJdLGJlaGF2aW9yczpbSGd0LEpzLHk5LFdndF0sX3JhdGlvOi41LF9zY3JvbGxlclBhZGRpbmdUb3A6MCxfc2Nyb2xsUG9zaXRpb246MCxfcGh5c2ljYWxTaXplOjAsX3BoeXNpY2FsQXZlcmFnZTowLF9waHlzaWNhbEF2ZXJhZ2VDb3VudDowLF9waHlzaWNhbFRvcDowLF92aXJ0dWFsQ291bnQ6MCxfZXN0U2Nyb2xsSGVpZ2h0OjAsX3Njcm9sbEhlaWdodDowLF92aWV3cG9ydEhlaWdodDowLF92aWV3cG9ydFdpZHRoOjAsX3BoeXNpY2FsSXRlbXM6bnVsbCxfcGh5c2ljYWxTaXplczpudWxsLF9maXJzdFZpc2libGVJbmRleFZhbDpudWxsLF9sYXN0VmlzaWJsZUluZGV4VmFsOm51bGwsX21heFBhZ2VzOjIsX2ZvY3VzZWRJdGVtOm51bGwsX2ZvY3VzZWRWaXJ0dWFsSW5kZXg6LTEsX2ZvY3VzZWRQaHlzaWNhbEluZGV4Oi0xLF9vZmZzY3JlZW5Gb2N1c2VkSXRlbTpudWxsLF9mb2N1c0JhY2tmaWxsSXRlbTpudWxsLF9pdGVtc1BlclJvdzoxLF9pdGVtV2lkdGg6MCxfcm93SGVpZ2h0OjAsX3RlbXBsYXRlQ29zdDowLF9wYXJlbnRNb2RlbDohMCxnZXQgX3BoeXNpY2FsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3BoeXNpY2FsU2l6ZX0sZ2V0IF9zY3JvbGxCb3R0b20oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfdmlydHVhbEVuZCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xfSxnZXQgX2hpZGRlbkNvbnRlbnRTaXplKCl7dmFyIGU9dGhpcy5ncmlkP3RoaXMuX3BoeXNpY2FsUm93cyp0aGlzLl9yb3dIZWlnaHQ6dGhpcy5fcGh5c2ljYWxTaXplO3JldHVybiBlLXRoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX2l0ZW1zUGFyZW50KCl7cmV0dXJuIHp0KHp0KHRoaXMuX3VzZXJUZW1wbGF0ZSkucGFyZW50Tm9kZSl9LGdldCBfbWF4U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl92aWV3cG9ydEhlaWdodCt0aGlzLl9zY3JvbGxPZmZzZXR9LGdldCBfbWF4VmlydHVhbFN0YXJ0KCl7dmFyIGU9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyh0aGlzLl92aXJ0dWFsQ291bnQpO3JldHVybiBNYXRoLm1heCgwLGUtdGhpcy5fcGh5c2ljYWxDb3VudCl9LHNldCBfdmlydHVhbFN0YXJ0KGUpe2U9dGhpcy5fY2xhbXAoZSwwLHRoaXMuX21heFZpcnR1YWxTdGFydCksdGhpcy5ncmlkJiYoZT1lLWUldGhpcy5faXRlbXNQZXJSb3cpLHRoaXMuX3ZpcnR1YWxTdGFydFZhbD1lfSxnZXQgX3ZpcnR1YWxTdGFydCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnRWYWx8fDB9LHNldCBfcGh5c2ljYWxTdGFydChlKXtlPWUldGhpcy5fcGh5c2ljYWxDb3VudCxlPDAmJihlPXRoaXMuX3BoeXNpY2FsQ291bnQrZSksdGhpcy5ncmlkJiYoZT1lLWUldGhpcy5faXRlbXNQZXJSb3cpLHRoaXMuX3BoeXNpY2FsU3RhcnRWYWw9ZX0sZ2V0IF9waHlzaWNhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsU3RhcnRWYWx8fDB9LGdldCBfcGh5c2ljYWxFbmQoKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCt0aGlzLl9waHlzaWNhbENvdW50LTEpJXRoaXMuX3BoeXNpY2FsQ291bnR9LHNldCBfcGh5c2ljYWxDb3VudChlKXt0aGlzLl9waHlzaWNhbENvdW50VmFsPWV9LGdldCBfcGh5c2ljYWxDb3VudCgpe3JldHVybiB0aGlzLl9waHlzaWNhbENvdW50VmFsfHwwfSxnZXQgX29wdFBoeXNpY2FsU2l6ZSgpe3JldHVybiB0aGlzLl92aWV3cG9ydEhlaWdodD09PTA/MS8wOnRoaXMuX3ZpZXdwb3J0SGVpZ2h0KnRoaXMuX21heFBhZ2VzfSxnZXQgX2lzVmlzaWJsZSgpe3JldHVybiBCb29sZWFuKHRoaXMub2Zmc2V0V2lkdGh8fHRoaXMub2Zmc2V0SGVpZ2h0KX0sZ2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7dmFyIGU9dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw7aWYoZT09bnVsbCl7dmFyIHQ9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O2U9dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHIsbil7aWYodCs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHIpLHQ+dGhpcy5fc2Nyb2xsUG9zaXRpb24pcmV0dXJuIHRoaXMuZ3JpZD9uLW4ldGhpcy5faXRlbXNQZXJSb3c6bjtpZih0aGlzLmdyaWQmJnRoaXMuX3ZpcnR1YWxDb3VudC0xPT09bilyZXR1cm4gbi1uJXRoaXMuX2l0ZW1zUGVyUm93fSl8fDAsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9ZX1yZXR1cm4gZX0sZ2V0IGxhc3RWaXNpYmxlSW5kZXgoKXt2YXIgZT10aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe2lmKHRoaXMuZ3JpZCllPU1hdGgubWluKHRoaXMuX3ZpcnR1YWxDb3VudCx0aGlzLmZpcnN0VmlzaWJsZUluZGV4K3RoaXMuX2VzdFJvd3NJblZpZXcqdGhpcy5faXRlbXNQZXJSb3ctMSk7ZWxzZXt2YXIgdD10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQ7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHIsbil7dDx0aGlzLl9zY3JvbGxCb3R0b20mJihlPW4pLHQrPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChyKX0pfXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9ZX1yZXR1cm4gZX0sZ2V0IF9kZWZhdWx0U2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXN9LGdldCBfdmlydHVhbFJvd0NvdW50KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aXJ0dWFsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpfSxnZXQgX2VzdFJvd3NJblZpZXcoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuX3ZpZXdwb3J0SGVpZ2h0L3RoaXMuX3Jvd0hlaWdodCl9LGdldCBfcGh5c2ljYWxSb3dzKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9zY3JvbGxPZmZzZXQoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wK3RoaXMuc2Nyb2xsT2Zmc2V0fSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2RpZEZvY3VzLmJpbmQodGhpcyksITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsTmkpLHRoaXMubGlzdGVuKHRoaXMsImlyb24tcmVzaXplIiwiX3Jlc2l6ZUhhbmRsZXIiKSx0aGlzLmxpc3Rlbih0aGlzLCJrZXlkb3duIiwiX2tleWRvd25IYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIiksdGhpcy51bmxpc3Rlbih0aGlzLCJrZXlkb3duIiwiX2tleWRvd25IYW5kbGVyIil9LF9zZXRPdmVyZmxvdzpmdW5jdGlvbihlKXt0aGlzLnN0eWxlLndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nPWU9PT10aGlzPyJ0b3VjaCI6IiIsdGhpcy5zdHlsZS5vdmVyZmxvd1k9ZT09PXRoaXM/ImF1dG8iOiIiLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsTmkpfSx1cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXM6ZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTt0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3A9dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzPzA6cGFyc2VJbnQoZVsicGFkZGluZy10b3AiXSwxMCksdGhpcy5faXNSVEw9Qm9vbGVhbihlLmRpcmVjdGlvbj09PSJydGwiKSx0aGlzLl92aWV3cG9ydFdpZHRoPXRoaXMuJC5pdGVtcy5vZmZzZXRXaWR0aCx0aGlzLl92aWV3cG9ydEhlaWdodD10aGlzLl9zY3JvbGxUYXJnZXRIZWlnaHQsdGhpcy5ncmlkJiZ0aGlzLl91cGRhdGVHcmlkTWV0cmljcygpfSxfc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbigpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5fbWF4U2Nyb2xsVG9wLHRoaXMuX3Njcm9sbFRvcCkpLHQ9ZS10aGlzLl9zY3JvbGxQb3NpdGlvbixyPXQ+PTA7aWYodGhpcy5fc2Nyb2xsUG9zaXRpb249ZSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCxNYXRoLmFicyh0KT50aGlzLl9waHlzaWNhbFNpemUmJnRoaXMuX3BoeXNpY2FsU2l6ZT4wKXt0PXQtdGhpcy5fc2Nyb2xsT2Zmc2V0O3ZhciBuPU1hdGgucm91bmQodC90aGlzLl9waHlzaWNhbEF2ZXJhZ2UpKnRoaXMuX2l0ZW1zUGVyUm93O3RoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrbix0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrbix0aGlzLl9waHlzaWNhbFRvcD1NYXRoLm1pbihNYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydC90aGlzLl9pdGVtc1BlclJvdykqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLHRoaXMuX3Njcm9sbFBvc2l0aW9uKSx0aGlzLl91cGRhdGUoKX1lbHNlIGlmKHRoaXMuX3BoeXNpY2FsQ291bnQ+MCl7dmFyIGk9dGhpcy5fZ2V0UmV1c2FibGVzKHIpO3I/KHRoaXMuX3BoeXNpY2FsVG9wPWkucGh5c2ljYWxUb3AsdGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtpLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtpLmluZGV4ZXMubGVuZ3RoKToodGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydC1pLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydC1pLmluZGV4ZXMubGVuZ3RoKSx0aGlzLl91cGRhdGUoaS5pbmRleGVzLHI/bnVsbDppLmluZGV4ZXMpLHRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcywwKSxjaSl9fSxfZ2V0UmV1c2FibGVzOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLG89W10sYT10aGlzLl9oaWRkZW5Db250ZW50U2l6ZSp0aGlzLl9yYXRpbyxzPXRoaXMuX3ZpcnR1YWxTdGFydCxsPXRoaXMuX3ZpcnR1YWxFbmQsYz10aGlzLl9waHlzaWNhbENvdW50LHU9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0LGg9dGhpcy5fcGh5c2ljYWxCb3R0b20rdGhpcy5fc2Nyb2xsT2Zmc2V0LGY9dGhpcy5fc2Nyb2xsUG9zaXRpb24scD10aGlzLl9zY3JvbGxCb3R0b207Zm9yKGU/KHQ9dGhpcy5fcGh5c2ljYWxTdGFydCxyPXRoaXMuX3BoeXNpY2FsRW5kLG49Zi11KToodD10aGlzLl9waHlzaWNhbEVuZCxyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj1oLXApO2k9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpLG49bi1pLCEoby5sZW5ndGg+PWN8fG48PWEpOylpZihlKXtpZihsK28ubGVuZ3RoKzE+PXRoaXMuX3ZpcnR1YWxDb3VudHx8dStpPj1mLXRoaXMuX3Njcm9sbE9mZnNldClicmVhaztvLnB1c2godCksdT11K2ksdD0odCsxKSVjfWVsc2V7aWYocy1vLmxlbmd0aDw9MHx8dSt0aGlzLl9waHlzaWNhbFNpemUtaTw9cClicmVhaztvLnB1c2godCksdT11LWksdD10PT09MD9jLTE6dC0xfXJldHVybntpbmRleGVzOm8scGh5c2ljYWxUb3A6dS10aGlzLl9zY3JvbGxPZmZzZXR9fSxfdXBkYXRlOmZ1bmN0aW9uKGUsdCl7aWYoIShlJiZlLmxlbmd0aD09PTB8fHRoaXMuX3BoeXNpY2FsQ291bnQ9PT0wKSl7aWYodGhpcy5fbWFuYWdlRm9jdXMoKSx0aGlzLl9hc3NpZ25Nb2RlbHMoZSksdGhpcy5fdXBkYXRlTWV0cmljcyhlKSx0KWZvcig7dC5sZW5ndGg7KXt2YXIgcj10LnBvcCgpO3RoaXMuX3BoeXNpY2FsVG9wLT10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQocil9dGhpcy5fcG9zaXRpb25JdGVtcygpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpfX0sX2NyZWF0ZVBvb2w6ZnVuY3Rpb24oZSl7dGhpcy5fZW5zdXJlVGVtcGxhdGl6ZWQoKTt2YXIgdCxyLG49bmV3IEFycmF5KGUpO2Zvcih0PTA7dDxlO3QrKylyPXRoaXMuc3RhbXAobnVsbCksblt0XT1yLnJvb3QucXVlcnlTZWxlY3RvcigiKiIpLHRoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKHIucm9vdCk7cmV0dXJuIG59LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsQm90dG9tIT0wJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQrZSxlMHQsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCk7aWYodD10aGlzLl9jb252ZXJ0SW5kZXhUb0NvbXBsZXRlUm93KHQpLHRoaXMuZ3JpZCl7dmFyIHI9dCV0aGlzLl9pdGVtc1BlclJvdztyJiZ0LXI8PXRoaXMuX3BoeXNpY2FsQ291bnQmJih0Kz10aGlzLl9pdGVtc1BlclJvdyksdC09cn12YXIgbj10LXRoaXMuX3BoeXNpY2FsQ291bnQsaT1NYXRoLnJvdW5kKHRoaXMuX3BoeXNpY2FsQ291bnQqLjUpO2lmKCEobjwwKSl7aWYobj4wKXt2YXIgbz13aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7W10ucHVzaC5hcHBseSh0aGlzLl9waHlzaWNhbEl0ZW1zLHRoaXMuX2NyZWF0ZVBvb2wobikpO2Zvcih2YXIgYT0wO2E8bjthKyspdGhpcy5fcGh5c2ljYWxTaXplcy5wdXNoKDApO3RoaXMuX3BoeXNpY2FsQ291bnQ9dGhpcy5fcGh5c2ljYWxDb3VudCtuLHRoaXMuX3BoeXNpY2FsU3RhcnQ+dGhpcy5fcGh5c2ljYWxFbmQmJnRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSYmdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KTx0aGlzLl9waHlzaWNhbEVuZCYmKHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtuKSx0aGlzLl91cGRhdGUoKSx0aGlzLl90ZW1wbGF0ZUNvc3Q9KHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKS1vKS9uLGk9TWF0aC5yb3VuZCh0aGlzLl9waHlzaWNhbENvdW50Ki41KX10aGlzLl92aXJ0dWFsRW5kPj10aGlzLl92aXJ0dWFsQ291bnQtMXx8aT09PTB8fCh0aGlzLl9pc0NsaWVudEZ1bGwoKT90aGlzLl9waHlzaWNhbFNpemU8dGhpcy5fb3B0UGh5c2ljYWxTaXplJiZ0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsdGhpcy5fY2xhbXAoTWF0aC5yb3VuZCg1MC90aGlzLl90ZW1wbGF0ZUNvc3QpLDEsaSkpLGt4KTp0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsaSksY2kpKX19LF9yZW5kZXI6ZnVuY3Rpb24oKXtpZighKCF0aGlzLmlzQXR0YWNoZWR8fCF0aGlzLl9pc1Zpc2libGUpKWlmKHRoaXMuX3BoeXNpY2FsQ291bnQhPT0wKXt2YXIgZT10aGlzLl9nZXRSZXVzYWJsZXMoITApO3RoaXMuX3BoeXNpY2FsVG9wPWUucGh5c2ljYWxUb3AsdGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtlLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtlLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3VwZGF0ZShlLmluZGV4ZXMpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApfWVsc2UgdGhpcy5fdmlydHVhbENvdW50PjAmJih0aGlzLnVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllcygpLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKGUwdCkpfSxfZW5zdXJlVGVtcGxhdGl6ZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jdG9yKXt0aGlzLl91c2VyVGVtcGxhdGU9dGhpcy5xdWVyeUVmZmVjdGl2ZUNoaWxkcmVuKCJ0ZW1wbGF0ZSIpLHRoaXMuX3VzZXJUZW1wbGF0ZXx8Y29uc29sZS53YXJuKCJpcm9uLWxpc3QgcmVxdWlyZXMgYSB0ZW1wbGF0ZSB0byBiZSBwcm92aWRlZCBpbiBsaWdodC1kb20iKTt2YXIgZT17fTtlLl9fa2V5X189ITAsZVt0aGlzLmFzXT0hMCxlW3RoaXMuaW5kZXhBc109ITAsZVt0aGlzLnNlbGVjdGVkQXNdPSEwLGUudGFiSW5kZXg9ITAsdGhpcy5faW5zdGFuY2VQcm9wcz1lLHRoaXMudGVtcGxhdGl6ZSh0aGlzLl91c2VyVGVtcGxhdGUsdGhpcy5tdXRhYmxlRGF0YSl9fSxfZ3JpZENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0eXBlb2YgdCE9InVuZGVmaW5lZCImJih0aGlzLm5vdGlmeVJlc2l6ZSgpLHVpKCksZSYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKSl9LF9pdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oZSl7aWYoZS5wYXRoPT09Iml0ZW1zIil0aGlzLl92aXJ0dWFsU3RhcnQ9MCx0aGlzLl9waHlzaWNhbFRvcD0wLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjAsdGhpcy5fcGh5c2ljYWxJbmRleEZvcktleT17fSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9waHlzaWNhbENvdW50PXRoaXMuX3BoeXNpY2FsQ291bnR8fDAsdGhpcy5fcGh5c2ljYWxJdGVtcz10aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSx0aGlzLl9waHlzaWNhbFNpemVzPXRoaXMuX3BoeXNpY2FsU2l6ZXN8fFtdLHRoaXMuX3BoeXNpY2FsU3RhcnQ9MCx0aGlzLl9zY3JvbGxUb3A+dGhpcy5fc2Nyb2xsT2Zmc2V0JiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKDApLHRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCksdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSk7ZWxzZSBpZihlLnBhdGg9PT0iaXRlbXMuc3BsaWNlcyIpe3RoaXMuX2FkanVzdFZpcnR1YWxJbmRleChlLnZhbHVlLmluZGV4U3BsaWNlcyksdGhpcy5fdmlydHVhbENvdW50PXRoaXMuaXRlbXM/dGhpcy5pdGVtcy5sZW5ndGg6MDt2YXIgdD1lLnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKGZ1bmN0aW9uKGkpe3JldHVybiBpLmFkZGVkQ291bnQ+MHx8aS5yZW1vdmVkLmxlbmd0aD4wfSk7aWYodCl7dmFyIHI9dGhpcy5fZ2V0QWN0aXZlRWxlbWVudCgpO3RoaXMuY29udGFpbnMocikmJnIuYmx1cigpfXZhciBuPWUudmFsdWUuaW5kZXhTcGxpY2VzLnNvbWUoZnVuY3Rpb24oaSl7cmV0dXJuIGkuaW5kZXgraS5hZGRlZENvdW50Pj10aGlzLl92aXJ0dWFsU3RhcnQmJmkuaW5kZXg8PXRoaXMuX3ZpcnR1YWxFbmR9LHRoaXMpOyghdGhpcy5faXNDbGllbnRGdWxsKCl8fG4pJiZ0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKX1lbHNlIGUucGF0aCE9PSJpdGVtcy5sZW5ndGgiJiZ0aGlzLl9mb3J3YXJkSXRlbVBhdGgoZS5wYXRoLGUudmFsdWUpfSxfZm9yd2FyZEl0ZW1QYXRoOmZ1bmN0aW9uKGUsdCl7ZT1lLnNsaWNlKDYpO3ZhciByPWUuaW5kZXhPZigiLiIpO3I9PT0tMSYmKHI9ZS5sZW5ndGgpO3ZhciBuLGksbyxhPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKSxzPXBhcnNlSW50KGUuc3Vic3RyaW5nKDAsciksMTApO249dGhpcy5faXNJbmRleFJlbmRlcmVkKHMpLG4/KGk9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleChzKSxvPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbaV0pKTphJiYobz1hKSwhKCFvfHxvW3RoaXMuaW5kZXhBc10hPT1zKSYmKGU9ZS5zdWJzdHJpbmcocisxKSxlPXRoaXMuYXMrKGU/Ii4iK2U6IiIpLG8uX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChlLHQsITEsITApLG8uX2ZsdXNoUHJvcGVydGllcyYmby5fZmx1c2hQcm9wZXJ0aWVzKCksbiYmKHRoaXMuX3VwZGF0ZU1ldHJpY3MoW2ldKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCkpKX0sX2FkanVzdFZpcnR1YWxJbmRleDpmdW5jdGlvbihlKXtlLmZvckVhY2goZnVuY3Rpb24odCl7aWYodC5yZW1vdmVkLmZvckVhY2godGhpcy5fcmVtb3ZlSXRlbSx0aGlzKSx0LmluZGV4PHRoaXMuX3ZpcnR1YWxTdGFydCl7dmFyIHI9TWF0aC5tYXgodC5hZGRlZENvdW50LXQucmVtb3ZlZC5sZW5ndGgsdC5pbmRleC10aGlzLl92aXJ0dWFsU3RhcnQpO3RoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrcix0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Pj0wJiYodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4K3IpfX0sdGhpcyl9LF9yZW1vdmVJdGVtOmZ1bmN0aW9uKGUpe3RoaXMuJC5zZWxlY3Rvci5kZXNlbGVjdChlKSx0aGlzLl9mb2N1c2VkSXRlbSYmdGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fZm9jdXNlZEl0ZW0pW3RoaXMuYXNdPT09ZSYmdGhpcy5fcmVtb3ZlRm9jdXNlZEl0ZW0oKX0sX2l0ZXJhdGVJdGVtczpmdW5jdGlvbihlLHQpe3ZhciByLG4saSxvO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZ0KXtmb3Iobz0wO288dC5sZW5ndGg7bysrKWlmKHI9dFtvXSxuPXRoaXMuX2NvbXB1dGVWaWR4KHIpLChpPWUuY2FsbCh0aGlzLHIsbikpIT1udWxsKXJldHVybiBpfWVsc2V7Zm9yKHI9dGhpcy5fcGh5c2ljYWxTdGFydCxuPXRoaXMuX3ZpcnR1YWxTdGFydDtyPHRoaXMuX3BoeXNpY2FsQ291bnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaTtmb3Iocj0wO3I8dGhpcy5fcGh5c2ljYWxTdGFydDtyKyssbisrKWlmKChpPWUuY2FsbCh0aGlzLHIsbikpIT1udWxsKXJldHVybiBpfX0sX2NvbXB1dGVWaWR4OmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl9waHlzaWNhbFN0YXJ0P3RoaXMuX3ZpcnR1YWxTdGFydCsoZS10aGlzLl9waHlzaWNhbFN0YXJ0KTp0aGlzLl92aXJ0dWFsU3RhcnQrKHRoaXMuX3BoeXNpY2FsQ291bnQtdGhpcy5fcGh5c2ljYWxTdGFydCkrZX0sX2Fzc2lnbk1vZGVsczpmdW5jdGlvbihlKXt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLl9waHlzaWNhbEl0ZW1zW3RdLGk9dGhpcy5pdGVtcyYmdGhpcy5pdGVtc1tyXTtpZihpIT1udWxsKXt2YXIgbz10aGlzLm1vZGVsRm9yRWxlbWVudChuKTtvLl9fa2V5X189bnVsbCx0aGlzLl9mb3J3YXJkUHJvcGVydHkobyx0aGlzLmFzLGkpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShvLHRoaXMuc2VsZWN0ZWRBcyx0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZChpKSksdGhpcy5fZm9yd2FyZFByb3BlcnR5KG8sdGhpcy5pbmRleEFzLHIpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShvLCJ0YWJJbmRleCIsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD09PXI/MDotMSksdGhpcy5fcGh5c2ljYWxJbmRleEZvcktleVtvLl9fa2V5X19dPXQsby5fZmx1c2hQcm9wZXJ0aWVzJiZvLl9mbHVzaFByb3BlcnRpZXMoITApLG4ucmVtb3ZlQXR0cmlidXRlKCJoaWRkZW4iKX1lbHNlIG4uc2V0QXR0cmlidXRlKCJoaWRkZW4iLCIiKX0sZSl9LF91cGRhdGVNZXRyaWNzOmZ1bmN0aW9uKGUpe3VpKCk7dmFyIHQ9MCxyPTAsbj10aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCxpPXRoaXMuX3BoeXNpY2FsQXZlcmFnZTt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obyxhKXtyKz10aGlzLl9waHlzaWNhbFNpemVzW29dLHRoaXMuX3BoeXNpY2FsU2l6ZXNbb109dGhpcy5fcGh5c2ljYWxJdGVtc1tvXS5vZmZzZXRIZWlnaHQsdCs9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCs9dGhpcy5fcGh5c2ljYWxTaXplc1tvXT8xOjB9LGUpLHRoaXMuZ3JpZD8odGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKSx0aGlzLl9waHlzaWNhbFNpemU9TWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3Jvd0hlaWdodCk6KHI9dGhpcy5faXRlbXNQZXJSb3c9PT0xP3I6TWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3Jvd0hlaWdodCx0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK3Qtcix0aGlzLl9pdGVtc1BlclJvdz0xKSx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PW4mJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgoaSpuK3QpL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF91cGRhdGVHcmlkTWV0cmljczpmdW5jdGlvbigpe3RoaXMuX2l0ZW1XaWR0aD10aGlzLl9waHlzaWNhbENvdW50PjA/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDoyMDAsdGhpcy5fcm93SGVpZ2h0PXRoaXMuX3BoeXNpY2FsQ291bnQ+MD90aGlzLl9waHlzaWNhbEl0ZW1zWzBdLm9mZnNldEhlaWdodDoyMDAsdGhpcy5faXRlbXNQZXJSb3c9dGhpcy5faXRlbVdpZHRoP01hdGguZmxvb3IodGhpcy5fdmlld3BvcnRXaWR0aC90aGlzLl9pdGVtV2lkdGgpOnRoaXMuX2l0ZW1zUGVyUm93fSxfcG9zaXRpb25JdGVtczpmdW5jdGlvbigpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7dmFyIGU9dGhpcy5fcGh5c2ljYWxUb3A7aWYodGhpcy5ncmlkKXt2YXIgdD10aGlzLl9pdGVtc1BlclJvdyp0aGlzLl9pdGVtV2lkdGgscj0odGhpcy5fdmlld3BvcnRXaWR0aC10KS8yO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihuLGkpe3ZhciBvPWkldGhpcy5faXRlbXNQZXJSb3csYT1NYXRoLmZsb29yKG8qdGhpcy5faXRlbVdpZHRoK3IpO3RoaXMuX2lzUlRMJiYoYT1hKi0xKSx0aGlzLnRyYW5zbGF0ZTNkKGErInB4IixlKyJweCIsMCx0aGlzLl9waHlzaWNhbEl0ZW1zW25dKSx0aGlzLl9zaG91bGRSZW5kZXJOZXh0Um93KGkpJiYoZSs9dGhpcy5fcm93SGVpZ2h0KX0pfWVsc2V7bGV0IG49W107dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKGksbyl7bGV0IGE9dGhpcy5fcGh5c2ljYWxJdGVtc1tpXTt0aGlzLnRyYW5zbGF0ZTNkKDAsZSsicHgiLDAsYSksZSs9dGhpcy5fcGh5c2ljYWxTaXplc1tpXTtsZXQgcz1hLmlkO3MmJm4ucHVzaChzKX0pLG4ubGVuZ3RoJiZ0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1vd25zIixuLmpvaW4oIiAiKSl9fSxfZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdyaWQ/dGhpcy5fY29tcHV0ZVZpZHgoZSkldGhpcy5faXRlbXNQZXJSb3chPT10aGlzLl9pdGVtc1BlclJvdy0xPzA6dGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsU2l6ZXNbZV19LF9zaG91bGRSZW5kZXJOZXh0Um93OmZ1bmN0aW9uKGUpe3JldHVybiBlJXRoaXMuX2l0ZW1zUGVyUm93PT09dGhpcy5faXRlbXNQZXJSb3ctMX0sX2FkanVzdFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fdmlydHVhbFN0YXJ0PT09MD90aGlzLl9waHlzaWNhbFRvcDpNYXRoLm1pbih0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl9waHlzaWNhbFRvcCwwKTtpZihlIT09MCl7dGhpcy5fcGh5c2ljYWxUb3A9dGhpcy5fcGh5c2ljYWxUb3AtZTt2YXIgdD10aGlzLl9zY3JvbGxQb3NpdGlvbjshRWJlJiZ0PjAmJnRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24odC1lKX19LF9yZXNldFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuc2Nyb2xsVGFyZ2V0JiZlPj0wJiYodGhpcy5fc2Nyb2xsVG9wPWUsdGhpcy5fc2Nyb2xsUG9zaXRpb249dGhpcy5fc2Nyb2xsVG9wKX0sX3VwZGF0ZVNjcm9sbGVyU2l6ZTpmdW5jdGlvbihlKXt0aGlzLmdyaWQ/dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuX3ZpcnR1YWxSb3dDb3VudCp0aGlzLl9yb3dIZWlnaHQ6dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuX3BoeXNpY2FsQm90dG9tK01hdGgubWF4KHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCwwKSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsZT1lfHx0aGlzLl9zY3JvbGxIZWlnaHQ9PT0wLGU9ZXx8dGhpcy5fc2Nyb2xsUG9zaXRpb24+PXRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9waHlzaWNhbFNpemUsZT1lfHx0aGlzLmdyaWQmJnRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ8dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LChlfHxNYXRoLmFicyh0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fc2Nyb2xsSGVpZ2h0KT49dGhpcy5fdmlld3BvcnRIZWlnaHQpJiYodGhpcy4kLml0ZW1zLnN0eWxlLmhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQrInB4Iix0aGlzLl9zY3JvbGxIZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KX0sc2Nyb2xsVG9JdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sc2Nyb2xsVG9JbmRleDpmdW5jdGlvbihlKXtpZighKHR5cGVvZiBlIT0ibnVtYmVyInx8ZTwwfHxlPnRoaXMuaXRlbXMubGVuZ3RoLTEpJiYodWkoKSx0aGlzLl9waHlzaWNhbENvdW50IT09MCkpe2U9dGhpcy5fY2xhbXAoZSwwLHRoaXMuX3ZpcnR1YWxDb3VudC0xKSwoIXRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKXx8ZT49dGhpcy5fbWF4VmlydHVhbFN0YXJ0KSYmKHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLmdyaWQ/ZS10aGlzLl9pdGVtc1BlclJvdyoyOmUtMSksdGhpcy5fbWFuYWdlRm9jdXMoKSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSx0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZTtmb3IodmFyIHQ9dGhpcy5fcGh5c2ljYWxTdGFydCxyPXRoaXMuX3ZpcnR1YWxTdGFydCxuPTAsaT10aGlzLl9oaWRkZW5Db250ZW50U2l6ZTtyPGUmJm48PWk7KW49bit0aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQodCksdD0odCsxKSV0aGlzLl9waHlzaWNhbENvdW50LHIrKzt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoITApLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCtuKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbH19LF9yZXNldEF2ZXJhZ2U6ZnVuY3Rpb24oKXt0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9MCx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudD0wfSxfcmVzaXplSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIixmdW5jdGlvbigpe3RoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2lzVmlzaWJsZT8odGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCEwKSx0aGlzLl9yZXNldEF2ZXJhZ2UoKSx0aGlzLl9yZW5kZXIoKSk6dGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMSl9LE5pKX0sc2VsZWN0SXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoZSkpfSxzZWxlY3RJbmRleDpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7aWYoIXRoaXMubXVsdGlTZWxlY3Rpb24mJnRoaXMuc2VsZWN0ZWRJdGVtJiZ0aGlzLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZSldKTt0JiYodFt0aGlzLnNlbGVjdGVkQXNdPSEwKSx0aGlzLnVwZGF0ZVNpemVGb3JJbmRleChlKX10aGlzLiQuc2VsZWN0b3Iuc2VsZWN0SW5kZXgoZSl9fSxkZXNlbGVjdEl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGVzZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoZSkpfSxkZXNlbGVjdEluZGV4OmZ1bmN0aW9uKGUpe2lmKCEoZTwwfHxlPj10aGlzLl92aXJ0dWFsQ291bnQpKXtpZih0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSkpe3ZhciB0PXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleChlKV0pO3RbdGhpcy5zZWxlY3RlZEFzXT0hMSx0aGlzLnVwZGF0ZVNpemVGb3JJbmRleChlKX10aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3RJbmRleChlKX19LHRvZ2dsZVNlbGVjdGlvbkZvckl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudG9nZ2xlU2VsZWN0aW9uRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sdG9nZ2xlU2VsZWN0aW9uRm9ySW5kZXg6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZD90aGlzLiQuc2VsZWN0b3IuaXNJbmRleFNlbGVjdGVkKGUpOnRoaXMuJC5zZWxlY3Rvci5pc1NlbGVjdGVkKHRoaXMuaXRlbXNbZV0pO3Q/dGhpcy5kZXNlbGVjdEluZGV4KGUpOnRoaXMuc2VsZWN0SW5kZXgoZSl9LGNsZWFyU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKGUsdCl7dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1tlXSlbdGhpcy5zZWxlY3RlZEFzXT0hMX0pLHRoaXMuJC5zZWxlY3Rvci5jbGVhclNlbGVjdGlvbigpfSxfc2VsZWN0aW9uRW5hYmxlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZT90aGlzLmxpc3Rlbjp0aGlzLnVubGlzdGVuO3QuY2FsbCh0aGlzLHRoaXMsInRhcCIsIl9zZWxlY3Rpb25IYW5kbGVyIil9LF9zZWxlY3Rpb25IYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubW9kZWxGb3JFbGVtZW50KGUudGFyZ2V0KTtpZighIXQpe3ZhciByLG4saT16dChlKS5wYXRoWzBdLG89dGhpcy5fZ2V0QWN0aXZlRWxlbWVudCgpLGE9dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRbdGhpcy5pbmRleEFzXSldO2kubG9jYWxOYW1lPT09ImlucHV0Inx8aS5sb2NhbE5hbWU9PT0iYnV0dG9uInx8aS5sb2NhbE5hbWU9PT0ic2VsZWN0Inx8KHI9dC50YWJJbmRleCx0LnRhYkluZGV4PWhFLG49bz9vLnRhYkluZGV4Oi0xLHQudGFiSW5kZXg9ciwhKG8mJmEhPT1vJiZhLmNvbnRhaW5zKG8pJiZuIT09aEUpJiZ0aGlzLnRvZ2dsZVNlbGVjdGlvbkZvckl0ZW0odFt0aGlzLmFzXSkpfX0sX211bHRpU2VsZWN0aW9uQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLmNsZWFyU2VsZWN0aW9uKCksdGhpcy4kLnNlbGVjdG9yLm11bHRpPWV9LHVwZGF0ZVNpemVGb3JJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnVwZGF0ZVNpemVGb3JJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoZSkpfSx1cGRhdGVTaXplRm9ySW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKSYmKHRoaXMuX3VwZGF0ZU1ldHJpY3MoW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZSldKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCkpLG51bGx9LF9tYW5hZ2VGb2N1czpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg7ZT49MCYmZTx0aGlzLl92aXJ0dWFsQ291bnQ/dGhpcy5faXNJbmRleFJlbmRlcmVkKGUpP3RoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpOnRoaXMuX2NyZWF0ZUZvY3VzQmFja2ZpbGxJdGVtKCk6dGhpcy5fdmlydHVhbENvdW50PjAmJnRoaXMuX3BoeXNpY2FsQ291bnQ+MCYmKHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX3BoeXNpY2FsU3RhcnQsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD10aGlzLl92aXJ0dWFsU3RhcnQsdGhpcy5fZm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9waHlzaWNhbFN0YXJ0XSl9LF9jb252ZXJ0SW5kZXhUb0NvbXBsZXRlUm93OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pdGVtc1BlclJvdz10aGlzLl9pdGVtc1BlclJvd3x8MSx0aGlzLmdyaWQ/TWF0aC5jZWlsKGUvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX2l0ZW1zUGVyUm93OmV9LF9pc0luZGV4UmVuZGVyZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PXRoaXMuX3ZpcnR1YWxTdGFydCYmZTw9dGhpcy5fdmlydHVhbEVuZH0sX2lzSW5kZXhWaXNpYmxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLmZpcnN0VmlzaWJsZUluZGV4JiZlPD10aGlzLmxhc3RWaXNpYmxlSW5kZXh9LF9nZXRQaHlzaWNhbEluZGV4OmZ1bmN0aW9uKGUpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0KyhlLXRoaXMuX3ZpcnR1YWxTdGFydCkpJXRoaXMuX3BoeXNpY2FsQ291bnR9LGZvY3VzSXRlbTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbShlKX0sX2ZvY3VzUGh5c2ljYWxJdGVtOmZ1bmN0aW9uKGUpe2lmKCEoZTwwfHxlPj10aGlzLl92aXJ0dWFsQ291bnQpKXt0aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKSx0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSl8fHRoaXMuc2Nyb2xsVG9JbmRleChlKTt2YXIgdD10aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZSldLHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodCksbjtyLnRhYkluZGV4PWhFLHQudGFiSW5kZXg9PT1oRSYmKG49dCksbnx8KG49enQodCkucXVlcnlTZWxlY3RvcignW3RhYmluZGV4PSInK2hFKyciXScpKSxyLnRhYkluZGV4PTAsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD1lLG4mJm4uZm9jdXMoKX19LF9yZW1vdmVGb2N1c2VkSXRlbTpmdW5jdGlvbigpe3RoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtJiZ0aGlzLl9pdGVtc1BhcmVudC5yZW1vdmVDaGlsZCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSksdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09bnVsbCx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT1udWxsLHRoaXMuX2ZvY3VzZWRJdGVtPW51bGwsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD0tMSx0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD0tMX0sX2NyZWF0ZUZvY3VzQmFja2ZpbGxJdGVtOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg7aWYoISh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbXx8dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDwwKSl7aWYoIXRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtKXt2YXIgdD10aGlzLnN0YW1wKG51bGwpO3RoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtPXQucm9vdC5xdWVyeVNlbGVjdG9yKCIqIiksdGhpcy5faXRlbXNQYXJlbnQuYXBwZW5kQ2hpbGQodC5yb290KX10aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbT10aGlzLl9waHlzaWNhbEl0ZW1zW2VdLHRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKS50YWJJbmRleD0wLHRoaXMuX3BoeXNpY2FsSXRlbXNbZV09dGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW0sdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9ZSx0aGlzLnRyYW5zbGF0ZTNkKDAscjB0LDAsdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pfX0sX3Jlc3RvcmVGb2N1c2VkSXRlbTpmdW5jdGlvbigpe2lmKCEoIXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtfHx0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PDApKXt0aGlzLl9hc3NpZ25Nb2RlbHMoKTt2YXIgZT10aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpLHQ9dGhpcy5fcGh5c2ljYWxJdGVtc1tlXTtpZighIXQpe3ZhciByPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpLG49dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pO3JbdGhpcy5hc109PT1uW3RoaXMuYXNdPyh0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT10LHIudGFiSW5kZXg9LTEsdGhpcy5fcGh5c2ljYWxJdGVtc1tlXT10aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLnRyYW5zbGF0ZTNkKDAscjB0LDAsdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW0pKToodGhpcy5fcmVtb3ZlRm9jdXNlZEl0ZW0oKSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT1udWxsKSx0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbT1udWxsfX19LF9kaWRGb2N1czpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudChlLnRhcmdldCkscj10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9mb2N1c2VkSXRlbSksbj10aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSE9PW51bGwsaT10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4OyF0fHwocj09PXQ/dGhpcy5faXNJbmRleFZpc2libGUoaSl8fHRoaXMuc2Nyb2xsVG9JbmRleChpKToodGhpcy5fcmVzdG9yZUZvY3VzZWRJdGVtKCksciYmKHIudGFiSW5kZXg9LTEpLHQudGFiSW5kZXg9MCxpPXRbdGhpcy5pbmRleEFzXSx0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PWksdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleChpKSx0aGlzLl9mb2N1c2VkSXRlbT10aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4XSxuJiYhdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0mJnRoaXMuX3VwZGF0ZSgpKSl9LF9rZXlkb3duSGFuZGxlcjpmdW5jdGlvbihlKXtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDQwOnRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8dGhpcy5fdmlydHVhbENvdW50LTEmJmUucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kyh0aGlzLmdyaWQ/dGhpcy5faXRlbXNQZXJSb3c6MSkpO2JyZWFrO2Nhc2UgMzk6dGhpcy5ncmlkJiZ0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kyh0aGlzLl9pc1JUTD8tMToxKSk7YnJlYWs7Y2FzZSAzODp0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PjAmJmUucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4LSh0aGlzLmdyaWQ/dGhpcy5faXRlbXNQZXJSb3c6MSkpO2JyZWFrO2Nhc2UgMzc6dGhpcy5ncmlkJiZ0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kyh0aGlzLl9pc1JUTD8xOi0xKSk7YnJlYWs7Y2FzZSAxMzp0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSx0aGlzLnNlbGVjdGlvbkVuYWJsZWQmJnRoaXMuX3NlbGVjdGlvbkhhbmRsZXIoZSk7YnJlYWt9fSxfY2xhbXA6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBNYXRoLm1pbihyLE1hdGgubWF4KHQsZSkpfSxfZGVib3VuY2U6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX2RlYm91bmNlcnM9dGhpcy5fZGVib3VuY2Vyc3x8e30sdGhpcy5fZGVib3VuY2Vyc1tlXT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJzW2VdLHIsdC5iaW5kKHRoaXMpKSxKbCh0aGlzLl9kZWJvdW5jZXJzW2VdKX0sX2ZvcndhcmRQcm9wZXJ0eTpmdW5jdGlvbihlLHQscil7ZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHQscil9LF9mb3J3YXJkSG9zdFByb3BWMjpmdW5jdGlvbihlLHQpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocil7ciYmdGhpcy5tb2RlbEZvckVsZW1lbnQocikuZm9yd2FyZEhvc3RQcm9wKGUsdCl9LHRoaXMpfSxfbm90aWZ5SW5zdGFuY2VQcm9wVjI6ZnVuY3Rpb24oZSx0LHIpe2lmKERJKHRoaXMuYXMsdCkpe3ZhciBuPWVbdGhpcy5pbmRleEFzXTt0PT10aGlzLmFzJiYodGhpcy5pdGVtc1tuXT1yKSx0aGlzLm5vdGlmeVBhdGgoZHAodGhpcy5hcywiaXRlbXMuIituLHQpLHIpfX0sX2dldFN0YW1wZWRDaGlsZHJlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9waHlzaWNhbEl0ZW1zfSxfZm9yd2FyZEluc3RhbmNlUGF0aDpmdW5jdGlvbihlLHQscil7dC5pbmRleE9mKHRoaXMuYXMrIi4iKT09PTAmJnRoaXMubm90aWZ5UGF0aCgiaXRlbXMuIitlLl9fa2V5X18rIi4iK3Quc2xpY2UodGhpcy5hcy5sZW5ndGgrMSkscil9LF9mb3J3YXJkUGFyZW50UGF0aDpmdW5jdGlvbihlLHQpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocil7ciYmdGhpcy5tb2RlbEZvckVsZW1lbnQocikubm90aWZ5UGF0aChlLHQpfSx0aGlzKX0sX2ZvcndhcmRQYXJlbnRQcm9wOmZ1bmN0aW9uKGUsdCl7KHRoaXMuX3BoeXNpY2FsSXRlbXN8fFtdKS5jb25jYXQoW3RoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtXSkuZm9yRWFjaChmdW5jdGlvbihyKXtyJiYodGhpcy5tb2RlbEZvckVsZW1lbnQocilbZV09dCl9LHRoaXMpfSxfZ2V0QWN0aXZlRWxlbWVudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2l0ZW1zUGFyZW50Lm5vZGUuZG9tSG9zdDtyZXR1cm4genQoZT9lLnJvb3Q6ZG9jdW1lbnQpLmFjdGl2ZUVsZW1lbnR9fSk7dmFyIHY5PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuc2VsZWN0aW9uPVtdLHRoaXMuc2VsZWN0Q2FsbGJhY2s9dH1nZXQoKXtyZXR1cm4gdGhpcy5tdWx0aT90aGlzLnNlbGVjdGlvbi5zbGljZSgpOnRoaXMuc2VsZWN0aW9uWzBdfWNsZWFyKHQpe3RoaXMuc2VsZWN0aW9uLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbihyKXsoIXR8fHQuaW5kZXhPZihyKTwwKSYmdGhpcy5zZXRJdGVtU2VsZWN0ZWQociwhMSl9LHRoaXMpfWlzU2VsZWN0ZWQodCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmluZGV4T2YodCk+PTB9c2V0SXRlbVNlbGVjdGVkKHQscil7aWYodCE9bnVsbCYmciE9PXRoaXMuaXNTZWxlY3RlZCh0KSl7aWYocil0aGlzLnNlbGVjdGlvbi5wdXNoKHQpO2Vsc2V7dmFyIG49dGhpcy5zZWxlY3Rpb24uaW5kZXhPZih0KTtuPj0wJiZ0aGlzLnNlbGVjdGlvbi5zcGxpY2UobiwxKX10aGlzLnNlbGVjdENhbGxiYWNrJiZ0aGlzLnNlbGVjdENhbGxiYWNrKHQscil9fXNlbGVjdCh0KXt0aGlzLm11bHRpP3RoaXMudG9nZ2xlKHQpOnRoaXMuZ2V0KCkhPT10JiYodGhpcy5zZXRJdGVtU2VsZWN0ZWQodGhpcy5nZXQoKSwhMSksdGhpcy5zZXRJdGVtU2VsZWN0ZWQodCwhMCkpfXRvZ2dsZSh0KXt0aGlzLnNldEl0ZW1TZWxlY3RlZCh0LCF0aGlzLmlzU2VsZWN0ZWQodCkpfX07dmFyIHdoPXtwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LHNlbGVjdGVkOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxhY3RpdmF0ZUV2ZW50Ont0eXBlOlN0cmluZyx2YWx1ZToidGFwIixvYnNlcnZlcjoiX2FjdGl2YXRlRXZlbnRDaGFuZ2VkIn0sc2VsZWN0YWJsZTpTdHJpbmcsc2VsZWN0ZWRDbGFzczp7dHlwZTpTdHJpbmcsdmFsdWU6Imlyb24tc2VsZWN0ZWQifSxzZWxlY3RlZEF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sZmFsbGJhY2tTZWxlY3Rpb246e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGl0ZW1zOnt0eXBlOkFycmF5LHJlYWRPbmx5OiEwLG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2V4Y2x1ZGVkTG9jYWxOYW1lczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57dGVtcGxhdGU6MSwiZG9tLWJpbmQiOjEsImRvbS1pZiI6MSwiZG9tLXJlcGVhdCI6MX19fX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZChhdHRyRm9yU2VsZWN0ZWQpIiwiX3VwZGF0ZVNlbGVjdGVkKHNlbGVjdGVkKSIsIl9jaGVja0ZhbGxiYWNrKGZhbGxiYWNrU2VsZWN0aW9uKSJdLGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9iaW5kRmlsdGVySXRlbT10aGlzLl9maWx0ZXJJdGVtLmJpbmQodGhpcyksdGhpcy5fc2VsZWN0aW9uPW5ldyB2OSh0aGlzLl9hcHBseVNlbGVjdGlvbi5iaW5kKHRoaXMpKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj10aGlzLl9vYnNlcnZlSXRlbXModGhpcyksdGhpcy5fYWRkTGlzdGVuZXIodGhpcy5hY3RpdmF0ZUV2ZW50KX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmenQodGhpcykudW5vYnNlcnZlTm9kZXModGhpcy5fb2JzZXJ2ZXIpLHRoaXMuX3JlbW92ZUxpc3RlbmVyKHRoaXMuYWN0aXZhdGVFdmVudCl9LGluZGV4T2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXRlbXM/dGhpcy5pdGVtcy5pbmRleE9mKGUpOi0xfSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5zZWxlY3RlZD1lfSxzZWxlY3RQcmV2aW91czpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLHQ9ZS0xO3RoaXMuc2VsZWN0ZWQhPT12b2lkIDAmJih0PShOdW1iZXIodGhpcy5fdmFsdWVUb0luZGV4KHRoaXMuc2VsZWN0ZWQpKS0xK2UpJWUpLHRoaXMuc2VsZWN0ZWQ9dGhpcy5faW5kZXhUb1ZhbHVlKHQpfSxzZWxlY3ROZXh0OmZ1bmN0aW9uKCl7dmFyIGU9MDt0aGlzLnNlbGVjdGVkIT09dm9pZCAwJiYoZT0oTnVtYmVyKHRoaXMuX3ZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSkrMSkldGhpcy5pdGVtcy5sZW5ndGgpLHRoaXMuc2VsZWN0ZWQ9dGhpcy5faW5kZXhUb1ZhbHVlKGUpfSxzZWxlY3RJbmRleDpmdW5jdGlvbihlKXt0aGlzLnNlbGVjdCh0aGlzLl9pbmRleFRvVmFsdWUoZSkpfSxmb3JjZVN5bmNocm9ub3VzSXRlbVVwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiZ0eXBlb2YgdGhpcy5fb2JzZXJ2ZXIuZmx1c2g9PSJmdW5jdGlvbiI/dGhpcy5fb2JzZXJ2ZXIuZmx1c2goKTp0aGlzLl91cGRhdGVJdGVtcygpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkIT1udWxsfSxfY2hlY2tGYWxsYmFjazpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVNlbGVjdGVkKCl9LF9hZGRMaXN0ZW5lcjpmdW5jdGlvbihlKXt0aGlzLmxpc3Rlbih0aGlzLGUsIl9hY3RpdmF0ZUhhbmRsZXIiKX0sX3JlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKGUpe3RoaXMudW5saXN0ZW4odGhpcyxlLCJfYWN0aXZhdGVIYW5kbGVyIil9LF9hY3RpdmF0ZUV2ZW50Q2hhbmdlZDpmdW5jdGlvbihlLHQpe3RoaXMuX3JlbW92ZUxpc3RlbmVyKHQpLHRoaXMuX2FkZExpc3RlbmVyKGUpfSxfdXBkYXRlSXRlbXM6ZnVuY3Rpb24oKXt2YXIgZT16dCh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModGhpcy5zZWxlY3RhYmxlfHwiKiIpO2U9QXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGUsdGhpcy5fYmluZEZpbHRlckl0ZW0pLHRoaXMuX3NldEl0ZW1zKGUpfSxfdXBkYXRlQXR0ckZvclNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEl0ZW0mJih0aGlzLnNlbGVjdGVkPXRoaXMuX3ZhbHVlRm9ySXRlbSh0aGlzLnNlbGVjdGVkSXRlbSkpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWxlY3RTZWxlY3RlZCh0aGlzLnNlbGVjdGVkKX0sX3NlbGVjdFNlbGVjdGVkOmZ1bmN0aW9uKGUpe2lmKCEhdGhpcy5pdGVtcyl7dmFyIHQ9dGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5zZWxlY3RlZCk7dD90aGlzLl9zZWxlY3Rpb24uc2VsZWN0KHQpOnRoaXMuX3NlbGVjdGlvbi5jbGVhcigpLHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24mJnRoaXMuaXRlbXMubGVuZ3RoJiZ0aGlzLl9zZWxlY3Rpb24uZ2V0KCk9PT12b2lkIDAmJih0aGlzLnNlbGVjdGVkPXRoaXMuZmFsbGJhY2tTZWxlY3Rpb24pfX0sX2ZpbHRlckl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuX2V4Y2x1ZGVkTG9jYWxOYW1lc1tlLmxvY2FsTmFtZV19LF92YWx1ZVRvSXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD9udWxsOnRoaXMuaXRlbXNbdGhpcy5fdmFsdWVUb0luZGV4KGUpXX0sX3ZhbHVlVG9JbmRleDpmdW5jdGlvbihlKXtpZih0aGlzLmF0dHJGb3JTZWxlY3RlZCl7Zm9yKHZhciB0PTAscjtyPXRoaXMuaXRlbXNbdF07dCsrKWlmKHRoaXMuX3ZhbHVlRm9ySXRlbShyKT09ZSlyZXR1cm4gdH1lbHNlIHJldHVybiBOdW1iZXIoZSl9LF9pbmRleFRvVmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdHRyRm9yU2VsZWN0ZWQpe3ZhciB0PXRoaXMuaXRlbXNbZV07aWYodClyZXR1cm4gdGhpcy5fdmFsdWVGb3JJdGVtKHQpfWVsc2UgcmV0dXJuIGV9LF92YWx1ZUZvckl0ZW06ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7aWYoIXRoaXMuYXR0ckZvclNlbGVjdGVkKXt2YXIgdD10aGlzLmluZGV4T2YoZSk7cmV0dXJuIHQ9PT0tMT9udWxsOnR9dmFyIHI9ZVt3bSh0aGlzLmF0dHJGb3JTZWxlY3RlZCldO3JldHVybiByIT1udWxsP3I6ZS5nZXRBdHRyaWJ1dGUodGhpcy5hdHRyRm9yU2VsZWN0ZWQpfSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24oZSx0KXt0aGlzLnNlbGVjdGVkQ2xhc3MmJnRoaXMudG9nZ2xlQ2xhc3ModGhpcy5zZWxlY3RlZENsYXNzLHQsZSksdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSYmdGhpcy50b2dnbGVBdHRyaWJ1dGUodGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSx0LGUpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZSgpLHRoaXMuZmlyZSgiaXJvbi0iKyh0PyJzZWxlY3QiOiJkZXNlbGVjdCIpLHtpdGVtOmV9KX0sX3NlbGVjdGlvbkNoYW5nZTpmdW5jdGlvbigpe3RoaXMuX3NldFNlbGVjdGVkSXRlbSh0aGlzLl9zZWxlY3Rpb24uZ2V0KCkpfSxfb2JzZXJ2ZUl0ZW1zOmZ1bmN0aW9uKGUpe3JldHVybiB6dChlKS5vYnNlcnZlTm9kZXMoZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlSXRlbXMoKSx0aGlzLl91cGRhdGVTZWxlY3RlZCgpLHRoaXMuZmlyZSgiaXJvbi1pdGVtcy1jaGFuZ2VkIix0LHtidWJibGVzOiExLGNhbmNlbGFibGU6ITF9KX0pfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnRhcmdldCxyPXRoaXMuaXRlbXM7dCYmdCE9dGhpczspe3ZhciBuPXIuaW5kZXhPZih0KTtpZihuPj0wKXt2YXIgaT10aGlzLl9pbmRleFRvVmFsdWUobik7dGhpcy5faXRlbUFjdGl2YXRlKGksdCk7cmV0dXJufXQ9dC5wYXJlbnROb2RlfX0sX2l0ZW1BY3RpdmF0ZTpmdW5jdGlvbihlLHQpe3RoaXMuZmlyZSgiaXJvbi1hY3RpdmF0ZSIse3NlbGVjdGVkOmUsaXRlbTp0fSx7Y2FuY2VsYWJsZTohMH0pLmRlZmF1bHRQcmV2ZW50ZWR8fHRoaXMuc2VsZWN0KGUpfX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKDpub3Qoc2xvdCk6bm90KC5pcm9uLXNlbGVjdGVkKSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6Imlyb24tcGFnZXMiLGJlaGF2aW9yczpbSnMsd2hdLHByb3BlcnRpZXM6e2FjdGl2YXRlRXZlbnQ6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9fSxvYnNlcnZlcnM6WyJfc2VsZWN0ZWRQYWdlQ2hhbmdlZChzZWxlY3RlZCkiXSxfc2VsZWN0ZWRQYWdlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3RoaXMuYXN5bmModGhpcy5ub3RpZnlSZXNpemUpfX0pO3ZhciBuMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC0tc2hhZG93LXRyYW5zaXRpb246IHsKICAgICAgICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuMjhzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1ub25lOiB7CiAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgICAgfTsKCiAgICAgIC8qIGZyb20gaHR0cDovL2NvZGVwZW4uaW8vc2h5bmRtYW4vcGVuL2M1Mzk0ZGRmMmU4YjJhNWM5MTg1OTA0YjU3NDIxY2RiICovCgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0zZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDNweCA0cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDhweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTRkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgNnB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDE4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi04ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTEyZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDEycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDRweCAyMnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNnB4IDdweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAgNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCAgOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMjRkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtuMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuMHQuY29udGVudCk7dmFyIGkwdD1RYAo8ZG9tLW1vZHVsZSBpZD0icGFwZXItbWF0ZXJpYWwtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIGh0bWwgewogICAgICAgIC0tcGFwZXItbWF0ZXJpYWw6IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTRkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTM6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi04ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTE2ZHA7CiAgICAgICAgfTsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjEiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMiJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIzIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjQiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNSJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTsKICAgICAgfQoKICAgICAgLyogRHVwbGljYXRlIHRoZSBzdHlsZXMgYmVjYXVzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vd2ViY29tcG9uZW50cy9zaGFkeWNzcy9pc3N1ZXMvMTkzICovCiAgICAgIDpob3N0IHsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsOiB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi00ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWw7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMyJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTM7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7aTB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaTB0LmNvbnRlbnQpO3ZhciBEaT17cHJvcGVydGllczp7Zm9jdXNlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwLG9ic2VydmVyOiJfZGlzYWJsZWRDaGFuZ2VkIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9vbGRUYWJJbmRleDp7dHlwZTpTdHJpbmd9LF9ib3VuZEZvY3VzQmx1ckhhbmRsZXI6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9jdXNCbHVySGFuZGxlci5iaW5kKHRoaXMpfX19LG9ic2VydmVyczpbIl9jaGFuZ2VkQ29udHJvbFN0YXRlKGZvY3VzZWQsIGRpc2FibGVkKSJdLHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fYm91bmRGb2N1c0JsdXJIYW5kbGVyLCEwKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX2JvdW5kRm9jdXNCbHVySGFuZGxlciwhMCl9LF9mb2N1c0JsdXJIYW5kbGVyOmZ1bmN0aW9uKGUpe3RoaXMuX3NldEZvY3VzZWQoZS50eXBlPT09ImZvY3VzIil9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1kaXNhYmxlZCIsZT8idHJ1ZSI6ImZhbHNlIiksdGhpcy5zdHlsZS5wb2ludGVyRXZlbnRzPWU/Im5vbmUiOiIiLGU/KHRoaXMuX29sZFRhYkluZGV4PXRoaXMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpLHRoaXMuX3NldEZvY3VzZWQoITEpLHRoaXMudGFiSW5kZXg9LTEsdGhpcy5ibHVyKCkpOnRoaXMuX29sZFRhYkluZGV4IT09dm9pZCAwJiYodGhpcy5fb2xkVGFiSW5kZXg9PT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpOnRoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdGhpcy5fb2xkVGFiSW5kZXgpKX0sX2NoYW5nZWRDb250cm9sU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLl9jb250cm9sU3RhdGVDaGFuZ2VkJiZ0aGlzLl9jb250cm9sU3RhdGVDaGFuZ2VkKCl9fTt2YXIgWXg9e3Byb3BlcnRpZXM6e3ByZXNzZWQ6e3R5cGU6Qm9vbGVhbixyZWFkT25seTohMCx2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9wcmVzc2VkQ2hhbmdlZCJ9LHRvZ2dsZXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGFjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHBvaW50ZXJEb3duOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITF9LHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQ6e3R5cGU6Qm9vbGVhbixyZWFkT25seTohMH0sYXJpYUFjdGl2ZUF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImFyaWEtcHJlc3NlZCIsb2JzZXJ2ZXI6Il9hcmlhQWN0aXZlQXR0cmlidXRlQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6e2Rvd246Il9kb3duSGFuZGxlciIsdXA6Il91cEhhbmRsZXIiLHRhcDoiX3RhcEhhbmRsZXIifSxvYnNlcnZlcnM6WyJfZm9jdXNDaGFuZ2VkKGZvY3VzZWQpIiwiX2FjdGl2ZUNoYW5nZWQoYWN0aXZlLCBhcmlhQWN0aXZlQXR0cmlidXRlKSJdLGtleUJpbmRpbmdzOnsiZW50ZXI6a2V5ZG93biI6Il9hc3luY0NsaWNrIiwic3BhY2U6a2V5ZG93biI6Il9zcGFjZUtleURvd25IYW5kbGVyIiwic3BhY2U6a2V5dXAiOiJfc3BhY2VLZXlVcEhhbmRsZXIifSxfbW91c2VFdmVudFJlOi9ebW91c2UvLF90YXBIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy50b2dnbGVzP3RoaXMuX3VzZXJBY3RpdmF0ZSghdGhpcy5hY3RpdmUpOnRoaXMuYWN0aXZlPSExfSxfZm9jdXNDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX2RldGVjdEtleWJvYXJkRm9jdXMoZSksZXx8dGhpcy5fc2V0UHJlc3NlZCghMSl9LF9kZXRlY3RLZXlib2FyZEZvY3VzOmZ1bmN0aW9uKGUpe3RoaXMuX3NldFJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQoIXRoaXMucG9pbnRlckRvd24mJmUpfSxfdXNlckFjdGl2YXRlOmZ1bmN0aW9uKGUpe3RoaXMuYWN0aXZlIT09ZSYmKHRoaXMuYWN0aXZlPWUsdGhpcy5maXJlKCJjaGFuZ2UiKSl9LF9kb3duSGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLl9zZXRQb2ludGVyRG93bighMCksdGhpcy5fc2V0UHJlc3NlZCghMCksdGhpcy5fc2V0UmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCghMSl9LF91cEhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9zZXRQb2ludGVyRG93bighMSksdGhpcy5fc2V0UHJlc3NlZCghMSl9LF9zcGFjZUtleURvd25IYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsLmtleWJvYXJkRXZlbnQscj16dCh0KS5sb2NhbFRhcmdldDt0aGlzLmlzTGlnaHREZXNjZW5kYW50KHIpfHwodC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5fc2V0UHJlc3NlZCghMCkpfSxfc3BhY2VLZXlVcEhhbmRsZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kZXRhaWwua2V5Ym9hcmRFdmVudCxyPXp0KHQpLmxvY2FsVGFyZ2V0O3RoaXMuaXNMaWdodERlc2NlbmRhbnQocil8fCh0aGlzLnByZXNzZWQmJnRoaXMuX2FzeW5jQ2xpY2soKSx0aGlzLl9zZXRQcmVzc2VkKCExKSl9LF9hc3luY0NsaWNrOmZ1bmN0aW9uKCl7dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuY2xpY2soKX0sMSl9LF9wcmVzc2VkQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2FyaWFBY3RpdmVBdHRyaWJ1dGVDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dCYmdCE9ZSYmdGhpcy5oYXNBdHRyaWJ1dGUodCkmJnRoaXMucmVtb3ZlQXR0cmlidXRlKHQpfSxfYWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3RoaXMudG9nZ2xlcz90aGlzLnNldEF0dHJpYnV0ZSh0aGlzLmFyaWFBY3RpdmVBdHRyaWJ1dGUsZT8idHJ1ZSI6ImZhbHNlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUodGhpcy5hcmlhQWN0aXZlQXR0cmlidXRlKSx0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2NvbnRyb2xTdGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkP3RoaXMuX3NldFByZXNzZWQoITEpOnRoaXMuX2NoYW5nZWRCdXR0b25TdGF0ZSgpfSxfY2hhbmdlZEJ1dHRvblN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fYnV0dG9uU3RhdGVDaGFuZ2VkJiZ0aGlzLl9idXR0b25TdGF0ZUNoYW5nZWQoKX19LFNoPVtPbyxZeF07dmFyIE1oPXtkaXN0YW5jZTpmdW5jdGlvbihlLHQscixuKXt2YXIgaT1lLXIsbz10LW47cmV0dXJuIE1hdGguc3FydChpKmkrbypvKX0sbm93OndpbmRvdy5wZXJmb3JtYW5jZSYmd2luZG93LnBlcmZvcm1hbmNlLm5vdz93aW5kb3cucGVyZm9ybWFuY2Uubm93LmJpbmQod2luZG93LnBlcmZvcm1hbmNlKTpEYXRlLm5vd307ZnVuY3Rpb24gbzB0KGUpe3RoaXMuZWxlbWVudD1lLHRoaXMud2lkdGg9dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgsdGhpcy5oZWlnaHQ9dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LHRoaXMuc2l6ZT1NYXRoLm1heCh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX1vMHQucHJvdG90eXBlPXtnZXQgYm91bmRpbmdSZWN0KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0sZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb206ZnVuY3Rpb24oZSx0KXt2YXIgcj1NaC5kaXN0YW5jZShlLHQsMCwwKSxuPU1oLmRpc3RhbmNlKGUsdCx0aGlzLndpZHRoLDApLGk9TWguZGlzdGFuY2UoZSx0LDAsdGhpcy5oZWlnaHQpLG89TWguZGlzdGFuY2UoZSx0LHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpO3JldHVybiBNYXRoLm1heChyLG4saSxvKX19O2Z1bmN0aW9uIGdfKGUpe3RoaXMuZWxlbWVudD1lLHRoaXMuY29sb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSkuY29sb3IsdGhpcy53YXZlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMud2F2ZUNvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLndhdmUuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRoaXMuY29sb3IsdGhpcy53YXZlLmNsYXNzTGlzdC5hZGQoIndhdmUiKSx0aGlzLndhdmVDb250YWluZXIuY2xhc3NMaXN0LmFkZCgid2F2ZS1jb250YWluZXIiKSx6dCh0aGlzLndhdmVDb250YWluZXIpLmFwcGVuZENoaWxkKHRoaXMud2F2ZSksdGhpcy5yZXNldEludGVyYWN0aW9uU3RhdGUoKX1nXy5NQVhfUkFESVVTPTMwMDtnXy5wcm90b3R5cGU9e2dldCByZWNlbnRlcnMoKXtyZXR1cm4gdGhpcy5lbGVtZW50LnJlY2VudGVyc30sZ2V0IGNlbnRlcigpe3JldHVybiB0aGlzLmVsZW1lbnQuY2VudGVyfSxnZXQgbW91c2VEb3duRWxhcHNlZCgpe3ZhciBlO3JldHVybiB0aGlzLm1vdXNlRG93blN0YXJ0PyhlPU1oLm5vdygpLXRoaXMubW91c2VEb3duU3RhcnQsdGhpcy5tb3VzZVVwU3RhcnQmJihlLT10aGlzLm1vdXNlVXBFbGFwc2VkKSxlKTowfSxnZXQgbW91c2VVcEVsYXBzZWQoKXtyZXR1cm4gdGhpcy5tb3VzZVVwU3RhcnQ/TWgubm93KCktdGhpcy5tb3VzZVVwU3RhcnQ6MH0sZ2V0IG1vdXNlRG93bkVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VEb3duRWxhcHNlZC8xZTN9LGdldCBtb3VzZVVwRWxhcHNlZFNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZVVwRWxhcHNlZC8xZTN9LGdldCBtb3VzZUludGVyYWN0aW9uU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWRTZWNvbmRzK3RoaXMubW91c2VVcEVsYXBzZWRTZWNvbmRzfSxnZXQgaW5pdGlhbE9wYWNpdHkoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmluaXRpYWxPcGFjaXR5fSxnZXQgb3BhY2l0eURlY2F5VmVsb2NpdHkoKXtyZXR1cm4gdGhpcy5lbGVtZW50Lm9wYWNpdHlEZWNheVZlbG9jaXR5fSxnZXQgcmFkaXVzKCl7dmFyIGU9dGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoKnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aCx0PXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQqdGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodCxyPU1hdGgubWluKE1hdGguc3FydChlK3QpLGdfLk1BWF9SQURJVVMpKjEuMSs1LG49MS4xLS4yKihyL2dfLk1BWF9SQURJVVMpLGk9dGhpcy5tb3VzZUludGVyYWN0aW9uU2Vjb25kcy9uLG89ciooMS1NYXRoLnBvdyg4MCwtaSkpO3JldHVybiBNYXRoLmFicyhvKX0sZ2V0IG9wYWNpdHkoKXtyZXR1cm4gdGhpcy5tb3VzZVVwU3RhcnQ/TWF0aC5tYXgoMCx0aGlzLmluaXRpYWxPcGFjaXR5LXRoaXMubW91c2VVcEVsYXBzZWRTZWNvbmRzKnRoaXMub3BhY2l0eURlY2F5VmVsb2NpdHkpOnRoaXMuaW5pdGlhbE9wYWNpdHl9LGdldCBvdXRlck9wYWNpdHkoKXt2YXIgZT10aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kcyouMyx0PXRoaXMub3BhY2l0eTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihlLHQpKX0sZ2V0IGlzT3BhY2l0eUZ1bGx5RGVjYXllZCgpe3JldHVybiB0aGlzLm9wYWNpdHk8LjAxJiZ0aGlzLnJhZGl1cz49TWF0aC5taW4odGhpcy5tYXhSYWRpdXMsZ18uTUFYX1JBRElVUyl9LGdldCBpc1Jlc3RpbmdBdE1heFJhZGl1cygpe3JldHVybiB0aGlzLm9wYWNpdHk+PXRoaXMuaW5pdGlhbE9wYWNpdHkmJnRoaXMucmFkaXVzPj1NYXRoLm1pbih0aGlzLm1heFJhZGl1cyxnXy5NQVhfUkFESVVTKX0sZ2V0IGlzQW5pbWF0aW9uQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5tb3VzZVVwU3RhcnQ/dGhpcy5pc09wYWNpdHlGdWxseURlY2F5ZWQ6dGhpcy5pc1Jlc3RpbmdBdE1heFJhZGl1c30sZ2V0IHRyYW5zbGF0aW9uRnJhY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4oMSx0aGlzLnJhZGl1cy90aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSoyL01hdGguc3FydCgyKSl9LGdldCB4Tm93KCl7cmV0dXJuIHRoaXMueEVuZD90aGlzLnhTdGFydCt0aGlzLnRyYW5zbGF0aW9uRnJhY3Rpb24qKHRoaXMueEVuZC10aGlzLnhTdGFydCk6dGhpcy54U3RhcnR9LGdldCB5Tm93KCl7cmV0dXJuIHRoaXMueUVuZD90aGlzLnlTdGFydCt0aGlzLnRyYW5zbGF0aW9uRnJhY3Rpb24qKHRoaXMueUVuZC10aGlzLnlTdGFydCk6dGhpcy55U3RhcnR9LGdldCBpc01vdXNlRG93bigpe3JldHVybiB0aGlzLm1vdXNlRG93blN0YXJ0JiYhdGhpcy5tb3VzZVVwU3RhcnR9LHJlc2V0SW50ZXJhY3Rpb25TdGF0ZTpmdW5jdGlvbigpe3RoaXMubWF4UmFkaXVzPTAsdGhpcy5tb3VzZURvd25TdGFydD0wLHRoaXMubW91c2VVcFN0YXJ0PTAsdGhpcy54U3RhcnQ9MCx0aGlzLnlTdGFydD0wLHRoaXMueEVuZD0wLHRoaXMueUVuZD0wLHRoaXMuc2xpZGVEaXN0YW5jZT0wLHRoaXMuY29udGFpbmVyTWV0cmljcz1uZXcgbzB0KHRoaXMuZWxlbWVudCl9LGRyYXc6ZnVuY3Rpb24oKXt2YXIgZSx0LHI7dGhpcy53YXZlLnN0eWxlLm9wYWNpdHk9dGhpcy5vcGFjaXR5LGU9dGhpcy5yYWRpdXMvKHRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplLzIpLHQ9dGhpcy54Tm93LXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLHI9dGhpcy55Tm93LXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMix0aGlzLndhdmVDb250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJ0cmFuc2xhdGUoIit0KyJweCwgIityKyJweCkiLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZTNkKCIrdCsicHgsICIrcisicHgsIDApIix0aGlzLndhdmUuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJzY2FsZSgiK2UrIiwiK2UrIikiLHRoaXMud2F2ZS5zdHlsZS50cmFuc2Zvcm09InNjYWxlM2QoIitlKyIsIitlKyIsMSkifSxkb3duQWN0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLHI9dGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodC8yO3RoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCksdGhpcy5tb3VzZURvd25TdGFydD1NaC5ub3coKSx0aGlzLmNlbnRlcj8odGhpcy54U3RhcnQ9dCx0aGlzLnlTdGFydD1yLHRoaXMuc2xpZGVEaXN0YW5jZT1NaC5kaXN0YW5jZSh0aGlzLnhTdGFydCx0aGlzLnlTdGFydCx0aGlzLnhFbmQsdGhpcy55RW5kKSk6KHRoaXMueFN0YXJ0PWU/ZS5kZXRhaWwueC10aGlzLmNvbnRhaW5lck1ldHJpY3MuYm91bmRpbmdSZWN0LmxlZnQ6dGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLzIsdGhpcy55U3RhcnQ9ZT9lLmRldGFpbC55LXRoaXMuY29udGFpbmVyTWV0cmljcy5ib3VuZGluZ1JlY3QudG9wOnRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMiksdGhpcy5yZWNlbnRlcnMmJih0aGlzLnhFbmQ9dCx0aGlzLnlFbmQ9cix0aGlzLnNsaWRlRGlzdGFuY2U9TWguZGlzdGFuY2UodGhpcy54U3RhcnQsdGhpcy55U3RhcnQsdGhpcy54RW5kLHRoaXMueUVuZCkpLHRoaXMubWF4UmFkaXVzPXRoaXMuY29udGFpbmVyTWV0cmljcy5mdXJ0aGVzdENvcm5lckRpc3RhbmNlRnJvbSh0aGlzLnhTdGFydCx0aGlzLnlTdGFydCksdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLnRvcD0odGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodC10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSkvMisicHgiLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS5sZWZ0PSh0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgtdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUpLzIrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUud2lkdGg9dGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKyJweCJ9LHVwQWN0aW9uOmZ1bmN0aW9uKGUpeyF0aGlzLmlzTW91c2VEb3dufHwodGhpcy5tb3VzZVVwU3RhcnQ9TWgubm93KCkpfSxyZW1vdmU6ZnVuY3Rpb24oKXt6dCh6dCh0aGlzLndhdmVDb250YWluZXIpLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKHRoaXMud2F2ZUNvbnRhaW5lcil9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKCiAgICAgICAgLyogU2VlIFBvbHltZXJFbGVtZW50cy9wYXBlci1iZWhhdmlvcnMvaXNzdWVzLzM0LiBPbiBub24tQ2hyb21lIGJyb3dzZXJzLAogICAgICAgICAqIGNyZWF0aW5nIGEgbm9kZSAod2l0aCBhIHBvc2l0aW9uOmFic29sdXRlKSBpbiB0aGUgbWlkZGxlIG9mIGFuIGV2ZW50CiAgICAgICAgICogaGFuZGxlciAiaW50ZXJydXB0cyIgdGhhdCBldmVudCBoYW5kbGVyICh3aGljaCBoYXBwZW5zIHdoZW4gdGhlCiAgICAgICAgICogcmlwcGxlIGlzIGNyZWF0ZWQgb24gZGVtYW5kKSAqLwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbYW5pbWF0aW5nXSkgewogICAgICAgIC8qIFRoaXMgcmVzb2x2ZXMgYSByZW5kZXJpbmcgaXNzdWUgaW4gQ2hyb21lIChhcyBvZiA0MCkgd2hlcmUgdGhlCiAgICAgICAgICAgcmlwcGxlIGlzIG5vdCBwcm9wZXJseSBjbGlwcGVkIGJ5IGl0cyBwYXJlbnQgKHdoaWNoIG1heSBoYXZlCiAgICAgICAgICAgcm91bmRlZCBjb3JuZXJzKS4gU2VlOiBodHRwOi8vanNiaW4uY29tL3RlbWV4YS80CgogICAgICAgICAgIE5vdGU6IFdlIG9ubHkgYXBwbHkgdGhpcyBzdHlsZSBjb25kaXRpb25hbGx5LiBPdGhlcndpc2UsIHRoZSBicm93c2VyCiAgICAgICAgICAgd2lsbCBjcmVhdGUgYSBuZXcgY29tcG9zaXRpbmcgbGF5ZXIgZm9yIGV2ZXJ5IHJpcHBsZSBlbGVtZW50IG9uIHRoZQogICAgICAgICAgIHBhZ2UsIGFuZCB0aGF0IHdvdWxkIGJlIGJhZC4gKi8KICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7CiAgICAgIH0KCiAgICAgICNiYWNrZ3JvdW5kLAogICAgICAjd2F2ZXMsCiAgICAgIC53YXZlLWNvbnRhaW5lciwKICAgICAgLndhdmUgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgICNiYWNrZ3JvdW5kLAogICAgICAud2F2ZSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgI3dhdmVzLAogICAgICAud2F2ZSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLndhdmUtY29udGFpbmVyLAogICAgICAud2F2ZSB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICA6aG9zdCguY2lyY2xlKSAjYmFja2dyb3VuZCwKICAgICAgOmhvc3QoLmNpcmNsZSkgI3dhdmVzIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jaXJjbGUpIC53YXZlLWNvbnRhaW5lciB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJiYWNrZ3JvdW5kIj48L2Rpdj4KICAgIDxkaXYgaWQ9IndhdmVzIj48L2Rpdj4KYCxpczoicGFwZXItcmlwcGxlIixiZWhhdmlvcnM6W09vXSxwcm9wZXJ0aWVzOntpbml0aWFsT3BhY2l0eTp7dHlwZTpOdW1iZXIsdmFsdWU6LjI1fSxvcGFjaXR5RGVjYXlWZWxvY2l0eTp7dHlwZTpOdW1iZXIsdmFsdWU6Ljh9LHJlY2VudGVyczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxjZW50ZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scmlwcGxlczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sYW5pbWF0aW5nOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfSxob2xkRG93bjp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfaG9sZERvd25DaGFuZ2VkIn0sbm9pbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2FuaW1hdGluZzp7dHlwZTpCb29sZWFufSxfYm91bmRBbmltYXRlOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5pbWF0ZS5iaW5kKHRoaXMpfX19LGdldCB0YXJnZXQoKXtyZXR1cm4gdGhpcy5rZXlFdmVudFRhcmdldH0sa2V5QmluZGluZ3M6eyJlbnRlcjprZXlkb3duIjoiX29uRW50ZXJLZXlkb3duIiwic3BhY2U6a2V5ZG93biI6Il9vblNwYWNlS2V5ZG93biIsInNwYWNlOmtleXVwIjoiX29uU3BhY2VLZXl1cCJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7enQodGhpcykucGFyZW50Tm9kZS5ub2RlVHlwZT09MTE/dGhpcy5rZXlFdmVudFRhcmdldD16dCh0aGlzKS5nZXRPd25lclJvb3QoKS5ob3N0OnRoaXMua2V5RXZlbnRUYXJnZXQ9enQodGhpcykucGFyZW50Tm9kZTt2YXIgZT10aGlzLmtleUV2ZW50VGFyZ2V0O3RoaXMubGlzdGVuKGUsInVwIiwidWlVcEFjdGlvbiIpLHRoaXMubGlzdGVuKGUsImRvd24iLCJ1aURvd25BY3Rpb24iKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnVubGlzdGVuKHRoaXMua2V5RXZlbnRUYXJnZXQsInVwIiwidWlVcEFjdGlvbiIpLHRoaXMudW5saXN0ZW4odGhpcy5rZXlFdmVudFRhcmdldCwiZG93biIsInVpRG93bkFjdGlvbiIpLHRoaXMua2V5RXZlbnRUYXJnZXQ9bnVsbH0sZ2V0IHNob3VsZEtlZXBBbmltYXRpbmcoKXtmb3IodmFyIGU9MDtlPHRoaXMucmlwcGxlcy5sZW5ndGg7KytlKWlmKCF0aGlzLnJpcHBsZXNbZV0uaXNBbmltYXRpb25Db21wbGV0ZSlyZXR1cm4hMDtyZXR1cm4hMX0sc2ltdWxhdGVkUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5kb3duQWN0aW9uKG51bGwpLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnVwQWN0aW9uKCl9LDEpfSx1aURvd25BY3Rpb246ZnVuY3Rpb24oZSl7dGhpcy5ub2lua3x8dGhpcy5kb3duQWN0aW9uKGUpfSxkb3duQWN0aW9uOmZ1bmN0aW9uKGUpe2lmKCEodGhpcy5ob2xkRG93biYmdGhpcy5yaXBwbGVzLmxlbmd0aD4wKSl7dmFyIHQ9dGhpcy5hZGRSaXBwbGUoKTt0LmRvd25BY3Rpb24oZSksdGhpcy5fYW5pbWF0aW5nfHwodGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuYW5pbWF0ZSgpKX19LHVpVXBBY3Rpb246ZnVuY3Rpb24oZSl7dGhpcy5ub2lua3x8dGhpcy51cEFjdGlvbihlKX0sdXBBY3Rpb246ZnVuY3Rpb24oZSl7dGhpcy5ob2xkRG93bnx8KHRoaXMucmlwcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudXBBY3Rpb24oZSl9KSx0aGlzLl9hbmltYXRpbmc9ITAsdGhpcy5hbmltYXRlKCkpfSxvbkFuaW1hdGlvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW5nPSExLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRDb2xvcj0iIix0aGlzLmZpcmUoInRyYW5zaXRpb25lbmQiKX0sYWRkUmlwcGxlOmZ1bmN0aW9uKCl7dmFyIGU9bmV3IGdfKHRoaXMpO3JldHVybiB6dCh0aGlzLiQud2F2ZXMpLmFwcGVuZENoaWxkKGUud2F2ZUNvbnRhaW5lciksdGhpcy4kLmJhY2tncm91bmQuc3R5bGUuYmFja2dyb3VuZENvbG9yPWUuY29sb3IsdGhpcy5yaXBwbGVzLnB1c2goZSksdGhpcy5fc2V0QW5pbWF0aW5nKCEwKSxlfSxyZW1vdmVSaXBwbGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5yaXBwbGVzLmluZGV4T2YoZSk7dDwwfHwodGhpcy5yaXBwbGVzLnNwbGljZSh0LDEpLGUucmVtb3ZlKCksdGhpcy5yaXBwbGVzLmxlbmd0aHx8dGhpcy5fc2V0QW5pbWF0aW5nKCExKSl9LGFuaW1hdGU6ZnVuY3Rpb24oKXtpZighIXRoaXMuX2FuaW1hdGluZyl7dmFyIGUsdDtmb3IoZT0wO2U8dGhpcy5yaXBwbGVzLmxlbmd0aDsrK2UpdD10aGlzLnJpcHBsZXNbZV0sdC5kcmF3KCksdGhpcy4kLmJhY2tncm91bmQuc3R5bGUub3BhY2l0eT10Lm91dGVyT3BhY2l0eSx0LmlzT3BhY2l0eUZ1bGx5RGVjYXllZCYmIXQuaXNSZXN0aW5nQXRNYXhSYWRpdXMmJnRoaXMucmVtb3ZlUmlwcGxlKHQpOyF0aGlzLnNob3VsZEtlZXBBbmltYXRpbmcmJnRoaXMucmlwcGxlcy5sZW5ndGg9PT0wP3RoaXMub25BbmltYXRpb25Db21wbGV0ZSgpOndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYm91bmRBbmltYXRlKX19LGFuaW1hdGVSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbmltYXRlKCl9LF9vbkVudGVyS2V5ZG93bjpmdW5jdGlvbigpe3RoaXMudWlEb3duQWN0aW9uKCksdGhpcy5hc3luYyh0aGlzLnVpVXBBY3Rpb24sMSl9LF9vblNwYWNlS2V5ZG93bjpmdW5jdGlvbigpe3RoaXMudWlEb3duQWN0aW9uKCl9LF9vblNwYWNlS2V5dXA6ZnVuY3Rpb24oKXt0aGlzLnVpVXBBY3Rpb24oKX0sX2hvbGREb3duQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3QhPT12b2lkIDAmJihlP3RoaXMuZG93bkFjdGlvbigpOnRoaXMudXBBY3Rpb24oKSl9fSk7dmFyIHN1PXtwcm9wZXJ0aWVzOntub2luazp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbm9pbmtDaGFuZ2VkIn0sX3JpcHBsZUNvbnRhaW5lcjp7dHlwZTpPYmplY3R9fSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c2VkJiZ0aGlzLmVuc3VyZVJpcHBsZSgpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7WXguX2Rvd25IYW5kbGVyLmNhbGwodGhpcyxlKSx0aGlzLnByZXNzZWQmJnRoaXMuZW5zdXJlUmlwcGxlKGUpfSxlbnN1cmVSaXBwbGU6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuaGFzUmlwcGxlKCkpe3RoaXMuX3JpcHBsZT10aGlzLl9jcmVhdGVSaXBwbGUoKSx0aGlzLl9yaXBwbGUubm9pbms9dGhpcy5ub2luazt2YXIgdD10aGlzLl9yaXBwbGVDb250YWluZXJ8fHRoaXMucm9vdDtpZih0JiZ6dCh0KS5hcHBlbmRDaGlsZCh0aGlzLl9yaXBwbGUpLGUpe3ZhciByPXp0KHRoaXMuX3JpcHBsZUNvbnRhaW5lcnx8dGhpcyksbj16dChlKS5yb290VGFyZ2V0O3IuZGVlcENvbnRhaW5zKG4pJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKGUpfX19LGdldFJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuc3VyZVJpcHBsZSgpLHRoaXMuX3JpcHBsZX0saGFzUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fcmlwcGxlKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInBhcGVyLXJpcHBsZSIpO3JldHVybiBlfSxfbm9pbmtDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuaGFzUmlwcGxlKCkmJih0aGlzLl9yaXBwbGUubm9pbms9ZSl9fTt2YXIgaFc9e3Byb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHJlYWRPbmx5OiEwfX0sb2JzZXJ2ZXJzOlsiX2NhbGN1bGF0ZUVsZXZhdGlvbihmb2N1c2VkLCBkaXNhYmxlZCwgYWN0aXZlLCBwcmVzc2VkLCByZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKSIsIl9jb21wdXRlS2V5Ym9hcmRDbGFzcyhyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKSJdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLHRhYmluZGV4OiIwIixhbmltYXRlZDohMH0sX2NhbGN1bGF0ZUVsZXZhdGlvbjpmdW5jdGlvbigpe3ZhciBlPTE7dGhpcy5kaXNhYmxlZD9lPTA6dGhpcy5hY3RpdmV8fHRoaXMucHJlc3NlZD9lPTQ6dGhpcy5yZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkJiYoZT0zKSx0aGlzLl9zZXRFbGV2YXRpb24oZSl9LF9jb21wdXRlS2V5Ym9hcmRDbGFzczpmdW5jdGlvbihlKXt0aGlzLnRvZ2dsZUNsYXNzKCJrZXlib2FyZC1mb2N1cyIsZSl9LF9zcGFjZUtleURvd25IYW5kbGVyOmZ1bmN0aW9uKGUpe1l4Ll9zcGFjZUtleURvd25IYW5kbGVyLmNhbGwodGhpcyxlKSx0aGlzLmhhc1JpcHBsZSgpJiZ0aGlzLmdldFJpcHBsZSgpLnJpcHBsZXMubGVuZ3RoPDEmJnRoaXMuX3JpcHBsZS51aURvd25BY3Rpb24oKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKGUpe1l4Ll9zcGFjZUtleVVwSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5oYXNSaXBwbGUoKSYmdGhpcy5fcmlwcGxlLnVpVXBBY3Rpb24oKX19LGEwdD1bU2gsRGksc3UsaFddO3ZhciBzMHQ9UWAKICA8c3R5bGUgaW5jbHVkZT0icGFwZXItbWF0ZXJpYWwtc3R5bGVzIj4KICAgIC8qIE5lZWQgdG8gc3BlY2lmeSB0aGUgc2FtZSBzcGVjaWZpY2l0eSBhcyB0aGUgc3R5bGVzIGltcG9ydGVkIGZyb20gcGFwZXItbWF0ZXJpYWwuICovCiAgICA6aG9zdCB7CiAgICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIG1pbi13aWR0aDogNS4xNGVtOwogICAgICBtYXJnaW46IDAgMC4yOWVtOwogICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICBmb250OiBpbmhlcml0OwogICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICBvdXRsaW5lLXdpZHRoOiAwOwogICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgei1pbmRleDogMDsKICAgICAgcGFkZGluZzogMC43ZW0gMC41N2VtOwoKICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjEiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSIyIl0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iMyJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjQiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSI1Il0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICB9CgogICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgIDpob3N0KFtyYWlzZWRdLmtleWJvYXJkLWZvY3VzKSB7CiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICBAYXBwbHkgLS1wYXBlci1idXR0b24tcmFpc2VkLWtleWJvYXJkLWZvY3VzOwogICAgfQoKICAgIDpob3N0KDpub3QoW3JhaXNlZF0pLmtleWJvYXJkLWZvY3VzKSB7CiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICBAYXBwbHkgLS1wYXBlci1idXR0b24tZmxhdC1rZXlib2FyZC1mb2N1czsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIGNvbG9yOiAjYThhOGE4OwogICAgICBjdXJzb3I6IGF1dG87CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwoKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLWRpc2FibGVkOwogICAgfQoKICAgIDpob3N0KFtkaXNhYmxlZF1bcmFpc2VkXSkgewogICAgICBiYWNrZ3JvdW5kOiAjZWFlYWVhOwogICAgfQoKCiAgICA6aG9zdChbYW5pbWF0ZWRdKSB7CiAgICAgIEBhcHBseSAtLXNoYWRvdy10cmFuc2l0aW9uOwogICAgfQoKICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1idXR0b24taW5rLWNvbG9yKTsKICAgIH0KICA8L3N0eWxlPgoKICA8c2xvdD48L3Nsb3Q+YDtzMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpzMHQsaXM6InBhcGVyLWJ1dHRvbiIsYmVoYXZpb3JzOlthMHRdLHByb3BlcnRpZXM6e3JhaXNlZDp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMSxvYnNlcnZlcjoiX2NhbGN1bGF0ZUVsZXZhdGlvbiJ9fSxfY2FsY3VsYXRlRWxldmF0aW9uOmZ1bmN0aW9uKCl7dGhpcy5yYWlzZWQ/aFcuX2NhbGN1bGF0ZUVsZXZhdGlvbi5hcHBseSh0aGlzKTp0aGlzLl9zZXRFbGV2YXRpb24oMCl9fSk7dmFyIGwwdD1RYAo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogTWF0ZXJpYWwgRGVzaWduIGNvbG9yIHBhbGV0dGUgZm9yIEdvb2dsZSBwcm9kdWN0cyAqLwoKICAgICAgLS1nb29nbGUtcmVkLTEwMDogI2Y0YzdjMzsKICAgICAgLS1nb29nbGUtcmVkLTMwMDogI2U2N2M3MzsKICAgICAgLS1nb29nbGUtcmVkLTUwMDogI2RiNDQzNzsKICAgICAgLS1nb29nbGUtcmVkLTcwMDogI2M1MzkyOTsKCiAgICAgIC0tZ29vZ2xlLWJsdWUtMTAwOiAjYzZkYWZjOwogICAgICAtLWdvb2dsZS1ibHVlLTMwMDogIzdiYWFmNzsKICAgICAgLS1nb29nbGUtYmx1ZS01MDA6ICM0Mjg1ZjQ7CiAgICAgIC0tZ29vZ2xlLWJsdWUtNzAwOiAjMzM2N2Q2OwoKICAgICAgLS1nb29nbGUtZ3JlZW4tMTAwOiAjYjdlMWNkOwogICAgICAtLWdvb2dsZS1ncmVlbi0zMDA6ICM1N2JiOGE7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTUwMDogIzBmOWQ1ODsKICAgICAgLS1nb29nbGUtZ3JlZW4tNzAwOiAjMGI4MDQzOwoKICAgICAgLS1nb29nbGUteWVsbG93LTEwMDogI2ZjZThiMjsKICAgICAgLS1nb29nbGUteWVsbG93LTMwMDogI2Y3Y2I0ZDsKICAgICAgLS1nb29nbGUteWVsbG93LTUwMDogI2Y0YjQwMDsKICAgICAgLS1nb29nbGUteWVsbG93LTcwMDogI2YwOTMwMDsKCiAgICAgIC0tZ29vZ2xlLWdyZXktMTAwOiAjZjVmNWY1OwogICAgICAtLWdvb2dsZS1ncmV5LTMwMDogI2UwZTBlMDsKICAgICAgLS1nb29nbGUtZ3JleS01MDA6ICM5ZTllOWU7CiAgICAgIC0tZ29vZ2xlLWdyZXktNzAwOiAjNjE2MTYxOwoKICAgICAgLyogTWF0ZXJpYWwgRGVzaWduIGNvbG9yIHBhbGV0dGUgZnJvbSBvbmxpbmUgc3BlYyBkb2N1bWVudCAqLwoKICAgICAgLS1wYXBlci1yZWQtNTA6ICNmZmViZWU7CiAgICAgIC0tcGFwZXItcmVkLTEwMDogI2ZmY2RkMjsKICAgICAgLS1wYXBlci1yZWQtMjAwOiAjZWY5YTlhOwogICAgICAtLXBhcGVyLXJlZC0zMDA6ICNlNTczNzM7CiAgICAgIC0tcGFwZXItcmVkLTQwMDogI2VmNTM1MDsKICAgICAgLS1wYXBlci1yZWQtNTAwOiAjZjQ0MzM2OwogICAgICAtLXBhcGVyLXJlZC02MDA6ICNlNTM5MzU7CiAgICAgIC0tcGFwZXItcmVkLTcwMDogI2QzMmYyZjsKICAgICAgLS1wYXBlci1yZWQtODAwOiAjYzYyODI4OwogICAgICAtLXBhcGVyLXJlZC05MDA6ICNiNzFjMWM7CiAgICAgIC0tcGFwZXItcmVkLWExMDA6ICNmZjhhODA7CiAgICAgIC0tcGFwZXItcmVkLWEyMDA6ICNmZjUyNTI7CiAgICAgIC0tcGFwZXItcmVkLWE0MDA6ICNmZjE3NDQ7CiAgICAgIC0tcGFwZXItcmVkLWE3MDA6ICNkNTAwMDA7CgogICAgICAtLXBhcGVyLXBpbmstNTA6ICNmY2U0ZWM7CiAgICAgIC0tcGFwZXItcGluay0xMDA6ICNmOGJiZDA7CiAgICAgIC0tcGFwZXItcGluay0yMDA6ICNmNDhmYjE7CiAgICAgIC0tcGFwZXItcGluay0zMDA6ICNmMDYyOTI7CiAgICAgIC0tcGFwZXItcGluay00MDA6ICNlYzQwN2E7CiAgICAgIC0tcGFwZXItcGluay01MDA6ICNlOTFlNjM7CiAgICAgIC0tcGFwZXItcGluay02MDA6ICNkODFiNjA7CiAgICAgIC0tcGFwZXItcGluay03MDA6ICNjMjE4NWI7CiAgICAgIC0tcGFwZXItcGluay04MDA6ICNhZDE0NTc7CiAgICAgIC0tcGFwZXItcGluay05MDA6ICM4ODBlNGY7CiAgICAgIC0tcGFwZXItcGluay1hMTAwOiAjZmY4MGFiOwogICAgICAtLXBhcGVyLXBpbmstYTIwMDogI2ZmNDA4MTsKICAgICAgLS1wYXBlci1waW5rLWE0MDA6ICNmNTAwNTc7CiAgICAgIC0tcGFwZXItcGluay1hNzAwOiAjYzUxMTYyOwoKICAgICAgLS1wYXBlci1wdXJwbGUtNTA6ICNmM2U1ZjU7CiAgICAgIC0tcGFwZXItcHVycGxlLTEwMDogI2UxYmVlNzsKICAgICAgLS1wYXBlci1wdXJwbGUtMjAwOiAjY2U5M2Q4OwogICAgICAtLXBhcGVyLXB1cnBsZS0zMDA6ICNiYTY4Yzg7CiAgICAgIC0tcGFwZXItcHVycGxlLTQwMDogI2FiNDdiYzsKICAgICAgLS1wYXBlci1wdXJwbGUtNTAwOiAjOWMyN2IwOwogICAgICAtLXBhcGVyLXB1cnBsZS02MDA6ICM4ZTI0YWE7CiAgICAgIC0tcGFwZXItcHVycGxlLTcwMDogIzdiMWZhMjsKICAgICAgLS1wYXBlci1wdXJwbGUtODAwOiAjNmExYjlhOwogICAgICAtLXBhcGVyLXB1cnBsZS05MDA6ICM0YTE0OGM7CiAgICAgIC0tcGFwZXItcHVycGxlLWExMDA6ICNlYTgwZmM7CiAgICAgIC0tcGFwZXItcHVycGxlLWEyMDA6ICNlMDQwZmI7CiAgICAgIC0tcGFwZXItcHVycGxlLWE0MDA6ICNkNTAwZjk7CiAgICAgIC0tcGFwZXItcHVycGxlLWE3MDA6ICNhYTAwZmY7CgogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTUwOiAjZWRlN2Y2OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTEwMDogI2QxYzRlOTsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0yMDA6ICNiMzlkZGI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMzAwOiAjOTU3NWNkOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTQwMDogIzdlNTdjMjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS01MDA6ICM2NzNhYjc7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNjAwOiAjNWUzNWIxOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTcwMDogIzUxMmRhODsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS04MDA6ICM0NTI3YTA7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtOTAwOiAjMzExYjkyOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWExMDA6ICNiMzg4ZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTIwMDogIzdjNGRmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hNDAwOiAjNjUxZmZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWE3MDA6ICM2MjAwZWE7CgogICAgICAtLXBhcGVyLWluZGlnby01MDogI2U4ZWFmNjsKICAgICAgLS1wYXBlci1pbmRpZ28tMTAwOiAjYzVjYWU5OwogICAgICAtLXBhcGVyLWluZGlnby0yMDA6ICM5ZmE4ZGE7CiAgICAgIC0tcGFwZXItaW5kaWdvLTMwMDogIzc5ODZjYjsKICAgICAgLS1wYXBlci1pbmRpZ28tNDAwOiAjNWM2YmMwOwogICAgICAtLXBhcGVyLWluZGlnby01MDA6ICMzZjUxYjU7CiAgICAgIC0tcGFwZXItaW5kaWdvLTYwMDogIzM5NDlhYjsKICAgICAgLS1wYXBlci1pbmRpZ28tNzAwOiAjMzAzZjlmOwogICAgICAtLXBhcGVyLWluZGlnby04MDA6ICMyODM1OTM7CiAgICAgIC0tcGFwZXItaW5kaWdvLTkwMDogIzFhMjM3ZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTEwMDogIzhjOWVmZjsKICAgICAgLS1wYXBlci1pbmRpZ28tYTIwMDogIzUzNmRmZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTQwMDogIzNkNWFmZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTcwMDogIzMwNGZmZTsKCiAgICAgIC0tcGFwZXItYmx1ZS01MDogI2UzZjJmZDsKICAgICAgLS1wYXBlci1ibHVlLTEwMDogI2JiZGVmYjsKICAgICAgLS1wYXBlci1ibHVlLTIwMDogIzkwY2FmOTsKICAgICAgLS1wYXBlci1ibHVlLTMwMDogIzY0YjVmNjsKICAgICAgLS1wYXBlci1ibHVlLTQwMDogIzQyYTVmNTsKICAgICAgLS1wYXBlci1ibHVlLTUwMDogIzIxOTZmMzsKICAgICAgLS1wYXBlci1ibHVlLTYwMDogIzFlODhlNTsKICAgICAgLS1wYXBlci1ibHVlLTcwMDogIzE5NzZkMjsKICAgICAgLS1wYXBlci1ibHVlLTgwMDogIzE1NjVjMDsKICAgICAgLS1wYXBlci1ibHVlLTkwMDogIzBkNDdhMTsKICAgICAgLS1wYXBlci1ibHVlLWExMDA6ICM4MmIxZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hMjAwOiAjNDQ4YWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTQwMDogIzI5NzlmZjsKICAgICAgLS1wYXBlci1ibHVlLWE3MDA6ICMyOTYyZmY7CgogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNTA6ICNlMWY1ZmU7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0xMDA6ICNiM2U1ZmM7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0yMDA6ICM4MWQ0ZmE7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0zMDA6ICM0ZmMzZjc7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS00MDA6ICMyOWI2ZjY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS01MDA6ICMwM2E5ZjQ7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS02MDA6ICMwMzliZTU7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS03MDA6ICMwMjg4ZDE7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS04MDA6ICMwMjc3YmQ7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS05MDA6ICMwMTU3OWI7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hMTAwOiAjODBkOGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTIwMDogIzQwYzRmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWE0MDA6ICMwMGIwZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hNzAwOiAjMDA5MWVhOwoKICAgICAgLS1wYXBlci1jeWFuLTUwOiAjZTBmN2ZhOwogICAgICAtLXBhcGVyLWN5YW4tMTAwOiAjYjJlYmYyOwogICAgICAtLXBhcGVyLWN5YW4tMjAwOiAjODBkZWVhOwogICAgICAtLXBhcGVyLWN5YW4tMzAwOiAjNGRkMGUxOwogICAgICAtLXBhcGVyLWN5YW4tNDAwOiAjMjZjNmRhOwogICAgICAtLXBhcGVyLWN5YW4tNTAwOiAjMDBiY2Q0OwogICAgICAtLXBhcGVyLWN5YW4tNjAwOiAjMDBhY2MxOwogICAgICAtLXBhcGVyLWN5YW4tNzAwOiAjMDA5N2E3OwogICAgICAtLXBhcGVyLWN5YW4tODAwOiAjMDA4MzhmOwogICAgICAtLXBhcGVyLWN5YW4tOTAwOiAjMDA2MDY0OwogICAgICAtLXBhcGVyLWN5YW4tYTEwMDogIzg0ZmZmZjsKICAgICAgLS1wYXBlci1jeWFuLWEyMDA6ICMxOGZmZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hNDAwOiAjMDBlNWZmOwogICAgICAtLXBhcGVyLWN5YW4tYTcwMDogIzAwYjhkNDsKCiAgICAgIC0tcGFwZXItdGVhbC01MDogI2UwZjJmMTsKICAgICAgLS1wYXBlci10ZWFsLTEwMDogI2IyZGZkYjsKICAgICAgLS1wYXBlci10ZWFsLTIwMDogIzgwY2JjNDsKICAgICAgLS1wYXBlci10ZWFsLTMwMDogIzRkYjZhYzsKICAgICAgLS1wYXBlci10ZWFsLTQwMDogIzI2YTY5YTsKICAgICAgLS1wYXBlci10ZWFsLTUwMDogIzAwOTY4ODsKICAgICAgLS1wYXBlci10ZWFsLTYwMDogIzAwODk3YjsKICAgICAgLS1wYXBlci10ZWFsLTcwMDogIzAwNzk2YjsKICAgICAgLS1wYXBlci10ZWFsLTgwMDogIzAwNjk1YzsKICAgICAgLS1wYXBlci10ZWFsLTkwMDogIzAwNGQ0MDsKICAgICAgLS1wYXBlci10ZWFsLWExMDA6ICNhN2ZmZWI7CiAgICAgIC0tcGFwZXItdGVhbC1hMjAwOiAjNjRmZmRhOwogICAgICAtLXBhcGVyLXRlYWwtYTQwMDogIzFkZTliNjsKICAgICAgLS1wYXBlci10ZWFsLWE3MDA6ICMwMGJmYTU7CgogICAgICAtLXBhcGVyLWdyZWVuLTUwOiAjZThmNWU5OwogICAgICAtLXBhcGVyLWdyZWVuLTEwMDogI2M4ZTZjOTsKICAgICAgLS1wYXBlci1ncmVlbi0yMDA6ICNhNWQ2YTc7CiAgICAgIC0tcGFwZXItZ3JlZW4tMzAwOiAjODFjNzg0OwogICAgICAtLXBhcGVyLWdyZWVuLTQwMDogIzY2YmI2YTsKICAgICAgLS1wYXBlci1ncmVlbi01MDA6ICM0Y2FmNTA7CiAgICAgIC0tcGFwZXItZ3JlZW4tNjAwOiAjNDNhMDQ3OwogICAgICAtLXBhcGVyLWdyZWVuLTcwMDogIzM4OGUzYzsKICAgICAgLS1wYXBlci1ncmVlbi04MDA6ICMyZTdkMzI7CiAgICAgIC0tcGFwZXItZ3JlZW4tOTAwOiAjMWI1ZTIwOwogICAgICAtLXBhcGVyLWdyZWVuLWExMDA6ICNiOWY2Y2E7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTIwMDogIzY5ZjBhZTsKICAgICAgLS1wYXBlci1ncmVlbi1hNDAwOiAjMDBlNjc2OwogICAgICAtLXBhcGVyLWdyZWVuLWE3MDA6ICMwMGM4NTM7CgogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTUwOiAjZjFmOGU5OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTEwMDogI2RjZWRjODsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0yMDA6ICNjNWUxYTU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMzAwOiAjYWVkNTgxOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTQwMDogIzljY2M2NTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi01MDA6ICM4YmMzNGE7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNjAwOiAjN2NiMzQyOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTcwMDogIzY4OWYzODsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi04MDA6ICM1NThiMmY7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tOTAwOiAjMzM2OTFlOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWExMDA6ICNjY2ZmOTA7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTIwMDogI2IyZmY1OTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hNDAwOiAjNzZmZjAzOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWE3MDA6ICM2NGRkMTc7CgogICAgICAtLXBhcGVyLWxpbWUtNTA6ICNmOWZiZTc7CiAgICAgIC0tcGFwZXItbGltZS0xMDA6ICNmMGY0YzM7CiAgICAgIC0tcGFwZXItbGltZS0yMDA6ICNlNmVlOWM7CiAgICAgIC0tcGFwZXItbGltZS0zMDA6ICNkY2U3NzU7CiAgICAgIC0tcGFwZXItbGltZS00MDA6ICNkNGUxNTc7CiAgICAgIC0tcGFwZXItbGltZS01MDA6ICNjZGRjMzk7CiAgICAgIC0tcGFwZXItbGltZS02MDA6ICNjMGNhMzM7CiAgICAgIC0tcGFwZXItbGltZS03MDA6ICNhZmI0MmI7CiAgICAgIC0tcGFwZXItbGltZS04MDA6ICM5ZTlkMjQ7CiAgICAgIC0tcGFwZXItbGltZS05MDA6ICM4Mjc3MTc7CiAgICAgIC0tcGFwZXItbGltZS1hMTAwOiAjZjRmZjgxOwogICAgICAtLXBhcGVyLWxpbWUtYTIwMDogI2VlZmY0MTsKICAgICAgLS1wYXBlci1saW1lLWE0MDA6ICNjNmZmMDA7CiAgICAgIC0tcGFwZXItbGltZS1hNzAwOiAjYWVlYTAwOwoKICAgICAgLS1wYXBlci15ZWxsb3ctNTA6ICNmZmZkZTc7CiAgICAgIC0tcGFwZXIteWVsbG93LTEwMDogI2ZmZjljNDsKICAgICAgLS1wYXBlci15ZWxsb3ctMjAwOiAjZmZmNTlkOwogICAgICAtLXBhcGVyLXllbGxvdy0zMDA6ICNmZmYxNzY7CiAgICAgIC0tcGFwZXIteWVsbG93LTQwMDogI2ZmZWU1ODsKICAgICAgLS1wYXBlci15ZWxsb3ctNTAwOiAjZmZlYjNiOwogICAgICAtLXBhcGVyLXllbGxvdy02MDA6ICNmZGQ4MzU7CiAgICAgIC0tcGFwZXIteWVsbG93LTcwMDogI2ZiYzAyZDsKICAgICAgLS1wYXBlci15ZWxsb3ctODAwOiAjZjlhODI1OwogICAgICAtLXBhcGVyLXllbGxvdy05MDA6ICNmNTdmMTc7CiAgICAgIC0tcGFwZXIteWVsbG93LWExMDA6ICNmZmZmOGQ7CiAgICAgIC0tcGFwZXIteWVsbG93LWEyMDA6ICNmZmZmMDA7CiAgICAgIC0tcGFwZXIteWVsbG93LWE0MDA6ICNmZmVhMDA7CiAgICAgIC0tcGFwZXIteWVsbG93LWE3MDA6ICNmZmQ2MDA7CgogICAgICAtLXBhcGVyLWFtYmVyLTUwOiAjZmZmOGUxOwogICAgICAtLXBhcGVyLWFtYmVyLTEwMDogI2ZmZWNiMzsKICAgICAgLS1wYXBlci1hbWJlci0yMDA6ICNmZmUwODI7CiAgICAgIC0tcGFwZXItYW1iZXItMzAwOiAjZmZkNTRmOwogICAgICAtLXBhcGVyLWFtYmVyLTQwMDogI2ZmY2EyODsKICAgICAgLS1wYXBlci1hbWJlci01MDA6ICNmZmMxMDc7CiAgICAgIC0tcGFwZXItYW1iZXItNjAwOiAjZmZiMzAwOwogICAgICAtLXBhcGVyLWFtYmVyLTcwMDogI2ZmYTAwMDsKICAgICAgLS1wYXBlci1hbWJlci04MDA6ICNmZjhmMDA7CiAgICAgIC0tcGFwZXItYW1iZXItOTAwOiAjZmY2ZjAwOwogICAgICAtLXBhcGVyLWFtYmVyLWExMDA6ICNmZmU1N2Y7CiAgICAgIC0tcGFwZXItYW1iZXItYTIwMDogI2ZmZDc0MDsKICAgICAgLS1wYXBlci1hbWJlci1hNDAwOiAjZmZjNDAwOwogICAgICAtLXBhcGVyLWFtYmVyLWE3MDA6ICNmZmFiMDA7CgogICAgICAtLXBhcGVyLW9yYW5nZS01MDogI2ZmZjNlMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtMTAwOiAjZmZlMGIyOwogICAgICAtLXBhcGVyLW9yYW5nZS0yMDA6ICNmZmNjODA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTMwMDogI2ZmYjc0ZDsKICAgICAgLS1wYXBlci1vcmFuZ2UtNDAwOiAjZmZhNzI2OwogICAgICAtLXBhcGVyLW9yYW5nZS01MDA6ICNmZjk4MDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTYwMDogI2ZiOGMwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtNzAwOiAjZjU3YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS04MDA6ICNlZjZjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTkwMDogI2U2NTEwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTEwMDogI2ZmZDE4MDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTIwMDogI2ZmYWI0MDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTQwMDogI2ZmOTEwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTcwMDogI2ZmNjUwMDsKCiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNTA6ICNmYmU5ZTc7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMTAwOiAjZmZjY2JjOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTIwMDogI2ZmYWI5MTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0zMDA6ICNmZjhhNjU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNDAwOiAjZmY3MDQzOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTUwMDogI2ZmNTcyMjsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS02MDA6ICNmNDUxMWU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNzAwOiAjZTY0YTE5OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTgwMDogI2Q4NDMxNTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS05MDA6ICNiZjM2MGM7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTEwMDogI2ZmOWU4MDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hMjAwOiAjZmY2ZTQwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWE0MDA6ICNmZjNkMDA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMDogI2RkMmMwMDsKCiAgICAgIC0tcGFwZXItYnJvd24tNTA6ICNlZmViZTk7CiAgICAgIC0tcGFwZXItYnJvd24tMTAwOiAjZDdjY2M4OwogICAgICAtLXBhcGVyLWJyb3duLTIwMDogI2JjYWFhNDsKICAgICAgLS1wYXBlci1icm93bi0zMDA6ICNhMTg4N2Y7CiAgICAgIC0tcGFwZXItYnJvd24tNDAwOiAjOGQ2ZTYzOwogICAgICAtLXBhcGVyLWJyb3duLTUwMDogIzc5NTU0ODsKICAgICAgLS1wYXBlci1icm93bi02MDA6ICM2ZDRjNDE7CiAgICAgIC0tcGFwZXItYnJvd24tNzAwOiAjNWQ0MDM3OwogICAgICAtLXBhcGVyLWJyb3duLTgwMDogIzRlMzQyZTsKICAgICAgLS1wYXBlci1icm93bi05MDA6ICMzZTI3MjM7CgogICAgICAtLXBhcGVyLWdyZXktNTA6ICNmYWZhZmE7CiAgICAgIC0tcGFwZXItZ3JleS0xMDA6ICNmNWY1ZjU7CiAgICAgIC0tcGFwZXItZ3JleS0yMDA6ICNlZWVlZWU7CiAgICAgIC0tcGFwZXItZ3JleS0zMDA6ICNlMGUwZTA7CiAgICAgIC0tcGFwZXItZ3JleS00MDA6ICNiZGJkYmQ7CiAgICAgIC0tcGFwZXItZ3JleS01MDA6ICM5ZTllOWU7CiAgICAgIC0tcGFwZXItZ3JleS02MDA6ICM3NTc1NzU7CiAgICAgIC0tcGFwZXItZ3JleS03MDA6ICM2MTYxNjE7CiAgICAgIC0tcGFwZXItZ3JleS04MDA6ICM0MjQyNDI7CiAgICAgIC0tcGFwZXItZ3JleS05MDA6ICMyMTIxMjE7CgogICAgICAtLXBhcGVyLWJsdWUtZ3JleS01MDogI2VjZWZmMTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMTAwOiAjY2ZkOGRjOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0yMDA6ICNiMGJlYzU7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTMwMDogIzkwYTRhZTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNDAwOiAjNzg5MDljOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS01MDA6ICM2MDdkOGI7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTYwMDogIzU0NmU3YTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNzAwOiAjNDU1YTY0OwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS04MDA6ICMzNzQ3NGY7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTkwMDogIzI2MzIzODsKCiAgICAgIC8qIG9wYWNpdHkgZm9yIGRhcmsgdGV4dCBvbiBhIGxpZ2h0IGJhY2tncm91bmQgKi8KICAgICAgLS1kYXJrLWRpdmlkZXItb3BhY2l0eTogMC4xMjsKICAgICAgLS1kYXJrLWRpc2FibGVkLW9wYWNpdHk6IDAuMzg7IC8qIG9yIGhpbnQgdGV4dCBvciBpY29uICovCiAgICAgIC0tZGFyay1zZWNvbmRhcnktb3BhY2l0eTogMC41NDsKICAgICAgLS1kYXJrLXByaW1hcnktb3BhY2l0eTogMC44NzsKCiAgICAgIC8qIG9wYWNpdHkgZm9yIGxpZ2h0IHRleHQgb24gYSBkYXJrIGJhY2tncm91bmQgKi8KICAgICAgLS1saWdodC1kaXZpZGVyLW9wYWNpdHk6IDAuMTI7CiAgICAgIC0tbGlnaHQtZGlzYWJsZWQtb3BhY2l0eTogMC4zOyAvKiBvciBoaW50IHRleHQgb3IgaWNvbiAqLwogICAgICAtLWxpZ2h0LXNlY29uZGFyeS1vcGFjaXR5OiAwLjc7CiAgICAgIC0tbGlnaHQtcHJpbWFyeS1vcGFjaXR5OiAxLjA7CgogICAgfQoKICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KYDtsMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsMHQuY29udGVudCk7dmFyIGMwdD1RYAo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewogICAgICAvKgogICAgICAgKiBZb3UgY2FuIHVzZSB0aGVzZSBnZW5lcmljIHZhcmlhYmxlcyBpbiB5b3VyIGVsZW1lbnRzIGZvciBlYXN5IHRoZW1pbmcuCiAgICAgICAqIEZvciBleGFtcGxlLCBpZiBhbGwgeW91ciBlbGVtZW50cyB1c2UgXGAtLXByaW1hcnktdGV4dC1jb2xvclxgIGFzIGl0cyBtYWluCiAgICAgICAqIGNvbG9yLCB0aGVuIHN3aXRjaGluZyBmcm9tIGEgbGlnaHQgdG8gYSBkYXJrIHRoZW1lIGlzIGp1c3QgYSBtYXR0ZXIgb2YKICAgICAgICogY2hhbmdpbmcgdGhlIHZhbHVlIG9mIFxgLS1wcmltYXJ5LXRleHQtY29sb3JcYCBpbiB5b3VyIGFwcGxpY2F0aW9uLgogICAgICAgKi8KICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLXRleHQtY29sb3IpOwogICAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGlnaHQtdGhlbWUtYmFja2dyb3VuZC1jb2xvcik7CiAgICAgIC0tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLXNlY29uZGFyeS1jb2xvcik7CiAgICAgIC0tZGlzYWJsZWQtdGV4dC1jb2xvcjogdmFyKC0tbGlnaHQtdGhlbWUtZGlzYWJsZWQtY29sb3IpOwogICAgICAtLWRpdmlkZXItY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWRpdmlkZXItY29sb3IpOwogICAgICAtLWVycm9yLWNvbG9yOiB2YXIoLS1wYXBlci1kZWVwLW9yYW5nZS1hNzAwKTsKCiAgICAgIC8qCiAgICAgICAqIFByaW1hcnkgYW5kIGFjY2VudCBjb2xvcnMuIEFsc28gc2VlIGNvbG9yLmpzIGZvciBtb3JlIGNvbG9ycy4KICAgICAgICovCiAgICAgIC0tcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgIC0tbGlnaHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTEwMCk7CiAgICAgIC0tZGFyay1wcmltYXJ5LWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tNzAwKTsKCiAgICAgIC0tYWNjZW50LWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLWEyMDApOwogICAgICAtLWxpZ2h0LWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hMTAwKTsKICAgICAgLS1kYXJrLWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hNDAwKTsKCgogICAgICAvKgogICAgICAgKiBNYXRlcmlhbCBEZXNpZ24gTGlnaHQgYmFja2dyb3VuZCB0aGVtZQogICAgICAgKi8KICAgICAgLS1saWdodC10aGVtZS1iYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWxpZ2h0LXRoZW1lLWJhc2UtY29sb3I6ICMwMDAwMDA7CiAgICAgIC0tbGlnaHQtdGhlbWUtdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS05MDApOwogICAgICAtLWxpZ2h0LXRoZW1lLXNlY29uZGFyeS1jb2xvcjogIzczNzM3MzsgIC8qIGZvciBzZWNvbmRhcnkgdGV4dCBhbmQgaWNvbnMgKi8KICAgICAgLS1saWdodC10aGVtZS1kaXNhYmxlZC1jb2xvcjogIzliOWI5YjsgIC8qIGRpc2FibGVkL2hpbnQgdGV4dCAqLwogICAgICAtLWxpZ2h0LXRoZW1lLWRpdmlkZXItY29sb3I6ICNkYmRiZGI7CgogICAgICAvKgogICAgICAgKiBNYXRlcmlhbCBEZXNpZ24gRGFyayBiYWNrZ3JvdW5kIHRoZW1lCiAgICAgICAqLwogICAgICAtLWRhcmstdGhlbWUtYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS05MDApOwogICAgICAtLWRhcmstdGhlbWUtYmFzZS1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1kYXJrLXRoZW1lLXRleHQtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tZGFyay10aGVtZS1zZWNvbmRhcnktY29sb3I6ICNiY2JjYmM7ICAvKiBmb3Igc2Vjb25kYXJ5IHRleHQgYW5kIGljb25zICovCiAgICAgIC0tZGFyay10aGVtZS1kaXNhYmxlZC1jb2xvcjogIzY0NjQ2NDsgIC8qIGRpc2FibGVkL2hpbnQgdGV4dCAqLwogICAgICAtLWRhcmstdGhlbWUtZGl2aWRlci1jb2xvcjogIzNjM2MzYzsKCiAgICAgIC8qCiAgICAgICAqIERlcHJlY2F0ZWQgdmFsdWVzIGJlY2F1c2Ugb2YgdGhlaXIgY29uZnVzaW5nIG5hbWVzLgogICAgICAgKi8KICAgICAgLS10ZXh0LXByaW1hcnktY29sb3I6IHZhcigtLWRhcmstdGhlbWUtdGV4dC1jb2xvcik7CiAgICAgIC0tZGVmYXVsdC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1wcmltYXJ5LWNvbG9yKTsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT5gO2MwdC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGMwdC5jb250ZW50KTt2YXIgRWg9e3Byb3BlcnRpZXM6e25hbWU6e3R5cGU6U3RyaW5nfSx2YWx1ZTp7bm90aWZ5OiEwLHR5cGU6U3RyaW5nfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt9LGRldGFjaGVkOmZ1bmN0aW9uKCl7fX07dmFyIGZXPW51bGwsVGg9e3Byb3BlcnRpZXM6e3ZhbGlkYXRvcjp7dHlwZTpTdHJpbmd9LGludmFsaWQ6e25vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfaW52YWxpZENoYW5nZWQifX0scmVnaXN0ZXJlZDpmdW5jdGlvbigpe2ZXPW5ldyBnbyh7dHlwZToidmFsaWRhdG9yIn0pfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmludmFsaWQ/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIsInRydWUiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1pbnZhbGlkIil9LGdldCBfdmFsaWRhdG9yKCl7cmV0dXJuIGZXJiZmVy5ieUtleSh0aGlzLnZhbGlkYXRvcil9LGhhc1ZhbGlkYXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWxpZGF0b3IhPW51bGx9LHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiZ0aGlzLnZhbHVlIT09dm9pZCAwP3RoaXMuaW52YWxpZD0hdGhpcy5fZ2V0VmFsaWRpdHkodGhpcy52YWx1ZSk6dGhpcy5pbnZhbGlkPSF0aGlzLl9nZXRWYWxpZGl0eShlKSwhdGhpcy5pbnZhbGlkfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGFzVmFsaWRhdG9yKCk/dGhpcy5fdmFsaWRhdG9yLnZhbGlkYXRlKGUpOiEwfX07dmFyIHBXPXtwcm9wZXJ0aWVzOntjaGVja2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG5vdGlmeTohMCxvYnNlcnZlcjoiX2NoZWNrZWRDaGFuZ2VkIn0sdG9nZ2xlczp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sdmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiJvbiIsb2JzZXJ2ZXI6Il92YWx1ZUNoYW5nZWQifX0sb2JzZXJ2ZXJzOlsiX3JlcXVpcmVkQ2hhbmdlZChyZXF1aXJlZCkiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5faGFzSXJvbkNoZWNrZWRFbGVtZW50QmVoYXZpb3I9ITB9LF9nZXRWYWxpZGl0eTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8IXRoaXMucmVxdWlyZWR8fHRoaXMuY2hlY2tlZH0sX3JlcXVpcmVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMucmVxdWlyZWQ/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtcmVxdWlyZWQiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcmVxdWlyZWQiKX0sX2NoZWNrZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5hY3RpdmU9dGhpcy5jaGVja2VkLHRoaXMuZmlyZSgiaXJvbi1jaGFuZ2UiKX0sX3ZhbHVlQ2hhbmdlZDpmdW5jdGlvbigpeyh0aGlzLnZhbHVlPT09dm9pZCAwfHx0aGlzLnZhbHVlPT09bnVsbCkmJih0aGlzLnZhbHVlPSJvbiIpfX0sdTB0PVtFaCxUaCxwV107dmFyIGZFPXtvYnNlcnZlcnM6WyJfZm9jdXNlZENoYW5nZWQocmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiXSxfZm9jdXNlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLmhvbGREb3duPWUpfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dmFyIGU9c3UuX2NyZWF0ZVJpcHBsZSgpO3JldHVybiBlLmlkPSJpbmsiLGUuc2V0QXR0cmlidXRlKCJjZW50ZXIiLCIiKSxlLmNsYXNzTGlzdC5hZGQoImNpcmNsZSIpLGV9fSxqeD1bU2gsRGksc3UsZkVdO3ZhciBUYmU9e19jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe3BXLl9jaGVja2VkQ2hhbmdlZC5jYWxsKHRoaXMpLHRoaXMuaGFzUmlwcGxlKCkmJih0aGlzLmNoZWNrZWQ/dGhpcy5fcmlwcGxlLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsIiIpOnRoaXMuX3JpcHBsZS5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKSl9LF9idXR0b25TdGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oKXtzdS5fYnV0dG9uU3RhdGVDaGFuZ2VkLmNhbGwodGhpcyksIXRoaXMuZGlzYWJsZWQmJnRoaXMuaXNBdHRhY2hlZCYmKHRoaXMuY2hlY2tlZD10aGlzLmFjdGl2ZSl9fSxYeD1bangsdTB0LFRiZV07dmFyIGgwdD1RYDxzdHlsZT4KICA6aG9zdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemU6IHZhcigtLXBhcGVyLWNoZWNrYm94LXNpemUsIDE4cHgpOwogICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZWQgaW4gXGBhdHRhY2hlZFxgLiAqLwogICAgLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplOiB2YXIoLS1wYXBlci1jaGVja2JveC1pbmstc2l6ZSwgLTFweCk7CiAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgbGluZS1oZWlnaHQ6IDA7CiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogIH0KCiAgOmhvc3QoW2hpZGRlbl0pIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9CgogIDpob3N0KDpmb2N1cykgewogICAgb3V0bGluZTogbm9uZTsKICB9CgogIC5oaWRkZW4gewogICAgZGlzcGxheTogbm9uZTsKICB9CgogICNjaGVja2JveENvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKTsKICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKTsKICAgIG1pbi13aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKTsKICAgIG1hcmdpbjogdmFyKC0tcGFwZXItY2hlY2tib3gtbWFyZ2luLCBpbml0aWFsKTsKICAgIHZlcnRpY2FsLWFsaWduOiB2YXIoLS1wYXBlci1jaGVja2JveC12ZXJ0aWNhbC1hbGlnbiwgbWlkZGxlKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1iYWNrZ3JvdW5kLWNvbG9yLCB0cmFuc3BhcmVudCk7CiAgfQoKICAjaW5rIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKCiAgICAvKiBDZW50ZXIgdGhlIHJpcHBsZSBpbiB0aGUgY2hlY2tib3ggYnkgbmVnYXRpdmUgb2Zmc2V0dGluZyBpdCBieQogICAgICogKGlua1dpZHRoIC0gcmlwcGxlV2lkdGgpIC8gMiAqLwogICAgdG9wOiBjYWxjKDBweCAtICh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKSAtIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpIC8gMik7CiAgICBsZWZ0OiBjYWxjKDBweCAtICh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKSAtIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpIC8gMik7CiAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSk7CiAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpOwogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC42OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgfQoKICAjaW5rOmRpcihydGwpIHsKICAgIHJpZ2h0OiBjYWxjKDBweCAtICh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKSAtIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpIC8gMik7CiAgICBsZWZ0OiBhdXRvOwogIH0KCiAgI2lua1tjaGVja2VkXSB7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICB9CgogICNjaGVja2JveCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgaGVpZ2h0OiAxMDAlOwogICAgYm9yZGVyOiBzb2xpZCAycHg7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxNDBtcywgYm9yZGVyLWNvbG9yIDE0MG1zOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxNDBtcywgYm9yZGVyLWNvbG9yIDE0MG1zOwoKICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICB9CgogIC8qIGNoZWNrYm94IGNoZWNrZWQgYW5pbWF0aW9ucyAqLwogICNjaGVja2JveC5jaGVja2VkICNjaGVja21hcmsgewogICAgLXdlYmtpdC1hbmltYXRpb246IGNoZWNrbWFyay1leHBhbmQgMTQwbXMgZWFzZS1vdXQgZm9yd2FyZHM7CiAgICBhbmltYXRpb246IGNoZWNrbWFyay1leHBhbmQgMTQwbXMgZWFzZS1vdXQgZm9yd2FyZHM7CgogICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICB9CgogIEAtd2Via2l0LWtleWZyYW1lcyBjaGVja21hcmstZXhwYW5kIHsKICAgIDAlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAsIDApIHJvdGF0ZSg0NWRlZyk7CiAgICB9CiAgICAxMDAlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHJvdGF0ZSg0NWRlZyk7CiAgICB9CiAgfQoKICBAa2V5ZnJhbWVzIGNoZWNrbWFyay1leHBhbmQgewogICAgMCUgewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAsIDApIHJvdGF0ZSg0NWRlZyk7CiAgICB9CiAgICAxMDAlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgfQogIH0KCiAgI2NoZWNrYm94LmNoZWNrZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgfQoKICAjY2hlY2ttYXJrIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAzNiU7CiAgICBoZWlnaHQ6IDcwJTsKICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICBib3JkZXItdG9wOiBub25lOwogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItcmlnaHQtd2lkdGg6IGNhbGMoMi8xNSAqIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpOwogICAgYm9yZGVyLWJvdHRvbS13aWR0aDogY2FsYygyLzE1ICogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSk7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrbWFyay1jb2xvciwgd2hpdGUpOwogICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiA5NyUgODYlOwogICAgdHJhbnNmb3JtLW9yaWdpbjogOTclIDg2JTsKICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvKiBwcm90ZWN0IGFnYWluc3QgcGFnZS1sZXZlbCBib3gtc2l6aW5nICovCiAgfQoKICAjY2hlY2ttYXJrOmRpcihydGwpIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogNTAlIDE0JTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAxNCU7CiAgfQoKICAvKiBsYWJlbCAqLwogICNjaGVja2JveExhYmVsIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBAYXBwbHkgLS1wYXBlci1jaGVja2JveC1sYWJlbDsKICB9CgogIDpob3N0KFtjaGVja2VkXSkgI2NoZWNrYm94TGFiZWwgewogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLWNoZWNrZWQtY29sb3IsIHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKSk7CiAgICBAYXBwbHkgLS1wYXBlci1jaGVja2JveC1sYWJlbC1jaGVja2VkOwogIH0KCiAgI2NoZWNrYm94TGFiZWw6ZGlyKHJ0bCkgewogICAgcGFkZGluZy1yaWdodDogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtc3BhY2luZywgOHB4KTsKICAgIHBhZGRpbmctbGVmdDogMDsKICB9CgogICNjaGVja2JveExhYmVsW2hpZGRlbl0gewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIC8qIGRpc2FibGVkIHN0YXRlICovCgogIDpob3N0KFtkaXNhYmxlZF0pICNjaGVja2JveCB7CiAgICBvcGFjaXR5OiAwLjU7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdW2NoZWNrZWRdKSAjY2hlY2tib3ggewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIG9wYWNpdHk6IDAuNTsKICB9CgogIDpob3N0KFtkaXNhYmxlZF0pICNjaGVja2JveExhYmVsICB7CiAgICBvcGFjaXR5OiAwLjY1OwogIH0KCiAgLyogaW52YWxpZCBzdGF0ZSAqLwogICNjaGVja2JveC5pbnZhbGlkOm5vdCguY2hlY2tlZCkgewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1lcnJvci1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICB9Cjwvc3R5bGU+Cgo8ZGl2IGlkPSJjaGVja2JveENvbnRhaW5lciI+CiAgPGRpdiBpZD0iY2hlY2tib3giIGNsYXNzJD0iW1tfY29tcHV0ZUNoZWNrYm94Q2xhc3MoY2hlY2tlZCwgaW52YWxpZCldXSI+CiAgICA8ZGl2IGlkPSJjaGVja21hcmsiIGNsYXNzJD0iW1tfY29tcHV0ZUNoZWNrbWFya0NsYXNzKGNoZWNrZWQpXV0iPjwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9ImNoZWNrYm94TGFiZWwiPjxzbG90Pjwvc2xvdD48L2Rpdj5gO2gwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOmgwdCxpczoicGFwZXItY2hlY2tib3giLGJlaGF2aW9yczpbWHhdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJjaGVja2JveCIsImFyaWEtY2hlY2tlZCI6ITEsdGFiaW5kZXg6MH0scHJvcGVydGllczp7YXJpYUFjdGl2ZUF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImFyaWEtY2hlY2tlZCJ9fSxhdHRhY2hlZDpmdW5jdGlvbigpe1RtKHRoaXMsZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplIikudHJpbSgpO2lmKGU9PT0iLTFweCIpe3ZhciB0PXRoaXMuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKCItLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSIpLnRyaW0oKSxyPSJweCIsbj10Lm1hdGNoKC9bQS1aYS16XSskLyk7biE9PW51bGwmJihyPW5bMF0pO3ZhciBpPXBhcnNlRmxvYXQodCksbz04LzMqaTtyPT09InB4IiYmKG89TWF0aC5mbG9vcihvKSxvJTIhPT1pJTImJm8rKyksdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWluay1zaXplIjpvK3J9KX19KX0sX2NvbXB1dGVDaGVja2JveENsYXNzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9IiI7cmV0dXJuIGUmJihyKz0iY2hlY2tlZCAiKSx0JiYocis9ImludmFsaWQiKSxyfSxfY29tcHV0ZUNoZWNrbWFya0NsYXNzOmZ1bmN0aW9uKGUpe3JldHVybiBlPyIiOiJoaWRkZW4ifSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JpcHBsZUNvbnRhaW5lcj10aGlzLiQuY2hlY2tib3hDb250YWluZXIsZkUuX2NyZWF0ZVJpcHBsZS5jYWxsKHRoaXMpfX0pO2lmKCF3aW5kb3cucG9seW1lclNraXBMb2FkaW5nRm9udFJvYm90byl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2UucmVsPSJzdHlsZXNoZWV0IixlLnR5cGU9InRleHQvY3NzIixlLmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLGUuaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVJvYm90bytNb25vOjQwMCw3MDB8Um9ib3RvOjQwMCwzMDAsMzAwaXRhbGljLDQwMGl0YWxpYyw1MDAsNTAwaXRhbGljLDcwMCw3MDBpdGFsaWMiLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZSl9dmFyIGYwdD1RYDxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAvKiBTaGFyZWQgU3R5bGVzICovCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tYmFzZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgJ05vdG8nLCBzYW5zLXNlcmlmOwogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOiB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsICdDb25zb2xhcycsICdNZW5sbycsIG1vbm9zcGFjZTsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tZXhwZW5zaXZlLWtlcm5pbmc6IHsKICAgICAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA6IHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH07CgogICAgICAvKiBNYXRlcmlhbCBGb250IFN0eWxlcyAqLwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXk0OiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wNDRlbTsKICAgICAgICBsaW5lLWhlaWdodDogMTIwcHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTM6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiA1NnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDI2ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDQ1cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMThlbTsKICAgICAgICBsaW5lLWhlaWdodDogNDhweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5MTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMzRweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQwcHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtaGVhZGxpbmU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMTJlbTsKICAgICAgICBsaW5lLWhlaWdodDogMzJweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC10aXRsZTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjhweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1zdWJoZWFkOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjRweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1ib2R5MTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWNhcHRpb246IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDExZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtbWVudTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjRweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1idXR0b246IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMjogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWNvZGUxOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tY29kZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH07CgogICAgfQoKICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT5gO2YwdC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGYwdC5jb250ZW50KTt2YXIgZFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtkVy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTtkVy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1kaWFsb2ctc2hhcmVkLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAyNHB4IDQwcHg7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWRpYWxvZy1iYWNrZ3JvdW5kLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZGlhbG9nLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1ib2R5MTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTE2ZHA7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKC5uby1wYWRkaW5nKSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCo6Zmlyc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CgogICAgICAvKiBJbiAxLngsIHRoaXMgc2VsZWN0b3Igd2FzIFxgOmhvc3QgPiA6OmNvbnRlbnQgaDJcYC4gSW4gMi54IDxzbG90PiBhbGxvd3MKICAgICAgdG8gc2VsZWN0IGRpcmVjdCBjaGlsZHJlbiBvbmx5LCB3aGljaCBpbmNyZWFzZXMgdGhlIHdlaWdodCBvZiB0aGlzCiAgICAgIHNlbGVjdG9yLCBzbyB3ZSBoYXZlIHRvIHJlLWRlZmluZSBmaXJzdC1jaGlsZC9sYXN0LWNoaWxkIG1hcmdpbnMgYmVsb3cuICovCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyKSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC10aXRsZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLXRvcC4gKi8KICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6Zmlyc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZy10aXRsZTsKICAgICAgfQoKICAgICAgLyogQXBwbHkgbWl4aW4gYWdhaW4sIGluIGNhc2UgaXQgc2V0cyBtYXJnaW4tYm90dG9tLiAqLwogICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMjpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKC5wYXBlci1kaWFsb2ctYnV0dG9ucyksCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKC5idXR0b25zKSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweCA4cHggOHB4IDI0cHg7CiAgICAgICAgbWFyZ2luOiAwOwoKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZGlhbG9nLWJ1dHRvbi1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGRXLmNvbnRlbnQpO3ZhciBwMHQ9e3Byb3BlcnRpZXM6e2FuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGVudHJ5QW5pbWF0aW9uOntvYnNlcnZlcjoiX2VudHJ5QW5pbWF0aW9uQ2hhbmdlZCIsdHlwZTpTdHJpbmd9LGV4aXRBbmltYXRpb246e29ic2VydmVyOiJfZXhpdEFuaW1hdGlvbkNoYW5nZWQiLHR5cGU6U3RyaW5nfX0sX2VudHJ5QW5pbWF0aW9uQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uQ29uZmlnPXRoaXMuYW5pbWF0aW9uQ29uZmlnfHx7fSx0aGlzLmFuaW1hdGlvbkNvbmZpZy5lbnRyeT1be25hbWU6dGhpcy5lbnRyeUFuaW1hdGlvbixub2RlOnRoaXN9XX0sX2V4aXRBbmltYXRpb25DaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25Db25maWc9dGhpcy5hbmltYXRpb25Db25maWd8fHt9LHRoaXMuYW5pbWF0aW9uQ29uZmlnLmV4aXQ9W3tuYW1lOnRoaXMuZXhpdEFuaW1hdGlvbixub2RlOnRoaXN9XX0sX2NvcHlQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpZVtyXT10W3JdfSxfY2xvbmVDb25maWc6ZnVuY3Rpb24oZSl7dmFyIHQ9e2lzQ2xvbmU6ITB9O3JldHVybiB0aGlzLl9jb3B5UHJvcGVydGllcyh0LGUpLHR9LF9nZXRBbmltYXRpb25Db25maWdSZWN1cnNpdmU6ZnVuY3Rpb24oZSx0LHIpe2lmKCEhdGhpcy5hbmltYXRpb25Db25maWcpe2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlJiZ0eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWcudmFsdWU9PSJmdW5jdGlvbiIpe3RoaXMuX3dhcm4odGhpcy5fbG9nZigicGxheUFuaW1hdGlvbiIsIlBsZWFzZSBwdXQgJ2FuaW1hdGlvbkNvbmZpZycgaW5zaWRlIG9mIHlvdXIgY29tcG9uZW50cyAncHJvcGVydGllcycgb2JqZWN0IGluc3RlYWQgb2Ygb3V0c2lkZSBvZiBpdC4iKSk7cmV0dXJufXZhciBuO2lmKGU/bj10aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXTpuPXRoaXMuYW5pbWF0aW9uQ29uZmlnLEFycmF5LmlzQXJyYXkobil8fChuPVtuXSksbilmb3IodmFyIGksbz0wO2k9bltvXTtvKyspaWYoaS5hbmltYXRhYmxlKWkuYW5pbWF0YWJsZS5fZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlKGkudHlwZXx8ZSx0LHIpO2Vsc2UgaWYoaS5pZCl7dmFyIGE9dFtpLmlkXTthPyhhLmlzQ2xvbmV8fCh0W2kuaWRdPXRoaXMuX2Nsb25lQ29uZmlnKGEpLGE9dFtpLmlkXSksdGhpcy5fY29weVByb3BlcnRpZXMoYSxpKSk6dFtpLmlkXT1pfWVsc2Ugci5wdXNoKGkpfX0sZ2V0QW5pbWF0aW9uQ29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXt9LHI9W107dGhpcy5fZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlKGUsdCxyKTtmb3IodmFyIG4gaW4gdClyLnB1c2godFtuXSk7cmV0dXJuIHJ9fTt2YXIgQ2JlPXtfY29uZmlndXJlQW5pbWF0aW9uczpmdW5jdGlvbihlKXt2YXIgdD1bXSxyPVtdO2lmKGUubGVuZ3RoPjApZm9yKGxldCBpLG89MDtpPWVbb107bysrKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGkubmFtZSk7aWYoYS5pc05lb25BbmltYXRpb24pe2xldCBzPW51bGw7YS5jb25maWd1cmV8fChhLmNvbmZpZ3VyZT1mdW5jdGlvbihsKXtyZXR1cm4gbnVsbH0pLHM9YS5jb25maWd1cmUoaSksci5wdXNoKHtyZXN1bHQ6cyxjb25maWc6aSxuZW9uQW5pbWF0aW9uOmF9KX1lbHNlIGNvbnNvbGUud2Fybih0aGlzLmlzKyI6IixpLm5hbWUsIm5vdCBmb3VuZCEiKX1mb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7bGV0IGk9cltuXS5yZXN1bHQsbz1yW25dLmNvbmZpZyxhPXJbbl0ubmVvbkFuaW1hdGlvbjt0cnl7dHlwZW9mIGkuY2FuY2VsIT0iZnVuY3Rpb24iJiYoaT1kb2N1bWVudC50aW1lbGluZS5wbGF5KGkpKX1jYXRjaChzKXtpPW51bGwsY29uc29sZS53YXJuKCJDb3VsZG50IHBsYXkiLCIoIixvLm5hbWUsIikuIixzKX1pJiZ0LnB1c2goe25lb25BbmltYXRpb246YSxjb25maWc6byxhbmltYXRpb246aX0pfXJldHVybiB0fSxfc2hvdWxkQ29tcGxldGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSEwLHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdLmFuaW1hdGlvbi5wbGF5U3RhdGUhPSJmaW5pc2hlZCIpe3Q9ITE7YnJlYWt9cmV0dXJuIHR9LF9jb21wbGV0ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLm5lb25BbmltYXRpb24uY29tcGxldGUoZVt0XS5jb25maWcpO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0uYW5pbWF0aW9uLmNhbmNlbCgpfSxwbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5nZXRBbmltYXRpb25Db25maWcoZSk7aWYoISFyKXt0aGlzLl9hY3RpdmU9dGhpcy5fYWN0aXZlfHx7fSx0aGlzLl9hY3RpdmVbZV0mJih0aGlzLl9jb21wbGV0ZSh0aGlzLl9hY3RpdmVbZV0pLGRlbGV0ZSB0aGlzLl9hY3RpdmVbZV0pO3ZhciBuPXRoaXMuX2NvbmZpZ3VyZUFuaW1hdGlvbnMocik7aWYobi5sZW5ndGg9PTApe3RoaXMuZmlyZSgibmVvbi1hbmltYXRpb24tZmluaXNoIix0LHtidWJibGVzOiExfSk7cmV0dXJufXRoaXMuX2FjdGl2ZVtlXT1uO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKW5baV0uYW5pbWF0aW9uLm9uZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fc2hvdWxkQ29tcGxldGUobikmJih0aGlzLl9jb21wbGV0ZShuKSxkZWxldGUgdGhpcy5fYWN0aXZlW2VdLHRoaXMuZmlyZSgibmVvbi1hbmltYXRpb24tZmluaXNoIix0LHtidWJibGVzOiExfSkpfS5iaW5kKHRoaXMpfX0sY2FuY2VsQW5pbWF0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuX2FjdGl2ZSl7dmFyIHQ9dGhpcy5fYWN0aXZlW2VdO2Zvcih2YXIgciBpbiB0KXRbcl0uYW5pbWF0aW9uLmNhbmNlbCgpfXRoaXMuX2FjdGl2ZT17fX19LHg5PVtwMHQsQ2JlXTt2YXIgYjksQWJlPSgpPT57aWYoYjkhPT12b2lkIDApcmV0dXJuIGI5O2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO09iamVjdC5hc3NpZ24oZS5zdHlsZSx7b3ZlcmZsb3c6ImF1dG8iLHBvc2l0aW9uOiJmaXhlZCIsbGVmdDoiMHB4Iix0b3A6IjBweCIsbWF4V2lkdGg6IjEwMHB4IixtYXhIZWlnaHQ6IjEwMHB4In0pO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LnN0eWxlLndpZHRoPSIyMDBweCIsdC5zdHlsZS5oZWlnaHQ9IjIwMHB4IixlLmFwcGVuZENoaWxkKHQpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksYjk9TWF0aC5hYnMoZS5vZmZzZXRXaWR0aC0xMDApPjE/ZS5vZmZzZXRXaWR0aC1lLmNsaWVudFdpZHRoOjAsZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlKSxiOX0sZDB0PXtwcm9wZXJ0aWVzOntzaXppbmdUYXJnZXQ6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSxmaXRJbnRvOnt0eXBlOk9iamVjdCx2YWx1ZTp3aW5kb3d9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxwb3NpdGlvblRhcmdldDp7dHlwZTpFbGVtZW50fSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nfSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZ30sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LGF1dG9GaXRPbkF0dGFjaDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9maXRJbmZvOnt0eXBlOk9iamVjdH19LGdldCBfZml0V2lkdGgoKXt2YXIgZTtyZXR1cm4gdGhpcy5maXRJbnRvPT09d2luZG93P2U9dGhpcy5maXRJbnRvLmlubmVyV2lkdGg6ZT10aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsZX0sZ2V0IF9maXRIZWlnaHQoKXt2YXIgZTtyZXR1cm4gdGhpcy5maXRJbnRvPT09d2luZG93P2U9dGhpcy5maXRJbnRvLmlubmVySGVpZ2h0OmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCxlfSxnZXQgX2ZpdExlZnQoKXt2YXIgZTtyZXR1cm4gdGhpcy5maXRJbnRvPT09d2luZG93P2U9MDplPXRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LGV9LGdldCBfZml0VG9wKCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPTA6ZT10aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLGV9LGdldCBfZGVmYXVsdFBvc2l0aW9uVGFyZ2V0KCl7dmFyIGU9enQodGhpcykucGFyZW50Tm9kZTtyZXR1cm4gZSYmZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmKGU9ZS5ob3N0KSxlfSxnZXQgX2xvY2FsZUhvcml6b250YWxBbGlnbigpe2lmKHRoaXMuX2lzUlRMKXtpZih0aGlzLmhvcml6b250YWxBbGlnbj09PSJyaWdodCIpcmV0dXJuImxlZnQiO2lmKHRoaXMuaG9yaXpvbnRhbEFsaWduPT09ImxlZnQiKXJldHVybiJyaWdodCJ9cmV0dXJuIHRoaXMuaG9yaXpvbnRhbEFsaWdufSxnZXQgX19zaG91bGRQb3NpdGlvbigpe3JldHVybih0aGlzLmhvcml6b250YWxBbGlnbnx8dGhpcy52ZXJ0aWNhbEFsaWduKSYmdGhpcy5wb3NpdGlvblRhcmdldH0sZ2V0IF9pc1JUTCgpe3JldHVybiB0eXBlb2YgdGhpcy5fbWVtb2l6ZWRJc1JUTD09InVuZGVmaW5lZCImJih0aGlzLl9tZW1vaXplZElzUlRMPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmRpcmVjdGlvbj09InJ0bCIpLHRoaXMuX21lbW9pemVkSXNSVEx9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5wb3NpdGlvblRhcmdldD10aGlzLnBvc2l0aW9uVGFyZ2V0fHx0aGlzLl9kZWZhdWx0UG9zaXRpb25UYXJnZXQsdGhpcy5hdXRvRml0T25BdHRhY2gmJih3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXNwbGF5PT09Im5vbmUiP3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmZpdCgpfS5iaW5kKHRoaXMpKTood2luZG93LlNoYWR5RE9NJiZTaGFkeURPTS5mbHVzaCgpLHRoaXMuZml0KCkpKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fZGVmZXJyZWRGaXQmJihjbGVhclRpbWVvdXQodGhpcy5fX2RlZmVycmVkRml0KSx0aGlzLl9fZGVmZXJyZWRGaXQ9bnVsbCl9LGZpdDpmdW5jdGlvbigpe3RoaXMucG9zaXRpb24oKSx0aGlzLmNvbnN0cmFpbigpLHRoaXMuY2VudGVyKCl9LF9kaXNjb3ZlckluZm86ZnVuY3Rpb24oKXtpZighdGhpcy5fZml0SW5mbyl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyksdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnNpemluZ1RhcmdldCk7dGhpcy5fZml0SW5mbz17aW5saW5lU3R5bGU6e3RvcDp0aGlzLnN0eWxlLnRvcHx8IiIsbGVmdDp0aGlzLnN0eWxlLmxlZnR8fCIiLHBvc2l0aW9uOnRoaXMuc3R5bGUucG9zaXRpb258fCIifSxzaXplcklubGluZVN0eWxlOnttYXhXaWR0aDp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhXaWR0aHx8IiIsbWF4SGVpZ2h0OnRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodHx8IiIsYm94U2l6aW5nOnRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZ3x8IiJ9LHBvc2l0aW9uZWRCeTp7dmVydGljYWxseTplLnRvcCE9PSJhdXRvIj8idG9wIjplLmJvdHRvbSE9PSJhdXRvIj8iYm90dG9tIjpudWxsLGhvcml6b250YWxseTplLmxlZnQhPT0iYXV0byI/ImxlZnQiOmUucmlnaHQhPT0iYXV0byI/InJpZ2h0IjpudWxsfSxzaXplZEJ5OntoZWlnaHQ6dC5tYXhIZWlnaHQhPT0ibm9uZSIsd2lkdGg6dC5tYXhXaWR0aCE9PSJub25lIixtaW5XaWR0aDpwYXJzZUludCh0Lm1pbldpZHRoLDEwKXx8MCxtaW5IZWlnaHQ6cGFyc2VJbnQodC5taW5IZWlnaHQsMTApfHwwfSxtYXJnaW46e3RvcDpwYXJzZUludChlLm1hcmdpblRvcCwxMCl8fDAscmlnaHQ6cGFyc2VJbnQoZS5tYXJnaW5SaWdodCwxMCl8fDAsYm90dG9tOnBhcnNlSW50KGUubWFyZ2luQm90dG9tLDEwKXx8MCxsZWZ0OnBhcnNlSW50KGUubWFyZ2luTGVmdCwxMCl8fDB9fX19LHJlc2V0Rml0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZml0SW5mb3x8e307Zm9yKHZhciB0IGluIGUuc2l6ZXJJbmxpbmVTdHlsZSl0aGlzLnNpemluZ1RhcmdldC5zdHlsZVt0XT1lLnNpemVySW5saW5lU3R5bGVbdF07Zm9yKHZhciB0IGluIGUuaW5saW5lU3R5bGUpdGhpcy5zdHlsZVt0XT1lLmlubGluZVN0eWxlW3RdO3RoaXMuX2ZpdEluZm89bnVsbH0scmVmaXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNpemluZ1RhcmdldC5zY3JvbGxMZWZ0LHQ9dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsVG9wO3RoaXMucmVzZXRGaXQoKSx0aGlzLmZpdCgpLHRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbExlZnQ9ZSx0aGlzLnNpemluZ1RhcmdldC5zY3JvbGxUb3A9dH0scG9zaXRpb246ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Nob3VsZFBvc2l0aW9uKXJldHVybjt0aGlzLl9kaXNjb3ZlckluZm8oKSx3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5mbHVzaCgpLHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5ib3hTaXppbmc9ImJvcmRlci1ib3giLHRoaXMuc3R5bGUubGVmdD0iMHB4Iix0aGlzLnN0eWxlLnRvcD0iMHB4Ijt2YXIgZT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHQ9dGhpcy5fX2dldE5vcm1hbGl6ZWRSZWN0KHRoaXMucG9zaXRpb25UYXJnZXQpLHI9dGhpcy5fX2dldE5vcm1hbGl6ZWRSZWN0KHRoaXMuZml0SW50byk7bGV0IG4saSxvLGE7dGhpcy5leHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzJiYobj10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRXaWR0aCxpPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldEhlaWdodCxvPXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudFdpZHRoLGE9dGhpcy5zaXppbmdUYXJnZXQuY2xpZW50SGVpZ2h0KTt2YXIgcz10aGlzLl9maXRJbmZvLm1hcmdpbixsPXt3aWR0aDplLndpZHRoK3MubGVmdCtzLnJpZ2h0LGhlaWdodDplLmhlaWdodCtzLnRvcCtzLmJvdHRvbX0sYz10aGlzLl9fZ2V0UG9zaXRpb24odGhpcy5fbG9jYWxlSG9yaXpvbnRhbEFsaWduLHRoaXMudmVydGljYWxBbGlnbixsLGUsdCxyKSx1PWMubGVmdCtzLmxlZnQsaD1jLnRvcCtzLnRvcCxmPU1hdGgubWluKHIucmlnaHQtcy5yaWdodCx1K2Uud2lkdGgpLHA9TWF0aC5taW4oci5ib3R0b20tcy5ib3R0b20saCtlLmhlaWdodCk7dT1NYXRoLm1heChyLmxlZnQrcy5sZWZ0LE1hdGgubWluKHUsZi10aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpKSxoPU1hdGgubWF4KHIudG9wK3MudG9wLE1hdGgubWluKGgscC10aGlzLl9maXRJbmZvLnNpemVkQnkubWluSGVpZ2h0KSk7bGV0IGQ9TWF0aC5tYXgoZi11LHRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5XaWR0aCksZz1NYXRoLm1heChwLWgsdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCk7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGg9ZCsicHgiLHRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodD1nKyJweCI7bGV0IF89dS1lLmxlZnQseT1oLWUudG9wO2lmKHRoaXMuc3R5bGUubGVmdD1gJHtffXB4YCx0aGlzLnN0eWxlLnRvcD1gJHt5fXB4YCx0aGlzLmV4cGFuZFNpemluZ1RhcmdldEZvclNjcm9sbGJhcnMpe2xldCB4PXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldEhlaWdodCxiPXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudEhlaWdodCxTPWktYSxQPXgtYi1TO2lmKFA+MCl7bGV0IEw9ci5oZWlnaHQtcy50b3Atcy5ib3R0b20sUj1NYXRoLm1pbihMLGcrUCk7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4SGVpZ2h0PWAke1J9cHhgO2xldCBGPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldEhlaWdodCx6PUYteCxVO2MudmVydGljYWxBbGlnbj09PSJ0b3AiP1U9eTpjLnZlcnRpY2FsQWxpZ249PT0ibWlkZGxlIj9VPXktei8yOmMudmVydGljYWxBbGlnbj09PSJib3R0b20iJiYoVT15LXopLFU9TWF0aC5tYXgoci50b3Arcy50b3AsTWF0aC5taW4oVSxyLmJvdHRvbS1zLmJvdHRvbS1GKSksdGhpcy5zdHlsZS50b3A9YCR7VX1weGB9bGV0IGs9dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0V2lkdGgsTz10aGlzLnNpemluZ1RhcmdldC5jbGllbnRXaWR0aCxEPW4tbyxJPWstTy1EO2lmKEk+MCl7bGV0IEw9QWJlKCksUj1yLndpZHRoLXMubGVmdC1zLnJpZ2h0LEY9TWF0aC5taW4oUixkK0ktTCk7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGg9YCR7Rn1weGA7bGV0IHo9dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0V2lkdGgrTCxVPXotayxXO2MuaG9yaXpvbnRhbEFsaWduPT09ImxlZnQiP1c9XzpjLmhvcml6b250YWxBbGlnbj09PSJjZW50ZXIiP1c9Xy1VLzI6Yy5ob3Jpem9udGFsQWxpZ249PT0icmlnaHQiJiYoVz1fLVUpLFc9TWF0aC5tYXgoci5sZWZ0K3MubGVmdCxNYXRoLm1pbihXLHIucmlnaHQtcy5yaWdodC16KSksdGhpcy5zdHlsZS5sZWZ0PWAke1d9cHhgfX19LGNvbnN0cmFpbjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciBlPXRoaXMuX2ZpdEluZm87ZS5wb3NpdGlvbmVkQnkudmVydGljYWxseXx8KHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLnRvcD0iMHB4IiksZS5wb3NpdGlvbmVkQnkuaG9yaXpvbnRhbGx5fHwodGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLHRoaXMuc3R5bGUubGVmdD0iMHB4IiksdGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Ijt2YXIgdD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Uuc2l6ZWRCeS5oZWlnaHR8fHRoaXMuX19zaXplRGltZW5zaW9uKHQsZS5wb3NpdGlvbmVkQnkudmVydGljYWxseSwidG9wIiwiYm90dG9tIiwiSGVpZ2h0IiksZS5zaXplZEJ5LndpZHRofHx0aGlzLl9fc2l6ZURpbWVuc2lvbih0LGUucG9zaXRpb25lZEJ5Lmhvcml6b250YWxseSwibGVmdCIsInJpZ2h0IiwiV2lkdGgiKX19LF9zaXplRGltZW5zaW9uOmZ1bmN0aW9uKGUsdCxyLG4saSl7dGhpcy5fX3NpemVEaW1lbnNpb24oZSx0LHIsbixpKX0sX19zaXplRGltZW5zaW9uOmZ1bmN0aW9uKGUsdCxyLG4saSl7dmFyIG89dGhpcy5fZml0SW5mbyxhPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pLHM9aT09PSJXaWR0aCI/YS53aWR0aDphLmhlaWdodCxsPXQ9PT1uLGM9bD9zLWVbbl06ZVtyXSx1PW8ubWFyZ2luW2w/cjpuXSxoPSJvZmZzZXQiK2ksZj10aGlzW2hdLXRoaXMuc2l6aW5nVGFyZ2V0W2hdO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlWyJtYXgiK2ldPXMtdS1jLWYrInB4In0sY2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbil7dGhpcy5fZGlzY292ZXJJbmZvKCk7dmFyIGU9dGhpcy5fZml0SW5mby5wb3NpdGlvbmVkQnk7aWYoIShlLnZlcnRpY2FsbHkmJmUuaG9yaXpvbnRhbGx5KSl7dGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGUudmVydGljYWxseXx8KHRoaXMuc3R5bGUudG9wPSIwcHgiKSxlLmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUubGVmdD0iMHB4Iik7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO2lmKCFlLnZlcnRpY2FsbHkpe3ZhciBuPXIudG9wLXQudG9wKyhyLmhlaWdodC10LmhlaWdodCkvMjt0aGlzLnN0eWxlLnRvcD1uKyJweCJ9aWYoIWUuaG9yaXpvbnRhbGx5KXt2YXIgaT1yLmxlZnQtdC5sZWZ0KyhyLndpZHRoLXQud2lkdGgpLzI7dGhpcy5zdHlsZS5sZWZ0PWkrInB4In19fX0sX19nZXROb3JtYWxpemVkUmVjdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZT09PXdpbmRvdz97dG9wOjAsbGVmdDowLHdpZHRoOndpbmRvdy5pbm5lcldpZHRoLGhlaWdodDp3aW5kb3cuaW5uZXJIZWlnaHQscmlnaHQ6d2luZG93LmlubmVyV2lkdGgsYm90dG9tOndpbmRvdy5pbm5lckhlaWdodH06ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0sX19nZXRPZmZzY3JlZW5BcmVhOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1NYXRoLm1pbigwLGUudG9wKStNYXRoLm1pbigwLHIuYm90dG9tLShlLnRvcCt0LmhlaWdodCkpLGk9TWF0aC5taW4oMCxlLmxlZnQpK01hdGgubWluKDAsci5yaWdodC0oZS5sZWZ0K3Qud2lkdGgpKTtyZXR1cm4gTWF0aC5hYnMobikqdC53aWR0aCtNYXRoLmFicyhpKSp0LmhlaWdodH0sX19nZXRQb3NpdGlvbjpmdW5jdGlvbihlLHQscixuLGksbyl7dmFyIGE9W3t2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoibGVmdCIsdG9wOmkudG9wK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLmxlZnQrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSx7dmVydGljYWxBbGlnbjoidG9wIixob3Jpem9udGFsQWxpZ246InJpZ2h0Iix0b3A6aS50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmkucmlnaHQtci53aWR0aC10aGlzLmhvcml6b250YWxPZmZzZXR9LHt2ZXJ0aWNhbEFsaWduOiJib3R0b20iLGhvcml6b250YWxBbGlnbjoibGVmdCIsdG9wOmkuYm90dG9tLXIuaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLmxlZnQrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSx7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246InJpZ2h0Iix0b3A6aS5ib3R0b20tci5oZWlnaHQtdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmkucmlnaHQtci53aWR0aC10aGlzLmhvcml6b250YWxPZmZzZXR9XTtpZih0aGlzLm5vT3ZlcmxhcCl7Zm9yKHZhciBzPTAsbD1hLmxlbmd0aDtzPGw7cysrKXt2YXIgYz17fTtmb3IodmFyIHUgaW4gYVtzXSljW3VdPWFbc11bdV07YS5wdXNoKGMpfWFbMF0udG9wPWFbMV0udG9wKz1pLmhlaWdodCxhWzJdLnRvcD1hWzNdLnRvcC09aS5oZWlnaHQsYVs0XS5sZWZ0PWFbNl0ubGVmdCs9aS53aWR0aCxhWzVdLmxlZnQ9YVs3XS5sZWZ0LT1pLndpZHRofXQ9dD09PSJhdXRvIj9udWxsOnQsZT1lPT09ImF1dG8iP251bGw6ZSwoIWV8fGU9PT0iY2VudGVyIikmJihhLnB1c2goe3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDppLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0Kyh0aGlzLm5vT3ZlcmxhcD9pLmhlaWdodDowKSxsZWZ0OmkubGVmdC1uLndpZHRoLzIraS53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pLGEucHVzaCh7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImNlbnRlciIsdG9wOmkuYm90dG9tLXIuaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQtKHRoaXMubm9PdmVybGFwP2kuaGVpZ2h0OjApLGxlZnQ6aS5sZWZ0LW4ud2lkdGgvMitpLndpZHRoLzIrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSkpLCghdHx8dD09PSJtaWRkbGUiKSYmKGEucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLnRvcC1uLmhlaWdodC8yK2kuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmkubGVmdCt0aGlzLmhvcml6b250YWxPZmZzZXQrKHRoaXMubm9PdmVybGFwP2kud2lkdGg6MCl9KSxhLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkudG9wLW4uaGVpZ2h0LzIraS5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5yaWdodC1yLndpZHRoLXRoaXMuaG9yaXpvbnRhbE9mZnNldC0odGhpcy5ub092ZXJsYXA/aS53aWR0aDowKX0pKSx0PT09Im1pZGRsZSImJmU9PT0iY2VudGVyIiYmYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6aS50b3Atbi5oZWlnaHQvMitpLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLmxlZnQtbi53aWR0aC8yK2kud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KTtmb3IodmFyIGgscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgZj1hW3NdLHA9Zi52ZXJ0aWNhbEFsaWduPT09dCxkPWYuaG9yaXpvbnRhbEFsaWduPT09ZTtpZighdGhpcy5keW5hbWljQWxpZ24mJiF0aGlzLm5vT3ZlcmxhcCYmcCYmZCl7aD1mO2JyZWFrfXZhciBnPSghdHx8cCkmJighZXx8ZCk7aWYoISghdGhpcy5keW5hbWljQWxpZ24mJiFnKSl7aWYoZi5vZmZzY3JlZW5BcmVhPXRoaXMuX19nZXRPZmZzY3JlZW5BcmVhKGYscixvKSxmLm9mZnNjcmVlbkFyZWE9PT0wJiZnKXtoPWY7YnJlYWt9aD1ofHxmO3ZhciBfPWYub2Zmc2NyZWVuQXJlYS1oLm9mZnNjcmVlbkFyZWE7KF88MHx8Xz09PTAmJihwfHxkKSkmJihoPWYpfX1yZXR1cm4gaH19O3ZhciAkeD1FbGVtZW50LnByb3RvdHlwZSx3OT0keC5tYXRjaGVzfHwkeC5tYXRjaGVzU2VsZWN0b3J8fCR4Lm1vek1hdGNoZXNTZWxlY3Rvcnx8JHgubXNNYXRjaGVzU2VsZWN0b3J8fCR4Lm9NYXRjaGVzU2VsZWN0b3J8fCR4LndlYmtpdE1hdGNoZXNTZWxlY3RvcixtVz1jbGFzc3tnZXRUYWJiYWJsZU5vZGVzKHQpe3ZhciByPVtdLG49dGhpcy5fY29sbGVjdFRhYmJhYmxlTm9kZXModCxyKTtyZXR1cm4gbj90aGlzLl9zb3J0QnlUYWJJbmRleChyKTpyfWlzRm9jdXNhYmxlKHQpe3JldHVybiB3OS5jYWxsKHQsImlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBidXR0b24sIG9iamVjdCIpP3c5LmNhbGwodCwiOm5vdChbZGlzYWJsZWRdKSIpOnc5LmNhbGwodCwiYVtocmVmXSwgYXJlYVtocmVmXSwgaWZyYW1lLCBbdGFiaW5kZXhdLCBbY29udGVudEVkaXRhYmxlXSIpfWlzVGFiYmFibGUodCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGUodCkmJnc5LmNhbGwodCwnOm5vdChbdGFiaW5kZXg9Ii0xIl0pJykmJnRoaXMuX2lzVmlzaWJsZSh0KX1fbm9ybWFsaXplZFRhYkluZGV4KHQpe2lmKHRoaXMuaXNGb2N1c2FibGUodCkpe3ZhciByPXQuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwwO3JldHVybiBOdW1iZXIocil9cmV0dXJuLTF9X2NvbGxlY3RUYWJiYWJsZU5vZGVzKHQscil7aWYodC5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiExO3ZhciBuPXQ7aWYoIXRoaXMuX2lzVmlzaWJsZShuKSlyZXR1cm4hMTt2YXIgaT10aGlzLl9ub3JtYWxpemVkVGFiSW5kZXgobiksbz1pPjA7aT49MCYmci5wdXNoKG4pO3ZhciBhO24ubG9jYWxOYW1lPT09ImNvbnRlbnQifHxuLmxvY2FsTmFtZT09PSJzbG90Ij9hPXp0KG4pLmdldERpc3RyaWJ1dGVkTm9kZXMoKTphPXp0KG4ucm9vdHx8bikuY2hpbGRyZW47Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspbz10aGlzLl9jb2xsZWN0VGFiYmFibGVOb2RlcyhhW3NdLHIpfHxvO3JldHVybiBvfV9pc1Zpc2libGUodCl7dmFyIHI9dC5zdHlsZTtyZXR1cm4gci52aXNpYmlsaXR5IT09ImhpZGRlbiImJnIuZGlzcGxheSE9PSJub25lIj8ocj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KSxyLnZpc2liaWxpdHkhPT0iaGlkZGVuIiYmci5kaXNwbGF5IT09Im5vbmUiKTohMX1fc29ydEJ5VGFiSW5kZXgodCl7dmFyIHI9dC5sZW5ndGg7aWYocjwyKXJldHVybiB0O3ZhciBuPU1hdGguY2VpbChyLzIpLGk9dGhpcy5fc29ydEJ5VGFiSW5kZXgodC5zbGljZSgwLG4pKSxvPXRoaXMuX3NvcnRCeVRhYkluZGV4KHQuc2xpY2UobikpO3JldHVybiB0aGlzLl9tZXJnZVNvcnRCeVRhYkluZGV4KGksbyl9X21lcmdlU29ydEJ5VGFiSW5kZXgodCxyKXtmb3IodmFyIG49W107dC5sZW5ndGg+MCYmci5sZW5ndGg+MDspdGhpcy5faGFzTG93ZXJUYWJPcmRlcih0WzBdLHJbMF0pP24ucHVzaChyLnNoaWZ0KCkpOm4ucHVzaCh0LnNoaWZ0KCkpO3JldHVybiBuLmNvbmNhdCh0LHIpfV9oYXNMb3dlclRhYk9yZGVyKHQscil7dmFyIG49TWF0aC5tYXgodC50YWJJbmRleCwwKSxpPU1hdGgubWF4KHIudGFiSW5kZXgsMCk7cmV0dXJuIG49PT0wfHxpPT09MD9pPm46bj5pfX0sbTB0PW5ldyBtVztZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlyb24tb3ZlcmxheS1iYWNrZHJvcC1iYWNrZ3JvdW5kLWNvbG9yLCAjMDAwKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBAYXBwbHkgLS1pcm9uLW92ZXJsYXktYmFja2Ryb3A7CiAgICAgIH0KCiAgICAgIDpob3N0KC5vcGVuZWQpIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3Atb3BhY2l0eSwgMC42KTsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgICBAYXBwbHkgLS1pcm9uLW92ZXJsYXktYmFja2Ryb3Atb3BlbmVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoiaXJvbi1vdmVybGF5LWJhY2tkcm9wIixwcm9wZXJ0aWVzOntvcGVuZWQ6e3JlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIn19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbmVuZCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fb3BlbmVkUmFmPW51bGx9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJnRoaXMuX29wZW5lZENoYW5nZWQodGhpcy5vcGVuZWQpfSxwcmVwYXJlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLnBhcmVudE5vZGUmJnp0KGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHRoaXMpfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITB9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7IXRoaXMub3BlbmVkJiZ0aGlzLnBhcmVudE5vZGU9PT1kb2N1bWVudC5ib2R5JiZ6dCh0aGlzLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKHRoaXMpfSxfb25UcmFuc2l0aW9uZW5kOmZ1bmN0aW9uKGUpe2UmJmUudGFyZ2V0PT09dGhpcyYmdGhpcy5jb21wbGV0ZSgpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbihlKXtpZihlKXRoaXMucHJlcGFyZSgpO2Vsc2V7dmFyIHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyk7KHQudHJhbnNpdGlvbkR1cmF0aW9uPT09IjBzInx8dC5vcGFjaXR5PT0wKSYmdGhpcy5jb21wbGV0ZSgpfSF0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9fb3BlbmVkUmFmJiYod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX19vcGVuZWRSYWYpLHRoaXMuX19vcGVuZWRSYWY9bnVsbCksdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3AsdGhpcy5fX29wZW5lZFJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7dGhpcy5fX29wZW5lZFJhZj1udWxsLHRoaXMudG9nZ2xlQ2xhc3MoIm9wZW5lZCIsdGhpcy5vcGVuZWQpfS5iaW5kKHRoaXMpKSl9fSk7dmFyIGdXPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fb3ZlcmxheXM9W10sdGhpcy5fbWluaW11bVo9MTAxLHRoaXMuX2JhY2tkcm9wRWxlbWVudD1udWxsLEVtKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwidGFwIixmdW5jdGlvbigpe30pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRhcCIsdGhpcy5fb25DYXB0dXJlQ2xpY2suYmluZCh0aGlzKSwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX29uQ2FwdHVyZUZvY3VzLmJpbmQodGhpcyksITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uQ2FwdHVyZUtleURvd24uYmluZCh0aGlzKSwhMCl9Z2V0IGJhY2tkcm9wRWxlbWVudCgpe3JldHVybiB0aGlzLl9iYWNrZHJvcEVsZW1lbnR8fCh0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaXJvbi1vdmVybGF5LWJhY2tkcm9wIikpLHRoaXMuX2JhY2tkcm9wRWxlbWVudH1nZXQgZGVlcEFjdGl2ZUVsZW1lbnQoKXt2YXIgdD1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2ZvcigoIXR8fCEodCBpbnN0YW5jZW9mIEVsZW1lbnQpKSYmKHQ9ZG9jdW1lbnQuYm9keSk7dC5yb290JiZ6dCh0LnJvb3QpLmFjdGl2ZUVsZW1lbnQ7KXQ9enQodC5yb290KS5hY3RpdmVFbGVtZW50O3JldHVybiB0fV9icmluZ092ZXJsYXlBdEluZGV4VG9Gcm9udCh0KXt2YXIgcj10aGlzLl9vdmVybGF5c1t0XTtpZighIXIpe3ZhciBuPXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xLGk9dGhpcy5fb3ZlcmxheXNbbl07aWYoaSYmdGhpcy5fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHIsaSkmJm4tLSwhKHQ+PW4pKXt2YXIgbz1NYXRoLm1heCh0aGlzLmN1cnJlbnRPdmVybGF5WigpLHRoaXMuX21pbmltdW1aKTtmb3IodGhpcy5fZ2V0WihyKTw9byYmdGhpcy5fYXBwbHlPdmVybGF5WihyLG8pO3Q8bjspdGhpcy5fb3ZlcmxheXNbdF09dGhpcy5fb3ZlcmxheXNbdCsxXSx0Kys7dGhpcy5fb3ZlcmxheXNbbl09cn19fWFkZE9yUmVtb3ZlT3ZlcmxheSh0KXt0Lm9wZW5lZD90aGlzLmFkZE92ZXJsYXkodCk6dGhpcy5yZW1vdmVPdmVybGF5KHQpfWFkZE92ZXJsYXkodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXMuaW5kZXhPZih0KTtpZihyPj0wKXt0aGlzLl9icmluZ092ZXJsYXlBdEluZGV4VG9Gcm9udChyKSx0aGlzLnRyYWNrQmFja2Ryb3AoKTtyZXR1cm59dmFyIG49dGhpcy5fb3ZlcmxheXMubGVuZ3RoLGk9dGhpcy5fb3ZlcmxheXNbbi0xXSxvPU1hdGgubWF4KHRoaXMuX2dldFooaSksdGhpcy5fbWluaW11bVopLGE9dGhpcy5fZ2V0Wih0KTtpZihpJiZ0aGlzLl9zaG91bGRCZUJlaGluZE92ZXJsYXkodCxpKSl7dGhpcy5fYXBwbHlPdmVybGF5WihpLG8pLG4tLTt2YXIgcz10aGlzLl9vdmVybGF5c1tuLTFdO289TWF0aC5tYXgodGhpcy5fZ2V0WihzKSx0aGlzLl9taW5pbXVtWil9YTw9byYmdGhpcy5fYXBwbHlPdmVybGF5Wih0LG8pLHRoaXMuX292ZXJsYXlzLnNwbGljZShuLDAsdCksdGhpcy50cmFja0JhY2tkcm9wKCl9cmVtb3ZlT3ZlcmxheSh0KXt2YXIgcj10aGlzLl9vdmVybGF5cy5pbmRleE9mKHQpO3IhPT0tMSYmKHRoaXMuX292ZXJsYXlzLnNwbGljZShyLDEpLHRoaXMudHJhY2tCYWNrZHJvcCgpKX1jdXJyZW50T3ZlcmxheSgpe3ZhciB0PXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xO3JldHVybiB0aGlzLl9vdmVybGF5c1t0XX1jdXJyZW50T3ZlcmxheVooKXtyZXR1cm4gdGhpcy5fZ2V0Wih0aGlzLmN1cnJlbnRPdmVybGF5KCkpfWVuc3VyZU1pbmltdW1aKHQpe3RoaXMuX21pbmltdW1aPU1hdGgubWF4KHRoaXMuX21pbmltdW1aLHQpfWZvY3VzT3ZlcmxheSgpe3ZhciB0PXRoaXMuY3VycmVudE92ZXJsYXkoKTt0JiZ0Ll9hcHBseUZvY3VzKCl9dHJhY2tCYWNrZHJvcCgpe3ZhciB0PXRoaXMuX292ZXJsYXlXaXRoQmFja2Ryb3AoKTshdCYmIXRoaXMuX2JhY2tkcm9wRWxlbWVudHx8KHRoaXMuYmFja2Ryb3BFbGVtZW50LnN0eWxlLnpJbmRleD10aGlzLl9nZXRaKHQpLTEsdGhpcy5iYWNrZHJvcEVsZW1lbnQub3BlbmVkPSEhdCx0aGlzLmJhY2tkcm9wRWxlbWVudC5wcmVwYXJlKCkpfWdldEJhY2tkcm9wcygpe2Zvcih2YXIgdD1bXSxyPTA7cjx0aGlzLl9vdmVybGF5cy5sZW5ndGg7cisrKXRoaXMuX292ZXJsYXlzW3JdLndpdGhCYWNrZHJvcCYmdC5wdXNoKHRoaXMuX292ZXJsYXlzW3JdKTtyZXR1cm4gdH1iYWNrZHJvcFooKXtyZXR1cm4gdGhpcy5fZ2V0Wih0aGlzLl9vdmVybGF5V2l0aEJhY2tkcm9wKCkpLTF9X292ZXJsYXlXaXRoQmFja2Ryb3AoKXtmb3IodmFyIHQ9dGhpcy5fb3ZlcmxheXMubGVuZ3RoLTE7dD49MDt0LS0paWYodGhpcy5fb3ZlcmxheXNbdF0ud2l0aEJhY2tkcm9wKXJldHVybiB0aGlzLl9vdmVybGF5c1t0XX1fZ2V0Wih0KXt2YXIgcj10aGlzLl9taW5pbXVtWjtpZih0KXt2YXIgbj1OdW1iZXIodC5zdHlsZS56SW5kZXh8fHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLnpJbmRleCk7bj09PW4mJihyPW4pfXJldHVybiByfV9zZXRaKHQscil7dC5zdHlsZS56SW5kZXg9cn1fYXBwbHlPdmVybGF5Wih0LHIpe3RoaXMuX3NldFoodCxyKzIpfV9vdmVybGF5SW5QYXRoKHQpe3Q9dHx8W107Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXS5fbWFuYWdlcj09PXRoaXMpcmV0dXJuIHRbcl19X29uQ2FwdHVyZUNsaWNrKHQpe3ZhciByPXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xO2lmKHIhPT0tMSlmb3IodmFyIG49enQodCkucGF0aCxpOyhpPXRoaXMuX292ZXJsYXlzW3JdKSYmdGhpcy5fb3ZlcmxheUluUGF0aChuKSE9PWkmJihpLl9vbkNhcHR1cmVDbGljayh0KSxpLmFsbG93Q2xpY2tUaHJvdWdoKTspci0tfV9vbkNhcHR1cmVGb2N1cyh0KXt2YXIgcj10aGlzLmN1cnJlbnRPdmVybGF5KCk7ciYmci5fb25DYXB0dXJlRm9jdXModCl9X29uQ2FwdHVyZUtleURvd24odCl7dmFyIHI9dGhpcy5jdXJyZW50T3ZlcmxheSgpO3ImJihPby5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwiZXNjIik/ci5fb25DYXB0dXJlRXNjKHQpOk9vLmtleWJvYXJkRXZlbnRNYXRjaGVzS2V5cyh0LCJ0YWIiKSYmci5fb25DYXB0dXJlVGFiKHQpKX1fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHQscil7cmV0dXJuIXQuYWx3YXlzT25Ub3AmJnIuYWx3YXlzT25Ub3B9fSxnMHQ9bmV3IGdXO3ZhciBNOT17cGFnZVg6MCxwYWdlWTowfSxfMHQ9bnVsbCxfVz1bXSxFOT1bIndoZWVsIiwibW91c2V3aGVlbCIsIkRPTU1vdXNlU2Nyb2xsIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSJdLFM5LHlXO2Z1bmN0aW9uIHkwdChlKXtDaC5pbmRleE9mKGUpPj0wfHwoQ2gubGVuZ3RoPT09MCYmSWJlKCksQ2gucHVzaChlKSx5Vz1DaFtDaC5sZW5ndGgtMV0seDB0PVtdLGIwdD1bXSl9ZnVuY3Rpb24gdjB0KGUpe3ZhciB0PUNoLmluZGV4T2YoZSk7dCE9PS0xJiYoQ2guc3BsaWNlKHQsMSkseVc9Q2hbQ2gubGVuZ3RoLTFdLHgwdD1bXSxiMHQ9W10sQ2gubGVuZ3RoPT09MCYmTGJlKCkpfXZhciBDaD1bXSx4MHQ9bnVsbCxiMHQ9bnVsbDtmdW5jdGlvbiBQYmUoZSl7aWYoZS5jYW5jZWxhYmxlJiZrYmUoZSkmJmUucHJldmVudERlZmF1bHQoKSxlLnRhcmdldFRvdWNoZXMpe3ZhciB0PWUudGFyZ2V0VG91Y2hlc1swXTtNOS5wYWdlWD10LnBhZ2VYLE05LnBhZ2VZPXQucGFnZVl9fWZ1bmN0aW9uIEliZSgpe1M5PVM5fHxQYmUuYmluZCh2b2lkIDApO2Zvcih2YXIgZT0wLHQ9RTkubGVuZ3RoO2U8dDtlKyspZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihFOVtlXSxTOSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSl9ZnVuY3Rpb24gTGJlKCl7Zm9yKHZhciBlPTAsdD1FOS5sZW5ndGg7ZTx0O2UrKylkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKEU5W2VdLFM5LHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KX1mdW5jdGlvbiBrYmUoZSl7dmFyIHQ9enQoZSkucm9vdFRhcmdldDtpZihlLnR5cGUhPT0idG91Y2htb3ZlIiYmXzB0IT09dCYmKF8wdD10LF9XPVJiZSh6dChlKS5wYXRoKSksIV9XLmxlbmd0aClyZXR1cm4hMDtpZihlLnR5cGU9PT0idG91Y2hzdGFydCIpcmV0dXJuITE7dmFyIHI9RGJlKGUpO3JldHVybiFOYmUoX1csci5kZWx0YVgsci5kZWx0YVkpfWZ1bmN0aW9uIFJiZShlKXtmb3IodmFyIHQ9W10scj1lLmluZGV4T2YoeVcpLG49MDtuPD1yO24rKylpZihlW25dLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe3ZhciBpPWVbbl0sbz1pLnN0eWxlO28ub3ZlcmZsb3chPT0ic2Nyb2xsIiYmby5vdmVyZmxvdyE9PSJhdXRvIiYmKG89d2luZG93LmdldENvbXB1dGVkU3R5bGUoaSkpLChvLm92ZXJmbG93PT09InNjcm9sbCJ8fG8ub3ZlcmZsb3c9PT0iYXV0byIpJiZ0LnB1c2goaSl9cmV0dXJuIHR9ZnVuY3Rpb24gTmJlKGUsdCxyKXtpZighKCF0JiYhcikpZm9yKHZhciBuPU1hdGguYWJzKHIpPj1NYXRoLmFicyh0KSxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV0sYT0hMTtpZihuP2E9cjwwP28uc2Nyb2xsVG9wPjA6by5zY3JvbGxUb3A8by5zY3JvbGxIZWlnaHQtby5jbGllbnRIZWlnaHQ6YT10PDA/by5zY3JvbGxMZWZ0PjA6by5zY3JvbGxMZWZ0PG8uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aCxhKXJldHVybiBvfX1mdW5jdGlvbiBEYmUoZSl7dmFyIHQ9e2RlbHRhWDplLmRlbHRhWCxkZWx0YVk6ZS5kZWx0YVl9O2lmKCEoImRlbHRhWCJpbiBlKSl7aWYoIndoZWVsRGVsdGFYImluIGUmJiJ3aGVlbERlbHRhWSJpbiBlKXQuZGVsdGFYPS1lLndoZWVsRGVsdGFYLHQuZGVsdGFZPS1lLndoZWVsRGVsdGFZO2Vsc2UgaWYoIndoZWVsRGVsdGEiaW4gZSl0LmRlbHRhWD0wLHQuZGVsdGFZPS1lLndoZWVsRGVsdGE7ZWxzZSBpZigiYXhpcyJpbiBlKXQuZGVsdGFYPWUuYXhpcz09PTE/ZS5kZXRhaWw6MCx0LmRlbHRhWT1lLmF4aXM9PT0yP2UuZGV0YWlsOjA7ZWxzZSBpZihlLnRhcmdldFRvdWNoZXMpe3ZhciByPWUudGFyZ2V0VG91Y2hlc1swXTt0LmRlbHRhWD1NOS5wYWdlWC1yLnBhZ2VYLHQuZGVsdGFZPU05LnBhZ2VZLXIucGFnZVl9fXJldHVybiB0fXZhciBQbT17cHJvcGVydGllczp7b3BlbmVkOntvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQiLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGNhbmNlbGVkOntvYnNlcnZlcjoiX2NhbmNlbGVkQ2hhbmdlZCIscmVhZE9ubHk6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExfSx3aXRoQmFja2Ryb3A6e29ic2VydmVyOiJfd2l0aEJhY2tkcm9wQ2hhbmdlZCIsdHlwZTpCb29sZWFufSxub0F1dG9Gb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uRXNjS2V5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2xvc2luZ1JlYXNvbjp7dHlwZTpPYmplY3R9LHJlc3RvcmVGb2N1c09uQ2xvc2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWxsb3dDbGlja1Rocm91Z2g6e3R5cGU6Qm9vbGVhbn0sYWx3YXlzT25Ub3A6e3R5cGU6Qm9vbGVhbn0sc2Nyb2xsQWN0aW9uOnt0eXBlOlN0cmluZ30sX21hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOmcwdH0sX2ZvY3VzZWRDaGlsZDp7dHlwZTpPYmplY3R9fSxsaXN0ZW5lcnM6eyJpcm9uLXJlc2l6ZSI6Il9vbklyb25SZXNpemUifSxvYnNlcnZlcnM6WyJfX3VwZGF0ZVNjcm9sbE9ic2VydmVycyhpc0F0dGFjaGVkLCBvcGVuZWQsIHNjcm9sbEFjdGlvbikiXSxnZXQgYmFja2Ryb3BFbGVtZW50KCl7cmV0dXJuIHRoaXMuX21hbmFnZXIuYmFja2Ryb3BFbGVtZW50fSxnZXQgX2ZvY3VzTm9kZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkQ2hpbGR8fHp0KHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIlthdXRvZm9jdXNdIil8fHRoaXN9LGdldCBfZm9jdXNhYmxlTm9kZXMoKXtyZXR1cm4gbTB0LmdldFRhYmJhYmxlTm9kZXModGhpcyl9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fX2lzQW5pbWF0aW5nPSExLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMSx0aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlPXRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1udWxsLHRoaXMuX19yYWZzPXt9LHRoaXMuX19yZXN0b3JlRm9jdXNOb2RlPW51bGwsdGhpcy5fX3Njcm9sbFRvcD10aGlzLl9fc2Nyb2xsTGVmdD1udWxsLHRoaXMuX19vbkNhcHR1cmVTY3JvbGw9dGhpcy5fX29uQ2FwdHVyZVNjcm9sbC5iaW5kKHRoaXMpLHRoaXMuX19yb290Tm9kZXM9bnVsbCx0aGlzLl9lbnN1cmVTZXR1cCgpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLl9vcGVuZWRDaGFuZ2VkKHRoaXMub3BlbmVkKSx0aGlzLl9vYnNlcnZlcj16dCh0aGlzKS5vYnNlcnZlTm9kZXModGhpcy5fb25Ob2Rlc0NoYW5nZSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnp0KHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9vYnNlcnZlcj1udWxsO2Zvcih2YXIgZSBpbiB0aGlzLl9fcmFmcyl0aGlzLl9fcmFmc1tlXSE9PW51bGwmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX19yYWZzW2VdKTt0aGlzLl9fcmFmcz17fSx0aGlzLl9tYW5hZ2VyLnJlbW92ZU92ZXJsYXkodGhpcyksdGhpcy5fX2lzQW5pbWF0aW5nJiYodGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6KHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKSkpfSx0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSksdGhpcy5vcGVuZWQ9IXRoaXMub3BlbmVkfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpLHRoaXMub3BlbmVkPSEwfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKSx0aGlzLm9wZW5lZD0hMX0sY2FuY2VsOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZmlyZSgiaXJvbi1vdmVybGF5LWNhbmNlbGVkIixlLHtjYW5jZWxhYmxlOiEwfSk7dC5kZWZhdWx0UHJldmVudGVkfHwodGhpcy5fc2V0Q2FuY2VsZWQoITApLHRoaXMub3BlbmVkPSExKX0saW52YWxpZGF0ZVRhYmJhYmxlczpmdW5jdGlvbigpe3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlPW51bGx9LF9lbnN1cmVTZXR1cDpmdW5jdGlvbigpe3RoaXMuX292ZXJsYXlTZXR1cHx8KHRoaXMuX292ZXJsYXlTZXR1cD0hMCx0aGlzLnN0eWxlLm91dGxpbmU9Im5vbmUiLHRoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbihlKXtlP3RoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0aGlzLmlzQXR0YWNoZWQmJih0aGlzLl9faXNBbmltYXRpbmc9ITAsdGhpcy5fX2RlcmFmKCJfX29wZW5lZENoYW5nZWQiLHRoaXMuX19vcGVuZWRDaGFuZ2VkKSl9LF9jYW5jZWxlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmNsb3NpbmdSZWFzb249dGhpcy5jbG9zaW5nUmVhc29ufHx7fSx0aGlzLmNsb3NpbmdSZWFzb24uY2FuY2VsZWQ9dGhpcy5jYW5jZWxlZH0sX3dpdGhCYWNrZHJvcENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLndpdGhCYWNrZHJvcCYmIXRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpPyh0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMCk6dGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4JiYodGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IiksdGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4PSExKSx0aGlzLm9wZW5lZCYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9tYW5hZ2VyLnRyYWNrQmFja2Ryb3AoKX0sX3ByZXBhcmVSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT10aGlzLl9tYW5hZ2VyLmRlZXBBY3RpdmVFbGVtZW50LHRoaXMuX3ByZXBhcmVQb3NpdGlvbmluZygpLHRoaXMucmVmaXQoKSx0aGlzLl9maW5pc2hQb3NpdGlvbmluZygpLHRoaXMubm9BdXRvRm9jdXMmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10aGlzLl9mb2N1c05vZGUmJih0aGlzLl9mb2N1c05vZGUuYmx1cigpLHRoaXMuX19yZXN0b3JlRm9jdXNOb2RlLmZvY3VzKCkpfSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCl9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX0sX2ZpbmlzaFJlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMubm90aWZ5UmVzaXplKCksdGhpcy5fX2lzQW5pbWF0aW5nPSExLHRoaXMuZmlyZSgiaXJvbi1vdmVybGF5LW9wZW5lZCIpfSxfZmluaXNoUmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnN0eWxlLnpJbmRleD0iIix0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1jbG9zZWQiLHRoaXMuY2xvc2luZ1JlYXNvbil9LF9wcmVwYXJlUG9zaXRpb25pbmc6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnRyYW5zaXRpb249dGhpcy5zdHlsZS53ZWJraXRUcmFuc2l0aW9uPSJub25lIix0aGlzLnN0eWxlLnRyYW5zZm9ybT10aGlzLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ibm9uZSIsdGhpcy5zdHlsZS5kaXNwbGF5PSIifSxfZmluaXNoUG9zaXRpb25pbmc6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuc3R5bGUudHJhbnNpdGlvbj10aGlzLnN0eWxlLndlYmtpdFRyYW5zaXRpb249IiIsdGhpcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm09IiIsdGhpcy5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wfSxfYXBwbHlGb2N1czpmdW5jdGlvbigpe2lmKHRoaXMub3BlbmVkKXRoaXMubm9BdXRvRm9jdXN8fHRoaXMuX2ZvY3VzTm9kZS5mb2N1cygpO2Vsc2V7aWYodGhpcy5yZXN0b3JlRm9jdXNPbkNsb3NlJiZ0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZSl7dmFyIGU9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDsoZT09PWRvY3VtZW50LmJvZHl8fHpiZSh0aGlzLGUpKSYmdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGUuZm9jdXMoKX10aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsLHRoaXMuX2ZvY3VzTm9kZS5ibHVyKCksdGhpcy5fZm9jdXNlZENoaWxkPW51bGx9fSxfb25DYXB0dXJlQ2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrfHx0aGlzLmNhbmNlbChlKX0sX29uQ2FwdHVyZUZvY3VzOmZ1bmN0aW9uKGUpe2lmKCEhdGhpcy53aXRoQmFja2Ryb3Ape3ZhciB0PXp0KGUpLnBhdGg7dC5pbmRleE9mKHRoaXMpPT09LTE/KGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fYXBwbHlGb2N1cygpKTp0aGlzLl9mb2N1c2VkQ2hpbGQ9dFswXX19LF9vbkNhcHR1cmVFc2M6ZnVuY3Rpb24oZSl7dGhpcy5ub0NhbmNlbE9uRXNjS2V5fHx0aGlzLmNhbmNlbChlKX0sX29uQ2FwdHVyZVRhYjpmdW5jdGlvbihlKXtpZighIXRoaXMud2l0aEJhY2tkcm9wKXt0aGlzLl9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlcygpO3ZhciB0PWUuc2hpZnRLZXkscj10P3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU6dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlLG49dD90aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU6dGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZSxpPSExO2lmKHI9PT1uKWk9ITA7ZWxzZXt2YXIgbz10aGlzLl9tYW5hZ2VyLmRlZXBBY3RpdmVFbGVtZW50O2k9bz09PXJ8fG89PT10aGlzfWkmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZENoaWxkPW4sdGhpcy5fYXBwbHlGb2N1cygpKX19LF9vbklyb25SZXNpemU6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmIXRoaXMuX19pc0FuaW1hdGluZyYmdGhpcy5fX2RlcmFmKCJyZWZpdCIsdGhpcy5yZWZpdCl9LF9vbk5vZGVzQ2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJih0aGlzLmludmFsaWRhdGVUYWJiYWJsZXMoKSx0aGlzLm5vdGlmeVJlc2l6ZSgpKX0sX19lbnN1cmVGaXJzdExhc3RGb2N1c2FibGVzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZm9jdXNhYmxlTm9kZXM7dGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT1lWzBdLHRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1lW2UubGVuZ3RoLTFdfSxfX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD8odGhpcy5fcHJlcGFyZVJlbmRlck9wZW5lZCgpLHRoaXMuX21hbmFnZXIuYWRkT3ZlcmxheSh0aGlzKSx0aGlzLl9hcHBseUZvY3VzKCksdGhpcy5fcmVuZGVyT3BlbmVkKCkpOih0aGlzLl9tYW5hZ2VyLnJlbW92ZU92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlckNsb3NlZCgpKX0sX19kZXJhZjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX19yYWZzO3JbZV0hPT1udWxsJiZjYW5jZWxBbmltYXRpb25GcmFtZShyW2VdKSxyW2VdPXJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3JbZV09bnVsbCx0LmNhbGwodGhpcyl9LmJpbmQodGhpcykpfSxfX3VwZGF0ZVNjcm9sbE9ic2VydmVyczpmdW5jdGlvbihlLHQscil7IWV8fCF0fHwhdGhpcy5fX2lzVmFsaWRTY3JvbGxBY3Rpb24ocik/KHYwdCh0aGlzKSx0aGlzLl9fcmVtb3ZlU2Nyb2xsTGlzdGVuZXJzKCkpOihyPT09ImxvY2siJiYodGhpcy5fX3NhdmVTY3JvbGxQb3NpdGlvbigpLHkwdCh0aGlzKSksdGhpcy5fX2FkZFNjcm9sbExpc3RlbmVycygpKX0sX19hZGRTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Jvb3ROb2Rlcyl7aWYodGhpcy5fX3Jvb3ROb2Rlcz1bXSxjXylmb3IodmFyIGU9dGhpcztlOyllLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFJiZlLmhvc3QmJnRoaXMuX19yb290Tm9kZXMucHVzaChlKSxlPWUuaG9zdHx8ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZTt0aGlzLl9fcm9vdE5vZGVzLnB1c2goZG9jdW1lbnQpfXRoaXMuX19yb290Tm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5fX29uQ2FwdHVyZVNjcm9sbCx7Y2FwdHVyZTohMCxwYXNzaXZlOiEwfSl9LHRoaXMpfSxfX3JlbW92ZVNjcm9sbExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX19yb290Tm9kZXMmJnRoaXMuX19yb290Tm9kZXMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5fX29uQ2FwdHVyZVNjcm9sbCx7Y2FwdHVyZTohMCxwYXNzaXZlOiEwfSl9LHRoaXMpLHRoaXMuaXNBdHRhY2hlZHx8KHRoaXMuX19yb290Tm9kZXM9bnVsbCl9LF9faXNWYWxpZFNjcm9sbEFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZT09PSJsb2NrInx8ZT09PSJyZWZpdCJ8fGU9PT0iY2FuY2VsIn0sX19vbkNhcHR1cmVTY3JvbGw6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuX19pc0FuaW1hdGluZyYmISh6dChlKS5wYXRoLmluZGV4T2YodGhpcyk+PTApKXN3aXRjaCh0aGlzLnNjcm9sbEFjdGlvbil7Y2FzZSJsb2NrIjp0aGlzLl9fcmVzdG9yZVNjcm9sbFBvc2l0aW9uKCk7YnJlYWs7Y2FzZSJyZWZpdCI6dGhpcy5fX2RlcmFmKCJyZWZpdCIsdGhpcy5yZWZpdCk7YnJlYWs7Y2FzZSJjYW5jZWwiOnRoaXMuY2FuY2VsKGUpO2JyZWFrfX0sX19zYXZlU2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oKXtkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50Pyh0aGlzLl9fc2Nyb2xsVG9wPWRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wLHRoaXMuX19zY3JvbGxMZWZ0PWRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCk6KHRoaXMuX19zY3JvbGxUb3A9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCksdGhpcy5fX3Njcm9sbExlZnQ9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KSl9LF9fcmVzdG9yZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudD8oZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3A9dGhpcy5fX3Njcm9sbFRvcCxkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ9dGhpcy5fX3Njcm9sbExlZnQpOihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wPWRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ9ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KX19LE9iZT1lPT5lLmFzc2lnbmVkU2xvdHx8ZS5wYXJlbnROb2RlfHxlLmhvc3QsemJlPShlLHQpPT57Zm9yKGxldCByPXQ7cjtyPU9iZShyKSlpZihyPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sS3g9W2QwdCxKcyxQbV07dmFyIHZXPXtob3N0QXR0cmlidXRlczp7cm9sZToiZGlhbG9nIix0YWJpbmRleDoiLTEifSxwcm9wZXJ0aWVzOnttb2RhbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfX3JlYWRpZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LG9ic2VydmVyczpbIl9tb2RhbENoYW5nZWQobW9kYWwsIF9fcmVhZGllZCkiXSxsaXN0ZW5lcnM6e3RhcDoiX29uRGlhbG9nQ2xpY2sifSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSx0aGlzLl9fcHJldldpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCx0aGlzLl9fcmVhZGllZD0hMH0sX21vZGFsQ2hhbmdlZDpmdW5jdGlvbihlLHQpeyF0fHwoZT8odGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljayx0aGlzLl9fcHJldk5vQ2FuY2VsT25Fc2NLZXk9dGhpcy5ub0NhbmNlbE9uRXNjS2V5LHRoaXMuX19wcmV2V2l0aEJhY2tkcm9wPXRoaXMud2l0aEJhY2tkcm9wLHRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljaz0hMCx0aGlzLm5vQ2FuY2VsT25Fc2NLZXk9ITAsdGhpcy53aXRoQmFja2Ryb3A9ITApOih0aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrJiZ0aGlzLl9fcHJldk5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5ub0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSYmdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5LHRoaXMud2l0aEJhY2tkcm9wPXRoaXMud2l0aEJhY2tkcm9wJiZ0aGlzLl9fcHJldldpdGhCYWNrZHJvcCkpfSxfdXBkYXRlQ2xvc2luZ1JlYXNvbkNvbmZpcm1lZDpmdW5jdGlvbihlKXt0aGlzLmNsb3NpbmdSZWFzb249dGhpcy5jbG9zaW5nUmVhc29ufHx7fSx0aGlzLmNsb3NpbmdSZWFzb24uY29uZmlybWVkPWV9LF9vbkRpYWxvZ0NsaWNrOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD16dChlKS5wYXRoLHI9MCxuPXQuaW5kZXhPZih0aGlzKTtyPG47cisrKXt2YXIgaT10W3JdO2lmKGkuaGFzQXR0cmlidXRlJiYoaS5oYXNBdHRyaWJ1dGUoImRpYWxvZy1kaXNtaXNzIil8fGkuaGFzQXR0cmlidXRlKCJkaWFsb2ctY29uZmlybSIpKSl7dGhpcy5fdXBkYXRlQ2xvc2luZ1JlYXNvbkNvbmZpcm1lZChpLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWNvbmZpcm0iKSksdGhpcy5jbG9zZSgpLGUuc3RvcFByb3BhZ2F0aW9uKCk7YnJlYWt9fX19LHcwdD1bS3gsdlddO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kaWFsb2ctc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItZGlhbG9nIixiZWhhdmlvcnM6W3cwdCx4OV0sbGlzdGVuZXJzOnsibmVvbi1hbmltYXRpb24tZmluaXNoIjoiX29uTmVvbkFuaW1hdGlvbkZpbmlzaCJ9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMucGxheUFuaW1hdGlvbigiZW50cnkiKX0sX3JlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuY2FuY2VsQW5pbWF0aW9uKCksdGhpcy5wbGF5QW5pbWF0aW9uKCJleGl0Iil9LF9vbk5lb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKTp0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCguaXMtc2Nyb2xsZWQ6bm90KDpmaXJzdC1jaGlsZCkpOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXZpZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNhbi1zY3JvbGw6bm90KC5zY3JvbGxlZC10by1ib3R0b20pOm5vdCg6bGFzdC1jaGlsZCkpOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRpdmlkZXItY29sb3IpOwogICAgICB9CgogICAgICAuc2Nyb2xsYWJsZSB7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwoKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc2Nyb2xsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZy1zY3JvbGxhYmxlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InNjcm9sbGFibGUiIGNsYXNzPSJzY3JvbGxhYmxlIiBvbi1zY3JvbGw9InVwZGF0ZVNjcm9sbFN0YXRlIj4KICAgICAgPHNsb3Q+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLWRpYWxvZy1zY3JvbGxhYmxlIixwcm9wZXJ0aWVzOntkaWFsb2dFbGVtZW50Ont0eXBlOk9iamVjdH19LGdldCBzY3JvbGxUYXJnZXQoKXtyZXR1cm4gdGhpcy4kLnNjcm9sbGFibGV9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fZW5zdXJlVGFyZ2V0KCksdGhpcy5jbGFzc0xpc3QuYWRkKCJuby1wYWRkaW5nIil9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZW5zdXJlVGFyZ2V0KCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudXBkYXRlU2Nyb2xsU3RhdGUuYmluZCh0aGlzKSl9LHVwZGF0ZVNjcm9sbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDbGFzcygiaXMtc2Nyb2xsZWQiLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD4wKSx0aGlzLnRvZ2dsZUNsYXNzKCJjYW4tc2Nyb2xsIix0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQ8dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsSGVpZ2h0KSx0aGlzLnRvZ2dsZUNsYXNzKCJzY3JvbGxlZC10by1ib3R0b20iLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcCt0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQ+PXRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbEhlaWdodCl9LF9lbnN1cmVUYXJnZXQ6ZnVuY3Rpb24oKXt0aGlzLmRpYWxvZ0VsZW1lbnQ9dGhpcy5kaWFsb2dFbGVtZW50fHx0aGlzLnBhcmVudEVsZW1lbnQsdGhpcy5kaWFsb2dFbGVtZW50JiZ0aGlzLmRpYWxvZ0VsZW1lbnQuYmVoYXZpb3JzJiZ0aGlzLmRpYWxvZ0VsZW1lbnQuYmVoYXZpb3JzLmluZGV4T2YodlcpPj0wPyh0aGlzLmRpYWxvZ0VsZW1lbnQuc2l6aW5nVGFyZ2V0PXRoaXMuc2Nyb2xsVGFyZ2V0LHRoaXMuc2Nyb2xsVGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoImZpdCIpKTp0aGlzLmRpYWxvZ0VsZW1lbnQmJnRoaXMuc2Nyb2xsVGFyZ2V0LmNsYXNzTGlzdC5hZGQoImZpdCIpfX0pO3ZhciBlYz1ZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGNsaXA6IHJlY3QoMHB4LDBweCwwcHgsMHB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgYXJpYS1saXZlJD0iW1ttb2RlXV0iPltbX3RleHRdXTwvZGl2PgpgLGlzOiJpcm9uLWExMXktYW5ub3VuY2VyIixwcm9wZXJ0aWVzOnttb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToicG9saXRlIn0sdGltZW91dDp7dHlwZTpOdW1iZXIsdmFsdWU6MTUwfSxfdGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7ZWMuaW5zdGFuY2V8fChlYy5pbnN0YW5jZT10aGlzKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJpcm9uLWFubm91bmNlIix0aGlzLl9vbklyb25Bbm5vdW5jZS5iaW5kKHRoaXMpKX0sYW5ub3VuY2U6ZnVuY3Rpb24oZSl7dGhpcy5fdGV4dD0iIix0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fdGV4dD1lfSx0aGlzLnRpbWVvdXQpfSxfb25Jcm9uQW5ub3VuY2U6ZnVuY3Rpb24oZSl7ZS5kZXRhaWwmJmUuZGV0YWlsLnRleHQmJnRoaXMuYW5ub3VuY2UoZS5kZXRhaWwudGV4dCl9fSk7ZWMuaW5zdGFuY2U9bnVsbDtlYy5yZXF1ZXN0QXZhaWxhYmlsaXR5PWZ1bmN0aW9uKCl7ZWMuaW5zdGFuY2V8fChlYy5pbnN0YW5jZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpcm9uLWExMXktYW5ub3VuY2VyIikpLGRvY3VtZW50LmJvZHk/ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlYy5pbnN0YW5jZSk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVjLmluc3RhbmNlKX0pfTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2xvdCBpZD0iY29udGVudCI+PC9zbG90PgpgLGlzOiJpcm9uLWlucHV0IixiZWhhdmlvcnM6W1RoXSxwcm9wZXJ0aWVzOntiaW5kVmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSx2YWx1ZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlVmFsdWUoYmluZFZhbHVlKSJ9LGFsbG93ZWRQYXR0ZXJuOnt0eXBlOlN0cmluZ30sYXV0b1ZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dEVsZW1lbnQ6T2JqZWN0fSxvYnNlcnZlcnM6WyJfYmluZFZhbHVlQ2hhbmdlZChiaW5kVmFsdWUsIF9pbnB1dEVsZW1lbnQpIl0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQiLGtleXByZXNzOiJfb25LZXlwcmVzcyJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXtlYy5yZXF1ZXN0QXZhaWxhYmlsaXR5KCksdGhpcy5fcHJldmlvdXNWYWxpZElucHV0PSIiLHRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZD0hMX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj16dCh0aGlzKS5vYnNlcnZlTm9kZXMoZnVuY3Rpb24oZSl7dGhpcy5faW5pdFNsb3R0ZWRJbnB1dCgpfS5iaW5kKHRoaXMpKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmKHp0KHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9vYnNlcnZlcj1udWxsKX0sZ2V0IGlucHV0RWxlbWVudCgpe3JldHVybiB0aGlzLl9pbnB1dEVsZW1lbnR9LF9pbml0U2xvdHRlZElucHV0OmZ1bmN0aW9uKCl7dGhpcy5faW5wdXRFbGVtZW50PXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKVswXSx0aGlzLmlucHV0RWxlbWVudCYmdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUmJih0aGlzLmJpbmRWYWx1ZT10aGlzLmlucHV0RWxlbWVudC52YWx1ZSksdGhpcy5maXJlKCJpcm9uLWlucHV0LXJlYWR5Iil9LGdldCBfcGF0dGVyblJlZ0V4cCgpe3ZhciBlO2lmKHRoaXMuYWxsb3dlZFBhdHRlcm4pZT1uZXcgUmVnRXhwKHRoaXMuYWxsb3dlZFBhdHRlcm4pO2Vsc2Ugc3dpdGNoKHRoaXMuaW5wdXRFbGVtZW50LnR5cGUpe2Nhc2UibnVtYmVyIjplPS9bMC05LixlLV0vO2JyZWFrfXJldHVybiBlfSxfYmluZFZhbHVlQ2hhbmdlZDpmdW5jdGlvbihlLHQpeyF0fHwoZT09PXZvaWQgMD90LnZhbHVlPW51bGw6ZSE9PXQudmFsdWUmJih0aGlzLmlucHV0RWxlbWVudC52YWx1ZT1lKSx0aGlzLmF1dG9WYWxpZGF0ZSYmdGhpcy52YWxpZGF0ZSgpLHRoaXMuZmlyZSgiYmluZC12YWx1ZS1jaGFuZ2VkIix7dmFsdWU6ZX0pKX0sX29uSW5wdXQ6ZnVuY3Rpb24oKXtpZih0aGlzLmFsbG93ZWRQYXR0ZXJuJiYhdGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkKXt2YXIgZT10aGlzLl9jaGVja1BhdHRlcm5WYWxpZGl0eSgpO2V8fCh0aGlzLl9hbm5vdW5jZUludmFsaWRDaGFyYWN0ZXIoIkludmFsaWQgc3RyaW5nIG9mIGNoYXJhY3RlcnMgbm90IGVudGVyZWQuIiksdGhpcy5pbnB1dEVsZW1lbnQudmFsdWU9dGhpcy5fcHJldmlvdXNWYWxpZElucHV0KX10aGlzLmJpbmRWYWx1ZT10aGlzLl9wcmV2aW91c1ZhbGlkSW5wdXQ9dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUsdGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkPSExfSxfaXNQcmludGFibGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXlDb2RlPT04fHxlLmtleUNvZGU9PTl8fGUua2V5Q29kZT09MTN8fGUua2V5Q29kZT09Mjcscj1lLmtleUNvZGU9PTE5fHxlLmtleUNvZGU9PTIwfHxlLmtleUNvZGU9PTQ1fHxlLmtleUNvZGU9PTQ2fHxlLmtleUNvZGU9PTE0NHx8ZS5rZXlDb2RlPT0xNDV8fGUua2V5Q29kZT4zMiYmZS5rZXlDb2RlPDQxfHxlLmtleUNvZGU+MTExJiZlLmtleUNvZGU8MTI0O3JldHVybiF0JiYhKGUuY2hhckNvZGU9PTAmJnIpfSxfb25LZXlwcmVzczpmdW5jdGlvbihlKXtpZighKCF0aGlzLmFsbG93ZWRQYXR0ZXJuJiZ0aGlzLmlucHV0RWxlbWVudC50eXBlIT09Im51bWJlciIpKXt2YXIgdD10aGlzLl9wYXR0ZXJuUmVnRXhwO2lmKCEhdCYmIShlLm1ldGFLZXl8fGUuY3RybEtleXx8ZS5hbHRLZXkpKXt0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITA7dmFyIHI9U3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlKTt0aGlzLl9pc1ByaW50YWJsZShlKSYmIXQudGVzdChyKSYmKGUucHJldmVudERlZmF1bHQoKSx0aGlzLl9hbm5vdW5jZUludmFsaWRDaGFyYWN0ZXIoIkludmFsaWQgY2hhcmFjdGVyICIrcisiIG5vdCBlbnRlcmVkLiIpKX19fSxfY2hlY2tQYXR0ZXJuVmFsaWRpdHk6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wYXR0ZXJuUmVnRXhwO2lmKCFlKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUubGVuZ3RoO3QrKylpZighZS50ZXN0KHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlW3RdKSlyZXR1cm4hMTtyZXR1cm4hMH0sdmFsaWRhdGU6ZnVuY3Rpb24oKXtpZighdGhpcy5pbnB1dEVsZW1lbnQpcmV0dXJuIHRoaXMuaW52YWxpZD0hMSwhMDt2YXIgZT10aGlzLmlucHV0RWxlbWVudC5jaGVja1ZhbGlkaXR5KCk7cmV0dXJuIGUmJih0aGlzLnJlcXVpcmVkJiZ0aGlzLmJpbmRWYWx1ZT09PSIiP2U9ITE6dGhpcy5oYXNWYWxpZGF0b3IoKSYmKGU9VGgudmFsaWRhdGUuY2FsbCh0aGlzLHRoaXMuYmluZFZhbHVlKSkpLHRoaXMuaW52YWxpZD0hZSx0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKSxlfSxfYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyOmZ1bmN0aW9uKGUpe3RoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6ZX0pfSxfY29tcHV0ZVZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlfX0pO3ZhciBUOT17YXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoImFkZG9uLWF0dGFjaGVkIil9LHVwZGF0ZTpmdW5jdGlvbihlKXt9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY2hhci1jb3VudGVyOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNwYW4+W1tfY2hhckNvdW50ZXJTdHJdXTwvc3Bhbj4KYCxpczoicGFwZXItaW5wdXQtY2hhci1jb3VudGVyIixiZWhhdmlvcnM6W1Q5XSxwcm9wZXJ0aWVzOntfY2hhckNvdW50ZXJTdHI6e3R5cGU6U3RyaW5nLHZhbHVlOiIwIn19LHVwZGF0ZTpmdW5jdGlvbihlKXtpZighIWUuaW5wdXRFbGVtZW50KXtlLnZhbHVlPWUudmFsdWV8fCIiO3ZhciB0PWUudmFsdWUudG9TdHJpbmcoKS5sZW5ndGgudG9TdHJpbmcoKTtlLmlucHV0RWxlbWVudC5oYXNBdHRyaWJ1dGUoIm1heGxlbmd0aCIpJiYodCs9Ii8iK2UuaW5wdXRFbGVtZW50LmdldEF0dHJpYnV0ZSgibWF4bGVuZ3RoIikpLHRoaXMuX2NoYXJDb3VudGVyU3RyPXR9fX0pO3ZhciBTMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItc2hhcmVkLWlucHV0LXN0eWxlOiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiB0byBtYWtlIGEgc3RhY2tpbmcgY29udGV4dCAqLwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtYWxpZ24sIGJvdHRvbSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgfTsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KYDtTMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChTMHQuY29udGVudCk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyOwogICAgICB9CgogICAgICA6aG9zdChbaW5saW5lXSkgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIG9wYWNpdHk6IDAuMzM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5mbG9hdGVkLWxhYmVsLXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgIH0KCiAgICAgIC51bmRlcmxpbmUgewogICAgICAgIGhlaWdodDogMnB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMCwxLDEpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lLWZvY3VzOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWhpZ2hsaWdodGVkIC5mb2N1c2VkLWxpbmUgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1czsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdHJhbnNpdGlvbi1lYXNpbmc7CiAgICAgIH0KCiAgICAgIC51bmRlcmxpbmUuaXMtaW52YWxpZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1czsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdHJhbnNpdGlvbi1lYXNpbmc7CiAgICAgIH0KCiAgICAgIC51bmZvY3VzZWQtbGluZSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci11bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC51bmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZDsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lLWRpc2FibGVkOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1hdXRvOwogICAgICAgIEBhcHBseSAtLWxheW91dC1yZWxhdGl2ZTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cywgd2lkdGggMC4yNXM7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDsKICAgICAgICAvKiBGaXggZm9yIHNhZmFyaSBub3QgZm9jdXNpbmcgMC1oZWlnaHQgZGF0ZS90aW1lIGlucHV0cyB3aXRoIC13ZWJraXQtYXBwZXJhbmNlOiBub25lOyAqLwogICAgICAgIG1pbi1oZWlnaHQ6IDFweDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdHJhbnNpdGlvbi1lYXNpbmc7CiAgICAgIH0KCgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpOmJlZm9yZSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCk6YmVmb3JlIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWwtYmVmb3JlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpOmFmdGVyLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKTphZnRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWFmdGVyOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTc1JSkgc2NhbGUoMC43NSk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwoKICAgICAgICAvKiBTaW5jZSB3ZSBzY2FsZSB0byA3NS8xMDAgb2YgdGhlIHNpemUsIHdlIGFjdHVhbGx5IGhhdmUgMTAwLzc1IG9mIHRoZQogICAgICAgIG9yaWdpbmFsIHNwYWNlIG5vdyBhdmFpbGFibGUgKi8KICAgICAgICB3aWR0aDogMTMzJTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZsb2F0aW5nOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIDpob3N0KDpkaXIocnRsKSkgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IGF1dG87CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWdobGlnaHRlZCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWdobGlnaHRlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWwtZm9jdXM7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWRkZW4gOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKHRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICAvKiBUaGUgYXBwbHkgc2hpbSBkb2Vzbid0IGFwcGx5IHRoZSBuZXN0ZWQgY29sb3IgY3VzdG9tIHByb3BlcnR5LAogICAgICAgICAgc28gd2UgaGF2ZSB0byByZS1hcHBseSBpdCBoZXJlLiAqLwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1zcGlubmVyOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmZvY3VzZWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmZvY3VzZWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtZm9jdXM7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKHRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1pbnZhbGlkOwogICAgICB9CgogICAgICAucHJlZml4IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1ub25lOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXByZWZpeDsKICAgICAgfQoKICAgICAgLnN1ZmZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtc3VmZml4OwogICAgICB9CgogICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpIHsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSkgewogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKCopIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciIgYXJpYS1oaWRkZW49InRydWUiIGhpZGRlbj0iW1tub0xhYmVsRmxvYXRdXSI+Jm5ic3A7PC9kaXY+CgogICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgIDxzcGFuIGNsYXNzPSJwcmVmaXgiPjxzbG90IG5hbWU9InByZWZpeCI+PC9zbG90Pjwvc3Bhbj4KCiAgICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlSW5wdXRDb250ZW50Q2xhc3Mobm9MYWJlbEZsb2F0LGFsd2F5c0Zsb2F0TGFiZWwsZm9jdXNlZCxpbnZhbGlkLF9pbnB1dEhhc0NvbnRlbnQpXV0iIGlkPSJsYWJlbEFuZElucHV0Q29udGFpbmVyIj4KICAgICAgICA8c2xvdCBuYW1lPSJsYWJlbCI+PC9zbG90PgogICAgICAgIDxzbG90IG5hbWU9ImlucHV0Ij48L3Nsb3Q+CiAgICAgIDwvZGl2PgoKICAgICAgPHNwYW4gY2xhc3M9InN1ZmZpeCI+PHNsb3QgbmFtZT0ic3VmZml4Ij48L3Nsb3Q+PC9zcGFuPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVVbmRlcmxpbmVDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8ZGl2IGNsYXNzPSJ1bmZvY3VzZWQtbGluZSI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZvY3VzZWQtbGluZSI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUFkZE9uQ29udGVudENsYXNzKGZvY3VzZWQsaW52YWxpZCldXSI+CiAgICAgIDxzbG90IG5hbWU9ImFkZC1vbiI+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLWlucHV0LWNvbnRhaW5lciIscHJvcGVydGllczp7bm9MYWJlbEZsb2F0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYXR0ckZvclZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToiYmluZC12YWx1ZSJ9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbnZhbGlkOntvYnNlcnZlcjoiX2ludmFsaWRDaGFuZ2VkIix0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZvY3VzZWQ6e3JlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LF9hZGRvbnM6e3R5cGU6QXJyYXl9LF9pbnB1dEhhc0NvbnRlbnQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2lucHV0U2VsZWN0b3I6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbnB1dCxpcm9uLWlucHV0LHRleHRhcmVhLC5wYXBlci1pbnB1dC1pbnB1dCJ9LF9ib3VuZE9uRm9jdXM6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpfX0sX2JvdW5kT25CbHVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQmx1ci5iaW5kKHRoaXMpfX0sX2JvdW5kT25JbnB1dDp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbklucHV0LmJpbmQodGhpcyl9fSxfYm91bmRWYWx1ZUNoYW5nZWQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25WYWx1ZUNoYW5nZWQuYmluZCh0aGlzKX19fSxsaXN0ZW5lcnM6eyJhZGRvbi1hdHRhY2hlZCI6Il9vbkFkZG9uQXR0YWNoZWQiLCJpcm9uLWlucHV0LXZhbGlkYXRlIjoiX29uSXJvbklucHV0VmFsaWRhdGUifSxnZXQgX3ZhbHVlQ2hhbmdlZEV2ZW50KCl7cmV0dXJuIHRoaXMuYXR0ckZvclZhbHVlKyItY2hhbmdlZCJ9LGdldCBfcHJvcGVydHlGb3JWYWx1ZSgpe3JldHVybiB3bSh0aGlzLmF0dHJGb3JWYWx1ZSl9LGdldCBfaW5wdXRFbGVtZW50KCl7cmV0dXJuIHp0KHRoaXMpLnF1ZXJ5U2VsZWN0b3IodGhpcy5faW5wdXRTZWxlY3Rvcil9LGdldCBfaW5wdXRFbGVtZW50VmFsdWUoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50W3RoaXMuX3Byb3BlcnR5Rm9yVmFsdWVdfHx0aGlzLl9pbnB1dEVsZW1lbnQudmFsdWV9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZT0hMCx0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2JvdW5kT25Gb2N1cywhMCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9ib3VuZE9uQmx1ciwhMCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5hdHRyRm9yVmFsdWU/dGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fdmFsdWVDaGFuZ2VkRXZlbnQsdGhpcy5fYm91bmRWYWx1ZUNoYW5nZWQpOnRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLHRoaXMuX29uSW5wdXQpLHRoaXMuX2lucHV0RWxlbWVudFZhbHVlJiZ0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSE9IiI/dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KTp0aGlzLl9oYW5kbGVWYWx1ZSh0aGlzLl9pbnB1dEVsZW1lbnQpfSxfb25BZGRvbkF0dGFjaGVkOmZ1bmN0aW9uKGUpe3RoaXMuX2FkZG9uc3x8KHRoaXMuX2FkZG9ucz1bXSk7dmFyIHQ9ZS50YXJnZXQ7dGhpcy5fYWRkb25zLmluZGV4T2YodCk9PT0tMSYmKHRoaXMuX2FkZG9ucy5wdXNoKHQpLHRoaXMuaXNBdHRhY2hlZCYmdGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KSl9LF9vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Rm9jdXNlZCghMCl9LF9vbkJsdXI6ZnVuY3Rpb24oKXt0aGlzLl9zZXRGb2N1c2VkKCExKSx0aGlzLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZSh0aGlzLl9pbnB1dEVsZW1lbnQpfSxfb25JbnB1dDpmdW5jdGlvbihlKXt0aGlzLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZShlLnRhcmdldCl9LF9vblZhbHVlQ2hhbmdlZDpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDt0aGlzLl9faXNGaXJzdFZhbHVlVXBkYXRlJiYodGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZT0hMSx0LnZhbHVlPT09dm9pZCAwfHx0LnZhbHVlPT09IiIpfHx0aGlzLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZShlLnRhcmdldCl9LF9oYW5kbGVWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZTt0fHx0PT09MHx8ZS50eXBlPT09Im51bWJlciImJiFlLmNoZWNrVmFsaWRpdHkoKT90aGlzLl9pbnB1dEhhc0NvbnRlbnQ9ITA6dGhpcy5faW5wdXRIYXNDb250ZW50PSExLHRoaXMudXBkYXRlQWRkb25zKHtpbnB1dEVsZW1lbnQ6ZSx2YWx1ZTp0LGludmFsaWQ6dGhpcy5pbnZhbGlkfSl9LF9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZTpmdW5jdGlvbihlKXtpZih0aGlzLmF1dG9WYWxpZGF0ZSYmZSl7dmFyIHQ7ZS52YWxpZGF0ZT90PWUudmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50VmFsdWUpOnQ9ZS5jaGVja1ZhbGlkaXR5KCksdGhpcy5pbnZhbGlkPSF0fXRoaXMuX2hhbmRsZVZhbHVlKGUpfSxfb25Jcm9uSW5wdXRWYWxpZGF0ZTpmdW5jdGlvbihlKXt0aGlzLmludmFsaWQ9dGhpcy5faW5wdXRFbGVtZW50LmludmFsaWR9LF9pbnZhbGlkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX2FkZG9ucyYmdGhpcy51cGRhdGVBZGRvbnMoe2ludmFsaWQ6dGhpcy5pbnZhbGlkfSl9LHVwZGF0ZUFkZG9uczpmdW5jdGlvbihlKXtmb3IodmFyIHQscj0wO3Q9dGhpcy5fYWRkb25zW3JdO3IrKyl0LnVwZGF0ZShlKX0sX2NvbXB1dGVJbnB1dENvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPSJpbnB1dC1jb250ZW50IjtpZihlKWkmJihvKz0iIGxhYmVsLWlzLWhpZGRlbiIpLG4mJihvKz0iIGlzLWludmFsaWQiKTtlbHNle3ZhciBhPXRoaXMucXVlcnlTZWxlY3RvcigibGFiZWwiKTt0fHxpPyhvKz0iIGxhYmVsLWlzLWZsb2F0aW5nIix0aGlzLiQubGFiZWxBbmRJbnB1dENvbnRhaW5lci5zdHlsZS5wb3NpdGlvbj0ic3RhdGljIixuP28rPSIgaXMtaW52YWxpZCI6ciYmKG8rPSIgbGFiZWwtaXMtaGlnaGxpZ2h0ZWQiKSk6KGEmJih0aGlzLiQubGFiZWxBbmRJbnB1dENvbnRhaW5lci5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxuJiYobys9IiBpcy1pbnZhbGlkIikpfXJldHVybiByJiYobys9IiBmb2N1c2VkIiksb30sX2NvbXB1dGVVbmRlcmxpbmVDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlcmxpbmUiO3JldHVybiB0P3IrPSIgaXMtaW52YWxpZCI6ZSYmKHIrPSIgaXMtaGlnaGxpZ2h0ZWQiKSxyfSxfY29tcHV0ZUFkZE9uQ29udGVudENsYXNzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ImFkZC1vbi1jb250ZW50IjtyZXR1cm4gdD9yKz0iIGlzLWludmFsaWQiOmUmJihyKz0iIGlzLWhpZ2hsaWdodGVkIikscn19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwoKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWludmFsaWQtY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY2FwdGlvbjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1lcnJvcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDowOwogICAgICAgIHJpZ2h0OjA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgewogICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgIH0KCiAgICAgICNhMTF5V3JhcHBlciB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pICNhMTF5V3JhcHBlciB7CiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8IS0tCiAgICBJZiB0aGUgcGFwZXItaW5wdXQtZXJyb3IgZWxlbWVudCBpcyBkaXJlY3RseSByZWZlcmVuY2VkIGJ5IGFuCiAgICBcYGFyaWEtZGVzY3JpYmVkYnlcYCBhdHRyaWJ1dGUsIHN1Y2ggYXMgd2hlbiB1c2VkIGFzIGEgcGFwZXItaW5wdXQgYWRkLW9uLAogICAgdGhlbiBhcHBseWluZyBcYHZpc2liaWxpdHk6IGhpZGRlbjtcYCB0byB0aGUgcGFwZXItaW5wdXQtZXJyb3IgZWxlbWVudCBpdHNlbGYKICAgIGRvZXMgbm90IGhpZGUgdGhlIGVycm9yLgoKICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6CiAgICBodHRwczovL3d3dy53My5vcmcvVFIvYWNjbmFtZS0xLjEvI21hcHBpbmdfYWRkaXRpb25hbF9uZF9kZXNjcmlwdGlvbgogICAgLS0+CiAgICA8ZGl2IGlkPSJhMTF5V3JhcHBlciI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1pbnB1dC1lcnJvciIsYmVoYXZpb3JzOltUOV0scHJvcGVydGllczp7aW52YWxpZDp7cmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbn19LHVwZGF0ZTpmdW5jdGlvbihlKXt0aGlzLl9zZXRJbnZhbGlkKGUuaW52YWxpZCl9fSk7dmFyIFp4PXt9O1p4Lk5leHRMYWJlbElEPTE7WnguTmV4dEFkZG9uSUQ9MTtaeC5OZXh0SW5wdXRJRD0xO3ZhciBGYmU9e3Byb3BlcnRpZXM6e2xhYmVsOnt0eXBlOlN0cmluZ30sdmFsdWU6e25vdGlmeTohMCx0eXBlOlN0cmluZ30sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sYWxsb3dlZFBhdHRlcm46e3R5cGU6U3RyaW5nfSx0eXBlOnt0eXBlOlN0cmluZ30sbGlzdDp7dHlwZTpTdHJpbmd9LHBhdHRlcm46e3R5cGU6U3RyaW5nfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxlcnJvck1lc3NhZ2U6e3R5cGU6U3RyaW5nfSxjaGFyQ291bnRlcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWx3YXlzRmxvYXRMYWJlbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sdmFsaWRhdG9yOnt0eXBlOlN0cmluZ30sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyx2YWx1ZToib2ZmIn0sYXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9hdXRvZm9jdXNDaGFuZ2VkIn0saW5wdXRtb2RlOnt0eXBlOlN0cmluZ30sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbWluOnt0eXBlOlN0cmluZ30sbWF4Ont0eXBlOlN0cmluZ30sc3RlcDp7dHlwZTpTdHJpbmd9LG5hbWU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LHJlYWRvbmx5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNpemU6e3R5cGU6TnVtYmVyfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxhdXRvY29ycmVjdDp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9zYXZlOnt0eXBlOlN0cmluZ30scmVzdWx0czp7dHlwZTpOdW1iZXJ9LGFjY2VwdDp7dHlwZTpTdHJpbmd9LG11bHRpcGxlOnt0eXBlOkJvb2xlYW59LF9hcmlhRGVzY3JpYmVkQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfYXJpYUxhYmVsbGVkQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfaW5wdXRJZDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxsaXN0ZW5lcnM6eyJhZGRvbi1hdHRhY2hlZCI6Il9vbkFkZG9uQXR0YWNoZWQifSxrZXlCaW5kaW5nczp7InNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0saG9zdEF0dHJpYnV0ZXM6e3RhYmluZGV4OjB9LGdldCBpbnB1dEVsZW1lbnQoKXtyZXR1cm4gdGhpcy4kfHwodGhpcy4kPXt9KSx0aGlzLiQuaW5wdXR8fCh0aGlzLl9nZW5lcmF0ZUlucHV0SWQoKSx0aGlzLiQuaW5wdXQ9dGhpcy4kJCgiIyIrdGhpcy5faW5wdXRJZCkpLHRoaXMuJC5pbnB1dH0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQ9WyJkYXRlIiwiZGF0ZXRpbWUiLCJkYXRldGltZS1sb2NhbCIsIm1vbnRoIiwidGltZSIsIndlZWsiLCJmaWxlIl19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlQXJpYUxhYmVsbGVkQnkoKSwhbXQmJnRoaXMuaW5wdXRFbGVtZW50JiZ0aGlzLl90eXBlc1RoYXRIYXZlVGV4dC5pbmRleE9mKHRoaXMuaW5wdXRFbGVtZW50LnR5cGUpIT09LTEmJih0aGlzLmFsd2F5c0Zsb2F0TGFiZWw9ITApfSxfYXBwZW5kU3RyaW5nV2l0aFNwYWNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/ZT1lKyIgIit0OmU9dCxlfSxfb25BZGRvbkF0dGFjaGVkOmZ1bmN0aW9uKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7aWYodC5pZCl0aGlzLl9hcmlhRGVzY3JpYmVkQnk9dGhpcy5fYXBwZW5kU3RyaW5nV2l0aFNwYWNlKHRoaXMuX2FyaWFEZXNjcmliZWRCeSx0LmlkKTtlbHNle3ZhciByPSJwYXBlci1pbnB1dC1hZGQtb24tIitaeC5OZXh0QWRkb25JRCsrO3QuaWQ9cix0aGlzLl9hcmlhRGVzY3JpYmVkQnk9dGhpcy5fYXBwZW5kU3RyaW5nV2l0aFNwYWNlKHRoaXMuX2FyaWFEZXNjcmliZWRCeSxyKX19LHZhbGlkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50LnZhbGlkYXRlKCl9LF9mb2N1c0JsdXJIYW5kbGVyOmZ1bmN0aW9uKGUpe0RpLl9mb2N1c0JsdXJIYW5kbGVyLmNhbGwodGhpcyxlKSx0aGlzLmZvY3VzZWQmJiF0aGlzLl9zaGlmdFRhYlByZXNzZWQmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKX0sX29uU2hpZnRUYWJEb3duOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO3RoaXMuX3NoaWZ0VGFiUHJlc3NlZD0hMCx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHQpLHRoaXMuX3NoaWZ0VGFiUHJlc3NlZD0hMX0sMSl9LF9oYW5kbGVBdXRvVmFsaWRhdGU6ZnVuY3Rpb24oKXt0aGlzLmF1dG9WYWxpZGF0ZSYmdGhpcy52YWxpZGF0ZSgpfSx1cGRhdGVWYWx1ZUFuZFByZXNlcnZlQ2FyZXQ6ZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PXRoaXMuaW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0O3RoaXMudmFsdWU9ZSx0aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydD10LHRoaXMuaW5wdXRFbGVtZW50LnNlbGVjdGlvbkVuZD10fWNhdGNoKHIpe3RoaXMudmFsdWU9ZX19LF9jb21wdXRlQWx3YXlzRmxvYXRMYWJlbDpmdW5jdGlvbihlLHQpe3JldHVybiB0fHxlfSxfdXBkYXRlQXJpYUxhYmVsbGVkQnk6ZnVuY3Rpb24oKXt2YXIgZT16dCh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIik7aWYoIWUpe3RoaXMuX2FyaWFMYWJlbGxlZEJ5PSIiO3JldHVybn12YXIgdDtlLmlkP3Q9ZS5pZDoodD0icGFwZXItaW5wdXQtbGFiZWwtIitaeC5OZXh0TGFiZWxJRCsrLGUuaWQ9dCksdGhpcy5fYXJpYUxhYmVsbGVkQnk9dH0sX2dlbmVyYXRlSW5wdXRJZDpmdW5jdGlvbigpeyghdGhpcy5faW5wdXRJZHx8dGhpcy5faW5wdXRJZD09PSIiKSYmKHRoaXMuX2lucHV0SWQ9ImlucHV0LSIrWnguTmV4dElucHV0SUQrKyl9LF9vbkNoYW5nZTpmdW5jdGlvbihlKXt0aGlzLnNoYWRvd1Jvb3QmJnRoaXMuZmlyZShlLnR5cGUse3NvdXJjZUV2ZW50OmV9LHtub2RlOnRoaXMsYnViYmxlczplLmJ1YmJsZXMsY2FuY2VsYWJsZTplLmNhbmNlbGFibGV9KX0sX2F1dG9mb2N1c0NoYW5nZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLmF1dG9mb2N1cyYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudCl7dmFyIGU9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCx0PWUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCxyPXQmJmUhPT1kb2N1bWVudC5ib2R5JiZlIT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3J8fHRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKX19fSxDOT1bRGksT28sRmJlXTtZdCh7aXM6InBhcGVyLWlucHV0IixfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdChbZm9jdXNlZF0pIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgaW5wdXQgewogICAgICAgIC8qIEZpcmVmb3ggc2V0cyBhIG1pbi13aWR0aCBvbiB0aGUgaW5wdXQsIHdoaWNoIGNhbiBjYXVzZSBsYXlvdXQgaXNzdWVzICovCiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAvKiBJbiAxLngsIHRoZSA8aW5wdXQ+IGlzIGRpc3RyaWJ1dGVkIHRvIHBhcGVyLWlucHV0LWNvbnRhaW5lciwgd2hpY2ggc3R5bGVzIGl0LgogICAgICBJbiAyLnggdGhlIDxpcm9uLWlucHV0PiBpcyBkaXN0cmlidXRlZCB0byBwYXBlci1pbnB1dC1jb250YWluZXIsIHdoaWNoIHN0eWxlcwogICAgICBpdCwgYnV0IGluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmsgY29ycmVjdGx5LCB3ZSBuZWVkIHRvIHJlc2V0IHNvbWUKICAgICAgb2YgdGhlIG5hdGl2ZSBpbnB1dCdzIHByb3BlcnRpZXMgdG8gaW5oZXJpdCAoZnJvbSB0aGUgaXJvbi1pbnB1dCkgKi8KICAgICAgaXJvbi1pbnB1dCA+IGlucHV0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItc2hhcmVkLWlucHV0LXN0eWxlOwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OwogICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogaW5oZXJpdDsKICAgICAgICB3b3JkLXNwYWNpbmc6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1zaGFkb3c6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgY3Vyc29yOiBpbmhlcml0OwogICAgICB9CgogICAgICBpbnB1dDpkaXNhYmxlZCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWRpc2FibGVkOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwKICAgICAgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtc3Bpbm5lcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtY2xlYXItYnV0dG9uIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LWNsZWFyOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3I7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICBpbnB1dDotbW96LXBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tcy1jbGVhciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLW1zLWNsZWFyOwogICAgICB9CgogICAgICBpbnB1dDo6LW1zLXJldmVhbCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLW1zLXJldmVhbDsKICAgICAgfQoKICAgICAgaW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICBsYWJlbCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHBhcGVyLWlucHV0LWNvbnRhaW5lciBpZD0iY29udGFpbmVyIiBuby1sYWJlbC1mbG9hdD0iW1tub0xhYmVsRmxvYXRdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW19jb21wdXRlQWx3YXlzRmxvYXRMYWJlbChhbHdheXNGbG9hdExhYmVsLHBsYWNlaG9sZGVyKV1dIiBhdXRvLXZhbGlkYXRlJD0iW1thdXRvVmFsaWRhdGVdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGludmFsaWQ9IltbaW52YWxpZF1dIj4KCiAgICAgIDxzbG90IG5hbWU9InByZWZpeCIgc2xvdD0icHJlZml4Ij48L3Nsb3Q+CgogICAgICA8bGFiZWwgaGlkZGVuJD0iW1shbGFiZWxdXSIgYXJpYS1oaWRkZW49InRydWUiIGZvciQ9IltbX2lucHV0SWRdXSIgc2xvdD0ibGFiZWwiPltbbGFiZWxdXTwvbGFiZWw+CgogICAgICA8IS0tIE5lZWQgdG8gYmluZCBtYXhsZW5ndGggc28gdGhhdCB0aGUgcGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHdvcmtzIGNvcnJlY3RseSAtLT4KICAgICAgPGlyb24taW5wdXQgYmluZC12YWx1ZT0ie3t2YWx1ZX19IiBzbG90PSJpbnB1dCIgY2xhc3M9ImlucHV0LWVsZW1lbnQiIGlkJD0iW1tfaW5wdXRJZF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBhbGxvd2VkLXBhdHRlcm49IltbYWxsb3dlZFBhdHRlcm5dXSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvcj0iW1t2YWxpZGF0b3JdXSI+CiAgICAgICAgPGlucHV0IGFyaWEtbGFiZWxsZWRieSQ9IltbX2FyaWFMYWJlbGxlZEJ5XV0iIGFyaWEtZGVzY3JpYmVkYnkkPSJbW19hcmlhRGVzY3JpYmVkQnldXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIHRpdGxlJD0iW1t0aXRsZV1dIiB0eXBlJD0iW1t0eXBlXV0iIHBhdHRlcm4kPSJbW3BhdHRlcm5dXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGlucHV0bW9kZSQ9IltbaW5wdXRtb2RlXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIG1pbiQ9IltbbWluXV0iIG1heCQ9IltbbWF4XV0iIHN0ZXAkPSJbW3N0ZXBdXSIgbmFtZSQ9IltbbmFtZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIGxpc3QkPSJbW2xpc3RdXSIgc2l6ZSQ9Iltbc2l6ZV1dIiBhdXRvY2FwaXRhbGl6ZSQ9IltbYXV0b2NhcGl0YWxpemVdXSIgYXV0b2NvcnJlY3QkPSJbW2F1dG9jb3JyZWN0XV0iIG9uLWNoYW5nZT0iX29uQ2hhbmdlIiB0YWJpbmRleCQ9IltbdGFiSW5kZXhdXSIgYXV0b3NhdmUkPSJbW2F1dG9zYXZlXV0iIHJlc3VsdHMkPSJbW3Jlc3VsdHNdXSIgYWNjZXB0JD0iW1thY2NlcHRdXSIgbXVsdGlwbGUkPSJbW211bHRpcGxlXV0iIHJvbGUkPSJbW2lucHV0Um9sZV1dIiBhcmlhLWhhc3BvcHVwJD0iW1tpbnB1dEFyaWFIYXNwb3B1cF1dIj4KICAgICAgPC9pcm9uLWlucHV0PgoKICAgICAgPHNsb3QgbmFtZT0ic3VmZml4IiBzbG90PSJzdWZmaXgiPjwvc2xvdD4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tlcnJvck1lc3NhZ2VdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0LWVycm9yIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBzbG90PSJhZGQtb24iPltbZXJyb3JNZXNzYWdlXV08L3BhcGVyLWlucHV0LWVycm9yPgogICAgICA8L3RlbXBsYXRlPgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJDb3VudGVyXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1jaGFyLWNvdW50ZXIgc2xvdD0iYWRkLW9uIj48L3BhcGVyLWlucHV0LWNoYXItY291bnRlcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICA8L3BhcGVyLWlucHV0LWNvbnRhaW5lcj4KICBgLGJlaGF2aW9yczpbQzksRWhdLHByb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOlN0cmluZ30saW5wdXRSb2xlOnt0eXBlOlN0cmluZyx2YWx1ZTp2b2lkIDB9LGlucHV0QXJpYUhhc3BvcHVwOnt0eXBlOlN0cmluZyx2YWx1ZTp2b2lkIDB9fSxnZXQgX2ZvY3VzYWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5pbnB1dEVsZW1lbnQuX2lucHV0RWxlbWVudH0sbGlzdGVuZXJzOnsiaXJvbi1pbnB1dC1yZWFkeSI6Il9vbklyb25JbnB1dFJlYWR5In0sX29uSXJvbklucHV0UmVhZHk6ZnVuY3Rpb24oKXt0aGlzLiQubmF0aXZlSW5wdXR8fCh0aGlzLiQubmF0aXZlSW5wdXQ9dGhpcy4kJCgiaW5wdXQiKSksdGhpcy5pbnB1dEVsZW1lbnQmJnRoaXMuX3R5cGVzVGhhdEhhdmVUZXh0LmluZGV4T2YodGhpcy4kLm5hdGl2ZUlucHV0LnR5cGUpIT09LTEmJih0aGlzLmFsd2F5c0Zsb2F0TGFiZWw9ITApLHRoaXMuaW5wdXRFbGVtZW50LmJpbmRWYWx1ZSYmdGhpcy4kLmNvbnRhaW5lci5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5pbnB1dEVsZW1lbnQpfX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgfQoKICAgICAgI2NvbnRlbnRXcmFwcGVyIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgICNjb250ZW50V3JhcHBlci5hbmltYXRpbmcgOjpzbG90dGVkKCopIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9ImNvbnRlbnRXcmFwcGVyIj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJpcm9uLWRyb3Bkb3duIixiZWhhdmlvcnM6W0RpLE9vLEt4LHg5XSxwcm9wZXJ0aWVzOntob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sb3BlbkFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdH0sZm9jdXNUYXJnZXQ6e3R5cGU6T2JqZWN0fSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWxsb3dPdXRzaWRlU2Nyb2xsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9hbGxvd091dHNpZGVTY3JvbGxDaGFuZ2VkIn19LGxpc3RlbmVyczp7Im5lb24tYW5pbWF0aW9uLWZpbmlzaCI6Il9vbk5lb25BbmltYXRpb25GaW5pc2gifSxvYnNlcnZlcnM6WyJfdXBkYXRlT3ZlcmxheVBvc2l0aW9uKHBvc2l0aW9uVGFyZ2V0LCB2ZXJ0aWNhbEFsaWduLCBob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsT2Zmc2V0LCBob3Jpem9udGFsT2Zmc2V0KSJdLGdldCBjb250YWluZWRFbGVtZW50KCl7Zm9yKHZhciBlPXp0KHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZihlW3RdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGVbdF19LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxBY3Rpb258fCh0aGlzLnNjcm9sbEFjdGlvbj10aGlzLmFsbG93T3V0c2lkZVNjcm9sbD8icmVmaXQiOiJsb2NrIiksdGhpcy5fcmVhZGllZD0hMH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXsoIXRoaXMuc2l6aW5nVGFyZ2V0fHx0aGlzLnNpemluZ1RhcmdldD09PXRoaXMpJiYodGhpcy5zaXppbmdUYXJnZXQ9dGhpcy5jb250YWluZWRFbGVtZW50fHx0aGlzKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLmRpc2FibGVkP3RoaXMuY2FuY2VsKCk6KHRoaXMuY2FuY2VsQW5pbWF0aW9uKCksdGhpcy5fdXBkYXRlQW5pbWF0aW9uQ29uZmlnKCksUG0uX29wZW5lZENoYW5nZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpeyF0aGlzLm5vQW5pbWF0aW9ucyYmdGhpcy5hbmltYXRpb25Db25maWcub3Blbj8odGhpcy4kLmNvbnRlbnRXcmFwcGVyLmNsYXNzTGlzdC5hZGQoImFuaW1hdGluZyIpLHRoaXMucGxheUFuaW1hdGlvbigib3BlbiIpKTpQbS5fcmVuZGVyT3BlbmVkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlckNsb3NlZDpmdW5jdGlvbigpeyF0aGlzLm5vQW5pbWF0aW9ucyYmdGhpcy5hbmltYXRpb25Db25maWcuY2xvc2U/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oImNsb3NlIikpOlBtLl9yZW5kZXJDbG9zZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy4kLmNvbnRlbnRXcmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoImFuaW1hdGluZyIpLHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpfSxfdXBkYXRlQW5pbWF0aW9uQ29uZmlnOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuY29udGFpbmVkRWxlbWVudCx0PVtdLmNvbmNhdCh0aGlzLm9wZW5BbmltYXRpb25Db25maWd8fFtdKS5jb25jYXQodGhpcy5jbG9zZUFuaW1hdGlvbkNvbmZpZ3x8W10pLHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdLm5vZGU9ZTt0aGlzLmFuaW1hdGlvbkNvbmZpZz17b3Blbjp0aGlzLm9wZW5BbmltYXRpb25Db25maWcsY2xvc2U6dGhpcy5jbG9zZUFuaW1hdGlvbkNvbmZpZ319LF91cGRhdGVPdmVybGF5UG9zaXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzQXR0YWNoZWQmJnRoaXMubm90aWZ5UmVzaXplKCl9LF9hbGxvd091dHNpZGVTY3JvbGxDaGFuZ2VkOmZ1bmN0aW9uKGUpeyF0aGlzLl9yZWFkaWVkfHwoZT8oIXRoaXMuc2Nyb2xsQWN0aW9ufHx0aGlzLnNjcm9sbEFjdGlvbj09PSJsb2NrIikmJih0aGlzLnNjcm9sbEFjdGlvbj0icmVmaXQiKTp0aGlzLnNjcm9sbEFjdGlvbj0ibG9jayIpfSxfYXBwbHlGb2N1czpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZm9jdXNUYXJnZXR8fHRoaXMuY29udGFpbmVkRWxlbWVudDtlJiZ0aGlzLm9wZW5lZCYmIXRoaXMubm9BdXRvRm9jdXM/ZS5mb2N1cygpOlBtLl9hcHBseUZvY3VzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KTt2YXIgeXA9e3Byb3BlcnRpZXM6e2FuaW1hdGlvblRpbWluZzp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57ZHVyYXRpb246NTAwLGVhc2luZzoiY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsZmlsbDoiYm90aCJ9fX19LGlzTmVvbkFuaW1hdGlvbjohMCxjcmVhdGVkOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hbmltYXRlfHxjb25zb2xlLndhcm4oIk5vIHdlYiBhbmltYXRpb25zIGRldGVjdGVkLiBUaGlzIGVsZW1lbnQgd2lsbCBub3QgZnVuY3Rpb24gd2l0aG91dCBhIHdlYiBhbmltYXRpb25zIHBvbHlmaWxsLiIpfSx0aW1pbmdGcm9tQ29uZmlnOmZ1bmN0aW9uKGUpe2lmKGUudGltaW5nKWZvcih2YXIgdCBpbiBlLnRpbWluZyl0aGlzLmFuaW1hdGlvblRpbWluZ1t0XT1lLnRpbWluZ1t0XTtyZXR1cm4gdGhpcy5hbmltYXRpb25UaW1pbmd9LHNldFByZWZpeGVkUHJvcGVydHk6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj17dHJhbnNmb3JtOlsid2Via2l0VHJhbnNmb3JtIl0sdHJhbnNmb3JtT3JpZ2luOlsibW96VHJhbnNmb3JtT3JpZ2luIiwid2Via2l0VHJhbnNmb3JtT3JpZ2luIl19LGk9blt0XSxvLGE9MDtvPWlbYV07YSsrKWUuc3R5bGVbb109cjtlLnN0eWxlW3RdPXJ9LGNvbXBsZXRlOmZ1bmN0aW9uKGUpe319O1l0KHtpczoiZmFkZS1pbi1hbmltYXRpb24iLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGU7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe29wYWNpdHk6IjAifSx7b3BhY2l0eToiMSJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6ImZhZGUtb3V0LWFuaW1hdGlvbiIsYmVoYXZpb3JzOlt5cF0sY29uZmlndXJlOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZTtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdCh0LFt7b3BhY2l0eToiMSJ9LHtvcGFjaXR5OiIwIn1dLHRoaXMudGltaW5nRnJvbUNvbmZpZyhlKSksdGhpcy5fZWZmZWN0fX0pO1l0KHtpczoicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5oZWlnaHQ7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe2hlaWdodDpuLzIrInB4In0se2hlaWdodDpuKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtZ3Jvdy13aWR0aC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci53aWR0aDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdCh0LFt7d2lkdGg6bi8yKyJweCJ9LHt3aWR0aDpuKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtc2hyaW5rLXdpZHRoLWFuaW1hdGlvbiIsX3RlbXBsYXRlOm51bGwsYmVoYXZpb3JzOlt5cF0sY29uZmlndXJlOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZSxyPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLndpZHRoO3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3t3aWR0aDpuKyJweCJ9LHt3aWR0aDpuLW4vMjArInB4In1dLHRoaXMudGltaW5nRnJvbUNvbmZpZyhlKSksdGhpcy5fZWZmZWN0fX0pO1l0KHtpczoicGFwZXItbWVudS1zaHJpbmstaGVpZ2h0LWFuaW1hdGlvbiIsX3RlbXBsYXRlOm51bGwsYmVoYXZpb3JzOlt5cF0sY29uZmlndXJlOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZSxyPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLmhlaWdodDtyZXR1cm4gdGhpcy5zZXRQcmVmaXhlZFByb3BlcnR5KHQsInRyYW5zZm9ybU9yaWdpbiIsIjAgMCIpLHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe2hlaWdodDpuKyJweCIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0se2hlaWdodDpuLzIrInB4Iix0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTIwcHgpIn1dLHRoaXMudGltaW5nRnJvbUNvbmZpZyhlKSksdGhpcy5fZWZmZWN0fX0pO3ZhciBwRT17QU5JTUFUSU9OX0NVQklDX0JFWklFUjoiY3ViaWMtYmV6aWVyKC4zLC45NSwuNSwxKSIsTUFYX0FOSU1BVElPTl9USU1FX01TOjQwMH0sQmJlPVl0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgY3Vyc29yOiBhdXRvOwogICAgICAgIGNvbG9yOiB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWVudS1idXR0b24tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIGlyb24tZHJvcGRvd24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duOwogICAgICB9CgogICAgICAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItbWVudS1idXR0b24tZHJvcGRvd24tYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0idG9wIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IC0xMHB4OwogICAgICAgIHRvcDogMTBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZlcnRpY2FsLWFsaWduPSJib3R0b20iXSkgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIGJvdHRvbTogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAtMTBweDsKICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICB9CgogICAgICAjdHJpZ2dlciB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRyaWdnZXIiIG9uLXRhcD0idG9nZ2xlIj4KICAgICAgPHNsb3QgbmFtZT0iZHJvcGRvd24tdHJpZ2dlciI+PC9zbG90PgogICAgPC9kaXY+CgogICAgPGlyb24tZHJvcGRvd24gaWQ9ImRyb3Bkb3duIiBvcGVuZWQ9Int7b3BlbmVkfX0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIHZlcnRpY2FsLWFsaWduPSJbW3ZlcnRpY2FsQWxpZ25dXSIgZHluYW1pYy1hbGlnbj0iW1tkeW5hbWljQWxpZ25dXSIgaG9yaXpvbnRhbC1vZmZzZXQ9IltbaG9yaXpvbnRhbE9mZnNldF1dIiB2ZXJ0aWNhbC1vZmZzZXQ9IltbdmVydGljYWxPZmZzZXRdXSIgbm8tb3ZlcmxhcD0iW1tub092ZXJsYXBdXSIgb3Blbi1hbmltYXRpb24tY29uZmlnPSJbW29wZW5BbmltYXRpb25Db25maWddXSIgY2xvc2UtYW5pbWF0aW9uLWNvbmZpZz0iW1tjbG9zZUFuaW1hdGlvbkNvbmZpZ11dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBmb2N1cy10YXJnZXQ9IltbX2Ryb3Bkb3duQ29udGVudF1dIiBhbGxvdy1vdXRzaWRlLXNjcm9sbD0iW1thbGxvd091dHNpZGVTY3JvbGxdXSIgcmVzdG9yZS1mb2N1cy1vbi1jbG9zZT0iW1tyZXN0b3JlRm9jdXNPbkNsb3NlXV0iIG9uLWlyb24tb3ZlcmxheS1jYW5jZWxlZD0iX19vbklyb25PdmVybGF5Q2FuY2VsZWQiIGV4cGFuZC1zaXppbmctdGFyZ2V0LWZvci1zY3JvbGxiYXJzPSJbW2V4cGFuZFNpemluZ1RhcmdldEZvclNjcm9sbGJhcnNdXSI+CiAgICAgIDxkaXYgc2xvdD0iZHJvcGRvd24tY29udGVudCIgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgIDxzbG90IGlkPSJjb250ZW50IiBuYW1lPSJkcm9wZG93bi1jb250ZW50Ij48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgPC9pcm9uLWRyb3Bkb3duPgpgLGlzOiJwYXBlci1tZW51LWJ1dHRvbiIsYmVoYXZpb3JzOltPbyxEaV0scHJvcGVydGllczp7b3BlbmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkeW5hbWljQWxpZ246e3R5cGU6Qm9vbGVhbn0saG9yaXpvbnRhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LHZlcnRpY2FsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sbm9PdmVybGFwOnt0eXBlOkJvb2xlYW59LG5vQW5pbWF0aW9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpZ25vcmVTZWxlY3Q6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2xvc2VPbkFjdGl2YXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG9wZW5BbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3tuYW1lOiJmYWRlLWluLWFuaW1hdGlvbiIsdGltaW5nOntkZWxheToxMDAsZHVyYXRpb246MjAwfX0se25hbWU6InBhcGVyLW1lbnUtZ3Jvdy13aWR0aC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjE1MCxlYXNpbmc6cEUuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctaGVpZ2h0LWFuaW1hdGlvbiIsdGltaW5nOntkZWxheToxMDAsZHVyYXRpb246Mjc1LGVhc2luZzpwRS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX1dfX0sY2xvc2VBbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MTUwfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLXdpZHRoLWFuaW1hdGlvbiIsdGltaW5nOntkZWxheToxMDAsZHVyYXRpb246NTAsZWFzaW5nOnBFLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1zaHJpbmstaGVpZ2h0LWFuaW1hdGlvbiIsdGltaW5nOntkdXJhdGlvbjoyMDAsZWFzaW5nOiJlYXNlLWluIn19XX19LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LGV4cGFuZFNpemluZ1RhcmdldEZvclNjcm9sbGJhcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2Ryb3Bkb3duQ29udGVudDp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToiZ3JvdXAiLCJhcmlhLWhhc3BvcHVwIjoidHJ1ZSJ9LGxpc3RlbmVyczp7Imlyb24tYWN0aXZhdGUiOiJfb25Jcm9uQWN0aXZhdGUiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QifSxnZXQgY29udGVudEVsZW1lbnQoKXtmb3IodmFyIGU9enQodGhpcy4kLmNvbnRlbnQpLmdldERpc3RyaWJ1dGVkTm9kZXMoKSx0PTAscj1lLmxlbmd0aDt0PHI7dCsrKWlmKGVbdF0ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gZVt0XX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8dGhpcy4kLmRyb3Bkb3duLm9wZW4oKX0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLiQuZHJvcGRvd24uY2xvc2UoKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLmlnbm9yZVNlbGVjdHx8dGhpcy5jbG9zZSgpfSxfb25Jcm9uQWN0aXZhdGU6ZnVuY3Rpb24oZSl7dGhpcy5jbG9zZU9uQWN0aXZhdGUmJnRoaXMuY2xvc2UoKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXtlPyh0aGlzLl9kcm9wZG93bkNvbnRlbnQ9dGhpcy5jb250ZW50RWxlbWVudCx0aGlzLmZpcmUoInBhcGVyLWRyb3Bkb3duLW9wZW4iKSk6dCE9bnVsbCYmdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1jbG9zZSIpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe0RpLl9kaXNhYmxlZENoYW5nZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUmJnRoaXMub3BlbmVkJiZ0aGlzLmNsb3NlKCl9LF9fb25Jcm9uT3ZlcmxheUNhbmNlbGVkOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsLHI9dGhpcy4kLnRyaWdnZXIsbj16dCh0KS5wYXRoO24uaW5kZXhPZihyKT4tMSYmZS5wcmV2ZW50RGVmYXVsdCgpfX0pO09iamVjdC5rZXlzKHBFKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0JiZVtlXT1wRVtlXX0pO3ZhciB4Vz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3hXLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO3hXLmlubmVySFRNTD1gPGlyb24taWNvbnNldC1zdmcgbmFtZT0icGFwZXItZHJvcGRvd24tbWVudSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duIj48cGF0aCBkPSJNNyAxMGw1IDUgNS01eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHhXLmNvbnRlbnQpO3ZhciBiVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO2JXLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2JXLmlubmVySFRNTD1gPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWRyb3Bkb3duLW1lbnUtc2hhcmVkLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwoKICAgICAgICAvKiBOT1RFKGNkYXRhKTogQm90aCB2YWx1ZXMgYXJlIG5lZWRlZCwgc2luY2Ugc29tZSBwaG9uZXMgcmVxdWlyZSB0aGUKICAgICAgICAgKiB2YWx1ZSB0byBiZSBcYHRyYW5zcGFyZW50XGAuCiAgICAgICAgICovCiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsMCwwLDApOwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CgogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB9OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51OwogICAgICB9CgogICAgICAvKiBwYXBlci1kcm9wZG93bi1tZW51IGFuZCBwYXBlci1kcm9wZG93bi1tZW51LWxpZ2h0IGJvdGggZGVsZWdhdGUgZm9jdXMKICAgICAgICogdG8gb3RoZXIgaW50ZXJuYWwgZWxlbWVudHMgd2hpY2ggbWFuYWdlIGZvY3VzIHN0eWxpbmcuICovCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpkaXIocnRsKSkgewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwoKICAgICAgICBAYXBwbHkoLS1wYXBlci1kcm9wZG93bi1tZW51KTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtub2lua10pIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW25vLWxhYmVsLWZsb2F0XSkgcGFwZXItcmlwcGxlIHsKICAgICAgICB0b3A6IDhweDsKICAgICAgfQoKICAgICAgcGFwZXItcmlwcGxlIHsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIGJvdHRvbTogOHB4OwogICAgICAgIHJpZ2h0OiAwcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtcmlwcGxlOwogICAgICB9CgogICAgICBwYXBlci1tZW51LWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogMDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1idXR0b247CiAgICAgIH0KCiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWlucHV0OwogICAgICB9CgogICAgICBpcm9uLWljb24gewogICAgICAgIGNvbG9yOiB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1pY29uOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYlcuY29udGVudCk7dmFyIEhiZT1HdChIVE1MRWxlbWVudCk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWRyb3Bkb3duLW1lbnUtc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KCiAgICA8cGFwZXItbWVudS1idXR0b24gaWQ9Im1lbnVCdXR0b24iIHZlcnRpY2FsLWFsaWduPSJbW3ZlcnRpY2FsQWxpZ25dXSIgaG9yaXpvbnRhbC1hbGlnbj0iW1tob3Jpem9udGFsQWxpZ25dXSIgZHluYW1pYy1hbGlnbj0iW1tkeW5hbWljQWxpZ25dXSIgdmVydGljYWwtb2Zmc2V0PSJbW19jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0KG5vTGFiZWxGbG9hdCwgdmVydGljYWxPZmZzZXQpXV0iIGRpc2FibGVkPSJbW2Rpc2FibGVkXV0iIG5vLWFuaW1hdGlvbnM9Iltbbm9BbmltYXRpb25zXV0iIG9uLWlyb24tc2VsZWN0PSJfb25Jcm9uU2VsZWN0IiBvbi1pcm9uLWRlc2VsZWN0PSJfb25Jcm9uRGVzZWxlY3QiIG9wZW5lZD0ie3tvcGVuZWR9fSIgY2xvc2Utb24tYWN0aXZhdGUgYWxsb3ctb3V0c2lkZS1zY3JvbGw9IltbYWxsb3dPdXRzaWRlU2Nyb2xsXV0iIHJlc3RvcmUtZm9jdXMtb24tY2xvc2U9IltbcmVzdG9yZUZvY3VzT25DbG9zZV1dIiBleHBhbmQtc2l6aW5nLXRhcmdldC1mb3Itc2Nyb2xsYmFycz0iW1tleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzXV0iPgogICAgICA8IS0tIHN1cHBvcnQgaHlicmlkIG1vZGU6IHVzZXIgbWlnaHQgYmUgdXNpbmcgcGFwZXItbWVudS1idXR0b24gMS54IHdoaWNoIGRpc3RyaWJ1dGVzIHZpYSA8Y29udGVudD4gLS0+CiAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duLXRyaWdnZXIiIHNsb3Q9ImRyb3Bkb3duLXRyaWdnZXIiPgogICAgICAgIDxwYXBlci1yaXBwbGU+PC9wYXBlci1yaXBwbGU+CiAgICAgICAgPCEtLSBwYXBlci1pbnB1dCBoYXMgdHlwZT0idGV4dCIgZm9yIGExMXksIGRvIG5vdCByZW1vdmUgLS0+CiAgICAgICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgdHlwZT0idGV4dCIgaW52YWxpZD0iW1tpbnZhbGlkXV0iIHJlYWRvbmx5IGRpc2FibGVkPSJbW2Rpc2FibGVkXV0iIHZhbHVlPSJbW3ZhbHVlXV0iIHBsYWNlaG9sZGVyPSJbW3BsYWNlaG9sZGVyXV0iIGVycm9yLW1lc3NhZ2U9IltbZXJyb3JNZXNzYWdlXV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1thbHdheXNGbG9hdExhYmVsXV0iIG5vLWxhYmVsLWZsb2F0PSJbW25vTGFiZWxGbG9hdF1dIiBsYWJlbD0iW1tsYWJlbF1dIiBpbnB1dC1yb2xlPSJidXR0b24iIGlucHV0LWFyaWEtaGFzcG9wdXA9Imxpc3Rib3giIGF1dG9jb21wbGV0ZT0ib2ZmIj4KICAgICAgICAgIDwhLS0gc3VwcG9ydCBoeWJyaWQgbW9kZTogdXNlciBtaWdodCBiZSB1c2luZyBwYXBlci1pbnB1dCAxLnggd2hpY2ggZGlzdHJpYnV0ZXMgdmlhIDxjb250ZW50PiAtLT4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0icGFwZXItZHJvcGRvd24tbWVudTphcnJvdy1kcm9wLWRvd24iIHN1ZmZpeCBzbG90PSJzdWZmaXgiPjwvaXJvbi1pY29uPgogICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDwvZGl2PgogICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgPC9wYXBlci1tZW51LWJ1dHRvbj4KYCxpczoicGFwZXItZHJvcGRvd24tbWVudSIsYmVoYXZpb3JzOltTaCxEaSxFaCxUaF0scHJvcGVydGllczp7c2VsZWN0ZWRJdGVtTGFiZWw6e3R5cGU6U3RyaW5nLG5vdGlmeTohMCxyZWFkT25seTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHZhbHVlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LGxhYmVsOnt0eXBlOlN0cmluZ30scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nfSxlcnJvck1lc3NhZ2U6e3R5cGU6U3RyaW5nfSxvcGVuZWQ6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsdmFsdWU6ITEsb2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIn0sYWxsb3dPdXRzaWRlU2Nyb2xsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sYWx3YXlzRmxvYXRMYWJlbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToicmlnaHQifSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToidG9wIn0sdmVydGljYWxPZmZzZXQ6TnVtYmVyLGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LGV4cGFuZFNpemluZ1RhcmdldEZvclNjcm9sbGJhcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGxpc3RlbmVyczp7dGFwOiJfb25UYXAifSxrZXlCaW5kaW5nczp7InVwIGRvd24iOiJvcGVuIixlc2M6ImNsb3NlIn0sb2JzZXJ2ZXJzOlsiX3NlbGVjdGVkSXRlbUNoYW5nZWQoc2VsZWN0ZWRJdGVtKSJdLF9hdHRhY2hEb20oZSl7bGV0IHQ9dWUodGhpcyk7cmV0dXJuIHQuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIixkZWxlZ2F0ZXNGb2N1czohMCxzaGFkeVVwZ3JhZGVGcmFnbWVudDplfSksdC5zaGFkb3dSb290LmFwcGVuZENoaWxkKGUpLEhiZS5wcm90b3R5cGUuX2F0dGFjaERvbS5jYWxsKHRoaXMsZSl9LGZvY3VzKCl7dGhpcy4kLmlucHV0Ll9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZW50RWxlbWVudDtlJiZlLnNlbGVjdGVkSXRlbSYmdGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGUuc2VsZWN0ZWRJdGVtKX0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBlPXp0KHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZihlW3RdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGVbdF19LG9wZW46ZnVuY3Rpb24oKXt0aGlzLiQubWVudUJ1dHRvbi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24uY2xvc2UoKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oZS5kZXRhaWwuaXRlbSl9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0obnVsbCl9LF9vblRhcDpmdW5jdGlvbihlKXtpZ3QoZSk9PT10aGlzJiZ0aGlzLm9wZW4oKX0sX3NlbGVjdGVkSXRlbUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9IiI7ZT90PWUubGFiZWx8fGUuZ2V0QXR0cmlidXRlKCJsYWJlbCIpfHxlLnRleHRDb250ZW50LnRyaW0oKTp0PSIiLHRoaXMudmFsdWU9dCx0aGlzLl9zZXRTZWxlY3RlZEl0ZW1MYWJlbCh0KX0sX2NvbXB1dGVNZW51VmVydGljYWxPZmZzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8KGU/LTQ6OCl9LF9nZXRWYWxpZGl0eTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8IXRoaXMucmVxdWlyZWR8fHRoaXMucmVxdWlyZWQmJiEhdGhpcy52YWx1ZX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wZW5lZD8idHJ1ZSI6ImZhbHNlIix0PXRoaXMuY29udGVudEVsZW1lbnQ7dCYmdC5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLGUpfX0pO3ZhciB3Vz0xLE0wdD0yLEE5PXtvdXRlclNjcm9sbDp7c2Nyb2xsOiEwfSxzaGFkb3dNb2RlOntzdGFuZGFyZDpNMHQsd2F0ZXJmYWxsOndXLCJ3YXRlcmZhbGwtdGFsbCI6d1d9LHRhbGxNb2RlOnsid2F0ZXJmYWxsLXRhbGwiOiEwfX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsOwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgfQoKICAgICAgI21haW5QYW5lbCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1ib2R5OwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogc2Nyb2xsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zY3JvbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXNjcm9sbC1jb250YWluZXI7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFttb2RlPXNjcm9sbF0pIHsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IGNvdmVyCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1jb3Zlcl0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtY292ZXItY29udGFpbmVyOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFttb2RlPWNvdmVyXSkgI21haW5QYW5lbCB7CiAgICAgICAgcG9zaXRpb246IHN0YXRpYzsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogc3RhbmRhcmQKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXN0YW5kYXJkXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zdGFuZGFyZC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHNlYW1lZAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c2VhbWVkXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zZWFtZWQtY29udGFpbmVyOwogICAgICB9CgoKICAgICAgLyoKICAgICAgICogbW9kZTogd2F0ZXJmYWxsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT13YXRlcmZhbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXdhdGVyZmFsbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHdhdGVyZmFsbC10YWxsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT13YXRlcmZhbGwtdGFsbF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtd2F0ZXJmYWxsLXRhbGwtY29udGFpbmVyOwogICAgICB9CgogICAgICAjZHJvcFNoYWRvdyB7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzOwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zaGFkb3c7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgICNkcm9wU2hhZG93Lmhhcy1zaGFkb3cgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgICNtYWluQ29udGFpbmVyID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgPC9zdHlsZT4KCiAgICA8c2xvdCBpZD0iaGVhZGVyU2xvdCIgbmFtZT0iaGVhZGVyIj48L3Nsb3Q+CgogICAgPGRpdiBpZD0ibWFpblBhbmVsIj4KICAgICAgPGRpdiBpZD0ibWFpbkNvbnRhaW5lciIgY2xhc3NcJD0iW1tfY29tcHV0ZU1haW5Db250YWluZXJDbGFzcyhtb2RlKV1dIj4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJkcm9wU2hhZG93Ij48L2Rpdj4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1oZWFkZXItcGFuZWwiLHByb3BlcnRpZXM6e21vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGFuZGFyZCIsb2JzZXJ2ZXI6Il9tb2RlQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxzaGFkb3c6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sdGFsbENsYXNzOnt0eXBlOlN0cmluZyx2YWx1ZToidGFsbCJ9LGF0VG9wOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITAsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19LG9ic2VydmVyczpbIl9jb21wdXRlRHJvcFNoYWRvd0hpZGRlbihhdFRvcCwgbW9kZSwgc2hhZG93KSJdLGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYWRkTGlzdGVuZXIoKSx0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVMaXN0ZW5lcigpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGwuYmluZCh0aGlzKSxjb25zb2xlLndhcm4odGhpcy5pcywiaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBhcHAtbGF5b3V0IGluc3RlYWQhIil9LGdldCBoZWFkZXIoKXtyZXR1cm4genQodGhpcy4kLmhlYWRlclNsb3QpLmdldERpc3RyaWJ1dGVkTm9kZXMoKVswXX0sZ2V0IHNjcm9sbGVyKCl7cmV0dXJuIHRoaXMuX2dldFNjcm9sbGVyRm9yTW9kZSh0aGlzLm1vZGUpfSxnZXQgdmlzaWJsZVNoYWRvdygpe3JldHVybiB0aGlzLiQuZHJvcFNoYWRvdy5jbGFzc0xpc3QuY29udGFpbnMoImhhcy1zaGFkb3ciKX0sX2NvbXB1dGVEcm9wU2hhZG93SGlkZGVuOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1BOS5zaGFkb3dNb2RlW3RdO3RoaXMuc2hhZG93P3RoaXMudG9nZ2xlQ2xhc3MoImhhcy1zaGFkb3ciLCEwLHRoaXMuJC5kcm9wU2hhZG93KTpuPT09TTB0P3RoaXMudG9nZ2xlQ2xhc3MoImhhcy1zaGFkb3ciLCEwLHRoaXMuJC5kcm9wU2hhZG93KTpuPT09d1cmJiFlP3RoaXMudG9nZ2xlQ2xhc3MoImhhcy1zaGFkb3ciLCEwLHRoaXMuJC5kcm9wU2hhZG93KTp0aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMSx0aGlzLiQuZHJvcFNoYWRvdyl9LF9jb21wdXRlTWFpbkNvbnRhaW5lckNsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiB0LmZsZXg9ZSE9PSJjb3ZlciIsT2JqZWN0LmtleXModCkuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiB0W3JdfSkuam9pbigiICIpfSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5zY3JvbGxIYW5kbGVyKX0sX3JlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxlci5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc2Nyb2xsSGFuZGxlcil9LF9tb2RlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3ZhciByPUE5LG49dGhpcy5oZWFkZXIsaT0yMDA7biYmKHIudGFsbE1vZGVbdF0mJiFyLnRhbGxNb2RlW2VdPyhuLmNsYXNzTGlzdC5yZW1vdmUodGhpcy50YWxsQ2xhc3MpLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXtuLmNsYXNzTGlzdC5yZW1vdmUoImFuaW1hdGUiKX0saSkpOnRoaXMudG9nZ2xlQ2xhc3MoImFuaW1hdGUiLHIudGFsbE1vZGVbZV0sbikpLHRoaXMuX2tlZXBTY3JvbGxpbmdTdGF0ZSgpfSxfa2VlcFNjcm9sbGluZ1N0YXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zY3JvbGxlcix0PXRoaXMuaGVhZGVyO3RoaXMuX3NldEF0VG9wKGUuc2Nyb2xsVG9wPT09MCksdCYmdGhpcy50YWxsQ2xhc3MmJkE5LnRhbGxNb2RlW3RoaXMubW9kZV0mJnRoaXMudG9nZ2xlQ2xhc3ModGhpcy50YWxsQ2xhc3MsdGhpcy5hdFRvcHx8dC5jbGFzc0xpc3QuY29udGFpbnModGhpcy50YWxsQ2xhc3MpJiZlLnNjcm9sbEhlaWdodDx0aGlzLm9mZnNldEhlaWdodCx0KX0sX3Njcm9sbDpmdW5jdGlvbigpe3RoaXMuX2tlZXBTY3JvbGxpbmdTdGF0ZSgpLHRoaXMuZmlyZSgiY29udGVudC1zY3JvbGwiLHt0YXJnZXQ6dGhpcy5zY3JvbGxlcn0se2J1YmJsZXM6ITF9KX0sX2dldFNjcm9sbGVyRm9yTW9kZTpmdW5jdGlvbihlKXtyZXR1cm4gQTkub3V0ZXJTY3JvbGxbZV0/dGhpczp0aGlzLiQubWFpbkNvbnRhaW5lcn19KTtZdCh7aXM6InBhcGVyLWljb24tYnV0dG9uIixfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgei1pbmRleDogMDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKCiAgICAgICAgd2lkdGg6IDQwcHg7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwoKICAgICAgICAvKgogICAgICAgICAgTk9URTogQm90aCB2YWx1ZXMgYXJlIG5lZWRlZCwgc2luY2Ugc29tZSBwaG9uZXMgcmVxdWlyZSB0aGUgdmFsdWUgdG8KICAgICAgICAgIGJlIFxgdHJhbnNwYXJlbnRcYC4KICAgICAgICAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICAvKiBCZWNhdXNlIG9mIHBvbHltZXIvMjU1OCwgdGhpcyBzdHlsZSBoYXMgbG93ZXIgc3BlY2lmaWNpdHkgdGhhbiAqICovCiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QgI2luayB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWljb24tYnV0dG9uLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWljb24tYnV0dG9uLWRpc2FibGVkLXRleHQsIHZhcigtLWRpc2FibGVkLXRleHQtY29sb3IpKTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBjdXJzb3I6IGF1dG87CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uLWRpc2FibGVkOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QoOmhvdmVyKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b24taG92ZXI7CiAgICAgIH0KCiAgICAgIGlyb24taWNvbiB7CiAgICAgICAgLS1pcm9uLWljb24td2lkdGg6IDEwMCU7CiAgICAgICAgLS1pcm9uLWljb24taGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxpcm9uLWljb24gaWQ9Imljb24iIHNyYz0iW1tzcmNdXSIgaWNvbj0iW1tpY29uXV0iCiAgICAgICAgICAgICAgIGFsdCQ9IltbYWx0XV0iPjwvaXJvbi1pY29uPgogIGAsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImJ1dHRvbiIsdGFiaW5kZXg6IjAifSxiZWhhdmlvcnM6W2p4XSxyZWdpc3RlcmVkOmZ1bmN0aW9uKCl7dGhpcy5fdGVtcGxhdGUuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIil9LHByb3BlcnRpZXM6e3NyYzp7dHlwZTpTdHJpbmd9LGljb246e3R5cGU6U3RyaW5nfSxhbHQ6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfYWx0Q2hhbmdlZCJ9fSxfYWx0Q2hhbmdlZDpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIik7KCFyfHx0PT1yKSYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGUpfX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDQwMHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkOwogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICAtbW96LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGFyZWE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLm1pcnJvci10ZXh0IHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWE7CiAgICAgIH0KCiAgICAgIC5maXQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgcmVzaXplOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgLyogc2VlIGNvbW1lbnRzIGluIHRlbXBsYXRlICovCiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDsKICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0OwogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWE7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhLXBsYWNlaG9sZGVyOwogICAgICB9CgogICAgICB0ZXh0YXJlYTotbW96LXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhLXBsYWNlaG9sZGVyOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhLXBsYWNlaG9sZGVyOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDwhLS0gdGhlIG1pcnJvciBzaXplcyB0aGUgaW5wdXQvdGV4dGFyZWEgc28gaXQgZ3Jvd3Mgd2l0aCB0eXBpbmcgLS0+CiAgICA8IS0tIHVzZSAmIzE2MDsgaW5zdGVhZCAmbmJzcDsgb2YgdG8gYWxsb3cgdGhpcyBlbGVtZW50IHRvIGJlIHVzZWQgaW4gWEhUTUwgLS0+CiAgICA8ZGl2IGlkPSJtaXJyb3IiIGNsYXNzPSJtaXJyb3ItdGV4dCIgYXJpYS1oaWRkZW49InRydWUiPiZuYnNwOzwvZGl2PgoKICAgIDwhLS0gc2l6ZSB0aGUgaW5wdXQvdGV4dGFyZWEgd2l0aCBhIGRpdiwgYmVjYXVzZSB0aGUgdGV4dGFyZWEgaGFzIGludHJpbnNpYyBzaXplIGluIGZmIC0tPgogICAgPGRpdiBjbGFzcz0idGV4dGFyZWEtY29udGFpbmVyIGZpdCI+CiAgICAgIDx0ZXh0YXJlYSBpZD0idGV4dGFyZWEiIG5hbWUkPSJbW25hbWVdXSIgYXJpYS1sYWJlbCQ9IltbbGFiZWxdXSIgYXV0b2NvbXBsZXRlJD0iW1thdXRvY29tcGxldGVdXSIgYXV0b2ZvY3VzJD0iW1thdXRvZm9jdXNdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGlucHV0bW9kZSQ9IltbaW5wdXRtb2RlXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiByb3dzJD0iW1tyb3dzXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iPjwvdGV4dGFyZWE+CiAgICA8L2Rpdj4KYCxpczoiaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSIsYmVoYXZpb3JzOltUaCxEaV0scHJvcGVydGllczp7dmFsdWU6e29ic2VydmVyOiJfdmFsdWVDaGFuZ2VkIix0eXBlOlN0cmluZyxub3RpZnk6ITB9LGJpbmRWYWx1ZTp7b2JzZXJ2ZXI6Il9iaW5kVmFsdWVDaGFuZ2VkIix0eXBlOlN0cmluZyxub3RpZnk6ITB9LHJvd3M6e3R5cGU6TnVtYmVyLHZhbHVlOjEsb2JzZXJ2ZXI6Il91cGRhdGVDYWNoZWQifSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyx2YWx1ZToib2ZmIn0sYXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF1dG9jYXBpdGFsaXplOnt0eXBlOlN0cmluZyx2YWx1ZToibm9uZSJ9LGlucHV0bW9kZTp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30scmVhZG9ubHk6e3R5cGU6U3RyaW5nfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFufSxtaW5sZW5ndGg6e3R5cGU6TnVtYmVyfSxtYXhsZW5ndGg6e3R5cGU6TnVtYmVyfSxsYWJlbDp7dHlwZTpTdHJpbmd9fSxsaXN0ZW5lcnM6e2lucHV0OiJfb25JbnB1dCJ9LGdldCB0ZXh0YXJlYSgpe3JldHVybiB0aGlzLiQudGV4dGFyZWF9LGdldCBzZWxlY3Rpb25TdGFydCgpe3JldHVybiB0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uU3RhcnR9LGdldCBzZWxlY3Rpb25FbmQoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvbkVuZH0sc2V0IHNlbGVjdGlvblN0YXJ0KGUpe3RoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD1lfSxzZXQgc2VsZWN0aW9uRW5kKGUpe3RoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25FbmQ9ZX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt2YXIgZT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OltvYV1kfGhvbmUpLykmJiFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PUyAxWzM0NTY3ODldLyk7ZSYmKHRoaXMuJC50ZXh0YXJlYS5zdHlsZS5tYXJnaW5MZWZ0PSItM3B4Iil9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kLnRleHRhcmVhLnZhbGlkaXR5LnZhbGlkO3JldHVybiBlJiYodGhpcy5yZXF1aXJlZCYmdGhpcy52YWx1ZT09PSIiP2U9ITE6dGhpcy5oYXNWYWxpZGF0b3IoKSYmKGU9VGgudmFsaWRhdGUuY2FsbCh0aGlzLHRoaXMudmFsdWUpKSksdGhpcy5pbnZhbGlkPSFlLHRoaXMuZmlyZSgiaXJvbi1pbnB1dC12YWxpZGF0ZSIpLGV9LF9iaW5kVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMudmFsdWU9ZX0sX3ZhbHVlQ2hhbmdlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRleHRhcmVhOyF0fHwodC52YWx1ZSE9PWUmJih0LnZhbHVlPWV8fGU9PT0wP2U6IiIpLHRoaXMuYmluZFZhbHVlPWUsdGhpcy4kLm1pcnJvci5pbm5lckhUTUw9dGhpcy5fdmFsdWVGb3JNaXJyb3IoKSx0aGlzLmZpcmUoImJpbmQtdmFsdWUtY2hhbmdlZCIse3ZhbHVlOnRoaXMuYmluZFZhbHVlfSkpfSxfb25JbnB1dDpmdW5jdGlvbihlKXt2YXIgdD16dChlKS5wYXRoO3RoaXMudmFsdWU9dD90WzBdLnZhbHVlOmUudGFyZ2V0LnZhbHVlfSxfY29uc3RyYWluOmZ1bmN0aW9uKGUpe3ZhciB0O2ZvcihlPWV8fFsiIl0sdGhpcy5tYXhSb3dzPjAmJmUubGVuZ3RoPnRoaXMubWF4Um93cz90PWUuc2xpY2UoMCx0aGlzLm1heFJvd3MpOnQ9ZS5zbGljZSgwKTt0aGlzLnJvd3M+MCYmdC5sZW5ndGg8dGhpcy5yb3dzOyl0LnB1c2goIiIpO3JldHVybiB0LmpvaW4oIjxici8+IikrIiYjMTYwOyJ9LF92YWx1ZUZvck1pcnJvcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMudGV4dGFyZWE7aWYoISFlKXJldHVybiB0aGlzLnRva2Vucz1lJiZlLnZhbHVlP2UudmFsdWUucmVwbGFjZSgvJi9nbSwiJmFtcDsiKS5yZXBsYWNlKC8iL2dtLCImcXVvdDsiKS5yZXBsYWNlKC8nL2dtLCImIzM5OyIpLnJlcGxhY2UoLzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iikuc3BsaXQoYApgKTpbIiJdLHRoaXMuX2NvbnN0cmFpbih0aGlzLnRva2Vucyl9LF91cGRhdGVDYWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLiQubWlycm9yLmlubmVySFRNTD10aGlzLl9jb25zdHJhaW4odGhpcy50b2tlbnMpfX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgbGFiZWwgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dC1jb250YWluZXIgbm8tbGFiZWwtZmxvYXQkPSJbW25vTGFiZWxGbG9hdF1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbX2NvbXB1dGVBbHdheXNGbG9hdExhYmVsKGFsd2F5c0Zsb2F0TGFiZWwscGxhY2Vob2xkZXIpXV0iIGF1dG8tdmFsaWRhdGUkPSJbW2F1dG9WYWxpZGF0ZV1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgaW52YWxpZD0iW1tpbnZhbGlkXV0iPgoKICAgICAgPGxhYmVsIGhpZGRlbiQ9IltbIWxhYmVsXV0iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb3IkPSJbW19pbnB1dElkXV0iIHNsb3Q9ImxhYmVsIj5bW2xhYmVsXV08L2xhYmVsPgoKICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3M9InBhcGVyLWlucHV0LWlucHV0IiBzbG90PSJpbnB1dCIgaWQkPSJbW19pbnB1dElkXV0iIGFyaWEtbGFiZWxsZWRieSQ9IltbX2FyaWFMYWJlbGxlZEJ5XV0iIGFyaWEtZGVzY3JpYmVkYnkkPSJbW19hcmlhRGVzY3JpYmVkQnldXSIgYmluZC12YWx1ZT0ie3t2YWx1ZX19IiBpbnZhbGlkPSJ7e2ludmFsaWR9fSIgdmFsaWRhdG9yJD0iW1t2YWxpZGF0b3JdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGlucHV0bW9kZSQ9IltbaW5wdXRtb2RlXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiByZXF1aXJlZCQ9IltbcmVxdWlyZWRdXSIgbWlubGVuZ3RoJD0iW1ttaW5sZW5ndGhdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIHJvd3MkPSJbW3Jvd3NdXSIgbWF4LXJvd3MkPSJbW21heFJvd3NdXSIgb24tY2hhbmdlPSJfb25DaGFuZ2UiPjwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tlcnJvck1lc3NhZ2VdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0LWVycm9yIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBzbG90PSJhZGQtb24iPltbZXJyb3JNZXNzYWdlXV08L3BhcGVyLWlucHV0LWVycm9yPgogICAgICA8L3RlbXBsYXRlPgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJDb3VudGVyXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1jaGFyLWNvdW50ZXIgc2xvdD0iYWRkLW9uIj48L3BhcGVyLWlucHV0LWNoYXItY291bnRlcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICA8L3BhcGVyLWlucHV0LWNvbnRhaW5lcj4KYCxpczoicGFwZXItdGV4dGFyZWEiLGJlaGF2aW9yczpbQzksRWhdLHByb3BlcnRpZXM6e19hcmlhTGFiZWxsZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhTGFiZWxsZWRCeUNoYW5nZWQiLHR5cGU6U3RyaW5nfSxfYXJpYURlc2NyaWJlZEJ5OntvYnNlcnZlcjoiX2FyaWFEZXNjcmliZWRCeUNoYW5nZWQiLHR5cGU6U3RyaW5nfSx2YWx1ZTp7dHlwZTpTdHJpbmd9LHJvd3M6e3R5cGU6TnVtYmVyLHZhbHVlOjF9LG1heFJvd3M6e3R5cGU6TnVtYmVyLHZhbHVlOjB9fSxnZXQgc2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0fSxzZXQgc2VsZWN0aW9uU3RhcnQoZSl7dGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0PWV9LGdldCBzZWxlY3Rpb25FbmQoKXtyZXR1cm4gdGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvbkVuZH0sc2V0IHNlbGVjdGlvbkVuZChlKXt0aGlzLiQuaW5wdXQudGV4dGFyZWEuc2VsZWN0aW9uRW5kPWV9LF9hcmlhTGFiZWxsZWRCeUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5fZm9jdXNhYmxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsZSl9LF9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlKX0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50LnRleHRhcmVhfX0pO3ZhciBTVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1NXLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO1NXLmlubmVySFRNTD1gPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCwgLnBhcGVyLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQsIDQ4cHgpOwogICAgICAgIHBhZGRpbmc6IDBweCAxNnB4OwogICAgICB9CgogICAgICAucGFwZXItaXRlbSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIGJvcmRlcjpub25lOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pLCAucGFwZXItaXRlbVtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcm9uLXNlbGVjdGVkKSwgLnBhcGVyLWl0ZW0uaXJvbi1zZWxlY3RlZCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tc2VsZWN0ZWQtd2VpZ2h0LCBib2xkKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1zZWxlY3RlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSksIC5wYXBlci1pdGVtW2Rpc2FibGVkXSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWl0ZW0tZGlzYWJsZWQtY29sb3IsIHZhcigtLWRpc2FibGVkLXRleHQtY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSwgLnBhcGVyLWl0ZW06Zm9jdXMgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdXRsaW5lOiAwOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWZvY3VzZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cyk6YmVmb3JlLCAucGFwZXItaXRlbTpmb2N1czpiZWZvcmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CgogICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1kYXJrLWRpdmlkZXItb3BhY2l0eSk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZm9jdXNlZC1iZWZvcmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChTVy5jb250ZW50KTt2YXIgVmJlPXtob3N0QXR0cmlidXRlczp7cm9sZToib3B0aW9uIix0YWJpbmRleDoiMCJ9fSxQOT1bU2gsRGksVmJlXTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItaXRlbS1zaGFyZWQtc3R5bGVzIj4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1pdGVtIixiZWhhdmlvcnM6W1A5XX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47IC8qIG5lZWRlZCBmb3IgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXMgdG8gd29yayBvbiBmZiAqLwogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgfQoKICAgICAgOmhvc3QoW3R3by1saW5lXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS10d28tbGluZS1taW4taGVpZ2h0LCA3MnB4KTsKICAgICAgfQoKICAgICAgOmhvc3QoW3RocmVlLWxpbmVdKSB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1ib2R5LXRocmVlLWxpbmUtbWluLWhlaWdodCwgODhweCk7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCopIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKFtzZWNvbmRhcnldKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1ib2R5MTsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS1zZWNvbmRhcnktY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tYm9keS1zZWNvbmRhcnk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1pdGVtLWJvZHkifSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24taXRlbTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtaWNvbiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKCiAgICAgICAgd2lkdGg6IHZhcigtLXBhcGVyLWl0ZW0taWNvbi13aWR0aCwgNTZweCk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1pY29uOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9ImNvbnRlbnRJY29uIiBjbGFzcz0iY29udGVudC1pY29uIj4KICAgICAgPHNsb3QgbmFtZT0iaXRlbS1pY29uIj48L3Nsb3Q+CiAgICA8L2Rpdj4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaWNvbi1pdGVtIixiZWhhdmlvcnM6W1A5XX0pO3ZhciBNVz17cHJvcGVydGllczp7bXVsdGk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoibXVsdGlDaGFuZ2VkIn0sc2VsZWN0ZWRWYWx1ZXM6e3R5cGU6QXJyYXksbm90aWZ5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxzZWxlY3RlZEl0ZW1zOnt0eXBlOkFycmF5LHJlYWRPbmx5OiEwLG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LG9ic2VydmVyczpbIl91cGRhdGVTZWxlY3RlZChzZWxlY3RlZFZhbHVlcy5zcGxpY2VzKSJdLHNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLm11bHRpP3RoaXMuX3RvZ2dsZVNlbGVjdGVkKGUpOnRoaXMuc2VsZWN0ZWQ9ZX0sbXVsdGlDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX3NlbGVjdGlvbi5tdWx0aT1lLHRoaXMuX3VwZGF0ZVNlbGVjdGVkKCl9LGdldCBfc2hvdWxkVXBkYXRlU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWQhPW51bGx8fHRoaXMuc2VsZWN0ZWRWYWx1ZXMhPW51bGwmJnRoaXMuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RofSxfdXBkYXRlQXR0ckZvclNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5tdWx0aT90aGlzLnNlbGVjdGVkSXRlbXMmJnRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGg+MCYmKHRoaXMuc2VsZWN0ZWRWYWx1ZXM9dGhpcy5zZWxlY3RlZEl0ZW1zLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW5kZXhUb1ZhbHVlKHRoaXMuaW5kZXhPZihlKSl9LHRoaXMpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbH0sdGhpcykpOndoLl91cGRhdGVBdHRyRm9yU2VsZWN0ZWQuYXBwbHkodGhpcyl9LF91cGRhdGVTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMubXVsdGk/dGhpcy5fc2VsZWN0TXVsdGkodGhpcy5zZWxlY3RlZFZhbHVlcyk6dGhpcy5fc2VsZWN0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZCl9LF9zZWxlY3RNdWx0aTpmdW5jdGlvbihlKXtlPWV8fFtdO3ZhciB0PSh0aGlzLl92YWx1ZXNUb0l0ZW1zKGUpfHxbXSkuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpIT1udWxsfSk7dGhpcy5fc2VsZWN0aW9uLmNsZWFyKHQpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRoaXMuX3NlbGVjdGlvbi5zZXRJdGVtU2VsZWN0ZWQodFtyXSwhMCk7aWYodGhpcy5mYWxsYmFja1NlbGVjdGlvbiYmIXRoaXMuX3NlbGVjdGlvbi5nZXQoKS5sZW5ndGgpe3ZhciBuPXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24pO24mJnRoaXMuc2VsZWN0KHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24pfX0sX3NlbGVjdGlvbkNoYW5nZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3NlbGVjdGlvbi5nZXQoKTt0aGlzLm11bHRpPyh0aGlzLl9zZXRTZWxlY3RlZEl0ZW1zKGUpLHRoaXMuX3NldFNlbGVjdGVkSXRlbShlLmxlbmd0aD9lWzBdOm51bGwpKTplIT1udWxsPyh0aGlzLl9zZXRTZWxlY3RlZEl0ZW1zKFtlXSksdGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGUpKToodGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhbXSksdGhpcy5fc2V0U2VsZWN0ZWRJdGVtKG51bGwpKX0sX3RvZ2dsZVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc2VsZWN0ZWRWYWx1ZXMuaW5kZXhPZihlKSxyPXQ8MDtyP3RoaXMucHVzaCgic2VsZWN0ZWRWYWx1ZXMiLGUpOnRoaXMuc3BsaWNlKCJzZWxlY3RlZFZhbHVlcyIsdCwxKX0sX3ZhbHVlc1RvSXRlbXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDplLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsdWVUb0l0ZW0odCl9LHRoaXMpfX0sRTB0PVt3aCxNV107dmFyIF9fPXtwcm9wZXJ0aWVzOntmb2N1c2VkSXRlbTp7b2JzZXJ2ZXI6Il9mb2N1c2VkSXRlbUNoYW5nZWQiLHJlYWRPbmx5OiEwLHR5cGU6T2JqZWN0fSxhdHRyRm9ySXRlbVRpdGxlOnt0eXBlOlN0cmluZ30sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCJ9fSxfTU9ESUZJRVJfS0VZUzpbIkFsdCIsIkFsdEdyYXBoIiwiQ2Fwc0xvY2siLCJDb250cm9sIiwiRm4iLCJGbkxvY2siLCJIeXBlciIsIk1ldGEiLCJOdW1Mb2NrIiwiT1MiLCJTY3JvbGxMb2NrIiwiU2hpZnQiLCJTdXBlciIsIlN5bWJvbCIsIlN5bWJvbExvY2siXSxfU0VBUkNIX1JFU0VUX1RJTUVPVVRfTVM6MWUzLF9wcmV2aW91c1RhYkluZGV4OjAsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im1lbnUifSxvYnNlcnZlcnM6WyJfdXBkYXRlTXVsdGlzZWxlY3RhYmxlKG11bHRpKSJdLGxpc3RlbmVyczp7Zm9jdXM6Il9vbkZvY3VzIixrZXlkb3duOiJfb25LZXlkb3duIiwiaXJvbi1pdGVtcy1jaGFuZ2VkIjoiX29uSXJvbkl0ZW1zQ2hhbmdlZCJ9LGtleUJpbmRpbmdzOnt1cDoiX29uVXBLZXkiLGRvd246Il9vbkRvd25LZXkiLGVzYzoiX29uRXNjS2V5Iiwic2hpZnQrdGFiOmtleWRvd24iOiJfb25TaGlmdFRhYkRvd24ifSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKTt2YXIgdD10aGlzLl92YWx1ZVRvSXRlbShlKTt0JiZ0Lmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKXx8KHRoaXMuX3NldEZvY3VzZWRJdGVtKHQpLE1XLnNlbGVjdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxfcmVzZXRUYWJpbmRpY2VzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5tdWx0aT90aGlzLnNlbGVjdGVkSXRlbXMmJnRoaXMuc2VsZWN0ZWRJdGVtc1swXTp0aGlzLnNlbGVjdGVkSXRlbTt0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24odCl7dC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0PT09ZT8iMCI6Ii0xIiksdC5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLHRoaXMuX3NlbGVjdGlvbi5pc1NlbGVjdGVkKHQpKX0sdGhpcyl9LF91cGRhdGVNdWx0aXNlbGVjdGFibGU6ZnVuY3Rpb24oZSl7ZT90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1tdWx0aXNlbGVjdGFibGUiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIil9LF9mb2N1c1dpdGhLZXlib2FyZEV2ZW50OmZ1bmN0aW9uKGUpe2lmKHRoaXMuX01PRElGSUVSX0tFWVMuaW5kZXhPZihlLmtleSk9PT0tMSl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoIl9jbGVhclNlYXJjaFRleHQiKTt2YXIgdD10aGlzLl9zZWFyY2hUZXh0fHwiIixyPWUua2V5JiZlLmtleS5sZW5ndGg9PTE/ZS5rZXk6U3RyaW5nLmZyb21DaGFyQ29kZShlLmtleUNvZGUpO3QrPXIudG9Mb2NhbGVMb3dlckNhc2UoKTtmb3IodmFyIG49dC5sZW5ndGgsaT0wLG87bz10aGlzLml0ZW1zW2ldO2krKylpZighby5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBhPXRoaXMuYXR0ckZvckl0ZW1UaXRsZXx8InRleHRDb250ZW50IixzPShvW2FdfHxvLmdldEF0dHJpYnV0ZShhKXx8IiIpLnRyaW0oKTtpZighKHMubGVuZ3RoPG4pJiZzLnNsaWNlKDAsbikudG9Mb2NhbGVMb3dlckNhc2UoKT09dCl7dGhpcy5fc2V0Rm9jdXNlZEl0ZW0obyk7YnJlYWt9fXRoaXMuX3NlYXJjaFRleHQ9dCx0aGlzLmRlYm91bmNlKCJfY2xlYXJTZWFyY2hUZXh0Iix0aGlzLl9jbGVhclNlYXJjaFRleHQsdGhpcy5fU0VBUkNIX1JFU0VUX1RJTUVPVVRfTVMpfX0sX2NsZWFyU2VhcmNoVGV4dDpmdW5jdGlvbigpe3RoaXMuX3NlYXJjaFRleHQ9IiJ9LF9mb2N1c1ByZXZpb3VzOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLHQ9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSkscj0xO3I8ZSsxO3IrKyl7dmFyIG49dGhpcy5pdGVtc1sodC1yK2UpJWVdO2lmKCFuLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl7dmFyIGk9enQobikuZ2V0T3duZXJSb290KCl8fGRvY3VtZW50O2lmKHRoaXMuX3NldEZvY3VzZWRJdGVtKG4pLHp0KGkpLmFjdGl2ZUVsZW1lbnQ9PW4pcmV0dXJufX19LF9mb2N1c05leHQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5pdGVtcy5sZW5ndGgsdD1OdW1iZXIodGhpcy5pbmRleE9mKHRoaXMuZm9jdXNlZEl0ZW0pKSxyPTE7cjxlKzE7cisrKXt2YXIgbj10aGlzLml0ZW1zWyh0K3IpJWVdO2lmKCFuLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl7dmFyIGk9enQobikuZ2V0T3duZXJSb290KCl8fGRvY3VtZW50O2lmKHRoaXMuX3NldEZvY3VzZWRJdGVtKG4pLHp0KGkpLmFjdGl2ZUVsZW1lbnQ9PW4pcmV0dXJufX19LF9hcHBseVNlbGVjdGlvbjpmdW5jdGlvbihlLHQpe3Q/ZS5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLCJ0cnVlIik6ZS5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLCJmYWxzZSIpLHdoLl9hcHBseVNlbGVjdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9mb2N1c2VkSXRlbUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0JiZ0LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLGUmJiFlLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSYmIXRoaXMuZGlzYWJsZWQmJihlLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksZS5mb2N1cygpKX0sX29uSXJvbkl0ZW1zQ2hhbmdlZDpmdW5jdGlvbihlKXtlLmRldGFpbC5hZGRlZE5vZGVzLmxlbmd0aCYmdGhpcy5fcmVzZXRUYWJpbmRpY2VzKCl9LF9vblNoaWZ0VGFiRG93bjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtfXy5fc2hpZnRUYWJQcmVzc2VkPSEwLHRoaXMuX3NldEZvY3VzZWRJdGVtKG51bGwpLHRoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdCksX18uX3NoaWZ0VGFiUHJlc3NlZD0hMX0sMSl9LF9vbkZvY3VzOmZ1bmN0aW9uKGUpe2lmKCFfXy5fc2hpZnRUYWJQcmVzc2VkKXt2YXIgdD16dChlKS5yb290VGFyZ2V0O3QhPT10aGlzJiZ0eXBlb2YgdC50YWJJbmRleCE9InVuZGVmaW5lZCImJiF0aGlzLmlzTGlnaHREZXNjZW5kYW50KHQpfHwodGhpcy5fZGVmYXVsdEZvY3VzQXN5bmM9dGhpcy5hc3luYyhmdW5jdGlvbigpe3ZhciByPXRoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXNbMF06dGhpcy5zZWxlY3RlZEl0ZW07dGhpcy5fc2V0Rm9jdXNlZEl0ZW0obnVsbCkscj90aGlzLl9zZXRGb2N1c2VkSXRlbShyKTp0aGlzLml0ZW1zWzBdJiZ0aGlzLl9mb2N1c05leHQoKX0pKX19LF9vblVwS2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzUHJldmlvdXMoKSxlLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbkRvd25LZXk6ZnVuY3Rpb24oZSl7dGhpcy5fZm9jdXNOZXh0KCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Fc2NLZXk6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5mb2N1c2VkSXRlbTt0JiZ0LmJsdXIoKX0sX29uS2V5ZG93bjpmdW5jdGlvbihlKXt0aGlzLmtleWJvYXJkRXZlbnRNYXRjaGVzS2V5cyhlLCJ1cCBkb3duIGVzYyIpfHx0aGlzLl9mb2N1c1dpdGhLZXlib2FyZEV2ZW50KGUpLGUuc3RvcFByb3BhZ2F0aW9uKCl9LF9hY3RpdmF0ZUhhbmRsZXI6ZnVuY3Rpb24oZSl7d2guX2FjdGl2YXRlSGFuZGxlci5jYWxsKHRoaXMsZSksZS5zdG9wUHJvcGFnYXRpb24oKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbihlKXtlPyh0aGlzLl9wcmV2aW91c1RhYkluZGV4PXRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpP3RoaXMudGFiSW5kZXg6MCx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKSk6dGhpcy5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHRoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdGhpcy5fcHJldmlvdXNUYWJJbmRleCl9fTtfXy5fc2hpZnRUYWJQcmVzc2VkPSExO3ZhciBJOT1bRTB0LE9vLF9fXTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA4cHggMDsKCiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItbGlzdGJveC1iYWNrZ3JvdW5kLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItbGlzdGJveC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWxpc3Rib3g7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1saXN0Ym94IixiZWhhdmlvcnM6W0k5XSxob3N0QXR0cmlidXRlczp7cm9sZToibGlzdGJveCJ9fSk7dmFyIFQwdD1RYAo8ZG9tLW1vZHVsZSBpZD0icGFwZXItbWF0ZXJpYWwtc2hhcmVkLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi00ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNmRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLThkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KYDtUMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChUMHQuY29udGVudCk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0KFthbmltYXRlZF0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctdHJhbnNpdGlvbjsKICAgICAgfQogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWw7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1tYXRlcmlhbCIscHJvcGVydGllczp7ZWxldmF0aW9uOnt0eXBlOk51bWJlcixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6MX0sYW5pbWF0ZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITF9fX0pO3ZhciBMOT17cHJvcGVydGllczp7dmFsdWU6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sbWluOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sbWF4Ont0eXBlOk51bWJlcix2YWx1ZToxMDAsbm90aWZ5OiEwfSxzdGVwOnt0eXBlOk51bWJlcix2YWx1ZToxLG5vdGlmeTohMH0scmF0aW86e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITAsbm90aWZ5OiEwfX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZSh2YWx1ZSwgbWluLCBtYXgsIHN0ZXApIl0sX2NhbGNSYXRpbzpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5fY2xhbXBWYWx1ZShlKS10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKX0sX2NsYW1wVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWluKHRoaXMubWF4LE1hdGgubWF4KHRoaXMubWluLHRoaXMuX2NhbGNTdGVwKGUpKSl9LF9jYWxjU3RlcDpmdW5jdGlvbihlKXtpZihlPXBhcnNlRmxvYXQoZSksIXRoaXMuc3RlcClyZXR1cm4gZTt2YXIgdD1NYXRoLnJvdW5kKChlLXRoaXMubWluKS90aGlzLnN0ZXApO3JldHVybiB0aGlzLnN0ZXA8MT90LygxL3RoaXMuc3RlcCkrdGhpcy5taW46dCp0aGlzLnN0ZXArdGhpcy5taW59LF92YWxpZGF0ZVZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlKTtyZXR1cm4gdGhpcy52YWx1ZT10aGlzLm9sZFZhbHVlPWlzTmFOKGUpP3RoaXMub2xkVmFsdWU6ZSx0aGlzLnZhbHVlIT09ZX0sX3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX3ZhbGlkYXRlVmFsdWUoKSx0aGlzLl9zZXRSYXRpbyh0aGlzLl9jYWxjUmF0aW8odGhpcy52YWx1ZSkqMTAwKX19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pLCBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXByb2dyZXNzLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNwcm9ncmVzc0NvbnRhaW5lciwKICAgICAgLyogdGhlIHN0cmlwZSBmb3IgdGhlIGluZGV0ZXJtaW5hdGUgYW5pbWF0aW9uKi8KICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBoZWlnaHQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWhlaWdodCwgNHB4KTsKICAgICAgfQoKICAgICAgI3ByaW1hcnlQcm9ncmVzcywKICAgICAgI3NlY29uZGFyeVByb2dyZXNzLAogICAgICAuaW5kZXRlcm1pbmF0ZTo6YWZ0ZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgIH0KCiAgICAgICNwcm9ncmVzc0NvbnRhaW5lciwKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXItY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTMwMCkpOwogICAgICB9CgogICAgICA6aG9zdCgudHJhbnNpdGluZykgI3ByaW1hcnlQcm9ncmVzcywKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiAtd2Via2l0LXRyYW5zZm9ybTsKICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm07CgogICAgICAgIC8qIER1cmF0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWR1cmF0aW9uLCAwLjA4cyk7CiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwoKICAgICAgICAvKiBUaW1pbmcgZnVuY3Rpb24gKi8KICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CiAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLCBlYXNlKTsKCiAgICAgICAgLyogRGVsYXkgKi8KICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZGVsYXksIDBzKTsKICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMCk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCk7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgI3ByaW1hcnlQcm9ncmVzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7CiAgICAgIH0KCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3Mtc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tMTAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktNTAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtZGlzYWJsZWQtc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGluZGV0ZXJtaW5hdGUtYmFyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtkaXNhYmxlZF0pKSAjcHJpbWFyeVByb2dyZXNzLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKCiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtYmFyIHsKICAgICAgICAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoLTEwMCUpOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllciguMjgsLjYyLC4zNywuOTEpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZS1zcGxpdHRlciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgIH0KICAgICAgICAzMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjQyLDAsLjYsLjgpOwogICAgICAgIH0KICAgICAgICA5MCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtYmFyIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgICA3NSUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgwKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZS1zcGxpdHRlciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjQyLDAsLjYsLjgpOwogICAgICAgIH0KICAgICAgICA5MCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0icHJvZ3Jlc3NDb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJzZWNvbmRhcnlQcm9ncmVzcyIgaGlkZGVuXCQ9IltbX2hpZGVTZWNvbmRhcnlQcm9ncmVzcyhzZWNvbmRhcnlSYXRpbyldXSI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InByaW1hcnlQcm9ncmVzcyI+PC9kaXY+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItcHJvZ3Jlc3MiLGJlaGF2aW9yczpbTDldLHByb3BlcnRpZXM6e3NlY29uZGFyeVByb2dyZXNzOnt0eXBlOk51bWJlcix2YWx1ZTowfSxzZWNvbmRhcnlSYXRpbzp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWFkT25seTohMH0saW5kZXRlcm1pbmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfdG9nZ2xlSW5kZXRlcm1pbmF0ZSJ9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfZGlzYWJsZWRDaGFuZ2VkIn19LG9ic2VydmVyczpbIl9wcm9ncmVzc0NoYW5nZWQoc2Vjb25kYXJ5UHJvZ3Jlc3MsIHZhbHVlLCBtaW4sIG1heCwgaW5kZXRlcm1pbmF0ZSkiXSxob3N0QXR0cmlidXRlczp7cm9sZToicHJvZ3Jlc3NiYXIifSxfdG9nZ2xlSW5kZXRlcm1pbmF0ZTpmdW5jdGlvbihlKXt0aGlzLnRvZ2dsZUNsYXNzKCJpbmRldGVybWluYXRlIixlLHRoaXMuJC5wcmltYXJ5UHJvZ3Jlc3MpfSxfdHJhbnNmb3JtUHJvZ3Jlc3M6ZnVuY3Rpb24oZSx0KXt2YXIgcj0ic2NhbGVYKCIrdC8xMDArIikiO2Uuc3R5bGUudHJhbnNmb3JtPWUuc3R5bGUud2Via2l0VHJhbnNmb3JtPXJ9LF9tYWluUmF0aW9DaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX3RyYW5zZm9ybVByb2dyZXNzKHRoaXMuJC5wcmltYXJ5UHJvZ3Jlc3MsZSl9LF9wcm9ncmVzc0NoYW5nZWQ6ZnVuY3Rpb24oZSx0LHIsbixpKXtlPXRoaXMuX2NsYW1wVmFsdWUoZSksdD10aGlzLl9jbGFtcFZhbHVlKHQpO3ZhciBvPXRoaXMuX2NhbGNSYXRpbyhlKSoxMDAsYT10aGlzLl9jYWxjUmF0aW8odCkqMTAwO3RoaXMuX3NldFNlY29uZGFyeVJhdGlvKG8pLHRoaXMuX3RyYW5zZm9ybVByb2dyZXNzKHRoaXMuJC5zZWNvbmRhcnlQcm9ncmVzcyxvKSx0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLGEpLHRoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9ZSxpP3RoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXZhbHVlbm93Iik6dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVub3ciLHQpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWluIixyKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1heCIsbil9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLGU/InRydWUiOiJmYWxzZSIpfSxfaGlkZVNlY29uZGFyeVByb2dyZXNzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MH19KTt2YXIgQzB0PVFgCjxzdHlsZT4KICA6aG9zdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBsaW5lLWhlaWdodDogMDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tc2l6ZSwgMTZweCk7CiAgICAvKiAtMXB4IGlzIGEgc2VudGluZWwgZm9yIHRoZSBkZWZhdWx0IGFuZCBpcyByZXBsYWNlIGluIFxgYXR0YWNoZWRcYC4gKi8KICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemU6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSwgLTFweCk7CiAgfQoKICA6aG9zdCg6Zm9jdXMpIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAjcmFkaW9Db250YWluZXIgewogICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplKTsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgQGFwcGx5IC0tcGFwZXItcmFkaW8tYnV0dG9uLXJhZGlvLWNvbnRhaW5lcjsKICB9CgogICNpbmsgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA1MCU7CiAgICBsZWZ0OiA1MCU7CiAgICByaWdodDogYXV0bzsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSk7CiAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplKTsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjY7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICB9CgogICNpbmtbY2hlY2tlZF0gewogICAgY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgI29mZlJhZGlvLCAjb25SYWRpbyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgdG9wOiAwOwogICAgbGVmdDogMDsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogIH0KCiAgI29mZlJhZGlvIHsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1iYWNrZ3JvdW5kLWNvbG9yLCB0cmFuc3BhcmVudCk7CiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4yOHM7CiAgfQoKICAjb25SYWRpbyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gZWFzZSAwLjI4czsKICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNvZmZSYWRpbyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNvblJhZGlvIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjUpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjUpOwogIH0KCiAgI3JhZGlvTGFiZWwgewogICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICBtYXJnaW4tbGVmdDogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLXNwYWNpbmcsIDEwcHgpOwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbDsKICB9CgogIDpob3N0KFtjaGVja2VkXSkgI3JhZGlvTGFiZWwgewogICAgQGFwcGx5IC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLWNoZWNrZWQ7CiAgfQoKICAjcmFkaW9MYWJlbDpkaXIocnRsKSB7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIG1hcmdpbi1yaWdodDogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLXNwYWNpbmcsIDEwcHgpOwogIH0KCiAgI3JhZGlvTGFiZWxbaGlkZGVuXSB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgLyogZGlzYWJsZWQgc3RhdGUgKi8KCiAgOmhvc3QoW2Rpc2FibGVkXSkgI29mZlJhZGlvIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIG9wYWNpdHk6IDAuNTsKICB9CgogIDpob3N0KFtkaXNhYmxlZF0pICNyYWRpb0xhYmVsIHsKICAgIC8qIHNsaWdodGx5IGRhcmtlciB0aGFuIHRoZSBidXR0b24sIHNvIHRoYXQgaXQncyByZWFkYWJsZSAqLwogICAgb3BhY2l0eTogMC42NTsKICB9Cjwvc3R5bGU+Cgo8ZGl2IGlkPSJyYWRpb0NvbnRhaW5lciI+CiAgPGRpdiBpZD0ib2ZmUmFkaW8iPjwvZGl2PgogIDxkaXYgaWQ9Im9uUmFkaW8iPjwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9InJhZGlvTGFiZWwiPjxzbG90Pjwvc2xvdD48L2Rpdj5gO0MwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOkMwdCxpczoicGFwZXItcmFkaW8tYnV0dG9uIixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToicmFkaW8iLCJhcmlhLWNoZWNrZWQiOiExLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e2FyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLWNoZWNrZWQifX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnJhZGlvQ29udGFpbmVyfSxhdHRhY2hlZDpmdW5jdGlvbigpe1RtKHRoaXMsZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSIpLnRyaW0oKTtpZihlPT09Ii0xcHgiKXt2YXIgdD1wYXJzZUZsb2F0KHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKCItLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLXNpemUiKS50cmltKCkpLHI9TWF0aC5mbG9vcigzKnQpO3IlMiE9PXQlMiYmcisrLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiOnIrInB4In0pfX0pfX0pO3ZhciBrOT17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im1lbnViYXIifSxrZXlCaW5kaW5nczp7bGVmdDoiX29uTGVmdEtleSIscmlnaHQ6Il9vblJpZ2h0S2V5In0sX29uVXBLZXk6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2VkSXRlbS5jbGljaygpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRG93bktleTpmdW5jdGlvbihlKXt0aGlzLmZvY3VzZWRJdGVtLmNsaWNrKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxnZXQgX2lzUlRMKCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmRpcmVjdGlvbj09PSJydGwifSxfb25MZWZ0S2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2lzUlRMP3RoaXMuX2ZvY3VzTmV4dCgpOnRoaXMuX2ZvY3VzUHJldmlvdXMoKSxlLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vblJpZ2h0S2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2lzUlRMP3RoaXMuX2ZvY3VzUHJldmlvdXMoKTp0aGlzLl9mb2N1c05leHQoKSxlLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbktleWRvd246ZnVuY3Rpb24oZSl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXMoZSwidXAgZG93biBsZWZ0IHJpZ2h0IGVzYyIpfHx0aGlzLl9mb2N1c1dpdGhLZXlib2FyZEV2ZW50KGUpfX0sUjk9W0k5LGs5XTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgcGFkZGluZzogdmFyKC0tcGFwZXItcmFkaW8tZ3JvdXAtaXRlbS1wYWRkaW5nLCAxMnB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLXJhZGlvLWdyb3VwIixiZWhhdmlvcnM6W1I5XSxob3N0QXR0cmlidXRlczp7cm9sZToicmFkaW9ncm91cCJ9LHByb3BlcnRpZXM6e2F0dHJGb3JTZWxlY3RlZDp7dHlwZTpTdHJpbmcsdmFsdWU6Im5hbWUifSxzZWxlY3RlZEF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImNoZWNrZWQifSxzZWxlY3RhYmxlOnt0eXBlOlN0cmluZyx2YWx1ZToicGFwZXItcmFkaW8tYnV0dG9uIn0sYWxsb3dFbXB0eVNlbGVjdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ZhbHVlVG9JdGVtKGUpO2lmKCEodCYmdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpKXtpZih0aGlzLnNlbGVjdGVkKXt2YXIgcj10aGlzLl92YWx1ZVRvSXRlbSh0aGlzLnNlbGVjdGVkKTtpZih0aGlzLnNlbGVjdGVkPT1lKWlmKHRoaXMuYWxsb3dFbXB0eVNlbGVjdGlvbillPSIiO2Vsc2V7ciYmKHIuY2hlY2tlZD0hMCk7cmV0dXJufXImJihyLmNoZWNrZWQ9ITEpfXdoLnNlbGVjdC5hcHBseSh0aGlzLFtlXSksdGhpcy5maXJlKCJwYXBlci1yYWRpby1ncm91cC1jaGFuZ2VkIil9fSxfYWN0aXZhdGVGb2N1c2VkSXRlbTpmdW5jdGlvbigpe3RoaXMuX2l0ZW1BY3RpdmF0ZSh0aGlzLl92YWx1ZUZvckl0ZW0odGhpcy5mb2N1c2VkSXRlbSksdGhpcy5mb2N1c2VkSXRlbSl9LF9vblVwS2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzUHJldmlvdXMoKSxlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzTmV4dCgpLGUucHJldmVudERlZmF1bHQoKSx0aGlzLl9hY3RpdmF0ZUZvY3VzZWRJdGVtKCl9LF9vbkxlZnRLZXk6ZnVuY3Rpb24oZSl7azkuX29uTGVmdEtleS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25SaWdodEtleTpmdW5jdGlvbihlKXtrOS5fb25SaWdodEtleS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfX0pO3ZhciBBMHQ9UWAKICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIEBhcHBseSAtLWxheW91dDsKICAgICAgQGFwcGx5IC0tbGF5b3V0LWp1c3RpZmllZDsKICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgd2lkdGg6IDIwMHB4OwogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1hY3RpdmUtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLXNlY29uZGFyeS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtMzAwKSk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtZGlzYWJsZWQtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQtYWN0aXZlLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQ6IHZhcigtLXBhcGVyLXNsaWRlci1oZWlnaHQsIDJweCk7CiAgICB9CgogICAgLyogZm9jdXMgc2hvd3MgdGhlIHJpcHBsZSAqLwogICAgOmhvc3QoOmZvY3VzKSB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IFRob3VnaCA6aG9zdC1jb250ZXh0IGlzIG5vdCB1bml2ZXJzYWxseSBzdXBwb3J0ZWQsIHNvbWUgcGFnZXMKICAgICAgKiBzdGlsbCByZWx5IG9uIHBhcGVyLXNsaWRlciBiZWluZyBmbGlwcGVkIHdoZW4gZGlyPSJydGwiIGlzIHNldCBvbiBib2R5LiBGb3IgZnVsbAogICAgICAqIGNvbXBhdGliaWxpdHksIGRpcj0icnRsIiBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0IG9uIHBhcGVyLXNsaWRlci4KICAgICAgKi8KICAgIDpkaXIocnRsKSAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTsKICAgIH0KCiAgICAvKioKICAgICAgKiBOT1RFKGtlYW51bGVlKTogVGhpcyBpcyBzZXBhcmF0ZSBmcm9tIHRoZSBydWxlIGFib3ZlIGJlY2F1c2UgOmhvc3QtY29udGV4dCBtYXkKICAgICAgKiBub3QgYmUgcmVjb2duaXplZC4KICAgICAgKi8KICAgIDpob3N0KFtkaXI9InJ0bCJdKSAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTsKICAgIH0KCiAgICAvKioKICAgICAgKiBOT1RFKGtlYW51bGVlKTogTmVlZGVkIHRvIG92ZXJyaWRlIHRoZSA6aG9zdC1jb250ZXh0IHJ1bGUgKHdoZXJlIHN1cHBvcnRlZCkKICAgICAgKiB0byBzdXBwb3J0IExUUiBzbGlkZXJzIGluIFJUTCBwYWdlcy4KICAgICAgKi8KICAgIDpob3N0KFtkaXI9Imx0ciJdKSAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSk7CiAgICB9CgogICAgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogY2FsYygzMHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KSk7CiAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKDE1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoMTVweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICB9CgogICAgI3NsaWRlckNvbnRhaW5lcjpmb2N1cyB7CiAgICAgIG91dGxpbmU6IDA7CiAgICB9CgogICAgI3NsaWRlckNvbnRhaW5lci5lZGl0YWJsZSB7CiAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICB9CgogICAgLmJhci1jb250YWluZXIgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogMDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAucmluZyA+IC5iYXItY29udGFpbmVyIHsKICAgICAgbGVmdDogY2FsYyg1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuMThzIGVhc2U7CiAgICB9CgogICAgLnJpbmcuZXhwYW5kLmRyYWdnaW5nID4gLmJhci1jb250YWluZXIgewogICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgfQoKICAgIC5yaW5nLmV4cGFuZDpub3QoLnBpbikgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgIGxlZnQ6IGNhbGMoOHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgIH0KCiAgICAjc2xpZGVyQmFyIHsKICAgICAgcGFkZGluZzogMTVweCAwOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWJhci1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWNvbnRhaW5lci1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWNvbnRhaW5lci1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCk7CiAgICB9CgogICAgLnNsaWRlci1tYXJrZXJzIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAvKiBzbGlkZXIta25vYiBpcyAzMHB4ICsgdGhlIHNsaWRlci1oZWlnaHQgc28gdGhhdCB0aGUgbWFya2VycyBzaG91bGQgc3RhcnQgYXQgYSBvZmZzZXQgb2YgMTVweCovCiAgICAgIHRvcDogMTVweDsKICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogLTFweDsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgfQoKICAgIC5zbGlkZXItbWFya2VyIHsKICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICB9CiAgICAuc2xpZGVyLW1hcmtlcnM6OmFmdGVyLAogICAgLnNsaWRlci1tYXJrZXI6OmFmdGVyIHsKICAgICAgY29udGVudDogIiI7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBtYXJnaW4tbGVmdDogLTFweDsKICAgICAgd2lkdGg6IDJweDsKICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yLCAjMDAwKTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2IgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHRvcDogMDsKICAgICAgbWFyZ2luLWxlZnQ6IGNhbGMoLTE1cHggLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICB3aWR0aDogY2FsYygzMHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KSk7CiAgICAgIGhlaWdodDogY2FsYygzMHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KSk7CiAgICB9CgogICAgLnRyYW5zaXRpbmcgPiAuc2xpZGVyLWtub2IgewogICAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuMDhzIGVhc2U7CiAgICB9CgogICAgLnNsaWRlci1rbm9iOmZvY3VzIHsKICAgICAgb3V0bGluZTogbm9uZTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgfQoKICAgIC5zbmFwcyA+IC5zbGlkZXIta25vYi5kcmFnZ2luZyB7CiAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMDhzIGVhc2U7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjA4cyBlYXNlOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgIG1hcmdpbjogMTBweDsKICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOwogICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDIwcHgpOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwoKICAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwoKICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm0sIGJhY2tncm91bmQtY29sb3IsIGJvcmRlcjsKICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMThzOwogICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsKICAgIH0KCiAgICAuZXhwYW5kOm5vdCgucGluKSA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNSk7CiAgICB9CgogICAgLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItcGluLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgIH0KCiAgICAucGluID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICBjb250ZW50OiAiIjsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDUwJTsKICAgICAgbWFyZ2luLWxlZnQ6IC0xM3B4OwogICAgICB3aWR0aDogMjZweDsKICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICBib3JkZXItcmFkaXVzOiA1MCUgNTAlIDUwJSAwOwoKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUsCiAgICAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gLjE4cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIC4xOHMgZWFzZTsKICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4xOHMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAuMThzIGVhc2U7CiAgICB9CgogICAgLnBpbi5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgfQoKICAgIC5waW4uZXhwYW5kID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgxKSB0cmFuc2xhdGUoMTdweCwgLTE3cHgpOwogICAgfQoKICAgIC5waW4gPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgY29udGVudDogYXR0cih2YWx1ZSk7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTZweDsKICAgICAgd2lkdGg6IDMycHg7CiAgICAgIGhlaWdodDogMjZweDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBjb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWZvbnQtY29sb3IsICNmZmYpOwogICAgICBmb250LXNpemU6IDEwcHg7CgogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgIH0KCiAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YWZ0ZXIgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGUoMCwgLTE3cHgpOwogICAgfQoKICAgIC8qIHBhcGVyLWlucHV0ICovCiAgICAuc2xpZGVyLWlucHV0IHsKICAgICAgd2lkdGg6IDUwcHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXNsaWRlci1pbnB1dC1jb250YWluZXItaW5wdXQ7CiAgICAgIH07CiAgICAgIEBhcHBseSAtLXBhcGVyLXNsaWRlci1pbnB1dDsKICAgIH0KCiAgICAvKiBkaXNhYmxlZCBzdGF0ZSAqLwogICAgI3NsaWRlckNvbnRhaW5lci5kaXNhYmxlZCB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQoKICAgIC5kaXNhYmxlZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1kaXNhYmxlZC1rbm9iLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQta25vYi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgwLjc1LCAwLjc1LCAxKTsKICAgIH0KCiAgICAuZGlzYWJsZWQucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yLCB0cmFuc3BhcmVudCk7CiAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgIH0KCiAgICBwYXBlci1yaXBwbGUgewogICAgICBjb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgfQogIDwvc3R5bGU+CgogIDxkaXYgaWQ9InNsaWRlckNvbnRhaW5lciIgY2xhc3NcJD0iW1tfZ2V0Q2xhc3NOYW1lcyhkaXNhYmxlZCwgcGluLCBzbmFwcywgaW1tZWRpYXRlVmFsdWUsIG1pbiwgZXhwYW5kLCBkcmFnZ2luZywgdHJhbnNpdGluZywgZWRpdGFibGUpXV0iPgogICAgPGRpdiBjbGFzcz0iYmFyLWNvbnRhaW5lciI+CiAgICAgIDxwYXBlci1wcm9ncmVzcyBkaXNhYmxlZFwkPSJbW2Rpc2FibGVkXV0iIGlkPSJzbGlkZXJCYXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBtaW49IltbbWluXV0iIG1heD0iW1ttYXhdXSIgc3RlcD0iW1tzdGVwXV0iIHZhbHVlPSJbW2ltbWVkaWF0ZVZhbHVlXV0iIHNlY29uZGFyeS1wcm9ncmVzcz0iW1tzZWNvbmRhcnlQcm9ncmVzc11dIiBvbi1kb3duPSJfYmFyZG93biIgb24tdXA9Il9yZXNldEtub2IiIG9uLXRyYWNrPSJfYmFydHJhY2siIG9uLXRhcD0iX2JhcmNsaWNrIj4KICAgICAgPC9wYXBlci1wcm9ncmVzcz4KICAgIDwvZGl2PgoKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzbmFwc11dIj4KICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLW1hcmtlcnMiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbbWFya2Vyc11dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXIiPjwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICA8ZGl2IGlkPSJzbGlkZXJLbm9iIiBjbGFzcz0ic2xpZGVyLWtub2IiIG9uLWRvd249Il9rbm9iZG93biIgb24tdXA9Il9yZXNldEtub2IiIG9uLXRyYWNrPSJfb25UcmFjayIgb24tdHJhbnNpdGlvbmVuZD0iX2tub2JUcmFuc2l0aW9uRW5kIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXIta25vYi1pbm5lciIgdmFsdWVcJD0iW1tpbW1lZGlhdGVWYWx1ZV1dIj48L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZWRpdGFibGVdXSI+CiAgICA8cGFwZXItaW5wdXQgaWQ9ImlucHV0IiB0eXBlPSJudW1iZXIiIHN0ZXA9Iltbc3RlcF1dIiBtaW49IltbbWluXV0iIG1heD0iW1ttYXhdXSIgY2xhc3M9InNsaWRlci1pbnB1dCIgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiB2YWx1ZT0iW1tpbW1lZGlhdGVWYWx1ZV1dIiBvbi1jaGFuZ2U9Il9jaGFuZ2VWYWx1ZSIgb24ta2V5ZG93bj0iX2lucHV0S2V5RG93biIgbm8tbGFiZWwtZmxvYXQ+CiAgICA8L3BhcGVyLWlucHV0PgogIDwvdGVtcGxhdGU+CmA7QTB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6QTB0LGlzOiJwYXBlci1zbGlkZXIiLGJlaGF2aW9yczpbT28sRWgsangsTDldLHByb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowfSxzbmFwczp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0scGluOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxzZWNvbmRhcnlQcm9ncmVzczp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZWNvbmRhcnlQcm9ncmVzc0NoYW5nZWQifSxlZGl0YWJsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbW1lZGlhdGVWYWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWFkT25seTohMCxub3RpZnk6ITB9LG1heE1hcmtlcnM6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxleHBhbmQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWFkT25seTohMH0saWdub3JlQmFyVG91Y2g6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZHJhZ2dpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWFkT25seTohMCxub3RpZnk6ITB9LHRyYW5zaXRpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWFkT25seTohMH0sbWFya2Vyczp7dHlwZTpBcnJheSxyZWFkT25seTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LG9ic2VydmVyczpbIl91cGRhdGVLbm9iKHZhbHVlLCBtaW4sIG1heCwgc25hcHMsIHN0ZXApIiwiX3ZhbHVlQ2hhbmdlZCh2YWx1ZSkiLCJfaW1tZWRpYXRlVmFsdWVDaGFuZ2VkKGltbWVkaWF0ZVZhbHVlKSIsIl91cGRhdGVNYXJrZXJzKG1heE1hcmtlcnMsIG1pbiwgbWF4LCBzbmFwcykiXSxob3N0QXR0cmlidXRlczp7cm9sZToic2xpZGVyIix0YWJpbmRleDowfSxrZXlCaW5kaW5nczp7bGVmdDoiX2xlZnRLZXkiLHJpZ2h0OiJfcmlnaHRLZXkiLCJkb3duIHBhZ2Vkb3duIGhvbWUiOiJfZGVjcmVtZW50S2V5IiwidXAgcGFnZXVwIGVuZCI6Il9pbmNyZW1lbnRLZXkifSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuaWdub3JlQmFyVG91Y2gmJmRfKHRoaXMuJC5zbGlkZXJCYXIsImF1dG8iKX0saW5jcmVtZW50OmZ1bmN0aW9uKCl7dGhpcy52YWx1ZT10aGlzLl9jbGFtcFZhbHVlKHRoaXMudmFsdWUrdGhpcy5zdGVwKX0sZGVjcmVtZW50OmZ1bmN0aW9uKCl7dGhpcy52YWx1ZT10aGlzLl9jbGFtcFZhbHVlKHRoaXMudmFsdWUtdGhpcy5zdGVwKX0sX3VwZGF0ZUtub2I6ZnVuY3Rpb24oZSx0LHIsbixpKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsdCksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLHIpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93IixlKSx0aGlzLl9wb3NpdGlvbktub2IodGhpcy5fY2FsY1JhdGlvKGUpKjEwMCl9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoInZhbHVlLWNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbW1lZGlhdGVWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmRyYWdnaW5nP3RoaXMuZmlyZSgiaW1tZWRpYXRlLXZhbHVlLWNoYW5nZSIse2NvbXBvc2VkOiEwfSk6dGhpcy52YWx1ZT10aGlzLmltbWVkaWF0ZVZhbHVlfSxfc2Vjb25kYXJ5UHJvZ3Jlc3NDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5zZWNvbmRhcnlQcm9ncmVzcz10aGlzLl9jbGFtcFZhbHVlKHRoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3MpfSxfZXhwYW5kS25vYjpmdW5jdGlvbigpe3RoaXMuX3NldEV4cGFuZCghMCl9LF9yZXNldEtub2I6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbERlYm91bmNlcigiZXhwYW5kS25vYiIpLHRoaXMuX3NldEV4cGFuZCghMSl9LF9wb3NpdGlvbktub2I6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0SW1tZWRpYXRlVmFsdWUodGhpcy5fY2FsY1N0ZXAodGhpcy5fY2FsY0tub2JQb3NpdGlvbihlKSkpLHRoaXMuX3NldFJhdGlvKHRoaXMuX2NhbGNSYXRpbyh0aGlzLmltbWVkaWF0ZVZhbHVlKSoxMDApLHRoaXMuJC5zbGlkZXJLbm9iLnN0eWxlLmxlZnQ9dGhpcy5yYXRpbysiJSIsdGhpcy5kcmFnZ2luZyYmKHRoaXMuX2tub2JzdGFydHg9dGhpcy5yYXRpbyp0aGlzLl93LzEwMCx0aGlzLnRyYW5zbGF0ZTNkKDAsMCwwLHRoaXMuJC5zbGlkZXJLbm9iKSl9LF9jYWxjS25vYlBvc2l0aW9uOmZ1bmN0aW9uKGUpe3JldHVybih0aGlzLm1heC10aGlzLm1pbikqZS8xMDArdGhpcy5taW59LF9vblRyYWNrOmZ1bmN0aW9uKGUpe3N3aXRjaChlLnN0b3BQcm9wYWdhdGlvbigpLGUuZGV0YWlsLnN0YXRlKXtjYXNlInN0YXJ0Ijp0aGlzLl90cmFja1N0YXJ0KGUpO2JyZWFrO2Nhc2UidHJhY2siOnRoaXMuX3RyYWNrWChlKTticmVhaztjYXNlImVuZCI6dGhpcy5fdHJhY2tFbmQoKTticmVha319LF90cmFja1N0YXJ0OmZ1bmN0aW9uKGUpe3RoaXMuX3NldFRyYW5zaXRpbmcoITEpLHRoaXMuX3c9dGhpcy4kLnNsaWRlckJhci5vZmZzZXRXaWR0aCx0aGlzLl94PXRoaXMucmF0aW8qdGhpcy5fdy8xMDAsdGhpcy5fc3RhcnR4PXRoaXMuX3gsdGhpcy5fa25vYnN0YXJ0eD10aGlzLl9zdGFydHgsdGhpcy5fbWlueD0tdGhpcy5fc3RhcnR4LHRoaXMuX21heHg9dGhpcy5fdy10aGlzLl9zdGFydHgsdGhpcy4kLnNsaWRlcktub2IuY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKSx0aGlzLl9zZXREcmFnZ2luZyghMCl9LF90cmFja1g6ZnVuY3Rpb24oZSl7dGhpcy5kcmFnZ2luZ3x8dGhpcy5fdHJhY2tTdGFydChlKTt2YXIgdD10aGlzLl9pc1JUTD8tMToxLHI9TWF0aC5taW4odGhpcy5fbWF4eCxNYXRoLm1heCh0aGlzLl9taW54LGUuZGV0YWlsLmR4KnQpKTt0aGlzLl94PXRoaXMuX3N0YXJ0eCtyO3ZhciBuPXRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24odGhpcy5feC90aGlzLl93KjEwMCkpO3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKG4pO3ZhciBpPXRoaXMuX2NhbGNSYXRpbyh0aGlzLmltbWVkaWF0ZVZhbHVlKSp0aGlzLl93LXRoaXMuX2tub2JzdGFydHg7dGhpcy50cmFuc2xhdGUzZChpKyJweCIsMCwwLHRoaXMuJC5zbGlkZXJLbm9iKX0sX3RyYWNrRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kLnNsaWRlcktub2Iuc3R5bGU7dGhpcy4kLnNsaWRlcktub2IuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKSx0aGlzLl9zZXREcmFnZ2luZyghMSksdGhpcy5fcmVzZXRLbm9iKCksdGhpcy52YWx1ZT10aGlzLmltbWVkaWF0ZVZhbHVlLGUudHJhbnNmb3JtPWUud2Via2l0VHJhbnNmb3JtPSIiLHRoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0sX2tub2Jkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX2V4cGFuZEtub2IoKSxlLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1cygpfSxfYmFydHJhY2s6ZnVuY3Rpb24oZSl7dGhpcy5fYWxsb3dCYXJFdmVudChlKSYmdGhpcy5fb25UcmFjayhlKX0sX2JhcmNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMuX3c9dGhpcy4kLnNsaWRlckJhci5vZmZzZXRXaWR0aDt2YXIgdD10aGlzLiQuc2xpZGVyQmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9KGUuZGV0YWlsLngtdC5sZWZ0KS90aGlzLl93KjEwMDt0aGlzLl9pc1JUTCYmKHI9MTAwLXIpO3ZhciBuPXRoaXMucmF0aW87dGhpcy5fc2V0VHJhbnNpdGluZyghMCksdGhpcy5fcG9zaXRpb25Lbm9iKHIpLG49PT10aGlzLnJhdGlvJiZ0aGlzLl9zZXRUcmFuc2l0aW5nKCExKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJjaGFuZ2UiLHtjb21wb3NlZDohMH0pfSksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXMoKX0sX2JhcmRvd246ZnVuY3Rpb24oZSl7dGhpcy5fYWxsb3dCYXJFdmVudChlKSYmKHRoaXMuZGVib3VuY2UoImV4cGFuZEtub2IiLHRoaXMuX2V4cGFuZEtub2IsNjApLHRoaXMuX2JhcmNsaWNrKGUpKX0sX2tub2JUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUpe2UudGFyZ2V0PT09dGhpcy4kLnNsaWRlcktub2ImJnRoaXMuX3NldFRyYW5zaXRpbmcoITEpfSxfdXBkYXRlTWFya2VyczpmdW5jdGlvbihlLHQscixuKXtufHx0aGlzLl9zZXRNYXJrZXJzKFtdKTt2YXIgaT1NYXRoLnJvdW5kKChyLXQpL3RoaXMuc3RlcCk7aT5lJiYoaT1lKSwoaTwwfHwhaXNGaW5pdGUoaSkpJiYoaT0wKSx0aGlzLl9zZXRNYXJrZXJzKG5ldyBBcnJheShpKSl9LF9tZXJnZUNsYXNzZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pLmpvaW4oIiAiKX0sX2dldENsYXNzTmFtZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWVyZ2VDbGFzc2VzKHtkaXNhYmxlZDp0aGlzLmRpc2FibGVkLHBpbjp0aGlzLnBpbixzbmFwczp0aGlzLnNuYXBzLHJpbmc6dGhpcy5pbW1lZGlhdGVWYWx1ZTw9dGhpcy5taW4sZXhwYW5kOnRoaXMuZXhwYW5kLGRyYWdnaW5nOnRoaXMuZHJhZ2dpbmcsdHJhbnNpdGluZzp0aGlzLnRyYW5zaXRpbmcsZWRpdGFibGU6dGhpcy5lZGl0YWJsZX0pfSxfYWxsb3dCYXJFdmVudDpmdW5jdGlvbihlKXtyZXR1cm4hdGhpcy5pZ25vcmVCYXJUb3VjaHx8ZS5kZXRhaWwuc291cmNlRXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50fSxnZXQgX2lzUlRMKCl7cmV0dXJuIHRoaXMuX19pc1JUTD09PXZvaWQgMCYmKHRoaXMuX19pc1JUTD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PT0icnRsIiksdGhpcy5fX2lzUlRMfSxfbGVmdEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9pbmNyZW1lbnRLZXkoZSk6dGhpcy5fZGVjcmVtZW50S2V5KGUpfSxfcmlnaHRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5faXNSVEw/dGhpcy5fZGVjcmVtZW50S2V5KGUpOnRoaXMuX2luY3JlbWVudEtleShlKX0sX2luY3JlbWVudEtleTpmdW5jdGlvbihlKXt0aGlzLmRpc2FibGVkfHwoZS5kZXRhaWwua2V5PT09ImVuZCI/dGhpcy52YWx1ZT10aGlzLm1heDp0aGlzLmluY3JlbWVudCgpLHRoaXMuZmlyZSgiY2hhbmdlIiksZS5wcmV2ZW50RGVmYXVsdCgpKX0sX2RlY3JlbWVudEtleTpmdW5jdGlvbihlKXt0aGlzLmRpc2FibGVkfHwoZS5kZXRhaWwua2V5PT09ImhvbWUiP3RoaXMudmFsdWU9dGhpcy5taW46dGhpcy5kZWNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLGUucHJldmVudERlZmF1bHQoKSl9LF9jaGFuZ2VWYWx1ZTpmdW5jdGlvbihlKXt0aGlzLnZhbHVlPWUudGFyZ2V0LnZhbHVlLHRoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0sX2lucHV0S2V5RG93bjpmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JpcHBsZUNvbnRhaW5lcj10aGlzLiQuc2xpZGVyS25vYixmRS5fY3JlYXRlUmlwcGxlLmNhbGwodGhpcyl9LF9mb2N1c2VkQ2hhbmdlZDpmdW5jdGlvbihlKXtlJiZ0aGlzLmVuc3VyZVJpcHBsZSgpLHRoaXMuaGFzUmlwcGxlKCkmJihlP3RoaXMuX3JpcHBsZS5zdHlsZS5kaXNwbGF5PSIiOnRoaXMuX3JpcHBsZS5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLl9yaXBwbGUuaG9sZERvd249ZSl9fSk7dmFyIEVXPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7RVcuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7RVcuaW5uZXJIVE1MPWA8ZG9tLW1vZHVsZSBpZD0icGFwZXItc3Bpbm5lci1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLyoKICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgICAvKiBTVFlMRVMgRk9SIFRIRSBTUElOTkVSICovCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgICAgIC8qCiAgICAgICAqIENvbnN0YW50czoKICAgICAgICogICAgICBBUkNTSVpFICAgICA9IDI3MCBkZWdyZWVzIChhbW91bnQgb2YgY2lyY2xlIHRoZSBhcmMgdGFrZXMgdXApCiAgICAgICAqICAgICAgQVJDVElNRSAgICAgPSAxMzMzbXMgKHRpbWUgaXQgdGFrZXMgdG8gZXhwYW5kIGFuZCBjb250cmFjdCBhcmMpCiAgICAgICAqICAgICAgQVJDU1RBUlRST1QgPSAyMTYgZGVncmVlcyAoaG93IG11Y2ggdGhlIHN0YXJ0IGxvY2F0aW9uIG9mIHRoZSBhcmMKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCByb3RhdGUgZWFjaCB0aW1lLCAyMTYgZ2l2ZXMgdXMgYQogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSBwb2ludGVkIHN0YXIgc2hhcGUgKGl0J3MgMzYwLzUgKiAzKS4KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIDcgcG9pbnRlZCBzdGFyLCB3ZSBtaWdodCBkbwogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYwLzcgKiAzID0gMTU0LjI4NikKICAgICAgICogICAgICBTSFJJTktfVElNRSA9IDQwMG1zCiAgICAgICAqLwoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDI4cHg7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwoKICAgICAgICAvKiAzNjAgKiBBUkNUSU1FIC8gKEFSQ1NUQVJUUk9UICsgKDM2MC1BUkNTSVpFKSkgKi8KICAgICAgICAtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uOiAxNTY4bXM7CgogICAgICAgIC8qIEFSQ1RJTUUgKi8KICAgICAgICAtLXBhcGVyLXNwaW5uZXItZXhwYW5kLWNvbnRyYWN0LWR1cmF0aW9uOiAxMzMzbXM7CgogICAgICAgIC8qIDQgKiBBUkNUSU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWZ1bGwtY3ljbGUtZHVyYXRpb246IDUzMzJtczsKCiAgICAgICAgLyogU0hSSU5LX1RJTUUgKi8KICAgICAgICAtLXBhcGVyLXNwaW5uZXItY29vbGRvd24tZHVyYXRpb246IDQwMG1zOwogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwoKICAgICAgICAvKiBUaGUgc3Bpbm5lciBkb2VzIG5vdCBoYXZlIGFueSBjb250ZW50cyB0aGF0IHdvdWxkIGhhdmUgdG8gYmUKICAgICAgICAgKiBmbGlwcGVkIGlmIHRoZSBkaXJlY3Rpb24gY2hhbmdlcy4gQWx3YXlzIHVzZSBsdHIgc28gdGhhdCB0aGUKICAgICAgICAgKiBzdHlsZSB3b3JrcyBvdXQgY29ycmVjdGx5IGluIGJvdGggY2FzZXMuICovCiAgICAgICAgZGlyZWN0aW9uOiBsdHI7CiAgICAgIH0KCiAgICAgICNzcGlubmVyQ29udGFpbmVyLmFjdGl2ZSB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGNvbnRhaW5lci1yb3RhdGUgewogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHsKICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykgfQogICAgICB9CgogICAgICAuc3Bpbm5lci1sYXllciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItMSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMS1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNTAwKSk7CiAgICAgIH0KCiAgICAgIC5sYXllci0yIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci0yLWNvbG9yLCB2YXIoLS1nb29nbGUtcmVkLTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItMyB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMy1jb2xvciwgdmFyKC0tZ29vZ2xlLXllbGxvdy01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTQgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTQtY29sb3IsIHZhcigtLWdvb2dsZS1ncmVlbi01MDApKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIElNUE9SVEFOVCBOT1RFIEFCT1VUIENTUyBBTklNQVRJT04gUFJPUEVSVElFUyAoa2VhbnVsZWUpOgogICAgICAgKgogICAgICAgKiBpT1MgU2FmYXJpICh0ZXN0ZWQgb24gaU9TIDguMSkgZG9lcyBub3QgaGFuZGxlIGFuaW1hdGlvbi1kZWxheSB2ZXJ5IHdlbGwgLSBpdCBkb2Vzbid0CiAgICAgICAqIGd1YXJhbnRlZSB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCBzdGFydCBfZXhhY3RseV8gYWZ0ZXIgdGhhdCB2YWx1ZS4gU28gd2UgYXZvaWQgdXNpbmcKICAgICAgICogYW5pbWF0aW9uLWRlbGF5IGFuZCBpbnN0ZWFkIHNldCBjdXN0b20ga2V5ZnJhbWVzIGZvciBlYWNoIGNvbG9yIChhcyBsYXllci0ydW5kYW50IGFzIGl0CiAgICAgICAqIHNlZW1zKS4KICAgICAgICovCiAgICAgIC5hY3RpdmUgLnNwaW5uZXItbGF5ZXIgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uKTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGU7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWZ1bGwtY3ljbGUtZHVyYXRpb24pOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyLmxheWVyLTEgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMS1mYWRlLWluLW91dDsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0xLWZhZGUtaW4tb3V0OwogICAgICB9CgogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyLmxheWVyLTIgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0yLWZhZGUtaW4tb3V0OwogICAgICB9CgogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyLmxheWVyLTMgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMy1mYWRlLWluLW91dDsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0zLWZhZGUtaW4tb3V0OwogICAgICB9CgogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyLmxheWVyLTQgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItNC1mYWRlLWluLW91dDsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci00LWZhZGUtaW4tb3V0OwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmlsbC11bmZpbGwtcm90YXRlIHsKICAgICAgICAxMi41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKSB9IC8qIDAuNSAqIEFSQ1NJWkUgKi8KICAgICAgICAyNSUgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSB9IC8qIDEgICAqIEFSQ1NJWkUgKi8KICAgICAgICAzNy41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDA1ZGVnKSB9IC8qIDEuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA1MCUgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNTQwZGVnKSB9IC8qIDIgICAqIEFSQ1NJWkUgKi8KICAgICAgICA2Mi41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKSB9IC8qIDIuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA3NSUgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoODEwZGVnKSB9IC8qIDMgICAqIEFSQ1NJWkUgKi8KICAgICAgICA4Ny41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTQ1ZGVnKSB9IC8qIDMuNSAqIEFSQ1NJWkUgKi8KICAgICAgICB0byAgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZykgfSAvKiA0ICAgKiBBUkNTSVpFICovCiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZmlsbC11bmZpbGwtcm90YXRlIHsKICAgICAgICAxMi41JSB7IHRyYW5zZm9ybTogcm90YXRlKDEzNWRlZykgfSAvKiAwLjUgKiBBUkNTSVpFICovCiAgICAgICAgMjUlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpIH0gLyogMSAgICogQVJDU0laRSAqLwogICAgICAgIDM3LjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoNDA1ZGVnKSB9IC8qIDEuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA1MCUgICB7IHRyYW5zZm9ybTogcm90YXRlKDU0MGRlZykgfSAvKiAyICAgKiBBUkNTSVpFICovCiAgICAgICAgNjIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg2NzVkZWcpIH0gLyogMi41ICogQVJDU0laRSAqLwogICAgICAgIDc1JSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoODEwZGVnKSB9IC8qIDMgICAqIEFSQ1NJWkUgKi8KICAgICAgICA4Ny41JSB7IHRyYW5zZm9ybTogcm90YXRlKDk0NWRlZykgfSAvKiAzLjUgKiBBUkNTSVpFICovCiAgICAgICAgdG8gICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMDgwZGVnKSB9IC8qIDQgICAqIEFSQ1NJWkUgKi8KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTEtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgMjYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgODklIHsgb3BhY2l0eTogMCB9CiAgICAgICAgOTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAxIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci0xLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMSB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0yLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDE1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDUxJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMi1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAxNSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMy1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA0MCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA3NiUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxheWVyLTMtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTQtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNjUlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgOTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci00LWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDY1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlciB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogNTAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUGF0Y2ggdGhlIGdhcCB0aGF0IGFwcGVhciBiZXR3ZWVuIHRoZSB0d28gYWRqYWNlbnQgZGl2LmNpcmNsZS1jbGlwcGVyIHdoaWxlIHRoZQogICAgICAgKiBzcGlubmVyIGlzIHJvdGF0aW5nIChhcHBlYXJzIG9uIENocm9tZSA1MCwgU2FmYXJpIDkuMS4xLCBhbmQgRWRnZSkuCiAgICAgICAqLwogICAgICAuc3Bpbm5lci1sYXllcjo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIGxlZnQ6IDQ1JTsKICAgICAgICB3aWR0aDogMTAlOwogICAgICAgIGJvcmRlci10b3Atc3R5bGU6IHNvbGlkOwogICAgICB9CgogICAgICAuc3Bpbm5lci1sYXllcjo6YWZ0ZXIsCiAgICAgIC5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm9yZGVyLXdpZHRoOiB2YXIoLS1wYXBlci1zcGlubmVyLXN0cm9rZS13aWR0aCwgM3B4KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgd2lkdGg6IDIwMCU7CiAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIubGVmdCAuY2lyY2xlIHsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTI5ZGVnKTsKICAgICAgfQoKICAgICAgLmNpcmNsZS1jbGlwcGVyLnJpZ2h0IC5jaXJjbGUgewogICAgICAgIGxlZnQ6IC0xMDAlOwogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEyOWRlZyk7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTEyOWRlZyk7CiAgICAgIH0KCiAgICAgIC5hY3RpdmUgLmdhcC1wYXRjaDo6YWZ0ZXIsCiAgICAgIC5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyIC5jaXJjbGUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbik7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZXhwYW5kLWNvbnRyYWN0LWR1cmF0aW9uKTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIC5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogbGVmdC1zcGluOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBsZWZ0LXNwaW47CiAgICAgIH0KCiAgICAgIC5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyLnJpZ2h0IC5jaXJjbGUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IHJpZ2h0LXNwaW47CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHJpZ2h0LXNwaW47CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsZWZ0LXNwaW4gewogICAgICAgIDAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC01ZGVnKSB9CiAgICAgICAgdG8geyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxlZnQtc3BpbiB7CiAgICAgICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgICA1MCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyByaWdodC1zcGluIHsKICAgICAgICAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICAgIDUwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNWRlZykgfQogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcmlnaHQtc3BpbiB7CiAgICAgICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoNWRlZykgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lci5jb29sZG93biB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgdmFyKC0tcGFwZXItc3Bpbm5lci1jb29sZG93bi1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSB2YXIoLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbikgbGluZWFyIGluZmluaXRlLCBmYWRlLW91dCB2YXIoLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uKSBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZhZGUtb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChFVy5jb250ZW50KTt2YXIgTjk9e3Byb3BlcnRpZXM6e2FjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX19hY3RpdmVDaGFuZ2VkIn0sYWx0Ont0eXBlOlN0cmluZyx2YWx1ZToibG9hZGluZyIsb2JzZXJ2ZXI6Il9fYWx0Q2hhbmdlZCJ9LF9fY29vbGluZ0Rvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LF9fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXM6ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZXx8dD8iYWN0aXZlIjoiIix0PyJjb29sZG93biI6IiJdLmpvaW4oIiAiKX0sX19hY3RpdmVDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dGhpcy5fX3NldEFyaWFIaWRkZW4oIWUpLHRoaXMuX19jb29saW5nRG93bj0hZSYmdH0sX19hbHRDaGFuZ2VkOmZ1bmN0aW9uKGUpe2U9PT0ibG9hZGluZyI/dGhpcy5hbHQ9dGhpcy5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8ZToodGhpcy5fX3NldEFyaWFIaWRkZW4oZT09PSIiKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsZSkpfSxfX3NldEFyaWFIaWRkZW46ZnVuY3Rpb24oZSl7dmFyIHQ9ImFyaWEtaGlkZGVuIjtlP3RoaXMuc2V0QXR0cmlidXRlKHQsInRydWUiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX0sX19yZXNldDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlPSExLHRoaXMuX19jb29saW5nRG93bj0hMX19O3ZhciBQMHQ9UWAKICA8c3R5bGUgaW5jbHVkZT0icGFwZXItc3Bpbm5lci1zdHlsZXMiPjwvc3R5bGU+CgogIDxkaXYgaWQ9InNwaW5uZXJDb250YWluZXIiIGNsYXNzLW5hbWU9IltbX19jb21wdXRlQ29udGFpbmVyQ2xhc3NlcyhhY3RpdmUsIF9fY29vbGluZ0Rvd24pXV0iIG9uLWFuaW1hdGlvbmVuZD0iX19yZXNldCIgb24td2Via2l0LWFuaW1hdGlvbi1lbmQ9Il9fcmVzZXQiPgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0xIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMiI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIGxheWVyLTMiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci00Ij4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgO1AwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOlAwdCxpczoicGFwZXItc3Bpbm5lciIsYmVoYXZpb3JzOltOOV19KTt2YXIgSTB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLXNwaW5uZXItc3R5bGVzIj48L3N0eWxlPgoKICA8ZGl2IGlkPSJzcGlubmVyQ29udGFpbmVyIiBjbGFzcy1uYW1lPSJbW19fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXMoYWN0aXZlLCBfX2Nvb2xpbmdEb3duKV1dIiBvbi1hbmltYXRpb25lbmQ9Il9fcmVzZXQiIG9uLXdlYmtpdC1hbmltYXRpb24tZW5kPSJfX3Jlc2V0Ij4KICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CmA7STB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6STB0LGlzOiJwYXBlci1zcGlubmVyLWxpdGUiLGJlaGF2aW9yczpbTjldfSk7dmFyIFViZT1RYDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9InBhcGVyLXRhYnMiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImNoZXZyb24tbGVmdCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hldnJvbi1yaWdodCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFViZS5jb250ZW50KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYjsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2xpbmtdKSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLnRhYi1jb250ZW50IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjFzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSk7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudDsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdCguaXJvbi1zZWxlY3RlZCkpID4gLnRhYi1jb250ZW50IHsKICAgICAgICBvcGFjaXR5OiAwLjg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYi1jb250ZW50LXVuc2VsZWN0ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgLnRhYi1jb250ZW50IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYi1jb250ZW50LWZvY3VzZWQ7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRhYi1pbmssIHZhcigtLXBhcGVyLXllbGxvdy1hMTAwKSk7CiAgICAgIH0KCiAgICAgIC50YWItY29udGVudCA+IDo6c2xvdHRlZChhKSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKCiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KICAgICAgPHNsb3Q+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLXRhYiIsYmVoYXZpb3JzOltEaSxTaCxzdV0scHJvcGVydGllczp7bGluazp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJ0YWIifSxsaXN0ZW5lcnM6e2Rvd246Il91cGRhdGVOb2luayIsdGFwOiJfb25UYXAifSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZU5vaW5rKCl9LGdldCBfcGFyZW50Tm9pbmsoKXt2YXIgZT16dCh0aGlzKS5wYXJlbnROb2RlO3JldHVybiEhZSYmISFlLm5vaW5rfSxfdXBkYXRlTm9pbms6ZnVuY3Rpb24oKXt0aGlzLm5vaW5rPSEhdGhpcy5ub2lua3x8ISF0aGlzLl9wYXJlbnROb2lua30sX29uVGFwOmZ1bmN0aW9uKGUpe2lmKHRoaXMubGluayl7dmFyIHQ9dGhpcy5xdWVyeUVmZmVjdGl2ZUNoaWxkcmVuKCJhIik7aWYoIXR8fGUudGFyZ2V0PT09dClyZXR1cm47dC5jbGljaygpfX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKCiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKCiAgICAgICAgLyogTk9URTogQm90aCB2YWx1ZXMgYXJlIG5lZWRlZCwgc2luY2Ugc29tZSBwaG9uZXMgcmVxdWlyZSB0aGUgdmFsdWUgdG8gYmUgXGB0cmFuc3BhcmVudFxgLiAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOwogICAgICB9CgogICAgICAjdGFic0NvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLW1vei1mbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIC1tcy1mbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250ZW50OwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudDpub3QoLnNjcm9sbGFibGUpLAogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgbWluLXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyID4gOjpzbG90dGVkKCopIHsKICAgICAgICAvKiBJRSAtIHByZXZlbnQgdGFicyBmcm9tIGNvbXByZXNzaW5nIHdoZW4gdGhleSBzaG91bGQgc2Nyb2xsLiAqLwogICAgICAgIC1tcy1mbGV4OiAxIDAgYXV0bzsKICAgICAgICAtd2Via2l0LWZsZXg6IDEgMCBhdXRvOwogICAgICAgIGZsZXg6IDEgMCBhdXRvOwogICAgICB9CgogICAgICAuaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAubm90LXZpc2libGUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyLWNvbG9yLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXI7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuYWxpZ24tYm90dG9tIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiBhdXRvOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmV4cGFuZCB7CiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xNXM7CiAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSk7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuY29udHJhY3QgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMThzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCA+IDo6c2xvdHRlZCg6bm90KCNzZWxlY3Rpb25CYXIpKSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJwYXBlci10YWJzOmNoZXZyb24tbGVmdCIgY2xhc3MkPSJbW19jb21wdXRlU2Nyb2xsQnV0dG9uQ2xhc3MoX2xlZnRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vbkxlZnRTY3JvbGxCdXR0b25Eb3duIiB0YWJpbmRleD0iLTEiPjwvcGFwZXItaWNvbi1idXR0b24+CgogICAgPGRpdiBpZD0idGFic0NvbnRhaW5lciIgb24tdHJhY2s9Il9zY3JvbGwiIG9uLWRvd249Il9kb3duIj4KICAgICAgPGRpdiBpZD0idGFic0NvbnRlbnQiIGNsYXNzJD0iW1tfY29tcHV0ZVRhYnNDb250ZW50Q2xhc3Moc2Nyb2xsYWJsZSwgZml0Q29udGFpbmVyKV1dIj4KICAgICAgICA8ZGl2IGlkPSJzZWxlY3Rpb25CYXIiIGNsYXNzJD0iW1tfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzKG5vQmFyLCBhbGlnbkJvdHRvbSldXSIgb24tdHJhbnNpdGlvbmVuZD0iX29uQmFyVHJhbnNpdGlvbkVuZCI+PC9kaXY+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJwYXBlci10YWJzOmNoZXZyb24tcmlnaHQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9yaWdodEhpZGRlbiwgc2Nyb2xsYWJsZSwgaGlkZVNjcm9sbEJ1dHRvbnMpXV0iIG9uLXVwPSJfb25TY3JvbGxCdXR0b25VcCIgb24tZG93bj0iX29uUmlnaHRTY3JvbGxCdXR0b25Eb3duIiB0YWJpbmRleD0iLTEiPjwvcGFwZXItaWNvbi1idXR0b24+CmAsaXM6InBhcGVyLXRhYnMiLGJlaGF2aW9yczpbSnMsUjldLHByb3BlcnRpZXM6e25vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ub2lua0NoYW5nZWQifSxub0Jhcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub1NsaWRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZml0Q29udGFpbmVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRpc2FibGVEcmFnOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhpZGVTY3JvbGxCdXR0b25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsaWduQm90dG9tOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGFibGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJwYXBlci10YWIifSxhdXRvc2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF1dG9zZWxlY3REZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3N0ZXA6e3R5cGU6TnVtYmVyLHZhbHVlOjEwfSxfaG9sZERlbGF5Ont0eXBlOk51bWJlcix2YWx1ZToxfSxfbGVmdEhpZGRlbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfcmlnaHRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3ByZXZpb3VzVGFiOnt0eXBlOk9iamVjdH19LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJ0YWJsaXN0In0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25UYWJTaXppbmdDaGFuZ2VkIiwiaXJvbi1pdGVtcy1jaGFuZ2VkIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24tc2VsZWN0IjoiX29uSXJvblNlbGVjdCIsImlyb24tZGVzZWxlY3QiOiJfb25Jcm9uRGVzZWxlY3QifSxrZXlCaW5kaW5nczp7ImxlZnQ6a2V5dXAgcmlnaHQ6a2V5dXAiOiJfb25BcnJvd0tleXVwIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2hvbGRKb2I9bnVsbCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDAsdGhpcy5fYmluZERlbGF5ZWRBY3RpdmF0aW9uSGFuZGxlcj10aGlzLl9kZWxheWVkQWN0aXZhdGlvbkhhbmRsZXIuYmluZCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX29uQmx1ckNhcHR1cmUuYmluZCh0aGlzKSwhMCl9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5zZXRTY3JvbGxEaXJlY3Rpb24oInkiLHRoaXMuJC50YWJzQ29udGFpbmVyKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbigpfSxfbm9pbmtDaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PXp0KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoInBhcGVyLXRhYiIpO3QuZm9yRWFjaChlP3RoaXMuX3NldE5vaW5rQXR0cmlidXRlOnRoaXMuX3JlbW92ZU5vaW5rQXR0cmlidXRlKX0sX3NldE5vaW5rQXR0cmlidXRlOmZ1bmN0aW9uKGUpe2Uuc2V0QXR0cmlidXRlKCJub2luayIsIiIpfSxfcmVtb3ZlTm9pbmtBdHRyaWJ1dGU6ZnVuY3Rpb24oZSl7ZS5yZW1vdmVBdHRyaWJ1dGUoIm5vaW5rIil9LF9jb21wdXRlU2Nyb2xsQnV0dG9uQ2xhc3M6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiF0fHxyPyJoaWRkZW4iOmU/Im5vdC12aXNpYmxlIjoiIn0sX2NvbXB1dGVUYWJzQ29udGVudENsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/InNjcm9sbGFibGUiKyh0PyIgZml0LWNvbnRhaW5lciI6IiIpOiIgZml0LWNvbnRhaW5lciJ9LF9jb21wdXRlU2VsZWN0aW9uQmFyQ2xhc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT8iaGlkZGVuIjp0PyJhbGlnbi1ib3R0b20iOiIifSxfb25UYWJTaXppbmdDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kZWJvdW5jZSgiX29uVGFiU2l6aW5nQ2hhbmdlZCIsZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGwoKSx0aGlzLl90YWJDaGFuZ2VkKHRoaXMuc2VsZWN0ZWRJdGVtKX0sMTApfSxfb25Jcm9uU2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuX3RhYkNoYW5nZWQoZS5kZXRhaWwuaXRlbSx0aGlzLl9wcmV2aW91c1RhYiksdGhpcy5fcHJldmlvdXNUYWI9ZS5kZXRhaWwuaXRlbSx0aGlzLmNhbmNlbERlYm91bmNlcigidGFiLWNoYW5nZWQiKX0sX29uSXJvbkRlc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuZGVib3VuY2UoInRhYi1jaGFuZ2VkIixmdW5jdGlvbigpe3RoaXMuX3RhYkNoYW5nZWQobnVsbCx0aGlzLl9wcmV2aW91c1RhYiksdGhpcy5fcHJldmlvdXNUYWI9bnVsbH0sMSl9LF9hY3RpdmF0ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbigpLF9fLl9hY3RpdmF0ZUhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfc2NoZWR1bGVBY3RpdmF0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPWUsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0PXRoaXMuYXN5bmModGhpcy5fYmluZERlbGF5ZWRBY3RpdmF0aW9uSGFuZGxlcix0KX0sX2RlbGF5ZWRBY3RpdmF0aW9uSGFuZGxlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbTt0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDAsZS5maXJlKHRoaXMuYWN0aXZhdGVFdmVudCxudWxsLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITB9KX0sX2NhbmNlbFBlbmRpbmdBY3RpdmF0aW9uOmZ1bmN0aW9uKCl7dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0IT09dm9pZCAwJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQpLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT12b2lkIDAsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0PXZvaWQgMCl9LF9vbkFycm93S2V5dXA6ZnVuY3Rpb24oZSl7dGhpcy5hdXRvc2VsZWN0JiZ0aGlzLl9zY2hlZHVsZUFjdGl2YXRpb24odGhpcy5mb2N1c2VkSXRlbSx0aGlzLmF1dG9zZWxlY3REZWxheSl9LF9vbkJsdXJDYXB0dXJlOmZ1bmN0aW9uKGUpe2UudGFyZ2V0PT09dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtJiZ0aGlzLl9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbigpfSxnZXQgX3RhYkNvbnRhaW5lclNjcm9sbFNpemUoKXtyZXR1cm4gTWF0aC5tYXgoMCx0aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxXaWR0aC10aGlzLiQudGFic0NvbnRhaW5lci5vZmZzZXRXaWR0aCl9LF9zY3JvbGw6ZnVuY3Rpb24oZSx0KXtpZighIXRoaXMuc2Nyb2xsYWJsZSl7dmFyIHI9dCYmLXQuZGR4fHwwO3RoaXMuX2FmZmVjdFNjcm9sbChyKX19LF9kb3duOmZ1bmN0aW9uKGUpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMpLHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPW51bGwpfSwxKX0sX2FmZmVjdFNjcm9sbDpmdW5jdGlvbihlKXt0aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0Kz1lO3ZhciB0PXRoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQ7dGhpcy5fbGVmdEhpZGRlbj10PT09MCx0aGlzLl9yaWdodEhpZGRlbj10PT09dGhpcy5fdGFiQ29udGFpbmVyU2Nyb2xsU2l6ZX0sX29uTGVmdFNjcm9sbEJ1dHRvbkRvd246ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxUb0xlZnQoKSx0aGlzLl9ob2xkSm9iPXNldEludGVydmFsKHRoaXMuX3Njcm9sbFRvTGVmdC5iaW5kKHRoaXMpLHRoaXMuX2hvbGREZWxheSl9LF9vblJpZ2h0U2Nyb2xsQnV0dG9uRG93bjpmdW5jdGlvbigpe3RoaXMuX3Njcm9sbFRvUmlnaHQoKSx0aGlzLl9ob2xkSm9iPXNldEludGVydmFsKHRoaXMuX3Njcm9sbFRvUmlnaHQuYmluZCh0aGlzKSx0aGlzLl9ob2xkRGVsYXkpfSxfb25TY3JvbGxCdXR0b25VcDpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwodGhpcy5faG9sZEpvYiksdGhpcy5faG9sZEpvYj1udWxsfSxfc2Nyb2xsVG9MZWZ0OmZ1bmN0aW9uKCl7dGhpcy5fYWZmZWN0U2Nyb2xsKC10aGlzLl9zdGVwKX0sX3Njcm9sbFRvUmlnaHQ6ZnVuY3Rpb24oKXt0aGlzLl9hZmZlY3RTY3JvbGwodGhpcy5fc3RlcCl9LF90YWJDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7aWYoIWUpe3RoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiZXhwYW5kIiksdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJjb250cmFjdCIpLHRoaXMuX3Bvc2l0aW9uQmFyKDAsMCk7cmV0dXJufXZhciByPXRoaXMuJC50YWJzQ29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGgsaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89aS5sZWZ0LXIubGVmdDtpZih0aGlzLl9wb3M9e3dpZHRoOnRoaXMuX2NhbGNQZXJjZW50KGkud2lkdGgsbiksbGVmdDp0aGlzLl9jYWxjUGVyY2VudChvLG4pfSx0aGlzLm5vU2xpZGV8fHQ9PW51bGwpe3RoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiZXhwYW5kIiksdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJjb250cmFjdCIpLHRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX3Bvcy53aWR0aCx0aGlzLl9wb3MubGVmdCk7cmV0dXJufXZhciBhPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz10aGlzLml0ZW1zLmluZGV4T2YodCksbD10aGlzLml0ZW1zLmluZGV4T2YoZSksYz01O3RoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LmFkZCgiZXhwYW5kIik7dmFyIHU9czxsLGg9dGhpcy5faXNSVEw7aCYmKHU9IXUpLHU/dGhpcy5fcG9zaXRpb25CYXIodGhpcy5fY2FsY1BlcmNlbnQoaS5sZWZ0K2kud2lkdGgtYS5sZWZ0LG4pLWMsdGhpcy5fbGVmdCk6dGhpcy5fcG9zaXRpb25CYXIodGhpcy5fY2FsY1BlcmNlbnQoYS5sZWZ0K2Eud2lkdGgtaS5sZWZ0LG4pLWMsdGhpcy5fY2FsY1BlcmNlbnQobyxuKStjKSx0aGlzLnNjcm9sbGFibGUmJnRoaXMuX3Njcm9sbFRvU2VsZWN0ZWRJZk5lZWRlZChpLndpZHRoLG8pfSxfc2Nyb2xsVG9TZWxlY3RlZElmTmVlZGVkOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dC10aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0O3I8MD90aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0Kz1yOihyKz1lLXRoaXMuJC50YWJzQ29udGFpbmVyLm9mZnNldFdpZHRoLHI+MCYmKHRoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQrPXIpKX0sX2NhbGNQZXJjZW50OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEwMCplL3R9LF9wb3NpdGlvbkJhcjpmdW5jdGlvbihlLHQpe2U9ZXx8MCx0PXR8fDAsdGhpcy5fd2lkdGg9ZSx0aGlzLl9sZWZ0PXQsdGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZVgoIit0KyIlKSBzY2FsZVgoIitlLzEwMCsiKSIsdGhpcy4kLnNlbGVjdGlvbkJhcil9LF9vbkJhclRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3Q7dC5jb250YWlucygiZXhwYW5kIik/KHQucmVtb3ZlKCJleHBhbmQiKSx0LmFkZCgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9wb3Mud2lkdGgsdGhpcy5fcG9zLmxlZnQpKTp0LmNvbnRhaW5zKCJjb250cmFjdCIpJiZ0LnJlbW92ZSgiY29udHJhY3QiKX19KTt2YXIgSng9bnVsbDtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9hc3QtYmFja2dyb3VuZC1jb2xvciwgIzMyMzIzMik7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvYXN0LWNvbG9yLCAjZjFmMWYxKTsKICAgICAgICBtaW4taGVpZ2h0OiA0OHB4OwogICAgICAgIG1pbi13aWR0aDogMjg4cHg7CiAgICAgICAgcGFkZGluZzogMTZweCAyNHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI2KTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgbWFyZ2luOiAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MsIG9wYWNpdHkgMC4zczsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMHB4KTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwcHgpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jYXBzdWxlKSB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMjRweDsKICAgICAgfQoKICAgICAgOmhvc3QoLmZpdC1ib3R0b20pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC5wYXBlci10b2FzdC1vcGVuKSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzcGFuIGlkPSJsYWJlbCI+e3t0ZXh0fX08L3NwYW4+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLXRvYXN0IixiZWhhdmlvcnM6W0t4XSxwcm9wZXJ0aWVzOntmaXRJbnRvOnt0eXBlOk9iamVjdCx2YWx1ZTp3aW5kb3csb2JzZXJ2ZXI6Il9vbkZpdEludG9DaGFuZ2VkIn0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToibGVmdCJ9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxkdXJhdGlvbjp7dHlwZTpOdW1iZXIsdmFsdWU6M2UzfSx0ZXh0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sbm9DYW5jZWxPbk91dHNpZGVDbGljazp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxub0F1dG9Gb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfX0sbGlzdGVuZXJzOnt0cmFuc2l0aW9uZW5kOiJfX29uVHJhbnNpdGlvbkVuZCJ9LGdldCB2aXNpYmxlKCl7cmV0dXJuIERhLl93YXJuKCJgdmlzaWJsZWAgaXMgZGVwcmVjYXRlZCwgdXNlIGBvcGVuZWRgIGluc3RlYWQiKSx0aGlzLm9wZW5lZH0sZ2V0IF9jYW5BdXRvQ2xvc2UoKXtyZXR1cm4gdGhpcy5kdXJhdGlvbj4wJiZ0aGlzLmR1cmF0aW9uIT09MS8wfSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fYXV0b0Nsb3NlPW51bGwsZWMucmVxdWVzdEF2YWlsYWJpbGl0eSgpfSxzaG93OmZ1bmN0aW9uKGUpe3R5cGVvZiBlPT0ic3RyaW5nIiYmKGU9e3RleHQ6ZX0pO2Zvcih2YXIgdCBpbiBlKXQuaW5kZXhPZigiXyIpPT09MD9EYS5fd2FybignVGhlIHByb3BlcnR5ICInK3QrJyIgaXMgcHJpdmF0ZSBhbmQgd2FzIG5vdCBzZXQuJyk6dCBpbiB0aGlzP3RoaXNbdF09ZVt0XTpEYS5fd2FybignVGhlIHByb3BlcnR5ICInK3QrJyIgaXMgbm90IHZhbGlkLicpO3RoaXMub3BlbigpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZSgpfSxfX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXtlJiZlLnRhcmdldD09PXRoaXMmJmUucHJvcGVydHlOYW1lPT09Im9wYWNpdHkiJiYodGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCkpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX2F1dG9DbG9zZSE9PW51bGwmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2F1dG9DbG9zZSksdGhpcy5fYXV0b0Nsb3NlPW51bGwpLHRoaXMub3BlbmVkPyhKeCYmSnghPT10aGlzJiZKeC5jbG9zZSgpLEp4PXRoaXMsdGhpcy5maXJlKCJpcm9uLWFubm91bmNlIix7dGV4dDp0aGlzLnRleHR9KSx0aGlzLl9jYW5BdXRvQ2xvc2UmJih0aGlzLl9hdXRvQ2xvc2U9dGhpcy5hc3luYyh0aGlzLmNsb3NlLHRoaXMuZHVyYXRpb24pKSk6Sng9PT10aGlzJiYoSng9bnVsbCksUG0uX29wZW5lZENoYW5nZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QuYWRkKCJwYXBlci10b2FzdC1vcGVuIil9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLmNsYXNzTGlzdC5yZW1vdmUoInBhcGVyLXRvYXN0LW9wZW4iKX0sX29uRml0SW50b0NoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5wb3NpdGlvblRhcmdldD1lfX0pO3ZhciBMMHQ9UWAKCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6bm9uZTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1iYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIG9wYWNpdHk6IDAuNDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJhci1jb2xvciwgIzAwMDAwMCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJhcjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0zcHg7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC42KTsKICAgICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBsaW5lYXIgLjA4cywgYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gbGluZWFyIC4wOHMsIGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1idXR0b24tY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNTApKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYnV0dG9uOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbi5kcmFnZ2luZyB7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXTpub3QoW2Rpc2FibGVkXSkpIC50b2dnbGUtYmFyIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJhci1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYmFyOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudG9nZ2xlLWJhciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKICAgICAgICBvcGFjaXR5OiAwLjEyOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDE2cHgsIDApOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDE2cHgsIDApOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF06bm90KFtkaXNhYmxlZF0pKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbi1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYnV0dG9uOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2JkYmRiZDsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAudG9nZ2xlLWluayB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogLTE0cHg7CiAgICAgICAgbGVmdDogLTE0cHg7CiAgICAgICAgcmlnaHQ6IGF1dG87CiAgICAgICAgYm90dG9tOiBhdXRvOwogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWluazsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAudG9nZ2xlLWluayB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWluazsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIC8qIFRoZSB0b2dnbGUgYnV0dG9uIGhhcyBhbiBhYnNvbHV0ZSBwb3NpdGlvbiBvZiAtM3B4OyBUaGUgZXh0cmEgMXB4CiAgICAgICAgLyogYWNjb3VudHMgZm9yIHRoZSB0b2dnbGUgYnV0dG9uIHNoYWRvdyBib3guICovCiAgICAgICAgbWFyZ2luOiA0cHggMXB4OwogICAgICB9CgogICAgICAudG9nZ2xlLWxhYmVsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICAvKiBpbnZhbGlkIHN0YXRlICovCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgLnRvZ2dsZS1iYXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24taW52YWxpZC1iYXItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24taW52YWxpZC1idXR0b24tY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgLnRvZ2dsZS1pbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtaW5rLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJ0b2dnbGVCYXIiIGNsYXNzPSJ0b2dnbGUtYmFyIj48L2Rpdj4KICAgICAgPGRpdiBpZD0idG9nZ2xlQnV0dG9uIiBjbGFzcz0idG9nZ2xlLWJ1dHRvbiI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtbGFiZWwiPjxzbG90Pjwvc2xvdD48L2Rpdj4KCiAgYDtMMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpMMHQsaXM6InBhcGVyLXRvZ2dsZS1idXR0b24iLGJlaGF2aW9yczpbWHhdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLCJhcmlhLXByZXNzZWQiOiJmYWxzZSIsdGFiaW5kZXg6MH0scHJvcGVydGllczp7fSxsaXN0ZW5lcnM6e3RyYWNrOiJfb250cmFjayJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7VG0odGhpcyxmdW5jdGlvbigpe2RfKHRoaXMsInBhbi15Iil9KX0sX29udHJhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kZXRhaWw7dC5zdGF0ZT09PSJzdGFydCI/dGhpcy5fdHJhY2tTdGFydCh0KTp0LnN0YXRlPT09InRyYWNrIj90aGlzLl90cmFja01vdmUodCk6dC5zdGF0ZT09PSJlbmQiJiZ0aGlzLl90cmFja0VuZCh0KX0sX3RyYWNrU3RhcnQ6ZnVuY3Rpb24oZSl7dGhpcy5fd2lkdGg9dGhpcy4kLnRvZ2dsZUJhci5vZmZzZXRXaWR0aC8yLHRoaXMuX3RyYWNrQ2hlY2tlZD10aGlzLmNoZWNrZWQsdGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZyIpfSxfdHJhY2tNb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZHg7dGhpcy5feD1NYXRoLm1pbih0aGlzLl93aWR0aCxNYXRoLm1heCgwLHRoaXMuX3RyYWNrQ2hlY2tlZD90aGlzLl93aWR0aCt0OnQpKSx0aGlzLnRyYW5zbGF0ZTNkKHRoaXMuX3grInB4IiwwLDAsdGhpcy4kLnRvZ2dsZUJ1dHRvbiksdGhpcy5fdXNlckFjdGl2YXRlKHRoaXMuX3g+dGhpcy5fd2lkdGgvMil9LF90cmFja0VuZDpmdW5jdGlvbihlKXt0aGlzLiQudG9nZ2xlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIiksdGhpcy50cmFuc2Zvcm0oIiIsdGhpcy4kLnRvZ2dsZUJ1dHRvbil9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnRvZ2dsZUJ1dHRvbjt2YXIgZT1zdS5fY3JlYXRlUmlwcGxlKCk7cmV0dXJuIGUuaWQ9ImluayIsZS5zZXRBdHRyaWJ1dGUoInJlY2VudGVycyIsIiIpLGUuY2xhc3NMaXN0LmFkZCgiY2lyY2xlIiwidG9nZ2xlLWluayIpLGV9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0OiB2YXIoLS1wYXBlci10b29sYmFyLWhlaWdodCwgNjRweCk7CiAgICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0OiB2YXIoLS1wYXBlci10b29sYmFyLXNtLWhlaWdodCwgNTZweCk7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItdG9vbGJhci1iYWNrZ3JvdW5kLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvb2xiYXItY29sb3IsIHZhcigtLWRhcmstdGhlbWUtdGV4dC1jb2xvcikpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXI7CiAgICAgIH0KCiAgICAgIDpob3N0KC5hbmltYXRlKSB7CiAgICAgICAgdHJhbnNpdGlvbjogdmFyKC0tcGFwZXItdG9vbGJhci10cmFuc2l0aW9uLCBoZWlnaHQgMC4xOHMgZWFzZS1pbik7CiAgICAgIH0KCiAgICAgIDpob3N0KC5tZWRpdW0tdGFsbCkgewogICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KSAqIDIpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItbWVkaXVtOwogICAgICB9CgogICAgICA6aG9zdCgudGFsbCkgewogICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KSAqIDMpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItdGFsbDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItY29udGVudDsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogVE9ETzogV2hlcmUgc2hvdWxkIG1lZGlhIHF1ZXJ5IGJyZWFrcG9pbnRzIGxpdmUgc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZWxlbWVudHM/CiAgICAgICAqLwoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7CiAgICAgICAgOmhvc3QgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CgogICAgICAgIDpob3N0KC5tZWRpdW0tdGFsbCkgewogICAgICAgICAgaGVpZ2h0OiBjYWxjKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1zbS1oZWlnaHQpICogMik7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgudGFsbCkgewogICAgICAgICAgaGVpZ2h0OiBjYWxjKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1zbS1oZWlnaHQpICogMyk7CiAgICAgICAgfQoKICAgICAgICAudG9vbGJhci10b29scyB7CiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1zbS1oZWlnaHQpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgI3RvcEJhciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAvKiBtaWRkbGUgYmFyICovCiAgICAgICNtaWRkbGVCYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpICNtaWRkbGVCYXIsCiAgICAgIDpob3N0KC5tZWRpdW0tdGFsbCkgI21pZGRsZUJhciB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICB9CgogICAgICAvKiBib3R0b20gYmFyICovCiAgICAgICNib3R0b21CYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbWFrZSBlbGVtZW50cyAoZS5nLiBidXR0b25zKSByZXNwb25kIHRvIG1vdXNlL3RvdWNoIGV2ZW50cwogICAgICAgKgogICAgICAgKiBcYC50b29sYmFyLXRvb2xzXGAgZGlzYWJsZXMgdG91Y2ggZXZlbnRzIHNvIG11bHRpcGxlIHRvb2xiYXJzIGNhbiBzdGFjayBhbmQgbm90CiAgICAgICAqIGFic29yYiBldmVudHMuIEFsbCBjaGlsZHJlbiBtdXN0IGhhdmUgcG9pbnRlciBldmVudHMgcmUtZW5hYmxlZCB0byB3b3JrIGFzCiAgICAgICAqIGV4cGVjdGVkLgogICAgICAgKi8KICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoKjpub3QoW2Rpc2FibGVkXSkpIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoLnRpdGxlKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIG1hcmdpbi1sZWZ0OiA1NnB4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZChwYXBlci1pY29uLWJ1dHRvbiArIC50aXRsZSkgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICB9CgogICAgICAvKioKICAgICAgICogVGhlIC0tcGFwZXItdG9vbGJhci10aXRsZSBtaXhpbiBpcyBhcHBsaWVkIGhlcmUgaW5zdGVhZCBvZiBhYm92ZSB0bwogICAgICAgKiBmaXggdGhlIGlzc3VlIHdpdGggbWFyZ2luLWxlZnQgYmVpbmcgaWdub3JlZCBkdWUgdG8gY3NzIG9yZGVyaW5nLgogICAgICAgKi8KICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoLnRpdGxlKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbGJhci10aXRsZTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQocGFwZXItaWNvbi1idXR0b25baWNvbj1tZW51XSkgewogICAgICAgIG1hcmdpbi1yaWdodDogMjRweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoLmZpdCkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IGF1dG87CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAvKiBUT0RPKG5vbXMpOiBVbnRpbCB3ZSBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uIGZvciBjbGFzc2VzIHRoYXQgZG9uJ3QgdXNlCiAgICAgICAqIC9kZWVwLyBjcmVhdGUgb3VyIG93bi4KICAgICAgICovCiAgICAgIC5zdGFydC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1zdGFydC1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5jZW50ZXItanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmVuZC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1lbmQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuYXJvdW5kLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWFyb3VuZC1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1qdXN0aWZpZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0idG9wQmFyIiBjbGFzc1wkPSJ0b29sYmFyLXRvb2xzIFtbX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXMoanVzdGlmeSldXSI+CiAgICAgIDxzbG90IG5hbWU9InRvcCI+PC9zbG90PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0ibWlkZGxlQmFyIiBjbGFzc1wkPSJ0b29sYmFyLXRvb2xzIFtbX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXMobWlkZGxlSnVzdGlmeSldXSI+CiAgICAgIDxzbG90IG5hbWU9Im1pZGRsZSI+PC9zbG90PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0iYm90dG9tQmFyIiBjbGFzc1wkPSJ0b29sYmFyLXRvb2xzIFtbX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXMoYm90dG9tSnVzdGlmeSldXSI+CiAgICAgIDxzbG90IG5hbWU9ImJvdHRvbSI+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLXRvb2xiYXIiLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJ0b29sYmFyIn0scHJvcGVydGllczp7Ym90dG9tSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LGp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxtaWRkbGVKdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn19LHJlYWR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKHRoaXMuaXMsImlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXBwLWxheW91dCBpbnN0ZWFkISIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyPXRoaXMuX29ic2VydmUodGhpcyksdGhpcy5fdXBkYXRlQXJpYUxhYmVsbGVkQnkoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpfSxfb2JzZXJ2ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LmJpbmQodGhpcykpO3JldHVybiB0Lm9ic2VydmUoZSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSx0fSxfdXBkYXRlQXJpYUxhYmVsbGVkQnk6ZnVuY3Rpb24oKXt1aSgpO2Zvcih2YXIgZT1bXSx0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHp0KHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgic2xvdCIpKS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoenQodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yQWxsKCJjb250ZW50IikpKSxyLG49MDtyPXRbbl07bisrKWZvcih2YXIgaT16dChyKS5nZXREaXN0cmlidXRlZE5vZGVzKCksbyxhPTA7bz1pW2FdO2ErKylpZihvLmNsYXNzTGlzdCYmby5jbGFzc0xpc3QuY29udGFpbnMoInRpdGxlIikpaWYoby5pZCllLnB1c2goby5pZCk7ZWxzZXt2YXIgcz0icGFwZXItdG9vbGJhci1sYWJlbC0iK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTQpO28uaWQ9cyxlLnB1c2gocyl9ZS5sZW5ndGg+MCYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsZS5qb2luKCIgIikpfSxfY29tcHV0ZUJhckV4dHJhQ2xhc3NlczpmdW5jdGlvbihlKXtyZXR1cm4gZT9lKyhlPT09Imp1c3RpZmllZCI/IiI6Ii1qdXN0aWZpZWQiKToiIn19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB6LWluZGV4OiAxMDAyOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAjdG9vbHRpcCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b29sdGlwLWJhY2tncm91bmQsICM2MTYxNjEpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sdGlwLXRleHQtY29sb3IsIHdoaXRlKTsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXA7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZVVwIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNjYWxlRG93biB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVGYWRlSW5PcGFjaXR5IHsKICAgICAgICAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVGYWRlT3V0T3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2xpZGVEb3duSW4gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjAwMHB4KTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICAgIDEwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bk91dCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjAwMHB4KTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICB9CgogICAgICAuZmFkZS1pbi1hbmltYXRpb24gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LWluLCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lRmFkZUluT3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLWluLCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5mYWRlLW91dC1hbmltYXRpb24gewogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVPdXRPcGFjaXR5OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zY2FsZS11cC1hbmltYXRpb24gewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNjYWxlVXA7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtZG93bi1hbmltYXRpb24gewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZURvd247CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duSW47CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2xpZGUtZG93bi1hbmltYXRpb24tb3V0IHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTbGlkZURvd25PdXQ7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLmNhbmNlbC1hbmltYXRpb24gewogICAgICAgIGFuaW1hdGlvbi1kZWxheTogLTMwcyAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAvKiBUaGFua3MgSUUgMTAuICovCgogICAgICAuaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0idG9vbHRpcCIgY2xhc3M9ImhpZGRlbiI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10b29sdGlwIixob3N0QXR0cmlidXRlczp7cm9sZToidG9vbHRpcCIsdGFiaW5kZXg6LTF9LHByb3BlcnRpZXM6e2Zvcjp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9maW5kVGFyZ2V0In0sbWFudWFsTW9kZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfbWFudWFsTW9kZUNoYW5nZWQifSxwb3NpdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImJvdHRvbSJ9LGZpdFRvVmlzaWJsZUJvdW5kczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjE0fSxtYXJnaW5Ub3A6e3R5cGU6TnVtYmVyLHZhbHVlOjE0fSxhbmltYXRpb25EZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6NTAwLG9ic2VydmVyOiJfZGVsYXlDaGFuZ2UifSxhbmltYXRpb25FbnRyeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LGFuaW1hdGlvbkV4aXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2VudHJ5Olt7bmFtZToiZmFkZS1pbi1hbmltYXRpb24iLG5vZGU6dGhpcyx0aW1pbmc6e2RlbGF5OjB9fV0sZXhpdDpbe25hbWU6ImZhZGUtb3V0LWFuaW1hdGlvbiIsbm9kZTp0aGlzfV19fX0sX3Nob3dpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGxpc3RlbmVyczp7d2Via2l0QW5pbWF0aW9uRW5kOiJfb25BbmltYXRpb25FbmQifSxnZXQgdGFyZ2V0KCl7dmFyIGU9enQodGhpcykucGFyZW50Tm9kZSx0PXp0KHRoaXMpLmdldE93bmVyUm9vdCgpLHI7cmV0dXJuIHRoaXMuZm9yP3I9enQodCkucXVlcnlTZWxlY3RvcigiIyIrdGhpcy5mb3IpOnI9ZS5ub2RlVHlwZT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP3QuaG9zdDplLHJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZmluZFRhcmdldCgpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMubWFudWFsTW9kZXx8dGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCl9LHBsYXlBbmltYXRpb246ZnVuY3Rpb24oZSl7ZT09PSJlbnRyeSI/dGhpcy5zaG93KCk6ZT09PSJleGl0IiYmdGhpcy5oaWRlKCl9LGNhbmNlbEFuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImNhbmNlbC1hbmltYXRpb24iKX0sc2hvdzpmdW5jdGlvbigpe2lmKCF0aGlzLl9zaG93aW5nKXtpZih6dCh0aGlzKS50ZXh0Q29udGVudC50cmltKCk9PT0iIil7Zm9yKHZhciBlPSEwLHQ9enQodGhpcykuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLHI9MDtyPHQubGVuZ3RoO3IrKylpZih0W3JdLnRleHRDb250ZW50LnRyaW0oKSE9PSIiKXtlPSExO2JyZWFrfWlmKGUpcmV0dXJufXRoaXMuX3Nob3dpbmc9ITAsdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSgiY2FuY2VsLWFuaW1hdGlvbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZXhpdCIpKSx0aGlzLnVwZGF0ZVBvc2l0aW9uKCksdGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMCx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImVudHJ5IikpfX0saGlkZTpmdW5jdGlvbigpe2lmKCEhdGhpcy5fc2hvd2luZyl7aWYodGhpcy5fYW5pbWF0aW9uUGxheWluZyl7dGhpcy5fc2hvd2luZz0hMSx0aGlzLl9jYW5jZWxBbmltYXRpb24oKTtyZXR1cm59ZWxzZSB0aGlzLl9vbkFuaW1hdGlvbkZpbmlzaCgpO3RoaXMuX3Nob3dpbmc9ITEsdGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMH19LHVwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoISghdGhpcy5fdGFyZ2V0fHwhdGhpcy5vZmZzZXRQYXJlbnQpKXt2YXIgZT10aGlzLm9mZnNldDt0aGlzLm1hcmdpblRvcCE9MTQmJnRoaXMub2Zmc2V0PT0xNCYmKGU9dGhpcy5tYXJnaW5Ub3ApO3ZhciB0PXRoaXMub2Zmc2V0UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9dGhpcy5fdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPShyLndpZHRoLW4ud2lkdGgpLzIsbz0oci5oZWlnaHQtbi5oZWlnaHQpLzIsYT1yLmxlZnQtdC5sZWZ0LHM9ci50b3AtdC50b3AsbCxjO3N3aXRjaCh0aGlzLnBvc2l0aW9uKXtjYXNlInRvcCI6bD1hK2ksYz1zLW4uaGVpZ2h0LWU7YnJlYWs7Y2FzZSJib3R0b20iOmw9YStpLGM9cytyLmhlaWdodCtlO2JyZWFrO2Nhc2UibGVmdCI6bD1hLW4ud2lkdGgtZSxjPXMrbzticmVhaztjYXNlInJpZ2h0IjpsPWErci53aWR0aCtlLGM9cytvO2JyZWFrfXRoaXMuZml0VG9WaXNpYmxlQm91bmRzPyh0LmxlZnQrbCtuLndpZHRoPndpbmRvdy5pbm5lcldpZHRoPyh0aGlzLnN0eWxlLnJpZ2h0PSIwcHgiLHRoaXMuc3R5bGUubGVmdD0iYXV0byIpOih0aGlzLnN0eWxlLmxlZnQ9TWF0aC5tYXgoMCxsKSsicHgiLHRoaXMuc3R5bGUucmlnaHQ9ImF1dG8iKSx0LnRvcCtjK24uaGVpZ2h0PndpbmRvdy5pbm5lckhlaWdodD8odGhpcy5zdHlsZS5ib3R0b209dC5oZWlnaHQtcytlKyJweCIsdGhpcy5zdHlsZS50b3A9ImF1dG8iKToodGhpcy5zdHlsZS50b3A9TWF0aC5tYXgoLXQudG9wLGMpKyJweCIsdGhpcy5zdHlsZS5ib3R0b209ImF1dG8iKSk6KHRoaXMuc3R5bGUubGVmdD1sKyJweCIsdGhpcy5zdHlsZS50b3A9YysicHgiKX19LF9hZGRMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl90YXJnZXQmJih0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJmb2N1cyIsInNob3ciKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlbGVhdmUiLCJoaWRlIiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwidGFwIiwiaGlkZSIpKSx0aGlzLmxpc3Rlbih0aGlzLiQudG9vbHRpcCwiYW5pbWF0aW9uZW5kIiwiX29uQW5pbWF0aW9uRW5kIiksdGhpcy5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX0sX2ZpbmRUYXJnZXQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpLHRoaXMuX3RhcmdldD10aGlzLnRhcmdldCx0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX2FkZExpc3RlbmVycygpfSxfZGVsYXlDaGFuZ2U6ZnVuY3Rpb24oZSl7ZSE9PTUwMCYmdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOmUrIm1zIn0pfSxfbWFudWFsTW9kZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGU/dGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCk6dGhpcy5fYWRkTGlzdGVuZXJzKCl9LF9jYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImVudHJ5IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZXhpdCIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9LF9vbkFuaW1hdGlvbkZpbmlzaDpmdW5jdGlvbigpe3RoaXMuX3Nob3dpbmcmJih0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImVudHJ5IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSkpfSxfb25BbmltYXRpb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9hbmltYXRpb25QbGF5aW5nPSExLHRoaXMuX3Nob3dpbmd8fCh0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIikpfSxfZ2V0QW5pbWF0aW9uVHlwZTpmdW5jdGlvbihlKXtpZihlPT09ImVudHJ5IiYmdGhpcy5hbmltYXRpb25FbnRyeSE9PSIiKXJldHVybiB0aGlzLmFuaW1hdGlvbkVudHJ5O2lmKGU9PT0iZXhpdCImJnRoaXMuYW5pbWF0aW9uRXhpdCE9PSIiKXJldHVybiB0aGlzLmFuaW1hdGlvbkV4aXQ7aWYodGhpcy5hbmltYXRpb25Db25maWdbZV0mJnR5cGVvZiB0aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS5uYW1lPT0ic3RyaW5nIil7aWYodGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0udGltaW5nJiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXkmJnRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLnRpbWluZy5kZWxheSE9PTApe3ZhciB0PXRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLnRpbWluZy5kZWxheTtlPT09ImVudHJ5Ij90aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiI6dCsibXMifSk6ZT09PSJleGl0IiYmdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0Ijp0KyJtcyJ9KX1yZXR1cm4gdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0ubmFtZX19LF9yZW1vdmVMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl90YXJnZXQmJih0aGlzLnVubGlzdGVuKHRoaXMuX3RhcmdldCwibW91c2VlbnRlciIsInNob3ciKSx0aGlzLnVubGlzdGVuKHRoaXMuX3RhcmdldCwiZm9jdXMiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlbGVhdmUiLCJoaWRlIiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImJsdXIiLCJoaWRlIiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsInRhcCIsImhpZGUiKSksdGhpcy51bmxpc3Rlbih0aGlzLiQudG9vbHRpcCwiYW5pbWF0aW9uZW5kIiwiX29uQW5pbWF0aW9uRW5kIiksdGhpcy51bmxpc3Rlbih0aGlzLCJtb3VzZWVudGVyIiwiaGlkZSIpfX0pO3ZhciByYj1FZShPZSgpLDEpO3ZhciBkRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmxpc3RlbmVyPXR9fSxUVz1uZXcgU2V0LEQ5PW5ldyBTZXQ7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLCgpPT57VFcuZm9yRWFjaChlPT5lLmxpc3RlbmVyKCkpfSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInN0b3JhZ2UiLCgpPT57RDkuZm9yRWFjaChlPT5lLmxpc3RlbmVyKCkpfSk7ZnVuY3Rpb24gbUUoZSl7bGV0IHQ9bmV3IGRFKGUpO3JldHVybiBUVy5hZGQodCksdH1mdW5jdGlvbiBDVyhlKXtsZXQgdD1uZXcgZEUoZSk7cmV0dXJuIEQ5LmFkZCh0KSx0fWZ1bmN0aW9uIEFXKCl7RDkuZm9yRWFjaChlPT5lLmxpc3RlbmVyKCkpfWZ1bmN0aW9uIFBXKGUpe1RXLmRlbGV0ZShlKX1mdW5jdGlvbiBJVyhlKXtEOS5kZWxldGUoZSl9dmFyIFJXPXt9O0tzKFJXLHtnZXRGYWtlSGFzaDooKT0+a1csc2V0RmFrZUhhc2g6KCk9PkxXLHNldFVzZUhhc2g6KCk9PnFiZSx1c2VIYXNoOigpPT5POX0pO3ZhciBrMHQ9ITE7ZnVuY3Rpb24gcWJlKGUpe2swdD1lfWZ1bmN0aW9uIE85KCl7cmV0dXJuIGswdH12YXIgUjB0PSIiO2Z1bmN0aW9uIExXKGUpe1IwdD1lfWZ1bmN0aW9uIGtXKCl7cmV0dXJuIFIwdH12YXIgUXg9Il9fdGFiX18iLE5XPXt9O2Z1bmN0aW9uIE4wdCgpe3JldHVybiBOV31mdW5jdGlvbiBEMHQoZSl7Tlc9ZX1tRSgoKT0+e05XPWViKHRiKCkpfSk7ZnVuY3Rpb24gdGIoKXtyZXR1cm4gTzkoKT93aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTprVygpfWZ1bmN0aW9uIGViKGUpe2xldCB0PXt9O3JldHVybiBlLnNwbGl0KCImIikuZm9yRWFjaChuPT57bGV0IGk9bi5zcGxpdCgiPSIpO2kubGVuZ3RoPT09MT90W1F4XT1pWzBdOmkubGVuZ3RoPT09MiYmKHRbZGVjb2RlVVJJQ29tcG9uZW50KGlbMF0pXT1kZWNvZGVVUklDb21wb25lbnQoaVsxXSkpfSksdH1mdW5jdGlvbiB6OShlLHQ9ITEpe2lmKE85KCkpaWYodCl7bGV0IHI9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7ci5oYXNoPWUsd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHdpbmRvdy5oaXN0b3J5LnN0YXRlLCIiLHIudG9TdHJpbmcoKSl9ZWxzZSB3aW5kb3cubG9jYXRpb24uaGFzaD1lO2Vsc2UgTFcoZSl9ZnVuY3Rpb24gRjkoZSl7bGV0IHQ9IiI7ZVtReF0hPT12b2lkIDAmJih0Kz1lW1F4XSk7bGV0IHI9T2JqZWN0LmtleXMoZSkubWFwKG49PltuLGVbbl1dKS5maWx0ZXIobj0+blswXSE9PVF4KS5tYXAobj0+ZW5jb2RlVVJJQ29tcG9uZW50KG5bMF0pKyI9IitlbmNvZGVVUklDb21wb25lbnQoblsxXSkpLmpvaW4oIiYiKTtyZXR1cm4gci5sZW5ndGg+MD90KyImIityOnR9ZnVuY3Rpb24gTzB0KGUsdD0hMSl7bGV0IHI9ZWIodGIoKSk7ZGVsZXRlIHJbZV0sejkoRjkociksdCl9dmFyIEYwdD0iZGlzYW1iaWd1YXRvciIse2dldDpHYmUsc2V0OldiZSxnZXRJbml0aWFsaXplcjp5XyxnZXRPYnNlcnZlcjp2XyxkaXNwb3NlQmluZGluZzpZYmV9PXlFKGU9PmUsZT0+ZSkse2dldDpqYmUsc2V0OlhiZSxnZXRJbml0aWFsaXplcjp2cCxnZXRPYnNlcnZlcjp4cCxkaXNwb3NlQmluZGluZzokYmV9PXlFKGU9PmU9PT0idHJ1ZSI/ITA6ZT09PSJmYWxzZSI/ITE6dm9pZCAwLGU9PmUudG9TdHJpbmcoKSkse2dldDpEVyxzZXQ6T1csZ2V0SW5pdGlhbGl6ZXI6Z0UsZ2V0T2JzZXJ2ZXI6X0UsZGlzcG9zZUJpbmRpbmc6S2JlfT15RShlPT4rZSxlPT5lLnRvU3RyaW5nKCkpLHtnZXQ6WmJlLHNldDpKYmUsZ2V0SW5pdGlhbGl6ZXI6elcsZ2V0T2JzZXJ2ZXI6RlcsZGlzcG9zZUJpbmRpbmc6UWJlfT15RShlPT5KU09OLnBhcnNlKGF0b2IoZSkpLGU9PmJ0b2EoSlNPTi5zdHJpbmdpZnkoZSkpKTtmdW5jdGlvbiB5RShlLHQpe2xldCByPVtdLG49W107ZnVuY3Rpb24gaShjLHU9e30pe2xldHtkZWZhdWx0VmFsdWU6aCx1c2VMb2NhbFN0b3JhZ2U6Zj0hMX09dSxwPWY/d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGMpOmViKHRiKCkpW2NdO3JldHVybiBwPT1udWxsP3JiLmNsb25lRGVlcChoKTplKHApfWZ1bmN0aW9uIG8oYyx1LGg9e30pe2xldHtkZWZhdWx0VmFsdWU6Zix1c2VMb2NhbFN0b3JhZ2U6cD0hMSx1c2VMb2NhdGlvblJlcGxhY2U6ZD0hMX09aCxnPXQodSk7aWYocCl3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYyxnKSxBVygpO2Vsc2UgaWYoIXJiLmlzRXF1YWwodSxpKGMse3VzZUxvY2FsU3RvcmFnZTpwfSkpKWlmKHJiLmlzRXF1YWwodSxmKSlPMHQoYyxkKTtlbHNle2xldCBfPWViKHRiKCkpO19bY109Zyx6OShGOShfKSxkKX19ZnVuY3Rpb24gYShjLHUpe2xldCBoPUtsKHtkZWZhdWx0VmFsdWU6dS5kZWZhdWx0VmFsdWUscG9seW1lclByb3BlcnR5OmMsdXNlTG9jYWxTdG9yYWdlOiExfSx1KTtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgZj16MHQodGhpcyxjKSxwPSgpPT57bGV0IF89aShmLGgpLHk9dGhpc1toLnBvbHltZXJQcm9wZXJ0eV07cmIuaXNFcXVhbChfLHkpfHwodGhpc1toLnBvbHltZXJQcm9wZXJ0eV09Xyl9LGc9KGgudXNlTG9jYWxTdG9yYWdlP0NXOm1FKSgoKT0+cCgpKTtyZXR1cm4gaC51c2VMb2NhbFN0b3JhZ2U/bi5wdXNoKGcpOnIucHVzaChnKSxwKCksdGhpc1toLnBvbHltZXJQcm9wZXJ0eV19fWZ1bmN0aW9uIHMoKXtyLmZvckVhY2goYz0+UFcoYykpLG4uZm9yRWFjaChjPT5JVyhjKSl9ZnVuY3Rpb24gbChjLHUpe2xldCBoPUtsKHtkZWZhdWx0VmFsdWU6dS5kZWZhdWx0VmFsdWUscG9seW1lclByb3BlcnR5OmMsdXNlTG9jYWxTdG9yYWdlOiExfSx1KTtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgZj16MHQodGhpcyxjKSxwPXRoaXNbaC5wb2x5bWVyUHJvcGVydHldO28oZixwLGgpfX1yZXR1cm57Z2V0Omksc2V0Om8sZ2V0SW5pdGlhbGl6ZXI6YSxnZXRPYnNlcnZlcjpsLGRpc3Bvc2VCaW5kaW5nOnN9fWZ1bmN0aW9uIHQyZSgpe2xldCBlPW5ldyBTZXQoWyJleGFtcGxlc1BhdGgiLCJoaWRlTW9kZWxQYW5lMiIsIm1vZGVsTmFtZTEiLCJtb2RlbE5hbWUyIiwiaW5mZXJlbmNlQWRkcmVzczEiLCJpbmZlcmVuY2VBZGRyZXNzMiIsIm1vZGVsVHlwZSIsIm1vZGVsVmVyc2lvbjEiLCJtb2RlbFZlcnNpb24yIiwibW9kZWxTaWduYXR1cmUxIiwibW9kZWxTaWduYXR1cmUyIiwibWF4RXhhbXBsZXMiLCJsYWJlbFZvY2FiUGF0aCIsIm11bHRpQ2xhc3MiLCJzZXF1ZW5jZUV4YW1wbGVzIiwibWF4Q2xhc3Nlc1RvRGlzcGxheSIsInNhbXBsaW5nT2RkcyIsInVzZVByZWRpY3RBcGkiLCJwcmVkaWN0SW5wdXRUZW5zb3IiLCJwcmVkaWN0T3V0cHV0VGVuc29yIl0pLHQ9ZWIodGIoKSk7aWYodFtReF09PT0id2hhdGlmIil7Zm9yKGxldCByIG9mIGUpaWYociBpbiB0KXtsZXQgbj10W3JdO3RbYHAud2hhdGlmLiR7cn1gXT1ufX16OShGOSh0KSksRDB0KHQpfWZ1bmN0aW9uIHowdChlLHQpe2xldCByPWVbRjB0XTtyZXR1cm4ocj09bnVsbD9bdF06W3IsdF0pLmpvaW4oIi4iKX12YXIgdkU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGFnRmlsdGVyPXlfKCJ0YWdGaWx0ZXIiLHtkZWZhdWx0VmFsdWU6IiIsdXNlTG9jYWxTdG9yYWdlOiExLHBvbHltZXJQcm9wZXJ0eToiX3RhZ0ZpbHRlciJ9KS5jYWxsKHRoaXMpLHRoaXMuX3RhZ0ZpbHRlck9ic2VydmVyPXZfKCJ0YWdGaWx0ZXIiLHtkZWZhdWx0VmFsdWU6IiIsdXNlTG9jYWxTdG9yYWdlOiExLHBvbHltZXJQcm9wZXJ0eToiX3RhZ0ZpbHRlciJ9KX1fY29tcHV0ZVRhZ0ZpbHRlcigpe3JldHVybiB0aGlzLl90YWdGaWx0ZXJ9fTt2RS50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWlucHV0CiAgICAgIG5vLWxhYmVsLWZsb2F0PSIiCiAgICAgIGxhYmVsPSJGaWx0ZXIgdGFncyAocmVndWxhciBleHByZXNzaW9ucyBzdXBwb3J0ZWQpIgogICAgICB2YWx1ZT0ie3tfdGFnRmlsdGVyfX0iCiAgICAgIGNsYXNzPSJzZWFyY2gtaW5wdXQiCiAgICA+CiAgICAgIDxpcm9uLWljb24gcHJlZml4PSIiIGljb249InNlYXJjaCIgc2xvdD0icHJlZml4Ij48L2lyb24taWNvbj4KICAgIDwvcGFwZXItaW5wdXQ+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDEwcHggNXB4IDEwcHggMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxjb21wdXRlZDoiX2NvbXB1dGVUYWdGaWx0ZXIoX3RhZ0ZpbHRlcikifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHZFLnByb3RvdHlwZSwidGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfdGFnRmlsdGVyT2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHZFLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTt2RT1FKFt5dCgidGYtdGFnLWZpbHRlcmVyIildLHZFKTtmdW5jdGlvbiBfcyhlKXtsZXR7bW9kdWxlTmFtZTp0LHN0eWxlQ29udGVudDpyfT1lLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZG9tLW1vZHVsZSIpLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKSxvPVtdO2Uuc3R5bGVEZXBlbmRlbmNpZXMmJmUuc3R5bGVEZXBlbmRlbmNpZXMuZm9yRWFjaChzPT57bGV0IGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtsLnNldEF0dHJpYnV0ZSgiaW5jbHVkZSIscyksby5wdXNoKGwpfSk7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtPYmplY3QuYXNzaWduKGEse3RleHRDb250ZW50OnJ9KSxvLmZvckVhY2gocz0+e2kuY29udGVudC5hcHBlbmRDaGlsZChzKX0pLGkuY29udGVudC5hcHBlbmRDaGlsZChhKSxuLmFwcGVuZENoaWxkKGkpLG4ucmVnaXN0ZXIodCl9X3Moe21vZHVsZU5hbWU6ImRhc2hib2FyZC1zdHlsZSIsc3R5bGVEZXBlbmRlbmNpZXM6WyJpcm9uLWZsZXgiXSxzdHlsZUNvbnRlbnQ6YAogICAgICA6aG9zdCB7CiAgICAgICAgLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmc6IDE1cHg7CiAgICAgICAgLS1zaWRlYmFyLWxlZnQtcGFkZGluZzogMzBweDsKICAgICAgfQoKICAgICAgW3Nsb3Q9J3NpZGViYXInXSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgcGFkZGluZzogNXB4IDA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgIC5zZXR0aW5ncyB7CiAgICAgICAgbWluLWhlaWdodDogNTBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAucnVucy1zZWxlY3RvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgbWluLWhlaWdodDogMjAwcHg7CiAgICAgIH0KCiAgICAgIHRmLXJ1bnMtc2VsZWN0b3IgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBsZWZ0OiB2YXIoLS1zaWRlYmFyLWxlZnQtcGFkZGluZyk7CiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gdmFyKC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nKSAqIDIpOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICB9CgogICAgICAuc2VhcmNoLWlucHV0IHsKICAgICAgICBtYXJnaW46IDEwcHggNXB4IDAgMTBweDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiB7CiAgICAgICAgYm9yZGVyLXRvcDogc29saWQgMXB4IHZhcigtLXRiLXVpLWJvcmRlcik7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIHBhZGRpbmc6IHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgMAogICAgICAgICAgdmFyKC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nKSB2YXIoLS1zaWRlYmFyLWxlZnQtcGFkZGluZyk7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb246Zmlyc3Qtb2YtdHlwZSB7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luOiA1cHg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gcGFwZXItYnV0dG9uOmZpcnN0LW9mLXR5cGUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gcGFwZXItYnV0dG9uOmxhc3Qtb2YtdHlwZSB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gPiA6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgcGFkZGluZy10b3A6IDA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gPiA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBoMyB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBtYXJnaW46IDEwcHggMCA1cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KCiAgICAgIGEgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rKTsKICAgICAgfQoKICAgICAgYTp2aXNpdGVkIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluay12aXNpdGVkKTsKICAgICAgfQogIGB9KTtmdW5jdGlvbiBfbyhlKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBle2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9tYXliZVNldERhcmtNb2RlKCksdGhpcy5vYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihyPT57ci5zb21lKGk9PmkuYXR0cmlidXRlTmFtZT09PSJjbGFzcyIpJiZ0aGlzLl9tYXliZVNldERhcmtNb2RlKCl9KSx0aGlzLm9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSx7YXR0cmlidXRlczohMH0pfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIHI7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSwocj10aGlzLm9ic2VydmVyKT09bnVsbHx8ci5kaXNjb25uZWN0KCl9X21heWJlU2V0RGFya01vZGUoKXt0aGlzLmNsYXNzTGlzdC50b2dnbGUoImRhcmstbW9kZSIsZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoImRhcmstbW9kZSIpKX19fV9zKHttb2R1bGVOYW1lOiJzY3JvbGxiYXItc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgIHdpZHRoOiAxMHB4OwogICAgfQoKICAgIC5zY3JvbGxiYXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgMnB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS05MDApOwogICAgfQogICAgLnNjcm9sbGJhciB7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICB9CiAgYH0pO3ZhciBIVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO0hXLnNldEF0dHJpYnV0ZSgiaXMiLCJjdXN0b20tc3R5bGUiKTtIVy50ZXh0Q29udGVudD1gCiAgOnJvb3QgewogICAgLS10Yi1vcmFuZ2Utd2VhazogI2ZmYTcyNjsKICAgIC0tdGItb3JhbmdlLXN0cm9uZzogI2Y1N2MwMDsKICAgIC0tdGItb3JhbmdlLWRhcms6ICNkYzczMjA7CiAgICAtLXRiLWdyZXktZGFya2VyOiAjZTJlMmUyOwogICAgLS10Yi1ncmV5LWxpZ2h0ZXI6ICNmM2YzZjM7CiAgICAtLXRiLXVpLWRhcmstYWNjZW50OiAjNzU3NTc1OwogICAgLS10Yi11aS1saWdodC1hY2NlbnQ6ICNlMGUwZTA7CiAgICAtLXRiLXVpLWJvcmRlcjogdmFyKC0tcGFwZXItZ3JleS0zMDApOwogICAgLS10Yi1ncmFwaC1mYWRlZDogI2UwZDRiMzsKICAgIC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktODAwKTsKICAgIC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogICAgLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcjogI2U5ZTllOTsKICAgIC0tdGItbGF5b3V0LWJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CiAgICAtLXRiLWxpbms6ICMxOTc2ZDI7IC8qIG1hdGVyaWFsIGJsdWUgNzAwLiAqLwogICAgLS10Yi1saW5rLXZpc2l0ZWQ6ICM3YjFmYTI7IC8qIG1hdGVyaWFsIHB1cnBsZSA3MDAuICovCiAgfQoKICA6cm9vdCAuZGFyay1tb2RlIHsKICAgIC0tdGItdWktYm9yZGVyOiB2YXIoLS1wYXBlci1ncmV5LTcwMCk7CiAgICAtLXRiLXVpLWRhcmstYWNjZW50OiB2YXIoLS1wYXBlci1ncmV5LTQwMCk7CiAgICAtLXRiLXVpLWxpZ2h0LWFjY2VudDogdmFyKC0tcGFwZXItZ3JleS02MDApOwogICAgLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS10Yi1yYWlzZWQtYnV0dG9uLXNoYWRvdy1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwogICAgLS1wcmltYXJ5LXRleHQtY29sb3I6ICNmZmY7CiAgICAtLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTQwMCk7CiAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogIzMwMzAzMDsgIC8qIG1hdGVyaWFsIGdyZXkgQTQwMC4gKi8KICAgIC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3I6ICMzYTNhM2E7CiAgICAtLXRiLWxheW91dC1iYWNrZ3JvdW5kLWNvbG9yOiAjM2EzYTNhOwogICAgLS10Yi1saW5rOiAjNDJhNWY1OyAvKiBtYXRlcmlhbCBibHVlIDQwMC4gKi8KICAgIC0tdGItbGluay12aXNpdGVkOiAjYmE2OGM4OyAvKiBtYXRlcmlhbCBwdXJwbGUgMzAwLiAqLwogICAgLyogT3ZlcnJpZGVzIHBhcGVyLW1hdGVyaWFsICovCiAgICAtLXNoYWRvdy1lbGV2YXRpb24tMmRwXy1fYm94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSwKICAgICAgMCAxcHggNXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSwKICAgICAgMCAzcHggMXB4IC0ycHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogIH0KYDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKEhXKTt2YXIgVlc9Y2xhc3MgZXh0ZW5kcyBfbyhtdCl7fTtWVy50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0ic2lkZWJhciI+CiAgICAgIDxzbG90IG5hbWU9InNpZGViYXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImNlbnRlciI+CiAgICAgIDxzbG90IG5hbWU9ImNlbnRlciIgY2xhc3M9InNjb2xsYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgIH0KCiAgICAgICNzaWRlYmFyIHsKICAgICAgICBmbGV4OiAwIDAgdmFyKC0tdGYtZGFzaGJvYXJkLWxheW91dC1zaWRlYmFyLWJhc2lzLCAyNSUpOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1tYXgtd2lkdGgsIDM1MHB4KTsKICAgICAgICBtaW4td2lkdGg6IHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1taW4td2lkdGgsIDI3MHB4KTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAjY2VudGVyIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0nY2VudGVyJ10pIHsKICAgICAgICBjb250YWluOiBzdHJpY3Q7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgIC50Zi1ncmFwaC1kYXNoYm9hcmQgI2NlbnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO1ZXPUUoW3l0KCJ0Zi1kYXNoYm9hcmQtbGF5b3V0IildLFZXKTt2YXIgQjB0PSJURi5UZW5zb3JCb2FyZC5QYWdpbmF0ZWRWaWV3LmxpbWl0IixlMmU9MTIsQWg9bnVsbCxVVz1uZXcgU2V0O2Z1bmN0aW9uIHFXKGUpe1VXLmFkZChlKX1mdW5jdGlvbiBHVyhlKXtVVy5kZWxldGUoZSl9ZnVuY3Rpb24gV1coKXtyZXR1cm4gQWg9PW51bGwmJihBaD1EVyhCMHQse3VzZUxvY2FsU3RvcmFnZTohMH0pLChBaD09bnVsbHx8IWlzRmluaXRlKEFoKXx8QWg8PTApJiYoQWg9ZTJlKSksQWh9ZnVuY3Rpb24gcjJlKGUpe2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBFcnJvcihgbGltaXQgbXVzdCBiZSBhbiBpbnRlZ2VyLCBidXQgZ290OiAke2V9YCk7aWYoZTw9MCl0aHJvdyBuZXcgRXJyb3IoYGxpbWl0IG11c3QgYmUgcG9zaXRpdmUsIGJ1dCBnb3Q6ICR7ZX1gKTtlIT09QWgmJihBaD1lLE9XKEIwdCxBaCx7dXNlTG9jYWxTdG9yYWdlOiEwfSksVVcuZm9yRWFjaCh0PT57dCgpfSkpfXZhciBuYj1jbGFzcyBleHRlbmRzIG10e3VwZGF0ZUFycmF5UHJvcCh0LHIsbil7bGV0IGk9dGhpcy5nZXQodCksbz1yO2lmKCFBcnJheS5pc0FycmF5KG8pKXRocm93IFJhbmdlRXJyb3IoYEV4cGVjdGVkIG5ldyB2YWx1ZSB0byAnJHt0fScgdG8gYmUgYW4gYXJyYXkuYCk7QXJyYXkuaXNBcnJheShpKXx8KGk9W10sdGhpcy5zZXQodCxpKSk7bGV0IGE9bmV3IFNldChvLm1hcCgoYyx1KT0+bihjLHUpKSkscz0wLGw9MDtmb3IoO3M8aS5sZW5ndGgmJmw8by5sZW5ndGg7KXtpZihhLmhhcyhuKGlbc10scykpKW4oaVtzXSxzKT09bihvW2xdLGwpP3RoaXMuc2V0KGAke3R9LiR7c31gLG9bbF0pOnRoaXMuc3BsaWNlKHQscywwLG9bbF0pO2Vsc2V7dGhpcy5zcGxpY2UodCxzLDEpO2NvbnRpbnVlfWwrKyxzKyt9czxpLmxlbmd0aCYmdGhpcy5zcGxpY2UodCxzKSxsPG8ubGVuZ3RoJiZ0aGlzLnB1c2godCwuLi5vLnNsaWNlKGwpKX19O3ZhciBPaT1jbGFzcyBleHRlbmRzIG5ie2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFzPSJpdGVtIix0aGlzLl9jb250ZW50QWN0aXZlPSEwLHRoaXMuX2RvbUJvb3RzdHJhcHBlZD0hMSx0aGlzLl9jdG9yPW51bGwsdGhpcy5fcmVuZGVyZWRJdGVtcz1bXSx0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdD1uZXcgTWFwLHRoaXMuX2xydUNhY2hlZEl0ZW1zPW5ldyBNYXAsdGhpcy5fY2FjaGVTaXplPTEwLHRoaXMuX2dldEl0ZW1LZXk9dD0+SlNPTi5zdHJpbmdpZnkodCksdGhpcy5faXNDb25uZWN0ZWQ9ITF9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2lzQ29ubmVjdGVkPSEwfXNldENhY2hlU2l6ZSh0KXt0aGlzLl9jYWNoZVNpemU9dH1zZXRHZXRJdGVtS2V5KHQpe3RoaXMuX2dldEl0ZW1LZXk9dH11cGRhdGVEb20odCl7dGhpcy51cGRhdGVBcnJheVByb3AoIl9yZW5kZXJlZEl0ZW1zIix0LHRoaXMuX2dldEl0ZW1LZXkpfV9lbnN1cmVUZW1wbGF0aXplZCgpe2lmKCF0aGlzLmlzQ29ubmVjdGVkKXJldHVybiExO2lmKCF0aGlzLl9jdG9yKXtsZXQgdD10aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7dGhpcy5fY3Rvcj10Yyh0LHRoaXMse3BhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6e1t0aGlzLmFzXTohMCxhY3RpdmU6dGhpcy5fY29udGVudEFjdGl2ZX0sZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHIsbil7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZm9yRWFjaChpPT57aS5mb3J3YXJkSG9zdFByb3AocixuKX0pfX0pfXJldHVybiEwfV9ib290c3RyYXBEb20oKXtpZighdGhpcy5fZW5zdXJlVGVtcGxhdGl6ZWQoKXx8dGhpcy5fZG9tQm9vdHN0cmFwcGVkKXJldHVybjtuZXcgTXV0YXRpb25PYnNlcnZlcihyPT57Zm9yKGxldCBuIG9mIHIpaWYobi50eXBlPT09ImNoaWxkTGlzdCIpZm9yKGxldCBpIG9mIEFycmF5LmZyb20obi5hZGRlZE5vZGVzKSlpIGluc3RhbmNlb2YgRWxlbWVudCYmaS5zZXRBdHRyaWJ1dGUoInNsb3QiLCJpdGVtcyIpfSkub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSxBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZvckVhY2gocj0+e3RoaXMucmVtb3ZlQ2hpbGQocil9KSx0aGlzLl9scnVDYWNoZWRJdGVtcy5jbGVhcigpLHRoaXMuX3JlbmRlcmVkSXRlbXMuZm9yRWFjaCgocixuKT0+dGhpcy5faW5zZXJ0SXRlbShyLG4pKSx0aGlzLl9kb21Cb290c3RyYXBwZWQ9ITB9X3VwZGF0ZUFjdGl2ZSgpeyF0aGlzLl9kb21Cb290c3RyYXBwZWR8fEFycmF5LmZyb20odGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QudmFsdWVzKCkpLmZvckVhY2godD0+e3Qubm90aWZ5UGF0aCgiYWN0aXZlIix0aGlzLl9jb250ZW50QWN0aXZlKX0pfV91cGRhdGVEb20odCl7aWYoISF0aGlzLl9kb21Cb290c3RyYXBwZWQmJiEodC5wYXRoPT0iX3JlbmRlcmVkSXRlbXMifHx0LnBhdGg9PSJfcmVuZGVyZWRJdGVtcy5sZW5ndGgiKSlpZih0LnBhdGg9PT0iX3JlbmRlcmVkSXRlbXMuc3BsaWNlcyIpdC52YWx1ZS5pbmRleFNwbGljZXMuZm9yRWFjaChuPT57bGV0e2luZGV4OmksYWRkZWRDb3VudDpvLG9iamVjdDphLHJlbW92ZWQ6c309bjtzLmZvckVhY2gobD0+e3RoaXMuX3JlbW92ZUl0ZW0obCx0aGlzLmNoaWxkcmVuW2ldKX0pLGEuc2xpY2UoaSxpK28pLmZvckVhY2goKGwsYyk9PnRoaXMuX2luc2VydEl0ZW0obCxpK2MpKSx0aGlzLl90cmltQ2FjaGUoKX0pO2Vsc2V7bGV0IHI9dGhpcy5fZ2V0SXRlbUtleSh0LnZhbHVlKTt0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5oYXMocik/dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KHIpLm5vdGlmeVBhdGgodGhpcy5hcyx0LnZhbHVlKTpjb25zb2xlLndhcm4oYEV4cGVjdGVkICcke3J9JyB0byBleGlzdCBpbiB0aGUgRE9NIGJ1dCBjb3VsZCBub3QgZmluZCBvbmUuYCl9fV9pbnNlcnRJdGVtKHQscil7aWYoIXRoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0ZW1wbGF0aXplZCBiZWZvcmUgaW5zZXJ0aW5nIGFuIGl0ZW0iKTtsZXQgbixpPXRoaXMuX2dldEl0ZW1LZXkodCk7aWYodGhpcy5fbHJ1Q2FjaGVkSXRlbXMuaGFzKGkpKW49dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZ2V0KGkpLHRoaXMuX2xydUNhY2hlZEl0ZW1zLmRlbGV0ZShpKSx0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5nZXQoaSkubm90aWZ5UGF0aCgiYWN0aXZlIix0aGlzLl9jb250ZW50QWN0aXZlKTtlbHNle2xldCBvPXtbdGhpcy5hc106dCxhY3RpdmU6dGhpcy5fY29udGVudEFjdGl2ZX0sYT1uZXcgdGhpcy5fY3RvcihvKTtuPWEucm9vdCx0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5zZXQoaSxhKX10aGlzLmNoaWxkcmVuW3JdP3RoaXMuaW5zZXJ0QmVmb3JlKG4sdGhpcy5jaGlsZHJlbltyXSk6KChuLm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/QXJyYXkuZnJvbShuLmNoaWxkcmVuKTpbbl0pLmZvckVhY2goYT0+YS5zZXRBdHRyaWJ1dGUoInNsb3QiLCJpdGVtcyIpKSx0aGlzLmFwcGVuZENoaWxkKG4pKX1fcmVtb3ZlSXRlbSh0LHIpe3IucGFyZW50Tm9kZSYmci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpO2xldCBuPXRoaXMuX2dldEl0ZW1LZXkodCk7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuc2V0KG4sciksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KG4pLm5vdGlmeVBhdGgoImFjdGl2ZSIsITEpfV90cmltQ2FjaGUoKXtmb3IoO3RoaXMuX2xydUNhY2hlZEl0ZW1zLnNpemU+dGhpcy5fY2FjaGVTaXplOyl7bGV0W3RdPXRoaXMuX2xydUNhY2hlZEl0ZW1zLmtleXMoKTt0aGlzLl9scnVDYWNoZWRJdGVtcy5kZWxldGUodCksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZGVsZXRlKHQpfX19O0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiYXMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9pLnByb3RvdHlwZSwiaXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPaS5wcm90b3R5cGUsIl9jb250ZW50QWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsIl9kb21Cb290c3RyYXBwZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfY3RvciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sT2kucHJvdG90eXBlLCJfcmVuZGVyZWRJdGVtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsIl9yZW5kZXJlZFRlbXBsYXRlSW5zdCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsIl9scnVDYWNoZWRJdGVtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsIl9jYWNoZVNpemUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfZ2V0SXRlbUtleSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfaXNDb25uZWN0ZWQiLHZvaWQgMCk7RShbQnQoIl9pc0Nvbm5lY3RlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfYm9vdHN0cmFwRG9tIixudWxsKTtFKFtCdCgiX2NvbnRlbnRBY3RpdmUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE9pLnByb3RvdHlwZSwiX3VwZGF0ZUFjdGl2ZSIsbnVsbCk7RShbQnQoIl9yZW5kZXJlZEl0ZW1zLioiLCJfZG9tQm9vdHN0cmFwcGVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW09iamVjdF0pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPaS5wcm90b3R5cGUsIl91cGRhdGVEb20iLG51bGwpO0UoW0J0KCJfY2FjaGVTaXplIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPaS5wcm90b3R5cGUsIl90cmltQ2FjaGUiLG51bGwpO3ZhciBobj1jbGFzcyBleHRlbmRzIE9pe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRpc2FibGVQYWdpbmF0aW9uPSExLHRoaXMuZ2V0Q2F0ZWdvcnlJdGVtS2V5PXQ9PkpTT04uc3RyaW5naWZ5KHQpLHRoaXMuX2xpbWl0PTEyLHRoaXMuX2FjdGl2ZUluZGV4PTAsdGhpcy5fcGFnZUlucHV0UmF3VmFsdWU9IiIsdGhpcy5fcGFnZUlucHV0Rm9jdXNlZD0hMX1fY29tcHV0ZUNvdW50KCl7cmV0dXJuIHRoaXMuY2F0ZWdvcnkuaXRlbXMubGVuZ3RofWdldCBfaGFzTXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fY291bnQ+MX1fdG9nZ2xlUGFuZSgpe3RoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH1fY2hhbmdlQ29udGVudEFjdGl2ZSh0KXt0aGlzLl9jb250ZW50QWN0aXZlPXR9X29uUGFuZVJlbmRlcmVkQ2hhbmdlZCh0LHIpe3QmJnQhPT1yJiZ0aGlzLiQuaWZSZW5kZXJlZC5yZW5kZXIoKX1fY29tcHV0ZVBhbmVSZW5kZXJlZCh0KXtyZXR1cm4hKHQubWV0YWRhdGEudHlwZT09PU5hLlNFQVJDSF9SRVNVTFRTJiZ0Lm5hbWU9PT0iIil9Z2V0IF9pdGVtc1JlbmRlcmVkKCl7cmV0dXJuIHRoaXMuX3BhbmVSZW5kZXJlZCYmdGhpcy5vcGVuZWR9X2NvbXB1dGVJc1NlYXJjaFJlc3VsdHModCl7cmV0dXJuIHQ9PT1OYS5TRUFSQ0hfUkVTVUxUU31fY29tcHV0ZUlzSW52YWxpZFNlYXJjaFJlc3VsdHModCl7cmV0dXJuIHQudHlwZT09PU5hLlNFQVJDSF9SRVNVTFRTJiYhdC52YWxpZFJlZ2V4fV9jb21wdXRlSXNVbml2ZXJzYWxTZWFyY2hRdWVyeSh0KXtyZXR1cm4gdC50eXBlPT09TmEuU0VBUkNIX1JFU1VMVFMmJnQudW5pdmVyc2FsUmVnZXh9X2lzQ29tcG9zaXRlU2VhcmNoKCl7bGV0e3R5cGU6dCxjb21wb3NpdGVTZWFyY2g6cn09dGhpcy5jYXRlZ29yeS5tZXRhZGF0YTtyZXR1cm4gciYmdD09PU5hLlNFQVJDSF9SRVNVTFRTfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLm9wZW5lZD10aGlzLmluaXRpYWxPcGVuZWQ9PW51bGw/ITA6dGhpcy5pbml0aWFsT3BlbmVkLHRoaXMuX2xpbWl0TGlzdGVuZXI9KCk9Pnt0aGlzLnNldCgiX2xpbWl0IixXVygpKX0scVcodGhpcy5fbGltaXRMaXN0ZW5lciksdGhpcy5fbGltaXRMaXN0ZW5lcigpfWRldGFjaGVkKCl7R1codGhpcy5fbGltaXRMaXN0ZW5lcil9X3VwZGF0ZVJlbmRlcmVkSXRlbXMoKXt2YXIgdD10aGlzLl9pdGVtc1JlbmRlcmVkLHI9dGhpcy5fbGltaXQsbj10aGlzLl9hY3RpdmVJbmRleCxpPXRoaXMuZGlzYWJsZVBhZ2luYXRpb247aWYoIXQpcmV0dXJuO2xldCBvPU1hdGguZmxvb3Iobi9yKSxhPXRoaXMuY2F0ZWdvcnkuaXRlbXN8fFtdLHM9aT9hOmEuc2xpY2UobypyLChvKzEpKnIpO3RoaXMudXBkYXRlRG9tKHMpfV9saW1pdENoYW5nZWQodCl7dGhpcy5zZXRDYWNoZVNpemUodCoyKX1fZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCgpe3RoaXMuc2V0R2V0SXRlbUtleSh0aGlzLmdldENhdGVnb3J5SXRlbUtleSl9Z2V0IF9jdXJyZW50UGFnZSgpe3ZhciB0PXRoaXMuX2xpbWl0LHI9dGhpcy5fYWN0aXZlSW5kZXg7cmV0dXJuIE1hdGguZmxvb3Ioci90KSsxfV9jb21wdXRlUGFnZUNvdW50KHQscil7cmV0dXJuIHRoaXMuY2F0ZWdvcnk/TWF0aC5jZWlsKHRoaXMuY2F0ZWdvcnkuaXRlbXMubGVuZ3RoL3IpOjB9Z2V0IF9tdWx0aXBsZVBhZ2VzRXhpc3QoKXt2YXIgdD10aGlzLl9wYWdlQ291bnQscj10aGlzLmRpc2FibGVQYWdpbmF0aW9uO3JldHVybiFyJiZ0PjF9Z2V0IF9oYXNQcmV2aW91c1BhZ2UoKXt2YXIgdD10aGlzLl9jdXJyZW50UGFnZTtyZXR1cm4gdD4xfWdldCBfaGFzTmV4dFBhZ2UoKXt2YXIgdD10aGlzLl9jdXJyZW50UGFnZSxyPXRoaXMuX3BhZ2VDb3VudDtyZXR1cm4gdDxyfV9jb21wdXRlSW5wdXRXaWR0aCh0KXtyZXR1cm5gY2FsYygke3QudG9TdHJpbmcoKS5sZW5ndGh9ZW0gKyAyMHB4KWB9X3NldEFjdGl2ZUluZGV4KHQpe2xldCByPSh0aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSkubGVuZ3RoLTE7dD5yJiYodD1yKSx0PDAmJih0PTApLHRoaXMuc2V0KCJfYWN0aXZlSW5kZXgiLHQpfV9jbGFtcEFjdGl2ZUluZGV4KCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgpfV9wZXJmb3JtUHJldmlvdXNQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgtdGhpcy5fbGltaXQpfV9wZXJmb3JtTmV4dFBhZ2UoKXt0aGlzLl9zZXRBY3RpdmVJbmRleCh0aGlzLl9hY3RpdmVJbmRleCt0aGlzLl9saW1pdCl9X2NvbXB1dGVQYWdlSW5wdXRWYWx1ZSh0LHIsbil7cmV0dXJuIHQ/cjpuLnRvU3RyaW5nKCl9X2hhbmRsZVBhZ2VJbnB1dEV2ZW50KHQpe3RoaXMuc2V0KCJfcGFnZUlucHV0UmF3VmFsdWUiLHQudGFyZ2V0LnZhbHVlKTtsZXQgcj1OdW1iZXIodC50YXJnZXQudmFsdWV8fE5hTik7aWYoaXNOYU4ocikpcmV0dXJuO2xldCBuPU1hdGgubWF4KDEsTWF0aC5taW4ocix0aGlzLl9wYWdlQ291bnQpKS0xO3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2xpbWl0Km4pfV9oYW5kbGVQYWdlQ2hhbmdlRXZlbnQoKXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0aGlzLl9jdXJyZW50UGFnZS50b1N0cmluZygpKX1faGFuZGxlUGFnZUZvY3VzRXZlbnQoKXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0aGlzLl9wYWdlSW5wdXRWYWx1ZSksdGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMCl9X2hhbmRsZVBhZ2VCbHVyRXZlbnQoKXt0aGlzLnNldCgiX3BhZ2VJbnB1dEZvY3VzZWQiLCExKX1fdXBkYXRlUGFnZUlucHV0VmFsdWUodCl7dmFyIG47bGV0IHI9KG49dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6bi5xdWVyeVNlbGVjdG9yKCIjcGFnZS1pbnB1dCBpbnB1dCIpO3ImJihyLnZhbHVlPXQpfV91cGRhdGVJbnB1dFdpZHRoKCl7dGhpcy51cGRhdGVTdHlsZXMoeyItLXRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3LXBhZ2UtaW5wdXQtd2lkdGgiOnRoaXMuX2lucHV0V2lkdGh9KX19O2huLnRlbXBsYXRlPVFgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3BhbmVSZW5kZXJlZF1dIiBpZD0iaWZSZW5kZXJlZCI+CiAgICAgIDxidXR0b24gY2xhc3M9ImhlYWRpbmciIG9uLXRhcD0iX3RvZ2dsZVBhbmUiIG9wZW4tYnV0dG9uJD0iW1tvcGVuZWRdXSI+CiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNDb21wb3NpdGVTZWFyY2goY2F0ZWdvcnkpXV0iPgogICAgICAgICAgICAgIDxzcGFuPlRhZ3MgbWF0Y2hpbmcgbXVsdGlwbGUgZXhwZXJpbWVudHM8L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0ludmFsaWRTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICAgICAgPHNwYW4KICAgICAgICAgICAgICAgICAgPiZuYnNwOzxzdHJvbmc+KG1hbGZvcm1lZCByZWd1bGFyIGV4cHJlc3Npb24pPC9zdHJvbmc+PC9zcGFuCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfaXNDb21wb3NpdGVTZWFyY2goY2F0ZWdvcnkpXV0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaWdodCI+VGFncyBtYXRjaGluZyAvPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIiB0aXRsZSQ9IltbY2F0ZWdvcnkubmFtZV1dIgogICAgICAgICAgICAgICAgPltbY2F0ZWdvcnkubmFtZV1dPC9zcGFuCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaWdodCI+Lzwvc3Bhbj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVW5pdmVyc2FsU2VhcmNoUXVlcnldXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gKGFsbCB0YWdzKTwvc3Bhbj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNJbnZhbGlkU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgICAgIDxzcGFuPiA8c3Ryb25nPihtYWxmb3JtZWQgcmVndWxhciBleHByZXNzaW9uKTwvc3Ryb25nPjwvc3Bhbj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LW5hbWUiIHRpdGxlJD0iW1tjYXRlZ29yeS5uYW1lXV0iCiAgICAgICAgICAgICAgPltbY2F0ZWdvcnkubmFtZV1dPC9zcGFuCiAgICAgICAgICAgID4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudCI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlXV0iPgogICAgICAgICAgICA8c3Bhbj5bW19jb3VudF1dPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZXhwYW5kLW1vcmUiIGNsYXNzPSJleHBhbmQtYXJyb3ciPjwvaXJvbi1pY29uPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIDwhLS0gVE9ETyhzdGVwaGFud2xlZSk6IGludmVzdGlnYXRlIGZ1cnRoZXIuIEZvciBzb21lIHJlYXNvbiwKICAgICAgICB0cmFuc2l0aW9uZW5kIHRoYXQgdGhlIGlyb24tY29sbGFwc2UgcmVsaWVzIG9uIHNvbWV0aW1lcyBkb2VzIG5vdAogICAgICAgIHRyaWdnZXIgd2hlbiByZW5kZXJpbmcgYSBjaGFydCB3aXRoIGEgc3Bpbm5lci4gQSB0b3kgZXhhbXBsZSBjYW5ub3QKICAgICAgICByZXByb2R1Y2UgdGhpcyBidWcuIC0tPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Iltbb3BlbmVkXV0iIG5vLWFuaW1hdGlvbj0iIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgICAgIDxzcGFuIGlkPSJ0b3Atb2YtY29udGFpbmVyIj48L3NwYW4+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX211bHRpcGxlUGFnZXNFeGlzdF1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmlnLXBhZ2UtYnV0dG9ucyIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDEwcHg7Ij4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtUHJldmlvdXNQYWdlIgogICAgICAgICAgICAgICAgZGlzYWJsZWQkPSJbWyFfaGFzUHJldmlvdXNQYWdlXV0iCiAgICAgICAgICAgICAgICA+UHJldmlvdXMgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgIG9uLXRhcD0iX3BlcmZvcm1OZXh0UGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc05leHRQYWdlXV0iCiAgICAgICAgICAgICAgICA+TmV4dCBwYWdlPC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8ZGl2IGlkPSJpdGVtcyI+CiAgICAgICAgICAgIDxzbG90IG5hbWU9Iml0ZW1zIj48L3Nsb3Q+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfbXVsdGlwbGVQYWdlc0V4aXN0XV0iPgogICAgICAgICAgICA8ZGl2IGlkPSJjb250cm9scy1jb250YWluZXIiPgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZzogMCA1cHgiPgogICAgICAgICAgICAgICAgUGFnZQogICAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICAgIGlkPSJwYWdlLWlucHV0IgogICAgICAgICAgICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0PSIiCiAgICAgICAgICAgICAgICAgIG1pbj0iMSIKICAgICAgICAgICAgICAgICAgbWF4PSJbW19wYWdlQ291bnRdXSIKICAgICAgICAgICAgICAgICAgdmFsdWU9IltbX3BhZ2VJbnB1dFZhbHVlXV0iCiAgICAgICAgICAgICAgICAgIG9uLWlucHV0PSJfaGFuZGxlUGFnZUlucHV0RXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWNoYW5nZT0iX2hhbmRsZVBhZ2VDaGFuZ2VFdmVudCIKICAgICAgICAgICAgICAgICAgb24tZm9jdXM9Il9oYW5kbGVQYWdlRm9jdXNFdmVudCIKICAgICAgICAgICAgICAgICAgb24tYmx1cj0iX2hhbmRsZVBhZ2VCbHVyRXZlbnQiCiAgICAgICAgICAgICAgICA+PC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgIG9mIFtbX3BhZ2VDb3VudF1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmlnLXBhZ2UtYnV0dG9ucyIgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtUHJldmlvdXNQYWdlIgogICAgICAgICAgICAgICAgZGlzYWJsZWQkPSJbWyFfaGFzUHJldmlvdXNQYWdlXV0iCiAgICAgICAgICAgICAgICA+UHJldmlvdXMgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgIG9uLXRhcD0iX3BlcmZvcm1OZXh0UGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc05leHRQYWdlXV0iCiAgICAgICAgICAgICAgICA+TmV4dCBwYWdlPC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbjogMCA1cHggMXB4IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmaXJzdC1vZi10eXBlKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgfQoKICAgICAgOmhvc3QoOmxhc3Qtb2YtdHlwZSkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDVweCB2YXIoLS10Yi1yYWlzZWQtYnV0dG9uLXNoYWRvdy1jb2xvcik7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nOjotbW96LWZvY3VzLWlubmVyIHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CiAgICAgIH0KCiAgICAgIFtvcGVuLWJ1dHRvbl0gewogICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIC5leHBhbmQtYXJyb3cgewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlWigxODBkZWcpOwogICAgICB9CgogICAgICAubmFtZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmxpZ2h0IHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICB9CgogICAgICAuY2F0ZWdvcnktbmFtZSB7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHBhZGRpbmc6IDJweCAwOwogICAgICB9CgogICAgICAuY291bnQgewogICAgICAgIG1hcmdpbjogMCA1cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTUwMCk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGZsZXg6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nOjotbW96LWZvY3VzLWlubmVyIHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZWRlZGU7CiAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgfQoKICAgICAgLmxpZ2h0IHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICB9CgogICAgICAjY29udHJvbHMtY29udGFpbmVyIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjY29udHJvbHMtY29udGFpbmVyIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuYmlnLXBhZ2UtYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLmJpZy1wYWdlLWJ1dHRvbnMgcGFwZXItYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZsZXgtYmFzaXM6IDA7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgLmJpZy1wYWdlLWJ1dHRvbnMgcGFwZXItYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgfQoKICAgICAgc2xvdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQoKICAgICAgOjpzbG90dGVkKFtzbG90PSdpdGVtcyddKSB7CiAgICAgICAgLyogVG9vbHRpcCBmb3IgZGVzY3JpcHRpb25zIGFuZCBvdGhlcnMgYnJlYWsgd2l0aCBtb3JlIHN0cmljdCBvbmVzLiAqLwogICAgICAgIGNvbnRhaW46IHN0eWxlOwogICAgICB9CgogICAgICAjcGFnZS1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiB2YXIoLS10Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldy1wYWdlLWlucHV0LXdpZHRoLCAxMDAlKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGhuLnByb3RvdHlwZSwiY2F0ZWdvcnkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsImluaXRpYWxPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJvcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsImRpc2FibGVQYWdpbmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZUNvdW50KGNhdGVnb3J5Lml0ZW1zLiopIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxobi5wcm90b3R5cGUsIl9jb3VudCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlUGFuZVJlbmRlcmVkKGNhdGVnb3J5KSIsb2JzZXJ2ZXI6Il9vblBhbmVSZW5kZXJlZENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9wYW5lUmVuZGVyZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzU2VhcmNoUmVzdWx0cyhjYXRlZ29yeS5tZXRhZGF0YS50eXBlKSJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGhuLnByb3RvdHlwZSwiX2lzU2VhcmNoUmVzdWx0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNJbnZhbGlkU2VhcmNoUmVzdWx0cyhjYXRlZ29yeS5tZXRhZGF0YSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc0ludmFsaWRTZWFyY2hSZXN1bHRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5KGNhdGVnb3J5Lm1ldGFkYXRhKSJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGhuLnByb3RvdHlwZSwiX2lzVW5pdmVyc2FsU2VhcmNoUXVlcnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9nZXRDYXRlZ29yeUl0ZW1LZXlDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobi5wcm90b3R5cGUsImdldENhdGVnb3J5SXRlbUtleSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX2xpbWl0Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0saG4ucHJvdG90eXBlLCJfbGltaXQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0saG4ucHJvdG90eXBlLCJfYWN0aXZlSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlUGFnZUNvdW50KGNhdGVnb3J5Lml0ZW1zLiosIF9saW1pdCkifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX3BhZ2VDb3VudCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVJbnB1dFdpZHRoKF9wYWdlQ291bnQpIixvYnNlcnZlcjoiX3VwZGF0ZUlucHV0V2lkdGgifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX2lucHV0V2lkdGgiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUGFnZUlucHV0VmFsdWUoX3BhZ2VJbnB1dEZvY3VzZWQsIF9wYWdlSW5wdXRSYXdWYWx1ZSwgX2N1cnJlbnRQYWdlKSIsb2JzZXJ2ZXI6Il91cGRhdGVQYWdlSW5wdXRWYWx1ZSJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0saG4ucHJvdG90eXBlLCJfcGFnZUlucHV0VmFsdWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0saG4ucHJvdG90eXBlLCJfcGFnZUlucHV0UmF3VmFsdWUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9wYWdlSW5wdXRGb2N1c2VkIix2b2lkIDApO0UoW1J0KCJfY291bnQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfaGFzTXVsdGlwbGUiLG51bGwpO0UoW0J0KCJvcGVuZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbQm9vbGVhbl0pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxobi5wcm90b3R5cGUsIl9jaGFuZ2VDb250ZW50QWN0aXZlIixudWxsKTtFKFtSdCgib3BlbmVkIiwiX3BhbmVSZW5kZXJlZCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxobi5wcm90b3R5cGUsIl9pdGVtc1JlbmRlcmVkIixudWxsKTtFKFtCdCgiX2l0ZW1zUmVuZGVyZWQiLCJjYXRlZ29yeS5pdGVtcy4qIiwiX2xpbWl0IiwiX2FjdGl2ZUluZGV4IiwiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxobi5wcm90b3R5cGUsIl91cGRhdGVSZW5kZXJlZEl0ZW1zIixudWxsKTtFKFtSdCgiX2xpbWl0IiwiX2FjdGl2ZUluZGV4IiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfY3VycmVudFBhZ2UiLG51bGwpO0UoW1J0KCJfcGFnZUNvdW50IiwiZGlzYWJsZVBhZ2luYXRpb24iKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfbXVsdGlwbGVQYWdlc0V4aXN0IixudWxsKTtFKFtSdCgiX2N1cnJlbnRQYWdlIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc1ByZXZpb3VzUGFnZSIsbnVsbCk7RShbUnQoIl9jdXJyZW50UGFnZSIsIl9wYWdlQ291bnQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfaGFzTmV4dFBhZ2UiLG51bGwpO0UoW0J0KCJjYXRlZ29yeS5pdGVtcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxobi5wcm90b3R5cGUsIl9jbGFtcEFjdGl2ZUluZGV4IixudWxsKTtobj1FKFt5dCgidGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXciKV0saG4pO3ZhciBIMHQ9RWUoT2UoKSwxKTt2YXIgQjk9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5saXN0ZW5lcj10fX0sYnA9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJlcXVlc3RNYW5hZ2VyPW5ldyBBZSgxKSx0aGlzLl9saXN0ZW5lcnM9bmV3IFNldCx0aGlzLmluaXRpYWxpemVkPSExfXJlZnJlc2goKXtyZXR1cm4gdGhpcy5sb2FkKCkudGhlbigoKT0+e3RoaXMuaW5pdGlhbGl6ZWQ9ITB9KX1hZGRMaXN0ZW5lcih0KXtsZXQgcj1uZXcgQjkodCk7cmV0dXJuIHRoaXMuX2xpc3RlbmVycy5hZGQocikscn1yZW1vdmVMaXN0ZW5lckJ5S2V5KHQpe3RoaXMuX2xpc3RlbmVycy5kZWxldGUodCl9ZW1pdENoYW5nZSgpe3RoaXMuX2xpc3RlbmVycy5mb3JFYWNoKHQ9Pnt0cnl7dC5saXN0ZW5lcigpfWNhdGNoKHIpe319KX19O3ZhciBIOT1jbGFzcyBleHRlbmRzIGJwe2xvYWQoKXtsZXQgdD12ZSgpLmVudmlyb25tZW50KCk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntsZXQgbj17ZGF0YUxvY2F0aW9uOnIuZGF0YV9sb2NhdGlvbix3aW5kb3dUaXRsZTpyLndpbmRvd190aXRsZX07ci5leHBlcmltZW50X25hbWUhPT12b2lkIDAmJihuLmV4cGVyaW1lbnROYW1lPXIuZXhwZXJpbWVudF9uYW1lKSxyLmV4cGVyaW1lbnRfZGVzY3JpcHRpb24hPT12b2lkIDAmJihuLmV4cGVyaW1lbnREZXNjcmlwdGlvbj1yLmV4cGVyaW1lbnRfZGVzY3JpcHRpb24pLHIuY3JlYXRpb25fdGltZSE9PXZvaWQgMCYmKG4uY3JlYXRpb25UaW1lPXIuY3JlYXRpb25fdGltZSksIUgwdC5pc0VxdWFsKHRoaXMuZW52aXJvbm1lbnQsbikmJih0aGlzLmVudmlyb25tZW50PW4sdGhpcy5lbWl0Q2hhbmdlKCkpfSl9Z2V0RGF0YUxvY2F0aW9uKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5kYXRhTG9jYXRpb246IiJ9Z2V0V2luZG93VGl0bGUoKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudD90aGlzLmVudmlyb25tZW50LndpbmRvd1RpdGxlOiIifWdldEV4cGVyaW1lbnROYW1lKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5leHBlcmltZW50TmFtZToiIn1nZXRFeHBlcmltZW50RGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudD90aGlzLmVudmlyb25tZW50LmV4cGVyaW1lbnREZXNjcmlwdGlvbjoiIn1nZXRDcmVhdGlvblRpbWUoKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudD90aGlzLmVudmlyb25tZW50LmNyZWF0aW9uVGltZTpudWxsfX0saWI9bmV3IEg5O3ZhciBWMHQ9RWUoT2UoKSwxKTt2YXIgVjk9Y2xhc3MgZXh0ZW5kcyBicHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcnVucz1bXX1sb2FkKCl7bGV0IHQ9dmUoKS5ydW5zKCk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntWMHQuaXNFcXVhbCh0aGlzLl9ydW5zLHIpfHwodGhpcy5fcnVucz1yLHRoaXMuZW1pdENoYW5nZSgpKX0pfWdldFJ1bnMoKXtyZXR1cm4gdGhpcy5fcnVucy5zbGljZSgpfX0sd3A9bmV3IFY5O3ZhciBWcj17fTtLcyhWcix7Rm9ybWF0U3BlY2lmaWVyOigpPT5xRSxhY3RpdmU6KCk9Pk8xdCxhcmM6KCk9Pk5TdCxhcmVhOigpPT5POCxhcmVhUmFkaWFsOigpPT5hJCxhc2NlbmRpbmc6KCk9Pm9hLGF1dG9UeXBlOigpPT5vaixheGlzQm90dG9tOigpPT5LOSxheGlzTGVmdDooKT0+bGIsYXhpc1JpZ2h0OigpPT51X3QsYXhpc1RvcDooKT0+Y190LGJpc2VjdDooKT0+eXMsYmlzZWN0TGVmdDooKT0+RzB0LGJpc2VjdFJpZ2h0OigpPT5ZVyxiaXNlY3RvcjooKT0+b2IsYmxvYjooKT0+SXZ0LGJydXNoOigpPT5xTCxicnVzaFNlbGVjdGlvbjooKT0+VkwsYnJ1c2hYOigpPT5VMXQsYnJ1c2hZOigpPT5VTCxidWZmZXI6KCk9Pkx2dCxjaG9yZDooKT0+RzF0LGNsaWVudFBvaW50OigpPT5EbSxjbHVzdGVyOigpPT5IYnQsY29sb3I6KCk9PnJjLGNvbnRvdXJEZW5zaXR5OigpPT5odnQsY29udG91cnM6KCk9PktMLGNyZWF0ZTooKT0+cnl0LGNyZWF0b3I6KCk9PlJtLGNyb3NzOigpPT5VOSxjc3Y6KCk9PlJ2dCxjc3ZGb3JtYXQ6KCk9Pmd2dCxjc3ZGb3JtYXRCb2R5OigpPT5fdnQsY3N2Rm9ybWF0Um93OigpPT52dnQsY3N2Rm9ybWF0Um93czooKT0+eXZ0LGNzdkZvcm1hdFZhbHVlOigpPT54dnQsY3N2UGFyc2U6KCk9PkNiLGNzdlBhcnNlUm93czooKT0+bXZ0LGN1YmVoZWxpeDooKT0+bGEsY3VydmVCYXNpczooKT0+RzgsY3VydmVCYXNpc0Nsb3NlZDooKT0+WFN0LGN1cnZlQmFzaXNPcGVuOigpPT5LU3QsY3VydmVCdW5kbGU6KCk9PkpTdCxjdXJ2ZUNhcmRpbmFsOigpPT5RU3QsY3VydmVDYXJkaW5hbENsb3NlZDooKT0+dDN0LGN1cnZlQ2FyZGluYWxPcGVuOigpPT5lM3QsY3VydmVDYXRtdWxsUm9tOigpPT5uM3QsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOigpPT5vM3QsY3VydmVDYXRtdWxsUm9tT3BlbjooKT0+czN0LGN1cnZlTGluZWFyOigpPT5ZaCxjdXJ2ZUxpbmVhckNsb3NlZDooKT0+YzN0LGN1cnZlTW9ub3RvbmVYOigpPT5tM3QsY3VydmVNb25vdG9uZVk6KCk9PmczdCxjdXJ2ZU5hdHVyYWw6KCk9PnYzdCxjdXJ2ZVN0ZXA6KCk9PngzdCxjdXJ2ZVN0ZXBBZnRlcjooKT0+dzN0LGN1cnZlU3RlcEJlZm9yZTooKT0+YjN0LGN1c3RvbUV2ZW50OigpPT5NcCxkZXNjZW5kaW5nOigpPT5ZMHQsZGV2aWF0aW9uOigpPT5HOSxkaXNwYXRjaDooKT0+dnMsZHJhZzooKT0+cGIsZHJhZ0Rpc2FibGU6KCk9PnptLGRyYWdFbmFibGU6KCk9PkZtLGRzdjooKT0+YWosZHN2Rm9ybWF0OigpPT5XbSxlYXNlQmFjazooKT0+REwsZWFzZUJhY2tJbjooKT0+elksZWFzZUJhY2tJbk91dDooKT0+REwsZWFzZUJhY2tPdXQ6KCk9PkZZLGVhc2VCb3VuY2U6KCk9PlBfLGVhc2VCb3VuY2VJbjooKT0+TlksZWFzZUJvdW5jZUluT3V0OigpPT5EWSxlYXNlQm91bmNlT3V0OigpPT5QXyxlYXNlQ2lyY2xlOigpPT5STCxlYXNlQ2lyY2xlSW46KCk9PkxZLGVhc2VDaXJjbGVJbk91dDooKT0+UkwsZWFzZUNpcmNsZU91dDooKT0+a1ksZWFzZUN1YmljOigpPT54cyxlYXNlQ3ViaWNJbjooKT0+YlksZWFzZUN1YmljSW5PdXQ6KCk9PnhzLGVhc2VDdWJpY091dDooKT0+d1ksZWFzZUVsYXN0aWM6KCk9Pk9MLGVhc2VFbGFzdGljSW46KCk9PlZZLGVhc2VFbGFzdGljSW5PdXQ6KCk9PlVZLGVhc2VFbGFzdGljT3V0OigpPT5PTCxlYXNlRXhwOigpPT5rTCxlYXNlRXhwSW46KCk9PlBZLGVhc2VFeHBJbk91dDooKT0+a0wsZWFzZUV4cE91dDooKT0+SVksZWFzZUxpbmVhcjooKT0+eVksZWFzZVBvbHk6KCk9PklMLGVhc2VQb2x5SW46KCk9Pk1ZLGVhc2VQb2x5SW5PdXQ6KCk9PklMLGVhc2VQb2x5T3V0OigpPT5FWSxlYXNlUXVhZDooKT0+UEwsZWFzZVF1YWRJbjooKT0+dlksZWFzZVF1YWRJbk91dDooKT0+UEwsZWFzZVF1YWRPdXQ6KCk9PnhZLGVhc2VTaW46KCk9PkxMLGVhc2VTaW5JbjooKT0+VFksZWFzZVNpbkluT3V0OigpPT5MTCxlYXNlU2luT3V0OigpPT5DWSxlbnRyaWVzOigpPT5vdnQsZXZlbnQ6KCk9PnF0LGV4dGVudDooKT0+YWEsZm9yY2VDZW50ZXI6KCk9Pkh2dCxmb3JjZUNvbGxpZGU6KCk9Pm94dCxmb3JjZUxpbms6KCk9PnN4dCxmb3JjZU1hbnlCb2R5OigpPT5oeHQsZm9yY2VSYWRpYWw6KCk9PmZ4dCxmb3JjZVNpbXVsYXRpb246KCk9PnV4dCxmb3JjZVg6KCk9PnB4dCxmb3JjZVk6KCk9PmR4dCxmb3JtYXQ6KCk9PnhuLGZvcm1hdERlZmF1bHRMb2NhbGU6KCk9PnJrLGZvcm1hdExvY2FsZTooKT0+dGssZm9ybWF0UHJlZml4OigpPT5HRSxmb3JtYXRTcGVjaWZpZXI6KCk9PkxwLGdlb0FsYmVyczooKT0+VmssZ2VvQWxiZXJzVXNhOigpPT5UYnQsZ2VvQXJlYTooKT0+UHh0LGdlb0F6aW11dGhhbEVxdWFsQXJlYTooKT0+Q2J0LGdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdzooKT0+cWssZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnQ6KCk9PkFidCxnZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdzooKT0+R2ssZ2VvQm91bmRzOigpPT56eHQsZ2VvQ2VudHJvaWQ6KCk9PnF4dCxnZW9DaXJjbGU6KCk9Plh4dCxnZW9DbGlwQW50aW1lcmlkaWFuOigpPT50NSxnZW9DbGlwQ2lyY2xlOigpPT5DayxnZW9DbGlwRXh0ZW50OigpPT5aeHQsZ2VvQ2xpcFJlY3RhbmdsZTooKT0+RHAsZ2VvQ29uaWNDb25mb3JtYWw6KCk9PklidCxnZW9Db25pY0NvbmZvcm1hbFJhdzooKT0+WGosZ2VvQ29uaWNFcXVhbEFyZWE6KCk9PldfLGdlb0NvbmljRXF1YWxBcmVhUmF3OigpPT5ZaixnZW9Db25pY0VxdWlkaXN0YW50OigpPT5rYnQsZ2VvQ29uaWNFcXVpZGlzdGFudFJhdzooKT0+JGosZ2VvQ29udGFpbnM6KCk9PmlidCxnZW9EaXN0YW5jZTooKT0+TmIsZ2VvRXF1YWxFYXJ0aDooKT0+UmJ0LGdlb0VxdWFsRWFydGhSYXc6KCk9PmprLGdlb0VxdWlyZWN0YW5ndWxhcjooKT0+TGJ0LGdlb0VxdWlyZWN0YW5ndWxhclJhdzooKT0+al8sZ2VvR25vbW9uaWM6KCk9Pk5idCxnZW9Hbm9tb25pY1JhdzooKT0+WGssZ2VvR3JhdGljdWxlOigpPT5SayxnZW9HcmF0aWN1bGUxMDooKT0+c2J0LGdlb0lkZW50aXR5OigpPT5EYnQsZ2VvSW50ZXJwb2xhdGU6KCk9PmxidCxnZW9MZW5ndGg6KCk9PkxrLGdlb01lcmNhdG9yOigpPT5QYnQsZ2VvTWVyY2F0b3JSYXc6KCk9PllfLGdlb05hdHVyYWxFYXJ0aDE6KCk9Pk9idCxnZW9OYXR1cmFsRWFydGgxUmF3OigpPT4kayxnZW9PcnRob2dyYXBoaWM6KCk9PnpidCxnZW9PcnRob2dyYXBoaWNSYXc6KCk9PktrLGdlb1BhdGg6KCk9PmJidCxnZW9Qcm9qZWN0aW9uOigpPT5NaSxnZW9Qcm9qZWN0aW9uTXV0YXRvcjooKT0+czUsZ2VvUm90YXRpb246KCk9PmJrLGdlb1N0ZXJlb2dyYXBoaWM6KCk9PkZidCxnZW9TdGVyZW9ncmFwaGljUmF3OigpPT5aayxnZW9TdHJlYW06KCk9PnZvLGdlb1RyYW5zZm9ybTooKT0+d2J0LGdlb1RyYW5zdmVyc2VNZXJjYXRvcjooKT0+QmJ0LGdlb1RyYW5zdmVyc2VNZXJjYXRvclJhdzooKT0+SmssZ3JheTooKT0+eXl0LGhjbDooKT0+Z2IsaGllcmFyY2h5OigpPT5mNSxoaXN0b2dyYW06KCk9PlowdCxoc2w6KCk9PlZtLGh0bWw6KCk9PkZ2dCxpbWFnZTooKT0+RHZ0LGludGVycG9sYXRlOigpPT5uYyxpbnRlcnBvbGF0ZUFycmF5OigpPT5JeXQsaW50ZXJwb2xhdGVCYXNpczooKT0+c0wsaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZDooKT0+bEwsaW50ZXJwb2xhdGVCbHVlczooKT0+bVN0LGludGVycG9sYXRlQnJCRzooKT0+WHd0LGludGVycG9sYXRlQnVHbjooKT0+blN0LGludGVycG9sYXRlQnVQdTooKT0+aVN0LGludGVycG9sYXRlQ2l2aWRpczooKT0+YlN0LGludGVycG9sYXRlQ29vbDooKT0+TVN0LGludGVycG9sYXRlQ3ViZWhlbGl4OigpPT5qeXQsaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0OigpPT53U3QsaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nOigpPT5FXyxpbnRlcnBvbGF0ZURhdGU6KCk9PmhMLGludGVycG9sYXRlRGlzY3JldGU6KCk9Pkx5dCxpbnRlcnBvbGF0ZUduQnU6KCk9Pm9TdCxpbnRlcnBvbGF0ZUdyZWVuczooKT0+Z1N0LGludGVycG9sYXRlR3JleXM6KCk9Pl9TdCxpbnRlcnBvbGF0ZUhjbDooKT0+R3l0LGludGVycG9sYXRlSGNsTG9uZzooKT0+V3l0LGludGVycG9sYXRlSHNsOigpPT5WeXQsaW50ZXJwb2xhdGVIc2xMb25nOigpPT5VeXQsaW50ZXJwb2xhdGVIdWU6KCk9Pmt5dCxpbnRlcnBvbGF0ZUluZmVybm86KCk9PklTdCxpbnRlcnBvbGF0ZUxhYjooKT0+TV8saW50ZXJwb2xhdGVNYWdtYTooKT0+UFN0LGludGVycG9sYXRlTnVtYmVyOigpPT56aSxpbnRlcnBvbGF0ZU51bWJlckFycmF5OigpPT55YixpbnRlcnBvbGF0ZU9iamVjdDooKT0+ZkwsaW50ZXJwb2xhdGVPclJkOigpPT5hU3QsaW50ZXJwb2xhdGVPcmFuZ2VzOigpPT54U3QsaW50ZXJwb2xhdGVQUkduOigpPT4kd3QsaW50ZXJwb2xhdGVQaVlHOigpPT5Ld3QsaW50ZXJwb2xhdGVQbGFzbWE6KCk9PkxTdCxpbnRlcnBvbGF0ZVB1QnU6KCk9PmxTdCxpbnRlcnBvbGF0ZVB1QnVHbjooKT0+c1N0LGludGVycG9sYXRlUHVPcjooKT0+Wnd0LGludGVycG9sYXRlUHVSZDooKT0+Y1N0LGludGVycG9sYXRlUHVycGxlczooKT0+eVN0LGludGVycG9sYXRlUmFpbmJvdzooKT0+RVN0LGludGVycG9sYXRlUmRCdTooKT0+Snd0LGludGVycG9sYXRlUmRHeTooKT0+UXd0LGludGVycG9sYXRlUmRQdTooKT0+dVN0LGludGVycG9sYXRlUmRZbEJ1OigpPT50U3QsaW50ZXJwb2xhdGVSZFlsR246KCk9PmVTdCxpbnRlcnBvbGF0ZVJlZHM6KCk9PnZTdCxpbnRlcnBvbGF0ZVJnYjooKT0+cW0saW50ZXJwb2xhdGVSZ2JCYXNpczooKT0+Y0wsaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZDooKT0+UHl0LGludGVycG9sYXRlUm91bmQ6KCk9PnBMLGludGVycG9sYXRlU2luZWJvdzooKT0+VFN0LGludGVycG9sYXRlU3BlY3RyYWw6KCk9PnJTdCxpbnRlcnBvbGF0ZVN0cmluZzooKT0+dmIsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M6KCk9PmdMLGludGVycG9sYXRlVHJhbnNmb3JtU3ZnOigpPT5fTCxpbnRlcnBvbGF0ZVR1cmJvOigpPT5DU3QsaW50ZXJwb2xhdGVWaXJpZGlzOigpPT5BU3QsaW50ZXJwb2xhdGVXYXJtOigpPT5TU3QsaW50ZXJwb2xhdGVZbEduOigpPT5mU3QsaW50ZXJwb2xhdGVZbEduQnU6KCk9PmhTdCxpbnRlcnBvbGF0ZVlsT3JCcjooKT0+cFN0LGludGVycG9sYXRlWWxPclJkOigpPT5kU3QsaW50ZXJwb2xhdGVab29tOigpPT55TCxpbnRlcnJ1cHQ6KCk9Pmh1LGludGVydmFsOigpPT5KeXQsaXNvRm9ybWF0OigpPT5Sd3QsaXNvUGFyc2U6KCk9Pk53dCxqc29uOigpPT5PdnQsa2V5czooKT0+WEwsbGFiOigpPT53XyxsY2g6KCk9Pnh5dCxsaW5lOigpPT52dSxsaW5lUmFkaWFsOigpPT5vJCxsaW5rSG9yaXpvbnRhbDooKT0+SFN0LGxpbmtSYWRpYWw6KCk9PlVTdCxsaW5rVmVydGljYWw6KCk9PlZTdCxsb2NhbDooKT0+dEwsbWFwOigpPT5KaSxtYXRjaGVyOigpPT51YixtYXg6KCk9Pmx1LG1lYW46KCk9PnRfdCxtZWRpYW46KCk9PmVfdCxtZXJnZTooKT0+SW0sbWluOigpPT5MbSxtb3VzZTooKT0+em8sbmFtZXNwYWNlOigpPT5QaCxuYW1lc3BhY2VzOigpPT53RSxuZXN0OigpPT5aMXQsbm93OigpPT5BcCxwYWNrOigpPT5jMnQscGFja0VuY2xvc2U6KCk9PnQ4LHBhY2tTaWJsaW5nczooKT0+bzJ0LHBhaXJzOigpPT5XMHQscGFydGl0aW9uOigpPT51MnQscGF0aDooKT0+YnMscGVybXV0ZTooKT0+cl90LHBpZTooKT0+RlN0LHBpZWNld2lzZTooKT0+bVkscG9pbnRSYWRpYWw6KCk9Pmx5LHBvbHlnb25BcmVhOigpPT52MnQscG9seWdvbkNlbnRyb2lkOigpPT54MnQscG9seWdvbkNvbnRhaW5zOigpPT5NMnQscG9seWdvbkh1bGw6KCk9PlMydCxwb2x5Z29uTGVuZ3RoOigpPT5FMnQscHJlY2lzaW9uRml4ZWQ6KCk9Pm5rLHByZWNpc2lvblByZWZpeDooKT0+aWsscHJlY2lzaW9uUm91bmQ6KCk9Pm9rLHF1YWR0cmVlOigpPT56aCxxdWFudGlsZTooKT0+c2EscXVhbnRpemU6KCk9Plh5dCxyYWRpYWxBcmVhOigpPT5hJCxyYWRpYWxMaW5lOigpPT5vJCxyYW5kb21CYXRlczooKT0+QTJ0LHJhbmRvbUV4cG9uZW50aWFsOigpPT5QMnQscmFuZG9tSXJ3aW5IYWxsOigpPT5hOCxyYW5kb21Mb2dOb3JtYWw6KCk9PkMydCxyYW5kb21Ob3JtYWw6KCk9Pm84LHJhbmRvbVVuaWZvcm06KCk9PlQydCxyYW5nZTooKT0+SXIscmdiOigpPT5jdSxyaWJib246KCk9PmoxdCxzY2FsZUJhbmQ6KCk9PlFtLHNjYWxlRGl2ZXJnaW5nOigpPT5QOCxzY2FsZURpdmVyZ2luZ0xvZzooKT0+QVgsc2NhbGVEaXZlcmdpbmdQb3c6KCk9Pkk4LHNjYWxlRGl2ZXJnaW5nU3FydDooKT0+Rnd0LHNjYWxlRGl2ZXJnaW5nU3ltbG9nOigpPT5QWCxzY2FsZUlkZW50aXR5OigpPT5jOCxzY2FsZUltcGxpY2l0OigpPT5zOCxzY2FsZUxpbmVhcjooKT0+em4sc2NhbGVMb2c6KCk9PmNjLHNjYWxlT3JkaW5hbDooKT0+Z3Usc2NhbGVQb2ludDooKT0+dGcsc2NhbGVQb3c6KCk9PktfLHNjYWxlUXVhbnRpbGU6KCk9PmVnLHNjYWxlUXVhbnRpemU6KCk9PnFiLHNjYWxlU2VxdWVudGlhbDooKT0+RTgsc2NhbGVTZXF1ZW50aWFsTG9nOigpPT5UWCxzY2FsZVNlcXVlbnRpYWxQb3c6KCk9PlQ4LHNjYWxlU2VxdWVudGlhbFF1YW50aWxlOigpPT5DOCxzY2FsZVNlcXVlbnRpYWxTcXJ0OigpPT56d3Qsc2NhbGVTZXF1ZW50aWFsU3ltbG9nOigpPT5DWCxzY2FsZVNxcnQ6KCk9PlYydCxzY2FsZVN5bWxvZzooKT0+aDgsc2NhbGVUaHJlc2hvbGQ6KCk9PmY4LHNjYWxlVGltZTooKT0+WWIsc2NhbGVVdGM6KCk9Pk93dCxzY2FuOigpPT5uX3Qsc2NoZW1lQWNjZW50OigpPT5Cd3Qsc2NoZW1lQmx1ZXM6KCk9PlpYLHNjaGVtZUJyQkc6KCk9PklYLHNjaGVtZUJ1R246KCk9PkJYLHNjaGVtZUJ1UHU6KCk9PkhYLHNjaGVtZUNhdGVnb3J5MTA6KCk9PmpiLHNjaGVtZURhcmsyOigpPT5Id3Qsc2NoZW1lR25CdTooKT0+Vlgsc2NoZW1lR3JlZW5zOigpPT5KWCxzY2hlbWVHcmV5czooKT0+UVgsc2NoZW1lT3JSZDooKT0+VVgsc2NoZW1lT3JhbmdlczooKT0+ciQsc2NoZW1lUFJHbjooKT0+TFgsc2NoZW1lUGFpcmVkOigpPT5Wd3Qsc2NoZW1lUGFzdGVsMTooKT0+VXd0LHNjaGVtZVBhc3RlbDI6KCk9PnF3dCxzY2hlbWVQaVlHOigpPT5rWCxzY2hlbWVQdUJ1OigpPT5HWCxzY2hlbWVQdUJ1R246KCk9PnFYLHNjaGVtZVB1T3I6KCk9PlJYLHNjaGVtZVB1UmQ6KCk9PldYLHNjaGVtZVB1cnBsZXM6KCk9PnQkLHNjaGVtZVJkQnU6KCk9Pk5YLHNjaGVtZVJkR3k6KCk9PkRYLHNjaGVtZVJkUHU6KCk9PllYLHNjaGVtZVJkWWxCdTooKT0+T1gsc2NoZW1lUmRZbEduOigpPT56WCxzY2hlbWVSZWRzOigpPT5lJCxzY2hlbWVTZXQxOigpPT5Hd3Qsc2NoZW1lU2V0MjooKT0+V3d0LHNjaGVtZVNldDM6KCk9Pll3dCxzY2hlbWVTcGVjdHJhbDooKT0+Rlgsc2NoZW1lVGFibGVhdTEwOigpPT5qd3Qsc2NoZW1lWWxHbjooKT0+WFgsc2NoZW1lWWxHbkJ1OigpPT5qWCxzY2hlbWVZbE9yQnI6KCk9PiRYLHNjaGVtZVlsT3JSZDooKT0+S1gsc2VsZWN0OigpPT5IdCxzZWxlY3RBbGw6KCk9PkVwLHNlbGVjdGlvbjooKT0+SWgsc2VsZWN0b3I6KCk9Pk5tLHNlbGVjdG9yQWxsOigpPT5jYixzZXQ6KCk9PnR2dCxzaHVmZmxlOigpPT5pX3Qsc3RhY2s6KCk9PlMzdCxzdGFja09mZnNldERpdmVyZ2luZzooKT0+RTN0LHN0YWNrT2Zmc2V0RXhwYW5kOigpPT5NM3Qsc3RhY2tPZmZzZXROb25lOigpPT54dSxzdGFja09mZnNldFNpbGhvdWV0dGU6KCk9PlQzdCxzdGFja09mZnNldFdpZ2dsZTooKT0+QzN0LHN0YWNrT3JkZXJBcHBlYXJhbmNlOigpPT5LOCxzdGFja09yZGVyQXNjZW5kaW5nOigpPT5aOCxzdGFja09yZGVyRGVzY2VuZGluZzooKT0+QTN0LHN0YWNrT3JkZXJJbnNpZGVPdXQ6KCk9PlAzdCxzdGFja09yZGVyTm9uZTooKT0+YnUsc3RhY2tPcmRlclJldmVyc2U6KCk9PkkzdCxzdHJhdGlmeTooKT0+cDJ0LHN0eWxlOigpPT5TcCxzdW06KCk9Pm9fdCxzdmc6KCk9PkJ2dCxzeW1ib2w6KCk9PllTdCxzeW1ib2xDaXJjbGU6KCk9Pkw1LHN5bWJvbENyb3NzOigpPT5GOCxzeW1ib2xEaWFtb25kOigpPT5COCxzeW1ib2xTcXVhcmU6KCk9PlY4LHN5bWJvbFN0YXI6KCk9Pkg4LHN5bWJvbFRyaWFuZ2xlOigpPT5VOCxzeW1ib2xXeWU6KCk9PnE4LHN5bWJvbHM6KCk9PldTdCx0ZXh0OigpPT5EXyx0aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzOigpPT5KMHQsdGhyZXNob2xkU2NvdHQ6KCk9PlEwdCx0aHJlc2hvbGRTdHVyZ2VzOigpPT5zYix0aWNrRm9ybWF0OigpPT5sOCx0aWNrSW5jcmVtZW50OigpPT54Xyx0aWNrU3RlcDooKT0+dGwsdGlja3M6KCk9PmFiLHRpbWVEYXk6KCk9PnR5LHRpbWVEYXlzOigpPT5YMnQsdGltZUZvcm1hdDooKT0+UzUsdGltZUZvcm1hdERlZmF1bHRMb2NhbGU6KCk9Pnc4LHRpbWVGb3JtYXRMb2NhbGU6KCk9Pnc1LHRpbWVGcmlkYXk6KCk9PmhYLHRpbWVGcmlkYXlzOigpPT5RMnQsdGltZUhvdXI6KCk9Pl84LHRpbWVIb3VyczooKT0+WTJ0LHRpbWVJbnRlcnZhbDooKT0+YnIsdGltZU1pbGxpc2Vjb25kOigpPT5aXyx0aW1lTWlsbGlzZWNvbmRzOigpPT5zWCx0aW1lTWludXRlOigpPT5nOCx0aW1lTWludXRlczooKT0+RzJ0LHRpbWVNb25kYXk6KCk9PnJ5LHRpbWVNb25kYXlzOigpPT4kMnQsdGltZU1vbnRoOigpPT55OCx0aW1lTW9udGhzOigpPT5yd3QsdGltZVBhcnNlOigpPT5TWCx0aW1lU2F0dXJkYXk6KCk9PmZYLHRpbWVTYXR1cmRheXM6KCk9PnR3dCx0aW1lU2Vjb25kOigpPT5RXyx0aW1lU2Vjb25kczooKT0+bFgsdGltZVN1bmRheTooKT0+cmcsdGltZVN1bmRheXM6KCk9PnBYLHRpbWVUaHVyc2RheTooKT0+enAsdGltZVRodXJzZGF5czooKT0+SjJ0LHRpbWVUdWVzZGF5OigpPT5jWCx0aW1lVHVlc2RheXM6KCk9PksydCx0aW1lV2VkbmVzZGF5OigpPT51WCx0aW1lV2VkbmVzZGF5czooKT0+WjJ0LHRpbWVXZWVrOigpPT5yZyx0aW1lV2Vla3M6KCk9PnBYLHRpbWVZZWFyOigpPT5HaCx0aW1lWWVhcnM6KCk9Pm53dCx0aW1lb3V0OigpPT5PRSx0aW1lcjooKT0+QV8sdGltZXJGbHVzaDooKT0+X1ksdG91Y2g6KCk9PlRwLHRvdWNoZXM6KCk9Pm55dCx0cmFuc2l0aW9uOigpPT5BTCx0cmFuc3Bvc2U6KCk9Plc5LHRyZWU6KCk9PmQydCx0cmVlbWFwOigpPT5tMnQsdHJlZW1hcEJpbmFyeTooKT0+ZzJ0LHRyZWVtYXBEaWNlOigpPT5VaCx0cmVlbWFwUmVzcXVhcmlmeTooKT0+eTJ0LHRyZWVtYXBTbGljZTooKT0+Sm0sdHJlZW1hcFNsaWNlRGljZTooKT0+XzJ0LHRyZWVtYXBTcXVhcmlmeTooKT0+aTgsdHN2OigpPT5OdnQsdHN2Rm9ybWF0OigpPT5TdnQsdHN2Rm9ybWF0Qm9keTooKT0+TXZ0LHRzdkZvcm1hdFJvdzooKT0+VHZ0LHRzdkZvcm1hdFJvd3M6KCk9PkV2dCx0c3ZGb3JtYXRWYWx1ZTooKT0+Q3Z0LHRzdlBhcnNlOigpPT5BYix0c3ZQYXJzZVJvd3M6KCk9Pnd2dCx1dGNEYXk6KCk9Pm55LHV0Y0RheXM6KCk9PmN3dCx1dGNGb3JtYXQ6KCk9PmF5LHV0Y0ZyaWRheTooKT0+X1gsdXRjRnJpZGF5czooKT0+ZHd0LHV0Y0hvdXI6KCk9Png4LHV0Y0hvdXJzOigpPT5zd3QsdXRjTWlsbGlzZWNvbmQ6KCk9PlpfLHV0Y01pbGxpc2Vjb25kczooKT0+c1gsdXRjTWludXRlOigpPT52OCx1dGNNaW51dGVzOigpPT5vd3QsdXRjTW9uZGF5OigpPT5veSx1dGNNb25kYXlzOigpPT51d3QsdXRjTW9udGg6KCk9PmI4LHV0Y01vbnRoczooKT0+X3d0LHV0Y1BhcnNlOigpPT5NNSx1dGNTYXR1cmRheTooKT0+eVgsdXRjU2F0dXJkYXlzOigpPT5td3QsdXRjU2Vjb25kOigpPT5RXyx1dGNTZWNvbmRzOigpPT5sWCx1dGNTdW5kYXk6KCk9Pm5nLHV0Y1N1bmRheXM6KCk9PnZYLHV0Y1RodXJzZGF5OigpPT5GcCx1dGNUaHVyc2RheXM6KCk9PnB3dCx1dGNUdWVzZGF5OigpPT5tWCx1dGNUdWVzZGF5czooKT0+aHd0LHV0Y1dlZG5lc2RheTooKT0+Z1gsdXRjV2VkbmVzZGF5czooKT0+Znd0LHV0Y1dlZWs6KCk9Pm5nLHV0Y1dlZWtzOigpPT52WCx1dGNZZWFyOigpPT5XaCx1dGNZZWFyczooKT0+eXd0LHZhbHVlczooKT0+bnZ0LHZhcmlhbmNlOigpPT5xOSx2ZXJzaW9uOigpPT5VMHQsdm9yb25vaTooKT0+VzN0LHdpbmRvdzooKT0+aGIseG1sOigpPT56dnQsemlwOigpPT5hX3Qsem9vbTooKT0+dFIsem9vbUlkZW50aXR5OigpPT5YaCx6b29tVHJhbnNmb3JtOigpPT5pMn0pO3ZhciBVMHQ9IjUuNy4wIjtmdW5jdGlvbiBvYShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBvYihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1uMmUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBuMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIG9hKGUodCkscil9fXZhciBxMHQ9b2Iob2EpLFlXPXEwdC5yaWdodCxHMHQ9cTB0LmxlZnQseXM9WVc7ZnVuY3Rpb24gVzB0KGUsdCl7dD09bnVsbCYmKHQ9alcpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbMF0sbz1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylvW3JdPXQoaSxpPWVbKytyXSk7cmV0dXJuIG99ZnVuY3Rpb24galcoZSx0KXtyZXR1cm5bZSx0XX1mdW5jdGlvbiBVOShlLHQscil7dmFyIG49ZS5sZW5ndGgsaT10Lmxlbmd0aCxvPW5ldyBBcnJheShuKmkpLGEscyxsLGM7Zm9yKHI9PW51bGwmJihyPWpXKSxhPWw9MDthPG47KythKWZvcihjPWVbYV0scz0wO3M8aTsrK3MsKytsKW9bbF09cihjLHRbc10pO3JldHVybiBvfWZ1bmN0aW9uIFkwdChlLHQpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBRcyhlKXtyZXR1cm4gZT09PW51bGw/TmFOOitlfWZ1bmN0aW9uIHE5KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0wLGk9LTEsbz0wLGEscyxsPTA7aWYodD09bnVsbClmb3IoOysraTxyOylpc05hTihhPVFzKGVbaV0pKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2Vsc2UgZm9yKDsrK2k8cjspaXNOYU4oYT1Rcyh0KGVbaV0saSxlKSkpfHwocz1hLW8sbys9cy8rK24sbCs9cyooYS1vKSk7aWYobj4xKXJldHVybiBsLyhuLTEpfWZ1bmN0aW9uIEc5KGUsdCl7dmFyIHI9cTkoZSx0KTtyZXR1cm4gciYmTWF0aC5zcXJ0KHIpfWZ1bmN0aW9uIGFhKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG8sYTtpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiYobz5pJiYobz1pKSxhPGkmJihhPWkpKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSk7cmV0dXJuW28sYV19dmFyIGowdD1BcnJheS5wcm90b3R5cGUsWDB0PWowdC5zbGljZSwkMHQ9ajB0Lm1hcDtmdW5jdGlvbiB4RShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gSzB0KGUpe3JldHVybiBlfWZ1bmN0aW9uIElyKGUsdCxyKXtlPStlLHQ9K3Qscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyh0PWUsZT0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPU1hdGgubWF4KDAsTWF0aC5jZWlsKCh0LWUpL3IpKXwwLG89bmV3IEFycmF5KGkpOysrbjxpOylvW25dPWUrbipyO3JldHVybiBvfXZhciBYVz1NYXRoLnNxcnQoNTApLCRXPU1hdGguc3FydCgxMCksS1c9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIGFiKGUsdCxyKXt2YXIgbixpPS0xLG8sYSxzO2lmKHQ9K3QsZT0rZSxyPStyLGU9PT10JiZyPjApcmV0dXJuW2VdO2lmKChuPXQ8ZSkmJihvPWUsZT10LHQ9byksKHM9eF8oZSx0LHIpKT09PTB8fCFpc0Zpbml0ZShzKSlyZXR1cm5bXTtpZihzPjApZm9yKGU9TWF0aC5jZWlsKGUvcyksdD1NYXRoLmZsb29yKHQvcyksYT1uZXcgQXJyYXkobz1NYXRoLmNlaWwodC1lKzEpKTsrK2k8bzspYVtpXT0oZStpKSpzO2Vsc2UgZm9yKGU9TWF0aC5mbG9vcihlKnMpLHQ9TWF0aC5jZWlsKHQqcyksYT1uZXcgQXJyYXkobz1NYXRoLmNlaWwoZS10KzEpKTsrK2k8bzspYVtpXT0oZS1pKS9zO3JldHVybiBuJiZhLnJldmVyc2UoKSxhfWZ1bmN0aW9uIHhfKGUsdCxyKXt2YXIgbj0odC1lKS9NYXRoLm1heCgwLHIpLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTApLG89bi9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8obz49WFc/MTA6bz49JFc/NTpvPj1LVz8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKG8+PVhXPzEwOm8+PSRXPzU6bz49S1c/MjoxKX1mdW5jdGlvbiB0bChlLHQscil7dmFyIG49TWF0aC5hYnModC1lKS9NYXRoLm1heCgwLHIpLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTApKSxvPW4vaTtyZXR1cm4gbz49WFc/aSo9MTA6bz49JFc/aSo9NTpvPj1LVyYmKGkqPTIpLHQ8ZT8taTppfWZ1bmN0aW9uIHNiKGUpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2coZS5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIFowdCgpe3ZhciBlPUswdCx0PWFhLHI9c2I7ZnVuY3Rpb24gbihpKXt2YXIgbyxhPWkubGVuZ3RoLHMsbD1uZXcgQXJyYXkoYSk7Zm9yKG89MDtvPGE7KytvKWxbb109ZShpW29dLG8saSk7dmFyIGM9dChsKSx1PWNbMF0saD1jWzFdLGY9cihsLHUsaCk7QXJyYXkuaXNBcnJheShmKXx8KGY9dGwodSxoLGYpLGY9SXIoTWF0aC5jZWlsKHUvZikqZixoLGYpKTtmb3IodmFyIHA9Zi5sZW5ndGg7ZlswXTw9dTspZi5zaGlmdCgpLC0tcDtmb3IoO2ZbcC0xXT5oOylmLnBvcCgpLC0tcDt2YXIgZD1uZXcgQXJyYXkocCsxKSxnO2ZvcihvPTA7bzw9cDsrK28pZz1kW29dPVtdLGcueDA9bz4wP2Zbby0xXTp1LGcueDE9bzxwP2Zbb106aDtmb3Iobz0wO288YTsrK28pcz1sW29dLHU8PXMmJnM8PWgmJmRbeXMoZixzLDAscCldLnB1c2goaVtvXSk7cmV0dXJuIGR9cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTp4RShpKSxuKTplfSxuLmRvbWFpbj1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnhFKFtpWzBdLGlbMV1dKSxuKTp0fSxuLnRocmVzaG9sZHM9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpBcnJheS5pc0FycmF5KGkpP3hFKFgwdC5jYWxsKGkpKTp4RShpKSxuKTpyfSxufWZ1bmN0aW9uIHNhKGUsdCxyKXtpZihyPT1udWxsJiYocj1RcyksISEobj1lLmxlbmd0aCkpe2lmKCh0PSt0KTw9MHx8bjwyKXJldHVybityKGVbMF0sMCxlKTtpZih0Pj0xKXJldHVybityKGVbbi0xXSxuLTEsZSk7dmFyIG4saT0obi0xKSp0LG89TWF0aC5mbG9vcihpKSxhPStyKGVbb10sbyxlKSxzPStyKGVbbysxXSxvKzEsZSk7cmV0dXJuIGErKHMtYSkqKGktbyl9fWZ1bmN0aW9uIEowdChlLHQscil7cmV0dXJuIGU9JDB0LmNhbGwoZSxRcykuc29ydChvYSksTWF0aC5jZWlsKChyLXQpLygyKihzYShlLC43NSktc2EoZSwuMjUpKSpNYXRoLnBvdyhlLmxlbmd0aCwtMS8zKSkpfWZ1bmN0aW9uIFEwdChlLHQscil7cmV0dXJuIE1hdGguY2VpbCgoci10KS8oMy41Kkc5KGUpKk1hdGgucG93KGUubGVuZ3RoLC0xLzMpKSl9ZnVuY3Rpb24gbHUoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbztpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1pOysrbjxyOykoaT1lW25dKSE9bnVsbCYmaT5vJiYobz1pKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1pOysrbjxyOykoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+byYmKG89aSk7cmV0dXJuIG99ZnVuY3Rpb24gdF90KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj1yLGk9LTEsbyxhPTA7aWYodD09bnVsbClmb3IoOysraTxyOylpc05hTihvPVFzKGVbaV0pKT8tLW46YSs9bztlbHNlIGZvcig7KytpPHI7KWlzTmFOKG89UXModChlW2ldLGksZSkpKT8tLW46YSs9bztpZihuKXJldHVybiBhL259ZnVuY3Rpb24gZV90KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG89W107aWYodD09bnVsbClmb3IoOysrbjxyOylpc05hTihpPVFzKGVbbl0pKXx8by5wdXNoKGkpO2Vsc2UgZm9yKDsrK248cjspaXNOYU4oaT1Rcyh0KGVbbl0sbixlKSkpfHxvLnB1c2goaSk7cmV0dXJuIHNhKG8uc29ydChvYSksLjUpfWZ1bmN0aW9uIEltKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyLG49LTEsaT0wLG8sYTsrK248dDspaSs9ZVtuXS5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KGkpOy0tdD49MDspZm9yKGE9ZVt0XSxyPWEubGVuZ3RoOy0tcj49MDspb1stLWldPWFbcl07cmV0dXJuIG99ZnVuY3Rpb24gTG0oZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbztpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1pOysrbjxyOykoaT1lW25dKSE9bnVsbCYmbz5pJiYobz1pKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1pOysrbjxyOykoaT10KGVbbl0sbixlKSkhPW51bGwmJm8+aSYmKG89aSk7cmV0dXJuIG99ZnVuY3Rpb24gcl90KGUsdCl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT1lW3Rbcl1dO3JldHVybiBufWZ1bmN0aW9uIG5fdChlLHQpe2lmKCEhKHI9ZS5sZW5ndGgpKXt2YXIgcixuPTAsaT0wLG8sYT1lW2ldO2Zvcih0PT1udWxsJiYodD1vYSk7KytuPHI7KSh0KG89ZVtuXSxhKTwwfHx0KGEsYSkhPT0wKSYmKGE9byxpPW4pO2lmKHQoYSxhKT09PTApcmV0dXJuIGl9fWZ1bmN0aW9uIGlfdChlLHQscil7Zm9yKHZhciBuPShyPT1udWxsP2UubGVuZ3RoOnIpLSh0PXQ9PW51bGw/MDordCksaSxvO247KW89TWF0aC5yYW5kb20oKSpuLS18MCxpPWVbbit0XSxlW24rdF09ZVtvK3RdLGVbbyt0XT1pO3JldHVybiBlfWZ1bmN0aW9uIG9fdChlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvPTA7aWYodD09bnVsbClmb3IoOysrbjxyOykoaT0rZVtuXSkmJihvKz1pKTtlbHNlIGZvcig7KytuPHI7KShpPSt0KGVbbl0sbixlKSkmJihvKz1pKTtyZXR1cm4gb31mdW5jdGlvbiBXOShlKXtpZighKG89ZS5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgdD0tMSxyPUxtKGUsaTJlKSxuPW5ldyBBcnJheShyKTsrK3Q8cjspZm9yKHZhciBpPS0xLG8sYT1uW3RdPW5ldyBBcnJheShvKTsrK2k8bzspYVtpXT1lW2ldW3RdO3JldHVybiBufWZ1bmN0aW9uIGkyZShlKXtyZXR1cm4gZS5sZW5ndGh9ZnVuY3Rpb24gYV90KCl7cmV0dXJuIFc5KGFyZ3VtZW50cyl9dmFyIFk5PUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBzX3QoZSl7cmV0dXJuIGV9dmFyIGo5PTEsWDk9MixaVz0zLGJFPTQsbF90PTFlLTY7ZnVuY3Rpb24gbzJlKGUpe3JldHVybiJ0cmFuc2xhdGUoIisoZSsuNSkrIiwwKSJ9ZnVuY3Rpb24gYTJlKGUpe3JldHVybiJ0cmFuc2xhdGUoMCwiKyhlKy41KSsiKSJ9ZnVuY3Rpb24gczJlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4rZSh0KX19ZnVuY3Rpb24gbDJlKGUpe3ZhciB0PU1hdGgubWF4KDAsZS5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiBlLnJvdW5kKCkmJih0PU1hdGgucm91bmQodCkpLGZ1bmN0aW9uKHIpe3JldHVybitlKHIpK3R9fWZ1bmN0aW9uIGMyZSgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiAkOShlLHQpe3ZhciByPVtdLG49bnVsbCxpPW51bGwsbz02LGE9NixzPTMsbD1lPT09ajl8fGU9PT1iRT8tMToxLGM9ZT09PWJFfHxlPT09WDk/IngiOiJ5Iix1PWU9PT1qOXx8ZT09PVpXP28yZTphMmU7ZnVuY3Rpb24gaChmKXt2YXIgcD1uPT1udWxsP3QudGlja3M/dC50aWNrcy5hcHBseSh0LHIpOnQuZG9tYWluKCk6bixkPWk9PW51bGw/dC50aWNrRm9ybWF0P3QudGlja0Zvcm1hdC5hcHBseSh0LHIpOnNfdDppLGc9TWF0aC5tYXgobywwKStzLF89dC5yYW5nZSgpLHk9K19bMF0rLjUseD0rX1tfLmxlbmd0aC0xXSsuNSxiPSh0LmJhbmR3aWR0aD9sMmU6czJlKSh0LmNvcHkoKSksUz1mLnNlbGVjdGlvbj9mLnNlbGVjdGlvbigpOmYsQz1TLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxQPVMuc2VsZWN0QWxsKCIudGljayIpLmRhdGEocCx0KS5vcmRlcigpLGs9UC5leGl0KCksTz1QLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksRD1QLnNlbGVjdCgibGluZSIpLEI9UC5zZWxlY3QoInRleHQiKTtDPUMubWVyZ2UoQy5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksUD1QLm1lcmdlKE8pLEQ9RC5tZXJnZShPLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIoYysiMiIsbCpvKSksQj1CLm1lcmdlKE8uYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIoYyxsKmcpLmF0dHIoImR5IixlPT09ajk/IjBlbSI6ZT09PVpXPyIwLjcxZW0iOiIwLjMyZW0iKSksZiE9PVMmJihDPUMudHJhbnNpdGlvbihmKSxQPVAudHJhbnNpdGlvbihmKSxEPUQudHJhbnNpdGlvbihmKSxCPUIudHJhbnNpdGlvbihmKSxrPWsudHJhbnNpdGlvbihmKS5hdHRyKCJvcGFjaXR5IixsX3QpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7cmV0dXJuIGlzRmluaXRlKEk9YihJKSk/dShJKTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSxPLmF0dHIoIm9wYWNpdHkiLGxfdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXt2YXIgTD10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiB1KEwmJmlzRmluaXRlKEw9TChJKSk/TDpiKEkpKX0pKSxrLnJlbW92ZSgpLEMuYXR0cigiZCIsZT09PWJFfHxlPT1YOT9hPyJNIitsKmErIiwiK3krIkgwLjVWIit4KyJIIitsKmE6Ik0wLjUsIit5KyJWIit4OmE/Ik0iK3krIiwiK2wqYSsiVjAuNUgiK3grIlYiK2wqYToiTSIreSsiLDAuNUgiK3gpLFAuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXtyZXR1cm4gdShiKEkpKX0pLEQuYXR0cihjKyIyIixsKm8pLEIuYXR0cihjLGwqZykudGV4dChkKSxTLmZpbHRlcihjMmUpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLGU9PT1YOT8ic3RhcnQiOmU9PT1iRT8iZW5kIjoibWlkZGxlIiksUy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9Yn0pfXJldHVybiBoLnNjYWxlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWYsaCk6dH0saC50aWNrcz1mdW5jdGlvbigpe3JldHVybiByPVk5LmNhbGwoYXJndW1lbnRzKSxofSxoLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Zj09bnVsbD9bXTpZOS5jYWxsKGYpLGgpOnIuc2xpY2UoKX0saC50aWNrVmFsdWVzPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWY9PW51bGw/bnVsbDpZOS5jYWxsKGYpLGgpOm4mJm4uc2xpY2UoKX0saC50aWNrRm9ybWF0PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWYsaCk6aX0saC50aWNrU2l6ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1hPStmLGgpOm99LGgudGlja1NpemVJbm5lcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rZixoKTpvfSxoLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K2YsaCk6YX0saC50aWNrUGFkZGluZz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rZixoKTpzfSxofWZ1bmN0aW9uIGNfdChlKXtyZXR1cm4gJDkoajksZSl9ZnVuY3Rpb24gdV90KGUpe3JldHVybiAkOShYOSxlKX1mdW5jdGlvbiBLOShlKXtyZXR1cm4gJDkoWlcsZSl9ZnVuY3Rpb24gbGIoZSl7cmV0dXJuICQ5KGJFLGUpfWttKCk7a20oKTt2YXIgSjk9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHdFPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpKOSx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIFBoKGUpe3ZhciB0PWUrPSIiLHI9dC5pbmRleE9mKCI6Iik7cmV0dXJuIHI+PTAmJih0PWUuc2xpY2UoMCxyKSkhPT0ieG1sbnMiJiYoZT1lLnNsaWNlKHIrMSkpLHdFLmhhc093blByb3BlcnR5KHQpP3tzcGFjZTp3RVt0XSxsb2NhbDplfTplfWZ1bmN0aW9uIHAyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PUo5JiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1KOT90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gZDJlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFJtKGUpe3ZhciB0PVBoKGUpO3JldHVybih0LmxvY2FsP2QyZTpwMmUpKHQpfWZ1bmN0aW9uIG0yZSgpe31mdW5jdGlvbiBObShlKXtyZXR1cm4gZT09bnVsbD9tMmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGUpfX1mdW5jdGlvbiBkX3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPU5tKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgRG4obix0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBnMmUoKXtyZXR1cm5bXX1mdW5jdGlvbiBjYihlKXtyZXR1cm4gZT09bnVsbD9nMmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX1mdW5jdGlvbiBtX3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWNiKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBEbihuLGkpfWZ1bmN0aW9uIHViKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fWZ1bmN0aW9uIGdfdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dWIoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IERuKG4sdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gUTkoZSl7cmV0dXJuIG5ldyBBcnJheShlLmxlbmd0aCl9ZnVuY3Rpb24gX190KCl7cmV0dXJuIG5ldyBEbih0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChROSksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gU0UoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9U0UucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpTRSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fTtmdW5jdGlvbiB5X3QoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB2X3Q9IiQiO2Z1bmN0aW9uIF8yZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgU0UoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIHkyZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPXZfdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPXZfdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyBTRShlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIHhfdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/eTJlOl8yZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXlfdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgRG4oYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfWZ1bmN0aW9uIGJfdCgpe3JldHVybiBuZXcgRG4odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChROSksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gd190KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfWZ1bmN0aW9uIFNfdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgRG4oYSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBNX3QoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfWZ1bmN0aW9uIEVfdChlKXtlfHwoZT12MmUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgRG4oaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIHYyZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBUX3QoKXt2YXIgZT1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLGUuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9ZnVuY3Rpb24gQ190KCl7dmFyIGU9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtlWysrdF09dGhpc30pLGV9ZnVuY3Rpb24gQV90KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KWZvcih2YXIgbj1lW3RdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpe3ZhciBhPW5baV07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBQX3QoKXt2YXIgZT0wO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsrK2V9KSxlfWZ1bmN0aW9uIElfdCgpe3JldHVybiF0aGlzLm5vZGUoKX1mdW5jdGlvbiBMX3QoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLG89MCxhPWkubGVuZ3RoLHM7bzxhOysrbykocz1pW29dKSYmZS5jYWxsKHMscy5fX2RhdGFfXyxvLGkpO3JldHVybiB0aGlzfWZ1bmN0aW9uIHgyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX19ZnVuY3Rpb24gYjJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gdzJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0KX19ZnVuY3Rpb24gUzJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsdCl9fWZ1bmN0aW9uIE0yZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6dGhpcy5zZXRBdHRyaWJ1dGUoZSxyKX19ZnVuY3Rpb24gRTJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwscil9fWZ1bmN0aW9uIGtfdChlLHQpe3ZhciByPVBoKGUpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIG49dGhpcy5ub2RlKCk7cmV0dXJuIHIubG9jYWw/bi5nZXRBdHRyaWJ1dGVOUyhyLnNwYWNlLHIubG9jYWwpOm4uZ2V0QXR0cmlidXRlKHIpfXJldHVybiB0aGlzLmVhY2goKHQ9PW51bGw/ci5sb2NhbD9iMmU6eDJlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3IubG9jYWw/RTJlOk0yZTpyLmxvY2FsP1MyZTp3MmUpKHIsdCkpfWZ1bmN0aW9uIGhiKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld31mdW5jdGlvbiBUMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gQzJlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdCxyKX19ZnVuY3Rpb24gQTJlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLG4scil9fWZ1bmN0aW9uIFJfdChlLHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/VDJlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP0EyZTpDMmUpKGUsdCxyPT1udWxsPyIiOnIpKTpTcCh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBTcChlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fGhiKGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfWZ1bmN0aW9uIFAyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tlXX19ZnVuY3Rpb24gSTJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tlXT10fX1mdW5jdGlvbiBMMmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP2RlbGV0ZSB0aGlzW2VdOnRoaXNbZV09cn19ZnVuY3Rpb24gTl90KGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/UDJlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP0wyZTpJMmUpKGUsdCkpOnRoaXMubm9kZSgpW2VdfWZ1bmN0aW9uIERfdChlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gSlcoZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgT190KGUpfWZ1bmN0aW9uIE9fdChlKXt0aGlzLl9ub2RlPWUsdGhpcy5fbmFtZXM9RF90KGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9T190LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dDwwJiYodGhpcy5fbmFtZXMucHVzaChlKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoZSk+PTB9fTtmdW5jdGlvbiB6X3QoZSx0KXtmb3IodmFyIHI9SlcoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLmFkZCh0W25dKX1mdW5jdGlvbiBGX3QoZSx0KXtmb3IodmFyIHI9SlcoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBrMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7el90KHRoaXMsZSl9fWZ1bmN0aW9uIFIyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtGX3QodGhpcyxlKX19ZnVuY3Rpb24gTjJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP3pfdDpGX3QpKHRoaXMsZSl9fWZ1bmN0aW9uIEJfdChlLHQpe3ZhciByPURfdChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1KVyh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9OMmU6dD9rMmU6UjJlKShyLHQpKX1mdW5jdGlvbiBEMmUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIE8yZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIHoyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gSF90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0QyZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/ejJlOk8yZSkoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fWZ1bmN0aW9uIEYyZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIEIyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfX1mdW5jdGlvbiBIMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBWX3QoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/RjJlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9IMmU6QjJlKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfWZ1bmN0aW9uIFYyZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBVX3QoKXtyZXR1cm4gdGhpcy5lYWNoKFYyZSl9ZnVuY3Rpb24gVTJlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gcV90KCl7cmV0dXJuIHRoaXMuZWFjaChVMmUpfWZ1bmN0aW9uIEdfdChlKXt2YXIgdD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlJtKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfWZ1bmN0aW9uIHEyZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIFdfdChlLHQpe3ZhciByPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6Um0oZSksbj10PT1udWxsP3EyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90Ok5tKHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX1mdW5jdGlvbiBHMmUoKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBZX3QoKXtyZXR1cm4gdGhpcy5lYWNoKEcyZSl9ZnVuY3Rpb24gVzJlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBZMmUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMCksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIGpfdChlKXtyZXR1cm4gdGhpcy5zZWxlY3QoZT9ZMmU6VzJlKX1mdW5jdGlvbiBYX3QoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGUpOnRoaXMubm9kZSgpLl9fZGF0YV9ffXZhciBLX3Q9e30scXQ9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYoJF90PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluICRfdHx8KEtfdD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyICRfdDtmdW5jdGlvbiBqMmUoZSx0LHIpe3JldHVybiBlPVpfdChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBaX3QoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1xdDtxdD1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtxdD1pfX19ZnVuY3Rpb24gWDJlKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiAkMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gSzJlKGUsdCxyKXt2YXIgbj1LX3QuaGFzT3duUHJvcGVydHkoZS50eXBlKT9qMmU6Wl90O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIEpfdChlLHQscil7dmFyIG49WDJlKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9LMmU6JDJlLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uIE1wKGUsdCxyLG4pe3ZhciBpPXF0O2Uuc291cmNlRXZlbnQ9cXQscXQ9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e3F0PWl9fWZ1bmN0aW9uIFFfdChlLHQscil7dmFyIG49aGIoZSksaT1uLkN1c3RvbUV2ZW50O3R5cGVvZiBpPT0iZnVuY3Rpb24iP2k9bmV3IGkodCxyKTooaT1uLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLHI/KGkuaW5pdEV2ZW50KHQsci5idWJibGVzLHIuY2FuY2VsYWJsZSksaS5kZXRhaWw9ci5kZXRhaWwpOmkuaW5pdEV2ZW50KHQsITEsITEpKSxlLmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gWjJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFFfdCh0aGlzLGUsdCl9fWZ1bmN0aW9uIEoyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBRX3QodGhpcyxlLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gdHl0KGUsdCl7cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/SjJlOloyZSkoZSx0KSl9dmFyIE1FPVtudWxsXTtmdW5jdGlvbiBEbihlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBleXQoKXtyZXR1cm4gbmV3IERuKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sTUUpfURuLnByb3RvdHlwZT1leXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEbixzZWxlY3Q6ZF90LHNlbGVjdEFsbDptX3QsZmlsdGVyOmdfdCxkYXRhOnhfdCxlbnRlcjpfX3QsZXhpdDpiX3Qsam9pbjp3X3QsbWVyZ2U6U190LG9yZGVyOk1fdCxzb3J0OkVfdCxjYWxsOlRfdCxub2RlczpDX3Qsbm9kZTpBX3Qsc2l6ZTpQX3QsZW1wdHk6SV90LGVhY2g6TF90LGF0dHI6a190LHN0eWxlOlJfdCxwcm9wZXJ0eTpOX3QsY2xhc3NlZDpCX3QsdGV4dDpIX3QsaHRtbDpWX3QscmFpc2U6VV90LGxvd2VyOnFfdCxhcHBlbmQ6R190LGluc2VydDpXX3QscmVtb3ZlOllfdCxjbG9uZTpqX3QsZGF0dW06WF90LG9uOkpfdCxkaXNwYXRjaDp0eXR9O3ZhciBJaD1leXQ7ZnVuY3Rpb24gSHQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgRG4oW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBEbihbW2VdXSxNRSl9ZnVuY3Rpb24gcnl0KGUpe3JldHVybiBIdChSbShlKS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfXZhciBRMmU9MDtmdW5jdGlvbiB0TCgpe3JldHVybiBuZXcgUVd9ZnVuY3Rpb24gUVcoKXt0aGlzLl89IkAiKygrK1EyZSkudG9TdHJpbmcoMzYpfVFXLnByb3RvdHlwZT10TC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlFXLGdldDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5fOyEodCBpbiBlKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiBlW3RdfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0aGlzLl9dPXR9LHJlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fIGluIGUmJmRlbGV0ZSBlW3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O2Z1bmN0aW9uIGZiKCl7Zm9yKHZhciBlPXF0LHQ7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9ZnVuY3Rpb24gRG0oZSx0KXt2YXIgcj1lLm93bmVyU1ZHRWxlbWVudHx8ZTtpZihyLmNyZWF0ZVNWR1BvaW50KXt2YXIgbj1yLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIG4ueD10LmNsaWVudFgsbi55PXQuY2xpZW50WSxuPW4ubWF0cml4VHJhbnNmb3JtKGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSxbbi54LG4ueV19dmFyIGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bdC5jbGllbnRYLWkubGVmdC1lLmNsaWVudExlZnQsdC5jbGllbnRZLWkudG9wLWUuY2xpZW50VG9wXX1mdW5jdGlvbiB6byhlKXt2YXIgdD1mYigpO3JldHVybiB0LmNoYW5nZWRUb3VjaGVzJiYodD10LmNoYW5nZWRUb3VjaGVzWzBdKSxEbShlLHQpfWZ1bmN0aW9uIEVwKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IERuKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IERuKFtlPT1udWxsP1tdOmVdLE1FKX1mdW5jdGlvbiBUcChlLHQscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9ZmIoKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBuPTAsaT10P3QubGVuZ3RoOjAsbztuPGk7KytuKWlmKChvPXRbbl0pLmlkZW50aWZpZXI9PT1yKXJldHVybiBEbShlLG8pO3JldHVybiBudWxsfWZ1bmN0aW9uIG55dChlLHQpe3Q9PW51bGwmJih0PWZiKCkudG91Y2hlcyk7Zm9yKHZhciByPTAsbj10P3QubGVuZ3RoOjAsaT1uZXcgQXJyYXkobik7cjxuOysrcilpW3JdPURtKGUsdFtyXSk7cmV0dXJuIGl9ZnVuY3Rpb24gZUwoKXtxdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBPbSgpe3F0LnByZXZlbnREZWZhdWx0KCkscXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gem0oZSl7dmFyIHQ9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscj1IdChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLE9tLCEwKTsib25zZWxlY3RzdGFydCJpbiB0P3Iub24oInNlbGVjdHN0YXJ0LmRyYWciLE9tLCEwKToodC5fX25vc2VsZWN0PXQuc3R5bGUuTW96VXNlclNlbGVjdCx0LnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBGbShlLHQpe3ZhciByPWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49SHQoZSkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTt0JiYobi5vbigiY2xpY2suZHJhZyIsT20sITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIHI/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KHIuc3R5bGUuTW96VXNlclNlbGVjdD1yLl9fbm9zZWxlY3QsZGVsZXRlIHIuX19ub3NlbGVjdCl9ZnVuY3Rpb24gRUUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFRFKGUsdCxyLG4saSxvLGEscyxsLGMpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy5zdWJqZWN0PXIsdGhpcy5pZGVudGlmaWVyPW4sdGhpcy5hY3RpdmU9aSx0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT1sLHRoaXMuXz1jfVRFLnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gZT09PXRoaXMuXz90aGlzOmV9O2Z1bmN0aW9uIHR3ZSgpe3JldHVybiFxdC5jdHJsS2V5JiYhcXQuYnV0dG9ufWZ1bmN0aW9uIGV3ZSgpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9ZnVuY3Rpb24gcndlKGUpe3JldHVybiBlPT1udWxsP3t4OnF0LngseTpxdC55fTplfWZ1bmN0aW9uIG53ZSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBwYigpe3ZhciBlPXR3ZSx0PWV3ZSxyPXJ3ZSxuPW53ZSxpPXt9LG89dnMoInN0YXJ0IiwiZHJhZyIsImVuZCIpLGE9MCxzLGwsYyx1LGg9MDtmdW5jdGlvbiBmKFMpe1Mub24oIm1vdXNlZG93bi5kcmFnIixwKS5maWx0ZXIobikub24oInRvdWNoc3RhcnQuZHJhZyIsXykub24oInRvdWNobW92ZS5kcmFnIix5KS5vbigidG91Y2hlbmQuZHJhZyB0b3VjaGNhbmNlbC5kcmFnIix4KS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gcCgpe2lmKCEodXx8IWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKSl7dmFyIFM9YigibW91c2UiLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHpvLHRoaXMsYXJndW1lbnRzKTshU3x8KEh0KHF0LnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyIsZCwhMCkub24oIm1vdXNldXAuZHJhZyIsZywhMCksem0ocXQudmlldyksZUwoKSxjPSExLHM9cXQuY2xpZW50WCxsPXF0LmNsaWVudFksUygic3RhcnQiKSl9fWZ1bmN0aW9uIGQoKXtpZihPbSgpLCFjKXt2YXIgUz1xdC5jbGllbnRYLXMsQz1xdC5jbGllbnRZLWw7Yz1TKlMrQypDPmh9aS5tb3VzZSgiZHJhZyIpfWZ1bmN0aW9uIGcoKXtIdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxGbShxdC52aWV3LGMpLE9tKCksaS5tb3VzZSgiZW5kIil9ZnVuY3Rpb24gXygpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBTPXF0LmNoYW5nZWRUb3VjaGVzLEM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksUD1TLmxlbmd0aCxrLE87Zm9yKGs9MDtrPFA7KytrKShPPWIoU1trXS5pZGVudGlmaWVyLEMsVHAsdGhpcyxhcmd1bWVudHMpKSYmKGVMKCksTygic3RhcnQiKSl9fWZ1bmN0aW9uIHkoKXt2YXIgUz1xdC5jaGFuZ2VkVG91Y2hlcyxDPVMubGVuZ3RoLFAsaztmb3IoUD0wO1A8QzsrK1ApKGs9aVtTW1BdLmlkZW50aWZpZXJdKSYmKE9tKCksaygiZHJhZyIpKX1mdW5jdGlvbiB4KCl7dmFyIFM9cXQuY2hhbmdlZFRvdWNoZXMsQz1TLmxlbmd0aCxQLGs7Zm9yKHUmJmNsZWFyVGltZW91dCh1KSx1PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt1PW51bGx9LDUwMCksUD0wO1A8QzsrK1ApKGs9aVtTW1BdLmlkZW50aWZpZXJdKSYmKGVMKCksaygiZW5kIikpfWZ1bmN0aW9uIGIoUyxDLFAsayxPKXt2YXIgRD1QKEMsUyksQixJLEwsUj1vLmNvcHkoKTtpZighIU1wKG5ldyBURShmLCJiZWZvcmVzdGFydCIsQixTLGEsRFswXSxEWzFdLDAsMCxSKSxmdW5jdGlvbigpe3JldHVybihxdC5zdWJqZWN0PUI9ci5hcHBseShrLE8pKT09bnVsbD8hMTooST1CLngtRFswXXx8MCxMPUIueS1EWzFdfHwwLCEwKX0pKXJldHVybiBmdW5jdGlvbiBGKHope3ZhciBVPUQsVztzd2l0Y2goeil7Y2FzZSJzdGFydCI6aVtTXT1GLFc9YSsrO2JyZWFrO2Nhc2UiZW5kIjpkZWxldGUgaVtTXSwtLWE7Y2FzZSJkcmFnIjpEPVAoQyxTKSxXPWE7YnJlYWt9TXAobmV3IFRFKGYseixCLFMsVyxEWzBdK0ksRFsxXStMLERbMF0tVVswXSxEWzFdLVVbMV0sUiksUi5hcHBseSxSLFt6LGssT10pfX1yZXR1cm4gZi5maWx0ZXI9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIFM9PSJmdW5jdGlvbiI/UzpFRSghIVMpLGYpOmV9LGYuY29udGFpbmVyPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6RUUoUyksZik6dH0sZi5zdWJqZWN0PWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6RUUoUyksZik6cn0sZi50b3VjaGFibGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIFM9PSJmdW5jdGlvbiI/UzpFRSghIVMpLGYpOm59LGYub249ZnVuY3Rpb24oKXt2YXIgUz1vLm9uLmFwcGx5KG8sYXJndW1lbnRzKTtyZXR1cm4gUz09PW8/ZjpTfSxmLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9KFM9K1MpKlMsZik6TWF0aC5zcXJ0KGgpfSxmfWZ1bmN0aW9uIENwKGUsdCxyKXtlLnByb3RvdHlwZT10LnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBCbShlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn1mdW5jdGlvbiBSaCgpe312YXIgSG09LjcsYl89MS9IbSxkYj0iXFxzKihbKy1dP1xcZCspXFxzKiIsQ0U9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsa2g9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLGl3ZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxvd2U9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2RiLGRiLGRiXSsiXFwpJCIpLGF3ZT1uZXcgUmVnRXhwKCJecmdiXFwoIitba2gsa2gsa2hdKyJcXCkkIiksc3dlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbZGIsZGIsZGIsQ0VdKyJcXCkkIiksbHdlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitba2gsa2gsa2gsQ0VdKyJcXCkkIiksY3dlPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tDRSxraCxraF0rIlxcKSQiKSx1d2U9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tDRSxraCxraCxDRV0rIlxcKSQiKSxpeXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07Q3AoUmgscmMse2NvcHk6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxlKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6b3l0LGZvcm1hdEhleDpveXQsZm9ybWF0SHNsOmh3ZSxmb3JtYXRSZ2I6YXl0LHRvU3RyaW5nOmF5dH0pO2Z1bmN0aW9uIG95dCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGh3ZSgpe3JldHVybiBoeXQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gYXl0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gcmMoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9aXdlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/c3l0KHQpOnI9PT0zP25ldyBLaSh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/ckwodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/ckwodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1vd2UuZXhlYyhlKSk/bmV3IEtpKHRbMV0sdFsyXSx0WzNdLDEpOih0PWF3ZS5leGVjKGUpKT9uZXcgS2kodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9c3dlLmV4ZWMoZSkpP3JMKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PWx3ZS5leGVjKGUpKT9yTCh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1jd2UuZXhlYyhlKSk/dXl0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9dXdlLmV4ZWMoZSkpP3V5dCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOml5dC5oYXNPd25Qcm9wZXJ0eShlKT9zeXQoaXl0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgS2koTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBzeXQoZSl7cmV0dXJuIG5ldyBLaShlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gckwoZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBLaShlLHQscixuKX1mdW5jdGlvbiBBRShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFJofHwoZT1yYyhlKSksZT8oZT1lLnJnYigpLG5ldyBLaShlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgS2l9ZnVuY3Rpb24gY3UoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0FFKGUpOm5ldyBLaShlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gS2koZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufUNwKEtpLGN1LEJtKFJoLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP2JfOk1hdGgucG93KGJfLGUpLG5ldyBLaSh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9IbTpNYXRoLnBvdyhIbSxlKSxuZXcgS2kodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpseXQsZm9ybWF0SGV4Omx5dCxmb3JtYXRSZ2I6Y3l0LHRvU3RyaW5nOmN5dH0pKTtmdW5jdGlvbiBseXQoKXtyZXR1cm4iIyIrdFkodGhpcy5yKSt0WSh0aGlzLmcpK3RZKHRoaXMuYil9ZnVuY3Rpb24gY3l0KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHRZKGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHV5dChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IExoKGUsdCxyLG4pfWZ1bmN0aW9uIGh5dChlKXtpZihlIGluc3RhbmNlb2YgTGgpcmV0dXJuIG5ldyBMaChlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBSaHx8KGU9cmMoZSkpLCFlKXJldHVybiBuZXcgTGg7aWYoZSBpbnN0YW5jZW9mIExoKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IExoKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gVm0oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2h5dChlKTpuZXcgTGgoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIExoKGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1DcChMaCxWbSxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9iXzpNYXRoLnBvdyhiXyxlKSxuZXcgTGgodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9IbTpNYXRoLnBvdyhIbSxlKSxuZXcgTGgodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBLaShlWShlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxlWShlLGksbiksZVkoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSk7ZnVuY3Rpb24gZVkoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyIG5MPU1hdGguUEkvMTgwLGlMPTE4MC9NYXRoLlBJO3ZhciBvTD0xOCxmeXQ9Ljk2NDIyLHB5dD0xLGR5dD0uODI1MjEsbXl0PTQvMjksbWI9Ni8yOSxneXQ9MyptYiptYixmd2U9bWIqbWIqbWI7ZnVuY3Rpb24gX3l0KGUpe2lmKGUgaW5zdGFuY2VvZiB1dSlyZXR1cm4gbmV3IHV1KGUubCxlLmEsZS5iLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIE5oKXJldHVybiBieXQoZSk7ZSBpbnN0YW5jZW9mIEtpfHwoZT1BRShlKSk7dmFyIHQ9b1koZS5yKSxyPW9ZKGUuZyksbj1vWShlLmIpLGk9clkoKC4yMjI1MDQ1KnQrLjcxNjg3ODYqcisuMDYwNjE2OSpuKS9weXQpLG8sYTtyZXR1cm4gdD09PXImJnI9PT1uP289YT1pOihvPXJZKCguNDM2MDc0Nyp0Ky4zODUwNjQ5KnIrLjE0MzA4MDQqbikvZnl0KSxhPXJZKCguMDEzOTMyMip0Ky4wOTcxMDQ1KnIrLjcxNDE3MzMqbikvZHl0KSksbmV3IHV1KDExNippLTE2LDUwMCooby1pKSwyMDAqKGktYSksZS5vcGFjaXR5KX1mdW5jdGlvbiB5eXQoZSx0KXtyZXR1cm4gbmV3IHV1KGUsMCwwLHQ9PW51bGw/MTp0KX1mdW5jdGlvbiB3XyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/X3l0KGUpOm5ldyB1dShlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gdXUoZSx0LHIsbil7dGhpcy5sPStlLHRoaXMuYT0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufUNwKHV1LHdfLEJtKFJoLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHV1KHRoaXMubCtvTCooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdXUodGhpcy5sLW9MKihlPT1udWxsPzE6ZSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP2U6ZSt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT9lOmUtdGhpcy5iLzIwMDtyZXR1cm4gdD1meXQqblkodCksZT1weXQqblkoZSkscj1keXQqblkociksbmV3IEtpKGlZKDMuMTMzODU2MSp0LTEuNjE2ODY2NyplLS40OTA2MTQ2KnIpLGlZKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSplKy4wMzM0NTQqciksaVkoLjA3MTk0NTMqdC0uMjI4OTkxNCplKzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKTtmdW5jdGlvbiByWShlKXtyZXR1cm4gZT5md2U/TWF0aC5wb3coZSwxLzMpOmUvZ3l0K215dH1mdW5jdGlvbiBuWShlKXtyZXR1cm4gZT5tYj9lKmUqZTpneXQqKGUtbXl0KX1mdW5jdGlvbiBpWShlKXtyZXR1cm4gMjU1KihlPD0uMDAzMTMwOD8xMi45MiplOjEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIG9ZKGUpe3JldHVybihlLz0yNTUpPD0uMDQwNDU/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIHZ5dChlKXtpZihlIGluc3RhbmNlb2YgTmgpcmV0dXJuIG5ldyBOaChlLmgsZS5jLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiB1dXx8KGU9X3l0KGUpKSxlLmE9PT0wJiZlLmI9PT0wKXJldHVybiBuZXcgTmgoTmFOLDA8ZS5sJiZlLmw8MTAwPzA6TmFOLGUubCxlLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIoZS5iLGUuYSkqaUw7cmV0dXJuIG5ldyBOaCh0PDA/dCszNjA6dCxNYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKSxlLmwsZS5vcGFjaXR5KX1mdW5jdGlvbiB4eXQoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3Z5dChlKTpuZXcgTmgocix0LGUsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGdiKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT92eXQoZSk6bmV3IE5oKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBOaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5jPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gYnl0KGUpe2lmKGlzTmFOKGUuaCkpcmV0dXJuIG5ldyB1dShlLmwsMCwwLGUub3BhY2l0eSk7dmFyIHQ9ZS5oKm5MO3JldHVybiBuZXcgdXUoZS5sLE1hdGguY29zKHQpKmUuYyxNYXRoLnNpbih0KSplLmMsZS5vcGFjaXR5KX1DcChOaCxnYixCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOaCh0aGlzLmgsdGhpcy5jLHRoaXMubCtvTCooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5oKHRoaXMuaCx0aGlzLmMsdGhpcy5sLW9MKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIGJ5dCh0aGlzKS5yZ2IoKX19KSk7dmFyIEV5dD0tLjE0ODYxLGFZPTEuNzgyNzcsc1k9LS4yOTIyNyxhTD0tLjkwNjQ5LFBFPTEuOTcyOTQsd3l0PVBFKmFMLFN5dD1QRSphWSxNeXQ9YVkqc1ktYUwqRXl0O2Z1bmN0aW9uIHB3ZShlKXtpZihlIGluc3RhbmNlb2YgU18pcmV0dXJuIG5ldyBTXyhlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiBLaXx8KGU9QUUoZSkpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPShNeXQqbit3eXQqdC1TeXQqcikvKE15dCt3eXQtU3l0KSxvPW4taSxhPShQRSooci1pKS1zWSpvKS9hTCxzPU1hdGguc3FydChhKmErbypvKS8oUEUqaSooMS1pKSksbD1zP01hdGguYXRhbjIoYSxvKSppTC0xMjA6TmFOO3JldHVybiBuZXcgU18obDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gbGEoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3B3ZShlKTpuZXcgU18oZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIFNfKGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1DcChTXyxsYSxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9iXzpNYXRoLnBvdyhiXyxlKSxuZXcgU18odGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9IbTpNYXRoLnBvdyhIbSxlKSxuZXcgU18odGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKm5MLHQ9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqdCooMS10KSxuPU1hdGguY29zKGUpLGk9TWF0aC5zaW4oZSk7cmV0dXJuIG5ldyBLaSgyNTUqKHQrciooRXl0Km4rYVkqaSkpLDI1NSoodCtyKihzWSpuK2FMKmkpKSwyNTUqKHQrciooUEUqbikpLHRoaXMub3BhY2l0eSl9fSkpO2Z1bmN0aW9uIGxZKGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gc0woZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLHQtMSk6TWF0aC5mbG9vcihyKnQpLGk9ZVtuXSxvPWVbbisxXSxhPW4+MD9lW24tMV06MippLW8scz1uPHQtMT9lW24rMl06MipvLWk7cmV0dXJuIGxZKChyLW4vdCkqdCxhLGksbyxzKX19ZnVuY3Rpb24gbEwoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBsWSgoci1uL3QpKnQsaSxvLGEscyl9fWZ1bmN0aW9uIF9iKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBUeXQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBkd2UoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBVbShlLHQpe3ZhciByPXQtZTtyZXR1cm4gcj9UeXQoZSxyPjE4MHx8cjwtMTgwP3ItMzYwKk1hdGgucm91bmQoci8zNjApOnIpOl9iKGlzTmFOKGUpP3Q6ZSl9ZnVuY3Rpb24gQ3l0KGUpe3JldHVybihlPStlKT09MT9abjpmdW5jdGlvbih0LHIpe3JldHVybiByLXQ/ZHdlKHQscixlKTpfYihpc05hTih0KT9yOnQpfX1mdW5jdGlvbiBabihlLHQpe3ZhciByPXQtZTtyZXR1cm4gcj9UeXQoZSxyKTpfYihpc05hTihlKT90OmUpfXZhciBxbT1mdW5jdGlvbiBlKHQpe3ZhciByPUN5dCh0KTtmdW5jdGlvbiBuKGksbyl7dmFyIGE9cigoaT1jdShpKSkuciwobz1jdShvKSkucikscz1yKGkuZyxvLmcpLGw9cihpLmIsby5iKSxjPVpuKGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5yPWEodSksaS5nPXModSksaS5iPWwodSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9ZSxufSgxKTtmdW5jdGlvbiBBeXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGEscztmb3IoYT0wO2E8cjsrK2Epcz1jdSh0W2FdKSxuW2FdPXMucnx8MCxpW2FdPXMuZ3x8MCxvW2FdPXMuYnx8MDtyZXR1cm4gbj1lKG4pLGk9ZShpKSxvPWUobykscy5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIHMucj1uKGwpLHMuZz1pKGwpLHMuYj1vKGwpLHMrIiJ9fX12YXIgY0w9QXl0KHNMKSxQeXQ9QXl0KGxMKTtmdW5jdGlvbiB5YihlLHQpe3R8fCh0PVtdKTt2YXIgcj1lP01hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTowLG49dC5zbGljZSgpLGk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpPTA7aTxyOysraSluW2ldPWVbaV0qKDEtbykrdFtpXSpvO3JldHVybiBufX1mdW5jdGlvbiB1TChlKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGUpJiYhKGUgaW5zdGFuY2VvZiBEYXRhVmlldyl9ZnVuY3Rpb24gSXl0KGUsdCl7cmV0dXJuKHVMKHQpP3liOmNZKShlLHQpfWZ1bmN0aW9uIGNZKGUsdCl7dmFyIHI9dD90Lmxlbmd0aDowLG49ZT9NYXRoLm1pbihyLGUubGVuZ3RoKTowLGk9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KHIpLGE7Zm9yKGE9MDthPG47KythKWlbYV09bmMoZVthXSx0W2FdKTtmb3IoO2E8cjsrK2Epb1thXT10W2FdO3JldHVybiBmdW5jdGlvbihzKXtmb3IoYT0wO2E8bjsrK2Epb1thXT1pW2FdKHMpO3JldHVybiBvfX1mdW5jdGlvbiBoTChlLHQpe3ZhciByPW5ldyBEYXRlO3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZShlKigxLW4pK3Qqbikscn19ZnVuY3Rpb24gemkoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19ZnVuY3Rpb24gZkwoZSx0KXt2YXIgcj17fSxuPXt9LGk7KGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpJiYoZT17fSksKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpJiYodD17fSk7Zm9yKGkgaW4gdClpIGluIGU/cltpXT1uYyhlW2ldLHRbaV0pOm5baV09dFtpXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGkgaW4gciluW2ldPXJbaV0obyk7cmV0dXJuIG59fXZhciBoWT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csdVk9bmV3IFJlZ0V4cChoWS5zb3VyY2UsImciKTtmdW5jdGlvbiBtd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGd3ZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIHZiKGUsdCl7dmFyIHI9aFkubGFzdEluZGV4PXVZLmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPWhZLmV4ZWMoZSkpJiYoaT11WS5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6emkobixpKX0pKSxyPXVZLmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9nd2UobFswXS54KTptd2UodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gbmMoZSx0KXt2YXIgcj10eXBlb2YgdCxuO3JldHVybiB0PT1udWxsfHxyPT09ImJvb2xlYW4iP19iKHQpOihyPT09Im51bWJlciI/emk6cj09PSJzdHJpbmciPyhuPXJjKHQpKT8odD1uLHFtKTp2Yjp0IGluc3RhbmNlb2YgcmM/cW06dCBpbnN0YW5jZW9mIERhdGU/aEw6dUwodCk/eWI6QXJyYXkuaXNBcnJheSh0KT9jWTp0eXBlb2YgdC52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4odCk/Zkw6emkpKGUsdCl9ZnVuY3Rpb24gTHl0KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZVtNYXRoLm1heCgwLE1hdGgubWluKHQtMSxNYXRoLmZsb29yKHIqdCkpKV19fWZ1bmN0aW9uIGt5dChlLHQpe3ZhciByPVVtKCtlLCt0KTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9cihuKTtyZXR1cm4gaS0zNjAqTWF0aC5mbG9vcihpLzM2MCl9fWZ1bmN0aW9uIHBMKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZChlKigxLXIpK3Qqcil9fXZhciBSeXQ9MTgwL01hdGguUEksZEw9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gZlkoZSx0LHIsbixpLG8pe3ZhciBhLHMsbDtyZXR1cm4oYT1NYXRoLnNxcnQoZSplK3QqdCkpJiYoZS89YSx0Lz1hKSwobD1lKnIrdCpuKSYmKHItPWUqbCxuLT10KmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksZSpuPHQqciYmKGU9LWUsdD0tdCxsPS1sLGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKHQsZSkqUnl0LHNrZXdYOk1hdGguYXRhbihsKSpSeXQsc2NhbGVYOmEsc2NhbGVZOnN9fXZhciBJRSxwWSxOeXQsbUw7ZnVuY3Rpb24gRHl0KGUpe3JldHVybiBlPT09Im5vbmUiP2RMOihJRXx8KElFPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHBZPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxOeXQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLElFLnN0eWxlLnRyYW5zZm9ybT1lLGU9Tnl0LmdldENvbXB1dGVkU3R5bGUocFkuYXBwZW5kQ2hpbGQoSUUpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLHBZLnJlbW92ZUNoaWxkKElFKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxmWSgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIE95dChlKXtyZXR1cm4gZT09bnVsbD9kTDoobUx8fChtTD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxtTC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9bUwudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsZlkoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpkTCl9ZnVuY3Rpb24genl0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6emkoYyxoKX0se2k6Zy0yLHg6emkodSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDp6aShjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OnppKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDp6aShjLGgpfSx7aTpnLTIseDp6aSh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBnTD16eXQoRHl0LCJweCwgIiwicHgpIiwiZGVnKSIpLF9MPXp5dChPeXQsIiwgIiwiKSIsIikiKTt2YXIgTEU9TWF0aC5TUVJUMixkWT0yLEZ5dD00LF93ZT0xZS0xMjtmdW5jdGlvbiBCeXQoZSl7cmV0dXJuKChlPU1hdGguZXhwKGUpKSsxL2UpLzJ9ZnVuY3Rpb24geXdlKGUpe3JldHVybigoZT1NYXRoLmV4cChlKSktMS9lKS8yfWZ1bmN0aW9uIHZ3ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSl9ZnVuY3Rpb24geUwoZSx0KXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sbz10WzBdLGE9dFsxXSxzPXRbMl0sbD1vLXIsYz1hLW4sdT1sKmwrYypjLGgsZjtpZih1PF93ZSlmPU1hdGgubG9nKHMvaSkvTEUsaD1mdW5jdGlvbih4KXtyZXR1cm5bcit4Kmwsbit4KmMsaSpNYXRoLmV4cChMRSp4KmYpXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQodSksZD0ocypzLWkqaStGeXQqdSkvKDIqaSpkWSpwKSxnPShzKnMtaSppLUZ5dCp1KS8oMipzKmRZKnApLF89TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKSx5PU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7Zj0oeS1fKS9MRSxoPWZ1bmN0aW9uKHgpe3ZhciBiPXgqZixTPUJ5dChfKSxDPWkvKGRZKnApKihTKnZ3ZShMRSpiK18pLXl3ZShfKSk7cmV0dXJuW3IrQypsLG4rQypjLGkqUy9CeXQoTEUqYitfKV19fXJldHVybiBoLmR1cmF0aW9uPWYqMWUzLGh9ZnVuY3Rpb24gSHl0KGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUoKHQ9Vm0odCkpLmgsKHI9Vm0ocikpLmgpLGk9Wm4odC5zLHIucyksbz1abih0Lmwsci5sKSxhPVpuKHQub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gdC5oPW4ocyksdC5zPWkocyksdC5sPW8ocyksdC5vcGFjaXR5PWEocyksdCsiIn19fXZhciBWeXQ9SHl0KFVtKSxVeXQ9SHl0KFpuKTtmdW5jdGlvbiBNXyhlLHQpe3ZhciByPVpuKChlPXdfKGUpKS5sLCh0PXdfKHQpKS5sKSxuPVpuKGUuYSx0LmEpLGk9Wm4oZS5iLHQuYiksbz1abihlLm9wYWNpdHksdC5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGUubD1yKGEpLGUuYT1uKGEpLGUuYj1pKGEpLGUub3BhY2l0eT1vKGEpLGUrIiJ9fWZ1bmN0aW9uIHF5dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PWdiKHQpKS5oLChyPWdiKHIpKS5oKSxpPVpuKHQuYyxyLmMpLG89Wm4odC5sLHIubCksYT1abih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQuYz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgR3l0PXF5dChVbSksV3l0PXF5dChabik7ZnVuY3Rpb24gWXl0KGUpe3JldHVybiBmdW5jdGlvbiB0KHIpe3I9K3I7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPWUoKGk9bGEoaSkpLmgsKG89bGEobykpLmgpLHM9Wm4oaS5zLG8ucyksbD1abihpLmwsby5sKSxjPVpuKGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5oPWEodSksaS5zPXModSksaS5sPWwoTWF0aC5wb3codSxyKSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9dCxufSgxKX12YXIganl0PVl5dChVbSksRV89WXl0KFpuKTtmdW5jdGlvbiBtWShlLHQpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMSxpPXRbMF0sbz1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylvW3JdPWUoaSxpPXRbKytyXSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBzPU1hdGgubWF4KDAsTWF0aC5taW4obi0xLE1hdGguZmxvb3IoYSo9bikpKTtyZXR1cm4gb1tzXShhLXMpfX1mdW5jdGlvbiBYeXQoZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuLyh0LTEpKTtyZXR1cm4gcn1rbSgpO3ZhciB4Yj0wLFJFPTAsa0U9MCxLeXQ9MWUzLHZMLE5FLHhMPTAsVF89MCxiTD0wLERFPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLFp5dD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTtmdW5jdGlvbiBBcCgpe3JldHVybiBUX3x8KFp5dCh4d2UpLFRfPURFLm5vdygpK2JMKX1mdW5jdGlvbiB4d2UoKXtUXz0wfWZ1bmN0aW9uIENfKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1DXy5wcm90b3R5cGU9QV8ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDXyxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/QXAoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJk5FIT09dGhpcyYmKE5FP05FLl9uZXh0PXRoaXM6dkw9dGhpcyxORT10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLGdZKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLGdZKCkpfX07ZnVuY3Rpb24gQV8oZSx0LHIpe3ZhciBuPW5ldyBDXztyZXR1cm4gbi5yZXN0YXJ0KGUsdCxyKSxufWZ1bmN0aW9uIF9ZKCl7QXAoKSwrK3hiO2Zvcih2YXIgZT12TCx0O2U7KSh0PVRfLWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS14Yn1mdW5jdGlvbiAkeXQoKXtUXz0oeEw9REUubm93KCkpK2JMLHhiPVJFPTA7dHJ5e19ZKCl9ZmluYWxseXt4Yj0wLHd3ZSgpLFRfPTB9fWZ1bmN0aW9uIGJ3ZSgpe3ZhciBlPURFLm5vdygpLHQ9ZS14TDt0Pkt5dCYmKGJMLT10LHhMPWUpfWZ1bmN0aW9uIHd3ZSgpe2Zvcih2YXIgZSx0PXZMLHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOnZMPXIpO05FPWUsZ1kobil9ZnVuY3Rpb24gZ1koZSl7aWYoIXhiKXtSRSYmKFJFPWNsZWFyVGltZW91dChSRSkpO3ZhciB0PWUtVF87dD4yND8oZTwxLzAmJihSRT1zZXRUaW1lb3V0KCR5dCxlLURFLm5vdygpLWJMKSksa0UmJihrRT1jbGVhckludGVydmFsKGtFKSkpOihrRXx8KHhMPURFLm5vdygpLGtFPXNldEludGVydmFsKGJ3ZSxLeXQpKSx4Yj0xLFp5dCgkeXQpKX19ZnVuY3Rpb24gT0UoZSx0LHIpe3ZhciBuPW5ldyBDXztyZXR1cm4gdD10PT1udWxsPzA6K3Qsbi5yZXN0YXJ0KGZ1bmN0aW9uKGkpe24uc3RvcCgpLGUoaSt0KX0sdCxyKSxufWZ1bmN0aW9uIEp5dChlLHQscil7dmFyIG49bmV3IENfLGk9dDtyZXR1cm4gdD09bnVsbD8obi5yZXN0YXJ0KGUsdCxyKSxuKToodD0rdCxyPXI9PW51bGw/QXAoKTorcixuLnJlc3RhcnQoZnVuY3Rpb24gbyhhKXthKz1pLG4ucmVzdGFydChvLGkrPXQsciksZShhKX0sdCxyKSxuKX12YXIgU3dlPXZzKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLE13ZT1bXSx0MXQ9MCxTTD0xLE1MPTIsd0w9MyxReXQ9NCxFTD01LHpFPTY7ZnVuY3Rpb24gR20oZSx0LHIsbixpLG8pe3ZhciBhPWUuX190cmFuc2l0aW9uO2lmKCFhKWUuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYociBpbiBhKXJldHVybjtFd2UoZSxyLHtuYW1lOnQsaW5kZXg6bixncm91cDppLG9uOlN3ZSx0d2VlbjpNd2UsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6dDF0fSl9ZnVuY3Rpb24gRkUoZSx0KXt2YXIgcj1aaShlLHQpO2lmKHIuc3RhdGU+dDF0KXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gT2EoZSx0KXt2YXIgcj1aaShlLHQpO2lmKHIuc3RhdGU+d0wpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIHJ9ZnVuY3Rpb24gWmkoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbjtpZighcnx8IShyPXJbdF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gcn1mdW5jdGlvbiBFd2UoZSx0LHIpe3ZhciBuPWUuX190cmFuc2l0aW9uLGk7blt0XT1yLHIudGltZXI9QV8obywwLHIudGltZSk7ZnVuY3Rpb24gbyhjKXtyLnN0YXRlPVNMLHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09U0wpcmV0dXJuIGwoKTtmb3IodSBpbiBuKWlmKHA9blt1XSxwLm5hbWU9PT1yLm5hbWUpe2lmKHAuc3RhdGU9PT13TClyZXR1cm4gT0UoYSk7cC5zdGF0ZT09PVF5dD8ocC5zdGF0ZT16RSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImludGVycnVwdCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pOit1PHQmJihwLnN0YXRlPXpFLHAudGltZXIuc3RvcCgpLHAub24uY2FsbCgiY2FuY2VsIixlLGUuX19kYXRhX18scC5pbmRleCxwLmdyb3VwKSxkZWxldGUgblt1XSl9aWYoT0UoZnVuY3Rpb24oKXtyLnN0YXRlPT09d0wmJihyLnN0YXRlPVF5dCxyLnRpbWVyLnJlc3RhcnQocyxyLmRlbGF5LHIudGltZSkscyhjKSl9KSxyLnN0YXRlPU1MLHIub24uY2FsbCgic3RhcnQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLHIuc3RhdGU9PT1NTCl7Zm9yKHIuc3RhdGU9d0wsaT1uZXcgQXJyYXkoZj1yLnR3ZWVuLmxlbmd0aCksdT0wLGg9LTE7dTxmOysrdSkocD1yLnR3ZWVuW3VdLnZhbHVlLmNhbGwoZSxlLl9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCkpJiYoaVsrK2hdPXApO2kubGVuZ3RoPWgrMX19ZnVuY3Rpb24gcyhjKXtmb3IodmFyIHU9YzxyLmR1cmF0aW9uP3IuZWFzZS5jYWxsKG51bGwsYy9yLmR1cmF0aW9uKTooci50aW1lci5yZXN0YXJ0KGwpLHIuc3RhdGU9RUwsMSksaD0tMSxmPWkubGVuZ3RoOysraDxmOylpW2hdLmNhbGwoZSx1KTtyLnN0YXRlPT09RUwmJihyLm9uLmNhbGwoImVuZCIsZSxlLl9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCksbCgpKX1mdW5jdGlvbiBsKCl7ci5zdGF0ZT16RSxyLnRpbWVyLnN0b3AoKSxkZWxldGUgblt0XTtmb3IodmFyIGMgaW4gbilyZXR1cm47ZGVsZXRlIGUuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBodShlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saSxvPSEwLGE7aWYoISFyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihhIGluIHIpe2lmKChuPXJbYV0pLm5hbWUhPT10KXtvPSExO2NvbnRpbnVlfWk9bi5zdGF0ZT5NTCYmbi5zdGF0ZTxFTCxuLnN0YXRlPXpFLG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChpPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGUsZS5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSByW2FdfW8mJmRlbGV0ZSBlLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gZTF0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtodSh0aGlzLGUpfSl9ZnVuY3Rpb24gVHdlKGUsdCl7dmFyIHIsbjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1PYSh0aGlzLGUpLG89aS50d2VlbjtpZihvIT09cil7bj1yPW87Zm9yKHZhciBhPTAscz1uLmxlbmd0aDthPHM7KythKWlmKG5bYV0ubmFtZT09PXQpe249bi5zbGljZSgpLG4uc3BsaWNlKGEsMSk7YnJlYWt9fWkudHdlZW49bn19ZnVuY3Rpb24gQ3dlKGUsdCxyKXt2YXIgbixpO2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1PYSh0aGlzLGUpLGE9by50d2VlbjtpZihhIT09bil7aT0obj1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTp0LHZhbHVlOnJ9LGw9MCxjPWkubGVuZ3RoO2w8YzsrK2wpaWYoaVtsXS5uYW1lPT09dCl7aVtsXT1zO2JyZWFrfWw9PT1jJiZpLnB1c2gocyl9by50d2Vlbj1pfX1mdW5jdGlvbiByMXQoZSx0KXt2YXIgcj10aGlzLl9pZDtpZihlKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1aaSh0aGlzLm5vZGUoKSxyKS50d2VlbixpPTAsbz1uLmxlbmd0aCxhO2k8bzsrK2kpaWYoKGE9bltpXSkubmFtZT09PWUpcmV0dXJuIGEudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9Ud2U6Q3dlKShyLGUsdCkpfWZ1bmN0aW9uIGJiKGUsdCxyKXt2YXIgbj1lLl9pZDtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9T2EodGhpcyxuKTsoaS52YWx1ZXx8KGkudmFsdWU9e30pKVt0XT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKGkpe3JldHVybiBaaShpLG4pLnZhbHVlW3RdfX1mdW5jdGlvbiBUTChlLHQpe3ZhciByO3JldHVybih0eXBlb2YgdD09Im51bWJlciI/emk6dCBpbnN0YW5jZW9mIHJjP3FtOihyPXJjKHQpKT8odD1yLHFtKTp2YikoZSx0KX1mdW5jdGlvbiBBd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIFB3ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIEl3ZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGUoZSk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBMd2UoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIGt3ZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHM9cih0aGlzKSxsO3JldHVybiBzPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6KGE9dGhpcy5nZXRBdHRyaWJ1dGUoZSksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIFJ3ZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHM9cih0aGlzKSxsO3JldHVybiBzPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOihhPXRoaXMuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKSxsPXMrIiIsYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpKX19ZnVuY3Rpb24gbjF0KGUsdCl7dmFyIHI9UGgoZSksbj1yPT09InRyYW5zZm9ybSI/X0w6VEw7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKGUsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KHIubG9jYWw/UndlOmt3ZSkocixuLGJiKHRoaXMsImF0dHIuIitlLHQpKTp0PT1udWxsPyhyLmxvY2FsP1B3ZTpBd2UpKHIpOihyLmxvY2FsP0x3ZTpJd2UpKHIsbix0KSl9ZnVuY3Rpb24gTndlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlKGUsdC5jYWxsKHRoaXMscikpfX1mdW5jdGlvbiBEd2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsdC5jYWxsKHRoaXMscikpfX1mdW5jdGlvbiBPd2UoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZEd2UoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIHp3ZShlLHQpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKHI9KG49bykmJk53ZShlLG8pKSxyfXJldHVybiBpLl92YWx1ZT10LGl9ZnVuY3Rpb24gaTF0KGUsdCl7dmFyIHI9ImF0dHIuIitlO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjt2YXIgbj1QaChlKTtyZXR1cm4gdGhpcy50d2VlbihyLChuLmxvY2FsP093ZTp6d2UpKG4sdCkpfWZ1bmN0aW9uIEZ3ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe0ZFKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBCd2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe0ZFKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gbzF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/RndlOkJ3ZSkodCxlKSk6WmkodGhpcy5ub2RlKCksdCkuZGVsYXl9ZnVuY3Rpb24gSHdlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7T2EodGhpcyxlKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFZ3ZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7T2EodGhpcyxlKS5kdXJhdGlvbj10fX1mdW5jdGlvbiBhMXQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9Id2U6VndlKSh0LGUpKTpaaSh0aGlzLm5vZGUoKSx0KS5kdXJhdGlvbn1mdW5jdGlvbiBVd2UoZSx0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7T2EodGhpcyxlKS5lYXNlPXR9fWZ1bmN0aW9uIHMxdChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goVXdlKHQsZSkpOlppKHRoaXMubm9kZSgpLHQpLmVhc2V9ZnVuY3Rpb24gbDF0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT11YihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgRm8obix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIGMxdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgRm8oYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIHF3ZShlKXtyZXR1cm4oZSsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciByPXQuaW5kZXhPZigiLiIpO3JldHVybiByPj0wJiYodD10LnNsaWNlKDAscikpLCF0fHx0PT09InN0YXJ0In0pfWZ1bmN0aW9uIEd3ZShlLHQscil7dmFyIG4saSxvPXF3ZSh0KT9GRTpPYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsZSkscz1hLm9uO3MhPT1uJiYoaT0obj1zKS5jb3B5KCkpLm9uKHQsciksYS5vbj1pfX1mdW5jdGlvbiB1MXQoZSx0KXt2YXIgcj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP1ppKHRoaXMubm9kZSgpLHIpLm9uLm9uKGUpOnRoaXMuZWFjaChHd2UocixlLHQpKX1mdW5jdGlvbiBXd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgciBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrciE9PWUpcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIGgxdCgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixXd2UodGhpcy5faWQpKX1mdW5jdGlvbiBmMXQoZSl7dmFyIHQ9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1ObShlKSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89bmV3IEFycmF5KGkpLGE9MDthPGk7KythKWZvcih2YXIgcz1uW2FdLGw9cy5sZW5ndGgsYz1vW2FdPW5ldyBBcnJheShsKSx1LGgsZj0wO2Y8bDsrK2YpKHU9c1tmXSkmJihoPWUuY2FsbCh1LHUuX19kYXRhX18sZixzKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksY1tmXT1oLEdtKGNbZl0sdCxyLGYsYyxaaSh1LHIpKSk7cmV0dXJuIG5ldyBGbyhvLHRoaXMuX3BhcmVudHMsdCxyKX1mdW5jdGlvbiBwMXQoZSl7dmFyIHQ9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1jYihlKSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89W10sYT1bXSxzPTA7czxpOysrcylmb3IodmFyIGw9bltzXSxjPWwubGVuZ3RoLHUsaD0wO2g8YzsrK2gpaWYodT1sW2hdKXtmb3IodmFyIGY9ZS5jYWxsKHUsdS5fX2RhdGFfXyxoLGwpLHAsZD1aaSh1LHIpLGc9MCxfPWYubGVuZ3RoO2c8XzsrK2cpKHA9ZltnXSkmJkdtKHAsdCxyLGcsZixkKTtvLnB1c2goZiksYS5wdXNoKHUpfXJldHVybiBuZXcgRm8obyxhLHQscil9dmFyIFl3ZT1JaC5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gZDF0KCl7cmV0dXJuIG5ldyBZd2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGp3ZShlLHQpe3ZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1TcCh0aGlzLGUpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSksU3AodGhpcyxlKSk7cmV0dXJuIG89PT1hP251bGw6bz09PXImJmE9PT1uP2k6aT10KHI9byxuPWEpfX1mdW5jdGlvbiBtMXQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gWHdlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1TcCh0aGlzLGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gJHdlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9U3AodGhpcyxlKSxzPXIodGhpcyksbD1zKyIiO3JldHVybiBzPT1udWxsJiYobD1zPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFNwKHRoaXMsZSkpKSxhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSl9fWZ1bmN0aW9uIEt3ZShlLHQpe3ZhciByLG4saSxvPSJzdHlsZS4iK3QsYT0iZW5kLiIrbyxzO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPU9hKHRoaXMsZSksYz1sLm9uLHU9bC52YWx1ZVtvXT09bnVsbD9zfHwocz1tMXQodCkpOnZvaWQgMDsoYyE9PXJ8fGkhPT11KSYmKG49KHI9YykuY29weSgpKS5vbihhLGk9dSksbC5vbj1ufX1mdW5jdGlvbiBnMXQoZSx0LHIpe3ZhciBuPShlKz0iIik9PSJ0cmFuc2Zvcm0iP2dMOlRMO3JldHVybiB0PT1udWxsP3RoaXMuc3R5bGVUd2VlbihlLGp3ZShlLG4pKS5vbigiZW5kLnN0eWxlLiIrZSxtMXQoZSkpOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3RoaXMuc3R5bGVUd2VlbihlLCR3ZShlLG4sYmIodGhpcywic3R5bGUuIitlLHQpKSkuZWFjaChLd2UodGhpcy5faWQsZSkpOnRoaXMuc3R5bGVUd2VlbihlLFh3ZShlLG4sdCkscikub24oImVuZC5zdHlsZS4iK2UsbnVsbCl9ZnVuY3Rpb24gWndlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQuY2FsbCh0aGlzLG4pLHIpfX1mdW5jdGlvbiBKd2UoZSx0LHIpe3ZhciBuLGk7ZnVuY3Rpb24gbygpe3ZhciBhPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKG49KGk9YSkmJlp3ZShlLGEscikpLG59cmV0dXJuIG8uX3ZhbHVlPXQsb31mdW5jdGlvbiBfMXQoZSx0LHIpe3ZhciBuPSJzdHlsZS4iKyhlKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKG4sSndlKGUsdCxyPT1udWxsPyIiOnIpKX1mdW5jdGlvbiBRd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiB0U2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24geTF0KGUpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2YgZT09ImZ1bmN0aW9uIj90U2UoYmIodGhpcywidGV4dCIsZSkpOlF3ZShlPT1udWxsPyIiOmUrIiIpKX1mdW5jdGlvbiBlU2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9ZS5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIHJTZShlKXt2YXIgdCxyO2Z1bmN0aW9uIG4oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJih0PShyPWkpJiZlU2UoaSkpLHR9cmV0dXJuIG4uX3ZhbHVlPWUsbn1mdW5jdGlvbiB2MXQoZSl7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYoZT09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LHJTZShlKSl9ZnVuY3Rpb24geDF0KCl7Zm9yKHZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZCxyPUNMKCksbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpaWYobD1hW2NdKXt2YXIgdT1aaShsLHQpO0dtKGwsZSxyLGMsYSx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgRm8obix0aGlzLl9wYXJlbnRzLGUscil9ZnVuY3Rpb24gYjF0KCl7dmFyIGUsdCxyPXRoaXMsbj1yLl9pZCxpPXIuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvLGEpe3ZhciBzPXt2YWx1ZTphfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0taT09PTAmJm8oKX19O3IuZWFjaChmdW5jdGlvbigpe3ZhciBjPU9hKHRoaXMsbiksdT1jLm9uO3UhPT1lJiYodD0oZT11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKHMpLHQuXy5pbnRlcnJ1cHQucHVzaChzKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIG5TZT0wO2Z1bmN0aW9uIEZvKGUsdCxyLG4pe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dCx0aGlzLl9uYW1lPXIsdGhpcy5faWQ9bn1mdW5jdGlvbiBBTChlKXtyZXR1cm4gSWgoKS50cmFuc2l0aW9uKGUpfWZ1bmN0aW9uIENMKCl7cmV0dXJuKytuU2V9dmFyIHdiPUloLnByb3RvdHlwZTtGby5wcm90b3R5cGU9QUwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGbyxzZWxlY3Q6ZjF0LHNlbGVjdEFsbDpwMXQsZmlsdGVyOmwxdCxtZXJnZTpjMXQsc2VsZWN0aW9uOmQxdCx0cmFuc2l0aW9uOngxdCxjYWxsOndiLmNhbGwsbm9kZXM6d2Iubm9kZXMsbm9kZTp3Yi5ub2RlLHNpemU6d2Iuc2l6ZSxlbXB0eTp3Yi5lbXB0eSxlYWNoOndiLmVhY2gsb246dTF0LGF0dHI6bjF0LGF0dHJUd2VlbjppMXQsc3R5bGU6ZzF0LHN0eWxlVHdlZW46XzF0LHRleHQ6eTF0LHRleHRUd2Vlbjp2MXQscmVtb3ZlOmgxdCx0d2VlbjpyMXQsZGVsYXk6bzF0LGR1cmF0aW9uOmExdCxlYXNlOnMxdCxlbmQ6YjF0fTtJXygpO3ZhciBxWT17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6eHN9O2Z1bmN0aW9uIGZTZShlLHQpe2Zvcih2YXIgcjshKHI9ZS5fX3RyYW5zaXRpb24pfHwhKHI9clt0XSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybiBxWS50aW1lPUFwKCkscVk7cmV0dXJuIHJ9ZnVuY3Rpb24gRDF0KGUpe3ZhciB0LHI7ZSBpbnN0YW5jZW9mIEZvPyh0PWUuX2lkLGU9ZS5fbmFtZSk6KHQ9Q0woKSwocj1xWSkudGltZT1BcCgpLGU9ZT09bnVsbD9udWxsOmUrIiIpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJkdtKGwsZSx0LGMsYSxyfHxmU2UobCx0KSk7cmV0dXJuIG5ldyBGbyhuLHRoaXMuX3BhcmVudHMsZSx0KX1JaC5wcm90b3R5cGUuaW50ZXJydXB0PWUxdDtJaC5wcm90b3R5cGUudHJhbnNpdGlvbj1EMXQ7dmFyIHBTZT1bbnVsbF07ZnVuY3Rpb24gTzF0KGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb24sbixpO2lmKHIpe3Q9dD09bnVsbD9udWxsOnQrIiI7Zm9yKGkgaW4gcilpZigobj1yW2ldKS5zdGF0ZT5TTCYmbi5uYW1lPT09dClyZXR1cm4gbmV3IEZvKFtbZV1dLHBTZSx0LCtpKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB6TChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gejF0KGUsdCxyKXt0aGlzLnRhcmdldD1lLHRoaXMudHlwZT10LHRoaXMuc2VsZWN0aW9uPXJ9ZnVuY3Rpb24gR1koKXtxdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBGTCgpe3F0LnByZXZlbnREZWZhdWx0KCkscXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIEYxdD17bmFtZToiZHJhZyJ9LFdZPXtuYW1lOiJzcGFjZSJ9LE1iPXtuYW1lOiJoYW5kbGUifSxFYj17bmFtZToiY2VudGVyIn07ZnVuY3Rpb24gQjF0KGUpe3JldHVyblsrZVswXSwrZVsxXV19ZnVuY3Rpb24galkoZSl7cmV0dXJuW0IxdChlWzBdKSxCMXQoZVsxXSldfWZ1bmN0aW9uIGRTZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFRwKHQscXQudG91Y2hlcyxlKX19dmFyIEJMPXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAoQkUpLGlucHV0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PW51bGw/bnVsbDpbWytlWzBdLHRbMF1bMV1dLFsrZVsxXSx0WzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZSYmW2VbMF1bMF0sZVsxXVswXV19fSxITD17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKEJFKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP251bGw6W1t0WzBdWzBdLCtlWzBdXSxbdFsxXVswXSwrZVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzFdLGVbMV1bMV1dfX0sbVNlPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChCRSksaW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDpqWShlKX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlfX0sUHA9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LEgxdD17ZToidyIsdzoiZSIsbnc6Im5lIixuZToibnciLHNlOiJzdyIsc3c6InNlIn0sVjF0PXtuOiJzIixzOiJuIixudzoic3ciLG5lOiJzZSIsc2U6Im5lIixzdzoibncifSxnU2U9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sX1NlPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjotMSxlOm51bGwsczoxLHc6bnVsbCxudzotMSxuZTotMSxzZToxLHN3OjF9O2Z1bmN0aW9uIEJFKGUpe3JldHVybnt0eXBlOmV9fWZ1bmN0aW9uIHlTZSgpe3JldHVybiFxdC5jdHJsS2V5JiYhcXQuYnV0dG9ufWZ1bmN0aW9uIHZTZSgpe3ZhciBlPXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybiBlLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpPyhlPWUudmlld0JveC5iYXNlVmFsLFtbZS54LGUueV0sW2UueCtlLndpZHRoLGUueStlLmhlaWdodF1dKTpbWzAsMF0sW2Uud2lkdGguYmFzZVZhbC52YWx1ZSxlLmhlaWdodC5iYXNlVmFsLnZhbHVlXV19ZnVuY3Rpb24geFNlKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIFlZKGUpe2Zvcig7IWUuX19icnVzaDspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiBlLl9fYnJ1c2h9ZnVuY3Rpb24gYlNlKGUpe3JldHVybiBlWzBdWzBdPT09ZVsxXVswXXx8ZVswXVsxXT09PWVbMV1bMV19ZnVuY3Rpb24gVkwoZSl7dmFyIHQ9ZS5fX2JydXNoO3JldHVybiB0P3QuZGltLm91dHB1dCh0LnNlbGVjdGlvbik6bnVsbH1mdW5jdGlvbiBVMXQoKXtyZXR1cm4gWFkoQkwpfWZ1bmN0aW9uIFVMKCl7cmV0dXJuIFhZKEhMKX1mdW5jdGlvbiBxTCgpe3JldHVybiBYWShtU2UpfWZ1bmN0aW9uIFhZKGUpe3ZhciB0PXZTZSxyPXlTZSxuPXhTZSxpPSEwLG89dnMoInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxhPTYscztmdW5jdGlvbiBsKF8pe3ZhciB5PV8ucHJvcGVydHkoIl9fYnJ1c2giLGcpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtCRSgib3ZlcmxheSIpXSk7eS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixQcC5vdmVybGF5KS5tZXJnZSh5KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9WVkodGhpcykuZXh0ZW50O0h0KHRoaXMpLmF0dHIoIngiLGJbMF1bMF0pLmF0dHIoInkiLGJbMF1bMV0pLmF0dHIoIndpZHRoIixiWzFdWzBdLWJbMF1bMF0pLmF0dHIoImhlaWdodCIsYlsxXVsxXS1iWzBdWzFdKX0pLF8uc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbQkUoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsUHAuc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIHg9Xy5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKGUuaGFuZGxlcyxmdW5jdGlvbihiKXtyZXR1cm4gYi50eXBlfSk7eC5leGl0KCkucmVtb3ZlKCkseC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihiKXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIitiLnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKGIpe3JldHVybiBQcFtiLnR5cGVdfSksXy5lYWNoKGMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5vbigibW91c2Vkb3duLmJydXNoIixmKS5maWx0ZXIobikub24oInRvdWNoc3RhcnQuYnJ1c2giLGYpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLHApLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsZCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWwubW92ZT1mdW5jdGlvbihfLHkpe18uc2VsZWN0aW9uP18ub24oInN0YXJ0LmJydXNoIixmdW5jdGlvbigpe3UodGhpcyxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCkuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIixmdW5jdGlvbigpe3UodGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oImJydXNoIixmdW5jdGlvbigpe3ZhciB4PXRoaXMsYj14Ll9fYnJ1c2gsUz11KHgsYXJndW1lbnRzKSxDPWIuc2VsZWN0aW9uLFA9ZS5pbnB1dCh0eXBlb2YgeT09ImZ1bmN0aW9uIj95LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp5LGIuZXh0ZW50KSxrPW5jKEMsUCk7ZnVuY3Rpb24gTyhEKXtiLnNlbGVjdGlvbj1EPT09MSYmUD09PW51bGw/bnVsbDprKEQpLGMuY2FsbCh4KSxTLmJydXNoKCl9cmV0dXJuIEMhPT1udWxsJiZQIT09bnVsbD9POk8oMSl9KTpfLmVhY2goZnVuY3Rpb24oKXt2YXIgeD10aGlzLGI9YXJndW1lbnRzLFM9eC5fX2JydXNoLEM9ZS5pbnB1dCh0eXBlb2YgeT09ImZ1bmN0aW9uIj95LmFwcGx5KHgsYik6eSxTLmV4dGVudCksUD11KHgsYikuYmVmb3Jlc3RhcnQoKTtodSh4KSxTLnNlbGVjdGlvbj1DPT09bnVsbD9udWxsOkMsYy5jYWxsKHgpLFAuc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9LGwuY2xlYXI9ZnVuY3Rpb24oXyl7bC5tb3ZlKF8sbnVsbCl9O2Z1bmN0aW9uIGMoKXt2YXIgXz1IdCh0aGlzKSx5PVlZKHRoaXMpLnNlbGVjdGlvbjt5PyhfLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4Iix5WzBdWzBdKS5hdHRyKCJ5Iix5WzBdWzFdKS5hdHRyKCJ3aWR0aCIseVsxXVswXS15WzBdWzBdKS5hdHRyKCJoZWlnaHQiLHlbMV1bMV0teVswXVsxXSksXy5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHlwZVt4LnR5cGUubGVuZ3RoLTFdPT09ImUiP3lbMV1bMF0tYS8yOnlbMF1bMF0tYS8yfSkuYXR0cigieSIsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHlwZVswXT09PSJzIj95WzFdWzFdLWEvMjp5WzBdWzFdLWEvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih4KXtyZXR1cm4geC50eXBlPT09Im4ifHx4LnR5cGU9PT0icyI/eVsxXVswXS15WzBdWzBdK2E6YX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHlwZT09PSJlInx8eC50eXBlPT09InciP3lbMV1bMV0teVswXVsxXSthOmF9KSk6Xy5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIHUoXyx5LHgpe3ZhciBiPV8uX19icnVzaC5lbWl0dGVyO3JldHVybiBiJiYoIXh8fCFiLmNsZWFuKT9iOm5ldyBoKF8seSx4KX1mdW5jdGlvbiBoKF8seSx4KXt0aGlzLnRoYXQ9Xyx0aGlzLmFyZ3M9eSx0aGlzLnN0YXRlPV8uX19icnVzaCx0aGlzLmFjdGl2ZT0wLHRoaXMuY2xlYW49eH1oLnByb3RvdHlwZT17YmVmb3Jlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMuYWN0aXZlPT09MSYmKHRoaXMuc3RhdGUuZW1pdHRlcj10aGlzLHRoaXMuc3RhcnRpbmc9ITApLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRpbmc/KHRoaXMuc3RhcnRpbmc9ITEsdGhpcy5lbWl0KCJzdGFydCIpKTp0aGlzLmVtaXQoImJydXNoIiksdGhpc30sYnJ1c2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybi0tdGhpcy5hY3RpdmU9PT0wJiYoZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlcix0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKF8pe01wKG5ldyB6MXQobCxfLGUub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSksby5hcHBseSxvLFtfLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19O2Z1bmN0aW9uIGYoKXtpZihzJiYhcXQudG91Y2hlc3x8IXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgXz10aGlzLHk9cXQudGFyZ2V0Ll9fZGF0YV9fLnR5cGUseD0oaSYmcXQubWV0YUtleT95PSJvdmVybGF5Ijp5KT09PSJzZWxlY3Rpb24iP0YxdDppJiZxdC5hbHRLZXk/RWI6TWIsYj1lPT09SEw/bnVsbDpnU2VbeV0sUz1lPT09Qkw/bnVsbDpfU2VbeV0sQz1ZWShfKSxQPUMuZXh0ZW50LGs9Qy5zZWxlY3Rpb24sTz1QWzBdWzBdLEQsQixJPVBbMF1bMV0sTCxSLEY9UFsxXVswXSx6LFUsVz1QWzFdWzFdLFoscnQsb3Q9MCxzdD0wLFN0LGJ0PWImJlMmJmkmJnF0LnNoaWZ0S2V5LE10LGx0LEt0PXF0LnRvdWNoZXM/ZFNlKHF0LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIpOnpvLF90PUt0KF8pLGN0PV90LFg9dShfLGFyZ3VtZW50cywhMCkuYmVmb3Jlc3RhcnQoKTt5PT09Im92ZXJsYXkiPyhrJiYoU3Q9ITApLEMuc2VsZWN0aW9uPWs9W1tEPWU9PT1ITD9POl90WzBdLEw9ZT09PUJMP0k6X3RbMV1dLFt6PWU9PT1ITD9GOkQsWj1lPT09Qkw/VzpMXV0pOihEPWtbMF1bMF0sTD1rWzBdWzFdLHo9a1sxXVswXSxaPWtbMV1bMV0pLEI9RCxSPUwsVT16LHJ0PVo7dmFyIGV0PUh0KF8pLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLGR0PWV0LnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLFBwW3ldKTtpZihxdC50b3VjaGVzKVgubW92ZWQ9cHQsWC5lbmRlZD13dDtlbHNle3ZhciBxPUh0KHF0LnZpZXcpLm9uKCJtb3VzZW1vdmUuYnJ1c2giLHB0LCEwKS5vbigibW91c2V1cC5icnVzaCIsd3QsITApO2kmJnEub24oImtleWRvd24uYnJ1c2giLGt0LCEwKS5vbigia2V5dXAuYnJ1c2giLGllLCEwKSx6bShxdC52aWV3KX1HWSgpLGh1KF8pLGMuY2FsbChfKSxYLnN0YXJ0KCk7ZnVuY3Rpb24gcHQoKXt2YXIgZWU9S3QoXyk7YnQmJiFNdCYmIWx0JiYoTWF0aC5hYnMoZWVbMF0tY3RbMF0pPk1hdGguYWJzKGVlWzFdLWN0WzFdKT9sdD0hMDpNdD0hMCksY3Q9ZWUsU3Q9ITAsRkwoKSxodCgpfWZ1bmN0aW9uIGh0KCl7dmFyIGVlO3N3aXRjaChvdD1jdFswXS1fdFswXSxzdD1jdFsxXS1fdFsxXSx4KXtjYXNlIFdZOmNhc2UgRjF0OntiJiYob3Q9TWF0aC5tYXgoTy1ELE1hdGgubWluKEYteixvdCkpLEI9RCtvdCxVPXorb3QpLFMmJihzdD1NYXRoLm1heChJLUwsTWF0aC5taW4oVy1aLHN0KSksUj1MK3N0LHJ0PVorc3QpO2JyZWFrfWNhc2UgTWI6e2I8MD8ob3Q9TWF0aC5tYXgoTy1ELE1hdGgubWluKEYtRCxvdCkpLEI9RCtvdCxVPXopOmI+MCYmKG90PU1hdGgubWF4KE8teixNYXRoLm1pbihGLXosb3QpKSxCPUQsVT16K290KSxTPDA/KHN0PU1hdGgubWF4KEktTCxNYXRoLm1pbihXLUwsc3QpKSxSPUwrc3QscnQ9Wik6Uz4wJiYoc3Q9TWF0aC5tYXgoSS1aLE1hdGgubWluKFctWixzdCkpLFI9TCxydD1aK3N0KTticmVha31jYXNlIEViOntiJiYoQj1NYXRoLm1heChPLE1hdGgubWluKEYsRC1vdCpiKSksVT1NYXRoLm1heChPLE1hdGgubWluKEYseitvdCpiKSkpLFMmJihSPU1hdGgubWF4KEksTWF0aC5taW4oVyxMLXN0KlMpKSxydD1NYXRoLm1heChJLE1hdGgubWluKFcsWitzdCpTKSkpO2JyZWFrfX1VPEImJihiKj0tMSxlZT1ELEQ9eix6PWVlLGVlPUIsQj1VLFU9ZWUseSBpbiBIMXQmJmR0LmF0dHIoImN1cnNvciIsUHBbeT1IMXRbeV1dKSkscnQ8UiYmKFMqPS0xLGVlPUwsTD1aLFo9ZWUsZWU9UixSPXJ0LHJ0PWVlLHkgaW4gVjF0JiZkdC5hdHRyKCJjdXJzb3IiLFBwW3k9VjF0W3ldXSkpLEMuc2VsZWN0aW9uJiYoaz1DLnNlbGVjdGlvbiksTXQmJihCPWtbMF1bMF0sVT1rWzFdWzBdKSxsdCYmKFI9a1swXVsxXSxydD1rWzFdWzFdKSwoa1swXVswXSE9PUJ8fGtbMF1bMV0hPT1SfHxrWzFdWzBdIT09VXx8a1sxXVsxXSE9PXJ0KSYmKEMuc2VsZWN0aW9uPVtbQixSXSxbVSxydF1dLGMuY2FsbChfKSxYLmJydXNoKCkpfWZ1bmN0aW9uIHd0KCl7aWYoR1koKSxxdC50b3VjaGVzKXtpZihxdC50b3VjaGVzLmxlbmd0aClyZXR1cm47cyYmY2xlYXJUaW1lb3V0KHMpLHM9c2V0VGltZW91dChmdW5jdGlvbigpe3M9bnVsbH0sNTAwKX1lbHNlIEZtKHF0LnZpZXcsU3QpLHEub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO2V0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksZHQuYXR0cigiY3Vyc29yIixQcC5vdmVybGF5KSxDLnNlbGVjdGlvbiYmKGs9Qy5zZWxlY3Rpb24pLGJTZShrKSYmKEMuc2VsZWN0aW9uPW51bGwsYy5jYWxsKF8pKSxYLmVuZCgpfWZ1bmN0aW9uIGt0KCl7c3dpdGNoKHF0LmtleUNvZGUpe2Nhc2UgMTY6e2J0PWImJlM7YnJlYWt9Y2FzZSAxODp7eD09PU1iJiYoYiYmKHo9VS1vdCpiLEQ9QitvdCpiKSxTJiYoWj1ydC1zdCpTLEw9UitzdCpTKSx4PUViLGh0KCkpO2JyZWFrfWNhc2UgMzI6eyh4PT09TWJ8fHg9PT1FYikmJihiPDA/ej1VLW90OmI+MCYmKEQ9Qi1vdCksUzwwP1o9cnQtc3Q6Uz4wJiYoTD1SLXN0KSx4PVdZLGR0LmF0dHIoImN1cnNvciIsUHAuc2VsZWN0aW9uKSxodCgpKTticmVha31kZWZhdWx0OnJldHVybn1GTCgpfWZ1bmN0aW9uIGllKCl7c3dpdGNoKHF0LmtleUNvZGUpe2Nhc2UgMTY6e2J0JiYoTXQ9bHQ9YnQ9ITEsaHQoKSk7YnJlYWt9Y2FzZSAxODp7eD09PUViJiYoYjwwP3o9VTpiPjAmJihEPUIpLFM8MD9aPXJ0OlM+MCYmKEw9UikseD1NYixodCgpKTticmVha31jYXNlIDMyOnt4PT09V1kmJihxdC5hbHRLZXk/KGImJih6PVUtb3QqYixEPUIrb3QqYiksUyYmKFo9cnQtc3QqUyxMPVIrc3QqUykseD1FYik6KGI8MD96PVU6Yj4wJiYoRD1CKSxTPDA/Wj1ydDpTPjAmJihMPVIpLHg9TWIpLGR0LmF0dHIoImN1cnNvciIsUHBbeV0pLGh0KCkpO2JyZWFrfWRlZmF1bHQ6cmV0dXJufUZMKCl9fWZ1bmN0aW9uIHAoKXt1KHRoaXMsYXJndW1lbnRzKS5tb3ZlZCgpfWZ1bmN0aW9uIGQoKXt1KHRoaXMsYXJndW1lbnRzKS5lbmRlZCgpfWZ1bmN0aW9uIGcoKXt2YXIgXz10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIF8uZXh0ZW50PWpZKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxfLmRpbT1lLF99cmV0dXJuIGwuZXh0ZW50PWZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBfPT0iZnVuY3Rpb24iP186ekwoalkoXykpLGwpOnR9LGwuZmlsdGVyPWZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBfPT0iZnVuY3Rpb24iP186ekwoISFfKSxsKTpyfSxsLnRvdWNoYWJsZT1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOnpMKCEhXyksbCk6bn0sbC5oYW5kbGVTaXplPWZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPStfLGwpOmF9LGwua2V5TW9kaWZpZXJzPWZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSEhXyxsKTppfSxsLm9uPWZ1bmN0aW9uKCl7dmFyIF89by5vbi5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIF89PT1vP2w6X30sbH12YXIgJFk9TWF0aC5jb3MsS1k9TWF0aC5zaW4scTF0PU1hdGguUEksSEU9cTF0LzIsWlk9cTF0KjIsSlk9TWF0aC5tYXg7ZnVuY3Rpb24gd1NlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLHIuc291cmNlLnZhbHVlK3IudGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gRzF0KCl7dmFyIGU9MCx0PW51bGwscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8pe3ZhciBhPW8ubGVuZ3RoLHM9W10sbD1JcihhKSxjPVtdLHU9W10saD11Lmdyb3Vwcz1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSphKSxwLGQsZyxfLHkseDtmb3IocD0wLHk9LTE7Kyt5PGE7KXtmb3IoZD0wLHg9LTE7Kyt4PGE7KWQrPW9beV1beF07cy5wdXNoKGQpLGMucHVzaChJcihhKSkscCs9ZH1mb3IodCYmbC5zb3J0KGZ1bmN0aW9uKEIsSSl7cmV0dXJuIHQoc1tCXSxzW0ldKX0pLHImJmMuZm9yRWFjaChmdW5jdGlvbihCLEkpe0Iuc29ydChmdW5jdGlvbihMLFIpe3JldHVybiByKG9bSV1bTF0sb1tJXVtSXSl9KX0pLHA9SlkoMCxaWS1lKmEpL3AsXz1wP2U6WlkvYSxkPTAseT0tMTsrK3k8YTspe2ZvcihnPWQseD0tMTsrK3g8YTspe3ZhciBiPWxbeV0sUz1jW2JdW3hdLEM9b1tiXVtTXSxQPWQsaz1kKz1DKnA7ZltTKmErYl09e2luZGV4OmIsc3ViaW5kZXg6UyxzdGFydEFuZ2xlOlAsZW5kQW5nbGU6ayx2YWx1ZTpDfX1oW2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpkLHZhbHVlOnNbYl19LGQrPV99Zm9yKHk9LTE7Kyt5PGE7KWZvcih4PXktMTsrK3g8YTspe3ZhciBPPWZbeCphK3ldLEQ9Zlt5KmEreF07KE8udmFsdWV8fEQudmFsdWUpJiZ1LnB1c2goTy52YWx1ZTxELnZhbHVlP3tzb3VyY2U6RCx0YXJnZXQ6T306e3NvdXJjZTpPLHRhcmdldDpEfSl9cmV0dXJuIG4/dS5zb3J0KG4pOnV9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9SlkoMCxvKSxpKTplfSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9byxpKTp0fSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9byxpKTpyfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89PW51bGw/bj1udWxsOihuPXdTZShvKSkuXz1vLGkpOm4mJm4uX30saX12YXIgVzF0PUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBHTChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFFZPU1hdGguUEksdGo9MipRWSxMXz0xZS02LFNTZT10ai1MXztmdW5jdGlvbiBlaigpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIFkxdCgpe3JldHVybiBuZXcgZWp9ZWoucHJvdG90eXBlPVkxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVqLG1vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPSt0KX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJRIisgK2UrIiwiKyArdCsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fKz0iQyIrICtlKyIsIisgK3QrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbihlLHQscixuLGkpe2U9K2UsdD0rdCxyPStyLG49K24saT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9ci1lLGw9bi10LGM9by1lLHU9YS10LGg9YypjK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2UgaWYoaD5MXylpZighKE1hdGguYWJzKHUqcy1sKmMpPkxfKXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZXt2YXIgZj1yLW8scD1uLWEsZD1zKnMrbCpsLGc9ZipmK3AqcCxfPU1hdGguc3FydChkKSx5PU1hdGguc3FydChoKSx4PWkqTWF0aC50YW4oKFFZLU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPkxfJiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPkxffHxNYXRoLmFicyh0aGlzLl95MS1jKT5MXykmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJXRqK3RqKSxoPlNTZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKGUtYSkrIiwiKyh0LXMpKyJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD5MXyYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoaD49UVkpKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgYnM9WTF0O2Z1bmN0aW9uIE1TZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gRVNlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBUU2UoZSl7cmV0dXJuIGUucmFkaXVzfWZ1bmN0aW9uIENTZShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIEFTZShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBqMXQoKXt2YXIgZT1NU2UsdD1FU2Uscj1UU2Usbj1DU2UsaT1BU2Usbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcyxsPVcxdC5jYWxsKGFyZ3VtZW50cyksYz1lLmFwcGx5KHRoaXMsbCksdT10LmFwcGx5KHRoaXMsbCksaD0rci5hcHBseSh0aGlzLChsWzBdPWMsbCkpLGY9bi5hcHBseSh0aGlzLGwpLUhFLHA9aS5hcHBseSh0aGlzLGwpLUhFLGQ9aCokWShmKSxnPWgqS1koZiksXz0rci5hcHBseSh0aGlzLChsWzBdPXUsbCkpLHk9bi5hcHBseSh0aGlzLGwpLUhFLHg9aS5hcHBseSh0aGlzLGwpLUhFO2lmKG98fChvPXM9YnMoKSksby5tb3ZlVG8oZCxnKSxvLmFyYygwLDAsaCxmLHApLChmIT09eXx8cCE9PXgpJiYoby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxfKiRZKHkpLF8qS1koeSkpLG8uYXJjKDAsMCxfLHkseCkpLG8ucXVhZHJhdGljQ3VydmVUbygwLDAsZCxnKSxvLmNsb3NlUGF0aCgpLHMpcmV0dXJuIG89bnVsbCxzKyIifHxudWxsfXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdMKCtzKSxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHTCgrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdMKCtzKSxhKTppfSxhLnNvdXJjZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zLGEpOmV9LGEudGFyZ2V0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXM9PW51bGw/bnVsbDpzLGEpOm99LGF9VGIoKTt2YXIgTFNlPUFycmF5LnByb3RvdHlwZSwkTD1MU2Uuc2xpY2U7ZnVuY3Rpb24gc3Z0KGUsdCl7cmV0dXJuIGUtdH1mdW5jdGlvbiBsdnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aCxuPWVbci0xXVsxXSplWzBdWzBdLWVbci0xXVswXSplWzBdWzFdOysrdDxyOyluKz1lW3QtMV1bMV0qZVt0XVswXS1lW3QtMV1bMF0qZVt0XVsxXTtyZXR1cm4gbn1mdW5jdGlvbiBPaChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gY3Z0KGUsdCl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGgsaTsrK3I8bjspaWYoaT1rU2UoZSx0W3JdKSlyZXR1cm4gaTtyZXR1cm4gMH1mdW5jdGlvbiBrU2UoZSx0KXtmb3IodmFyIHI9dFswXSxuPXRbMV0saT0tMSxvPTAsYT1lLmxlbmd0aCxzPWEtMTtvPGE7cz1vKyspe3ZhciBsPWVbb10sYz1sWzBdLHU9bFsxXSxoPWVbc10sZj1oWzBdLHA9aFsxXTtpZihSU2UobCxoLHQpKXJldHVybiAwO3U+biE9cD5uJiZyPChmLWMpKihuLXUpLyhwLXUpK2MmJihpPS1pKX1yZXR1cm4gaX1mdW5jdGlvbiBSU2UoZSx0LHIpe3ZhciBuO3JldHVybiBOU2UoZSx0LHIpJiZEU2UoZVtuPSsoZVswXT09PXRbMF0pXSxyW25dLHRbbl0pfWZ1bmN0aW9uIE5TZShlLHQscil7cmV0dXJuKHRbMF0tZVswXSkqKHJbMV0tZVsxXSk9PT0oclswXS1lWzBdKSoodFsxXS1lWzFdKX1mdW5jdGlvbiBEU2UoZSx0LHIpe3JldHVybiBlPD10JiZ0PD1yfHxyPD10JiZ0PD1lfWZ1bmN0aW9uIHV2dCgpe312YXIgSXA9W1tdLFtbWzEsMS41XSxbLjUsMV1dXSxbW1sxLjUsMV0sWzEsMS41XV1dLFtbWzEuNSwxXSxbLjUsMV1dXSxbW1sxLC41XSxbMS41LDFdXV0sW1tbMSwxLjVdLFsuNSwxXV0sW1sxLC41XSxbMS41LDFdXV0sW1tbMSwuNV0sWzEsMS41XV1dLFtbWzEsLjVdLFsuNSwxXV1dLFtbWy41LDFdLFsxLC41XV1dLFtbWzEsMS41XSxbMSwuNV1dXSxbW1suNSwxXSxbMSwuNV1dLFtbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbMS41LDFdXV0sW1tbLjUsMV0sWzEsMS41XV1dLFtdXTtmdW5jdGlvbiBLTCgpe3ZhciBlPTEsdD0xLHI9c2Isbj1sO2Z1bmN0aW9uIGkoYyl7dmFyIHU9cihjKTtpZihBcnJheS5pc0FycmF5KHUpKXU9dS5zbGljZSgpLnNvcnQoc3Z0KTtlbHNle3ZhciBoPWFhKGMpLGY9aFswXSxwPWhbMV07dT10bChmLHAsdSksdT1JcihNYXRoLmZsb29yKGYvdSkqdSxNYXRoLmZsb29yKHAvdSkqdSx1KX1yZXR1cm4gdS5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIG8oYyxkKX0pfWZ1bmN0aW9uIG8oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBhKGMsdSxmdW5jdGlvbihwKXtuKHAsYyx1KSxsdnQocCk+MD9oLnB1c2goW3BdKTpmLnB1c2gocCl9KSxmLmZvckVhY2goZnVuY3Rpb24ocCl7Zm9yKHZhciBkPTAsZz1oLmxlbmd0aCxfO2Q8ZzsrK2QpaWYoY3Z0KChfPWhbZF0pWzBdLHApIT09LTEpe18ucHVzaChwKTtyZXR1cm59fSkse3R5cGU6Ik11bHRpUG9seWdvbiIsdmFsdWU6dSxjb29yZGluYXRlczpofX1mdW5jdGlvbiBhKGMsdSxoKXt2YXIgZj1uZXcgQXJyYXkscD1uZXcgQXJyYXksZCxnLF8seSx4LGI7Zm9yKGQ9Zz0tMSx5PWNbMF0+PXUsSXBbeTw8MV0uZm9yRWFjaChTKTsrK2Q8ZS0xOylfPXkseT1jW2QrMV0+PXUsSXBbX3x5PDwxXS5mb3JFYWNoKFMpO2ZvcihJcFt5PDwwXS5mb3JFYWNoKFMpOysrZzx0LTE7KXtmb3IoZD0tMSx5PWNbZyplK2VdPj11LHg9Y1tnKmVdPj11LElwW3k8PDF8eDw8Ml0uZm9yRWFjaChTKTsrK2Q8ZS0xOylfPXkseT1jW2cqZStlK2QrMV0+PXUsYj14LHg9Y1tnKmUrZCsxXT49dSxJcFtffHk8PDF8eDw8MnxiPDwzXS5mb3JFYWNoKFMpO0lwW3l8eDw8M10uZm9yRWFjaChTKX1mb3IoZD0tMSx4PWNbZyplXT49dSxJcFt4PDwyXS5mb3JFYWNoKFMpOysrZDxlLTE7KWI9eCx4PWNbZyplK2QrMV0+PXUsSXBbeDw8MnxiPDwzXS5mb3JFYWNoKFMpO0lwW3g8PDNdLmZvckVhY2goUyk7ZnVuY3Rpb24gUyhDKXt2YXIgUD1bQ1swXVswXStkLENbMF1bMV0rZ10saz1bQ1sxXVswXStkLENbMV1bMV0rZ10sTz1zKFApLEQ9cyhrKSxCLEk7KEI9cFtPXSk/KEk9ZltEXSk/KGRlbGV0ZSBwW0IuZW5kXSxkZWxldGUgZltJLnN0YXJ0XSxCPT09ST8oQi5yaW5nLnB1c2goayksaChCLnJpbmcpKTpmW0Iuc3RhcnRdPXBbSS5lbmRdPXtzdGFydDpCLnN0YXJ0LGVuZDpJLmVuZCxyaW5nOkIucmluZy5jb25jYXQoSS5yaW5nKX0pOihkZWxldGUgcFtCLmVuZF0sQi5yaW5nLnB1c2goaykscFtCLmVuZD1EXT1CKTooQj1mW0RdKT8oST1wW09dKT8oZGVsZXRlIGZbQi5zdGFydF0sZGVsZXRlIHBbSS5lbmRdLEI9PT1JPyhCLnJpbmcucHVzaChrKSxoKEIucmluZykpOmZbSS5zdGFydF09cFtCLmVuZF09e3N0YXJ0Okkuc3RhcnQsZW5kOkIuZW5kLHJpbmc6SS5yaW5nLmNvbmNhdChCLnJpbmcpfSk6KGRlbGV0ZSBmW0Iuc3RhcnRdLEIucmluZy51bnNoaWZ0KFApLGZbQi5zdGFydD1PXT1CKTpmW09dPXBbRF09e3N0YXJ0Ok8sZW5kOkQscmluZzpbUCxrXX19fWZ1bmN0aW9uIHMoYyl7cmV0dXJuIGNbMF0qMitjWzFdKihlKzEpKjR9ZnVuY3Rpb24gbChjLHUsaCl7Yy5mb3JFYWNoKGZ1bmN0aW9uKGYpe3ZhciBwPWZbMF0sZD1mWzFdLGc9cHwwLF89ZHwwLHkseD11W18qZStnXTtwPjAmJnA8ZSYmZz09PXAmJih5PXVbXyplK2ctMV0sZlswXT1wKyhoLXkpLyh4LXkpLS41KSxkPjAmJmQ8dCYmXz09PWQmJih5PXVbKF8tMSkqZStnXSxmWzFdPWQrKGgteSkvKHgteSktLjUpfSl9cmV0dXJuIGkuY29udG91cj1vLGkuc2l6ZT1mdW5jdGlvbihjKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bZSx0XTt2YXIgdT1NYXRoLmNlaWwoY1swXSksaD1NYXRoLmNlaWwoY1sxXSk7aWYoISh1PjApfHwhKGg+MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gZT11LHQ9aCxpfSxpLnRocmVzaG9sZHM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpBcnJheS5pc0FycmF5KGMpP09oKCRMLmNhbGwoYykpOk9oKGMpLGkpOnJ9LGkuc21vb3RoPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWM/bDp1dnQsaSk6bj09PWx9LGl9ZnVuY3Rpb24gWkwoZSx0LHIpe2Zvcih2YXIgbj1lLndpZHRoLGk9ZS5oZWlnaHQsbz0ocjw8MSkrMSxhPTA7YTxpOysrYSlmb3IodmFyIHM9MCxsPTA7czxuK3I7KytzKXM8biYmKGwrPWUuZGF0YVtzK2Eqbl0pLHM+PXImJihzPj1vJiYobC09ZS5kYXRhW3MtbythKm5dKSx0LmRhdGFbcy1yK2Eqbl09bC9NYXRoLm1pbihzKzEsbi0xK28tcyxvKSl9ZnVuY3Rpb24gSkwoZSx0LHIpe2Zvcih2YXIgbj1lLndpZHRoLGk9ZS5oZWlnaHQsbz0ocjw8MSkrMSxhPTA7YTxuOysrYSlmb3IodmFyIHM9MCxsPTA7czxpK3I7KytzKXM8aSYmKGwrPWUuZGF0YVthK3Mqbl0pLHM+PXImJihzPj1vJiYobC09ZS5kYXRhW2ErKHMtbykqbl0pLHQuZGF0YVthKyhzLXIpKm5dPWwvTWF0aC5taW4ocysxLGktMStvLXMsbykpfWZ1bmN0aW9uIE9TZShlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiB6U2UoZSl7cmV0dXJuIGVbMV19ZnVuY3Rpb24gRlNlKCl7cmV0dXJuIDF9ZnVuY3Rpb24gaHZ0KCl7dmFyIGU9T1NlLHQ9elNlLHI9RlNlLG49OTYwLGk9NTAwLG89MjAsYT0yLHM9byozLGw9bitzKjI+PmEsYz1pK3MqMj4+YSx1PU9oKDIwKTtmdW5jdGlvbiBoKHkpe3ZhciB4PW5ldyBGbG9hdDMyQXJyYXkobCpjKSxiPW5ldyBGbG9hdDMyQXJyYXkobCpjKTt5LmZvckVhY2goZnVuY3Rpb24oUCxrLE8pe3ZhciBEPStlKFAsayxPKStzPj5hLEI9K3QoUCxrLE8pK3M+PmEsST0rcihQLGssTyk7RD49MCYmRDxsJiZCPj0wJiZCPGMmJih4W0QrQipsXSs9SSl9KSxaTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0sbz4+YSksSkwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LG8+PmEpLFpMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSxvPj5hKSxKTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0sbz4+YSksWkwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LG8+PmEpLEpMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSxvPj5hKTt2YXIgUz11KHgpO2lmKCFBcnJheS5pc0FycmF5KFMpKXt2YXIgQz1sdSh4KTtTPXRsKDAsQyxTKSxTPUlyKDAsTWF0aC5mbG9vcihDL1MpKlMsUyksUy5zaGlmdCgpfXJldHVybiBLTCgpLnRocmVzaG9sZHMoUykuc2l6ZShbbCxjXSkoeCkubWFwKGYpfWZ1bmN0aW9uIGYoeSl7cmV0dXJuIHkudmFsdWUqPU1hdGgucG93KDIsLTIqYSkseS5jb29yZGluYXRlcy5mb3JFYWNoKHApLHl9ZnVuY3Rpb24gcCh5KXt5LmZvckVhY2goZCl9ZnVuY3Rpb24gZCh5KXt5LmZvckVhY2goZyl9ZnVuY3Rpb24gZyh5KXt5WzBdPXlbMF0qTWF0aC5wb3coMixhKS1zLHlbMV09eVsxXSpNYXRoLnBvdygyLGEpLXN9ZnVuY3Rpb24gXygpe3JldHVybiBzPW8qMyxsPW4rcyoyPj5hLGM9aStzKjI+PmEsaH1yZXR1cm4gaC54PWZ1bmN0aW9uKHkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB5PT0iZnVuY3Rpb24iP3k6T2goK3kpLGgpOmV9LGgueT1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgeT09ImZ1bmN0aW9uIj95Ok9oKCt5KSxoKTp0fSxoLndlaWdodD1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgeT09ImZ1bmN0aW9uIj95Ok9oKCt5KSxoKTpyfSxoLnNpemU9ZnVuY3Rpb24oeSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW24saV07dmFyIHg9TWF0aC5jZWlsKHlbMF0pLGI9TWF0aC5jZWlsKHlbMV0pO2lmKCEoeD49MCkmJiEoeD49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gbj14LGk9YixfKCl9LGguY2VsbFNpemU9ZnVuY3Rpb24oeSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIDE8PGE7aWYoISgoeT0reSk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjZWxsIHNpemUiKTtyZXR1cm4gYT1NYXRoLmZsb29yKE1hdGgubG9nKHkpL01hdGguTE4yKSxfKCl9LGgudGhyZXNob2xkcz1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10eXBlb2YgeT09ImZ1bmN0aW9uIj95OkFycmF5LmlzQXJyYXkoeSk/T2goJEwuY2FsbCh5KSk6T2goeSksaCk6dX0saC5iYW5kd2lkdGg9ZnVuY3Rpb24oeSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE1hdGguc3FydChvKihvKzEpKTtpZighKCh5PSt5KT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGJhbmR3aWR0aCIpO3JldHVybiBvPU1hdGgucm91bmQoKE1hdGguc3FydCg0KnkqeSsxKS0xKS8yKSxfKCl9LGh9a20oKTtVRSgpO0lfKCk7ZnVuY3Rpb24gcVNlKGUpe2lmKCFlLm9rKXRocm93IG5ldyBFcnJvcihlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KTtyZXR1cm4gZS5ibG9iKCl9ZnVuY3Rpb24gSXZ0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihxU2UpfWZ1bmN0aW9uIEdTZShlKXtpZighZS5vayl0aHJvdyBuZXcgRXJyb3IoZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCk7cmV0dXJuIGUuYXJyYXlCdWZmZXIoKX1mdW5jdGlvbiBMdnQoZSx0KXtyZXR1cm4gZmV0Y2goZSx0KS50aGVuKEdTZSl9VUUoKTtmdW5jdGlvbiBXU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO3JldHVybiBlLnRleHQoKX1mdW5jdGlvbiBEXyhlLHQpe3JldHVybiBmZXRjaChlLHQpLnRoZW4oV1NlKX1mdW5jdGlvbiBrdnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTImJnR5cGVvZiByPT0iZnVuY3Rpb24iJiYobj1yLHI9dm9pZCAwKSxEXyh0LHIpLnRoZW4oZnVuY3Rpb24oaSl7cmV0dXJuIGUoaSxuKX0pfX1mdW5jdGlvbiBhaihlLHQscixuKXthcmd1bWVudHMubGVuZ3RoPT09MyYmdHlwZW9mIHI9PSJmdW5jdGlvbiImJihuPXIscj12b2lkIDApO3ZhciBpPVdtKGUpO3JldHVybiBEXyh0LHIpLnRoZW4oZnVuY3Rpb24obyl7cmV0dXJuIGkucGFyc2UobyxuKX0pfXZhciBSdnQ9a3Z0KENiKSxOdnQ9a3Z0KEFiKTtmdW5jdGlvbiBEdnQoZSx0KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXt2YXIgaT1uZXcgSW1hZ2U7Zm9yKHZhciBvIGluIHQpaVtvXT10W29dO2kub25lcnJvcj1uLGkub25sb2FkPWZ1bmN0aW9uKCl7cihpKX0saS5zcmM9ZX0pfWZ1bmN0aW9uIFlTZShlKXtpZighZS5vayl0aHJvdyBuZXcgRXJyb3IoZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCk7aWYoIShlLnN0YXR1cz09PTIwNHx8ZS5zdGF0dXM9PT0yMDUpKXJldHVybiBlLmpzb24oKX1mdW5jdGlvbiBPdnQoZSx0KXtyZXR1cm4gZmV0Y2goZSx0KS50aGVuKFlTZSl9ZnVuY3Rpb24gc2ooZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIERfKHQscikudGhlbihmdW5jdGlvbihuKXtyZXR1cm4gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhuLGUpfSl9fXZhciB6dnQ9c2ooImFwcGxpY2F0aW9uL3htbCIpLEZ2dD1zaigidGV4dC9odG1sIiksQnZ0PXNqKCJpbWFnZS9zdmcreG1sIik7ZnVuY3Rpb24gSHZ0KGUsdCl7dmFyIHI7ZT09bnVsbCYmKGU9MCksdD09bnVsbCYmKHQ9MCk7ZnVuY3Rpb24gbigpe3ZhciBpLG89ci5sZW5ndGgsYSxzPTAsbD0wO2ZvcihpPTA7aTxvOysraSlhPXJbaV0scys9YS54LGwrPWEueTtmb3Iocz1zL28tZSxsPWwvby10LGk9MDtpPG87KytpKWE9cltpXSxhLngtPXMsYS55LT1sfXJldHVybiBuLmluaXRpYWxpemU9ZnVuY3Rpb24oaSl7cj1pfSxuLng9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2ksbik6ZX0sbi55PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStpLG4pOnR9LG59ZnVuY3Rpb24gT24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGZ1KCl7cmV0dXJuKE1hdGgucmFuZG9tKCktLjUpKjFlLTZ9ZnVuY3Rpb24gVnZ0KGUpe3ZhciB0PSt0aGlzLl94LmNhbGwobnVsbCxlKSxyPSt0aGlzLl95LmNhbGwobnVsbCxlKTtyZXR1cm4gVXZ0KHRoaXMuY292ZXIodCxyKSx0LHIsZSl9ZnVuY3Rpb24gVXZ0KGUsdCxyLG4pe2lmKGlzTmFOKHQpfHxpc05hTihyKSlyZXR1cm4gZTt2YXIgaSxvPWUuX3Jvb3QsYT17ZGF0YTpufSxzPWUuX3gwLGw9ZS5feTAsYz1lLl94MSx1PWUuX3kxLGgsZixwLGQsZyxfLHkseDtpZighbylyZXR1cm4gZS5fcm9vdD1hLGU7Zm9yKDtvLmxlbmd0aDspaWYoKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWYsaT1vLCEobz1vW3k9Xzw8MXxnXSkpcmV0dXJuIGlbeV09YSxlO2lmKHA9K2UuX3guY2FsbChudWxsLG8uZGF0YSksZD0rZS5feS5jYWxsKG51bGwsby5kYXRhKSx0PT09cCYmcj09PWQpcmV0dXJuIGEubmV4dD1vLGk/aVt5XT1hOmUuX3Jvb3Q9YSxlO2RvIGk9aT9pW3ldPW5ldyBBcnJheSg0KTplLl9yb290PW5ldyBBcnJheSg0KSwoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9Zjt3aGlsZSgoeT1fPDwxfGcpPT09KHg9KGQ+PWYpPDwxfHA+PWgpKTtyZXR1cm4gaVt4XT1vLGlbeV09YSxlfWZ1bmN0aW9uIHF2dChlKXt2YXIgdCxyLG49ZS5sZW5ndGgsaSxvLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzA7Zm9yKHI9MDtyPG47KytyKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHQ9ZVtyXSkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSl8fChhW3JdPWksc1tyXT1vLGk8bCYmKGw9aSksaT51JiYodT1pKSxvPGMmJihjPW8pLG8+aCYmKGg9bykpO2lmKGw+dXx8Yz5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcilVdnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gR3Z0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZXtmb3IodmFyIGE9aS1yLHM9dGhpcy5fcm9vdCxsLGM7cj5lfHxlPj1pfHxuPnR8fHQ+PW87KXN3aXRjaChjPSh0PG4pPDwxfGU8cixsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sLGEqPTIsYyl7Y2FzZSAwOmk9cithLG89bithO2JyZWFrO2Nhc2UgMTpyPWktYSxvPW4rYTticmVhaztjYXNlIDI6aT1yK2Esbj1vLWE7YnJlYWs7Y2FzZSAzOnI9aS1hLG49by1hO2JyZWFrfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1zKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfWZ1bmN0aW9uIFd2dCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfWZ1bmN0aW9uIFl2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX1mdW5jdGlvbiB5byhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX1mdW5jdGlvbiBqdnQoZSx0LHIpe3ZhciBuLGk9dGhpcy5feDAsbz10aGlzLl95MCxhLHMsbCxjLHU9dGhpcy5feDEsaD10aGlzLl95MSxmPVtdLHA9dGhpcy5fcm9vdCxkLGc7Zm9yKHAmJmYucHVzaChuZXcgeW8ocCxpLG8sdSxoKSkscj09bnVsbD9yPTEvMDooaT1lLXIsbz10LXIsdT1lK3IsaD10K3Iscio9cik7ZD1mLnBvcCgpOylpZighKCEocD1kLm5vZGUpfHwoYT1kLngwKT51fHwocz1kLnkwKT5ofHwobD1kLngxKTxpfHwoYz1kLnkxKTxvKSlpZihwLmxlbmd0aCl7dmFyIF89KGErbCkvMix5PShzK2MpLzI7Zi5wdXNoKG5ldyB5byhwWzNdLF8seSxsLGMpLG5ldyB5byhwWzJdLGEseSxfLGMpLG5ldyB5byhwWzFdLF8scyxsLHkpLG5ldyB5byhwWzBdLGEscyxfLHkpKSwoZz0odD49eSk8PDF8ZT49XykmJihkPWZbZi5sZW5ndGgtMV0sZltmLmxlbmd0aC0xXT1mW2YubGVuZ3RoLTEtZ10sZltmLmxlbmd0aC0xLWddPWQpfWVsc2V7dmFyIHg9ZS0rdGhpcy5feC5jYWxsKG51bGwscC5kYXRhKSxiPXQtK3RoaXMuX3kuY2FsbChudWxsLHAuZGF0YSksUz14KngrYipiO2lmKFM8cil7dmFyIEM9TWF0aC5zcXJ0KHI9Uyk7aT1lLUMsbz10LUMsdT1lK0MsaD10K0Msbj1wLmRhdGF9fXJldHVybiBufWZ1bmN0aW9uIFh2dChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiAkdnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfWZ1bmN0aW9uIEt2dCgpe3JldHVybiB0aGlzLl9yb290fWZ1bmN0aW9uIFp2dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9ZnVuY3Rpb24gSnZ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyB5byhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgeW8oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgeW8oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgeW8oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgeW8oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9ZnVuY3Rpb24gUXZ0KGUpe3ZhciB0PVtdLHI9W10sbjtmb3IodGhpcy5fcm9vdCYmdC5wdXNoKG5ldyB5byh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7bj10LnBvcCgpOyl7dmFyIGk9bi5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgbyxhPW4ueDAscz1uLnkwLGw9bi54MSxjPW4ueTEsdT0oYStsKS8yLGg9KHMrYykvMjsobz1pWzBdKSYmdC5wdXNoKG5ldyB5byhvLGEscyx1LGgpKSwobz1pWzFdKSYmdC5wdXNoKG5ldyB5byhvLHUscyxsLGgpKSwobz1pWzJdKSYmdC5wdXNoKG5ldyB5byhvLGEsaCx1LGMpKSwobz1pWzNdKSYmdC5wdXNoKG5ldyB5byhvLHUsaCxsLGMpKX1yLnB1c2gobil9Zm9yKDtuPXIucG9wKCk7KWUobi5ub2RlLG4ueDAsbi55MCxuLngxLG4ueTEpO3JldHVybiB0aGlzfWZ1bmN0aW9uIHR4dChlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBleHQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9ZSx0aGlzKTp0aGlzLl94fWZ1bmN0aW9uIHJ4dChlKXtyZXR1cm4gZVsxXX1mdW5jdGlvbiBueHQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9ZSx0aGlzKTp0aGlzLl95fWZ1bmN0aW9uIHpoKGUsdCxyKXt2YXIgbj1uZXcgbGoodD09bnVsbD90eHQ6dCxyPT1udWxsP3J4dDpyLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIGU9PW51bGw/bjpuLmFkZEFsbChlKX1mdW5jdGlvbiBsaihlLHQscixuLGksbyl7dGhpcy5feD1lLHRoaXMuX3k9dCx0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIGl4dChlKXtmb3IodmFyIHQ9e2RhdGE6ZS5kYXRhfSxyPXQ7ZT1lLm5leHQ7KXI9ci5uZXh0PXtkYXRhOmUuZGF0YX07cmV0dXJuIHR9dmFyIHphPXpoLnByb3RvdHlwZT1sai5wcm90b3R5cGU7emEuY29weT1mdW5jdGlvbigpe3ZhciBlPW5ldyBsaih0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLHQ9dGhpcy5fcm9vdCxyLG47aWYoIXQpcmV0dXJuIGU7aWYoIXQubGVuZ3RoKXJldHVybiBlLl9yb290PWl4dCh0KSxlO2ZvcihyPVt7c291cmNlOnQsdGFyZ2V0OmUuX3Jvb3Q9bmV3IEFycmF5KDQpfV07dD1yLnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShuPXQuc291cmNlW2ldKSYmKG4ubGVuZ3RoP3IucHVzaCh7c291cmNlOm4sdGFyZ2V0OnQudGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOnQudGFyZ2V0W2ldPWl4dChuKSk7cmV0dXJuIGV9O3phLmFkZD1WdnQ7emEuYWRkQWxsPXF2dDt6YS5jb3Zlcj1HdnQ7emEuZGF0YT1XdnQ7emEuZXh0ZW50PVl2dDt6YS5maW5kPWp2dDt6YS5yZW1vdmU9WHZ0O3phLnJlbW92ZUFsbD0kdnQ7emEucm9vdD1LdnQ7emEuc2l6ZT1adnQ7emEudmlzaXQ9SnZ0O3phLnZpc2l0QWZ0ZXI9UXZ0O3phLng9ZXh0O3phLnk9bnh0O2Z1bmN0aW9uIGpTZShlKXtyZXR1cm4gZS54K2Uudnh9ZnVuY3Rpb24gWFNlKGUpe3JldHVybiBlLnkrZS52eX1mdW5jdGlvbiBveHQoZSl7dmFyIHQscixuPTEsaT0xO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1PbihlPT1udWxsPzE6K2UpKTtmdW5jdGlvbiBvKCl7Zm9yKHZhciBsLGM9dC5sZW5ndGgsdSxoLGYscCxkLGcsXz0wO188aTsrK18pZm9yKHU9emgodCxqU2UsWFNlKS52aXNpdEFmdGVyKGEpLGw9MDtsPGM7KytsKWg9dFtsXSxkPXJbaC5pbmRleF0sZz1kKmQsZj1oLngraC52eCxwPWgueStoLnZ5LHUudmlzaXQoeSk7ZnVuY3Rpb24geSh4LGIsUyxDLFApe3ZhciBrPXguZGF0YSxPPXgucixEPWQrTztpZihrKXtpZihrLmluZGV4PmguaW5kZXgpe3ZhciBCPWYtay54LWsudngsST1wLWsueS1rLnZ5LEw9QipCK0kqSTtMPEQqRCYmKEI9PT0wJiYoQj1mdSgpLEwrPUIqQiksST09PTAmJihJPWZ1KCksTCs9SSpJKSxMPShELShMPU1hdGguc3FydChMKSkpL0wqbixoLnZ4Kz0oQio9TCkqKEQ9KE8qPU8pLyhnK08pKSxoLnZ5Kz0oSSo9TCkqRCxrLnZ4LT1CKihEPTEtRCksay52eS09SSpEKX1yZXR1cm59cmV0dXJuIGI+ZitEfHxDPGYtRHx8Uz5wK0R8fFA8cC1EfX1mdW5jdGlvbiBhKGwpe2lmKGwuZGF0YSlyZXR1cm4gbC5yPXJbbC5kYXRhLmluZGV4XTtmb3IodmFyIGM9bC5yPTA7Yzw0OysrYylsW2NdJiZsW2NdLnI+bC5yJiYobC5yPWxbY10ucil9ZnVuY3Rpb24gcygpe2lmKCEhdCl7dmFyIGwsYz10Lmxlbmd0aCx1O2ZvcihyPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCl1PXRbbF0sclt1LmluZGV4XT0rZSh1LGwsdCl9fXJldHVybiBvLmluaXRpYWxpemU9ZnVuY3Rpb24obCl7dD1sLHMoKX0sby5pdGVyYXRpb25zPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStsLG8pOml9LG8uc3RyZW5ndGg9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2wsbyk6bn0sby5yYWRpdXM9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpPbigrbCkscygpLG8pOmV9LG99VGIoKTtmdW5jdGlvbiAkU2UoZSl7cmV0dXJuIGUuaW5kZXh9ZnVuY3Rpb24gYXh0KGUsdCl7dmFyIHI9ZS5nZXQodCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK3QpO3JldHVybiByfWZ1bmN0aW9uIHN4dChlKXt2YXIgdD0kU2Uscj11LG4saT1PbigzMCksbyxhLHMsbCxjPTE7ZT09bnVsbCYmKGU9W10pO2Z1bmN0aW9uIHUoZyl7cmV0dXJuIDEvTWF0aC5taW4oc1tnLnNvdXJjZS5pbmRleF0sc1tnLnRhcmdldC5pbmRleF0pfWZ1bmN0aW9uIGgoZyl7Zm9yKHZhciBfPTAseT1lLmxlbmd0aDtfPGM7KytfKWZvcih2YXIgeD0wLGIsUyxDLFAsayxPLEQ7eDx5OysreCliPWVbeF0sUz1iLnNvdXJjZSxDPWIudGFyZ2V0LFA9Qy54K0MudngtUy54LVMudnh8fGZ1KCksaz1DLnkrQy52eS1TLnktUy52eXx8ZnUoKSxPPU1hdGguc3FydChQKlArayprKSxPPShPLW9beF0pL08qZypuW3hdLFAqPU8sayo9TyxDLnZ4LT1QKihEPWxbeF0pLEMudnktPWsqRCxTLnZ4Kz1QKihEPTEtRCksUy52eSs9aypEfWZ1bmN0aW9uIGYoKXtpZighIWEpe3ZhciBnLF89YS5sZW5ndGgseT1lLmxlbmd0aCx4PUppKGEsdCksYjtmb3IoZz0wLHM9bmV3IEFycmF5KF8pO2c8eTsrK2cpYj1lW2ddLGIuaW5kZXg9Zyx0eXBlb2YgYi5zb3VyY2UhPSJvYmplY3QiJiYoYi5zb3VyY2U9YXh0KHgsYi5zb3VyY2UpKSx0eXBlb2YgYi50YXJnZXQhPSJvYmplY3QiJiYoYi50YXJnZXQ9YXh0KHgsYi50YXJnZXQpKSxzW2Iuc291cmNlLmluZGV4XT0oc1tiLnNvdXJjZS5pbmRleF18fDApKzEsc1tiLnRhcmdldC5pbmRleF09KHNbYi50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihnPTAsbD1uZXcgQXJyYXkoeSk7Zzx5OysrZyliPWVbZ10sbFtnXT1zW2Iuc291cmNlLmluZGV4XS8oc1tiLnNvdXJjZS5pbmRleF0rc1tiLnRhcmdldC5pbmRleF0pO249bmV3IEFycmF5KHkpLHAoKSxvPW5ldyBBcnJheSh5KSxkKCl9fWZ1bmN0aW9uIHAoKXtpZighIWEpZm9yKHZhciBnPTAsXz1lLmxlbmd0aDtnPF87KytnKW5bZ109K3IoZVtnXSxnLGUpfWZ1bmN0aW9uIGQoKXtpZighIWEpZm9yKHZhciBnPTAsXz1lLmxlbmd0aDtnPF87KytnKW9bZ109K2koZVtnXSxnLGUpfXJldHVybiBoLmluaXRpYWxpemU9ZnVuY3Rpb24oZyl7YT1nLGYoKX0saC5saW5rcz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1nLGYoKSxoKTplfSxoLmlkPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWcsaCk6dH0saC5pdGVyYXRpb25zPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPStnLGgpOmN9LGguc3RyZW5ndGg9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGc9PSJmdW5jdGlvbiI/ZzpPbigrZykscCgpLGgpOnJ9LGguZGlzdGFuY2U9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIGc9PSJmdW5jdGlvbiI/ZzpPbigrZyksZCgpLGgpOml9LGh9a20oKTtUYigpO2Z1bmN0aW9uIGx4dChlKXtyZXR1cm4gZS54fWZ1bmN0aW9uIGN4dChlKXtyZXR1cm4gZS55fXZhciBLU2U9MTAsWlNlPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKTtmdW5jdGlvbiB1eHQoZSl7dmFyIHQscj0xLG49LjAwMSxpPTEtTWF0aC5wb3cobiwxLzMwMCksbz0wLGE9LjYscz1KaSgpLGw9QV8odSksYz12cygidGljayIsImVuZCIpO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KCl7aCgpLGMuY2FsbCgidGljayIsdCkscjxuJiYobC5zdG9wKCksYy5jYWxsKCJlbmQiLHQpKX1mdW5jdGlvbiBoKGQpe3ZhciBnLF89ZS5sZW5ndGgseTtkPT09dm9pZCAwJiYoZD0xKTtmb3IodmFyIHg9MDt4PGQ7Kyt4KWZvcihyKz0oby1yKSppLHMuZWFjaChmdW5jdGlvbihiKXtiKHIpfSksZz0wO2c8XzsrK2cpeT1lW2ddLHkuZng9PW51bGw/eS54Kz15LnZ4Kj1hOih5Lng9eS5meCx5LnZ4PTApLHkuZnk9PW51bGw/eS55Kz15LnZ5Kj1hOih5Lnk9eS5meSx5LnZ5PTApO3JldHVybiB0fWZ1bmN0aW9uIGYoKXtmb3IodmFyIGQ9MCxnPWUubGVuZ3RoLF87ZDxnOysrZCl7aWYoXz1lW2RdLF8uaW5kZXg9ZCxfLmZ4IT1udWxsJiYoXy54PV8uZngpLF8uZnkhPW51bGwmJihfLnk9Xy5meSksaXNOYU4oXy54KXx8aXNOYU4oXy55KSl7dmFyIHk9S1NlKk1hdGguc3FydChkKSx4PWQqWlNlO18ueD15Kk1hdGguY29zKHgpLF8ueT15Kk1hdGguc2luKHgpfShpc05hTihfLnZ4KXx8aXNOYU4oXy52eSkpJiYoXy52eD1fLnZ5PTApfX1mdW5jdGlvbiBwKGQpe3JldHVybiBkLmluaXRpYWxpemUmJmQuaW5pdGlhbGl6ZShlKSxkfXJldHVybiBmKCksdD17dGljazpoLHJlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5yZXN0YXJ0KHUpLHR9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gbC5zdG9wKCksdH0sbm9kZXM6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZCxmKCkscy5lYWNoKHApLHQpOmV9LGFscGhhOmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStkLHQpOnJ9LGFscGhhTWluOmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStkLHQpOm59LGFscGhhRGVjYXk6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2QsdCk6K2l9LGFscGhhVGFyZ2V0OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStkLHQpOm99LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9MS1kLHQpOjEtYX0sZm9yY2U6ZnVuY3Rpb24oZCxnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhnPT1udWxsP3MucmVtb3ZlKGQpOnMuc2V0KGQscChnKSksdCk6cy5nZXQoZCl9LGZpbmQ6ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PTAseD1lLmxlbmd0aCxiLFMsQyxQLGs7Zm9yKF89PW51bGw/Xz0xLzA6Xyo9Xyx5PTA7eTx4OysreSlQPWVbeV0sYj1kLVAueCxTPWctUC55LEM9YipiK1MqUyxDPF8mJihrPVAsXz1DKTtyZXR1cm4ga30sb246ZnVuY3Rpb24oZCxnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhjLm9uKGQsZyksdCk6Yy5vbihkKX19fWZ1bmN0aW9uIGh4dCgpe3ZhciBlLHQscixuPU9uKC0zMCksaSxvPTEsYT0xLzAscz0uODE7ZnVuY3Rpb24gbChmKXt2YXIgcCxkPWUubGVuZ3RoLGc9emgoZSxseHQsY3h0KS52aXNpdEFmdGVyKHUpO2ZvcihyPWYscD0wO3A8ZDsrK3ApdD1lW3BdLGcudmlzaXQoaCl9ZnVuY3Rpb24gYygpe2lmKCEhZSl7dmFyIGYscD1lLmxlbmd0aCxkO2ZvcihpPW5ldyBBcnJheShwKSxmPTA7ZjxwOysrZilkPWVbZl0saVtkLmluZGV4XT0rbihkLGYsZSl9fWZ1bmN0aW9uIHUoZil7dmFyIHA9MCxkLGcsXz0wLHkseCxiO2lmKGYubGVuZ3RoKXtmb3IoeT14PWI9MDtiPDQ7KytiKShkPWZbYl0pJiYoZz1NYXRoLmFicyhkLnZhbHVlKSkmJihwKz1kLnZhbHVlLF8rPWcseSs9ZypkLngseCs9ZypkLnkpO2YueD15L18sZi55PXgvX31lbHNle2Q9ZixkLng9ZC5kYXRhLngsZC55PWQuZGF0YS55O2RvIHArPWlbZC5kYXRhLmluZGV4XTt3aGlsZShkPWQubmV4dCl9Zi52YWx1ZT1wfWZ1bmN0aW9uIGgoZixwLGQsZyl7aWYoIWYudmFsdWUpcmV0dXJuITA7dmFyIF89Zi54LXQueCx5PWYueS10LnkseD1nLXAsYj1fKl8reSp5O2lmKHgqeC9zPGIpcmV0dXJuIGI8YSYmKF89PT0wJiYoXz1mdSgpLGIrPV8qXykseT09PTAmJih5PWZ1KCksYis9eSp5KSxiPG8mJihiPU1hdGguc3FydChvKmIpKSx0LnZ4Kz1fKmYudmFsdWUqci9iLHQudnkrPXkqZi52YWx1ZSpyL2IpLCEwO2lmKGYubGVuZ3RofHxiPj1hKXJldHVybjsoZi5kYXRhIT09dHx8Zi5uZXh0KSYmKF89PT0wJiYoXz1mdSgpLGIrPV8qXykseT09PTAmJih5PWZ1KCksYis9eSp5KSxiPG8mJihiPU1hdGguc3FydChvKmIpKSk7ZG8gZi5kYXRhIT09dCYmKHg9aVtmLmRhdGEuaW5kZXhdKnIvYix0LnZ4Kz1fKngsdC52eSs9eSp4KTt3aGlsZShmPWYubmV4dCl9cmV0dXJuIGwuaW5pdGlhbGl6ZT1mdW5jdGlvbihmKXtlPWYsYygpfSxsLnN0cmVuZ3RoPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6T24oK2YpLGMoKSxsKTpufSxsLmRpc3RhbmNlTWluPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWYqZixsKTpNYXRoLnNxcnQobyl9LGwuZGlzdGFuY2VNYXg9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZipmLGwpOk1hdGguc3FydChhKX0sbC50aGV0YT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1mKmYsbCk6TWF0aC5zcXJ0KHMpfSxsfWZ1bmN0aW9uIGZ4dChlLHQscil7dmFyIG4saT1PbiguMSksbyxhO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1PbigrZSkpLHQ9PW51bGwmJih0PTApLHI9PW51bGwmJihyPTApO2Z1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PTAsaD1uLmxlbmd0aDt1PGg7Kyt1KXt2YXIgZj1uW3VdLHA9Zi54LXR8fDFlLTYsZD1mLnktcnx8MWUtNixnPU1hdGguc3FydChwKnArZCpkKSxfPShhW3VdLWcpKm9bdV0qYy9nO2YudngrPXAqXyxmLnZ5Kz1kKl99fWZ1bmN0aW9uIGwoKXtpZighIW4pe3ZhciBjLHU9bi5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KHUpLGE9bmV3IEFycmF5KHUpLGM9MDtjPHU7KytjKWFbY109K2UobltjXSxjLG4pLG9bY109aXNOYU4oYVtjXSk/MDoraShuW2NdLGMsbil9fXJldHVybiBzLmluaXRpYWxpemU9ZnVuY3Rpb24oYyl7bj1jLGwoKX0scy5zdHJlbmd0aD1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOk9uKCtjKSxsKCkscyk6aX0scy5yYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpPbigrYyksbCgpLHMpOmV9LHMueD1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rYyxzKTp0fSxzLnk9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2Mscyk6cn0sc31mdW5jdGlvbiBweHQoZSl7dmFyIHQ9T24oLjEpLHIsbixpO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1PbihlPT1udWxsPzA6K2UpKTtmdW5jdGlvbiBvKHMpe2Zvcih2YXIgbD0wLGM9ci5sZW5ndGgsdTtsPGM7KytsKXU9cltsXSx1LnZ4Kz0oaVtsXS11LngpKm5bbF0qc31mdW5jdGlvbiBhKCl7aWYoISFyKXt2YXIgcyxsPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShsKSxpPW5ldyBBcnJheShsKSxzPTA7czxsOysrcyluW3NdPWlzTmFOKGlbc109K2UocltzXSxzLHIpKT8wOit0KHJbc10scyxyKX19cmV0dXJuIG8uaW5pdGlhbGl6ZT1mdW5jdGlvbihzKXtyPXMsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6T24oK3MpLGEoKSxvKTp0fSxvLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpPbigrcyksYSgpLG8pOmV9LG99ZnVuY3Rpb24gZHh0KGUpe3ZhciB0PU9uKC4xKSxyLG4saTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9T24oZT09bnVsbD8wOitlKSk7ZnVuY3Rpb24gbyhzKXtmb3IodmFyIGw9MCxjPXIubGVuZ3RoLHU7bDxjOysrbCl1PXJbbF0sdS52eSs9KGlbbF0tdS55KSpuW2xdKnN9ZnVuY3Rpb24gYSgpe2lmKCEhcil7dmFyIHMsbD1yLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobCksaT1uZXcgQXJyYXkobCkscz0wO3M8bDsrK3MpbltzXT1pc05hTihpW3NdPStlKHJbc10scyxyKSk/MDordChyW3NdLHMscil9fXJldHVybiBvLmluaXRpYWxpemU9ZnVuY3Rpb24ocyl7cj1zLGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOk9uKCtzKSxhKCksbyk6dH0sby55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6T24oK3MpLGEoKSxvKTplfSxvfWZ1bmN0aW9uIG14dChlKXtyZXR1cm4gTWF0aC5hYnMoZT1NYXRoLnJvdW5kKGUpKT49MWUyMT9lLnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6ZS50b1N0cmluZygxMCl9ZnVuY3Rpb24gT18oZSx0KXtpZigocj0oZT10P2UudG9FeHBvbmVudGlhbCh0LTEpOmUudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIHIsbj1lLnNsaWNlKDAscik7cmV0dXJuW24ubGVuZ3RoPjE/blswXStuLnNsaWNlKDIpOm4sK2Uuc2xpY2UocisxKV19ZnVuY3Rpb24gRmgoZSl7cmV0dXJuIGU9T18oTWF0aC5hYnMoZSkpLGU/ZVsxXTpOYU59ZnVuY3Rpb24gZ3h0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLG89W10sYT0wLHM9ZVswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5uJiYocz1NYXRoLm1heCgxLG4tbCkpLG8ucHVzaChyLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fWZ1bmN0aW9uIF94dChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihyKXtyZXR1cm4gZVsrcl19KX19dmFyIEpTZT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBMcChlKXtpZighKHQ9SlNlLmV4ZWMoZSkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrZSk7dmFyIHQ7cmV0dXJuIG5ldyBxRSh7ZmlsbDp0WzFdLGFsaWduOnRbMl0sc2lnbjp0WzNdLHN5bWJvbDp0WzRdLHplcm86dFs1XSx3aWR0aDp0WzZdLGNvbW1hOnRbN10scHJlY2lzaW9uOnRbOF0mJnRbOF0uc2xpY2UoMSksdHJpbTp0WzldLHR5cGU6dFsxMF19KX1McC5wcm90b3R5cGU9cUUucHJvdG90eXBlO2Z1bmN0aW9uIHFFKGUpe3RoaXMuZmlsbD1lLmZpbGw9PT12b2lkIDA/IiAiOmUuZmlsbCsiIix0aGlzLmFsaWduPWUuYWxpZ249PT12b2lkIDA/Ij4iOmUuYWxpZ24rIiIsdGhpcy5zaWduPWUuc2lnbj09PXZvaWQgMD8iLSI6ZS5zaWduKyIiLHRoaXMuc3ltYm9sPWUuc3ltYm9sPT09dm9pZCAwPyIiOmUuc3ltYm9sKyIiLHRoaXMuemVybz0hIWUuemVybyx0aGlzLndpZHRoPWUud2lkdGg9PT12b2lkIDA/dm9pZCAwOitlLndpZHRoLHRoaXMuY29tbWE9ISFlLmNvbW1hLHRoaXMucHJlY2lzaW9uPWUucHJlY2lzaW9uPT09dm9pZCAwP3ZvaWQgMDorZS5wcmVjaXNpb24sdGhpcy50cmltPSEhZS50cmltLHRoaXMudHlwZT1lLnR5cGU9PT12b2lkIDA/IiI6ZS50eXBlKyIifXFFLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh0aGlzLndpZHRoPT09dm9pZCAwPyIiOk1hdGgubWF4KDEsdGhpcy53aWR0aHwwKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodGhpcy5wcmVjaXNpb249PT12b2lkIDA/IiI6Ii4iK01hdGgubWF4KDAsdGhpcy5wcmVjaXNpb258MCkpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O2Z1bmN0aW9uIHl4dChlKXt0OmZvcih2YXIgdD1lLmxlbmd0aCxyPTEsbj0tMSxpO3I8dDsrK3Ipc3dpdGNoKGVbcl0pe2Nhc2UiLiI6bj1pPXI7YnJlYWs7Y2FzZSIwIjpuPT09MCYmKG49ciksaT1yO2JyZWFrO2RlZmF1bHQ6aWYoIStlW3JdKWJyZWFrIHQ7bj4wJiYobj0wKTticmVha31yZXR1cm4gbj4wP2Uuc2xpY2UoMCxuKStlLnNsaWNlKGkrMSk6ZX12YXIgY2o7ZnVuY3Rpb24gdnh0KGUsdCl7dmFyIHI9T18oZSx0KTtpZighcilyZXR1cm4gZSsiIjt2YXIgbj1yWzBdLGk9clsxXSxvPWktKGNqPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkqMykrMSxhPW4ubGVuZ3RoO3JldHVybiBvPT09YT9uOm8+YT9uK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9uLnNsaWNlKDAsbykrIi4iK24uc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrT18oZSxNYXRoLm1heCgwLHQrby0xKSlbMF19ZnVuY3Rpb24gdWooZSx0KXt2YXIgcj1PXyhlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStuOm4ubGVuZ3RoPmkrMT9uLnNsaWNlKDAsaSsxKSsiLiIrbi5zbGljZShpKzEpOm4rbmV3IEFycmF5KGktbi5sZW5ndGgrMikuam9pbigiMCIpfXZhciBoaj17IiUiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUqMTAwKS50b0ZpeGVkKHQpfSxiOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKGUpe3JldHVybiBlKyIifSxkOm14dCxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9FeHBvbmVudGlhbCh0KX0sZjpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRml4ZWQodCl9LGc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b1ByZWNpc2lvbih0KX0sbzpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZyg4KX0scDpmdW5jdGlvbihlLHQpe3JldHVybiB1aihlKjEwMCx0KX0scjp1aixzOnZ4dCxYOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIGZqKGUpe3JldHVybiBlfXZhciB4eHQ9QXJyYXkucHJvdG90eXBlLm1hcCxieHQ9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceEI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gdGsoZSl7dmFyIHQ9ZS5ncm91cGluZz09PXZvaWQgMHx8ZS50aG91c2FuZHM9PT12b2lkIDA/Zmo6Z3h0KHh4dC5jYWxsKGUuZ3JvdXBpbmcsTnVtYmVyKSxlLnRob3VzYW5kcysiIikscj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMF0rIiIsbj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMV0rIiIsaT1lLmRlY2ltYWw9PT12b2lkIDA/Ii4iOmUuZGVjaW1hbCsiIixvPWUubnVtZXJhbHM9PT12b2lkIDA/Zmo6X3h0KHh4dC5jYWxsKGUubnVtZXJhbHMsU3RyaW5nKSksYT1lLnBlcmNlbnQ9PT12b2lkIDA/IiUiOmUucGVyY2VudCsiIixzPWUubWludXM9PT12b2lkIDA/Ii0iOmUubWludXMrIiIsbD1lLm5hbj09PXZvaWQgMD8iTmFOIjplLm5hbisiIjtmdW5jdGlvbiBjKGgpe2g9THAoaCk7dmFyIGY9aC5maWxsLHA9aC5hbGlnbixkPWguc2lnbixnPWguc3ltYm9sLF89aC56ZXJvLHk9aC53aWR0aCx4PWguY29tbWEsYj1oLnByZWNpc2lvbixTPWgudHJpbSxDPWgudHlwZTtDPT09Im4iPyh4PSEwLEM9ImciKTpoaltDXXx8KGI9PT12b2lkIDAmJihiPTEyKSxTPSEwLEM9ImciKSwoX3x8Zj09PSIwIiYmcD09PSI9IikmJihfPSEwLGY9IjAiLHA9Ij0iKTt2YXIgUD1nPT09IiQiP3I6Zz09PSIjIiYmL1tib3hYXS8udGVzdChDKT8iMCIrQy50b0xvd2VyQ2FzZSgpOiIiLGs9Zz09PSIkIj9uOi9bJXBdLy50ZXN0KEMpP2E6IiIsTz1oaltDXSxEPS9bZGVmZ3BycyVdLy50ZXN0KEMpO2I9Yj09PXZvaWQgMD82Oi9bZ3Byc10vLnRlc3QoQyk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxiKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxiKSk7ZnVuY3Rpb24gQihJKXt2YXIgTD1QLFI9ayxGLHosVTtpZihDPT09ImMiKVI9TyhJKStSLEk9IiI7ZWxzZXtJPStJO3ZhciBXPUk8MHx8MS9JPDA7aWYoST1pc05hTihJKT9sOk8oTWF0aC5hYnMoSSksYiksUyYmKEk9eXh0KEkpKSxXJiYrST09MCYmZCE9PSIrIiYmKFc9ITEpLEw9KFc/ZD09PSIoIj9kOnM6ZD09PSItInx8ZD09PSIoIj8iIjpkKStMLFI9KEM9PT0icyI/Ynh0WzgrY2ovM106IiIpK1IrKFcmJmQ9PT0iKCI/IikiOiIiKSxEKXtmb3IoRj0tMSx6PUkubGVuZ3RoOysrRjx6OylpZihVPUkuY2hhckNvZGVBdChGKSw0OD5VfHxVPjU3KXtSPShVPT09NDY/aStJLnNsaWNlKEYrMSk6SS5zbGljZShGKSkrUixJPUkuc2xpY2UoMCxGKTticmVha319fXgmJiFfJiYoST10KEksMS8wKSk7dmFyIFo9TC5sZW5ndGgrSS5sZW5ndGgrUi5sZW5ndGgscnQ9Wjx5P25ldyBBcnJheSh5LVorMSkuam9pbihmKToiIjtzd2l0Y2goeCYmXyYmKEk9dChydCtJLHJ0Lmxlbmd0aD95LVIubGVuZ3RoOjEvMCkscnQ9IiIpLHApe2Nhc2UiPCI6ST1MK0krUitydDticmVhaztjYXNlIj0iOkk9TCtydCtJK1I7YnJlYWs7Y2FzZSJeIjpJPXJ0LnNsaWNlKDAsWj1ydC5sZW5ndGg+PjEpK0wrSStSK3J0LnNsaWNlKFopO2JyZWFrO2RlZmF1bHQ6ST1ydCtMK0krUjticmVha31yZXR1cm4gbyhJKX1yZXR1cm4gQi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBoKyIifSxCfWZ1bmN0aW9uIHUoaCxmKXt2YXIgcD1jKChoPUxwKGgpLGgudHlwZT0iZiIsaCkpLGQ9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKEZoKGYpLzMpKSkqMyxnPU1hdGgucG93KDEwLC1kKSxfPWJ4dFs4K2QvM107cmV0dXJuIGZ1bmN0aW9uKHkpe3JldHVybiBwKGcqeSkrX319cmV0dXJue2Zvcm1hdDpjLGZvcm1hdFByZWZpeDp1fX12YXIgZWsseG4sR0U7cmsoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pO2Z1bmN0aW9uIHJrKGUpe3JldHVybiBlaz10ayhlKSx4bj1lay5mb3JtYXQsR0U9ZWsuZm9ybWF0UHJlZml4LGVrfWZ1bmN0aW9uIG5rKGUpe3JldHVybiBNYXRoLm1heCgwLC1GaChNYXRoLmFicyhlKSkpfWZ1bmN0aW9uIGlrKGUsdCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKEZoKHQpLzMpKSkqMy1GaChNYXRoLmFicyhlKSkpfWZ1bmN0aW9uIG9rKGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAsRmgodCktRmgoZSkpKzF9ZnVuY3Rpb24gU3MoKXtyZXR1cm4gbmV3IHNrfWZ1bmN0aW9uIHNrKCl7dGhpcy5yZXNldCgpfXNrLnByb3RvdHlwZT17Y29uc3RydWN0b3I6c2sscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbihlKXt3eHQoYWssZSx0aGlzLnQpLHd4dCh0aGlzLGFrLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1hay50OnRoaXMucz1hay50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBhaz1uZXcgc2s7ZnVuY3Rpb24gd3h0KGUsdCxyKXt2YXIgbj1lLnM9dCtyLGk9bi10LG89bi1pO2UudD10LW8rKHItaSl9dmFyIGxlPTFlLTYsel89MWUtMTIsQmU9TWF0aC5QSSxtbj1CZS8yLFBiPUJlLzQsU2k9QmUqMix2cj0xODAvQmUsX2U9QmUvMTgwLFJlPU1hdGguYWJzLGljPU1hdGguYXRhbixibj1NYXRoLmF0YW4yLFp0PU1hdGguY29zLFdFPU1hdGguY2VpbCxsaz1NYXRoLmV4cDt2YXIgRl89TWF0aC5sb2csY2s9TWF0aC5wb3csWHQ9TWF0aC5zaW4sY2E9TWF0aC5zaWdufHxmdW5jdGlvbihlKXtyZXR1cm4gZT4wPzE6ZTwwPy0xOjB9LHhyPU1hdGguc3FydCxJYj1NYXRoLnRhbjtmdW5jdGlvbiB1ayhlKXtyZXR1cm4gZT4xPzA6ZTwtMT9CZTpNYXRoLmFjb3MoZSl9ZnVuY3Rpb24gd24oZSl7cmV0dXJuIGU+MT9tbjplPC0xPy1tbjpNYXRoLmFzaW4oZSl9ZnVuY3Rpb24gcGooZSl7cmV0dXJuKGU9WHQoZS8yKSkqZX1mdW5jdGlvbiBGcigpe31mdW5jdGlvbiBoayhlLHQpe2UmJk14dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpJiZNeHRbZS50eXBlXShlLHQpfXZhciBTeHQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtoayhlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaGsocltuXS5nZW9tZXRyeSx0KX19LE14dD17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWU9cltuXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2RqKGUuY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylkaihyW25dLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtFeHQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylFeHQocltuXSx0KX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWhrKHJbbl0sdCl9fTtmdW5jdGlvbiBkaihlLHQscil7dmFyIG49LTEsaT1lLmxlbmd0aC1yLG87Zm9yKHQubGluZVN0YXJ0KCk7KytuPGk7KW89ZVtuXSx0LnBvaW50KG9bMF0sb1sxXSxvWzJdKTt0LmxpbmVFbmQoKX1mdW5jdGlvbiBFeHQoZSx0KXt2YXIgcj0tMSxuPWUubGVuZ3RoO2Zvcih0LnBvbHlnb25TdGFydCgpOysrcjxuOylkaihlW3JdLHQsMSk7dC5wb2x5Z29uRW5kKCl9ZnVuY3Rpb24gdm8oZSx0KXtlJiZTeHQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9TeHRbZS50eXBlXShlLHQpOmhrKGUsdCl9dmFyIFlFPVNzKCksZms9U3MoKSxUeHQsQ3h0LG1qLGdqLF9qLHB1PXtwb2ludDpGcixsaW5lU3RhcnQ6RnIsbGluZUVuZDpGcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtZRS5yZXNldCgpLHB1LmxpbmVTdGFydD1RU2UscHUubGluZUVuZD10M2V9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT0rWUU7ZmsuYWRkKGU8MD9TaStlOmUpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PUZyfSxzcGhlcmU6ZnVuY3Rpb24oKXtmay5hZGQoU2kpfX07ZnVuY3Rpb24gUVNlKCl7cHUucG9pbnQ9ZTNlfWZ1bmN0aW9uIHQzZSgpe0F4dChUeHQsQ3h0KX1mdW5jdGlvbiBlM2UoZSx0KXtwdS5wb2ludD1BeHQsVHh0PWUsQ3h0PXQsZSo9X2UsdCo9X2UsbWo9ZSxnaj1adCh0PXQvMitQYiksX2o9WHQodCl9ZnVuY3Rpb24gQXh0KGUsdCl7ZSo9X2UsdCo9X2UsdD10LzIrUGI7dmFyIHI9ZS1taixuPXI+PTA/MTotMSxpPW4qcixvPVp0KHQpLGE9WHQodCkscz1faiphLGw9Z2oqbytzKlp0KGkpLGM9cypuKlh0KGkpO1lFLmFkZChibihjLGwpKSxtaj1lLGdqPW8sX2o9YX1mdW5jdGlvbiBQeHQoZSl7cmV0dXJuIGZrLnJlc2V0KCksdm8oZSxwdSksZmsqMn1mdW5jdGlvbiBCXyhlKXtyZXR1cm5bYm4oZVsxXSxlWzBdKSx3bihlWzJdKV19ZnVuY3Rpb24gb2MoZSl7dmFyIHQ9ZVswXSxyPWVbMV0sbj1adChyKTtyZXR1cm5bbipadCh0KSxuKlh0KHQpLFh0KHIpXX1mdW5jdGlvbiBqRShlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXX1mdW5jdGlvbiBrcChlLHQpe3JldHVybltlWzFdKnRbMl0tZVsyXSp0WzFdLGVbMl0qdFswXS1lWzBdKnRbMl0sZVswXSp0WzFdLWVbMV0qdFswXV19ZnVuY3Rpb24gcGsoZSx0KXtlWzBdKz10WzBdLGVbMV0rPXRbMV0sZVsyXSs9dFsyXX1mdW5jdGlvbiBYRShlLHQpe3JldHVybltlWzBdKnQsZVsxXSp0LGVbMl0qdF19ZnVuY3Rpb24gSF8oZSl7dmFyIHQ9eHIoZVswXSplWzBdK2VbMV0qZVsxXStlWzJdKmVbMl0pO2VbMF0vPXQsZVsxXS89dCxlWzJdLz10fXZhciBuaSxNcyxoaSxubCxWXyxSeHQsTnh0LExiLCRFPVNzKCksWW0sTnAsUnA9e3BvaW50OnlqLGxpbmVTdGFydDpJeHQsbGluZUVuZDpMeHQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7UnAucG9pbnQ9T3h0LFJwLmxpbmVTdGFydD1yM2UsUnAubGluZUVuZD1uM2UsJEUucmVzZXQoKSxwdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3B1LnBvbHlnb25FbmQoKSxScC5wb2ludD15aixScC5saW5lU3RhcnQ9SXh0LFJwLmxpbmVFbmQ9THh0LFlFPDA/KG5pPS0oaGk9MTgwKSxNcz0tKG5sPTkwKSk6JEU+bGU/bmw9OTA6JEU8LWxlJiYoTXM9LTkwKSxOcFswXT1uaSxOcFsxXT1oaX0sc3BoZXJlOmZ1bmN0aW9uKCl7bmk9LShoaT0xODApLE1zPS0obmw9OTApfX07ZnVuY3Rpb24geWooZSx0KXtZbS5wdXNoKE5wPVtuaT1lLGhpPWVdKSx0PE1zJiYoTXM9dCksdD5ubCYmKG5sPXQpfWZ1bmN0aW9uIER4dChlLHQpe3ZhciByPW9jKFtlKl9lLHQqX2VdKTtpZihMYil7dmFyIG49a3AoTGIsciksaT1bblsxXSwtblswXSwwXSxvPWtwKGksbik7SF8obyksbz1CXyhvKTt2YXIgYT1lLVZfLHM9YT4wPzE6LTEsbD1vWzBdKnZyKnMsYyx1PVJlKGEpPjE4MDt1XihzKlZfPGwmJmw8cyplKT8oYz1vWzFdKnZyLGM+bmwmJihubD1jKSk6KGw9KGwrMzYwKSUzNjAtMTgwLHVeKHMqVl88bCYmbDxzKmUpPyhjPS1vWzFdKnZyLGM8TXMmJihNcz1jKSk6KHQ8TXMmJihNcz10KSx0Pm5sJiYobmw9dCkpKSx1P2U8Vl8/cmwobmksZSk+cmwobmksaGkpJiYoaGk9ZSk6cmwoZSxoaSk+cmwobmksaGkpJiYobmk9ZSk6aGk+PW5pPyhlPG5pJiYobmk9ZSksZT5oaSYmKGhpPWUpKTplPlZfP3JsKG5pLGUpPnJsKG5pLGhpKSYmKGhpPWUpOnJsKGUsaGkpPnJsKG5pLGhpKSYmKG5pPWUpfWVsc2UgWW0ucHVzaChOcD1bbmk9ZSxoaT1lXSk7dDxNcyYmKE1zPXQpLHQ+bmwmJihubD10KSxMYj1yLFZfPWV9ZnVuY3Rpb24gSXh0KCl7UnAucG9pbnQ9RHh0fWZ1bmN0aW9uIEx4dCgpe05wWzBdPW5pLE5wWzFdPWhpLFJwLnBvaW50PXlqLExiPW51bGx9ZnVuY3Rpb24gT3h0KGUsdCl7aWYoTGIpe3ZhciByPWUtVl87JEUuYWRkKFJlKHIpPjE4MD9yKyhyPjA/MzYwOi0zNjApOnIpfWVsc2UgUnh0PWUsTnh0PXQ7cHUucG9pbnQoZSx0KSxEeHQoZSx0KX1mdW5jdGlvbiByM2UoKXtwdS5saW5lU3RhcnQoKX1mdW5jdGlvbiBuM2UoKXtPeHQoUnh0LE54dCkscHUubGluZUVuZCgpLFJlKCRFKT5sZSYmKG5pPS0oaGk9MTgwKSksTnBbMF09bmksTnBbMV09aGksTGI9bnVsbH1mdW5jdGlvbiBybChlLHQpe3JldHVybih0LT1lKTwwP3QrMzYwOnR9ZnVuY3Rpb24gaTNlKGUsdCl7cmV0dXJuIGVbMF0tdFswXX1mdW5jdGlvbiBreHQoZSx0KXtyZXR1cm4gZVswXTw9ZVsxXT9lWzBdPD10JiZ0PD1lWzFdOnQ8ZVswXXx8ZVsxXTx0fWZ1bmN0aW9uIHp4dChlKXt2YXIgdCxyLG4saSxvLGEscztpZihubD1oaT0tKG5pPU1zPTEvMCksWW09W10sdm8oZSxScCkscj1ZbS5sZW5ndGgpe2ZvcihZbS5zb3J0KGkzZSksdD0xLG49WW1bMF0sbz1bbl07dDxyOysrdClpPVltW3RdLGt4dChuLGlbMF0pfHxreHQobixpWzFdKT8ocmwoblswXSxpWzFdKT5ybChuWzBdLG5bMV0pJiYoblsxXT1pWzFdKSxybChpWzBdLG5bMV0pPnJsKG5bMF0sblsxXSkmJihuWzBdPWlbMF0pKTpvLnB1c2gobj1pKTtmb3IoYT0tMS8wLHI9by5sZW5ndGgtMSx0PTAsbj1vW3JdO3Q8PXI7bj1pLCsrdClpPW9bdF0sKHM9cmwoblsxXSxpWzBdKSk+YSYmKGE9cyxuaT1pWzBdLGhpPW5bMV0pfXJldHVybiBZbT1OcD1udWxsLG5pPT09MS8wfHxNcz09PTEvMD9bW05hTixOYU5dLFtOYU4sTmFOXV06W1tuaSxNc10sW2hpLG5sXV19dmFyIEtFLGRrLG1rLGdrLF9rLHlrLHZrLHhrLHZqLHhqLGJqLEh4dCxWeHQsRmEsQmEsSGEsZHU9e3NwaGVyZTpGcixwb2ludDp3aixsaW5lU3RhcnQ6Rnh0LGxpbmVFbmQ6Qnh0LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2R1LmxpbmVTdGFydD1zM2UsZHUubGluZUVuZD1sM2V9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtkdS5saW5lU3RhcnQ9Rnh0LGR1LmxpbmVFbmQ9Qnh0fX07ZnVuY3Rpb24gd2ooZSx0KXtlKj1fZSx0Kj1fZTt2YXIgcj1adCh0KTtaRShyKlp0KGUpLHIqWHQoZSksWHQodCkpfWZ1bmN0aW9uIFpFKGUsdCxyKXsrK0tFLG1rKz0oZS1taykvS0UsZ2srPSh0LWdrKS9LRSxfays9KHItX2spL0tFfWZ1bmN0aW9uIEZ4dCgpe2R1LnBvaW50PW8zZX1mdW5jdGlvbiBvM2UoZSx0KXtlKj1fZSx0Kj1fZTt2YXIgcj1adCh0KTtGYT1yKlp0KGUpLEJhPXIqWHQoZSksSGE9WHQodCksZHUucG9pbnQ9YTNlLFpFKEZhLEJhLEhhKX1mdW5jdGlvbiBhM2UoZSx0KXtlKj1fZSx0Kj1fZTt2YXIgcj1adCh0KSxuPXIqWnQoZSksaT1yKlh0KGUpLG89WHQodCksYT1ibih4cigoYT1CYSpvLUhhKmkpKmErKGE9SGEqbi1GYSpvKSphKyhhPUZhKmktQmEqbikqYSksRmEqbitCYSppK0hhKm8pO2RrKz1hLHlrKz1hKihGYSsoRmE9bikpLHZrKz1hKihCYSsoQmE9aSkpLHhrKz1hKihIYSsoSGE9bykpLFpFKEZhLEJhLEhhKX1mdW5jdGlvbiBCeHQoKXtkdS5wb2ludD13an1mdW5jdGlvbiBzM2UoKXtkdS5wb2ludD1jM2V9ZnVuY3Rpb24gbDNlKCl7VXh0KEh4dCxWeHQpLGR1LnBvaW50PXdqfWZ1bmN0aW9uIGMzZShlLHQpe0h4dD1lLFZ4dD10LGUqPV9lLHQqPV9lLGR1LnBvaW50PVV4dDt2YXIgcj1adCh0KTtGYT1yKlp0KGUpLEJhPXIqWHQoZSksSGE9WHQodCksWkUoRmEsQmEsSGEpfWZ1bmN0aW9uIFV4dChlLHQpe2UqPV9lLHQqPV9lO3ZhciByPVp0KHQpLG49cipadChlKSxpPXIqWHQoZSksbz1YdCh0KSxhPUJhKm8tSGEqaSxzPUhhKm4tRmEqbyxsPUZhKmktQmEqbixjPXhyKGEqYStzKnMrbCpsKSx1PXduKGMpLGg9YyYmLXUvYzt2ais9aCphLHhqKz1oKnMsYmorPWgqbCxkays9dSx5ays9dSooRmErKEZhPW4pKSx2ays9dSooQmErKEJhPWkpKSx4ays9dSooSGErKEhhPW8pKSxaRShGYSxCYSxIYSl9ZnVuY3Rpb24gcXh0KGUpe0tFPWRrPW1rPWdrPV9rPXlrPXZrPXhrPXZqPXhqPWJqPTAsdm8oZSxkdSk7dmFyIHQ9dmoscj14aixuPWJqLGk9dCp0K3IqcituKm47cmV0dXJuIGk8el8mJih0PXlrLHI9dmssbj14ayxkazxsZSYmKHQ9bWsscj1nayxuPV9rKSxpPXQqdCtyKnIrbipuLGk8el8pP1tOYU4sTmFOXTpbYm4ocix0KSp2cix3bihuL3hyKGkpKSp2cl19ZnVuY3Rpb24gVV8oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIEpFKGUsdCl7ZnVuY3Rpb24gcihuLGkpe3JldHVybiBuPWUobixpKSx0KG5bMF0sblsxXSl9cmV0dXJuIGUuaW52ZXJ0JiZ0LmludmVydCYmKHIuaW52ZXJ0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIG49dC5pbnZlcnQobixpKSxuJiZlLmludmVydChuWzBdLG5bMV0pfSkscn1mdW5jdGlvbiBTaihlLHQpe3JldHVybltSZShlKT5CZT9lK01hdGgucm91bmQoLWUvU2kpKlNpOmUsdF19U2ouaW52ZXJ0PVNqO2Z1bmN0aW9uIFFFKGUsdCxyKXtyZXR1cm4oZSU9U2kpP3R8fHI/SkUoV3h0KGUpLFl4dCh0LHIpKTpXeHQoZSk6dHx8cj9ZeHQodCxyKTpTan1mdW5jdGlvbiBHeHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrPWUsW3Q+QmU/dC1TaTp0PC1CZT90K1NpOnQscl19fWZ1bmN0aW9uIFd4dChlKXt2YXIgdD1HeHQoZSk7cmV0dXJuIHQuaW52ZXJ0PUd4dCgtZSksdH1mdW5jdGlvbiBZeHQoZSx0KXt2YXIgcj1adChlKSxuPVh0KGUpLGk9WnQodCksbz1YdCh0KTtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9WnQobCksdT1adChzKSpjLGg9WHQocykqYyxmPVh0KGwpLHA9ZipyK3UqbjtyZXR1cm5bYm4oaCppLXAqbyx1KnItZipuKSx3bihwKmkraCpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHMsbCl7dmFyIGM9WnQobCksdT1adChzKSpjLGg9WHQocykqYyxmPVh0KGwpLHA9ZippLWgqbztyZXR1cm5bYm4oaCppK2Yqbyx1KnIrcCpuKSx3bihwKnItdSpuKV19LGF9ZnVuY3Rpb24gYmsoZSl7ZT1RRShlWzBdKl9lLGVbMV0qX2UsZS5sZW5ndGg+Mj9lWzJdKl9lOjApO2Z1bmN0aW9uIHQocil7cmV0dXJuIHI9ZShyWzBdKl9lLHJbMV0qX2UpLHJbMF0qPXZyLHJbMV0qPXZyLHJ9cmV0dXJuIHQuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW52ZXJ0KHJbMF0qX2UsclsxXSpfZSksclswXSo9dnIsclsxXSo9dnIscn0sdH1mdW5jdGlvbiBNaihlLHQscixuLGksbyl7aWYoISFyKXt2YXIgYT1adCh0KSxzPVh0KHQpLGw9bipyO2k9PW51bGw/KGk9dCtuKlNpLG89dC1sLzIpOihpPWp4dChhLGkpLG89anh0KGEsbyksKG4+MD9pPG86aT5vKSYmKGkrPW4qU2kpKTtmb3IodmFyIGMsdT1pO24+MD91Pm86dTxvO3UtPWwpYz1CXyhbYSwtcypadCh1KSwtcypYdCh1KV0pLGUucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24ganh0KGUsdCl7dD1vYyh0KSx0WzBdLT1lLEhfKHQpO3ZhciByPXVrKC10WzFdKTtyZXR1cm4oKC10WzJdPDA/LXI6cikrU2ktbGUpJVNpfWZ1bmN0aW9uIFh4dCgpe3ZhciBlPVVfKFswLDBdKSx0PVVfKDkwKSxyPVVfKDYpLG4saSxvPXtwb2ludDphfTtmdW5jdGlvbiBhKGwsYyl7bi5wdXNoKGw9aShsLGMpKSxsWzBdKj12cixsWzFdKj12cn1mdW5jdGlvbiBzKCl7dmFyIGw9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSpfZSx1PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKl9lO3JldHVybiBuPVtdLGk9UUUoLWxbMF0qX2UsLWxbMV0qX2UsMCkuaW52ZXJ0LE1qKG8sYyx1LDEpLGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltuXX0sbj1pPW51bGwsbH1yZXR1cm4gcy5jZW50ZXI9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXyhbK2xbMF0sK2xbMV1dKSxzKTplfSxzLnJhZGl1cz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOlVfKCtsKSxzKTp0fSxzLnByZWNpc2lvbj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOlVfKCtsKSxzKTpyfSxzfWZ1bmN0aW9uIHdrKCl7dmFyIGU9W10sdDtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24ocixuLGkpe3QucHVzaChbcixuLGldKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOkZyLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn19fWZ1bmN0aW9uIGtiKGUsdCl7cmV0dXJuIFJlKGVbMF0tdFswXSk8bGUmJlJlKGVbMV0tdFsxXSk8bGV9ZnVuY3Rpb24gU2soZSx0LHIsbil7dGhpcy54PWUsdGhpcy56PXQsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBNayhlLHQscixuLGkpe3ZhciBvPVtdLGE9W10scyxsO2lmKGUuZm9yRWFjaChmdW5jdGlvbihkKXtpZighKChnPWQubGVuZ3RoLTEpPD0wKSl7dmFyIGcsXz1kWzBdLHk9ZFtnXSx4O2lmKGtiKF8seSkpe2lmKCFfWzJdJiYheVsyXSl7Zm9yKGkubGluZVN0YXJ0KCkscz0wO3M8ZzsrK3MpaS5wb2ludCgoXz1kW3NdKVswXSxfWzFdKTtpLmxpbmVFbmQoKTtyZXR1cm59eVswXSs9MipsZX1vLnB1c2goeD1uZXcgU2soXyxkLG51bGwsITApKSxhLnB1c2goeC5vPW5ldyBTayhfLG51bGwseCwhMSkpLG8ucHVzaCh4PW5ldyBTayh5LGQsbnVsbCwhMSkpLGEucHVzaCh4Lm89bmV3IFNrKHksbnVsbCx4LCEwKSl9fSksISFvLmxlbmd0aCl7Zm9yKGEuc29ydCh0KSwkeHQobyksJHh0KGEpLHM9MCxsPWEubGVuZ3RoO3M8bDsrK3MpYVtzXS5lPXI9IXI7Zm9yKHZhciBjPW9bMF0sdSxoOzspe2Zvcih2YXIgZj1jLHA9ITA7Zi52OylpZigoZj1mLm4pPT09YylyZXR1cm47dT1mLnosaS5saW5lU3RhcnQoKTtkb3tpZihmLnY9Zi5vLnY9ITAsZi5lKXtpZihwKWZvcihzPTAsbD11Lmxlbmd0aDtzPGw7KytzKWkucG9pbnQoKGg9dVtzXSlbMF0saFsxXSk7ZWxzZSBuKGYueCxmLm4ueCwxLGkpO2Y9Zi5ufWVsc2V7aWYocClmb3IodT1mLnAueixzPXUubGVuZ3RoLTE7cz49MDstLXMpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4oZi54LGYucC54LC0xLGkpO2Y9Zi5wfWY9Zi5vLHU9Zi56LHA9IXB9d2hpbGUoIWYudik7aS5saW5lRW5kKCl9fX1mdW5jdGlvbiAkeHQoZSl7aWYoISEodD1lLmxlbmd0aCkpe2Zvcih2YXIgdCxyPTAsbj1lWzBdLGk7KytyPHQ7KW4ubj1pPWVbcl0saS5wPW4sbj1pO24ubj1pPWVbMF0saS5wPW59fXZhciBFaj1TcygpO2Z1bmN0aW9uIFRqKGUpe3JldHVybiBSZShlWzBdKTw9QmU/ZVswXTpjYShlWzBdKSooKFJlKGVbMF0pK0JlKSVTaS1CZSl9ZnVuY3Rpb24gRWsoZSx0KXt2YXIgcj1Uaih0KSxuPXRbMV0saT1YdChuKSxvPVtYdChyKSwtWnQociksMF0sYT0wLHM9MDtFai5yZXNldCgpLGk9PT0xP249bW4rbGU6aT09PS0xJiYobj0tbW4tbGUpO2Zvcih2YXIgbD0wLGM9ZS5sZW5ndGg7bDxjOysrbClpZighIShoPSh1PWVbbF0pLmxlbmd0aCkpZm9yKHZhciB1LGgsZj11W2gtMV0scD1UaihmKSxkPWZbMV0vMitQYixnPVh0KGQpLF89WnQoZCkseT0wO3k8aDsrK3kscD1iLGc9QyxfPVAsZj14KXt2YXIgeD11W3ldLGI9VGooeCksUz14WzFdLzIrUGIsQz1YdChTKSxQPVp0KFMpLGs9Yi1wLE89az49MD8xOi0xLEQ9TyprLEI9RD5CZSxJPWcqQztpZihFai5hZGQoYm4oSSpPKlh0KEQpLF8qUCtJKlp0KEQpKSksYSs9Qj9rK08qU2k6ayxCXnA+PXJeYj49cil7dmFyIEw9a3Aob2MoZiksb2MoeCkpO0hfKEwpO3ZhciBSPWtwKG8sTCk7SF8oUik7dmFyIEY9KEJeaz49MD8tMToxKSp3bihSWzJdKTsobj5GfHxuPT09RiYmKExbMF18fExbMV0pKSYmKHMrPUJeaz49MD8xOi0xKX19cmV0dXJuKGE8LWxlfHxhPGxlJiZFajwtbGUpXnMmMX1mdW5jdGlvbiBUayhlLHQscixuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG89dChpKSxhPXdrKCkscz10KGEpLGw9ITEsYyx1LGgsZj17cG9pbnQ6cCxsaW5lU3RhcnQ6ZyxsaW5lRW5kOl8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zi5wb2ludD15LGYubGluZVN0YXJ0PXgsZi5saW5lRW5kPWIsdT1bXSxjPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Zi5wb2ludD1wLGYubGluZVN0YXJ0PWcsZi5saW5lRW5kPV8sdT1JbSh1KTt2YXIgUz1FayhjLG4pO3UubGVuZ3RoPyhsfHwoaS5wb2x5Z29uU3RhcnQoKSxsPSEwKSxNayh1LGgzZSxTLHIsaSkpOlMmJihsfHwoaS5wb2x5Z29uU3RhcnQoKSxsPSEwKSxpLmxpbmVTdGFydCgpLHIobnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGwmJihpLnBvbHlnb25FbmQoKSxsPSExKSx1PWM9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLHIobnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBwKFMsQyl7ZShTLEMpJiZpLnBvaW50KFMsQyl9ZnVuY3Rpb24gZChTLEMpe28ucG9pbnQoUyxDKX1mdW5jdGlvbiBnKCl7Zi5wb2ludD1kLG8ubGluZVN0YXJ0KCl9ZnVuY3Rpb24gXygpe2YucG9pbnQ9cCxvLmxpbmVFbmQoKX1mdW5jdGlvbiB5KFMsQyl7aC5wdXNoKFtTLENdKSxzLnBvaW50KFMsQyl9ZnVuY3Rpb24geCgpe3MubGluZVN0YXJ0KCksaD1bXX1mdW5jdGlvbiBiKCl7eShoWzBdWzBdLGhbMF1bMV0pLHMubGluZUVuZCgpO3ZhciBTPXMuY2xlYW4oKSxDPWEucmVzdWx0KCksUCxrPUMubGVuZ3RoLE8sRCxCO2lmKGgucG9wKCksYy5wdXNoKGgpLGg9bnVsbCwhIWspe2lmKFMmMSl7aWYoRD1DWzBdLChPPUQubGVuZ3RoLTEpPjApe2ZvcihsfHwoaS5wb2x5Z29uU3RhcnQoKSxsPSEwKSxpLmxpbmVTdGFydCgpLFA9MDtQPE87KytQKWkucG9pbnQoKEI9RFtQXSlbMF0sQlsxXSk7aS5saW5lRW5kKCl9cmV0dXJufWs+MSYmUyYyJiZDLnB1c2goQy5wb3AoKS5jb25jYXQoQy5zaGlmdCgpKSksdS5wdXNoKEMuZmlsdGVyKHUzZSkpfX1yZXR1cm4gZn19ZnVuY3Rpb24gdTNlKGUpe3JldHVybiBlLmxlbmd0aD4xfWZ1bmN0aW9uIGgzZShlLHQpe3JldHVybigoZT1lLngpWzBdPDA/ZVsxXS1tbi1sZTptbi1lWzFdKS0oKHQ9dC54KVswXTwwP3RbMV0tbW4tbGU6bW4tdFsxXSl9dmFyIHQ1PVRrKGZ1bmN0aW9uKCl7cmV0dXJuITB9LGYzZSxkM2UsWy1CZSwtbW5dKTtmdW5jdGlvbiBmM2UoZSl7dmFyIHQ9TmFOLHI9TmFOLG49TmFOLGk7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2UubGluZVN0YXJ0KCksaT0xfSxwb2ludDpmdW5jdGlvbihvLGEpe3ZhciBzPW8+MD9CZTotQmUsbD1SZShvLXQpO1JlKGwtQmUpPGxlPyhlLnBvaW50KHQscj0ocithKS8yPjA/bW46LW1uKSxlLnBvaW50KG4sciksZS5saW5lRW5kKCksZS5saW5lU3RhcnQoKSxlLnBvaW50KHMsciksZS5wb2ludChvLHIpLGk9MCk6biE9PXMmJmw+PUJlJiYoUmUodC1uKTxsZSYmKHQtPW4qbGUpLFJlKG8tcyk8bGUmJihvLT1zKmxlKSxyPXAzZSh0LHIsbyxhKSxlLnBvaW50KG4sciksZS5saW5lRW5kKCksZS5saW5lU3RhcnQoKSxlLnBvaW50KHMsciksaT0wKSxlLnBvaW50KHQ9byxyPWEpLG49c30sbGluZUVuZDpmdW5jdGlvbigpe2UubGluZUVuZCgpLHQ9cj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItaX19fWZ1bmN0aW9uIHAzZShlLHQscixuKXt2YXIgaSxvLGE9WHQoZS1yKTtyZXR1cm4gUmUoYSk+bGU/aWMoKFh0KHQpKihvPVp0KG4pKSpYdChyKS1YdChuKSooaT1adCh0KSkqWHQoZSkpLyhpKm8qYSkpOih0K24pLzJ9ZnVuY3Rpb24gZDNlKGUsdCxyLG4pe3ZhciBpO2lmKGU9PW51bGwpaT1yKm1uLG4ucG9pbnQoLUJlLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KEJlLGkpLG4ucG9pbnQoQmUsMCksbi5wb2ludChCZSwtaSksbi5wb2ludCgwLC1pKSxuLnBvaW50KC1CZSwtaSksbi5wb2ludCgtQmUsMCksbi5wb2ludCgtQmUsaSk7ZWxzZSBpZihSZShlWzBdLXRbMF0pPmxlKXt2YXIgbz1lWzBdPHRbMF0/QmU6LUJlO2k9cipvLzIsbi5wb2ludCgtbyxpKSxuLnBvaW50KDAsaSksbi5wb2ludChvLGkpfWVsc2Ugbi5wb2ludCh0WzBdLHRbMV0pfWZ1bmN0aW9uIENrKGUpe3ZhciB0PVp0KGUpLHI9NipfZSxuPXQ+MCxpPVJlKHQpPmxlO2Z1bmN0aW9uIG8odSxoLGYscCl7TWoocCxlLHIsZix1LGgpfWZ1bmN0aW9uIGEodSxoKXtyZXR1cm4gWnQodSkqWnQoaCk+dH1mdW5jdGlvbiBzKHUpe3ZhciBoLGYscCxkLGc7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2Q9cD0hMSxnPTF9LHBvaW50OmZ1bmN0aW9uKF8seSl7dmFyIHg9W18seV0sYixTPWEoXyx5KSxDPW4/Uz8wOmMoXyx5KTpTP2MoXysoXzwwP0JlOi1CZSkseSk6MDtpZighaCYmKGQ9cD1TKSYmdS5saW5lU3RhcnQoKSxTIT09cCYmKGI9bChoLHgpLCghYnx8a2IoaCxiKXx8a2IoeCxiKSkmJih4WzJdPTEpKSxTIT09cClnPTAsUz8odS5saW5lU3RhcnQoKSxiPWwoeCxoKSx1LnBvaW50KGJbMF0sYlsxXSkpOihiPWwoaCx4KSx1LnBvaW50KGJbMF0sYlsxXSwyKSx1LmxpbmVFbmQoKSksaD1iO2Vsc2UgaWYoaSYmaCYmbl5TKXt2YXIgUDshKEMmZikmJihQPWwoeCxoLCEwKSkmJihnPTAsbj8odS5saW5lU3RhcnQoKSx1LnBvaW50KFBbMF1bMF0sUFswXVsxXSksdS5wb2ludChQWzFdWzBdLFBbMV1bMV0pLHUubGluZUVuZCgpKToodS5wb2ludChQWzFdWzBdLFBbMV1bMV0pLHUubGluZUVuZCgpLHUubGluZVN0YXJ0KCksdS5wb2ludChQWzBdWzBdLFBbMF1bMV0sMykpKX1TJiYoIWh8fCFrYihoLHgpKSYmdS5wb2ludCh4WzBdLHhbMV0pLGg9eCxwPVMsZj1DfSxsaW5lRW5kOmZ1bmN0aW9uKCl7cCYmdS5saW5lRW5kKCksaD1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBnfChkJiZwKTw8MX19fWZ1bmN0aW9uIGwodSxoLGYpe3ZhciBwPW9jKHUpLGQ9b2MoaCksZz1bMSwwLDBdLF89a3AocCxkKSx5PWpFKF8sXykseD1fWzBdLGI9eS14Kng7aWYoIWIpcmV0dXJuIWYmJnU7dmFyIFM9dCp5L2IsQz0tdCp4L2IsUD1rcChnLF8pLGs9WEUoZyxTKSxPPVhFKF8sQyk7cGsoayxPKTt2YXIgRD1QLEI9akUoayxEKSxJPWpFKEQsRCksTD1CKkItSSooakUoayxrKS0xKTtpZighKEw8MCkpe3ZhciBSPXhyKEwpLEY9WEUoRCwoLUItUikvSSk7aWYocGsoRixrKSxGPUJfKEYpLCFmKXJldHVybiBGO3ZhciB6PXVbMF0sVT1oWzBdLFc9dVsxXSxaPWhbMV0scnQ7VTx6JiYocnQ9eix6PVUsVT1ydCk7dmFyIG90PVUteixzdD1SZShvdC1CZSk8bGUsU3Q9c3R8fG90PGxlO2lmKCFzdCYmWjxXJiYocnQ9VyxXPVosWj1ydCksU3Q/c3Q/VytaPjBeRlsxXTwoUmUoRlswXS16KTxsZT9XOlopOlc8PUZbMV0mJkZbMV08PVo6b3Q+QmVeKHo8PUZbMF0mJkZbMF08PVUpKXt2YXIgYnQ9WEUoRCwoLUIrUikvSSk7cmV0dXJuIHBrKGJ0LGspLFtGLEJfKGJ0KV19fX1mdW5jdGlvbiBjKHUsaCl7dmFyIGY9bj9lOkJlLWUscD0wO3JldHVybiB1PC1mP3B8PTE6dT5mJiYocHw9MiksaDwtZj9wfD00Omg+ZiYmKHB8PTgpLHB9cmV0dXJuIFRrKGEscyxvLG4/WzAsLWVdOlstQmUsZS1CZV0pfWZ1bmN0aW9uIEt4dChlLHQscixuLGksbyl7dmFyIGE9ZVswXSxzPWVbMV0sbD10WzBdLGM9dFsxXSx1PTAsaD0xLGY9bC1hLHA9Yy1zLGQ7aWYoZD1yLWEsISghZiYmZD4wKSl7aWYoZC89ZixmPDApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1lbHNlIGlmKGY+MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWlmKGQ9aS1hLCEoIWYmJmQ8MCkpe2lmKGQvPWYsZjwwKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9ZWxzZSBpZihmPjApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1pZihkPW4tcywhKCFwJiZkPjApKXtpZihkLz1wLHA8MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWVsc2UgaWYocD4wKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9aWYoZD1vLXMsISghcCYmZDwwKSl7aWYoZC89cCxwPDApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1lbHNlIGlmKHA+MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfXJldHVybiB1PjAmJihlWzBdPWErdSpmLGVbMV09cyt1KnApLGg8MSYmKHRbMF09YStoKmYsdFsxXT1zK2gqcCksITB9fX19fXZhciBlNT0xZTksQWs9LWU1O2Z1bmN0aW9uIERwKGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyx1KXtyZXR1cm4gZTw9YyYmYzw9ciYmdDw9dSYmdTw9bn1mdW5jdGlvbiBvKGMsdSxoLGYpe3ZhciBwPTAsZD0wO2lmKGM9PW51bGx8fChwPWEoYyxoKSkhPT0oZD1hKHUsaCkpfHxsKGMsdSk8MF5oPjApZG8gZi5wb2ludChwPT09MHx8cD09PTM/ZTpyLHA+MT9uOnQpO3doaWxlKChwPShwK2grNCklNCkhPT1kKTtlbHNlIGYucG9pbnQodVswXSx1WzFdKX1mdW5jdGlvbiBhKGMsdSl7cmV0dXJuIFJlKGNbMF0tZSk8bGU/dT4wPzA6MzpSZShjWzBdLXIpPGxlP3U+MD8yOjE6UmUoY1sxXS10KTxsZT91PjA/MTowOnU+MD8zOjJ9ZnVuY3Rpb24gcyhjLHUpe3JldHVybiBsKGMueCx1LngpfWZ1bmN0aW9uIGwoYyx1KXt2YXIgaD1hKGMsMSksZj1hKHUsMSk7cmV0dXJuIGghPT1mP2gtZjpoPT09MD91WzFdLWNbMV06aD09PTE/Y1swXS11WzBdOmg9PT0yP2NbMV0tdVsxXTp1WzBdLWNbMF19cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciB1PWMsaD13aygpLGYscCxkLGcsXyx5LHgsYixTLEMsUCxrPXtwb2ludDpPLGxpbmVTdGFydDpMLGxpbmVFbmQ6Uixwb2x5Z29uU3RhcnQ6Qixwb2x5Z29uRW5kOkl9O2Z1bmN0aW9uIE8oeixVKXtpKHosVSkmJnUucG9pbnQoeixVKX1mdW5jdGlvbiBEKCl7Zm9yKHZhciB6PTAsVT0wLFc9cC5sZW5ndGg7VTxXOysrVSlmb3IodmFyIFo9cFtVXSxydD0xLG90PVoubGVuZ3RoLHN0PVpbMF0sU3QsYnQsTXQ9c3RbMF0sbHQ9c3RbMV07cnQ8b3Q7KytydClTdD1NdCxidD1sdCxzdD1aW3J0XSxNdD1zdFswXSxsdD1zdFsxXSxidDw9bj9sdD5uJiYoTXQtU3QpKihuLWJ0KT4obHQtYnQpKihlLVN0KSYmKyt6Omx0PD1uJiYoTXQtU3QpKihuLWJ0KTwobHQtYnQpKihlLVN0KSYmLS16O3JldHVybiB6fWZ1bmN0aW9uIEIoKXt1PWgsZj1bXSxwPVtdLFA9ITB9ZnVuY3Rpb24gSSgpe3ZhciB6PUQoKSxVPVAmJnosVz0oZj1JbShmKSkubGVuZ3RoOyhVfHxXKSYmKGMucG9seWdvblN0YXJ0KCksVSYmKGMubGluZVN0YXJ0KCksbyhudWxsLG51bGwsMSxjKSxjLmxpbmVFbmQoKSksVyYmTWsoZixzLHosbyxjKSxjLnBvbHlnb25FbmQoKSksdT1jLGY9cD1kPW51bGx9ZnVuY3Rpb24gTCgpe2sucG9pbnQ9RixwJiZwLnB1c2goZD1bXSksQz0hMCxTPSExLHg9Yj1OYU59ZnVuY3Rpb24gUigpe2YmJihGKGcsXykseSYmUyYmaC5yZWpvaW4oKSxmLnB1c2goaC5yZXN1bHQoKSkpLGsucG9pbnQ9TyxTJiZ1LmxpbmVFbmQoKX1mdW5jdGlvbiBGKHosVSl7dmFyIFc9aSh6LFUpO2lmKHAmJmQucHVzaChbeixVXSksQylnPXosXz1VLHk9VyxDPSExLFcmJih1LmxpbmVTdGFydCgpLHUucG9pbnQoeixVKSk7ZWxzZSBpZihXJiZTKXUucG9pbnQoeixVKTtlbHNle3ZhciBaPVt4PU1hdGgubWF4KEFrLE1hdGgubWluKGU1LHgpKSxiPU1hdGgubWF4KEFrLE1hdGgubWluKGU1LGIpKV0scnQ9W3o9TWF0aC5tYXgoQWssTWF0aC5taW4oZTUseikpLFU9TWF0aC5tYXgoQWssTWF0aC5taW4oZTUsVSkpXTtLeHQoWixydCxlLHQscixuKT8oU3x8KHUubGluZVN0YXJ0KCksdS5wb2ludChaWzBdLFpbMV0pKSx1LnBvaW50KHJ0WzBdLHJ0WzFdKSxXfHx1LmxpbmVFbmQoKSxQPSExKTpXJiYodS5saW5lU3RhcnQoKSx1LnBvaW50KHosVSksUD0hMSl9eD16LGI9VSxTPVd9cmV0dXJuIGt9fWZ1bmN0aW9uIFp4dCgpe3ZhciBlPTAsdD0wLHI9OTYwLG49NTAwLGksbyxhO3JldHVybiBhPXtzdHJlYW06ZnVuY3Rpb24ocyl7cmV0dXJuIGkmJm89PT1zP2k6aT1EcChlLHQscixuKShvPXMpfSxleHRlbnQ6ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3NbMF1bMF0sdD0rc1swXVsxXSxyPStzWzFdWzBdLG49K3NbMV1bMV0saT1vPW51bGwsYSk6W1tlLHRdLFtyLG5dXX19fXZhciBDaj1TcygpLEFqLFBrLElrLFJiPXtzcGhlcmU6RnIscG9pbnQ6RnIsbGluZVN0YXJ0Om0zZSxsaW5lRW5kOkZyLHBvbHlnb25TdGFydDpGcixwb2x5Z29uRW5kOkZyfTtmdW5jdGlvbiBtM2UoKXtSYi5wb2ludD1fM2UsUmIubGluZUVuZD1nM2V9ZnVuY3Rpb24gZzNlKCl7UmIucG9pbnQ9UmIubGluZUVuZD1Gcn1mdW5jdGlvbiBfM2UoZSx0KXtlKj1fZSx0Kj1fZSxBaj1lLFBrPVh0KHQpLElrPVp0KHQpLFJiLnBvaW50PXkzZX1mdW5jdGlvbiB5M2UoZSx0KXtlKj1fZSx0Kj1fZTt2YXIgcj1YdCh0KSxuPVp0KHQpLGk9UmUoZS1Baiksbz1adChpKSxhPVh0KGkpLHM9biphLGw9SWsqci1QaypuKm8sYz1QaypyK0lrKm4qbztDai5hZGQoYm4oeHIocypzK2wqbCksYykpLEFqPWUsUGs9cixJaz1ufWZ1bmN0aW9uIExrKGUpe3JldHVybiBDai5yZXNldCgpLHZvKGUsUmIpLCtDan12YXIgUGo9W251bGwsbnVsbF0sdjNlPXt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpQan07ZnVuY3Rpb24gTmIoZSx0KXtyZXR1cm4gUGpbMF09ZSxQalsxXT10LExrKHYzZSl9dmFyIEp4dD17RmVhdHVyZTpmdW5jdGlvbihlLHQpe3JldHVybiBrayhlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoa2socltuXS5nZW9tZXRyeSx0KSlyZXR1cm4hMDtyZXR1cm4hMX19LFF4dD17U3BoZXJlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LFBvaW50OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRidChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvaW50OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZih0YnQocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe3JldHVybiBlYnQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihlYnQocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0sUG9seWdvbjpmdW5jdGlvbihlLHQpe3JldHVybiByYnQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihyYnQocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKGtrKHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9fTtmdW5jdGlvbiBrayhlLHQpe3JldHVybiBlJiZReHQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9ReHRbZS50eXBlXShlLHQpOiExfWZ1bmN0aW9uIHRidChlLHQpe3JldHVybiBOYihlLHQpPT09MH1mdW5jdGlvbiBlYnQoZSx0KXtmb3IodmFyIHIsbixpLG89MCxhPWUubGVuZ3RoO288YTtvKyspe2lmKG49TmIoZVtvXSx0KSxuPT09MHx8bz4wJiYoaT1OYihlW29dLGVbby0xXSksaT4wJiZyPD1pJiZuPD1pJiYocituLWkpKigxLU1hdGgucG93KChyLW4pL2ksMikpPHpfKmkpKXJldHVybiEwO3I9bn1yZXR1cm4hMX1mdW5jdGlvbiByYnQoZSx0KXtyZXR1cm4hIUVrKGUubWFwKHgzZSksbmJ0KHQpKX1mdW5jdGlvbiB4M2UoZSl7cmV0dXJuIGU9ZS5tYXAobmJ0KSxlLnBvcCgpLGV9ZnVuY3Rpb24gbmJ0KGUpe3JldHVybltlWzBdKl9lLGVbMV0qX2VdfWZ1bmN0aW9uIGlidChlLHQpe3JldHVybihlJiZKeHQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9KeHRbZS50eXBlXTpraykoZSx0KX1mdW5jdGlvbiBvYnQoZSx0LHIpe3ZhciBuPUlyKGUsdC1sZSxyKS5jb25jYXQodCk7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuLm1hcChmdW5jdGlvbihvKXtyZXR1cm5baSxvXX0pfX1mdW5jdGlvbiBhYnQoZSx0LHIpe3ZhciBuPUlyKGUsdC1sZSxyKS5jb25jYXQodCk7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuLm1hcChmdW5jdGlvbihvKXtyZXR1cm5bbyxpXX0pfX1mdW5jdGlvbiBSaygpe3ZhciBlLHQscixuLGksbyxhLHMsbD0xMCxjPWwsdT05MCxoPTM2MCxmLHAsZCxnLF89Mi41O2Z1bmN0aW9uIHkoKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp4KCl9fWZ1bmN0aW9uIHgoKXtyZXR1cm4gSXIoV0Uobi91KSp1LHIsdSkubWFwKGQpLmNvbmNhdChJcihXRShzL2gpKmgsYSxoKS5tYXAoZykpLmNvbmNhdChJcihXRSh0L2wpKmwsZSxsKS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIFJlKGIldSk+bGV9KS5tYXAoZikpLmNvbmNhdChJcihXRShvL2MpKmMsaSxjKS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIFJlKGIlaCk+bGV9KS5tYXAocCkpfXJldHVybiB5LmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIHgoKS5tYXAoZnVuY3Rpb24oYil7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmJ9fSl9LHkub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbZChuKS5jb25jYXQoZyhhKS5zbGljZSgxKSxkKHIpLnJldmVyc2UoKS5zbGljZSgxKSxnKHMpLnJldmVyc2UoKS5zbGljZSgxKSldfX0seS5leHRlbnQ9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/eS5leHRlbnRNYWpvcihiKS5leHRlbnRNaW5vcihiKTp5LmV4dGVudE1pbm9yKCl9LHkuZXh0ZW50TWFqb3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2JbMF1bMF0scj0rYlsxXVswXSxzPStiWzBdWzFdLGE9K2JbMV1bMV0sbj5yJiYoYj1uLG49cixyPWIpLHM+YSYmKGI9cyxzPWEsYT1iKSx5LnByZWNpc2lvbihfKSk6W1tuLHNdLFtyLGFdXX0seS5leHRlbnRNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rYlswXVswXSxlPStiWzFdWzBdLG89K2JbMF1bMV0saT0rYlsxXVsxXSx0PmUmJihiPXQsdD1lLGU9Yiksbz5pJiYoYj1vLG89aSxpPWIpLHkucHJlY2lzaW9uKF8pKTpbW3Qsb10sW2UsaV1dfSx5LnN0ZXA9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/eS5zdGVwTWFqb3IoYikuc3RlcE1pbm9yKGIpOnkuc3RlcE1pbm9yKCl9LHkuc3RlcE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PStiWzBdLGg9K2JbMV0seSk6W3UsaF19LHkuc3RlcE1pbm9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStiWzBdLGM9K2JbMV0seSk6W2wsY119LHkucHJlY2lzaW9uPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPStiLGY9b2J0KG8saSw5MCkscD1hYnQodCxlLF8pLGQ9b2J0KHMsYSw5MCksZz1hYnQobixyLF8pLHkpOl99LHkuZXh0ZW50TWFqb3IoW1stMTgwLC05MCtsZV0sWzE4MCw5MC1sZV1dKS5leHRlbnRNaW5vcihbWy0xODAsLTgwLWxlXSxbMTgwLDgwK2xlXV0pfWZ1bmN0aW9uIHNidCgpe3JldHVybiBSaygpKCl9ZnVuY3Rpb24gbGJ0KGUsdCl7dmFyIHI9ZVswXSpfZSxuPWVbMV0qX2UsaT10WzBdKl9lLG89dFsxXSpfZSxhPVp0KG4pLHM9WHQobiksbD1adChvKSxjPVh0KG8pLHU9YSpadChyKSxoPWEqWHQociksZj1sKlp0KGkpLHA9bCpYdChpKSxkPTIqd24oeHIocGooby1uKSthKmwqcGooaS1yKSkpLGc9WHQoZCksXz1kP2Z1bmN0aW9uKHkpe3ZhciB4PVh0KHkqPWQpL2csYj1YdChkLXkpL2csUz1iKnUreCpmLEM9YipoK3gqcCxQPWIqcyt4KmM7cmV0dXJuW2JuKEMsUykqdnIsYm4oUCx4cihTKlMrQypDKSkqdnJdfTpmdW5jdGlvbigpe3JldHVybltyKnZyLG4qdnJdfTtyZXR1cm4gXy5kaXN0YW5jZT1kLF99ZnVuY3Rpb24gam0oZSl7cmV0dXJuIGV9dmFyIElqPVNzKCksTGo9U3MoKSxjYnQsdWJ0LGtqLFJqLFhtPXtwb2ludDpGcixsaW5lU3RhcnQ6RnIsbGluZUVuZDpGcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtYbS5saW5lU3RhcnQ9YjNlLFhtLmxpbmVFbmQ9UzNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7WG0ubGluZVN0YXJ0PVhtLmxpbmVFbmQ9WG0ucG9pbnQ9RnIsSWouYWRkKFJlKExqKSksTGoucmVzZXQoKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9SWovMjtyZXR1cm4gSWoucmVzZXQoKSxlfX07ZnVuY3Rpb24gYjNlKCl7WG0ucG9pbnQ9dzNlfWZ1bmN0aW9uIHczZShlLHQpe1htLnBvaW50PWhidCxjYnQ9a2o9ZSx1YnQ9Umo9dH1mdW5jdGlvbiBoYnQoZSx0KXtMai5hZGQoUmoqZS1raip0KSxraj1lLFJqPXR9ZnVuY3Rpb24gUzNlKCl7aGJ0KGNidCx1YnQpfXZhciBOaj1YbTt2YXIgRGI9MS8wLE5rPURiLHI1PS1EYixEaz1yNSxNM2U9e3BvaW50OkUzZSxsaW5lU3RhcnQ6RnIsbGluZUVuZDpGcixwb2x5Z29uU3RhcnQ6RnIscG9seWdvbkVuZDpGcixyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1bW0RiLE5rXSxbcjUsRGtdXTtyZXR1cm4gcjU9RGs9LShOaz1EYj0xLzApLGV9fTtmdW5jdGlvbiBFM2UoZSx0KXtlPERiJiYoRGI9ZSksZT5yNSYmKHI1PWUpLHQ8TmsmJihOaz10KSx0PkRrJiYoRGs9dCl9dmFyIE9iPU0zZTt2YXIgRGo9MCxPaj0wLG41PTAsT2s9MCx6az0wLHpiPTAsemo9MCxGaj0wLGk1PTAsZGJ0LG1idCxCaCxIaCxtdT17cG9pbnQ6cV8sbGluZVN0YXJ0OmZidCxsaW5lRW5kOnBidCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXttdS5saW5lU3RhcnQ9QTNlLG11LmxpbmVFbmQ9UDNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bXUucG9pbnQ9cV8sbXUubGluZVN0YXJ0PWZidCxtdS5saW5lRW5kPXBidH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9aTU/W3pqL2k1LEZqL2k1XTp6Yj9bT2svemIsemsvemJdOm41P1tEai9uNSxPai9uNV06W05hTixOYU5dO3JldHVybiBEaj1Paj1uNT1Paz16az16Yj16aj1Gaj1pNT0wLGV9fTtmdW5jdGlvbiBxXyhlLHQpe0RqKz1lLE9qKz10LCsrbjV9ZnVuY3Rpb24gZmJ0KCl7bXUucG9pbnQ9VDNlfWZ1bmN0aW9uIFQzZShlLHQpe211LnBvaW50PUMzZSxxXyhCaD1lLEhoPXQpfWZ1bmN0aW9uIEMzZShlLHQpe3ZhciByPWUtQmgsbj10LUhoLGk9eHIocipyK24qbik7T2srPWkqKEJoK2UpLzIsemsrPWkqKEhoK3QpLzIsemIrPWkscV8oQmg9ZSxIaD10KX1mdW5jdGlvbiBwYnQoKXttdS5wb2ludD1xX31mdW5jdGlvbiBBM2UoKXttdS5wb2ludD1JM2V9ZnVuY3Rpb24gUDNlKCl7Z2J0KGRidCxtYnQpfWZ1bmN0aW9uIEkzZShlLHQpe211LnBvaW50PWdidCxxXyhkYnQ9Qmg9ZSxtYnQ9SGg9dCl9ZnVuY3Rpb24gZ2J0KGUsdCl7dmFyIHI9ZS1CaCxuPXQtSGgsaT14cihyKnIrbipuKTtPays9aSooQmgrZSkvMix6ays9aSooSGgrdCkvMix6Yis9aSxpPUhoKmUtQmgqdCx6ais9aSooQmgrZSksRmorPWkqKEhoK3QpLGk1Kz1pKjMscV8oQmg9ZSxIaD10KX12YXIgQmo9bXU7ZnVuY3Rpb24gRmsoZSl7dGhpcy5fY29udGV4dD1lfUZrLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JhZGl1cz1lLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT09PTAmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NvbnRleHQubW92ZVRvKGUrdGhpcy5fcmFkaXVzLHQpLHRoaXMuX2NvbnRleHQuYXJjKGUsdCx0aGlzLl9yYWRpdXMsMCxTaSk7YnJlYWt9fX0scmVzdWx0OkZyfTt2YXIgVmo9U3MoKSxIaixfYnQseWJ0LG81LGE1LEJrPXtwb2ludDpGcixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtCay5wb2ludD1MM2V9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtIaiYmdmJ0KF9idCx5YnQpLEJrLnBvaW50PUZyfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtIaj0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe0hqPW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPStWajtyZXR1cm4gVmoucmVzZXQoKSxlfX07ZnVuY3Rpb24gTDNlKGUsdCl7QmsucG9pbnQ9dmJ0LF9idD1vNT1lLHlidD1hNT10fWZ1bmN0aW9uIHZidChlLHQpe281LT1lLGE1LT10LFZqLmFkZCh4cihvNSpvNSthNSphNSkpLG81PWUsYTU9dH12YXIgVWo9Qms7ZnVuY3Rpb24gSGsoKXt0aGlzLl9zdHJpbmc9W119SGsucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOnhidCg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybihlPStlKSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz1lLHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9zdHJpbmcucHVzaCgiTCIsZSwiLCIsdCk7YnJlYWt9ZGVmYXVsdDp7dGhpcy5fY2lyY2xlPT1udWxsJiYodGhpcy5fY2lyY2xlPXhidCh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsZSwiLCIsdCx0aGlzLl9jaXJjbGUpO2JyZWFrfX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciBlPXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLGV9ZWxzZSByZXR1cm4gbnVsbH19O2Z1bmN0aW9uIHhidChlKXtyZXR1cm4ibTAsIitlKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKy0yKmUrImEiK2UrIiwiK2UrIiAwIDEsMSAwLCIrMiplKyJ6In1mdW5jdGlvbiBiYnQoZSx0KXt2YXIgcj00LjUsbixpO2Z1bmN0aW9uIG8oYSl7cmV0dXJuIGEmJih0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmaS5wb2ludFJhZGl1cygrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHZvKGEsbihpKSkpLGkucmVzdWx0KCl9cmV0dXJuIG8uYXJlYT1mdW5jdGlvbihhKXtyZXR1cm4gdm8oYSxuKE5qKSksTmoucmVzdWx0KCl9LG8ubWVhc3VyZT1mdW5jdGlvbihhKXtyZXR1cm4gdm8oYSxuKFVqKSksVWoucmVzdWx0KCl9LG8uYm91bmRzPWZ1bmN0aW9uKGEpe3JldHVybiB2byhhLG4oT2IpKSxPYi5yZXN1bHQoKX0sby5jZW50cm9pZD1mdW5jdGlvbihhKXtyZXR1cm4gdm8oYSxuKEJqKSksQmoucmVzdWx0KCl9LG8ucHJvamVjdGlvbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1hPT1udWxsPyhlPW51bGwsam0pOihlPWEpLnN0cmVhbSxvKTplfSxvLmNvbnRleHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9YT09bnVsbD8odD1udWxsLG5ldyBIayk6bmV3IEZrKHQ9YSksdHlwZW9mIHIhPSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMociksbyk6dH0sby5wb2ludFJhZGl1cz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYT09ImZ1bmN0aW9uIj9hOihpLnBvaW50UmFkaXVzKCthKSwrYSksbyk6cn0sby5wcm9qZWN0aW9uKGUpLmNvbnRleHQodCl9ZnVuY3Rpb24gd2J0KGUpe3JldHVybntzdHJlYW06JG0oZSl9fWZ1bmN0aW9uICRtKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1uZXcgcWo7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByLnN0cmVhbT10LHJ9fWZ1bmN0aW9uIHFqKCl7fXFqLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cWoscG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0cmVhbS5wb2ludChlLHQpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gR2ooZSx0LHIpe3ZhciBuPWUuY2xpcEV4dGVudCYmZS5jbGlwRXh0ZW50KCk7cmV0dXJuIGUuc2NhbGUoMTUwKS50cmFuc2xhdGUoWzAsMF0pLG4hPW51bGwmJmUuY2xpcEV4dGVudChudWxsKSx2byhyLGUuc3RyZWFtKE9iKSksdChPYi5yZXN1bHQoKSksbiE9bnVsbCYmZS5jbGlwRXh0ZW50KG4pLGV9ZnVuY3Rpb24gR18oZSx0LHIpe3JldHVybiBHaihlLGZ1bmN0aW9uKG4pe3ZhciBpPXRbMV1bMF0tdFswXVswXSxvPXRbMV1bMV0tdFswXVsxXSxhPU1hdGgubWluKGkvKG5bMV1bMF0tblswXVswXSksby8oblsxXVsxXS1uWzBdWzFdKSkscz0rdFswXVswXSsoaS1hKihuWzFdWzBdK25bMF1bMF0pKS8yLGw9K3RbMF1bMV0rKG8tYSooblsxXVsxXStuWzBdWzFdKSkvMjtlLnNjYWxlKDE1MCphKS50cmFuc2xhdGUoW3MsbF0pfSxyKX1mdW5jdGlvbiBGYihlLHQscil7cmV0dXJuIEdfKGUsW1swLDBdLHRdLHIpfWZ1bmN0aW9uIEJiKGUsdCxyKXtyZXR1cm4gR2ooZSxmdW5jdGlvbihuKXt2YXIgaT0rdCxvPWkvKG5bMV1bMF0tblswXVswXSksYT0oaS1vKihuWzFdWzBdK25bMF1bMF0pKS8yLHM9LW8qblswXVsxXTtlLnNjYWxlKDE1MCpvKS50cmFuc2xhdGUoW2Esc10pfSxyKX1mdW5jdGlvbiBIYihlLHQscil7cmV0dXJuIEdqKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzFdLW5bMF1bMV0pLGE9LW8qblswXVswXSxzPShpLW8qKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9dmFyIFNidD0xNixrM2U9WnQoMzAqX2UpO2Z1bmN0aW9uIFdqKGUsdCl7cmV0dXJuK3Q/TjNlKGUsdCk6UjNlKGUpfWZ1bmN0aW9uIFIzZShlKXtyZXR1cm4gJG0oe3BvaW50OmZ1bmN0aW9uKHQscil7dD1lKHQsciksdGhpcy5zdHJlYW0ucG9pbnQodFswXSx0WzFdKX19KX1mdW5jdGlvbiBOM2UoZSx0KXtmdW5jdGlvbiByKG4saSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyl7dmFyIHk9Yy1uLHg9dS1pLGI9eSp5K3gqeDtpZihiPjQqdCYmZy0tKXt2YXIgUz1hK2YsQz1zK3AsUD1sK2Qsaz14cihTKlMrQypDK1AqUCksTz13bihQLz1rKSxEPVJlKFJlKFApLTEpPGxlfHxSZShvLWgpPGxlPyhvK2gpLzI6Ym4oQyxTKSxCPWUoRCxPKSxJPUJbMF0sTD1CWzFdLFI9SS1uLEY9TC1pLHo9eCpSLXkqRjsoeip6L2I+dHx8UmUoKHkqUit4KkYpL2ItLjUpPi4zfHxhKmYrcypwK2wqZDxrM2UpJiYocihuLGksbyxhLHMsbCxJLEwsRCxTLz1rLEMvPWssUCxnLF8pLF8ucG9pbnQoSSxMKSxyKEksTCxELFMsQyxQLGMsdSxoLGYscCxkLGcsXykpfX1yZXR1cm4gZnVuY3Rpb24obil7dmFyIGksbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF89e3BvaW50OnksbGluZVN0YXJ0OngsbGluZUVuZDpTLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe24ucG9seWdvblN0YXJ0KCksXy5saW5lU3RhcnQ9Q30scG9seWdvbkVuZDpmdW5jdGlvbigpe24ucG9seWdvbkVuZCgpLF8ubGluZVN0YXJ0PXh9fTtmdW5jdGlvbiB5KE8sRCl7Tz1lKE8sRCksbi5wb2ludChPWzBdLE9bMV0pfWZ1bmN0aW9uIHgoKXtoPU5hTixfLnBvaW50PWIsbi5saW5lU3RhcnQoKX1mdW5jdGlvbiBiKE8sRCl7dmFyIEI9b2MoW08sRF0pLEk9ZShPLEQpO3IoaCxmLHUscCxkLGcsaD1JWzBdLGY9SVsxXSx1PU8scD1CWzBdLGQ9QlsxXSxnPUJbMl0sU2J0LG4pLG4ucG9pbnQoaCxmKX1mdW5jdGlvbiBTKCl7Xy5wb2ludD15LG4ubGluZUVuZCgpfWZ1bmN0aW9uIEMoKXt4KCksXy5wb2ludD1QLF8ubGluZUVuZD1rfWZ1bmN0aW9uIFAoTyxEKXtiKGk9TyxEKSxvPWgsYT1mLHM9cCxsPWQsYz1nLF8ucG9pbnQ9Yn1mdW5jdGlvbiBrKCl7cihoLGYsdSxwLGQsZyxvLGEsaSxzLGwsYyxTYnQsbiksXy5saW5lRW5kPVMsUygpfXJldHVybiBffX12YXIgRDNlPSRtKHtwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUqX2UsdCpfZSl9fSk7ZnVuY3Rpb24gTzNlKGUpe3JldHVybiAkbSh7cG9pbnQ6ZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQscik7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KG5bMF0sblsxXSl9fSl9ZnVuY3Rpb24gejNlKGUsdCxyLG4saSl7ZnVuY3Rpb24gbyhhLHMpe3JldHVybiBhKj1uLHMqPWksW3QrZSphLHItZSpzXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oYSxzKXtyZXR1cm5bKGEtdCkvZSpuLChyLXMpL2UqaV19LG99ZnVuY3Rpb24gTWJ0KGUsdCxyLG4saSxvKXt2YXIgYT1adChvKSxzPVh0KG8pLGw9YSplLGM9cyplLHU9YS9lLGg9cy9lLGY9KHMqci1hKnQpL2UscD0ocyp0K2EqcikvZTtmdW5jdGlvbiBkKGcsXyl7cmV0dXJuIGcqPW4sXyo9aSxbbCpnLWMqXyt0LHItYypnLWwqX119cmV0dXJuIGQuaW52ZXJ0PWZ1bmN0aW9uKGcsXyl7cmV0dXJuW24qKHUqZy1oKl8rZiksaSoocC1oKmctdSpfKV19LGR9ZnVuY3Rpb24gTWkoZSl7cmV0dXJuIHM1KGZ1bmN0aW9uKCl7cmV0dXJuIGV9KSgpfWZ1bmN0aW9uIHM1KGUpe3ZhciB0LHI9MTUwLG49NDgwLGk9MjUwLG89MCxhPTAscz0wLGw9MCxjPTAsdSxoPTAsZj0xLHA9MSxkPW51bGwsZz10NSxfPW51bGwseSx4LGIsUz1qbSxDPS41LFAsayxPLEQsQjtmdW5jdGlvbiBJKHope3JldHVybiBPKHpbMF0qX2UselsxXSpfZSl9ZnVuY3Rpb24gTCh6KXtyZXR1cm4gej1PLmludmVydCh6WzBdLHpbMV0pLHomJlt6WzBdKnZyLHpbMV0qdnJdfUkuc3RyZWFtPWZ1bmN0aW9uKHope3JldHVybiBEJiZCPT09ej9EOkQ9RDNlKE8zZSh1KShnKFAoUyhCPXopKSkpKX0sSS5wcmVjbGlwPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPXosZD12b2lkIDAsRigpKTpnfSxJLnBvc3RjbGlwPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPXosXz15PXg9Yj1udWxsLEYoKSk6U30sSS5jbGlwQW5nbGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3o/Q2soZD16Kl9lKTooZD1udWxsLHQ1KSxGKCkpOmQqdnJ9LEkuY2xpcEV4dGVudD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz16PT1udWxsPyhfPXk9eD1iPW51bGwsam0pOkRwKF89K3pbMF1bMF0seT0relswXVsxXSx4PSt6WzFdWzBdLGI9K3pbMV1bMV0pLEYoKSk6Xz09bnVsbD9udWxsOltbXyx5XSxbeCxiXV19LEkuc2NhbGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3osUigpKTpyfSxJLnRyYW5zbGF0ZT1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0relswXSxpPSt6WzFdLFIoKSk6W24saV19LEkuY2VudGVyPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXpbMF0lMzYwKl9lLGE9elsxXSUzNjAqX2UsUigpKTpbbyp2cixhKnZyXX0sSS5yb3RhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9elswXSUzNjAqX2UsbD16WzFdJTM2MCpfZSxjPXoubGVuZ3RoPjI/elsyXSUzNjAqX2U6MCxSKCkpOltzKnZyLGwqdnIsYyp2cl19LEkuYW5nbGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9eiUzNjAqX2UsUigpKTpoKnZyfSxJLnJlZmxlY3RYPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXo/LTE6MSxSKCkpOmY8MH0sSS5yZWZsZWN0WT1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD16Py0xOjEsUigpKTpwPDB9LEkucHJlY2lzaW9uPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhQPVdqKGssQz16KnopLEYoKSk6eHIoQyl9LEkuZml0RXh0ZW50PWZ1bmN0aW9uKHosVSl7cmV0dXJuIEdfKEkseixVKX0sSS5maXRTaXplPWZ1bmN0aW9uKHosVSl7cmV0dXJuIEZiKEkseixVKX0sSS5maXRXaWR0aD1mdW5jdGlvbih6LFUpe3JldHVybiBCYihJLHosVSl9LEkuZml0SGVpZ2h0PWZ1bmN0aW9uKHosVSl7cmV0dXJuIEhiKEkseixVKX07ZnVuY3Rpb24gUigpe3ZhciB6PU1idChyLDAsMCxmLHAsaCkuYXBwbHkobnVsbCx0KG8sYSkpLFU9KGg/TWJ0OnozZSkocixuLXpbMF0saS16WzFdLGYscCxoKTtyZXR1cm4gdT1RRShzLGwsYyksaz1KRSh0LFUpLE89SkUodSxrKSxQPVdqKGssQyksRigpfWZ1bmN0aW9uIEYoKXtyZXR1cm4gRD1CPW51bGwsSX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxJLmludmVydD10LmludmVydCYmTCxSKCl9fWZ1bmN0aW9uIFZiKGUpe3ZhciB0PTAscj1CZS8zLG49czUoZSksaT1uKHQscik7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24odD1vWzBdKl9lLHI9b1sxXSpfZSk6W3QqdnIscip2cl19LGl9ZnVuY3Rpb24gRWJ0KGUpe3ZhciB0PVp0KGUpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm5bbip0LFh0KGkpL3RdfXJldHVybiByLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybltuL3Qsd24oaSp0KV19LHJ9ZnVuY3Rpb24gWWooZSx0KXt2YXIgcj1YdChlKSxuPShyK1h0KHQpKS8yO2lmKFJlKG4pPGxlKXJldHVybiBFYnQoZSk7dmFyIGk9MStyKigyKm4tciksbz14cihpKS9uO2Z1bmN0aW9uIGEocyxsKXt2YXIgYz14cihpLTIqbipYdChsKSkvbjtyZXR1cm5bYypYdChzKj1uKSxvLWMqWnQocyldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihzLGwpe3ZhciBjPW8tbCx1PWJuKHMsUmUoYykpKmNhKGMpO3JldHVybiBjKm48MCYmKHUtPUJlKmNhKHMpKmNhKGMpKSxbdS9uLHduKChpLShzKnMrYypjKSpuKm4pLygyKm4pKV19LGF9ZnVuY3Rpb24gV18oKXtyZXR1cm4gVmIoWWopLnNjYWxlKDE1NS40MjQpLmNlbnRlcihbMCwzMy42NDQyXSl9ZnVuY3Rpb24gVmsoKXtyZXR1cm4gV18oKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApLnRyYW5zbGF0ZShbNDgwLDI1MF0pLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKX1mdW5jdGlvbiBGM2UoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPS0xOysraTx0OyllW2ldLnBvaW50KHIsbil9LHNwaGVyZTpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciByPS0xOysrcjx0OyllW3JdLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciByPS0xOysrcjx0OyllW3JdLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciByPS0xOysrcjx0OyllW3JdLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciByPS0xOysrcjx0OyllW3JdLnBvbHlnb25FbmQoKX19fWZ1bmN0aW9uIFRidCgpe3ZhciBlLHQscj1WaygpLG4saT1XXygpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksbyxhPVdfKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLHMsbCxjPXtwb2ludDpmdW5jdGlvbihmLHApe2w9W2YscF19fTtmdW5jdGlvbiB1KGYpe3ZhciBwPWZbMF0sZD1mWzFdO3JldHVybiBsPW51bGwsbi5wb2ludChwLGQpLGx8fChvLnBvaW50KHAsZCksbCl8fChzLnBvaW50KHAsZCksbCl9dS5pbnZlcnQ9ZnVuY3Rpb24oZil7dmFyIHA9ci5zY2FsZSgpLGQ9ci50cmFuc2xhdGUoKSxnPShmWzBdLWRbMF0pL3AsXz0oZlsxXS1kWzFdKS9wO3JldHVybihfPj0uMTImJl88LjIzNCYmZz49LS40MjUmJmc8LS4yMTQ/aTpfPj0uMTY2JiZfPC4yMzQmJmc+PS0uMjE0JiZnPC0uMTE1P2E6cikuaW52ZXJ0KGYpfSx1LnN0cmVhbT1mdW5jdGlvbihmKXtyZXR1cm4gZSYmdD09PWY/ZTplPUYzZShbci5zdHJlYW0odD1mKSxpLnN0cmVhbShmKSxhLnN0cmVhbShmKV0pfSx1LnByZWNpc2lvbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5wcmVjaXNpb24oZiksaS5wcmVjaXNpb24oZiksYS5wcmVjaXNpb24oZiksaCgpKTpyLnByZWNpc2lvbigpfSx1LnNjYWxlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyLnNjYWxlKGYpLGkuc2NhbGUoZiouMzUpLGEuc2NhbGUoZiksdS50cmFuc2xhdGUoci50cmFuc2xhdGUoKSkpOnIuc2NhbGUoKX0sdS50cmFuc2xhdGU9ZnVuY3Rpb24oZil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHIudHJhbnNsYXRlKCk7dmFyIHA9ci5zY2FsZSgpLGQ9K2ZbMF0sZz0rZlsxXTtyZXR1cm4gbj1yLnRyYW5zbGF0ZShmKS5jbGlwRXh0ZW50KFtbZC0uNDU1KnAsZy0uMjM4KnBdLFtkKy40NTUqcCxnKy4yMzgqcF1dKS5zdHJlYW0oYyksbz1pLnRyYW5zbGF0ZShbZC0uMzA3KnAsZysuMjAxKnBdKS5jbGlwRXh0ZW50KFtbZC0uNDI1KnArbGUsZysuMTIqcCtsZV0sW2QtLjIxNCpwLWxlLGcrLjIzNCpwLWxlXV0pLnN0cmVhbShjKSxzPWEudHJhbnNsYXRlKFtkLS4yMDUqcCxnKy4yMTIqcF0pLmNsaXBFeHRlbnQoW1tkLS4yMTQqcCtsZSxnKy4xNjYqcCtsZV0sW2QtLjExNSpwLWxlLGcrLjIzNCpwLWxlXV0pLnN0cmVhbShjKSxoKCl9LHUuZml0RXh0ZW50PWZ1bmN0aW9uKGYscCl7cmV0dXJuIEdfKHUsZixwKX0sdS5maXRTaXplPWZ1bmN0aW9uKGYscCl7cmV0dXJuIEZiKHUsZixwKX0sdS5maXRXaWR0aD1mdW5jdGlvbihmLHApe3JldHVybiBCYih1LGYscCl9LHUuZml0SGVpZ2h0PWZ1bmN0aW9uKGYscCl7cmV0dXJuIEhiKHUsZixwKX07ZnVuY3Rpb24gaCgpe3JldHVybiBlPXQ9bnVsbCx1fXJldHVybiB1LnNjYWxlKDEwNzApfWZ1bmN0aW9uIFVrKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPVp0KHQpLGk9WnQociksbz1lKG4qaSk7cmV0dXJuW28qaSpYdCh0KSxvKlh0KHIpXX19ZnVuY3Rpb24gVmgoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49eHIodCp0K3IqciksaT1lKG4pLG89WHQoaSksYT1adChpKTtyZXR1cm5bYm4odCpvLG4qYSksd24obiYmcipvL24pXX19dmFyIHFrPVVrKGZ1bmN0aW9uKGUpe3JldHVybiB4cigyLygxK2UpKX0pO3FrLmludmVydD1WaChmdW5jdGlvbihlKXtyZXR1cm4gMip3bihlLzIpfSk7ZnVuY3Rpb24gQ2J0KCl7cmV0dXJuIE1pKHFrKS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxODAtLjAwMSl9dmFyIEdrPVVrKGZ1bmN0aW9uKGUpe3JldHVybihlPXVrKGUpKSYmZS9YdChlKX0pO0drLmludmVydD1WaChmdW5jdGlvbihlKXtyZXR1cm4gZX0pO2Z1bmN0aW9uIEFidCgpe3JldHVybiBNaShHaykuc2NhbGUoNzkuNDE4OCkuY2xpcEFuZ2xlKDE4MC0uMDAxKX1mdW5jdGlvbiBZXyhlLHQpe3JldHVybltlLEZfKEliKChtbit0KS8yKSldfVlfLmludmVydD1mdW5jdGlvbihlLHQpe3JldHVybltlLDIqaWMobGsodCkpLW1uXX07ZnVuY3Rpb24gUGJ0KCl7cmV0dXJuIGpqKFlfKS5zY2FsZSg5NjEvU2kpfWZ1bmN0aW9uIGpqKGUpe3ZhciB0PU1pKGUpLHI9dC5jZW50ZXIsbj10LnNjYWxlLGk9dC50cmFuc2xhdGUsbz10LmNsaXBFeHRlbnQsYT1udWxsLHMsbCxjO3Quc2NhbGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4oaCksdSgpKTpuKCl9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKGgpLHUoKSk6aSgpfSx0LmNlbnRlcj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocihoKSx1KCkpOnIoKX0sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPT1udWxsP2E9cz1sPWM9bnVsbDooYT0raFswXVswXSxzPStoWzBdWzFdLGw9K2hbMV1bMF0sYz0raFsxXVsxXSksdSgpKTphPT1udWxsP251bGw6W1thLHNdLFtsLGNdXX07ZnVuY3Rpb24gdSgpe3ZhciBoPUJlKm4oKSxmPXQoYmsodC5yb3RhdGUoKSkuaW52ZXJ0KFswLDBdKSk7cmV0dXJuIG8oYT09bnVsbD9bW2ZbMF0taCxmWzFdLWhdLFtmWzBdK2gsZlsxXStoXV06ZT09PVlfP1tbTWF0aC5tYXgoZlswXS1oLGEpLHNdLFtNYXRoLm1pbihmWzBdK2gsbCksY11dOltbYSxNYXRoLm1heChmWzFdLWgscyldLFtsLE1hdGgubWluKGZbMV0raCxjKV1dKX1yZXR1cm4gdSgpfWZ1bmN0aW9uIFdrKGUpe3JldHVybiBJYigobW4rZSkvMil9ZnVuY3Rpb24gWGooZSx0KXt2YXIgcj1adChlKSxuPWU9PT10P1h0KGUpOkZfKHIvWnQodCkpL0ZfKFdrKHQpL1drKGUpKSxpPXIqY2soV2soZSksbikvbjtpZighbilyZXR1cm4gWV87ZnVuY3Rpb24gbyhhLHMpe2k+MD9zPC1tbitsZSYmKHM9LW1uK2xlKTpzPm1uLWxlJiYocz1tbi1sZSk7dmFyIGw9aS9jayhXayhzKSxuKTtyZXR1cm5bbCpYdChuKmEpLGktbCpadChuKmEpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oYSxzKXt2YXIgbD1pLXMsYz1jYShuKSp4cihhKmErbCpsKSx1PWJuKGEsUmUobCkpKmNhKGwpO3JldHVybiBsKm48MCYmKHUtPUJlKmNhKGEpKmNhKGwpKSxbdS9uLDIqaWMoY2soaS9jLDEvbikpLW1uXX0sb31mdW5jdGlvbiBJYnQoKXtyZXR1cm4gVmIoWGopLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9ZnVuY3Rpb24gal8oZSx0KXtyZXR1cm5bZSx0XX1qXy5pbnZlcnQ9al87ZnVuY3Rpb24gTGJ0KCl7cmV0dXJuIE1pKGpfKS5zY2FsZSgxNTIuNjMpfWZ1bmN0aW9uICRqKGUsdCl7dmFyIHI9WnQoZSksbj1lPT09dD9YdChlKTooci1adCh0KSkvKHQtZSksaT1yL24rZTtpZihSZShuKTxsZSlyZXR1cm4gal87ZnVuY3Rpb24gbyhhLHMpe3ZhciBsPWktcyxjPW4qYTtyZXR1cm5bbCpYdChjKSxpLWwqWnQoYyldfXJldHVybiBvLmludmVydD1mdW5jdGlvbihhLHMpe3ZhciBsPWktcyxjPWJuKGEsUmUobCkpKmNhKGwpO3JldHVybiBsKm48MCYmKGMtPUJlKmNhKGEpKmNhKGwpKSxbYy9uLGktY2EobikqeHIoYSphK2wqbCldfSxvfWZ1bmN0aW9uIGtidCgpe3JldHVybiBWYigkaikuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX12YXIgbDU9MS4zNDAyNjQsYzU9LS4wODExMDYsdTU9ODkzZS02LGg1PS4wMDM3OTYsWWs9eHIoMykvMixCM2U9MTI7ZnVuY3Rpb24gamsoZSx0KXt2YXIgcj13bihZaypYdCh0KSksbj1yKnIsaT1uKm4qbjtyZXR1cm5bZSpadChyKS8oWWsqKGw1KzMqYzUqbitpKig3KnU1KzkqaDUqbikpKSxyKihsNStjNSpuK2kqKHU1K2g1Km4pKV19amsuaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQsbj1yKnIsaT1uKm4qbixvPTAsYSxzLGw7bzxCM2UmJihzPXIqKGw1K2M1Km4raSoodTUraDUqbikpLXQsbD1sNSszKmM1Km4raSooNyp1NSs5Kmg1Km4pLHItPWE9cy9sLG49cipyLGk9bipuKm4sIShSZShhKTx6XykpOysrbyk7cmV0dXJuW1lrKmUqKGw1KzMqYzUqbitpKig3KnU1KzkqaDUqbikpL1p0KHIpLHduKFh0KHIpL1lrKV19O2Z1bmN0aW9uIFJidCgpe3JldHVybiBNaShqaykuc2NhbGUoMTc3LjE1OCl9ZnVuY3Rpb24gWGsoZSx0KXt2YXIgcj1adCh0KSxuPVp0KGUpKnI7cmV0dXJuW3IqWHQoZSkvbixYdCh0KS9uXX1Yay5pbnZlcnQ9VmgoaWMpO2Z1bmN0aW9uIE5idCgpe3JldHVybiBNaShYaykuc2NhbGUoMTQ0LjA0OSkuY2xpcEFuZ2xlKDYwKX1mdW5jdGlvbiBEYnQoKXt2YXIgZT0xLHQ9MCxyPTAsbj0xLGk9MSxvPTAsYSxzLGw9bnVsbCxjLHUsaCxmPTEscD0xLGQ9JG0oe3BvaW50OmZ1bmN0aW9uKFMsQyl7dmFyIFA9YihbUyxDXSk7dGhpcy5zdHJlYW0ucG9pbnQoUFswXSxQWzFdKX19KSxnPWptLF8seTtmdW5jdGlvbiB4KCl7cmV0dXJuIGY9ZSpuLHA9ZSppLF89eT1udWxsLGJ9ZnVuY3Rpb24gYihTKXt2YXIgQz1TWzBdKmYsUD1TWzFdKnA7aWYobyl7dmFyIGs9UCphLUMqcztDPUMqYStQKnMsUD1rfXJldHVybltDK3QsUCtyXX1yZXR1cm4gYi5pbnZlcnQ9ZnVuY3Rpb24oUyl7dmFyIEM9U1swXS10LFA9U1sxXS1yO2lmKG8pe3ZhciBrPVAqYStDKnM7Qz1DKmEtUCpzLFA9a31yZXR1cm5bQy9mLFAvcF19LGIuc3RyZWFtPWZ1bmN0aW9uKFMpe3JldHVybiBfJiZ5PT09Uz9fOl89ZChnKHk9UykpfSxiLnBvc3RjbGlwPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPVMsbD1jPXU9aD1udWxsLHgoKSk6Z30sYi5jbGlwRXh0ZW50PWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPVM9PW51bGw/KGw9Yz11PWg9bnVsbCxqbSk6RHAobD0rU1swXVswXSxjPStTWzBdWzFdLHU9K1NbMV1bMF0saD0rU1sxXVsxXSkseCgpKTpsPT1udWxsP251bGw6W1tsLGNdLFt1LGhdXX0sYi5zY2FsZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rUyx4KCkpOmV9LGIudHJhbnNsYXRlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStTWzBdLHI9K1NbMV0seCgpKTpbdCxyXX0sYi5hbmdsZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1TJTM2MCpfZSxzPVh0KG8pLGE9WnQobykseCgpKTpvKnZyfSxiLnJlZmxlY3RYPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVM/LTE6MSx4KCkpOm48MH0sYi5yZWZsZWN0WT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1TPy0xOjEseCgpKTppPDB9LGIuZml0RXh0ZW50PWZ1bmN0aW9uKFMsQyl7cmV0dXJuIEdfKGIsUyxDKX0sYi5maXRTaXplPWZ1bmN0aW9uKFMsQyl7cmV0dXJuIEZiKGIsUyxDKX0sYi5maXRXaWR0aD1mdW5jdGlvbihTLEMpe3JldHVybiBCYihiLFMsQyl9LGIuZml0SGVpZ2h0PWZ1bmN0aW9uKFMsQyl7cmV0dXJuIEhiKGIsUyxDKX0sYn1mdW5jdGlvbiAkayhlLHQpe3ZhciByPXQqdCxuPXIqcjtyZXR1cm5bZSooLjg3MDctLjEzMTk3OSpyK24qKC0uMDEzNzkxK24qKC4wMDM5NzEqci0uMDAxNTI5Km4pKSksdCooMS4wMDcyMjYrciooLjAxNTA4NStuKigtLjA0NDQ3NSsuMDI4ODc0KnItLjAwNTkxNipuKSkpXX0kay5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LG49MjUsaTtkb3t2YXIgbz1yKnIsYT1vKm87ci09aT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKigtLjA0NDQ3NSsuMDI4ODc0Km8tLjAwNTkxNiphKSkpLXQpLygxLjAwNzIyNitvKiguMDE1MDg1KjMrYSooLS4wNDQ0NzUqNysuMDI4ODc0Kjkqby0uMDA1OTE2KjExKmEpKSl9d2hpbGUoUmUoaSk+bGUmJi0tbj4wKTtyZXR1cm5bZS8oLjg3MDcrKG89cipyKSooLS4xMzE5NzkrbyooLS4wMTM3OTErbypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKSkpKSxyXX07ZnVuY3Rpb24gT2J0KCl7cmV0dXJuIE1pKCRrKS5zY2FsZSgxNzUuMjk1KX1mdW5jdGlvbiBLayhlLHQpe3JldHVybltadCh0KSpYdChlKSxYdCh0KV19S2suaW52ZXJ0PVZoKHduKTtmdW5jdGlvbiB6YnQoKXtyZXR1cm4gTWkoS2spLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTArbGUpfWZ1bmN0aW9uIFprKGUsdCl7dmFyIHI9WnQodCksbj0xK1p0KGUpKnI7cmV0dXJuW3IqWHQoZSkvbixYdCh0KS9uXX1aay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIDIqaWMoZSl9KTtmdW5jdGlvbiBGYnQoKXtyZXR1cm4gTWkoWmspLnNjYWxlKDI1MCkuY2xpcEFuZ2xlKDE0Mil9ZnVuY3Rpb24gSmsoZSx0KXtyZXR1cm5bRl8oSWIoKG1uK3QpLzIpKSwtZV19SmsuaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuWy10LDIqaWMobGsoZSkpLW1uXX07ZnVuY3Rpb24gQmJ0KCl7dmFyIGU9amooSmspLHQ9ZS5jZW50ZXIscj1lLnJvdGF0ZTtyZXR1cm4gZS5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChbLW5bMV0sblswXV0pOihuPXQoKSxbblsxXSwtblswXV0pfSxlLnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKFtuWzBdLG5bMV0sbi5sZW5ndGg+Mj9uWzJdKzkwOjkwXSk6KG49cigpLFtuWzBdLG5bMV0sblsyXS05MF0pfSxyKFswLDAsOTBdKS5zY2FsZSgxNTkuMTU1KX1mdW5jdGlvbiBIM2UoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gVjNlKGUpe3JldHVybiBlLnJlZHVjZShVM2UsMCkvZS5sZW5ndGh9ZnVuY3Rpb24gVTNlKGUsdCl7cmV0dXJuIGUrdC54fWZ1bmN0aW9uIHEzZShlKXtyZXR1cm4gMStlLnJlZHVjZShHM2UsMCl9ZnVuY3Rpb24gRzNlKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsdC55KX1mdW5jdGlvbiBXM2UoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10WzBdO3JldHVybiBlfWZ1bmN0aW9uIFkzZShlKXtmb3IodmFyIHQ7dD1lLmNoaWxkcmVuOyllPXRbdC5sZW5ndGgtMV07cmV0dXJuIGV9ZnVuY3Rpb24gSGJ0KCl7dmFyIGU9SDNlLHQ9MSxyPTEsbj0hMTtmdW5jdGlvbiBpKG8pe3ZhciBhLHM9MDtvLmVhY2hBZnRlcihmdW5jdGlvbihmKXt2YXIgcD1mLmNoaWxkcmVuO3A/KGYueD1WM2UocCksZi55PXEzZShwKSk6KGYueD1hP3MrPWUoZixhKTowLGYueT0wLGE9Zil9KTt2YXIgbD1XM2UobyksYz1ZM2UobyksdT1sLngtZShsLGMpLzIsaD1jLngrZShjLGwpLzI7cmV0dXJuIG8uZWFjaEFmdGVyKG4/ZnVuY3Rpb24oZil7Zi54PShmLngtby54KSp0LGYueT0oby55LWYueSkqcn06ZnVuY3Rpb24oZil7Zi54PShmLngtdSkvKGgtdSkqdCxmLnk9KDEtKG8ueT9mLnkvby55OjEpKSpyfSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuc2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSx0PStvWzBdLHI9K29bMV0saSk6bj9udWxsOlt0LHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLHQ9K29bMF0scj0rb1sxXSxpKTpuP1t0LHJdOm51bGx9LGl9ZnVuY3Rpb24gajNlKGUpe3ZhciB0PTAscj1lLmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYoIW4pdD0xO2Vsc2UgZm9yKDstLW4+PTA7KXQrPXJbbl0udmFsdWU7ZS52YWx1ZT10fWZ1bmN0aW9uIFZidCgpe3JldHVybiB0aGlzLmVhY2hBZnRlcihqM2UpfWZ1bmN0aW9uIFVidChlKXt2YXIgdD10aGlzLHIsbj1bdF0saSxvLGE7ZG8gZm9yKHI9bi5yZXZlcnNlKCksbj1bXTt0PXIucG9wKCk7KWlmKGUodCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pbi5wdXNoKGlbb10pO3doaWxlKG4ubGVuZ3RoKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBxYnQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbixpO3Q9ci5wb3AoKTspaWYoZSh0KSxuPXQuY2hpbGRyZW4sbilmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXIucHVzaChuW2ldKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBHYnQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbj1bXSxpLG8sYTt0PXIucG9wKCk7KWlmKG4ucHVzaCh0KSxpPXQuY2hpbGRyZW4saSlmb3Iobz0wLGE9aS5sZW5ndGg7bzxhOysrbylyLnB1c2goaVtvXSk7Zm9yKDt0PW4ucG9wKCk7KWUodCk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gV2J0KGUpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9K2UodC5kYXRhKXx8MCxuPXQuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7dC52YWx1ZT1yfSl9ZnVuY3Rpb24gWWJ0KGUpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb3J0KGUpfSl9ZnVuY3Rpb24gamJ0KGUpe2Zvcih2YXIgdD10aGlzLHI9WDNlKHQsZSksbj1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsbi5wdXNoKHQpO2Zvcih2YXIgaT1uLmxlbmd0aDtlIT09cjspbi5zcGxpY2UoaSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gWDNlKGUsdCl7aWYoZT09PXQpcmV0dXJuIGU7dmFyIHI9ZS5hbmNlc3RvcnMoKSxuPXQuYW5jZXN0b3JzKCksaT1udWxsO2ZvcihlPXIucG9wKCksdD1uLnBvcCgpO2U9PT10OylpPWUsZT1yLnBvcCgpLHQ9bi5wb3AoKTtyZXR1cm4gaX1mdW5jdGlvbiBYYnQoKXtmb3IodmFyIGU9dGhpcyx0PVtlXTtlPWUucGFyZW50Oyl0LnB1c2goZSk7cmV0dXJuIHR9ZnVuY3Rpb24gJGJ0KCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfWZ1bmN0aW9uIEtidCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8ZS5wdXNoKHQpfSksZX1mdW5jdGlvbiBaYnQoKXt2YXIgZT10aGlzLHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihyKXtyIT09ZSYmdC5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLHR9ZnVuY3Rpb24gZjUoZSx0KXt2YXIgcj1uZXcgS20oZSksbj0rZS52YWx1ZSYmKHIudmFsdWU9ZS52YWx1ZSksaSxvPVtyXSxhLHMsbCxjO2Zvcih0PT1udWxsJiYodD1LM2UpO2k9by5wb3AoKTspaWYobiYmKGkudmFsdWU9K2kuZGF0YS52YWx1ZSksKHM9dChpLmRhdGEpKSYmKGM9cy5sZW5ndGgpKWZvcihpLmNoaWxkcmVuPW5ldyBBcnJheShjKSxsPWMtMTtsPj0wOy0tbClvLnB1c2goYT1pLmNoaWxkcmVuW2xdPW5ldyBLbShzW2xdKSksYS5wYXJlbnQ9aSxhLmRlcHRoPWkuZGVwdGgrMTtyZXR1cm4gci5lYWNoQmVmb3JlKEtqKX1mdW5jdGlvbiAkM2UoKXtyZXR1cm4gZjUodGhpcykuZWFjaEJlZm9yZShaM2UpfWZ1bmN0aW9uIEszZShlKXtyZXR1cm4gZS5jaGlsZHJlbn1mdW5jdGlvbiBaM2UoZSl7ZS5kYXRhPWUuZGF0YS5kYXRhfWZ1bmN0aW9uIEtqKGUpe3ZhciB0PTA7ZG8gZS5oZWlnaHQ9dDt3aGlsZSgoZT1lLnBhcmVudCkmJmUuaGVpZ2h0PCsrdCl9ZnVuY3Rpb24gS20oZSl7dGhpcy5kYXRhPWUsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9S20ucHJvdG90eXBlPWY1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6S20sY291bnQ6VmJ0LGVhY2g6VWJ0LGVhY2hBZnRlcjpHYnQsZWFjaEJlZm9yZTpxYnQsc3VtOldidCxzb3J0OllidCxwYXRoOmpidCxhbmNlc3RvcnM6WGJ0LGRlc2NlbmRhbnRzOiRidCxsZWF2ZXM6S2J0LGxpbmtzOlpidCxjb3B5OiQzZX07dmFyIEpidD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gUWJ0KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyLG47dDspbj1NYXRoLnJhbmRvbSgpKnQtLXwwLHI9ZVt0XSxlW3RdPWVbbl0sZVtuXT1yO3JldHVybiBlfWZ1bmN0aW9uIHQ4KGUpe2Zvcih2YXIgdD0wLHI9KGU9UWJ0KEpidC5jYWxsKGUpKSkubGVuZ3RoLG49W10saSxvO3Q8cjspaT1lW3RdLG8mJnQydChvLGkpPysrdDoobz1RM2Uobj1KM2UobixpKSksdD0wKTtyZXR1cm4gb31mdW5jdGlvbiBKM2UoZSx0KXt2YXIgcixuO2lmKFpqKHQsZSkpcmV0dXJuW3RdO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3IpaWYoUWsodCxlW3JdKSYmWmoocDUoZVtyXSx0KSxlKSlyZXR1cm5bZVtyXSx0XTtmb3Iocj0wO3I8ZS5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248ZS5sZW5ndGg7KytuKWlmKFFrKHA1KGVbcl0sZVtuXSksdCkmJlFrKHA1KGVbcl0sdCksZVtuXSkmJlFrKHA1KGVbbl0sdCksZVtyXSkmJlpqKGUydChlW3JdLGVbbl0sdCksZSkpcmV0dXJuW2Vbcl0sZVtuXSx0XTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gUWsoZSx0KXt2YXIgcj1lLnItdC5yLG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gdDJ0KGUsdCl7dmFyIHI9ZS5yLXQucisxZS02LG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gWmooZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZighdDJ0KGUsdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gUTNlKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVybiB0TWUoZVswXSk7Y2FzZSAyOnJldHVybiBwNShlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gZTJ0KGVbMF0sZVsxXSxlWzJdKX19ZnVuY3Rpb24gdE1lKGUpe3JldHVybnt4OmUueCx5OmUueSxyOmUucn19ZnVuY3Rpb24gcDUoZSx0KXt2YXIgcj1lLngsbj1lLnksaT1lLnIsbz10LngsYT10Lnkscz10LnIsbD1vLXIsYz1hLW4sdT1zLWksaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrbytsL2gqdSkvMix5OihuK2ErYy9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIGUydChlLHQscil7dmFyIG49ZS54LGk9ZS55LG89ZS5yLGE9dC54LHM9dC55LGw9dC5yLGM9ci54LHU9ci55LGg9ci5yLGY9bi1hLHA9bi1jLGQ9aS1zLGc9aS11LF89bC1vLHk9aC1vLHg9bipuK2kqaS1vKm8sYj14LWEqYS1zKnMrbCpsLFM9eC1jKmMtdSp1K2gqaCxDPXAqZC1mKmcsUD0oZCpTLWcqYikvKEMqMiktbixrPShnKl8tZCp5KS9DLE89KHAqYi1mKlMpLyhDKjIpLWksRD0oZip5LXAqXykvQyxCPWsqaytEKkQtMSxJPTIqKG8rUCprK08qRCksTD1QKlArTypPLW8qbyxSPS0oQj8oSStNYXRoLnNxcnQoSSpJLTQqQipMKSkvKDIqQik6TC9JKTtyZXR1cm57eDpuK1AraypSLHk6aStPK0QqUixyOlJ9fWZ1bmN0aW9uIHIydChlLHQscil7dmFyIG49ZS54LXQueCxpLG8sYT1lLnktdC55LHMsbCxjPW4qbithKmE7Yz8obz10LnIrci5yLG8qPW8sbD1lLnIrci5yLGwqPWwsbz5sPyhpPShjK2wtbykvKDIqYykscz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxsL2MtaSppKSksci54PWUueC1pKm4tcyphLHIueT1lLnktaSphK3Mqbik6KGk9KGMrby1sKS8oMipjKSxzPU1hdGguc3FydChNYXRoLm1heCgwLG8vYy1pKmkpKSxyLng9dC54K2kqbi1zKmEsci55PXQueStpKmErcypuKSk6KHIueD10Lngrci5yLHIueT10LnkpfWZ1bmN0aW9uIG4ydChlLHQpe3ZhciByPWUucit0LnItMWUtNixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIGkydChlKXt2YXIgdD1lLl8scj1lLm5leHQuXyxuPXQucityLnIsaT0odC54KnIucityLngqdC5yKS9uLG89KHQueSpyLnIrci55KnQucikvbjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiBlOChlKXt0aGlzLl89ZSx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gSmooZSl7aWYoIShpPWUubGVuZ3RoKSlyZXR1cm4gMDt2YXIgdCxyLG4saSxvLGEscyxsLGMsdSxoO2lmKHQ9ZVswXSx0Lng9MCx0Lnk9MCwhKGk+MSkpcmV0dXJuIHQucjtpZihyPWVbMV0sdC54PS1yLnIsci54PXQucixyLnk9MCwhKGk+MikpcmV0dXJuIHQucityLnI7cjJ0KHIsdCxuPWVbMl0pLHQ9bmV3IGU4KHQpLHI9bmV3IGU4KHIpLG49bmV3IGU4KG4pLHQubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PXQucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz10O3Q6Zm9yKHM9MztzPGk7KytzKXtyMnQodC5fLHIuXyxuPWVbc10pLG49bmV3IGU4KG4pLGw9ci5uZXh0LGM9dC5wcmV2aW91cyx1PXIuXy5yLGg9dC5fLnI7ZG8gaWYodTw9aCl7aWYobjJ0KGwuXyxuLl8pKXtyPWwsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYobjJ0KGMuXyxuLl8pKXt0PWMsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c313aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz10LG4ubmV4dD1yLHQubmV4dD1yLnByZXZpb3VzPXI9bixvPWkydCh0KTsobj1uLm5leHQpIT09cjspKGE9aTJ0KG4pKTxvJiYodD1uLG89YSk7cj10Lm5leHR9Zm9yKHQ9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyl0LnB1c2gobi5fKTtmb3Iobj10OCh0KSxzPTA7czxpOysrcyl0PWVbc10sdC54LT1uLngsdC55LT1uLnk7cmV0dXJuIG4ucn1mdW5jdGlvbiBvMnQoZSl7cmV0dXJuIEpqKGUpLGV9ZnVuY3Rpb24gYTJ0KGUpe3JldHVybiBlPT1udWxsP251bGw6VWIoZSl9ZnVuY3Rpb24gVWIoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBlfWZ1bmN0aW9uIE9wKCl7cmV0dXJuIDB9ZnVuY3Rpb24gWm0oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGVNZShlKXtyZXR1cm4gTWF0aC5zcXJ0KGUudmFsdWUpfWZ1bmN0aW9uIGMydCgpe3ZhciBlPW51bGwsdD0xLHI9MSxuPU9wO2Z1bmN0aW9uIGkobyl7cmV0dXJuIG8ueD10LzIsby55PXIvMixlP28uZWFjaEJlZm9yZShzMnQoZSkpLmVhY2hBZnRlcihRaihuLC41KSkuZWFjaEJlZm9yZShsMnQoMSkpOm8uZWFjaEJlZm9yZShzMnQoZU1lKSkuZWFjaEFmdGVyKFFqKE9wLDEpKS5lYWNoQWZ0ZXIoUWoobixvLnIvTWF0aC5taW4odCxyKSkpLmVhY2hCZWZvcmUobDJ0KE1hdGgubWluKHQscikvKDIqby5yKSkpLG99cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWEydChvKSxpKTplfSxpLnNpemU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K29bMF0scj0rb1sxXSxpKTpbdCxyXX0saS5wYWRkaW5nPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBvPT0iZnVuY3Rpb24iP286Wm0oK28pLGkpOm59LGl9ZnVuY3Rpb24gczJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXt0LmNoaWxkcmVufHwodC5yPU1hdGgubWF4KDAsK2UodCl8fDApKX19ZnVuY3Rpb24gUWooZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7aWYobj1yLmNoaWxkcmVuKXt2YXIgbixpLG89bi5sZW5ndGgsYT1lKHIpKnR8fDAscztpZihhKWZvcihpPTA7aTxvOysraSluW2ldLnIrPWE7aWYocz1KaihuKSxhKWZvcihpPTA7aTxvOysraSluW2ldLnItPWE7ci5yPXMrYX19fWZ1bmN0aW9uIGwydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5wYXJlbnQ7dC5yKj1lLHImJih0Lng9ci54K2UqdC54LHQueT1yLnkrZSp0LnkpfX1mdW5jdGlvbiByOChlKXtlLngwPU1hdGgucm91bmQoZS54MCksZS55MD1NYXRoLnJvdW5kKGUueTApLGUueDE9TWF0aC5yb3VuZChlLngxKSxlLnkxPU1hdGgucm91bmQoZS55MSl9ZnVuY3Rpb24gVWgoZSx0LHIsbixpKXtmb3IodmFyIG89ZS5jaGlsZHJlbixhLHM9LTEsbD1vLmxlbmd0aCxjPWUudmFsdWUmJihuLXQpL2UudmFsdWU7KytzPGw7KWE9b1tzXSxhLnkwPXIsYS55MT1pLGEueDA9dCxhLngxPXQrPWEudmFsdWUqY31mdW5jdGlvbiB1MnQoKXt2YXIgZT0xLHQ9MSxyPTAsbj0hMTtmdW5jdGlvbiBpKGEpe3ZhciBzPWEuaGVpZ2h0KzE7cmV0dXJuIGEueDA9YS55MD1yLGEueDE9ZSxhLnkxPXQvcyxhLmVhY2hCZWZvcmUobyh0LHMpKSxuJiZhLmVhY2hCZWZvcmUocjgpLGF9ZnVuY3Rpb24gbyhhLHMpe3JldHVybiBmdW5jdGlvbihsKXtsLmNoaWxkcmVuJiZVaChsLGwueDAsYSoobC5kZXB0aCsxKS9zLGwueDEsYSoobC5kZXB0aCsyKS9zKTt2YXIgYz1sLngwLHU9bC55MCxoPWwueDEtcixmPWwueTEtcjtoPGMmJihjPWg9KGMraCkvMiksZjx1JiYodT1mPSh1K2YpLzIpLGwueDA9YyxsLnkwPXUsbC54MT1oLGwueTE9Zn19cmV0dXJuIGkucm91bmQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ISFhLGkpOm59LGkuc2l6ZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rYVswXSx0PSthWzFdLGkpOltlLHRdfSxpLnBhZGRpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2EsaSk6cn0saX12YXIgaDJ0PSIkIixyTWU9e2RlcHRoOi0xfSxmMnQ9e307ZnVuY3Rpb24gbk1lKGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uIGlNZShlKXtyZXR1cm4gZS5wYXJlbnRJZH1mdW5jdGlvbiBwMnQoKXt2YXIgZT1uTWUsdD1pTWU7ZnVuY3Rpb24gcihuKXt2YXIgaSxvLGE9bi5sZW5ndGgscyxsLGMsdT1uZXcgQXJyYXkoYSksaCxmLHA9e307Zm9yKG89MDtvPGE7KytvKWk9bltvXSxjPXVbb109bmV3IEttKGkpLChoPWUoaSxvLG4pKSE9bnVsbCYmKGgrPSIiKSYmKGY9aDJ0KyhjLmlkPWgpLHBbZl09ZiBpbiBwP2YydDpjKTtmb3Iobz0wO288YTsrK28paWYoYz11W29dLGg9dChuW29dLG8sbiksaD09bnVsbHx8IShoKz0iIikpe2lmKHMpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO3M9Y31lbHNle2lmKGw9cFtoMnQraF0sIWwpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2gpO2lmKGw9PT1mMnQpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIraCk7bC5jaGlsZHJlbj9sLmNoaWxkcmVuLnB1c2goYyk6bC5jaGlsZHJlbj1bY10sYy5wYXJlbnQ9bH1pZighcyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihzLnBhcmVudD1yTWUscy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGQpe2QuZGVwdGg9ZC5wYXJlbnQuZGVwdGgrMSwtLWF9KS5lYWNoQmVmb3JlKEtqKSxzLnBhcmVudD1udWxsLGE+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIHN9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VWIobikscik6ZX0sci5wYXJlbnRJZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1VYihuKSxyKTp0fSxyfWZ1bmN0aW9uIG9NZShlLHQpe3JldHVybiBlLnBhcmVudD09PXQucGFyZW50PzE6Mn1mdW5jdGlvbiB0WChlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbMF06ZS50fWZ1bmN0aW9uIGVYKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHQ/dFt0Lmxlbmd0aC0xXTplLnR9ZnVuY3Rpb24gYU1lKGUsdCxyKXt2YXIgbj1yLyh0LmktZS5pKTt0LmMtPW4sdC5zKz1yLGUuYys9bix0LnorPXIsdC5tKz1yfWZ1bmN0aW9uIHNNZShlKXtmb3IodmFyIHQ9MCxyPTAsbj1lLmNoaWxkcmVuLGk9bi5sZW5ndGgsbzstLWk+PTA7KW89bltpXSxvLnorPXQsby5tKz10LHQrPW8ucysocis9by5jKX1mdW5jdGlvbiBsTWUoZSx0LHIpe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOnJ9ZnVuY3Rpb24gbjgoZSx0KXt0aGlzLl89ZSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9dH1uOC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShLbS5wcm90b3R5cGUpO2Z1bmN0aW9uIGNNZShlKXtmb3IodmFyIHQ9bmV3IG44KGUsMCkscixuPVt0XSxpLG8sYSxzO3I9bi5wb3AoKTspaWYobz1yLl8uY2hpbGRyZW4pZm9yKHIuY2hpbGRyZW49bmV3IEFycmF5KHM9by5sZW5ndGgpLGE9cy0xO2E+PTA7LS1hKW4ucHVzaChpPXIuY2hpbGRyZW5bYV09bmV3IG44KG9bYV0sYSkpLGkucGFyZW50PXI7cmV0dXJuKHQucGFyZW50PW5ldyBuOChudWxsLDApKS5jaGlsZHJlbj1bdF0sdH1mdW5jdGlvbiBkMnQoKXt2YXIgZT1vTWUsdD0xLHI9MSxuPW51bGw7ZnVuY3Rpb24gaShjKXt2YXIgdT1jTWUoYyk7aWYodS5lYWNoQWZ0ZXIobyksdS5wYXJlbnQubT0tdS56LHUuZWFjaEJlZm9yZShhKSxuKWMuZWFjaEJlZm9yZShsKTtlbHNle3ZhciBoPWMsZj1jLHA9YztjLmVhY2hCZWZvcmUoZnVuY3Rpb24oeCl7eC54PGgueCYmKGg9eCkseC54PmYueCYmKGY9eCkseC5kZXB0aD5wLmRlcHRoJiYocD14KX0pO3ZhciBkPWg9PT1mPzE6ZShoLGYpLzIsZz1kLWgueCxfPXQvKGYueCtkK2cpLHk9ci8ocC5kZXB0aHx8MSk7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueD0oeC54K2cpKl8seC55PXguZGVwdGgqeX0pfXJldHVybiBjfWZ1bmN0aW9uIG8oYyl7dmFyIHU9Yy5jaGlsZHJlbixoPWMucGFyZW50LmNoaWxkcmVuLGY9Yy5pP2hbYy5pLTFdOm51bGw7aWYodSl7c01lKGMpO3ZhciBwPSh1WzBdLnordVt1Lmxlbmd0aC0xXS56KS8yO2Y/KGMuej1mLnorZShjLl8sZi5fKSxjLm09Yy56LXApOmMuej1wfWVsc2UgZiYmKGMuej1mLnorZShjLl8sZi5fKSk7Yy5wYXJlbnQuQT1zKGMsZixjLnBhcmVudC5BfHxoWzBdKX1mdW5jdGlvbiBhKGMpe2MuXy54PWMueitjLnBhcmVudC5tLGMubSs9Yy5wYXJlbnQubX1mdW5jdGlvbiBzKGMsdSxoKXtpZih1KXtmb3IodmFyIGY9YyxwPWMsZD11LGc9Zi5wYXJlbnQuY2hpbGRyZW5bMF0sXz1mLm0seT1wLm0seD1kLm0sYj1nLm0sUztkPWVYKGQpLGY9dFgoZiksZCYmZjspZz10WChnKSxwPWVYKHApLHAuYT1jLFM9ZC56K3gtZi56LV8rZShkLl8sZi5fKSxTPjAmJihhTWUobE1lKGQsYyxoKSxjLFMpLF8rPVMseSs9UykseCs9ZC5tLF8rPWYubSxiKz1nLm0seSs9cC5tO2QmJiFlWChwKSYmKHAudD1kLHAubSs9eC15KSxmJiYhdFgoZykmJihnLnQ9ZixnLm0rPV8tYixoPWMpfXJldHVybiBofWZ1bmN0aW9uIGwoYyl7Yy54Kj10LGMueT1jLmRlcHRoKnJ9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1jLGkpOmV9LGkuc2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSx0PStjWzBdLHI9K2NbMV0saSk6bj9udWxsOlt0LHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLHQ9K2NbMF0scj0rY1sxXSxpKTpuP1t0LHJdOm51bGx9LGl9ZnVuY3Rpb24gSm0oZSx0LHIsbixpKXtmb3IodmFyIG89ZS5jaGlsZHJlbixhLHM9LTEsbD1vLmxlbmd0aCxjPWUudmFsdWUmJihpLXIpL2UudmFsdWU7KytzPGw7KWE9b1tzXSxhLngwPXQsYS54MT1uLGEueTA9cixhLnkxPXIrPWEudmFsdWUqY312YXIgclg9KDErTWF0aC5zcXJ0KDUpKS8yO2Z1bmN0aW9uIG5YKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9W10scz10LmNoaWxkcmVuLGwsYyx1PTAsaD0wLGY9cy5sZW5ndGgscCxkLGc9dC52YWx1ZSxfLHkseCxiLFMsQyxQO3U8Zjspe3A9aS1yLGQ9by1uO2RvIF89c1toKytdLnZhbHVlO3doaWxlKCFfJiZoPGYpO2Zvcih5PXg9XyxDPU1hdGgubWF4KGQvcCxwL2QpLyhnKmUpLFA9XypfKkMsUz1NYXRoLm1heCh4L1AsUC95KTtoPGY7KytoKXtpZihfKz1jPXNbaF0udmFsdWUsYzx5JiYoeT1jKSxjPngmJih4PWMpLFA9XypfKkMsYj1NYXRoLm1heCh4L1AsUC95KSxiPlMpe18tPWM7YnJlYWt9Uz1ifWEucHVzaChsPXt2YWx1ZTpfLGRpY2U6cDxkLGNoaWxkcmVuOnMuc2xpY2UodSxoKX0pLGwuZGljZT9VaChsLHIsbixpLGc/bis9ZCpfL2c6byk6Sm0obCxyLG4sZz9yKz1wKl8vZzppLG8pLGctPV8sdT1ofXJldHVybiBhfXZhciBpOD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobixpLG8sYSxzKXtuWCh0LG4saSxvLGEscyl9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24obil7cmV0dXJuIGUoKG49K24pPjE/bjoxKX0scn0oclgpO2Z1bmN0aW9uIG0ydCgpe3ZhciBlPWk4LHQ9ITEscj0xLG49MSxpPVswXSxvPU9wLGE9T3Ascz1PcCxsPU9wLGM9T3A7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZi54MD1mLnkwPTAsZi54MT1yLGYueTE9bixmLmVhY2hCZWZvcmUoaCksaT1bMF0sdCYmZi5lYWNoQmVmb3JlKHI4KSxmfWZ1bmN0aW9uIGgoZil7dmFyIHA9aVtmLmRlcHRoXSxkPWYueDArcCxnPWYueTArcCxfPWYueDEtcCx5PWYueTEtcDtfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGYueDA9ZCxmLnkwPWcsZi54MT1fLGYueTE9eSxmLmNoaWxkcmVuJiYocD1pW2YuZGVwdGgrMV09byhmKS8yLGQrPWMoZiktcCxnKz1hKGYpLXAsXy09cyhmKS1wLHktPWwoZiktcCxfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGUoZixkLGcsXyx5KSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFmLHUpOnR9LHUuc2l6ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZlswXSxuPStmWzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VWIoZiksdSk6ZX0sdS5wYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKGYpLnBhZGRpbmdPdXRlcihmKTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOlptKCtmKSx1KTpvfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AoZikucGFkZGluZ1JpZ2h0KGYpLnBhZGRpbmdCb3R0b20oZikucGFkZGluZ0xlZnQoZik6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOlptKCtmKSx1KTphfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOlptKCtmKSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOlptKCtmKSx1KTpjfSx1fWZ1bmN0aW9uIGcydChlLHQscixuLGkpe3ZhciBvPWUuY2hpbGRyZW4sYSxzPW8ubGVuZ3RoLGwsYz1uZXcgQXJyYXkocysxKTtmb3IoY1swXT1sPWE9MDthPHM7KythKWNbYSsxXT1sKz1vW2FdLnZhbHVlO3UoMCxzLGUudmFsdWUsdCxyLG4saSk7ZnVuY3Rpb24gdShoLGYscCxkLGcsXyx5KXtpZihoPj1mLTEpe3ZhciB4PW9baF07eC54MD1kLHgueTA9Zyx4LngxPV8seC55MT15O3JldHVybn1mb3IodmFyIGI9Y1toXSxTPXAvMitiLEM9aCsxLFA9Zi0xO0M8UDspe3ZhciBrPUMrUD4+PjE7Y1trXTxTP0M9aysxOlA9a31TLWNbQy0xXTxjW0NdLVMmJmgrMTxDJiYtLUM7dmFyIE89Y1tDXS1iLEQ9cC1PO2lmKF8tZD55LWcpe3ZhciBCPShkKkQrXypPKS9wO3UoaCxDLE8sZCxnLEIseSksdShDLGYsRCxCLGcsXyx5KX1lbHNle3ZhciBJPShnKkQreSpPKS9wO3UoaCxDLE8sZCxnLF8sSSksdShDLGYsRCxkLEksXyx5KX19fWZ1bmN0aW9uIF8ydChlLHQscixuLGkpeyhlLmRlcHRoJjE/Sm06VWgpKGUsdCxyLG4saSl9dmFyIHkydD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobixpLG8sYSxzKXtpZigobD1uLl9zcXVhcmlmeSkmJmwucmF0aW89PT10KWZvcih2YXIgbCxjLHUsaCxmPS0xLHAsZD1sLmxlbmd0aCxnPW4udmFsdWU7KytmPGQ7KXtmb3IoYz1sW2ZdLHU9Yy5jaGlsZHJlbixoPWMudmFsdWU9MCxwPXUubGVuZ3RoO2g8cDsrK2gpYy52YWx1ZSs9dVtoXS52YWx1ZTtjLmRpY2U/VWgoYyxpLG8sYSxvKz0ocy1vKSpjLnZhbHVlL2cpOkptKGMsaSxvLGkrPShhLWkpKmMudmFsdWUvZyxzKSxnLT1jLnZhbHVlfWVsc2Ugbi5fc3F1YXJpZnk9bD1uWCh0LG4saSxvLGEscyksbC5yYXRpbz10fXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KHJYKTtmdW5jdGlvbiB2MnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbixpPWVbci0xXSxvPTA7Kyt0PHI7KW49aSxpPWVbdF0sbys9blsxXSppWzBdLW5bMF0qaVsxXTtyZXR1cm4gby8yfWZ1bmN0aW9uIHgydChlKXtmb3IodmFyIHQ9LTEscj1lLmxlbmd0aCxuPTAsaT0wLG8sYT1lW3ItMV0scyxsPTA7Kyt0PHI7KW89YSxhPWVbdF0sbCs9cz1vWzBdKmFbMV0tYVswXSpvWzFdLG4rPShvWzBdK2FbMF0pKnMsaSs9KG9bMV0rYVsxXSkqcztyZXR1cm4gbCo9Myxbbi9sLGkvbF19ZnVuY3Rpb24gYjJ0KGUsdCxyKXtyZXR1cm4odFswXS1lWzBdKSooclsxXS1lWzFdKS0odFsxXS1lWzFdKSooclswXS1lWzBdKX1mdW5jdGlvbiB1TWUoZSx0KXtyZXR1cm4gZVswXS10WzBdfHxlWzFdLXRbMV19ZnVuY3Rpb24gdzJ0KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPVswLDFdLG49MixpPTI7aTx0OysraSl7Zm9yKDtuPjEmJmIydChlW3Jbbi0yXV0sZVtyW24tMV1dLGVbaV0pPD0wOyktLW47cltuKytdPWl9cmV0dXJuIHIuc2xpY2UoMCxuKX1mdW5jdGlvbiBTMnQoZSl7aWYoKHI9ZS5sZW5ndGgpPDMpcmV0dXJuIG51bGw7dmFyIHQscixuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKTtmb3IodD0wO3Q8cjsrK3Qpblt0XT1bK2VbdF1bMF0sK2VbdF1bMV0sdF07Zm9yKG4uc29ydCh1TWUpLHQ9MDt0PHI7Kyt0KWlbdF09W25bdF1bMF0sLW5bdF1bMV1dO3ZhciBvPXcydChuKSxhPXcydChpKSxzPWFbMF09PT1vWzBdLGw9YVthLmxlbmd0aC0xXT09PW9bby5sZW5ndGgtMV0sYz1bXTtmb3IodD1vLmxlbmd0aC0xO3Q+PTA7LS10KWMucHVzaChlW25bb1t0XV1bMl1dKTtmb3IodD0rczt0PGEubGVuZ3RoLWw7Kyt0KWMucHVzaChlW25bYVt0XV1bMl1dKTtyZXR1cm4gY31mdW5jdGlvbiBNMnQoZSx0KXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1lW3ItMV0saT10WzBdLG89dFsxXSxhPW5bMF0scz1uWzFdLGwsYyx1PSExLGg9MDtoPHI7KytoKW49ZVtoXSxsPW5bMF0sYz1uWzFdLGM+byE9cz5vJiZpPChhLWwpKihvLWMpLyhzLWMpK2wmJih1PSF1KSxhPWwscz1jO3JldHVybiB1fWZ1bmN0aW9uIEUydChlKXtmb3IodmFyIHQ9LTEscj1lLmxlbmd0aCxuPWVbci0xXSxpLG8sYT1uWzBdLHM9blsxXSxsPTA7Kyt0PHI7KWk9YSxvPXMsbj1lW3RdLGE9blswXSxzPW5bMV0saS09YSxvLT1zLGwrPU1hdGguc3FydChpKmkrbypvKTtyZXR1cm4gbH1mdW5jdGlvbiBhYygpe3JldHVybiBNYXRoLnJhbmRvbSgpfXZhciBUMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGFyZ3VtZW50cy5sZW5ndGg9PT0xPyhpPW4sbj0wKTppLT1uLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKSppK259fXJldHVybiByLnNvdXJjZT1lLHJ9KGFjKTt2YXIgbzg9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7dmFyIG8sYTtyZXR1cm4gbj1uPT1udWxsPzA6K24saT1pPT1udWxsPzE6K2ksZnVuY3Rpb24oKXt2YXIgcztpZihvIT1udWxsKXM9byxvPW51bGw7ZWxzZSBkbyBvPXQoKSoyLTEscz10KCkqMi0xLGE9bypvK3Mqczt3aGlsZSghYXx8YT4xKTtyZXR1cm4gbitpKnMqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGEpL2EpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIEMydD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIoKXt2YXIgbj1vOC5zb3VyY2UodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChuKCkpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIGE4PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGk9MCxvPTA7bzxuOysrbylpKz10KCk7cmV0dXJuIGl9fXJldHVybiByLnNvdXJjZT1lLHJ9KGFjKTt2YXIgQTJ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXt2YXIgaT1hOC5zb3VyY2UodCkobik7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkoKS9ufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIFAydD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtdCgpKS9ufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7ZnVuY3Rpb24gZmkoZSx0KXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLnJhbmdlKGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5yYW5nZSh0KS5kb21haW4oZSk7YnJlYWt9cmV0dXJuIHRoaXN9ZnVuY3Rpb24gc2MoZSx0KXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLmludGVycG9sYXRvcihlKTticmVhaztkZWZhdWx0OnRoaXMuaW50ZXJwb2xhdG9yKHQpLmRvbWFpbihlKTticmVha31yZXR1cm4gdGhpc31UYigpO3ZhciBJMnQ9QXJyYXkucHJvdG90eXBlLFhfPUkydC5tYXAsbGM9STJ0LnNsaWNlO3ZhciBzOD17bmFtZToiaW1wbGljaXQifTtmdW5jdGlvbiBndSgpe3ZhciBlPUppKCksdD1bXSxyPVtdLG49czg7ZnVuY3Rpb24gaShvKXt2YXIgYT1vKyIiLHM9ZS5nZXQoYSk7aWYoIXMpe2lmKG4hPT1zOClyZXR1cm4gbjtlLnNldChhLHM9dC5wdXNoKG8pKX1yZXR1cm4gclsocy0xKSVyLmxlbmd0aF19cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0LnNsaWNlKCk7dD1bXSxlPUppKCk7Zm9yKHZhciBhPS0xLHM9by5sZW5ndGgsbCxjOysrYTxzOyllLmhhcyhjPShsPW9bYV0pKyIiKXx8ZS5zZXQoYyx0LnB1c2gobCkpO3JldHVybiBpfSxpLnJhbmdlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWxjLmNhbGwobyksaSk6ci5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49byxpKTpufSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZ3UodCxyKS51bmtub3duKG4pfSxmaS5hcHBseShpLGFyZ3VtZW50cyksaX1mdW5jdGlvbiBRbSgpe3ZhciBlPWd1KCkudW5rbm93bih2b2lkIDApLHQ9ZS5kb21haW4scj1lLnJhbmdlLG49WzAsMV0saSxvLGE9ITEscz0wLGw9MCxjPS41O2RlbGV0ZSBlLnVua25vd247ZnVuY3Rpb24gdSgpe3ZhciBoPXQoKS5sZW5ndGgsZj1uWzFdPG5bMF0scD1uW2YtMF0sZD1uWzEtZl07aT0oZC1wKS9NYXRoLm1heCgxLGgtcytsKjIpLGEmJihpPU1hdGguZmxvb3IoaSkpLHArPShkLXAtaSooaC1zKSkqYyxvPWkqKDEtcyksYSYmKHA9TWF0aC5yb3VuZChwKSxvPU1hdGgucm91bmQobykpO3ZhciBnPUlyKGgpLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gcCtpKl99KTtyZXR1cm4gcihmP2cucmV2ZXJzZSgpOmcpfXJldHVybiBlLmRvbWFpbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odChoKSx1KCkpOnQoKX0sZS5yYW5nZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1bK2hbMF0sK2hbMV1dLHUoKSk6bi5zbGljZSgpfSxlLnJhbmdlUm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIG49WytoWzBdLCtoWzFdXSxhPSEwLHUoKX0sZS5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gb30sZS5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIGl9LGUucm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ISFoLHUoKSk6YX0sZS5wYWRkaW5nPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWluKDEsbD0raCksdSgpKTpzfSxlLnBhZGRpbmdJbm5lcj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGgpLHUoKSk6c30sZS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K2gsdSgpKTpsfSxlLmFsaWduPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpjfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gUW0odCgpLG4pLnJvdW5kKGEpLnBhZGRpbmdJbm5lcihzKS5wYWRkaW5nT3V0ZXIobCkuYWxpZ24oYyl9LGZpLmFwcGx5KHUoKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEwydChlKXt2YXIgdD1lLmNvcHk7cmV0dXJuIGUucGFkZGluZz1lLnBhZGRpbmdPdXRlcixkZWxldGUgZS5wYWRkaW5nSW5uZXIsZGVsZXRlIGUucGFkZGluZ091dGVyLGUuY29weT1mdW5jdGlvbigpe3JldHVybiBMMnQodCgpKX0sZX1mdW5jdGlvbiB0Zygpe3JldHVybiBMMnQoUW0uYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhZGRpbmdJbm5lcigxKSl9ZnVuY3Rpb24gazJ0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBkNShlKXtyZXR1cm4rZX12YXIgUjJ0PVswLDFdO2Z1bmN0aW9uIGlpKGUpe3JldHVybiBlfWZ1bmN0aW9uIGlYKGUsdCl7cmV0dXJuKHQtPWU9K2UpP2Z1bmN0aW9uKHIpe3JldHVybihyLWUpL3R9OmsydChpc05hTih0KT9OYU46LjUpfWZ1bmN0aW9uIE4ydChlKXt2YXIgdD1lWzBdLHI9ZVtlLmxlbmd0aC0xXSxuO3JldHVybiB0PnImJihuPXQsdD1yLHI9biksZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4ocixpKSl9fWZ1bmN0aW9uIGhNZShlLHQscil7dmFyIG49ZVswXSxpPWVbMV0sbz10WzBdLGE9dFsxXTtyZXR1cm4gaTxuPyhuPWlYKGksbiksbz1yKGEsbykpOihuPWlYKG4saSksbz1yKG8sYSkpLGZ1bmN0aW9uKHMpe3JldHVybiBvKG4ocykpfX1mdW5jdGlvbiBmTWUoZSx0LHIpe3ZhciBuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKS0xLGk9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pLGE9LTE7Zm9yKGVbbl08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrYTxuOylpW2FdPWlYKGVbYV0sZVthKzFdKSxvW2FdPXIodFthXSx0W2ErMV0pO3JldHVybiBmdW5jdGlvbihzKXt2YXIgbD15cyhlLHMsMSxuKS0xO3JldHVybiBvW2xdKGlbbF0ocykpfX1mdW5jdGlvbiBxaChlLHQpe3JldHVybiB0LmRvbWFpbihlLmRvbWFpbigpKS5yYW5nZShlLnJhbmdlKCkpLmludGVycG9sYXRlKGUuaW50ZXJwb2xhdGUoKSkuY2xhbXAoZS5jbGFtcCgpKS51bmtub3duKGUudW5rbm93bigpKX1mdW5jdGlvbiAkXygpe3ZhciBlPVIydCx0PVIydCxyPW5jLG4saSxvLGE9aWkscyxsLGM7ZnVuY3Rpb24gdSgpe3JldHVybiBzPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKT4yP2ZNZTpoTWUsbD1jPW51bGwsaH1mdW5jdGlvbiBoKGYpe3JldHVybiBpc05hTihmPStmKT9vOihsfHwobD1zKGUubWFwKG4pLHQscikpKShuKGEoZikpKX1yZXR1cm4gaC5pbnZlcnQ9ZnVuY3Rpb24oZil7cmV0dXJuIGEoaSgoY3x8KGM9cyh0LGUubWFwKG4pLHppKSkpKGYpKSl9LGguZG9tYWluPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVhfLmNhbGwoZixkNSksYT09PWlpfHwoYT1OMnQoZSkpLHUoKSk6ZS5zbGljZSgpfSxoLnJhbmdlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWxjLmNhbGwoZiksdSgpKTp0LnNsaWNlKCl9LGgucmFuZ2VSb3VuZD1mdW5jdGlvbihmKXtyZXR1cm4gdD1sYy5jYWxsKGYpLHI9cEwsdSgpfSxoLmNsYW1wPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWY/TjJ0KGUpOmlpLGgpOmEhPT1paX0saC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1mLHUoKSk6cn0saC51bmtub3duPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWYsaCk6b30sZnVuY3Rpb24oZixwKXtyZXR1cm4gbj1mLGk9cCx1KCl9fWZ1bmN0aW9uIG01KGUsdCl7cmV0dXJuICRfKCkoZSx0KX1mdW5jdGlvbiBsOChlLHQscixuKXt2YXIgaT10bChlLHQsciksbztzd2l0Y2gobj1McChuPT1udWxsPyIsZiI6biksbi50eXBlKXtjYXNlInMiOnt2YXIgYT1NYXRoLm1heChNYXRoLmFicyhlKSxNYXRoLmFicyh0KSk7cmV0dXJuIG4ucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4obz1payhpLGEpKSYmKG4ucHJlY2lzaW9uPW8pLEdFKG4sYSl9Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6e24ucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4obz1vayhpLE1hdGgubWF4KE1hdGguYWJzKGUpLE1hdGguYWJzKHQpKSkpJiYobi5wcmVjaXNpb249by0obi50eXBlPT09ImUiKSk7YnJlYWt9Y2FzZSJmIjpjYXNlIiUiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89bmsoaSkpJiYobi5wcmVjaXNpb249by0obi50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIHhuKG4pfWZ1bmN0aW9uIGlsKGUpe3ZhciB0PWUuZG9tYWluO3JldHVybiBlLnRpY2tzPWZ1bmN0aW9uKHIpe3ZhciBuPXQoKTtyZXR1cm4gYWIoblswXSxuW24ubGVuZ3RoLTFdLHI9PW51bGw/MTA6cil9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihyLG4pe3ZhciBpPXQoKTtyZXR1cm4gbDgoaVswXSxpW2kubGVuZ3RoLTFdLHI9PW51bGw/MTA6cixuKX0sZS5uaWNlPWZ1bmN0aW9uKHIpe3I9PW51bGwmJihyPTEwKTt2YXIgbj10KCksaT0wLG89bi5sZW5ndGgtMSxhPW5baV0scz1uW29dLGw7cmV0dXJuIHM8YSYmKGw9YSxhPXMscz1sLGw9aSxpPW8sbz1sKSxsPXhfKGEscyxyKSxsPjA/KGE9TWF0aC5mbG9vcihhL2wpKmwscz1NYXRoLmNlaWwocy9sKSpsLGw9eF8oYSxzLHIpKTpsPDAmJihhPU1hdGguY2VpbChhKmwpL2wscz1NYXRoLmZsb29yKHMqbCkvbCxsPXhfKGEscyxyKSksbD4wPyhuW2ldPU1hdGguZmxvb3IoYS9sKSpsLG5bb109TWF0aC5jZWlsKHMvbCkqbCx0KG4pKTpsPDAmJihuW2ldPU1hdGguY2VpbChhKmwpL2wsbltvXT1NYXRoLmZsb29yKHMqbCkvbCx0KG4pKSxlfSxlfWZ1bmN0aW9uIHpuKCl7dmFyIGU9bTUoaWksaWkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoZSx6bigpKX0sZmkuYXBwbHkoZSxhcmd1bWVudHMpLGlsKGUpfWZ1bmN0aW9uIGM4KGUpe3ZhciB0O2Z1bmN0aW9uIHIobil7cmV0dXJuIGlzTmFOKG49K24pP3Q6bn1yZXR1cm4gci5pbnZlcnQ9cixyLmRvbWFpbj1yLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVhfLmNhbGwobixkNSkscik6ZS5zbGljZSgpfSxyLnVua25vd249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixyKTp0fSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYzgoZSkudW5rbm93bih0KX0sZT1hcmd1bWVudHMubGVuZ3RoP1hfLmNhbGwoZSxkNSk6WzAsMV0saWwocil9ZnVuY3Rpb24gdTgoZSx0KXtlPWUuc2xpY2UoKTt2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbcl0sbz1lW25dLGE7cmV0dXJuIG88aSYmKGE9cixyPW4sbj1hLGE9aSxpPW8sbz1hKSxlW3JdPXQuZmxvb3IoaSksZVtuXT10LmNlaWwobyksZX1mdW5jdGlvbiBEMnQoZSl7cmV0dXJuIE1hdGgubG9nKGUpfWZ1bmN0aW9uIE8ydChlKXtyZXR1cm4gTWF0aC5leHAoZSl9ZnVuY3Rpb24gcE1lKGUpe3JldHVybi1NYXRoLmxvZygtZSl9ZnVuY3Rpb24gZE1lKGUpe3JldHVybi1NYXRoLmV4cCgtZSl9ZnVuY3Rpb24gbU1lKGUpe3JldHVybiBpc0Zpbml0ZShlKT8rKCIxZSIrZSk6ZTwwPzA6ZX1mdW5jdGlvbiBnTWUoZSl7cmV0dXJuIGU9PT0xMD9tTWU6ZT09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gX01lKGUpe3JldHVybiBlPT09TWF0aC5FP01hdGgubG9nOmU9PT0xMCYmTWF0aC5sb2cxMHx8ZT09PTImJk1hdGgubG9nMnx8KGU9TWF0aC5sb2coZSksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL2V9KX1mdW5jdGlvbiB6MnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi1lKC10KX19ZnVuY3Rpb24gZzUoZSl7dmFyIHQ9ZShEMnQsTzJ0KSxyPXQuZG9tYWluLG49MTAsaSxvO2Z1bmN0aW9uIGEoKXtyZXR1cm4gaT1fTWUobiksbz1nTWUobikscigpWzBdPDA/KGk9ejJ0KGkpLG89ejJ0KG8pLGUocE1lLGRNZSkpOmUoRDJ0LE8ydCksdH1yZXR1cm4gdC5iYXNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStzLGEoKSk6bn0sdC5kb21haW49ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIocyksYSgpKTpyKCl9LHQudGlja3M9ZnVuY3Rpb24ocyl7dmFyIGw9cigpLGM9bFswXSx1PWxbbC5sZW5ndGgtMV0saDsoaD11PGMpJiYoZj1jLGM9dSx1PWYpO3ZhciBmPWkoYykscD1pKHUpLGQsZyxfLHk9cz09bnVsbD8xMDorcyx4PVtdO2lmKCEobiUxKSYmcC1mPHkpe2lmKGY9TWF0aC5yb3VuZChmKS0xLHA9TWF0aC5yb3VuZChwKSsxLGM+MCl7Zm9yKDtmPHA7KytmKWZvcihnPTEsZD1vKGYpO2c8bjsrK2cpaWYoXz1kKmcsIShfPGMpKXtpZihfPnUpYnJlYWs7eC5wdXNoKF8pfX1lbHNlIGZvcig7ZjxwOysrZilmb3IoZz1uLTEsZD1vKGYpO2c+PTE7LS1nKWlmKF89ZCpnLCEoXzxjKSl7aWYoXz51KWJyZWFrO3gucHVzaChfKX19ZWxzZSB4PWFiKGYscCxNYXRoLm1pbihwLWYseSkpLm1hcChvKTtyZXR1cm4gaD94LnJldmVyc2UoKTp4fSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocyxsKXtpZihsPT1udWxsJiYobD1uPT09MTA/Ii4wZSI6IiwiKSx0eXBlb2YgbCE9ImZ1bmN0aW9uIiYmKGw9eG4obCkpLHM9PT0xLzApcmV0dXJuIGw7cz09bnVsbCYmKHM9MTApO3ZhciBjPU1hdGgubWF4KDEsbipzL3QudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih1KXt2YXIgaD11L28oTWF0aC5yb3VuZChpKHUpKSk7cmV0dXJuIGgqbjxuLS41JiYoaCo9biksaDw9Yz9sKHUpOiIifX0sdC5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIodTgocigpLHtmbG9vcjpmdW5jdGlvbihzKXtyZXR1cm4gbyhNYXRoLmZsb29yKGkocykpKX0sY2VpbDpmdW5jdGlvbihzKXtyZXR1cm4gbyhNYXRoLmNlaWwoaShzKSkpfX0pKX0sdH1mdW5jdGlvbiBjYygpe3ZhciBlPWc1KCRfKCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoZSxjYygpKS5iYXNlKGUuYmFzZSgpKX0sZmkuYXBwbHkoZSxhcmd1bWVudHMpLGV9ZnVuY3Rpb24gRjJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zaWduKHQpKk1hdGgubG9nMXAoTWF0aC5hYnModC9lKSl9fWZ1bmN0aW9uIEIydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2lnbih0KSpNYXRoLmV4cG0xKE1hdGguYWJzKHQpKSplfX1mdW5jdGlvbiBfNShlKXt2YXIgdD0xLHI9ZShGMnQodCksQjJ0KHQpKTtyZXR1cm4gci5jb25zdGFudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKEYydCh0PStuKSxCMnQodCkpOnR9LGlsKHIpfWZ1bmN0aW9uIGg4KCl7dmFyIGU9XzUoJF8oKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBxaChlLGg4KCkpLmNvbnN0YW50KGUuY29uc3RhbnQoKSl9LGZpLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBIMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PDA/LU1hdGgucG93KC10LGUpOk1hdGgucG93KHQsZSl9fWZ1bmN0aW9uIHlNZShlKXtyZXR1cm4gZTwwPy1NYXRoLnNxcnQoLWUpOk1hdGguc3FydChlKX1mdW5jdGlvbiB2TWUoZSl7cmV0dXJuIGU8MD8tZSplOmUqZX1mdW5jdGlvbiB5NShlKXt2YXIgdD1lKGlpLGlpKSxyPTE7ZnVuY3Rpb24gbigpe3JldHVybiByPT09MT9lKGlpLGlpKTpyPT09LjU/ZSh5TWUsdk1lKTplKEgydChyKSxIMnQoMS9yKSl9cmV0dXJuIHQuZXhwb25lbnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2ksbigpKTpyfSxpbCh0KX1mdW5jdGlvbiBLXygpe3ZhciBlPXk1KCRfKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoZSxLXygpKS5leHBvbmVudChlLmV4cG9uZW50KCkpfSxmaS5hcHBseShlLGFyZ3VtZW50cyksZX1mdW5jdGlvbiBWMnQoKXtyZXR1cm4gS18uYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX1mdW5jdGlvbiBlZygpe3ZhciBlPVtdLHQ9W10scj1bXSxuO2Z1bmN0aW9uIGkoKXt2YXIgYT0wLHM9TWF0aC5tYXgoMSx0Lmxlbmd0aCk7Zm9yKHI9bmV3IEFycmF5KHMtMSk7KythPHM7KXJbYS0xXT1zYShlLGEvcyk7cmV0dXJuIG99ZnVuY3Rpb24gbyhhKXtyZXR1cm4gaXNOYU4oYT0rYSk/bjp0W3lzKHIsYSldfXJldHVybiBvLmludmVydEV4dGVudD1mdW5jdGlvbihhKXt2YXIgcz10LmluZGV4T2YoYSk7cmV0dXJuIHM8MD9bTmFOLE5hTl06W3M+MD9yW3MtMV06ZVswXSxzPHIubGVuZ3RoP3Jbc106ZVtlLmxlbmd0aC0xXV19LG8uZG9tYWluPWZ1bmN0aW9uKGEpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXTtmb3IodmFyIHM9MCxsPWEubGVuZ3RoLGM7czxsOysrcyljPWFbc10sYyE9bnVsbCYmIWlzTmFOKGM9K2MpJiZlLnB1c2goYyk7cmV0dXJuIGUuc29ydChvYSksaSgpfSxvLnJhbmdlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWxjLmNhbGwoYSksaSgpKTp0LnNsaWNlKCl9LG8udW5rbm93bj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1hLG8pOm59LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGVnKCkuZG9tYWluKGUpLnJhbmdlKHQpLnVua25vd24obil9LGZpLmFwcGx5KG8sYXJndW1lbnRzKX1mdW5jdGlvbiBxYigpe3ZhciBlPTAsdD0xLHI9MSxuPVsuNV0saT1bMCwxXSxvO2Z1bmN0aW9uIGEobCl7cmV0dXJuIGw8PWw/aVt5cyhuLGwsMCxyKV06b31mdW5jdGlvbiBzKCl7dmFyIGw9LTE7Zm9yKG49bmV3IEFycmF5KHIpOysrbDxyOyluW2xdPSgobCsxKSp0LShsLXIpKmUpLyhyKzEpO3JldHVybiBhfXJldHVybiBhLmRvbWFpbj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rbFswXSx0PStsWzFdLHMoKSk6W2UsdF19LGEucmFuZ2U9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9KGk9bGMuY2FsbChsKSkubGVuZ3RoLTEscygpKTppLnNsaWNlKCl9LGEuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGwpe3ZhciBjPWkuaW5kZXhPZihsKTtyZXR1cm4gYzwwP1tOYU4sTmFOXTpjPDE/W2UsblswXV06Yz49cj9bbltyLTFdLHRdOltuW2MtMV0sbltjXV19LGEudW5rbm93bj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmKG89bCksYX0sYS50aHJlc2hvbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIG4uc2xpY2UoKX0sYS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFiKCkuZG9tYWluKFtlLHRdKS5yYW5nZShpKS51bmtub3duKG8pfSxmaS5hcHBseShpbChhKSxhcmd1bWVudHMpfWZ1bmN0aW9uIGY4KCl7dmFyIGU9Wy41XSx0PVswLDFdLHIsbj0xO2Z1bmN0aW9uIGkobyl7cmV0dXJuIG88PW8/dFt5cyhlLG8sMCxuKV06cn1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bGMuY2FsbChvKSxuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLGkpOmUuc2xpY2UoKX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKG8pLG49TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgtMSksaSk6dC5zbGljZSgpfSxpLmludmVydEV4dGVudD1mdW5jdGlvbihvKXt2YXIgYT10LmluZGV4T2Yobyk7cmV0dXJuW2VbYS0xXSxlW2FdXX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW8saSk6cn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGY4KCkuZG9tYWluKGUpLnJhbmdlKHQpLnVua25vd24ocil9LGZpLmFwcGx5KGksYXJndW1lbnRzKX12YXIgb1g9bmV3IERhdGUsYVg9bmV3IERhdGU7ZnVuY3Rpb24gYnIoZSx0LHIsbil7ZnVuY3Rpb24gaShvKXtyZXR1cm4gZShvPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCtvKSksb31yZXR1cm4gaS5mbG9vcj1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKCtvKSksb30saS5jZWlsPWZ1bmN0aW9uKG8pe3JldHVybiBlKG89bmV3IERhdGUoby0xKSksdChvLDEpLGUobyksb30saS5yb3VuZD1mdW5jdGlvbihvKXt2YXIgYT1pKG8pLHM9aS5jZWlsKG8pO3JldHVybiBvLWE8cy1vP2E6c30saS5vZmZzZXQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gdChvPW5ldyBEYXRlKCtvKSxhPT1udWxsPzE6TWF0aC5mbG9vcihhKSksb30saS5yYW5nZT1mdW5jdGlvbihvLGEscyl7dmFyIGw9W10sYztpZihvPWkuY2VpbChvKSxzPXM9PW51bGw/MTpNYXRoLmZsb29yKHMpLCEobzxhKXx8IShzPjApKXJldHVybiBsO2RvIGwucHVzaChjPW5ldyBEYXRlKCtvKSksdChvLHMpLGUobyk7d2hpbGUoYzxvJiZvPGEpO3JldHVybiBsfSxpLmZpbHRlcj1mdW5jdGlvbihvKXtyZXR1cm4gYnIoZnVuY3Rpb24oYSl7aWYoYT49YSlmb3IoO2UoYSksIW8oYSk7KWEuc2V0VGltZShhLTEpfSxmdW5jdGlvbihhLHMpe2lmKGE+PWEpaWYoczwwKWZvcig7KytzPD0wOylmb3IoO3QoYSwtMSksIW8oYSk7KTtlbHNlIGZvcig7LS1zPj0wOylmb3IoO3QoYSwxKSwhbyhhKTspO30pfSxyJiYoaS5jb3VudD1mdW5jdGlvbihvLGEpe3JldHVybiBvWC5zZXRUaW1lKCtvKSxhWC5zZXRUaW1lKCthKSxlKG9YKSxlKGFYKSxNYXRoLmZsb29yKHIob1gsYVgpKX0saS5ldmVyeT1mdW5jdGlvbihvKXtyZXR1cm4gbz1NYXRoLmZsb29yKG8pLCFpc0Zpbml0ZShvKXx8IShvPjApP251bGw6bz4xP2kuZmlsdGVyKG4/ZnVuY3Rpb24oYSl7cmV0dXJuIG4oYSklbz09PTB9OmZ1bmN0aW9uKGEpe3JldHVybiBpLmNvdW50KDAsYSklbz09PTB9KTppfSksaX12YXIgcDg9YnIoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTtwOC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP2JyKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOnA4fTt2YXIgWl89cDgsc1g9cDgucmFuZ2U7dmFyIEpfPTFlMyx1Yz02ZTQsR2I9MzZlNSxkOD04NjRlNSxtOD02MDQ4ZTU7dmFyIFUydD1icihmdW5jdGlvbihlKXtlLnNldFRpbWUoZS1lLmdldE1pbGxpc2Vjb25kcygpKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpKXyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvSl99LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ1NlY29uZHMoKX0pLFFfPVUydCxsWD1VMnQucmFuZ2U7dmFyIHEydD1icihmdW5jdGlvbihlKXtlLnNldFRpbWUoZS1lLmdldE1pbGxpc2Vjb25kcygpLWUuZ2V0U2Vjb25kcygpKkpfKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCp1Yyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvdWN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX0pLGc4PXEydCxHMnQ9cTJ0LnJhbmdlO3ZhciBXMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpKXy1lLmdldE1pbnV0ZXMoKSp1Yyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqR2IpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0difSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRIb3VycygpfSksXzg9VzJ0LFkydD1XMnQucmFuZ2U7dmFyIGoydD1icihmdW5jdGlvbihlKXtlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RGF0ZShlLmdldERhdGUoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSp1YykvZDh9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldERhdGUoKS0xfSksdHk9ajJ0LFgydD1qMnQucmFuZ2U7ZnVuY3Rpb24gZXkoZSl7cmV0dXJuIGJyKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LWUpJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdC0oci5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqdWMpL204fSl9dmFyIHJnPWV5KDApLHJ5PWV5KDEpLGNYPWV5KDIpLHVYPWV5KDMpLHpwPWV5KDQpLGhYPWV5KDUpLGZYPWV5KDYpLHBYPXJnLnJhbmdlLCQydD1yeS5yYW5nZSxLMnQ9Y1gucmFuZ2UsWjJ0PXVYLnJhbmdlLEoydD16cC5yYW5nZSxRMnQ9aFgucmFuZ2UsdHd0PWZYLnJhbmdlO3ZhciBld3Q9YnIoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRNb250aChlLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0TW9udGgoKS1lLmdldE1vbnRoKCkrKHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCkpKjEyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250aCgpfSkseTg9ZXd0LHJ3dD1ld3QucmFuZ2U7dmFyIGRYPWJyKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7ZFguZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOmJyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTt2YXIgR2g9ZFgsbnd0PWRYLnJhbmdlO3ZhciBpd3Q9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqdWMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3VjfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNaW51dGVzKCl9KSx2OD1pd3Qsb3d0PWl3dC5yYW5nZTt2YXIgYXd0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqR2IpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0difSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENIb3VycygpfSkseDg9YXd0LHN3dD1hd3QucmFuZ2U7dmFyIGx3dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9kOH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRGF0ZSgpLTF9KSxueT1sd3QsY3d0PWx3dC5yYW5nZTtmdW5jdGlvbiBpeShlKXtyZXR1cm4gYnIoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpLSh0LmdldFVUQ0RheSgpKzctZSklNyksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10KS9tOH0pfXZhciBuZz1peSgwKSxveT1peSgxKSxtWD1peSgyKSxnWD1peSgzKSxGcD1peSg0KSxfWD1peSg1KSx5WD1peSg2KSx2WD1uZy5yYW5nZSx1d3Q9b3kucmFuZ2UsaHd0PW1YLnJhbmdlLGZ3dD1nWC5yYW5nZSxwd3Q9RnAucmFuZ2UsZHd0PV9YLnJhbmdlLG13dD15WC5yYW5nZTt2YXIgZ3d0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLGI4PWd3dCxfd3Q9Z3d0LnJhbmdlO3ZhciB4WD1icihmdW5jdGlvbihlKXtlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKX0pO3hYLmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpicihmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL2UpKmUpLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK3IqZSl9KX07dmFyIFdoPXhYLHl3dD14WC5yYW5nZTtmdW5jdGlvbiBiWChlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKTtyZXR1cm4gdC5zZXRGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCl9ZnVuY3Rpb24gd1goZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZShEYXRlLlVUQygtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpO3JldHVybiB0LnNldFVUQ0Z1bGxZZWFyKGUueSksdH1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZS55LGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSl9ZnVuY3Rpb24gdjUoZSx0LHIpe3JldHVybnt5OmUsbTp0LGQ6cixIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIHc1KGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPXg1KGkpLHU9YjUoaSksaD14NShvKSxmPWI1KG8pLHA9eDUoYSksZD1iNShhKSxnPXg1KHMpLF89YjUocykseT14NShsKSx4PWI1KGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOk13dCxlOk13dCxmOlVNZSxnOkpNZSxHOnRFZSxIOkJNZSxJOkhNZSxqOlZNZSxMOlB3dCxtOnFNZSxNOkdNZSxwOnN0LHE6U3QsUTpDd3QsczpBd3QsUzpXTWUsdTpZTWUsVTpqTWUsVjpYTWUsdzokTWUsVzpLTWUseDpudWxsLFg6bnVsbCx5OlpNZSxZOlFNZSxaOmVFZSwiJSI6VHd0fSxTPXthOmJ0LEE6TXQsYjpsdCxCOkt0LGM6bnVsbCxkOkV3dCxlOkV3dCxmOm9FZSxnOm1FZSxHOl9FZSxIOnJFZSxJOm5FZSxqOmlFZSxMOkx3dCxtOmFFZSxNOnNFZSxwOl90LHE6Y3QsUTpDd3QsczpBd3QsUzpsRWUsdTpjRWUsVTp1RWUsVjpoRWUsdzpmRWUsVzpwRWUseDpudWxsLFg6bnVsbCx5OmRFZSxZOmdFZSxaOnlFZSwiJSI6VHd0fSxDPXthOkIsQTpJLGI6TCxCOlIsYzpGLGQ6d3d0LGU6d3d0LGY6RE1lLGc6Ynd0LEc6eHd0LEg6U3d0LEk6U3d0LGo6TE1lLEw6Tk1lLG06SU1lLE06a01lLHA6RCxxOlBNZSxROnpNZSxzOkZNZSxTOlJNZSx1Ok1NZSxVOkVNZSxWOlRNZSx3OlNNZSxXOkNNZSx4OnosWDpVLHk6Ynd0LFk6eHd0LFo6QU1lLCIlIjpPTWV9O2IueD1QKHIsYiksYi5YPVAobixiKSxiLmM9UCh0LGIpLFMueD1QKHIsUyksUy5YPVAobixTKSxTLmM9UCh0LFMpO2Z1bmN0aW9uIFAoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT1bXSxwdD0tMSxodD0wLHd0PVgubGVuZ3RoLGt0LGllLGVlO2ZvcihkdCBpbnN0YW5jZW9mIERhdGV8fChkdD1uZXcgRGF0ZSgrZHQpKTsrK3B0PHd0OylYLmNoYXJDb2RlQXQocHQpPT09MzcmJihxLnB1c2goWC5zbGljZShodCxwdCkpLChpZT12d3Rba3Q9WC5jaGFyQXQoKytwdCldKSE9bnVsbD9rdD1YLmNoYXJBdCgrK3B0KTppZT1rdD09PSJlIj8iICI6IjAiLChlZT1ldFtrdF0pJiYoa3Q9ZWUoZHQsaWUpKSxxLnB1c2goa3QpLGh0PXB0KzEpO3JldHVybiBxLnB1c2goWC5zbGljZShodCxwdCkpLHEuam9pbigiIil9fWZ1bmN0aW9uIGsoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT12NSgxOTAwLHZvaWQgMCwxKSxwdD1PKHEsWCxkdCs9IiIsMCksaHQsd3Q7aWYocHQhPWR0Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBxKXJldHVybiBuZXcgRGF0ZShxLlEpO2lmKCJzImluIHEpcmV0dXJuIG5ldyBEYXRlKHEucyoxZTMrKCJMImluIHE/cS5MOjApKTtpZihldCYmISgiWiJpbiBxKSYmKHEuWj0wKSwicCJpbiBxJiYocS5IPXEuSCUxMitxLnAqMTIpLHEubT09PXZvaWQgMCYmKHEubT0icSJpbiBxP3EucTowKSwiViJpbiBxKXtpZihxLlY8MXx8cS5WPjUzKXJldHVybiBudWxsOyJ3ImluIHF8fChxLnc9MSksIloiaW4gcT8oaHQ9d1godjUocS55LDAsMSkpLHd0PWh0LmdldFVUQ0RheSgpLGh0PXd0PjR8fHd0PT09MD9veS5jZWlsKGh0KTpveShodCksaHQ9bnkub2Zmc2V0KGh0LChxLlYtMSkqNykscS55PWh0LmdldFVUQ0Z1bGxZZWFyKCkscS5tPWh0LmdldFVUQ01vbnRoKCkscS5kPWh0LmdldFVUQ0RhdGUoKSsocS53KzYpJTcpOihodD1iWCh2NShxLnksMCwxKSksd3Q9aHQuZ2V0RGF5KCksaHQ9d3Q+NHx8d3Q9PT0wP3J5LmNlaWwoaHQpOnJ5KGh0KSxodD10eS5vZmZzZXQoaHQsKHEuVi0xKSo3KSxxLnk9aHQuZ2V0RnVsbFllYXIoKSxxLm09aHQuZ2V0TW9udGgoKSxxLmQ9aHQuZ2V0RGF0ZSgpKyhxLncrNiklNyl9ZWxzZSgiVyJpbiBxfHwiVSJpbiBxKSYmKCJ3ImluIHF8fChxLnc9InUiaW4gcT9xLnUlNzoiVyJpbiBxPzE6MCksd3Q9IloiaW4gcT93WCh2NShxLnksMCwxKSkuZ2V0VVRDRGF5KCk6YlgodjUocS55LDAsMSkpLmdldERheSgpLHEubT0wLHEuZD0iVyJpbiBxPyhxLncrNiklNytxLlcqNy0od3QrNSklNzpxLncrcS5VKjctKHd0KzYpJTcpO3JldHVybiJaImluIHE/KHEuSCs9cS5aLzEwMHwwLHEuTSs9cS5aJTEwMCx3WChxKSk6YlgocSl9fWZ1bmN0aW9uIE8oWCxldCxkdCxxKXtmb3IodmFyIHB0PTAsaHQ9ZXQubGVuZ3RoLHd0PWR0Lmxlbmd0aCxrdCxpZTtwdDxodDspe2lmKHE+PXd0KXJldHVybi0xO2lmKGt0PWV0LmNoYXJDb2RlQXQocHQrKyksa3Q9PT0zNyl7aWYoa3Q9ZXQuY2hhckF0KHB0KyspLGllPUNba3QgaW4gdnd0P2V0LmNoYXJBdChwdCsrKTprdF0sIWllfHwocT1pZShYLGR0LHEpKTwwKXJldHVybi0xfWVsc2UgaWYoa3QhPWR0LmNoYXJDb2RlQXQocSsrKSlyZXR1cm4tMX1yZXR1cm4gcX1mdW5jdGlvbiBEKFgsZXQsZHQpe3ZhciBxPWMuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnA9dVtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCKFgsZXQsZHQpe3ZhciBxPXAuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKFgsZXQsZHQpe3ZhciBxPWguZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZltxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKFgsZXQsZHQpe3ZhciBxPXkuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09eFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKFgsZXQsZHQpe3ZhciBxPWcuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09X1txWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKFgsZXQsZHQpe3JldHVybiBPKFgsdCxldCxkdCl9ZnVuY3Rpb24geihYLGV0LGR0KXtyZXR1cm4gTyhYLHIsZXQsZHQpfWZ1bmN0aW9uIFUoWCxldCxkdCl7cmV0dXJuIE8oWCxuLGV0LGR0KX1mdW5jdGlvbiBXKFgpe3JldHVybiBhW1guZ2V0RGF5KCldfWZ1bmN0aW9uIFooWCl7cmV0dXJuIG9bWC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoWCl7cmV0dXJuIGxbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBvdChYKXtyZXR1cm4gc1tYLmdldE1vbnRoKCldfWZ1bmN0aW9uIHN0KFgpe3JldHVybiBpWysoWC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KFgpe3JldHVybiAxK35+KFguZ2V0TW9udGgoKS8zKX1mdW5jdGlvbiBidChYKXtyZXR1cm4gYVtYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChYKXtyZXR1cm4gb1tYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBsdChYKXtyZXR1cm4gbFtYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KFgpe3JldHVybiBzW1guZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gX3QoWCl7cmV0dXJuIGlbKyhYLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gY3QoWCl7cmV0dXJuIDErfn4oWC5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsYik7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSxwYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMSk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsUyk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNQYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMCk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fX19dmFyIHZ3dD17Ii0iOiIiLF86IiAiLDA6IjAifSx4bz0vXlxzKlxkKy8seE1lPS9eJS8sYk1lPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBCcihlLHQscil7dmFyIG49ZTwwPyItIjoiIixpPShuPy1lOmUpKyIiLG89aS5sZW5ndGg7cmV0dXJuIG4rKG88cj9uZXcgQXJyYXkoci1vKzEpLmpvaW4odCkraTppKX1mdW5jdGlvbiB3TWUoZSl7cmV0dXJuIGUucmVwbGFjZShiTWUsIlxcJCYiKX1mdW5jdGlvbiB4NShlKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrZS5tYXAod01lKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gYjUoZSl7Zm9yKHZhciB0PXt9LHI9LTEsbj1lLmxlbmd0aDsrK3I8bjspdFtlW3JdLnRvTG93ZXJDYXNlKCldPXI7cmV0dXJuIHR9ZnVuY3Rpb24gU01lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE1NZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBFTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVE1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIENNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB4d3QoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrNCkpO3JldHVybiBuPyhlLnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYnd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS55PStuWzBdKygrblswXT42OD8xOTAwOjJlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQU1lKGUsdCxyKXt2YXIgbj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuWj1uWzFdPzA6LShuWzJdKyhuWzNdfHwiMDAiKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUE1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS5xPW5bMF0qMy0zLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIElNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUubT1uWzBdLTEscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gd3d0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUubT0wLGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBTd3QoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24ga01lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuUz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBOTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRE1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8oZS5MPU1hdGguZmxvb3IoblswXS8xZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE9NZShlLHQscil7dmFyIG49eE1lLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuP3IrblswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gek1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocikpO3JldHVybiBuPyhlLlE9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRk1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocikpO3JldHVybiBuPyhlLnM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTXd0KGUsdCl7cmV0dXJuIEJyKGUuZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gQk1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIEhNZShlLHQpe3JldHVybiBCcihlLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gVk1lKGUsdCl7cmV0dXJuIEJyKDErdHkuY291bnQoR2goZSksZSksdCwzKX1mdW5jdGlvbiBQd3QoZSx0KXtyZXR1cm4gQnIoZS5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIFVNZShlLHQpe3JldHVybiBQd3QoZSx0KSsiMDAwIn1mdW5jdGlvbiBxTWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBHTWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBXTWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBZTWUoZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIGpNZShlLHQpe3JldHVybiBCcihyZy5jb3VudChHaChlKS0xLGUpLHQsMil9ZnVuY3Rpb24gSXd0KGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ+PTR8fHQ9PT0wP3pwKGUpOnpwLmNlaWwoZSl9ZnVuY3Rpb24gWE1lKGUsdCl7cmV0dXJuIGU9SXd0KGUpLEJyKHpwLmNvdW50KEdoKGUpLGUpKyhHaChlKS5nZXREYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gJE1lKGUpe3JldHVybiBlLmdldERheSgpfWZ1bmN0aW9uIEtNZShlLHQpe3JldHVybiBCcihyeS5jb3VudChHaChlKS0xLGUpLHQsMil9ZnVuY3Rpb24gWk1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBKTWUoZSx0KXtyZXR1cm4gZT1Jd3QoZSksQnIoZS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFFNZShlLHQpe3JldHVybiBCcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gdEVlKGUsdCl7dmFyIHI9ZS5nZXREYXkoKTtyZXR1cm4gZT1yPj00fHxyPT09MD96cChlKTp6cC5jZWlsKGUpLEJyKGUuZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBlRWUoZSl7dmFyIHQ9ZS5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybih0PjA/Ii0iOih0Kj0tMSwiKyIpKStCcih0LzYwfDAsIjAiLDIpK0JyKHQlNjAsIjAiLDIpfWZ1bmN0aW9uIEV3dChlLHQpe3JldHVybiBCcihlLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIHJFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ0hvdXJzKCksdCwyKX1mdW5jdGlvbiBuRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIGlFZShlLHQpe3JldHVybiBCcigxK255LmNvdW50KFdoKGUpLGUpLHQsMyl9ZnVuY3Rpb24gTHd0KGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBvRWUoZSx0KXtyZXR1cm4gTHd0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gYUVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDTW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gc0VlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDTWludXRlcygpLHQsMil9ZnVuY3Rpb24gbEVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gY0VlKGUpe3ZhciB0PWUuZ2V0VVRDRGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiB1RWUoZSx0KXtyZXR1cm4gQnIobmcuY291bnQoV2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIGt3dChlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHx0PT09MD9GcChlKTpGcC5jZWlsKGUpfWZ1bmN0aW9uIGhFZShlLHQpe3JldHVybiBlPWt3dChlKSxCcihGcC5jb3VudChXaChlKSxlKSsoV2goZSkuZ2V0VVRDRGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIGZFZShlKXtyZXR1cm4gZS5nZXRVVENEYXkoKX1mdW5jdGlvbiBwRWUoZSx0KXtyZXR1cm4gQnIob3kuY291bnQoV2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIGRFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gbUVlKGUsdCl7cmV0dXJuIGU9a3d0KGUpLEJyKGUuZ2V0VVRDRnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBnRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIF9FZShlLHQpe3ZhciByPWUuZ2V0VVRDRGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/RnAoZSk6RnAuY2VpbChlKSxCcihlLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24geUVlKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBUd3QoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gQ3d0KGUpe3JldHVybitlfWZ1bmN0aW9uIEF3dChlKXtyZXR1cm4gTWF0aC5mbG9vcigrZS8xZTMpfXZhciBXYixTNSxTWCxheSxNNTt3OCh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO2Z1bmN0aW9uIHc4KGUpe3JldHVybiBXYj13NShlKSxTNT1XYi5mb3JtYXQsU1g9V2IucGFyc2UsYXk9V2IudXRjRm9ybWF0LE01PVdiLnV0Y1BhcnNlLFdifXZhciBNWD0iJVktJW0tJWRUJUg6JU06JVMuJUxaIjtmdW5jdGlvbiB2RWUoZSl7cmV0dXJuIGUudG9JU09TdHJpbmcoKX12YXIgeEVlPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nP3ZFZTpheShNWCksUnd0PXhFZTtmdW5jdGlvbiBiRWUoZSl7dmFyIHQ9bmV3IERhdGUoZSk7cmV0dXJuIGlzTmFOKHQpP251bGw6dH12YXIgd0VlPStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/YkVlOk01KE1YKSxOd3Q9d0VlO3ZhciBFNT0xZTMsVDU9RTUqNjAsQzU9VDUqNjAsQTU9QzUqMjQsU0VlPUE1KjcsRHd0PUE1KjMwLEVYPUE1KjM2NTtmdW5jdGlvbiBNRWUoZSl7cmV0dXJuIG5ldyBEYXRlKGUpfWZ1bmN0aW9uIEVFZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/K2U6K25ldyBEYXRlKCtlKX1mdW5jdGlvbiBTOChlLHQscixuLGksbyxhLHMsbCl7dmFyIGM9bTUoaWksaWkpLHU9Yy5pbnZlcnQsaD1jLmRvbWFpbixmPWwoIi4lTCIpLHA9bCgiOiVTIiksZD1sKCIlSTolTSIpLGc9bCgiJUkgJXAiKSxfPWwoIiVhICVkIikseT1sKCIlYiAlZCIpLHg9bCgiJUIiKSxiPWwoIiVZIiksUz1bW2EsMSxFNV0sW2EsNSw1KkU1XSxbYSwxNSwxNSpFNV0sW2EsMzAsMzAqRTVdLFtvLDEsVDVdLFtvLDUsNSpUNV0sW28sMTUsMTUqVDVdLFtvLDMwLDMwKlQ1XSxbaSwxLEM1XSxbaSwzLDMqQzVdLFtpLDYsNipDNV0sW2ksMTIsMTIqQzVdLFtuLDEsQTVdLFtuLDIsMipBNV0sW3IsMSxTRWVdLFt0LDEsRHd0XSxbdCwzLDMqRHd0XSxbZSwxLEVYXV07ZnVuY3Rpb24gQyhrKXtyZXR1cm4oYShrKTxrP2Y6byhrKTxrP3A6aShrKTxrP2Q6bihrKTxrP2c6dChrKTxrP3Ioayk8az9fOnk6ZShrKTxrP3g6Yikoayl9ZnVuY3Rpb24gUChrLE8sRCxCKXtpZihrPT1udWxsJiYoaz0xMCksdHlwZW9mIGs9PSJudW1iZXIiKXt2YXIgST1NYXRoLmFicyhELU8pL2ssTD1vYihmdW5jdGlvbihSKXtyZXR1cm4gUlsyXX0pLnJpZ2h0KFMsSSk7TD09PVMubGVuZ3RoPyhCPXRsKE8vRVgsRC9FWCxrKSxrPWUpOkw/KEw9U1tJL1NbTC0xXVsyXTxTW0xdWzJdL0k/TC0xOkxdLEI9TFsxXSxrPUxbMF0pOihCPU1hdGgubWF4KHRsKE8sRCxrKSwxKSxrPXMpfXJldHVybiBCPT1udWxsP2s6ay5ldmVyeShCKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBEYXRlKHUoaykpfSxjLmRvbWFpbj1mdW5jdGlvbihrKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKFhfLmNhbGwoayxFRWUpKTpoKCkubWFwKE1FZSl9LGMudGlja3M9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCksQj1EWzBdLEk9RFtELmxlbmd0aC0xXSxMPUk8QixSO3JldHVybiBMJiYoUj1CLEI9SSxJPVIpLFI9UChrLEIsSSxPKSxSPVI/Ui5yYW5nZShCLEkrMSk6W10sTD9SLnJldmVyc2UoKTpSfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oayxPKXtyZXR1cm4gTz09bnVsbD9DOmwoTyl9LGMubmljZT1mdW5jdGlvbihrLE8pe3ZhciBEPWgoKTtyZXR1cm4oaz1QKGssRFswXSxEW0QubGVuZ3RoLTFdLE8pKT9oKHU4KEQsaykpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBxaChjLFM4KGUsdCxyLG4saSxvLGEscyxsKSl9LGN9ZnVuY3Rpb24gWWIoKXtyZXR1cm4gZmkuYXBwbHkoUzgoR2gseTgscmcsdHksXzgsZzgsUV8sWl8sUzUpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIE93dCgpe3JldHVybiBmaS5hcHBseShTOChXaCxiOCxuZyxueSx4OCx2OCxRXyxaXyxheSkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTTgoKXt2YXIgZT0wLHQ9MSxyLG4saSxvLGE9aWkscz0hMSxsO2Z1bmN0aW9uIGModSl7cmV0dXJuIGlzTmFOKHU9K3UpP2w6YShpPT09MD8uNToodT0obyh1KS1yKSppLHM/TWF0aC5tYXgoMCxNYXRoLm1pbigxLHUpKTp1KSl9cmV0dXJuIGMuZG9tYWluPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW8oZT0rdVswXSksbj1vKHQ9K3VbMV0pLGk9cj09PW4/MDoxLyhuLXIpLGMpOltlLHRdfSxjLmNsYW1wPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSEhdSxjKTpzfSxjLmludGVycG9sYXRvcj1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT11LGMpOmF9LGMudW5rbm93bj1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD11LGMpOmx9LGZ1bmN0aW9uKHUpe3JldHVybiBvPXUscj11KGUpLG49dSh0KSxpPXI9PT1uPzA6MS8obi1yKSxjfX1mdW5jdGlvbiBCcChlLHQpe3JldHVybiB0LmRvbWFpbihlLmRvbWFpbigpKS5pbnRlcnBvbGF0b3IoZS5pbnRlcnBvbGF0b3IoKSkuY2xhbXAoZS5jbGFtcCgpKS51bmtub3duKGUudW5rbm93bigpKX1mdW5jdGlvbiBFOCgpe3ZhciBlPWlsKE04KCkoaWkpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsRTgoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBUWCgpe3ZhciBlPWc1KE04KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxUWCgpKS5iYXNlKGUuYmFzZSgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIENYKCl7dmFyIGU9XzUoTTgoKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLENYKCkpLmNvbnN0YW50KGUuY29uc3RhbnQoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBUOCgpe3ZhciBlPXk1KE04KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxUOCgpKS5leHBvbmVudChlLmV4cG9uZW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gend0KCl7cmV0dXJuIFQ4LmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gQzgoKXt2YXIgZT1bXSx0PWlpO2Z1bmN0aW9uIHIobil7aWYoIWlzTmFOKG49K24pKXJldHVybiB0KCh5cyhlLG4pLTEpLyhlLmxlbmd0aC0xKSl9cmV0dXJuIHIuZG9tYWluPWZ1bmN0aW9uKG4pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXTtmb3IodmFyIGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlhPW5baV0sYSE9bnVsbCYmIWlzTmFOKGE9K2EpJiZlLnB1c2goYSk7cmV0dXJuIGUuc29ydChvYSkscn0sci5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixyKTp0fSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQzgodCkuZG9tYWluKGUpfSxzYy5hcHBseShyLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQTgoKXt2YXIgZT0wLHQ9LjUscj0xLG4saSxvLGEscyxsPWlpLGMsdT0hMSxoO2Z1bmN0aW9uIGYocCl7cmV0dXJuIGlzTmFOKHA9K3ApP2g6KHA9LjUrKChwPStjKHApKS1pKSoocDxpP2E6cyksbCh1P01hdGgubWF4KDAsTWF0aC5taW4oMSxwKSk6cCkpfXJldHVybiBmLmRvbWFpbj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jKGU9K3BbMF0pLGk9Yyh0PStwWzFdKSxvPWMocj0rcFsyXSksYT1uPT09aT8wOi41LyhpLW4pLHM9aT09PW8/MDouNS8oby1pKSxmKTpbZSx0LHJdfSxmLmNsYW1wPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSEhcCxmKTp1fSxmLmludGVycG9sYXRvcj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1wLGYpOmx9LGYudW5rbm93bj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1wLGYpOmh9LGZ1bmN0aW9uKHApe3JldHVybiBjPXAsbj1wKGUpLGk9cCh0KSxvPXAociksYT1uPT09aT8wOi41LyhpLW4pLHM9aT09PW8/MDouNS8oby1pKSxmfX1mdW5jdGlvbiBQOCgpe3ZhciBlPWlsKEE4KCkoaWkpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsUDgoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBBWCgpe3ZhciBlPWc1KEE4KCkpLmRvbWFpbihbLjEsMSwxMF0pO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxBWCgpKS5iYXNlKGUuYmFzZSgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIFBYKCl7dmFyIGU9XzUoQTgoKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLFBYKCkpLmNvbnN0YW50KGUuY29uc3RhbnQoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBJOCgpe3ZhciBlPXk1KEE4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxJOCgpKS5leHBvbmVudChlLmV4cG9uZW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRnd0KCl7cmV0dXJuIEk4LmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gdGUoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLzZ8MCxyPW5ldyBBcnJheSh0KSxuPTA7bjx0OylyW25dPSIjIitlLnNsaWNlKG4qNiwrK24qNik7cmV0dXJuIHJ9dmFyIGpiPXRlKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKTt2YXIgQnd0PXRlKCI3ZmM5N2ZiZWFlZDRmZGMwODZmZmZmOTkzODZjYjBmMDAyN2ZiZjViMTc2NjY2NjYiKTt2YXIgSHd0PXRlKCIxYjllNzdkOTVmMDI3NTcwYjNlNzI5OGE2NmE2MWVlNmFiMDJhNjc2MWQ2NjY2NjYiKTt2YXIgVnd0PXRlKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKTt2YXIgVXd0PXRlKCJmYmI0YWViM2NkZTNjY2ViYzVkZWNiZTRmZWQ5YTZmZmZmY2NlNWQ4YmRmZGRhZWNmMmYyZjIiKTt2YXIgcXd0PXRlKCJiM2UyY2RmZGNkYWNjYmQ1ZThmNGNhZTRlNmY1YzlmZmYyYWVmMWUyY2NjY2NjY2MiKTt2YXIgR3d0PXRlKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKTt2YXIgV3d0PXRlKCI2NmMyYTVmYzhkNjI4ZGEwY2JlNzhhYzNhNmQ4NTRmZmQ5MmZlNWM0OTRiM2IzYjMiKTt2YXIgWXd0PXRlKCI4ZGQzYzdmZmZmYjNiZWJhZGFmYjgwNzI4MGIxZDNmZGI0NjJiM2RlNjlmY2NkZTVkOWQ5ZDliYzgwYmRjY2ViYzVmZmVkNmYiKTt2YXIgand0PXRlKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKTtmdW5jdGlvbiBJZShlKXtyZXR1cm4gY0woZVtlLmxlbmd0aC0xXSl9dmFyIElYPW5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcCh0ZSksWHd0PUllKElYKTt2YXIgTFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiYWY4ZGMzZjdmN2Y3N2ZiZjdiIiwiN2IzMjk0YzJhNWNmYTZkYmEwMDA4ODM3IiwiN2IzMjk0YzJhNWNmZjdmN2Y3YTZkYmEwMDA4ODM3IiwiNzYyYTgzYWY4ZGMzZTdkNGU4ZDlmMGQzN2ZiZjdiMWI3ODM3IiwiNzYyYTgzYWY4ZGMzZTdkNGU4ZjdmN2Y3ZDlmMGQzN2ZiZjdiMWI3ODM3IiwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3IiwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3IiwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiIiwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiIikubWFwKHRlKSwkd3Q9SWUoTFgpO3ZhciBrWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlOWEzYzlmN2Y3ZjdhMWQ3NmEiLCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjYiLCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjYiLCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiKS5tYXAodGUpLEt3dD1JZShrWCk7dmFyIFJYPW5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcCh0ZSksWnd0PUllKFJYKTt2YXIgTlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZjdmN2Y3NjdhOWNmIiwiY2EwMDIwZjRhNTgyOTJjNWRlMDU3MWIwIiwiY2EwMDIwZjRhNTgyZjdmN2Y3OTJjNWRlMDU3MWIwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZDFlNWYwNjdhOWNmMjE2NmFjIiwiYjIxODJiZWY4YTYyZmRkYmM3ZjdmN2Y3ZDFlNWYwNjdhOWNmMjE2NmFjIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxIikubWFwKHRlKSxKd3Q9SWUoTlgpO3ZhciBEWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmZmZmZmY5OTk5OTkiLCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDAiLCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDAiLCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiKS5tYXAodGUpLFF3dD1JZShEWCk7dmFyIE9YPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcCh0ZSksdFN0PUllKE9YKTt2YXIgelg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTFjZjYwIiwiZDcxOTFjZmRhZTYxYTZkOTZhMWE5NjQxIiwiZDcxOTFjZmRhZTYxZmZmZmJmYTZkOTZhMWE5NjQxIiwiZDczMDI3ZmM4ZDU5ZmVlMDhiZDllZjhiOTFjZjYwMWE5ODUwIiwiZDczMDI3ZmM4ZDU5ZmVlMDhiZmZmZmJmZDllZjhiOTFjZjYwMWE5ODUwIiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwIiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwIiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwMDA2ODM3IiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwMDA2ODM3IikubWFwKHRlKSxlU3Q9SWUoelgpO3ZhciBGWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5OWQ1OTQiLCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmEiLCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiKS5tYXAodGUpLHJTdD1JZShGWCk7dmFyIEJYPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcCh0ZSksblN0PUllKEJYKTt2YXIgSFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBlY2Y0OWViY2RhODg1NmE3IiwiZWRmOGZiYjNjZGUzOGM5NmM2ODg0MTlkIiwiZWRmOGZiYjNjZGUzOGM5NmM2ODg1NmE3ODEwZjdjIiwiZWRmOGZiYmZkM2U2OWViY2RhOGM5NmM2ODg1NmE3ODEwZjdjIiwiZWRmOGZiYmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkNmUwMTZiIiwiZjdmY2ZkZTBlY2Y0YmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkNmUwMTZiIiwiZjdmY2ZkZTBlY2Y0YmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkODEwZjdjNGQwMDRiIikubWFwKHRlKSxpU3Q9SWUoSFgpO3ZhciBWWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGYzZGJhOGRkYjU0M2EyY2EiLCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmUiLCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODEiKS5tYXAodGUpLG9TdD1JZShWWCk7dmFyIFVYPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcCh0ZSksYVN0PUllKFVYKTt2YXIgcVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlMmYwYTZiZGRiMWM5MDk5IiwiZjZlZmY3YmRjOWUxNjdhOWNmMDI4MThhIiwiZjZlZmY3YmRjOWUxNjdhOWNmMWM5MDk5MDE2YzU5IiwiZjZlZmY3ZDBkMWU2YTZiZGRiNjdhOWNmMWM5MDk5MDE2YzU5IiwiZjZlZmY3ZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2NDUwIiwiZmZmN2ZiZWNlMmYwZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2NDUwIiwiZmZmN2ZiZWNlMmYwZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2YzU5MDE0NjM2IikubWFwKHRlKSxzU3Q9SWUocVgpO3ZhciBHWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2U3ZjJhNmJkZGIyYjhjYmUiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjAiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NTgiKS5tYXAodGUpLGxTdD1JZShHWCk7dmFyIFdYPW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcCh0ZSksY1N0PUllKFdYKTt2YXIgWVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmRlMGRkZmE5ZmI1YzUxYjhhIiwiZmVlYmUyZmJiNGI5Zjc2OGExYWUwMTdlIiwiZmVlYmUyZmJiNGI5Zjc2OGExYzUxYjhhN2EwMTc3IiwiZmVlYmUyZmNjNWMwZmE5ZmI1Zjc2OGExYzUxYjhhN2EwMTc3IiwiZmVlYmUyZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3IiwiZmZmN2YzZmRlMGRkZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3IiwiZmZmN2YzZmRlMGRkZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3NDkwMDZhIikubWFwKHRlKSx1U3Q9SWUoWVgpO3ZhciBqWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlZGY4YjE3ZmNkYmIyYzdmYjgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYTgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNTgiKS5tYXAodGUpLGhTdD1JZShqWCk7dmFyIFhYPW5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcCh0ZSksZlN0PUllKFhYKTt2YXIgJFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZmN2JjZmVjNDRmZDk1ZjBlIiwiZmZmZmQ0ZmVkOThlZmU5OTI5Y2M0YzAyIiwiZmZmZmQ0ZmVkOThlZmU5OTI5ZDk1ZjBlOTkzNDA0IiwiZmZmZmQ0ZmVlMzkxZmVjNDRmZmU5OTI5ZDk1ZjBlOTkzNDA0IiwiZmZmZmQ0ZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOGMyZDA0IiwiZmZmZmU1ZmZmN2JjZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOGMyZDA0IiwiZmZmZmU1ZmZmN2JjZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOTkzNDA0NjYyNTA2IikubWFwKHRlKSxwU3Q9SWUoJFgpO3ZhciBLWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAodGUpLGRTdD1JZShLWCk7dmFyIFpYPW5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcCh0ZSksbVN0PUllKFpYKTt2YXIgSlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTVmNWUwYTFkOTliMzFhMzU0IiwiZWRmOGU5YmFlNGIzNzRjNDc2MjM4YjQ1IiwiZWRmOGU5YmFlNGIzNzRjNDc2MzFhMzU0MDA2ZDJjIiwiZWRmOGU5YzdlOWMwYTFkOTliNzRjNDc2MzFhMzU0MDA2ZDJjIiwiZWRmOGU5YzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA1YTMyIiwiZjdmY2Y1ZTVmNWUwYzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA1YTMyIiwiZjdmY2Y1ZTVmNWUwYzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA2ZDJjMDA0NDFiIikubWFwKHRlKSxnU3Q9SWUoSlgpO3ZhciBRWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAodGUpLF9TdD1JZShRWCk7dmFyIHQkPW5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcCh0ZSkseVN0PUllKHQkKTt2YXIgZSQ9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlMGQyZmM5MjcyZGUyZDI2IiwiZmVlNWQ5ZmNhZTkxZmI2YTRhY2IxODFkIiwiZmVlNWQ5ZmNhZTkxZmI2YTRhZGUyZDI2YTUwZjE1IiwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZGUyZDI2YTUwZjE1IiwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkIiwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkIiwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkYTUwZjE1NjcwMDBkIikubWFwKHRlKSx2U3Q9SWUoZSQpO3ZhciByJD1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAodGUpLHhTdD1JZShyJCk7ZnVuY3Rpb24gYlN0KGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoLTQuNTQtZSooMzUuMzQtZSooMjM4MS43My1lKig2NDAyLjctZSooNzAyNC43Mi1lKjI3MTAuNTcpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzMi40OStlKigxNzAuNzMrZSooNTIuODItZSooMTMxLjQ2LWUqKDE3Ni41OC1lKjY3LjM3KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoODEuMjQrZSooNDQyLjM2LWUqKDI0ODIuNDMtZSooNjE2Ny4yNC1lKig2NjE0Ljk0LWUqMjQ3NS42NykpKSkpKSkrIikifXZhciB3U3Q9RV8obGEoMzAwLC41LDApLGxhKC0yNDAsLjUsMSkpO3ZhciBTU3Q9RV8obGEoLTEwMCwuNzUsLjM1KSxsYSg4MCwxLjUsLjgpKSxNU3Q9RV8obGEoMjYwLC43NSwuMzUpLGxhKDgwLDEuNSwuOCkpLEw4PWxhKCk7ZnVuY3Rpb24gRVN0KGUpeyhlPDB8fGU+MSkmJihlLT1NYXRoLmZsb29yKGUpKTt2YXIgdD1NYXRoLmFicyhlLS41KTtyZXR1cm4gTDguaD0zNjAqZS0xMDAsTDgucz0xLjUtMS41KnQsTDgubD0uOC0uOSp0LEw4KyIifXZhciBrOD1jdSgpLFRFZT1NYXRoLlBJLzMsQ0VlPU1hdGguUEkqMi8zO2Z1bmN0aW9uIFRTdChlKXt2YXIgdDtyZXR1cm4gZT0oLjUtZSkqTWF0aC5QSSxrOC5yPTI1NSoodD1NYXRoLnNpbihlKSkqdCxrOC5nPTI1NSoodD1NYXRoLnNpbihlK1RFZSkpKnQsazguYj0yNTUqKHQ9TWF0aC5zaW4oZStDRWUpKSp0LGs4KyIifWZ1bmN0aW9uIENTdChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDM0LjYxK2UqKDExNzIuMzMtZSooMTA3OTMuNTYtZSooMzMzMDAuMTItZSooMzgzOTQuNDktZSoxNDgyNS4wNSkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDIzLjMxK2UqKDU1Ny4zMytlKigxMjI1LjMzLWUqKDM1NzQuOTYtZSooMTA3My43NytlKjcwNy41NikpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI3LjIrZSooMzIxMS4xLWUqKDE1MzI3Ljk3LWUqKDI3ODE0LWUqKDIyNTY5LjE4LWUqNjgzOC42NikpKSkpKSkrIikifWZ1bmN0aW9uIFI4KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZVtNYXRoLm1heCgwLE1hdGgubWluKHQtMSxNYXRoLmZsb29yKHIqdCkpKV19fXZhciBBU3Q9UjgodGUoIjQ0MDE1NDQ0MDI1NjQ1MDQ1NzQ1MDU1OTQ2MDc1YTQ2MDg1YzQ2MGE1ZDQ2MGI1ZTQ3MGQ2MDQ3MGU2MTQ3MTA2MzQ3MTE2NDQ3MTM2NTQ4MTQ2NzQ4MTY2ODQ4MTc2OTQ4MTg2YTQ4MWE2YzQ4MWI2ZDQ4MWM2ZTQ4MWQ2ZjQ4MWY3MDQ4MjA3MTQ4MjE3MzQ4MjM3NDQ4MjQ3NTQ4MjU3NjQ4MjY3NzQ4Mjg3ODQ4Mjk3OTQ3MmE3YTQ3MmM3YTQ3MmQ3YjQ3MmU3YzQ3MmY3ZDQ2MzA3ZTQ2MzI3ZTQ2MzM3ZjQ2MzQ4MDQ1MzU4MTQ1Mzc4MTQ1Mzg4MjQ0Mzk4MzQ0M2E4MzQ0M2I4NDQzM2Q4NDQzM2U4NTQyM2Y4NTQyNDA4NjQyNDE4NjQxNDI4NzQxNDQ4NzQwNDU4ODQwNDY4ODNmNDc4ODNmNDg4OTNlNDk4OTNlNGE4OTNlNGM4YTNkNGQ4YTNkNGU4YTNjNGY4YTNjNTA4YjNiNTE4YjNiNTI4YjNhNTM4YjNhNTQ4YzM5NTU4YzM5NTY4YzM4NTg4YzM4NTk4YzM3NWE4YzM3NWI4ZDM2NWM4ZDM2NWQ4ZDM1NWU4ZDM1NWY4ZDM0NjA4ZDM0NjE4ZDMzNjI4ZDMzNjM4ZDMyNjQ4ZTMyNjU4ZTMxNjY4ZTMxNjc4ZTMxNjg4ZTMwNjk4ZTMwNmE4ZTJmNmI4ZTJmNmM4ZTJlNmQ4ZTJlNmU4ZTJlNmY4ZTJkNzA4ZTJkNzE4ZTJjNzE4ZTJjNzI4ZTJjNzM4ZTJiNzQ4ZTJiNzU4ZTJhNzY4ZTJhNzc4ZTJhNzg4ZTI5Nzk4ZTI5N2E4ZTI5N2I4ZTI4N2M4ZTI4N2Q4ZTI3N2U4ZTI3N2Y4ZTI3ODA4ZTI2ODE4ZTI2ODI4ZTI2ODI4ZTI1ODM4ZTI1ODQ4ZTI1ODU4ZTI0ODY4ZTI0ODc4ZTIzODg4ZTIzODk4ZTIzOGE4ZDIyOGI4ZDIyOGM4ZDIyOGQ4ZDIxOGU4ZDIxOGY4ZDIxOTA4ZDIxOTE4YzIwOTI4YzIwOTI4YzIwOTM4YzFmOTQ4YzFmOTU4YjFmOTY4YjFmOTc4YjFmOTg4YjFmOTk4YTFmOWE4YTFlOWI4YTFlOWM4OTFlOWQ4OTFmOWU4OTFmOWY4ODFmYTA4ODFmYTE4ODFmYTE4NzFmYTI4NzIwYTM4NjIwYTQ4NjIxYTU4NTIxYTY4NTIyYTc4NTIyYTg4NDIzYTk4MzI0YWE4MzI1YWI4MjI1YWM4MjI2YWQ4MTI3YWQ4MTI4YWU4MDI5YWY3ZjJhYjA3ZjJjYjE3ZTJkYjI3ZDJlYjM3YzJmYjQ3YzMxYjU3YjMyYjY3YTM0YjY3OTM1Yjc3OTM3Yjg3ODM4Yjk3NzNhYmE3NjNiYmI3NTNkYmM3NDNmYmM3MzQwYmQ3MjQyYmU3MTQ0YmY3MDQ2YzA2ZjQ4YzE2ZTRhYzE2ZDRjYzI2YzRlYzM2YjUwYzQ2YTUyYzU2OTU0YzU2ODU2YzY2NzU4Yzc2NTVhYzg2NDVjYzg2MzVlYzk2MjYwY2E2MDYzY2I1ZjY1Y2I1ZTY3Y2M1YzY5Y2Q1YjZjY2Q1YTZlY2U1ODcwY2Y1NzczZDA1Njc1ZDA1NDc3ZDE1MzdhZDE1MTdjZDI1MDdmZDM0ZTgxZDM0ZDg0ZDQ0Yjg2ZDU0OTg5ZDU0ODhiZDY0NjhlZDY0NTkwZDc0MzkzZDc0MTk1ZDg0MDk4ZDgzZTliZDkzYzlkZDkzYmEwZGEzOWEyZGEzN2E1ZGIzNmE4ZGIzNGFhZGMzMmFkZGMzMGIwZGQyZmIyZGQyZGI1ZGUyYmI4ZGUyOWJhZGUyOGJkZGYyNmMwZGYyNWMyZGYyM2M1ZTAyMWM4ZTAyMGNhZTExZmNkZTExZGQwZTExY2QyZTIxYmQ1ZTIxYWQ4ZTIxOWRhZTMxOWRkZTMxOGRmZTMxOGUyZTQxOGU1ZTQxOWU3ZTQxOWVhZTUxYWVjZTUxYmVmZTUxY2YxZTUxZGY0ZTYxZWY2ZTYyMGY4ZTYyMWZiZTcyM2ZkZTcyNSIpKSxQU3Q9UjgodGUoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSxJU3Q9UjgodGUoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxMU3Q9UjgodGUoIjBkMDg4NzEwMDc4ODEzMDc4OTE2MDc4YTE5MDY4YzFiMDY4ZDFkMDY4ZTIwMDY4ZjIyMDY5MDI0MDY5MTI2MDU5MTI4MDU5MjJhMDU5MzJjMDU5NDJlMDU5NTJmMDU5NjMxMDU5NzMzMDU5NzM1MDQ5ODM3MDQ5OTM4MDQ5YTNhMDQ5YTNjMDQ5YjNlMDQ5YzNmMDQ5YzQxMDQ5ZDQzMDM5ZTQ0MDM5ZTQ2MDM5ZjQ4MDM5ZjQ5MDNhMDRiMDNhMTRjMDJhMTRlMDJhMjUwMDJhMjUxMDJhMzUzMDJhMzU1MDJhNDU2MDFhNDU4MDFhNDU5MDFhNTViMDFhNTVjMDFhNjVlMDFhNjYwMDFhNjYxMDBhNzYzMDBhNzY0MDBhNzY2MDBhNzY3MDBhODY5MDBhODZhMDBhODZjMDBhODZlMDBhODZmMDBhODcxMDBhODcyMDFhODc0MDFhODc1MDFhODc3MDFhODc4MDFhODdhMDJhODdiMDJhODdkMDNhODdlMDNhODgwMDRhODgxMDRhNzgzMDVhNzg0MDVhNzg2MDZhNjg3MDdhNjg4MDhhNjhhMDlhNThiMGFhNThkMGJhNThlMGNhNDhmMGRhNDkxMGVhMzkyMGZhMzk0MTBhMjk1MTFhMTk2MTNhMTk4MTRhMDk5MTU5ZjlhMTY5ZjljMTc5ZTlkMTg5ZDllMTk5ZGEwMWE5Y2ExMWI5YmEyMWQ5YWEzMWU5YWE1MWY5OWE2MjA5OGE3MjE5N2E4MjI5NmFhMjM5NWFiMjQ5NGFjMjY5NGFkMjc5M2FlMjg5MmIwMjk5MWIxMmE5MGIyMmI4ZmIzMmM4ZWI0MmU4ZGI1MmY4Y2I2MzA4YmI3MzE4YWI4MzI4OWJhMzM4OGJiMzQ4OGJjMzU4N2JkMzc4NmJlMzg4NWJmMzk4NGMwM2E4M2MxM2I4MmMyM2M4MWMzM2Q4MGM0M2U3ZmM1NDA3ZWM2NDE3ZGM3NDI3Y2M4NDM3YmM5NDQ3YWNhNDU3YWNiNDY3OWNjNDc3OGNjNDk3N2NkNGE3NmNlNGI3NWNmNGM3NGQwNGQ3M2QxNGU3MmQyNGY3MWQzNTE3MWQ0NTI3MGQ1NTM2ZmQ1NTQ2ZWQ2NTU2ZGQ3NTY2Y2Q4NTc2YmQ5NTg2YWRhNWE2YWRhNWI2OWRiNWM2OGRjNWQ2N2RkNWU2NmRlNWY2NWRlNjE2NGRmNjI2M2UwNjM2M2UxNjQ2MmUyNjU2MWUyNjY2MGUzNjg1ZmU0Njk1ZWU1NmE1ZGU1NmI1ZGU2NmM1Y2U3NmU1YmU3NmY1YWU4NzA1OWU5NzE1OGU5NzI1N2VhNzQ1N2ViNzU1NmViNzY1NWVjNzc1NGVkNzk1M2VkN2E1MmVlN2I1MWVmN2M1MWVmN2U1MGYwN2Y0ZmYwODA0ZWYxODE0ZGYxODM0Y2YyODQ0YmYzODU0YmYzODc0YWY0ODg0OWY0ODk0OGY1OGI0N2Y1OGM0NmY2OGQ0NWY2OGY0NGY3OTA0NGY3OTE0M2Y3OTM0MmY4OTQ0MWY4OTU0MGY5OTczZmY5OTgzZWY5OWEzZWZhOWIzZGZhOWMzY2ZhOWUzYmZiOWYzYWZiYTEzOWZiYTIzOGZjYTMzOGZjYTUzN2ZjYTYzNmZjYTgzNWZjYTkzNGZkYWIzM2ZkYWMzM2ZkYWUzMmZkYWYzMWZkYjEzMGZkYjIyZmZkYjQyZmZkYjUyZWZlYjcyZGZlYjgyY2ZlYmEyY2ZlYmIyYmZlYmQyYWZlYmUyYWZlYzAyOWZkYzIyOWZkYzMyOGZkYzUyN2ZkYzYyN2ZkYzgyN2ZkY2EyNmZkY2IyNmZjY2QyNWZjY2UyNWZjZDAyNWZjZDIyNWZiZDMyNGZiZDUyNGZiZDcyNGZhZDgyNGZhZGEyNGY5ZGMyNGY5ZGQyNWY4ZGYyNWY4ZTEyNWY3ZTIyNWY3ZTQyNWY2ZTYyNmY2ZTgyNmY1ZTkyNmY1ZWIyN2Y0ZWQyN2YzZWUyN2YzZjAyN2YyZjIyN2YxZjQyNmYxZjUyNWYwZjcyNGYwZjkyMSIpKTtmdW5jdGlvbiBxZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIG4kPU1hdGguYWJzLEJvPU1hdGguYXRhbjIsaWc9TWF0aC5jb3Msa1N0PU1hdGgubWF4LE44PU1hdGgubWluLF91PU1hdGguc2luLHN5PU1hdGguc3FydCxibz0xZS0xMix5dT1NYXRoLlBJLFA1PXl1LzIsaGM9Mip5dTtmdW5jdGlvbiBSU3QoZSl7cmV0dXJuIGU+MT8wOmU8LTE/eXU6TWF0aC5hY29zKGUpfWZ1bmN0aW9uIGkkKGUpe3JldHVybiBlPj0xP1A1OmU8PS0xPy1QNTpNYXRoLmFzaW4oZSl9ZnVuY3Rpb24gQUVlKGUpe3JldHVybiBlLmlubmVyUmFkaXVzfWZ1bmN0aW9uIFBFZShlKXtyZXR1cm4gZS5vdXRlclJhZGl1c31mdW5jdGlvbiBJRWUoZSl7cmV0dXJuIGUuc3RhcnRBbmdsZX1mdW5jdGlvbiBMRWUoZSl7cmV0dXJuIGUuZW5kQW5nbGV9ZnVuY3Rpb24ga0VlKGUpe3JldHVybiBlJiZlLnBhZEFuZ2xlfWZ1bmN0aW9uIFJFZShlLHQscixuLGksbyxhLHMpe3ZhciBsPXItZSxjPW4tdCx1PWEtaSxoPXMtbyxmPWgqbC11KmM7aWYoIShmKmY8Ym8pKXJldHVybiBmPSh1Kih0LW8pLWgqKGUtaSkpL2YsW2UrZipsLHQrZipjXX1mdW5jdGlvbiBEOChlLHQscixuLGksbyxhKXt2YXIgcz1lLXIsbD10LW4sYz0oYT9vOi1vKS9zeShzKnMrbCpsKSx1PWMqbCxoPS1jKnMsZj1lK3UscD10K2gsZD1yK3UsZz1uK2gsXz0oZitkKS8yLHk9KHArZykvMix4PWQtZixiPWctcCxTPXgqeCtiKmIsQz1pLW8sUD1mKmctZCpwLGs9KGI8MD8tMToxKSpzeShrU3QoMCxDKkMqUy1QKlApKSxPPShQKmIteCprKS9TLEQ9KC1QKngtYiprKS9TLEI9KFAqYit4KmspL1MsST0oLVAqeCtiKmspL1MsTD1PLV8sUj1ELXksRj1CLV8sej1JLXk7cmV0dXJuIEwqTCtSKlI+RipGK3oqeiYmKE89QixEPUkpLHtjeDpPLGN5OkQseDAxOi11LHkwMTotaCx4MTE6TyooaS9DLTEpLHkxMTpEKihpL0MtMSl9fWZ1bmN0aW9uIE5TdCgpe3ZhciBlPUFFZSx0PVBFZSxyPXFlKDApLG49bnVsbCxpPUlFZSxvPUxFZSxhPWtFZSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBjLHUsaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cykscD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1QNSxkPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLVA1LGc9biQoZC1wKSxfPWQ+cDtpZihzfHwocz1jPWJzKCkpLGY8aCYmKHU9ZixmPWgsaD11KSwhKGY+Ym8pKXMubW92ZVRvKDAsMCk7ZWxzZSBpZihnPmhjLWJvKXMubW92ZVRvKGYqaWcocCksZipfdShwKSkscy5hcmMoMCwwLGYscCxkLCFfKSxoPmJvJiYocy5tb3ZlVG8oaCppZyhkKSxoKl91KGQpKSxzLmFyYygwLDAsaCxkLHAsXykpO2Vsc2V7dmFyIHk9cCx4PWQsYj1wLFM9ZCxDPWcsUD1nLGs9YS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixPPWs+Ym8mJihuPytuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpzeShoKmgrZipmKSksRD1OOChuJChmLWgpLzIsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxCPUQsST1ELEwsUjtpZihPPmJvKXt2YXIgRj1pJChPL2gqX3UoaykpLHo9aSQoTy9mKl91KGspKTsoQy09RioyKT5ibz8oRio9Xz8xOi0xLGIrPUYsUy09Rik6KEM9MCxiPVM9KHArZCkvMiksKFAtPXoqMik+Ym8/KHoqPV8/MTotMSx5Kz16LHgtPXopOihQPTAseT14PShwK2QpLzIpfXZhciBVPWYqaWcoeSksVz1mKl91KHkpLFo9aCppZyhTKSxydD1oKl91KFMpO2lmKEQ+Ym8pe3ZhciBvdD1mKmlnKHgpLHN0PWYqX3UoeCksU3Q9aCppZyhiKSxidD1oKl91KGIpLE10O2lmKGc8eXUmJihNdD1SRWUoVSxXLFN0LGJ0LG90LHN0LFoscnQpKSl7dmFyIGx0PVUtTXRbMF0sS3Q9Vy1NdFsxXSxfdD1vdC1NdFswXSxjdD1zdC1NdFsxXSxYPTEvX3UoUlN0KChsdCpfdCtLdCpjdCkvKHN5KGx0Kmx0K0t0Kkt0KSpzeShfdCpfdCtjdCpjdCkpKS8yKSxldD1zeShNdFswXSpNdFswXStNdFsxXSpNdFsxXSk7Qj1OOChELChoLWV0KS8oWC0xKSksST1OOChELChmLWV0KS8oWCsxKSl9fVA+Ym8/ST5ibz8oTD1EOChTdCxidCxVLFcsZixJLF8pLFI9RDgob3Qsc3QsWixydCxmLEksXykscy5tb3ZlVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxJPEQ/cy5hcmMoTC5jeCxMLmN5LEksQm8oTC55MDEsTC54MDEpLEJvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxJLEJvKEwueTAxLEwueDAxKSxCbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxmLEJvKEwuY3krTC55MTEsTC5jeCtMLngxMSksQm8oUi5jeStSLnkxMSxSLmN4K1IueDExKSwhXykscy5hcmMoUi5jeCxSLmN5LEksQm8oUi55MTEsUi54MTEpLEJvKFIueTAxLFIueDAxKSwhXykpKToocy5tb3ZlVG8oVSxXKSxzLmFyYygwLDAsZix5LHgsIV8pKTpzLm1vdmVUbyhVLFcpLCEoaD5ibyl8fCEoQz5ibyk/cy5saW5lVG8oWixydCk6Qj5ibz8oTD1EOChaLHJ0LG90LHN0LGgsLUIsXyksUj1EOChVLFcsU3QsYnQsaCwtQixfKSxzLmxpbmVUbyhMLmN4K0wueDAxLEwuY3krTC55MDEpLEI8RD9zLmFyYyhMLmN4LEwuY3ksQixCbyhMLnkwMSxMLngwMSksQm8oUi55MDEsUi54MDEpLCFfKToocy5hcmMoTC5jeCxMLmN5LEIsQm8oTC55MDEsTC54MDEpLEJvKEwueTExLEwueDExKSwhXykscy5hcmMoMCwwLGgsQm8oTC5jeStMLnkxMSxMLmN4K0wueDExKSxCbyhSLmN5K1IueTExLFIuY3grUi54MTEpLF8pLHMuYXJjKFIuY3gsUi5jeSxCLEJvKFIueTExLFIueDExKSxCbyhSLnkwMSxSLngwMSksIV8pKSk6cy5hcmMoMCwwLGgsUyxiLF8pfWlmKHMuY2xvc2VQYXRoKCksYylyZXR1cm4gcz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGwuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgYz0oK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsdT0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIteXUvMjtyZXR1cm5baWcodSkqYyxfdSh1KSpjXX0sbC5pbm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTplfSxsLm91dGVyUmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6cWUoK2MpLGwpOnR9LGwuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6cWUoK2MpLGwpOnJ9LGwucGFkUmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWM9PW51bGw/bnVsbDp0eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTpufSxsLnN0YXJ0QW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6aX0sbC5lbmRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTpvfSxsLnBhZEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6cWUoK2MpLGwpOmF9LGwuY29udGV4dD1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1jPT1udWxsP251bGw6YyxsKTpzfSxsfWZ1bmN0aW9uIERTdChlKXt0aGlzLl9jb250ZXh0PWV9RFN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfX19O2Z1bmN0aW9uIFloKGUpe3JldHVybiBuZXcgRFN0KGUpfWZ1bmN0aW9uIFhiKGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uICRiKGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIHZ1KCl7dmFyIGU9WGIsdD0kYixyPXFlKCEwKSxuPW51bGwsaT1ZaCxvPW51bGw7ZnVuY3Rpb24gYShzKXt2YXIgbCxjPXMubGVuZ3RoLHUsaD0hMSxmO2ZvcihuPT1udWxsJiYobz1pKGY9YnMoKSkpLGw9MDtsPD1jOysrbCkhKGw8YyYmcih1PXNbbF0sbCxzKSk9PT1oJiYoKGg9IWgpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGgmJm8ucG9pbnQoK2UodSxsLHMpLCt0KHUsbCxzKSk7aWYoZilyZXR1cm4gbz1udWxsLGYrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCtzKSxhKTplfSxhLnk9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6dH0sYS5kZWZpbmVkPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoISFzKSxhKTpyfSxhLmN1cnZlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXMsbiE9bnVsbCYmKG89aShuKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPT1udWxsP249bz1udWxsOm89aShuPXMpLGEpOm59LGF9ZnVuY3Rpb24gTzgoKXt2YXIgZT1YYix0PW51bGwscj1xZSgwKSxuPSRiLGk9cWUoITApLG89bnVsbCxhPVloLHM9bnVsbDtmdW5jdGlvbiBsKHUpe3ZhciBoLGYscCxkPXUubGVuZ3RoLGcsXz0hMSx5LHg9bmV3IEFycmF5KGQpLGI9bmV3IEFycmF5KGQpO2ZvcihvPT1udWxsJiYocz1hKHk9YnMoKSkpLGg9MDtoPD1kOysraCl7aWYoIShoPGQmJmkoZz11W2hdLGgsdSkpPT09XylpZihfPSFfKWY9aCxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxwPWgtMTtwPj1mOy0tcClzLnBvaW50KHhbcF0sYltwXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9XyYmKHhbaF09K2UoZyxoLHUpLGJbaF09K3IoZyxoLHUpLHMucG9pbnQodD8rdChnLGgsdSk6eFtoXSxuPytuKGcsaCx1KTpiW2hdKSl9aWYoeSlyZXR1cm4gcz1udWxsLHkrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiB2dSgpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6cWUoK3UpLHQ9bnVsbCxsKTplfSxsLngwPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6cWUoK3UpLGwpOmV9LGwueDE9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dT09bnVsbD9udWxsOnR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6cWUoK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxuPW51bGwsbCk6cn0sbC55MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTpyfSxsLnkxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTpufSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KHIpfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KG4pfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KHIpfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSghIXUpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxvIT1udWxsJiYocz1hKG8pKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9PW51bGw/bz1zPW51bGw6cz1hKG89dSksbCk6b30sbH1mdW5jdGlvbiBPU3QoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gelN0KGUpe3JldHVybiBlfWZ1bmN0aW9uIEZTdCgpe3ZhciBlPXpTdCx0PU9TdCxyPW51bGwsbj1xZSgwKSxpPXFlKGhjKSxvPXFlKDApO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGgsZj0wLHA9bmV3IEFycmF5KGMpLGQ9bmV3IEFycmF5KGMpLGc9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLF89TWF0aC5taW4oaGMsTWF0aC5tYXgoLWhjLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSx5LHg9TWF0aC5taW4oTWF0aC5hYnMoXykvYyxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj14KihfPDA/LTE6MSksUztmb3IobD0wO2w8YzsrK2wpKFM9ZFtwW2xdPWxdPStlKHNbbF0sbCxzKSk+MCYmKGYrPVMpO2Zvcih0IT1udWxsP3Auc29ydChmdW5jdGlvbihDLFApe3JldHVybiB0KGRbQ10sZFtQXSl9KTpyIT1udWxsJiZwLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gcihzW0NdLHNbUF0pfSksbD0wLGg9Zj8oXy1jKmIpL2Y6MDtsPGM7KytsLGc9eSl1PXBbbF0sUz1kW3VdLHk9ZysoUz4wP1MqaDowKStiLGRbdV09e2RhdGE6c1t1XSxpbmRleDpsLHZhbHVlOlMsc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOnkscGFkQW5nbGU6eH07cmV0dXJuIGR9cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6ZX0sYS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMscj1udWxsLGEpOnR9LGEuc29ydD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1zLHQ9bnVsbCxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCtzKSxhKTppfSxhLnBhZEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOm99LGF9dmFyIHo4PUtiKFloKTtmdW5jdGlvbiBCU3QoZSl7dGhpcy5fY3VydmU9ZX1CU3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5fY3VydmUucG9pbnQodCpNYXRoLnNpbihlKSx0Ki1NYXRoLmNvcyhlKSl9fTtmdW5jdGlvbiBLYihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBuZXcgQlN0KGUocikpfXJldHVybiB0Ll9jdXJ2ZT1lLHR9ZnVuY3Rpb24gWmIoZSl7dmFyIHQ9ZS5jdXJ2ZTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmN1cnZlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoS2IocikpOnQoKS5fY3VydmV9LGV9ZnVuY3Rpb24gbyQoKXtyZXR1cm4gWmIodnUoKS5jdXJ2ZSh6OCkpfWZ1bmN0aW9uIGEkKCl7dmFyIGU9TzgoKS5jdXJ2ZSh6OCksdD1lLmN1cnZlLHI9ZS5saW5lWDAsbj1lLmxpbmVYMSxpPWUubGluZVkwLG89ZS5saW5lWTE7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5zdGFydEFuZ2xlPWUueDAsZGVsZXRlIGUueDAsZS5lbmRBbmdsZT1lLngxLGRlbGV0ZSBlLngxLGUucmFkaXVzPWUueSxkZWxldGUgZS55LGUuaW5uZXJSYWRpdXM9ZS55MCxkZWxldGUgZS55MCxlLm91dGVyUmFkaXVzPWUueTEsZGVsZXRlIGUueTEsZS5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBaYihyKCkpfSxkZWxldGUgZS5saW5lWDAsZS5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gWmIobigpKX0sZGVsZXRlIGUubGluZVgxLGUubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIFpiKGkoKSl9LGRlbGV0ZSBlLmxpbmVZMCxlLmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBaYihvKCkpfSxkZWxldGUgZS5saW5lWTEsZS5jdXJ2ZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KEtiKGEpKTp0KCkuX2N1cnZlfSxlfWZ1bmN0aW9uIGx5KGUsdCl7cmV0dXJuWyh0PSt0KSpNYXRoLmNvcyhlLT1NYXRoLlBJLzIpLHQqTWF0aC5zaW4oZSldfXZhciBJNT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gTkVlKGUpe3JldHVybiBlLnNvdXJjZX1mdW5jdGlvbiBERWUoZSl7cmV0dXJuIGUudGFyZ2V0fWZ1bmN0aW9uIHMkKGUpe3ZhciB0PU5FZSxyPURFZSxuPVhiLGk9JGIsbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcyxsPUk1LmNhbGwoYXJndW1lbnRzKSxjPXQuYXBwbHkodGhpcyxsKSx1PXIuYXBwbHkodGhpcyxsKTtpZihvfHwobz1zPWJzKCkpLGUobywrbi5hcHBseSh0aGlzLChsWzBdPWMsbCkpLCtpLmFwcGx5KHRoaXMsbCksK24uYXBwbHkodGhpcywobFswXT11LGwpKSwraS5hcHBseSh0aGlzLGwpKSxzKXJldHVybiBvPW51bGwscysiInx8bnVsbH1yZXR1cm4gYS5zb3VyY2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cyxhKTp0fSxhLnRhcmdldD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1zLGEpOnJ9LGEueD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCtzKSxhKTpufSxhLnk9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXM9PW51bGw/bnVsbDpzLGEpOm99LGF9ZnVuY3Rpb24gT0VlKGUsdCxyLG4saSl7ZS5tb3ZlVG8odCxyKSxlLmJlemllckN1cnZlVG8odD0odCtuKS8yLHIsdCxpLG4saSl9ZnVuY3Rpb24gekVlKGUsdCxyLG4saSl7ZS5tb3ZlVG8odCxyKSxlLmJlemllckN1cnZlVG8odCxyPShyK2kpLzIsbixyLG4saSl9ZnVuY3Rpb24gRkVlKGUsdCxyLG4saSl7dmFyIG89bHkodCxyKSxhPWx5KHQscj0ocitpKS8yKSxzPWx5KG4sciksbD1seShuLGkpO2UubW92ZVRvKG9bMF0sb1sxXSksZS5iZXppZXJDdXJ2ZVRvKGFbMF0sYVsxXSxzWzBdLHNbMV0sbFswXSxsWzFdKX1mdW5jdGlvbiBIU3QoKXtyZXR1cm4gcyQoT0VlKX1mdW5jdGlvbiBWU3QoKXtyZXR1cm4gcyQoekVlKX1mdW5jdGlvbiBVU3QoKXt2YXIgZT1zJChGRWUpO3JldHVybiBlLmFuZ2xlPWUueCxkZWxldGUgZS54LGUucmFkaXVzPWUueSxkZWxldGUgZS55LGV9dmFyIEw1PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQveXUpO2UubW92ZVRvKHIsMCksZS5hcmMoMCwwLHIsMCxoYyl9fTt2YXIgRjg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodC81KS8yO2UubW92ZVRvKC0zKnIsLXIpLGUubGluZVRvKC1yLC1yKSxlLmxpbmVUbygtciwtMypyKSxlLmxpbmVUbyhyLC0zKnIpLGUubGluZVRvKHIsLXIpLGUubGluZVRvKDMqciwtciksZS5saW5lVG8oMypyLHIpLGUubGluZVRvKHIsciksZS5saW5lVG8ociwzKnIpLGUubGluZVRvKC1yLDMqciksZS5saW5lVG8oLXIsciksZS5saW5lVG8oLTMqcixyKSxlLmNsb3NlUGF0aCgpfX07dmFyIHFTdD1NYXRoLnNxcnQoLjMzMzMzMzMzMzMzMzMzMzMpLEJFZT1xU3QqMixCOD17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L0JFZSksbj1yKnFTdDtlLm1vdmVUbygwLC1yKSxlLmxpbmVUbyhuLDApLGUubGluZVRvKDAsciksZS5saW5lVG8oLW4sMCksZS5jbG9zZVBhdGgoKX19O3ZhciBIRWU9Ljg5MDgxMzA5MTUyOTI4NTIsR1N0PU1hdGguc2luKHl1LzEwKS9NYXRoLnNpbig3Knl1LzEwKSxWRWU9TWF0aC5zaW4oaGMvMTApKkdTdCxVRWU9LU1hdGguY29zKGhjLzEwKSpHU3QsSDg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCpIRWUpLG49VkVlKnIsaT1VRWUqcjtlLm1vdmVUbygwLC1yKSxlLmxpbmVUbyhuLGkpO2Zvcih2YXIgbz0xO288NTsrK28pe3ZhciBhPWhjKm8vNSxzPU1hdGguY29zKGEpLGw9TWF0aC5zaW4oYSk7ZS5saW5lVG8obCpyLC1zKnIpLGUubGluZVRvKHMqbi1sKmksbCpuK3MqaSl9ZS5jbG9zZVBhdGgoKX19O3ZhciBWOD17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0KSxuPS1yLzI7ZS5yZWN0KG4sbixyLHIpfX07dmFyIGwkPU1hdGguc3FydCgzKSxVOD17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPS1NYXRoLnNxcnQodC8obCQqMykpO2UubW92ZVRvKDAscioyKSxlLmxpbmVUbygtbCQqciwtciksZS5saW5lVG8obCQqciwtciksZS5jbG9zZVBhdGgoKX19O3ZhciBmYz0tLjUscGM9TWF0aC5zcXJ0KDMpLzIsYyQ9MS9NYXRoLnNxcnQoMTIpLHFFZT0oYyQvMisxKSozLHE4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvcUVlKSxuPXIvMixpPXIqYyQsbz1uLGE9cipjJCtyLHM9LW8sbD1hO2UubW92ZVRvKG4saSksZS5saW5lVG8obyxhKSxlLmxpbmVUbyhzLGwpLGUubGluZVRvKGZjKm4tcGMqaSxwYypuK2ZjKmkpLGUubGluZVRvKGZjKm8tcGMqYSxwYypvK2ZjKmEpLGUubGluZVRvKGZjKnMtcGMqbCxwYypzK2ZjKmwpLGUubGluZVRvKGZjKm4rcGMqaSxmYyppLXBjKm4pLGUubGluZVRvKGZjKm8rcGMqYSxmYyphLXBjKm8pLGUubGluZVRvKGZjKnMrcGMqbCxmYypsLXBjKnMpLGUuY2xvc2VQYXRoKCl9fTt2YXIgV1N0PVtMNSxGOCxCOCxWOCxIOCxVOCxxOF07ZnVuY3Rpb24gWVN0KCl7dmFyIGU9cWUoTDUpLHQ9cWUoNjQpLHI9bnVsbDtmdW5jdGlvbiBuKCl7dmFyIGk7aWYocnx8KHI9aT1icygpKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxpKXJldHVybiByPW51bGwsaSsiInx8bnVsbH1yZXR1cm4gbi50eXBlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6cWUoaSksbik6ZX0sbi5zaXplPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6cWUoK2kpLG4pOnR9LG4uY29udGV4dD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6aSxuKTpyfSxufWZ1bmN0aW9uIGRjKCl7fWZ1bmN0aW9uIEpiKGUsdCxyKXtlLl9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqZS5feDArZS5feDEpLzMsKDIqZS5feTArZS5feTEpLzMsKGUuX3gwKzIqZS5feDEpLzMsKGUuX3kwKzIqZS5feTEpLzMsKGUuX3gwKzQqZS5feDErdCkvNiwoZS5feTArNCplLl95MStyKS82KX1mdW5jdGlvbiBrNShlKXt0aGlzLl9jb250ZXh0PWV9azUucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzpKYih0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpKYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10fX07ZnVuY3Rpb24gRzgoZSl7cmV0dXJuIG5ldyBrNShlKX1mdW5jdGlvbiBqU3QoZSl7dGhpcy5fY29udGV4dD1lfWpTdC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCk7YnJlYWt9fX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj1lLHRoaXMuX3kyPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9ZSx0aGlzLl95Mz10O2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PWUsdGhpcy5feTQ9dCx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MStlKS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK3QpLzYpO2JyZWFrO2RlZmF1bHQ6SmIodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19O2Z1bmN0aW9uIFhTdChlKXtyZXR1cm4gbmV3IGpTdChlKX1mdW5jdGlvbiAkU3QoZSl7dGhpcy5fY29udGV4dD1lfSRTdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgcj0odGhpcy5feDArNCp0aGlzLl94MStlKS82LG49KHRoaXMuX3kwKzQqdGhpcy5feTErdCkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHIsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8ocixuKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OkpiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fTtmdW5jdGlvbiBLU3QoZSl7cmV0dXJuIG5ldyAkU3QoZSl9ZnVuY3Rpb24gWlN0KGUsdCl7dGhpcy5fYmFzaXM9bmV3IGs1KGUpLHRoaXMuX2JldGE9dH1aU3QucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94LHQ9dGhpcy5feSxyPWUubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbj1lWzBdLGk9dFswXSxvPWVbcl0tbixhPXRbcl0taSxzPS0xLGw7KytzPD1yOylsPXMvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKmVbc10rKDEtdGhpcy5fYmV0YSkqKG4rbCpvKSx0aGlzLl9iZXRhKnRbc10rKDEtdGhpcy5fYmV0YSkqKGkrbCphKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX3gucHVzaCgrZSksdGhpcy5feS5wdXNoKCt0KX19O3ZhciBKU3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0PT09MT9uZXcgazUobik6bmV3IFpTdChuLHQpfXJldHVybiByLmJldGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguODUpO2Z1bmN0aW9uIFFiKGUsdCxyKXtlLl9jb250ZXh0LmJlemllckN1cnZlVG8oZS5feDErZS5fayooZS5feDItZS5feDApLGUuX3kxK2UuX2sqKGUuX3kyLWUuX3kwKSxlLl94MitlLl9rKihlLl94MS10KSxlLl95MitlLl9rKihlLl95MS1yKSxlLl94MixlLl95Mil9ZnVuY3Rpb24gVzgoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5faz0oMS10KS82fVc4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpRYih0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9ZSx0aGlzLl95MT10O2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6UWIodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O3ZhciBRU3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgVzgobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCk7ZnVuY3Rpb24gWTgoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5faz0oMS10KS82fVk4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmRjLGFyZWFFbmQ6ZGMsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp7dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAyOnt0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9ZSx0aGlzLl95Mz10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PWUsdGhpcy5feTQ9dCk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9ZSx0aGlzLl95NT10O2JyZWFrO2RlZmF1bHQ6UWIodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O3ZhciB0M3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgWTgobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCk7ZnVuY3Rpb24gajgoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5faz0oMS10KS82fWo4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgZTN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IGo4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIFI1KGUsdCxyKXt2YXIgbj1lLl94MSxpPWUuX3kxLG89ZS5feDIsYT1lLl95MjtpZihlLl9sMDFfYT5ibyl7dmFyIHM9MiplLl9sMDFfMmErMyplLl9sMDFfYSplLl9sMTJfYStlLl9sMTJfMmEsbD0zKmUuX2wwMV9hKihlLl9sMDFfYStlLl9sMTJfYSk7bj0obipzLWUuX3gwKmUuX2wxMl8yYStlLl94MiplLl9sMDFfMmEpL2wsaT0oaSpzLWUuX3kwKmUuX2wxMl8yYStlLl95MiplLl9sMDFfMmEpL2x9aWYoZS5fbDIzX2E+Ym8pe3ZhciBjPTIqZS5fbDIzXzJhKzMqZS5fbDIzX2EqZS5fbDEyX2ErZS5fbDEyXzJhLHU9MyplLl9sMjNfYSooZS5fbDIzX2ErZS5fbDEyX2EpO289KG8qYytlLl94MSplLl9sMjNfMmEtdCplLl9sMTJfMmEpL3UsYT0oYSpjK2UuX3kxKmUuX2wyM18yYS1yKmUuX2wxMl8yYSkvdX1lLl9jb250ZXh0LmJlemllckN1cnZlVG8obixpLG8sYSxlLl94MixlLl95Mil9ZnVuY3Rpb24gcjN0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9cjN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7aWYoZT0rZSx0PSt0LHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi1lLG49dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6UjUodGhpcyxlLHQpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgbjN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD9uZXcgcjN0KG4sdCk6bmV3IFc4KG4sMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguNSk7ZnVuY3Rpb24gaTN0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9aTN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmRjLGFyZWFFbmQ6ZGMsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp7dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAyOnt0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7aWYoZT0rZSx0PSt0LHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi1lLG49dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0OlI1KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIG8zdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IGkzdChuLHQpOm5ldyBZOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIGEzdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fWEzdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtpZihlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLWUsbj10aGlzLl95Mi10O3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6UjUodGhpcyxlLHQpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgczN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD9uZXcgYTN0KG4sdCk6bmV3IGo4KG4sMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguNSk7ZnVuY3Rpb24gbDN0KGUpe3RoaXMuX2NvbnRleHQ9ZX1sM3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZGMsYXJlYUVuZDpkYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7ZT0rZSx0PSt0LHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSl9fTtmdW5jdGlvbiBjM3QoZSl7cmV0dXJuIG5ldyBsM3QoZSl9ZnVuY3Rpb24gdTN0KGUpe3JldHVybiBlPDA/LTE6MX1mdW5jdGlvbiBoM3QoZSx0LHIpe3ZhciBuPWUuX3gxLWUuX3gwLGk9dC1lLl94MSxvPShlLl95MS1lLl95MCkvKG58fGk8MCYmLTApLGE9KHItZS5feTEpLyhpfHxuPDAmJi0wKSxzPShvKmkrYSpuKS8obitpKTtyZXR1cm4odTN0KG8pK3UzdChhKSkqTWF0aC5taW4oTWF0aC5hYnMobyksTWF0aC5hYnMoYSksLjUqTWF0aC5hYnMocykpfHwwfWZ1bmN0aW9uIGYzdChlLHQpe3ZhciByPWUuX3gxLWUuX3gwO3JldHVybiByPygzKihlLl95MS1lLl95MCkvci10KS8yOnR9ZnVuY3Rpb24gdSQoZSx0LHIpe3ZhciBuPWUuX3gwLGk9ZS5feTAsbz1lLl94MSxhPWUuX3kxLHM9KG8tbikvMztlLl9jb250ZXh0LmJlemllckN1cnZlVG8obitzLGkrcyp0LG8tcyxhLXMqcixvLGEpfWZ1bmN0aW9uIFg4KGUpe3RoaXMuX2NvbnRleHQ9ZX1YOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6dSQodGhpcyx0aGlzLl90MCxmM3QodGhpcyx0aGlzLl90MCkpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj1OYU47aWYoZT0rZSx0PSt0LCEoZT09PXRoaXMuX3gxJiZ0PT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHUkKHRoaXMsZjN0KHRoaXMscj1oM3QodGhpcyxlLHQpKSxyKTticmVhaztkZWZhdWx0OnUkKHRoaXMsdGhpcy5fdDAscj1oM3QodGhpcyxlLHQpKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXQsdGhpcy5fdDA9cn19fTtmdW5jdGlvbiBwM3QoZSl7dGhpcy5fY29udGV4dD1uZXcgZDN0KGUpfShwM3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWDgucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24oZSx0KXtYOC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLHQsZSl9O2Z1bmN0aW9uIGQzdChlKXt0aGlzLl9jb250ZXh0PWV9ZDN0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQsZSxuLHIsbyxpKX19O2Z1bmN0aW9uIG0zdChlKXtyZXR1cm4gbmV3IFg4KGUpfWZ1bmN0aW9uIGczdChlKXtyZXR1cm4gbmV3IHAzdChlKX1mdW5jdGlvbiB5M3QoZSl7dGhpcy5fY29udGV4dD1lfXkzdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94LHQ9dGhpcy5feSxyPWUubGVuZ3RoO2lmKHIpaWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlWzBdLHRbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKGVbMF0sdFswXSkscj09PTIpdGhpcy5fY29udGV4dC5saW5lVG8oZVsxXSx0WzFdKTtlbHNlIGZvcih2YXIgbj1fM3QoZSksaT1fM3QodCksbz0wLGE9MTthPHI7KytvLCsrYSl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oblswXVtvXSxpWzBdW29dLG5bMV1bb10saVsxXVtvXSxlW2FdLHRbYV0pOyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmcj09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX3gucHVzaCgrZSksdGhpcy5feS5wdXNoKCt0KX19O2Z1bmN0aW9uIF8zdChlKXt2YXIgdCxyPWUubGVuZ3RoLTEsbixpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKTtmb3IoaVswXT0wLG9bMF09MixhWzBdPWVbMF0rMiplWzFdLHQ9MTt0PHItMTsrK3QpaVt0XT0xLG9bdF09NCxhW3RdPTQqZVt0XSsyKmVbdCsxXTtmb3IoaVtyLTFdPTIsb1tyLTFdPTcsYVtyLTFdPTgqZVtyLTFdK2Vbcl0sdD0xO3Q8cjsrK3Qpbj1pW3RdL29bdC0xXSxvW3RdLT1uLGFbdF0tPW4qYVt0LTFdO2ZvcihpW3ItMV09YVtyLTFdL29bci0xXSx0PXItMjt0Pj0wOy0tdClpW3RdPShhW3RdLWlbdCsxXSkvb1t0XTtmb3Iob1tyLTFdPShlW3JdK2lbci0xXSkvMix0PTA7dDxyLTE7Kyt0KW9bdF09MiplW3QrMV0taVt0KzFdO3JldHVybltpLG9dfWZ1bmN0aW9uIHYzdChlKXtyZXR1cm4gbmV3IHkzdChlKX1mdW5jdGlvbiAkOChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl90PXR9JDgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJnRoaXMuX3BvaW50PT09MiYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OntpZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdCksdGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTtlbHNle3ZhciByPXRoaXMuX3gqKDEtdGhpcy5fdCkrZSp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKHIsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8ocix0KX1icmVha319dGhpcy5feD1lLHRoaXMuX3k9dH19O2Z1bmN0aW9uIHgzdChlKXtyZXR1cm4gbmV3ICQ4KGUsLjUpfWZ1bmN0aW9uIGIzdChlKXtyZXR1cm4gbmV3ICQ4KGUsMCl9ZnVuY3Rpb24gdzN0KGUpe3JldHVybiBuZXcgJDgoZSwxKX1mdW5jdGlvbiB4dShlLHQpe2lmKChhPWUubGVuZ3RoKT4xKWZvcih2YXIgcj0xLG4saSxvPWVbdFswXV0sYSxzPW8ubGVuZ3RoO3I8YTsrK3IpZm9yKGk9byxvPWVbdFtyXV0sbj0wO248czsrK24pb1tuXVsxXSs9b1tuXVswXT1pc05hTihpW25dWzFdKT9pW25dWzBdOmlbbl1bMV19ZnVuY3Rpb24gYnUoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9bmV3IEFycmF5KHQpOy0tdD49MDspclt0XT10O3JldHVybiByfWZ1bmN0aW9uIEdFZShlLHQpe3JldHVybiBlW3RdfWZ1bmN0aW9uIFMzdCgpe3ZhciBlPXFlKFtdKSx0PWJ1LHI9eHUsbj1HRWU7ZnVuY3Rpb24gaShvKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzLGw9by5sZW5ndGgsYz1hLmxlbmd0aCx1PW5ldyBBcnJheShjKSxoO2ZvcihzPTA7czxjOysrcyl7Zm9yKHZhciBmPWFbc10scD11W3NdPW5ldyBBcnJheShsKSxkPTAsZztkPGw7KytkKXBbZF09Zz1bMCwrbihvW2RdLGYsZCxvKV0sZy5kYXRhPW9bZF07cC5rZXk9Zn1mb3Iocz0wLGg9dCh1KTtzPGM7KytzKXVbaFtzXV0uaW5kZXg9cztyZXR1cm4gcih1LGgpLHV9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOnFlKEk1LmNhbGwobykpLGkpOmV9LGkudmFsdWU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpxZSgrbyksaSk6bn0saS5vcmRlcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1vPT1udWxsP2J1OnR5cGVvZiBvPT0iZnVuY3Rpb24iP286cWUoSTUuY2FsbChvKSksaSk6dH0saS5vZmZzZXQ9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bz09bnVsbD94dTpvLGkpOnJ9LGl9ZnVuY3Rpb24gTTN0KGUsdCl7aWYoKG49ZS5sZW5ndGgpPjApe2Zvcih2YXIgcixuLGk9MCxvPWVbMF0ubGVuZ3RoLGE7aTxvOysraSl7Zm9yKGE9cj0wO3I8bjsrK3IpYSs9ZVtyXVtpXVsxXXx8MDtpZihhKWZvcihyPTA7cjxuOysrcillW3JdW2ldWzFdLz1hfXh1KGUsdCl9fWZ1bmN0aW9uIEUzdChlLHQpe2lmKChsPWUubGVuZ3RoKT4wKWZvcih2YXIgcixuPTAsaSxvLGEscyxsLGM9ZVt0WzBdXS5sZW5ndGg7bjxjOysrbilmb3IoYT1zPTAscj0wO3I8bDsrK3IpKG89KGk9ZVt0W3JdXVtuXSlbMV0taVswXSk+MD8oaVswXT1hLGlbMV09YSs9byk6bzwwPyhpWzFdPXMsaVswXT1zKz1vKTooaVswXT0wLGlbMV09byl9ZnVuY3Rpb24gVDN0KGUsdCl7aWYoKGk9ZS5sZW5ndGgpPjApe2Zvcih2YXIgcj0wLG49ZVt0WzBdXSxpLG89bi5sZW5ndGg7cjxvOysrcil7Zm9yKHZhciBhPTAscz0wO2E8aTsrK2Epcys9ZVthXVtyXVsxXXx8MDtuW3JdWzFdKz1uW3JdWzBdPS1zLzJ9eHUoZSx0KX19ZnVuY3Rpb24gQzN0KGUsdCl7aWYoISghKChhPWUubGVuZ3RoKT4wKXx8ISgobz0oaT1lW3RbMF1dKS5sZW5ndGgpPjApKSl7Zm9yKHZhciByPTAsbj0xLGksbyxhO248bzsrK24pe2Zvcih2YXIgcz0wLGw9MCxjPTA7czxhOysrcyl7Zm9yKHZhciB1PWVbdFtzXV0saD11W25dWzFdfHwwLGY9dVtuLTFdWzFdfHwwLHA9KGgtZikvMixkPTA7ZDxzOysrZCl7dmFyIGc9ZVt0W2RdXSxfPWdbbl1bMV18fDAseT1nW24tMV1bMV18fDA7cCs9Xy15fWwrPWgsYys9cCpofWlbbi0xXVsxXSs9aVtuLTFdWzBdPXIsbCYmKHItPWMvbCl9aVtuLTFdWzFdKz1pW24tMV1bMF09cix4dShlLHQpfX1mdW5jdGlvbiBLOChlKXt2YXIgdD1lLm1hcChXRWUpO3JldHVybiBidShlKS5zb3J0KGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRbcl0tdFtuXX0pfWZ1bmN0aW9uIFdFZShlKXtmb3IodmFyIHQ9LTEscj0wLG49ZS5sZW5ndGgsaSxvPS0xLzA7Kyt0PG47KShpPStlW3RdWzFdKT5vJiYobz1pLHI9dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gWjgoZSl7dmFyIHQ9ZS5tYXAoaCQpO3JldHVybiBidShlKS5zb3J0KGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRbcl0tdFtuXX0pfWZ1bmN0aW9uIGgkKGUpe2Zvcih2YXIgdD0wLHI9LTEsbj1lLmxlbmd0aCxpOysrcjxuOykoaT0rZVtyXVsxXSkmJih0Kz1pKTtyZXR1cm4gdH1mdW5jdGlvbiBBM3QoZSl7cmV0dXJuIFo4KGUpLnJldmVyc2UoKX1mdW5jdGlvbiBQM3QoZSl7dmFyIHQ9ZS5sZW5ndGgscixuLGk9ZS5tYXAoaCQpLG89SzgoZSksYT0wLHM9MCxsPVtdLGM9W107Zm9yKHI9MDtyPHQ7KytyKW49b1tyXSxhPHM/KGErPWlbbl0sbC5wdXNoKG4pKToocys9aVtuXSxjLnB1c2gobikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQobCl9ZnVuY3Rpb24gSTN0KGUpe3JldHVybiBidShlKS5yZXZlcnNlKCl9ZnVuY3Rpb24gZiQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIEwzdChlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBrM3QoZSl7cmV0dXJuIGVbMV19ZnVuY3Rpb24gcCQoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiB0MihlKXtlLlU9ZS5DPWUuTD1lLlI9ZS5QPWUuTj1udWxsfXAkLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cCQsaW5zZXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpO2lmKGUpe2lmKHQuUD1lLHQuTj1lLk4sZS5OJiYoZS5OLlA9dCksZS5OPXQsZS5SKXtmb3IoZT1lLlI7ZS5MOyllPWUuTDtlLkw9dH1lbHNlIGUuUj10O3I9ZX1lbHNlIHRoaXMuXz8oZT1SM3QodGhpcy5fKSx0LlA9bnVsbCx0Lk49ZSxlLlA9ZS5MPXQscj1lKToodC5QPXQuTj1udWxsLHRoaXMuXz10LHI9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9cix0LkM9ITAsZT10O3ImJnIuQzspbj1yLlUscj09PW4uTD8oaT1uLlIsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5SJiYoTjUodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsRDUodGhpcyxuKSkpOihpPW4uTCxpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLGU9bik6KGU9PT1yLkwmJihENSh0aGlzLHIpLGU9cixyPWUuVSksci5DPSExLG4uQz0hMCxONSh0aGlzLG4pKSkscj1lLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihlKXtlLk4mJihlLk4uUD1lLlApLGUuUCYmKGUuUC5OPWUuTiksZS5OPWUuUD1udWxsO3ZhciB0PWUuVSxyLG49ZS5MLGk9ZS5SLG8sYTtpZihuP2k/bz1SM3QoaSk6bz1uOm89aSx0P3QuTD09PWU/dC5MPW86dC5SPW86dGhpcy5fPW8sbiYmaT8oYT1vLkMsby5DPWUuQyxvLkw9bixuLlU9byxvIT09aT8odD1vLlUsby5VPWUuVSxlPW8uUix0Lkw9ZSxvLlI9aSxpLlU9byk6KG8uVT10LHQ9byxlPW8uUikpOihhPWUuQyxlPW8pLGUmJihlLlU9dCksIWEpe2lmKGUmJmUuQyl7ZS5DPSExO3JldHVybn1kb3tpZihlPT09dGhpcy5fKWJyZWFrO2lmKGU9PT10Lkwpe2lmKHI9dC5SLHIuQyYmKHIuQz0hMSx0LkM9ITAsTjUodGhpcyx0KSxyPXQuUiksci5MJiZyLkwuQ3x8ci5SJiZyLlIuQyl7KCFyLlJ8fCFyLlIuQykmJihyLkwuQz0hMSxyLkM9ITAsRDUodGhpcyxyKSxyPXQuUiksci5DPXQuQyx0LkM9ci5SLkM9ITEsTjUodGhpcyx0KSxlPXRoaXMuXzticmVha319ZWxzZSBpZihyPXQuTCxyLkMmJihyLkM9ITEsdC5DPSEwLEQ1KHRoaXMsdCkscj10LkwpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5MfHwhci5MLkMpJiYoci5SLkM9ITEsci5DPSEwLE41KHRoaXMscikscj10LkwpLHIuQz10LkMsdC5DPXIuTC5DPSExLEQ1KHRoaXMsdCksZT10aGlzLl87YnJlYWt9ci5DPSEwLGU9dCx0PXQuVX13aGlsZSghZS5DKTtlJiYoZS5DPSExKX19fTtmdW5jdGlvbiBONShlLHQpe3ZhciByPXQsbj10LlIsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOmUuXz1uLG4uVT1pLHIuVT1uLHIuUj1uLkwsci5SJiYoci5SLlU9ciksbi5MPXJ9ZnVuY3Rpb24gRDUoZSx0KXt2YXIgcj10LG49dC5MLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjplLl89bixuLlU9aSxyLlU9bixyLkw9bi5SLHIuTCYmKHIuTC5VPXIpLG4uUj1yfWZ1bmN0aW9uIFIzdChlKXtmb3IoO2UuTDspZT1lLkw7cmV0dXJuIGV9dmFyIGQkPXAkO2Z1bmN0aW9uIGUyKGUsdCxyLG4pe3ZhciBpPVtudWxsLG51bGxdLG89d28ucHVzaChpKS0xO3JldHVybiBpLmxlZnQ9ZSxpLnJpZ2h0PXQsciYmTzUoaSxlLHQsciksbiYmTzUoaSx0LGUsbiksVmFbZS5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksVmFbdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksaX1mdW5jdGlvbiByMihlLHQscil7dmFyIG49W3Qscl07cmV0dXJuIG4ubGVmdD1lLG59ZnVuY3Rpb24gTzUoZSx0LHIsbil7IWVbMF0mJiFlWzFdPyhlWzBdPW4sZS5sZWZ0PXQsZS5yaWdodD1yKTplLmxlZnQ9PT1yP2VbMV09bjplWzBdPW59ZnVuY3Rpb24gWUVlKGUsdCxyLG4saSl7dmFyIG89ZVswXSxhPWVbMV0scz1vWzBdLGw9b1sxXSxjPWFbMF0sdT1hWzFdLGg9MCxmPTEscD1jLXMsZD11LWwsZztpZihnPXQtcywhKCFwJiZnPjApKXtpZihnLz1wLHA8MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWVsc2UgaWYocD4wKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9aWYoZz1uLXMsISghcCYmZzwwKSl7aWYoZy89cCxwPDApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1lbHNlIGlmKHA+MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWlmKGc9ci1sLCEoIWQmJmc+MCkpe2lmKGcvPWQsZDwwKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9ZWxzZSBpZihkPjApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1pZihnPWktbCwhKCFkJiZnPDApKXtpZihnLz1kLGQ8MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWVsc2UgaWYoZD4wKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9cmV0dXJuIShoPjApJiYhKGY8MSl8fChoPjAmJihlWzBdPVtzK2gqcCxsK2gqZF0pLGY8MSYmKGVbMV09W3MrZipwLGwrZipkXSkpLCEwfX19fX1mdW5jdGlvbiBqRWUoZSx0LHIsbixpKXt2YXIgbz1lWzFdO2lmKG8pcmV0dXJuITA7dmFyIGE9ZVswXSxzPWUubGVmdCxsPWUucmlnaHQsYz1zWzBdLHU9c1sxXSxoPWxbMF0sZj1sWzFdLHA9KGMraCkvMixkPSh1K2YpLzIsZyxfO2lmKGY9PT11KXtpZihwPHR8fHA+PW4pcmV0dXJuO2lmKGM+aCl7aWYoIWEpYT1bcCxyXTtlbHNlIGlmKGFbMV0+PWkpcmV0dXJuO289W3AsaV19ZWxzZXtpZighYSlhPVtwLGldO2Vsc2UgaWYoYVsxXTxyKXJldHVybjtvPVtwLHJdfX1lbHNlIGlmKGc9KGMtaCkvKGYtdSksXz1kLWcqcCxnPC0xfHxnPjEpaWYoYz5oKXtpZighYSlhPVsoci1fKS9nLHJdO2Vsc2UgaWYoYVsxXT49aSlyZXR1cm47bz1bKGktXykvZyxpXX1lbHNle2lmKCFhKWE9WyhpLV8pL2csaV07ZWxzZSBpZihhWzFdPHIpcmV0dXJuO289WyhyLV8pL2cscl19ZWxzZSBpZih1PGYpe2lmKCFhKWE9W3QsZyp0K19dO2Vsc2UgaWYoYVswXT49bilyZXR1cm47bz1bbixnKm4rX119ZWxzZXtpZighYSlhPVtuLGcqbitfXTtlbHNlIGlmKGFbMF08dClyZXR1cm47bz1bdCxnKnQrX119cmV0dXJuIGVbMF09YSxlWzFdPW8sITB9ZnVuY3Rpb24gTjN0KGUsdCxyLG4pe2Zvcih2YXIgaT13by5sZW5ndGgsbztpLS07KSghakVlKG89d29baV0sZSx0LHIsbil8fCFZRWUobyxlLHQscixuKXx8IShNYXRoLmFicyhvWzBdWzBdLW9bMV1bMF0pPkhyfHxNYXRoLmFicyhvWzBdWzFdLW9bMV1bMV0pPkhyKSkmJmRlbGV0ZSB3b1tpXX1mdW5jdGlvbiBEM3QoZSl7cmV0dXJuIFZhW2UuaW5kZXhdPXtzaXRlOmUsaGFsZmVkZ2VzOltdfX1mdW5jdGlvbiBYRWUoZSx0KXt2YXIgcj1lLnNpdGUsbj10LmxlZnQsaT10LnJpZ2h0O3JldHVybiByPT09aSYmKGk9bixuPXIpLGk/TWF0aC5hdGFuMihpWzFdLW5bMV0saVswXS1uWzBdKToocj09PW4/KG49dFsxXSxpPXRbMF0pOihuPXRbMF0saT10WzFdKSxNYXRoLmF0YW4yKG5bMF0taVswXSxpWzFdLW5bMV0pKX1mdW5jdGlvbiBtJChlLHQpe3JldHVybiB0WysodC5sZWZ0IT09ZS5zaXRlKV19ZnVuY3Rpb24gJEVlKGUsdCl7cmV0dXJuIHRbKyh0LmxlZnQ9PT1lLnNpdGUpXX1mdW5jdGlvbiBPM3QoKXtmb3IodmFyIGU9MCx0PVZhLmxlbmd0aCxyLG4saSxvO2U8dDsrK2UpaWYoKHI9VmFbZV0pJiYobz0obj1yLmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pO2ZvcihpPTA7aTxvOysraSlhW2ldPWksc1tpXT1YRWUocix3b1tuW2ldXSk7Zm9yKGEuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBzW2NdLXNbbF19KSxpPTA7aTxvOysraSlzW2ldPW5bYVtpXV07Zm9yKGk9MDtpPG87KytpKW5baV09c1tpXX19ZnVuY3Rpb24gejN0KGUsdCxyLG4pe3ZhciBpPVZhLmxlbmd0aCxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyx5PSEwO2ZvcihvPTA7bzxpOysrbylpZihhPVZhW29dKXtmb3Iocz1hLnNpdGUsYz1hLmhhbGZlZGdlcyxsPWMubGVuZ3RoO2wtLTspd29bY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspZD0kRWUoYSx3b1tjW2xdXSksZz1kWzBdLF89ZFsxXSxoPW0kKGEsd29bY1srK2wldV1dKSxmPWhbMF0scD1oWzFdLChNYXRoLmFicyhnLWYpPkhyfHxNYXRoLmFicyhfLXApPkhyKSYmKGMuc3BsaWNlKGwsMCx3by5wdXNoKHIyKHMsZCxNYXRoLmFicyhnLWUpPEhyJiZuLV8+SHI/W2UsTWF0aC5hYnMoZi1lKTxIcj9wOm5dOk1hdGguYWJzKF8tbik8SHImJnItZz5Icj9bTWF0aC5hYnMocC1uKTxIcj9mOnIsbl06TWF0aC5hYnMoZy1yKTxIciYmXy10PkhyP1tyLE1hdGguYWJzKGYtcik8SHI/cDp0XTpNYXRoLmFicyhfLXQpPEhyJiZnLWU+SHI/W01hdGguYWJzKHAtdCk8SHI/ZjplLHRdOm51bGwpKS0xKSwrK3UpO3UmJih5PSExKX1pZih5KXt2YXIgeCxiLFMsQz0xLzA7Zm9yKG89MCx5PW51bGw7bzxpOysrbykoYT1WYVtvXSkmJihzPWEuc2l0ZSx4PXNbMF0tZSxiPXNbMV0tdCxTPXgqeCtiKmIsUzxDJiYoQz1TLHk9YSkpO2lmKHkpe3ZhciBQPVtlLHRdLGs9W2Usbl0sTz1bcixuXSxEPVtyLHRdO3kuaGFsZmVkZ2VzLnB1c2god28ucHVzaChyMihzPXkuc2l0ZSxQLGspKS0xLHdvLnB1c2gocjIocyxrLE8pKS0xLHdvLnB1c2gocjIocyxPLEQpKS0xLHdvLnB1c2gocjIocyxELFApKS0xKX19Zm9yKG89MDtvPGk7KytvKShhPVZhW29dKSYmKGEuaGFsZmVkZ2VzLmxlbmd0aHx8ZGVsZXRlIFZhW29dKX12YXIgRjN0PVtdLEo4O2Z1bmN0aW9uIEtFZSgpe3QyKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBjeShlKXt2YXIgdD1lLlAscj1lLk47aWYoISghdHx8IXIpKXt2YXIgbj10LnNpdGUsaT1lLnNpdGUsbz1yLnNpdGU7aWYobiE9PW8pe3ZhciBhPWlbMF0scz1pWzFdLGw9blswXS1hLGM9blsxXS1zLHU9b1swXS1hLGg9b1sxXS1zLGY9MioobCpoLWMqdSk7aWYoIShmPj0tQjN0KSl7dmFyIHA9bCpsK2MqYyxkPXUqdStoKmgsZz0oaCpwLWMqZCkvZixfPShsKmQtdSpwKS9mLHk9RjN0LnBvcCgpfHxuZXcgS0VlO3kuYXJjPWUseS5zaXRlPWkseS54PWcrYSx5Lnk9KHkuY3k9XytzKStNYXRoLnNxcnQoZypnK18qXyksZS5jaXJjbGU9eTtmb3IodmFyIHg9bnVsbCxiPW4yLl87YjspaWYoeS55PGIueXx8eS55PT09Yi55JiZ5Lng8PWIueClpZihiLkwpYj1iLkw7ZWxzZXt4PWIuUDticmVha31lbHNlIGlmKGIuUiliPWIuUjtlbHNle3g9YjticmVha31uMi5pbnNlcnQoeCx5KSx4fHwoSjg9eSl9fX19ZnVuY3Rpb24gdXkoZSl7dmFyIHQ9ZS5jaXJjbGU7dCYmKHQuUHx8KEo4PXQuTiksbjIucmVtb3ZlKHQpLEYzdC5wdXNoKHQpLHQyKHQpLGUuY2lyY2xlPW51bGwpfXZhciBWM3Q9W107ZnVuY3Rpb24gWkVlKCl7dDIodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIEgzdChlKXt2YXIgdD1WM3QucG9wKCl8fG5ldyBaRWU7cmV0dXJuIHQuc2l0ZT1lLHR9ZnVuY3Rpb24gZyQoZSl7dXkoZSksaHkucmVtb3ZlKGUpLFYzdC5wdXNoKGUpLHQyKGUpfWZ1bmN0aW9uIFUzdChlKXt2YXIgdD1lLmNpcmNsZSxyPXQueCxuPXQuY3ksaT1bcixuXSxvPWUuUCxhPWUuTixzPVtlXTtnJChlKTtmb3IodmFyIGw9bztsLmNpcmNsZSYmTWF0aC5hYnMoci1sLmNpcmNsZS54KTxIciYmTWF0aC5hYnMobi1sLmNpcmNsZS5jeSk8SHI7KW89bC5QLHMudW5zaGlmdChsKSxnJChsKSxsPW87cy51bnNoaWZ0KGwpLHV5KGwpO2Zvcih2YXIgYz1hO2MuY2lyY2xlJiZNYXRoLmFicyhyLWMuY2lyY2xlLngpPEhyJiZNYXRoLmFicyhuLWMuY2lyY2xlLmN5KTxIcjspYT1jLk4scy5wdXNoKGMpLGckKGMpLGM9YTtzLnB1c2goYyksdXkoYyk7dmFyIHU9cy5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1zW2hdLGw9c1toLTFdLE81KGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSxjPXNbdS0xXSxjLmVkZ2U9ZTIobC5zaXRlLGMuc2l0ZSxudWxsLGkpLGN5KGwpLGN5KGMpfWZ1bmN0aW9uIHEzdChlKXtmb3IodmFyIHQ9ZVswXSxyPWVbMV0sbixpLG8sYSxzPWh5Ll87czspaWYobz1HM3QocyxyKS10LG8+SHIpcz1zLkw7ZWxzZSBpZihhPXQtSkVlKHMsciksYT5Icil7aWYoIXMuUil7bj1zO2JyZWFrfXM9cy5SfWVsc2V7bz4tSHI/KG49cy5QLGk9cyk6YT4tSHI/KG49cyxpPXMuTik6bj1pPXM7YnJlYWt9RDN0KGUpO3ZhciBsPUgzdChlKTtpZihoeS5pbnNlcnQobixsKSwhKCFuJiYhaSkpe2lmKG49PT1pKXt1eShuKSxpPUgzdChuLnNpdGUpLGh5Lmluc2VydChsLGkpLGwuZWRnZT1pLmVkZ2U9ZTIobi5zaXRlLGwuc2l0ZSksY3kobiksY3koaSk7cmV0dXJufWlmKCFpKXtsLmVkZ2U9ZTIobi5zaXRlLGwuc2l0ZSk7cmV0dXJufXV5KG4pLHV5KGkpO3ZhciBjPW4uc2l0ZSx1PWNbMF0saD1jWzFdLGY9ZVswXS11LHA9ZVsxXS1oLGQ9aS5zaXRlLGc9ZFswXS11LF89ZFsxXS1oLHk9MiooZipfLXAqZykseD1mKmYrcCpwLGI9ZypnK18qXyxTPVsoXyp4LXAqYikveSt1LChmKmItZyp4KS95K2hdO081KGkuZWRnZSxjLGQsUyksbC5lZGdlPWUyKGMsZSxudWxsLFMpLGkuZWRnZT1lMihlLGQsbnVsbCxTKSxjeShuKSxjeShpKX19ZnVuY3Rpb24gRzN0KGUsdCl7dmFyIHI9ZS5zaXRlLG49clswXSxpPXJbMV0sbz1pLXQ7aWYoIW8pcmV0dXJuIG47dmFyIGE9ZS5QO2lmKCFhKXJldHVybi0xLzA7cj1hLnNpdGU7dmFyIHM9clswXSxsPXJbMV0sYz1sLXQ7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGg9MS9vLTEvYyxmPXUvYztyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKHUqdS8oLTIqYyktbCtjLzIraS1vLzIpKSkvaCtuOihuK3MpLzJ9ZnVuY3Rpb24gSkVlKGUsdCl7dmFyIHI9ZS5OO2lmKHIpcmV0dXJuIEczdChyLHQpO3ZhciBuPWUuc2l0ZTtyZXR1cm4gblsxXT09PXQ/blswXToxLzB9dmFyIEhyPTFlLTYsQjN0PTFlLTEyLGh5LFZhLG4yLHdvO2Z1bmN0aW9uIFFFZShlLHQscil7cmV0dXJuKGVbMF0tclswXSkqKHRbMV0tZVsxXSktKGVbMF0tdFswXSkqKHJbMV0tZVsxXSl9ZnVuY3Rpb24gdDVlKGUsdCl7cmV0dXJuIHRbMV0tZVsxXXx8dFswXS1lWzBdfWZ1bmN0aW9uIHo1KGUsdCl7dmFyIHI9ZS5zb3J0KHQ1ZSkucG9wKCksbixpLG87Zm9yKHdvPVtdLFZhPW5ldyBBcnJheShlLmxlbmd0aCksaHk9bmV3IGQkLG4yPW5ldyBkJDs7KWlmKG89SjgsciYmKCFvfHxyWzFdPG8ueXx8clsxXT09PW8ueSYmclswXTxvLngpKShyWzBdIT09bnx8clsxXSE9PWkpJiYocTN0KHIpLG49clswXSxpPXJbMV0pLHI9ZS5wb3AoKTtlbHNlIGlmKG8pVTN0KG8uYXJjKTtlbHNlIGJyZWFrO2lmKE8zdCgpLHQpe3ZhciBhPSt0WzBdWzBdLHM9K3RbMF1bMV0sbD0rdFsxXVswXSxjPSt0WzFdWzFdO04zdChhLHMsbCxjKSx6M3QoYSxzLGwsYyl9dGhpcy5lZGdlcz13byx0aGlzLmNlbGxzPVZhLGh5PW4yPXdvPVZhPW51bGx9ejUucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp6NSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbSQodCxlW25dKX0pO3JldHVybiByLmRhdGE9dC5zaXRlLmRhdGEscn0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihyLG4pe2lmKCEhKHM9KG89ci5oYWxmZWRnZXMpLmxlbmd0aCkpZm9yKHZhciBpPXIuc2l0ZSxvLGE9LTEscyxsLGM9dFtvW3MtMV1dLHU9Yy5sZWZ0PT09aT9jLnJpZ2h0OmMubGVmdDsrK2E8czspbD11LGM9dFtvW2FdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQsbCYmdSYmbjxsLmluZGV4JiZuPHUuaW5kZXgmJlFFZShpLGwsdSk8MCYmZS5wdXNoKFtpLmRhdGEsbC5kYXRhLHUuZGF0YV0pfSksZX0sbGlua3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmlnaHR9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue3NvdXJjZTplLmxlZnQuZGF0YSx0YXJnZXQ6ZS5yaWdodC5kYXRhfX0pfSxmaW5kOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49dGhpcyxpLG89bi5fZm91bmR8fDAsYT1uLmNlbGxzLmxlbmd0aCxzOyEocz1uLmNlbGxzW29dKTspaWYoKytvPj1hKXJldHVybiBudWxsO3ZhciBsPWUtcy5zaXRlWzBdLGM9dC1zLnNpdGVbMV0sdT1sKmwrYypjO2RvIHM9bi5jZWxsc1tpPW9dLG89bnVsbCxzLmhhbGZlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGgpe3ZhciBmPW4uZWRnZXNbaF0scD1mLmxlZnQ7aWYoISgocD09PXMuc2l0ZXx8IXApJiYhKHA9Zi5yaWdodCkpKXt2YXIgZD1lLXBbMF0sZz10LXBbMV0sXz1kKmQrZypnO188dSYmKHU9XyxvPXAuaW5kZXgpfX0pO3doaWxlKG8hPT1udWxsKTtyZXR1cm4gbi5fZm91bmQ9aSxyPT1udWxsfHx1PD1yKnI/cy5zaXRlOm51bGx9fTtmdW5jdGlvbiBXM3QoKXt2YXIgZT1MM3QsdD1rM3Qscj1udWxsO2Z1bmN0aW9uIG4oaSl7cmV0dXJuIG5ldyB6NShpLm1hcChmdW5jdGlvbihvLGEpe3ZhciBzPVtNYXRoLnJvdW5kKGUobyxhLGkpL0hyKSpIcixNYXRoLnJvdW5kKHQobyxhLGkpL0hyKSpIcl07cmV0dXJuIHMuaW5kZXg9YSxzLmRhdGE9byxzfSkscil9cmV0dXJuIG4ucG9seWdvbnM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkucG9seWdvbnMoKX0sbi5saW5rcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS5saW5rcygpfSxuLnRyaWFuZ2xlcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS50cmlhbmdsZXMoKX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6ZiQoK2kpLG4pOmV9LG4ueT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmYkKCtpKSxuKTp0fSxuLmV4dGVudD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6W1sraVswXVswXSwraVswXVsxXV0sWytpWzFdWzBdLCtpWzFdWzFdXV0sbik6ciYmW1tyWzBdWzBdLHJbMF1bMV1dLFtyWzFdWzBdLHJbMV1bMV1dXX0sbi5zaXplPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9PW51bGw/bnVsbDpbWzAsMF0sWytpWzBdLCtpWzFdXV0sbik6ciYmW3JbMV1bMF0tclswXVswXSxyWzFdWzFdLXJbMF1bMV1dfSxufWttKCk7ZnVuY3Rpb24gRjUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIF8kKGUsdCxyKXt0aGlzLnRhcmdldD1lLHRoaXMudHlwZT10LHRoaXMudHJhbnNmb3JtPXJ9ZnVuY3Rpb24gamgoZSx0LHIpe3RoaXMuaz1lLHRoaXMueD10LHRoaXMueT1yfWpoLnByb3RvdHlwZT17Y29uc3RydWN0b3I6amgsc2NhbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0xP3RoaXM6bmV3IGpoKHRoaXMuayplLHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PTAmdD09PTA/dGhpczpuZXcgamgodGhpcy5rLHRoaXMueCt0aGlzLmsqZSx0aGlzLnkrdGhpcy5rKnQpfSxhcHBseTpmdW5jdGlvbihlKXtyZXR1cm5bZVswXSp0aGlzLmsrdGhpcy54LGVbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbihlKXtyZXR1cm4gZSp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKGUpe3JldHVyblsoZVswXS10aGlzLngpL3RoaXMuaywoZVsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24oZSl7cmV0dXJuKGUtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24oZSl7cmV0dXJuKGUtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0scmVzY2FsZVk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29weSgpLmRvbWFpbihlLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAoZS5pbnZlcnQsZSkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgWGg9bmV3IGpoKDEsMCwwKTtpMi5wcm90b3R5cGU9amgucHJvdG90eXBlO2Z1bmN0aW9uIGkyKGUpe2Zvcig7IWUuX196b29tOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm4gWGg7cmV0dXJuIGUuX196b29tfWZ1bmN0aW9uIFE4KCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gbzIoKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGU1ZSgpe3JldHVybiFxdC5jdHJsS2V5JiYhcXQuYnV0dG9ufWZ1bmN0aW9uIHI1ZSgpe3ZhciBlPXRoaXM7cmV0dXJuIGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhlPWUub3duZXJTVkdFbGVtZW50fHxlLGUuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/KGU9ZS52aWV3Qm94LmJhc2VWYWwsW1tlLngsZS55XSxbZS54K2Uud2lkdGgsZS55K2UuaGVpZ2h0XV0pOltbMCwwXSxbZS53aWR0aC5iYXNlVmFsLnZhbHVlLGUuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXSk6W1swLDBdLFtlLmNsaWVudFdpZHRoLGUuY2xpZW50SGVpZ2h0XV19ZnVuY3Rpb24gWTN0KCl7cmV0dXJuIHRoaXMuX196b29tfHxYaH1mdW5jdGlvbiBuNWUoKXtyZXR1cm4tcXQuZGVsdGFZKihxdC5kZWx0YU1vZGU9PT0xPy4wNTpxdC5kZWx0YU1vZGU/MTouMDAyKX1mdW5jdGlvbiBpNWUoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gbzVlKGUsdCxyKXt2YXIgbj1lLmludmVydFgodFswXVswXSktclswXVswXSxpPWUuaW52ZXJ0WCh0WzFdWzBdKS1yWzFdWzBdLG89ZS5pbnZlcnRZKHRbMF1bMV0pLXJbMF1bMV0sYT1lLmludmVydFkodFsxXVsxXSktclsxXVsxXTtyZXR1cm4gZS50cmFuc2xhdGUoaT5uPyhuK2kpLzI6TWF0aC5taW4oMCxuKXx8TWF0aC5tYXgoMCxpKSxhPm8/KG8rYSkvMjpNYXRoLm1pbigwLG8pfHxNYXRoLm1heCgwLGEpKX1mdW5jdGlvbiB0Uigpe3ZhciBlPWU1ZSx0PXI1ZSxyPW81ZSxuPW41ZSxpPWk1ZSxvPVswLDEvMF0sYT1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxzPTI1MCxsPXlMLGM9dnMoInN0YXJ0Iiwiem9vbSIsImVuZCIpLHUsaCxmPTUwMCxwPTE1MCxkPTA7ZnVuY3Rpb24gZyhMKXtMLnByb3BlcnR5KCJfX3pvb20iLFkzdCkub24oIndoZWVsLnpvb20iLFApLm9uKCJtb3VzZWRvd24uem9vbSIsaykub24oImRibGNsaWNrLnpvb20iLE8pLmZpbHRlcihpKS5vbigidG91Y2hzdGFydC56b29tIixEKS5vbigidG91Y2htb3ZlLnpvb20iLEIpLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb20iLEkpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1nLnRyYW5zZm9ybT1mdW5jdGlvbihMLFIsRil7dmFyIHo9TC5zZWxlY3Rpb24/TC5zZWxlY3Rpb24oKTpMO3oucHJvcGVydHkoIl9fem9vbSIsWTN0KSxMIT09ej9iKEwsUixGKTp6LmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCx0eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSKS5lbmQoKX0pfSxnLnNjYWxlQnk9ZnVuY3Rpb24oTCxSLEYpe2cuc2NhbGVUbyhMLGZ1bmN0aW9uKCl7dmFyIHo9dGhpcy5fX3pvb20uayxVPXR5cGVvZiBSPT0iZnVuY3Rpb24iP1IuYXBwbHkodGhpcyxhcmd1bWVudHMpOlI7cmV0dXJuIHoqVX0sRil9LGcuc2NhbGVUbz1mdW5jdGlvbihMLFIsRil7Zy50cmFuc2Zvcm0oTCxmdW5jdGlvbigpe3ZhciB6PXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFU9dGhpcy5fX3pvb20sVz1GPT1udWxsP3goeik6dHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RixaPVUuaW52ZXJ0KFcpLHJ0PXR5cGVvZiBSPT0iZnVuY3Rpb24iP1IuYXBwbHkodGhpcyxhcmd1bWVudHMpOlI7cmV0dXJuIHIoeShfKFUscnQpLFcsWikseixhKX0sRil9LGcudHJhbnNsYXRlQnk9ZnVuY3Rpb24oTCxSLEYpe2cudHJhbnNmb3JtKEwsZnVuY3Rpb24oKXtyZXR1cm4gcih0aGlzLl9fem9vbS50cmFuc2xhdGUodHlwZW9mIFI9PSJmdW5jdGlvbiI/Ui5hcHBseSh0aGlzLGFyZ3VtZW50cyk6Uix0eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpGKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhKX0pfSxnLnRyYW5zbGF0ZVRvPWZ1bmN0aW9uKEwsUixGLHope2cudHJhbnNmb3JtKEwsZnVuY3Rpb24oKXt2YXIgVT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxXPXRoaXMuX196b29tLFo9ej09bnVsbD94KFUpOnR5cGVvZiB6PT0iZnVuY3Rpb24iP3ouYXBwbHkodGhpcyxhcmd1bWVudHMpOno7cmV0dXJuIHIoWGgudHJhbnNsYXRlKFpbMF0sWlsxXSkuc2NhbGUoVy5rKS50cmFuc2xhdGUodHlwZW9mIFI9PSJmdW5jdGlvbiI/LVIuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1SLHR5cGVvZiBGPT0iZnVuY3Rpb24iPy1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotRiksVSxhKX0seil9O2Z1bmN0aW9uIF8oTCxSKXtyZXR1cm4gUj1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sUikpLFI9PT1MLms/TDpuZXcgamgoUixMLngsTC55KX1mdW5jdGlvbiB5KEwsUixGKXt2YXIgej1SWzBdLUZbMF0qTC5rLFU9UlsxXS1GWzFdKkwuaztyZXR1cm4gej09PUwueCYmVT09PUwueT9MOm5ldyBqaChMLmsseixVKX1mdW5jdGlvbiB4KEwpe3JldHVyblsoK0xbMF1bMF0rICtMWzFdWzBdKS8yLCgrTFswXVsxXSsgK0xbMV1bMV0pLzJdfWZ1bmN0aW9uIGIoTCxSLEYpe0wub24oInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsZnVuY3Rpb24oKXtTKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciB6PXRoaXMsVT1hcmd1bWVudHMsVz1TKHosVSksWj10LmFwcGx5KHosVSkscnQ9Rj09bnVsbD94KFopOnR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkoeixVKTpGLG90PU1hdGgubWF4KFpbMV1bMF0tWlswXVswXSxaWzFdWzFdLVpbMF1bMV0pLHN0PXouX196b29tLFN0PXR5cGVvZiBSPT0iZnVuY3Rpb24iP1IuYXBwbHkoeixVKTpSLGJ0PWwoc3QuaW52ZXJ0KHJ0KS5jb25jYXQob3Qvc3QuayksU3QuaW52ZXJ0KHJ0KS5jb25jYXQob3QvU3QuaykpO3JldHVybiBmdW5jdGlvbihNdCl7aWYoTXQ9PT0xKU10PVN0O2Vsc2V7dmFyIGx0PWJ0KE10KSxLdD1vdC9sdFsyXTtNdD1uZXcgamgoS3QscnRbMF0tbHRbMF0qS3QscnRbMV0tbHRbMV0qS3QpfVcuem9vbShudWxsLE10KX19KX1mdW5jdGlvbiBTKEwsUixGKXtyZXR1cm4hRiYmTC5fX3pvb21pbmd8fG5ldyBDKEwsUil9ZnVuY3Rpb24gQyhMLFIpe3RoaXMudGhhdD1MLHRoaXMuYXJncz1SLHRoaXMuYWN0aXZlPTAsdGhpcy5leHRlbnQ9dC5hcHBseShMLFIpLHRoaXMudGFwcz0wfUMucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybisrdGhpcy5hY3RpdmU9PT0xJiYodGhpcy50aGF0Ll9fem9vbWluZz10aGlzLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihMLFIpe3JldHVybiB0aGlzLm1vdXNlJiZMIT09Im1vdXNlIiYmKHRoaXMubW91c2VbMV09Ui5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiZMIT09InRvdWNoIiYmKHRoaXMudG91Y2gwWzFdPVIuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJkwhPT0idG91Y2giJiYodGhpcy50b3VjaDFbMV09Ui5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPVIsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuLS10aGlzLmFjdGl2ZT09PTAmJihkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZyx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKEwpe01wKG5ldyBfJChnLEwsdGhpcy50aGF0Ll9fem9vbSksYy5hcHBseSxjLFtMLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19O2Z1bmN0aW9uIFAoKXtpZighZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBMPVModGhpcyxhcmd1bWVudHMpLFI9dGhpcy5fX3pvb20sRj1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sUi5rKk1hdGgucG93KDIsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksej16byh0aGlzKTtpZihMLndoZWVsKShMLm1vdXNlWzBdWzBdIT09elswXXx8TC5tb3VzZVswXVsxXSE9PXpbMV0pJiYoTC5tb3VzZVsxXT1SLmludmVydChMLm1vdXNlWzBdPXopKSxjbGVhclRpbWVvdXQoTC53aGVlbCk7ZWxzZXtpZihSLms9PT1GKXJldHVybjtMLm1vdXNlPVt6LFIuaW52ZXJ0KHopXSxodSh0aGlzKSxMLnN0YXJ0KCl9bzIoKSxMLndoZWVsPXNldFRpbWVvdXQoVSxwKSxMLnpvb20oIm1vdXNlIixyKHkoXyhSLEYpLEwubW91c2VbMF0sTC5tb3VzZVsxXSksTC5leHRlbnQsYSkpO2Z1bmN0aW9uIFUoKXtMLndoZWVsPW51bGwsTC5lbmQoKX19ZnVuY3Rpb24gaygpe2lmKGh8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIEw9Uyh0aGlzLGFyZ3VtZW50cywhMCksUj1IdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLFcsITApLm9uKCJtb3VzZXVwLnpvb20iLFosITApLEY9em8odGhpcyksej1xdC5jbGllbnRYLFU9cXQuY2xpZW50WTt6bShxdC52aWV3KSxROCgpLEwubW91c2U9W0YsdGhpcy5fX3pvb20uaW52ZXJ0KEYpXSxodSh0aGlzKSxMLnN0YXJ0KCk7ZnVuY3Rpb24gVygpe2lmKG8yKCksIUwubW92ZWQpe3ZhciBydD1xdC5jbGllbnRYLXosb3Q9cXQuY2xpZW50WS1VO0wubW92ZWQ9cnQqcnQrb3Qqb3Q+ZH1MLnpvb20oIm1vdXNlIixyKHkoTC50aGF0Ll9fem9vbSxMLm1vdXNlWzBdPXpvKEwudGhhdCksTC5tb3VzZVsxXSksTC5leHRlbnQsYSkpfWZ1bmN0aW9uIFooKXtSLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLEZtKHF0LnZpZXcsTC5tb3ZlZCksbzIoKSxMLmVuZCgpfX1mdW5jdGlvbiBPKCl7aWYoISFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIEw9dGhpcy5fX3pvb20sUj16byh0aGlzKSxGPUwuaW52ZXJ0KFIpLHo9TC5rKihxdC5zaGlmdEtleT8uNToyKSxVPXIoeShfKEwseiksUixGKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhKTtvMigpLHM+MD9IdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24ocykuY2FsbChiLFUsUik6SHQodGhpcykuY2FsbChnLnRyYW5zZm9ybSxVKX19ZnVuY3Rpb24gRCgpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBMPXF0LnRvdWNoZXMsUj1MLmxlbmd0aCxGPVModGhpcyxhcmd1bWVudHMscXQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09UikseixVLFcsWjtmb3IoUTgoKSxVPTA7VTxSOysrVSlXPUxbVV0sWj1UcCh0aGlzLEwsVy5pZGVudGlmaWVyKSxaPVtaLHRoaXMuX196b29tLmludmVydChaKSxXLmlkZW50aWZpZXJdLEYudG91Y2gwPyFGLnRvdWNoMSYmRi50b3VjaDBbMl0hPT1aWzJdJiYoRi50b3VjaDE9WixGLnRhcHM9MCk6KEYudG91Y2gwPVosej0hMCxGLnRhcHM9MSshIXUpO3UmJih1PWNsZWFyVGltZW91dCh1KSkseiYmKEYudGFwczwyJiYodT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dT1udWxsfSxmKSksaHUodGhpcyksRi5zdGFydCgpKX19ZnVuY3Rpb24gQigpe2lmKCEhdGhpcy5fX3pvb21pbmcpe3ZhciBMPVModGhpcyxhcmd1bWVudHMpLFI9cXQuY2hhbmdlZFRvdWNoZXMsRj1SLmxlbmd0aCx6LFUsVyxaO2ZvcihvMigpLHUmJih1PWNsZWFyVGltZW91dCh1KSksTC50YXBzPTAsej0wO3o8RjsrK3opVT1SW3pdLFc9VHAodGhpcyxSLFUuaWRlbnRpZmllciksTC50b3VjaDAmJkwudG91Y2gwWzJdPT09VS5pZGVudGlmaWVyP0wudG91Y2gwWzBdPVc6TC50b3VjaDEmJkwudG91Y2gxWzJdPT09VS5pZGVudGlmaWVyJiYoTC50b3VjaDFbMF09Vyk7aWYoVT1MLnRoYXQuX196b29tLEwudG91Y2gxKXt2YXIgcnQ9TC50b3VjaDBbMF0sb3Q9TC50b3VjaDBbMV0sc3Q9TC50b3VjaDFbMF0sU3Q9TC50b3VjaDFbMV0sYnQ9KGJ0PXN0WzBdLXJ0WzBdKSpidCsoYnQ9c3RbMV0tcnRbMV0pKmJ0LE10PShNdD1TdFswXS1vdFswXSkqTXQrKE10PVN0WzFdLW90WzFdKSpNdDtVPV8oVSxNYXRoLnNxcnQoYnQvTXQpKSxXPVsocnRbMF0rc3RbMF0pLzIsKHJ0WzFdK3N0WzFdKS8yXSxaPVsob3RbMF0rU3RbMF0pLzIsKG90WzFdK1N0WzFdKS8yXX1lbHNlIGlmKEwudG91Y2gwKVc9TC50b3VjaDBbMF0sWj1MLnRvdWNoMFsxXTtlbHNlIHJldHVybjtMLnpvb20oInRvdWNoIixyKHkoVSxXLFopLEwuZXh0ZW50LGEpKX19ZnVuY3Rpb24gSSgpe2lmKCEhdGhpcy5fX3pvb21pbmcpe3ZhciBMPVModGhpcyxhcmd1bWVudHMpLFI9cXQuY2hhbmdlZFRvdWNoZXMsRj1SLmxlbmd0aCx6LFU7Zm9yKFE4KCksaCYmY2xlYXJUaW1lb3V0KGgpLGg9c2V0VGltZW91dChmdW5jdGlvbigpe2g9bnVsbH0sZiksej0wO3o8RjsrK3opVT1SW3pdLEwudG91Y2gwJiZMLnRvdWNoMFsyXT09PVUuaWRlbnRpZmllcj9kZWxldGUgTC50b3VjaDA6TC50b3VjaDEmJkwudG91Y2gxWzJdPT09VS5pZGVudGlmaWVyJiZkZWxldGUgTC50b3VjaDE7aWYoTC50b3VjaDEmJiFMLnRvdWNoMCYmKEwudG91Y2gwPUwudG91Y2gxLGRlbGV0ZSBMLnRvdWNoMSksTC50b3VjaDApTC50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KEwudG91Y2gwWzBdKTtlbHNlIGlmKEwuZW5kKCksTC50YXBzPT09Mil7dmFyIFc9SHQodGhpcykub24oImRibGNsaWNrLnpvb20iKTtXJiZXLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBnLndoZWVsRGVsdGE9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpGNSgrTCksZyk6bn0sZy5maWx0ZXI9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpGNSghIUwpLGcpOmV9LGcudG91Y2hhYmxlPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6RjUoISFMKSxnKTppfSxnLmV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOkY1KFtbK0xbMF1bMF0sK0xbMF1bMV1dLFsrTFsxXVswXSwrTFsxXVsxXV1dKSxnKTp0fSxnLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvWzBdPStMWzBdLG9bMV09K0xbMV0sZyk6W29bMF0sb1sxXV19LGcudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhWzBdWzBdPStMWzBdWzBdLGFbMV1bMF09K0xbMV1bMF0sYVswXVsxXT0rTFswXVsxXSxhWzFdWzFdPStMWzFdWzFdLGcpOltbYVswXVswXSxhWzBdWzFdXSxbYVsxXVswXSxhWzFdWzFdXV19LGcuY29uc3RyYWluPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPUwsZyk6cn0sZy5kdXJhdGlvbj1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rTCxnKTpzfSxnLmludGVycG9sYXRlPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPUwsZyk6bH0sZy5vbj1mdW5jdGlvbigpe3ZhciBMPWMub24uYXBwbHkoYyxhcmd1bWVudHMpO3JldHVybiBMPT09Yz9nOkx9LGcuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0oTD0rTCkqTCxnKTpNYXRoLnNxcnQoZCl9LGd9dmFyIGozdD1FZShPZSgpLDEpO3ZhciBlUj1jbGFzcyBleHRlbmRzIGJwe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBlcmltZW50cz1bXX1sb2FkKCl7bGV0IHQ9dmUoKS5leHBlcmltZW50cygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57ajN0LmlzRXF1YWwodGhpcy5fZXhwZXJpbWVudHMscil8fCh0aGlzLl9leHBlcmltZW50cz1yLHRoaXMuZW1pdENoYW5nZSgpKX0pfWdldEV4cGVyaW1lbnRzKCl7cmV0dXJuIHRoaXMuX2V4cGVyaW1lbnRzLnNsaWNlKCl9fSxyUj1uZXcgZVI7dmFyIGE1ZT17Z29vZ2xlU3RhbmRhcmQ6WyIjZGI0NDM3IiwiI2ZmNzA0MyIsIiNmNGI0MDAiLCIjMGY5ZDU4IiwiIzAwNzk2YiIsIiMwMGFjYzEiLCIjNDI4NWY0IiwiIzVjNmJjMCIsIiNhYjQ3YmMiXSxnb29nbGVDb29sOlsiIzllOWQyNCIsIiMwZjlkNTgiLCIjMDA3OTZiIiwiIzAwYWNjMSIsIiM0Mjg1ZjQiLCIjNWM2YmMwIiwiIzYwN2Q4YiJdLGdvb2dsZVdhcm06WyIjNzk1NTQ4IiwiI2FiNDdiYyIsIiNmMDYyOTIiLCIjYzIxODViIiwiI2RiNDQzNyIsIiNmZjcwNDMiLCIjZjRiNDAwIl0sZ29vZ2xlQ29sb3JCbGluZEFzc2lzdDpbIiNmZjcwNDMiLCIjMDBBQ0MxIiwiI0FCNDdCQyIsIiMyQTU2QzYiLCIjMGI4MDQzIiwiI0Y3Q0I0RCIsIiNjMGNhMzMiLCIjNWUzNWIxIiwiI0E1MjcxNCJdLHRlbnNvcmJvYXJkQ29sb3JCbGluZEFzc2lzdDpbIiNmZjcwNDMiLCIjMDA3N2JiIiwiI2NjMzMxMSIsIiMzM2JiZWUiLCIjZWUzMzc3IiwiIzAwOTk4OCIsIiNiYmJiYmIiXSxjb2xvckJsaW5kQXNzaXN0MTpbIiM0NDc3YWEiLCIjNDRhYWFhIiwiI2FhYWE0NCIsIiNhYTc3NDQiLCIjYWE0NDU1IiwiI2FhNDQ4OCJdLGNvbG9yQmxpbmRBc3Npc3QyOlsiIzg4Y2NlZSIsIiM0NGFhOTkiLCIjMTE3NzMzIiwiIzk5OTkzMyIsIiNkZGNjNzciLCIjY2M2Njc3IiwiIzg4MjI1NSIsIiNhYTQ0OTkiXSxjb2xvckJsaW5kQXNzaXN0MzpbIiMzMzIyODgiLCIjNjY5OWNjIiwiIzg4Y2NlZSIsIiM0NGFhOTkiLCIjMTE3NzMzIiwiIzk5OTkzMyIsIiNkZGNjNzciLCIjY2M2Njc3IiwiI2FhNDQ2NiIsIiM4ODIyNTUiLCIjNjYxMTAwIiwiI2FhNDQ5OSJdLGNvbG9yQmxpbmRBc3Npc3Q0OlsiIzQ0NzdhYSIsIiM2NmNjZWUiLCIjMjI4ODMzIiwiI2NjYmI0NCIsIiNlZTY2NzciLCIjYWEzMzc3IiwiI2JiYmJiYiJdLGNvbG9yQmxpbmRBc3Npc3Q1OlsiI0ZGNkRCNiIsIiM5MjAwMDAiLCIjOTI0OTAwIiwiI0RCRDEwMCIsIiMyNEZGMjQiLCIjMDA2RERCIiwiIzQ5MDA5MiJdLG1sZGFzaDpbIiNFNDdFQUQiLCIjRjQ2NDBEIiwiI0ZBQTMwMCIsIiNGNUU2MzYiLCIjMDBBMDc3IiwiIzAwNzdCOCIsIiMwMEI3RUQiXX0sblI9YTVlLnRlbnNvcmJvYXJkQ29sb3JCbGluZEFzc2lzdDt2YXIgeSQ9Y2xhc3N7Y29uc3RydWN0b3IodD1uUil7dGhpcy5wYWxldHRlPXQsdGhpcy5pZGVudGlmaWVycz1KaSgpfXNldERvbWFpbih0KXtyZXR1cm4gdGhpcy5pZGVudGlmaWVycz1KaSgpLHQuZm9yRWFjaCgocixuKT0+e3RoaXMuaWRlbnRpZmllcnMuc2V0KHIsdGhpcy5wYWxldHRlW24ldGhpcy5wYWxldHRlLmxlbmd0aF0pfSksdGhpc31nZXRDb2xvcih0KXtpZighdGhpcy5pZGVudGlmaWVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBTdHJpbmcgJHt0fSB3YXMgbm90IGluIHRoZSBkb21haW4uYCk7cmV0dXJuIHRoaXMuaWRlbnRpZmllcnMuZ2V0KHQpfX07ZnVuY3Rpb24gWDN0KGUsdCl7bGV0IHI9bmV3IHkkO2Z1bmN0aW9uIG4oKXtyLnNldERvbWFpbih0KCkpfXJldHVybiBlLmFkZExpc3RlbmVyKG4pLG4oKSxpPT5yLmdldENvbG9yKGkpfXZhciBmbj1YM3Qod3AsKCk9PndwLmdldFJ1bnMoKSksbFFyPVgzdChyUiwoKT0+clIuZ2V0RXhwZXJpbWVudHMoKS5tYXAoKHtuYW1lOmV9KT0+ZSkpO3ZhciBvZz1FZShPZSgpLDEpO19zKHttb2R1bGVOYW1lOiJydW4tY29sb3Itc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICBbY29sb3ItY2xhc3M9J2xpZ2h0LWJsdWUnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1saWdodC1ibHVlLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1saWdodC1ibHVlLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdyZWQnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcmVkLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcmVkLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcmVkLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J2dyZWVuJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWdyZWVuLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWdyZWVuLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWdyZWVuLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J3B1cnBsZSddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1wdXJwbGUtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1wdXJwbGUtOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1wdXJwbGUtOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0ndGVhbCddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXRlYWwtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXRlYWwtOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J3BpbmsnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcGluay01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcGluay05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdvcmFuZ2UnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItb3JhbmdlLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItb3JhbmdlLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItb3JhbmdlLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J2Jyb3duJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWJyb3duLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWJyb3duLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWJyb3duLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J2luZGlnbyddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tOTAwKTsKICAgIH0KICBgfSk7dmFyIG9sPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm5hbWVzPVtdLHRoaXMuY29sb3Jpbmc9e2dldENvbG9yOigpPT4iIn0sdGhpcy5yZWdleD0iIix0aGlzLnNlbGVjdGlvblN0YXRlPXt9LHRoaXMubWF4TmFtZXNUb0VuYWJsZUJ5RGVmYXVsdD00MCx0aGlzLl9kZWJvdW5jZWRSZWdleENoYW5nZT10aGlzLl9kZWJvdW5jZWRSZWdleENoYW5nZUltcGwoKX1fZGVib3VuY2VkUmVnZXhDaGFuZ2VJbXBsKCl7dmFyIHQ9b2cuZGVib3VuY2Uocj0+e3RoaXMucmVnZXg9cn0sMTUwLHtsZWFkaW5nOiExfSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy4kJCgiI25hbWVzLXJlZ2V4IikudmFsdWU7cj09IiI/dGhpcy5hc3luYygoKT0+e3RoaXMucmVnZXg9cn0sMzApOnQocil9fWdldCBfcmVnZXgoKXt2YXIgdD10aGlzLnJlZ2V4O3RyeXtyZXR1cm4gbmV3IFJlZ0V4cCh0KX1jYXRjaChyKXtyZXR1cm4gbnVsbH19X3NldElzb2xhdG9ySWNvbigpe3ZhciBpO3ZhciB0PXRoaXMuc2VsZWN0aW9uU3RhdGUscj1vZy5maWx0ZXIob2cudmFsdWVzKHQpKS5sZW5ndGgsbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCgoaT10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDppLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpKTtuLmZvckVhY2goZnVuY3Rpb24obyl7cj09PTEmJnRbby5uYW1lXT9vLmljb249InJhZGlvLWJ1dHRvbi1jaGVja2VkIjpvLmljb249InJhZGlvLWJ1dHRvbi11bmNoZWNrZWQifSl9Y29tcHV0ZU5hbWVzTWF0Y2hpbmdSZWdleCh0LHIpe2xldCBuPXRoaXMuX3JlZ2V4O3JldHVybiBuP3RoaXMubmFtZXMuZmlsdGVyKGk9Pm4udGVzdChpKSk6dGhpcy5uYW1lc31jb21wdXRlT3V0U2VsZWN0ZWQodCxyKXt2YXIgbj10aGlzLnNlbGVjdGlvblN0YXRlLGk9dGhpcy5tYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0LG89dGhpcy5uYW1lc01hdGNoaW5nUmVnZXgubGVuZ3RoPD1pO3JldHVybiB0aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5maWx0ZXIoYT0+blthXT09bnVsbD9vOm5bYV0pfXN5bmNocm9uaXplQ29sb3JzKHQpe3ZhciBpLG8sYSxzO3RoaXMuX3NldElzb2xhdG9ySWNvbigpLCgobz0oaT10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDppLnF1ZXJ5U2VsZWN0b3JBbGwoInBhcGVyLWNoZWNrYm94IikpIT1udWxsP286W10pLmZvckVhY2gobD0+e2xldCBjPXRoaXMuY29sb3JpbmcuZ2V0Q29sb3IobC5uYW1lKTtsLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciI6YywiLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvciI6YywiLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvciI6Y30pfSksKChzPShhPXRoaXMucm9vdCk9PW51bGw/dm9pZCAwOmEucXVlcnlTZWxlY3RvckFsbCgiLmlzb2xhdG9yIikpIT1udWxsP3M6W10pLmZvckVhY2gobD0+e2xldCBjPXRoaXMuY29sb3JpbmcuZ2V0Q29sb3IobC5uYW1lKTtsLnN0eWxlLmNvbG9yPWN9KSx3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy51cGRhdGVTdHlsZXMoKX0pfV9pc29sYXRlTmFtZSh0KXt2YXIgcj10LnRhcmdldC5uYW1lLG49e307dGhpcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGkpe25baV09aT09cn0pLHRoaXMuc2VsZWN0aW9uU3RhdGU9bn1fY2hlY2tib3hDaGFuZ2UodCl7dmFyIHI9dC50YXJnZXQ7bGV0IG49b2cuY2xvbmUodGhpcy5zZWxlY3Rpb25TdGF0ZSk7bltyLm5hbWVdPXIuY2hlY2tlZCx0aGlzLnNlbGVjdGlvblN0YXRlPW59X2lzQ2hlY2tlZCh0LHIpe3JldHVybiB0aGlzLm91dFNlbGVjdGVkLmluZGV4T2YodCkhPS0xfXRvZ2dsZUFsbCgpe2xldCB0PXRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4LnNvbWUobj0+dGhpcy5vdXRTZWxlY3RlZC5pbmNsdWRlcyhuKSkscj17fTt0aGlzLm5hbWVzLmZvckVhY2gobj0+e3Jbbl09IXR9KSx0aGlzLnNlbGVjdGlvblN0YXRlPXJ9fTtvbC50ZW1wbGF0ZT1RYAogICAgPHN0eWxlIGluY2x1ZGU9InNjcm9sbGJhci1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJydW4tY29sb3Itc3R5bGUiPjwvc3R5bGU+CgogICAgPHBhcGVyLWlucHV0CiAgICAgIGlkPSJuYW1lcy1yZWdleCIKICAgICAgbm8tbGFiZWwtZmxvYXQ9IiIKICAgICAgbGFiZWw9IldyaXRlIGEgcmVnZXggdG8gZmlsdGVyIHJ1bnMiCiAgICAgIHZhbHVlPSJbW3JlZ2V4XV0iCiAgICAgIG9uLWJpbmQtdmFsdWUtY2hhbmdlZD0iX2RlYm91bmNlZFJlZ2V4Q2hhbmdlIgogICAgPjwvcGFwZXItaW5wdXQ+CiAgICA8ZGl2IGlkPSJvdXRlci1jb250YWluZXIiIGNsYXNzPSJzY3JvbGxiYXIiPgogICAgICA8dGVtcGxhdGUKICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICBpdGVtcz0iW1tuYW1lc01hdGNoaW5nUmVnZXhdXSIKICAgICAgICBvbi1kb20tY2hhbmdlPSJzeW5jaHJvbml6ZUNvbG9ycyIKICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUtcm93Ij4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9Imljb24tY29udGFpbmVyIGNoZWNrYm94LWNvbnRhaW5lciB2ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIiCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgIGNsYXNzPSJjaGVja2JveCB2ZXJ0aWNhbC1hbGlnbi1jZW50ZXIiCiAgICAgICAgICAgICAgaWQkPSJjaGVja2JveC1bW2l0ZW1dXSIKICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW1dXSIKICAgICAgICAgICAgICBjaGVja2VkJD0iW1tfaXNDaGVja2VkKGl0ZW0sIHNlbGVjdGlvblN0YXRlLiopXV0iCiAgICAgICAgICAgICAgb24tY2hhbmdlPSJfY2hlY2tib3hDaGFuZ2UiCiAgICAgICAgICAgID48L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJpY29uLWNvbnRhaW5lciBpc29sYXRvci1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICBpY29uPSJyYWRpby1idXR0b24tdW5jaGVja2VkIgogICAgICAgICAgICAgIGNsYXNzPSJpc29sYXRvciB2ZXJ0aWNhbC1hbGlnbi1jZW50ZXIiCiAgICAgICAgICAgICAgb24tdGFwPSJfaXNvbGF0ZU5hbWUiCiAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtXV0iCiAgICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtLWxhYmVsLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxzcGFuPltbaXRlbV1dPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgcGFwZXItaW5wdXQgewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgfQogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgICNvdXRlci1jb250YWluZXIgewogICAgICAgIGNvbnRhaW46IGNvbnRlbnQ7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5uYW1lLXJvdyB7CiAgICAgICAgY29udGFpbjogY29udGVudDsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA1cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7IC8qIG1ha2VzIHdyYXBwaW5nIG9mIGh5cGVycGFyYW0gc3RyaW5ncyBiZXR0ZXIgKi8KICAgICAgfQogICAgICAuaWNvbi1jb250YWluZXIgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuY2hlY2tib3ggewogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgfQogICAgICAuaXNvbGF0b3IgewogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yLWNvbnRhaW5lciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA2cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogM3B4OwogICAgICB9CiAgICAgIC5jaGVja2JveC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC5pdGVtLWxhYmVsLWNvbnRhaW5lciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHdpZHRoOiAwcHg7IC8qIGhhY2sgdG8gZ2V0IHRoZSBmbGV4LWdyb3cgdG8gd29yayBwcm9wZXJseSAqLwogICAgICB9CiAgICAgIC50b29sdGlwLXZhbHVlLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQogICAgICAudmVydGljYWwtYWxpZ24tY29udGFpbmVyIC52ZXJ0aWNhbC1hbGlnbi1jZW50ZXIgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgfQogICAgICAudmVydGljYWwtYWxpZ24tY29udGFpbmVyIC52ZXJ0aWNhbC1hbGlnbi10b3AgewogICAgICAgIGFsaWduLXNlbGY6IHN0YXJ0OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwibmFtZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sb2wucHJvdG90eXBlLCJjb2xvcmluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sb2wucHJvdG90eXBlLCJyZWdleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LGNvbXB1dGVkOiJjb21wdXRlTmFtZXNNYXRjaGluZ1JlZ2V4KG5hbWVzLiosIF9yZWdleCkifSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sb2wucHJvdG90eXBlLCJuYW1lc01hdGNoaW5nUmVnZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwic2VsZWN0aW9uU3RhdGUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITAsY29tcHV0ZWQ6ImNvbXB1dGVPdXRTZWxlY3RlZChuYW1lc01hdGNoaW5nUmVnZXguKiwgc2VsZWN0aW9uU3RhdGUuKikifSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sb2wucHJvdG90eXBlLCJvdXRTZWxlY3RlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxvbC5wcm90b3R5cGUsIm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sb2wucHJvdG90eXBlLCJfZGVib3VuY2VkUmVnZXhDaGFuZ2UiLHZvaWQgMCk7RShbUnQoInJlZ2V4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sb2wucHJvdG90eXBlLCJfcmVnZXgiLG51bGwpO0UoW0J0KCJzZWxlY3Rpb25TdGF0ZSIsIm5hbWVzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxvbC5wcm90b3R5cGUsIl9zZXRJc29sYXRvckljb24iLG51bGwpO29sPUUoW3l0KCJ0Zi1tdWx0aS1jaGVja2JveCIpXSxvbCk7dmFyIGEyPWNsYXNzIGV4dGVuZHMgbXR7Z2V0IF9wYXJ0cygpe3ZhciB0PXRoaXMudmFsdWUscj10aGlzLmRlbGltaXRlclBhdHRlcm47bGV0IG49W107Zm9yKDs7KXtsZXQgaT1uZXcgUmVnRXhwKHIsImciKTtpZihpLnRlc3QodCksaS5sYXN0SW5kZXg9PT0wKXtuLnB1c2godCk7YnJlYWt9ZWxzZSBuLnB1c2godC5zbGljZSgwLGkubGFzdEluZGV4KSksdD10LnNsaWNlKGkubGFzdEluZGV4KX1yZXR1cm4gbn19O2EyLnRlbXBsYXRlPVFgCiAgICA8IS0tCiAgICAgIFRoaXMgdWdseSBmb3JtYXR0aW5nIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgc3BhY2VzIGZyb20gc2xpcHBpbmcKICAgICAgaW50byB0aGUgSFRNTC4KICAgIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcGFydHNdXSIgYXM9InBhcnQiCiAgICAgID5bW3BhcnRdXTx3YnIKICAgIC8+PC90ZW1wbGF0ZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGEyLnByb3RvdHlwZSwidmFsdWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYTIucHJvdG90eXBlLCJkZWxpbWl0ZXJQYXR0ZXJuIix2b2lkIDApO0UoW1J0KCJ2YWx1ZSIsImRlbGltaXRlclBhdHRlcm4iKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGEyLnByb3RvdHlwZSwiX3BhcnRzIixudWxsKTthMj1FKFt5dCgidGYtd2JyLXN0cmluZyIpXSxhMik7dmFyIG1jPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJ1blNlbGVjdGlvblN0YXRlPXpXKCJydW5TZWxlY3Rpb25TdGF0ZSIse2RlZmF1bHRWYWx1ZTp7fX0pLmNhbGwodGhpcyksdGhpcy5yZWdleElucHV0PXlfKCJyZWdleElucHV0Iix7ZGVmYXVsdFZhbHVlOiIifSkuY2FsbCh0aGlzKSx0aGlzLl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoPTI1MCx0aGlzLl9kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuPSJbLz1fLC1dIix0aGlzLmNvbG9yaW5nPXtnZXRDb2xvcjpmbn0sdGhpcy5fc3RvcmVSdW5TZWxlY3Rpb25TdGF0ZT1GVygicnVuU2VsZWN0aW9uU3RhdGUiLHtkZWZhdWx0VmFsdWU6e319KSx0aGlzLl9yZWdleE9ic2VydmVyPXZfKCJyZWdleElucHV0Iix7ZGVmYXVsdFZhbHVlOiIifSl9YXR0YWNoZWQoKXt0aGlzLl9ydW5TdG9yZUxpc3RlbmVyPXdwLmFkZExpc3RlbmVyKCgpPT57dGhpcy5zZXQoInJ1bnMiLHdwLmdldFJ1bnMoKSl9KSx0aGlzLnNldCgicnVucyIsd3AuZ2V0UnVucygpKSx0aGlzLl9lbnZTdG9yZUxpc3RlbmVyPWliLmFkZExpc3RlbmVyKCgpPT57dGhpcy5zZXQoImRhdGFMb2NhdGlvbiIsaWIuZ2V0RGF0YUxvY2F0aW9uKCkpfSksdGhpcy5zZXQoImRhdGFMb2NhdGlvbiIsaWIuZ2V0RGF0YUxvY2F0aW9uKCkpfWRldGFjaGVkKCl7d3AucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9ydW5TdG9yZUxpc3RlbmVyKSxpYi5yZW1vdmVMaXN0ZW5lckJ5S2V5KHRoaXMuX2VudlN0b3JlTGlzdGVuZXIpfV90b2dnbGVBbGwoKXt0aGlzLiQubXVsdGlDaGVja2JveC50b2dnbGVBbGwoKX1nZXQgX2NsaXBwZWREYXRhTG9jYXRpb24oKXt2YXIgdD10aGlzLmRhdGFMb2NhdGlvbixyPXRoaXMuX2RhdGFMb2NhdGlvbkNsaXBMZW5ndGg7aWYodCE9PXZvaWQgMClyZXR1cm4gdC5sZW5ndGg+cj90LnN1YnN0cmluZygwLHIpOnR9X29wZW5EYXRhTG9jYXRpb25EaWFsb2codCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuJCQoIiNkYXRhLWxvY2F0aW9uLWRpYWxvZyIpLm9wZW4oKX1fc2hvdWxkU2hvd0V4cGFuZERhdGFMb2NhdGlvbkJ1dHRvbih0LHIpe3JldHVybiB0JiZ0Lmxlbmd0aD5yfX07bWMudGVtcGxhdGU9UWAKICAgIDxwYXBlci1kaWFsb2cgd2l0aC1iYWNrZHJvcD0iIiBpZD0iZGF0YS1sb2NhdGlvbi1kaWFsb2ciPgogICAgICA8aDI+RGF0YSBMb2NhdGlvbjwvaDI+CiAgICAgIDx0Zi13YnItc3RyaW5nCiAgICAgICAgdmFsdWU9IltbZGF0YUxvY2F0aW9uXV0iCiAgICAgICAgZGVsaW1pdGVyLXBhdHRlcm49IltbX2RhdGFMb2NhdGlvbkRlbGltaXRlclBhdHRlcm5dXSIKICAgICAgPgogICAgICA8L3RmLXdici1zdHJpbmcKICAgID48L3BhcGVyLWRpYWxvZz4KICAgIDxkaXYgaWQ9InRvcC10ZXh0Ij4KICAgICAgPGgzIGlkPSJ0b29sdGlwLWhlbHAiIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+UnVuczwvaDM+CiAgICA8L2Rpdj4KICAgIDx0Zi1tdWx0aS1jaGVja2JveAogICAgICBpZD0ibXVsdGlDaGVja2JveCIKICAgICAgbmFtZXM9IltbcnVuc11dIgogICAgICBzZWxlY3Rpb24tc3RhdGU9Int7cnVuU2VsZWN0aW9uU3RhdGV9fSIKICAgICAgb3V0LXNlbGVjdGVkPSJ7e3NlbGVjdGVkUnVuc319IgogICAgICByZWdleD0ie3tyZWdleElucHV0fX0iCiAgICAgIGNvbG9yaW5nPSJbW2NvbG9yaW5nXV0iCiAgICA+PC90Zi1tdWx0aS1jaGVja2JveD4KICAgIDxwYXBlci1idXR0b24gY2xhc3M9IngtYnV0dG9uIiBpZD0idG9nZ2xlLWFsbCIgb24tdGFwPSJfdG9nZ2xlQWxsIj4KICAgICAgVG9nZ2xlIEFsbCBSdW5zCiAgICA8L3BhcGVyLWJ1dHRvbj4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9jYXRpb25dXSI+CiAgICAgIDxkaXYgaWQ9ImRhdGEtbG9jYXRpb24iPgogICAgICAgIDx0Zi13YnItc3RyaW5nCiAgICAgICAgICB2YWx1ZT0iW1tfY2xpcHBlZERhdGFMb2NhdGlvbl1dIgogICAgICAgICAgZGVsaW1pdGVyLXBhdHRlcm49IltbX2RhdGFMb2NhdGlvbkRlbGltaXRlclBhdHRlcm5dXSIKICAgICAgICA+PC90Zi13YnItc3RyaW5nCiAgICAgICAgPjwhLS0KICAgICAgICAgIFdlIHVzZSBIVE1MIGNvbW1lbnRzIHRvIHJlbW92ZSBzcGFjZXMgYmVmb3JlIHRoZSBlbGxpcHNpcy4KICAgICAgICAtLT48dGVtcGxhdGUKICAgICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgICBpZj0iW1tfc2hvdWxkU2hvd0V4cGFuZERhdGFMb2NhdGlvbkJ1dHRvbihkYXRhTG9jYXRpb24sIF9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoKV1dIgogICAgICAgICAgPjwhLS0KICAgICAgICAgIC0tPjxhIGhyZWY9IiIgb24tY2xpY2s9Il9vcGVuRGF0YUxvY2F0aW9uRGlhbG9nIj7igKY8L2E+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgcGFkZGluZy1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgICAgI3RvcC10ZXh0IHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KICAgICAgdGYtd2JyLXN0cmluZyB7CiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICB0Zi1tdWx0aS1jaGVja2JveCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAueC1idXR0b24gewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgIH0KICAgICAgI3Rvb2x0aXAtaGVscCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgIH0KICAgICAgI2RhdGEtbG9jYXRpb24gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbjogNXB4IDAgMCAwOwogICAgICAgIG1heC13aWR0aDogMjg4cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3N0b3JlUnVuU2VsZWN0aW9uU3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG1jLnByb3RvdHlwZSwicnVuU2VsZWN0aW9uU3RhdGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9yZWdleE9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxtYy5wcm90b3R5cGUsInJlZ2V4SW5wdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxtYy5wcm90b3R5cGUsInNlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbWMucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxtYy5wcm90b3R5cGUsImRhdGFMb2NhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxtYy5wcm90b3R5cGUsIl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLG1jLnByb3RvdHlwZSwiX2RhdGFMb2NhdGlvbkRlbGltaXRlclBhdHRlcm4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbWMucHJvdG90eXBlLCJjb2xvcmluZyIsdm9pZCAwKTtFKFtSdCgiZGF0YUxvY2F0aW9uIiwiX2RhdGFMb2NhdGlvbkNsaXBMZW5ndGgiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxtYy5wcm90b3R5cGUsIl9jbGlwcGVkRGF0YUxvY2F0aW9uIixudWxsKTttYz1FKFt5dCgidGYtcnVucy1zZWxlY3RvciIpXSxtYyk7dmFyIGFuPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jYW5jZWxsYXRpb25Db3VudD0wfWNhbmNlbGxhYmxlKHQpe2xldCByPXRoaXMuY2FuY2VsbGF0aW9uQ291bnQ7cmV0dXJuIG49PntsZXQgaT10aGlzLmNhbmNlbGxhdGlvbkNvdW50IT09cjtyZXR1cm4gdCh7dmFsdWU6bixjYW5jZWxsZWQ6aX0pfX1jYW5jZWxBbGwoKXt0aGlzLmNhbmNlbGxhdGlvbkNvdW50Kyt9fTt2YXIgQjU9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaHRtbD0iIn1nZXQgc2FuaXRpemVkSHRtbCgpe3JldHVybiB0aGlzLmh0bWx9YXR0YWNoZWQoKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLm1hcmtkb3duLCEwKX0pfX07QjUudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9Im1hcmtkb3duIiBpbm5lci1oLXQtbS1sPSJbW3Nhbml0aXplZEh0bWxdXSI+PC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgICAqIFJlZHVjZSB0b3Btb3N0IGFuZCBib3R0b21tb3N0IG1hcmdpbnMgZnJvbSAxNnB4IHRvIDAuM2VtIChyZW5kZXJzCiAgICAgICAqIGF0IGFib3V0IDQuOHB4KSB0byBrZWVwIHRoZSBsYXlvdXQgY29tcGFjdC4gVGhpcyBpbXByb3ZlcyB0aGUKICAgICAgICogYXBwZWFyYW5jZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGxpbmUgb2YgdGV4dDsgc3RhbmRhcmQgTWFya2Rvd24KICAgICAgICogcmVuZGVyZXJzIHdpbGwgc3RpbGwgaW5jbHVkZSBhIFxgPHA+XGAgZWxlbWVudC4KICAgICAgICoKICAgICAgICogQnkgdGFyZ2V0aW5nIG9ubHkgdGhlIHRvcC1sZXZlbCwgZXh0cmVtYWwgZWxlbWVudHMsIHdlIHByZXNlcnZlIGFueQogICAgICAgKiBhY3R1YWwgcGFyYWdyYXBoIGJyZWFrcyBhbmQgb25seSBjaGFuZ2UgdGhlIHBhZGRpbmcgYWdhaW5zdCB0aGUKICAgICAgICogY29tcG9uZW50IGVkZ2VzLgogICAgICAgKi8KICAgICAgI21hcmtkb3duID4gcDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMC4zZW07CiAgICAgIH0KICAgICAgI21hcmtkb3duID4gcDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjNlbTsKICAgICAgfQoKICAgICAgLyogUGxlYXNhbnQgc3R5bGVzIGZvciBNYXJrZG93biB0YWJsZXMuICovCiAgICAgICNtYXJrZG93biB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgfQogICAgICAjbWFya2Rvd24gdGFibGUgdGggewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRoLAogICAgICAjbWFya2Rvd24gdGFibGUgdGQgewogICAgICAgIHBhZGRpbmc6IDZweCAxM3B4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXRiLXVpLWJvcmRlciwgI2RmZTJlNSk7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIsICNjNmNiZDEpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQjUucHJvdG90eXBlLCJodG1sIix2b2lkIDApO0UoW1J0KCJodG1sIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sQjUucHJvdG90eXBlLCJzYW5pdGl6ZWRIdG1sIixudWxsKTtCNT1FKFt5dCgidGYtbWFya2Rvd24tdmlldyIpXSxCNSk7X3Moe21vZHVsZU5hbWU6InRmLWNhcmQtaGVhZGluZy1zdHlsZSIsc3R5bGVDb250ZW50OmAKICAgIGZpZ2NhcHRpb24gewogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAvKiogSG9yaXpvbnRhbCBsaW5lIG9mIGxhYmVscy4gKi8KICAgIC5oZWFkaW5nLXJvdyB7CiAgICAgIG1hcmdpbi10b3A6IC00cHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIH0KCiAgICAvKiogUGllY2Ugb2YgdGV4dCBpbiB0aGUgZmlndXJlIGNhcHRpb24uICovCiAgICAuaGVhZGluZy1sYWJlbCB7CiAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIH0KCiAgICAvKiogTWFrZXMgbGFiZWwgc2hvdyBvbiB0aGUgcmlnaHQuICovCiAgICAuaGVhZGluZy1yaWdodCB7CiAgICAgIGZsZXgtZ3JvdzogMDsKICAgIH0KICBgfSk7ZnVuY3Rpb24gczIoZSl7cmV0dXJuIGU/ZS50b1N0cmluZygpLnJlcGxhY2UoL0dNVC1cZCsgXCgoW14pXSspXCkvLCIkMSIpOiIifWZ1bmN0aW9uICQzdChlKXtsZXQgdD1sNWUoZSk7cmV0dXJuIHQ/TWF0aC5yb3VuZCgodFswXSoyOTkrdFsxXSo1ODcrdFsyXSoxMTQpLzFlMyk+MTI1PyJpbmhlcml0IjoiI2VlZSI6ImluaGVyaXQifWZ1bmN0aW9uIGw1ZShlKXtpZighZSlyZXR1cm4gbnVsbDtsZXQgdD1lLm1hdGNoKC9eIyhbMC05YS1mXXsxLDJ9KShbMC05YS1mXXsxLDJ9KShbMC05YS1mXXsxLDJ9KSQvKTtpZighdClyZXR1cm4gbnVsbDtpZihlLmxlbmd0aD09NClmb3IodmFyIHI9MTtyPD0zO3IrKyl0W3JdPXRbcl0rdFtyXTtyZXR1cm5bcGFyc2VJbnQodFsxXSwxNikscGFyc2VJbnQodFsyXSwxNikscGFyc2VJbnQodFszXSwxNildfXZhciBnYz1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRpc3BsYXlOYW1lPW51bGwsdGhpcy50YWc9bnVsbCx0aGlzLnJ1bj1udWxsLHRoaXMuZGVzY3JpcHRpb249bnVsbCx0aGlzLmNvbG9yPW51bGx9X3VwZGF0ZUhlYWRpbmdTdHlsZSgpe3RoaXMudXBkYXRlU3R5bGVzKHsiLS10Zi1jYXJkLWhlYWRpbmctYmFja2dyb3VuZC1jb2xvciI6dGhpcy5fcnVuQmFja2dyb3VuZCwiLS10Zi1jYXJkLWhlYWRpbmctY29sb3IiOnRoaXMuX3J1bkNvbG9yfSl9X2NvbXB1dGVSdW5CYWNrZ3JvdW5kKHQpe3JldHVybiB0fHwibm9uZSJ9X2NvbXB1dGVSdW5Db2xvcih0KXtyZXR1cm4gJDN0KHQpfWdldCBfbmFtZUxhYmVsKCl7dmFyIHQ9dGhpcy5kaXNwbGF5TmFtZSxyPXRoaXMudGFnO3JldHVybiB0fHxyfHwiIn1nZXQgX3RhZ0xhYmVsKCl7dmFyIHQ9dGhpcy5kaXNwbGF5TmFtZSxyPXRoaXMudGFnO3JldHVybiByJiZyIT09dD9yOiIifV90b2dnbGVEZXNjcmlwdGlvbkRpYWxvZyh0KXtsZXQgcj10aGlzLiQuZGVzY3JpcHRpb25EaWFsb2c7ci5wb3NpdGlvblRhcmdldD10LnRhcmdldCxyLnRvZ2dsZSgpfX07Z2MudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgIDxmaWdjYXB0aW9uIGNsYXNzPSJjb250ZW50Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX25hbWVMYWJlbF1dIj4KICAgICAgICAgICAgPGRpdiBpdGVtcHJvcD0ibmFtZSIgY2xhc3M9ImhlYWRpbmctbGFiZWwgbmFtZSI+W1tfbmFtZUxhYmVsXV08L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbcnVuXV0iPgogICAgICAgICAgICA8IS0tIEV4dHJhIHdyYXBwaW5nIHNwYW4gbmVlZGVkIHRvIGF2b2lkIGZsZXhib3ggYmxvY2tpZmljYXRpb24uIC0tPgogICAgICAgICAgICA8IS0tIChzZWUgZmxleGJveCBzcGVjLCBzZWN0aW9uIDQgIkZsZXggSXRlbXMiKSAtLT4KICAgICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgICAgPHNwYW4KICAgICAgICAgICAgICAgIGl0ZW1wcm9wPSJydW4iCiAgICAgICAgICAgICAgICBpZD0iaGVhZGluZy1ydW4iCiAgICAgICAgICAgICAgICBjbGFzcz0iaGVhZGluZy1sYWJlbCBoZWFkaW5nLXJpZ2h0IHJ1biIKICAgICAgICAgICAgICAgID5bW3J1bl1dPC9zcGFuCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfdGFnTGFiZWxdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICAgIHRhZzogPHNwYW4gaXRlbXByb3A9InRhZyI+W1tfdGFnTGFiZWxdXTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9maWdjYXB0aW9uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGVzY3JpcHRpb25dXSI+CiAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICBpY29uPSJpbmZvIgogICAgICAgICAgb24tdGFwPSJfdG9nZ2xlRGVzY3JpcHRpb25EaWFsb2ciCiAgICAgICAgICB0aXRsZT0iU2hvdyBzdW1tYXJ5IGRlc2NyaXB0aW9uIgogICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8cGFwZXItZGlhbG9nCiAgICAgICAgaWQ9ImRlc2NyaXB0aW9uRGlhbG9nIgogICAgICAgIG5vLW92ZXJsYXA9IiIKICAgICAgICBob3Jpem9udGFsLWFsaWduPSJhdXRvIgogICAgICAgIHZlcnRpY2FsLWFsaWduPSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhcGVyLWRpYWxvZy1zY3JvbGxhYmxlPgogICAgICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tkZXNjcmlwdGlvbl1dIj48L3RmLW1hcmtkb3duLXZpZXc+CiAgICAgICAgPC9wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICA8L2Rpdj4KICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICAuY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CiAgICAgIC5jb250ZW50IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICAgIC5uYW1lIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgICAgLnJ1biB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBwYWRkaW5nOiAxcHggNHB4IDJweDsKICAgICAgfQogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIHBhcGVyLWRpYWxvZy1zY3JvbGxhYmxlIHsKICAgICAgICBtYXgtd2lkdGg6IDY0MHB4OwogICAgICB9CiAgICAgICNoZWFkaW5nLXJ1biB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGYtY2FyZC1oZWFkaW5nLWJhY2tncm91bmQtY29sb3IpOwogICAgICAgIGNvbG9yOiB2YXIoLS10Zi1jYXJkLWhlYWRpbmctY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJkaXNwbGF5TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnYy5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnYy5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnYy5wcm90b3R5cGUsImRlc2NyaXB0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGdjLnByb3RvdHlwZSwiY29sb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUnVuQmFja2dyb3VuZChjb2xvcikiLHJlYWRPbmx5OiEwLG9ic2VydmVyOiJfdXBkYXRlSGVhZGluZ1N0eWxlIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxnYy5wcm90b3R5cGUsIl9ydW5CYWNrZ3JvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkNvbG9yKGNvbG9yKSIscmVhZE9ubHk6ITAsb2JzZXJ2ZXI6Il91cGRhdGVIZWFkaW5nU3R5bGUifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGdjLnByb3RvdHlwZSwiX3J1bkNvbG9yIix2b2lkIDApO0UoW1J0KCJkaXNwbGF5TmFtZSIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGdjLnByb3RvdHlwZSwiX25hbWVMYWJlbCIsbnVsbCk7RShbUnQoImRpc3BsYXlOYW1lIiwidGFnIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZ2MucHJvdG90eXBlLCJfdGFnTGFiZWwiLG51bGwpO2djPUUoW3l0KCJ0Zi1jYXJkLWhlYWRpbmciKV0sZ2MpO3ZhciBGaT1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fbWV0YWRhdGFDYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3N0ZXBzPVtdLHRoaXMuX2F0dGFjaGVkPSExfWdldCBfcnVuQ29sb3IoKXt2YXIgdD10aGlzLnJ1bjtyZXR1cm4gZm4odCl9Z2V0IF9oYXNBdExlYXN0T25lU3RlcCgpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiEhdCYmdC5sZW5ndGg+MH1nZXQgX2hhc011bHRpcGxlU3RlcHMoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjF9Z2V0IF9tYXhTdGVwSW5kZXgoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4gdC5sZW5ndGgtMX1nZXQgX2N1cnJlbnREYXR1bSgpe3ZhciB0PXRoaXMuX3N0ZXBzLHI9dGhpcy5fc3RlcEluZGV4O3JldHVybiB0W3JdfWdldCBfc2FtcGxlVGV4dCgpe3ZhciB0PXRoaXMuc2FtcGxlO3JldHVybmAke3QrMX1gfWdldCBfaGFzTXVsdGlwbGVTYW1wbGVzKCl7dmFyIHQ9dGhpcy50b3RhbFNhbXBsZXM7cmV0dXJuIHQ+MX1hdHRhY2hlZCgpe3RoaXMuX2F0dGFjaGVkPSEwLHRoaXMucmVsb2FkKCl9X3JlbG9hZE9uUnVuVGFnQ2hhbmdlKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5fYXR0YWNoZWQpcmV0dXJuO3RoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbEFsbCgpO2xldCByPXZlKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL2F1ZGlvIixuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVuLHNhbXBsZTpTdHJpbmcodGhpcy5zYW1wbGUpfSkpLG49dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgYT1pLnZhbHVlLm1hcCh0aGlzLl9jcmVhdGVTdGVwRGF0dW0uYmluZCh0aGlzKSk7dGhpcy5zZXQoIl9zdGVwcyIsYSksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLGEubGVuZ3RoLTEpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2NyZWF0ZVN0ZXBEYXR1bSh0KXtsZXQgcj1uZXcgVVJMU2VhcmNoUGFyYW1zKHQucXVlcnkpO3IuYXBwZW5kKCJ0cyIsU3RyaW5nKHQud2FsbF90aW1lKSk7bGV0IG49dmUoKS5wbHVnaW5Sb3V0ZSgiYXVkaW8iLCIvaW5kaXZpZHVhbEF1ZGlvIixyKTtyZXR1cm57d2FsbF90aW1lOnMyKG5ldyBEYXRlKHQud2FsbF90aW1lKjFlMykpLHN0ZXA6dC5zdGVwLGxhYmVsOnQubGFiZWwsY29udGVudFR5cGU6dC5jb250ZW50VHlwZSx1cmw6bn19fTtGaS50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc2FtcGxlOiBbW19zYW1wbGVUZXh0XV0gb2YgW1t0b3RhbFNhbXBsZXNdXQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXBdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHN0ZXAgPHN0cm9uZz5bW19jdXJyZW50RGF0dW0uc3RlcF1dPC9zdHJvbmc+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfY3VycmVudERhdHVtLndhbGxfdGltZV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCBoZWFkaW5nLXJpZ2h0Ij4KICAgICAgICAgICAgICBbW19jdXJyZW50RGF0dW0ud2FsbF90aW1lXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIG1heC1tYXJrZXJzPSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgc25hcHM9IiIKICAgICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgICAgdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwXV0iPgogICAgICA8YXVkaW8KICAgICAgICBjb250cm9scz0iIgogICAgICAgIHNyYyQ9IltbX2N1cnJlbnREYXR1bS51cmxdXSIKICAgICAgICB0eXBlJD0iW1tfY3VycmVudERhdHVtLmNvbnRlbnRUeXBlXV0iCiAgICAgID48L2F1ZGlvPgogICAgICA8dGYtbWFya2Rvd24tdmlldyBodG1sPSJbW19jdXJyZW50RGF0dW0ubGFiZWxdXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgPC90ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9Im1haW4tYXVkaW8tY29udGFpbmVyIj48L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzNTBweDsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcjogIzQyNDI0MjsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgfQoKICAgICAgI3N0ZXBzIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIHBhZGRpbmc6IDAgNXB4OyAvKiBzbyB0aGUgc2xpZGVyIGtub2IgZG9lc24ndCBidXR0IG91dCAqLwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxGaS5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxGaS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxGaS5wcm90b3R5cGUsInNhbXBsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxGaS5wcm90b3R5cGUsInRvdGFsU2FtcGxlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxGaS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sRmkucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLEZpLnByb3RvdHlwZSwiX21ldGFkYXRhQ2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxGaS5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxGaS5wcm90b3R5cGUsIl9zdGVwSW5kZXgiLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX2hhc0F0TGVhc3RPbmVTdGVwIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU3RlcHMiLG51bGwpO0UoW1J0KCJfc3RlcHMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9tYXhTdGVwSW5kZXgiLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfY3VycmVudERhdHVtIixudWxsKTtFKFtSdCgic2FtcGxlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfc2FtcGxlVGV4dCIsbnVsbCk7RShbUnQoInRvdGFsU2FtcGxlcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVNhbXBsZXMiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEZpLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKTtGaT1FKFt5dCgidGYtYXVkaW8tbG9hZGVyIildLEZpKTt2YXIgJGg9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90YWdGaWx0ZXI9IiIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEF1ZGlvKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9dmUoKS5wbHVnaW5Sb3V0ZSgiYXVkaW8iLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e2lmKGZ5LmlzRXF1YWwocix0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtsZXQgbj1meS5tYXBWYWx1ZXMocixvPT5PYmplY3Qua2V5cyhvKSksaT0kaShuKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsaS5sZW5ndGg9PT0wKSx0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIscil9KX1fcmVsb2FkQXVkaW8oKXt2YXIgdDsodD10aGlzLnJvb3QpPT1udWxsfHx0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWF1ZGlvLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm8scj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7bGV0IGk9ZnkubWFwVmFsdWVzKHQsbD0+T2JqZWN0LmtleXMobCkpLG89UWwoaSxyLG4pO2Z1bmN0aW9uIGEobCl7bGV0IGM9dFtsLnJ1bl1bbC50YWddLnNhbXBsZXM7cmV0dXJuIGZ5LnJhbmdlKGMpLm1hcCh1PT5PYmplY3QuYXNzaWduKHt9LGwse3NhbXBsZTp1LHRvdGFsU2FtcGxlczpjfSkpfXJldHVybiBvLm1hcChsPT5PYmplY3QuYXNzaWduKHt9LGwse2l0ZW1zOltdLmNvbmNhdC5hcHBseShbXSxsLml0ZW1zLm1hcChhKSl9KSl9X3RhZ01ldGFkYXRhKHQscixuKXtyZXR1cm4gdFtyXVtuXX19OyRoLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IKICAgICAgICAgICAgaWQ9InJ1bnMtc2VsZWN0b3IiCiAgICAgICAgICAgIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319IgogICAgICAgICAgPjwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBhdWRpbyBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgYXVkaW8gZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLWF1ZGlvLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgc2FtcGxlPSJbW2l0ZW0uc2FtcGxlXV0iCiAgICAgICAgICAgICAgICAgIHRvdGFsLXNhbXBsZXM9IltbaXRlbS50b3RhbFNhbXBsZXNdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgID48L3RmLWF1ZGlvLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSwkaC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLCRoLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkaC5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSwkaC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sJGgucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sJGgucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sJGgucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7JGg9RShbeXQoInRmLWF1ZGlvLWRhc2hib2FyZCIpXSwkaCk7dmFyIEg1PWNsYXNzIGV4dGVuZHMgR3QobXQpe2F0dGFjaGVkKCl7dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMubGlzdGVuKHQsInRhcCIsIl9zZWxlY3RUYXJnZXQiKX0uYmluZCh0aGlzKSl9KX1fc2VsZWN0VGFyZ2V0KHQpe3RoaXMuc2VsZWN0ZWRJZD10LmN1cnJlbnRUYXJnZXQuaWR9X3NlbGVjdGVkSWRDaGFuZ2VkKCl7dmFyIHQ9dGhpcy5xdWVyeUVmZmVjdGl2ZUNoaWxkcmVuKCIjIit0aGlzLnNlbGVjdGVkSWQpOyF0fHwodGhpcy5nZXRFZmZlY3RpdmVDaGlsZHJlbigpLmZvckVhY2goZnVuY3Rpb24ocil7ci5jbGFzc0xpc3QucmVtb3ZlKCJzZWxlY3RlZCIpfSksdC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpKX19O0g1LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJ3cmFwIj4KICAgICAgPGgzPltbbmFtZV1dPC9oMz4KICAgICAgPGRpdiBjbGFzcz0iY29udGVudC13cmFwcGVyIj48c2xvdD48L3Nsb3Q+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgLmNvbnRlbnQtd3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtd3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtd3JhcHBlciA6OnNsb3R0ZWQoLnNlbGVjdGVkKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBoMyB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBtYXJnaW46IDAgMCA1cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxINS5wcm90b3R5cGUsIm5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLG9ic2VydmVyOiJfc2VsZWN0ZWRJZENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEg1LnByb3RvdHlwZSwic2VsZWN0ZWRJZCIsdm9pZCAwKTtINT1FKFt5dCgidGYtb3B0aW9uLXNlbGVjdG9yIildLEg1KTtmdW5jdGlvbiBpUihlLHQpe2xldCByLG49e307T2JqZWN0LmtleXMoZSkuZm9yRWFjaChhPT57bGV0IHM9ZVthXTtyPT09dm9pZCAwJiYocj1zLmRpc3BsYXlOYW1lKSxyIT09cy5kaXNwbGF5TmFtZSYmKHI9bnVsbCksbltzLmRlc2NyaXB0aW9uXT09PXZvaWQgMCYmKG5bcy5kZXNjcmlwdGlvbl09W10pLG5bcy5kZXNjcmlwdGlvbl0ucHVzaChhKX0pO2xldCBpPXIhPW51bGw/cjp0LG89KCgpPT57bGV0IGE9T2JqZWN0LmtleXMobik7cmV0dXJuIGEubGVuZ3RoPT09MD8iIjphLmxlbmd0aD09PTE/YVswXTpgPHA+PHN0cm9uZz5NdWx0aXBsZSBkZXNjcmlwdGlvbnM6PC9zdHJvbmc+PC9wPjx1bD4ke2EubWFwKGM9PntsZXQgdT1uW2NdLm1hcChwPT5gPGNvZGU+JHtwLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyYvZywiJmFtcDsiKX08L2NvZGU+YCksaD11Lmxlbmd0aD4yP3Uuc2xpY2UoMCx1Lmxlbmd0aC0xKS5qb2luKCIsICIpKyIsIGFuZCAiK3VbdS5sZW5ndGgtMV06dS5qb2luKCIgYW5kICIpO3JldHVybmA8bGk+PHA+Rm9yICR7YzVlKHUubGVuZ3RoLCJydW4iLCJydW5zIil9ICR7aH06PC9wPiR7Y308L2xpPmB9KS5qb2luKCIiKX08L3VsPmB9KSgpO3JldHVybntkaXNwbGF5TmFtZTppLGRlc2NyaXB0aW9uOm99fWZ1bmN0aW9uIGM1ZShlLHQscil7cmV0dXJuIGU9PT0xP3Q6cn12YXIgWjN0PUVlKE9lKCksMSk7dmFyIEhwPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMud2VpZ2h0PS42LHRoaXMuX3VwZGF0ZVdlaWdodD1aM3QuZGVib3VuY2UoZnVuY3Rpb24odCl7dGhpcy53ZWlnaHQ9dH0sMjUwKX1faW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXJDaGFuZ2VkKCl7dGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PXRoaXMuX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyLnRvU3RyaW5nKCksdGhpcy5fdXBkYXRlV2VpZ2h0LmNhbGwodGhpcyx0aGlzLl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlcil9X2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dENoYW5nZWQoKXsrdGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PDA/dGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PSIwIjordGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PjEmJih0aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ9IjEiKTt2YXIgdD0rdGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0O2lzTmFOKHQpfHx0aGlzLl91cGRhdGVXZWlnaHQuY2FsbCh0aGlzLHQpfX07SHAudGVtcGxhdGU9UWAKICAgIDxoMyBjbGFzcz0idGl0bGUiPlNtb290aGluZzwvaDM+CiAgICA8ZGl2IGNsYXNzPSJzbW9vdGhpbmctYmxvY2siPgogICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgaWQ9InNsaWRlciIKICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyfX0iCiAgICAgICAgbWF4PSJbW21heF1dIgogICAgICAgIG1pbj0iW1ttaW5dXSIKICAgICAgICBwaW4KICAgICAgICBzdGVwPSJbW3N0ZXBdXSIKICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgdmFsdWU9Int7d2VpZ2h0fX0iCiAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgaWQ9ImlucHV0IgogICAgICAgIGxhYmVsPSJ3ZWlnaHQiCiAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICB2YWx1ZT0ie3tfaW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0fX0iCiAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgIHN0ZXA9Iltbc3RlcF1dIgogICAgICAgIG1pbj0iW1ttaW5dXSIKICAgICAgICBtYXg9IltbbWF4XV0iCiAgICAgID48L3BhcGVyLWlucHV0PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC50aXRsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAuc21vb3RoaW5nLWJsb2NrIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICBmbGV4LWdyb3c6IDI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIcC5wcm90b3R5cGUsInN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSHAucHJvdG90eXBlLCJtYXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSHAucHJvdG90eXBlLCJtaW4iLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwid2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMCxvYnNlcnZlcjoiX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSHAucHJvdG90eXBlLCJfaW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLG9ic2VydmVyOiJfaW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSHAucHJvdG90eXBlLCJfaW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0Iix2b2lkIDApO0hwPUUoW3l0KCJ0Zi1zbW9vdGhpbmctaW5wdXQiKV0sSHApO3ZhciBZbz1FZShPZSgpLDEpO2Z1bmN0aW9uIENuKGUsdCl7bGV0IHI9T2JqZWN0LmtleXModCkuc29ydCgpLmZpbHRlcihhPT50W2FdIT09dm9pZCAwKTtpZighci5sZW5ndGgpcmV0dXJuIGU7bGV0IG49ZS5pbmRleE9mKCI/IikhPT0tMT8iJiI6Ij8iLG89QXJyYXkoKS5jb25jYXQoLi4uci5tYXAoYT0+e2xldCBzPXRbYV07cmV0dXJuKEFycmF5LmlzQXJyYXkocyk/czpbc10pLm1hcChjPT5gJHthfT0ke3U1ZShjKX1gKX0pKS5qb2luKCImIik7cmV0dXJuIGUrbitvfWZ1bmN0aW9uIHU1ZShlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoL1woL2csIiUyOCIpLnJlcGxhY2UoL1wpL2csIiUyOSIpfXZhciBHS3Q9RWUoT2UoKSwxKSxIV249RWUod2woKSwxKTt2YXIgSUt0PUVlKE9lKCksMSk7dmFyIHY0OyhmdW5jdGlvbihlKXtlW2UuTE9BRElORz0wXT0iTE9BRElORyIsZVtlLkxPQURFRD0xXT0iTE9BREVEIn0pKHY0fHwodjQ9e30pKTtmdW5jdGlvbiBrUyhlKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmxvYWRLZXk9IiIsdGhpcy5kYXRhVG9Mb2FkPVtdLHRoaXMuZ2V0RGF0YUxvYWROYW1lPXI9PlN0cmluZyhyKSx0aGlzLmRhdGFMb2FkaW5nPSExLHRoaXMuZGF0YUxvYWRlZEF0TGVhc3RPbmNlPSExLHRoaXMuX2lzQ29ubmVjdGVkPSExLHRoaXMuX2RhdGFMb2FkU3RhdGU9bmV3IE1hcCx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCx0aGlzLl9sb2FkRGF0YT1JS3QudGhyb3R0bGUodGhpcy5fbG9hZERhdGFJbXBsLDEwMCx7bGVhZGluZzohMCx0cmFpbGluZzohMH0pfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9pc0Nvbm5lY3RlZD0hMH1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5faXNDb25uZWN0ZWQ9ITF9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2FjdGl2ZTp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9hZERhdGFJZkFjdGl2ZSJ9LF9pc0Nvbm5lY3RlZDp7dHlwZTpCb29sZWFufSxsb2FkS2V5Ont0eXBlOlN0cmluZ30sZGF0YVRvTG9hZDp7dHlwZTpBcnJheX0sZ2V0RGF0YUxvYWROYW1lOnt0eXBlOk9iamVjdH0sbG9hZERhdGFDYWxsYmFjazp7dHlwZTpPYmplY3R9LHJlcXVlc3REYXRhOnt0eXBlOk9iamVjdH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZGF0YVRvTG9hZENoYW5nZWQoX2lzQ29ubmVjdGVkLCBkYXRhVG9Mb2FkLiopIl19b25Mb2FkRmluaXNoKCl7fXJlbG9hZCgpe3RoaXMuX2RhdGFMb2FkU3RhdGUuY2xlYXIoKSx0aGlzLl9sb2FkRGF0YSgpfXJlc2V0KCl7dGhpcy5fbG9hZERhdGFBc3luYyE9bnVsbCYmKGNsZWFyVGltZW91dCh0aGlzLl9sb2FkRGF0YUFzeW5jKSx0aGlzLl9sb2FkRGF0YUFzeW5jPW51bGwpLHRoaXMuX2NhbmNlbGxlciYmdGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpLHRoaXMuX2RhdGFMb2FkU3RhdGUmJnRoaXMuX2RhdGFMb2FkU3RhdGUuY2xlYXIoKSx0aGlzLl9pc0Nvbm5lY3RlZCYmdGhpcy5fbG9hZERhdGEoKX1fZGF0YVRvTG9hZENoYW5nZWQoKXt0aGlzLl9pc0Nvbm5lY3RlZCYmdGhpcy5fbG9hZERhdGEoKX1kZXRhY2hlZCgpe3RoaXMuX2xvYWREYXRhQXN5bmMhPW51bGwmJihjbGVhclRpbWVvdXQodGhpcy5fbG9hZERhdGFBc3luYyksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsKX1fbG9hZERhdGFJZkFjdGl2ZSgpe3RoaXMuYWN0aXZlJiZ0aGlzLl9sb2FkRGF0YSgpfV9sb2FkRGF0YUltcGwoKXshdGhpcy5hY3RpdmV8fCh0aGlzLl9sb2FkRGF0YUFzeW5jIT09bnVsbCYmY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9c2V0VGltZW91dCh0aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUocj0+e2lmKHIuY2FuY2VsbGVkKXJldHVybjt0aGlzLmRhdGFMb2FkaW5nPSEwO2xldCBuPXRoaXMuZGF0YVRvTG9hZC5maWx0ZXIoYT0+e2xldCBzPXRoaXMuZ2V0RGF0YUxvYWROYW1lKGEpO3JldHVybiF0aGlzLl9kYXRhTG9hZFN0YXRlLmhhcyhzKX0pO2ZvcihsZXQgYSBvZiBuKXtsZXQgcz10aGlzLmdldERhdGFMb2FkTmFtZShhKTt0aGlzLl9kYXRhTG9hZFN0YXRlLnNldChzLHY0LkxPQURJTkcpfWxldCBpPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZShhPT57aWYoYS5jYW5jZWxsZWQpcmV0dXJuO2xldHtpdGVtOnMsZGF0YTpsfT1hLnZhbHVlLGM9dGhpcy5nZXREYXRhTG9hZE5hbWUocyk7dGhpcy5fZGF0YUxvYWRTdGF0ZS5zZXQoYyx2NC5MT0FERUQpLHRoaXMubG9hZERhdGFDYWxsYmFjayh0aGlzLHMsbCl9KSxvPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZShhPT57aWYoIWEuY2FuY2VsbGVkKXtsZXQgbD1hLnZhbHVlLGM9bmV3IFNldChuLm1hcChoPT50aGlzLmdldERhdGFMb2FkTmFtZShoKSkpO3RoaXMuZGF0YVRvTG9hZC5zb21lKGg9PmMuaGFzKHRoaXMuZ2V0RGF0YUxvYWROYW1lKGgpKSkmJnRoaXMub25Mb2FkRmluaXNoKCksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsLHRoaXMuZGF0YUxvYWRlZEF0TGVhc3RPbmNlPSEwfUFycmF5LmZyb20odGhpcy5fZGF0YUxvYWRTdGF0ZS52YWx1ZXMoKSkuaW5jbHVkZXModjQuTE9BRElORyl8fCh0aGlzLmRhdGFMb2FkaW5nPSExKX0pO3RoaXMucmVxdWVzdERhdGEobixpLCgpPT5vKHZvaWQgMCkpfSkpKX19fXZhciBncWU9RWUoT2UoKSwxKSxXbz1FZSh3bCgpLDEpLFJTPVt7Y2hhcmFjdGVyOiJcdTI1RkMiLG1ldGhvZDpXby5TeW1ib2xGYWN0b3JpZXMuc3F1YXJlfSx7Y2hhcmFjdGVyOiJcdTI1QzYiLG1ldGhvZDpXby5TeW1ib2xGYWN0b3JpZXMuZGlhbW9uZH0se2NoYXJhY3RlcjoiXHUyNUIyIixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnRyaWFuZ2xlfSx7Y2hhcmFjdGVyOiJcdTI2MDUiLG1ldGhvZDpXby5TeW1ib2xGYWN0b3JpZXMuc3Rhcn0se2NoYXJhY3RlcjoiXHUyNzFBIixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLmNyb3NzfV0sRWQ7KGZ1bmN0aW9uKGUpe2UuU1RFUD0ic3RlcCIsZS5SRUxBVElWRT0icmVsYXRpdmUiLGUuV0FMTF9USU1FPSJ3YWxsX3RpbWUifSkoRWR8fChFZD17fSkpO3ZhciBlMD00LF9xZT00LGRCPTMsbUI9MjAsZ0I9NCxMS3Q9NjtmdW5jdGlvbiBXdShlKXtyZXR1cm4gdD0+e2xldCByPU1hdGguYWJzKHQpO3I8MWUtMTUmJihyPTApO2xldCBuO3JldHVybiByPj0xZTQ/bj14bigiLiIrZSsifmUiKTpyPjAmJnI8LjAxP249eG4oIi4iK2UrIn5lIik6bj14bigiLiIrZSsifmciKSxuKHQpfX12YXIgeDQ9eG4oYC4ke19xZX1+c2ApO2Z1bmN0aW9uICRhdCgpe2xldCBlPW5ldyBXby5TY2FsZXMuTGluZWFyO2UudGlja0dlbmVyYXRvcihXby5TY2FsZXMuVGlja0dlbmVyYXRvcnMuaW50ZWdlclRpY2tHZW5lcmF0b3IoKSk7bGV0IHQ9bmV3IFdvLkF4ZXMuTnVtZXJpYyhlLCJib3R0b20iKTtyZXR1cm4gdC5mb3JtYXR0ZXIoeDQpLHtzY2FsZTplLGF4aXM6dCxhY2Nlc3NvcjpyPT5yLnN0ZXB9fXZhciBfQj1Xby5Gb3JtYXR0ZXJzLnRpbWUoIiVhICViICVlLCAlSDolTTolUyIpO2Z1bmN0aW9uIHlxZSgpe2xldCBlPW5ldyBXby5TY2FsZXMuVGltZTtyZXR1cm57c2NhbGU6ZSxheGlzOm5ldyBXby5BeGVzLlRpbWUoZSwiYm90dG9tIiksYWNjZXNzb3I6dD0+dC53YWxsX3RpbWV9fXZhciByMD0oZSx0LHIpPT57aWYoZS5yZWxhdGl2ZSE9bnVsbClyZXR1cm4gZS5yZWxhdGl2ZTtsZXQgbj1yLmRhdGEoKSxpPW4ubGVuZ3RoPjA/K25bMF0ud2FsbF90aW1lOjA7cmV0dXJuKCtlLndhbGxfdGltZS1pKS8oNjAqNjAqMWUzKX0seUI9ZT0+e2xldCB0PSIiLHI9TWF0aC5mbG9vcihlLzI0KTtlLT1yKjI0LHImJih0Kz1yKyJkICIpO2xldCBuPU1hdGguZmxvb3IoZSk7ZS09bixlKj02MCwobnx8cikmJih0Kz1uKyJoICIpO2xldCBpPU1hdGguZmxvb3IoZSk7ZS09aSxlKj02MCwoaXx8bnx8cikmJih0Kz1pKyJtICIpO2xldCBvPU1hdGguZmxvb3IoZSk7cmV0dXJuIHQrbysicyJ9O2Z1bmN0aW9uIHZxZSgpe2xldCBlPW5ldyBXby5TY2FsZXMuTGluZWFyO3JldHVybntzY2FsZTplLGF4aXM6bmV3IFdvLkF4ZXMuTnVtZXJpYyhlLCJib3R0b20iKSxhY2Nlc3NvcjpyMH19ZnVuY3Rpb24gdkIoZSl7c3dpdGNoKGUpe2Nhc2UgRWQuU1RFUDpyZXR1cm4gJGF0KCk7Y2FzZSBFZC5XQUxMX1RJTUU6cmV0dXJuIHlxZSgpO2Nhc2UgRWQuUkVMQVRJVkU6cmV0dXJuIHZxZSgpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHhUeXBlOiAiK2UpfX12YXIgenM9RWUoT2UoKSwxKSxNbj1FZSh3bCgpLDEpO3ZhciB2YT1FZSh3bCgpLDEpO2Z1bmN0aW9uIHhxZShlKXtsZXQgdD1bXSxyPWU7Zm9yKDtyJiZyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KWlmKHQucHVzaChyKSxyLmFzc2lnbmVkU2xvdClyPXIuYXNzaWduZWRTbG90O2Vsc2UgaWYoci5wYXJlbnRFbGVtZW50KXI9ci5wYXJlbnRFbGVtZW50O2Vsc2V7bGV0IG49ci5wYXJlbnROb2RlO24gaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P3I9bi5ob3N0OnI9biE9PXI/bjpudWxsfXJldHVybiB0fXZhciBicWU9WzEsMCwwLDEsMCwwXTtmdW5jdGlvbiB3cWUoZSl7bGV0IHQ9eHFlKGUpLHI9YnFlLG49bnVsbDtmb3IobGV0IGkgb2YgdCl7bGV0IG89dmEuVXRpbHMuRE9NLmdldEVsZW1lbnRUcmFuc2Zvcm0oaSk7aWYobyE9bnVsbCl7bGV0IGw9aS5jbGllbnRXaWR0aC8yLGM9aS5jbGllbnRIZWlnaHQvMjtyPXZhLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocixbbCxjXSkscj12YS5VdGlscy5NYXRoLm11bHRpcGx5TWF0cml4KHIsdmEuVXRpbHMuTWF0aC5pbnZlcnRNYXRyaXgobykpLHI9dmEuVXRpbHMuTWF0aC5tdWx0aXBseVRyYW5zbGF0ZShyLFstbCwtY10pfWxldCBhPWkuc2Nyb2xsTGVmdCxzPWkuc2Nyb2xsVG9wOyhuPT09bnVsbHx8aT09PW4pJiYoYS09aS5vZmZzZXRMZWZ0K2kuY2xpZW50TGVmdCxzLT1pLm9mZnNldFRvcCtpLmNsaWVudFRvcCxuPWkub2Zmc2V0UGFyZW50KSxyPXZhLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocixbYSxzXSl9cmV0dXJuIHJ9dmFyIGJCPWNsYXNzIGV4dGVuZHMgdmEuVXRpbHMuVHJhbnNsYXRvcntjb21wdXRlUG9zaXRpb24odCxyKXtsZXQgbj17eDp0LHk6cn0saT13cWUodGhpcy5fcm9vdEVsZW1lbnQpO3JldHVybiBpPT1udWxsP246dmEuVXRpbHMuTWF0aC5hcHBseVRyYW5zZm9ybShpLG4pfX0sVTE9Y2xhc3MgZXh0ZW5kcyB2YS5EaXNwYXRjaGVycy5Nb3VzZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLl9ldmVudFRhcmdldD10LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSx0aGlzLl90cmFuc2xhdG9yPW5ldyBiQih0LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSl9c3RhdGljIGdldERpc3BhdGNoZXIodCl7bGV0IHI9dC5yb290KCkucm9vdEVsZW1lbnQoKSxuPXJbVTEuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gbnx8KG49bmV3IFUxKHQpLHJbVTEuX0RJU1BBVENIRVJfS0VZXT1uKSxufX0scTE9Y2xhc3MgZXh0ZW5kcyB2YS5EaXNwYXRjaGVycy5Ub3VjaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLl9ldmVudFRhcmdldD10LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSx0aGlzLl90cmFuc2xhdG9yPW5ldyBiQih0LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSl9c3RhdGljIGdldERpc3BhdGNoZXIodCl7bGV0IHI9dC5yb290KCkucm9vdEVsZW1lbnQoKSxuPXJbcTEuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gbnx8KG49bmV3IHExKHQpLHJbcTEuX0RJU1BBVENIRVJfS0VZXT1uKSxufX07dmEuSW50ZXJhY3Rpb24ucHJvdG90eXBlLl9pc0luc2lkZUNvbXBvbmVudD1mdW5jdGlvbihlKXtyZXR1cm4gMDw9ZS54JiYwPD1lLnkmJmUueDx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLndpZHRoKCkmJmUueTx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpfTt2YXIgd0I9Y2xhc3MgZXh0ZW5kcyB2YS5JbnRlcmFjdGlvbnMuUG9pbnRlcntfYW5jaG9yKHQpe2xldCByPXRoaXM7ci5faXNBbmNob3JlZD0hMCxyLl9tb3VzZURpc3BhdGNoZXI9VTEuZ2V0RGlzcGF0Y2hlcihyLl9jb21wb25lbnRBdHRhY2hlZFRvKSxyLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUoci5fbW91c2VNb3ZlQ2FsbGJhY2spLHIuX3RvdWNoRGlzcGF0Y2hlcj1xMS5nZXREaXNwYXRjaGVyKHIuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHIuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQoci5fdG91Y2hTdGFydENhbGxiYWNrKX19O3ZhciBrS3Q9RWUoT2UoKSwxKTt2YXIgRzE7KGZ1bmN0aW9uKGUpe2UuQVVUTz0iYXV0byIsZS5CT1RUT009ImJvdHRvbSIsZS5SSUdIVD0icmlnaHQifSkoRzF8fChHMT17fSkpO3ZhciBTcWU9e2JveFNoYWRvdzoiMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgLjMpIixvcGFjaXR5OjAscG9zaXRpb246ImZpeGVkIix3aWxsQ2hhbmdlOiJ0cmFuc2Zvcm0iLHpJbmRleDo1fSxiND1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5wb3NpdGlvbj1HMS5BVVRPLHRoaXMubWluRGlzdEZyb21FZGdlPTE1LHRoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl9yYWY9bnVsbCx0aGlzLl90dW5uZWw9bnVsbH1yZWFkeSgpe3RoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl9yYWY9bnVsbCx0aGlzLl90dW5uZWw9bnVsbH1hdHRhY2hlZCgpe3RoaXMuX3R1bm5lbD10aGlzLl9jcmVhdGVUdW5uZWwoKSx0aGlzLl9oaWRlT25CbHVyPSgpPT57ZG9jdW1lbnQuaGlkZGVuJiZ0aGlzLmhpZGUoKX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuX2hpZGVPbkJsdXIpfWRldGFjaGVkKCl7dGhpcy5oaWRlKCksdGhpcy5fcmVtb3ZlVHVubmVsKHRoaXMuX3R1bm5lbCksdGhpcy5fdHVubmVsPW51bGwsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuX2hpZGVPbkJsdXIpfWNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fdHVubmVsLnNoYWRvd1Jvb3R9aGlkZSgpe3RoaXMuX3JhZiE9PW51bGwmJndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpLHRoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl90dW5uZWwuc3R5bGUub3BhY2l0eT0wfXVwZGF0ZUFuZFBvc2l0aW9uKHQpe3RoaXMuX3JhZiE9PW51bGwmJndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpLHRoaXMuX3JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57IXRoaXMuaXNBdHRhY2hlZHx8dGhpcy5fcmVwb3NpdGlvbkltcGwodCl9KX1fcmVwb3NpdGlvbkltcGwodCl7bGV0IHI9dGhpcy5fdHVubmVsLG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz13aW5kb3cuaW5uZXJIZWlnaHQsYT1kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoLHM9bi50b3AsbD1zK24uaGVpZ2h0LGM9aS5oZWlnaHQrbUIsdT1udWxsLGg9TWF0aC5tYXgodGhpcy5taW5EaXN0RnJvbUVkZ2Usbi5sZWZ0KSxmPW51bGwscD1zO3RoaXMucG9zaXRpb249PUcxLlJJR0hUP2g9bi5yaWdodDoocD1sK21CLGE8aCtpLndpZHRoK3RoaXMubWluRGlzdEZyb21FZGdlJiYoaD1udWxsLGY9dGhpcy5taW5EaXN0RnJvbUVkZ2UpKSx0aGlzLnBvc2l0aW9uPT1HMS5BVVRPJiZuLnRvcC1jPjAmJm88bi50b3Arbi5oZWlnaHQrYyYmKHA9bnVsbCx1PW8tcyttQik7bGV0IGQ9e2NvbnRhaW46ImNvbnRlbnQiLG9wYWNpdHk6MSxsZWZ0Omg/YCR7aH1weGA6bnVsbCxyaWdodDpmP2Ake2Z9cHhgOm51bGwsdG9wOnA/YCR7cH1weGA6bnVsbCxib3R0b206dT9gJHt1fXB4YDpudWxsfTtrS3QuaXNFcXVhbCh0aGlzLl9zdHlsZUNhY2hlLGQpfHwoT2JqZWN0LmFzc2lnbihyLnN0eWxlLGQpLHRoaXMuX3N0eWxlQ2FjaGU9ZCl9X2NyZWF0ZVR1bm5lbCgpe2lmKCF0aGlzLmNvbnRlbnRDb21wb25lbnROYW1lKXRocm93IG5ldyBSYW5nZUVycm9yKCJSZXF1aXJlIGBjb250ZW50Q29tcG9uZW50TmFtZWAgdG8gYmUgYSBuYW1lIG9mIGEgUG9seW1lciBjb21wb25lbnQiKTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuY29udGVudENvbXBvbmVudE5hbWUpO3JldHVybiBPYmplY3QuYXNzaWduKHQuc3R5bGUsU3FlKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHR9X3JlbW92ZVR1bm5lbCh0KXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpfX07RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYjQucHJvdG90eXBlLCJjb250ZW50Q29tcG9uZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxiNC5wcm90b3R5cGUsInBvc2l0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGI0LnByb3RvdHlwZSwibWluRGlzdEZyb21FZGdlIix2b2lkIDApO2I0PUUoW3l0KCJ2ei1jaGFydC10b29sdGlwIildLGI0KTt2YXIgTlM9RWUod2woKSwxKTt2YXIgREt0PTFlNCxPS3Q9LjAwMSx6S3Q9eG4oIi4yfmUiKSxNcWU9eG4oIi40fnIiKSxSS3Q9eG4oIix+Iik7ZnVuY3Rpb24gTkt0KGUpe2lmKGU9PT0wKXJldHVybiIwIjtsZXQgdD1NYXRoLmFicyhlKTtyZXR1cm4gdD49REt0fHx0PE9LdD96S3QoZSk6TXFlKGUpfXZhciBaYXQ9e2Zvcm1hdFRpY2s6Tkt0LGZvcm1hdFNob3J0Ok5LdCxmb3JtYXRSZWFkYWJsZShlKXtsZXQgdD1NYXRoLmFicyhlKTtyZXR1cm4gdD49REt0fHx0PE9LdD96S3QoZSk6Ukt0KGUpfSxmb3JtYXRMb25nOlJLdH0sakduPW5ldyBJbnRsLk51bWJlckZvcm1hdCh2b2lkIDAse21heGltdW1GcmFjdGlvbkRpZ2l0czozfSk7dmFyIFhHbj14bigiMC4zfnMiKSwkR249eG4oIiwuM35mIik7dmFyIEVxZT0xZTMsVHFlPTYwKkVxZSxDcWU9NjAqVHFlLEFxZT0yNCpDcWUsS0duPTM2NSpBcWUsWkduPXhuKCIuNH4iKTt2YXIgUHFlPVliKCkudGlja0Zvcm1hdCgpLEthdCxGS3Q9e2Zvcm1hdFRpY2soZSl7cmV0dXJuIFBxZShuZXcgRGF0ZShlKSl9LGZvcm1hdFNob3J0KGUpe3JldHVybiBuZXcgRGF0ZShlKS50b0xvY2FsZVN0cmluZyhLYXQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyJ9KX0sZm9ybWF0UmVhZGFibGUoZSl7cmV0dXJuIG5ldyBEYXRlKGUpLnRvTG9jYWxlU3RyaW5nKEthdCx7eWVhcjoibnVtZXJpYyIsbW9udGg6InNob3J0IixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIix0aW1lWm9uZU5hbWU6InNob3J0In0pfSxmb3JtYXRMb25nKGUpe3JldHVybiBuZXcgRGF0ZShlKS50b0xvY2FsZVN0cmluZyhLYXQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIix0aW1lWm9uZU5hbWU6InNob3J0IixmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOjN9KX19O3ZhciBUZDsoZnVuY3Rpb24oZSl7ZVtlLkxJTkVBUj0wXT0iTElORUFSIixlW2UuTE9HMTA9MV09IkxPRzEwIixlW2UuVElNRT0yXT0iVElNRSJ9KShUZHx8KFRkPXt9KSk7ZnVuY3Rpb24gQkt0KGUpe3N3aXRjaChlKXtjYXNlIFRkLkxJTkVBUjpyZXR1cm4gbmV3IEphdDtjYXNlIFRkLkxPRzEwOnJldHVybiBuZXcgUWF0O2Nhc2UgVGQuVElNRTpyZXR1cm4gbmV3IHRzdDtkZWZhdWx0OmxldCB0PWU7dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFNjYWxlVHlwZSAke3R9IG5vdCBzdXBwb3J0ZWQuYCl9fXZhciBJcWU9LjA1LEphdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdEZvcm1hdHRlcj1aYXR9dHJhbnNmb3JtKHQscixuKXtsZXRbaSxvXT10LGE9by1pLFtzLGxdPXIsYz1sLXM7cmV0dXJuIGE9PT0wP3M6Yy9hKihuLWkpK3N9Zm9yd2FyZCh0LHIsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHQscixuKX1yZXZlcnNlKHQscixuKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ocix0LG4pfW5pY2VEb21haW4odCl7bGV0W3Isbl09dDtpZihuPHIpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7aWYobj09PXIpcmV0dXJuIHI9PT0wP1stMSwxXTpyPDA/WzIqciwwXTpbMCwyKnJdO2xldCBpPXpuKCksbz0obi1yK051bWJlci5FUFNJTE9OKSpJcWUsW2Esc109aS5kb21haW4oW3ItbyxuK29dKS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2Esc119dGlja3ModCxyKXtyZXR1cm4gem4oKS5kb21haW4odCkudGlja3Mocil9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fSxRYXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9WmF0fXRyYW5zZm9ybSh0KXtyZXR1cm4gTWF0aC5sb2cxMCh0PjA/dDpOdW1iZXIuTUlOX1ZBTFVFKX11bnRyYW5zZm9ybSh0KXtyZXR1cm4gTWF0aC5leHAodC9NYXRoLkxPRzEwRSl9Zm9yd2FyZCh0LHIsbil7aWYobjw9MClyZXR1cm4gclswXTtsZXRbaSxvXT10LFthLHNdPXIsbD10aGlzLnRyYW5zZm9ybShpKSx1PXRoaXMudHJhbnNmb3JtKG8pLWwsaD1zLWE7cmV0dXJuIG49dGhpcy50cmFuc2Zvcm0obiksaC8odStOdW1iZXIuRVBTSUxPTikqKG4tbCkrYX1yZXZlcnNlKHQscixuKXtsZXRbaSxvXT10LFthLHNdPXIsbD10aGlzLnRyYW5zZm9ybShpKSx1PXRoaXMudHJhbnNmb3JtKG8pLWwsaD1zLWEsZj11LyhoK051bWJlci5FUFNJTE9OKSoobi1hKStsO3JldHVybiB0aGlzLnVudHJhbnNmb3JtKGYpfW5pY2VEb21haW4odCl7bGV0W3Isbl09dDtpZihyPm4pdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7bGV0IGk9TWF0aC5tYXgocixOdW1iZXIuTUlOX1ZBTFVFKSxvPU1hdGgubWF4KG4sTnVtYmVyLk1JTl9WQUxVRSk7cmV0dXJuIG48PTA/W051bWJlci5NSU5fVkFMVUUsMV06W01hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsaSouNSksbyoyXX10aWNrcyh0LHIpe2xldCBuPXRbMF08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzBdLGk9dFsxXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMV0sbz1jYygpLmRvbWFpbihbbixpXSkudGlja3Mocik7cmV0dXJuIG8ubGVuZ3RoP286dH1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSYmdD4wfX0sdHN0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zY2FsZT1ZYigpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj1GS3R9Zm9yd2FyZCh0LHIsbil7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKHIpKG4pfXJldmVyc2UodCxyLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShyKS5pbnZlcnQobikuZ2V0VGltZSgpfW5pY2VEb21haW4odCl7bGV0W3Isbl09dGhpcy5zY2FsZS5kb21haW4odCkubmljZSgpLmRvbWFpbigpO3JldHVybltyLmdldFRpbWUoKSxuLmdldFRpbWUoKV19dGlja3ModCxyKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkudGlja3MocikubWFwKG49Pm4uZ2V0VGltZSgpKX1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KX19O3ZhciBTQj1jbGFzcyBleHRlbmRzIE5TLlNjYWxlcy5MaW5lYXJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2lnbm9yZU91dGxpZXI9ITEsdGhpcy5wYWRQcm9wb3J0aW9uKC4yKX1zZXRWYWx1ZVByb3ZpZGVyRm9yRG9tYWluKHQpe3JldHVybiB0aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluPXQsdGhpc31fbmljZURvbWFpbih0LHIpe2xldFtuLGldPXQ7cmV0dXJuIEJLdChUZC5MSU5FQVIpLm5pY2VEb21haW4oW24saV0pfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7bGV0IHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModCksbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoci5sZW5ndGghPT0wKXtsZXQgaT1bTlMuVXRpbHMuTWF0aC5taW4ocixuWzBdKSxOUy5VdGlscy5NYXRoLm1heChyLG5bMV0pXTtuPXRoaXMuX25pY2VEb21haW4oaSl9cmV0dXJuIG59X2dldEFsbEluY2x1ZGVkVmFsdWVzKHQ9ITEpe2xldCByPXRoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4/dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbigpOltdO3JldHVybiB0aGlzLmV4dGVudE9mVmFsdWVzKHIpfWV4dGVudE9mVmFsdWVzKHQpe2xldCByPXQuZmlsdGVyKG89Pk5TLlV0aWxzLk1hdGguaXNWYWxpZE51bWJlcihvKSksbj1yO2lmKHRoaXMuaWdub3JlT3V0bGllcigpKXtsZXQgbz1yLnNvcnQoKGwsYyk9PmwtYyksYT1zYShvLC4wNSkscz1zYShvLC45NSk7bj1yLmZpbHRlcihsPT5sPj1hJiZsPD1zKX1sZXQgaT1hYShuKTtyZXR1cm4gaVswXT09bnVsbHx8aVsxXT09bnVsbD9bXTppfWlnbm9yZU91dGxpZXIodCl7cmV0dXJuIHR5cGVvZiB0PT0iYm9vbGVhbiI/KHRoaXMuX2lnbm9yZU91dGxpZXI9dCx0aGlzKTp0aGlzLl9pZ25vcmVPdXRsaWVyfX07dmFyIFRCPUVlKHdsKCksMSk7dmFyIEhLdD1FZSh3bCgpLDEpLE1CPWNsYXNzIGV4dGVuZHMgSEt0LlF1YW50aXRhdGl2ZVNjYWxle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9pZ25vcmVPdXRsaWVyPSExfXNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4odCl7cmV0dXJuIHRoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW49dCx0aGlzfWlnbm9yZU91dGxpZXIodCl7cmV0dXJuIHR5cGVvZiB0PT0iYm9vbGVhbiI/KHRoaXMuX2lnbm9yZU91dGxpZXI9dCx0aGlzKTp0aGlzLl9pZ25vcmVPdXRsaWVyfV9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0PSExKXtsZXQgcj10aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluP3RoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4oKTpbXTtyZXR1cm4gdGhpcy5leHRlbnRPZlZhbHVlcyhyKX19O3ZhciBFQj1NYXRoLnBvdygyLC0xMDc0KTtmdW5jdGlvbiB3NChlKXtyZXR1cm4gTWF0aC5sb2cxMChlKX1mdW5jdGlvbiBlc3QoZSl7cmV0dXJuIE1hdGgucG93KDEwLGUpfXZhciBDQj1jbGFzcyBleHRlbmRzIE1Ce2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9kM0xvZ1NjYWxlPWNjKCksdGhpcy5wYWRQcm9wb3J0aW9uKC4yKX1zY2FsZSh0KXtyZXR1cm4gdDw9MD9OYU46dGhpcy5fZDNMb2dTY2FsZSh0KX1pbnZlcnQodCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUuaW52ZXJ0KHQpfXNjYWxlVHJhbnNmb3JtYXRpb24odCl7cmV0dXJuIHRoaXMuc2NhbGUodCl9aW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZlcnQodCl9Z2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKXtyZXR1cm4gdGhpcy5kb21haW4oKX1zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbih0KXt0aGlzLmRvbWFpbih0KX1nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCgpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfV9nZXREb21haW4oKXtyZXR1cm4gdGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbn1fc2V0RG9tYWluKHQpe3RoaXMuX3VudHJhbnNmb3JtZWREb21haW49dDtsZXRbcixuXT10O3N1cGVyLl9zZXREb21haW4oW01hdGgubWF4KEVCLHIpLG5dKX1fbmljZURvbWFpbih0LHIpe2xldFtuLGldPXQsbz1NYXRoLm1heCh3NChFQiksdzQobikpLGE9dzQoaSkscz1hLW8sbD1zP3MqdGhpcy5wYWRQcm9wb3J0aW9uKCk6MTtyZXR1cm5bZXN0KE1hdGgubWF4KHc0KEVCKSxvLWwpKSxlc3QoYStsKV19X2dldFVuYm91bmRlZEV4dGVudCh0KXtsZXQgcj10aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0KSxuPXRoaXMuX2RlZmF1bHRFeHRlbnQoKTtpZihyLmxlbmd0aCE9PTApe2xldCBpPVtUQi5VdGlscy5NYXRoLm1pbihyLG5bMF0pLFRCLlV0aWxzLk1hdGgubWF4KHIsblsxXSldO249dGhpcy5fbmljZURvbWFpbihpKX1yZXR1cm4gbn1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModD0hMSl7cmV0dXJuIHN1cGVyLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpLm1hcChuPT5uPjA/bjpFQil9X2RlZmF1bHRFeHRlbnQoKXtyZXR1cm5bMSwxMF19X2JhY2tpbmdTY2FsZURvbWFpbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9kM0xvZ1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM0xvZ1NjYWxlLmRvbWFpbih0KSx0aGlzKX1fZ2V0UmFuZ2UoKXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS5yYW5nZSgpfV9zZXRSYW5nZSh0KXt0aGlzLl9kM0xvZ1NjYWxlLnJhbmdlKHQpfWRlZmF1bHRUaWNrcygpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnRpY2tzKDEpfXRpY2tzKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUudGlja3MoKX1leHRlbnRPZlZhbHVlcyh0KXtsZXQgcj10LmZpbHRlcihvPT5UQi5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIobykmJm8+MCksbj1yO2lmKHRoaXMuaWdub3JlT3V0bGllcigpKXtsZXQgYT1yLm1hcCh3NCkuc29ydCgoYyx1KT0+Yy11KSxzPXNhKGEsLjA1KSxsPXNhKGEsLjk1KTtuPWEuZmlsdGVyKGM9PmM+PXMmJmM8PWwpLm1hcChlc3QpfWxldCBpPWFhKG4pO3JldHVybiBpWzBdPT1udWxsfHxpWzFdPT1udWxsP1tdOml9fTt2YXIgQ2Q9RWUod2woKSwxKTt2YXIgbjA9RWUod2woKSwxKSxBQj1jbGFzcyBleHRlbmRzIG4wLkNvbXBvbmVudHMuU2VsZWN0aW9uQm94TGF5ZXJ7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5lYXNlRm49eHMsdGhpcy5fYW5pbWF0aW9uVGltZT03NTAsdGhpcy54U2NhbGUodCksdGhpcy55U2NhbGUociksdGhpcy5fZHJhZ0ludGVyYWN0aW9uPW5ldyBuMC5JbnRlcmFjdGlvbnMuRHJhZyx0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uPW5ldyBuMC5JbnRlcmFjdGlvbnMuQ2xpY2ssdGhpcy5zZXR1cENhbGxiYWNrcygpLHRoaXMudW56b29tTWV0aG9kPW4sdGhpcy5vbkRldGFjaCgoKT0+e3RoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0aGlzKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0aGlzKX0pLHRoaXMub25BbmNob3IoKCk9Pnt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmF0dGFjaFRvKHRoaXMpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyh0aGlzKX0pfWludGVyYWN0aW9uU3RhcnQodCl7dGhpcy5vblN0YXJ0PXR9aW50ZXJhY3Rpb25FbmQodCl7dGhpcy5vbkVuZD10fWRyYWdJbnRlcmFjdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259c2V0dXBDYWxsYmFja3MoKXtsZXQgdD0hMTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQocj0+e3RoaXMuYm91bmRzKHt0b3BMZWZ0OnIsYm90dG9tUmlnaHQ6cn0pLHRoaXMub25TdGFydCgpfSksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZygocixuKT0+e3RoaXMuYm91bmRzKHt0b3BMZWZ0OnIsYm90dG9tUmlnaHQ6bn0pLHRoaXMuYm94VmlzaWJsZSghMCksdD0hMH0pLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQoKHIsbik9Pnt0aGlzLmJveFZpc2libGUoITEpLHRoaXMuYm91bmRzKHt0b3BMZWZ0OnIsYm90dG9tUmlnaHQ6bn0pLHQ/dGhpcy56b29tKCk6dGhpcy5vbkVuZCgpLHQ9ITF9KSx0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLm9uRG91YmxlQ2xpY2sodGhpcy51bnpvb20uYmluZCh0aGlzKSl9YW5pbWF0aW9uVGltZSh0KXtpZih0PT1udWxsKXJldHVybiB0aGlzLl9hbmltYXRpb25UaW1lO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoImFuaW1hdGlvblRpbWUgY2Fubm90IGJlIG5lZ2F0aXZlIik7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblRpbWU9dCx0aGlzfWVhc2UodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJlYXNlIGZ1bmN0aW9uIG11c3QgYmUgYSBmdW5jdGlvbiIpO3JldHVybih0KDApIT09MHx8dCgxKSE9PTEpJiZuMC5VdGlscy5XaW5kb3cud2FybigiRWFzaW5nIGZ1bmN0aW9uIGRvZXMgbm90IG1haW50YWluIGludmFyaWFudCBmKDApPT0wICYmIGYoMSk9PTEuIEJhZCBiZWhhdmlvciBtYXkgcmVzdWx0LiIpLHRoaXMuZWFzZUZuPXQsdGhpc316b29tKCl7bGV0IHQ9dGhpcy54RXh0ZW50KClbMF0udmFsdWVPZigpLHI9dGhpcy54RXh0ZW50KClbMV0udmFsdWVPZigpLG49dGhpcy55RXh0ZW50KClbMV0udmFsdWVPZigpLGk9dGhpcy55RXh0ZW50KClbMF0udmFsdWVPZigpO3Q9PT1yfHxuPT09aXx8dGhpcy5pbnRlcnBvbGF0ZVpvb20odCxyLG4saSl9dW56b29tKCl7bGV0IHQ9dGhpcy54U2NhbGUoKTt0Ll9kb21haW5NaW49bnVsbCx0Ll9kb21haW5NYXg9bnVsbDtsZXQgcj10Ll9nZXRFeHRlbnQoKTt0aGlzLnhTY2FsZSgpLmRvbWFpbihyKSx0aGlzLnVuem9vbU1ldGhvZCgpfWlzWm9vbWluZyh0KXt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZW5hYmxlZCghdCksdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5lbmFibGVkKCF0KX1pbnRlcnBvbGF0ZVpvb20odCxyLG4saSl7bGV0IG89dGhpcy54U2NhbGUoKS5kb21haW4oKVswXS52YWx1ZU9mKCksYT10aGlzLnhTY2FsZSgpLmRvbWFpbigpWzFdLnZhbHVlT2YoKSxzPXRoaXMueVNjYWxlKCkuZG9tYWluKClbMF0udmFsdWVPZigpLGw9dGhpcy55U2NhbGUoKS5kb21haW4oKVsxXS52YWx1ZU9mKCksYz10aGlzLmVhc2VGbix1PShwLGQsZyk9PnppKHAsZCkoYyhnKSk7dGhpcy5pc1pvb21pbmcoITApO2xldCBoPURhdGUubm93KCksZj0oKT0+e2xldCBkPURhdGUubm93KCktaCxnPXRoaXMuX2FuaW1hdGlvblRpbWU9PT0wPzE6TWF0aC5taW4oMSxkL3RoaXMuX2FuaW1hdGlvblRpbWUpLF89dShvLHQsZykseT11KGEscixnKSx4PXUocyxuLGcpLGI9dShsLGksZyk7dGhpcy54U2NhbGUoKS5kb21haW4oW18seV0pLHRoaXMueVNjYWxlKCkuZG9tYWluKFt4LGJdKSxnPDE/bjAuVXRpbHMuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKGYpOih0aGlzLm9uRW5kKCksdGhpcy5pc1pvb21pbmcoITEpKX07ZigpfX07dmFyIHhhOyhmdW5jdGlvbihlKXtlW2UuTk9ORT0wXT0iTk9ORSIsZVtlLkRSQUdfWk9PTUlORz0xXT0iRFJBR19aT09NSU5HIixlW2UuUEFOTklORz0yXT0iUEFOTklORyJ9KSh4YXx8KHhhPXt9KSk7dmFyIHpmPWNsYXNzIGV4dGVuZHMgQ2QuQ29tcG9uZW50cy5Hcm91cHtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIoKSx0aGlzLnN0YXRlPXhhLk5PTkUsdGhpcy5wYW5TdGFydENhbGxiYWNrPW5ldyBDZC5VdGlscy5DYWxsYmFja1NldCx0aGlzLnBhbkVuZENhbGxiYWNrPW5ldyBDZC5VdGlscy5DYWxsYmFja1NldCx0aGlzLnBhblpvb209bmV3IENkLkludGVyYWN0aW9ucy5QYW5ab29tKHQsciksdGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm1vdXNlRmlsdGVyKG89PnpmLmlzUGFuS2V5KG8pJiZvLmJ1dHRvbj09PTApLHRoaXMucGFuWm9vbS53aGVlbEZpbHRlcih0aGlzLmNhblNjcm9sbFpvb20pLHRoaXMuZHJhZ1pvb21MYXllcj1uZXcgQUIodCxyLG4pLHRoaXMuZHJhZ1pvb21MYXllci5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcihvPT4hemYuaXNQYW5LZXkobykmJm8uYnV0dG9uPT09MCksdGhpcy5hcHBlbmQodGhpcy5kcmFnWm9vbUxheWVyKTtsZXQgaT10aGlzLm9uV2hlZWwuYmluZCh0aGlzKTt0aGlzLm9uQW5jaG9yKCgpPT57dGhpcy5fbW91c2VEaXNwYXRjaGVyPUNkLkRpc3BhdGNoZXJzLk1vdXNlLmdldERpc3BhdGNoZXIodGhpcyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uV2hlZWwoaSksdGhpcy5wYW5ab29tLmF0dGFjaFRvKHRoaXMpfSksdGhpcy5vbkRldGFjaCgoKT0+e3RoaXMucGFuWm9vbS5kZXRhY2hGcm9tKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlciYmKHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbChpKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCl9KSx0aGlzLnBhblpvb20uZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnU3RhcnQoKCk9Pnt0aGlzLnN0YXRlPT14YS5OT05FJiZ0aGlzLnNldFN0YXRlKHhhLlBBTk5JTkcpfSksdGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKT0+e3RoaXMuc3RhdGU9PXhhLlBBTk5JTkcmJnRoaXMuc2V0U3RhdGUoeGEuTk9ORSl9KSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnU3RhcnQoKCk9Pnt0aGlzLnN0YXRlPT14YS5OT05FJiZ0aGlzLnNldFN0YXRlKHhhLkRSQUdfWk9PTUlORyl9KSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnRW5kKCgpPT57dGhpcy5zdGF0ZT09eGEuRFJBR19aT09NSU5HJiZ0aGlzLnNldFN0YXRlKHhhLk5PTkUpfSl9b25XaGVlbCh0LHIpe2lmKHRoaXMuY2FuU2Nyb2xsWm9vbShyKSlyZXR1cm47bGV0IG49dGhpcy5lbGVtZW50KCk7aWYoIW4uc2VsZWN0KCIuaGVscCIpLmVtcHR5KCkpcmV0dXJuO2xldCBpPW4uYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJoZWxwIiwhMCk7aS5hcHBlbmQoInNwYW4iKS50ZXh0KCJBbHQgKyBTY3JvbGwgdG8gWm9vbSIpLGkub24oImFuaW1hdGlvbmVuZCIsKCk9PnZvaWQgaS5yZW1vdmUoKSl9c3RhdGljIGlzUGFuS2V5KHQpe3JldHVybiBCb29sZWFuKHQuYWx0S2V5KXx8Qm9vbGVhbih0LnNoaWZ0S2V5KX1jYW5TY3JvbGxab29tKHQpe3JldHVybiB0LmFsdEtleX1zZXRTdGF0ZSh0KXtpZih0aGlzLnN0YXRlPT10KXJldHVybjtsZXQgcj10aGlzLnN0YXRlO3RoaXMuc3RhdGU9dCx0aGlzLnJvb3QoKS5yZW1vdmVDbGFzcyh0aGlzLnN0YXRlQ2xhc3NOYW1lKHIpKSx0aGlzLnJvb3QoKS5hZGRDbGFzcyh0aGlzLnN0YXRlQ2xhc3NOYW1lKHQpKSxyPT14YS5QQU5OSU5HJiZ0aGlzLnBhbkVuZENhbGxiYWNrLmNhbGxDYWxsYmFja3MoKSx0PT14YS5QQU5OSU5HJiZ0aGlzLnBhblN0YXJ0Q2FsbGJhY2suY2FsbENhbGxiYWNrcygpfXN0YXRlQ2xhc3NOYW1lKHQpe3N3aXRjaCh0KXtjYXNlIHhhLlBBTk5JTkc6cmV0dXJuInBhbm5pbmciO2Nhc2UgeGEuRFJBR19aT09NSU5HOnJldHVybiJkcmFnLXpvb21pbmciO2Nhc2UgeGEuTk9ORTpkZWZhdWx0OnJldHVybiIifX1vblBhblN0YXJ0KHQpe3RoaXMucGFuU3RhcnRDYWxsYmFjay5hZGQodCl9b25QYW5FbmQodCl7dGhpcy5wYW5FbmRDYWxsYmFjay5hZGQodCl9b25TY3JvbGxab29tKHQpe3RoaXMucGFuWm9vbS5vblpvb21FbmQodCl9b25EcmFnWm9vbVN0YXJ0KHQpe3RoaXMuZHJhZ1pvb21MYXllci5pbnRlcmFjdGlvblN0YXJ0KHQpfW9uRHJhZ1pvb21FbmQodCl7dGhpcy5kcmFnWm9vbUxheWVyLmludGVyYWN0aW9uRW5kKHQpfX07dmFyIFBCOyhmdW5jdGlvbihlKXtlW2UuVEVYVD0wXT0iVEVYVCIsZVtlLkRPTT0xXT0iRE9NIn0pKFBCfHwoUEI9e30pKTt2YXIgRmY7KGZ1bmN0aW9uKGUpe2UuTE9HPSJsb2ciLGUuTElORUFSPSJsaW5lYXIifSkoRmZ8fChGZj17fSkpO3ZhciBWS3Q9MjAsRFM9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMsdSxoKXt0aGlzLmRpcnR5RGF0YXNldHM9bmV3IFNldCx0aGlzLnNlcmllc05hbWVzPVtdLHRoaXMubmFtZTJkYXRhc2V0cz17fSx0aGlzLmNvbG9yU2NhbGU9aSx0aGlzLnRvb2x0aXA9byx0aGlzLmRhdGFzZXRzPVtdLHRoaXMuX2lnbm9yZVlPdXRsaWVycz0hMSx0aGlzLmxhc3RQb2ludHNEYXRhc2V0PW5ldyBNbi5EYXRhc2V0LHRoaXMubmFuRGF0YXNldD1uZXcgTW4uRGF0YXNldCx0aGlzLnlWYWx1ZUFjY2Vzc29yPXIsdGhpcy5zeW1ib2xGdW5jdGlvbj11LHRoaXMuX2RlZmF1bHRYUmFuZ2U9bCx0aGlzLl9kZWZhdWx0WVJhbmdlPWMsdGhpcy50b29sdGlwQ29sdW1ucz1hLHRoaXMuYnVpbGRDaGFydCh0LHIsbixzLGgpfWJ1aWxkQ2hhcnQodCxyLG4saSxvKXt0aGlzLmRlc3Ryb3koKTtsZXQgYT10KCk7dGhpcy54QWNjZXNzb3I9YS5hY2Nlc3Nvcix0aGlzLnhTY2FsZT1hLnNjYWxlLHRoaXMueEF4aXM9YS5heGlzLHRoaXMueEF4aXMubWFyZ2luKDEpLnRpY2tMYWJlbFBhZGRpbmcoMyksbyYmdGhpcy54QXhpcy5mb3JtYXR0ZXIobyksdGhpcy55U2NhbGU9RFMuZ2V0WVNjYWxlRnJvbVR5cGUobiksdGhpcy55U2NhbGUuc2V0VmFsdWVQcm92aWRlckZvckRvbWFpbigoKT0+dGhpcy5nZXRWYWx1ZXNGb3JZQXhpc0RvbWFpbkNvbXB1dGUoKSksdGhpcy55QXhpcz1uZXcgTW4uQXhlcy5OdW1lcmljKHRoaXMueVNjYWxlLCJsZWZ0Iik7bGV0IHM9V3UoZEIpO3RoaXMueUF4aXMubWFyZ2luKDApLnRpY2tMYWJlbFBhZGRpbmcoNSkuZm9ybWF0dGVyKHMpLHRoaXMueUF4aXMudXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24oITApLHRoaXMuZmlsbEFyZWE9aTtsZXQgbD1uZXcgemYodGhpcy54U2NhbGUsdGhpcy55U2NhbGUsKCk9PnRoaXMucmVzZXREb21haW4oKSk7dGhpcy50b29sdGlwSW50ZXJhY3Rpb249dGhpcy5jcmVhdGVUb29sdGlwSW50ZXJhY3Rpb24obCksdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50PW5ldyBNbi5Db21wb25lbnQ7bGV0IGM9dGhpcy5idWlsZFBsb3QodGhpcy54U2NhbGUsdGhpcy55U2NhbGUsaSk7dGhpcy5ncmlkbGluZXM9bmV3IE1uLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKTtsZXQgdT1udWxsO24hPT1GZi5MT0cmJih1PW5ldyBNbi5Db21wb25lbnRzLkd1aWRlTGluZUxheWVyKCJob3Jpem9udGFsIiksdS5zY2FsZSh0aGlzLnlTY2FsZSkudmFsdWUoMCkpO2xldCBoPW5ldyBNbi5Db21wb25lbnRzLkd1aWRlTGluZUxheWVyKCJ2ZXJ0aWNhbCIpO2guc2NhbGUodGhpcy54U2NhbGUpLnZhbHVlKDApLHRoaXMuY2VudGVyPW5ldyBNbi5Db21wb25lbnRzLkdyb3VwKFt0aGlzLmdyaWRsaW5lcyx1LGgsYyx0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQsbF0pLHRoaXMuY2VudGVyLmFkZENsYXNzKCJtYWluIiksdGhpcy5vdXRlcj1uZXcgTW4uQ29tcG9uZW50cy5UYWJsZShbW3RoaXMueUF4aXMsdGhpcy5jZW50ZXJdLFtudWxsLHRoaXMueEF4aXNdXSl9YnVpbGRQbG90KHQscixuKXtuJiYodGhpcy5tYXJnaW5BcmVhUGxvdD1uZXcgTW4uUGxvdHMuQXJlYSx0aGlzLm1hcmdpbkFyZWFQbG90LngodGhpcy54QWNjZXNzb3IsdCksdGhpcy5tYXJnaW5BcmVhUGxvdC55KG4uaGlnaGVyQWNjZXNzb3IsciksdGhpcy5tYXJnaW5BcmVhUGxvdC55MChuLmxvd2VyQWNjZXNzb3IpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbCIsKGMsdSxoKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKGgubWV0YWRhdGEoKS5uYW1lKSksdGhpcy5tYXJnaW5BcmVhUGxvdC5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoInN0cm9rZS13aWR0aCIsMCkpLHRoaXMuc21vb3RoZWRBY2Nlc3Nvcj1jPT5jLnNtb290aGVkO2xldCBpPW5ldyBNbi5QbG90cy5MaW5lO2kueCh0aGlzLnhBY2Nlc3Nvcix0KSxpLnkodGhpcy55VmFsdWVBY2Nlc3NvcixyKSxpLmF0dHIoInN0cm9rZSIsKGMsdSxoKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKGgubWV0YWRhdGEoKS5uYW1lKSksdGhpcy5saW5lUGxvdD1pLHRoaXMuc2V0dXBUb29sdGlwcyhpKTtsZXQgbz1uZXcgTW4uUGxvdHMuTGluZTtpZihvLngodGhpcy54QWNjZXNzb3IsdCksby55KHRoaXMuc21vb3RoZWRBY2Nlc3NvcixyKSxvLmF0dHIoInN0cm9rZSIsKGMsdSxoKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKGgubWV0YWRhdGEoKS5uYW1lKSksdGhpcy5zbW9vdGhMaW5lUGxvdD1vLHRoaXMuc3ltYm9sRnVuY3Rpb24pe2xldCBjPW5ldyBNbi5QbG90cy5TY2F0dGVyO2MueCh0aGlzLnhBY2Nlc3Nvcix0KSxjLnkodGhpcy55VmFsdWVBY2Nlc3NvcixyKSxjLmF0dHIoImZpbGwiLCh1LGgsZik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShmLm1ldGFkYXRhKCkubmFtZSkpLGMuYXR0cigib3BhY2l0eSIsMSksYy5zaXplKGdCKjIpLGMuc3ltYm9sKCh1LGgsZik9PnRoaXMuc3ltYm9sRnVuY3Rpb24oZi5tZXRhZGF0YSgpLm5hbWUpKSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdD1jfWxldCBhPW5ldyBNbi5QbG90cy5TY2F0dGVyO2EueCh0aGlzLnhBY2Nlc3Nvcix0KSxhLnkodGhpcy55VmFsdWVBY2Nlc3NvcixyKSxhLmF0dHIoImZpbGwiLGM9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShjLm5hbWUpKSxhLmF0dHIoIm9wYWNpdHkiLDEpLGEuc2l6ZShnQioyKSxhLmRhdGFzZXRzKFt0aGlzLmxhc3RQb2ludHNEYXRhc2V0XSksdGhpcy5zY2F0dGVyUGxvdD1hO2xldCBzPW5ldyBNbi5QbG90cy5TY2F0dGVyO3MueCh0aGlzLnhBY2Nlc3Nvcix0KSxzLnkoYz0+Yy5kaXNwbGF5WSxyKSxzLmF0dHIoImZpbGwiLGM9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShjLm5hbWUpKSxzLmF0dHIoIm9wYWNpdHkiLDEpLHMuc2l6ZShMS3QqMikscy5kYXRhc2V0cyhbdGhpcy5uYW5EYXRhc2V0XSkscy5zeW1ib2woTW4uU3ltYm9sRmFjdG9yaWVzLnRyaWFuZ2xlKSx0aGlzLm5hbkRpc3BsYXk9cztsZXQgbD1bcyxhLG8saV07cmV0dXJuIHRoaXMubWFyZ2luQXJlYVBsb3QmJmwucHVzaCh0aGlzLm1hcmdpbkFyZWFQbG90KSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCYmbC5wdXNoKHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90KSxuZXcgTW4uQ29tcG9uZW50cy5Hcm91cChsKX1pZ25vcmVZT3V0bGllcnModCl7dCE9PXRoaXMuX2lnbm9yZVlPdXRsaWVycyYmKHRoaXMuX2lnbm9yZVlPdXRsaWVycz10LHRoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCksdGhpcy55U2NhbGUuaWdub3JlT3V0bGllcih0KSx0aGlzLnJlc2V0WURvbWFpbigpKX1nZXRWYWx1ZXNGb3JZQXhpc0RvbWFpbkNvbXB1dGUoKXtsZXQgdD10aGlzLmdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpLHI9bj0+dC5tYXAoaT0+bi5kYXRhKCkubWFwKG89PmkobywtMSxuKSkpO3JldHVybiB6cy5mbGF0dGVuRGVlcCh0aGlzLmRhdGFzZXRzLm1hcChyKSkuZmlsdGVyKGlzRmluaXRlKX11cGRhdGVTcGVjaWFsRGF0YXNldHMoKXtsZXQgdD10aGlzLmdldFlBeGlzQWNjZXNzb3IoKSxyPXRoaXMuZGF0YXNldHMubWFwKG89PntsZXQgYT1udWxsLHM9by5kYXRhKCkuZmlsdGVyKGw9PiFpc05hTih0KGwsLTEsbykpKTtpZihzLmxlbmd0aD4wKXtsZXQgbD1zLmxlbmd0aC0xO2E9c1tsXSxhLm5hbWU9by5tZXRhZGF0YSgpLm5hbWUsYS5yZWxhdGl2ZT1yMChhLC0xLG8pfXJldHVybiBhfSkuZmlsdGVyKG89Pm8hPW51bGwpO3RoaXMubGFzdFBvaW50c0RhdGFzZXQuZGF0YShyKSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCYmdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cy5tYXAodGhpcy5jcmVhdGVTYW1wbGVkRGF0YXNldEZvck1hcmtlcnMpKTtsZXQgbj1vPT57bGV0IGE9bnVsbCxzPW8uZGF0YSgpLGw9MDtmb3IoO2w8cy5sZW5ndGgmJmE9PW51bGw7KWlzTmFOKHQoc1tsXSwtMSxvKSl8fChhPXQoc1tsXSwtMSxvKSksbCsrO2E9PW51bGwmJihhPTApO2xldCBjPVtdO2ZvcihsPTA7bDxzLmxlbmd0aDtsKyspaXNOYU4odChzW2xdLC0xLG8pKT8oc1tsXS5uYW1lPW8ubWV0YWRhdGEoKS5uYW1lLHNbbF0uZGlzcGxheVk9YSxzW2xdLnJlbGF0aXZlPXIwKHNbbF0sLTEsbyksYy5wdXNoKHNbbF0pKTphPXQoc1tsXSwtMSxvKTtyZXR1cm4gY30saT16cy5mbGF0dGVuKHRoaXMuZGF0YXNldHMubWFwKG4pKTt0aGlzLm5hbkRhdGFzZXQuZGF0YShpKX1yZXNldERvbWFpbigpe3RoaXMucmVzZXRYRG9tYWluKCksdGhpcy5yZXNldFlEb21haW4oKX1yZXNldFhEb21haW4oKXtsZXQgdDtpZih0aGlzLl9kZWZhdWx0WFJhbmdlIT1udWxsKXQ9dGhpcy5fZGVmYXVsdFhSYW5nZTtlbHNle2xldCByPXRoaXMueFNjYWxlO3IuX2RvbWFpbk1pbj1udWxsLHIuX2RvbWFpbk1heD1udWxsLHQ9ci5fZ2V0RXh0ZW50KCl9dGhpcy54U2NhbGUuZG9tYWluKHQpfXJlc2V0WURvbWFpbigpe3RoaXMuX2RlZmF1bHRZUmFuZ2UhPW51bGw/dGhpcy55U2NhbGUuZG9tYWluKHRoaXMuX2RlZmF1bHRZUmFuZ2UpOih0aGlzLnlTY2FsZS5hdXRvRG9tYWluKCksdGhpcy55U2NhbGUuZG9tYWluKHRoaXMueVNjYWxlLmRvbWFpbigpKSl9Z2V0QWNjZXNzb3JzRm9yQ29tcHV0aW5nWVJhbmdlKCl7bGV0IHQ9W3RoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpXTtyZXR1cm4gdGhpcy5maWxsQXJlYSYmdC5wdXNoKHRoaXMuZmlsbEFyZWEubG93ZXJBY2Nlc3Nvcix0aGlzLmZpbGxBcmVhLmhpZ2hlckFjY2Vzc29yKSx0fWdldFlBeGlzQWNjZXNzb3IoKXtyZXR1cm4gdGhpcy5zbW9vdGhpbmdFbmFibGVkP3RoaXMuc21vb3RoZWRBY2Nlc3Nvcjp0aGlzLnlWYWx1ZUFjY2Vzc29yfWNyZWF0ZVRvb2x0aXBJbnRlcmFjdGlvbih0KXtsZXQgcj1uZXcgd0Isbj0oKT0+e3IuZW5hYmxlZCghMSksdGhpcy5oaWRlVG9vbHRpcHMoKX0saT0oKT0+ci5lbmFibGVkKCEwKTtyZXR1cm4gdC5vblBhblN0YXJ0KG4pLHQub25EcmFnWm9vbVN0YXJ0KG4pLHQub25QYW5FbmQoaSksdC5vbkRyYWdab29tRW5kKGkpLHQub25TY3JvbGxab29tKCgpPT50aGlzLnVwZGF0ZVRvb2x0aXBDb250ZW50KHRoaXMuX2xhc3RNb3VzZVBvc2l0aW9uKSksci5vblBvaW50ZXJNb3ZlKG89Pnt0aGlzLl9sYXN0TW91c2VQb3NpdGlvbj1vLHRoaXMudXBkYXRlVG9vbHRpcENvbnRlbnQobyl9KSxyLm9uUG9pbnRlckV4aXQoKCk9PnRoaXMuaGlkZVRvb2x0aXBzKCkpLHJ9dXBkYXRlVG9vbHRpcENvbnRlbnQodCl7IXRoaXMubGluZVBsb3R8fCh3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lKSx0aGlzLl90b29sdGlwVXBkYXRlQW5pbWF0aW9uRnJhbWU9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2xldCByPXt4OnQueCx5OnQueX0sbj10aGlzLmdyaWRsaW5lcy5jb250ZW50KCkubm9kZSgpLmdldEJCb3goKSxpPXRoaXMubGluZVBsb3QuZGF0YXNldHMoKS5tYXAobD0+dGhpcy5maW5kQ2xvc2VzdFBvaW50KHIsbCkpLmZpbHRlcihsPT5Cb29sZWFuKGwpKSxvPU1uLlV0aWxzLkRPTS5pbnRlcnNlY3RzQkJveCxhPWkuZmlsdGVyKGw9Pm8obC54LGwueSxuKXx8aXNOYU4odGhpcy55VmFsdWVBY2Nlc3NvcihsLmRhdHVtLDAsbC5kYXRhc2V0KSkpLHM9YS5maWx0ZXIobD0+IWlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IobC5kYXR1bSwwLGwuZGF0YXNldCkpKTtpZihpLmxlbmd0aCE9PTApe3RoaXMuc2NhdHRlclBsb3QuYXR0cigiZGlzcGxheSIsIm5vbmUiKTtsZXQgbD10aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQuY29udGVudCgpLnNlbGVjdEFsbCgiLnBvaW50IikuZGF0YShzLGM9PmMuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpO2wuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmNsYXNzZWQoInBvaW50IiwhMCksbC5hdHRyKCJyIixnQikuYXR0cigiY3giLGM9PmMueCkuYXR0cigiY3kiLGM9PmMueSkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpLGwuZXhpdCgpLnJlbW92ZSgpLHRoaXMuZHJhd1Rvb2x0aXBzKGEscix0aGlzLnRvb2x0aXBDb2x1bW5zKX1lbHNlIHRoaXMuaGlkZVRvb2x0aXBzKCl9KSl9aGlkZVRvb2x0aXBzKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZSksdGhpcy50b29sdGlwLmhpZGUoKSx0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJibG9jayIpLHRoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudC5jb250ZW50KCkuc2VsZWN0QWxsKCIucG9pbnQiKS5yZW1vdmUoKX1zZXR1cFRvb2x0aXBzKHQpe3Qub25EZXRhY2goKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5kZXRhY2hGcm9tKHQpLHRoaXMudG9vbHRpcEludGVyYWN0aW9uLmVuYWJsZWQoITEpfSksdC5vbkFuY2hvcigoKT0+e3RoaXMudG9vbHRpcEludGVyYWN0aW9uLmF0dGFjaFRvKHQpLHRoaXMudG9vbHRpcEludGVyYWN0aW9uLmVuYWJsZWQoITApfSl9ZHJhd1Rvb2x0aXBzKHQscixuKXtpZighdC5sZW5ndGgpe3RoaXMudG9vbHRpcC5oaWRlKCk7cmV0dXJufWxldHtjb2xvclNjYWxlOml9PXRoaXM7bj1be3RpdGxlOiIiLHN0YXRpYzohMSxldmFsVHlwZTpQQi5ET00sZXZhbHVhdGUoZCl7cmV0dXJuIEh0KHRoaXMpLnNlbGVjdCgic3BhbiIpLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwoKT0+aS5zY2FsZShkLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKSksIiJ9LGVudGVyKGQpe0h0KHRoaXMpLmFwcGVuZCgic3BhbiIpLmNsYXNzZWQoInN3YXRjaCIsITApLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwoKT0+aS5zY2FsZShkLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKSl9fSwuLi5uXTtsZXQgYT1XdShlMCkscz1kPT5NYXRoLnBvdyhkLngtci54LDIpK01hdGgucG93KGQueS1yLnksMiksbD16cy5taW4odC5tYXAocykpLGM9dGhpcy5zbW9vdGhpbmdFbmFibGVkP3RoaXMuc21vb3RoZWRBY2Nlc3Nvcjp0aGlzLnlWYWx1ZUFjY2Vzc29yO3RoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q9PT0iYXNjZW5kaW5nIj90PXpzLnNvcnRCeSh0LGQ9PmMoZC5kYXR1bSwtMSxkLmRhdGFzZXQpKTp0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPT09ImRlc2NlbmRpbmciP3Q9enMuc29ydEJ5KHQsZD0+YyhkLmRhdHVtLC0xLGQuZGF0YXNldCkpLnJldmVyc2UoKTp0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPT09Im5lYXJlc3QiP3Q9enMuc29ydEJ5KHQscyk6dD10LnNsaWNlKDApLnJldmVyc2UoKTtsZXQgdT10aGlzLGg9SHQodGhpcy50b29sdGlwLmNvbnRlbnQoKSkuc2VsZWN0KCJ0YWJsZSIpLGY9aC5zZWxlY3QoInRoZWFkIikuc2VsZWN0QWxsKCJ0aCIpLmRhdGEobiwoZCxnLF8pPT5kLnRpdGxlKTtmLmVudGVyKCkuYXBwZW5kKCJ0aCIpLnRleHQoZD0+ZC50aXRsZSkubm9kZXMoKSxmLmV4aXQoKS5yZW1vdmUoKTtsZXQgcD1oLnNlbGVjdCgidGJvZHkiKS5zZWxlY3RBbGwoInRyIikuZGF0YSh0LChkLGcsXyk9PmQuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpO3AuY2xhc3NlZCgiZGlzdGFudCIsZD0+e2xldCBnPWQuZGF0YXNldC5kYXRhKClbMF0sXz16cy5sYXN0KGQuZGF0YXNldC5kYXRhKCkpLHk9dGhpcy54U2NhbGUuc2NhbGUodGhpcy54QWNjZXNzb3IoZywwLGQuZGF0YXNldCkpLHg9dGhpcy54U2NhbGUuc2NhbGUodGhpcy54QWNjZXNzb3IoXywwLGQuZGF0YXNldCkpLGI9dGhpcy5zbW9vdGhpbmdFbmFibGVkP2QuZGF0dW0uc21vb3RoZWQ6dGhpcy55VmFsdWVBY2Nlc3NvcihkLmRhdHVtLDAsZC5kYXRhc2V0KTtyZXR1cm4gci54PHl8fHIueD54fHxpc05hTihiKX0pLmNsYXNzZWQoImNsb3Nlc3QiLGQ9PnMoZCk9PT1sKS5lYWNoKGZ1bmN0aW9uKGQpe3UuZHJhd1Rvb2x0aXBSb3codGhpcyxuLGQpfSkub3JkZXIoKSxwLmV4aXQoKS5yZW1vdmUoKSxwLmVudGVyKCkuYXBwZW5kKCJ0ciIpLmVhY2goZnVuY3Rpb24oZCl7dS5kcmF3VG9vbHRpcFJvdyh0aGlzLG4sZCl9KS5ub2RlcygpLHRoaXMudG9vbHRpcC51cGRhdGVBbmRQb3NpdGlvbih0aGlzLnRhcmdldFNWRy5ub2RlKCkpfWRyYXdUb29sdGlwUm93KHQscixuKXtsZXQgaT10aGlzLG89SHQodCkuc2VsZWN0QWxsKCJ0ZCIpLmRhdGEocik7by5lYWNoKGZ1bmN0aW9uKGEpe2Euc3RhdGljfHxpLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwoaSx0aGlzLGEsbil9KSxvLmV4aXQoKS5yZW1vdmUoKSxvLmVudGVyKCkuYXBwZW5kKCJ0ZCIpLmVhY2goZnVuY3Rpb24oYSl7ImVudGVyImluIGEmJmEuZW50ZXIuY2FsbCh0aGlzLG4pLGkuZHJhd1Rvb2x0aXBDb2x1bW4uY2FsbChpLHRoaXMsYSxuKX0pfWRyYXdUb29sdGlwQ29sdW1uKHQscixuKXtsZXR7c21vb3RoaW5nRW5hYmxlZDppfT10aGlzOyJldmFsVHlwZSJpbiByJiZyLmV2YWxUeXBlPT1QQi5ET00/ci5ldmFsdWF0ZS5jYWxsKHQsbix7c21vb3RoaW5nRW5hYmxlZDppfSk6SHQodCkudGV4dChyLmV2YWx1YXRlLmNhbGwodCxuLHtzbW9vdGhpbmdFbmFibGVkOml9KSl9ZmluZENsb3Nlc3RQb2ludCh0LHIpe2xldCBuPXIuZGF0YSgpLm1hcCgocyxsKT0+dGhpcy54U2NhbGUuc2NhbGUodGhpcy54QWNjZXNzb3IocyxsLHIpKSksaT16cy5zb3J0ZWRJbmRleChuLHQueCk7aWYobi5sZW5ndGg9PTApcmV0dXJuIG51bGw7aWYoaT09PW4ubGVuZ3RoKWk9aS0xO2Vsc2UgaWYoaSE9PTApe2xldCBzPU1hdGguYWJzKG5baS0xXS10LngpLGw9TWF0aC5hYnMobltpXS10LngpO2k9czxsP2ktMTppfWxldCBvPXIuZGF0YSgpW2ldLGE9dGhpcy5zbW9vdGhpbmdFbmFibGVkP3RoaXMuc21vb3RoZWRBY2Nlc3NvcihvLGkscik6dGhpcy55VmFsdWVBY2Nlc3NvcihvLGkscik7cmV0dXJue3g6bltpXSx5OnRoaXMueVNjYWxlLnNjYWxlKGEpLGRhdHVtOm8sZGF0YXNldDpyfX1yZXNtb290aERhdGFzZXQodCl7bGV0IHI9dC5kYXRhKCksbj10aGlzLnNtb290aGluZ1dlaWdodCxpPXIubGVuZ3RoPjA/MDpOYU4sbz0wLGE9ci5tYXAoKGwsYyk9PnRoaXMueVZhbHVlQWNjZXNzb3IobCxjLHQpKSxzPWEuZXZlcnkobD0+bD09YVswXSk7ci5mb3JFYWNoKChsLGMpPT57bGV0IHU9YVtjXTtpZihzfHwhTnVtYmVyLmlzRmluaXRlKHUpKWwuc21vb3RoZWQ9dTtlbHNle2k9aSpuKygxLW4pKnUsbysrO2xldCBoPTE7biE9PTEmJihoPTEtTWF0aC5wb3cobixvKSksbC5zbW9vdGhlZD1pL2h9fSl9Z2V0RGF0YXNldCh0KXtyZXR1cm4gdGhpcy5uYW1lMmRhdGFzZXRzW3RdPT09dm9pZCAwJiYodGhpcy5uYW1lMmRhdGFzZXRzW3RdPW5ldyBNbi5EYXRhc2V0KFtdLHtuYW1lOnQsbWV0YTpudWxsfSkpLHRoaXMubmFtZTJkYXRhc2V0c1t0XX1zdGF0aWMgZ2V0WVNjYWxlRnJvbVR5cGUodCl7aWYodD09PUZmLkxPRylyZXR1cm4gbmV3IENCO2lmKHQ9PT1GZi5MSU5FQVIpcmV0dXJuIG5ldyBTQjt0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB5U2NhbGUgdHlwZSAiK3QpfXNldFZpc2libGVTZXJpZXModCl7dGhpcy5kaXNhYmxlQ2hhbmdlcygpLHQ9dC5zb3J0KCksdC5yZXZlcnNlKCksdGhpcy5zZXJpZXNOYW1lcz10fWRpc2FibGVDaGFuZ2VzKCl7dGhpcy5kaXJ0eURhdGFzZXRzLnNpemV8fCh0aGlzLmxpbmVQbG90LmRhdGFzZXRzKFtdKSx0aGlzLnNtb290aExpbmVQbG90JiZ0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKFtdKSx0aGlzLm1hcmdpbkFyZWFQbG90JiZ0aGlzLm1hcmdpbkFyZWFQbG90LmRhdGFzZXRzKFtdKSl9Y29tbWl0Q2hhbmdlcygpe3RoaXMuZGF0YXNldHM9dGhpcy5zZXJpZXNOYW1lcy5tYXAodD0+dGhpcy5nZXREYXRhc2V0KHQpKSxbLi4udGhpcy5kaXJ0eURhdGFzZXRzXS5mb3JFYWNoKHQ9Pnt0aGlzLnNtb290aGluZ0VuYWJsZWQmJnRoaXMucmVzbW9vdGhEYXRhc2V0KHRoaXMuZ2V0RGF0YXNldCh0KSl9KSx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpLHRoaXMubGluZVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cyksdGhpcy5zbW9vdGhpbmdFbmFibGVkJiZ0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMubWFyZ2luQXJlYVBsb3QmJnRoaXMubWFyZ2luQXJlYVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cyksdGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCksdGhpcy5kaXJ0eURhdGFzZXRzLmNsZWFyKCl9Y3JlYXRlU2FtcGxlZERhdGFzZXRGb3JNYXJrZXJzKHQpe2xldCByPXQuZGF0YSgpO2lmKHIubGVuZ3RoPD1WS3QpcmV0dXJuIHQ7bGV0IG49TWF0aC5jZWlsKHIubGVuZ3RoL1ZLdCksaT1uZXcgQXJyYXkoTWF0aC5mbG9vcihyLmxlbmd0aC9uKSk7Zm9yKGxldCBvPTAsYT0wO288aS5sZW5ndGg7bysrLGErPW4paVtvXT1yW2FdO3JldHVybiBuZXcgTW4uRGF0YXNldChpLHQubWV0YWRhdGEoKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0aGlzLmdldERhdGFzZXQodCkuZGF0YShyKSx0aGlzLmRpcnR5RGF0YXNldHMuYWRkKHQpfXNldFNlcmllc01ldGFkYXRhKHQscil7dGhpcy5kaXNhYmxlQ2hhbmdlcygpLHRoaXMuZ2V0RGF0YXNldCh0KS5tZXRhZGF0YShNeChLbCh7fSx0aGlzLmdldERhdGFzZXQodCkubWV0YWRhdGEoKSkse21ldGE6cn0pKSx0aGlzLmRpcnR5RGF0YXNldHMuYWRkKHQpfXNtb290aGluZ1VwZGF0ZSh0KXt0aGlzLnNtb290aGluZ1dlaWdodD10LHRoaXMuZGF0YXNldHMuZm9yRWFjaChyPT50aGlzLnJlc21vb3RoRGF0YXNldChyKSksdGhpcy5zbW9vdGhpbmdFbmFibGVkfHwodGhpcy5saW5lUGxvdC5hZGRDbGFzcygiZ2hvc3QiKSx0aGlzLnNjYXR0ZXJQbG90LnkodGhpcy5zbW9vdGhlZEFjY2Vzc29yLHRoaXMueVNjYWxlKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITAsdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpLHRoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCl9c21vb3RoaW5nRGlzYWJsZSgpe3RoaXMuc21vb3RoaW5nRW5hYmxlZCYmKHRoaXMubGluZVBsb3QucmVtb3ZlQ2xhc3MoImdob3N0IiksdGhpcy5zY2F0dGVyUGxvdC55KHRoaXMueVZhbHVlQWNjZXNzb3IsdGhpcy55U2NhbGUpLHRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHMoW10pLHRoaXMuc21vb3RoaW5nRW5hYmxlZD0hMSx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpKSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCYmdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QueSh0aGlzLmdldFlBeGlzQWNjZXNzb3IoKSx0aGlzLnlTY2FsZSl9c2V0Q29sb3JTY2FsZSh0KXt0aGlzLmNvbG9yU2NhbGU9dH1zZXRUb29sdGlwQ29sdW1ucyh0KXt0aGlzLnRvb2x0aXBDb2x1bW5zPXR9c2V0VG9vbHRpcFNvcnRpbmdNZXRob2QodCl7dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD10fXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KSx0aGlzLl9kZWZhdWx0WFJhbmdlIT1udWxsJiZ0aGlzLnJlc2V0WERvbWFpbigpLHRoaXMuX2RlZmF1bHRZUmFuZ2UhPW51bGwmJnRoaXMucmVzZXRZRG9tYWluKCksdGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCl9cmVkcmF3KCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlZHJhd1JhZiksdGhpcy5fcmVkcmF3UmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLm1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCksdGhpcy5vdXRlci5yZWRyYXcoKX0pfW1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0SW5SYWYoKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5faW52YWxpZGF0ZUxheW91dFJhZiksdGhpcy5faW52YWxpZGF0ZUxheW91dFJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpfSl9bWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXQoKXtpZih0aGlzLl9sYXN0RHJhd0JCb3gpe2xldHt3aWR0aDp0fT10aGlzLl9sYXN0RHJhd0JCb3gse3dpZHRoOnJ9PXRoaXMudGFyZ2V0U1ZHLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0PT0wJiZ0PHImJnRoaXMub3V0ZXIuaW52YWxpZGF0ZUNhY2hlKCl9dGhpcy5fbGFzdERyYXdCQm94PXRoaXMudGFyZ2V0U1ZHLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1kZXN0cm95KCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlZHJhd1JhZiksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpLHRoaXMub3V0ZXImJnRoaXMub3V0ZXIuZGVzdHJveSgpfW9uQW5jaG9yKHQpe3RoaXMub3V0ZXImJnRoaXMub3V0ZXIub25BbmNob3IodCl9aXNEYXRhRml0VG9Eb21haW4oKXtyZXR1cm4gdCh0aGlzLnhBeGlzLmdldFNjYWxlKCkpJiZ0KHRoaXMueUF4aXMuZ2V0U2NhbGUoKSk7ZnVuY3Rpb24gdChyKXtsZXQgbj1yLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCksaT1yLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50KCk7cmV0dXJuIGlbMF09PT1uWzBdJiZpWzFdPT09blsxXX19fTt2YXIgcUt0PUVlKE9lKCksMSksaXN0PUVlKHdsKCksMSk7X3Moe21vZHVsZU5hbWU6InBsb3R0YWJsZS1zdHlsZSIsc3R5bGVDb250ZW50OmAKICAgIAoucGxvdHRhYmxlLWNvbG9ycy0wIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTI3OWM3OyAvKiBJTkRJR08gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtMSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZkMzczZTsgLyogQ09SQUxfUkVEICovCn0KCi5wbG90dGFibGUtY29sb3JzLTIgewogIGJhY2tncm91bmQtY29sb3I6ICM2M2MyNjE7IC8qIEZFUk4gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtMyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZDQxOTsgLyogQlJJR0hUX1NVTiAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy00IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmMyYjZmOyAvKiBKQUNBUlRBICovCn0KCi5wbG90dGFibGUtY29sb3JzLTUgewogIGJhY2tncm91bmQtY29sb3I6ICNmZjc5Mzk7IC8qIEJVUk5JTkdfT1JBTkdFICovCn0KCi5wbG90dGFibGUtY29sb3JzLTYgewogIGJhY2tncm91bmQtY29sb3I6ICNkYjJlNjU7IC8qIENFUklTRV9SRUQgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNyB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk5Y2U1MDsgLyogQ09OSUZFUiAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy04IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTYyNTY1OyAvKiBST1lBTF9IRUFUSCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy05IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDZjY2NjOyAvKiBST0JJTlNfRUdHX0JMVUUgKi8KfQoKLyoqCiAqIFVzZXItc3VwcGxpZWQgcmVuZGVyVG8gZWxlbWVudC4KICovCi5wbG90dGFibGUgewogIGRpc3BsYXk6IGJsb2NrOyAvKiBtdXN0IGJlIGJsb2NrIGVsZW1lbnRzIGZvciB3aWR0aC9oZWlnaHQgY2FsY3VsYXRpb25zIHRvIHdvcmsgaW4gRmlyZWZveC4gKi8KICBwb2ludGVyLWV2ZW50czogdmlzaWJsZUZpbGw7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIC8qKgogICAqIFByZSAzLjAsIHVzZXJzIGNvdWxkIHNldCB0aGUgZGltZW5zaW9uIG9mIHRoZSByb290IGVsZW1lbnQgaW4gdHdvIHdheXM6IGVpdGhlciB1c2luZyBDU1MKICAgKiAoaW5saW5lIG9yIHRocm91Z2ggYSBzdHlsZXNoZWV0KSwgb3IgdXNpbmcgdGhlIFNWRyB3aWR0aC9oZWlnaHQgYXR0cmlidXRlcy4gQnkgZGVmYXVsdCwgd2UKICAgKiBzZXQgdGhlIFNWRyB3aWR0aC9oZWlnaHQgYXR0cmlidXRlcyB0byAxMDAlLgogICAqCiAgICogUG9zdCAzLjAgdGhlIHJvb3QgZWxlbWVudCBpcyBhbHdheXMgYSBub3JtYWwgZGl2IGFuZCB0aGUgb25seSB3YXkgdG8gc2V0IHRoZSBkaW1lbnNpb25zIGlzCiAgICogdG8gdXNlIENTUy4gVG8gcmVwbGljYXRlIHRoZSAiMTAwJS1ieS1kZWZhdWx0IiBiZWhhdmlvciwgd2UgYXBwbHkgd2lkdGgvaGVpZ2h0IDEwMCUuCiAgICovCiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwp9CgovKioKICogVGhlIF9lbGVtZW50IHRoYXQgcm9vdHMgZWFjaCBDb21wb25lbnQncyBET00uCiAqLwoucGxvdHRhYmxlIC5jb21wb25lbnQgewogIC8qIEFsbG93IGNvbXBvbmVudHMgdG8gYmUgcG9zaXRpb25lZCB3aXRoIGV4cGxpY2l0IGxlZnQvdG9wL3dpZHRoL2hlaWdodCBzdHlsZXMgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7Cn0KCi5wbG90dGFibGUgLmJhY2tncm91bmQtY29udGFpbmVyLAoucGxvdHRhYmxlIC5jb250ZW50LAoucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKLyoqCiAqIERvbid0IGFsbG93IHN2ZyBlbGVtZW50cyBhYm92ZSB0aGUgY29udGVudCB0byBzdGVhbCBldmVudHMKICovCi5wbG90dGFibGUgLmZvcmVncm91bmQtY29udGFpbmVyIHsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLnBsb3R0YWJsZSAuY29tcG9uZW50LW92ZXJmbG93LWhpZGRlbiB7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnBsb3R0YWJsZSAuY29tcG9uZW50LW92ZXJmbG93LXZpc2libGUgewogIG92ZXJmbG93OiB2aXNpYmxlOwp9CgoucGxvdHRhYmxlIC5wbG90LWNhbnZhcy1jb250YWluZXIgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgoucGxvdHRhYmxlIC5wbG90LWNhbnZhcyB7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwogIC8qKgogICAqIFBsYXkgd2VsbCB3aXRoIGRlZmVycmVkIHJlbmRlcmluZy4KICAgKi8KICB0cmFuc2Zvcm0tb3JpZ2luOiAwcHggMHB4IDBweDsKfQoKLnBsb3R0YWJsZSB0ZXh0IHsKICB0ZXh0LXJlbmRlcmluZzogZ2VvbWV0cmljUHJlY2lzaW9uOwp9CgoucGxvdHRhYmxlIC5sYWJlbCB0ZXh0IHsKICBmaWxsOiAjMzIzMTNGOwp9CgoucGxvdHRhYmxlIC5iYXItbGFiZWwtdGV4dC1hcmVhIHRleHQsCi5wbG90dGFibGUgLnNjYXR0ZXItbGFiZWwtdGV4dC1hcmVhIHRleHQgewogIGZvbnQtc2l6ZTogMTJweDsKfQoKLnBsb3R0YWJsZSAubGFiZWwtYXJlYSB0ZXh0IHsKICBmaWxsOiAjMzIzMTNGOwogIGZvbnQtc2l6ZTogMTRweDsKfQoKLnBsb3R0YWJsZSAubGlnaHQtbGFiZWwgdGV4dCB7CiAgZmlsbDogd2hpdGU7Cn0KCi5wbG90dGFibGUgLmRhcmstbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAub2ZmLWJhci1sYWJlbCB0ZXh0IHsKICBmaWxsOiAjMzIzMTNGOwp9CgoucGxvdHRhYmxlIC5zdGFja2VkLWJhci1sYWJlbCB0ZXh0IHsKICBmaWxsOiAjMzIzMTNGOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuc3RhY2tlZC1iYXItcGxvdCAub2ZmLWJhci1sYWJlbCB7CiAgLyogSEFDS0hBQ0sgIzI3OTU6IGNvcnJlY3Qgb2ZmLWJhciBsYWJlbCBsb2dpYyB0byBiZSBpbXBsZW1lbnRlZCBvbiBTdGFja2VkQmFyICovCiAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7Cn0KCi5wbG90dGFibGUgLmF4aXMtbGFiZWwgdGV4dCB7CiAgZm9udC1zaXplOiAxMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGxldHRlci1zcGFjaW5nOiAxcHg7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgoucGxvdHRhYmxlIC50aXRsZS1sYWJlbCB0ZXh0IHsKICBmb250LXNpemU6IDIwcHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5wbG90dGFibGUgLmF4aXMgbGluZS5iYXNlbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIGxpbmUudGljay1tYXJrIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IDIwMDsKICBsaW5lLWhlaWdodDogbm9ybWFsOwp9CgoucGxvdHRhYmxlIC5heGlzIC5hbm5vdGF0aW9uLWNpcmNsZSB7CiAgZmlsbDogd2hpdGU7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgc3Ryb2tlOiAjQ0NDOwp9CgoucGxvdHRhYmxlIC5heGlzIC5hbm5vdGF0aW9uLWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1yZWN0IHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgZmlsbDogd2hpdGU7Cn0KCi5wbG90dGFibGUgLmJhci1wbG90IC5iYXNlbGluZSB7CiAgc3Ryb2tlOiAjOTk5Owp9CgoucGxvdHRhYmxlIC5ncmlkbGluZXMgbGluZSB7CiAgc3Ryb2tlOiAjM0MzQzNDOyAvKiBoYWNraGFjazogZ3JpZGxpbmVzIHNob3VsZCBiZSBzb2xpZDsgc2VlICM4MjAgKi8KICBvcGFjaXR5OiAwLjI1OwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5zZWxlY3Rpb24tYm94LWxheWVyIC5zZWxlY3Rpb24tYXJlYSB7CiAgZmlsbDogYmxhY2s7CiAgZmlsbC1vcGFjaXR5OiAwLjAzOwogIHN0cm9rZTogI0NDQzsKfQovKiBEcmFnQm94TGF5ZXIgKi8KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUgLmRyYWctZWRnZS1sciB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueS1yZXNpemFibGUgLmRyYWctZWRnZS10YiB7CiAgY3Vyc29yOiBucy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci10bCB7CiAgY3Vyc29yOiBud3NlLXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItdHIgewogIGN1cnNvcjogbmVzdy1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLWJsIHsKICBjdXJzb3I6IG5lc3ctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci1iciB7CiAgY3Vyc29yOiBud3NlLXJlc2l6ZTsKfQoKLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIubW92YWJsZSAuc2VsZWN0aW9uLWFyZWEgewogIGN1cnNvcjogbW92ZTsgLyogSUUgZmFsbGJhY2sgKi8KICBjdXJzb3I6IC1tb3otZ3JhYjsKICBjdXJzb3I6IC13ZWJraXQtZ3JhYjsKICBjdXJzb3I6IGdyYWI7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLm1vdmFibGUgLnNlbGVjdGlvbi1hcmVhOmFjdGl2ZSB7CiAgY3Vyc29yOiAtbW96LWdyYWJiaW5nOwogIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKICBjdXJzb3I6IGdyYWJiaW5nOwp9Ci8qIC9EcmFnQm94TGF5ZXIgKi8KCi5wbG90dGFibGUgLmd1aWRlLWxpbmUtbGF5ZXIgbGluZS5ndWlkZS1saW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmRyYWctbGluZS1sYXllci5lbmFibGVkLnZlcnRpY2FsIGxpbmUuZHJhZy1lZGdlIHsKICBjdXJzb3I6IGV3LXJlc2l6ZTsKfQoKLnBsb3R0YWJsZSAuZHJhZy1saW5lLWxheWVyLmVuYWJsZWQuaG9yaXpvbnRhbCBsaW5lLmRyYWctZWRnZSB7CiAgY3Vyc29yOiBucy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmxlZ2VuZCB0ZXh0IHsKICBmaWxsOiAjMzIzMTNGOwogIGZvbnQtc2l6ZTogMTJweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsaW5lLWhlaWdodDogbm9ybWFsOwp9CgoucGxvdHRhYmxlIC5pbnRlcnBvbGF0ZWQtY29sb3ItbGVnZW5kIHJlY3Quc3dhdGNoLWJvdW5kaW5nLWJveCB7CiAgZmlsbDogbm9uZTsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wbG90dGFibGUgLndhdGVyZmFsbC1wbG90IGxpbmUuY29ubmVjdG9yIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLnBpZS1wbG90IC5hcmMub3V0bGluZSB7CiAgc3Ryb2tlLWxpbmVqb2luOiByb3VuZDsKfQoKYH0pO3ZhciBpMDsoZnVuY3Rpb24oZSl7ZS5HUk9VUD0iRyIsZS5ESVY9IkRJViIsZS5TVkc9IlNWRyIsZS5URVhUPSJURVhUIn0pKGkwfHwoaTA9e30pKTt2YXIgcnN0PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudW5pcXVlSWQ9MCx0aGlzLnJvb3Q9dH1leHBvcnRBc1N0cmluZygpe2xldCB0PXRoaXMuY29udmVydCh0aGlzLnJvb3QpO2lmKCF0KXJldHVybiIiO2xldCByPXRoaXMuY3JlYXRlUm9vdFN2ZygpO3JldHVybiByLmFwcGVuZENoaWxkKHQpLHIub3V0ZXJIVE1MfWNyZWF0ZVVuaXF1ZUlkKHQpe3JldHVybmAke3R9XyR7dGhpcy51bmlxdWVJZCsrfWB9Z2V0U2l6ZSgpe3JldHVybiB0aGlzLnJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y3JlYXRlUm9vdFN2Zygpe2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN2ZyIpLHI9dGhpcy5nZXRTaXplKCk7cmV0dXJuIHQuc2V0QXR0cmlidXRlTlMoInN2ZyIsInZpZXdCb3giLGAwIDAgJHtyLndpZHRofSAke3IuaGVpZ2h0fWApLHQuc2V0QXR0cmlidXRlKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiksdH1jcmVhdGVDb252ZXJ0ZWROb2RlKHQpe2xldCByPXQubm9kZU5hbWUudG9VcHBlckNhc2UoKTtpZih0Lm5vZGVUeXBlPT1Ob2RlLkVMRU1FTlRfTk9ERSYmKHI9PWkwLkRJVnx8cj09aTAuU1ZHKSl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpMC5HUk9VUCksaT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KSxvPXBhcnNlSW50KGkubGVmdCwxMCksYT1wYXJzZUludChpLnRvcCwxMCk7aWYob3x8YSl7bGV0IHM9dGhpcy5jcmVhdGVVbmlxdWVJZCgiY2xpcCIpO24uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtvfSwgJHthfSlgKSxuLnNldEF0dHJpYnV0ZSgiY2xpcC1wYXRoIixgdXJsKCMke3N9KWApO2xldCBsPXBhcnNlSW50KGkud2lkdGgsMTApLGM9cGFyc2VJbnQoaS5oZWlnaHQsMTApLHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicmVjdCIpO3Uuc2V0QXR0cmlidXRlKCJ3aWR0aCIsU3RyaW5nKGwpKSx1LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixTdHJpbmcoYykpO2xldCBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygic3ZnIiwiY2xpcFBhdGgiKTtoLmlkPXMsaC5hcHBlbmRDaGlsZCh1KSxuLmFwcGVuZENoaWxkKGgpfXJldHVybiBufWVsc2UgcmV0dXJuIHQuY2xvbmVOb2RlKCl9Y29udmVydCh0KXtsZXQgcj10aGlzLmNyZWF0ZUNvbnZlcnRlZE5vZGUodCk7cmV0dXJuIEFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5tYXAoaT0+dGhpcy5jb252ZXJ0KGkpKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChpPT57ci5hcHBlbmRDaGlsZChpKX0pLHIubm9kZU5hbWUudG9VcHBlckNhc2UoKT09aTAuR1JPVVAmJiFyLmhhc0NoaWxkTm9kZXMoKXx8dGhpcy5zaG91bGRPbWl0Tm9kZSh0KT9udWxsOnRoaXMuc3RyaXBDbGFzcyh0aGlzLnRyYW5zZmVyU3R5bGUodCxyKSl9c3RyaXBDbGFzcyh0KXtyZXR1cm4gdC5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJnQucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLHR9dHJhbnNmZXJTdHlsZSh0LHIpe2lmKHIubm9kZVR5cGUhPU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiByO2xldCBuPXIsaT1yLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCksbz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTtyZXR1cm4gaT09aTAuVEVYVCYmT2JqZWN0LmFzc2lnbihuLnN0eWxlLHtmb250RmFtaWx5Om8uZm9udEZhbWlseSxmb250U2l6ZTpvLmZvbnRTaXplLGZvbnRXZWlnaHQ6by5mb250V2VpZ2h0fSksaSE9aTAuR1JPVVAmJihuLnNldEF0dHJpYnV0ZSgiZmlsbCIsby5maWxsKSxuLnNldEF0dHJpYnV0ZSgic3Ryb2tlIixvLnN0cm9rZSksbi5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsby5zdHJva2VXaWR0aCkpLG8ub3BhY2l0eSE9IjEiJiZuLnNldEF0dHJpYnV0ZSgib3BhY2l0eSIsby5vcGFjaXR5KSxyfXNob3VsZE9taXROb2RlKHQpe3JldHVybiExfX0sSUI9Y2xhc3MgZXh0ZW5kcyByc3R7c2hvdWxkT21pdE5vZGUodCl7cmV0dXJuIHQubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFP3QuY2xhc3NMaXN0LmNvbnRhaW5zKCJzY2F0dGVyLXBsb3QiKTohMX19O19zKHttb2R1bGVOYW1lOiJ2ei1wYW4tem9vbS1zdHlsZSIsc3R5bGVDb250ZW50OmAKICAgIC5oZWxwIHsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxczsKICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAxczsKICAgICAgYW5pbWF0aW9uLW5hbWU6IGZhZGUtb3V0OwogICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAzMCwgMzAsIDAuNik7CiAgICAgIGJvdHRvbTogMDsKICAgICAgY29sb3I6ICNmZmY7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBsZWZ0OiAwOwogICAgICBvcGFjaXR5OiAxOwogICAgICBwYWRkaW5nOiAyMHB4OwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICByaWdodDogMDsKICAgICAgdG9wOiAwOwogICAgfQoKICAgIC5oZWxwID4gc3BhbiB7CiAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICB9CgogICAgQGtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgIDAlIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAxMDAlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CiAgICB9CiAgYH0pO3ZhciBMcWU9V3UoZTApLFVLdD1lPT5pc05hTihlKT8iTmFOIjpMcWUoZSksb3N0PVt7dGl0bGU6Ik5hbWUiLGV2YWx1YXRlOmU9PmUuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWV9LHt0aXRsZToiU21vb3RoZWQiLGV2YWx1YXRlKGUsdCl7bGV0e3Ntb290aGluZ0VuYWJsZWQ6cn09dDtyZXR1cm4gVUt0KHI/ZS5kYXR1bS5zbW9vdGhlZDplLmRhdHVtLnNjYWxhcil9fSx7dGl0bGU6IlZhbHVlIixldmFsdWF0ZTplPT5VS3QoZS5kYXR1bS5zY2FsYXIpfSx7dGl0bGU6IlN0ZXAiLGV2YWx1YXRlOmU9Png0KGUuZGF0dW0uc3RlcCl9LHt0aXRsZToiVGltZSIsZXZhbHVhdGU6ZT0+X0IoZS5kYXR1bS53YWxsX3RpbWUpfSx7dGl0bGU6IlJlbGF0aXZlIixldmFsdWF0ZTplPT55QihyMChlLmRhdHVtLC0xLGUuZGF0YXNldCkpfV0sWnI9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT1uZXcgaXN0LlNjYWxlcy5Db2xvcigpLnJhbmdlKGpiLnNsaWNlKDApKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITEsdGhpcy5zbW9vdGhpbmdXZWlnaHQ9LjYsdGhpcy54VHlwZT1udWxsLHRoaXMueENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZD1udWxsLHRoaXMueVZhbHVlQWNjZXNzb3I9dD0+dC5zY2FsYXIsdGhpcy50b29sdGlwQ29sdW1ucz1vc3QsdGhpcy55U2NhbGVUeXBlPUZmLkxJTkVBUix0aGlzLmlnbm9yZVlPdXRsaWVycz0hMSx0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPSJkZWZhdWx0Iix0aGlzLnRvb2x0aXBQb3NpdGlvbj1HMS5CT1RUT00sdGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlPVtdLHRoaXMuX3Nlcmllc0RhdGFDYWNoZT17fSx0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlPXt9LHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQuY2hhcnRkaXYsITApfWF0dGFjaGVkKCl7bGV0IHQ9e2NhcHR1cmU6ITAscGFzc2l2ZTohMH07dGhpcy5fbGlzdGVuKHRoaXMsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24uYmluZCh0aGlzKSx0KSx0aGlzLl9saXN0ZW4odGhpcywibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHdpbmRvdywia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHdpbmRvdywia2V5dXAiLHRoaXMuX29uS2V5VXAuYmluZCh0aGlzKSx0KX1kZXRhY2hlZCgpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCE9PW51bGwmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGwpLHRoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuZGVzdHJveSgpLHRoaXMuX2NoYXJ0PXZvaWQgMCksdGhpcy5fbGlzdGVuZXJzJiYodGhpcy5fbGlzdGVuZXJzLmZvckVhY2goKHtub2RlOnQsZXZlbnROYW1lOnIsZnVuYzpuLG9wdGlvbjppfSk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIocixuLGkpfSksdGhpcy5fbGlzdGVuZXJzLmNsZWFyKCkpfV9saXN0ZW4odCxyLG4saT17fSl7dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQpLHRoaXMuX2xpc3RlbmVycy5hZGQoe25vZGU6dCxldmVudE5hbWU6cixmdW5jOm4sb3B0aW9uOml9KSx0LmFkZEV2ZW50TGlzdGVuZXIocixuLGkpfV9vbktleURvd24odCl7dGhpcy50b2dnbGVDbGFzcygicGFua2V5Iix6Zi5pc1BhbktleSh0KSl9X29uS2V5VXAodCl7dGhpcy50b2dnbGVDbGFzcygicGFua2V5Iix6Zi5pc1BhbktleSh0KSl9X29uTW91c2VEb3duKHQpe3RoaXMudG9nZ2xlQ2xhc3MoIm1vdXNlZG93biIsITApfV9vbk1vdXNlVXAodCl7dGhpcy50b2dnbGVDbGFzcygibW91c2Vkb3duIiwhMSl9aXNEYXRhRml0VG9Eb21haW4oKXtyZXR1cm4gdGhpcy5fY2hhcnQ/dGhpcy5fY2hhcnQuaXNEYXRhRml0VG9Eb21haW4oKTohMH1zZXRWaXNpYmxlU2VyaWVzKHQpe3FLdC5pc0VxdWFsKHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZSx0KXx8KHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT10KX1zZXRTZXJpZXNEYXRhKHQscil7dGhpcy5fc2VyaWVzRGF0YUNhY2hlW3RdPXIsdGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCxyKX1zZXRTZXJpZXNNZXRhZGF0YSh0LHIpe3RoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbdF09cix0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuc2V0U2VyaWVzTWV0YWRhdGEodCxyKX1jb21taXRDaGFuZ2VzKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5jb21taXRDaGFuZ2VzKCl9cmVzZXREb21haW4oKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQucmVzZXREb21haW4oKX1yZWRyYXcoKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCE9PW51bGwmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGwpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD10aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGw7bGV0IHQ9dGhpcy54Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kO2lmKCF0aGlzLnhUeXBlJiYhdD90PSRhdDp0aGlzLnhUeXBlJiYodD0oKT0+dkIodGhpcy54VHlwZSkpLCEoIXR8fCF0aGlzLnlWYWx1ZUFjY2Vzc29yfHwhdGhpcy50b29sdGlwQ29sdW1ucykpe3ZhciByPW5ldyBEUyh0LHRoaXMueVZhbHVlQWNjZXNzb3IsdGhpcy55U2NhbGVUeXBlLHRoaXMuY29sb3JTY2FsZSx0aGlzLiQudG9vbHRpcCx0aGlzLnRvb2x0aXBDb2x1bW5zLHRoaXMuZmlsbEFyZWEsdGhpcy5kZWZhdWx0WFJhbmdlLHRoaXMuZGVmYXVsdFlSYW5nZSx0aGlzLnN5bWJvbEZ1bmN0aW9uLHRoaXMueEF4aXNGb3JtYXR0ZXIpLG49SHQodGhpcy4kLmNoYXJ0ZGl2KTtyLnJlbmRlclRvKG4pLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCksdGhpcy5fY2hhcnQ9cix0aGlzLl9jaGFydC5vbkFuY2hvcigoKT0+dGhpcy5maXJlKCJjaGFydC1hdHRhY2hlZCIpKX19LDM1MCl9X3JlbG9hZEZyb21DYWNoZSgpeyF0aGlzLl9jaGFydHx8KHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKHQ9Pnt0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQsdGhpcy5fc2VyaWVzRGF0YUNhY2hlW3RdfHxbXSl9KSx0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZmlsdGVyKHQ9PnRoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbdF0pLmZvckVhY2godD0+e3RoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKHQsdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZVt0XSl9KSx0aGlzLl9jaGFydC5zZXRWaXNpYmxlU2VyaWVzKHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZSksdGhpcy5fY2hhcnQuY29tbWl0Q2hhbmdlcygpKX1fc21vb3RoaW5nQ2hhbmdlZCgpeyF0aGlzLl9jaGFydHx8KHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLl9jaGFydC5zbW9vdGhpbmdVcGRhdGUodGhpcy5zbW9vdGhpbmdXZWlnaHQpOnRoaXMuX2NoYXJ0LnNtb290aGluZ0Rpc2FibGUoKSl9X291dGxpZXJzQ2hhbmdlZCgpeyF0aGlzLl9jaGFydHx8dGhpcy5fY2hhcnQuaWdub3JlWU91dGxpZXJzKHRoaXMuaWdub3JlWU91dGxpZXJzKX1fY29sb3JTY2FsZUNoYW5nZWQoKXshdGhpcy5fY2hhcnR8fCh0aGlzLl9jaGFydC5zZXRDb2xvclNjYWxlKHRoaXMuY29sb3JTY2FsZSksdGhpcy5fY2hhcnQucmVkcmF3KCkpfV90b29sdGlwQ29sdW1uc0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fHRoaXMuX2NoYXJ0LnNldFRvb2x0aXBDb2x1bW5zKHRoaXMudG9vbHRpcENvbHVtbnMpfV90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQoKXshdGhpcy5fY2hhcnR8fHRoaXMuX2NoYXJ0LnNldFRvb2x0aXBTb3J0aW5nTWV0aG9kKHRoaXMudG9vbHRpcFNvcnRpbmdNZXRob2QpfWdldEV4cG9ydGVyKCl7cmV0dXJuIG5ldyBJQih0aGlzLiQuY2hhcnRkaXYpfX07WnIudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9ImNoYXJ0ZGl2Ij48L2Rpdj4KICAgIDx2ei1jaGFydC10b29sdGlwCiAgICAgIGlkPSJ0b29sdGlwIgogICAgICBwb3NpdGlvbj0iW1t0b29sdGlwUG9zaXRpb25dXSIKICAgICAgY29udGVudC1jb21wb25lbnQtbmFtZT0idnotbGluZS1jaGFydC10b29sdGlwIgogICAgPjwvdnotY2hhcnQtdG9vbHRpcD4KICAgIDxzdHlsZSBpbmNsdWRlPSJwbG90dGFibGUtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0idnotcGFuLXpvb20tc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICAgIGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IC5tYWluIHsKICAgICAgICBjb250YWluOiBzdHJpY3Q7CiAgICAgICAgY3Vyc29yOiBjcm9zc2hhaXI7CiAgICAgIH0KCiAgICAgIDpob3N0KC5wYW5rZXkpICNjaGFydGRpdiA6bm90KC5kcmFnLXpvb21pbmcpIC5tYWluIHsKICAgICAgICBjdXJzb3I6IC13ZWJraXQtZ3JhYjsKICAgICAgICBjdXJzb3I6IGdyYWI7CiAgICAgIH0KCiAgICAgIDpob3N0KC5tb3VzZWRvd24pICNjaGFydGRpdiAucGFubmluZyAubWFpbiB7CiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWJiaW5nOwogICAgICAgIGN1cnNvcjogZ3JhYmJpbmc7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICB9CgogICAgICAjY2hhcnRkaXYgbGluZS5ndWlkZS1saW5lIHsKICAgICAgICBzdHJva2U6ICM5OTk7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKICAgICAgfQogICAgICAjY2hhcnRkaXY6aG92ZXIgLm1haW4gewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgIC5naG9zdCB7CiAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAucGxvdHRhYmxlIC5heGlzIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUgewogICAgICAgIHN0cm9rZTogdmFyKC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsaXN0LlNjYWxlcy5Db2xvcildLFpyLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpyLnByb3RvdHlwZSwic3ltYm9sRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sWnIucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFpyLnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJ4Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sWnIucHJvdG90eXBlLCJ4QXhpc0Zvcm1hdHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpyLnByb3RvdHlwZSwieVZhbHVlQWNjZXNzb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwidG9vbHRpcENvbHVtbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJmaWxsQXJlYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWnIucHJvdG90eXBlLCJkZWZhdWx0WFJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaci5wcm90b3R5cGUsImRlZmF1bHRZUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWnIucHJvdG90eXBlLCJ5U2NhbGVUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sWnIucHJvdG90eXBlLCJpZ25vcmVZT3V0bGllcnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWnIucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxaci5wcm90b3R5cGUsInRvb2x0aXBQb3NpdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWnIucHJvdG90eXBlLCJfdmlzaWJsZVNlcmllc0NhY2hlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9zZXJpZXNNZXRhZGF0YUNhY2hlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwiX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCIsdm9pZCAwKTtFKFtCdCgieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsInhUeXBlIiwieVZhbHVlQWNjZXNzb3IiLCJ5U2NhbGVUeXBlIiwiaXNBdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWnIucHJvdG90eXBlLCJfbWFrZUNoYXJ0IixudWxsKTtFKFtCdCgiX2NoYXJ0IiwiX3Zpc2libGVTZXJpZXNDYWNoZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWnIucHJvdG90eXBlLCJfcmVsb2FkRnJvbUNhY2hlIixudWxsKTtFKFtCdCgic21vb3RoaW5nRW5hYmxlZCIsInNtb290aGluZ1dlaWdodCIsIl9jaGFydCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWnIucHJvdG90eXBlLCJfc21vb3RoaW5nQ2hhbmdlZCIsbnVsbCk7RShbQnQoImlnbm9yZVlPdXRsaWVycyIsIl9jaGFydCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWnIucHJvdG90eXBlLCJfb3V0bGllcnNDaGFuZ2VkIixudWxsKTtFKFtCdCgiY29sb3JTY2FsZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWnIucHJvdG90eXBlLCJfY29sb3JTY2FsZUNoYW5nZWQiLG51bGwpO0UoW0J0KCJ0b29sdGlwQ29sdW1ucyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWnIucHJvdG90eXBlLCJfdG9vbHRpcENvbHVtbnNDaGFuZ2VkIixudWxsKTtFKFtCdCgidG9vbHRpcFNvcnRpbmdNZXRob2QiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Rvb2x0aXBTb3J0aW5nTWV0aG9kQ2hhbmdlZCIsbnVsbCk7WnI9RShbeXQoInZ6LWxpbmUtY2hhcnQyIildLFpyKTt2YXIgbnN0PWNsYXNzIGV4dGVuZHMgbXR7fTtuc3QudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICA8dGFibGU+CiAgICAgICAgPHRoZWFkPjwvdGhlYWQ+CiAgICAgICAgPHRib2R5PjwvdGJvZHk+CiAgICAgIDwvdGFibGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICB0YWJsZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgfQoKICAgICAgdGhlYWQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgdGJvZHkgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjFweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZzogMCA1cHg7CiAgICAgIH0KCiAgICAgIC5zd2F0Y2ggewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgIH0KCiAgICAgIC5jbG9zZXN0IC5zd2F0Y2ggewogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCAjZmZmOwogICAgICB9CgogICAgICB0aCB7CiAgICAgICAgcGFkZGluZzogMCA1cHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgLmRpc3RhbnQgdGQ6bm90KC5zd2F0Y2gpIHsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KCiAgICAgIC5naG9zdCB7CiAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7bnN0PUUoW3l0KCJ2ei1saW5lLWNoYXJ0LXRvb2x0aXAiKV0sbnN0KTt2YXIgYXN0PVtdLGtxZT0wLFJxZT1HS3QudGhyb3R0bGUoZnVuY3Rpb24gZSgpe2lmKGFzdC5sZW5ndGg9PTApcmV0dXJuO2xldCB0PWFzdC5zaGlmdCgpO3QmJnQuYWN0aXZlJiYodC5yZWRyYXcoKSx0Ll9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMSksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGtxZSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX0sMTAwKSxWbj1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3JlZHJhd1JhZj1udWxsLHRoaXMuYWN0aXZlPSExLHRoaXMubG9nU2NhbGVBY3RpdmU9ITEsdGhpcy5jb2xvclNjYWxlPXtzY2FsZTpmbn0sdGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSEwLHRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlPSExfW9uTG9hZEZpbmlzaCgpe3RoaXMuY29tbWl0Q2hhbmdlcygpLHRoaXMuZGF0YVRvTG9hZC5sZW5ndGg+MCYmdGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkJiYodGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSExLHRoaXMuZ2V0Q2hhcnQoKS5yZXNldERvbWFpbigpKSx0aGlzLnJlZHJhdygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9yZWRyYXdSYWYhPT1udWxsJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpfWV4cG9ydEFzU3ZnU3RyaW5nKCl7cmV0dXJuIHRoaXMuZ2V0Q2hhcnQoKS5nZXRFeHBvcnRlcigpLmV4cG9ydEFzU3RyaW5nKCl9Z2V0Q2hhcnQoKXtyZXR1cm4gdGhpcy4kLmNoYXJ0fXJlc2V0RG9tYWluKCl7dGhpcy5nZXRDaGFydCgpLnJlc2V0RG9tYWluKCl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuZ2V0Q2hhcnQoKS5zZXRTZXJpZXNEYXRhKHQscil9c2V0U2VyaWVzTWV0YWRhdGEodCxyKXt0aGlzLmdldENoYXJ0KCkuc2V0U2VyaWVzTWV0YWRhdGEodCxyKX1jb21taXRDaGFuZ2VzKCl7dGhpcy5nZXRDaGFydCgpLmNvbW1pdENoYW5nZXMoKX1yZWRyYXcoKXt0aGlzLl9yZWRyYXdSYWYhPT1udWxsJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHRoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5hY3RpdmU/dGhpcy5nZXRDaGFydCgpLnJlZHJhdygpOnRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlPSEwfSl9X2xvYWRLZXlDaGFuZ2VkKCl7dGhpcy5yZXNldCgpLHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMH1fZGF0YVNlcmllc0NoYW5nZWQoKXt0aGlzLmdldENoYXJ0KCkuc2V0VmlzaWJsZVNlcmllcyh0aGlzLmRhdGFTZXJpZXMpfV9sb2dTY2FsZUNoYW5nZWQodCl7bGV0IHI9dGhpcy5nZXRDaGFydCgpO3IueVNjYWxlVHlwZT10P0ZmLkxPRzpGZi5MSU5FQVIsdGhpcy5yZWRyYXcoKX1fZml4QmFkU3RhdGVXaGVuQWN0aXZlKCl7dGhpcy5hY3RpdmUmJnRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlJiYoYXN0LnB1c2godGhpcyksUnFlKCkpfV9vbkNoYXJ0QXR0YWNoZWQoKXt0aGlzLmFjdGl2ZXx8KHRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlPSEwKX19O1ZuLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjaGFydC1hbmQtc3Bpbm5lci1jb250YWluZXIiPgogICAgICA8dnotbGluZS1jaGFydDIKICAgICAgICBpZD0iY2hhcnQiCiAgICAgICAgZGF0YS1sb2FkaW5nJD0iW1tkYXRhTG9hZGluZ11dIgogICAgICAgIGRhdGEtbG9hZGVkLW9uY2UkPSJbW2RhdGFMb2FkZWRBdExlYXN0T25jZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW2NvbG9yU2NhbGVdXSIKICAgICAgICBkZWZhdWx0LXgtcmFuZ2U9IltbZGVmYXVsdFhSYW5nZV1dIgogICAgICAgIGRlZmF1bHQteS1yYW5nZT0iW1tkZWZhdWx0WVJhbmdlXV0iCiAgICAgICAgZmlsbC1hcmVhPSJbW2ZpbGxBcmVhXV0iCiAgICAgICAgaWdub3JlLXktb3V0bGllcnM9IltbaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgb24tY2hhcnQtYXR0YWNoZWQ9Il9vbkNoYXJ0QXR0YWNoZWQiCiAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgIHNtb290aGluZy13ZWlnaHQ9Iltbc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgc3ltYm9sLWZ1bmN0aW9uPSJbW3N5bWJvbEZ1bmN0aW9uXV0iCiAgICAgICAgdG9vbHRpcC1jb2x1bW5zPSJbW3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj0iW1t0b29sdGlwUG9zaXRpb25dXSIKICAgICAgICB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iCiAgICAgICAgeC1jb21wb25lbnRzLWNyZWF0aW9uLW1ldGhvZD0iW1t4Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kXV0iCiAgICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgICAgeS12YWx1ZS1hY2Nlc3Nvcj0iW1t5VmFsdWVBY2Nlc3Nvcl1dIgogICAgICA+PC92ei1saW5lLWNoYXJ0Mj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2RhdGFMb2FkaW5nXV0iPgogICAgICAgIDxkaXYgaWQ9ImxvYWRpbmctc3Bpbm5lci1jb250YWluZXIiPgogICAgICAgICAgPHBhcGVyLXNwaW5uZXItbGl0ZSBhY3RpdmU9IiI+PC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtfbWF5YmUtcmVuZGVyZWQtaW4tYmFkLXN0YXRlXSkgdnotbGluZS1jaGFydCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAjY2hhcnQtYW5kLXNwaW5uZXItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICB9CgogICAgICB2ei1saW5lLWNoYXJ0MiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICB2ei1saW5lLWNoYXJ0MltkYXRhLWxvYWRpbmddIHsKICAgICAgICBvcGFjaXR5OiAwLjM7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9maXhCYWRTdGF0ZVdoZW5BY3RpdmUifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxWbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sVm4ucHJvdG90eXBlLCJkYXRhU2VyaWVzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sVm4ucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9sb2dTY2FsZUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxWbi5wcm90b3R5cGUsImxvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZuLnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxWbi5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sVm4ucHJvdG90eXBlLCJ5VmFsdWVBY2Nlc3NvciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxWbi5wcm90b3R5cGUsImZpbGxBcmVhIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sVm4ucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFZuLnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxWbi5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZuLnByb3RvdHlwZSwidG9vbHRpcFNvcnRpbmdNZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVm4ucHJvdG90eXBlLCJ0b29sdGlwUG9zaXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxWbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sVm4ucHJvdG90eXBlLCJkZWZhdWx0WFJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxWbi5wcm90b3R5cGUsImRlZmF1bHRZUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxWbi5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZuLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFZuLnByb3RvdHlwZSwiX3Jlc2V0RG9tYWluT25OZXh0TG9hZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxWbi5wcm90b3R5cGUsIl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZSIsdm9pZCAwKTtFKFtCdCgibG9hZEtleSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sVm4ucHJvdG90eXBlLCJfbG9hZEtleUNoYW5nZWQiLG51bGwpO0UoW0J0KCJkYXRhU2VyaWVzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFZuLnByb3RvdHlwZSwiX2RhdGFTZXJpZXNDaGFuZ2VkIixudWxsKTtWbj1FKFt5dCgidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpXSxWbik7X3Moe21vZHVsZU5hbWU6InRmLWN1c3RvbS1zY2FsYXItY2FyZC1zdHlsZSIsc3R5bGVDb250ZW50OmAKICAgIDpob3N0IHsKICAgICAgbWFyZ2luOiA1cHggMTBweDsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB3aWR0aDogMzMwcHg7CiAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDsKICAgIH0KCiAgICA6aG9zdChbX2V4cGFuZGVkXSkgewogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICA6aG9zdChbX2V4cGFuZGVkXSkgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgaGVpZ2h0OiA0MDBweDsKICAgIH0KCiAgICBoMSB7CiAgICAgIGZvbnQtc2l6ZTogMTlweDsKICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgIH0KCiAgICAjdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIgewogICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAjYnV0dG9ucyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICB9CgogICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgd2lkdGg6IDMycHg7CiAgICAgIGhlaWdodDogMzJweDsKICAgICAgcGFkZGluZzogNHB4OwogICAgfQoKICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICB9CgogICAgLmRvd25sb2FkLWxpbmtzIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgaGVpZ2h0OiAzMnB4OwogICAgfQoKICAgIC5kb3dubG9hZC1saW5rcyBhIHsKICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIG1hcmdpbjogMnB4OwogICAgfQoKICAgIC5kb3dubG9hZC1saW5rcyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgd2lkdGg6IDEwMHB4OwogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgfQogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgfQogICAgfQogIGB9KTt2YXIgT1M9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSxvKXt0aGlzLnJ1bj10LHRoaXMudGFnPXIsdGhpcy5uYW1lPW4sdGhpcy5zY2FsYXJEYXRhPWksdGhpcy5zeW1ib2w9b31nZXROYW1lKCl7cmV0dXJuIHRoaXMubmFtZX1zZXREYXRhKHQpe3RoaXMuc2NhbGFyRGF0YT10fWdldERhdGEoKXtyZXR1cm4gdGhpcy5zY2FsYXJEYXRhfWdldFJ1bigpe3JldHVybiB0aGlzLnJ1bn1nZXRUYWcoKXtyZXR1cm4gdGhpcy50YWd9Z2V0U3ltYm9sKCl7cmV0dXJuIHRoaXMuc3ltYm9sfX07ZnVuY3Rpb24gTEIoZSx0KXtyZXR1cm5gJHt0fSAoJHtlfSlgfXZhciBXMT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnJ1bkJhc2VkQ29sb3JTY2FsZT10fXNjYWxlKHQpe3JldHVybiB0aGlzLnJ1bkJhc2VkQ29sb3JTY2FsZS5zY2FsZSh0aGlzLnBhcnNlUnVuTmFtZSh0KSl9cGFyc2VSdW5OYW1lKHQpe2xldCByPXQubWF0Y2goL1woKC4qKVwpJC8pO3JldHVybiByP3JbMV06IiJ9fTt2YXIgSnI9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWN0aXZlPSEwLHRoaXMuX2NvbG9yU2NhbGU9bmV3IFcxKHtzY2FsZTpmbn0pLHRoaXMuX25hbWVUb0RhdGFTZXJpZXM9e30sdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fcmVxdWVzdERhdGE9KHQscixuKT0+e2xldCBvPXZlKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL3NjYWxhcnMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9YSxsPXRoaXMuX3RhZ0ZpbHRlcixjPUNuKG8se3RhZzpsLHJ1bjpzfSk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChjKS50aGVuKHU9PnZvaWQgcih7aXRlbTphLGRhdGE6dX0pKX0pKS5maW5hbGx5KCgpPT52b2lkIG4oKSl9LHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4PXt9LHRoaXMuX21hdGNoZXNMaXN0T3BlbmVkPSExLHRoaXMuX2ZpbGxBcmVhPXtsb3dlckFjY2Vzc29yOnQ9PnQubG93ZXIsaGlnaGVyQWNjZXNzb3I6dD0+dC51cHBlcn0sdGhpcy5fdG9vbHRpcENvbHVtbnM9KCgpPT57bGV0IHQ9V3UoZTApLHI9bj0+aXNOYU4obik/Ik5hTiI6dChuKTtyZXR1cm5be3RpdGxlOiJOYW1lIixldmFsdWF0ZTpuPT5uLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlZhbHVlIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJMb3dlciBNYXJnaW4iLGV2YWx1YXRlOm49PnIobi5kYXR1bS5sb3dlcil9LHt0aXRsZToiVXBwZXIgTWFyZ2luIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0udXBwZXIpfSx7dGl0bGU6IlN0ZXAiLGV2YWx1YXRlOm49Png0KG4uZGF0dW0uc3RlcCl9LHt0aXRsZToiVGltZSIsZXZhbHVhdGU6bj0+X0Iobi5kYXR1bS53YWxsX3RpbWUpfSx7dGl0bGU6IlJlbGF0aXZlIixldmFsdWF0ZTpuPT55QihyMChuLmRhdHVtLC0xLG4uZGF0YXNldCkpfV19KSgpLHRoaXMuX21pc3NpbmdUYWdzPVtdLHRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQ9ITF9cmVsb2FkKCl7dGhpcy4kLmxvYWRlci5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLiQubG9hZGVyLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLiQubG9hZGVyO3QmJnQucmVzZXREb21haW4oKX1fY3N2VXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIENuKG4se2Zvcm1hdDoiY3N2In0pfV9qc29uVXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIENuKG4se2Zvcm1hdDoianNvbiJ9KX1fZG93bmxvYWREYXRhVXJsKHQscil7bGV0IG49dFtyXSxpPXt0YWc6bi5nZXRUYWcoKSxydW46bi5nZXRSdW4oKX07cmV0dXJuIENuKHZlKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL2Rvd25sb2FkX2RhdGEiKSxpKX1fY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbih0KXtyZXR1cm4ocixuLGkpPT57aWYoIWkucmVnZXhfdmFsaWQpe3RoaXMuc2V0KCJfdGFnRmlsdGVySW52YWxpZCIsITApO3JldHVybn1sZXQgbz1Zby5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKSxhPVtdO1lvLmZvckVhY2godCxsPT57bGV0IGM9ITEsdT1pLnRhZ190b19ldmVudHNbbC52YWx1ZV0saD1pLnRhZ190b19ldmVudHNbbC5sb3dlcl0sZj1pLnRhZ190b19ldmVudHNbbC51cHBlcl07aWYoWW8uaXNVbmRlZmluZWQodSkmJihhLnB1c2gobC52YWx1ZSksYz0hMCksWW8uaXNVbmRlZmluZWQoaCkmJihhLnB1c2gobC5sb3dlciksYz0hMCksWW8uaXNVbmRlZmluZWQoZikmJihhLnB1c2gobC51cHBlciksYz0hMCksYylyZXR1cm47bGV0IHA9Yj0+YlsxXSxkPXRoaXMuX2ZpbmRTdGVwTWlzbWF0Y2gobCx1Lm1hcChwKSxoLm1hcChwKSxmLm1hcChwKSk7aWYoZCl7dGhpcy5zZXQoIl9zdGVwc01pc21hdGNoIixkKTtyZXR1cm59bGV0IGc9Yj0+YlsyXSxfPXUubWFwKChiLFMpPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShiWzBdKjFlMyksc3RlcDpwKGIpLHNjYWxhcjpnKGIpLGxvd2VyOmcoaFtTXSksdXBwZXI6ZyhmW1NdKX0pKSx5PUxCKG4sbC52YWx1ZSkseD1vW3ldO2lmKHgpeC5zZXREYXRhKF8pO2Vsc2V7bGV0IGI9dGhpcy5fY3JlYXRlTmV3RGF0YVNlcmllcyhuLGwudmFsdWUseSxfKTtvW3ldPWJ9fSksdGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIixvKTtsZXQgcz1Zby5maW5kSW5kZXgodGhpcy5fbWlzc2luZ1RhZ3MsbD0+bC5ydW49PT1uKTtpZihhLmxlbmd0aCYmYS5sZW5ndGghPTMpe2xldCBsPXtydW46bix0YWdzOmF9O3M+PTA/dGhpcy5zcGxpY2UoIl9taXNzaW5nVGFncyIscywxLGwpOnRoaXMucHVzaCgiX21pc3NpbmdUYWdzIixsKX1lbHNlIHM+PTAmJnRoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLHMsMSl9fV9maW5kU3RlcE1pc21hdGNoKHQscixuLGkpe3JldHVybiBZby5pc0VxdWFsKG4scikmJllvLmlzRXF1YWwoaSxyKT9udWxsOntzZXJpZXNPYmplY3Q6dCx2YWx1ZVN0ZXBzOnIsbG93ZXJTdGVwczpuLHVwcGVyU3RlcHM6aX19X2NyZWF0ZU5ld0RhdGFTZXJpZXModCxyLG4saSl7dGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF18PTA7bGV0IG89UlNbdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF1dLGE9bmV3IE9TKHQscixuLGksbykscz1SUy5sZW5ndGg7cmV0dXJuIHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3RdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XSsxKSVzLGF9X3VwZGF0ZUNoYXJ0KCl7dmFyIHQ9dGhpcy5fbmFtZVRvRGF0YVNlcmllcztZby5mb3JPd24odCxyPT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKHIuZ2V0TmFtZSgpLHIuZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfWdldCBfc2VyaWVzTmFtZXMoKXtsZXQgdD1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoW3Isbl0pPT50LmhhcyhuLnJ1bikpLm1hcCgoW3JdKT0+cil9X2RldGVybWluZUNvbG9yKHQscil7cmV0dXJuIHQuc2NhbGUocil9X3JlZnJlc2hEYXRhU2VyaWVzKCl7dmFyIHQ9dGhpcy5fdGFnRmlsdGVyO3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfV9jcmVhdGVTeW1ib2xGdW5jdGlvbigpe3JldHVybiB0PT50aGlzLl9uYW1lVG9EYXRhU2VyaWVzW3RdLmdldFN5bWJvbCgpLm1ldGhvZCgpfV9kZXRlcm1pbmVTeW1ib2wodCxyKXtyZXR1cm4gdFtyXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9Z2V0IF90YWdGaWx0ZXIoKXt2YXIgdD10aGlzLm1hcmdpbkNoYXJ0U2VyaWVzO3JldHVybiBZby5mbGF0dGVuKHQubWFwKGk9PltpLnZhbHVlLGkubG93ZXIsaS51cHBlcl0pKS5tYXAoaT0+IigiK3RoaXMuX2VzY2FwZVJlZ2V4Q2hhcmFjdGVycyhpKSsiKSIpLmpvaW4oInwiKX1fZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKHQpe3JldHVybiB0LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9X2dldFRvZ2dsZUNvbGxhcHNpYmxlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3RvZ2dsZU1hdGNoZXNPcGVuKCl7dGhpcy5zZXQoIl9tYXRjaGVzTGlzdE9wZW5lZCIsIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX1nZXQgX3RpdGxlRGlzcGxheVN0cmluZygpe3ZhciB0PXRoaXMudGl0bGU7cmV0dXJuIHR8fCJ1bnRpdGxlZCJ9X3NlcGFyYXRlV2l0aENvbW1hcyh0KXtyZXR1cm4gdC5qb2luKCIsICIpfV90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3Blbigpe3RoaXMuc2V0KCJfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCIsIXRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpfV9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCgpe3ZhciByO2xldCB0PXRoaXMuJCQoIiNtYXRjaC1saXN0LXJlcGVhdCIpOyF0fHwocj10aGlzLnJvb3QpPT1udWxsfHxyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaChuPT57bGV0IGk9dC5pdGVtRm9yRWxlbWVudChuKTtuLnN0eWxlLmNvbG9yPXRoaXMuX2RldGVybWluZUNvbG9yKHRoaXMuX2NvbG9yU2NhbGUsaSl9KX19O0pyLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgZmlsbC1hcmVhPSJbW19maWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihtYXJnaW5DaGFydFNlcmllcyldXSIKICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIKICAgICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIKICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgICBhcz0iZGF0YVNlcmllc05hbWUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgICAgICAgID5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IgogICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgID4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIgogICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPCEtLSBoZXJlIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19taXNzaW5nVGFncy5sZW5ndGhdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkKV1dIgogICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbiIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtY29sbGFwc2libGUtYnV0dG9uIgogICAgICAgID4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzaWJsZS10aXRsZS10ZXh0Ij4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPiBNaXNzaW5nIFRhZ3MKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19taXNzaW5nVGFnc11dIiBhcz0ibWlzc2luZ0VudHJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIj4KICAgICAgICAgICAgICBSdW4gIltbbWlzc2luZ0VudHJ5LnJ1bl1dIiBsYWNrcyBkYXRhIGZvciB0YWdzCiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICBpdGVtcz0iW1ttaXNzaW5nRW50cnkudGFnc11dIgogICAgICAgICAgICAgICAgICBhcz0idGFnIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8bGk+W1t0YWddXTwvbGk+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0ZpbHRlckludmFsaWRdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGlzIHJlZ3VsYXIgZXhwcmVzaW9uIGlzIGludmFsaWQ6PGJyIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQtcmVnZXgiPltbX3RhZ0ZpbHRlcl1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGVwc01pc21hdGNoXV0iPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgVGhlIHN0ZXBzIGZvciB2YWx1ZSwgbG93ZXIsIGFuZCB1cHBlciB0YWdzIGRvIG5vdCBtYXRjaDoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QudmFsdWVdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC52YWx1ZVN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0Lmxvd2VyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gubG93ZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC51cHBlcl1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnVwcGVyU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxkaXYgaWQ9Im1hdGNoZXMtY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2libGUtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pCiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgIGFzPSJzZXJpZXNOYW1lIgogICAgICAgICAgICAgIGlkPSJtYXRjaC1saXN0LXJlcGVhdCIKICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSJfbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuZXJyb3ItY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1pY29uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIG1hcmdpbjogMCBhdXRvIDVweCBhdXRvOwogICAgICB9CgogICAgICAuaW52YWxpZC1yZWdleCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5lcnJvci1jb250ZW50IHVsIHsKICAgICAgICBtYXJnaW46IDFweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxOXB4OwogICAgICB9CgogICAgICAudGFnLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzaWJsZS10aXRsZS10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5taXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSnIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSnIucHJvdG90eXBlLCJtYXJnaW5DaGFydFNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sSnIucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwic2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl90YWdGaWx0ZXJJbnZhbGlkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX25hbWVUb0RhdGFTZXJpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEpyLnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfbWF0Y2hlc0xpc3RPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxKci5wcm90b3R5cGUsIl9taXNzaW5nVGFncyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfc3RlcHNNaXNtYXRjaCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEpyLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxKci5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoIm1hcmdpbkNoYXJ0U2VyaWVzIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfdGFnRmlsdGVyIixudWxsKTtFKFtSdCgidGl0bGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxKci5wcm90b3R5cGUsIl90aXRsZURpc3BsYXlTdHJpbmciLG51bGwpO0pyPUUoW3l0KCJ0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkIildLEpyKTt2YXIgbzA9RWUoT2UoKSwxKTt2YXIga0I9e307S3Moa0Ise0Jhc2VTdG9yZTooKT0+YnAsQ2FuY2VsbGVyOigpPT5hbixFbnZpcm9ubWVudFN0b3JlOigpPT5IOSxFeHBlcmltZW50c1N0b3JlOigpPT5lUixIdHRwTWV0aG9kVHlwZTooKT0+QW0sSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I6KCk9PlZ4LExpc3RlbktleTooKT0+QjksUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yOigpPT5sOSxSZXF1ZXN0TWFuYWdlcjooKT0+QWUsUmVxdWVzdE5ldHdvcmtFcnJvcjooKT0+Y0UsUmVxdWVzdE9wdGlvbnM6KCk9PlV4LFJ1bnNTdG9yZTooKT0+VjksVFlQRVM6KCk9Pkx4ZSxhZGRQYXJhbXM6KCk9PkNuLGNyZWF0ZVJvdXRlcjooKT0+UGd0LGNyZWF0ZVNlYXJjaFBhcmFtOigpPT5lVyxlbnZpcm9ubWVudFN0b3JlOigpPT5pYixleHBlcmltZW50c1N0b3JlOigpPT5yUixmaWx0ZXJUYWdzOigpPT5SeGUsZ2V0Um91dGVyOigpPT52ZSxnZXRSdW5zTmFtZWQ6KCk9Pmt4ZSxnZXRUYWdzOigpPT4kaSxydW5zU3RvcmU6KCk9PndwLHNldFJvdXRlcjooKT0+SHhlfSk7dmFyIEVuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdGl2ZT0hMCx0aGlzLl9jb2xvclNjYWxlPW5ldyBXMSh7c2NhbGU6Zm59KSx0aGlzLl9uYW1lVG9EYXRhU2VyaWVzPXt9LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz12ZSgpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPWEsbD10aGlzLl90YWdGaWx0ZXIsYz1DbihvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleD17fSx0aGlzLl9tYXRjaGVzTGlzdE9wZW5lZD0hMX1yZWxvYWQoKXt0aGlzLiQubG9hZGVyLnJlbG9hZCgpfXJlZHJhdygpe3RoaXMuJC5sb2FkZXIucmVkcmF3KCl9X3RvZ2dsZUV4cGFuZGVkKHQpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCksdGhpcy5yZWRyYXcoKX1fdG9nZ2xlTG9nU2NhbGUoKXt0aGlzLnNldCgiX2xvZ1NjYWxlQWN0aXZlIiwhdGhpcy5fbG9nU2NhbGVBY3RpdmUpfV9yZXNldERvbWFpbigpe2xldCB0PXRoaXMuJC5sb2FkZXI7dCYmdC5yZXNldERvbWFpbigpfV9jc3ZVcmwodCxyKXtpZighcilyZXR1cm4iIjtsZXQgbj10aGlzLl9kb3dubG9hZERhdGFVcmwodCxyKTtyZXR1cm4gQ24obix7Zm9ybWF0OiJjc3YifSl9X2pzb25VcmwodCxyKXtpZighcilyZXR1cm4iIjtsZXQgbj10aGlzLl9kb3dubG9hZERhdGFVcmwodCxyKTtyZXR1cm4gQ24obix7Zm9ybWF0OiJqc29uIn0pfV9kb3dubG9hZERhdGFVcmwodCxyKXtsZXQgbj10W3JdLGk9e3RhZzpuLmdldFRhZygpLHJ1bjpuLmdldFJ1bigpfTtyZXR1cm4gQ24odmUoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvZG93bmxvYWRfZGF0YSIpLGkpfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e2lmKG4ucmVnZXhfdmFsaWQpe2xldCBpPW8wLmNsb25lKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpO28wLmZvck93bihuLnRhZ190b19ldmVudHMsKG8sYSk9PntsZXQgcz1vLm1hcCh1PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSh1WzBdKjFlMyksc3RlcDp1WzFdLHNjYWxhcjp1WzJdfSkpLGw9TEIocixhKSxjPWlbbF07aWYoYyljLnNldERhdGEocyk7ZWxzZXtvMC5pc1VuZGVmaW5lZCh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSkmJih0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXT0wKTtsZXQgdT1SU1t0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXV0saD1uZXcgT1MocixhLGwscyx1KTtpW2xdPWg7bGV0IGY9UlMubGVuZ3RoO3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3JdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSsxKSVmfX0pLHRoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIsaSl9fX1fdXBkYXRlQ2hhcnQoKXt2YXIgdD10aGlzLl9uYW1lVG9EYXRhU2VyaWVzO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtyLG5dKT0+e3RoaXMuJC5sb2FkZXIuc2V0U2VyaWVzRGF0YShyLG4uZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfV9jb21wdXRlU2VsZWN0ZWRSdW5zU2V0KHQpe2xldCByPXt9O3JldHVybiBvMC5mb3JFYWNoKHQsbj0+e3Jbbl09MX0pLHJ9Z2V0IF9zZXJpZXNOYW1lcygpe2xldCB0PW5ldyBTZXQodGhpcy5ydW5zKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fbmFtZVRvRGF0YVNlcmllcykuZmlsdGVyKChbcixuXSk9PnQuaGFzKG4ucnVuKSkubWFwKChbcl0pPT5yKX1fZGV0ZXJtaW5lQ29sb3IodCxyKXtyZXR1cm4gdC5zY2FsZShyKX1fcmVmcmVzaERhdGFTZXJpZXMoKXt2YXIgdD10aGlzLl90YWdGaWx0ZXI7dGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIix7fSl9X2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCl7cmV0dXJuIHQ9PnRoaXMuX25hbWVUb0RhdGFTZXJpZXNbdF0uZ2V0U3ltYm9sKCkubWV0aG9kKCl9X2RldGVybWluZVN5bWJvbCh0LHIpe3JldHVybiB0W3JdLmdldFN5bWJvbCgpLmNoYXJhY3Rlcn1nZXQgX3RhZ0ZpbHRlcigpe3ZhciB0PXRoaXMudGFnUmVnZXhlcztyZXR1cm4gdC5sZW5ndGg9PT0xP3RbMF06dC5tYXAocj0+IigiK3IrIikiKS5qb2luKCJ8Iil9X2dldFRvZ2dsZU1hdGNoZXNJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfWdldCBfdGl0bGVEaXNwbGF5U3RyaW5nKCl7dmFyIHQ9dGhpcy50aXRsZTtyZXR1cm4gdHx8InVudGl0bGVkIn1fbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQodCl7dmFyIG47bGV0IHI9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7IXJ8fChuPXRoaXMucm9vdCk9PW51bGx8fG4ucXVlcnlTZWxlY3RvckFsbCgiLm1hdGNoLWxpc3QtZW50cnkiKS5mb3JFYWNoKGk9PntsZXQgbz1yLml0ZW1Gb3JFbGVtZW50KGkpO2kuc3R5bGUuY29sb3I9dGhpcy5fZGV0ZXJtaW5lQ29sb3IodGhpcy5fY29sb3JTY2FsZSxvKX0pfX07RW4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgZGlzcGxheS1uYW1lPSJbW190aXRsZURpc3BsYXlTdHJpbmddXSI+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgaWQ9ImxvYWRlciIKICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIKICAgICAgICBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWtleT0iW1tfdGFnRmlsdGVyXV0iCiAgICAgICAgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKV1dIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgIGxhYmVsPSJzZXJpZXMgdG8gZG93bmxvYWQiCiAgICAgICAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZH19IgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgICAgYXM9ImRhdGFTZXJpZXNOYW1lIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICAgICAgICAgICAgICA+W1tkYXRhU2VyaWVzTmFtZV1dPC9wYXBlci1pdGVtCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPGEKICAgICAgICAgICAgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmNzdiIKICAgICAgICAgICAgaHJlZj0iW1tfY3N2VXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+Q1NWPC9hCiAgICAgICAgICA+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uanNvbiIKICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSIKICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgID4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0ibWF0Y2hlcy1jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJtYXRjaGVzLWxpc3QtdGl0bGUiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0iPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZU1hdGNoZXNJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoZXMtdGV4dCI+IE1hdGNoZXMgKFtbX3Nlcmllc05hbWVzLmxlbmd0aF1dKSA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21hdGNoZXNMaXN0T3BlbmVkXV0iPgogICAgICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgYXM9InNlcmllc05hbWUiCiAgICAgICAgICAgICAgaWQ9Im1hdGNoLWxpc3QtcmVwZWF0IgogICAgICAgICAgICAgIG9uLWRvbS1jaGFuZ2U9Il9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdGNoLWxpc3QtZW50cnkiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoLWVudHJ5LXN5bWJvbCI+CiAgICAgICAgICAgICAgICAgIFtbX2RldGVybWluZVN5bWJvbChfbmFtZVRvRGF0YVNlcmllcywgc2VyaWVzTmFtZSldXQogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgW1tzZXJpZXNOYW1lXV0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICNtYXRjaGVzLWxpc3QtdGl0bGUgewogICAgICAgIG1hcmdpbjogMTBweCAwIDVweCAwOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYXRjaGVzLXRleHQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRW4ucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVuLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxFbi5wcm90b3R5cGUsInRpdGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxFbi5wcm90b3R5cGUsInRhZ1JlZ2V4ZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEVuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsInNob3dEb3dubG9hZExpbmtzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRW4ucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEVuLnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVuLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRW4ucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixXMSldLEVuLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfbmFtZVRvRGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEVuLnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sRW4ucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9tYXRjaGVzTGlzdE9wZW5lZCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVuLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRW4ucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxFbi5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoInRhZ1JlZ2V4ZXMiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFbi5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLG51bGwpO0UoW1J0KCJ0aXRsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEVuLnByb3RvdHlwZSwiX3RpdGxlRGlzcGxheVN0cmluZyIsbnVsbCk7RW49RShbeXQoInRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIildLEVuKTt2YXIgam89Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlKDUwKSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9Z0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPSJzdGVwIix0aGlzLl9hY3RpdmU9ITAsdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj1fRSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7bGV0IHQ9dmUoKS5wbHVnaW5zTGlzdGluZygpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwhbi52YWx1ZS5jdXN0b21fc2NhbGFycyksIXRoaXMuX2RhdGFOb3RGb3VuZCYmdGhpcy5fcmV0cmlldmVMYXlvdXRBbmREYXRhKCkpfSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHIpfV9yZWxvYWRDaGFydHMoKXt2YXIgcjtsZXQgdD0ocj10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDpyLnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQsIHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIik7dD09bnVsbHx8dC5mb3JFYWNoKG49PntuLnJlbG9hZCgpfSl9X3JldHJpZXZlTGF5b3V0QW5kRGF0YSgpe2xldCB0PXZlKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL2xheW91dCIpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfbGF5b3V0IixuLnZhbHVlKSx0aGlzLl9kYXRhTm90Rm91bmR8fHRoaXMuX3JlbG9hZENoYXJ0cygpKX0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyKX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXt2YXIgdD10aGlzLl9zbW9vdGhpbmdXZWlnaHQ7cmV0dXJuIHQ+MH1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9sYXlvdXQ7aWYoIXQuY2F0ZWdvcnkpcmV0dXJuW107bGV0IHI9ITE7cmV0dXJuIHRoaXMuX29wZW5lZENhdGVnb3JpZXN8fChyPSEwLHRoaXMuX29wZW5lZENhdGVnb3JpZXM9e30pLHQuY2F0ZWdvcnkubWFwKGk9PihyJiYhaS5jbG9zZWQmJih0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2kudGl0bGVdPSEwKSx7bmFtZTppLnRpdGxlLGl0ZW1zOmkuY2hhcnQsbWV0YWRhdGE6e3R5cGU6TmEuUFJFRklYX0dST1VQLG9wZW5lZDohIXRoaXMuX29wZW5lZENhdGVnb3JpZXNbaS50aXRsZV19fSkpfV9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQodCl7bGV0IHI9dC50YXJnZXQ7ci5vcGVuZWQ/dGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1tyLmNhdGVnb3J5Lm5hbWVdPSEwOmRlbGV0ZSB0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW3IuY2F0ZWdvcnkubmFtZV19fTtqby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319IgogICAgICAgICAgICAgICAgPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nLWxhYmVsIj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9IjAiCiAgICAgICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0CiAgICAgICAgICAgICAgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIKICAgICAgICAgICAgICBzdGVwPSIwLjAwMSIKICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgbWF4PSIxIgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiIGlkPSJjYXRlZ29yaWVzLWNvbnRhaW5lciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+VGhlIGN1c3RvbSBzY2FsYXJzIGRhc2hib2FyZCBpcyBpbmFjdGl2ZS48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbid0IGxhaWQgb3V0IHRoZSBkYXNoYm9hcmQuPC9saT4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBzY2FsYXIgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvb2w+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUbyBsYXkgb3V0IHRoZSBkYXNoYm9hcmQsIHBhc3MgYSA8Y29kZT5MYXlvdXQ8L2NvZGU+IHByb3RvYnVmZmVyCiAgICAgICAgICAgICAgdG8gdGhlIDxjb2RlPnNldF9sYXlvdXQ8L2NvZGU+IG1ldGhvZC4gRm9yIGV4YW1wbGUsCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHByZT4KZnJvbSB0ZW5zb3Jib2FyZCBpbXBvcnQgc3VtbWFyeQpmcm9tIHRlbnNvcmJvYXJkLnBsdWdpbnMuY3VzdG9tX3NjYWxhciBpbXBvcnQgbGF5b3V0X3BiMgouLi4KIyBUaGlzIGFjdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGJlIHBlcmZvcm1lZCBhdCBldmVyeSBzdGVwLCBzbyB0aGUgYWN0aW9uIGlzIG5vdAojIHRha2VuIGNhcmUgb2YgYnkgYW4gb3AgaW4gdGhlIGdyYXBoLiBXZSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgbGF5b3V0IG9uY2UKIyAoaW5zdGVhZCBvZiBwZXIgc3RlcCkuCmxheW91dF9zdW1tYXJ5ID0gc3VtbWFyeV9saWIuY3VzdG9tX3NjYWxhcl9wYihsYXlvdXRfcGIyLkxheW91dCgKICBjYXRlZ29yeT1bCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3InbG9zcy4qJ10sCiAgICAgICAgICAgICAgKSksCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSdiYXonLAogICAgICAgICAgICAgIG1hcmdpbj1sYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHNlcmllcz1bCiAgICAgICAgICAgICAgICAgIGxheW91dF9wYjIuTWFyZ2luQ2hhcnRDb250ZW50LlNlcmllcygKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nbG9zcy9iYXovc2NhbGFyX3N1bW1hcnknLAogICAgICAgICAgICAgICAgICAgIGxvd2VyPSdiYXpfbG93ZXIvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICB1cHBlcj0nYmF6X3VwcGVyL2Jhei9zY2FsYXJfc3VtbWFyeScpLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSksCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0ndHJpZyBmdW5jdGlvbnMnLAogICAgICBjaGFydD1bCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd3YXZlIHRyaWcgZnVuY3Rpb25zJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3IndHJpZ0Z1bmN0aW9ucy9jb3NpbmUnLCByJ3RyaWdGdW5jdGlvbnMvc2luZSddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgIyBUaGUgcmFuZ2Ugb2YgdGFuZ2VudCBpcyBkaWZmZXJlbnQuIExldCdzIGdpdmUgaXQgaXRzIG93biBjaGFydC4KICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J3RhbicsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvdGFuZ2VudCddLAogICAgICAgICAgICAgICkpLAogICAgICBdLAogICAgICAjIFRoaXMgY2F0ZWdvcnkgd2UgY2FyZSBsZXNzIGFib3V0LiBMZXQncyBtYWtlIGl0IGluaXRpYWxseSBjbG9zZWQuCiAgICAgIGNsb3NlZD1UcnVlKSwKICBdKSkKd3JpdGVyLmFkZF9zdW1tYXJ5KGxheW91dF9zdW1tYXJ5KQo8L3ByZQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgYXM9ImNoYXJ0IgogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgZGlzYWJsZS1wYWdpbmF0aW9uCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbY2F0ZWdvcnkubWV0YWRhdGEub3BlbmVkXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhcnQubXVsdGlsaW5lXV0iPgogICAgICAgICAgICAgICAgICA8dGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICAgIHRhZy1yZWdleGVzPSJbW2NoYXJ0Lm11bHRpbGluZS50YWddXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQ+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm1hcmdpbl1dIj4KICAgICAgICAgICAgICAgICAgPHRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgICBtYXJnaW4tY2hhcnQtc2VyaWVzPSJbW2NoYXJ0Lm1hcmdpbi5zZXJpZXNdXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxqby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLGpvLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sam8ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sam8ucHJvdG90eXBlLCJfc2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGpvLnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxqby5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqby5wcm90b3R5cGUsIl9sYXlvdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sam8ucHJvdG90eXBlLCJfb3BlbmVkQ2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2FjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxqby5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtSdCgiX2xheW91dCIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sam8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7am89RShbeXQoInRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIildLGpvKTt2YXIgTkI9RWUoT2UoKSwxKTt2YXIgc3N0PUVlKE9lKCksMSksYmE9RWUod2woKSwxKTt2YXIgUkI9Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLnJ1bjJkYXRhc2V0cz17fSx0aGlzLmNvbG9yU2NhbGU9cix0aGlzLmJ1aWxkQ2hhcnQodCl9Z2V0RGF0YXNldCh0KXtyZXR1cm4gdGhpcy5ydW4yZGF0YXNldHNbdF09PT12b2lkIDAmJih0aGlzLnJ1bjJkYXRhc2V0c1t0XT1uZXcgYmEuRGF0YXNldChbXSx7cnVuOnR9KSksdGhpcy5ydW4yZGF0YXNldHNbdF19YnVpbGRDaGFydCh0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKTtsZXQgcj12Qih0KTt0aGlzLnhBY2Nlc3Nvcj1yLmFjY2Vzc29yLHRoaXMueFNjYWxlPXIuc2NhbGUsdGhpcy54QXhpcz1yLmF4aXMsdGhpcy54QXhpcy5tYXJnaW4oMCksdGhpcy54QXhpcy50aWNrTGFiZWxQYWRkaW5nKDMpLHRoaXMueVNjYWxlPW5ldyBiYS5TY2FsZXMuTGluZWFyLHRoaXMueUF4aXM9bmV3IGJhLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBuPVd1KGRCKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihuKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKTtsZXQgaT10aGlzLmJ1aWxkUGxvdCh0aGlzLnhBY2Nlc3Nvcix0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5ncmlkbGluZXM9bmV3IGJhLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKSx0aGlzLmNlbnRlcj1uZXcgYmEuQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsaV0pLHRoaXMub3V0ZXI9bmV3IGJhLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7bGV0IGk9WzAsMjI4LDE1ODcsMzA4NSw1ZTMsNjkxNSw4NDEzLDk3NzIsMWU0XSxvPXNzdC5yYW5nZShpLmxlbmd0aC0xKS5tYXAoaD0+KGlbaCsxXS1pW2hdKS8yNTAwKSxhPWkubWFwKChoLGYpPT5wPT5wW2ZdWzFdKSxzPTQsbD1hW3NdLGM9c3N0LnJhbmdlKGEubGVuZ3RoLTEpLm1hcChoPT57bGV0IGY9bmV3IGJhLlBsb3RzLkFyZWE7Zi54KHQscik7bGV0IHA9aD5zP2FbaF06YVtoKzFdLGQ9aD5zP2FbaCsxXTphW2hdO3JldHVybiBmLnkoZCxuKSxmLnkwKHApLGYuYXR0cigiZmlsbCIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZSIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZS13ZWlnaHQiLChnLF8seSk9PiIwLjVweCIpLGYuYXR0cigic3Ryb2tlLW9wYWNpdHkiLCgpPT5vW2hdKSxmLmF0dHIoImZpbGwtb3BhY2l0eSIsKCk9Pm9baF0pLGZ9KSx1PW5ldyBiYS5QbG90cy5MaW5lO3JldHVybiB1LngodCxyKSx1LnkobCxuKSx1LmF0dHIoInN0cm9rZSIsKGgsZixwKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHAucnVuKSksdGhpcy5wbG90cz1jLG5ldyBiYS5Db21wb25lbnRzLkdyb3VwKGMpfXNldFZpc2libGVTZXJpZXModCl7dGhpcy5ydW5zPXQ7bGV0IHI9dC5tYXAobj0+dGhpcy5nZXREYXRhc2V0KG4pKTt0aGlzLnBsb3RzLmZvckVhY2gobj0+bi5kYXRhc2V0cyhyKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKHIpfXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19LEJjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IGJhLlNjYWxlcy5Db2xvcigpLnJhbmdlKGpiLnNsaWNlKCkpLHRoaXMueFR5cGU9InN0ZXAiLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGx9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModCksdGhpcy5yZWRyYXcoKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9cmVkcmF3KCl7dGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe3ZhciB0PXRoaXMueFR5cGUscj10aGlzLmNvbG9yU2NhbGUsbj10aGlzLl9hdHRhY2hlZDt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiZ0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXtpZih0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbCwhIW4pe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dmFyIGk9bmV3IFJCKHQsciksbz1IdCh0aGlzLiQuY2hhcnRkaXYpO2kucmVuZGVyVG8obyksdGhpcy5fY2hhcnQ9aX19LDM1MCl9X3JlbG9hZEZyb21DYWNoZSgpe3RoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCx0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF18fFtdKX0uYmluZCh0aGlzKSkpfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX19O0JjLnRlbXBsYXRlPVFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQogICAgICAucGxvdHRhYmxlIC5heGlzIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGJhLlNjYWxlcy5Db2xvcildLEJjLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxCYy5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQmMucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsUkIpXSxCYy5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sQmMucHJvdG90eXBlLCJfdmlzaWJsZVNlcmllc0NhY2hlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJjLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCYy5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhUeXBlIiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQmMucHJvdG90eXBlLCJfbWFrZUNoYXJ0IixudWxsKTtFKFtCdCgiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxCYy5wcm90b3R5cGUsIl9yZWxvYWRGcm9tQ2FjaGUiLG51bGwpO0JjPUUoW3l0KCJ2ei1kaXN0cmlidXRpb24tY2hhcnQiKV0sQmMpO3ZhciB3YT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz12ZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL2Rpc3RyaWJ1dGlvbnMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9Q24obyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPW4ubWFwKGE9PntsZXRbcyxsLGNdPWE7cmV0dXJuIGMud2FsbF90aW1lPW5ldyBEYXRlKHMqMWUzKSxjLnN0ZXA9bCxjfSksbz10aGlzLmdldERhdGFMb2FkTmFtZShyKTt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzRGF0YShvLGkpLHRoaXMuJC5jaGFydC5zZXRWaXNpYmxlU2VyaWVzKFtvXSl9LHRoaXMuX2NvbG9yU2NhbGU9e3NjYWxlOmZufSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFufV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnNjYWxlKHQpfXJlZHJhdygpe3RoaXMuJC5jaGFydC5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfX07d2EudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KICAgIDwhLS0KICAgICAgVGhlIG1haW4gZGlzdHJpYnV0aW9uIHRoYXQgd2UgcmVuZGVyLiBEYXRhIGlzIHNldCBkaXJlY3RseSB3aXRoCiAgICAgIFxgc2V0U2VyaWVzRGF0YVxgLCBub3Qgd2l0aCBhIGJvdW5kIHByb3BlcnR5LgogICAgLS0+CiAgICA8dnotZGlzdHJpYnV0aW9uLWNoYXJ0CiAgICAgIGlkPSJjaGFydCIKICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICA+PC92ei1kaXN0cmlidXRpb24tY2hhcnQ+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx3YS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHdhLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJsb2FkRGF0YUNhbGxiYWNrIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHdhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd2EucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx3YS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sd2EucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHdhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx3YS5wcm90b3R5cGUsIl91cGRhdGVEYXRhVG9Mb2FkIixudWxsKTtFKFtSdCgicnVuIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sd2EucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpO3dhPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIildLHdhKTt2YXIgU2w9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl94VHlwZT0ic3RlcCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZERpc3RyaWJ1dGlvbnMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD12ZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihOQi5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49TkIubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkRGlzdHJpYnV0aW9ucygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtZGlzdHJpYnV0aW9uLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtTbC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieFR5cGVTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIGF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBkaXN0cmlidXRpb24gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaGlzdG9ncmFtIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICAgIChIaXN0b2dyYW1zIGFuZCBkaXN0cmlidXRpb25zIGJvdGggdXNlIHRoZSBoaXN0b2dyYW0gc3VtbWFyeQogICAgICAgICAgICAgICAgb3BlcmF0aW9uLikKICAgICAgICAgICAgICA8L2xpPgoKICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtZGlzdHJpYnV0aW9uLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgPjwvdGYtZGlzdHJpYnV0aW9uLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxTbC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLFNsLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1NsPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIildLFNsKTt2YXIgREI9e307S3MoREIse0RJU0FNQklHVUFUT1I6KCk9PkYwdCxMaXN0ZW5LZXk6KCk9PmRFLGFkZEhhc2hMaXN0ZW5lcjooKT0+bUUsYWRkU3RvcmFnZUxpc3RlbmVyOigpPT5DVyxkaXNwb3NlQm9vbGVhbkJpbmRpbmc6KCk9PiRiZSxkaXNwb3NlTnVtYmVyQmluZGluZzooKT0+S2JlLGRpc3Bvc2VPYmplY3RCaW5kaW5nOigpPT5RYmUsZGlzcG9zZVN0cmluZ0JpbmRpbmc6KCk9PlliZSxmaXJlU3RvcmFnZUNoYW5nZWQ6KCk9PkFXLGdldEJvb2xlYW46KCk9PmpiZSxnZXRCb29sZWFuSW5pdGlhbGl6ZXI6KCk9PnZwLGdldEJvb2xlYW5PYnNlcnZlcjooKT0+eHAsZ2V0TnVtYmVyOigpPT5EVyxnZXROdW1iZXJJbml0aWFsaXplcjooKT0+Z0UsZ2V0TnVtYmVyT2JzZXJ2ZXI6KCk9Pl9FLGdldE9iamVjdDooKT0+WmJlLGdldE9iamVjdEluaXRpYWxpemVyOigpPT56VyxnZXRPYmplY3RPYnNlcnZlcjooKT0+RlcsZ2V0U3RyaW5nOigpPT5HYmUsZ2V0U3RyaW5nSW5pdGlhbGl6ZXI6KCk9PnlfLGdldFN0cmluZ09ic2VydmVyOigpPT52XyxnZXRVcmxIYXNoRGljdDooKT0+TjB0LG1ha2VCaW5kaW5nczooKT0+eUUsbWlncmF0ZUxlZ2FjeVVSTFNjaGVtZTooKT0+dDJlLHJlbW92ZUhhc2hMaXN0ZW5lckJ5S2V5OigpPT5QVyxyZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleTooKT0+SVcsc2V0Qm9vbGVhbjooKT0+WGJlLHNldE51bWJlcjooKT0+T1csc2V0T2JqZWN0OigpPT5KYmUsc2V0U3RyaW5nOigpPT5XYmV9KTt2YXIgb2N0PUVlKE9lKCksMSk7dmFyIFdLdD0iR3JhcGggZGFzaGJvYXJkIGFjdGlvbnMiLFlLdD0iR3JhcGggZGFzaGJvYXJkIHRpbWluZ3MiLGxzdDsoZnVuY3Rpb24oZSl7ZS5GRVRDSF9QQlRYVF9CWVRFUz0iRkVUQ0hfUEJUWFRfQllURVMiLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9GSUxFU1lTVEVNPSJGRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU0iLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVI9IkZFVENIX1BCVFhUX0JZVEVTX0ZST01fU0VSVkVSIixlLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUPSJQQVJTRV9QQlRYVF9JTlRPX09CSkVDVCIsZS5GRVRDSF9NRVRBREFUQV9QQlRYVF9CWVRFUz0iRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMiLGUuUEFSU0VfTUVUQURBVEFfUEJUWFRfSU5UT19PQkpFQ1Q9IlBBUlNFX01FVEFEQVRBX1BCVFhUX0lOVE9fT0JKRUNUIixlLk5PUk1BTElaSU5HX05BTUVTPSJOT1JNQUxJWklOR19OQU1FUyIsZS5CVUlMRF9TTElNX0dSQVBIPSJCVUlMRF9TTElNX0dSQVBIIixlLkhJRVJBUkNIWV9BRERfTk9ERVM9IkhJRVJBUkNIWV9BRERfTk9ERVMiLGUuSElFUkFSQ0hZX0RFVEVDVF9TRVJJRVM9IkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTIixlLkhJRVJBUkNIWV9BRERfRURHRVM9IkhJRVJBUkNIWV9BRERfRURHRVMiLGUuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFM9IkhJRVJBUkNIWV9GSU5EX1NJTUlMQVJfU1VCR1JBUEhTIixlLlJFTkRFUl9CVUlMRF9ISUVSQVJDSFk9IlJFTkRFUl9CVUlMRF9ISUVSQVJDSFkiLGUuUkVOREVSX1NDRU5FX0xBWU9VVD0iUkVOREVSX1NDRU5FX0xBWU9VVCIsZS5SRU5ERVJfU0NFTkVfQlVJTERfU0NFTkU9IlJFTkRFUl9TQ0VORV9CVUlMRF9TQ0VORSIsZS5HUkFQSF9MT0FEX1NVQ0NFRURFRD0iR1JBUEhfTE9BRF9TVUNDRUVERUQiLGUuR1JBUEhfTE9BRF9GQUlMRUQ9IkdSQVBIX0xPQURfRkFJTEVEIn0pKGxzdHx8KGxzdD17fSkpO3ZhciBjc3Q7KGZ1bmN0aW9uKGUpe2UuTk9ERV9FWFBBTlNJT05fVE9HR0xFRD0iTk9ERV9FWFBBTlNJT05fVE9HR0xFRCIsZS5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRD0iTk9ERV9TRUFSQ0hfUkVTVUxUX0ZPQ1VTRUQiLGUuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VEPSJOT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQiLGUuR1JBUEhfVFlQRV9DSEFOR0VEPSJHUkFQSF9UWVBFX0NIQU5HRUQiLGUuVFJBQ0VfSU5QVVRfTU9ERV9UT0dHTEVEPSJUUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUQiLGUuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQ9Ik5PREVfQ09MT1JfTU9ERV9DSEFOR0VEIixlLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTT0iVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNIn0pKGNzdHx8KGNzdD17fSkpO3ZhciBqcj1LbChLbCh7fSxsc3QpLGNzdCk7dmFyIEpzZT1FZSh6bHQoKSwxKSxwbj1FZShPZSgpLDEpO3ZhciBGczsoZnVuY3Rpb24oZSl7ZS5PUF9HUkFQSD0ib3BfZ3JhcGgiLGUuQ09OQ0VQVFVBTF9HUkFQSD0iY29uY2VwdHVhbF9ncmFwaCIsZS5QUk9GSUxFPSJwcm9maWxlIn0pKEZzfHwoRnM9e30pKTt2YXIgeWU9e05vZGU6e0NPTlRBSU5FUjoibm9kZXMiLEdST1VQOiJub2RlIixTSEFQRToibm9kZXNoYXBlIixDT0xPUl9UQVJHRVQ6Im5vZGVjb2xvcnRhcmdldCIsTEFCRUw6Im5vZGVsYWJlbCIsQlVUVE9OX0NPTlRBSU5FUjoiYnV0dG9uY29udGFpbmVyIixCVVRUT05fQ0lSQ0xFOiJidXR0b25jaXJjbGUiLEVYUEFORF9CVVRUT046ImV4cGFuZGJ1dHRvbiIsQ09MTEFQU0VfQlVUVE9OOiJjb2xsYXBzZWJ1dHRvbiJ9LEVkZ2U6e0NPTlRBSU5FUjoiZWRnZXMiLEdST1VQOiJlZGdlIixMSU5FOiJlZGdlbGluZSIsUkVGRVJFTkNFX0VER0U6InJlZmVyZW5jZWVkZ2UiLFJFRl9MSU5FOiJyZWZsaW5lIixTRUxFQ1RBQkxFOiJzZWxlY3RhYmxlZWRnZSIsU0VMRUNURUQ6InNlbGVjdGVkZWRnZSIsU1RSVUNUVVJBTDoic3RydWN0dXJhbCJ9LEFubm90YXRpb246e09VVEJPWDoib3V0LWFubm90YXRpb25zIixJTkJPWDoiaW4tYW5ub3RhdGlvbnMiLEdST1VQOiJhbm5vdGF0aW9uIixOT0RFOiJhbm5vdGF0aW9uLW5vZGUiLEVER0U6ImFubm90YXRpb24tZWRnZSIsQ09OVFJPTF9FREdFOiJhbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSIsTEFCRUw6ImFubm90YXRpb24tbGFiZWwiLEVMTElQU0lTOiJhbm5vdGF0aW9uLWVsbGlwc2lzIn0sU2NlbmU6e0dST1VQOiJzY2VuZSIsQ09SRToiY29yZSIsRlVOQ1RJT05fTElCUkFSWToiZnVuY3Rpb24tbGlicmFyeSIsSU5FWFRSQUNUOiJpbi1leHRyYWN0IixPVVRFWFRSQUNUOiJvdXQtZXh0cmFjdCJ9LFN1YnNjZW5lOntHUk9VUDoic3Vic2NlbmUifSxPUE5PREU6Im9wIixNRVRBTk9ERToibWV0YSIsU0VSSUVTTk9ERToic2VyaWVzIixCUklER0VOT0RFOiJicmlkZ2UiLEVMTElQU0lTTk9ERToiZWxsaXBzaXMifSxaND17RWRnZTp7TEFCRUw6My41fSxBbm5vdGF0aW9uOntMQUJFTDo1fSxOb2RlOntFWFBBTkRFRF9MQUJFTDo5LFNFUklFU19MQUJFTDo4LE9QX0xBQkVMOjYsSEVBTFRIX1BJTExfU1RBVF9MQUJFTDo0fX0sanU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtmdW5jdGlvbiBtMChlLHQscil7bGV0IG49ZS5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZihvLnRhZ05hbWU9PT10KXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2xldCBhPSEwO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cysrKWE9YSYmby5jbGFzc0xpc3QuY29udGFpbnMocltzXSk7aWYoYSlyZXR1cm4gSHQobyl9ZWxzZSBpZighcnx8by5jbGFzc0xpc3QuY29udGFpbnMocikpcmV0dXJuIEh0KG8pfX1yZXR1cm4gSHQobnVsbCl9ZnVuY3Rpb24gUG4oZSx0LHIsbil7bGV0IGk9bTAoZSx0LHIpO2lmKCFpLmVtcHR5KCkpcmV0dXJuIGk7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCk7aWYociBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKW8uY2xhc3NMaXN0LmFkZChyW2FdKTtlbHNlIG8uY2xhc3NMaXN0LmFkZChyKTtyZXR1cm4gbj9lLm5vZGUoKS5pbnNlcnRCZWZvcmUobyxuKTplLm5vZGUoKS5hcHBlbmRDaGlsZChvKSxIdChvKS5kYXR1bShlLmRhdHVtKCkpfXZhciBLUz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnRvdGFsQnl0ZXM9MCx0aGlzLm91dHB1dFNpemU9dH1hZGRFeGVjdXRpb25UaW1lKHQscil7dGhpcy5zdGFydFRpbWUhPW51bGw/dGhpcy5zdGFydFRpbWU9TWF0aC5taW4odGhpcy5zdGFydFRpbWUsdCk6dGhpcy5zdGFydFRpbWU9dCx0aGlzLmVuZFRpbWUhPW51bGw/dGhpcy5lbmRUaW1lPU1hdGgubWF4KHRoaXMuZW5kVGltZSxyKTp0aGlzLmVuZFRpbWU9cn1hZGRCeXRlc0FsbG9jYXRpb24odCl7dGhpcy50b3RhbEJ5dGVzIT1udWxsP3RoaXMudG90YWxCeXRlcz1NYXRoLm1heCh0aGlzLnRvdGFsQnl0ZXMsdCk6dGhpcy50b3RhbEJ5dGVzPXR9Y29tYmluZSh0KXt0LnRvdGFsQnl0ZXMhPW51bGwmJih0aGlzLnRvdGFsQnl0ZXMrPXQudG90YWxCeXRlcyksdC5nZXRUb3RhbE1pY3JvcygpIT1udWxsJiZ0aGlzLmFkZEV4ZWN1dGlvblRpbWUodC5zdGFydFRpbWUsdC5lbmRUaW1lKX1nZXRUb3RhbE1pY3Jvcygpe3JldHVybiB0aGlzLnN0YXJ0VGltZT09bnVsbHx8dGhpcy5lbmRUaW1lPT1udWxsP251bGw6dGhpcy5lbmRUaW1lLXRoaXMuc3RhcnRUaW1lfX0sSjQ9Ljc1LFE0PTEyLCRscj0uMyxLbHI9WzEsNWU2XSxxc2U9S18oKS5leHBvbmVudCgkbHIpLmRvbWFpbihLbHIpLnJhbmdlKFtKNCxRNF0pLmNsYW1wKCEwKTt2YXIgWlM9RWUoT2UoKSwxKTt2YXIgV3NlPTIwO2Z1bmN0aW9uIFpscihlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgidGltaW5nSWQiKX1mdW5jdGlvbiBQbyhlKXtabHIoZSk/KFlLdCxlLnRpbWluZ0lkLGUuZXZlbnRWYWx1ZSx2b2lkIDApOihXS3QsZS5hY3Rpb25JZCxlLmV2ZW50TGFiZWwsdm9pZCAwKX1mdW5jdGlvbiBSZChlLHQscil7bGV0IG49RGF0ZS5ub3coKSxpPXQoKSxvPURhdGUubm93KCktbjtyZXR1cm4gY29uc29sZS5sb2coZSwiOiIsbywibXMiKSxyJiZQbyh7dGltaW5nSWQ6cixldmVudFZhbHVlOm99KSxpfWZ1bmN0aW9uIHJQKGUpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe2Uuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOmUucHJvZ3Jlc3MudmFsdWUsbXNnOnR9KX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24odCl7ZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSt0LG1zZzplLnByb2dyZXNzLm1zZ30pfSxyZXBvcnRFcnJvcjpmdW5jdGlvbih0LHIpe2NvbnNvbGUuZXJyb3Ioci5zdGFjayksZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSxtc2c6dCxlcnJvcjohMH0pfX19ZnVuY3Rpb24gSlMoZSx0LHIpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKG4pe2Uuc2V0TWVzc2FnZShyKyI6ICIrbil9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKG4pe2UudXBkYXRlUHJvZ3Jlc3Mobip0LzEwMCl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKG4saSl7ZS5yZXBvcnRFcnJvcihyKyI6ICIrbixpKX19fWZ1bmN0aW9uIFlzZShlLHQscixuLGkpe24uc2V0TWVzc2FnZShlKTt0cnl7bGV0IG89UmQoZSxyLGkpO3JldHVybiBuLnVwZGF0ZVByb2dyZXNzKHQpLG99Y2F0Y2gobyl7cmV0dXJuIG4ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2UsbyksbnVsbH19ZnVuY3Rpb24gZXYoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntuLnNldE1lc3NhZ2UoZSksc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtsZXQgcz1SZChlLHIsaSk7bi51cGRhdGVQcm9ncmVzcyh0KSxvKHMpfWNhdGNoKHMpe24ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2Uscyl9fSxXc2UpfSl9ZnVuY3Rpb24gZEgoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntsZXQgcz1mdW5jdGlvbihsKXtuLnJlcG9ydEVycm9yKCJGYWlsZWQgIitlLGwpLGEobCl9O24uc2V0TWVzc2FnZShlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e2xldCBsPURhdGUubm93KCk7cigpLnRoZW4oZnVuY3Rpb24oYyl7bGV0IHU9RGF0ZS5ub3coKS1sO2NvbnNvbGUubG9nKGUsIjoiLHUsIm1zIiksbi51cGRhdGVQcm9ncmVzcyh0KSxQbyh7dGltaW5nSWQ6aSxldmVudFZhbHVlOnV9KSxvKGMpfSkuY2F0Y2gocyl9Y2F0Y2gobCl7cyhsKX19LFdzZSl9KX1mdW5jdGlvbiBqc2UoZSl7cmV0dXJuIGUucmVwbGFjZSgvKFs6LlxbXF0sL1xcXChcKV0pL2csIlxcJDEiKX12YXIgblA9W3tzeW1ib2w6IkIifSx7c3ltYm9sOiJLQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiTUIiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IkdCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJUQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiUEIiLG51bVVuaXRzOjEwMjR9XSxpUD1be3N5bWJvbDoiXHhCNXMifSx7c3ltYm9sOiJtcyIsbnVtVW5pdHM6MWUzfSx7c3ltYm9sOiJzIixudW1Vbml0czoxZTN9LHtzeW1ib2w6Im1pbiIsbnVtVW5pdHM6NjB9LHtzeW1ib2w6ImhyIixudW1Vbml0czo2MH0se3N5bWJvbDoiZGF5cyIsbnVtVW5pdHM6MjR9XTtmdW5jdGlvbiBOZChlLHQscj0wKXtyZXR1cm4gcisxPHQubGVuZ3RoJiZlPj10W3IrMV0ubnVtVW5pdHM/TmQoZS90W3IrMV0ubnVtVW5pdHMsdCxyKzEpOk51bWJlcihlLnRvUHJlY2lzaW9uKDMpKSsiICIrdFtyXS5zeW1ib2x9ZnVuY3Rpb24gbUgoZSl7cmV0dXJuISEoZSYmKGUudG90YWxCeXRlcz4wfHxlLmdldFRvdGFsTWljcm9zKCk+MHx8ZS5vdXRwdXRTaXplKSl9ZnVuY3Rpb24gRmx0KGUpe2lmKGUubGVuZ3RoPDIpcmV0dXJuIGU7bGV0IHQ9MCxyPTAsbj1aUy5taW4oWlMubWFwKGUsaT0+aS5sZW5ndGgpKTtmb3IoOzspe3QrKztsZXQgaT1aUy5tYXAoZSxhPT5hLnN1YnN0cmluZygwLHQpKTtpZihpLmV2ZXJ5KChhLHMpPT5zPT09MD8hMDphPT09aVtzLTFdKSl7aWYodD49bilyZXR1cm4gZTtyPXR9ZWxzZSBicmVha31yZXR1cm4gWlMubWFwKGUsaT0+aS5zdWJzdHJpbmcocikpfWZ1bmN0aW9uIFhzZShlKXt2YXIgdD0rbmV3IERhdGUtK25ldyBEYXRlKGUvMWUzKTtyZXR1cm4gdDwzZTQ/Imp1c3Qgbm93Ijp0PDZlND9NYXRoLmZsb29yKHQvMWUzKSsiIHNlY29uZHMgYWdvIjp0PDEyZTQ/ImEgbWludXRlIGFnbyI6dDwzNmU1P01hdGguZmxvb3IodC82ZTQpKyIgbWludXRlcyBhZ28iOk1hdGguZmxvb3IodC8zNmU1KT09MT8iYW4gaG91ciBhZ28iOnQ8ODY0ZTU/TWF0aC5mbG9vcih0LzM2ZTUpKyIgaG91cnMgYWdvIjp0PDE3MjhlNT8ieWVzdGVyZGF5IjpNYXRoLmZsb29yKHQvODY0ZTUpKyIgZGF5cyBhZ28ifXZhciBKbHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZVA9SmxyLmdldENvbnRleHQoIjJkIik7ZnVuY3Rpb24gR3NlKGUsdCl7cmV0dXJuIGVQJiYoZVAuZm9udD1gJHt0fXB4IFJvYm90bywgc2Fucy1zZXJpZmApLGVQPT1udWxsP3ZvaWQgMDplUC5tZWFzdXJlVGV4dChlKS53aWR0aH1mdW5jdGlvbiAkc2UoZSx0LHIpe2lmKCFlKXJldHVybiIiO2lmKEdzZShlLHQpPD1yKXJldHVybiBlO2xldCBuPTAsaT1lLmxlbmd0aDtmb3IoO248aTspe2xldCBvPW4rTWF0aC5yb3VuZCgoaS1uKS8yKSxhPWUuc2xpY2UoMCxvKSsiXHUyMDI2IjtHc2UoYSx0KTw9cj9uPW86aT1vLTF9cmV0dXJuIG49PT0wP2VbMF06ZS5zbGljZSgwLG4pKyJcdTIwMjYifXZhciBwSD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnM9bmV3IE1hcH1nZXRMaXN0ZW5lcnModCl7cmV0dXJuIHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuaGFzKHQpfHx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLnNldCh0LFtdKSx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLmdldCh0KX1hZGRMaXN0ZW5lcih0LHIpe3ZhciBuOyhuPXRoaXMuZ2V0TGlzdGVuZXJzKHQpKT09bnVsbHx8bi5wdXNoKHIpfXJlbW92ZUxpc3RlbmVyKHQscil7dmFyIGk7bGV0IG49KGk9dGhpcy5nZXRMaXN0ZW5lcnModCkpPT1udWxsP3ZvaWQgMDppLmZpbHRlcihvPT5vIT09cik7dGhpcy5ldmVudFR5cGVUb0xpc3RlbmVycy5zZXQodCxuKX1kaXNwYXRjaEV2ZW50KHQscil7Zm9yKGxldCBuIG9mIHRoaXMuZ2V0TGlzdGVuZXJzKHQpKW4ocil9fTt2YXIgQWw9Ii8iLHFjPSJfX3Jvb3RfXyIsU2E9Il9fZnVuY3Rpb25fbGlicmFyeV9fIixRc2U9Il90b29fbGFyZ2VfYXR0cnMiO3ZhciB0bGU9Ii0tIixnMDsoZnVuY3Rpb24oZSl7ZVtlLkZVTEw9MF09IkZVTEwiLGVbZS5FTUJFRERFRD0xXT0iRU1CRURERUQiLGVbZS5NRVRBPTJdPSJNRVRBIixlW2UuU0VSSUVTPTNdPSJTRVJJRVMiLGVbZS5DT1JFPTRdPSJDT1JFIixlW2UuU0hBRE9XPTVdPSJTSEFET1ciLGVbZS5CUklER0U9Nl09IkJSSURHRSIsZVtlLkVER0U9N109IkVER0UifSkoZzB8fChnMD17fSkpO3ZhciBqdDsoZnVuY3Rpb24oZSl7ZVtlLk1FVEE9MF09Ik1FVEEiLGVbZS5PUD0xXT0iT1AiLGVbZS5TRVJJRVM9Ml09IlNFUklFUyIsZVtlLkJSSURHRT0zXT0iQlJJREdFIixlW2UuRUxMSVBTSVM9NF09IkVMTElQU0lTIn0pKGp0fHwoanQ9e30pKTt2YXIgdXI7KGZ1bmN0aW9uKGUpe2VbZS5JTkNMVURFPTBdPSJJTkNMVURFIixlW2UuRVhDTFVERT0xXT0iRVhDTFVERSIsZVtlLlVOU1BFQ0lGSUVEPTJdPSJVTlNQRUNJRklFRCJ9KSh1cnx8KHVyPXt9KSk7dmFyIGlzOyhmdW5jdGlvbihlKXtlW2UuR1JPVVA9MF09IkdST1VQIixlW2UuVU5HUk9VUD0xXT0iVU5HUk9VUCJ9KShpc3x8KGlzPXt9KSk7dmFyIFFscj0iX291dHB1dF9zaGFwZXMiLHRjcj0iX1hsYUNsdXN0ZXIiLFh1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz17fSx0aGlzLmVkZ2VzPVtdfX0sZ0g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy50eXBlPWp0LkVMTElQU0lTLHRoaXMuaXNHcm91cE5vZGU9ITEsdGhpcy5jYXJkaW5hbGl0eT0xLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuc3RhdHM9bnVsbCx0aGlzLnNldE51bU1vcmVOb2Rlcyh0KSx0aGlzLmluY2x1ZGU9dXIuVU5TUEVDSUZJRUR9c2V0TnVtTW9yZU5vZGVzKHQpe3RoaXMubnVtTW9yZU5vZGVzPXQsdGhpcy5uYW1lPSIuLi4gIit0KyIgbW9yZSJ9fSxfMD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wPXQub3AsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmRldmljZT10LmRldmljZSx0aGlzLmF0dHI9dC5hdHRyLHRoaXMuaW5wdXRzPWljcih0LmlucHV0KSx0aGlzLm91dHB1dFNoYXBlcz1lY3IodC5hdHRyKSx0aGlzLnhsYUNsdXN0ZXI9cmNyKHQuYXR0ciksdGhpcy5jb21wYXRpYmxlPSExLHRoaXMudHlwZT1qdC5PUCx0aGlzLmlzR3JvdXBOb2RlPSExLHRoaXMuY2FyZGluYWxpdHk9MSx0aGlzLmluRW1iZWRkaW5ncz1bXSx0aGlzLm91dEVtYmVkZGluZ3M9W10sdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVELHRoaXMub3duaW5nU2VyaWVzPW51bGx9fTtmdW5jdGlvbiBzUChlLHQ9e30pe3JldHVybiBuZXcgb1AoZSx0KX1mdW5jdGlvbiBlbGUoZSx0LHIpe3BuLmVhY2goZS5ub2RlcyxuPT57bi5zdGF0cz1udWxsfSkscG4uZWFjaCh0LmRldl9zdGF0cyxuPT57ciYmIXJbbi5kZXZpY2VdfHxwbi5lYWNoKG4ubm9kZV9zdGF0cyxpPT57bGV0IG89aS5ub2RlX25hbWUgaW4gZS5ub2Rlcz9pLm5vZGVfbmFtZTphUChpLm5vZGVfbmFtZSk7aWYoIShvIGluIGUubm9kZXMpKXJldHVybjtsZXQgYT0wO2kubWVtb3J5JiZwbi5lYWNoKGkubWVtb3J5LGw9PntsLnRvdGFsX2J5dGVzJiYobC50b3RhbF9ieXRlcz4wP2ErPU51bWJlcihsLnRvdGFsX2J5dGVzKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgbWVtb3J5IGFsbG9jYXRpb24gZm9yICIrbykpfSk7bGV0IHM9bnVsbDtpLm91dHB1dCYmKHM9cG4ubWFwKGkub3V0cHV0LGw9PnBuLm1hcChsLnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0sYz0+TnVtYmVyKGMuc2l6ZSkpKSksZS5ub2Rlc1tvXS5kZXZpY2U9bi5kZXZpY2UsZS5ub2Rlc1tvXS5zdGF0cz09bnVsbCYmKGUubm9kZXNbb10uc3RhdHM9bmV3IEtTKHMpKSxlLm5vZGVzW29dLnN0YXRzLmFkZEJ5dGVzQWxsb2NhdGlvbihhKSxpLmFsbF9lbmRfcmVsX21pY3JvcyYmKGkuYWxsX2VuZF9yZWxfbWljcm9zPjA/ZS5ub2Rlc1tvXS5zdGF0cy5hZGRFeGVjdXRpb25UaW1lKGkuYWxsX3N0YXJ0X21pY3JvcyxpLmFsbF9zdGFydF9taWNyb3MraS5hbGxfZW5kX3JlbF9taWNyb3MpOmNvbnNvbGUubG9nKCJpZ25vcmluZyBuZWdhdGl2ZSBydW50aW1lIGZvciAiK28pKX0pfSl9dmFyIG9QPWNsYXNze2NvbnN0cnVjdG9yKHQscj17fSl7dGhpcy5uYW1lPXQsdGhpcy50eXBlPWp0Lk1FVEEsdGhpcy5kZXB0aD0xLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPWUzKHQsZzAuTUVUQSxyKSx0aGlzLmJyaWRnZWdyYXBoPW51bGwsdGhpcy5vcEhpc3RvZ3JhbT17fSx0aGlzLmRldmljZUhpc3RvZ3JhbT17fSx0aGlzLnhsYUNsdXN0ZXJIaXN0b2dyYW09e30sdGhpcy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtPXtjb21wYXRpYmxlOjAsaW5jb21wYXRpYmxlOjB9LHRoaXMudGVtcGxhdGVJZD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuaGFzTm9uQ29udHJvbEVkZ2VzPSExLHRoaXMuaW5jbHVkZT11ci5VTlNQRUNJRklFRCx0aGlzLmFzc29jaWF0ZWRGdW5jdGlvbj0iIn1nZXRGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5tZXRhZ3JhcGgubm9kZXMoKVswXSl9Z2V0Um9vdE9wKCl7bGV0IHQ9dGhpcy5uYW1lLnNwbGl0KCIvIikscj10aGlzLm5hbWUrIi8oIit0W3QubGVuZ3RoLTFdKyIpIjtyZXR1cm4gdGhpcy5tZXRhZ3JhcGgubm9kZShyKX1sZWF2ZXMoKXtsZXQgdD1bXSxyPVt0aGlzXSxuO2Zvcig7ci5sZW5ndGg7KXtsZXQgaT1yLnNoaWZ0KCk7aSE9bnVsbCYmaS5pc0dyb3VwTm9kZT8obj1pLm1ldGFncmFwaCxwbi5lYWNoKG4ubm9kZXMoKSxvPT5yLnB1c2gobi5ub2RlKG8pKSkpOnQucHVzaChpPT1udWxsP3ZvaWQgMDppLm5hbWUpfXJldHVybiB0fX07ZnVuY3Rpb24gVmx0KGUsdCl7cmV0dXJuIG5ldyBxZihlLHQpfXZhciBxZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMudj10LHRoaXMudz1yLHRoaXMuYmFzZUVkZ2VMaXN0PVtdLHRoaXMuaW5ib3VuZD1udWxsLHRoaXMubnVtUmVndWxhckVkZ2VzPTAsdGhpcy5udW1Db250cm9sRWRnZXM9MCx0aGlzLm51bVJlZkVkZ2VzPTAsdGhpcy50b3RhbFNpemU9MH1hZGRCYXNlRWRnZSh0LHIpe3RoaXMuYmFzZUVkZ2VMaXN0LnB1c2godCksdC5pc0NvbnRyb2xEZXBlbmRlbmN5P3RoaXMubnVtQ29udHJvbEVkZ2VzKz0xOnRoaXMubnVtUmVndWxhckVkZ2VzKz0xLHQuaXNSZWZlcmVuY2VFZGdlJiYodGhpcy5udW1SZWZFZGdlcys9MSksdGhpcy50b3RhbFNpemUrPXFmLmNvbXB1dGVTaXplT2ZFZGdlKHQsciksci5tYXhNZXRhRWRnZVNpemU9TWF0aC5tYXgoci5tYXhNZXRhRWRnZVNpemUsdGhpcy50b3RhbFNpemUpfXN0YXRpYyBjb21wdXRlU2l6ZU9mRWRnZSh0LHIpe2xldCBuPXIubm9kZSh0LnYpO2lmKCFuLm91dHB1dFNoYXBlcylyZXR1cm4gMTtyLmhhc1NoYXBlSW5mbz0hMDtsZXQgaT1PYmplY3Qua2V5cyhuLm91dHB1dFNoYXBlcykubWFwKG89Pm4ub3V0cHV0U2hhcGVzW29dKS5tYXAobz0+bz09bnVsbD8xOm8ucmVkdWNlKChhLHMpPT4ocz09PS0xJiYocz0xKSxhKnMpLDEpKTtyZXR1cm4gcG4uc3VtKGkpfX07ZnVuY3Rpb24gUVMoZSx0LHIsbixpLG8pe3JldHVybiBuZXcgSGx0KGUsdCxyLG4saSxvKX1mdW5jdGlvbiB0MyhlLHQscixuLGkpe2xldCBvPXR5cGVvZiBuIT0idW5kZWZpbmVkIiYmdHlwZW9mIGkhPSJ1bmRlZmluZWQiPyJbIituKyItIitpKyJdIjoiIyIsYT1lK28rdDtyZXR1cm4ocj9yKyIvIjoiIikrYX12YXIgSGx0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLm5hbWU9b3x8dDModCxyLG4pLHRoaXMudHlwZT1qdC5TRVJJRVMsdGhpcy5oYXNMb29wPSExLHRoaXMucHJlZml4PXQsdGhpcy5zdWZmaXg9cix0aGlzLmNsdXN0ZXJJZD1pLHRoaXMuaWRzPVtdLHRoaXMucGFyZW50PW4sdGhpcy5pc0dyb3VwTm9kZT0hMCx0aGlzLmNhcmRpbmFsaXR5PTAsdGhpcy5tZXRhZ3JhcGg9ZTMobyxnMC5TRVJJRVMsYSksdGhpcy5icmlkZ2VncmFwaD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVEfX07ZnVuY3Rpb24gZWNyKGUpe2xldCB0PW51bGw7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldHtrZXk6bix2YWx1ZTppfT1lW3JdO2lmKG49PT1RbHIpe2lmKCFpLmxpc3R8fCFpLmxpc3Quc2hhcGUpcmV0dXJuIG51bGw7bGV0IG89aS5saXN0LnNoYXBlLm1hcChhPT5hLnVua25vd25fcmFuaz9udWxsOmEuZGltPT1udWxsfHxhLmRpbS5sZW5ndGg9PT0xJiZhLmRpbVswXS5zaXplPT1udWxsP1tdOmEuZGltLm1hcChzPT5zLnNpemUpKTtyZXR1cm4gZS5zcGxpY2UociwxKSxvfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiByY3IoZSl7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XS5rZXk9PT10Y3IpcmV0dXJuIGVbdF0udmFsdWUuc3x8bnVsbDtyZXR1cm4gbnVsbH12YXIgbmNyPS9eKFteOl0rKTooKFx3Kzp8KVxkKykkLztmdW5jdGlvbiBpY3IoZSl7bGV0IHQ9W10scj1udWxsO2ZvcihsZXQgbiBvZiBlfHxbXSl7bGV0IGk9bi5zdGFydHNXaXRoKCJeIik7aSYmKG49bi5zdWJzdHJpbmcoMSkpO2xldCBvPW4sYT0iMCIscz1uLmluY2x1ZGVzKCI6IikmJm4ubWF0Y2gobmNyKTtzJiYobz1zWzFdLGE9c1syXSksciE9PW8mJihyPW8sdC5wdXNoKHtuYW1lOm8sb3V0cHV0VGVuc29yS2V5OmEsaXNDb250cm9sRGVwZW5kZW5jeTppfSkpfXJldHVybiB0fWZ1bmN0aW9uIEJsdChlLHQscixuLGksbyl7aWYodD09PXIubmFtZSlyZXR1cm47bGV0IGE9aS5yZWZFZGdlc1tyLm9wKyIgIitvXT09PSEwO2UuZWRnZXMucHVzaCh7djp0LHc6ci5uYW1lLG91dHB1dFRlbnNvcktleTpuLm91dHB1dFRlbnNvcktleSxpc0NvbnRyb2xEZXBlbmRlbmN5Om4uaXNDb250cm9sRGVwZW5kZW5jeSxpc1JlZmVyZW5jZUVkZ2U6YX0pfXZhciBybGU9e2VuYWJsZUVtYmVkZGluZzohMCxpbkVtYmVkZGluZ1R5cGVzOlsiQ29uc3QiXSxvdXRFbWJlZGRpbmdUeXBlczpbIl5bYS16QS1aXStTdW1tYXJ5JCJdLHJlZkVkZ2VzOnsiQXNzaWduIDAiOiEwLCJBc3NpZ25BZGQgMCI6ITAsIkFzc2lnblN1YiAwIjohMCwiYXNzaWduIDAiOiEwLCJhc3NpZ25fYWRkIDAiOiEwLCJhc3NpZ25fc3ViIDAiOiEwLCJjb3VudF91cF90byAwIjohMCwiU2NhdHRlckFkZCAwIjohMCwiU2NhdHRlclN1YiAwIjohMCwiU2NhdHRlclVwZGF0ZSAwIjohMCwic2NhdHRlcl9hZGQgMCI6ITAsInNjYXR0ZXJfc3ViIDAiOiEwLCJzY2F0dGVyX3VwZGF0ZSAwIjohMH19O2Z1bmN0aW9uIG5sZShlLHQscil7bGV0IG49e30saT17fSxvPXt9LGE9S3NlKHQuaW5FbWJlZGRpbmdUeXBlcykscz1Lc2UodC5vdXRFbWJlZGRpbmdUeXBlcyksbD1bXSxjPWUubm9kZSx1PW5ldyBBcnJheShjLmxlbmd0aCk7cmV0dXJuIGV2KCJOb3JtYWxpemluZyBuYW1lcyIsMzAsKCk9PntsZXQgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLGY9MCxwPWc9PntsZXQgXz1uZXcgXzAoZyk7cmV0dXJuIGEoXyk/KGwucHVzaChfLm5hbWUpLG5bXy5uYW1lXT1fLF8pOnMoXyk/KGwucHVzaChfLm5hbWUpLGlbXy5uYW1lXT1fLHBuLmVhY2goXy5pbnB1dHMseT0+e2xldCB4PXkubmFtZTtvW3hdPW9beF18fFtdLG9beF0ucHVzaChfKX0pLF8pOihoW2ZdPV8sdVtmXT1fLm5hbWUsZisrLF8pfTtwbi5lYWNoKGMscCk7bGV0IGQ9Zz0+e2xldCBfPVNhK2cuc2lnbmF0dXJlLm5hbWU7aWYocCh7bmFtZTpfLGlucHV0OltdLGRldmljZToiIixvcDoiIixhdHRyOltdfSksZy5zaWduYXR1cmUuaW5wdXRfYXJnKXtsZXQgYj0wLFM9Qz0+e2xldCBQPXAoe25hbWU6XytBbCtDLm5hbWUsaW5wdXQ6W10sZGV2aWNlOiIiLG9wOiJpbnB1dF9hcmciLGF0dHI6W3trZXk6IlQiLHZhbHVlOnt0eXBlOkMudHlwZX19XX0pO1AuZnVuY3Rpb25JbnB1dEluZGV4PWIsYisrfTtnLnNpZ25hdHVyZS5pbnB1dF9hcmcubmFtZT9TKGcuc2lnbmF0dXJlLmlucHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5pbnB1dF9hcmcsUyl9bGV0IHk9MCx4PXt9O2lmKGcuc2lnbmF0dXJlLm91dHB1dF9hcmcpe2xldCBiPVM9Pnt4W18rQWwrUy5uYW1lXT15LHkrK307Zy5zaWduYXR1cmUub3V0cHV0X2FyZy5uYW1lP2IoZy5zaWduYXR1cmUub3V0cHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5vdXRwdXRfYXJnLGIpfXBuLmVhY2goZy5ub2RlX2RlZixiPT57Yi5uYW1lPV8rIi8iK2IubmFtZSx0eXBlb2YgYi5pbnB1dD09InN0cmluZyImJihiLmlucHV0PVtiLmlucHV0XSk7bGV0IFM9cChiKTtwbi5pc051bWJlcih4W2IubmFtZV0pJiYoUy5mdW5jdGlvbk91dHB1dEluZGV4PXhbYi5uYW1lXSkscG4uZWFjaChTLmlucHV0cyxDPT57Qy5uYW1lPV8rQWwrQy5uYW1lfSl9KX07cmV0dXJuIGUubGlicmFyeSYmZS5saWJyYXJ5LmZ1bmN0aW9uJiZwbi5lYWNoKGUubGlicmFyeS5mdW5jdGlvbixkKSxoLnNwbGljZShmKSx1LnNwbGljZShmKSxofSxyLGpyLk5PUk1BTElaSU5HX05BTUVTKS50aGVuKGg9PmV2KCJCdWlsZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUiLDcwLCgpPT57bGV0IGY9b2NyKHUsbCkscD1uZXcgWHU7cmV0dXJuIHBuLmVhY2goaCxkPT57bGV0IGc9ZltkLm5hbWVdfHxkLm5hbWU7cC5ub2Rlc1tnXT1kLGQubmFtZSBpbiBvJiYoZC5vdXRFbWJlZGRpbmdzPW9bZC5uYW1lXSxwbi5lYWNoKGQub3V0RW1iZWRkaW5ncyxfPT57Xy5uYW1lPWZbXy5uYW1lXXx8Xy5uYW1lfSkpLGQubmFtZT1nfSkscG4uZWFjaChoLGQ9Pntwbi5lYWNoKGQuaW5wdXRzLChnLF8pPT57bGV0IHk9Zy5uYW1lO2lmKHkgaW4gbil7bGV0IHg9blt5XTtkLmluRW1iZWRkaW5ncy5wdXNoKHgpO2ZvcihsZXQgYiBvZiB4LmlucHV0cylCbHQocCxmW2IubmFtZV18fGIubmFtZSxkLGIsdCxfKX1lbHNlIGlmKHkgaW4gaSl7bGV0IHg9aVt5XTtmb3IobGV0IGIgb2YgeC5pbnB1dHMpQmx0KHAsZltiLm5hbWVdfHxiLm5hbWUsZCxnLHQsXyl9ZWxzZSBCbHQocCxmW3ldfHx5LGQsZyx0LF8pfSl9KSxwbi5lYWNoKG4sKGQsZyk9PntkLm5hbWU9ZltkLm5hbWVdfHxkLm5hbWV9KSxwfSxyLGpyLkJVSUxEX1NMSU1fR1JBUEgpKX1mdW5jdGlvbiBlMyhlLHQscj17fSl7bGV0IG49bmV3IEpzZS5ncmFwaGxpYi5HcmFwaChyKTtyZXR1cm4gbi5zZXRHcmFwaCh7bmFtZTplLHJhbmtkaXI6ci5yYW5rZGlyfHwiQlQiLHR5cGU6dH0pLG59ZnVuY3Rpb24gS3NlKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49bmV3IFJlZ0V4cChlW3JdKTtpZih0eXBlb2YgdC5vcD09InN0cmluZyImJnQub3AubWF0Y2gobikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIGFQKGUpe2xldCB0PWUuc3BsaXQoQWwpO3JldHVybiBlK0FsKyIoIit0W3QubGVuZ3RoLTFdKyIpIn1mdW5jdGlvbiBvY3IoZSx0KXtsZXQgcj17fSxuPXt9O2Uuc29ydCgpO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGgtMTsrK2kpe2xldCBvPWVbaV07cG4uZWFjaChsUChvKS5zbGljZSgwLC0xKSxhPT57blthXT0hMH0pO2ZvcihsZXQgYT1pKzE7YTxlLmxlbmd0aDsrK2Epe2xldCBzPWVbYV07aWYocG4uc3RhcnRzV2l0aChzLG8pKXtpZihzLmxlbmd0aD5vLmxlbmd0aCYmcy5jaGFyQXQoby5sZW5ndGgpPT09QWwpe3Jbb109YVAobyk7YnJlYWt9fWVsc2UgYnJlYWt9fXJldHVybiBwbi5lYWNoKHQsaT0+e2kgaW4gbiYmKHJbaV09YVAoaSkpfSkscn1mdW5jdGlvbiBac2UoZSl7bGV0IHQ9ZS5ub2RlcygpLm1hcChmdW5jdGlvbihyKXt2YXIgbjtyZXR1cm4obj1lLm5laWdoYm9ycyhyKSk9PW51bGw/dm9pZCAwOm4ubGVuZ3RofSk7cmV0dXJuIHQuc29ydCgpLHR9ZnVuY3Rpb24gaWxlKGUsdCl7bGV0IHI9WnNlKGUpLG49WnNlKHQpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGxQKGUsdCl7bGV0IHI9W10sbj1lLmluZGV4T2YoQWwpO2Zvcig7bj49MDspci5wdXNoKGUuc3Vic3RyaW5nKDAsbikpLG49ZS5pbmRleE9mKEFsLG4rMSk7aWYodCl7bGV0IGk9dFtlXTtpJiZyLnB1c2goaSl9cmV0dXJuIHIucHVzaChlKSxyfWZ1bmN0aW9uIF9IKGUpe3JldHVybiBlPT09dXIuRVhDTFVERT8iQWRkIHRvIG1haW4gZ3JhcGgiOiJSZW1vdmUgZnJvbSBtYWluIGdyYXBoIn1mdW5jdGlvbiBvbGUoZSl7cmV0dXJuIGU9PT1pcy5HUk9VUD8iVW5ncm91cCB0aGlzIHNlcmllcyBvZiBub2RlcyI6Ikdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIn12YXIgSGU9RWUoT2UoKSwxKTt2YXIgcnY9RWUoT2UoKSwxKTtmdW5jdGlvbiBhbGUoZSx0KXtsZXQgcj1zY3IoZSksbj1sY3Iocix0KTtyZXR1cm4gT2JqZWN0LmtleXMobikuc29ydChpPT5uW2ldLmxldmVsKS5yZWR1Y2UoKGksbyk9PihpW29dPW5bb10saSkse30pfWZ1bmN0aW9uIGFjcihlKXtsZXQgdD1ydi5tYXAoe2RlcHRoOmUuZGVwdGgsInxWfCI6ZS5tZXRhZ3JhcGgubm9kZXMoKS5sZW5ndGgsInxFfCI6ZS5tZXRhZ3JhcGguZWRnZXMoKS5sZW5ndGh9LGZ1bmN0aW9uKG4saSl7cmV0dXJuIGkrIj0iK259KS5qb2luKCIgIikscj1ydi5tYXAoZS5vcEhpc3RvZ3JhbSxmdW5jdGlvbihuLGkpe3JldHVybiBpKyI9IitufSkuam9pbigiLCIpO3JldHVybiB0KyIgW29wc10gIityfWZ1bmN0aW9uIHNjcihlKXtsZXQgdD1lLmdldE5vZGVNYXAoKSxyPU9iamVjdC5rZXlzKHQpLnJlZHVjZSgobixpKT0+e2xldCBvPXRbaV07aWYoby50eXBlIT09anQuTUVUQSlyZXR1cm4gbjtsZXQgYT1pLnNwbGl0KCIvIikubGVuZ3RoLTEscz1hY3IobyksbD1uW3NdfHx7bm9kZXM6W10sbGV2ZWw6YX07cmV0dXJuIG5bc109bCxsLm5vZGVzLnB1c2gobyksbC5sZXZlbD5hJiYobC5sZXZlbD1hKSxufSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChuPT5bbixyW25dXSkuZmlsdGVyKChbbixpXSk9PntsZXR7bm9kZXM6b309aTtpZihvLmxlbmd0aD4xKXJldHVybiEwO2xldCBhPW9bMF07cmV0dXJuIGEudHlwZT09PWp0Lk1FVEEmJmEuYXNzb2NpYXRlZEZ1bmN0aW9ufSkuc29ydCgoW24saV0pPT5pLm5vZGVzWzBdLmRlcHRoKX1mdW5jdGlvbiBsY3IoZSx0KXtyZXR1cm4gcnYucmVkdWNlKGUsZnVuY3Rpb24obixpKXtsZXQgbz1pWzBdLGE9aVsxXS5ub2RlcyxzPVtdO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24obCl7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspaWYoIXR8fGNjcihzW2NdLm1ldGFub2RlLm1ldGFncmFwaCxsLm1ldGFncmFwaCkpe2wudGVtcGxhdGVJZD1zW2NdLm1ldGFub2RlLnRlbXBsYXRlSWQsc1tjXS5tZW1iZXJzLnB1c2gobC5uYW1lKTtyZXR1cm59bC50ZW1wbGF0ZUlkPW8rIlsiK3MubGVuZ3RoKyJdIixzLnB1c2goe21ldGFub2RlOmwsbWVtYmVyczpbbC5uYW1lXX0pfSkscy5mb3JFYWNoKGZ1bmN0aW9uKGwpe25bbC5tZXRhbm9kZS50ZW1wbGF0ZUlkXT17bGV2ZWw6aVsxXS5sZXZlbCxub2RlczpsLm1lbWJlcnN9fSksbn0se30pfWZ1bmN0aW9uIHlIKGUsdCxyKXtyZXR1cm4gcnYuc29ydEJ5KGUsW249PnQubm9kZShuKS5vcCxuPT50Lm5vZGUobikudGVtcGxhdGVJZCxuPT57dmFyIGk7cmV0dXJuKGk9dC5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+e3ZhciBpO3JldHVybihpPXQucHJlZGVjZXNzb3JzKG4pKT09bnVsbD92b2lkIDA6aS5sZW5ndGh9LG49Pnt2YXIgaTtyZXR1cm4oaT10LnN1Y2Nlc3NvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+bi5zdWJzdHIoci5sZW5ndGgpXSl9ZnVuY3Rpb24gY2NyKGUsdCl7aWYoIWlsZShlLHQpKXJldHVybiExO2xldCByPWUuZ3JhcGgoKS5uYW1lLG49dC5ncmFwaCgpLm5hbWUsaT17fSxvPXt9LGE9W107ZnVuY3Rpb24gcyh1LGgpe2xldCBmPXUuc3Vic3RyKHIubGVuZ3RoKSxwPWguc3Vic3RyKG4ubGVuZ3RoKTtyZXR1cm4gaVtmXV5vW3BdPyhjb25zb2xlLndhcm4oImRpZmZlcmVudCB2aXNpdCBwYXR0ZXJuIiwiWyIrcisiXSIsZiwiWyIrbisiXSIscCksITApOihpW2ZdfHwoaVtmXT1vW3BdPSEwLGEucHVzaCh7bjE6dSxuMjpofSkpLCExKX1sZXQgbD1lLnNvdXJjZXMoKSxjPXQuc291cmNlcygpO2lmKGwubGVuZ3RoIT09Yy5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCJkaWZmZXJlbnQgc291cmNlIGxlbmd0aCIpLCExO2w9eUgobCxlLHIpLGM9eUgoYyx0LG4pO2ZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKWlmKHMobFt1XSxjW3VdKSlyZXR1cm4hMTtmb3IoO2EubGVuZ3RoPjA7KXtsZXQgdT1hLnBvcCgpO2lmKCF1Y3IoZS5ub2RlKHU9PW51bGw/dm9pZCAwOnUubjEpLHQubm9kZSh1PT1udWxsP3ZvaWQgMDp1Lm4yKSkpcmV0dXJuITE7bGV0IGY9ZS5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjEpLHA9dC5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjIpO2lmKChmPT1udWxsP3ZvaWQgMDpmLmxlbmd0aCkhPT0ocD09bnVsbD92b2lkIDA6cC5sZW5ndGgpKXJldHVybiBjb25zb2xlLmxvZygiIyBvZiBzdWNjZXNzb3JzIG1pc21hdGNoIixmLHApLCExO2Y9eUgoZixlLHIpLHA9eUgocCx0LG4pO2ZvcihsZXQgZD0wO2Q8KGY9PW51bGw/dm9pZCAwOmYubGVuZ3RoKTtkKyspaWYocyhmPT1udWxsP3ZvaWQgMDpmW2RdLHA9PW51bGw/dm9pZCAwOnBbZF0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHVjcihlLHQpe2lmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUsbj10O3JldHVybiEhci50ZW1wbGF0ZUlkJiYhIW4udGVtcGxhdGVJZCYmci50ZW1wbGF0ZUlkPT09bi50ZW1wbGF0ZUlkfWVsc2V7aWYoZS50eXBlPT09anQuT1AmJnQudHlwZT09PWp0Lk9QKXJldHVybiBlLm9wPT09dC5vcDtpZihlLnR5cGU9PT1qdC5TRVJJRVMmJnQudHlwZT09PWp0LlNFUklFUyl7bGV0IHI9ZSxuPXQsaT1yLm1ldGFncmFwaC5ub2RlQ291bnQoKTtyZXR1cm4gaT09PW4ubWV0YWdyYXBoLm5vZGVDb3VudCgpJiYoaT09PTB8fHIubWV0YWdyYXBoLm5vZGUoci5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3A9PT1uLm1ldGFncmFwaC5ub2RlKG4ubWV0YWdyYXBoLm5vZGVzKClbMF0pLm9wKX19cmV0dXJuITF9dmFyIERkOyhmdW5jdGlvbihlKXtlW2UuVEVNUExBVEVTX1VQREFURUQ9MF09IlRFTVBMQVRFU19VUERBVEVEIn0pKERkfHwoRGQ9e30pKTt2YXIgb3M9Y2xhc3MgZXh0ZW5kcyBwSHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaGFzU2hhcGVJbmZvPSExLHRoaXMubWF4TWV0YUVkZ2VTaXplPTEsdGhpcy5ncmFwaE9wdGlvbnM9e30sdGhpcy50ZW1wbGF0ZXM9bnVsbCx0aGlzLmdyYXBoT3B0aW9ucy5jb21wb3VuZD0hMCx0aGlzLmdyYXBoT3B0aW9ucy5yYW5rZGlyPXQucmFua0RpcmVjdGlvbix0aGlzLnJvb3Q9c1AocWMsdGhpcy5ncmFwaE9wdGlvbnMpLHRoaXMubGlicmFyeUZ1bmN0aW9ucz17fSx0aGlzLnNlcmllc0dyb3VwTWFwPW5ldyBNYXAodC5zZXJpZXNNYXApLHRoaXMuZGV2aWNlcz1udWxsLHRoaXMueGxhQ2x1c3RlcnM9bnVsbCx0aGlzLnZlcmlmeVRlbXBsYXRlPXQudmVyaWZ5VGVtcGxhdGUsdGhpcy5pbmRleD17fSx0aGlzLmluZGV4W3FjXT10aGlzLnJvb3QsdGhpcy5vcmRlcmluZ3M9e319Z2V0U2VyaWVzR3JvdXBUeXBlKHQpe3ZhciByO3JldHVybihyPXRoaXMuc2VyaWVzR3JvdXBNYXAuZ2V0KHQpKSE9bnVsbD9yOmlzLkdST1VQfXNldFNlcmllc0dyb3VwVHlwZSh0LHIpe3JldHVybiB0aGlzLnNlcmllc0dyb3VwTWFwLnNldCh0LHIpfWJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpe2xldCByPXRoaXMuZ2V0U2VyaWVzR3JvdXBUeXBlKHQpPT09aXMuR1JPVVA/aXMuVU5HUk9VUDppcy5HUk9VUDtyZXR1cm4gbmV3IE1hcChbLi4udGhpcy5zZXJpZXNHcm91cE1hcCxbdCxyXV0pfWdldE5vZGVNYXAoKXtyZXR1cm4gdGhpcy5pbmRleH1ub2RlKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfXNldE5vZGUodCxyKXt0aGlzLmluZGV4W3RdPXJ9Z2V0QnJpZGdlZ3JhcGgodCl7bGV0IHI9dGhpcy5pbmRleFt0XTtpZighcil0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSBpbiBoaWVyYXJjaHk6ICIrdCk7aWYoISgibWV0YWdyYXBoImluIHIpKXJldHVybiBudWxsO2xldCBuPXI7aWYobi5icmlkZ2VncmFwaClyZXR1cm4gbi5icmlkZ2VncmFwaDtsZXQgaT1uLmJyaWRnZWdyYXBoPWUzKCJCUklER0VHUkFQSCIsZzAuQlJJREdFLHRoaXMuZ3JhcGhPcHRpb25zKTtpZighci5wYXJlbnROb2RlfHwhKCJtZXRhZ3JhcGgiaW4gci5wYXJlbnROb2RlKSlyZXR1cm4gaTtsZXQgbz1yLnBhcmVudE5vZGUsYT1vLm1ldGFncmFwaCxzPXRoaXMuZ2V0QnJpZGdlZ3JhcGgoby5uYW1lKTtyZXR1cm4gSGUuZWFjaChbYSxzXSxsPT57bC5lZGdlcygpLmZpbHRlcihjPT5jLnY9PT10fHxjLnc9PT10KS5mb3JFYWNoKGM9PntsZXQgdT1jLnc9PT10LGg9bC5lZGdlKGMpO0hlLmVhY2goaC5iYXNlRWRnZUxpc3QsZj0+e2xldFtwLGRdPXU/W2YudyxjLnZdOltmLnYsYy53XSxnPXRoaXMuZ2V0Q2hpbGROYW1lKHQscCksXz17djp1P2Q6Zyx3OnU/ZzpkfSx5PWkuZWRnZShfKTt5fHwoeT1WbHQoXy52LF8udykseS5pbmJvdW5kPXUsaS5zZXRFZGdlKF8udixfLncseSkpLHkuYWRkQmFzZUVkZ2UoZix0aGlzKX0pfSl9KSxpfWdldENoaWxkTmFtZSh0LHIpe2xldCBuPXRoaXMuaW5kZXhbcl07Zm9yKDtuOyl7aWYobi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUubmFtZT09PXQpcmV0dXJuIG4ubmFtZTtuPW4ucGFyZW50Tm9kZX10aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgaW1tZWRpYXRlIGNoaWxkIGZvciBkZXNjZW5kYW50OiAiK3IpfWdldFByZWRlY2Vzc29ycyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtsZXQgbj10aGlzLmdldE9uZVdheUVkZ2VzKHIsITApO3JldHVybiByLmlzR3JvdXBOb2RlfHxIZS5lYWNoKHIuaW5FbWJlZGRpbmdzLGk9PntIZS5lYWNoKHIuaW5wdXRzLG89PntpZihvLm5hbWU9PT1pLm5hbWUpe2xldCBhPW5ldyBxZihpLm5hbWUsdCk7YS5hZGRCYXNlRWRnZSh7aXNDb250cm9sRGVwZW5kZW5jeTpvLmlzQ29udHJvbERlcGVuZGVuY3ksb3V0cHV0VGVuc29yS2V5Om8ub3V0cHV0VGVuc29yS2V5LGlzUmVmZXJlbmNlRWRnZTohMSx2OmkubmFtZSx3OnR9LHRoaXMpLG4ucmVndWxhci5wdXNoKGEpfX0pfSksbn1nZXRTdWNjZXNzb3JzKHQpe2xldCByPXRoaXMuaW5kZXhbdF07aWYoIXIpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3QpO2xldCBuPXRoaXMuZ2V0T25lV2F5RWRnZXMociwhMSk7cmV0dXJuIHIuaXNHcm91cE5vZGV8fEhlLmVhY2goci5vdXRFbWJlZGRpbmdzLGk9PntIZS5lYWNoKGkuaW5wdXRzLG89PntpZihvLm5hbWU9PT10KXtsZXQgYT1uZXcgcWYodCxpLm5hbWUpO2EuYWRkQmFzZUVkZ2Uoe2lzQ29udHJvbERlcGVuZGVuY3k6by5pc0NvbnRyb2xEZXBlbmRlbmN5LG91dHB1dFRlbnNvcktleTpvLm91dHB1dFRlbnNvcktleSxpc1JlZmVyZW5jZUVkZ2U6ITEsdjp0LHc6aS5uYW1lfSx0aGlzKSxuLnJlZ3VsYXIucHVzaChhKX19KX0pLG59Z2V0T25lV2F5RWRnZXModCxyKXtsZXQgbj17Y29udHJvbDpbXSxyZWd1bGFyOltdfTtpZighdC5wYXJlbnROb2RlfHwhdC5wYXJlbnROb2RlLmlzR3JvdXBOb2RlKXJldHVybiBuO2xldCBpPXQucGFyZW50Tm9kZSxvPWkubWV0YWdyYXBoLGE9dGhpcy5nZXRCcmlkZ2VncmFwaChpLm5hbWUpO3JldHVybiBzbGUobyx0LHIsbiksc2xlKGEsdCxyLG4pLG59Z2V0VG9wb2xvZ2ljYWxPcmRlcmluZyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtpZighci5pc0dyb3VwTm9kZSlyZXR1cm4gbnVsbDtpZih0IGluIHRoaXMub3JkZXJpbmdzKXJldHVybiB0aGlzLm9yZGVyaW5nc1t0XTtsZXQgbj17fSxpPXt9LG89ci5tZXRhZ3JhcGg7SGUuZWFjaChvLmVkZ2VzKCksYz0+eyFvLmVkZ2UoYykubnVtUmVndWxhckVkZ2VzfHwoYy52IGluIG58fChuW2Mudl09W10pLG5bYy52XS5wdXNoKGMudyksaVtjLnddPSEwKX0pO2xldCBhPUhlLmRpZmZlcmVuY2UoSGUua2V5cyhuKSxIZS5rZXlzKGkpKSxzPXRoaXMub3JkZXJpbmdzW3RdPXt9LGw9MDtmb3IoO2EubGVuZ3RoOyl7bGV0IGM9YS5zaGlmdCgpO3NbY109bCsrLEhlLmVhY2gobltjXSx1PT5hLnB1c2godSkpLGRlbGV0ZSBuW2NdfXJldHVybiBzfWdldFRlbXBsYXRlSW5kZXgoKXtpZighdGhpcy50ZW1wbGF0ZXMpcmV0dXJuIG51bGw7bGV0IHQ9WEwodGhpcy50ZW1wbGF0ZXMpO2lmKCF0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgcj1ndSgpLmRvbWFpbih0KS5yYW5nZShJcigwLHQubGVuZ3RoKSk7cmV0dXJuIG49PnIobil9dXBkYXRlVGVtcGxhdGVzKCl7UmQoIkZpbmRpbmcgc2ltaWxhciBzdWJncmFwaHMiLCgpPT57dGhpcy50ZW1wbGF0ZXM9YWxlKHRoaXMsdGhpcy52ZXJpZnlUZW1wbGF0ZSksdGhpcy5kaXNwYXRjaEV2ZW50KERkLlRFTVBMQVRFU19VUERBVEVEKX0sanIuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMpfX07ZnVuY3Rpb24gc2xlKGUsdCxyLG4pe2xldCBpPXI/ZS5pbkVkZ2VzKHQubmFtZSk6ZS5vdXRFZGdlcyh0Lm5hbWUpO0hlLmVhY2goaSxvPT57bGV0IGE9ZS5lZGdlKG8pOyhhLm51bVJlZ3VsYXJFZGdlcz9uLnJlZ3VsYXI6bi5jb250cm9sKS5wdXNoKGEpfSl9dmFyIHIzPXt2ZXJpZnlUZW1wbGF0ZTohMCxzZXJpZXNOb2RlTWluU2l6ZTo1LHNlcmllc01hcDpuZXcgTWFwLHJhbmtEaXJlY3Rpb246IkJUIix1c2VHZW5lcmFsaXplZFNlcmllc1BhdHRlcm5zOiExfTtmdW5jdGlvbiB4SChlLHQscil7bGV0IG49bmV3IG9zKHQpLGk9e307cmV0dXJuIGV2KCJBZGRpbmcgbm9kZXMiLDMwLCgpPT57bGV0IG89e30sYT17fTtIZS5lYWNoKGUubm9kZXMsKHMsbCk9PntzLmRldmljZSYmKG9bcy5kZXZpY2VdPSEwKSxzLnhsYUNsdXN0ZXImJihhW3MueGxhQ2x1c3Rlcl09ITApfSksbi5kZXZpY2VzPUhlLmtleXMobyksbi54bGFDbHVzdGVycz1IZS5rZXlzKGEpLGZjcihuLGUpfSxyLGpyLkhJRVJBUkNIWV9BRERfTk9ERVMpLnRoZW4oKCk9PmV2KCJEZXRlY3Qgc2VyaWVzIiwzMCwoKT0+e3Quc2VyaWVzTm9kZU1pblNpemU+MCYmdWxlKG4ucm9vdCxuLGksdC5zZXJpZXNOb2RlTWluU2l6ZSx0LnNlcmllc01hcCx0LnVzZUdlbmVyYWxpemVkU2VyaWVzUGF0dGVybnMpfSxyLGpyLkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTKSkudGhlbigoKT0+ZXYoIkFkZGluZyBlZGdlcyIsNDAsKCk9PntwY3IobixlLGkpfSxyLGpyLkhJRVJBUkNIWV9BRERfRURHRVMpKS50aGVuKCgpPT5uKX1mdW5jdGlvbiBsbGUoZSx0KXtsZXQgcj17fSxuPXt9O0hlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSk7by5kZXZpY2UhPW51bGwmJihyW28uZGV2aWNlXT0hMCksby54bGFDbHVzdGVyIT1udWxsJiYobltvLnhsYUNsdXN0ZXJdPSEwKX0pLGUuZGV2aWNlcz1IZS5rZXlzKHIpLGUueGxhQ2x1c3RlcnM9SGUua2V5cyhuKSxIZS5lYWNoKGUuZ2V0Tm9kZU1hcCgpLChpLG8pPT57aS5pc0dyb3VwTm9kZSYmKGkuc3RhdHM9bmV3IEtTKG51bGwpLGkuZGV2aWNlSGlzdG9ncmFtPXt9KX0pLEhlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSksYT1vO2Zvcig7YS5wYXJlbnROb2RlIT1udWxsOyl7aWYoby5kZXZpY2UhPW51bGwpe2xldCBzPWEucGFyZW50Tm9kZS5kZXZpY2VIaXN0b2dyYW07c1tvLmRldmljZV09KHNbby5kZXZpY2VdfHwwKSsxfWlmKG8ueGxhQ2x1c3RlciE9bnVsbCl7bGV0IHM9YS5wYXJlbnROb2RlLnhsYUNsdXN0ZXJIaXN0b2dyYW07c1tvLnhsYUNsdXN0ZXJdPShzW28ueGxhQ2x1c3Rlcl18fDApKzF9by5zdGF0cyE9bnVsbCYmYS5wYXJlbnROb2RlLnN0YXRzLmNvbWJpbmUoby5zdGF0cyksYT1hLnBhcmVudE5vZGV9fSl9ZnVuY3Rpb24gY2xlKGUpe2xldCB0PVtdLHI9e307cmV0dXJuIEhlLmVhY2goZS5yb290LmxlYXZlcygpLG49PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT1qdC5PUCl7bGV0IG89aTtpZighby5jb21wYXRpYmxlKWlmKG8ub3duaW5nU2VyaWVzKXtpZihlLmdldFNlcmllc0dyb3VwVHlwZShvLm93bmluZ1Nlcmllcyk9PT1pcy5VTkdST1VQKXQucHVzaChvKTtlbHNlIGlmKCFyW28ub3duaW5nU2VyaWVzXSl7bGV0IGE9ZS5ub2RlKG8ub3duaW5nU2VyaWVzKTthJiYocltvLm93bmluZ1Nlcmllc109YSx0LnB1c2goYSkpfX1lbHNlIHQucHVzaChvKTtIZS5lYWNoKG8uaW5FbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pLEhlLmVhY2goby5vdXRFbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pfX0pLHR9ZnVuY3Rpb24gZmNyKGUsdCl7bGV0IHI9e307SGUuZWFjaCh0Lm5vZGVzLChuLGkpPT57bGV0IG89bFAobi5uYW1lKSxhPWUucm9vdDthLmRlcHRoPU1hdGgubWF4KG8ubGVuZ3RoLGEuZGVwdGgpLHJbbi5vcF18fChyW24ub3BdPVtdKSxyW24ub3BdLnB1c2gobik7Zm9yKGxldCBzPTA7czxvLmxlbmd0aCYmKGEuZGVwdGg9TWF0aC5tYXgoYS5kZXB0aCxvLmxlbmd0aC1zKSxhLmNhcmRpbmFsaXR5Kz1uLmNhcmRpbmFsaXR5LGEub3BIaXN0b2dyYW1bbi5vcF09KGEub3BIaXN0b2dyYW1bbi5vcF18fDApKzEsbi5kZXZpY2UhPW51bGwmJihhLmRldmljZUhpc3RvZ3JhbVtuLmRldmljZV09KGEuZGV2aWNlSGlzdG9ncmFtW24uZGV2aWNlXXx8MCkrMSksbi54bGFDbHVzdGVyIT1udWxsJiYoYS54bGFDbHVzdGVySGlzdG9ncmFtW24ueGxhQ2x1c3Rlcl09KGEueGxhQ2x1c3Rlckhpc3RvZ3JhbVtuLnhsYUNsdXN0ZXJdfHwwKSsxKSxuLmNvbXBhdGlibGU/YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOmEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChuLmluRW1iZWRkaW5ncyx1PT57dS5jb21wYXRpYmxlP2EuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTphLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChuLm91dEVtYmVkZGluZ3MsdT0+e3UuY29tcGF0aWJsZT9hLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLHMhPT1vLmxlbmd0aC0xKTtzKyspe2xldCBsPW9bc10sYz1lLm5vZGUobCk7aWYoIWMmJihjPXNQKGwsZS5ncmFwaE9wdGlvbnMpLGMucGFyZW50Tm9kZT1hLGUuc2V0Tm9kZShsLGMpLGEubWV0YWdyYXBoLnNldE5vZGUobCxjKSxsLmluZGV4T2YoU2EpPT09MCYmYS5uYW1lPT09cWMpKXtsZXQgdT1sLnN1YnN0cmluZyhTYS5sZW5ndGgpO3JbdV18fChyW3VdPVtdKSxlLmxpYnJhcnlGdW5jdGlvbnNbdV09e25vZGU6Yyx1c2FnZXM6clt1XX0sYy5hc3NvY2lhdGVkRnVuY3Rpb249dX1hPWN9ZS5zZXROb2RlKG4ubmFtZSxuKSxuLnBhcmVudE5vZGU9YSxhLm1ldGFncmFwaC5zZXROb2RlKG4ubmFtZSxuKSxIZS5lYWNoKG4uaW5FbWJlZGRpbmdzLGZ1bmN0aW9uKHMpe2Uuc2V0Tm9kZShzLm5hbWUscykscy5wYXJlbnROb2RlPW59KSxIZS5lYWNoKG4ub3V0RW1iZWRkaW5ncyxmdW5jdGlvbihzKXtlLnNldE5vZGUocy5uYW1lLHMpLHMucGFyZW50Tm9kZT1ufSl9KX1mdW5jdGlvbiBwY3IoZSx0LHIpe2xldCBuPWUuZ2V0Tm9kZU1hcCgpLGk9W10sbz1bXSxhPShzLGwpPT57bGV0IGM9MDtmb3IoO3M7KWxbYysrXT1zLm5hbWUscz1zLnBhcmVudE5vZGU7cmV0dXJuIGMtMX07SGUuZWFjaCh0LmVkZ2VzLHM9PntsZXQgbD1hKHQubm9kZXNbcy52XSxpKSxjPWEodC5ub2Rlc1tzLnddLG8pO2lmKGw9PT0tMXx8Yz09PS0xKXJldHVybjtmb3IoO2lbbF09PT1vW2NdOylpZihsLS0sYy0tLGw8MHx8YzwwKXRocm93IEVycm9yKCJObyBkaWZmZXJlbmNlIGZvdW5kIGJldHdlZW4gYW5jZXN0b3IgcGF0aHMuIik7bGV0IHU9bltpW2wrMV1dLGg9aVtsXSxmPW9bY10scD11Lm1ldGFncmFwaC5lZGdlKGgsZik7cHx8KHA9Vmx0KGgsZiksdS5tZXRhZ3JhcGguc2V0RWRnZShoLGYscCkpLCF1Lmhhc05vbkNvbnRyb2xFZGdlcyYmIXMuaXNDb250cm9sRGVwZW5kZW5jeSYmKHUuaGFzTm9uQ29udHJvbEVkZ2VzPSEwKSxwLmFkZEJhc2VFZGdlKHMsZSl9KX1mdW5jdGlvbiB1bGUoZSx0LHIsbixpLG8pe2xldCBhPWUubWV0YWdyYXBoO0hlLmVhY2goYS5ub2RlcygpLHU9PntsZXQgaD1hLm5vZGUodSk7aC50eXBlPT09anQuTUVUQSYmdWxlKGgsdCxyLG4saSxvKX0pO2xldCBzPWRjcihhKSxjPShvP2djcjptY3IpKHMsYSx0LmdyYXBoT3B0aW9ucyk7SGUuZWFjaChjLGZ1bmN0aW9uKHUsaCl7bGV0IGY9dS5tZXRhZ3JhcGgubm9kZXMoKTtIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTtkLm93bmluZ1Nlcmllc3x8KGQub3duaW5nU2VyaWVzPWgpfSksZi5sZW5ndGg8biYmdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKT09PWlzLkdST1VQJiZ0LnNldFNlcmllc0dyb3VwVHlwZSh1Lm5hbWUsaXMuVU5HUk9VUCksdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKSE9PWlzLlVOR1JPVVAmJih0LnNldE5vZGUoaCx1KSxhLnNldE5vZGUoaCx1KSxIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTt1Lm1ldGFncmFwaC5zZXROb2RlKHAsZCksdS5wYXJlbnROb2RlPWQucGFyZW50Tm9kZSx1LmNhcmRpbmFsaXR5KyssZC5kZXZpY2UhPW51bGwmJih1LmRldmljZUhpc3RvZ3JhbVtkLmRldmljZV09KHUuZGV2aWNlSGlzdG9ncmFtW2QuZGV2aWNlXXx8MCkrMSksZC54bGFDbHVzdGVyIT1udWxsJiYodS54bGFDbHVzdGVySGlzdG9ncmFtW2QueGxhQ2x1c3Rlcl09KHUueGxhQ2x1c3Rlckhpc3RvZ3JhbVtkLnhsYUNsdXN0ZXJdfHwwKSsxKSxkLmNvbXBhdGlibGU/dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOnUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChkLmluRW1iZWRkaW5ncyxnPT57Zy5jb21wYXRpYmxlP3UuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTp1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChkLm91dEVtYmVkZGluZ3MsZz0+e2cuY29tcGF0aWJsZT91LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLGQucGFyZW50Tm9kZT11LHJbcF09aCxhLnJlbW92ZU5vZGUocCl9KSl9KX1mdW5jdGlvbiBkY3IoZSl7bGV0IHQ9e307cmV0dXJuIEhlLnJlZHVjZShlLm5vZGVzKCksKHIsbik9PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT09anQuTUVUQSlyZXR1cm4gcjtsZXQgbz1pLm9wO3JldHVybiBvJiYocltvXT1yW29dfHxbXSxyW29dLnB1c2goaS5uYW1lKSkscn0sdCl9ZnVuY3Rpb24gbWNyKGUsdCxyKXtsZXQgbj17fTtyZXR1cm4gSGUuZWFjaChlLGZ1bmN0aW9uKGksbyl7aWYoaS5sZW5ndGg8PTEpcmV0dXJuO2xldCBhPXt9O0hlLmVhY2goaSxmdW5jdGlvbihzKXtsZXQgbD1zLmNoYXJBdChzLmxlbmd0aC0xKT09PSIqIixjPXMuc3BsaXQoIi8iKSx1PWNbYy5sZW5ndGgtMV0saD1jLnNsaWNlKDAsYy5sZW5ndGgtMSkuam9pbigiLyIpLGY9dS5tYXRjaCgvXihcRCopKFxkKykkLykscCxkLGc9IiI7Zj8ocD1mWzFdLGQ9ZlsyXSk6KHA9bD91LnN1YnN0cigwLHUubGVuZ3RoLTEpOnUsZD0wLGc9bD8iKiI6IiIpO2xldCBfPXQzKHAsZyxoKTthW19dPWFbX118fFtdO2xldCB5PVFTKHAsZyxoLCtkLHMscik7YVtfXS5wdXNoKHkpfSksSGUuZWFjaChhLGZ1bmN0aW9uKHMsbCl7aWYocy5sZW5ndGg8MilyZXR1cm47cy5zb3J0KGZ1bmN0aW9uKHUsaCl7cmV0dXJuK3UuY2x1c3RlcklkLStoLmNsdXN0ZXJJZH0pO2xldCBjPVtzWzBdXTtmb3IobGV0IHU9MTt1PHMubGVuZ3RoO3UrKyl7bGV0IGg9c1t1XTtpZihoLmNsdXN0ZXJJZD09PWNbYy5sZW5ndGgtMV0uY2x1c3RlcklkKzEpe2MucHVzaChoKTtjb250aW51ZX12SChjLG4sK28sdCxyKSxjPVtoXX12SChjLG4sK28sdCxyKX0pfSksbn1mdW5jdGlvbiBnY3IoZSx0LHIpe2xldCBuPXt9O3JldHVybiBIZS5lYWNoKGUsZnVuY3Rpb24oaSxvKXtpZihpLmxlbmd0aDw9MSlyZXR1cm47bGV0IGE9e30scz17fTtIZS5lYWNoKGksZnVuY3Rpb24oYyl7bGV0IHU9Yy5jaGFyQXQoYy5sZW5ndGgtMSk9PT0iKiIsaD1jLnNwbGl0KCIvIiksZj1oW2gubGVuZ3RoLTFdLHA9aC5zbGljZSgwLGgubGVuZ3RoLTEpLmpvaW4oIi8iKSxkPS8oXGQrKS9nLGc9W10sXyx5LHgsYixTLEM9MDtmb3IoO189ZC5leGVjKGYpOykrK0MseT1mLnNsaWNlKDAsXy5pbmRleCkseD1fWzBdLGI9Zi5zbGljZShfLmluZGV4K19bMF0ubGVuZ3RoKSxTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSk7QzwxJiYoeT11P2Yuc3Vic3RyKDAsZi5sZW5ndGgtMSk6Zix4PTAsYj11PyIqIjoiIixTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSkpfSk7dmFyIGw9e307SGUuZWFjaChzLGZ1bmN0aW9uKGMsdSl7Yy5zb3J0KGZ1bmN0aW9uKHkseCl7cmV0dXJuIGFbeFswXV0uaWRzLmxlbmd0aC1hW3lbMF1dLmlkcy5sZW5ndGh9KTt2YXIgaD1jWzBdWzBdLGY9Y1swXVsxXTtsW2hdPWxbaF18fFtdO2xldCBwPXUuc3BsaXQoIi8iKSxkPXBbcC5sZW5ndGgtMV0sZz1wLnNsaWNlKDAscC5sZW5ndGgtMSkuam9pbigiLyIpO3ZhciBfPVFTKGFbaF0ucHJlZml4LGFbaF0uc3VmZml4LGcsK2YsdSxyKTtsW2hdLnB1c2goXyl9KSxIZS5lYWNoKGwsZnVuY3Rpb24oYyx1KXtpZihjLmxlbmd0aDwyKXJldHVybjtjLnNvcnQoZnVuY3Rpb24oZixwKXtyZXR1cm4rZi5jbHVzdGVySWQtK3AuY2x1c3RlcklkfSk7bGV0IGg9W2NbMF1dO2ZvcihsZXQgZj0xO2Y8Yy5sZW5ndGg7ZisrKXtsZXQgcD1jW2ZdO2lmKHAuY2x1c3RlcklkPT09aFtoLmxlbmd0aC0xXS5jbHVzdGVySWQrMSl7aC5wdXNoKHApO2NvbnRpbnVlfXZIKGgsbiwrbyx0LHIpLGg9W3BdfXZIKGgsbiwrbyx0LHIpfSl9KSxufWZ1bmN0aW9uIHZIKGUsdCxyLG4saSl7aWYoZS5sZW5ndGg+MSl7bGV0IG89dDMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQsZVswXS5jbHVzdGVySWQsZVtlLmxlbmd0aC0xXS5jbHVzdGVySWQpLGE9UVMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQscixvLGkpO0hlLmVhY2goZSxmdW5jdGlvbihzKXthLmlkcy5wdXNoKHMuY2x1c3RlcklkKSxhLm1ldGFncmFwaC5zZXROb2RlKHMubmFtZSxuLm5vZGUocy5uYW1lKSl9KSx0W29dPWF9fXZhciBtZT1FZShPZSgpLDEpO3ZhciB5MD17REVGQVVMVF9GSUxMOiIjZmZmZmZmIixERUZBVUxUX1NUUk9LRToiI2IyYjJiMiIsQ09NUEFUSUJMRToiIzBmOWQ1OCIsSU5DT01QQVRJQkxFOiIjZGI0NDM3In0sS3U9e0RFRkFVTFRfRklMTDoiI2Q5ZDlkOSIsREVGQVVMVF9TVFJPS0U6IiNhNmE2YTYiLFNBVFVSQVRJT046LjYsTElHSFRORVNTOi44NSxFWFBBTkRFRF9DT0xPUjoiI2YwZjBmMCIsSFVFUzpbMjIwLDEwMCwxODAsNDAsMjAsMzQwLDI2MCwzMDAsMTQwLDYwXSxTVFJVQ1RVUkVfUEFMRVRURShlLHQpe2xldCByPUt1LkhVRVMsbj1yLmxlbmd0aCxpPXJbZSVuXSxvPU1hdGguc2luKGkqTWF0aC5QSS8zNjApLGE9dD8zMDo5MC02MCpvLHM9dD85NTo4MDtyZXR1cm4gVm0oaSwuMDEqYSwuMDEqcykudG9TdHJpbmcoKX0sREVWSUNFX1BBTEVUVEUoZSl7cmV0dXJuIEt1LlNUUlVDVFVSRV9QQUxFVFRFKGUpfSxYTEFfQ0xVU1RFUl9QQUxFVFRFKGUpe3JldHVybiBLdS5TVFJVQ1RVUkVfUEFMRVRURShlKX0sVU5LTk9XTjoiI2VlZSIsR1JBRElFTlRfT1VUTElORToiIzg4OCJ9LFVsdD17REVGQVVMVF9GSUxMOiJ3aGl0ZSIsREVGQVVMVF9TVFJPS0U6IiNiMmIyYjIifSxYbz17bWluTm9kZUNvdW50Rm9yRXh0cmFjdGlvbjoxNSxtaW5EZWdyZWVGb3JFeHRyYWN0aW9uOjUsbWF4Q29udHJvbERlZ3JlZTo0LG1heEJyaWRnZVBhdGhEZWdyZWU6NCxvdXRFeHRyYWN0VHlwZXM6WyJOb09wIl0saW5FeHRyYWN0VHlwZXM6W10sZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlOiEwLGV4dHJhY3RJc29sYXRlZE5vZGVzV2l0aEFubm90YXRpb25zT25PbmVTaWRlOiEwLGVuYWJsZUJyaWRnZWdyYXBoOiEwLG1pbk1heENvbG9yczpbIiNmZmY1ZjAiLCIjZmI2YTRhIl0sbWF4QW5ub3RhdGlvbnM6NX0sX2NyPW5ldyBSZWdFeHAoIl4oPzoiK1NhKyIpPyhcXHcrKV9bYS16MC05XXs4fSg/Ol9cXGQrKT8kIiksbG89Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuaGllcmFyY2h5PXQsdGhpcy5kaXNwbGF5aW5nU3RhdHM9cix0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9bix0aGlzLmluZGV4PXt9LHRoaXMucmVuZGVyZWRPcE5hbWVzPVtdLHRoaXMuY29tcHV0ZVNjYWxlcygpLHRoaXMuaGFzU3ViaGllcmFyY2h5PXt9LHRoaXMucm9vdD1uZXcgd0godC5yb290LHQuZ3JhcGhPcHRpb25zKSx0aGlzLmluZGV4W3Qucm9vdC5uYW1lXT10aGlzLnJvb3QsdGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaCh0LnJvb3QubmFtZSksdGhpcy5idWlsZFN1YmhpZXJhcmNoeSh0LnJvb3QubmFtZSksdGhpcy5yb290LmV4cGFuZGVkPSEwLHRoaXMudHJhY2VJbnB1dHM9ITF9Y29tcHV0ZVNjYWxlcygpe3RoaXMuZGV2aWNlQ29sb3JNYXA9Z3UoKS5kb21haW4odGhpcy5oaWVyYXJjaHkuZGV2aWNlcykucmFuZ2UobWUubWFwKElyKHRoaXMuaGllcmFyY2h5LmRldmljZXMubGVuZ3RoKSxLdS5ERVZJQ0VfUEFMRVRURSkpLHRoaXMueGxhQ2x1c3RlckNvbG9yTWFwPWd1KCkuZG9tYWluKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzKS5yYW5nZShtZS5tYXAoSXIodGhpcy5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RoKSxLdS5YTEFfQ0xVU1RFUl9QQUxFVFRFKSk7bGV0IHQ9dGhpcy5oaWVyYXJjaHkucm9vdC5tZXRhZ3JhcGgscj1sdSh0Lm5vZGVzKCksKGksbyk9PntsZXQgYT10Lm5vZGUoaSk7aWYoYS5zdGF0cyE9bnVsbClyZXR1cm4gYS5zdGF0cy50b3RhbEJ5dGVzfSk7dGhpcy5tZW1vcnlVc2FnZVNjYWxlPXpuKCkuZG9tYWluKFswLHJdKS5yYW5nZShYby5taW5NYXhDb2xvcnMpO2xldCBuPWx1KHQubm9kZXMoKSwoaSxvKT0+e2xldCBhPXQubm9kZShpKTtpZihhLnN0YXRzIT1udWxsKXJldHVybiBhLnN0YXRzLmdldFRvdGFsTWljcm9zKCl9KTt0aGlzLmNvbXB1dGVUaW1lU2NhbGU9em4oKS5kb21haW4oWzAsbl0pLnJhbmdlKFhvLm1pbk1heENvbG9ycyksdGhpcy5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGU9dGhpcy5oaWVyYXJjaHkuaGFzU2hhcGVJbmZvP3FzZTp6bigpLmRvbWFpbihbMSx0aGlzLmhpZXJhcmNoeS5tYXhNZXRhRWRnZVNpemVdKS5yYW5nZShbSjQsUTRdKX1nZXRSZW5kZXJOb2RlQnlOYW1lKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfWdldE5vZGVCeU5hbWUodCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Lm5vZGUodCl9Y29sb3JIaXN0b2dyYW0odCxyKXtpZihPYmplY3Qua2V5cyh0KS5sZW5ndGg+MCl7bGV0IG49bWUuc3VtKE9iamVjdC5rZXlzKHQpLm1hcChpPT50W2ldKSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChpPT4oe2NvbG9yOnIoaSkscHJvcG9ydGlvbjp0W2ldL259KSl9cmV0dXJuIG51bGx9Z2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQgaW4gdGhpcy5pbmRleClyZXR1cm4gdGhpcy5pbmRleFt0XTtsZXQgcj10aGlzLmhpZXJhcmNoeS5ub2RlKHQpO2lmKCFyKXJldHVybiBudWxsO2xldCBuPXIuaXNHcm91cE5vZGU/bmV3IHdIKHIsdGhpcy5oaWVyYXJjaHkuZ3JhcGhPcHRpb25zKTpuZXcgR2Yocik7dGhpcy5pbmRleFt0XT1uLHRoaXMucmVuZGVyZWRPcE5hbWVzLnB1c2godCksci5zdGF0cyYmKG4ubWVtb3J5Q29sb3I9dGhpcy5tZW1vcnlVc2FnZVNjYWxlKHIuc3RhdHMudG90YWxCeXRlcyksbi5jb21wdXRlVGltZUNvbG9yPXRoaXMuY29tcHV0ZVRpbWVTY2FsZShyLnN0YXRzLmdldFRvdGFsTWljcm9zKCkpKSxuLmlzRmFkZWRPdXQ9dGhpcy5kaXNwbGF5aW5nU3RhdHMmJiFtSChyLnN0YXRzKTt2YXIgaT1udWxsLG89bnVsbCxhPW51bGw7aWYoci5pc0dyb3VwTm9kZSl7aT1yLmRldmljZUhpc3RvZ3JhbSxvPXIueGxhQ2x1c3Rlckhpc3RvZ3JhbTtsZXQgcz1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxsPXIuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7KHMhPTB8fGwhPTApJiYoYT1zLyhzK2wpKX1lbHNle2xldCBzPW4ubm9kZS5kZXZpY2U7cyYmKGk9e1tzXToxfSk7bGV0IGw9bi5ub2RlLnhsYUNsdXN0ZXI7bCYmKG89e1tsXToxfSksbi5ub2RlLnR5cGU9PT1qdC5PUCYmKGE9bi5ub2RlLmNvbXBhdGlibGU/MTowKX1yZXR1cm4gaSYmKG4uZGV2aWNlQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0oaSx0aGlzLmRldmljZUNvbG9yTWFwKSksbyYmKG4ueGxhQ2x1c3RlckNvbG9ycz10aGlzLmNvbG9ySGlzdG9ncmFtKG8sdGhpcy54bGFDbHVzdGVyQ29sb3JNYXApKSxhIT1udWxsJiYobi5jb21wYXRpYmlsaXR5Q29sb3JzPVt7Y29sb3I6eTAuQ09NUEFUSUJMRSxwcm9wb3J0aW9uOmF9LHtjb2xvcjp5MC5JTkNPTVBBVElCTEUscHJvcG9ydGlvbjoxLWF9XSksdGhpcy5pbmRleFt0XX1nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpe2xldCByPWxQKHQpLG49MCxpPW51bGwsbz10O2Zvcig7bjxyLmxlbmd0aCYmKG89cltuXSxpPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKSwhIWkuZXhwYW5kZWQpO24rKyk7aWYobj09ci5sZW5ndGgtMil7bGV0IGE9cltuKzFdO2lmKGkhPW51bGwmJmkuaW5Bbm5vdGF0aW9ucy5ub2RlTmFtZXNbYV18fGkhPW51bGwmJmkub3V0QW5ub3RhdGlvbnMubm9kZU5hbWVzW2FdKXJldHVybiBhfXJldHVybiBvfXNldERlcHRoKHQpe3BsZSh0aGlzLnJvb3QsK3QpfWlzTm9kZUF1eGlsaWFyeSh0KXtsZXQgcj10aGlzLmdldFJlbmRlck5vZGVCeU5hbWUodC5ub2RlLnBhcmVudE5vZGUubmFtZSksbj1tZS5maW5kKHIuaXNvbGF0ZWRJbkV4dHJhY3QsaT0+aS5ub2RlLm5hbWU9PT10Lm5vZGUubmFtZSk7cmV0dXJuIG4/ITA6KG49bWUuZmluZChyLmlzb2xhdGVkT3V0RXh0cmFjdCxpPT5pLm5vZGUubmFtZT09PXQubm9kZS5uYW1lKSwhIW4pfWdldE5hbWVzT2ZSZW5kZXJlZE9wcygpe3JldHVybiB0aGlzLnJlbmRlcmVkT3BOYW1lc31jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHQscixuLGkpe2xldCBvPW4ubmFtZS5yZXBsYWNlKHIsaSksYT10Lm1ldGFncmFwaC5ub2RlKG8pO2lmKGEpcmV0dXJuIGE7YT1uZXcgXzAoe25hbWU6byxpbnB1dDpbXSxkZXZpY2U6bi5kZXZpY2Usb3A6bi5vcCxhdHRyOm1lLmNsb25lRGVlcChuLmF0dHIpfSksYS5jYXJkaW5hbGl0eT1uLmNhcmRpbmFsaXR5LGEuaW5jbHVkZT1uLmluY2x1ZGUsYS5vdXRwdXRTaGFwZXM9bWUuY2xvbmVEZWVwKG4ub3V0cHV0U2hhcGVzKSxhLnhsYUNsdXN0ZXI9bi54bGFDbHVzdGVyLGEuZnVuY3Rpb25JbnB1dEluZGV4PW4uZnVuY3Rpb25JbnB1dEluZGV4LGEuZnVuY3Rpb25PdXRwdXRJbmRleD1uLmZ1bmN0aW9uT3V0cHV0SW5kZXgsYS5pbnB1dHM9bi5pbnB1dHMubWFwKGw9PntsZXQgYz1tZS5jbG9uZShsKTtyZXR1cm4gYy5uYW1lPWwubmFtZS5yZXBsYWNlKHIsaSksY30pLGEucGFyZW50Tm9kZT10LHQubWV0YWdyYXBoLnNldE5vZGUoYS5uYW1lLGEpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUoYS5uYW1lLGEpO2xldCBzPWw9PnRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZSh0LHIsbCxpKTtyZXR1cm4gYS5pbkVtYmVkZGluZ3M9bi5pbkVtYmVkZGluZ3MubWFwKHMpLGEub3V0RW1iZWRkaW5ncz1uLm91dEVtYmVkZGluZ3MubWFwKHMpLGF9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZSh0LHIsbixpLG8pe2xldCBhPXt9LHM9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKHQscixuLGksbyxhKTtyZXR1cm4gbWUuaXNFbXB0eShhKXx8dGhpcy5wYXRjaEVkZ2VzRnJvbUZ1bmN0aW9uT3V0cHV0cyhyLGEpLHN9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcih0LHIsbixpLG8sYSl7bGV0IHM9c1Aobi5uYW1lLnJlcGxhY2UoaSxvKSk7cmV0dXJuIHMuZGVwdGg9bi5kZXB0aCxzLmNhcmRpbmFsaXR5PW4uY2FyZGluYWxpdHkscy50ZW1wbGF0ZUlkPW4udGVtcGxhdGVJZCxzLm9wSGlzdG9ncmFtPW1lLmNsb25lKG4ub3BIaXN0b2dyYW0pLHMuZGV2aWNlSGlzdG9ncmFtPW1lLmNsb25lKG4uZGV2aWNlSGlzdG9ncmFtKSxzLnhsYUNsdXN0ZXJIaXN0b2dyYW09bWUuY2xvbmUobi54bGFDbHVzdGVySGlzdG9ncmFtKSxzLmhhc05vbkNvbnRyb2xFZGdlcz1uLmhhc05vbkNvbnRyb2xFZGdlcyxzLmluY2x1ZGU9bi5pbmNsdWRlLHMubm9kZUF0dHJpYnV0ZXM9bWUuY2xvbmUobi5ub2RlQXR0cmlidXRlcykscy5hc3NvY2lhdGVkRnVuY3Rpb249bi5hc3NvY2lhdGVkRnVuY3Rpb24sbWUuZWFjaChuLm1ldGFncmFwaC5ub2RlcygpLGw9PntsZXQgYz1uLm1ldGFncmFwaC5ub2RlKGwpO3N3aXRjaChjLnR5cGUpe2Nhc2UganQuTUVUQTpsZXQgdT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIodCxyLGMsaSxvLGEpO3UucGFyZW50Tm9kZT1zLHMubWV0YWdyYXBoLnNldE5vZGUodS5uYW1lLHUpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUodS5uYW1lLHUpO2JyZWFrO2Nhc2UganQuT1A6bGV0IGg9dGhpcy5jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHMsaSxjLG8pO21lLmlzTnVtYmVyKGguZnVuY3Rpb25JbnB1dEluZGV4KSYmdGhpcy5wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHIsaCksbWUuaXNOdW1iZXIoaC5mdW5jdGlvbk91dHB1dEluZGV4KSYmKGFbaC5mdW5jdGlvbk91dHB1dEluZGV4XT1oKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihjLm5hbWUrIiBpcyBvZGRseSBuZWl0aGVyIGEgbWV0YW5vZGUgbm9yIGFuIG9wbm9kZS4iKX19KSx0aGlzLmNsb25lTGlicmFyeU1ldGFub2RlRWRnZXMobixzLGksbyksc31jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKHQscixuLGkpe21lLmVhY2godC5tZXRhZ3JhcGguZWRnZXMoKSxvPT57bGV0IGE9dC5tZXRhZ3JhcGguZWRnZShvKSxzPWEudi5yZXBsYWNlKG4saSksbD1hLncucmVwbGFjZShuLGkpLGM9bmV3IHFmKHMsbCk7Yy5pbmJvdW5kPWEuaW5ib3VuZCxjLm51bVJlZ3VsYXJFZGdlcz1hLm51bVJlZ3VsYXJFZGdlcyxjLm51bUNvbnRyb2xFZGdlcz1hLm51bUNvbnRyb2xFZGdlcyxjLm51bVJlZkVkZ2VzPWEubnVtUmVmRWRnZXMsYy50b3RhbFNpemU9YS50b3RhbFNpemUsYS5iYXNlRWRnZUxpc3QmJihjLmJhc2VFZGdlTGlzdD1hLmJhc2VFZGdlTGlzdC5tYXAodT0+e2xldCBoPW1lLmNsb25lKHUpO3JldHVybiBoLnY9dS52LnJlcGxhY2UobixpKSxoLnc9dS53LnJlcGxhY2UobixpKSxofSkpLHIubWV0YWdyYXBoLm5vZGUobCk/ci5tZXRhZ3JhcGguc2V0RWRnZShzLGwsYyk6ci5tZXRhZ3JhcGguc2V0RWRnZShsLHMsYyl9KX1wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHQscil7bGV0IG49TWF0aC5taW4oci5mdW5jdGlvbklucHV0SW5kZXgsdC5pbnB1dHMubGVuZ3RoLTEpLGk9bWUuY2xvbmUodC5pbnB1dHNbbl0pO2Zvcig7aS5pc0NvbnRyb2xEZXBlbmRlbmN5OyluKyssaT10LmlucHV0c1tuXTtyLmlucHV0cy5wdXNoKGkpO2xldCBvPXRoaXMuaGllcmFyY2h5LmdldFByZWRlY2Vzc29ycyh0Lm5hbWUpLGEscz0wO21lLmVhY2goby5yZWd1bGFyLGw9PntpZihzKz1sLm51bVJlZ3VsYXJFZGdlcyxzPm4pcmV0dXJuIGE9bCwhMX0pLG1lLmVhY2goYS5iYXNlRWRnZUxpc3QsbD0+e2wudz09PXQubmFtZSYmKGwudz1yLm5hbWUpLGwudj09PXQubmFtZSYmKGwudj1yLm5hbWUpfSl9cGF0Y2hFZGdlc0Zyb21GdW5jdGlvbk91dHB1dHModCxyKXtsZXQgbj10aGlzLmhpZXJhcmNoeS5nZXRTdWNjZXNzb3JzKHQubmFtZSk7bWUuZWFjaChuLnJlZ3VsYXIsaT0+e21lLmVhY2goaS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPXRoaXMuaGllcmFyY2h5Lm5vZGUoby53KTttZS5lYWNoKGEuaW5wdXRzLHM9PntpZihzLm5hbWU9PT10Lm5hbWUpe2xldCBsPXJbcy5vdXRwdXRUZW5zb3JLZXldO3MubmFtZT1sLm5hbWUscy5vdXRwdXRUZW5zb3JLZXk9by5vdXRwdXRUZW5zb3JLZXl9fSl9KSxtZS5lYWNoKGkuYmFzZUVkZ2VMaXN0LG89PntvLnY9cltvLm91dHB1dFRlbnNvcktleV0ubmFtZSxvLm91dHB1dFRlbnNvcktleT0iMCJ9KX0pfWJ1aWxkU3ViaGllcmFyY2h5KHQpe2lmKHQgaW4gdGhpcy5oYXNTdWJoaWVyYXJjaHkpcmV0dXJuO3RoaXMuaGFzU3ViaGllcmFyY2h5W3RdPSEwO2xldCByPXRoaXMuaW5kZXhbdF07aWYoci5ub2RlLnR5cGUhPT1qdC5NRVRBJiZyLm5vZGUudHlwZSE9PWp0LlNFUklFUylyZXR1cm47bGV0IG49cixpPW4ubm9kZS5tZXRhZ3JhcGgsbz1uLmNvcmVHcmFwaCxhPVtdLHM9W107bWUuaXNFbXB0eSh0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zKXx8KG1lLmVhY2goaS5ub2RlcygpLGQ9PntsZXQgZz1pLm5vZGUoZCksXz10aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2cub3BdO2lmKCFffHxkLmluZGV4T2YoU2EpPT09MClyZXR1cm47bGV0IHk9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlKGksZyxfLm5vZGUsXy5ub2RlLm5hbWUsZy5uYW1lKTthLnB1c2goZykscy5wdXNoKHkpfSksbWUuZWFjaChzLChkLGcpPT57bGV0IF89YVtnXTtkLnBhcmVudE5vZGU9Xy5wYXJlbnROb2RlLGkuc2V0Tm9kZShfLm5hbWUsZCksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShfLm5hbWUsZCl9KSksbWUuZWFjaChpLm5vZGVzKCksZD0+e2xldCBnPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGQpLF89Zy5ub2RlO28uc2V0Tm9kZShkLGcpLF8uaXNHcm91cE5vZGV8fChtZS5lYWNoKF8uaW5FbWJlZGRpbmdzLHk9PntsZXQgeD1uZXcgT2QobnVsbCksYj1uZXcgR2YoeSk7aGxlKGcseSxiLHgsX2kuQ09OU1RBTlQpLHRoaXMuaW5kZXhbeS5uYW1lXT1ifSksbWUuZWFjaChfLm91dEVtYmVkZGluZ3MseT0+e2xldCB4PW5ldyBPZChudWxsKSxiPW5ldyBHZih5KTtmbGUoZyx5LGIseCxfaS5TVU1NQVJZKSx0aGlzLmluZGV4W3kubmFtZV09Yn0pKX0pLG1lLmVhY2goaS5lZGdlcygpLGQ9PntsZXQgZz1pLmVkZ2UoZCksXz1uZXcgT2QoZyk7Xy5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbZC52XS5pc0ZhZGVkT3V0fHx0aGlzLmluZGV4W2Qud10uaXNGYWRlZE91dCxvLnNldEVkZ2UoZC52LGQudyxfKX0pLG4ubm9kZS50eXBlPT09anQuTUVUQSYmTWNyKG4sdGhpcy5hdXRvRXh0cmFjdE5vZGVzKSxtZS5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHx0aGlzLmJ1aWxkU3ViaGllcmFyY2hpZXNGb3JOZWVkZWRGdW5jdGlvbnMoaSksdD09PXFjJiZtZS5mb3JPd24odGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucywoZCxnKT0+e2xldCBfPWQubm9kZSx5PXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKF8ubmFtZSk7bi5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5wdXNoKHkpLHkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsby5yZW1vdmVOb2RlKF8ubmFtZSl9KTtsZXQgbD1uLm5vZGUucGFyZW50Tm9kZTtpZighbClyZXR1cm47bGV0IGM9dGhpcy5pbmRleFtsLm5hbWVdLHU9KGQsLi4uZyk9PmcuY29uY2F0KFtkPyJJTiI6Ik9VVCJdKS5qb2luKCJ+fiIpLGg9dGhpcy5oaWVyYXJjaHkuZ2V0QnJpZGdlZ3JhcGgodCksZj17aW46e30sb3V0Ont9LGNvbnRyb2w6e319O21lLmVhY2goaC5lZGdlcygpLGQ9PntsZXQgZz0hIWkubm9kZShkLncpLF89Zz9kLnY6ZC53O2guZWRnZShkKS5udW1SZWd1bGFyRWRnZXM/Zz9mLm91dFtfXT0oZi5vdXRbX118fDApKzE6Zi5pbltfXT0oZi5pbltfXXx8MCkrMTpmLmNvbnRyb2xbX109KGYuY29udHJvbFtfXXx8MCkrMX0pO2xldCBwPXRoaXMuaGllcmFyY2h5LmdldE5vZGVNYXAoKTttZS5lYWNoKGguZWRnZXMoKSxkPT57bGV0IGc9aC5lZGdlKGQpLF89ISFpLm5vZGUoZC53KSxbeSx4XT1fP1tkLncsZC52XTpbZC52LGQud10sYj10aGlzLmluZGV4W3ldLFM9dGhpcy5pbmRleFt4XSxDPVM/Uy5ub2RlOnBbeF0sUD0hZy5udW1SZWd1bGFyRWRnZXMmJmYuY29udHJvbFt4XT5Yby5tYXhDb250cm9sRGVncmVlLFssa109Xz9bci5pbkFubm90YXRpb25zLGIuaW5Bbm5vdGF0aW9uc106W3Iub3V0QW5ub3RhdGlvbnMsYi5vdXRBbm5vdGF0aW9uc10sRD0oXz9mLm91dDpmLmluKVt4XT5Yby5tYXhCcmlkZ2VQYXRoRGVncmVlLEI9bnVsbCxJPSExO2lmKFhvLmVuYWJsZUJyaWRnZWdyYXBoJiYhRCYmIVAmJmIuaXNJbkNvcmUoKSl7bGV0IFc9Wj0+e2xldCBydD1fP3t2Olosdzp0fTp7djp0LHc6Wn07cmV0dXJuIGMuY29yZUdyYXBoLmVkZ2UocnQpfTtCPVcoeCksQnx8KEI9Vyh1KF8seCxsLm5hbWUpKSksST0hIUJ9bGV0IEw9ITE7aWYoQiYmIWcubnVtUmVndWxhckVkZ2VzKXtsZXQgVz1CLFo9Yy5ub2RlO2Zvcig7Vy5hZGpvaW5pbmdNZXRhZWRnZTspVz1XLmFkam9pbmluZ01ldGFlZGdlLFo9Wi5wYXJlbnROb2RlO2xldCBydD10aGlzLmhpZXJhcmNoeS5nZXRUb3BvbG9naWNhbE9yZGVyaW5nKFoubmFtZSksb3Q9Vy5tZXRhZWRnZTtMPXJ0W290LnZdPnJ0W290LnddfWlmKEk9SSYmIUwsIUkpe2sucHVzaChuZXcgaTMoQyxTLG5ldyBPZChnKSxfaS5TSE9SVENVVCxfKSk7cmV0dXJufWxldCBSPXUoXyx0KSxGPXUoXyx4LHQpLHo9by5ub2RlKEYpO2lmKCF6KXtsZXQgVz1vLm5vZGUoUik7aWYoIVcpe2xldCBydD17bmFtZTpSLHR5cGU6anQuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjAscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTp1ci5VTlNQRUNJRklFRCxpbmJvdW5kOl8sbm9kZUF0dHJpYnV0ZXM6e319O1c9bmV3IEdmKHJ0KSx0aGlzLmluZGV4W1JdPVcsby5zZXROb2RlKFIsVyl9bGV0IFo9e25hbWU6Rix0eXBlOmp0LkJSSURHRSxpc0dyb3VwTm9kZTohMSxjYXJkaW5hbGl0eToxLHBhcmVudE5vZGU6bnVsbCxzdGF0czpudWxsLGluY2x1ZGU6dXIuVU5TUEVDSUZJRUQsaW5ib3VuZDpfLG5vZGVBdHRyaWJ1dGVzOnt9fTt6PW5ldyBHZihaKSx0aGlzLmluZGV4W0ZdPXosby5zZXROb2RlKEYseiksby5zZXRQYXJlbnQoRixSKSxXLm5vZGUuY2FyZGluYWxpdHkrK31sZXQgVT1uZXcgT2QoZyk7VS5hZGpvaW5pbmdNZXRhZWRnZT1CLF8/by5zZXRFZGdlKEYseSxVKTpvLnNldEVkZ2UoeSxGLFUpfSksbWUuZWFjaChbITAsITFdLGQ9PntsZXQgZz11KGQsdCksXz1vLm5vZGUoZyk7IV98fG1lLmVhY2goby5ub2RlcygpLHk9Pnt2YXIgayxPO2lmKG8ubm9kZSh5KS5ub2RlLnR5cGU9PT1qdC5CUklER0V8fCEoZD8hKChrPW8ucHJlZGVjZXNzb3JzKHkpKSE9bnVsbCYmay5sZW5ndGgpOiEoKE89by5zdWNjZXNzb3JzKHkpKSE9bnVsbCYmTy5sZW5ndGgpKSlyZXR1cm47bGV0IFM9dShkLHQsIlNUUlVDVFVSQUxfVEFSR0VUIiksQz1vLm5vZGUoUyk7aWYoIUMpe2xldCBEPXtuYW1lOlMsdHlwZTpqdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOnVyLlVOU1BFQ0lGSUVELGluYm91bmQ6ZCxub2RlQXR0cmlidXRlczp7fX07Qz1uZXcgR2YoRCksQy5zdHJ1Y3R1cmFsPSEwLHRoaXMuaW5kZXhbU109QyxvLnNldE5vZGUoUyxDKSxfLm5vZGUuY2FyZGluYWxpdHkrKyxvLnNldFBhcmVudChTLGcpfWxldCBQPW5ldyBPZChudWxsKTtQLnN0cnVjdHVyYWw9ITAsUC53ZWlnaHQtLSxkP28uc2V0RWRnZShTLHksUCk6by5zZXRFZGdlKHksUyxQKX0pfSl9YnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyh0KXttZS5lYWNoKHQuZWRnZXMoKSxyPT57bGV0IG49dC5lZGdlKHIpLGk9bmV3IE9kKG4pO21lLmZvckVhY2goaS5tZXRhZWRnZS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPW8udi5zcGxpdChBbCk7Zm9yKGxldCBzPWEubGVuZ3RoO3M+PTA7cy0tKXtsZXQgbD1hLnNsaWNlKDAscyksYz10aGlzLmhpZXJhcmNoeS5ub2RlKGwuam9pbihBbCkpO2lmKGMpe2lmKGMudHlwZT09PWp0Lk9QJiZ0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2Mub3BdKWZvcihsZXQgdT0xO3U8bC5sZW5ndGg7dSsrKXtsZXQgaD1sLnNsaWNlKDAsdSkuam9pbihBbCk7IWh8fHRoaXMuYnVpbGRTdWJoaWVyYXJjaHkoaCl9YnJlYWt9fX0pfSl9fSxpMz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMubm9kZT10LHRoaXMucmVuZGVyTm9kZUluZm89cix0aGlzLnJlbmRlck1ldGFlZGdlSW5mbz1uLHRoaXMuYW5ub3RhdGlvblR5cGU9aSx0aGlzLmR4PTAsdGhpcy5keT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLG4mJm4ubWV0YWVkZ2UmJih0aGlzLnY9bi5tZXRhZWRnZS52LHRoaXMudz1uLm1ldGFlZGdlLncpLHRoaXMuaXNJbj1vLHRoaXMucG9pbnRzPVtdfX0sX2k7KGZ1bmN0aW9uKGUpe2VbZS5TSE9SVENVVD0wXT0iU0hPUlRDVVQiLGVbZS5DT05TVEFOVD0xXT0iQ09OU1RBTlQiLGVbZS5TVU1NQVJZPTJdPSJTVU1NQVJZIixlW2UuRUxMSVBTSVM9M109IkVMTElQU0lTIn0pKF9pfHwoX2k9e30pKTt2YXIgYkg9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3Q9W10sdGhpcy5ub2RlTmFtZXM9e319cHVzaCh0KXtpZih0Lm5vZGUubmFtZSBpbiB0aGlzLm5vZGVOYW1lcylyZXR1cm47aWYodGhpcy5ub2RlTmFtZXNbdC5ub2RlLm5hbWVdPSEwLHRoaXMubGlzdC5sZW5ndGg8WG8ubWF4QW5ub3RhdGlvbnMpe3RoaXMubGlzdC5wdXNoKHQpO3JldHVybn1sZXQgcj10aGlzLmxpc3RbdGhpcy5saXN0Lmxlbmd0aC0xXTtpZihyLmFubm90YXRpb25UeXBlPT09X2kuRUxMSVBTSVMpe2xldCBpPXIubm9kZTtpLnNldE51bU1vcmVOb2RlcygrK2kubnVtTW9yZU5vZGVzKTtyZXR1cm59bGV0IG49bmV3IGdIKDEpO3RoaXMubGlzdC5wdXNoKG5ldyBpMyhuLG5ldyBHZihuKSxudWxsLF9pLkVMTElQU0lTLHQuaXNJbikpfX0sR2Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7aWYodGhpcy5ub2RlPXQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmluQW5ub3RhdGlvbnM9bmV3IGJILHRoaXMub3V0QW5ub3RhdGlvbnM9bmV3IGJILHRoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuaW5ib3hXaWR0aD0wLHRoaXMub3V0Ym94V2lkdGg9MCx0aGlzLmV4Y2x1ZGVkPSExLHRoaXMuc3RydWN0dXJhbD0hMSx0aGlzLmxhYmVsT2Zmc2V0PTAsdGhpcy5yYWRpdXM9MCx0aGlzLmxhYmVsSGVpZ2h0PTAsdGhpcy5wYWRkaW5nVG9wPTAsdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTAsdGhpcy5pc0luRXh0cmFjdD0hMSx0aGlzLmlzT3V0RXh0cmFjdD0hMSx0aGlzLmNvcmVCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNGYWRlZE91dD0hMSx0aGlzLmRpc3BsYXlOYW1lPXQubmFtZS5zdWJzdHJpbmcodC5uYW1lLmxhc3RJbmRleE9mKEFsKSsxKSx0LnR5cGU9PT1qdC5NRVRBJiZ0LmFzc29jaWF0ZWRGdW5jdGlvbil7bGV0IHI9dGhpcy5kaXNwbGF5TmFtZS5tYXRjaChfY3IpO3I/dGhpcy5kaXNwbGF5TmFtZT1yWzFdOm1lLnN0YXJ0c1dpdGgodGhpcy5kaXNwbGF5TmFtZSxTYSkmJih0aGlzLmRpc3BsYXlOYW1lPXRoaXMuZGlzcGxheU5hbWUuc3Vic3RyaW5nKFNhLmxlbmd0aCkpfX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYhdGhpcy5pc091dEV4dHJhY3QmJiF0aGlzLmlzTGlicmFyeUZ1bmN0aW9ufX0sT2Q9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tZXRhZWRnZT10LHRoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbCx0aGlzLnN0cnVjdHVyYWw9ITEsdGhpcy53ZWlnaHQ9MSx0aGlzLmlzRmFkZWRPdXQ9ITF9fTtmdW5jdGlvbiBobGUoZSx0LHIsbixpKXtsZXQgbz1uZXcgaTModCxyLG4saSwhMCk7ZS5pbkFubm90YXRpb25zLnB1c2gobyl9ZnVuY3Rpb24gZmxlKGUsdCxyLG4saSl7bGV0IG89bmV3IGkzKHQscixuLGksITEpO2Uub3V0QW5ub3RhdGlvbnMucHVzaChvKX1mdW5jdGlvbiB5Y3IoZSx0KXttZS5lYWNoKGUubm9kZXMoKSxyPT57bGV0IG49ZS5ub2RlKHIpO2lmKG4uZXhwYW5kZWQ9dD4xLHQ+MClzd2l0Y2gobi5ub2RlLnR5cGUpe2Nhc2UganQuTUVUQTpjYXNlIGp0LlNFUklFUzpwbGUobix0LTEpO2JyZWFrfX0pfXZhciB3SD1jbGFzcyBleHRlbmRzIEdme2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCk7bGV0IGk9dC5tZXRhZ3JhcGguZ3JhcGgoKTt0aGlzLmNvcmVHcmFwaD1lMyhpLm5hbWUsZzAuQ09SRSxyKSx0aGlzLmluRXh0cmFjdEJveD17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5vdXRFeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLmxpYnJhcnlGdW5jdGlvbnNCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNvbGF0ZWRJbkV4dHJhY3Q9W10sdGhpcy5pc29sYXRlZE91dEV4dHJhY3Q9W10sdGhpcy5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdD1bXX19O2Z1bmN0aW9uIHBsZShlLHQpe2UuY29yZUdyYXBoJiZ5Y3IoZS5jb3JlR3JhcGgsdCl9ZnVuY3Rpb24gY1AoZSx0LHIpe2xldCBuPWUubm9kZSh0KSxpPWUubm9kZShyKSxvPWUuZWRnZSh0LHIpOyhuLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREV8fGkubm9kZS5pbmNsdWRlPT09dXIuSU5DTFVERSkmJm4ubm9kZS5pbmNsdWRlIT09dXIuRVhDTFVERSYmaS5ub2RlLmluY2x1ZGUhPT11ci5FWENMVURFfHwoZmxlKG4saS5ub2RlLGksbyxfaS5TSE9SVENVVCksaGxlKGksbi5ub2RlLG4sbyxfaS5TSE9SVENVVCksZS5yZW1vdmVFZGdlKHQscikpfWZ1bmN0aW9uIHFsdChlLHQscil7dmFyIG87bGV0IG49ZS5jb3JlR3JhcGgsaT1uLm5vZGUodCk7aS5pc091dEV4dHJhY3Q9ITAsbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e2NQKG4sYSx0KX0pLChYby5kZXRhY2hBbGxFZGdlc0ZvckhpZ2hEZWdyZWV8fHIpJiZtZS5lYWNoKG4uc3VjY2Vzc29ycyh0KSwoYSxzKT0+e2NQKG4sdCxhKX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2goaSksbi5yZW1vdmVOb2RlKHQpKX1mdW5jdGlvbiBHbHQoZSx0LHIpe3ZhciBvO2xldCBuPWUuY29yZUdyYXBoLGk9bi5ub2RlKHQpO2kuaXNJbkV4dHJhY3Q9ITAsbWUuZWFjaChuLnN1Y2Nlc3NvcnModCksKGEscyk9PntjUChuLHQsYSl9KSwoWG8uZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxyKSYmbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e2NQKG4sYSx0KX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRJbkV4dHJhY3QucHVzaChpKSxuLnJlbW92ZU5vZGUodCkpfWZ1bmN0aW9uIGRsZShlLHQpe2lmKGUudHlwZT09PWp0Lk9QKXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylpZihlLm9wPT09dFtyXSlyZXR1cm4hMH1lbHNlIGlmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUuZ2V0Um9vdE9wKCk7aWYocil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoci5vcD09PXRbbl0pcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIHZjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57dmFyIGksbzt0Lm5vZGUocikubm9kZS5pbmNsdWRlPT09dXIuRVhDTFVERSYmIXIuc3RhcnRzV2l0aChTYSkmJigoKGk9ZS5jb3JlR3JhcGgub3V0RWRnZXMocikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aCk+KChvPWUuY29yZUdyYXBoLmluRWRnZXMocikpPT1udWxsP3ZvaWQgMDpvLmxlbmd0aCk/cWx0KGUsciwhMCk6R2x0KGUsciwhMCkpfSl9ZnVuY3Rpb24geGNyKGUpe2xldCB0PWUuY29yZUdyYXBoO21lLmVhY2godC5ub2RlcygpLHI9PntsZXQgbj10Lm5vZGUocik7bi5ub2RlLmluY2x1ZGU9PT11ci5VTlNQRUNJRklFRCYmZGxlKG4ubm9kZSxYby5vdXRFeHRyYWN0VHlwZXMpJiZxbHQoZSxyKX0pfWZ1bmN0aW9uIGJjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57bGV0IG49dC5ub2RlKHIpO24ubm9kZS5pbmNsdWRlPT09dXIuVU5TUEVDSUZJRUQmJmRsZShuLm5vZGUsWG8uaW5FeHRyYWN0VHlwZXMpJiZHbHQoZSxyKX0pfWZ1bmN0aW9uIHdjcihlKXtsZXQgdD1lLmNvcmVHcmFwaCxyPXt9LG49e30saT0wO2lmKG1lLmVhY2godC5ub2RlcygpLF89Pnt2YXIgYixTLEMsUDtpZih0Lm5vZGUoXykubm9kZS5pbmNsdWRlIT09dXIuVU5TUEVDSUZJRUQpcmV0dXJuO2xldCB5PW1lLnJlZHVjZSh0LnByZWRlY2Vzc29ycyhfKSwoayxPKT0+e2xldCBEPXQuZWRnZShPLF8pLm1ldGFlZGdlO3JldHVybiBrKyhELm51bVJlZ3VsYXJFZGdlcz8xOjApfSwwKTt5PT09MCYmKChiPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Yi5sZW5ndGgpPjAmJih5PShTPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Uy5sZW5ndGgpO2xldCB4PW1lLnJlZHVjZSh0LnN1Y2Nlc3NvcnMoXyksKGssTyk9PntsZXQgRD10LmVkZ2UoXyxPKS5tZXRhZWRnZTtyZXR1cm4gaysoRC5udW1SZWd1bGFyRWRnZXM/MTowKX0sMCk7eD09PTAmJigoQz10LnN1Y2Nlc3NvcnMoXykpPT1udWxsP3ZvaWQgMDpDLmxlbmd0aCk+MCYmKHg9KFA9dC5zdWNjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6UC5sZW5ndGgpLHJbX109eSxuW19dPXgsaSsrfSksaTxYby5taW5Ob2RlQ291bnRGb3JFeHRyYWN0aW9uKXJldHVybjtsZXQgbz1Yby5taW5EZWdyZWVGb3JFeHRyYWN0aW9uLTEsYT1NYXRoLnJvdW5kKGkqLjc1KSxzPU1hdGgucm91bmQoaSouMjUpLGw9T2JqZWN0LmtleXMocikuc29ydCgoXyx5KT0+cltfXS1yW3ldKSxjPXJbbFthXV0sdT1yW2xbc11dLGg9YytjLXU7aD1NYXRoLm1heChoLG8pO2ZvcihsZXQgXz1pLTE7cltsW19dXT5oO18tLSlHbHQoZSxsW19dKTtsZXQgZj1PYmplY3Qua2V5cyhuKS5zb3J0KChfLHkpPT5uW19dLW5beV0pLHA9bltmW2FdXSxkPW5bZltzXV0sZz1wKyhwLWQpKjQ7Zz1NYXRoLm1heChnLG8pO2ZvcihsZXQgXz1pLTE7bltmW19dXT5nO18tLSl7bGV0IHk9dC5ub2RlKGZbX10pOyF5fHx5LmlzSW5FeHRyYWN0fHxxbHQoZSxmW19dKX19ZnVuY3Rpb24gU2NyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9e307bWUuZWFjaCh0LmVkZ2VzKCksbj0+e3QuZWRnZShuKS5tZXRhZWRnZS5udW1SZWd1bGFyRWRnZXN8fCgocltuLnZdPXJbbi52XXx8W10pLnB1c2gobiksKHJbbi53XT1yW24ud118fFtdKS5wdXNoKG4pKX0pLG1lLmVhY2gociwobixpKT0+e24ubGVuZ3RoPlhvLm1heENvbnRyb2xEZWdyZWUmJm1lLmVhY2gobixvPT5jUCh0LG8udixvLncpKX0pfWZ1bmN0aW9uIE1jcihlLHQpe3ZjcihlKSxYby5vdXRFeHRyYWN0VHlwZXMubGVuZ3RoJiZ4Y3IoZSksWG8uaW5FeHRyYWN0VHlwZXMubGVuZ3RoJiZiY3IoZSksdCYmd2NyKGUpLFhvLm1heENvbnRyb2xEZWdyZWUmJlNjcihlKTtsZXQgcj1lLmNvcmVHcmFwaDttZS5lYWNoKHIubm9kZXMoKSxuPT57dmFyIGE7bGV0IGk9ci5ub2RlKG4pLG89KGE9ci5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDphLmxlbmd0aDtpZihpLm5vZGUuaW5jbHVkZT09PXVyLlVOU1BFQ0lGSUVEJiZvPT09MCl7bGV0IHM9aS5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wLGw9aS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA7aS5pc0luRXh0cmFjdD8oZS5pc29sYXRlZEluRXh0cmFjdC5wdXNoKGkpLGkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsci5yZW1vdmVOb2RlKG4pKTppLmlzT3V0RXh0cmFjdD8oZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSk6WG8uZXh0cmFjdElzb2xhdGVkTm9kZXNXaXRoQW5ub3RhdGlvbnNPbk9uZVNpZGUmJihzJiYhbD8oaS5pc0luRXh0cmFjdD0hMCxlLmlzb2xhdGVkSW5FeHRyYWN0LnB1c2goaSksaS5ub2RlLmluY2x1ZGU9dXIuRVhDTFVERSxyLnJlbW92ZU5vZGUobikpOmwmJiFzJiYoaS5pc091dEV4dHJhY3Q9ITAsZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSkpfX0pfWZ1bmN0aW9uIG1sZShlLHQscil7bGV0IG49ci5zcGxpdCgiLyIpLGk9bltuLmxlbmd0aC0xXS5tYXRjaCgvKC4qKTpcdysvKTsoaT09bnVsbD92b2lkIDA6aS5sZW5ndGgpPT09MiYmKG5bbi5sZW5ndGgtMV09aT09bnVsbD92b2lkIDA6aVsxXSk7bGV0IG89blswXSxhPXQuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKTtmb3IobGV0IHM9MTtzPG4ubGVuZ3RoJiZhLm5vZGUudHlwZSE9PWp0Lk9QO3MrKyl0LmJ1aWxkU3ViaGllcmFyY2h5KG8pLGEuZXhwYW5kZWQ9ITAsZS5zZXROb2RlRXhwYW5kZWQoYSksbys9Ii8iK25bc10sYT10LmdldFJlbmRlck5vZGVCeU5hbWUobyk7cmV0dXJuIGEubm9kZS5uYW1lfXZhciB2bGU9RWUoemx0KCksMSksWmU9RWUoT2UoKSwxKTt2YXIgVHI9e2FuaW1hdGlvbjp7ZHVyYXRpb246MjUwfSxncmFwaDp7bWV0YTp7bm9kZVNlcDo1LHJhbmtTZXA6MjUsZWRnZVNlcDo1fSxzZXJpZXM6e25vZGVTZXA6NSxyYW5rU2VwOjI1LGVkZ2VTZXA6NX0scGFkZGluZzp7cGFkZGluZ1RvcDo0MCxwYWRkaW5nTGVmdDoyMH19LHN1YnNjZW5lOnttZXRhOntwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLGxhYmVsSGVpZ2h0OjIwLGV4dHJhY3RYT2Zmc2V0OjE1LGV4dHJhY3RZT2Zmc2V0OjIwfSxzZXJpZXM6e3BhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAsbGFiZWxIZWlnaHQ6MTB9fSxub2RlU2l6ZTp7bWV0YTp7cmFkaXVzOjUsd2lkdGg6NjAsbWF4TGFiZWxXaWR0aDo1MixoZWlnaHQ6em4oKS5kb21haW4oWzEsMjAwXSkucmFuZ2UoWzE1LDYwXSkuY2xhbXAoITApLGV4cGFuZEJ1dHRvblJhZGl1czozfSxvcDp7d2lkdGg6MTUsaGVpZ2h0OjYscmFkaXVzOjMsbGFiZWxPZmZzZXQ6LTgsbWF4TGFiZWxXaWR0aDozMH0sc2VyaWVzOntleHBhbmRlZDp7cmFkaXVzOjEwLGxhYmVsT2Zmc2V0OjB9LHZlcnRpY2FsOnt3aWR0aDoxNixoZWlnaHQ6MTMsbGFiZWxPZmZzZXQ6LTEzfSxob3Jpem9udGFsOnt3aWR0aDoyNCxoZWlnaHQ6OCxyYWRpdXM6MTAsbGFiZWxPZmZzZXQ6LTEwfX0sYnJpZGdlOnt3aWR0aDoyMCxoZWlnaHQ6MjAscmFkaXVzOjIsbGFiZWxPZmZzZXQ6MH19LHNob3J0Y3V0U2l6ZTp7b3A6e3dpZHRoOjEwLGhlaWdodDo0fSxtZXRhOnt3aWR0aDoxMixoZWlnaHQ6NCxyYWRpdXM6MX0sc2VyaWVzOnt3aWR0aDoxNCxoZWlnaHQ6NH19LGFubm90YXRpb25zOntpbmJveFdpZHRoOjUwLG91dGJveFdpZHRoOjUwLHhPZmZzZXQ6MTAseU9mZnNldDozLGxhYmVsT2Zmc2V0OjIsbWF4TGFiZWxXaWR0aDo0MH0sY29uc3RhbnQ6e3NpemU6e3dpZHRoOjQsaGVpZ2h0OjR9fSxzZXJpZXM6e21heFN0YWNrQ291bnQ6MyxwYXJhbGxlbFN0YWNrT2Zmc2V0UmF0aW86LjIsdG93ZXJTdGFja09mZnNldFJhdGlvOi41fSxtaW5pbWFwOntzaXplOjE1MH19LG8zPTE0MDtmdW5jdGlvbiBTSChlKXtlLm5vZGUuaXNHcm91cE5vZGUmJlRjcihlKSxlLm5vZGUudHlwZT09PWp0Lk1FVEE/Q2NyKGUpOmUubm9kZS50eXBlPT09anQuU0VSSUVTJiZBY3IoZSl9ZnVuY3Rpb24gRWNyKGUpe2UuaW5ib3hXaWR0aD1lLmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MD9Uci5hbm5vdGF0aW9ucy5pbmJveFdpZHRoOjAsZS5vdXRib3hXaWR0aD1lLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA/VHIuYW5ub3RhdGlvbnMub3V0Ym94V2lkdGg6MCxlLmNvcmVCb3gud2lkdGg9ZS53aWR0aCxlLmNvcmVCb3guaGVpZ2h0PWUuaGVpZ2h0O2xldCB0PWUuZGlzcGxheU5hbWUubGVuZ3RoLHI9MztlLndpZHRoPU1hdGgubWF4KGUuY29yZUJveC53aWR0aCtlLmluYm94V2lkdGgrZS5vdXRib3hXaWR0aCx0KnIpfWZ1bmN0aW9uIFRjcihlKXtsZXQgdD1lLmNvcmVHcmFwaC5ub2RlcygpLm1hcChyPT5lLmNvcmVHcmFwaC5ub2RlKHIpKS5jb25jYXQoZS5pc29sYXRlZEluRXh0cmFjdCxlLmlzb2xhdGVkT3V0RXh0cmFjdCxlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0KTtaZS5lYWNoKHQscj0+e3N3aXRjaChyLm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpaZS5leHRlbmQocixUci5ub2RlU2l6ZS5vcCk7YnJlYWs7Y2FzZSBqdC5CUklER0U6WmUuZXh0ZW5kKHIsVHIubm9kZVNpemUuYnJpZGdlKTticmVhaztjYXNlIGp0Lk1FVEE6ci5leHBhbmRlZD9TSChyKTooWmUuZXh0ZW5kKHIsVHIubm9kZVNpemUubWV0YSksci5oZWlnaHQ9VHIubm9kZVNpemUubWV0YS5oZWlnaHQoci5ub2RlLmNhcmRpbmFsaXR5KSk7YnJlYWs7Y2FzZSBqdC5TRVJJRVM6aWYoci5leHBhbmRlZClaZS5leHRlbmQocixUci5ub2RlU2l6ZS5zZXJpZXMuZXhwYW5kZWQpLFNIKHIpO2Vsc2V7bGV0IGk9ci5ub2RlLmhhc05vbkNvbnRyb2xFZGdlcz9Uci5ub2RlU2l6ZS5zZXJpZXMudmVydGljYWw6VHIubm9kZVNpemUuc2VyaWVzLmhvcml6b250YWw7WmUuZXh0ZW5kKHIsaSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIityLm5vZGUudHlwZSl9ci5leHBhbmRlZHx8RWNyKHIpLFBjcihyKX0pfWZ1bmN0aW9uIHhsZShlLHQpe1plLmV4dGVuZChlLmdyYXBoKCkse25vZGVzZXA6dC5ub2RlU2VwLHJhbmtzZXA6dC5yYW5rU2VwLGVkZ2VzZXA6dC5lZGdlU2VwfSk7bGV0IHI9W10sbj1bXTtpZihaZS5lYWNoKGUubm9kZXMoKSxsPT57ZS5ub2RlKGwpLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnB1c2gobCk6bi5wdXNoKGwpfSksIW4ubGVuZ3RoKXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2bGUubGF5b3V0KGUpO2xldCBpPTEvMCxvPTEvMCxhPS0xLzAscz0tMS8wO3JldHVybiBaZS5lYWNoKG4sbD0+e2xldCBjPWUubm9kZShsKSx1PS41KmMud2lkdGgsaD1jLngtdSxmPWMueCt1O2k9aDxpP2g6aSxhPWY+YT9mOmE7bGV0IHA9LjUqYy5oZWlnaHQsZD1jLnktcCxnPWMueStwO289ZDxvP2Q6byxzPWc+cz9nOnN9KSxaZS5lYWNoKGUuZWRnZXMoKSxsPT57bGV0IGM9ZS5lZGdlKGwpO2lmKGMuc3RydWN0dXJhbClyZXR1cm47bGV0IHU9ZS5ub2RlKGMubWV0YWVkZ2UudiksaD1lLm5vZGUoYy5tZXRhZWRnZS53KTtpZihjLnBvaW50cy5sZW5ndGg9PT0zJiZJY3IoYy5wb2ludHMpKXtpZih1IT1udWxsKXtsZXQgZD11LmV4cGFuZGVkP3UueDp2MCh1KTtjLnBvaW50c1swXS54PWR9aWYoaCE9bnVsbCl7bGV0IGQ9aC5leHBhbmRlZD9oLng6djAoaCk7Yy5wb2ludHNbMl0ueD1kfWMucG9pbnRzPVtjLnBvaW50c1swXSxjLnBvaW50c1sxXV19bGV0IGY9Yy5wb2ludHNbYy5wb2ludHMubGVuZ3RoLTJdO2ghPW51bGwmJihjLnBvaW50c1tjLnBvaW50cy5sZW5ndGgtMV09eWxlKGYsaCkpO2xldCBwPWMucG9pbnRzWzFdO3UhPW51bGwmJihjLnBvaW50c1swXT15bGUocCx1KSksWmUuZWFjaChjLnBvaW50cyxkPT57aT1kLng8aT9kLng6aSxhPWQueD5hP2QueDphLG89ZC55PG8/ZC55Om8scz1kLnk+cz9kLnk6c30pfSksWmUuZWFjaChlLm5vZGVzKCksbD0+e2xldCBjPWUubm9kZShsKTtjLngtPWksYy55LT1vfSksWmUuZWFjaChlLmVkZ2VzKCksbD0+e1plLmVhY2goZS5lZGdlKGwpLnBvaW50cyxjPT57Yy54LT1pLGMueS09b30pfSkse3dpZHRoOmEtaSxoZWlnaHQ6cy1vfX1mdW5jdGlvbiBDY3IoZSl7bGV0IHQ9VHIuc3Vic2NlbmUubWV0YTtaZS5leHRlbmQoZSx0KSxaZS5leHRlbmQoZS5jb3JlQm94LHhsZShlLmNvcmVHcmFwaCxUci5ncmFwaC5tZXRhKSk7bGV0IHI9ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg/WmUubWF4QnkoZS5pc29sYXRlZEluRXh0cmFjdCxjPT5jLndpZHRoKS53aWR0aDpudWxsO2UuaW5FeHRyYWN0Qm94LndpZHRoPXIhPW51bGw/cjowLGUuaW5FeHRyYWN0Qm94LmhlaWdodD1aZS5yZWR1Y2UoZS5pc29sYXRlZEluRXh0cmFjdCwoYyx1LGgpPT57bGV0IGY9aD4wP3QuZXh0cmFjdFlPZmZzZXQ6MDtyZXR1cm4gdS54PTAsdS55PWMrZit1LmhlaWdodC8yLGMrZit1LmhlaWdodH0sMCk7bGV0IG49ZS5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoP1plLm1heEJ5KGUuaXNvbGF0ZWRPdXRFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5vdXRFeHRyYWN0Qm94LndpZHRoPW4hPW51bGw/bjowLGUub3V0RXh0cmFjdEJveC5oZWlnaHQ9WmUucmVkdWNlKGUuaXNvbGF0ZWRPdXRFeHRyYWN0LChjLHUsaCk9PntsZXQgZj1oPjA/dC5leHRyYWN0WU9mZnNldDowO3JldHVybiB1Lng9MCx1Lnk9YytmK3UuaGVpZ2h0LzIsYytmK3UuaGVpZ2h0fSwwKTtsZXQgaT1lLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD9aZS5tYXhCeShlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoPWkhPW51bGw/aTowLGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQ9WmUucmVkdWNlKGUubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QsKGMsdSxoKT0+e2xldCBmPWg+MD90LmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIHUueD0wLHUueT1jK2YrdS5oZWlnaHQvMixjK2YrdS5oZWlnaHR9LDApO2xldCBvPTA7ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuaXNvbGF0ZWRPdXRFeHRyYWN0Lmxlbmd0aD4wJiZvKyssZS5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuY29yZUdyYXBoLm5vZGVDb3VudCgpPjAmJm8rKztsZXQgYT1Uci5zdWJzY2VuZS5tZXRhLmV4dHJhY3RYT2Zmc2V0LHM9bzw9MT8wOm8qYSxsPU1hdGgubWF4KG8zLGUuaW5FeHRyYWN0Qm94LndpZHRoK2Uub3V0RXh0cmFjdEJveC53aWR0aCk7ZS5jb3JlQm94LndpZHRoKz1sK3MrZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoK3MsZS5jb3JlQm94LmhlaWdodD10LmxhYmVsSGVpZ2h0K01hdGgubWF4KGUuaW5FeHRyYWN0Qm94LmhlaWdodCxlLmNvcmVCb3guaGVpZ2h0LGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQsZS5vdXRFeHRyYWN0Qm94LmhlaWdodCksZS53aWR0aD1lLmNvcmVCb3gud2lkdGgrdC5wYWRkaW5nTGVmdCt0LnBhZGRpbmdSaWdodCxlLmhlaWdodD1lLnBhZGRpbmdUb3ArZS5jb3JlQm94LmhlaWdodCtlLnBhZGRpbmdCb3R0b219ZnVuY3Rpb24gQWNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9VHIuc3Vic2NlbmUuc2VyaWVzO1plLmV4dGVuZChlLHIpLFplLmV4dGVuZChlLmNvcmVCb3gseGxlKGUuY29yZUdyYXBoLFRyLmdyYXBoLnNlcmllcykpLFplLmVhY2godC5ub2RlcygpLG49Pnt0Lm5vZGUobikuZXhjbHVkZWQ9ITF9KSxlLndpZHRoPWUuY29yZUJveC53aWR0aCtyLnBhZGRpbmdMZWZ0K3IucGFkZGluZ1JpZ2h0LGUuaGVpZ2h0PWUuY29yZUJveC5oZWlnaHQrci5wYWRkaW5nVG9wK3IucGFkZGluZ0JvdHRvbX1mdW5jdGlvbiBQY3IoZSl7aWYoZS5leHBhbmRlZClyZXR1cm47bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3Qscj1lLm91dEFubm90YXRpb25zLmxpc3Q7WmUuZWFjaCh0LHU9PmdsZSh1KSksWmUuZWFjaChyLHU9PmdsZSh1KSk7bGV0IG49VHIuYW5ub3RhdGlvbnMsaT1aZS5yZWR1Y2UodCwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PS0oZS5jb3JlQm94LndpZHRoK2gud2lkdGgpLzItbi54T2Zmc2V0LGguZHk9dStwK2guaGVpZ2h0LzIsdStwK2guaGVpZ2h0fSwwKTtaZS5lYWNoKHQsdT0+e3UuZHktPWkvMix1LmxhYmVsT2Zmc2V0PW4ubGFiZWxPZmZzZXR9KTtsZXQgbz1aZS5yZWR1Y2UociwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PShlLmNvcmVCb3gud2lkdGgraC53aWR0aCkvMituLnhPZmZzZXQsaC5keT11K3AraC5oZWlnaHQvMix1K3AraC5oZWlnaHR9LDApO1plLmVhY2gocix1PT57dS5keS09by8yLHUubGFiZWxPZmZzZXQ9bi5sYWJlbE9mZnNldH0pO2xldCBhPU1hdGgubWluKGUuaGVpZ2h0LzItZS5yYWRpdXMsaS8yKTthPWE8MD8wOmE7bGV0IHM9em4oKS5kb21haW4oWzAsdC5sZW5ndGgtMV0pLnJhbmdlKFstYSxhXSk7WmUuZWFjaCh0LCh1LGgpPT57dS5wb2ludHM9W3tkeDp1LmR4K3Uud2lkdGgvMixkeTp1LmR5fSx7ZHg6LWUuY29yZUJveC53aWR0aC8yLGR5OnQubGVuZ3RoPjE/cyhoKTowfV19KTtsZXQgbD1NYXRoLm1pbihlLmhlaWdodC8yLWUucmFkaXVzLG8vMik7bD1sPDA/MDpsO2xldCBjPXpuKCkuZG9tYWluKFswLHIubGVuZ3RoLTFdKS5yYW5nZShbLWwsbF0pO1plLmVhY2gociwodSxoKT0+e3UucG9pbnRzPVt7ZHg6ZS5jb3JlQm94LndpZHRoLzIsZHk6ci5sZW5ndGg+MT9jKGgpOjB9LHtkeDp1LmR4LXUud2lkdGgvMixkeTp1LmR5fV19KSxlLmhlaWdodD1NYXRoLm1heChlLmhlaWdodCxpLG8pfWZ1bmN0aW9uIGdsZShlKXtzd2l0Y2goZS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBfaS5DT05TVEFOVDpaZS5leHRlbmQoZSxUci5jb25zdGFudC5zaXplKTticmVhaztjYXNlIF9pLlNIT1JUQ1VUOmlmKGUubm9kZS50eXBlPT09anQuT1ApWmUuZXh0ZW5kKGUsVHIuc2hvcnRjdXRTaXplLm9wKTtlbHNlIGlmKGUubm9kZS50eXBlPT09anQuTUVUQSlaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUubWV0YSk7ZWxzZSBpZihlLm5vZGUudHlwZT09PWp0LlNFUklFUylaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUuc2VyaWVzKTtlbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSk7YnJlYWs7Y2FzZSBfaS5TVU1NQVJZOlplLmV4dGVuZChlLFRyLmNvbnN0YW50LnNpemUpO2JyZWFrfX1mdW5jdGlvbiB2MChlKXtpZihlLmV4cGFuZGVkKXJldHVybiBlLng7bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoP2UuaW5ib3hXaWR0aDowO3JldHVybiBlLngtZS53aWR0aC8yK3QrZS5jb3JlQm94LndpZHRoLzJ9ZnVuY3Rpb24gX2xlKGUsdCl7bGV0IHI9dC54LWUueCxuPXQueS1lLnk7cmV0dXJuIDE4MCpNYXRoLmF0YW4obi9yKS9NYXRoLlBJfWZ1bmN0aW9uIEljcihlKXtsZXQgdD1fbGUoZVswXSxlWzFdKTtmb3IobGV0IHI9MTtyPGUubGVuZ3RoLTE7cisrKXtsZXQgbj1fbGUoZVtyXSxlW3IrMV0pO2lmKE1hdGguYWJzKG4tdCk+MSlyZXR1cm4hMTt0PW59cmV0dXJuITB9ZnVuY3Rpb24geWxlKGUsdCl7bGV0IHI9dC5leHBhbmRlZD90Lng6djAodCksbj10LnksaT1lLngtcixvPWUueS1uLGE9dC5leHBhbmRlZD90LndpZHRoOnQuY29yZUJveC53aWR0aCxzPXQuZXhwYW5kZWQ/dC5oZWlnaHQ6dC5jb3JlQm94LmhlaWdodCxsLGM7cmV0dXJuIE1hdGguYWJzKG8pKmEvMj5NYXRoLmFicyhpKSpzLzI/KG88MCYmKHM9LXMpLGw9bz09PTA/MDpzLzIqaS9vLGM9cy8yKTooaTwwJiYoYT0tYSksbD1hLzIsYz1pPT09MD8wOmEvMipvL2kpLHt4OnIrbCx5Om4rY319dmFyIFBsPW0wLEhpPXllLExjcj0zMjAsa2NyPTE1MCxoUD1be2JhY2tncm91bmRfY29sb3I6IiNDQzJGMkMiLGxhYmVsOiJOYU4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0ZGOEQwMCIsbGFiZWw6Ii1cdTIyMUUifSx7YmFja2dyb3VuZF9jb2xvcjoiI0VBRUFFQSIsbGFiZWw6Ii0ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0E1QTVBNSIsbGFiZWw6IjAifSx7YmFja2dyb3VuZF9jb2xvcjoiIzI2MjYyNiIsbGFiZWw6IisifSx7YmFja2dyb3VuZF9jb2xvcjoiIzAwM0VENCIsbGFiZWw6IitcdTIyMUUifV07ZnVuY3Rpb24gd2xlKGUsdCxyLG4pe2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1udWxsO3RyeXtpZihvPXQuZ2V0QkJveCgpLChvPT1udWxsP3ZvaWQgMDpvLndpZHRoKT09PTApcmV0dXJufWNhdGNoKGMpe3JldHVybn1sZXQgYT0uOSpNYXRoLm1pbihpLndpZHRoLyhvPT1udWxsP3ZvaWQgMDpvLndpZHRoKSxpLmhlaWdodC8obz09bnVsbD92b2lkIDA6by5oZWlnaHQpLDIpLHM9VHIuZ3JhcGgsbD1YaC5zY2FsZShhKS50cmFuc2xhdGUocy5wYWRkaW5nLnBhZGRpbmdMZWZ0LHMucGFkZGluZy5wYWRkaW5nVG9wKTtIdChlKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5jYWxsKHIudHJhbnNmb3JtLGwpLm9uKCJlbmQuZml0dGVkIiwoKT0+e3Iub24oImVuZC5maXR0ZWQiLG51bGwpLG4oKX0pfWZ1bmN0aW9uIFNsZShlLHQscixuKXtsZXQgaT1IdCh0KS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7ZX0iXWApLm5vZGUoKTtpZighaSlyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHtlfSJgKSwhMTtsZXQgbz1pLmdldEJCb3goKSxhPWkuZ2V0U2NyZWVuQ1RNKCkscz10LmNyZWF0ZVNWR1BvaW50KCksbD10LmNyZWF0ZVNWR1BvaW50KCk7cy54PW8ueCxzLnk9by55LGwueD1vLngrby53aWR0aCxsLnk9by55K28uaGVpZ2h0LHM9cy5tYXRyaXhUcmFuc2Zvcm0oYSksbD1sLm1hdHJpeFRyYW5zZm9ybShhKTtsZXQgYz0ocCxkLGcsXyk9PiEocD5nJiZkPF8pLHU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXUubGVmdCt1LndpZHRoLUxjcixmPXUudG9wK3UuaGVpZ2h0LWtjcjtpZihjKHMueCxsLngsdS5sZWZ0LGgpfHxjKHMueSxsLnksdS50b3AsZikpe2xldCBwPShzLngrbC54KS8yLGQ9KHMueStsLnkpLzIsZz11LmxlZnQrdS53aWR0aC8yLXAsXz11LnRvcCt1LmhlaWdodC8yLWQseT1pMih0KTtyZXR1cm4gSHQodCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuY2FsbChuLnRyYW5zbGF0ZUJ5LGcveS5rLF8veS5rKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBNbGUoZSx0KXtsZXQgcj10Lm5vZGUudHlwZT09PWp0LlNFUklFUz8wOlRyLnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQ7YTMoUGwoZSwiZyIsSGkuU2NlbmUuQ09SRSksMCxyKTtsZXQgbj10Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wLGk9dC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjAsbz10LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wLGE9VHIuc3Vic2NlbmUubWV0YS5leHRyYWN0WE9mZnNldCxzPTA7aWYobiYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksaSYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksbil7bGV0IGw9dC5jb3JlQm94LndpZHRoO3M8bzM/bD1sLW8zK3QuaW5FeHRyYWN0Qm94LndpZHRoLzI6bD1sLXQuaW5FeHRyYWN0Qm94LndpZHRoLzItdC5vdXRFeHRyYWN0Qm94LndpZHRoLShpP2E6MCksbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLklORVhUUkFDVCksbCxyKX1pZihpKXtsZXQgbD10LmNvcmVCb3gud2lkdGg7czxvMz9sPWwtbzMrdC5vdXRFeHRyYWN0Qm94LndpZHRoLzI6bC09dC5vdXRFeHRyYWN0Qm94LndpZHRoLzIsbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLk9VVEVYVFJBQ1QpLGwscil9aWYobyl7bGV0IGw9dC5jb3JlQm94LndpZHRoLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC8yO2EzKFBsKGUsImciLEhpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLGwscil9fWZ1bmN0aW9uIEVsZShlLHQpe0h0KGUpLm9uKCJjbGljayIsKCk9Pnt0LmZpcmUoImdyYXBoLXNlbGVjdCIpfSl9ZnVuY3Rpb24gYTMoZSx0LHIpe2UuYXR0cigidHJhbnNmb3JtIikhPW51bGwmJihlPWUudHJhbnNpdGlvbigicG9zaXRpb24iKSksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIityKyIpIil9ZnVuY3Rpb24gemQoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJ4Iix0LW4vMikuYXR0cigieSIsci1pLzIpLmF0dHIoIndpZHRoIixuKS5hdHRyKCJoZWlnaHQiLGkpfWZ1bmN0aW9uIFRsZShlLHQscixuLGkpe2xldCBvPWkvMixhPW4vMixzPVtbdCxyLW9dLFt0K2EscitvXSxbdC1hLHIrb11dO2UudHJhbnNpdGlvbigpLmF0dHIoInBvaW50cyIscy5tYXAobD0+bC5qb2luKCIsIikpLmpvaW4oIiAiKSl9ZnVuY3Rpb24gQ2xlKGUsdCl7bGV0IHI9djAodCksbj10LmV4cGFuZGVkP3Qud2lkdGg6dC5jb3JlQm94LndpZHRoLGk9dC5leHBhbmRlZD90LmhlaWdodDp0LmNvcmVCb3guaGVpZ2h0LG89cituLzItNixhPXQueS1pLzIrNjt0Lm5vZGUudHlwZT09PWp0LlNFUklFUyYmIXQuZXhwYW5kZWQmJihvKz0xMCxhLT0yKTtsZXQgcz0idHJhbnNsYXRlKCIrbysiLCIrYSsiKSI7ZS5zZWxlY3RBbGwoInBhdGgiKS50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixzKSxlLnNlbGVjdCgiY2lyY2xlIikudHJhbnNpdGlvbigpLmF0dHIoe2N4Om8sY3k6YSxyOlRyLm5vZGVTaXplLm1ldGEuZXhwYW5kQnV0dG9uUmFkaXVzfSl9ZnVuY3Rpb24gTUgoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJjeCIsdCkuYXR0cigiY3kiLHIpLmF0dHIoInJ4IixuLzIpLmF0dHIoInJ5IixpLzIpfWZ1bmN0aW9uIGJsZShlLHQpe3JldHVybiB0P2UudG9GaXhlZCgwKTpNYXRoLmFicyhlKT49MT9lLnRvRml4ZWQoMSk6ZS50b0V4cG9uZW50aWFsKDEpfWZ1bmN0aW9uIFJjcihlLHQscixuKXtsZXQgaT0iRGV2aWNlOiAiK2UuZGV2aWNlX25hbWUrYApgO2krPSJkdHlwZTogIitlLmR0eXBlK2AKYDtsZXQgbz0iKHNjYWxhcikiO2Uuc2hhcGUubGVuZ3RoPjAmJihvPSIoIitlLnNoYXBlLmpvaW4oIiwiKSsiKSIpLGkrPWAKc2hhcGU6IGArbytgCgpgLGkrPSIjKGVsZW1lbnRzKTogIit0K2AKYDtsZXQgYT1bXTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdPjAmJmEucHVzaCgiIygiK2hQW3NdLmxhYmVsKyIpOiAiK3Jbc10pO3JldHVybiBpKz1hLmpvaW4oIiwgIikrYAoKYCxuLm1heD49bi5taW4mJihpKz0ibWluOiAiK24ubWluKyIsIG1heDogIituLm1heCtgCmAsaSs9Im1lYW46ICIrbi5tZWFuKyIsIHN0ZGRldjogIituLnN0ZGRldiksaX1mdW5jdGlvbiBOY3IoZSx0LHIsbixpPTYwLG89MTAsYT0wLHMpe2lmKEh0KGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKSwhdClyZXR1cm47bGV0IGw9dC52YWx1ZSxjPWwuc2xpY2UoMiw4KSx1PWNbMF0saD1jWzFdLGY9Y1s1XSxwPWxbMV0sZD17bWluOmxbOF0sbWF4OmxbOV0sbWVhbjpsWzEwXSxzdGRkZXY6TWF0aC5zcXJ0KGxbMTFdKX07aT09bnVsbCYmKGk9NjApLG89PW51bGwmJihvPTEwKSxhPT1udWxsJiYoYT0wKSxyIT1udWxsJiZyLm5vZGUudHlwZT09PWp0Lk9QJiYoaS89MixvLz0yKTtsZXQgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImciKTtnLmNsYXNzTGlzdC5hZGQoImhlYWx0aC1waWxsIik7bGV0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJkZWZzIik7Zy5hcHBlbmRDaGlsZChfKTtsZXQgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImxpbmVhckdyYWRpZW50IikseD0iaGVhbHRoLXBpbGwtZ3JhZGllbnQtIituO3kuc2V0QXR0cmlidXRlKCJpZCIseCk7bGV0IGI9MCxTPSIwJSI7Zm9yKGxldCBEPTA7RDxjLmxlbmd0aDtEKyspe2lmKCFjW0RdKWNvbnRpbnVlO2IrPWNbRF07bGV0IEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIik7Qi5zZXRBdHRyaWJ1dGUoIm9mZnNldCIsUyksQi5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGhQW0RdLmJhY2tncm91bmRfY29sb3IpLHkuYXBwZW5kQ2hpbGQoQik7bGV0IEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIiksTD1iKjEwMC9wKyIlIjtJLnNldEF0dHJpYnV0ZSgib2Zmc2V0IixMKSxJLnNldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIsaFBbRF0uYmFja2dyb3VuZF9jb2xvcikseS5hcHBlbmRDaGlsZChJKSxTPUx9Xy5hcHBlbmRDaGlsZCh5KTtsZXQgQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInJlY3QiKTtDLnNldEF0dHJpYnV0ZSgiZmlsbCIsInVybCgjIit4KyIpIiksQy5zZXRBdHRyaWJ1dGUoIndpZHRoIixTdHJpbmcoaSkpLEMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhvKSksQy5zZXRBdHRyaWJ1dGUoInkiLFN0cmluZyhhKSksZy5hcHBlbmRDaGlsZChDKTtsZXQgUD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInRpdGxlIik7UC50ZXh0Q29udGVudD1SY3IodCxwLGMsZCksZy5hcHBlbmRDaGlsZChQKTtsZXQgaz0hMTtpZihyIT1udWxsKXtsZXQgRD1yLngtaS8yLEI9ci55LW8tci5oZWlnaHQvMi0yO2lmKHIubGFiZWxPZmZzZXQ8MCYmKEIrPXIubGFiZWxPZmZzZXQpLGcuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitEKyIsICIrQisiKSIpLGNbMl18fGNbM118fGNbNF0pe2xldCBMPXIubm9kZS5hdHRyO2lmKEwmJkwubGVuZ3RoKXtmb3IobGV0IFI9MDtSPEwubGVuZ3RoO1IrKylpZihMW1JdLmtleT09PSJUIil7bGV0IEY9TFtSXS52YWx1ZS50eXBlO2s9RiYmL15EVF8oQk9PTHxJTlR8VUlOVCkvLnRlc3QoRik7YnJlYWt9fX19bGV0IE89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJ0ZXh0Iik7aWYoTnVtYmVyLmlzRmluaXRlKGQubWluKSYmTnVtYmVyLmlzRmluaXRlKGQubWF4KSl7bGV0IEQ9YmxlKGQubWluLGspLEI9YmxlKGQubWF4LGspO2lmKHA+MT9PLnRleHRDb250ZW50PUQrIiB+ICIrQjpPLnRleHRDb250ZW50PUQsdT4wfHxoPjB8fGY+MCl7Ty50ZXh0Q29udGVudCs9IiAoIjtsZXQgST1bXTt1PjAmJkkucHVzaChgTmFOXHhENyR7dX1gKSxoPjAmJkkucHVzaChgLVx1MjIxRVx4RDcke2h9YCksZj4wJiZJLnB1c2goYCtcdTIyMUVceEQ3JHtmfWApLE8udGV4dENvbnRlbnQrPUkuam9pbigiOyAiKSsiKSJ9fWVsc2UgTy50ZXh0Q29udGVudD0iKE5vIGZpbml0ZSBlbGVtZW50cykiO08uY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwtc3RhdHMiKSxzPT1udWxsJiYocz1pLzIpLE8uc2V0QXR0cmlidXRlKCJ4IixTdHJpbmcocykpLE8uc2V0QXR0cmlidXRlKCJ5IixTdHJpbmcoYS0yKSksZy5hcHBlbmRDaGlsZChPKSx6dChlLnBhcmVudE5vZGUpLmFwcGVuZENoaWxkKGcpfWZ1bmN0aW9uIEFsZShlLHQscil7aWYoIXQpcmV0dXJuO2xldCBuPTE7SHQoZSkuc2VsZWN0QWxsKCJnLm5vZGVzaGFwZSIpLmVhY2goZnVuY3Rpb24obyl7bGV0IGE9dFtvLm5vZGUubmFtZV0scz1hP2Fbcl06bnVsbDtOY3IodGhpcyxzLG8sbisrKX0pfXZhciBHbjsoZnVuY3Rpb24oZSl7ZS5OT05FPSJub25lIixlLkNPTVBVVEVfVElNRT0iY29tcHV0ZV90aW1lIixlLkRFVklDRT0iZGV2aWNlIixlLk1FTU9SWT0ibWVtb3J5IixlLk9QX0NPTVBBVElCSUxJVFk9Im9wX2NvbXBhdGliaWxpdHkiLGUuU1RSVUNUVVJFPSJzdHJ1Y3R1cmUiLGUuWExBX0NMVVNURVI9InhsYV9jbHVzdGVyIn0pKEdufHwoR249e30pKTt2YXIgZFA9RWUoT2UoKSwxKTt2YXIgVmk9RWUoT2UoKSwxKTtmdW5jdGlvbiBEY3IoZSl7bGV0IHQ9MCxyPTAsbj1lO2Zvcig7biYmbi5vZmZzZXRMZWZ0Pj0wJiZuLm9mZnNldFRvcD49MDspdCs9bi5vZmZzZXRMZWZ0LW4uc2Nyb2xsTGVmdCxyKz1uLm9mZnNldFRvcC1uLnNjcm9sbFRvcCxuPW4ub2Zmc2V0UGFyZW50O3JldHVybntsZWZ0OnQsdG9wOnJ9fWZ1bmN0aW9uIFlsdChlLHQpe2xldCByPWUuZ2V0Q29udGV4dE1lbnUoKSxuPUh0KGUuZ2V0Q29udGV4dE1lbnUoKSk7cmV0dXJuIGZ1bmN0aW9uKGksbyl7bGV0IGE9cXQscz1EY3IoZSk7bi5zdHlsZSgiZGlzcGxheSIsImJsb2NrIikuc3R5bGUoImxlZnQiLGEuY2xpZW50WC1zLmxlZnQrMSsicHgiKS5zdHlsZSgidG9wIixhLmNsaWVudFktcy50b3ArMSsicHgiKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKTtmdW5jdGlvbiBsKHUpe3UmJnUuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMocil8fChuLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSkpfWRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSksbi50ZXh0KCIiKSxuLmFwcGVuZCgidWwiKS5zZWxlY3RBbGwoImxpIikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgibGkiKS5vbigiY2xpY2siLCh1LGgpPT57dS5hY3Rpb24odGhpcyxpLG8pLGwoKX0pLnRleHQoZnVuY3Rpb24odSl7cmV0dXJuIHUudGl0bGUoaSl9KX19dmFyIENIPUVlKE9lKCksMSk7dmFyIHpjcj0iXHhENyIsUGxlPXFiKCkuZG9tYWluKFtKNCxRNF0pLnJhbmdlKFsic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsInhsYXJnZSJdKSxGY3I9Mi41O2Z1bmN0aW9uIGZQKGUpe3JldHVybiBlLnYrdGxlK2Uud31mdW5jdGlvbiBrbGUoZSx0LHIpe2xldCBuPXIsaT1bXTtpPUNILnJlZHVjZSh0LmVkZ2VzKCksKHMsbCk9PntsZXQgYz10LmVkZ2UobCk7cmV0dXJuIHMucHVzaCh7djpsLnYsdzpsLncsbGFiZWw6Y30pLHN9LGkpO2xldCBhPVBuKGUsImciLHllLkVkZ2UuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YShpLGZQKTtyZXR1cm4gYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIix5ZS5FZGdlLkdST1VQKS5hdHRyKCJkYXRhLWVkZ2UiLGZQKS5lYWNoKGZ1bmN0aW9uKHMpe2xldCBsPUh0KHRoaXMpO3MubGFiZWwuZWRnZUdyb3VwPWwsbi5fZWRnZUdyb3VwSW5kZXhbZlAocyldPWwsbi5oYW5kbGVFZGdlU2VsZWN0ZWQmJmwub24oImNsaWNrIixjPT57cXQuc3RvcFByb3BhZ2F0aW9uKCksbi5maXJlKCJlZGdlLXNlbGVjdCIse2VkZ2VEYXRhOmMsZWRnZUdyb3VwOmx9KX0pLCRsdChsLHMsbil9KS5tZXJnZShhKS5lYWNoKGZ1bmN0aW9uKCl7SGNyKHIsdGhpcyl9KS5lYWNoKGZ1bmN0aW9uKHMpe1ZjcihIdCh0aGlzKSxzLG4pfSksYS5leGl0KCkuZWFjaChzPT57ZGVsZXRlIG4uX2VkZ2VHcm91cEluZGV4W2ZQKHMpXX0pLnJlbW92ZSgpLGF9ZnVuY3Rpb24gamx0KGUsdCl7bGV0IHI9dC5nZXROb2RlQnlOYW1lKGUudik7aWYoci5vdXRwdXRTaGFwZXM9PW51bGx8fENILmlzRW1wdHkoci5vdXRwdXRTaGFwZXMpKXJldHVybiBudWxsO2xldCBuPXIub3V0cHV0U2hhcGVzW2Uub3V0cHV0VGVuc29yS2V5XTtyZXR1cm4gbj09bnVsbD9udWxsOm4ubGVuZ3RoPT09MD8ic2NhbGFyIjpuLm1hcChpPT5pPT09LTE/Ij8iOmkpLmpvaW4oemNyKX1mdW5jdGlvbiBYbHQoZSx0KXtyZXR1cm4gdC5lZGdlTGFiZWxGdW5jdGlvbj90LmVkZ2VMYWJlbEZ1bmN0aW9uKGUsdCk6ZS5iYXNlRWRnZUxpc3QubGVuZ3RoPjE/ZS5iYXNlRWRnZUxpc3QubGVuZ3RoKyIgdGVuc29ycyI6amx0KGUuYmFzZUVkZ2VMaXN0WzBdLHQpfWZ1bmN0aW9uIElsZShlLHQscil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJwYXRoIik7Zm9yKGxldCBpPTE7aTxlLmxlbmd0aDtpKyspaWYobi5zZXRBdHRyaWJ1dGUoImQiLHIoZS5zbGljZSgwLGkpKSksbi5nZXRUb3RhbExlbmd0aCgpPnQpcmV0dXJuIGktMTtyZXR1cm4gZS5sZW5ndGgtMX1mdW5jdGlvbiBMbGUoZSx0LHIpe2xldCBuPXZ1KCkueCh1PT51LngpLnkodT0+dS55KSxpPUh0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIikpLmF0dHIoImQiLG4oZSkpLG89K3QuYXR0cigibWFya2VyV2lkdGgiKSxhPXQuYXR0cigidmlld0JveCIpLnNwbGl0KCIgIikubWFwKE51bWJlcikscz1hWzJdLWFbMF0sbD0rdC5hdHRyKCJyZWZYIiksYz1pLm5vZGUoKTtpZihyKXtsZXQgdT0xLWwvcyxoPW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPUlsZShlLGgsbik7cmV0dXJuIGVbcC0xXT17eDpmLngseTpmLnl9LGUuc2xpY2UocC0xKX1lbHNle2xldCB1PTEtbC9zLGg9Yy5nZXRUb3RhbExlbmd0aCgpLW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPUlsZShlLGgsbik7cmV0dXJuIGVbcF09e3g6Zi54LHk6Zi55fSxlLnNsaWNlKDAscCsxKX19ZnVuY3Rpb24gJGx0KGUsdCxyLG4pe249bnx8eWUuRWRnZS5MSU5FLHQubGFiZWwmJnQubGFiZWwuc3RydWN0dXJhbCYmKG4rPSIgIit5ZS5FZGdlLlNUUlVDVFVSQUwpLHQubGFiZWwmJnQubGFiZWwubWV0YWVkZ2UmJnQubGFiZWwubWV0YWVkZ2UubnVtUmVmRWRnZXMmJihuKz0iICIreWUuRWRnZS5SRUZFUkVOQ0VfRURHRSksci5oYW5kbGVFZGdlU2VsZWN0ZWQmJihuKz0iICIreWUuRWRnZS5TRUxFQ1RBQkxFKTtsZXQgaT0icGF0aF8iK2ZQKHQpLG87aWYoci5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24pbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhGdW5jdGlvbih0LG4pO2Vsc2V7bGV0IGM9MTt0LmxhYmVsIT1udWxsJiZ0LmxhYmVsLm1ldGFlZGdlIT1udWxsJiYoYz10LmxhYmVsLm1ldGFlZGdlLnRvdGFsU2l6ZSksbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGUoYyl9bGV0IGE9ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsaSkuYXR0cigiY2xhc3MiLG4pLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4Iik7aWYodC5sYWJlbCYmdC5sYWJlbC5tZXRhZWRnZSlpZih0LmxhYmVsLm1ldGFlZGdlLm51bVJlZkVkZ2VzKXtsZXQgYz1gcmVmZXJlbmNlLWFycm93aGVhZC0ke1BsZShvKX1gO2Euc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtjfSlgKSx0LmxhYmVsLnN0YXJ0TWFya2VySWQ9Y31lbHNle2xldCBjPWBkYXRhZmxvdy1hcnJvd2hlYWQtJHtQbGUobyl9YDthLnN0eWxlKCJtYXJrZXItZW5kIixgdXJsKCMke2N9KWApLHQubGFiZWwuZW5kTWFya2VySWQ9Y31pZih0LmxhYmVsPT1udWxsfHx0LmxhYmVsLm1ldGFlZGdlPT1udWxsKXJldHVybjtsZXQgcz1YbHQodC5sYWJlbC5tZXRhZWRnZSxyLnJlbmRlckhpZXJhcmNoeSk7aWYocz09bnVsbClyZXR1cm47bGV0IGw9bz5GY3I/ImNlbnRyYWwiOiJ0ZXh0LWFmdGVyLWVkZ2UiO2UuYXBwZW5kKCJ0ZXh0IikuYXBwZW5kKCJ0ZXh0UGF0aCIpLmF0dHIoInhsaW5rOmhyZWYiLCIjIitpKS5hdHRyKCJzdGFydE9mZnNldCIsIjUwJSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikudGV4dChzKX12YXIgVEg9dnUoKS5jdXJ2ZShHOCkueChlPT5lLngpLnkoZT0+ZS55KTtmdW5jdGlvbiBCY3IoZSx0LHIsbixpKXtsZXQgbz1yLmxhYmVsLGE9by5hZGpvaW5pbmdNZXRhZWRnZSxzPW8ucG9pbnRzLHtzaGFkb3dSb290Omx9PWU7aWYoci5sYWJlbC5zdGFydE1hcmtlcklkJiYocz1MbGUocyxIdChsPT1udWxsP3ZvaWQgMDpsLnF1ZXJ5U2VsZWN0b3IoIiMiK3IubGFiZWwuc3RhcnRNYXJrZXJJZCkpLCEwKSksci5sYWJlbC5lbmRNYXJrZXJJZCYmKHM9TGxlKHMsSHQobD09bnVsbD92b2lkIDA6bC5xdWVyeVNlbGVjdG9yKCIjIityLmxhYmVsLmVuZE1hcmtlcklkKSksITEpKSwhYSlyZXR1cm4gbmMoaSxUSChzKSk7bGV0IGM9YS5lZGdlR3JvdXAubm9kZSgpLmZpcnN0Q2hpbGQsdT1vLm1ldGFlZGdlLmluYm91bmQ7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZhciBnO2xldCBmPWMuZ2V0UG9pbnRBdExlbmd0aCh1P2MuZ2V0VG90YWxMZW5ndGgoKTowKS5tYXRyaXhUcmFuc2Zvcm0oYy5nZXRDVE0oKSkubWF0cml4VHJhbnNmb3JtKChnPXQuZ2V0Q1RNKCkpPT1udWxsP3ZvaWQgMDpnLmludmVyc2UoKSkscD11PzA6cy5sZW5ndGgtMTtyZXR1cm4gc1twXS54PWYueCxzW3BdLnk9Zi55LFRIKHMpfX1mdW5jdGlvbiBIY3IoZSx0KXtIdCh0KS5zZWxlY3QoInBhdGguIit5ZS5FZGdlLkxJTkUpLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gQmNyKGUsdGhpcyxyLG4saSl9KX1mdW5jdGlvbiBWY3IoZSx0LHIpe2UuY2xhc3NlZCgiZmFkZWQiLHQubGFiZWwuaXNGYWRlZE91dCk7bGV0IG49dC5sYWJlbC5tZXRhZWRnZTtlLnNlbGVjdCgicGF0aC4iK3llLkVkZ2UuTElORSkuY2xhc3NlZCgiY29udHJvbC1kZXAiLG4mJiFuLm51bVJlZ3VsYXJFZGdlcyl9ZnVuY3Rpb24gQUgoZSx0LHIpe2xldCBpPVBuKGUsImciLHllLk5vZGUuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0LG89Pm8ubm9kZS5uYW1lKyI6IitvLm5vZGUudHlwZSk7cmV0dXJuIGkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJkYXRhLW5hbWUiLG89Pm8ubm9kZS5uYW1lKS5lYWNoKGZ1bmN0aW9uKG8pe2xldCBhPUh0KHRoaXMpO3IuYWRkTm9kZUdyb3VwKG8ubm9kZS5uYW1lLGEpfSkubWVyZ2UoaSkuYXR0cigiY2xhc3MiLG89PnllLk5vZGUuR1JPVVArIiAiK0hsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKSxzPVBuKGEsImciLHllLkFubm90YXRpb24uSU5CT1gpO09sZShzLG8uaW5Bbm5vdGF0aW9ucyxvLHIpO2xldCBsPVBuKGEsImciLHllLkFubm90YXRpb24uT1VUQk9YKTtPbGUobCxvLm91dEFubm90YXRpb25zLG8scik7bGV0IGM9QmxlKGEsbyx5ZS5Ob2RlLlNIQVBFKTtvLm5vZGUuaXNHcm91cE5vZGUmJnFjcihjLG8sciksRGxlKGMsbyxyKSxVY3IoYSxvLHIpO2xldCB1PVdjcihhLG8scik7RGxlKHUsbyxyLG8ubm9kZS50eXBlPT09anQuTUVUQSksczMoYSxvLHIpLGpjcihhLG8pfSksaS5leGl0KCkuZWFjaChmdW5jdGlvbihvKXtyLnJlbW92ZU5vZGVHcm91cChvLm5vZGUubmFtZSk7bGV0IGE9SHQodGhpcyk7by5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit5ZS5Bbm5vdGF0aW9uLklOQk9YKS5zZWxlY3RBbGwoIi4iK3llLkFubm90YXRpb24uR1JPVVApLmVhY2gocz0+e3IucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHMsbyl9KSxvLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit5ZS5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIit5ZS5Bbm5vdGF0aW9uLkdST1VQKS5lYWNoKHM9PntyLnJlbW92ZUFubm90YXRpb25Hcm91cChzLG8pfSl9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIFVjcihlLHQscil7aWYodC5ub2RlLmlzR3JvdXBOb2RlKXtpZih0LmV4cGFuZGVkKXJldHVybiByY3QoZSx0LHIseWUuU3Vic2NlbmUuR1JPVVApO1BsKGUsImciLHllLlN1YnNjZW5lLkdST1VQKS5yZW1vdmUoKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBObGUoZSx0KXtsZXQgcj10LngtdC53aWR0aC8yK3QucGFkZGluZ0xlZnQsbj10LnktdC5oZWlnaHQvMit0LnBhZGRpbmdUb3AsaT1QbChlLCJnIix5ZS5TdWJzY2VuZS5HUk9VUCk7YTMoaSxyLG4pfWZ1bmN0aW9uIHFjcihlLHQscil7bGV0IG49UG4oZSwiZyIseWUuTm9kZS5CVVRUT05fQ09OVEFJTkVSKTtQbihuLCJjaXJjbGUiLHllLk5vZGUuQlVUVE9OX0NJUkNMRSksUG4obiwicGF0aCIseWUuTm9kZS5FWFBBTkRfQlVUVE9OKS5hdHRyKCJkIiwiTTAsLTIuMiBWMi4yIE0tMi4yLDAgSDIuMiIpLFBuKG4sInBhdGgiLHllLk5vZGUuQ09MTEFQU0VfQlVUVE9OKS5hdHRyKCJkIiwiTS0yLjIsMCBIMi4yIiksbi5vbigiY2xpY2siLGk9PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtdG9nZ2xlLWV4cGFuZCIse25hbWU6aS5ub2RlLm5hbWV9KX0pLENsZShuLHQpfWZ1bmN0aW9uIERsZShlLHQscixuKXtpZihuKXtlLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3JldHVybn1sZXQgaT1ZbHQocix6bGUodC5ub2RlLHIpKTtlLm9uKCJkYmxjbGljayIsbz0+e3IuZmlyZSgibm9kZS10b2dnbGUtZXhwYW5kIix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oIm1vdXNlb3ZlciIsbz0+e3IuaXNOb2RlRXhwYW5kZWQobyl8fHIuZmlyZSgibm9kZS1oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigibW91c2VvdXQiLG89PntyLmlzTm9kZUV4cGFuZGVkKG8pfHxyLmZpcmUoIm5vZGUtdW5oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigiY2xpY2siLG89PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtc2VsZWN0Iix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oImNvbnRleHRtZW51IiwobyxhKT0+e3IuZmlyZSgibm9kZS1zZWxlY3QiLHtuYW1lOm8ubm9kZS5uYW1lfSksaS5jYWxsKG8sYSl9KX1mdW5jdGlvbiB6bGUoZSx0KXtsZXQgcj1be3RpdGxlOm49Pl9IKGUuaW5jbHVkZSksYWN0aW9uOihuLGksbyk9Pnt0LmZpcmUoIm5vZGUtdG9nZ2xlLWV4dHJhY3QiLHtuYW1lOmUubmFtZX0pfX1dO3JldHVybiB0Lm5vZGVDb250ZXh0TWVudUl0ZW1zJiYocj1yLmNvbmNhdCh0Lm5vZGVDb250ZXh0TWVudUl0ZW1zKSksUWx0KGUpJiZyLnB1c2goe3RpdGxlOm49PnRjdChlKSxhY3Rpb246KG4saSxvKT0+e3QuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOlBIKGUpfSl9fSkscn1mdW5jdGlvbiBRbHQoZSl7cmV0dXJuIFBIKGUpIT09bnVsbH1mdW5jdGlvbiBQSChlKXtyZXR1cm4gZT9lLnR5cGU9PT1qdC5TRVJJRVM/ZS5uYW1lOmUudHlwZT09PWp0Lk9QP2Uub3duaW5nU2VyaWVzOm51bGw6bnVsbH1mdW5jdGlvbiBHY3IoZSl7bGV0IHQ9bnVsbDtpZihlKWUudHlwZT09PWp0LlNFUklFUz90PWU6ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUudHlwZT09PWp0LlNFUklFUyYmKHQ9ZS5wYXJlbnROb2RlKTtlbHNlIHJldHVybiBudWxsO3JldHVybiB0fWZ1bmN0aW9uIHRjdChlKXtyZXR1cm4gb2xlKEdjcihlKSE9PW51bGw/aXMuR1JPVVA6aXMuVU5HUk9VUCl9ZnVuY3Rpb24gV2NyKGUsdCxyKXt2YXIgYztsZXQgbj10LmRpc3BsYXlOYW1lLGk9dC5ub2RlLnR5cGU9PT1qdC5NRVRBJiYhdC5leHBhbmRlZCxvPVBuKGUsInRleHQiLHllLk5vZGUuTEFCRUwpLGE9by5ub2RlKCk7KGM9YS5wYXJlbnROb2RlKT09bnVsbHx8Yy5hcHBlbmRDaGlsZChhKSxvLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xldCBzPTg7c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIGp0Lk1FVEE6cz10LmV4cGFuZGVkP1o0Lk5vZGUuRVhQQU5ERURfTEFCRUw6WjQuTm9kZS5TRVJJRVNfTEFCRUw7YnJlYWs7Y2FzZSBqdC5PUDpzPVo0Lk5vZGUuT1BfTEFCRUw7YnJlYWt9aWYoaSl7bi5sZW5ndGg+ci5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoJiYobj1uLnN1YnN0cigwLHIubWF4TWV0YW5vZGVMYWJlbExlbmd0aC0yKSsiXHUyMDI2Iik7bGV0IHU9WWNyKHIpO28uYXR0cigiZm9udC1zaXplIix1KG4ubGVuZ3RoKSsicHgiKSxzPXUobi5sZW5ndGgpfWxldCBsPW8udGV4dChuKTtyZXR1cm4gRmxlKGwsdC5ub2RlLnR5cGUscyx0KSxvfWZ1bmN0aW9uIEZsZShlLHQscixuKXtsZXQgaT1lLm5vZGUoKSxvPWkudGV4dENvbnRlbnQsYT1udWxsO3N3aXRjaCh0KXtjYXNlIGp0Lk1FVEE6biYmIW4uZXhwYW5kZWQmJihhPVRyLm5vZGVTaXplLm1ldGEubWF4TGFiZWxXaWR0aCk7YnJlYWs7Y2FzZSBqdC5PUDphPVRyLm5vZGVTaXplLm9wLm1heExhYmVsV2lkdGg7YnJlYWs7Y2FzZS0xOmE9VHIuYW5ub3RhdGlvbnMubWF4TGFiZWxXaWR0aDticmVhaztkZWZhdWx0OmJyZWFrfWlmKGEhPT1udWxsKXJldHVybiBpLnRleHRDb250ZW50PSRzZShpLnRleHRDb250ZW50LHIsYSksZS5hcHBlbmQoInRpdGxlIikudGV4dChvKX12YXIgS2x0PW51bGw7ZnVuY3Rpb24gWWNyKGUpe3JldHVybiBLbHR8fChLbHQ9em4oKS5kb21haW4oW2UubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udCxlLm1heE1ldGFub2RlTGFiZWxMZW5ndGhdKS5yYW5nZShbZS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemUsZS5taW5NZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemVdKS5jbGFtcCghMCkpLEtsdH1mdW5jdGlvbiBwUChlLHQscixuKXtQbChlLCJ0ZXh0Iix5ZS5Ob2RlLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsdCkuYXR0cigieSIscituKX1mdW5jdGlvbiBCbGUoZSx0LHIpe2xldCBuPVBuKGUsImciLHIpO3N3aXRjaCh0Lm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpsZXQgaT10Lm5vZGU7aWYoVmkuaXNOdW1iZXIoaS5mdW5jdGlvbklucHV0SW5kZXgpfHxWaS5pc051bWJlcihpLmZ1bmN0aW9uT3V0cHV0SW5kZXgpKXtQbihuLCJwb2x5Z29uIix5ZS5Ob2RlLkNPTE9SX1RBUkdFVCk7YnJlYWt9UG4obiwiZWxsaXBzZSIseWUuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2UganQuU0VSSUVTOmxldCBvPSJhbm5vdGF0aW9uIixhPXQ7YS5jb3JlR3JhcGgmJihvPWEubm9kZS5oYXNOb25Db250cm9sRWRnZXM/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIpO2xldCBzPVt5ZS5Ob2RlLkNPTE9SX1RBUkdFVF07YS5pc0ZhZGVkT3V0JiZzLnB1c2goImZhZGVkLWVsbGlwc2UiKSxQbihuLCJ1c2UiLHMpLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIrbysiLXN0YW1wIiksUG4obiwicmVjdCIseWUuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4Iix0LnJhZGl1cykuYXR0cigicnkiLHQucmFkaXVzKTticmVhaztjYXNlIGp0LkJSSURHRTpQbihuLCJyZWN0Iix5ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2Nhc2UganQuTUVUQTpQbihuLCJyZWN0Iix5ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrdC5ub2RlLnR5cGUpfXJldHVybiBufWZ1bmN0aW9uIEhsZShlKXtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2UganQuT1A6cmV0dXJuIHllLk9QTk9ERTtjYXNlIGp0Lk1FVEE6cmV0dXJuIHllLk1FVEFOT0RFO2Nhc2UganQuU0VSSUVTOnJldHVybiB5ZS5TRVJJRVNOT0RFO2Nhc2UganQuQlJJREdFOnJldHVybiB5ZS5CUklER0VOT0RFO2Nhc2UganQuRUxMSVBTSVM6cmV0dXJuIHllLkVMTElQU0lTTk9ERX10aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSl9ZnVuY3Rpb24gamNyKGUsdCl7bGV0IHI9UGwoZSwiZyIseWUuTm9kZS5TSEFQRSksbj12MCh0KTtzd2l0Y2godC5ub2RlLnR5cGUpe2Nhc2UganQuT1A6e2xldCBpPXQubm9kZTtpZihWaS5pc051bWJlcihpLmZ1bmN0aW9uSW5wdXRJbmRleCl8fFZpLmlzTnVtYmVyKGkuZnVuY3Rpb25PdXRwdXRJbmRleCkpe2xldCBvPVBsKHIsInBvbHlnb24iKTtUbGUobyx0LngsdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1lbHNle2xldCBvPVBsKHIsImVsbGlwc2UiKTtNSChvLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1wUChlLG4sdC55LHQubGFiZWxPZmZzZXQpO2JyZWFrfWNhc2UganQuTUVUQTp7bGV0IGk9ci5zZWxlY3RBbGwoInJlY3QiKTt0LmV4cGFuZGVkPyh6ZChpLHQueCx0LnksdC53aWR0aCx0LmhlaWdodCksTmxlKGUsdCkscFAoZSxuLHQueSwtdC5oZWlnaHQvMit0LmxhYmVsSGVpZ2h0LzIpKTooemQoaSxuLHQueSx0LmNvcmVCb3gud2lkdGgsdC5jb3JlQm94LmhlaWdodCkscFAoZSxuLHQueSwwKSk7YnJlYWt9Y2FzZSBqdC5TRVJJRVM6e2xldCBpPVBsKHIsInVzZSIpO3QuZXhwYW5kZWQ/KHpkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KSxObGUoZSx0KSxwUChlLG4sdC55LC10LmhlaWdodC8yK3QubGFiZWxIZWlnaHQvMikpOih6ZChpLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KSxwUChlLG4sdC55LHQubGFiZWxPZmZzZXQpKTticmVha31jYXNlIGp0LkJSSURHRTp7bGV0IGk9UGwociwicmVjdCIpO3pkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKX19ZnVuY3Rpb24gWmx0KGUsdCxyKXtsZXQgbj1qc2UoZSk7aWYoIXIpcmV0dXJuYHVybCgjJHtufSlgO2xldCBpPUh0KHIpLG89aS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpO28uZW1wdHkoKSYmKG89aS5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsIl9ncmFwaC1ncmFkaWVudHMiKSk7bGV0IGE9by5zZWxlY3QoImxpbmVhckdyYWRpZW50IyIrbik7aWYoYS5lbXB0eSgpKXthPW8uYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIixlKSxhLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2xldCBzPTA7VmkuZWFjaCh0LGw9PntsZXQgYz1sLmNvbG9yO2EuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixzKS5hdHRyKCJzdG9wLWNvbG9yIixjKSxhLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIscytsLnByb3BvcnRpb24pLmF0dHIoInN0b3AtY29sb3IiLGMpLHMrPWwucHJvcG9ydGlvbn0pfXJldHVybmB1cmwoIyR7bn0pYH1mdW5jdGlvbiBJSChlKXtIdChlKS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpLnJlbW92ZSgpfWZ1bmN0aW9uIExIKGUsdCxyLG4saSl7bGV0IG89S3U7c3dpdGNoKGU9ZXx8KCgpPT4wKSx0KXtjYXNlIEduLk5PTkU6Y2FzZSBHbi5TVFJVQ1RVUkU6aWYoci5ub2RlLnR5cGU9PT1qdC5NRVRBKXtsZXQgYT1yLm5vZGUudGVtcGxhdGVJZDtyZXR1cm4gdD09PUduLlNUUlVDVFVSRSYmYSE9PW51bGw/by5TVFJVQ1RVUkVfUEFMRVRURShlKGEpLG4pOm8uVU5LTk9XTn1lbHNlIHJldHVybiByLm5vZGUudHlwZT09PWp0LlNFUklFUz9uP28uRVhQQU5ERURfQ09MT1I6IndoaXRlIjpyLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnN0cnVjdHVyYWw/IiNmMGUiOnIubm9kZS5pbmJvdW5kPyIjMGVmIjoiI2ZlMCI6VmkuaXNOdW1iZXIoci5ub2RlLmZ1bmN0aW9uSW5wdXRJbmRleCk/IiM3OTU1NDgiOlZpLmlzTnVtYmVyKHIubm9kZS5mdW5jdGlvbk91dHB1dEluZGV4KT8iIzAwOTY4OCI6IndoaXRlIjtjYXNlIEduLkRFVklDRTpyZXR1cm4gci5kZXZpY2VDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpabHQoImRldmljZS0iK3Iubm9kZS5uYW1lLHIuZGV2aWNlQ29sb3JzLGkpO2Nhc2UgR24uWExBX0NMVVNURVI6cmV0dXJuIHIueGxhQ2x1c3RlckNvbG9ycz09bnVsbD9vLlVOS05PV046bj9vLkVYUEFOREVEX0NPTE9SOlpsdCgieGxhLSIrci5ub2RlLm5hbWUsci54bGFDbHVzdGVyQ29sb3JzLGkpO2Nhc2UgR24uQ09NUFVURV9USU1FOnJldHVybiBuP28uRVhQQU5ERURfQ09MT1I6ci5jb21wdXRlVGltZUNvbG9yfHxvLlVOS05PV047Y2FzZSBHbi5NRU1PUlk6cmV0dXJuIG4/by5FWFBBTkRFRF9DT0xPUjpyLm1lbW9yeUNvbG9yfHxvLlVOS05PV047Y2FzZSBHbi5PUF9DT01QQVRJQklMSVRZOnJldHVybiByLmNvbXBhdGliaWxpdHlDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpabHQoIm9wLWNvbXBhdC0iK3Iubm9kZS5uYW1lLHIuY29tcGF0aWJpbGl0eUNvbG9ycyxpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjYXNlIHRvIGNvbG9yIG5vZGVzIGJ5Iil9fWZ1bmN0aW9uIHMzKGUsdCxyLG4pe249bnx8eWUuTm9kZS5TSEFQRTtsZXQgaT1yLmlzTm9kZUhpZ2hsaWdodGVkKHQubm9kZS5uYW1lKSxvPXIuaXNOb2RlU2VsZWN0ZWQodC5ub2RlLm5hbWUpLGE9dC5pc0luRXh0cmFjdHx8dC5pc091dEV4dHJhY3R8fHQuaXNMaWJyYXJ5RnVuY3Rpb24scz10LmV4cGFuZGVkJiZuIT09eWUuQW5ub3RhdGlvbi5OT0RFLGw9dC5pc0ZhZGVkT3V0O2UuY2xhc3NlZCgiaGlnaGxpZ2h0ZWQiLGkpLGUuY2xhc3NlZCgic2VsZWN0ZWQiLG8pLGUuY2xhc3NlZCgiZXh0cmFjdCIsYSksZS5jbGFzc2VkKCJleHBhbmRlZCIscyksZS5jbGFzc2VkKCJmYWRlZCIsbCk7bGV0IGM9ZS5zZWxlY3QoIi4iK24rIiAuIit5ZS5Ob2RlLkNPTE9SX1RBUkdFVCksdT1MSChyLnRlbXBsYXRlSW5kZXgsci5jb2xvckJ5LHQscyxyLmdldEdyYXBoU3ZnUm9vdCgpKTtjLnN0eWxlKCJmaWxsIix1KSxjLnN0eWxlKCJzdHJva2UiLG8/bnVsbDplY3QodSkpfWZ1bmN0aW9uIGVjdChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCwzKT09PSJ1cmwiP0t1LkdSQURJRU5UX09VVExJTkU6Y3UoZSkuZGFya2VyKCkudG9TdHJpbmcoKX1mdW5jdGlvbiBWbGUoZSx0LHIsbil7bGV0IGk9SHQoZSk7aWYoaS5zZWxlY3RBbGwoIi5pbnB1dC1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITEpLGkuc2VsZWN0QWxsKCIuaW5wdXQtcGFyZW50IikuY2xhc3NlZCgiaW5wdXQtcGFyZW50IiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMSksaS5zZWxlY3RBbGwoIi5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpLCF0fHwhbnx8IXIpcmV0dXJuO2xldCBvPVVsZShyLHQpLGE9e307VmkuZWFjaChvLGZ1bmN0aW9uKGMpe2E9cWxlKGUsdCxjLGEpfSk7bGV0IHM9T2JqZWN0LmtleXMoYSksbD0kY3IodCxzKTtLY3IoZSxsKSxpLnNlbGVjdEFsbCgiZy5ub2RlOm5vdCguc2VsZWN0ZWQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LXBhcmVudCk6bm90KC5pbnB1dC1jaGlsZHJlbikiKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKS5lYWNoKGZ1bmN0aW9uKGMpe2xldCB1PWMubm9kZS5uYW1lO2kuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke3V9Il1gKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKX0pLGkuc2VsZWN0QWxsKCJnLmVkZ2U6bm90KC5pbnB1dC1lZGdlLWhpZ2hsaWdodCkiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX1mdW5jdGlvbiBVbGUoZSx0KXtsZXQgcj1bXSxuPXQuZ2V0Tm9kZUJ5TmFtZShlKTtpZihuIGluc3RhbmNlb2YgXzApcmV0dXJuW25dLmNvbmNhdChuLmluRW1iZWRkaW5ncyk7bGV0IGk9bi5tZXRhZ3JhcGgubm9kZXMoKTtyZXR1cm4gVmkuZWFjaChpLGZ1bmN0aW9uKG8pe3I9ci5jb25jYXQoVWxlKG8sdCkpfSkscn1mdW5jdGlvbiBxbGUoZSx0LHIsbil7aWYobltyLm5hbWVdKXJldHVybiBuO25bci5uYW1lXT0hMDtsZXQgaT1yLmlucHV0cyxvPUpsdCh0LHIpO0h0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke28ubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITApO2xldCBhPXt9O1ZpLmVhY2goaSxmdW5jdGlvbih1KXtsZXQgaD10LmdldE5vZGVCeU5hbWUodS5uYW1lKTtpZihoPT09dm9pZCAwKXJldHVybjtpZihoIGluc3RhbmNlb2Ygb1Ape2xldCBkPWFQKGgubmFtZSk7aD10LmdldE5vZGVCeU5hbWUoZCl9bGV0IGY9Smx0KHQsaCkscD1hW2YubmFtZV07cD9wLm9wTm9kZXMucHVzaChoKTphW2YubmFtZV09e3Zpc2libGVQYXJlbnQ6ZixvcE5vZGVzOltoXX19KTtsZXQgcz17fSxsPVtvXTtzW28ubmFtZV09e3RyYWNlZDohMSxpbmRleDowLGNvbm5lY3Rpb25FbmRwb2ludHM6W119O2xldCBjPW87Zm9yKGxldCB1PTE7Yy5uYW1lIT09cWM7dSsrKWM9Yy5wYXJlbnROb2RlLHNbYy5uYW1lXT17dHJhY2VkOiExLGluZGV4OnUsY29ubmVjdGlvbkVuZHBvaW50czpbXX0sbFt1XT1jO3JldHVybiBWaS5mb3JPd24oYSxmdW5jdGlvbih1LGgpe2xldCBmPXUudmlzaWJsZVBhcmVudDtWaS5lYWNoKHUub3BOb2RlcyxmdW5jdGlvbihwKXtuPXFsZShlLHQscCxuKX0pLGYubmFtZSE9PW8ubmFtZSYmWGNyKGUsZixzLGwpfSksbn1mdW5jdGlvbiBYY3IoZSx0LHIsbil7bGV0IGk9dCxvPXQsYT1bXTtmb3IoOyFyW2kubmFtZV07KW8ubmFtZSE9PWkubmFtZSYmYS5wdXNoKFtvLGldKSxvPWksaT1pLnBhcmVudE5vZGU7bGV0IHM9cltpLm5hbWVdLmluZGV4LGw9bltNYXRoLm1heChzLTEsMCldLm5hbWUsYz1sLHU9by5uYW1lLGg9by5uYW1lLGY9SHQoZSk7Zi5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7aH0tLSR7bH0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCksVmkuZWFjaChhLGZ1bmN0aW9uKHApe2xldCBkPXBbMF0sZz1wWzFdLF89YFtkYXRhLWVkZ2U9IiR7ZC5uYW1lfS0tJHtjfX5+JHtnLm5hbWV9fn5PVVQiXWA7Zi5zZWxlY3RBbGwoXykuY2xhc3NlZCgiaW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX0pO2ZvcihsZXQgcD0xO3A8cztwKyspe2xldCBkPW5bcC0xXSxnPW5bcF0sXz1gW2RhdGEtZWRnZT0iJHt1fX5+JHtnLm5hbWV9fn5JTi0tJHtkLm5hbWV9Il1gO2Yuc2VsZWN0QWxsKF8pLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9fWZ1bmN0aW9uICRjcihlLHQpe2xldCByPXt9O3JldHVybiBWaS5lYWNoKHQsZnVuY3Rpb24obil7bGV0IGk9ZS5nZXROb2RlQnlOYW1lKG4pLG89Smx0KGUsaSk7cltvLm5hbWVdPW99KSxyfWZ1bmN0aW9uIEtjcihlLHQpe1ZpLmZvck93bih0LGZ1bmN0aW9uKHIpe2xldCBuPXI7Zm9yKDtuLm5hbWUhPT1xYzspe2xldCBpPUh0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke24ubmFtZX0iXWApO2kubm9kZXMoKS5sZW5ndGgmJiFpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIpJiYhaS5jbGFzc2VkKCJzZWxlY3RlZCIpJiYhaS5jbGFzc2VkKCJvcCIpJiZpLmNsYXNzZWQoImlucHV0LXBhcmVudCIsITApLG49bi5wYXJlbnROb2RlfX0pfWZ1bmN0aW9uIEpsdChlLHQpe2xldCByPSExLG49dDtmb3IoOyFyOylpZih0PW4sbj10LnBhcmVudE5vZGUsbj09PXZvaWQgMClyPSEwO2Vsc2V7bGV0IGk9ZS5nZXRSZW5kZXJOb2RlQnlOYW1lKG4ubmFtZSk7aSYmKGkuZXhwYW5kZWR8fG4gaW5zdGFuY2VvZiBfMCkmJihyPSEwKX1yZXR1cm4gdH1mdW5jdGlvbiBPbGUoZSx0LHIsbil7bGV0IGk9ZS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0Lmxpc3Qsbz0+by5ub2RlLm5hbWUpO3JldHVybiBpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIixvPT5vLm5vZGUubmFtZSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtuLmFkZEFubm90YXRpb25Hcm91cChvLHIsYSk7bGV0IHM9eWUuQW5ub3RhdGlvbi5FREdFLGw9by5yZW5kZXJNZXRhZWRnZUluZm8mJm8ucmVuZGVyTWV0YWVkZ2VJbmZvLm1ldGFlZGdlO2wmJiFsLm51bVJlZ3VsYXJFZGdlcyYmKHMrPSIgIit5ZS5Bbm5vdGF0aW9uLkNPTlRST0xfRURHRSksbCYmbC5udW1SZWZFZGdlcyYmKHMrPSIgIit5ZS5FZGdlLlJFRl9MSU5FKSwkbHQoYSxvLG4scyksby5hbm5vdGF0aW9uVHlwZSE9PV9pLkVMTElQU0lTPyhRY3IoYSxvKSxKY3IoYSxvKSk6R2xlKGEsby5ub2RlLm5hbWUsbyx5ZS5Bbm5vdGF0aW9uLkVMTElQU0lTKX0pLm1lcmdlKGkpLmF0dHIoImNsYXNzIixvPT55ZS5Bbm5vdGF0aW9uLkdST1VQKyIgIitaY3Ioby5hbm5vdGF0aW9uVHlwZSkrIiAiK0hsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtldXIoYSxyLG8sbiksby5hbm5vdGF0aW9uVHlwZSE9PV9pLkVMTElQU0lTJiZ0dXIoYSxyLG8sbil9KSxpLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKG8pe24ucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKG8scil9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIFpjcihlKXtyZXR1cm4oX2lbZV18fCIiKS50b0xvd2VyQ2FzZSgpfHxudWxsfWZ1bmN0aW9uIEpjcihlLHQpe2lmKHQuYW5ub3RhdGlvblR5cGU9PT1faS5TVU1NQVJZKVBuKGUsInVzZSIpLmF0dHIoImNsYXNzIiwic3VtbWFyeSIpLmF0dHIoInhsaW5rOmhyZWYiLCIjc3VtbWFyeS1pY29uIikuYXR0cigiY3Vyc29yIiwicG9pbnRlciIpO2Vsc2V7bGV0IHI9QmxlKGUsdCx5ZS5Bbm5vdGF0aW9uLk5PREUpO1BuKHIsInRpdGxlIikudGV4dCh0Lm5vZGUubmFtZSl9fWZ1bmN0aW9uIFFjcihlLHQpe2xldCByPXQubm9kZS5uYW1lLnNwbGl0KCIvIiksbj1yW3IubGVuZ3RoLTFdO3JldHVybiBHbGUoZSxuLHQsbnVsbCl9ZnVuY3Rpb24gR2xlKGUsdCxyLG4pe2xldCBpPXllLkFubm90YXRpb24uTEFCRUw7biYmKGkrPSIgIituKTtsZXQgbz1lLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJkeSIsIi4zNWVtIikuYXR0cigidGV4dC1hbmNob3IiLHIuaXNJbj8iZW5kIjoic3RhcnQiKS50ZXh0KHQpO3JldHVybiBGbGUobywtMSxaNC5Bbm5vdGF0aW9uLkxBQkVMKX1mdW5jdGlvbiB0dXIoZSx0LHIsbil7ZS5vbigibW91c2VvdmVyIixpPT57bi5maXJlKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJtb3VzZW91dCIsaT0+e24uZmlyZSgiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJjbGljayIsaT0+e3F0LnN0b3BQcm9wYWdhdGlvbigpLG4uZmlyZSgiYW5ub3RhdGlvbi1zZWxlY3QiLHtuYW1lOmkubm9kZS5uYW1lLGhvc3ROYW1lOnQubm9kZS5uYW1lfSl9KSxyLmFubm90YXRpb25UeXBlIT09X2kuU1VNTUFSWSYmci5hbm5vdGF0aW9uVHlwZSE9PV9pLkNPTlNUQU5UJiZlLm9uKCJjb250ZXh0bWVudSIsWWx0KG4semxlKHIubm9kZSxuKSkpfWZ1bmN0aW9uIGV1cihlLHQscixuKXtsZXQgaT12MCh0KTtyLnJlbmRlck5vZGVJbmZvJiZyLmFubm90YXRpb25UeXBlIT09X2kuRUxMSVBTSVMmJnMzKGUsci5yZW5kZXJOb2RlSW5mbyxuLHllLkFubm90YXRpb24uTk9ERSksci5hbm5vdGF0aW9uVHlwZT09PV9pLlNVTU1BUlkmJihyLndpZHRoKz0xMCksZS5zZWxlY3QoInRleHQuIit5ZS5Bbm5vdGF0aW9uLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsaStyLmR4KyhyLmlzSW4/LTE6MSkqKHIud2lkdGgvMityLmxhYmVsT2Zmc2V0KSkuYXR0cigieSIsdC55K3IuZHkpLGUuc2VsZWN0KCJ1c2Uuc3VtbWFyeSIpLnRyYW5zaXRpb24oKS5hdHRyKCJ4IixpK3IuZHgtMykuYXR0cigieSIsdC55K3IuZHktNiksTUgoZS5zZWxlY3QoIi4iK3llLkFubm90YXRpb24uTk9ERSsiIGVsbGlwc2UiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3llLkFubm90YXRpb24uTk9ERSsiIHJlY3QiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3llLkFubm90YXRpb24uTk9ERSsiIHVzZSIpLGkrci5keCx0Lnkrci5keSxyLndpZHRoLHIuaGVpZ2h0KSxlLnNlbGVjdCgicGF0aC4iK3llLkFubm90YXRpb24uRURHRSkudHJhbnNpdGlvbigpLmF0dHIoImQiLG89PntsZXQgYT1vLnBvaW50cy5tYXAocz0+KHt4OnMuZHgraSx5OnMuZHkrdC55fSkpO3JldHVybiBUSChhKX0pfWZ1bmN0aW9uIHJjdChlLHQscixuKXtuPW58fHllLlNjZW5lLkdST1VQO2xldCBpPW0wKGUsImciLG4pLmVtcHR5KCksbz1QbihlLCJnIixuKSxhPVBuKG8sImciLHllLlNjZW5lLkNPUkUpLHM9VmkucmVkdWNlKHQuY29yZUdyYXBoLm5vZGVzKCksKGwsYyk9PntsZXQgdT10LmNvcmVHcmFwaC5ub2RlKGMpO3JldHVybiB1LmV4Y2x1ZGVkfHxsLnB1c2godSksbH0sQXJyYXkoKSk7aWYodC5ub2RlLnR5cGU9PT1qdC5TRVJJRVMmJnMucmV2ZXJzZSgpLGtsZShhLHQuY29yZUdyYXBoLHIpLEFIKGEscyxyKSx0Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1QbihvLCJnIix5ZS5TY2VuZS5JTkVYVFJBQ1QpO0FIKGwsdC5pc29sYXRlZEluRXh0cmFjdCxyKX1lbHNlIG0wKG8sImciLHllLlNjZW5lLklORVhUUkFDVCkucmVtb3ZlKCk7aWYodC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjApe2xldCBsPVBuKG8sImciLHllLlNjZW5lLk9VVEVYVFJBQ1QpO0FIKGwsdC5pc29sYXRlZE91dEV4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix5ZS5TY2VuZS5PVVRFWFRSQUNUKS5yZW1vdmUoKTtpZih0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1QbihvLCJnIix5ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKTtBSChsLHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix5ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5yZW1vdmUoKTtyZXR1cm4gTWxlKG8sdCksaSYmby5hdHRyKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsMSksb312YXIgcnVyPS44LGtIPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLnN2Zz10LHRoaXMubGFiZWxQYWRkaW5nPWEsdGhpcy56b29tRz1yLHRoaXMubWFpblpvb209bix0aGlzLm1heFdhbmRIPW87bGV0IHM9SHQoaS5zaGFkb3dSb290KSxsPXMuc2VsZWN0KCJzdmciKSxjPWwuc2VsZWN0KCJyZWN0IiksdT1mPT57dGhpcy52aWV3cG9pbnRDb29yZC54PXF0LngsdGhpcy52aWV3cG9pbnRDb29yZC55PXF0LnksdGhpcy51cGRhdGVWaWV3cG9pbnQoKX07dGhpcy52aWV3cG9pbnRDb29yZD17eDowLHk6MH07bGV0IGg9cGIoKS5zdWJqZWN0KE9iamVjdCkub24oImRyYWciLHUpO2MuZGF0dW0odGhpcy52aWV3cG9pbnRDb29yZCkuY2FsbChoKSxsLm9uKCJjbGljayIsKCk9PntpZihxdC5kZWZhdWx0UHJldmVudGVkKXJldHVybjtsZXQgZj1OdW1iZXIoYy5hdHRyKCJ3aWR0aCIpKSxwPU51bWJlcihjLmF0dHIoImhlaWdodCIpKSxkPXpvKGwubm9kZSgpKTt0aGlzLnZpZXdwb2ludENvb3JkLng9ZFswXS1mLzIsdGhpcy52aWV3cG9pbnRDb29yZC55PWRbMV0tcC8yLHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSx0aGlzLnZpZXdwb2ludD1jLm5vZGUoKSx0aGlzLm1pbmltYXBTdmc9bC5ub2RlKCksdGhpcy5taW5pbWFwPWksdGhpcy5jYW52YXM9cy5zZWxlY3QoImNhbnZhcy5maXJzdCIpLm5vZGUoKSx0aGlzLmNhbnZhc0J1ZmZlcj1zLnNlbGVjdCgiY2FudmFzLnNlY29uZCIpLm5vZGUoKSx0aGlzLmRvd25sb2FkQ2FudmFzPXMuc2VsZWN0KCJjYW52YXMuZG93bmxvYWQiKS5ub2RlKCksSHQodGhpcy5kb3dubG9hZENhbnZhcykuc3R5bGUoImRpc3BsYXkiLCJub25lIiksdGhpcy51cGRhdGUoKX11cGRhdGVWaWV3cG9pbnQoKXtIdCh0aGlzLnZpZXdwb2ludCkuYXR0cigieCIsdGhpcy52aWV3cG9pbnRDb29yZC54KS5hdHRyKCJ5Iix0aGlzLnZpZXdwb2ludENvb3JkLnkpO2xldCB0PS10aGlzLnZpZXdwb2ludENvb3JkLngqdGhpcy5zY2FsZU1haW4vdGhpcy5zY2FsZU1pbmltYXAscj0tdGhpcy52aWV3cG9pbnRDb29yZC55KnRoaXMuc2NhbGVNYWluL3RoaXMuc2NhbGVNaW5pbWFwO0h0KHRoaXMuc3ZnKS5jYWxsKHRoaXMubWFpblpvb20udHJhbnNmb3JtLFhoLnRyYW5zbGF0ZSh0LHIpLnNjYWxlKHRoaXMuc2NhbGVNYWluKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pnt0aGlzLmRvd25sb2FkQ2FudmFzLnRvQmxvYihyPT57dChyKX0sImltYWdlL3BuZyIpfSl9dXBkYXRlKCl7bGV0IHQ9bnVsbDt0cnl7aWYodD10aGlzLnpvb21HLmdldEJCb3goKSx0LndpZHRoPT09MClyZXR1cm59Y2F0Y2gocCl7cmV0dXJufWxldCByPUh0KHRoaXMuc3ZnKSxuPSIiLGk9dGhpcy5zdmcsYT0oaS5nZXRSb290Tm9kZT9pLmdldFJvb3ROb2RlKCk6dGhpcy5zdmcucGFyZW50Tm9kZSkuc3R5bGVTaGVldHM7Zm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKyspdHJ5e2xldCBkPWFbcF0uY3NzUnVsZXN8fGFbcF0ucnVsZXM7aWYoZD09bnVsbCljb250aW51ZTtmb3IobGV0IGc9MDtnPGQubGVuZ3RoO2crKyluKz1kW2ddLmNzc1RleHQucmVwbGFjZSgvID90Zi1bXHctXSsgPy9nLCIiKStgCmB9Y2F0Y2goZCl7aWYoZC5uYW1lIT09IlNlY3VyaXR5RXJyb3IiKXRocm93IGR9bGV0IHM9ci5hcHBlbmQoInN0eWxlIik7cy50ZXh0KG4pO2xldCBsPUh0KHRoaXMuem9vbUcpLGM9bC5hdHRyKCJ0cmFuc2Zvcm0iKTtsLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdC5oZWlnaHQrPXQueSx0LndpZHRoKz10LngsdC5oZWlnaHQrPXRoaXMubGFiZWxQYWRkaW5nKjIsdC53aWR0aCs9dGhpcy5sYWJlbFBhZGRpbmcqMixyLmF0dHIoIndpZHRoIix0LndpZHRoKS5hdHRyKCJoZWlnaHQiLHQuaGVpZ2h0KSx0aGlzLnNjYWxlTWluaW1hcD10aGlzLm1heFdhbmRIL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMubWluaW1hcFNpemU9e3dpZHRoOnQud2lkdGgqdGhpcy5zY2FsZU1pbmltYXAsaGVpZ2h0OnQuaGVpZ2h0KnRoaXMuc2NhbGVNaW5pbWFwfSxIdCh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSksSHQodGhpcy5jYW52YXNCdWZmZXIpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7bGV0IHU9SHQodGhpcy5kb3dubG9hZENhbnZhcyk7dS5zdHlsZSgid2lkdGgiLHQud2lkdGgpLHUuc3R5bGUoImhlaWdodCIsdC5oZWlnaHQpLHUuYXR0cigid2lkdGgiLDMqdC53aWR0aCksdS5hdHRyKCJoZWlnaHQiLDMqdC5oZWlnaHQpLHRoaXMudHJhbnNsYXRlIT1udWxsJiZ0aGlzLnpvb20hPW51bGwmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy56b29tKCkpO2xldCBoPW5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcodGhpcy5zdmcpO3MucmVtb3ZlKCksci5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKSxsLmF0dHIoInRyYW5zZm9ybSIsYyk7bGV0IGY9bmV3IEltYWdlO2Yub25sb2FkPSgpPT57bGV0IHA9dGhpcy5jYW52YXNCdWZmZXIuZ2V0Q29udGV4dCgiMmQiKTtwPT1udWxsfHxwLmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNCdWZmZXIud2lkdGgsdGhpcy5jYW52YXNCdWZmZXIuaGVpZ2h0KSxwPT1udWxsfHxwLmRyYXdJbWFnZShmLDAsMCx0aGlzLm1pbmltYXBTaXplLndpZHRoLHRoaXMubWluaW1hcFNpemUuaGVpZ2h0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntIdCh0aGlzLmNhbnZhc0J1ZmZlcikuc3R5bGUoImRpc3BsYXkiLG51bGwpLEh0KHRoaXMuY2FudmFzKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxbdGhpcy5jYW52YXMsdGhpcy5jYW52YXNCdWZmZXJdPVt0aGlzLmNhbnZhc0J1ZmZlcix0aGlzLmNhbnZhc119KTtsZXQgZD10aGlzLmRvd25sb2FkQ2FudmFzLmdldENvbnRleHQoIjJkIik7ZD09bnVsbHx8ZC5jbGVhclJlY3QoMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpLGQ9PW51bGx8fGQuZHJhd0ltYWdlKGYsMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpfSxmLm9uZXJyb3I9KCk9PntsZXQgcD1uZXcgQmxvYihbaF0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTtmLnNyYz1VUkwuY3JlYXRlT2JqZWN0VVJMKHApfSxmLnNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoaCl9em9vbSh0KXtpZih0aGlzLnNjYWxlTWluaW1hcD09bnVsbClyZXR1cm47dCYmKHRoaXMudHJhbnNsYXRlPVt0LngsdC55XSx0aGlzLnNjYWxlTWFpbj10LmspO2xldCByPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49SHQodGhpcy52aWV3cG9pbnQpO3RoaXMudmlld3BvaW50Q29vcmQueD0tdGhpcy50cmFuc2xhdGVbMF0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW4sdGhpcy52aWV3cG9pbnRDb29yZC55PS10aGlzLnRyYW5zbGF0ZVsxXSp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtsZXQgaT1yLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluLG89ci5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bi5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsbyk7bGV0IGE9dGhpcy5taW5pbWFwU2l6ZS53aWR0aCxzPXRoaXMubWluaW1hcFNpemUuaGVpZ2h0LGw9dGhpcy52aWV3cG9pbnRDb29yZC54LGM9dGhpcy52aWV3cG9pbnRDb29yZC55LHU9TWF0aC5taW4oTWF0aC5tYXgoMCxsK2kpLGEpLU1hdGgubWluKE1hdGgubWF4KDAsbCksYSksaD1NYXRoLm1pbihNYXRoLm1heCgwLGMrbykscyktTWF0aC5taW4oTWF0aC5tYXgoMCxjKSxzKTt1KmgvKGEqcyk8cnVyP3RoaXMubWluaW1hcC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTp0aGlzLm1pbmltYXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fTt2YXIgaWN0PWNsYXNzIGV4dGVuZHMgbXR7aW5pdCh0LHIsbixpLG8pe3JldHVybiBuZXcga0godCxyLG4sdGhpcyxpLG8pfX07aWN0LnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgbGluZWFyOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCguaGlkZGVuKSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgY2FudmFzIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgICB9CgogICAgICByZWN0IHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICMxMTExMTE7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgICAgZmlsbC1vcGFjaXR5OiAwOwogICAgICAgIGZpbHRlcjogdXJsKCNtaW5pbWFwRHJvcFNoYWRvdyk7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzdmc+CiAgICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIKICAgICAgICAgIGlkPSJtaW5pbWFwRHJvcFNoYWRvdyIKICAgICAgICAgIHg9Ii0yMCUiCiAgICAgICAgICB5PSItMjAlIgogICAgICAgICAgd2lkdGg9IjE1MCUiCiAgICAgICAgICBoZWlnaHQ9IjE1MCUiCiAgICAgICAgPgogICAgICAgICAgPGZlT2Zmc2V0IHJlc3VsdD0ib2ZmT3V0IiBpbj0iU291cmNlR3JhcGhpYyIgZHg9IjEiIGR5PSIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgICAgcmVzdWx0PSJtYXRyaXhPdXQiCiAgICAgICAgICAgIGluPSJvZmZPdXQiCiAgICAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgICAgdmFsdWVzPSIwLjEgMCAwIDAgMCAwIDAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjUgMCIKICAgICAgICAgID48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgICAgcmVzdWx0PSJibHVyT3V0IgogICAgICAgICAgICBpbj0ibWF0cml4T3V0IgogICAgICAgICAgICBzdGREZXZpYXRpb249IjIiCiAgICAgICAgICA+PC9mZUdhdXNzaWFuQmx1cj4KICAgICAgICAgIDxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImJsdXJPdXQiIG1vZGU9Im5vcm1hbCI+PC9mZUJsZW5kPgogICAgICAgIDwvZmlsdGVyPgogICAgICA8L2RlZnM+CiAgICAgIDxyZWN0PjwvcmVjdD4KICAgIDwvc3ZnPgogICAgPGNhbnZhcyBjbGFzcz0iZmlyc3QiPjwvY2FudmFzPgogICAgPCEtLSBBZGRpdGlvbmFsIGNhbnZhcyB0byB1c2UgYXMgYnVmZmVyIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbiB1cGRhdGVzIC0tPgogICAgPGNhbnZhcyBjbGFzcz0ic2Vjb25kIj48L2NhbnZhcz4KICAgIDxjYW52YXMgY2xhc3M9ImRvd25sb2FkIj48L2NhbnZhcz4KICBgO2ljdD1FKFt5dCgidGYtZ3JhcGgtbWluaW1hcCIpXSxpY3QpO3ZhciBXbGU9UWAKICA8c3R5bGU+CiAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgfQoKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNzdmcgewogICAgICBmbGV4OiAxOwogICAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNoaWRkZW4gewogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHRvcDogMHB4OwogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgdGV4dCB7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBOb2RlIGFuZCBhbm5vdGF0aW9uLW5vZGUgZm9yIE1ldGFub2RlIC0tLSAqLwoKICAgIC5tZXRhID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubWV0YSA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICB9CiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICB9CiAgICAubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm1ldGEuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDQ7CiAgICB9CgogICAgLmZhZGVkLAogICAgLmZhZGVkIHJlY3QsCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCBwYXRoLAogICAgLmZhZGVkIHVzZSwKICAgICNyZWN0SGF0Y2ggbGluZSwKICAgICNlbGxpcHNlSGF0Y2ggbGluZSB7CiAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgcGF0aCB7CiAgICAgIHN0cm9rZS13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHJlY3QgewogICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCB1c2UgewogICAgICBmaWxsOiB1cmwoI2VsbGlwc2VIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgdGV4dCB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgLyogUnVsZXMgdXNlZCBmb3IgaW5wdXQtdHJhY2luZy4gKi8KICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gcmVjdCwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gZWxsaXBzZSwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gdXNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogI2ZmOTgwMCAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qICAtIEZhZGVkIG5vbi1pbnB1dCBzdHlsaW5nICovCiAgICAubm9uLWlucHV0ID4gKiA+IHJlY3QsCi5ub24taW5wdXQgPiAqID4gZWxsaXBzZSwKLm5vbi1pbnB1dCA+ICogPiB1c2UsCi8qIEZvciBDb25zdCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+ICogPiAuY29uc3RhbnQ6bm90KFtjbGFzcyo9ImlucHV0LWhpZ2hsaWdodCJdKSA+CiAgLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UsCi8qIEZvciBzdHlsaW5nIG9mIGFubm90YXRpb24gbm9kZXMgb2Ygbm9uLWlucHV0IG5vZGVzLiAqLwoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgc3Ryb2tlLXdpZHRoOiBpbmhlcml0OwogICAgICBzdHJva2UtZGFzaGFycmF5OiBpbmhlcml0OwogICAgfQoKICAgIC5ub24taW5wdXQgcGF0aCB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAubm9uLWlucHV0ID4gLm5vZGVzaGFwZSA+IHJlY3QsCi5ub24taW5wdXQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCwKLyogRm9yIHN0eWxpbmcgb2YgYW5ub3RhdGlvbiBub2RlcyBvZiBub24taW5wdXQgbm9kZXMuICovCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGZpbGw6IHVybCgjcmVjdEhhdGNoKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5ub24taW5wdXQgZWxsaXBzZSwKICAgIC5ub24taW5wdXQgdXNlIHsKICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLm5vbi1pbnB1dCA+IHRleHQgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICB9CgogICAgLm5vbi1pbnB1dCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC8qIElucHV0IGVkZ2VzLiAqLwogICAgLmlucHV0LWVkZ2UtaGlnaGxpZ2h0ID4gdGV4dCB7CiAgICAgIGZpbGw6IGJsYWNrICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gLmluLWFubm90YXRpb25zID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLAogICAgLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZAogICAgICA+IC5pbi1hbm5vdGF0aW9ucwogICAgICA+IC5hbm5vdGF0aW9uCiAgICAgID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIHN0cm9rZTogIzk5OSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIE5vbi1pbnB1dCBlZGdlcy4gKi8KICAgIC5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQsCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiBwYXRoLAovKiBBbm5vdGF0aW9uIHN0eWxlcyAobGFiZWwgYW5kIGVkZ2VzIHJlc3BlY3RpdmVseSkuICovCi5ub24taW5wdXQgPiBnID4KLmFubm90YXRpb246bm90KC5pbnB1dC1oaWdobGlnaHQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0LXNlbGVjdGVkKSA+Ci5hbm5vdGF0aW9uLWxhYmVsCi8qLmFubm90YXRpb24tZWRnZSovIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIC8qIC0tLSBPcCBOb2RlIC0tLSAqLwoKICAgIC5vcCA+IC5ub2Rlc2hhcGUgPiAubm9kZWNvbG9ydGFyZ2V0LAogICAgLm9wID4gLmFubm90YXRpb24tbm9kZSA+IC5ub2RlY29sb3J0YXJnZXQgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICNmZmY7CiAgICAgIHN0cm9rZTogI2NjYzsKICAgIH0KCiAgICAub3Auc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAub3AuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC8qIC0tLSBTZXJpZXMgTm9kZSAtLS0gKi8KCiAgICAvKiBCeSBkZWZhdWx0LCBkb24ndCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4uICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAvKiBPbmNlIGV4cGFuZGVkLCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4gYW5kIGhpZGUgdGhlIDx1c2U+LiAqLwogICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgZmlsbC1vcGFjaXR5OiAwLjE1OwogICAgICBzdHJva2U6IGhzbCgwLCAwJSwgNzAlKTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICB9CiAgICAuc2VyaWVzLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHVzZSB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAvKioKICogVE9ETzogU2ltcGxpZnkgdGhpcyBieSBhcHBseWluZyBhIHN0YWJsZSBjbGFzcyBuYW1lIHRvIGFsbCA8Zz4KICogZWxlbWVudHMgdGhhdCBjdXJyZW50bHkgaGF2ZSBlaXRoZXIgdGhlIG5vZGVzaGFwZSBvciBhbm5vdGF0aW9uLW5vZGUgY2xhc3Nlcy4KICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgIC5zZXJpZXMgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgc3Ryb2tlOiAjY2NjOwogICAgfQogICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAuc2VyaWVzLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gdXNlLAogICAgLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLmFubm90YXRpb24uc2VyaWVzLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLyogLS0tIEJyaWRnZSBOb2RlIC0tLSAqLwogICAgLmJyaWRnZSA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiAjZjBmOwogICAgICBvcGFjaXR5OiAwLjI7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIFN0cnVjdHVyYWwgRWxlbWVudHMgLS0tICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUuc3RydWN0dXJhbCB7CiAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgb3BhY2l0eTogMC4yOwogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIFJlZmVyZW5jZSBFZGdlICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUucmVmZXJlbmNlZWRnZSB7CiAgICAgIHN0cm9rZTogI2ZmYjc0ZDsKICAgICAgb3BhY2l0eTogMTsKICAgIH0KCiAgICAvKiAtLS0gU2VyaWVzIE5vZGVzIC0tLSAqLwoKICAgIC8qIEhpZGUgdGhlIHJlY3QgZm9yIGEgc2VyaWVzJyBhbm5vdGF0aW9uLiAqLwogICAgLnNlcmllcyA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKiAtLS0gTm9kZSBsYWJlbCAtLS0gKi8KCiAgICAubm9kZSB7CiAgICAgIC8qIFByb3ZpZGUgYSBoaW50IHRvIGJyb3dzZXJzIHRvIGF2b2lkIHVzaW5nIHRoZWlyIHN0YXRpYyByYXN0ZXJpemF0aW9uCiAgICAgIGF0IGluaXRpYWwgc2NhbGUsIHdoaWNoIGxvb2tzIHZlcnkgcGl4ZWxhdGVkIG9uIENocm9taXVtIHdoZW4gem9vbWVkIGluLgogICAgICBOb3RlIHRoYXQgd2UgaW50ZW50aW9uYWxseSBkbyAqbm90KiB1c2UgJ3dpbGwtY2hhbmdlOiB0cmFuc2Zvcm0nIGFuZAogICAgICAndHJhbnNsYXRlWigwKSBoZXJlLCB3aGljaCBpbnRyb2R1Y2UgYmx1cnJpbmVzcyBvbiBGaXJlZm94LgogICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQ3NDQgKi8KICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDFweCk7CiAgICB9CgogICAgLm5vZGUgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogIzQ0NDsKICAgIH0KCiAgICAubWV0YS5leHBhbmRlZCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA5cHg7CiAgICB9CgogICAgLnNlcmllcyA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA4cHg7CiAgICB9CgogICAgLm9wID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBmb250LXNpemU6IDZweDsKICAgIH0KCiAgICAuYnJpZGdlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5ub2RlLm1ldGEuZXhwYW5kZWQgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogbm9ybWFsOwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuaGlnaGxpZ2h0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNTBhM2Y3OwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNDI4NWY0OwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uIC0tLSAqLwoKICAgIC8qIG9ubHkgYXBwbGllZCBmb3IgYW5ub3RhdGlvbnMgdGhhdCBhcmUgbm90IHN1bW1hcnkgb3IgY29uc3RhbnQuCiguc3VtbWFyeSwgLmNvbnN0YW50IGdldHMgb3ZlcnJpZGRlbiBiZWxvdykgKi8KICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+ICogewogICAgICBzdHJva2Utd2lkdGg6IDAuNTsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+ICosCiAgICAuYW5ub3RhdGlvbi5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2FhYTsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBtYXJrZXItZW5kOiB1cmwoI2Fubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tY29udHJvbC1lZGdlIHsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYWFhOwogICAgfQoKICAgICNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNhYWE7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogNXB4OwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWxhYmVsLmFubm90YXRpb24tZWxsaXBzaXMgewogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLyogSGlkZSBhbm5vdGF0aW9ucyBvbiBleHBhbmRlZCBtZXRhIG5vZGVzIHNpbmNlIHRoZXkncmUgcmVkdW5kYW50LiAqLwogICAgLmV4cGFuZGVkID4gLmluLWFubm90YXRpb25zLAogICAgLmV4cGFuZGVkID4gLm91dC1hbm5vdGF0aW9ucyB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IENvbnN0YW50IC0tLSAqLwoKICAgIC5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiB3aGl0ZTsKICAgICAgc3Ryb2tlOiAjODQ4NDg0OwogICAgfQoKICAgIC5jb25zdGFudC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogcmVkOwogICAgfQoKICAgIC5jb25zdGFudC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IFN1bW1hcnkgLS0tICovCgogICAgLnN1bW1hcnkgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogI2RiNDQzNzsKICAgICAgc3Ryb2tlOiAjZGI0NDM3OwogICAgfQoKICAgIC5zdW1tYXJ5LnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBmaWxsOiAjYTUyNzE0OwogICAgICBzdHJva2U6ICNhNTI3MTQ7CiAgICB9CgogICAgLnN1bW1hcnkuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgfQoKICAgIC8qIC0tLSBFZGdlIC0tLSAqLwoKICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2JiYjsKICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICBzdHJva2Utd2lkdGg6IDAuNzU7CiAgICB9CgogICAgLmVkZ2UgLnNlbGVjdGFibGVlZGdlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5zZWxlY3RlZGVkZ2UgPiBwYXRoLmVkZ2VsaW5lIHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBzdHJva2U6ICNmMDA7CiAgICB9CgogICAgLmVkZ2Uuc2VsZWN0ZWRlZGdlIHRleHQgewogICAgICBmaWxsOiAjMDAwOwogICAgfQoKICAgIC8qIExhYmVscyBzaG93aW5nIHRlbnNvciBzaGFwZXMgb24gZWRnZXMgKi8KICAgIC5lZGdlID4gdGV4dCB7CiAgICAgIGZvbnQtc2l6ZTogMy41cHg7CiAgICAgIGZpbGw6ICM2NjY7CiAgICB9CgogICAgLmRhdGFmbG93LWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNiYmI7CiAgICB9CgogICAgLnJlZmVyZW5jZS1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZmZiNzRkOwogICAgfQoKICAgIC5zZWxlY3RlZC1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZjAwOwogICAgfQoKICAgIC5lZGdlIC5jb250cm9sLWRlcCB7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICB9CgogICAgLyogLS0tIEdyb3VwIG5vZGUgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiAtLS0gKi8KCiAgICAvKiBIaWRlcyBleHBhbmQvY29sbGFwc2UgYnV0dG9ucyB3aGVuIGEgbm9kZSBpc24ndCBleHBhbmRlZCBvciBoaWdobGlnaHRlZC4gVXNpbmcKICAgaW5jcmVkaWJseSBzbWFsbCBvcGFjaXR5IHNvIHRoYXQgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgPGc+IHBhcmVudCBzdGlsbCB0YWtlcwogICB0aGlzIGNvbnRhaW5lciBpbnRvIGFjY291bnQgZXZlbiB3aGVuIGl0IGlzbid0IHZpc2libGUgKi8KICAgIC5ub2RlOm5vdCguaGlnaGxpZ2h0ZWQpOm5vdCguZXhwYW5kZWQpID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICBvcGFjaXR5OiAwLjAxOwogICAgfQogICAgLm5vZGUuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KICAgIC5idXR0b25jaXJjbGUgewogICAgICBmaWxsOiAjZTc4MTFkOwogICAgfQogICAgLmJ1dHRvbmNpcmNsZTpob3ZlciB7CiAgICAgIGZpbGw6ICNiOTY3MTc7CiAgICB9CiAgICAuZXhwYW5kYnV0dG9uLAogICAgLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgIH0KICAgIC8qIERvIG5vdCBsZXQgdGhlIHBhdGggZWxlbWVudHMgaW4gdGhlIGJ1dHRvbiB0YWtlIHBvaW50ZXIgZm9jdXMgKi8KICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuZXhwYW5kYnV0dG9uLAogICAgLm5vZGUgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQogICAgLyogT25seSBzaG93IHRoZSBleHBhbmQgYnV0dG9uIHdoZW4gYSBub2RlIGlzIGNvbGxhcHNlZCBhbmQgb25seSBzaG93IHRoZQogICBjb2xsYXBzZSBidXR0b24gd2hlbiBhIG5vZGUgaXMgZXhwYW5kZWQuICovCiAgICAubm9kZS5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmV4cGFuZGJ1dHRvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICAubm9kZTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwtc3RhdHMgewogICAgICBmb250LXNpemU6IDRweDsKICAgICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwgcmVjdCB7CiAgICAgIGZpbHRlcjogdXJsKCNoZWFsdGgtcGlsbC1zaGFkb3cpOwogICAgICByeDogMzsKICAgICAgcnk6IDM7CiAgICB9CgogICAgLnRpdGxlQ29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB0b3A6IDIwcHg7CiAgICB9CgogICAgLnRpdGxlLAogICAgLmF1eFRpdGxlLAogICAgLmZ1bmN0aW9uTGlicmFyeVRpdGxlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQoKICAgICNtaW5pbWFwIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICByaWdodDogMjBweDsKICAgICAgYm90dG9tOiAyMHB4OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMmUyZTI7CiAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgewogICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgIG1hcmdpbjogMDsKICAgICAgcGFkZGluZzogMDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgbGkgewogICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIGxpOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0idGl0bGVDb250YWluZXIiPgogICAgPGRpdiBpZD0idGl0bGUiIGNsYXNzPSJ0aXRsZSI+TWFpbiBHcmFwaDwvZGl2PgogICAgPGRpdiBpZD0iYXV4VGl0bGUiIGNsYXNzPSJhdXhUaXRsZSI+QXV4aWxpYXJ5IE5vZGVzPC9kaXY+CiAgICA8ZGl2IGlkPSJmdW5jdGlvbkxpYnJhcnlUaXRsZSIgY2xhc3M9ImZ1bmN0aW9uTGlicmFyeVRpdGxlIj5GdW5jdGlvbnM8L2Rpdj4KICA8L2Rpdj4KICA8c3ZnIGlkPSJzdmciPgogICAgPGRlZnM+CiAgICAgIDwhLS0gQXJyb3cgaGVhZHMgZm9yIHJlZmVyZW5jZSBlZGdlIHBhdGhzIG9mIGRpZmZlcmVudCBwcmVkZWZpbmVkIHNpemVzIHBlciBjb2xvci4gLS0+CiAgICAgIDxwYXRoCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1zbWFsbCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLW1lZGl1bSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjEzIgogICAgICAgIG1hcmtlckhlaWdodD0iMTMiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtbGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxNiIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjE2IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXhsYXJnZSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjIwIgogICAgICAgIG1hcmtlckhlaWdodD0iMjAiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkcyBmb3IgZGF0YWZsb3cgZWRnZSBwYXRocyBvZiBkaWZmZXJlbnQgcHJlZGVmaW5lZCBzaXplcyBwZXIgY29sb3IuIC0tPgogICAgICA8cGF0aAogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtc21hbGwiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1tZWRpdW0iCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxMyIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjEzIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTYiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxNiIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC14bGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIyMCIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjIwIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkIGZvciBhbm5vdGF0aW9uIGVkZ2UgcGF0aHMuIC0tPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9InJlZi1hbm5vdGF0aW9uLWFycm93aGVhZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iMCIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSA1LDAgTCAwLDIuNSBMIDUsNSBMIDUsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjAiCiAgICAgICAgcmVmWT0iMi41IgogICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiPjwvcGF0aD4KICAgICAgPC9tYXJrZXI+CiAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgZWxsaXBzZS4gLS0+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgcng9IjcuNSIKICAgICAgICByeT0iMyIKICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgPjwvZWxsaXBzZT4KICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgPGVsbGlwc2UKICAgICAgICBpZD0ib3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIgogICAgICAgIHJ4PSI1IgogICAgICAgIHJ5PSIyIgogICAgICAgIHN0cm9rZT0iaW5oZXJpdCIKICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICA+PC9lbGxpcHNlPgogICAgICA8IS0tIFZlcnRpY2FsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iOSI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgIDwvZz4KICAgICAgPCEtLSBIb3Jpem9udGFsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTIiIHk9IjQiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjQiPjwvdXNlPgogICAgICA8L2c+CiAgICAgIDwhLS0gSG9yaXpvbnRhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIGZvciBhbm5vdGF0aW9uLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1hbm5vdGF0aW9uLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjkiIHk9IjIiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNyIgeT0iMiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiB4PSI1IiB5PSIyIj48L3VzZT4KICAgICAgPC9nPgogICAgICA8c3ZnCiAgICAgICAgaWQ9InN1bW1hcnktaWNvbiIKICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIHdpZHRoPSIxMiIKICAgICAgPgogICAgICAgIDxwYXRoCiAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgID48L3BhdGg+CiAgICAgIDwvc3ZnPgoKICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgPHBhdHRlcm4KICAgICAgICBpZD0icmVjdEhhdGNoIgogICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgIHdpZHRoPSI1IgogICAgICAgIGhlaWdodD0iNSIKICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgPC9wYXR0ZXJuPgogICAgICA8cGF0dGVybgogICAgICAgIGlkPSJlbGxpcHNlSGF0Y2giCiAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgd2lkdGg9IjIiCiAgICAgICAgaGVpZ2h0PSIyIgogICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iMiIgc3R5bGU9InN0cm9rZS13aWR0aDogMSI+PC9saW5lPgogICAgICA8L3BhdHRlcm4+CgogICAgICA8IS0tIEEgc2hhZG93IGZvciBoZWFsdGggcGlsbHMuIC0tPgogICAgICA8ZmlsdGVyCiAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXNoYWRvdyIKICAgICAgICB4PSItNDAlIgogICAgICAgIHk9Ii00MCUiCiAgICAgICAgd2lkdGg9IjE4MCUiCiAgICAgICAgaGVpZ2h0PSIxODAlIgogICAgICA+CiAgICAgICAgPGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBoYSIgc3RkRGV2aWF0aW9uPSIwLjgiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgPGZlT2Zmc2V0IGR4PSIwIiBkeT0iMCIgcmVzdWx0PSJvZmZzZXRibHVyIj48L2ZlT2Zmc2V0PgogICAgICAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSIjMDAwMDAwIj48L2ZlRmxvb2Q+CiAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0ib2Zmc2V0Ymx1ciIgb3BlcmF0b3I9ImluIj48L2ZlQ29tcG9zaXRlPgogICAgICAgIDxmZU1lcmdlPgogICAgICAgICAgPGZlTWVyZ2VOb2RlPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgICA8ZmVNZXJnZU5vZGUgaW49IlNvdXJjZUdyYXBoaWMiPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgPC9mZU1lcmdlPgogICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KICAgIDwhLS0gTWFrZSBhIGxhcmdlIHJlY3RhbmdsZSB0aGF0IGZpbGxzIHRoZSBzdmcgc3BhY2Ugc28gdGhhdAogIHpvb20gZXZlbnRzIGdldCBjYXB0dXJlZCBvbiBzYWZhcmkgLS0+CiAgICA8cmVjdCBmaWxsPSJ3aGl0ZSIgd2lkdGg9IjEwMDAwIiBoZWlnaHQ9IjEwMDAwIj48L3JlY3Q+CiAgICA8ZyBpZD0icm9vdCI+PC9nPgogIDwvc3ZnPgogIDx0Zi1ncmFwaC1taW5pbWFwIGlkPSJtaW5pbWFwIj48L3RmLWdyYXBoLW1pbmltYXA+CiAgPGRpdiBpZD0iY29udGV4dE1lbnUiIGNsYXNzPSJjb250ZXh0LW1lbnUiPjwvZGl2PgpgO3ZhciBMcj1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3pvb21lZD0hMSx0aGlzLl96b29tU3RhcnRDb29yZHM9bnVsbCx0aGlzLl96b29tVHJhbnNmb3JtPW51bGwsdGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s9MjAsdGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemU9OSx0aGlzLm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZT02LHRoaXMubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udD0xMSx0aGlzLm1heE1ldGFub2RlTGFiZWxMZW5ndGg9MTh9Z2V0Tm9kZSh0KXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KX1pc05vZGVFeHBhbmRlZCh0KXtyZXR1cm4gdC5leHBhbmRlZH1zZXROb2RlRXhwYW5kZWQodCl7dGhpcy5fYnVpbGQodGhpcy5yZW5kZXJIaWVyYXJjaHkpLHRoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1wYW5Ub05vZGUodCl7U2xlKHQsdGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tKSYmKHRoaXMuX3pvb21lZD0hMCl9Z2V0R3JhcGhTdmdSb290KCl7cmV0dXJuIHRoaXMuJC5zdmd9Z2V0Q29udGV4dE1lbnUoKXtyZXR1cm4gdGhpcy4kLmNvbnRleHRNZW51fV9yZXNldFN0YXRlKCl7dGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5fdXBkYXRlTGFiZWxzKCExKSxIdCh0aGlzLiQuc3ZnKS5zZWxlY3QoIiNyb290Iikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCksSUgodGhpcy4kLnN2Zyl9X2J1aWxkKHQpe3RoaXMudGVtcGxhdGVJbmRleD10LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksUmQoInRmLWdyYXBoLXNjZW5lIChsYXlvdXQpOiIsZnVuY3Rpb24oKXtTSCh0LnJvb3QpfS5iaW5kKHRoaXMpLGpyLlJFTkRFUl9TQ0VORV9MQVlPVVQpLFJkKCJ0Zi1ncmFwaC1zY2VuZSAoYnVpbGQgc2NlbmUpOiIsZnVuY3Rpb24oKXtyY3QoSHQodGhpcy4kLnJvb3QpLHQucm9vdCx0aGlzKSxFbGUodGhpcy4kLnN2Zyx0aGlzKSx0aGlzLl91cGRhdGVJbnB1dFRyYWNlKCl9LmJpbmQodGhpcyksanIuUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSGVhbHRoUGlsbHModGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCksdGhpcy5taW5pbWFwLnVwZGF0ZSgpfS5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX3pvb209dFIoKS5vbigiZW5kIixmdW5jdGlvbigpe2lmKHRoaXMuX3pvb21TdGFydENvb3Jkcyl7dmFyIHQ9TWF0aC5zcXJ0KE1hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy54LXRoaXMuX3pvb21UcmFuc2Zvcm0ueCwyKStNYXRoLnBvdyh0aGlzLl96b29tU3RhcnRDb29yZHMueS10aGlzLl96b29tVHJhbnNmb3JtLnksMikpO3Q8dGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s/dGhpcy5fZmlyZUVuYWJsZUNsaWNrKCk6c2V0VGltZW91dCh0aGlzLl9maXJlRW5hYmxlQ2xpY2suYmluZCh0aGlzKSw1MCl9dGhpcy5fem9vbVN0YXJ0Q29vcmRzPW51bGx9LmJpbmQodGhpcykpLm9uKCJ6b29tIixmdW5jdGlvbigpe3RoaXMuX3pvb21UcmFuc2Zvcm09cXQudHJhbnNmb3JtLHRoaXMuX3pvb21TdGFydENvb3Jkc3x8KHRoaXMuX3pvb21TdGFydENvb3Jkcz10aGlzLl96b29tVHJhbnNmb3JtLHRoaXMuZmlyZSgiZGlzYWJsZS1jbGljayIpKSx0aGlzLl96b29tZWQ9ITAsSHQodGhpcy4kLnJvb3QpLmF0dHIoInRyYW5zZm9ybSIscXQudHJhbnNmb3JtKSx0aGlzLm1pbmltYXAuem9vbShxdC50cmFuc2Zvcm0pfS5iaW5kKHRoaXMpKSxIdCh0aGlzLiQuc3ZnKS5jYWxsKHRoaXMuX3pvb20pLm9uKCJkYmxjbGljay56b29tIixudWxsKSxIdCh3aW5kb3cpLm9uKCJyZXNpemUiLGZ1bmN0aW9uKCl7dGhpcy5taW5pbWFwLnpvb20oKX0uYmluZCh0aGlzKSksdGhpcy5taW5pbWFwPXRoaXMuJC5taW5pbWFwLmluaXQodGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tLFRyLm1pbmltYXAuc2l6ZSxUci5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9X3JlbmRlckhpZXJhcmNoeUNoYW5nZWQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeTt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMSx0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fYnVpbGQodCl9X2FuaW1hdGVBbmRGaXQoKXt2YXIgdD10aGlzLl9pc0F0dGFjaGVkO3RoaXMuX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlfHwhdHx8c2V0VGltZW91dCh0aGlzLmZpdC5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9X3VwZGF0ZUxhYmVscyh0KXt2YXIgcj10aGlzLiQkKCIudGl0bGUiKSxuPXIuc3R5bGUsaT10aGlzLiQkKCIuYXV4VGl0bGUiKSxvPWkuc3R5bGUsYT10aGlzLiQkKCIuZnVuY3Rpb25MaWJyYXJ5VGl0bGUiKS5zdHlsZTtsZXQgcz1IdCh0aGlzLiQuc3ZnKTt2YXIgbD1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5DT1JFKS5ub2RlKCk7aWYodCYmbCYmdGhpcy5wcm9ncmVzcyYmdGhpcy5wcm9ncmVzcy52YWx1ZT09PTEwMCl7dmFyIGM9cy5zZWxlY3QoIi4iK0hpLlNjZW5lLkdST1VQKyI+LiIrSGkuU2NlbmUuSU5FWFRSQUNUKS5ub2RlKCl8fHMuc2VsZWN0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLk9VVEVYVFJBQ1QpLm5vZGUoKSx1PWwuZ2V0Q1RNKCkuZSxoPWM/Yy5nZXRDVE0oKS5lOm51bGw7bi5kaXNwbGF5PSJpbmxpbmUiLG4ubGVmdD11KyJweCIsaCE9PW51bGwmJmghPT11PyhvLmRpc3BsYXk9ImlubGluZSIsaD1NYXRoLm1heCh1K3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsaCksby5sZWZ0PWgrInB4Iik6by5kaXNwbGF5PSJub25lIjtsZXQgZj1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5ub2RlKCkscD1mP2YuZ2V0Q1RNKCkuZTpudWxsO3AhPT1udWxsJiZwIT09aD8oYS5kaXNwbGF5PSJpbmxpbmUiLHA9TWF0aC5tYXgoaCtpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHApLGEubGVmdD1wKyJweCIpOmEuZGlzcGxheT0ibm9uZSJ9ZWxzZSBuLmRpc3BsYXk9Im5vbmUiLG8uZGlzcGxheT0ibm9uZSIsYS5kaXNwbGF5PSJub25lIn1ub2RlQ29sb3JzQ2hhbmdlZCgpe3RoaXMucmVuZGVySGllcmFyY2h5IT1udWxsJiYodGhpcy50ZW1wbGF0ZUluZGV4PXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksZFAuZWFjaCh0aGlzLl9ub2RlR3JvdXBJbmRleCwodCxyKT0+e3RoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKX0pLHRoaXMubWluaW1hcC51cGRhdGUoKSl9Zml0KCl7dGhpcy5faGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2U9ITAsd2xlKHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSxmdW5jdGlvbigpe3RoaXMuX3pvb21lZD0hMX0uYmluZCh0aGlzKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIHRoaXMubWluaW1hcC5nZXRJbWFnZUJsb2IoKX1pc05vZGVTZWxlY3RlZCh0KXtyZXR1cm4gdD09PXRoaXMuc2VsZWN0ZWROb2RlfWlzTm9kZUhpZ2hsaWdodGVkKHQpe3JldHVybiB0PT09dGhpcy5oaWdobGlnaHRlZE5vZGV9YWRkQW5ub3RhdGlvbkdyb3VwKHQscixuKXt2YXIgaT10Lm5vZGUubmFtZTt0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXT10aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXXx8e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbaV1bci5ub2RlLm5hbWVdPW59Z2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4KHQpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFt0XX1yZW1vdmVBbm5vdGF0aW9uR3JvdXAodCxyKXtkZWxldGUgdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbdC5ub2RlLm5hbWVdW3Iubm9kZS5uYW1lXX1hZGROb2RlR3JvdXAodCxyKXt0aGlzLl9ub2RlR3JvdXBJbmRleFt0XT1yfWdldE5vZGVHcm91cCh0KXtyZXR1cm4gdGhpcy5fbm9kZUdyb3VwSW5kZXhbdF19cmVtb3ZlTm9kZUdyb3VwKHQpe2RlbGV0ZSB0aGlzLl9ub2RlR3JvdXBJbmRleFt0XX1hZGRFZGdlR3JvdXAodCxyKXt0aGlzLl9lZGdlR3JvdXBJbmRleFt0XT1yfWdldEVkZ2VHcm91cCh0KXtyZXR1cm4gdGhpcy5fZWRnZUdyb3VwSW5kZXhbdF19X3VwZGF0ZUhlYWx0aFBpbGxzKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4O0FsZSh0aGlzLiQuc3ZnLHQscil9X3VwZGF0ZU5vZGVTdGF0ZSh0KXt2YXIgcj10aGlzLmdldE5vZGUodCksbj10aGlzLmdldE5vZGVHcm91cCh0KTtpZihuJiZzMyhuLHIsdGhpcyksci5ub2RlLnR5cGU9PT1qdC5NRVRBJiZyLm5vZGUuYXNzb2NpYXRlZEZ1bmN0aW9uJiYhci5pc0xpYnJhcnlGdW5jdGlvbil7dmFyIGk9U2Erci5ub2RlLmFzc29jaWF0ZWRGdW5jdGlvbixvPUh0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkrJyBnW2RhdGEtbmFtZT0iJytpKyciXScpO3MzKG8scix0aGlzKX12YXIgYT10aGlzLmdldEFubm90YXRpb25Hcm91cHNJbmRleCh0KTtkUC5lYWNoKGEsKHMsbCk9PntzMyhzLHIsdGhpcyxIaS5Bbm5vdGF0aW9uLk5PREUpfSl9X3NlbGVjdGVkTm9kZUNoYW5nZWQodCxyKXtpZih0IT09ciYmKHImJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKSwhIXQpKXt0aGlzLm1pbmltYXAudXBkYXRlKCk7Zm9yKHZhciBuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5ub2RlKHQpLGk9W107bi5wYXJlbnROb2RlIT1udWxsJiZuLnBhcmVudE5vZGUubmFtZSE9cWM7KW49bi5wYXJlbnROb2RlLGkucHVzaChuLm5hbWUpO3ZhciBvO2RQLmZvckVhY2hSaWdodChpLGE9Pnt0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShhKTt2YXIgcz10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKGEpO3Mubm9kZS5pc0dyb3VwTm9kZSYmIXMuZXhwYW5kZWQmJihzLmV4cGFuZGVkPSEwLG98fChvPXMpKX0pLG8mJih0aGlzLnNldE5vZGVFeHBhbmRlZChvKSx0aGlzLl96b29tZWQ9ITApLHQmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZSh0KSxzZXRUaW1lb3V0KCgpPT57dGhpcy5wYW5Ub05vZGUodCl9LFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9fV9oaWdobGlnaHRlZE5vZGVDaGFuZ2VkKHQscil7dCE9PXImJih0JiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUodCksciYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKHIpKX1fb25ab29tQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1fZmlyZUVuYWJsZUNsaWNrKCl7dGhpcy5maXJlKCJlbmFibGUtY2xpY2siKX1fdXBkYXRlSW5wdXRUcmFjZSgpe1ZsZSh0aGlzLmdldEdyYXBoU3ZnUm9vdCgpLHRoaXMucmVuZGVySGllcmFyY2h5LHRoaXMuc2VsZWN0ZWROb2RlLHRoaXMudHJhY2VJbnB1dHMpfX07THIudGVtcGxhdGU9V2xlO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sTHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxMci5wcm90b3R5cGUsIl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfc2VsZWN0ZWROb2RlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfb25ab29tQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX3pvb21lZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl96b29tU3RhcnRDb29yZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbVRyYW5zZm9ybSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIl9tYXhab29tRGlzdGFuY2VGb3JDbGljayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLExyLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9ub2RlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9hbm5vdGF0aW9uR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9lZGdlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhMYXJnZUZvbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTHIucHJvdG90eXBlLCJtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLExyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLExyLnByb3RvdHlwZSwibm9kZUNvbnRleHRNZW51SXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExyLnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKTtFKFtCdCgicmVuZGVySGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIixudWxsKTtFKFtCdCgiX2lzQXR0YWNoZWQiLCJyZW5kZXJIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX2FuaW1hdGVBbmRGaXQiLG51bGwpO0UoW0J0KCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIm5vZGVDb2xvcnNDaGFuZ2VkIixudWxsKTtFKFtCdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUhlYWx0aFBpbGxzIixudWxsKTtFKFtCdCgidHJhY2VJbnB1dHMiLCJzZWxlY3RlZE5vZGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUlucHV0VHJhY2UiLG51bGwpO0xyPUUoW3l0KCJ0Zi1ncmFwaC1zY2VuZSIpXSxMcik7dmFyIERyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJEZXB0aD0xLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITAsdGhpcy5lZGdlV2lkdGhGdW5jdGlvbj0iIix0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZD0iIix0aGlzLmVkZ2VMYWJlbEZ1bmN0aW9uPSIiLHRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkPSIifXBhblRvTm9kZSh0KXt0aGlzLiQkKCJ0Zi1ncmFwaC1zY2VuZSIpLnBhblRvTm9kZSh0KX1fYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKCEhdCl7Zm9yKGxldCByIG9mIE9iamVjdC52YWx1ZXModC5nZXROb2RlTWFwKCkpKXIuaW5jbHVkZT11ci5VTlNQRUNJRklFRDt0aGlzLl9idWlsZFJlbmRlckhpZXJhcmNoeSh0KX19X2J1aWxkTmV3UmVuZGVySGllcmFyY2h5KCl7dmFyIHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTshdHx8dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9X3N0YXRzQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc3RhdHMscj10aGlzLmRldmljZXNGb3JTdGF0czt0aGlzLmdyYXBoSGllcmFyY2h5JiYodCYmciYmKGVsZSh0aGlzLmJhc2ljR3JhcGgsdCxyKSxsbGUodGhpcy5ncmFwaEhpZXJhcmNoeSx0KSksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImdyYXBoLXNlbGVjdCIsdGhpcy5fZ3JhcGhTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImRpc2FibGUtY2xpY2siLHRoaXMuX2Rpc2FibGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImVuYWJsZS1jbGljayIsdGhpcy5fZW5hYmxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1leHBhbmQiLHRoaXMuX25vZGVUb2dnbGVFeHBhbmQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXNlbGVjdCIsdGhpcy5fbm9kZVNlbGVjdGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1oaWdobGlnaHQiLHRoaXMuX25vZGVIaWdobGlnaHRlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdW5oaWdobGlnaHQiLHRoaXMuX25vZGVVbmhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXh0cmFjdCIsdGhpcy5fbm9kZVRvZ2dsZUV4dHJhY3QuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIsdGhpcy5fbm9kZVRvZ2dsZVNlcmllc0dyb3VwLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZWRnZS1zZWxlY3QiLHRoaXMuX2VkZ2VTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFubm90YXRpb24tc2VsZWN0Iix0aGlzLl9ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIsdGhpcy5fbm9kZUhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIsdGhpcy5fbm9kZVVuaGlnaGxpZ2h0ZWQuYmluZCh0aGlzKSl9X2J1aWxkUmVuZGVySGllcmFyY2h5KHQpe2lmKHQucm9vdC50eXBlIT09anQuTUVUQSlyZXR1cm47bGV0IHI9dGhpcyxuPVJkKCJuZXcgdGZfZ3JhcGhfcmVuZGVyLkhpZXJhcmNoeSIsKCk9PntsZXQgaT1uZXcgbG8odCwhIXRoaXMuc3RhdHMsdGhpcy5hdXRvRXh0cmFjdE5vZGVzKTtpLmVkZ2VMYWJlbEZ1bmN0aW9uPXRoaXMuZWRnZUxhYmVsRnVuY3Rpb24saS5lZGdlV2lkdGhGdW5jdGlvbj10aGlzLmVkZ2VXaWR0aEZ1bmN0aW9uO2Z1bmN0aW9uIG8oYSl7cmV0dXJue21pblZhbHVlOmEuZG9tYWluKClbMF0sbWF4VmFsdWU6YS5kb21haW4oKVsxXSxzdGFydENvbG9yOmEucmFuZ2UoKVswXSxlbmRDb2xvcjphLnJhbmdlKClbMV19fXJldHVybiByLl9zZXRDb2xvckJ5UGFyYW1zKHtjb21wdXRlX3RpbWU6byhpLmNvbXB1dGVUaW1lU2NhbGUpLG1lbW9yeTpvKGkubWVtb3J5VXNhZ2VTY2FsZSksZGV2aWNlOm9jdC5tYXAoaS5kZXZpY2VDb2xvck1hcC5kb21haW4oKSxmdW5jdGlvbihhKXtyZXR1cm57ZGV2aWNlOmEsY29sb3I6aS5kZXZpY2VDb2xvck1hcChhKX19KSx4bGFfY2x1c3RlcjpvY3QubWFwKGkueGxhQ2x1c3RlckNvbG9yTWFwLmRvbWFpbigpLGZ1bmN0aW9uKGEpe3JldHVybnt4bGFfY2x1c3RlcjphLGNvbG9yOmkueGxhQ2x1c3RlckNvbG9yTWFwKGEpfX0pfSksaX0sanIuUkVOREVSX0JVSUxEX0hJRVJBUkNIWSk7ci5fc2V0UmVuZGVySGllcmFyY2h5KG4pfV9nZXRWaXNpYmxlKHQpe3JldHVybiB0JiZ0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpfWZpdCgpe3RoaXMuJC5zY2VuZS5maXQoKX1nZXRJbWFnZUJsb2IoKXtyZXR1cm4gdGhpcy4kLnNjZW5lLmdldEltYWdlQmxvYigpfV9ncmFwaENoYW5nZWQoKXshdGhpcy5ncmFwaEhpZXJhcmNoeXx8KHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLiQuc2NlbmUubm9kZUNvbG9yc0NoYW5nZWQoKX0pLHRoaXMuZmlyZSgiZ3JhcGgtc2VsZWN0IikpfV9ncmFwaFNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgic2VsZWN0ZWROb2RlIixudWxsKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIixudWxsKSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZGlzYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITF9X2VuYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X3NlbGVjdGVkTm9kZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZCYmdGhpcy5oYW5kbGVOb2RlU2VsZWN0ZWQodCl9X3NlbGVjdGVkRWRnZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkRWRnZTt0aGlzLl9kZXNlbGVjdFByZXZpb3VzRWRnZSgpLHQmJih0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuY2xhc3NlZChIaS5FZGdlLlNFTEVDVEVELCEwKSx0aGlzLl91cGRhdGVNYXJrZXJPZlNlbGVjdGVkRWRnZSh0KSksdGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQmJnRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkKHQpfV9ub2RlU2VsZWN0ZWQodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmdGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsdC5kZXRhaWwubmFtZSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZWRnZVNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdC5kZXRhaWwuZWRnZUdyb3VwKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIix0LmRldGFpbC5lZGdlRGF0YSkpLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X25vZGVIaWdobGlnaHRlZCh0KXt0aGlzLnNldCgiaGlnaGxpZ2h0ZWROb2RlIix0LmRldGFpbC5uYW1lKX1fbm9kZVVuaGlnaGxpZ2h0ZWQodCl7dGhpcy5zZXQoImhpZ2hsaWdodGVkTm9kZSIsbnVsbCl9X25vZGVUb2dnbGVFeHBhbmQodCl7dGhpcy5fbm9kZVNlbGVjdGVkKHQpO3ZhciByPXQuZGV0YWlsLm5hbWUsbj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHIpO24ubm9kZS50eXBlIT09anQuT1AmJih0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShyKSxuLmV4cGFuZGVkPSFuLmV4cGFuZGVkLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLiQuc2NlbmUuc2V0Tm9kZUV4cGFuZGVkKG4pfSw3NSksUG8oe2FjdGlvbklkOmpyLk5PREVfRVhQQU5TSU9OX1RPR0dMRUQsZXZlbnRMYWJlbDpuLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCJ9KSl9X25vZGVUb2dnbGVFeHRyYWN0KHQpe3ZhciByPXQuZGV0YWlsLm5hbWU7dGhpcy5ub2RlVG9nZ2xlRXh0cmFjdChyKX1ub2RlVG9nZ2xlRXh0cmFjdCh0KXtsZXQgcj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHQpO3Iubm9kZS5pbmNsdWRlPT11ci5JTkNMVURFP3Iubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREU6ci5ub2RlLmluY2x1ZGU9PXVyLkVYQ0xVREU/ci5ub2RlLmluY2x1ZGU9dXIuSU5DTFVERTpyLm5vZGUuaW5jbHVkZT10aGlzLnJlbmRlckhpZXJhcmNoeS5pc05vZGVBdXhpbGlhcnkocik/dXIuSU5DTFVERTp1ci5FWENMVURFLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpLFBvKHthY3Rpb25JZDpqci5OT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQsZXZlbnRMYWJlbDpyLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREU/IkF1eGlsaWFyeSB0byBNYWluIjoiTWFpbiB0byBBdXhpbGlhcnkifSl9X25vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt2YXIgcj10LmRldGFpbC5uYW1lO3RoaXMubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHIpfW5vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO3ZhciByPXJQKHRoaXMpLG49SlMociwxMDAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKTtsZXQgaT1NeChLbCh7fSx0aGlzLmhpZXJhcmNoeVBhcmFtcykse3Nlcmllc01hcDp0aGlzLmdyYXBoSGllcmFyY2h5LmJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpfSk7eEgodGhpcy5iYXNpY0dyYXBoLGksbikudGhlbihmdW5jdGlvbihvKXt0aGlzLnNldCgiZ3JhcGhIaWVyYXJjaHkiLG8pLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpfS5iaW5kKHRoaXMpKX1fZGVzZWxlY3RQcmV2aW91c0VkZ2UoKXtsZXQgdD0iLiIrSGkuRWRnZS5TRUxFQ1RFRDtIdCh0KS5jbGFzc2VkKEhpLkVkZ2UuU0VMRUNURUQsITEpLmVhY2goKHIsbik9PntpZihyLmxhYmVsKXtsZXQgaT1IdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKTtyLmxhYmVsLnN0YXJ0TWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtyLmxhYmVsLnN0YXJ0TWFya2VySWR9KWApLHIubGFiZWwuZW5kTWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1lbmQiLGB1cmwoIyR7ci5sYWJlbC5lbmRNYXJrZXJJZH0pYCl9fSl9X3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKHQpe3ZhciByO2lmKHQubGFiZWwpe2xldCBuPXQubGFiZWwuc3RhcnRNYXJrZXJJZHx8dC5sYWJlbC5lbmRNYXJrZXJJZDtpZihuKXtsZXQgaT1uLnJlcGxhY2UoImRhdGFmbG93LSIsInNlbGVjdGVkLSIpLG89dGhpcy4kJCgiIyIraSk7aWYoIW8pe2xldCBzPXRoaXMuJC5zY2VuZS5xdWVyeVNlbGVjdG9yKCIjIituKTtvPXM9PW51bGw/dm9pZCAwOnMuY2xvbmVOb2RlKCEwKSxvLnNldEF0dHJpYnV0ZSgiaWQiLGkpLG8uY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQtYXJyb3doZWFkIiksKHI9cz09bnVsbD92b2lkIDA6cy5wYXJlbnROb2RlKT09bnVsbHx8ci5hcHBlbmRDaGlsZChvKX1sZXQgYT10LmxhYmVsLnN0YXJ0TWFya2VySWQ/Im1hcmtlci1zdGFydCI6Im1hcmtlci1lbmQiO3RoaXMuX2xhc3RTZWxlY3RlZEVkZ2VHcm91cC5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKS5zdHlsZShhLGB1cmwoIyR7aX0pYCl9fX1ub3QodCl7cmV0dXJuIXR9fTtEci50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICAuYXV0byB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0aWNhbCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3RpdGxlXV0iPgogICAgICAgICAgPGgyPltbdGl0bGVdXTwvaDI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGYtZ3JhcGgtc2NlbmUKICAgICAgICAgIGlkPSJzY2VuZSIKICAgICAgICAgIGNsYXNzPSJhdXRvIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9IltbX2dldFZpc2libGUoaGlnaGxpZ2h0ZWROb2RlKV1dIgogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHNlbGVjdGVkLWVkZ2U9Int7c2VsZWN0ZWRFZGdlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBwcm9ncmVzcz0iW1twcm9ncmVzc11dIgogICAgICAgICAgbm9kZS1jb250ZXh0LW1lbnUtaXRlbXM9Iltbbm9kZUNvbnRleHRNZW51SXRlbXNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgaGFuZGxlLWVkZ2Utc2VsZWN0ZWQ9IltbaGFuZGxlRWRnZVNlbGVjdGVkXV0iCiAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSIKICAgICAgICA+PC90Zi1ncmFwaC1zY2VuZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2dyYXBoQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxEci5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sRHIucHJvdG90eXBlLCJiYXNpY0dyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJkZXZpY2VzRm9yU3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoaWVyYXJjaHlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic2VsZWN0ZWRFZGdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJoaWdobGlnaHRlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLGxvKV0sRHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxEci5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJhdXRvRXh0cmFjdE5vZGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxEci5wcm90b3R5cGUsIm5vZGVDb250ZXh0TWVudUl0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLERyLnByb3RvdHlwZSwiX3JlbmRlckRlcHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJfYWxsb3dHcmFwaFNlbGVjdCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRHIucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiZWRnZVdpZHRoRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJlZGdlTGFiZWxGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImhhbmRsZUVkZ2VTZWxlY3RlZCIsdm9pZCAwKTtFKFtCdCgiYXV0b0V4dHJhY3ROb2RlcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQiLG51bGwpO0UoW0J0KCJncmFwaEhpZXJhcmNoeSIsImVkZ2VXaWR0aEZ1bmN0aW9uIiwiaGFuZGxlTm9kZVNlbGVjdGVkIiwiZWRnZUxhYmVsRnVuY3Rpb24iLCJoYW5kbGVFZGdlU2VsZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX2J1aWxkTmV3UmVuZGVySGllcmFyY2h5IixudWxsKTtFKFtCdCgic3RhdHMiLCJkZXZpY2VzRm9yU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX3N0YXRzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkTm9kZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWROb2RlQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkRWRnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWRFZGdlQ2hhbmdlZCIsbnVsbCk7RHI9RShbeXQoInRmLWdyYXBoIildLERyKTt2YXIgY289Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcD0wLHRoaXMuaGVhbHRoUGlsbEVudHJpZXM9aFB9cmVhZHkoKXtzdXBlci5yZWFkeSgpO3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluQ29udGFpbmVyIikscj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0Zi1kYXNoYm9hcmQtbGF5b3V0IC5zY3JvbGxiYXIiKTt0JiZyJiYodC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixyLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKX1faGVhbHRoUGlsbHNBdmFpbGFibGUodCxyKXtyZXR1cm4gdCYmcn1fY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKHQscil7cmV0dXJuIHQ/dFtyXS50b0ZpeGVkKDApOiIifWdldCBoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4LG49dGhpcy5zZWxlY3RlZE5vZGUsaT10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihvfHwhbilyZXR1cm4gbnVsbDtsZXQgYT10W25dO2lmKCFhKXJldHVybiBudWxsO2xldCBzPWFbaT8wOnJdO3JldHVybiBzP3MudmFsdWUuc2xpY2UoMiw4KTpudWxsfWdldCBfY3VycmVudFN0ZXBEaXNwbGF5VmFsdWUoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMscj10aGlzLmhlYWx0aFBpbGxTdGVwSW5kZXgsbj10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsaT10aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXAsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihuKXJldHVybiBpLnRvRml4ZWQoMCk7aWYobylyZXR1cm4gMDtmb3IobGV0IGEgaW4gdClyZXR1cm4gdFthXVtyXS5zdGVwLnRvRml4ZWQoMCk7cmV0dXJuIDB9Z2V0IF9iaWdnZXN0U3RlcEV2ZXJTZWVuKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzO2ZvcihsZXQgbiBpbiB0KXt2YXIgcj10W25dO3JldHVybiBNYXRoLm1heCh0aGlzLl9iaWdnZXN0U3RlcEV2ZXJTZWVuLHJbci5sZW5ndGgtMV0uc3RlcCl9cmV0dXJuIHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW58fDB9Z2V0IF9tYXhTdGVwSW5kZXgoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHM7Zm9yKGxldCByIGluIHQpcmV0dXJuIHRbcl0ubGVuZ3RoLTE7cmV0dXJuIDB9X2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyh0KXtyZXR1cm4gdCYmdC5sZW5ndGh9X3VwZGF0ZUFsZXJ0c0xpc3QoKXt2YXIgdD10aGlzLmRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyxyPXRoaXMuJCQoIiNudW1lcmljLWFsZXJ0cy1ib2R5Iik7aWYoISFyKXtyLmlubmVyVGV4dD0iIjtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2EuaW5uZXJUZXh0PVhzZShpLmZpcnN0X3RpbWVzdGFtcCksYS5jbGFzc0xpc3QuYWRkKCJmaXJzdC1vZmZlbnNlLXRkIiksby5hcHBlbmRDaGlsZChhKTt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3MuY2xhc3NMaXN0LmFkZCgidGVuc29yLWRldmljZS10ZCIpO3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuY2xhc3NMaXN0LmFkZCgidGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIiksbC5pbm5lclRleHQ9aS50ZW5zb3JfbmFtZSx0aGlzLl9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKGwsaS50ZW5zb3JfbmFtZSkscy5hcHBlbmRDaGlsZChsKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLmNsYXNzTGlzdC5hZGQoImRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSIpLGMuaW5uZXJUZXh0PSIoIitpLmRldmljZV9uYW1lKyIpIixzLmFwcGVuZENoaWxkKGMpLG8uYXBwZW5kQ2hpbGQocyk7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jbGFzc0xpc3QuYWRkKCJtaW5pLWhlYWx0aC1waWxsIik7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtpZihoLmNsYXNzTGlzdC5hZGQoIm1pbmktaGVhbHRoLXBpbGwtdGQiKSxoLmFwcGVuZENoaWxkKHUpLG8uYXBwZW5kQ2hpbGQoaCksaS5uZWdfaW5mX2V2ZW50X2NvdW50KXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmLmNsYXNzTGlzdC5hZGQoIm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxmLmlubmVyVGV4dD1pLm5lZ19pbmZfZXZlbnRfY291bnQsZi5zZXRBdHRyaWJ1dGUoInRpdGxlIixpLm5lZ19pbmZfZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCAtXHUyMjFFIiksdS5hcHBlbmRDaGlsZChmKX1pZihpLnBvc19pbmZfZXZlbnRfY291bnQpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3AuY2xhc3NMaXN0LmFkZCgicG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLHAuaW5uZXJUZXh0PWkucG9zX2luZl9ldmVudF9jb3VudCxwLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkucG9zX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoICtcdTIyMUUiKSx1LmFwcGVuZENoaWxkKHApfWlmKGkubmFuX2V2ZW50X2NvdW50KXt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTGlzdC5hZGQoIm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxkLmlubmVyVGV4dD1pLm5hbl9ldmVudF9jb3VudCxkLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkubmFuX2V2ZW50X2NvdW50KyIgZXZlbnRzIHdpdGggTmFOIiksdS5hcHBlbmRDaGlsZChkKX16dChyKS5hcHBlbmRDaGlsZChvKX19fV9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKHQscil7dC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pnt2YXIgbj1tbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjZW5lIiksdGhpcy5yZW5kZXJIaWVyYXJjaHksciksaSxvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWdyYXBoLWluZm8jZ3JhcGgtaW5mbyIpO28mJihpPW8uc2Nyb2xsSGVpZ2h0LW8uc2Nyb2xsVG9wKTt2YXIgYT10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLnNldCgic2VsZWN0ZWROb2RlIixuKTt2YXIgcz0oKT0+e28uc2Nyb2xsVG9wPW8uc2Nyb2xsSGVpZ2h0LWl9O28mJihhP3MoKTp3aW5kb3cuc2V0VGltZW91dChzLDIwKSl9KX19O2NvLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgewogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgaDIgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDEwcHggMTBweCAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLmNvbG9yLXByZXZpZXcgewogICAgICAgIHdpZHRoOiAyNnB4OwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbjogMCAxMHB4IDAgMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC5jb2xvci1sYWJlbCwKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC50ZW5zb3ItY291bnQgewogICAgICAgIGNvbG9yOiAjNzc3OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNnB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAudGVuc29yLWNvdW50IHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKiAzMSBjb21lcyBmcm9tIGFkZGluZyBhIHBhZGRpbmcgb2YgMTVweCBmcm9tIGJvdGggc2lkZXMgb2YgdGhlIHBhcGVyLXNsaWRlciwgc3VidHJhY3RpbmcKICAgKiAxcHggc28gdGhhdCB0aGUgc2xpZGVyIHdpZHRoIGFsaWducyB3aXRoIHRoZSBpbWFnZSAodGhlIGxhc3Qgc2xpZGVyIG1hcmtlciB0YWtlcyB1cCAxcHgpLAogICAqIGFuZCBhZGRpbmcgMnB4IHRvIGFjY291bnQgZm9yIGEgYm9yZGVyIG9mIDFweCBvbiBib3RoIHNpZGVzIG9mIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgKiBBcHBhcmVudGx5LCB0aGUgcGFwZXItc2xpZGVyIGxhY2tzIGEgbWl4aW4gZm9yIHRob3NlIHBhZGRpbmcgdmFsdWVzLiAqLwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAzMXB4KTsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGwtc3RlcC1udW1iZXItaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgdGQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgd2lkdGg6IDgwcHg7CiAgICAgIH0KCiAgICAgIC50ZW5zb3ItZGV2aWNlLXRkIHsKICAgICAgICBtYXgtd2lkdGg6IDE0MHB4OwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsIHsKICAgICAgICB3aWR0aDogMTMwcHg7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsID4gZGl2IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAjZXZlbnQtY291bnRzLXRoIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICB9CgogICAgICAubmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwgMTQxLCAwKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLnBvc2l0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigwLCA2MiwgMjEyKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigyMDQsIDQ3LCA0NCk7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uLAogICAgICAucG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiwKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAxMHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLm5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9ImNhcmQgaGVhbHRoLXBpbGwtbGVnZW5kIj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgIEVuYWJsZSBhbGwgKG5vdCBqdXN0IHNhbXBsZWQpIHN0ZXBzLiBSZXF1aXJlcyBzbG93IGRpc2sgcmVhZC4KICAgICAgPC9kaXY+CiAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgaWQ9ImVuYWJsZUFsbFN0ZXBzTW9kZVRvZ2dsZSIKICAgICAgICBjaGVja2VkPSJ7e2FsbFN0ZXBzTW9kZUVuYWJsZWR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgIDxoMj4KICAgICAgICBTdGVwIG9mIEhlYWx0aCBQaWxsczoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCIKICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIKICAgICAgICAgICAgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcDo6aW5wdXR9fSIKICAgICAgICAgIC8+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWFsbFN0ZXBzTW9kZUVuYWJsZWRdXSI+CiAgICAgICAgICBbW19jdXJyZW50U3RlcERpc3BsYXlWYWx1ZV1dCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlCiAgICAgICAgICBhY3RpdmUKICAgICAgICAgIGhpZGRlbiQ9IltbIWFyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgaWQ9ImhlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIiCiAgICAgICAgPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICA8L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBpZD0iaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIiCiAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgICAgbWF4PSJbW19iaWdnZXN0U3RlcEV2ZXJTZWVuXV0iCiAgICAgICAgICBzbmFwcwogICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgIHZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX21heFN0ZXBJbmRleF1dIj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGgyPgogICAgICAgIEhlYWx0aCBQaWxsCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGVdXSI+CiAgICAgICAgICBDb3VudHMgZm9yIFNlbGVjdGVkIE5vZGUKICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZV1dIj4KICAgICAgICAgIExlZ2VuZAogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvaDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbaGVhbHRoUGlsbEVudHJpZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhbHRoLXBpbGwtZW50cnkiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iY29sb3ItcHJldmlldyIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6W1tpdGVtLmJhY2tncm91bmRfY29sb3JdXSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxhYmVsIj5bW2l0ZW0ubGFiZWxdXTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idGVuc29yLWNvdW50Ij4KICAgICAgICAgICAgW1tfY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKGhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGUsCiAgICAgICAgICAgIGluZGV4KV1dCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBoaWRkZW4kPSJbWyFfaGFzRGVidWdnZXJOdW1lcmljQWxlcnRzKGRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyldXSI+CiAgICAgICAgPGgyIGlkPSJudW1lcmljLWFsZXJ0cy1oZWFkZXIiPk51bWVyaWMgQWxlcnRzPC9oMj4KICAgICAgICA8cD5BbGVydHMgYXJlIHNvcnRlZCBmcm9tIHRvcCB0byBib3R0b20gYnkgaW5jcmVhc2luZyB0aW1lc3RhbXAuPC9wPgogICAgICAgIDxkaXYgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlLWNvbnRhaW5lciI+CiAgICAgICAgICA8dGFibGUgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD5GaXJzdCBPZmZlbnNlPC90aD4KICAgICAgICAgICAgICAgIDx0aD5UZW5zb3IgKERldmljZSk8L3RoPgogICAgICAgICAgICAgICAgPHRoIGlkPSJldmVudC1jb3VudHMtdGgiPkV2ZW50IENvdW50czwvdGg+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5IGlkPSJudW1lcmljLWFsZXJ0cy1ib2R5Ij48L3Rib2R5PgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbIV9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHMoZGVidWdnZXJOdW1lcmljQWxlcnRzKV1dIgogICAgICA+CiAgICAgICAgPHAgY2xhc3M9Im5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiI+CiAgICAgICAgICBObyBudW1lcmljIGFsZXJ0cyBzbyBmYXIuIFRoYXQgaXMgbGlrZWx5IGdvb2QuIEFsZXJ0cyBpbmRpY2F0ZSB0aGUKICAgICAgICAgIHByZXNlbmNlIG9mIE5hTiBvciAoKy8tKSBJbmZpbml0eSB2YWx1ZXMsIHdoaWNoIG1heSBiZSBjb25jZXJuaW5nLgogICAgICAgIDwvcD4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLGNvLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiZGVidWdnZXJOdW1lcmljQWxlcnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxjby5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImhpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJzZWxlY3RlZE5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiYWxsU3RlcHNNb2RlRW5hYmxlZCIsdm9pZCAwKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJzZWxlY3RlZE5vZGUiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwiYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2JpZ2dlc3RTdGVwRXZlclNlZW4iLG51bGwpO0UoW1J0KCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtCdCgiZGVidWdnZXJOdW1lcmljQWxlcnRzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxjby5wcm90b3R5cGUsIl91cGRhdGVBbGVydHNMaXN0IixudWxsKTtjbz1FKFt5dCgidGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkIildLGNvKTt2YXIgYWN0PXt9O0tzKGFjdCx7R3JhcGhJY29uVHlwZTooKT0+bnZ9KTt2YXIgbnY7KGZ1bmN0aW9uKGUpe2UuQ09OU1Q9IkNPTlNUIixlLk1FVEE9Ik1FVEEiLGUuT1A9Ik9QIixlLlNFUklFUz0iU0VSSUVTIixlLlNVTU1BUlk9IlNVTU1BUlkifSkobnZ8fChudj17fSkpO3ZhciBadT1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudmVydGljYWw9ITEsdGhpcy5maWxsT3ZlcnJpZGU9bnVsbCx0aGlzLnN0cm9rZU92ZXJyaWRlPW51bGwsdGhpcy5oZWlnaHQ9MjAsdGhpcy5mYWRlZD0hMX1nZXRTdmdEZWZpbmFibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuJC5zdmdEZWZzfWdldCBfZmlsbCgpe3ZhciB0PXRoaXMudHlwZSxyPXRoaXMuZmlsbE92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbnYuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9GSUxMO2Nhc2UgbnYuU0VSSUVTOnJldHVybiBVbHQuREVGQVVMVF9GSUxMO2RlZmF1bHQ6cmV0dXJuIHkwLkRFRkFVTFRfRklMTH19Z2V0IF9zdHJva2UoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLnN0cm9rZU92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbnYuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9TVFJPS0U7Y2FzZSBudi5TRVJJRVM6cmV0dXJuIFVsdC5ERUZBVUxUX1NUUk9LRTtkZWZhdWx0OnJldHVybiB5MC5ERUZBVUxUX1NUUk9LRX19X2lzVHlwZSh0LHIpe3JldHVybiB0PT09cn1fZmFkZWRDbGFzcyh0LHIpe3JldHVybiB0PyJmYWRlZC0iK3I6IiJ9fTtadS50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAwOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSBzdmcgewogICAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCB7CiAgICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtZWxsaXBzZSB7CiAgICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCwKICAgICAgLmZhZGVkLWVsbGlwc2UsCiAgICAgIC5mYWRlZC1zZXJpZXMgewogICAgICAgIHN0cm9rZTogdmFyKC0tdGItZ3JhcGgtZmFkZWQpICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgI3JlY3RIYXRjaCBsaW5lLAogICAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8IS0tIFNWRyBmb3IgZGVmaW5pdGlvbnMgLS0+CiAgICA8c3ZnIGhlaWdodD0iMCIgd2lkdGg9IjAiIGlkPSJzdmdEZWZzIj4KICAgICAgPGRlZnM+CiAgICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgICA8cGF0dGVybgogICAgICAgICAgaWQ9InJlY3RIYXRjaCIKICAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICBoZWlnaHQ9IjUiCiAgICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgID4KICAgICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSI1IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIDxwYXR0ZXJuCiAgICAgICAgICBpZD0iZWxsaXBzZUhhdGNoIgogICAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgICB3aWR0aD0iMiIKICAgICAgICAgIGhlaWdodD0iMiIKICAgICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICAgPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgICA8L3BhdHRlcm4+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBlbGxpcHNlLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgICByeD0iNy41IgogICAgICAgICAgcnk9IjMiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjIiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBWZXJ0aWNhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI5Ij48L3VzZT4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjYiPjwvdXNlPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxMiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI0Ij48L3VzZT4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgIGlkPSJzdW1tYXJ5LWljb24iCiAgICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgICAgaGVpZ2h0PSIxMiIKICAgICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICAgIHdpZHRoPSIxMiIKICAgICAgICA+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgICAgPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICAgIDwvZGVmcz4KICAgIDwvc3ZnPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ0NPTlNUJyldXSI+CiAgICAgIDxzdmcKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICA+CiAgICAgICAgPGNpcmNsZQogICAgICAgICAgY3g9IjUiCiAgICAgICAgICBjeT0iNSIKICAgICAgICAgIHI9IjMiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgPjwvY2lyY2xlPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnU1VNTUFSWScpXV0iPgogICAgICA8c3ZnCiAgICAgICAgd2lkdGgkPSJbW2hlaWdodF1dIgogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIGZpbGw9IiM4NDg0ODQiCiAgICAgID4KICAgICAgICA8cGF0aAogICAgICAgICAgZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIKICAgICAgICA+PC9wYXRoPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnT1AnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTYgOCIKICAgICAgPgogICAgICAgIDx1c2UKICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdlbGxpcHNlJyl9fSIKICAgICAgICAgIHg9IjgiCiAgICAgICAgICB5PSI0IgogICAgICAgID48L3VzZT4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ01FVEEnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMzcgMTYiCiAgICAgID4KICAgICAgICA8cmVjdAogICAgICAgICAgeD0iMSIKICAgICAgICAgIHk9IjEiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdyZWN0Jyl9fSIKICAgICAgICAgIHN0cm9rZS13aWR0aD0iMnB4IgogICAgICAgICAgaGVpZ2h0PSIxNCIKICAgICAgICAgIHdpZHRoPSIzNSIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjUiCiAgICAgICAgPjwvcmVjdD4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NFUklFUycpXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMTYgMTUiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCIKICAgICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICAgIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ3NlcmllcycpfX0iCiAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgIHk9IjIiCiAgICAgICAgICA+PC91c2U+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMTAiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIgogICAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgICBzdHJva2UkPSJbW19zdHJva2VdXSIKICAgICAgICAgICAgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnc2VyaWVzJyl9fSIKICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgeT0iMSIKICAgICAgICAgID48L3VzZT4KICAgICAgICA8L3N2Zz4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxadS5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwiZmlsbE92ZXJyaWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwic3Ryb2tlT3ZlcnJpZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sWnUucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsImZhZGVkIix2b2lkIDApO0UoW1J0KCJ0eXBlIiwiZmlsbE92ZXJyaWRlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWnUucHJvdG90eXBlLCJfZmlsbCIsbnVsbCk7RShbUnQoInR5cGUiLCJzdHJva2VPdmVycmlkZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFp1LnByb3RvdHlwZSwiX3N0cm9rZSIsbnVsbCk7WnU9RShbeXQoInRmLWdyYXBoLWljb24iKV0sWnUpO3ZhciBCcz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ub2RlPW51bGwsdGhpcy5yZW5kZXJJbmZvPW51bGwsdGhpcy5jb2xvckJ5PUduLlNUUlVDVFVSRSx0aGlzLnRlbXBsYXRlSW5kZXg9bnVsbCx0aGlzLnR5cGU9bnVsbCx0aGlzLnZlcnRpY2FsPSExLHRoaXMuY29uc3Q9ITEsdGhpcy5zdW1tYXJ5PSExLHRoaXMuZmlsbD1udWxsLHRoaXMuaGVpZ2h0PTIwfV9jb21wdXRlRmlsbE92ZXJyaWRlKHQscixuLGksbyl7cmV0dXJuIHQmJnImJmk/TEgoaSxuLHIsITEpOm99X2dldFN0cm9rZU92ZXJyaWRlKHQpe3JldHVybiB0P2VjdCh0KTpudWxsfV9nZXRUeXBlKHQscixuLGkpe2xldHtHcmFwaEljb25UeXBlOm99PWFjdDtpZih0KXN3aXRjaCh0LnR5cGUpe2Nhc2UganQuT1A6e2xldCBhPXQub3A7cmV0dXJuIHR5cGVvZiBhIT0ic3RyaW5nIj9vLk9QOmE9PT0iQ29uc3QifHxuP28uQ09OU1Q6YS5lbmRzV2l0aCgiU3VtbWFyeSIpfHxyP28uU1VNTUFSWTpvLk9QfWNhc2UganQuTUVUQTpyZXR1cm4gby5NRVRBO2Nhc2UganQuU0VSSUVTOnJldHVybiBvLlNFUklFU31yZXR1cm4gaX1faXNWZXJ0aWNhbCh0LHIpe3JldHVybiB0P3QuaGFzTm9uQ29udHJvbEVkZ2VzOiEhcn1fZ2V0RmFkZWQodCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dH1fb25GaWxsT3ZlcnJpZGVDaGFuZ2VkKHQscil7bGV0e25vZGU6bixyZW5kZXJJbmZvOmksY29sb3JCeTpvLHRlbXBsYXRlSW5kZXg6YX09dGhpczt0IT09ciYmSUgodGhpcy4kLmljb24uZ2V0U3ZnRGVmaW5hYmxlRWxlbWVudCgpKSxuJiZpJiZhJiZMSChhLG8saSwhMSx0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpfX07QnMudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgLS10Yi1ncmFwaC1mYWRlZDogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRmLWdyYXBoLWljb24KICAgICAgaWQ9Imljb24iCiAgICAgIHR5cGU9IltbX2dldFR5cGUobm9kZSwgc3VtbWFyeSwgY29uc3QsIHR5cGUpXV0iCiAgICAgIGhlaWdodD0iW1toZWlnaHRdXSIKICAgICAgZmlsbC1vdmVycmlkZT0iW1tfZmlsbE92ZXJyaWRlXV0iCiAgICAgIHN0cm9rZS1vdmVycmlkZT0iW1tfZ2V0U3Ryb2tlT3ZlcnJpZGUoX2ZpbGxPdmVycmlkZSldXSIKICAgICAgZmFkZWQ9IltbX2dldEZhZGVkKHJlbmRlckluZm8pXV0iCiAgICAgIHZlcnRpY2FsPSJbW19pc1ZlcnRpY2FsKG5vZGUsIHZlcnRpY2FsKV1dIgogICAgPjwvdGYtZ3JhcGgtaWNvbj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwibm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxCcy5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQnMucHJvdG90eXBlLCJjb25zdCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEJzLnByb3RvdHlwZSwic3VtbWFyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsImZpbGwiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sQnMucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlRmlsbE92ZXJyaWRlKG5vZGUsIHJlbmRlckluZm8sIGNvbG9yQnksIHRlbXBsYXRlSW5kZXgsIGZpbGwpIixvYnNlcnZlcjoiX29uRmlsbE92ZXJyaWRlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJfZmlsbE92ZXJyaWRlIix2b2lkIDApO0JzPUUoW3l0KCJ0Zi1ub2RlLWljb24iKV0sQnMpO3ZhciBHYz1jbGFzcyBleHRlbmRzIEd0KG10KXtfaXRlbVR5cGVDaGFuZ2VkKCl7dGhpcy5pdGVtVHlwZSE9PSJzdWJub2RlIj90aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5hZGQoImNsaWNrYWJsZSIpOnRoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LnJlbW92ZSgiY2xpY2thYmxlIil9X25vZGVMaXN0ZW5lcih0KXt0aGlzLmZpcmUoIm5vZGUtbGlzdC1pdGVtLSIrdC50eXBlLHtub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07R2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuIHsKICAgICAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbS5leGNsdWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuLmVkZ2UtbGFiZWwgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmZhZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sR2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxHYy5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCk7R2M9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0iKV0sR2MpO3ZhciBhcz1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2V4cGFuZGVkPSEwLHRoaXMuX29wQ29tcGF0Q29sb3I9eTAuQ09NUEFUSUJMRSx0aGlzLl9vcEluY29tcGF0Q29sb3I9eTAuSU5DT01QQVRJQkxFLHRoaXMuX3RlbXBsYXRlSW5kZXg9bnVsbH1fZ2V0Tm9kZSh0LHIpe3JldHVybiByLm5vZGUodCl9X2dldFJlbmRlckluZm8odCxyKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpfV90b2dnbGVFeHBhbmRlZCgpe3RoaXMuX2V4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1fZ2V0VG9nZ2xlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3Jlc2l6ZUxpc3QodCl7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTtyJiZyLmZpcmUoImlyb24tcmVzaXplIil9Z2V0IF9pbmNvbXBhdGlibGVPcE5vZGVzKCl7bGV0IHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4hdHx8IXQucm9vdD9bXToodGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcywiI2luY29tcGF0aWJsZU9wc0xpc3QiKSksY2xlKHQpKX1nZXQgX29wQ29tcGF0U2NvcmUoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHQmJnQucm9vdCl7dmFyIHI9dC5yb290LG49ci5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGUsaT1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlO2lmKG49PTAmJmk9PTApcmV0dXJuIDA7dmFyIG89bitpO3JldHVybiBNYXRoLmZsb29yKDEwMCpuL28pLzEwMH1yZXR1cm4gMH1nZXQgX29wQ29tcGF0U2NvcmVMYWJlbCgpe3ZhciB0PXRoaXMuX29wQ29tcGF0U2NvcmU7cmV0dXJuIHhuKCIuMCUiKSh0KX1nZXQgX3RvdGFsSW5jb21wYXRPcHMoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0JiZ0LnJvb3Q/dC5yb290LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlOjB9X2dyYXBoSGllcmFyY2h5Q2hhbmdlZCgpe3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksdGhpcy5ncmFwaEhpZXJhcmNoeS5hZGRMaXN0ZW5lcihEZC5URU1QTEFURVNfVVBEQVRFRCwoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KX19O2FzLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgLmluY29tcGF0aWJsZS1vcHMtbGlzdCB7CiAgICAgICAgaGVpZ2h0OiAzNTBweDsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICBpcm9uLWxpc3QgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbS1ib2R5W3R3by1saW5lXSB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA0cHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmRlZEluZm8gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJwdDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAubm9uLWNvbnRyb2wtbGlzdC1pdGVtIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIGRpdi5vcC1jb21wYXQtZGlzcGxheSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTYWRseSwgYmVjYXVzZSB0aGUgd2hvbGUgYm9keSBpcyBpbnZlcnRlZCBpbiBjb2xvciwgbGVnZW5kcyBhbHNvIG5lZWQKICAgICAgICogdG8gYmUgaW52ZXJ0ZWQuCiAgICAgICAqKi8KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgZGl2Lm9wLWNvbXBhdC1kaXNwbGF5IHsKICAgICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgICAgfQoKICAgICAgc3ZnLm9wLWNvbXBhdCB7CiAgICAgICAgd2lkdGg6IDI1MHB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQoKICAgICAgZGl2Lm9wLWNvbXBhdC12YWx1ZSB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSIgaWQ9Im5vZGV0aXRsZSI+W1tub2RlVGl0bGVdXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtZGlzcGxheSI+CiAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgY2xhc3M9Im9wLWNvbXBhdCIKICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMjUwIDI1IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Im9wLWNvbXBhdC1maWxsIj4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0JD0iW1tfb3BDb21wYXRTY29yZV1dIgogICAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX29wQ29tcGF0Q29sb3JdXSIKICAgICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iCiAgICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yJD0iW1tfb3BJbmNvbXBhdENvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3IgXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxyZWN0CiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMjUiCiAgICAgICAgICAgICAgICAgIHdpZHRoPSIyNTAiCiAgICAgICAgICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgICAgICAgICByeT0iNSIKICAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IHVybCgnI29wLWNvbXBhdC1maWxsJyk7IgogICAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtdmFsdWUiPltbX29wQ29tcGF0U2NvcmVMYWJlbF1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvcGFwZXItaXRlbS1ib2R5PgogICAgPC9wYXBlci1pdGVtPgoKICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIEluY29tcGF0aWJsZSBPcGVyYXRpb25zOiAoPHNwYW4+W1tfdG90YWxJbmNvbXBhdE9wc11dPC9zcGFuPikKICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgY2xhc3M9ImluY29tcGF0aWJsZS1vcHMtbGlzdCIKICAgICAgICAgICAgaWQ9ImluY29tcGF0aWJsZU9wc0xpc3QiCiAgICAgICAgICAgIGl0ZW1zPSJbW19pbmNvbXBhdGlibGVPcE5vZGVzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbQogICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGl0ZW0ubmFtZSwgcmVuZGVySGllcmFyY2h5KV1dIgogICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICBpdGVtLXR5cGU9ImluY29tcGF0aWJsZS1vcHMiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9pcm9uLWNvbGxhcHNlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxhcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sYXMucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYXMucHJvdG90eXBlLCJub2RlVGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxhcy5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhcy5wcm90b3R5cGUsIl9vcENvbXBhdENvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGFzLnByb3RvdHlwZSwiX29wSW5jb21wYXRDb2xvciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxhcy5wcm90b3R5cGUsIl90ZW1wbGF0ZUluZGV4Iix2b2lkIDApO0UoW1J0KCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfaW5jb21wYXRpYmxlT3BOb2RlcyIsbnVsbCk7RShbUnQoImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZSIsbnVsbCk7RShbUnQoIl9vcENvbXBhdFNjb3JlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZUxhYmVsIixudWxsKTtFKFtSdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhcy5wcm90b3R5cGUsIl90b3RhbEluY29tcGF0T3BzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGFzLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7YXM9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkIildLGFzKTt2YXIgbDM9RWUoT2UoKSwxKTt2YXIgV2M9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe19pdGVtVHlwZUNoYW5nZWQoKXt0aGlzLml0ZW1UeXBlIT09InN1Ym5vZGUiP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX1fbm9kZUxpc3RlbmVyKHQpe3RoaXMuZmlyZSgibm9kZS1saXN0LWl0ZW0tIit0LnR5cGUse2NhcmROb2RlOnRoaXMuY2FyZE5vZGUubmFtZSxub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07V2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXllbGxvdy05MDApOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuY2xpY2thYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3BhbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0uZXhjbHVkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3Bhbi5lZGdlLWxhYmVsIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDFweDsKICAgICAgICBsZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5mYWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPjwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJlZGdlLWxhYmVsIj5bW2VkZ2VMYWJlbF1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxXYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJ0ZW1wbGF0ZUluZGV4Iix2b2lkIDApO1djPUUoW3l0KCJ0Zi1ub2RlLWxpc3QtaXRlbSIpXSxXYyk7dmFyIGRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMCx0aGlzLl9vcGVuZWRDb250cm9sUHJlZD0hMSx0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hMSx0aGlzLl90ZW1wbGF0ZUluZGV4PW51bGx9ZXhwYW5kTm9kZSgpe3RoaXMuZmlyZSgiX25vZGUuZXhwYW5kIix0aGlzLm5vZGUpfV9nZXROb2RlKHQscil7cmV0dXJuIHIubm9kZSh0KX1fZ2V0Tm9kZVN0YXRzKHQscil7dmFyIG49dGhpcy5fZ2V0Tm9kZSh0LHIpO3JldHVybiBuP24uc3RhdHM6bnVsbH1fZ2V0VG90YWxNaWNyb3ModCl7cmV0dXJuIHQ/dC5nZXRUb3RhbE1pY3JvcygpOjB9Z2V0IF9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztyZXR1cm4gbUgodCl9Z2V0IF9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztpZighKCF0fHwhdC50b3RhbEJ5dGVzKSlyZXR1cm4gTmQodC50b3RhbEJ5dGVzLG5QKX1nZXQgX25vZGVTdGF0c0Zvcm1hdHRlZENvbXB1dGVUaW1lKCl7dmFyIHQ9dGhpcy5fbm9kZVN0YXRzO2lmKCEoIXR8fCF0LmdldFRvdGFsTWljcm9zKCkpKXJldHVybiBOZCh0LmdldFRvdGFsTWljcm9zKCksaVApfWdldCBfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXMoKXt2YXIgdD10aGlzLl9ub2RlU3RhdHM7aWYoISghdHx8IXQub3V0cHV0U2l6ZXx8IXQub3V0cHV0U2l6ZS5sZW5ndGgpKXJldHVybiBsMy5tYXAodC5vdXRwdXRTaXplLGZ1bmN0aW9uKHIpe3JldHVybiByLmxlbmd0aD09PTA/InNjYWxhciI6IlsiK3Iuam9pbigiLCAiKSsiXSJ9KX1fZ2V0UmVuZGVySW5mbyh0LHIpe3JldHVybiB0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUodCl9Z2V0IF9hdHRyaWJ1dGVzKCl7dmFyIHQ9dGhpcy5fbm9kZTtpZih0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLCIjYXR0cmlidXRlc0xpc3QiKSksIXR8fCF0LmF0dHIpcmV0dXJuW107dmFyIHI9W107cmV0dXJuIGwzLmVhY2godC5hdHRyLGZ1bmN0aW9uKG4pe24ua2V5PT09UXNlP3I9ci5jb25jYXQobi52YWx1ZS5saXN0LnMubWFwKGZ1bmN0aW9uKGkpe3JldHVybntrZXk6aSx2YWx1ZToiVG9vIGxhcmdlIHRvIHNob3cuLi4ifX0pKTpyLnB1c2goe2tleTpuLmtleSx2YWx1ZTpKU09OLnN0cmluZ2lmeShuLnZhbHVlKX0pfSkscn1nZXQgX2RldmljZSgpe3ZhciB0PXRoaXMuX25vZGU7cmV0dXJuIHQ/dC5kZXZpY2U6bnVsbH1nZXQgX3N1Y2Nlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgiaW5wdXRzTGlzdCIpLHQ/dGhpcy5fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3Qoci5nZXRTdWNjZXNzb3JzKHQubmFtZSksITEsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9wcmVkZWNlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgib3V0cHV0c0xpc3QiKSx0P3RoaXMuX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHIuZ2V0UHJlZGVjZXNzb3JzKHQubmFtZSksITAsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9mdW5jdGlvblVzYWdlcygpe3ZhciB0PXRoaXMuX25vZGUscj10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHRoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImZ1bmN0aW9uVXNhZ2VzTGlzdCIpLCF0fHx0LnR5cGUhPT1qdC5NRVRBKXJldHVybltdO2xldCBuPXIubGlicmFyeUZ1bmN0aW9uc1t0LmFzc29jaWF0ZWRGdW5jdGlvbl07cmV0dXJuIG4/bi51c2FnZXM6W119X3JlZnJlc2hOb2RlSXRlbUxpc3QodCl7dGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcyxgIyR7dH1gKSl9X2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHQscixuKXt2YXIgaT1hPT5sMy5tYXAoYS5iYXNlRWRnZUxpc3Qscz0+e3ZhciBsPXI/cy52OnMudztyZXR1cm57bmFtZTpsLG5vZGU6dGhpcy5fZ2V0Tm9kZShsLHRoaXMuZ3JhcGhIaWVyYXJjaHkpLGVkZ2VMYWJlbDpqbHQocyx0aGlzLnJlbmRlckhpZXJhcmNoeSkscmVuZGVySW5mbzp0aGlzLl9nZXRSZW5kZXJJbmZvKGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpfX0pLG89ZnVuY3Rpb24oYSl7dmFyIHM9W107cmV0dXJuIGwzLmVhY2goYSxsPT57dmFyIGM9cj9sLnY6bC53OyFufHxsLmJhc2VFZGdlTGlzdC5sZW5ndGg9PTE/cz1zLmNvbmNhdChpKGwpKTpzLnB1c2goe25hbWU6Yyxub2RlOnRoaXMuX2dldE5vZGUoYyx0aGlzLmdyYXBoSGllcmFyY2h5KSxlZGdlTGFiZWw6WGx0KGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhjLHRoaXMucmVuZGVySGllcmFyY2h5KX0pfSksc30uYmluZCh0aGlzKTtyZXR1cm57cmVndWxhcjpvKHQucmVndWxhciksY29udHJvbDpvKHQuY29udHJvbCl9fWdldCBfc3Vibm9kZXMoKXt2YXIgdD10aGlzLl9ub2RlO3JldHVybiB0JiZ0Lm1ldGFncmFwaD90Lm1ldGFncmFwaC5ub2RlcygpOm51bGx9Z2V0IF90b3RhbFByZWRlY2Vzc29ycygpe3ZhciB0PXRoaXMuX3ByZWRlY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofWdldCBfdG90YWxTdWNjZXNzb3JzKCl7dmFyIHQ9dGhpcy5fc3VjY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofV90b2dnbGVDb250cm9sUHJlZCgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSF0aGlzLl9vcGVuZWRDb250cm9sUHJlZH1fdG9nZ2xlQ29udHJvbFN1Y2MoKXt0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2N9X3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfV9nZXRUb2dnbGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fcmVzZXRTdGF0ZSgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExLHRoaXMuX29wZW5lZENvbnRyb2xTdWNjPSExLHRoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0Iix0Y3QodGhpcy5fbm9kZSkpfV9yZXNpemVMaXN0KHQpe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7ciYmci5maXJlKCJpcm9uLXJlc2l6ZSIpfV90b2dnbGVJbmNsdWRlKCl7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1pbmNsdXNpb24iLHtuYW1lOnRoaXMuZ3JhcGhOb2RlTmFtZX0pfV9ub2RlSW5jbHVkZVN0YXRlQ2hhbmdlZCh0LHIpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIsX0godCkpfV90b2dnbGVHcm91cCgpe3ZhciB0PVBIKHRoaXMuX25vZGUpO3RoaXMuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOnR9KX1faXNMaWJyYXJ5RnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubmFtZS5zdGFydHNXaXRoKFNhKX1faXNJblNlcmllcyh0KXtyZXR1cm4gUWx0KHQpfV9ncmFwaEhpZXJhcmNoeUNoYW5nZWQoKXt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpLHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpfSl9fTtkbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuc3ViLWxpc3QtZ3JvdXAgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICB9CgogICAgICAuYXR0ci1sZWZ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogMzAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuYXR0ci1yaWdodCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUgewogICAgICAgIGRpc3BsYXk6IHRhYmxlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUtcm93IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1yb3cgLnN1Yi1saXN0LXRhYmxlLWNlbGw6bGFzdC1jaGlsZCB7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1jZWxsIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbWF4LXdpZHRoOiAyMDBweDsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICBwYXBlci1pdGVtLWJvZHlbdHdvLWxpbmVdIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4IDRweDsKICAgICAgfQoKICAgICAgLmV4cGFuZGVkSW5mbyB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sRGVwcyB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgOHB4OwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CgogICAgICAuc3VidGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICB9CgogICAgICAuY29udHJvbExpbmUgewogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5jbHVkZS1ncm91cCB7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlIHsKICAgICAgICBtYXJnaW46IDVweCA2cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5ub24tY29udHJvbC1saXN0LWl0ZW0gewogICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSI+CiAgICAgICAgICAgIDx0Zi13YnItc3RyaW5nIHZhbHVlPSJbW19ub2RlLm5hbWVdXSIgZGVsaW1pdGVyLXBhdHRlcm49Ii8iPgogICAgICAgICAgICA8L3RmLXdici1zdHJpbmc+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHNlY29uZGFyeT4KICAgICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgICAgY2xhc3M9Im5vZGUtaWNvbiIKICAgICAgICAgICAgbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICByZW5kZXItaW5mbz0iW1tfZ2V0UmVuZGVySW5mbyhncmFwaE5vZGVOYW1lLCByZW5kZXJIaWVyYXJjaHkpXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgID48L3RmLW5vZGUtaWNvbj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5vcH19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICAgIE9wZXJhdGlvbjoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLm9wXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5tZXRhZ3JhcGh9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj4KICAgICAgICAgICAgICBTdWJncmFwaDoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLmNhcmRpbmFsaXR5XV08L3NwYW4+IG5vZGVzCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9wYXBlci1pdGVtLWJvZHk+CiAgICA8L3BhcGVyLWl0ZW0+CiAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7X2V4cGFuZGVkfX0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2V4cGFuZGVkfX0iIHJlc3RhbXA9InRydWUiPgogICAgICAgIDxkaXYgY2xhc3M9ImV4cGFuZGVkSW5mbyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBhdHRyaWJ1dGVzIj4KICAgICAgICAgICAgQXR0cmlidXRlcyAoPHNwYW4+W1tfYXR0cmlidXRlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9ImF0dHJpYnV0ZXNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19hdHRyaWJ1dGVzXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPltbaXRlbS5rZXldXTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLXJpZ2h0Ij5bW2l0ZW0udmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2RldmljZX19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgZGV2aWNlIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPkRldmljZTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbX2RldmljZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBwcmVkZWNlc3NvcnMiPgogICAgICAgICAgICBJbnB1dHMgKDxzcGFuPltbX3RvdGFsUHJlZGVjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJpbnB1dHNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMucmVndWxhcl1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGVkZ2UtbGFiZWw9IltbaXRlbS5lZGdlTGFiZWxdXSIKICAgICAgICAgICAgICAgICAgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIKICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvdGYtbm9kZS1saXN0LWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFByZWQpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sUHJlZCIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFByZWR9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgICAgICAgICBpdGVtcz0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2xdXSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBzdWNjZXNzb3JzIj4KICAgICAgICAgICAgT3V0cHV0cyAoPHNwYW4+W1tfdG90YWxTdWNjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJvdXRwdXRzTGlzdCIKICAgICAgICAgICAgICBpdGVtcz0iW1tfc3VjY2Vzc29ycy5yZWd1bGFyXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIgogICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvciIKICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdWNjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFN1Y2MpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sU3VjYyIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFN1Y2N9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sU3VjY319IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaXRlbXM9IltbX3N1Y2Nlc3NvcnMuY29udHJvbF1dIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaGFzRGlzcGxheWFibGVOb2RlU3RhdHN9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIG5vZGUtc3RhdHMiPgogICAgICAgICAgICAgIE5vZGUgU3RhdHMKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZSI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy50b3RhbEJ5dGVzfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPk1lbW9yeTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXNdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2dldFRvdGFsTWljcm9zKF9ub2RlU3RhdHMpfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPkNvbXB1dGUgVGltZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWVdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy5vdXRwdXRTaXplfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPlRlbnNvciBPdXRwdXQgU2l6ZXM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM9Int7X25vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzfX0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIFtbaXRlbV1dIDxiciAvPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHByZWRlY2Vzc29ycyI+CiAgICAgICAgICAgICAgVXNhZ2VzIG9mIHRoZSBGdW5jdGlvbiAoPHNwYW4+W1tfZnVuY3Rpb25Vc2FnZXMubGVuZ3RoXV08L3NwYW4+KQogICAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICAgIGlkPSJmdW5jdGlvblVzYWdlc0xpc3QiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tfZnVuY3Rpb25Vc2FnZXNdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW1dXSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0iZnVuY3Rpb25Vc2FnZXMiCiAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc0xpYnJhcnlGdW5jdGlvbihfbm9kZSldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIKICAgICAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlSW5jbHVkZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3Bhbj5bW19hdXhCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2lzSW5TZXJpZXMoX25vZGUpfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtaW5jbHVkZS1ncm91cCI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICBjbGFzcz0idG9nZ2xlLWluY2x1ZGUiCiAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUdyb3VwIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2dyb3VwQnV0dG9uVGV4dF1dPC9zcGFuPgogICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2lyb24tY29sbGFwc2U+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxkbi5wcm90b3R5cGUsImdyYXBoTm9kZU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxkbi5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGUoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHMoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGVTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxkbi5wcm90b3R5cGUsIm5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZG4ucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkbi5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sUHJlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGRuLnByb3RvdHlwZSwiX29wZW5lZENvbnRyb2xTdWNjIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiX2F1eEJ1dHRvblRleHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZG4ucHJvdG90eXBlLCJfZ3JvdXBCdXR0b25UZXh0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sZG4ucHJvdG90eXBlLCJfdGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtSdCgiX25vZGVTdGF0cyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZSIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9hdHRyaWJ1dGVzIixudWxsKTtFKFtSdCgiX25vZGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9kZXZpY2UiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfc3VjY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9wcmVkZWNlc3NvcnMiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9mdW5jdGlvblVzYWdlcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9zdWJub2RlcyIsbnVsbCk7RShbUnQoIl9wcmVkZWNlc3NvcnMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl90b3RhbFByZWRlY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9zdWNjZXNzb3JzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfdG90YWxTdWNjZXNzb3JzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRuLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7ZG49RShbeXQoInRmLW5vZGUtaW5mbyIpXSxkbik7dmFyIHNzPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtbGlzdC1pdGVtLWNsaWNrIix0aGlzLl9ub2RlTGlzdEl0ZW1DbGlja2VkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1saXN0LWl0ZW0tbW91c2VvdmVyIix0aGlzLl9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCIsdGhpcy5fbm9kZUxpc3RJdGVtTW91c2VvdXQuYmluZCh0aGlzKSl9X25vZGVMaXN0SXRlbUNsaWNrZWQodCl7dGhpcy5zZWxlY3RlZE5vZGU9dC5kZXRhaWwubm9kZU5hbWV9X25vZGVMaXN0SXRlbU1vdXNlb3Zlcih0KXt0aGlzLmhpZ2hsaWdodGVkTm9kZT10LmRldGFpbC5ub2RlTmFtZX1fbm9kZUxpc3RJdGVtTW91c2VvdXQoKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1udWxsfV9oZWFsdGhQaWxsc0F2YWlsYWJsZSh0LHIpe3JldHVybiB0JiZyJiZPYmplY3Qua2V5cyhyKS5sZW5ndGg+MH1fZXF1YWxzKHQscil7cmV0dXJuIHQ9PT1yfX07c3MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNjUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7c2VsZWN0ZWROb2RlfX0iPgogICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0iY2FyZCI+CiAgICAgICAgPHRmLW5vZGUtaW5mbwogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZmxhdC1ncmFwaD0iW1tncmFwaF1dIgogICAgICAgICAgZ3JhcGgtbm9kZS1uYW1lPSJbW3NlbGVjdGVkTm9kZV1dIgogICAgICAgICAgbm9kZS1pbmNsdWRlPSJbW3NlbGVjdGVkTm9kZUluY2x1ZGVdXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pbmZvPgogICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdvcF9jb21wYXRpYmlsaXR5JyldXSI+CiAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtY2FyZAogICAgICAgIGdyYXBoLWhpZXJhcmNoeT0iW1tncmFwaEhpZXJhcmNoeV1dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgIG5vZGUtdGl0bGU9IltbY29tcGF0Tm9kZVRpdGxlXV0iCiAgICAgID4KICAgICAgPC90Zi1ncmFwaC1vcC1jb21wYXQtY2FyZD4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUKICAgICAgaXM9ImRvbS1pZiIKICAgICAgaWY9IltbX2hlYWx0aFBpbGxzQXZhaWxhYmxlKGRlYnVnZ2VyRGF0YUVuYWJsZWQsIG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMpXV0iCiAgICA+CiAgICAgIDx0Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQKICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIgogICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IgogICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgYXJlLWhlYWx0aC1waWxscy1sb2FkaW5nPSJbW2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgIHNwZWNpZmljLWhlYWx0aC1waWxsLXN0ZXA9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICA+CiAgICAgIDwvdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxzcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sc3MucHJvdG90eXBlLCJncmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHNzLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHNzLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sc3MucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxzcy5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sc3MucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxzcy5wcm90b3R5cGUsInNlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzcy5wcm90b3R5cGUsImRlYnVnZ2VyRGF0YUVuYWJsZWQiLHZvaWQgMCk7c3M9RShbeXQoInRmLWdyYXBoLWluZm8iKV0sc3MpO3ZhciBpdXI9e01BWF9OT0RFX0NPVU5UOjFlNCxNQVhfRURHRV9DT1VOVDoxZTR9LHRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ9ITEsdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwPTAsdGhpcy5jb21wYXROb2RlVGl0bGU9IlRQVSBDb21wYXRpYmlsaXR5In1maXQoKXt0aGlzLiQuZ3JhcGguZml0KCl9ZG93bmxvYWRBc0ltYWdlKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9eWllbGQgdGhpcy4kLmdyYXBoLmdldEltYWdlQmxvYigpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO24uaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKHIpLG4uZG93bmxvYWQ9dCxuLmNsaWNrKCksVVJMLnJldm9rZU9iamVjdFVSTChuLmhyZWYpfSl9X2lzTm90Q29tcGxldGUodCl7cmV0dXJuIHQudmFsdWU8MTAwfV9nZXRDb250YWluZXJDbGFzcyh0KXt2YXIgcj0iY29udGFpbmVyIjtyZXR1cm4gdC5lcnJvciYmKHIrPSIgZXJyb3IiKSx0aGlzLl9pc05vdENvbXBsZXRlKHQpJiYocis9IiBsb2FkaW5nIikscn1fb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZUV4dHJhY3QodC5kZXRhaWwubmFtZSl9X29uTm9kZVNlcmllc0dyb3VwVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQuZGV0YWlsLm5hbWUpfV91cGRhdGVOb2RlSW5jbHVkZSgpe2xldCB0PXRoaXMucmVuZGVySGllcmFyY2h5P3RoaXMucmVuZGVySGllcmFyY2h5LmdldE5vZGVCeU5hbWUodGhpcy5zZWxlY3RlZE5vZGUpOm51bGw7dGhpcy5fc2VsZWN0ZWROb2RlSW5jbHVkZT10P3QuaW5jbHVkZTp1ci5VTlNQRUNJRklFRH1fc2xpbUdyYXBoQ2hhbmdlZCgpe2lmKCF0aGlzLmdyYXBoKXJldHVybjtsZXR7TUFYX05PREVfQ09VTlQ6dCxNQVhfRURHRV9DT1VOVDpyfT1pdXI7T2JqZWN0LmtleXModGhpcy5ncmFwaC5ub2RlcykubGVuZ3RoPnQmJnRoaXMuZ3JhcGguZWRnZXMubGVuZ3RoPnImJnRoaXMuY29sb3JCeT09PUduLlNUUlVDVFVSRSYmKHRoaXMuY29sb3JCeT1Hbi5OT05FKX1fZW5zdXJlVGVtcGxhdGVzKCl7IXRoaXMuZ3JhcGhIaWVyYXJjaHl8fHRoaXMuY29sb3JCeSE9PUduLlNUUlVDVFVSRXx8dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl8fHRoaXMuZ3JhcGhIaWVyYXJjaHkudXBkYXRlVGVtcGxhdGVzKCl9fTt0bi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAvZGVlcC8gLmNsb3NlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxlZnQ6IDE1cHg7CiAgICAgICAgYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nIHsKICAgICAgICBjdXJzb3I6IHByb2dyZXNzOwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nLmVycm9yIHsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmZvIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDVweDsKICAgICAgICB0b3A6IDVweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzODBweDsKICAgICAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgI21haW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLW1zZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc05vdENvbXBsZXRlKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRhaW5lckNsYXNzKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0ibWFpbiI+CiAgICAgICAgPHRmLWdyYXBoCiAgICAgICAgICBpZD0iZ3JhcGgiCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9Int7Z3JhcGhIaWVyYXJjaHl9fSIKICAgICAgICAgIGJhc2ljLWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0ie3tyZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJbW2RldmljZXNGb3JTdGF0c11dIgogICAgICAgICAgc3RhdHM9Iltbc3RhdHNdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBoaWdobGlnaHRlZC1ub2RlPSJ7e19oaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tjb2xvckJ5UGFyYW1zfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3twcm9ncmVzc319IgogICAgICAgICAgZWRnZS1sYWJlbC1mdW5jdGlvbj0iW1tlZGdlTGFiZWxGdW5jdGlvbl1dIgogICAgICAgICAgZWRnZS13aWR0aC1mdW5jdGlvbj0iW1tlZGdlV2lkdGhGdW5jdGlvbl1dIgogICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1toZWFsdGhQaWxsU3RlcEluZGV4XV0iCiAgICAgICAgICBoYW5kbGUtbm9kZS1zZWxlY3RlZD0iW1toYW5kbGVOb2RlU2VsZWN0ZWRdXSIKICAgICAgICAgIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIgogICAgICAgICAgdHJhY2UtaW5wdXRzPSJbW3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICBhdXRvLWV4dHJhY3Qtbm9kZXM9IltbYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgID48L3RmLWdyYXBoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iaW5mbyI+CiAgICAgICAgPHRmLWdyYXBoLWluZm8KICAgICAgICAgIGlkPSJncmFwaC1pbmZvIgogICAgICAgICAgdGl0bGU9InNlbGVjdGVkIgogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZ3JhcGg9IltbZ3JhcGhdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBzZWxlY3RlZC1ub2RlLWluY2x1ZGU9Int7X3NlbGVjdGVkTm9kZUluY2x1ZGV9fSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7X2hpZ2hsaWdodGVkTm9kZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tkZWJ1Z2dlckRhdGFFbmFibGVkXV0iCiAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tkZWJ1Z2dlck51bWVyaWNBbGVydHNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgIGNvbXBhdC1ub2RlLXRpdGxlPSJbW2NvbXBhdE5vZGVUaXRsZV1dIgogICAgICAgICAgb24tbm9kZS10b2dnbGUtaW5jbHVzaW9uPSJfb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCIKICAgICAgICAgIG9uLW5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwPSJfb25Ob2RlU2VyaWVzR3JvdXBUb2dnbGVkIgogICAgICAgID48L3RmLWdyYXBoLWluZm8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixvcyldLHRuLnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsWHUpXSx0bi5wcm90b3R5cGUsImdyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHRuLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx0bi5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJkZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhcmVIZWFsdGhQaWxsc0xvYWRpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx0bi5wcm90b3R5cGUsImRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx0bi5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsImVkZ2VXaWR0aEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHRuLnByb3RvdHlwZSwiX3NlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdG4ucHJvdG90eXBlLCJfaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGFuZGxlTm9kZVNlbGVjdGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiZWRnZUxhYmVsRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQnQoInNlbGVjdGVkTm9kZSIsInJlbmRlckhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfdXBkYXRlTm9kZUluY2x1ZGUiLG51bGwpO0UoW0J0KCJncmFwaCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfc2xpbUdyYXBoQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yQnkiLCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfZW5zdXJlVGVtcGxhdGVzIixudWxsKTt0bj1FKFt5dCgidGYtZ3JhcGgtYm9hcmQiKV0sdG4pO3ZhciBjMz1FZShPZSgpLDEpO3ZhciBKdT1jbGFzc3tpc05vdFRwdU9wKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJjcHU6IikhPS0xfHx0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJncHU6IikhPS0xPyEwOnQudG9Mb3dlckNhc2UoKS5zZWFyY2goInRwdSIpPT0tMX1vcFZhbGlkKHQpe3JldHVybiB0Lm5hbWUuc2VhcmNoKFNhKT09MHx8IXQub3B8fHQuZGV2aWNlJiZ0aGlzLmlzTm90VHB1T3AodC5kZXZpY2UpfHx0LmRldmljZSYmdC5kZXZpY2Uuc2VhcmNoKCJUUFVfU1lTVEVNIikhPS0xPyEwOmMzLmluY2x1ZGVzKEp1LldISVRFTElTVCx0Lm9wKX19O0p1LldISVRFTElTVD1bIkFicyIsIkFjb3MiLCJBY29zaCIsIkFkZCIsIkFkZE4iLCJBZGRWMiIsIkFkanVzdENvbnRyYXN0djIiLCJBZGp1c3RIdWUiLCJBZGp1c3RTYXR1cmF0aW9uIiwiQWxsIiwiQWxsVG9BbGwiLCJBbmdsZSIsIkFueSIsIkFwcHJveGltYXRlRXF1YWwiLCJBcmdNYXgiLCJBcmdNaW4iLCJBc2luIiwiQXNpbmgiLCJBc3NlcnQiLCJBc3NpZ25BZGRWYXJpYWJsZU9wIiwiQXNzaWduU3ViVmFyaWFibGVPcCIsIkFzc2lnblZhcmlhYmxlT3AiLCJBdGFuIiwiQXRhbjIiLCJBdGFuaCIsIkF2Z1Bvb2wiLCJBdmdQb29sM0QiLCJBdmdQb29sM0RHcmFkIiwiQXZnUG9vbEdyYWQiLCJCYXRjaE1hdE11bCIsIkJhdGNoTWF0TXVsVjIiLCJCYXRjaFRvU3BhY2UiLCJCYXRjaFRvU3BhY2VORCIsIkJlc3NlbEkwZSIsIkJlc3NlbEkxZSIsIkJldGFpbmMiLCJCaWFzQWRkIiwiQmlhc0FkZEdyYWQiLCJCaWFzQWRkVjEiLCJCaXRjYXN0IiwiQml0d2lzZUFuZCIsIkJpdHdpc2VPciIsIkJpdHdpc2VYb3IiLCJCcm9hZGNhc3RBcmdzIiwiQnJvYWRjYXN0R3JhZGllbnRBcmdzIiwiQnJvYWRjYXN0VG8iLCJCdWNrZXRpemUiLCJDYXNlIiwiQ2FzdCIsIkNlaWwiLCJDaGVja051bWVyaWNzIiwiQ2hvbGVza3kiLCJDbGlwQnlWYWx1ZSIsIkNvbGxlY3RpdmVQZXJtdXRlIiwiQ29sbGVjdGl2ZVJlZHVjZVYyIiwiQ29tcGxleCIsIkNvbXBsZXhBYnMiLCJDb25jYXQiLCJDb25jYXRPZmZzZXQiLCJDb25jYXRWMiIsIkNvbmoiLCJDb25qdWdhdGVUcmFuc3Bvc2UiLCJDb25zdCIsIkNvbnRyb2xUcmlnZ2VyIiwiQ29udjJEIiwiQ29udjJEQmFja3Byb3BGaWx0ZXIiLCJDb252MkRCYWNrcHJvcElucHV0IiwiQ29udjNEIiwiQ29udjNEQmFja3Byb3BGaWx0ZXJWMiIsIkNvbnYzREJhY2twcm9wSW5wdXRWMiIsIkNvcyIsIkNvc2giLCJDcm9zcyIsIkNyb3NzUmVwbGljYVN1bSIsIkN1bXByb2QiLCJDdW1zdW0iLCJEYXRhRm9ybWF0RGltTWFwIiwiRGF0YUZvcm1hdFZlY1Blcm11dGUiLCJEZXB0aFRvU3BhY2UiLCJEZXB0aHdpc2VDb252MmROYXRpdmUiLCJEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlciIsIkRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQiLCJEZXF1YW50aXplIiwiRGV2aWNlSW5kZXgiLCJEaWFnIiwiRGlhZ1BhcnQiLCJEaWdhbW1hIiwiRGl2IiwiRGl2Tm9OYW4iLCJEeW5hbWljU3RpdGNoIiwiRWluc3VtIiwiRWx1IiwiRWx1R3JhZCIsIkVtcHR5IiwiRW1wdHlUZW5zb3JMaXN0IiwiRW5zdXJlU2hhcGUiLCJFcXVhbCIsIkVyZiIsIkVyZmMiLCJFcmZpbnYiLCJFeHAiLCJFeHBhbmREaW1zIiwiRXhwbTEiLCJFeHRyYWN0SW1hZ2VQYXRjaGVzIiwiRkZUIiwiRkZUMkQiLCJGRlQzRCIsIkZha2VQYXJhbSIsIkZha2VRdWFudFdpdGhNaW5NYXhBcmdzIiwiRmFrZVF1YW50V2l0aE1pbk1heEFyZ3NHcmFkaWVudCIsIkZha2VRdWFudFdpdGhNaW5NYXhWYXJzIiwiRmFrZVF1YW50V2l0aE1pbk1heFZhcnNHcmFkaWVudCIsIkZpbGwiLCJGbG9vciIsIkZsb29yRGl2IiwiRmxvb3JNb2QiLCJGdXNlZEJhdGNoTm9ybSIsIkZ1c2VkQmF0Y2hOb3JtR3JhZCIsIkZ1c2VkQmF0Y2hOb3JtR3JhZFYyIiwiRnVzZWRCYXRjaE5vcm1HcmFkVjMiLCJGdXNlZEJhdGNoTm9ybVYyIiwiRnVzZWRCYXRjaE5vcm1WMyIsIkdhdGhlciIsIkdhdGhlck5kIiwiR2F0aGVyVjIiLCJHZXRJdGVtIiwiR3JlYXRlciIsIkdyZWF0ZXJFcXVhbCIsIkhTVlRvUkdCIiwiSUZGVCIsIklGRlQyRCIsIklGRlQzRCIsIklSRkZUIiwiSVJGRlQyRCIsIklSRkZUM0QiLCJJZGVudGl0eSIsIklkZW50aXR5TiIsIklmIiwiSWdhbW1hIiwiSWdhbW1hR3JhZEEiLCJJZ2FtbWFjIiwiSW1hZyIsIkluVG9wS1YyIiwiSW5mZWVkRGVxdWV1ZSIsIkluZmVlZERlcXVldWVUdXBsZSIsIklucGxhY2VBZGQiLCJJbnBsYWNlVXBkYXRlIiwiSW52IiwiSW52ZXJ0IiwiSW52ZXJ0UGVybXV0YXRpb24iLCJJc0Zpbml0ZSIsIklzSW5mIiwiSXNOYW4iLCJLdGhPcmRlclN0YXRpc3RpYyIsIkwyTG9zcyIsIkxSTiIsIkxSTkdyYWQiLCJMZWFreVJlbHUiLCJMZWFreVJlbHVHcmFkIiwiTGVmdFNoaWZ0IiwiTGVzcyIsIkxlc3NFcXVhbCIsIkxnYW1tYSIsIkxpblNwYWNlIiwiTGlzdERpZmYiLCJMb2ciLCJMb2cxcCIsIkxvZ1NvZnRtYXgiLCJMb2dpY2FsQW5kIiwiTG9naWNhbE5vdCIsIkxvZ2ljYWxPciIsIkxvd2VyQm91bmQiLCJNYWtlVW5pcXVlIiwiTWF0TXVsIiwiTWF0cml4QmFuZFBhcnQiLCJNYXRyaXhEaWFnIiwiTWF0cml4RGlhZ1BhcnQiLCJNYXRyaXhEaWFnUGFydFYyIiwiTWF0cml4RGlhZ1BhcnRWMyIsIk1hdHJpeERpYWdWMiIsIk1hdHJpeERpYWdWMyIsIk1hdHJpeEludmVyc2UiLCJNYXRyaXhTZXREaWFnIiwiTWF0cml4U2V0RGlhZ1YyIiwiTWF0cml4U2V0RGlhZ1YzIiwiTWF0cml4U29sdmUiLCJNYXRyaXhUcmlhbmd1bGFyU29sdmUiLCJNYXgiLCJNYXhQb29sIiwiTWF4UG9vbDNEIiwiTWF4UG9vbDNER3JhZCIsIk1heFBvb2wzREdyYWRHcmFkIiwiTWF4UG9vbEdyYWQiLCJNYXhQb29sR3JhZEdyYWQiLCJNYXhQb29sR3JhZEdyYWRWMiIsIk1heFBvb2xHcmFkVjIiLCJNYXhQb29sVjIiLCJNYXhpbXVtIiwiTWVhbiIsIk1pbiIsIk1pbmltdW0iLCJNaXJyb3JQYWQiLCJNaXJyb3JQYWRHcmFkIiwiTW9kIiwiTXVsIiwiTXVsTm9OYW4iLCJNdWx0aW5vbWlhbCIsIk5kdHJpIiwiTmVnIiwiTmV4dEFmdGVyIiwiTm9PcCIsIk5vbk1heFN1cHByZXNzaW9uVjQiLCJOb3RFcXVhbCIsIk9uZUhvdCIsIk9uZXNMaWtlIiwiT3V0ZmVlZEVucXVldWUiLCJPdXRmZWVkRW5xdWV1ZVR1cGxlIiwiUGFjayIsIlBhZCIsIlBhZFYyIiwiUGFyYWxsZWxEeW5hbWljU3RpdGNoIiwiUGFyYW1ldGVyaXplZFRydW5jYXRlZE5vcm1hbCIsIlBhcnRpdGlvbmVkQ2FsbCIsIlBsYWNlaG9sZGVyV2l0aERlZmF1bHQiLCJQb2x5Z2FtbWEiLCJQb3B1bGF0aW9uQ291bnQiLCJQb3ciLCJQcmV2ZW50R3JhZGllbnQiLCJQcm9kIiwiUXIiLCJRdWFudGl6ZUFuZERlcXVhbnRpemVWMiIsIlF1YW50aXplQW5kRGVxdWFudGl6ZVYzIiwiUkZGVCIsIlJGRlQyRCIsIlJGRlQzRCIsIlJHQlRvSFNWIiwiUmFuZG9tR2FtbWFHcmFkIiwiUmFuZG9tU2h1ZmZsZSIsIlJhbmRvbVN0YW5kYXJkTm9ybWFsIiwiUmFuZG9tVW5pZm9ybSIsIlJhbmRvbVVuaWZvcm1JbnQiLCJSYW5nZSIsIlJhbmsiLCJSZWFkVmFyaWFibGVPcCIsIlJlYWwiLCJSZWFsRGl2IiwiUmVjaXByb2NhbCIsIlJlY2lwcm9jYWxHcmFkIiwiUmVsdSIsIlJlbHU2IiwiUmVsdTZHcmFkIiwiUmVsdUdyYWQiLCJSZXNoYXBlIiwiUmVzaXplQmlsaW5lYXIiLCJSZXNpemVCaWxpbmVhckdyYWQiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3IiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkIiwiUmVzb3VyY2VBcHBseUFkYU1heCIsIlJlc291cmNlQXBwbHlBZGFkZWx0YSIsIlJlc291cmNlQXBwbHlBZGFncmFkIiwiUmVzb3VyY2VBcHBseUFkYWdyYWREQSIsIlJlc291cmNlQXBwbHlBZGFncmFkVjIiLCJSZXNvdXJjZUFwcGx5QWRhbSIsIlJlc291cmNlQXBwbHlBZGRTaWduIiwiUmVzb3VyY2VBcHBseUNlbnRlcmVkUk1TUHJvcCIsIlJlc291cmNlQXBwbHlGdHJsIiwiUmVzb3VyY2VBcHBseUZ0cmxWMiIsIlJlc291cmNlQXBwbHlHcmFkaWVudERlc2NlbnQiLCJSZXNvdXJjZUFwcGx5S2VyYXNNb21lbnR1bSIsIlJlc291cmNlQXBwbHlNb21lbnR1bSIsIlJlc291cmNlQXBwbHlQb3dlclNpZ24iLCJSZXNvdXJjZUFwcGx5UHJveGltYWxBZGFncmFkIiwiUmVzb3VyY2VBcHBseVByb3hpbWFsR3JhZGllbnREZXNjZW50IiwiUmVzb3VyY2VBcHBseVJNU1Byb3AiLCJSZXNvdXJjZUdhdGhlciIsIlJlc291cmNlU2NhdHRlckFkZCIsIlJlc291cmNlU2NhdHRlckRpdiIsIlJlc291cmNlU2NhdHRlck1heCIsIlJlc291cmNlU2NhdHRlck1pbiIsIlJlc291cmNlU2NhdHRlck11bCIsIlJlc291cmNlU2NhdHRlck5kQWRkIiwiUmVzb3VyY2VTY2F0dGVyTmRTdWIiLCJSZXNvdXJjZVNjYXR0ZXJOZFVwZGF0ZSIsIlJlc291cmNlU2NhdHRlclN1YiIsIlJlc291cmNlU2NhdHRlclVwZGF0ZSIsIlJlc291cmNlU3RyaWRlZFNsaWNlQXNzaWduIiwiUmV2ZXJzZSIsIlJldmVyc2VTZXF1ZW5jZSIsIlJldmVyc2VWMiIsIlJpZ2h0U2hpZnQiLCJSaW50IiwiUm5nUmVhZEFuZFNraXAiLCJSbmdTa2lwIiwiUm9sbCIsIlJvdW5kIiwiUnNxcnQiLCJSc3FydEdyYWQiLCJTY2F0dGVyTmQiLCJTZWxlY3QiLCJTZWxlY3RWMiIsIlNlbGZBZGpvaW50RWlnVjIiLCJTZWx1IiwiU2VsdUdyYWQiLCJTaGFwZSIsIlNoYXBlTiIsIlNpZ21vaWQiLCJTaWdtb2lkR3JhZCIsIlNpZ24iLCJTaW4iLCJTaW5oIiwiU2l6ZSIsIlNsaWNlIiwiU25hcHNob3QiLCJTb2Z0bWF4IiwiU29mdG1heENyb3NzRW50cm9weVdpdGhMb2dpdHMiLCJTb2Z0cGx1cyIsIlNvZnRwbHVzR3JhZCIsIlNvZnRzaWduIiwiU29mdHNpZ25HcmFkIiwiU3BhY2VUb0JhdGNoIiwiU3BhY2VUb0JhdGNoTkQiLCJTcGFjZVRvRGVwdGgiLCJTcGFyc2VNYXRNdWwiLCJTcGFyc2VTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyIsIlNwYXJzZVRvRGVuc2UiLCJTcGxpdCIsIlNwbGl0ViIsIlNxcnQiLCJTcXJ0R3JhZCIsIlNxdWFyZSIsIlNxdWFyZWREaWZmZXJlbmNlIiwiU3F1ZWV6ZSIsIlN0YWNrQ2xvc2VWMiIsIlN0YWNrUG9wVjIiLCJTdGFja1B1c2hWMiIsIlN0YWNrVjIiLCJTdGF0ZWZ1bFBhcnRpdGlvbmVkQ2FsbCIsIlN0YXRlZnVsU3RhbmRhcmROb3JtYWxWMiIsIlN0YXRlZnVsVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVmdWxVbmlmb3JtIiwiU3RhdGVmdWxVbmlmb3JtRnVsbEludCIsIlN0YXRlZnVsVW5pZm9ybUludCIsIlN0YXRlbGVzc0Nhc2UiLCJTdGF0ZWxlc3NJZiIsIlN0YXRlbGVzc011bHRpbm9taWFsIiwiU3RhdGVsZXNzUmFuZG9tR2V0QWxnIiwiU3RhdGVsZXNzUmFuZG9tR2V0S2V5Q291bnRlciIsIlN0YXRlbGVzc1JhbmRvbUdldEtleUNvdW50ZXJBbGciLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWwiLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWxWMiIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm0iLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtRnVsbEludCIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm1GdWxsSW50VjIiLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtSW50IiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybUludFYyIiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybVYyIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsVjIiLCJTdGF0ZWxlc3NXaGlsZSIsIlN0b3BHcmFkaWVudCIsIlN0cmlkZWRTbGljZSIsIlN0cmlkZWRTbGljZUdyYWQiLCJTdWIiLCJTdW0iLCJTdmQiLCJTeW1ib2xpY0dyYWRpZW50IiwiVFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJUYW4iLCJUYW5oIiwiVGFuaEdyYWQiLCJUZW5zb3JBcnJheUNsb3NlVjMiLCJUZW5zb3JBcnJheUNvbmNhdFYzIiwiVGVuc29yQXJyYXlHYXRoZXJWMyIsIlRlbnNvckFycmF5R3JhZFYzIiwiVGVuc29yQXJyYXlSZWFkVjMiLCJUZW5zb3JBcnJheVNjYXR0ZXJWMyIsIlRlbnNvckFycmF5U2l6ZVYzIiwiVGVuc29yQXJyYXlTcGxpdFYzIiwiVGVuc29yQXJyYXlWMyIsIlRlbnNvckFycmF5V3JpdGVWMyIsIlRlbnNvckxpc3RDb25jYXRWMiIsIlRlbnNvckxpc3RFbGVtZW50U2hhcGUiLCJUZW5zb3JMaXN0RnJvbVRlbnNvciIsIlRlbnNvckxpc3RHYXRoZXIiLCJUZW5zb3JMaXN0R2V0SXRlbSIsIlRlbnNvckxpc3RMZW5ndGgiLCJUZW5zb3JMaXN0UG9wQmFjayIsIlRlbnNvckxpc3RQdXNoQmFjayIsIlRlbnNvckxpc3RSZXNlcnZlIiwiVGVuc29yTGlzdFNldEl0ZW0iLCJUZW5zb3JMaXN0U3BsaXQiLCJUZW5zb3JMaXN0U3RhY2siLCJUZW5zb3JTY2F0dGVyQWRkIiwiVGVuc29yU2NhdHRlck1heCIsIlRlbnNvclNjYXR0ZXJNaW4iLCJUZW5zb3JTY2F0dGVyU3ViIiwiVGVuc29yU2NhdHRlclVwZGF0ZSIsIlRlbnNvclN0cmlkZWRTbGljZVVwZGF0ZSIsIlRpbGUiLCJUb3BLVW5pcXVlIiwiVG9wS1YyIiwiVG9wS1dpdGhVbmlxdWUiLCJUcmFuc3Bvc2UiLCJUcmlkaWFnb25hbFNvbHZlIiwiVHJ1bmNhdGVEaXYiLCJUcnVuY2F0ZU1vZCIsIlRydW5jYXRlZE5vcm1hbCIsIlVuaXF1ZSIsIlVucGFjayIsIlVuc29ydGVkU2VnbWVudE1heCIsIlVuc29ydGVkU2VnbWVudE1pbiIsIlVuc29ydGVkU2VnbWVudFByb2QiLCJVbnNvcnRlZFNlZ21lbnRTdW0iLCJVcHBlckJvdW5kIiwiVmFySXNJbml0aWFsaXplZE9wIiwiVmFyaWFibGVTaGFwZSIsIldoZXJlIiwiV2hpbGUiLCJYZGl2eSIsIlhsYUJyb2FkY2FzdEhlbHBlciIsIlhsYUNvbnYiLCJYbGFDb252VjIiLCJYbGFEZXF1YW50aXplIiwiWGxhRG90IiwiWGxhRG90VjIiLCJYbGFEeW5hbWljU2xpY2UiLCJYbGFEeW5hbWljVXBkYXRlU2xpY2UiLCJYbGFFaW5zdW0iLCJYbGFHYXRoZXIiLCJYbGFIb3N0Q29tcHV0ZSIsIlhsYUlmIiwiWGxhS2V5VmFsdWVTb3J0IiwiWGxhUGFkIiwiWGxhUmVjdiIsIlhsYVJlY3ZGcm9tSG9zdCIsIlhsYVJlZHVjZSIsIlhsYVJlZHVjZVdpbmRvdyIsIlhsYVJlcGxpY2FJZCIsIlhsYVNjYXR0ZXIiLCJYbGFTZWxlY3RBbmRTY2F0dGVyIiwiWGxhU2VsZkFkam9pbnRFaWciLCJYbGFTZW5kIiwiWGxhU2VuZFRvSG9zdCIsIlhsYVNldEJvdW5kIiwiWGxhU2V0RHluYW1pY0RpbWVuc2lvblNpemUiLCJYbGFTaGFyZGluZyIsIlhsYVNvcnQiLCJYbGFTcG1kRnVsbFRvU2hhcmRTaGFwZSIsIlhsYVNwbWRTaGFyZFRvRnVsbFNoYXBlIiwiWGxhU3ZkIiwiWGxhVmFyaWFkaWNSZWR1Y2UiLCJYbGFWYXJpYWRpY1NvcnQiLCJYbGFXaGlsZSIsIlhsb2cxcHkiLCJYbG9neSIsIlplcm9zTGlrZSIsIlpldGEiLCJFbnRlciIsIkV4aXQiLCJMb29wQ29uZCIsIk1lcmdlIiwiTmV4dEl0ZXJhdGlvbiIsIlN3aXRjaCIsIl9BcmciLCJfQXJyYXlUb0xpc3QiLCJfRnVzZWRCYXRjaE5vcm1FeCIsIl9MaXN0VG9BcnJheSIsIl9QYXJhbGxlbENvbmNhdFVwZGF0ZSIsIl9SZWN2VFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJfUmVjdlRQVUVtYmVkZGluZ0RlZHVwbGljYXRpb25EYXRhIiwiX1JldHZhbCIsIl9TZW5kVFBVRW1iZWRkaW5nR3JhZGllbnRzIiwiX1RQVUNvbXBpbGUiLCJfVFBVRXhlY3V0ZSIsIl9VbmFyeU9wc0NvbXBvc2l0aW9uIiwiVFBVQ29tcGlsYXRpb25SZXN1bHQiLCJUUFVSZXBsaWNhdGVkSW5wdXQiLCJUUFVSZXBsaWNhdGVkT3V0cHV0IiwiVFBVUmVwbGljYXRlTWV0YWRhdGEiLCJNZXJnZVYyQ2hlY2twb2ludHMiLCJSZXN0b3JlVjIiLCJTYXZlVjIiLCJBYm9ydCIsIkFzc2VydCIsIkFzc2lnbiIsIlBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXJWMiIsIlNoYXJkZWRGaWxlbmFtZSIsIlN0cmluZ0pvaW4iLCJWYXJpYWJsZSIsIlZhcmlhYmxlVjIiLCJWYXJIYW5kbGVPcCIsIkF1ZGlvU3VtbWFyeSIsIkF1ZGlvU3VtbWFyeVYyIiwiRGVidWdOdW1lcmljU3VtbWFyeSIsIkhpc3RvZ3JhbVN1bW1hcnkiLCJJbWFnZVN1bW1hcnkiLCJNZXJnZVN1bW1hcnkiLCJTY2FsYXJTdW1tYXJ5IiwiU3RhdHNBZ2dyZWdhdG9yU3VtbWFyeSJdO2Z1bmN0aW9uIFlsZShlLHQpe2lmKHQ9PT1udWxsKXRocm93IG5ldyBFcnJvcigiQ29tcGF0aWJpbGl0eSBwcm92aWRlciByZXF1aXJlZCwgYnV0IGdvdDogIit0KTtjMy5lYWNoKGUubm9kZXMscj0+e3IuY29tcGF0aWJsZT10Lm9wVmFsaWQociksYzMuZWFjaChyLmluRW1iZWRkaW5ncyxuPT57bi5jb21wYXRpYmxlPXQub3BWYWxpZChuKX0pLGMzLmVhY2goci5vdXRFbWJlZGRpbmdzLG49PntuLmNvbXBhdGlibGU9dC5vcFZhbGlkKG4pfSl9KX12YXIgbVA9RWUoT2UoKSwxKTt2YXIgamxlPUVlKE9lKCksMSk7dmFyIElsPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yYXdSZWdleElucHV0PSIiLHRoaXMuX3ByZXZpb3VzUmVnZXhJbnB1dD0iIix0aGlzLl9zZWFyY2hUaW1lb3V0RGVsYXk9MTUwLHRoaXMuX21heFJlZ2V4UmVzdWx0cz00Mn1nZXQgX3JlZ2V4SW5wdXQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeSxyPXRoaXMuX3Jhd1JlZ2V4SW5wdXQ7cmV0dXJuIHIudHJpbSgpfV9yZWdleElucHV0Q2hhbmdlZCgpe3ZhciB0PXRoaXMuX3JlZ2V4SW5wdXQ7dGhpcy5fcmVxdWVzdFNlYXJjaCgpfV9jbGVhclNlYXJjaFJlc3VsdHMoKXt0aGlzLnNldCgiX3JlZ2V4TWF0Y2hlcyIsW10pfV9yZXF1ZXN0U2VhcmNoKCl7aWYoIXRoaXMuX3NlYXJjaFBlbmRpbmcpe2lmKHRoaXMuX3JlZ2V4SW5wdXQ9PT10aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQpe3RoaXMuX3NlYXJjaFBlbmRpbmc9ITE7cmV0dXJufXRoaXMuX3NlYXJjaFBlbmRpbmc9ITAsdGhpcy5fZXhlY3V0ZVNlYXJjaCgpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLl9zZWFyY2hQZW5kaW5nPSExLHRoaXMuX3JlcXVlc3RTZWFyY2goKX0sdGhpcy5fc2VhcmNoVGltZW91dERlbGF5KX19X2V4ZWN1dGVTZWFyY2goKXtpZih0aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQ9dGhpcy5fcmVnZXhJbnB1dCwhdGhpcy5fcmVnZXhJbnB1dCl7dGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCk7cmV0dXJufXRyeXt2YXIgdD1uZXcgUmVnRXhwKHRoaXMuX3JlZ2V4SW5wdXQpfWNhdGNoKGkpe3RoaXMuX2NsZWFyU2VhcmNoUmVzdWx0cygpO3JldHVybn1sZXQgcj1bXSxuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7amxlLmVhY2gobiwoaSxvKT0+e2lmKHIubGVuZ3RoPj10aGlzLl9tYXhSZWdleFJlc3VsdHMpcmV0dXJuITE7IXQudGVzdChvKXx8ci5wdXNoKG8pfSksdGhpcy5zZXQoIl9yZWdleE1hdGNoZXMiLHIpfV9tYXRjaENsaWNrZWQodCl7bGV0IHI9dC5tb2RlbC5pdGVtO3RoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLHIpLFBvKHthY3Rpb25JZDpqci5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRH0pfX07SWwudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNlYXJjaC1jb250YWluZXIiPgogICAgICA8cGFwZXItaW5wdXQKICAgICAgICBpZD0icnVucy1yZWdleCIKICAgICAgICBsYWJlbD0iU2VhcmNoIG5vZGVzIChyZWdleCkiCiAgICAgICAgdmFsdWU9Int7X3Jhd1JlZ2V4SW5wdXR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8ZGl2IGlkPSJzZWFyY2gtcmVzdWx0cy1hbmNob3IiPgogICAgICAgIDxkaXYgaWQ9InNlYXJjaC1yZXN1bHRzIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3JlZ2V4TWF0Y2hlc11dIj4KICAgICAgICAgICAgPGRpdiBpZD0ic2VhcmNoLW1hdGNoIiBvbi1jbGljaz0iX21hdGNoQ2xpY2tlZCI+W1tpdGVtXV08L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgICNzZWFyY2gtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgI3J1bnMtcmVnZXggewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjc2VhcmNoLXJlc3VsdHMtYW5jaG9yIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtcmVzdWx0cyB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAjc2VhcmNoLW1hdGNoIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlyZWN0aW9uOiBydGw7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtbWF0Y2g6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLW9yYW5nZS13ZWFrKTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJfcmF3UmVnZXhJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJbC5wcm90b3R5cGUsIl9wcmV2aW91c1JlZ2V4SW5wdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoVGltZW91dERlbGF5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoUGVuZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJbC5wcm90b3R5cGUsIl9tYXhSZWdleFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElsLnByb3RvdHlwZSwiX3JlZ2V4TWF0Y2hlcyIsdm9pZCAwKTtFKFtSdCgicmVuZGVySGllcmFyY2h5IiwiX3Jhd1JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJbC5wcm90b3R5cGUsIl9yZWdleElucHV0IixudWxsKTtFKFtCdCgiX3JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLElsLnByb3RvdHlwZSwiX3JlZ2V4SW5wdXRDaGFuZ2VkIixudWxsKTtJbD1FKFt5dCgidGYtZ3JhcGgtbm9kZS1zZWFyY2giKV0sSWwpO3ZhciBjY3Q9L2RldmljZTooW146XSs6WzAtOV0rKSQvLGxjdD1be3JlZ2V4OmNjdH1dLFhsZT1bXSxvdXI9bmV3IFNldChbR24uQ09NUFVURV9USU1FLEduLk1FTU9SWV0pLEluPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5Db2xvckJ5PUduLHRoaXMuc3RhdHM9bnVsbCx0aGlzLmRldmljZXNGb3JTdGF0cz1udWxsLHRoaXMuY29sb3JCeT1Hbi5TVFJVQ1RVUkUsdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9zZWxlY3RlZFJ1bkluZGV4PTAsdGhpcy50cmFjZUlucHV0cz0hMSx0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9ITAsdGhpcy5fc2VsZWN0ZWRUYWdJbmRleD0wLHRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPUZzLk9QX0dSQVBILHRoaXMuc2hvd1Nlc3Npb25SdW5zRHJvcGRvd249ITAsdGhpcy5zaG93VXBsb2FkQnV0dG9uPSEwLHRoaXMuX2xlZ2VuZE9wZW5lZD0hMCx0aGlzLl9kb3dubG9hZEZpbGVuYW1lPSJncmFwaC5wbmcifV9vbkdyYXBoVHlwZUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLkdSQVBIX1RZUEVfQ0hBTkdFRCxldmVudExhYmVsOnRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlfSl9X29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLk5PREVfQ09MT1JfTU9ERV9DSEFOR0VELGV2ZW50TGFiZWw6dGhpcy5jb2xvckJ5fSl9X29uVHJhY2VJbnB1dHNDaGFuZ2VkQnlVc2VyR2VzdHVyZSgpe1BvKHthY3Rpb25JZDpqci5UUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUR9KX1feGxhQ2x1c3RlcnNQcm92aWRlZCh0KXtyZXR1cm4gdCYmdC5oaWVyYXJjaHkmJnQuaGllcmFyY2h5LnhsYUNsdXN0ZXJzLmxlbmd0aD4wfV9zdGF0c0NoYW5nZWQodCl7aWYodCE9bnVsbCl7dmFyIHI9e30sbj1tUC5lYWNoKHQuZGV2X3N0YXRzLGZ1bmN0aW9uKGkpe3ZhciBvPW1QLnNvbWUobGN0LGZ1bmN0aW9uKHMpe3JldHVybiBzLnJlZ2V4LnRlc3QoaS5kZXZpY2UpfSksYT1tUC5zb21lKFhsZSxmdW5jdGlvbihzKXtyZXR1cm4gcy5yZWdleC50ZXN0KGkuZGV2aWNlKX0pO28mJiFhJiYocltpLmRldmljZV09ITApfSk7dGhpcy5zZXQoImRldmljZXNGb3JTdGF0cyIscil9fWdldCBfY3VycmVudERldmljZXMoKXt2YXIgdD10aGlzLmRldmljZXNGb3JTdGF0cztsZXQgcj10aGlzLnN0YXRzLG89KHI/ci5kZXZfc3RhdHM6W10pLm1hcChzPT5zLmRldmljZSkuZmlsdGVyKHM9PmxjdC5zb21lKGw9PmwucmVnZXgudGVzdChzKSkpLGE9Rmx0KG8pO2lmKGEubGVuZ3RoPT0xKXtsZXQgcz1hWzBdLm1hdGNoKGNjdCk7cyYmKGFbMF09c1sxXSl9cmV0dXJuIG8ubWFwKChzLGwpPT57bGV0IGM9bnVsbDtyZXR1cm4gWGxlLmZvckVhY2godT0+e3UucmVnZXgudGVzdChzKSYmKGM9dS5tc2cpfSkse2RldmljZTpzLHN1ZmZpeDphW2xdLHVzZWQ6dD09bnVsbD92b2lkIDA6dFtzXSxpZ25vcmVkTXNnOmN9fSl9X2RldmljZUNoZWNrYm94Q2xpY2tlZCh0KXtsZXQgcj10LnRhcmdldCxuPU9iamVjdC5hc3NpZ24oe30sdGhpcy5kZXZpY2VzRm9yU3RhdHMpLGk9ci52YWx1ZTtyLmNoZWNrZWQ/bltpXT0hMDpkZWxldGUgbltpXSx0aGlzLnNldCgiZGV2aWNlc0ZvclN0YXRzIixuKX1fbnVtVGFncyh0LHIpe3JldHVybiB0aGlzLl9nZXRUYWdzKHQscikubGVuZ3RofV9nZXRUYWdzKHQscil7cmV0dXJuIXR8fCF0W3JdP1tdOnRbcl0udGFnc31fZml0KCl7dGhpcy5maXJlKCJmaXQtdGFwIil9X2lzR3JhZGllbnRDb2xvcmluZyh0LHIpe3JldHVybiBvdXIuaGFzKHIpJiZ0IT1udWxsfV9lcXVhbHModCxyKXtyZXR1cm4gdD09PXJ9Z2V0IF9jdXJyZW50RGV2aWNlUGFyYW1zKCl7dmFyIHQ9dGhpcy5jb2xvckJ5UGFyYW1zO2xldCByPXQuZGV2aWNlLmZpbHRlcihvPT5sY3Quc29tZShhPT5hLnJlZ2V4LnRlc3Qoby5kZXZpY2UpKSksbj1GbHQoci5tYXAobz0+by5kZXZpY2UpKTtpZihuLmxlbmd0aD09MSl7dmFyIGk9blswXS5tYXRjaChjY3QpO2kmJihuWzBdPWlbMV0pfXJldHVybiByLm1hcCgobyxhKT0+KHtkZXZpY2U6blthXSxjb2xvcjpvLmNvbG9yfSkpfWdldCBfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXM7cmV0dXJuIHQueGxhX2NsdXN0ZXJ9Z2V0IF9jdXJyZW50R3JhZGllbnRQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXMscj10aGlzLmNvbG9yQnk7aWYoIXRoaXMuX2lzR3JhZGllbnRDb2xvcmluZyh0aGlzLnN0YXRzLHIpKXJldHVybiBudWxsO2xldCBuPXRbcl0saT1uLm1pblZhbHVlLG89bi5tYXhWYWx1ZTtyZXR1cm4gcj09PUduLk1FTU9SWT8oaT1OZChpLG5QKSxvPU5kKG8sblApKTpyPT09R24uQ09NUFVURV9USU1FJiYoaT1OZChpLGlQKSxvPU5kKG8saVApKSx7bWluVmFsdWU6aSxtYXhWYWx1ZTpvLHN0YXJ0Q29sb3I6bi5zdGFydENvbG9yLGVuZENvbG9yOm4uZW5kQ29sb3J9fWRvd25sb2FkKCl7dGhpcy5maXJlKCJkb3dubG9hZC1pbWFnZS1yZXF1ZXN0ZWQiLHRoaXMuX2Rvd25sb2FkRmlsZW5hbWUpfV91cGRhdGVGaWxlSW5wdXQodCl7dmFyIGE7bGV0IHI9KGE9dC50YXJnZXQuZmlsZXMpPT1udWxsP3ZvaWQgMDphWzBdO2lmKCFyKXJldHVybjtsZXQgbj1yLm5hbWUsaT1uLmxhc3RJbmRleE9mKCIuIik7aT49MCYmKG49bi5zdWJzdHJpbmcoMCxpKSk7bGV0IG89bi5sYXN0SW5kZXhPZigiLyIpO28+PTAmJihuPW4uc3Vic3RyaW5nKG8rMSkpLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUobiksdGhpcy5zZXQoInNlbGVjdGVkRmlsZSIsdCksUG8oe2FjdGlvbklkOmpyLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTX0pfV9kYXRhc2V0c0NoYW5nZWQodCxyKXt2YXIgbjtyIT1udWxsJiYodGhpcy5fc2VsZWN0ZWRSdW5JbmRleD0wKSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKChuPXRoaXMuZGF0YXNldHNbdGhpcy5fc2VsZWN0ZWRSdW5JbmRleF0pPT1udWxsP3ZvaWQgMDpuLm5hbWUpfV9jb21wdXRlU2VsZWN0aW9uKHQscixuLGkpe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dP251bGw6e3J1bjp0W3JdLm5hbWUsdGFnOnRbcl0udGFnc1tuXS50YWcsdHlwZTppfX1fc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQodCl7dmFyIHI7IXRoaXMuZGF0YXNldHN8fCh0aGlzLmNvbG9yQnk9R24uU1RSVUNUVVJFLHRoaXMuX3NlbGVjdGVkVGFnSW5kZXg9MCx0aGlzLl9zZWxlY3RlZEdyYXBoVHlwZT10aGlzLl9nZXREZWZhdWx0U2VsZWN0aW9uVHlwZSgpLHRoaXMudHJhY2VJbnB1dHM9ITEsdGhpcy5fc2V0RG93bmxvYWRGaWxlbmFtZSgocj10aGlzLmRhdGFzZXRzW3RdKT09bnVsbD92b2lkIDA6ci5uYW1lKSl9X3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkKCl7dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKX1fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKXtsZXR7ZGF0YXNldHM6dCxfc2VsZWN0ZWRSdW5JbmRleDpyLF9zZWxlY3RlZFRhZ0luZGV4Om59PXRoaXM7aWYoIXR8fCF0W3JdfHwhdFtyXS50YWdzW25dfHx0W3JdLnRhZ3Nbbl0ub3BHcmFwaClyZXR1cm4gRnMuT1BfR1JBUEg7bGV0IGk9dFtyXTtyZXR1cm4gaS50YWdzW25dLnByb2ZpbGU/RnMuUFJPRklMRTppLnRhZ3Nbbl0uY29uY2VwdHVhbEdyYXBoP0ZzLkNPTkNFUFRVQUxfR1JBUEg6RnMuT1BfR1JBUEh9X2dldEZpbGUoKXt0aGlzLiQkKCIjZmlsZSIpLmNsaWNrKCl9X3NldERvd25sb2FkRmlsZW5hbWUodCl7dGhpcy5fZG93bmxvYWRGaWxlbmFtZT0odHx8ImdyYXBoIikrIi5wbmcifV9zdGF0c05vdE51bGwodCl7cmV0dXJuIHQhPT1udWxsfV90b2dnbGVMZWdlbmRPcGVuKCl7dGhpcy5zZXQoIl9sZWdlbmRPcGVuZWQiLCF0aGlzLl9sZWdlbmRPcGVuZWQpfV9nZXRUb2dnbGVMZWdlbmRJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbW9yZSI6ImV4cGFuZC1sZXNzIn1fZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5vcEdyYXBofV9nZXRTZWxlY3Rpb25Qcm9maWxlRGlzYWJsZWQodCxyLG4pe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dfHwhdFtyXS50YWdzW25dLnByb2ZpbGV9X2dldFNlbGVjdGlvbkNvbmNlcHR1YWxHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5jb25jZXB0dWFsR3JhcGh9fTtJbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICM1NTU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWNvbG9yOiAjMDAwOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtbGVnZW5kLXRleHQtY29sb3I6ICMwMDA7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yOiAjNTU1OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZV8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZF8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3I6ICNmZmY7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy1sZWdlbmQtdGV4dC1jb2xvcjogI2YzZjNmMzsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3I6ICNlZWU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDogewogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIH0KICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTVweDsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDE1cHg7CiAgICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IGdyYXk7CiAgICAgICAgLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbltyYWlzZWRdLmtleWJvYXJkLWZvY3VzIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAucnVuLWRyb3Bkb3duIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjogewogICAgICAgICAgcGFkZGluZzogNXB4IDAgNXB4IDVweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRhYmxlIHsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOwogICAgICB9CgogICAgICB0YWJsZSB0ciB7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICB0YWJsZSB0ZCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyB7CiAgICAgICAgcGFkZGluZzogMCAyMHB4IDIwcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtaG9sZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciB7CiAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLWxlZ2VuZC10ZXh0LWNvbG9yKTsKICAgICAgICBmb250OiBpbmhlcml0OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciwKICAgICAgLmxlZ2VuZC1jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiA4cHggMjBweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sZWdlbmQtYnV0dG9uIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWxlZ2VuZC10ZXh0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICB9CiAgICAgIHN2Zy5pY29uLAogICAgICB0Zi1ncmFwaC1pY29uIHsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblZhbHVlcyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogMTY1cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblN0YXJ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQogICAgICAuZG9tYWluRW5kIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KICAgICAgLmNvbG9yQm94IHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLmltYWdlLWljb24gewogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgfQoKICAgICAgLmhlbHAtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuZ3JheSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogOHB4IDVweCA4cHggMDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3IpOwogICAgICB9CiAgICAgIC50aXRsZSBzbWFsbCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQogICAgICAuZGV2aWNlTGlzdCwKICAgICAgLnhsYUNsdXN0ZXJMaXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjZmlsZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQoKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgLmxhYmVsLAogICAgICAuY29sb3ItbGVnZW5kLXJvdyBzdmcsCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHRmLWdyYXBoLWljb24gewogICAgICAgIGZsZXg6IDAgMCA0MHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgfQoKICAgICAgLmRldmljZXMtY2hlY2tib3ggaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtaG9sZGVyIC5pY29uLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogMCAtNXB4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5idXR0b24tdGV4dCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICB9CgogICAgICAudXBsb2FkLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDE2NXB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24taWNvbiB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgfQoKICAgICAgLmhpZGRlbi1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC5jb250cm9sLWhvbGRlciB7CiAgICAgICAgY2xlYXI6IGJvdGg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIuY29udHJvbC1vcHRpb25zIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMTVweCAxNXB4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIgcGFwZXItdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICBzcGFuLmNvdW50ZXIgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplKTsKICAgICAgICBjb2xvcjogZ3JheTsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICB9CgogICAgICAucnVucy1yb3cgLnRpdGxlLAogICAgICAudGFncy1yb3cgLnRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLnJ1bnMtcm93IHBhcGVyLWl0ZW0sCiAgICAgIC50YWdzLXJvdyBwYXBlci1pdGVtIHsKICAgICAgICAtLXBhcGVyLWl0ZW06IHsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZS5jb250cm9sLWhvbGRlciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRhYmxlLnRmLWdyYXBoLWNvbnRyb2xzIHRkLmlucHV0LWVsZW1lbnQtdGFibGUtZGF0YSB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAuY29sb3ItdGV4dCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbG9yLXRleHQuZ3JhZGllbnQtY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICB9CgogICAgICAvKiogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyB0aGF0IHN1cHByZXNzIHBvaW50ZXIgZXZlbnRzIGZvciBkaXNhYmxlZCBidXR0b25zLiBPdGhlcndpc2UsIHRoZSAqLwogICAgICAvKiAgdG9vbHRpcHMgZG8gbm90IGFwcGVhci4gKi8KICAgICAgcGFwZXItcmFkaW8tZ3JvdXAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0byAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAubGVnZW5kLWNsYXJpZmllciB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBoZWxwOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgcGFwZXItdG9vbHRpcCB7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICB9CgogICAgICAvKiogT3RoZXJ3aXNlLCBwb2x5bWVyIFVJIGNvbnRyb2xzIGFwcGVhciBhdG9wIG5vZGUgc2VhcmNoLiAqLwogICAgICB0Zi1ncmFwaC1ub2RlLXNlYXJjaCB7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImFsbGNvbnRyb2xzIj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDx0Zi1ncmFwaC1ub2RlLXNlYXJjaAogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtbm9kZS1zZWFyY2g+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24iIG9uLXRhcD0iX2ZpdCIgYWx0PSJGaXQgdG8gc2NyZWVuIj4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXNwZWN0LXJhdGlvIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5GaXQgdG8gc2NyZWVuPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgIGNsYXNzPSJpY29uLWJ1dHRvbiIKICAgICAgICAgIG9uLWNsaWNrPSJkb3dubG9hZCIKICAgICAgICAgIGFsdD0iRG93bmxvYWQgUE5HIgogICAgICAgID4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS1kb3dubG9hZCIgY2xhc3M9ImJ1dHRvbi1pY29uIj48L2lyb24taWNvbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+RG93bmxvYWQgUE5HPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dVcGxvYWRCdXR0b25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iaWNvbi1idXR0b24iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfZ2V0RmlsZSIKICAgICAgICAgICAgYWx0PSJVcGxvYWQgZmlsZSIKICAgICAgICAgICAgdGl0bGU9IlVwbG9hZCBhIHBidHh0IGZpbGUgdG8gdmlldyBhIGdyYXBoIGZyb20gdGhlIGxvY2FsIGZpbGVzeXN0ZW0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS11cGxvYWQiIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+VXBsb2FkIGZpbGU8L3NwYW4+CiAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4taW5wdXQiPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJmaWxlIgogICAgICAgICAgICAgIGlkPSJmaWxlIgogICAgICAgICAgICAgIG5hbWU9ImZpbGUiCiAgICAgICAgICAgICAgb24tY2hhbmdlPSJfdXBkYXRlRmlsZUlucHV0IgogICAgICAgICAgICAgIGFjY2VwdD0iLnBidHh0IgogICAgICAgICAgICAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIHJ1bnMtcm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICBSdW4gPHNwYW4gY2xhc3M9ImNvdW50ZXIiPihbW2RhdGFzZXRzLmxlbmd0aF1dKTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgIG5vaW5rCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkUnVuSW5kZXh9fSIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tkYXRhc2V0c11dIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0ubmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2Vzc2lvblJ1bnNEcm9wZG93bl1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciB0YWdzLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgIFRhZwogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRlciIKICAgICAgICAgICAgICA+KFtbX251bVRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dKTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICAgICAgbm9pbmsKICAgICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWdJbmRleH19IgogICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX2dldFRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5kaXNwbGF5TmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPkdyYXBoIHR5cGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgY29udHJvbC1vcHRpb25zIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZEdyYXBoVHlwZX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uR3JhcGhUeXBlQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgPCEtLSBOb3RlIHRoYXQgdGhlIG5hbWUgaGFzIHRvIG1hdGNoIHRoYXQgb2YgdGZfZ3JhcGhfY29tbW9uLlNlbGVjdGlvblR5cGUuIC0tPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJvcF9ncmFwaCIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2dldFNlbGVjdGlvbk9wR3JhcGhEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIgogICAgICAgICAgICA+T3AgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJjb25jZXB0dWFsX2dyYXBoIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSIKICAgICAgICAgICAgPkNvbmNlcHR1YWwgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJwcm9maWxlIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uUHJvZmlsZURpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iCiAgICAgICAgICAgID5Qcm9maWxlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPk5vZGUgb3B0aW9uczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICBjaGVja2VkPSJ7e3RyYWNlSW5wdXRzfX0iCiAgICAgICAgICBvbi1jaGFuZ2U9Il9vblRyYWNlSW5wdXRzQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgVHJhY2UgaW5wdXRzCiAgICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7YXV0b0V4dHJhY3ROb2Rlc319Ij4KICAgICAgICAgIEF1dG8tZXh0cmFjdCBoaWdoLWRlZ3JlZSBub2RlcwogICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWFsdGhQaWxsc0ZlYXR1cmVFbmFibGVkXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7aGVhbHRoUGlsbHNUb2dnbGVkT259fSIKICAgICAgICAgICAgPlNob3cgaGVhbHRoIHBpbGxzPC9wYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5Db2xvciBieTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgc2VsZWN0ZWQ9Int7Y29sb3JCeX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlIgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5Lk5PTkVdXSI+Tm9uZTwvcGFwZXItcmFkaW8tYnV0dG9uPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5LlNUUlVDVFVSRV1dIgogICAgICAgICAgICA+U3RydWN0dXJlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IltbQ29sb3JCeS5ERVZJQ0VdXSIKICAgICAgICAgICAgPkRldmljZTwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0ieGxhLWNsdXN0ZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuWExBX0NMVVNURVJdXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIV94bGFDbHVzdGVyc1Byb3ZpZGVkKHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgID4KICAgICAgICAgICAgWExBIGNsdXN0ZXIKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9InhsYS1jbHVzdGVyLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IFhMQSBjbHVzdGVyIGlzIG9ubHkgZW5hYmxlZCBpZiBhdCBsZWFzdCAxIG9wIHNwZWNpZmllcwogICAgICAgICAgICBhbiBYTEEgY2x1c3Rlci4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIGlkPSJjb21wdXRlLXRpbWUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuQ09NUFVURV9USU1FXV0iCiAgICAgICAgICAgIGRpc2FibGVkPSJbWyFzdGF0c11dIgogICAgICAgICAgPgogICAgICAgICAgICBDb21wdXRlIHRpbWUKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSBjb21wdXRlIHRpbWUgaXMgb25seSBlbmFibGVkIGlmIHRoZSBSdW5NZXRhZGF0YSBwcm90byBpcwogICAgICAgICAgICBwYXNzZWQgdG8gdGhlIEZpbGVXcml0ZXIgd2hlbiBhIHNwZWNpZmljIHNlc3Npb24gaXMgcnVuLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9Im1lbW9yeS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIG5hbWU9IltbQ29sb3JCeS5NRU1PUlldXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIXN0YXRzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIE1lbW9yeQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0ibWVtb3J5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IG1lbW9yeSBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIFJ1bk1ldGFkYXRhIHByb3RvIGlzCiAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgRmlsZVdyaXRlciB3aGVuIGEgc3BlY2lmaWMgc2Vzc2lvbiBpcyBydW4uCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuT1BfQ09NUEFUSUJJTElUWV1dIgogICAgICAgICAgPgogICAgICAgICAgICBUUFUgY29tcGF0aWJpbGl0eQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgID4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgd2hldGhlciBhbiBvcGVyYXRpb24gaXMgY29tcGF0aWJsZSBmb3IgdGhlIFRQVSBkZXZpY2UuCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICA8c3BhbiBjbGFzcz0ic3BhY2VyIj48L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibGVnZW5kLXRvb2xiYXIiIG9uLWNsaWNrPSJfdG9nZ2xlTGVnZW5kT3BlbiI+CiAgICAgICAgPHNwYW4gY2xhc3M9InRvZ2dsZS1sZWdlbmQtdGV4dCI+TGVnZW5kPC9zcGFuPgogICAgICAgIDxpcm9uLWljb24KICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZUxlZ2VuZEljb24oX2xlZ2VuZE9wZW5lZCldXSIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtbGVnZW5kLWJ1dHRvbiIKICAgICAgICA+CiAgICAgICAgPC9pcm9uLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX2xlZ2VuZE9wZW5lZF1dIiBjbGFzcz0ibGVnZW5kLWNvbnRlbnQiPgogICAgICAgIDwhLS0gQ29sb3ItbW9kZS1zcGVjaWZpYyBsZWdlbmQgaXRlbXMgLS0+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNHcmFkaWVudENvbG9yaW5nKHN0YXRzLCBjb2xvckJ5KV1dIj4KICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMTQwIiBoZWlnaHQ9IjIwIiBjbGFzcz0iY29sb3ItdGV4dCBncmFkaWVudC1jb250YWluZXIiPgogICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50CiAgICAgICAgICAgICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudCIKICAgICAgICAgICAgICAgICAgeDE9IjAlIgogICAgICAgICAgICAgICAgICB5MT0iMCUiCiAgICAgICAgICAgICAgICAgIHgyPSIxMDAlIgogICAgICAgICAgICAgICAgICB5Mj0iMCUiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InN0YXJ0IgogICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5zdGFydENvbG9yXV0iCiAgICAgICAgICAgICAgICAgID48L3N0b3A+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImVuZCIKICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjEwMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5lbmRDb2xvcl1dIgogICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgPHJlY3QKICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgd2lkdGg9IjEzNSIKICAgICAgICAgICAgICAgIGhlaWdodD0iMjAiCiAgICAgICAgICAgICAgICBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50KSIKICAgICAgICAgICAgICAgIHN0cm9rZT0iYmxhY2siCiAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvbWFpblZhbHVlcyBjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5TdGFydCI+W1tfY3VycmVudEdyYWRpZW50UGFyYW1zLm1pblZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5FbmQiPltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5tYXhWYWx1ZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnIgc3R5bGU9ImNsZWFyOiBib3RoIiAvPgogICAgICAgICAgICA8ZGl2PkRldmljZXMgaW5jbHVkZWQgaW4gc3RhdHM6PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldmljZUxpc3QiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VzXV0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyBkZXZpY2VzLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgPHNwYW4KICAgICAgICAgICAgICAgICAgICA+PGlucHV0CiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlJD0iW1tpdGVtLmRldmljZV1dIgogICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbaXRlbS51c2VkXV0iCiAgICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX2RldmljZUNoZWNrYm94Q2xpY2tlZCIKICAgICAgICAgICAgICAgICAgLz48L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbaXRlbS5zdWZmaXhdXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2l0ZW0uaWdub3JlZE1zZ11dIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICAgIGljb249ImhlbHAiCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaGVscC1pY29uIgogICAgICAgICAgICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICA+W1tpdGVtLmlnbm9yZWRNc2ddXTwvcGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdzdHJ1Y3R1cmUnKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPiBjb2xvcnMgPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+c2FtZSBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjZWVlIgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNhNmE2YTYiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5pcXVlIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ2RldmljZScpXV0iPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VQYXJhbXNdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iW1tpdGVtLmNvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0uZGV2aWNlXV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2VlZSIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gZGV2aWNlPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAneGxhX2NsdXN0ZXInKV1dIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50WGxhQ2x1c3RlclBhcmFtc11dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgICA8c3ZnPgogICAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI3VuZmlsbGVkLXJlY3QiCiAgICAgICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOltbaXRlbS5jb2xvcl1dIgogICAgICAgICAgICAgICAgICAgID48L3VzZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPltbaXRlbS54bGFfY2x1c3Rlcl1dPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjZ3JleS1yZWN0IgogICAgICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgPjwvdXNlPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bmtub3duIFhMQSBjbHVzdGVyPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnb3BfY29tcGF0aWJpbGl0eScpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgIHR5cGU9Ik9QIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjMGY5ZDU4IgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+VmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJPUCIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2RiNDQzNyIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPkludmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc3RhdHNOb3ROdWxsKHN0YXRzKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmFkZWQ+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVudXNlZCBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBDb21tb24gbGVnZW5kIGl0ZW1zIC0tPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8dGFibGU+CiAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4oKiA9IGV4cGFuZGFibGUpPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2Q5ZDlkOSIKICAgICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBOYW1lc3BhY2U8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVuY2Fwc3VsYXRlcyBhIHNldCBvZiBub2Rlcy4gTmFtZXNwYWNlIGlzIGhpZXJhcmNoaWNhbCBhbmQKICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHNjb3BlLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJPUCIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgT3BOb2RlCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBOb2RlIHRoYXQgcGVyZm9ybXMgYW4gb3BlcmF0aW9uLiBUaGVzZSBub2RlcyBjYW5ub3QKICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU0VSSUVTIiBoZWlnaHQ9IjE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBVbmNvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIG5vdCBjb25uZWN0ZWQgdG8gZWFjaAogICAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iU0VSSUVTIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwKICAgICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIGNvbm5lY3RlZCB0byBlYWNoCiAgICAgICAgICAgICAgICAgICAgICBvdGhlci4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZQogICAgICAgICAgICAgICAgICAgICAgZmlsbD0id2hpdGUiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiM4NDg0ODQiCiAgICAgICAgICAgICAgICAgICAgICBjeD0iMTAiCiAgICAgICAgICAgICAgICAgICAgICBjeT0iMTAiCiAgICAgICAgICAgICAgICAgICAgICByPSI1IgogICAgICAgICAgICAgICAgICAgID48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb25zdGFudAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IG91dHB1dHMgYSBjb25zdGFudCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU1VNTUFSWSIgaGVpZ2h0PSIyMCI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgU3VtbWFyeQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IGNvbGxlY3RzIGRhdGEgZm9yIHZpc3VhbGl6YXRpb24gd2l0aGluCiAgICAgICAgICAgICAgICAgICAgICBUZW5zb3JCb2FyZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgICAgPG1hcmtlcgogICAgICAgICAgICAgICAgICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI2JiYiIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCkiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPgogICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIERhdGFmbG93IGVkZ2UKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgZGF0YSBmbG93IGJldHdlZW4gb3BlcmF0aW9ucy4gRWRnZXMgZmxvdwogICAgICAgICAgICAgICAgICAgICAgdXB3YXJkcyB1bmxlc3MgYXJyb3doZWFkcyBzcGVjaWZ5IG90aGVyd2lzZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9IjIsIDIiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb250cm9sIGRlcGVuZGVuY3kgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoZSBjb250cm9sIGRlcGVuZGVuY3kgYmV0d2VlbiBvcGVyYXRpb25zLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c3ZnCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imljb24iCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNXB4IgogICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICAgICAgdmlld0JveD0iMCAwIDE1IDE1IgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgICAgICA8bWFya2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI0ZGQjc0RCIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjcmVmZXJlbmNlLWFycm93aGVhZC1sZWdlbmQpIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjRkZCNzREIgogICAgICAgICAgICAgICAgICAgICAgZD0iTTIgOSBsIDI5IDAiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoYXQgdGhlIG91dGdvaW5nIG9wZXJhdGlvbiBub2RlIGNhbiBtdXRhdGUKICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyB0ZW5zb3IuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdGF0c0NoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEluLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEluLnByb3RvdHlwZSwiZGV2aWNlc0ZvclN0YXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJbi5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEluLnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG9ic2VydmVyOiJfZGF0YXNldHNDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbi5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sSW4ucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVNlbGVjdGlvbihkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4LCBfc2VsZWN0ZWRHcmFwaFR5cGUpIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbi5wcm90b3R5cGUsInNlbGVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSW4ucHJvdG90eXBlLCJzZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSW4ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5JbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJbi5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEluLnByb3RvdHlwZSwiYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJbi5wcm90b3R5cGUsIl9zZWxlY3RlZFRhZ0luZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEluLnByb3RvdHlwZSwiX3NlbGVjdGVkR3JhcGhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJbi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEluLnByb3RvdHlwZSwic2hvd1Nlc3Npb25SdW5zRHJvcGRvd24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJbi5wcm90b3R5cGUsInNob3dVcGxvYWRCdXR0b24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJbi5wcm90b3R5cGUsImhlYWx0aFBpbGxzRmVhdHVyZUVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW4ucHJvdG90eXBlLCJoZWFsdGhQaWxsc1RvZ2dsZWRPbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEluLnByb3RvdHlwZSwiX2xlZ2VuZE9wZW5lZCIsdm9pZCAwKTtFKFtSdCgiZGV2aWNlc0ZvclN0YXRzIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJbi5wcm90b3R5cGUsIl9jdXJyZW50RGV2aWNlcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEluLnByb3RvdHlwZSwiX2N1cnJlbnREZXZpY2VQYXJhbXMiLG51bGwpO0UoW1J0KCJjb2xvckJ5UGFyYW1zIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJbi5wcm90b3R5cGUsIl9jdXJyZW50WGxhQ2x1c3RlclBhcmFtcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiLCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSW4ucHJvdG90eXBlLCJfY3VycmVudEdyYWRpZW50UGFyYW1zIixudWxsKTtJbj1FKFt5dCgidGYtZ3JhcGgtY29udHJvbHMiKV0sSW4pO2Z1bmN0aW9uIGF1cihlKXtpZihlPT09InRydWUiKXJldHVybiEwO2lmKGU9PT0iZmFsc2UiKXJldHVybiExO2lmKGVbMF09PT0nIicpcmV0dXJuIGUuc3Vic3RyaW5nKDEsZS5sZW5ndGgtMSk7bGV0IHI9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4ocik/ZTpyfWZ1bmN0aW9uICRsZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQscik9PntmZXRjaChlKS50aGVuKG49PntuLm9rP24uYXJyYXlCdWZmZXIoKS50aGVuKHQscik6bi50ZXh0KCkudGhlbihyLHIpfSl9KX1mdW5jdGlvbiBLbGUoZSx0KXtyZXR1cm4gWXNlKCJSZWFkaW5nIG1ldGFkYXRhIHBidHh0Iiw0MCwoKT0+ZT09bnVsbD9Qcm9taXNlLnJlc29sdmUobnVsbCk6JGxlKGUpLHQsanIuRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMpLnRoZW4ocj0+ZEgoIlBhcnNpbmcgbWV0YWRhdGEucGJ0eHQiLDYwLCgpPT5yIT1udWxsP2h1cihyKTpQcm9taXNlLnJlc29sdmUobnVsbCksdCxqci5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVCkpfWZ1bmN0aW9uIFpsZShlLHQscil7cmV0dXJuIGRIKCJSZWFkaW5nIGdyYXBoIHBidHh0Iiw0MCwoKT0+UmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuPURhdGUubm93KCk7aWYodCl7bGV0IG89eWllbGQgbmV3IFByb21pc2UoZnVuY3Rpb24oYSxzKXtsZXQgbD1uZXcgRmlsZVJlYWRlcjtsLm9ubG9hZD0oKT0+YShsLnJlc3VsdCksbC5vbmVycm9yPSgpPT5zKGwuZXJyb3IpLGwucmVhZEFzQXJyYXlCdWZmZXIodCl9KTtyZXR1cm4gUG8oe3RpbWluZ0lkOmpyLkZFVENIX1BCVFhUX0JZVEVTX0ZST01fRklMRVNZU1RFTSxldmVudFZhbHVlOkRhdGUubm93KCktbn0pLG99bGV0IGk9eWllbGQgJGxlKGUpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVIsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLW59KSxpfSkscixqci5GRVRDSF9QQlRYVF9CWVRFUykudGhlbihuPT5kSCgiUGFyc2luZyBncmFwaC5wYnR4dCIsNjAsKCk9PnV1cihuKSxyLGpyLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUKSl9ZnVuY3Rpb24gc3VyKGUsdCxyPTFlNixuPWAKYCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShzLGwsYyl7bGV0IHU9Yz49ZS5ieXRlTGVuZ3RoLGg9bC5zcGxpdChuKTtoWzBdPXMraFswXTtsZXQgZj11PyIiOmgucG9wKCk7Zm9yKGxldCBnIG9mIGgpdHJ5e3QoZyl9Y2F0Y2goXyl7byhfKTtyZXR1cm59aWYodSl7aSghMCk7cmV0dXJufWxldCBwPW5ldyBCbG9iKFtlLnNsaWNlKGMsYytyKV0pLGQ9bmV3IEZpbGVSZWFkZXI7ZC5vbmxvYWQ9ZnVuY3Rpb24oZyl7YShmLGcudGFyZ2V0LnJlc3VsdCxjK3IpfSxkLnJlYWRBc1RleHQocCl9YSgiIiwiIiwwKX0pfXZhciBsdXI9eyJsaWJyYXJ5LmZ1bmN0aW9uIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuaW5wdXQiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5iIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmZ1bmMiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5pIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QucyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnNoYXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUuZGltIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudGVuc29yIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudHlwZSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnN0cmluZ192YWwiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnRlbnNvcl9zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5pbnB1dF9hcmciOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5vdXRwdXRfYXJnIjohMCwibGlicmFyeS52ZXJzaW9ucyI6ITAsbm9kZTohMCwibm9kZS5pbnB1dCI6ITAsIm5vZGUuYXR0ciI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5mIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuZnVuYyI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmkiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3Quc2hhcGUiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zaGFwZS5kaW0iOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50ZW5zb3IiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50eXBlIjohMCwibm9kZS5hdHRyLnZhbHVlLnNoYXBlLmRpbSI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3Iuc3RyaW5nX3ZhbCI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3IudGVuc29yX3NoYXBlLmRpbSI6ITB9LGN1cj17InN0ZXBfc3RhdHMuZGV2X3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cyI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0IjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5tZW1vcnkiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm91dHB1dC50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltIjohMH07ZnVuY3Rpb24gdXVyKGUpe3JldHVybiBKbGUoZSxsdXIpfWZ1bmN0aW9uIGh1cihlKXtyZXR1cm4gSmxlKGUsY3VyKS50aGVuKHQ9PnQuc3RlcF9zdGF0cyl9ZnVuY3Rpb24gSmxlKGUsdCl7bGV0IHI9e30sbj1bXSxpPVtdLG89cjtmdW5jdGlvbiBhKGwpe2xldCBjPWwuaW5kZXhPZigiOiIpLHU9bC5zdWJzdHJpbmcoMCxjKS50cmltKCksaD1hdXIobC5zdWJzdHJpbmcoYysyKS50cmltKCkpO3JldHVybntuYW1lOnUsdmFsdWU6aH19ZnVuY3Rpb24gcyhsLGMsdSxoKXtsZXQgZj1sW2NdO2Y9PW51bGw/bFtjXT1oLmpvaW4oIi4iKWluIHQ/W3VdOnU6QXJyYXkuaXNBcnJheShmKT9mLnB1c2godSk6bFtjXT1bZix1XX1yZXR1cm4gc3VyKGUsZnVuY3Rpb24obCl7aWYobD1sLnRyaW0oKSwhIWwpc3dpdGNoKGxbbC5sZW5ndGgtMV0pe2Nhc2UieyI6bGV0IGM9bC5zdWJzdHJpbmcoMCxsLmxlbmd0aC0yKS50cmltKCksdT17fTtuLnB1c2gobyksaS5wdXNoKGMpLHMobyxjLHUsaSksbz11O2JyZWFrO2Nhc2UifSI6bz1uLnBvcCgpLGkucG9wKCk7YnJlYWs7ZGVmYXVsdDpsZXQgaD1hKGwpO3MobyxoLm5hbWUsaC52YWx1ZSxpLmNvbmNhdChoLm5hbWUpKTticmVha319KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX1mdW5jdGlvbiB0Y2UoZSx0LHIsbj1uZXcgSnUsaT1yMyl7bGV0IG89SlMoZSwzMCwiRGF0YSIpLGE9SlMoZSwyMCwiR3JhcGgiKSxzPUpTKGUsNTAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKSxsPURhdGUubm93KCk7cmV0dXJuIFpsZSh0LHIsbykudGhlbihmdW5jdGlvbihjKXtpZighYy5ub2RlKXRocm93IG5ldyBFcnJvcigiVGhlIGdyYXBoIGlzIGVtcHR5LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBUZW5zb3JGbG93IGNvdWxkIG5vdCB0cmFjZSBhbnkgZ3JhcGguIFBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTk2MSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTtyZXR1cm4gbmxlKGMscmxlLGEpfSwoKT0+e3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEdyYXBoRGVmLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgY2F1c2VkIGJ5IGEgYmFkIG5ldHdvcmsgY29ubmVjdGlvbiBvciBkaWZmaWN1bHR5IHJlY29uY2lsaW5nIG11bHRpcGxlIEdyYXBoRGVmczsgZm9yIHRoZSBsYXR0ZXIgY2FzZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy8xOTI5LiIpfSkudGhlbihjPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7WWxlKGMsbik7bGV0IHU9eWllbGQgeEgoYyxpLHMpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuR1JBUEhfTE9BRF9TVUNDRUVERUQsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLWx9KSx7Z3JhcGg6YyxncmFwaEhpZXJhcmNoeTp1fX0pKS5jYXRjaChjPT57bGV0IHU9YEdyYXBoIHZpc3VhbGl6YXRpb24gZmFpbGVkLgoKJHtjfWA7dGhyb3cgZS5yZXBvcnRFcnJvcih1LGMpLFBvKHt0aW1pbmdJZDpqci5HUkFQSF9MT0FEX0ZBSUxFRCxldmVudFZhbHVlOkRhdGUubm93KCktbH0pLGN9KX12YXIgSHM9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyPW5ldyBKdSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLl90ZW1wbGF0ZT1udWxsfV9zZWxlY3Rpb25DaGFuZ2VkKCl7IXRoaXMuc2VsZWN0aW9ufHx0aGlzLmRlYm91bmNlKCJzZWxlY3Rpb25jaGFuZ2UiLCgpPT57dGhpcy5fbG9hZCh0aGlzLnNlbGVjdGlvbil9KX1fbG9hZCh0KXtsZXR7cnVuOnIsdGFnOm4sdHlwZTppfT10O3N3aXRjaChpKXtjYXNlIEZzLk9QX0dSQVBIOmNhc2UgRnMuQ09OQ0VQVFVBTF9HUkFQSDp7KGZ1bmN0aW9uKCl7dGhpcy5fc2V0T3V0U3RhdHMobnVsbCl9KS5iaW5kKHRoaXMpKCk7bGV0IG89bmV3IFVSTFNlYXJjaFBhcmFtcztvLnNldCgicnVuIixyKSxvLnNldCgiY29uY2VwdHVhbCIsU3RyaW5nKGk9PT1Gcy5DT05DRVBUVUFMX0dSQVBIKSksbiYmby5zZXQoInRhZyIsbik7bGV0IGE9dmUoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2dyYXBoIixvKTtyZXR1cm4gdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChhKS50aGVuKCgpPT57dGhpcy5fZ3JhcGhSdW5UYWc9e3J1bjpyLHRhZzpufX0pfWNhc2UgRnMuUFJPRklMRTp7bGV0e3RhZ3M6b309dGhpcy5kYXRhc2V0cy5maW5kKCh7bmFtZTpmfSk9PmY9PT1yKSxzPW8uZmluZChmPT5mLnRhZz09PW4pLm9wR3JhcGg/bjpudWxsO2NvbnNvbGUuYXNzZXJ0KG8uZmluZChmPT5mLnRhZz09PXMpLGBSZXF1aXJlZCB0YWcgKCR7c30pIGlzIG1pc3NpbmcuYCk7bGV0IGM9IXRoaXMuX2dyYXBoUnVuVGFnfHx0aGlzLl9ncmFwaFJ1blRhZy5ydW4hPT1yfHx0aGlzLl9ncmFwaFJ1blRhZy50YWchPT1zP3RoaXMuX2xvYWQoe3J1bjpyLHRhZzpzLHR5cGU6RnMuT1BfR1JBUEh9KTpQcm9taXNlLnJlc29sdmUoKSx1PW5ldyBVUkxTZWFyY2hQYXJhbXM7dS5zZXQoInRhZyIsbiksdS5zZXQoInJ1biIscik7bGV0IGg9dmUoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL3J1bl9tZXRhZGF0YSIsdSk7cmV0dXJuIGMudGhlbigoKT0+dGhpcy5fcmVhZEFuZFBhcnNlTWV0YWRhdGEoaCkpfWRlZmF1bHQ6cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93biBzZWxlY3Rpb24gdHlwZTogJHtpfWApKX19X3JlYWRBbmRQYXJzZU1ldGFkYXRhKHQpe3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7dmFyIHI9clAodGhpcyk7S2xlKHQscikudGhlbihmdW5jdGlvbihuKXt0aGlzLl9zZXRPdXRTdGF0cyhuKX0uYmluZCh0aGlzKSl9X2ZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgodCxyKXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO2xldCBuPXJQKHRoaXMpO3JldHVybiB0Y2Uobix0LHIhPT12b2lkIDA/cjpudWxsLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyLHRoaXMuaGllcmFyY2h5UGFyYW1zKS50aGVuKGZ1bmN0aW9uKHtncmFwaDppLGdyYXBoSGllcmFyY2h5Om99KXt0aGlzLl9zZXRPdXRHcmFwaChpKSx0aGlzLl9zZXRPdXRHcmFwaEhpZXJhcmNoeShvKX0uYmluZCh0aGlzKSl9X3NlbGVjdGVkRmlsZUNoYW5nZWQoKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGVkRmlsZTtpZighdClyZXR1cm47bGV0IHI9dC50YXJnZXQsbj0oaT1yLmZpbGVzKT09bnVsbD92b2lkIDA6aVswXTshbnx8KHIudmFsdWU9IiIsdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChudWxsLG4pKX19O0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIcy5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsInByb2dyZXNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0ZWRGaWxlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixvcyldLEhzLnByb3RvdHlwZSwib3V0R3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFh1KV0sSHMucHJvdG90eXBlLCJvdXRHcmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSHMucHJvdG90eXBlLCJvdXRTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsIl9ncmFwaFJ1blRhZyIsdm9pZCAwKTtFKFtCdCgic2VsZWN0aW9uIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3Rpb25DaGFuZ2VkIixudWxsKTtFKFtCdCgic2VsZWN0ZWRGaWxlIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGVDaGFuZ2VkIixudWxsKTtIcz1FKFt5dCgidGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlciIpXSxIcyk7dmFyIGVjZT0icnVuIjt2YXIgT3I9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2RhdGFzZXRzPVtdLHRoaXMuX2RhdGFzZXRzRmV0Y2hlZD0hMSx0aGlzLl9zZWxlY3RlZERhdGFzZXQ9MCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXA9MCx0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uPSExLHRoaXMuX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cz1bXSx0aGlzLl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzPXt9LHRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ9MSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5PTUwMCx0aGlzLnJ1bj15XyhlY2Use2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITF9KS5jYWxsKHRoaXMpLHRoaXMuX3J1bk9ic2VydmVyPXZfKGVjZSx7ZGVmYXVsdFZhbHVlOiIiLHBvbHltZXJQcm9wZXJ0eToicnVuIix1c2VMb2NhbFN0b3JhZ2U6ITF9KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXhwYW5kIix0aGlzLl9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kLmJpbmQodGhpcykpfXJlbG9hZCgpe3RoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWR8fHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodmUoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKHRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh0PT57dC5jYW5jZWxsZWR8fHQudmFsdWUuZGVidWdnZXImJnRoaXMuc2V0KCJfZGVidWdnZXJEYXRhRW5hYmxlZCIsITApfSkpLHRoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfV9maXQoKXt0aGlzLiQkKCIjZ3JhcGhib2FyZCIpLmZpdCgpfV9vbkRvd25sb2FkSW1hZ2VSZXF1ZXN0ZWQodCl7dGhpcy4kJCgiI2dyYXBoYm9hcmQiKS5kb3dubG9hZEFzSW1hZ2UodC5kZXRhaWwpfV9nZXRHcmFwaERpc3BsYXlDbGFzc05hbWUodCxyKXtyZXR1cm4gdHx8ci5sZW5ndGg/IiI6Im5vLWdyYXBoIn1fZmV0Y2hEYXRhc2V0KCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodmUoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2luZm8iKSl9X2ZldGNoSGVhbHRoUGlsbHModCxyKXtsZXQgbj17bm9kZV9uYW1lczpKU09OLnN0cmluZ2lmeSh0KSxydW46Il9fZGVidWdnZXJfZGF0YV9fIn07ciE9PXZvaWQgMCYmKG4uc3RlcD1yKTtsZXQgaT12ZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9oZWFsdGhfcGlsbHMiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChpLG4pfV9mZXRjaERlYnVnZ2VyTnVtZXJpY3NBbGVydHMoKXtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh2ZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9udW1lcmljc19hbGVydF9yZXBvcnQiKSl9X2dyYXBoVXJsKHQscixuKXtyZXR1cm4gdmUoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2dyYXBoIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtydW46dCxsaW1pdF9hdHRyX3NpemU6cixsYXJnZV9hdHRyc19rZXk6bn0pKX1fc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzKCl7cmV0dXJuIHRoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWQmJnRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT24mJnRoaXMuX3JlbmRlckhpZXJhcmNoeSYmdGhpcy5fZGF0YXNldHNTdGF0ZSh0aGlzLl9kYXRhc2V0c0ZldGNoZWQsdGhpcy5fZGF0YXNldHMsIlBSRVNFTlQiKX1fbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkKCl7dmFyIHQ9dGhpcy5faXNBdHRhY2hlZDt0aGlzLl9pbml0aWFsaXplZHx8IXR8fCh0aGlzLnNldCgiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsbmV3IEp1KSx0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl9mZXRjaERhdGFzZXQoKS50aGVuKHI9PntsZXQgbj1PYmplY3Qua2V5cyhyKTt0aGlzLl9kYXRhc2V0cz1uLnNvcnQoeGgpLm1hcChpPT57bGV0IG89cltpXSxzPU9iamVjdC5rZXlzKG8udGFncykuc29ydCh4aCkubWFwKGM9Pm8udGFnc1tjXSkubWFwKCh7dGFnOmMsY29uY2VwdHVhbF9ncmFwaDp1LG9wX2dyYXBoOmgscHJvZmlsZTpmfSk9Pih7dGFnOmMsZGlzcGxheU5hbWU6Yyxjb25jZXB0dWFsR3JhcGg6dSxvcEdyYXBoOmgscHJvZmlsZTpmfSkpLGw9by5ydW5fZ3JhcGg/W3t0YWc6bnVsbCxkaXNwbGF5TmFtZToiRGVmYXVsdCIsY29uY2VwdHVhbEdyYXBoOiExLG9wR3JhcGg6ITAscHJvZmlsZTohMX0sLi4uc106cztyZXR1cm57bmFtZTppLHRhZ3M6bH19KSx0aGlzLl9kYXRhc2V0c0ZldGNoZWQ9ITB9KSl9X2RldGVybWluZVNlbGVjdGVkRGF0YXNldCgpe3ZhciB0PXRoaXMuX2RhdGFzZXRzRmV0Y2hlZCxyPXRoaXMuX2RhdGFzZXRzLG49dGhpcy5ydW47aWYoIW4pe3RoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IiwwKTtyZXR1cm59bGV0IGk9ci5maW5kSW5kZXgobz0+by5uYW1lPT09bik7aWYoaT09PS0xKXtpZih0KXtsZXQgbz10aGlzLiQkKCIjZXJyb3ItZGlhbG9nIik7by50ZXh0Q29udGVudD1gTm8gZGF0YXNldCBuYW1lZCAiJHtufSIgY291bGQgYmUgZm91bmQuYCxvLm9wZW4oKX1yZXR1cm59dGhpcy5zZXQoIl9zZWxlY3RlZERhdGFzZXQiLGkpfV91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lKCl7dmFyIHQ9dGhpcy5fZGF0YXNldHNGZXRjaGVkLHI9dGhpcy5fZGF0YXNldHMsbj10aGlzLl9zZWxlY3RlZERhdGFzZXQ7IXR8fHIubGVuZ3RoPD1ufHx0aGlzLnNldCgicnVuIixyW25dLm5hbWUpfV9yZXF1ZXN0SGVhbHRoUGlsbHMoKXt0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITApO3ZhciB0PSsrdGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZDt0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIT09bnVsbCYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsKSx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ/dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsLHRoaXMuX2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KX0uYmluZCh0aGlzKSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5KTp0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl9X2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KXtpZih0aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkIT09dClyZXR1cm47bGV0IHI9dGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp2b2lkIDAsbj10aGlzLl9mZXRjaEhlYWx0aFBpbGxzKHRoaXMuX3JlbmRlckhpZXJhcmNoeS5nZXROYW1lc09mUmVuZGVyZWRPcHMoKSxyKSxpPXRoaXMuX2ZldGNoRGVidWdnZXJOdW1lcmljc0FsZXJ0cygpO1Byb21pc2UuYWxsKFtuLGldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBhPW9bMF0scz1vWzFdO2lmKCEhdGhpcy5oZWFsdGhQaWxsc1RvZ2dsZWRPbiYmdD09PXRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQpe2Zvcih2YXIgbCBpbiBhKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLGFbbF0ubGVuZ3RoLTEpO2JyZWFrfXRoaXMuc2V0KCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIixzKSx0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLGEpLHRoaXMuc2V0KCJfYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiwhMSksdGhpcy5zZXQoIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIixudWxsKX19LmJpbmQodGhpcykpfV9kYXRhc2V0c1N0YXRlKHQscixuKXtyZXR1cm4gdD8hcnx8IXIubGVuZ3RoP249PT0iRU1QVFkiOm49PT0iUFJFU0VOVCI6bj09PSJOT1RfTE9BREVEIn1fcmVuZGVySGllcmFyY2h5Q2hhbmdlZCh0KXt0aGlzLnJlbG9hZCgpfV9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kKCl7dGhpcy5fbWF5YmVGZXRjaEhlYWx0aFBpbGxzKCl9X2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZCh0KXt0P3RoaXMucmVsb2FkKCk6dGhpcy5zZXQoIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix7fSl9X21heWJlRmV0Y2hIZWFsdGhQaWxscygpeyF0aGlzLl9zaG91bGRSZXF1ZXN0SGVhbHRoUGlsbHMoKXx8dGhpcy5fcmVxdWVzdEhlYWx0aFBpbGxzKCl9fTtPci50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRpYWxvZyBpZD0iZXJyb3ItZGlhbG9nIiB3aXRoLWJhY2tkcm9wPjwvcGFwZXItZGlhbG9nPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDx0Zi1ncmFwaC1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBjbGFzcz0ic2lkZWJhciIKICAgICAgICBzbG90PSJzaWRlYmFyIgogICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJ7e19kZXZpY2VzRm9yU3RhdHN9fSIKICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbX2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICBzdGF0cz0iW1tfc3RhdHNdXSIKICAgICAgICBjb2xvci1ieT0ie3tfY29sb3JCeX19IgogICAgICAgIGRhdGFzZXRzPSJbW19kYXRhc2V0c11dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbX3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIHNlbGVjdGlvbj0ie3tfc2VsZWN0aW9ufX0iCiAgICAgICAgc2VsZWN0ZWQtZmlsZT0ie3tfc2VsZWN0ZWRGaWxlfX0iCiAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGVhbHRoLXBpbGxzLWZlYXR1cmUtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgIGhlYWx0aC1waWxscy10b2dnbGVkLW9uPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iCiAgICAgICAgb24tZml0LXRhcD0iX2ZpdCIKICAgICAgICB0cmFjZS1pbnB1dHM9Int7X3RyYWNlSW5wdXRzfX0iCiAgICAgICAgYXV0by1leHRyYWN0LW5vZGVzPSJ7e19hdXRvRXh0cmFjdE5vZGVzfX0iCiAgICAgICAgb24tZG93bmxvYWQtaW1hZ2UtcmVxdWVzdGVkPSJfb25Eb3dubG9hZEltYWdlUmVxdWVzdGVkIgogICAgICA+PC90Zi1ncmFwaC1jb250cm9scz4KICAgICAgPGRpdgogICAgICAgIGNsYXNzJD0iY2VudGVyIFtbX2dldEdyYXBoRGlzcGxheUNsYXNzTmFtZShfc2VsZWN0ZWRGaWxlLCBfZGF0YXNldHMpXV0iCiAgICAgICAgc2xvdD0iY2VudGVyIgogICAgICA+CiAgICAgICAgPHRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIKICAgICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgICBkYXRhc2V0cz0iW1tfZGF0YXNldHNdXSIKICAgICAgICAgIHNlbGVjdGlvbj0iW1tfc2VsZWN0aW9uXV0iCiAgICAgICAgICBzZWxlY3RlZC1maWxlPSJbW19zZWxlY3RlZEZpbGVdXSIKICAgICAgICAgIG91dC1ncmFwaC1oaWVyYXJjaHk9Int7X2dyYXBoSGllcmFyY2h5fX0iCiAgICAgICAgICBvdXQtZ3JhcGg9Int7X2dyYXBofX0iCiAgICAgICAgICBvdXQtc3RhdHM9Int7X3N0YXRzfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3tfcHJvZ3Jlc3N9fSIKICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgY29tcGF0aWJpbGl0eS1wcm92aWRlcj0iW1tfY29tcGF0aWJpbGl0eVByb3ZpZGVyXV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlcj4KICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLW1lc3NhZ2UiPgogICAgICAgICAgPGgzPk5vIGdyYXBoIGRlZmluaXRpb24gZmlsZXMgd2VyZSBmb3VuZC48L2gzPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIFRvIHN0b3JlIGEgZ3JhcGgsIGNyZWF0ZSBhCiAgICAgICAgICAgIDxjb2RlPnRmLnN1bW1hcnkuRmlsZVdyaXRlcjwvY29kZT4KICAgICAgICAgICAgYW5kIHBhc3MgdGhlIGdyYXBoIGVpdGhlciB2aWEgdGhlIGNvbnN0cnVjdG9yLCBvciBieSBjYWxsaW5nIGl0cwogICAgICAgICAgICA8Y29kZT5hZGRfZ3JhcGgoKTwvY29kZT4gbWV0aG9kLiBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy90ZW5zb3Jib2FyZC9ncmFwaHMiCiAgICAgICAgICAgICAgPmV4YW1pbmluZyB0aGUgVGVuc29yRmxvdyBncmFwaCB0dXRvcmlhbDwvYQogICAgICAgICAgICA+LgogICAgICAgICAgPC9wPgoKICAgICAgICAgIDxwPgogICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQKICAgICAgICAgICAgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgID4uCiAgICAgICAgICA8L3A+CgogICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdyYXBoYm9hcmQiPgogICAgICAgICAgPHRmLWdyYXBoLWJvYXJkCiAgICAgICAgICAgIGlkPSJncmFwaGJvYXJkIgogICAgICAgICAgICBkZXZpY2VzLWZvci1zdGF0cz0iW1tfZGV2aWNlc0ZvclN0YXRzXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJ7e19jb2xvckJ5fX0iCiAgICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tfY29sb3JCeVBhcmFtc319IgogICAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbX2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICAgIGdyYXBoPSJbW19ncmFwaF1dIgogICAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIKICAgICAgICAgICAgcHJvZ3Jlc3M9IltbX3Byb2dyZXNzXV0iCiAgICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbX2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tfZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW19ub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgICBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1tfaGVhbHRoUGlsbFN0ZXBJbmRleF1dIgogICAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICAgIHN0YXRzPSJbW19zdGF0c11dIgogICAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbX3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICAgIGF1dG8tZXh0cmFjdC1ub2Rlcz0iW1tfYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgICAgPjwvdGYtZ3JhcGgtYm9hcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCAvZGVlcC8gewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1kaWFsb2cgewogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLW1lc3NhZ2UgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAuZ3JhcGhib2FyZCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubm8tZ3JhcGggLmdyYXBoYm9hcmQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXI6bm90KC5uby1ncmFwaCkgLm5vLWRhdGEtbWVzc2FnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfZGF0YXNldHNGZXRjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX3NlbGVjdGVkRGF0YXNldCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3JlbmRlckhpZXJhcmNoeUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLGxvKV0sT3IucHJvdG90eXBlLCJfcmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sT3IucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxPci5wcm90b3R5cGUsIl9jYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9kZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9oZWFsdGhQaWxsc1RvZ2dsZWRPbkNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsImhlYWx0aFBpbGxzVG9nZ2xlZE9uIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxPci5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9pbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sT3IucHJvdG90eXBlLCJfaGVhbHRoUGlsbFJlcXVlc3RJZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVyRGVsYXkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9ydW5PYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sT3IucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT3IucHJvdG90eXBlLCJfc2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9yLnByb3RvdHlwZSwiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX3RyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQnQoIl9pc0F0dGFjaGVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwicnVuIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwiX3NlbGVjdGVkRGF0YXNldCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT3IucHJvdG90eXBlLCJfdXBkYXRlU2VsZWN0ZWREYXRhc2V0TmFtZSIsbnVsbCk7T3I9RShbeXQoInRmLWdyYXBoLWRhc2hib2FyZCIpXSxPcik7dmFyIFJIPUVlKE9lKCksMSk7dmFyIGtyPVZyLE1hPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5tb2RlPSJvZmZzZXQiLHRoaXMudGltZVByb3BlcnR5PSJzdGVwIix0aGlzLmJpbnM9ImJpbnMiLHRoaXMueD0ieCIsdGhpcy5keD0iZHgiLHRoaXMueT0ieSIsdGhpcy5jb2xvclNjYWxlPWtyLnNjYWxlT3JkaW5hbChrci5zY2hlbWVDYXRlZ29yeTEwKSx0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb249NTAwLHRoaXMuX25hbWU9bnVsbCx0aGlzLl9kYXRhPW51bGx9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX1zZXRTZXJpZXNEYXRhKHQscil7dGhpcy5fbmFtZT10LHRoaXMuX2RhdGE9cix0aGlzLnJlZHJhdygpfV9yZWRyYXdPbkNoYW5nZSgpe3RoaXMucmVkcmF3KCl9cmVkcmF3KCl7dGhpcy5fZHJhdygwKX1fbW9kZVJlZHJhdygpe3RoaXMuX2RyYXcodGhpcy5tb2RlVHJhbnNpdGlvbkR1cmF0aW9uKX1fZHJhdyh0KXtpZighdGhpcy5fYXR0YWNoZWR8fCF0aGlzLl9kYXRhKXJldHVybjtpZih0PT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgX2RyYXcgbmVlZHMgZHVyYXRpb24iKTtpZih0aGlzLl9kYXRhLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBlbm91Z2ggc3RlcHMgaW4gdGhlIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmJpbnMpKXRocm93IG5ldyBFcnJvcigiTm8gYmlucyBwcm9wZXJ0eSBvZiAnIit0aGlzLmJpbnMrIicgaW4gZGF0YSIpO2lmKHRoaXMuX2RhdGFbMF1bdGhpcy5iaW5zXS5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJpbiBpbiBiaW5zIGluIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueCkpdGhyb3cgbmV3IEVycm9yKCJObyB4IHByb3BlcnR5ICciK3RoaXMueCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMuZHgpKXRocm93IG5ldyBFcnJvcigiTm8gZHggcHJvcGVydHkgJyIrdGhpcy5keCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueSkpdGhyb3cgbmV3IEVycm9yKCJObyB5IHByb3BlcnR5ICciK3RoaXMueSsiJyBvbiBiaW5zIGRhdGEiKTt2YXIgcj10aGlzLnRpbWVQcm9wZXJ0eSxuPXRoaXMueCxpPXRoaXMuYmlucyxvPXRoaXMuZHgsYT10aGlzLnkscz10aGlzLl9kYXRhLGw9dGhpcy5fbmFtZSxjPXRoaXMubW9kZSx1PWtyLmhjbCh0aGlzLmNvbG9yU2NhbGUobCkpLGg9a3Iuc2VsZWN0KHRoaXMuJC50b29sdGlwKSxmPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl19LHA9ZnVuY3Rpb24oTnQpe3JldHVybiBOdFthXX0sZD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W29dfSxnPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl0rTnRbb119LF89ZnVuY3Rpb24oTnQpe3JldHVybiBOdFtyXX07cj09PSJyZWxhdGl2ZSImJihfPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnQud2FsbF90aW1lLXNbMF0ud2FsbF90aW1lfSk7dmFyIHk9dGhpcy4kLnN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4PXkud2lkdGgsYj15LmhlaWdodCxTLEM9e3RvcDo1LHJpZ2h0OjYwLGJvdHRvbToyMCxsZWZ0OjI0fTtjPT09Im9mZnNldCI/KFM9Yi8yLjUsQy50b3A9Uys1KTpTPWItQy50b3AtQy5ib3R0b207dmFyIFA9eC1DLmxlZnQtQy5yaWdodCxrPWItQy50b3AtQy5ib3R0b20sTz1rci5taW4ocyxmKSxEPWtyLm1heChzLGcpLEI9a3IuZm9ybWF0KCIuM24iKSxJPWtyLmZvcm1hdCgiLjBmIik7cj09PSJ3YWxsX3RpbWUiP0k9a3IudGltZUZvcm1hdCgiJW0vJWQgJVgiKTpyPT09InJlbGF0aXZlIiYmKEk9ZnVuY3Rpb24oTnQpe3JldHVybiBrci5mb3JtYXQoIi4xciIpKE50LzM2ZTUpKyJoIn0pO3ZhciBMPXMubWFwKGZ1bmN0aW9uKE50LHplKXtyZXR1cm5ba3IubWluKE50W2ldLGYpLGtyLm1heChOdFtpXSxnKV19KSxSPXMubWFwKGZ1bmN0aW9uKE50KXtyZXR1cm4ga3IuZXh0ZW50KE50W2ldLHApfSksRj01MDAsej1rci5leHRlbnQocyxfKSxVPShyPT09IndhbGxfdGltZSI/a3Iuc2NhbGVUaW1lKCk6a3Iuc2NhbGVMaW5lYXIoKSkuZG9tYWluKHopLnJhbmdlKFswLGM9PT0ib2Zmc2V0Ij9rOjBdKSxXPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gUlt6ZV1bMV19KV0pLnJhbmdlKFtTLDBdKSxaPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFcuZG9tYWluKCkpLnJhbmdlKFtGLDBdKSxydD1rci5zY2FsZUxpbmVhcigpLmRvbWFpbihba3IubWluKHMsZnVuY3Rpb24oTnQsemUpe3JldHVybiBMW3plXVswXX0pLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gTFt6ZV1bMV19KV0pLm5pY2UoKS5yYW5nZShbMCxQXSksb3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4ocnQuZG9tYWluKCkpLnJhbmdlKFswLEZdKTtsZXQgc3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4oa3IuZXh0ZW50KHMsXykpLnJhbmdlKFt1LmJyaWdodGVyKCksdS5kYXJrZXIoKV0pLmludGVycG9sYXRlKGtyLmludGVycG9sYXRlSGNsKTt2YXIgU3Q9a3IuYXhpc0JvdHRvbShydCkudGlja3MoTWF0aC5tYXgoMixQLzIwKSksYnQ9a3IuYXhpc1JpZ2h0KFUpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tGb3JtYXQoSSksTXQ9a3IuYXhpc1JpZ2h0KFcpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tTaXplKFArNSkudGlja0Zvcm1hdChCKSxsdD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W25dK050W29dLzJ9LEt0PWtyLmxpbmUoKS54KGZ1bmN0aW9uKE50KXtyZXR1cm4gb3QobHQoTnQpKX0pLnkoZnVuY3Rpb24oTnQpe3JldHVybiBaKE50W2FdKX0pLF90PWZ1bmN0aW9uKE50KXtyZXR1cm4iTSIrb3QobHQoTnRbMF0pKSsiLCIrWigwKSsiTCIrS3QoTnQpLnNsaWNlKDEpKyJMIitvdChsdChOdFtOdC5sZW5ndGgtMV0pKSsiLCIrWigwKX0sY3Q9dGhpcy4kLnN2ZyxYPWtyLnNlbGVjdChjdCksZXQ9WC50cmFuc2l0aW9uKCkuZHVyYXRpb24odCksZHQ9WC5zZWxlY3QoImciKS5jbGFzc2VkKCJzbWFsbCIsZnVuY3Rpb24oKXtyZXR1cm4gUD4wJiZQPD0xNTB9KS5jbGFzc2VkKCJtZWRpdW0iLGZ1bmN0aW9uKCl7cmV0dXJuIFA+MTUwJiZQPD0zMDB9KS5jbGFzc2VkKCJsYXJnZSIsZnVuY3Rpb24oKXtyZXR1cm4gUD4zMDB9KSxxPWV0LnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MubGVmdCsiLCIrQy50b3ArIikiKSxwdD1rci5iaXNlY3RvcihnKS5sZWZ0LGh0PWR0LnNlbGVjdCgiLnN0YWdlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtUdC5zdHlsZSgib3BhY2l0eSIsMSksQ3Quc3R5bGUoIm9wYWNpdHkiLDEpLGF0LnN0eWxlKCJvcGFjaXR5IiwxKSxDZS5zdHlsZSgib3BhY2l0eSIsMSksaC5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7VHQuc3R5bGUoIm9wYWNpdHkiLDApLEN0LnN0eWxlKCJvcGFjaXR5IiwwKSxhdC5zdHlsZSgib3BhY2l0eSIsMCksQ2Uuc3R5bGUoIm9wYWNpdHkiLDApLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLCExKSxJdC5jbGFzc2VkKCJvdXRsaW5lLWhvdmVyIiwhMSksaC5zdHlsZSgib3BhY2l0eSIsMCl9KS5vbigibW91c2Vtb3ZlIixQdCksd3Q9aHQuc2VsZWN0KCIuYmFja2dyb3VuZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1DLmxlZnQrIiwiKy1DLnRvcCsiKSIpLmF0dHIoIndpZHRoIix4KS5hdHRyKCJoZWlnaHQiLGIpLGt0PWh0LnNlbGVjdEFsbCgiLmhpc3RvZ3JhbSIpLmRhdGEocyksaWU9a3QuZXhpdCgpLnJlbW92ZSgpLGVlPWt0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJoaXN0b2dyYW0iKSxMZT1lZS5tZXJnZShrdCkuc29ydChmdW5jdGlvbihOdCx6ZSl7cmV0dXJuIF8oTnQpLV8oemUpfSksYXI9cS5zZWxlY3RBbGwoIi5oaXN0b2dyYW0iKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKE50KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oTnQpKS1TOjApKyIpIn0pLGZyPWVlLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwiYmFzZWxpbmUiKSx0dD1hci5zZWxlY3QoIi5iYXNlbGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24oTnQpe3JldHVybiBjPT09Im9mZnNldCI/LjE6MH0pLmF0dHIoInkxIixTKS5hdHRyKCJ5MiIsUykuYXR0cigieDIiLFApLCQ9ZWUuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lIiksSXQ9TGUuc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixmdW5jdGlvbihOdCl7cmV0dXJuIF90KE50W2ldKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLCR0PWFyLnNlbGVjdCgiLm91dGxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK1AvRisiLCAiK1MvRisiKSIpLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPyIiOnN0KF8oTnQpKX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPzE6MH0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pLGhlPWVlLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiaG92ZXIiKSxUdD1MZS5zZWxlY3QoIi5ob3ZlciIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pO2hlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsMiksaGUuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigiZHgiLDQpO3ZhciBiZT1kdC5zZWxlY3QoIi54LWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ4Il0pLG50PWJlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEN0PWJlLm1lcmdlKG50KTtudC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMjApLmF0dHIoInkiLDYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCksbnQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDYpLG50LmFwcGVuZCgidGV4dCIpLmF0dHIoImR5IiwxOCk7dmFyIFd0PWR0LnNlbGVjdCgiLnktYXhpcy1ob3ZlciIpLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YShbInkiXSksZmU9V3QuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksYXQ9V3QubWVyZ2UoZmUpO2ZlLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDgpLmF0dHIoInkiLC02KS5hdHRyKCJ3aWR0aCIsNDApLmF0dHIoImhlaWdodCIsMTQpLGZlLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsNikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKSxmZS5hcHBlbmQoInRleHQiKS5hdHRyKCJkeCIsOCkuYXR0cigiZHkiLDQpO3ZhciBzZT1kdC5zZWxlY3QoIi55LXNsaWNlLWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pLFF0PXNlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLENlPXNlLm1lcmdlKFF0KTtRdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSxRdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksUXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KSxxLnNlbGVjdCgiLnkuYXhpcy5zbGljZSIpLnN0eWxlKCJvcGFjaXR5IixjPT09Im9mZnNldCI/MDoxKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIisoYz09PSJvZmZzZXQiPy1TOjApKyIpIikuY2FsbChNdCkscS5zZWxlY3QoIi54LmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIitrKyIpIikuY2FsbChTdCkscS5zZWxlY3QoIi55LmF4aXMiKS5zdHlsZSgib3BhY2l0eSIsYz09PSJvZmZzZXQiPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUCsiLCAiKyhjPT09Im9mZnNldCI/MDprKSsiKSIpLmNhbGwoYnQpLHEuc2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigiZmlsbCIsIiNhYWEiKSxxLnNlbGVjdEFsbCgiLmF4aXMgcGF0aC5kb21haW4iKS5hdHRyKCJzdHJva2UiLCJub25lIik7ZnVuY3Rpb24gUHQoKXt2YXIgTnQ9a3IubW91c2UodGhpcyksemU9cnQuaW52ZXJ0KE50WzBdKSx5bj1VLmludmVydChOdFsxXSk7ZnVuY3Rpb24gV2koY24pe3JldHVybiBNYXRoLm1pbihjbltpXS5sZW5ndGgtMSxwdChjbltpXSx6ZSkpfXZhciBBcixQYT0xLzAsaG87VHQuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbixjeCl7dmFyIHJwPVdpKGNuKTtobz1jbjt2YXIgSz1ydChjbltpXVtycF1bbl0rY25baV1bcnBdW29dLzIpLGd0PVcoY25baV1bcnBdW2FdKSxFdD1jPT09Im9mZnNldCI/VShfKGNuKSktKFMtZ3QpOmd0LHh0PU1hdGguYWJzKE50WzFdLUV0KTtyZXR1cm4geHQ8UGEmJihQYT14dCxBcj1jbiksInRyYW5zbGF0ZSgiK0srIiwiK2d0KyIpIn0pLFR0LnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3ZhciBjeD1XaShjbik7cmV0dXJuIGNuW2ldW2N4XVthXX0pLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pLEl0LmNsYXNzZWQoIm91dGxpbmUtaG92ZXIiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pO3ZhciBJYT1XaShobyk7Q3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK3J0KGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMikrIiwgIitrKyIpIn0pLnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3JldHVybiBCKGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMil9KTt2YXIgbHg9YnQudGlja0Zvcm1hdCgpO2F0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oY24pe3JldHVybiJ0cmFuc2xhdGUoIitQKyIsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oQXIpKTowKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyIiOiJub25lIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGx4KF8oQXIpKX0pO3ZhciBjbT1NdC50aWNrRm9ybWF0KCk7Q2UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK1ArIiwgIisoYz09PSJvZmZzZXQiPzA6VyhBcltpXVtJYV1bYV0pKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyJub25lIjoiIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGNtKEFyW2ldW0lhXVthXSl9KTt2YXIgSjA9a3IubW91c2UoY3QpO2guc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhKMFswXSsxNSkrInB4LCIrKEowWzFdLTE1KSsicHgpIikuc2VsZWN0KCJzcGFuIikudGV4dChjPT09Im9mZnNldCI/Y20oQXJbaV1bSWFdW2FdKToocj09PSJzdGVwIj8ic3RlcCAiOiIiKStseChfKEFyKSkpfX19O01hLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJ0b29sdGlwIj48c3Bhbj48L3NwYW4+PC9kaXY+CiAgICA8c3ZnIGlkPSJzdmciPgogICAgICA8Zz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB4Ij48L2c+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeSI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHkgc2xpY2UiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ic3RhZ2UiPgogICAgICAgICAgPHJlY3QgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgY2xhc3M9IngtYXhpcy1ob3ZlciI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJ5LWF4aXMtaG92ZXIiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ieS1zbGljZS1heGlzLWhvdmVyIj48L2c+CiAgICAgIDwvZz4KICAgIDwvc3ZnPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6ICNmZmY7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yOiAjZmZmOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcjogIzAwMDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6IHZhcigKICAgICAgICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yCiAgICAgICAgKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgZm9udC1mYW1pbHk6IHJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgewogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWxsOiByZWQ7CiAgICAgIH0KCiAgICAgIC5oaXN0b2dyYW0gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuaG92ZXIgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyIGNpcmNsZSB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAuaG92ZXIgdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2s7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyLmhvdmVyLWNsb3Nlc3QgY2lyY2xlIHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYmFzZWxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLm91dGxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yKTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAub3V0bGluZS5vdXRsaW5lLWhvdmVyIHsKICAgICAgICBzdHJva2U6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIsCiAgICAgIC55LWF4aXMtaG92ZXIsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktYXhpcy1ob3ZlciAubGFiZWwsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgLmxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB0ZXh0LWFuY2hvcjogZW5kOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgbGluZSwKICAgICAgLnktYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIGxpbmUgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHJlY3QsCiAgICAgIC55LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciByZWN0IHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcik7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLAogICAgICAueC1heGlzLWhvdmVyIHRleHQsCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICBjb2xvcjogdmFyKC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5heGlzIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC5heGlzIHBhdGguZG9tYWluIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICB9CgogICAgICAuYXhpcyAudGljayBsaW5lIHsKICAgICAgICBzdHJva2U6ICNkZGQ7CiAgICAgIH0KCiAgICAgIC5heGlzLnNsaWNlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuYXhpcy5zbGljZSAudGljayBsaW5lIHsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAyOwogICAgICB9CgogICAgICAuc21hbGwgLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6Zmlyc3Qtb2YtdHlwZSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6bGFzdC1vZi10eXBlIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5tZWRpdW0gLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubWVkaXVtIC5heGlzIC50aWNrOm50aC1jaGlsZCgybiArIDEpIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyAudGljazpudGgtY2hpbGQoMm4gKyAxKSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwibW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsInRpbWVQcm9wZXJ0eSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsImJpbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwiZHgiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE1hLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxNYS5wcm90b3R5cGUsIm1vZGVUcmFuc2l0aW9uRHVyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxNYS5wcm90b3R5cGUsIl9hdHRhY2hlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxNYS5wcm90b3R5cGUsIl9uYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTWEucHJvdG90eXBlLCJfZGF0YSIsdm9pZCAwKTtFKFtCdCgidGltZVByb3BlcnR5IiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sTWEucHJvdG90eXBlLCJfcmVkcmF3T25DaGFuZ2UiLG51bGwpO0UoW0J0KCJtb2RlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxNYS5wcm90b3R5cGUsIl9tb2RlUmVkcmF3IixudWxsKTtNYT1FKFt5dCgidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiKV0sTWEpO2Z1bmN0aW9uIHB1cihlKXtsZXRbdCxyLG5dPWU7cmV0dXJue3dhbGxfdGltZTp0LHN0ZXA6cixtaW46TG0obi5tYXAoKFtpLCxdKT0+aSkpLG1heDpsdShuLm1hcCgoWyxpXSk9PmkpKSxidWNrZXRzOm4ubWFwKChbaSxvLGFdKT0+KHtsZWZ0OmkscmlnaHQ6byxjb3VudDphfSkpfX1mdW5jdGlvbiBkdXIoZSx0LHIsbj0zMCl7KHQ9PT12b2lkIDB8fHI9PW51bGwpJiYodD0wLHI9MCkscj09PXQmJihyPXQqMS4xKzEsdD10LzEuMS0xKTtsZXQgaT0oci10KS9uLG89MCxhPVtdO2ZvcihsZXQgcz0wO3M8bjtzKyspe2xldCBsPXQrcyppLGM9bCtpLHU9MDtmb3IoO288ZS5idWNrZXRzLmxlbmd0aDspe2xldCBoPU1hdGgubWluKHIsZS5idWNrZXRzW29dLnJpZ2h0KSxmPU1hdGgubWF4KHQsZS5idWNrZXRzW29dLmxlZnQpO2lmKGgtZj4wKXtsZXQgZD1NYXRoLm1pbihoLGMpLU1hdGgubWF4KGYsbCksZz1kLyhoLWYpKmUuYnVja2V0c1tvXS5jb3VudDt1Kz1kPjA/ZzowfWVsc2V7bGV0IGQ9Yz49cjt1Kz1sPD1mJiYoZD9oPD1jOmg8Yyk/ZS5idWNrZXRzW29dLmNvdW50OjB9aWYoaD5jKWJyZWFrO28rK31hLnB1c2goe3g6bCxkeDppLHk6dX0pfXJldHVybiBhfWZ1bmN0aW9uIHJjZShlKXtsZXQgdD1lLm1hcChwdXIpLHI9TG0odCxpPT5pLm1pbiksbj1sdSh0LGk9PmkubWF4KTtyZXR1cm4gdC5tYXAoaT0+KHt3YWxsX3RpbWU6aS53YWxsX3RpbWUsc3RlcDppLnN0ZXAsYmluczpkdXIoaSxyLG4pfSkpfXZhciBFYT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz12ZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9Q24obyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPXJjZShuKSxvPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHIpO3RoaXMuJC5jaGFydC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9leHBhbmRlZD0hMX1fcmVsb2FkT25SdW5UYWdSZXF1ZXN0TWFuYWdlckNoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odCl9cmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9fTtFYS50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPCEtLQogICAgICBUaGUgbWFpbiBoaXN0b2dyYW0gdGhhdCB3ZSByZW5kZXIuIERhdGEgaXMgc2V0IGRpcmVjdGx5IHdpdGgKICAgICAgXGBzZXRTZXJpZXNEYXRhXGAsIG5vdCB3aXRoIGEgYm91bmQgcHJvcGVydHkuCiAgICAtLT4KICAgIDx2ei1oaXN0b2dyYW0tdGltZXNlcmllcwogICAgICBpZD0iY2hhcnQiCiAgICAgIHRpbWUtcHJvcGVydHk9IltbdGltZVByb3BlcnR5XV0iCiAgICAgIG1vZGU9IltbaGlzdG9ncmFtTW9kZV1dIgogICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iCiAgICA+PC92ei1oaXN0b2dyYW0tdGltZXNlcmllcz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIGhlaWdodDogMjM1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogNzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogOTAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRWEucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxFYS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVhLnByb3RvdHlwZSwibG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxFYS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwidGltZVByb3BlcnR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwiaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEVhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFYS5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtCdCgicnVuIiwidGFnIiwicmVxdWVzdE1hbmFnZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnUmVxdWVzdE1hbmFnZXJDaGFuZ2UiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3VwZGF0ZURhdGFUb0xvYWQiLG51bGwpO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFYS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RWE9RShbeXQoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKV0sRWEpO3ZhciBscz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2hpc3RvZ3JhbU1vZGU9Im9mZnNldCIsdGhpcy5fdGltZVByb3BlcnR5PSJzdGVwIix0aGlzLl9yZXN0YW1wPSExLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1fcmVkcmF3Q2F0ZWdvcnlQYW5lKHQscil7IXJ8fHQudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKG49Pm4ucmVkcmF3KCkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEhpc3RvZ3JhbXMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD12ZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihSSC5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49UkgubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSGlzdG9ncmFtcygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtaGlzdG9ncmFtLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtscy50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJoaXN0b2dyYW1Nb2RlU2VsZWN0b3IiCiAgICAgICAgICAgICAgbmFtZT0iSGlzdG9ncmFtIG1vZGUiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X2hpc3RvZ3JhbU1vZGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im92ZXJsYXkiPm92ZXJsYXk8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJvZmZzZXQiPm9mZnNldDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJ0aW1lUHJvcGVydHlTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJPZmZzZXQgdGltZSBheGlzIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lUHJvcGVydHl9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaGlzdG9ncmFtIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtaGlzdG9ncmFtLWxvYWRlcgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHRpbWUtcHJvcGVydHk9IltbX3RpbWVQcm9wZXJ0eV1dIgogICAgICAgICAgICAgICAgICBoaXN0b2dyYW0tbW9kZT0iW1tfaGlzdG9ncmFtTW9kZV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1oaXN0b2dyYW0tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxscy5wcm90b3R5cGUsIl90aW1lUHJvcGVydHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGxzLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbHMucHJvdG90eXBlLCJfcmVzdGFtcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLGxzLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO2xzPUUoW3l0KCJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIildLGxzKTt2YXIgdTM9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG49ITApe3RoaXMuX2FwaVVybD10LHRoaXMuX3JlcXVlc3RNYW5hZ2VyPXIsdGhpcy5fdXNlSHR0cEdldD1ufWdldEV4cGVyaW1lbnQodCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCJleHBlcmltZW50Iix0KX1nZXREb3dubG9hZFVybCh0LHIsbil7cmV0dXJuIHRoaXMuX2FwaVVybCsiL2Rvd25sb2FkX2RhdGE/IituZXcgVVJMU2VhcmNoUGFyYW1zKHtmb3JtYXQ6dCxjb2x1bW5zVmlzaWJpbGl0eTpKU09OLnN0cmluZ2lmeShuKSxyZXF1ZXN0OkpTT04uc3RyaW5naWZ5KHIpfSl9bGlzdFNlc3Npb25Hcm91cHModCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCJzZXNzaW9uX2dyb3VwcyIsdCl9bGlzdE1ldHJpY0V2YWxzKHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgibWV0cmljX2V2YWxzIix0KX1fc2VuZFJlcXVlc3QodCxyKXtpZih0aGlzLl91c2VIdHRwR2V0KXtsZXQgbz1lbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocikpLGE9dGhpcy5fYXBpVXJsKyIvIit0KyI/cmVxdWVzdD0iK287cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSl9bGV0IG49bmV3IFV4O24ud2l0aENyZWRlbnRpYWxzPSEwLG4ubWV0aG9kVHlwZT1BbS5QT1NULG4uY29udGVudFR5cGU9InRleHQvcGxhaW4iLG4uYm9keT1KU09OLnN0cmluZ2lmeShyKTtsZXQgaT10aGlzLl9hcGlVcmwrIi8iK3Q7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3RXaXRoT3B0aW9ucyhpLG4pfX07dmFyIGZjZT1FZShPZSgpLDEpO3ZhciBOSD1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm9yaWVudGF0aW9uPSJob3Jpem9udGFsIn19O05ILnRlbXBsYXRlPVFgCiAgICA8c2xvdCBuYW1lPSJjb250ZW50Ij48L3Nsb3Q+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0IHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgc2xvdCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIHNsb3QgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QgOjpzbG90dGVkKCo6bm90KDpsYXN0LWNoaWxkKSkgewogICAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1kaXZpZGVyLWNvbG9yLCAjY2NjKTsKICAgICAgfQoKICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSd2ZXJ0aWNhbCddKSA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogNXB4OwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgOjpzbG90dGVkKCo6bm90KDpsYXN0LWNoaWxkKSkgewogICAgICAgIGJvcmRlci1yaWdodC13aWR0aDogNXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmcscmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE5ILnByb3RvdHlwZSwib3JpZW50YXRpb24iLHZvaWQgMCk7Tkg9RShbeXQoImhwYXJhbXMtc3BsaXQtbGF5b3V0IildLE5IKTt2YXIgY3M9e307S3MoY3Mse2NvbHVtblZhbHVlQnlJbmRleDooKT0+eDAsY29sdW1uVmFsdWVCeVZpc2libGVJbmRleDooKT0+RkgsZXVjbGlkZWFuRGlzdDooKT0+aDMsZmlsdGVyU2V0OigpPT5NdXIsZ2V0QWJzb2x1dGVDb2x1bW5JbmRleDooKT0+T0gsaGFzaE9mU3RyaW5nOigpPT5tY3QsaHBhcmFtTmFtZTooKT0+RmQsaHBhcmFtVmFsdWVCeUluZGV4OigpPT5hY2UsaHBhcmFtVmFsdWVCeU5hbWU6KCk9Pm9jZSxocGFyYW1WYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT51Y2UsaXNOdWxsT3JVbmRlZmluZWQ6KCk9PmJ1cixsMk5vcm1TcXVhcmVkOigpPT5wMyxtZXRyaWNOYW1lOigpPT5RdSxtZXRyaWNWYWx1ZUJ5SW5kZXg6KCk9PnNjZSxtZXRyaWNWYWx1ZUJ5TmFtZTooKT0+ZjMsbWV0cmljVmFsdWVCeVZpc2libGVJbmRleDooKT0+ekgsbnVtQ29sdW1uczooKT0+aGN0LG51bUhQYXJhbXM6KCk9Pm5jZSxudW1NZXRyaWNzOigpPT5pY2UsbnVtVmlzaWJsZUNvbHVtbnM6KCk9Pl91cixudW1WaXNpYmxlSFBhcmFtczooKT0+bGNlLG51bVZpc2libGVNZXRyaWNzOigpPT5jY2UsbnVtZXJpY0NvbHVtbkV4dGVudDooKT0+ZmN0LHBvaW50VG9SZWN0YW5nbGVEaXN0OigpPT5oY2UscHJldHR5UHJpbnQ6KCk9PmIwLHByZXR0eVByaW50SFBhcmFtVmFsdWVCeU5hbWU6KCk9Pnl1cixwcmV0dHlQcmludE1ldHJpY1ZhbHVlQnlOYW1lOigpPT52dXIscXVhZFRyZWVWaXNpdFBvaW50c0luRGlzazooKT0+U3VyLHF1YWRUcmVlVmlzaXRQb2ludHNJblJlY3Q6KCk9Pnd1cixyb3RhdGVTdHI6KCk9Pnh1cixzY2hlbWFDb2x1bW5OYW1lOigpPT51Y3Qsc2NoZW1hVmlzaWJsZUNvbHVtbk5hbWU6KCk9Pmd1cixzZXNzaW9uR3JvdXBXaXRoTmFtZTooKT0+cGN0LHNldEFycmF5T2JzZXJ2YWJseTooKT0+ZGN0LHRyYW5zbGF0ZVN0cjooKT0+X1AsdmlzaWJsZU51bWVyaWNDb2x1bW5FeHRlbnQ6KCk9PmdQfSk7dmFyIERIPUVlKE9lKCksMSk7ZnVuY3Rpb24gRmQoZSl7cmV0dXJuIGUuZGlzcGxheU5hbWUhPT0iIiYmZS5kaXNwbGF5TmFtZSE9PXZvaWQgMD9lLmRpc3BsYXlOYW1lOmUubmFtZX1mdW5jdGlvbiBRdShlKXtpZihlLmRpc3BsYXlOYW1lIT09IiImJmUuZGlzcGxheU5hbWUhPT12b2lkIDApcmV0dXJuIGUuZGlzcGxheU5hbWU7bGV0IHQ9ZS5uYW1lLmdyb3VwLHI9ZS5uYW1lLnRhZztyZXR1cm4gdD09PXZvaWQgMCYmKHQ9IiIpLHI9PT12b2lkIDAmJihyPSIiKSx0PT09IiI/cjp0KyIuIityfWZ1bmN0aW9uIHVjdChlLHQpe2lmKHQ8ZS5ocGFyYW1Db2x1bW5zLmxlbmd0aClyZXR1cm4gRmQoZS5ocGFyYW1Db2x1bW5zW3RdLmhwYXJhbUluZm8pO2xldCByPXQtZS5ocGFyYW1Db2x1bW5zLmxlbmd0aDtyZXR1cm4gUXUoZS5tZXRyaWNDb2x1bW5zW3JdLm1ldHJpY0luZm8pfWZ1bmN0aW9uIG5jZShlKXtyZXR1cm4gZS5ocGFyYW1Db2x1bW5zLmxlbmd0aH1mdW5jdGlvbiBpY2UoZSl7cmV0dXJuIGUubWV0cmljQ29sdW1ucy5sZW5ndGh9ZnVuY3Rpb24gaGN0KGUpe3JldHVybiBuY2UoZSkraWNlKGUpfWZ1bmN0aW9uIG9jZShlLHQpe3JldHVybiBlW3RdfWZ1bmN0aW9uIGYzKGUsdCl7cmV0dXJuIGUuZmluZChyPT5ESC5pc0VxdWFsKHIubmFtZSx0KSl9ZnVuY3Rpb24gYWNlKGUsdCxyKXtyZXR1cm4gdC5ocGFyYW1zW2UuaHBhcmFtQ29sdW1uc1tyXS5ocGFyYW1JbmZvLm5hbWVdfWZ1bmN0aW9uIHNjZShlLHQscil7bGV0IG49ZS5tZXRyaWNDb2x1bW5zW3JdLm1ldHJpY0luZm8ubmFtZSxpPWYzKHQubWV0cmljVmFsdWVzLG4pO3JldHVybiBpPT09dm9pZCAwP3ZvaWQgMDppLnZhbHVlfWZ1bmN0aW9uIHgwKGUsdCxyKXtyZXR1cm4gcjxlLmhwYXJhbUNvbHVtbnMubGVuZ3RoP2FjZShlLHQscik6c2NlKGUsdCxyLWUuaHBhcmFtQ29sdW1ucy5sZW5ndGgpfWZ1bmN0aW9uIGZjdChlLHQscil7cmV0dXJuIGFhKHQsbj0+eDAoZSxuLHIpKX1mdW5jdGlvbiBPSChlLHQscil7bGV0IG47aWYocjx0LmhwYXJhbUluZm9zLmxlbmd0aCluPWUuaHBhcmFtQ29sdW1ucy5maW5kSW5kZXgoaT0+aS5ocGFyYW1JbmZvLm5hbWU9PT10LmhwYXJhbUluZm9zW3JdLm5hbWUpO2Vsc2V7bGV0IGk9ci10LmhwYXJhbUluZm9zLmxlbmd0aCxvPXQubWV0cmljSW5mb3NbaV0ubmFtZTtuPWUuaHBhcmFtQ29sdW1ucy5sZW5ndGgrZS5tZXRyaWNDb2x1bW5zLmZpbmRJbmRleChhPT5hLm1ldHJpY0luZm8ubmFtZT09PW8pfXJldHVybiBjb25zb2xlLmFzc2VydChuIT09LTEpLG59ZnVuY3Rpb24gZ3VyKGUsdCl7aWYodDxlLmhwYXJhbUluZm9zLmxlbmd0aClyZXR1cm4gRmQoZS5ocGFyYW1JbmZvc1t0XSk7bGV0IHI9dC1lLmhwYXJhbUluZm9zLmxlbmd0aDtyZXR1cm4gUXUoZS5tZXRyaWNJbmZvc1tyXSl9ZnVuY3Rpb24gbGNlKGUpe3JldHVybiBlLmhwYXJhbUluZm9zLmxlbmd0aH1mdW5jdGlvbiBjY2UoZSl7cmV0dXJuIGUubWV0cmljSW5mb3MubGVuZ3RofWZ1bmN0aW9uIF91cihlKXtyZXR1cm4gbGNlKGUpK2NjZShlKX1mdW5jdGlvbiBnUChlLHQscil7cmV0dXJuIGFhKHQsbj0+RkgoZSxuLHIpKX1mdW5jdGlvbiB5dXIoZSx0KXtyZXR1cm4gYjAob2NlKGUsdCkpfWZ1bmN0aW9uIHZ1cihlLHQpe3JldHVybiBiMChmMyhlLHQpKX1mdW5jdGlvbiBwY3QoZSx0KXtyZXR1cm4gZS5maW5kKHI9PnIubmFtZT09PXQpfWZ1bmN0aW9uIHVjZShlLHQscil7cmV0dXJuIHQuaHBhcmFtc1tlLmhwYXJhbUluZm9zW3JdLm5hbWVdfWZ1bmN0aW9uIHpIKGUsdCxyKXtsZXQgbj1lLm1ldHJpY0luZm9zW3JdLm5hbWUsaT1mMyh0Lm1ldHJpY1ZhbHVlcyxuKTtyZXR1cm4gaT09PXZvaWQgMD92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiBGSChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1JbmZvcy5sZW5ndGg/dWNlKGUsdCxyKTp6SChlLHQsci1lLmhwYXJhbUluZm9zLmxlbmd0aCl9ZnVuY3Rpb24gYjAoZSl7cmV0dXJuIERILmlzTnVtYmVyKGUpP2UudG9QcmVjaXNpb24oNSk6ZT09PXZvaWQgMD8iIjplLnRvU3RyaW5nKCl9ZnVuY3Rpb24gcDMoZSx0KXtyZXR1cm4gZSplK3QqdH1mdW5jdGlvbiBoMyhlLHQscixuKXtyZXR1cm4gTWF0aC5zcXJ0KHAzKGUtcix0LW4pKX1mdW5jdGlvbiBoY2UoZSx0LHIsbixpLG8pe2lmKGU8ciYmdDxuKXJldHVybiBoMyhlLHQscixuKTtpZihyPD1lJiZlPGkmJnQ8bilyZXR1cm4gbi10O2lmKGk8PWUmJnQ8bilyZXR1cm4gaDMoZSx0LGksbik7aWYoZTxyJiZuPD10JiZ0PG8pcmV0dXJuIHItZTtpZihyPD1lJiZlPGkmJm48PXQmJnQ8bylyZXR1cm4gMDtpZihpPD1lJiZuPD10JiZ0PG8pcmV0dXJuIGUtaTtpZihlPHImJm88PXQpcmV0dXJuIGgzKGUsdCxyLG8pO2lmKHI8PWUmJmU8aSYmbzw9dClyZXR1cm4gdC1vO2lmKGk8PWUmJm88PXQpcmV0dXJuIGgzKGUsdCxpLG8pO3Rocm93IlBvaW50ICh4LHkpIG11c3QgYmUgaW4gb25lIG9mIHRoZSByZWdpb25zIGRlZmluZWQgYWJvdmUuIn1mdW5jdGlvbiBfUChlLHQpe3JldHVybiB0PT09dm9pZCAwPyJ0cmFuc2xhdGUoIitlKyIpIjoidHJhbnNsYXRlKCIrZSsiLCIrdCsiKSJ9ZnVuY3Rpb24geHVyKGUsdCxyKXtsZXQgbj0icm90YXRlKCIrZTtyZXR1cm4gdCE9PXZvaWQgMCYmciE9PXZvaWQgMCYmKG49bisiLCIrdCsiLCIrciksbj1uKyIpIixufWZ1bmN0aW9uIGJ1cihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiB3dXIoZSx0LHIsbixpLG8pe2UudmlzaXQoKGEscyxsLGMsdSk9PntpZihhLmxlbmd0aD09PXZvaWQgMCl7ZG97bGV0IGg9ZS54KCkoYS5kYXRhKSxmPWUueSgpKGEuZGF0YSk7dDw9aCYmaDxuJiZyPD1mJiZmPGkmJm8oYS5kYXRhKX13aGlsZShhPWEubmV4dCk7cmV0dXJuITB9cmV0dXJuIHM+PW58fGM8PXR8fGw+PWl8fHU8PXJ9KX1mdW5jdGlvbiBTdXIoZSx0LHIsbixpKXtlLnZpc2l0KChvLGEscyxsLGMpPT57aWYoby5sZW5ndGg9PT12b2lkIDApe2Rve2xldCB1PWUueCgpKG8uZGF0YSksaD1lLnkoKShvLmRhdGEpLGY9aDModCxyLHUsaCk7Zjw9biYmaShvLmRhdGEsZil9d2hpbGUobz1vLm5leHQpO3JldHVybiEwfXJldHVybiBoY2UodCxyLGEscyxsLGMpPm59KX1mdW5jdGlvbiBNdXIoZSx0KXtsZXQgcj1uZXcgU2V0O3JldHVybiBlLmZvckVhY2gobj0+e3QobikmJnIuYWRkKG4pfSkscn1mdW5jdGlvbiBkY3QoZSx0LHIpe2xldCBuPWUuZ2V0KHQsZSk7aWYoIUFycmF5LmlzQXJyYXkobikpe2Uuc2V0KHQscik7cmV0dXJufWUuc3BsaWNlLmFwcGx5KGUsW3QsMCxuLmxlbmd0aF0uY29uY2F0KHIpKX1mdW5jdGlvbiBtY3QoZSl7bGV0IHQ9MDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil0PXQqMzErZS5jaGFyQ29kZUF0KHIpJjQyOTQ5NjcyOTU7cmV0dXJuIHQrRUkoMiwzMSl9dmFyIHRpPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbmZpZ3VyYXRpb249e3NjaGVtYTp7aHBhcmFtQ29sdW1uczpBcnJheSgpLG1ldHJpY0NvbHVtbnM6QXJyYXkoKX0sY29sdW1uc1Zpc2liaWxpdHk6QXJyYXkoKSx2aXNpYmxlU2NoZW1hOntocGFyYW1JbmZvczpBcnJheSgpLG1ldHJpY0luZm9zOkFycmF5KCl9fSx0aGlzLnNlc3Npb25Hcm91cHM9W10sdGhpcy5kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcz0hMSx0aGlzLmRhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zPSExLHRoaXMuX3N0YXR1c2VzPVt7dmFsdWU6IlNUQVRVU19VTktOT1dOIixkaXNwbGF5TmFtZToiVW5rbm93biIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfU1VDQ0VTUyIsZGlzcGxheU5hbWU6IlN1Y2Nlc3MiLGFsbG93ZWQ6ITB9LHt2YWx1ZToiU1RBVFVTX0ZBSUxVUkUiLGRpc3BsYXlOYW1lOiJGYWlsdXJlIixhbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19SVU5OSU5HIixkaXNwbGF5TmFtZToiUnVubmluZyIsYWxsb3dlZDohMH1dLHRoaXMuX2dldEV4cGVyaW1lbnRSZXNvbHZlZD1uZXcgUHJvbWlzZSh0PT57dGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQ9dH0pLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9wYWdlU2l6ZUlucHV0PXt2YWx1ZToiMTAwIixpbnZhbGlkOiExfSx0aGlzLl9wYWdlTnVtYmVySW5wdXQ9e3ZhbHVlOiIxIixpbnZhbGlkOiExfSx0aGlzLl9wYWdlQ291bnRTdHI9Ij8iLHRoaXMuX2hwYXJhbU5hbWU9RmQsdGhpcy5fbWV0cmljTmFtZT1RdSx0aGlzLl9wcmV0dHlQcmludD1iMH1yZWxvYWQoKXt0aGlzLl9xdWVyeVNlcnZlcigpfV9jc3ZVcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwiY3N2Iil9X2pzb25VcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwianNvbiIpfV9sYXRleFVybCh0LHIpe3JldHVybiB0aGlzLl9kb3dubG9hZERhdGFVcmwodCxyLCJsYXRleCIpfV9kb3dubG9hZERhdGFVcmwodCxyLG4pe2xldCBpPXIuY29sdW1uc1Zpc2liaWxpdHk7cmV0dXJuIHRoaXMuYmFja2VuZC5nZXREb3dubG9hZFVybChuLHQsaSl9X2NvbXB1dGVFeHBlcmltZW50QW5kUmVsYXRlZFByb3BzKCl7bGV0IHQ9Y3M7aWYodC5pc051bGxPclVuZGVmaW5lZCh0aGlzLmJhY2tlbmQpfHx0LmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZXhwZXJpbWVudE5hbWUpKXJldHVybjtsZXQgcj17ZXhwZXJpbWVudE5hbWU6dGhpcy5leHBlcmltZW50TmFtZX07dGhpcy5iYWNrZW5kLmdldEV4cGVyaW1lbnQocikudGhlbihuPT57ZmNlLmlzRXF1YWwobix0aGlzLl9leHBlcmltZW50KXx8KHRoaXMuc2V0KCJfZXhwZXJpbWVudCIsbiksdGhpcy5fY29tcHV0ZUhQYXJhbXMoKSx0aGlzLl9jb21wdXRlTWV0cmljcygpLHRoaXMuX3F1ZXJ5U2VydmVyKCksdGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQoKSl9KS5maW5hbGx5KCgpPT57dGhpcy5fY29tcHV0ZURhdGFGb3VuZCgpfSl9X2NvbXB1dGVEYXRhRm91bmQoKXtsZXQgdD1Cb29sZWFuKHRoaXMuX2V4cGVyaW1lbnQmJnRoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MmJnRoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MubGVuZ3RoPjAmJnRoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MmJnRoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MubGVuZ3RoPjApO3RoaXMuc2V0KCJkYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcyIsdCksdGhpcy5zZXQoImRhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zIiwhdCl9X2NvbXB1dGVIUGFyYW1zKCl7bGV0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5ocGFyYW1JbmZvcy5mb3JFYWNoKChuLGkpPT57bGV0IG89e2luZm86bixkaXNwbGF5ZWQ6aTw1LGZpbHRlcjp7fX07by5pbmZvLmhhc093blByb3BlcnR5KCJkb21haW5EaXNjcmV0ZSIpPyhvLmZpbHRlci5kb21haW5EaXNjcmV0ZT1bXSxvLmluZm8uZG9tYWluRGlzY3JldGUuZm9yRWFjaChhPT57by5maWx0ZXIuZG9tYWluRGlzY3JldGUucHVzaCh7dmFsdWU6YSxjaGVja2VkOiEwfSl9KSk6by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX0JPT0wiP28uZmlsdGVyLmRvbWFpbkRpc2NyZXRlPVt7dmFsdWU6ITEsY2hlY2tlZDohMH0se3ZhbHVlOiEwLGNoZWNrZWQ6ITB9XTpvLmluZm8udHlwZT09PSJEQVRBX1RZUEVfRkxPQVQ2NCI/by5maWx0ZXIuaW50ZXJ2YWw9e21pbjp7dmFsdWU6IiIsaW52YWxpZDohMX0sbWF4Ont2YWx1ZToiIixpbnZhbGlkOiExfX06by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX1NUUklORyI/by5maWx0ZXIucmVnZXhwPSIiOmNvbnNvbGUud2FybigidW5rbm93biBocGFyYW0uaW5mby50eXBlOiAlcyIsby5pbmZvLnR5cGUpLHQucHVzaChvKX0pLHRoaXMuc2V0KCJfaHBhcmFtcyIsdCl9X2NvbXB1dGVNZXRyaWNzKCl7bGV0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5tZXRyaWNJbmZvcy5mb3JFYWNoKChuLGkpPT57bGV0IG89e2luZm86bixmaWx0ZXI6e2ludGVydmFsOnttaW46e3ZhbHVlOiIiLGludmFsaWQ6ITF9LG1heDp7dmFsdWU6IiIsaW52YWxpZDohMX19fSxkaXNwbGF5ZWQ6aTw1fTt0LnB1c2gobyl9KSx0aGlzLnNldCgiX21ldHJpY3MiLHQpfV9jb21wdXRlU2NoZW1hKCl7cmV0dXJuIXRoaXMuX2hwYXJhbXN8fCF0aGlzLl9tZXRyaWNzP3tocGFyYW1Db2x1bW5zOltdLG1ldHJpY0NvbHVtbnM6W119OntocGFyYW1Db2x1bW5zOnRoaXMuX2hwYXJhbXMubWFwKHQ9Pih7aHBhcmFtSW5mbzp0LmluZm99KSksbWV0cmljQ29sdW1uczp0aGlzLl9tZXRyaWNzLm1hcCh0PT4oe21ldHJpY0luZm86dC5pbmZvfSkpfX1fdXBkYXRlQ29uZmlndXJhdGlvbigpe3RoaXMuZGVib3VuY2UoIl91cGRhdGVDb25maWd1cmF0aW9uIiwoKT0+e3RoaXMuY29uZmlndXJhdGlvbj17c2NoZW1hOnRoaXMuX2NvbXB1dGVTY2hlbWEoKSxjb2x1bW5zVmlzaWJpbGl0eTp0aGlzLl9jb21wdXRlQ29sdW1uc1Zpc2liaWxpdHkoKSx2aXNpYmxlU2NoZW1hOnRoaXMuX2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl9fSl9X2NvbXB1dGVDb2x1bW5zVmlzaWJpbGl0eSgpe3JldHVybiF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcz9bXTp0aGlzLl9ocGFyYW1zLm1hcCh0PT50LmRpc3BsYXllZCkuY29uY2F0KHRoaXMuX21ldHJpY3MubWFwKHQ9PnQuZGlzcGxheWVkKSl9X2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl7aWYoIXRoaXMuX2hwYXJhbXN8fCF0aGlzLl9tZXRyaWNzKXJldHVybntocGFyYW1JbmZvczpbXSxtZXRyaWNJbmZvczpbXX07bGV0IHQ9dGhpcy5faHBhcmFtcy5maWx0ZXIobj0+bi5kaXNwbGF5ZWQpLm1hcChuPT5uLmluZm8pLHI9dGhpcy5fbWV0cmljcy5maWx0ZXIobj0+bi5kaXNwbGF5ZWQpLm1hcChuPT5uLmluZm8pO3JldHVybntocGFyYW1JbmZvczp0LG1ldHJpY0luZm9zOnJ9fV9xdWVyeVNlcnZlcigpe3RoaXMuZGVib3VuY2UoInF1ZXJ5U2VydmVyIiwoKT0+dGhpcy5fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCksMTAwKX1fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCl7aWYoISghdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3MpKXJldHVybiB0aGlzLl9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCkudGhlbih0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxsYWJsZSgoe3ZhbHVlOnQsY2FuY2VsbGVkOnJ9KT0+e2lmKCFyKXtpZih0LnRvdGFsU2l6ZT49MCl7bGV0IG49K3RoaXMuX3BhZ2VTaXplSW5wdXQudmFsdWU7dGhpcy5zZXQoIl9wYWdlQ291bnRTdHIiLFN0cmluZyhNYXRoLmNlaWwodC50b3RhbFNpemUvbikpKSx0aGlzLnNldCgiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIix0LnRvdGFsU2l6ZSl9ZWxzZSB0aGlzLnNldCgiX3BhZ2VDb3VudFN0ciIsIj8iKSx0aGlzLnNldCgiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIiwiVW5rbm93biIpO2RjdCh0aGlzLCJzZXNzaW9uR3JvdXBzIix0LnNlc3Npb25Hcm91cHMpfX0pKX1fc2VuZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2xldCB0PXRoaXMuX2J1aWxkTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCk7aWYodCE9PW51bGwpcmV0dXJuIHRoaXMuc2V0KCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHQpLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyLmNhbmNlbEFsbCgpLHRoaXMuYmFja2VuZC5saXN0U2Vzc2lvbkdyb3Vwcyh0KX1fYnVpbGRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKXtsZXQgdD10aGlzLHI9ITA7ZnVuY3Rpb24gbih1KXtsZXQgaD10LmdldCh1KyIubWluLnZhbHVlIik7Y29uc29sZS5hc3NlcnQoaCE9PXZvaWQgMCk7bGV0IGY9aD09PSIiPyItSW5maW5pdHkiOitoO3Quc2V0KHUrIi5taW4uaW52YWxpZCIsaXNOYU4oZikpLHI9ciYmIWlzTmFOKGYpO2xldCBwPXQuZ2V0KHUrIi5tYXgudmFsdWUiKTtjb25zb2xlLmFzc2VydChwIT09dm9pZCAwKTtsZXQgZD1wPT09IiI/IkluZmluaXR5IjorcDtyZXR1cm4gdC5zZXQodSsiLm1heC5pbnZhbGlkIixpc05hTihkKSkscj1yJiYhaXNOYU4oZCksaXNOYU4oZil8fGlzTmFOKGQpP251bGw6e21pblZhbHVlOmYsbWF4VmFsdWU6ZH19ZnVuY3Rpb24gaSh1KXtsZXQgaD10LmdldCh1KyIudmFsdWUiKTtjb25zb2xlLmFzc2VydChoIT09dm9pZCAwKTtsZXQgZj0raCxwPU51bWJlci5pc0ludGVnZXIoZikmJmY+MDtyZXR1cm4gdC5zZXQodSsiLmludmFsaWQiLCFwKSxyPXImJnAscD9mOm51bGx9bGV0IG89dGhpcy5fc3RhdHVzZXMuZmlsdGVyKHU9PnUuYWxsb3dlZCkubWFwKHU9PnUudmFsdWUpLGE9W107aWYodGhpcy5faHBhcmFtcy5mb3JFYWNoKCh1LGgpPT57bGV0IGY9e2hwYXJhbTp1LmluZm8ubmFtZX07dS5maWx0ZXIuZG9tYWluRGlzY3JldGU/KGYuZmlsdGVyRGlzY3JldGU9W10sdS5maWx0ZXIuZG9tYWluRGlzY3JldGUuZm9yRWFjaChwPT57cC5jaGVja2VkJiZmLmZpbHRlckRpc2NyZXRlLnB1c2gocC52YWx1ZSl9KSk6dS5maWx0ZXIuaW50ZXJ2YWw/Zi5maWx0ZXJJbnRlcnZhbD1uKCJfaHBhcmFtcy4iK2grIi5maWx0ZXIuaW50ZXJ2YWwiKTp1LmZpbHRlci5yZWdleHAmJihmLmZpbHRlclJlZ2V4cD11LmZpbHRlci5yZWdleHApLGEucHVzaChmKX0pLHRoaXMuX21ldHJpY3MuZm9yRWFjaCgodSxoKT0+e2xldCBmPXttZXRyaWM6dS5pbmZvLm5hbWUsZmlsdGVySW50ZXJ2YWw6bigiX21ldHJpY3MuIitoKyIuZmlsdGVyLmludGVydmFsIil9O2EucHVzaChmKX0pLHRoaXMuX3NvcnRCeUluZGV4IT09dm9pZCAwJiZ0aGlzLl9zb3J0RGlyZWN0aW9uIT09dm9pZCAwKXtpZighKHRoaXMuX3NvcnRCeUluZGV4IGluIGEpKXJldHVybiBjb25zb2xlLmVycm9yKCJObyBjb2x1bW4gaW4gY29sUGFyYW1zIHdpdGggaW5kZXggc29ydEJ5SW5kZXg6ICVzIix0aGlzLl9zb3J0QnlJbmRleCksbnVsbDthW3RoaXMuX3NvcnRCeUluZGV4XS5vcmRlcj10aGlzLl9zb3J0RGlyZWN0aW9uPT09MD8iT1JERVJfQVNDIjoiT1JERVJfREVTQyJ9bGV0IHM9aSgiX3BhZ2VOdW1iZXJJbnB1dCIpfHwwLGw9aSgiX3BhZ2VTaXplSW5wdXQiKXx8MDtpZighcilyZXR1cm4gbnVsbDtsZXQgYz1sKihzLTEpO3JldHVybntleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lLGFsbG93ZWRTdGF0dXNlczpvLGNvbFBhcmFtczphLHN0YXJ0SW5kZXg6YyxzbGljZVNpemU6bH19X21ldHJpY1NvcnRCeUluZGV4KHQpe3JldHVybiB0K3RoaXMuX2hwYXJhbXMubGVuZ3RofX07dGkudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dCBvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIGh5cGVycGFyYW1ldGVycyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SHlwZXJwYXJhbWV0ZXJzPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tfaHBhcmFtc319IiBhcz0iaHBhcmFtIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhwYXJhbSI+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgIGNoZWNrZWQ9Int7aHBhcmFtLmRpc3BsYXllZH19IgogICAgICAgICAgICAgIGNsYXNzPSJocGFyYW0tY2hlY2tib3giCiAgICAgICAgICAgID4KICAgICAgICAgICAgICBbW19ocGFyYW1OYW1lKGhwYXJhbS5pbmZvKV1dCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgIDwhLS0gUHJlY2lzZWx5IG9uZSBvZiB0aGUgdGVtcGxhdGVzIGJlbG93IHdpbGwgYmUgc3RhbXBlZC4tLT4KICAgICAgICAgICAgPCEtLSAxLiBBIGxpc3Qgb2YgY2hlY2tib3hlcyAtLT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hwYXJhbS5maWx0ZXIuZG9tYWluRGlzY3JldGVdXSI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW2hwYXJhbS5maWx0ZXIuZG9tYWluRGlzY3JldGVdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tpdGVtLmNoZWNrZWR9fSIKICAgICAgICAgICAgICAgICAgY2xhc3M9ImRpc2NyZXRlLXZhbHVlLWNoZWNrYm94IgogICAgICAgICAgICAgICAgICBvbi1jaGFuZ2U9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgW1tfcHJldHR5UHJpbnQoaXRlbS52YWx1ZSldXQogICAgICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8IS0tIDIuIEEgbnVtZXJpYyBpbnRlcnZhbCAtLT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWxdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iTWluIgogICAgICAgICAgICAgICAgdmFsdWU9Int7aHBhcmFtLmZpbHRlci5pbnRlcnZhbC5taW4udmFsdWV9fSIKICAgICAgICAgICAgICAgIGFsbG93ZWRfcGF0dGVybj0iWzAtOS5lXFwtXSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgICAgICBpbnZhbGlkPSJbW2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWluLmludmFsaWRdXSIKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSItaW5maW5pdHkiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iTWF4IgogICAgICAgICAgICAgICAgdmFsdWU9Int7aHBhcmFtLmZpbHRlci5pbnRlcnZhbC5tYXgudmFsdWV9fSIKICAgICAgICAgICAgICAgIGFsbG93ZWRfcGF0dGVybj0iWzAtOS5lXFwtXSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgICAgICBpbnZhbGlkPSJbW2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWF4LmludmFsaWRdXSIKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSIraW5maW5pdHkiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwhLS0gMy4gQSByZWdleHAgLS0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLnJlZ2V4cF1dIj4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJSZWd1bGFyIGV4cHJlc3Npb24iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLnJlZ2V4cH19IgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gbWV0cmljcyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+TWV0cmljczwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7X21ldHJpY3N9fSIgYXM9Im1ldHJpYyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRyaWMiPgogICAgICAgICAgICA8IS0tIFRPRE8oZXJleik6IE1ha2UgaXQgZWFzaWVyIHRvIGhhbmRsZSBhIGxhcmdlIG51bWJlciBvZgogICAgICAgICAgICAgICAgICBtZXRyaWNzOgogICAgICAgICAgICAgICAgICAxLiBBZGQgYW4gJ2lzb2xhdG9yJyByYWRpby1idXR0b24gdG8gc2VsZWN0IGp1c3Qgb25lCiAgICAgICAgICAgICAgICAgIG1ldHJpYyBhbmQKICAgICAgICAgICAgICAgICAgaGlkZSBhbGwgdGhlIHJlc3QKICAgICAgICAgICAgICAgICAgMi4gQWRkIGEgJ3RvZ2dsZS1hbGwnIGJ1dHRvbiB0aGF0IHdpbGwgaGlkZS91bmhpZGUKICAgICAgICAgICAgICAgICAgICBhbGwgdGhlCiAgICAgICAgICAgICAgICAgIG1ldHJpY3MuCiAgICAgICAgICAgICAgICAgIFVzZSBzaW1pbGFyIGxvZ2ljL2FwcGVhcmFuY2UgdG8gdGhlIHJ1bi1zZWxlY3RvciBvZgogICAgICAgICAgICAgICAgICBzY2FsYXJzLi0tPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjaGVja2VkPSJ7e21ldHJpYy5kaXNwbGF5ZWR9fSIKICAgICAgICAgICAgICBjbGFzcz0ibWV0cmljLWNoZWNrYm94IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgW1tfbWV0cmljTmFtZShtZXRyaWMuaW5mbyldXQogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iTWluIgogICAgICAgICAgICAgICAgdmFsdWU9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5taW4udmFsdWV9fSIKICAgICAgICAgICAgICAgIGFsbG93ZWQtcGF0dGVybj0iWzAtOS5lXFwtXSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgICAgICBpbnZhbGlkPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWluLmludmFsaWR9fSIKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSItaW5maW5pdHkiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iTWF4IgogICAgICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgdmFsdWU9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5tYXgudmFsdWV9fSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgICAgICBpbnZhbGlkPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWF4LmludmFsaWR9fSIKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSIraW5maW5pdHkiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gc3RhdHVzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TdGF0dXM8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19zdGF0dXNlc11dIiBhcz0ic3RhdHVzIj4KICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e3N0YXR1cy5hbGxvd2VkfX0iIG9uLWNoYW5nZT0iX3F1ZXJ5U2VydmVyIj4KICAgICAgICAgICAgW1tzdGF0dXMuZGlzcGxheU5hbWVdXQogICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBzb3J0aW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Tb3J0aW5nPC9kaXY+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgIGxhYmVsPSJTb3J0IGJ5IgogICAgICAgICAgb24tc2VsZWN0ZWQtaXRlbS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICBzZWxlY3RlZD0ie3tfc29ydEJ5SW5kZXh9fSIKICAgICAgICAgICAgb24tc2VsZWN0ZWQtaXRlbS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2hwYXJhbXNdXSIgYXM9ImhwYXJhbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+IFtbX2hwYXJhbU5hbWUoaHBhcmFtLmluZm8pXV0gPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19tZXRyaWNzXV0iIGFzPSJtZXRyaWMiPgogICAgICAgICAgICAgIDxwYXBlci1pdGVtPiBbW19tZXRyaWNOYW1lKG1ldHJpYy5pbmZvKV1dIDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgIGxhYmVsPSJEaXJlY3Rpb24iCiAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgICAgPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zb3J0RGlyZWN0aW9ufX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1pdGVtPkFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0+RGVzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIHBhZ2luZyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UGFnaW5nPC9kaXY+CiAgICAgICAgPGRpdj4KICAgICAgICAgIE51bWJlciBvZiBtYXRjaGluZyBzZXNzaW9uIGdyb3VwczogW1tfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHJdXQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50IHBhZ2UtbnVtYmVyLWlucHV0Ij4KICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICBsYWJlbD0iUGFnZSAjIgogICAgICAgICAgICB2YWx1ZT0ie3tfcGFnZU51bWJlcklucHV0LnZhbHVlfX0iCiAgICAgICAgICAgIGFsbG93ZWQtcGF0dGVybj0iWzAtOV0iCiAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgIGludmFsaWQ9IltbX3BhZ2VOdW1iZXJJbnB1dC5pbnZhbGlkXV0iCiAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgICAgPGRpdiBzbG90PSJzdWZmaXgiIGNsYXNzPSJwYWdlLXN1ZmZpeCI+LyBbW19wYWdlQ291bnRTdHJdXTwvZGl2PgogICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCBwYWdlLXNpemUtaW5wdXQiPgogICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgIGxhYmVsPSJNYXggIyBvZiBzZXNzaW9uIGdyb3VwcyBwZXIgcGFnZToiCiAgICAgICAgICAgIHZhbHVlPSJ7e19wYWdlU2l6ZUlucHV0LnZhbHVlfX0iCiAgICAgICAgICAgIGFsbG93ZWQtcGF0dGVybj0iWzAtOV0iCiAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgIGludmFsaWQ9IltbX3BhZ2VTaXplSW5wdXQuaW52YWxpZF1dIgogICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICA+CiAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBkb3dubG9hZCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXNzaW9uR3JvdXBzUmVxdWVzdF1dIj4KICAgICAgICAgIERvd25sb2FkIGRhdGEgYXMKICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJjc3ZMaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLmNzdiIKICAgICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX3Nlc3Npb25Hcm91cHNSZXF1ZXN0LCBjb25maWd1cmF0aW9uKV1dIgogICAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgICAgPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJqc29uTGluayIKICAgICAgICAgICAgICBkb3dubG9hZD0iaHBhcmFtc190YWJsZS5qc29uIgogICAgICAgICAgICAgIGhyZWY9IltbX2pzb25VcmwoX3Nlc3Npb25Hcm91cHNSZXF1ZXN0LCBjb25maWd1cmF0aW9uKV1dIgogICAgICAgICAgICAgID5KU09OPC9hCiAgICAgICAgICAgID4KICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBpZD0ibGF0ZXhMaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLnRleCIKICAgICAgICAgICAgICBocmVmPSJbW19sYXRleFVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkxhVGVYPC9hCiAgICAgICAgICAgID4KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CiAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA3cHg7CiAgICAgIH0KICAgICAgLmRpc2NyZXRlLXZhbHVlLWNoZWNrYm94LAogICAgICAubWV0cmljLWNoZWNrYm94LAogICAgICAuaHBhcmFtLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuZGlzY3JldGUtdmFsdWUtY2hlY2tib3ggewogICAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4OwogICAgICB9CiAgICAgIC5ocGFyYW0sCiAgICAgIC5tZXRyaWMgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5pbmxpbmUtZWxlbWVudCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiA0MCU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgIH0KICAgICAgLnBhZ2UtbnVtYmVyLWlucHV0IHsKICAgICAgICB3aWR0aDogMjAlOwogICAgICB9CiAgICAgIC5wYWdlLXNpemUtaW5wdXQgewogICAgICAgIHdpZHRoOiA2MCU7CiAgICAgIH0KICAgICAgdmFhZGluLXNwbGl0LWxheW91dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIHBhcGVyLWxpc3Rib3ggewogICAgICAgIG1heC1oZWlnaHQ6IDE1ZW07CiAgICAgIH0KICAgICAgLnBhZ2Utc3VmZml4IHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdGkucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdGkucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRpLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx0aS5wcm90b3R5cGUsImRhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHRpLnByb3RvdHlwZSwiZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdGkucHJvdG90eXBlLCJfZXhwZXJpbWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sdGkucHJvdG90eXBlLCJfaHBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sdGkucHJvdG90eXBlLCJfbWV0cmljcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRpLnByb3RvdHlwZSwiX3N0YXR1c2VzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRpLnByb3RvdHlwZSwiX2dldEV4cGVyaW1lbnRSZXNvbHZlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLHRpLnByb3RvdHlwZSwiX3Jlc29sdmVHZXRFeHBlcmltZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRpLnByb3RvdHlwZSwiX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHRpLnByb3RvdHlwZSwiX3NvcnRCeUluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHRpLnByb3RvdHlwZSwiX3NvcnREaXJlY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdGkucHJvdG90eXBlLCJfcGFnZVNpemVJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0aS5wcm90b3R5cGUsIl9wYWdlTnVtYmVySW5wdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdGkucHJvdG90eXBlLCJfcGFnZUNvdW50U3RyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHRpLnByb3RvdHlwZSwiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRpLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cHNSZXF1ZXN0Iix2b2lkIDApO0UoW0J0KCJiYWNrZW5kIiwiZXhwZXJpbWVudE5hbWUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHRpLnByb3RvdHlwZSwiX2NvbXB1dGVFeHBlcmltZW50QW5kUmVsYXRlZFByb3BzIixudWxsKTtFKFtCdCgiX2hwYXJhbXMuKiIsIl9tZXRyaWNzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHRpLnByb3RvdHlwZSwiX3VwZGF0ZUNvbmZpZ3VyYXRpb24iLG51bGwpO3RpPUUoW3l0KCJ0Zi1ocGFyYW1zLXF1ZXJ5LXBhbmUiKV0sdGkpO3ZhciBxY3Q9RWUoT2UoKSwxKTt2YXIgZ2N0PXR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMhPW51bGwmJndpbmRvdy5jdXN0b21FbGVtZW50cy5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrIT09dm9pZCAwO3ZhciBpdj0oZSx0LHI9bnVsbCk9Pntmb3IoO3QhPT1yOyl7bGV0IG49dC5uZXh0U2libGluZztlLnJlbW92ZUNoaWxkKHQpLHQ9bn19O3ZhciBZYz1ge3tsaXQtJHtTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMil9fX1gLF9jdD1gPCEtLSR7WWN9LS0+YCxwY2U9bmV3IFJlZ0V4cChgJHtZY318JHtfY3R9YCksZDM9IiRsaXQkIixvdj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMucGFydHM9W10sdGhpcy5lbGVtZW50PXI7bGV0IG49W10saT1bXSxvPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoci5jb250ZW50LDEzMyxudWxsLCExKSxhPTAscz0tMSxsPTAse3N0cmluZ3M6Yyx2YWx1ZXM6e2xlbmd0aDp1fX09dDtmb3IoO2w8dTspe2xldCBoPW8ubmV4dE5vZGUoKTtpZihoPT09bnVsbCl7by5jdXJyZW50Tm9kZT1pLnBvcCgpO2NvbnRpbnVlfWlmKHMrKyxoLm5vZGVUeXBlPT09MSl7aWYoaC5oYXNBdHRyaWJ1dGVzKCkpe2xldCBmPWguYXR0cmlidXRlcyx7bGVuZ3RoOnB9PWYsZD0wO2ZvcihsZXQgZz0wO2c8cDtnKyspZGNlKGZbZ10ubmFtZSxkMykmJmQrKztmb3IoO2QtLSA+MDspe2xldCBnPWNbbF0sXz1CSC5leGVjKGcpWzJdLHk9Xy50b0xvd2VyQ2FzZSgpK2QzLHg9aC5nZXRBdHRyaWJ1dGUoeSk7aC5yZW1vdmVBdHRyaWJ1dGUoeSk7bGV0IGI9eC5zcGxpdChwY2UpO3RoaXMucGFydHMucHVzaCh7dHlwZToiYXR0cmlidXRlIixpbmRleDpzLG5hbWU6XyxzdHJpbmdzOmJ9KSxsKz1iLmxlbmd0aC0xfX1oLnRhZ05hbWU9PT0iVEVNUExBVEUiJiYoaS5wdXNoKGgpLG8uY3VycmVudE5vZGU9aC5jb250ZW50KX1lbHNlIGlmKGgubm9kZVR5cGU9PT0zKXtsZXQgZj1oLmRhdGE7aWYoZi5pbmRleE9mKFljKT49MCl7bGV0IHA9aC5wYXJlbnROb2RlLGQ9Zi5zcGxpdChwY2UpLGc9ZC5sZW5ndGgtMTtmb3IobGV0IF89MDtfPGc7XysrKXtsZXQgeSx4PWRbX107aWYoeD09PSIiKXk9WWYoKTtlbHNle2xldCBiPUJILmV4ZWMoeCk7YiE9PW51bGwmJmRjZShiWzJdLGQzKSYmKHg9eC5zbGljZSgwLGIuaW5kZXgpK2JbMV0rYlsyXS5zbGljZSgwLC1kMy5sZW5ndGgpK2JbM10pLHk9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoeCl9cC5pbnNlcnRCZWZvcmUoeSxoKSx0aGlzLnBhcnRzLnB1c2goe3R5cGU6Im5vZGUiLGluZGV4Oisrc30pfWRbZ109PT0iIj8ocC5pbnNlcnRCZWZvcmUoWWYoKSxoKSxuLnB1c2goaCkpOmguZGF0YT1kW2ddLGwrPWd9fWVsc2UgaWYoaC5ub2RlVHlwZT09PTgpaWYoaC5kYXRhPT09WWMpe2xldCBmPWgucGFyZW50Tm9kZTsoaC5wcmV2aW91c1NpYmxpbmc9PT1udWxsfHxzPT09YSkmJihzKyssZi5pbnNlcnRCZWZvcmUoWWYoKSxoKSksYT1zLHRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6c30pLGgubmV4dFNpYmxpbmc9PT1udWxsP2guZGF0YT0iIjoobi5wdXNoKGgpLHMtLSksbCsrfWVsc2V7bGV0IGY9LTE7Zm9yKDsoZj1oLmRhdGEuaW5kZXhPZihZYyxmKzEpKSE9PS0xOyl0aGlzLnBhcnRzLnB1c2goe3R5cGU6Im5vZGUiLGluZGV4Oi0xfSksbCsrfX1mb3IobGV0IGggb2YgbiloLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCl9fSxkY2U9KGUsdCk9PntsZXQgcj1lLmxlbmd0aC10Lmxlbmd0aDtyZXR1cm4gcj49MCYmZS5zbGljZShyKT09PXR9LHlQPWU9PmUuaW5kZXghPT0tMSxZZj0oKT0+ZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIiksQkg9LyhbIFx4MDlceDBhXHgwY1x4MGRdKShbXlwwLVx4MUZceDdGLVx4OUYgIic+PS9dKykoWyBceDA5XHgwYVx4MGNceDBkXSo9WyBceDA5XHgwYVx4MGNceDBkXSooPzpbXiBceDA5XHgwYVx4MGNceDBkIidgPD49XSp8IlteIl0qfCdbXiddKikpJC87dmFyIHljdD0xMzM7ZnVuY3Rpb24gdmN0KGUsdCl7bGV0e2VsZW1lbnQ6e2NvbnRlbnQ6cn0scGFydHM6bn09ZSxpPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIocix5Y3QsbnVsbCwhMSksbz12UChuKSxhPW5bb10scz0tMSxsPTAsYz1bXSx1PW51bGw7Zm9yKDtpLm5leHROb2RlKCk7KXtzKys7bGV0IGg9aS5jdXJyZW50Tm9kZTtmb3IoaC5wcmV2aW91c1NpYmxpbmc9PT11JiYodT1udWxsKSx0LmhhcyhoKSYmKGMucHVzaChoKSx1PT09bnVsbCYmKHU9aCkpLHUhPT1udWxsJiZsKys7YSE9PXZvaWQgMCYmYS5pbmRleD09PXM7KWEuaW5kZXg9dSE9PW51bGw/LTE6YS5pbmRleC1sLG89dlAobixvKSxhPW5bb119Yy5mb3JFYWNoKGg9PmgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKSl9dmFyIEV1cj1lPT57bGV0IHQ9ZS5ub2RlVHlwZT09PTExPzA6MSxyPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZSx5Y3QsbnVsbCwhMSk7Zm9yKDtyLm5leHROb2RlKCk7KXQrKztyZXR1cm4gdH0sdlA9KGUsdD0tMSk9Pntmb3IobGV0IHI9dCsxO3I8ZS5sZW5ndGg7cisrKXtsZXQgbj1lW3JdO2lmKHlQKG4pKXJldHVybiByfXJldHVybi0xfTtmdW5jdGlvbiBtY2UoZSx0LHI9bnVsbCl7bGV0e2VsZW1lbnQ6e2NvbnRlbnQ6bn0scGFydHM6aX09ZTtpZihyPT1udWxsKXtuLmFwcGVuZENoaWxkKHQpO3JldHVybn1sZXQgbz1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKG4seWN0LG51bGwsITEpLGE9dlAoaSkscz0wLGw9LTE7Zm9yKDtvLm5leHROb2RlKCk7KWZvcihsKyssby5jdXJyZW50Tm9kZT09PXImJihzPUV1cih0KSxyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQscikpO2EhPT0tMSYmaVthXS5pbmRleD09PWw7KXtpZihzPjApe2Zvcig7YSE9PS0xOylpW2FdLmluZGV4Kz1zLGE9dlAoaSxhKTtyZXR1cm59YT12UChpLGEpfX12YXIgVHVyPW5ldyBXZWFrTWFwO3ZhciBhdj1lPT50eXBlb2YgZT09ImZ1bmN0aW9uIiYmVHVyLmhhcyhlKTt2YXIgTGw9e30sSEg9e307dmFyIHcwPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLl9fcGFydHM9W10sdGhpcy50ZW1wbGF0ZT10LHRoaXMucHJvY2Vzc29yPXIsdGhpcy5vcHRpb25zPW59dXBkYXRlKHQpe2xldCByPTA7Zm9yKGxldCBuIG9mIHRoaXMuX19wYXJ0cyluIT09dm9pZCAwJiZuLnNldFZhbHVlKHRbcl0pLHIrKztmb3IobGV0IG4gb2YgdGhpcy5fX3BhcnRzKW4hPT12b2lkIDAmJm4uY29tbWl0KCl9X2Nsb25lKCl7bGV0IHQ9Z2N0P3RoaXMudGVtcGxhdGUuZWxlbWVudC5jb250ZW50LmNsb25lTm9kZSghMCk6ZG9jdW1lbnQuaW1wb3J0Tm9kZSh0aGlzLnRlbXBsYXRlLmVsZW1lbnQuY29udGVudCwhMCkscj1bXSxuPXRoaXMudGVtcGxhdGUucGFydHMsaT1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKHQsMTMzLG51bGwsITEpLG89MCxhPTAscyxsPWkubmV4dE5vZGUoKTtmb3IoO288bi5sZW5ndGg7KXtpZihzPW5bb10sIXlQKHMpKXt0aGlzLl9fcGFydHMucHVzaCh2b2lkIDApLG8rKztjb250aW51ZX1mb3IoO2E8cy5pbmRleDspYSsrLGwubm9kZU5hbWU9PT0iVEVNUExBVEUiJiYoci5wdXNoKGwpLGkuY3VycmVudE5vZGU9bC5jb250ZW50KSwobD1pLm5leHROb2RlKCkpPT09bnVsbCYmKGkuY3VycmVudE5vZGU9ci5wb3AoKSxsPWkubmV4dE5vZGUoKSk7aWYocy50eXBlPT09Im5vZGUiKXtsZXQgYz10aGlzLnByb2Nlc3Nvci5oYW5kbGVUZXh0RXhwcmVzc2lvbih0aGlzLm9wdGlvbnMpO2MuaW5zZXJ0QWZ0ZXJOb2RlKGwucHJldmlvdXNTaWJsaW5nKSx0aGlzLl9fcGFydHMucHVzaChjKX1lbHNlIHRoaXMuX19wYXJ0cy5wdXNoKC4uLnRoaXMucHJvY2Vzc29yLmhhbmRsZUF0dHJpYnV0ZUV4cHJlc3Npb25zKGwscy5uYW1lLHMuc3RyaW5ncyx0aGlzLm9wdGlvbnMpKTtvKyt9cmV0dXJuIGdjdCYmKGRvY3VtZW50LmFkb3B0Tm9kZSh0KSxjdXN0b21FbGVtZW50cy51cGdyYWRlKHQpKSx0fX07dmFyIGdjZT13aW5kb3cudHJ1c3RlZFR5cGVzJiZ0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJsaXQtaHRtbCIse2NyZWF0ZUhUTUw6ZT0+ZX0pLEF1cj1gICR7WWN9IGAsUzA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5zdHJpbmdzPXQsdGhpcy52YWx1ZXM9cix0aGlzLnR5cGU9bix0aGlzLnByb2Nlc3Nvcj1pfWdldEhUTUwoKXtsZXQgdD10aGlzLnN0cmluZ3MubGVuZ3RoLTEscj0iIixuPSExO2ZvcihsZXQgaT0wO2k8dDtpKyspe2xldCBvPXRoaXMuc3RyaW5nc1tpXSxhPW8ubGFzdEluZGV4T2YoIjwhLS0iKTtuPShhPi0xfHxuKSYmby5pbmRleE9mKCItLT4iLGErMSk9PT0tMTtsZXQgcz1CSC5leGVjKG8pO3M9PT1udWxsP3IrPW8rKG4/QXVyOl9jdCk6cis9by5zdWJzdHIoMCxzLmluZGV4KStzWzFdK3NbMl0rZDMrc1szXStZY31yZXR1cm4gcis9dGhpcy5zdHJpbmdzW3RdLHJ9Z2V0VGVtcGxhdGVFbGVtZW50KCl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKSxyPXRoaXMuZ2V0SFRNTCgpO3JldHVybiBnY2UhPT12b2lkIDAmJihyPWdjZS5jcmVhdGVIVE1MKHIpKSx0LmlubmVySFRNTD1yLHR9fTt2YXIgcUg9ZT0+ZT09PW51bGx8fCEodHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIiksVkg9ZT0+QXJyYXkuaXNBcnJheShlKXx8ISEoZSYmZVtTeW1ib2wuaXRlcmF0b3JdKSxtMz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7dGhpcy5kaXJ0eT0hMCx0aGlzLmVsZW1lbnQ9dCx0aGlzLm5hbWU9cix0aGlzLnN0cmluZ3M9bix0aGlzLnBhcnRzPVtdO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGgtMTtpKyspdGhpcy5wYXJ0c1tpXT10aGlzLl9jcmVhdGVQYXJ0KCl9X2NyZWF0ZVBhcnQoKXtyZXR1cm4gbmV3IHhQKHRoaXMpfV9nZXRWYWx1ZSgpe2xldCB0PXRoaXMuc3RyaW5ncyxyPXQubGVuZ3RoLTEsbj10aGlzLnBhcnRzO2lmKHI9PT0xJiZ0WzBdPT09IiImJnRbMV09PT0iIil7bGV0IG89blswXS52YWx1ZTtpZih0eXBlb2Ygbz09InN5bWJvbCIpcmV0dXJuIFN0cmluZyhvKTtpZih0eXBlb2Ygbz09InN0cmluZyJ8fCFWSChvKSlyZXR1cm4gb31sZXQgaT0iIjtmb3IobGV0IG89MDtvPHI7bysrKXtpKz10W29dO2xldCBhPW5bb107aWYoYSE9PXZvaWQgMCl7bGV0IHM9YS52YWx1ZTtpZihxSChzKXx8IVZIKHMpKWkrPXR5cGVvZiBzPT0ic3RyaW5nIj9zOlN0cmluZyhzKTtlbHNlIGZvcihsZXQgbCBvZiBzKWkrPXR5cGVvZiBsPT0ic3RyaW5nIj9sOlN0cmluZyhsKX19cmV0dXJuIGkrPXRbcl0saX1jb21taXQoKXt0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSx0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSx0aGlzLl9nZXRWYWx1ZSgpKSl9fSx4UD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXZvaWQgMCx0aGlzLmNvbW1pdHRlcj10fXNldFZhbHVlKHQpe3QhPT1MbCYmKCFxSCh0KXx8dCE9PXRoaXMudmFsdWUpJiYodGhpcy52YWx1ZT10LGF2KHQpfHwodGhpcy5jb21taXR0ZXIuZGlydHk9ITApKX1jb21taXQoKXtmb3IoO2F2KHRoaXMudmFsdWUpOyl7bGV0IHQ9dGhpcy52YWx1ZTt0aGlzLnZhbHVlPUxsLHQodGhpcyl9dGhpcy52YWx1ZSE9PUxsJiZ0aGlzLmNvbW1pdHRlci5jb21taXQoKX19LEJkPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuX19wZW5kaW5nVmFsdWU9dm9pZCAwLHRoaXMub3B0aW9ucz10fWFwcGVuZEludG8odCl7dGhpcy5zdGFydE5vZGU9dC5hcHBlbmRDaGlsZChZZigpKSx0aGlzLmVuZE5vZGU9dC5hcHBlbmRDaGlsZChZZigpKX1pbnNlcnRBZnRlck5vZGUodCl7dGhpcy5zdGFydE5vZGU9dCx0aGlzLmVuZE5vZGU9dC5uZXh0U2libGluZ31hcHBlbmRJbnRvUGFydCh0KXt0Ll9faW5zZXJ0KHRoaXMuc3RhcnROb2RlPVlmKCkpLHQuX19pbnNlcnQodGhpcy5lbmROb2RlPVlmKCkpfWluc2VydEFmdGVyUGFydCh0KXt0Ll9faW5zZXJ0KHRoaXMuc3RhcnROb2RlPVlmKCkpLHRoaXMuZW5kTm9kZT10LmVuZE5vZGUsdC5lbmROb2RlPXRoaXMuc3RhcnROb2RlfXNldFZhbHVlKHQpe3RoaXMuX19wZW5kaW5nVmFsdWU9dH1jb21taXQoKXtpZih0aGlzLnN0YXJ0Tm9kZS5wYXJlbnROb2RlPT09bnVsbClyZXR1cm47Zm9yKDthdih0aGlzLl9fcGVuZGluZ1ZhbHVlKTspe2xldCByPXRoaXMuX19wZW5kaW5nVmFsdWU7dGhpcy5fX3BlbmRpbmdWYWx1ZT1MbCxyKHRoaXMpfWxldCB0PXRoaXMuX19wZW5kaW5nVmFsdWU7dCE9PUxsJiYocUgodCk/dCE9PXRoaXMudmFsdWUmJnRoaXMuX19jb21taXRUZXh0KHQpOnQgaW5zdGFuY2VvZiBTMD90aGlzLl9fY29tbWl0VGVtcGxhdGVSZXN1bHQodCk6dCBpbnN0YW5jZW9mIE5vZGU/dGhpcy5fX2NvbW1pdE5vZGUodCk6VkgodCk/dGhpcy5fX2NvbW1pdEl0ZXJhYmxlKHQpOnQ9PT1ISD8odGhpcy52YWx1ZT1ISCx0aGlzLmNsZWFyKCkpOnRoaXMuX19jb21taXRUZXh0KHQpKX1fX2luc2VydCh0KXt0aGlzLmVuZE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCx0aGlzLmVuZE5vZGUpfV9fY29tbWl0Tm9kZSh0KXt0aGlzLnZhbHVlIT09dCYmKHRoaXMuY2xlYXIoKSx0aGlzLl9faW5zZXJ0KHQpLHRoaXMudmFsdWU9dCl9X19jb21taXRUZXh0KHQpe2xldCByPXRoaXMuc3RhcnROb2RlLm5leHRTaWJsaW5nO3Q9dD09bnVsbD8iIjp0O2xldCBuPXR5cGVvZiB0PT0ic3RyaW5nIj90OlN0cmluZyh0KTtyPT09dGhpcy5lbmROb2RlLnByZXZpb3VzU2libGluZyYmci5ub2RlVHlwZT09PTM/ci5kYXRhPW46dGhpcy5fX2NvbW1pdE5vZGUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobikpLHRoaXMudmFsdWU9dH1fX2NvbW1pdFRlbXBsYXRlUmVzdWx0KHQpe2xldCByPXRoaXMub3B0aW9ucy50ZW1wbGF0ZUZhY3RvcnkodCk7aWYodGhpcy52YWx1ZSBpbnN0YW5jZW9mIHcwJiZ0aGlzLnZhbHVlLnRlbXBsYXRlPT09cil0aGlzLnZhbHVlLnVwZGF0ZSh0LnZhbHVlcyk7ZWxzZXtsZXQgbj1uZXcgdzAocix0LnByb2Nlc3Nvcix0aGlzLm9wdGlvbnMpLGk9bi5fY2xvbmUoKTtuLnVwZGF0ZSh0LnZhbHVlcyksdGhpcy5fX2NvbW1pdE5vZGUoaSksdGhpcy52YWx1ZT1ufX1fX2NvbW1pdEl0ZXJhYmxlKHQpe0FycmF5LmlzQXJyYXkodGhpcy52YWx1ZSl8fCh0aGlzLnZhbHVlPVtdLHRoaXMuY2xlYXIoKSk7bGV0IHI9dGhpcy52YWx1ZSxuPTAsaTtmb3IobGV0IG8gb2YgdClpPXJbbl0saT09PXZvaWQgMCYmKGk9bmV3IEJkKHRoaXMub3B0aW9ucyksci5wdXNoKGkpLG49PT0wP2kuYXBwZW5kSW50b1BhcnQodGhpcyk6aS5pbnNlcnRBZnRlclBhcnQocltuLTFdKSksaS5zZXRWYWx1ZShvKSxpLmNvbW1pdCgpLG4rKztuPHIubGVuZ3RoJiYoci5sZW5ndGg9bix0aGlzLmNsZWFyKGkmJmkuZW5kTm9kZSkpfWNsZWFyKHQ9dGhpcy5zdGFydE5vZGUpe2l2KHRoaXMuc3RhcnROb2RlLnBhcmVudE5vZGUsdC5uZXh0U2libGluZyx0aGlzLmVuZE5vZGUpfX0sYlA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe2lmKHRoaXMudmFsdWU9dm9pZCAwLHRoaXMuX19wZW5kaW5nVmFsdWU9dm9pZCAwLG4ubGVuZ3RoIT09Mnx8blswXSE9PSIifHxuWzFdIT09IiIpdGhyb3cgbmV3IEVycm9yKCJCb29sZWFuIGF0dHJpYnV0ZXMgY2FuIG9ubHkgY29udGFpbiBhIHNpbmdsZSBleHByZXNzaW9uIik7dGhpcy5lbGVtZW50PXQsdGhpcy5uYW1lPXIsdGhpcy5zdHJpbmdzPW59c2V0VmFsdWUodCl7dGhpcy5fX3BlbmRpbmdWYWx1ZT10fWNvbW1pdCgpe2Zvcig7YXYodGhpcy5fX3BlbmRpbmdWYWx1ZSk7KXtsZXQgcj10aGlzLl9fcGVuZGluZ1ZhbHVlO3RoaXMuX19wZW5kaW5nVmFsdWU9TGwscih0aGlzKX1pZih0aGlzLl9fcGVuZGluZ1ZhbHVlPT09TGwpcmV0dXJuO2xldCB0PSEhdGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLnZhbHVlIT09dCYmKHQ/dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsIiIpOnRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5uYW1lKSx0aGlzLnZhbHVlPXQpLHRoaXMuX19wZW5kaW5nVmFsdWU9TGx9fSx3UD1jbGFzcyBleHRlbmRzIG0ze2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcih0LHIsbiksdGhpcy5zaW5nbGU9bi5sZW5ndGg9PT0yJiZuWzBdPT09IiImJm5bMV09PT0iIn1fY3JlYXRlUGFydCgpe3JldHVybiBuZXcgVUgodGhpcyl9X2dldFZhbHVlKCl7cmV0dXJuIHRoaXMuc2luZ2xlP3RoaXMucGFydHNbMF0udmFsdWU6c3VwZXIuX2dldFZhbHVlKCl9Y29tbWl0KCl7dGhpcy5kaXJ0eSYmKHRoaXMuZGlydHk9ITEsdGhpcy5lbGVtZW50W3RoaXMubmFtZV09dGhpcy5fZ2V0VmFsdWUoKSl9fSxVSD1jbGFzcyBleHRlbmRzIHhQe30sX2NlPSExOygoKT0+e3RyeXtsZXQgZT17Z2V0IGNhcHR1cmUoKXtyZXR1cm4gX2NlPSEwLCExfX07d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLGUsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLGUsZSl9Y2F0Y2goZSl7fX0pKCk7dmFyIFNQPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLnZhbHVlPXZvaWQgMCx0aGlzLl9fcGVuZGluZ1ZhbHVlPXZvaWQgMCx0aGlzLmVsZW1lbnQ9dCx0aGlzLmV2ZW50TmFtZT1yLHRoaXMuZXZlbnRDb250ZXh0PW4sdGhpcy5fX2JvdW5kSGFuZGxlRXZlbnQ9aT0+dGhpcy5oYW5kbGVFdmVudChpKX1zZXRWYWx1ZSh0KXt0aGlzLl9fcGVuZGluZ1ZhbHVlPXR9Y29tbWl0KCl7Zm9yKDthdih0aGlzLl9fcGVuZGluZ1ZhbHVlKTspe2xldCBvPXRoaXMuX19wZW5kaW5nVmFsdWU7dGhpcy5fX3BlbmRpbmdWYWx1ZT1MbCxvKHRoaXMpfWlmKHRoaXMuX19wZW5kaW5nVmFsdWU9PT1MbClyZXR1cm47bGV0IHQ9dGhpcy5fX3BlbmRpbmdWYWx1ZSxyPXRoaXMudmFsdWUsbj10PT1udWxsfHxyIT1udWxsJiYodC5jYXB0dXJlIT09ci5jYXB0dXJlfHx0Lm9uY2UhPT1yLm9uY2V8fHQucGFzc2l2ZSE9PXIucGFzc2l2ZSksaT10IT1udWxsJiYocj09bnVsbHx8bik7biYmdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5ldmVudE5hbWUsdGhpcy5fX2JvdW5kSGFuZGxlRXZlbnQsdGhpcy5fX29wdGlvbnMpLGkmJih0aGlzLl9fb3B0aW9ucz1QdXIodCksdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ldmVudE5hbWUsdGhpcy5fX2JvdW5kSGFuZGxlRXZlbnQsdGhpcy5fX29wdGlvbnMpKSx0aGlzLnZhbHVlPXQsdGhpcy5fX3BlbmRpbmdWYWx1ZT1MbH1oYW5kbGVFdmVudCh0KXt0eXBlb2YgdGhpcy52YWx1ZT09ImZ1bmN0aW9uIj90aGlzLnZhbHVlLmNhbGwodGhpcy5ldmVudENvbnRleHR8fHRoaXMuZWxlbWVudCx0KTp0aGlzLnZhbHVlLmhhbmRsZUV2ZW50KHQpfX0sUHVyPWU9PmUmJihfY2U/e2NhcHR1cmU6ZS5jYXB0dXJlLHBhc3NpdmU6ZS5wYXNzaXZlLG9uY2U6ZS5vbmNlfTplLmNhcHR1cmUpO2Z1bmN0aW9uIHhjdChlKXtsZXQgdD1zdi5nZXQoZS50eXBlKTt0PT09dm9pZCAwJiYodD17c3RyaW5nc0FycmF5Om5ldyBXZWFrTWFwLGtleVN0cmluZzpuZXcgTWFwfSxzdi5zZXQoZS50eXBlLHQpKTtsZXQgcj10LnN0cmluZ3NBcnJheS5nZXQoZS5zdHJpbmdzKTtpZihyIT09dm9pZCAwKXJldHVybiByO2xldCBuPWUuc3RyaW5ncy5qb2luKFljKTtyZXR1cm4gcj10LmtleVN0cmluZy5nZXQobikscj09PXZvaWQgMCYmKHI9bmV3IG92KGUsZS5nZXRUZW1wbGF0ZUVsZW1lbnQoKSksdC5rZXlTdHJpbmcuc2V0KG4scikpLHQuc3RyaW5nc0FycmF5LnNldChlLnN0cmluZ3Mscikscn12YXIgc3Y9bmV3IE1hcDt2YXIgTTA9bmV3IFdlYWtNYXAsYmN0PShlLHQscik9PntsZXQgbj1NMC5nZXQodCk7bj09PXZvaWQgMCYmKGl2KHQsdC5maXJzdENoaWxkKSxNMC5zZXQodCxuPW5ldyBCZChPYmplY3QuYXNzaWduKHt0ZW1wbGF0ZUZhY3Rvcnk6eGN0fSxyKSkpLG4uYXBwZW5kSW50byh0KSksbi5zZXRWYWx1ZShlKSxuLmNvbW1pdCgpfTt2YXIgR0g9Y2xhc3N7aGFuZGxlQXR0cmlidXRlRXhwcmVzc2lvbnModCxyLG4saSl7bGV0IG89clswXTtyZXR1cm4gbz09PSIuIj9uZXcgd1AodCxyLnNsaWNlKDEpLG4pLnBhcnRzOm89PT0iQCI/W25ldyBTUCh0LHIuc2xpY2UoMSksaS5ldmVudENvbnRleHQpXTpvPT09Ij8iP1tuZXcgYlAodCxyLnNsaWNlKDEpLG4pXTpuZXcgbTModCxyLG4pLnBhcnRzfWhhbmRsZVRleHRFeHByZXNzaW9uKHQpe3JldHVybiBuZXcgQmQodCl9fSx5Y2U9bmV3IEdIO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93LmxpdEh0bWxWZXJzaW9uc3x8KHdpbmRvdy5saXRIdG1sVmVyc2lvbnM9W10pKS5wdXNoKCIxLjQuMSIpO3ZhciB4Y2U9KGUsdCk9PmAke2V9LS0ke3R9YCxXSD0hMDt0eXBlb2Ygd2luZG93LlNoYWR5Q1NTPT0idW5kZWZpbmVkIj9XSD0hMTp0eXBlb2Ygd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZURvbT09InVuZGVmaW5lZCImJihjb25zb2xlLndhcm4oIkluY29tcGF0aWJsZSBTaGFkeUNTUyB2ZXJzaW9uIGRldGVjdGVkLiBQbGVhc2UgdXBkYXRlIHRvIGF0IGxlYXN0IEB3ZWJjb21wb25lbnRzL3dlYmNvbXBvbmVudHNqc0AyLjAuMiBhbmQgQHdlYmNvbXBvbmVudHMvc2hhZHljc3NAMS4zLjEuIiksV0g9ITEpO3ZhciBrdXI9ZT0+dD0+e2xldCByPXhjZSh0LnR5cGUsZSksbj1zdi5nZXQocik7bj09PXZvaWQgMCYmKG49e3N0cmluZ3NBcnJheTpuZXcgV2Vha01hcCxrZXlTdHJpbmc6bmV3IE1hcH0sc3Yuc2V0KHIsbikpO2xldCBpPW4uc3RyaW5nc0FycmF5LmdldCh0LnN0cmluZ3MpO2lmKGkhPT12b2lkIDApcmV0dXJuIGk7bGV0IG89dC5zdHJpbmdzLmpvaW4oWWMpO2lmKGk9bi5rZXlTdHJpbmcuZ2V0KG8pLGk9PT12b2lkIDApe2xldCBhPXQuZ2V0VGVtcGxhdGVFbGVtZW50KCk7V0gmJndpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGVEb20oYSxlKSxpPW5ldyBvdih0LGEpLG4ua2V5U3RyaW5nLnNldChvLGkpfXJldHVybiBuLnN0cmluZ3NBcnJheS5zZXQodC5zdHJpbmdzLGkpLGl9LFJ1cj1bImh0bWwiLCJzdmciXSxOdXI9ZT0+e1J1ci5mb3JFYWNoKHQ9PntsZXQgcj1zdi5nZXQoeGNlKHQsZSkpO3IhPT12b2lkIDAmJnIua2V5U3RyaW5nLmZvckVhY2gobj0+e2xldHtlbGVtZW50Ontjb250ZW50Oml9fT1uLG89bmV3IFNldDtBcnJheS5mcm9tKGkucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKSkuZm9yRWFjaChhPT57by5hZGQoYSl9KSx2Y3QobixvKX0pfSl9LGJjZT1uZXcgU2V0LER1cj0oZSx0LHIpPT57YmNlLmFkZChlKTtsZXQgbj1yP3IuZWxlbWVudDpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpLGk9dC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpLHtsZW5ndGg6b309aTtpZihvPT09MCl7d2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZVN0eWxlcyhuLGUpO3JldHVybn1sZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2ZvcihsZXQgYz0wO2M8bztjKyspe2xldCB1PWlbY107dS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHUpLGEudGV4dENvbnRlbnQrPXUudGV4dENvbnRlbnR9TnVyKGUpO2xldCBzPW4uY29udGVudDtyP21jZShyLGEscy5maXJzdENoaWxkKTpzLmluc2VydEJlZm9yZShhLHMuZmlyc3RDaGlsZCksd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZVN0eWxlcyhuLGUpO2xldCBsPXMucXVlcnlTZWxlY3Rvcigic3R5bGUiKTtpZih3aW5kb3cuU2hhZHlDU1MubmF0aXZlU2hhZG93JiZsIT09bnVsbCl0Lmluc2VydEJlZm9yZShsLmNsb25lTm9kZSghMCksdC5maXJzdENoaWxkKTtlbHNlIGlmKHIpe3MuaW5zZXJ0QmVmb3JlKGEscy5maXJzdENoaWxkKTtsZXQgYz1uZXcgU2V0O2MuYWRkKGEpLHZjdChyLGMpfX0sd2NlPShlLHQscik9PntpZighcnx8dHlwZW9mIHIhPSJvYmplY3QifHwhci5zY29wZU5hbWUpdGhyb3cgbmV3IEVycm9yKCJUaGUgYHNjb3BlTmFtZWAgb3B0aW9uIGlzIHJlcXVpcmVkLiIpO2xldCBuPXIuc2NvcGVOYW1lLGk9TTAuaGFzKHQpLG89V0gmJnQubm9kZVR5cGU9PT0xMSYmISF0Lmhvc3QsYT1vJiYhYmNlLmhhcyhuKSxzPWE/ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOnQ7aWYoYmN0KGUscyxPYmplY3QuYXNzaWduKHt0ZW1wbGF0ZUZhY3Rvcnk6a3VyKG4pfSxyKSksYSl7bGV0IGw9TTAuZ2V0KHMpO00wLmRlbGV0ZShzKTtsZXQgYz1sLnZhbHVlIGluc3RhbmNlb2YgdzA/bC52YWx1ZS50ZW1wbGF0ZTp2b2lkIDA7RHVyKG4scyxjKSxpdih0LHQuZmlyc3RDaGlsZCksdC5hcHBlbmRDaGlsZChzKSxNMC5zZXQodCxsKX0haSYmbyYmd2luZG93LlNoYWR5Q1NTLnN0eWxlRWxlbWVudCh0Lmhvc3QpfTt2YXIgU2NlO3dpbmRvdy5KU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5PShlLHQpPT5lO3ZhciBDY3Q9e3RvQXR0cmlidXRlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gZT8iIjpudWxsO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6cmV0dXJuIGU9PW51bGw/ZTpKU09OLnN0cmluZ2lmeShlKX1yZXR1cm4gZX0sZnJvbUF0dHJpYnV0ZShlLHQpe3N3aXRjaCh0KXtjYXNlIEJvb2xlYW46cmV0dXJuIGUhPT1udWxsO2Nhc2UgTnVtYmVyOnJldHVybiBlPT09bnVsbD9udWxsOk51bWJlcihlKTtjYXNlIE9iamVjdDpjYXNlIEFycmF5OnJldHVybiBKU09OLnBhcnNlKGUpfXJldHVybiBlfX0sTWNlPShlLHQpPT50IT09ZSYmKHQ9PT10fHxlPT09ZSksd2N0PXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOkNjdCxyZWZsZWN0OiExLGhhc0NoYW5nZWQ6TWNlfSxTY3Q9MSxNY3Q9MTw8MixFY3Q9MTw8MyxUY3Q9MTw8NCxBY3Q9ImZpbmFsaXplZCIsZzM9Y2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5pbml0aWFsaXplKCl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXt0aGlzLmZpbmFsaXplKCk7bGV0IHQ9W107cmV0dXJuIHRoaXMuX2NsYXNzUHJvcGVydGllcy5mb3JFYWNoKChyLG4pPT57bGV0IGk9dGhpcy5fYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4scik7aSE9PXZvaWQgMCYmKHRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuc2V0KGksbiksdC5wdXNoKGkpKX0pLHR9c3RhdGljIF9lbnN1cmVDbGFzc1Byb3BlcnRpZXMoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfY2xhc3NQcm9wZXJ0aWVzIix0aGlzKSkpe3RoaXMuX2NsYXNzUHJvcGVydGllcz1uZXcgTWFwO2xldCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fY2xhc3NQcm9wZXJ0aWVzO3QhPT12b2lkIDAmJnQuZm9yRWFjaCgocixuKT0+dGhpcy5fY2xhc3NQcm9wZXJ0aWVzLnNldChuLHIpKX19c3RhdGljIGNyZWF0ZVByb3BlcnR5KHQscj13Y3Qpe2lmKHRoaXMuX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpLHRoaXMuX2NsYXNzUHJvcGVydGllcy5zZXQodCxyKSxyLm5vQWNjZXNzb3J8fHRoaXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KHQpKXJldHVybjtsZXQgbj10eXBlb2YgdD09InN5bWJvbCI/U3ltYm9sKCk6YF9fJHt0fWAsaT10aGlzLmdldFByb3BlcnR5RGVzY3JpcHRvcih0LG4scik7aSE9PXZvaWQgMCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMucHJvdG90eXBlLHQsaSl9c3RhdGljIGdldFByb3BlcnR5RGVzY3JpcHRvcih0LHIsbil7cmV0dXJue2dldCgpe3JldHVybiB0aGlzW3JdfSxzZXQoaSl7bGV0IG89dGhpc1t0XTt0aGlzW3JdPWksdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwodCxvLG4pfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH19c3RhdGljIGdldFByb3BlcnR5T3B0aW9ucyh0KXtyZXR1cm4gdGhpcy5fY2xhc3NQcm9wZXJ0aWVzJiZ0aGlzLl9jbGFzc1Byb3BlcnRpZXMuZ2V0KHQpfHx3Y3R9c3RhdGljIGZpbmFsaXplKCl7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO2lmKHQuaGFzT3duUHJvcGVydHkoQWN0KXx8dC5maW5hbGl6ZSgpLHRoaXNbQWN0XT0hMCx0aGlzLl9lbnN1cmVDbGFzc1Byb3BlcnRpZXMoKSx0aGlzLl9hdHRyaWJ1dGVUb1Byb3BlcnR5TWFwPW5ldyBNYXAsdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJwcm9wZXJ0aWVzIix0aGlzKSkpe2xldCByPXRoaXMucHJvcGVydGllcyxuPVsuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKSwuLi50eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIj9PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpOltdXTtmb3IobGV0IGkgb2Ygbil0aGlzLmNyZWF0ZVByb3BlcnR5KGkscltpXSl9fXN0YXRpYyBfYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHQscil7bGV0IG49ci5hdHRyaWJ1dGU7cmV0dXJuIG49PT0hMT92b2lkIDA6dHlwZW9mIG49PSJzdHJpbmciP246dHlwZW9mIHQ9PSJzdHJpbmciP3QudG9Mb3dlckNhc2UoKTp2b2lkIDB9c3RhdGljIF92YWx1ZUhhc0NoYW5nZWQodCxyLG49TWNlKXtyZXR1cm4gbih0LHIpfXN0YXRpYyBfcHJvcGVydHlWYWx1ZUZyb21BdHRyaWJ1dGUodCxyKXtsZXQgbj1yLnR5cGUsaT1yLmNvbnZlcnRlcnx8Q2N0LG89dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTppLmZyb21BdHRyaWJ1dGU7cmV0dXJuIG8/byh0LG4pOnR9c3RhdGljIF9wcm9wZXJ0eVZhbHVlVG9BdHRyaWJ1dGUodCxyKXtpZihyLnJlZmxlY3Q9PT12b2lkIDApcmV0dXJuO2xldCBuPXIudHlwZSxpPXIuY29udmVydGVyO3JldHVybihpJiZpLnRvQXR0cmlidXRlfHxDY3QudG9BdHRyaWJ1dGUpKHQsbil9aW5pdGlhbGl6ZSgpe3RoaXMuX3VwZGF0ZVN0YXRlPTAsdGhpcy5fdXBkYXRlUHJvbWlzZT1uZXcgUHJvbWlzZSh0PT50aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyPXQpLHRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzPW5ldyBNYXAsdGhpcy5fc2F2ZUluc3RhbmNlUHJvcGVydGllcygpLHRoaXMucmVxdWVzdFVwZGF0ZUludGVybmFsKCl9X3NhdmVJbnN0YW5jZVByb3BlcnRpZXMoKXt0aGlzLmNvbnN0cnVjdG9yLl9jbGFzc1Byb3BlcnRpZXMuZm9yRWFjaCgodCxyKT0+e2lmKHRoaXMuaGFzT3duUHJvcGVydHkocikpe2xldCBuPXRoaXNbcl07ZGVsZXRlIHRoaXNbcl0sdGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzfHwodGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzPW5ldyBNYXApLHRoaXMuX2luc3RhbmNlUHJvcGVydGllcy5zZXQocixuKX19KX1fYXBwbHlJbnN0YW5jZVByb3BlcnRpZXMoKXt0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXMuZm9yRWFjaCgodCxyKT0+dGhpc1tyXT10KSx0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXM9dm9pZCAwfWNvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5lbmFibGVVcGRhdGluZygpfWVuYWJsZVVwZGF0aW5nKCl7dGhpcy5fZW5hYmxlVXBkYXRpbmdSZXNvbHZlciE9PXZvaWQgMCYmKHRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXIoKSx0aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyPXZvaWQgMCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuKXtyIT09biYmdGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eSh0LG4pfV9wcm9wZXJ0eVRvQXR0cmlidXRlKHQscixuPXdjdCl7bGV0IGk9dGhpcy5jb25zdHJ1Y3RvcixvPWkuX2F0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eSh0LG4pO2lmKG8hPT12b2lkIDApe2xldCBhPWkuX3Byb3BlcnR5VmFsdWVUb0F0dHJpYnV0ZShyLG4pO2lmKGE9PT12b2lkIDApcmV0dXJuO3RoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlfEVjdCxhPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKG8pOnRoaXMuc2V0QXR0cmlidXRlKG8sYSksdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmfkVjdH19X2F0dHJpYnV0ZVRvUHJvcGVydHkodCxyKXtpZih0aGlzLl91cGRhdGVTdGF0ZSZFY3QpcmV0dXJuO2xldCBuPXRoaXMuY29uc3RydWN0b3IsaT1uLl9hdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmdldCh0KTtpZihpIT09dm9pZCAwKXtsZXQgbz1uLmdldFByb3BlcnR5T3B0aW9ucyhpKTt0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZXxUY3QsdGhpc1tpXT1uLl9wcm9wZXJ0eVZhbHVlRnJvbUF0dHJpYnV0ZShyLG8pLHRoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlJn5UY3R9fXJlcXVlc3RVcGRhdGVJbnRlcm5hbCh0LHIsbil7bGV0IGk9ITA7aWYodCE9PXZvaWQgMCl7bGV0IG89dGhpcy5jb25zdHJ1Y3RvcjtuPW58fG8uZ2V0UHJvcGVydHlPcHRpb25zKHQpLG8uX3ZhbHVlSGFzQ2hhbmdlZCh0aGlzW3RdLHIsbi5oYXNDaGFuZ2VkKT8odGhpcy5fY2hhbmdlZFByb3BlcnRpZXMuaGFzKHQpfHx0aGlzLl9jaGFuZ2VkUHJvcGVydGllcy5zZXQodCxyKSxuLnJlZmxlY3Q9PT0hMCYmISh0aGlzLl91cGRhdGVTdGF0ZSZUY3QpJiYodGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXM9PT12b2lkIDAmJih0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcz1uZXcgTWFwKSx0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcy5zZXQodCxuKSkpOmk9ITF9IXRoaXMuX2hhc1JlcXVlc3RlZFVwZGF0ZSYmaSYmKHRoaXMuX3VwZGF0ZVByb21pc2U9dGhpcy5fZW5xdWV1ZVVwZGF0ZSgpKX1yZXF1ZXN0VXBkYXRlKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdFVwZGF0ZUludGVybmFsKHQsciksdGhpcy51cGRhdGVDb21wbGV0ZX1fZW5xdWV1ZVVwZGF0ZSgpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7dGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8TWN0O3RyeXt5aWVsZCB0aGlzLl91cGRhdGVQcm9taXNlfWNhdGNoKHIpe31sZXQgdD10aGlzLnBlcmZvcm1VcGRhdGUoKTtyZXR1cm4gdCE9bnVsbCYmKHlpZWxkIHQpLCF0aGlzLl9oYXNSZXF1ZXN0ZWRVcGRhdGV9KX1nZXQgX2hhc1JlcXVlc3RlZFVwZGF0ZSgpe3JldHVybiB0aGlzLl91cGRhdGVTdGF0ZSZNY3R9Z2V0IGhhc1VwZGF0ZWQoKXtyZXR1cm4gdGhpcy5fdXBkYXRlU3RhdGUmU2N0fXBlcmZvcm1VcGRhdGUoKXtpZighdGhpcy5faGFzUmVxdWVzdGVkVXBkYXRlKXJldHVybjt0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXMmJnRoaXMuX2FwcGx5SW5zdGFuY2VQcm9wZXJ0aWVzKCk7bGV0IHQ9ITEscj10aGlzLl9jaGFuZ2VkUHJvcGVydGllczt0cnl7dD10aGlzLnNob3VsZFVwZGF0ZShyKSx0P3RoaXMudXBkYXRlKHIpOnRoaXMuX21hcmtVcGRhdGVkKCl9Y2F0Y2gobil7dGhyb3cgdD0hMSx0aGlzLl9tYXJrVXBkYXRlZCgpLG59dCYmKHRoaXMuX3VwZGF0ZVN0YXRlJlNjdHx8KHRoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlfFNjdCx0aGlzLmZpcnN0VXBkYXRlZChyKSksdGhpcy51cGRhdGVkKHIpKX1fbWFya1VwZGF0ZWQoKXt0aGlzLl9jaGFuZ2VkUHJvcGVydGllcz1uZXcgTWFwLHRoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlJn5NY3R9Z2V0IHVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuX2dldFVwZGF0ZUNvbXBsZXRlKCl9X2dldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuZ2V0VXBkYXRlQ29tcGxldGUoKX1nZXRVcGRhdGVDb21wbGV0ZSgpe3JldHVybiB0aGlzLl91cGRhdGVQcm9taXNlfXNob3VsZFVwZGF0ZSh0KXtyZXR1cm4hMH11cGRhdGUodCl7dGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMhPT12b2lkIDAmJnRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzLnNpemU+MCYmKHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzLmZvckVhY2goKHIsbik9PnRoaXMuX3Byb3BlcnR5VG9BdHRyaWJ1dGUobix0aGlzW25dLHIpKSx0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcz12b2lkIDApLHRoaXMuX21hcmtVcGRhdGVkKCl9dXBkYXRlZCh0KXt9Zmlyc3RVcGRhdGVkKHQpe319O1NjZT1BY3Q7ZzNbU2NlXT0hMDt2YXIgRWNlPUVsZW1lbnQucHJvdG90eXBlLHlpaT1FY2UubXNNYXRjaGVzU2VsZWN0b3J8fEVjZS53ZWJraXRNYXRjaGVzU2VsZWN0b3I7dmFyIFlIPXdpbmRvdy5TaGFkb3dSb290JiYod2luZG93LlNoYWR5Q1NTPT09dm9pZCAwfHx3aW5kb3cuU2hhZHlDU1MubmF0aXZlU2hhZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBlLFBjdD1TeW1ib2woKSxsdj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe2lmKHIhPT1QY3QpdGhyb3cgbmV3IEVycm9yKCJDU1NSZXN1bHQgaXMgbm90IGNvbnN0cnVjdGFibGUuIFVzZSBgdW5zYWZlQ1NTYCBvciBgY3NzYCBpbnN0ZWFkLiIpO3RoaXMuY3NzVGV4dD10fWdldCBzdHlsZVNoZWV0KCl7cmV0dXJuIHRoaXMuX3N0eWxlU2hlZXQ9PT12b2lkIDAmJihZSD8odGhpcy5fc3R5bGVTaGVldD1uZXcgQ1NTU3R5bGVTaGVldCx0aGlzLl9zdHlsZVNoZWV0LnJlcGxhY2VTeW5jKHRoaXMuY3NzVGV4dCkpOnRoaXMuX3N0eWxlU2hlZXQ9bnVsbCksdGhpcy5fc3R5bGVTaGVldH10b1N0cmluZygpe3JldHVybiB0aGlzLmNzc1RleHR9fSxJY3Q9ZT0+bmV3IGx2KFN0cmluZyhlKSxQY3QpLE91cj1lPT57aWYoZSBpbnN0YW5jZW9mIGx2KXJldHVybiBlLmNzc1RleHQ7aWYodHlwZW9mIGU9PSJudW1iZXIiKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICR7ZX0uIFVzZSAndW5zYWZlQ1NTJyB0byBwYXNzIG5vbi1saXRlcmFsIHZhbHVlcywgYnV0CiAgICAgICAgICAgIHRha2UgY2FyZSB0byBlbnN1cmUgcGFnZSBzZWN1cml0eS5gKX0sQ2k9KGUsLi4udCk9PntsZXQgcj10LnJlZHVjZSgobixpLG8pPT5uK091cihpKStlW28rMV0sZVswXSk7cmV0dXJuIG5ldyBsdihyLFBjdCl9Oyh3aW5kb3cubGl0RWxlbWVudFZlcnNpb25zfHwod2luZG93LmxpdEVsZW1lbnRWZXJzaW9ucz1bXSkpLnB1c2goIjIuNS4xIik7dmFyIFRjZT17fSxNUD1jbGFzcyBleHRlbmRzIGcze3N0YXRpYyBnZXRTdHlsZXMoKXtyZXR1cm4gdGhpcy5zdHlsZXN9c3RhdGljIF9nZXRVbmlxdWVTdHlsZXMoKXtpZih0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9zdHlsZXMiLHRoaXMpKSlyZXR1cm47bGV0IHQ9dGhpcy5nZXRTdHlsZXMoKTtpZihBcnJheS5pc0FycmF5KHQpKXtsZXQgcj0obyxhKT0+by5yZWR1Y2VSaWdodCgocyxsKT0+QXJyYXkuaXNBcnJheShsKT9yKGwscyk6KHMuYWRkKGwpLHMpLGEpLG49cih0LG5ldyBTZXQpLGk9W107bi5mb3JFYWNoKG89PmkudW5zaGlmdChvKSksdGhpcy5fc3R5bGVzPWl9ZWxzZSB0aGlzLl9zdHlsZXM9dD09PXZvaWQgMD9bXTpbdF07dGhpcy5fc3R5bGVzPXRoaXMuX3N0eWxlcy5tYXAocj0+e2lmKHIgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0JiYhWUgpe2xldCBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIuY3NzUnVsZXMpLnJlZHVjZSgoaSxvKT0+aStvLmNzc1RleHQsIiIpO3JldHVybiBJY3Qobil9cmV0dXJuIHJ9KX1pbml0aWFsaXplKCl7c3VwZXIuaW5pdGlhbGl6ZSgpLHRoaXMuY29uc3RydWN0b3IuX2dldFVuaXF1ZVN0eWxlcygpLHRoaXMucmVuZGVyUm9vdD10aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSx3aW5kb3cuU2hhZG93Um9vdCYmdGhpcy5yZW5kZXJSb290IGluc3RhbmNlb2Ygd2luZG93LlNoYWRvd1Jvb3QmJnRoaXMuYWRvcHRTdHlsZXMoKX1jcmVhdGVSZW5kZXJSb290KCl7cmV0dXJuIHRoaXMuYXR0YWNoU2hhZG93KHRoaXMuY29uc3RydWN0b3Iuc2hhZG93Um9vdE9wdGlvbnMpfWFkb3B0U3R5bGVzKCl7bGV0IHQ9dGhpcy5jb25zdHJ1Y3Rvci5fc3R5bGVzO3QubGVuZ3RoIT09MCYmKHdpbmRvdy5TaGFkeUNTUyE9PXZvaWQgMCYmIXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3c/d2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltLnByZXBhcmVBZG9wdGVkQ3NzVGV4dCh0Lm1hcChyPT5yLmNzc1RleHQpLHRoaXMubG9jYWxOYW1lKTpZSD90aGlzLnJlbmRlclJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzPXQubWFwKHI9PnIgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0P3I6ci5zdHlsZVNoZWV0KTp0aGlzLl9uZWVkc1NoaW1BZG9wdGVkU3R5bGVTaGVldHM9ITApfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc1VwZGF0ZWQmJndpbmRvdy5TaGFkeUNTUyE9PXZvaWQgMCYmd2luZG93LlNoYWR5Q1NTLnN0eWxlRWxlbWVudCh0aGlzKX11cGRhdGUodCl7bGV0IHI9dGhpcy5yZW5kZXIoKTtzdXBlci51cGRhdGUodCksciE9PVRjZSYmdGhpcy5jb25zdHJ1Y3Rvci5yZW5kZXIocix0aGlzLnJlbmRlclJvb3Qse3Njb3BlTmFtZTp0aGlzLmxvY2FsTmFtZSxldmVudENvbnRleHQ6dGhpc30pLHRoaXMuX25lZWRzU2hpbUFkb3B0ZWRTdHlsZVNoZWV0cyYmKHRoaXMuX25lZWRzU2hpbUFkb3B0ZWRTdHlsZVNoZWV0cz0hMSx0aGlzLmNvbnN0cnVjdG9yLl9zdHlsZXMuZm9yRWFjaChuPT57bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtpLnRleHRDb250ZW50PW4uY3NzVGV4dCx0aGlzLnJlbmRlclJvb3QuYXBwZW5kQ2hpbGQoaSl9KSl9cmVuZGVyKCl7cmV0dXJuIFRjZX19O01QLmZpbmFsaXplZD0hMDtNUC5yZW5kZXI9d2NlO01QLnNoYWRvd1Jvb3RPcHRpb25zPXttb2RlOiJvcGVuIn07dmFyIENjZT0wLExjdD17fSxqYz0oZSx0LHIpPT57bGV0IG49ciYmci5tb2R1bGVJZHx8YGN1c3RvbS1zdHlsZS1tb2R1bGUtJHtDY2UrK31gO0FycmF5LmlzQXJyYXkodCl8fCh0PXQ/W3RdOltdKSx0LmZvckVhY2goYT0+e2lmKCEoYSBpbnN0YW5jZW9mIGx2KSl0aHJvdyBuZXcgRXJyb3IoIkFuIGl0ZW0gaW4gc3R5bGVzIGlzIG5vdCBvZiB0eXBlIENTU1Jlc3VsdC4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgLiIpO2lmKCFMY3RbYV0pe2xldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKTtzLmlubmVySFRNTD1gCiAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgPHN0eWxlPiR7YS50b1N0cmluZygpfTwvc3R5bGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgYDtsZXQgbD1gY3VzdG9tLXN0eWxlLW1vZHVsZS0ke0NjZSsrfWA7cy5yZWdpc3RlcihsKSxMY3RbYV09bH19KTtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkb20tbW9kdWxlIik7aWYoZSl7bGV0IGE9Y3VzdG9tRWxlbWVudHMuZ2V0KGUpO2EmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCJfX2ZpbmFsaXplZCIpJiZjb25zb2xlLndhcm4oYFRoZSBjdXN0b20gZWxlbWVudCBkZWZpbml0aW9uIGZvciAiJHtlfSIKICAgICAgd2FzIGZpbmFsaXplZCBiZWZvcmUgYSBzdHlsZSBtb2R1bGUgd2FzIHJlZ2lzdGVyZWQuCiAgICAgIE1ha2Ugc3VyZSB0byBhZGQgY29tcG9uZW50IHNwZWNpZmljIHN0eWxlIG1vZHVsZXMgYmVmb3JlCiAgICAgIGltcG9ydGluZyB0aGUgY29ycmVzcG9uZGluZyBjdXN0b20gZWxlbWVudC5gKSxpLnNldEF0dHJpYnV0ZSgidGhlbWUtZm9yIixlKX1sZXQgbz1yJiZyLmluY2x1ZGV8fFtdO2kuaW5uZXJIVE1MPWAKICAgIDx0ZW1wbGF0ZT4KICAgICAgJHtvLm1hcChhPT5gPHN0eWxlIGluY2x1ZGU9JHthfT48L3N0eWxlPmApfQogICAgICAke3QubWFwKGE9PmA8c3R5bGUgaW5jbHVkZT0ke0xjdFthXX0+PC9zdHlsZT5gKX0KICAgIDwvdGVtcGxhdGU+CiAgYCxpLnJlZ2lzdGVyKG4pfTt2YXIga2N0PWNsYXNzIGV4dGVuZHMgSFRNTEVsZW1lbnR7c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoInZhYWRpbi1sdW1vLXN0eWxlcyIsa2N0KTt2YXIgenVyPUNpYAogIDpob3N0IHsKICAgIC8qIEJhc2UgKGJhY2tncm91bmQpICovCiAgICAtLWx1bW8tYmFzZS1jb2xvcjogI2ZmZjsKCiAgICAvKiBUaW50ICovCiAgICAtLWx1bW8tdGludC01cGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjMpOwogICAgLS1sdW1vLXRpbnQtMTBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMzcpOwogICAgLS1sdW1vLXRpbnQtMjBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNDQpOwogICAgLS1sdW1vLXRpbnQtMzBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNSk7CiAgICAtLWx1bW8tdGludC00MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC41Nyk7CiAgICAtLWx1bW8tdGludC01MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC42NCk7CiAgICAtLWx1bW8tdGludC02MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC43KTsKICAgIC0tbHVtby10aW50LTcwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjc3KTsKICAgIC0tbHVtby10aW50LTgwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjg0KTsKICAgIC0tbHVtby10aW50LTkwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjkpOwogICAgLS1sdW1vLXRpbnQ6ICNmZmY7CgogICAgLyogU2hhZGUgKi8KICAgIC0tbHVtby1zaGFkZS01cGN0OiBoc2xhKDIxNCwgNjElLCAyNSUsIDAuMDUpOwogICAgLS1sdW1vLXNoYWRlLTEwcGN0OiBoc2xhKDIxNCwgNTclLCAyNCUsIDAuMSk7CiAgICAtLWx1bW8tc2hhZGUtMjBwY3Q6IGhzbGEoMjE0LCA1MyUsIDIzJSwgMC4xNik7CiAgICAtLWx1bW8tc2hhZGUtMzBwY3Q6IGhzbGEoMjE0LCA1MCUsIDIyJSwgMC4yNik7CiAgICAtLWx1bW8tc2hhZGUtNDBwY3Q6IGhzbGEoMjE0LCA0NyUsIDIxJSwgMC4zOCk7CiAgICAtLWx1bW8tc2hhZGUtNTBwY3Q6IGhzbGEoMjE0LCA0NSUsIDIwJSwgMC41KTsKICAgIC0tbHVtby1zaGFkZS02MHBjdDogaHNsYSgyMTQsIDQzJSwgMTklLCAwLjYxKTsKICAgIC0tbHVtby1zaGFkZS03MHBjdDogaHNsYSgyMTQsIDQyJSwgMTglLCAwLjcyKTsKICAgIC0tbHVtby1zaGFkZS04MHBjdDogaHNsYSgyMTQsIDQxJSwgMTclLCAwLjgzKTsKICAgIC0tbHVtby1zaGFkZS05MHBjdDogaHNsYSgyMTQsIDQwJSwgMTYlLCAwLjk0KTsKICAgIC0tbHVtby1zaGFkZTogaHNsKDIxNCwgMzUlLCAxNSUpOwoKICAgIC8qIENvbnRyYXN0ICovCiAgICAtLWx1bW8tY29udHJhc3QtNXBjdDogdmFyKC0tbHVtby1zaGFkZS01cGN0KTsKICAgIC0tbHVtby1jb250cmFzdC0xMHBjdDogdmFyKC0tbHVtby1zaGFkZS0xMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMjBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTMwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTMwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC00MHBjdDogdmFyKC0tbHVtby1zaGFkZS00MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNTBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTYwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTYwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC03MHBjdDogdmFyKC0tbHVtby1zaGFkZS03MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtODBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtODBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTkwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTkwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdDogdmFyKC0tbHVtby1zaGFkZSk7CgogICAgLyogVGV4dCAqLwogICAgLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0KTsKICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtOTBwY3QpOwogICAgLS1sdW1vLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTcwcGN0KTsKICAgIC0tbHVtby10ZXJ0aWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTUwcGN0KTsKICAgIC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKCiAgICAvKiBQcmltYXJ5ICovCiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvcjogaHNsKDIxNCwgOTAlLCA1MiUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3Q6IGhzbGEoMjE0LCA5MCUsIDUyJSwgMC41KTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0OiBoc2xhKDIxNCwgOTAlLCA1MiUsIDAuMSk7CiAgICAtLWx1bW8tcHJpbWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3IpOwogICAgLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogRXJyb3IgKi8KICAgIC0tbHVtby1lcnJvci1jb2xvcjogaHNsKDMsIDEwMCUsIDYxJSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItNTBwY3Q6IGhzbGEoMywgMTAwJSwgNjAlLCAwLjUpOwogICAgLS1sdW1vLWVycm9yLWNvbG9yLTEwcGN0OiBoc2xhKDMsIDEwMCUsIDYwJSwgMC4xKTsKICAgIC0tbHVtby1lcnJvci10ZXh0LWNvbG9yOiBoc2woMywgOTIlLCA1MyUpOwogICAgLS1sdW1vLWVycm9yLWNvbnRyYXN0LWNvbG9yOiAjZmZmOwoKICAgIC8qIFN1Y2Nlc3MgKi8KICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yOiBoc2woMTQ1LCA4MCUsIDQyJSk7IC8qIGhzbCgxNDQsODIlLDM3JSk7ICovCiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvci01MHBjdDogaHNsYSgxNDUsIDc2JSwgNDQlLCAwLjU1KTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTEwcGN0OiBoc2xhKDE0NSwgNzYlLCA0NCUsIDAuMTIpOwogICAgLS1sdW1vLXN1Y2Nlc3MtdGV4dC1jb2xvcjogaHNsKDE0NSwgMTAwJSwgMzIlKTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbnRyYXN0LWNvbG9yOiAjZmZmOwogIH0KYCxBY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtBY2UuaW5uZXJIVE1MPWA8c3R5bGU+JHt6dXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChBY2UuY29udGVudCk7dmFyIEZ1cj1DaWAKICBbdGhlbWV+PSdkYXJrJ10gewogICAgLyogQmFzZSAoYmFja2dyb3VuZCkgKi8KICAgIC0tbHVtby1iYXNlLWNvbG9yOiBoc2woMjE0LCAzNSUsIDIxJSk7CgogICAgLyogVGludCAqLwogICAgLS1sdW1vLXRpbnQtNXBjdDogaHNsYSgyMTQsIDY1JSwgODUlLCAwLjA2KTsKICAgIC0tbHVtby10aW50LTEwcGN0OiBoc2xhKDIxNCwgNjAlLCA4MCUsIDAuMTQpOwogICAgLS1sdW1vLXRpbnQtMjBwY3Q6IGhzbGEoMjE0LCA2NCUsIDgyJSwgMC4yMyk7CiAgICAtLWx1bW8tdGludC0zMHBjdDogaHNsYSgyMTQsIDY5JSwgODQlLCAwLjMyKTsKICAgIC0tbHVtby10aW50LTQwcGN0OiBoc2xhKDIxNCwgNzMlLCA4NiUsIDAuNDEpOwogICAgLS1sdW1vLXRpbnQtNTBwY3Q6IGhzbGEoMjE0LCA3OCUsIDg4JSwgMC41KTsKICAgIC0tbHVtby10aW50LTYwcGN0OiBoc2xhKDIxNCwgODIlLCA5MCUsIDAuNik7CiAgICAtLWx1bW8tdGludC03MHBjdDogaHNsYSgyMTQsIDg3JSwgOTIlLCAwLjcpOwogICAgLS1sdW1vLXRpbnQtODBwY3Q6IGhzbGEoMjE0LCA5MSUsIDk0JSwgMC44KTsKICAgIC0tbHVtby10aW50LTkwcGN0OiBoc2xhKDIxNCwgOTYlLCA5NiUsIDAuOSk7CiAgICAtLWx1bW8tdGludDogaHNsKDIxNCwgMTAwJSwgOTglKTsKCiAgICAvKiBTaGFkZSAqLwogICAgLS1sdW1vLXNoYWRlLTVwY3Q6IGhzbGEoMjE0LCAwJSwgMCUsIDAuMDcpOwogICAgLS1sdW1vLXNoYWRlLTEwcGN0OiBoc2xhKDIxNCwgNCUsIDIlLCAwLjE1KTsKICAgIC0tbHVtby1zaGFkZS0yMHBjdDogaHNsYSgyMTQsIDglLCA0JSwgMC4yMyk7CiAgICAtLWx1bW8tc2hhZGUtMzBwY3Q6IGhzbGEoMjE0LCAxMiUsIDYlLCAwLjMyKTsKICAgIC0tbHVtby1zaGFkZS00MHBjdDogaHNsYSgyMTQsIDE2JSwgOCUsIDAuNDEpOwogICAgLS1sdW1vLXNoYWRlLTUwcGN0OiBoc2xhKDIxNCwgMjAlLCAxMCUsIDAuNSk7CiAgICAtLWx1bW8tc2hhZGUtNjBwY3Q6IGhzbGEoMjE0LCAyNCUsIDEyJSwgMC42KTsKICAgIC0tbHVtby1zaGFkZS03MHBjdDogaHNsYSgyMTQsIDI4JSwgMTMlLCAwLjcpOwogICAgLS1sdW1vLXNoYWRlLTgwcGN0OiBoc2xhKDIxNCwgMzIlLCAxMyUsIDAuOCk7CiAgICAtLWx1bW8tc2hhZGUtOTBwY3Q6IGhzbGEoMjE0LCAzMyUsIDEzJSwgMC45KTsKICAgIC0tbHVtby1zaGFkZTogaHNsKDIxNCwgMzMlLCAxMyUpOwoKICAgIC8qIENvbnRyYXN0ICovCiAgICAtLWx1bW8tY29udHJhc3QtNXBjdDogdmFyKC0tbHVtby10aW50LTVwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTEwcGN0OiB2YXIoLS1sdW1vLXRpbnQtMTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTIwcGN0OiB2YXIoLS1sdW1vLXRpbnQtMjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTMwcGN0OiB2YXIoLS1sdW1vLXRpbnQtMzBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTQwcGN0OiB2YXIoLS1sdW1vLXRpbnQtNDBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTUwcGN0OiB2YXIoLS1sdW1vLXRpbnQtNTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTYwcGN0OiB2YXIoLS1sdW1vLXRpbnQtNjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTcwcGN0OiB2YXIoLS1sdW1vLXRpbnQtNzBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTgwcGN0OiB2YXIoLS1sdW1vLXRpbnQtODBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTkwcGN0OiB2YXIoLS1sdW1vLXRpbnQtOTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0OiB2YXIoLS1sdW1vLXRpbnQpOwoKICAgIC8qIFRleHQgKi8KICAgIC0tbHVtby1oZWFkZXItdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdCk7CiAgICAtLWx1bW8tYm9keS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTkwcGN0KTsKICAgIC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC03MHBjdCk7CiAgICAtLWx1bW8tdGVydGlhcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC01MHBjdCk7CiAgICAtLWx1bW8tZGlzYWJsZWQtdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CgogICAgLyogUHJpbWFyeSAqLwogICAgLS1sdW1vLXByaW1hcnktY29sb3I6IGhzbCgyMTQsIDg2JSwgNTUlKTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0OiBoc2xhKDIxNCwgODYlLCA1NSUsIDAuNSk7CiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvci0xMHBjdDogaHNsYSgyMTQsIDkwJSwgNjMlLCAwLjEpOwogICAgLS1sdW1vLXByaW1hcnktdGV4dC1jb2xvcjogaHNsKDIxNCwgMTAwJSwgNzAlKTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbnRyYXN0LWNvbG9yOiAjZmZmOwoKICAgIC8qIEVycm9yICovCiAgICAtLWx1bW8tZXJyb3ItY29sb3I6IGhzbCgzLCA5MCUsIDYzJSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItNTBwY3Q6IGhzbGEoMywgOTAlLCA2MyUsIDAuNSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItMTBwY3Q6IGhzbGEoMywgOTAlLCA2MyUsIDAuMSk7CiAgICAtLWx1bW8tZXJyb3ItdGV4dC1jb2xvcjogaHNsKDMsIDEwMCUsIDY3JSk7CgogICAgLyogU3VjY2VzcyAqLwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3I6IGhzbCgxNDUsIDY1JSwgNDIlKTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTUwcGN0OiBoc2xhKDE0NSwgNjUlLCA0MiUsIDAuNSk7CiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvci0xMHBjdDogaHNsYSgxNDUsIDY1JSwgNDIlLCAwLjEpOwogICAgLS1sdW1vLXN1Y2Nlc3MtdGV4dC1jb2xvcjogaHNsKDE0NSwgODUlLCA0NyUpOwogIH0KCiAgaHRtbCB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1ib2R5LXRleHQtY29sb3IpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICB9CgogIFt0aGVtZX49J2RhcmsnXSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1ib2R5LXRleHQtY29sb3IpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICB9CgogIGgxLAogIGgyLAogIGgzLAogIGg0LAogIGg1LAogIGg2IHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yKTsKICB9CgogIGEgewogICAgY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS10ZXh0LWNvbG9yKTsKICB9CgogIGJsb2NrcXVvdGUgewogICAgY29sb3I6IHZhcigtLWx1bW8tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogIH0KCiAgY29kZSwKICBwcmUgewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0xMHBjdCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtbSk7CiAgfQpgO2pjKCIiLEZ1cix7bW9kdWxlSWQ6Imx1bW8tY29sb3IifSk7dmFyIEJ1cj1DaWAKICA6aG9zdCB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1ib2R5LXRleHQtY29sb3IpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpICFpbXBvcnRhbnQ7CiAgfQpgO2pjKCIiLEJ1cix7bW9kdWxlSWQ6Imx1bW8tY29sb3ItbGVnYWN5IixpbmNsdWRlOlsibHVtby1jb2xvciJdfSk7dmFyIFBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1BjZS5pbm5lckhUTUw9YAogIDxzdHlsZT4KICAgIEBmb250LWZhY2UgewogICAgICBmb250LWZhbWlseTogJ2x1bW8taWNvbnMnOwogICAgICBzcmM6IHVybChkYXRhOmFwcGxpY2F0aW9uL2ZvbnQtd29mZjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHUmdBQkFBQUFBQkVjQUFzQUFBQUFJaXdBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkhVMVZDQUFBQkNBQUFBRHNBQUFCVUlJc2xlazlUTHpJQUFBRkVBQUFBUXdBQUFGWkFJVXVLWTIxaGNBQUFBWWdBQUFENEFBQURyc0NVOGQ1bmJIbG1BQUFDZ0FBQUMyTUFBQmQ0aDlUbzJXaGxZV1FBQUEza0FBQUFNQUFBQURaYS82U3NhR2hsWVFBQURoUUFBQUFkQUFBQUpBYnBBMzVvYlhSNEFBQU9OQUFBQUJBQUFBQ3NwQkFBQUd4dlkyRUFBQTVFQUFBQVdBQUFBRmg1NUlBc2JXRjRjQUFBRHB3QUFBQWZBQUFBSUFGS0FYQnVZVzFsQUFBT3ZBQUFBVEVBQUFJdVVVSlpDSEJ2YzNRQUFBL3dBQUFCS3dBQUFlbG04U3pWZUp4allHUmdZT0JpTUdDd1kyQnljZk1KWWVETFNTekpZNUJpWUdHQUFKQThNcHN4SnpNOWtZRUR4Z1BLc1lCcERpQm1nNGdDQUNZN0JVZ0FlSnhqWUdTK3lEaUJnWldCZ2FtS2FROERBME1QaEdaOHdHREl5QVFVWldCbFpzQUtBdEpjVXhnY1hqRyswbUlPK3AvRkVNVWN4REFOS013SWtnTUFCbjhNTFFCNG5PM1NXVzZETUFCRjBVdHdDRW5JUE0vemhMSzhMcWhmWFJ5YlNQMTRYVVl0SFY5aEdZUXdRQk5JbzNjVUlQa2hRZU03cmliMWVrcW5YZzk4MVh1QzFxdnk4NGx6b2psZWgzcHV4TDBoUGpHalJVNDczdGVsb0VlZkFVTkdqSmt3WmNhY0JVdFdyTm13WmNlZUEwZE9uTGx3NWNhZEIwOWVsUEdoR2YrajBOVEkvNjVLZlhlclQ2SmhxS25wUkt0Z09wdXFhVHJ0S2pQVWxxSG1odG8yMUk3cEw2aTZobHFZM3E3cUdXcmZVQWVHT2pUVWthR09EWFZpcUZORG5SbnEzRkFYaHJvMDFKV2hyZzExWTZoYlE5MFo2dDVRRDRaNk5OU1RvWjROOVdLb1YwTzlHZXJkVUIrRytqVFVsNkdXUnZrTDI0QmtFWGljdFZoOWJGdlZGYi9ueHZieis3UmYvTjZ6SGNkMmJDZlArV2djMVo5TjBqcE5uRUw2a2JSVlM2SEEyaFFZR2g5VEdSMUNiQ3FhMnJYcldPa1FFL3NITkpnbXRadm9WTlpxRTFCMUROSHh6VFF4Q2VoVVRZaUpUUXlFTnVpMHFTTGV6cjNQZHV5UWZnbVJXT2ZkZTgrOTU1MXo3cm5uL080akxvSi9iUlAwVWFLUU1MRkpqcEJBdnBoTFpDM0RrMG9rN1dCelIyL3VwSnM3Unl3L25mRmJsbi91dU4vYXBDdndyS0xyU3ZVcVJ1ZmJtNXBuMGZzMHc0Z1l4bkdWUDZxSG5PNGJXaURRR1Fnd3RTNmxtM2xCM1FvWDFNMnZ3RW11emlyRjM5eStFczIrREo4ZDFwa3lxQklxb3plM0QxK1p6NERyRm9henhJOGRXd01yRGxaMkRNcVFBUjlBUk9zSlUrMmNtbFRQYXpUY281MkYxeFRhMmEyK0s4dnZxOTJkVkhtdExvUGVRWC9BWlBSWUd0aERZT2VaakJqS29Gc1ZHdWxSM2xXVTk1V2VDSzQ0cUhVN01oV1VHVUtaRFQzb0tVY0cyR1d1aCtFRERmVVlBL2poQWhsMFRPc0pOWVNFdTdtUW1pM1V6Zlh3WktBNEJzVnNITFhRWUdnUlc5NXVFdHBKMVZmbjlYaUxyaVJCbEZFcXhzRGpBMDl5Q05Vb1F4eHdkN0tXU1R0MnkzR1RLaWZscUhSU29XWmMzbTExV2EvZkpkRmdYRDRzU1lmbGVKQktkOEdNejdKOGRabi9jR1JDY0tHRG5BMkdlM2ZLemN2bG5URE50aEdXTFh6WC9XYVh0VUFtUmdlTGxIU3IzMHIwRzlVVFhNYjBBdG13ek9veTczZmtTbEhaa2R1dy9UWXVVOWNBRDRZdXRQb3hUVHNBMzc5N3dWcjRaLzFOQzV6QVJIcjR2dHhKanhJZmlaTWhNa2JXaysxNEJuSlpLd3FHWndEZnN3THl4V0RTZzExckZMSkY3Tm9weGpkMWgxL1FPVCtvZXpnZnUzWXErSGsrZHVmNXgrNDBvMUdUa2FJZ2lrSy9JRW5DNmFZeENVQmFaSlNONFhUWUZqVS9ZTU5JS3FKd2hER09DQ0k4RkRYblhtWGp0R2hHSnlTaHFqQU9uQk9rVzJKRzlTN0dnWWVNV0FVNUp6aG5XbUJPYU9NK0NLRVBvcVNmRkRDMlVucStETGxVZ1VWVUZGTFpHSmc2anRsb2pzZHNhOGtQT2JQdUpkaTVkbkJkQnNMSk1HVFdEYTR0Mkp2dHd1UG85cytZODZzdXYvVzMzUUcxckFhT0FVVit2eDRLNmYyRDA0UFZLbEM3V0xTclp6QWk0NVpWNmxJQzdXb1hxbVJ5dlVxb1Z3cnpVb1ZzSWplVFhXUXYrUkg1R1RsQlhpQi9JbjhsbjBJYkJDQUZPYWpBSnJnWll5T0hXcU9mVWUvYUhqSTEyUjZPUW8xakNndDIxNWwrNGY2WFBiKzBNTm91MFYrNDNuMkY3N3RTZlJiMjRkN3ppdGduS212WUhzNjl6dWdhUHZCd3Y2aW9Ya2IyTGRMNjVBdHc1MXVMa1hsdTFiaE1NUmNYU1BjWW9xS0lSbGgzNGxRUDgvNUpidVVGeWU0dnhENi82TXhGRjExQzB1VkxyOVVsZ3c0NHRTM3BNVmlOTFVFeGJ5Y0ZnTEljdCtRRE1pYlJpbXgxeWRVejhGWFppdU9JREJPTVZYMm5VWmMraHVORTVYVUo4MXVpSm9pYWJ3cWFWRjB1YWNLYmF1L3BsNFIyVlcwWFhsSnJhNmJvVnJZRzY0NlRGNU5Zend5NHZqRU5WckRsY05wWlBsOERINlhYOFhXQ3gwbXZXVlpZNktGTHJ2c1k2Ni96UGljdDVGbnhhTlVSL2p1dlpDTTNUdkQ2MEUyVzF0Wml6YlhUUER1YWJjbTBuYmJ6cFdLcG1BMWF5QlE4Z2llZExVTStBMGtOakJqUWptdVl6N1lyZ0lYWXZtRjYzWkxCd1NYcnBuOVRiOXd3ZGQvVTFIMFBNUUszWGNPOHVsM1dUN1B5UFBkcHkwVGVtS3hOUmNKTmF1aVhKbm5VRHBVcHBRV3M0U25VSXkwRUVTR1lxSllRTEdIeHphR1d3VklhUzZZN21RRk04WmpZRFEzYXhqZjYxU1dqVTMzSndPWkExcHdhRzFMOW16ZjcxYUhSZFgxSkh3NkZwMGFYaE53YnF5ZUdOZzROYmR6R0NCeG96NFpYank0TnU2OVpyNnNEWTZ2TXJMVTVuQTFQOEprYmRXWEo2RVJmTXJ5dk5oMUpmUTkrVDRkSWhHdks5dzNkeGpCQnphdHNRL01sT0hWSURuWXBEejZvZEFYbFEwMXQyUGE1SWFmZDhNTXB4QWVES1AwQzZDamdWTFQ1b3NCNmljVXgwMWxXalh4elQvR3lSRjJ3ZWxFTTVaLzdqRzNWalExU3JObjVJYnl6T0c1ZG9iQjMvUUh4eVp2c1hjb3o4SW9Fd1M3cGxDZyt6eEhRazQyNHE5QmZFcGtFU0piRkhRdXNEQlNXRmt1QmtvUE8wa0xLd1JWWWp4R1hsSFRjVERRTUovSDZUWDlhZmtPN21ucmFUTzFmZVRuWkFYTHU0Y3A3SEFYTW1ORzF5ZUZrOVRnUy9OSGhaUi80UW9CVHIvWkIrNmhDZ3lsMTVOcTFVYk42bkUxL1puUDFVMmNpekNCcHZzOGNKUVpKNExrWXg1Ti95WlBBVVpOUVEwVjRmM0JRbGxXckszWVJ6bDMwZE9UNlJWbjJ1cE51cjZ3b1NhOENxcGRUL2FLbkJNNG8zak51cjlkOXhxdFVUNnZlQkV0OUNhOWF0K0VSekVFaFVrUjhzYTVtUTRhVnZKb1ZlRUE4ekk0ZWk1bVVMWEZHeVU3ei82VEFlWUxWY3B6U1daWThQWVlGNXlyVFY2MHNUMCtYVjE0MXZYKytXZjE2VjJiRmVHVlBaWHhGcGt2eWVLVFdMbHpmVzBtbkt4c1k2WTMyOTQvMDk5OFNDZlgxYmxtNXBiY3ZGR2xxL3IwN01SQU1oWUlEaVc1SkZLV1czdmRyRXBDc1pTSkcrb203WnUvUFNTY1pKaE5rTGJtVzVXc3IxMnBXcVc1ekt0bHdSUzRiRk94VXcxN21Denk2bHNrQ0RsMVdZT0dXRFlyQURyTUE3QkREd2VXV05kNWtvaUpuUjFkeit5dExQMnEwU3FQQjFsbksyY2NCN1JZZTRGU29Qa3MzaUIzdDR0eFRTSGN0YjJzeTFpdmswcHZIdUNObTZ3MWY2d3h2MytPQ2dONzhMcWRRblVWaDdSMG9UQXAwek9mMnJiVzc3MFZ1NUMyZEl5R2RUbkhvOHpTamk3ZHBwajBVU29WQ3orbGhSTVRoNTNUZXE5VmJHZmJqdVNiQW9vU2RYYXlZNFBZSGczNzRDNmY3Z2wxQi9EWHVKNC9RWHhPQmRKRkpzcEZzSTNlZ3BvV1VVQ2psVElGbk5ZTmwrWnlaS21CZVlLR0hrRDFReURsaGFLYkt3S2NJSnFKNFRMSjJPbWRZL0pXWGFlNERkR0J3OEhaN2VYY2dGRjJ6cjJTb2FsRHJ5NWlLcW9hMFB1aGUzaFBRMnMzZWxUWU0rTUkrbjNySzBLZ0w3L0xhM0dlTUx0Nm03dTkxMnZHbnZ0T1JpSWEwcUJtaHFWaStYVzlYTkJtcWI4ZVZnS3pJSGZHSTViTm9HN1gwVUN6ZUlTbXFJY08vblk4Rkg3VThhdlg5ZngvU1QraHgwc2V6UHc5UXk4TXVtM0dXZjJONFV5L3lJWUdWQlhiSkhXSVpwN2RmVGNwdGRNVHI5UW1xN0RhaUsvdWtxQ0w0a3Q0UlVmUzVYUG5NdG1UMjIvbVFGcUY3ZW1TcXRybHU4U1ZFbHhEUkpyWk9Ea3B1d2UwVmZUZmpkRXAxZjdBN3YrZm96TkJYVUovNldUdUsyVHRGbHBGVlpBWjNMY0Z2VWkxWjJwMllUK0VNQWtHSlZTdE96TFRBUGc0SXFXSUFselJTak9Ca2wyenhqM1RLeWNwelQvTW52WDN1YVNNV00rZ1UwcmtYam9oaGVmVlJNYXBzMy9rTE1TS3YyM2xUMjN1eFFya1FqeU9KbGVNRHNkaEFuRDZaR0VsV1o1TWpDWHpDRS9oa1dYK1dGNGtuekdoVk95SzJlUVpla1YzZXlvMHpMOGt1WVdDbkRDdmpqaEFrY1RQT0JEWFZkb2F2M0hWY0ZuUWpMdnRWOVMycDB6QTZKZWdQd01ReHQreUZiM2xsOXpHbHEvNWRSS2IzY0V5UVlvYU5ZcGhhcko3eENCN0FXeHNMWTNqalpYWTBYc1pqMFdqd2M5STZQUC9kS0FCbkNaYXFIcGFaRUFDeGs0WmVMWlNLTmdaQUJsK2xZUVgxc0pRT1NYM242cjQxMGV2Y291ZDVKZUFHVVhWUDlIMXRaT0tlalRxNE9ubzB6MGVycm8xRnJuT3BvaHZhMWQvaFRkdFZzUWRLTjVXOVJsVDNOakQwbnpueUtOVGdLQU1mV05XY3lvZFYwSUdMUElIT0YwbzRKeXF1ZmFLNHo2V0lJenVHaDNkOGM4Y3dRZzhFUitPVnh5cmpkbTh2TnVodHM0TG9PaWhHeElNdVVkZ3p3aVlON3hoaDErb1puSk51VEc3Z1FadnU0WFdaOUdBWlpqR0V1YndlUHFZaHRLRFRIKzlWUWtsMTcvaUd5YnNuSis4K3NLdHlQcmNsbDl0eTY1WnNkc3QvOWlxcEVLaDdNNVZkQnhoM2NzT2ROYzZ0VzNJMXV5TTFQek9YZWdTT3JMRnNGTkkyTzI3TStURjJBcG5OOU1VdjV1ZDZManhJdkVRbkhSenhJdTRJc0E5TUxGa0puMnRjWm9aN09ON2RYZTd1anJjOEhydXNQS2FtbHFYd2Q3N2xRVXVMcGlsYXU0UFVNYXB1ZUJiN2lyVTRSb1VYRVlYdVZ1SUdsUkdtT3ArMmxOa2FSUFZ6aU9xbWxhWnZhcUc0ZEZnU2owanhFSldydjEySVVXbnRtdytyZlFhclJFMEFwaDRvY0k2bmxVbEdxcyt1My8rVC9ldGhXNjJQcEhwMmVIYlpzdG5oL3dPTzk1eURBSGljWTJCa1lHQUE0cG1KNlFIeC9EWmZHYmlaWHdCRkdHcFVOelFpNlArdm1hY3kzUUp5T1JpWVFLSUFOb1VMVlhpY1kyQmtZR0FPK3A4RkpGOHdBQUh6VkFaR0JsU2dEUUJXOWdOdkFBQUFlSnhqWUdCZ1lINHhOREFBendRbWp3QUFBQUFBVGdDYUFPZ0JDZ0VzQVU0QmNBR2FBY1FCN2dJYUFwd0M2QVNhQkx3RTFnVHlCUTRGS2dWNkJkQUYvZ1pFQm1ZR3RnY1lCNUFJR0FoU0NHb0kvZ2xHQ2I0SjJnb0VDandLZ2dxNEN2QUxVQXVXQzd4NG5HTmdaR0JnMEdaTVlSQmxBQUVtSU9ZQ1FnYUcvMkErQXdBWWxBRzhBSGljYlpFOVRzTXdHSWJmOUEvUlNnZ0VZbUh4QWd0cStqTjJaR2ozRHQzVDFHbFRPWEhrdUJXOUF5ZmdFQnlDZ1ROd0NBN0JXL05KbFZCdHlkL2p4KzhYS3dtQWEzd2h3bkZFNkliMU9CcTQ0TzZQbTZRYjRSYjVRYmlOSGg2Rk8vUkQ0UzZlTVJIdTRSYWFUNGhhbHpSM2VCVnU0QXB2d2szNmQrRVcrVU80alh0OENuZm92NFc3V09CSHVJZW42TVhzQ3R2UFUxdldjNzNlbWNTZHhJa1cydFc1TGRVb0hwN2tUSmZhSlY2djFQS2c2djE2N0gybU1tY0xOYldsMThaWVZUbTcxYW1QTjk1WGs4RWdFeCtudG9EQkRnVXMrc2lSc3Bhb01lZjdydWtORXJpemlYTnV3UzdIbW9lOXdnZ3h2K2U1NUl6Sk1xUVRlTllWMDBzY3VOYlk4K1l4clVmR2ZjYU1aYi9DTlBRZTA0YlQwbFRoYkV1VDBzZlloSzZLLzIzQW1mM0x4K0gyNGhjajRHU2NBQUFBZUp4dGp0bHVnekFRUmJrSlVFSkl1dS83dnFSOGxHTlBBY1d4MFlBYjVlL0xrbFI5NkVnZW5TdWZHWTAzOFBxS3ZmOXJoZ0dHOEJFZ3hBNGlqQkJqakFRVFRMR0xQZXpqQUljNHdqRk9jSW96bk9NQ2w3akNOVzV3aXp2YzR3R1BlTUl6WHZDS043empBek44ZW9uUVJXWlNTYVltanZ1ZzZhc2U5OGhGbHRleE1KbW1WTm1WMldCdmROZ1pVYyt1akFXelhXM1VEbnUxdzQzYXNTdEhjOEdwekFYWC9weTBqcVRRWkpUZ2tjeEpMcGFDRjBsRDMyeE50KzQzdEFzbjI5RGZ0MDJ1REtTMmNqR1VOZ3NrMjZxSzJsRnRoWW9VMjdJTlBxbWlEcWc1Z29lMHBxUjVxU29xTWRlay9DVVpGeXdMNDZyRXNpSW1sZXFpcW9NeXQ0YmFYbHUvMUdMZE5GZjV6YmNObWRyMVlVV0NaZTQ3byt6VW1iL0RvU3RidzNjVnNlZjlBTGpqaVBRQSkgZm9ybWF0KCd3b2ZmJyk7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIH0KCiAgICBodG1sIHsKICAgICAgLS1sdW1vLWljb25zLWFsaWduLWNlbnRlcjogIlxcZWEwMSI7CiAgICAgIC0tbHVtby1pY29ucy1hbGlnbi1sZWZ0OiAiXFxlYTAyIjsKICAgICAgLS1sdW1vLWljb25zLWFsaWduLXJpZ2h0OiAiXFxlYTAzIjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLWRvd246ICJcXGVhMDQiOwogICAgICAtLWx1bW8taWNvbnMtYW5nbGUtbGVmdDogIlxcZWEwNSI7CiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1yaWdodDogIlxcZWEwNiI7CiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS11cDogIlxcZWEwNyI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy1kb3duOiAiXFxlYTA4IjsKICAgICAgLS1sdW1vLWljb25zLWFycm93LWxlZnQ6ICJcXGVhMDkiOwogICAgICAtLWx1bW8taWNvbnMtYXJyb3ctcmlnaHQ6ICJcXGVhMGEiOwogICAgICAtLWx1bW8taWNvbnMtYXJyb3ctdXA6ICJcXGVhMGIiOwogICAgICAtLWx1bW8taWNvbnMtYmFyLWNoYXJ0OiAiXFxlYTBjIjsKICAgICAgLS1sdW1vLWljb25zLWJlbGw6ICJcXGVhMGQiOwogICAgICAtLWx1bW8taWNvbnMtY2FsZW5kYXI6ICJcXGVhMGUiOwogICAgICAtLWx1bW8taWNvbnMtY2hlY2ttYXJrOiAiXFxlYTBmIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tZG93bjogIlxcZWExMCI7CiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLWxlZnQ6ICJcXGVhMTEiOwogICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi1yaWdodDogIlxcZWExMiI7CiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLXVwOiAiXFxlYTEzIjsKICAgICAgLS1sdW1vLWljb25zLWNsb2NrOiAiXFxlYTE0IjsKICAgICAgLS1sdW1vLWljb25zLWNvZzogIlxcZWExNSI7CiAgICAgIC0tbHVtby1pY29ucy1jcm9zczogIlxcZWExNiI7CiAgICAgIC0tbHVtby1pY29ucy1kb3dubG9hZDogIlxcZWExNyI7CiAgICAgIC0tbHVtby1pY29ucy1kcm9wZG93bjogIlxcZWExOCI7CiAgICAgIC0tbHVtby1pY29ucy1lZGl0OiAiXFxlYTE5IjsKICAgICAgLS1sdW1vLWljb25zLWVycm9yOiAiXFxlYTFhIjsKICAgICAgLS1sdW1vLWljb25zLWV5ZTogIlxcZWExYiI7CiAgICAgIC0tbHVtby1pY29ucy1leWUtZGlzYWJsZWQ6ICJcXGVhMWMiOwogICAgICAtLWx1bW8taWNvbnMtbWVudTogIlxcZWExZCI7CiAgICAgIC0tbHVtby1pY29ucy1taW51czogIlxcZWExZSI7CiAgICAgIC0tbHVtby1pY29ucy1vcmRlcmVkLWxpc3Q6ICJcXGVhMWYiOwogICAgICAtLWx1bW8taWNvbnMtcGhvbmU6ICJcXGVhMjAiOwogICAgICAtLWx1bW8taWNvbnMtcGhvdG86ICJcXGVhMjEiOwogICAgICAtLWx1bW8taWNvbnMtcGxheTogIlxcZWEyMiI7CiAgICAgIC0tbHVtby1pY29ucy1wbHVzOiAiXFxlYTIzIjsKICAgICAgLS1sdW1vLWljb25zLXJlZG86ICJcXGVhMjQiOwogICAgICAtLWx1bW8taWNvbnMtcmVsb2FkOiAiXFxlYTI1IjsKICAgICAgLS1sdW1vLWljb25zLXNlYXJjaDogIlxcZWEyNiI7CiAgICAgIC0tbHVtby1pY29ucy11bmRvOiAiXFxlYTI3IjsKICAgICAgLS1sdW1vLWljb25zLXVub3JkZXJlZC1saXN0OiAiXFxlYTI4IjsKICAgICAgLS1sdW1vLWljb25zLXVwbG9hZDogIlxcZWEyOSI7CiAgICAgIC0tbHVtby1pY29ucy11c2VyOiAiXFxlYTJhIjsKICAgIH0KICA8L3N0eWxlPgpgO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoUGNlLmNvbnRlbnQpO3ZhciBIdXI9Q2lgCiAgOmhvc3QgewogICAgLS1sdW1vLXNpemUteHM6IDEuNjI1cmVtOwogICAgLS1sdW1vLXNpemUtczogMS44NzVyZW07CiAgICAtLWx1bW8tc2l6ZS1tOiAyLjI1cmVtOwogICAgLS1sdW1vLXNpemUtbDogMi43NXJlbTsKICAgIC0tbHVtby1zaXplLXhsOiAzLjVyZW07CgogICAgLyogSWNvbnMgKi8KICAgIC0tbHVtby1pY29uLXNpemUtczogMS4yNWVtOwogICAgLS1sdW1vLWljb24tc2l6ZS1tOiAxLjVlbTsKICAgIC0tbHVtby1pY29uLXNpemUtbDogMi4yNWVtOwogICAgLyogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCiAgICAtLWx1bW8taWNvbi1zaXplOiB2YXIoLS1sdW1vLWljb24tc2l6ZS1tKTsKICB9CmAsSWNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7SWNlLmlubmVySFRNTD1gPHN0eWxlPiR7SHVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoSWNlLmNvbnRlbnQpO3ZhciBWdXI9Q2lgCiAgOmhvc3QgewogICAgLyogU3F1YXJlICovCiAgICAtLWx1bW8tc3BhY2UteHM6IDAuMjVyZW07CiAgICAtLWx1bW8tc3BhY2UtczogMC41cmVtOwogICAgLS1sdW1vLXNwYWNlLW06IDFyZW07CiAgICAtLWx1bW8tc3BhY2UtbDogMS41cmVtOwogICAgLS1sdW1vLXNwYWNlLXhsOiAyLjVyZW07CgogICAgLyogV2lkZSAqLwogICAgLS1sdW1vLXNwYWNlLXdpZGUteHM6IGNhbGModmFyKC0tbHVtby1zcGFjZS14cykgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLXhzKTsKICAgIC0tbHVtby1zcGFjZS13aWRlLXM6IGNhbGModmFyKC0tbHVtby1zcGFjZS1zKSAvIDIpIHZhcigtLWx1bW8tc3BhY2Utcyk7CiAgICAtLWx1bW8tc3BhY2Utd2lkZS1tOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UtbSkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLW0pOwogICAgLS1sdW1vLXNwYWNlLXdpZGUtbDogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLWwpIC8gMikgdmFyKC0tbHVtby1zcGFjZS1sKTsKICAgIC0tbHVtby1zcGFjZS13aWRlLXhsOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UteGwpIC8gMikgdmFyKC0tbHVtby1zcGFjZS14bCk7CgogICAgLyogVGFsbCAqLwogICAgLS1sdW1vLXNwYWNlLXRhbGwteHM6IHZhcigtLWx1bW8tc3BhY2UteHMpIGNhbGModmFyKC0tbHVtby1zcGFjZS14cykgLyAyKTsKICAgIC0tbHVtby1zcGFjZS10YWxsLXM6IHZhcigtLWx1bW8tc3BhY2UtcykgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXMpIC8gMik7CiAgICAtLWx1bW8tc3BhY2UtdGFsbC1tOiB2YXIoLS1sdW1vLXNwYWNlLW0pIGNhbGModmFyKC0tbHVtby1zcGFjZS1tKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwtbDogdmFyKC0tbHVtby1zcGFjZS1sKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UtbCkgLyAyKTsKICAgIC0tbHVtby1zcGFjZS10YWxsLXhsOiB2YXIoLS1sdW1vLXNwYWNlLXhsKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UteGwpIC8gMik7CiAgfQpgLExjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO0xjZS5pbm5lckhUTUw9YDxzdHlsZT4ke1Z1ci50b1N0cmluZygpLnJlcGxhY2UoIjpob3N0IiwiaHRtbCIpfTwvc3R5bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKExjZS5jb250ZW50KTt2YXIgVXVyPUNpYAogIDpob3N0IHsKICAgIC8qIEJvcmRlciByYWRpdXMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLXM6IDAuMjVlbTsgLyogQ2hlY2tib3gsIGJhZGdlLCBkYXRlLXBpY2tlciB5ZWFyIGluZGljYXRvciwgZXRjICovCiAgICAtLWx1bW8tYm9yZGVyLXJhZGl1cy1tOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMsIDAuMjVlbSk7IC8qIEJ1dHRvbiwgdGV4dCBmaWVsZCwgbWVudSBvdmVybGF5LCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLWw6IDAuNWVtOyAvKiBEaWFsb2csIG5vdGlmaWNhdGlvbiwgZXRjICovCiAgICAtLWx1bW8tYm9yZGVyLXJhZGl1czogMC4yNWVtOyAvKiBEZXByZWNhdGVkICovCgogICAgLyogU2hhZG93ICovCiAgICAtLWx1bW8tYm94LXNoYWRvdy14czogMCAxcHggNHB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS01MHBjdCk7CiAgICAtLWx1bW8tYm94LXNoYWRvdy1zOiAwIDJweCA0cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAzcHggMTJweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtMzBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3ctbTogMCAycHggNnB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIDAgOHB4IDI0cHggLTRweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LWw6IDAgM3B4IDE4cHggLTJweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAxMnB4IDQ4cHggLTZweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LXhsOiAwIDRweCAyNHB4IC0zcHggdmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIDAgMThweCA2NHB4IC04cHggdmFyKC0tbHVtby1zaGFkZS00MHBjdCk7CgogICAgLyogQ2xpY2thYmxlIGVsZW1lbnQgY3Vyc29yICovCiAgICAtLWx1bW8tY2xpY2thYmxlLWN1cnNvcjogZGVmYXVsdDsKICB9CmAsa2NlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7a2NlLmlubmVySFRNTD1gPHN0eWxlPiR7VXVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoa2NlLmNvbnRlbnQpO3ZhciBxdXI9Q2lgCiAgOmhvc3QgewogICAgLyogcHJldHRpZXItaWdub3JlICovCiAgICAtLWx1bW8tZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1JvYm90bycsICdTZWdvZSBVSScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnOwoKICAgIC8qIEZvbnQgc2l6ZXMgKi8KICAgIC0tbHVtby1mb250LXNpemUteHhzOiAwLjc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS14czogMC44MTI1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1zOiAwLjg3NXJlbTsKICAgIC0tbHVtby1mb250LXNpemUtbTogMXJlbTsKICAgIC0tbHVtby1mb250LXNpemUtbDogMS4xMjVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXhsOiAxLjM3NXJlbTsKICAgIC0tbHVtby1mb250LXNpemUteHhsOiAxLjc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eHhsOiAyLjVyZW07CgogICAgLyogTGluZSBoZWlnaHRzICovCiAgICAtLWx1bW8tbGluZS1oZWlnaHQteHM6IDEuMjU7CiAgICAtLWx1bW8tbGluZS1oZWlnaHQtczogMS4zNzU7CiAgICAtLWx1bW8tbGluZS1oZWlnaHQtbTogMS42MjU7CiAgfQpgLFJjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1JjZS5pbm5lckhUTUw9YDxzdHlsZT4ke3F1ci50b1N0cmluZygpLnJlcGxhY2UoIjpob3N0IiwiaHRtbCIpfTwvc3R5bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFJjZS5jb250ZW50KTt2YXIgR3VyPUNpYAogIGh0bWwgewogICAgZm9udC1mYW1pbHk6IHZhcigtLWx1bW8tZm9udC1mYW1pbHkpOwogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZSwgdmFyKC0tbHVtby1mb250LXNpemUtbSkpOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtbSk7CiAgICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7CiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7CiAgfQoKICAvKiBDYW7igJl0IGNvbWJpbmUgd2l0aCB0aGUgYWJvdmUgc2VsZWN0b3IgYmVjYXVzZSB0aGF0IGRvZXNu4oCZdCB3b3JrIGluIGJyb3dzZXJzIHdpdGhvdXQgbmF0aXZlIHNoYWRvdyBkb20gKi8KICA6aG9zdCB7CiAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLCB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKSk7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1tKTsKICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKICB9CgogIHNtYWxsLAogIFt0aGVtZX49J2ZvbnQtc2l6ZS1zJ10gewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1zKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXMpOwogIH0KCiAgW3RoZW1lfj0nZm9udC1zaXplLXhzJ10gewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14cyk7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC14cyk7CiAgfQoKICBoMSwKICBoMiwKICBoMywKICBoNCwKICBoNSwKICBoNiB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQteHMpOwogICAgbWFyZ2luLXRvcDogMS4yNWVtOwogIH0KCiAgaDEgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14eHhsKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNzVlbTsKICB9CgogIGgyIHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHhsKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDMgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14bCk7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKICB9CgogIGg0IHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUtbCk7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKICB9CgogIGg1IHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUtbSk7CiAgICBtYXJnaW4tYm90dG9tOiAwLjI1ZW07CiAgfQoKICBoNiB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhzKTsKICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDNlbTsKICB9CgogIHAsCiAgYmxvY2txdW90ZSB7CiAgICBtYXJnaW4tdG9wOiAwLjVlbTsKICAgIG1hcmdpbi1ib3R0b206IDAuNzVlbTsKICB9CgogIGEgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIH0KCiAgYTpob3ZlciB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICB9CgogIGhyIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgIGhlaWdodDogMXB4OwogICAgYm9yZGVyOiAwOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbjogdmFyKC0tbHVtby1zcGFjZS1zKSBjYWxjKHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1tKSAvIDIpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0xMHBjdCk7CiAgfQoKICBibG9ja3F1b3RlIHsKICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgfQoKICBiLAogIHN0cm9uZyB7CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KCiAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICBibG9ja3F1b3RlW2Rpcj0ncnRsJ10gewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKICB9CmA7amMoIiIsR3VyLHttb2R1bGVJZDoibHVtby10eXBvZ3JhcGh5In0pO2pjKCJ2YWFkaW4tY2hlY2tib3giLENpYAogICAgOmhvc3QgewogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIFtwYXJ0PSdsYWJlbCddOm5vdChbZW1wdHldKSB7CiAgICAgIG1hcmdpbjogMC4xODc1ZW0gMC44NzVlbSAwLjE4NzVlbSAwLjM3NWVtOwogICAgfQoKICAgIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgd2lkdGg6IGNhbGMoMWVtICsgMnB4KTsKICAgICAgaGVpZ2h0OiBjYWxjKDFlbSArIDJweCk7CiAgICAgIG1hcmdpbjogMC4xODc1ZW07CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgY3ViaWMtYmV6aWVyKDAuMTIsIDAuMzIsIDAuNTQsIDIpLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIH0KCiAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV0pIFtwYXJ0PSdjaGVja2JveCddLAogICAgOmhvc3QoW2NoZWNrZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvcik7CiAgICB9CgogICAgLyogTmVlZGVkIHRvIGFsaWduIHRoZSBjaGVja2JveCBuaWNlbHkgb24gdGhlIGJhc2VsaW5lICovCiAgICBbcGFydD0nY2hlY2tib3gnXTo6YmVmb3JlIHsKICAgICAgY29udGVudDogJ1xcMjAwMyc7CiAgICB9CgogICAgLyogQ2hlY2ttYXJrICovCiAgICBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB3aWR0aDogMDsKICAgICAgaGVpZ2h0OiAwOwogICAgICBib3JkZXI6IDAgc29saWQgdmFyKC0tbHVtby1wcmltYXJ5LWNvbnRyYXN0LWNvbG9yKTsKICAgICAgYm9yZGVyLXdpZHRoOiAwLjE4NzVlbSAwIDAgMC4xODc1ZW07CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDAgMDsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDAuODEyNWVtOwogICAgICBsZWZ0OiAwLjVlbTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjU1KSByb3RhdGUoLTEzNWRlZyk7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgOmhvc3QoW2NoZWNrZWRdKSBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICBvcGFjaXR5OiAxOwogICAgICB3aWR0aDogMC42MjVlbTsKICAgICAgaGVpZ2h0OiAxLjA2MjVlbTsKICAgIH0KCiAgICAvKiBJbmRldGVybWluYXRlIGNoZWNrbWFyayAqLwogICAgOmhvc3QoW2luZGV0ZXJtaW5hdGVdKSBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgIG9wYWNpdHk6IDE7CiAgICAgIHRvcDogNDUlOwogICAgICBoZWlnaHQ6IDEwJTsKICAgICAgbGVmdDogMjIlOwogICAgICByaWdodDogMjIlOwogICAgICB3aWR0aDogYXV0bzsKICAgICAgYm9yZGVyOiAwOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3IpOwogICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzOwogICAgfQoKICAgIC8qIEZvY3VzIHJpbmcgKi8KICAgIDpob3N0KFtmb2N1cy1yaW5nXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICAvKiBEaXNhYmxlZCAqLwogICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tZGlzYWJsZWQtdGV4dC1jb2xvcik7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgW3BhcnQ9J2xhYmVsJ10gOjpzbG90dGVkKCopIHsKICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICBib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogICAgfQoKICAgIDpob3N0KFtpbmRldGVybWluYXRlXVtkaXNhYmxlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogICAgfQoKICAgIC8qIFJUTCBzcGVjaWZpYyBzdHlsZXMgKi8KICAgIDpob3N0KFtkaXI9J3J0bCddKSBbcGFydD0nbGFiZWwnXTpub3QoW2VtcHR5XSkgewogICAgICBtYXJnaW46IDAuMTg3NWVtIDAuMzc1ZW0gMC4xODc1ZW0gMC44NzVlbTsKICAgIH0KCiAgICAvKiBUcmFuc2l0aW9uIHRoZSBjaGVja21hcmsgaWYgYWN0aXZhdGVkIHdpdGggdGhlIG1vdXNlIChkaXNhYmxlZCBmb3IgZ3JpZCBzZWxlY3QtYWxsIHRoaXMgd2F5KSAqLwogICAgOmhvc3QoOmhvdmVyKSBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjFzLCBoZWlnaHQgMC4yNXM7CiAgICB9CgogICAgLyogVXNlZCBmb3IgYWN0aXZhdGlvbiAiaGFsbyIgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjpiZWZvcmUgewogICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjQpOwogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xcywgb3BhY2l0eSAwLjhzOwogICAgfQoKICAgIC8qIEhvdmVyICovCiAgICA6aG9zdCg6bm90KFtjaGVja2VkXSk6bm90KFtpbmRldGVybWluYXRlXSk6bm90KFtkaXNhYmxlZF0pOmhvdmVyKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogICAgfQoKICAgIC8qIERpc2FibGUgaG92ZXIgZm9yIHRvdWNoIGRldmljZXMgKi8KICAgIEBtZWRpYSAocG9pbnRlcjogY29hcnNlKSB7CiAgICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgfQogICAgfQoKICAgIC8qIEFjdGl2ZSAqLwogICAgOmhvc3QoW2FjdGl2ZV0pIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpOwogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjA1czsKICAgIH0KCiAgICA6aG9zdChbYWN0aXZlXVtjaGVja2VkXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7CiAgICB9CgogICAgOmhvc3QoW2FjdGl2ZV06bm90KFtjaGVja2VkXSkpIFtwYXJ0PSdjaGVja2JveCddOjpiZWZvcmUgewogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjAxcywgMC4wMXM7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgIG9wYWNpdHk6IDAuNDsKICAgIH0KICBgLHttb2R1bGVJZDoibHVtby1jaGVja2JveCJ9KTt2YXIgTmNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57dGhlbWU6e3R5cGU6U3RyaW5nLHJlYWRPbmx5OiEwfX19YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHIsbixpKXtzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socixuLGkpLHI9PT0idGhlbWUiJiZ0aGlzLl9zZXRUaGVtZShpKX19O3ZhciBqSD1lPT5jbGFzcyBleHRlbmRzIE5jZShlKXtzdGF0aWMgZmluYWxpemUoKXtzdXBlci5maW5hbGl6ZSgpO2xldCByPXRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZSxuPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuX3RlbXBsYXRlO24mJkFycmF5LmZyb20obi5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlW2luY2x1ZGVdIikpLmZvckVhY2goaT0+e3RoaXMuX2luY2x1ZGVTdHlsZShpLmdldEF0dHJpYnV0ZSgiaW5jbHVkZSIpLHIpfSksdGhpcy5faW5jbHVkZU1hdGNoaW5nVGhlbWVzKHIpfXN0YXRpYyBfaW5jbHVkZU1hdGNoaW5nVGhlbWVzKHIpe2xldCBpPW91LnByb3RvdHlwZS5tb2R1bGVzLG89ITEsYT10aGlzLmlzKyItZGVmYXVsdC10aGVtZSI7T2JqZWN0LmtleXMoaSkuc29ydCgocyxsKT0+e2xldCBjPXMuaW5kZXhPZigidmFhZGluLSIpPT09MCx1PWwuaW5kZXhPZigidmFhZGluLSIpPT09MCxoPVsibHVtby0iLCJtYXRlcmlhbC0iXSxmPWguZmlsdGVyKGQ9PnMuaW5kZXhPZihkKT09PTApLmxlbmd0aD4wLHA9aC5maWx0ZXIoZD0+bC5pbmRleE9mKGQpPT09MCkubGVuZ3RoPjA7cmV0dXJuIGMhPT11P2M/LTE6MTpmIT09cD9mPy0xOjE6MH0pLmZvckVhY2gocz0+e2lmKHMhPT1hKXtsZXQgbD1pW3NdLmdldEF0dHJpYnV0ZSgidGhlbWUtZm9yIik7bCYmbC5zcGxpdCgiICIpLmZvckVhY2goYz0+e25ldyBSZWdFeHAoIl4iK2Muc3BsaXQoIioiKS5qb2luKCIuKiIpKyIkIikudGVzdCh0aGlzLmlzKSYmKG89ITAsdGhpcy5faW5jbHVkZVN0eWxlKHMscikpfSl9fSksIW8mJmlbYV0mJnRoaXMuX2luY2x1ZGVTdHlsZShhLHIpfXN0YXRpYyBfaW5jbHVkZVN0eWxlKHIsbil7aWYobiYmIW4uY29udGVudC5xdWVyeVNlbGVjdG9yKGBzdHlsZVtpbmNsdWRlPSIke3J9Il1gKSl7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtpLnNldEF0dHJpYnV0ZSgiaW5jbHVkZSIsciksbi5jb250ZW50LmFwcGVuZENoaWxkKGkpfX19O3ZhciBSY3Q9ITE7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCgpPT57UmN0PSEwfSx7Y2FwdHVyZTohMH0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCgpPT57UmN0PSExfSx7Y2FwdHVyZTohMH0pO3ZhciBXdXI9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnt0YWJpbmRleDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il90YWJpbmRleENoYW5nZWQifX19fSxEY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBXdXIoZSl7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2F1dG9mb2N1czp7dHlwZTpCb29sZWFufSxfcHJldmlvdXNUYWJJbmRleDp7dHlwZTpOdW1iZXJ9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sX2lzU2hpZnRUYWJiaW5nOnt0eXBlOkJvb2xlYW59fX1yZWFkeSgpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIscj0+e3IuY29tcG9zZWRQYXRoKClbMF09PT10aGlzP3RoaXMuY29udGFpbnMoci5yZWxhdGVkVGFyZ2V0KXx8dGhpcy5fZm9jdXMoKTpyLmNvbXBvc2VkUGF0aCgpLmluZGV4T2YodGhpcy5mb2N1c0VsZW1lbnQpIT09LTEmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9zZXRGb2N1c2VkKCEwKX0pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLCgpPT50aGlzLl9zZXRGb2N1c2VkKCExKSksc3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHI9Pnshci5kZWZhdWx0UHJldmVudGVkJiZyLmtleUNvZGU9PT05JiZyLnNoaWZ0S2V5JiYodGhpcy5faXNTaGlmdFRhYmJpbmc9ITAsSFRNTEVsZW1lbnQucHJvdG90eXBlLmZvY3VzLmFwcGx5KHRoaXMpLHRoaXMuX3NldEZvY3VzZWQoITEpLHNldFRpbWVvdXQoKCk9PnRoaXMuX2lzU2hpZnRUYWJiaW5nPSExLDApKX0pLHRoaXMuYXV0b2ZvY3VzJiYhdGhpcy5kaXNhYmxlZCYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuX2ZvY3VzKCksdGhpcy5fc2V0Rm9jdXNlZCghMCksdGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzLXJpbmciLCIiKX0pfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc0F0dHJpYnV0ZSgiZm9jdXNlZCIpJiZ0aGlzLl9zZXRGb2N1c2VkKCExKX1fc2V0Rm9jdXNlZChyKXtyP3RoaXMuc2V0QXR0cmlidXRlKCJmb2N1c2VkIiwiIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImZvY3VzZWQiKSxyJiZSY3Q/dGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzLXJpbmciLCIiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZm9jdXMtcmluZyIpfWdldCBmb2N1c0VsZW1lbnQoKXtyZXR1cm4gd2luZG93LmNvbnNvbGUud2FybihgUGxlYXNlIGltcGxlbWVudCB0aGUgJ2ZvY3VzRWxlbWVudCcgcHJvcGVydHkgaW4gPCR7dGhpcy5sb2NhbE5hbWV9PmApLHRoaXN9X2ZvY3VzKCl7IXRoaXMuZm9jdXNFbGVtZW50fHx0aGlzLl9pc1NoaWZ0VGFiYmluZ3x8KHRoaXMuZm9jdXNFbGVtZW50LmZvY3VzKCksdGhpcy5fc2V0Rm9jdXNlZCghMCkpfWZvY3VzKCl7IXRoaXMuZm9jdXNFbGVtZW50fHx0aGlzLmRpc2FibGVkfHwodGhpcy5mb2N1c0VsZW1lbnQuZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSl9Ymx1cigpeyF0aGlzLmZvY3VzRWxlbWVudHx8KHRoaXMuZm9jdXNFbGVtZW50LmJsdXIoKSx0aGlzLl9zZXRGb2N1c2VkKCExKSl9X2Rpc2FibGVkQ2hhbmdlZChyKXt0aGlzLmZvY3VzRWxlbWVudC5kaXNhYmxlZD1yLHI/KHRoaXMuYmx1cigpLHRoaXMuX3ByZXZpb3VzVGFiSW5kZXg9dGhpcy50YWJpbmRleCx0aGlzLnRhYmluZGV4PS0xLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpKToodHlwZW9mIHRoaXMuX3ByZXZpb3VzVGFiSW5kZXghPSJ1bmRlZmluZWQiJiYodGhpcy50YWJpbmRleD10aGlzLl9wcmV2aW91c1RhYkluZGV4KSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kaXNhYmxlZCIpKX1fdGFiaW5kZXhDaGFuZ2VkKHIpe3IhPT12b2lkIDAmJih0aGlzLmZvY3VzRWxlbWVudC50YWJJbmRleD1yKSx0aGlzLmRpc2FibGVkJiZ0aGlzLnRhYmluZGV4JiYodGhpcy50YWJpbmRleCE9PS0xJiYodGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLnRhYmluZGV4KSx0aGlzLnRhYmluZGV4PXI9dm9pZCAwKX1jbGljaygpe3RoaXMuZGlzYWJsZWR8fHN1cGVyLmNsaWNrKCl9fTt2YXIgWXVyPS9cL1wqXCpccyt2YWFkaW4tZGV2LW1vZGU6c3RhcnQoW1xzXFNdKil2YWFkaW4tZGV2LW1vZGU6ZW5kXHMrXCpcKlwvL2ksWEg9d2luZG93LlZhYWRpbiYmd2luZG93LlZhYWRpbi5GbG93JiZ3aW5kb3cuVmFhZGluLkZsb3cuY2xpZW50cztmdW5jdGlvbiBqdXIoKXtmdW5jdGlvbiBlKCl7cmV0dXJuITB9cmV0dXJuIE9jZShlKX1mdW5jdGlvbiBYdXIoKXt0cnl7cmV0dXJuICR1cigpPyEwOkt1cigpP1hIPyFadXIoKTohanVyKCk6ITF9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uICR1cigpe3JldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidmFhZGluLmRldmVsb3BtZW50bW9kZS5mb3JjZSIpfWZ1bmN0aW9uIEt1cigpe3JldHVyblsibG9jYWxob3N0IiwiMTI3LjAuMC4xIl0uaW5kZXhPZih3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpPj0wfWZ1bmN0aW9uIFp1cigpe3JldHVybiEhKFhIJiZPYmplY3Qua2V5cyhYSCkubWFwKHQ9PlhIW3RdKS5maWx0ZXIodD0+dC5wcm9kdWN0aW9uTW9kZSkubGVuZ3RoPjApfWZ1bmN0aW9uIE9jZShlLHQpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXJldHVybjtsZXQgcj1ZdXIuZXhlYyhlLnRvU3RyaW5nKCkpO2lmKHIpdHJ5e2U9bmV3IEZ1bmN0aW9uKHJbMV0pfWNhdGNoKG4pe2NvbnNvbGUubG9nKCJ2YWFkaW4tZGV2ZWxvcG1lbnQtbW9kZS1kZXRlY3RvcjogdW5jb21tZW50QW5kUnVuKCkgZmFpbGVkIixuKX1yZXR1cm4gZSh0KX13aW5kb3cuVmFhZGluPXdpbmRvdy5WYWFkaW58fHt9O3ZhciBOY3Q9ZnVuY3Rpb24oZSx0KXtpZih3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZSlyZXR1cm4gT2NlKGUsdCl9O3dpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlPT09dm9pZCAwJiYod2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGU9WHVyKCkpO2Z1bmN0aW9uIEp1cigpe312YXIgemNlPWZ1bmN0aW9uKCl7aWYodHlwZW9mIE5jdD09ImZ1bmN0aW9uIilyZXR1cm4gTmN0KEp1cil9O3ZhciBfMz1jbGFzc3tzdGF0aWMgZGV0ZWN0U2Nyb2xsVHlwZSgpe2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QudGV4dENvbnRlbnQ9IkFCQ0QiLHQuZGlyPSJydGwiLHQuc3R5bGUuZm9udFNpemU9IjE0cHgiLHQuc3R5bGUud2lkdGg9IjRweCIsdC5zdHlsZS5oZWlnaHQ9IjFweCIsdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc3R5bGUudG9wPSItMTAwMHB4Iix0LnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7bGV0IHI9InJldmVyc2UiO3JldHVybiB0LnNjcm9sbExlZnQ+MD9yPSJkZWZhdWx0IjoodC5zY3JvbGxMZWZ0PTIsdC5zY3JvbGxMZWZ0PDImJihyPSJuZWdhdGl2ZSIpKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLHJ9c3RhdGljIGdldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHQscixuKXtsZXR7c2Nyb2xsTGVmdDppfT1uO2lmKHIhPT0icnRsInx8IXQpcmV0dXJuIGk7c3dpdGNoKHQpe2Nhc2UibmVnYXRpdmUiOnJldHVybiBuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgraTtjYXNlInJldmVyc2UiOnJldHVybiBuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgtaX1yZXR1cm4gaX1zdGF0aWMgc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodCxyLG4saSl7aWYociE9PSJydGwifHwhdCl7bi5zY3JvbGxMZWZ0PWk7cmV0dXJufXN3aXRjaCh0KXtjYXNlIm5lZ2F0aXZlIjpuLnNjcm9sbExlZnQ9bi5jbGllbnRXaWR0aC1uLnNjcm9sbFdpZHRoK2k7YnJlYWs7Y2FzZSJyZXZlcnNlIjpuLnNjcm9sbExlZnQ9bi5zY3JvbGxXaWR0aC1uLmNsaWVudFdpZHRoLWk7YnJlYWs7ZGVmYXVsdDpuLnNjcm9sbExlZnQ9aTticmVha319fTt2YXIgRTA9W10sUXVyPWZ1bmN0aW9uKCl7bGV0IGU9T2N0KCk7RTAuZm9yRWFjaCh0PT57RGN0KHQsZSl9KX0sJEgsdGhyPW5ldyBNdXRhdGlvbk9ic2VydmVyKFF1cik7dGhyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHthdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbImRpciJdfSk7dmFyIERjdD1mdW5jdGlvbihlLHQscj1lLmdldEF0dHJpYnV0ZSgiZGlyIikpe3Q/ZS5zZXRBdHRyaWJ1dGUoImRpciIsdCk6ciE9bnVsbCYmZS5yZW1vdmVBdHRyaWJ1dGUoImRpciIpfSxPY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIil9LEtIPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGlyOnt0eXBlOlN0cmluZyx2YWx1ZToiIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fX1zdGF0aWMgZmluYWxpemUoKXtzdXBlci5maW5hbGl6ZSgpLCRIfHwoJEg9XzMuZGV0ZWN0U2Nyb2xsVHlwZSgpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5oYXNBdHRyaWJ1dGUoImRpciIpfHwodGhpcy5fX3N1YnNjcmliZSgpLERjdCh0aGlzLE9jdCgpLG51bGwpKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socixuLGkpe2lmKHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSksciE9PSJkaXIiKXJldHVybjtsZXQgbz1PY3QoKSxhPWk9PT1vJiZFMC5pbmRleE9mKHRoaXMpPT09LTEscz0haSYmbiYmRTAuaW5kZXhPZih0aGlzKT09PS0xO2F8fHM/KHRoaXMuX19zdWJzY3JpYmUoKSxEY3QodGhpcyxvLGkpKTppIT09byYmbj09PW8mJnRoaXMuX19zdWJzY3JpYmUoITEpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9fc3Vic2NyaWJlKCExKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIil9X3ZhbHVlVG9Ob2RlQXR0cmlidXRlKHIsbixpKXtpPT09ImRpciImJm49PT0iIiYmIXIuaGFzQXR0cmlidXRlKCJkaXIiKXx8c3VwZXIuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKHIsbixpKX1fYXR0cmlidXRlVG9Qcm9wZXJ0eShyLG4saSl7cj09PSJkaXIiJiYhbj90aGlzLmRpcj0iIjpzdXBlci5fYXR0cmlidXRlVG9Qcm9wZXJ0eShyLG4saSl9X19zdWJzY3JpYmUocj0hMCl7cj9FMC5pbmRleE9mKHRoaXMpPT09LTEmJkUwLnB1c2godGhpcyk6RTAuaW5kZXhPZih0aGlzKT4tMSYmRTAuc3BsaWNlKEUwLmluZGV4T2YodGhpcyksMSl9X19nZXROb3JtYWxpemVkU2Nyb2xsTGVmdChyKXtyZXR1cm4gXzMuZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQoJEgsdGhpcy5nZXRBdHRyaWJ1dGUoImRpciIpfHwibHRyIixyKX1fX3NldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHIsbil7cmV0dXJuIF8zLnNldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KCRILHRoaXMuZ2V0QXR0cmlidXRlKCJkaXIiKXx8Imx0ciIscixuKX19O3dpbmRvdy5WYWFkaW49d2luZG93LlZhYWRpbnx8e307d2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zPXdpbmRvdy5WYWFkaW4ucmVnaXN0cmF0aW9uc3x8W107d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFjaz13aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrfHx7fTt3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrWyJ2YWFkaW4tdXNhZ2Utc3RhdGlzdGljcyJdPWZ1bmN0aW9uKCl7emNlKCl9O3ZhciB6Y3QsRmNlPW5ldyBTZXQsWkg9ZT0+Y2xhc3MgZXh0ZW5kcyBLSChlKXtzdGF0aWMgZmluYWxpemUoKXtzdXBlci5maW5hbGl6ZSgpO2xldHtpczpyfT10aGlzO3ImJiFGY2UuaGFzKHIpJiYod2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zLnB1c2godGhpcyksRmNlLmFkZChyKSx3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrJiYoemN0PXNyLmRlYm91bmNlKHpjdCxreCwoKT0+e3dpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2tbInZhYWRpbi11c2FnZS1zdGF0aXN0aWNzIl0oKX0pLEpsKHpjdCkpKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksZG9jdW1lbnQuZG9jdHlwZT09PW51bGwmJmNvbnNvbGUud2FybignVmFhZGluIGNvbXBvbmVudHMgcmVxdWlyZSB0aGUgInN0YW5kYXJkcyBtb2RlIiBkZWNsYXJhdGlvbi4gUGxlYXNlIGFkZCA8IURPQ1RZUEUgaHRtbD4gdG8gdGhlIEhUTUwgZG9jdW1lbnQuJyl9fTt2YXIgSkg9Y2xhc3MgZXh0ZW5kcyBaSChEY2UoakgoeWgobXQpKSkpe3N0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gUWAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICBsYWJlbCB7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICBmbGV4OiBub25lOwogICAgICAgIH0KCiAgICAgICAgaW5wdXRbdHlwZT0nY2hlY2tib3gnXSB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICB0b3A6IDA7CiAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICBjdXJzb3I6IGluaGVyaXQ7CiAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KCiAgICAgIDxsYWJlbD4KICAgICAgICA8c3BhbiBwYXJ0PSJjaGVja2JveCI+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgIGNoZWNrZWQ9Int7Y2hlY2tlZDo6Y2hhbmdlfX0iCiAgICAgICAgICAgIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIgogICAgICAgICAgICBpbmRldGVybWluYXRlPSJ7e2luZGV0ZXJtaW5hdGU6OmNoYW5nZX19IgogICAgICAgICAgICByb2xlPSJwcmVzZW50YXRpb24iCiAgICAgICAgICAgIHRhYmluZGV4PSItMSIKICAgICAgICAgIC8+CiAgICAgICAgPC9zcGFuPgoKICAgICAgICA8c3BhbiBwYXJ0PSJsYWJlbCI+CiAgICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2xhYmVsPgogICAgYH1zdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1jaGVja2JveCJ9c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NoZWNrZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxpbmRldGVybWluYXRlOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfaW5kZXRlcm1pbmF0ZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0sdmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiJvbiJ9LF9uYXRpdmVDaGVja2JveDp7dHlwZTpPYmplY3R9fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5uYW1lfWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuY2hlY2tlZD90aGlzLl9zdG9yZWROYW1lOiIifXNldCBuYW1lKHQpe3RoaXMuX3N0b3JlZE5hbWU9dH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zZXRBdHRyaWJ1dGUoInJvbGUiLCJjaGVja2JveCIpLHRoaXMuX25hdGl2ZUNoZWNrYm94PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJyksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFuZGxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5fYWRkQWN0aXZlTGlzdGVuZXJzKCk7bGV0IHQ9dGhpcy5nZXRBdHRyaWJ1dGUoIm5hbWUiKTt0JiYodGhpcy5uYW1lPXQpLHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImxhYmVsIl0nKS5xdWVyeVNlbGVjdG9yKCJzbG90IikuYWRkRXZlbnRMaXN0ZW5lcigic2xvdGNoYW5nZSIsdGhpcy5fdXBkYXRlTGFiZWxBdHRyaWJ1dGUuYmluZCh0aGlzKSksdGhpcy5fdXBkYXRlTGFiZWxBdHRyaWJ1dGUoKX1fdXBkYXRlTGFiZWxBdHRyaWJ1dGUoKXtsZXQgdD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnR+PSJsYWJlbCJdJykscj10LmZpcnN0RWxlbWVudENoaWxkLmFzc2lnbmVkTm9kZXMoKTt0aGlzLl9pc0Fzc2lnbmVkTm9kZXNFbXB0eShyKT90LnNldEF0dHJpYnV0ZSgiZW1wdHkiLCIiKTp0LnJlbW92ZUF0dHJpYnV0ZSgiZW1wdHkiKX1faXNBc3NpZ25lZE5vZGVzRW1wdHkodCl7cmV0dXJuIHQubGVuZ3RoPT09MHx8dC5sZW5ndGg9PTEmJnRbMF0ubm9kZVR5cGU9PU5vZGUuVEVYVF9OT0RFJiZ0WzBdLnRleHRDb250ZW50LnRyaW0oKT09PSIifV9jaGVja2VkQ2hhbmdlZCh0KXt0aGlzLmluZGV0ZXJtaW5hdGU/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsIm1peGVkIik6dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsQm9vbGVhbih0KSl9X2luZGV0ZXJtaW5hdGVDaGFuZ2VkKHQpe3Q/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsIm1peGVkIik6dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsdGhpcy5jaGVja2VkKX1fYWRkQWN0aXZlTGlzdGVuZXJzKCl7dGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0aGlzLCJkb3duIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnRoaXMuc2V0QXR0cmlidXRlKCJhY3RpdmUiLCIiKX0pLHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcywidXAiLCgpPT50aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYWN0aXZlIikpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdD0+e3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiZ0LmtleUNvZGU9PT0zMiYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLnNldEF0dHJpYnV0ZSgiYWN0aXZlIiwiIikpfSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsdD0+e3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiZ0LmtleUNvZGU9PT0zMiYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl90b2dnbGVDaGVja2VkKCksdGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFjdGl2ZSIpLHRoaXMuaW5kZXRlcm1pbmF0ZSYmKHRoaXMuaW5kZXRlcm1pbmF0ZT0hMSkpfSl9Z2V0IGZvY3VzRWxlbWVudCgpe3JldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKX1fX2ludGVyYWN0aW9uc0FsbG93ZWQodCl7cmV0dXJuISh0aGlzLmRpc2FibGVkfHx0LnRhcmdldC5sb2NhbE5hbWU9PT0iYSIpfV9oYW5kbGVDbGljayh0KXt0aGlzLl9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KSYmKHRoaXMuaW5kZXRlcm1pbmF0ZT8odGhpcy5pbmRldGVybWluYXRlPSExLHQucHJldmVudERlZmF1bHQoKSx0aGlzLl90b2dnbGVDaGVja2VkKCkpOnQuY29tcG9zZWRQYXRoKClbMF0hPT10aGlzLl9uYXRpdmVDaGVja2JveCYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl90b2dnbGVDaGVja2VkKCkpKX1fdG9nZ2xlQ2hlY2tlZCgpe3RoaXMuY2hlY2tlZD0hdGhpcy5jaGVja2VkLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIse2NvbXBvc2VkOiExLGJ1YmJsZXM6ITB9KSl9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoSkguaXMsSkgpO2pjKCJ2YWFkaW4tZ3JpZCIsQ2lgCiAgICA6aG9zdCB7CiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKTsKICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtcyk7CiAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7CgogICAgICAvKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkgKi8KICAgICAgLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0yMHBjdCk7CiAgICAgIC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgICAgLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aDogMXB4OwogICAgICAtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItMTBwY3QpOwogICAgfQoKICAgIC8qIE5vIChvdXRlcikgYm9yZGVyICovCgogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1ib3JkZXInXSkpIHsKICAgICAgYm9yZGVyOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIENlbGwgc3R5bGVzICovCgogICAgW3BhcnR+PSdjZWxsJ10gewogICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtbSk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICB9CgogICAgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UteHMpIHZhcigtLWx1bW8tc3BhY2UtbSk7CiAgICB9CgogICAgLyogQXBwbHkgcm93IGJvcmRlcnMgYnkgZGVmYXVsdCBhbmQgaW50cm9kdWNlIHRoZSAibm8tcm93LWJvcmRlcnMiIHZhcmlhbnQgKi8KICAgIDpob3N0KDpub3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkpIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci10b3A6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIEhpZGUgZmlyc3QgYm9keSByb3cgdG9wIGJvcmRlciAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddW2ZpcnN0XSBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItdG9wOiAwOwogICAgICBtaW4taGVpZ2h0OiBjYWxjKHZhcigtLWx1bW8tc2l6ZS1tKSAtIHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSk7CiAgICB9CgogICAgLyogRm9jdXMtcmluZyAqLwoKICAgIFtwYXJ0fj0nY2VsbCddOmZvY3VzIHsKICAgICAgb3V0bGluZTogbm9uZTsKICAgIH0KCiAgICA6aG9zdChbbmF2aWdhdGluZ10pIFtwYXJ0fj0nY2VsbCddOmZvY3VzOjpiZWZvcmUgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICAvKiBEcmFnIGFuZCBEcm9wIHN0eWxlcyAqLwogICAgOmhvc3QoW2RyYWdvdmVyXSk6OmFmdGVyIHsKICAgICAgY29udGVudDogJyc7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgei1pbmRleDogMTAwOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyXSB7CiAgICAgIHotaW5kZXg6IDEwMCAhaW1wb3J0YW50OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcl0gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgY29udGVudDogJyc7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgICBoZWlnaHQ6IGNhbGModmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpICsgMnB4KTsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdCk7CiAgICB9CgogICAgOmhvc3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkgW2RyYWdvdmVyXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBoZWlnaHQ6IDJweDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyPSdiZWxvdyddIFtwYXJ0fj0nY2VsbCddOjphZnRlciB7CiAgICAgIHRvcDogMTAwJTsKICAgICAgYm90dG9tOiBhdXRvOwogICAgICBtYXJnaW4tdG9wOiAtMXB4OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXI9J2Fib3ZlJ10gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgdG9wOiBhdXRvOwogICAgICBib3R0b206IDEwMCU7CiAgICAgIG1hcmdpbi1ib3R0b206IC0xcHg7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkZXRhaWxzLW9wZW5lZF1bZHJhZ292ZXI9J2JlbG93J10gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pOjphZnRlciwKICAgIFtwYXJ0fj0ncm93J11bZGV0YWlscy1vcGVuZWRdW2RyYWdvdmVyPSdhYm92ZSddIFtwYXJ0fj0nZGV0YWlscy1jZWxsJ106OmFmdGVyIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyXVtkcmFnb3Zlcj0nb24tdG9wJ10gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSB7CiAgICAgIC8qIEFkZCBib3R0b20tc3BhY2UgdG8gdGhlIHJvdyBzbyB0aGUgZHJhZyBudW1iZXIgZG9lc24ndCBnZXQgY2xpcHBlZC4gTmVlZGVkIGZvciBJRS9FZGdlICovCiAgICAgIGJvcmRlci1ib3R0b206IDEwMHB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB6LWluZGV4OiAxMDAgIWltcG9ydGFudDsKICAgICAgb3BhY2l0eTogMC45OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXSB7CiAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2xhc3QtY29sdW1uXSB7CiAgICAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSAwOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXVtmaXJzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDAgMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcyk7CiAgICB9CgogICAgW2lvc10gW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgYmFja2dyb3VuZDogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICAjc2Nyb2xsZXI6bm90KFtpb3NdKSBbcGFydH49J3JvdyddW2RyYWdzdGFydF06bm90KFtkcmFnc3RhcnQ9JyddKTo6YWZ0ZXIgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiB2YXIoLS1fZ3JpZC1kcmFnLXN0YXJ0LXgpOwogICAgICB0b3A6IHZhcigtLV9ncmlkLWRyYWctc3RhcnQteSk7CiAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgY29udGVudDogYXR0cihkcmFnc3RhcnQpOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcGFkZGluZzogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAqIDAuOCk7CiAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLWVycm9yLWNvbnRyYXN0LWNvbG9yKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1lcnJvci1jb2xvcik7CiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1tKTsKICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWx1bW8tZm9udC1mYW1pbHkpOwogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4cyk7CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB0ZXh0LXRyYW5zZm9ybTogaW5pdGlhbDsKICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaXRpYWw7CiAgICAgIG1pbi13aWR0aDogY2FsYyh2YXIoLS1sdW1vLXNpemUtcykgKiAwLjcpOwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLyogSGVhZGVycyBhbmQgZm9vdGVycyAqLwoKICAgIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSwKICAgIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSwKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1zKTsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgIH0KCiAgICBbcGFydH49J2Zvb3Rlci1jZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBmb250LXdlaWdodDogNDAwOwogICAgfQoKICAgIFtwYXJ0PSdyb3cnXTpvbmx5LWNoaWxkIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS14bCk7CiAgICB9CgogICAgLyogSGVhZGVyIGJvcmRlcnMgKi8KCiAgICAvKiBIaWRlIGZpcnN0IGhlYWRlciByb3cgdG9wIGJvcmRlciAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3A6IDA7CiAgICB9CgogICAgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHRyYW5zcGFyZW50OwogICAgfQoKICAgIDpob3N0KDpub3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkpIFtwYXJ0PSdyb3cnXTpsYXN0LWNoaWxkIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogT3ZlcmZsb3cgdXNlcyBhIHN0cm9uZ2VyIGJvcmRlciBjb2xvciAqLwogICAgOmhvc3QoW292ZXJmbG93fj0ndG9wJ10pIFtwYXJ0PSdyb3cnXTpsYXN0LWNoaWxkIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBGb290ZXIgYm9yZGVycyAqLwoKICAgIFtwYXJ0PSdyb3cnXTpmaXJzdC1jaGlsZCBbcGFydH49J2Zvb3Rlci1jZWxsJ10gewogICAgICBib3JkZXItdG9wOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogT3ZlcmZsb3cgdXNlcyBhIHN0cm9uZ2VyIGJvcmRlciBjb2xvciAqLwogICAgOmhvc3QoW292ZXJmbG93fj0nYm90dG9tJ10pIFtwYXJ0PSdyb3cnXTpmaXJzdC1jaGlsZCBbcGFydH49J2Zvb3Rlci1jZWxsJ10gewogICAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogQ29sdW1uIHJlb3JkZXJpbmcgKi8KCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSkgdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddW3Jlb3JkZXItc3RhdHVzPSdhbGxvd2VkJ10gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ11bcmVvcmRlci1zdGF0dXM9J2RyYWdnaW5nJ10gewogICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1jb250cmFzdC01cGN0KSwgdmFyKC0tbHVtby1jb250cmFzdC01cGN0KSkgdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgIH0KCiAgICBbcGFydH49J3Jlb3JkZXItZ2hvc3QnXSB7CiAgICAgIG9wYWNpdHk6IDAuODU7CiAgICAgIGJveC1zaGFkb3c6IHZhcigtLWx1bW8tYm94LXNoYWRvdy1zKTsKICAgICAgLyogVE9ETyBVc2UgdGhlIHNhbWUgc3R5bGVzIGFzIGZvciB0aGUgY2VsbCBlbGVtZW50IChyZW9yZGVyLWdob3N0IGNvcGllcyBzdHlsZXMgZnJvbSB0aGUgY2VsbCBlbGVtZW50KSAqLwogICAgICBwYWRkaW5nOiB2YXIoLS1sdW1vLXNwYWNlLXMpIHZhcigtLWx1bW8tc3BhY2UtbSkgIWltcG9ydGFudDsKICAgIH0KCiAgICAvKiBDb2x1bW4gcmVzaXppbmcgKi8KCiAgICBbcGFydD0ncmVzaXplLWhhbmRsZSddIHsKICAgICAgd2lkdGg6IDNweDsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgICAgb3BhY2l0eTogMDsKICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwogICAgfQoKICAgIDpob3N0KDpub3QoW3Jlb3JkZXJpbmddKSkgKjpub3QoW2NvbHVtbi1yZXNpemluZ10pIFtwYXJ0fj0nY2VsbCddOmhvdmVyIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ10sCiAgICBbcGFydD0ncmVzaXplLWhhbmRsZSddOmFjdGl2ZSB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDAuMTVzOwogICAgfQoKICAgIC8qIENvbHVtbiBib3JkZXJzICovCgogICAgOmhvc3QoW3RoZW1lfj0nY29sdW1uLWJvcmRlcnMnXSkgW3BhcnR+PSdjZWxsJ106bm90KFtsYXN0LWNvbHVtbl0pOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci1yaWdodDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogRnJvemVuIGNvbHVtbnMgKi8KCiAgICBbbGFzdC1mcm96ZW5dIHsKICAgICAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgOmhvc3QoW292ZXJmbG93fj0nbGVmdCddKSBbcGFydH49J2NlbGwnXVtsYXN0LWZyb3plbl06bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogUm93IHN0cmlwZXMgKi8KCiAgICA6aG9zdChbdGhlbWV+PSdyb3ctc3RyaXBlcyddKSBbcGFydH49J3JvdyddOm5vdChbb2RkXSkgW3BhcnR+PSdib2R5LWNlbGwnXSwKICAgIDpob3N0KFt0aGVtZX49J3Jvdy1zdHJpcGVzJ10pIFtwYXJ0fj0ncm93J106bm90KFtvZGRdKSBbcGFydH49J2RldGFpbHMtY2VsbCddIHsKICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHZhcigtLWx1bW8tY29udHJhc3QtNXBjdCksIHZhcigtLWx1bW8tY29udHJhc3QtNXBjdCkpOwogICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CiAgICB9CgogICAgLyogU2VsZWN0ZWQgcm93ICovCgogICAgLyogUmFpc2UgdGhlIHNlbGVjdGVkIHJvd3MgYWJvdmUgdW5zZWxlY3RlZCByb3dzIChzbyB0aGF0IGJveC1zaGFkb3cgY2FuIGNvdmVyIHVuc2VsZWN0ZWQgcm93cykgKi8KICAgIDpob3N0KDpub3QoW3Jlb3JkZXJpbmddKSkgW3BhcnR+PSdyb3cnXVtzZWxlY3RlZF0gewogICAgICB6LWluZGV4OiAxOwogICAgfQoKICAgIDpob3N0KDpub3QoW3Jlb3JkZXJpbmddKSkgW3BhcnR+PSdyb3cnXVtzZWxlY3RlZF0gW3BhcnR+PSdib2R5LWNlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3IpLCB2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvcikpOwogICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0OwogICAgfQoKICAgIC8qIENvdmVyIHRoZSBib3JkZXIgb2YgYW4gdW5zZWxlY3RlZCByb3cgKi8KICAgIDpob3N0KDpub3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkpIFtwYXJ0fj0ncm93J11bc2VsZWN0ZWRdIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJveC1zaGFkb3c6IDAgdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIDAgMCB2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvcik7CiAgICB9CgogICAgLyogQ29tcGFjdCAqLwoKICAgIDpob3N0KFt0aGVtZX49J2NvbXBhY3QnXSkgW3BhcnQ9J3JvdyddOm9ubHktY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLW0pOwogICAgfQoKICAgIDpob3N0KFt0aGVtZX49J2NvbXBhY3QnXSkgW3BhcnR+PSdjZWxsJ10gewogICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtcyk7CiAgICB9CgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydD0ncm93J11bZmlyc3RdIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIG1pbi1oZWlnaHQ6IGNhbGModmFyKC0tbHVtby1zaXplLXMpIC0gdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpKTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSdjb21wYWN0J10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgcGFkZGluZzogdmFyKC0tbHVtby1zcGFjZS14cykgdmFyKC0tbHVtby1zcGFjZS1zKTsKICAgIH0KCiAgICAvKiBXcmFwIGNlbGwgY29udGVudHMgKi8KCiAgICA6aG9zdChbdGhlbWV+PSd3cmFwLWNlbGwtY29udGVudCddKSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICAgIDpob3N0KFtkaXI9J3J0bCddKSBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ11bbGFzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDAgMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcyk7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXVtmaXJzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDA7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ11bdGhlbWV+PSdjb2x1bW4tYm9yZGVycyddKSBbcGFydH49J2NlbGwnXTpub3QoW2xhc3QtY29sdW1uXSk6bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgICBib3JkZXItbGVmdDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtsYXN0LWZyb3plbl0gewogICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIGJvcmRlci1sZWZ0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ11bb3ZlcmZsb3d+PSdyaWdodCddKSBbcGFydH49J2NlbGwnXVtsYXN0LWZyb3plbl06bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KICBgLHttb2R1bGVJZDoibHVtby1ncmlkIn0pO2pjKCJ2YWFkaW4tY2hlY2tib3giLENpYAogICAgOmhvc3QoLnZhYWRpbi1ncmlkLXNlbGVjdC1hbGwtY2hlY2tib3gpIHsKICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKTsKICAgIH0KICBgLHttb2R1bGVJZDoidmFhZGluLWdyaWQtc2VsZWN0LWFsbC1jaGVja2JveC1sdW1vIn0pO3ZhciBCY2U9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpob25lfGFkOyg/OiBVOyk/IENQVSkgT1MgKFxkKykvKSxlaHI9QmNlJiZCY2VbMV0+PTgsSGNlPTMsVmNlPXU5KHtiZWhhdmlvcnM6W0pzLHk5XSxfcmF0aW86LjUsX3Njcm9sbGVyUGFkZGluZ1RvcDowLF9zY3JvbGxQb3NpdGlvbjowLF9waHlzaWNhbFNpemU6MCxfcGh5c2ljYWxBdmVyYWdlOjAsX3BoeXNpY2FsQXZlcmFnZUNvdW50OjAsX3BoeXNpY2FsVG9wOjAsX3ZpcnR1YWxDb3VudDowLF9lc3RTY3JvbGxIZWlnaHQ6MCxfc2Nyb2xsSGVpZ2h0OjAsX3ZpZXdwb3J0SGVpZ2h0OjAsX3ZpZXdwb3J0V2lkdGg6MCxfcGh5c2ljYWxJdGVtczpudWxsLF9waHlzaWNhbFNpemVzOm51bGwsX2ZpcnN0VmlzaWJsZUluZGV4VmFsOm51bGwsX2xhc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbWF4UGFnZXM6MixfZm9jdXNlZFZpcnR1YWxJbmRleDotMSxfdGVtcGxhdGVDb3N0OjAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFNpemUtdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfbWF4U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl92aWV3cG9ydEhlaWdodCt0aGlzLl9zY3JvbGxPZmZzZXR9LGdldCBfbWF4VmlydHVhbFN0YXJ0KCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydChlKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpLHRoaXMuX3ZpcnR1YWxTdGFydFZhbD1lfSxnZXQgX3ZpcnR1YWxTdGFydCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnRWYWx8fDB9LHNldCBfcGh5c2ljYWxTdGFydChlKXtlPWUldGhpcy5fcGh5c2ljYWxDb3VudCxlPDAmJihlPXRoaXMuX3BoeXNpY2FsQ291bnQrZSksdGhpcy5fcGh5c2ljYWxTdGFydFZhbD1lfSxnZXQgX3BoeXNpY2FsU3RhcnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxTdGFydFZhbHx8MH0sZ2V0IF9waHlzaWNhbEVuZCgpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMSkldGhpcy5fcGh5c2ljYWxDb3VudH0sc2V0IF9waHlzaWNhbENvdW50KGUpe3RoaXMuX3BoeXNpY2FsQ291bnRWYWw9ZX0sZ2V0IF9waHlzaWNhbENvdW50KCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsQ291bnRWYWx8fDB9LGdldCBfb3B0UGh5c2ljYWxTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0SGVpZ2h0PT09MD8xLzA6dGhpcy5fdmlld3BvcnRIZWlnaHQqdGhpcy5fbWF4UGFnZXN9LGdldCBfaXNWaXNpYmxlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5vZmZzZXRXaWR0aHx8dGhpcy5vZmZzZXRIZWlnaHQpfSxnZXQgZmlyc3RWaXNpYmxlSW5kZXgoKXtsZXQgZT10aGlzLl9maXJzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtsZXQgdD10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQ7ZT10aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24ocixuKXtpZih0Kz10aGlzLl9waHlzaWNhbFNpemVzW3JdLHQ+dGhpcy5fc2Nyb2xsUG9zaXRpb24pcmV0dXJuIG59KXx8MCx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1lfXJldHVybiBlfSxnZXQgbGFzdFZpc2libGVJbmRleCgpe2xldCBlPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw7aWYoZT09bnVsbCl7bGV0IHQ9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe3Q8dGhpcy5fc2Nyb2xsQm90dG9tJiYoZT1uKSx0Kz10aGlzLl9waHlzaWNhbFNpemVzW3JdfSksdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1lfXJldHVybiBlfSxnZXQgX3Njcm9sbE9mZnNldCgpe3JldHVybiB0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3B9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSksdGhpcy5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpfSx1cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXM6ZnVuY3Rpb24oKXtsZXQgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTt0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3A9dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzPzA6cGFyc2VJbnQoZVsicGFkZGluZy10b3AiXSwxMCksdGhpcy5faXNSVEw9Qm9vbGVhbihlLmRpcmVjdGlvbj09PSJydGwiKSx0aGlzLl92aWV3cG9ydFdpZHRoPXRoaXMuJC5pdGVtcy5vZmZzZXRXaWR0aCx0aGlzLl92aWV3cG9ydEhlaWdodD10aGlzLl9zY3JvbGxUYXJnZXRIZWlnaHR9LF9zY3JvbGxIYW5kbGVyOmZ1bmN0aW9uKCl7bGV0IGU9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLl9tYXhTY3JvbGxUb3AsdGhpcy5fc2Nyb2xsVG9wKSksdD1lLXRoaXMuX3Njcm9sbFBvc2l0aW9uLHI9dD49MDtpZih0aGlzLl9zY3JvbGxQb3NpdGlvbj1lLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLE1hdGguYWJzKHQpPnRoaXMuX3BoeXNpY2FsU2l6ZSYmdGhpcy5fcGh5c2ljYWxTaXplPjApe3Q9dC10aGlzLl9zY3JvbGxPZmZzZXQ7bGV0IG49TWF0aC5yb3VuZCh0L3RoaXMuX3BoeXNpY2FsQXZlcmFnZSk7dGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtuLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtuLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsdGhpcy5fdXBkYXRlKCl9ZWxzZSBpZih0aGlzLl9waHlzaWNhbENvdW50PjApe2xldHtwaHlzaWNhbFRvcDpuLGluZGV4ZXM6aX09dGhpcy5fZ2V0UmV1c2FibGVzKHIpO3I/KHRoaXMuX3BoeXNpY2FsVG9wPW4sdGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtpLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraS5sZW5ndGgpOih0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0LWkubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydC1pLmxlbmd0aCksdGhpcy5fdXBkYXRlKGkscj9udWxsOmkpLHRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcywwKSxjaSl9fSxfZ2V0UmV1c2FibGVzOmZ1bmN0aW9uKGUpe2xldCB0LHIsbixpPVtdLG89dGhpcy5faGlkZGVuQ29udGVudFNpemUqdGhpcy5fcmF0aW8sYT10aGlzLl92aXJ0dWFsU3RhcnQscz10aGlzLl92aXJ0dWFsRW5kLGw9dGhpcy5fcGh5c2ljYWxDb3VudCxjPXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCx1PXRoaXMuX3BoeXNpY2FsQm90dG9tK3RoaXMuX3Njcm9sbE9mZnNldCxoPXRoaXMuX3Njcm9sbFRvcCxmPXRoaXMuX3Njcm9sbEJvdHRvbTtmb3IoZT8odD10aGlzLl9waHlzaWNhbFN0YXJ0LHI9aC1jKToodD10aGlzLl9waHlzaWNhbEVuZCxyPXUtZik7bj10aGlzLl9waHlzaWNhbFNpemVzW3RdLHI9ci1uLCEoaS5sZW5ndGg+PWx8fHI8PW8pOylpZihlKXtpZihzK2kubGVuZ3RoKzE+PXRoaXMuX3ZpcnR1YWxDb3VudHx8YytuPj1oLXRoaXMuX3Njcm9sbE9mZnNldClicmVhaztpLnB1c2godCksYz1jK24sdD0odCsxKSVsfWVsc2V7aWYoYS1pLmxlbmd0aDw9MHx8Yyt0aGlzLl9waHlzaWNhbFNpemUtbjw9ZilicmVhaztpLnB1c2godCksYz1jLW4sdD10PT09MD9sLTE6dC0xfXJldHVybntpbmRleGVzOmkscGh5c2ljYWxUb3A6Yy10aGlzLl9zY3JvbGxPZmZzZXR9fSxfdXBkYXRlOmZ1bmN0aW9uKGUsdCl7aWYoIShlJiZlLmxlbmd0aD09PTB8fHRoaXMuX3BoeXNpY2FsQ291bnQ9PT0wKSl7aWYodGhpcy5fYXNzaWduTW9kZWxzKGUpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoZSksdClmb3IoO3QubGVuZ3RoOyl7bGV0IHI9dC5wb3AoKTt0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fcGh5c2ljYWxTaXplc1tyXX10aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCl9fSxfaXNDbGllbnRGdWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Njcm9sbEJvdHRvbSE9MCYmdGhpcy5fcGh5c2ljYWxCb3R0b20tMT49dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbFRvcDw9dGhpcy5fc2Nyb2xsUG9zaXRpb259LF9pbmNyZWFzZVBvb2xJZk5lZWRlZDpmdW5jdGlvbihlKXtsZXQgcj10aGlzLl9jbGFtcCh0aGlzLl9waHlzaWNhbENvdW50K2UsSGNlLHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpLXRoaXMuX3BoeXNpY2FsQ291bnQsbj1NYXRoLnJvdW5kKHRoaXMuX3BoeXNpY2FsQ291bnQqLjUpO2lmKCEocjwwKSl7aWYocj4wKXtsZXQgaT13aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7W10ucHVzaC5hcHBseSh0aGlzLl9waHlzaWNhbEl0ZW1zLHRoaXMuX2NyZWF0ZVBvb2wocikpO2ZvcihsZXQgbz0wO288cjtvKyspdGhpcy5fcGh5c2ljYWxTaXplcy5wdXNoKDApO3RoaXMuX3BoeXNpY2FsQ291bnQ9dGhpcy5fcGh5c2ljYWxDb3VudCtyLHRoaXMuX3BoeXNpY2FsU3RhcnQ+dGhpcy5fcGh5c2ljYWxFbmQmJnRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSYmdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KTx0aGlzLl9waHlzaWNhbEVuZCYmKHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtyKSx0aGlzLl91cGRhdGUoKSx0aGlzLl90ZW1wbGF0ZUNvc3Q9KHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKS1pKS9yLG49TWF0aC5yb3VuZCh0aGlzLl9waHlzaWNhbENvdW50Ki41KX10aGlzLl92aXJ0dWFsRW5kPj10aGlzLl92aXJ0dWFsQ291bnQtMXx8bj09PTB8fCh0aGlzLl9pc0NsaWVudEZ1bGwoKT90aGlzLl9waHlzaWNhbFNpemU8dGhpcy5fb3B0UGh5c2ljYWxTaXplJiZ0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsdGhpcy5fY2xhbXAoTWF0aC5yb3VuZCg1MC90aGlzLl90ZW1wbGF0ZUNvc3QpLDEsbikpLGt4KTp0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsbiksY2kpKX19LF9yZW5kZXI6ZnVuY3Rpb24oKXtpZighKCF0aGlzLmlzQXR0YWNoZWR8fCF0aGlzLl9pc1Zpc2libGUpKWlmKHRoaXMuX3BoeXNpY2FsQ291bnQhPT0wKXtsZXR7cGh5c2ljYWxUb3A6ZSxpbmRleGVzOnR9PXRoaXMuX2dldFJldXNhYmxlcyghMCk7dGhpcy5fcGh5c2ljYWxUb3A9ZSx0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3QubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCt0Lmxlbmd0aCx0aGlzLl91cGRhdGUodCksdGhpcy5fdXBkYXRlKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCl9ZWxzZSB0aGlzLl92aXJ0dWFsQ291bnQ+MCYmKHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoSGNlKSl9LF9pdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oZSl7ZS5wYXRoPT09Iml0ZW1zIiYmKHRoaXMuX3ZpcnR1YWxTdGFydD0wLHRoaXMuX3BoeXNpY2FsVG9wPTAsdGhpcy5fdmlydHVhbENvdW50PXRoaXMuaXRlbXM/dGhpcy5pdGVtcy5sZW5ndGg6MCx0aGlzLl9waHlzaWNhbEluZGV4Rm9yS2V5PXt9LHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX3BoeXNpY2FsQ291bnQ9dGhpcy5fcGh5c2ljYWxDb3VudHx8MCx0aGlzLl9waHlzaWNhbEl0ZW1zPXRoaXMuX3BoeXNpY2FsSXRlbXN8fFtdLHRoaXMuX3BoeXNpY2FsU2l6ZXM9dGhpcy5fcGh5c2ljYWxTaXplc3x8W10sdGhpcy5fcGh5c2ljYWxTdGFydD0wLHRoaXMuX3Njcm9sbFRvcD50aGlzLl9zY3JvbGxPZmZzZXQmJnRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24oMCksdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSkpfSxfaXRlcmF0ZUl0ZW1zOmZ1bmN0aW9uKGUsdCl7bGV0IHIsbixpLG87aWYoYXJndW1lbnRzLmxlbmd0aD09PTImJnQpe2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspaWYocj10W29dLG49dGhpcy5fY29tcHV0ZVZpZHgociksKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGl9ZWxzZXtmb3Iocj10aGlzLl9waHlzaWNhbFN0YXJ0LG49dGhpcy5fdmlydHVhbFN0YXJ0O3I8dGhpcy5fcGh5c2ljYWxDb3VudDtyKyssbisrKWlmKChpPWUuY2FsbCh0aGlzLHIsbikpIT1udWxsKXJldHVybiBpO2ZvcihyPTA7cjx0aGlzLl9waHlzaWNhbFN0YXJ0O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGl9fSxfY29tcHV0ZVZpZHg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PXRoaXMuX3BoeXNpY2FsU3RhcnQ/dGhpcy5fdmlydHVhbFN0YXJ0KyhlLXRoaXMuX3BoeXNpY2FsU3RhcnQpOnRoaXMuX3ZpcnR1YWxTdGFydCsodGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl9waHlzaWNhbFN0YXJ0KStlfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbihlKXtpZighdGhpcy5faXNWaXNpYmxlKXJldHVybjt1aSgpO2xldCB0PTAscj0wLG49dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQsaT10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKG8pe3IrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxTaXplc1tvXT10aGlzLl9waHlzaWNhbEl0ZW1zW29dLm9mZnNldEhlaWdodCx0Kz10aGlzLl9waHlzaWNhbFNpemVzW29dLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50Kz10aGlzLl9waHlzaWNhbFNpemVzW29dPzE6MH0sZSksdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZSt0LXIsdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1uJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKGkqbit0KS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfcG9zaXRpb25JdGVtczpmdW5jdGlvbigpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7bGV0IGU9dGhpcy5fcGh5c2ljYWxUb3A7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHQpe3RoaXMudHJhbnNsYXRlM2QoMCxlKyJweCIsMCx0aGlzLl9waHlzaWNhbEl0ZW1zW3RdKSxlKz10aGlzLl9waHlzaWNhbFNpemVzW3RdfSl9LF9hZGp1c3RTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2xldCBlPXRoaXMuX3ZpcnR1YWxTdGFydD09PTA/dGhpcy5fcGh5c2ljYWxUb3A6TWF0aC5taW4odGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fcGh5c2ljYWxUb3AsMCk7aWYoZSE9PTApe3RoaXMuX3BoeXNpY2FsVG9wPXRoaXMuX3BoeXNpY2FsVG9wLWU7bGV0IHQ9dGhpcy5fc2Nyb2xsVG9wOyFlaHImJnQ+MCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0LWUpfX0sX3Jlc2V0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oZSl7dGhpcy5zY3JvbGxUYXJnZXQmJmU+PTAmJih0aGlzLl9zY3JvbGxUb3A9ZSx0aGlzLl9zY3JvbGxQb3NpdGlvbj10aGlzLl9zY3JvbGxUb3ApfSxfdXBkYXRlU2Nyb2xsZXJTaXplOmZ1bmN0aW9uKGUpe3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLGU9ZXx8dGhpcy5fc2Nyb2xsSGVpZ2h0PT09MCxlPWV8fHRoaXMuX3Njcm9sbFBvc2l0aW9uPj10aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fcGh5c2ljYWxTaXplLChlfHxNYXRoLmFicyh0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fc2Nyb2xsSGVpZ2h0KT49dGhpcy5fdmlld3BvcnRIZWlnaHQpJiYodGhpcy4kLml0ZW1zLnN0eWxlLmhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQrInB4Iix0aGlzLl9zY3JvbGxIZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KX0sc2Nyb2xsVG9JbmRleDpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9Im51bWJlciJ8fGU8MHx8ZT50aGlzLml0ZW1zLmxlbmd0aC0xfHwodWkoKSx0aGlzLl9waHlzaWNhbENvdW50PT09MCkpcmV0dXJuO2U9dGhpcy5fY2xhbXAoZSwwLHRoaXMuX3ZpcnR1YWxDb3VudC0xKSwoIXRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKXx8ZT49dGhpcy5fbWF4VmlydHVhbFN0YXJ0KSYmKHRoaXMuX3ZpcnR1YWxTdGFydD1lLTEpLHRoaXMuX2Fzc2lnbk1vZGVscygpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoKSx0aGlzLl9waHlzaWNhbFRvcD1NYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlO2xldCB0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl92aXJ0dWFsU3RhcnQsbj0wLGk9dGhpcy5faGlkZGVuQ29udGVudFNpemU7Zm9yKDtyPGUmJm48PWk7KW49bit0aGlzLl9waHlzaWNhbFNpemVzW3RdLHQ9KHQrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxyKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQrbiksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGx9LF9yZXNldEF2ZXJhZ2U6ZnVuY3Rpb24oKXt0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9MCx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudD0wfSxfcmVzaXplSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIixmdW5jdGlvbigpe3RoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy5faXNWaXNpYmxlPyh0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCEwKSx0aGlzLl9yZXNldEF2ZXJhZ2UoKSx0aGlzLl9yZW5kZXIoKSk6dGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMSl9LE5pKX0sX2lzSW5kZXhSZW5kZXJlZDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fdmlydHVhbFN0YXJ0JiZlPD10aGlzLl92aXJ0dWFsRW5kfSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCsoZS10aGlzLl92aXJ0dWFsU3RhcnQpKSV0aGlzLl9waHlzaWNhbENvdW50fSxfY2xhbXA6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBNYXRoLm1pbihyLE1hdGgubWF4KHQsZSkpfSxfZGVib3VuY2U6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX2RlYm91bmNlcnM9dGhpcy5fZGVib3VuY2Vyc3x8e30sdGhpcy5fZGVib3VuY2Vyc1tlXT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJzW2VdLHIsdC5iaW5kKHRoaXMpKSxKbCh0aGlzLl9kZWJvdW5jZXJzW2VdKX19KTt2YXIgUUg9Y2xhc3MgZXh0ZW5kcyBWY2V7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3NpemU6e3R5cGU6TnVtYmVyLG5vdGlmeTohMH0sX3ZpZHhPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjB9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2VmZmVjdGl2ZVNpemVDaGFuZ2VkKF9lZmZlY3RpdmVTaXplKSJdfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9zY3JvbGxIYW5kbGVyKCl9X3VwZGF0ZVNjcm9sbGVySXRlbSgpe31fYWZ0ZXJTY3JvbGwoKXt9X2dldFJvd1RhcmdldCgpe31fY3JlYXRlU2Nyb2xsZXJSb3dzKCl7fV9jYW5Qb3B1bGF0ZSgpe31zY3JvbGxUb0luZGV4KHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJzY3JvbGxUb0luZGV4IiksdGhpcy5fc2Nyb2xsaW5nVG9JbmRleD0hMCx0PU1hdGgubWluKE1hdGgubWF4KHQsMCksdGhpcy5fZWZmZWN0aXZlU2l6ZS0xKSx0aGlzLiQudGFibGUuc2Nyb2xsVG9wPXQvdGhpcy5fZWZmZWN0aXZlU2l6ZSoodGhpcy4kLnRhYmxlLnNjcm9sbEhlaWdodC10aGlzLiQudGFibGUub2Zmc2V0SGVpZ2h0KSx0aGlzLl9zY3JvbGxIYW5kbGVyKCksdGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnRoaXMuX21heFNjcm9sbFRvcCkmJnRoaXMuX3ZpcnR1YWxDb3VudDx0aGlzLl9lZmZlY3RpdmVTaXplJiZ0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQoMWU2KSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuc2Nyb2xsVG9JbmRleCh0LXRoaXMuX3ZpZHhPZmZzZXQpKSx0aGlzLl9zY3JvbGxIYW5kbGVyKCk7bGV0IHI9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihuPT5uLmluZGV4PT09dClbMF07aWYocil7bGV0IG49ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtdGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207TWF0aC5hYnMobik+MSYmKHRoaXMuJC50YWJsZS5zY3JvbGxUb3ArPW4sdGhpcy5fc2Nyb2xsSGFuZGxlcigpKX10aGlzLl9zY3JvbGxpbmdUb0luZGV4PSExfV9lZmZlY3RpdmVTaXplQ2hhbmdlZCh0KXtsZXQgcixuPTA7dGhpcy5faXRlcmF0ZUl0ZW1zKChpLG8pPT57aWYobz09PXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4KXtsZXQgYT10aGlzLl9waHlzaWNhbEl0ZW1zW2ldO3I9YS5pbmRleCxuPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wfX0pLHRoaXMuaXRlbXMmJnQ8dGhpcy5pdGVtcy5sZW5ndGgmJih0aGlzLl9zY3JvbGxUb3A9MCksQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKXx8KHRoaXMuaXRlbXM9e2xlbmd0aDpNYXRoLm1pbih0LDFlNSl9KSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuX2l0ZW1zQ2hhbmdlZCh7cGF0aDoiaXRlbXMifSkpLHRoaXMuX3ZpcnR1YWxDb3VudD1NYXRoLm1pbih0aGlzLml0ZW1zLmxlbmd0aCx0KXx8MCx0aGlzLl9zY3JvbGxUb3A9PT0wJiYodGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnRoaXMuX3Njcm9sbFRvSW5kZXgoTWF0aC5taW4odC0xLHIpKSksdGhpcy5faXRlcmF0ZUl0ZW1zKGk9PntsZXQgbz10aGlzLl9waHlzaWNhbEl0ZW1zW2ldO2lmKG8uaW5kZXg9PT1yJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9TWF0aC5yb3VuZChvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1uKSksby5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgmJnRoaXMuX2l0ZW1zRm9jdXNhYmxlJiZ0aGlzLiQuaXRlbXMuY29udGFpbnModGhpcy5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQpKXtsZXQgYT1BcnJheS5mcm9tKHRoaXMuX2l0ZW1zRm9jdXNhYmxlLnBhcmVudEVsZW1lbnQuY2hpbGRyZW4pLmluZGV4T2YodGhpcy5faXRlbXNGb2N1c2FibGUpO28uY2hpbGRyZW5bYV0uZm9jdXMoKX19KSksdGhpcy5fYXNzaWduTW9kZWxzKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl91cGRhdGUoKSksdGhpcy5fX3VwZGF0ZUZvb3RlclBvc2l0aW9uaW5nKCl9X3Bvc2l0aW9uSXRlbXMoKXt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpO2xldCB0O2lzTmFOKHRoaXMuX3BoeXNpY2FsVG9wKSYmKHQ9ITAsdGhpcy5fcGh5c2ljYWxUb3A9MCk7bGV0IHI9dGhpcy5fcGh5c2ljYWxUb3A7dGhpcy5faXRlcmF0ZUl0ZW1zKG49Pnt0aGlzLl9waHlzaWNhbEl0ZW1zW25dLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWSgke3J9cHgpYCxyKz10aGlzLl9waHlzaWNhbFNpemVzW25dfSksdCYmdGhpcy5fc2Nyb2xsVG9JbmRleCgwKX1faW5jcmVhc2VQb29sSWZOZWVkZWQodCl7dD09PTAmJnRoaXMuX3Njcm9sbGluZ1RvSW5kZXh8fCF0aGlzLl9jYW5Qb3B1bGF0ZSgpfHwhdGhpcy5fZWZmZWN0aXZlU2l6ZXx8KHRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZD90aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJih0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbD1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCxOaSwoKT0+e3RoaXMuX3VwZGF0ZU1ldHJpY3MoKTtsZXQgcj10aGlzLl9vcHRQaHlzaWNhbFNpemUtdGhpcy5fcGh5c2ljYWxTaXplLG49TWF0aC5jZWlsKHIvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKTt0aGlzLl9waHlzaWNhbENvdW50K24+dGhpcy5fZWZmZWN0aXZlU2l6ZSYmKG49TWF0aC5tYXgoMCx0aGlzLl9lZmZlY3RpdmVTaXplLXRoaXMuX3BoeXNpY2FsQ291bnQpKSx0aGlzLl9waHlzaWNhbFNpemUmJm4+MCYmdGhpcy5fb3B0UGh5c2ljYWxTaXplIT09MS8wJiYoc3VwZXIuX2luY3JlYXNlUG9vbElmTmVlZGVkKG4pLHRoaXMuX19yZW9yZGVyQ2hpbGROb2RlcygpKX0pKToodGhpcy5faW5pdGlhbFBvb2xDcmVhdGVkPSEwLHN1cGVyLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgyNSkpKX1fX3Jlb3JkZXJDaGlsZE5vZGVzKCl7bGV0IHQ9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGROb2Rlcyk7ISF0LnJlZHVjZSgobixpLG8sYSk9PntpZihvPT09MHx8YVtvLTFdLmluZGV4PT09aS5pbmRleC0xKXJldHVybiBufSwhMCl8fHQuc29ydCgobixpKT0+bi5pbmRleC1pLmluZGV4KS5mb3JFYWNoKG49PnRoaXMuJC5pdGVtcy5hcHBlbmRDaGlsZChuKSl9X2NyZWF0ZVBvb2wodCl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLG49dGhpcy5fY3JlYXRlU2Nyb2xsZXJSb3dzKHQpO24uZm9yRWFjaChvPT5yLmFwcGVuZENoaWxkKG8pKSx0aGlzLl9nZXRSb3dUYXJnZXQoKS5hcHBlbmRDaGlsZChyKTtsZXQgaT10aGlzLnF1ZXJ5U2VsZWN0b3IoIltzbG90XSIpO2lmKGkpe2xldCBvPWkuZ2V0QXR0cmlidXRlKCJzbG90Iik7aS5zZXRBdHRyaWJ1dGUoInNsb3QiLCJmb28tYmFyIiksaS5zZXRBdHRyaWJ1dGUoInNsb3QiLG8pfXJldHVybiBUbSh0aGlzLCgpPT50aGlzLm5vdGlmeVJlc2l6ZSgpKSxufV9hc3NpZ25Nb2RlbHModCl7dGhpcy5faXRlcmF0ZUl0ZW1zKChyLG4pPT57bGV0IGk9dGhpcy5fcGh5c2ljYWxJdGVtc1tyXTt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImhpZGRlbiIsbj49dGhpcy5fZWZmZWN0aXZlU2l6ZSxpKSx0aGlzLl91cGRhdGVTY3JvbGxlckl0ZW0oaSxuKyh0aGlzLl92aWR4T2Zmc2V0fHwwKSl9LHQpfV9zY3JvbGxIYW5kbGVyKCl7bGV0IHQ9dGhpcy4kLnRhYmxlLnNjcm9sbFRvcC10aGlzLl9zY3JvbGxQb3NpdGlvbjt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSShzdXBlci5fc2Nyb2xsSGFuZGxlcik7bGV0IHI9dGhpcy5fdmlkeE9mZnNldDt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fbWF4U2Nyb2xsVG9wKSYmdGhpcy5fdmlydHVhbENvdW50PHRoaXMuX2VmZmVjdGl2ZVNpemU/dGhpcy5fYWRqdXN0VmlydHVhbEluZGV4T2Zmc2V0KHQpOnRoaXMuX3ZpZHhPZmZzZXQ9MCx0aGlzLl92aWR4T2Zmc2V0IT09ciYmdGhpcy5fdXBkYXRlKCksdGhpcy5fYWZ0ZXJTY3JvbGwoKX1fYWRqdXN0VmlydHVhbEluZGV4T2Zmc2V0KHQpe2lmKE1hdGguYWJzKHQpPjFlNCl7aWYodGhpcy5fbm9TY2FsZSl7dGhpcy5fbm9TY2FsZT0hMTtyZXR1cm59bGV0IHI9dGhpcy4kLnRhYmxlLnNjcm9sbFRvcC8odGhpcy4kLnRhYmxlLnNjcm9sbEhlaWdodC10aGlzLiQudGFibGUub2Zmc2V0SGVpZ2h0KSxuPXIqdGhpcy5fZWZmZWN0aXZlU2l6ZTt0aGlzLl92aWR4T2Zmc2V0PU1hdGgucm91bmQobi1yKnRoaXMuX3ZpcnR1YWxDb3VudCl9ZWxzZXtsZXQgcj10aGlzLl92aWR4T2Zmc2V0fHwwLG49MWUzLGk9MTAwO3RoaXMuX3Njcm9sbFRvcD09PTA/KHRoaXMuX3ZpZHhPZmZzZXQ9MCxyIT09dGhpcy5fdmlkeE9mZnNldCYmc3VwZXIuc2Nyb2xsVG9JbmRleCgwKSk6dGhpcy5maXJzdFZpc2libGVJbmRleDxuJiZ0aGlzLl92aWR4T2Zmc2V0PjAmJih0aGlzLl92aWR4T2Zmc2V0LT1NYXRoLm1pbih0aGlzLl92aWR4T2Zmc2V0LGkpLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgrKHItdGhpcy5fdmlkeE9mZnNldCkpLHRoaXMuX25vU2NhbGU9ITApO2xldCBvPXRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fdmlydHVhbENvdW50O3RoaXMuX3Njcm9sbFRvcD49dGhpcy5fbWF4U2Nyb2xsVG9wJiZ0aGlzLl9tYXhTY3JvbGxUb3A+MD8odGhpcy5fdmlkeE9mZnNldD1vLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuX3ZpcnR1YWxDb3VudCkpOnRoaXMuZmlyc3RWaXNpYmxlSW5kZXg+dGhpcy5fdmlydHVhbENvdW50LW4mJnRoaXMuX3ZpZHhPZmZzZXQ8byYmKHRoaXMuX3ZpZHhPZmZzZXQrPU1hdGgubWluKG8tdGhpcy5fdmlkeE9mZnNldCxpKSxyIT09dGhpcy5fdmlkeE9mZnNldCYmc3VwZXIuc2Nyb2xsVG9JbmRleCh0aGlzLmZpcnN0VmlzaWJsZUluZGV4LSh0aGlzLl92aWR4T2Zmc2V0LXIpKSx0aGlzLl9ub1NjYWxlPSEwKX19X2FjY2Vzc0lyb25MaXN0QVBJKHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkPSExO2xldCByPXQuYXBwbHkodGhpcyk7cmV0dXJuIHRoaXMuX2RlYm91bmNlcldhcm5Qcml2YXRlQVBJQWNjZXNzPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcldhcm5Qcml2YXRlQVBJQWNjZXNzLE5pLCgpPT50aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2Vzc0FzeW5jRW5hYmxlZD0hMCkscn1fZGVib3VuY2VSZW5kZXIodCxyKXtzdXBlci5fZGVib3VuY2VSZW5kZXIoKCk9PnRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHQpLHIpfV93YXJuUHJpdmF0ZUFQSUFjY2Vzcyh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2Vzc0FzeW5jRW5hYmxlZCYmY29uc29sZS53YXJuKGBBY2Nlc3NpbmcgcHJpdmF0ZSBBUEkgKCR7dH0pIWApfV9yZW5kZXIoKXt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSShzdXBlci5fcmVuZGVyKX1faXRlbXNDaGFuZ2VkKCl7fWdldCBfZmlyc3RWaXNpYmxlSW5kZXgoKXtyZXR1cm4gdGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnN1cGVyLmZpcnN0VmlzaWJsZUluZGV4KX1nZXQgX2xhc3RWaXNpYmxlSW5kZXgoKXtyZXR1cm4gdGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnN1cGVyLmxhc3RWaXNpYmxlSW5kZXgpfV9zY3JvbGxUb0luZGV4KHQpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT50aGlzLnNjcm9sbFRvSW5kZXgodCkpfWdldCBmaXJzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygiZmlyc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5maXJzdFZpc2libGVJbmRleH1zZXQgZmlyc3RWaXNpYmxlSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoImZpcnN0VmlzaWJsZUluZGV4Iiksc3VwZXIuZmlyc3RWaXNpYmxlSW5kZXg9dH1nZXQgbGFzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygibGFzdFZpc2libGVJbmRleCIpLHN1cGVyLmxhc3RWaXNpYmxlSW5kZXh9c2V0IGxhc3RWaXNpYmxlSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoImxhc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5sYXN0VmlzaWJsZUluZGV4PXR9dXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoInVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllcyIpLHN1cGVyLnVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9X3Jlc2l6ZUhhbmRsZXIoKXtzdXBlci5fcmVzaXplSGFuZGxlcigpLHVpKCl9fTt2YXIgVWNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2ExMXlVcGRhdGVHcmlkU2l6ZShzaXplLCBfY29sdW1uVHJlZSwgX2NvbHVtblRyZWUuKikiXX1fYTExeUdldEhlYWRlclJvd0NvdW50KHIpe3JldHVybiByLmZpbHRlcihuPT5uLnNvbWUoaT0+aS5faGVhZGVyVGVtcGxhdGV8fGkuaGVhZGVyUmVuZGVyZXJ8fGkucGF0aHx8aS5oZWFkZXIpKS5sZW5ndGh9X2ExMXlHZXRGb290ZXJSb3dDb3VudChyKXtyZXR1cm4gci5maWx0ZXIobj0+bi5zb21lKGk9PmkuX2hlYWRlclRlbXBsYXRlfHxpLmhlYWRlclJlbmRlcmVyKSkubGVuZ3RofV9hMTF5VXBkYXRlR3JpZFNpemUocixuKXtpZihyPT09dm9pZCAwfHxuPT09dm9pZCAwKXJldHVybjtsZXQgaT1uW24ubGVuZ3RoLTFdO3RoaXMuJC50YWJsZS5zZXRBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiLHIrdGhpcy5fYTExeUdldEhlYWRlclJvd0NvdW50KG4pK3RoaXMuX2ExMXlHZXRGb290ZXJSb3dDb3VudChuKSksdGhpcy4kLnRhYmxlLnNldEF0dHJpYnV0ZSgiYXJpYS1jb2xjb3VudCIsaSYmaS5sZW5ndGh8fDApLHRoaXMuX2ExMXlVcGRhdGVIZWFkZXJSb3dzKCksdGhpcy5fYTExeVVwZGF0ZUZvb3RlclJvd3MoKX1fYTExeVVwZGF0ZUhlYWRlclJvd3MoKXtBcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnIuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IixuKzEpKX1fYTExeVVwZGF0ZUZvb3RlclJvd3MoKXtBcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnIuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4Iix0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQodGhpcy5fY29sdW1uVHJlZSkrdGhpcy5zaXplK24rMSkpfV9hMTF5VXBkYXRlUm93Um93aW5kZXgocixuKXtyLnNldEF0dHJpYnV0ZSgiYXJpYS1yb3dpbmRleCIsbit0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQodGhpcy5fY29sdW1uVHJlZSkrMSl9X2ExMXlVcGRhdGVSb3dTZWxlY3RlZChyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIixCb29sZWFuKG4pKSxBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2goaT0+aS5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLEJvb2xlYW4obikpKX1fYTExeVVwZGF0ZVJvd0xldmVsKHIsbil7ci5zZXRBdHRyaWJ1dGUoImFyaWEtbGV2ZWwiLG4rMSl9X2ExMXlVcGRhdGVSb3dEZXRhaWxzT3BlbmVkKHIsbil7QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5mb3JFYWNoKGk9Pnt0eXBlb2Ygbj09ImJvb2xlYW4iP2kuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixuKTppLmhhc0F0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpJiZpLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpfSl9X2ExMXlTZXRSb3dEZXRhaWxzQ2VsbChyLG4pe0FycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT57aSE9PW4mJmkuc2V0QXR0cmlidXRlKCJhcmlhLWNvbnRyb2xzIixuLmlkKX0pfV9hMTF5VXBkYXRlQ2VsbENvbHNwYW4ocixuKXtyLnNldEF0dHJpYnV0ZSgiYXJpYS1jb2xzcGFuIixOdW1iZXIobikpfV9hMTF5VXBkYXRlU29ydGVycygpe0FycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCJ2YWFkaW4tZ3JpZC1zb3J0ZXIiKSkuZm9yRWFjaChyPT57bGV0IG49ci5wYXJlbnROb2RlO2Zvcig7biYmbi5sb2NhbE5hbWUhPT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50Ijspbj1uLnBhcmVudE5vZGU7biYmbi5hc3NpZ25lZFNsb3QmJm4uYXNzaWduZWRTbG90LnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKCJhcmlhLXNvcnQiLHthc2M6ImFzY2VuZGluZyIsZGVzYzoiZGVzY2VuZGluZyJ9W1N0cmluZyhyLmRpcmVjdGlvbildfHwibm9uZSIpfSl9fTt2YXIgcWNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57YWN0aXZlSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHZhbHVlOm51bGx9fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLnNjcm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY2VsbC1hY3RpdmF0ZSIsdGhpcy5fYWN0aXZhdGVJdGVtLmJpbmQodGhpcykpfV9hY3RpdmF0ZUl0ZW0ocil7bGV0IG49ci5kZXRhaWwubW9kZWwsaT1uP24uaXRlbTpudWxsO2kmJih0aGlzLmFjdGl2ZUl0ZW09dGhpcy5faXRlbXNFcXVhbCh0aGlzLmFjdGl2ZUl0ZW0saSk/bnVsbDppKX1fb25DbGljayhyKXtpZihyLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2xldCBuPXIuY29tcG9zZWRQYXRoKCksaT1uW24uaW5kZXhPZih0aGlzLiQudGFibGUpLTNdO2lmKCFpfHxpLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImRldGFpbHMtY2VsbCIpPi0xKXJldHVybjtsZXQgbz1pLl9jb250ZW50LGE9dGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQ7IW8uY29udGFpbnMoYSkmJiF0aGlzLl9pc0ZvY3VzYWJsZShyLnRhcmdldCkmJnRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtYWN0aXZhdGUiLHtkZXRhaWw6e21vZGVsOnRoaXMuX19nZXRSb3dNb2RlbChpLnBhcmVudEVsZW1lbnQpfX0pKX1faXNGb2N1c2FibGUocil7cmV0dXJuIHJocihyKX19LHJocj1lPT57aWYoIWUucGFyZW50Tm9kZSlyZXR1cm4hMTtsZXQgcj1BcnJheS5mcm9tKGUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCJbdGFiaW5kZXhdLCBidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBvYmplY3QsIGlmcmFtZSwgbGFiZWwsIGFbaHJlZl0sIGFyZWFbaHJlZl0iKSkuZmlsdGVyKG49Pm4uZ2V0QXR0cmlidXRlKCJwYXJ0IikhPT0iY2VsbCBib2R5LWNlbGwiKS5pbmRleE9mKGUpIT09LTE7cmV0dXJuIWUuZGlzYWJsZWQmJnJ9O3ZhciBHY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczpBcnJheX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9pdGVtc0NoYW5nZWQoaXRlbXMsIGl0ZW1zLiosIGlzQXR0YWNoZWQpIl19X2l0ZW1zQ2hhbmdlZChyLG4saSl7aWYoISFpKXtpZighQXJyYXkuaXNBcnJheShyKSl7cj09bnVsbCYmKHRoaXMuc2l6ZT0wKSx0aGlzLmRhdGFQcm92aWRlcj09PXRoaXMuX2FycmF5RGF0YVByb3ZpZGVyJiYodGhpcy5kYXRhUHJvdmlkZXI9dm9pZCAwKTtyZXR1cm59dGhpcy5zaXplPXIubGVuZ3RoLHRoaXMuZGF0YVByb3ZpZGVyPXRoaXMuZGF0YVByb3ZpZGVyfHx0aGlzLl9hcnJheURhdGFQcm92aWRlcix0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLl9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKX19X2FycmF5RGF0YVByb3ZpZGVyKHIsbil7bGV0IGk9KEFycmF5LmlzQXJyYXkodGhpcy5pdGVtcyk/dGhpcy5pdGVtczpbXSkuc2xpY2UoMCk7dGhpcy5fZmlsdGVycyYmdGhpcy5fY2hlY2tQYXRocyh0aGlzLl9maWx0ZXJzLCJmaWx0ZXJpbmciLGkpJiYoaT10aGlzLl9maWx0ZXIoaSkpLHRoaXMuc2l6ZT1pLmxlbmd0aCxyLnNvcnRPcmRlcnMubGVuZ3RoJiZ0aGlzLl9jaGVja1BhdGhzKHRoaXMuX3NvcnRlcnMsInNvcnRpbmciLGkpJiYoaT1pLnNvcnQodGhpcy5fbXVsdGlTb3J0LmJpbmQodGhpcykpKTtsZXQgbz1yLnBhZ2Uqci5wYWdlU2l6ZSxhPW8rci5wYWdlU2l6ZSxzPWkuc2xpY2UobyxhKTtuKHMsaS5sZW5ndGgpfV9jaGVja1BhdGhzKHIsbixpKXtpZighaS5sZW5ndGgpcmV0dXJuITE7bGV0IG89ITA7Zm9yKGxldCBhIGluIHIpe2xldCBzPXJbYV0ucGF0aDtpZighc3x8cy5pbmRleE9mKCIuIik9PT0tMSljb250aW51ZTtsZXQgbD1zLnJlcGxhY2UoL1wuW14uXSokLywiIik7RGEuZ2V0KGwsaVswXSk9PT12b2lkIDAmJihjb25zb2xlLndhcm4oYFBhdGggIiR7c30iIHVzZWQgZm9yICR7bn0gZG9lcyBub3QgZXhpc3QgaW4gYWxsIG9mIHRoZSBpdGVtcywgJHtufSBpcyBkaXNhYmxlZC5gKSxvPSExKX1yZXR1cm4gb31fbXVsdGlTb3J0KHIsbil7cmV0dXJuIHRoaXMuX3NvcnRlcnMubWFwKGk9PmkuZGlyZWN0aW9uPT09ImFzYyI/dGhpcy5fY29tcGFyZShEYS5nZXQoaS5wYXRoLHIpLERhLmdldChpLnBhdGgsbikpOmkuZGlyZWN0aW9uPT09ImRlc2MiP3RoaXMuX2NvbXBhcmUoRGEuZ2V0KGkucGF0aCxuKSxEYS5nZXQoaS5wYXRoLHIpKTowKS5yZWR1Y2UoKGksbyk9Pml8fG8sMCl9X25vcm1hbGl6ZUVtcHR5VmFsdWUocil7cmV0dXJuW3ZvaWQgMCxudWxsXS5pbmRleE9mKHIpPj0wPyIiOmlzTmFOKHIpP3IudG9TdHJpbmcoKTpyfV9jb21wYXJlKHIsbil7cmV0dXJuIHI9dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShyKSxuPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUobikscjxuPy0xOnI+bj8xOjB9X2ZpbHRlcihyKXtyZXR1cm4gci5maWx0ZXIobj0+dGhpcy5fZmlsdGVycy5maWx0ZXIoaT0+e2xldCBvPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoRGEuZ2V0KGkucGF0aCxuKSksYT10aGlzLl9ub3JtYWxpemVFbXB0eVZhbHVlKGkudmFsdWUpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4gby50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT09PS0xfSkubGVuZ3RoPT09MCl9fTt2YXIgV2NlPWU9PmNsYXNzIGV4dGVuZHMgeWgoZSl7cmVhZHkoKXtzdXBlci5yZWFkeSgpO2xldCByPXRoaXMuJC5zY3JvbGxlcjtFbShyLCJ0cmFjayIsdGhpcy5fb25IZWFkZXJUcmFjay5iaW5kKHRoaXMpKSxyLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsbj0+ci5oYXNBdHRyaWJ1dGUoImNvbHVtbi1yZXNpemluZyIpJiZuLnByZXZlbnREZWZhdWx0KCkpLHIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLG49Pm4udGFyZ2V0LmdldEF0dHJpYnV0ZSgicGFydCIpPT0icmVzaXplLWhhbmRsZSImJm4ucHJldmVudERlZmF1bHQoKSksci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLG49Pm4udGFyZ2V0LmdldEF0dHJpYnV0ZSgicGFydCIpPT09InJlc2l6ZS1oYW5kbGUiJiZuLnByZXZlbnREZWZhdWx0KCkpfV9vbkhlYWRlclRyYWNrKHIpe2xldCBuPXIudGFyZ2V0O2lmKG4uZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PT0icmVzaXplLWhhbmRsZSIpe2xldCBvPW4ucGFyZW50RWxlbWVudC5fY29sdW1uO2Zvcih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImNvbHVtbi1yZXNpemluZyIsITAsdGhpcy4kLnNjcm9sbGVyKTtvLmxvY2FsTmFtZT09PSJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiOylvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG8uX2NoaWxkQ29sdW1ucywwKS5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGwuX29yZGVyLWMuX29yZGVyfSkuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiFsLmhpZGRlbn0pLnBvcCgpO2xldCBhPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCdbcGFydH49InJvdyJdOmxhc3QtY2hpbGQgW3BhcnR+PSJjZWxsIl0nKSkscz1hLmZpbHRlcihsPT5sLl9jb2x1bW49PT1vKVswXTtpZihzLm9mZnNldFdpZHRoKXtsZXQgbD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzKSxjPTEwK3BhcnNlSW50KGwucGFkZGluZ0xlZnQpK3BhcnNlSW50KGwucGFkZGluZ1JpZ2h0KStwYXJzZUludChsLmJvcmRlckxlZnRXaWR0aCkrcGFyc2VJbnQobC5ib3JkZXJSaWdodFdpZHRoKStwYXJzZUludChsLm1hcmdpbkxlZnQpK3BhcnNlSW50KGwubWFyZ2luUmlnaHQpLHU9cy5vZmZzZXRXaWR0aCsodGhpcy5fX2lzUlRMP3MuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdC1yLmRldGFpbC54OnIuZGV0YWlsLngtcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCk7by53aWR0aD1NYXRoLm1heChjLHUpKyJweCIsby5mbGV4R3Jvdz0wfWEuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBsLl9jb2x1bW4uX29yZGVyLWMuX2NvbHVtbi5fb3JkZXJ9KS5mb3JFYWNoKGZ1bmN0aW9uKGwsYyx1KXtjPHUuaW5kZXhPZihzKSYmKGwuX2NvbHVtbi53aWR0aD1sLm9mZnNldFdpZHRoKyJweCIsbC5fY29sdW1uLmZsZXhHcm93PTApfSksci5kZXRhaWwuc3RhdGU9PT0iZW5kIiYmKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbHVtbi1yZXNpemUiLHtkZXRhaWw6e3Jlc2l6ZWRDb2x1bW46b319KSkpLHRoaXMuX3Jlc2l6ZUhhbmRsZXIoKX19fTt2YXIgWWNlPWNsYXNzIGpjZXtjb25zdHJ1Y3Rvcih0LHIsbil7dGhpcy5ncmlkPXQsdGhpcy5wYXJlbnRDYWNoZT1yLHRoaXMucGFyZW50SXRlbT1uLHRoaXMuaXRlbUNhY2hlcz17fSx0aGlzLml0ZW1zPXt9LHRoaXMuZWZmZWN0aXZlU2l6ZT0wLHRoaXMuc2l6ZT0wLHRoaXMucGVuZGluZ1JlcXVlc3RzPXt9fWlzTG9hZGluZygpe3JldHVybiBCb29sZWFuKE9iamVjdC5rZXlzKHRoaXMucGVuZGluZ1JlcXVlc3RzKS5sZW5ndGh8fE9iamVjdC5rZXlzKHRoaXMuaXRlbUNhY2hlcykuZmlsdGVyKHQ9PnRoaXMuaXRlbUNhY2hlc1t0XS5pc0xvYWRpbmcoKSlbMF0pfWdldEl0ZW1Gb3JJbmRleCh0KXtsZXR7Y2FjaGU6cixzY2FsZWRJbmRleDpufT10aGlzLmdldENhY2hlQW5kSW5kZXgodCk7cmV0dXJuIHIuaXRlbXNbbl19dXBkYXRlU2l6ZSgpe3RoaXMuZWZmZWN0aXZlU2l6ZT0hdGhpcy5wYXJlbnRJdGVtfHx0aGlzLmdyaWQuX2lzRXhwYW5kZWQodGhpcy5wYXJlbnRJdGVtKT90aGlzLnNpemUrT2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5yZWR1Y2UoKHQscik9PntsZXQgbj10aGlzLml0ZW1DYWNoZXNbcl07cmV0dXJuIG4udXBkYXRlU2l6ZSgpLHQrbi5lZmZlY3RpdmVTaXplfSwwKTowfWVuc3VyZVN1YkNhY2hlRm9yU2NhbGVkSW5kZXgodCl7aWYoIXRoaXMuaXRlbUNhY2hlc1t0XSl7bGV0IHI9bmV3IGpjZSh0aGlzLmdyaWQsdGhpcyx0aGlzLml0ZW1zW3RdKTt0aGlzLml0ZW1DYWNoZXNbdF09cix0aGlzLmdyaWQuX2xvYWRQYWdlKDAscil9fWdldENhY2hlQW5kSW5kZXgodCl7bGV0IHI9dCxuPU9iamVjdC5rZXlzKHRoaXMuaXRlbUNhY2hlcyk7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPU51bWJlcihuW2ldKSxhPXRoaXMuaXRlbUNhY2hlc1tvXTtpZihyPD1vKXJldHVybntjYWNoZTp0aGlzLHNjYWxlZEluZGV4OnJ9O2lmKHI8PW8rYS5lZmZlY3RpdmVTaXplKXJldHVybiBhLmdldENhY2hlQW5kSW5kZXgoci1vLTEpO3ItPWEuZWZmZWN0aXZlU2l6ZX1yZXR1cm57Y2FjaGU6dGhpcyxzY2FsZWRJbmRleDpyfX19LFhjZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3BhZ2VTaXplOnt0eXBlOk51bWJlcix2YWx1ZTo1MCxvYnNlcnZlcjoiX3BhZ2VTaXplQ2hhbmdlZCJ9LGRhdGFQcm92aWRlcjp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJfZGF0YVByb3ZpZGVyQ2hhbmdlZCJ9LGxvYWRpbmc6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfY2FjaGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBZY2UodGhpcyl9fSxpdGVtSWRQYXRoOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxleHBhbmRlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6KCk9PltdfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zaXplQ2hhbmdlZChzaXplKSIsIl9pdGVtSWRQYXRoQ2hhbmdlZChpdGVtSWRQYXRoKSIsIl9leHBhbmRlZEl0ZW1zQ2hhbmdlZChleHBhbmRlZEl0ZW1zLiopIl19X3NpemVDaGFuZ2VkKHIpe2xldCBuPXItdGhpcy5fY2FjaGUuc2l6ZTt0aGlzLl9jYWNoZS5zaXplKz1uLHRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUrPW4sdGhpcy5fZWZmZWN0aXZlU2l6ZT10aGlzLl9jYWNoZS5lZmZlY3RpdmVTaXplLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApLHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sJiZ0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbC5mbHVzaCgpfV9nZXRJdGVtKHIsbil7aWYocj49dGhpcy5fZWZmZWN0aXZlU2l6ZSlyZXR1cm47bi5pbmRleD1yO2xldHtjYWNoZTppLHNjYWxlZEluZGV4Om99PXRoaXMuX2NhY2hlLmdldENhY2hlQW5kSW5kZXgociksYT1pLml0ZW1zW29dO2E/KHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibG9hZGluZyIsITEsbiksdGhpcy5fdXBkYXRlSXRlbShuLGEpLHRoaXMuX2lzRXhwYW5kZWQoYSkmJmkuZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleChvKSk6KHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibG9hZGluZyIsITAsbiksdGhpcy5fbG9hZFBhZ2UodGhpcy5fZ2V0UGFnZUZvckluZGV4KG8pLGkpKX1fZXhwYW5kZWRJbnN0YW5jZUNoYW5nZWRDYWxsYmFjayhyLG4pe3IuaXRlbSE9PXZvaWQgMCYmKG4/dGhpcy5leHBhbmRJdGVtKHIuaXRlbSk6dGhpcy5jb2xsYXBzZUl0ZW0oci5pdGVtKSl9Z2V0SXRlbUlkKHIpe3JldHVybiB0aGlzLml0ZW1JZFBhdGg/dGhpcy5nZXQodGhpcy5pdGVtSWRQYXRoLHIpOnJ9X2lzRXhwYW5kZWQocil7cmV0dXJuIHRoaXMuX19leHBhbmRlZEtleXMuaGFzKHRoaXMuZ2V0SXRlbUlkKHIpKX1fZXhwYW5kZWRJdGVtc0NoYW5nZWQoKXt0aGlzLl9fY2FjaGVFeHBhbmRlZEtleXMoKSx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5fZWZmZWN0aXZlU2l6ZT10aGlzLl9jYWNoZS5lZmZlY3RpdmVTaXplLHRoaXMuX2Fzc2lnbk1vZGVscygpfV9pdGVtSWRQYXRoQ2hhbmdlZCgpe3RoaXMuX19jYWNoZUV4cGFuZGVkS2V5cygpfV9fY2FjaGVFeHBhbmRlZEtleXMoKXt0aGlzLmV4cGFuZGVkSXRlbXMmJih0aGlzLl9fZXhwYW5kZWRLZXlzPW5ldyBTZXQsdGhpcy5leHBhbmRlZEl0ZW1zLmZvckVhY2gocj0+e3RoaXMuX19leHBhbmRlZEtleXMuYWRkKHRoaXMuZ2V0SXRlbUlkKHIpKX0pKX1leHBhbmRJdGVtKHIpe3RoaXMuX2lzRXhwYW5kZWQocil8fCh0aGlzLmV4cGFuZGVkSXRlbXM9Wy4uLnRoaXMuZXhwYW5kZWRJdGVtcyxyXSl9Y29sbGFwc2VJdGVtKHIpe3RoaXMuX2lzRXhwYW5kZWQocikmJih0aGlzLmV4cGFuZGVkSXRlbXM9dGhpcy5leHBhbmRlZEl0ZW1zLmZpbHRlcihuPT4hdGhpcy5faXRlbXNFcXVhbChuLHIpKSl9X2dldEluZGV4TGV2ZWwocil7bGV0e2NhY2hlOm59PXRoaXMuX2NhY2hlLmdldENhY2hlQW5kSW5kZXgociksaT0wO2Zvcig7bi5wYXJlbnRDYWNoZTspbj1uLnBhcmVudENhY2hlLGkrKztyZXR1cm4gaX1fY2FuUG9wdWxhdGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLl9oYXNEYXRhJiZ0aGlzLl9jb2x1bW5UcmVlKX1fbG9hZFBhZ2UocixuKXtpZighbi5wZW5kaW5nUmVxdWVzdHNbcl0mJnRoaXMuZGF0YVByb3ZpZGVyKXt0aGlzLl9zZXRMb2FkaW5nKCEwKSxuLnBlbmRpbmdSZXF1ZXN0c1tyXT0hMDtsZXQgaT17cGFnZTpyLHBhZ2VTaXplOnRoaXMucGFnZVNpemUsc29ydE9yZGVyczp0aGlzLl9tYXBTb3J0ZXJzKCksZmlsdGVyczp0aGlzLl9tYXBGaWx0ZXJzKCkscGFyZW50SXRlbTpuLnBhcmVudEl0ZW19O3RoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sJiZ0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbC5mbHVzaCgpLHRoaXMuZGF0YVByb3ZpZGVyKGksKG8sYSk9PnthIT09dm9pZCAwP24uc2l6ZT1hOmkucGFyZW50SXRlbSYmKG4uc2l6ZT1vLmxlbmd0aCk7bGV0IHM9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLm1hcChsPT5sLl9pdGVtKTtvLmZvckVhY2goKGwsYyk9PntsZXQgdT1yKnRoaXMucGFnZVNpemUrYztuLml0ZW1zW3VdPWwsdGhpcy5faXNFeHBhbmRlZChsKSYmcy5pbmRleE9mKGwpPi0xJiZuLmVuc3VyZVN1YkNhY2hlRm9yU2NhbGVkSW5kZXgodSl9KSx0aGlzLl9oYXNEYXRhPSEwLGRlbGV0ZSBuLnBlbmRpbmdSZXF1ZXN0c1tyXSx0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGE9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQXBwbHlDYWNoZWREYXRhLG1vLmFmdGVyKDApLCgpPT57dGhpcy5fc2V0TG9hZGluZyghMSksdGhpcy5fY2FjaGUudXBkYXRlU2l6ZSgpLHRoaXMuX2VmZmVjdGl2ZVNpemU9dGhpcy5fY2FjaGUuZWZmZWN0aXZlU2l6ZSxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGw9PiFsLmhpZGRlbikuZm9yRWFjaChsPT57dGhpcy5fY2FjaGUuZ2V0SXRlbUZvckluZGV4KGwuaW5kZXgpJiZ0aGlzLl9nZXRJdGVtKGwuaW5kZXgsbCl9KSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9fc2Nyb2xsVG9QZW5kaW5nSW5kZXgoKX0pLHRoaXMuX2NhY2hlLmlzTG9hZGluZygpfHx0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGEuZmx1c2goKSx0aGlzLl9faXRlbXNSZWNlaXZlZCgpfSl9fV9nZXRQYWdlRm9ySW5kZXgocil7cmV0dXJuIE1hdGguZmxvb3Ioci90aGlzLnBhZ2VTaXplKX1jbGVhckNhY2hlKCl7dGhpcy5fY2FjaGU9bmV3IFljZSh0aGlzKSxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChyPT57QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5mb3JFYWNoKG49PntuLl9pbnN0YW5jZSYmbi5faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eSgiaXRlbSIse30sITEpfSl9KSx0aGlzLl9jYWNoZS5zaXplPXRoaXMuc2l6ZXx8MCx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5faGFzRGF0YT0hMSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSwoIXRoaXMuX2VmZmVjdGl2ZVNpemV8fCF0aGlzLl9pbml0aWFsUG9vbENyZWF0ZWQpJiZ0aGlzLl9sb2FkUGFnZSgwLHRoaXMuX2NhY2hlKX1fcGFnZVNpemVDaGFuZ2VkKHIsbil7biE9PXZvaWQgMCYmciE9PW4mJnRoaXMuY2xlYXJDYWNoZSgpfV9jaGVja1NpemUoKXt0aGlzLnNpemU9PT12b2lkIDAmJnRoaXMuX2VmZmVjdGl2ZVNpemU9PT0wJiZjb25zb2xlLndhcm4oIlRoZSA8dmFhZGluLWdyaWQ+IG5lZWRzIHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgaW4gb3JkZXIgdG8gZGlzcGxheSByb3dzLiBTZXQgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyB0byB0aGUgYHNpemVgIHByb3BlcnR5LCBvciBwcm92aWRlIHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgYGRhdGFQcm92aWRlcmBcdTIwMTlzIGBjYWxsYmFja2AgY2FsbC4iKX1fZGF0YVByb3ZpZGVyQ2hhbmdlZChyLG4pe24hPT12b2lkIDAmJnRoaXMuY2xlYXJDYWNoZSgpLHImJnRoaXMuaXRlbXMmJnRoaXMuaXRlbXMubGVuZ3RoJiZ0aGlzLl9zY3JvbGxUb0luZGV4KHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4KSx0aGlzLl9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKSx0aGlzLl9kZWJvdW5jZXJDaGVja1NpemU9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2hlY2tTaXplLG1vLmFmdGVyKDJlMyksdGhpcy5fY2hlY2tTaXplLmJpbmQodGhpcykpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKX1fZW5zdXJlRmlyc3RQYWdlTG9hZGVkKCl7dGhpcy5faGFzRGF0YXx8dGhpcy5fbG9hZFBhZ2UoMCx0aGlzLl9jYWNoZSl9X2l0ZW1zRXF1YWwocixuKXtyZXR1cm4gdGhpcy5nZXRJdGVtSWQocik9PT10aGlzLmdldEl0ZW1JZChuKX1fZ2V0SXRlbUluZGV4SW5BcnJheShyLG4pe2xldCBpPS0xO3JldHVybiBuLmZvckVhY2goKG8sYSk9Pnt0aGlzLl9pdGVtc0VxdWFsKG8scikmJihpPWEpfSksaX1zY3JvbGxUb0luZGV4KHIpe3N1cGVyLnNjcm9sbFRvSW5kZXgociksIWlzTmFOKHIpJiYodGhpcy5fY2FjaGUuaXNMb2FkaW5nKCl8fCF0aGlzLmNsaWVudEhlaWdodCkmJih0aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXg9cil9X19zY3JvbGxUb1BlbmRpbmdJbmRleCgpe2lmKHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleCYmdGhpcy4kLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCl7bGV0IHI9dGhpcy5fX3BlbmRpbmdTY3JvbGxUb0luZGV4O2RlbGV0ZSB0aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXgsdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCksdGhpcy5zY3JvbGxUb0luZGV4KHIpfX19O3ZhciAkY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9hZGROb2RlT2JzZXJ2ZXIoKX1faGFzQ29sdW1uR3JvdXBzKHIpe2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKWlmKHJbbl0ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIpcmV0dXJuITA7cmV0dXJuITF9X2dldENoaWxkQ29sdW1ucyhyKXtyZXR1cm4gdmguZ2V0RmxhdHRlbmVkTm9kZXMocikuZmlsdGVyKHRoaXMuX2lzQ29sdW1uRWxlbWVudCl9X2ZsYXR0ZW5Db2x1bW5Hcm91cHMocil7cmV0dXJuIHIubWFwKG49Pm4ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI/dGhpcy5fZ2V0Q2hpbGRDb2x1bW5zKG4pOltuXSkucmVkdWNlKChuLGkpPT5uLmNvbmNhdChpKSxbXSl9X2dldENvbHVtblRyZWUoKXtsZXQgcj12aC5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzKS5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KSxuPVtdO2ZvcihsZXQgaT1yO24ucHVzaChpKSwhIXRoaXMuX2hhc0NvbHVtbkdyb3VwcyhpKTspaT10aGlzLl9mbGF0dGVuQ29sdW1uR3JvdXBzKGkpO3JldHVybiBufV91cGRhdGVDb2x1bW5UcmVlKCl7bGV0IHI9dGhpcy5fZ2V0Q29sdW1uVHJlZSgpO3RoaXMuX2FycmF5RXF1YWxzKHIsdGhpcy5fY29sdW1uVHJlZSl8fCh0aGlzLl9jb2x1bW5UcmVlPXIpfV9hZGROb2RlT2JzZXJ2ZXIoKXt0aGlzLl9vYnNlcnZlcj1uZXcgdmgodGhpcyxyPT57bGV0IG49ci5hZGRlZE5vZGVzLmZpbHRlcihvPT5vLmxvY2FsTmFtZT09PSJ0ZW1wbGF0ZSImJm8uY2xhc3NMaXN0LmNvbnRhaW5zKCJyb3ctZGV0YWlscyIpKVswXTtuJiZ0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGUhPT1uJiYodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlPW4pO2xldCBpPW89Pm8uZmlsdGVyKHRoaXMuX2lzQ29sdW1uRWxlbWVudCkubGVuZ3RoPjA7aWYoaShyLmFkZGVkTm9kZXMpfHxpKHIucmVtb3ZlZE5vZGVzKSl7bGV0IG89ci5yZW1vdmVkTm9kZXMuZmxhdE1hcChzPT5zLl9hbGxDZWxscyksYT1zPT5vLmZpbHRlcihsPT5sLl9jb250ZW50LmNvbnRhaW5zKHMpKS5sZW5ndGg7dGhpcy5fX3JlbW92ZVNvcnRlcnModGhpcy5fc29ydGVycy5maWx0ZXIoYSkpLHRoaXMuX19yZW1vdmVGaWx0ZXJzKHRoaXMuX2ZpbHRlcnMuZmlsdGVyKGEpKSx0aGlzLl91cGRhdGVDb2x1bW5UcmVlKCl9dGhpcy5fZGVib3VuY2VyQ2hlY2tJbXBvcnRzPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlckNoZWNrSW1wb3J0cyxtby5hZnRlcigyZTMpLHRoaXMuX2NoZWNrSW1wb3J0cy5iaW5kKHRoaXMpKSx0aGlzLl9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKX0pfV9hcnJheUVxdWFscyhyLG4pe2lmKCFyfHwhbnx8ci5sZW5ndGghPW4ubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgaT0wLG89ci5sZW5ndGg7aTxvO2krKylpZihyW2ldaW5zdGFuY2VvZiBBcnJheSYmbltpXWluc3RhbmNlb2YgQXJyYXkpe2lmKCF0aGlzLl9hcnJheUVxdWFscyhyW2ldLG5baV0pKXJldHVybiExfWVsc2UgaWYocltpXSE9bltpXSlyZXR1cm4hMTtyZXR1cm4hMH1fY2hlY2tJbXBvcnRzKCl7WyJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiLCJ2YWFkaW4tZ3JpZC1maWx0ZXIiLCJ2YWFkaW4tZ3JpZC1maWx0ZXItY29sdW1uIiwidmFhZGluLWdyaWQtdHJlZS10b2dnbGUiLCJ2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tY29sdW1uIiwidmFhZGluLWdyaWQtc29ydC1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC1zb3J0ZXIiXS5mb3JFYWNoKHI9PntsZXQgbj10aGlzLnF1ZXJ5U2VsZWN0b3Iocik7biYmIShuIGluc3RhbmNlb2YgbXQpJiZjb25zb2xlLndhcm4oYE1ha2Ugc3VyZSB5b3UgaGF2ZSBpbXBvcnRlZCB0aGUgcmVxdWlyZWQgbW9kdWxlIGZvciA8JHtyfT4gZWxlbWVudC5gKX0pfV91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW4oKXtBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0ciIpKS5mb3JFYWNoKHI9PnRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbkZvclJvdyhyKSl9X3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbkZvclJvdyhyKXtBcnJheS5mcm9tKHIucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJjZWxsIl06bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pJykpLnNvcnQoKG4saSk9Pm4uX2NvbHVtbi5fb3JkZXItaS5fY29sdW1uLl9vcmRlcikuZm9yRWFjaCgobixpLG8pPT57dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJmaXJzdC1jb2x1bW4iLGk9PT0wLG4pLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibGFzdC1jb2x1bW4iLGk9PT1vLmxlbmd0aC0xLG4pfSl9X2lzQ29sdW1uRWxlbWVudChyKXtyZXR1cm4gci5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYvXGJjb2x1bW5cYi8udGVzdChyLmxvY2FsTmFtZSl9fTt2YXIgS2NlPWU9PmNsYXNzIGV4dGVuZHMgZXtnZXRFdmVudENvbnRleHQocil7bGV0IG49e30saT1yLmNvbXBvc2VkUGF0aCgpLG89aVtpLmluZGV4T2YodGhpcy4kLnRhYmxlKS0zXTtyZXR1cm4gbyYmKG4uc2VjdGlvbj1bImJvZHkiLCJoZWFkZXIiLCJmb290ZXIiLCJkZXRhaWxzIl0uZmlsdGVyKGE9Pm8uZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZihhKT4tMSlbMF0sby5fY29sdW1uJiYobi5jb2x1bW49by5fY29sdW1uKSwobi5zZWN0aW9uPT09ImJvZHkifHxuLnNlY3Rpb249PT0iZGV0YWlscyIpJiZPYmplY3QuYXNzaWduKG4sdGhpcy5fX2dldFJvd01vZGVsKG8ucGFyZW50RWxlbWVudCkpKSxufX07dmFyIFpjZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue19maWx0ZXJzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fX19cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZmlsdGVyLWNoYW5nZWQiLHRoaXMuX2ZpbHRlckNoYW5nZWQuYmluZCh0aGlzKSl9X2ZpbHRlckNoYW5nZWQocil7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9fYWRkRmlsdGVyKHIudGFyZ2V0KSx0aGlzLl9fYXBwbHlGaWx0ZXJzKCl9X19yZW1vdmVGaWx0ZXJzKHIpe3IubGVuZ3RoIT0wJiYodGhpcy5fZmlsdGVycz10aGlzLl9maWx0ZXJzLmZpbHRlcihuPT5yLmluZGV4T2Yobik8MCksdGhpcy5fX2FwcGx5RmlsdGVycygpKX1fX2FkZEZpbHRlcihyKXt0aGlzLl9maWx0ZXJzLmluZGV4T2Yocik9PT0tMSYmdGhpcy5fZmlsdGVycy5wdXNoKHIpfV9fYXBwbHlGaWx0ZXJzKCl7dGhpcy5kYXRhUHJvdmlkZXImJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5jbGVhckNhY2hlKCl9X21hcEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5fZmlsdGVycy5tYXAocj0+KHtwYXRoOnIucGF0aCx2YWx1ZTpyLnZhbHVlfSkpfX07dmFyIFQwPWNsYXNzIGV4dGVuZHMgbXR7c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZC10ZW1wbGF0aXplciJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2RhdGFIb3N0Ok9iamVjdCx0ZW1wbGF0ZTpPYmplY3QsX3RlbXBsYXRlSW5zdGFuY2VzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcGFyZW50UGF0aFZhbHVlczp7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LF9ncmlkOk9iamVjdH19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl90ZW1wbGF0ZUluc3RhbmNlc0NoYW5nZWQoX3RlbXBsYXRlSW5zdGFuY2VzLiosIF9wYXJlbnRQYXRoVmFsdWVzLiopIl19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2luc3RhbmNlUHJvcHM9e2RldGFpbHNPcGVuZWQ6ITAsaW5kZXg6ITAsaXRlbTohMCxzZWxlY3RlZDohMCxleHBhbmRlZDohMCxsZXZlbDohMH19Y3JlYXRlSW5zdGFuY2UoKXt0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpO2xldCB0PW5ldyB0aGlzLl9UZW1wbGF0ZUNsYXNzKHt9KTtyZXR1cm4gdGhpcy5hZGRJbnN0YW5jZSh0KSx0fWFkZEluc3RhbmNlKHQpe3RoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmluZGV4T2YodCk9PT0tMSYmKHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLnB1c2godCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLm5vdGlmeVBhdGgoIl90ZW1wbGF0ZUluc3RhbmNlcy4qIix0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcykpKX1yZW1vdmVJbnN0YW5jZSh0KXtsZXQgcj10aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5pbmRleE9mKHQpO3RoaXMuc3BsaWNlKCJfdGVtcGxhdGVJbnN0YW5jZXMiLHIsMSl9X2Vuc3VyZVRlbXBsYXRpemVkKCl7dGhpcy5fVGVtcGxhdGVDbGFzc3x8KHRoaXMuX1RlbXBsYXRlQ2xhc3M9dGModGhpcy50ZW1wbGF0ZSx0aGlzLHtpbnN0YW5jZVByb3BzOnRoaXMuX2luc3RhbmNlUHJvcHMscGFyZW50TW9kZWw6ITAsZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHQscil7dGhpcy5fZm9yd2FyZFBhcmVudFByb3AodCxyKSx0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcyYmdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuZm9yRWFjaChuPT5uLm5vdGlmeVBhdGgodCxyKSl9LG5vdGlmeUluc3RhbmNlUHJvcDpmdW5jdGlvbih0LHIsbil7aWYocj09PSJpbmRleCJ8fHI9PT0iaXRlbSIpcmV0dXJuO2xldCBpPWBfXyR7cn1fX2A7aWYodFtpXT09PW4pcmV0dXJuO3RbaV09bjtsZXQgbz1BcnJheS5mcm9tKHRoaXMuX2dyaWQuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGw9PnRoaXMuX2dyaWQuX2l0ZW1zRXF1YWwobC5faXRlbSx0Lml0ZW0pKVswXTtvJiZBcnJheS5mcm9tKG8uY2hpbGRyZW4pLmZvckVhY2gobD0+e2wuX2luc3RhbmNlJiYobC5faW5zdGFuY2VbaV09bixsLl9pbnN0YW5jZS5ub3RpZnlQYXRoKHIsbikpfSk7bGV0IGE9Iml0ZW0uIjtpZihBcnJheS5pc0FycmF5KHRoaXMuX2dyaWQuaXRlbXMpJiZyLmluZGV4T2YoYSk9PT0wKXtsZXQgbD10aGlzLl9ncmlkLml0ZW1zLmluZGV4T2YodC5pdGVtKSxjPXIuc2xpY2UoYS5sZW5ndGgpO3RoaXMuX2dyaWQubm90aWZ5UGF0aChgaXRlbXMuJHtsfS4ke2N9YCxuKX1sZXQgcz1gXyR7cn1JbnN0YW5jZUNoYW5nZWRDYWxsYmFja2A7dGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZFtzXSYmdGhpcy5fZ3JpZFtzXSh0LG4pfX0pKX1fZm9yd2FyZFBhcmVudFByb3AodCxyKXt0aGlzLl9wYXJlbnRQYXRoVmFsdWVzW3RdPXIsdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuZm9yRWFjaChuPT5uLm5vdGlmeVBhdGgodCxyKSl9X3RlbXBsYXRlSW5zdGFuY2VzQ2hhbmdlZCh0KXtsZXQgcixuO2lmKHQucGF0aD09PSJfdGVtcGxhdGVJbnN0YW5jZXMiKXI9MCxuPXRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmxlbmd0aDtlbHNlIGlmKHQucGF0aD09PSJfdGVtcGxhdGVJbnN0YW5jZXMuc3BsaWNlcyIpcj10LnZhbHVlLmluZGV4LG49dC52YWx1ZS5hZGRlZENvdW50O2Vsc2UgcmV0dXJuO09iamVjdC5rZXlzKHRoaXMuX3BhcmVudFBhdGhWYWx1ZXN8fHt9KS5mb3JFYWNoKGk9Pntmb3IobGV0IG89cjtvPHIrbjtvKyspdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXNbb10uc2V0KGksdGhpcy5fcGFyZW50UGF0aFZhbHVlc1tpXSl9KX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShUMC5pcyxUMCk7dmFyIEpjZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2RldGFpbHNPcGVuZWRJdGVtczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3Jvd0RldGFpbHNUZW1wbGF0ZTpPYmplY3Qscm93RGV0YWlsc1JlbmRlcmVyOkZ1bmN0aW9uLF9kZXRhaWxzQ2VsbHM6e3R5cGU6QXJyYXl9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RldGFpbHNPcGVuZWRJdGVtc0NoYW5nZWQoZGV0YWlsc09wZW5lZEl0ZW1zLiosIF9yb3dEZXRhaWxzVGVtcGxhdGUsIHJvd0RldGFpbHNSZW5kZXJlcikiLCJfcm93RGV0YWlsc1RlbXBsYXRlT3JSZW5kZXJlckNoYW5nZWQoX3Jvd0RldGFpbHNUZW1wbGF0ZSwgcm93RGV0YWlsc1JlbmRlcmVyKSJdfV9yb3dEZXRhaWxzVGVtcGxhdGVPclJlbmRlcmVyQ2hhbmdlZChyLG4pe2lmKHImJm4pdGhyb3cgbmV3IEVycm9yKCJZb3Ugc2hvdWxkIG9ubHkgdXNlIGVpdGhlciBhIHJlbmRlcmVyIG9yIGEgdGVtcGxhdGUgZm9yIHJvdyBkZXRhaWxzIik7aWYocnx8bil7aWYociYmIXIudGVtcGxhdGl6ZXIpe2xldCBpPW5ldyBUMDtpLl9ncmlkPXRoaXMsaS5kYXRhSG9zdD10aGlzLmRhdGFIb3N0LGkudGVtcGxhdGU9cixyLnRlbXBsYXRpemVyPWl9dGhpcy5fY29sdW1uVHJlZSYmQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2goaT0+e2kucXVlcnlTZWxlY3RvcigiW3BhcnR+PWRldGFpbHMtY2VsbF0iKXx8KHRoaXMuX3VwZGF0ZVJvdyhpLHRoaXMuX2NvbHVtblRyZWVbdGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMV0pLHRoaXMuX2ExMXlVcGRhdGVSb3dEZXRhaWxzT3BlbmVkKGksITEpKSxkZWxldGUgaS5xdWVyeVNlbGVjdG9yKCJbcGFydH49ZGV0YWlscy1jZWxsXSIpLl9pbnN0YW5jZX0pLHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zLmxlbmd0aCYmKEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHRoaXMuX3RvZ2dsZURldGFpbHNDZWxsLHRoaXMpLHRoaXMuX3VwZGF0ZSgpKX19X2RldGFpbHNPcGVuZWRJdGVtc0NoYW5nZWQocil7ci5wYXRoPT09ImRldGFpbHNPcGVuZWRJdGVtcy5sZW5ndGgifHwhci52YWx1ZXx8QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2gobj0+e3RoaXMuX3RvZ2dsZURldGFpbHNDZWxsKG4sbi5faXRlbSksdGhpcy5fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQobix0aGlzLl9pc0RldGFpbHNPcGVuZWQobi5faXRlbSkpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZGV0YWlscy1vcGVuZWQiLHRoaXMuX2lzRGV0YWlsc09wZW5lZChuLl9pdGVtKSxuKX0pfV9jb25maWd1cmVEZXRhaWxzQ2VsbChyKXtyLnNldEF0dHJpYnV0ZSgicGFydCIsImNlbGwgZGV0YWlscy1jZWxsIiksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJmcm96ZW4iLCEwLHIpfV90b2dnbGVEZXRhaWxzQ2VsbChyLG4pe2xldCBpPXIucXVlcnlTZWxlY3RvcignW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpO2lmKCFpKXJldHVybjtsZXQgbz0hdGhpcy5faXNEZXRhaWxzT3BlbmVkKG4pLGE9ISFpLmhpZGRlbiE9PW87KCFpLl9pbnN0YW5jZSYmIWkuX3JlbmRlcmVyfHxpLmhpZGRlbiE9PW8pJiYoaS5oaWRkZW49byxvP3Iuc3R5bGUucmVtb3ZlUHJvcGVydHkoInBhZGRpbmctYm90dG9tIik6KHRoaXMucm93RGV0YWlsc1JlbmRlcmVyPyhpLl9yZW5kZXJlcj10aGlzLnJvd0RldGFpbHNSZW5kZXJlcixpLl9yZW5kZXJlci5jYWxsKHRoaXMsaS5fY29udGVudCx0aGlzLHtpbmRleDpyLmluZGV4LGl0ZW06bn0pKTp0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGUmJiFpLl9pbnN0YW5jZSYmKGkuX2luc3RhbmNlPXRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZS50ZW1wbGF0aXplci5jcmVhdGVJbnN0YW5jZSgpLGkuX2NvbnRlbnQuaW5uZXJIVE1MPSIiLGkuX2NvbnRlbnQuYXBwZW5kQ2hpbGQoaS5faW5zdGFuY2Uucm9vdCksdGhpcy5fdXBkYXRlSXRlbShyLG4pKSx1aSgpLHIuc3R5bGUuc2V0UHJvcGVydHkoInBhZGRpbmctYm90dG9tIixgJHtpLm9mZnNldEhlaWdodH1weGApLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5ub3RpZnlSZXNpemUoKSkpKSxhJiYodGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSl9X3VwZGF0ZURldGFpbHNDZWxsSGVpZ2h0cygpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl06bm90KFtoaWRkZW5dKScpKS5mb3JFYWNoKHI9PntyLnBhcmVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoInBhZGRpbmctYm90dG9tIixgJHtyLm9mZnNldEhlaWdodH1weGApfSl9X2lzRGV0YWlsc09wZW5lZChyKXtyZXR1cm4gdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMmJnRoaXMuX2dldEl0ZW1JbmRleEluQXJyYXkocix0aGlzLmRldGFpbHNPcGVuZWRJdGVtcykhPT0tMX1vcGVuSXRlbURldGFpbHMocil7dGhpcy5faXNEZXRhaWxzT3BlbmVkKHIpfHwodGhpcy5kZXRhaWxzT3BlbmVkSXRlbXM9Wy4uLnRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zLHJdKX1jbG9zZUl0ZW1EZXRhaWxzKHIpe3RoaXMuX2lzRGV0YWlsc09wZW5lZChyKSYmKHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zPXRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zLmZpbHRlcihuPT4hdGhpcy5faXRlbXNFcXVhbChuLHIpKSl9X2RldGFpbHNPcGVuZWRJbnN0YW5jZUNoYW5nZWRDYWxsYmFjayhyLG4pe24/dGhpcy5vcGVuSXRlbURldGFpbHMoci5pdGVtKTp0aGlzLmNsb3NlSXRlbURldGFpbHMoci5pdGVtKX19O3ZhciBGY3Q9e1NDUk9MTElORzo1MDAsSUdOT1JFX1dIRUVMOjUwMH0sUWNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2Zyb3plbkNlbGxzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sX3Jvd1dpdGhGb2N1c2VkRWxlbWVudDpFbGVtZW50LF9kZWx0YVlBY2M6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF91c2VTdGlja3k6e3R5cGU6Qm9vbGVhbix2YWx1ZTp3aW5kb3cuQ1NTJiZ3aW5kb3cuQ1NTLnN1cHBvcnRzJiYod2luZG93LkNTUy5zdXBwb3J0cygicG9zaXRpb24iLCJzdGlja3kiKXx8d2luZG93LkNTUy5zdXBwb3J0cygicG9zaXRpb24iLCItd2Via2l0LXN0aWNreSIpKX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfc2Nyb2xsVmlld3BvcnRIZWlnaHRVcGRhdGVkKF92aWV3cG9ydEhlaWdodCkiXX1zZXQgX3Njcm9sbFRvcChyKXt0aGlzLiQudGFibGUuc2Nyb2xsVG9wPXJ9Z2V0IF9zY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy4kLnRhYmxlLnNjcm9sbFRvcH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fc2Nyb2xsTGluZUhlaWdodD10aGlzLl9nZXRTY3JvbGxMaW5lSGVpZ2h0KCl9X2dldFNjcm9sbExpbmVIZWlnaHQoKXtsZXQgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLnN0eWxlLmZvbnRTaXplPSJpbml0aWFsIixyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocik7bGV0IG49d2luZG93LmdldENvbXB1dGVkU3R5bGUocikuZm9udFNpemU7cmV0dXJuIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQociksbj93aW5kb3cucGFyc2VJbnQobik6dm9pZCAwfV9zY3JvbGxWaWV3cG9ydEhlaWdodFVwZGF0ZWQocil7dGhpcy5fc2Nyb2xsUGFnZUhlaWdodD1yLXRoaXMuJC5oZWFkZXIuY2xpZW50SGVpZ2h0LXRoaXMuJC5mb290ZXIuY2xpZW50SGVpZ2h0LXRoaXMuX3Njcm9sbExpbmVIZWlnaHR9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuJC5vdXRlcnNjcm9sbGVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc2Nyb2xsVGFyZ2V0PXRoaXMuJC50YWJsZSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLl9vbldoZWVsKSx0aGlzLiQuaXRlbXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIscj0+e2xldCBuPXIuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQuaXRlbXMpO3RoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudD1yLmNvbXBvc2VkUGF0aCgpW24tMV19KSx0aGlzLiQuaXRlbXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLCgpPT50aGlzLl9yb3dXaXRoRm9jdXNlZEVsZW1lbnQ9dm9pZCAwKSx0aGlzLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCgpPT50aGlzLl9fbW91c2VEb3duPSEwKSx0aGlzLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwoKT0+e3RoaXMuX19tb3VzZURvd249ITEsdGhpcy5fX3BlbmRpbmdSZW9yZGVyJiYodGhpcy5fX3BlbmRpbmdSZW9yZGVyPSExLHNldFRpbWVvdXQoKCk9PnRoaXMuX3Jlb3JkZXJSb3dzKCksRmN0LlNDUk9MTElORykpfSl9c2Nyb2xsVG9JbmRleChyKXt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuc2Nyb2xsVG9JbmRleChyKSl9X29uV2hlZWwocil7aWYoci5jdHJsS2V5fHx0aGlzLl9oYXNTY3JvbGxlZEFuY2VzdG9yKHIudGFyZ2V0LHIuZGVsdGFYLHIuZGVsdGFZKSlyZXR1cm47bGV0IG49dGhpcy4kLnRhYmxlLGk9ci5kZWx0YVk7aWYoci5kZWx0YU1vZGU9PT1XaGVlbEV2ZW50LkRPTV9ERUxUQV9MSU5FP2kqPXRoaXMuX3Njcm9sbExpbmVIZWlnaHQ6ci5kZWx0YU1vZGU9PT1XaGVlbEV2ZW50LkRPTV9ERUxUQV9QQUdFJiYoaSo9dGhpcy5fc2Nyb2xsUGFnZUhlaWdodCksdGhpcy5fd2hlZWxBbmltYXRpb25GcmFtZSl7dGhpcy5fZGVsdGFZQWNjKz1pLHIucHJldmVudERlZmF1bHQoKTtyZXR1cm59aSs9dGhpcy5fZGVsdGFZQWNjLHRoaXMuX2RlbHRhWUFjYz0wLHRoaXMuX3doZWVsQW5pbWF0aW9uRnJhbWU9ITAsdGhpcy5fZGVib3VuY2VyV2hlZWxBbmltYXRpb25GcmFtZT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJXaGVlbEFuaW1hdGlvbkZyYW1lLE5pLCgpPT50aGlzLl93aGVlbEFuaW1hdGlvbkZyYW1lPSExKTtsZXQgbz1NYXRoLmFicyhyLmRlbHRhWCkrTWF0aC5hYnMoaSk7dGhpcy5fY2FuU2Nyb2xsKG4sci5kZWx0YVgsaSk/KHIucHJldmVudERlZmF1bHQoKSxuLnNjcm9sbFRvcCs9aSxuLnNjcm9sbExlZnQrPXIuZGVsdGFYLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSx0aGlzLl9oYXNSZXNpZHVhbE1vbWVudHVtPSEwLHRoaXMuX2lnbm9yZU5ld1doZWVsPSEwLHRoaXMuX2RlYm91bmNlcklnbm9yZU5ld1doZWVsPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcklnbm9yZU5ld1doZWVsLG1vLmFmdGVyKEZjdC5JR05PUkVfV0hFRUwpLCgpPT50aGlzLl9pZ25vcmVOZXdXaGVlbD0hMSkpOnRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW0mJm88PXRoaXMuX3ByZXZpb3VzTW9tZW50dW18fHRoaXMuX2lnbm9yZU5ld1doZWVsP3IucHJldmVudERlZmF1bHQoKTpvPnRoaXMuX3ByZXZpb3VzTW9tZW50dW0mJih0aGlzLl9oYXNSZXNpZHVhbE1vbWVudHVtPSExKSx0aGlzLl9wcmV2aW91c01vbWVudHVtPW99X2hhc1Njcm9sbGVkQW5jZXN0b3IocixuLGkpe2lmKHIubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNlbGwtY29udGVudCIpcmV0dXJuITE7aWYodGhpcy5fY2FuU2Nyb2xsKHIsbixpKSYmWyJhdXRvIiwic2Nyb2xsIl0uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKHIpLm92ZXJmbG93KSE9PS0xKXJldHVybiEwO2lmKHIhPT10aGlzJiZyLnBhcmVudEVsZW1lbnQpcmV0dXJuIHRoaXMuX2hhc1Njcm9sbGVkQW5jZXN0b3Ioci5wYXJlbnRFbGVtZW50LG4saSl9X2NhblNjcm9sbChyLG4saSl7cmV0dXJuIGk+MCYmci5zY3JvbGxUb3A8ci5zY3JvbGxIZWlnaHQtci5vZmZzZXRIZWlnaHR8fGk8MCYmci5zY3JvbGxUb3A+MHx8bj4wJiZyLnNjcm9sbExlZnQ8ci5zY3JvbGxXaWR0aC1yLm9mZnNldFdpZHRofHxuPDAmJnIuc2Nyb2xsTGVmdD4wfV9zY2hlZHVsZVNjcm9sbGluZygpe3RoaXMuX3Njcm9sbGluZ0ZyYW1lfHwodGhpcy5fc2Nyb2xsaW5nRnJhbWU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoInNjcm9sbGluZyIsITAsdGhpcy4kLnNjcm9sbGVyKSkpLHRoaXMuX2RlYm91bmNlU2Nyb2xsaW5nPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlU2Nyb2xsaW5nLG1vLmFmdGVyKEZjdC5TQ1JPTExJTkcpLCgpPT57Y2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fc2Nyb2xsaW5nRnJhbWUpLGRlbGV0ZSB0aGlzLl9zY3JvbGxpbmdGcmFtZSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInNjcm9sbGluZyIsITEsdGhpcy4kLnNjcm9sbGVyKSx0aGlzLl9yZW9yZGVyUm93cygpfSl9X2FmdGVyU2Nyb2xsKCl7dGhpcy5fdHJhbnNsYXRlU3RhdGlvbmFyeUVsZW1lbnRzKCksdGhpcy5oYXNBdHRyaWJ1dGUoInJlb3JkZXJpbmciKXx8dGhpcy5fc2NoZWR1bGVTY3JvbGxpbmcoKSx0aGlzLl91cGRhdGVPdmVyZmxvdygpfV91cGRhdGVPdmVyZmxvdygpe2xldCByPSIiLG49dGhpcy4kLnRhYmxlO24uc2Nyb2xsVG9wPG4uc2Nyb2xsSGVpZ2h0LW4uY2xpZW50SGVpZ2h0JiYocis9IiBib3R0b20iKSxuLnNjcm9sbFRvcD4wJiYocis9IiB0b3AiKSxuLnNjcm9sbExlZnQ8bi5zY3JvbGxXaWR0aC1uLmNsaWVudFdpZHRoJiYocis9IiByaWdodCIpLG4uc2Nyb2xsTGVmdD4wJiYocis9IiBsZWZ0IiksdGhpcy5fZGVib3VuY2VPdmVyZmxvdz1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZU92ZXJmbG93LE5pLCgpPT57bGV0IGk9ci50cmltKCk7aS5sZW5ndGg+MCYmdGhpcy5nZXRBdHRyaWJ1dGUoIm92ZXJmbG93IikhPT1pP3RoaXMuc2V0QXR0cmlidXRlKCJvdmVyZmxvdyIsaSk6aS5sZW5ndGg9PTAmJnRoaXMuaGFzQXR0cmlidXRlKCJvdmVyZmxvdyIpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSgib3ZlcmZsb3ciKX0pfV9yZW9yZGVyUm93cygpe2lmKHRoaXMuX19tb3VzZURvd24pe3RoaXMuX19wZW5kaW5nUmVvcmRlcj0hMDtyZXR1cm59bGV0IHI9dGhpcy4kLml0ZW1zLG49ci5xdWVyeVNlbGVjdG9yQWxsKCJ0ciIpO2lmKCFuLmxlbmd0aClyZXR1cm47bGV0IGk9dGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3ZpZHhPZmZzZXQsbz10aGlzLl9yb3dXaXRoRm9jdXNlZEVsZW1lbnR8fEFycmF5LmZyb20obikuZmlsdGVyKGw9PiFsLmhpZGRlbilbMF07aWYoIW8pcmV0dXJuO2xldCBhPW8uaW5kZXgtaSxzPUFycmF5LmZyb20obikuaW5kZXhPZihvKS1hO2lmKHM+MClmb3IobGV0IGw9MDtsPHM7bCsrKXIuYXBwZW5kQ2hpbGQobltsXSk7ZWxzZSBpZihzPDApZm9yKGxldCBsPW4ubGVuZ3RoK3M7bDxuLmxlbmd0aDtsKyspci5pbnNlcnRCZWZvcmUobltsXSxuWzBdKTtpZih0aGlzLl9zYWZhcmkpe2xldHt0cmFuc2Zvcm06bH09dGhpcy4kLmhlYWRlci5zdHlsZTt0aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT0iIixzZXRUaW1lb3V0KCgpPT50aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT1sKX19X2Zyb3plbkNlbGxzQ2hhbmdlZCgpe3RoaXMuX2RlYm91bmNlckNhY2hlRWxlbWVudHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2FjaGVFbGVtZW50cyxjaSwoKT0+e0FycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0iY2VsbCJdJykpLmZvckVhY2goZnVuY3Rpb24ocil7ci5zdHlsZS50cmFuc2Zvcm09IiJ9KSx0aGlzLl9mcm96ZW5DZWxscz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLiQudGFibGUucXVlcnlTZWxlY3RvckFsbCgiW2Zyb3plbl0iKSksdGhpcy5fdXBkYXRlU2Nyb2xsZXJNZWFzdXJlbWVudHMoKSx0aGlzLl90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKX0pLHRoaXMuX3VwZGF0ZUxhc3RGcm96ZW4oKX1fdXBkYXRlU2Nyb2xsZXJNZWFzdXJlbWVudHMoKXt0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg+MCYmdGhpcy5fX2lzUlRMJiYodGhpcy5fX3Njcm9sbGVyTWV0cmljcz17c2Nyb2xsV2lkdGg6dGhpcy4kLnRhYmxlLnNjcm9sbFdpZHRoLGNsaWVudFdpZHRoOnRoaXMuJC50YWJsZS5jbGllbnRXaWR0aH0pfV91cGRhdGVMYXN0RnJvemVuKCl7aWYoIXRoaXMuX2NvbHVtblRyZWUpcmV0dXJuO2xldCByPXRoaXMuX2NvbHVtblRyZWVbdGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMV0uc2xpY2UoMCk7ci5zb3J0KChpLG8pPT5pLl9vcmRlci1vLl9vcmRlcik7bGV0IG49ci5yZWR1Y2UoKGksbyxhKT0+KG8uX2xhc3RGcm96ZW49ITEsby5mcm96ZW4mJiFvLmhpZGRlbj9hOmkpLHZvaWQgMCk7biE9PXZvaWQgMCYmKHJbbl0uX2xhc3RGcm96ZW49ITApfV90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKXtsZXQgcj1NYXRoLm1heCgwLHRoaXMuX3Njcm9sbExlZnQpLG49TWF0aC5tYXgoMCx0aGlzLl9zY3JvbGxUb3ApLGk9MCxvPTAsYT0wO2lmKHRoaXMuX3VzZVN0aWNreXx8KGk9cixvPW4sYT10aGlzLiQudGFibGUuY2xpZW50SGVpZ2h0LXRoaXMuJC5mb290ZXIub2Zmc2V0SGVpZ2h0LXRoaXMuJC5mb290ZXIub2Zmc2V0VG9wKSx0aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXIraSxvKSx0aGlzLiQuZm9vdGVyLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXIraSxvK2EpLHRoaXMuJC5pdGVtcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5fZ2V0VHJhbnNsYXRlKC1yK2ksMCksdGhpcy5fZnJvemVuQ2VsbHMubGVuZ3RoPjApe2xldCBzPXRoaXMuX19pc1JUTD90aGlzLl9fZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodGhpcy4kLnRhYmxlKSt0aGlzLl9fc2Nyb2xsZXJNZXRyaWNzLmNsaWVudFdpZHRoLXRoaXMuX19zY3JvbGxlck1ldHJpY3Muc2Nyb2xsV2lkdGg6dGhpcy5fc2Nyb2xsTGVmdCxsPXRoaXMuX2dldFRyYW5zbGF0ZShzLDApO2ZvcihsZXQgYz0wO2M8dGhpcy5fZnJvemVuQ2VsbHMubGVuZ3RoO2MrKyl0aGlzLl9mcm96ZW5DZWxsc1tjXS5zdHlsZS50cmFuc2Zvcm09bH19X2dldFRyYW5zbGF0ZShyLG4pe3JldHVybmB0cmFuc2xhdGUoJHtyfXB4LCAke259cHgpYH19O3ZhciB0dWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6KCk9PltdfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zZWxlY3RlZEl0ZW1zQ2hhbmdlZChzZWxlY3RlZEl0ZW1zLiopIl19X2lzU2VsZWN0ZWQocil7cmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuc2VsZWN0ZWRJdGVtcyk+LTF9c2VsZWN0SXRlbShyKXt0aGlzLl9pc1NlbGVjdGVkKHIpfHwodGhpcy5zZWxlY3RlZEl0ZW1zPVsuLi50aGlzLnNlbGVjdGVkSXRlbXMscl0pfWRlc2VsZWN0SXRlbShyKXt0aGlzLl9pc1NlbGVjdGVkKHIpJiYodGhpcy5zZWxlY3RlZEl0ZW1zPXRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIobj0+IXRoaXMuX2l0ZW1zRXF1YWwobixyKSkpfV90b2dnbGVJdGVtKHIpe3RoaXMuX2dldEl0ZW1JbmRleEluQXJyYXkocix0aGlzLnNlbGVjdGVkSXRlbXMpPT09LTE/dGhpcy5zZWxlY3RJdGVtKHIpOnRoaXMuZGVzZWxlY3RJdGVtKHIpfV9zZWxlY3RlZEl0ZW1zQ2hhbmdlZChyKXt0aGlzLiQuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoJiYoci5wYXRoPT09InNlbGVjdGVkSXRlbXMifHxyLnBhdGg9PT0ic2VsZWN0ZWRJdGVtcy5zcGxpY2VzIikmJkFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKG49Pnt0aGlzLl91cGRhdGVJdGVtKG4sbi5faXRlbSl9KX1fc2VsZWN0ZWRJbnN0YW5jZUNoYW5nZWRDYWxsYmFjayhyLG4pe24/dGhpcy5zZWxlY3RJdGVtKHIuaXRlbSk6dGhpcy5kZXNlbGVjdEl0ZW0oci5pdGVtKX19O3ZhciBldWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnttdWx0aVNvcnQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3NvcnRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wcmV2aW91c1NvcnRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJzb3J0ZXItY2hhbmdlZCIsdGhpcy5fb25Tb3J0ZXJDaGFuZ2VkKX1fb25Tb3J0ZXJDaGFuZ2VkKHIpe2xldCBuPXIudGFyZ2V0O3Iuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fX3VwZGF0ZVNvcnRlcihuKSx0aGlzLl9fYXBwbHlTb3J0ZXJzKCl9X19yZW1vdmVTb3J0ZXJzKHIpe3IubGVuZ3RoIT0wJiYodGhpcy5fc29ydGVycz10aGlzLl9zb3J0ZXJzLmZpbHRlcihuPT5yLmluZGV4T2Yobik8MCksdGhpcy5tdWx0aVNvcnQmJnRoaXMuX191cGRhdGVTb3J0T3JkZXJzKCksdGhpcy5fX2FwcGx5U29ydGVycygpKX1fX3VwZGF0ZVNvcnRPcmRlcnMoKXt0aGlzLl9zb3J0ZXJzLmZvckVhY2goKHIsbik9PnIuX29yZGVyPXRoaXMuX3NvcnRlcnMubGVuZ3RoPjE/bjpudWxsLHRoaXMpfV9fdXBkYXRlU29ydGVyKHIpe2lmKCEoIXIuZGlyZWN0aW9uJiZ0aGlzLl9zb3J0ZXJzLmluZGV4T2Yocik9PT0tMSkpe2lmKHIuX29yZGVyPW51bGwsdGhpcy5tdWx0aVNvcnQpdGhpcy5fcmVtb3ZlQXJyYXlJdGVtKHRoaXMuX3NvcnRlcnMsciksci5kaXJlY3Rpb24mJnRoaXMuX3NvcnRlcnMudW5zaGlmdChyKSx0aGlzLl9fdXBkYXRlU29ydE9yZGVycygpO2Vsc2UgaWYoci5kaXJlY3Rpb24pe2xldCBuPXRoaXMuX3NvcnRlcnMuZmlsdGVyKGk9PmkhPXIpO3RoaXMuX3NvcnRlcnM9W3JdLG4uZm9yRWFjaChpPT57aS5fb3JkZXI9bnVsbCxpLmRpcmVjdGlvbj1udWxsfSl9fX1fX2FwcGx5U29ydGVycygpe3RoaXMuZGF0YVByb3ZpZGVyJiZ0aGlzLmlzQXR0YWNoZWQmJkpTT04uc3RyaW5naWZ5KHRoaXMuX3ByZXZpb3VzU29ydGVycykhPT1KU09OLnN0cmluZ2lmeSh0aGlzLl9tYXBTb3J0ZXJzKCkpJiZ0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLl9hMTF5VXBkYXRlU29ydGVycygpLHRoaXMuX3ByZXZpb3VzU29ydGVycz10aGlzLl9tYXBTb3J0ZXJzKCl9X21hcFNvcnRlcnMoKXtyZXR1cm4gdGhpcy5fc29ydGVycy5tYXAocj0+KHtwYXRoOnIucGF0aCxkaXJlY3Rpb246ci5kaXJlY3Rpb259KSl9X3JlbW92ZUFycmF5SXRlbShyLG4pe2xldCBpPXIuaW5kZXhPZihuKTtpPi0xJiZyLnNwbGljZShpLDEpfX07dmFyIHJ1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NlbGxDbGFzc05hbWVHZW5lcmF0b3I6RnVuY3Rpb259fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfX2NlbGxDbGFzc05hbWVHZW5lcmF0b3JDaGFuZ2VkKGNlbGxDbGFzc05hbWVHZW5lcmF0b3IpIl19X19jZWxsQ2xhc3NOYW1lR2VuZXJhdG9yQ2hhbmdlZCgpe3RoaXMuZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcygpfWdlbmVyYXRlQ2VsbENsYXNzTmFtZXMoKXtBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbikuZm9yRWFjaChyPT50aGlzLl9nZW5lcmF0ZUNlbGxDbGFzc05hbWVzKHIsdGhpcy5fX2dldFJvd01vZGVsKHIpKSl9X2dlbmVyYXRlQ2VsbENsYXNzTmFtZXMocixuKXtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2goaT0+e2lmKGkuX19nZW5lcmF0ZWRDbGFzc2VzJiZpLl9fZ2VuZXJhdGVkQ2xhc3Nlcy5mb3JFYWNoKG89PmkuY2xhc3NMaXN0LnJlbW92ZShvKSksdGhpcy5jZWxsQ2xhc3NOYW1lR2VuZXJhdG9yKXtsZXQgbz10aGlzLmNlbGxDbGFzc05hbWVHZW5lcmF0b3IoaS5fY29sdW1uLG4pO2kuX19nZW5lcmF0ZWRDbGFzc2VzPW8mJm8uc3BsaXQoIiAiKS5maWx0ZXIoYT0+YS5sZW5ndGg+MCksaS5fX2dlbmVyYXRlZENsYXNzZXMmJmkuX19nZW5lcmF0ZWRDbGFzc2VzLmZvckVhY2goYT0+aS5jbGFzc0xpc3QuYWRkKGEpKX19KX19O3ZhciBFUD17QkVUV0VFTjoiYmV0d2VlbiIsT05fVE9QOiJvbi10b3AiLE9OX1RPUF9PUl9CRVRXRUVOOiJvbi10b3Atb3ItYmV0d2VlbiIsT05fR1JJRDoib24tZ3JpZCJ9LEMwPXtPTl9UT1A6Im9uLXRvcCIsQUJPVkU6ImFib3ZlIixCRUxPVzoiYmVsb3ciLEVNUFRZOiJlbXB0eSJ9LG51ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2Ryb3BNb2RlOlN0cmluZyxyb3dzRHJhZ2dhYmxlOkJvb2xlYW4sZHJhZ0ZpbHRlcjpGdW5jdGlvbixkcm9wRmlsdGVyOkZ1bmN0aW9uLF9fZG5kQXV0b1Njcm9sbFRocmVzaG9sZDp7dmFsdWU6NTB9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RyYWdEcm9wQWNjZXNzQ2hhbmdlZChyb3dzRHJhZ2dhYmxlLCBkcm9wTW9kZSwgZHJhZ0ZpbHRlciwgZHJvcEZpbHRlcikiXX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsdGhpcy5fb25EcmFnU3RhcnQuYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbmQiLHRoaXMuX29uRHJhZ0VuZC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLHRoaXMuX29uRHJhZ092ZXIuYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdsZWF2ZSIsdGhpcy5fb25EcmFnTGVhdmUuYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLHRoaXMuX29uRHJvcC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIixyPT57dGhpcy5kcm9wTW9kZSYmKHIucHJldmVudERlZmF1bHQoKSxyLnN0b3BQcm9wYWdhdGlvbigpKX0pfV9vbkRyYWdTdGFydChyKXtpZih0aGlzLnJvd3NEcmFnZ2FibGUpe2xldCBuPXIudGFyZ2V0O2lmKG4ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNlbGwtY29udGVudCImJihuPW4uYXNzaWduZWRTbG90LnBhcmVudE5vZGUucGFyZW50Tm9kZSksbi5wYXJlbnROb2RlIT09dGhpcy4kLml0ZW1zKXJldHVybjtpZihyLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJhZ2dpbmctcm93cyIsITAsdGhpcyksdGhpcy5fc2FmYXJpKXtsZXQgcz1uLnN0eWxlLnRyYW5zZm9ybTtuLnN0eWxlLnRvcD0vdHJhbnNsYXRlWVwoKC4qKVwpLy5leGVjKHMpWzFdLG4uc3R5bGUudHJhbnNmb3JtPSJub25lIixyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuLnN0eWxlLnRvcD0iIixuLnN0eWxlLnRyYW5zZm9ybT1zfSl9bGV0IGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLl9pb3M/ci5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKG4pOnIuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShuLHIuY2xpZW50WC1pLmxlZnQsci5jbGllbnRZLWkudG9wKTtsZXQgbz1bbl07dGhpcy5faXNTZWxlY3RlZChuLl9pdGVtKSYmKG89dGhpcy5fX2dldFZpZXdwb3J0Um93cygpLmZpbHRlcihzPT50aGlzLl9pc1NlbGVjdGVkKHMuX2l0ZW0pKS5maWx0ZXIocz0+IXRoaXMuZHJhZ0ZpbHRlcnx8dGhpcy5kcmFnRmlsdGVyKHRoaXMuX19nZXRSb3dNb2RlbChzKSkpKSxyLmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0Iix0aGlzLl9fZm9ybWF0RGVmYXVsdFRyYW5zZmVyRGF0YShvKSksbi5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIsby5sZW5ndGg+MT9vLmxlbmd0aDoiIiksdGhpcy51cGRhdGVTdHlsZXMoeyItLV9ncmlkLWRyYWctc3RhcnQteCI6YCR7ci5jbGllbnRYLWkubGVmdCsyMH1weGAsIi0tX2dyaWQtZHJhZy1zdGFydC15IjpgJHtyLmNsaWVudFktaS50b3ArMTB9cHhgfSkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57bi5yZW1vdmVBdHRyaWJ1dGUoImRyYWdzdGFydCIpLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1fZ3JpZC1kcmFnLXN0YXJ0LXgiOiIiLCItLV9ncmlkLWRyYWctc3RhcnQteSI6IiJ9KX0pO2xldCBhPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcmFnc3RhcnQiLHtkZXRhaWw6e2RyYWdnZWRJdGVtczpvLm1hcChzPT5zLl9pdGVtKSxzZXREcmFnRGF0YToocyxsKT0+ci5kYXRhVHJhbnNmZXIuc2V0RGF0YShzLGwpLHNldERyYWdnZWRJdGVtc0NvdW50OnM9Pm4uc2V0QXR0cmlidXRlKCJkcmFnc3RhcnQiLHMpfX0pO2Eub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChhKX19X29uRHJhZ0VuZChyKXt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWdnaW5nLXJvd3MiLCExLHRoaXMpLHIuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IG49bmV3IEN1c3RvbUV2ZW50KCJncmlkLWRyYWdlbmQiKTtuLm9yaWdpbmFsRXZlbnQ9cix0aGlzLmRpc3BhdGNoRXZlbnQobil9X29uRHJhZ0xlYXZlKHIpe3Iuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fY2xlYXJEcmFnU3R5bGVzKCl9X29uRHJhZ092ZXIocil7aWYodGhpcy5kcm9wTW9kZSl7aWYodGhpcy5fZHJvcExvY2F0aW9uPXZvaWQgMCx0aGlzLl9kcmFnT3Zlckl0ZW09dm9pZCAwLHRoaXMuX19kbmRBdXRvU2Nyb2xsKHIuY2xpZW50WSkpe3RoaXMuX2NsZWFyRHJhZ1N0eWxlcygpO3JldHVybn1sZXQgbj1yLmNvbXBvc2VkUGF0aCgpLmZpbHRlcihpPT5pLmxvY2FsTmFtZT09PSJ0ciIpWzBdO2lmKCF0aGlzLl9lZmZlY3RpdmVTaXplfHx0aGlzLmRyb3BNb2RlPT09RVAuT05fR1JJRCl0aGlzLl9kcm9wTG9jYXRpb249QzAuRU1QVFk7ZWxzZSBpZighbnx8bi5wYXJlbnROb2RlIT09dGhpcy4kLml0ZW1zKXtpZihuKXJldHVybjtpZih0aGlzLmRyb3BNb2RlPT09RVAuQkVUV0VFTnx8dGhpcy5kcm9wTW9kZT09PUVQLk9OX1RPUF9PUl9CRVRXRUVOKW49QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihpPT4haS5oaWRkZW4pLnBvcCgpLHRoaXMuX2Ryb3BMb2NhdGlvbj1DMC5CRUxPVztlbHNlIHJldHVybn1lbHNle2xldCBpPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYodGhpcy5fZHJvcExvY2F0aW9uPUMwLk9OX1RPUCx0aGlzLmRyb3BNb2RlPT09RVAuQkVUV0VFTil7bGV0IG89ci5jbGllbnRZLWkudG9wPGkuYm90dG9tLXIuY2xpZW50WTt0aGlzLl9kcm9wTG9jYXRpb249bz9DMC5BQk9WRTpDMC5CRUxPV31lbHNlIHRoaXMuZHJvcE1vZGU9PT1FUC5PTl9UT1BfT1JfQkVUV0VFTiYmKHIuY2xpZW50WS1pLnRvcDxpLmhlaWdodC8zP3RoaXMuX2Ryb3BMb2NhdGlvbj1DMC5BQk9WRTpyLmNsaWVudFktaS50b3A+aS5oZWlnaHQvMyoyJiYodGhpcy5fZHJvcExvY2F0aW9uPUMwLkJFTE9XKSl9aWYobiYmbi5oYXNBdHRyaWJ1dGUoImRyb3AtZGlzYWJsZWQiKSl7dGhpcy5fZHJvcExvY2F0aW9uPXZvaWQgMDtyZXR1cm59ci5zdG9wUHJvcGFnYXRpb24oKSxyLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZHJvcExvY2F0aW9uPT09QzAuRU1QVFk/dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnb3ZlciIsITAsdGhpcyk6bj8odGhpcy5fZHJhZ092ZXJJdGVtPW4uX2l0ZW0sbi5nZXRBdHRyaWJ1dGUoImRyYWdvdmVyIikhPT10aGlzLl9kcm9wTG9jYXRpb24mJm4uc2V0QXR0cmlidXRlKCJkcmFnb3ZlciIsdGhpcy5fZHJvcExvY2F0aW9uKSk6dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCl9fV9fZG5kQXV0b1Njcm9sbChyKXtpZih0aGlzLl9fZG5kQXV0b1Njcm9sbGluZylyZXR1cm4hMDtsZXQgbj10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSxpPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLG89bi1yK3RoaXMuX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkLGE9ci1pK3RoaXMuX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkLHM9MDtpZihhPjA/cz1hKjI6bz4wJiYocz0tbyoyKSxzKXtsZXQgbD10aGlzLiQudGFibGUuc2Nyb2xsVG9wO2lmKHRoaXMuJC50YWJsZS5zY3JvbGxUb3ArPXMsbCE9PXRoaXMuJC50YWJsZS5zY3JvbGxUb3ApcmV0dXJuIHRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nPSEwLHNldFRpbWVvdXQoKCk9PnRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nPSExLDIwKSx0aGlzLl9zY3JvbGxIYW5kbGVyKCksITB9fV9fZ2V0Vmlld3BvcnRSb3dzKCl7bGV0IHI9dGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20sbj10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihpPT57bGV0IG89aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gby5ib3R0b20+ciYmby50b3A8bn0pfV9jbGVhckRyYWdTdHlsZXMoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ292ZXIiKSxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChyPT5yLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ292ZXIiKSl9X29uRHJvcChyKXtpZih0aGlzLmRyb3BNb2RlKXtyLnN0b3BQcm9wYWdhdGlvbigpLHIucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmRhdGFUcmFuc2Zlci50eXBlcyYmQXJyYXkuZnJvbShyLmRhdGFUcmFuc2Zlci50eXBlcykubWFwKG89Pih7dHlwZTpvLGRhdGE6ci5kYXRhVHJhbnNmZXIuZ2V0RGF0YShvKX0pKTt0aGlzLl9jbGVhckRyYWdTdHlsZXMoKTtsZXQgaT1uZXcgQ3VzdG9tRXZlbnQoImdyaWQtZHJvcCIse2J1YmJsZXM6ci5idWJibGVzLGNhbmNlbGFibGU6ci5jYW5jZWxhYmxlLGRldGFpbDp7ZHJvcFRhcmdldEl0ZW06dGhpcy5fZHJhZ092ZXJJdGVtLGRyb3BMb2NhdGlvbjp0aGlzLl9kcm9wTG9jYXRpb24sZHJhZ0RhdGE6bn19KTtpLm9yaWdpbmFsRXZlbnQ9cix0aGlzLmRpc3BhdGNoRXZlbnQoaSl9fV9fZm9ybWF0RGVmYXVsdFRyYW5zZmVyRGF0YShyKXtyZXR1cm4gci5tYXAobj0+QXJyYXkuZnJvbShuLmNoaWxkcmVuKS5maWx0ZXIoaT0+IWkuaGlkZGVuJiZpLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImRldGFpbHMtY2VsbCIpPT09LTEpLnNvcnQoKGksbyk9PmkuX2NvbHVtbi5fb3JkZXI+by5fY29sdW1uLl9vcmRlcj8xOi0xKS5tYXAoaT0+aS5fY29udGVudC50ZXh0Q29udGVudC50cmltKCkpLmZpbHRlcihpPT5pKS5qb2luKCIJIikpLmpvaW4oYApgKX1fZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKCl7dGhpcy5maWx0ZXJEcmFnQW5kRHJvcCgpfWZpbHRlckRyYWdBbmREcm9wKCl7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihyPT4hci5oaWRkZW4pLmZvckVhY2gocj0+e3RoaXMuX2ZpbHRlckRyYWdBbmREcm9wKHIsdGhpcy5fX2dldFJvd01vZGVsKHIpKX0pfV9maWx0ZXJEcmFnQW5kRHJvcChyLG4pe2xldCBpPSF0aGlzLnJvd3NEcmFnZ2FibGV8fHRoaXMuZHJhZ0ZpbHRlciYmIXRoaXMuZHJhZ0ZpbHRlcihuKSxvPSF0aGlzLmRyb3BNb2RlfHx0aGlzLmRyb3BGaWx0ZXImJiF0aGlzLmRyb3BGaWx0ZXIobik7QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5tYXAocz0+cy5fY29udGVudCkuZm9yRWFjaChzPT57aT9zLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ2dhYmxlIik6cy5zZXRBdHRyaWJ1dGUoImRyYWdnYWJsZSIsITApfSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnLWRpc2FibGVkIixpLHIpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJvcC1kaXNhYmxlZCIsbyxyKX19O3ZhciBpdWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntfaGVhZGVyRm9jdXNhYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX2ZvY3VzYWJsZUNoYW5nZWQifSxfaXRlbXNGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9mb290ZXJGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9uYXZpZ2F0aW5nSXNIaWRkZW46Qm9vbGVhbixfZm9jdXNlZEl0ZW1JbmRleDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX2ZvY3VzZWRDb2x1bW5PcmRlcjpOdW1iZXIsaW50ZXJhY3Rpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAscmVhZE9ubHk6ITAsb2JzZXJ2ZXI6Il9pbnRlcmFjdGluZ0NoYW5nZWQifX19cmVhZHkoKXtzdXBlci5yZWFkeSgpLCEodGhpcy5faW9zfHx0aGlzLl9hbmRyb2lkKSYmKHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9vbktleVVwKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLHRoaXMuX29uRm9jdXNJbiksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsdGhpcy5fb25Gb2N1c091dCksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLHRoaXMuX29uQ2VsbEZvY3VzSW4uYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix0aGlzLl9vbkNlbGxGb2N1c091dC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9Pnt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCExLHRoaXMpLHRoaXMuX2lzTW91c2Vkb3duPSEwfSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwoKT0+dGhpcy5faXNNb3VzZWRvd249ITEpKX1fZm9jdXNhYmxlQ2hhbmdlZChyLG4pe24mJm4uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksciYmdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldChyKX1faW50ZXJhY3RpbmdDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9oZWFkZXJGb2N1c2FibGUpLHRoaXMuX3VwZGF0ZUdyaWRTZWN0aW9uRm9jdXNUYXJnZXQodGhpcy5faXRlbXNGb2N1c2FibGUpLHRoaXMuX3VwZGF0ZUdyaWRTZWN0aW9uRm9jdXNUYXJnZXQodGhpcy5fZm9vdGVyRm9jdXNhYmxlKX1fb25LZXlEb3duKHIpe2xldCBuPXIua2V5LGk7c3dpdGNoKG4pe2Nhc2UiQXJyb3dVcCI6Y2FzZSJBcnJvd0Rvd24iOmNhc2UiQXJyb3dMZWZ0IjpjYXNlIkFycm93UmlnaHQiOmNhc2UiUGFnZVVwIjpjYXNlIlBhZ2VEb3duIjpjYXNlIkhvbWUiOmNhc2UiRW5kIjppPSJOYXZpZ2F0aW9uIjticmVhaztjYXNlIkVudGVyIjpjYXNlIkVzY2FwZSI6Y2FzZSJGMiI6aT0iSW50ZXJhY3Rpb24iO2JyZWFrO2Nhc2UiVGFiIjppPSJUYWIiO2JyZWFrO2Nhc2UiICI6aT0iU3BhY2UiO2JyZWFrfXRoaXMuX2RldGVjdEludGVyYWN0aW5nKHIpLHRoaXMuaW50ZXJhY3RpbmcmJmkhPT0iSW50ZXJhY3Rpb24iJiYoaT12b2lkIDApLGkmJnRoaXNbYF9vbiR7aX1LZXlEb3duYF0ocixuKX1fZW5zdXJlU2Nyb2xsZWRUb0luZGV4KHIpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIoaT0+aS5pbmRleD09PXIpWzBdfHx0aGlzLl9zY3JvbGxUb0luZGV4KHIpfV9vbk5hdmlnYXRpb25LZXlEb3duKHIsbil7dGhpcy5fc2Nyb2xsSGFuZGxlcigpLHIucHJldmVudERlZmF1bHQoKTtmdW5jdGlvbiBpKEIpe3JldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKEIucGFyZW50Tm9kZS5jaGlsZHJlbixCKX1sZXQgbz10aGlzLl9sYXN0VmlzaWJsZUluZGV4LXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4LTEsYT0wLHM9MDtzd2l0Y2gobil7Y2FzZSJBcnJvd1JpZ2h0IjphPXRoaXMuX19pc1JUTD8tMToxO2JyZWFrO2Nhc2UiQXJyb3dMZWZ0IjphPXRoaXMuX19pc1JUTD8xOi0xO2JyZWFrO2Nhc2UiSG9tZSI6YT0tMS8wLHIuY3RybEtleSYmKHM9LTEvMCk7YnJlYWs7Y2FzZSJFbmQiOmE9MS8wLHIuY3RybEtleSYmKHM9MS8wKTticmVhaztjYXNlIkFycm93RG93biI6cz0xO2JyZWFrO2Nhc2UiQXJyb3dVcCI6cz0tMTticmVhaztjYXNlIlBhZ2VEb3duIjpzPW87YnJlYWs7Y2FzZSJQYWdlVXAiOnM9LW87YnJlYWt9bGV0IGw9ci5jb21wb3NlZFBhdGgoKVswXSxjPWkobCksdT10aGlzLl9lbGVtZW50TWF0Y2hlcyhsLCdbcGFydH49ImRldGFpbHMtY2VsbCJdJyksaD1sLnBhcmVudE5vZGUsZj1oLnBhcmVudE5vZGUscD0oZj09PXRoaXMuJC5pdGVtcz90aGlzLl9lZmZlY3RpdmVTaXplOmYuY2hpbGRyZW4ubGVuZ3RoKS0xLGQ9Zj09PXRoaXMuJC5pdGVtcz90aGlzLl9mb2N1c2VkSXRlbUluZGV4IT09dm9pZCAwP3RoaXMuX2ZvY3VzZWRJdGVtSW5kZXg6aC5pbmRleDppKGgpLGc9TWF0aC5tYXgoMCxNYXRoLm1pbihkK3MscCkpLF89ITE7aWYoZj09PXRoaXMuJC5pdGVtcyl7bGV0IEI9aC5faXRlbSxJPXRoaXMuX2NhY2hlLmdldEl0ZW1Gb3JJbmRleChnKTt1P189cz09PTA6Xz1zPT09MSYmdGhpcy5faXNEZXRhaWxzT3BlbmVkKEIpfHxzPT09LTEmJmchPT1kJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQoSSksXyE9PXUmJihzPT09MSYmX3x8cz09PS0xJiYhXykmJihnPWQpfWlmKGYhPT10aGlzLiQuaXRlbXMpe2lmKGc+ZClmb3IoO2c8cCYmZi5jaGlsZHJlbltnXS5oaWRkZW47KWcrKztlbHNlIGlmKGc8ZClmb3IoO2c+MCYmZi5jaGlsZHJlbltnXS5oaWRkZW47KWctLX10aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXI9PT12b2lkIDAmJih1P3RoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj0wOnRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj10aGlzLl9nZXRDb2x1bW5zKGYsZCkuZmlsdGVyKEI9PiFCLmhpZGRlbilbY10uX29yZGVyKTtsZXQgeT10aGlzLl9nZXRDb2x1bW5zKGYsZykuZmlsdGVyKEI9PiFCLmhpZGRlbikseD15Lm1hcChCPT5CLl9vcmRlcikuc29ydCgoQixJKT0+Qi1JKSxiPXgubGVuZ3RoLTEsUz14LmluZGV4T2YoeC5zbGljZSgwKS5zb3J0KChCLEkpPT5NYXRoLmFicyhCLXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlciktTWF0aC5hYnMoSS10aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXIpKVswXSksQz1zPT09MCYmdT9TOk1hdGgubWF4KDAsTWF0aC5taW4oUythLGIpKTtDIT09UyYmKHRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj12b2lkIDApLGY9PT10aGlzLiQuaXRlbXMmJnRoaXMuX2Vuc3VyZVNjcm9sbGVkVG9JbmRleChnKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCEwLHRoaXMpO2xldCBrPXkucmVkdWNlKChCLEksTCk9PihCW0kuX29yZGVyXT1MLEIpLHt9KVt4W0NdXSxPPWY9PT10aGlzLiQuaXRlbXM/QXJyYXkuZnJvbShmLmNoaWxkcmVuKS5maWx0ZXIoQj0+Qi5pbmRleD09PWcpWzBdOmYuY2hpbGRyZW5bZ107aWYoIU8pcmV0dXJuO2xldCBEPV8/QXJyYXkuZnJvbShPLmNoaWxkcmVuKS5maWx0ZXIoQj0+dGhpcy5fZWxlbWVudE1hdGNoZXMoQiwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKVswXTpPLmNoaWxkcmVuW2tdO2lmKHRoaXMuX3Njcm9sbEhvcml6b250YWxseVRvQ2VsbChEKSxmPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fZm9jdXNlZEl0ZW1JbmRleD1nKSxmPT09dGhpcy4kLml0ZW1zKXtsZXQgQj1ELmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEk9dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsTD10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtCLmJvdHRvbT5JPyh0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz1CLmJvdHRvbS1JLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSk6Qi50b3A8TCYmKHRoaXMuJC50YWJsZS5zY3JvbGxUb3AtPUwtQi50b3AsdGhpcy5fc2Nyb2xsSGFuZGxlcigpKX1ELmZvY3VzKCl9X29uSW50ZXJhY3Rpb25LZXlEb3duKHIsbil7bGV0IGk9ci5jb21wb3NlZFBhdGgoKVswXSxvPWkubG9jYWxOYW1lPT09ImlucHV0IiYmIS9eKGJ1dHRvbnxjaGVja2JveHxjb2xvcnxmaWxlfGltYWdlfHJhZGlvfHJhbmdlfHJlc2V0fHN1Ym1pdCkkL2kudGVzdChpLnR5cGUpLGE7c3dpdGNoKG4pe2Nhc2UiRW50ZXIiOmE9dGhpcy5pbnRlcmFjdGluZz8hbzohMDticmVhaztjYXNlIkVzY2FwZSI6YT0hMTticmVhaztjYXNlIkYyIjphPSF0aGlzLmludGVyYWN0aW5nO2JyZWFrfWxldHtjZWxsOnN9PXRoaXMuX2dldEdyaWRFdmVudExvY2F0aW9uKHIpO2lmKHRoaXMuaW50ZXJhY3RpbmchPT1hJiZzIT09bnVsbClpZihhKXtsZXQgbD1zLl9jb250ZW50LnF1ZXJ5U2VsZWN0b3IoIltmb2N1cy10YXJnZXRdIil8fHMuX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7bCYmKHIucHJldmVudERlZmF1bHQoKSxsLmZvY3VzKCksdGhpcy5fc2V0SW50ZXJhY3RpbmcoITApLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcykpfWVsc2Ugci5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj12b2lkIDAscy5mb2N1cygpLHRoaXMuX3NldEludGVyYWN0aW5nKCExKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCEwLHRoaXMpfV9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KHIsbil7bGV0IGk9W3RoaXMuJC50YWJsZSx0aGlzLl9oZWFkZXJGb2N1c2FibGUsdGhpcy5faXRlbXNGb2N1c2FibGUsdGhpcy5fZm9vdGVyRm9jdXNhYmxlLHRoaXMuJC5mb2N1c2V4aXRdLG89aS5pbmRleE9mKHIpO2ZvcihvKz1uO28+PTAmJm88PWkubGVuZ3RoLTEmJighaVtvXXx8aVtvXS5wYXJlbnROb2RlLmhpZGRlbik7KW8rPW47cmV0dXJuIGlbb119X29uVGFiS2V5RG93bihyKXtsZXQgbj10aGlzLl9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KHIuY29tcG9zZWRQYXRoKClbMF0sci5zaGlmdEtleT8tMToxKTtpZihuPT09dGhpcy4kLnRhYmxlKXRoaXMuJC50YWJsZS5mb2N1cygpO2Vsc2UgaWYobj09PXRoaXMuJC5mb2N1c2V4aXQpdGhpcy4kLmZvY3VzZXhpdC5mb2N1cygpO2Vsc2UgaWYobj09PXRoaXMuX2l0ZW1zRm9jdXNhYmxlKXtsZXQgaT1uLG89dGhpcy5faXRlbXNGb2N1c2FibGUucGFyZW50Tm9kZTtpZih0aGlzLl9lbnN1cmVTY3JvbGxlZFRvSW5kZXgodGhpcy5fZm9jdXNlZEl0ZW1JbmRleCksby5pbmRleCE9PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgpe2xldCBhPUFycmF5LmZyb20oby5jaGlsZHJlbikuaW5kZXhPZih0aGlzLl9pdGVtc0ZvY3VzYWJsZSkscz1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGw9PmwuaW5kZXg9PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4KVswXTtzJiYoaT1zLmNoaWxkcmVuW2FdKX1yLnByZXZlbnREZWZhdWx0KCksaS5mb2N1cygpfWVsc2Ugci5wcmV2ZW50RGVmYXVsdCgpLG4uZm9jdXMoKTt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCEwLHRoaXMpfV9vblNwYWNlS2V5RG93bihyKXtyLnByZXZlbnREZWZhdWx0KCk7bGV0IG49ci5jb21wb3NlZFBhdGgoKVswXTsoIW4uX2NvbnRlbnR8fCFuLl9jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1hY3RpdmF0ZSIse2RldGFpbDp7bW9kZWw6dGhpcy5fX2dldFJvd01vZGVsKG4ucGFyZW50RWxlbWVudCl9fSkpfV9vbktleVVwKHIpe2lmKCEvXiggfFNwYWNlQmFyKSQvLnRlc3Qoci5rZXkpKXJldHVybjtyLnByZXZlbnREZWZhdWx0KCk7bGV0IG49ci5jb21wb3NlZFBhdGgoKVswXTtpZihuLl9jb250ZW50JiZuLl9jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKXtsZXQgaT10aGlzLmhhc0F0dHJpYnV0ZSgibmF2aWdhdGluZyIpO24uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQuY2xpY2soKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLGksdGhpcyl9fV9vbkZvY3VzSW4ocil7dGhpcy5faXNNb3VzZWRvd258fHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyk7bGV0IG49ci5jb21wb3NlZFBhdGgoKVswXTtuPT09dGhpcy4kLnRhYmxlfHxuPT09dGhpcy4kLmZvY3VzZXhpdD8odGhpcy5fcHJlZGljdEZvY3VzU3RlcFRhcmdldChuLG49PT10aGlzLiQudGFibGU/MTotMSkuZm9jdXMoKSx0aGlzLl9zZXRJbnRlcmFjdGluZyghMSkpOnRoaXMuX2RldGVjdEludGVyYWN0aW5nKHIpfV9vbkZvY3VzT3V0KHIpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcyksdGhpcy5fZGV0ZWN0SW50ZXJhY3Rpbmcocil9X29uQ2VsbEZvY3VzSW4ocil7bGV0e3NlY3Rpb246bixjZWxsOml9PXRoaXMuX2dldEdyaWRFdmVudExvY2F0aW9uKHIpO3RoaXMuX2RldGVjdEludGVyYWN0aW5nKHIpLG4mJmkmJih0aGlzLl9hY3RpdmVSb3dHcm91cD1uLHRoaXMuJC5oZWFkZXI9PT1uP3RoaXMuX2hlYWRlckZvY3VzYWJsZT1pOnRoaXMuJC5pdGVtcz09PW4/dGhpcy5faXRlbXNGb2N1c2FibGU9aTp0aGlzLiQuZm9vdGVyPT09biYmKHRoaXMuX2Zvb3RlckZvY3VzYWJsZT1pKSxpLl9jb250ZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWZvY3VzaW4iLHtidWJibGVzOiExfSkpLGkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXMiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpKSx0aGlzLl9kZXRlY3RGb2N1c2VkSXRlbUluZGV4KHIpfV9vbkNlbGxGb2N1c091dChyKXtyLmNvbXBvc2VkUGF0aCgpLmluZGV4T2YodGhpcy4kLnRhYmxlKT09PTMmJnIuY29tcG9zZWRQYXRoKClbMF0uX2NvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNvdXQiLHtidWJibGVzOiExfSkpfV9kZXRlY3RJbnRlcmFjdGluZyhyKXtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpLnNvbWUoaT0+aS5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50Iik7dGhpcy5fc2V0SW50ZXJhY3Rpbmcobil9X2RldGVjdEZvY3VzZWRJdGVtSW5kZXgocil7bGV0e3NlY3Rpb246bixyb3c6aX09dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7bj09PXRoaXMuJC5pdGVtcyYmKHRoaXMuX2ZvY3VzZWRJdGVtSW5kZXg9aS5pbmRleCl9X3VwZGF0ZUdyaWRTZWN0aW9uRm9jdXNUYXJnZXQocil7aWYoIXIpcmV0dXJuO2xldCBuPXRoaXMuX2dldEdyaWRTZWN0aW9uRnJvbUZvY3VzVGFyZ2V0KHIpLGk9dGhpcy5pbnRlcmFjdGluZyYmbj09PXRoaXMuX2FjdGl2ZVJvd0dyb3VwO3IudGFiSW5kZXg9aT8tMTowfV9wcmV2ZW50U2Nyb2xsZXJSb3RhdGluZ0NlbGxGb2N1cyhyLG4pe3IuaW5kZXg9PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4JiZ0aGlzLmhhc0F0dHJpYnV0ZSgibmF2aWdhdGluZyIpJiZ0aGlzLl9hY3RpdmVSb3dHcm91cD09PXRoaXMuJC5pdGVtcyYmKHRoaXMuX25hdmlnYXRpbmdJc0hpZGRlbj0hMCx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCExLHRoaXMpKSxuPT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCYmdGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuJiYodGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuPSExLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcykpfV9nZXRDb2x1bW5zKHIsbil7bGV0IGk9dGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMTtyZXR1cm4gcj09PXRoaXMuJC5oZWFkZXI/aT1uOnI9PT10aGlzLiQuZm9vdGVyJiYoaT10aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xLW4pLHRoaXMuX2NvbHVtblRyZWVbaV19X3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCl7aWYodGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZCYmKHRoaXMuX2hlYWRlckZvY3VzYWJsZT1BcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIuZmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4pLmZpbHRlcihyPT4hci5oaWRkZW4pWzBdKSx0aGlzLiQuaXRlbXMuZmlyc3RFbGVtZW50Q2hpbGQpe2xldCByPXRoaXMuX2l0ZXJhdGVJdGVtcygobixpKT0+e2lmKHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4PT09aSlyZXR1cm4gdGhpcy4kLml0ZW1zLmNoaWxkcmVuW25dfSk7ciYmKHRoaXMuX2l0ZW1zRm9jdXNhYmxlPUFycmF5LmZyb20oci5jaGlsZHJlbikuZmlsdGVyKG49PiFuLmhpZGRlbilbMF0pfXRoaXMuJC5mb290ZXIuZmlyc3RFbGVtZW50Q2hpbGQmJih0aGlzLl9mb290ZXJGb2N1c2FibGU9QXJyYXkuZnJvbSh0aGlzLiQuZm9vdGVyLmZpcnN0RWxlbWVudENoaWxkLmNoaWxkcmVuKS5maWx0ZXIocj0+IXIuaGlkZGVuKVswXSl9X3Njcm9sbEhvcml6b250YWxseVRvQ2VsbChyKXtpZihyLmhhc0F0dHJpYnV0ZSgiZnJvemVuIil8fHRoaXMuX2VsZW1lbnRNYXRjaGVzKHIsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSlyZXR1cm47bGV0IG49ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXIucGFyZW50Tm9kZSxvPUFycmF5LmZyb20oaS5jaGlsZHJlbikuaW5kZXhPZihyKSxhPXRoaXMuJC50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWEubGVmdCxsPWEucmlnaHQ7Zm9yKGxldCBjPW8tMTtjPj0wO2MtLSl7bGV0IHU9aS5jaGlsZHJlbltjXTtpZighKHUuaGFzQXR0cmlidXRlKCJoaWRkZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXModSwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKSYmdS5oYXNBdHRyaWJ1dGUoImZyb3plbiIpKXtzPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7YnJlYWt9fWZvcihsZXQgYz1vKzE7YzxpLmNoaWxkcmVuLmxlbmd0aDtjKyspe2xldCB1PWkuY2hpbGRyZW5bY107aWYoISh1Lmhhc0F0dHJpYnV0ZSgiaGlkZGVuIil8fHRoaXMuX2VsZW1lbnRNYXRjaGVzKHUsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSkmJnUuaGFzQXR0cmlidXRlKCJmcm96ZW4iKSl7bD11LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7YnJlYWt9fW4ubGVmdDxzJiYodGhpcy4kLnRhYmxlLnNjcm9sbExlZnQrPU1hdGgucm91bmQobi5sZWZ0LXMpKSxuLnJpZ2h0PmwmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9TWF0aC5yb3VuZChuLnJpZ2h0LWwpKX1fZWxlbWVudE1hdGNoZXMocixuKXtyZXR1cm4gci5tYXRjaGVzP3IubWF0Y2hlcyhuKTpBcnJheS5mcm9tKHIucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKG4pKS5pbmRleE9mKHIpIT09LTF9X2dldEdyaWRFdmVudExvY2F0aW9uKHIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCksaT1uLmluZGV4T2YodGhpcy4kLnRhYmxlKSxvPWk+PTE/bltpLTFdOm51bGwsYT1pPj0yP25baS0yXTpudWxsLHM9aT49Mz9uW2ktM106bnVsbDtyZXR1cm57c2VjdGlvbjpvLHJvdzphLGNlbGw6c319X2dldEdyaWRTZWN0aW9uRnJvbUZvY3VzVGFyZ2V0KHIpe3JldHVybiByPT09dGhpcy5faGVhZGVyRm9jdXNhYmxlP3RoaXMuJC5oZWFkZXI6cj09PXRoaXMuX2l0ZW1zRm9jdXNhYmxlP3RoaXMuJC5pdGVtczpyPT09dGhpcy5fZm9vdGVyRm9jdXNhYmxlP3RoaXMuJC5mb290ZXI6bnVsbH19O2Z1bmN0aW9uIG91ZShlLHQscil7bGV0IG49MTtlLmZvckVhY2goaT0+e24lMTA9PT0wJiZuKyssaS5fb3JkZXI9cituKnQsbisrfSl9dmFyIGF1ZT1lPT5jbGFzcyBleHRlbmRzIHloKGUpe3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntjb2x1bW5SZW9yZGVyaW5nQWxsb3dlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfb3JkZXJCYXNlU2NvcGU6e3R5cGU6TnVtYmVyLHZhbHVlOjFlN319fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfdXBkYXRlT3JkZXJzKF9jb2x1bW5UcmVlLCBfY29sdW1uVHJlZS4qKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSxFbSh0aGlzLCJ0cmFjayIsdGhpcy5fb25UcmFja0V2ZW50KSx0aGlzLl9yZW9yZGVyR2hvc3Q9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0PSJyZW9yZGVyLWdob3N0Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hTdGFydC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iix0aGlzLl9vbkNvbnRleHRNZW51LmJpbmQodGhpcykpfV9vbkNvbnRleHRNZW51KHIpe3RoaXMuaGFzQXR0cmlidXRlKCJyZW9yZGVyaW5nIikmJnIucHJldmVudERlZmF1bHQoKX1fb25Ub3VjaFN0YXJ0KHIpe3RoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5fb25UcmFja1N0YXJ0KHtkZXRhaWw6e3g6ci50b3VjaGVzWzBdLmNsaWVudFgseTpyLnRvdWNoZXNbMF0uY2xpZW50WX19KX0sMTAwKX1fb25Ub3VjaE1vdmUocil7dGhpcy5fZHJhZ2dlZENvbHVtbiYmci5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLl9zdGFydFRvdWNoUmVvcmRlclRpbWVvdXQpfV9vblRvdWNoRW5kKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dCksdGhpcy5fb25UcmFja0VuZCgpfV9vblRyYWNrRXZlbnQocil7aWYoci5kZXRhaWwuc3RhdGU9PT0ic3RhcnQiKXtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpLGk9bltuLmluZGV4T2YodGhpcy4kLmhlYWRlciktMl07aWYoIWl8fCFpLl9jb250ZW50fHxpLl9jb250ZW50LmNvbnRhaW5zKHRoaXMuZ2V0Um9vdE5vZGUoKS5hY3RpdmVFbGVtZW50KXx8dGhpcy4kLnNjcm9sbGVyLmhhc0F0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIikpcmV0dXJuO3RoaXMuX3RvdWNoRGV2aWNlfHx0aGlzLl9vblRyYWNrU3RhcnQocil9ZWxzZSByLmRldGFpbC5zdGF0ZT09PSJ0cmFjayI/dGhpcy5fb25UcmFjayhyKTpyLmRldGFpbC5zdGF0ZT09PSJlbmQiJiZ0aGlzLl9vblRyYWNrRW5kKHIpfV9vblRyYWNrU3RhcnQocil7aWYoIXRoaXMuY29sdW1uUmVvcmRlcmluZ0FsbG93ZWQpcmV0dXJuO2xldCBuPXIuY29tcG9zZWRQYXRoJiZyLmNvbXBvc2VkUGF0aCgpO2lmKG4mJm4uZmlsdGVyKG89Pm8uaGFzQXR0cmlidXRlJiZvLmhhc0F0dHJpYnV0ZSgiZHJhZ2dhYmxlIikpWzBdKXJldHVybjtsZXQgaT10aGlzLl9jZWxsRnJvbVBvaW50KHIuZGV0YWlsLngsci5kZXRhaWwueSk7aWYoISghaXx8aS5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKCJoZWFkZXItY2VsbCIpPT09LTEpKXtmb3IodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJyZW9yZGVyaW5nIiwhMCx0aGlzKSx0aGlzLl9kcmFnZ2VkQ29sdW1uPWkuX2NvbHVtbjt0aGlzLl9kcmFnZ2VkQ29sdW1uLnBhcmVudEVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQ9PT0xOyl0aGlzLl9kcmFnZ2VkQ29sdW1uPXRoaXMuX2RyYWdnZWRDb2x1bW4ucGFyZW50RWxlbWVudDt0aGlzLl9zZXRTaWJsaW5nc1Jlb3JkZXJTdGF0dXModGhpcy5fZHJhZ2dlZENvbHVtbiwiYWxsb3dlZCIpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9ImRyYWdnaW5nIix0aGlzLl91cGRhdGVHaG9zdChpKSx0aGlzLl9yZW9yZGVyR2hvc3Quc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIsdGhpcy5fdXBkYXRlR2hvc3RQb3NpdGlvbihyLmRldGFpbC54LHRoaXMuX3RvdWNoRGV2aWNlP3IuZGV0YWlsLnktNTA6ci5kZXRhaWwueSksdGhpcy5fYXV0b1Njcm9sbGVyKCl9fV9vblRyYWNrKHIpe2lmKCF0aGlzLl9kcmFnZ2VkQ29sdW1uKXJldHVybjtsZXQgbj10aGlzLl9jZWxsRnJvbVBvaW50KHIuZGV0YWlsLngsci5kZXRhaWwueSk7aWYoIW4pcmV0dXJuO2xldCBpPXRoaXMuX2dldFRhcmdldENvbHVtbihuLHRoaXMuX2RyYWdnZWRDb2x1bW4pO3RoaXMuX2lzU3dhcEFsbG93ZWQodGhpcy5fZHJhZ2dlZENvbHVtbixpKSYmdGhpcy5faXNTd2FwcGFibGVCeVBvc2l0aW9uKGksci5kZXRhaWwueCkmJnRoaXMuX3N3YXBDb2x1bW5PcmRlcnModGhpcy5fZHJhZ2dlZENvbHVtbixpKSx0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKHIuZGV0YWlsLngsdGhpcy5fdG91Y2hEZXZpY2U/ci5kZXRhaWwueS01MDpyLmRldGFpbC55KSx0aGlzLl9sYXN0RHJhZ0NsaWVudFg9ci5kZXRhaWwueH1fb25UcmFja0VuZCgpeyF0aGlzLl9kcmFnZ2VkQ29sdW1ufHwodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJyZW9yZGVyaW5nIiwhMSx0aGlzKSx0aGlzLl9kcmFnZ2VkQ29sdW1uLl9yZW9yZGVyU3RhdHVzPSIiLHRoaXMuX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyh0aGlzLl9kcmFnZ2VkQ29sdW1uLCIiKSx0aGlzLl9kcmFnZ2VkQ29sdW1uPW51bGwsdGhpcy5fbGFzdERyYWdDbGllbnRYPW51bGwsdGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sdW1uLXJlb3JkZXIiLHtkZXRhaWw6e2NvbHVtbnM6dGhpcy5fZ2V0Q29sdW1uc0luT3JkZXIoKX19KSkpfV9nZXRDb2x1bW5zSW5PcmRlcigpe3JldHVybiB0aGlzLl9jb2x1bW5UcmVlLnNsaWNlKDApLnBvcCgpLmZpbHRlcihyPT4hci5oaWRkZW4pLnNvcnQoKHIsbik9PnIuX29yZGVyLW4uX29yZGVyKX1fY2VsbEZyb21Qb2ludChyLG4pe3I9cnx8MCxuPW58fDAsdGhpcy5fZHJhZ2dlZENvbHVtbnx8dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuby1jb250ZW50LXBvaW50ZXItZXZlbnRzIiwhMCx0aGlzLiQuc2Nyb2xsZXIpO2xldCBpPXRoaXMuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KHIsbik7aWYodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuby1jb250ZW50LXBvaW50ZXItZXZlbnRzIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLGkmJmkuX2NvbHVtbilyZXR1cm4gaX1fdXBkYXRlR2hvc3RQb3NpdGlvbihyLG4pe2xldCBpPXRoaXMuX3Jlb3JkZXJHaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXItaS53aWR0aC8yLGE9bi1pLmhlaWdodC8yLHM9cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0Ll9sZWZ0fHwwKSxsPXBhcnNlSW50KHRoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wfHwwKTt0aGlzLl9yZW9yZGVyR2hvc3QuX2xlZnQ9cy0oaS5sZWZ0LW8pLHRoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wPWwtKGkudG9wLWEpLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3RoaXMuX3Jlb3JkZXJHaG9zdC5fbGVmdH1weCwgJHt0aGlzLl9yZW9yZGVyR2hvc3QuX3RvcH1weClgfV91cGRhdGVHaG9zdChyKXtsZXQgbj10aGlzLl9yZW9yZGVyR2hvc3Q7bi50ZXh0Q29udGVudD1yLl9jb250ZW50LmlubmVyVGV4dDtsZXQgaT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKTtyZXR1cm5bImJveFNpemluZyIsImRpc3BsYXkiLCJ3aWR0aCIsImhlaWdodCIsImJhY2tncm91bmQiLCJhbGlnbkl0ZW1zIiwicGFkZGluZyIsImJvcmRlciIsImZsZXgtZGlyZWN0aW9uIiwib3ZlcmZsb3ciXS5mb3JFYWNoKG89Pm4uc3R5bGVbb109aVtvXSksbn1fdXBkYXRlT3JkZXJzKHIsbil7cj09PXZvaWQgMHx8bj09PXZvaWQgMHx8KHJbMF0uZm9yRWFjaChpPT5pLl9vcmRlcj0wKSxvdWUoclswXSx0aGlzLl9vcmRlckJhc2VTY29wZSwwKSl9X3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyhyLG4pe0FycmF5LmZyb20oci5wYXJlbnROb2RlLmNoaWxkcmVuKS5maWx0ZXIoaT0+L2NvbHVtbi8udGVzdChpLmxvY2FsTmFtZSkmJnRoaXMuX2lzU3dhcEFsbG93ZWQoaSxyKSkuZm9yRWFjaChpPT5pLl9yZW9yZGVyU3RhdHVzPW4pfV9hdXRvU2Nyb2xsZXIoKXtpZih0aGlzLl9sYXN0RHJhZ0NsaWVudFgpe2xldCByPXRoaXMuX2xhc3REcmFnQ2xpZW50WC10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KzUwLG49dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXRoaXMuX2xhc3REcmFnQ2xpZW50WCs1MDtyPjA/dGhpcy4kLnRhYmxlLnNjcm9sbExlZnQrPXIvMTA6bj4wJiYodGhpcy4kLnRhYmxlLnNjcm9sbExlZnQtPW4vMTApLHRoaXMuX3Njcm9sbEhhbmRsZXIoKX10aGlzLl9kcmFnZ2VkQ29sdW1uJiZ0aGlzLmFzeW5jKHRoaXMuX2F1dG9TY3JvbGxlciwxMCl9X2lzU3dhcEFsbG93ZWQocixuKXtpZihyJiZuKXtsZXQgaT1yIT09bixvPXIucGFyZW50RWxlbWVudD09PW4ucGFyZW50RWxlbWVudCxhPXIuZnJvemVuPT09bi5mcm96ZW47cmV0dXJuIGkmJm8mJmF9fV9pc1N3YXBwYWJsZUJ5UG9zaXRpb24ocixuKXtsZXQgaT1BcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIucXVlcnlTZWxlY3RvckFsbCgndHI6bm90KFtoaWRkZW5dKSBbcGFydH49ImNlbGwiXScpKS5maWx0ZXIocz0+ci5jb250YWlucyhzLl9jb2x1bW4pKVswXSxvPXRoaXMuJC5oZWFkZXIucXVlcnlTZWxlY3RvcigidHI6bm90KFtoaWRkZW5dKSBbcmVvcmRlci1zdGF0dXM9ZHJhZ2dpbmddIikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBhLmxlZnQ+by5sZWZ0P24+YS5yaWdodC1vLndpZHRoOm48YS5sZWZ0K28ud2lkdGh9X3N3YXBDb2x1bW5PcmRlcnMocixuKXtsZXQgaT1yLl9vcmRlcjtyLl9vcmRlcj1uLl9vcmRlcixuLl9vcmRlcj1pLHRoaXMuX3VwZGF0ZUxhc3RGcm96ZW4oKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW4oKX1fZ2V0VGFyZ2V0Q29sdW1uKHIsbil7aWYociYmbil7bGV0IGk9ci5fY29sdW1uO2Zvcig7aS5wYXJlbnRFbGVtZW50IT09bi5wYXJlbnRFbGVtZW50JiZpIT09dGhpczspaT1pLnBhcmVudEVsZW1lbnQ7cmV0dXJuIGkucGFyZW50RWxlbWVudD09PW4ucGFyZW50RWxlbWVudD9pOnIuX2NvbHVtbn19fTt2YXIgbmhyPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57cmVzaXphYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmxvY2FsTmFtZT09PSJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiKXJldHVybjtsZXQgcj10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHImJnIubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCImJnIucmVzaXphYmxlfHwhMX19LF9oZWFkZXJUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LF9mb290ZXJUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LGZyb3plbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxoaWRkZW46e3R5cGU6Qm9vbGVhbn0saGVhZGVyOnt0eXBlOlN0cmluZ30sdGV4dEFsaWduOnt0eXBlOlN0cmluZ30sX2xhc3RGcm96ZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX29yZGVyOk51bWJlcixfcmVvcmRlclN0YXR1czpCb29sZWFuLF9lbXB0eUNlbGxzOkFycmF5LF9oZWFkZXJDZWxsOk9iamVjdCxfZm9vdGVyQ2VsbDpPYmplY3QsX2dyaWQ6T2JqZWN0LGhlYWRlclJlbmRlcmVyOkZ1bmN0aW9uLGZvb3RlclJlbmRlcmVyOkZ1bmN0aW9ufX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3dpZHRoQ2hhbmdlZCh3aWR0aCwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfZnJvemVuQ2hhbmdlZChmcm96ZW4sIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX2ZsZXhHcm93Q2hhbmdlZChmbGV4R3JvdywgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfcGF0aE9ySGVhZGVyQ2hhbmdlZChwYXRoLCBoZWFkZXIsIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiosIHJlbmRlcmVyLCBoZWFkZXJSZW5kZXJlciwgX2JvZHlUZW1wbGF0ZSwgX2hlYWRlclRlbXBsYXRlKSIsIl90ZXh0QWxpZ25DaGFuZ2VkKHRleHRBbGlnbiwgX2NlbGxzLiosIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCkiLCJfb3JkZXJDaGFuZ2VkKF9vcmRlciwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfbGFzdEZyb3plbkNoYW5nZWQoX2xhc3RGcm96ZW4pIiwiX3NldEJvZHlUZW1wbGF0ZU9yUmVuZGVyZXIoX2JvZHlUZW1wbGF0ZSwgcmVuZGVyZXIsIF9jZWxscywgX2NlbGxzLiopIiwiX3NldEhlYWRlclRlbXBsYXRlT3JSZW5kZXJlcihfaGVhZGVyVGVtcGxhdGUsIGhlYWRlclJlbmRlcmVyLCBfaGVhZGVyQ2VsbCkiLCJfc2V0Rm9vdGVyVGVtcGxhdGVPclJlbmRlcmVyKF9mb290ZXJUZW1wbGF0ZSwgZm9vdGVyUmVuZGVyZXIsIF9mb290ZXJDZWxsKSIsIl9yZXNpemFibGVDaGFuZ2VkKHJlc2l6YWJsZSwgX2hlYWRlckNlbGwpIiwiX3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKF9yZW9yZGVyU3RhdHVzLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9oaWRkZW5DaGFuZ2VkKGhpZGRlbiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiXX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fYm9keVRlbXBsYXRlJiYodGhpcy5fYm9keVRlbXBsYXRlLnRlbXBsYXRpemVyLl9ncmlkPXRoaXMuX2dyaWQpLHRoaXMuX2hlYWRlclRlbXBsYXRlJiYodGhpcy5faGVhZGVyVGVtcGxhdGUudGVtcGxhdGl6ZXIuX2dyaWQ9dGhpcy5fZ3JpZCksdGhpcy5fZm9vdGVyVGVtcGxhdGUmJih0aGlzLl9mb290ZXJUZW1wbGF0ZS50ZW1wbGF0aXplci5fZ3JpZD10aGlzLl9ncmlkKSx0aGlzLl90ZW1wbGF0ZU9ic2VydmVyLmZsdXNoKCksdGhpcy5fYm9keVRlbXBsYXRlfHx0aGlzLl90ZW1wbGF0ZU9ic2VydmVyLmNhbGxiYWNrKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChyPT57ci5fY29udGVudC5wYXJlbnROb2RlfHx0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkLmFwcGVuZENoaWxkKHIuX2NvbnRlbnQpfSl9KX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fZmluZEhvc3RHcmlkKCl8fHRoaXMuX2FsbENlbGxzLmZvckVhY2gocj0+e3IuX2NvbnRlbnQucGFyZW50Tm9kZSYmci5fY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIuX2NvbnRlbnQpfSl9KSx0aGlzLl9ncmlkVmFsdWU9dm9pZCAwfV9maW5kSG9zdEdyaWQoKXtsZXQgcj10aGlzO2Zvcig7ciYmIS9edmFhZGluLipncmlkKC1wcm8pPyQvLnRlc3Qoci5sb2NhbE5hbWUpOylyPXIuYXNzaWduZWRTbG90P3IuYXNzaWduZWRTbG90LnBhcmVudE5vZGU6ci5wYXJlbnROb2RlO3JldHVybiByfHx2b2lkIDB9Z2V0IF9ncmlkKCl7cmV0dXJuIHRoaXMuX2dyaWRWYWx1ZXx8KHRoaXMuX2dyaWRWYWx1ZT10aGlzLl9maW5kSG9zdEdyaWQoKSksdGhpcy5fZ3JpZFZhbHVlfWdldCBfYWxsQ2VsbHMoKXtyZXR1cm5bXS5jb25jYXQodGhpcy5fY2VsbHN8fFtdKS5jb25jYXQodGhpcy5fZW1wdHlDZWxsc3x8W10pLmNvbmNhdCh0aGlzLl9oZWFkZXJDZWxsKS5jb25jYXQodGhpcy5fZm9vdGVyQ2VsbCkuZmlsdGVyKHI9PnIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl90ZW1wbGF0ZU9ic2VydmVyPW5ldyB2aCh0aGlzLCgpPT57dGhpcy5faGVhZGVyVGVtcGxhdGU9dGhpcy5fcHJlcGFyZUhlYWRlclRlbXBsYXRlKCksdGhpcy5fZm9vdGVyVGVtcGxhdGU9dGhpcy5fcHJlcGFyZUZvb3RlclRlbXBsYXRlKCksdGhpcy5fYm9keVRlbXBsYXRlPXRoaXMuX3ByZXBhcmVCb2R5VGVtcGxhdGUoKX0pfV9wcmVwYXJlSGVhZGVyVGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSghMCl8fG51bGwse30pfV9wcmVwYXJlRm9vdGVyVGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSghMSwhMCl8fG51bGwse30pfV9wcmVwYXJlQm9keVRlbXBsYXRlKCl7cmV0dXJuIHRoaXMuX3ByZXBhcmVUZW1wbGF0aXplcih0aGlzLl9maW5kVGVtcGxhdGUoKXx8bnVsbCl9X3ByZXBhcmVUZW1wbGF0aXplcihyLG4pe2lmKHImJiFyLnRlbXBsYXRpemVyKXtsZXQgaT1uZXcgVDA7aS5fZ3JpZD10aGlzLl9ncmlkLGkuZGF0YUhvc3Q9dGhpcy5kYXRhSG9zdCxpLl9pbnN0YW5jZVByb3BzPW58fGkuX2luc3RhbmNlUHJvcHMsaS50ZW1wbGF0ZT1yLHIudGVtcGxhdGl6ZXI9aX1yZXR1cm4gcn1fcmVuZGVySGVhZGVyQW5kRm9vdGVyKCl7dGhpcy5oZWFkZXJSZW5kZXJlciYmdGhpcy5faGVhZGVyQ2VsbCYmdGhpcy5fX3J1blJlbmRlcmVyKHRoaXMuaGVhZGVyUmVuZGVyZXIsdGhpcy5faGVhZGVyQ2VsbCksdGhpcy5mb290ZXJSZW5kZXJlciYmdGhpcy5fZm9vdGVyQ2VsbCYmdGhpcy5fX3J1blJlbmRlcmVyKHRoaXMuZm9vdGVyUmVuZGVyZXIsdGhpcy5fZm9vdGVyQ2VsbCl9X19ydW5SZW5kZXJlcihyLG4saSl7bGV0IG89W24uX2NvbnRlbnQsdGhpc107aSYmaS5pdGVtJiZvLnB1c2goaSksci5hcHBseSh0aGlzLG8pfV9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXtpZighdGhpcy5oaWRkZW4pe2lmKHImJm4pdGhyb3cgbmV3IEVycm9yKCJZb3Ugc2hvdWxkIG9ubHkgdXNlIGVpdGhlciBhIHJlbmRlcmVyIG9yIGEgdGVtcGxhdGUiKTtpLmZvckVhY2gobz0+e2xldCBhPXRoaXMuX2dyaWQuX19nZXRSb3dNb2RlbChvLnBhcmVudEVsZW1lbnQpO2lmKG4pby5fcmVuZGVyZXI9biwoYS5pdGVtfHxuPT09dGhpcy5oZWFkZXJSZW5kZXJlcnx8bj09PXRoaXMuZm9vdGVyUmVuZGVyZXIpJiZ0aGlzLl9fcnVuUmVuZGVyZXIobixvLGEpO2Vsc2UgaWYoby5fdGVtcGxhdGUhPT1yKXtvLl90ZW1wbGF0ZT1yLG8uX2NvbnRlbnQuaW5uZXJIVE1MPSIiLHIudGVtcGxhdGl6ZXIuX2dyaWQ9ci50ZW1wbGF0aXplci5fZ3JpZHx8dGhpcy5fZ3JpZDtsZXQgcz1yLnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCk7by5fY29udGVudC5hcHBlbmRDaGlsZChzLnJvb3QpLG8uX2luc3RhbmNlPXMsYS5pdGVtJiZvLl9pbnN0YW5jZS5zZXRQcm9wZXJ0aWVzKGEpfX0pfX1fc2V0Qm9keVRlbXBsYXRlT3JSZW5kZXJlcihyLG4saSl7KHJ8fG4pJiZpJiZ0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKX1fc2V0SGVhZGVyVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJnRoaXMuX19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLFtpXSl9X3NldEZvb3RlclRlbXBsYXRlT3JSZW5kZXJlcihyLG4saSl7KHJ8fG4pJiZpJiYodGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcihyLG4sW2ldKSx0aGlzLl9ncmlkLl9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eShpLnBhcmVudEVsZW1lbnQpKX1fc2VsZWN0Rmlyc3RUZW1wbGF0ZShyPSExLG49ITEpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzKS5maWx0ZXIoaT0+aS5sb2NhbE5hbWU9PT0idGVtcGxhdGUiJiZpLmNsYXNzTGlzdC5jb250YWlucygiaGVhZGVyIik9PT1yJiZpLmNsYXNzTGlzdC5jb250YWlucygiZm9vdGVyIik9PT1uKVswXX1fZmluZFRlbXBsYXRlKHIsbil7bGV0IGk9dGhpcy5fc2VsZWN0Rmlyc3RUZW1wbGF0ZShyLG4pO3JldHVybiBpJiZ0aGlzLmRhdGFIb3N0JiYoaS5fcm9vdERhdGFIb3N0PXRoaXMuZGF0YUhvc3QuX3Jvb3REYXRhSG9zdHx8dGhpcy5kYXRhSG9zdCksaX1fZmxleEdyb3dDaGFuZ2VkKHIpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgiZmxleEdyb3ciKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc3R5bGUuZmxleEdyb3c9cil9X29yZGVyQ2hhbmdlZChyKXt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc3R5bGUub3JkZXI9cil9X3dpZHRoQ2hhbmdlZChyKXt0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQoIndpZHRoIiksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT5uLnN0eWxlLndpZHRoPXIpLHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuX19mb3JjZVJlZmxvdyYmdGhpcy5fZ3JpZC5fX2ZvcmNlUmVmbG93KCl9X2Zyb3plbkNoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJmcm96ZW4iLHIpLHRoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJmcm96ZW4iLHIsbikpLHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuX2Zyb3plbkNlbGxzQ2hhbmdlZCYmdGhpcy5fZ3JpZC5fZnJvemVuQ2VsbHNDaGFuZ2VkKCl9X2xhc3RGcm96ZW5DaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsYXN0LWZyb3plbiIscixuKSksdGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiYodGhpcy5wYXJlbnRFbGVtZW50Ll9sYXN0RnJvemVuPXIpfV9wYXRoT3JIZWFkZXJDaGFuZ2VkKHIsbixpLG8sYSxzLGwsYyx1KXtsZXQgaD1uIT09dm9pZCAwO2lmKCFsJiYhdSYmaCYmaSYmdGhpcy5fX3NldFRleHRDb250ZW50KGkuX2NvbnRlbnQsbiksciYmYS52YWx1ZSl7aWYoIXMmJiFjKXtsZXQgZj0ocCxkLHtpdGVtOmd9KT0+dGhpcy5fX3NldFRleHRDb250ZW50KHAsdGhpcy5nZXQocixnKSk7dGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcih2b2lkIDAsZixhLnZhbHVlKX0hbCYmIXUmJiFoJiZpJiZuIT09bnVsbCYmdGhpcy5fX3NldFRleHRDb250ZW50KGkuX2NvbnRlbnQsdGhpcy5fZ2VuZXJhdGVIZWFkZXIocikpfWkmJnRoaXMuX2dyaWQuX191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KGkucGFyZW50RWxlbWVudCl9X19zZXRUZXh0Q29udGVudChyLG4pe3IudGV4dENvbnRlbnQhPT1uJiYoci50ZXh0Q29udGVudD1uKX1fZ2VuZXJhdGVIZWFkZXIocil7cmV0dXJuIHIuc3Vic3RyKHIubGFzdEluZGV4T2YoIi4iKSsxKS5yZXBsYWNlKC8oW0EtWl0pL2csIi0kMSIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvLS9nLCIgIikucmVwbGFjZSgvXi4vLG49Pm4udG9VcHBlckNhc2UoKSl9X3RvZ2dsZUF0dHJpYnV0ZShyLG4saSl7aS5oYXNBdHRyaWJ1dGUocik9PT0hbiYmKG4/aS5zZXRBdHRyaWJ1dGUociwiIik6aS5yZW1vdmVBdHRyaWJ1dGUocikpfV9yZW9yZGVyU3RhdHVzQ2hhbmdlZChyKXt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc2V0QXR0cmlidXRlKCJyZW9yZGVyLXN0YXR1cyIscikpfV9yZXNpemFibGVDaGFuZ2VkKHIsbil7cj09PXZvaWQgMHx8bj09PXZvaWQgMHx8biYmW25dLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzKS5mb3JFYWNoKGk9PntpZihpKXtsZXQgbz1pLnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0fj0icmVzaXplLWhhbmRsZSJdJyk7aWYobyYmaS5yZW1vdmVDaGlsZChvKSxyKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTthLnNldEF0dHJpYnV0ZSgicGFydCIsInJlc2l6ZS1oYW5kbGUiKSxpLmFwcGVuZENoaWxkKGEpfX19KX1fdGV4dEFsaWduQ2hhbmdlZChyKXtpZihyPT09dm9pZCAwKXJldHVybjtpZihbInN0YXJ0IiwiZW5kIiwiY2VudGVyIl0uaW5kZXhPZihyKT09PS0xKXtjb25zb2xlLndhcm4oJ3RleHRBbGlnbiBjYW4gb25seSBiZSBzZXQgYXMgInN0YXJ0IiwgImVuZCIgb3IgImNlbnRlciInKTtyZXR1cm59bGV0IG47Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9ncmlkKS5kaXJlY3Rpb249PT0ibHRyIj9yPT09InN0YXJ0Ij9uPSJsZWZ0IjpyPT09ImVuZCImJihuPSJyaWdodCIpOnI9PT0ic3RhcnQiP249InJpZ2h0IjpyPT09ImVuZCImJihuPSJsZWZ0IiksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChpPT57aS5fY29udGVudC5zdHlsZS50ZXh0QWxpZ249cixnZXRDb21wdXRlZFN0eWxlKGkuX2NvbnRlbnQpLnRleHRBbGlnbiE9PXImJihpLl9jb250ZW50LnN0eWxlLnRleHRBbGlnbj1uKX0pfV9oaWRkZW5DaGFuZ2VkKHIpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgiaGlkZGVuIixyKSwhIXIhPSEhdGhpcy5fcHJldmlvdXNIaWRkZW4mJnRoaXMuX2dyaWQmJihyPT09ITAmJnRoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+e24uX2NvbnRlbnQucGFyZW50Tm9kZSYmbi5fY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4uX2NvbnRlbnQpfSksdGhpcy5fZ3JpZC5fZGVib3VuY2VySGlkZGVuQ2hhbmdlZD1zci5kZWJvdW5jZSh0aGlzLl9ncmlkLl9kZWJvdW5jZXJIaWRkZW5DaGFuZ2VkLE5pLCgpPT57dGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fcmVuZGVyQ29sdW1uVHJlZSYmdGhpcy5fZ3JpZC5fcmVuZGVyQ29sdW1uVHJlZSh0aGlzLl9ncmlkLl9jb2x1bW5UcmVlKX0pLHRoaXMuX2dyaWQuX3VwZGF0ZUxhc3RGcm96ZW4mJnRoaXMuX2dyaWQuX3VwZGF0ZUxhc3RGcm96ZW4oKSx0aGlzLl9ncmlkLm5vdGlmeVJlc2l6ZSYmdGhpcy5fZ3JpZC5ub3RpZnlSZXNpemUoKSx0aGlzLl9ncmlkLl9yZXNldEtleWJvYXJkTmF2aWdhdGlvbiYmdGhpcy5fZ3JpZC5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKSksdGhpcy5fcHJldmlvdXNIaWRkZW49cn19LHRWPWNsYXNzIGV4dGVuZHMgbmhyKEtIKG10KSl7c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZC1jb2x1bW4ifXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnt3aWR0aDp7dHlwZTpTdHJpbmcsdmFsdWU6IjEwMHB4In0sZmxleEdyb3c6e3R5cGU6TnVtYmVyLHZhbHVlOjF9LHJlbmRlcmVyOkZ1bmN0aW9uLHBhdGg6e3R5cGU6U3RyaW5nfSxhdXRvV2lkdGg6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2JvZHlUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LF9jZWxsczpBcnJheX19fTtjdXN0b21FbGVtZW50cy5kZWZpbmUodFYuaXMsdFYpO2pjKCJ2YWFkaW4tZ3JpZCIsQ2lgCiAgICBAa2V5ZnJhbWVzIHZhYWRpbi1ncmlkLWFwcGVhciB7CiAgICAgIHRvIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICB9CgogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgYW5pbWF0aW9uOiAxbXMgdmFhZGluLWdyaWQtYXBwZWFyOwogICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2Nyb2xsZXIgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICB3aWR0aDogYXV0bzsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgIH0KCiAgICA6aG9zdChbaGVpZ2h0LWJ5LXJvd3NdKSB7CiAgICAgIGhlaWdodDogYXV0bzsKICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgZmxleC1ncm93OiAwOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICA6aG9zdChbaGVpZ2h0LWJ5LXJvd3NdKSAjc2Nyb2xsZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgI3RhYmxlIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgLyogV29ya2Fyb3VuZCBmb3IgYSBEZXNrdG9wIFNhZmFyaSBidWc6IG5ldyBzdGFja2luZyBjb250ZXh0IGhlcmUgcHJldmVudHMgdGhlIHNjcm9sbGJhciBmcm9tIGdldHRpbmcgaGlkZGVuICovCiAgICAgIHotaW5kZXg6IDA7CiAgICB9CgogICAgI2hlYWRlciwKICAgICNmb290ZXIgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5OwogICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICBsZWZ0OiAwOwogICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIHotaW5kZXg6IDE7CiAgICB9CgogICAgI2hlYWRlciB7CiAgICAgIHRvcDogMDsKICAgIH0KCiAgICB0aCB7CiAgICAgIHRleHQtYWxpZ246IGluaGVyaXQ7CiAgICB9CgogICAgLyogU2FmYXJpIGRvZXNuJ3Qgd29yayB3aXRoICJpbmhlcml0IiAqLwogICAgW3NhZmFyaV0gdGggewogICAgICB0ZXh0LWFsaWduOiBpbml0aWFsOwogICAgfQoKICAgICNmb290ZXIgewogICAgICBib3R0b206IDA7CiAgICB9CgogICAgI2l0ZW1zIHsKICAgICAgZmxleC1ncm93OiAxOwogICAgICBmbGV4LXNocmluazogMDsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTsKICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGxlZnQ6IDA7CiAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J10gewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgbWFyZ2luOiAwOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bbG9hZGluZ10gW3BhcnR+PSdib2R5LWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgI2l0ZW1zIFtwYXJ0fj0ncm93J10gewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB9CgogICAgI2l0ZW1zIFtwYXJ0fj0ncm93J106ZW1wdHkgewogICAgICBoZWlnaHQ6IDFlbTsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBmbGV4LXNocmluazogMDsKICAgICAgZmxleC1ncm93OiAxOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBwYWRkaW5nOiAwOwogICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgfQoKICAgIFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10gewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgIFtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgIFtmcm96ZW5dIHsKICAgICAgei1pbmRleDogMjsKICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgIH0KCiAgICBbbm8tc2Nyb2xsYmFyc11bc2FmYXJpXSAjdGFibGUsCiAgICBbbm8tc2Nyb2xsYmFyc11bZmlyZWZveF0gI3RhYmxlIHsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAvKiBSZW9yZGVyaW5nIHN0eWxlcyAqLwogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSwKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ10sCiAgICAjc2Nyb2xsZXJbbm8tY29udGVudC1wb2ludGVyLWV2ZW50c10gW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICBbcGFydH49J3Jlb3JkZXItZ2hvc3QnXSB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgb3BhY2l0eTogMC41OwoKICAgICAgLyogUHJldmVudCBvdmVyZmxvd2luZyB0aGUgZ3JpZCBpbiBGaXJlZm94ICovCiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogMDsKICAgIH0KCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIHsKICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB9CgogICAgLyogUmVzaXppbmcgc3R5bGVzICovCiAgICBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgIHotaW5kZXg6IDE7CiAgICB9CgogICAgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgY29udGVudDogJyc7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgd2lkdGg6IDM1cHg7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIH0KCiAgICBbbGFzdC1jb2x1bW5dIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUsCiAgICBbbGFzdC1mcm96ZW5dIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUgewogICAgICB3aWR0aDogMThweDsKICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICByaWdodDogMDsKICAgIH0KCiAgICAjc2Nyb2xsZXJbY29sdW1uLXJlc2l6aW5nXSB7CiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB9CgogICAgLyogU2l6ZXIgc3R5bGVzICovCiAgICAjc2l6ZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ11baGlkZGVuXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ10gewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgbWluLWhlaWdodDogMCAhaW1wb3J0YW50OwogICAgICBtYXgtaGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgI3NpemVyIFtwYXJ0fj0nY2VsbCddOjpiZWZvcmUgewogICAgICBjb250ZW50OiAnLSc7CiAgICB9CgogICAgI3NpemVyIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIFJUTCBzcGVjaWZpYyBzdHlsZXMgKi8KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgI2l0ZW1zLAogICAgOmhvc3QoW2Rpcj0ncnRsJ10pICNoZWFkZXIsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgI2Zvb3RlciB7CiAgICAgIGxlZnQ6IGF1dG87CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgbGVmdDogYXV0bzsKICAgICAgcmlnaHQ6IDA7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddIHsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IGF1dG87CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUgewogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNTAlKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtY29sdW1uXSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlLAogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtsYXN0LWZyb3plbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHJpZ2h0OiBhdXRvOwogICAgfQogIGAse21vZHVsZUlkOiJ2YWFkaW4tZ3JpZC1zdHlsZXMifSk7dmFyIGlocj0oKCk9Pnt0cnl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJUb3VjaEV2ZW50IiksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSkoKSxlVj1jbGFzcyBleHRlbmRzIFpIKGpIKFhjZShHY2UoJGNlKHFjZShRY2UodHVlKGV1ZShKY2UoaXVlKFVjZShaY2UoYXVlKFdjZShLY2UobnVlKHJ1ZShRSCkpKSkpKSkpKSkpKSkpKSkpKXtzdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIFFgCiAgICAgIDxkaXYKICAgICAgICBpZD0ic2Nyb2xsZXIiCiAgICAgICAgc2FmYXJpJD0iW1tfc2FmYXJpXV0iCiAgICAgICAgaW9zJD0iW1tfaW9zXV0iCiAgICAgICAgbG9hZGluZyQ9IltbbG9hZGluZ11dIgogICAgICAgIGNvbHVtbi1yZW9yZGVyaW5nLWFsbG93ZWQkPSJbW2NvbHVtblJlb3JkZXJpbmdBbGxvd2VkXV0iCiAgICAgID4KICAgICAgICA8dGFibGUgaWQ9InRhYmxlIiByb2xlPSJncmlkIiBhcmlhLW11bHRpc2VsZWN0YWJsZT0idHJ1ZSIgdGFiaW5kZXg9IjAiPgogICAgICAgICAgPGNhcHRpb24gaWQ9InNpemVyIiBwYXJ0PSJyb3ciPjwvY2FwdGlvbj4KICAgICAgICAgIDx0aGVhZCBpZD0iaGVhZGVyIiByb2xlPSJyb3dncm91cCI+PC90aGVhZD4KICAgICAgICAgIDx0Ym9keSBpZD0iaXRlbXMiIHJvbGU9InJvd2dyb3VwIj48L3Rib2R5PgogICAgICAgICAgPHRmb290IGlkPSJmb290ZXIiIHJvbGU9InJvd2dyb3VwIj48L3Rmb290PgogICAgICAgIDwvdGFibGU+CgogICAgICAgIDxkaXYgcGFydD0icmVvcmRlci1naG9zdCI+PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBpZD0iZm9jdXNleGl0IiB0YWJpbmRleD0iMCI+PC9kaXY+CiAgICBgfXN0YXRpYyBnZXQgaXMoKXtyZXR1cm4idmFhZGluLWdyaWQifXN0YXRpYyBnZXQgdmVyc2lvbigpe3JldHVybiIyMC4wLjIifXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfY29sdW1uVHJlZUNoYW5nZWQoX2NvbHVtblRyZWUsIF9jb2x1bW5UcmVlLiopIl19c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue19zYWZhcmk6e3R5cGU6Qm9vbGVhbix2YWx1ZTovXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfSxfaW9zOnt0eXBlOkJvb2xlYW4sdmFsdWU6L2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF3aW5kb3cuTVNTdHJlYW18fG5hdmlnYXRvci5wbGF0Zm9ybT09PSJNYWNJbnRlbCImJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cz4xfSxfZmlyZWZveDp7dHlwZTpCb29sZWFuLHZhbHVlOm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJmaXJlZm94Iik+LTF9LF9hbmRyb2lkOnt0eXBlOkJvb2xlYW4sdmFsdWU6L2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfSxfdG91Y2hEZXZpY2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTppaHJ9LGhlaWdodEJ5Um93czp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX2hlaWdodEJ5Um93c0NoYW5nZWQifSxfcmVjYWxjdWxhdGVDb2x1bW5XaWR0aE9uY2VMb2FkaW5nRmluaXNoZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbmVuZCIsdGhpcy5fb25BbmltYXRpb25FbmQpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuKXtzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pLHQ9PT0iZGlyIiYmKHRoaXMuX19pc1JUTD1uPT09InJ0bCIsdGhpcy5fdXBkYXRlU2Nyb2xsZXJNZWFzdXJlbWVudHMoKSl9X19oYXNSb3dzV2l0aENsaWVudEhlaWdodCgpe3JldHVybiEhQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcih0PT50LmNsaWVudEhlaWdodCkubGVuZ3RofV9faXRlbXNSZWNlaXZlZCgpe3RoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkJiYhdGhpcy5fY2FjaGUuaXNMb2FkaW5nKCkmJnRoaXMuX19oYXNSb3dzV2l0aENsaWVudEhlaWdodCgpJiYodGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aE9uY2VMb2FkaW5nRmluaXNoZWQ9ITEsdGhpcy5yZWNhbGN1bGF0ZUNvbHVtbldpZHRocygpKX1fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aHModCl7dC5mb3JFYWNoKHI9PntyLndpZHRoPSJhdXRvIixyLl9vcmlnRmxleEdyb3c9ci5mbGV4R3JvdyxyLmZsZXhHcm93PTB9KSx0LmZvckVhY2gocj0+e3IuX2N1cnJlbnRXaWR0aD0wLHIuX2FsbENlbGxzLmZvckVhY2gobj0+e2xldCBpPW4ub2Zmc2V0V2lkdGgrMTtyLl9jdXJyZW50V2lkdGg9TWF0aC5tYXgoci5fY3VycmVudFdpZHRoLGkpfSl9KSx0LmZvckVhY2gocj0+e3Iud2lkdGg9YCR7ci5fY3VycmVudFdpZHRofXB4YCxyLmZsZXhHcm93PXIuX29yaWdGbGV4R3JvdyxyLl9jdXJyZW50V2lkdGg9dm9pZCAwLHIuX29yaWdGbGV4R3Jvdz12b2lkIDB9KX1yZWNhbGN1bGF0ZUNvbHVtbldpZHRocygpe2lmKCEhdGhpcy5fY29sdW1uVHJlZSlpZih0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKSl0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZD0hMDtlbHNle2xldCB0PXRoaXMuX2dldENvbHVtbnMoKS5maWx0ZXIocj0+IXIuaGlkZGVuJiZyLmF1dG9XaWR0aCk7dGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aHModCl9fV9jcmVhdGVTY3JvbGxlclJvd3ModCl7bGV0IHI9W107Zm9yKGxldCBuPTA7bjx0O24rKyl7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtpLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLGkuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy5fY29sdW1uVHJlZSYmdGhpcy5fdXBkYXRlUm93KGksdGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXSwiYm9keSIsITEsITApLHIucHVzaChpKX1yZXR1cm4gdGhpcy5fY29sdW1uVHJlZSYmdGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXS5mb3JFYWNoKG49Pm4uaXNDb25uZWN0ZWQmJm4ubm90aWZ5UGF0aCYmbi5ub3RpZnlQYXRoKCJfY2VsbHMuKiIsbi5fY2VsbHMpKSxtZ3QodGhpcywoKT0+e3RoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpLHRoaXMuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCl9KSxyfV9nZXRSb3dUYXJnZXQoKXtyZXR1cm4gdGhpcy4kLml0ZW1zfV9jcmVhdGVDZWxsKHQpe2xldCByPXRoaXMuX2NvbnRlbnRJbmRleD10aGlzLl9jb250ZW50SW5kZXgrMXx8MCxuPSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQtIityLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmFhZGluLWdyaWQtY2VsbC1jb250ZW50Iik7aS5zZXRBdHRyaWJ1dGUoInNsb3QiLG4pO2xldCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7by5pZD1uLnJlcGxhY2UoIi1jb250ZW50LSIsIi0iKSxvLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLG8uc2V0QXR0cmlidXRlKCJyb2xlIix0PT09InRkIj8iZ3JpZGNlbGwiOiJjb2x1bW5oZWFkZXIiKTtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzbG90Iik7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJuYW1lIixuKSxvLmFwcGVuZENoaWxkKGEpLG8uX2NvbnRlbnQ9aSxpLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PntpZih3aW5kb3cuY2hyb21lKXtsZXQgcz0oKT0+e2kuY29udGFpbnModGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQpfHxvLmZvY3VzKCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscywhMCl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHMsITApfWVsc2Ugc2V0VGltZW91dCgoKT0+e2kuY29udGFpbnModGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQpfHxvLmZvY3VzKCl9KX0pLG99X3VwZGF0ZVJvdyh0LHIsbixpLG8pe249bnx8ImJvZHkiO2xldCBhPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2gocz0+cy5fdmFjYW50PSEwKSx0LmlubmVySFRNTD0iIix0LmlkIT09InNpemVyIiYmKHQuaGlkZGVuPSEwKSxyLmZpbHRlcihzPT4hcy5oaWRkZW4pLmZvckVhY2goKHMsbCxjKT0+e2xldCB1O2lmKG49PT0iYm9keSIpe2lmKHMuX2NlbGxzPXMuX2NlbGxzfHxbXSx1PXMuX2NlbGxzLmZpbHRlcihoPT5oLl92YWNhbnQpWzBdLHV8fCh1PXRoaXMuX2NyZWF0ZUNlbGwoInRkIikscy5fY2VsbHMucHVzaCh1KSksdS5zZXRBdHRyaWJ1dGUoInBhcnQiLCJjZWxsIGJvZHktY2VsbCIpLHQuYXBwZW5kQ2hpbGQodSksbD09PWMubGVuZ3RoLTEmJih0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGV8fHRoaXMucm93RGV0YWlsc1JlbmRlcmVyKSl7dGhpcy5fZGV0YWlsc0NlbGxzPXRoaXMuX2RldGFpbHNDZWxsc3x8W107bGV0IGg9dGhpcy5fZGV0YWlsc0NlbGxzLmZpbHRlcihmPT5mLl92YWNhbnQpWzBdfHx0aGlzLl9jcmVhdGVDZWxsKCJ0ZCIpO3RoaXMuX2RldGFpbHNDZWxscy5pbmRleE9mKGgpPT09LTEmJnRoaXMuX2RldGFpbHNDZWxscy5wdXNoKGgpLGguX2NvbnRlbnQucGFyZW50RWxlbWVudHx8YS5hcHBlbmRDaGlsZChoLl9jb250ZW50KSx0aGlzLl9jb25maWd1cmVEZXRhaWxzQ2VsbChoKSx0LmFwcGVuZENoaWxkKGgpLHRoaXMuX2ExMXlTZXRSb3dEZXRhaWxzQ2VsbCh0LGgpLGguX3ZhY2FudD0hMX1zLm5vdGlmeVBhdGgmJiFvJiZzLm5vdGlmeVBhdGgoIl9jZWxscy4qIixzLl9jZWxscyl9ZWxzZXtsZXQgaD1uPT09ImhlYWRlciI/InRoIjoidGQiO2l8fHMubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI/KHU9c1tgXyR7bn1DZWxsYF18fHRoaXMuX2NyZWF0ZUNlbGwoaCksdS5fY29sdW1uPXMsdC5hcHBlbmRDaGlsZCh1KSxzW2BfJHtufUNlbGxgXT11KToocy5fZW1wdHlDZWxscz1zLl9lbXB0eUNlbGxzfHxbXSx1PXMuX2VtcHR5Q2VsbHMuZmlsdGVyKGY9PmYuX3ZhY2FudClbMF18fHRoaXMuX2NyZWF0ZUNlbGwoaCksdS5fY29sdW1uPXMsdC5hcHBlbmRDaGlsZCh1KSxzLl9lbXB0eUNlbGxzLmluZGV4T2YodSk9PT0tMSYmcy5fZW1wdHlDZWxscy5wdXNoKHUpKSx1LnNldEF0dHJpYnV0ZSgicGFydCIsYGNlbGwgJHtufS1jZWxsYCksdGhpcy5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkodCl9dS5fY29udGVudC5wYXJlbnRFbGVtZW50fHxhLmFwcGVuZENoaWxkKHUuX2NvbnRlbnQpLHUuX3ZhY2FudD0hMSx1Ll9jb2x1bW49c30pLHRoaXMuYXBwZW5kQ2hpbGQoYSksdGhpcy5fZnJvemVuQ2VsbHNDaGFuZ2VkKCksdGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHQpfV9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eSh0KXtpZighdClyZXR1cm47bGV0IHI9QXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5maWx0ZXIobj0+e2xldCBpPW4uX2NvbHVtbjtpZihpLl9lbXB0eUNlbGxzJiZpLl9lbXB0eUNlbGxzLmluZGV4T2Yobik+LTEpcmV0dXJuITE7aWYodC5wYXJlbnRFbGVtZW50PT09dGhpcy4kLmhlYWRlcil7aWYoaS5oZWFkZXJSZW5kZXJlcnx8aS5faGVhZGVyVGVtcGxhdGUpcmV0dXJuITA7aWYoaS5oZWFkZXI9PT1udWxsKXJldHVybiExO2lmKGkucGF0aHx8aS5oZWFkZXIhPT12b2lkIDApcmV0dXJuITB9ZWxzZSBpZihpLmZvb3RlclJlbmRlcmVyfHxpLl9mb290ZXJUZW1wbGF0ZSlyZXR1cm4hMH0pO3QuaGlkZGVuIT09IXIubGVuZ3RoJiYodC5oaWRkZW49IXIubGVuZ3RoLHRoaXMubm90aWZ5UmVzaXplKCkpfV91cGRhdGVTY3JvbGxlckl0ZW0odCxyKXt0aGlzLl9wcmV2ZW50U2Nyb2xsZXJSb3RhdGluZ0NlbGxGb2N1cyh0LHIpLHRoaXMuX2NvbHVtblRyZWUmJih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZpcnN0IixyPT09MCx0KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm9kZCIsciUyLHQpLHRoaXMuX2ExMXlVcGRhdGVSb3dSb3dpbmRleCh0LHIpLHRoaXMuX2dldEl0ZW0ocix0KSl9X2NvbHVtblRyZWVDaGFuZ2VkKHQpe3RoaXMuX3JlbmRlckNvbHVtblRyZWUodCksdGhpcy5yZWNhbGN1bGF0ZUNvbHVtbldpZHRocygpfV9yZW5kZXJDb2x1bW5UcmVlKHQpe2ZvcihBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChyPT50aGlzLl91cGRhdGVSb3cocix0W3QubGVuZ3RoLTFdLG51bGwsITEsITApKTt0aGlzLiQuaGVhZGVyLmNoaWxkcmVuLmxlbmd0aDx0Lmxlbmd0aDspe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7ci5zZXRBdHRyaWJ1dGUoInBhcnQiLCJyb3ciKSxyLnNldEF0dHJpYnV0ZSgicm9sZSIsInJvdyIpLHRoaXMuJC5oZWFkZXIuYXBwZW5kQ2hpbGQocik7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtuLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLG4uc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy4kLmZvb3Rlci5hcHBlbmRDaGlsZChuKX1mb3IoO3RoaXMuJC5oZWFkZXIuY2hpbGRyZW4ubGVuZ3RoPnQubGVuZ3RoOyl0aGlzLiQuaGVhZGVyLnJlbW92ZUNoaWxkKHRoaXMuJC5oZWFkZXIuZmlyc3RFbGVtZW50Q2hpbGQpLHRoaXMuJC5mb290ZXIucmVtb3ZlQ2hpbGQodGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZCk7QXJyYXkuZnJvbSh0aGlzLiQuaGVhZGVyLmNoaWxkcmVuKS5mb3JFYWNoKChyLG4pPT50aGlzLl91cGRhdGVSb3cocix0W25dLCJoZWFkZXIiLG49PT10Lmxlbmd0aC0xKSksQXJyYXkuZnJvbSh0aGlzLiQuZm9vdGVyLmNoaWxkcmVuKS5mb3JFYWNoKChyLG4pPT50aGlzLl91cGRhdGVSb3cocix0W3QubGVuZ3RoLTEtbl0sImZvb3RlciIsbj09PTApKSx0aGlzLl91cGRhdGVSb3codGhpcy4kLnNpemVyLHRbdC5sZW5ndGgtMV0pLHRoaXMuX3Jlc2l6ZUhhbmRsZXIoKSx0aGlzLl9mcm96ZW5DZWxsc0NoYW5nZWQoKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW4oKSx0aGlzLl9yZXNldEtleWJvYXJkTmF2aWdhdGlvbigpLHRoaXMuX2ExMXlVcGRhdGVIZWFkZXJSb3dzKCksdGhpcy5fYTExeVVwZGF0ZUZvb3RlclJvd3MoKSx0aGlzLl9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKX1fX3VwZGF0ZUZvb3RlclBvc2l0aW9uaW5nKCl7dGhpcy5fZmlyZWZveCYmKHRoaXMuJC5pdGVtcy5zdHlsZS5wYWRkaW5nQm90dG9tPTAsdGhpcy5oZWlnaHRCeVJvd3N8fCh0aGlzLiQuaXRlbXMuc3R5bGUucGFkZGluZ0JvdHRvbT1gJHt0aGlzLiQuZm9vdGVyLm9mZnNldEhlaWdodH1weGApKSx0aGlzLl9pb3MmJiF3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsInN0aWNreSIpJiYodGhpcy4kLnRhYmxlLnN0eWxlLmhlaWdodD0iIix0aGlzLiQudGFibGUuc3R5bGUubWluSGVpZ2h0PSIxMDAlIix0aGlzLiQudGFibGUuc3R5bGUubWF4SGVpZ2h0PSIxMDAlIixzZXRUaW1lb3V0KCgpPT50aGlzLiQudGFibGUuc3R5bGUuaGVpZ2h0PWAke3RoaXMuJC5zY3JvbGxlci5vZmZzZXRIZWlnaHR9cHhgKSl9X3VwZGF0ZUl0ZW0odCxyKXt0Ll9pdGVtPXI7bGV0IG49dGhpcy5fX2dldFJvd01vZGVsKHQpO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2VsZWN0ZWQiLG4uc2VsZWN0ZWQsdCksdGhpcy5fYTExeVVwZGF0ZVJvd1NlbGVjdGVkKHQsbi5zZWxlY3RlZCksdGhpcy5fYTExeVVwZGF0ZVJvd0xldmVsKHQsbi5sZXZlbCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJleHBhbmRlZCIsbi5leHBhbmRlZCx0KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRldGFpbHMtb3BlbmVkIix0aGlzLl9pc0RldGFpbHNPcGVuZWQociksdCksKHRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZXx8dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpJiZ0aGlzLl90b2dnbGVEZXRhaWxzQ2VsbCh0LHIpLHRoaXMuX2dlbmVyYXRlQ2VsbENsYXNzTmFtZXModCxuKSx0aGlzLl9maWx0ZXJEcmFnQW5kRHJvcCh0LG4pLEFycmF5LmZyb20odC5jaGlsZHJlbikuZm9yRWFjaChpPT57aWYoaS5fcmVuZGVyZXIpe2xldCBvPWkuX2NvbHVtbnx8dGhpcztpLl9yZW5kZXJlci5jYWxsKG8saS5fY29udGVudCxvLG4pfWVsc2UgaS5faW5zdGFuY2UmJihpLl9pbnN0YW5jZS5fX2RldGFpbHNPcGVuZWRfXz1uLmRldGFpbHNPcGVuZWQsaS5faW5zdGFuY2UuX19zZWxlY3RlZF9fPW4uc2VsZWN0ZWQsaS5faW5zdGFuY2UuX19sZXZlbF9fPW4ubGV2ZWwsaS5faW5zdGFuY2UuX19leHBhbmRlZF9fPW4uZXhwYW5kZWQsaS5faW5zdGFuY2Uuc2V0UHJvcGVydGllcyhuKSl9KSx0aGlzLl9kZWJvdW5jZXJVcGRhdGVIZWlnaHRzPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlclVwZGF0ZUhlaWdodHMsbW8uYWZ0ZXIoMSksKCk9Pnt0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcG9zaXRpb25JdGVtcygpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpfSl9X3Jlc2l6ZUhhbmRsZXIoKXt0aGlzLl91cGRhdGVEZXRhaWxzQ2VsbEhlaWdodHMoKSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSShzdXBlci5fcmVzaXplSGFuZGxlciwhMCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJNZWFzdXJlbWVudHMoKSx0aGlzLl9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKX1fb25BbmltYXRpb25FbmQodCl7dC5hbmltYXRpb25OYW1lLmluZGV4T2YoInZhYWRpbi1ncmlkLWFwcGVhciIpPT09MCYmKHRoaXMuX3JlbmRlcigpLHQuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9faXRlbXNSZWNlaXZlZCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuX19zY3JvbGxUb1BlbmRpbmdJbmRleCgpLHRoaXMuJC50YWJsZS5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz0idG91Y2gifSkpfV90b2dnbGVBdHRyaWJ1dGUodCxyLG4pe24uaGFzQXR0cmlidXRlKHQpPT09IXImJihyP24uc2V0QXR0cmlidXRlKHQsIiIpOm4ucmVtb3ZlQXR0cmlidXRlKHQpKX1fX2dldFJvd01vZGVsKHQpe3JldHVybntpbmRleDp0LmluZGV4LGl0ZW06dC5faXRlbSxsZXZlbDp0aGlzLl9nZXRJbmRleExldmVsKHQuaW5kZXgpLGV4cGFuZGVkOnRoaXMuX2lzRXhwYW5kZWQodC5faXRlbSksc2VsZWN0ZWQ6dGhpcy5faXNTZWxlY3RlZCh0Ll9pdGVtKSxkZXRhaWxzT3BlbmVkOiEhKHRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZXx8dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQodC5faXRlbSl9fXJlbmRlcigpe3RoaXMuX2NvbHVtblRyZWUmJih0aGlzLl9jb2x1bW5UcmVlLmZvckVhY2godD0+e3QuZm9yRWFjaChyPT5yLl9yZW5kZXJIZWFkZXJBbmRGb290ZXIoKSl9KSx0aGlzLl91cGRhdGUoKSl9bm90aWZ5UmVzaXplKCl7c3VwZXIubm90aWZ5UmVzaXplKCl9X2hlaWdodEJ5Um93c0NoYW5nZWQodCxyKXsodHx8cikmJnRoaXMubm90aWZ5UmVzaXplKCl9X19mb3JjZVJlZmxvdygpe3RoaXMuX2RlYm91bmNlckZvcmNlUmVmbG93PXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlckZvcmNlUmVmbG93LE5pLCgpPT57dGhpcy4kLnNjcm9sbGVyLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLHNldFRpbWVvdXQoKCk9PnRoaXMuJC5zY3JvbGxlci5zdHlsZS5vdmVyZmxvdz0iIil9KX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShlVi5pcyxlVik7ZnVuY3Rpb24gc3VlKGUsdCl7cmV0dXJuIE5ndChlLHQpfXZhciBjdj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9ydW49IiJ9X2NzdlVybCh0LHIsbil7cmV0dXJuIHI/Q24obih0LHIpLHtmb3JtYXQ6ImNzdiJ9KToiIn1fanNvblVybCh0LHIsbil7cmV0dXJuIHI/bih0LHIpOiIifV9jc3ZOYW1lKHQscil7cmV0dXJuIHI/YHJ1bi0ke3J9LXRhZy0ke3R9LmNzdmA6IiJ9X2pzb25OYW1lKHQscil7cmV0dXJuIHI/YHJ1bi0ke3J9LXRhZy0ke3R9Lmpzb25gOiIifX07Y3YudGVtcGxhdGU9UWAKICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICBsYWJlbD0icnVuIHRvIGRvd25sb2FkIgogICAgICBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e19ydW59fSIKICAgID4KICAgICAgPHBhcGVyLWxpc3Rib3ggc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tydW5zXV0iPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcnVuXV0iPgogICAgICA8YSBkb3dubG9hZD0iW1tfY3N2TmFtZSh0YWcsIF9ydW4pXV0iIGhyZWY9IltbX2NzdlVybCh0YWcsIF9ydW4sIHVybEZuKV1dIgogICAgICAgID5DU1Y8L2EKICAgICAgPjwhLS0KICAgICAgLS0+PGEKICAgICAgICBkb3dubG9hZD0iW1tfanNvbk5hbWUodGFnLCBfcnVuKV1dIgogICAgICAgIGhyZWY9IltbX2pzb25VcmwodGFnLCBfcnVuLCB1cmxGbildXSIKICAgICAgICA+SlNPTjwvYQogICAgICA+CiAgICA8L3RlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgYSB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbjogMCAwLjJlbTsKICAgICAgfQogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sY3YucHJvdG90eXBlLCJfcnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxjdi5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sY3YucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY3YucHJvdG90eXBlLCJ1cmxGbiIsdm9pZCAwKTtjdj1FKFt5dCgidGYtZG93bmxvYWRlciIpXSxjdik7dmFyIG9ocj02NCxwbGk9bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKSxXbj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bnVsbCx0aGlzLl9sb2FkRGF0YUNhbGxiYWNrPSh0LHIsbik9PntpZihuPT1udWxsKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gbG9hZCBkYXRhIGZvcjoiLHIpO3JldHVybn1sZXQgaT1uLm1hcChhPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShhWzBdKjFlMyksc3RlcDphWzFdLHNjYWxhcjphWzJdfSkpLG89dGhpcy5fZ2V0U2VyaWVzTmFtZUZyb21EYXR1bShyKTt0LnNldFNlcmllc01ldGFkYXRhKG8sciksdC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuZ2V0RGF0YUxvYWRVcmw9KHt0YWc6dCxydW46cn0pPT52ZSgpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3NjYWxhcnMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzp0LHJ1bjpyfSkpLHRoaXMuX2Rvd25sb2FkVXJsRm49KHQscik9PnRoaXMuZ2V0RGF0YUxvYWRVcmwoe3RhZzp0LHJ1bjpyfSksdGhpcy5yZXF1ZXN0RGF0YT0odCxyLG4pPT50aGlzLmluQ29sYWI/dGhpcy5fcmVxdWVzdERhdGFHZXQodCxyLG4pOnRoaXMuX3JlcXVlc3REYXRhUG9zdCh0LHIsbiksdGhpcy5fcmVxdWVzdERhdGFHZXQ9KHQscixuKT0+e2xldCBvPXZlKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLCIvc2NhbGFycyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1DbihvLHt0YWc6YS50YWcscnVuOmEucnVufSk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChzKS50aGVuKGw9PnZvaWQgcih7aXRlbTphLGRhdGE6bH0pKX0pKS5maW5hbGx5KCgpPT52b2lkIG4oKSl9LHRoaXMuX3JlcXVlc3REYXRhUG9zdD0odCxyLG4pPT57dmFyIGM7bGV0IG89dmUoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi9zY2FsYXJzX211bHRpcnVuIiksYT1uZXcgTWFwO2ZvcihsZXR7dGFnOnUscnVuOmh9b2YgdCl7bGV0IGY9YS5nZXQodSk7Zj09bnVsbCYmYS5zZXQodSxmPVtdKSxmLnB1c2goaCl9bGV0IHM9KGM9dGhpcy5iYXRjaFNpemUpIT1udWxsP2M6b2hyLGw9W107Zm9yKGxldFt1LGhdb2YgYSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrPXMpbC5wdXNoKHt0YWc6dSxydW5zOmguc2xpY2UoZixmK3MpfSk7UHJvbWlzZS5hbGwobC5tYXAoKHt0YWc6dSxydW5zOmh9KT0+dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KG8se3RhZzp1LHJ1bnM6aH0pLnRoZW4oZj0+e2ZvcihsZXQgcCBvZiBoKXtsZXQgZD17dGFnOnUscnVuOnB9O09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLHApP3Ioe2l0ZW06ZCxkYXRhOmZbcF19KTpyKHtpdGVtOmQsZGF0YTpudWxsfSl9fSkpKS5maW5hbGx5KCgpPT52b2lkIG4oKSl9LHRoaXMuX2dldERhdGFMb2FkTmFtZT10PT50aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHQpLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PW9zdC5zbGljZSgpLHI9dC5maW5kSW5kZXgobj0+bi50aXRsZT09Ik5hbWUiKTtyZXR1cm4gdC5zcGxpY2UociwxLHt0aXRsZToiTmFtZSIsZXZhbHVhdGU6bj0+e2xldCBpPW4uZGF0YXNldC5tZXRhZGF0YSgpLm1ldGE7cmV0dXJuIHRoaXMuX2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKGkpfX0pLHR9KSgpfV9nZXRDaGFydERhdGFMb2FkZXIoKXt2YXIgdDtyZXR1cm4odD10aGlzLnNoYWRvd1Jvb3QpPT1udWxsP3ZvaWQgMDp0LnF1ZXJ5U2VsZWN0b3IoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKX1yZWxvYWQoKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7bGV0IHQ9dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7dCYmdC5yZXNldERvbWFpbigpfV91cGRhdGVEb3dubG9hZExpbmsoKXt2YXIgbjtsZXQgdD10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5leHBvcnRBc1N2Z1N0cmluZygpLHI9KG49dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6bi5xdWVyeVNlbGVjdG9yKCIjc3ZnTGluayIpO3IuaHJlZj1gZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwke2J0b2EodCl9YH1fcnVuc0Zyb21EYXRhKHQpe3JldHVybiB0Lm1hcChyPT5yLnJ1bil9X2dldERhdGFTZXJpZXMoKXtyZXR1cm4gdGhpcy5kYXRhVG9Mb2FkLm1hcCh0PT50aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHQpKX1fZ2V0U2VyaWVzTmFtZUZyb21EYXR1bSh7cnVuOnQsZXhwZXJpbWVudDpyPXtuYW1lOiJfZGVmYXVsdCJ9fSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFtyLm5hbWUsdF0pfV9nZXRTZXJpZXNEaXNwbGF5TmFtZUZyb21EYXR1bSh0KXtyZXR1cm4gdC5ydW59X2dldENvbG9yU2NhbGUoKXtyZXR1cm4gdGhpcy5jb2xvclNjYWxlIT09bnVsbD90aGlzLmNvbG9yU2NhbGU6e3NjYWxlOnQ9PntsZXRbLHJdPUpTT04ucGFyc2UodCk7cmV0dXJuIGZuKHIpfX19fTtXbi50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tfZ2V0Q29sb3JTY2FsZShjb2xvclNjYWxlKV1dIgogICAgICAgIGRhdGEtc2VyaWVzPSJbW19nZXREYXRhU2VyaWVzKGRhdGFUb0xvYWQuKildXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbZGF0YVRvTG9hZF1dIgogICAgICAgIGdldC1kYXRhLWxvYWQtbmFtZT0iW1tfZ2V0RGF0YUxvYWROYW1lXV0iCiAgICAgICAgZ2V0LWRhdGEtbG9hZC11cmw9IltbZ2V0RGF0YUxvYWRVcmxdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbcmVxdWVzdERhdGFdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2xvYWREYXRhQ2FsbGJhY2tdXSIKICAgICAgICBsb2FkLWtleT0iW1t0YWddXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHRhZy1tZXRhZGF0YT0iW1t0YWdNZXRhZGF0YV1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIKICAgICAgICB0b29sdGlwLXBvc2l0aW9uPSJhdXRvIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxwYXBlci1tZW51LWJ1dHRvbiBvbi1wYXBlci1kcm9wZG93bi1vcGVuPSJfdXBkYXRlRG93bmxvYWRMaW5rIj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tdHJpZ2dlciIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tdHJpZ2dlciIKICAgICAgICAgICAgaWNvbj0iZmlsZS1kb3dubG9hZCIKICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICA8cGFwZXItaXRlbT4KICAgICAgICAgICAgICA8YSBpZD0ic3ZnTGluayIgZG93bmxvYWQ9IltbdGFnXV0uc3ZnIj4KICAgICAgICAgICAgICAgIERvd25sb2FkIEN1cnJlbnQgQ2hhcnQgYXMgU1ZHCiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgPC9wYXBlci1tZW51LWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHRmLWRvd25sb2FkZXIKICAgICAgICAgICAgcnVucz0iW1tfcnVuc0Zyb21EYXRhKGRhdGFUb0xvYWQpXV0iCiAgICAgICAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgICAgICAgdXJsLWZuPSJbW19kb3dubG9hZFVybEZuXV0iCiAgICAgICAgICA+PC90Zi1kb3dubG9hZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXJnaW46IDVweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzMwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSAjdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIgewogICAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIH0KCiAgICAgICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgdGYtY2FyZC1oZWFkaW5nIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CgogICAgICAjYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBhIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbjogMnB4OwogICAgICB9CgogICAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgd2lkdGg6IDEwMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICB9CgogICAgICBwYXBlci1tZW51LWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQogICAgICBwYXBlci1pdGVtIGEgewogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV24ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFduLnByb3RvdHlwZSwiZGF0YVRvTG9hZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxXbi5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sV24ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxXbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLFduLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxXbi5wcm90b3R5cGUsInNob3dEb3duTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxXbi5wcm90b3R5cGUsInNtb290aGluZ0VuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sV24ucHJvdG90eXBlLCJzbW9vdGhpbmdXZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV24ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXbi5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV24ucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxXbi5wcm90b3R5cGUsImJhdGNoU2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sV24ucHJvdG90eXBlLCJpbkNvbGFiIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFduLnByb3RvdHlwZSwiX2xvYWREYXRhQ2FsbGJhY2siLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxXbi5wcm90b3R5cGUsImdldERhdGFMb2FkVXJsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFduLnByb3RvdHlwZSwiX2Rvd25sb2FkVXJsRm4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxXbi5wcm90b3R5cGUsInJlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFduLnByb3RvdHlwZSwiX2dldERhdGFMb2FkTmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxXbi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFduLnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxXbi5wcm90b3R5cGUsIl90b29sdGlwQ29sdW1ucyIsdm9pZCAwKTtXbj1FKFt5dCgidGYtc2NhbGFyLWNhcmQiKV0sV24pO3ZhciBWcz1jbGFzcyBleHRlbmRzIHN1ZShbdVddLG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZXNzaW9uR3JvdXA9bnVsbCx0aGlzLl94VHlwZT1FZC5TVEVQLHRoaXMuX25vTXVsdGlFeHBlcmltZW50cz0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57UHJvbWlzZS5hbGwodC5tYXAoaT0+e2xldCBvPXtleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lLHNlc3Npb25OYW1lOmkucnVuLG1ldHJpY05hbWU6aS50YWd9O3JldHVybiB0aGlzLmJhY2tlbmQubGlzdE1ldHJpY0V2YWxzKG8pLnRoZW4oYT0+dm9pZCByKHtpdGVtOmksZGF0YTphfSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fY29sb3JTY2FsZT17c2NhbGU6dD0+e2xldCByPUpTT04ucGFyc2UodClbMV0sbj10aGlzLl9pbmRleE9mU2Vzc2lvbi5nZXQociksaT1uUjtyZXR1cm4gaVsodGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2grbiklaS5sZW5ndGhdfX19Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMucmVkcmF3LmJpbmQodGhpcykpfXJlZHJhdygpe3ZhciB0Oyh0PXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntyLnJlZHJhdygpfSl9X3Nlc3Npb25Hcm91cENoYW5nZWQoKXt2YXIgdDshdGhpcy5zZXNzaW9uR3JvdXB8fE9iamVjdC5rZXlzKHRoaXMuc2Vzc2lvbkdyb3VwKS5sZW5ndGg9PTA/KHRoaXMuX2luZGV4T2ZTZXNzaW9uPW5ldyBNYXAsdGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2g9MCk6KHRoaXMuX2luZGV4T2ZTZXNzaW9uPW5ldyBNYXAodGhpcy5zZXNzaW9uR3JvdXAuc2Vzc2lvbnMubWFwKChyLG4pPT5bci5uYW1lLG5dKSksdGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2g9bWN0KHRoaXMuc2Vzc2lvbkdyb3VwLm5hbWUpKSwodD10aGlzLnNoYWRvd1Jvb3QpPT1udWxsfHx0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXNjYWxhci1jYXJkIikuZm9yRWFjaChyPT57bGV0IG49cixpPW4uZ2V0KCJ0YWciKTtuLnNldCgidGFnIiwiIiksbi5zZXQoInRhZyIsaSl9KX1faGF2ZU1ldHJpY3MoKXtyZXR1cm4gdGhpcy52aXNpYmxlU2NoZW1hJiZBcnJheS5pc0FycmF5KHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcykmJnRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGg+MH1faGF2ZU1ldHJpY3NBbmRTZXNzaW9uR3JvdXAoKXtyZXR1cm4gdGhpcy5zZXNzaW9uR3JvdXAmJnRoaXMuX2hhdmVNZXRyaWNzKCl9X2NvbXB1dGVTZXJpZXNGb3JTZXNzaW9uR3JvdXBNZXRyaWModCxyKXtyZXR1cm4gdD09PW51bGx8fE9iamVjdC5rZXlzKHQpLmxlbmd0aD09MHx8cj09PW51bGw/W106dC5zZXNzaW9ucy5maWx0ZXIobj0+ZjMobi5tZXRyaWNWYWx1ZXMsci5uYW1lKSE9PXZvaWQgMCkubWFwKG49Pih7dGFnOnIubmFtZSxydW46bi5uYW1lfSkpfV9jb21wdXRlVGFnTWV0YWRhdGEodCl7cmV0dXJue2Rpc3BsYXlOYW1lOlF1KHQpLGRlc2NyaXB0aW9uOnQuZGVzY3JpcHRpb258fCIifX19O1ZzLnRlbXBsYXRlPVFgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIXNlc3Npb25Hcm91cF1dIj4KICAgICAgPGRpdj4KICAgICAgICA8aDM+Tm8gc2Vzc2lvbiBncm91cCBzZWxlY3RlZDwvaDM+CiAgICAgICAgPHA+UGxlYXNlIHNlbGVjdCBhIHNlc3Npb24gZ3JvdXAgdG8gc2VlIGl0cyBtZXRyaWMtZ3JhcGhzIGhlcmUuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9oYXZlTWV0cmljcyh2aXNpYmxlU2NoZW1hLiopXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBtZXRyaWNzIGFyZSBlbmFibGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2UgZW5hYmxlIHNvbWUgbWV0cmljcyB0byBzZWUgY29udGVudCBoZXJlLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcz0ibGF5b3V0IGhvcml6b250YWwgd3JhcCBzZXNzaW9uLWdyb3VwLWRldGFpbHMiPgogICAgICA8dGVtcGxhdGUKICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgIGlmPSJbW19oYXZlTWV0cmljc0FuZFNlc3Npb25Hcm91cCh2aXNpYmxlU2NoZW1hLiosIHNlc3Npb25Hcm91cCldXSIKICAgICAgPgogICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICBpdGVtcz0iW1t2aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zXV0iCiAgICAgICAgICBhcz0ibWV0cmljSW5mbyIKICAgICAgICA+CiAgICAgICAgICA8IS0tIE5vdGUgdGhhdCB3ZSBkbyBub3QgcHJvdmlkZSBhIHJlcXVlc3QtbWFuYWdlciBhdHRyaWJ1dGUgc2luY2UKICAgICAgICAgICAgICAgd2UgcHJvdmlkZSBhIGZ1bmN0aW9uIGluIHJlcXVlc3QtZGF0YSBmb3IgY2FsbGluZyB0aGUgYmFja2VuZAogICAgICAgICAgICAgICB0byBnZXQgdGhlIG1ldHJpY3MgZGF0YS4KICAgICAgICAgICAgLS0+CiAgICAgICAgICA8dGYtc2NhbGFyLWNhcmQKICAgICAgICAgICAgY2xhc3M9InNjYWxhci1jYXJkIgogICAgICAgICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZV1dIgogICAgICAgICAgICBkYXRhLXRvLWxvYWQ9IltbX2NvbXB1dGVTZXJpZXNGb3JTZXNzaW9uR3JvdXBNZXRyaWMoc2Vzc2lvbkdyb3VwLCBtZXRyaWNJbmZvKV1dIgogICAgICAgICAgICB0YWc9IltbbWV0cmljSW5mby5uYW1lLnRhZ11dIgogICAgICAgICAgICB0YWctbWV0YWRhdGE9IltbX2NvbXB1dGVUYWdNZXRhZGF0YShtZXRyaWNJbmZvKV1dIgogICAgICAgICAgICB4LXR5cGU9IltbX3hUeXBlXV0iCiAgICAgICAgICAgIG11bHRpLWV4cGVyaW1lbnRzPSJbW19ub011bHRpRXhwZXJpbWVudHNdXSIKICAgICAgICAgICAgcmVxdWVzdC1kYXRhPSJbW19yZXF1ZXN0RGF0YV1dIgogICAgICAgICAgICBhY3RpdmUKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtc2NhbGFyLWNhcmQ+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPCEtLSAiaXJvbi1mbGV4IiBpcyBuZWVkZWQgdG8gdXNlIHRoZSBsYXlvdXQgY2xhc3NlcyBpbiB0aGUgZGl2IGFib3ZlIC0tPgogICAgPHN0eWxlIGluY2x1ZGU9Imlyb24tZmxleCI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxWcy5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxWcy5wcm90b3R5cGUsInNlc3Npb25Hcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxWcy5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFZzLnByb3RvdHlwZSwiX25vTXVsdGlFeHBlcmltZW50cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxWcy5wcm90b3R5cGUsIl9pbmRleE9mU2Vzc2lvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxWcy5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBOYW1lSGFzaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFZzLnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQnQoInNlc3Npb25Hcm91cC4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxWcy5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBDaGFuZ2VkIixudWxsKTtWcz1FKFt5dCgidGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMiKV0sVnMpO3ZhciBIZD1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2hwYXJhbU5hbWU9RmQsdGhpcy5fbWV0cmljTmFtZT1RdX1fdmlzaWJsZVNjaGVtYU9yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXtsZXQgdD10aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLmdldCgiZGV0YWlsc09wZW5lZEl0ZW1zIik7dGhpcy4kLnNlc3Npb25Hcm91cHNUYWJsZS5zZXQoImRldGFpbHNPcGVuZWRJdGVtcyIsW10pLHVpKCk7bGV0IHI9bmV3IE1hcDt0aGlzLnNlc3Npb25Hcm91cHMuZm9yRWFjaChuPT57ci5zZXQobi5uYW1lLG4pfSksdGhpcy4kLnNlc3Npb25Hcm91cHNUYWJsZS5zZXQoImRldGFpbHNPcGVuZWRJdGVtcyIsdC5tYXAobj0+ci5nZXQobi5uYW1lKSkuZmlsdGVyKEJvb2xlYW4pKX1fc2Vzc2lvbkdyb3VwSFBhcmFtKHQscil7cmV0dXJuIHQ9PW51bGx8fE9iamVjdC5rZXlzKHQpLmxlbmd0aD09MHx8IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LmhwYXJhbXMscik/IiI6YjAodC5ocGFyYW1zW3JdKX1fc2Vzc2lvbkdyb3VwTWV0cmljKHQscil7aWYodD09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wKXJldHVybiIiO2ZvcihsZXQgbj0wO248dC5tZXRyaWNWYWx1ZXMubGVuZ3RoOysrbil7bGV0IGk9dC5tZXRyaWNWYWx1ZXNbbl07aWYoaS5uYW1lLmdyb3VwPT09ci5ncm91cCYmaS5uYW1lLnRhZz09ci50YWcpcmV0dXJuIGIwKGkudmFsdWUpfXJldHVybiIifV9yb3dOdW1iZXIodCl7cmV0dXJuIHQrMX19O0hkLnRlbXBsYXRlPVFgCiAgICA8dmFhZGluLWdyaWQKICAgICAgY2xhc3M9InNlc3Npb24tZ3JvdXAtdGFibGUiCiAgICAgIGlkPSJzZXNzaW9uR3JvdXBzVGFibGUiCiAgICAgIGNvbHVtbi1yZW9yZGVyaW5nLWFsbG93ZWQ9IiIKICAgICAgaXRlbXM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgPgogICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMCIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT0iIj4KICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+VHJpYWwgSUQ8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPltbaXRlbS5uYW1lXV08L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2VuYWJsZVNob3dNZXRyaWNzXV0iPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIwIiBhdXRvV2lkdGg9IiIgcmVzaXphYmxlPSIiPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+U2hvdyBNZXRyaWNzPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2xhc3M9InRhYmxlLWNlbGwiIGNoZWNrZWQ9Int7ZGV0YWlsc09wZW5lZH19Ij4KICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgIGl0ZW1zPSJbW3Zpc2libGVTY2hlbWEuaHBhcmFtSW5mb3NdXSIKICAgICAgICBhcz0iaHBhcmFtSW5mbyIKICAgICAgICBpbmRleC1hcz0iaHBhcmFtSW5kZXgiCiAgICAgID4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMiIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT0iIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX2hwYXJhbU5hbWUoaHBhcmFtSW5mbyldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX3Nlc3Npb25Hcm91cEhQYXJhbShpdGVtLCBocGFyYW1JbmZvLm5hbWUpXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUKICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICBpdGVtcz0ie3t2aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zfX0iCiAgICAgICAgYXM9Im1ldHJpY0luZm8iCiAgICAgICAgaW5kZXgtYXM9Im1ldHJpY0luZGV4IgogICAgICA+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjIiIHdpZHRoPSIxMGVtIiByZXNpemFibGU9IiI+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19tZXRyaWNOYW1lKG1ldHJpY0luZm8pXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19zZXNzaW9uR3JvdXBNZXRyaWMoaXRlbSwgbWV0cmljSW5mby5uYW1lKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGNsYXNzPSJyb3ctZGV0YWlscyI+CiAgICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzCiAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgc2Vzc2lvbi1ncm91cD0iW1tpdGVtXV0iCiAgICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1t2aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgICBjbGFzcz0ic2Vzc2lvbi1ncm91cC1kZXRhaWxzIgogICAgICAgID4KICAgICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgICA8L3RlbXBsYXRlPgogICAgPC92YWFkaW4tZ3JpZD4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHsKICAgICAgICAtLWx1bW8tYmFzZS1jb2xvcjogIzMwMzAzMDsKICAgICAgICAtLWx1bW8tYm9keS10ZXh0LWNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB2YWFkaW4tZ3JpZCB7CiAgICAgICAgLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3I6ICM1MDUwNTA7CiAgICAgIH0KCiAgICAgIC50YWJsZS1jZWxsIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLnRhYmxlLWhlYWRlciB7CiAgICAgICAgLyogbGluZS1icmVhayBvdmVyZmxvd2luZyBjb2x1bW4gaGVhZGVycyAqLwogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAuc2Vzc2lvbi1ncm91cC10YWJsZSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zZXNzaW9uLWdyb3VwLWRldGFpbHMgewogICAgICAgIGhlaWdodDogMzYwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhkLnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSGQucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSGQucHJvdG90eXBlLCJlbmFibGVTaG93TWV0cmljcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIZC5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSGQucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtCdCgidmlzaWJsZVNjaGVtYS4qIiwic2Vzc2lvbkdyb3Vwcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIZC5wcm90b3R5cGUsIl92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCIsbnVsbCk7SGQ9RShbeXQoInRmLWhwYXJhbXMtdGFibGUtdmlldyIpXSxIZCk7dmFyIFRQPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2Vzc2lvbkdyb3VwPW51bGwsdGhpcy52aXNpYmxlU2NoZW1hPW51bGx9X3Byb3BlcnRpZXNBcmVQb3B1bGF0ZWQodCxyKXtyZXR1cm4gdCE9bnVsbCYmciE9PXZvaWQgMCYmciE9PW51bGx9X3NpbmdsZXRvblNlc3Npb25Hcm91cHModCl7cmV0dXJuIHQ9PW51bGw/W106W3RdfX07VFAudGVtcGxhdGU9UWAKICAgIDwhLS0gSWYgc2Vzc2lvbkdyb3VwIG9yIHZpc2libGVTY2hlbWEgYXJlIG5vdCBwb3B1bGF0ZWQsIGRvIG5vdCBkaXNwbGF5CiAgICAgICAgIGFueXRoaW5nLgogICAgICAtLT4KICAgIDx0ZW1wbGF0ZQogICAgICBpcz0iZG9tLWlmIgogICAgICBpZj0iW1tfcHJvcGVydGllc0FyZVBvcHVsYXRlZCh2aXNpYmxlU2NoZW1hLCBzZXNzaW9uR3JvdXApXV0iCiAgICA+CiAgICAgIDwhLS0gRGlzcGxheSBvbmUgcm93IHdpdGhvdXQgYSAic2hvdy1tZXRyaWNzIiBjb2x1bW4gLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXRhYmxlLXZpZXcKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1t2aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9IltbX3NpbmdsZXRvblNlc3Npb25Hcm91cHMoc2Vzc2lvbkdyb3VwKV1dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy10YWJsZS12aWV3PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZQogICAgICBpcz0iZG9tLWlmIgogICAgICBpZj0iW1shX3Byb3BlcnRpZXNBcmVQb3B1bGF0ZWQodmlzaWJsZVNjaGVtYSwgc2Vzc2lvbkdyb3VwKV1dIgogICAgPgogICAgICA8ZGl2PkNsaWNrIG9yIGhvdmVyIG92ZXIgYSBzZXNzaW9uIGdyb3VwIHRvIGRpc3BsYXkgaXRzIHZhbHVlcyBoZXJlLjwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFRQLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFRQLnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKTtUUD1FKFt5dCgidGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcyIpXSxUUCk7dmFyIENQPUVlKE9lKCksMSk7ZnVuY3Rpb24gbHVlKGUsdCxyLG4pe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIkxlc3MgdGhhbiB0d28gYXhlcyBpbiBwYXJhbGxlbCBjb29yZGluYXRlcyBwbG90LiIpLG51bGw7bGV0IGk9clswXSxvPXJbMV07aWYoaTw9dFswXXx8aT49dFt0Lmxlbmd0aC0xXSlyZXR1cm4gbnVsbDtsZXQgYT1DUC5zb3J0ZWRJbmRleCh0LGkpO2NvbnNvbGUuYXNzZXJ0KGE+MCksY29uc29sZS5hc3NlcnQoYTx0Lmxlbmd0aCk7bGV0IHM9YS0xO2Z1bmN0aW9uIGwoaCxmLHAsZCl7bGV0IGc9aC1wLF89Zi1kLHk9aS1wLHg9by1kLGI9KGcqeStfKngpLyhnKmcrXypfKTtpZihiPD0wKXJldHVybiBwMyh5LHgpO2lmKGI+PTEpe2xldCBTPWgtaSxDPWYtbztyZXR1cm4gcDMoUyxDKX1yZXR1cm4gcDMoeS1iKmcseC1iKl8pfWxldCBjPW51bGwsdT1udWxsO3JldHVybiBlLmZvckVhY2goaD0+e2xldCBmPWwoaC5jb250cm9sUG9pbnRzW3NdWzBdLGguY29udHJvbFBvaW50c1tzXVsxXSxoLmNvbnRyb2xQb2ludHNbYV1bMF0saC5jb250cm9sUG9pbnRzW2FdWzFdKTtmPm58fChjPT09bnVsbHx8ZjxjKSYmKGM9Zix1PWgpfSksdX1mdW5jdGlvbiBjdWUoZSx0LHIpe3JldHVybiBlLmRvbWFpbigpLmZpbHRlcihuPT57bGV0IGk9ZShuKTtyZXR1cm4gdDw9aSYmaTw9cn0pfWZ1bmN0aW9uIHV1ZShlLHQscil7bGV0IG49ZS5yYW5nZSgpLGk9bi5maWx0ZXIobz0+dDw9byYmbzw9cikubWFwKG89PntsZXQgYT1lLmludmVydEV4dGVudChvKTtyZXR1cm4gbz09PW5bbi5sZW5ndGgtMV0/W2FbMF0sYVsxXSsxXTphfSk7cmV0dXJuIGkubGVuZ3RoPT0wP1swLDBdOmFhKEltKGkpKX1mdW5jdGlvbiBodWUoZSx0LHIpe3JldHVybltlLmludmVydCh0KSxlLmludmVydChyKV0uc29ydCgobixpKT0+bi1pKX1mdW5jdGlvbiBCY3QoZSx0LHIpe2Z1bmN0aW9uIG4oKXtpZihlLmxlbmd0aD09PTApcmV0dXJuWzEsMl07bGV0W2ksb109YWEoZSk7cmV0dXJuIGkhPT1vP1tpLG9dOmk+MD9baSouNSxpKjEuNV06aTwwP1tpKjEuNSxpKi41XTpbLTEsMV19aWYocj09PSJMSU5FQVIiKXJldHVybiB6bigpLmRvbWFpbihuKCkpLnJhbmdlKFt0LDBdKTtpZihyPT09IkxPRyIpe2xldCBpPW4oKTtyZXR1cm4gaVswXTw9MCYmaVsxXT49MD9CY3QoZSx0LCJMSU5FQVIiKTpjYygpLmRvbWFpbihpKS5yYW5nZShbdCwwXSl9ZWxzZSBpZihyPT09IlFVQU5USUxFIil7bGV0IG89SXIoMjApLm1hcChhPT50LWEqdC8xOSk7cmV0dXJuIGUubGVuZ3RoPT09MCYmKGU9WzFdKSxlZygpLmRvbWFpbihDUC51bmlxKGUpKS5yYW5nZShvKX1lbHNle2lmKHI9PT0iTk9OX05VTUVSSUMiKXJldHVybiB0ZygpLmRvbWFpbihDUC51bmlxKGUuc29ydCgpKSkucmFuZ2UoW3QsMF0pLnBhZGRpbmcoLjEpO3Rocm93IFJhbmdlRXJyb3IoIlVua25vd24gc2NhbGU6ICIrcil9fXZhciB1djsoZnVuY3Rpb24oZSl7ZS5MSU5FQVI9IkxJTkVBUiIsZS5MT0c9IkxPRyIsZS5RVUFOVElMRT0iUVVBTlRJTEUiLGUuTk9OX05VTUVSSUM9Ik5PTl9OVU1FUklDIn0pKHV2fHwodXY9e30pKTt2YXIgQVA9Y2xhc3N7aXNQYXNzaW5nKHQpe3JldHVybiEwfX0sclY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5fbG93ZXI9dCx0aGlzLl91cHBlcj1yLHRoaXMuX2xvd2VyT3Blbj1uLHRoaXMuX3VwcGVyT3Blbj1pfWlzUGFzc2luZyh0KXtsZXQgcj10O3JldHVybiB0aGlzLl9iZWZvcmUodGhpcy5fbG93ZXIsciwhdGhpcy5fbG93ZXJPcGVuKSYmdGhpcy5fYmVmb3JlKHIsdGhpcy5fdXBwZXIsIXRoaXMuX3VwcGVyT3Blbil9X2JlZm9yZSh0LHIsbil7cmV0dXJuIG4/dDw9cjp0PHJ9fSxWY3Q9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZG9tYWluU2V0PXR9aXNQYXNzaW5nKHQpe3JldHVybiB0aGlzLl9kb21haW5TZXQuZmluZEluZGV4KHI9PnI9PT10KSE9PS0xfX0sVWN0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGkpe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyPW4sdGhpcy5fY29sSW5kZXg9aSx0aGlzLl9pc0Rpc3BsYXllZD0hMSx0aGlzLl95U2NhbGU9bnVsbCx0aGlzLl9zY2FsZVR5cGU9bnVsbCx0aGlzLnNldEJydXNoU2VsZWN0aW9uKG51bGwpfWNvbEluZGV4KCl7cmV0dXJuIHRoaXMuX2NvbEluZGV4fXlTY2FsZSgpe3JldHVybiB0aGlzLl95U2NhbGV9c2NhbGVUeXBlKCl7cmV0dXJuIHRoaXMuX3NjYWxlVHlwZX1icnVzaFNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9icnVzaFNlbGVjdGlvbn1pc0Rpc3BsYXllZCgpe3JldHVybiB0aGlzLl9pc0Rpc3BsYXllZH1zZXRCcnVzaFNlbGVjdGlvbih0KXt0aGlzLl9icnVzaFNlbGVjdGlvbj10LHRoaXMuX2JydXNoRmlsdGVyPXRoaXMuX2J1aWxkQnJ1c2hGaWx0ZXIodGhpcy5icnVzaFNlbGVjdGlvbigpLHRoaXMuc2NhbGVUeXBlKCksdGhpcy55U2NhbGUoKSl9c2V0RG9tYWluQW5kU2NhbGUodCxyKXt0aGlzLl9zY2FsZVR5cGU9cix0aGlzLl95U2NhbGU9QmN0KHQuc2xpY2UoKSx0aGlzLl9zdmdQcm9wcy5oZWlnaHQsdGhpcy5zY2FsZVR5cGUoKSksdGhpcy5fYnJ1c2hGaWx0ZXI9dGhpcy5fYnVpbGRCcnVzaEZpbHRlcih0aGlzLmJydXNoU2VsZWN0aW9uKCksdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1icnVzaEZpbHRlcigpe3JldHVybiB0aGlzLl9icnVzaEZpbHRlcn11cGRhdGVET00odCl7bGV0IHI9bGIodGhpcy55U2NhbGUoKSk7dGhpcy5zY2FsZVR5cGUoKT09PXV2LlFVQU5USUxFJiYocj1yLnRpY2tWYWx1ZXModGhpcy55U2NhbGUoKS5xdWFudGlsZXMoKSkudGlja0Zvcm1hdCh4bigiLS42ZyIpKSk7bGV0IG49SHQodCk7bi5zZWxlY3RBbGwoImciKS5yZW1vdmUoKSxuLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXMiLCEwKS5jYWxsKHIpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImF4aXMtdGl0bGUiLCEwKS5zdHlsZSgiY3Vyc29yIiwibW92ZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoInkiLC05KS50ZXh0KGE9PnVjdCh0aGlzLl9zY2hlbWEsYSkpLG4uY2FsbChwYigpLm9uKCJzdGFydCIsKCk9Pnt0LnNldEF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciLCIiKSx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnU3RhcnQodGhpcy5jb2xJbmRleCgpKX0pLm9uKCJkcmFnIiwoKT0+dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uRHJhZyhxdC54KSkub24oImVuZCIsKCk9Pnt0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnRW5kKCksdC5yZW1vdmVBdHRyaWJ1dGUoImlzLWRyYWdnaW5nIil9KSk7bGV0IGk9VUwoKS5leHRlbnQoW1stOCwwXSxbOCx0aGlzLl9zdmdQcm9wcy5oZWlnaHQrMV1dKS5vbigic3RhcnQiLCgpPT57IUhjdChxdCl8fCh0LnNldEF0dHJpYnV0ZSgiaXMtYnJ1c2hpbmciLCIiKSx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLHF0LnNlbGVjdGlvbikpfSkub24oImJydXNoIiwoKT0+eyFIY3QocXQpfHx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLHF0LnNlbGVjdGlvbil9KS5vbigiZW5kIiwoKT0+eyFIY3QocXQpfHwodGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uQnJ1c2hDaGFuZ2VkKHRoaXMuY29sSW5kZXgoKSxxdC5zZWxlY3Rpb24pLHQucmVtb3ZlQXR0cmlidXRlKCJpcy1icnVzaGluZyIpKX0pLG89SHQodCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYnJ1c2giLCEwKTtvLmNhbGwoaSksaS5tb3ZlKG8sdGhpcy5icnVzaFNlbGVjdGlvbigpKX1zZXREaXNwbGF5ZWQodCl7dGhpcy5faXNEaXNwbGF5ZWQ9dH1fYnVpbGRCcnVzaEZpbHRlcih0LHIsbil7aWYodD09PW51bGwpcmV0dXJuIG5ldyBBUDtpZihyPT09bnVsbClyZXR1cm4gY29uc29sZS5lcnJvcigiU2NhbGUgdHlwZSBpcyBudWxsLCBidXQgYnJ1c2hTZWxlY3Rpb24gaXNuJ3Q6ICIsdCksbmV3IEFQO3N3aXRjaChyKXtjYXNlIHV2LkxJTkVBUjpjYXNlIHV2LkxPRzp7bGV0W2ksb109aHVlKG4sdFswXSx0WzFdKTtyZXR1cm4gbmV3IHJWKGksbywhMSwhMSl9Y2FzZSB1di5RVUFOVElMRTp7bGV0W2ksb109dXVlKG4sdFswXSx0WzFdKTtyZXR1cm4gbmV3IHJWKGksbywhMSwhMCl9Y2FzZSB1di5OT05fTlVNRVJJQzpyZXR1cm4gbmV3IFZjdChjdWUobix0WzBdLHRbMV0pKX1yZXR1cm4gY29uc29sZS5lcnJvcigiVW5rbm93biBzY2FsZSB0eXBlOiAiLHIpLG5ldyBBUH19LG5WPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1yLHRoaXMuX2F4ZXM9dGhpcy5fY3JlYXRlQXhlcyhuKSx0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucz10ZygpLnJhbmdlKFsxLHRoaXMuX3N2Z1Byb3BzLndpZHRoLTFdKS5wYWRkaW5nKC41KSx0aGlzLl9kcmFnZ2VkQXhpcz1udWxsLHRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCJnLmF4aXMtcGFyZW50IikucmVtb3ZlKCksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiLmF4aXMtcGFyZW50Iil9dXBkYXRlQXhlcyh0LHIpe2NvbnNvbGUuYXNzZXJ0KCF0aGlzLmlzQXhpc0RyYWdnaW5nKCkpO2xldCBuPW5ldyBTZXQ7dC5jb2x1bW5zLmZvckVhY2gobz0+e2xldCBhPW8uYWJzb2x1dGVJbmRleCxzPXRoaXMuX2F4ZXNbYV07cy5zZXREaXNwbGF5ZWQoITApO2xldCBsPXIubWFwKGM9PngwKHRoaXMuX3NjaGVtYSxjLGEpKTtzLnNldERvbWFpbkFuZFNjYWxlKGwsby5zY2FsZSksbi5hZGQoYSl9KSx0aGlzLl9heGVzLmZvckVhY2gobz0+e24uaGFzKG8uY29sSW5kZXgoKSl8fG8uc2V0RGlzcGxheWVkKCExKX0pLHRoaXMuX3VwZGF0ZVN0YXRpb25hcnlBeGVzUG9zaXRpb25zKG4pLHRoaXMuX3BhcmVudHNTZWw9dGhpcy5fcGFyZW50c1NlbC5kYXRhKEFycmF5LmZyb20obiksbz0+byksdGhpcy5fcGFyZW50c1NlbC5leGl0KCkucmVtb3ZlKCksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9wYXJlbnRzU2VsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcy1wYXJlbnQiLCEwKS5tZXJnZSh0aGlzLl9wYXJlbnRzU2VsKTtsZXQgaT10aGlzO3RoaXMuX3BhcmVudHNTZWwuY2FsbChvPT50aGlzLl91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00obykpLmVhY2goZnVuY3Rpb24obyl7aS5fYXhlc1tvXS51cGRhdGVET00odGhpcyl9KX1tYXBWaXNpYmxlQXhlcyh0KXtyZXR1cm4gdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCkubWFwKHI9PnQodGhpcy5nZXRBeGlzUG9zaXRpb24ociksdGhpcy5fYXhlc1tyXSkpfWFsbFZpc2libGVBeGVzU2F0aXNmeSh0KXtyZXR1cm4gdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCkuZXZlcnkocj0+dCh0aGlzLmdldEF4aXNQb3NpdGlvbihyKSx0aGlzLl9heGVzW3JdKSl9Z2V0QXhpc0ZvckNvbEluZGV4KHQpe3JldHVybiB0aGlzLl9heGVzW3RdfWRyYWdTdGFydCh0KXtjb25zb2xlLmFzc2VydCghdGhpcy5pc0F4aXNEcmFnZ2luZygpKSxjb25zb2xlLmFzc2VydCh0aGlzLl9heGVzW3RdLmlzRGlzcGxheWVkKCkpLHRoaXMuX2RyYWdnZWRBeGlzPXRoaXMuX2F4ZXNbdF0sdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj10aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyh0KX1kcmFnKHQpe3Q9TWF0aC5taW4oTWF0aC5tYXgodCwwKSx0aGlzLl9zdmdQcm9wcy53aWR0aCksdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj10O2xldCByPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpO3Iuc29ydCgobixpKT0+dGhpcy5nZXRBeGlzUG9zaXRpb24obiktdGhpcy5nZXRBeGlzUG9zaXRpb24oaSkpLHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbihyKSx0aGlzLl91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00odGhpcy5fcGFyZW50c1NlbCl9ZHJhZ0VuZCh0KXtjb25zb2xlLmFzc2VydCh0aGlzLmlzQXhpc0RyYWdnaW5nKCkpLHRoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb249bnVsbCx0aGlzLl9kcmFnZ2VkQXhpcz1udWxsLHRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0KSl9aXNBeGlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5fZHJhZ2dlZEF4aXMhPT1udWxsfWdldEF4aXNQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ2dlZEF4aXMhPT1udWxsJiZ0aGlzLl9kcmFnZ2VkQXhpcy5jb2xJbmRleCgpPT09dD90aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uOnRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpfV91cGRhdGVTdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyh0KXtsZXQgcj10aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5maWx0ZXIoaT0+dC5oYXMoaSkpLG49QXJyYXkuZnJvbShuZXcgU2V0KFsuLi5yLC4uLkFycmF5LmZyb20odCldKSk7dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKG4pfV91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00odCl7dC5hdHRyKCJ0cmFuc2Zvcm0iLHI9Pl9QKHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHIpKSl9X2NyZWF0ZUF4ZXModCl7cmV0dXJuIElyKGhjdCh0aGlzLl9zY2hlbWEpKS5tYXAocj0+bmV3IFVjdCh0aGlzLl9zdmdQcm9wcyx0aGlzLl9zY2hlbWEsdCxyKSl9fTtmdW5jdGlvbiBIY3QoZSl7cmV0dXJuIGUuc291cmNlRXZlbnQhPT1udWxsfXZhciBqZjsoZnVuY3Rpb24oZSl7ZVtlLkZPUkVHUk9VTkQ9MF09IkZPUkVHUk9VTkQiLGVbZS5CQUNLR1JPVU5EPTFdPSJCQUNLR1JPVU5EIn0pKGpmfHwoamY9e30pKTt2YXIgdGg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dD09PXZvaWQgMCYmKHQ9RXAobnVsbCkpLGNvbnNvbGUuYXNzZXJ0KHQuc2l6ZSgpPD0xKSx0aGlzLl9zZXNzaW9uR3JvdXBTZWw9dH1zZXNzaW9uR3JvdXAoKXtyZXR1cm4gdGhpcy5fc2Vzc2lvbkdyb3VwU2VsLnNpemUoKT09PTE/dGhpcy5fc2Vzc2lvbkdyb3VwU2VsLmRhdHVtKCk6bnVsbH1pc051bGwoKXtyZXR1cm4gdGhpcy5zZXNzaW9uR3JvdXAoKT09PW51bGx9c2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX3Nlc3Npb25Hcm91cFNlbH1lcXVhbHNUbyh0KXt2YXIgcixuO3JldHVybiB0aGlzLmlzTnVsbCgpP3QuaXNOdWxsKCk6dC5pc051bGwoKT8hMTooKHI9dC5zZXNzaW9uR3JvdXAoKSk9PW51bGw/dm9pZCAwOnIubmFtZSk9PSgobj10aGlzLnNlc3Npb25Hcm91cCgpKT09bnVsbD92b2lkIDA6bi5uYW1lKX19LGlWPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1yLHRoaXMuX2F4ZXNDb2xsZWN0aW9uPW4sdGhpcy5fc2Vzc2lvbkdyb3Vwcz1bXSx0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5iYWNrZ3JvdW5kIikucmVtb3ZlKCksdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuZm9yZWdyb3VuZCIpLnJlbW92ZSgpLHRoaXMuX2JnUGF0aHNTZWw9dGhpcy5fc3ZnUHJvcHMuc3ZnRy5hcHBlbmQoImciKS5jbGFzc2VkKCJiYWNrZ3JvdW5kIiwhMCkuc2VsZWN0QWxsKCJwYXRoIiksdGhpcy5fZmdQYXRoc1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLmFwcGVuZCgiZyIpLmNsYXNzZWQoImZvcmVncm91bmQiLCEwKS5zZWxlY3RBbGwoInBhdGgiKSx0aGlzLl91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT1uZXcgdGgsdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9bmV3IHRoLHRoaXMuX2QzbGluZT12dSgpLmN1cnZlKFloKX1nZXRTZXNzaW9uR3JvdXBIYW5kbGUodCl7cmV0dXJuIHQ9PW51bGw/bmV3IHRoOm5ldyB0aCh0aGlzLl9mZ1BhdGhzU2VsLmZpbHRlcihyPT5yLm5hbWU9PT10Lm5hbWUpKX1oaWRlQmFja2dyb3VuZExpbmVzKCl7dGhpcy5fYmdQYXRoc1NlbC5hdHRyKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9c2hvd0JhY2tncm91bmRMaW5lcygpe3RoaXMuX2JnUGF0aHNTZWwuYXR0cigidmlzaWJpbGl0eSIsbnVsbCl9cGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCl7cmV0dXJuIHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZX1zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpe3JldHVybiB0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZX1yZWNvbXB1dGVDb250cm9sUG9pbnRzKHQscj0wKXsodD09PWpmLkZPUkVHUk9VTkQ/dGhpcy5fZmdQYXRoc1NlbDp0aGlzLl9iZ1BhdGhzU2VsKS50cmFuc2l0aW9uKCkuZHVyYXRpb24ocikuYXR0cigiZCIsaT0+dGhpcy5fcGF0aERBdHRyaWJ1dGUoaSkpLHQ9PT1qZi5GT1JFR1JPVU5EJiZ3aW5kb3cuc2V0VGltZW91dCgoKT0+e2xldCBpPXRoaXM7dGhpcy5fZmdQYXRoc1NlbC5lYWNoKGZ1bmN0aW9uKG8pe2kuX3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eSh0aGlzLG8pfSl9KX1yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCl7dGhpcy5fZmdQYXRoc1NlbC5jbGFzc2VkKCJpbnZpc2libGUtcGF0aCIsdD0+IXRoaXMuX2F4ZXNDb2xsZWN0aW9uLmFsbFZpc2libGVBeGVzU2F0aXNmeSgocixuKT0+bi5icnVzaEZpbHRlcigpLmlzUGFzc2luZyh4MCh0aGlzLl9zY2hlbWEsdCxuLmNvbEluZGV4KCkpKSkpLHRoaXMuX3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCl9c2V0Rm9yZWdyb3VuZExpbmVzQ29sb3IodCxyLG4pe2xldCBpPXRoaXMuX2NyZWF0ZUxpbmVDb2xvckZ1bmN0aW9uKHQscixuKTt0aGlzLl9mZ1BhdGhzU2VsLmF0dHIoInN0cm9rZSIsaSl9cmVkcmF3KHQscixuLGkpe2xldCBvPXRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZXNzaW9uR3JvdXAoKSxhPXRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpO3RoaXMuX3Nlc3Npb25Hcm91cHM9dCx0aGlzLl9mZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fZmdQYXRoc1NlbCksdGhpcy5fYmdQYXRoc1NlbD10aGlzLl9yZWNvbXB1dGVQYXRoU2VsZWN0aW9uKHRoaXMuX2JnUGF0aHNTZWwpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT10aGlzLmdldFNlc3Npb25Hcm91cEhhbmRsZShvKSx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZT10aGlzLmdldFNlc3Npb25Hcm91cEhhbmRsZShhKSx0aGlzLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoamYuRk9SRUdST1VORCksdGhpcy5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGpmLkJBQ0tHUk9VTkQpLHRoaXMucmVjb21wdXRlRm9yZWdyb3VuZExpbmVzVmlzaWJpbGl0eSgpLHRoaXMuc2V0Rm9yZWdyb3VuZExpbmVzQ29sb3IocixuLGkpfXVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0KXt0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgicGVha2VkLXBhdGgiLCExKSx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGU9dCx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgicGVha2VkLXBhdGgiLCEwKX1jbGVhclBlYWtlZFNlc3Npb25Hcm91cCgpe3RoaXMudXBkYXRlUGVha2VkU2Vzc2lvbkdyb3VwKG5ldyB0aCl9dXBkYXRlU2VsZWN0ZWRTZXNzaW9uR3JvdXAodCl7dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgic2VsZWN0ZWQtcGF0aCIsITEpLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXQsdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgic2VsZWN0ZWQtcGF0aCIsITApfWZpbmRDbG9zZXN0U2Vzc2lvbkdyb3VwKHQscil7bGV0IG49dGhpcy5fYXhlc0NvbGxlY3Rpb24ubWFwVmlzaWJsZUF4ZXMoKG8sYSk9Pm8pLGk9bHVlKHRoaXMuX3Zpc2libGVGZ1BhdGhzU2VsLm5vZGVzKCksbixbdCxyXSwxMDApO3JldHVybiBpPT09bnVsbD9uZXcgdGg6bmV3IHRoKEh0KGkpKX1fY3JlYXRlTGluZUNvbG9yRnVuY3Rpb24odCxyLG4pe2lmKHQ9PT1udWxsKXJldHVybigpPT4icmVkIjtsZXQgaT16bigpLmRvbWFpbihmY3QodGhpcy5fc2NoZW1hLHRoaXMuX3Nlc3Npb25Hcm91cHMsdCkpLnJhbmdlKFtyLG5dKS5pbnRlcnBvbGF0ZShNXyk7cmV0dXJuIG89PmkoeDAodGhpcy5fc2NoZW1hLG8sdCkpfV9yZWNvbXB1dGVQYXRoU2VsZWN0aW9uKHQpe3JldHVybiB0PXQuZGF0YSh0aGlzLl9zZXNzaW9uR3JvdXBzLHI9PnIubmFtZSksdC5leGl0KCkucmVtb3ZlKCksdC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLm1lcmdlKHQpfV9zZXRDb250cm9sUG9pbnRzUHJvcGVydHkodCxyKXt0LmNvbnRyb2xQb2ludHM9dGhpcy5fY29tcHV0ZUNvbnRyb2xQb2ludHMocil9X2NvbXB1dGVDb250cm9sUG9pbnRzKHQpe3JldHVybiB0aGlzLl9heGVzQ29sbGVjdGlvbi5tYXBWaXNpYmxlQXhlcygocixuKT0+W3Isbi55U2NhbGUoKSh4MCh0aGlzLl9zY2hlbWEsdCxuLmNvbEluZGV4KCkpKV0pfV9wYXRoREF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5fZDNsaW5lKHRoaXMuX2NvbXB1dGVDb250cm9sUG9pbnRzKHQpKX1fdXBkYXRlVmlzaWJsZUZnUGF0aHNTZWwoKXt0aGlzLl92aXNpYmxlRmdQYXRoc1NlbD10aGlzLl9mZ1BhdGhzU2VsLmZpbHRlcigiOm5vdCguaW52aXNpYmxlLXBhdGgpIil9fTt2YXIgb1Y9Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLnN2Zz1IdCh0KTtsZXQgbj17dG9wOjMwLHJpZ2h0OjEwLGJvdHRvbToxMCxsZWZ0OjEwfSxpPTEwMCxvPTIwMCxhPXIqaStuLmxlZnQrbi5yaWdodCxzPW8rbi50b3Arbi5ib3R0b207dGhpcy5zdmcuYXR0cigidmlld0JveCIsYDAgMCAke2F9ICR7c31gKSx0aGlzLnN2Zy5hdHRyKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQiKSx0aGlzLnN2Zy5zdHlsZSgibWluLXdpZHRoIixhKyJweCIpLHRoaXMuc3ZnLnN0eWxlKCJtaW4taGVpZ2h0IixzKyJweCIpLHRoaXMud2lkdGg9YS1uLmxlZnQtbi5yaWdodCx0aGlzLmhlaWdodD1zLW4udG9wLW4uYm90dG9tLHRoaXMuc3ZnRz10aGlzLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLF9QKG4ubGVmdCxuLnRvcCkpfX0sYVY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5fc3ZnUHJvcHM9dCx0aGlzLl9zY2hlbWE9cix0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0I9bix0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWRDQj1pLHRoaXMuX2F4ZXNDb2xsZWN0aW9uPW5ldyBuVih0LHIsdGhpcyksdGhpcy5fbGluZXNDb2xsZWN0aW9uPW5ldyBpVih0LHIsdGhpcy5fYXhlc0NvbGxlY3Rpb24pLHRoaXMuX3N2Z1Byb3BzLnN2Zy5vbigiY2xpY2siLCgpPT50aGlzLm9uQ2xpY2soKSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIiwoKT0+e2xldFtvLGFdPXpvKHRoaXMuX3N2Z1Byb3BzLnN2Z0cubm9kZSgpKTt0aGlzLm9uTW91c2VNb3ZlZChvLGEpfSkub24oIm1vdXNlbGVhdmUiLCgpPT50aGlzLm9uTW91c2VMZWF2ZSgpKX1vbkRyYWdTdGFydCh0KXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnU3RhcnQodCksdGhpcy5fbGluZXNDb2xsZWN0aW9uLmhpZGVCYWNrZ3JvdW5kTGluZXMoKX1vbkRyYWcodCl7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZHJhZyh0KSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5EKX1vbkRyYWdFbmQoKXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnRW5kKDUwMCksdGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoamYuRk9SRUdST1VORCw1MDApLHdpbmRvdy5zZXRUaW1lb3V0KCgpPT57dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoamYuQkFDS0dST1VORCksdGhpcy5fbGluZXNDb2xsZWN0aW9uLnNob3dCYWNrZ3JvdW5kTGluZXMoKX0sNTAwKX1vbkJydXNoQ2hhbmdlZCh0LHIpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmdldEF4aXNGb3JDb2xJbmRleCh0KS5zZXRCcnVzaFNlbGVjdGlvbihyKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlRm9yZWdyb3VuZExpbmVzVmlzaWJpbGl0eSgpfW9uTW91c2VNb3ZlZCh0LHIpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAodGhpcy5fbGluZXNDb2xsZWN0aW9uLmZpbmRDbG9zZXN0U2Vzc2lvbkdyb3VwKHQscikpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQih0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfW9uTW91c2VMZWF2ZSgpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5pc051bGwoKXx8KHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5jbGVhclBlYWtlZFNlc3Npb25Hcm91cCgpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQihudWxsKSl9b25DbGljaygpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKT09PXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpP3RoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cChuZXcgdGgpOnRoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKX1vbk9wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKHQscil7dGhpcy5fYXhlc0NvbGxlY3Rpb24udXBkYXRlQXhlcyh0LHIpO2xldCBuPXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSxpPXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpO3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWRyYXcocix0LmNvbG9yQnlDb2x1bW5JbmRleCE9PXZvaWQgMD90LmNvbHVtbnNbdC5jb2xvckJ5Q29sdW1uSW5kZXhdLmFic29sdXRlSW5kZXg6bnVsbCx0Lm1pbkNvbG9yLHQubWF4Q29sb3IpLG4uZXF1YWxzVG8odGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSksaS5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSl8fHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKX1zY2hlbWEoKXtyZXR1cm4gdGhpcy5fc2NoZW1hfX07dmFyIGVoPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1udWxsLHRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsLHRoaXMucmVkcmF3Q291bnQ9MH1fb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXt2YXIgbjtpZighdGhpcy5vcHRpb25zKXJldHVybjtsZXR7Y29uZmlndXJhdGlvbjp0fT0obj10aGlzLl9wcmV2T3B0aW9ucykhPW51bGw/bjp7fSx7Y29uZmlndXJhdGlvbjpyfT10aGlzLm9wdGlvbnM7aWYodGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyPT09dm9pZCAwfHwhcWN0LmlzRXF1YWwodD09bnVsbD92b2lkIDA6dC5zY2hlbWEsci5zY2hlbWEpfHwhcWN0LmlzRXF1YWwodD09bnVsbD92b2lkIDA6dC5jb2x1bW5zVmlzaWJpbGl0eSxyLmNvbHVtbnNWaXNpYmlsaXR5KSl7SHQodGhpcy4kLnN2Zykuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7bGV0IGk9bmV3IG9WKHRoaXMuJC5zdmcsci5jb2x1bW5zVmlzaWJpbGl0eS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoKTt0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQuc3ZnLCEwKSx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9bmV3IGFWKGksci5zY2hlbWEsbz0+dGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZChvKSxvPT50aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZChvKSl9dGhpcy5fY29tcHV0ZVZhbGlkU2Vzc2lvbkdyb3VwcygpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbk9wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKHRoaXMub3B0aW9ucyx0aGlzLl92YWxpZFNlc3Npb25Hcm91cHMpLHRoaXMucmVkcmF3Q291bnQrKyx0aGlzLl9wcmV2T3B0aW9ucz10aGlzLm9wdGlvbnN9Y2xvc2VzdFNlc3Npb25Hcm91cENoYW5nZWQodCl7dGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwPXR9c2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKHQpe3RoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9dH1fY29tcHV0ZVZhbGlkU2Vzc2lvbkdyb3Vwcygpe2xldCB0PWNzO2lmKHRoaXMuc2Vzc2lvbkdyb3Vwcz09PXZvaWQgMCl7dGhpcy5fdmFsaWRTZXNzaW9uR3JvdXBzPXZvaWQgMDtyZXR1cm59bGV0IHI9dGhpcy5vcHRpb25zLmNvbmZpZ3VyYXRpb24uc2NoZW1hO3RoaXMuX3ZhbGlkU2Vzc2lvbkdyb3Vwcz10aGlzLnNlc3Npb25Hcm91cHMuZmlsdGVyKG49Pntmb3IobGV0IGk9MDtpPHQubnVtQ29sdW1ucyhyKTsrK2kpaWYoISF0aGlzLm9wdGlvbnMuY29uZmlndXJhdGlvbi5jb2x1bW5zVmlzaWJpbGl0eVtpXSYmdC5jb2x1bW5WYWx1ZUJ5SW5kZXgocixuLGkpPT09dm9pZCAwKXJldHVybiExO3JldHVybiEwfSl9fTtlaC50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0iY29udGFpbmVyIj4KICAgICAgPHN2ZyBpZD0ic3ZnIj48L3N2Zz4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgLS10Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90LWF4aXMtc2hhZG93OiAwIDFweCAwICNmZmYsCiAgICAgICAgICAxcHggMCAwICNmZmYsIDAgLTFweCAwICNmZmYsIC0xcHggMCAwICNmZmY7CiAgICAgIH0KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC1heGlzLXNoYWRvdzogMCAxcHggMCAjMDAwLAogICAgICAgICAgMXB4IDAgMCAjMDAwLCAwIC0xcHggMCAjMDAwLCAtMXB4IDAgMCAjMDAwOwogICAgICB9CiAgICAgIHN2ZyB7CiAgICAgICAgZm9udDogMTBweCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuYmFja2dyb3VuZCBwYXRoIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZTogI2RkZDsKICAgICAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7CiAgICAgIH0KCiAgICAgIC5mb3JlZ3JvdW5kIHBhdGggewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuNzsKICAgICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICAgIH0KCiAgICAgIC8qIFdpbGwgYmUgc2V0IG9uIGZvcmVncm91bmQgcGF0aHMgdGhhdCBhcmUgbm90ICJjb250YWluZWQiIGluIHRoZSBjdXJyZW50CiAgICAgICAgIGF4ZXMgYnJ1c2hlcy4gSWYgbm8gYnJ1c2hlcyBhcmUgc2V0LCBubyBwYXRoIHdpbGwgaGF2ZSB0aGlzIGNsYXNzLiAqLwogICAgICAuZm9yZWdyb3VuZCAuaW52aXNpYmxlLXBhdGggewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFN0eWxlIGZvciB0aGUgcGF0aCBjbG9zZXN0IHRvIHRoZSBtb3VzZSBwb2ludGVyICh0eXBpY2FsbHkgd2lsbCBiZWNvbWUKICAgICAgdGhlIHNlbGVjdGVkIHBhdGggd2hlbiB0aGUgdXNlciBjbGlja3MpLiAqLwogICAgICAuZm9yZWdyb3VuZCAucGVha2VkLXBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgICAgfQoKICAgICAgLyogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYXRoIGNsYXNzLiBXZSB1c2UgIWltcG9ydGFudCB0byBvdmVycmlkZSB0aGUKICAgICAgICAgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBjb2xvciBvZiBhIHBhdGguICovCiAgICAgIC5mb3JlZ3JvdW5kIC5zZWxlY3RlZC1wYXRoIHsKICAgICAgICBzdHJva2Utd2lkdGg6IDMgIWltcG9ydGFudDsKICAgICAgICBzdHJva2U6ICMwZjAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI2NvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmF4aXMgdGV4dCB7CiAgICAgICAgdGV4dC1zaGFkb3c6IHZhcigtLXRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QtYXhpcy1zaGFkb3cpOwogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgICBjdXJzb3I6IG1vdmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZWgucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVoLnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJzZWxlY3RlZFNlc3Npb25Hcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJjbG9zZXN0U2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGVoLnByb3RvdHlwZSwicmVkcmF3Q291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsIl92YWxpZFNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJfaW50ZXJhY3Rpb25NYW5hZ2VyIix2b2lkIDApO0UoW0J0KCJvcHRpb25zLioiLCJzZXNzaW9uR3JvdXBzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGVoLnByb3RvdHlwZSwiX29wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkIixudWxsKTtlaD1FKFt5dCgidGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdCIpXSxlaCk7dmFyIEEwPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMub3B0aW9ucz1udWxsfV9jb25maWd1cmF0aW9uQ2hhbmdlZCgpe2xldCB0PXRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLHI9dGhpcy5jb25maWd1cmF0aW9uLnNjaGVtYSxuPShhLHMpPT4oe25hbWU6RmQoYSksaW5kZXg6cyxhYnNvbHV0ZUluZGV4Ok9IKHIsdCxzKSxzY2FsZTp0aGlzLl9pc051bWVyaWNDb2x1bW4ocyk/IkxJTkVBUiI6Ik5PTl9OVU1FUklDIn0pLGk9KGEscyk9PntsZXQgbD1zK3QuaHBhcmFtSW5mb3MubGVuZ3RoO3JldHVybntzY2FsZToiTElORUFSIixuYW1lOlF1KGEpLGluZGV4OmwsYWJzb2x1dGVJbmRleDpPSChyLHQsbCl9fSxvPXtjb2x1bW5zOnQuaHBhcmFtSW5mb3MubWFwKG4pLmNvbmNhdCh0Lm1ldHJpY0luZm9zLm1hcChpKSksbWluQ29sb3I6IiMwMDAwRkYiLG1heENvbG9yOiIjRkYwMDAwIixjb25maWd1cmF0aW9uOnRoaXMuY29uZmlndXJhdGlvbn07dGhpcy5zZXQoIm9wdGlvbnMiLG8pLHVpKCksdGhpcy5zZXQoIm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4Iix0aGlzLl9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCkpfV91bnNlbGVjdERpc2FibGVkTG9nU2NhbGVzKCl7dGhpcy5vcHRpb25zIT09bnVsbCYmdGhpcy5vcHRpb25zLmNvbHVtbnMuZm9yRWFjaCh0PT57bGV0IHI9Im9wdGlvbnMuY29sdW1ucy4iK3QuaW5kZXg7IXRoaXMuX2FsbG93TG9nU2NhbGUodCkmJnQuc2NhbGU9PT0iTE9HIiYmdGhpcy5zZXQocisiLnNjYWxlIiwiTElORUFSIil9KX1fYWxsb3dMb2dTY2FsZSh0KXtpZighdGhpcy5faXNOdW1lcmljQ29sdW1uKHQuaW5kZXgpfHwhdGhpcy5zZXNzaW9uR3JvdXBzKXJldHVybiExO2xldFtyLG5dPWdQKHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLHRoaXMuc2Vzc2lvbkdyb3Vwcyx0LmluZGV4KTtyZXR1cm4gcj4wfHxuPDB9X2lzTnVtZXJpY0NvbHVtbih0KXtyZXR1cm4gdD49dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEuaHBhcmFtSW5mb3MubGVuZ3RofHx0aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvc1t0XS50eXBlPT09IkRBVEFfVFlQRV9GTE9BVDY0In1fZGVmYXVsdENvbG9yQnlDb2x1bW5JbmRleCgpe2lmKHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aD4wKXJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5sZW5ndGg7bGV0IHQ9dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEuaHBhcmFtSW5mb3MuZmluZEluZGV4KHI9PnIudHlwZT09PSJEQVRBX1RZUEVfRkxPQVQ2NCIpO2lmKHQhPT0tMSlyZXR1cm4gdH19O0EwLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250cm9sLXBhbmVsIj4KICAgICAgPCEtLSAnQ29sb3IgYnknIGRyb3AgZG93biBtZW51IC0tPgogICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgIGxhYmVsPSJDb2xvciBieSIKICAgICAgICBpZD0iY29sb3JCeURyb3BEb3duTWVudSIKICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICA+CiAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgIHNlbGVjdGVkPSJ7e29wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4fX0iCiAgICAgICAgICBpZD0iY29sb3JCeUxpc3RCb3giCiAgICAgICAgPgogICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICBpdGVtcz0iW1tvcHRpb25zLmNvbHVtbnNdXSIKICAgICAgICAgICAgYXM9ImNvbHVtbiIKICAgICAgICAgICAgaWQ9ImNvbG9yQnlDb2x1bW5UZW1wbGF0ZSIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gZGlzYWJsZWQ9IltbIV9pc051bWVyaWNDb2x1bW4oY29sdW1uLmluZGV4KV1dIj4KICAgICAgICAgICAgICBbW2NvbHVtbi5uYW1lXV0KICAgICAgICAgICAgPC9wYXBlci1pdGVtPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KCiAgICAgIDwhLS0gQ29sdW1ucyBzY2FsZXMgLS0+CiAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMtY29udGFpbmVyIj4KICAgICAgICA8IS0tIFNjYWxlIG9wdGlvbnMgZm9yIGVhY2ggbnVtZXJpYyBmZWF0dXJlIC0tPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7b3B0aW9ucy5jb2x1bW5zfX0iIGFzPSJjb2x1bW4iPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc051bWVyaWNDb2x1bW4oY29sdW1uLmluZGV4KV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1uIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4tdGl0bGUiPltbY29sdW1uLm5hbWVdXTwvZGl2PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgICAgICAgICAgY2xhc3M9InNjYWxlLXJhZGlvLWdyb3VwIgogICAgICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tjb2x1bW4uc2NhbGV9fSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJMSU5FQVIiPgogICAgICAgICAgICAgICAgICAgIExpbmVhcgogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPCEtLSBUaGUgaWQgaGVyZSBpcyB1c2VkIHRvIGFjY2VzcyB0aGlzIGJ1dHRvbiBpbiB1bml0CiAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMuLS0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgICAgICAgICBpZD0ibG9nU2NhbGVCdXR0b25fW1tjb2x1bW4ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IkxPRyIKICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD0iW1shX2FsbG93TG9nU2NhbGUoY29sdW1uLCBzZXNzaW9uR3JvdXBzLiopXV0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICBMb2dhcml0aG1pYwogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJRVUFOVElMRSI+CiAgICAgICAgICAgICAgICAgICAgUXVhbnRpbGUKICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuY29udHJvbC1wYW5lbCB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KICAgICAgLmNvbHVtbiB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICAgIGJvcmRlcjogc29saWQgMXB4IGRhcmtncmF5OwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgfQogICAgICAuY29sdW1uLXRpdGxlIHsKICAgICAgICAvKiBGaXQgZXZlcnkgdGl0bGUgaW4gb25lIGxpbmUgc28gdGhlIHJhZGlvIGJveGVzIGFsaWduIHZlcnRpY2FsbHkuICovCiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgICAuY29sdW1ucy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQogICAgICAuc2NhbGUtcmFkaW8tZ3JvdXAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEEwLnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sQTAucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxBMC5wcm90b3R5cGUsIm9wdGlvbnMiLHZvaWQgMCk7RShbQnQoImNvbmZpZ3VyYXRpb24uKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQTAucHJvdG90eXBlLCJfY29uZmlndXJhdGlvbkNoYW5nZWQiLG51bGwpO0UoW0J0KCJzZXNzaW9uR3JvdXBzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEEwLnByb3RvdHlwZSwiX3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMiLG51bGwpO0EwPUUoW3l0KCJ0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scyIpXSxBMCk7dmFyIGh2PWNsYXNzIGV4dGVuZHMgbXR7X2Nsb3Nlc3RPclNlbGVjdGVkKHQscil7cmV0dXJuIHQhPT1udWxsP3Q6cn19O2h2LnRlbXBsYXRlPVFgCiAgICA8IS0tIENvbnRyb2xzIGJlaGF2aW9yIG9mIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QKICAgICAgICAgb3V0cHV0cyBzZXQgb3B0aW9ucyB0byB0aGUgX29wdGlvbnMgcHJvcGVydHkuCiAgICAgIC0tPgogICAgPGhwYXJhbXMtc3BsaXQtbGF5b3V0IG9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgIDwhLS0gVGhlIHNjYWxlIGFuZCBjb2xvciBjb250cm9scy4gLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBvcHRpb25zPSJ7e19vcHRpb25zfX0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scz4KICAgICAgPCEtLSBUaGUgYWN0dWFsIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QgLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90CiAgICAgICAgaWQ9InBsb3QiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IgogICAgICAgIGNsb3Nlc3Qtc2Vzc2lvbi1ncm91cD0ie3tfY2xvc2VzdEdyb3VwfX0iCiAgICAgICAgb3B0aW9ucz0iW1tfb3B0aW9uc11dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdD4KICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXMKICAgICAgICBpZD0idmFsdWVzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cD0iW1tfY2xvc2VzdE9yU2VsZWN0ZWQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Nsb3Nlc3RHcm91cCwgX3NlbGVjdGVkR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzPgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICBpZD0iZGV0YWlscyIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX3NlbGVjdGVkR3JvdXBdXSIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KCiAgICA8c3R5bGU+CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CiAgICAgICN2YWx1ZXMgewogICAgICAgIGhlaWdodDogMTE1cHg7CiAgICAgIH0KICAgICAgI2RldGFpbHMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGh2LnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxodi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGh2LnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0saHYucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO2h2PUUoW3l0KCJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3IildLGh2KTt2YXIgeTM9RWUoT2UoKSwxKTt2YXIgJG89Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9bnVsbCx0aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXA9bnVsbCx0aGlzLl9jb250YWluZXI9bnVsbCx0aGlzLl9zdmc9bnVsbCx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLl9icnVzaGVkQ2VsbEluZGV4PW51bGwsdGhpcy5fYnJ1c2hTZWxlY3Rpb249bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5fY29udGFpbmVyPXRoaXMuJC5jb250YWluZXIsdGhpcy5fc3ZnPUh0KHRoaXMuJC5zdmcpLHRoaXMuX3JlZHJhdygpfV9zZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe3RoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXAhPT1udWxsJiYodGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1wY3QodGhpcy5zZXNzaW9uR3JvdXBzLHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXAubmFtZSl8fG51bGwpLHRoaXMuX3JlZHJhdygpfV92aXNpYmxlU2NoZW1hQ2hhbmdlZCgpe3RoaXMuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCx0aGlzLl9icnVzaFNlbGVjdGlvbj1udWxsLHRoaXMuX3JlZHJhdygpfV9yZWRyYXcoKXt0aGlzLmRlYm91bmNlKCJfcmVkcmF3IiwoKT0+e2xldCB0PWNzLHI9MTIwMCxuPS40KnIsaT0xNTAsbz0uNzUqaTt0aGlzLndpZHRoPU1hdGgubWF4KGkqdC5udW1WaXNpYmxlQ29sdW1ucyh0aGlzLnZpc2libGVTY2hlbWEpLHIpLHRoaXMuaGVpZ2h0PU1hdGgubWF4KG8qdC5udW1WaXNpYmxlTWV0cmljcyh0aGlzLnZpc2libGVTY2hlbWEpLG4pLHRoaXMuX2NvbnRhaW5lci5zdHlsZS53aWR0aD10aGlzLndpZHRoKyJweCIsdGhpcy5fY29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmhlaWdodCsicHgiLHRoaXMuX3N2Zy5hdHRyKCJ3aWR0aCIsdGhpcy53aWR0aCkuYXR0cigiaGVpZ2h0Iix0aGlzLmhlaWdodCksdGhpcy5fc3ZnLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLHRoaXMuX2RyYXcoKX0sMTAwKX1fZHJhdygpe2xldCB0PWNzLHI9dGhpcztpZighdGhpcy5zZXNzaW9uR3JvdXBzfHx0aGlzLnNlc3Npb25Hcm91cHMubGVuZ3RoPT0wfHwhdGhpcy52aXNpYmxlU2NoZW1hfHx0aGlzLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MubGVuZ3RoPT0wKXJldHVybjtsZXQgbj1Jcih0Lm51bVZpc2libGVDb2x1bW5zKHIudmlzaWJsZVNjaGVtYSkpLGk9SXIodC5udW1WaXNpYmxlTWV0cmljcyhyLnZpc2libGVTY2hlbWEpKSxvPTgwLGE9NTAscz01LGw9UW0oKS5kb21haW4obikucmFuZ2UoW28rcyx0aGlzLndpZHRoLTEtc10pLnBhZGRpbmdJbm5lciguMSksYz1RbSgpLmRvbWFpbihpKS5yYW5nZShbdGhpcy5oZWlnaHQtMS1zLWEsc10pLnBhZGRpbmdJbm5lciguMSksdT1sLmJhbmR3aWR0aCgpLGg9Yy5iYW5kd2lkdGgoKSxmPW4ubWFwKGN0PT5yLl9jZWxsU2NhbGUoY3QsWzAsdS0xXSkpLHA9aS5tYXAoY3Q9PnIuX2NlbGxTY2FsZShjdCt0Lm51bVZpc2libGVIUGFyYW1zKHIudmlzaWJsZVNjaGVtYSksW2gtMSwwXSkpLGQ9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiLngtYXhpcyIpLmRhdGEobikuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWF4aXMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLGN0PT50LnRyYW5zbGF0ZVN0cihsKGN0KSwwKSk7ZnVuY3Rpb24gZyhjdCl7cmV0dXJuIngtYXhpcy1jbGlwLXBhdGgtIitjdH1mdW5jdGlvbiBfKGN0KXtyZXR1cm4ieC1sYWJlbC1jbGlwLXBhdGgtIitjdH1kLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsZykuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLXMpLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIix1KzIqcykuYXR0cigiaGVpZ2h0IixyLmhlaWdodC1hLzIpLGQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixfKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixyLmhlaWdodC1hLzIpLmF0dHIoIndpZHRoIix1KS5hdHRyKCJoZWlnaHQiLGEvMiksZC5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGN0PT4idXJsKCMiK2coY3QpKyIpIikuZWFjaChmdW5jdGlvbihjdCl7SHQodGhpcykuY2FsbChTLEs5KGZbY3RdKS50aWNrU2l6ZShyLmhlaWdodC1hKSx1LDQwLHIub3B0aW9ucy5jb2x1bW5zW2N0XS5zY2FsZSl9KSxkLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrXyhjdCkrIikiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLHUvMikuYXR0cigieSIsci5oZWlnaHQtMS1hLzQpLnRleHQoY3Q9PnQuc2NoZW1hVmlzaWJsZUNvbHVtbk5hbWUoci52aXNpYmxlU2NoZW1hLGN0KSkuYXBwZW5kKCJ0aXRsZSIpLnRleHQoY3Q9PnQuc2NoZW1hVmlzaWJsZUNvbHVtbk5hbWUoci52aXNpYmxlU2NoZW1hLGN0KSk7bGV0IHk9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiLnktYXhpcyIpLmRhdGEoaSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWF4aXMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLGN0PT50LnRyYW5zbGF0ZVN0cihyLndpZHRoLTEsYyhjdCkpKTtmdW5jdGlvbiB4KGN0KXtyZXR1cm4ieS1heGlzLWNsaXAtcGF0aC0iK2N0fWZ1bmN0aW9uIGIoY3Qpe3JldHVybiJ5LWxhYmVsLWNsaXAtcGF0aC0iK2N0fXkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIix4KS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtKHIud2lkdGgtby8yLTEpKS5hdHRyKCJ5IiwtcykuYXR0cigid2lkdGgiLHIud2lkdGgtby8yKS5hdHRyKCJoZWlnaHQiLGgrMipzKSx5LmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsYikuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLShyLndpZHRoLTEpKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsby8yKS5hdHRyKCJoZWlnaHQiLGgpLHkuYXBwZW5kKCJnIikuYXR0cigiY2xpcC1wYXRoIixjdD0+InVybCgjIit4KGN0KSsiKSIpLmVhY2goZnVuY3Rpb24oY3Qpe0h0KHRoaXMpLmNhbGwoUyxsYihwW2N0XSkudGlja1NpemUoci53aWR0aC1vKSxoLDIwLHIub3B0aW9ucy5jb2x1bW5zW2N0K3QubnVtVmlzaWJsZUhQYXJhbXMoci52aXNpYmxlU2NoZW1hKV0uc2NhbGUpfSkseS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWF4aXMtbGFiZWwiLCEwKS5hdHRyKCJjbGlwLXBhdGgiLGN0PT4idXJsKCMiK2IoY3QpKyIpIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IiwtKHIud2lkdGgtby80LTEpKS5hdHRyKCJ5IixoLzIpLmF0dHIoInRyYW5zZm9ybSIsdC5yb3RhdGVTdHIoOTAsLShyLndpZHRoLW8vNC0xKSxoLzIpKS50ZXh0KGN0PT50Lm1ldHJpY05hbWUoci52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zW2N0XSkpLmFwcGVuZCgidGl0bGUiKS50ZXh0KGN0PT50Lm1ldHJpY05hbWUoci52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zW2N0XSkpO2Z1bmN0aW9uIFMoY3QsWCxldCxkdCxxKXtsZXQgcHQ9TWF0aC5mbG9vcihldC9kdCksaHQ9WC5zY2FsZSgpO2lmKHE9PT0iUVVBTlRJTEUiKXtsZXQgd3Q9aHQucXVhbnRpbGVzKCksa3Q9TWF0aC5jZWlsKHd0Lmxlbmd0aC9wdCk7d3Q9SXIoMCx3dC5sZW5ndGgsa3QpLm1hcChpZT0+d3RbaWVdKSxYLnRpY2tWYWx1ZXMod3QpLnRpY2tGb3JtYXQoeG4oIi0uMmciKSl9KHE9PT0iTElORUFSInx8cT09PSJMT0ciKSYmWC50aWNrcyhwdCksY3QuY2FsbChYKSxjdC5zZWxlY3RBbGwoIi5kb21haW4iKS5yZW1vdmUoKSxjdC5zZWxlY3RBbGwoIi50aWNrIGxpbmUiKS5hdHRyKCJzdHJva2UiLCIjZGRkIil9bGV0IEM9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiLmNlbGwiKS5kYXRhKFU5KG4saSkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2VsbCIsITApLmF0dHIoInRyYW5zZm9ybSIsKFtjdCxYXSk9PnQudHJhbnNsYXRlU3RyKGwoY3QpLGMoWCkpKSxQPUMuYXBwZW5kKCJnIikuY2xhc3NlZCgiZnJhbWUiLCEwKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtcykuYXR0cigieSIsLXMpLmF0dHIoIndpZHRoIix1KzIqcykuYXR0cigiaGVpZ2h0IixoKzIqcykuYXR0cigic3Ryb2tlIiwiIzAwMCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLGs9bnVsbDtyLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4IT09dm9pZCAwJiYoaz16bigpLmRvbWFpbih0aGlzLl9jb2xFeHRlbnQodGhpcy5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCkpLnJhbmdlKFt0aGlzLm9wdGlvbnMubWluQ29sb3IsdGhpcy5vcHRpb25zLm1heENvbG9yXSkuaW50ZXJwb2xhdGUoTV8pKTtsZXQgTz1yLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4PT09dm9pZCAwPygpPT4icmVkIjooe3Nlc3Npb25Hcm91cDpjdH0pPT5rKHRoaXMuX2NvbFZhbHVlKGN0LHIub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgpKTtmdW5jdGlvbiBEKGN0LFgpe3JldHVybiBmW1hdKHIuX2NvbFZhbHVlKGN0LFgpKX1mdW5jdGlvbiBCKGN0LFgpe3JldHVybiBwW1hdKHIuX21ldHJpY1ZhbHVlKGN0LFgpKX1mdW5jdGlvbiBJKGN0LFgpe2xldCBldD1jdC5zZWxlY3RBbGwoIi5kYXRhLW1hcmtlciIpLmRhdGEoKFtwdCxodF0pPT5yLnNlc3Npb25Hcm91cHMuZmlsdGVyKHd0PT5yLl9jb2xWYWx1ZSh3dCxwdCkhPT12b2lkIDAmJnIuX21ldHJpY1ZhbHVlKHd0LGh0KSE9PXZvaWQgMCkubWFwKHd0PT4oe2NvbDpwdCxtZXRyaWM6aHQsc2Vzc2lvbkdyb3VwOnd0LHg6RCh3dCxwdCkseTpCKHd0LGh0KSxzZXNzaW9uR3JvdXBNYXJrZXJzOm51bGx9KSkpLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJkYXRhLW1hcmtlciIsITApLmF0dHIoImN4Iiwoe3g6cHR9KT0+cHQpLmF0dHIoImN5Iiwoe3k6cHR9KT0+cHQpLmF0dHIoInIiLDIpLmF0dHIoImZpbGwiLFgpLGR0PW5ldyBNYXA7ci5zZXNzaW9uR3JvdXBzLmZvckVhY2gocHQ9PntkdC5zZXQocHQsW10pfSksZXQuZWFjaChmdW5jdGlvbihwdCl7dmFyIGh0OyhodD1kdC5nZXQocHQuc2Vzc2lvbkdyb3VwKSk9PW51bGx8fGh0LnB1c2godGhpcyl9KSxldC5lYWNoKHB0PT57bGV0IGh0PWR0LmdldChwdC5zZXNzaW9uR3JvdXApO3B0LnNlc3Npb25Hcm91cE1hcmtlcnM9bmV3IFNldChodCl9KTtsZXQgcT1uLm1hcChwdD0+aS5tYXAoaHQ9PmV0LmZpbHRlcih3dD0+d3QuY29sPT1wdCYmd3QubWV0cmljPT1odCkpKTtyZXR1cm5bZXQscSxkdF19bGV0W0wsUixGXT1JKEMuYXBwZW5kKCJnIiksTyk7ZnVuY3Rpb24geihjdCxYKXtsZXQgZXQ9W107cmV0dXJuIFJbY3RdW1hdLmVhY2goZnVuY3Rpb24oKXtldC5wdXNoKHRoaXMpfSksemgoKS54KGR0PT5IdChkdCkuZGF0dW0oKS54KS55KGR0PT5IdChkdCkuZGF0dW0oKS55KS5hZGRBbGwoZXQpfWxldCBVPW4ubWFwKGN0PT5pLm1hcChYPT56KGN0LFgpKSksVz1udWxsO2J0KCkmJihXPUMuZmlsdGVyKGN0PT55My5pc0VxdWFsKGN0LHIuX2JydXNoZWRDZWxsSW5kZXgpKSxjb25zb2xlLmFzc2VydChXLnNpemUoKT09MSxXKSk7bGV0IFo9bmV3IFNldChMLm5vZGVzKCkpO3J0KCk7ZnVuY3Rpb24gcnQoKXtsZXQgY3Q9bmV3IFNldChMLm5vZGVzKCkpO010KCl8fChjdD1vdChyLl9icnVzaGVkQ2VsbEluZGV4LHIuX2JydXNoU2VsZWN0aW9uKSksRXAoQXJyYXkuZnJvbSh0LmZpbHRlclNldChjdCxYPT4hWi5oYXMoWCkpKSkuYXR0cigiZmlsbCIsTyksRXAoQXJyYXkuZnJvbSh0LmZpbHRlclNldChaLFg9PiFjdC5oYXMoWCkpKSkuYXR0cigiZmlsbCIsIiNkZGQiKSxaPWN0fWZ1bmN0aW9uIG90KGN0LFgpe2NvbnNvbGUuYXNzZXJ0KGN0IT09bnVsbCksY29uc29sZS5hc3NlcnQoWCE9PW51bGwpO2xldFtldCxkdF09Y3QscT1uZXcgU2V0O3JldHVybiB0LnF1YWRUcmVlVmlzaXRQb2ludHNJblJlY3QoVVtldF1bZHRdLFhbMF1bMF0sWFswXVsxXSxYWzFdWzBdLFhbMV1bMV0scHQ9PntIdChwdCkuZGF0dW0oKS5zZXNzaW9uR3JvdXBNYXJrZXJzLmZvckVhY2god3Q9PntxLmFkZCh3dCl9KX0pLHF9bGV0IHN0PXFMKCkuZXh0ZW50KFtbLXMrMSwtcysxXSxbdS0xK3MtMSxoLTErcy0xXV0pLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtidCgpJiZXLm5vZGUoKSE9dGhpcyYmc3QubW92ZShXLG51bGwpLFN0KHRoaXMpfSkub24oImJydXNoIixmdW5jdGlvbigpe1N0KHRoaXMpfSkub24oImVuZCIsZnVuY3Rpb24oKXtTdCh0aGlzKX0pO2Z1bmN0aW9uIFN0KGN0KXtsZXQgWD1WTChjdCk7IWJ0KCkmJlg9PT1udWxsfHxidCgpJiZjdD09PVcubm9kZSgpJiZ5My5pc0VxdWFsKFgsci5fYnJ1c2hTZWxlY3Rpb24pfHwoci5fYnJ1c2hTZWxlY3Rpb249WCxYIT09bnVsbD8oVz1IdChjdCksci5fYnJ1c2hlZENlbGxJbmRleD1XLmRhdHVtKCkpOihXPW51bGwsci5fYnJ1c2hlZENlbGxJbmRleD1udWxsKSxydCgpKX1mdW5jdGlvbiBidCgpe3JldHVybiByLl9icnVzaGVkQ2VsbEluZGV4IT09bnVsbCYmci5fYnJ1c2hTZWxlY3Rpb24hPT1udWxsfWZ1bmN0aW9uIE10KCl7cmV0dXJuIWJ0KCl8fHIuX2JydXNoU2VsZWN0aW9uWzBdWzBdPT09ci5fYnJ1c2hTZWxlY3Rpb25bMV1bMF18fHIuX2JydXNoU2VsZWN0aW9uWzBdWzFdPT09ci5fYnJ1c2hTZWxlY3Rpb25bMV1bMV19Qy5jYWxsKHN0KSxidCgpJiZzdC5tb3ZlKFcsci5fYnJ1c2hTZWxlY3Rpb24pO2xldCBsdD1udWxsLEt0PW51bGw7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cCE9PW51bGwmJihLdD1FcChGLmdldCh0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwKSkuY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMCkpLEMub24oImNsaWNrIixmdW5jdGlvbigpe2xldCBjdD1sdD09PUt0P251bGw6bHQ7aWYoY3Q9PT1LdClyZXR1cm47S3QhPT1udWxsJiZLdC5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCExKSxLdD1jdCxLdCE9PW51bGwmJkt0LmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITApO2xldCBYPUt0PT09bnVsbD9udWxsOkt0LmRhdHVtKCkuc2Vzc2lvbkdyb3VwO3Iuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9WH0pLm9uKCJtb3VzZW1vdmUgbW91c2VlbnRlciIsZnVuY3Rpb24oW2N0LFhdKXtsZXRbZXQsZHRdPXpvKHRoaXMpLHE9X3QoY3QsWCxldCxkdCwyMCk7bHQhPT1xJiYobHQhPT1udWxsJiZsdC5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLGx0PXEsbHQhPT1udWxsPyhsdC5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITApLHIuY2xvc2VzdFNlc3Npb25Hcm91cD1sdC5kYXR1bSgpLnNlc3Npb25Hcm91cCk6ci5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwpfSkub24oIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKFtjdCxYXSl7bHQhPT1udWxsJiYobHQuY2xhc3NlZCgiY2xvc2VzdC1tYXJrZXIiLCExKSxsdD1udWxsLHIuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsKX0pO2Z1bmN0aW9uIF90KGN0LFgsZXQsZHQscSl7bGV0IHB0PTEvMCxodD1udWxsO3JldHVybiB0LnF1YWRUcmVlVmlzaXRQb2ludHNJbkRpc2soVVtjdF1bWF0sZXQsZHQscSwod3Qsa3QpPT57aWYoWi5oYXMod3QpJiZrdDxwdCl7bGV0IGllPUh0KHd0KS5kYXR1bSgpO3B0PWt0LGh0PWllLnNlc3Npb25Hcm91cH19KSxodD09PW51bGw/bnVsbDpFcChGLmdldChodCkpfXRoaXMuX3N2Zy5zZWxlY3RBbGwoIioiKS5jbGFzc2VkKCJ0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdCIsITApfV9jZWxsU2NhbGUodCxyKXtsZXQgbj10aGlzLl9jb2xFeHRlbnQodCksaT16bigpLmRvbWFpbihuKS5yYW5nZShyKTtpZih0aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZT09PSJMSU5FQVIiKXJldHVybiBpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IkxPRyIpcmV0dXJuIG5bMF08PTAmJm5bMV0+PTA/aTpjYygpLmRvbWFpbihuKS5yYW5nZShyKTtpZih0aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZT09PSJRVUFOVElMRSIpe2xldCBvPShyWzFdLXJbMF0pLzE5LGE9SXIoMjApLm1hcChzPT5yWzBdK28qcyk7cmV0dXJuIGVnKCkuZG9tYWluKHkzLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcChzPT50aGlzLl9jb2xWYWx1ZShzLHQpKSkpLnJhbmdlKGEpfWVsc2V7aWYodGhpcy5vcHRpb25zLmNvbHVtbnNbdF0uc2NhbGU9PT0iTk9OX05VTUVSSUMiKXJldHVybiB0ZygpLmRvbWFpbih5My51bmlxKHRoaXMuc2Vzc2lvbkdyb3Vwcy5tYXAobz0+dGhpcy5fY29sVmFsdWUobyx0KSkuc29ydCgpKSkucmFuZ2UocikucGFkZGluZyguMSk7dGhyb3ciVW5rbm93biBzY2FsZSBmb3IgY29sdW1uOiAiK3QrIi4gb3B0aW9uczogIit0aGlzLm9wdGlvbnN9fV9jb2xWYWx1ZSh0LHIpe3JldHVybiBGSCh0aGlzLnZpc2libGVTY2hlbWEsdCxyKX1fbWV0cmljVmFsdWUodCxyKXtyZXR1cm4gekgodGhpcy52aXNpYmxlU2NoZW1hLHQscil9X2NvbEV4dGVudCh0KXtyZXR1cm4gZ1AodGhpcy52aXNpYmxlU2NoZW1hLHRoaXMuc2Vzc2lvbkdyb3Vwcyx0KX19OyRvLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgc3ZnIHsKICAgICAgICBmb250OiAxMHB4IHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLmZyYW1lIHJlY3QgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAvKiBUaGUgY2xvc2VzdCBkYXRhIHBvaW50IG1hcmtlciB0byB0aGUgbW91c2UgcG9pbnRlci4gV2UgdXNlICFpbXBvcnRhbnQKICAgICAgICAgdG8gb3ZlcnJpZGUgdGhlIGlubGluZSBzdHlsZSB0aGF0IHNldHMgdGhlIHJlZ3VsYXIgc3R5bGUgb2YgYSBtYXJrZXIuCiAgICAgICovCiAgICAgIC5jbG9zZXN0LW1hcmtlciB7CiAgICAgICAgcjogNiAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAvKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGEgcG9pbnQgbWFya2VyLiBXZSB1c2UgIWltcG9ydGFudCB0bwogICAgICAgICBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4gKi8KICAgICAgLnNlbGVjdGVkLW1hcmtlciB7CiAgICAgICAgcjogNiAhaW1wb3J0YW50OwogICAgICAgIGZpbGw6ICMwZjAgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLCRvLnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sJG8ucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLCRvLnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJzZWxlY3RlZFNlc3Npb25Hcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJjbG9zZXN0U2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEhUTUxFbGVtZW50KV0sJG8ucHJvdG90eXBlLCJfY29udGFpbmVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLCRvLnByb3RvdHlwZSwiX3N2ZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSwkby5wcm90b3R5cGUsIndpZHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLCRvLnByb3RvdHlwZSwiaGVpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLCRvLnByb3RvdHlwZSwiX2JydXNoZWRDZWxsSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfYnJ1c2hTZWxlY3Rpb24iLHZvaWQgMCk7RShbQnQoInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sJG8ucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3Vwc0NoYW5nZWQiLG51bGwpO0UoW0J0KCJ2aXNpYmxlU2NoZW1hLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLCRvLnByb3RvdHlwZSwiX3Zpc2libGVTY2hlbWFDaGFuZ2VkIixudWxsKTtFKFtCdCgib3B0aW9ucy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSwkby5wcm90b3R5cGUsIl9yZWRyYXciLG51bGwpOyRvPUUoW3l0KCJ0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdCIpXSwkbyk7dmFyIGZ2PWNsYXNzIGV4dGVuZHMgbXR7X2Nsb3Nlc3RPclNlbGVjdGVkKHQscil7cmV0dXJuIHQhPT1udWxsP3Q6cn19O2Z2LnRlbXBsYXRlPVFgCiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPCEtLSBDb250cm9scyBiZWhhdmlvciBvZiB0aGUgc2NhdHRlciBwbG90IG1hdHJpeAogICAgICAgICAgICAgb3V0cHV0cyB0aGUgY29uZmlndXJlZCBvcHRpb25zIHRvIHRoZSBfb3B0aW9ucyBwcm9wZXJ0eS4gLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scwogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgaWQ9ImNvbnRyb2xzIgogICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBvcHRpb25zPSJ7e19vcHRpb25zfX0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scz4KICAgICAgPCEtLSBUaGUgYWN0dWFsIHNjYXR0ZXIgcGxvdCBtYXRyaXggLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdAogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgaWQ9InBsb3QiCiAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIHNlbGVjdGVkLXNlc3Npb24tZ3JvdXA9Int7X3NlbGVjdGVkR3JvdXB9fSIKICAgICAgICBjbG9zZXN0LXNlc3Npb24tZ3JvdXA9Int7X2Nsb3Nlc3RHcm91cH19IgogICAgICAgIG9wdGlvbnM9IltbX29wdGlvbnNdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90PgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcwogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgaWQ9InZhbHVlcyIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19jbG9zZXN0T3JTZWxlY3RlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Nsb3Nlc3RHcm91cCwgX3NlbGVjdGVkR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzPgogICAgICA8IS0tIFNob3dzIHNlc3Npb24gZ3JvdXAgZGV0YWlscyBmb3IgdGhlIGNsaWNrZWQgbWFya2VyLiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0iZGV0YWlscyIKICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19zZWxlY3RlZEdyb3VwXV0iCiAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscz4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CiAgICAgICNjb250cm9scyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI3Bsb3QgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICN2YWx1ZXMgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGhlaWdodDogMTE1cHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgdmFhZGluLXNwbGl0LWxheW91dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZnYucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGZ2LnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZnYucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxmdi5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7ZnY9RShbeXQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3IildLGZ2KTt2YXIgWGY9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fc2VsZWN0ZWRUYWI9MH19O1hmLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItaGVhZGVyLXBhbmVsPgogICAgICA8cGFwZXItdG9vbGJhciBzbG90PSJoZWFkZXIiIGNsYXNzPSJ0YWItYmFyIj4KICAgICAgICA8cGFwZXItdGFicyBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWJ9fSIgc2xvdD0idG9wIj4KICAgICAgICAgIDwhLS0gdmlldy1pZCBjYW4gYmUgdXNlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBsb2NhdGUgYSB0YWIuCiAgICAgICAgICAgICAgIEl0IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50IGltcGxlbWVudGluZyB0aGUgdmlldwogICAgICAgICAgICAgICB3aXRob3V0IHRoZSAndGYtaHBhcmFtcy0nIHByZWZpeC4gLS0+CiAgICAgICAgICA8cGFwZXItdGFiIHZpZXctaWQ9InRhYmxlLXZpZXciPiBUQUJMRSBWSUVXIDwvcGFwZXItdGFiPgogICAgICAgICAgPHBhcGVyLXRhYiB2aWV3LWlkPSJwYXJhbGxlbC1jb29yZHMtdmlldyI+CiAgICAgICAgICAgIFBBUkFMTEVMIENPT1JESU5BVEVTIFZJRVcKICAgICAgICAgIDwvcGFwZXItdGFiPgogICAgICAgICAgPHBhcGVyLXRhYiB2aWV3LWlkPSJzY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciPgogICAgICAgICAgICBTQ0FUVEVSIFBMT1QgTUFUUklYIFZJRVcKICAgICAgICAgIDwvcGFwZXItdGFiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVscC1hbmQtZmVlZGJhY2siPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYnVnUmVwb3J0VXJsXV0iPgogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmJD0iW1tidWdSZXBvcnRVcmxdXSIKICAgICAgICAgICAgICAgIHRhcmdldD0iX2JsYW5rIgogICAgICAgICAgICAgICAgcmVsPSJub29wZW5lciBub3JlZmVycmVyIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgICAgaWQ9ImJ1Zy1yZXBvcnQiCiAgICAgICAgICAgICAgICAgIHJhaXNlZAogICAgICAgICAgICAgICAgICB0aXRsZT0iU2VuZCBhIGJ1ZyByZXBvcnQgb3IgZmVhdHVyZSByZXF1ZXN0IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBCdWcgUmVwb3J0IC8gRmVhdHVyZSBSZXF1ZXN0CiAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWxwVXJsXV0iPgogICAgICAgICAgICAgIDxhIGhyZWYkPSJbW2hlbHBVcmxdXSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+CiAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgaWNvbj0iaGVscC1vdXRsaW5lIgogICAgICAgICAgICAgICAgICB0aXRsZT0iVmlldyBkb2N1bWVudGF0aW9uIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3BhcGVyLXRhYnM+CiAgICAgIDwvcGFwZXItdG9vbGJhcj4KICAgICAgPGlyb24tcGFnZXMgc2VsZWN0ZWQ9IltbX3NlbGVjdGVkVGFiXV0iIGNsYXNzPSJmaXQgdGFiLXZpZXciPgogICAgICAgIDxkaXYgaWQ9IjAiIGNsYXNzPSJ0YWIiPgogICAgICAgICAgPHRmLWhwYXJhbXMtdGFibGUtdmlldwogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICAgIGVuYWJsZS1zaG93LW1ldHJpY3MKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtaHBhcmFtcy10YWJsZS12aWV3PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9IjEiIGNsYXNzPSJ0YWIiPgogICAgICAgICAgPHRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXcKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9IjIiIGNsYXNzPSJ0YWIiPgogICAgICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3CiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1wYWdlcz4KICAgIDwvcGFwZXItaGVhZGVyLXBhbmVsPgoKICAgIDxzdHlsZT4KICAgICAgLnRhYi12aWV3IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnRhYi1iYXIgewogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigKICAgICAgICAgIC0tdGItdG9vbGJhci1iYWNrZ3JvdW5kLWNvbG9yLAogICAgICAgICAgdmFyKC0tdGItb3JhbmdlLXN0cm9uZykKICAgICAgICApOwogICAgICB9CiAgICAgIC50YWIgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICBwYXBlci10YWJzIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyLWNvbG9yOiB3aGl0ZTsKICAgICAgICAtLXBhcGVyLXRhYnMtY29udGVudDogewogICAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRmLWhwYXJhbXMtdGFibGUtdmlldyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5oZWxwLWFuZC1mZWVkYmFjayB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7IC8qIEVuc3VyZSB0aGF0IGljb25zIHN0YXkgYWxpZ25lZCAqLwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KICAgICAgI2J1Zy1yZXBvcnQgewogICAgICAgIGJvcmRlcjogc29saWQgYmxhY2s7CiAgICAgICAgYmFja2dyb3VuZDogcmVkOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZHM7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG1heC13aWR0aDogMTUwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQogICAgICAuaGVscC1hbmQtZmVlZGJhY2sgYSB7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFhmLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWGYucHJvdG90eXBlLCJidWdSZXBvcnRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWGYucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxYZi5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFhmLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxYZi5wcm90b3R5cGUsIl9zZWxlY3RlZFRhYiIsdm9pZCAwKTtYZj1FKFt5dCgidGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lIildLFhmKTt2YXIgcmg9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7cmVsb2FkKCl7dGhpcy4kWyJxdWVyeS1wYW5lIl0ucmVsb2FkKCl9fTtyaC50ZW1wbGF0ZT1RYAogICAgPGhwYXJhbXMtc3BsaXQtbGF5b3V0PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzaWRlYmFyIj4KICAgICAgICA8dGYtaHBhcmFtcy1xdWVyeS1wYW5lCiAgICAgICAgICBpZD0icXVlcnktcGFuZSIKICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICBjb25maWd1cmF0aW9uPSJ7e19jb25maWd1cmF0aW9ufX0iCiAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0ie3tfc2Vzc2lvbkdyb3Vwc319IgogICAgICAgICAgZGF0YS1sb2FkZWQtd2l0aC1ub24tZW1wdHktaHBhcmFtcz0ie3tfZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXN9fSIKICAgICAgICAgIGRhdGEtbG9hZGVkLXdpdGgtZW1wdHktaHBhcmFtcz0ie3tfZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXN9fSIKICAgICAgICA+CiAgICAgICAgPC90Zi1ocGFyYW1zLXF1ZXJ5LXBhbmU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaHBhcmFtcyBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaHBhcmFtcyBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBFdmVudCBmaWxlcyBhcmUgc3RpbGwgYmVpbmcgbG9hZGVkICh0cnkgcmVsb2FkaW5nIHRoaXMgcGFnZSkuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXNdXSI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lCiAgICAgICAgICAgIGlkPSJzZXNzaW9ucy1wYW5lIgogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgaGVscC11cmw9IltbaGVscFVybF1dIgogICAgICAgICAgICBidWctcmVwb3J0LXVybD0iW1tidWdSZXBvcnRVcmxdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249IltbX2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9IltbX3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgaHBhcmFtcy1zcGxpdC1sYXlvdXQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc2lkZWJhciB7CiAgICAgICAgd2lkdGg6IDIwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIG1pbi13aWR0aDogMTAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgd2lkdGg6IDgwJTsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluayk7CiAgICAgIH0KCiAgICAgIGE6dmlzaXRlZCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmstdmlzaXRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIix1MyldLHJoLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxyaC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHJoLnByb3RvdHlwZSwiaGVscFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxyaC5wcm90b3R5cGUsImJ1Z1JlcG9ydFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxyaC5wcm90b3R5cGUsIl9jb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxyaC5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scmgucHJvdG90eXBlLCJfZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxyaC5wcm90b3R5cGUsIl9kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsdm9pZCAwKTtyaD1FKFt5dCgidGYtaHBhcmFtcy1tYWluIildLHJoKTt2YXIgc2hyPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJ0ZW5zb3Jib2FyZENvbGFiIik9PT0idHJ1ZSIsbGhyPSJocGFyYW1zIixzVj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fYmFja2VuZD1uZXcgdTModmUoKS5wbHVnaW5Sb3V0ZShsaHIsIiIpLG5ldyBBZSxzaHIpfXJlbG9hZCgpe3RoaXMuJFsiaHBhcmFtcy1tYWluIl0ucmVsb2FkKCl9fTtzVi50ZW1wbGF0ZT1RYAogICAgPCEtLSBUZW5zb3JCb2FyZCBkb2VzIG5vdCBzcGVjaWZ5IGFuIGV4cGVyaW1lbnROYW1lLiBDdXJyZW50bHkgaXQgb25seQogICAgICAgICBzdXBwb3J0cyBvbmUgZXhwZXJpbWVudCBwZXIgaW52b2NhdGlvbi4gLS0+CiAgICA8dGYtaHBhcmFtcy1tYWluCiAgICAgIGlkPSJocGFyYW1zLW1haW4iCiAgICAgIGJhY2tlbmQ9IltbX2JhY2tlbmRdXSIKICAgICAgZXhwZXJpbWVudC1uYW1lPSIiCiAgICA+CiAgICA8L3RmLWhwYXJhbXMtbWFpbj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHNWLnByb3RvdHlwZSwiX2JhY2tlbmQiLHZvaWQgMCk7c1Y9RShbeXQoInRmLWhwYXJhbXMtZGFzaGJvYXJkIildLHNWKTt2YXIgcHY9RWUoT2UoKSwxKTt2YXIgX249Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWN0dWFsU2l6ZT0hMSx0aGlzLmJyaWdodG5lc3NBZGp1c3RtZW50PS41LHRoaXMuY29udHJhc3RQZXJjZW50YWdlPTAsdGhpcy5fbWV0YWRhdGFDYW5jZWxsZXI9bmV3IGFuLHRoaXMuX2ltYWdlQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9pc0ltYWdlTG9hZGluZz0hMX1nZXQgX3J1bkNvbG9yKCl7dmFyIHQ9dGhpcy5ydW47cmV0dXJuIGZuKHQpfWdldCBfaGFzQXRMZWFzdE9uZVN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjB9Z2V0IF9oYXNNdWx0aXBsZVN0ZXBzKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfY3VycmVudFN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXXx8bnVsbH1nZXQgX3N0ZXBWYWx1ZSgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3Quc3RlcDowfWdldCBfY3VycmVudFdhbGxUaW1lKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/czIodC53YWxsX3RpbWUpOiIifWdldCBfbWF4U3RlcEluZGV4KCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuIHQubGVuZ3RoLTF9Z2V0IF9zYW1wbGVUZXh0KCl7dmFyIHQ9dGhpcy5zYW1wbGU7cmV0dXJuYCR7dCsxfWB9Z2V0IF9oYXNNdWx0aXBsZVNhbXBsZXMoKXt2YXIgdD10aGlzLm9mU2FtcGxlcztyZXR1cm4gdD4xfV9nZXRBcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5hY3R1YWxTaXplPyJ0cnVlIjoiZmFsc2UifWF0dGFjaGVkKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5pc0F0dGFjaGVkKXJldHVybjt0aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxBbGwoKTtsZXQgdD12ZSgpLHI9Q24odC5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL2ltYWdlcyIpLHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVuLHNhbXBsZTp0aGlzLnNhbXBsZX0pLG49dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgYT1pLnZhbHVlLm1hcCh0aGlzLl9jcmVhdGVTdGVwRGF0dW0uYmluZCh0aGlzKSk7dGhpcy5zZXQoIl9zdGVwcyIsYSksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLGEubGVuZ3RoLTEpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2NyZWF0ZVN0ZXBEYXR1bSh0KXtsZXQgcj12ZSgpLnBsdWdpblJvdXRlKCJpbWFnZXMiLCIvaW5kaXZpZHVhbEltYWdlIik7cmV0dXJuIHI9Q24ocix7dHM6dC53YWxsX3RpbWV9KSxyKz0iJiIrdC5xdWVyeSx7d2FsbF90aW1lOm5ldyBEYXRlKHQud2FsbF90aW1lKjFlMyksc3RlcDp0LnN0ZXAsdXJsOnJ9fV91cGRhdGVJbWFnZVVybCgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwLHI9dGhpcy5icmlnaHRuZXNzQWRqdXN0bWVudCxuPXRoaXMuY29udHJhc3RQZXJjZW50YWdlO2lmKCF0KXJldHVybjtsZXQgaT1uZXcgSW1hZ2U7dGhpcy5faW1hZ2VDYW5jZWxsZXIuY2FuY2VsQWxsKCksaS5vbmxvYWQ9aS5vbmVycm9yPXRoaXMuX2ltYWdlQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKG89PntpZihvLmNhbmNlbGxlZClyZXR1cm47bGV0IGE9dGhpcy4kJCgiI21haW4taW1hZ2UtY29udGFpbmVyIik7YSYmKGEudGV4dENvbnRlbnQ9IiIsenQoYSkuYXBwZW5kQ2hpbGQoaSkpLHRoaXMuc2V0KCJfaXNJbWFnZUxvYWRpbmciLCExKX0pLmJpbmQodGhpcyksaS5zdHlsZS5maWx0ZXI9YGNvbnRyYXN0KCR7bn0lKSBgLGkuc3R5bGUuZmlsdGVyKz1gYnJpZ2h0bmVzcygke3J9KWAsdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITApLGkuc3JjPXQudXJsfV9oYW5kbGVUYXAodCl7dGhpcy5zZXQoImFjdHVhbFNpemUiLCF0aGlzLmFjdHVhbFNpemUpfV90b0xvY2FsZVN0cmluZyh0KXtyZXR1cm4gdC50b0xvY2FsZVN0cmluZygpfX07X24udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXNdXSI+CiAgICAgICAgPGRpdj5zYW1wbGU6IFtbX3NhbXBsZVRleHRdXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXBdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHN0ZXAKICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkIgogICAgICAgICAgICAgID5bW190b0xvY2FsZVN0cmluZyhfc3RlcFZhbHVlKV1dPC9zcGFuCiAgICAgICAgICAgID4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCBoZWFkaW5nLXJpZ2h0IGRhdGV0aW1lIj4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19jdXJyZW50V2FsbFRpbWVdXSI+CiAgICAgICAgICAgICAgW1tfY3VycmVudFdhbGxUaW1lXV0KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwgcmlnaHQiPgogICAgICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlIGFjdGl2ZSBoaWRkZW4kPSJbWyFfaXNJbWFnZUxvYWRpbmddXSI+CiAgICAgICAgICAgIDwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVTdGVwc11dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIG1heC1tYXJrZXJzPSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgc25hcHMKICAgICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgICAgdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC90Zi1jYXJkLWhlYWRpbmc+CgogICAgPCEtLSBTZW1hbnRpY2FsbHkgYSBidXR0b24gYnV0IDxpbWc+IGluc2lkZSBhIDxidXR0b24+IGRpc2FsbG93cyB1c2VyIHRvIGRvCiAgICBhbiBpbnRlcmVzdGluZyBvcGVyYXRpb24gbGlrZSAiQ29weSBJbWFnZSIgaW4gbm9uLUNocm9taXVtIGJyb3dzZXJzLiAtLT4KICAgIDxhCiAgICAgIGlkPSJtYWluLWltYWdlLWNvbnRhaW5lciIKICAgICAgcm9sZT0iYnV0dG9uIgogICAgICBhcmlhLWxhYmVsPSJUb2dnbGUgYWN0dWFsIHNpemUiCiAgICAgIGFyaWEtZXhwYW5kZWQkPSJbW19nZXRBcmlhRXhwYW5kZWQoYWN0dWFsU2l6ZSldXSIKICAgICAgb24tdGFwPSJfaGFuZGxlVGFwIgogICAgPjwvYT4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLyoqIE1ha2UgYnV0dG9uIGEgZGl2LiAqLwogICAgICBidXR0b24gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC8qKiBGaXJlZm94OiBHZXQgcmlkIG9mIGRvdHRlZCBsaW5lIGluc2lkZSBidXR0b24uICovCiAgICAgIGJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC8qKiBGaXJlZm94OiBTaW11bGF0ZSBDaHJvbWUncyBvdXRlciBnbG93IG9uIGJ1dHRvbiB3aGVuIGZvY3VzZWQuICovCiAgICAgIGJ1dHRvbjotbW96LWZvY3VzcmluZyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3gtc2hhZG93OiAwcHggMHB4IDFweCAycHggSGlnaGxpZ2h0OwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDM1MHB4OwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiAwIDE1cHggNDBweCAwOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIC8qKiBXaGVuIGFjdHVhbCBzaXplIHNob3duIGlzIG9uLCB1c2UgdGhlIGFjdHVhbCBpbWFnZSB3aWR0aC4gKi8KICAgICAgOmhvc3QoW2FjdHVhbC1zaXplXSkgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QoW2FjdHVhbC1zaXplXSkgI21haW4taW1hZ2UtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiBub25lOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSAjbWFpbi1pbWFnZS1jb250YWluZXIgaW1nIHsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgfQoKICAgICAgcGFwZXItc3Bpbm5lci1saXRlIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgIH0KCiAgICAgICNzdGVwcyB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgLyoKICAgICAgICAgKiAzMSBjb21lcyBmcm9tIGFkZGluZyBhIHBhZGRpbmcgb2YgMTVweCBmcm9tIGJvdGggc2lkZXMgb2YgdGhlCiAgICAgICAgICogcGFwZXItc2xpZGVyLCBzdWJ0cmFjdGluZyAxcHggc28gdGhhdCB0aGUgc2xpZGVyIHdpZHRoIGFsaWducwogICAgICAgICAqIHdpdGggdGhlIGltYWdlICh0aGUgbGFzdCBzbGlkZXIgbWFya2VyIHRha2VzIHVwIDFweCksIGFuZAogICAgICAgICAqIGFkZGluZyAycHggdG8gYWNjb3VudCBmb3IgYSBib3JkZXIgb2YgMXB4IG9uIGJvdGggc2lkZXMgb2YKICAgICAgICAgKiB0aGUgaW1hZ2UuIDMwIC0gMSArIDIuCiAgICAgICAgICovCiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArIDMxcHgpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI21haW4taW1hZ2UtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDI0cHg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgICNtYWluLWltYWdlLWNvbnRhaW5lciBpbWcgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7CiAgICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLF9uLnByb3RvdHlwZSwicnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLF9uLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLF9uLnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLF9uLnByb3RvdHlwZSwib2ZTYW1wbGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLF9uLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sX24ucHJvdG90eXBlLCJhY3R1YWxTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLF9uLnByb3RvdHlwZSwiYnJpZ2h0bmVzc0FkanVzdG1lbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJjb250cmFzdFBlcmNlbnRhZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxfbi5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLF9uLnByb3RvdHlwZSwiX21ldGFkYXRhQ2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLF9uLnByb3RvdHlwZSwiX2ltYWdlQ2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sX24ucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLF9uLnByb3RvdHlwZSwiX3N0ZXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLF9uLnByb3RvdHlwZSwiX2lzSW1hZ2VMb2FkaW5nIix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9oYXNBdExlYXN0T25lU3RlcCIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVN0ZXBzIixudWxsKTtFKFtSdCgiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwIixudWxsKTtFKFtSdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfc3RlcFZhbHVlIixudWxsKTtFKFtSdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfY3VycmVudFdhbGxUaW1lIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtSdCgic2FtcGxlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfc2FtcGxlVGV4dCIsbnVsbCk7RShbUnQoIm9mU2FtcGxlcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVNhbXBsZXMiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLF9uLnByb3RvdHlwZSwicmVsb2FkIixudWxsKTtFKFtCdCgiX2N1cnJlbnRTdGVwIiwiYnJpZ2h0bmVzc0FkanVzdG1lbnQiLCJjb250cmFzdFBlcmNlbnRhZ2UiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLF9uLnByb3RvdHlwZSwiX3VwZGF0ZUltYWdlVXJsIixudWxsKTtfbj1FKFt5dCgidGYtaW1hZ2UtbG9hZGVyIildLF9uKTt2YXIgSW89Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl9kZWZhdWx0QnJpZ2h0bmVzc0FkanVzdG1lbnQ9MSx0aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlPTEwMCx0aGlzLl9icmlnaHRuZXNzQWRqdXN0bWVudD0xLHRoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT0xMDAsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEltYWdlcygpfSl9X2ZldGNoVGFncygpe2xldCB0PXZlKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYocHYuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPXB2Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixpLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixyKSx0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfSl9X3JlbG9hZEltYWdlcygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtaW1hZ2UtbG9hZGVyIikuZm9yRWFjaChyPT57ci5yZWxvYWQoKX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9yZXNldEJyaWdodG5lc3MoKXt0aGlzLl9icmlnaHRuZXNzQWRqdXN0bWVudD10aGlzLl9kZWZhdWx0QnJpZ2h0bmVzc0FkanVzdG1lbnR9X3Jlc2V0Q29udHJhc3QoKXt0aGlzLl9jb250cmFzdFBlcmNlbnRhZ2U9dGhpcy5fZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZX1nZXQgX2JyaWdodG5lc3NJc0RlZmF1bHQoKXt2YXIgdD10aGlzLl9icmlnaHRuZXNzQWRqdXN0bWVudDtyZXR1cm4gdD09PXRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudH1nZXQgX2NvbnRyYXN0SXNEZWZhdWx0KCl7dmFyIHQ9dGhpcy5fY29udHJhc3RQZXJjZW50YWdlO3JldHVybiB0PT09dGhpcy5fZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZX1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm8scj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXIsaT10aGlzLl9jYXRlZ29yaWVzRG9tUmVhZHk7bGV0IG89cHYubWFwVmFsdWVzKHQsYz0+T2JqZWN0LmtleXMoYykpLGE9UWwobyxyLG4pO2Z1bmN0aW9uIHMoYyl7bGV0IHU9dFtjLnJ1bl1bYy50YWddLnNhbXBsZXM7cmV0dXJuIHB2LnJhbmdlKHUpLm1hcChoPT5PYmplY3QuYXNzaWduKHt9LGMse3NhbXBsZTpoLG9mU2FtcGxlczp1fSkpfXJldHVybiBhLm1hcChjPT5PYmplY3QuYXNzaWduKHt9LGMse2l0ZW1zOltdLmNvbmNhdC5hcHBseShbXSxjLml0ZW1zLm1hcChzKSl9KSl9X3RhZ01ldGFkYXRhKHQscixuKXtyZXR1cm4gdFtyXVtuXX19O0lvLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tfYWN0dWFsU2l6ZX19IgogICAgICAgICAgICAgICAgPlNob3cgYWN0dWFsIGltYWdlIHNpemU8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+QnJpZ2h0bmVzcyBhZGp1c3RtZW50PC9oMz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIj4KICAgICAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgICBtYXg9IjIiCiAgICAgICAgICAgICAgICBzbmFwcwogICAgICAgICAgICAgICAgcGluCiAgICAgICAgICAgICAgICBzdGVwPSIwLjAxIgogICAgICAgICAgICAgICAgdmFsdWU9Int7X2JyaWdodG5lc3NBZGp1c3RtZW50fX0iCiAgICAgICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X2JyaWdodG5lc3NBZGp1c3RtZW50fX0iCiAgICAgICAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ4LWJ1dHRvbiIKICAgICAgICAgICAgICAgIG9uLXRhcD0iX3Jlc2V0QnJpZ2h0bmVzcyIKICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbW19icmlnaHRuZXNzSXNEZWZhdWx0XV0iCiAgICAgICAgICAgICAgICA+UmVzZXQ8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxoMyBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPkNvbnRyYXN0IGFkanVzdG1lbnQ8L2gzPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgIG1heD0iNTAwIgogICAgICAgICAgICAgICAgc25hcHMKICAgICAgICAgICAgICAgIHBpbgogICAgICAgICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e19jb250cmFzdFBlcmNlbnRhZ2V9fSIKICAgICAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfY29udHJhc3RQZXJjZW50YWdlfX0iCiAgICAgICAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ4LWJ1dHRvbiIKICAgICAgICAgICAgICAgIG9uLXRhcD0iX3Jlc2V0Q29udHJhc3QiCiAgICAgICAgICAgICAgICBkaXNhYmxlZD0iW1tfY29udHJhc3RJc0RlZmF1bHRdXSIKICAgICAgICAgICAgICAgID5SZXNldDwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yCiAgICAgICAgICAgIGlkPSJydW5zLXNlbGVjdG9yIgogICAgICAgICAgICBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSIKICAgICAgICAgID48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaW1hZ2UgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGltYWdlIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1pbWFnZS1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICBvZi1zYW1wbGVzPSJbW2l0ZW0ub2ZTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIGFjdHVhbC1zaXplPSJbW19hY3R1YWxTaXplXV0iCiAgICAgICAgICAgICAgICAgIGJyaWdodG5lc3MtYWRqdXN0bWVudD0iW1tfYnJpZ2h0bmVzc0FkanVzdG1lbnRdXSIKICAgICAgICAgICAgICAgICAgY29udHJhc3QtcGVyY2VudGFnZT0iW1tfY29udHJhc3RQZXJjZW50YWdlXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1pbWFnZS1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItc2xpZGVyIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHVuc2V0OwogICAgICB9CiAgICAgIC54LWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgfQogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW8ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxJby5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSW8ucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW8ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW8ucHJvdG90eXBlLCJfYWN0dWFsU2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9kZWZhdWx0QnJpZ2h0bmVzc0FkanVzdG1lbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSW8ucHJvdG90eXBlLCJfZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9icmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9jb250cmFzdFBlcmNlbnRhZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSW8ucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW8ucHJvdG90eXBlLCJfY2F0ZWdvcmllc0RvbVJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLElvLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfYnJpZ2h0bmVzc0FkanVzdG1lbnQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSW8ucHJvdG90eXBlLCJfYnJpZ2h0bmVzc0lzRGVmYXVsdCIsbnVsbCk7RShbUnQoIl9jb250cmFzdFBlcmNlbnRhZ2UiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSW8ucHJvdG90eXBlLCJfY29udHJhc3RJc0RlZmF1bHQiLG51bGwpO0UoW1J0KCJfcnVuVG9UYWdJbmZvIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiLCJfY2F0ZWdvcmllc0RvbVJlYWR5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKTtJbz1FKFt5dCgidGYtaW1hZ2UtZGFzaGJvYXJkIildLElvKTt2YXIgc3g9RWUoT2UoKSwxKTt2YXIgZHY7KGZ1bmN0aW9uKGUpe2VbZS5DQU5DRUxMRUQ9MV09IkNBTkNFTExFRCJ9KShkdnx8KGR2PXt9KSk7dmFyIGxWOyhmdW5jdGlvbihlKXtlW2UuVkVSVEVYPTFdPSJWRVJURVgiLGVbZS5GQUNFPTJdPSJGQUNFIixlW2UuQ09MT1I9M109IkNPTE9SIn0pKGxWfHwobFY9e30pKTt2YXIgR2N0OyhmdW5jdGlvbihlKXtlLlZFUlRFWD0iZmxvYXQzMiIsZS5GQUNFPSJpbnQzMiIsZS5DT0xPUj0idWludDgifSkoR2N0fHwoR2N0PXt9KSk7dmFyIFBQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NhbmNlbGxlcj1uZXcgYW4sdGhpcy5fcmVxdWVzdE1hbmFnZXI9dH1yZWxvYWQodCxyLG4pe3JldHVybiB0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCksdGhpcy5fZmV0Y2hNZXRhZGF0YSh0LHIsbil9X2ZldGNoRGF0YUJ5U3RlcCh0LHIsbixpLG8sYSl7bGV0IHM9dmUoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9kYXRhIixuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6cixydW46dCxjb250ZW50X3R5cGU6bixzYW1wbGU6U3RyaW5nKGkpLHN0ZXA6U3RyaW5nKG8pfSkpLGw9ZnVuY3Rpb24odSl7bGV0IGY9W107Zm9yKGxldCBwPTA7cDx1Lmxlbmd0aC8zO3ArKyl7bGV0IGQ9W107Zm9yKGxldCBnPTA7ZzwzO2crKylkLnB1c2godVtwKjMrZ10pO2YucHVzaChkKX1yZXR1cm4gZn0sYz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUodT0+e2lmKHUuY2FuY2VsbGVkKXJldHVybiBQcm9taXNlLnJlamVjdCh7Y29kZTpkdi5DQU5DRUxMRUQsbWVzc2FnZToiUmVzcG9uc2Ugd2FzIGludmFsaWRhdGVkLiJ9KTtsZXQgaD11LnZhbHVlO3N3aXRjaChuKXtjYXNlIlZFUlRFWCI6YS52ZXJ0aWNlcz1sKG5ldyBGbG9hdDMyQXJyYXkoaCkpO2JyZWFrO2Nhc2UiRkFDRSI6YS5mYWNlcz1sKG5ldyBJbnQzMkFycmF5KGgpKTticmVhaztjYXNlIkNPTE9SIjphLmNvbG9ycz1sKG5ldyBVaW50OEFycmF5KGgpKTticmVha31yZXR1cm4gYX0pO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5mZXRjaChzLHttZXRob2Q6IkdFVCIsaGVhZGVyczp7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIsY29udGVudFR5cGU6R2N0W25dfX0pLnRoZW4odT0+dS5hcnJheUJ1ZmZlcigpKS50aGVuKGMpfWZldGNoRGF0YSh0LHIsbixpKXtsZXQgbz1bXSxhPW5ldyBNYXA7cmV0dXJuIE9iamVjdC5rZXlzKGxWKS5mb3JFYWNoKHM9PntsZXQgbD0xPDxsVltzXTt0LmNvbXBvbmVudHMmbCYmby5wdXNoKHRoaXMuX2ZldGNoRGF0YUJ5U3RlcChyLG4scyxpLHQuc3RlcCxhKSl9KSxQcm9taXNlLmFsbChvKX1fZmV0Y2hNZXRhZGF0YSh0LHIsbil7dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO2xldCBpPXZlKCkucGx1Z2luUm91dGUoIm1lc2giLCIvbWVzaGVzIixuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6cixydW46dCxzYW1wbGU6bn0pKSxvPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZShhPT5hLmNhbmNlbGxlZD9Qcm9taXNlLnJlamVjdCh7Y29kZTpkdi5DQU5DRUxMRUQsbWVzc2FnZToiUmVzcG9uc2Ugd2FzIGludmFsaWRhdGVkLiJ9KTphLnZhbHVlKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIuZmV0Y2goaSkudGhlbihhPT5hLmpzb24oKSkudGhlbihvKS50aGVuKHRoaXMuX3Byb2Nlc3NNZXRhZGF0YS5iaW5kKHRoaXMpKX1fcHJvY2Vzc01ldGFkYXRhKHQpe2lmKCF0KXJldHVybjtsZXQgcj1uZXcgTWFwO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtsZXQgbz10W2ldO3IuaGFzKG8uc3RlcCl8fHIuc2V0KG8uc3RlcCxbXSksci5nZXQoby5zdGVwKS5wdXNoKG8pfWxldCBuPVtdO3JldHVybiByLmZvckVhY2goaT0+e2xldCBvPXRoaXMuX2NyZWF0ZVN0ZXBEYXR1bShpWzBdKTtuLnB1c2gobyl9KSxufV9jcmVhdGVTdGVwRGF0dW0odCl7cmV0dXJue3dhbGxfdGltZTpuZXcgRGF0ZSh0LndhbGxfdGltZSoxZTMpLHN0ZXA6dC5zdGVwLGNvbmZpZzp0LmNvbmZpZyxjb250ZW50X3R5cGU6dC5jb250ZW50X3R5cGUsY29tcG9uZW50czp0LmNvbXBvbmVudHN9fX07dmFyIHdNPXt9O0tzKHdNLHtBQ0VTRmlsbWljVG9uZU1hcHBpbmc6KCk9PmxmZSxBZGRFcXVhdGlvbjooKT0+TXYsQWRkT3BlcmF0aW9uOigpPT5pZmUsQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGU6KCk9PlJodCxBZGRpdGl2ZUJsZW5kaW5nOigpPT5FdXQsQWxwaGFGb3JtYXQ6KCk9Pm1mZSxBbHdheXNEZXB0aDooKT0+WmhlLEFsd2F5c1N0ZW5jaWxGdW5jOigpPT5MZmUsQW1iaWVudExpZ2h0OigpPT5JNixBbWJpZW50TGlnaHRQcm9iZTooKT0+T1UsQW5pbWF0aW9uQ2xpcDooKT0+UXYsQW5pbWF0aW9uTG9hZGVyOigpPT5haHQsQW5pbWF0aW9uTWl4ZXI6KCk9PkhVLEFuaW1hdGlvbk9iamVjdEdyb3VwOigpPT5CVSxBbmltYXRpb25VdGlsczooKT0+am4sQXJjQ3VydmU6KCk9PnM2LEFycmF5Q2FtZXJhOigpPT5yNixBcnJvd0hlbHBlcjooKT0+RWh0LEF1ZGlvOigpPT5ONixBdWRpb0FuYWx5c2VyOigpPT56VSxBdWRpb0NvbnRleHQ6KCk9PkZodCxBdWRpb0xpc3RlbmVyOigpPT51aHQsQXVkaW9Mb2FkZXI6KCk9Pk5VLEF4ZXNIZWxwZXI6KCk9PnZNLEF4aXNIZWxwZXI6KCk9PlcwcixCYWNrU2lkZTooKT0+SWksQmFzaWNEZXB0aFBhY2tpbmc6KCk9PkFmZSxCYXNpY1NoYWRvd01hcDooKT0+dWhyLEJpbmFyeVRleHR1cmVMb2FkZXI6KCk9PkswcixCb25lOigpPT5zTSxCb29sZWFuS2V5ZnJhbWVUcmFjazooKT0+YW0sQm91bmRpbmdCb3hIZWxwZXI6KCk9PlkwcixCb3gyOigpPT4kMCxCb3gzOigpPT50YSxCb3gzSGVscGVyOigpPT5TaHQsQm94QnVmZmVyR2VvbWV0cnk6KCk9PlFmLEJveEdlb21ldHJ5OigpPT5RZixCb3hIZWxwZXI6KCk9PnlNLEJ1ZmZlckF0dHJpYnV0ZTooKT0+SmUsQnVmZmVyR2VvbWV0cnk6KCk9PlBlLEJ1ZmZlckdlb21ldHJ5TG9hZGVyOigpPT5rVSxCeXRlVHlwZTooKT0+dWZlLENhY2hlOigpPT50eCxDYW1lcmE6KCk9PlJ2LENhbWVyYUhlbHBlcjooKT0+d2h0LENhbnZhc1JlbmRlcmVyOigpPT5KMHIsQ2FudmFzVGV4dHVyZTooKT0+dlUsQ2F0bXVsbFJvbUN1cnZlMzooKT0+bDYsQ2luZW9uVG9uZU1hcHBpbmc6KCk9PnNmZSxDaXJjbGVCdWZmZXJHZW9tZXRyeTooKT0+RnYsQ2lyY2xlR2VvbWV0cnk6KCk9PkZ2LENsYW1wVG9FZGdlV3JhcHBpbmc6KCk9PkpvLENsb2NrOigpPT5tTSxDb2xvcjooKT0+bmUsQ29sb3JLZXlmcmFtZVRyYWNrOigpPT5TNixDb21wcmVzc2VkVGV4dHVyZTooKT0+bzYsQ29tcHJlc3NlZFRleHR1cmVMb2FkZXI6KCk9PnNodCxDb25lQnVmZmVyR2VvbWV0cnk6KCk9PkJ2LENvbmVHZW9tZXRyeTooKT0+QnYsQ3ViZUNhbWVyYTooKT0+SjMsQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOigpPT5ueCxDdWJlUmVmcmFjdGlvbk1hcHBpbmc6KCk9Pml4LEN1YmVUZXh0dXJlOigpPT5IMCxDdWJlVGV4dHVyZUxvYWRlcjooKT0+RVUsQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmc6KCk9PnhNLEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOigpPT5PNixDdWJpY0JlemllckN1cnZlOigpPT5jTSxDdWJpY0JlemllckN1cnZlMzooKT0+YzYsQ3ViaWNJbnRlcnBvbGFudDooKT0+d1UsQ3VsbEZhY2VCYWNrOigpPT5NdXQsQ3VsbEZhY2VGcm9udDooKT0+T2hlLEN1bGxGYWNlRnJvbnRCYWNrOigpPT5jaHIsQ3VsbEZhY2VOb25lOigpPT5EaGUsQ3VydmU6KCk9PmZzLEN1cnZlUGF0aDooKT0+YlUsQ3VzdG9tQmxlbmRpbmc6KCk9PkZoZSxDdXN0b21Ub25lTWFwcGluZzooKT0+Y2ZlLEN5bGluZGVyQnVmZmVyR2VvbWV0cnk6KCk9Pm9tLEN5bGluZGVyR2VvbWV0cnk6KCk9Pm9tLEN5bGluZHJpY2FsOigpPT5naHQsRGF0YVRleHR1cmU6KCk9PkpkLERhdGFUZXh0dXJlMkRBcnJheTooKT0+dE0sRGF0YVRleHR1cmUzRDooKT0+ZTYsRGF0YVRleHR1cmVMb2FkZXI6KCk9PlRVLERhdGFVdGlsczooKT0+Q2h0LERlY3JlbWVudFN0ZW5jaWxPcDooKT0+YmhyLERlY3JlbWVudFdyYXBTdGVuY2lsT3A6KCk9PlNocixEZWZhdWx0TG9hZGluZ01hbmFnZXI6KCk9PlFmZSxEZXB0aEZvcm1hdDooKT0+ejAsRGVwdGhTdGVuY2lsRm9ybWF0OigpPT5rdixEZXB0aFRleHR1cmU6KCk9Pm5NLERpcmVjdGlvbmFsTGlnaHQ6KCk9PlA2LERpcmVjdGlvbmFsTGlnaHRIZWxwZXI6KCk9PmJodCxEaXNjcmV0ZUludGVycG9sYW50OigpPT5TVSxEb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+SHYsRG9kZWNhaGVkcm9uR2VvbWV0cnk6KCk9Pkh2LERvdWJsZVNpZGU6KCk9Pkx2LERzdEFscGhhRmFjdG9yOigpPT5XaGUsRHN0Q29sb3JGYWN0b3I6KCk9PmpoZSxEeW5hbWljQnVmZmVyQXR0cmlidXRlOigpPT5EMHIsRHluYW1pY0NvcHlVc2FnZTooKT0+emhyLER5bmFtaWNEcmF3VXNhZ2U6KCk9PlkzLER5bmFtaWNSZWFkVXNhZ2U6KCk9Pk5ocixFZGdlc0dlb21ldHJ5OigpPT5hNixFZGdlc0hlbHBlcjooKT0+ajByLEVsbGlwc2VDdXJ2ZTooKT0+VnYsRXF1YWxEZXB0aDooKT0+UWhlLEVxdWFsU3RlbmNpbEZ1bmM6KCk9PkNocixFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZzooKT0+V1AsRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmc6KCk9PllQLEV1bGVyOigpPT50bSxFdmVudERpc3BhdGNoZXI6KCk9PlVzLEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTooKT0+aGgsRXh0cnVkZUdlb21ldHJ5OigpPT5oaCxGYWNlQ29sb3JzOigpPT5NMHIsRmlsZUxvYWRlcjooKT0+SmMsRmxhdFNoYWRpbmc6KCk9PlBodCxGbG9hdDE2QnVmZmVyQXR0cmlidXRlOigpPT5wVSxGbG9hdDMyQXR0cmlidXRlOigpPT5xMHIsRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+eGUsRmxvYXQ2NEF0dHJpYnV0ZTooKT0+RzByLEZsb2F0NjRCdWZmZXJBdHRyaWJ1dGU6KCk9PmRVLEZsb2F0VHlwZTooKT0+amQsRm9nOigpPT56dixGb2dFeHAyOigpPT5PdixGb250OigpPT5vX3IsRm9udExvYWRlcjooKT0+aV9yLEZyYW1lYnVmZmVyVGV4dHVyZTooKT0+eVUsRnJvbnRTaWRlOigpPT5JdixGcnVzdHVtOigpPT5OdixHTEJ1ZmZlckF0dHJpYnV0ZTooKT0+VVUsR0xTTDE6KCk9PkJocixHTFNMMzooKT0+WnV0LEdyZWF0ZXJEZXB0aDooKT0+ZWZlLEdyZWF0ZXJFcXVhbERlcHRoOigpPT50ZmUsR3JlYXRlckVxdWFsU3RlbmNpbEZ1bmM6KCk9PkxocixHcmVhdGVyU3RlbmNpbEZ1bmM6KCk9PlBocixHcmlkSGVscGVyOigpPT5XVSxHcm91cDooKT0+WGQsSGFsZkZsb2F0VHlwZTooKT0+Q3YsSGVtaXNwaGVyZUxpZ2h0OigpPT5FNixIZW1pc3BoZXJlTGlnaHRIZWxwZXI6KCk9PnZodCxIZW1pc3BoZXJlTGlnaHRQcm9iZTooKT0+RFUsSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+R3YsSWNvc2FoZWRyb25HZW9tZXRyeTooKT0+R3YsSW1hZ2VCaXRtYXBMb2FkZXI6KCk9PlJVLEltYWdlTG9hZGVyOigpPT5leCxJbWFnZVV0aWxzOigpPT5LZixJbW1lZGlhdGVSZW5kZXJPYmplY3Q6KCk9PmFfcixJbmNyZW1lbnRTdGVuY2lsT3A6KCk9PnhocixJbmNyZW1lbnRXcmFwU3RlbmNpbE9wOigpPT53aHIsSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOigpPT5ybSxJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeTooKT0+UjYsSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI6KCk9PlZVLEluc3RhbmNlZE1lc2g6KCk9Pm42LEludDE2QXR0cmlidXRlOigpPT5CMHIsSW50MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PmhVLEludDMyQXR0cmlidXRlOigpPT5WMHIsSW50MzJCdWZmZXJBdHRyaWJ1dGU6KCk9PmZVLEludDhBdHRyaWJ1dGU6KCk9Pk8wcixJbnQ4QnVmZmVyQXR0cmlidXRlOigpPT5sVSxJbnRUeXBlOigpPT5mZmUsSW50ZXJsZWF2ZWRCdWZmZXI6KCk9PmVtLEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOigpPT50cCxJbnRlcnBvbGFudDooKT0+ZmgsSW50ZXJwb2xhdGVEaXNjcmV0ZTooKT0+JFAsSW50ZXJwb2xhdGVMaW5lYXI6KCk9PktQLEludGVycG9sYXRlU21vb3RoOigpPT5lVSxJbnZlcnRTdGVuY2lsT3A6KCk9Pk1ocixKU09OTG9hZGVyOigpPT5RMHIsS2VlcFN0ZW5jaWxPcDooKT0+clUsS2V5ZnJhbWVUcmFjazooKT0+RGwsTE9EOigpPT5nVSxMYXRoZUJ1ZmZlckdlb21ldHJ5OigpPT5XdixMYXRoZUdlb21ldHJ5OigpPT5XdixMYXllcnM6KCk9PlgzLExlbnNGbGFyZTooKT0+ZV9yLExlc3NEZXB0aDooKT0+SmhlLExlc3NFcXVhbERlcHRoOigpPT5uVSxMZXNzRXF1YWxTdGVuY2lsRnVuYzooKT0+QWhyLExlc3NTdGVuY2lsRnVuYzooKT0+VGhyLExpZ2h0OigpPT5PbCxMaWdodFByb2JlOigpPT5yeCxMaW5lOigpPT5jaCxMaW5lMzooKT0+cVUsTGluZUJhc2ljTWF0ZXJpYWw6KCk9PkdpLExpbmVDdXJ2ZTooKT0+VXYsTGluZUN1cnZlMzooKT0+eFUsTGluZURhc2hlZE1hdGVyaWFsOigpPT5iNixMaW5lTG9vcDooKT0+aTYsTGluZVBpZWNlczooKT0+dzByLExpbmVTZWdtZW50czooKT0+QWEsTGluZVN0cmlwOigpPT5iMHIsTGluZWFyRW5jb2Rpbmc6KCk9PlFkLExpbmVhckZpbHRlcjooKT0+b2ksTGluZWFySW50ZXJwb2xhbnQ6KCk9Pnc2LExpbmVhck1pcE1hcExpbmVhckZpbHRlcjooKT0+bWhyLExpbmVhck1pcE1hcE5lYXJlc3RGaWx0ZXI6KCk9PmRocixMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXI6KCk9Pm94LExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXI6KCk9PmtodCxMaW5lYXJUb25lTWFwcGluZzooKT0+b2ZlLExvYWRlcjooKT0+ZWEsTG9hZGVyVXRpbHM6KCk9PmRNLExvYWRpbmdNYW5hZ2VyOigpPT5NNixMb29wT25jZTooKT0+TWZlLExvb3BQaW5nUG9uZzooKT0+VGZlLExvb3BSZXBlYXQ6KCk9PkVmZSxMdW1pbmFuY2VBbHBoYUZvcm1hdDooKT0+X2ZlLEx1bWluYW5jZUZvcm1hdDooKT0+Z2ZlLE1PVVNFOigpPT5LMCxNYXRlcmlhbDooKT0+cWksTWF0ZXJpYWxMb2FkZXI6KCk9PkxVLE1hdGg6KCk9PlFocixNYXRoVXRpbHM6KCk9PlFocixNYXRyaXgzOigpPT5raSxNYXRyaXg0OigpPT5NZSxNYXhFcXVhdGlvbjooKT0+UHV0LE1lc2g6KCk9PmVpLE1lc2hCYXNpY01hdGVyaWFsOigpPT5zaCxNZXNoRGVwdGhNYXRlcmlhbDooKT0+ZU0sTWVzaERpc3RhbmNlTWF0ZXJpYWw6KCk9PnJNLE1lc2hGYWNlTWF0ZXJpYWw6KCk9PlQwcixNZXNoTGFtYmVydE1hdGVyaWFsOigpPT52NixNZXNoTWF0Y2FwTWF0ZXJpYWw6KCk9Png2LE1lc2hOb3JtYWxNYXRlcmlhbDooKT0+eTYsTWVzaFBob25nTWF0ZXJpYWw6KCk9Pmc2LE1lc2hQaHlzaWNhbE1hdGVyaWFsOigpPT5tNixNZXNoU3RhbmRhcmRNYXRlcmlhbDooKT0+cE0sTWVzaFRvb25NYXRlcmlhbDooKT0+XzYsTWluRXF1YXRpb246KCk9PkF1dCxNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOigpPT5YUCxNaXhPcGVyYXRpb246KCk9Pm5mZSxNdWx0aU1hdGVyaWFsOigpPT5DMHIsTXVsdGlwbHlCbGVuZGluZzooKT0+Q3V0LE11bHRpcGx5T3BlcmF0aW9uOigpPT5ENixOZWFyZXN0RmlsdGVyOigpPT5MaSxOZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyOigpPT5waHIsTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXI6KCk9PmZocixOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyOigpPT5vVSxOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlcjooKT0+aVUsTmV2ZXJEZXB0aDooKT0+S2hlLE5ldmVyU3RlbmNpbEZ1bmM6KCk9PkVocixOb0JsZW5kaW5nOigpPT4kZCxOb0NvbG9yczooKT0+UzByLE5vVG9uZU1hcHBpbmc6KCk9PktkLE5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZTooKT0+WFUsTm9ybWFsQmxlbmRpbmc6KCk9PlYzLE5vdEVxdWFsRGVwdGg6KCk9PnJmZSxOb3RFcXVhbFN0ZW5jaWxGdW5jOigpPT5JaHIsTnVtYmVyS2V5ZnJhbWVUcmFjazooKT0+WnYsT2JqZWN0M0Q6KCk9Pm9yLE9iamVjdExvYWRlcjooKT0+bGh0LE9iamVjdFNwYWNlTm9ybWFsTWFwOigpPT5JZmUsT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5XMCxPY3RhaGVkcm9uR2VvbWV0cnk6KCk9PlcwLE9uZUZhY3RvcjooKT0+VWhlLE9uZU1pbnVzRHN0QWxwaGFGYWN0b3I6KCk9PlloZSxPbmVNaW51c0RzdENvbG9yRmFjdG9yOigpPT5YaGUsT25lTWludXNTcmNBbHBoYUZhY3RvcjooKT0+TGh0LE9uZU1pbnVzU3JjQ29sb3JGYWN0b3I6KCk9PkdoZSxPcnRob2dyYXBoaWNDYW1lcmE6KCk9PkR2LFBDRlNoYWRvd01hcDooKT0+QWh0LFBDRlNvZnRTaGFkb3dNYXA6KCk9PnpoZSxQTVJFTUdlbmVyYXRvcjooKT0+dDYsUGFyYW1ldHJpY0dlb21ldHJ5OigpPT5yX3IsUGFydGljbGU6KCk9PlAwcixQYXJ0aWNsZUJhc2ljTWF0ZXJpYWw6KCk9PmswcixQYXJ0aWNsZVN5c3RlbTooKT0+STByLFBhcnRpY2xlU3lzdGVtTWF0ZXJpYWw6KCk9PlIwcixQYXRoOigpPT5xdixQZXJzcGVjdGl2ZUNhbWVyYTooKT0+VWksUGxhbmU6KCk9PiRjLFBsYW5lQnVmZmVyR2VvbWV0cnk6KCk9PlYwLFBsYW5lR2VvbWV0cnk6KCk9PlYwLFBsYW5lSGVscGVyOigpPT5NaHQsUG9pbnRDbG91ZDooKT0+QTByLFBvaW50Q2xvdWRNYXRlcmlhbDooKT0+TDByLFBvaW50TGlnaHQ6KCk9PkE2LFBvaW50TGlnaHRIZWxwZXI6KCk9PnlodCxQb2ludHM6KCk9PmltLFBvaW50c01hdGVyaWFsOigpPT5ubSxQb2xhckdyaWRIZWxwZXI6KCk9PnhodCxQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk6KCk9PnVoLFBvbHloZWRyb25HZW9tZXRyeTooKT0+dWgsUG9zaXRpb25hbEF1ZGlvOigpPT5oaHQsUHJvcGVydHlCaW5kaW5nOigpPT5DcixQcm9wZXJ0eU1peGVyOigpPT5GVSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTooKT0+dU0sUXVhZHJhdGljQmV6aWVyQ3VydmUzOigpPT5oTSxRdWF0ZXJuaW9uOigpPT52aSxRdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjazooKT0+WDAsUXVhdGVybmlvbkxpbmVhckludGVycG9sYW50OigpPT5NVSxSRVZJU0lPTjooKT0+WVUsUkdCQURlcHRoUGFja2luZzooKT0+UGZlLFJHQkFGb3JtYXQ6KCk9PlFvLFJHQkFJbnRlZ2VyRm9ybWF0OigpPT53ZmUsUkdCQV9BU1RDXzEweDEwX0Zvcm1hdDooKT0+anV0LFJHQkFfQVNUQ18xMHg1X0Zvcm1hdDooKT0+R3V0LFJHQkFfQVNUQ18xMHg2X0Zvcm1hdDooKT0+V3V0LFJHQkFfQVNUQ18xMHg4X0Zvcm1hdDooKT0+WXV0LFJHQkFfQVNUQ18xMngxMF9Gb3JtYXQ6KCk9Plh1dCxSR0JBX0FTVENfMTJ4MTJfRm9ybWF0OigpPT4kdXQsUkdCQV9BU1RDXzR4NF9Gb3JtYXQ6KCk9Pk91dCxSR0JBX0FTVENfNXg0X0Zvcm1hdDooKT0+enV0LFJHQkFfQVNUQ181eDVfRm9ybWF0OigpPT5GdXQsUkdCQV9BU1RDXzZ4NV9Gb3JtYXQ6KCk9PkJ1dCxSR0JBX0FTVENfNng2X0Zvcm1hdDooKT0+SHV0LFJHQkFfQVNUQ184eDVfRm9ybWF0OigpPT5WdXQsUkdCQV9BU1RDXzh4Nl9Gb3JtYXQ6KCk9PlV1dCxSR0JBX0FTVENfOHg4X0Zvcm1hdDooKT0+cXV0LFJHQkFfQlBUQ19Gb3JtYXQ6KCk9Pkt1dCxSR0JBX0VUQzJfRUFDX0Zvcm1hdDooKT0+RHV0LFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdDooKT0+UnV0LFJHQkFfUFZSVENfNEJQUFYxX0Zvcm1hdDooKT0+a3V0LFJHQkFfUzNUQ19EWFQxX0Zvcm1hdDooKT0+SlYsUkdCQV9TM1RDX0RYVDNfRm9ybWF0OigpPT5RVixSR0JBX1MzVENfRFhUNV9Gb3JtYXQ6KCk9PnRVLFJHQl9FVEMxX0Zvcm1hdDooKT0+U2ZlLFJHQl9FVEMyX0Zvcm1hdDooKT0+TnV0LFJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0OigpPT5MdXQsUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQ6KCk9Pkl1dCxSR0JfUzNUQ19EWFQxX0Zvcm1hdDooKT0+WlYsUkdGb3JtYXQ6KCk9PnhmZSxSR0ludGVnZXJGb3JtYXQ6KCk9PmJmZSxSYXdTaGFkZXJNYXRlcmlhbDooKT0+VTAsUmF5OigpPT5KZixSYXljYXN0ZXI6KCk9PmRodCxSZWN0QXJlYUxpZ2h0OigpPT5MNixSZWRGb3JtYXQ6KCk9PnlmZSxSZWRJbnRlZ2VyRm9ybWF0OigpPT52ZmUsUmVpbmhhcmRUb25lTWFwcGluZzooKT0+YWZlLFJlcGVhdFdyYXBwaW5nOigpPT5qUCxSZXBsYWNlU3RlbmNpbE9wOigpPT52aHIsUmV2ZXJzZVN1YnRyYWN0RXF1YXRpb246KCk9PkhoZSxSaW5nQnVmZmVyR2VvbWV0cnk6KCk9Pll2LFJpbmdHZW9tZXRyeTooKT0+WXYsU2NlbmU6KCk9PnEwLFNjZW5lVXRpbHM6KCk9PnRfcixTaGFkZXJDaHVuazooKT0+aHIsU2hhZGVyTGliOigpPT5haCxTaGFkZXJNYXRlcmlhbDooKT0+bGgsU2hhZG93TWF0ZXJpYWw6KCk9PmQ2LFNoYXBlOigpPT5LYyxTaGFwZUJ1ZmZlckdlb21ldHJ5OigpPT5ZMCxTaGFwZUdlb21ldHJ5OigpPT5ZMCxTaGFwZVBhdGg6KCk9PlRodCxTaGFwZVV0aWxzOigpPT5aYyxTaG9ydFR5cGU6KCk9PmhmZSxTa2VsZXRvbjooKT0+bE0sU2tlbGV0b25IZWxwZXI6KCk9PkdVLFNraW5uZWRNZXNoOigpPT5hTSxTbW9vdGhTaGFkaW5nOigpPT5oaHIsU3BoZXJlOigpPT5aZixTcGhlcmVCdWZmZXJHZW9tZXRyeTooKT0+ajAsU3BoZXJlR2VvbWV0cnk6KCk9PmowLFNwaGVyaWNhbDooKT0+X00sU3BoZXJpY2FsSGFybW9uaWNzMzooKT0+azYsU3BsaW5lQ3VydmU6KCk9PmZNLFNwb3RMaWdodDooKT0+QzYsU3BvdExpZ2h0SGVscGVyOigpPT5faHQsU3ByaXRlOigpPT5vTSxTcHJpdGVNYXRlcmlhbDooKT0+aU0sU3JjQWxwaGFGYWN0b3I6KCk9PklodCxTcmNBbHBoYVNhdHVyYXRlRmFjdG9yOigpPT4kaGUsU3JjQ29sb3JGYWN0b3I6KCk9PnFoZSxTdGF0aWNDb3B5VXNhZ2U6KCk9Pk9ocixTdGF0aWNEcmF3VXNhZ2U6KCk9PlczLFN0YXRpY1JlYWRVc2FnZTooKT0+UmhyLFN0ZXJlb0NhbWVyYTooKT0+Y2h0LFN0cmVhbUNvcHlVc2FnZTooKT0+RmhyLFN0cmVhbURyYXdVc2FnZTooKT0+a2hyLFN0cmVhbVJlYWRVc2FnZTooKT0+RGhyLFN0cmluZ0tleWZyYW1lVHJhY2s6KCk9PnNtLFN1YnRyYWN0RXF1YXRpb246KCk9PkJoZSxTdWJ0cmFjdGl2ZUJsZW5kaW5nOigpPT5UdXQsVE9VQ0g6KCk9PlowLFRhbmdlbnRTcGFjZU5vcm1hbE1hcDooKT0+YXgsVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+anYsVGV0cmFoZWRyb25HZW9tZXRyeTooKT0+anYsVGV4dEdlb21ldHJ5OigpPT5uX3IsVGV4dHVyZTooKT0+eGksVGV4dHVyZUxvYWRlcjooKT0+Q1UsVG9ydXNCdWZmZXJHZW9tZXRyeTooKT0+WHYsVG9ydXNHZW9tZXRyeTooKT0+WHYsVG9ydXNLbm90QnVmZmVyR2VvbWV0cnk6KCk9PiR2LFRvcnVzS25vdEdlb21ldHJ5OigpPT4kdixUcmlhbmdsZTooKT0+YWksVHJpYW5nbGVGYW5EcmF3TW9kZTooKT0+X2hyLFRyaWFuZ2xlU3RyaXBEcmF3TW9kZTooKT0+Z2hyLFRyaWFuZ2xlc0RyYXdNb2RlOigpPT5DZmUsVHViZUJ1ZmZlckdlb21ldHJ5OigpPT5LdixUdWJlR2VvbWV0cnk6KCk9Pkt2LFVWTWFwcGluZzooKT0+alUsVWludDE2QXR0cmlidXRlOigpPT5IMHIsVWludDE2QnVmZmVyQXR0cmlidXRlOigpPT4kMyxVaW50MzJBdHRyaWJ1dGU6KCk9PlUwcixVaW50MzJCdWZmZXJBdHRyaWJ1dGU6KCk9PkszLFVpbnQ4QXR0cmlidXRlOigpPT56MHIsVWludDhCdWZmZXJBdHRyaWJ1dGU6KCk9PmNVLFVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZTooKT0+RjByLFVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZTooKT0+dVUsVW5pZm9ybTooKT0+Z00sVW5pZm9ybXNMaWI6KCk9PnJlLFVuaWZvcm1zVXRpbHM6KCk9Pk9mZSxVbnNpZ25lZEJ5dGVUeXBlOigpPT5aZCxVbnNpZ25lZEludDI0OFR5cGU6KCk9PkF2LFVuc2lnbmVkSW50VHlwZTooKT0+SFAsVW5zaWduZWRTaG9ydDQ0NDRUeXBlOigpPT5wZmUsVW5zaWduZWRTaG9ydDU1NTFUeXBlOigpPT5kZmUsVW5zaWduZWRTaG9ydFR5cGU6KCk9PkczLFZTTVNoYWRvd01hcDooKT0+RjMsVmVjdG9yMjooKT0+THQsVmVjdG9yMzooKT0+aixWZWN0b3I0OigpPT5lbixWZWN0b3JLZXlmcmFtZVRyYWNrOigpPT5KdixWZXJ0ZXg6KCk9Pk4wcixWZXJ0ZXhDb2xvcnM6KCk9PkUwcixWaWRlb1RleHR1cmU6KCk9Pl9VLFdlYkdMMVJlbmRlcmVyOigpPT5tVSxXZWJHTEN1YmVSZW5kZXJUYXJnZXQ6KCk9PlEzLFdlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzOigpPT5zVSxXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0OigpPT5qMyxXZWJHTFJlbmRlclRhcmdldDooKT0+dXMsV2ViR0xSZW5kZXJUYXJnZXRDdWJlOigpPT5aMHIsV2ViR0xSZW5kZXJlcjooKT0+cm4sV2ViR0xVdGlsczooKT0+WGZlLFdpcmVmcmFtZUdlb21ldHJ5OigpPT5wNixXaXJlZnJhbWVIZWxwZXI6KCk9PlgwcixXcmFwQXJvdW5kRW5kaW5nOigpPT5aUCxYSFJMb2FkZXI6KCk9PiQwcixaZXJvQ3VydmF0dXJlRW5kaW5nOigpPT5FdixaZXJvRmFjdG9yOigpPT5WaGUsWmVyb1Nsb3BlRW5kaW5nOigpPT5UdixaZXJvU3RlbmNpbE9wOigpPT55aHIsX1NSR0JBRm9ybWF0OigpPT5hVSxzUkdCRW5jb2Rpbmc6KCk9PllufSk7dmFyIFlVPSIxMzciLEswPXtMRUZUOjAsTUlERExFOjEsUklHSFQ6MixST1RBVEU6MCxET0xMWToxLFBBTjoyfSxaMD17Uk9UQVRFOjAsUEFOOjEsRE9MTFlfUEFOOjIsRE9MTFlfUk9UQVRFOjN9LERoZT0wLE11dD0xLE9oZT0yLGNocj0zLHVocj0wLEFodD0xLHpoZT0yLEYzPTMsSXY9MCxJaT0xLEx2PTIsUGh0PTEsaGhyPTIsJGQ9MCxWMz0xLEV1dD0yLFR1dD0zLEN1dD00LEZoZT01LE12PTEwMCxCaGU9MTAxLEhoZT0xMDIsQXV0PTEwMyxQdXQ9MTA0LFZoZT0yMDAsVWhlPTIwMSxxaGU9MjAyLEdoZT0yMDMsSWh0PTIwNCxMaHQ9MjA1LFdoZT0yMDYsWWhlPTIwNyxqaGU9MjA4LFhoZT0yMDksJGhlPTIxMCxLaGU9MCxaaGU9MSxKaGU9MixuVT0zLFFoZT00LHRmZT01LGVmZT02LHJmZT03LEQ2PTAsbmZlPTEsaWZlPTIsS2Q9MCxvZmU9MSxhZmU9MixzZmU9MyxsZmU9NCxjZmU9NSxqVT0zMDAsbng9MzAxLGl4PTMwMixXUD0zMDMsWVA9MzA0LHhNPTMwNixPNj0zMDcsalA9MWUzLEpvPTEwMDEsWFA9MTAwMixMaT0xMDAzLGlVPTEwMDQsZmhyPTEwMDQsb1U9MTAwNSxwaHI9MTAwNSxvaT0xMDA2LGtodD0xMDA3LGRocj0xMDA3LG94PTEwMDgsbWhyPTEwMDgsWmQ9MTAwOSx1ZmU9MTAxMCxoZmU9MTAxMSxHMz0xMDEyLGZmZT0xMDEzLEhQPTEwMTQsamQ9MTAxNSxDdj0xMDE2LHBmZT0xMDE3LGRmZT0xMDE4LEF2PTEwMjAsbWZlPTEwMjEsUW89MTAyMyxnZmU9MTAyNCxfZmU9MTAyNSx6MD0xMDI2LGt2PTEwMjcseWZlPTEwMjgsdmZlPTEwMjkseGZlPTEwMzAsYmZlPTEwMzEsd2ZlPTEwMzMsWlY9MzM3NzYsSlY9MzM3NzcsUVY9MzM3NzgsdFU9MzM3NzksSXV0PTM1ODQwLEx1dD0zNTg0MSxrdXQ9MzU4NDIsUnV0PTM1ODQzLFNmZT0zNjE5NixOdXQ9Mzc0OTIsRHV0PTM3NDk2LE91dD0zNzgwOCx6dXQ9Mzc4MDksRnV0PTM3ODEwLEJ1dD0zNzgxMSxIdXQ9Mzc4MTIsVnV0PTM3ODEzLFV1dD0zNzgxNCxxdXQ9Mzc4MTUsR3V0PTM3ODE2LFd1dD0zNzgxNyxZdXQ9Mzc4MTgsanV0PTM3ODE5LFh1dD0zNzgyMCwkdXQ9Mzc4MjEsS3V0PTM2NDkyLE1mZT0yMjAwLEVmZT0yMjAxLFRmZT0yMjAyLCRQPTIzMDAsS1A9MjMwMSxlVT0yMzAyLEV2PTI0MDAsVHY9MjQwMSxaUD0yNDAyLFhVPTI1MDAsUmh0PTI1MDEsQ2ZlPTAsZ2hyPTEsX2hyPTIsUWQ9M2UzLFluPTMwMDEsQWZlPTMyMDAsUGZlPTMyMDEsYXg9MCxJZmU9MSx5aHI9MCxyVT03NjgwLHZocj03NjgxLHhocj03NjgyLGJocj03NjgzLHdocj0zNDA1NSxTaHI9MzQwNTYsTWhyPTUzODYsRWhyPTUxMixUaHI9NTEzLENocj01MTQsQWhyPTUxNSxQaHI9NTE2LElocj01MTcsTGhyPTUxOCxMZmU9NTE5LFczPTM1MDQ0LFkzPTM1MDQ4LGtocj0zNTA0MCxSaHI9MzUwNDUsTmhyPTM1MDQ5LERocj0zNTA0MSxPaHI9MzUwNDYsemhyPTM1MDUwLEZocj0zNTA0MixCaHI9IjEwMCIsWnV0PSIzMDAgZXMiLGFVPTEwMzUsVXM9Y2xhc3N7YWRkRXZlbnRMaXN0ZW5lcih0LHIpe3RoaXMuX2xpc3RlbmVycz09PXZvaWQgMCYmKHRoaXMuX2xpc3RlbmVycz17fSk7bGV0IG49dGhpcy5fbGlzdGVuZXJzO25bdF09PT12b2lkIDAmJihuW3RdPVtdKSxuW3RdLmluZGV4T2Yocik9PT0tMSYmblt0XS5wdXNoKHIpfWhhc0V2ZW50TGlzdGVuZXIodCxyKXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuITE7bGV0IG49dGhpcy5fbGlzdGVuZXJzO3JldHVybiBuW3RdIT09dm9pZCAwJiZuW3RdLmluZGV4T2YocikhPT0tMX1yZW1vdmVFdmVudExpc3RlbmVyKHQscil7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybjtsZXQgaT10aGlzLl9saXN0ZW5lcnNbdF07aWYoaSE9PXZvaWQgMCl7bGV0IG89aS5pbmRleE9mKHIpO28hPT0tMSYmaS5zcGxpY2UobywxKX19ZGlzcGF0Y2hFdmVudCh0KXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuO2xldCBuPXRoaXMuX2xpc3RlbmVyc1t0LnR5cGVdO2lmKG4hPT12b2lkIDApe3QudGFyZ2V0PXRoaXM7bGV0IGk9bi5zbGljZSgwKTtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspaVtvXS5jYWxsKHRoaXMsdCk7dC50YXJnZXQ9bnVsbH19fSxLbz1bXTtmb3IobGV0IGU9MDtlPDI1NjtlKyspS29bZV09KGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KTt2YXIgY1Y9MTIzNDU2NyxQdj1NYXRoLlBJLzE4MCxKUD0xODAvTWF0aC5QSTtmdW5jdGlvbiBObCgpe2xldCBlPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLHQ9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAscj1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxuPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwO3JldHVybihLb1tlJjI1NV0rS29bZT4+OCYyNTVdK0tvW2U+PjE2JjI1NV0rS29bZT4+MjQmMjU1XSsiLSIrS29bdCYyNTVdK0tvW3Q+PjgmMjU1XSsiLSIrS29bdD4+MTYmMTV8NjRdK0tvW3Q+PjI0JjI1NV0rIi0iK0tvW3ImNjN8MTI4XStLb1tyPj44JjI1NV0rIi0iK0tvW3I+PjE2JjI1NV0rS29bcj4+MjQmMjU1XStLb1tuJjI1NV0rS29bbj4+OCYyNTVdK0tvW24+PjE2JjI1NV0rS29bbj4+MjQmMjU1XSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBabyhlLHQscil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4ocixlKSl9ZnVuY3Rpb24gTmh0KGUsdCl7cmV0dXJuKGUldCt0KSV0fWZ1bmN0aW9uIEhocihlLHQscixuLGkpe3JldHVybiBuKyhlLXQpKihpLW4pLyhyLXQpfWZ1bmN0aW9uIFZocihlLHQscil7cmV0dXJuIGUhPT10PyhyLWUpLyh0LWUpOjB9ZnVuY3Rpb24gVlAoZSx0LHIpe3JldHVybigxLXIpKmUrcip0fWZ1bmN0aW9uIFVocihlLHQscixuKXtyZXR1cm4gVlAoZSx0LDEtTWF0aC5leHAoLXIqbikpfWZ1bmN0aW9uIHFocihlLHQ9MSl7cmV0dXJuIHQtTWF0aC5hYnMoTmh0KGUsdCoyKS10KX1mdW5jdGlvbiBHaHIoZSx0LHIpe3JldHVybiBlPD10PzA6ZT49cj8xOihlPShlLXQpLyhyLXQpLGUqZSooMy0yKmUpKX1mdW5jdGlvbiBXaHIoZSx0LHIpe3JldHVybiBlPD10PzA6ZT49cj8xOihlPShlLXQpLyhyLXQpLGUqZSplKihlKihlKjYtMTUpKzEwKSl9ZnVuY3Rpb24gWWhyKGUsdCl7cmV0dXJuIGUrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKih0LWUrMSkpfWZ1bmN0aW9uIGpocihlLHQpe3JldHVybiBlK01hdGgucmFuZG9tKCkqKHQtZSl9ZnVuY3Rpb24gWGhyKGUpe3JldHVybiBlKiguNS1NYXRoLnJhbmRvbSgpKX1mdW5jdGlvbiAkaHIoZSl7cmV0dXJuIGUhPT12b2lkIDAmJihjVj1lJTIxNDc0ODM2NDcpLGNWPWNWKjE2ODA3JTIxNDc0ODM2NDcsKGNWLTEpLzIxNDc0ODM2NDZ9ZnVuY3Rpb24gS2hyKGUpe3JldHVybiBlKlB2fWZ1bmN0aW9uIFpocihlKXtyZXR1cm4gZSpKUH1mdW5jdGlvbiBKdXQoZSl7cmV0dXJuKGUmZS0xKT09PTAmJmUhPT0wfWZ1bmN0aW9uIGtmZShlKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmNlaWwoTWF0aC5sb2coZSkvTWF0aC5MTjIpKX1mdW5jdGlvbiBSZmUoZSl7cmV0dXJuIE1hdGgucG93KDIsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMikpfWZ1bmN0aW9uIEpocihlLHQscixuLGkpe2xldCBvPU1hdGguY29zLGE9TWF0aC5zaW4scz1vKHIvMiksbD1hKHIvMiksYz1vKCh0K24pLzIpLHU9YSgodCtuKS8yKSxoPW8oKHQtbikvMiksZj1hKCh0LW4pLzIpLHA9bygobi10KS8yKSxkPWEoKG4tdCkvMik7c3dpdGNoKGkpe2Nhc2UiWFlYIjplLnNldChzKnUsbCpoLGwqZixzKmMpO2JyZWFrO2Nhc2UiWVpZIjplLnNldChsKmYscyp1LGwqaCxzKmMpO2JyZWFrO2Nhc2UiWlhaIjplLnNldChsKmgsbCpmLHMqdSxzKmMpO2JyZWFrO2Nhc2UiWFpYIjplLnNldChzKnUsbCpkLGwqcCxzKmMpO2JyZWFrO2Nhc2UiWVhZIjplLnNldChsKnAscyp1LGwqZCxzKmMpO2JyZWFrO2Nhc2UiWllaIjplLnNldChsKmQsbCpwLHMqdSxzKmMpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5NYXRoVXRpbHM6IC5zZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitpKX19dmFyIFFocj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxERUcyUkFEOlB2LFJBRDJERUc6SlAsZ2VuZXJhdGVVVUlEOk5sLGNsYW1wOlpvLGV1Y2xpZGVhbk1vZHVsbzpOaHQsbWFwTGluZWFyOkhocixpbnZlcnNlTGVycDpWaHIsbGVycDpWUCxkYW1wOlVocixwaW5ncG9uZzpxaHIsc21vb3Roc3RlcDpHaHIsc21vb3RoZXJzdGVwOldocixyYW5kSW50OllocixyYW5kRmxvYXQ6amhyLHJhbmRGbG9hdFNwcmVhZDpYaHIsc2VlZGVkUmFuZG9tOiRocixkZWdUb1JhZDpLaHIscmFkVG9EZWc6WmhyLGlzUG93ZXJPZlR3bzpKdXQsY2VpbFBvd2VyT2ZUd286a2ZlLGZsb29yUG93ZXJPZlR3bzpSZmUsc2V0UXVhdGVybmlvbkZyb21Qcm9wZXJFdWxlcjpKaHJ9KSxMdD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wKXt0aGlzLng9dCx0aGlzLnk9cn1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy54fXNldCB3aWR0aCh0KXt0aGlzLng9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMueX1zZXQgaGVpZ2h0KHQpe3RoaXMueT10fXNldCh0LHIpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9cix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Q29tcG9uZW50KHQscil7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9cjticmVhaztjYXNlIDE6dGhpcy55PXI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzfWFkZCh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxyKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzfWFkZFZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueCtyLngsdGhpcy55PXQueStyLnksdGhpc31hZGRTY2FsZWRWZWN0b3IodCxyKXtyZXR1cm4gdGhpcy54Kz10Lngqcix0aGlzLnkrPXQueSpyLHRoaXN9c3ViKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LHIpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXN9c3ViVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54LXIueCx0aGlzLnk9dC55LXIueSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfWFwcGx5TWF0cml4Myh0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9aVswXSpyK2lbM10qbitpWzZdLHRoaXMueT1pWzFdKnIraVs0XSpuK2lbN10sdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpc31jbGFtcCh0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKHIueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKHIueSx0aGlzLnkpKSx0aGlzfWNsYW1wU2NhbGFyKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnkpKSx0aGlzfWNsYW1wTGVuZ3RoKHQscil7bGV0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihyLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0Lnl9Y3Jvc3ModCl7cmV0dXJuIHRoaXMueCp0LnktdGhpcy55KnQueH1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfWFuZ2xlKCl7cmV0dXJuIE1hdGguYXRhbjIoLXRoaXMueSwtdGhpcy54KStNYXRoLlBJfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtsZXQgcj10aGlzLngtdC54LG49dGhpcy55LXQueTtyZXR1cm4gcipyK24qbn1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LHIpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSpyLHRoaXMueSs9KHQueS10aGlzLnkpKnIsdGhpc31sZXJwVmVjdG9ycyh0LHIsbil7cmV0dXJuIHRoaXMueD10LngrKHIueC10LngpKm4sdGhpcy55PXQueSsoci55LXQueSkqbix0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy54PXRbcl0sdGhpcy55PXRbcisxXSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMueCx0W3IrMV09dGhpcy55LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIsbil7cmV0dXJuIG4hPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgociksdGhpcy55PXQuZ2V0WShyKSx0aGlzfXJvdGF0ZUFyb3VuZCh0LHIpe2xldCBuPU1hdGguY29zKHIpLGk9TWF0aC5zaW4ociksbz10aGlzLngtdC54LGE9dGhpcy55LXQueTtyZXR1cm4gdGhpcy54PW8qbi1hKmkrdC54LHRoaXMueT1vKmkrYSpuK3QueSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnl9fTtMdC5wcm90b3R5cGUuaXNWZWN0b3IyPSEwO3ZhciBraT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMSwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQscixuLGksbyxhLHMsbCxjKXtsZXQgdT10aGlzLmVsZW1lbnRzO3JldHVybiB1WzBdPXQsdVsxXT1pLHVbMl09cyx1WzNdPXIsdVs0XT1vLHVbNV09bCx1WzZdPW4sdVs3XT1hLHVbOF09Yyx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMSwwLDAsMCwxKSx0aGlzfWNvcHkodCl7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7cmV0dXJuIHJbMF09blswXSxyWzFdPW5bMV0sclsyXT1uWzJdLHJbM109blszXSxyWzRdPW5bNF0scls1XT1uWzVdLHJbNl09bls2XSxyWzddPW5bN10scls4XT1uWzhdLHRoaXN9ZXh0cmFjdEJhc2lzKHQscixuKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDApLHIuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywxKSxuLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMiksdGhpc31zZXRGcm9tTWF0cml4NCh0KXtsZXQgcj10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChyWzBdLHJbNF0scls4XSxyWzFdLHJbNV0scls5XSxyWzJdLHJbNl0sclsxMF0pLHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQscil7bGV0IG49dC5lbGVtZW50cyxpPXIuZWxlbWVudHMsbz10aGlzLmVsZW1lbnRzLGE9blswXSxzPW5bM10sbD1uWzZdLGM9blsxXSx1PW5bNF0saD1uWzddLGY9blsyXSxwPW5bNV0sZD1uWzhdLGc9aVswXSxfPWlbM10seT1pWzZdLHg9aVsxXSxiPWlbNF0sUz1pWzddLEM9aVsyXSxQPWlbNV0saz1pWzhdO3JldHVybiBvWzBdPWEqZytzKngrbCpDLG9bM109YSpfK3MqYitsKlAsb1s2XT1hKnkrcypTK2wqayxvWzFdPWMqZyt1KngraCpDLG9bNF09YypfK3UqYitoKlAsb1s3XT1jKnkrdSpTK2gqayxvWzJdPWYqZytwKngrZCpDLG9bNV09ZipfK3AqYitkKlAsb1s4XT1mKnkrcCpTK2Qqayx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCByPXRoaXMuZWxlbWVudHM7cmV0dXJuIHJbMF0qPXQsclszXSo9dCxyWzZdKj10LHJbMV0qPXQscls0XSo9dCxyWzddKj10LHJbMl0qPXQscls1XSo9dCxyWzhdKj10LHRoaXN9ZGV0ZXJtaW5hbnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSxuPXRbMV0saT10WzJdLG89dFszXSxhPXRbNF0scz10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdO3JldHVybiByKmEqdS1yKnMqYy1uKm8qdStuKnMqbCtpKm8qYy1pKmEqbH1pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSxuPXRbMV0saT10WzJdLG89dFszXSxhPXRbNF0scz10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGg9dSphLXMqYyxmPXMqbC11Km8scD1jKm8tYSpsLGQ9cipoK24qZitpKnA7aWYoZD09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgZz0xL2Q7cmV0dXJuIHRbMF09aCpnLHRbMV09KGkqYy11Km4pKmcsdFsyXT0ocypuLWkqYSkqZyx0WzNdPWYqZyx0WzRdPSh1KnItaSpsKSpnLHRbNV09KGkqby1zKnIpKmcsdFs2XT1wKmcsdFs3XT0obipsLWMqcikqZyx0WzhdPShhKnItbipvKSpnLHRoaXN9dHJhbnNwb3NlKCl7bGV0IHQscj10aGlzLmVsZW1lbnRzO3JldHVybiB0PXJbMV0sclsxXT1yWzNdLHJbM109dCx0PXJbMl0sclsyXT1yWzZdLHJbNl09dCx0PXJbNV0scls1XT1yWzddLHJbN109dCx0aGlzfWdldE5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4NCh0KS5pbnZlcnQoKS50cmFuc3Bvc2UoKX10cmFuc3Bvc2VJbnRvQXJyYXkodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gdFswXT1yWzBdLHRbMV09clszXSx0WzJdPXJbNl0sdFszXT1yWzFdLHRbNF09cls0XSx0WzVdPXJbN10sdFs2XT1yWzJdLHRbN109cls1XSx0WzhdPXJbOF0sdGhpc31zZXRVdlRyYW5zZm9ybSh0LHIsbixpLG8sYSxzKXtsZXQgbD1NYXRoLmNvcyhvKSxjPU1hdGguc2luKG8pO3JldHVybiB0aGlzLnNldChuKmwsbipjLC1uKihsKmErYypzKSthK3QsLWkqYyxpKmwsLWkqKC1jKmErbCpzKStzK3IsMCwwLDEpLHRoaXN9c2NhbGUodCxyKXtsZXQgbj10aGlzLmVsZW1lbnRzO3JldHVybiBuWzBdKj10LG5bM10qPXQsbls2XSo9dCxuWzFdKj1yLG5bNF0qPXIsbls3XSo9cix0aGlzfXJvdGF0ZSh0KXtsZXQgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpLGk9dGhpcy5lbGVtZW50cyxvPWlbMF0sYT1pWzNdLHM9aVs2XSxsPWlbMV0sYz1pWzRdLHU9aVs3XTtyZXR1cm4gaVswXT1yKm8rbipsLGlbM109ciphK24qYyxpWzZdPXIqcytuKnUsaVsxXT0tbipvK3IqbCxpWzRdPS1uKmErcipjLGlbN109LW4qcytyKnUsdGhpc310cmFuc2xhdGUodCxyKXtsZXQgbj10aGlzLmVsZW1lbnRzO3JldHVybiBuWzBdKz10Km5bMl0sblszXSs9dCpuWzVdLG5bNl0rPXQqbls4XSxuWzFdKz1yKm5bMl0sbls0XSs9cipuWzVdLG5bN10rPXIqbls4XSx0aGlzfWVxdWFscyh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztmb3IobGV0IGk9MDtpPDk7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LHI9MCl7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmVsZW1lbnRzW25dPXRbbityXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10scj0wKXtsZXQgbj10aGlzLmVsZW1lbnRzO3JldHVybiB0W3JdPW5bMF0sdFtyKzFdPW5bMV0sdFtyKzJdPW5bMl0sdFtyKzNdPW5bM10sdFtyKzRdPW5bNF0sdFtyKzVdPW5bNV0sdFtyKzZdPW5bNl0sdFtyKzddPW5bN10sdFtyKzhdPW5bOF0sdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX19O2tpLnByb3RvdHlwZS5pc01hdHJpeDM9ITA7ZnVuY3Rpb24gTmZlKGUpe2ZvcihsZXQgdD1lLmxlbmd0aC0xO3Q+PTA7LS10KWlmKGVbdF0+NjU1MzUpcmV0dXJuITA7cmV0dXJuITF9dmFyIHRmcj17SW50OEFycmF5LFVpbnQ4QXJyYXksVWludDhDbGFtcGVkQXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXl9O2Z1bmN0aW9uIEIzKGUsdCl7cmV0dXJuIG5ldyB0ZnJbZV0odCl9ZnVuY3Rpb24gUVAoZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsZSl9dmFyIERmZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSxuaD17aDowLHM6MCxsOjB9LHVWPXtoOjAsczowLGw6MH07ZnVuY3Rpb24gV2N0KGUsdCxyKXtyZXR1cm4gcjwwJiYocis9MSkscj4xJiYoci09MSkscjwxLzY/ZSsodC1lKSo2KnI6cjwxLzI/dDpyPDIvMz9lKyh0LWUpKjYqKDIvMy1yKTplfWZ1bmN0aW9uIFUzKGUpe3JldHVybiBlPC4wNDA0NT9lKi4wNzczOTkzODA4Ok1hdGgucG93KGUqLjk0Nzg2NzI5ODYrLjA1MjEzMjcwMTQsMi40KX1mdW5jdGlvbiBZY3QoZSl7cmV0dXJuIGU8LjAwMzEzMDg/ZSoxMi45MjoxLjA1NSpNYXRoLnBvdyhlLC40MTY2NiktLjA1NX12YXIgbmU9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3JldHVybiByPT09dm9pZCAwJiZuPT09dm9pZCAwP3RoaXMuc2V0KHQpOnRoaXMuc2V0UkdCKHQscixuKX1zZXQodCl7cmV0dXJuIHQmJnQuaXNDb2xvcj90aGlzLmNvcHkodCk6dHlwZW9mIHQ9PSJudW1iZXIiP3RoaXMuc2V0SGV4KHQpOnR5cGVvZiB0PT0ic3RyaW5nIiYmdGhpcy5zZXRTdHlsZSh0KSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPXQsdGhpcy5iPXQsdGhpc31zZXRIZXgodCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSx0aGlzLnI9KHQ+PjE2JjI1NSkvMjU1LHRoaXMuZz0odD4+OCYyNTUpLzI1NSx0aGlzLmI9KHQmMjU1KS8yNTUsdGhpc31zZXRSR0IodCxyLG4pe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9cix0aGlzLmI9bix0aGlzfXNldEhTTCh0LHIsbil7aWYodD1OaHQodCwxKSxyPVpvKHIsMCwxKSxuPVpvKG4sMCwxKSxyPT09MCl0aGlzLnI9dGhpcy5nPXRoaXMuYj1uO2Vsc2V7bGV0IGk9bjw9LjU/biooMStyKTpuK3ItbipyLG89MipuLWk7dGhpcy5yPVdjdChvLGksdCsxLzMpLHRoaXMuZz1XY3QobyxpLHQpLHRoaXMuYj1XY3QobyxpLHQtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZSh0KXtmdW5jdGlvbiByKGkpe2khPT12b2lkIDAmJnBhcnNlRmxvYXQoaSk8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrdCsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgbjtpZihuPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKHQpKXtsZXQgaSxvPW5bMV0sYT1uWzJdO3N3aXRjaChvKXtjYXNlInJnYiI6Y2FzZSJyZ2JhIjppZihpPS9eXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigyNTUscGFyc2VJbnQoaVsxXSwxMCkpLzI1NSx0aGlzLmc9TWF0aC5taW4oMjU1LHBhcnNlSW50KGlbMl0sMTApKS8yNTUsdGhpcy5iPU1hdGgubWluKDI1NSxwYXJzZUludChpWzNdLDEwKSkvMjU1LHIoaVs0XSksdGhpcztpZihpPS9eXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigxMDAscGFyc2VJbnQoaVsxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KGlbMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChpWzNdLDEwKSkvMTAwLHIoaVs0XSksdGhpczticmVhaztjYXNlImhzbCI6Y2FzZSJoc2xhIjppZihpPS9eXHMqKFxkKlwuP1xkKylccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKGEpKXtsZXQgcz1wYXJzZUZsb2F0KGlbMV0pLzM2MCxsPXBhcnNlSW50KGlbMl0sMTApLzEwMCxjPXBhcnNlSW50KGlbM10sMTApLzEwMDtyZXR1cm4gcihpWzRdKSx0aGlzLnNldEhTTChzLGwsYyl9YnJlYWt9fWVsc2UgaWYobj0vXlwjKFtBLUZhLWZcZF0rKSQvLmV4ZWModCkpe2xldCBpPW5bMV0sbz1pLmxlbmd0aDtpZihvPT09MylyZXR1cm4gdGhpcy5yPXBhcnNlSW50KGkuY2hhckF0KDApK2kuY2hhckF0KDApLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KGkuY2hhckF0KDEpK2kuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KGkuY2hhckF0KDIpK2kuY2hhckF0KDIpLDE2KS8yNTUsdGhpcztpZihvPT09NilyZXR1cm4gdGhpcy5yPXBhcnNlSW50KGkuY2hhckF0KDApK2kuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KGkuY2hhckF0KDIpK2kuY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KGkuY2hhckF0KDQpK2kuY2hhckF0KDUpLDE2KS8yNTUsdGhpc31yZXR1cm4gdCYmdC5sZW5ndGg+MD90aGlzLnNldENvbG9yTmFtZSh0KTp0aGlzfXNldENvbG9yTmFtZSh0KXtsZXQgcj1EZmVbdC50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gciE9PXZvaWQgMD90aGlzLnNldEhleChyKTpjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBVbmtub3duIGNvbG9yICIrdCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnIsdGhpcy5nLHRoaXMuYil9Y29weSh0KXtyZXR1cm4gdGhpcy5yPXQucix0aGlzLmc9dC5nLHRoaXMuYj10LmIsdGhpc31jb3B5U1JHQlRvTGluZWFyKHQpe3JldHVybiB0aGlzLnI9VTModC5yKSx0aGlzLmc9VTModC5nKSx0aGlzLmI9VTModC5iKSx0aGlzfWNvcHlMaW5lYXJUb1NSR0IodCl7cmV0dXJuIHRoaXMucj1ZY3QodC5yKSx0aGlzLmc9WWN0KHQuZyksdGhpcy5iPVljdCh0LmIpLHRoaXN9Y29udmVydFNSR0JUb0xpbmVhcigpe3JldHVybiB0aGlzLmNvcHlTUkdCVG9MaW5lYXIodGhpcyksdGhpc31jb252ZXJ0TGluZWFyVG9TUkdCKCl7cmV0dXJuIHRoaXMuY29weUxpbmVhclRvU1JHQih0aGlzKSx0aGlzfWdldEhleCgpe3JldHVybiB0aGlzLnIqMjU1PDwxNl50aGlzLmcqMjU1PDw4XnRoaXMuYioyNTU8PDB9Z2V0SGV4U3RyaW5nKCl7cmV0dXJuKCIwMDAwMDAiK3RoaXMuZ2V0SGV4KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNil9Z2V0SFNMKHQpe2xldCByPXRoaXMucixuPXRoaXMuZyxpPXRoaXMuYixvPU1hdGgubWF4KHIsbixpKSxhPU1hdGgubWluKHIsbixpKSxzLGwsYz0oYStvKS8yO2lmKGE9PT1vKXM9MCxsPTA7ZWxzZXtsZXQgdT1vLWE7c3dpdGNoKGw9Yzw9LjU/dS8obythKTp1LygyLW8tYSksbyl7Y2FzZSByOnM9KG4taSkvdSsobjxpPzY6MCk7YnJlYWs7Y2FzZSBuOnM9KGktcikvdSsyO2JyZWFrO2Nhc2UgaTpzPShyLW4pL3UrNDticmVha31zLz02fXJldHVybiB0Lmg9cyx0LnM9bCx0Lmw9Yyx0fWdldFN0eWxlKCl7cmV0dXJuInJnYigiKyh0aGlzLnIqMjU1fDApKyIsIisodGhpcy5nKjI1NXwwKSsiLCIrKHRoaXMuYioyNTV8MCkrIikifW9mZnNldEhTTCh0LHIsbil7cmV0dXJuIHRoaXMuZ2V0SFNMKG5oKSxuaC5oKz10LG5oLnMrPXIsbmgubCs9bix0aGlzLnNldEhTTChuaC5oLG5oLnMsbmgubCksdGhpc31hZGQodCl7cmV0dXJuIHRoaXMucis9dC5yLHRoaXMuZys9dC5nLHRoaXMuYis9dC5iLHRoaXN9YWRkQ29sb3JzKHQscil7cmV0dXJuIHRoaXMucj10LnIrci5yLHRoaXMuZz10Lmcrci5nLHRoaXMuYj10LmIrci5iLHRoaXN9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLnIrPXQsdGhpcy5nKz10LHRoaXMuYis9dCx0aGlzfXN1Yih0KXtyZXR1cm4gdGhpcy5yPU1hdGgubWF4KDAsdGhpcy5yLXQuciksdGhpcy5nPU1hdGgubWF4KDAsdGhpcy5nLXQuZyksdGhpcy5iPU1hdGgubWF4KDAsdGhpcy5iLXQuYiksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5yKj10LnIsdGhpcy5nKj10LmcsdGhpcy5iKj10LmIsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy5yKj10LHRoaXMuZyo9dCx0aGlzLmIqPXQsdGhpc31sZXJwKHQscil7cmV0dXJuIHRoaXMucis9KHQuci10aGlzLnIpKnIsdGhpcy5nKz0odC5nLXRoaXMuZykqcix0aGlzLmIrPSh0LmItdGhpcy5iKSpyLHRoaXN9bGVycENvbG9ycyh0LHIsbil7cmV0dXJuIHRoaXMucj10LnIrKHIuci10LnIpKm4sdGhpcy5nPXQuZysoci5nLXQuZykqbix0aGlzLmI9dC5iKyhyLmItdC5iKSpuLHRoaXN9bGVycEhTTCh0LHIpe3RoaXMuZ2V0SFNMKG5oKSx0LmdldEhTTCh1Vik7bGV0IG49VlAobmguaCx1Vi5oLHIpLGk9VlAobmgucyx1Vi5zLHIpLG89VlAobmgubCx1Vi5sLHIpO3JldHVybiB0aGlzLnNldEhTTChuLGksbyksdGhpc31lcXVhbHModCl7cmV0dXJuIHQucj09PXRoaXMuciYmdC5nPT09dGhpcy5nJiZ0LmI9PT10aGlzLmJ9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy5yPXRbcl0sdGhpcy5nPXRbcisxXSx0aGlzLmI9dFtyKzJdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy5yLHRbcisxXT10aGlzLmcsdFtyKzJdPXRoaXMuYix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5yPXQuZ2V0WChyKSx0aGlzLmc9dC5nZXRZKHIpLHRoaXMuYj10LmdldFoociksdC5ub3JtYWxpemVkPT09ITAmJih0aGlzLnIvPTI1NSx0aGlzLmcvPTI1NSx0aGlzLmIvPTI1NSksdGhpc310b0pTT04oKXtyZXR1cm4gdGhpcy5nZXRIZXgoKX19O25lLk5BTUVTPURmZTtuZS5wcm90b3R5cGUuaXNDb2xvcj0hMDtuZS5wcm90b3R5cGUucj0xO25lLnByb3RvdHlwZS5nPTE7bmUucHJvdG90eXBlLmI9MTt2YXIgdjMsS2Y9Y2xhc3N7c3RhdGljIGdldERhdGFVUkwodCl7aWYoL15kYXRhOi9pLnRlc3QodC5zcmMpfHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ9PSJ1bmRlZmluZWQiKXJldHVybiB0LnNyYztsZXQgcjtpZih0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpcj10O2Vsc2V7djM9PT12b2lkIDAmJih2Mz1RUCgiY2FudmFzIikpLHYzLndpZHRoPXQud2lkdGgsdjMuaGVpZ2h0PXQuaGVpZ2h0O2xldCBuPXYzLmdldENvbnRleHQoIjJkIik7dCBpbnN0YW5jZW9mIEltYWdlRGF0YT9uLnB1dEltYWdlRGF0YSh0LDAsMCk6bi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCkscj12M31yZXR1cm4gci53aWR0aD4yMDQ4fHxyLmhlaWdodD4yMDQ4Pyhjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMuZ2V0RGF0YVVSTDogSW1hZ2UgY29udmVydGVkIHRvIGpwZyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyIsdCksci50b0RhdGFVUkwoImltYWdlL2pwZWciLC42KSk6ci50b0RhdGFVUkwoImltYWdlL3BuZyIpfXN0YXRpYyBzUkdCVG9MaW5lYXIodCl7aWYodHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXAhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApe2xldCByPVFQKCJjYW52YXMiKTtyLndpZHRoPXQud2lkdGgsci5oZWlnaHQ9dC5oZWlnaHQ7bGV0IG49ci5nZXRDb250ZXh0KCIyZCIpO24uZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpO2xldCBpPW4uZ2V0SW1hZ2VEYXRhKDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxvPWkuZGF0YTtmb3IobGV0IGE9MDthPG8ubGVuZ3RoO2ErKylvW2FdPVUzKG9bYV0vMjU1KSoyNTU7cmV0dXJuIG4ucHV0SW1hZ2VEYXRhKGksMCwwKSxyfWVsc2UgaWYodC5kYXRhKXtsZXQgcj10LmRhdGEuc2xpY2UoMCk7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheT9yW25dPU1hdGguZmxvb3IoVTMocltuXS8yNTUpKjI1NSk6cltuXT1VMyhyW25dKTtyZXR1cm57ZGF0YTpyLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX1lbHNlIHJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMuc1JHQlRvTGluZWFyKCk6IFVuc3VwcG9ydGVkIGltYWdlIHR5cGUuIE5vIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gYXBwbGllZC4iKSx0fX0sZWZyPTAseGk9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0PXhpLkRFRkFVTFRfSU1BR0Uscj14aS5ERUZBVUxUX01BUFBJTkcsbj1KbyxpPUpvLG89b2ksYT1veCxzPVFvLGw9WmQsYz0xLHU9UWQpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6ZWZyKyt9KSx0aGlzLnV1aWQ9TmwoKSx0aGlzLm5hbWU9IiIsdGhpcy5pbWFnZT10LHRoaXMubWlwbWFwcz1bXSx0aGlzLm1hcHBpbmc9cix0aGlzLndyYXBTPW4sdGhpcy53cmFwVD1pLHRoaXMubWFnRmlsdGVyPW8sdGhpcy5taW5GaWx0ZXI9YSx0aGlzLmFuaXNvdHJvcHk9Yyx0aGlzLmZvcm1hdD1zLHRoaXMuaW50ZXJuYWxGb3JtYXQ9bnVsbCx0aGlzLnR5cGU9bCx0aGlzLm9mZnNldD1uZXcgTHQoMCwwKSx0aGlzLnJlcGVhdD1uZXcgTHQoMSwxKSx0aGlzLmNlbnRlcj1uZXcgTHQoMCwwKSx0aGlzLnJvdGF0aW9uPTAsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSEwLHRoaXMubWF0cml4PW5ldyBraSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMCx0aGlzLnByZW11bHRpcGx5QWxwaGE9ITEsdGhpcy5mbGlwWT0hMCx0aGlzLnVucGFja0FsaWdubWVudD00LHRoaXMuZW5jb2Rpbmc9dSx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMub25VcGRhdGU9bnVsbCx0aGlzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMSx0aGlzLm5lZWRzUE1SRU1VcGRhdGU9ITF9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguc2V0VXZUcmFuc2Zvcm0odGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55LHRoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueSx0aGlzLnJvdGF0aW9uLHRoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5pbWFnZT10LmltYWdlLHRoaXMubWlwbWFwcz10Lm1pcG1hcHMuc2xpY2UoMCksdGhpcy5tYXBwaW5nPXQubWFwcGluZyx0aGlzLndyYXBTPXQud3JhcFMsdGhpcy53cmFwVD10LndyYXBULHRoaXMubWFnRmlsdGVyPXQubWFnRmlsdGVyLHRoaXMubWluRmlsdGVyPXQubWluRmlsdGVyLHRoaXMuYW5pc290cm9weT10LmFuaXNvdHJvcHksdGhpcy5mb3JtYXQ9dC5mb3JtYXQsdGhpcy5pbnRlcm5hbEZvcm1hdD10LmludGVybmFsRm9ybWF0LHRoaXMudHlwZT10LnR5cGUsdGhpcy5vZmZzZXQuY29weSh0Lm9mZnNldCksdGhpcy5yZXBlYXQuY29weSh0LnJlcGVhdCksdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5nZW5lcmF0ZU1pcG1hcHM9dC5nZW5lcmF0ZU1pcG1hcHMsdGhpcy5wcmVtdWx0aXBseUFscGhhPXQucHJlbXVsdGlwbHlBbHBoYSx0aGlzLmZsaXBZPXQuZmxpcFksdGhpcy51bnBhY2tBbGlnbm1lbnQ9dC51bnBhY2tBbGlnbm1lbnQsdGhpcy5lbmNvZGluZz10LmVuY29kaW5nLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc310b0pTT04odCl7bGV0IHI9dD09PXZvaWQgMHx8dHlwZW9mIHQ9PSJzdHJpbmciO2lmKCFyJiZ0LnRleHR1cmVzW3RoaXMudXVpZF0hPT12b2lkIDApcmV0dXJuIHQudGV4dHVyZXNbdGhpcy51dWlkXTtsZXQgbj17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlRleHR1cmUiLGdlbmVyYXRvcjoiVGV4dHVyZS50b0pTT04ifSx1dWlkOnRoaXMudXVpZCxuYW1lOnRoaXMubmFtZSxtYXBwaW5nOnRoaXMubWFwcGluZyxyZXBlYXQ6W3RoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueV0sb2Zmc2V0Olt0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnldLGNlbnRlcjpbdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55XSxyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHdyYXA6W3RoaXMud3JhcFMsdGhpcy53cmFwVF0sZm9ybWF0OnRoaXMuZm9ybWF0LHR5cGU6dGhpcy50eXBlLGVuY29kaW5nOnRoaXMuZW5jb2RpbmcsbWluRmlsdGVyOnRoaXMubWluRmlsdGVyLG1hZ0ZpbHRlcjp0aGlzLm1hZ0ZpbHRlcixhbmlzb3Ryb3B5OnRoaXMuYW5pc290cm9weSxmbGlwWTp0aGlzLmZsaXBZLHByZW11bHRpcGx5QWxwaGE6dGhpcy5wcmVtdWx0aXBseUFscGhhLHVucGFja0FsaWdubWVudDp0aGlzLnVucGFja0FsaWdubWVudH07aWYodGhpcy5pbWFnZSE9PXZvaWQgMCl7bGV0IGk9dGhpcy5pbWFnZTtpZihpLnV1aWQ9PT12b2lkIDAmJihpLnV1aWQ9TmwoKSksIXImJnQuaW1hZ2VzW2kudXVpZF09PT12b2lkIDApe2xldCBvO2lmKEFycmF5LmlzQXJyYXkoaSkpe289W107Zm9yKGxldCBhPTAscz1pLmxlbmd0aDthPHM7YSsrKWlbYV0uaXNEYXRhVGV4dHVyZT9vLnB1c2goamN0KGlbYV0uaW1hZ2UpKTpvLnB1c2goamN0KGlbYV0pKX1lbHNlIG89amN0KGkpO3QuaW1hZ2VzW2kudXVpZF09e3V1aWQ6aS51dWlkLHVybDpvfX1uLmltYWdlPWkudXVpZH1yZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYobi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyfHwodC50ZXh0dXJlc1t0aGlzLnV1aWRdPW4pLG59ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX10cmFuc2Zvcm1Vdih0KXtpZih0aGlzLm1hcHBpbmchPT1qVSlyZXR1cm4gdDtpZih0LmFwcGx5TWF0cml4Myh0aGlzLm1hdHJpeCksdC54PDB8fHQueD4xKXN3aXRjaCh0aGlzLndyYXBTKXtjYXNlIGpQOnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrO2Nhc2UgSm86dC54PXQueDwwPzA6MTticmVhaztjYXNlIFhQOk1hdGguYWJzKE1hdGguZmxvb3IodC54KSUyKT09PTE/dC54PU1hdGguY2VpbCh0LngpLXQueDp0Lng9dC54LU1hdGguZmxvb3IodC54KTticmVha31pZih0Lnk8MHx8dC55PjEpc3dpdGNoKHRoaXMud3JhcFQpe2Nhc2UgalA6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWs7Y2FzZSBKbzp0Lnk9dC55PDA/MDoxO2JyZWFrO2Nhc2UgWFA6TWF0aC5hYnMoTWF0aC5mbG9vcih0LnkpJTIpPT09MT90Lnk9TWF0aC5jZWlsKHQueSktdC55OnQueT10LnktTWF0aC5mbG9vcih0LnkpO2JyZWFrfXJldHVybiB0aGlzLmZsaXBZJiYodC55PTEtdC55KSx0fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfX07eGkuREVGQVVMVF9JTUFHRT12b2lkIDA7eGkuREVGQVVMVF9NQVBQSU5HPWpVO3hpLnByb3RvdHlwZS5pc1RleHR1cmU9ITA7ZnVuY3Rpb24gamN0KGUpe3JldHVybiB0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcD9LZi5nZXREYXRhVVJMKGUpOmUuZGF0YT97ZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmRhdGEpLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LHR5cGU6ZS5kYXRhLmNvbnN0cnVjdG9yLm5hbWV9Oihjb25zb2xlLndhcm4oIlRIUkVFLlRleHR1cmU6IFVuYWJsZSB0byBzZXJpYWxpemUgVGV4dHVyZS4iKSx7fSl9dmFyIGVuPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTAsbj0wLGk9MSl7dGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW4sdGhpcy53PWl9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMuen1zZXQgd2lkdGgodCl7dGhpcy56PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnd9c2V0IGhlaWdodCh0KXt0aGlzLnc9dH1zZXQodCxyLG4saSl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1yLHRoaXMuej1uLHRoaXMudz1pLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzLnc9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldFcodCl7cmV0dXJuIHRoaXMudz10LHRoaXN9c2V0Q29tcG9uZW50KHQscil7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9cjticmVhaztjYXNlIDE6dGhpcy55PXI7YnJlYWs7Y2FzZSAyOnRoaXMuej1yO2JyZWFrO2Nhc2UgMzp0aGlzLnc9cjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7Y2FzZSAzOnJldHVybiB0aGlzLnc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnosdGhpcy53KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzLnc9dC53IT09dm9pZCAwP3QudzoxLHRoaXN9YWRkKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LHIpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcy53Kz10LncsdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzLncrPXQsdGhpc31hZGRWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngrci54LHRoaXMueT10Lnkrci55LHRoaXMuej10Lnorci56LHRoaXMudz10Lncrci53LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQscil7cmV0dXJuIHRoaXMueCs9dC54KnIsdGhpcy55Kz10Lnkqcix0aGlzLnorPXQueipyLHRoaXMudys9dC53KnIsdGhpc31zdWIodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQscikpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzLnctPXQudyx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXMudy09dCx0aGlzfXN1YlZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueC1yLngsdGhpcy55PXQueS1yLnksdGhpcy56PXQuei1yLnosdGhpcy53PXQudy1yLncsdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcy53Kj10LncsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpcy53Kj10LHRoaXN9YXBwbHlNYXRyaXg0KHQpe2xldCByPXRoaXMueCxuPXRoaXMueSxpPXRoaXMueixvPXRoaXMudyxhPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1hWzBdKnIrYVs0XSpuK2FbOF0qaSthWzEyXSpvLHRoaXMueT1hWzFdKnIrYVs1XSpuK2FbOV0qaSthWzEzXSpvLHRoaXMuej1hWzJdKnIrYVs2XSpuK2FbMTBdKmkrYVsxNF0qbyx0aGlzLnc9YVszXSpyK2FbN10qbithWzExXSppK2FbMTVdKm8sdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1zZXRBeGlzQW5nbGVGcm9tUXVhdGVybmlvbih0KXt0aGlzLnc9MipNYXRoLmFjb3ModC53KTtsZXQgcj1NYXRoLnNxcnQoMS10LncqdC53KTtyZXR1cm4gcjwxZS00Pyh0aGlzLng9MSx0aGlzLnk9MCx0aGlzLno9MCk6KHRoaXMueD10Lngvcix0aGlzLnk9dC55L3IsdGhpcy56PXQuei9yKSx0aGlzfXNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgcixuLGksbyxsPXQuZWxlbWVudHMsYz1sWzBdLHU9bFs0XSxoPWxbOF0sZj1sWzFdLHA9bFs1XSxkPWxbOV0sZz1sWzJdLF89bFs2XSx5PWxbMTBdO2lmKE1hdGguYWJzKHUtZik8LjAxJiZNYXRoLmFicyhoLWcpPC4wMSYmTWF0aC5hYnMoZC1fKTwuMDEpe2lmKE1hdGguYWJzKHUrZik8LjEmJk1hdGguYWJzKGgrZyk8LjEmJk1hdGguYWJzKGQrXyk8LjEmJk1hdGguYWJzKGMrcCt5LTMpPC4xKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO3I9TWF0aC5QSTtsZXQgYj0oYysxKS8yLFM9KHArMSkvMixDPSh5KzEpLzIsUD0odStmKS80LGs9KGgrZykvNCxPPShkK18pLzQ7cmV0dXJuIGI+UyYmYj5DP2I8LjAxPyhuPTAsaT0uNzA3MTA2NzgxLG89LjcwNzEwNjc4MSk6KG49TWF0aC5zcXJ0KGIpLGk9UC9uLG89ay9uKTpTPkM/UzwuMDE/KG49LjcwNzEwNjc4MSxpPTAsbz0uNzA3MTA2NzgxKTooaT1NYXRoLnNxcnQoUyksbj1QL2ksbz1PL2kpOkM8LjAxPyhuPS43MDcxMDY3ODEsaT0uNzA3MTA2NzgxLG89MCk6KG89TWF0aC5zcXJ0KEMpLG49ay9vLGk9Ty9vKSx0aGlzLnNldChuLGksbyxyKSx0aGlzfWxldCB4PU1hdGguc3FydCgoXy1kKSooXy1kKSsoaC1nKSooaC1nKSsoZi11KSooZi11KSk7cmV0dXJuIE1hdGguYWJzKHgpPC4wMDEmJih4PTEpLHRoaXMueD0oXy1kKS94LHRoaXMueT0oaC1nKS94LHRoaXMuej0oZi11KS94LHRoaXMudz1NYXRoLmFjb3MoKGMrcCt5LTEpLzIpLHRoaXN9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5taW4odGhpcy53LHQudyksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1heCh0aGlzLncsdC53KSx0aGlzfWNsYW1wKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oci54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oci55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oci56LHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LncsTWF0aC5taW4oci53LHRoaXMudykpLHRoaXN9Y2xhbXBTY2FsYXIodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLncpKSx0aGlzfWNsYW1wTGVuZ3RoKHQscil7bGV0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihyLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpcy53PU1hdGguZmxvb3IodGhpcy53KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpcy53PU1hdGguY2VpbCh0aGlzLncpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpcy53PU1hdGgucm91bmQodGhpcy53KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz10aGlzLnc8MD9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpcy53PS10aGlzLncsdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56K3RoaXMudyp0Lnd9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMud31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KStNYXRoLmFicyh0aGlzLncpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LHIpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSpyLHRoaXMueSs9KHQueS10aGlzLnkpKnIsdGhpcy56Kz0odC56LXRoaXMueikqcix0aGlzLncrPSh0LnctdGhpcy53KSpyLHRoaXN9bGVycFZlY3RvcnModCxyLG4pe3JldHVybiB0aGlzLng9dC54KyhyLngtdC54KSpuLHRoaXMueT10LnkrKHIueS10LnkpKm4sdGhpcy56PXQueisoci56LXQueikqbix0aGlzLnc9dC53KyhyLnctdC53KSpuLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56JiZ0Lnc9PT10aGlzLnd9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy54PXRbcl0sdGhpcy55PXRbcisxXSx0aGlzLno9dFtyKzJdLHRoaXMudz10W3IrM10sdGhpc310b0FycmF5KHQ9W10scj0wKXtyZXR1cm4gdFtyXT10aGlzLngsdFtyKzFdPXRoaXMueSx0W3IrMl09dGhpcy56LHRbciszXT10aGlzLncsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscixuKXtyZXR1cm4gbiE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChyKSx0aGlzLnk9dC5nZXRZKHIpLHRoaXMuej10LmdldFoociksdGhpcy53PXQuZ2V0VyhyKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzLnc9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56LHlpZWxkIHRoaXMud319O2VuLnByb3RvdHlwZS5pc1ZlY3RvcjQ9ITA7dmFyIHVzPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IodCxyLG49e30pe3N1cGVyKCksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsdGhpcy5kZXB0aD0xLHRoaXMuc2Npc3Nvcj1uZXcgZW4oMCwwLHQsciksdGhpcy5zY2lzc29yVGVzdD0hMSx0aGlzLnZpZXdwb3J0PW5ldyBlbigwLDAsdCxyKSx0aGlzLnRleHR1cmU9bmV3IHhpKHZvaWQgMCxuLm1hcHBpbmcsbi53cmFwUyxuLndyYXBULG4ubWFnRmlsdGVyLG4ubWluRmlsdGVyLG4uZm9ybWF0LG4udHlwZSxuLmFuaXNvdHJvcHksbi5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OnIsZGVwdGg6MX0sdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1uLmdlbmVyYXRlTWlwbWFwcyE9PXZvaWQgMD9uLmdlbmVyYXRlTWlwbWFwczohMSx0aGlzLnRleHR1cmUuaW50ZXJuYWxGb3JtYXQ9bi5pbnRlcm5hbEZvcm1hdCE9PXZvaWQgMD9uLmludGVybmFsRm9ybWF0Om51bGwsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1uLm1pbkZpbHRlciE9PXZvaWQgMD9uLm1pbkZpbHRlcjpvaSx0aGlzLmRlcHRoQnVmZmVyPW4uZGVwdGhCdWZmZXIhPT12b2lkIDA/bi5kZXB0aEJ1ZmZlcjohMCx0aGlzLnN0ZW5jaWxCdWZmZXI9bi5zdGVuY2lsQnVmZmVyIT09dm9pZCAwP24uc3RlbmNpbEJ1ZmZlcjohMSx0aGlzLmRlcHRoVGV4dHVyZT1uLmRlcHRoVGV4dHVyZSE9PXZvaWQgMD9uLmRlcHRoVGV4dHVyZTpudWxsfXNldFRleHR1cmUodCl7dC5pbWFnZT17d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsZGVwdGg6dGhpcy5kZXB0aH0sdGhpcy50ZXh0dXJlPXR9c2V0U2l6ZSh0LHIsbj0xKXsodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09cnx8dGhpcy5kZXB0aCE9PW4pJiYodGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsdGhpcy5kZXB0aD1uLHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQ9cix0aGlzLnRleHR1cmUuaW1hZ2UuZGVwdGg9bix0aGlzLmRpc3Bvc2UoKSksdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsciksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxyKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LmNvcHkodC52aWV3cG9ydCksdGhpcy50ZXh0dXJlPXQudGV4dHVyZS5jbG9uZSgpLHRoaXMudGV4dHVyZS5pbWFnZT1PYmplY3QuYXNzaWduKHt9LHQudGV4dHVyZS5pbWFnZSksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07dXMucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJUYXJnZXQ9ITA7dmFyIHNVPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQscik7bGV0IGk9dGhpcy50ZXh0dXJlO3RoaXMudGV4dHVyZT1bXTtmb3IobGV0IG89MDtvPG47bysrKXRoaXMudGV4dHVyZVtvXT1pLmNsb25lKCl9c2V0U2l6ZSh0LHIsbj0xKXtpZih0aGlzLndpZHRoIT09dHx8dGhpcy5oZWlnaHQhPT1yfHx0aGlzLmRlcHRoIT09bil7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsdGhpcy5kZXB0aD1uO2ZvcihsZXQgaT0wLG89dGhpcy50ZXh0dXJlLmxlbmd0aDtpPG87aSsrKXRoaXMudGV4dHVyZVtpXS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZVtpXS5pbWFnZS5oZWlnaHQ9cix0aGlzLnRleHR1cmVbaV0uaW1hZ2UuZGVwdGg9bjt0aGlzLmRpc3Bvc2UoKX1yZXR1cm4gdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsciksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxyKSx0aGlzfWNvcHkodCl7dGhpcy5kaXNwb3NlKCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5zY2lzc29yLnNldCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpcy50ZXh0dXJlLmxlbmd0aD0wO2ZvcihsZXQgcj0wLG49dC50ZXh0dXJlLmxlbmd0aDtyPG47cisrKXRoaXMudGV4dHVyZVtyXT10LnRleHR1cmVbcl0uY2xvbmUoKTtyZXR1cm4gdGhpc319O3NVLnByb3RvdHlwZS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPSEwO3ZhciBqMz1jbGFzcyBleHRlbmRzIHVze2NvbnN0cnVjdG9yKHQscixuPXt9KXtzdXBlcih0LHIsbiksdGhpcy5zYW1wbGVzPTQsdGhpcy5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weT1uLmlnbm9yZURlcHRoIT09dm9pZCAwP24uaWdub3JlRGVwdGg6ITAsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9bi51c2VSZW5kZXJUb1RleHR1cmUhPT12b2lkIDA/bi51c2VSZW5kZXJUb1RleHR1cmU6ITEsdGhpcy51c2VSZW5kZXJidWZmZXI9dGhpcy51c2VSZW5kZXJUb1RleHR1cmU9PT0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnNhbXBsZXM9dC5zYW1wbGVzLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPXQudXNlUmVuZGVyVG9UZXh0dXJlLHRoaXMudXNlUmVuZGVyYnVmZmVyPXQudXNlUmVuZGVyYnVmZmVyLHRoaXN9fTtqMy5wcm90b3R5cGUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PSEwO3ZhciB2aT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCxpPTEpe3RoaXMuX3g9dCx0aGlzLl95PXIsdGhpcy5fej1uLHRoaXMuX3c9aX1zdGF0aWMgc2xlcnAodCxyLG4saSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogU3RhdGljIC5zbGVycCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBxbS5zbGVycFF1YXRlcm5pb25zKCBxYSwgcWIsIHQgKSBpbnN0ZWFkLiIpLG4uc2xlcnBRdWF0ZXJuaW9ucyh0LHIsaSl9c3RhdGljIHNsZXJwRmxhdCh0LHIsbixpLG8sYSxzKXtsZXQgbD1uW2krMF0sYz1uW2krMV0sdT1uW2krMl0saD1uW2krM10sZj1vW2ErMF0scD1vW2ErMV0sZD1vW2ErMl0sZz1vW2ErM107aWYocz09PTApe3RbciswXT1sLHRbcisxXT1jLHRbcisyXT11LHRbciszXT1oO3JldHVybn1pZihzPT09MSl7dFtyKzBdPWYsdFtyKzFdPXAsdFtyKzJdPWQsdFtyKzNdPWc7cmV0dXJufWlmKGghPT1nfHxsIT09Znx8YyE9PXB8fHUhPT1kKXtsZXQgXz0xLXMseT1sKmYrYypwK3UqZCtoKmcseD15Pj0wPzE6LTEsYj0xLXkqeTtpZihiPk51bWJlci5FUFNJTE9OKXtsZXQgQz1NYXRoLnNxcnQoYiksUD1NYXRoLmF0YW4yKEMseSp4KTtfPU1hdGguc2luKF8qUCkvQyxzPU1hdGguc2luKHMqUCkvQ31sZXQgUz1zKng7aWYobD1sKl8rZipTLGM9YypfK3AqUyx1PXUqXytkKlMsaD1oKl8rZypTLF89PT0xLXMpe2xldCBDPTEvTWF0aC5zcXJ0KGwqbCtjKmMrdSp1K2gqaCk7bCo9QyxjKj1DLHUqPUMsaCo9Q319dFtyXT1sLHRbcisxXT1jLHRbcisyXT11LHRbciszXT1ofXN0YXRpYyBtdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LHIsbixpLG8sYSl7bGV0IHM9bltpXSxsPW5baSsxXSxjPW5baSsyXSx1PW5baSszXSxoPW9bYV0sZj1vW2ErMV0scD1vW2ErMl0sZD1vW2ErM107cmV0dXJuIHRbcl09cypkK3UqaCtsKnAtYypmLHRbcisxXT1sKmQrdSpmK2MqaC1zKnAsdFtyKzJdPWMqZCt1KnArcypmLWwqaCx0W3IrM109dSpkLXMqaC1sKmYtYypwLHR9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHcoKXtyZXR1cm4gdGhpcy5fd31zZXQgdyh0KXt0aGlzLl93PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LHIsbixpKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fdz1pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX3cpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC54LHRoaXMuX3k9dC55LHRoaXMuX3o9dC56LHRoaXMuX3c9dC53LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21FdWxlcih0LHIpe2lmKCEodCYmdC5pc0V1bGVyKSl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBuPXQuX3gsaT10Ll95LG89dC5feixhPXQuX29yZGVyLHM9TWF0aC5jb3MsbD1NYXRoLnNpbixjPXMobi8yKSx1PXMoaS8yKSxoPXMoby8yKSxmPWwobi8yKSxwPWwoaS8yKSxkPWwoby8yKTtzd2l0Y2goYSl7Y2FzZSJYWVoiOnRoaXMuX3g9Zip1KmgrYypwKmQsdGhpcy5feT1jKnAqaC1mKnUqZCx0aGlzLl96PWMqdSpkK2YqcCpoLHRoaXMuX3c9Yyp1KmgtZipwKmQ7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9Zip1KmgrYypwKmQsdGhpcy5feT1jKnAqaC1mKnUqZCx0aGlzLl96PWMqdSpkLWYqcCpoLHRoaXMuX3c9Yyp1KmgrZipwKmQ7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9Zip1KmgtYypwKmQsdGhpcy5feT1jKnAqaCtmKnUqZCx0aGlzLl96PWMqdSpkK2YqcCpoLHRoaXMuX3c9Yyp1KmgtZipwKmQ7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3g9Zip1KmgtYypwKmQsdGhpcy5feT1jKnAqaCtmKnUqZCx0aGlzLl96PWMqdSpkLWYqcCpoLHRoaXMuX3c9Yyp1KmgrZipwKmQ7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3g9Zip1KmgrYypwKmQsdGhpcy5feT1jKnAqaCtmKnUqZCx0aGlzLl96PWMqdSpkLWYqcCpoLHRoaXMuX3c9Yyp1KmgtZipwKmQ7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3g9Zip1KmgtYypwKmQsdGhpcy5feT1jKnAqaC1mKnUqZCx0aGlzLl96PWMqdSpkK2YqcCpoLHRoaXMuX3c9Yyp1KmgrZipwKmQ7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2EpfXJldHVybiByIT09ITEmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21BeGlzQW5nbGUodCxyKXtsZXQgbj1yLzIsaT1NYXRoLnNpbihuKTtyZXR1cm4gdGhpcy5feD10LngqaSx0aGlzLl95PXQueSppLHRoaXMuX3o9dC56KmksdGhpcy5fdz1NYXRoLmNvcyhuKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IHI9dC5lbGVtZW50cyxuPXJbMF0saT1yWzRdLG89cls4XSxhPXJbMV0scz1yWzVdLGw9cls5XSxjPXJbMl0sdT1yWzZdLGg9clsxMF0sZj1uK3MraDtpZihmPjApe2xldCBwPS41L01hdGguc3FydChmKzEpO3RoaXMuX3c9LjI1L3AsdGhpcy5feD0odS1sKSpwLHRoaXMuX3k9KG8tYykqcCx0aGlzLl96PShhLWkpKnB9ZWxzZSBpZihuPnMmJm4+aCl7bGV0IHA9MipNYXRoLnNxcnQoMStuLXMtaCk7dGhpcy5fdz0odS1sKS9wLHRoaXMuX3g9LjI1KnAsdGhpcy5feT0oaSthKS9wLHRoaXMuX3o9KG8rYykvcH1lbHNlIGlmKHM+aCl7bGV0IHA9MipNYXRoLnNxcnQoMStzLW4taCk7dGhpcy5fdz0oby1jKS9wLHRoaXMuX3g9KGkrYSkvcCx0aGlzLl95PS4yNSpwLHRoaXMuX3o9KGwrdSkvcH1lbHNle2xldCBwPTIqTWF0aC5zcXJ0KDEraC1uLXMpO3RoaXMuX3c9KGEtaSkvcCx0aGlzLl94PShvK2MpL3AsdGhpcy5feT0obCt1KS9wLHRoaXMuX3o9LjI1KnB9cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Vbml0VmVjdG9ycyh0LHIpe2xldCBuPXQuZG90KHIpKzE7cmV0dXJuIG48TnVtYmVyLkVQU0lMT04/KG49MCxNYXRoLmFicyh0LngpPk1hdGguYWJzKHQueik/KHRoaXMuX3g9LXQueSx0aGlzLl95PXQueCx0aGlzLl96PTAsdGhpcy5fdz1uKToodGhpcy5feD0wLHRoaXMuX3k9LXQueix0aGlzLl96PXQueSx0aGlzLl93PW4pKToodGhpcy5feD10Lnkqci56LXQueipyLnksdGhpcy5feT10Lnoqci54LXQueCpyLnosdGhpcy5fej10Lngqci55LXQueSpyLngsdGhpcy5fdz1uKSx0aGlzLm5vcm1hbGl6ZSgpfWFuZ2xlVG8odCl7cmV0dXJuIDIqTWF0aC5hY29zKE1hdGguYWJzKFpvKHRoaXMuZG90KHQpLC0xLDEpKSl9cm90YXRlVG93YXJkcyh0LHIpe2xldCBuPXRoaXMuYW5nbGVUbyh0KTtpZihuPT09MClyZXR1cm4gdGhpcztsZXQgaT1NYXRoLm1pbigxLHIvbik7cmV0dXJuIHRoaXMuc2xlcnAodCxpKSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDAsMCwwLDEpfWludmVydCgpe3JldHVybiB0aGlzLmNvbmp1Z2F0ZSgpfWNvbmp1Z2F0ZSgpe3JldHVybiB0aGlzLl94Kj0tMSx0aGlzLl95Kj0tMSx0aGlzLl96Kj0tMSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMuX3gqdC5feCt0aGlzLl95KnQuX3krdGhpcy5feip0Ll96K3RoaXMuX3cqdC5fd31sZW5ndGhTcSgpe3JldHVybiB0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3d9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfW5vcm1hbGl6ZSgpe2xldCB0PXRoaXMubGVuZ3RoKCk7cmV0dXJuIHQ9PT0wPyh0aGlzLl94PTAsdGhpcy5feT0wLHRoaXMuX3o9MCx0aGlzLl93PTEpOih0PTEvdCx0aGlzLl94PXRoaXMuX3gqdCx0aGlzLl95PXRoaXMuX3kqdCx0aGlzLl96PXRoaXMuX3oqdCx0aGlzLl93PXRoaXMuX3cqdCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bXVsdGlwbHkodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCxyKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHRoaXMpfW11bHRpcGx5UXVhdGVybmlvbnModCxyKXtsZXQgbj10Ll94LGk9dC5feSxvPXQuX3osYT10Ll93LHM9ci5feCxsPXIuX3ksYz1yLl96LHU9ci5fdztyZXR1cm4gdGhpcy5feD1uKnUrYSpzK2kqYy1vKmwsdGhpcy5feT1pKnUrYSpsK28qcy1uKmMsdGhpcy5fej1vKnUrYSpjK24qbC1pKnMsdGhpcy5fdz1hKnUtbipzLWkqbC1vKmMsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnAodCxyKXtpZihyPT09MClyZXR1cm4gdGhpcztpZihyPT09MSlyZXR1cm4gdGhpcy5jb3B5KHQpO2xldCBuPXRoaXMuX3gsaT10aGlzLl95LG89dGhpcy5feixhPXRoaXMuX3cscz1hKnQuX3crbip0Ll94K2kqdC5feStvKnQuX3o7aWYoczwwPyh0aGlzLl93PS10Ll93LHRoaXMuX3g9LXQuX3gsdGhpcy5feT0tdC5feSx0aGlzLl96PS10Ll96LHM9LXMpOnRoaXMuY29weSh0KSxzPj0xKXJldHVybiB0aGlzLl93PWEsdGhpcy5feD1uLHRoaXMuX3k9aSx0aGlzLl96PW8sdGhpcztsZXQgbD0xLXMqcztpZihsPD1OdW1iZXIuRVBTSUxPTil7bGV0IHA9MS1yO3JldHVybiB0aGlzLl93PXAqYStyKnRoaXMuX3csdGhpcy5feD1wKm4rcip0aGlzLl94LHRoaXMuX3k9cCppK3IqdGhpcy5feSx0aGlzLl96PXAqbytyKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31sZXQgYz1NYXRoLnNxcnQobCksdT1NYXRoLmF0YW4yKGMscyksaD1NYXRoLnNpbigoMS1yKSp1KS9jLGY9TWF0aC5zaW4ocip1KS9jO3JldHVybiB0aGlzLl93PWEqaCt0aGlzLl93KmYsdGhpcy5feD1uKmgrdGhpcy5feCpmLHRoaXMuX3k9aSpoK3RoaXMuX3kqZix0aGlzLl96PW8qaCt0aGlzLl96KmYsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnBRdWF0ZXJuaW9ucyh0LHIsbil7cmV0dXJuIHRoaXMuY29weSh0KS5zbGVycChyLG4pfXJhbmRvbSgpe2xldCB0PU1hdGgucmFuZG9tKCkscj1NYXRoLnNxcnQoMS10KSxuPU1hdGguc3FydCh0KSxpPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpLG89MipNYXRoLlBJKk1hdGgucmFuZG9tKCk7cmV0dXJuIHRoaXMuc2V0KHIqTWF0aC5jb3MoaSksbipNYXRoLnNpbihvKSxuKk1hdGguY29zKG8pLHIqTWF0aC5zaW4oaSkpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fdz09PXRoaXMuX3d9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy5feD10W3JdLHRoaXMuX3k9dFtyKzFdLHRoaXMuX3o9dFtyKzJdLHRoaXMuX3c9dFtyKzNdLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMuX3gsdFtyKzFdPXRoaXMuX3ksdFtyKzJdPXRoaXMuX3osdFtyKzNdPXRoaXMuX3csdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscil7cmV0dXJuIHRoaXMuX3g9dC5nZXRYKHIpLHRoaXMuX3k9dC5nZXRZKHIpLHRoaXMuX3o9dC5nZXRaKHIpLHRoaXMuX3c9dC5nZXRXKHIpLHRoaXN9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O3ZpLnByb3RvdHlwZS5pc1F1YXRlcm5pb249ITA7dmFyIGo9Y2xhc3N7Y29uc3RydWN0b3IodD0wLHI9MCxuPTApe3RoaXMueD10LHRoaXMueT1yLHRoaXMuej1ufXNldCh0LHIsbil7cmV0dXJuIG49PT12b2lkIDAmJihuPXRoaXMueiksdGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW4sdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Q29tcG9uZW50KHQscil7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9cjticmVhaztjYXNlIDE6dGhpcy55PXI7YnJlYWs7Y2FzZSAyOnRoaXMuej1yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpc31hZGQodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQscikpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXN9YWRkVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54K3IueCx0aGlzLnk9dC55K3IueSx0aGlzLno9dC56K3Iueix0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LHIpe3JldHVybiB0aGlzLngrPXQueCpyLHRoaXMueSs9dC55KnIsdGhpcy56Kz10Lnoqcix0aGlzfXN1Yih0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxyKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpc31zdWJWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngtci54LHRoaXMueT10Lnktci55LHRoaXMuej10Lnotci56LHRoaXN9bXVsdGlwbHkodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlWZWN0b3JzKHQscikpOih0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzKX1tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpc31tdWx0aXBseVZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueCpyLngsdGhpcy55PXQueSpyLnksdGhpcy56PXQueipyLnosdGhpc31hcHBseUV1bGVyKHQpe3JldHVybiB0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKSx0aGlzLmFwcGx5UXVhdGVybmlvbihwdWUuc2V0RnJvbUV1bGVyKHQpKX1hcHBseUF4aXNBbmdsZSh0LHIpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihwdWUuc2V0RnJvbUF4aXNBbmdsZSh0LHIpKX1hcHBseU1hdHJpeDModCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PW9bMF0qcitvWzNdKm4rb1s2XSppLHRoaXMueT1vWzFdKnIrb1s0XSpuK29bN10qaSx0aGlzLno9b1syXSpyK29bNV0qbitvWzhdKmksdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDModCkubm9ybWFsaXplKCl9YXBwbHlNYXRyaXg0KHQpe2xldCByPXRoaXMueCxuPXRoaXMueSxpPXRoaXMueixvPXQuZWxlbWVudHMsYT0xLyhvWzNdKnIrb1s3XSpuK29bMTFdKmkrb1sxNV0pO3JldHVybiB0aGlzLng9KG9bMF0qcitvWzRdKm4rb1s4XSppK29bMTJdKSphLHRoaXMueT0ob1sxXSpyK29bNV0qbitvWzldKmkrb1sxM10pKmEsdGhpcy56PShvWzJdKnIrb1s2XSpuK29bMTBdKmkrb1sxNF0pKmEsdGhpc31hcHBseVF1YXRlcm5pb24odCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC54LGE9dC55LHM9dC56LGw9dC53LGM9bCpyK2EqaS1zKm4sdT1sKm4rcypyLW8qaSxoPWwqaStvKm4tYSpyLGY9LW8qci1hKm4tcyppO3JldHVybiB0aGlzLng9YypsK2YqLW8rdSotcy1oKi1hLHRoaXMueT11KmwrZiotYStoKi1vLWMqLXMsdGhpcy56PWgqbCtmKi1zK2MqLWEtdSotbyx0aGlzfXByb2plY3QodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGRJbnZlcnNlKS5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4KX11bnByb2plY3QodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKX10cmFuc2Zvcm1EaXJlY3Rpb24odCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PW9bMF0qcitvWzRdKm4rb1s4XSppLHRoaXMueT1vWzFdKnIrb1s1XSpuK29bOV0qaSx0aGlzLno9b1syXSpyK29bNl0qbitvWzEwXSppLHRoaXMubm9ybWFsaXplKCl9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzLnovPXQueix0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXN9Y2xhbXAodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihyLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihyLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihyLnosdGhpcy56KSksdGhpc31jbGFtcFNjYWxhcih0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnopKSx0aGlzfWNsYW1wTGVuZ3RoKHQscil7bGV0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihyLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0Lnp9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnp9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueil9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LHIpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSpyLHRoaXMueSs9KHQueS10aGlzLnkpKnIsdGhpcy56Kz0odC56LXRoaXMueikqcix0aGlzfWxlcnBWZWN0b3JzKHQscixuKXtyZXR1cm4gdGhpcy54PXQueCsoci54LXQueCkqbix0aGlzLnk9dC55KyhyLnktdC55KSpuLHRoaXMuej10LnorKHIuei10LnopKm4sdGhpc31jcm9zcyh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5jcm9zcygpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmNyb3NzVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5jcm9zc1ZlY3RvcnModCxyKSk6dGhpcy5jcm9zc1ZlY3RvcnModGhpcyx0KX1jcm9zc1ZlY3RvcnModCxyKXtsZXQgbj10LngsaT10Lnksbz10LnosYT1yLngscz1yLnksbD1yLno7cmV0dXJuIHRoaXMueD1pKmwtbypzLHRoaXMueT1vKmEtbipsLHRoaXMuej1uKnMtaSphLHRoaXN9cHJvamVjdE9uVmVjdG9yKHQpe2xldCByPXQubGVuZ3RoU3EoKTtpZihyPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDApO2xldCBuPXQuZG90KHRoaXMpL3I7cmV0dXJuIHRoaXMuY29weSh0KS5tdWx0aXBseVNjYWxhcihuKX1wcm9qZWN0T25QbGFuZSh0KXtyZXR1cm4gWGN0LmNvcHkodGhpcykucHJvamVjdE9uVmVjdG9yKHQpLHRoaXMuc3ViKFhjdCl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIoWGN0LmNvcHkodCkubXVsdGlwbHlTY2FsYXIoMip0aGlzLmRvdCh0KSkpfWFuZ2xlVG8odCl7bGV0IHI9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoU3EoKSp0Lmxlbmd0aFNxKCkpO2lmKHI9PT0wKXJldHVybiBNYXRoLlBJLzI7bGV0IG49dGhpcy5kb3QodCkvcjtyZXR1cm4gTWF0aC5hY29zKFpvKG4sLTEsMSkpfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtsZXQgcj10aGlzLngtdC54LG49dGhpcy55LXQueSxpPXRoaXMuei10Lno7cmV0dXJuIHIqcituKm4raSppfW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpK01hdGguYWJzKHRoaXMuei10LnopfXNldEZyb21TcGhlcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnBoaSx0LnRoZXRhKX1zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQscixuKXtsZXQgaT1NYXRoLnNpbihyKSp0O3JldHVybiB0aGlzLng9aSpNYXRoLnNpbihuKSx0aGlzLnk9TWF0aC5jb3MocikqdCx0aGlzLno9aSpNYXRoLmNvcyhuKSx0aGlzfXNldEZyb21DeWxpbmRyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModC5yYWRpdXMsdC50aGV0YSx0LnkpfXNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LHIsbil7cmV0dXJuIHRoaXMueD10Kk1hdGguc2luKHIpLHRoaXMueT1uLHRoaXMuej10Kk1hdGguY29zKHIpLHRoaXN9c2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1yWzEyXSx0aGlzLnk9clsxM10sdGhpcy56PXJbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeFNjYWxlKHQpe2xldCByPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLG49dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gdGhpcy54PXIsdGhpcy55PW4sdGhpcy56PWksdGhpc31zZXRGcm9tTWF0cml4Q29sdW1uKHQscil7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMscio0KX1zZXRGcm9tTWF0cml4M0NvbHVtbih0LHIpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLHIqMyl9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56fWZyb21BcnJheSh0LHI9MCl7cmV0dXJuIHRoaXMueD10W3JdLHRoaXMueT10W3IrMV0sdGhpcy56PXRbcisyXSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMueCx0W3IrMV09dGhpcy55LHRbcisyXT10aGlzLnosdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscixuKXtyZXR1cm4gbiE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChyKSx0aGlzLnk9dC5nZXRZKHIpLHRoaXMuej10LmdldFoociksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpc31yYW5kb21EaXJlY3Rpb24oKXtsZXQgdD0oTWF0aC5yYW5kb20oKS0uNSkqMixyPU1hdGgucmFuZG9tKCkqTWF0aC5QSSoyLG49TWF0aC5zcXJ0KDEtRUkodCwyKSk7cmV0dXJuIHRoaXMueD1uKk1hdGguY29zKHIpLHRoaXMueT1uKk1hdGguc2luKHIpLHRoaXMuej10LHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueSx5aWVsZCB0aGlzLnp9fTtqLnByb3RvdHlwZS5pc1ZlY3RvcjM9ITA7dmFyIFhjdD1uZXcgaixwdWU9bmV3IHZpLHRhPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGooMS8wLDEvMCwxLzApLHI9bmV3IGooLTEvMCwtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PXJ9c2V0KHQscil7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShyKSx0aGlzfXNldEZyb21BcnJheSh0KXtsZXQgcj0xLzAsbj0xLzAsaT0xLzAsbz0tMS8wLGE9LTEvMCxzPS0xLzA7Zm9yKGxldCBsPTAsYz10Lmxlbmd0aDtsPGM7bCs9Myl7bGV0IHU9dFtsXSxoPXRbbCsxXSxmPXRbbCsyXTt1PHImJihyPXUpLGg8biYmKG49aCksZjxpJiYoaT1mKSx1Pm8mJihvPXUpLGg+YSYmKGE9aCksZj5zJiYocz1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KHIsbixpKSx0aGlzLm1heC5zZXQobyxhLHMpLHRoaXN9c2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KXtsZXQgcj0xLzAsbj0xLzAsaT0xLzAsbz0tMS8wLGE9LTEvMCxzPS0xLzA7Zm9yKGxldCBsPTAsYz10LmNvdW50O2w8YztsKyspe2xldCB1PXQuZ2V0WChsKSxoPXQuZ2V0WShsKSxmPXQuZ2V0WihsKTt1PHImJihyPXUpLGg8biYmKG49aCksZjxpJiYoaT1mKSx1Pm8mJihvPXUpLGg+YSYmKGE9aCksZj5zJiYocz1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KHIsbixpKSx0aGlzLm1heC5zZXQobyxhLHMpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtyXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxyKXtsZXQgbj1tdi5jb3B5KHIpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIobiksdGhpcy5tYXguY29weSh0KS5hZGQobiksdGhpc31zZXRGcm9tT2JqZWN0KHQscj0hMSl7cmV0dXJuIHRoaXMubWFrZUVtcHR5KCksdGhpcy5leHBhbmRCeU9iamVjdCh0LHIpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LHI9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBuPXQuZ2VvbWV0cnk7aWYobiE9PXZvaWQgMClpZihyJiZuLmF0dHJpYnV0ZXMhPW51bGwmJm4uYXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMCl7bGV0IG89bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgYT0wLHM9by5jb3VudDthPHM7YSsrKW12LmZyb21CdWZmZXJBdHRyaWJ1dGUobyxhKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KG12KX1lbHNlIG4uYm91bmRpbmdCb3g9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ0JveCgpLCRjdC5jb3B5KG4uYm91bmRpbmdCb3gpLCRjdC5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy51bmlvbigkY3QpO2xldCBpPXQuY2hpbGRyZW47Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXRoaXMuZXhwYW5kQnlPYmplY3QoaVtvXSxyKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQscil7cmV0dXJuIHIuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLG12KSxtdi5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgcixuO3JldHVybiB0Lm5vcm1hbC54PjA/KHI9dC5ub3JtYWwueCp0aGlzLm1pbi54LG49dC5ub3JtYWwueCp0aGlzLm1heC54KToocj10Lm5vcm1hbC54KnRoaXMubWF4Lngsbj10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8ocis9dC5ub3JtYWwueSp0aGlzLm1pbi55LG4rPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KHIrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxuKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8ocis9dC5ub3JtYWwueip0aGlzLm1pbi56LG4rPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KHIrPXQubm9ybWFsLnoqdGhpcy5tYXgueixuKz10Lm5vcm1hbC56KnRoaXMubWluLnopLHI8PS10LmNvbnN0YW50JiZuPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoSVApLGhWLnN1YlZlY3RvcnModGhpcy5tYXgsSVApLHgzLnN1YlZlY3RvcnModC5hLElQKSxiMy5zdWJWZWN0b3JzKHQuYixJUCksdzMuc3ViVmVjdG9ycyh0LmMsSVApLFAwLnN1YlZlY3RvcnMoYjMseDMpLEkwLnN1YlZlY3RvcnModzMsYjMpLGd2LnN1YlZlY3RvcnMoeDMsdzMpO2xldCByPVswLC1QMC56LFAwLnksMCwtSTAueixJMC55LDAsLWd2LnosZ3YueSxQMC56LDAsLVAwLngsSTAueiwwLC1JMC54LGd2LnosMCwtZ3YueCwtUDAueSxQMC54LDAsLUkwLnksSTAueCwwLC1ndi55LGd2LngsMF07cmV0dXJuIUtjdChyLHgzLGIzLHczLGhWKXx8KHI9WzEsMCwwLDAsMSwwLDAsMCwxXSwhS2N0KHIseDMsYjMsdzMsaFYpKT8hMTooZlYuY3Jvc3NWZWN0b3JzKFAwLEkwKSxyPVtmVi54LGZWLnksZlYuel0sS2N0KHIseDMsYjMsdzMsaFYpKX1jbGFtcFBvaW50KHQscil7cmV0dXJuIHIuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBtdi5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9Z2V0Qm91bmRpbmdTcGhlcmUodCl7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKHQuY2VudGVyKSx0LnJhZGl1cz10aGlzLmdldFNpemUobXYpLmxlbmd0aCgpKi41LHR9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90aGlzOihWZFswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxWZFsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxWZFsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxWZFszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxWZFs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxWZFs1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxWZFs2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxWZFs3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoVmQpLHRoaXMpfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O3RhLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIFZkPVtuZXcgaixuZXcgaixuZXcgaixuZXcgaixuZXcgaixuZXcgaixuZXcgaixuZXcgal0sbXY9bmV3IGosJGN0PW5ldyB0YSx4Mz1uZXcgaixiMz1uZXcgaix3Mz1uZXcgaixQMD1uZXcgaixJMD1uZXcgaixndj1uZXcgaixJUD1uZXcgaixoVj1uZXcgaixmVj1uZXcgaixfdj1uZXcgajtmdW5jdGlvbiBLY3QoZSx0LHIsbixpKXtmb3IobGV0IG89MCxhPWUubGVuZ3RoLTM7bzw9YTtvKz0zKXtfdi5mcm9tQXJyYXkoZSxvKTtsZXQgcz1pLngqTWF0aC5hYnMoX3YueCkraS55Kk1hdGguYWJzKF92LnkpK2kueipNYXRoLmFicyhfdi56KSxsPXQuZG90KF92KSxjPXIuZG90KF92KSx1PW4uZG90KF92KTtpZihNYXRoLm1heCgtTWF0aC5tYXgobCxjLHUpLE1hdGgubWluKGwsYyx1KSk+cylyZXR1cm4hMX1yZXR1cm4hMH12YXIgcmZyPW5ldyB0YSxkdWU9bmV3IGoscFY9bmV3IGosWmN0PW5ldyBqLFpmPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGoscj0tMSl7dGhpcy5jZW50ZXI9dCx0aGlzLnJhZGl1cz1yfXNldCh0LHIpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQpLHRoaXMucmFkaXVzPXIsdGhpc31zZXRGcm9tUG9pbnRzKHQscil7bGV0IG49dGhpcy5jZW50ZXI7ciE9PXZvaWQgMD9uLmNvcHkocik6cmZyLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKG4pO2xldCBpPTA7Zm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7bysrKWk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKHRbb10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KGkpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IHI9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9cipyfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxyKXtsZXQgbj10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gci5jb3B5KHQpLG4+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihyLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksci5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSkscn1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7WmN0LnN1YlZlY3RvcnModCx0aGlzLmNlbnRlcik7bGV0IHI9WmN0Lmxlbmd0aFNxKCk7aWYocj50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyl7bGV0IG49TWF0aC5zcXJ0KHIpLGk9KG4tdGhpcy5yYWRpdXMpKi41O3RoaXMuY2VudGVyLmFkZChaY3QubXVsdGlwbHlTY2FsYXIoaS9uKSksdGhpcy5yYWRpdXMrPWl9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMuY2VudGVyLmVxdWFscyh0LmNlbnRlcik9PT0hMD9wVi5zZXQoMCwwLDEpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKTpwVi5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0LnJhZGl1cyksdGhpcy5leHBhbmRCeVBvaW50KGR1ZS5jb3B5KHQuY2VudGVyKS5hZGQocFYpKSx0aGlzLmV4cGFuZEJ5UG9pbnQoZHVlLmNvcHkodC5jZW50ZXIpLnN1YihwVikpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZ0LnJhZGl1cz09PXRoaXMucmFkaXVzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LFVkPW5ldyBqLEpjdD1uZXcgaixkVj1uZXcgaixMMD1uZXcgaixRY3Q9bmV3IGosbVY9bmV3IGosdHV0PW5ldyBqLEpmPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGoscj1uZXcgaigwLDAsLTEpKXt0aGlzLm9yaWdpbj10LHRoaXMuZGlyZWN0aW9uPXJ9c2V0KHQscil7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodCksdGhpcy5kaXJlY3Rpb24uY29weShyKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodC5vcmlnaW4pLHRoaXMuZGlyZWN0aW9uLmNvcHkodC5kaXJlY3Rpb24pLHRoaXN9YXQodCxyKXtyZXR1cm4gci5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5vcmlnaW4pfWxvb2tBdCh0KXtyZXR1cm4gdGhpcy5kaXJlY3Rpb24uY29weSh0KS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXN9cmVjYXN0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHRoaXMuYXQodCxVZCkpLHRoaXN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LHIpe3Iuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKTtsZXQgbj1yLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIG48MD9yLmNvcHkodGhpcy5vcmlnaW4pOnIuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIobikuYWRkKHRoaXMub3JpZ2luKX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQpKX1kaXN0YW5jZVNxVG9Qb2ludCh0KXtsZXQgcj1VZC5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIHI8MD90aGlzLm9yaWdpbi5kaXN0YW5jZVRvU3F1YXJlZCh0KTooVWQuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIocikuYWRkKHRoaXMub3JpZ2luKSxVZC5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VTcVRvU2VnbWVudCh0LHIsbixpKXtKY3QuY29weSh0KS5hZGQocikubXVsdGlwbHlTY2FsYXIoLjUpLGRWLmNvcHkocikuc3ViKHQpLm5vcm1hbGl6ZSgpLEwwLmNvcHkodGhpcy5vcmlnaW4pLnN1YihKY3QpO2xldCBvPXQuZGlzdGFuY2VUbyhyKSouNSxhPS10aGlzLmRpcmVjdGlvbi5kb3QoZFYpLHM9TDAuZG90KHRoaXMuZGlyZWN0aW9uKSxsPS1MMC5kb3QoZFYpLGM9TDAubGVuZ3RoU3EoKSx1PU1hdGguYWJzKDEtYSphKSxoLGYscCxkO2lmKHU+MClpZihoPWEqbC1zLGY9YSpzLWwsZD1vKnUsaD49MClpZihmPj0tZClpZihmPD1kKXtsZXQgZz0xL3U7aCo9ZyxmKj1nLHA9aCooaCthKmYrMipzKStmKihhKmgrZisyKmwpK2N9ZWxzZSBmPW8saD1NYXRoLm1heCgwLC0oYSpmK3MpKSxwPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPS1vLGg9TWF0aC5tYXgoMCwtKGEqZitzKSkscD0taCpoK2YqKGYrMipsKStjO2Vsc2UgZjw9LWQ/KGg9TWF0aC5tYXgoMCwtKC1hKm8rcykpLGY9aD4wPy1vOk1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxwPS1oKmgrZiooZisyKmwpK2MpOmY8PWQ/KGg9MCxmPU1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxwPWYqKGYrMipsKStjKTooaD1NYXRoLm1heCgwLC0oYSpvK3MpKSxmPWg+MD9vOk1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxwPS1oKmgrZiooZisyKmwpK2MpO2Vsc2UgZj1hPjA/LW86byxoPU1hdGgubWF4KDAsLShhKmYrcykpLHA9LWgqaCtmKihmKzIqbCkrYztyZXR1cm4gbiYmbi5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihoKS5hZGQodGhpcy5vcmlnaW4pLGkmJmkuY29weShkVikubXVsdGlwbHlTY2FsYXIoZikuYWRkKEpjdCkscH1pbnRlcnNlY3RTcGhlcmUodCxyKXtVZC5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMub3JpZ2luKTtsZXQgbj1VZC5kb3QodGhpcy5kaXJlY3Rpb24pLGk9VWQuZG90KFVkKS1uKm4sbz10LnJhZGl1cyp0LnJhZGl1cztpZihpPm8pcmV0dXJuIG51bGw7bGV0IGE9TWF0aC5zcXJ0KG8taSkscz1uLWEsbD1uK2E7cmV0dXJuIHM8MCYmbDwwP251bGw6czwwP3RoaXMuYXQobCxyKTp0aGlzLmF0KHMscil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWRpc3RhbmNlVG9QbGFuZSh0KXtsZXQgcj10Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKHI9PT0wKXJldHVybiB0LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik9PT0wPzA6bnVsbDtsZXQgbj0tKHRoaXMub3JpZ2luLmRvdCh0Lm5vcm1hbCkrdC5jb25zdGFudCkvcjtyZXR1cm4gbj49MD9uOm51bGx9aW50ZXJzZWN0UGxhbmUodCxyKXtsZXQgbj10aGlzLmRpc3RhbmNlVG9QbGFuZSh0KTtyZXR1cm4gbj09PW51bGw/bnVsbDp0aGlzLmF0KG4scil9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCByPXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gcj09PTB8fHQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbikqcjwwfWludGVyc2VjdEJveCh0LHIpe2xldCBuLGksbyxhLHMsbCxjPTEvdGhpcy5kaXJlY3Rpb24ueCx1PTEvdGhpcy5kaXJlY3Rpb24ueSxoPTEvdGhpcy5kaXJlY3Rpb24ueixmPXRoaXMub3JpZ2luO3JldHVybiBjPj0wPyhuPSh0Lm1pbi54LWYueCkqYyxpPSh0Lm1heC54LWYueCkqYyk6KG49KHQubWF4LngtZi54KSpjLGk9KHQubWluLngtZi54KSpjKSx1Pj0wPyhvPSh0Lm1pbi55LWYueSkqdSxhPSh0Lm1heC55LWYueSkqdSk6KG89KHQubWF4LnktZi55KSp1LGE9KHQubWluLnktZi55KSp1KSxuPmF8fG8+aXx8KChvPm58fG4hPT1uKSYmKG49byksKGE8aXx8aSE9PWkpJiYoaT1hKSxoPj0wPyhzPSh0Lm1pbi56LWYueikqaCxsPSh0Lm1heC56LWYueikqaCk6KHM9KHQubWF4LnotZi56KSpoLGw9KHQubWluLnotZi56KSpoKSxuPmx8fHM+aSl8fCgocz5ufHxuIT09bikmJihuPXMpLChsPGl8fGkhPT1pKSYmKGk9bCksaTwwKT9udWxsOnRoaXMuYXQobj49MD9uOmkscil9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdGhpcy5pbnRlcnNlY3RCb3godCxVZCkhPT1udWxsfWludGVyc2VjdFRyaWFuZ2xlKHQscixuLGksbyl7UWN0LnN1YlZlY3RvcnMocix0KSxtVi5zdWJWZWN0b3JzKG4sdCksdHV0LmNyb3NzVmVjdG9ycyhRY3QsbVYpO2xldCBhPXRoaXMuZGlyZWN0aW9uLmRvdCh0dXQpLHM7aWYoYT4wKXtpZihpKXJldHVybiBudWxsO3M9MX1lbHNlIGlmKGE8MClzPS0xLGE9LWE7ZWxzZSByZXR1cm4gbnVsbDtMMC5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2xldCBsPXMqdGhpcy5kaXJlY3Rpb24uZG90KG1WLmNyb3NzVmVjdG9ycyhMMCxtVikpO2lmKGw8MClyZXR1cm4gbnVsbDtsZXQgYz1zKnRoaXMuZGlyZWN0aW9uLmRvdChRY3QuY3Jvc3MoTDApKTtpZihjPDB8fGwrYz5hKXJldHVybiBudWxsO2xldCB1PS1zKkwwLmRvdCh0dXQpO3JldHVybiB1PDA/bnVsbDp0aGlzLmF0KHUvYSxvKX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMub3JpZ2luLmFwcGx5TWF0cml4NCh0KSx0aGlzLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQub3JpZ2luLmVxdWFscyh0aGlzLm9yaWdpbikmJnQuZGlyZWN0aW9uLmVxdWFscyh0aGlzLmRpcmVjdGlvbil9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sTWU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQscixuLGksbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8pe2xldCB5PXRoaXMuZWxlbWVudHM7cmV0dXJuIHlbMF09dCx5WzRdPXIseVs4XT1uLHlbMTJdPWkseVsxXT1vLHlbNV09YSx5WzldPXMseVsxM109bCx5WzJdPWMseVs2XT11LHlbMTBdPWgseVsxNF09Zix5WzNdPXAseVs3XT1kLHlbMTFdPWcseVsxNV09Xyx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IE1lKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfWNvcHkodCl7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7cmV0dXJuIHJbMF09blswXSxyWzFdPW5bMV0sclsyXT1uWzJdLHJbM109blszXSxyWzRdPW5bNF0scls1XT1uWzVdLHJbNl09bls2XSxyWzddPW5bN10scls4XT1uWzhdLHJbOV09bls5XSxyWzEwXT1uWzEwXSxyWzExXT1uWzExXSxyWzEyXT1uWzEyXSxyWzEzXT1uWzEzXSxyWzE0XT1uWzE0XSxyWzE1XT1uWzE1XSx0aGlzfWNvcHlQb3NpdGlvbih0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclsxMl09blsxMl0sclsxM109blsxM10sclsxNF09blsxNF0sdGhpc31zZXRGcm9tTWF0cml4Myh0KXtsZXQgcj10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChyWzBdLHJbM10scls2XSwwLHJbMV0scls0XSxyWzddLDAsclsyXSxyWzVdLHJbOF0sMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RCYXNpcyh0LHIsbil7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDApLHIuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpLHRoaXN9bWFrZUJhc2lzKHQscixuKXtyZXR1cm4gdGhpcy5zZXQodC54LHIueCxuLngsMCx0Lnksci55LG4ueSwwLHQueixyLnosbi56LDAsMCwwLDAsMSksdGhpc31leHRyYWN0Um90YXRpb24odCl7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHMsaT0xL1MzLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxvPTEvUzMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLGE9MS9TMy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIHJbMF09blswXSppLHJbMV09blsxXSppLHJbMl09blsyXSppLHJbM109MCxyWzRdPW5bNF0qbyxyWzVdPW5bNV0qbyxyWzZdPW5bNl0qbyxyWzddPTAscls4XT1uWzhdKmEscls5XT1uWzldKmEsclsxMF09blsxMF0qYSxyWzExXT0wLHJbMTJdPTAsclsxM109MCxyWzE0XT0wLHJbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tRXVsZXIodCl7dCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubWFrZVJvdGF0aW9uRnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYSBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCByPXRoaXMuZWxlbWVudHMsbj10LngsaT10Lnksbz10LnosYT1NYXRoLmNvcyhuKSxzPU1hdGguc2luKG4pLGw9TWF0aC5jb3MoaSksYz1NYXRoLnNpbihpKSx1PU1hdGguY29zKG8pLGg9TWF0aC5zaW4obyk7aWYodC5vcmRlcj09PSJYWVoiKXtsZXQgZj1hKnUscD1hKmgsZD1zKnUsZz1zKmg7clswXT1sKnUscls0XT0tbCpoLHJbOF09YyxyWzFdPXArZCpjLHJbNV09Zi1nKmMscls5XT0tcypsLHJbMl09Zy1mKmMscls2XT1kK3AqYyxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IllYWiIpe2xldCBmPWwqdSxwPWwqaCxkPWMqdSxnPWMqaDtyWzBdPWYrZypzLHJbNF09ZCpzLXAscls4XT1hKmMsclsxXT1hKmgscls1XT1hKnUscls5XT0tcyxyWzJdPXAqcy1kLHJbNl09ZytmKnMsclsxMF09YSpsfWVsc2UgaWYodC5vcmRlcj09PSJaWFkiKXtsZXQgZj1sKnUscD1sKmgsZD1jKnUsZz1jKmg7clswXT1mLWcqcyxyWzRdPS1hKmgscls4XT1kK3AqcyxyWzFdPXArZCpzLHJbNV09YSp1LHJbOV09Zy1mKnMsclsyXT0tYSpjLHJbNl09cyxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IlpZWCIpe2xldCBmPWEqdSxwPWEqaCxkPXMqdSxnPXMqaDtyWzBdPWwqdSxyWzRdPWQqYy1wLHJbOF09ZipjK2csclsxXT1sKmgscls1XT1nKmMrZixyWzldPXAqYy1kLHJbMl09LWMscls2XT1zKmwsclsxMF09YSpsfWVsc2UgaWYodC5vcmRlcj09PSJZWlgiKXtsZXQgZj1hKmwscD1hKmMsZD1zKmwsZz1zKmM7clswXT1sKnUscls0XT1nLWYqaCxyWzhdPWQqaCtwLHJbMV09aCxyWzVdPWEqdSxyWzldPS1zKnUsclsyXT0tYyp1LHJbNl09cCpoK2QsclsxMF09Zi1nKmh9ZWxzZSBpZih0Lm9yZGVyPT09IlhaWSIpe2xldCBmPWEqbCxwPWEqYyxkPXMqbCxnPXMqYztyWzBdPWwqdSxyWzRdPS1oLHJbOF09Yyp1LHJbMV09ZipoK2cscls1XT1hKnUscls5XT1wKmgtZCxyWzJdPWQqaC1wLHJbNl09cyp1LHJbMTBdPWcqaCtmfXJldHVybiByWzNdPTAscls3XT0wLHJbMTFdPTAsclsxMl09MCxyWzEzXT0wLHJbMTRdPTAsclsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLmNvbXBvc2UobmZyLHQsaWZyKX1sb29rQXQodCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIGtsLnN1YlZlY3RvcnModCxyKSxrbC5sZW5ndGhTcSgpPT09MCYmKGtsLno9MSksa2wubm9ybWFsaXplKCksazAuY3Jvc3NWZWN0b3JzKG4sa2wpLGswLmxlbmd0aFNxKCk9PT0wJiYoTWF0aC5hYnMobi56KT09PTE/a2wueCs9MWUtNDprbC56Kz0xZS00LGtsLm5vcm1hbGl6ZSgpLGswLmNyb3NzVmVjdG9ycyhuLGtsKSksazAubm9ybWFsaXplKCksZ1YuY3Jvc3NWZWN0b3JzKGtsLGswKSxpWzBdPWswLngsaVs0XT1nVi54LGlbOF09a2wueCxpWzFdPWswLnksaVs1XT1nVi55LGlbOV09a2wueSxpWzJdPWswLnosaVs2XT1nVi56LGlbMTBdPWtsLnosdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5TWF0cmljZXMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHIpKTp0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LHIpe2xldCBuPXQuZWxlbWVudHMsaT1yLmVsZW1lbnRzLG89dGhpcy5lbGVtZW50cyxhPW5bMF0scz1uWzRdLGw9bls4XSxjPW5bMTJdLHU9blsxXSxoPW5bNV0sZj1uWzldLHA9blsxM10sZD1uWzJdLGc9bls2XSxfPW5bMTBdLHk9blsxNF0seD1uWzNdLGI9bls3XSxTPW5bMTFdLEM9blsxNV0sUD1pWzBdLGs9aVs0XSxPPWlbOF0sRD1pWzEyXSxCPWlbMV0sST1pWzVdLEw9aVs5XSxSPWlbMTNdLEY9aVsyXSx6PWlbNl0sVT1pWzEwXSxXPWlbMTRdLFo9aVszXSxydD1pWzddLG90PWlbMTFdLHN0PWlbMTVdO3JldHVybiBvWzBdPWEqUCtzKkIrbCpGK2MqWixvWzRdPWEqaytzKkkrbCp6K2MqcnQsb1s4XT1hKk8rcypMK2wqVStjKm90LG9bMTJdPWEqRCtzKlIrbCpXK2Mqc3Qsb1sxXT11KlAraCpCK2YqRitwKlosb1s1XT11KmsraCpJK2YqeitwKnJ0LG9bOV09dSpPK2gqTCtmKlUrcCpvdCxvWzEzXT11KkQraCpSK2YqVytwKnN0LG9bMl09ZCpQK2cqQitfKkYreSpaLG9bNl09ZCprK2cqSStfKnoreSpydCxvWzEwXT1kKk8rZypMK18qVSt5Km90LG9bMTRdPWQqRCtnKlIrXypXK3kqc3Qsb1szXT14KlArYipCK1MqRitDKlosb1s3XT14KmsrYipJK1MqeitDKnJ0LG9bMTFdPXgqTytiKkwrUypVK0Mqb3Qsb1sxNV09eCpEK2IqUitTKlcrQypzdCx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCByPXRoaXMuZWxlbWVudHM7cmV0dXJuIHJbMF0qPXQscls0XSo9dCxyWzhdKj10LHJbMTJdKj10LHJbMV0qPXQscls1XSo9dCxyWzldKj10LHJbMTNdKj10LHJbMl0qPXQscls2XSo9dCxyWzEwXSo9dCxyWzE0XSo9dCxyWzNdKj10LHJbN10qPXQsclsxMV0qPXQsclsxNV0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFs0XSxpPXRbOF0sbz10WzEyXSxhPXRbMV0scz10WzVdLGw9dFs5XSxjPXRbMTNdLHU9dFsyXSxoPXRbNl0sZj10WzEwXSxwPXRbMTRdLGQ9dFszXSxnPXRbN10sXz10WzExXSx5PXRbMTVdO3JldHVybiBkKigrbypsKmgtaSpjKmgtbypzKmYrbipjKmYraSpzKnAtbipsKnApK2cqKCtyKmwqcC1yKmMqZitvKmEqZi1pKmEqcCtpKmMqdS1vKmwqdSkrXyooK3IqYypoLXIqcypwLW8qYSpoK24qYSpwK28qcyp1LW4qYyp1KSt5KigtaSpzKnUtcipsKmgrcipzKmYraSphKmgtbiphKmYrbipsKnUpfXRyYW5zcG9zZSgpe2xldCB0PXRoaXMuZWxlbWVudHMscjtyZXR1cm4gcj10WzFdLHRbMV09dFs0XSx0WzRdPXIscj10WzJdLHRbMl09dFs4XSx0WzhdPXIscj10WzZdLHRbNl09dFs5XSx0WzldPXIscj10WzNdLHRbM109dFsxMl0sdFsxMl09cixyPXRbN10sdFs3XT10WzEzXSx0WzEzXT1yLHI9dFsxMV0sdFsxMV09dFsxNF0sdFsxNF09cix0aGlzfXNldFBvc2l0aW9uKHQscixuKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0LmlzVmVjdG9yMz8oaVsxMl09dC54LGlbMTNdPXQueSxpWzE0XT10LnopOihpWzEyXT10LGlbMTNdPXIsaVsxNF09biksdGhpc31pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSxuPXRbMV0saT10WzJdLG89dFszXSxhPXRbNF0scz10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGg9dFs5XSxmPXRbMTBdLHA9dFsxMV0sZD10WzEyXSxnPXRbMTNdLF89dFsxNF0seT10WzE1XSx4PWgqXypjLWcqZipjK2cqbCpwLXMqXypwLWgqbCp5K3MqZip5LGI9ZCpmKmMtdSpfKmMtZCpsKnArYSpfKnArdSpsKnktYSpmKnksUz11KmcqYy1kKmgqYytkKnMqcC1hKmcqcC11KnMqeSthKmgqeSxDPWQqaCpsLXUqZypsLWQqcypmK2EqZypmK3UqcypfLWEqaCpfLFA9cip4K24qYitpKlMrbypDO2lmKFA9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgaz0xL1A7cmV0dXJuIHRbMF09eCprLHRbMV09KGcqZipvLWgqXypvLWcqaSpwK24qXypwK2gqaSp5LW4qZip5KSprLHRbMl09KHMqXypvLWcqbCpvK2cqaSpjLW4qXypjLXMqaSp5K24qbCp5KSprLHRbM109KGgqbCpvLXMqZipvLWgqaSpjK24qZipjK3MqaSpwLW4qbCpwKSprLHRbNF09YiprLHRbNV09KHUqXypvLWQqZipvK2QqaSpwLXIqXypwLXUqaSp5K3IqZip5KSprLHRbNl09KGQqbCpvLWEqXypvLWQqaSpjK3IqXypjK2EqaSp5LXIqbCp5KSprLHRbN109KGEqZipvLXUqbCpvK3UqaSpjLXIqZipjLWEqaSpwK3IqbCpwKSprLHRbOF09UyprLHRbOV09KGQqaCpvLXUqZypvLWQqbipwK3IqZypwK3Uqbip5LXIqaCp5KSprLHRbMTBdPShhKmcqby1kKnMqbytkKm4qYy1yKmcqYy1hKm4qeStyKnMqeSkqayx0WzExXT0odSpzKm8tYSpoKm8tdSpuKmMrcipoKmMrYSpuKnAtcipzKnApKmssdFsxMl09QyprLHRbMTNdPSh1KmcqaS1kKmgqaStkKm4qZi1yKmcqZi11Km4qXytyKmgqXykqayx0WzE0XT0oZCpzKmktYSpnKmktZCpuKmwrcipnKmwrYSpuKl8tcipzKl8pKmssdFsxNV09KGEqaCppLXUqcyppK3UqbipsLXIqaCpsLWEqbipmK3IqcypmKSprLHRoaXN9c2NhbGUodCl7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQueCxpPXQueSxvPXQuejtyZXR1cm4gclswXSo9bixyWzRdKj1pLHJbOF0qPW8sclsxXSo9bixyWzVdKj1pLHJbOV0qPW8sclsyXSo9bixyWzZdKj1pLHJbMTBdKj1vLHJbM10qPW4scls3XSo9aSxyWzExXSo9byx0aGlzfWdldE1heFNjYWxlT25BeGlzKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyPXRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdLG49dFs0XSp0WzRdK3RbNV0qdFs1XSt0WzZdKnRbNl0saT10WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdO3JldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgocixuLGkpKX1tYWtlVHJhbnNsYXRpb24odCxyLG4pe3JldHVybiB0aGlzLnNldCgxLDAsMCx0LDAsMSwwLHIsMCwwLDEsbiwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblgodCl7bGV0IHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLHIsLW4sMCwwLG4sciwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWSh0KXtsZXQgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChyLDAsbiwwLDAsMSwwLDAsLW4sMCxyLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25aKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KHIsLW4sMCwwLG4sciwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbkF4aXModCxyKXtsZXQgbj1NYXRoLmNvcyhyKSxpPU1hdGguc2luKHIpLG89MS1uLGE9dC54LHM9dC55LGw9dC56LGM9byphLHU9bypzO3JldHVybiB0aGlzLnNldChjKmErbixjKnMtaSpsLGMqbCtpKnMsMCxjKnMraSpsLHUqcytuLHUqbC1pKmEsMCxjKmwtaSpzLHUqbCtpKmEsbypsKmwrbiwwLDAsMCwwLDEpLHRoaXN9bWFrZVNjYWxlKHQscixuKXtyZXR1cm4gdGhpcy5zZXQodCwwLDAsMCwwLHIsMCwwLDAsMCxuLDAsMCwwLDAsMSksdGhpc31tYWtlU2hlYXIodCxyLG4saSxvLGEpe3JldHVybiB0aGlzLnNldCgxLG4sbywwLHQsMSxhLDAscixpLDEsMCwwLDAsMCwxKSx0aGlzfWNvbXBvc2UodCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHMsbz1yLl94LGE9ci5feSxzPXIuX3osbD1yLl93LGM9bytvLHU9YSthLGg9cytzLGY9bypjLHA9byp1LGQ9bypoLGc9YSp1LF89YSpoLHk9cypoLHg9bCpjLGI9bCp1LFM9bCpoLEM9bi54LFA9bi55LGs9bi56O3JldHVybiBpWzBdPSgxLShnK3kpKSpDLGlbMV09KHArUykqQyxpWzJdPShkLWIpKkMsaVszXT0wLGlbNF09KHAtUykqUCxpWzVdPSgxLShmK3kpKSpQLGlbNl09KF8reCkqUCxpWzddPTAsaVs4XT0oZCtiKSprLGlbOV09KF8teCkqayxpWzEwXT0oMS0oZitnKSkqayxpWzExXT0wLGlbMTJdPXQueCxpWzEzXT10LnksaVsxNF09dC56LGlbMTVdPTEsdGhpc31kZWNvbXBvc2UodCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHMsbz1TMy5zZXQoaVswXSxpWzFdLGlbMl0pLmxlbmd0aCgpLGE9UzMuc2V0KGlbNF0saVs1XSxpWzZdKS5sZW5ndGgoKSxzPVMzLnNldChpWzhdLGlbOV0saVsxMF0pLmxlbmd0aCgpO3RoaXMuZGV0ZXJtaW5hbnQoKTwwJiYobz0tbyksdC54PWlbMTJdLHQueT1pWzEzXSx0Lno9aVsxNF0saWguY29weSh0aGlzKTtsZXQgYz0xL28sdT0xL2EsaD0xL3M7cmV0dXJuIGloLmVsZW1lbnRzWzBdKj1jLGloLmVsZW1lbnRzWzFdKj1jLGloLmVsZW1lbnRzWzJdKj1jLGloLmVsZW1lbnRzWzRdKj11LGloLmVsZW1lbnRzWzVdKj11LGloLmVsZW1lbnRzWzZdKj11LGloLmVsZW1lbnRzWzhdKj1oLGloLmVsZW1lbnRzWzldKj1oLGloLmVsZW1lbnRzWzEwXSo9aCxyLnNldEZyb21Sb3RhdGlvbk1hdHJpeChpaCksbi54PW8sbi55PWEsbi56PXMsdGhpc31tYWtlUGVyc3BlY3RpdmUodCxyLG4saSxvLGEpe2E9PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO2xldCBzPXRoaXMuZWxlbWVudHMsbD0yKm8vKHItdCksYz0yKm8vKG4taSksdT0ocit0KS8oci10KSxoPShuK2kpLyhuLWkpLGY9LShhK28pLyhhLW8pLHA9LTIqYSpvLyhhLW8pO3JldHVybiBzWzBdPWwsc1s0XT0wLHNbOF09dSxzWzEyXT0wLHNbMV09MCxzWzVdPWMsc1s5XT1oLHNbMTNdPTAsc1syXT0wLHNbNl09MCxzWzEwXT1mLHNbMTRdPXAsc1szXT0wLHNbN109MCxzWzExXT0tMSxzWzE1XT0wLHRoaXN9bWFrZU9ydGhvZ3JhcGhpYyh0LHIsbixpLG8sYSl7bGV0IHM9dGhpcy5lbGVtZW50cyxsPTEvKHItdCksYz0xLyhuLWkpLHU9MS8oYS1vKSxoPShyK3QpKmwsZj0obitpKSpjLHA9KGErbykqdTtyZXR1cm4gc1swXT0yKmwsc1s0XT0wLHNbOF09MCxzWzEyXT0taCxzWzFdPTAsc1s1XT0yKmMsc1s5XT0wLHNbMTNdPS1mLHNbMl09MCxzWzZdPTAsc1sxMF09LTIqdSxzWzE0XT0tcCxzWzNdPTAsc1s3XT0wLHNbMTFdPTAsc1sxNV09MSx0aGlzfWVxdWFscyh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztmb3IobGV0IGk9MDtpPDE2O2krKylpZihyW2ldIT09bltpXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxyPTApe2ZvcihsZXQgbj0wO248MTY7bisrKXRoaXMuZWxlbWVudHNbbl09dFtuK3JdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxyPTApe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbcl09blswXSx0W3IrMV09blsxXSx0W3IrMl09blsyXSx0W3IrM109blszXSx0W3IrNF09bls0XSx0W3IrNV09bls1XSx0W3IrNl09bls2XSx0W3IrN109bls3XSx0W3IrOF09bls4XSx0W3IrOV09bls5XSx0W3IrMTBdPW5bMTBdLHRbcisxMV09blsxMV0sdFtyKzEyXT1uWzEyXSx0W3IrMTNdPW5bMTNdLHRbcisxNF09blsxNF0sdFtyKzE1XT1uWzE1XSx0fX07TWUucHJvdG90eXBlLmlzTWF0cml4ND0hMDt2YXIgUzM9bmV3IGosaWg9bmV3IE1lLG5mcj1uZXcgaigwLDAsMCksaWZyPW5ldyBqKDEsMSwxKSxrMD1uZXcgaixnVj1uZXcgaixrbD1uZXcgaixtdWU9bmV3IE1lLGd1ZT1uZXcgdmksdG09Y2xhc3N7Y29uc3RydWN0b3IodD0wLHI9MCxuPTAsaT10bS5EZWZhdWx0T3JkZXIpe3RoaXMuX3g9dCx0aGlzLl95PXIsdGhpcy5fej1uLHRoaXMuX29yZGVyPWl9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IG9yZGVyKCl7cmV0dXJuIHRoaXMuX29yZGVyfXNldCBvcmRlcih0KXt0aGlzLl9vcmRlcj10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxyLG4saT10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PXIsdGhpcy5fej1uLHRoaXMuX29yZGVyPWksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fb3JkZXIpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC5feCx0aGlzLl95PXQuX3ksdGhpcy5fej10Ll96LHRoaXMuX29yZGVyPXQuX29yZGVyLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0LHI9dGhpcy5fb3JkZXIsbj0hMCl7bGV0IGk9dC5lbGVtZW50cyxvPWlbMF0sYT1pWzRdLHM9aVs4XSxsPWlbMV0sYz1pWzVdLHU9aVs5XSxoPWlbMl0sZj1pWzZdLHA9aVsxMF07c3dpdGNoKHIpe2Nhc2UiWFlaIjp0aGlzLl95PU1hdGguYXNpbihabyhzLC0xLDEpKSxNYXRoLmFicyhzKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC11LHApLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxvKSk6KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9TWF0aC5hc2luKC1abyh1LC0xLDEpKSxNYXRoLmFicyh1KTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKHMscCksdGhpcy5fej1NYXRoLmF0YW4yKGwsYykpOih0aGlzLl95PU1hdGguYXRhbjIoLWgsbyksdGhpcy5fej0wKTticmVhaztjYXNlIlpYWSI6dGhpcy5feD1NYXRoLmFzaW4oWm8oZiwtMSwxKSksTWF0aC5hYnMoZik8Ljk5OTk5OTk/KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxwKSx0aGlzLl96PU1hdGguYXRhbjIoLWEsYykpOih0aGlzLl95PTAsdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl95PU1hdGguYXNpbigtWm8oaCwtMSwxKSksTWF0aC5hYnMoaCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLHApLHRoaXMuX3o9TWF0aC5hdGFuMihsLG8pKToodGhpcy5feD0wLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxjKSk7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3o9TWF0aC5hc2luKFpvKGwsLTEsMSkpLE1hdGguYWJzKGwpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUsYyksdGhpcy5feT1NYXRoLmF0YW4yKC1oLG8pKToodGhpcy5feD0wLHRoaXMuX3k9TWF0aC5hdGFuMihzLHApKTticmVhaztjYXNlIlhaWSI6dGhpcy5fej1NYXRoLmFzaW4oLVpvKGEsLTEsMSkpLE1hdGguYWJzKGEpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoZixjKSx0aGlzLl95PU1hdGguYXRhbjIocyxvKSk6KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxwKSx0aGlzLl95PTApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5FdWxlcjogLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrcil9cmV0dXJuIHRoaXMuX29yZGVyPXIsbj09PSEwJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUXVhdGVybmlvbih0LHIsbil7cmV0dXJuIG11ZS5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLnNldEZyb21Sb3RhdGlvbk1hdHJpeChtdWUscixuKX1zZXRGcm9tVmVjdG9yMyh0LHI9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixyKX1yZW9yZGVyKHQpe3JldHVybiBndWUuc2V0RnJvbUV1bGVyKHRoaXMpLHRoaXMuc2V0RnJvbVF1YXRlcm5pb24oZ3VlLHQpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fb3JkZXI9PT10aGlzLl9vcmRlcn1mcm9tQXJyYXkodCl7cmV0dXJuIHRoaXMuX3g9dFswXSx0aGlzLl95PXRbMV0sdGhpcy5fej10WzJdLHRbM10hPT12b2lkIDAmJih0aGlzLl9vcmRlcj10WzNdKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10scj0wKXtyZXR1cm4gdFtyXT10aGlzLl94LHRbcisxXT10aGlzLl95LHRbcisyXT10aGlzLl96LHRbciszXT10aGlzLl9vcmRlcix0fXRvVmVjdG9yMyh0KXtyZXR1cm4gdD90LnNldCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feik6bmV3IGoodGhpcy5feCx0aGlzLl95LHRoaXMuX3opfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fTt0bS5wcm90b3R5cGUuaXNFdWxlcj0hMDt0bS5EZWZhdWx0T3JkZXI9IlhZWiI7dG0uUm90YXRpb25PcmRlcnM9WyJYWVoiLCJZWlgiLCJaWFkiLCJYWlkiLCJZWFoiLCJaWVgiXTt2YXIgWDM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm1hc2s9MX1zZXQodCl7dGhpcy5tYXNrPSgxPDx0fDApPj4+MH1lbmFibGUodCl7dGhpcy5tYXNrfD0xPDx0fDB9ZW5hYmxlQWxsKCl7dGhpcy5tYXNrPS0xfXRvZ2dsZSh0KXt0aGlzLm1hc2tePTE8PHR8MH1kaXNhYmxlKHQpe3RoaXMubWFzayY9figxPDx0fDApfWRpc2FibGVBbGwoKXt0aGlzLm1hc2s9MH10ZXN0KHQpe3JldHVybih0aGlzLm1hc2smdC5tYXNrKSE9PTB9aXNFbmFibGVkKHQpe3JldHVybih0aGlzLm1hc2smKDE8PHR8MCkpIT09MH19LG9mcj0wLF91ZT1uZXcgaixNMz1uZXcgdmkscWQ9bmV3IE1lLF9WPW5ldyBqLExQPW5ldyBqLGFmcj1uZXcgaixzZnI9bmV3IHZpLHl1ZT1uZXcgaigxLDAsMCksdnVlPW5ldyBqKDAsMSwwKSx4dWU9bmV3IGooMCwwLDEpLGxmcj17dHlwZToiYWRkZWQifSxidWU9e3R5cGU6InJlbW92ZWQifSxvcj1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpvZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik9iamVjdDNEIix0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49W10sdGhpcy51cD1vci5EZWZhdWx0VXAuY2xvbmUoKTtsZXQgdD1uZXcgaixyPW5ldyB0bSxuPW5ldyB2aSxpPW5ldyBqKDEsMSwxKTtmdW5jdGlvbiBvKCl7bi5zZXRGcm9tRXVsZXIociwhMSl9ZnVuY3Rpb24gYSgpe3Iuc2V0RnJvbVF1YXRlcm5pb24obix2b2lkIDAsITEpfXIuX29uQ2hhbmdlKG8pLG4uX29uQ2hhbmdlKGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTp0fSxyb3RhdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cn0scXVhdGVybmlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bn0sc2NhbGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOml9LG1vZGVsVmlld01hdHJpeDp7dmFsdWU6bmV3IE1lfSxub3JtYWxNYXRyaXg6e3ZhbHVlOm5ldyBraX19KSx0aGlzLm1hdHJpeD1uZXcgTWUsdGhpcy5tYXRyaXhXb3JsZD1uZXcgTWUsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPW9yLkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0aGlzLmxheWVycz1uZXcgWDMsdGhpcy52aXNpYmxlPSEwLHRoaXMuY2FzdFNoYWRvdz0hMSx0aGlzLnJlY2VpdmVTaGFkb3c9ITEsdGhpcy5mcnVzdHVtQ3VsbGVkPSEwLHRoaXMucmVuZGVyT3JkZXI9MCx0aGlzLmFuaW1hdGlvbnM9W10sdGhpcy51c2VyRGF0YT17fX1vbkJlZm9yZVJlbmRlcigpe31vbkFmdGVyUmVuZGVyKCl7fWFwcGx5TWF0cml4NCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5tYXRyaXgucHJlbXVsdGlwbHkodCksdGhpcy5tYXRyaXguZGVjb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHQpLHRoaXN9c2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlKHQscil7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodCxyKX1zZXRSb3RhdGlvbkZyb21FdWxlcih0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKHQsITApfXNldFJvdGF0aW9uRnJvbU1hdHJpeCh0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpfXNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7dGhpcy5xdWF0ZXJuaW9uLmNvcHkodCl9cm90YXRlT25BeGlzKHQscil7cmV0dXJuIE0zLnNldEZyb21BeGlzQW5nbGUodCxyKSx0aGlzLnF1YXRlcm5pb24ubXVsdGlwbHkoTTMpLHRoaXN9cm90YXRlT25Xb3JsZEF4aXModCxyKXtyZXR1cm4gTTMuc2V0RnJvbUF4aXNBbmdsZSh0LHIpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShNMyksdGhpc31yb3RhdGVYKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyh5dWUsdCl9cm90YXRlWSh0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXModnVlLHQpfXJvdGF0ZVoodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKHh1ZSx0KX10cmFuc2xhdGVPbkF4aXModCxyKXtyZXR1cm4gX3VlLmNvcHkodCkuYXBwbHlRdWF0ZXJuaW9uKHRoaXMucXVhdGVybmlvbiksdGhpcy5wb3NpdGlvbi5hZGQoX3VlLm11bHRpcGx5U2NhbGFyKHIpKSx0aGlzfXRyYW5zbGF0ZVgodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHl1ZSx0KX10cmFuc2xhdGVZKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyh2dWUsdCl9dHJhbnNsYXRlWih0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoeHVlLHQpfWxvY2FsVG9Xb3JsZCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCl9d29ybGRUb0xvY2FsKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NChxZC5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpKX1sb29rQXQodCxyLG4pe3QuaXNWZWN0b3IzP19WLmNvcHkodCk6X1Yuc2V0KHQscixuKTtsZXQgaT10aGlzLnBhcmVudDt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxMUC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCksdGhpcy5pc0NhbWVyYXx8dGhpcy5pc0xpZ2h0P3FkLmxvb2tBdChMUCxfVix0aGlzLnVwKTpxZC5sb29rQXQoX1YsTFAsdGhpcy51cCksdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChxZCksaSYmKHFkLmV4dHJhY3RSb3RhdGlvbihpLm1hdHJpeFdvcmxkKSxNMy5zZXRGcm9tUm90YXRpb25NYXRyaXgocWQpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShNMy5pbnZlcnQoKSkpfWFkZCh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgcj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdGhpcy5hZGQoYXJndW1lbnRzW3JdKTtyZXR1cm4gdGhpc31yZXR1cm4gdD09PXRoaXM/KGNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IGNhbid0IGJlIGFkZGVkIGFzIGEgY2hpbGQgb2YgaXRzZWxmLiIsdCksdGhpcyk6KHQmJnQuaXNPYmplY3QzRD8odC5wYXJlbnQhPT1udWxsJiZ0LnBhcmVudC5yZW1vdmUodCksdC5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcmVuLnB1c2godCksdC5kaXNwYXRjaEV2ZW50KGxmcikpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLHQpLHRoaXMpfXJlbW92ZSh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW25dKTtyZXR1cm4gdGhpc31sZXQgcj10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7cmV0dXJuIHIhPT0tMSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UociwxKSx0LmRpc3BhdGNoRXZlbnQoYnVlKSksdGhpc31yZW1vdmVGcm9tUGFyZW50KCl7bGV0IHQ9dGhpcy5wYXJlbnQ7cmV0dXJuIHQhPT1udWxsJiZ0LnJlbW92ZSh0aGlzKSx0aGlzfWNsZWFyKCl7Zm9yKGxldCB0PTA7dDx0aGlzLmNoaWxkcmVuLmxlbmd0aDt0Kyspe2xldCByPXRoaXMuY2hpbGRyZW5bdF07ci5wYXJlbnQ9bnVsbCxyLmRpc3BhdGNoRXZlbnQoYnVlKX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzfWF0dGFjaCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSkscWQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSx0LnBhcmVudCE9PW51bGwmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSkscWQubXVsdGlwbHkodC5wYXJlbnQubWF0cml4V29ybGQpKSx0LmFwcGx5TWF0cml4NChxZCksdGhpcy5hZGQodCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCksdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LHIpe2lmKHRoaXNbdF09PT1yKXJldHVybiB0aGlzO2ZvcihsZXQgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7bjxpO24rKyl7bGV0IGE9dGhpcy5jaGlsZHJlbltuXS5nZXRPYmplY3RCeVByb3BlcnR5KHQscik7aWYoYSE9PXZvaWQgMClyZXR1cm4gYX19Z2V0V29ybGRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9Z2V0V29ybGRRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShMUCx0LGFmciksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShMUCxzZnIsdCksdH1nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgcj10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldChyWzhdLHJbOV0sclsxMF0pLm5vcm1hbGl6ZSgpfXJheWNhc3QoKXt9dHJhdmVyc2UodCl7dCh0aGlzKTtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKylyW25dLnRyYXZlcnNlKHQpfXRyYXZlcnNlVmlzaWJsZSh0KXtpZih0aGlzLnZpc2libGU9PT0hMSlyZXR1cm47dCh0aGlzKTtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKylyW25dLnRyYXZlcnNlVmlzaWJsZSh0KX10cmF2ZXJzZUFuY2VzdG9ycyh0KXtsZXQgcj10aGlzLnBhcmVudDtyIT09bnVsbCYmKHQociksci50cmF2ZXJzZUFuY2VzdG9ycyh0KSl9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9dXBkYXRlTWF0cml4V29ybGQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLCh0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fHQpJiYodGhpcy5wYXJlbnQ9PT1udWxsP3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7bGV0IHI9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG49MCxpPXIubGVuZ3RoO248aTtuKyspcltuXS51cGRhdGVNYXRyaXhXb3JsZCh0KX11cGRhdGVXb3JsZE1hdHJpeCh0LHIpe2xldCBuPXRoaXMucGFyZW50O2lmKHQ9PT0hMCYmbiE9PW51bGwmJm4udXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHI9PT0hMCl7bGV0IGk9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspaVtvXS51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCl9fXRvSlNPTih0KXtsZXQgcj10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyIsbj17fTtyJiYodD17Z2VvbWV0cmllczp7fSxtYXRlcmlhbHM6e30sdGV4dHVyZXM6e30saW1hZ2VzOnt9LHNoYXBlczp7fSxza2VsZXRvbnM6e30sYW5pbWF0aW9uczp7fX0sbi5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTtsZXQgaT17fTtpLnV1aWQ9dGhpcy51dWlkLGkudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJihpLm5hbWU9dGhpcy5uYW1lKSx0aGlzLmNhc3RTaGFkb3c9PT0hMCYmKGkuY2FzdFNoYWRvdz0hMCksdGhpcy5yZWNlaXZlU2hhZG93PT09ITAmJihpLnJlY2VpdmVTaGFkb3c9ITApLHRoaXMudmlzaWJsZT09PSExJiYoaS52aXNpYmxlPSExKSx0aGlzLmZydXN0dW1DdWxsZWQ9PT0hMSYmKGkuZnJ1c3R1bUN1bGxlZD0hMSksdGhpcy5yZW5kZXJPcmRlciE9PTAmJihpLnJlbmRlck9yZGVyPXRoaXMucmVuZGVyT3JkZXIpLEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpIT09Int9IiYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksaS5sYXllcnM9dGhpcy5sYXllcnMubWFzayxpLm1hdHJpeD10aGlzLm1hdHJpeC50b0FycmF5KCksdGhpcy5tYXRyaXhBdXRvVXBkYXRlPT09ITEmJihpLm1hdHJpeEF1dG9VcGRhdGU9ITEpLHRoaXMuaXNJbnN0YW5jZWRNZXNoJiYoaS50eXBlPSJJbnN0YW5jZWRNZXNoIixpLmNvdW50PXRoaXMuY291bnQsaS5pbnN0YW5jZU1hdHJpeD10aGlzLmluc3RhbmNlTWF0cml4LnRvSlNPTigpLHRoaXMuaW5zdGFuY2VDb2xvciE9PW51bGwmJihpLmluc3RhbmNlQ29sb3I9dGhpcy5pbnN0YW5jZUNvbG9yLnRvSlNPTigpKSk7ZnVuY3Rpb24gbyhzLGwpe3JldHVybiBzW2wudXVpZF09PT12b2lkIDAmJihzW2wudXVpZF09bC50b0pTT04odCkpLGwudXVpZH1pZih0aGlzLmlzU2NlbmUpdGhpcy5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kLmlzQ29sb3I/aS5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oKTp0aGlzLmJhY2tncm91bmQuaXNUZXh0dXJlJiYoaS5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04odCkudXVpZCkpLHRoaXMuZW52aXJvbm1lbnQmJnRoaXMuZW52aXJvbm1lbnQuaXNUZXh0dXJlJiYoaS5lbnZpcm9ubWVudD10aGlzLmVudmlyb25tZW50LnRvSlNPTih0KS51dWlkKTtlbHNlIGlmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7aS5nZW9tZXRyeT1vKHQuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTtsZXQgcz10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYocyE9PXZvaWQgMCYmcy5zaGFwZXMhPT12b2lkIDApe2xldCBsPXMuc2hhcGVzO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBjPTAsdT1sLmxlbmd0aDtjPHU7YysrKXtsZXQgaD1sW2NdO28odC5zaGFwZXMsaCl9ZWxzZSBvKHQuc2hhcGVzLGwpfX1pZih0aGlzLmlzU2tpbm5lZE1lc2gmJihpLmJpbmRNb2RlPXRoaXMuYmluZE1vZGUsaS5iaW5kTWF0cml4PXRoaXMuYmluZE1hdHJpeC50b0FycmF5KCksdGhpcy5za2VsZXRvbiE9PXZvaWQgMCYmKG8odC5za2VsZXRvbnMsdGhpcy5za2VsZXRvbiksaS5za2VsZXRvbj10aGlzLnNrZWxldG9uLnV1aWQpKSx0aGlzLm1hdGVyaWFsIT09dm9pZCAwKWlmKEFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpe2xldCBzPVtdO2ZvcihsZXQgbD0wLGM9dGhpcy5tYXRlcmlhbC5sZW5ndGg7bDxjO2wrKylzLnB1c2gobyh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsW2xdKSk7aS5tYXRlcmlhbD1zfWVsc2UgaS5tYXRlcmlhbD1vKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWwpO2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe2kuY2hpbGRyZW49W107Zm9yKGxldCBzPTA7czx0aGlzLmNoaWxkcmVuLmxlbmd0aDtzKyspaS5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bc10udG9KU09OKHQpLm9iamVjdCl9aWYodGhpcy5hbmltYXRpb25zLmxlbmd0aD4wKXtpLmFuaW1hdGlvbnM9W107Zm9yKGxldCBzPTA7czx0aGlzLmFuaW1hdGlvbnMubGVuZ3RoO3MrKyl7bGV0IGw9dGhpcy5hbmltYXRpb25zW3NdO2kuYW5pbWF0aW9ucy5wdXNoKG8odC5hbmltYXRpb25zLGwpKX19aWYocil7bGV0IHM9YSh0Lmdlb21ldHJpZXMpLGw9YSh0Lm1hdGVyaWFscyksYz1hKHQudGV4dHVyZXMpLHU9YSh0LmltYWdlcyksaD1hKHQuc2hhcGVzKSxmPWEodC5za2VsZXRvbnMpLHA9YSh0LmFuaW1hdGlvbnMpO3MubGVuZ3RoPjAmJihuLmdlb21ldHJpZXM9cyksbC5sZW5ndGg+MCYmKG4ubWF0ZXJpYWxzPWwpLGMubGVuZ3RoPjAmJihuLnRleHR1cmVzPWMpLHUubGVuZ3RoPjAmJihuLmltYWdlcz11KSxoLmxlbmd0aD4wJiYobi5zaGFwZXM9aCksZi5sZW5ndGg+MCYmKG4uc2tlbGV0b25zPWYpLHAubGVuZ3RoPjAmJihuLmFuaW1hdGlvbnM9cCl9cmV0dXJuIG4ub2JqZWN0PWksbjtmdW5jdGlvbiBhKHMpe2xldCBsPVtdO2ZvcihsZXQgYyBpbiBzKXtsZXQgdT1zW2NdO2RlbGV0ZSB1Lm1ldGFkYXRhLGwucHVzaCh1KX1yZXR1cm4gbH19Y2xvbmUodCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzLHQpfWNvcHkodCxyPSEwKXtpZih0aGlzLm5hbWU9dC5uYW1lLHRoaXMudXAuY29weSh0LnVwKSx0aGlzLnBvc2l0aW9uLmNvcHkodC5wb3NpdGlvbiksdGhpcy5yb3RhdGlvbi5vcmRlcj10LnJvdGF0aW9uLm9yZGVyLHRoaXMucXVhdGVybmlvbi5jb3B5KHQucXVhdGVybmlvbiksdGhpcy5zY2FsZS5jb3B5KHQuc2NhbGUpLHRoaXMubWF0cml4LmNvcHkodC5tYXRyaXgpLHRoaXMubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT10Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsdGhpcy5sYXllcnMubWFzaz10LmxheWVycy5tYXNrLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy5jYXN0U2hhZG93PXQuY2FzdFNoYWRvdyx0aGlzLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93LHRoaXMuZnJ1c3R1bUN1bGxlZD10LmZydXN0dW1DdWxsZWQsdGhpcy5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSkscj09PSEwKWZvcihsZXQgbj0wO248dC5jaGlsZHJlbi5sZW5ndGg7bisrKXtsZXQgaT10LmNoaWxkcmVuW25dO3RoaXMuYWRkKGkuY2xvbmUoKSl9cmV0dXJuIHRoaXN9fTtvci5EZWZhdWx0VXA9bmV3IGooMCwxLDApO29yLkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlPSEwO29yLnByb3RvdHlwZS5pc09iamVjdDNEPSEwO3ZhciBvaD1uZXcgaixHZD1uZXcgaixldXQ9bmV3IGosV2Q9bmV3IGosRTM9bmV3IGosVDM9bmV3IGosd3VlPW5ldyBqLHJ1dD1uZXcgaixudXQ9bmV3IGosaXV0PW5ldyBqLGFpPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGoscj1uZXcgaixuPW5ldyBqKXt0aGlzLmE9dCx0aGlzLmI9cix0aGlzLmM9bn1zdGF0aWMgZ2V0Tm9ybWFsKHQscixuLGkpe2kuc3ViVmVjdG9ycyhuLHIpLG9oLnN1YlZlY3RvcnModCxyKSxpLmNyb3NzKG9oKTtsZXQgbz1pLmxlbmd0aFNxKCk7cmV0dXJuIG8+MD9pLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KG8pKTppLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LHIsbixpLG8pe29oLnN1YlZlY3RvcnMoaSxyKSxHZC5zdWJWZWN0b3JzKG4sciksZXV0LnN1YlZlY3RvcnModCxyKTtsZXQgYT1vaC5kb3Qob2gpLHM9b2guZG90KEdkKSxsPW9oLmRvdChldXQpLGM9R2QuZG90KEdkKSx1PUdkLmRvdChldXQpLGg9YSpjLXMqcztpZihoPT09MClyZXR1cm4gby5zZXQoLTIsLTEsLTEpO2xldCBmPTEvaCxwPShjKmwtcyp1KSpmLGQ9KGEqdS1zKmwpKmY7cmV0dXJuIG8uc2V0KDEtcC1kLGQscCl9c3RhdGljIGNvbnRhaW5zUG9pbnQodCxyLG4saSl7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQscixuLGksV2QpLFdkLng+PTAmJldkLnk+PTAmJldkLngrV2QueTw9MX1zdGF0aWMgZ2V0VVYodCxyLG4saSxvLGEscyxsKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxyLG4saSxXZCksbC5zZXQoMCwwKSxsLmFkZFNjYWxlZFZlY3RvcihvLFdkLngpLGwuYWRkU2NhbGVkVmVjdG9yKGEsV2QueSksbC5hZGRTY2FsZWRWZWN0b3IocyxXZC56KSxsfXN0YXRpYyBpc0Zyb250RmFjaW5nKHQscixuLGkpe3JldHVybiBvaC5zdWJWZWN0b3JzKG4sciksR2Quc3ViVmVjdG9ycyh0LHIpLG9oLmNyb3NzKEdkKS5kb3QoaSk8MH1zZXQodCxyLG4pe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShyKSx0aGlzLmMuY29weShuKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQscixuLGkpe3JldHVybiB0aGlzLmEuY29weSh0W3JdKSx0aGlzLmIuY29weSh0W25dKSx0aGlzLmMuY29weSh0W2ldKSx0aGlzfXNldEZyb21BdHRyaWJ1dGVBbmRJbmRpY2VzKHQscixuLGkpe3JldHVybiB0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLHRoaXMuYi5mcm9tQnVmZmVyQXR0cmlidXRlKHQsbiksdGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmEuY29weSh0LmEpLHRoaXMuYi5jb3B5KHQuYiksdGhpcy5jLmNvcHkodC5jKSx0aGlzfWdldEFyZWEoKXtyZXR1cm4gb2guc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKSxHZC5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLG9oLmNyb3NzKEdkKS5sZW5ndGgoKSouNX1nZXRNaWRwb2ludCh0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9Z2V0Tm9ybWFsKHQpe3JldHVybiBhaS5nZXROb3JtYWwodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9Z2V0UGxhbmUodCl7cmV0dXJuIHQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1nZXRCYXJ5Y29vcmQodCxyKXtyZXR1cm4gYWkuZ2V0QmFyeWNvb3JkKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMscil9Z2V0VVYodCxyLG4saSxvKXtyZXR1cm4gYWkuZ2V0VVYodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxyLG4saSxvKX1jb250YWluc1BvaW50KHQpe3JldHVybiBhaS5jb250YWluc1BvaW50KHQsdGhpcy5hLHRoaXMuYix0aGlzLmMpfWlzRnJvbnRGYWNpbmcodCl7cmV0dXJuIGFpLmlzRnJvbnRGYWNpbmcodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyl9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LHIpe2xldCBuPXRoaXMuYSxpPXRoaXMuYixvPXRoaXMuYyxhLHM7RTMuc3ViVmVjdG9ycyhpLG4pLFQzLnN1YlZlY3RvcnMobyxuKSxydXQuc3ViVmVjdG9ycyh0LG4pO2xldCBsPUUzLmRvdChydXQpLGM9VDMuZG90KHJ1dCk7aWYobDw9MCYmYzw9MClyZXR1cm4gci5jb3B5KG4pO251dC5zdWJWZWN0b3JzKHQsaSk7bGV0IHU9RTMuZG90KG51dCksaD1UMy5kb3QobnV0KTtpZih1Pj0wJiZoPD11KXJldHVybiByLmNvcHkoaSk7bGV0IGY9bCpoLXUqYztpZihmPD0wJiZsPj0wJiZ1PD0wKXJldHVybiBhPWwvKGwtdSksci5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihFMyxhKTtpdXQuc3ViVmVjdG9ycyh0LG8pO2xldCBwPUUzLmRvdChpdXQpLGQ9VDMuZG90KGl1dCk7aWYoZD49MCYmcDw9ZClyZXR1cm4gci5jb3B5KG8pO2xldCBnPXAqYy1sKmQ7aWYoZzw9MCYmYz49MCYmZDw9MClyZXR1cm4gcz1jLyhjLWQpLHIuY29weShuKS5hZGRTY2FsZWRWZWN0b3IoVDMscyk7bGV0IF89dSpkLXAqaDtpZihfPD0wJiZoLXU+PTAmJnAtZD49MClyZXR1cm4gd3VlLnN1YlZlY3RvcnMobyxpKSxzPShoLXUpLyhoLXUrKHAtZCkpLHIuY29weShpKS5hZGRTY2FsZWRWZWN0b3Iod3VlLHMpO2xldCB5PTEvKF8rZytmKTtyZXR1cm4gYT1nKnkscz1mKnksci5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihFMyxhKS5hZGRTY2FsZWRWZWN0b3IoVDMscyl9ZXF1YWxzKHQpe3JldHVybiB0LmEuZXF1YWxzKHRoaXMuYSkmJnQuYi5lcXVhbHModGhpcy5iKSYmdC5jLmVxdWFscyh0aGlzLmMpfX0sY2ZyPTAscWk9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6Y2ZyKyt9KSx0aGlzLnV1aWQ9TmwoKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJNYXRlcmlhbCIsdGhpcy5mb2c9ITAsdGhpcy5ibGVuZGluZz1WMyx0aGlzLnNpZGU9SXYsdGhpcy52ZXJ0ZXhDb2xvcnM9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFuc3BhcmVudD0hMSx0aGlzLmJsZW5kU3JjPUlodCx0aGlzLmJsZW5kRHN0PUxodCx0aGlzLmJsZW5kRXF1YXRpb249TXYsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz1uVSx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPUxmZSx0aGlzLnN0ZW5jaWxSZWY9MCx0aGlzLnN0ZW5jaWxGdW5jTWFzaz0yNTUsdGhpcy5zdGVuY2lsRmFpbD1yVSx0aGlzLnN0ZW5jaWxaRmFpbD1yVSx0aGlzLnN0ZW5jaWxaUGFzcz1yVSx0aGlzLnN0ZW5jaWxXcml0ZT0hMSx0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGwsdGhpcy5jbGlwSW50ZXJzZWN0aW9uPSExLHRoaXMuY2xpcFNoYWRvd3M9ITEsdGhpcy5zaGFkb3dTaWRlPW51bGwsdGhpcy5jb2xvcldyaXRlPSEwLHRoaXMuYWxwaGFXcml0ZT0hMCx0aGlzLnByZWNpc2lvbj1udWxsLHRoaXMucG9seWdvbk9mZnNldD0hMSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9MCx0aGlzLnBvbHlnb25PZmZzZXRVbml0cz0wLHRoaXMuZGl0aGVyaW5nPSExLHRoaXMuYWxwaGFUb0NvdmVyYWdlPSExLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPSExLHRoaXMudmlzaWJsZT0hMCx0aGlzLnRvbmVNYXBwZWQ9ITAsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLl9hbHBoYVRlc3Q9MH1nZXQgYWxwaGFUZXN0KCl7cmV0dXJuIHRoaXMuX2FscGhhVGVzdH1zZXQgYWxwaGFUZXN0KHQpe3RoaXMuX2FscGhhVGVzdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2FscGhhVGVzdD10fW9uQnVpbGQoKXt9b25CZWZvcmVSZW5kZXIoKXt9b25CZWZvcmVDb21waWxlKCl7fWN1c3RvbVByb2dyYW1DYWNoZUtleSgpe3JldHVybiB0aGlzLm9uQmVmb3JlQ29tcGlsZS50b1N0cmluZygpfXNldFZhbHVlcyh0KXtpZih0IT09dm9pZCAwKWZvcihsZXQgciBpbiB0KXtsZXQgbj10W3JdO2lmKG49PT12b2lkIDApe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6ICciK3IrIicgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1pZihyPT09InNoYWRpbmciKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPW49PT1QaHQ7Y29udGludWV9bGV0IGk9dGhpc1tyXTtpZihpPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6ICciK3IrIicgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4iKTtjb250aW51ZX1pJiZpLmlzQ29sb3I/aS5zZXQobik6aSYmaS5pc1ZlY3RvcjMmJm4mJm4uaXNWZWN0b3IzP2kuY29weShuKTp0aGlzW3JdPW59fXRvSlNPTih0KXtsZXQgcj10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7ciYmKHQ9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO2xldCBuPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiTWF0ZXJpYWwiLGdlbmVyYXRvcjoiTWF0ZXJpYWwudG9KU09OIn19O24udXVpZD10aGlzLnV1aWQsbi50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKG4ubmFtZT10aGlzLm5hbWUpLHRoaXMuY29sb3ImJnRoaXMuY29sb3IuaXNDb2xvciYmKG4uY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSksdGhpcy5yb3VnaG5lc3MhPT12b2lkIDAmJihuLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyksdGhpcy5tZXRhbG5lc3MhPT12b2lkIDAmJihuLm1ldGFsbmVzcz10aGlzLm1ldGFsbmVzcyksdGhpcy5zaGVlbiE9PXZvaWQgMCYmKG4uc2hlZW49dGhpcy5zaGVlbiksdGhpcy5zaGVlbkNvbG9yJiZ0aGlzLnNoZWVuQ29sb3IuaXNDb2xvciYmKG4uc2hlZW5Db2xvcj10aGlzLnNoZWVuQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2hlZW5Sb3VnaG5lc3MhPT12b2lkIDAmJihuLnNoZWVuUm91Z2huZXNzPXRoaXMuc2hlZW5Sb3VnaG5lc3MpLHRoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKG4uZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmdGhpcy5lbWlzc2l2ZUludGVuc2l0eSE9PTEmJihuLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKG4uc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSksdGhpcy5zcGVjdWxhckludGVuc2l0eSE9PXZvaWQgMCYmKG4uc3BlY3VsYXJJbnRlbnNpdHk9dGhpcy5zcGVjdWxhckludGVuc2l0eSksdGhpcy5zcGVjdWxhckNvbG9yJiZ0aGlzLnNwZWN1bGFyQ29sb3IuaXNDb2xvciYmKG4uc3BlY3VsYXJDb2xvcj10aGlzLnNwZWN1bGFyQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2hpbmluZXNzIT09dm9pZCAwJiYobi5zaGluaW5lc3M9dGhpcy5zaGluaW5lc3MpLHRoaXMuY2xlYXJjb2F0IT09dm9pZCAwJiYobi5jbGVhcmNvYXQ9dGhpcy5jbGVhcmNvYXQpLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzIT09dm9pZCAwJiYobi5jbGVhcmNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MpLHRoaXMuY2xlYXJjb2F0TWFwJiZ0aGlzLmNsZWFyY29hdE1hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdE1hcD10aGlzLmNsZWFyY29hdE1hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0Um91Z2huZXNzTWFwPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCYmdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXROb3JtYWxNYXA9dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAudG9KU09OKHQpLnV1aWQsbi5jbGVhcmNvYXROb3JtYWxTY2FsZT10aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5tYXAmJnRoaXMubWFwLmlzVGV4dHVyZSYmKG4ubWFwPXRoaXMubWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1hdGNhcCYmdGhpcy5tYXRjYXAuaXNUZXh0dXJlJiYobi5tYXRjYXA9dGhpcy5tYXRjYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYWxwaGFNYXAmJnRoaXMuYWxwaGFNYXAuaXNUZXh0dXJlJiYobi5hbHBoYU1hcD10aGlzLmFscGhhTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmxpZ2h0TWFwJiZ0aGlzLmxpZ2h0TWFwLmlzVGV4dHVyZSYmKG4ubGlnaHRNYXA9dGhpcy5saWdodE1hcC50b0pTT04odCkudXVpZCxuLmxpZ2h0TWFwSW50ZW5zaXR5PXRoaXMubGlnaHRNYXBJbnRlbnNpdHkpLHRoaXMuYW9NYXAmJnRoaXMuYW9NYXAuaXNUZXh0dXJlJiYobi5hb01hcD10aGlzLmFvTWFwLnRvSlNPTih0KS51dWlkLG4uYW9NYXBJbnRlbnNpdHk9dGhpcy5hb01hcEludGVuc2l0eSksdGhpcy5idW1wTWFwJiZ0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlJiYobi5idW1wTWFwPXRoaXMuYnVtcE1hcC50b0pTT04odCkudXVpZCxuLmJ1bXBTY2FsZT10aGlzLmJ1bXBTY2FsZSksdGhpcy5ub3JtYWxNYXAmJnRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSYmKG4ubm9ybWFsTWFwPXRoaXMubm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLG4ubm9ybWFsTWFwVHlwZT10aGlzLm5vcm1hbE1hcFR5cGUsbi5ub3JtYWxTY2FsZT10aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5kaXNwbGFjZW1lbnRNYXAmJnRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSYmKG4uZGlzcGxhY2VtZW50TWFwPXRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTih0KS51dWlkLG4uZGlzcGxhY2VtZW50U2NhbGU9dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSxuLmRpc3BsYWNlbWVudEJpYXM9dGhpcy5kaXNwbGFjZW1lbnRCaWFzKSx0aGlzLnJvdWdobmVzc01hcCYmdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihuLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihuLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZ0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLmlzVGV4dHVyZSYmKG4uc3BlY3VsYXJJbnRlbnNpdHlNYXA9dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckNvbG9yTWFwJiZ0aGlzLnNwZWN1bGFyQ29sb3JNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhckNvbG9yTWFwPXRoaXMuc3BlY3VsYXJDb2xvck1hcC50b0pTT04odCkudXVpZCksdGhpcy5lbnZNYXAmJnRoaXMuZW52TWFwLmlzVGV4dHVyZSYmKG4uZW52TWFwPXRoaXMuZW52TWFwLnRvSlNPTih0KS51dWlkLHRoaXMuY29tYmluZSE9PXZvaWQgMCYmKG4uY29tYmluZT10aGlzLmNvbWJpbmUpKSx0aGlzLmVudk1hcEludGVuc2l0eSE9PXZvaWQgMCYmKG4uZW52TWFwSW50ZW5zaXR5PXRoaXMuZW52TWFwSW50ZW5zaXR5KSx0aGlzLnJlZmxlY3Rpdml0eSE9PXZvaWQgMCYmKG4ucmVmbGVjdGl2aXR5PXRoaXMucmVmbGVjdGl2aXR5KSx0aGlzLnJlZnJhY3Rpb25SYXRpbyE9PXZvaWQgMCYmKG4ucmVmcmFjdGlvblJhdGlvPXRoaXMucmVmcmFjdGlvblJhdGlvKSx0aGlzLmdyYWRpZW50TWFwJiZ0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSYmKG4uZ3JhZGllbnRNYXA9dGhpcy5ncmFkaWVudE1hcC50b0pTT04odCkudXVpZCksdGhpcy50cmFuc21pc3Npb24hPT12b2lkIDAmJihuLnRyYW5zbWlzc2lvbj10aGlzLnRyYW5zbWlzc2lvbiksdGhpcy50cmFuc21pc3Npb25NYXAmJnRoaXMudHJhbnNtaXNzaW9uTWFwLmlzVGV4dHVyZSYmKG4udHJhbnNtaXNzaW9uTWFwPXRoaXMudHJhbnNtaXNzaW9uTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnRoaWNrbmVzcyE9PXZvaWQgMCYmKG4udGhpY2tuZXNzPXRoaXMudGhpY2tuZXNzKSx0aGlzLnRoaWNrbmVzc01hcCYmdGhpcy50aGlja25lc3NNYXAuaXNUZXh0dXJlJiYobi50aGlja25lc3NNYXA9dGhpcy50aGlja25lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSE9PXZvaWQgMCYmKG4uYXR0ZW51YXRpb25EaXN0YW5jZT10aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UpLHRoaXMuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmKG4uYXR0ZW51YXRpb25Db2xvcj10aGlzLmF0dGVudWF0aW9uQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2l6ZSE9PXZvaWQgMCYmKG4uc2l6ZT10aGlzLnNpemUpLHRoaXMuc2hhZG93U2lkZSE9PW51bGwmJihuLnNoYWRvd1NpZGU9dGhpcy5zaGFkb3dTaWRlKSx0aGlzLnNpemVBdHRlbnVhdGlvbiE9PXZvaWQgMCYmKG4uc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKSx0aGlzLmJsZW5kaW5nIT09VjMmJihuLmJsZW5kaW5nPXRoaXMuYmxlbmRpbmcpLHRoaXMuc2lkZSE9PUl2JiYobi5zaWRlPXRoaXMuc2lkZSksdGhpcy52ZXJ0ZXhDb2xvcnMmJihuLnZlcnRleENvbG9ycz0hMCksdGhpcy5vcGFjaXR5PDEmJihuLm9wYWNpdHk9dGhpcy5vcGFjaXR5KSx0aGlzLnRyYW5zcGFyZW50PT09ITAmJihuLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpLG4uZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jLG4uZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0LG4uZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGUsbi5jb2xvcldyaXRlPXRoaXMuY29sb3JXcml0ZSxuLmFscGhhV3JpdGU9dGhpcy5hbHBoYVdyaXRlLG4uc3RlbmNpbFdyaXRlPXRoaXMuc3RlbmNpbFdyaXRlLG4uc3RlbmNpbFdyaXRlTWFzaz10aGlzLnN0ZW5jaWxXcml0ZU1hc2ssbi5zdGVuY2lsRnVuYz10aGlzLnN0ZW5jaWxGdW5jLG4uc3RlbmNpbFJlZj10aGlzLnN0ZW5jaWxSZWYsbi5zdGVuY2lsRnVuY01hc2s9dGhpcy5zdGVuY2lsRnVuY01hc2ssbi5zdGVuY2lsRmFpbD10aGlzLnN0ZW5jaWxGYWlsLG4uc3RlbmNpbFpGYWlsPXRoaXMuc3RlbmNpbFpGYWlsLG4uc3RlbmNpbFpQYXNzPXRoaXMuc3RlbmNpbFpQYXNzLHRoaXMucm90YXRpb24mJnRoaXMucm90YXRpb24hPT0wJiYobi5yb3RhdGlvbj10aGlzLnJvdGF0aW9uKSx0aGlzLnBvbHlnb25PZmZzZXQ9PT0hMCYmKG4ucG9seWdvbk9mZnNldD0hMCksdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yIT09MCYmKG4ucG9seWdvbk9mZnNldEZhY3Rvcj10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IpLHRoaXMucG9seWdvbk9mZnNldFVuaXRzIT09MCYmKG4ucG9seWdvbk9mZnNldFVuaXRzPXRoaXMucG9seWdvbk9mZnNldFVuaXRzKSx0aGlzLmxpbmV3aWR0aCYmdGhpcy5saW5ld2lkdGghPT0xJiYobi5saW5ld2lkdGg9dGhpcy5saW5ld2lkdGgpLHRoaXMuZGFzaFNpemUhPT12b2lkIDAmJihuLmRhc2hTaXplPXRoaXMuZGFzaFNpemUpLHRoaXMuZ2FwU2l6ZSE9PXZvaWQgMCYmKG4uZ2FwU2l6ZT10aGlzLmdhcFNpemUpLHRoaXMuc2NhbGUhPT12b2lkIDAmJihuLnNjYWxlPXRoaXMuc2NhbGUpLHRoaXMuZGl0aGVyaW5nPT09ITAmJihuLmRpdGhlcmluZz0hMCksdGhpcy5hbHBoYVRlc3Q+MCYmKG4uYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KSx0aGlzLmFscGhhVG9Db3ZlcmFnZT09PSEwJiYobi5hbHBoYVRvQ292ZXJhZ2U9dGhpcy5hbHBoYVRvQ292ZXJhZ2UpLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPT09ITAmJihuLnByZW11bHRpcGxpZWRBbHBoYT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSksdGhpcy53aXJlZnJhbWU9PT0hMCYmKG4ud2lyZWZyYW1lPXRoaXMud2lyZWZyYW1lKSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD4xJiYobi53aXJlZnJhbWVMaW5ld2lkdGg9dGhpcy53aXJlZnJhbWVMaW5ld2lkdGgpLHRoaXMud2lyZWZyYW1lTGluZWNhcCE9PSJyb3VuZCImJihuLndpcmVmcmFtZUxpbmVjYXA9dGhpcy53aXJlZnJhbWVMaW5lY2FwKSx0aGlzLndpcmVmcmFtZUxpbmVqb2luIT09InJvdW5kIiYmKG4ud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lam9pbiksdGhpcy5mbGF0U2hhZGluZz09PSEwJiYobi5mbGF0U2hhZGluZz10aGlzLmZsYXRTaGFkaW5nKSx0aGlzLnZpc2libGU9PT0hMSYmKG4udmlzaWJsZT0hMSksdGhpcy50b25lTWFwcGVkPT09ITEmJihuLnRvbmVNYXBwZWQ9ITEpLEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpIT09Int9IiYmKG4udXNlckRhdGE9dGhpcy51c2VyRGF0YSk7ZnVuY3Rpb24gaShvKXtsZXQgYT1bXTtmb3IobGV0IHMgaW4gbyl7bGV0IGw9b1tzXTtkZWxldGUgbC5tZXRhZGF0YSxhLnB1c2gobCl9cmV0dXJuIGF9aWYocil7bGV0IG89aSh0LnRleHR1cmVzKSxhPWkodC5pbWFnZXMpO28ubGVuZ3RoPjAmJihuLnRleHR1cmVzPW8pLGEubGVuZ3RoPjAmJihuLmltYWdlcz1hKX1yZXR1cm4gbn1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZm9nPXQuZm9nLHRoaXMuYmxlbmRpbmc9dC5ibGVuZGluZyx0aGlzLnNpZGU9dC5zaWRlLHRoaXMudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzLHRoaXMub3BhY2l0eT10Lm9wYWNpdHksdGhpcy50cmFuc3BhcmVudD10LnRyYW5zcGFyZW50LHRoaXMuYmxlbmRTcmM9dC5ibGVuZFNyYyx0aGlzLmJsZW5kRHN0PXQuYmxlbmREc3QsdGhpcy5ibGVuZEVxdWF0aW9uPXQuYmxlbmRFcXVhdGlvbix0aGlzLmJsZW5kU3JjQWxwaGE9dC5ibGVuZFNyY0FscGhhLHRoaXMuYmxlbmREc3RBbHBoYT10LmJsZW5kRHN0QWxwaGEsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9dC5ibGVuZEVxdWF0aW9uQWxwaGEsdGhpcy5kZXB0aEZ1bmM9dC5kZXB0aEZ1bmMsdGhpcy5kZXB0aFRlc3Q9dC5kZXB0aFRlc3QsdGhpcy5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9dC5zdGVuY2lsV3JpdGVNYXNrLHRoaXMuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyx0aGlzLnN0ZW5jaWxSZWY9dC5zdGVuY2lsUmVmLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXQuc3RlbmNpbEZ1bmNNYXNrLHRoaXMuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCx0aGlzLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCx0aGlzLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyx0aGlzLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZTtsZXQgcj10LmNsaXBwaW5nUGxhbmVzLG49bnVsbDtpZihyIT09bnVsbCl7bGV0IGk9ci5sZW5ndGg7bj1uZXcgQXJyYXkoaSk7Zm9yKGxldCBvPTA7byE9PWk7KytvKW5bb109cltvXS5jbG9uZSgpfXJldHVybiB0aGlzLmNsaXBwaW5nUGxhbmVzPW4sdGhpcy5jbGlwSW50ZXJzZWN0aW9uPXQuY2xpcEludGVyc2VjdGlvbix0aGlzLmNsaXBTaGFkb3dzPXQuY2xpcFNoYWRvd3MsdGhpcy5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSx0aGlzLmNvbG9yV3JpdGU9dC5jb2xvcldyaXRlLHRoaXMuYWxwaGFXcml0ZT10LmFscGhhV3JpdGUsdGhpcy5wcmVjaXNpb249dC5wcmVjaXNpb24sdGhpcy5wb2x5Z29uT2Zmc2V0PXQucG9seWdvbk9mZnNldCx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9dC5wb2x5Z29uT2Zmc2V0RmFjdG9yLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPXQucG9seWdvbk9mZnNldFVuaXRzLHRoaXMuZGl0aGVyaW5nPXQuZGl0aGVyaW5nLHRoaXMuYWxwaGFUZXN0PXQuYWxwaGFUZXN0LHRoaXMuYWxwaGFUb0NvdmVyYWdlPXQuYWxwaGFUb0NvdmVyYWdlLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPXQucHJlbXVsdGlwbGllZEFscGhhLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy50b25lTWFwcGVkPXQudG9uZU1hcHBlZCx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX1zZXQgbmVlZHNVcGRhdGUodCl7dD09PSEwJiZ0aGlzLnZlcnNpb24rK319O3FpLnByb3RvdHlwZS5pc01hdGVyaWFsPSEwO3ZhciBzaD1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9RDYsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX07c2gucHJvdG90eXBlLmlzTWVzaEJhc2ljTWF0ZXJpYWw9ITA7dmFyIExuPW5ldyBqLHlWPW5ldyBMdCxKZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7aWYoQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpO3RoaXMubmFtZT0iIix0aGlzLmFycmF5PXQsdGhpcy5pdGVtU2l6ZT1yLHRoaXMuY291bnQ9dCE9PXZvaWQgMD90Lmxlbmd0aC9yOjAsdGhpcy5ub3JtYWxpemVkPW49PT0hMCx0aGlzLnVzYWdlPVczLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MH1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5pdGVtU2l6ZT10Lml0ZW1TaXplLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLm5vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfWNvcHlBdCh0LHIsbil7dCo9dGhpcy5pdGVtU2l6ZSxuKj1yLml0ZW1TaXplO2ZvcihsZXQgaT0wLG89dGhpcy5pdGVtU2l6ZTtpPG87aSsrKXRoaXMuYXJyYXlbdCtpXT1yLmFycmF5W24raV07cmV0dXJuIHRoaXN9Y29weUFycmF5KHQpe3JldHVybiB0aGlzLmFycmF5LnNldCh0KSx0aGlzfWNvcHlDb2xvcnNBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xvcnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IG5lKSxyW24rK109YS5yLHJbbisrXT1hLmcscltuKytdPWEuYn1yZXR1cm4gdGhpc31jb3B5VmVjdG9yMnNBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IEx0KSxyW24rK109YS54LHJbbisrXT1hLnl9cmV0dXJuIHRoaXN9Y29weVZlY3RvcjNzQXJyYXkodCl7bGV0IHI9dGhpcy5hcnJheSxuPTA7Zm9yKGxldCBpPTAsbz10Lmxlbmd0aDtpPG87aSsrKXtsZXQgYT10W2ldO2E9PT12b2lkIDAmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yM3NBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixpKSxhPW5ldyBqKSxyW24rK109YS54LHJbbisrXT1hLnkscltuKytdPWEuen1yZXR1cm4gdGhpc31jb3B5VmVjdG9yNHNBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3I0c0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IGVuKSxyW24rK109YS54LHJbbisrXT1hLnkscltuKytdPWEueixyW24rK109YS53fXJldHVybiB0aGlzfWFwcGx5TWF0cml4Myh0KXtpZih0aGlzLml0ZW1TaXplPT09Milmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKyl5Vi5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMscikseVYuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFkocix5Vi54LHlWLnkpO2Vsc2UgaWYodGhpcy5pdGVtU2l6ZT09PTMpZm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspTG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLHIpLExuLmFwcGx5TWF0cml4Myh0KSx0aGlzLnNldFhZWihyLExuLngsTG4ueSxMbi56KTtyZXR1cm4gdGhpc31hcHBseU1hdHJpeDQodCl7Zm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspTG4ueD10aGlzLmdldFgociksTG4ueT10aGlzLmdldFkociksTG4uej10aGlzLmdldFoociksTG4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKHIsTG4ueCxMbi55LExuLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUxuLng9dGhpcy5nZXRYKHIpLExuLnk9dGhpcy5nZXRZKHIpLExuLno9dGhpcy5nZXRaKHIpLExuLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKHIsTG4ueCxMbi55LExuLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylMbi54PXRoaXMuZ2V0WChyKSxMbi55PXRoaXMuZ2V0WShyKSxMbi56PXRoaXMuZ2V0WihyKSxMbi50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVoocixMbi54LExuLnksTG4ueik7cmV0dXJuIHRoaXN9c2V0KHQscj0wKXtyZXR1cm4gdGhpcy5hcnJheS5zZXQodCxyKSx0aGlzfWdldFgodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXX1zZXRYKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXT1yLHRoaXN9Z2V0WSh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMV19c2V0WSh0LHIpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXT1yLHRoaXN9Z2V0Wih0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl19c2V0Wih0LHIpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXT1yLHRoaXN9Z2V0Vyh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM119c2V0Vyh0LHIpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXT1yLHRoaXN9c2V0WFkodCxyLG4pe3JldHVybiB0Kj10aGlzLml0ZW1TaXplLHRoaXMuYXJyYXlbdCswXT1yLHRoaXMuYXJyYXlbdCsxXT1uLHRoaXN9c2V0WFlaKHQscixuLGkpe3JldHVybiB0Kj10aGlzLml0ZW1TaXplLHRoaXMuYXJyYXlbdCswXT1yLHRoaXMuYXJyYXlbdCsxXT1uLHRoaXMuYXJyYXlbdCsyXT1pLHRoaXN9c2V0WFlaVyh0LHIsbixpLG8pe3JldHVybiB0Kj10aGlzLml0ZW1TaXplLHRoaXMuYXJyYXlbdCswXT1yLHRoaXMuYXJyYXlbdCsxXT1uLHRoaXMuYXJyYXlbdCsyXT1pLHRoaXMuYXJyYXlbdCszXT1vLHRoaXN9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5hcnJheSx0aGlzLml0ZW1TaXplKS5jb3B5KHRoaXMpfXRvSlNPTigpe2xldCB0PXtpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpLG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfTtyZXR1cm4gdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSx0aGlzLnVzYWdlIT09VzMmJih0LnVzYWdlPXRoaXMudXNhZ2UpLCh0aGlzLnVwZGF0ZVJhbmdlLm9mZnNldCE9PTB8fHRoaXMudXBkYXRlUmFuZ2UuY291bnQhPT0tMSkmJih0LnVwZGF0ZVJhbmdlPXRoaXMudXBkYXRlUmFuZ2UpLHR9fTtKZS5wcm90b3R5cGUuaXNCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGxVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBJbnQ4QXJyYXkodCkscixuKX19LGNVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50OEFycmF5KHQpLHIsbil9fSx1VT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgVWludDhDbGFtcGVkQXJyYXkodCkscixuKX19LGhVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBJbnQxNkFycmF5KHQpLHIsbil9fSwkMz1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCkscixuKX19LGZVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBJbnQzMkFycmF5KHQpLHIsbil9fSxLMz1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgVWludDMyQXJyYXkodCkscixuKX19LHBVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxyLG4pfX07cFUucHJvdG90eXBlLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgeGU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEZsb2F0MzJBcnJheSh0KSxyLG4pfX0sZFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEZsb2F0NjRBcnJheSh0KSxyLG4pfX0sdWZyPTAsWGM9bmV3IE1lLG91dD1uZXcgb3IsQzM9bmV3IGosUmw9bmV3IHRhLGtQPW5ldyB0YSxMbz1uZXcgaixQZT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTp1ZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITEsdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbCx0aGlzLmRyYXdSYW5nZT17c3RhcnQ6MCxjb3VudDoxLzB9LHRoaXMudXNlckRhdGE9e319Z2V0SW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleH1zZXRJbmRleCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90aGlzLmluZGV4PW5ldyhOZmUodCk/SzM6JDMpKHQsMSk6dGhpcy5pbmRleD10LHRoaXN9Z2V0QXR0cmlidXRlKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF19c2V0QXR0cmlidXRlKHQscil7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XT1yLHRoaXN9ZGVsZXRlQXR0cmlidXRlKHQpe3JldHVybiBkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW3RdLHRoaXN9aGFzQXR0cmlidXRlKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF0hPT12b2lkIDB9YWRkR3JvdXAodCxyLG49MCl7dGhpcy5ncm91cHMucHVzaCh7c3RhcnQ6dCxjb3VudDpyLG1hdGVyaWFsSW5kZXg6bn0pfWNsZWFyR3JvdXBzKCl7dGhpcy5ncm91cHM9W119c2V0RHJhd1JhbmdlKHQscil7dGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dCx0aGlzLmRyYXdSYW5nZS5jb3VudD1yfWFwcGx5TWF0cml4NCh0KXtsZXQgcj10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247ciE9PXZvaWQgMCYmKHIuYXBwbHlNYXRyaXg0KHQpLHIubmVlZHNVcGRhdGU9ITApO2xldCBuPXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7aWYobiE9PXZvaWQgMCl7bGV0IG89bmV3IGtpKCkuZ2V0Tm9ybWFsTWF0cml4KHQpO24uYXBwbHlOb3JtYWxNYXRyaXgobyksbi5uZWVkc1VwZGF0ZT0hMH1sZXQgaT10aGlzLmF0dHJpYnV0ZXMudGFuZ2VudDtyZXR1cm4gaSE9PXZvaWQgMCYmKGkudHJhbnNmb3JtRGlyZWN0aW9uKHQpLGkubmVlZHNVcGRhdGU9ITApLHRoaXMuYm91bmRpbmdCb3ghPT1udWxsJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdTcGhlcmUhPT1udWxsJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiBYYy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc31yb3RhdGVYKHQpe3JldHVybiBYYy5tYWtlUm90YXRpb25YKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXJvdGF0ZVkodCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvblkodCksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9cm90YXRlWih0KXtyZXR1cm4gWGMubWFrZVJvdGF0aW9uWih0KSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc310cmFuc2xhdGUodCxyLG4pe3JldHVybiBYYy5tYWtlVHJhbnNsYXRpb24odCxyLG4pLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXNjYWxlKHQscixuKXtyZXR1cm4gWGMubWFrZVNjYWxlKHQscixuKSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc31sb29rQXQodCl7cmV0dXJuIG91dC5sb29rQXQodCksb3V0LnVwZGF0ZU1hdHJpeCgpLHRoaXMuYXBwbHlNYXRyaXg0KG91dC5tYXRyaXgpLHRoaXN9Y2VudGVyKCl7cmV0dXJuIHRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoQzMpLm5lZ2F0ZSgpLHRoaXMudHJhbnNsYXRlKEMzLngsQzMueSxDMy56KSx0aGlzfXNldEZyb21Qb2ludHModCl7bGV0IHI9W107Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXtsZXQgbz10W25dO3IucHVzaChvLngsby55LG8uenx8MCl9cmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHIsMykpLHRoaXN9Y29tcHV0ZUJvdW5kaW5nQm94KCl7dGhpcy5ib3VuZGluZ0JveD09PW51bGwmJih0aGlzLmJvdW5kaW5nQm94PW5ldyB0YSk7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLHI9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXtjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgYm94LiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdGhpcy5ib3VuZGluZ0JveC5zZXQobmV3IGooLTEvMCwtMS8wLC0xLzApLG5ldyBqKDEvMCwxLzAsMS8wKSk7cmV0dXJufWlmKHQhPT12b2lkIDApe2lmKHRoaXMuYm91bmRpbmdCb3guc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KSxyKWZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKyl7bGV0IG89cltuXTtSbC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKG8pLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KExvLmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5taW4sUmwubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoTG8pLExvLmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5tYXgsUmwubWF4KSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoTG8pKToodGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KFJsLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KFJsLm1heCkpfX1lbHNlIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogQ29tcHV0ZWQgbWluL21heCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9Y29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl7dGhpcy5ib3VuZGluZ1NwaGVyZT09PW51bGwmJih0aGlzLmJvdW5kaW5nU3BoZXJlPW5ldyBaZik7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLHI9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXtjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgc3BoZXJlLiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3IGosMS8wKTtyZXR1cm59aWYodCl7bGV0IG49dGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7aWYoUmwuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KSxyKWZvcihsZXQgbz0wLGE9ci5sZW5ndGg7bzxhO28rKyl7bGV0IHM9cltvXTtrUC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHMpLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KExvLmFkZFZlY3RvcnMoUmwubWluLGtQLm1pbiksUmwuZXhwYW5kQnlQb2ludChMbyksTG8uYWRkVmVjdG9ycyhSbC5tYXgsa1AubWF4KSxSbC5leHBhbmRCeVBvaW50KExvKSk6KFJsLmV4cGFuZEJ5UG9pbnQoa1AubWluKSxSbC5leHBhbmRCeVBvaW50KGtQLm1heCkpfVJsLmdldENlbnRlcihuKTtsZXQgaT0wO2ZvcihsZXQgbz0wLGE9dC5jb3VudDtvPGE7bysrKUxvLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxvKSxpPU1hdGgubWF4KGksbi5kaXN0YW5jZVRvU3F1YXJlZChMbykpO2lmKHIpZm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW29dLGw9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtmb3IobGV0IGM9MCx1PXMuY291bnQ7Yzx1O2MrKylMby5mcm9tQnVmZmVyQXR0cmlidXRlKHMsYyksbCYmKEMzLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxjKSxMby5hZGQoQzMpKSxpPU1hdGgubWF4KGksbi5kaXN0YW5jZVRvU3F1YXJlZChMbykpfXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzPU1hdGguc3FydChpKSxpc05hTih0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cykmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBDb21wdXRlZCByYWRpdXMgaXMgTmFOLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfX1jb21wdXRlVGFuZ2VudHMoKXtsZXQgdD10aGlzLmluZGV4LHI9dGhpcy5hdHRyaWJ1dGVzO2lmKHQ9PT1udWxsfHxyLnBvc2l0aW9uPT09dm9pZCAwfHxyLm5vcm1hbD09PXZvaWQgMHx8ci51dj09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBmYWlsZWQuIE1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlcyAoaW5kZXgsIHBvc2l0aW9uLCBub3JtYWwgb3IgdXYpIik7cmV0dXJufWxldCBuPXQuYXJyYXksaT1yLnBvc2l0aW9uLmFycmF5LG89ci5ub3JtYWwuYXJyYXksYT1yLnV2LmFycmF5LHM9aS5sZW5ndGgvMztyLnRhbmdlbnQ9PT12b2lkIDAmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgSmUobmV3IEZsb2F0MzJBcnJheSg0KnMpLDQpKTtsZXQgbD1yLnRhbmdlbnQuYXJyYXksYz1bXSx1PVtdO2ZvcihsZXQgQj0wO0I8cztCKyspY1tCXT1uZXcgaix1W0JdPW5ldyBqO2xldCBoPW5ldyBqLGY9bmV3IGoscD1uZXcgaixkPW5ldyBMdCxnPW5ldyBMdCxfPW5ldyBMdCx5PW5ldyBqLHg9bmV3IGo7ZnVuY3Rpb24gYihCLEksTCl7aC5mcm9tQXJyYXkoaSxCKjMpLGYuZnJvbUFycmF5KGksSSozKSxwLmZyb21BcnJheShpLEwqMyksZC5mcm9tQXJyYXkoYSxCKjIpLGcuZnJvbUFycmF5KGEsSSoyKSxfLmZyb21BcnJheShhLEwqMiksZi5zdWIoaCkscC5zdWIoaCksZy5zdWIoZCksXy5zdWIoZCk7bGV0IFI9MS8oZy54Kl8ueS1fLngqZy55KTshaXNGaW5pdGUoUil8fCh5LmNvcHkoZikubXVsdGlwbHlTY2FsYXIoXy55KS5hZGRTY2FsZWRWZWN0b3IocCwtZy55KS5tdWx0aXBseVNjYWxhcihSKSx4LmNvcHkocCkubXVsdGlwbHlTY2FsYXIoZy54KS5hZGRTY2FsZWRWZWN0b3IoZiwtXy54KS5tdWx0aXBseVNjYWxhcihSKSxjW0JdLmFkZCh5KSxjW0ldLmFkZCh5KSxjW0xdLmFkZCh5KSx1W0JdLmFkZCh4KSx1W0ldLmFkZCh4KSx1W0xdLmFkZCh4KSl9bGV0IFM9dGhpcy5ncm91cHM7Uy5sZW5ndGg9PT0wJiYoUz1be3N0YXJ0OjAsY291bnQ6bi5sZW5ndGh9XSk7Zm9yKGxldCBCPTAsST1TLmxlbmd0aDtCPEk7KytCKXtsZXQgTD1TW0JdLFI9TC5zdGFydCxGPUwuY291bnQ7Zm9yKGxldCB6PVIsVT1SK0Y7ejxVO3orPTMpYihuW3orMF0sblt6KzFdLG5beisyXSl9bGV0IEM9bmV3IGosUD1uZXcgaixrPW5ldyBqLE89bmV3IGo7ZnVuY3Rpb24gRChCKXtrLmZyb21BcnJheShvLEIqMyksTy5jb3B5KGspO2xldCBJPWNbQl07Qy5jb3B5KEkpLEMuc3ViKGsubXVsdGlwbHlTY2FsYXIoay5kb3QoSSkpKS5ub3JtYWxpemUoKSxQLmNyb3NzVmVjdG9ycyhPLEkpO2xldCBSPVAuZG90KHVbQl0pPDA/LTE6MTtsW0IqNF09Qy54LGxbQio0KzFdPUMueSxsW0IqNCsyXT1DLnosbFtCKjQrM109Un1mb3IobGV0IEI9MCxJPVMubGVuZ3RoO0I8STsrK0Ipe2xldCBMPVNbQl0sUj1MLnN0YXJ0LEY9TC5jb3VudDtmb3IobGV0IHo9UixVPVIrRjt6PFU7eis9MylEKG5beiswXSksRChuW3orMV0pLEQoblt6KzJdKX19Y29tcHV0ZVZlcnRleE5vcm1hbHMoKXtsZXQgdD10aGlzLmluZGV4LHI9dGhpcy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aWYociE9PXZvaWQgMCl7bGV0IG49dGhpcy5nZXRBdHRyaWJ1dGUoIm5vcm1hbCIpO2lmKG49PT12b2lkIDApbj1uZXcgSmUobmV3IEZsb2F0MzJBcnJheShyLmNvdW50KjMpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG4pO2Vsc2UgZm9yKGxldCBmPTAscD1uLmNvdW50O2Y8cDtmKyspbi5zZXRYWVooZiwwLDAsMCk7bGV0IGk9bmV3IGosbz1uZXcgaixhPW5ldyBqLHM9bmV3IGosbD1uZXcgaixjPW5ldyBqLHU9bmV3IGosaD1uZXcgajtpZih0KWZvcihsZXQgZj0wLHA9dC5jb3VudDtmPHA7Zis9Myl7bGV0IGQ9dC5nZXRYKGYrMCksZz10LmdldFgoZisxKSxfPXQuZ2V0WChmKzIpO2kuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGQpLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGcpLGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLF8pLHUuc3ViVmVjdG9ycyhhLG8pLGguc3ViVmVjdG9ycyhpLG8pLHUuY3Jvc3MoaCkscy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sZCksbC5mcm9tQnVmZmVyQXR0cmlidXRlKG4sZyksYy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sXykscy5hZGQodSksbC5hZGQodSksYy5hZGQodSksbi5zZXRYWVooZCxzLngscy55LHMueiksbi5zZXRYWVooZyxsLngsbC55LGwueiksbi5zZXRYWVooXyxjLngsYy55LGMueil9ZWxzZSBmb3IobGV0IGY9MCxwPXIuY291bnQ7ZjxwO2YrPTMpaS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZiswKSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUocixmKzEpLGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGYrMiksdS5zdWJWZWN0b3JzKGEsbyksaC5zdWJWZWN0b3JzKGksbyksdS5jcm9zcyhoKSxuLnNldFhZWihmKzAsdS54LHUueSx1LnopLG4uc2V0WFlaKGYrMSx1LngsdS55LHUueiksbi5zZXRYWVooZisyLHUueCx1LnksdS56KTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKSxuLm5lZWRzVXBkYXRlPSEwfX1tZXJnZSh0LHIpe2lmKCEodCYmdC5pc0J1ZmZlckdlb21ldHJ5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LiIsdCk7cmV0dXJufXI9PT12b2lkIDAmJihyPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7bGV0IG49dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgaSBpbiBuKXtpZih0LmF0dHJpYnV0ZXNbaV09PT12b2lkIDApY29udGludWU7bGV0IGE9bltpXS5hcnJheSxzPXQuYXR0cmlidXRlc1tpXSxsPXMuYXJyYXksYz1zLml0ZW1TaXplKnIsdT1NYXRoLm1pbihsLmxlbmd0aCxhLmxlbmd0aC1jKTtmb3IobGV0IGg9MCxmPWM7aDx1O2grKyxmKyspYVtmXT1sW2hdfXJldHVybiB0aGlzfW5vcm1hbGl6ZU5vcm1hbHMoKXtsZXQgdD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2ZvcihsZXQgcj0wLG49dC5jb3VudDtyPG47cisrKUxvLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKSxMby5ub3JtYWxpemUoKSx0LnNldFhZWihyLExvLngsTG8ueSxMby56KX10b05vbkluZGV4ZWQoKXtmdW5jdGlvbiB0KHMsbCl7bGV0IGM9cy5hcnJheSx1PXMuaXRlbVNpemUsaD1zLm5vcm1hbGl6ZWQsZj1uZXcgYy5jb25zdHJ1Y3RvcihsLmxlbmd0aCp1KSxwPTAsZD0wO2ZvcihsZXQgZz0wLF89bC5sZW5ndGg7ZzxfO2crKyl7cy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3A9bFtnXSpzLmRhdGEuc3RyaWRlK3Mub2Zmc2V0OnA9bFtnXSp1O2ZvcihsZXQgeT0wO3k8dTt5KyspZltkKytdPWNbcCsrXX1yZXR1cm4gbmV3IEplKGYsdSxoKX1pZih0aGlzLmluZGV4PT09bnVsbClyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS50b05vbkluZGV4ZWQoKTogQnVmZmVyR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4iKSx0aGlzO2xldCByPW5ldyBQZSxuPXRoaXMuaW5kZXguYXJyYXksaT10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBzIGluIGkpe2xldCBsPWlbc10sYz10KGwsbik7ci5zZXRBdHRyaWJ1dGUocyxjKX1sZXQgbz10aGlzLm1vcnBoQXR0cmlidXRlcztmb3IobGV0IHMgaW4gbyl7bGV0IGw9W10sYz1vW3NdO2ZvcihsZXQgdT0wLGg9Yy5sZW5ndGg7dTxoO3UrKyl7bGV0IGY9Y1t1XSxwPXQoZixuKTtsLnB1c2gocCl9ci5tb3JwaEF0dHJpYnV0ZXNbc109bH1yLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7bGV0IGE9dGhpcy5ncm91cHM7Zm9yKGxldCBzPTAsbD1hLmxlbmd0aDtzPGw7cysrKXtsZXQgYz1hW3NdO3IuYWRkR3JvdXAoYy5zdGFydCxjLmNvdW50LGMubWF0ZXJpYWxJbmRleCl9cmV0dXJuIHJ9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJCdWZmZXJHZW9tZXRyeSIsZ2VuZXJhdG9yOiJCdWZmZXJHZW9tZXRyeS50b0pTT04ifX07aWYodC51dWlkPXRoaXMudXVpZCx0LnR5cGU9dGhpcy50eXBlLHRoaXMubmFtZSE9PSIiJiYodC5uYW1lPXRoaXMubmFtZSksT2JqZWN0LmtleXModGhpcy51c2VyRGF0YSkubGVuZ3RoPjAmJih0LnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLHRoaXMucGFyYW1ldGVycyE9PXZvaWQgMCl7bGV0IGw9dGhpcy5wYXJhbWV0ZXJzO2ZvcihsZXQgYyBpbiBsKWxbY10hPT12b2lkIDAmJih0W2NdPWxbY10pO3JldHVybiB0fXQuZGF0YT17YXR0cmlidXRlczp7fX07bGV0IHI9dGhpcy5pbmRleDtyIT09bnVsbCYmKHQuZGF0YS5pbmRleD17dHlwZTpyLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoci5hcnJheSl9KTtsZXQgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBsIGluIG4pe2xldCBjPW5bbF07dC5kYXRhLmF0dHJpYnV0ZXNbbF09Yy50b0pTT04odC5kYXRhKX1sZXQgaT17fSxvPSExO2ZvcihsZXQgbCBpbiB0aGlzLm1vcnBoQXR0cmlidXRlcyl7bGV0IGM9dGhpcy5tb3JwaEF0dHJpYnV0ZXNbbF0sdT1bXTtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKyspe2xldCBwPWNbaF07dS5wdXNoKHAudG9KU09OKHQuZGF0YSkpfXUubGVuZ3RoPjAmJihpW2xdPXUsbz0hMCl9byYmKHQuZGF0YS5tb3JwaEF0dHJpYnV0ZXM9aSx0LmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZSk7bGV0IGE9dGhpcy5ncm91cHM7YS5sZW5ndGg+MCYmKHQuZGF0YS5ncm91cHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhKSkpO2xldCBzPXRoaXMuYm91bmRpbmdTcGhlcmU7cmV0dXJuIHMhPT1udWxsJiYodC5kYXRhLmJvdW5kaW5nU3BoZXJlPXtjZW50ZXI6cy5jZW50ZXIudG9BcnJheSgpLHJhZGl1czpzLnJhZGl1c30pLHR9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5pbmRleD1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLm1vcnBoQXR0cmlidXRlcz17fSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsO2xldCByPXt9O3RoaXMubmFtZT10Lm5hbWU7bGV0IG49dC5pbmRleDtuIT09bnVsbCYmdGhpcy5zZXRJbmRleChuLmNsb25lKHIpKTtsZXQgaT10LmF0dHJpYnV0ZXM7Zm9yKGxldCBjIGluIGkpe2xldCB1PWlbY107dGhpcy5zZXRBdHRyaWJ1dGUoYyx1LmNsb25lKHIpKX1sZXQgbz10Lm1vcnBoQXR0cmlidXRlcztmb3IobGV0IGMgaW4gbyl7bGV0IHU9W10saD1vW2NdO2ZvcihsZXQgZj0wLHA9aC5sZW5ndGg7ZjxwO2YrKyl1LnB1c2goaFtmXS5jbG9uZShyKSk7dGhpcy5tb3JwaEF0dHJpYnV0ZXNbY109dX10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXQubW9ycGhUYXJnZXRzUmVsYXRpdmU7bGV0IGE9dC5ncm91cHM7Zm9yKGxldCBjPTAsdT1hLmxlbmd0aDtjPHU7YysrKXtsZXQgaD1hW2NdO3RoaXMuYWRkR3JvdXAoaC5zdGFydCxoLmNvdW50LGgubWF0ZXJpYWxJbmRleCl9bGV0IHM9dC5ib3VuZGluZ0JveDtzIT09bnVsbCYmKHRoaXMuYm91bmRpbmdCb3g9cy5jbG9uZSgpKTtsZXQgbD10LmJvdW5kaW5nU3BoZXJlO3JldHVybiBsIT09bnVsbCYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bC5jbG9uZSgpKSx0aGlzLmRyYXdSYW5nZS5zdGFydD10LmRyYXdSYW5nZS5zdGFydCx0aGlzLmRyYXdSYW5nZS5jb3VudD10LmRyYXdSYW5nZS5jb3VudCx0aGlzLnVzZXJEYXRhPXQudXNlckRhdGEsdC5wYXJhbWV0ZXJzIT09dm9pZCAwJiYodGhpcy5wYXJhbWV0ZXJzPU9iamVjdC5hc3NpZ24oe30sdC5wYXJhbWV0ZXJzKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07UGUucHJvdG90eXBlLmlzQnVmZmVyR2VvbWV0cnk9ITA7dmFyIFN1ZT1uZXcgTWUsQTM9bmV3IEpmLGF1dD1uZXcgWmYsUjA9bmV3IGosTjA9bmV3IGosRDA9bmV3IGosc3V0PW5ldyBqLGx1dD1uZXcgaixjdXQ9bmV3IGosdlY9bmV3IGoseFY9bmV3IGosYlY9bmV3IGosd1Y9bmV3IEx0LFNWPW5ldyBMdCxNVj1uZXcgTHQsdXV0PW5ldyBqLEVWPW5ldyBqLGVpPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodD1uZXcgUGUscj1uZXcgc2gpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1yLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyE9PXZvaWQgMCYmKHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnNsaWNlKCkpLHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5IT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9T2JqZWN0LmFzc2lnbih7fSx0Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeSkpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc311cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHI9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhyKTtpZihuLmxlbmd0aD4wKXtsZXQgaT1yW25bMF1dO2lmKGkhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7bGV0IHM9aVtvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IHI9dC5tb3JwaFRhcmdldHM7ciE9PXZvaWQgMCYmci5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC51cGRhdGVNb3JwaFRhcmdldHMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX1yYXljYXN0KHQscil7bGV0IG49dGhpcy5nZW9tZXRyeSxpPXRoaXMubWF0ZXJpYWwsbz10aGlzLm1hdHJpeFdvcmxkO2lmKGk9PT12b2lkIDB8fChuLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxhdXQuY29weShuLmJvdW5kaW5nU3BoZXJlKSxhdXQuYXBwbHlNYXRyaXg0KG8pLHQucmF5LmludGVyc2VjdHNTcGhlcmUoYXV0KT09PSExKXx8KFN1ZS5jb3B5KG8pLmludmVydCgpLEEzLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChTdWUpLG4uYm91bmRpbmdCb3ghPT1udWxsJiZBMy5pbnRlcnNlY3RzQm94KG4uYm91bmRpbmdCb3gpPT09ITEpKXJldHVybjtsZXQgYTtpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBzPW4uaW5kZXgsbD1uLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1uLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix1PW4ubW9ycGhUYXJnZXRzUmVsYXRpdmUsaD1uLmF0dHJpYnV0ZXMudXYsZj1uLmF0dHJpYnV0ZXMudXYyLHA9bi5ncm91cHMsZD1uLmRyYXdSYW5nZTtpZihzIT09bnVsbClpZihBcnJheS5pc0FycmF5KGkpKWZvcihsZXQgZz0wLF89cC5sZW5ndGg7ZzxfO2crKyl7bGV0IHk9cFtnXSx4PWlbeS5tYXRlcmlhbEluZGV4XSxiPU1hdGgubWF4KHkuc3RhcnQsZC5zdGFydCksUz1NYXRoLm1pbihzLmNvdW50LE1hdGgubWluKHkuc3RhcnQreS5jb3VudCxkLnN0YXJ0K2QuY291bnQpKTtmb3IobGV0IEM9YixQPVM7QzxQO0MrPTMpe2xldCBrPXMuZ2V0WChDKSxPPXMuZ2V0WChDKzEpLEQ9cy5nZXRYKEMrMik7YT1UVih0aGlzLHgsdCxBMyxsLGMsdSxoLGYsayxPLEQpLGEmJihhLmZhY2VJbmRleD1NYXRoLmZsb29yKEMvMyksYS5mYWNlLm1hdGVyaWFsSW5kZXg9eS5tYXRlcmlhbEluZGV4LHIucHVzaChhKSl9fWVsc2V7bGV0IGc9TWF0aC5tYXgoMCxkLnN0YXJ0KSxfPU1hdGgubWluKHMuY291bnQsZC5zdGFydCtkLmNvdW50KTtmb3IobGV0IHk9Zyx4PV87eTx4O3krPTMpe2xldCBiPXMuZ2V0WCh5KSxTPXMuZ2V0WCh5KzEpLEM9cy5nZXRYKHkrMik7YT1UVih0aGlzLGksdCxBMyxsLGMsdSxoLGYsYixTLEMpLGEmJihhLmZhY2VJbmRleD1NYXRoLmZsb29yKHkvMyksci5wdXNoKGEpKX19ZWxzZSBpZihsIT09dm9pZCAwKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBnPTAsXz1wLmxlbmd0aDtnPF87ZysrKXtsZXQgeT1wW2ddLHg9aVt5Lm1hdGVyaWFsSW5kZXhdLGI9TWF0aC5tYXgoeS5zdGFydCxkLnN0YXJ0KSxTPU1hdGgubWluKGwuY291bnQsTWF0aC5taW4oeS5zdGFydCt5LmNvdW50LGQuc3RhcnQrZC5jb3VudCkpO2ZvcihsZXQgQz1iLFA9UztDPFA7Qys9Myl7bGV0IGs9QyxPPUMrMSxEPUMrMjthPVRWKHRoaXMseCx0LEEzLGwsYyx1LGgsZixrLE8sRCksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoQy8zKSxhLmZhY2UubWF0ZXJpYWxJbmRleD15Lm1hdGVyaWFsSW5kZXgsci5wdXNoKGEpKX19ZWxzZXtsZXQgZz1NYXRoLm1heCgwLGQuc3RhcnQpLF89TWF0aC5taW4obC5jb3VudCxkLnN0YXJ0K2QuY291bnQpO2ZvcihsZXQgeT1nLHg9Xzt5PHg7eSs9Myl7bGV0IGI9eSxTPXkrMSxDPXkrMjthPVRWKHRoaXMsaSx0LEEzLGwsYyx1LGgsZixiLFMsQyksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoeS8zKSxyLnB1c2goYSkpfX19ZWxzZSBuLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fTtlaS5wcm90b3R5cGUuaXNNZXNoPSEwO2Z1bmN0aW9uIGhmcihlLHQscixuLGksbyxhLHMpe2xldCBsO2lmKHQuc2lkZT09PUlpP2w9bi5pbnRlcnNlY3RUcmlhbmdsZShhLG8saSwhMCxzKTpsPW4uaW50ZXJzZWN0VHJpYW5nbGUoaSxvLGEsdC5zaWRlIT09THYscyksbD09PW51bGwpcmV0dXJuIG51bGw7RVYuY29weShzKSxFVi5hcHBseU1hdHJpeDQoZS5tYXRyaXhXb3JsZCk7bGV0IGM9ci5yYXkub3JpZ2luLmRpc3RhbmNlVG8oRVYpO3JldHVybiBjPHIubmVhcnx8Yz5yLmZhcj9udWxsOntkaXN0YW5jZTpjLHBvaW50OkVWLmNsb25lKCksb2JqZWN0OmV9fWZ1bmN0aW9uIFRWKGUsdCxyLG4saSxvLGEscyxsLGMsdSxoKXtSMC5mcm9tQnVmZmVyQXR0cmlidXRlKGksYyksTjAuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLHUpLEQwLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxoKTtsZXQgZj1lLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihvJiZmKXt2Vi5zZXQoMCwwLDApLHhWLnNldCgwLDAsMCksYlYuc2V0KDAsMCwwKTtmb3IobGV0IGQ9MCxnPW8ubGVuZ3RoO2Q8ZztkKyspe2xldCBfPWZbZF0seT1vW2RdO18hPT0wJiYoc3V0LmZyb21CdWZmZXJBdHRyaWJ1dGUoeSxjKSxsdXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh5LHUpLGN1dC5mcm9tQnVmZmVyQXR0cmlidXRlKHksaCksYT8odlYuYWRkU2NhbGVkVmVjdG9yKHN1dCxfKSx4Vi5hZGRTY2FsZWRWZWN0b3IobHV0LF8pLGJWLmFkZFNjYWxlZFZlY3RvcihjdXQsXykpOih2Vi5hZGRTY2FsZWRWZWN0b3Ioc3V0LnN1YihSMCksXykseFYuYWRkU2NhbGVkVmVjdG9yKGx1dC5zdWIoTjApLF8pLGJWLmFkZFNjYWxlZFZlY3RvcihjdXQuc3ViKEQwKSxfKSkpfVIwLmFkZCh2ViksTjAuYWRkKHhWKSxEMC5hZGQoYlYpfWUuaXNTa2lubmVkTWVzaCYmKGUuYm9uZVRyYW5zZm9ybShjLFIwKSxlLmJvbmVUcmFuc2Zvcm0odSxOMCksZS5ib25lVHJhbnNmb3JtKGgsRDApKTtsZXQgcD1oZnIoZSx0LHIsbixSMCxOMCxEMCx1dXQpO2lmKHApe3MmJih3Vi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsYyksU1YuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLHUpLE1WLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxoKSxwLnV2PWFpLmdldFVWKHV1dCxSMCxOMCxEMCx3VixTVixNVixuZXcgTHQpKSxsJiYod1YuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLGMpLFNWLmZyb21CdWZmZXJBdHRyaWJ1dGUobCx1KSxNVi5mcm9tQnVmZmVyQXR0cmlidXRlKGwsaCkscC51djI9YWkuZ2V0VVYodXV0LFIwLE4wLEQwLHdWLFNWLE1WLG5ldyBMdCkpO2xldCBkPXthOmMsYjp1LGM6aCxub3JtYWw6bmV3IGosbWF0ZXJpYWxJbmRleDowfTthaS5nZXROb3JtYWwoUjAsTjAsRDAsZC5ub3JtYWwpLHAuZmFjZT1kfXJldHVybiBwfXZhciBRZj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTEsbj0xLGk9MSxvPTEsYT0xKXtzdXBlcigpLHRoaXMudHlwZT0iQm94R2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6cixkZXB0aDpuLHdpZHRoU2VnbWVudHM6aSxoZWlnaHRTZWdtZW50czpvLGRlcHRoU2VnbWVudHM6YX07bGV0IHM9dGhpcztpPU1hdGguZmxvb3IoaSksbz1NYXRoLmZsb29yKG8pLGE9TWF0aC5mbG9vcihhKTtsZXQgbD1bXSxjPVtdLHU9W10saD1bXSxmPTAscD0wO2QoInoiLCJ5IiwieCIsLTEsLTEsbixyLHQsYSxvLDApLGQoInoiLCJ5IiwieCIsMSwtMSxuLHIsLXQsYSxvLDEpLGQoIngiLCJ6IiwieSIsMSwxLHQsbixyLGksYSwyKSxkKCJ4IiwieiIsInkiLDEsLTEsdCxuLC1yLGksYSwzKSxkKCJ4IiwieSIsInoiLDEsLTEsdCxyLG4saSxvLDQpLGQoIngiLCJ5IiwieiIsLTEsLTEsdCxyLC1uLGksbyw1KSx0aGlzLnNldEluZGV4KGwpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZSh1LDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShoLDIpKTtmdW5jdGlvbiBkKGcsXyx5LHgsYixTLEMsUCxrLE8sRCl7bGV0IEI9Uy9rLEk9Qy9PLEw9Uy8yLFI9Qy8yLEY9UC8yLHo9aysxLFU9TysxLFc9MCxaPTAscnQ9bmV3IGo7Zm9yKGxldCBvdD0wO290PFU7b3QrKyl7bGV0IHN0PW90KkktUjtmb3IobGV0IFN0PTA7U3Q8ejtTdCsrKXtsZXQgYnQ9U3QqQi1MO3J0W2ddPWJ0KngscnRbX109c3QqYixydFt5XT1GLGMucHVzaChydC54LHJ0LnkscnQueikscnRbZ109MCxydFtfXT0wLHJ0W3ldPVA+MD8xOi0xLHUucHVzaChydC54LHJ0LnkscnQueiksaC5wdXNoKFN0L2spLGgucHVzaCgxLW90L08pLFcrPTF9fWZvcihsZXQgb3Q9MDtvdDxPO290KyspZm9yKGxldCBzdD0wO3N0PGs7c3QrKyl7bGV0IFN0PWYrc3QreipvdCxidD1mK3N0K3oqKG90KzEpLE10PWYrKHN0KzEpK3oqKG90KzEpLGx0PWYrKHN0KzEpK3oqb3Q7bC5wdXNoKFN0LGJ0LGx0KSxsLnB1c2goYnQsTXQsbHQpLForPTZ9cy5hZGRHcm91cChwLFosRCkscCs9WixmKz1XfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBRZih0LndpZHRoLHQuaGVpZ2h0LHQuZGVwdGgsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5kZXB0aFNlZ21lbnRzKX19O2Z1bmN0aW9uIFozKGUpe2xldCB0PXt9O2ZvcihsZXQgciBpbiBlKXt0W3JdPXt9O2ZvcihsZXQgbiBpbiBlW3JdKXtsZXQgaT1lW3JdW25dO2kmJihpLmlzQ29sb3J8fGkuaXNNYXRyaXgzfHxpLmlzTWF0cml4NHx8aS5pc1ZlY3RvcjJ8fGkuaXNWZWN0b3IzfHxpLmlzVmVjdG9yNHx8aS5pc1RleHR1cmV8fGkuaXNRdWF0ZXJuaW9uKT90W3JdW25dPWkuY2xvbmUoKTpBcnJheS5pc0FycmF5KGkpP3Rbcl1bbl09aS5zbGljZSgpOnRbcl1bbl09aX19cmV0dXJuIHR9ZnVuY3Rpb24gVGEoZSl7bGV0IHQ9e307Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldCBuPVozKGVbcl0pO2ZvcihsZXQgaSBpbiBuKXRbaV09bltpXX1yZXR1cm4gdH12YXIgT2ZlPXtjbG9uZTpaMyxtZXJnZTpUYX0sZmZyPWB2b2lkIG1haW4oKSB7CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7Cn1gLHBmcj1gdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMS4wLCAwLjAsIDAuMCwgMS4wICk7Cn1gLGxoPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYWRlck1hdGVyaWFsIix0aGlzLmRlZmluZXM9e30sdGhpcy51bmlmb3Jtcz17fSx0aGlzLnZlcnRleFNoYWRlcj1mZnIsdGhpcy5mcmFnbWVudFNoYWRlcj1wZnIsdGhpcy5saW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMubGlnaHRzPSExLHRoaXMuY2xpcHBpbmc9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdCE9PXZvaWQgMCYmKHQuYXR0cmlidXRlcyE9PXZvaWQgMCYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9WjModC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5leHRlbnNpb25zPU9iamVjdC5hc3NpZ24oe30sdC5leHRlbnNpb25zKSx0aGlzLmdsc2xWZXJzaW9uPXQuZ2xzbFZlcnNpb24sdGhpc310b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3IuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixyLnVuaWZvcm1zPXt9O2ZvcihsZXQgaSBpbiB0aGlzLnVuaWZvcm1zKXtsZXQgYT10aGlzLnVuaWZvcm1zW2ldLnZhbHVlO2EmJmEuaXNUZXh0dXJlP3IudW5pZm9ybXNbaV09e3R5cGU6InQiLHZhbHVlOmEudG9KU09OKHQpLnV1aWR9OmEmJmEuaXNDb2xvcj9yLnVuaWZvcm1zW2ldPXt0eXBlOiJjIix2YWx1ZTphLmdldEhleCgpfTphJiZhLmlzVmVjdG9yMj9yLnVuaWZvcm1zW2ldPXt0eXBlOiJ2MiIsdmFsdWU6YS50b0FycmF5KCl9OmEmJmEuaXNWZWN0b3IzP3IudW5pZm9ybXNbaV09e3R5cGU6InYzIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc1ZlY3RvcjQ/ci51bmlmb3Jtc1tpXT17dHlwZToidjQiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzTWF0cml4Mz9yLnVuaWZvcm1zW2ldPXt0eXBlOiJtMyIsdmFsdWU6YS50b0FycmF5KCl9OmEmJmEuaXNNYXRyaXg0P3IudW5pZm9ybXNbaV09e3R5cGU6Im00Iix2YWx1ZTphLnRvQXJyYXkoKX06ci51bmlmb3Jtc1tpXT17dmFsdWU6YX19T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKHIuZGVmaW5lcz10aGlzLmRlZmluZXMpLHIudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLHIuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtsZXQgbj17fTtmb3IobGV0IGkgaW4gdGhpcy5leHRlbnNpb25zKXRoaXMuZXh0ZW5zaW9uc1tpXT09PSEwJiYobltpXT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmxlbmd0aD4wJiYoci5leHRlbnNpb25zPW4pLHJ9fTtsaC5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDt2YXIgUnY9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDYW1lcmEiLHRoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyBNZSx0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IE1lLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IE1lfWNvcHkodCxyKXtyZXR1cm4gc3VwZXIuY29weSh0LHIpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IHI9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoLXJbOF0sLXJbOV0sLXJbMTBdKS5ub3JtYWxpemUoKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfXVwZGF0ZVdvcmxkTWF0cml4KHQscil7c3VwZXIudXBkYXRlV29ybGRNYXRyaXgodCxyKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O1J2LnByb3RvdHlwZS5pc0NhbWVyYT0hMDt2YXIgVWk9Y2xhc3MgZXh0ZW5kcyBSdntjb25zdHJ1Y3Rvcih0PTUwLHI9MSxuPS4xLGk9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPW4sdGhpcy5mYXI9aSx0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PXIsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9c2V0Rm9jYWxMZW5ndGgodCl7bGV0IHI9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj1KUCoyKk1hdGguYXRhbihyKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRGb2NhbExlbmd0aCgpe2xldCB0PU1hdGgudGFuKFB2Ki41KnRoaXMuZm92KTtyZXR1cm4gLjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdH1nZXRFZmZlY3RpdmVGT1YoKXtyZXR1cm4gSlAqMipNYXRoLmF0YW4oTWF0aC50YW4oUHYqLjUqdGhpcy5mb3YpL3RoaXMuem9vbSl9Z2V0RmlsbVdpZHRoKCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlKk1hdGgubWluKHRoaXMuYXNwZWN0LDEpfWdldEZpbG1IZWlnaHQoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UvTWF0aC5tYXgodGhpcy5hc3BlY3QsMSl9c2V0Vmlld09mZnNldCh0LHIsbixpLG8sYSl7dGhpcy5hc3BlY3Q9dC9yLHRoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1yLHRoaXMudmlldy5vZmZzZXRYPW4sdGhpcy52aWV3Lm9mZnNldFk9aSx0aGlzLnZpZXcud2lkdGg9byx0aGlzLnZpZXcuaGVpZ2h0PWEsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9dGhpcy5uZWFyLHI9dCpNYXRoLnRhbihQdiouNSp0aGlzLmZvdikvdGhpcy56b29tLG49MipyLGk9dGhpcy5hc3BlY3QqbixvPS0uNSppLGE9dGhpcy52aWV3O2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgbD1hLmZ1bGxXaWR0aCxjPWEuZnVsbEhlaWdodDtvKz1hLm9mZnNldFgqaS9sLHItPWEub2Zmc2V0WSpuL2MsaSo9YS53aWR0aC9sLG4qPWEuaGVpZ2h0L2N9bGV0IHM9dGhpcy5maWxtT2Zmc2V0O3MhPT0wJiYobys9dCpzL3RoaXMuZ2V0RmlsbVdpZHRoKCkpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUobyxvK2kscixyLW4sdCx0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3QuZm92PXRoaXMuZm92LHIub2JqZWN0Lnpvb209dGhpcy56b29tLHIub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLHIub2JqZWN0LmZhcj10aGlzLmZhcixyLm9iamVjdC5mb2N1cz10aGlzLmZvY3VzLHIub2JqZWN0LmFzcGVjdD10aGlzLmFzcGVjdCx0aGlzLnZpZXchPT1udWxsJiYoci5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLHIub2JqZWN0LmZpbG1HYXVnZT10aGlzLmZpbG1HYXVnZSxyLm9iamVjdC5maWxtT2Zmc2V0PXRoaXMuZmlsbU9mZnNldCxyfX07VWkucHJvdG90eXBlLmlzUGVyc3BlY3RpdmVDYW1lcmE9ITA7dmFyIFAzPTkwLEkzPTEsSjM9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0LHIsbil7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLG4uaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQ3ViZUNhbWVyYTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIGFuIGluc3RhbmNlIG9mIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7cmV0dXJufXRoaXMucmVuZGVyVGFyZ2V0PW47bGV0IGk9bmV3IFVpKFAzLEkzLHQscik7aS5sYXllcnM9dGhpcy5sYXllcnMsaS51cC5zZXQoMCwtMSwwKSxpLmxvb2tBdChuZXcgaigxLDAsMCkpLHRoaXMuYWRkKGkpO2xldCBvPW5ldyBVaShQMyxJMyx0LHIpO28ubGF5ZXJzPXRoaXMubGF5ZXJzLG8udXAuc2V0KDAsLTEsMCksby5sb29rQXQobmV3IGooLTEsMCwwKSksdGhpcy5hZGQobyk7bGV0IGE9bmV3IFVpKFAzLEkzLHQscik7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLDEpLGEubG9va0F0KG5ldyBqKDAsMSwwKSksdGhpcy5hZGQoYSk7bGV0IHM9bmV3IFVpKFAzLEkzLHQscik7cy5sYXllcnM9dGhpcy5sYXllcnMscy51cC5zZXQoMCwwLC0xKSxzLmxvb2tBdChuZXcgaigwLC0xLDApKSx0aGlzLmFkZChzKTtsZXQgbD1uZXcgVWkoUDMsSTMsdCxyKTtsLmxheWVycz10aGlzLmxheWVycyxsLnVwLnNldCgwLC0xLDApLGwubG9va0F0KG5ldyBqKDAsMCwxKSksdGhpcy5hZGQobCk7bGV0IGM9bmV3IFVpKFAzLEkzLHQscik7Yy5sYXllcnM9dGhpcy5sYXllcnMsYy51cC5zZXQoMCwtMSwwKSxjLmxvb2tBdChuZXcgaigwLDAsLTEpKSx0aGlzLmFkZChjKX11cGRhdGUodCxyKXt0aGlzLnBhcmVudD09PW51bGwmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtsZXQgbj10aGlzLnJlbmRlclRhcmdldCxbaSxvLGEscyxsLGNdPXRoaXMuY2hpbGRyZW4sdT10LnhyLmVuYWJsZWQsaD10LmdldFJlbmRlclRhcmdldCgpO3QueHIuZW5hYmxlZD0hMTtsZXQgZj1uLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO24udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQobiwwKSx0LnJlbmRlcihyLGkpLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMSksdC5yZW5kZXIocixvKSx0LnNldFJlbmRlclRhcmdldChuLDIpLHQucmVuZGVyKHIsYSksdC5zZXRSZW5kZXJUYXJnZXQobiwzKSx0LnJlbmRlcihyLHMpLHQuc2V0UmVuZGVyVGFyZ2V0KG4sNCksdC5yZW5kZXIocixsKSxuLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWYsdC5zZXRSZW5kZXJUYXJnZXQobiw1KSx0LnJlbmRlcihyLGMpLHQuc2V0UmVuZGVyVGFyZ2V0KGgpLHQueHIuZW5hYmxlZD11LG4udGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlPSEwfX0sSDA9Y2xhc3MgZXh0ZW5kcyB4aXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSxzLGwsYyx1KXt0PXQhPT12b2lkIDA/dDpbXSxyPXIhPT12b2lkIDA/cjpueCxzdXBlcih0LHIsbixpLG8sYSxzLGwsYyx1KSx0aGlzLmZsaXBZPSExfWdldCBpbWFnZXMoKXtyZXR1cm4gdGhpcy5pbWFnZX1zZXQgaW1hZ2VzKHQpe3RoaXMuaW1hZ2U9dH19O0gwLnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwO3ZhciBRMz1jbGFzcyBleHRlbmRzIHVze2NvbnN0cnVjdG9yKHQscixuKXtOdW1iZXIuaXNJbnRlZ2VyKHIpJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEN1YmVSZW5kZXJUYXJnZXQ6IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkiKSxyPW4pLHN1cGVyKHQsdCxyKSxyPXJ8fHt9LHRoaXMudGV4dHVyZT1uZXcgSDAodm9pZCAwLHIubWFwcGluZyxyLndyYXBTLHIud3JhcFQsci5tYWdGaWx0ZXIsci5taW5GaWx0ZXIsci5mb3JtYXQsci50eXBlLHIuYW5pc290cm9weSxyLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ci5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/ci5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1yLm1pbkZpbHRlciE9PXZvaWQgMD9yLm1pbkZpbHRlcjpvaX1mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LHIpe3RoaXMudGV4dHVyZS50eXBlPXIudHlwZSx0aGlzLnRleHR1cmUuZm9ybWF0PVFvLHRoaXMudGV4dHVyZS5lbmNvZGluZz1yLmVuY29kaW5nLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ci5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1yLm1pbkZpbHRlcix0aGlzLnRleHR1cmUubWFnRmlsdGVyPXIubWFnRmlsdGVyO2xldCBuPXt1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmAKCgkJCQl2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwoKCQkJCXZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CgoJCQkJCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwoKCQkJCX0KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7CgoJCQkJCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkJCQkJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoKCQkJCX0KCQkJYCxmcmFnbWVudFNoYWRlcjpgCgoJCQkJdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0OwoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJI2luY2x1ZGUgPGNvbW1vbj4KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCgkJCQkJdmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApOwoKCQkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCgkJCQl9CgkJCWB9LGk9bmV3IFFmKDUsNSw1KSxvPW5ldyBsaCh7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6WjMobi51bmlmb3JtcyksdmVydGV4U2hhZGVyOm4udmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOm4uZnJhZ21lbnRTaGFkZXIsc2lkZTpJaSxibGVuZGluZzokZH0pO28udW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPXI7bGV0IGE9bmV3IGVpKGksbykscz1yLm1pbkZpbHRlcjtyZXR1cm4gci5taW5GaWx0ZXI9PT1veCYmKHIubWluRmlsdGVyPW9pKSxuZXcgSjMoMSwxMCx0aGlzKS51cGRhdGUodCxhKSxyLm1pbkZpbHRlcj1zLGEuZ2VvbWV0cnkuZGlzcG9zZSgpLGEubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxyLG4saSl7bGV0IG89dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IGE9MDthPDY7YSsrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMsYSksdC5jbGVhcihyLG4saSk7dC5zZXRSZW5kZXJUYXJnZXQobyl9fTtRMy5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIGh1dD1uZXcgaixkZnI9bmV3IGosbWZyPW5ldyBraSwkYz1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBqKDEsMCwwKSxyPTApe3RoaXMubm9ybWFsPXQsdGhpcy5jb25zdGFudD1yfXNldCh0LHIpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9cix0aGlzfXNldENvbXBvbmVudHModCxyLG4saSl7cmV0dXJuIHRoaXMubm9ybWFsLnNldCh0LHIsbiksdGhpcy5jb25zdGFudD1pLHRoaXN9c2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodCxyKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PS1yLmRvdCh0aGlzLm5vcm1hbCksdGhpc31zZXRGcm9tQ29wbGFuYXJQb2ludHModCxyLG4pe2xldCBpPWh1dC5zdWJWZWN0b3JzKG4scikuY3Jvc3MoZGZyLnN1YlZlY3RvcnModCxyKSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQoaSx0KSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodC5ub3JtYWwpLHRoaXMuY29uc3RhbnQ9dC5jb25zdGFudCx0aGlzfW5vcm1hbGl6ZSgpe2xldCB0PTEvdGhpcy5ub3JtYWwubGVuZ3RoKCk7cmV0dXJuIHRoaXMubm9ybWFsLm11bHRpcGx5U2NhbGFyKHQpLHRoaXMuY29uc3RhbnQqPXQsdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy5jb25zdGFudCo9LTEsdGhpcy5ub3JtYWwubmVnYXRlKCksdGhpc31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHRoaXMubm9ybWFsLmRvdCh0KSt0aGlzLmNvbnN0YW50fWRpc3RhbmNlVG9TcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuY2VudGVyKS10LnJhZGl1c31wcm9qZWN0UG9pbnQodCxyKXtyZXR1cm4gci5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5kaXN0YW5jZVRvUG9pbnQodCkpLmFkZCh0KX1pbnRlcnNlY3RMaW5lKHQscil7bGV0IG49dC5kZWx0YShodXQpLGk9dGhpcy5ub3JtYWwuZG90KG4pO2lmKGk9PT0wKXJldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KT09PTA/ci5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IG89LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvaTtyZXR1cm4gbzwwfHxvPjE/bnVsbDpyLmNvcHkobikubXVsdGlwbHlTY2FsYXIobykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCByPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLG49dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiByPDAmJm4+MHx8bjwwJiZyPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQscil7bGV0IG49cnx8bWZyLmdldE5vcm1hbE1hdHJpeCh0KSxpPXRoaXMuY29wbGFuYXJQb2ludChodXQpLmFwcGx5TWF0cml4NCh0KSxvPXRoaXMubm9ybWFsLmFwcGx5TWF0cml4MyhuKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5jb25zdGFudD0taS5kb3QobyksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY29uc3RhbnQtPXQuZG90KHRoaXMubm9ybWFsKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5ub3JtYWwuZXF1YWxzKHRoaXMubm9ybWFsKSYmdC5jb25zdGFudD09PXRoaXMuY29uc3RhbnR9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07JGMucHJvdG90eXBlLmlzUGxhbmU9ITA7dmFyIEwzPW5ldyBaZixDVj1uZXcgaixOdj1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkYyxyPW5ldyAkYyxuPW5ldyAkYyxpPW5ldyAkYyxvPW5ldyAkYyxhPW5ldyAkYyl7dGhpcy5wbGFuZXM9W3QscixuLGksbyxhXX1zZXQodCxyLG4saSxvLGEpe2xldCBzPXRoaXMucGxhbmVzO3JldHVybiBzWzBdLmNvcHkodCksc1sxXS5jb3B5KHIpLHNbMl0uY29weShuKSxzWzNdLmNvcHkoaSksc1s0XS5jb3B5KG8pLHNbNV0uY29weShhKSx0aGlzfWNvcHkodCl7bGV0IHI9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKylyW25dLmNvcHkodC5wbGFuZXNbbl0pO3JldHVybiB0aGlzfXNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHQpe2xldCByPXRoaXMucGxhbmVzLG49dC5lbGVtZW50cyxpPW5bMF0sbz1uWzFdLGE9blsyXSxzPW5bM10sbD1uWzRdLGM9bls1XSx1PW5bNl0saD1uWzddLGY9bls4XSxwPW5bOV0sZD1uWzEwXSxnPW5bMTFdLF89blsxMl0seT1uWzEzXSx4PW5bMTRdLGI9blsxNV07cmV0dXJuIHJbMF0uc2V0Q29tcG9uZW50cyhzLWksaC1sLGctZixiLV8pLm5vcm1hbGl6ZSgpLHJbMV0uc2V0Q29tcG9uZW50cyhzK2ksaCtsLGcrZixiK18pLm5vcm1hbGl6ZSgpLHJbMl0uc2V0Q29tcG9uZW50cyhzK28saCtjLGcrcCxiK3kpLm5vcm1hbGl6ZSgpLHJbM10uc2V0Q29tcG9uZW50cyhzLW8saC1jLGctcCxiLXkpLm5vcm1hbGl6ZSgpLHJbNF0uc2V0Q29tcG9uZW50cyhzLWEsaC11LGctZCxiLXgpLm5vcm1hbGl6ZSgpLHJbNV0uc2V0Q29tcG9uZW50cyhzK2EsaCt1LGcrZCxiK3gpLm5vcm1hbGl6ZSgpLHRoaXN9aW50ZXJzZWN0c09iamVjdCh0KXtsZXQgcj10Lmdlb21ldHJ5O3JldHVybiByLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmci5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxMMy5jb3B5KHIuYm91bmRpbmdTcGhlcmUpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoTDMpfWludGVyc2VjdHNTcHJpdGUodCl7cmV0dXJuIEwzLmNlbnRlci5zZXQoMCwwLDApLEwzLnJhZGl1cz0uNzA3MTA2NzgxMTg2NTQ3NixMMy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKEwzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe2xldCByPXRoaXMucGxhbmVzLG49dC5jZW50ZXIsaT0tdC5yYWRpdXM7Zm9yKGxldCBvPTA7bzw2O28rKylpZihyW29dLmRpc3RhbmNlVG9Qb2ludChuKTxpKXJldHVybiExO3JldHVybiEwfWludGVyc2VjdHNCb3godCl7bGV0IHI9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKyl7bGV0IGk9cltuXTtpZihDVi54PWkubm9ybWFsLng+MD90Lm1heC54OnQubWluLngsQ1YueT1pLm5vcm1hbC55PjA/dC5tYXgueTp0Lm1pbi55LENWLno9aS5ub3JtYWwuej4wP3QubWF4Lno6dC5taW4ueixpLmRpc3RhbmNlVG9Qb2ludChDVik8MClyZXR1cm4hMX1yZXR1cm4hMH1jb250YWluc1BvaW50KHQpe2xldCByPXRoaXMucGxhbmVzO2ZvcihsZXQgbj0wO248NjtuKyspaWYocltuXS5kaXN0YW5jZVRvUG9pbnQodCk8MClyZXR1cm4hMTtyZXR1cm4hMH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTtmdW5jdGlvbiB6ZmUoKXtsZXQgZT1udWxsLHQ9ITEscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8sYSl7cihvLGEpLG49ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSl9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7dCE9PSEwJiZyIT09bnVsbCYmKG49ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtlLmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4pLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24obyl7cj1vfSxzZXRDb250ZXh0OmZ1bmN0aW9uKG8pe2U9b319fWZ1bmN0aW9uIGdmcihlLHQpe2xldCByPXQuaXNXZWJHTDIsbj1uZXcgV2Vha01hcDtmdW5jdGlvbiBpKGMsdSl7bGV0IGg9Yy5hcnJheSxmPWMudXNhZ2UscD1lLmNyZWF0ZUJ1ZmZlcigpO2UuYmluZEJ1ZmZlcih1LHApLGUuYnVmZmVyRGF0YSh1LGgsZiksYy5vblVwbG9hZENhbGxiYWNrKCk7bGV0IGQ9NTEyNjtyZXR1cm4gaCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT9kPTUxMjY6aCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQXR0cmlidXRlczogVW5zdXBwb3J0ZWQgZGF0YSBidWZmZXIgZm9ybWF0OiBGbG9hdDY0QXJyYXkuIik6aCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5P2MuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlP3I/ZD01MTMxOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVc2FnZSBvZiBGbG9hdDE2QnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIFdlYkdMMi4iKTpkPTUxMjM6aCBpbnN0YW5jZW9mIEludDE2QXJyYXk/ZD01MTIyOmggaW5zdGFuY2VvZiBVaW50MzJBcnJheT9kPTUxMjU6aCBpbnN0YW5jZW9mIEludDMyQXJyYXk/ZD01MTI0OmggaW5zdGFuY2VvZiBJbnQ4QXJyYXk/ZD01MTIwOihoIGluc3RhbmNlb2YgVWludDhBcnJheXx8aCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSYmKGQ9NTEyMSkse2J1ZmZlcjpwLHR5cGU6ZCxieXRlc1BlckVsZW1lbnQ6aC5CWVRFU19QRVJfRUxFTUVOVCx2ZXJzaW9uOmMudmVyc2lvbn19ZnVuY3Rpb24gbyhjLHUsaCl7bGV0IGY9dS5hcnJheSxwPXUudXBkYXRlUmFuZ2U7ZS5iaW5kQnVmZmVyKGgsYykscC5jb3VudD09PS0xP2UuYnVmZmVyU3ViRGF0YShoLDAsZik6KHI/ZS5idWZmZXJTdWJEYXRhKGgscC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLHAub2Zmc2V0LHAuY291bnQpOmUuYnVmZmVyU3ViRGF0YShoLHAub2Zmc2V0KmYuQllURVNfUEVSX0VMRU1FTlQsZi5zdWJhcnJheShwLm9mZnNldCxwLm9mZnNldCtwLmNvdW50KSkscC5jb3VudD0tMSl9ZnVuY3Rpb24gYShjKXtyZXR1cm4gYy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoYz1jLmRhdGEpLG4uZ2V0KGMpfWZ1bmN0aW9uIHMoYyl7Yy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoYz1jLmRhdGEpO2xldCB1PW4uZ2V0KGMpO3UmJihlLmRlbGV0ZUJ1ZmZlcih1LmJ1ZmZlciksbi5kZWxldGUoYykpfWZ1bmN0aW9uIGwoYyx1KXtpZihjLmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2xldCBmPW4uZ2V0KGMpOyghZnx8Zi52ZXJzaW9uPGMudmVyc2lvbikmJm4uc2V0KGMse2J1ZmZlcjpjLmJ1ZmZlcix0eXBlOmMudHlwZSxieXRlc1BlckVsZW1lbnQ6Yy5lbGVtZW50U2l6ZSx2ZXJzaW9uOmMudmVyc2lvbn0pO3JldHVybn1jLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IGg9bi5nZXQoYyk7aD09PXZvaWQgMD9uLnNldChjLGkoYyx1KSk6aC52ZXJzaW9uPGMudmVyc2lvbiYmKG8oaC5idWZmZXIsYyx1KSxoLnZlcnNpb249Yy52ZXJzaW9uKX1yZXR1cm57Z2V0OmEscmVtb3ZlOnMsdXBkYXRlOmx9fXZhciBWMD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTEsbj0xLGk9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBsYW5lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6cix3aWR0aFNlZ21lbnRzOm4saGVpZ2h0U2VnbWVudHM6aX07bGV0IG89dC8yLGE9ci8yLHM9TWF0aC5mbG9vcihuKSxsPU1hdGguZmxvb3IoaSksYz1zKzEsdT1sKzEsaD10L3MsZj1yL2wscD1bXSxkPVtdLGc9W10sXz1bXTtmb3IobGV0IHk9MDt5PHU7eSsrKXtsZXQgeD15KmYtYTtmb3IobGV0IGI9MDtiPGM7YisrKXtsZXQgUz1iKmgtbztkLnB1c2goUywteCwwKSxnLnB1c2goMCwwLDEpLF8ucHVzaChiL3MpLF8ucHVzaCgxLXkvbCl9fWZvcihsZXQgeT0wO3k8bDt5KyspZm9yKGxldCB4PTA7eDxzO3grKyl7bGV0IGI9eCtjKnksUz14K2MqKHkrMSksQz14KzErYyooeSsxKSxQPXgrMStjKnk7cC5wdXNoKGIsUyxQKSxwLnB1c2goUyxDLFApfXRoaXMuc2V0SW5kZXgocCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoZCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGcsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKF8sMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFYwKHQud2lkdGgsdC5oZWlnaHQsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMpfX0sX2ZyPWAjaWZkZWYgVVNFX0FMUEhBTUFQCglkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nOwojZW5kaWZgLHlmcj1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsdmZyPWAjaWZkZWYgVVNFX0FMUEhBVEVTVAoJaWYgKCBkaWZmdXNlQ29sb3IuYSA8IGFscGhhVGVzdCApIGRpc2NhcmQ7CiNlbmRpZmAseGZyPWAjaWZkZWYgVVNFX0FMUEhBVEVTVAoJdW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7CiNlbmRpZmAsYmZyPWAjaWZkZWYgVVNFX0FPTUFQCglmbG9hdCBhbWJpZW50T2NjbHVzaW9uID0gKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICkuciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjsKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKQoJCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTsKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAsd2ZyPWAjaWZkZWYgVVNFX0FPTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDsKCXVuaWZvcm0gZmxvYXQgYW9NYXBJbnRlbnNpdHk7CiNlbmRpZmAsU2ZyPSJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTsiLE1mcj1gdmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTsKI2lmZGVmIFVTRV9UQU5HRU5UCgl2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApOwojZW5kaWZgLEVmcj1gdmVjMyBCUkRGX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkgewoJcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBkaWZmdXNlQ29sb3I7Cn0KdmVjMyBGX1NjaGxpY2soIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgZG90VkggKSB7CglmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7CglyZXR1cm4gZjAgKiAoIDEuMCAtIGZyZXNuZWwgKSArICggZjkwICogZnJlc25lbCApOwp9CmZsb2F0IFZfR0dYX1NtaXRoQ29ycmVsYXRlZCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHsKCWZsb2F0IGEyID0gcG93MiggYWxwaGEgKTsKCWZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTsKCWZsb2F0IGdsID0gZG90TlYgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5MICkgKTsKCXJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTsKfQpmbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZGVub20gPSBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wOwoJcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7Cn0KdmVjMyBCUkRGX0dHWCggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApOwoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBmMCwgZjkwLCBkb3RWSCApOwoJZmxvYXQgViA9IFZfR0dYX1NtaXRoQ29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApOwoJZmxvYXQgRCA9IERfR0dYKCBhbHBoYSwgZG90TkggKTsKCXJldHVybiBGICogKCBWICogRCApOwp9CnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJY29uc3QgZmxvYXQgTFVUX1NJWkUgPSA2NC4wOwoJY29uc3QgZmxvYXQgTFVUX1NDQUxFID0gKCBMVVRfU0laRSAtIDEuMCApIC8gTFVUX1NJWkU7Cgljb25zdCBmbG9hdCBMVVRfQklBUyA9IDAuNSAvIExVVF9TSVpFOwoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBOLCBWICkgKTsKCXZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTsKCXV2ID0gdXYgKiBMVVRfU0NBTEUgKyBMVVRfQklBUzsKCXJldHVybiB1djsKfQpmbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHsKCWZsb2F0IGwgPSBsZW5ndGgoIGYgKTsKCXJldHVybiBtYXgoICggbCAqIGwgKyBmLnogKSAvICggbCArIDEuMCApLCAwLjAgKTsKfQp2ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHsKCWZsb2F0IHggPSBkb3QoIHYxLCB2MiApOwoJZmxvYXQgeSA9IGFicyggeCApOwoJZmxvYXQgYSA9IDAuODU0Mzk4NSArICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTsKCWZsb2F0IGIgPSAzLjQxNzU5NDAgKyAoIDQuMTYxNjcyNCArIHkgKSAqIHk7CglmbG9hdCB2ID0gYSAvIGI7CglmbG9hdCB0aGV0YV9zaW50aGV0YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7CglyZXR1cm4gY3Jvc3MoIHYxLCB2MiApICogdGhldGFfc2ludGhldGE7Cn0KdmVjMyBMVENfRXZhbHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAsIGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7Cgl2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyB2MiA9IHJlY3RDb29yZHNbIDMgXSAtIHJlY3RDb29yZHNbIDAgXTsKCXZlYzMgbGlnaHROb3JtYWwgPSBjcm9zcyggdjEsIHYyICk7CglpZiggZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApOwoJdmVjMyBUMSwgVDI7CglUMSA9IG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApOwoJVDIgPSAtIGNyb3NzKCBOLCBUMSApOwoJbWF0MyBtYXQgPSBtSW52ICogdHJhbnNwb3NlTWF0MyggbWF0MyggVDEsIFQyLCBOICkgKTsKCXZlYzMgY29vcmRzWyA0IF07Cgljb29yZHNbIDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApOwoJY29vcmRzWyAxIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDEgXSAtIFAgKTsKCWNvb3Jkc1sgMiBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAyIF0gLSBQICk7Cgljb29yZHNbIDMgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMyBdIC0gUCApOwoJY29vcmRzWyAwIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMCBdICk7Cgljb29yZHNbIDEgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAxIF0gKTsKCWNvb3Jkc1sgMiBdID0gbm9ybWFsaXplKCBjb29yZHNbIDIgXSApOwoJY29vcmRzWyAzIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMyBdICk7Cgl2ZWMzIHZlY3RvckZvcm1GYWN0b3IgPSB2ZWMzKCAwLjAgKTsKCXZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTsKCXZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDEgXSwgY29vcmRzWyAyIF0gKTsKCXZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDIgXSwgY29vcmRzWyAzIF0gKTsKCXZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTsKCWZsb2F0IHJlc3VsdCA9IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggdmVjdG9yRm9ybUZhY3RvciApOwoJcmV0dXJuIHZlYzMoIHJlc3VsdCApOwp9CmZsb2F0IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKSB7CglyZXR1cm4gMC4yNTsKfQpmbG9hdCBEX0JsaW5uUGhvbmcoIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcywgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5ILCBzaGluaW5lc3MgKTsKfQp2ZWMzIEJSREZfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MgKSB7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApOwoJZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTsKCXZlYzMgRiA9IEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgMS4wLCBkb3RWSCApOwoJZmxvYXQgRyA9IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKTsKCWZsb2F0IEQgPSBEX0JsaW5uUGhvbmcoIHNoaW5pbmVzcywgZG90TkggKTsKCXJldHVybiBGICogKCBHICogRCApOwp9CiNpZiBkZWZpbmVkKCBVU0VfU0hFRU4gKQpmbG9hdCBEX0NoYXJsaWUoIGZsb2F0IHJvdWdobmVzcywgZmxvYXQgZG90TkggKSB7CglmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApOwoJZmxvYXQgaW52QWxwaGEgPSAxLjAgLyBhbHBoYTsKCWZsb2F0IGNvczJoID0gZG90TkggKiBkb3ROSDsKCWZsb2F0IHNpbjJoID0gbWF4KCAxLjAgLSBjb3MyaCwgMC4wMDc4MTI1ICk7CglyZXR1cm4gKCAyLjAgKyBpbnZBbHBoYSApICogcG93KCBzaW4yaCwgaW52QWxwaGEgKiAwLjUgKSAvICggMi4wICogUEkgKTsKfQpmbG9hdCBWX05ldWJlbHQoIGZsb2F0IGRvdE5WLCBmbG9hdCBkb3ROTCApIHsKCXJldHVybiBzYXR1cmF0ZSggMS4wIC8gKCA0LjAgKiAoIGRvdE5MICsgZG90TlYgLSBkb3ROTCAqIGRvdE5WICkgKSApOwp9CnZlYzMgQlJERl9TaGVlbiggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgdmVjMyBzaGVlbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBzaGVlblJvdWdobmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApOwoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApOwoJZmxvYXQgRCA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7CglmbG9hdCBWID0gVl9OZXViZWx0KCBkb3ROViwgZG90TkwgKTsKCXJldHVybiBzaGVlbkNvbG9yICogKCBEICogViApOwp9CiNlbmRpZmAsVGZyPWAjaWZkZWYgVVNFX0JVTVBNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBNYXA7Cgl1bmlmb3JtIGZsb2F0IGJ1bXBTY2FsZTsKCXZlYzIgZEhkeHlfZndkKCkgewoJCXZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTsKCQl2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7CgkJZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54OwoJCWZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsOwoJCWZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsOwoJCXJldHVybiB2ZWMyKCBkQngsIGRCeSApOwoJfQoJdmVjMyBwZXJ0dXJiTm9ybWFsQXJiKCB2ZWMzIHN1cmZfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMiBkSGR4eSwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHsKCQl2ZWMzIHZTaWdtYVggPSB2ZWMzKCBkRmR4KCBzdXJmX3Bvcy54ICksIGRGZHgoIHN1cmZfcG9zLnkgKSwgZEZkeCggc3VyZl9wb3MueiApICk7CgkJdmVjMyB2U2lnbWFZID0gdmVjMyggZEZkeSggc3VyZl9wb3MueCApLCBkRmR5KCBzdXJmX3Bvcy55ICksIGRGZHkoIHN1cmZfcG9zLnogKSApOwoJCXZlYzMgdk4gPSBzdXJmX25vcm07CgkJdmVjMyBSMSA9IGNyb3NzKCB2U2lnbWFZLCB2TiApOwoJCXZlYzMgUjIgPSBjcm9zcyggdk4sIHZTaWdtYVggKTsKCQlmbG9hdCBmRGV0ID0gZG90KCB2U2lnbWFYLCBSMSApICogZmFjZURpcmVjdGlvbjsKCQl2ZWMzIHZHcmFkID0gc2lnbiggZkRldCApICogKCBkSGR4eS54ICogUjEgKyBkSGR4eS55ICogUjIgKTsKCQlyZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7Cgl9CiNlbmRpZmAsQ2ZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZlYzQgcGxhbmU7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJcGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdOwoJCWlmICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSBkaXNjYXJkOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1fQ0xJUFBJTkdfUExBTkVTCgkJYm9vbCBjbGlwcGVkID0gdHJ1ZTsKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBOVU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkgewoJCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJCWNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDsKCQl9CgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCQlpZiAoIGNsaXBwZWQgKSBkaXNjYXJkOwoJI2VuZGlmCiNlbmRpZmAsQWZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uOwoJdW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07CiNlbmRpZmAsUGZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uOwojZW5kaWZgLElmcj1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmYCxMZnI9YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJZGlmZnVzZUNvbG9yICo9IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkKCWRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yOwojZW5kaWZgLGtmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2YXJ5aW5nIHZlYzQgdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJdmFyeWluZyB2ZWMzIHZDb2xvcjsKI2VuZGlmYCxSZnI9YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdmFyeWluZyB2ZWMzIHZDb2xvcjsKI2VuZGlmYCxOZnI9YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdkNvbG9yID0gdmVjNCggMS4wICk7CiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SICkKCXZDb2xvciA9IHZlYzMoIDEuMCApOwojZW5kaWYKI2lmZGVmIFVTRV9DT0xPUgoJdkNvbG9yICo9IGNvbG9yOwojZW5kaWYKI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SCgl2Q29sb3IueHl6ICo9IGluc3RhbmNlQ29sb3IueHl6OwojZW5kaWZgLERmcj1gI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5MwojZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE3OTU4NgojZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ4OTY2CiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDcKI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0MzA5MTg5NTM1CiNkZWZpbmUgRVBTSUxPTiAxZS02CiNpZm5kZWYgc2F0dXJhdGUKI2RlZmluZSBzYXR1cmF0ZSggYSApIGNsYW1wKCBhLCAwLjAsIDEuMCApCiNlbmRpZgojZGVmaW5lIHdoaXRlQ29tcGxlbWVudCggYSApICggMS4wIC0gc2F0dXJhdGUoIGEgKSApCmZsb2F0IHBvdzIoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4Kng7IH0KZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9CmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH0KZmxvYXQgbWF4MyggY29uc3QgaW4gdmVjMyB2ICkgeyByZXR1cm4gbWF4KCBtYXgoIHYueCwgdi55ICksIHYueiApOyB9CmZsb2F0IGF2ZXJhZ2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7IHJldHVybiBkb3QoIGNvbG9yLCB2ZWMzKCAwLjMzMzMgKSApOyB9CmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7Cgljb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7CgloaWdocCBmbG9hdCBkdCA9IGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuID0gbW9kKCBkdCwgUEkgKTsKCXJldHVybiBmcmFjdCggc2luKCBzbiApICogYyApOwp9CiNpZmRlZiBISUdIX1BSRUNJU0lPTgoJZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkgeyByZXR1cm4gbGVuZ3RoKCB2ICk7IH0KI2Vsc2UKCWZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsKCQlmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgzKCBhYnMoIHYgKSApOwoJCXJldHVybiBsZW5ndGgoIHYgLyBtYXhDb21wb25lbnQgKSAqIG1heENvbXBvbmVudDsKCX0KI2VuZGlmCnN0cnVjdCBJbmNpZGVudExpZ2h0IHsKCXZlYzMgY29sb3I7Cgl2ZWMzIGRpcmVjdGlvbjsKCWJvb2wgdmlzaWJsZTsKfTsKc3RydWN0IFJlZmxlY3RlZExpZ2h0IHsKCXZlYzMgZGlyZWN0RGlmZnVzZTsKCXZlYzMgZGlyZWN0U3BlY3VsYXI7Cgl2ZWMzIGluZGlyZWN0RGlmZnVzZTsKCXZlYzMgaW5kaXJlY3RTcGVjdWxhcjsKfTsKc3RydWN0IEdlb21ldHJpY0NvbnRleHQgewoJdmVjMyBwb3NpdGlvbjsKCXZlYzMgbm9ybWFsOwoJdmVjMyB2aWV3RGlyOwojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdmVjMyBjbGVhcmNvYXROb3JtYWw7CiNlbmRpZgp9Owp2ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7Cn0KdmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CglyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXggKS54eXogKTsKfQptYXQzIHRyYW5zcG9zZU1hdDMoIGNvbnN0IGluIG1hdDMgbSApIHsKCW1hdDMgdG1wOwoJdG1wWyAwIF0gPSB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBdLngsIG1bIDIgXS54ICk7Cgl0bXBbIDEgXSA9IHZlYzMoIG1bIDAgXS55LCBtWyAxIF0ueSwgbVsgMiBdLnkgKTsKCXRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApOwoJcmV0dXJuIHRtcDsKfQpmbG9hdCBsaW5lYXJUb1JlbGF0aXZlTHVtaW5hbmNlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgewoJdmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApOwoJcmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7Cn0KYm9vbCBpc1BlcnNwZWN0aXZlTWF0cml4KCBtYXQ0IG0gKSB7CglyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7Cn0KdmVjMiBlcXVpcmVjdFV2KCBpbiB2ZWMzIGRpciApIHsKCWZsb2F0IHUgPSBhdGFuKCBkaXIueiwgZGlyLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41OwoJZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41OwoJcmV0dXJuIHZlYzIoIHUsIHYgKTsKfWAsT2ZyPWAjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVgoJI2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wCgkjZGVmaW5lIGN1YmVVVl9taW5NaXBMZXZlbCA0LjAKCSNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wCgkjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wCglmbG9hdCBnZXRGYWNlKCB2ZWMzIGRpcmVjdGlvbiApIHsKCQl2ZWMzIGFic0RpcmVjdGlvbiA9IGFicyggZGlyZWN0aW9uICk7CgkJZmxvYXQgZmFjZSA9IC0gMS4wOwoJCWlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueiApIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueCA+IDAuMCA/IDAuMCA6IDMuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0gZWxzZSB7CgkJCWlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApCgkJCQlmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyLjAgOiA1LjA7CgkJCWVsc2UKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDsKCQl9CgkJcmV0dXJuIGZhY2U7Cgl9Cgl2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHsKCQl2ZWMyIHV2OwoJCWlmICggZmFjZSA9PSAwLjAgKSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgLSBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfQoJCXJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7Cgl9Cgl2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkgewoJCWZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7CgkJbWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApOwoJCWZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7CgkJZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTsKCQl2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41OwoJCWlmICggZmFjZSA+IDIuMCApIHsKCQkJdXYueSArPSBmYWNlU2l6ZTsKCQkJZmFjZSAtPSAzLjA7CgkJfQoJCXV2LnggKz0gZmFjZSAqIGZhY2VTaXplOwoJCWlmICggbWlwSW50IDwgY3ViZVVWX21heE1pcExldmVsICkgewoJCQl1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTsKCQl9CgkJdXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7CgkJdXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTsKCQl1diAqPSB0ZXhlbFNpemU7CgkJcmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjsKCX0KCSNkZWZpbmUgcjAgMS4wCgkjZGVmaW5lIHYwIDAuMzM5CgkjZGVmaW5lIG0wIC0gMi4wCgkjZGVmaW5lIHIxIDAuOAoJI2RlZmluZSB2MSAwLjI3NgoJI2RlZmluZSBtMSAtIDEuMAoJI2RlZmluZSByNCAwLjQKCSNkZWZpbmUgdjQgMC4wNDYKCSNkZWZpbmUgbTQgMi4wCgkjZGVmaW5lIHI1IDAuMzA1CgkjZGVmaW5lIHY1IDAuMDE2CgkjZGVmaW5lIG01IDMuMAoJI2RlZmluZSByNiAwLjIxCgkjZGVmaW5lIHY2IDAuMDAzOAoJI2RlZmluZSBtNiA0LjAKCWZsb2F0IHJvdWdobmVzc1RvTWlwKCBmbG9hdCByb3VnaG5lc3MgKSB7CgkJZmxvYXQgbWlwID0gMC4wOwoJCWlmICggcm91Z2huZXNzID49IHIxICkgewoJCQltaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkgewoJCQltaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkgewoJCQltaXAgPSAoIHI0IC0gcm91Z2huZXNzICkgKiAoIG01IC0gbTQgKSAvICggcjQgLSByNSApICsgbTQ7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI2ICkgewoJCQltaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7CgkJfSBlbHNlIHsKCQkJbWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7CQl9CgkJcmV0dXJuIG1pcDsKCX0KCXZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7CgkJZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTsKCQlmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7CgkJdmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApOwoJCWlmICggbWlwRiA9PSAwLjAgKSB7CgkJCXJldHVybiB2ZWM0KCBjb2xvcjAsIDEuMCApOwoJCX0gZWxzZSB7CgkJCXZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTsKCQkJcmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7CgkJfQoJfQojZW5kaWZgLHpmcj1gdmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCA9IG9iamVjdE5vcm1hbDsKI2lmZGVmIFVTRV9JTlNUQU5DSU5HCgltYXQzIG0gPSBtYXQzKCBpbnN0YW5jZU1hdHJpeCApOwoJdHJhbnNmb3JtZWROb3JtYWwgLz0gdmVjMyggZG90KCBtWyAwIF0sIG1bIDAgXSApLCBkb3QoIG1bIDEgXSwgbVsgMSBdICksIGRvdCggbVsgMiBdLCBtWyAyIF0gKSApOwoJdHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgp0cmFuc2Zvcm1lZE5vcm1hbCA9IG5vcm1hbE1hdHJpeCAqIHRyYW5zZm9ybWVkTm9ybWFsOwojaWZkZWYgRkxJUF9TSURFRAoJdHJhbnNmb3JtZWROb3JtYWwgPSAtIHRyYW5zZm9ybWVkTm9ybWFsOwojZW5kaWYKI2lmZGVmIFVTRV9UQU5HRU5UCgl2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7CgkjaWZkZWYgRkxJUF9TSURFRAoJCXRyYW5zZm9ybWVkVGFuZ2VudCA9IC0gdHJhbnNmb3JtZWRUYW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsRmZyPWAjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwOwoJdW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTsKCXVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50QmlhczsKI2VuZGlmYCxCZnI9YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApOwojZW5kaWZgLEhmcj1gI2lmZGVmIFVTRV9FTUlTU0lWRU1BUAoJdmVjNCBlbWlzc2l2ZUNvbG9yID0gdGV4dHVyZTJEKCBlbWlzc2l2ZU1hcCwgdlV2ICk7Cgl0b3RhbEVtaXNzaXZlUmFkaWFuY2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7CiNlbmRpZmAsVmZyPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDsKI2VuZGlmYCxVZnI9ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIscWZyPWB2ZWM0IExpbmVhclRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkgewoJcmV0dXJuIHZhbHVlOwp9CnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkgewoJcmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzKCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUuYSApOwp9YCxHZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdmVjMyBjYW1lcmFUb0ZyYWc7CgkJaWYgKCBpc09ydGhvZ3JhcGhpYyApIHsKCQkJY2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTsKCQl9IGVsc2UgewoJCQljYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZXb3JsZFBvc2l0aW9uIC0gY2FtZXJhUG9zaXRpb24gKTsKCQl9CgkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCXZlYzMgcmVmbGVjdFZlYyA9IHJlZmxlY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwgKTsKCQkjZWxzZQoJCQl2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTsKCQkjZW5kaWYKCSNlbHNlCgkJdmVjMyByZWZsZWN0VmVjID0gdlJlZmxlY3Q7CgkjZW5kaWYKCSNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFCgkJdmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJdmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgMC4wICk7CgkjZWxzZQoJCXZlYzQgZW52Q29sb3IgPSB2ZWM0KCAwLjAgKTsKCSNlbmRpZgoJI2lmZGVmIEVOVk1BUF9CTEVORElOR19NVUxUSVBMWQoJCW91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIG91dGdvaW5nTGlnaHQgKiBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19NSVggKQoJCW91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApCgkJb3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5OwoJI2VuZGlmCiNlbmRpZmAsV2ZyPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7Cgl1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7CgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwOwoJI2Vsc2UKCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkjZW5kaWYKCQojZW5kaWZgLFlmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCXVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5OwoJI2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HICkKCQkjZGVmaW5lIEVOVl9XT1JMRFBPUwoJI2VuZGlmCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7CgkjZW5kaWYKI2VuZGlmYCxqZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApCgkJI2RlZmluZSBFTlZfV09STERQT1MKCSNlbmRpZgoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCQoJCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCSNlbHNlCgkJdmFyeWluZyB2ZWMzIHZSZWZsZWN0OwoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCiNlbmRpZmAsWGZyPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7CgkjZWxzZQoJCXZlYzMgY2FtZXJhVG9WZXJ0ZXg7CgkJaWYgKCBpc09ydGhvZ3JhcGhpYyApIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApOwoJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCXZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdlJlZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsJGZyPWAjaWZkZWYgVVNFX0ZPRwoJdkZvZ0RlcHRoID0gLSBtdlBvc2l0aW9uLno7CiNlbmRpZmAsS2ZyPWAjaWZkZWYgVVNFX0ZPRwoJdmFyeWluZyBmbG9hdCB2Rm9nRGVwdGg7CiNlbmRpZmAsWmZyPWAjaWZkZWYgVVNFX0ZPRwoJI2lmZGVmIEZPR19FWFAyCgkJZmxvYXQgZm9nRmFjdG9yID0gMS4wIC0gZXhwKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogdkZvZ0RlcHRoICogdkZvZ0RlcHRoICk7CgkjZWxzZQoJCWZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7CgkjZW5kaWYKCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTsKI2VuZGlmYCxKZnI9YCNpZmRlZiBVU0VfRk9HCgl1bmlmb3JtIHZlYzMgZm9nQ29sb3I7Cgl2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDsKCSNpZmRlZiBGT0dfRVhQMgoJCXVuaWZvcm0gZmxvYXQgZm9nRGVuc2l0eTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBmb2dOZWFyOwoJCXVuaWZvcm0gZmxvYXQgZm9nRmFyOwoJI2VuZGlmCiNlbmRpZmAsUWZyPWAjaWZkZWYgVVNFX0dSQURJRU5UTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDsKI2VuZGlmCnZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHsKCWZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7Cgl2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApOwoJI2lmZGVmIFVTRV9HUkFESUVOVE1BUAoJCXJldHVybiB2ZWMzKCB0ZXh0dXJlMkQoIGdyYWRpZW50TWFwLCBjb29yZCApLnIgKTsKCSNlbHNlCgkJcmV0dXJuICggY29vcmQueCA8IDAuNyApID8gdmVjMyggMC43ICkgOiB2ZWMzKCAxLjAgKTsKCSNlbmRpZgp9YCx0cHI9YCNpZmRlZiBVU0VfTElHSFRNQVAKCXZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTsKCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCWxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTsKI2VuZGlmYCxlcHI9YCNpZmRlZiBVU0VfTElHSFRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0TWFwOwoJdW5pZm9ybSBmbG9hdCBsaWdodE1hcEludGVuc2l0eTsKI2VuZGlmYCxycHI9YHZlYzMgZGlmZnVzZSA9IHZlYzMoIDEuMCApOwpHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5OwpnZW9tZXRyeS5wb3NpdGlvbiA9IG12UG9zaXRpb24ueHl6OwpnZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7Cmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApOwpHZW9tZXRyaWNDb250ZXh0IGJhY2tHZW9tZXRyeTsKYmFja0dlb21ldHJ5LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsOwpiYWNrR2VvbWV0cnkudmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7CnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7CnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTsKCXZJbmRpcmVjdEJhY2sgPSB2ZWMzKCAwLjAgKTsKI2VuZGlmCkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7CmZsb2F0IGRvdE5MOwp2ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKdkluZGlyZWN0RnJvbnQgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKdkluZGlyZWN0RnJvbnQgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApOwojaWZkZWYgRE9VQkxFX1NJREVECgl2SW5kaXJlY3RCYWNrICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7Cgl2SW5kaXJlY3RCYWNrICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBiYWNrR2VvbWV0cnkubm9ybWFsICk7CiNlbmRpZgojaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX0RJUl9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHsKCQlnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHsKCQl2SW5kaXJlY3RGcm9udCArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5Lm5vcm1hbCApOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkluZGlyZWN0QmFjayArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZmAsbnByPWB1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdzsKdW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdodENvbG9yOwp1bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdOwp2ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkgewoJZmxvYXQgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejsKCXZlYzMgcmVzdWx0ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApOwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApOwoJcmV0dXJuIHJlc3VsdDsKfQp2ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7Cgl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBzaEdldElycmFkaWFuY2VBdCggd29ybGROb3JtYWwsIGxpZ2h0UHJvYmUgKTsKCXJldHVybiBpcnJhZGlhbmNlOwp9CnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGFtYmllbnRMaWdodENvbG9yOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KZmxvYXQgZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7CgkjaWYgZGVmaW5lZCAoIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMgKQoJCWZsb2F0IGRpc3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heCggcG93KCBsaWdodERpc3RhbmNlLCBkZWNheUV4cG9uZW50ICksIDAuMDEgKTsKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICkgewoJCQlkaXN0YW5jZUZhbGxvZmYgKj0gcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTsKCQl9CgkJcmV0dXJuIGRpc3RhbmNlRmFsbG9mZjsKCSNlbHNlCgkJaWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkgewoJCQlyZXR1cm4gcG93KCBzYXR1cmF0ZSggLSBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApOwoJCX0KCQlyZXR1cm4gMS4wOwoJI2VuZGlmCn0KZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7CglyZXR1cm4gc21vb3Roc3RlcCggY29uZUNvc2luZSwgcGVudW1icmFDb3NpbmUsIGFuZ2xlQ29zaW5lICk7Cn0KI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJc3RydWN0IERpcmVjdGlvbmFsTGlnaHQgewoJCXZlYzMgZGlyZWN0aW9uOwoJCXZlYzMgY29sb3I7Cgl9OwoJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdOwoJdm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQlsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7CgkJbGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247CgkJbGlnaHQudmlzaWJsZSA9IHRydWU7Cgl9CiNlbmRpZgojaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDAKCXN0cnVjdCBQb2ludExpZ2h0IHsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgY29sb3I7CgkJZmxvYXQgZGlzdGFuY2U7CgkJZmxvYXQgZGVjYXk7Cgl9OwoJdW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07Cgl2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJbGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yOwoJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTsKCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJfQojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCXN0cnVjdCBTcG90TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCQlmbG9hdCBjb25lQ29zOwoJCWZsb2F0IHBlbnVtYnJhQ29zOwoJfTsKCXVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdOwoJdm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQl2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApOwoJCWlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkgewoJCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJCWxpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yICogc3BvdEF0dGVudWF0aW9uOwoJCQlsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApOwoJCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJCX0gZWxzZSB7CgkJCWxpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7CgkJCWxpZ2h0LnZpc2libGUgPSBmYWxzZTsKCQl9Cgl9CiNlbmRpZgojaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwCglzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7CgkJdmVjMyBjb2xvcjsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgaGFsZldpZHRoOwoJCXZlYzMgaGFsZkhlaWdodDsKCX07Cgl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTsJdW5pZm9ybSBzYW1wbGVyMkQgbHRjXzI7Cgl1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07CiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJc3RydWN0IEhlbWlzcGhlcmVMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBza3lDb2xvcjsKCQl2ZWMzIGdyb3VuZENvbG9yOwoJfTsKCXVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdOwoJdmVjMyBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCQlmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTsKCQl2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApOwoJCXJldHVybiBpcnJhZGlhbmNlOwoJfQojZW5kaWZgLGlwcj1gI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKQoJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRlJBQ1RJT04KCQl1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbzsKCSNlbmRpZgoJdmVjMyBnZXRJQkxJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCQkjaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgd29ybGROb3JtYWwsIDEuMCApOwoJCQlyZXR1cm4gUEkgKiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQoJdmVjMyBnZXRJQkxSYWRpYW5jZSggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyByZWZsZWN0VmVjOwoJCQkjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTgoJCQkJcmVmbGVjdFZlYyA9IHJlZmxlY3QoIC0gdmlld0Rpciwgbm9ybWFsICk7CgkJCQlyZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApOwoJCQkjZWxzZQoJCQkJcmVmbGVjdFZlYyA9IHJlZnJhY3QoIC0gdmlld0Rpciwgbm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTsKCQkJI2VuZGlmCgkJCXJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7CgkJCXZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApOwoJCQlyZXR1cm4gZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5OwoJCSNlbHNlCgkJCXJldHVybiB2ZWMzKCAwLjAgKTsKCQkjZW5kaWYKCX0KI2VuZGlmYCxvcHI9YFRvb25NYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtgLGFwcj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBUb29uTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cn07CnZvaWQgUkVfRGlyZWN0X1Rvb24oIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbiggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9Ub29uCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbgojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCxzcHI9YEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjsKbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IHNwZWN1bGFyOwptYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyA9IHNoaW5pbmVzczsKbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7YCxscHI9YHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwpzdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7CglmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwp9Owp2b2lkIFJFX0RpcmVjdF9CbGlublBob25nKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X0JsaW5uUGhvbmcKI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nCiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKQkoMClgLGNwcj1gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7CnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTsKZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1heCggcm91Z2huZXNzRmFjdG9yLCAwLjA1MjUgKTttYXRlcmlhbC5yb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwucm91Z2huZXNzLCAxLjAgKTsKI2lmZGVmIElPUgoJI2lmZGVmIFNQRUNVTEFSCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSBzcGVjdWxhckludGVuc2l0eTsKCQl2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSBzcGVjdWxhckNvbG9yOwoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAKCQkJc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTsKCQkjZW5kaWYKCQkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQkJc3BlY3VsYXJDb2xvckZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFyQ29sb3JNYXAsIHZVdiApLnJnYjsKCQkjZW5kaWYKCQltYXRlcmlhbC5zcGVjdWxhckY5MCA9IG1peCggc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIDEuMCwgbWV0YWxuZXNzRmFjdG9yICk7CgkjZWxzZQoJCWZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wOwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApOwoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwoJI2VuZGlmCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCBtaW4oIHBvdzIoICggaW9yIC0gMS4wICkgLyAoIGlvciArIDEuMCApICkgKiBzcGVjdWxhckNvbG9yRmFjdG9yLCB2ZWMzKCAxLjAgKSApICogc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwojZWxzZQoJbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggdmVjMyggMC4wNCApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTsKCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCW1hdGVyaWFsLmNsZWFyY29hdCA9IGNsZWFyY29hdDsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdEYwID0gdmVjMyggMC4wNCApOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjkwID0gMS4wOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCQltYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7CgkjZW5kaWYKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdFJvdWdobmVzc01hcCwgdlV2ICkueTsKCSNlbmRpZgoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApOwltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX1NIRUVOCgltYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW5Db2xvcjsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCW1hdGVyaWFsLnNoZWVuQ29sb3IgKj0gdGV4dHVyZTJEKCBzaGVlbkNvbG9yTWFwLCB2VXYgKS5yZ2I7CgkjZW5kaWYKCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gY2xhbXAoIHNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTsKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQltYXRlcmlhbC5zaGVlblJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIHNoZWVuUm91Z2huZXNzTWFwLCB2VXYgKS5hOwoJI2VuZGlmCiNlbmRpZmAsdXByPWBzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKCWZsb2F0IHJvdWdobmVzczsKCXZlYzMgc3BlY3VsYXJDb2xvcjsKCWZsb2F0IHNwZWN1bGFyRjkwOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQlmbG9hdCBjbGVhcmNvYXQ7CgkJZmxvYXQgY2xlYXJjb2F0Um91Z2huZXNzOwoJCXZlYzMgY2xlYXJjb2F0RjA7CgkJZmxvYXQgY2xlYXJjb2F0RjkwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJdmVjMyBzaGVlbkNvbG9yOwoJCWZsb2F0IHNoZWVuUm91Z2huZXNzOwoJI2VuZGlmCn07CnZlYzMgY2xlYXJjb2F0U3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKdmVjMyBzaGVlblNwZWN1bGFyID0gdmVjMyggMC4wICk7CmZsb2F0IElCTFNoZWVuQlJERiggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzKSB7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCByMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzczsKCWZsb2F0IGEgPSByb3VnaG5lc3MgPCAwLjI1ID8gLTMzOS4yICogcjIgKyAxNjEuNCAqIHJvdWdobmVzcyAtIDI1LjkgOiAtOC40OCAqIHIyICsgMTQuMyAqIHJvdWdobmVzcyAtIDkuOTU7CglmbG9hdCBiID0gcm91Z2huZXNzIDwgMC4yNSA/IDQ0LjAgKiByMiAtIDIzLjcgKiByb3VnaG5lc3MgKyAzLjI2IDogMS45NyAqIHIyIC0gMy4yNyAqIHJvdWdobmVzcyArIDAuNzI7CglmbG9hdCBERyA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTsKCXJldHVybiBzYXR1cmF0ZSggREcgKiBSRUNJUFJPQ0FMX1BJICk7Cn0KdmVjMiBERkdBcHByb3goIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWNvbnN0IHZlYzQgYzAgPSB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApOwoJY29uc3QgdmVjNCBjMSA9IHZlYzQoIDEsIDAuMDQyNSwgMS4wNCwgLSAwLjA0ICk7Cgl2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxOwoJZmxvYXQgYTAwNCA9IG1pbiggci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViApICkgKiByLnggKyByLnk7Cgl2ZWMyIGZhYiA9IHZlYzIoIC0gMS4wNCwgMS4wNCApICogYTAwNCArIHIuenc7CglyZXR1cm4gZmFiOwp9CnZlYzMgRW52aXJvbm1lbnRCUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXJldHVybiBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55Owp9CnZvaWQgY29tcHV0ZU11bHRpc2NhdHRlcmluZyggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBpbm91dCB2ZWMzIHNpbmdsZVNjYXR0ZXIsIGlub3V0IHZlYzMgbXVsdGlTY2F0dGVyICkgewoJdmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7Cgl2ZWMzIEZzc0VzcyA9IHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7CglmbG9hdCBFc3MgPSBmYWIueCArIGZhYi55OwoJZmxvYXQgRW1zID0gMS4wIC0gRXNzOwoJdmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7CXZlYzMgRm1zID0gRnNzRXNzICogRmF2ZyAvICggMS4wIC0gRW1zICogRmF2ZyApOwoJc2luZ2xlU2NhdHRlciArPSBGc3NFc3M7CgltdWx0aVNjYXR0ZXIgKz0gRm1zICogRW1zOwp9CiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAKCXZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJCXZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsOwoJCXZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7CgkJdmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uOwoJCXZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uOwoJCXZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7CgkJdmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0OwoJCXZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7CgkJZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwucm91Z2huZXNzOwoJCXZlYzMgcmVjdENvb3Jkc1sgNCBdOwoJCXJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDsJCXJlY3RDb29yZHNbIDEgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoIC0gaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAyIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJcmVjdENvb3Jkc1sgMyBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0OwoJCXZlYzIgdXYgPSBMVENfVXYoIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7CgkJdmVjNCB0MSA9IHRleHR1cmUyRCggbHRjXzEsIHV2ICk7CgkJdmVjNCB0MiA9IHRleHR1cmUyRCggbHRjXzIsIHV2ICk7CgkJbWF0MyBtSW52ID0gbWF0MygKCQkJdmVjMyggdDEueCwgMCwgdDEueSApLAoJCQl2ZWMzKCAgICAwLCAxLCAgICAwICksCgkJCXZlYzMoIHQxLnosIDAsIHQxLncgKQoJCSk7CgkJdmVjMyBmcmVzbmVsID0gKCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICogdDIueCArICggdmVjMyggMS4wICkgLSBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICkgKiB0Mi55ICk7CgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gbGlnaHRDb2xvciAqIGZyZXNuZWwgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1JbnYsIHJlY3RDb29yZHMgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGxpZ2h0Q29sb3IgKiBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1hdDMoIDEuMCApLCByZWN0Q29vcmRzICk7Cgl9CiNlbmRpZgp2b2lkIFJFX0RpcmVjdF9QaHlzaWNhbCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5MY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7CgkJdmVjMyBjY0lycmFkaWFuY2UgPSBkb3ROTGNjICogZGlyZWN0TGlnaHQuY29sb3I7CgkJY2xlYXJjb2F0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgoJI2lmZGVmIFVTRV9TSEVFTgoJCXNoZWVuU3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfU2hlZW4oIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zaGVlbkNvbG9yLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzICk7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CnZvaWQgUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGNsZWFyY29hdFJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCkgewoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIEVudmlyb25tZW50QlJERiggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgoJI2lmZGVmIFVTRV9TSEVFTgoJCXNoZWVuU3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIG1hdGVyaWFsLnNoZWVuQ29sb3IgKiBJQkxTaGVlbkJSREYoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTsKCSNlbmRpZgoJdmVjMyBzaW5nbGVTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIG11bHRpU2NhdHRlcmluZyA9IHZlYzMoIDAuMCApOwoJdmVjMyBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2UgPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTsKCWNvbXB1dGVNdWx0aXNjYXR0ZXJpbmcoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLnJvdWdobmVzcywgc2luZ2xlU2NhdHRlcmluZywgbXVsdGlTY2F0dGVyaW5nICk7Cgl2ZWMzIGRpZmZ1c2UgPSBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiAoIDEuMCAtICggc2luZ2xlU2NhdHRlcmluZyArIG11bHRpU2NhdHRlcmluZyApICk7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZzsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gbXVsdGlTY2F0dGVyaW5nICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGRpZmZ1c2UgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X1BoeXNpY2FsCiNkZWZpbmUgUkVfRGlyZWN0X1JlY3RBcmVhCQlSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwKI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0U3BlY3VsYXIJCVJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwKZmxvYXQgY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29uc3QgaW4gZmxvYXQgYW1iaWVudE9jY2x1c2lvbiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJcmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTsKfWAsaHByPWAKR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTsKZ2VvbWV0cnkucG9zaXRpb24gPSAtIHZWaWV3UG9zaXRpb247Cmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbDsKZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwojaWZkZWYgVVNFX0NMRUFSQ09BVAoJZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsOwojZW5kaWYKSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDsKI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJUG9pbnRMaWdodCBwb2ludExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCVBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHsKCQlwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTsKCQlnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApCgkJcG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJU3BvdExpZ2h0IHNwb3RMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCVNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHsKCQlzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07CgkJZ2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKQoJCXNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCglEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkgewoJCWRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdOwoJCWdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApCgkJZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKQoJUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7CgkJcmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07CgkJUkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCgl2ZWMzIGlibElycmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7CglpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTsKCSNpZiAoIE5VTV9IRU1JX0xJR0hUUyA+IDAgKQoJCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7CgkJCWlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTsKCQl9CgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJdmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApOwoJdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSA9IHZlYzMoIDAuMCApOwojZW5kaWZgLGZwcj1gI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCQkjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMKCQkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJCSNlbmRpZgoJCWlycmFkaWFuY2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwoJI2VuZGlmCgkjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJaWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTsKCSNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQljbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgojZW5kaWZgLHBwcj1gI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCglSRV9JbmRpcmVjdERpZmZ1c2UoIGlycmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCVJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWZgLGRwcj1gI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKQoJZ2xfRnJhZ0RlcHRoRVhUID0gdklzUGVyc3BlY3RpdmUgPT0gMC4wID8gZ2xfRnJhZ0Nvb3JkLnogOiBsb2cyKCB2RnJhZ0RlcHRoICkgKiBsb2dEZXB0aEJ1ZkZDICogMC41OwojZW5kaWZgLG1wcj1gI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKQoJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJdmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoOwoJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKI2VuZGlmYCxncHI9YCNpZmRlZiBVU0VfTE9HREVQVEhCVUYKCSNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUCgkJdmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoOwoJCXZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7CgkjZWxzZQoJCXVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQzsKCSNlbmRpZgojZW5kaWZgLF9wcj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2RnJhZ0RlcHRoID0gMS4wICsgZ2xfUG9zaXRpb24udzsKCQl2SXNQZXJzcGVjdGl2ZSA9IGZsb2F0KCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKTsKCSNlbHNlCgkJaWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7CgkJCWdsX1Bvc2l0aW9uLnogPSBsb2cyKCBtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSApICogbG9nRGVwdGhCdWZGQyAtIDEuMDsKCQkJZ2xfUG9zaXRpb24ueiAqPSBnbF9Qb3NpdGlvbi53OwoJCX0KCSNlbmRpZgojZW5kaWZgLHlwcj1gI2lmZGVmIFVTRV9NQVAKCXZlYzQgc2FtcGxlZERpZmZ1c2VDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTsKCSNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRQoJCXNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApOwoJI2VuZGlmCglkaWZmdXNlQ29sb3IgKj0gc2FtcGxlZERpZmZ1c2VDb2xvcjsKI2VuZGlmYCx2cHI9YCNpZmRlZiBVU0VfTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtYXA7CiNlbmRpZmAseHByPWAjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApCgl2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTsKI2VuZGlmCiNpZmRlZiBVU0VfTUFQCglkaWZmdXNlQ29sb3IgKj0gdGV4dHVyZTJEKCBtYXAsIHV2ICk7CiNlbmRpZgojaWZkZWYgVVNFX0FMUEhBTUFQCglkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB1diApLmc7CiNlbmRpZmAsYnByPWAjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWFwOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsd3ByPWBmbG9hdCBtZXRhbG5lc3NGYWN0b3IgPSBtZXRhbG5lc3M7CiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQCgl2ZWM0IHRleGVsTWV0YWxuZXNzID0gdGV4dHVyZTJEKCBtZXRhbG5lc3NNYXAsIHZVdiApOwoJbWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7CiNlbmRpZmAsU3ByPWAjaWZkZWYgVVNFX01FVEFMTkVTU01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwOwojZW5kaWZgLE1wcj1gI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMKCW9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgb2JqZWN0Tm9ybWFsICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMSwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJfQoJI2Vsc2UKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07CgkjZW5kaWYKI2VuZGlmYCxFcHI9YCNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTCgl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBNT1JQSFRBUkdFVFNfQ09VTlQgXTsKCQl1bmlmb3JtIHNhbXBsZXIyREFycmF5IG1vcnBoVGFyZ2V0c1RleHR1cmU7CgkJdW5pZm9ybSB2ZWMyIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplOwoJCXZlYzMgZ2V0TW9ycGgoIGNvbnN0IGluIGludCB2ZXJ0ZXhJbmRleCwgY29uc3QgaW4gaW50IG1vcnBoVGFyZ2V0SW5kZXgsIGNvbnN0IGluIGludCBvZmZzZXQsIGNvbnN0IGluIGludCBzdHJpZGUgKSB7CgkJCWZsb2F0IHRleGVsSW5kZXggPSBmbG9hdCggdmVydGV4SW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKTsKCQkJZmxvYXQgeSA9IGZsb29yKCB0ZXhlbEluZGV4IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCApOwoJCQlmbG9hdCB4ID0gdGV4ZWxJbmRleCAtIHkgKiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54OwoJCQl2ZWMzIG1vcnBoVVYgPSB2ZWMzKCAoIHggKyAwLjUgKSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLngsIHkgLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS55LCBtb3JwaFRhcmdldEluZGV4ICk7CgkJCXJldHVybiB0ZXh0dXJlKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWICkueHl6OwoJCX0KCSNlbHNlCgkJI2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTCgkJCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07CgkJI2Vsc2UKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTsKCQkjZW5kaWYKCSNlbmRpZgojZW5kaWZgLFRwcj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCWZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHsKCQkJI2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTCgkJCQlpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMSApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJCSNlbHNlCgkJCQlpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJCSNlbmRpZgoJCX0KCSNlbHNlCgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07CgkJI2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTCgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDUgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDUgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ2ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA2IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsQ3ByPWBmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDsKI2lmZGVmIEZMQVRfU0hBREVECgl2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTsKCXZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7CiNlbHNlCgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApOwoJI2lmZGVmIERPVUJMRV9TSURFRAoJCW5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZlYzMgdGFuZ2VudCA9IG5vcm1hbGl6ZSggdlRhbmdlbnQgKTsKCQl2ZWMzIGJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggdkJpdGFuZ2VudCApOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCQliaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCSNlbmRpZgoJCSNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKQoJCQltYXQzIHZUQk4gPSBtYXQzKCB0YW5nZW50LCBiaXRhbmdlbnQsIG5vcm1hbCApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZgp2ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsO2AsQXByPWAjaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQCglub3JtYWwgPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJI2lmZGVmIEZMSVBfU0lERUQKCQlub3JtYWwgPSAtIG5vcm1hbDsKCSNlbmRpZgoJI2lmZGVmIERPVUJMRV9TSURFRAoJCW5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247CgkjZW5kaWYKCW5vcm1hbCA9IG5vcm1hbGl6ZSggbm9ybWFsTWF0cml4ICogbm9ybWFsICk7CiNlbGlmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmVjMyBtYXBOID0gdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDsKCW1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQlub3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBtYXBOICk7CgkjZWxzZQoJCW5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIG5vcm1hbCwgbWFwTiwgZmFjZURpcmVjdGlvbiApOwoJI2VuZGlmCiNlbGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkKCW5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApOwojZW5kaWZgLFBwcj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7CgkJdmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxJcHI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsTHByPWAjaWZuZGVmIEZMQVRfU0hBREVECgl2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdlRhbmdlbnQgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkVGFuZ2VudCApOwoJCXZCaXRhbmdlbnQgPSBub3JtYWxpemUoIGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogdGFuZ2VudC53ICk7CgkjZW5kaWYKI2VuZGlmYCxrcHI9YCNpZmRlZiBVU0VfTk9STUFMTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7Cgl1bmlmb3JtIHZlYzIgbm9ybWFsU2NhbGU7CiNlbmRpZgojaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQCgl1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OwojZW5kaWYKI2lmICEgZGVmaW5lZCAoIFVTRV9UQU5HRU5UICkgJiYgKCBkZWZpbmVkICggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQgKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApICkKCXZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHsKCQl2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApOwoJCXZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7CgkJdmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTsKCQl2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApOwoJCXZlYzMgTiA9IHN1cmZfbm9ybTsKCQl2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApOwoJCXZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7CgkJdmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDsKCQl2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55OwoJCWZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7CgkJZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7Cgl9CiNlbmRpZmAsUnByPWAjaWZkZWYgVVNFX0NMRUFSQ09BVAoJdmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDsKI2VuZGlmYCxOcHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUAoJdmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDsKCWNsZWFyY29hdE1hcE4ueHkgKj0gY2xlYXJjb2F0Tm9ybWFsU2NhbGU7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQljbGVhcmNvYXROb3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBjbGVhcmNvYXRNYXBOICk7CgkjZWxzZQoJCWNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApOwoJI2VuZGlmCiNlbmRpZmAsRHByPWAjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0TWFwOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRSb3VnaG5lc3NNYXA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDsKCXVuaWZvcm0gdmVjMiBjbGVhcmNvYXROb3JtYWxTY2FsZTsKI2VuZGlmYCxPcHI9YCNpZmRlZiBPUEFRVUUKZGlmZnVzZUNvbG9yLmEgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgpkaWZmdXNlQ29sb3IuYSAqPSB0cmFuc21pc3Npb25BbHBoYSArIDAuMTsKI2VuZGlmCmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7YCx6cHI9YHZlYzMgcGFja05vcm1hbFRvUkdCKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCXJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41Owp9CnZlYzMgdW5wYWNrUkdCVG9Ob3JtYWwoIGNvbnN0IGluIHZlYzMgcmdiICkgewoJcmV0dXJuIDIuMCAqIHJnYi54eXogLSAxLjA7Cn0KY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjsKY29uc3QgdmVjMyBQYWNrRmFjdG9ycyA9IHZlYzMoIDI1Ni4gKiAyNTYuICogMjU2LiwgMjU2LiAqIDI1Ni4sIDI1Ni4gKTsKY29uc3QgdmVjNCBVbnBhY2tGYWN0b3JzID0gVW5wYWNrRG93bnNjYWxlIC8gdmVjNCggUGFja0ZhY3RvcnMsIDEuICk7CmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuOwp2ZWM0IHBhY2tEZXB0aFRvUkdCQSggY29uc3QgaW4gZmxvYXQgdiApIHsKCXZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApOwoJci55encgLT0gci54eXogKiBTaGlmdFJpZ2h0ODsJcmV0dXJuIHIgKiBQYWNrVXBzY2FsZTsKfQpmbG9hdCB1bnBhY2tSR0JBVG9EZXB0aCggY29uc3QgaW4gdmVjNCB2ICkgewoJcmV0dXJuIGRvdCggdiwgVW5wYWNrRmFjdG9ycyApOwp9CnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7Cgl2ZWM0IHIgPSB2ZWM0KCB2LngsIGZyYWN0KCB2LnggKiAyNTUuMCApLCB2LnksIGZyYWN0KCB2LnkgKiAyNTUuMCApICk7CglyZXR1cm4gdmVjNCggci54IC0gci55IC8gMjU1LjAsIHIueSwgci56IC0gci53IC8gMjU1LjAsIHIudyApOwp9CnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHsKCXJldHVybiB2ZWMyKCB2LnggKyAoIHYueSAvIDI1NS4wICksIHYueiArICggdi53IC8gMjU1LjAgKSApOwp9CmZsb2F0IHZpZXdaVG9PcnRob2dyYXBoaWNEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7Cn0KZmxvYXQgb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBsaW5lYXJDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuIGxpbmVhckNsaXBaICogKCBuZWFyIC0gZmFyICkgLSBuZWFyOwp9CmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggKCBuZWFyICsgdmlld1ogKSAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIHZpZXdaICk7Cn0KZmxvYXQgcGVyc3BlY3RpdmVEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGludkNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTsKfWAsRnByPWAjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQQoJZ2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTsKI2VuZGlmYCxCcHI9YHZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKI2lmZGVmIFVTRV9JTlNUQU5DSU5HCgltdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uOwojZW5kaWYKbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247CmdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247YCxIcHI9YCNpZmRlZiBESVRIRVJJTkcKCWdsX0ZyYWdDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTsKI2VuZGlmYCxWcHI9YCNpZmRlZiBESVRIRVJJTkcKCXZlYzMgZGl0aGVyaW5nKCB2ZWMzIGNvbG9yICkgewoJCWZsb2F0IGdyaWRfcG9zaXRpb24gPSByYW5kKCBnbF9GcmFnQ29vcmQueHkgKTsKCQl2ZWMzIGRpdGhlcl9zaGlmdF9SR0IgPSB2ZWMzKCAwLjI1IC8gMjU1LjAsIC0wLjI1IC8gMjU1LjAsIDAuMjUgLyAyNTUuMCApOwoJCWRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7CgkJcmV0dXJuIGNvbG9yICsgZGl0aGVyX3NoaWZ0X1JHQjsKCX0KI2VuZGlmYCxVcHI9YGZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzczsKI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7Cglyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZzsKI2VuZGlmYCxxcHI9YCNpZmRlZiBVU0VfUk9VR0hORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7CiNlbmRpZmAsR3ByPWAjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgc3BvdFNoYWRvd01hcFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7CgkJCWZsb2F0IHNoYWRvd0NhbWVyYUZhcjsKCQl9OwoJCXVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJZmxvYXQgdGV4dHVyZTJEQ29tcGFyZSggc2FtcGxlcjJEIGRlcHRocywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApIHsKCQlyZXR1cm4gc3RlcCggY29tcGFyZSwgdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggZGVwdGhzLCB1diApICkgKTsKCX0KCXZlYzIgdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2ICkgewoJCXJldHVybiB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3csIHV2ICkgKTsKCX0KCWZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApewoJCWZsb2F0IG9jY2x1c2lvbiA9IDEuMDsKCQl2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApOwoJCWZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7CgkJaWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHsKCQkJZmxvYXQgZGlzdGFuY2UgPSBjb21wYXJlIC0gZGlzdHJpYnV0aW9uLnggOwoJCQlmbG9hdCB2YXJpYW5jZSA9IG1heCggMC4wMDAwMCwgZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSApOwoJCQlmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApOwkJCXNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApOwkJCW9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApOwoJCX0KCQlyZXR1cm4gb2NjbHVzaW9uOwoJfQoJZmxvYXQgZ2V0U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCApIHsKCQlmbG9hdCBzaGFkb3cgPSAxLjA7CgkJc2hhZG93Q29vcmQueHl6IC89IHNoYWRvd0Nvb3JkLnc7CgkJc2hhZG93Q29vcmQueiArPSBzaGFkb3dCaWFzOwoJCWJ2ZWM0IGluRnJ1c3R1bVZlYyA9IGJ2ZWM0ICggc2hhZG93Q29vcmQueCA+PSAwLjAsIHNoYWRvd0Nvb3JkLnggPD0gMS4wLCBzaGFkb3dDb29yZC55ID49IDAuMCwgc2hhZG93Q29vcmQueSA8PSAxLjAgKTsKCQlib29sIGluRnJ1c3R1bSA9IGFsbCggaW5GcnVzdHVtVmVjICk7CgkJYnZlYzIgZnJ1c3R1bVRlc3RWZWMgPSBidmVjMiggaW5GcnVzdHVtLCBzaGFkb3dDb29yZC56IDw9IDEuMCApOwoJCWJvb2wgZnJ1c3R1bVRlc3QgPSBhbGwoIGZydXN0dW1UZXN0VmVjICk7CgkJaWYgKCBmcnVzdHVtVGVzdCApIHsKCQkjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkKCQkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR5MCA9IC0gdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR4MiA9IGR4MCAvIDIuMDsKCQkJZmxvYXQgZHkyID0gZHkwIC8gMi4wOwoJCQlmbG9hdCBkeDMgPSBkeDEgLyAyLjA7CgkJCWZsb2F0IGR5MyA9IGR5MSAvIDIuMDsKCQkJc2hhZG93ID0gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56ICkKCQkJKSAqICggMS4wIC8gMTcuMCApOwoJCSNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkKCQkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IGR4ID0gdGV4ZWxTaXplLng7CgkJCWZsb2F0IGR5ID0gdGV4ZWxTaXplLnk7CgkJCXZlYzIgdXYgPSBzaGFkb3dDb29yZC54eTsKCQkJdmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApOwoJCQl1diAtPSBmICogdGV4ZWxTaXplOwoJCQlzaGFkb3cgPSAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2LCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdGV4ZWxTaXplLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnggKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnggKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueSApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueSApICsKCQkJCW1peCggbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkJICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJCSAgZi54ICksCgkJCQkJIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkJICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkJICBmLnggKSwKCQkJCQkgZi55ICkKCQkJKSAqICggMS4wIC8gOS4wICk7CgkJI2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNICkKCQkJc2hhZG93ID0gVlNNU2hhZG93KCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7CgkJI2Vsc2UKCQkJc2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApOwoJCSNlbmRpZgoJCX0KCQlyZXR1cm4gc2hhZG93OwoJfQoJdmVjMiBjdWJlVG9VViggdmVjMyB2LCBmbG9hdCB0ZXhlbFNpemVZICkgewoJCXZlYzMgYWJzViA9IGFicyggdiApOwoJCWZsb2F0IHNjYWxlVG9DdWJlID0gMS4wIC8gbWF4KCBhYnNWLngsIG1heCggYWJzVi55LCBhYnNWLnogKSApOwoJCWFic1YgKj0gc2NhbGVUb0N1YmU7CgkJdiAqPSBzY2FsZVRvQ3ViZSAqICggMS4wIC0gMi4wICogdGV4ZWxTaXplWSApOwoJCXZlYzIgcGxhbmFyID0gdi54eTsKCQlmbG9hdCBhbG1vc3RBVGV4ZWwgPSAxLjUgKiB0ZXhlbFNpemVZOwoJCWZsb2F0IGFsbW9zdE9uZSA9IDEuMCAtIGFsbW9zdEFUZXhlbDsKCQlpZiAoIGFic1YueiA+PSBhbG1vc3RPbmUgKSB7CgkJCWlmICggdi56ID4gMC4wICkKCQkJCXBsYW5hci54ID0gNC4wIC0gdi54OwoJCX0gZWxzZSBpZiAoIGFic1YueCA+PSBhbG1vc3RPbmUgKSB7CgkJCWZsb2F0IHNpZ25YID0gc2lnbiggdi54ICk7CgkJCXBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDsKCQl9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkgewoJCQlmbG9hdCBzaWduWSA9IHNpZ24oIHYueSApOwoJCQlwbGFuYXIueCA9IHYueCArIDIuMCAqIHNpZ25ZICsgMi4wOwoJCQlwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wOwoJCX0KCQlyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7Cgl9CglmbG9hdCBnZXRQb2ludFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQsIGZsb2F0IHNoYWRvd0NhbWVyYU5lYXIsIGZsb2F0IHNoYWRvd0NhbWVyYUZhciApIHsKCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gKCBzaGFkb3dNYXBTaXplICogdmVjMiggNC4wLCAyLjAgKSApOwoJCXZlYzMgbGlnaHRUb1Bvc2l0aW9uID0gc2hhZG93Q29vcmQueHl6OwoJCWZsb2F0IGRwID0gKCBsZW5ndGgoIGxpZ2h0VG9Qb3NpdGlvbiApIC0gc2hhZG93Q2FtZXJhTmVhciApIC8gKCBzaGFkb3dDYW1lcmFGYXIgLSBzaGFkb3dDYW1lcmFOZWFyICk7CQlkcCArPSBzaGFkb3dCaWFzOwoJCXZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7CgkJI2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNICkKCQkJdmVjMiBvZmZzZXQgPSB2ZWMyKCAtIDEsIDEgKSAqIHNoYWRvd1JhZGl1cyAqIHRleGVsU2l6ZS55OwoJCQlyZXR1cm4gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKQoJCQkpICogKCAxLjAgLyA5LjAgKTsKCQkjZWxzZQoJCQlyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKTsKCQkjZW5kaWYKCX0KI2VuZGlmYCxXcHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBwb2ludFNoYWRvd01hdHJpeFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCiNlbmRpZmAsWXByPWAjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAgfHwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAgfHwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdmVjMyBzaGFkb3dXb3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJdmVjNCBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJI2VuZGlmCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7CgkJdlNwb3RTaGFkb3dDb29yZFsgaSBdID0gc3BvdFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBwb2ludExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCiNlbmRpZmAsanByPWBmbG9hdCBnZXRTaGFkb3dNYXNrKCkgewoJZmxvYXQgc2hhZG93ID0gMS4wOwoJI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCglEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCglTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCVBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXBvaW50TGlnaHQgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2VuZGlmCglyZXR1cm4gc2hhZG93Owp9YCxYcHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApOwoJbWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7CgltYXQ0IGJvbmVNYXRaID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnogKTsKCW1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApOwojZW5kaWZgLCRwcj1gI2lmZGVmIFVTRV9TS0lOTklORwoJdW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7Cgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeEludmVyc2U7CgkjaWZkZWYgQk9ORV9URVhUVVJFCgkJdW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7CgkJdW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplOwoJCW1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHsKCQkJZmxvYXQgaiA9IGkgKiA0LjA7CgkJCWZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTsKCQkJZmxvYXQgZHggPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCWZsb2F0IGR5ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApOwoJCQl5ID0gZHkgKiAoIHkgKyAwLjUgKTsKCQkJdmVjNCB2MSA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMC41ICksIHkgKSApOwoJCQl2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7CgkJCXZlYzQgdjMgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTsKCQkJdmVjNCB2NCA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMy41ICksIHkgKSApOwoJCQltYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZWxzZQoJCXVuaWZvcm0gbWF0NCBib25lTWF0cmljZXNbIE1BWF9CT05FUyBdOwoJCW1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHsKCQkJbWF0NCBib25lID0gYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTsKCQkJcmV0dXJuIGJvbmU7CgkJfQoJI2VuZGlmCiNlbmRpZmAsS3ByPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwoJdmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7Cglza2lubmVkICs9IGJvbmVNYXRYICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueDsKCXNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55OwoJc2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7Cglza2lubmVkICs9IGJvbmVNYXRXICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQudzsKCXRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7CiNlbmRpZmAsWnByPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgltYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC54ICogYm9uZU1hdFg7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0WjsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7Cglza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDsKCW9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6OwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJb2JqZWN0VGFuZ2VudCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNlbmRpZgojZW5kaWZgLEpwcj1gZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDsKI2lmZGVmIFVTRV9TUEVDVUxBUk1BUAoJdmVjNCB0ZXhlbFNwZWN1bGFyID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7CglzcGVjdWxhclN0cmVuZ3RoID0gdGV4ZWxTcGVjdWxhci5yOwojZWxzZQoJc3BlY3VsYXJTdHJlbmd0aCA9IDEuMDsKI2VuZGlmYCxRcHI9YCNpZmRlZiBVU0VfU1BFQ1VMQVJNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwOwojZW5kaWZgLHRkcj1gI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApCglnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTsKI2VuZGlmYCxlZHI9YCNpZm5kZWYgc2F0dXJhdGUKI2RlZmluZSBzYXR1cmF0ZSggYSApIGNsYW1wKCBhLCAwLjAsIDEuMCApCiNlbmRpZgp1bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nRXhwb3N1cmU7CnZlYzMgTGluZWFyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7CglyZXR1cm4gdG9uZU1hcHBpbmdFeHBvc3VyZSAqIGNvbG9yOwp9CnZlYzMgUmVpbmhhcmRUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7CglyZXR1cm4gc2F0dXJhdGUoIGNvbG9yIC8gKCB2ZWMzKCAxLjAgKSArIGNvbG9yICkgKTsKfQp2ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCWNvbG9yID0gbWF4KCB2ZWMzKCAwLjAgKSwgY29sb3IgLSAwLjAwNCApOwoJcmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTsKfQp2ZWMzIFJSVEFuZE9EVEZpdCggdmVjMyB2ICkgewoJdmVjMyBhID0gdiAqICggdiArIDAuMDI0NTc4NiApIC0gMC4wMDAwOTA1Mzc7Cgl2ZWMzIGIgPSB2ICogKCAwLjk4MzcyOSAqIHYgKyAwLjQzMjk1MTAgKSArIDAuMjM4MDgxOwoJcmV0dXJuIGEgLyBiOwp9CnZlYzMgQUNFU0ZpbG1pY1RvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29uc3QgbWF0MyBBQ0VTSW5wdXRNYXQgPSBtYXQzKAoJCXZlYzMoIDAuNTk3MTksIDAuMDc2MDAsIDAuMDI4NDAgKSwJCXZlYzMoIDAuMzU0NTgsIDAuOTA4MzQsIDAuMTMzODMgKSwKCQl2ZWMzKCAwLjA0ODIzLCAwLjAxNTY2LCAwLjgzNzc3ICkKCSk7Cgljb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQgPSBtYXQzKAoJCXZlYzMoICAxLjYwNDc1LCAtMC4xMDIwOCwgLTAuMDAzMjcgKSwJCXZlYzMoIC0wLjUzMTA4LCAgMS4xMDgxMywgLTAuMDcyNzYgKSwKCQl2ZWMzKCAtMC4wNzM2NywgLTAuMDA2MDUsICAxLjA3NjAyICkKCSk7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlIC8gMC42OwoJY29sb3IgPSBBQ0VTSW5wdXRNYXQgKiBjb2xvcjsKCWNvbG9yID0gUlJUQW5kT0RURml0KCBjb2xvciApOwoJY29sb3IgPSBBQ0VTT3V0cHV0TWF0ICogY29sb3I7CglyZXR1cm4gc2F0dXJhdGUoIGNvbG9yICk7Cn0KdmVjMyBDdXN0b21Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHsgcmV0dXJuIGNvbG9yOyB9YCxyZHI9YCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCglmbG9hdCB0cmFuc21pc3Npb25BbHBoYSA9IDEuMDsKCWZsb2F0IHRyYW5zbWlzc2lvbkZhY3RvciA9IHRyYW5zbWlzc2lvbjsKCWZsb2F0IHRoaWNrbmVzc0ZhY3RvciA9IHRoaWNrbmVzczsKCSNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQCgkJdHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1RISUNLTkVTU01BUAoJCXRoaWNrbmVzc0ZhY3RvciAqPSB0ZXh0dXJlMkQoIHRoaWNrbmVzc01hcCwgdlV2ICkuZzsKCSNlbmRpZgoJdmVjMyBwb3MgPSB2V29ybGRQb3NpdGlvbjsKCXZlYzMgdiA9IG5vcm1hbGl6ZSggY2FtZXJhUG9zaXRpb24gLSBwb3MgKTsKCXZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJdmVjNCB0cmFuc21pc3Npb24gPSBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKAoJCW4sIHYsIHJvdWdobmVzc0ZhY3RvciwgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwKCQlwb3MsIG1vZGVsTWF0cml4LCB2aWV3TWF0cml4LCBwcm9qZWN0aW9uTWF0cml4LCBpb3IsIHRoaWNrbmVzc0ZhY3RvciwKCQlhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7Cgl0b3RhbERpZmZ1c2UgPSBtaXgoIHRvdGFsRGlmZnVzZSwgdHJhbnNtaXNzaW9uLnJnYiwgdHJhbnNtaXNzaW9uRmFjdG9yICk7Cgl0cmFuc21pc3Npb25BbHBoYSA9IG1peCggdHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCB0cmFuc21pc3Npb25GYWN0b3IgKTsKI2VuZGlmYCxuZHI9YCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl1bmlmb3JtIGZsb2F0IHRyYW5zbWlzc2lvbjsKCXVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzOwoJdW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJdW5pZm9ybSB2ZWMzIGF0dGVudWF0aW9uQ29sb3I7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvbk1hcDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7CgkjZW5kaWYKCXVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTsKCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7Cgl1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7Cgl1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsKCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCXZlYzMgZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXggKSB7CgkJdmVjMyByZWZyYWN0aW9uVmVjdG9yID0gcmVmcmFjdCggLSB2LCBub3JtYWxpemUoIG4gKSwgMS4wIC8gaW9yICk7CgkJdmVjMyBtb2RlbFNjYWxlOwoJCW1vZGVsU2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueiA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDIgXS54eXogKSApOwoJCXJldHVybiBub3JtYWxpemUoIHJlZnJhY3Rpb25WZWN0b3IgKSAqIHRoaWNrbmVzcyAqIG1vZGVsU2NhbGU7Cgl9CglmbG9hdCBhcHBseUlvclRvUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlyZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTsKCX0KCXZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7CgkJZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApOwoJCSNpZmRlZiBURVhUVVJFX0xPRF9FWFQKCQkJcmV0dXJuIHRleHR1cmUyRExvZEVYVCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTsKCQkjZW5kaWYKCX0KCXZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQlpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkgewoJCQlyZXR1cm4gcmFkaWFuY2U7CgkJfSBlbHNlIHsKCQkJdmVjMyBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTsKCQkJdmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApOwkJCXJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7CgkJfQoJfQoJdmVjNCBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwKCQljb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiB2ZWMzIHBvc2l0aW9uLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4LAoJCWNvbnN0IGluIG1hdDQgdmlld01hdHJpeCwgY29uc3QgaW4gbWF0NCBwcm9qTWF0cml4LCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywKCQljb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7CgkJdmVjMyB0cmFuc21pc3Npb25SYXkgPSBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIG4sIHYsIHRoaWNrbmVzcywgaW9yLCBtb2RlbE1hdHJpeCApOwoJCXZlYzMgcmVmcmFjdGVkUmF5RXhpdCA9IHBvc2l0aW9uICsgdHJhbnNtaXNzaW9uUmF5OwoJCXZlYzQgbmRjUG9zID0gcHJvak1hdHJpeCAqIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZyYWN0ZWRSYXlFeGl0LCAxLjAgKTsKCQl2ZWMyIHJlZnJhY3Rpb25Db29yZHMgPSBuZGNQb3MueHkgLyBuZGNQb3MudzsKCQlyZWZyYWN0aW9uQ29vcmRzICs9IDEuMDsKCQlyZWZyYWN0aW9uQ29vcmRzIC89IDIuMDsKCQl2ZWM0IHRyYW5zbWl0dGVkTGlnaHQgPSBnZXRUcmFuc21pc3Npb25TYW1wbGUoIHJlZnJhY3Rpb25Db29yZHMsIHJvdWdobmVzcywgaW9yICk7CgkJdmVjMyBhdHRlbnVhdGVkQ29sb3IgPSBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCB0cmFuc21pdHRlZExpZ2h0LnJnYiwgbGVuZ3RoKCB0cmFuc21pc3Npb25SYXkgKSwgYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJCXZlYzMgRiA9IEVudmlyb25tZW50QlJERiggbiwgdiwgc3BlY3VsYXJDb2xvciwgc3BlY3VsYXJGOTAsIHJvdWdobmVzcyApOwoJCXJldHVybiB2ZWM0KCAoIDEuMCAtIEYgKSAqIGF0dGVudWF0ZWRDb2xvciAqIGRpZmZ1c2VDb2xvciwgdHJhbnNtaXR0ZWRMaWdodC5hICk7Cgl9CiNlbmRpZmAsaWRyPWAjaWYgKCBkZWZpbmVkKCBVU0VfVVYgKSAmJiAhIGRlZmluZWQoIFVWU19WRVJURVhfT05MWSApICkKCXZhcnlpbmcgdmVjMiB2VXY7CiNlbmRpZmAsb2RyPWAjaWZkZWYgVVNFX1VWCgkjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZCgkJdmVjMiB2VXY7CgkjZWxzZQoJCXZhcnlpbmcgdmVjMiB2VXY7CgkjZW5kaWYKCXVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKI2VuZGlmYCxhZHI9YCNpZmRlZiBVU0VfVVYKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CiNlbmRpZmAsc2RyPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCXZhcnlpbmcgdmVjMiB2VXYyOwojZW5kaWZgLGxkcj1gI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApCglhdHRyaWJ1dGUgdmVjMiB1djI7Cgl2YXJ5aW5nIHZlYzIgdlV2MjsKCXVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07CiNlbmRpZmAsY2RyPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCXZVdjIgPSAoIHV2MlRyYW5zZm9ybSAqIHZlYzMoIHV2MiwgMSApICkueHk7CiNlbmRpZmAsdWRyPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIERJU1RBTkNFICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKSB8fCBkZWZpbmVkICggVVNFX1RSQU5TTUlTU0lPTiApCgl2ZWM0IHdvcmxkUG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7CgkjaWZkZWYgVVNFX0lOU1RBTkNJTkcKCQl3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uOwoJI2VuZGlmCgl3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiB3b3JsZFBvc2l0aW9uOwojZW5kaWZgLGhkcj1gdmFyeWluZyB2ZWMyIHZVdjsKdW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtOwp2b2lkIG1haW4oKSB7Cgl2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5OwoJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbi54eSwgMS4wLCAxLjAgKTsKfWAsZmRyPWB1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7CnZhcnlpbmcgdmVjMiB2VXY7CnZvaWQgbWFpbigpIHsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdDJELCB2VXYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLHBkcj1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb3NpdGlvbi56ID0gZ2xfUG9zaXRpb24udzsKfWAsZGRyPWAjaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50Pgp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCXZlYzMgdlJlZmxlY3QgPSB2V29ybGREaXJlY3Rpb247CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJZ2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7CglnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5OwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAsbWRyPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXOwp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2SGlnaFByZWNpc2lvblpXID0gZ2xfUG9zaXRpb24uenc7Cn1gLGdkcj1gI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXOwp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTsKCSNpZiBERVBUSF9QQUNLSU5HID09IDMyMDAKCQlkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7CgkjZW5kaWYKCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJZmxvYXQgZnJhZ0Nvb3JkWiA9IDAuNSAqIHZIaWdoUHJlY2lzaW9uWldbMF0gLyB2SGlnaFByZWNpc2lvblpXWzFdICsgMC41OwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApOwoJI2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxCgkJZ2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBmcmFnQ29vcmRaICk7CgkjZW5kaWYKfWAsX2RyPWAjZGVmaW5lIERJU1RBTkNFCnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUAoJCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjZW5kaWYKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKfWAseWRyPWAjZGVmaW5lIERJU1RBTkNFCnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjsKdW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7CnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7CnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluICgpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7CglkaXN0ID0gKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7CglkaXN0ID0gc2F0dXJhdGUoIGRpc3QgKTsKCWdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApOwp9YCx2ZHI9YHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjb21tb24+CnZvaWQgbWFpbigpIHsKCXZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4Pgp9YCx4ZHI9YHVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDsKdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOwoJdmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApOwoJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Pgp9YCxiZHI9YHVuaWZvcm0gZmxvYXQgc2NhbGU7CmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7CnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJdkxpbmVEaXN0YW5jZSA9IHNjYWxlICogbGluZURpc3RhbmNlOwoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLHdkcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTsKdW5pZm9ybSBmbG9hdCB0b3RhbFNpemU7CnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCWlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkgewoJCWRpc2NhcmQ7Cgl9Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJb3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KfWAsU2RyPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpZiBkZWZpbmVkICggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQgKCBVU0VfU0tJTk5JTkcgKQoJCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjZW5kaWYKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxNZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJI2lmZGVmIFVTRV9MSUdIVE1BUAoJCXZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7CgkjZW5kaWYKCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiOwoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsRWRyPWAjZGVmaW5lIExBTUJFUlQKdmFyeWluZyB2ZWMzIHZMaWdodEZyb250Owp2YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrOwoJdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bGlnaHRzX2xhbWJlcnRfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsVGRyPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDsKdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250OwojaWZkZWYgRE9VQkxFX1NJREVECgl2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjazsKCXZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PgoJI2lmZGVmIERPVUJMRV9TSURFRAoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2SW5kaXJlY3RGcm9udDsKCSNlbmRpZgoJI2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApOwoJI2lmZGVmIERPVUJMRV9TSURFRAoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2TGlnaHRGcm9udCA6IHZMaWdodEJhY2s7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKSAqIGdldFNoYWRvd01hc2soKTsKCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxDZHI9YCNkZWZpbmUgTUFUQ0FQCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKfWAsQWRyPWAjZGVmaW5lIE1BVENBUAp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIHNhbXBsZXIyRCBtYXRjYXA7CnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+Cgl2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTsKCXZlYzMgeCA9IG5vcm1hbGl6ZSggdmVjMyggdmlld0Rpci56LCAwLjAsIC0gdmlld0Rpci54ICkgKTsKCXZlYzMgeSA9IGNyb3NzKCB2aWV3RGlyLCB4ICk7Cgl2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7CgkjaWZkZWYgVVNFX01BVENBUAoJCXZlYzQgbWF0Y2FwQ29sb3IgPSB0ZXh0dXJlMkQoIG1hdGNhcCwgdXYgKTsKCSNlbHNlCgkJdmVjNCBtYXRjYXBDb2xvciA9IHZlYzQoIHZlYzMoIG1peCggMC4yLCAwLjgsIHV2LnkgKSApLCAxLjAgKTsKCSNlbmRpZgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYiAqIG1hdGNhcENvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsUGRyPWAjZGVmaW5lIE5PUk1BTAojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7CiNlbmRpZgp9YCxJZHI9YCNkZWZpbmUgTk9STUFMCnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7Cn1gLExkcj1gI2RlZmluZSBQSE9ORwp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxrZHI9YCNkZWZpbmUgUEhPTkcKdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTsKdW5pZm9ybSB2ZWMzIHNwZWN1bGFyOwp1bmlmb3JtIGZsb2F0IHNoaW5pbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxSZHI9YCNkZWZpbmUgU1RBTkRBUkQKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4PgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLE5kcj1gI2RlZmluZSBTVEFOREFSRAojaWZkZWYgUEhZU0lDQUwKCSNkZWZpbmUgSU9SCgkjZGVmaW5lIFNQRUNVTEFSCiNlbmRpZgp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IHJvdWdobmVzczsKdW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmZGVmIElPUgoJdW5pZm9ybSBmbG9hdCBpb3I7CiNlbmRpZgojaWZkZWYgU1BFQ1VMQVIKCXVuaWZvcm0gZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHk7Cgl1bmlmb3JtIHZlYzMgc3BlY3VsYXJDb2xvcjsKCSNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9TUEVDVUxBUkNPTE9STUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJDb2xvck1hcDsKCSNlbmRpZgojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCXVuaWZvcm0gZmxvYXQgY2xlYXJjb2F0OwoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CiNlbmRpZgojaWZkZWYgVVNFX1NIRUVOCgl1bmlmb3JtIHZlYzMgc2hlZW5Db2xvcjsKCXVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlbkNvbG9yTWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Sb3VnaG5lc3NNYXA7CgkjZW5kaWYKI2VuZGlmCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgdG90YWxEaWZmdXNlID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTsKCXZlYzMgdG90YWxTcGVjdWxhciA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhcjsKCSNpbmNsdWRlIDx0cmFuc21pc3Npb25fZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2lmZGVmIFVTRV9TSEVFTgoJCWZsb2F0IHNoZWVuRW5lcmd5Q29tcCA9IDEuMCAtIDAuMTU3ICogbWF4MyggbWF0ZXJpYWwuc2hlZW5Db2xvciApOwoJCW91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogc2hlZW5FbmVyZ3lDb21wICsgc2hlZW5TcGVjdWxhcjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQlmbG9hdCBkb3ROVmNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTsKCQl2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApOwoJCW91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogKCAxLjAgLSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBGY2MgKSArIGNsZWFyY29hdFNwZWN1bGFyICogbWF0ZXJpYWwuY2xlYXJjb2F0OwoJI2VuZGlmCgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLERkcj1gI2RlZmluZSBUT09OCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxPZHI9YCNkZWZpbmUgVE9PTgp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Rvb25fZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCx6ZHI9YHVuaWZvcm0gZmxvYXQgc2l6ZTsKdW5pZm9ybSBmbG9hdCBzY2FsZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJZ2xfUG9pbnRTaXplID0gc2l6ZTsKCSNpZmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OCgkJYm9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApOwoJCWlmICggaXNQZXJzcGVjdGl2ZSApIGdsX1BvaW50U2l6ZSAqPSAoIHNjYWxlIC8gLSBtdlBvc2l0aW9uLnogKTsKCSNlbmRpZgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxGZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfcGFydGljbGVfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJb3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KfWAsQmRyPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEhkcj1gdW5pZm9ybSB2ZWMzIGNvbG9yOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCWdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+Cn1gLFZkcj1gdW5pZm9ybSBmbG9hdCByb3RhdGlvbjsKdW5pZm9ybSB2ZWMyIGNlbnRlcjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+Cgl2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTsKCXZlYzIgc2NhbGU7CglzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTsKCXNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApOwoJI2lmbmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OCgkJYm9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApOwoJCWlmICggaXNQZXJzcGVjdGl2ZSApIHNjYWxlICo9IC0gbXZQb3NpdGlvbi56OwoJI2VuZGlmCgl2ZWMyIGFsaWduZWRQb3NpdGlvbiA9ICggcG9zaXRpb24ueHkgLSAoIGNlbnRlciAtIHZlYzIoIDAuNSApICkgKSAqIHNjYWxlOwoJdmVjMiByb3RhdGVkUG9zaXRpb247Cglyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7Cglyb3RhdGVkUG9zaXRpb24ueSA9IHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7CgltdlBvc2l0aW9uLnh5ICs9IHJvdGF0ZWRQb3NpdGlvbjsKCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsVWRyPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsaHI9e2FscGhhbWFwX2ZyYWdtZW50Ol9mcixhbHBoYW1hcF9wYXJzX2ZyYWdtZW50OnlmcixhbHBoYXRlc3RfZnJhZ21lbnQ6dmZyLGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50Onhmcixhb21hcF9mcmFnbWVudDpiZnIsYW9tYXBfcGFyc19mcmFnbWVudDp3ZnIsYmVnaW5fdmVydGV4OlNmcixiZWdpbm5vcm1hbF92ZXJ0ZXg6TWZyLGJzZGZzOkVmcixidW1wbWFwX3BhcnNfZnJhZ21lbnQ6VGZyLGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDpDZnIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6QWZyLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDpQZnIsY2xpcHBpbmdfcGxhbmVzX3ZlcnRleDpJZnIsY29sb3JfZnJhZ21lbnQ6TGZyLGNvbG9yX3BhcnNfZnJhZ21lbnQ6a2ZyLGNvbG9yX3BhcnNfdmVydGV4OlJmcixjb2xvcl92ZXJ0ZXg6TmZyLGNvbW1vbjpEZnIsY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50Ok9mcixkZWZhdWx0bm9ybWFsX3ZlcnRleDp6ZnIsZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OkZmcixkaXNwbGFjZW1lbnRtYXBfdmVydGV4OkJmcixlbWlzc2l2ZW1hcF9mcmFnbWVudDpIZnIsZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDpWZnIsZW5jb2RpbmdzX2ZyYWdtZW50OlVmcixlbmNvZGluZ3NfcGFyc19mcmFnbWVudDpxZnIsZW52bWFwX2ZyYWdtZW50OkdmcixlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ6V2ZyLGVudm1hcF9wYXJzX2ZyYWdtZW50OllmcixlbnZtYXBfcGFyc192ZXJ0ZXg6amZyLGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50OmlwcixlbnZtYXBfdmVydGV4Olhmcixmb2dfdmVydGV4OiRmcixmb2dfcGFyc192ZXJ0ZXg6S2ZyLGZvZ19mcmFnbWVudDpaZnIsZm9nX3BhcnNfZnJhZ21lbnQ6SmZyLGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ6UWZyLGxpZ2h0bWFwX2ZyYWdtZW50OnRwcixsaWdodG1hcF9wYXJzX2ZyYWdtZW50OmVwcixsaWdodHNfbGFtYmVydF92ZXJ0ZXg6cnByLGxpZ2h0c19wYXJzX2JlZ2luOm5wcixsaWdodHNfdG9vbl9mcmFnbWVudDpvcHIsbGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudDphcHIsbGlnaHRzX3Bob25nX2ZyYWdtZW50OnNwcixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDpscHIsbGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50OmNwcixsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudDp1cHIsbGlnaHRzX2ZyYWdtZW50X2JlZ2luOmhwcixsaWdodHNfZnJhZ21lbnRfbWFwczpmcHIsbGlnaHRzX2ZyYWdtZW50X2VuZDpwcHIsbG9nZGVwdGhidWZfZnJhZ21lbnQ6ZHByLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6bXByLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4Omdwcixsb2dkZXB0aGJ1Zl92ZXJ0ZXg6X3ByLG1hcF9mcmFnbWVudDp5cHIsbWFwX3BhcnNfZnJhZ21lbnQ6dnByLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDp4cHIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6YnByLG1ldGFsbmVzc21hcF9mcmFnbWVudDp3cHIsbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6U3ByLG1vcnBobm9ybWFsX3ZlcnRleDpNcHIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6RXByLG1vcnBodGFyZ2V0X3ZlcnRleDpUcHIsbm9ybWFsX2ZyYWdtZW50X2JlZ2luOkNwcixub3JtYWxfZnJhZ21lbnRfbWFwczpBcHIsbm9ybWFsX3BhcnNfZnJhZ21lbnQ6UHByLG5vcm1hbF9wYXJzX3ZlcnRleDpJcHIsbm9ybWFsX3ZlcnRleDpMcHIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6a3ByLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW46UnByLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwczpOcHIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6RHByLG91dHB1dF9mcmFnbWVudDpPcHIscGFja2luZzp6cHIscHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDpGcHIscHJvamVjdF92ZXJ0ZXg6QnByLGRpdGhlcmluZ19mcmFnbWVudDpIcHIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6VnByLHJvdWdobmVzc21hcF9mcmFnbWVudDpVcHIscm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ6cXByLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OkdwcixzaGFkb3dtYXBfcGFyc192ZXJ0ZXg6V3ByLHNoYWRvd21hcF92ZXJ0ZXg6WXByLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDpqcHIsc2tpbmJhc2VfdmVydGV4Olhwcixza2lubmluZ19wYXJzX3ZlcnRleDokcHIsc2tpbm5pbmdfdmVydGV4Oktwcixza2lubm9ybWFsX3ZlcnRleDpacHIsc3BlY3VsYXJtYXBfZnJhZ21lbnQ6SnByLHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6UXByLHRvbmVtYXBwaW5nX2ZyYWdtZW50OnRkcix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OmVkcix0cmFuc21pc3Npb25fZnJhZ21lbnQ6cmRyLHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50Om5kcix1dl9wYXJzX2ZyYWdtZW50Omlkcix1dl9wYXJzX3ZlcnRleDpvZHIsdXZfdmVydGV4OmFkcix1djJfcGFyc19mcmFnbWVudDpzZHIsdXYyX3BhcnNfdmVydGV4Omxkcix1djJfdmVydGV4OmNkcix3b3JsZHBvc192ZXJ0ZXg6dWRyLGJhY2tncm91bmRfdmVydDpoZHIsYmFja2dyb3VuZF9mcmFnOmZkcixjdWJlX3ZlcnQ6cGRyLGN1YmVfZnJhZzpkZHIsZGVwdGhfdmVydDptZHIsZGVwdGhfZnJhZzpnZHIsZGlzdGFuY2VSR0JBX3ZlcnQ6X2RyLGRpc3RhbmNlUkdCQV9mcmFnOnlkcixlcXVpcmVjdF92ZXJ0OnZkcixlcXVpcmVjdF9mcmFnOnhkcixsaW5lZGFzaGVkX3ZlcnQ6YmRyLGxpbmVkYXNoZWRfZnJhZzp3ZHIsbWVzaGJhc2ljX3ZlcnQ6U2RyLG1lc2hiYXNpY19mcmFnOk1kcixtZXNobGFtYmVydF92ZXJ0OkVkcixtZXNobGFtYmVydF9mcmFnOlRkcixtZXNobWF0Y2FwX3ZlcnQ6Q2RyLG1lc2htYXRjYXBfZnJhZzpBZHIsbWVzaG5vcm1hbF92ZXJ0OlBkcixtZXNobm9ybWFsX2ZyYWc6SWRyLG1lc2hwaG9uZ192ZXJ0OkxkcixtZXNocGhvbmdfZnJhZzprZHIsbWVzaHBoeXNpY2FsX3ZlcnQ6UmRyLG1lc2hwaHlzaWNhbF9mcmFnOk5kcixtZXNodG9vbl92ZXJ0OkRkcixtZXNodG9vbl9mcmFnOk9kcixwb2ludHNfdmVydDp6ZHIscG9pbnRzX2ZyYWc6RmRyLHNoYWRvd192ZXJ0OkJkcixzaGFkb3dfZnJhZzpIZHIsc3ByaXRlX3ZlcnQ6VmRyLHNwcml0ZV9mcmFnOlVkcn0scmU9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IG5lKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGtpfSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxpb3I6e3ZhbHVlOjEuNX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3IEx0KDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGtpfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBMdCguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9fX0sYWg9e2Jhc2ljOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLnNwZWN1bGFybWFwLHJlLmVudm1hcCxyZS5hb21hcCxyZS5saWdodG1hcCxyZS5mb2ddKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmVtaXNzaXZlbWFwLHJlLmZvZyxyZS5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgbmUoMCl9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobGFtYmVydF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLnNwZWN1bGFybWFwLHJlLmVudm1hcCxyZS5hb21hcCxyZS5saWdodG1hcCxyZS5lbWlzc2l2ZW1hcCxyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUuZm9nLHJlLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBuZSgwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBuZSgxMTE4NDgxKX0sc2hpbmluZXNzOnt2YWx1ZTozMH19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hwaG9uZ192ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hwaG9uZ19mcmFnfSxzdGFuZGFyZDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5lbnZtYXAscmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHJlLnJvdWdobmVzc21hcCxyZS5tZXRhbG5lc3NtYXAscmUuZm9nLHJlLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBuZSgwKX0scm91Z2huZXNzOnt2YWx1ZToxfSxtZXRhbG5lc3M6e3ZhbHVlOjB9LGVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF9mcmFnfSx0b29uOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmVtaXNzaXZlbWFwLHJlLmJ1bXBtYXAscmUubm9ybWFsbWFwLHJlLmRpc3BsYWNlbWVudG1hcCxyZS5ncmFkaWVudG1hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHRvb25fdmVydCxmcmFnbWVudFNoYWRlcjpoci5tZXNodG9vbl9mcmFnfSxtYXRjYXA6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHJlLmZvZyx7bWF0Y2FwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3JtczpUYShbcmUucG9pbnRzLHJlLmZvZ10pLHZlcnRleFNoYWRlcjpoci5wb2ludHNfdmVydCxmcmFnbWVudFNoYWRlcjpoci5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpoci5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubGluZWRhc2hlZF9mcmFnfSxkZXB0aDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5kaXNwbGFjZW1lbnRtYXBdKSx2ZXJ0ZXhTaGFkZXI6aHIuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjpoci5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaG5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3JtczpUYShbcmUuc3ByaXRlLHJlLmZvZ10pLHZlcnRleFNoYWRlcjpoci5zcHJpdGVfdmVydCxmcmFnbWVudFNoYWRlcjpoci5zcHJpdGVfZnJhZ30sYmFja2dyb3VuZDp7dW5pZm9ybXM6e3V2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9LHQyRDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpoci5iYWNrZ3JvdW5kX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuYmFja2dyb3VuZF9mcmFnfSxjdWJlOnt1bmlmb3JtczpUYShbcmUuZW52bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmN1YmVfZnJhZ30sZXF1aXJlY3Q6e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6aHIuZXF1aXJlY3RfdmVydCxmcmFnbWVudFNoYWRlcjpoci5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuZGlzcGxhY2VtZW50bWFwLHtyZWZlcmVuY2VQb3NpdGlvbjp7dmFsdWU6bmV3IGp9LG5lYXJEaXN0YW5jZTp7dmFsdWU6MX0sZmFyRGlzdGFuY2U6e3ZhbHVlOjFlM319XSksdmVydGV4U2hhZGVyOmhyLmRpc3RhbmNlUkdCQV92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmRpc3RhbmNlUkdCQV9mcmFnfSxzaGFkb3c6e3VuaWZvcm1zOlRhKFtyZS5saWdodHMscmUuZm9nLHtjb2xvcjp7dmFsdWU6bmV3IG5lKDApfSxvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIuc2hhZG93X3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuc2hhZG93X2ZyYWd9fTthaC5waHlzaWNhbD17dW5pZm9ybXM6VGEoW2FoLnN0YW5kYXJkLnVuaWZvcm1zLHtjbGVhcmNvYXQ6e3ZhbHVlOjB9LGNsZWFyY29hdE1hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Um91Z2huZXNzOnt2YWx1ZTowfSxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LGNsZWFyY29hdE5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgTHQoMSwxKX0sY2xlYXJjb2F0Tm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxzaGVlbjp7dmFsdWU6MH0sc2hlZW5Db2xvcjp7dmFsdWU6bmV3IG5lKDApfSxzaGVlbkNvbG9yTWFwOnt2YWx1ZTpudWxsfSxzaGVlblJvdWdobmVzczp7dmFsdWU6MX0sc2hlZW5Sb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvbjp7dmFsdWU6MH0sdHJhbnNtaXNzaW9uTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTp7dmFsdWU6bmV3IEx0fSx0cmFuc21pc3Npb25TYW1wbGVyTWFwOnt2YWx1ZTpudWxsfSx0aGlja25lc3M6e3ZhbHVlOjB9LHRoaWNrbmVzc01hcDp7dmFsdWU6bnVsbH0sYXR0ZW51YXRpb25EaXN0YW5jZTp7dmFsdWU6MH0sYXR0ZW51YXRpb25Db2xvcjp7dmFsdWU6bmV3IG5lKDApfSxzcGVjdWxhckludGVuc2l0eTp7dmFsdWU6MX0sc3BlY3VsYXJJbnRlbnNpdHlNYXA6e3ZhbHVlOm51bGx9LHNwZWN1bGFyQ29sb3I6e3ZhbHVlOm5ldyBuZSgxLDEsMSl9LHNwZWN1bGFyQ29sb3JNYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpoci5tZXNocGh5c2ljYWxfZnJhZ307ZnVuY3Rpb24gcWRyKGUsdCxyLG4saSxvKXtsZXQgYT1uZXcgbmUoMCkscz1pPT09ITA/MDoxLGwsYyx1PW51bGwsaD0wLGY9bnVsbDtmdW5jdGlvbiBwKGcsXyl7bGV0IHk9ITEseD1fLmlzU2NlbmU9PT0hMD9fLmJhY2tncm91bmQ6bnVsbDt4JiZ4LmlzVGV4dHVyZSYmKHg9dC5nZXQoeCkpO2xldCBiPWUueHIsUz1iLmdldFNlc3Npb24mJmIuZ2V0U2Vzc2lvbigpO1MmJlMuZW52aXJvbm1lbnRCbGVuZE1vZGU9PT0iYWRkaXRpdmUiJiYoeD1udWxsKSx4PT09bnVsbD9kKGEscyk6eCYmeC5pc0NvbG9yJiYoZCh4LDEpLHk9ITApLChlLmF1dG9DbGVhcnx8eSkmJmUuY2xlYXIoZS5hdXRvQ2xlYXJDb2xvcixlLmF1dG9DbGVhckRlcHRoLGUuYXV0b0NsZWFyU3RlbmNpbCkseCYmKHguaXNDdWJlVGV4dHVyZXx8eC5tYXBwaW5nPT09eE0pPyhjPT09dm9pZCAwJiYoYz1uZXcgZWkobmV3IFFmKDEsMSwxKSxuZXcgbGgoe25hbWU6IkJhY2tncm91bmRDdWJlTWF0ZXJpYWwiLHVuaWZvcm1zOlozKGFoLmN1YmUudW5pZm9ybXMpLHZlcnRleFNoYWRlcjphaC5jdWJlLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjphaC5jdWJlLmZyYWdtZW50U2hhZGVyLHNpZGU6SWksZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgidXYiKSxjLm9uQmVmb3JlUmVuZGVyPWZ1bmN0aW9uKEMsUCxrKXt0aGlzLm1hdHJpeFdvcmxkLmNvcHlQb3NpdGlvbihrLm1hdHJpeFdvcmxkKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGMubWF0ZXJpYWwsImVudk1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLmVudk1hcC52YWx1ZX19KSxuLnVwZGF0ZShjKSksYy5tYXRlcmlhbC51bmlmb3Jtcy5lbnZNYXAudmFsdWU9eCxjLm1hdGVyaWFsLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9eC5pc0N1YmVUZXh0dXJlJiZ4LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExPy0xOjEsKHUhPT14fHxoIT09eC52ZXJzaW9ufHxmIT09ZS50b25lTWFwcGluZykmJihjLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9eCxoPXgudmVyc2lvbixmPWUudG9uZU1hcHBpbmcpLGcudW5zaGlmdChjLGMuZ2VvbWV0cnksYy5tYXRlcmlhbCwwLDAsbnVsbCkpOngmJnguaXNUZXh0dXJlJiYobD09PXZvaWQgMCYmKGw9bmV3IGVpKG5ldyBWMCgyLDIpLG5ldyBsaCh7bmFtZToiQmFja2dyb3VuZE1hdGVyaWFsIix1bmlmb3JtczpaMyhhaC5iYWNrZ3JvdW5kLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6YWguYmFja2dyb3VuZC52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6YWguYmFja2dyb3VuZC5mcmFnbWVudFNoYWRlcixzaWRlOkl2LGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxsLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwubWF0ZXJpYWwsIm1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLnQyRC52YWx1ZX19KSxuLnVwZGF0ZShsKSksbC5tYXRlcmlhbC51bmlmb3Jtcy50MkQudmFsdWU9eCx4Lm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmeC51cGRhdGVNYXRyaXgoKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoeC5tYXRyaXgpLCh1IT09eHx8aCE9PXgudmVyc2lvbnx8ZiE9PWUudG9uZU1hcHBpbmcpJiYobC5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PXgsaD14LnZlcnNpb24sZj1lLnRvbmVNYXBwaW5nKSxnLnVuc2hpZnQobCxsLmdlb21ldHJ5LGwubWF0ZXJpYWwsMCwwLG51bGwpKX1mdW5jdGlvbiBkKGcsXyl7ci5idWZmZXJzLmNvbG9yLnNldENsZWFyKGcucixnLmcsZy5iLF8sbyl9cmV0dXJue2dldENsZWFyQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sc2V0Q2xlYXJDb2xvcjpmdW5jdGlvbihnLF89MSl7YS5zZXQoZykscz1fLGQoYSxzKX0sZ2V0Q2xlYXJBbHBoYTpmdW5jdGlvbigpe3JldHVybiBzfSxzZXRDbGVhckFscGhhOmZ1bmN0aW9uKGcpe3M9ZyxkKGEscyl9LHJlbmRlcjpwfX1mdW5jdGlvbiBHZHIoZSx0LHIsbil7bGV0IGk9ZS5nZXRQYXJhbWV0ZXIoMzQ5MjEpLG89bi5pc1dlYkdMMj9udWxsOnQuZ2V0KCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLGE9bi5pc1dlYkdMMnx8byE9PW51bGwscz17fSxsPWcobnVsbCksYz1sO2Z1bmN0aW9uIHUoUixGLHosVSxXKXtsZXQgWj0hMTtpZihhKXtsZXQgcnQ9ZChVLHosRik7YyE9PXJ0JiYoYz1ydCxmKGMub2JqZWN0KSksWj1fKFUsVyksWiYmeShVLFcpfWVsc2V7bGV0IHJ0PUYud2lyZWZyYW1lPT09ITA7KGMuZ2VvbWV0cnkhPT1VLmlkfHxjLnByb2dyYW0hPT16LmlkfHxjLndpcmVmcmFtZSE9PXJ0KSYmKGMuZ2VvbWV0cnk9VS5pZCxjLnByb2dyYW09ei5pZCxjLndpcmVmcmFtZT1ydCxaPSEwKX1SLmlzSW5zdGFuY2VkTWVzaD09PSEwJiYoWj0hMCksVyE9PW51bGwmJnIudXBkYXRlKFcsMzQ5NjMpLFomJihrKFIsRix6LFUpLFchPT1udWxsJiZlLmJpbmRCdWZmZXIoMzQ5NjMsci5nZXQoVykuYnVmZmVyKSl9ZnVuY3Rpb24gaCgpe3JldHVybiBuLmlzV2ViR0wyP2UuY3JlYXRlVmVydGV4QXJyYXkoKTpvLmNyZWF0ZVZlcnRleEFycmF5T0VTKCl9ZnVuY3Rpb24gZihSKXtyZXR1cm4gbi5pc1dlYkdMMj9lLmJpbmRWZXJ0ZXhBcnJheShSKTpvLmJpbmRWZXJ0ZXhBcnJheU9FUyhSKX1mdW5jdGlvbiBwKFIpe3JldHVybiBuLmlzV2ViR0wyP2UuZGVsZXRlVmVydGV4QXJyYXkoUik6by5kZWxldGVWZXJ0ZXhBcnJheU9FUyhSKX1mdW5jdGlvbiBkKFIsRix6KXtsZXQgVT16LndpcmVmcmFtZT09PSEwLFc9c1tSLmlkXTtXPT09dm9pZCAwJiYoVz17fSxzW1IuaWRdPVcpO2xldCBaPVdbRi5pZF07Wj09PXZvaWQgMCYmKFo9e30sV1tGLmlkXT1aKTtsZXQgcnQ9WltVXTtyZXR1cm4gcnQ9PT12b2lkIDAmJihydD1nKGgoKSksWltVXT1ydCkscnR9ZnVuY3Rpb24gZyhSKXtsZXQgRj1bXSx6PVtdLFU9W107Zm9yKGxldCBXPTA7VzxpO1crKylGW1ddPTAseltXXT0wLFVbV109MDtyZXR1cm57Z2VvbWV0cnk6bnVsbCxwcm9ncmFtOm51bGwsd2lyZWZyYW1lOiExLG5ld0F0dHJpYnV0ZXM6RixlbmFibGVkQXR0cmlidXRlczp6LGF0dHJpYnV0ZURpdmlzb3JzOlUsb2JqZWN0OlIsYXR0cmlidXRlczp7fSxpbmRleDpudWxsfX1mdW5jdGlvbiBfKFIsRil7bGV0IHo9Yy5hdHRyaWJ1dGVzLFU9Ui5hdHRyaWJ1dGVzLFc9MDtmb3IobGV0IFogaW4gVSl7bGV0IHJ0PXpbWl0sb3Q9VVtaXTtpZihydD09PXZvaWQgMHx8cnQuYXR0cmlidXRlIT09b3R8fHJ0LmRhdGEhPT1vdC5kYXRhKXJldHVybiEwO1crK31yZXR1cm4gYy5hdHRyaWJ1dGVzTnVtIT09V3x8Yy5pbmRleCE9PUZ9ZnVuY3Rpb24geShSLEYpe2xldCB6PXt9LFU9Ui5hdHRyaWJ1dGVzLFc9MDtmb3IobGV0IFogaW4gVSl7bGV0IHJ0PVVbWl0sb3Q9e307b3QuYXR0cmlidXRlPXJ0LHJ0LmRhdGEmJihvdC5kYXRhPXJ0LmRhdGEpLHpbWl09b3QsVysrfWMuYXR0cmlidXRlcz16LGMuYXR0cmlidXRlc051bT1XLGMuaW5kZXg9Rn1mdW5jdGlvbiB4KCl7bGV0IFI9Yy5uZXdBdHRyaWJ1dGVzO2ZvcihsZXQgRj0wLHo9Ui5sZW5ndGg7Rjx6O0YrKylSW0ZdPTB9ZnVuY3Rpb24gYihSKXtTKFIsMCl9ZnVuY3Rpb24gUyhSLEYpe2xldCB6PWMubmV3QXR0cmlidXRlcyxVPWMuZW5hYmxlZEF0dHJpYnV0ZXMsVz1jLmF0dHJpYnV0ZURpdmlzb3JzO3pbUl09MSxVW1JdPT09MCYmKGUuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoUiksVVtSXT0xKSxXW1JdIT09RiYmKChuLmlzV2ViR0wyP2U6dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbbi5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKFIsRiksV1tSXT1GKX1mdW5jdGlvbiBDKCl7bGV0IFI9Yy5uZXdBdHRyaWJ1dGVzLEY9Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IHo9MCxVPUYubGVuZ3RoO3o8VTt6KyspRlt6XSE9PVJbel0mJihlLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh6KSxGW3pdPTApfWZ1bmN0aW9uIFAoUixGLHosVSxXLFope24uaXNXZWJHTDI9PT0hMCYmKHo9PT01MTI0fHx6PT09NTEyNSk/ZS52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihSLEYseixXLFopOmUudmVydGV4QXR0cmliUG9pbnRlcihSLEYseixVLFcsWil9ZnVuY3Rpb24gayhSLEYseixVKXtpZihuLmlzV2ViR0wyPT09ITEmJihSLmlzSW5zdGFuY2VkTWVzaHx8VS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KSYmdC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKT09PW51bGwpcmV0dXJuO3goKTtsZXQgVz1VLmF0dHJpYnV0ZXMsWj16LmdldEF0dHJpYnV0ZXMoKSxydD1GLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKGxldCBvdCBpbiBaKXtsZXQgc3Q9WltvdF07aWYoc3QubG9jYXRpb24+PTApe2xldCBTdD1XW290XTtpZihTdD09PXZvaWQgMCYmKG90PT09Imluc3RhbmNlTWF0cml4IiYmUi5pbnN0YW5jZU1hdHJpeCYmKFN0PVIuaW5zdGFuY2VNYXRyaXgpLG90PT09Imluc3RhbmNlQ29sb3IiJiZSLmluc3RhbmNlQ29sb3ImJihTdD1SLmluc3RhbmNlQ29sb3IpKSxTdCE9PXZvaWQgMCl7bGV0IGJ0PVN0Lm5vcm1hbGl6ZWQsTXQ9U3QuaXRlbVNpemUsbHQ9ci5nZXQoU3QpO2lmKGx0PT09dm9pZCAwKWNvbnRpbnVlO2xldCBLdD1sdC5idWZmZXIsX3Q9bHQudHlwZSxjdD1sdC5ieXRlc1BlckVsZW1lbnQ7aWYoU3QuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IFg9U3QuZGF0YSxldD1YLnN0cmlkZSxkdD1TdC5vZmZzZXQ7aWYoWCYmWC5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyKXtmb3IobGV0IHE9MDtxPHN0LmxvY2F0aW9uU2l6ZTtxKyspUyhzdC5sb2NhdGlvbitxLFgubWVzaFBlckF0dHJpYnV0ZSk7Ui5pc0luc3RhbmNlZE1lc2ghPT0hMCYmVS5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKFUuX21heEluc3RhbmNlQ291bnQ9WC5tZXNoUGVyQXR0cmlidXRlKlguY291bnQpfWVsc2UgZm9yKGxldCBxPTA7cTxzdC5sb2NhdGlvblNpemU7cSsrKWIoc3QubG9jYXRpb24rcSk7ZS5iaW5kQnVmZmVyKDM0OTYyLEt0KTtmb3IobGV0IHE9MDtxPHN0LmxvY2F0aW9uU2l6ZTtxKyspUChzdC5sb2NhdGlvbitxLE10L3N0LmxvY2F0aW9uU2l6ZSxfdCxidCxldCpjdCwoZHQrTXQvc3QubG9jYXRpb25TaXplKnEpKmN0KX1lbHNle2lmKFN0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKXtmb3IobGV0IFg9MDtYPHN0LmxvY2F0aW9uU2l6ZTtYKyspUyhzdC5sb2NhdGlvbitYLFN0Lm1lc2hQZXJBdHRyaWJ1dGUpO1IuaXNJbnN0YW5jZWRNZXNoIT09ITAmJlUuX21heEluc3RhbmNlQ291bnQ9PT12b2lkIDAmJihVLl9tYXhJbnN0YW5jZUNvdW50PVN0Lm1lc2hQZXJBdHRyaWJ1dGUqU3QuY291bnQpfWVsc2UgZm9yKGxldCBYPTA7WDxzdC5sb2NhdGlvblNpemU7WCsrKWIoc3QubG9jYXRpb24rWCk7ZS5iaW5kQnVmZmVyKDM0OTYyLEt0KTtmb3IobGV0IFg9MDtYPHN0LmxvY2F0aW9uU2l6ZTtYKyspUChzdC5sb2NhdGlvbitYLE10L3N0LmxvY2F0aW9uU2l6ZSxfdCxidCxNdCpjdCxNdC9zdC5sb2NhdGlvblNpemUqWCpjdCl9fWVsc2UgaWYocnQhPT12b2lkIDApe2xldCBidD1ydFtvdF07aWYoYnQhPT12b2lkIDApc3dpdGNoKGJ0Lmxlbmd0aCl7Y2FzZSAyOmUudmVydGV4QXR0cmliMmZ2KHN0LmxvY2F0aW9uLGJ0KTticmVhaztjYXNlIDM6ZS52ZXJ0ZXhBdHRyaWIzZnYoc3QubG9jYXRpb24sYnQpO2JyZWFrO2Nhc2UgNDplLnZlcnRleEF0dHJpYjRmdihzdC5sb2NhdGlvbixidCk7YnJlYWs7ZGVmYXVsdDplLnZlcnRleEF0dHJpYjFmdihzdC5sb2NhdGlvbixidCl9fX19QygpfWZ1bmN0aW9uIE8oKXtJKCk7Zm9yKGxldCBSIGluIHMpe2xldCBGPXNbUl07Zm9yKGxldCB6IGluIEYpe2xldCBVPUZbel07Zm9yKGxldCBXIGluIFUpcChVW1ddLm9iamVjdCksZGVsZXRlIFVbV107ZGVsZXRlIEZbel19ZGVsZXRlIHNbUl19fWZ1bmN0aW9uIEQoUil7aWYoc1tSLmlkXT09PXZvaWQgMClyZXR1cm47bGV0IEY9c1tSLmlkXTtmb3IobGV0IHogaW4gRil7bGV0IFU9Rlt6XTtmb3IobGV0IFcgaW4gVSlwKFVbV10ub2JqZWN0KSxkZWxldGUgVVtXXTtkZWxldGUgRlt6XX1kZWxldGUgc1tSLmlkXX1mdW5jdGlvbiBCKFIpe2ZvcihsZXQgRiBpbiBzKXtsZXQgej1zW0ZdO2lmKHpbUi5pZF09PT12b2lkIDApY29udGludWU7bGV0IFU9eltSLmlkXTtmb3IobGV0IFcgaW4gVSlwKFVbV10ub2JqZWN0KSxkZWxldGUgVVtXXTtkZWxldGUgeltSLmlkXX19ZnVuY3Rpb24gSSgpe0woKSxjIT09bCYmKGM9bCxmKGMub2JqZWN0KSl9ZnVuY3Rpb24gTCgpe2wuZ2VvbWV0cnk9bnVsbCxsLnByb2dyYW09bnVsbCxsLndpcmVmcmFtZT0hMX1yZXR1cm57c2V0dXA6dSxyZXNldDpJLHJlc2V0RGVmYXVsdFN0YXRlOkwsZGlzcG9zZTpPLHJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5OkQscmVsZWFzZVN0YXRlc09mUHJvZ3JhbTpCLGluaXRBdHRyaWJ1dGVzOngsZW5hYmxlQXR0cmlidXRlOmIsZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXM6Q319ZnVuY3Rpb24gV2RyKGUsdCxyLG4pe2xldCBpPW4uaXNXZWJHTDIsbztmdW5jdGlvbiBhKGMpe289Y31mdW5jdGlvbiBzKGMsdSl7ZS5kcmF3QXJyYXlzKG8sYyx1KSxyLnVwZGF0ZSh1LG8sMSl9ZnVuY3Rpb24gbChjLHUsaCl7aWYoaD09PTApcmV0dXJuO2xldCBmLHA7aWYoaSlmPWUscD0iZHJhd0FycmF5c0luc3RhbmNlZCI7ZWxzZSBpZihmPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikscD0iZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIixmPT09bnVsbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cmV0dXJufWZbcF0obyxjLHUsaCksci51cGRhdGUodSxvLGgpfXRoaXMuc2V0TW9kZT1hLHRoaXMucmVuZGVyPXMsdGhpcy5yZW5kZXJJbnN0YW5jZXM9bH1mdW5jdGlvbiBZZHIoZSx0LHIpe2xldCBuO2Z1bmN0aW9uIGkoKXtpZihuIT09dm9pZCAwKXJldHVybiBuO2lmKHQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKT09PSEwKXtsZXQgaz10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7bj1lLmdldFBhcmFtZXRlcihrLk1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCl9ZWxzZSBuPTA7cmV0dXJuIG59ZnVuY3Rpb24gbyhrKXtpZihrPT09ImhpZ2hwIil7aWYoZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtrPSJtZWRpdW1wIn1yZXR1cm4gaz09PSJtZWRpdW1wIiYmZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzcpLnByZWNpc2lvbj4wJiZlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzNykucHJlY2lzaW9uPjA/Im1lZGl1bXAiOiJsb3dwIn1sZXQgYT10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0fHx0eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQhPSJ1bmRlZmluZWQiJiZlIGluc3RhbmNlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQscz1yLnByZWNpc2lvbiE9PXZvaWQgMD9yLnByZWNpc2lvbjoiaGlnaHAiLGw9byhzKTtsIT09cyYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLHMsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixsLCJpbnN0ZWFkLiIpLHM9bCk7bGV0IGM9YXx8dC5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHU9ci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPT09ITAsaD1lLmdldFBhcmFtZXRlcigzNDkzMCksZj1lLmdldFBhcmFtZXRlcigzNTY2MCkscD1lLmdldFBhcmFtZXRlcigzMzc5KSxkPWUuZ2V0UGFyYW1ldGVyKDM0MDc2KSxnPWUuZ2V0UGFyYW1ldGVyKDM0OTIxKSxfPWUuZ2V0UGFyYW1ldGVyKDM2MzQ3KSx5PWUuZ2V0UGFyYW1ldGVyKDM2MzQ4KSx4PWUuZ2V0UGFyYW1ldGVyKDM2MzQ5KSxiPWY+MCxTPWF8fHQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpLEM9YiYmUyxQPWE/ZS5nZXRQYXJhbWV0ZXIoMzYxODMpOjA7cmV0dXJue2lzV2ViR0wyOmEsZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OmksZ2V0TWF4UHJlY2lzaW9uOm8scHJlY2lzaW9uOnMsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjp1LG1heFRleHR1cmVzOmgsbWF4VmVydGV4VGV4dHVyZXM6ZixtYXhUZXh0dXJlU2l6ZTpwLG1heEN1YmVtYXBTaXplOmQsbWF4QXR0cmlidXRlczpnLG1heFZlcnRleFVuaWZvcm1zOl8sbWF4VmFyeWluZ3M6eSxtYXhGcmFnbWVudFVuaWZvcm1zOngsdmVydGV4VGV4dHVyZXM6YixmbG9hdEZyYWdtZW50VGV4dHVyZXM6UyxmbG9hdFZlcnRleFRleHR1cmVzOkMsbWF4U2FtcGxlczpQfX1mdW5jdGlvbiBqZHIoZSl7bGV0IHQ9dGhpcyxyPW51bGwsbj0wLGk9ITEsbz0hMSxhPW5ldyAkYyxzPW5ldyBraSxsPXt2YWx1ZTpudWxsLG5lZWRzVXBkYXRlOiExfTt0aGlzLnVuaWZvcm09bCx0aGlzLm51bVBsYW5lcz0wLHRoaXMubnVtSW50ZXJzZWN0aW9uPTAsdGhpcy5pbml0PWZ1bmN0aW9uKGgsZixwKXtsZXQgZD1oLmxlbmd0aCE9PTB8fGZ8fG4hPT0wfHxpO3JldHVybiBpPWYscj11KGgscCwwKSxuPWgubGVuZ3RoLGR9LHRoaXMuYmVnaW5TaGFkb3dzPWZ1bmN0aW9uKCl7bz0hMCx1KG51bGwpfSx0aGlzLmVuZFNoYWRvd3M9ZnVuY3Rpb24oKXtvPSExLGMoKX0sdGhpcy5zZXRTdGF0ZT1mdW5jdGlvbihoLGYscCl7bGV0IGQ9aC5jbGlwcGluZ1BsYW5lcyxnPWguY2xpcEludGVyc2VjdGlvbixfPWguY2xpcFNoYWRvd3MseT1lLmdldChoKTtpZighaXx8ZD09PW51bGx8fGQubGVuZ3RoPT09MHx8byYmIV8pbz91KG51bGwpOmMoKTtlbHNle2xldCB4PW8/MDpuLGI9eCo0LFM9eS5jbGlwcGluZ1N0YXRlfHxudWxsO2wudmFsdWU9UyxTPXUoZCxmLGIscCk7Zm9yKGxldCBDPTA7QyE9PWI7KytDKVNbQ109cltDXTt5LmNsaXBwaW5nU3RhdGU9Uyx0aGlzLm51bUludGVyc2VjdGlvbj1nP3RoaXMubnVtUGxhbmVzOjAsdGhpcy5udW1QbGFuZXMrPXh9fTtmdW5jdGlvbiBjKCl7bC52YWx1ZSE9PXImJihsLnZhbHVlPXIsbC5uZWVkc1VwZGF0ZT1uPjApLHQubnVtUGxhbmVzPW4sdC5udW1JbnRlcnNlY3Rpb249MH1mdW5jdGlvbiB1KGgsZixwLGQpe2xldCBnPWghPT1udWxsP2gubGVuZ3RoOjAsXz1udWxsO2lmKGchPT0wKXtpZihfPWwudmFsdWUsZCE9PSEwfHxfPT09bnVsbCl7bGV0IHk9cCtnKjQseD1mLm1hdHJpeFdvcmxkSW52ZXJzZTtzLmdldE5vcm1hbE1hdHJpeCh4KSwoXz09PW51bGx8fF8ubGVuZ3RoPHkpJiYoXz1uZXcgRmxvYXQzMkFycmF5KHkpKTtmb3IobGV0IGI9MCxTPXA7YiE9PWc7KytiLFMrPTQpYS5jb3B5KGhbYl0pLmFwcGx5TWF0cml4NCh4LHMpLGEubm9ybWFsLnRvQXJyYXkoXyxTKSxfW1MrM109YS5jb25zdGFudH1sLnZhbHVlPV8sbC5uZWVkc1VwZGF0ZT0hMH1yZXR1cm4gdC5udW1QbGFuZXM9Zyx0Lm51bUludGVyc2VjdGlvbj0wLF99fWZ1bmN0aW9uIFhkcihlKXtsZXQgdD1uZXcgV2Vha01hcDtmdW5jdGlvbiByKGEscyl7cmV0dXJuIHM9PT1XUD9hLm1hcHBpbmc9bng6cz09PVlQJiYoYS5tYXBwaW5nPWl4KSxhfWZ1bmN0aW9uIG4oYSl7aWYoYSYmYS5pc1RleHR1cmUmJmEuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITEpe2xldCBzPWEubWFwcGluZztpZihzPT09V1B8fHM9PT1ZUClpZih0LmhhcyhhKSl7bGV0IGw9dC5nZXQoYSkudGV4dHVyZTtyZXR1cm4gcihsLGEubWFwcGluZyl9ZWxzZXtsZXQgbD1hLmltYWdlO2lmKGwmJmwuaGVpZ2h0PjApe2xldCBjPW5ldyBRMyhsLmhlaWdodC8yKTtyZXR1cm4gYy5mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZShlLGEpLHQuc2V0KGEsYyksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixpKSxyKGMudGV4dHVyZSxhLm1hcHBpbmcpfWVsc2UgcmV0dXJuIG51bGx9fXJldHVybiBhfWZ1bmN0aW9uIGkoYSl7bGV0IHM9YS50YXJnZXQ7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixpKTtsZXQgbD10LmdldChzKTtsIT09dm9pZCAwJiYodC5kZWxldGUocyksbC5kaXNwb3NlKCkpfWZ1bmN0aW9uIG8oKXt0PW5ldyBXZWFrTWFwfXJldHVybntnZXQ6bixkaXNwb3NlOm99fXZhciBEdj1jbGFzcyBleHRlbmRzIFJ2e2NvbnN0cnVjdG9yKHQ9LTEscj0xLG49MSxpPS0xLG89LjEsYT0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJPcnRob2dyYXBoaWNDYW1lcmEiLHRoaXMuem9vbT0xLHRoaXMudmlldz1udWxsLHRoaXMubGVmdD10LHRoaXMucmlnaHQ9cix0aGlzLnRvcD1uLHRoaXMuYm90dG9tPWksdGhpcy5uZWFyPW8sdGhpcy5mYXI9YSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQscil7cmV0dXJuIHN1cGVyLmNvcHkodCxyKSx0aGlzLmxlZnQ9dC5sZWZ0LHRoaXMucmlnaHQ9dC5yaWdodCx0aGlzLnRvcD10LnRvcCx0aGlzLmJvdHRvbT10LmJvdHRvbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuem9vbT10Lnpvb20sdGhpcy52aWV3PXQudmlldz09PW51bGw/bnVsbDpPYmplY3QuYXNzaWduKHt9LHQudmlldyksdGhpc31zZXRWaWV3T2Zmc2V0KHQscixuLGksbyxhKXt0aGlzLnZpZXc9PT1udWxsJiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9cix0aGlzLnZpZXcub2Zmc2V0WD1uLHRoaXMudmlldy5vZmZzZXRZPWksdGhpcy52aWV3LndpZHRoPW8sdGhpcy52aWV3LmhlaWdodD1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNsZWFyVmlld09mZnNldCgpe3RoaXMudmlldyE9PW51bGwmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9dXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpe2xldCB0PSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvKDIqdGhpcy56b29tKSxyPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvKDIqdGhpcy56b29tKSxuPSh0aGlzLnJpZ2h0K3RoaXMubGVmdCkvMixpPSh0aGlzLnRvcCt0aGlzLmJvdHRvbSkvMixvPW4tdCxhPW4rdCxzPWkrcixsPWktcjtpZih0aGlzLnZpZXchPT1udWxsJiZ0aGlzLnZpZXcuZW5hYmxlZCl7bGV0IGM9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS90aGlzLnZpZXcuZnVsbFdpZHRoL3RoaXMuem9vbSx1PSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvdGhpcy52aWV3LmZ1bGxIZWlnaHQvdGhpcy56b29tO28rPWMqdGhpcy52aWV3Lm9mZnNldFgsYT1vK2MqdGhpcy52aWV3LndpZHRoLHMtPXUqdGhpcy52aWV3Lm9mZnNldFksbD1zLXUqdGhpcy52aWV3LmhlaWdodH10aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyhvLGEscyxsLHRoaXMubmVhcix0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3Quem9vbT10aGlzLnpvb20sci5vYmplY3QubGVmdD10aGlzLmxlZnQsci5vYmplY3QucmlnaHQ9dGhpcy5yaWdodCxyLm9iamVjdC50b3A9dGhpcy50b3Asci5vYmplY3QuYm90dG9tPXRoaXMuYm90dG9tLHIub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLHIub2JqZWN0LmZhcj10aGlzLmZhcix0aGlzLnZpZXchPT1udWxsJiYoci5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLHJ9fTtEdi5wcm90b3R5cGUuaXNPcnRob2dyYXBoaWNDYW1lcmE9ITA7dmFyIFUwPWNsYXNzIGV4dGVuZHMgbGh7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50eXBlPSJSYXdTaGFkZXJNYXRlcmlhbCJ9fTtVMC5wcm90b3R5cGUuaXNSYXdTaGFkZXJNYXRlcmlhbD0hMDt2YXIgcTM9NCxGMD04LCRmPU1hdGgucG93KDIsRjApLEZmZT1bLjEyNSwuMjE1LC4zNSwuNDQ2LC41MjYsLjU4Ml0sQmZlPUYwLXEzKzErRmZlLmxlbmd0aCxrMz0yMCxmdXQ9bmV3IER2LHtfbG9kUGxhbmVzOlJQLF9zaXplTG9kczpNdWUsX3NpZ21hczpBVn09JGRyKCksRXVlPW5ldyBuZSxwdXQ9bnVsbCxTdj0oMStNYXRoLnNxcnQoNSkpLzIsUjM9MS9TdixUdWU9W25ldyBqKDEsMSwxKSxuZXcgaigtMSwxLDEpLG5ldyBqKDEsMSwtMSksbmV3IGooLTEsMSwtMSksbmV3IGooMCxTdixSMyksbmV3IGooMCxTdiwtUjMpLG5ldyBqKFIzLDAsU3YpLG5ldyBqKC1SMywwLFN2KSxuZXcgaihTdixSMywwKSxuZXcgaigtU3YsUjMsMCldLHQ2PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9bnVsbCx0aGlzLl9ibHVyTWF0ZXJpYWw9S2RyKGszKSx0aGlzLl9lcXVpcmVjdFNoYWRlcj1udWxsLHRoaXMuX2N1YmVtYXBTaGFkZXI9bnVsbCx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fYmx1ck1hdGVyaWFsKX1mcm9tU2NlbmUodCxyPTAsbj0uMSxpPTEwMCl7cHV0PXRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO2xldCBvPXRoaXMuX2FsbG9jYXRlVGFyZ2V0cygpO3JldHVybiB0aGlzLl9zY2VuZVRvQ3ViZVVWKHQsbixpLG8pLHI+MCYmdGhpcy5fYmx1cihvLDAsMCxyKSx0aGlzLl9hcHBseVBNUkVNKG8pLHRoaXMuX2NsZWFudXAobyksb31mcm9tRXF1aXJlY3Rhbmd1bGFyKHQscj1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxyKX1mcm9tQ3ViZW1hcCh0LHI9bnVsbCl7cmV0dXJuIHRoaXMuX2Zyb21UZXh0dXJlKHQscil9Y29tcGlsZUN1YmVtYXBTaGFkZXIoKXt0aGlzLl9jdWJlbWFwU2hhZGVyPT09bnVsbCYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9UHVlKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2N1YmVtYXBTaGFkZXIpKX1jb21waWxlRXF1aXJlY3Rhbmd1bGFyU2hhZGVyKCl7dGhpcy5fZXF1aXJlY3RTaGFkZXI9PT1udWxsJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9QXVlKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0U2hhZGVyKSl9ZGlzcG9zZSgpe3RoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCksdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQhPT1udWxsJiZ0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCksdGhpcy5fY3ViZW1hcFNoYWRlciE9PW51bGwmJnRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2VxdWlyZWN0U2hhZGVyIT09bnVsbCYmdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO2ZvcihsZXQgdD0wO3Q8UlAubGVuZ3RoO3QrKylSUFt0XS5kaXNwb3NlKCl9X2NsZWFudXAodCl7dGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHB1dCksdC5zY2lzc29yVGVzdD0hMSxQVih0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KX1fZnJvbVRleHR1cmUodCxyKXtwdXQ9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IG49cnx8dGhpcy5fYWxsb2NhdGVUYXJnZXRzKHQpO3JldHVybiB0aGlzLl90ZXh0dXJlVG9DdWJlVVYodCxuKSx0aGlzLl9hcHBseVBNUkVNKG4pLHRoaXMuX2NsZWFudXAobiksbn1fYWxsb2NhdGVUYXJnZXRzKHQpe2xldCByPXttYWdGaWx0ZXI6b2ksbWluRmlsdGVyOm9pLGdlbmVyYXRlTWlwbWFwczohMSx0eXBlOkN2LGZvcm1hdDpRbyxlbmNvZGluZzpRZCxkZXB0aEJ1ZmZlcjohMX0sbj1DdWUocik7cmV0dXJuIG4uZGVwdGhCdWZmZXI9IXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9PT1udWxsJiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9Q3VlKHIpKSxufV9jb21waWxlTWF0ZXJpYWwodCl7bGV0IHI9bmV3IGVpKFJQWzBdLHQpO3RoaXMuX3JlbmRlcmVyLmNvbXBpbGUocixmdXQpfV9zY2VuZVRvQ3ViZVVWKHQscixuLGkpe2xldCBzPW5ldyBVaSg5MCwxLHIsbiksbD1bMSwtMSwxLDEsMSwxXSxjPVsxLDEsMSwtMSwtMSwtMV0sdT10aGlzLl9yZW5kZXJlcixoPXUuYXV0b0NsZWFyLGY9dS50b25lTWFwcGluZzt1LmdldENsZWFyQ29sb3IoRXVlKSx1LnRvbmVNYXBwaW5nPUtkLHUuYXV0b0NsZWFyPSExO2xldCBwPW5ldyBzaCh7bmFtZToiUE1SRU0uQmFja2dyb3VuZCIsc2lkZTpJaSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLGQ9bmV3IGVpKG5ldyBRZixwKSxnPSExLF89dC5iYWNrZ3JvdW5kO18/Xy5pc0NvbG9yJiYocC5jb2xvci5jb3B5KF8pLHQuYmFja2dyb3VuZD1udWxsLGc9ITApOihwLmNvbG9yLmNvcHkoRXVlKSxnPSEwKTtmb3IobGV0IHk9MDt5PDY7eSsrKXtsZXQgeD15JTM7eD09PTA/KHMudXAuc2V0KDAsbFt5XSwwKSxzLmxvb2tBdChjW3ldLDAsMCkpOng9PT0xPyhzLnVwLnNldCgwLDAsbFt5XSkscy5sb29rQXQoMCxjW3ldLDApKToocy51cC5zZXQoMCxsW3ldLDApLHMubG9va0F0KDAsMCxjW3ldKSksUFYoaSx4KiRmLHk+Mj8kZjowLCRmLCRmKSx1LnNldFJlbmRlclRhcmdldChpKSxnJiZ1LnJlbmRlcihkLHMpLHUucmVuZGVyKHQscyl9ZC5nZW9tZXRyeS5kaXNwb3NlKCksZC5tYXRlcmlhbC5kaXNwb3NlKCksdS50b25lTWFwcGluZz1mLHUuYXV0b0NsZWFyPWgsdC5iYWNrZ3JvdW5kPV99X3RleHR1cmVUb0N1YmVVVih0LHIpe2xldCBuPXRoaXMuX3JlbmRlcmVyLGk9dC5tYXBwaW5nPT09bnh8fHQubWFwcGluZz09PWl4O2k/KHRoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1QdWUoKSksdGhpcy5fY3ViZW1hcFNoYWRlci51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPXQuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSk6dGhpcy5fZXF1aXJlY3RTaGFkZXI9PT1udWxsJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9QXVlKCkpO2xldCBvPWk/dGhpcy5fY3ViZW1hcFNoYWRlcjp0aGlzLl9lcXVpcmVjdFNoYWRlcixhPW5ldyBlaShSUFswXSxvKSxzPW8udW5pZm9ybXM7cy5lbnZNYXAudmFsdWU9dCxpfHxzLnRleGVsU2l6ZS52YWx1ZS5zZXQoMS90LmltYWdlLndpZHRoLDEvdC5pbWFnZS5oZWlnaHQpLFBWKHIsMCwwLDMqJGYsMiokZiksbi5zZXRSZW5kZXJUYXJnZXQociksbi5yZW5kZXIoYSxmdXQpfV9hcHBseVBNUkVNKHQpe2xldCByPXRoaXMuX3JlbmRlcmVyLG49ci5hdXRvQ2xlYXI7ci5hdXRvQ2xlYXI9ITE7Zm9yKGxldCBpPTE7aTxCZmU7aSsrKXtsZXQgbz1NYXRoLnNxcnQoQVZbaV0qQVZbaV0tQVZbaS0xXSpBVltpLTFdKSxhPVR1ZVsoaS0xKSVUdWUubGVuZ3RoXTt0aGlzLl9ibHVyKHQsaS0xLGksbyxhKX1yLmF1dG9DbGVhcj1ufV9ibHVyKHQscixuLGksbyl7bGV0IGE9dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ7dGhpcy5faGFsZkJsdXIodCxhLHIsbixpLCJsYXRpdHVkaW5hbCIsbyksdGhpcy5faGFsZkJsdXIoYSx0LG4sbixpLCJsb25naXR1ZGluYWwiLG8pfV9oYWxmQmx1cih0LHIsbixpLG8sYSxzKXtsZXQgbD10aGlzLl9yZW5kZXJlcixjPXRoaXMuX2JsdXJNYXRlcmlhbDthIT09ImxhdGl0dWRpbmFsIiYmYSE9PSJsb25naXR1ZGluYWwiJiZjb25zb2xlLmVycm9yKCJibHVyIGRpcmVjdGlvbiBtdXN0IGJlIGVpdGhlciBsYXRpdHVkaW5hbCBvciBsb25naXR1ZGluYWwhIik7bGV0IHU9MyxoPW5ldyBlaShSUFtpXSxjKSxmPWMudW5pZm9ybXMscD1NdWVbbl0tMSxkPWlzRmluaXRlKG8pP01hdGguUEkvKDIqcCk6MipNYXRoLlBJLygyKmszLTEpLGc9by9kLF89aXNGaW5pdGUobyk/MStNYXRoLmZsb29yKHUqZyk6azM7Xz5rMyYmY29uc29sZS53YXJuKGBzaWdtYVJhZGlhbnMsICR7b30sIGlzIHRvbyBsYXJnZSBhbmQgd2lsbCBjbGlwLCBhcyBpdCByZXF1ZXN0ZWQgJHtffSBzYW1wbGVzIHdoZW4gdGhlIG1heGltdW0gaXMgc2V0IHRvICR7azN9YCk7bGV0IHk9W10seD0wO2ZvcihsZXQgUD0wO1A8azM7KytQKXtsZXQgaz1QL2csTz1NYXRoLmV4cCgtayprLzIpO3kucHVzaChPKSxQPT09MD94Kz1POlA8XyYmKHgrPTIqTyl9Zm9yKGxldCBQPTA7UDx5Lmxlbmd0aDtQKyspeVtQXT15W1BdL3g7Zi5lbnZNYXAudmFsdWU9dC50ZXh0dXJlLGYuc2FtcGxlcy52YWx1ZT1fLGYud2VpZ2h0cy52YWx1ZT15LGYubGF0aXR1ZGluYWwudmFsdWU9YT09PSJsYXRpdHVkaW5hbCIscyYmKGYucG9sZUF4aXMudmFsdWU9cyksZi5kVGhldGEudmFsdWU9ZCxmLm1pcEludC52YWx1ZT1GMC1uO2xldCBiPU11ZVtpXSxTPTMqTWF0aC5tYXgoMCwkZi0yKmIpLEM9KGk9PT0wPzA6MiokZikrMipiKihpPkYwLXEzP2ktRjArcTM6MCk7UFYocixTLEMsMypiLDIqYiksbC5zZXRSZW5kZXJUYXJnZXQociksbC5yZW5kZXIoaCxmdXQpfX07ZnVuY3Rpb24gJGRyKCl7bGV0IGU9W10sdD1bXSxyPVtdLG49RjA7Zm9yKGxldCBpPTA7aTxCZmU7aSsrKXtsZXQgbz1NYXRoLnBvdygyLG4pO3QucHVzaChvKTtsZXQgYT0xL287aT5GMC1xMz9hPUZmZVtpLUYwK3EzLTFdOmk9PT0wJiYoYT0wKSxyLnB1c2goYSk7bGV0IHM9MS8oby0xKSxsPS1zLzIsYz0xK3MvMix1PVtsLGwsYyxsLGMsYyxsLGwsYyxjLGwsY10saD02LGY9NixwPTMsZD0yLGc9MSxfPW5ldyBGbG9hdDMyQXJyYXkocCpmKmgpLHk9bmV3IEZsb2F0MzJBcnJheShkKmYqaCkseD1uZXcgRmxvYXQzMkFycmF5KGcqZipoKTtmb3IobGV0IFM9MDtTPGg7UysrKXtsZXQgQz1TJTMqMi8zLTEsUD1TPjI/MDotMSxrPVtDLFAsMCxDKzIvMyxQLDAsQysyLzMsUCsxLDAsQyxQLDAsQysyLzMsUCsxLDAsQyxQKzEsMF07Xy5zZXQoayxwKmYqUykseS5zZXQodSxkKmYqUyk7bGV0IE89W1MsUyxTLFMsUyxTXTt4LnNldChPLGcqZipTKX1sZXQgYj1uZXcgUGU7Yi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUoXyxwKSksYi5zZXRBdHRyaWJ1dGUoInV2IixuZXcgSmUoeSxkKSksYi5zZXRBdHRyaWJ1dGUoImZhY2VJbmRleCIsbmV3IEplKHgsZykpLGUucHVzaChiKSxuPnEzJiZuLS19cmV0dXJue19sb2RQbGFuZXM6ZSxfc2l6ZUxvZHM6dCxfc2lnbWFzOnJ9fWZ1bmN0aW9uIEN1ZShlKXtsZXQgdD1uZXcgdXMoMyokZiwzKiRmLGUpO3JldHVybiB0LnRleHR1cmUubWFwcGluZz14TSx0LnRleHR1cmUubmFtZT0iUE1SRU0uY3ViZVV2Iix0LnNjaXNzb3JUZXN0PSEwLHR9ZnVuY3Rpb24gUFYoZSx0LHIsbixpKXtlLnZpZXdwb3J0LnNldCh0LHIsbixpKSxlLnNjaXNzb3Iuc2V0KHQscixuLGkpfWZ1bmN0aW9uIEtkcihlKXtsZXQgdD1uZXcgRmxvYXQzMkFycmF5KGUpLHI9bmV3IGooMCwxLDApO3JldHVybiBuZXcgVTAoe25hbWU6IlNwaGVyaWNhbEdhdXNzaWFuQmx1ciIsZGVmaW5lczp7bjplfSx1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxzYW1wbGVzOnt2YWx1ZToxfSx3ZWlnaHRzOnt2YWx1ZTp0fSxsYXRpdHVkaW5hbDp7dmFsdWU6ITF9LGRUaGV0YTp7dmFsdWU6MH0sbWlwSW50Ont2YWx1ZTowfSxwb2xlQXhpczp7dmFsdWU6cn19LHZlcnRleFNoYWRlcjpEaHQoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gaW50IHNhbXBsZXM7CgkJCXVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdOwoJCQl1bmlmb3JtIGJvb2wgbGF0aXR1ZGluYWw7CgkJCXVuaWZvcm0gZmxvYXQgZFRoZXRhOwoJCQl1bmlmb3JtIGZsb2F0IG1pcEludDsKCQkJdW5pZm9ybSB2ZWMzIHBvbGVBeGlzOwoKCQkJI2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWCgkJCSNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CgoJCQl2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHsKCgkJCQlmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTsKCQkJCS8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvbgoJCQkJdmVjMyBzYW1wbGVEaXJlY3Rpb24gPSB2T3V0cHV0RGlyZWN0aW9uICogY29zVGhldGEKCQkJCQkrIGNyb3NzKCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiBzaW4oIHRoZXRhICkKCQkJCQkrIGF4aXMgKiBkb3QoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqICggMS4wIC0gY29zVGhldGEgKTsKCgkJCQlyZXR1cm4gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyZWN0aW9uLCBtaXBJbnQgKTsKCgkJCX0KCgkJCXZvaWQgbWFpbigpIHsKCgkJCQl2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJaWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7CgoJCQkJCWF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTsKCgkJCQl9CgoJCQkJYXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApOwoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApOwoKCQkJCWZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHsKCgkJCQkJaWYgKCBpID49IHNhbXBsZXMgKSB7CgoJCQkJCQlicmVhazsKCgkJCQkJfQoKCQkJCQlmbG9hdCB0aGV0YSA9IGRUaGV0YSAqIGZsb2F0KCBpICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIC0xLjAgKiB0aGV0YSwgYXhpcyApOwoJCQkJCWdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCB0aGV0YSwgYXhpcyApOwoKCQkJCX0KCgkJCX0KCQlgLGJsZW5kaW5nOiRkLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gQXVlKCl7bGV0IGU9bmV3IEx0KDEsMSk7cmV0dXJuIG5ldyBVMCh7bmFtZToiRXF1aXJlY3Rhbmd1bGFyVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHRleGVsU2l6ZTp7dmFsdWU6ZX19LHZlcnRleFNoYWRlcjpEaHQoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7CgoJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJdm9pZCBtYWluKCkgewoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoKCQkJCXZlYzMgb3V0cHV0RGlyZWN0aW9uID0gbm9ybWFsaXplKCB2T3V0cHV0RGlyZWN0aW9uICk7CgkJCQl2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJdmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7CgkJCQl1diAtPSBmICogdGV4ZWxTaXplOwoJCQkJdmVjMyB0bCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54ICs9IHRleGVsU2l6ZS54OwoJCQkJdmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di55ICs9IHRleGVsU2l6ZS55OwoJCQkJdmVjMyBiciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54IC09IHRleGVsU2l6ZS54OwoJCQkJdmVjMyBibCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgoJCQkJdmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTsKCQkJCXZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApOwoKCQkJfQoJCWAsYmxlbmRpbmc6JGQsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBQdWUoKXtyZXR1cm4gbmV3IFUwKHtuYW1lOiJDdWJlbWFwVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfX0sdmVydGV4U2hhZGVyOkRodCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwOwoKCQkJdm9pZCBtYWluKCkgewoKCQkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiB2T3V0cHV0RGlyZWN0aW9uLngsIHZPdXRwdXREaXJlY3Rpb24ueXogKSApOwoKCQkJfQoJCWAsYmxlbmRpbmc6JGQsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBEaHQoKXtyZXR1cm5gCgoJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJYXR0cmlidXRlIHZlYzMgcG9zaXRpb247CgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDsKCgkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCS8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb24KCQl2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHsKCgkJCXV2ID0gMi4wICogdXYgLSAxLjA7CgoJCQl2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTsKCgkJCWlmICggZmFjZSA9PSAwLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgoJCQkJZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OwoJCQkJZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7CgoJCQkJZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6CgoJCQl9CgoJCQlyZXR1cm4gZGlyZWN0aW9uOwoKCQl9CgoJCXZvaWQgbWFpbigpIHsKCgkJCXZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7CgoJCX0KCWB9ZnVuY3Rpb24gWmRyKGUpe2xldCB0PW5ldyBXZWFrTWFwLHI9bnVsbDtmdW5jdGlvbiBuKHMpe2lmKHMmJnMuaXNUZXh0dXJlKXtsZXQgbD1zLm1hcHBpbmcsYz1sPT09V1B8fGw9PT1ZUCx1PWw9PT1ueHx8bD09PWl4O2lmKGN8fHUpaWYocy5pc1JlbmRlclRhcmdldFRleHR1cmUmJnMubmVlZHNQTVJFTVVwZGF0ZT09PSEwKXtzLm5lZWRzUE1SRU1VcGRhdGU9ITE7bGV0IGg9dC5nZXQocyk7cmV0dXJuIHI9PT1udWxsJiYocj1uZXcgdDYoZSkpLGg9Yz9yLmZyb21FcXVpcmVjdGFuZ3VsYXIocyxoKTpyLmZyb21DdWJlbWFwKHMsaCksdC5zZXQocyxoKSxoLnRleHR1cmV9ZWxzZXtpZih0LmhhcyhzKSlyZXR1cm4gdC5nZXQocykudGV4dHVyZTt7bGV0IGg9cy5pbWFnZTtpZihjJiZoJiZoLmhlaWdodD4wfHx1JiZoJiZpKGgpKXtyPT09bnVsbCYmKHI9bmV3IHQ2KGUpKTtsZXQgZj1jP3IuZnJvbUVxdWlyZWN0YW5ndWxhcihzKTpyLmZyb21DdWJlbWFwKHMpO3JldHVybiB0LnNldChzLGYpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyksZi50ZXh0dXJlfWVsc2UgcmV0dXJuIG51bGx9fX1yZXR1cm4gc31mdW5jdGlvbiBpKHMpe2xldCBsPTAsYz02O2ZvcihsZXQgdT0wO3U8Yzt1Kyspc1t1XSE9PXZvaWQgMCYmbCsrO3JldHVybiBsPT09Y31mdW5jdGlvbiBvKHMpe2xldCBsPXMudGFyZ2V0O2wucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyk7bGV0IGM9dC5nZXQobCk7YyE9PXZvaWQgMCYmKHQuZGVsZXRlKGwpLGMuZGlzcG9zZSgpKX1mdW5jdGlvbiBhKCl7dD1uZXcgV2Vha01hcCxyIT09bnVsbCYmKHIuZGlzcG9zZSgpLHI9bnVsbCl9cmV0dXJue2dldDpuLGRpc3Bvc2U6YX19ZnVuY3Rpb24gSmRyKGUpe2xldCB0PXt9O2Z1bmN0aW9uIHIobil7aWYodFtuXSE9PXZvaWQgMClyZXR1cm4gdFtuXTtsZXQgaTtzd2l0Y2gobil7Y2FzZSJXRUJHTF9kZXB0aF90ZXh0dXJlIjppPWUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIil8fGUuZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxlLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUiKTticmVhaztjYXNlIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyI6aT1lLmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fGUuZ2V0RXh0ZW5zaW9uKCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyI6aT1lLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxlLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiOmk9ZS5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfHxlLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpO2JyZWFrO2RlZmF1bHQ6aT1lLmdldEV4dGVuc2lvbihuKX1yZXR1cm4gdFtuXT1pLGl9cmV0dXJue2hhczpmdW5jdGlvbihuKXtyZXR1cm4gcihuKSE9PW51bGx9LGluaXQ6ZnVuY3Rpb24obil7bi5pc1dlYkdMMj9yKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik6KHIoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxyKCJPRVNfdGV4dHVyZV9mbG9hdCIpLHIoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxyKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpLHIoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpLHIoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSxyKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLHIoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSkscigiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikscigiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IikscigiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9LGdldDpmdW5jdGlvbihuKXtsZXQgaT1yKG4pO3JldHVybiBpPT09bnVsbCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK24rIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKSxpfX19ZnVuY3Rpb24gUWRyKGUsdCxyLG4pe2xldCBpPXt9LG89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gYShoKXtsZXQgZj1oLnRhcmdldDtmLmluZGV4IT09bnVsbCYmdC5yZW1vdmUoZi5pbmRleCk7Zm9yKGxldCBkIGluIGYuYXR0cmlidXRlcyl0LnJlbW92ZShmLmF0dHJpYnV0ZXNbZF0pO2YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksZGVsZXRlIGlbZi5pZF07bGV0IHA9by5nZXQoZik7cCYmKHQucmVtb3ZlKHApLG8uZGVsZXRlKGYpKSxuLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KGYpLGYuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT09PSEwJiZkZWxldGUgZi5fbWF4SW5zdGFuY2VDb3VudCxyLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gcyhoLGYpe3JldHVybiBpW2YuaWRdPT09ITB8fChmLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGlbZi5pZF09ITAsci5tZW1vcnkuZ2VvbWV0cmllcysrKSxmfWZ1bmN0aW9uIGwoaCl7bGV0IGY9aC5hdHRyaWJ1dGVzO2ZvcihsZXQgZCBpbiBmKXQudXBkYXRlKGZbZF0sMzQ5NjIpO2xldCBwPWgubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgZCBpbiBwKXtsZXQgZz1wW2RdO2ZvcihsZXQgXz0wLHk9Zy5sZW5ndGg7Xzx5O18rKyl0LnVwZGF0ZShnW19dLDM0OTYyKX19ZnVuY3Rpb24gYyhoKXtsZXQgZj1bXSxwPWguaW5kZXgsZD1oLmF0dHJpYnV0ZXMucG9zaXRpb24sZz0wO2lmKHAhPT1udWxsKXtsZXQgeD1wLmFycmF5O2c9cC52ZXJzaW9uO2ZvcihsZXQgYj0wLFM9eC5sZW5ndGg7YjxTO2IrPTMpe2xldCBDPXhbYiswXSxQPXhbYisxXSxrPXhbYisyXTtmLnB1c2goQyxQLFAsayxrLEMpfX1lbHNle2xldCB4PWQuYXJyYXk7Zz1kLnZlcnNpb247Zm9yKGxldCBiPTAsUz14Lmxlbmd0aC8zLTE7YjxTO2IrPTMpe2xldCBDPWIrMCxQPWIrMSxrPWIrMjtmLnB1c2goQyxQLFAsayxrLEMpfX1sZXQgXz1uZXcoTmZlKGYpP0szOiQzKShmLDEpO18udmVyc2lvbj1nO2xldCB5PW8uZ2V0KGgpO3kmJnQucmVtb3ZlKHkpLG8uc2V0KGgsXyl9ZnVuY3Rpb24gdShoKXtsZXQgZj1vLmdldChoKTtpZihmKXtsZXQgcD1oLmluZGV4O3AhPT1udWxsJiZmLnZlcnNpb248cC52ZXJzaW9uJiZjKGgpfWVsc2UgYyhoKTtyZXR1cm4gby5nZXQoaCl9cmV0dXJue2dldDpzLHVwZGF0ZTpsLGdldFdpcmVmcmFtZUF0dHJpYnV0ZTp1fX1mdW5jdGlvbiB0bXIoZSx0LHIsbil7bGV0IGk9bi5pc1dlYkdMMixvO2Z1bmN0aW9uIGEoZil7bz1mfWxldCBzLGw7ZnVuY3Rpb24gYyhmKXtzPWYudHlwZSxsPWYuYnl0ZXNQZXJFbGVtZW50fWZ1bmN0aW9uIHUoZixwKXtlLmRyYXdFbGVtZW50cyhvLHAscyxmKmwpLHIudXBkYXRlKHAsbywxKX1mdW5jdGlvbiBoKGYscCxkKXtpZihkPT09MClyZXR1cm47bGV0IGcsXztpZihpKWc9ZSxfPSJkcmF3RWxlbWVudHNJbnN0YW5jZWQiO2Vsc2UgaWYoZz10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLF89ImRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIixnPT09bnVsbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3JldHVybn1nW19dKG8scCxzLGYqbCxkKSxyLnVwZGF0ZShwLG8sZCl9dGhpcy5zZXRNb2RlPWEsdGhpcy5zZXRJbmRleD1jLHRoaXMucmVuZGVyPXUsdGhpcy5yZW5kZXJJbnN0YW5jZXM9aH1mdW5jdGlvbiBlbXIoZSl7bGV0IHQ9e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxyPXtmcmFtZTowLGNhbGxzOjAsdHJpYW5nbGVzOjAscG9pbnRzOjAsbGluZXM6MH07ZnVuY3Rpb24gbihvLGEscyl7c3dpdGNoKHIuY2FsbHMrKyxhKXtjYXNlIDQ6ci50cmlhbmdsZXMrPXMqKG8vMyk7YnJlYWs7Y2FzZSAxOnIubGluZXMrPXMqKG8vMik7YnJlYWs7Y2FzZSAzOnIubGluZXMrPXMqKG8tMSk7YnJlYWs7Y2FzZSAyOnIubGluZXMrPXMqbzticmVhaztjYXNlIDA6ci5wb2ludHMrPXMqbzticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixhKTticmVha319ZnVuY3Rpb24gaSgpe3IuZnJhbWUrKyxyLmNhbGxzPTAsci50cmlhbmdsZXM9MCxyLnBvaW50cz0wLHIubGluZXM9MH1yZXR1cm57bWVtb3J5OnQscmVuZGVyOnIscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6aSx1cGRhdGU6bn19dmFyIHRNPWNsYXNzIGV4dGVuZHMgeGl7Y29uc3RydWN0b3IodD1udWxsLHI9MSxuPTEsaT0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6cixoZWlnaHQ6bixkZXB0aDppfSx0aGlzLm1hZ0ZpbHRlcj1MaSx0aGlzLm1pbkZpbHRlcj1MaSx0aGlzLndyYXBSPUpvLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O3RNLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDtmdW5jdGlvbiBybXIoZSx0KXtyZXR1cm4gZVswXS10WzBdfWZ1bmN0aW9uIG5tcihlLHQpe3JldHVybiBNYXRoLmFicyh0WzFdKS1NYXRoLmFicyhlWzFdKX1mdW5jdGlvbiBJdWUoZSx0KXtsZXQgcj0xLG49dC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3QuZGF0YS5hcnJheTp0LmFycmF5O24gaW5zdGFuY2VvZiBJbnQ4QXJyYXk/cj0xMjc6biBpbnN0YW5jZW9mIEludDE2QXJyYXk/cj0zMjc2NzpuIGluc3RhbmNlb2YgSW50MzJBcnJheT9yPTIxNDc0ODM2NDc6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xNb3JwaHRhcmdldHM6IFVuc3VwcG9ydGVkIG1vcnBoIGF0dHJpYnV0ZSBkYXRhIHR5cGU6ICIsbiksZS5kaXZpZGVTY2FsYXIocil9ZnVuY3Rpb24gaW1yKGUsdCxyKXtsZXQgbj17fSxpPW5ldyBGbG9hdDMyQXJyYXkoOCksbz1uZXcgV2Vha01hcCxhPW5ldyBqLHM9W107Zm9yKGxldCBjPTA7Yzw4O2MrKylzW2NdPVtjLDBdO2Z1bmN0aW9uIGwoYyx1LGgsZil7bGV0IHA9Yy5tb3JwaFRhcmdldEluZmx1ZW5jZXM7aWYodC5pc1dlYkdMMj09PSEwKXtsZXQgZD11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGgsZz1vLmdldCh1KTtpZihnPT09dm9pZCAwfHxnLmNvdW50IT09ZCl7bGV0IEw9ZnVuY3Rpb24oKXtCLmRpc3Bvc2UoKSxvLmRlbGV0ZSh1KSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEwpfTtnIT09dm9pZCAwJiZnLnRleHR1cmUuZGlzcG9zZSgpO2xldCB4PXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCE9PXZvaWQgMCxiPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLFM9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsfHxbXSxDPXUuYXR0cmlidXRlcy5wb3NpdGlvbi5jb3VudCxQPXg9PT0hMD8yOjEsaz1DKlAsTz0xO2s+dC5tYXhUZXh0dXJlU2l6ZSYmKE89TWF0aC5jZWlsKGsvdC5tYXhUZXh0dXJlU2l6ZSksaz10Lm1heFRleHR1cmVTaXplKTtsZXQgRD1uZXcgRmxvYXQzMkFycmF5KGsqTyo0KmQpLEI9bmV3IHRNKEQsayxPLGQpO0IuZm9ybWF0PVFvLEIudHlwZT1qZCxCLm5lZWRzVXBkYXRlPSEwO2xldCBJPVAqNDtmb3IobGV0IFI9MDtSPGQ7UisrKXtsZXQgRj1iW1JdLHo9U1tSXSxVPWsqTyo0KlI7Zm9yKGxldCBXPTA7VzxGLmNvdW50O1crKyl7YS5mcm9tQnVmZmVyQXR0cmlidXRlKEYsVyksRi5ub3JtYWxpemVkPT09ITAmJkl1ZShhLEYpO2xldCBaPVcqSTtEW1UrWiswXT1hLngsRFtVK1orMV09YS55LERbVStaKzJdPWEueixEW1UrWiszXT0wLHg9PT0hMCYmKGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh6LFcpLHoubm9ybWFsaXplZD09PSEwJiZJdWUoYSx6KSxEW1UrWis0XT1hLngsRFtVK1orNV09YS55LERbVStaKzZdPWEueixEW1UrWis3XT0wKX19Zz17Y291bnQ6ZCx0ZXh0dXJlOkIsc2l6ZTpuZXcgTHQoayxPKX0sby5zZXQodSxnKSx1LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEwpfWxldCBfPTA7Zm9yKGxldCB4PTA7eDxwLmxlbmd0aDt4KyspXys9cFt4XTtsZXQgeT11Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS1fO2YuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLHkpLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLHApLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldHNUZXh0dXJlIixnLnRleHR1cmUsciksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplIixnLnNpemUpfWVsc2V7bGV0IGQ9cD09PXZvaWQgMD8wOnAubGVuZ3RoLGc9blt1LmlkXTtpZihnPT09dm9pZCAwfHxnLmxlbmd0aCE9PWQpe2c9W107Zm9yKGxldCBTPTA7UzxkO1MrKylnW1NdPVtTLDBdO25bdS5pZF09Z31mb3IobGV0IFM9MDtTPGQ7UysrKXtsZXQgQz1nW1NdO0NbMF09UyxDWzFdPXBbU119Zy5zb3J0KG5tcik7Zm9yKGxldCBTPTA7Uzw4O1MrKylTPGQmJmdbU11bMV0/KHNbU11bMF09Z1tTXVswXSxzW1NdWzFdPWdbU11bMV0pOihzW1NdWzBdPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHNbU11bMV09MCk7cy5zb3J0KHJtcik7bGV0IF89dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24seT11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwseD0wO2ZvcihsZXQgUz0wO1M8ODtTKyspe2xldCBDPXNbU10sUD1DWzBdLGs9Q1sxXTtQIT09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVImJms/KF8mJnUuZ2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrUykhPT1fW1BdJiZ1LnNldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK1MsX1tQXSkseSYmdS5nZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTKSE9PXlbUF0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrUyx5W1BdKSxpW1NdPWsseCs9ayk6KF8mJnUuaGFzQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrUyk9PT0hMCYmdS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKSx5JiZ1Lmhhc0F0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK1MpPT09ITAmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrUyksaVtTXT0wKX1sZXQgYj11Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS14O2YuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLGIpLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLGkpfX1yZXR1cm57dXBkYXRlOmx9fWZ1bmN0aW9uIG9tcihlLHQscixuKXtsZXQgaT1uZXcgV2Vha01hcDtmdW5jdGlvbiBvKGwpe2xldCBjPW4ucmVuZGVyLmZyYW1lLHU9bC5nZW9tZXRyeSxoPXQuZ2V0KGwsdSk7cmV0dXJuIGkuZ2V0KGgpIT09YyYmKHQudXBkYXRlKGgpLGkuc2V0KGgsYykpLGwuaXNJbnN0YW5jZWRNZXNoJiYobC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKT09PSExJiZsLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpLHIudXBkYXRlKGwuaW5zdGFuY2VNYXRyaXgsMzQ5NjIpLGwuaW5zdGFuY2VDb2xvciE9PW51bGwmJnIudXBkYXRlKGwuaW5zdGFuY2VDb2xvciwzNDk2MikpLGh9ZnVuY3Rpb24gYSgpe2k9bmV3IFdlYWtNYXB9ZnVuY3Rpb24gcyhsKXtsZXQgYz1sLnRhcmdldDtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpLHIucmVtb3ZlKGMuaW5zdGFuY2VNYXRyaXgpLGMuaW5zdGFuY2VDb2xvciE9PW51bGwmJnIucmVtb3ZlKGMuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpvLGRpc3Bvc2U6YX19dmFyIGU2PWNsYXNzIGV4dGVuZHMgeGl7Y29uc3RydWN0b3IodD1udWxsLHI9MSxuPTEsaT0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6cixoZWlnaHQ6bixkZXB0aDppfSx0aGlzLm1hZ0ZpbHRlcj1MaSx0aGlzLm1pbkZpbHRlcj1MaSx0aGlzLndyYXBSPUpvLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2U2LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7dmFyIEhmZT1uZXcgeGksVmZlPW5ldyB0TSxVZmU9bmV3IGU2LHFmZT1uZXcgSDAsTHVlPVtdLGt1ZT1bXSxSdWU9bmV3IEZsb2F0MzJBcnJheSgxNiksTnVlPW5ldyBGbG9hdDMyQXJyYXkoOSksRHVlPW5ldyBGbG9hdDMyQXJyYXkoNCk7ZnVuY3Rpb24gYk0oZSx0LHIpe2xldCBuPWVbMF07aWYobjw9MHx8bj4wKXJldHVybiBlO2xldCBpPXQqcixvPUx1ZVtpXTtpZihvPT09dm9pZCAwJiYobz1uZXcgRmxvYXQzMkFycmF5KGkpLEx1ZVtpXT1vKSx0IT09MCl7bi50b0FycmF5KG8sMCk7Zm9yKGxldCBhPTEscz0wO2EhPT10OysrYSlzKz1yLGVbYV0udG9BcnJheShvLHMpfXJldHVybiBvfWZ1bmN0aW9uIGhzKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspaWYoZVtyXSE9PXRbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQ2EoZSx0KXtmb3IobGV0IHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZVtyXT10W3JdfWZ1bmN0aW9uICRVKGUsdCl7bGV0IHI9a3VlW3RdO3I9PT12b2lkIDAmJihyPW5ldyBJbnQzMkFycmF5KHQpLGt1ZVt0XT1yKTtmb3IobGV0IG49MDtuIT09dDsrK24pcltuXT1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtyZXR1cm4gcn1mdW5jdGlvbiBhbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO3JbMF0hPT10JiYoZS51bmlmb3JtMWYodGhpcy5hZGRyLHQpLHJbMF09dCl9ZnVuY3Rpb24gc21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKHJbMF0hPT10Lnh8fHJbMV0hPT10LnkpJiYoZS51bmlmb3JtMmYodGhpcy5hZGRyLHQueCx0LnkpLHJbMF09dC54LHJbMV09dC55KTtlbHNle2lmKGhzKHIsdCkpcmV0dXJuO2UudW5pZm9ybTJmdih0aGlzLmFkZHIsdCksQ2Eocix0KX19ZnVuY3Rpb24gbG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKHJbMF0hPT10Lnh8fHJbMV0hPT10Lnl8fHJbMl0hPT10LnopJiYoZS51bmlmb3JtM2YodGhpcy5hZGRyLHQueCx0LnksdC56KSxyWzBdPXQueCxyWzFdPXQueSxyWzJdPXQueik7ZWxzZSBpZih0LnIhPT12b2lkIDApKHJbMF0hPT10LnJ8fHJbMV0hPT10Lmd8fHJbMl0hPT10LmIpJiYoZS51bmlmb3JtM2YodGhpcy5hZGRyLHQucix0LmcsdC5iKSxyWzBdPXQucixyWzFdPXQuZyxyWzJdPXQuYik7ZWxzZXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm0zZnYodGhpcy5hZGRyLHQpLENhKHIsdCl9fWZ1bmN0aW9uIGNtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7aWYodC54IT09dm9pZCAwKShyWzBdIT09dC54fHxyWzFdIT09dC55fHxyWzJdIT09dC56fHxyWzNdIT09dC53KSYmKGUudW5pZm9ybTRmKHRoaXMuYWRkcix0LngsdC55LHQueix0LncpLHJbMF09dC54LHJbMV09dC55LHJbMl09dC56LHJbM109dC53KTtlbHNle2lmKGhzKHIsdCkpcmV0dXJuO2UudW5pZm9ybTRmdih0aGlzLmFkZHIsdCksQ2Eocix0KX19ZnVuY3Rpb24gdW1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZSxuPXQuZWxlbWVudHM7aWYobj09PXZvaWQgMCl7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSx0KSxDYShyLHQpfWVsc2V7aWYoaHMocixuKSlyZXR1cm47RHVlLnNldChuKSxlLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLER1ZSksQ2EocixuKX19ZnVuY3Rpb24gaG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZSxuPXQuZWxlbWVudHM7aWYobj09PXZvaWQgMCl7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSx0KSxDYShyLHQpfWVsc2V7aWYoaHMocixuKSlyZXR1cm47TnVlLnNldChuKSxlLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLE51ZSksQ2EocixuKX19ZnVuY3Rpb24gZm1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZSxuPXQuZWxlbWVudHM7aWYobj09PXZvaWQgMCl7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSx0KSxDYShyLHQpfWVsc2V7aWYoaHMocixuKSlyZXR1cm47UnVlLnNldChuKSxlLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLFJ1ZSksQ2EocixuKX19ZnVuY3Rpb24gcG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtyWzBdIT09dCYmKGUudW5pZm9ybTFpKHRoaXMuYWRkcix0KSxyWzBdPXQpfWZ1bmN0aW9uIGRtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7aHMocix0KXx8KGUudW5pZm9ybTJpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24gbW1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtM2l2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBnbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpLENhKHIsdCkpfWZ1bmN0aW9uIF9tcihlLHQpe2xldCByPXRoaXMuY2FjaGU7clswXSE9PXQmJihlLnVuaWZvcm0xdWkodGhpcy5hZGRyLHQpLHJbMF09dCl9ZnVuY3Rpb24geW1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtMnVpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24gdm1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24geG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24gYm1yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNhZmVTZXRUZXh0dXJlMkQodHx8SGZlLGkpfWZ1bmN0aW9uIHdtcihlLHQscil7bGV0IG49dGhpcy5jYWNoZSxpPXIuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO25bMF0hPT1pJiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLGkpLG5bMF09aSksci5zZXRUZXh0dXJlM0QodHx8VWZlLGkpfWZ1bmN0aW9uIFNtcihlLHQscil7bGV0IG49dGhpcy5jYWNoZSxpPXIuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO25bMF0hPT1pJiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLGkpLG5bMF09aSksci5zYWZlU2V0VGV4dHVyZUN1YmUodHx8cWZlLGkpfWZ1bmN0aW9uIE1tcihlLHQscil7bGV0IG49dGhpcy5jYWNoZSxpPXIuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO25bMF0hPT1pJiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLGkpLG5bMF09aSksci5zZXRUZXh0dXJlMkRBcnJheSh0fHxWZmUsaSl9ZnVuY3Rpb24gRW1yKGUpe3N3aXRjaChlKXtjYXNlIDUxMjY6cmV0dXJuIGFtcjtjYXNlIDM1NjY0OnJldHVybiBzbXI7Y2FzZSAzNTY2NTpyZXR1cm4gbG1yO2Nhc2UgMzU2NjY6cmV0dXJuIGNtcjtjYXNlIDM1Njc0OnJldHVybiB1bXI7Y2FzZSAzNTY3NTpyZXR1cm4gaG1yO2Nhc2UgMzU2NzY6cmV0dXJuIGZtcjtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gcG1yO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gZG1yO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gbW1yO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gZ21yO2Nhc2UgNTEyNTpyZXR1cm4gX21yO2Nhc2UgMzYyOTQ6cmV0dXJuIHltcjtjYXNlIDM2Mjk1OnJldHVybiB2bXI7Y2FzZSAzNjI5NjpyZXR1cm4geG1yO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gYm1yO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiB3bXI7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gU21yO2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIE1tcn19ZnVuY3Rpb24gVG1yKGUsdCl7ZS51bmlmb3JtMWZ2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBDbXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSwyKTtlLnVuaWZvcm0yZnYodGhpcy5hZGRyLHIpfWZ1bmN0aW9uIEFtcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDMpO2UudW5pZm9ybTNmdih0aGlzLmFkZHIscil9ZnVuY3Rpb24gUG1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsNCk7ZS51bmlmb3JtNGZ2KHRoaXMuYWRkcixyKX1mdW5jdGlvbiBJbXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSw0KTtlLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHIpfWZ1bmN0aW9uIExtcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDkpO2UudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEscil9ZnVuY3Rpb24ga21yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsMTYpO2UudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEscil9ZnVuY3Rpb24gUm1yKGUsdCl7ZS51bmlmb3JtMWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBObXIoZSx0KXtlLnVuaWZvcm0yaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIERtcihlLHQpe2UudW5pZm9ybTNpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gT21yKGUsdCl7ZS51bmlmb3JtNGl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiB6bXIoZSx0KXtlLnVuaWZvcm0xdWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBGbXIoZSx0KXtlLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBCbXIoZSx0KXtlLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBIbXIoZSx0KXtlLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBWbXIoZSx0LHIpe2xldCBuPXQubGVuZ3RoLGk9JFUocixuKTtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgbz0wO28hPT1uOysrbylyLnNhZmVTZXRUZXh0dXJlMkQodFtvXXx8SGZlLGlbb10pfWZ1bmN0aW9uIFVtcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT0kVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2V0VGV4dHVyZTNEKHRbb118fFVmZSxpW29dKX1mdW5jdGlvbiBxbXIoZSx0LHIpe2xldCBuPXQubGVuZ3RoLGk9JFUocixuKTtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgbz0wO28hPT1uOysrbylyLnNhZmVTZXRUZXh0dXJlQ3ViZSh0W29dfHxxZmUsaVtvXSl9ZnVuY3Rpb24gR21yKGUsdCxyKXtsZXQgbj10Lmxlbmd0aCxpPSRVKHIsbik7ZS51bmlmb3JtMWl2KHRoaXMuYWRkcixpKTtmb3IobGV0IG89MDtvIT09bjsrK28pci5zZXRUZXh0dXJlMkRBcnJheSh0W29dfHxWZmUsaVtvXSl9ZnVuY3Rpb24gV21yKGUpe3N3aXRjaChlKXtjYXNlIDUxMjY6cmV0dXJuIFRtcjtjYXNlIDM1NjY0OnJldHVybiBDbXI7Y2FzZSAzNTY2NTpyZXR1cm4gQW1yO2Nhc2UgMzU2NjY6cmV0dXJuIFBtcjtjYXNlIDM1Njc0OnJldHVybiBJbXI7Y2FzZSAzNTY3NTpyZXR1cm4gTG1yO2Nhc2UgMzU2NzY6cmV0dXJuIGttcjtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gUm1yO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gTm1yO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gRG1yO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gT21yO2Nhc2UgNTEyNTpyZXR1cm4gem1yO2Nhc2UgMzYyOTQ6cmV0dXJuIEZtcjtjYXNlIDM2Mjk1OnJldHVybiBCbXI7Y2FzZSAzNjI5NjpyZXR1cm4gSG1yO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gVm1yO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBVbXI7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gcW1yO2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIEdtcn19ZnVuY3Rpb24gWW1yKGUsdCxyKXt0aGlzLmlkPWUsdGhpcy5hZGRyPXIsdGhpcy5jYWNoZT1bXSx0aGlzLnNldFZhbHVlPUVtcih0LnR5cGUpfWZ1bmN0aW9uIEdmZShlLHQscil7dGhpcy5pZD1lLHRoaXMuYWRkcj1yLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNldFZhbHVlPVdtcih0LnR5cGUpfUdmZS5wcm90b3R5cGUudXBkYXRlQ2FjaGU9ZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcy5jYWNoZTtlIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiZ0Lmxlbmd0aCE9PWUubGVuZ3RoJiYodGhpcy5jYWNoZT1uZXcgRmxvYXQzMkFycmF5KGUubGVuZ3RoKSksQ2EodCxlKX07ZnVuY3Rpb24gV2ZlKGUpe3RoaXMuaWQ9ZSx0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX1XZmUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKGUsdCxyKXtsZXQgbj10aGlzLnNlcTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSl7bGV0IGE9bltpXTthLnNldFZhbHVlKGUsdFthLmlkXSxyKX19O3ZhciBkdXQ9LyhcdyspKFxdKT8oXFt8XC4pPy9nO2Z1bmN0aW9uIE91ZShlLHQpe2Uuc2VxLnB1c2godCksZS5tYXBbdC5pZF09dH1mdW5jdGlvbiBqbXIoZSx0LHIpe2xldCBuPWUubmFtZSxpPW4ubGVuZ3RoO2ZvcihkdXQubGFzdEluZGV4PTA7Oyl7bGV0IG89ZHV0LmV4ZWMobiksYT1kdXQubGFzdEluZGV4LHM9b1sxXSxsPW9bMl09PT0iXSIsYz1vWzNdO2lmKGwmJihzPXN8MCksYz09PXZvaWQgMHx8Yz09PSJbIiYmYSsyPT09aSl7T3VlKHIsYz09PXZvaWQgMD9uZXcgWW1yKHMsZSx0KTpuZXcgR2ZlKHMsZSx0KSk7YnJlYWt9ZWxzZXtsZXQgaD1yLm1hcFtzXTtoPT09dm9pZCAwJiYoaD1uZXcgV2ZlKHMpLE91ZShyLGgpKSxyPWh9fX1mdW5jdGlvbiBCMChlLHQpe3RoaXMuc2VxPVtdLHRoaXMubWFwPXt9O2xldCByPWUuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LDM1NzE4KTtmb3IobGV0IG49MDtuPHI7KytuKXtsZXQgaT1lLmdldEFjdGl2ZVVuaWZvcm0odCxuKSxvPWUuZ2V0VW5pZm9ybUxvY2F0aW9uKHQsaS5uYW1lKTtqbXIoaSxvLHRoaXMpfX1CMC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oZSx0LHIsbil7bGV0IGk9dGhpcy5tYXBbdF07aSE9PXZvaWQgMCYmaS5zZXRWYWx1ZShlLHIsbil9O0IwLnByb3RvdHlwZS5zZXRPcHRpb25hbD1mdW5jdGlvbihlLHQscil7bGV0IG49dFtyXTtuIT09dm9pZCAwJiZ0aGlzLnNldFZhbHVlKGUscixuKX07QjAudXBsb2FkPWZ1bmN0aW9uKGUsdCxyLG4pe2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aSE9PW87KytpKXtsZXQgYT10W2ldLHM9clthLmlkXTtzLm5lZWRzVXBkYXRlIT09ITEmJmEuc2V0VmFsdWUoZSxzLnZhbHVlLG4pfX07QjAuc2VxV2l0aFZhbHVlPWZ1bmN0aW9uKGUsdCl7bGV0IHI9W107Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPWVbbl07by5pZCBpbiB0JiZyLnB1c2gobyl9cmV0dXJuIHJ9O2Z1bmN0aW9uIHp1ZShlLHQscil7bGV0IG49ZS5jcmVhdGVTaGFkZXIodCk7cmV0dXJuIGUuc2hhZGVyU291cmNlKG4sciksZS5jb21waWxlU2hhZGVyKG4pLG59dmFyIFhtcj0wO2Z1bmN0aW9uICRtcihlKXtsZXQgdD1lLnNwbGl0KGAKYCk7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT1yKzErIjogIit0W3JdO3JldHVybiB0LmpvaW4oYApgKX1mdW5jdGlvbiBLbXIoZSl7c3dpdGNoKGUpe2Nhc2UgUWQ6cmV0dXJuWyJMaW5lYXIiLCIoIHZhbHVlICkiXTtjYXNlIFluOnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCBlbmNvZGluZzoiLGUpLFsiTGluZWFyIiwiKCB2YWx1ZSApIl19fWZ1bmN0aW9uIEZ1ZShlLHQscil7bGV0IG49ZS5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMyksaT1lLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBuJiZpPT09IiI/IiI6ci50b1VwcGVyQ2FzZSgpK2AKCmAraStgCgpgKyRtcihlLmdldFNoYWRlclNvdXJjZSh0KSl9ZnVuY3Rpb24gWm1yKGUsdCl7bGV0IHI9S21yKHQpO3JldHVybiJ2ZWM0ICIrZSsiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8iK3JbMF0rclsxXSsiOyB9In1mdW5jdGlvbiBKbXIoZSx0KXtsZXQgcjtzd2l0Y2godCl7Y2FzZSBvZmU6cj0iTGluZWFyIjticmVhaztjYXNlIGFmZTpyPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSBzZmU6cj0iT3B0aW1pemVkQ2luZW9uIjticmVhaztjYXNlIGxmZTpyPSJBQ0VTRmlsbWljIjticmVhaztjYXNlIGNmZTpyPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsdCkscj0iTGluZWFyIn1yZXR1cm4idmVjMyAiK2UrIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrcisiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIFFtcihlKXtyZXR1cm5bZS5leHRlbnNpb25EZXJpdmF0aXZlc3x8ZS5lbnZNYXBDdWJlVVZ8fGUuYnVtcE1hcHx8ZS50YW5nZW50U3BhY2VOb3JtYWxNYXB8fGUuY2xlYXJjb2F0Tm9ybWFsTWFwfHxlLmZsYXRTaGFkaW5nfHxlLnNoYWRlcklEPT09InBoeXNpY2FsIj8iI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGUiOiIiLChlLmV4dGVuc2lvbkZyYWdEZXB0aHx8ZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZSI6IiIsZS5leHRlbnNpb25EcmF3QnVmZmVycyYmZS5yZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzPyIjZXh0ZW5zaW9uIEdMX0VYVF9kcmF3X2J1ZmZlcnMgOiByZXF1aXJlIjoiIiwoZS5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxlLmVudk1hcHx8ZS50cmFuc21pc3Npb24pJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2V4dGVuc2lvbiBHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIDogZW5hYmxlIjoiIl0uZmlsdGVyKEJQKS5qb2luKGAKYCl9ZnVuY3Rpb24gdGdyKGUpe2xldCB0PVtdO2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO24hPT0hMSYmdC5wdXNoKCIjZGVmaW5lICIrcisiICIrbil9cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIGVncihlLHQpe2xldCByPXt9LG49ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgaT0wO2k8bjtpKyspe2xldCBvPWUuZ2V0QWN0aXZlQXR0cmliKHQsaSksYT1vLm5hbWUscz0xO28udHlwZT09PTM1Njc0JiYocz0yKSxvLnR5cGU9PT0zNTY3NSYmKHM9Myksby50eXBlPT09MzU2NzYmJihzPTQpLHJbYV09e3R5cGU6by50eXBlLGxvY2F0aW9uOmUuZ2V0QXR0cmliTG9jYXRpb24odCxhKSxsb2NhdGlvblNpemU6c319cmV0dXJuIHJ9ZnVuY3Rpb24gQlAoZSl7cmV0dXJuIGUhPT0iIn1mdW5jdGlvbiBCdWUoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUUy9nLHQubnVtRGlyTGlnaHRzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVFMvZyx0Lm51bVNwb3RMaWdodHMpLnJlcGxhY2UoL05VTV9SRUNUX0FSRUFfTElHSFRTL2csdC5udW1SZWN0QXJlYUxpZ2h0cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUUy9nLHQubnVtUG9pbnRMaWdodHMpLnJlcGxhY2UoL05VTV9IRU1JX0xJR0hUUy9nLHQubnVtSGVtaUxpZ2h0cykucmVwbGFjZSgvTlVNX0RJUl9MSUdIVF9TSEFET1dTL2csdC5udW1EaXJMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVNwb3RMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVF9TSEFET1dTL2csdC5udW1Qb2ludExpZ2h0U2hhZG93cyl9ZnVuY3Rpb24gSHVlKGUsdCl7cmV0dXJuIGUucmVwbGFjZSgvTlVNX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMpLnJlcGxhY2UoL1VOSU9OX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMtdC5udW1DbGlwSW50ZXJzZWN0aW9uKX12YXIgcmdyPS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gUXV0KGUpe3JldHVybiBlLnJlcGxhY2UocmdyLG5ncil9ZnVuY3Rpb24gbmdyKGUsdCl7bGV0IHI9aHJbdF07aWYocj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3QgcmVzb2x2ZSAjaW5jbHVkZSA8Iit0KyI+Iik7cmV0dXJuIFF1dChyKX12YXIgaWdyPS8jcHJhZ21hIHVucm9sbF9sb29wW1xzXSs/Zm9yIFwoIGludCBpIFw9IChcZCspXDsgaSA8IChcZCspXDsgaSBcK1wrIFwpIFx7KFtcc1xTXSs/KSg/PVx9KVx9L2csb2dyPS8jcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XHMrZm9yXHMqXChccyppbnRccytpXHMqPVxzKihcZCspXHMqO1xzKmlccyo8XHMqKFxkKylccyo7XHMqaVxzKlwrXCtccypcKVxzKnsoW1xzXFNdKz8pfVxzKyNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kL2c7ZnVuY3Rpb24gVnVlKGUpe3JldHVybiBlLnJlcGxhY2Uob2dyLFlmZSkucmVwbGFjZShpZ3IsYWdyKX1mdW5jdGlvbiBhZ3IoZSx0LHIsbil7cmV0dXJuIGNvbnNvbGUud2FybigiV2ViR0xQcm9ncmFtOiAjcHJhZ21hIHVucm9sbF9sb29wIHNoYWRlciBzeW50YXggaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0IHN5bnRheCBpbnN0ZWFkLiIpLFlmZShlLHQscixuKX1mdW5jdGlvbiBZZmUoZSx0LHIsbil7bGV0IGk9IiI7Zm9yKGxldCBvPXBhcnNlSW50KHQpO288cGFyc2VJbnQocik7bysrKWkrPW4ucmVwbGFjZSgvXFtccyppXHMqXF0vZywiWyAiK28rIiBdIikucmVwbGFjZSgvVU5ST0xMRURfTE9PUF9JTkRFWC9nLG8pO3JldHVybiBpfWZ1bmN0aW9uIFV1ZShlKXtsZXQgdD0icHJlY2lzaW9uICIrZS5wcmVjaXNpb24rYCBmbG9hdDsKcHJlY2lzaW9uIGArZS5wcmVjaXNpb24rIiBpbnQ7IjtyZXR1cm4gZS5wcmVjaXNpb249PT0iaGlnaHAiP3QrPWAKI2RlZmluZSBISUdIX1BSRUNJU0lPTmA6ZS5wcmVjaXNpb249PT0ibWVkaXVtcCI/dCs9YAojZGVmaW5lIE1FRElVTV9QUkVDSVNJT05gOmUucHJlY2lzaW9uPT09Imxvd3AiJiYodCs9YAojZGVmaW5lIExPV19QUkVDSVNJT05gKSx0fWZ1bmN0aW9uIHNncihlKXtsZXQgdD0iU0hBRE9XTUFQX1RZUEVfQkFTSUMiO3JldHVybiBlLnNoYWRvd01hcFR5cGU9PT1BaHQ/dD0iU0hBRE9XTUFQX1RZUEVfUENGIjplLnNoYWRvd01hcFR5cGU9PT16aGU/dD0iU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQiOmUuc2hhZG93TWFwVHlwZT09PUYzJiYodD0iU0hBRE9XTUFQX1RZUEVfVlNNIiksdH1mdW5jdGlvbiBsZ3IoZSl7bGV0IHQ9IkVOVk1BUF9UWVBFX0NVQkUiO2lmKGUuZW52TWFwKXN3aXRjaChlLmVudk1hcE1vZGUpe2Nhc2Ugbng6Y2FzZSBpeDp0PSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIHhNOmNhc2UgTzY6dD0iRU5WTUFQX1RZUEVfQ1VCRV9VViI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gY2dyKGUpe2xldCB0PSJFTlZNQVBfTU9ERV9SRUZMRUNUSU9OIjtpZihlLmVudk1hcClzd2l0Y2goZS5lbnZNYXBNb2RlKXtjYXNlIGl4OmNhc2UgTzY6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gdWdyKGUpe2xldCB0PSJFTlZNQVBfQkxFTkRJTkdfTk9ORSI7aWYoZS5lbnZNYXApc3dpdGNoKGUuY29tYmluZSl7Y2FzZSBENjp0PSJFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkiO2JyZWFrO2Nhc2UgbmZlOnQ9IkVOVk1BUF9CTEVORElOR19NSVgiO2JyZWFrO2Nhc2UgaWZlOnQ9IkVOVk1BUF9CTEVORElOR19BREQiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGhncihlLHQscixuKXtsZXQgaT1lLmdldENvbnRleHQoKSxvPXIuZGVmaW5lcyxhPXIudmVydGV4U2hhZGVyLHM9ci5mcmFnbWVudFNoYWRlcixsPXNncihyKSxjPWxncihyKSx1PWNncihyKSxoPXVncihyKSxmPXIuaXNXZWJHTDI/IiI6UW1yKHIpLHA9dGdyKG8pLGQ9aS5jcmVhdGVQcm9ncmFtKCksZyxfLHk9ci5nbHNsVmVyc2lvbj8iI3ZlcnNpb24gIityLmdsc2xWZXJzaW9uK2AKYDoiIjtyLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KGc9W3BdLmZpbHRlcihCUCkuam9pbihgCmApLGcubGVuZ3RoPjAmJihnKz1gCmApLF89W2YscF0uZmlsdGVyKEJQKS5qb2luKGAKYCksXy5sZW5ndGg+MCYmKF8rPWAKYCkpOihnPVtVdWUociksIiNkZWZpbmUgU0hBREVSX05BTUUgIityLnNoYWRlck5hbWUscCxyLmluc3RhbmNpbmc/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkciOiIiLHIuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HX0NPTE9SIjoiIixyLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTIjoiIiwiI2RlZmluZSBNQVhfQk9ORVMgIityLm1heEJvbmVzLHIudXNlRm9nJiZyLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixyLnVzZUZvZyYmci5mb2dFeHAyPyIjZGVmaW5lIEZPR19FWFAyIjoiIixyLm1hcD8iI2RlZmluZSBVU0VfTUFQIjoiIixyLmVudk1hcD8iI2RlZmluZSBVU0VfRU5WTUFQIjoiIixyLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsci5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLHIuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixyLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsci5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixyLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixyLm5vcm1hbE1hcCYmci5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixyLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixyLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsci5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLHIuZGlzcGxhY2VtZW50TWFwJiZyLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVVNFX0RJU1BMQUNFTUVOVE1BUCI6IiIsci5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLHIuc3BlY3VsYXJJbnRlbnNpdHlNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQIjoiIixyLnNwZWN1bGFyQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSQ09MT1JNQVAiOiIiLHIucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLHIubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLHIuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixyLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixyLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixyLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixyLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLHIuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixyLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixyLnZlcnRleENvbG9ycz8iI2RlZmluZSBVU0VfQ09MT1IiOiIiLHIudmVydGV4QWxwaGFzPyIjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQSI6IiIsci52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixyLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixyLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixyLnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsci51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6IiIsci5tb3JwaFRhcmdldHM/IiNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUyI6IiIsci5tb3JwaE5vcm1hbHMmJnIuZmxhdFNoYWRpbmc9PT0hMT8iI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTIjoiIixyLm1vcnBoVGFyZ2V0cyYmci5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfVEVYVFVSRSI6IiIsci5tb3JwaFRhcmdldHMmJnIuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX0NPVU5UICIrci5tb3JwaFRhcmdldHNDb3VudDoiIixyLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsci5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLHIuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsci5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6IiIsci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZyLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HIiwiCWF0dHJpYnV0ZSBtYXQ0IGluc3RhbmNlTWF0cml4OyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUiIsIglhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZUNvbG9yOyIsIiNlbmRpZiIsImF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOyIsImF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsiLCJhdHRyaWJ1dGUgdmVjMiB1djsiLCIjaWZkZWYgVVNFX1RBTkdFTlQiLCIJYXR0cmlidXRlIHZlYzQgdGFuZ2VudDsiLCIjZW5kaWYiLCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkiLCIJYXR0cmlidXRlIHZlYzQgY29sb3I7IiwiI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkiLCIJYXR0cmlidXRlIHZlYzMgY29sb3I7IiwiI2VuZGlmIiwiI2lmICggZGVmaW5lZCggVVNFX01PUlBIVEFSR0VUUyApICYmICEgZGVmaW5lZCggTU9SUEhUQVJHRVRTX1RFWFRVUkUgKSApIiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MDsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MzsiLCIJI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMDsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMzsiLCIJI2Vsc2UiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NDsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NzsiLCIJI2VuZGlmIiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9TS0lOTklORyIsIglhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiCWF0dHJpYnV0ZSB2ZWM0IHNraW5XZWlnaHQ7IiwiI2VuZGlmIixgCmBdLmZpbHRlcihCUCkuam9pbihgCmApLF89W2YsVXVlKHIpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrci5zaGFkZXJOYW1lLHAsci51c2VGb2cmJnIuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLHIudXNlRm9nJiZyLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLHIubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLHIubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrYzoiIixyLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsci5lbnZNYXA/IiNkZWZpbmUgIitoOiIiLHIubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixyLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsci5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLHIuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsci5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsci5ub3JtYWxNYXAmJnIub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixyLm5vcm1hbE1hcCYmci50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsci5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsci5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsci5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLHIuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixyLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsci5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLHIuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsci5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsci5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsci5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLHIuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLHIuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixyLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLHIuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixyLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixyLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixyLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixyLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsci52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsci52ZXJ0ZXhDb2xvcnN8fHIuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsci52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixyLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLHIudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLHIuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixyLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixyLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsci5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLHIuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsci5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsci5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJnIucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKHIuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ci5lbnZNYXApJiZyLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsci50b25lTWFwcGluZyE9PUtkPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsci50b25lTWFwcGluZyE9PUtkP2hyLnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsci50b25lTWFwcGluZyE9PUtkP0ptcigidG9uZU1hcHBpbmciLHIudG9uZU1hcHBpbmcpOiIiLHIuZGl0aGVyaW5nPyIjZGVmaW5lIERJVEhFUklORyI6IiIsci5hbHBoYVdyaXRlPyIiOiIjZGVmaW5lIE9QQVFVRSIsaHIuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQsWm1yKCJsaW5lYXJUb091dHB1dFRleGVsIixyLm91dHB1dEVuY29kaW5nKSxyLmRlcHRoUGFja2luZz8iI2RlZmluZSBERVBUSF9QQUNLSU5HICIrci5kZXB0aFBhY2tpbmc6IiIsYApgXS5maWx0ZXIoQlApLmpvaW4oYApgKSksYT1RdXQoYSksYT1CdWUoYSxyKSxhPUh1ZShhLHIpLHM9UXV0KHMpLHM9QnVlKHMscikscz1IdWUocyxyKSxhPVZ1ZShhKSxzPVZ1ZShzKSxyLmlzV2ViR0wyJiZyLmlzUmF3U2hhZGVyTWF0ZXJpYWwhPT0hMCYmKHk9YCN2ZXJzaW9uIDMwMCBlcwpgLGc9WyJwcmVjaXNpb24gbWVkaXVtcCBzYW1wbGVyMkRBcnJheTsiLCIjZGVmaW5lIGF0dHJpYnV0ZSBpbiIsIiNkZWZpbmUgdmFyeWluZyBvdXQiLCIjZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlIl0uam9pbihgCmApK2AKYCtnLF89WyIjZGVmaW5lIHZhcnlpbmcgaW4iLHIuZ2xzbFZlcnNpb249PT1adXQ/IiI6ImxheW91dChsb2NhdGlvbiA9IDApIG91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLHIuZ2xzbFZlcnNpb249PT1adXQ/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oYApgKStgCmArXyk7bGV0IHg9eStnK2EsYj15K18rcyxTPXp1ZShpLDM1NjMzLHgpLEM9enVlKGksMzU2MzIsYik7aWYoaS5hdHRhY2hTaGFkZXIoZCxTKSxpLmF0dGFjaFNoYWRlcihkLEMpLHIuaW5kZXgwQXR0cmlidXRlTmFtZSE9PXZvaWQgMD9pLmJpbmRBdHRyaWJMb2NhdGlvbihkLDAsci5pbmRleDBBdHRyaWJ1dGVOYW1lKTpyLm1vcnBoVGFyZ2V0cz09PSEwJiZpLmJpbmRBdHRyaWJMb2NhdGlvbihkLDAsInBvc2l0aW9uIiksaS5saW5rUHJvZ3JhbShkKSxlLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKXtsZXQgTz1pLmdldFByb2dyYW1JbmZvTG9nKGQpLnRyaW0oKSxEPWkuZ2V0U2hhZGVySW5mb0xvZyhTKS50cmltKCksQj1pLmdldFNoYWRlckluZm9Mb2coQykudHJpbSgpLEk9ITAsTD0hMDtpZihpLmdldFByb2dyYW1QYXJhbWV0ZXIoZCwzNTcxNCk9PT0hMSl7ST0hMTtsZXQgUj1GdWUoaSxTLCJ2ZXJ0ZXgiKSxGPUZ1ZShpLEMsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBTaGFkZXIgRXJyb3IgIitpLmdldEVycm9yKCkrIiAtIFZBTElEQVRFX1NUQVRVUyAiK2kuZ2V0UHJvZ3JhbVBhcmFtZXRlcihkLDM1NzE1KStgCgpQcm9ncmFtIEluZm8gTG9nOiBgK08rYApgK1IrYApgK0YpfWVsc2UgTyE9PSIiP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBQcm9ncmFtIEluZm8gTG9nOiIsTyk6KEQ9PT0iInx8Qj09PSIiKSYmKEw9ITEpO0wmJih0aGlzLmRpYWdub3N0aWNzPXtydW5uYWJsZTpJLHByb2dyYW1Mb2c6Tyx2ZXJ0ZXhTaGFkZXI6e2xvZzpELHByZWZpeDpnfSxmcmFnbWVudFNoYWRlcjp7bG9nOkIscHJlZml4Ol99fSl9aS5kZWxldGVTaGFkZXIoUyksaS5kZWxldGVTaGFkZXIoQyk7bGV0IFA7dGhpcy5nZXRVbmlmb3Jtcz1mdW5jdGlvbigpe3JldHVybiBQPT09dm9pZCAwJiYoUD1uZXcgQjAoaSxkKSksUH07bGV0IGs7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBrPT09dm9pZCAwJiYoaz1lZ3IoaSxkKSksa30sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7bi5yZWxlYXNlU3RhdGVzT2ZQcm9ncmFtKHRoaXMpLGkuZGVsZXRlUHJvZ3JhbShkKSx0aGlzLnByb2dyYW09dm9pZCAwfSx0aGlzLm5hbWU9ci5zaGFkZXJOYW1lLHRoaXMuaWQ9WG1yKyssdGhpcy5jYWNoZUtleT10LHRoaXMudXNlZFRpbWVzPTEsdGhpcy5wcm9ncmFtPWQsdGhpcy52ZXJ0ZXhTaGFkZXI9Uyx0aGlzLmZyYWdtZW50U2hhZGVyPUMsdGhpc312YXIgZmdyPTAsdGh0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFkZXJDYWNoZT1uZXcgTWFwLHRoaXMubWF0ZXJpYWxDYWNoZT1uZXcgTWFwfXVwZGF0ZSh0KXtsZXQgcj10LnZlcnRleFNoYWRlcixuPXQuZnJhZ21lbnRTaGFkZXIsaT10aGlzLl9nZXRTaGFkZXJTdGFnZShyKSxvPXRoaXMuX2dldFNoYWRlclN0YWdlKG4pLGE9dGhpcy5fZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbCh0KTtyZXR1cm4gYS5oYXMoaSk9PT0hMSYmKGEuYWRkKGkpLGkudXNlZFRpbWVzKyspLGEuaGFzKG8pPT09ITEmJihhLmFkZChvKSxvLnVzZWRUaW1lcysrKSx0aGlzfXJlbW92ZSh0KXtsZXQgcj10aGlzLm1hdGVyaWFsQ2FjaGUuZ2V0KHQpO2ZvcihsZXQgbiBvZiByKW4udXNlZFRpbWVzLS0sbi51c2VkVGltZXM9PT0wJiZ0aGlzLnNoYWRlckNhY2hlLmRlbGV0ZShuKTtyZXR1cm4gdGhpcy5tYXRlcmlhbENhY2hlLmRlbGV0ZSh0KSx0aGlzfWdldFZlcnRleFNoYWRlcklEKHQpe3JldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSh0LnZlcnRleFNoYWRlcikuaWR9Z2V0RnJhZ21lbnRTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC5mcmFnbWVudFNoYWRlcikuaWR9ZGlzcG9zZSgpe3RoaXMuc2hhZGVyQ2FjaGUuY2xlYXIoKSx0aGlzLm1hdGVyaWFsQ2FjaGUuY2xlYXIoKX1fZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbCh0KXtsZXQgcj10aGlzLm1hdGVyaWFsQ2FjaGU7cmV0dXJuIHIuaGFzKHQpPT09ITEmJnIuc2V0KHQsbmV3IFNldCksci5nZXQodCl9X2dldFNoYWRlclN0YWdlKHQpe2xldCByPXRoaXMuc2hhZGVyQ2FjaGU7aWYoci5oYXModCk9PT0hMSl7bGV0IG49bmV3IGVodDtyLnNldCh0LG4pfXJldHVybiByLmdldCh0KX19LGVodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaWQ9ZmdyKyssdGhpcy51c2VkVGltZXM9MH19O2Z1bmN0aW9uIHBncihlLHQscixuLGksbyxhKXtsZXQgcz1uZXcgWDMsbD1uZXcgdGh0LGM9W10sdT1pLmlzV2ViR0wyLGg9aS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLGY9aS5mbG9hdFZlcnRleFRleHR1cmVzLHA9aS5tYXhWZXJ0ZXhVbmlmb3JtcyxkPWkudmVydGV4VGV4dHVyZXMsZz1pLnByZWNpc2lvbixfPXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hEaXN0YW5jZU1hdGVyaWFsOiJkaXN0YW5jZVJHQkEiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoidG9vbiIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoUGh5c2ljYWxNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hNYXRjYXBNYXRlcmlhbDoibWF0Y2FwIixMaW5lQmFzaWNNYXRlcmlhbDoiYmFzaWMiLExpbmVEYXNoZWRNYXRlcmlhbDoiZGFzaGVkIixQb2ludHNNYXRlcmlhbDoicG9pbnRzIixTaGFkb3dNYXRlcmlhbDoic2hhZG93IixTcHJpdGVNYXRlcmlhbDoic3ByaXRlIn07ZnVuY3Rpb24geShJKXtsZXQgUj1JLnNrZWxldG9uLmJvbmVzO2lmKGYpcmV0dXJuIDEwMjQ7e2xldCB6PU1hdGguZmxvb3IoKHAtMjApLzQpLFU9TWF0aC5taW4oeixSLmxlbmd0aCk7cmV0dXJuIFU8Ui5sZW5ndGg/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogU2tlbGV0b24gaGFzICIrUi5sZW5ndGgrIiBib25lcy4gVGhpcyBHUFUgc3VwcG9ydHMgIitVKyIuIiksMCk6VX19ZnVuY3Rpb24geChJLEwsUixGLHope2xldCBVPUYuZm9nLFc9SS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0YuZW52aXJvbm1lbnQ6bnVsbCxaPShJLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/cjp0KS5nZXQoSS5lbnZNYXB8fFcpLHJ0PV9bSS50eXBlXSxvdD16LmlzU2tpbm5lZE1lc2g/eSh6KTowO0kucHJlY2lzaW9uIT09bnVsbCYmKGc9aS5nZXRNYXhQcmVjaXNpb24oSS5wcmVjaXNpb24pLGchPT1JLnByZWNpc2lvbiYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW0uZ2V0UGFyYW1ldGVyczoiLEkucHJlY2lzaW9uLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIsZywiaW5zdGVhZC4iKSk7bGV0IHN0LFN0LGJ0LE10O2lmKHJ0KXtsZXQgWD1haFtydF07c3Q9WC52ZXJ0ZXhTaGFkZXIsU3Q9WC5mcmFnbWVudFNoYWRlcn1lbHNlIHN0PUkudmVydGV4U2hhZGVyLFN0PUkuZnJhZ21lbnRTaGFkZXIsbC51cGRhdGUoSSksYnQ9bC5nZXRWZXJ0ZXhTaGFkZXJJRChJKSxNdD1sLmdldEZyYWdtZW50U2hhZGVySUQoSSk7bGV0IGx0PWUuZ2V0UmVuZGVyVGFyZ2V0KCksS3Q9SS5hbHBoYVRlc3Q+MCxfdD1JLmNsZWFyY29hdD4wO3JldHVybntpc1dlYkdMMjp1LHNoYWRlcklEOnJ0LHNoYWRlck5hbWU6SS50eXBlLHZlcnRleFNoYWRlcjpzdCxmcmFnbWVudFNoYWRlcjpTdCxkZWZpbmVzOkkuZGVmaW5lcyxjdXN0b21WZXJ0ZXhTaGFkZXJJRDpidCxjdXN0b21GcmFnbWVudFNoYWRlcklEOk10LGlzUmF3U2hhZGVyTWF0ZXJpYWw6SS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITAsZ2xzbFZlcnNpb246SS5nbHNsVmVyc2lvbixwcmVjaXNpb246ZyxpbnN0YW5jaW5nOnouaXNJbnN0YW5jZWRNZXNoPT09ITAsaW5zdGFuY2luZ0NvbG9yOnouaXNJbnN0YW5jZWRNZXNoPT09ITAmJnouaW5zdGFuY2VDb2xvciE9PW51bGwsc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlczpkLG91dHB1dEVuY29kaW5nOmx0PT09bnVsbD9lLm91dHB1dEVuY29kaW5nOmx0LmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9sdC50ZXh0dXJlLmVuY29kaW5nOlFkLG1hcDohIUkubWFwLG1hdGNhcDohIUkubWF0Y2FwLGVudk1hcDohIVosZW52TWFwTW9kZTpaJiZaLm1hcHBpbmcsZW52TWFwQ3ViZVVWOiEhWiYmKFoubWFwcGluZz09PXhNfHxaLm1hcHBpbmc9PT1PNiksbGlnaHRNYXA6ISFJLmxpZ2h0TWFwLGFvTWFwOiEhSS5hb01hcCxlbWlzc2l2ZU1hcDohIUkuZW1pc3NpdmVNYXAsYnVtcE1hcDohIUkuYnVtcE1hcCxub3JtYWxNYXA6ISFJLm5vcm1hbE1hcCxvYmplY3RTcGFjZU5vcm1hbE1hcDpJLm5vcm1hbE1hcFR5cGU9PT1JZmUsdGFuZ2VudFNwYWNlTm9ybWFsTWFwOkkubm9ybWFsTWFwVHlwZT09PWF4LGRlY29kZVZpZGVvVGV4dHVyZTohIUkubWFwJiZJLm1hcC5pc1ZpZGVvVGV4dHVyZT09PSEwJiZJLm1hcC5lbmNvZGluZz09PVluLGNsZWFyY29hdDpfdCxjbGVhcmNvYXRNYXA6X3QmJiEhSS5jbGVhcmNvYXRNYXAsY2xlYXJjb2F0Um91Z2huZXNzTWFwOl90JiYhIUkuY2xlYXJjb2F0Um91Z2huZXNzTWFwLGNsZWFyY29hdE5vcm1hbE1hcDpfdCYmISFJLmNsZWFyY29hdE5vcm1hbE1hcCxkaXNwbGFjZW1lbnRNYXA6ISFJLmRpc3BsYWNlbWVudE1hcCxyb3VnaG5lc3NNYXA6ISFJLnJvdWdobmVzc01hcCxtZXRhbG5lc3NNYXA6ISFJLm1ldGFsbmVzc01hcCxzcGVjdWxhck1hcDohIUkuc3BlY3VsYXJNYXAsc3BlY3VsYXJJbnRlbnNpdHlNYXA6ISFJLnNwZWN1bGFySW50ZW5zaXR5TWFwLHNwZWN1bGFyQ29sb3JNYXA6ISFJLnNwZWN1bGFyQ29sb3JNYXAsYWxwaGFNYXA6ISFJLmFscGhhTWFwLGFscGhhVGVzdDpLdCxhbHBoYVdyaXRlOkkuYWxwaGFXcml0ZXx8SS50cmFuc3BhcmVudCxncmFkaWVudE1hcDohIUkuZ3JhZGllbnRNYXAsc2hlZW46SS5zaGVlbj4wLHNoZWVuQ29sb3JNYXA6ISFJLnNoZWVuQ29sb3JNYXAsc2hlZW5Sb3VnaG5lc3NNYXA6ISFJLnNoZWVuUm91Z2huZXNzTWFwLHRyYW5zbWlzc2lvbjpJLnRyYW5zbWlzc2lvbj4wLHRyYW5zbWlzc2lvbk1hcDohIUkudHJhbnNtaXNzaW9uTWFwLHRoaWNrbmVzc01hcDohIUkudGhpY2tuZXNzTWFwLGNvbWJpbmU6SS5jb21iaW5lLHZlcnRleFRhbmdlbnRzOiEhSS5ub3JtYWxNYXAmJiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudCx2ZXJ0ZXhDb2xvcnM6SS52ZXJ0ZXhDb2xvcnMsdmVydGV4QWxwaGFzOkkudmVydGV4Q29sb3JzPT09ITAmJiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3ImJnouZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZT09PTQsdmVydGV4VXZzOiEhSS5tYXB8fCEhSS5idW1wTWFwfHwhIUkubm9ybWFsTWFwfHwhIUkuc3BlY3VsYXJNYXB8fCEhSS5hbHBoYU1hcHx8ISFJLmVtaXNzaXZlTWFwfHwhIUkucm91Z2huZXNzTWFwfHwhIUkubWV0YWxuZXNzTWFwfHwhIUkuY2xlYXJjb2F0TWFwfHwhIUkuY2xlYXJjb2F0Um91Z2huZXNzTWFwfHwhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwfHwhIUkuZGlzcGxhY2VtZW50TWFwfHwhIUkudHJhbnNtaXNzaW9uTWFwfHwhIUkudGhpY2tuZXNzTWFwfHwhIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fCEhSS5zcGVjdWxhckNvbG9yTWFwfHwhIUkuc2hlZW5Db2xvck1hcHx8ISFJLnNoZWVuUm91Z2huZXNzTWFwLHV2c1ZlcnRleE9ubHk6ISghIUkubWFwfHwhIUkuYnVtcE1hcHx8ISFJLm5vcm1hbE1hcHx8ISFJLnNwZWN1bGFyTWFwfHwhIUkuYWxwaGFNYXB8fCEhSS5lbWlzc2l2ZU1hcHx8ISFJLnJvdWdobmVzc01hcHx8ISFJLm1ldGFsbmVzc01hcHx8ISFJLmNsZWFyY29hdE5vcm1hbE1hcHx8SS50cmFuc21pc3Npb24+MHx8ISFJLnRyYW5zbWlzc2lvbk1hcHx8ISFJLnRoaWNrbmVzc01hcHx8ISFJLnNwZWN1bGFySW50ZW5zaXR5TWFwfHwhIUkuc3BlY3VsYXJDb2xvck1hcHx8SS5zaGVlbj4wfHwhIUkuc2hlZW5Db2xvck1hcHx8ISFJLnNoZWVuUm91Z2huZXNzTWFwKSYmISFJLmRpc3BsYWNlbWVudE1hcCxmb2c6ISFVLHVzZUZvZzpJLmZvZyxmb2dFeHAyOlUmJlUuaXNGb2dFeHAyLGZsYXRTaGFkaW5nOiEhSS5mbGF0U2hhZGluZyxzaXplQXR0ZW51YXRpb246SS5zaXplQXR0ZW51YXRpb24sbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpoLHNraW5uaW5nOnouaXNTa2lubmVkTWVzaD09PSEwJiZvdD4wLG1heEJvbmVzOm90LHVzZVZlcnRleFRleHR1cmU6Zixtb3JwaFRhcmdldHM6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLG1vcnBoTm9ybWFsczohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLG1vcnBoVGFyZ2V0c0NvdW50OiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj96Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg6MCxudW1EaXJMaWdodHM6TC5kaXJlY3Rpb25hbC5sZW5ndGgsbnVtUG9pbnRMaWdodHM6TC5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpMLnNwb3QubGVuZ3RoLG51bVJlY3RBcmVhTGlnaHRzOkwucmVjdEFyZWEubGVuZ3RoLG51bUhlbWlMaWdodHM6TC5oZW1pLmxlbmd0aCxudW1EaXJMaWdodFNoYWRvd3M6TC5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGgsbnVtUG9pbnRMaWdodFNoYWRvd3M6TC5wb2ludFNoYWRvd01hcC5sZW5ndGgsbnVtU3BvdExpZ2h0U2hhZG93czpMLnNwb3RTaGFkb3dNYXAubGVuZ3RoLG51bUNsaXBwaW5nUGxhbmVzOmEubnVtUGxhbmVzLG51bUNsaXBJbnRlcnNlY3Rpb246YS5udW1JbnRlcnNlY3Rpb24sZGl0aGVyaW5nOkkuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6ZS5zaGFkb3dNYXAuZW5hYmxlZCYmUi5sZW5ndGg+MCxzaGFkb3dNYXBUeXBlOmUuc2hhZG93TWFwLnR5cGUsdG9uZU1hcHBpbmc6SS50b25lTWFwcGVkP2UudG9uZU1hcHBpbmc6S2QscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6ZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6SS5wcmVtdWx0aXBsaWVkQWxwaGEsZG91YmxlU2lkZWQ6SS5zaWRlPT09THYsZmxpcFNpZGVkOkkuc2lkZT09PUlpLGRlcHRoUGFja2luZzpJLmRlcHRoUGFja2luZyE9PXZvaWQgMD9JLmRlcHRoUGFja2luZzohMSxpbmRleDBBdHRyaWJ1dGVOYW1lOkkuaW5kZXgwQXR0cmlidXRlTmFtZSxleHRlbnNpb25EZXJpdmF0aXZlczpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcyxleHRlbnNpb25GcmFnRGVwdGg6SS5leHRlbnNpb25zJiZJLmV4dGVuc2lvbnMuZnJhZ0RlcHRoLGV4dGVuc2lvbkRyYXdCdWZmZXJzOkkuZXh0ZW5zaW9ucyYmSS5leHRlbnNpb25zLmRyYXdCdWZmZXJzLGV4dGVuc2lvblNoYWRlclRleHR1cmVMT0Q6SS5leHRlbnNpb25zJiZJLmV4dGVuc2lvbnMuc2hhZGVyVGV4dHVyZUxPRCxyZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aDp1fHxuLmhhcygiRVhUX2ZyYWdfZGVwdGgiKSxyZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzOnV8fG4uaGFzKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKSxyZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q6dXx8bi5oYXMoIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSxjdXN0b21Qcm9ncmFtQ2FjaGVLZXk6SS5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkoKX19ZnVuY3Rpb24gYihJKXtsZXQgTD1bXTtpZihJLnNoYWRlcklEP0wucHVzaChJLnNoYWRlcklEKTooTC5wdXNoKEkuY3VzdG9tVmVydGV4U2hhZGVySUQpLEwucHVzaChJLmN1c3RvbUZyYWdtZW50U2hhZGVySUQpKSxJLmRlZmluZXMhPT12b2lkIDApZm9yKGxldCBSIGluIEkuZGVmaW5lcylMLnB1c2goUiksTC5wdXNoKEkuZGVmaW5lc1tSXSk7cmV0dXJuIEkuaXNSYXdTaGFkZXJNYXRlcmlhbD09PSExJiYoUyhMLEkpLEMoTCxJKSxMLnB1c2goZS5vdXRwdXRFbmNvZGluZykpLEwucHVzaChJLmN1c3RvbVByb2dyYW1DYWNoZUtleSksTC5qb2luKCl9ZnVuY3Rpb24gUyhJLEwpe0kucHVzaChMLnByZWNpc2lvbiksSS5wdXNoKEwub3V0cHV0RW5jb2RpbmcpLEkucHVzaChMLmVudk1hcE1vZGUpLEkucHVzaChMLmNvbWJpbmUpLEkucHVzaChMLnZlcnRleFV2cyksSS5wdXNoKEwuZm9nRXhwMiksSS5wdXNoKEwuc2l6ZUF0dGVudWF0aW9uKSxJLnB1c2goTC5tYXhCb25lcyksSS5wdXNoKEwubW9ycGhUYXJnZXRzQ291bnQpLEkucHVzaChMLm51bURpckxpZ2h0cyksSS5wdXNoKEwubnVtUG9pbnRMaWdodHMpLEkucHVzaChMLm51bVNwb3RMaWdodHMpLEkucHVzaChMLm51bUhlbWlMaWdodHMpLEkucHVzaChMLm51bVJlY3RBcmVhTGlnaHRzKSxJLnB1c2goTC5udW1EaXJMaWdodFNoYWRvd3MpLEkucHVzaChMLm51bVBvaW50TGlnaHRTaGFkb3dzKSxJLnB1c2goTC5udW1TcG90TGlnaHRTaGFkb3dzKSxJLnB1c2goTC5zaGFkb3dNYXBUeXBlKSxJLnB1c2goTC50b25lTWFwcGluZyksSS5wdXNoKEwubnVtQ2xpcHBpbmdQbGFuZXMpLEkucHVzaChMLm51bUNsaXBJbnRlcnNlY3Rpb24pLEkucHVzaChMLmFscGhhV3JpdGUpfWZ1bmN0aW9uIEMoSSxMKXtzLmRpc2FibGVBbGwoKSxMLmlzV2ViR0wyJiZzLmVuYWJsZSgwKSxMLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMmJnMuZW5hYmxlKDEpLEwuaW5zdGFuY2luZyYmcy5lbmFibGUoMiksTC5pbnN0YW5jaW5nQ29sb3ImJnMuZW5hYmxlKDMpLEwubWFwJiZzLmVuYWJsZSg0KSxMLm1hdGNhcCYmcy5lbmFibGUoNSksTC5lbnZNYXAmJnMuZW5hYmxlKDYpLEwuZW52TWFwQ3ViZVVWJiZzLmVuYWJsZSg3KSxMLmxpZ2h0TWFwJiZzLmVuYWJsZSg4KSxMLmFvTWFwJiZzLmVuYWJsZSg5KSxMLmVtaXNzaXZlTWFwJiZzLmVuYWJsZSgxMCksTC5idW1wTWFwJiZzLmVuYWJsZSgxMSksTC5ub3JtYWxNYXAmJnMuZW5hYmxlKDEyKSxMLm9iamVjdFNwYWNlTm9ybWFsTWFwJiZzLmVuYWJsZSgxMyksTC50YW5nZW50U3BhY2VOb3JtYWxNYXAmJnMuZW5hYmxlKDE0KSxMLmNsZWFyY29hdCYmcy5lbmFibGUoMTUpLEwuY2xlYXJjb2F0TWFwJiZzLmVuYWJsZSgxNiksTC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDE3KSxMLmNsZWFyY29hdE5vcm1hbE1hcCYmcy5lbmFibGUoMTgpLEwuZGlzcGxhY2VtZW50TWFwJiZzLmVuYWJsZSgxOSksTC5zcGVjdWxhck1hcCYmcy5lbmFibGUoMjApLEwucm91Z2huZXNzTWFwJiZzLmVuYWJsZSgyMSksTC5tZXRhbG5lc3NNYXAmJnMuZW5hYmxlKDIyKSxMLmdyYWRpZW50TWFwJiZzLmVuYWJsZSgyMyksTC5hbHBoYU1hcCYmcy5lbmFibGUoMjQpLEwuYWxwaGFUZXN0JiZzLmVuYWJsZSgyNSksTC52ZXJ0ZXhDb2xvcnMmJnMuZW5hYmxlKDI2KSxMLnZlcnRleEFscGhhcyYmcy5lbmFibGUoMjcpLEwudmVydGV4VXZzJiZzLmVuYWJsZSgyOCksTC52ZXJ0ZXhUYW5nZW50cyYmcy5lbmFibGUoMjkpLEwudXZzVmVydGV4T25seSYmcy5lbmFibGUoMzApLEwuZm9nJiZzLmVuYWJsZSgzMSksSS5wdXNoKHMubWFzaykscy5kaXNhYmxlQWxsKCksTC51c2VGb2cmJnMuZW5hYmxlKDApLEwuZmxhdFNoYWRpbmcmJnMuZW5hYmxlKDEpLEwubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmcy5lbmFibGUoMiksTC5za2lubmluZyYmcy5lbmFibGUoMyksTC51c2VWZXJ0ZXhUZXh0dXJlJiZzLmVuYWJsZSg0KSxMLm1vcnBoVGFyZ2V0cyYmcy5lbmFibGUoNSksTC5tb3JwaE5vcm1hbHMmJnMuZW5hYmxlKDYpLEwucHJlbXVsdGlwbGllZEFscGhhJiZzLmVuYWJsZSg3KSxMLnNoYWRvd01hcEVuYWJsZWQmJnMuZW5hYmxlKDgpLEwucGh5c2ljYWxseUNvcnJlY3RMaWdodHMmJnMuZW5hYmxlKDkpLEwuZG91YmxlU2lkZWQmJnMuZW5hYmxlKDEwKSxMLmZsaXBTaWRlZCYmcy5lbmFibGUoMTEpLEwuZGVwdGhQYWNraW5nJiZzLmVuYWJsZSgxMiksTC5kaXRoZXJpbmcmJnMuZW5hYmxlKDEzKSxMLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZzLmVuYWJsZSgxNCksTC5zcGVjdWxhckNvbG9yTWFwJiZzLmVuYWJsZSgxNSksTC50cmFuc21pc3Npb24mJnMuZW5hYmxlKDE2KSxMLnRyYW5zbWlzc2lvbk1hcCYmcy5lbmFibGUoMTcpLEwudGhpY2tuZXNzTWFwJiZzLmVuYWJsZSgxOCksTC5zaGVlbiYmcy5lbmFibGUoMTkpLEwuc2hlZW5Db2xvck1hcCYmcy5lbmFibGUoMjApLEwuc2hlZW5Sb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDIxKSxMLmRlY29kZVZpZGVvVGV4dHVyZSYmcy5lbmFibGUoMjIpLEkucHVzaChzLm1hc2spfWZ1bmN0aW9uIFAoSSl7bGV0IEw9X1tJLnR5cGVdLFI7aWYoTCl7bGV0IEY9YWhbTF07Uj1PZmUuY2xvbmUoRi51bmlmb3Jtcyl9ZWxzZSBSPUkudW5pZm9ybXM7cmV0dXJuIFJ9ZnVuY3Rpb24gayhJLEwpe2xldCBSO2ZvcihsZXQgRj0wLHo9Yy5sZW5ndGg7Rjx6O0YrKyl7bGV0IFU9Y1tGXTtpZihVLmNhY2hlS2V5PT09TCl7Uj1VLCsrUi51c2VkVGltZXM7YnJlYWt9fXJldHVybiBSPT09dm9pZCAwJiYoUj1uZXcgaGdyKGUsTCxJLG8pLGMucHVzaChSKSksUn1mdW5jdGlvbiBPKEkpe2lmKC0tSS51c2VkVGltZXM9PT0wKXtsZXQgTD1jLmluZGV4T2YoSSk7Y1tMXT1jW2MubGVuZ3RoLTFdLGMucG9wKCksSS5kZXN0cm95KCl9fWZ1bmN0aW9uIEQoSSl7bC5yZW1vdmUoSSl9ZnVuY3Rpb24gQigpe2wuZGlzcG9zZSgpfXJldHVybntnZXRQYXJhbWV0ZXJzOngsZ2V0UHJvZ3JhbUNhY2hlS2V5OmIsZ2V0VW5pZm9ybXM6UCxhY3F1aXJlUHJvZ3JhbTprLHJlbGVhc2VQcm9ncmFtOk8scmVsZWFzZVNoYWRlckNhY2hlOkQscHJvZ3JhbXM6YyxkaXNwb3NlOkJ9fWZ1bmN0aW9uIGRncigpe2xldCBlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHQobyl7bGV0IGE9ZS5nZXQobyk7cmV0dXJuIGE9PT12b2lkIDAmJihhPXt9LGUuc2V0KG8sYSkpLGF9ZnVuY3Rpb24gcihvKXtlLmRlbGV0ZShvKX1mdW5jdGlvbiBuKG8sYSxzKXtlLmdldChvKVthXT1zfWZ1bmN0aW9uIGkoKXtlPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6dCxyZW1vdmU6cix1cGRhdGU6bixkaXNwb3NlOml9fWZ1bmN0aW9uIG1ncihlLHQpe3JldHVybiBlLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/ZS5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjplLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9lLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6ZS5tYXRlcmlhbC5pZCE9PXQubWF0ZXJpYWwuaWQ/ZS5tYXRlcmlhbC5pZC10Lm1hdGVyaWFsLmlkOmUueiE9PXQuej9lLnotdC56OmUuaWQtdC5pZH1mdW5jdGlvbiBxdWUoZSx0KXtyZXR1cm4gZS5ncm91cE9yZGVyIT09dC5ncm91cE9yZGVyP2UuZ3JvdXBPcmRlci10Lmdyb3VwT3JkZXI6ZS5yZW5kZXJPcmRlciE9PXQucmVuZGVyT3JkZXI/ZS5yZW5kZXJPcmRlci10LnJlbmRlck9yZGVyOmUueiE9PXQuej90LnotZS56OmUuaWQtdC5pZH1mdW5jdGlvbiBHdWUoKXtsZXQgZT1bXSx0PTAscj1bXSxuPVtdLGk9W107ZnVuY3Rpb24gbygpe3Q9MCxyLmxlbmd0aD0wLG4ubGVuZ3RoPTAsaS5sZW5ndGg9MH1mdW5jdGlvbiBhKGgsZixwLGQsZyxfKXtsZXQgeT1lW3RdO3JldHVybiB5PT09dm9pZCAwPyh5PXtpZDpoLmlkLG9iamVjdDpoLGdlb21ldHJ5OmYsbWF0ZXJpYWw6cCxncm91cE9yZGVyOmQscmVuZGVyT3JkZXI6aC5yZW5kZXJPcmRlcix6OmcsZ3JvdXA6X30sZVt0XT15KTooeS5pZD1oLmlkLHkub2JqZWN0PWgseS5nZW9tZXRyeT1mLHkubWF0ZXJpYWw9cCx5Lmdyb3VwT3JkZXI9ZCx5LnJlbmRlck9yZGVyPWgucmVuZGVyT3JkZXIseS56PWcseS5ncm91cD1fKSx0KysseX1mdW5jdGlvbiBzKGgsZixwLGQsZyxfKXtsZXQgeT1hKGgsZixwLGQsZyxfKTtwLnRyYW5zbWlzc2lvbj4wP24ucHVzaCh5KTpwLnRyYW5zcGFyZW50PT09ITA/aS5wdXNoKHkpOnIucHVzaCh5KX1mdW5jdGlvbiBsKGgsZixwLGQsZyxfKXtsZXQgeT1hKGgsZixwLGQsZyxfKTtwLnRyYW5zbWlzc2lvbj4wP24udW5zaGlmdCh5KTpwLnRyYW5zcGFyZW50PT09ITA/aS51bnNoaWZ0KHkpOnIudW5zaGlmdCh5KX1mdW5jdGlvbiBjKGgsZil7ci5sZW5ndGg+MSYmci5zb3J0KGh8fG1nciksbi5sZW5ndGg+MSYmbi5zb3J0KGZ8fHF1ZSksaS5sZW5ndGg+MSYmaS5zb3J0KGZ8fHF1ZSl9ZnVuY3Rpb24gdSgpe2ZvcihsZXQgaD10LGY9ZS5sZW5ndGg7aDxmO2grKyl7bGV0IHA9ZVtoXTtpZihwLmlkPT09bnVsbClicmVhaztwLmlkPW51bGwscC5vYmplY3Q9bnVsbCxwLmdlb21ldHJ5PW51bGwscC5tYXRlcmlhbD1udWxsLHAuZ3JvdXA9bnVsbH19cmV0dXJue29wYXF1ZTpyLHRyYW5zbWlzc2l2ZTpuLHRyYW5zcGFyZW50OmksaW5pdDpvLHB1c2g6cyx1bnNoaWZ0OmwsZmluaXNoOnUsc29ydDpjfX1mdW5jdGlvbiBnZ3IoKXtsZXQgZT1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KG4saSl7bGV0IG87cmV0dXJuIGUuaGFzKG4pPT09ITE/KG89bmV3IEd1ZSxlLnNldChuLFtvXSkpOmk+PWUuZ2V0KG4pLmxlbmd0aD8obz1uZXcgR3VlLGUuZ2V0KG4pLnB1c2gobykpOm89ZS5nZXQobilbaV0sb31mdW5jdGlvbiByKCl7ZT1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OnQsZGlzcG9zZTpyfX1mdW5jdGlvbiBfZ3IoKXtsZXQgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKGVbdC5pZF0hPT12b2lkIDApcmV0dXJuIGVbdC5pZF07bGV0IHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpyPXtkaXJlY3Rpb246bmV3IGosY29sb3I6bmV3IG5lfTticmVhaztjYXNlIlNwb3RMaWdodCI6cj17cG9zaXRpb246bmV3IGosZGlyZWN0aW9uOm5ldyBqLGNvbG9yOm5ldyBuZSxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6cj17cG9zaXRpb246bmV3IGosY29sb3I6bmV3IG5lLGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOnI9e2RpcmVjdGlvbjpuZXcgaixza3lDb2xvcjpuZXcgbmUsZ3JvdW5kQ29sb3I6bmV3IG5lfTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOnI9e2NvbG9yOm5ldyBuZSxwb3NpdGlvbjpuZXcgaixoYWxmV2lkdGg6bmV3IGosaGFsZkhlaWdodDpuZXcgan07YnJlYWt9cmV0dXJuIGVbdC5pZF09cixyfX19ZnVuY3Rpb24geWdyKCl7bGV0IGU9e307cmV0dXJue2dldDpmdW5jdGlvbih0KXtpZihlW3QuaWRdIT09dm9pZCAwKXJldHVybiBlW3QuaWRdO2xldCByO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6cj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBMdH07YnJlYWs7Y2FzZSJTcG90TGlnaHQiOnI9e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgTHR9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6cj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBMdCxzaGFkb3dDYW1lcmFOZWFyOjEsc2hhZG93Q2FtZXJhRmFyOjFlM307YnJlYWt9cmV0dXJuIGVbdC5pZF09cixyfX19dmFyIHZncj0wO2Z1bmN0aW9uIHhncihlLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0oZS5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gYmdyKGUsdCl7bGV0IHI9bmV3IF9ncixuPXlncigpLGk9e3ZlcnNpb246MCxoYXNoOntkaXJlY3Rpb25hbExlbmd0aDotMSxwb2ludExlbmd0aDotMSxzcG90TGVuZ3RoOi0xLHJlY3RBcmVhTGVuZ3RoOi0xLGhlbWlMZW5ndGg6LTEsbnVtRGlyZWN0aW9uYWxTaGFkb3dzOi0xLG51bVBvaW50U2hhZG93czotMSxudW1TcG90U2hhZG93czotMX0sYW1iaWVudDpbMCwwLDBdLHByb2JlOltdLGRpcmVjdGlvbmFsOltdLGRpcmVjdGlvbmFsU2hhZG93OltdLGRpcmVjdGlvbmFsU2hhZG93TWFwOltdLGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OltdLHNwb3Q6W10sc3BvdFNoYWRvdzpbXSxzcG90U2hhZG93TWFwOltdLHNwb3RTaGFkb3dNYXRyaXg6W10scmVjdEFyZWE6W10scmVjdEFyZWFMVEMxOm51bGwscmVjdEFyZWFMVEMyOm51bGwscG9pbnQ6W10scG9pbnRTaGFkb3c6W10scG9pbnRTaGFkb3dNYXA6W10scG9pbnRTaGFkb3dNYXRyaXg6W10saGVtaTpbXX07Zm9yKGxldCB1PTA7dTw5O3UrKylpLnByb2JlLnB1c2gobmV3IGopO2xldCBvPW5ldyBqLGE9bmV3IE1lLHM9bmV3IE1lO2Z1bmN0aW9uIGwodSxoKXtsZXQgZj0wLHA9MCxkPTA7Zm9yKGxldCBEPTA7RDw5O0QrKylpLnByb2JlW0RdLnNldCgwLDAsMCk7bGV0IGc9MCxfPTAseT0wLHg9MCxiPTAsUz0wLEM9MCxQPTA7dS5zb3J0KHhncik7bGV0IGs9aCE9PSEwP01hdGguUEk6MTtmb3IobGV0IEQ9MCxCPXUubGVuZ3RoO0Q8QjtEKyspe2xldCBJPXVbRF0sTD1JLmNvbG9yLFI9SS5pbnRlbnNpdHksRj1JLmRpc3RhbmNlLHo9SS5zaGFkb3cmJkkuc2hhZG93Lm1hcD9JLnNoYWRvdy5tYXAudGV4dHVyZTpudWxsO2lmKEkuaXNBbWJpZW50TGlnaHQpZis9TC5yKlIqayxwKz1MLmcqUiprLGQrPUwuYipSKms7ZWxzZSBpZihJLmlzTGlnaHRQcm9iZSlmb3IobGV0IFU9MDtVPDk7VSsrKWkucHJvYmVbVV0uYWRkU2NhbGVkVmVjdG9yKEkuc2guY29lZmZpY2llbnRzW1VdLFIpO2Vsc2UgaWYoSS5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBVPXIuZ2V0KEkpO2lmKFUuY29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihJLmludGVuc2l0eSprKSxJLmNhc3RTaGFkb3cpe2xldCBXPUkuc2hhZG93LFo9bi5nZXQoSSk7Wi5zaGFkb3dCaWFzPVcuYmlhcyxaLnNoYWRvd05vcm1hbEJpYXM9Vy5ub3JtYWxCaWFzLFouc2hhZG93UmFkaXVzPVcucmFkaXVzLFouc2hhZG93TWFwU2l6ZT1XLm1hcFNpemUsaS5kaXJlY3Rpb25hbFNoYWRvd1tnXT1aLGkuZGlyZWN0aW9uYWxTaGFkb3dNYXBbZ109eixpLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4W2ddPUkuc2hhZG93Lm1hdHJpeCxTKyt9aS5kaXJlY3Rpb25hbFtnXT1VLGcrK31lbHNlIGlmKEkuaXNTcG90TGlnaHQpe2xldCBVPXIuZ2V0KEkpO2lmKFUucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEkubWF0cml4V29ybGQpLFUuY29sb3IuY29weShMKS5tdWx0aXBseVNjYWxhcihSKmspLFUuZGlzdGFuY2U9RixVLmNvbmVDb3M9TWF0aC5jb3MoSS5hbmdsZSksVS5wZW51bWJyYUNvcz1NYXRoLmNvcyhJLmFuZ2xlKigxLUkucGVudW1icmEpKSxVLmRlY2F5PUkuZGVjYXksSS5jYXN0U2hhZG93KXtsZXQgVz1JLnNoYWRvdyxaPW4uZ2V0KEkpO1ouc2hhZG93Qmlhcz1XLmJpYXMsWi5zaGFkb3dOb3JtYWxCaWFzPVcubm9ybWFsQmlhcyxaLnNoYWRvd1JhZGl1cz1XLnJhZGl1cyxaLnNoYWRvd01hcFNpemU9Vy5tYXBTaXplLGkuc3BvdFNoYWRvd1t5XT1aLGkuc3BvdFNoYWRvd01hcFt5XT16LGkuc3BvdFNoYWRvd01hdHJpeFt5XT1JLnNoYWRvdy5tYXRyaXgsUCsrfWkuc3BvdFt5XT1VLHkrK31lbHNlIGlmKEkuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgVT1yLmdldChJKTtVLmNvbG9yLmNvcHkoTCkubXVsdGlwbHlTY2FsYXIoUiksVS5oYWxmV2lkdGguc2V0KEkud2lkdGgqLjUsMCwwKSxVLmhhbGZIZWlnaHQuc2V0KDAsSS5oZWlnaHQqLjUsMCksaS5yZWN0QXJlYVt4XT1VLHgrK31lbHNlIGlmKEkuaXNQb2ludExpZ2h0KXtsZXQgVT1yLmdldChJKTtpZihVLmNvbG9yLmNvcHkoSS5jb2xvcikubXVsdGlwbHlTY2FsYXIoSS5pbnRlbnNpdHkqayksVS5kaXN0YW5jZT1JLmRpc3RhbmNlLFUuZGVjYXk9SS5kZWNheSxJLmNhc3RTaGFkb3cpe2xldCBXPUkuc2hhZG93LFo9bi5nZXQoSSk7Wi5zaGFkb3dCaWFzPVcuYmlhcyxaLnNoYWRvd05vcm1hbEJpYXM9Vy5ub3JtYWxCaWFzLFouc2hhZG93UmFkaXVzPVcucmFkaXVzLFouc2hhZG93TWFwU2l6ZT1XLm1hcFNpemUsWi5zaGFkb3dDYW1lcmFOZWFyPVcuY2FtZXJhLm5lYXIsWi5zaGFkb3dDYW1lcmFGYXI9Vy5jYW1lcmEuZmFyLGkucG9pbnRTaGFkb3dbX109WixpLnBvaW50U2hhZG93TWFwW19dPXosaS5wb2ludFNoYWRvd01hdHJpeFtfXT1JLnNoYWRvdy5tYXRyaXgsQysrfWkucG9pbnRbX109VSxfKyt9ZWxzZSBpZihJLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgVT1yLmdldChJKTtVLnNreUNvbG9yLmNvcHkoSS5jb2xvcikubXVsdGlwbHlTY2FsYXIoUiprKSxVLmdyb3VuZENvbG9yLmNvcHkoSS5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIoUiprKSxpLmhlbWlbYl09VSxiKyt9fXg+MCYmKHQuaXNXZWJHTDJ8fGUuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT09PSEwPyhpLnJlY3RBcmVhTFRDMT1yZS5MVENfRkxPQVRfMSxpLnJlY3RBcmVhTFRDMj1yZS5MVENfRkxPQVRfMik6ZS5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik9PT0hMD8oaS5yZWN0QXJlYUxUQzE9cmUuTFRDX0hBTEZfMSxpLnJlY3RBcmVhTFRDMj1yZS5MVENfSEFMRl8yKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVbmFibGUgdG8gdXNlIFJlY3RBcmVhTGlnaHQuIE1pc3NpbmcgV2ViR0wgZXh0ZW5zaW9ucy4iKSksaS5hbWJpZW50WzBdPWYsaS5hbWJpZW50WzFdPXAsaS5hbWJpZW50WzJdPWQ7bGV0IE89aS5oYXNoOyhPLmRpcmVjdGlvbmFsTGVuZ3RoIT09Z3x8Ty5wb2ludExlbmd0aCE9PV98fE8uc3BvdExlbmd0aCE9PXl8fE8ucmVjdEFyZWFMZW5ndGghPT14fHxPLmhlbWlMZW5ndGghPT1ifHxPLm51bURpcmVjdGlvbmFsU2hhZG93cyE9PVN8fE8ubnVtUG9pbnRTaGFkb3dzIT09Q3x8Ty5udW1TcG90U2hhZG93cyE9PVApJiYoaS5kaXJlY3Rpb25hbC5sZW5ndGg9ZyxpLnNwb3QubGVuZ3RoPXksaS5yZWN0QXJlYS5sZW5ndGg9eCxpLnBvaW50Lmxlbmd0aD1fLGkuaGVtaS5sZW5ndGg9YixpLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aD1TLGkuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoPVMsaS5wb2ludFNoYWRvdy5sZW5ndGg9QyxpLnBvaW50U2hhZG93TWFwLmxlbmd0aD1DLGkuc3BvdFNoYWRvdy5sZW5ndGg9UCxpLnNwb3RTaGFkb3dNYXAubGVuZ3RoPVAsaS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC5sZW5ndGg9UyxpLnBvaW50U2hhZG93TWF0cml4Lmxlbmd0aD1DLGkuc3BvdFNoYWRvd01hdHJpeC5sZW5ndGg9UCxPLmRpcmVjdGlvbmFsTGVuZ3RoPWcsTy5wb2ludExlbmd0aD1fLE8uc3BvdExlbmd0aD15LE8ucmVjdEFyZWFMZW5ndGg9eCxPLmhlbWlMZW5ndGg9YixPLm51bURpcmVjdGlvbmFsU2hhZG93cz1TLE8ubnVtUG9pbnRTaGFkb3dzPUMsTy5udW1TcG90U2hhZG93cz1QLGkudmVyc2lvbj12Z3IrKyl9ZnVuY3Rpb24gYyh1LGgpe2xldCBmPTAscD0wLGQ9MCxnPTAsXz0wLHk9aC5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCB4PTAsYj11Lmxlbmd0aDt4PGI7eCsrKXtsZXQgUz11W3hdO2lmKFMuaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgQz1pLmRpcmVjdGlvbmFsW2ZdO0MuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKSxvLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLnRhcmdldC5tYXRyaXhXb3JsZCksQy5kaXJlY3Rpb24uc3ViKG8pLEMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih5KSxmKyt9ZWxzZSBpZihTLmlzU3BvdExpZ2h0KXtsZXQgQz1pLnNwb3RbZF07Qy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoeSksQy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMudGFyZ2V0Lm1hdHJpeFdvcmxkKSxDLmRpcmVjdGlvbi5zdWIobyksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLGQrK31lbHNlIGlmKFMuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgQz1pLnJlY3RBcmVhW2ddO0MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLEMucG9zaXRpb24uYXBwbHlNYXRyaXg0KHkpLHMuaWRlbnRpdHkoKSxhLmNvcHkoUy5tYXRyaXhXb3JsZCksYS5wcmVtdWx0aXBseSh5KSxzLmV4dHJhY3RSb3RhdGlvbihhKSxDLmhhbGZXaWR0aC5zZXQoUy53aWR0aCouNSwwLDApLEMuaGFsZkhlaWdodC5zZXQoMCxTLmhlaWdodCouNSwwKSxDLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQocyksQy5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChzKSxnKyt9ZWxzZSBpZihTLmlzUG9pbnRMaWdodCl7bGV0IEM9aS5wb2ludFtwXTtDLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKSxDLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh5KSxwKyt9ZWxzZSBpZihTLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgQz1pLmhlbWlbX107Qy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLEMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih5KSxDLmRpcmVjdGlvbi5ub3JtYWxpemUoKSxfKyt9fX1yZXR1cm57c2V0dXA6bCxzZXR1cFZpZXc6YyxzdGF0ZTppfX1mdW5jdGlvbiBXdWUoZSx0KXtsZXQgcj1uZXcgYmdyKGUsdCksbj1bXSxpPVtdO2Z1bmN0aW9uIG8oKXtuLmxlbmd0aD0wLGkubGVuZ3RoPTB9ZnVuY3Rpb24gYShoKXtuLnB1c2goaCl9ZnVuY3Rpb24gcyhoKXtpLnB1c2goaCl9ZnVuY3Rpb24gbChoKXtyLnNldHVwKG4saCl9ZnVuY3Rpb24gYyhoKXtyLnNldHVwVmlldyhuLGgpfXJldHVybntpbml0Om8sc3RhdGU6e2xpZ2h0c0FycmF5Om4sc2hhZG93c0FycmF5OmksbGlnaHRzOnJ9LHNldHVwTGlnaHRzOmwsc2V0dXBMaWdodHNWaWV3OmMscHVzaExpZ2h0OmEscHVzaFNoYWRvdzpzfX1mdW5jdGlvbiB3Z3IoZSx0KXtsZXQgcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBuKG8sYT0wKXtsZXQgcztyZXR1cm4gci5oYXMobyk9PT0hMT8ocz1uZXcgV3VlKGUsdCksci5zZXQobyxbc10pKTphPj1yLmdldChvKS5sZW5ndGg/KHM9bmV3IFd1ZShlLHQpLHIuZ2V0KG8pLnB1c2gocykpOnM9ci5nZXQobylbYV0sc31mdW5jdGlvbiBpKCl7cj1uZXcgV2Vha01hcH1yZXR1cm57Z2V0Om4sZGlzcG9zZTppfX12YXIgZU09Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERlcHRoTWF0ZXJpYWwiLHRoaXMuZGVwdGhQYWNraW5nPUFmZSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9fTtlTS5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMDt2YXIgck09Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IGosdGhpcy5uZWFyRGlzdGFuY2U9MSx0aGlzLmZhckRpc3RhbmNlPTFlMyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSh0LnJlZmVyZW5jZVBvc2l0aW9uKSx0aGlzLm5lYXJEaXN0YW5jZT10Lm5lYXJEaXN0YW5jZSx0aGlzLmZhckRpc3RhbmNlPXQuZmFyRGlzdGFuY2UsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXN9fTtyTS5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDt2YXIgU2dyPWB2b2lkIG1haW4oKSB7CglnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKfWAsTWdyPWB1bmlmb3JtIHNhbXBsZXIyRCBzaGFkb3dfcGFzczsKdW5pZm9ybSB2ZWMyIHJlc29sdXRpb247CnVuaWZvcm0gZmxvYXQgcmFkaXVzOwojaW5jbHVkZSA8cGFja2luZz4Kdm9pZCBtYWluKCkgewoJY29uc3QgZmxvYXQgc2FtcGxlcyA9IGZsb2F0KCBWU01fU0FNUExFUyApOwoJZmxvYXQgbWVhbiA9IDAuMDsKCWZsb2F0IHNxdWFyZWRfbWVhbiA9IDAuMDsKCWZsb2F0IHV2U3RyaWRlID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAyLjAgLyAoIHNhbXBsZXMgLSAxLjAgKTsKCWZsb2F0IHV2U3RhcnQgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IC0gMS4wOwoJZm9yICggZmxvYXQgaSA9IDAuMDsgaSA8IHNhbXBsZXM7IGkgKysgKSB7CgkJZmxvYXQgdXZPZmZzZXQgPSB1dlN0YXJ0ICsgaSAqIHV2U3RyaWRlOwoJCSNpZmRlZiBIT1JJWk9OVEFMX1BBU1MKCQkJdmVjMiBkaXN0cmlidXRpb24gPSB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCB1dk9mZnNldCwgMC4wICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApOwoJCQltZWFuICs9IGRpc3RyaWJ1dGlvbi54OwoJCQlzcXVhcmVkX21lYW4gKz0gZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSArIGRpc3RyaWJ1dGlvbi54ICogZGlzdHJpYnV0aW9uLng7CgkJI2Vsc2UKCQkJZmxvYXQgZGVwdGggPSB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAwLjAsIHV2T2Zmc2V0ICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApOwoJCQltZWFuICs9IGRlcHRoOwoJCQlzcXVhcmVkX21lYW4gKz0gZGVwdGggKiBkZXB0aDsKCQkjZW5kaWYKCX0KCW1lYW4gPSBtZWFuIC8gc2FtcGxlczsKCXNxdWFyZWRfbWVhbiA9IHNxdWFyZWRfbWVhbiAvIHNhbXBsZXM7CglmbG9hdCBzdGRfZGV2ID0gc3FydCggc3F1YXJlZF9tZWFuIC0gbWVhbiAqIG1lYW4gKTsKCWdsX0ZyYWdDb2xvciA9IHBhY2sySGFsZlRvUkdCQSggdmVjMiggbWVhbiwgc3RkX2RldiApICk7Cn1gO2Z1bmN0aW9uIGpmZShlLHQscil7bGV0IG49bmV3IE52LGk9bmV3IEx0LG89bmV3IEx0LGE9bmV3IGVuLHM9bmV3IGVNKHtkZXB0aFBhY2tpbmc6UGZlfSksbD1uZXcgck0sYz17fSx1PXIubWF4VGV4dHVyZVNpemUsaD17MDpJaSwxOkl2LDI6THZ9LGY9bmV3IGxoKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBMdH0scmFkaXVzOnt2YWx1ZTo0fX0sdmVydGV4U2hhZGVyOlNncixmcmFnbWVudFNoYWRlcjpNZ3J9KSxwPWYuY2xvbmUoKTtwLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGQ9bmV3IFBlO2Quc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEplKG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgZz1uZXcgZWkoZCxmKSxfPXRoaXM7dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT1BaHQsdGhpcy5yZW5kZXI9ZnVuY3Rpb24oUyxDLFApe2lmKF8uZW5hYmxlZD09PSExfHxfLmF1dG9VcGRhdGU9PT0hMSYmXy5uZWVkc1VwZGF0ZT09PSExfHxTLmxlbmd0aD09PTApcmV0dXJuO2xldCBrPWUuZ2V0UmVuZGVyVGFyZ2V0KCksTz1lLmdldEFjdGl2ZUN1YmVGYWNlKCksRD1lLmdldEFjdGl2ZU1pcG1hcExldmVsKCksQj1lLnN0YXRlO0Iuc2V0QmxlbmRpbmcoJGQpLEIuYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSxCLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksQi5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKGxldCBJPTAsTD1TLmxlbmd0aDtJPEw7SSsrKXtsZXQgUj1TW0ldLEY9Ui5zaGFkb3c7aWYoRj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLFIsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoRi5hdXRvVXBkYXRlPT09ITEmJkYubmVlZHNVcGRhdGU9PT0hMSljb250aW51ZTtpLmNvcHkoRi5tYXBTaXplKTtsZXQgej1GLmdldEZyYW1lRXh0ZW50cygpO2lmKGkubXVsdGlwbHkoeiksby5jb3B5KEYubWFwU2l6ZSksKGkueD51fHxpLnk+dSkmJihpLng+dSYmKG8ueD1NYXRoLmZsb29yKHUvei54KSxpLng9by54KnoueCxGLm1hcFNpemUueD1vLngpLGkueT51JiYoby55PU1hdGguZmxvb3IodS96LnkpLGkueT1vLnkqei55LEYubWFwU2l6ZS55PW8ueSkpLEYubWFwPT09bnVsbCYmIUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1GMyl7bGV0IFc9e21pbkZpbHRlcjpvaSxtYWdGaWx0ZXI6b2ksZm9ybWF0OlFvfTtGLm1hcD1uZXcgdXMoaS54LGkueSxXKSxGLm1hcC50ZXh0dXJlLm5hbWU9Ui5uYW1lKyIuc2hhZG93TWFwIixGLm1hcFBhc3M9bmV3IHVzKGkueCxpLnksVyksRi5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWlmKEYubWFwPT09bnVsbCl7bGV0IFc9e21pbkZpbHRlcjpMaSxtYWdGaWx0ZXI6TGksZm9ybWF0OlFvfTtGLm1hcD1uZXcgdXMoaS54LGkueSxXKSxGLm1hcC50ZXh0dXJlLm5hbWU9Ui5uYW1lKyIuc2hhZG93TWFwIixGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9ZS5zZXRSZW5kZXJUYXJnZXQoRi5tYXApLGUuY2xlYXIoKTtsZXQgVT1GLmdldFZpZXdwb3J0Q291bnQoKTtmb3IobGV0IFc9MDtXPFU7VysrKXtsZXQgWj1GLmdldFZpZXdwb3J0KFcpO2Euc2V0KG8ueCpaLngsby55KloueSxvLngqWi56LG8ueSpaLncpLEIudmlld3BvcnQoYSksRi51cGRhdGVNYXRyaWNlcyhSLFcpLG49Ri5nZXRGcnVzdHVtKCksYihDLFAsRi5jYW1lcmEsUix0aGlzLnR5cGUpfSFGLmlzUG9pbnRMaWdodFNoYWRvdyYmdGhpcy50eXBlPT09RjMmJnkoRixQKSxGLm5lZWRzVXBkYXRlPSExfV8ubmVlZHNVcGRhdGU9ITEsZS5zZXRSZW5kZXJUYXJnZXQoayxPLEQpfTtmdW5jdGlvbiB5KFMsQyl7bGV0IFA9dC51cGRhdGUoZyk7Zi5kZWZpbmVzLlZTTV9TQU1QTEVTIT09Uy5ibHVyU2FtcGxlcyYmKGYuZGVmaW5lcy5WU01fU0FNUExFUz1TLmJsdXJTYW1wbGVzLHAuZGVmaW5lcy5WU01fU0FNUExFUz1TLmJsdXJTYW1wbGVzLGYubmVlZHNVcGRhdGU9ITAscC5uZWVkc1VwZGF0ZT0hMCksZi51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1TLm1hcC50ZXh0dXJlLGYudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1TLm1hcFNpemUsZi51bmlmb3Jtcy5yYWRpdXMudmFsdWU9Uy5yYWRpdXMsZS5zZXRSZW5kZXJUYXJnZXQoUy5tYXBQYXNzKSxlLmNsZWFyKCksZS5yZW5kZXJCdWZmZXJEaXJlY3QoQyxudWxsLFAsZixnLG51bGwpLHAudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9Uy5tYXBQYXNzLnRleHR1cmUscC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPVMubWFwU2l6ZSxwLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1TLnJhZGl1cyxlLnNldFJlbmRlclRhcmdldChTLm1hcCksZS5jbGVhcigpLGUucmVuZGVyQnVmZmVyRGlyZWN0KEMsbnVsbCxQLHAsZyxudWxsKX1mdW5jdGlvbiB4KFMsQyxQLGssTyxELEIpe2xldCBJPW51bGwsTD1rLmlzUG9pbnRMaWdodD09PSEwP1MuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbDpTLmN1c3RvbURlcHRoTWF0ZXJpYWw7aWYoTCE9PXZvaWQgMD9JPUw6ST1rLmlzUG9pbnRMaWdodD09PSEwP2w6cyxlLmxvY2FsQ2xpcHBpbmdFbmFibGVkJiZQLmNsaXBTaGFkb3dzPT09ITAmJlAuY2xpcHBpbmdQbGFuZXMubGVuZ3RoIT09MHx8UC5kaXNwbGFjZW1lbnRNYXAmJlAuZGlzcGxhY2VtZW50U2NhbGUhPT0wfHxQLmFscGhhTWFwJiZQLmFscGhhVGVzdD4wKXtsZXQgUj1JLnV1aWQsRj1QLnV1aWQsej1jW1JdO3o9PT12b2lkIDAmJih6PXt9LGNbUl09eik7bGV0IFU9eltGXTtVPT09dm9pZCAwJiYoVT1JLmNsb25lKCkseltGXT1VKSxJPVV9cmV0dXJuIEkudmlzaWJsZT1QLnZpc2libGUsSS53aXJlZnJhbWU9UC53aXJlZnJhbWUsQj09PUYzP0kuc2lkZT1QLnNoYWRvd1NpZGUhPT1udWxsP1Auc2hhZG93U2lkZTpQLnNpZGU6SS5zaWRlPVAuc2hhZG93U2lkZSE9PW51bGw/UC5zaGFkb3dTaWRlOmhbUC5zaWRlXSxJLmFscGhhTWFwPVAuYWxwaGFNYXAsSS5hbHBoYVRlc3Q9UC5hbHBoYVRlc3QsSS5jbGlwU2hhZG93cz1QLmNsaXBTaGFkb3dzLEkuY2xpcHBpbmdQbGFuZXM9UC5jbGlwcGluZ1BsYW5lcyxJLmNsaXBJbnRlcnNlY3Rpb249UC5jbGlwSW50ZXJzZWN0aW9uLEkuZGlzcGxhY2VtZW50TWFwPVAuZGlzcGxhY2VtZW50TWFwLEkuZGlzcGxhY2VtZW50U2NhbGU9UC5kaXNwbGFjZW1lbnRTY2FsZSxJLmRpc3BsYWNlbWVudEJpYXM9UC5kaXNwbGFjZW1lbnRCaWFzLEkud2lyZWZyYW1lTGluZXdpZHRoPVAud2lyZWZyYW1lTGluZXdpZHRoLEkubGluZXdpZHRoPVAubGluZXdpZHRoLGsuaXNQb2ludExpZ2h0PT09ITAmJkkuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD09PSEwJiYoSS5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oay5tYXRyaXhXb3JsZCksSS5uZWFyRGlzdGFuY2U9TyxJLmZhckRpc3RhbmNlPUQpLEl9ZnVuY3Rpb24gYihTLEMsUCxrLE8pe2lmKFMudmlzaWJsZT09PSExKXJldHVybjtpZihTLmxheWVycy50ZXN0KEMubGF5ZXJzKSYmKFMuaXNNZXNofHxTLmlzTGluZXx8Uy5pc1BvaW50cykmJihTLmNhc3RTaGFkb3d8fFMucmVjZWl2ZVNoYWRvdyYmTz09PUYzKSYmKCFTLmZydXN0dW1DdWxsZWR8fG4uaW50ZXJzZWN0c09iamVjdChTKSkpe1MubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoUC5tYXRyaXhXb3JsZEludmVyc2UsUy5tYXRyaXhXb3JsZCk7bGV0IEk9dC51cGRhdGUoUyksTD1TLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoTCkpe2xldCBSPUkuZ3JvdXBzO2ZvcihsZXQgRj0wLHo9Ui5sZW5ndGg7Rjx6O0YrKyl7bGV0IFU9UltGXSxXPUxbVS5tYXRlcmlhbEluZGV4XTtpZihXJiZXLnZpc2libGUpe2xldCBaPXgoUyxJLFcsayxQLm5lYXIsUC5mYXIsTyk7ZS5yZW5kZXJCdWZmZXJEaXJlY3QoUCxudWxsLEksWixTLFUpfX19ZWxzZSBpZihMLnZpc2libGUpe2xldCBSPXgoUyxJLEwsayxQLm5lYXIsUC5mYXIsTyk7ZS5yZW5kZXJCdWZmZXJEaXJlY3QoUCxudWxsLEksUixTLG51bGwpfX1sZXQgQj1TLmNoaWxkcmVuO2ZvcihsZXQgST0wLEw9Qi5sZW5ndGg7STxMO0krKyliKEJbSV0sQyxQLGssTyl9fWZ1bmN0aW9uIEVncihlLHQscil7bGV0IG49ci5pc1dlYkdMMjtmdW5jdGlvbiBpKCl7bGV0IGF0PSExLHNlPW5ldyBlbixRdD1udWxsLENlPW5ldyBlbigwLDAsMCwwKTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihQdCl7UXQhPT1QdCYmIWF0JiYoZS5jb2xvck1hc2soUHQsUHQsUHQsUHQpLFF0PVB0KX0sc2V0TG9ja2VkOmZ1bmN0aW9uKFB0KXthdD1QdH0sc2V0Q2xlYXI6ZnVuY3Rpb24oUHQsTnQsemUseW4sV2kpe1dpPT09ITAmJihQdCo9eW4sTnQqPXluLHplKj15biksc2Uuc2V0KFB0LE50LHplLHluKSxDZS5lcXVhbHMoc2UpPT09ITEmJihlLmNsZWFyQ29sb3IoUHQsTnQsemUseW4pLENlLmNvcHkoc2UpKX0scmVzZXQ6ZnVuY3Rpb24oKXthdD0hMSxRdD1udWxsLENlLnNldCgtMSwwLDAsMCl9fX1mdW5jdGlvbiBvKCl7bGV0IGF0PSExLHNlPW51bGwsUXQ9bnVsbCxDZT1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKFB0KXtQdD9sdCgyOTI5KTpLdCgyOTI5KX0sc2V0TWFzazpmdW5jdGlvbihQdCl7c2UhPT1QdCYmIWF0JiYoZS5kZXB0aE1hc2soUHQpLHNlPVB0KX0sc2V0RnVuYzpmdW5jdGlvbihQdCl7aWYoUXQhPT1QdCl7aWYoUHQpc3dpdGNoKFB0KXtjYXNlIEtoZTplLmRlcHRoRnVuYyg1MTIpO2JyZWFrO2Nhc2UgWmhlOmUuZGVwdGhGdW5jKDUxOSk7YnJlYWs7Y2FzZSBKaGU6ZS5kZXB0aEZ1bmMoNTEzKTticmVhaztjYXNlIG5VOmUuZGVwdGhGdW5jKDUxNSk7YnJlYWs7Y2FzZSBRaGU6ZS5kZXB0aEZ1bmMoNTE0KTticmVhaztjYXNlIHRmZTplLmRlcHRoRnVuYyg1MTgpO2JyZWFrO2Nhc2UgZWZlOmUuZGVwdGhGdW5jKDUxNik7YnJlYWs7Y2FzZSByZmU6ZS5kZXB0aEZ1bmMoNTE3KTticmVhaztkZWZhdWx0OmUuZGVwdGhGdW5jKDUxNSl9ZWxzZSBlLmRlcHRoRnVuYyg1MTUpO1F0PVB0fX0sc2V0TG9ja2VkOmZ1bmN0aW9uKFB0KXthdD1QdH0sc2V0Q2xlYXI6ZnVuY3Rpb24oUHQpe0NlIT09UHQmJihlLmNsZWFyRGVwdGgoUHQpLENlPVB0KX0scmVzZXQ6ZnVuY3Rpb24oKXthdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbH19fWZ1bmN0aW9uIGEoKXtsZXQgYXQ9ITEsc2U9bnVsbCxRdD1udWxsLENlPW51bGwsUHQ9bnVsbCxOdD1udWxsLHplPW51bGwseW49bnVsbCxXaT1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKEFyKXthdHx8KEFyP2x0KDI5NjApOkt0KDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbihBcil7c2UhPT1BciYmIWF0JiYoZS5zdGVuY2lsTWFzayhBciksc2U9QXIpfSxzZXRGdW5jOmZ1bmN0aW9uKEFyLFBhLGhvKXsoUXQhPT1Bcnx8Q2UhPT1QYXx8UHQhPT1obykmJihlLnN0ZW5jaWxGdW5jKEFyLFBhLGhvKSxRdD1BcixDZT1QYSxQdD1obyl9LHNldE9wOmZ1bmN0aW9uKEFyLFBhLGhvKXsoTnQhPT1Bcnx8emUhPT1QYXx8eW4hPT1obykmJihlLnN0ZW5jaWxPcChBcixQYSxobyksTnQ9QXIsemU9UGEseW49aG8pfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oQXIpe2F0PUFyfSxzZXRDbGVhcjpmdW5jdGlvbihBcil7V2khPT1BciYmKGUuY2xlYXJTdGVuY2lsKEFyKSxXaT1Bcil9LHJlc2V0OmZ1bmN0aW9uKCl7YXQ9ITEsc2U9bnVsbCxRdD1udWxsLENlPW51bGwsUHQ9bnVsbCxOdD1udWxsLHplPW51bGwseW49bnVsbCxXaT1udWxsfX19bGV0IHM9bmV3IGksbD1uZXcgbyxjPW5ldyBhLHU9e30saD17fSxmPW5ldyBXZWFrTWFwLHA9W10sZD1udWxsLGc9ITEsXz1udWxsLHk9bnVsbCx4PW51bGwsYj1udWxsLFM9bnVsbCxDPW51bGwsUD1udWxsLGs9ITEsTz1udWxsLEQ9bnVsbCxCPW51bGwsST1udWxsLEw9bnVsbCxSPWUuZ2V0UGFyYW1ldGVyKDM1NjYxKSxGPSExLHo9MCxVPWUuZ2V0UGFyYW1ldGVyKDc5MzgpO1UuaW5kZXhPZigiV2ViR0wiKSE9PS0xPyh6PXBhcnNlRmxvYXQoL15XZWJHTCAoXGQpLy5leGVjKFUpWzFdKSxGPXo+PTEpOlUuaW5kZXhPZigiT3BlbkdMIEVTIikhPT0tMSYmKHo9cGFyc2VGbG9hdCgvXk9wZW5HTCBFUyAoXGQpLy5leGVjKFUpWzFdKSxGPXo+PTIpO2xldCBXPW51bGwsWj17fSxydD1lLmdldFBhcmFtZXRlcigzMDg4KSxvdD1lLmdldFBhcmFtZXRlcigyOTc4KSxzdD1uZXcgZW4oKS5mcm9tQXJyYXkocnQpLFN0PW5ldyBlbigpLmZyb21BcnJheShvdCk7ZnVuY3Rpb24gYnQoYXQsc2UsUXQpe2xldCBDZT1uZXcgVWludDhBcnJheSg0KSxQdD1lLmNyZWF0ZVRleHR1cmUoKTtlLmJpbmRUZXh0dXJlKGF0LFB0KSxlLnRleFBhcmFtZXRlcmkoYXQsMTAyNDEsOTcyOCksZS50ZXhQYXJhbWV0ZXJpKGF0LDEwMjQwLDk3MjgpO2ZvcihsZXQgTnQ9MDtOdDxRdDtOdCsrKWUudGV4SW1hZ2UyRChzZStOdCwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLENlKTtyZXR1cm4gUHR9bGV0IE10PXt9O010WzM1NTNdPWJ0KDM1NTMsMzU1MywxKSxNdFszNDA2N109YnQoMzQwNjcsMzQwNjksNikscy5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksbHQoMjkyOSksbC5zZXRGdW5jKG5VKSxodCghMSksd3QoTXV0KSxsdCgyODg0KSxxKCRkKTtmdW5jdGlvbiBsdChhdCl7dVthdF0hPT0hMCYmKGUuZW5hYmxlKGF0KSx1W2F0XT0hMCl9ZnVuY3Rpb24gS3QoYXQpe3VbYXRdIT09ITEmJihlLmRpc2FibGUoYXQpLHVbYXRdPSExKX1mdW5jdGlvbiBfdChhdCxzZSl7cmV0dXJuIGhbYXRdIT09c2U/KGUuYmluZEZyYW1lYnVmZmVyKGF0LHNlKSxoW2F0XT1zZSxuJiYoYXQ9PT0zNjAwOSYmKGhbMzYxNjBdPXNlKSxhdD09PTM2MTYwJiYoaFszNjAwOV09c2UpKSwhMCk6ITF9ZnVuY3Rpb24gY3QoYXQsc2Upe2xldCBRdD1wLENlPSExO2lmKGF0KWlmKFF0PWYuZ2V0KHNlKSxRdD09PXZvaWQgMCYmKFF0PVtdLGYuc2V0KHNlLFF0KSksYXQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyl7bGV0IFB0PWF0LnRleHR1cmU7aWYoUXQubGVuZ3RoIT09UHQubGVuZ3RofHxRdFswXSE9PTM2MDY0KXtmb3IobGV0IE50PTAsemU9UHQubGVuZ3RoO050PHplO050KyspUXRbTnRdPTM2MDY0K050O1F0Lmxlbmd0aD1QdC5sZW5ndGgsQ2U9ITB9fWVsc2UgUXRbMF0hPT0zNjA2NCYmKFF0WzBdPTM2MDY0LENlPSEwKTtlbHNlIFF0WzBdIT09MTAyOSYmKFF0WzBdPTEwMjksQ2U9ITApO0NlJiYoci5pc1dlYkdMMj9lLmRyYXdCdWZmZXJzKFF0KTp0LmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChRdCkpfWZ1bmN0aW9uIFgoYXQpe3JldHVybiBkIT09YXQ/KGUudXNlUHJvZ3JhbShhdCksZD1hdCwhMCk6ITF9bGV0IGV0PXtbTXZdOjMyNzc0LFtCaGVdOjMyNzc4LFtIaGVdOjMyNzc5fTtpZihuKWV0W0F1dF09MzI3NzUsZXRbUHV0XT0zMjc3NjtlbHNle2xldCBhdD10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO2F0IT09bnVsbCYmKGV0W0F1dF09YXQuTUlOX0VYVCxldFtQdXRdPWF0Lk1BWF9FWFQpfWxldCBkdD17W1ZoZV06MCxbVWhlXToxLFtxaGVdOjc2OCxbSWh0XTo3NzAsWyRoZV06Nzc2LFtqaGVdOjc3NCxbV2hlXTo3NzIsW0doZV06NzY5LFtMaHRdOjc3MSxbWGhlXTo3NzUsW1loZV06NzczfTtmdW5jdGlvbiBxKGF0LHNlLFF0LENlLFB0LE50LHplLHluKXtpZihhdD09PSRkKXtnPT09ITAmJihLdCgzMDQyKSxnPSExKTtyZXR1cm59aWYoZz09PSExJiYobHQoMzA0MiksZz0hMCksYXQhPT1GaGUpe2lmKGF0IT09X3x8eW4hPT1rKXtpZigoeSE9PU12fHxTIT09TXYpJiYoZS5ibGVuZEVxdWF0aW9uKDMyNzc0KSx5PU12LFM9TXYpLHluKXN3aXRjaChhdCl7Y2FzZSBWMzplLmJsZW5kRnVuY1NlcGFyYXRlKDEsNzcxLDEsNzcxKTticmVhaztjYXNlIEV1dDplLmJsZW5kRnVuYygxLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIEN1dDplLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsYXQpO2JyZWFrfWVsc2Ugc3dpdGNoKGF0KXtjYXNlIFYzOmUuYmxlbmRGdW5jU2VwYXJhdGUoNzcwLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIEN1dDplLmJsZW5kRnVuYygwLDc2OCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAiLGF0KTticmVha314PW51bGwsYj1udWxsLEM9bnVsbCxQPW51bGwsXz1hdCxrPXlufXJldHVybn1QdD1QdHx8c2UsTnQ9TnR8fFF0LHplPXplfHxDZSwoc2UhPT15fHxQdCE9PVMpJiYoZS5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoZXRbc2VdLGV0W1B0XSkseT1zZSxTPVB0KSwoUXQhPT14fHxDZSE9PWJ8fE50IT09Q3x8emUhPT1QKSYmKGUuYmxlbmRGdW5jU2VwYXJhdGUoZHRbUXRdLGR0W0NlXSxkdFtOdF0sZHRbemVdKSx4PVF0LGI9Q2UsQz1OdCxQPXplKSxfPWF0LGs9bnVsbH1mdW5jdGlvbiBwdChhdCxzZSl7YXQuc2lkZT09PUx2P0t0KDI4ODQpOmx0KDI4ODQpO2xldCBRdD1hdC5zaWRlPT09SWk7c2UmJihRdD0hUXQpLGh0KFF0KSxhdC5ibGVuZGluZz09PVYzJiZhdC50cmFuc3BhcmVudD09PSExP3EoJGQpOnEoYXQuYmxlbmRpbmcsYXQuYmxlbmRFcXVhdGlvbixhdC5ibGVuZFNyYyxhdC5ibGVuZERzdCxhdC5ibGVuZEVxdWF0aW9uQWxwaGEsYXQuYmxlbmRTcmNBbHBoYSxhdC5ibGVuZERzdEFscGhhLGF0LnByZW11bHRpcGxpZWRBbHBoYSksbC5zZXRGdW5jKGF0LmRlcHRoRnVuYyksbC5zZXRUZXN0KGF0LmRlcHRoVGVzdCksbC5zZXRNYXNrKGF0LmRlcHRoV3JpdGUpLHMuc2V0TWFzayhhdC5jb2xvcldyaXRlKTtsZXQgQ2U9YXQuc3RlbmNpbFdyaXRlO2Muc2V0VGVzdChDZSksQ2UmJihjLnNldE1hc2soYXQuc3RlbmNpbFdyaXRlTWFzayksYy5zZXRGdW5jKGF0LnN0ZW5jaWxGdW5jLGF0LnN0ZW5jaWxSZWYsYXQuc3RlbmNpbEZ1bmNNYXNrKSxjLnNldE9wKGF0LnN0ZW5jaWxGYWlsLGF0LnN0ZW5jaWxaRmFpbCxhdC5zdGVuY2lsWlBhc3MpKSxpZShhdC5wb2x5Z29uT2Zmc2V0LGF0LnBvbHlnb25PZmZzZXRGYWN0b3IsYXQucG9seWdvbk9mZnNldFVuaXRzKSxhdC5hbHBoYVRvQ292ZXJhZ2U9PT0hMD9sdCgzMjkyNik6S3QoMzI5MjYpfWZ1bmN0aW9uIGh0KGF0KXtPIT09YXQmJihhdD9lLmZyb250RmFjZSgyMzA0KTplLmZyb250RmFjZSgyMzA1KSxPPWF0KX1mdW5jdGlvbiB3dChhdCl7YXQhPT1EaGU/KGx0KDI4ODQpLGF0IT09RCYmKGF0PT09TXV0P2UuY3VsbEZhY2UoMTAyOSk6YXQ9PT1PaGU/ZS5jdWxsRmFjZSgxMDI4KTplLmN1bGxGYWNlKDEwMzIpKSk6S3QoMjg4NCksRD1hdH1mdW5jdGlvbiBrdChhdCl7YXQhPT1CJiYoRiYmZS5saW5lV2lkdGgoYXQpLEI9YXQpfWZ1bmN0aW9uIGllKGF0LHNlLFF0KXthdD8obHQoMzI4MjMpLChJIT09c2V8fEwhPT1RdCkmJihlLnBvbHlnb25PZmZzZXQoc2UsUXQpLEk9c2UsTD1RdCkpOkt0KDMyODIzKX1mdW5jdGlvbiBlZShhdCl7YXQ/bHQoMzA4OSk6S3QoMzA4OSl9ZnVuY3Rpb24gTGUoYXQpe2F0PT09dm9pZCAwJiYoYXQ9MzM5ODQrUi0xKSxXIT09YXQmJihlLmFjdGl2ZVRleHR1cmUoYXQpLFc9YXQpfWZ1bmN0aW9uIGFyKGF0LHNlKXtXPT09bnVsbCYmTGUoKTtsZXQgUXQ9WltXXTtRdD09PXZvaWQgMCYmKFF0PXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0sWltXXT1RdCksKFF0LnR5cGUhPT1hdHx8UXQudGV4dHVyZSE9PXNlKSYmKGUuYmluZFRleHR1cmUoYXQsc2V8fE10W2F0XSksUXQudHlwZT1hdCxRdC50ZXh0dXJlPXNlKX1mdW5jdGlvbiBmcigpe2xldCBhdD1aW1ddO2F0IT09dm9pZCAwJiZhdC50eXBlIT09dm9pZCAwJiYoZS5iaW5kVGV4dHVyZShhdC50eXBlLG51bGwpLGF0LnR5cGU9dm9pZCAwLGF0LnRleHR1cmU9dm9pZCAwKX1mdW5jdGlvbiB0dCgpe3RyeXtlLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gJCgpe3RyeXtlLnRleFN1YkltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiBJdCgpe3RyeXtlLnRleFN1YkltYWdlM0QuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiAkdCgpe3RyeXtlLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gaGUoKXt0cnl7ZS50ZXhTdG9yYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiBUdCgpe3RyeXtlLnRleFN0b3JhZ2UzRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIGJlKCl7dHJ5e2UudGV4SW1hZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIG50KCl7dHJ5e2UudGV4SW1hZ2UzRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIEN0KGF0KXtzdC5lcXVhbHMoYXQpPT09ITEmJihlLnNjaXNzb3IoYXQueCxhdC55LGF0LnosYXQudyksc3QuY29weShhdCkpfWZ1bmN0aW9uIFd0KGF0KXtTdC5lcXVhbHMoYXQpPT09ITEmJihlLnZpZXdwb3J0KGF0LngsYXQueSxhdC56LGF0LncpLFN0LmNvcHkoYXQpKX1mdW5jdGlvbiBmZSgpe2UuZGlzYWJsZSgzMDQyKSxlLmRpc2FibGUoMjg4NCksZS5kaXNhYmxlKDI5MjkpLGUuZGlzYWJsZSgzMjgyMyksZS5kaXNhYmxlKDMwODkpLGUuZGlzYWJsZSgyOTYwKSxlLmRpc2FibGUoMzI5MjYpLGUuYmxlbmRFcXVhdGlvbigzMjc3NCksZS5ibGVuZEZ1bmMoMSwwKSxlLmJsZW5kRnVuY1NlcGFyYXRlKDEsMCwxLDApLGUuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSxlLmNsZWFyQ29sb3IoMCwwLDAsMCksZS5kZXB0aE1hc2soITApLGUuZGVwdGhGdW5jKDUxMyksZS5jbGVhckRlcHRoKDEpLGUuc3RlbmNpbE1hc2soNDI5NDk2NzI5NSksZS5zdGVuY2lsRnVuYyg1MTksMCw0Mjk0OTY3Mjk1KSxlLnN0ZW5jaWxPcCg3NjgwLDc2ODAsNzY4MCksZS5jbGVhclN0ZW5jaWwoMCksZS5jdWxsRmFjZSgxMDI5KSxlLmZyb250RmFjZSgyMzA1KSxlLnBvbHlnb25PZmZzZXQoMCwwKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQpLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpLG49PT0hMCYmKGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LG51bGwpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG51bGwpKSxlLnVzZVByb2dyYW0obnVsbCksZS5saW5lV2lkdGgoMSksZS5zY2lzc29yKDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLGUudmlld3BvcnQoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCksdT17fSxXPW51bGwsWj17fSxoPXt9LGY9bmV3IFdlYWtNYXAscD1bXSxkPW51bGwsZz0hMSxfPW51bGwseT1udWxsLHg9bnVsbCxiPW51bGwsUz1udWxsLEM9bnVsbCxQPW51bGwsaz0hMSxPPW51bGwsRD1udWxsLEI9bnVsbCxJPW51bGwsTD1udWxsLHN0LnNldCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSxTdC5zZXQoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCkscy5yZXNldCgpLGwucmVzZXQoKSxjLnJlc2V0KCl9cmV0dXJue2J1ZmZlcnM6e2NvbG9yOnMsZGVwdGg6bCxzdGVuY2lsOmN9LGVuYWJsZTpsdCxkaXNhYmxlOkt0LGJpbmRGcmFtZWJ1ZmZlcjpfdCxkcmF3QnVmZmVyczpjdCx1c2VQcm9ncmFtOlgsc2V0QmxlbmRpbmc6cSxzZXRNYXRlcmlhbDpwdCxzZXRGbGlwU2lkZWQ6aHQsc2V0Q3VsbEZhY2U6d3Qsc2V0TGluZVdpZHRoOmt0LHNldFBvbHlnb25PZmZzZXQ6aWUsc2V0U2Npc3NvclRlc3Q6ZWUsYWN0aXZlVGV4dHVyZTpMZSxiaW5kVGV4dHVyZTphcix1bmJpbmRUZXh0dXJlOmZyLGNvbXByZXNzZWRUZXhJbWFnZTJEOnR0LHRleEltYWdlMkQ6YmUsdGV4SW1hZ2UzRDpudCx0ZXhTdG9yYWdlMkQ6aGUsdGV4U3RvcmFnZTNEOlR0LHRleFN1YkltYWdlMkQ6JCx0ZXhTdWJJbWFnZTNEOkl0LGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEOiR0LHNjaXNzb3I6Q3Qsdmlld3BvcnQ6V3QscmVzZXQ6ZmV9fWZ1bmN0aW9uIFRncihlLHQscixuLGksbyxhKXtsZXQgcz1pLmlzV2ViR0wyLGw9aS5tYXhUZXh0dXJlcyxjPWkubWF4Q3ViZW1hcFNpemUsdT1pLm1heFRleHR1cmVTaXplLGg9aS5tYXhTYW1wbGVzLHA9dC5oYXMoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpP3QuZ2V0KCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKTp2b2lkIDAsZD1uZXcgV2Vha01hcCxnLF89ITE7dHJ5e189dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyE9InVuZGVmaW5lZCImJm5ldyBPZmZzY3JlZW5DYW52YXMoMSwxKS5nZXRDb250ZXh0KCIyZCIpIT09bnVsbH1jYXRjaCh0dCl7fWZ1bmN0aW9uIHkodHQsJCl7cmV0dXJuIF8/bmV3IE9mZnNjcmVlbkNhbnZhcyh0dCwkKTpRUCgiY2FudmFzIil9ZnVuY3Rpb24geCh0dCwkLEl0LCR0KXtsZXQgaGU9MTtpZigodHQud2lkdGg+JHR8fHR0LmhlaWdodD4kdCkmJihoZT0kdC9NYXRoLm1heCh0dC53aWR0aCx0dC5oZWlnaHQpKSxoZTwxfHwkPT09ITApaWYodHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0dCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJnR0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJnR0IGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApe2xldCBUdD0kP1JmZTpNYXRoLmZsb29yLGJlPVR0KGhlKnR0LndpZHRoKSxudD1UdChoZSp0dC5oZWlnaHQpO2c9PT12b2lkIDAmJihnPXkoYmUsbnQpKTtsZXQgQ3Q9SXQ/eShiZSxudCk6ZztyZXR1cm4gQ3Qud2lkdGg9YmUsQ3QuaGVpZ2h0PW50LEN0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKHR0LDAsMCxiZSxudCksY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGhhcyBiZWVuIHJlc2l6ZWQgZnJvbSAoIit0dC53aWR0aCsieCIrdHQuaGVpZ2h0KyIpIHRvICgiK2JlKyJ4IitudCsiKS4iKSxDdH1lbHNlIHJldHVybiJkYXRhImluIHR0JiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIrdHQud2lkdGgrIngiK3R0LmhlaWdodCsiKS4iKSx0dDtyZXR1cm4gdHR9ZnVuY3Rpb24gYih0dCl7cmV0dXJuIEp1dCh0dC53aWR0aCkmJkp1dCh0dC5oZWlnaHQpfWZ1bmN0aW9uIFModHQpe3JldHVybiBzPyExOnR0LndyYXBTIT09Sm98fHR0LndyYXBUIT09Sm98fHR0Lm1pbkZpbHRlciE9PUxpJiZ0dC5taW5GaWx0ZXIhPT1vaX1mdW5jdGlvbiBDKHR0LCQpe3JldHVybiB0dC5nZW5lcmF0ZU1pcG1hcHMmJiQmJnR0Lm1pbkZpbHRlciE9PUxpJiZ0dC5taW5GaWx0ZXIhPT1vaX1mdW5jdGlvbiBQKHR0KXtlLmdlbmVyYXRlTWlwbWFwKHR0KX1mdW5jdGlvbiBrKHR0LCQsSXQsJHQsaGU9ITEpe2lmKHM9PT0hMSlyZXR1cm4gJDtpZih0dCE9PW51bGwpe2lmKGVbdHRdIT09dm9pZCAwKXJldHVybiBlW3R0XTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gdXNlIG5vbi1leGlzdGluZyBXZWJHTCBpbnRlcm5hbCBmb3JtYXQgJyIrdHQrIiciKX1sZXQgVHQ9JDtyZXR1cm4gJD09PTY0MDMmJihJdD09PTUxMjYmJihUdD0zMzMyNiksSXQ9PT01MTMxJiYoVHQ9MzMzMjUpLEl0PT09NTEyMSYmKFR0PTMzMzIxKSksJD09PTMzMzE5JiYoSXQ9PT01MTI2JiYoVHQ9MzMzMjgpLEl0PT09NTEzMSYmKFR0PTMzMzI3KSxJdD09PTUxMjEmJihUdD0zMzMyMykpLCQ9PT02NDA4JiYoSXQ9PT01MTI2JiYoVHQ9MzQ4MzYpLEl0PT09NTEzMSYmKFR0PTM0ODQyKSxJdD09PTUxMjEmJihUdD0kdD09PVluJiZoZT09PSExPzM1OTA3OjMyODU2KSxJdD09PTMyODE5JiYoVHQ9MzI4NTQpLEl0PT09MzI4MjAmJihUdD0zMjg1NSkpLChUdD09PTMzMzI1fHxUdD09PTMzMzI2fHxUdD09PTMzMzI3fHxUdD09PTMzMzI4fHxUdD09PTM0ODQyfHxUdD09PTM0ODM2KSYmdC5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSxUdH1mdW5jdGlvbiBPKHR0LCQsSXQpe3JldHVybiBDKHR0LEl0KT09PSEwfHx0dC5pc0ZyYW1lYnVmZmVyVGV4dHVyZSYmdHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PW9pP01hdGgubG9nMihNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KSkrMTp0dC5taXBtYXBzIT09dm9pZCAwJiZ0dC5taXBtYXBzLmxlbmd0aD4wP3R0Lm1pcG1hcHMubGVuZ3RoOnR0LmlzQ29tcHJlc3NlZFRleHR1cmUmJkFycmF5LmlzQXJyYXkodHQuaW1hZ2UpPyQubWlwbWFwcy5sZW5ndGg6MX1mdW5jdGlvbiBEKHR0KXtyZXR1cm4gdHQ9PT1MaXx8dHQ9PT1pVXx8dHQ9PT1vVT85NzI4Ojk3Mjl9ZnVuY3Rpb24gQih0dCl7bGV0ICQ9dHQudGFyZ2V0OyQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsQiksTCgkKSwkLmlzVmlkZW9UZXh0dXJlJiZkLmRlbGV0ZSgkKSxhLm1lbW9yeS50ZXh0dXJlcy0tfWZ1bmN0aW9uIEkodHQpe2xldCAkPXR0LnRhcmdldDskLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEkpLFIoJCl9ZnVuY3Rpb24gTCh0dCl7bGV0ICQ9bi5nZXQodHQpOyQuX193ZWJnbEluaXQhPT12b2lkIDAmJihlLmRlbGV0ZVRleHR1cmUoJC5fX3dlYmdsVGV4dHVyZSksbi5yZW1vdmUodHQpKX1mdW5jdGlvbiBSKHR0KXtsZXQgJD10dC50ZXh0dXJlLEl0PW4uZ2V0KHR0KSwkdD1uLmdldCgkKTtpZighIXR0KXtpZigkdC5fX3dlYmdsVGV4dHVyZSE9PXZvaWQgMCYmKGUuZGVsZXRlVGV4dHVyZSgkdC5fX3dlYmdsVGV4dHVyZSksYS5tZW1vcnkudGV4dHVyZXMtLSksdHQuZGVwdGhUZXh0dXJlJiZ0dC5kZXB0aFRleHR1cmUuZGlzcG9zZSgpLHR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgaGU9MDtoZTw2O2hlKyspZS5kZWxldGVGcmFtZWJ1ZmZlcihJdC5fX3dlYmdsRnJhbWVidWZmZXJbaGVdKSxJdC5fX3dlYmdsRGVwdGhidWZmZXImJmUuZGVsZXRlUmVuZGVyYnVmZmVyKEl0Ll9fd2ViZ2xEZXB0aGJ1ZmZlcltoZV0pO2Vsc2UgZS5kZWxldGVGcmFtZWJ1ZmZlcihJdC5fX3dlYmdsRnJhbWVidWZmZXIpLEl0Ll9fd2ViZ2xEZXB0aGJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbERlcHRoYnVmZmVyKSxJdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXImJmUuZGVsZXRlRnJhbWVidWZmZXIoSXQuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxJdC5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJmUuZGVsZXRlUmVuZGVyYnVmZmVyKEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZlLmRlbGV0ZVJlbmRlcmJ1ZmZlcihJdC5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKHR0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMpZm9yKGxldCBoZT0wLFR0PSQubGVuZ3RoO2hlPFR0O2hlKyspe2xldCBiZT1uLmdldCgkW2hlXSk7YmUuX193ZWJnbFRleHR1cmUmJihlLmRlbGV0ZVRleHR1cmUoYmUuX193ZWJnbFRleHR1cmUpLGEubWVtb3J5LnRleHR1cmVzLS0pLG4ucmVtb3ZlKCRbaGVdKX1uLnJlbW92ZSgkKSxuLnJlbW92ZSh0dCl9fWxldCBGPTA7ZnVuY3Rpb24geigpe0Y9MH1mdW5jdGlvbiBVKCl7bGV0IHR0PUY7cmV0dXJuIHR0Pj1sJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IFRyeWluZyB0byB1c2UgIit0dCsiIHRleHR1cmUgdW5pdHMgd2hpbGUgdGhpcyBHUFUgc3VwcG9ydHMgb25seSAiK2wpLEYrPTEsdHR9ZnVuY3Rpb24gVyh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LmlzVmlkZW9UZXh0dXJlJiZrdCh0dCksdHQudmVyc2lvbj4wJiZJdC5fX3ZlcnNpb24hPT10dC52ZXJzaW9uKXtsZXQgJHQ9dHQuaW1hZ2U7aWYoJHQ9PT12b2lkIDApY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNlIGlmKCR0LmNvbXBsZXRlPT09ITEpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlIik7ZWxzZXtsdChJdCx0dCwkKTtyZXR1cm59fXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM1NTMsSXQuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIFoodHQsJCl7bGV0IEl0PW4uZ2V0KHR0KTtpZih0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe2x0KEl0LHR0LCQpO3JldHVybn1yLmFjdGl2ZVRleHR1cmUoMzM5ODQrJCksci5iaW5kVGV4dHVyZSgzNTg2NixJdC5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gcnQodHQsJCl7bGV0IEl0PW4uZ2V0KHR0KTtpZih0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe2x0KEl0LHR0LCQpO3JldHVybn1yLmFjdGl2ZVRleHR1cmUoMzM5ODQrJCksci5iaW5kVGV4dHVyZSgzMjg3OSxJdC5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gb3QodHQsJCl7bGV0IEl0PW4uZ2V0KHR0KTtpZih0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe0t0KEl0LHR0LCQpO3JldHVybn1yLmFjdGl2ZVRleHR1cmUoMzM5ODQrJCksci5iaW5kVGV4dHVyZSgzNDA2NyxJdC5fX3dlYmdsVGV4dHVyZSl9bGV0IHN0PXtbalBdOjEwNDk3LFtKb106MzMwNzEsW1hQXTozMzY0OH0sU3Q9e1tMaV06OTcyOCxbaVVdOjk5ODQsW29VXTo5OTg2LFtvaV06OTcyOSxba2h0XTo5OTg1LFtveF06OTk4N307ZnVuY3Rpb24gYnQodHQsJCxJdCl7aWYoSXQ/KGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MixzdFskLndyYXBTXSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQzLHN0WyQud3JhcFRdKSwodHQ9PT0zMjg3OXx8dHQ9PT0zNTg2NikmJmUudGV4UGFyYW1ldGVyaSh0dCwzMjg4MixzdFskLndyYXBSXSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQwLFN0WyQubWFnRmlsdGVyXSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQxLFN0WyQubWluRmlsdGVyXSkpOihlLnRleFBhcmFtZXRlcmkodHQsMTAyNDIsMzMwNzEpLGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MywzMzA3MSksKHR0PT09MzI4Nzl8fHR0PT09MzU4NjYpJiZlLnRleFBhcmFtZXRlcmkodHQsMzI4ODIsMzMwNzEpLCgkLndyYXBTIT09Sm98fCQud3JhcFQhPT1KbykmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLndyYXBTIGFuZCBUZXh0dXJlLndyYXBUIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuQ2xhbXBUb0VkZ2VXcmFwcGluZy4iKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDAsRCgkLm1hZ0ZpbHRlcikpLGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MSxEKCQubWluRmlsdGVyKSksJC5taW5GaWx0ZXIhPT1MaSYmJC5taW5GaWx0ZXIhPT1vaSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuIikpLHQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKT09PSEwKXtsZXQgJHQ9dC5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2lmKCQudHlwZT09PWpkJiZ0LmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik9PT0hMXx8cz09PSExJiYkLnR5cGU9PT1DdiYmdC5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik9PT0hMSlyZXR1cm47KCQuYW5pc290cm9weT4xfHxuLmdldCgkKS5fX2N1cnJlbnRBbmlzb3Ryb3B5KSYmKGUudGV4UGFyYW1ldGVyZih0dCwkdC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbigkLmFuaXNvdHJvcHksaS5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxuLmdldCgkKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PSQuYW5pc290cm9weSl9fWZ1bmN0aW9uIE10KHR0LCQpe3R0Ll9fd2ViZ2xJbml0PT09dm9pZCAwJiYodHQuX193ZWJnbEluaXQ9ITAsJC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixCKSx0dC5fX3dlYmdsVGV4dHVyZT1lLmNyZWF0ZVRleHR1cmUoKSxhLm1lbW9yeS50ZXh0dXJlcysrKX1mdW5jdGlvbiBsdCh0dCwkLEl0KXtsZXQgJHQ9MzU1MzskLmlzRGF0YVRleHR1cmUyREFycmF5JiYoJHQ9MzU4NjYpLCQuaXNEYXRhVGV4dHVyZTNEJiYoJHQ9MzI4NzkpLE10KHR0LCQpLHIuYWN0aXZlVGV4dHVyZSgzMzk4NCtJdCksci5iaW5kVGV4dHVyZSgkdCx0dC5fX3dlYmdsVGV4dHVyZSksZS5waXhlbFN0b3JlaSgzNzQ0MCwkLmZsaXBZKSxlLnBpeGVsU3RvcmVpKDM3NDQxLCQucHJlbXVsdGlwbHlBbHBoYSksZS5waXhlbFN0b3JlaSgzMzE3LCQudW5wYWNrQWxpZ25tZW50KSxlLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCBoZT1TKCQpJiZiKCQuaW1hZ2UpPT09ITEsVHQ9eCgkLmltYWdlLGhlLCExLHUpO1R0PWllKCQsVHQpO2xldCBiZT1iKFR0KXx8cyxudD1vLmNvbnZlcnQoJC5mb3JtYXQsJC5lbmNvZGluZyksQ3Q9by5jb252ZXJ0KCQudHlwZSksV3Q9aygkLmludGVybmFsRm9ybWF0LG50LEN0LCQuZW5jb2RpbmcsJC5pc1ZpZGVvVGV4dHVyZSk7YnQoJHQsJCxiZSk7bGV0IGZlLGF0PSQubWlwbWFwcyxzZT1zJiYkLmlzVmlkZW9UZXh0dXJlIT09ITAsUXQ9dHQuX192ZXJzaW9uPT09dm9pZCAwLENlPU8oJCxUdCxiZSk7aWYoJC5pc0RlcHRoVGV4dHVyZSlXdD02NDAyLHM/JC50eXBlPT09amQ/V3Q9MzYwMTI6JC50eXBlPT09SFA/V3Q9MzMxOTA6JC50eXBlPT09QXY/V3Q9MzUwNTY6V3Q9MzMxODk6JC50eXBlPT09amQmJmNvbnNvbGUuZXJyb3IoIldlYkdMUmVuZGVyZXI6IEZsb2F0aW5nIHBvaW50IGRlcHRoIHRleHR1cmUgcmVxdWlyZXMgV2ViR0wyLiIpLCQuZm9ybWF0PT09ejAmJld0PT09NjQwMiYmJC50eXBlIT09RzMmJiQudHlwZSE9PUhQJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRTaG9ydFR5cGUgb3IgVW5zaWduZWRJbnRUeXBlIGZvciBEZXB0aEZvcm1hdCBEZXB0aFRleHR1cmUuIiksJC50eXBlPUczLEN0PW8uY29udmVydCgkLnR5cGUpKSwkLmZvcm1hdD09PWt2JiZXdD09PTY0MDImJihXdD0zNDA0MSwkLnR5cGUhPT1BdiYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkSW50MjQ4VHlwZSBmb3IgRGVwdGhTdGVuY2lsRm9ybWF0IERlcHRoVGV4dHVyZS4iKSwkLnR5cGU9QXYsQ3Q9by5jb252ZXJ0KCQudHlwZSkpKSxzZSYmUXQ/ci50ZXhTdG9yYWdlMkQoMzU1MywxLFd0LFR0LndpZHRoLFR0LmhlaWdodCk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxUdC53aWR0aCxUdC5oZWlnaHQsMCxudCxDdCxudWxsKTtlbHNlIGlmKCQuaXNEYXRhVGV4dHVyZSlpZihhdC5sZW5ndGg+MCYmYmUpe3NlJiZRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxhdFswXS53aWR0aCxhdFswXS5oZWlnaHQpO2ZvcihsZXQgUHQ9MCxOdD1hdC5sZW5ndGg7UHQ8TnQ7UHQrKylmZT1hdFtQdF0sc2U/ci50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsZmUud2lkdGgsZmUuaGVpZ2h0LG50LEN0LGZlLmRhdGEpOnIudGV4SW1hZ2UyRCgzNTUzLFB0LFd0LGZlLndpZHRoLGZlLmhlaWdodCwwLG50LEN0LGZlLmRhdGEpOyQuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2Ugc2U/KFF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LFR0LndpZHRoLFR0LmhlaWdodCksci50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsVHQud2lkdGgsVHQuaGVpZ2h0LG50LEN0LFR0LmRhdGEpKTpyLnRleEltYWdlMkQoMzU1MywwLFd0LFR0LndpZHRoLFR0LmhlaWdodCwwLG50LEN0LFR0LmRhdGEpO2Vsc2UgaWYoJC5pc0NvbXByZXNzZWRUZXh0dXJlKXtzZSYmUXQmJnIudGV4U3RvcmFnZTJEKDM1NTMsQ2UsV3QsYXRbMF0ud2lkdGgsYXRbMF0uaGVpZ2h0KTtmb3IobGV0IFB0PTAsTnQ9YXQubGVuZ3RoO1B0PE50O1B0KyspZmU9YXRbUHRdLCQuZm9ybWF0IT09UW8/bnQhPT1udWxsP3NlP3IuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1MyxQdCwwLDAsZmUud2lkdGgsZmUuaGVpZ2h0LG50LGZlLmRhdGEpOnIuY29tcHJlc3NlZFRleEltYWdlMkQoMzU1MyxQdCxXdCxmZS53aWR0aCxmZS5oZWlnaHQsMCxmZS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCkiKTpzZT9yLnRleFN1YkltYWdlMkQoMzU1MyxQdCwwLDAsZmUud2lkdGgsZmUuaGVpZ2h0LG50LEN0LGZlLmRhdGEpOnIudGV4SW1hZ2UyRCgzNTUzLFB0LFd0LGZlLndpZHRoLGZlLmhlaWdodCwwLG50LEN0LGZlLmRhdGEpfWVsc2UgaWYoJC5pc0RhdGFUZXh0dXJlMkRBcnJheSlzZT8oUXQmJnIudGV4U3RvcmFnZTNEKDM1ODY2LENlLFd0LFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCksci50ZXhTdWJJbWFnZTNEKDM1ODY2LDAsMCwwLDAsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoLG50LEN0LFR0LmRhdGEpKTpyLnRleEltYWdlM0QoMzU4NjYsMCxXdCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgsMCxudCxDdCxUdC5kYXRhKTtlbHNlIGlmKCQuaXNEYXRhVGV4dHVyZTNEKXNlPyhRdCYmci50ZXhTdG9yYWdlM0QoMzI4NzksQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoKSxyLnRleFN1YkltYWdlM0QoMzI4NzksMCwwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UzRCgzMjg3OSwwLFd0LFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCwwLG50LEN0LFR0LmRhdGEpO2Vsc2UgaWYoJC5pc0ZyYW1lYnVmZmVyVGV4dHVyZSlzZSYmUXQ/ci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQpOnIudGV4SW1hZ2UyRCgzNTUzLDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LDAsbnQsQ3QsbnVsbCk7ZWxzZSBpZihhdC5sZW5ndGg+MCYmYmUpe3NlJiZRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxhdFswXS53aWR0aCxhdFswXS5oZWlnaHQpO2ZvcihsZXQgUHQ9MCxOdD1hdC5sZW5ndGg7UHQ8TnQ7UHQrKylmZT1hdFtQdF0sc2U/ci50ZXhTdWJJbWFnZTJEKDM1NTMsUHQsMCwwLG50LEN0LGZlKTpyLnRleEltYWdlMkQoMzU1MyxQdCxXdCxudCxDdCxmZSk7JC5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBzZT8oUXQmJnIudGV4U3RvcmFnZTJEKDM1NTMsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KSxyLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxudCxDdCxUdCkpOnIudGV4SW1hZ2UyRCgzNTUzLDAsV3QsbnQsQ3QsVHQpO0MoJCxiZSkmJlAoJHQpLHR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sJC5vblVwZGF0ZSYmJC5vblVwZGF0ZSgkKX1mdW5jdGlvbiBLdCh0dCwkLEl0KXtpZigkLmltYWdlLmxlbmd0aCE9PTYpcmV0dXJuO010KHR0LCQpLHIuYWN0aXZlVGV4dHVyZSgzMzk4NCtJdCksci5iaW5kVGV4dHVyZSgzNDA2Nyx0dC5fX3dlYmdsVGV4dHVyZSksZS5waXhlbFN0b3JlaSgzNzQ0MCwkLmZsaXBZKSxlLnBpeGVsU3RvcmVpKDM3NDQxLCQucHJlbXVsdGlwbHlBbHBoYSksZS5waXhlbFN0b3JlaSgzMzE3LCQudW5wYWNrQWxpZ25tZW50KSxlLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCAkdD0kJiYoJC5pc0NvbXByZXNzZWRUZXh0dXJlfHwkLmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpLGhlPSQuaW1hZ2VbMF0mJiQuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxUdD1bXTtmb3IobGV0IFB0PTA7UHQ8NjtQdCsrKSEkdCYmIWhlP1R0W1B0XT14KCQuaW1hZ2VbUHRdLCExLCEwLGMpOlR0W1B0XT1oZT8kLmltYWdlW1B0XS5pbWFnZTokLmltYWdlW1B0XSxUdFtQdF09aWUoJCxUdFtQdF0pO2xldCBiZT1UdFswXSxudD1iKGJlKXx8cyxDdD1vLmNvbnZlcnQoJC5mb3JtYXQsJC5lbmNvZGluZyksV3Q9by5jb252ZXJ0KCQudHlwZSksZmU9aygkLmludGVybmFsRm9ybWF0LEN0LFd0LCQuZW5jb2RpbmcpLGF0PXMmJiQuaXNWaWRlb1RleHR1cmUhPT0hMCxzZT10dC5fX3ZlcnNpb249PT12b2lkIDAsUXQ9TygkLGJlLG50KTtidCgzNDA2NywkLG50KTtsZXQgQ2U7aWYoJHQpe2F0JiZzZSYmci50ZXhTdG9yYWdlMkQoMzQwNjcsUXQsZmUsYmUud2lkdGgsYmUuaGVpZ2h0KTtmb3IobGV0IFB0PTA7UHQ8NjtQdCsrKXtDZT1UdFtQdF0ubWlwbWFwcztmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB6ZT1DZVtOdF07JC5mb3JtYXQhPT1Rbz9DdCE9PW51bGw/YXQ/ci5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCwwLDAsemUud2lkdGgsemUuaGVpZ2h0LEN0LHplLmRhdGEpOnIuY29tcHJlc3NlZFRleEltYWdlMkQoMzQwNjkrUHQsTnQsZmUsemUud2lkdGgsemUuaGVpZ2h0LDAsemUuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKSIpOmF0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCwwLDAsemUud2lkdGgsemUuaGVpZ2h0LEN0LFd0LHplLmRhdGEpOnIudGV4SW1hZ2UyRCgzNDA2OStQdCxOdCxmZSx6ZS53aWR0aCx6ZS5oZWlnaHQsMCxDdCxXdCx6ZS5kYXRhKX19fWVsc2V7Q2U9JC5taXBtYXBzLGF0JiZzZSYmKENlLmxlbmd0aD4wJiZRdCsrLHIudGV4U3RvcmFnZTJEKDM0MDY3LFF0LGZlLFR0WzBdLndpZHRoLFR0WzBdLmhlaWdodCkpO2ZvcihsZXQgUHQ9MDtQdDw2O1B0KyspaWYoaGUpe2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCwwLDAsMCxUdFtQdF0ud2lkdGgsVHRbUHRdLmhlaWdodCxDdCxXdCxUdFtQdF0uZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LDAsZmUsVHRbUHRdLndpZHRoLFR0W1B0XS5oZWlnaHQsMCxDdCxXdCxUdFtQdF0uZGF0YSk7Zm9yKGxldCBOdD0wO050PENlLmxlbmd0aDtOdCsrKXtsZXQgeW49Q2VbTnRdLmltYWdlW1B0XS5pbWFnZTthdD9yLnRleFN1YkltYWdlMkQoMzQwNjkrUHQsTnQrMSwwLDAseW4ud2lkdGgseW4uaGVpZ2h0LEN0LFd0LHluLmRhdGEpOnIudGV4SW1hZ2UyRCgzNDA2OStQdCxOdCsxLGZlLHluLndpZHRoLHluLmhlaWdodCwwLEN0LFd0LHluLmRhdGEpfX1lbHNle2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCwwLDAsMCxDdCxXdCxUdFtQdF0pOnIudGV4SW1hZ2UyRCgzNDA2OStQdCwwLGZlLEN0LFd0LFR0W1B0XSk7Zm9yKGxldCBOdD0wO050PENlLmxlbmd0aDtOdCsrKXtsZXQgemU9Q2VbTnRdO2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCsxLDAsMCxDdCxXdCx6ZS5pbWFnZVtQdF0pOnIudGV4SW1hZ2UyRCgzNDA2OStQdCxOdCsxLGZlLEN0LFd0LHplLmltYWdlW1B0XSl9fX1DKCQsbnQpJiZQKDM0MDY3KSx0dC5fX3ZlcnNpb249JC52ZXJzaW9uLCQub25VcGRhdGUmJiQub25VcGRhdGUoJCl9ZnVuY3Rpb24gX3QodHQsJCxJdCwkdCxoZSl7bGV0IFR0PW8uY29udmVydChJdC5mb3JtYXQsSXQuZW5jb2RpbmcpLGJlPW8uY29udmVydChJdC50eXBlKSxudD1rKEl0LmludGVybmFsRm9ybWF0LFR0LGJlLEl0LmVuY29kaW5nKTtuLmdldCgkKS5fX2hhc0V4dGVybmFsVGV4dHVyZXN8fChoZT09PTMyODc5fHxoZT09PTM1ODY2P3IudGV4SW1hZ2UzRChoZSwwLG50LCQud2lkdGgsJC5oZWlnaHQsJC5kZXB0aCwwLFR0LGJlLG51bGwpOnIudGV4SW1hZ2UyRChoZSwwLG50LCQud2lkdGgsJC5oZWlnaHQsMCxUdCxiZSxudWxsKSksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdHQpLCQudXNlUmVuZGVyVG9UZXh0dXJlP3AuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwkdCxoZSxuLmdldChJdCkuX193ZWJnbFRleHR1cmUsMCx3dCgkKSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwkdCxoZSxuLmdldChJdCkuX193ZWJnbFRleHR1cmUsMCksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gY3QodHQsJCxJdCl7aWYoZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLHR0KSwkLmRlcHRoQnVmZmVyJiYhJC5zdGVuY2lsQnVmZmVyKXtsZXQgJHQ9MzMxODk7aWYoSXR8fCQudXNlUmVuZGVyVG9UZXh0dXJlKXtsZXQgaGU9JC5kZXB0aFRleHR1cmU7aGUmJmhlLmlzRGVwdGhUZXh0dXJlJiYoaGUudHlwZT09PWpkPyR0PTM2MDEyOmhlLnR5cGU9PT1IUCYmKCR0PTMzMTkwKSk7bGV0IFR0PXd0KCQpOyQudXNlUmVuZGVyVG9UZXh0dXJlP3AucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLFR0LCR0LCQud2lkdGgsJC5oZWlnaHQpOmUucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLFR0LCR0LCQud2lkdGgsJC5oZWlnaHQpfWVsc2UgZS5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLCR0LCQud2lkdGgsJC5oZWlnaHQpO2UuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwOTYsMzYxNjEsdHQpfWVsc2UgaWYoJC5kZXB0aEJ1ZmZlciYmJC5zdGVuY2lsQnVmZmVyKXtsZXQgJHQ9d3QoJCk7SXQmJiQudXNlUmVuZGVyYnVmZmVyP2UucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLCR0LDM1MDU2LCQud2lkdGgsJC5oZWlnaHQpOiQudXNlUmVuZGVyVG9UZXh0dXJlP3AucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLCR0LDM1MDU2LCQud2lkdGgsJC5oZWlnaHQpOmUucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSwkLndpZHRoLCQuaGVpZ2h0KSxlLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLHR0KX1lbHNle2xldCAkdD0kLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9PT0hMD8kLnRleHR1cmVbMF06JC50ZXh0dXJlLGhlPW8uY29udmVydCgkdC5mb3JtYXQsJHQuZW5jb2RpbmcpLFR0PW8uY29udmVydCgkdC50eXBlKSxiZT1rKCR0LmludGVybmFsRm9ybWF0LGhlLFR0LCR0LmVuY29kaW5nKSxudD13dCgkKTtJdCYmJC51c2VSZW5kZXJidWZmZXI/ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsbnQsYmUsJC53aWR0aCwkLmhlaWdodCk6JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsbnQsYmUsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLGJlLCQud2lkdGgsJC5oZWlnaHQpfWUuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKX1mdW5jdGlvbiBYKHR0LCQpe2lmKCQmJiQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpdGhyb3cgbmV3IEVycm9yKCJEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdHQpLCEoJC5kZXB0aFRleHR1cmUmJiQuZGVwdGhUZXh0dXJlLmlzRGVwdGhUZXh0dXJlKSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsoIW4uZ2V0KCQuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZXx8JC5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGghPT0kLndpZHRofHwkLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQhPT0kLmhlaWdodCkmJigkLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD0kLndpZHRoLCQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD0kLmhlaWdodCwkLmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksVygkLmRlcHRoVGV4dHVyZSwwKTtsZXQgJHQ9bi5nZXQoJC5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGhlPXd0KCQpO2lmKCQuZGVwdGhUZXh0dXJlLmZvcm1hdD09PXowKSQudXNlUmVuZGVyVG9UZXh0dXJlP3AuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzNjA5NiwzNTUzLCR0LDAsaGUpOmUuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1MywkdCwwKTtlbHNlIGlmKCQuZGVwdGhUZXh0dXJlLmZvcm1hdD09PWt2KSQudXNlUmVuZGVyVG9UZXh0dXJlP3AuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzMzMwNiwzNTUzLCR0LDAsaGUpOmUuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzMzMDYsMzU1MywkdCwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iil9ZnVuY3Rpb24gZXQodHQpe2xldCAkPW4uZ2V0KHR0KSxJdD10dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD09PSEwO2lmKHR0LmRlcHRoVGV4dHVyZSYmISQuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcil7aWYoSXQpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpO1goJC5fX3dlYmdsRnJhbWVidWZmZXIsdHQpfWVsc2UgaWYoSXQpeyQuX193ZWJnbERlcHRoYnVmZmVyPVtdO2ZvcihsZXQgJHQ9MDskdDw2OyR0Kyspci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsJC5fX3dlYmdsRnJhbWVidWZmZXJbJHRdKSwkLl9fd2ViZ2xEZXB0aGJ1ZmZlclskdF09ZS5jcmVhdGVSZW5kZXJidWZmZXIoKSxjdCgkLl9fd2ViZ2xEZXB0aGJ1ZmZlclskdF0sdHQsITEpfWVsc2Ugci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsJC5fX3dlYmdsRnJhbWVidWZmZXIpLCQuX193ZWJnbERlcHRoYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksY3QoJC5fX3dlYmdsRGVwdGhidWZmZXIsdHQsITEpO3IuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWZ1bmN0aW9uIGR0KHR0LCQsSXQpe2xldCAkdD1uLmdldCh0dCk7JCE9PXZvaWQgMCYmX3QoJHQuX193ZWJnbEZyYW1lYnVmZmVyLHR0LHR0LnRleHR1cmUsMzYwNjQsMzU1MyksSXQhPT12b2lkIDAmJmV0KHR0KX1mdW5jdGlvbiBxKHR0KXtsZXQgJD10dC50ZXh0dXJlLEl0PW4uZ2V0KHR0KSwkdD1uLmdldCgkKTt0dC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixJKSx0dC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIT09ITAmJigkdC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKCR0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpKSwkdC5fX3ZlcnNpb249JC52ZXJzaW9uLGEubWVtb3J5LnRleHR1cmVzKyspO2xldCBoZT10dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD09PSEwLFR0PXR0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9PT0hMCxiZT0kLmlzRGF0YVRleHR1cmUzRHx8JC5pc0RhdGFUZXh0dXJlMkRBcnJheSxudD1iKHR0KXx8cztpZihoZSl7SXQuX193ZWJnbEZyYW1lYnVmZmVyPVtdO2ZvcihsZXQgQ3Q9MDtDdDw2O0N0KyspSXQuX193ZWJnbEZyYW1lYnVmZmVyW0N0XT1lLmNyZWF0ZUZyYW1lYnVmZmVyKCl9ZWxzZSBpZihJdC5fX3dlYmdsRnJhbWVidWZmZXI9ZS5jcmVhdGVGcmFtZWJ1ZmZlcigpLFR0KWlmKGkuZHJhd0J1ZmZlcnMpe2xldCBDdD10dC50ZXh0dXJlO2ZvcihsZXQgV3Q9MCxmZT1DdC5sZW5ndGg7V3Q8ZmU7V3QrKyl7bGV0IGF0PW4uZ2V0KEN0W1d0XSk7YXQuX193ZWJnbFRleHR1cmU9PT12b2lkIDAmJihhdC5fX3dlYmdsVGV4dHVyZT1lLmNyZWF0ZVRleHR1cmUoKSxhLm1lbW9yeS50ZXh0dXJlcysrKX19ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIgb3IgV0VCR0xfZHJhd19idWZmZXJzIGV4dGVuc2lvbi4iKTtlbHNlIGlmKHR0LnVzZVJlbmRlcmJ1ZmZlcilpZihzKXtJdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI9ZS5jcmVhdGVGcmFtZWJ1ZmZlcigpLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcj1lLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLGUuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxJdC5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2xldCBDdD1vLmNvbnZlcnQoJC5mb3JtYXQsJC5lbmNvZGluZyksV3Q9by5jb252ZXJ0KCQudHlwZSksZmU9aygkLmludGVybmFsRm9ybWF0LEN0LFd0LCQuZW5jb2RpbmcpLGF0PXd0KHR0KTtlLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxhdCxmZSx0dC53aWR0aCx0dC5oZWlnaHQpLHIuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEl0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxJdC5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpLGUuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKSx0dC5kZXB0aEJ1ZmZlciYmKEl0Ll9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj1lLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLGN0KEl0Ll9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcix0dCwhMCkpLHIuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7aWYoaGUpe3IuYmluZFRleHR1cmUoMzQwNjcsJHQuX193ZWJnbFRleHR1cmUpLGJ0KDM0MDY3LCQsbnQpO2ZvcihsZXQgQ3Q9MDtDdDw2O0N0KyspX3QoSXQuX193ZWJnbEZyYW1lYnVmZmVyW0N0XSx0dCwkLDM2MDY0LDM0MDY5K0N0KTtDKCQsbnQpJiZQKDM0MDY3KSxyLnVuYmluZFRleHR1cmUoKX1lbHNlIGlmKFR0KXtsZXQgQ3Q9dHQudGV4dHVyZTtmb3IobGV0IFd0PTAsZmU9Q3QubGVuZ3RoO1d0PGZlO1d0Kyspe2xldCBhdD1DdFtXdF0sc2U9bi5nZXQoYXQpO3IuYmluZFRleHR1cmUoMzU1MyxzZS5fX3dlYmdsVGV4dHVyZSksYnQoMzU1MyxhdCxudCksX3QoSXQuX193ZWJnbEZyYW1lYnVmZmVyLHR0LGF0LDM2MDY0K1d0LDM1NTMpLEMoYXQsbnQpJiZQKDM1NTMpfXIudW5iaW5kVGV4dHVyZSgpfWVsc2V7bGV0IEN0PTM1NTM7YmUmJihzP0N0PSQuaXNEYXRhVGV4dHVyZTNEPzMyODc5OjM1ODY2OmNvbnNvbGUud2FybigiVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5IG9ubHkgc3VwcG9ydGVkIHdpdGggV2ViR0wyLiIpKSxyLmJpbmRUZXh0dXJlKEN0LCR0Ll9fd2ViZ2xUZXh0dXJlKSxidChDdCwkLG50KSxfdChJdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsJCwzNjA2NCxDdCksQygkLG50KSYmUChDdCksci51bmJpbmRUZXh0dXJlKCl9dHQuZGVwdGhCdWZmZXImJmV0KHR0KX1mdW5jdGlvbiBwdCh0dCl7bGV0ICQ9Yih0dCl8fHMsSXQ9dHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwP3R0LnRleHR1cmU6W3R0LnRleHR1cmVdO2ZvcihsZXQgJHQ9MCxoZT1JdC5sZW5ndGg7JHQ8aGU7JHQrKyl7bGV0IFR0PUl0WyR0XTtpZihDKFR0LCQpKXtsZXQgYmU9dHQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/MzQwNjc6MzU1MyxudD1uLmdldChUdCkuX193ZWJnbFRleHR1cmU7ci5iaW5kVGV4dHVyZShiZSxudCksUChiZSksci51bmJpbmRUZXh0dXJlKCl9fX1mdW5jdGlvbiBodCh0dCl7aWYodHQudXNlUmVuZGVyYnVmZmVyKWlmKHMpe2xldCAkPXR0LndpZHRoLEl0PXR0LmhlaWdodCwkdD0xNjM4NCxoZT1bMzYwNjRdLFR0PXR0LnN0ZW5jaWxCdWZmZXI/MzMzMDY6MzYwOTY7dHQuZGVwdGhCdWZmZXImJmhlLnB1c2goVHQpLHR0Lmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5fHwodHQuZGVwdGhCdWZmZXImJigkdHw9MjU2KSx0dC5zdGVuY2lsQnVmZmVyJiYoJHR8PTEwMjQpKTtsZXQgYmU9bi5nZXQodHQpO3IuYmluZEZyYW1lYnVmZmVyKDM2MDA4LGJlLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksci5iaW5kRnJhbWVidWZmZXIoMzYwMDksYmUuX193ZWJnbEZyYW1lYnVmZmVyKSx0dC5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weSYmKGUuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LFtUdF0pLGUuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA5LFtUdF0pKSxlLmJsaXRGcmFtZWJ1ZmZlcigwLDAsJCxJdCwwLDAsJCxJdCwkdCw5NzI4KSxlLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOCxoZSksci5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCksci5iaW5kRnJhbWVidWZmZXIoMzYwMDksYmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpfWZ1bmN0aW9uIHd0KHR0KXtyZXR1cm4gcyYmKHR0LnVzZVJlbmRlcmJ1ZmZlcnx8dHQudXNlUmVuZGVyVG9UZXh0dXJlKT9NYXRoLm1pbihoLHR0LnNhbXBsZXMpOjB9ZnVuY3Rpb24ga3QodHQpe2xldCAkPWEucmVuZGVyLmZyYW1lO2QuZ2V0KHR0KSE9PSQmJihkLnNldCh0dCwkKSx0dC51cGRhdGUoKSl9ZnVuY3Rpb24gaWUodHQsJCl7bGV0IEl0PXR0LmVuY29kaW5nLCR0PXR0LmZvcm1hdCxoZT10dC50eXBlO3JldHVybiB0dC5pc0NvbXByZXNzZWRUZXh0dXJlPT09ITB8fHR0LmlzVmlkZW9UZXh0dXJlPT09ITB8fHR0LmZvcm1hdD09PWFVfHxJdCE9PVFkJiYoSXQ9PT1Zbj9zPT09ITE/dC5oYXMoIkVYVF9zUkdCIik9PT0hMCYmJHQ9PT1Rbz8odHQuZm9ybWF0PWFVLHR0Lm1pbkZpbHRlcj1vaSx0dC5nZW5lcmF0ZU1pcG1hcHM9ITEpOiQ9S2Yuc1JHQlRvTGluZWFyKCQpOigkdCE9PVFvfHxoZSE9PVpkKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBzUkdCIGVuY29kZWQgdGV4dHVyZXMgaGF2ZSB0byB1c2UgUkdCQUZvcm1hdCBhbmQgVW5zaWduZWRCeXRlVHlwZS4iKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBVbnN1cHBvcnRlZCB0ZXh0dXJlIGVuY29kaW5nOiIsSXQpKSwkfWxldCBlZT0hMSxMZT0hMTtmdW5jdGlvbiBhcih0dCwkKXt0dCYmdHQuaXNXZWJHTFJlbmRlclRhcmdldCYmKGVlPT09ITEmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxlZT0hMCksdHQ9dHQudGV4dHVyZSksVyh0dCwkKX1mdW5jdGlvbiBmcih0dCwkKXt0dCYmdHQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJihMZT09PSExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlQ3ViZTogZG9uJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLExlPSEwKSx0dD10dC50ZXh0dXJlKSxvdCh0dCwkKX10aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9VSx0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPXosdGhpcy5zZXRUZXh0dXJlMkQ9Vyx0aGlzLnNldFRleHR1cmUyREFycmF5PVosdGhpcy5zZXRUZXh0dXJlM0Q9cnQsdGhpcy5zZXRUZXh0dXJlQ3ViZT1vdCx0aGlzLnJlYmluZFRleHR1cmVzPWR0LHRoaXMuc2V0dXBSZW5kZXJUYXJnZXQ9cSx0aGlzLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcD1wdCx0aGlzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PWh0LHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcj1ldCx0aGlzLnNldHVwRnJhbWVCdWZmZXJUZXh0dXJlPV90LHRoaXMuc2FmZVNldFRleHR1cmUyRD1hcix0aGlzLnNhZmVTZXRUZXh0dXJlQ3ViZT1mcn1mdW5jdGlvbiBYZmUoZSx0LHIpe2xldCBuPXIuaXNXZWJHTDI7ZnVuY3Rpb24gaShvLGE9bnVsbCl7bGV0IHM7aWYobz09PVpkKXJldHVybiA1MTIxO2lmKG89PT1wZmUpcmV0dXJuIDMyODE5O2lmKG89PT1kZmUpcmV0dXJuIDMyODIwO2lmKG89PT11ZmUpcmV0dXJuIDUxMjA7aWYobz09PWhmZSlyZXR1cm4gNTEyMjtpZihvPT09RzMpcmV0dXJuIDUxMjM7aWYobz09PWZmZSlyZXR1cm4gNTEyNDtpZihvPT09SFApcmV0dXJuIDUxMjU7aWYobz09PWpkKXJldHVybiA1MTI2O2lmKG89PT1DdilyZXR1cm4gbj81MTMxOihzPXQuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikscyE9PW51bGw/cy5IQUxGX0ZMT0FUX09FUzpudWxsKTtpZihvPT09bWZlKXJldHVybiA2NDA2O2lmKG89PT1RbylyZXR1cm4gNjQwODtpZihvPT09Z2ZlKXJldHVybiA2NDA5O2lmKG89PT1fZmUpcmV0dXJuIDY0MTA7aWYobz09PXowKXJldHVybiA2NDAyO2lmKG89PT1rdilyZXR1cm4gMzQwNDE7aWYobz09PXlmZSlyZXR1cm4gNjQwMztpZihvPT09YVUpcmV0dXJuIHM9dC5nZXQoIkVYVF9zUkdCIikscyE9PW51bGw/cy5TUkdCX0FMUEhBX0VYVDpudWxsO2lmKG89PT12ZmUpcmV0dXJuIDM2MjQ0O2lmKG89PT14ZmUpcmV0dXJuIDMzMzE5O2lmKG89PT1iZmUpcmV0dXJuIDMzMzIwO2lmKG89PT13ZmUpcmV0dXJuIDM2MjQ5O2lmKG89PT1aVnx8bz09PUpWfHxvPT09UVZ8fG89PT10VSlpZihhPT09WW4paWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGNfc3JnYiIpLHMhPT1udWxsKXtpZihvPT09WlYpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9FWFQ7aWYobz09PUpWKXJldHVybiBzLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDFfRVhUO2lmKG89PT1RVilyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX0VYVDtpZihvPT09dFUpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtlbHNlIGlmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIikscyE9PW51bGwpe2lmKG89PT1aVilyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO2lmKG89PT1KVilyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtpZihvPT09UVYpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7aWYobz09PXRVKXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUfWVsc2UgcmV0dXJuIG51bGw7aWYobz09PUl1dHx8bz09PUx1dHx8bz09PWt1dHx8bz09PVJ1dClpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxzIT09bnVsbCl7aWYobz09PUl1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO2lmKG89PT1MdXQpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRztpZihvPT09a3V0KXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HO2lmKG89PT1SdXQpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUd9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09U2ZlKXJldHVybiBzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIpLHMhPT1udWxsP3MuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDpudWxsO2lmKG89PT1OdXR8fG89PT1EdXQpaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpLHMhPT1udWxsKXtpZihvPT09TnV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0VUQzI6cy5DT01QUkVTU0VEX1JHQjhfRVRDMjtpZihvPT09RHV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzpzLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09T3V0fHxvPT09enV0fHxvPT09RnV0fHxvPT09QnV0fHxvPT09SHV0fHxvPT09VnV0fHxvPT09VXV0fHxvPT09cXV0fHxvPT09R3V0fHxvPT09V3V0fHxvPT09WXV0fHxvPT09anV0fHxvPT09WHV0fHxvPT09JHV0KWlmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjIikscyE9PW51bGwpe2lmKG89PT1PdXQpcmV0dXJuIGE9PT1Zbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7aWYobz09PXp1dClyZXR1cm4gYT09PVluP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUjtpZihvPT09RnV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSO2lmKG89PT1CdXQpcmV0dXJuIGE9PT1Zbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI7aWYobz09PUh1dClyZXR1cm4gYT09PVluP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjtpZihvPT09VnV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDVfS0hSO2lmKG89PT1VdXQpcmV0dXJuIGE9PT1Zbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI7aWYobz09PXF1dClyZXR1cm4gYT09PVluP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjtpZihvPT09R3V0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFI7aWYobz09PVd1dClyZXR1cm4gYT09PVluP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSO2lmKG89PT1ZdXQpcmV0dXJuIGE9PT1Zbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjtpZihvPT09anV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tIUjtpZihvPT09WHV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjtpZihvPT09JHV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUn1lbHNlIHJldHVybiBudWxsO2lmKG89PT1LdXQpaWYocz10LmdldCgiRVhUX3RleHR1cmVfY29tcHJlc3Npb25fYnB0YyIpLHMhPT1udWxsKXtpZihvPT09S3V0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfQlBUQ19VTk9STV9FWFQ6cy5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09QXYpcmV0dXJuIG4/MzQwNDI6KHM9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxzIT09bnVsbD9zLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpfXJldHVybntjb252ZXJ0Oml9fXZhciByNj1jbGFzcyBleHRlbmRzIFVpe2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtyNi5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgWGQ9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtYZC5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgQ2dyPXt0eXBlOiJtb3ZlIn0sVVA9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl90YXJnZXRSYXk9bnVsbCx0aGlzLl9ncmlwPW51bGwsdGhpcy5faGFuZD1udWxsfWdldEhhbmRTcGFjZSgpe3JldHVybiB0aGlzLl9oYW5kPT09bnVsbCYmKHRoaXMuX2hhbmQ9bmV3IFhkLHRoaXMuX2hhbmQubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9oYW5kLnZpc2libGU9ITEsdGhpcy5faGFuZC5qb2ludHM9e30sdGhpcy5faGFuZC5pbnB1dFN0YXRlPXtwaW5jaGluZzohMX0pLHRoaXMuX2hhbmR9Z2V0VGFyZ2V0UmF5U3BhY2UoKXtyZXR1cm4gdGhpcy5fdGFyZ2V0UmF5PT09bnVsbCYmKHRoaXMuX3RhcmdldFJheT1uZXcgWGQsdGhpcy5fdGFyZ2V0UmF5Lm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEsdGhpcy5fdGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5saW5lYXJWZWxvY2l0eT1uZXcgaix0aGlzLl90YXJnZXRSYXkuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5hbmd1bGFyVmVsb2NpdHk9bmV3IGopLHRoaXMuX3RhcmdldFJheX1nZXRHcmlwU3BhY2UoKXtyZXR1cm4gdGhpcy5fZ3JpcD09PW51bGwmJih0aGlzLl9ncmlwPW5ldyBYZCx0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fZ3JpcC52aXNpYmxlPSExLHRoaXMuX2dyaXAuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5saW5lYXJWZWxvY2l0eT1uZXcgaix0aGlzLl9ncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmFuZ3VsYXJWZWxvY2l0eT1uZXcgaiksdGhpcy5fZ3JpcH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiB0aGlzLl90YXJnZXRSYXkhPT1udWxsJiZ0aGlzLl90YXJnZXRSYXkuZGlzcGF0Y2hFdmVudCh0KSx0aGlzLl9ncmlwIT09bnVsbCYmdGhpcy5fZ3JpcC5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2hhbmQhPT1udWxsJiZ0aGlzLl9oYW5kLmRpc3BhdGNoRXZlbnQodCksdGhpc31kaXNjb25uZWN0KHQpe3JldHVybiB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTp0fSksdGhpcy5fdGFyZ2V0UmF5IT09bnVsbCYmKHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExKSx0aGlzLl9ncmlwIT09bnVsbCYmKHRoaXMuX2dyaXAudmlzaWJsZT0hMSksdGhpcy5faGFuZCE9PW51bGwmJih0aGlzLl9oYW5kLnZpc2libGU9ITEpLHRoaXN9dXBkYXRlKHQscixuKXtsZXQgaT1udWxsLG89bnVsbCxhPW51bGwscz10aGlzLl90YXJnZXRSYXksbD10aGlzLl9ncmlwLGM9dGhpcy5faGFuZDtpZih0JiZyLnNlc3Npb24udmlzaWJpbGl0eVN0YXRlIT09InZpc2libGUtYmx1cnJlZCIpaWYocyE9PW51bGwmJihpPXIuZ2V0UG9zZSh0LnRhcmdldFJheVNwYWNlLG4pLGkhPT1udWxsJiYocy5tYXRyaXguZnJvbUFycmF5KGkudHJhbnNmb3JtLm1hdHJpeCkscy5tYXRyaXguZGVjb21wb3NlKHMucG9zaXRpb24scy5yb3RhdGlvbixzLnNjYWxlKSxpLmxpbmVhclZlbG9jaXR5PyhzLmhhc0xpbmVhclZlbG9jaXR5PSEwLHMubGluZWFyVmVsb2NpdHkuY29weShpLmxpbmVhclZlbG9jaXR5KSk6cy5oYXNMaW5lYXJWZWxvY2l0eT0hMSxpLmFuZ3VsYXJWZWxvY2l0eT8ocy5oYXNBbmd1bGFyVmVsb2NpdHk9ITAscy5hbmd1bGFyVmVsb2NpdHkuY29weShpLmFuZ3VsYXJWZWxvY2l0eSkpOnMuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuZGlzcGF0Y2hFdmVudChDZ3IpKSksYyYmdC5oYW5kKXthPSEwO2ZvcihsZXQgZyBvZiB0LmhhbmQudmFsdWVzKCkpe2xldCBfPXIuZ2V0Sm9pbnRQb3NlKGcsbik7aWYoYy5qb2ludHNbZy5qb2ludE5hbWVdPT09dm9pZCAwKXtsZXQgeD1uZXcgWGQ7eC5tYXRyaXhBdXRvVXBkYXRlPSExLHgudmlzaWJsZT0hMSxjLmpvaW50c1tnLmpvaW50TmFtZV09eCxjLmFkZCh4KX1sZXQgeT1jLmpvaW50c1tnLmpvaW50TmFtZV07XyE9PW51bGwmJih5Lm1hdHJpeC5mcm9tQXJyYXkoXy50cmFuc2Zvcm0ubWF0cml4KSx5Lm1hdHJpeC5kZWNvbXBvc2UoeS5wb3NpdGlvbix5LnJvdGF0aW9uLHkuc2NhbGUpLHkuam9pbnRSYWRpdXM9Xy5yYWRpdXMpLHkudmlzaWJsZT1fIT09bnVsbH1sZXQgdT1jLmpvaW50c1siaW5kZXgtZmluZ2VyLXRpcCJdLGg9Yy5qb2ludHNbInRodW1iLXRpcCJdLGY9dS5wb3NpdGlvbi5kaXN0YW5jZVRvKGgucG9zaXRpb24pLHA9LjAyLGQ9LjAwNTtjLmlucHV0U3RhdGUucGluY2hpbmcmJmY+cCtkPyhjLmlucHV0U3RhdGUucGluY2hpbmc9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaGVuZCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSk6IWMuaW5wdXRTdGF0ZS5waW5jaGluZyYmZjw9cC1kJiYoYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSEwLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hzdGFydCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSl9ZWxzZSBsIT09bnVsbCYmdC5ncmlwU3BhY2UmJihvPXIuZ2V0UG9zZSh0LmdyaXBTcGFjZSxuKSxvIT09bnVsbCYmKGwubWF0cml4LmZyb21BcnJheShvLnRyYW5zZm9ybS5tYXRyaXgpLGwubWF0cml4LmRlY29tcG9zZShsLnBvc2l0aW9uLGwucm90YXRpb24sbC5zY2FsZSksby5saW5lYXJWZWxvY2l0eT8obC5oYXNMaW5lYXJWZWxvY2l0eT0hMCxsLmxpbmVhclZlbG9jaXR5LmNvcHkoby5saW5lYXJWZWxvY2l0eSkpOmwuaGFzTGluZWFyVmVsb2NpdHk9ITEsby5hbmd1bGFyVmVsb2NpdHk/KGwuaGFzQW5ndWxhclZlbG9jaXR5PSEwLGwuYW5ndWxhclZlbG9jaXR5LmNvcHkoby5hbmd1bGFyVmVsb2NpdHkpKTpsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSkpO3JldHVybiBzIT09bnVsbCYmKHMudmlzaWJsZT1pIT09bnVsbCksbCE9PW51bGwmJihsLnZpc2libGU9byE9PW51bGwpLGMhPT1udWxsJiYoYy52aXNpYmxlPWEhPT1udWxsKSx0aGlzfX0sbk09Y2xhc3MgZXh0ZW5kcyB4aXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSxzLGwsYyx1KXtpZih1PXUhPT12b2lkIDA/dTp6MCx1IT09ejAmJnUhPT1rdil0aHJvdyBuZXcgRXJyb3IoIkRlcHRoVGV4dHVyZSBmb3JtYXQgbXVzdCBiZSBlaXRoZXIgVEhSRUUuRGVwdGhGb3JtYXQgb3IgVEhSRUUuRGVwdGhTdGVuY2lsRm9ybWF0Iik7bj09PXZvaWQgMCYmdT09PXowJiYobj1HMyksbj09PXZvaWQgMCYmdT09PWt2JiYobj1Bdiksc3VwZXIobnVsbCxpLG8sYSxzLGwsdSxuLGMpLHRoaXMuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OnJ9LHRoaXMubWFnRmlsdGVyPXMhPT12b2lkIDA/czpMaSx0aGlzLm1pbkZpbHRlcj1sIT09dm9pZCAwP2w6TGksdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX19O25NLnByb3RvdHlwZS5pc0RlcHRoVGV4dHVyZT0hMDt2YXIgcmh0PWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IodCxyKXtzdXBlcigpO2xldCBuPXRoaXMsaT1udWxsLG89MSxhPW51bGwscz0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLHU9bnVsbCxoPW51bGwsZj1udWxsLHA9ITEsZD1udWxsLGc9ci5nZXRDb250ZXh0QXR0cmlidXRlcygpLF89bnVsbCx5PW51bGwseD1bXSxiPW5ldyBNYXAsUz1uZXcgVWk7Uy5sYXllcnMuZW5hYmxlKDEpLFMudmlld3BvcnQ9bmV3IGVuO2xldCBDPW5ldyBVaTtDLmxheWVycy5lbmFibGUoMiksQy52aWV3cG9ydD1uZXcgZW47bGV0IFA9W1MsQ10saz1uZXcgcjY7ay5sYXllcnMuZW5hYmxlKDEpLGsubGF5ZXJzLmVuYWJsZSgyKTtsZXQgTz1udWxsLEQ9bnVsbDt0aGlzLmNhbWVyYUF1dG9VcGRhdGU9ITAsdGhpcy5lbmFibGVkPSExLHRoaXMuaXNQcmVzZW50aW5nPSExLHRoaXMuZ2V0Q29udHJvbGxlcj1mdW5jdGlvbihvdCl7bGV0IHN0PXhbb3RdO3JldHVybiBzdD09PXZvaWQgMCYmKHN0PW5ldyBVUCx4W290XT1zdCksc3QuZ2V0VGFyZ2V0UmF5U3BhY2UoKX0sdGhpcy5nZXRDb250cm9sbGVyR3JpcD1mdW5jdGlvbihvdCl7bGV0IHN0PXhbb3RdO3JldHVybiBzdD09PXZvaWQgMCYmKHN0PW5ldyBVUCx4W290XT1zdCksc3QuZ2V0R3JpcFNwYWNlKCl9LHRoaXMuZ2V0SGFuZD1mdW5jdGlvbihvdCl7bGV0IHN0PXhbb3RdO3JldHVybiBzdD09PXZvaWQgMCYmKHN0PW5ldyBVUCx4W290XT1zdCksc3QuZ2V0SGFuZFNwYWNlKCl9O2Z1bmN0aW9uIEIob3Qpe2xldCBzdD1iLmdldChvdC5pbnB1dFNvdXJjZSk7c3QmJnN0LmRpc3BhdGNoRXZlbnQoe3R5cGU6b3QudHlwZSxkYXRhOm90LmlucHV0U291cmNlfSl9ZnVuY3Rpb24gSSgpe2IuZm9yRWFjaChmdW5jdGlvbihvdCxzdCl7b3QuZGlzY29ubmVjdChzdCl9KSxiLmNsZWFyKCksTz1udWxsLEQ9bnVsbCx0LnNldFJlbmRlclRhcmdldChfKSxmPW51bGwsaD1udWxsLHU9bnVsbCxpPW51bGwseT1udWxsLHJ0LnN0b3AoKSxuLmlzUHJlc2VudGluZz0hMSxuLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25lbmQifSl9dGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKG90KXtvPW90LG4uaXNQcmVzZW50aW5nPT09ITAmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKG90KXtzPW90LG4uaXNQcmVzZW50aW5nPT09ITAmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIHJlZmVyZW5jZSBzcGFjZSB0eXBlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuZ2V0UmVmZXJlbmNlU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sdGhpcy5nZXRCYXNlTGF5ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gaCE9PW51bGw/aDpmfSx0aGlzLmdldEJpbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdX0sdGhpcy5nZXRGcmFtZT1mdW5jdGlvbigpe3JldHVybiBkfSx0aGlzLmdldFNlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gaX0sdGhpcy5zZXRTZXNzaW9uPWZ1bmN0aW9uKG90KXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2lmKGk9b3QsaSE9PW51bGwpe2lmKF89dC5nZXRSZW5kZXJUYXJnZXQoKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLEIpLGkuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZSIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplc3RhcnQiLEIpLGkuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJlbmQiLEkpLGkuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIixMKSxnLnhyQ29tcGF0aWJsZSE9PSEwJiYoeWllbGQgci5tYWtlWFJDb21wYXRpYmxlKCkpLGkucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwfHx0LmNhcGFiaWxpdGllcy5pc1dlYkdMMj09PSExKXtsZXQgc3Q9e2FudGlhbGlhczppLnJlbmRlclN0YXRlLmxheWVycz09PXZvaWQgMD9nLmFudGlhbGlhczohMCxhbHBoYTpnLmFscGhhLGRlcHRoOmcuZGVwdGgsc3RlbmNpbDpnLnN0ZW5jaWwsZnJhbWVidWZmZXJTY2FsZUZhY3RvcjpvfTtmPW5ldyBYUldlYkdMTGF5ZXIoaSxyLHN0KSxpLnVwZGF0ZVJlbmRlclN0YXRlKHtiYXNlTGF5ZXI6Zn0pLHk9bmV3IHVzKGYuZnJhbWVidWZmZXJXaWR0aCxmLmZyYW1lYnVmZmVySGVpZ2h0LHtmb3JtYXQ6UW8sdHlwZTpaZCxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9ZWxzZXtwPWcuYW50aWFsaWFzO2xldCBzdD1udWxsLFN0PW51bGwsYnQ9bnVsbDtnLmRlcHRoJiYoYnQ9Zy5zdGVuY2lsPzM1MDU2OjMzMTkwLHN0PWcuc3RlbmNpbD9rdjp6MCxTdD1nLnN0ZW5jaWw/QXY6RzMpO2xldCBNdD17Y29sb3JGb3JtYXQ6dC5vdXRwdXRFbmNvZGluZz09PVluPzM1OTA3OjMyODU2LGRlcHRoRm9ybWF0OmJ0LHNjYWxlRmFjdG9yOm99O3U9bmV3IFhSV2ViR0xCaW5kaW5nKGksciksaD11LmNyZWF0ZVByb2plY3Rpb25MYXllcihNdCksaS51cGRhdGVSZW5kZXJTdGF0ZSh7bGF5ZXJzOltoXX0pLHA/eT1uZXcgajMoaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6UW8sdHlwZTpaZCxkZXB0aFRleHR1cmU6bmV3IG5NKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCxTdCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxzdCksc3RlbmNpbEJ1ZmZlcjpnLnN0ZW5jaWwsaWdub3JlRGVwdGg6aC5pZ25vcmVEZXB0aFZhbHVlcyx1c2VSZW5kZXJUb1RleHR1cmU6bCxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSk6eT1uZXcgdXMoaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6UW8sdHlwZTpaZCxkZXB0aFRleHR1cmU6bmV3IG5NKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCxTdCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxzdCksc3RlbmNpbEJ1ZmZlcjpnLnN0ZW5jaWwsaWdub3JlRGVwdGg6aC5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9eS5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLGE9eWllbGQgaS5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UocykscnQuc2V0Q29udGV4dChpKSxydC5zdGFydCgpLG4uaXNQcmVzZW50aW5nPSEwLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX0pfTtmdW5jdGlvbiBMKG90KXtsZXQgc3Q9aS5pbnB1dFNvdXJjZXM7Zm9yKGxldCBTdD0wO1N0PHgubGVuZ3RoO1N0KyspYi5zZXQoc3RbU3RdLHhbU3RdKTtmb3IobGV0IFN0PTA7U3Q8b3QucmVtb3ZlZC5sZW5ndGg7U3QrKyl7bGV0IGJ0PW90LnJlbW92ZWRbU3RdLE10PWIuZ2V0KGJ0KTtNdCYmKE10LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpidH0pLGIuZGVsZXRlKGJ0KSl9Zm9yKGxldCBTdD0wO1N0PG90LmFkZGVkLmxlbmd0aDtTdCsrKXtsZXQgYnQ9b3QuYWRkZWRbU3RdLE10PWIuZ2V0KGJ0KTtNdCYmTXQuZGlzcGF0Y2hFdmVudCh7dHlwZToiY29ubmVjdGVkIixkYXRhOmJ0fSl9fWxldCBSPW5ldyBqLEY9bmV3IGo7ZnVuY3Rpb24geihvdCxzdCxTdCl7Ui5zZXRGcm9tTWF0cml4UG9zaXRpb24oc3QubWF0cml4V29ybGQpLEYuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFN0Lm1hdHJpeFdvcmxkKTtsZXQgYnQ9Ui5kaXN0YW5jZVRvKEYpLE10PXN0LnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsbHQ9U3QucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxLdD1NdFsxNF0vKE10WzEwXS0xKSxfdD1NdFsxNF0vKE10WzEwXSsxKSxjdD0oTXRbOV0rMSkvTXRbNV0sWD0oTXRbOV0tMSkvTXRbNV0sZXQ9KE10WzhdLTEpL010WzBdLGR0PShsdFs4XSsxKS9sdFswXSxxPUt0KmV0LHB0PUt0KmR0LGh0PWJ0LygtZXQrZHQpLHd0PWh0Ki1ldDtzdC5tYXRyaXhXb3JsZC5kZWNvbXBvc2Uob3QucG9zaXRpb24sb3QucXVhdGVybmlvbixvdC5zY2FsZSksb3QudHJhbnNsYXRlWCh3dCksb3QudHJhbnNsYXRlWihodCksb3QubWF0cml4V29ybGQuY29tcG9zZShvdC5wb3NpdGlvbixvdC5xdWF0ZXJuaW9uLG90LnNjYWxlKSxvdC5tYXRyaXhXb3JsZEludmVyc2UuY29weShvdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7bGV0IGt0PUt0K2h0LGllPV90K2h0LGVlPXEtd3QsTGU9cHQrKGJ0LXd0KSxhcj1jdCpfdC9pZSprdCxmcj1YKl90L2llKmt0O290LnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKGVlLExlLGFyLGZyLGt0LGllKX1mdW5jdGlvbiBVKG90LHN0KXtzdD09PW51bGw/b3QubWF0cml4V29ybGQuY29weShvdC5tYXRyaXgpOm90Lm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXMoc3QubWF0cml4V29ybGQsb3QubWF0cml4KSxvdC5tYXRyaXhXb3JsZEludmVyc2UuY29weShvdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dGhpcy51cGRhdGVDYW1lcmE9ZnVuY3Rpb24ob3Qpe2lmKGk9PT1udWxsKXJldHVybjtrLm5lYXI9Qy5uZWFyPVMubmVhcj1vdC5uZWFyLGsuZmFyPUMuZmFyPVMuZmFyPW90LmZhciwoTyE9PWsubmVhcnx8RCE9PWsuZmFyKSYmKGkudXBkYXRlUmVuZGVyU3RhdGUoe2RlcHRoTmVhcjprLm5lYXIsZGVwdGhGYXI6ay5mYXJ9KSxPPWsubmVhcixEPWsuZmFyKTtsZXQgc3Q9b3QucGFyZW50LFN0PWsuY2FtZXJhcztVKGssc3QpO2ZvcihsZXQgTXQ9MDtNdDxTdC5sZW5ndGg7TXQrKylVKFN0W010XSxzdCk7ay5tYXRyaXhXb3JsZC5kZWNvbXBvc2Uoay5wb3NpdGlvbixrLnF1YXRlcm5pb24say5zY2FsZSksb3QucG9zaXRpb24uY29weShrLnBvc2l0aW9uKSxvdC5xdWF0ZXJuaW9uLmNvcHkoay5xdWF0ZXJuaW9uKSxvdC5zY2FsZS5jb3B5KGsuc2NhbGUpLG90Lm1hdHJpeC5jb3B5KGsubWF0cml4KSxvdC5tYXRyaXhXb3JsZC5jb3B5KGsubWF0cml4V29ybGQpO2xldCBidD1vdC5jaGlsZHJlbjtmb3IobGV0IE10PTAsbHQ9YnQubGVuZ3RoO010PGx0O010KyspYnRbTXRdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtTdC5sZW5ndGg9PT0yP3ooayxTLEMpOmsucHJvamVjdGlvbk1hdHJpeC5jb3B5KFMucHJvamVjdGlvbk1hdHJpeCl9LHRoaXMuZ2V0Q2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIGt9LHRoaXMuZ2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKCl7aWYoaCE9PW51bGwpcmV0dXJuIGguZml4ZWRGb3ZlYXRpb247aWYoZiE9PW51bGwpcmV0dXJuIGYuZml4ZWRGb3ZlYXRpb259LHRoaXMuc2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKG90KXtoIT09bnVsbCYmKGguZml4ZWRGb3ZlYXRpb249b3QpLGYhPT1udWxsJiZmLmZpeGVkRm92ZWF0aW9uIT09dm9pZCAwJiYoZi5maXhlZEZvdmVhdGlvbj1vdCl9O2xldCBXPW51bGw7ZnVuY3Rpb24gWihvdCxzdCl7aWYoYz1zdC5nZXRWaWV3ZXJQb3NlKGEpLGQ9c3QsYyE9PW51bGwpe2xldCBidD1jLnZpZXdzO2YhPT1udWxsJiYodC5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlcih5LGYuZnJhbWVidWZmZXIpLHQuc2V0UmVuZGVyVGFyZ2V0KHkpKTtsZXQgTXQ9ITE7YnQubGVuZ3RoIT09ay5jYW1lcmFzLmxlbmd0aCYmKGsuY2FtZXJhcy5sZW5ndGg9MCxNdD0hMCk7Zm9yKGxldCBsdD0wO2x0PGJ0Lmxlbmd0aDtsdCsrKXtsZXQgS3Q9YnRbbHRdLF90PW51bGw7aWYoZiE9PW51bGwpX3Q9Zi5nZXRWaWV3cG9ydChLdCk7ZWxzZXtsZXQgWD11LmdldFZpZXdTdWJJbWFnZShoLEt0KTtfdD1YLnZpZXdwb3J0LGx0PT09MCYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMoeSxYLmNvbG9yVGV4dHVyZSxoLmlnbm9yZURlcHRoVmFsdWVzP3ZvaWQgMDpYLmRlcHRoU3RlbmNpbFRleHR1cmUpLHQuc2V0UmVuZGVyVGFyZ2V0KHkpKX1sZXQgY3Q9UFtsdF07Y3QubWF0cml4LmZyb21BcnJheShLdC50cmFuc2Zvcm0ubWF0cml4KSxjdC5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShLdC5wcm9qZWN0aW9uTWF0cml4KSxjdC52aWV3cG9ydC5zZXQoX3QueCxfdC55LF90LndpZHRoLF90LmhlaWdodCksbHQ9PT0wJiZrLm1hdHJpeC5jb3B5KGN0Lm1hdHJpeCksTXQ9PT0hMCYmay5jYW1lcmFzLnB1c2goY3QpfX1sZXQgU3Q9aS5pbnB1dFNvdXJjZXM7Zm9yKGxldCBidD0wO2J0PHgubGVuZ3RoO2J0Kyspe2xldCBNdD14W2J0XSxsdD1TdFtidF07TXQudXBkYXRlKGx0LHN0LGEpfVcmJlcob3Qsc3QpLGQ9bnVsbH1sZXQgcnQ9bmV3IHpmZTtydC5zZXRBbmltYXRpb25Mb29wKFopLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihvdCl7Vz1vdH0sdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7fX19O2Z1bmN0aW9uIEFncihlKXtmdW5jdGlvbiB0KHkseCl7eS5mb2dDb2xvci52YWx1ZS5jb3B5KHguY29sb3IpLHguaXNGb2c/KHkuZm9nTmVhci52YWx1ZT14Lm5lYXIseS5mb2dGYXIudmFsdWU9eC5mYXIpOnguaXNGb2dFeHAyJiYoeS5mb2dEZW5zaXR5LnZhbHVlPXguZGVuc2l0eSl9ZnVuY3Rpb24gcih5LHgsYixTLEMpe3guaXNNZXNoQmFzaWNNYXRlcmlhbD9uKHkseCk6eC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KG4oeSx4KSxsKHkseCkpOnguaXNNZXNoVG9vbk1hdGVyaWFsPyhuKHkseCksdSh5LHgpKTp4LmlzTWVzaFBob25nTWF0ZXJpYWw/KG4oeSx4KSxjKHkseCkpOnguaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD8obih5LHgpLHguaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD9mKHkseCxDKTpoKHkseCkpOnguaXNNZXNoTWF0Y2FwTWF0ZXJpYWw/KG4oeSx4KSxwKHkseCkpOnguaXNNZXNoRGVwdGhNYXRlcmlhbD8obih5LHgpLGQoeSx4KSk6eC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhuKHkseCksZyh5LHgpKTp4LmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhuKHkseCksXyh5LHgpKTp4LmlzTGluZUJhc2ljTWF0ZXJpYWw/KGkoeSx4KSx4LmlzTGluZURhc2hlZE1hdGVyaWFsJiZvKHkseCkpOnguaXNQb2ludHNNYXRlcmlhbD9hKHkseCxiLFMpOnguaXNTcHJpdGVNYXRlcmlhbD9zKHkseCk6eC5pc1NoYWRvd01hdGVyaWFsPyh5LmNvbG9yLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSk6eC5pc1NoYWRlck1hdGVyaWFsJiYoeC51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfWZ1bmN0aW9uIG4oeSx4KXt5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5LHguY29sb3ImJnkuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHguZW1pc3NpdmUmJnkuZW1pc3NpdmUudmFsdWUuY29weSh4LmVtaXNzaXZlKS5tdWx0aXBseVNjYWxhcih4LmVtaXNzaXZlSW50ZW5zaXR5KSx4Lm1hcCYmKHkubWFwLnZhbHVlPXgubWFwKSx4LmFscGhhTWFwJiYoeS5hbHBoYU1hcC52YWx1ZT14LmFscGhhTWFwKSx4LnNwZWN1bGFyTWFwJiYoeS5zcGVjdWxhck1hcC52YWx1ZT14LnNwZWN1bGFyTWFwKSx4LmFscGhhVGVzdD4wJiYoeS5hbHBoYVRlc3QudmFsdWU9eC5hbHBoYVRlc3QpO2xldCBiPWUuZ2V0KHgpLmVudk1hcDtiJiYoeS5lbnZNYXAudmFsdWU9Yix5LmZsaXBFbnZNYXAudmFsdWU9Yi5pc0N1YmVUZXh0dXJlJiZiLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExPy0xOjEseS5yZWZsZWN0aXZpdHkudmFsdWU9eC5yZWZsZWN0aXZpdHkseS5pb3IudmFsdWU9eC5pb3IseS5yZWZyYWN0aW9uUmF0aW8udmFsdWU9eC5yZWZyYWN0aW9uUmF0aW8pLHgubGlnaHRNYXAmJih5LmxpZ2h0TWFwLnZhbHVlPXgubGlnaHRNYXAseS5saWdodE1hcEludGVuc2l0eS52YWx1ZT14LmxpZ2h0TWFwSW50ZW5zaXR5KSx4LmFvTWFwJiYoeS5hb01hcC52YWx1ZT14LmFvTWFwLHkuYW9NYXBJbnRlbnNpdHkudmFsdWU9eC5hb01hcEludGVuc2l0eSk7bGV0IFM7eC5tYXA/Uz14Lm1hcDp4LnNwZWN1bGFyTWFwP1M9eC5zcGVjdWxhck1hcDp4LmRpc3BsYWNlbWVudE1hcD9TPXguZGlzcGxhY2VtZW50TWFwOngubm9ybWFsTWFwP1M9eC5ub3JtYWxNYXA6eC5idW1wTWFwP1M9eC5idW1wTWFwOngucm91Z2huZXNzTWFwP1M9eC5yb3VnaG5lc3NNYXA6eC5tZXRhbG5lc3NNYXA/Uz14Lm1ldGFsbmVzc01hcDp4LmFscGhhTWFwP1M9eC5hbHBoYU1hcDp4LmVtaXNzaXZlTWFwP1M9eC5lbWlzc2l2ZU1hcDp4LmNsZWFyY29hdE1hcD9TPXguY2xlYXJjb2F0TWFwOnguY2xlYXJjb2F0Tm9ybWFsTWFwP1M9eC5jbGVhcmNvYXROb3JtYWxNYXA6eC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/Uz14LmNsZWFyY29hdFJvdWdobmVzc01hcDp4LnNwZWN1bGFySW50ZW5zaXR5TWFwP1M9eC5zcGVjdWxhckludGVuc2l0eU1hcDp4LnNwZWN1bGFyQ29sb3JNYXA/Uz14LnNwZWN1bGFyQ29sb3JNYXA6eC50cmFuc21pc3Npb25NYXA/Uz14LnRyYW5zbWlzc2lvbk1hcDp4LnRoaWNrbmVzc01hcD9TPXgudGhpY2tuZXNzTWFwOnguc2hlZW5Db2xvck1hcD9TPXguc2hlZW5Db2xvck1hcDp4LnNoZWVuUm91Z2huZXNzTWFwJiYoUz14LnNoZWVuUm91Z2huZXNzTWFwKSxTIT09dm9pZCAwJiYoUy5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoUz1TLnRleHR1cmUpLFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLHkudXZUcmFuc2Zvcm0udmFsdWUuY29weShTLm1hdHJpeCkpO2xldCBDO3guYW9NYXA/Qz14LmFvTWFwOngubGlnaHRNYXAmJihDPXgubGlnaHRNYXApLEMhPT12b2lkIDAmJihDLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihDPUMudGV4dHVyZSksQy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJkMudXBkYXRlTWF0cml4KCkseS51djJUcmFuc2Zvcm0udmFsdWUuY29weShDLm1hdHJpeCkpfWZ1bmN0aW9uIGkoeSx4KXt5LmRpZmZ1c2UudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5fWZ1bmN0aW9uIG8oeSx4KXt5LmRhc2hTaXplLnZhbHVlPXguZGFzaFNpemUseS50b3RhbFNpemUudmFsdWU9eC5kYXNoU2l6ZSt4LmdhcFNpemUseS5zY2FsZS52YWx1ZT14LnNjYWxlfWZ1bmN0aW9uIGEoeSx4LGIsUyl7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSx5LnNpemUudmFsdWU9eC5zaXplKmIseS5zY2FsZS52YWx1ZT1TKi41LHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IEM7eC5tYXA/Qz14Lm1hcDp4LmFscGhhTWFwJiYoQz14LmFscGhhTWFwKSxDIT09dm9pZCAwJiYoQy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJkMudXBkYXRlTWF0cml4KCkseS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KEMubWF0cml4KSl9ZnVuY3Rpb24gcyh5LHgpe3kuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHkub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHkseS5yb3RhdGlvbi52YWx1ZT14LnJvdGF0aW9uLHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IGI7eC5tYXA/Yj14Lm1hcDp4LmFscGhhTWFwJiYoYj14LmFscGhhTWFwKSxiIT09dm9pZCAwJiYoYi5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJmIudXBkYXRlTWF0cml4KCkseS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGIubWF0cml4KSl9ZnVuY3Rpb24gbCh5LHgpe3guZW1pc3NpdmVNYXAmJih5LmVtaXNzaXZlTWFwLnZhbHVlPXguZW1pc3NpdmVNYXApfWZ1bmN0aW9uIGMoeSx4KXt5LnNwZWN1bGFyLnZhbHVlLmNvcHkoeC5zcGVjdWxhcikseS5zaGluaW5lc3MudmFsdWU9TWF0aC5tYXgoeC5zaGluaW5lc3MsMWUtNCkseC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCkseC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1JaSYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PUlpJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiB1KHkseCl7eC5ncmFkaWVudE1hcCYmKHkuZ3JhZGllbnRNYXAudmFsdWU9eC5ncmFkaWVudE1hcCkseC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCkseC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1JaSYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PUlpJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBoKHkseCl7eS5yb3VnaG5lc3MudmFsdWU9eC5yb3VnaG5lc3MseS5tZXRhbG5lc3MudmFsdWU9eC5tZXRhbG5lc3MseC5yb3VnaG5lc3NNYXAmJih5LnJvdWdobmVzc01hcC52YWx1ZT14LnJvdWdobmVzc01hcCkseC5tZXRhbG5lc3NNYXAmJih5Lm1ldGFsbmVzc01hcC52YWx1ZT14Lm1ldGFsbmVzc01hcCkseC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCkseC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1JaSYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PUlpJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKSxlLmdldCh4KS5lbnZNYXAmJih5LmVudk1hcEludGVuc2l0eS52YWx1ZT14LmVudk1hcEludGVuc2l0eSl9ZnVuY3Rpb24gZih5LHgsYil7aCh5LHgpLHkuaW9yLnZhbHVlPXguaW9yLHguc2hlZW4+MCYmKHkuc2hlZW5Db2xvci52YWx1ZS5jb3B5KHguc2hlZW5Db2xvcikubXVsdGlwbHlTY2FsYXIoeC5zaGVlbikseS5zaGVlblJvdWdobmVzcy52YWx1ZT14LnNoZWVuUm91Z2huZXNzLHguc2hlZW5Db2xvck1hcCYmKHkuc2hlZW5Db2xvck1hcC52YWx1ZT14LnNoZWVuQ29sb3JNYXApLHguc2hlZW5Sb3VnaG5lc3NNYXAmJih5LnNoZWVuUm91Z2huZXNzTWFwLnZhbHVlPXguc2hlZW5Sb3VnaG5lc3NNYXApKSx4LmNsZWFyY29hdD4wJiYoeS5jbGVhcmNvYXQudmFsdWU9eC5jbGVhcmNvYXQseS5jbGVhcmNvYXRSb3VnaG5lc3MudmFsdWU9eC5jbGVhcmNvYXRSb3VnaG5lc3MseC5jbGVhcmNvYXRNYXAmJih5LmNsZWFyY29hdE1hcC52YWx1ZT14LmNsZWFyY29hdE1hcCkseC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJih5LmNsZWFyY29hdFJvdWdobmVzc01hcC52YWx1ZT14LmNsZWFyY29hdFJvdWdobmVzc01hcCkseC5jbGVhcmNvYXROb3JtYWxNYXAmJih5LmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5jbGVhcmNvYXROb3JtYWxTY2FsZSkseS5jbGVhcmNvYXROb3JtYWxNYXAudmFsdWU9eC5jbGVhcmNvYXROb3JtYWxNYXAseC5zaWRlPT09SWkmJnkuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpKSx4LnRyYW5zbWlzc2lvbj4wJiYoeS50cmFuc21pc3Npb24udmFsdWU9eC50cmFuc21pc3Npb24seS50cmFuc21pc3Npb25TYW1wbGVyTWFwLnZhbHVlPWIudGV4dHVyZSx5LnRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnZhbHVlLnNldChiLndpZHRoLGIuaGVpZ2h0KSx4LnRyYW5zbWlzc2lvbk1hcCYmKHkudHJhbnNtaXNzaW9uTWFwLnZhbHVlPXgudHJhbnNtaXNzaW9uTWFwKSx5LnRoaWNrbmVzcy52YWx1ZT14LnRoaWNrbmVzcyx4LnRoaWNrbmVzc01hcCYmKHkudGhpY2tuZXNzTWFwLnZhbHVlPXgudGhpY2tuZXNzTWFwKSx5LmF0dGVudWF0aW9uRGlzdGFuY2UudmFsdWU9eC5hdHRlbnVhdGlvbkRpc3RhbmNlLHkuYXR0ZW51YXRpb25Db2xvci52YWx1ZS5jb3B5KHguYXR0ZW51YXRpb25Db2xvcikpLHkuc3BlY3VsYXJJbnRlbnNpdHkudmFsdWU9eC5zcGVjdWxhckludGVuc2l0eSx5LnNwZWN1bGFyQ29sb3IudmFsdWUuY29weSh4LnNwZWN1bGFyQ29sb3IpLHguc3BlY3VsYXJJbnRlbnNpdHlNYXAmJih5LnNwZWN1bGFySW50ZW5zaXR5TWFwLnZhbHVlPXguc3BlY3VsYXJJbnRlbnNpdHlNYXApLHguc3BlY3VsYXJDb2xvck1hcCYmKHkuc3BlY3VsYXJDb2xvck1hcC52YWx1ZT14LnNwZWN1bGFyQ29sb3JNYXApfWZ1bmN0aW9uIHAoeSx4KXt4Lm1hdGNhcCYmKHkubWF0Y2FwLnZhbHVlPXgubWF0Y2FwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGQoeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBnKHkseCl7eC5kaXNwbGFjZW1lbnRNYXAmJih5LmRpc3BsYWNlbWVudE1hcC52YWx1ZT14LmRpc3BsYWNlbWVudE1hcCx5LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXguZGlzcGxhY2VtZW50U2NhbGUseS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXguZGlzcGxhY2VtZW50QmlhcykseS5yZWZlcmVuY2VQb3NpdGlvbi52YWx1ZS5jb3B5KHgucmVmZXJlbmNlUG9zaXRpb24pLHkubmVhckRpc3RhbmNlLnZhbHVlPXgubmVhckRpc3RhbmNlLHkuZmFyRGlzdGFuY2UudmFsdWU9eC5mYXJEaXN0YW5jZX1mdW5jdGlvbiBfKHkseCl7eC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1JaSYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PUlpJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX1yZXR1cm57cmVmcmVzaEZvZ1VuaWZvcm1zOnQscmVmcmVzaE1hdGVyaWFsVW5pZm9ybXM6cn19ZnVuY3Rpb24gUGdyKCl7bGV0IGU9UVAoImNhbnZhcyIpO3JldHVybiBlLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlfWZ1bmN0aW9uIHJuKGU9e30pe2xldCB0PWUuY2FudmFzIT09dm9pZCAwP2UuY2FudmFzOlBncigpLHI9ZS5jb250ZXh0IT09dm9pZCAwP2UuY29udGV4dDpudWxsLG49ZS5hbHBoYSE9PXZvaWQgMD9lLmFscGhhOiExLGk9ZS5kZXB0aCE9PXZvaWQgMD9lLmRlcHRoOiEwLG89ZS5zdGVuY2lsIT09dm9pZCAwP2Uuc3RlbmNpbDohMCxhPWUuYW50aWFsaWFzIT09dm9pZCAwP2UuYW50aWFsaWFzOiExLHM9ZS5wcmVtdWx0aXBsaWVkQWxwaGEhPT12b2lkIDA/ZS5wcmVtdWx0aXBsaWVkQWxwaGE6ITAsbD1lLnByZXNlcnZlRHJhd2luZ0J1ZmZlciE9PXZvaWQgMD9lLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSxjPWUucG93ZXJQcmVmZXJlbmNlIT09dm9pZCAwP2UucG93ZXJQcmVmZXJlbmNlOiJkZWZhdWx0Iix1PWUuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCE9PXZvaWQgMD9lLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6ITEsaD1udWxsLGY9bnVsbCxwPVtdLGQ9W107dGhpcy5kb21FbGVtZW50PXQsdGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9LHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuYXV0b0NsZWFyQ29sb3I9ITAsdGhpcy5hdXRvQ2xlYXJEZXB0aD0hMCx0aGlzLmF1dG9DbGVhclN0ZW5jaWw9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLmNsaXBwaW5nUGxhbmVzPVtdLHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ9ITEsdGhpcy5vdXRwdXRFbmNvZGluZz1RZCx0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPSExLHRoaXMudG9uZU1hcHBpbmc9S2QsdGhpcy50b25lTWFwcGluZ0V4cG9zdXJlPTE7bGV0IGc9dGhpcyxfPSExLHk9MCx4PTAsYj1udWxsLFM9LTEsQz1udWxsLFA9bmV3IGVuLGs9bmV3IGVuLE89bnVsbCxEPXQud2lkdGgsQj10LmhlaWdodCxJPTEsTD1udWxsLFI9bnVsbCxGPW5ldyBlbigwLDAsRCxCKSx6PW5ldyBlbigwLDAsRCxCKSxVPSExLFc9bmV3IE52LFo9ITEscnQ9ITEsb3Q9bnVsbCxzdD1uZXcgTWUsU3Q9bmV3IGosYnQ9e2JhY2tncm91bmQ6bnVsbCxmb2c6bnVsbCxlbnZpcm9ubWVudDpudWxsLG92ZXJyaWRlTWF0ZXJpYWw6bnVsbCxpc1NjZW5lOiEwfTtmdW5jdGlvbiBNdCgpe3JldHVybiBiPT09bnVsbD9JOjF9bGV0IGx0PXI7ZnVuY3Rpb24gS3QoSyxndCl7Zm9yKGxldCBFdD0wO0V0PEsubGVuZ3RoO0V0Kyspe2xldCB4dD1LW0V0XSxGdD10LmdldENvbnRleHQoeHQsZ3QpO2lmKEZ0IT09bnVsbClyZXR1cm4gRnR9cmV0dXJuIG51bGx9dHJ5e2xldCBLPXthbHBoYTohMCxkZXB0aDppLHN0ZW5jaWw6byxhbnRpYWxpYXM6YSxwcmVtdWx0aXBsaWVkQWxwaGE6cyxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6bCxwb3dlclByZWZlcmVuY2U6YyxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnV9O2lmKCJzZXRBdHRyaWJ1dGUiaW4gdCYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtZW5naW5lIixgdGhyZWUuanMgciR7WVV9YCksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmZSwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYXQsITEpLGx0PT09bnVsbCl7bGV0IGd0PVsid2ViZ2wyIiwid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiXTtpZihnLmlzV2ViR0wxUmVuZGVyZXI9PT0hMCYmZ3Quc2hpZnQoKSxsdD1LdChndCxLKSxsdD09PW51bGwpdGhyb3cgS3QoZ3QpP25ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dCB3aXRoIHlvdXIgc2VsZWN0ZWQgYXR0cmlidXRlcy4iKTpuZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQuIil9bHQuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PT09dm9pZCAwJiYobHQuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJue3JhbmdlTWluOjEscmFuZ2VNYXg6MSxwcmVjaXNpb246MX19KX1jYXRjaChLKXt0aHJvdyBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK0subWVzc2FnZSksS31sZXQgX3QsY3QsWCxldCxkdCxxLHB0LGh0LHd0LGt0LGllLGVlLExlLGFyLGZyLHR0LCQsSXQsJHQsaGUsVHQsYmUsbnQ7ZnVuY3Rpb24gQ3QoKXtfdD1uZXcgSmRyKGx0KSxjdD1uZXcgWWRyKGx0LF90LGUpLF90LmluaXQoY3QpLGJlPW5ldyBYZmUobHQsX3QsY3QpLFg9bmV3IEVncihsdCxfdCxjdCksZXQ9bmV3IGVtcihsdCksZHQ9bmV3IGRncixxPW5ldyBUZ3IobHQsX3QsWCxkdCxjdCxiZSxldCkscHQ9bmV3IFhkcihnKSxodD1uZXcgWmRyKGcpLHd0PW5ldyBnZnIobHQsY3QpLG50PW5ldyBHZHIobHQsX3Qsd3QsY3QpLGt0PW5ldyBRZHIobHQsd3QsZXQsbnQpLGllPW5ldyBvbXIobHQsa3Qsd3QsZXQpLCR0PW5ldyBpbXIobHQsY3QscSksdHQ9bmV3IGpkcihkdCksZWU9bmV3IHBncihnLHB0LGh0LF90LGN0LG50LHR0KSxMZT1uZXcgQWdyKGR0KSxhcj1uZXcgZ2dyLGZyPW5ldyB3Z3IoX3QsY3QpLEl0PW5ldyBxZHIoZyxwdCxYLGllLG4scyksJD1uZXcgamZlKGcsaWUsY3QpLGhlPW5ldyBXZHIobHQsX3QsZXQsY3QpLFR0PW5ldyB0bXIobHQsX3QsZXQsY3QpLGV0LnByb2dyYW1zPWVlLnByb2dyYW1zLGcuY2FwYWJpbGl0aWVzPWN0LGcuZXh0ZW5zaW9ucz1fdCxnLnByb3BlcnRpZXM9ZHQsZy5yZW5kZXJMaXN0cz1hcixnLnNoYWRvd01hcD0kLGcuc3RhdGU9WCxnLmluZm89ZXR9Q3QoKTtsZXQgV3Q9bmV3IHJodChnLGx0KTt0aGlzLnhyPVd0LHRoaXMuZ2V0Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBsdH0sdGhpcy5nZXRDb250ZXh0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBsdC5nZXRDb250ZXh0QXR0cmlidXRlcygpfSx0aGlzLmZvcmNlQ29udGV4dExvc3M9ZnVuY3Rpb24oKXtsZXQgSz1fdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO0smJksubG9zZUNvbnRleHQoKX0sdGhpcy5mb3JjZUNvbnRleHRSZXN0b3JlPWZ1bmN0aW9uKCl7bGV0IEs9X3QuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtLJiZLLnJlc3RvcmVDb250ZXh0KCl9LHRoaXMuZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3JldHVybiBJfSx0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24oSyl7SyE9PXZvaWQgMCYmKEk9Syx0aGlzLnNldFNpemUoRCxCLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihLKXtyZXR1cm4gSy5zZXQoRCxCKX0sdGhpcy5zZXRTaXplPWZ1bmN0aW9uKEssZ3QsRXQpe2lmKFd0LmlzUHJlc2VudGluZyl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDYW4ndCBjaGFuZ2Ugc2l6ZSB3aGlsZSBWUiBkZXZpY2UgaXMgcHJlc2VudGluZy4iKTtyZXR1cm59RD1LLEI9Z3QsdC53aWR0aD1NYXRoLmZsb29yKEsqSSksdC5oZWlnaHQ9TWF0aC5mbG9vcihndCpJKSxFdCE9PSExJiYodC5zdHlsZS53aWR0aD1LKyJweCIsdC5zdHlsZS5oZWlnaHQ9Z3QrInB4IiksdGhpcy5zZXRWaWV3cG9ydCgwLDAsSyxndCl9LHRoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuc2V0KEQqSSxCKkkpLmZsb29yKCl9LHRoaXMuc2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oSyxndCxFdCl7RD1LLEI9Z3QsST1FdCx0LndpZHRoPU1hdGguZmxvb3IoSypFdCksdC5oZWlnaHQ9TWF0aC5mbG9vcihndCpFdCksdGhpcy5zZXRWaWV3cG9ydCgwLDAsSyxndCl9LHRoaXMuZ2V0Q3VycmVudFZpZXdwb3J0PWZ1bmN0aW9uKEspe3JldHVybiBLLmNvcHkoUCl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weShGKX0sdGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbihLLGd0LEV0LHh0KXtLLmlzVmVjdG9yND9GLnNldChLLngsSy55LEsueixLLncpOkYuc2V0KEssZ3QsRXQseHQpLFgudmlld3BvcnQoUC5jb3B5KEYpLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weSh6KX0sdGhpcy5zZXRTY2lzc29yPWZ1bmN0aW9uKEssZ3QsRXQseHQpe0suaXNWZWN0b3I0P3ouc2V0KEsueCxLLnksSy56LEsudyk6ei5zZXQoSyxndCxFdCx4dCksWC5zY2lzc29yKGsuY29weSh6KS5tdWx0aXBseVNjYWxhcihJKS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yVGVzdD1mdW5jdGlvbigpe3JldHVybiBVfSx0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKEspe1guc2V0U2Npc3NvclRlc3QoVT1LKX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKEspe0w9S30sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24oSyl7Uj1LfSx0aGlzLmdldENsZWFyQ29sb3I9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weShJdC5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtJdC5zZXRDbGVhckNvbG9yLmFwcGx5KEl0LGFyZ3VtZW50cyl9LHRoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBJdC5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe0l0LnNldENsZWFyQWxwaGEuYXBwbHkoSXQsYXJndW1lbnRzKX0sdGhpcy5jbGVhcj1mdW5jdGlvbihLLGd0LEV0KXtsZXQgeHQ9MDsoSz09PXZvaWQgMHx8SykmJih4dHw9MTYzODQpLChndD09PXZvaWQgMHx8Z3QpJiYoeHR8PTI1NiksKEV0PT09dm9pZCAwfHxFdCkmJih4dHw9MTAyNCksbHQuY2xlYXIoeHQpfSx0aGlzLmNsZWFyQ29sb3I9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCEwLCExLCExKX0sdGhpcy5jbGVhckRlcHRoPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMCwhMSl9LHRoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsZmUsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLGF0LCExKSxhci5kaXNwb3NlKCksZnIuZGlzcG9zZSgpLGR0LmRpc3Bvc2UoKSxwdC5kaXNwb3NlKCksaHQuZGlzcG9zZSgpLGllLmRpc3Bvc2UoKSxudC5kaXNwb3NlKCksZWUuZGlzcG9zZSgpLFd0LmRpc3Bvc2UoKSxXdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLHplKSxXdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIix5biksb3QmJihvdC5kaXNwb3NlKCksb3Q9bnVsbCksV2kuc3RvcCgpfTtmdW5jdGlvbiBmZShLKXtLLnByZXZlbnREZWZhdWx0KCksY29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgTG9zdC4iKSxfPSEwfWZ1bmN0aW9uIGF0KCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksXz0hMTtsZXQgSz1ldC5hdXRvUmVzZXQsZ3Q9JC5lbmFibGVkLEV0PSQuYXV0b1VwZGF0ZSx4dD0kLm5lZWRzVXBkYXRlLEZ0PSQudHlwZTtDdCgpLGV0LmF1dG9SZXNldD1LLCQuZW5hYmxlZD1ndCwkLmF1dG9VcGRhdGU9RXQsJC5uZWVkc1VwZGF0ZT14dCwkLnR5cGU9RnR9ZnVuY3Rpb24gc2UoSyl7bGV0IGd0PUsudGFyZ2V0O2d0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHNlKSxRdChndCl9ZnVuY3Rpb24gUXQoSyl7Q2UoSyksZHQucmVtb3ZlKEspfWZ1bmN0aW9uIENlKEspe2xldCBndD1kdC5nZXQoSykucHJvZ3JhbXM7Z3QhPT12b2lkIDAmJihndC5mb3JFYWNoKGZ1bmN0aW9uKEV0KXtlZS5yZWxlYXNlUHJvZ3JhbShFdCl9KSxLLmlzU2hhZGVyTWF0ZXJpYWwmJmVlLnJlbGVhc2VTaGFkZXJDYWNoZShLKSl9dGhpcy5yZW5kZXJCdWZmZXJEaXJlY3Q9ZnVuY3Rpb24oSyxndCxFdCx4dCxGdCxWZSl7Z3Q9PT1udWxsJiYoZ3Q9YnQpO2xldCBVZT1GdC5pc01lc2gmJkZ0Lm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCx0cj1jbihLLGd0LEV0LHh0LEZ0KTtYLnNldE1hdGVyaWFsKHh0LFVlKTtsZXQgS2U9RXQuaW5kZXgsWHI9RXQuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihLZT09PW51bGwpe2lmKFhyPT09dm9pZCAwfHxYci5jb3VudD09PTApcmV0dXJufWVsc2UgaWYoS2UuY291bnQ9PT0wKXJldHVybjtsZXQgX3I9MTt4dC53aXJlZnJhbWU9PT0hMCYmKEtlPWt0LmdldFdpcmVmcmFtZUF0dHJpYnV0ZShFdCksX3I9MiksbnQuc2V0dXAoRnQseHQsdHIsRXQsS2UpO2xldCBQcixYbj1oZTtLZSE9PW51bGwmJihQcj13dC5nZXQoS2UpLFhuPVR0LFhuLnNldEluZGV4KFByKSk7bGV0IG5wPUtlIT09bnVsbD9LZS5jb3VudDpYci5jb3VudCx1bT1FdC5kcmF3UmFuZ2Uuc3RhcnQqX3IsbXI9RXQuZHJhd1JhbmdlLmNvdW50Kl9yLEZsPVZlIT09bnVsbD9WZS5zdGFydCpfcjowLCRuPVZlIT09bnVsbD9WZS5jb3VudCpfcjoxLzAsQmw9TWF0aC5tYXgodW0sRmwpLHV4PU1hdGgubWluKG5wLHVtK21yLEZsKyRuKS0xLEhsPU1hdGgubWF4KDAsdXgtQmwrMSk7aWYoSGwhPT0wKXtpZihGdC5pc01lc2gpeHQud2lyZWZyYW1lPT09ITA/KFguc2V0TGluZVdpZHRoKHh0LndpcmVmcmFtZUxpbmV3aWR0aCpNdCgpKSxYbi5zZXRNb2RlKDEpKTpYbi5zZXRNb2RlKDQpO2Vsc2UgaWYoRnQuaXNMaW5lKXtsZXQgVmw9eHQubGluZXdpZHRoO1ZsPT09dm9pZCAwJiYoVmw9MSksWC5zZXRMaW5lV2lkdGgoVmwqTXQoKSksRnQuaXNMaW5lU2VnbWVudHM/WG4uc2V0TW9kZSgxKTpGdC5pc0xpbmVMb29wP1huLnNldE1vZGUoMik6WG4uc2V0TW9kZSgzKX1lbHNlIEZ0LmlzUG9pbnRzP1huLnNldE1vZGUoMCk6RnQuaXNTcHJpdGUmJlhuLnNldE1vZGUoNCk7aWYoRnQuaXNJbnN0YW5jZWRNZXNoKVhuLnJlbmRlckluc3RhbmNlcyhCbCxIbCxGdC5jb3VudCk7ZWxzZSBpZihFdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgVmw9TWF0aC5taW4oRXQuaW5zdGFuY2VDb3VudCxFdC5fbWF4SW5zdGFuY2VDb3VudCk7WG4ucmVuZGVySW5zdGFuY2VzKEJsLEhsLFZsKX1lbHNlIFhuLnJlbmRlcihCbCxIbCl9fSx0aGlzLmNvbXBpbGU9ZnVuY3Rpb24oSyxndCl7Zj1mci5nZXQoSyksZi5pbml0KCksZC5wdXNoKGYpLEsudHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKEV0KXtFdC5pc0xpZ2h0JiZFdC5sYXllcnMudGVzdChndC5sYXllcnMpJiYoZi5wdXNoTGlnaHQoRXQpLEV0LmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhFdCkpfSksZi5zZXR1cExpZ2h0cyhnLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSxLLnRyYXZlcnNlKGZ1bmN0aW9uKEV0KXtsZXQgeHQ9RXQubWF0ZXJpYWw7aWYoeHQpaWYoQXJyYXkuaXNBcnJheSh4dCkpZm9yKGxldCBGdD0wO0Z0PHh0Lmxlbmd0aDtGdCsrKXtsZXQgVmU9eHRbRnRdO2NtKFZlLEssRXQpfWVsc2UgY20oeHQsSyxFdCl9KSxkLnBvcCgpLGY9bnVsbH07bGV0IFB0PW51bGw7ZnVuY3Rpb24gTnQoSyl7UHQmJlB0KEspfWZ1bmN0aW9uIHplKCl7V2kuc3RvcCgpfWZ1bmN0aW9uIHluKCl7V2kuc3RhcnQoKX1sZXQgV2k9bmV3IHpmZTtXaS5zZXRBbmltYXRpb25Mb29wKE50KSx0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmV2kuc2V0Q29udGV4dCh3aW5kb3cpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihLKXtQdD1LLFd0LnNldEFuaW1hdGlvbkxvb3AoSyksSz09PW51bGw/V2kuc3RvcCgpOldpLnN0YXJ0KCl9LFd0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsemUpLFd0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHluKSx0aGlzLnJlbmRlcj1mdW5jdGlvbihLLGd0KXtpZihndCE9PXZvaWQgMCYmZ3QuaXNDYW1lcmEhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXI6IGNhbWVyYSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQ2FtZXJhLiIpO3JldHVybn1pZihfPT09ITApcmV0dXJuO0suYXV0b1VwZGF0ZT09PSEwJiZLLnVwZGF0ZU1hdHJpeFdvcmxkKCksZ3QucGFyZW50PT09bnVsbCYmZ3QudXBkYXRlTWF0cml4V29ybGQoKSxXdC5lbmFibGVkPT09ITAmJld0LmlzUHJlc2VudGluZz09PSEwJiYoV3QuY2FtZXJhQXV0b1VwZGF0ZT09PSEwJiZXdC51cGRhdGVDYW1lcmEoZ3QpLGd0PVd0LmdldENhbWVyYSgpKSxLLmlzU2NlbmU9PT0hMCYmSy5vbkJlZm9yZVJlbmRlcihnLEssZ3QsYiksZj1mci5nZXQoSyxkLmxlbmd0aCksZi5pbml0KCksZC5wdXNoKGYpLHN0Lm11bHRpcGx5TWF0cmljZXMoZ3QucHJvamVjdGlvbk1hdHJpeCxndC5tYXRyaXhXb3JsZEludmVyc2UpLFcuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoc3QpLHJ0PXRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQsWj10dC5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMscnQsZ3QpLGg9YXIuZ2V0KEsscC5sZW5ndGgpLGguaW5pdCgpLHAucHVzaChoKSxBcihLLGd0LDAsZy5zb3J0T2JqZWN0cyksaC5maW5pc2goKSxnLnNvcnRPYmplY3RzPT09ITAmJmguc29ydChMLFIpLFo9PT0hMCYmdHQuYmVnaW5TaGFkb3dzKCk7bGV0IEV0PWYuc3RhdGUuc2hhZG93c0FycmF5O2lmKCQucmVuZGVyKEV0LEssZ3QpLFo9PT0hMCYmdHQuZW5kU2hhZG93cygpLHRoaXMuaW5mby5hdXRvUmVzZXQ9PT0hMCYmdGhpcy5pbmZvLnJlc2V0KCksSXQucmVuZGVyKGgsSyksZi5zZXR1cExpZ2h0cyhnLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSxndC5pc0FycmF5Q2FtZXJhKXtsZXQgeHQ9Z3QuY2FtZXJhcztmb3IobGV0IEZ0PTAsVmU9eHQubGVuZ3RoO0Z0PFZlO0Z0Kyspe2xldCBVZT14dFtGdF07UGEoaCxLLFVlLFVlLnZpZXdwb3J0KX19ZWxzZSBQYShoLEssZ3QpO2IhPT1udWxsJiYocS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChiKSxxLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChiKSksSy5pc1NjZW5lPT09ITAmJksub25BZnRlclJlbmRlcihnLEssZ3QpLFguYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxYLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCksWC5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLFguc2V0UG9seWdvbk9mZnNldCghMSksbnQucmVzZXREZWZhdWx0U3RhdGUoKSxTPS0xLEM9bnVsbCxkLnBvcCgpLGQubGVuZ3RoPjA/Zj1kW2QubGVuZ3RoLTFdOmY9bnVsbCxwLnBvcCgpLHAubGVuZ3RoPjA/aD1wW3AubGVuZ3RoLTFdOmg9bnVsbH07ZnVuY3Rpb24gQXIoSyxndCxFdCx4dCl7aWYoSy52aXNpYmxlPT09ITEpcmV0dXJuO2lmKEsubGF5ZXJzLnRlc3QoZ3QubGF5ZXJzKSl7aWYoSy5pc0dyb3VwKUV0PUsucmVuZGVyT3JkZXI7ZWxzZSBpZihLLmlzTE9EKUsuYXV0b1VwZGF0ZT09PSEwJiZLLnVwZGF0ZShndCk7ZWxzZSBpZihLLmlzTGlnaHQpZi5wdXNoTGlnaHQoSyksSy5jYXN0U2hhZG93JiZmLnB1c2hTaGFkb3coSyk7ZWxzZSBpZihLLmlzU3ByaXRlKXtpZighSy5mcnVzdHVtQ3VsbGVkfHxXLmludGVyc2VjdHNTcHJpdGUoSykpe3h0JiZTdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KHN0KTtsZXQgVWU9aWUudXBkYXRlKEspLHRyPUsubWF0ZXJpYWw7dHIudmlzaWJsZSYmaC5wdXNoKEssVWUsdHIsRXQsU3QueixudWxsKX19ZWxzZSBpZigoSy5pc01lc2h8fEsuaXNMaW5lfHxLLmlzUG9pbnRzKSYmKEsuaXNTa2lubmVkTWVzaCYmSy5za2VsZXRvbi5mcmFtZSE9PWV0LnJlbmRlci5mcmFtZSYmKEsuc2tlbGV0b24udXBkYXRlKCksSy5za2VsZXRvbi5mcmFtZT1ldC5yZW5kZXIuZnJhbWUpLCFLLmZydXN0dW1DdWxsZWR8fFcuaW50ZXJzZWN0c09iamVjdChLKSkpe3h0JiZTdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KHN0KTtsZXQgVWU9aWUudXBkYXRlKEspLHRyPUsubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheSh0cikpe2xldCBLZT1VZS5ncm91cHM7Zm9yKGxldCBYcj0wLF9yPUtlLmxlbmd0aDtYcjxfcjtYcisrKXtsZXQgUHI9S2VbWHJdLFhuPXRyW1ByLm1hdGVyaWFsSW5kZXhdO1huJiZYbi52aXNpYmxlJiZoLnB1c2goSyxVZSxYbixFdCxTdC56LFByKX19ZWxzZSB0ci52aXNpYmxlJiZoLnB1c2goSyxVZSx0cixFdCxTdC56LG51bGwpfX1sZXQgVmU9Sy5jaGlsZHJlbjtmb3IobGV0IFVlPTAsdHI9VmUubGVuZ3RoO1VlPHRyO1VlKyspQXIoVmVbVWVdLGd0LEV0LHh0KX1mdW5jdGlvbiBQYShLLGd0LEV0LHh0KXtsZXQgRnQ9Sy5vcGFxdWUsVmU9Sy50cmFuc21pc3NpdmUsVWU9Sy50cmFuc3BhcmVudDtmLnNldHVwTGlnaHRzVmlldyhFdCksVmUubGVuZ3RoPjAmJmhvKEZ0LGd0LEV0KSx4dCYmWC52aWV3cG9ydChQLmNvcHkoeHQpKSxGdC5sZW5ndGg+MCYmSWEoRnQsZ3QsRXQpLFZlLmxlbmd0aD4wJiZJYShWZSxndCxFdCksVWUubGVuZ3RoPjAmJklhKFVlLGd0LEV0KX1mdW5jdGlvbiBobyhLLGd0LEV0KXtpZihvdD09PW51bGwpe2xldCBVZT1hPT09ITAmJmN0LmlzV2ViR0wyPT09ITA/ajM6dXM7b3Q9bmV3IFVlKDEwMjQsMTAyNCx7Z2VuZXJhdGVNaXBtYXBzOiEwLHR5cGU6YmUuY29udmVydChDdikhPT1udWxsP0N2OlpkLG1pbkZpbHRlcjpveCxtYWdGaWx0ZXI6TGksd3JhcFM6Sm8sd3JhcFQ6Sm8sdXNlUmVuZGVyVG9UZXh0dXJlOl90LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KX1sZXQgeHQ9Zy5nZXRSZW5kZXJUYXJnZXQoKTtnLnNldFJlbmRlclRhcmdldChvdCksZy5jbGVhcigpO2xldCBGdD1nLnRvbmVNYXBwaW5nO2cudG9uZU1hcHBpbmc9S2QsSWEoSyxndCxFdCksZy50b25lTWFwcGluZz1GdCxxLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KG90KSxxLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChvdCksZy5zZXRSZW5kZXJUYXJnZXQoeHQpfWZ1bmN0aW9uIElhKEssZ3QsRXQpe2xldCB4dD1ndC5pc1NjZW5lPT09ITA/Z3Qub3ZlcnJpZGVNYXRlcmlhbDpudWxsO2ZvcihsZXQgRnQ9MCxWZT1LLmxlbmd0aDtGdDxWZTtGdCsrKXtsZXQgVWU9S1tGdF0sdHI9VWUub2JqZWN0LEtlPVVlLmdlb21ldHJ5LFhyPXh0PT09bnVsbD9VZS5tYXRlcmlhbDp4dCxfcj1VZS5ncm91cDt0ci5sYXllcnMudGVzdChFdC5sYXllcnMpJiZseCh0cixndCxFdCxLZSxYcixfcil9fWZ1bmN0aW9uIGx4KEssZ3QsRXQseHQsRnQsVmUpe0sub25CZWZvcmVSZW5kZXIoZyxndCxFdCx4dCxGdCxWZSksSy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhFdC5tYXRyaXhXb3JsZEludmVyc2UsSy5tYXRyaXhXb3JsZCksSy5ub3JtYWxNYXRyaXguZ2V0Tm9ybWFsTWF0cml4KEsubW9kZWxWaWV3TWF0cml4KSxGdC5vbkJlZm9yZVJlbmRlcihnLGd0LEV0LHh0LEssVmUpLEZ0LnRyYW5zcGFyZW50PT09ITAmJkZ0LnNpZGU9PT1Mdj8oRnQuc2lkZT1JaSxGdC5uZWVkc1VwZGF0ZT0hMCxnLnJlbmRlckJ1ZmZlckRpcmVjdChFdCxndCx4dCxGdCxLLFZlKSxGdC5zaWRlPUl2LEZ0Lm5lZWRzVXBkYXRlPSEwLGcucmVuZGVyQnVmZmVyRGlyZWN0KEV0LGd0LHh0LEZ0LEssVmUpLEZ0LnNpZGU9THYpOmcucmVuZGVyQnVmZmVyRGlyZWN0KEV0LGd0LHh0LEZ0LEssVmUpLEsub25BZnRlclJlbmRlcihnLGd0LEV0LHh0LEZ0LFZlKX1mdW5jdGlvbiBjbShLLGd0LEV0KXtndC5pc1NjZW5lIT09ITAmJihndD1idCk7bGV0IHh0PWR0LmdldChLKSxGdD1mLnN0YXRlLmxpZ2h0cyxWZT1mLnN0YXRlLnNoYWRvd3NBcnJheSxVZT1GdC5zdGF0ZS52ZXJzaW9uLHRyPWVlLmdldFBhcmFtZXRlcnMoSyxGdC5zdGF0ZSxWZSxndCxFdCksS2U9ZWUuZ2V0UHJvZ3JhbUNhY2hlS2V5KHRyKSxYcj14dC5wcm9ncmFtczt4dC5lbnZpcm9ubWVudD1LLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Z3QuZW52aXJvbm1lbnQ6bnVsbCx4dC5mb2c9Z3QuZm9nLHh0LmVudk1hcD0oSy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2h0OnB0KS5nZXQoSy5lbnZNYXB8fHh0LmVudmlyb25tZW50KSxYcj09PXZvaWQgMCYmKEsuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsc2UpLFhyPW5ldyBNYXAseHQucHJvZ3JhbXM9WHIpO2xldCBfcj1Yci5nZXQoS2UpO2lmKF9yIT09dm9pZCAwKXtpZih4dC5jdXJyZW50UHJvZ3JhbT09PV9yJiZ4dC5saWdodHNTdGF0ZVZlcnNpb249PT1VZSlyZXR1cm4gSjAoSyx0ciksX3J9ZWxzZSB0ci51bmlmb3Jtcz1lZS5nZXRVbmlmb3JtcyhLKSxLLm9uQnVpbGQoRXQsdHIsZyksSy5vbkJlZm9yZUNvbXBpbGUodHIsZyksX3I9ZWUuYWNxdWlyZVByb2dyYW0odHIsS2UpLFhyLnNldChLZSxfcikseHQudW5pZm9ybXM9dHIudW5pZm9ybXM7bGV0IFByPXh0LnVuaWZvcm1zOyghSy5pc1NoYWRlck1hdGVyaWFsJiYhSy5pc1Jhd1NoYWRlck1hdGVyaWFsfHxLLmNsaXBwaW5nPT09ITApJiYoUHIuY2xpcHBpbmdQbGFuZXM9dHQudW5pZm9ybSksSjAoSyx0cikseHQubmVlZHNMaWdodHM9cnAoSykseHQubGlnaHRzU3RhdGVWZXJzaW9uPVVlLHh0Lm5lZWRzTGlnaHRzJiYoUHIuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9RnQuc3RhdGUuYW1iaWVudCxQci5saWdodFByb2JlLnZhbHVlPUZ0LnN0YXRlLnByb2JlLFByLmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPUZ0LnN0YXRlLmRpcmVjdGlvbmFsLFByLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLnZhbHVlPUZ0LnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LFByLnNwb3RMaWdodHMudmFsdWU9RnQuc3RhdGUuc3BvdCxQci5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPUZ0LnN0YXRlLnNwb3RTaGFkb3csUHIucmVjdEFyZWFMaWdodHMudmFsdWU9RnQuc3RhdGUucmVjdEFyZWEsUHIubHRjXzEudmFsdWU9RnQuc3RhdGUucmVjdEFyZWFMVEMxLFByLmx0Y18yLnZhbHVlPUZ0LnN0YXRlLnJlY3RBcmVhTFRDMixQci5wb2ludExpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5wb2ludCxQci5wb2ludExpZ2h0U2hhZG93cy52YWx1ZT1GdC5zdGF0ZS5wb2ludFNoYWRvdyxQci5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPUZ0LnN0YXRlLmhlbWksUHIuZGlyZWN0aW9uYWxTaGFkb3dNYXAudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsUHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsUHIuc3BvdFNoYWRvd01hcC52YWx1ZT1GdC5zdGF0ZS5zcG90U2hhZG93TWFwLFByLnNwb3RTaGFkb3dNYXRyaXgudmFsdWU9RnQuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxQci5wb2ludFNoYWRvd01hcC52YWx1ZT1GdC5zdGF0ZS5wb2ludFNoYWRvd01hcCxQci5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5wb2ludFNoYWRvd01hdHJpeCk7bGV0IFhuPV9yLmdldFVuaWZvcm1zKCksbnA9QjAuc2VxV2l0aFZhbHVlKFhuLnNlcSxQcik7cmV0dXJuIHh0LmN1cnJlbnRQcm9ncmFtPV9yLHh0LnVuaWZvcm1zTGlzdD1ucCxfcn1mdW5jdGlvbiBKMChLLGd0KXtsZXQgRXQ9ZHQuZ2V0KEspO0V0Lm91dHB1dEVuY29kaW5nPWd0Lm91dHB1dEVuY29kaW5nLEV0Lmluc3RhbmNpbmc9Z3QuaW5zdGFuY2luZyxFdC5za2lubmluZz1ndC5za2lubmluZyxFdC5tb3JwaFRhcmdldHM9Z3QubW9ycGhUYXJnZXRzLEV0Lm1vcnBoTm9ybWFscz1ndC5tb3JwaE5vcm1hbHMsRXQubW9ycGhUYXJnZXRzQ291bnQ9Z3QubW9ycGhUYXJnZXRzQ291bnQsRXQubnVtQ2xpcHBpbmdQbGFuZXM9Z3QubnVtQ2xpcHBpbmdQbGFuZXMsRXQubnVtSW50ZXJzZWN0aW9uPWd0Lm51bUNsaXBJbnRlcnNlY3Rpb24sRXQudmVydGV4QWxwaGFzPWd0LnZlcnRleEFscGhhcyxFdC52ZXJ0ZXhUYW5nZW50cz1ndC52ZXJ0ZXhUYW5nZW50cyxFdC50b25lTWFwcGluZz1ndC50b25lTWFwcGluZ31mdW5jdGlvbiBjbihLLGd0LEV0LHh0LEZ0KXtndC5pc1NjZW5lIT09ITAmJihndD1idCkscS5yZXNldFRleHR1cmVVbml0cygpO2xldCBWZT1ndC5mb2csVWU9eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9ndC5lbnZpcm9ubWVudDpudWxsLHRyPWI9PT1udWxsP2cub3V0cHV0RW5jb2Rpbmc6Yi5pc1hSUmVuZGVyVGFyZ2V0PT09ITA/Yi50ZXh0dXJlLmVuY29kaW5nOlFkLEtlPSh4dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2h0OnB0KS5nZXQoeHQuZW52TWFwfHxVZSksWHI9eHQudmVydGV4Q29sb3JzPT09ITAmJiEhRXQuYXR0cmlidXRlcy5jb2xvciYmRXQuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZT09PTQsX3I9ISF4dC5ub3JtYWxNYXAmJiEhRXQuYXR0cmlidXRlcy50YW5nZW50LFByPSEhRXQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLFhuPSEhRXQubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxucD1FdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/RXQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLHVtPXh0LnRvbmVNYXBwZWQ/Zy50b25lTWFwcGluZzpLZCxtcj1kdC5nZXQoeHQpLEZsPWYuc3RhdGUubGlnaHRzO2lmKFo9PT0hMCYmKHJ0PT09ITB8fEshPT1DKSl7bGV0IHFzPUs9PT1DJiZ4dC5pZD09PVM7dHQuc2V0U3RhdGUoeHQsSyxxcyl9bGV0ICRuPSExO3h0LnZlcnNpb249PT1tci5fX3ZlcnNpb24/KG1yLm5lZWRzTGlnaHRzJiZtci5saWdodHNTdGF0ZVZlcnNpb24hPT1GbC5zdGF0ZS52ZXJzaW9ufHxtci5vdXRwdXRFbmNvZGluZyE9PXRyfHxGdC5pc0luc3RhbmNlZE1lc2gmJm1yLmluc3RhbmNpbmc9PT0hMXx8IUZ0LmlzSW5zdGFuY2VkTWVzaCYmbXIuaW5zdGFuY2luZz09PSEwfHxGdC5pc1NraW5uZWRNZXNoJiZtci5za2lubmluZz09PSExfHwhRnQuaXNTa2lubmVkTWVzaCYmbXIuc2tpbm5pbmc9PT0hMHx8bXIuZW52TWFwIT09S2V8fHh0LmZvZyYmbXIuZm9nIT09VmV8fG1yLm51bUNsaXBwaW5nUGxhbmVzIT09dm9pZCAwJiYobXIubnVtQ2xpcHBpbmdQbGFuZXMhPT10dC5udW1QbGFuZXN8fG1yLm51bUludGVyc2VjdGlvbiE9PXR0Lm51bUludGVyc2VjdGlvbil8fG1yLnZlcnRleEFscGhhcyE9PVhyfHxtci52ZXJ0ZXhUYW5nZW50cyE9PV9yfHxtci5tb3JwaFRhcmdldHMhPT1Qcnx8bXIubW9ycGhOb3JtYWxzIT09WG58fG1yLnRvbmVNYXBwaW5nIT09dW18fGN0LmlzV2ViR0wyPT09ITAmJm1yLm1vcnBoVGFyZ2V0c0NvdW50IT09bnApJiYoJG49ITApOigkbj0hMCxtci5fX3ZlcnNpb249eHQudmVyc2lvbik7bGV0IEJsPW1yLmN1cnJlbnRQcm9ncmFtOyRuPT09ITAmJihCbD1jbSh4dCxndCxGdCkpO2xldCB1eD0hMSxIbD0hMSxWbD0hMSxZaT1CbC5nZXRVbmlmb3JtcygpLGhtPW1yLnVuaWZvcm1zO2lmKFgudXNlUHJvZ3JhbShCbC5wcm9ncmFtKSYmKHV4PSEwLEhsPSEwLFZsPSEwKSx4dC5pZCE9PVMmJihTPXh0LmlkLEhsPSEwKSx1eHx8QyE9PUspe2lmKFlpLnNldFZhbHVlKGx0LCJwcm9qZWN0aW9uTWF0cml4IixLLnByb2plY3Rpb25NYXRyaXgpLGN0LmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJllpLnNldFZhbHVlKGx0LCJsb2dEZXB0aEJ1ZkZDIiwyLyhNYXRoLmxvZyhLLmZhcisxKS9NYXRoLkxOMikpLEMhPT1LJiYoQz1LLEhsPSEwLFZsPSEwKSx4dC5pc1NoYWRlck1hdGVyaWFsfHx4dC5pc01lc2hQaG9uZ01hdGVyaWFsfHx4dC5pc01lc2hUb29uTWF0ZXJpYWx8fHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fHh0LmVudk1hcCl7bGV0IHFzPVlpLm1hcC5jYW1lcmFQb3NpdGlvbjtxcyE9PXZvaWQgMCYmcXMuc2V0VmFsdWUobHQsU3Quc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEsubWF0cml4V29ybGQpKX0oeHQuaXNNZXNoUGhvbmdNYXRlcmlhbHx8eHQuaXNNZXNoVG9vbk1hdGVyaWFsfHx4dC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fHh0LmlzTWVzaEJhc2ljTWF0ZXJpYWx8fHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fHh0LmlzU2hhZGVyTWF0ZXJpYWwpJiZZaS5zZXRWYWx1ZShsdCwiaXNPcnRob2dyYXBoaWMiLEsuaXNPcnRob2dyYXBoaWNDYW1lcmE9PT0hMCksKHh0LmlzTWVzaFBob25nTWF0ZXJpYWx8fHh0LmlzTWVzaFRvb25NYXRlcmlhbHx8eHQuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHx4dC5pc01lc2hCYXNpY01hdGVyaWFsfHx4dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHx4dC5pc1NoYWRlck1hdGVyaWFsfHx4dC5pc1NoYWRvd01hdGVyaWFsfHxGdC5pc1NraW5uZWRNZXNoKSYmWWkuc2V0VmFsdWUobHQsInZpZXdNYXRyaXgiLEsubWF0cml4V29ybGRJbnZlcnNlKX1pZihGdC5pc1NraW5uZWRNZXNoKXtZaS5zZXRPcHRpb25hbChsdCxGdCwiYmluZE1hdHJpeCIpLFlpLnNldE9wdGlvbmFsKGx0LEZ0LCJiaW5kTWF0cml4SW52ZXJzZSIpO2xldCBxcz1GdC5za2VsZXRvbjtxcyYmKGN0LmZsb2F0VmVydGV4VGV4dHVyZXM/KHFzLmJvbmVUZXh0dXJlPT09bnVsbCYmcXMuY29tcHV0ZUJvbmVUZXh0dXJlKCksWWkuc2V0VmFsdWUobHQsImJvbmVUZXh0dXJlIixxcy5ib25lVGV4dHVyZSxxKSxZaS5zZXRWYWx1ZShsdCwiYm9uZVRleHR1cmVTaXplIixxcy5ib25lVGV4dHVyZVNpemUpKTpZaS5zZXRPcHRpb25hbChsdCxxcywiYm9uZU1hdHJpY2VzIikpfXJldHVybiEhRXQmJihFdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24hPT12b2lkIDB8fEV0Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwhPT12b2lkIDApJiYkdC51cGRhdGUoRnQsRXQseHQsQmwpLChIbHx8bXIucmVjZWl2ZVNoYWRvdyE9PUZ0LnJlY2VpdmVTaGFkb3cpJiYobXIucmVjZWl2ZVNoYWRvdz1GdC5yZWNlaXZlU2hhZG93LFlpLnNldFZhbHVlKGx0LCJyZWNlaXZlU2hhZG93IixGdC5yZWNlaXZlU2hhZG93KSksSGwmJihZaS5zZXRWYWx1ZShsdCwidG9uZU1hcHBpbmdFeHBvc3VyZSIsZy50b25lTWFwcGluZ0V4cG9zdXJlKSxtci5uZWVkc0xpZ2h0cyYmY3goaG0sVmwpLFZlJiZ4dC5mb2cmJkxlLnJlZnJlc2hGb2dVbmlmb3JtcyhobSxWZSksTGUucmVmcmVzaE1hdGVyaWFsVW5pZm9ybXMoaG0seHQsSSxCLG90KSxCMC51cGxvYWQobHQsbXIudW5pZm9ybXNMaXN0LGhtLHEpKSx4dC5pc1NoYWRlck1hdGVyaWFsJiZ4dC51bmlmb3Jtc05lZWRVcGRhdGU9PT0hMCYmKEIwLnVwbG9hZChsdCxtci51bmlmb3Jtc0xpc3QsaG0scSkseHQudW5pZm9ybXNOZWVkVXBkYXRlPSExKSx4dC5pc1Nwcml0ZU1hdGVyaWFsJiZZaS5zZXRWYWx1ZShsdCwiY2VudGVyIixGdC5jZW50ZXIpLFlpLnNldFZhbHVlKGx0LCJtb2RlbFZpZXdNYXRyaXgiLEZ0Lm1vZGVsVmlld01hdHJpeCksWWkuc2V0VmFsdWUobHQsIm5vcm1hbE1hdHJpeCIsRnQubm9ybWFsTWF0cml4KSxZaS5zZXRWYWx1ZShsdCwibW9kZWxNYXRyaXgiLEZ0Lm1hdHJpeFdvcmxkKSxCbH1mdW5jdGlvbiBjeChLLGd0KXtLLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlPWd0LEsubGlnaHRQcm9iZS5uZWVkc1VwZGF0ZT1ndCxLLmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9Z3QsSy5wb2ludExpZ2h0cy5uZWVkc1VwZGF0ZT1ndCxLLnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPWd0LEsuc3BvdExpZ2h0cy5uZWVkc1VwZGF0ZT1ndCxLLnNwb3RMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9Z3QsSy5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1ndCxLLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGU9Z3R9ZnVuY3Rpb24gcnAoSyl7cmV0dXJuIEsuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxLLmlzTWVzaFRvb25NYXRlcmlhbHx8Sy5pc01lc2hQaG9uZ01hdGVyaWFsfHxLLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fEsuaXNTaGFkb3dNYXRlcmlhbHx8Sy5pc1NoYWRlck1hdGVyaWFsJiZLLmxpZ2h0cz09PSEwfXRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4geX0sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiB4fSx0aGlzLmdldFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBifSx0aGlzLnNldFJlbmRlclRhcmdldFRleHR1cmVzPWZ1bmN0aW9uKEssZ3QsRXQpe2R0LmdldChLLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlPWd0LGR0LmdldChLLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU9RXQ7bGV0IHh0PWR0LmdldChLKTt4dC5fX2hhc0V4dGVybmFsVGV4dHVyZXM9ITAseHQuX19oYXNFeHRlcm5hbFRleHR1cmVzJiYoeHQuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcj1FdD09PXZvaWQgMCx4dC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyfHxLLnVzZVJlbmRlclRvVGV4dHVyZSYmKGNvbnNvbGUud2FybigicmVuZGVyLXRvLXRleHR1cmUgZXh0ZW5zaW9uIHdhcyBkaXNhYmxlZCBiZWNhdXNlIGFuIGV4dGVybmFsIHRleHR1cmUgd2FzIHByb3ZpZGVkIiksSy51c2VSZW5kZXJUb1RleHR1cmU9ITEsSy51c2VSZW5kZXJidWZmZXI9ITApKX0sdGhpcy5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlcj1mdW5jdGlvbihLLGd0KXtsZXQgRXQ9ZHQuZ2V0KEspO0V0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcj1ndCxFdC5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlcj1ndD09PXZvaWQgMH0sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oSyxndD0wLEV0PTApe2I9Syx5PWd0LHg9RXQ7bGV0IHh0PSEwO2lmKEspe2xldCBLZT1kdC5nZXQoSyk7S2UuX191c2VEZWZhdWx0RnJhbWVidWZmZXIhPT12b2lkIDA/KFguYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpLHh0PSExKTpLZS5fX3dlYmdsRnJhbWVidWZmZXI9PT12b2lkIDA/cS5zZXR1cFJlbmRlclRhcmdldChLKTpLZS5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJnEucmViaW5kVGV4dHVyZXMoSyxkdC5nZXQoSy50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSxkdC5nZXQoSy5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlKX1sZXQgRnQ9bnVsbCxWZT0hMSxVZT0hMTtpZihLKXtsZXQgS2U9Sy50ZXh0dXJlOyhLZS5pc0RhdGFUZXh0dXJlM0R8fEtlLmlzRGF0YVRleHR1cmUyREFycmF5KSYmKFVlPSEwKTtsZXQgWHI9ZHQuZ2V0KEspLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtLLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PyhGdD1YcltndF0sVmU9ITApOksudXNlUmVuZGVyYnVmZmVyP0Z0PWR0LmdldChLKS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI6RnQ9WHIsUC5jb3B5KEsudmlld3BvcnQpLGsuY29weShLLnNjaXNzb3IpLE89Sy5zY2lzc29yVGVzdH1lbHNlIFAuY29weShGKS5tdWx0aXBseVNjYWxhcihJKS5mbG9vcigpLGsuY29weSh6KS5tdWx0aXBseVNjYWxhcihJKS5mbG9vcigpLE89VTtpZihYLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxGdCkmJmN0LmRyYXdCdWZmZXJzJiZ4dCYmWC5kcmF3QnVmZmVycyhLLEZ0KSxYLnZpZXdwb3J0KFApLFguc2Npc3NvcihrKSxYLnNldFNjaXNzb3JUZXN0KE8pLFZlKXtsZXQgS2U9ZHQuZ2V0KEsudGV4dHVyZSk7bHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzQwNjkrZ3QsS2UuX193ZWJnbFRleHR1cmUsRXQpfWVsc2UgaWYoVWUpe2xldCBLZT1kdC5nZXQoSy50ZXh0dXJlKSxYcj1ndHx8MDtsdC5mcmFtZWJ1ZmZlclRleHR1cmVMYXllcigzNjE2MCwzNjA2NCxLZS5fX3dlYmdsVGV4dHVyZSxFdHx8MCxYcil9Uz0tMX0sdGhpcy5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzPWZ1bmN0aW9uKEssZ3QsRXQseHQsRnQsVmUsVWUpe2lmKCEoSyYmSy5pc1dlYkdMUmVuZGVyVGFyZ2V0KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO3JldHVybn1sZXQgdHI9ZHQuZ2V0KEspLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihLLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZVZSE9PXZvaWQgMCYmKHRyPXRyW1VlXSksdHIpe1guYmluZEZyYW1lYnVmZmVyKDM2MTYwLHRyKTt0cnl7bGV0IEtlPUsudGV4dHVyZSxYcj1LZS5mb3JtYXQsX3I9S2UudHlwZTtpZihYciE9PVFvJiZiZS5jb252ZXJ0KFhyKSE9PWx0LmdldFBhcmFtZXRlcigzNTczOSkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpO3JldHVybn1sZXQgUHI9X3I9PT1DdiYmKF90LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iil8fGN0LmlzV2ViR0wyJiZfdC5oYXMoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSk7aWYoX3IhPT1aZCYmYmUuY29udmVydChfcikhPT1sdC5nZXRQYXJhbWV0ZXIoMzU3MzgpJiYhKF9yPT09amQmJihjdC5pc1dlYkdMMnx8X3QuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpfHxfdC5oYXMoIldFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKSkmJiFQcil7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpO3JldHVybn1sdC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKT09PTM2MDUzP2d0Pj0wJiZndDw9Sy53aWR0aC14dCYmRXQ+PTAmJkV0PD1LLmhlaWdodC1GdCYmbHQucmVhZFBpeGVscyhndCxFdCx4dCxGdCxiZS5jb252ZXJ0KFhyKSxiZS5jb252ZXJ0KF9yKSxWZSk6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZWFkUGl4ZWxzIGZyb20gcmVuZGVyVGFyZ2V0IGZhaWxlZC4gRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLiIpfWZpbmFsbHl7bGV0IEtlPWIhPT1udWxsP2R0LmdldChiKS5fX3dlYmdsRnJhbWVidWZmZXI6bnVsbDtYLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxLZSl9fX0sdGhpcy5jb3B5RnJhbWVidWZmZXJUb1RleHR1cmU9ZnVuY3Rpb24oSyxndCxFdD0wKXtpZihndC5pc0ZyYW1lYnVmZmVyVGV4dHVyZSE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBjb3B5RnJhbWVidWZmZXJUb1RleHR1cmUoKSBjYW4gb25seSBiZSB1c2VkIHdpdGggRnJhbWVidWZmZXJUZXh0dXJlLiIpO3JldHVybn1sZXQgeHQ9TWF0aC5wb3coMiwtRXQpLEZ0PU1hdGguZmxvb3IoZ3QuaW1hZ2Uud2lkdGgqeHQpLFZlPU1hdGguZmxvb3IoZ3QuaW1hZ2UuaGVpZ2h0Knh0KTtxLnNldFRleHR1cmUyRChndCwwKSxsdC5jb3B5VGV4U3ViSW1hZ2UyRCgzNTUzLEV0LDAsMCxLLngsSy55LEZ0LFZlKSxYLnVuYmluZFRleHR1cmUoKX0sdGhpcy5jb3B5VGV4dHVyZVRvVGV4dHVyZT1mdW5jdGlvbihLLGd0LEV0LHh0PTApe2xldCBGdD1ndC5pbWFnZS53aWR0aCxWZT1ndC5pbWFnZS5oZWlnaHQsVWU9YmUuY29udmVydChFdC5mb3JtYXQpLHRyPWJlLmNvbnZlcnQoRXQudHlwZSk7cS5zZXRUZXh0dXJlMkQoRXQsMCksbHQucGl4ZWxTdG9yZWkoMzc0NDAsRXQuZmxpcFkpLGx0LnBpeGVsU3RvcmVpKDM3NDQxLEV0LnByZW11bHRpcGx5QWxwaGEpLGx0LnBpeGVsU3RvcmVpKDMzMTcsRXQudW5wYWNrQWxpZ25tZW50KSxndC5pc0RhdGFUZXh0dXJlP2x0LnRleFN1YkltYWdlMkQoMzU1Myx4dCxLLngsSy55LEZ0LFZlLFVlLHRyLGd0LmltYWdlLmRhdGEpOmd0LmlzQ29tcHJlc3NlZFRleHR1cmU/bHQuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1Myx4dCxLLngsSy55LGd0Lm1pcG1hcHNbMF0ud2lkdGgsZ3QubWlwbWFwc1swXS5oZWlnaHQsVWUsZ3QubWlwbWFwc1swXS5kYXRhKTpsdC50ZXhTdWJJbWFnZTJEKDM1NTMseHQsSy54LEsueSxVZSx0cixndC5pbWFnZSkseHQ9PT0wJiZFdC5nZW5lcmF0ZU1pcG1hcHMmJmx0LmdlbmVyYXRlTWlwbWFwKDM1NTMpLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q9ZnVuY3Rpb24oSyxndCxFdCx4dCxGdD0wKXtpZihnLmlzV2ViR0wxUmVuZGVyZXIpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO3JldHVybn1sZXQgVmU9Sy5tYXgueC1LLm1pbi54KzEsVWU9Sy5tYXgueS1LLm1pbi55KzEsdHI9Sy5tYXguei1LLm1pbi56KzEsS2U9YmUuY29udmVydCh4dC5mb3JtYXQpLFhyPWJlLmNvbnZlcnQoeHQudHlwZSksX3I7aWYoeHQuaXNEYXRhVGV4dHVyZTNEKXEuc2V0VGV4dHVyZTNEKHh0LDApLF9yPTMyODc5O2Vsc2UgaWYoeHQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpcS5zZXRUZXh0dXJlMkRBcnJheSh4dCwwKSxfcj0zNTg2NjtlbHNle2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBvbmx5IHN1cHBvcnRzIFRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheS4iKTtyZXR1cm59bHQucGl4ZWxTdG9yZWkoMzc0NDAseHQuZmxpcFkpLGx0LnBpeGVsU3RvcmVpKDM3NDQxLHh0LnByZW11bHRpcGx5QWxwaGEpLGx0LnBpeGVsU3RvcmVpKDMzMTcseHQudW5wYWNrQWxpZ25tZW50KTtsZXQgUHI9bHQuZ2V0UGFyYW1ldGVyKDMzMTQpLFhuPWx0LmdldFBhcmFtZXRlcigzMjg3OCksbnA9bHQuZ2V0UGFyYW1ldGVyKDMzMTYpLHVtPWx0LmdldFBhcmFtZXRlcigzMzE1KSxtcj1sdC5nZXRQYXJhbWV0ZXIoMzI4NzcpLEZsPUV0LmlzQ29tcHJlc3NlZFRleHR1cmU/RXQubWlwbWFwc1swXTpFdC5pbWFnZTtsdC5waXhlbFN0b3JlaSgzMzE0LEZsLndpZHRoKSxsdC5waXhlbFN0b3JlaSgzMjg3OCxGbC5oZWlnaHQpLGx0LnBpeGVsU3RvcmVpKDMzMTYsSy5taW4ueCksbHQucGl4ZWxTdG9yZWkoMzMxNSxLLm1pbi55KSxsdC5waXhlbFN0b3JlaSgzMjg3NyxLLm1pbi56KSxFdC5pc0RhdGFUZXh0dXJlfHxFdC5pc0RhdGFUZXh0dXJlM0Q/bHQudGV4U3ViSW1hZ2UzRChfcixGdCxndC54LGd0LnksZ3QueixWZSxVZSx0cixLZSxYcixGbC5kYXRhKTpFdC5pc0NvbXByZXNzZWRUZXh0dXJlPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogdW50ZXN0ZWQgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBzcmNUZXh0dXJlLiIpLGx0LmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKF9yLEZ0LGd0LngsZ3QueSxndC56LFZlLFVlLHRyLEtlLEZsLmRhdGEpKTpsdC50ZXhTdWJJbWFnZTNEKF9yLEZ0LGd0LngsZ3QueSxndC56LFZlLFVlLHRyLEtlLFhyLEZsKSxsdC5waXhlbFN0b3JlaSgzMzE0LFByKSxsdC5waXhlbFN0b3JlaSgzMjg3OCxYbiksbHQucGl4ZWxTdG9yZWkoMzMxNixucCksbHQucGl4ZWxTdG9yZWkoMzMxNSx1bSksbHQucGl4ZWxTdG9yZWkoMzI4NzcsbXIpLEZ0PT09MCYmeHQuZ2VuZXJhdGVNaXBtYXBzJiZsdC5nZW5lcmF0ZU1pcG1hcChfciksWC51bmJpbmRUZXh0dXJlKCl9LHRoaXMuaW5pdFRleHR1cmU9ZnVuY3Rpb24oSyl7cS5zZXRUZXh0dXJlMkQoSywwKSxYLnVuYmluZFRleHR1cmUoKX0sdGhpcy5yZXNldFN0YXRlPWZ1bmN0aW9uKCl7eT0wLHg9MCxiPW51bGwsWC5yZXNldCgpLG50LnJlc2V0KCl9LHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18hPSJ1bmRlZmluZWQiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1ybi5wcm90b3R5cGUuaXNXZWJHTFJlbmRlcmVyPSEwO3ZhciBtVT1jbGFzcyBleHRlbmRzIHJue307bVUucHJvdG90eXBlLmlzV2ViR0wxUmVuZGVyZXI9ITA7dmFyIE92PWNsYXNze2NvbnN0cnVjdG9yKHQscj0yNWUtNSl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IG5lKHQpLHRoaXMuZGVuc2l0eT1yfWNsb25lKCl7cmV0dXJuIG5ldyBPdih0aGlzLmNvbG9yLHRoaXMuZGVuc2l0eSl9dG9KU09OKCl7cmV0dXJue3R5cGU6IkZvZ0V4cDIiLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksZGVuc2l0eTp0aGlzLmRlbnNpdHl9fX07T3YucHJvdG90eXBlLmlzRm9nRXhwMj0hMDt2YXIgenY9Y2xhc3N7Y29uc3RydWN0b3IodCxyPTEsbj0xZTMpe3RoaXMubmFtZT0iIix0aGlzLmNvbG9yPW5ldyBuZSh0KSx0aGlzLm5lYXI9cix0aGlzLmZhcj1ufWNsb25lKCl7cmV0dXJuIG5ldyB6dih0aGlzLmNvbG9yLHRoaXMubmVhcix0aGlzLmZhcil9dG9KU09OKCl7cmV0dXJue3R5cGU6IkZvZyIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxuZWFyOnRoaXMubmVhcixmYXI6dGhpcy5mYXJ9fX07enYucHJvdG90eXBlLmlzRm9nPSEwO3ZhciBxMD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNjZW5lIix0aGlzLmJhY2tncm91bmQ9bnVsbCx0aGlzLmVudmlyb25tZW50PW51bGwsdGhpcy5mb2c9bnVsbCx0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9bnVsbCx0aGlzLmF1dG9VcGRhdGU9ITAsdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfWNvcHkodCxyKXtyZXR1cm4gc3VwZXIuY29weSh0LHIpLHQuYmFja2dyb3VuZCE9PW51bGwmJih0aGlzLmJhY2tncm91bmQ9dC5iYWNrZ3JvdW5kLmNsb25lKCkpLHQuZW52aXJvbm1lbnQhPT1udWxsJiYodGhpcy5lbnZpcm9ubWVudD10LmVudmlyb25tZW50LmNsb25lKCkpLHQuZm9nIT09bnVsbCYmKHRoaXMuZm9nPXQuZm9nLmNsb25lKCkpLHQub3ZlcnJpZGVNYXRlcmlhbCE9PW51bGwmJih0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9dC5vdmVycmlkZU1hdGVyaWFsLmNsb25lKCkpLHRoaXMuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHRoaXMuZm9nIT09bnVsbCYmKHIub2JqZWN0LmZvZz10aGlzLmZvZy50b0pTT04oKSkscn19O3EwLnByb3RvdHlwZS5pc1NjZW5lPSEwO3ZhciBlbT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuYXJyYXk9dCx0aGlzLnN0cmlkZT1yLHRoaXMuY291bnQ9dCE9PXZvaWQgMD90Lmxlbmd0aC9yOjAsdGhpcy51c2FnZT1XMyx0aGlzLnVwZGF0ZVJhbmdlPXtvZmZzZXQ6MCxjb3VudDotMX0sdGhpcy52ZXJzaW9uPTAsdGhpcy51dWlkPU5sKCl9b25VcGxvYWRDYWxsYmFjaygpe31zZXQgbmVlZHNVcGRhdGUodCl7dD09PSEwJiZ0aGlzLnZlcnNpb24rK31zZXRVc2FnZSh0KXtyZXR1cm4gdGhpcy51c2FnZT10LHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLmNvdW50PXQuY291bnQsdGhpcy5zdHJpZGU9dC5zdHJpZGUsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQscixuKXt0Kj10aGlzLnN0cmlkZSxuKj1yLnN0cmlkZTtmb3IobGV0IGk9MCxvPXRoaXMuc3RyaWRlO2k8bztpKyspdGhpcy5hcnJheVt0K2ldPXIuYXJyYXlbbitpXTtyZXR1cm4gdGhpc31zZXQodCxyPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LHIpLHRoaXN9Y2xvbmUodCl7dC5hcnJheUJ1ZmZlcnM9PT12b2lkIDAmJih0LmFycmF5QnVmZmVycz17fSksdGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9PT12b2lkIDAmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1ObCgpKSx0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09PT12b2lkIDAmJih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09dGhpcy5hcnJheS5zbGljZSgwKS5idWZmZXIpO2xldCByPW5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSksbj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihyLHRoaXMuc3RyaWRlKTtyZXR1cm4gbi5zZXRVc2FnZSh0aGlzLnVzYWdlKSxufW9uVXBsb2FkKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfXRvSlNPTih0KXtyZXR1cm4gdC5hcnJheUJ1ZmZlcnM9PT12b2lkIDAmJih0LmFycmF5QnVmZmVycz17fSksdGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9PT12b2lkIDAmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1ObCgpKSx0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09PT12b2lkIDAmJih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXkuYnVmZmVyKSkpLHt1dWlkOnRoaXMudXVpZCxidWZmZXI6dGhpcy5hcnJheS5idWZmZXIuX3V1aWQsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsc3RyaWRlOnRoaXMuc3RyaWRlfX19O2VtLnByb3RvdHlwZS5pc0ludGVybGVhdmVkQnVmZmVyPSEwO3ZhciBBaT1uZXcgaix0cD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpPSExKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXQsdGhpcy5pdGVtU2l6ZT1yLHRoaXMub2Zmc2V0PW4sdGhpcy5ub3JtYWxpemVkPWk9PT0hMH1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5kYXRhLmNvdW50fWdldCBhcnJheSgpe3JldHVybiB0aGlzLmRhdGEuYXJyYXl9c2V0IG5lZWRzVXBkYXRlKHQpe3RoaXMuZGF0YS5uZWVkc1VwZGF0ZT10fWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IHI9MCxuPXRoaXMuZGF0YS5jb3VudDtyPG47cisrKUFpLng9dGhpcy5nZXRYKHIpLEFpLnk9dGhpcy5nZXRZKHIpLEFpLno9dGhpcy5nZXRaKHIpLEFpLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldFhZWihyLEFpLngsQWkueSxBaS56KTtyZXR1cm4gdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylBaS54PXRoaXMuZ2V0WChyKSxBaS55PXRoaXMuZ2V0WShyKSxBaS56PXRoaXMuZ2V0WihyKSxBaS5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihyLEFpLngsQWkueSxBaS56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspQWkueD10aGlzLmdldFgociksQWkueT10aGlzLmdldFkociksQWkuej10aGlzLmdldFoociksQWkudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfXNldFgodCxyKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF09cix0aGlzfXNldFkodCxyKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXT1yLHRoaXN9c2V0Wih0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdPXIsdGhpc31zZXRXKHQscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109cix0aGlzfWdldFgodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdfWdldFkodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV19Z2V0Wih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXX1nZXRXKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdfXNldFhZKHQscixuKXtyZXR1cm4gdD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQsdGhpcy5kYXRhLmFycmF5W3QrMF09cix0aGlzLmRhdGEuYXJyYXlbdCsxXT1uLHRoaXN9c2V0WFlaKHQscixuLGkpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpcy5kYXRhLmFycmF5W3QrMl09aSx0aGlzfXNldFhZWlcodCxyLG4saSxvKXtyZXR1cm4gdD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQsdGhpcy5kYXRhLmFycmF5W3QrMF09cix0aGlzLmRhdGEuYXJyYXlbdCsxXT1uLHRoaXMuZGF0YS5hcnJheVt0KzJdPWksdGhpcy5kYXRhLmFycmF5W3QrM109byx0aGlzfWNsb25lKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS5jbG9uZSgpOiBDbG9uaW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHRoaXMuY291bnQ7bisrKXtsZXQgaT1uKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKylyLnB1c2godGhpcy5kYXRhLmFycmF5W2krb10pfXJldHVybiBuZXcgSmUobmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IociksdGhpcy5pdGVtU2l6ZSx0aGlzLm5vcm1hbGl6ZWQpfWVsc2UgcmV0dXJuIHQuaW50ZXJsZWF2ZWRCdWZmZXJzPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT09PXZvaWQgMCYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEuY2xvbmUodCkpLG5ldyB0cCh0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0sdGhpcy5pdGVtU2l6ZSx0aGlzLm9mZnNldCx0aGlzLm5vcm1hbGl6ZWQpfXRvSlNPTih0KXtpZih0PT09dm9pZCAwKXtjb25zb2xlLmxvZygiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUudG9KU09OKCk6IFNlcmlhbGl6aW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHRoaXMuY291bnQ7bisrKXtsZXQgaT1uKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKylyLnB1c2godGhpcy5kYXRhLmFycmF5W2krb10pfXJldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OnIsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fWVsc2UgcmV0dXJuIHQuaW50ZXJsZWF2ZWRCdWZmZXJzPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT09PXZvaWQgMCYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEudG9KU09OKHQpKSx7aXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZTohMCxpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLGRhdGE6dGhpcy5kYXRhLnV1aWQsb2Zmc2V0OnRoaXMub2Zmc2V0LG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfX19O3RwLnByb3RvdHlwZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBpTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJTcHJpdGVNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMucm90YXRpb249MCx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319O2lNLnByb3RvdHlwZS5pc1Nwcml0ZU1hdGVyaWFsPSEwO3ZhciBOMyxOUD1uZXcgaixEMz1uZXcgaixPMz1uZXcgaix6Mz1uZXcgTHQsRFA9bmV3IEx0LCRmZT1uZXcgTWUsSVY9bmV3IGosT1A9bmV3IGosTFY9bmV3IGosWXVlPW5ldyBMdCxtdXQ9bmV3IEx0LGp1ZT1uZXcgTHQsb009Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0KXtpZihzdXBlcigpLHRoaXMudHlwZT0iU3ByaXRlIixOMz09PXZvaWQgMCl7TjM9bmV3IFBlO2xldCByPW5ldyBGbG9hdDMyQXJyYXkoWy0uNSwtLjUsMCwwLDAsLjUsLS41LDAsMSwwLC41LC41LDAsMSwxLC0uNSwuNSwwLDAsMV0pLG49bmV3IGVtKHIsNSk7TjMuc2V0SW5kZXgoWzAsMSwyLDAsMiwzXSksTjMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHRwKG4sMywwLCExKSksTjMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHRwKG4sMiwzLCExKSl9dGhpcy5nZW9tZXRyeT1OMyx0aGlzLm1hdGVyaWFsPXQhPT12b2lkIDA/dDpuZXcgaU0sdGhpcy5jZW50ZXI9bmV3IEx0KC41LC41KX1yYXljYXN0KHQscil7dC5jYW1lcmE9PT1udWxsJiZjb25zb2xlLmVycm9yKCdUSFJFRS5TcHJpdGU6ICJSYXljYXN0ZXIuY2FtZXJhIiBuZWVkcyB0byBiZSBzZXQgaW4gb3JkZXIgdG8gcmF5Y2FzdCBhZ2FpbnN0IHNwcml0ZXMuJyksRDMuc2V0RnJvbU1hdHJpeFNjYWxlKHRoaXMubWF0cml4V29ybGQpLCRmZS5jb3B5KHQuY2FtZXJhLm1hdHJpeFdvcmxkKSx0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHQuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSx0aGlzLm1hdHJpeFdvcmxkKSxPMy5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tb2RlbFZpZXdNYXRyaXgpLHQuY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEmJnRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uPT09ITEmJkQzLm11bHRpcGx5U2NhbGFyKC1PMy56KTtsZXQgbj10aGlzLm1hdGVyaWFsLnJvdGF0aW9uLGksbztuIT09MCYmKG89TWF0aC5jb3MobiksaT1NYXRoLnNpbihuKSk7bGV0IGE9dGhpcy5jZW50ZXI7a1YoSVYuc2V0KC0uNSwtLjUsMCksTzMsYSxEMyxpLG8pLGtWKE9QLnNldCguNSwtLjUsMCksTzMsYSxEMyxpLG8pLGtWKExWLnNldCguNSwuNSwwKSxPMyxhLEQzLGksbyksWXVlLnNldCgwLDApLG11dC5zZXQoMSwwKSxqdWUuc2V0KDEsMSk7bGV0IHM9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoSVYsT1AsTFYsITEsTlApO2lmKHM9PT1udWxsJiYoa1YoT1Auc2V0KC0uNSwuNSwwKSxPMyxhLEQzLGksbyksbXV0LnNldCgwLDEpLHM9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoSVYsTFYsT1AsITEsTlApLHM9PT1udWxsKSlyZXR1cm47bGV0IGw9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oTlApO2w8dC5uZWFyfHxsPnQuZmFyfHxyLnB1c2goe2Rpc3RhbmNlOmwscG9pbnQ6TlAuY2xvbmUoKSx1djphaS5nZXRVVihOUCxJVixPUCxMVixZdWUsbXV0LGp1ZSxuZXcgTHQpLGZhY2U6bnVsbCxvYmplY3Q6dGhpc30pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdC5jZW50ZXIhPT12b2lkIDAmJnRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzfX07b00ucHJvdG90eXBlLmlzU3ByaXRlPSEwO2Z1bmN0aW9uIGtWKGUsdCxyLG4saSxvKXt6My5zdWJWZWN0b3JzKGUscikuYWRkU2NhbGFyKC41KS5tdWx0aXBseShuKSxpIT09dm9pZCAwPyhEUC54PW8qejMueC1pKnozLnksRFAueT1pKnozLngrbyp6My55KTpEUC5jb3B5KHozKSxlLmNvcHkodCksZS54Kz1EUC54LGUueSs9RFAueSxlLmFwcGx5TWF0cml4NCgkZmUpfXZhciBSVj1uZXcgaixYdWU9bmV3IGosZ1U9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fY3VycmVudExldmVsPTAsdGhpcy50eXBlPSJMT0QiLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse2xldmVsczp7ZW51bWVyYWJsZTohMCx2YWx1ZTpbXX0saXNMT0Q6e3ZhbHVlOiEwfX0pLHRoaXMuYXV0b1VwZGF0ZT0hMH1jb3B5KHQpe3N1cGVyLmNvcHkodCwhMSk7bGV0IHI9dC5sZXZlbHM7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1yW25dO3RoaXMuYWRkTGV2ZWwoby5vYmplY3QuY2xvbmUoKSxvLmRpc3RhbmNlKX1yZXR1cm4gdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzfWFkZExldmVsKHQscj0wKXtyPU1hdGguYWJzKHIpO2xldCBuPXRoaXMubGV2ZWxzLGk7Zm9yKGk9MDtpPG4ubGVuZ3RoJiYhKHI8bltpXS5kaXN0YW5jZSk7aSsrKTtyZXR1cm4gbi5zcGxpY2UoaSwwLHtkaXN0YW5jZTpyLG9iamVjdDp0fSksdGhpcy5hZGQodCksdGhpc31nZXRDdXJyZW50TGV2ZWwoKXtyZXR1cm4gdGhpcy5fY3VycmVudExldmVsfWdldE9iamVjdEZvckRpc3RhbmNlKHQpe2xldCByPXRoaXMubGV2ZWxzO2lmKHIubGVuZ3RoPjApe2xldCBuLGk7Zm9yKG49MSxpPXIubGVuZ3RoO248aSYmISh0PHJbbl0uZGlzdGFuY2UpO24rKyk7cmV0dXJuIHJbbi0xXS5vYmplY3R9cmV0dXJuIG51bGx9cmF5Y2FzdCh0LHIpe2lmKHRoaXMubGV2ZWxzLmxlbmd0aD4wKXtSVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7bGV0IGk9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oUlYpO3RoaXMuZ2V0T2JqZWN0Rm9yRGlzdGFuY2UoaSkucmF5Y2FzdCh0LHIpfX11cGRhdGUodCl7bGV0IHI9dGhpcy5sZXZlbHM7aWYoci5sZW5ndGg+MSl7UlYuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLFh1ZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7bGV0IG49UlYuZGlzdGFuY2VUbyhYdWUpL3Quem9vbTtyWzBdLm9iamVjdC52aXNpYmxlPSEwO2xldCBpLG87Zm9yKGk9MSxvPXIubGVuZ3RoO2k8byYmbj49cltpXS5kaXN0YW5jZTtpKyspcltpLTFdLm9iamVjdC52aXNpYmxlPSExLHJbaV0ub2JqZWN0LnZpc2libGU9ITA7Zm9yKHRoaXMuX2N1cnJlbnRMZXZlbD1pLTE7aTxvO2krKylyW2ldLm9iamVjdC52aXNpYmxlPSExfX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3RoaXMuYXV0b1VwZGF0ZT09PSExJiYoci5vYmplY3QuYXV0b1VwZGF0ZT0hMSksci5vYmplY3QubGV2ZWxzPVtdO2xldCBuPXRoaXMubGV2ZWxzO2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aTxvO2krKyl7bGV0IGE9bltpXTtyLm9iamVjdC5sZXZlbHMucHVzaCh7b2JqZWN0OmEub2JqZWN0LnV1aWQsZGlzdGFuY2U6YS5kaXN0YW5jZX0pfXJldHVybiByfX0sJHVlPW5ldyBqLEt1ZT1uZXcgZW4sWnVlPW5ldyBlbixJZ3I9bmV3IGosSnVlPW5ldyBNZSxhTT1jbGFzcyBleHRlbmRzIGVpe2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlNraW5uZWRNZXNoIix0aGlzLmJpbmRNb2RlPSJhdHRhY2hlZCIsdGhpcy5iaW5kTWF0cml4PW5ldyBNZSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyBNZX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYmluZE1vZGU9dC5iaW5kTW9kZSx0aGlzLmJpbmRNYXRyaXguY29weSh0LmJpbmRNYXRyaXgpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0LmJpbmRNYXRyaXhJbnZlcnNlKSx0aGlzLnNrZWxldG9uPXQuc2tlbGV0b24sdGhpc31iaW5kKHQscil7dGhpcy5za2VsZXRvbj10LHI9PT12b2lkIDAmJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCkscj10aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmJpbmRNYXRyaXguY29weShyKSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkocikuaW52ZXJ0KCl9cG9zZSgpe3RoaXMuc2tlbGV0b24ucG9zZSgpfW5vcm1hbGl6ZVNraW5XZWlnaHRzKCl7bGV0IHQ9bmV3IGVuLHI9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGxldCBuPTAsaT1yLmNvdW50O248aTtuKyspe3QueD1yLmdldFgobiksdC55PXIuZ2V0WShuKSx0Lno9ci5nZXRaKG4pLHQudz1yLmdldFcobik7bGV0IG89MS90Lm1hbmhhdHRhbkxlbmd0aCgpO28hPT0xLzA/dC5tdWx0aXBseVNjYWxhcihvKTp0LnNldCgxLDAsMCwwKSxyLnNldFhZWlcobix0LngsdC55LHQueix0LncpfX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmJpbmRNb2RlPT09ImF0dGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk6dGhpcy5iaW5kTW9kZT09PSJkZXRhY2hlZCI/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuYmluZE1hdHJpeCkuaW52ZXJ0KCk6Y29uc29sZS53YXJuKCJUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAiK3RoaXMuYmluZE1vZGUpfWJvbmVUcmFuc2Zvcm0odCxyKXtsZXQgbj10aGlzLnNrZWxldG9uLGk9dGhpcy5nZW9tZXRyeTtLdWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLmF0dHJpYnV0ZXMuc2tpbkluZGV4LHQpLFp1ZS5mcm9tQnVmZmVyQXR0cmlidXRlKGkuYXR0cmlidXRlcy5za2luV2VpZ2h0LHQpLCR1ZS5jb3B5KHIpLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXgpLHIuc2V0KDAsMCwwKTtmb3IobGV0IG89MDtvPDQ7bysrKXtsZXQgYT1adWUuZ2V0Q29tcG9uZW50KG8pO2lmKGEhPT0wKXtsZXQgcz1LdWUuZ2V0Q29tcG9uZW50KG8pO0p1ZS5tdWx0aXBseU1hdHJpY2VzKG4uYm9uZXNbc10ubWF0cml4V29ybGQsbi5ib25lSW52ZXJzZXNbc10pLHIuYWRkU2NhbGVkVmVjdG9yKElnci5jb3B5KCR1ZSkuYXBwbHlNYXRyaXg0KEp1ZSksYSl9fXJldHVybiByLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXhJbnZlcnNlKX19O2FNLnByb3RvdHlwZS5pc1NraW5uZWRNZXNoPSEwO3ZhciBzTT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX07c00ucHJvdG90eXBlLmlzQm9uZT0hMDt2YXIgSmQ9Y2xhc3MgZXh0ZW5kcyB4aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpLG8sYSxzLGwsYz1MaSx1PUxpLGgsZil7c3VwZXIobnVsbCxhLHMsbCxjLHUsaSxvLGgsZiksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOnIsaGVpZ2h0Om59LHRoaXMubWFnRmlsdGVyPWMsdGhpcy5taW5GaWx0ZXI9dSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtKZC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDt2YXIgUXVlPW5ldyBNZSxMZ3I9bmV3IE1lLGxNPWNsYXNze2NvbnN0cnVjdG9yKHQ9W10scj1bXSl7dGhpcy51dWlkPU5sKCksdGhpcy5ib25lcz10LnNsaWNlKDApLHRoaXMuYm9uZUludmVyc2VzPXIsdGhpcy5ib25lTWF0cmljZXM9bnVsbCx0aGlzLmJvbmVUZXh0dXJlPW51bGwsdGhpcy5ib25lVGV4dHVyZVNpemU9MCx0aGlzLmZyYW1lPS0xLHRoaXMuaW5pdCgpfWluaXQoKXtsZXQgdD10aGlzLmJvbmVzLHI9dGhpcy5ib25lSW52ZXJzZXM7aWYodGhpcy5ib25lTWF0cmljZXM9bmV3IEZsb2F0MzJBcnJheSh0Lmxlbmd0aCoxNiksci5sZW5ndGg9PT0wKXRoaXMuY2FsY3VsYXRlSW52ZXJzZXMoKTtlbHNlIGlmKHQubGVuZ3RoIT09ci5sZW5ndGgpe2NvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b246IE51bWJlciBvZiBpbnZlcnNlIGJvbmUgbWF0cmljZXMgZG9lcyBub3QgbWF0Y2ggYW1vdW50IG9mIGJvbmVzLiIpLHRoaXMuYm9uZUludmVyc2VzPVtdO2ZvcihsZXQgbj0wLGk9dGhpcy5ib25lcy5sZW5ndGg7bjxpO24rKyl0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKG5ldyBNZSl9fWNhbGN1bGF0ZUludmVyc2VzKCl7dGhpcy5ib25lSW52ZXJzZXMubGVuZ3RoPTA7Zm9yKGxldCB0PTAscj10aGlzLmJvbmVzLmxlbmd0aDt0PHI7dCsrKXtsZXQgbj1uZXcgTWU7dGhpcy5ib25lc1t0XSYmbi5jb3B5KHRoaXMuYm9uZXNbdF0ubWF0cml4V29ybGQpLmludmVydCgpLHRoaXMuYm9uZUludmVyc2VzLnB1c2gobil9fXBvc2UoKXtmb3IobGV0IHQ9MCxyPXRoaXMuYm9uZXMubGVuZ3RoO3Q8cjt0Kyspe2xldCBuPXRoaXMuYm9uZXNbdF07biYmbi5tYXRyaXhXb3JsZC5jb3B5KHRoaXMuYm9uZUludmVyc2VzW3RdKS5pbnZlcnQoKX1mb3IobGV0IHQ9MCxyPXRoaXMuYm9uZXMubGVuZ3RoO3Q8cjt0Kyspe2xldCBuPXRoaXMuYm9uZXNbdF07biYmKG4ucGFyZW50JiZuLnBhcmVudC5pc0JvbmU/KG4ubWF0cml4LmNvcHkobi5wYXJlbnQubWF0cml4V29ybGQpLmludmVydCgpLG4ubWF0cml4Lm11bHRpcGx5KG4ubWF0cml4V29ybGQpKTpuLm1hdHJpeC5jb3B5KG4ubWF0cml4V29ybGQpLG4ubWF0cml4LmRlY29tcG9zZShuLnBvc2l0aW9uLG4ucXVhdGVybmlvbixuLnNjYWxlKSl9fXVwZGF0ZSgpe2xldCB0PXRoaXMuYm9uZXMscj10aGlzLmJvbmVJbnZlcnNlcyxuPXRoaXMuYm9uZU1hdHJpY2VzLGk9dGhpcy5ib25lVGV4dHVyZTtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspe2xldCBzPXRbb10/dFtvXS5tYXRyaXhXb3JsZDpMZ3I7UXVlLm11bHRpcGx5TWF0cmljZXMocyxyW29dKSxRdWUudG9BcnJheShuLG8qMTYpfWkhPT1udWxsJiYoaS5uZWVkc1VwZGF0ZT0hMCl9Y2xvbmUoKXtyZXR1cm4gbmV3IGxNKHRoaXMuYm9uZXMsdGhpcy5ib25lSW52ZXJzZXMpfWNvbXB1dGVCb25lVGV4dHVyZSgpe2xldCB0PU1hdGguc3FydCh0aGlzLmJvbmVzLmxlbmd0aCo0KTt0PWtmZSh0KSx0PU1hdGgubWF4KHQsNCk7bGV0IHI9bmV3IEZsb2F0MzJBcnJheSh0KnQqNCk7ci5zZXQodGhpcy5ib25lTWF0cmljZXMpO2xldCBuPW5ldyBKZChyLHQsdCxRbyxqZCk7cmV0dXJuIG4ubmVlZHNVcGRhdGU9ITAsdGhpcy5ib25lTWF0cmljZXM9cix0aGlzLmJvbmVUZXh0dXJlPW4sdGhpcy5ib25lVGV4dHVyZVNpemU9dCx0aGlzfWdldEJvbmVCeU5hbWUodCl7Zm9yKGxldCByPTAsbj10aGlzLmJvbmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmJvbmVzW3JdO2lmKGkubmFtZT09PXQpcmV0dXJuIGl9fWRpc3Bvc2UoKXt0aGlzLmJvbmVUZXh0dXJlIT09bnVsbCYmKHRoaXMuYm9uZVRleHR1cmUuZGlzcG9zZSgpLHRoaXMuYm9uZVRleHR1cmU9bnVsbCl9ZnJvbUpTT04odCxyKXt0aGlzLnV1aWQ9dC51dWlkO2ZvcihsZXQgbj0wLGk9dC5ib25lcy5sZW5ndGg7bjxpO24rKyl7bGV0IG89dC5ib25lc1tuXSxhPXJbb107YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b246IE5vIGJvbmUgZm91bmQgd2l0aCBVVUlEOiIsbyksYT1uZXcgc00pLHRoaXMuYm9uZXMucHVzaChhKSx0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKG5ldyBNZSgpLmZyb21BcnJheSh0LmJvbmVJbnZlcnNlc1tuXSkpfXJldHVybiB0aGlzLmluaXQoKSx0aGlzfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiU2tlbGV0b24iLGdlbmVyYXRvcjoiU2tlbGV0b24udG9KU09OIn0sYm9uZXM6W10sYm9uZUludmVyc2VzOltdfTt0LnV1aWQ9dGhpcy51dWlkO2xldCByPXRoaXMuYm9uZXMsbj10aGlzLmJvbmVJbnZlcnNlcztmb3IobGV0IGk9MCxvPXIubGVuZ3RoO2k8bztpKyspe2xldCBhPXJbaV07dC5ib25lcy5wdXNoKGEudXVpZCk7bGV0IHM9bltpXTt0LmJvbmVJbnZlcnNlcy5wdXNoKHMudG9BcnJheSgpKX1yZXR1cm4gdH19LHJtPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4saT0xKXt0eXBlb2Ygbj09Im51bWJlciImJihpPW4sbj0hMSxjb25zb2xlLmVycm9yKCJUSFJFRS5JbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBub3JtYWxpemVkIGFzIHRoZSB0aGlyZCBhcmd1bWVudC4iKSksc3VwZXIodCxyLG4pLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0Lm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHQuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITAsdH19O3JtLnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgdGhlPW5ldyBNZSxlaGU9bmV3IE1lLE5WPVtdLHpQPW5ldyBlaSxuNj1jbGFzcyBleHRlbmRzIGVpe2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcih0LHIpLHRoaXMuaW5zdGFuY2VNYXRyaXg9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkobioxNiksMTYpLHRoaXMuaW5zdGFuY2VDb2xvcj1udWxsLHRoaXMuY291bnQ9bix0aGlzLmZydXN0dW1DdWxsZWQ9ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlTWF0cml4LmNvcHkodC5pbnN0YW5jZU1hdHJpeCksdC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj10Lmluc3RhbmNlQ29sb3IuY2xvbmUoKSksdGhpcy5jb3VudD10LmNvdW50LHRoaXN9Z2V0Q29sb3JBdCh0LHIpe3IuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSx0KjMpfWdldE1hdHJpeEF0KHQscil7ci5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX1yYXljYXN0KHQscil7bGV0IG49dGhpcy5tYXRyaXhXb3JsZCxpPXRoaXMuY291bnQ7aWYoelAuZ2VvbWV0cnk9dGhpcy5nZW9tZXRyeSx6UC5tYXRlcmlhbD10aGlzLm1hdGVyaWFsLHpQLm1hdGVyaWFsIT09dm9pZCAwKWZvcihsZXQgbz0wO288aTtvKyspe3RoaXMuZ2V0TWF0cml4QXQobyx0aGUpLGVoZS5tdWx0aXBseU1hdHJpY2VzKG4sdGhlKSx6UC5tYXRyaXhXb3JsZD1laGUselAucmF5Y2FzdCh0LE5WKTtmb3IobGV0IGE9MCxzPU5WLmxlbmd0aDthPHM7YSsrKXtsZXQgbD1OVlthXTtsLmluc3RhbmNlSWQ9byxsLm9iamVjdD10aGlzLHIucHVzaChsKX1OVi5sZW5ndGg9MH19c2V0Q29sb3JBdCh0LHIpe3RoaXMuaW5zdGFuY2VDb2xvcj09PW51bGwmJih0aGlzLmluc3RhbmNlQ29sb3I9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5jb3VudCozKSwzKSksci50b0FycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSx0KjMpfXNldE1hdHJpeEF0KHQscil7ci50b0FycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksdCoxNil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7fWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtuNi5wcm90b3R5cGUuaXNJbnN0YW5jZWRNZXNoPSEwO3ZhciBHaT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubGluZXdpZHRoPTEsdGhpcy5saW5lY2FwPSJyb3VuZCIsdGhpcy5saW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubGluZXdpZHRoPXQubGluZXdpZHRoLHRoaXMubGluZWNhcD10LmxpbmVjYXAsdGhpcy5saW5lam9pbj10LmxpbmVqb2luLHRoaXN9fTtHaS5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDt2YXIgcmhlPW5ldyBqLG5oZT1uZXcgaixpaGU9bmV3IE1lLGd1dD1uZXcgSmYsRFY9bmV3IFpmLGNoPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodD1uZXcgUGUscj1uZXcgR2kpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1yLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZih0LmluZGV4PT09bnVsbCl7bGV0IHI9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLG49WzBdO2ZvcihsZXQgaT0xLG89ci5jb3VudDtpPG87aSsrKXJoZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaS0xKSxuaGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGkpLG5baV09bltpLTFdLG5baV0rPXJoZS5kaXN0YW5jZVRvKG5oZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IHhlKG4sMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9cmF5Y2FzdCh0LHIpe2xldCBuPXRoaXMuZ2VvbWV0cnksaT10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuTGluZS50aHJlc2hvbGQsYT1uLmRyYXdSYW5nZTtpZihuLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxEVi5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLERWLmFwcGx5TWF0cml4NChpKSxEVi5yYWRpdXMrPW8sdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShEVik9PT0hMSlyZXR1cm47aWhlLmNvcHkoaSkuaW52ZXJ0KCksZ3V0LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChpaGUpO2xldCBzPW8vKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1zKnMsYz1uZXcgaix1PW5ldyBqLGg9bmV3IGosZj1uZXcgaixwPXRoaXMuaXNMaW5lU2VnbWVudHM/MjoxO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGQ9bi5pbmRleCxfPW4uYXR0cmlidXRlcy5wb3NpdGlvbjtpZihkIT09bnVsbCl7bGV0IHk9TWF0aC5tYXgoMCxhLnN0YXJ0KSx4PU1hdGgubWluKGQuY291bnQsYS5zdGFydCthLmNvdW50KTtmb3IobGV0IGI9eSxTPXgtMTtiPFM7Yis9cCl7bGV0IEM9ZC5nZXRYKGIpLFA9ZC5nZXRYKGIrMSk7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKF8sQyksdS5mcm9tQnVmZmVyQXR0cmlidXRlKF8sUCksZ3V0LmRpc3RhbmNlU3FUb1NlZ21lbnQoYyx1LGYsaCk+bCljb250aW51ZTtmLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtsZXQgTz10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhmKTtPPHQubmVhcnx8Tz50LmZhcnx8ci5wdXNoKHtkaXN0YW5jZTpPLHBvaW50OmguY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6YixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19ZWxzZXtsZXQgeT1NYXRoLm1heCgwLGEuc3RhcnQpLHg9TWF0aC5taW4oXy5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgYj15LFM9eC0xO2I8UztiKz1wKXtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxiKSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxiKzEpLGd1dC5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxmLGgpPmwpY29udGludWU7Zi5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IFA9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oZik7UDx0Lm5lYXJ8fFA+dC5mYXJ8fHIucHVzaCh7ZGlzdGFuY2U6UCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmIsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSl9fX1lbHNlIG4uaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHI9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhyKTtpZihuLmxlbmd0aD4wKXtsZXQgaT1yW25bMF1dO2lmKGkhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7bGV0IHM9aVtvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IHI9dC5tb3JwaFRhcmdldHM7ciE9PXZvaWQgMCYmci5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtjaC5wcm90b3R5cGUuaXNMaW5lPSEwO3ZhciBvaGU9bmV3IGosYWhlPW5ldyBqLEFhPWNsYXNzIGV4dGVuZHMgY2h7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iTGluZVNlZ21lbnRzIn1jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKHQuaW5kZXg9PT1udWxsKXtsZXQgcj10LmF0dHJpYnV0ZXMucG9zaXRpb24sbj1bXTtmb3IobGV0IGk9MCxvPXIuY291bnQ7aTxvO2krPTIpb2hlLmZyb21CdWZmZXJBdHRyaWJ1dGUocixpKSxhaGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGkrMSksbltpXT1pPT09MD8wOm5baS0xXSxuW2krMV09bltpXStvaGUuZGlzdGFuY2VUbyhhaGUpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyB4ZShuLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc319O0FhLnByb3RvdHlwZS5pc0xpbmVTZWdtZW50cz0hMDt2YXIgaTY9Y2xhc3MgZXh0ZW5kcyBjaHtjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKHQsciksdGhpcy50eXBlPSJMaW5lTG9vcCJ9fTtpNi5wcm90b3R5cGUuaXNMaW5lTG9vcD0hMDt2YXIgbm09Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnNpemU9MSx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07bm0ucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITA7dmFyIHNoZT1uZXcgTWUsbmh0PW5ldyBKZixPVj1uZXcgWmYselY9bmV3IGosaW09Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBubSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50cyIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9cix0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXJheWNhc3QodCxyKXtsZXQgbj10aGlzLmdlb21ldHJ5LGk9dGhpcy5tYXRyaXhXb3JsZCxvPXQucGFyYW1zLlBvaW50cy50aHJlc2hvbGQsYT1uLmRyYXdSYW5nZTtpZihuLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxPVi5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLE9WLmFwcGx5TWF0cml4NChpKSxPVi5yYWRpdXMrPW8sdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShPVik9PT0hMSlyZXR1cm47c2hlLmNvcHkoaSkuaW52ZXJ0KCksbmh0LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChzaGUpO2xldCBzPW8vKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1zKnM7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgYz1uLmluZGV4LGg9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKGMhPT1udWxsKXtsZXQgZj1NYXRoLm1heCgwLGEuc3RhcnQpLHA9TWF0aC5taW4oYy5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgZD1mLGc9cDtkPGc7ZCsrKXtsZXQgXz1jLmdldFgoZCk7elYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShoLF8pLGxoZSh6VixfLGwsaSx0LHIsdGhpcyl9fWVsc2V7bGV0IGY9TWF0aC5tYXgoMCxhLnN0YXJ0KSxwPU1hdGgubWluKGguY291bnQsYS5zdGFydCthLmNvdW50KTtmb3IobGV0IGQ9ZixnPXA7ZDxnO2QrKyl6Vi5mcm9tQnVmZmVyQXR0cmlidXRlKGgsZCksbGhlKHpWLGQsbCxpLHQscix0aGlzKX19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCByPXQubW9ycGhBdHRyaWJ1dGVzLG49T2JqZWN0LmtleXMocik7aWYobi5sZW5ndGg+MCl7bGV0IGk9cltuWzBdXTtpZihpIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspe2xldCBzPWlbb10ubmFtZXx8U3RyaW5nKG8pO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbc109b319fX1lbHNle2xldCByPXQubW9ycGhUYXJnZXRzO3IhPT12b2lkIDAmJnIubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtpbS5wcm90b3R5cGUuaXNQb2ludHM9ITA7ZnVuY3Rpb24gbGhlKGUsdCxyLG4saSxvLGEpe2xldCBzPW5odC5kaXN0YW5jZVNxVG9Qb2ludChlKTtpZihzPHIpe2xldCBsPW5ldyBqO25odC5jbG9zZXN0UG9pbnRUb1BvaW50KGUsbCksbC5hcHBseU1hdHJpeDQobik7bGV0IGM9aS5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCk7aWYoYzxpLm5lYXJ8fGM+aS5mYXIpcmV0dXJuO28ucHVzaCh7ZGlzdGFuY2U6YyxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChzKSxwb2ludDpsLGluZGV4OnQsZmFjZTpudWxsLG9iamVjdDphfSl9fXZhciBfVT1jbGFzcyBleHRlbmRzIHhpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjKXtzdXBlcih0LHIsbixpLG8sYSxzLGwsYyksdGhpcy5taW5GaWx0ZXI9YSE9PXZvaWQgMD9hOm9pLHRoaXMubWFnRmlsdGVyPW8hPT12b2lkIDA/bzpvaSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTtsZXQgdT10aGlzO2Z1bmN0aW9uIGgoKXt1Lm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX0icmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0JiZ0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soaCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5pbWFnZSkuY29weSh0aGlzKX11cGRhdGUoKXtsZXQgdD10aGlzLmltYWdlOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQ9PT0hMSYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fTtfVS5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmU9ITA7dmFyIHlVPWNsYXNzIGV4dGVuZHMgeGl7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHt3aWR0aDp0LGhlaWdodDpyfSksdGhpcy5mb3JtYXQ9bix0aGlzLm1hZ0ZpbHRlcj1MaSx0aGlzLm1pbkZpbHRlcj1MaSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07eVUucHJvdG90eXBlLmlzRnJhbWVidWZmZXJUZXh0dXJlPSEwO3ZhciBvNj1jbGFzcyBleHRlbmRzIHhpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUsaCxmKXtzdXBlcihudWxsLGEscyxsLGMsdSxpLG8saCxmKSx0aGlzLmltYWdlPXt3aWR0aDpyLGhlaWdodDpufSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07bzYucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITA7dmFyIHZVPWNsYXNzIGV4dGVuZHMgeGl7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMpe3N1cGVyKHQscixuLGksbyxhLHMsbCxjKSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07dlUucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDt2YXIgRnY9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj04LG49MCxpPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOnIsdGhldGFTdGFydDpuLHRoZXRhTGVuZ3RoOml9LHI9TWF0aC5tYXgoMyxyKTtsZXQgbz1bXSxhPVtdLHM9W10sbD1bXSxjPW5ldyBqLHU9bmV3IEx0O2EucHVzaCgwLDAsMCkscy5wdXNoKDAsMCwxKSxsLnB1c2goLjUsLjUpO2ZvcihsZXQgaD0wLGY9MztoPD1yO2grKyxmKz0zKXtsZXQgcD1uK2gvcippO2MueD10Kk1hdGguY29zKHApLGMueT10Kk1hdGguc2luKHApLGEucHVzaChjLngsYy55LGMueikscy5wdXNoKDAsMCwxKSx1Lng9KGFbZl0vdCsxKS8yLHUueT0oYVtmKzFdL3QrMSkvMixsLnB1c2godS54LHUueSl9Zm9yKGxldCBoPTE7aDw9cjtoKyspby5wdXNoKGgsaCsxLDApO3RoaXMuc2V0SW5kZXgobyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGwsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEZ2KHQucmFkaXVzLHQuc2VnbWVudHMsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sb209Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj0xLG49MSxpPTgsbz0xLGE9ITEscz0wLGw9TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iQ3lsaW5kZXJHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXNUb3A6dCxyYWRpdXNCb3R0b206cixoZWlnaHQ6bixyYWRpYWxTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOm8sb3BlbkVuZGVkOmEsdGhldGFTdGFydDpzLHRoZXRhTGVuZ3RoOmx9O2xldCBjPXRoaXM7aT1NYXRoLmZsb29yKGkpLG89TWF0aC5mbG9vcihvKTtsZXQgdT1bXSxoPVtdLGY9W10scD1bXSxkPTAsZz1bXSxfPW4vMix5PTA7eCgpLGE9PT0hMSYmKHQ+MCYmYighMCkscj4wJiZiKCExKSksdGhpcy5zZXRJbmRleCh1KSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShoLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZiwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUocCwyKSk7ZnVuY3Rpb24geCgpe2xldCBTPW5ldyBqLEM9bmV3IGosUD0wLGs9KHItdCkvbjtmb3IobGV0IE89MDtPPD1vO08rKyl7bGV0IEQ9W10sQj1PL28sST1CKihyLXQpK3Q7Zm9yKGxldCBMPTA7TDw9aTtMKyspe2xldCBSPUwvaSxGPVIqbCtzLHo9TWF0aC5zaW4oRiksVT1NYXRoLmNvcyhGKTtDLng9SSp6LEMueT0tQipuK18sQy56PUkqVSxoLnB1c2goQy54LEMueSxDLnopLFMuc2V0KHosayxVKS5ub3JtYWxpemUoKSxmLnB1c2goUy54LFMueSxTLnopLHAucHVzaChSLDEtQiksRC5wdXNoKGQrKyl9Zy5wdXNoKEQpfWZvcihsZXQgTz0wO088aTtPKyspZm9yKGxldCBEPTA7RDxvO0QrKyl7bGV0IEI9Z1tEXVtPXSxJPWdbRCsxXVtPXSxMPWdbRCsxXVtPKzFdLFI9Z1tEXVtPKzFdO3UucHVzaChCLEksUiksdS5wdXNoKEksTCxSKSxQKz02fWMuYWRkR3JvdXAoeSxQLDApLHkrPVB9ZnVuY3Rpb24gYihTKXtsZXQgQz1kLFA9bmV3IEx0LGs9bmV3IGosTz0wLEQ9Uz09PSEwP3Q6cixCPVM9PT0hMD8xOi0xO2ZvcihsZXQgTD0xO0w8PWk7TCsrKWgucHVzaCgwLF8qQiwwKSxmLnB1c2goMCxCLDApLHAucHVzaCguNSwuNSksZCsrO2xldCBJPWQ7Zm9yKGxldCBMPTA7TDw9aTtMKyspe2xldCBGPUwvaSpsK3Msej1NYXRoLmNvcyhGKSxVPU1hdGguc2luKEYpO2sueD1EKlUsay55PV8qQixrLno9RCp6LGgucHVzaChrLngsay55LGsueiksZi5wdXNoKDAsQiwwKSxQLng9eiouNSsuNSxQLnk9VSouNSpCKy41LHAucHVzaChQLngsUC55KSxkKyt9Zm9yKGxldCBMPTA7TDxpO0wrKyl7bGV0IFI9QytMLEY9SStMO1M9PT0hMD91LnB1c2goRixGKzEsUik6dS5wdXNoKEYrMSxGLFIpLE8rPTN9Yy5hZGRHcm91cCh5LE8sUz09PSEwPzE6MikseSs9T319c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgb20odC5yYWRpdXNUb3AsdC5yYWRpdXNCb3R0b20sdC5oZWlnaHQsdC5yYWRpYWxTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQub3BlbkVuZGVkLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LEJ2PWNsYXNzIGV4dGVuZHMgb217Y29uc3RydWN0b3IodD0xLHI9MSxuPTgsaT0xLG89ITEsYT0wLHM9TWF0aC5QSSoyKXtzdXBlcigwLHQscixuLGksbyxhLHMpLHRoaXMudHlwZT0iQ29uZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGhlaWdodDpyLHJhZGlhbFNlZ21lbnRzOm4saGVpZ2h0U2VnbWVudHM6aSxvcGVuRW5kZWQ6byx0aGV0YVN0YXJ0OmEsdGhldGFMZW5ndGg6c319c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgQnYodC5yYWRpdXMsdC5oZWlnaHQsdC5yYWRpYWxTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQub3BlbkVuZGVkLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LHVoPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1bXSxyPVtdLG49MSxpPTApe3N1cGVyKCksdGhpcy50eXBlPSJQb2x5aGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17dmVydGljZXM6dCxpbmRpY2VzOnIscmFkaXVzOm4sZGV0YWlsOml9O2xldCBvPVtdLGE9W107cyhpKSxjKG4pLHUoKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoby5zbGljZSgpLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShhLDIpKSxpPT09MD90aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk6dGhpcy5ub3JtYWxpemVOb3JtYWxzKCk7ZnVuY3Rpb24gcyh4KXtsZXQgYj1uZXcgaixTPW5ldyBqLEM9bmV3IGo7Zm9yKGxldCBQPTA7UDxyLmxlbmd0aDtQKz0zKXAocltQKzBdLGIpLHAocltQKzFdLFMpLHAocltQKzJdLEMpLGwoYixTLEMseCl9ZnVuY3Rpb24gbCh4LGIsUyxDKXtsZXQgUD1DKzEsaz1bXTtmb3IobGV0IE89MDtPPD1QO08rKyl7a1tPXT1bXTtsZXQgRD14LmNsb25lKCkubGVycChTLE8vUCksQj1iLmNsb25lKCkubGVycChTLE8vUCksST1QLU87Zm9yKGxldCBMPTA7TDw9STtMKyspTD09PTAmJk89PT1QP2tbT11bTF09RDprW09dW0xdPUQuY2xvbmUoKS5sZXJwKEIsTC9JKX1mb3IobGV0IE89MDtPPFA7TysrKWZvcihsZXQgRD0wO0Q8MiooUC1PKS0xO0QrKyl7bGV0IEI9TWF0aC5mbG9vcihELzIpO0QlMj09PTA/KGYoa1tPXVtCKzFdKSxmKGtbTysxXVtCXSksZihrW09dW0JdKSk6KGYoa1tPXVtCKzFdKSxmKGtbTysxXVtCKzFdKSxmKGtbTysxXVtCXSkpfX1mdW5jdGlvbiBjKHgpe2xldCBiPW5ldyBqO2ZvcihsZXQgUz0wO1M8by5sZW5ndGg7Uys9MyliLng9b1tTKzBdLGIueT1vW1MrMV0sYi56PW9bUysyXSxiLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHgpLG9bUyswXT1iLngsb1tTKzFdPWIueSxvW1MrMl09Yi56fWZ1bmN0aW9uIHUoKXtsZXQgeD1uZXcgajtmb3IobGV0IGI9MDtiPG8ubGVuZ3RoO2IrPTMpe3gueD1vW2IrMF0seC55PW9bYisxXSx4Lno9b1tiKzJdO2xldCBTPV8oeCkvMi9NYXRoLlBJKy41LEM9eSh4KS9NYXRoLlBJKy41O2EucHVzaChTLDEtQyl9ZCgpLGgoKX1mdW5jdGlvbiBoKCl7Zm9yKGxldCB4PTA7eDxhLmxlbmd0aDt4Kz02KXtsZXQgYj1hW3grMF0sUz1hW3grMl0sQz1hW3grNF0sUD1NYXRoLm1heChiLFMsQyksaz1NYXRoLm1pbihiLFMsQyk7UD4uOSYmazwuMSYmKGI8LjImJihhW3grMF0rPTEpLFM8LjImJihhW3grMl0rPTEpLEM8LjImJihhW3grNF0rPTEpKX19ZnVuY3Rpb24gZih4KXtvLnB1c2goeC54LHgueSx4LnopfWZ1bmN0aW9uIHAoeCxiKXtsZXQgUz14KjM7Yi54PXRbUyswXSxiLnk9dFtTKzFdLGIuej10W1MrMl19ZnVuY3Rpb24gZCgpe2xldCB4PW5ldyBqLGI9bmV3IGosUz1uZXcgaixDPW5ldyBqLFA9bmV3IEx0LGs9bmV3IEx0LE89bmV3IEx0O2ZvcihsZXQgRD0wLEI9MDtEPG8ubGVuZ3RoO0QrPTksQis9Nil7eC5zZXQob1tEKzBdLG9bRCsxXSxvW0QrMl0pLGIuc2V0KG9bRCszXSxvW0QrNF0sb1tEKzVdKSxTLnNldChvW0QrNl0sb1tEKzddLG9bRCs4XSksUC5zZXQoYVtCKzBdLGFbQisxXSksay5zZXQoYVtCKzJdLGFbQiszXSksTy5zZXQoYVtCKzRdLGFbQis1XSksQy5jb3B5KHgpLmFkZChiKS5hZGQoUykuZGl2aWRlU2NhbGFyKDMpO2xldCBJPV8oQyk7ZyhQLEIrMCx4LEkpLGcoayxCKzIsYixJKSxnKE8sQis0LFMsSSl9fWZ1bmN0aW9uIGcoeCxiLFMsQyl7QzwwJiZ4Lng9PT0xJiYoYVtiXT14LngtMSksUy54PT09MCYmUy56PT09MCYmKGFbYl09Qy8yL01hdGguUEkrLjUpfWZ1bmN0aW9uIF8oeCl7cmV0dXJuIE1hdGguYXRhbjIoeC56LC14LngpfWZ1bmN0aW9uIHkoeCl7cmV0dXJuIE1hdGguYXRhbjIoLXgueSxNYXRoLnNxcnQoeC54KngueCt4LnoqeC56KSl9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IHVoKHQudmVydGljZXMsdC5pbmRpY2VzLHQucmFkaXVzLHQuZGV0YWlscyl9fSxIdj1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPSgxK01hdGguc3FydCg1KSkvMixpPTEvbixvPVstMSwtMSwtMSwtMSwtMSwxLC0xLDEsLTEsLTEsMSwxLDEsLTEsLTEsMSwtMSwxLDEsMSwtMSwxLDEsMSwwLC1pLC1uLDAsLWksbiwwLGksLW4sMCxpLG4sLWksLW4sMCwtaSxuLDAsaSwtbiwwLGksbiwwLC1uLDAsLWksbiwwLC1pLC1uLDAsaSxuLDAsaV0sYT1bMywxMSw3LDMsNywxNSwzLDE1LDEzLDcsMTksMTcsNywxNyw2LDcsNiwxNSwxNyw0LDgsMTcsOCwxMCwxNywxMCw2LDgsMCwxNiw4LDE2LDIsOCwyLDEwLDAsMTIsMSwwLDEsMTgsMCwxOCwxNiw2LDEwLDIsNiwyLDEzLDYsMTMsMTUsMiwxNiwxOCwyLDE4LDMsMiwzLDEzLDE4LDEsOSwxOCw5LDExLDE4LDExLDMsNCwxNCwxMiw0LDEyLDAsNCwwLDgsMTEsOSw1LDExLDUsMTksMTEsMTksNywxOSw1LDE0LDE5LDE0LDQsMTksNCwxNywxLDEyLDE0LDEsMTQsNSwxLDUsOV07c3VwZXIobyxhLHQsciksdGhpcy50eXBlPSJEb2RlY2FoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgSHYodC5yYWRpdXMsdC5kZXRhaWwpfX0sRlY9bmV3IGosQlY9bmV3IGosX3V0PW5ldyBqLEhWPW5ldyBhaSxhNj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bnVsbCxyPTEpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJFZGdlc0dlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e2dlb21ldHJ5OnQsdGhyZXNob2xkQW5nbGU6cn0sdCE9PW51bGwpe2xldCBpPU1hdGgucG93KDEwLDQpLG89TWF0aC5jb3MoUHYqciksYT10LmdldEluZGV4KCkscz10LmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKSxsPWE/YS5jb3VudDpzLmNvdW50LGM9WzAsMCwwXSx1PVsiYSIsImIiLCJjIl0saD1uZXcgQXJyYXkoMyksZj17fSxwPVtdO2ZvcihsZXQgZD0wO2Q8bDtkKz0zKXthPyhjWzBdPWEuZ2V0WChkKSxjWzFdPWEuZ2V0WChkKzEpLGNbMl09YS5nZXRYKGQrMikpOihjWzBdPWQsY1sxXT1kKzEsY1syXT1kKzIpO2xldHthOmcsYjpfLGM6eX09SFY7aWYoZy5mcm9tQnVmZmVyQXR0cmlidXRlKHMsY1swXSksXy5mcm9tQnVmZmVyQXR0cmlidXRlKHMsY1sxXSkseS5mcm9tQnVmZmVyQXR0cmlidXRlKHMsY1syXSksSFYuZ2V0Tm9ybWFsKF91dCksaFswXT1gJHtNYXRoLnJvdW5kKGcueCppKX0sJHtNYXRoLnJvdW5kKGcueSppKX0sJHtNYXRoLnJvdW5kKGcueippKX1gLGhbMV09YCR7TWF0aC5yb3VuZChfLngqaSl9LCR7TWF0aC5yb3VuZChfLnkqaSl9LCR7TWF0aC5yb3VuZChfLnoqaSl9YCxoWzJdPWAke01hdGgucm91bmQoeS54KmkpfSwke01hdGgucm91bmQoeS55KmkpfSwke01hdGgucm91bmQoeS56KmkpfWAsIShoWzBdPT09aFsxXXx8aFsxXT09PWhbMl18fGhbMl09PT1oWzBdKSlmb3IobGV0IHg9MDt4PDM7eCsrKXtsZXQgYj0oeCsxKSUzLFM9aFt4XSxDPWhbYl0sUD1IVlt1W3hdXSxrPUhWW3VbYl1dLE89YCR7U31fJHtDfWAsRD1gJHtDfV8ke1N9YDtEIGluIGYmJmZbRF0/KF91dC5kb3QoZltEXS5ub3JtYWwpPD1vJiYocC5wdXNoKFAueCxQLnksUC56KSxwLnB1c2goay54LGsueSxrLnopKSxmW0RdPW51bGwpOk8gaW4gZnx8KGZbT109e2luZGV4MDpjW3hdLGluZGV4MTpjW2JdLG5vcm1hbDpfdXQuY2xvbmUoKX0pfX1mb3IobGV0IGQgaW4gZilpZihmW2RdKXtsZXR7aW5kZXgwOmcsaW5kZXgxOl99PWZbZF07RlYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGcpLEJWLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxfKSxwLnB1c2goRlYueCxGVi55LEZWLnopLHAucHVzaChCVi54LEJWLnksQlYueil9dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocCwzKSl9fX0sZnM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9IkN1cnZlIix0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDB9Z2V0UG9pbnQoKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLmdldFBvaW50KCkgbm90IGltcGxlbWVudGVkLiIpLG51bGx9Z2V0UG9pbnRBdCh0LHIpe2xldCBuPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0UG9pbnQobixyKX1nZXRQb2ludHModD01KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPD10O24rKylyLnB1c2godGhpcy5nZXRQb2ludChuL3QpKTtyZXR1cm4gcn1nZXRTcGFjZWRQb2ludHModD01KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPD10O24rKylyLnB1c2godGhpcy5nZXRQb2ludEF0KG4vdCkpO3JldHVybiByfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0TGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfWdldExlbmd0aHModD10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyl7aWYodGhpcy5jYWNoZUFyY0xlbmd0aHMmJnRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aD09PXQrMSYmIXRoaXMubmVlZHNVcGRhdGUpcmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzO3RoaXMubmVlZHNVcGRhdGU9ITE7bGV0IHI9W10sbixpPXRoaXMuZ2V0UG9pbnQoMCksbz0wO3IucHVzaCgwKTtmb3IobGV0IGE9MTthPD10O2ErKyluPXRoaXMuZ2V0UG9pbnQoYS90KSxvKz1uLmRpc3RhbmNlVG8oaSksci5wdXNoKG8pLGk9bjtyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM9cixyfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuZ2V0TGVuZ3RocygpfWdldFV0b1RtYXBwaW5nKHQscil7bGV0IG49dGhpcy5nZXRMZW5ndGhzKCksaT0wLG89bi5sZW5ndGgsYTtyP2E9cjphPXQqbltvLTFdO2xldCBzPTAsbD1vLTEsYztmb3IoO3M8PWw7KWlmKGk9TWF0aC5mbG9vcihzKyhsLXMpLzIpLGM9bltpXS1hLGM8MClzPWkrMTtlbHNlIGlmKGM+MClsPWktMTtlbHNle2w9aTticmVha31pZihpPWwsbltpXT09PWEpcmV0dXJuIGkvKG8tMSk7bGV0IHU9bltpXSxmPW5baSsxXS11LHA9KGEtdSkvZjtyZXR1cm4oaStwKS8oby0xKX1nZXRUYW5nZW50KHQscil7bGV0IGk9dC0xZS00LG89dCsxZS00O2k8MCYmKGk9MCksbz4xJiYobz0xKTtsZXQgYT10aGlzLmdldFBvaW50KGkpLHM9dGhpcy5nZXRQb2ludChvKSxsPXJ8fChhLmlzVmVjdG9yMj9uZXcgTHQ6bmV3IGopO3JldHVybiBsLmNvcHkocykuc3ViKGEpLm5vcm1hbGl6ZSgpLGx9Z2V0VGFuZ2VudEF0KHQscil7bGV0IG49dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KG4scil9Y29tcHV0ZUZyZW5ldEZyYW1lcyh0LHIpe2xldCBuPW5ldyBqLGk9W10sbz1bXSxhPVtdLHM9bmV3IGosbD1uZXcgTWU7Zm9yKGxldCBwPTA7cDw9dDtwKyspe2xldCBkPXAvdDtpW3BdPXRoaXMuZ2V0VGFuZ2VudEF0KGQsbmV3IGopfW9bMF09bmV3IGosYVswXT1uZXcgajtsZXQgYz1OdW1iZXIuTUFYX1ZBTFVFLHU9TWF0aC5hYnMoaVswXS54KSxoPU1hdGguYWJzKGlbMF0ueSksZj1NYXRoLmFicyhpWzBdLnopO3U8PWMmJihjPXUsbi5zZXQoMSwwLDApKSxoPD1jJiYoYz1oLG4uc2V0KDAsMSwwKSksZjw9YyYmbi5zZXQoMCwwLDEpLHMuY3Jvc3NWZWN0b3JzKGlbMF0sbikubm9ybWFsaXplKCksb1swXS5jcm9zc1ZlY3RvcnMoaVswXSxzKSxhWzBdLmNyb3NzVmVjdG9ycyhpWzBdLG9bMF0pO2ZvcihsZXQgcD0xO3A8PXQ7cCsrKXtpZihvW3BdPW9bcC0xXS5jbG9uZSgpLGFbcF09YVtwLTFdLmNsb25lKCkscy5jcm9zc1ZlY3RvcnMoaVtwLTFdLGlbcF0pLHMubGVuZ3RoKCk+TnVtYmVyLkVQU0lMT04pe3Mubm9ybWFsaXplKCk7bGV0IGQ9TWF0aC5hY29zKFpvKGlbcC0xXS5kb3QoaVtwXSksLTEsMSkpO29bcF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhzLGQpKX1hW3BdLmNyb3NzVmVjdG9ycyhpW3BdLG9bcF0pfWlmKHI9PT0hMCl7bGV0IHA9TWF0aC5hY29zKFpvKG9bMF0uZG90KG9bdF0pLC0xLDEpKTtwLz10LGlbMF0uZG90KHMuY3Jvc3NWZWN0b3JzKG9bMF0sb1t0XSkpPjAmJihwPS1wKTtmb3IobGV0IGQ9MTtkPD10O2QrKylvW2RdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMoaVtkXSxwKmQpKSxhW2RdLmNyb3NzVmVjdG9ycyhpW2RdLG9bZF0pfXJldHVybnt0YW5nZW50czppLG5vcm1hbHM6byxiaW5vcm1hbHM6YX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJDdXJ2ZSIsZ2VuZXJhdG9yOiJDdXJ2ZS50b0pTT04ifX07cmV0dXJuIHQuYXJjTGVuZ3RoRGl2aXNpb25zPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zLHQudHlwZT10aGlzLnR5cGUsdH1mcm9tSlNPTih0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc319LFZ2PWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD0wLHI9MCxuPTEsaT0xLG89MCxhPU1hdGguUEkqMixzPSExLGw9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IkVsbGlwc2VDdXJ2ZSIsdGhpcy5hWD10LHRoaXMuYVk9cix0aGlzLnhSYWRpdXM9bix0aGlzLnlSYWRpdXM9aSx0aGlzLmFTdGFydEFuZ2xlPW8sdGhpcy5hRW5kQW5nbGU9YSx0aGlzLmFDbG9ja3dpc2U9cyx0aGlzLmFSb3RhdGlvbj1sfWdldFBvaW50KHQscil7bGV0IG49cnx8bmV3IEx0LGk9TWF0aC5QSSoyLG89dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSxhPU1hdGguYWJzKG8pPE51bWJlci5FUFNJTE9OO2Zvcig7bzwwOylvKz1pO2Zvcig7bz5pOylvLT1pO288TnVtYmVyLkVQU0lMT04mJihhP289MDpvPWkpLHRoaXMuYUNsb2Nrd2lzZT09PSEwJiYhYSYmKG89PT1pP289LWk6bz1vLWkpO2xldCBzPXRoaXMuYVN0YXJ0QW5nbGUrdCpvLGw9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MocyksYz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihzKTtpZih0aGlzLmFSb3RhdGlvbiE9PTApe2xldCB1PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxoPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxmPWwtdGhpcy5hWCxwPWMtdGhpcy5hWTtsPWYqdS1wKmgrdGhpcy5hWCxjPWYqaCtwKnUrdGhpcy5hWX1yZXR1cm4gbi5zZXQobCxjKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9fTtWdi5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7dmFyIHM2PWNsYXNzIGV4dGVuZHMgVnZ7Y29uc3RydWN0b3IodCxyLG4saSxvLGEpe3N1cGVyKHQscixuLG4saSxvLGEpLHRoaXMudHlwZT0iQXJjQ3VydmUifX07czYucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7ZnVuY3Rpb24gT2h0KCl7bGV0IGU9MCx0PTAscj0wLG49MDtmdW5jdGlvbiBpKG8sYSxzLGwpe2U9byx0PXMscj0tMypvKzMqYS0yKnMtbCxuPTIqby0yKmErcytsfXJldHVybntpbml0Q2F0bXVsbFJvbTpmdW5jdGlvbihvLGEscyxsLGMpe2koYSxzLGMqKHMtbyksYyoobC1hKSl9LGluaXROb251bmlmb3JtQ2F0bXVsbFJvbTpmdW5jdGlvbihvLGEscyxsLGMsdSxoKXtsZXQgZj0oYS1vKS9jLShzLW8pLyhjK3UpKyhzLWEpL3UscD0ocy1hKS91LShsLWEpLyh1K2gpKyhsLXMpL2g7Zio9dSxwKj11LGkoYSxzLGYscCl9LGNhbGM6ZnVuY3Rpb24obyl7bGV0IGE9bypvLHM9YSpvO3JldHVybiBlK3QqbytyKmErbipzfX19dmFyIFZWPW5ldyBqLHl1dD1uZXcgT2h0LHZ1dD1uZXcgT2h0LHh1dD1uZXcgT2h0LGw2PWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1bXSxyPSExLG49ImNlbnRyaXBldGFsIixpPS41KXtzdXBlcigpLHRoaXMudHlwZT0iQ2F0bXVsbFJvbUN1cnZlMyIsdGhpcy5wb2ludHM9dCx0aGlzLmNsb3NlZD1yLHRoaXMuY3VydmVUeXBlPW4sdGhpcy50ZW5zaW9uPWl9Z2V0UG9pbnQodCxyPW5ldyBqKXtsZXQgbj1yLGk9dGhpcy5wb2ludHMsbz1pLmxlbmd0aCxhPShvLSh0aGlzLmNsb3NlZD8wOjEpKSp0LHM9TWF0aC5mbG9vcihhKSxsPWEtczt0aGlzLmNsb3NlZD9zKz1zPjA/MDooTWF0aC5mbG9vcihNYXRoLmFicyhzKS9vKSsxKSpvOmw9PT0wJiZzPT09by0xJiYocz1vLTIsbD0xKTtsZXQgYyx1O3RoaXMuY2xvc2VkfHxzPjA/Yz1pWyhzLTEpJW9dOihWVi5zdWJWZWN0b3JzKGlbMF0saVsxXSkuYWRkKGlbMF0pLGM9VlYpO2xldCBoPWlbcyVvXSxmPWlbKHMrMSklb107aWYodGhpcy5jbG9zZWR8fHMrMjxvP3U9aVsocysyKSVvXTooVlYuc3ViVmVjdG9ycyhpW28tMV0saVtvLTJdKS5hZGQoaVtvLTFdKSx1PVZWKSx0aGlzLmN1cnZlVHlwZT09PSJjZW50cmlwZXRhbCJ8fHRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiKXtsZXQgcD10aGlzLmN1cnZlVHlwZT09PSJjaG9yZGFsIj8uNTouMjUsZD1NYXRoLnBvdyhjLmRpc3RhbmNlVG9TcXVhcmVkKGgpLHApLGc9TWF0aC5wb3coaC5kaXN0YW5jZVRvU3F1YXJlZChmKSxwKSxfPU1hdGgucG93KGYuZGlzdGFuY2VUb1NxdWFyZWQodSkscCk7ZzwxZS00JiYoZz0xKSxkPDFlLTQmJihkPWcpLF88MWUtNCYmKF89ZykseXV0LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLngsaC54LGYueCx1LngsZCxnLF8pLHZ1dC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy55LGgueSxmLnksdS55LGQsZyxfKSx4dXQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueixoLnosZi56LHUueixkLGcsXyl9ZWxzZSB0aGlzLmN1cnZlVHlwZT09PSJjYXRtdWxscm9tIiYmKHl1dC5pbml0Q2F0bXVsbFJvbShjLngsaC54LGYueCx1LngsdGhpcy50ZW5zaW9uKSx2dXQuaW5pdENhdG11bGxSb20oYy55LGgueSxmLnksdS55LHRoaXMudGVuc2lvbikseHV0LmluaXRDYXRtdWxsUm9tKGMueixoLnosZi56LHUueix0aGlzLnRlbnNpb24pKTtyZXR1cm4gbi5zZXQoeXV0LmNhbGMobCksdnV0LmNhbGMobCkseHV0LmNhbGMobCkpLG59Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dC5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQucG9pbnRzW3JdO3RoaXMucG9pbnRzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dGhpcy5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMucG9pbnRzW3JdO3QucG9pbnRzLnB1c2goaS50b0FycmF5KCkpfXJldHVybiB0LmNsb3NlZD10aGlzLmNsb3NlZCx0LmN1cnZlVHlwZT10aGlzLmN1cnZlVHlwZSx0LnRlbnNpb249dGhpcy50ZW5zaW9uLHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChuZXcgaigpLmZyb21BcnJheShpKSl9cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc319O2w2LnByb3RvdHlwZS5pc0NhdG11bGxSb21DdXJ2ZTM9ITA7ZnVuY3Rpb24gY2hlKGUsdCxyLG4saSl7bGV0IG89KG4tdCkqLjUsYT0oaS1yKSouNSxzPWUqZSxsPWUqcztyZXR1cm4oMipyLTIqbitvK2EpKmwrKC0zKnIrMypuLTIqby1hKSpzK28qZStyfWZ1bmN0aW9uIGtncihlLHQpe2xldCByPTEtZTtyZXR1cm4gcipyKnR9ZnVuY3Rpb24gUmdyKGUsdCl7cmV0dXJuIDIqKDEtZSkqZSp0fWZ1bmN0aW9uIE5ncihlLHQpe3JldHVybiBlKmUqdH1mdW5jdGlvbiBxUChlLHQscixuKXtyZXR1cm4ga2dyKGUsdCkrUmdyKGUscikrTmdyKGUsbil9ZnVuY3Rpb24gRGdyKGUsdCl7bGV0IHI9MS1lO3JldHVybiByKnIqcip0fWZ1bmN0aW9uIE9ncihlLHQpe2xldCByPTEtZTtyZXR1cm4gMypyKnIqZSp0fWZ1bmN0aW9uIHpncihlLHQpe3JldHVybiAzKigxLWUpKmUqZSp0fWZ1bmN0aW9uIEZncihlLHQpe3JldHVybiBlKmUqZSp0fWZ1bmN0aW9uIEdQKGUsdCxyLG4saSl7cmV0dXJuIERncihlLHQpK09ncihlLHIpK3pncihlLG4pK0ZncihlLGkpfXZhciBjTT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKHQ9bmV3IEx0LHI9bmV3IEx0LG49bmV3IEx0LGk9bmV3IEx0KXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9cix0aGlzLnYyPW4sdGhpcy52Mz1pfWdldFBvaW50KHQscj1uZXcgTHQpe2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjIscz10aGlzLnYzO3JldHVybiBuLnNldChHUCh0LGkueCxvLngsYS54LHMueCksR1AodCxpLnksby55LGEueSxzLnkpKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O2NNLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmU9ITA7dmFyIGM2PWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGosaT1uZXcgail7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1yLHRoaXMudjI9bix0aGlzLnYzPWl9Z2V0UG9pbnQodCxyPW5ldyBqKXtsZXQgbj1yLGk9dGhpcy52MCxvPXRoaXMudjEsYT10aGlzLnYyLHM9dGhpcy52MztyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCxzLngpLEdQKHQsaS55LG8ueSxhLnkscy55KSxHUCh0LGkueixvLnosYS56LHMueikpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07YzYucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTM9ITA7dmFyIFV2PWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUiLHRoaXMudjE9dCx0aGlzLnYyPXJ9Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cjtyZXR1cm4gdD09PTE/bi5jb3B5KHRoaXMudjIpOihuLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLG4ubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxufWdldFBvaW50QXQodCxyKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LHIpfWdldFRhbmdlbnQodCxyKXtsZXQgbj1yfHxuZXcgTHQ7cmV0dXJuIG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSkubm9ybWFsaXplKCksbn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTtVdi5wcm90b3R5cGUuaXNMaW5lQ3VydmU9ITA7dmFyIHhVPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlMyIsdGhpcy5pc0xpbmVDdXJ2ZTM9ITAsdGhpcy52MT10LHRoaXMudjI9cn1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXI7cmV0dXJuIHQ9PT0xP24uY29weSh0aGlzLnYyKToobi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxuLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksbn1nZXRQb2ludEF0KHQscil7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxyKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fSx1TT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKHQ9bmV3IEx0LHI9bmV3IEx0LG49bmV3IEx0KXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1ufWdldFBvaW50KHQscj1uZXcgTHQpe2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjI7cmV0dXJuIG4uc2V0KHFQKHQsaS54LG8ueCxhLngpLHFQKHQsaS55LG8ueSxhLnkpKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O3VNLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlPSEwO3ZhciBoTT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKHQ9bmV3IGoscj1uZXcgaixuPW5ldyBqKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1yLHRoaXMudjI9bn1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjI7cmV0dXJuIG4uc2V0KHFQKHQsaS54LG8ueCxhLngpLHFQKHQsaS55LG8ueSxhLnkpLHFQKHQsaS56LG8ueixhLnopKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O2hNLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlMz0hMDt2YXIgZk09Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMudHlwZT0iU3BsaW5lQ3VydmUiLHRoaXMucG9pbnRzPXR9Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMucG9pbnRzLG89KGkubGVuZ3RoLTEpKnQsYT1NYXRoLmZsb29yKG8pLHM9by1hLGw9aVthPT09MD9hOmEtMV0sYz1pW2FdLHU9aVthPmkubGVuZ3RoLTI/aS5sZW5ndGgtMTphKzFdLGg9aVthPmkubGVuZ3RoLTM/aS5sZW5ndGgtMTphKzJdO3JldHVybiBuLnNldChjaGUocyxsLngsYy54LHUueCxoLngpLGNoZShzLGwueSxjLnksdS55LGgueSkpLG59Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dC5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQucG9pbnRzW3JdO3RoaXMucG9pbnRzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IHI9MCxuPXRoaXMucG9pbnRzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLnBvaW50c1tyXTt0LnBvaW50cy5wdXNoKGkudG9BcnJheSgpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IHI9MCxuPXQucG9pbnRzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LnBvaW50c1tyXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBMdCgpLmZyb21BcnJheShpKSl9cmV0dXJuIHRoaXN9fTtmTS5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDt2YXIgemh0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFyY0N1cnZlOnM2LENhdG11bGxSb21DdXJ2ZTM6bDYsQ3ViaWNCZXppZXJDdXJ2ZTpjTSxDdWJpY0JlemllckN1cnZlMzpjNixFbGxpcHNlQ3VydmU6VnYsTGluZUN1cnZlOlV2LExpbmVDdXJ2ZTM6eFUsUXVhZHJhdGljQmV6aWVyQ3VydmU6dU0sUXVhZHJhdGljQmV6aWVyQ3VydmUzOmhNLFNwbGluZUN1cnZlOmZNfSksYlU9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDdXJ2ZVBhdGgiLHRoaXMuY3VydmVzPVtdLHRoaXMuYXV0b0Nsb3NlPSExfWFkZCh0KXt0aGlzLmN1cnZlcy5wdXNoKHQpfWNsb3NlUGF0aCgpe2xldCB0PXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLHI9dGhpcy5jdXJ2ZXNbdGhpcy5jdXJ2ZXMubGVuZ3RoLTFdLmdldFBvaW50KDEpO3QuZXF1YWxzKHIpfHx0aGlzLmN1cnZlcy5wdXNoKG5ldyBVdihyLHQpKX1nZXRQb2ludCh0LHIpe2xldCBuPXQqdGhpcy5nZXRMZW5ndGgoKSxpPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCksbz0wO2Zvcig7bzxpLmxlbmd0aDspe2lmKGlbb10+PW4pe2xldCBhPWlbb10tbixzPXRoaXMuY3VydmVzW29dLGw9cy5nZXRMZW5ndGgoKSxjPWw9PT0wPzA6MS1hL2w7cmV0dXJuIHMuZ2V0UG9pbnRBdChjLHIpfW8rK31yZXR1cm4gbnVsbH1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldEN1cnZlTGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuY2FjaGVMZW5ndGhzPW51bGwsdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKX1nZXRDdXJ2ZUxlbmd0aHMoKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoPT09dGhpcy5jdXJ2ZXMubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlTGVuZ3RocztsZXQgdD1bXSxyPTA7Zm9yKGxldCBuPTAsaT10aGlzLmN1cnZlcy5sZW5ndGg7bjxpO24rKylyKz10aGlzLmN1cnZlc1tuXS5nZXRMZW5ndGgoKSx0LnB1c2gocik7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPXQsdH1nZXRTcGFjZWRQb2ludHModD00MCl7bGV0IHI9W107Zm9yKGxldCBuPTA7bjw9dDtuKyspci5wdXNoKHRoaXMuZ2V0UG9pbnQobi90KSk7cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZyLnB1c2goclswXSkscn1nZXRQb2ludHModD0xMil7bGV0IHI9W10sbjtmb3IobGV0IGk9MCxvPXRoaXMuY3VydmVzO2k8by5sZW5ndGg7aSsrKXtsZXQgYT1vW2ldLHM9YSYmYS5pc0VsbGlwc2VDdXJ2ZT90KjI6YSYmKGEuaXNMaW5lQ3VydmV8fGEuaXNMaW5lQ3VydmUzKT8xOmEmJmEuaXNTcGxpbmVDdXJ2ZT90KmEucG9pbnRzLmxlbmd0aDp0LGw9YS5nZXRQb2ludHMocyk7Zm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspe2xldCB1PWxbY107biYmbi5lcXVhbHModSl8fChyLnB1c2godSksbj11KX19cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZyLmxlbmd0aD4xJiYhcltyLmxlbmd0aC0xXS5lcXVhbHMoclswXSkmJnIucHVzaChyWzBdKSxyfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IHI9MCxuPXQuY3VydmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LmN1cnZlc1tyXTt0aGlzLmN1cnZlcy5wdXNoKGkuY2xvbmUoKSl9cmV0dXJuIHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5hdXRvQ2xvc2U9dGhpcy5hdXRvQ2xvc2UsdC5jdXJ2ZXM9W107Zm9yKGxldCByPTAsbj10aGlzLmN1cnZlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dGhpcy5jdXJ2ZXNbcl07dC5jdXJ2ZXMucHVzaChpLnRvSlNPTigpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLmF1dG9DbG9zZT10LmF1dG9DbG9zZSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IHI9MCxuPXQuY3VydmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LmN1cnZlc1tyXTt0aGlzLmN1cnZlcy5wdXNoKG5ldyB6aHRbaS50eXBlXSgpLmZyb21KU09OKGkpKX1yZXR1cm4gdGhpc319LHF2PWNsYXNzIGV4dGVuZHMgYlV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBhdGgiLHRoaXMuY3VycmVudFBvaW50PW5ldyBMdCx0JiZ0aGlzLnNldEZyb21Qb2ludHModCl9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1vdmVUbyh0WzBdLngsdFswXS55KTtmb3IobGV0IHI9MSxuPXQubGVuZ3RoO3I8bjtyKyspdGhpcy5saW5lVG8odFtyXS54LHRbcl0ueSk7cmV0dXJuIHRoaXN9bW92ZVRvKHQscil7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LnNldCh0LHIpLHRoaXN9bGluZVRvKHQscil7bGV0IG49bmV3IFV2KHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IEx0KHQscikpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKG4pLHRoaXMuY3VycmVudFBvaW50LnNldCh0LHIpLHRoaXN9cXVhZHJhdGljQ3VydmVUbyh0LHIsbixpKXtsZXQgbz1uZXcgdU0odGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgTHQodCxyKSxuZXcgTHQobixpKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobyksdGhpcy5jdXJyZW50UG9pbnQuc2V0KG4saSksdGhpc31iZXppZXJDdXJ2ZVRvKHQscixuLGksbyxhKXtsZXQgcz1uZXcgY00odGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgTHQodCxyKSxuZXcgTHQobixpKSxuZXcgTHQobyxhKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gocyksdGhpcy5jdXJyZW50UG9pbnQuc2V0KG8sYSksdGhpc31zcGxpbmVUaHJ1KHQpe2xldCByPVt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQodCksbj1uZXcgZk0ocik7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobiksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0W3QubGVuZ3RoLTFdKSx0aGlzfWFyYyh0LHIsbixpLG8sYSl7bGV0IHM9dGhpcy5jdXJyZW50UG9pbnQueCxsPXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzYXJjKHQrcyxyK2wsbixpLG8sYSksdGhpc31hYnNhcmModCxyLG4saSxvLGEpe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCxyLG4sbixpLG8sYSksdGhpc31lbGxpcHNlKHQscixuLGksbyxhLHMsbCl7bGV0IGM9dGhpcy5jdXJyZW50UG9pbnQueCx1PXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0K2Mscit1LG4saSxvLGEscyxsKSx0aGlzfWFic2VsbGlwc2UodCxyLG4saSxvLGEscyxsKXtsZXQgYz1uZXcgVnYodCxyLG4saSxvLGEscyxsKTtpZih0aGlzLmN1cnZlcy5sZW5ndGg+MCl7bGV0IGg9Yy5nZXRQb2ludCgwKTtoLmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKGgueCxoLnkpfXRoaXMuY3VydmVzLnB1c2goYyk7bGV0IHU9Yy5nZXRQb2ludCgxKTtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuY29weSh1KSx0aGlzfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0LmN1cnJlbnRQb2ludCksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5jdXJyZW50UG9pbnQ9dGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheSh0LmN1cnJlbnRQb2ludCksdGhpc319LEtjPWNsYXNzIGV4dGVuZHMgcXZ7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy51dWlkPU5sKCksdGhpcy50eXBlPSJTaGFwZSIsdGhpcy5ob2xlcz1bXX1nZXRQb2ludHNIb2xlcyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPXRoaXMuaG9sZXMubGVuZ3RoO248aTtuKyspcltuXT10aGlzLmhvbGVzW25dLmdldFBvaW50cyh0KTtyZXR1cm4gcn1leHRyYWN0UG9pbnRzKHQpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyh0KSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKHQpfX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5ob2xlcz1bXTtmb3IobGV0IHI9MCxuPXQuaG9sZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuaG9sZXNbcl07dGhpcy5ob2xlcy5wdXNoKGkuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC51dWlkPXRoaXMudXVpZCx0LmhvbGVzPVtdO2ZvcihsZXQgcj0wLG49dGhpcy5ob2xlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dGhpcy5ob2xlc1tyXTt0LmhvbGVzLnB1c2goaS50b0pTT04oKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy51dWlkPXQudXVpZCx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgcj0wLG49dC5ob2xlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5ob2xlc1tyXTt0aGlzLmhvbGVzLnB1c2gobmV3IHF2KCkuZnJvbUpTT04oaSkpfXJldHVybiB0aGlzfX0sQmdyPXt0cmlhbmd1bGF0ZTpmdW5jdGlvbihlLHQscj0yKXtsZXQgbj10JiZ0Lmxlbmd0aCxpPW4/dFswXSpyOmUubGVuZ3RoLG89S2ZlKGUsMCxpLHIsITApLGE9W107aWYoIW98fG8ubmV4dD09PW8ucHJldilyZXR1cm4gYTtsZXQgcyxsLGMsdSxoLGYscDtpZihuJiYobz1HZ3IoZSx0LG8scikpLGUubGVuZ3RoPjgwKnIpe3M9Yz1lWzBdLGw9dT1lWzFdO2ZvcihsZXQgZD1yO2Q8aTtkKz1yKWg9ZVtkXSxmPWVbZCsxXSxoPHMmJihzPWgpLGY8bCYmKGw9ZiksaD5jJiYoYz1oKSxmPnUmJih1PWYpO3A9TWF0aC5tYXgoYy1zLHUtbCkscD1wIT09MD8xL3A6MH1yZXR1cm4gdTYobyxhLHIscyxsLHApLGF9fTtmdW5jdGlvbiBLZmUoZSx0LHIsbixpKXtsZXQgbyxhO2lmKGk9PT1lMHIoZSx0LHIsbik+MClmb3Iobz10O288cjtvKz1uKWE9dWhlKG8sZVtvXSxlW28rMV0sYSk7ZWxzZSBmb3Iobz1yLW47bz49dDtvLT1uKWE9dWhlKG8sZVtvXSxlW28rMV0sYSk7cmV0dXJuIGEmJktVKGEsYS5uZXh0KSYmKGY2KGEpLGE9YS5uZXh0KSxhfWZ1bmN0aW9uIEcwKGUsdCl7aWYoIWUpcmV0dXJuIGU7dHx8KHQ9ZSk7bGV0IHI9ZSxuO2RvIGlmKG49ITEsIXIuc3RlaW5lciYmKEtVKHIsci5uZXh0KXx8c2koci5wcmV2LHIsci5uZXh0KT09PTApKXtpZihmNihyKSxyPXQ9ci5wcmV2LHI9PT1yLm5leHQpYnJlYWs7bj0hMH1lbHNlIHI9ci5uZXh0O3doaWxlKG58fHIhPT10KTtyZXR1cm4gdH1mdW5jdGlvbiB1NihlLHQscixuLGksbyxhKXtpZighZSlyZXR1cm47IWEmJm8mJiRncihlLG4saSxvKTtsZXQgcz1lLGwsYztmb3IoO2UucHJldiE9PWUubmV4dDspe2lmKGw9ZS5wcmV2LGM9ZS5uZXh0LG8/VmdyKGUsbixpLG8pOkhncihlKSl7dC5wdXNoKGwuaS9yKSx0LnB1c2goZS5pL3IpLHQucHVzaChjLmkvciksZjYoZSksZT1jLm5leHQscz1jLm5leHQ7Y29udGludWV9aWYoZT1jLGU9PT1zKXthP2E9PT0xPyhlPVVncihHMChlKSx0LHIpLHU2KGUsdCxyLG4saSxvLDIpKTphPT09MiYmcWdyKGUsdCxyLG4saSxvKTp1NihHMChlKSx0LHIsbixpLG8sMSk7YnJlYWt9fX1mdW5jdGlvbiBIZ3IoZSl7bGV0IHQ9ZS5wcmV2LHI9ZSxuPWUubmV4dDtpZihzaSh0LHIsbik+PTApcmV0dXJuITE7bGV0IGk9ZS5uZXh0Lm5leHQ7Zm9yKDtpIT09ZS5wcmV2Oyl7aWYoSDModC54LHQueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJnNpKGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gVmdyKGUsdCxyLG4pe2xldCBpPWUucHJldixvPWUsYT1lLm5leHQ7aWYoc2koaSxvLGEpPj0wKXJldHVybiExO2xldCBzPWkueDxvLng/aS54PGEueD9pLng6YS54Om8ueDxhLng/by54OmEueCxsPWkueTxvLnk/aS55PGEueT9pLnk6YS55Om8ueTxhLnk/by55OmEueSxjPWkueD5vLng/aS54PmEueD9pLng6YS54Om8ueD5hLng/by54OmEueCx1PWkueT5vLnk/aS55PmEueT9pLnk6YS55Om8ueT5hLnk/by55OmEueSxoPWlodChzLGwsdCxyLG4pLGY9aWh0KGMsdSx0LHIsbikscD1lLnByZXZaLGQ9ZS5uZXh0Wjtmb3IoO3AmJnAuej49aCYmZCYmZC56PD1mOyl7aWYocCE9PWUucHJldiYmcCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnkscC54LHAueSkmJnNpKHAucHJldixwLHAubmV4dCk+PTB8fChwPXAucHJldlosZCE9PWUucHJldiYmZCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnksZC54LGQueSkmJnNpKGQucHJldixkLGQubmV4dCk+PTApKXJldHVybiExO2Q9ZC5uZXh0Wn1mb3IoO3AmJnAuej49aDspe2lmKHAhPT1lLnByZXYmJnAhPT1lLm5leHQmJkgzKGkueCxpLnksby54LG8ueSxhLngsYS55LHAueCxwLnkpJiZzaShwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO3A9cC5wcmV2Wn1mb3IoO2QmJmQuejw9Zjspe2lmKGQhPT1lLnByZXYmJmQhPT1lLm5leHQmJkgzKGkueCxpLnksby54LG8ueSxhLngsYS55LGQueCxkLnkpJiZzaShkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBVZ3IoZSx0LHIpe2xldCBuPWU7ZG97bGV0IGk9bi5wcmV2LG89bi5uZXh0Lm5leHQ7IUtVKGksbykmJlpmZShpLG4sbi5uZXh0LG8pJiZoNihpLG8pJiZoNihvLGkpJiYodC5wdXNoKGkuaS9yKSx0LnB1c2gobi5pL3IpLHQucHVzaChvLmkvciksZjYobiksZjYobi5uZXh0KSxuPWU9byksbj1uLm5leHR9d2hpbGUobiE9PWUpO3JldHVybiBHMChuKX1mdW5jdGlvbiBxZ3IoZSx0LHIsbixpLG8pe2xldCBhPWU7ZG97bGV0IHM9YS5uZXh0Lm5leHQ7Zm9yKDtzIT09YS5wcmV2Oyl7aWYoYS5pIT09cy5pJiZKZ3IoYSxzKSl7bGV0IGw9SmZlKGEscyk7YT1HMChhLGEubmV4dCksbD1HMChsLGwubmV4dCksdTYoYSx0LHIsbixpLG8pLHU2KGwsdCxyLG4saSxvKTtyZXR1cm59cz1zLm5leHR9YT1hLm5leHR9d2hpbGUoYSE9PWUpfWZ1bmN0aW9uIEdncihlLHQscixuKXtsZXQgaT1bXSxvLGEscyxsLGM7Zm9yKG89MCxhPXQubGVuZ3RoO288YTtvKyspcz10W29dKm4sbD1vPGEtMT90W28rMV0qbjplLmxlbmd0aCxjPUtmZShlLHMsbCxuLCExKSxjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxpLnB1c2goWmdyKGMpKTtmb3IoaS5zb3J0KFdnciksbz0wO288aS5sZW5ndGg7bysrKVlncihpW29dLHIpLHI9RzAocixyLm5leHQpO3JldHVybiByfWZ1bmN0aW9uIFdncihlLHQpe3JldHVybiBlLngtdC54fWZ1bmN0aW9uIFlncihlLHQpe2lmKHQ9amdyKGUsdCksdCl7bGV0IHI9SmZlKHQsZSk7RzAodCx0Lm5leHQpLEcwKHIsci5uZXh0KX19ZnVuY3Rpb24gamdyKGUsdCl7bGV0IHI9dCxuPWUueCxpPWUueSxvPS0xLzAsYTtkb3tpZihpPD1yLnkmJmk+PXIubmV4dC55JiZyLm5leHQueSE9PXIueSl7bGV0IGY9ci54KyhpLXIueSkqKHIubmV4dC54LXIueCkvKHIubmV4dC55LXIueSk7aWYoZjw9biYmZj5vKXtpZihvPWYsZj09PW4pe2lmKGk9PT1yLnkpcmV0dXJuIHI7aWYoaT09PXIubmV4dC55KXJldHVybiByLm5leHR9YT1yLng8ci5uZXh0Lng/cjpyLm5leHR9fXI9ci5uZXh0fXdoaWxlKHIhPT10KTtpZighYSlyZXR1cm4gbnVsbDtpZihuPT09bylyZXR1cm4gYTtsZXQgcz1hLGw9YS54LGM9YS55LHU9MS8wLGg7cj1hO2RvIG4+PXIueCYmci54Pj1sJiZuIT09ci54JiZIMyhpPGM/bjpvLGksbCxjLGk8Yz9vOm4saSxyLngsci55KSYmKGg9TWF0aC5hYnMoaS1yLnkpLyhuLXIueCksaDYocixlKSYmKGg8dXx8aD09PXUmJihyLng+YS54fHxyLng9PT1hLngmJlhncihhLHIpKSkmJihhPXIsdT1oKSkscj1yLm5leHQ7d2hpbGUociE9PXMpO3JldHVybiBhfWZ1bmN0aW9uIFhncihlLHQpe3JldHVybiBzaShlLnByZXYsZSx0LnByZXYpPDAmJnNpKHQubmV4dCxlLGUubmV4dCk8MH1mdW5jdGlvbiAkZ3IoZSx0LHIsbil7bGV0IGk9ZTtkbyBpLno9PT1udWxsJiYoaS56PWlodChpLngsaS55LHQscixuKSksaS5wcmV2Wj1pLnByZXYsaS5uZXh0Wj1pLm5leHQsaT1pLm5leHQ7d2hpbGUoaSE9PWUpO2kucHJldloubmV4dFo9bnVsbCxpLnByZXZaPW51bGwsS2dyKGkpfWZ1bmN0aW9uIEtncihlKXtsZXQgdCxyLG4saSxvLGEscyxsLGM9MTtkb3tmb3Iocj1lLGU9bnVsbCxvPW51bGwsYT0wO3I7KXtmb3IoYSsrLG49cixzPTAsdD0wO3Q8YyYmKHMrKyxuPW4ubmV4dFosISFuKTt0KyspO2ZvcihsPWM7cz4wfHxsPjAmJm47KXMhPT0wJiYobD09PTB8fCFufHxyLno8PW4ueik/KGk9cixyPXIubmV4dFoscy0tKTooaT1uLG49bi5uZXh0WixsLS0pLG8/by5uZXh0Wj1pOmU9aSxpLnByZXZaPW8sbz1pO3I9bn1vLm5leHRaPW51bGwsYyo9Mn13aGlsZShhPjEpO3JldHVybiBlfWZ1bmN0aW9uIGlodChlLHQscixuLGkpe3JldHVybiBlPTMyNzY3KihlLXIpKmksdD0zMjc2NyoodC1uKSppLGU9KGV8ZTw8OCkmMTY3MTE5MzUsZT0oZXxlPDw0KSYyNTI2NDUxMzUsZT0oZXxlPDwyKSY4NTg5OTM0NTksZT0oZXxlPDwxKSYxNDMxNjU1NzY1LHQ9KHR8dDw8OCkmMTY3MTE5MzUsdD0odHx0PDw0KSYyNTI2NDUxMzUsdD0odHx0PDwyKSY4NTg5OTM0NTksdD0odHx0PDwxKSYxNDMxNjU1NzY1LGV8dDw8MX1mdW5jdGlvbiBaZ3IoZSl7bGV0IHQ9ZSxyPWU7ZG8odC54PHIueHx8dC54PT09ci54JiZ0Lnk8ci55KSYmKHI9dCksdD10Lm5leHQ7d2hpbGUodCE9PWUpO3JldHVybiByfWZ1bmN0aW9uIEgzKGUsdCxyLG4saSxvLGEscyl7cmV0dXJuKGktYSkqKHQtcyktKGUtYSkqKG8tcyk+PTAmJihlLWEpKihuLXMpLShyLWEpKih0LXMpPj0wJiYoci1hKSooby1zKS0oaS1hKSoobi1zKT49MH1mdW5jdGlvbiBKZ3IoZSx0KXtyZXR1cm4gZS5uZXh0LmkhPT10LmkmJmUucHJldi5pIT09dC5pJiYhUWdyKGUsdCkmJihoNihlLHQpJiZoNih0LGUpJiZ0MHIoZSx0KSYmKHNpKGUucHJldixlLHQucHJldil8fHNpKGUsdC5wcmV2LHQpKXx8S1UoZSx0KSYmc2koZS5wcmV2LGUsZS5uZXh0KT4wJiZzaSh0LnByZXYsdCx0Lm5leHQpPjApfWZ1bmN0aW9uIHNpKGUsdCxyKXtyZXR1cm4odC55LWUueSkqKHIueC10LngpLSh0LngtZS54KSooci55LXQueSl9ZnVuY3Rpb24gS1UoZSx0KXtyZXR1cm4gZS54PT09dC54JiZlLnk9PT10Lnl9ZnVuY3Rpb24gWmZlKGUsdCxyLG4pe2xldCBpPXFWKHNpKGUsdCxyKSksbz1xVihzaShlLHQsbikpLGE9cVYoc2kocixuLGUpKSxzPXFWKHNpKHIsbix0KSk7cmV0dXJuISEoaSE9PW8mJmEhPT1zfHxpPT09MCYmVVYoZSxyLHQpfHxvPT09MCYmVVYoZSxuLHQpfHxhPT09MCYmVVYocixlLG4pfHxzPT09MCYmVVYocix0LG4pKX1mdW5jdGlvbiBVVihlLHQscil7cmV0dXJuIHQueDw9TWF0aC5tYXgoZS54LHIueCkmJnQueD49TWF0aC5taW4oZS54LHIueCkmJnQueTw9TWF0aC5tYXgoZS55LHIueSkmJnQueT49TWF0aC5taW4oZS55LHIueSl9ZnVuY3Rpb24gcVYoZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfWZ1bmN0aW9uIFFncihlLHQpe2xldCByPWU7ZG97aWYoci5pIT09ZS5pJiZyLm5leHQuaSE9PWUuaSYmci5pIT09dC5pJiZyLm5leHQuaSE9PXQuaSYmWmZlKHIsci5uZXh0LGUsdCkpcmV0dXJuITA7cj1yLm5leHR9d2hpbGUociE9PWUpO3JldHVybiExfWZ1bmN0aW9uIGg2KGUsdCl7cmV0dXJuIHNpKGUucHJldixlLGUubmV4dCk8MD9zaShlLHQsZS5uZXh0KT49MCYmc2koZSxlLnByZXYsdCk+PTA6c2koZSx0LGUucHJldik8MHx8c2koZSxlLm5leHQsdCk8MH1mdW5jdGlvbiB0MHIoZSx0KXtsZXQgcj1lLG49ITEsaT0oZS54K3QueCkvMixvPShlLnkrdC55KS8yO2RvIHIueT5vIT1yLm5leHQueT5vJiZyLm5leHQueSE9PXIueSYmaTwoci5uZXh0Lngtci54KSooby1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0O3doaWxlKHIhPT1lKTtyZXR1cm4gbn1mdW5jdGlvbiBKZmUoZSx0KXtsZXQgcj1uZXcgb2h0KGUuaSxlLngsZS55KSxuPW5ldyBvaHQodC5pLHQueCx0LnkpLGk9ZS5uZXh0LG89dC5wcmV2O3JldHVybiBlLm5leHQ9dCx0LnByZXY9ZSxyLm5leHQ9aSxpLnByZXY9cixuLm5leHQ9cixyLnByZXY9bixvLm5leHQ9bixuLnByZXY9byxufWZ1bmN0aW9uIHVoZShlLHQscixuKXtsZXQgaT1uZXcgb2h0KGUsdCxyKTtyZXR1cm4gbj8oaS5uZXh0PW4ubmV4dCxpLnByZXY9bixuLm5leHQucHJldj1pLG4ubmV4dD1pKTooaS5wcmV2PWksaS5uZXh0PWkpLGl9ZnVuY3Rpb24gZjYoZSl7ZS5uZXh0LnByZXY9ZS5wcmV2LGUucHJldi5uZXh0PWUubmV4dCxlLnByZXZaJiYoZS5wcmV2Wi5uZXh0Wj1lLm5leHRaKSxlLm5leHRaJiYoZS5uZXh0Wi5wcmV2Wj1lLnByZXZaKX1mdW5jdGlvbiBvaHQoZSx0LHIpe3RoaXMuaT1lLHRoaXMueD10LHRoaXMueT1yLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWZ1bmN0aW9uIGUwcihlLHQscixuKXtsZXQgaT0wO2ZvcihsZXQgbz10LGE9ci1uO288cjtvKz1uKWkrPShlW2FdLWVbb10pKihlW28rMV0rZVthKzFdKSxhPW87cmV0dXJuIGl9dmFyIFpjPWNsYXNze3N0YXRpYyBhcmVhKHQpe2xldCByPXQubGVuZ3RoLG49MDtmb3IobGV0IGk9ci0xLG89MDtvPHI7aT1vKyspbis9dFtpXS54KnRbb10ueS10W29dLngqdFtpXS55O3JldHVybiBuKi41fXN0YXRpYyBpc0Nsb2NrV2lzZSh0KXtyZXR1cm4gWmMuYXJlYSh0KTwwfXN0YXRpYyB0cmlhbmd1bGF0ZVNoYXBlKHQscil7bGV0IG49W10saT1bXSxvPVtdO2hoZSh0KSxmaGUobix0KTtsZXQgYT10Lmxlbmd0aDtyLmZvckVhY2goaGhlKTtmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKylpLnB1c2goYSksYSs9cltsXS5sZW5ndGgsZmhlKG4scltsXSk7bGV0IHM9QmdyLnRyaWFuZ3VsYXRlKG4saSk7Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDtsKz0zKW8ucHVzaChzLnNsaWNlKGwsbCszKSk7cmV0dXJuIG99fTtmdW5jdGlvbiBoaGUoZSl7bGV0IHQ9ZS5sZW5ndGg7dD4yJiZlW3QtMV0uZXF1YWxzKGVbMF0pJiZlLnBvcCgpfWZ1bmN0aW9uIGZoZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKWUucHVzaCh0W3JdLngpLGUucHVzaCh0W3JdLnkpfXZhciBoaD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bmV3IEtjKFtuZXcgTHQoLjUsLjUpLG5ldyBMdCgtLjUsLjUpLG5ldyBMdCgtLjUsLS41KSxuZXcgTHQoLjUsLS41KV0pLHI9e30pe3N1cGVyKCksdGhpcy50eXBlPSJFeHRydWRlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsb3B0aW9uczpyfSx0PUFycmF5LmlzQXJyYXkodCk/dDpbdF07bGV0IG49dGhpcyxpPVtdLG89W107Zm9yKGxldCBzPTAsbD10Lmxlbmd0aDtzPGw7cysrKXtsZXQgYz10W3NdO2EoYyl9dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUobywyKSksdGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpO2Z1bmN0aW9uIGEocyl7bGV0IGw9W10sYz1yLmN1cnZlU2VnbWVudHMhPT12b2lkIDA/ci5jdXJ2ZVNlZ21lbnRzOjEyLHU9ci5zdGVwcyE9PXZvaWQgMD9yLnN0ZXBzOjEsaD1yLmRlcHRoIT09dm9pZCAwP3IuZGVwdGg6MSxmPXIuYmV2ZWxFbmFibGVkIT09dm9pZCAwP3IuYmV2ZWxFbmFibGVkOiEwLHA9ci5iZXZlbFRoaWNrbmVzcyE9PXZvaWQgMD9yLmJldmVsVGhpY2tuZXNzOi4yLGQ9ci5iZXZlbFNpemUhPT12b2lkIDA/ci5iZXZlbFNpemU6cC0uMSxnPXIuYmV2ZWxPZmZzZXQhPT12b2lkIDA/ci5iZXZlbE9mZnNldDowLF89ci5iZXZlbFNlZ21lbnRzIT09dm9pZCAwP3IuYmV2ZWxTZWdtZW50czozLHk9ci5leHRydWRlUGF0aCx4PXIuVVZHZW5lcmF0b3IhPT12b2lkIDA/ci5VVkdlbmVyYXRvcjpyMHI7ci5hbW91bnQhPT12b2lkIDAmJihjb25zb2xlLndhcm4oIlRIUkVFLkV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTogYW1vdW50IGhhcyBiZWVuIHJlbmFtZWQgdG8gZGVwdGguIiksaD1yLmFtb3VudCk7bGV0IGIsUz0hMSxDLFAsayxPO3kmJihiPXkuZ2V0U3BhY2VkUG9pbnRzKHUpLFM9ITAsZj0hMSxDPXkuY29tcHV0ZUZyZW5ldEZyYW1lcyh1LCExKSxQPW5ldyBqLGs9bmV3IGosTz1uZXcgaiksZnx8KF89MCxwPTAsZD0wLGc9MCk7bGV0IEQ9cy5leHRyYWN0UG9pbnRzKGMpLEI9RC5zaGFwZSxJPUQuaG9sZXM7aWYoIVpjLmlzQ2xvY2tXaXNlKEIpKXtCPUIucmV2ZXJzZSgpO2ZvcihsZXQgcT0wLHB0PUkubGVuZ3RoO3E8cHQ7cSsrKXtsZXQgaHQ9SVtxXTtaYy5pc0Nsb2NrV2lzZShodCkmJihJW3FdPWh0LnJldmVyc2UoKSl9fWxldCBSPVpjLnRyaWFuZ3VsYXRlU2hhcGUoQixJKSxGPUI7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO0I9Qi5jb25jYXQoaHQpfWZ1bmN0aW9uIHoocSxwdCxodCl7cmV0dXJuIHB0fHxjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IHZlYyBkb2VzIG5vdCBleGlzdCIpLHB0LmNsb25lKCkubXVsdGlwbHlTY2FsYXIoaHQpLmFkZChxKX1sZXQgVT1CLmxlbmd0aCxXPVIubGVuZ3RoO2Z1bmN0aW9uIFoocSxwdCxodCl7bGV0IHd0LGt0LGllLGVlPXEueC1wdC54LExlPXEueS1wdC55LGFyPWh0LngtcS54LGZyPWh0LnktcS55LHR0PWVlKmVlK0xlKkxlLCQ9ZWUqZnItTGUqYXI7aWYoTWF0aC5hYnMoJCk+TnVtYmVyLkVQU0lMT04pe2xldCBJdD1NYXRoLnNxcnQodHQpLCR0PU1hdGguc3FydChhciphcitmcipmciksaGU9cHQueC1MZS9JdCxUdD1wdC55K2VlL0l0LGJlPWh0LngtZnIvJHQsbnQ9aHQueSthci8kdCxDdD0oKGJlLWhlKSpmci0obnQtVHQpKmFyKS8oZWUqZnItTGUqYXIpO3d0PWhlK2VlKkN0LXEueCxrdD1UdCtMZSpDdC1xLnk7bGV0IFd0PXd0Knd0K2t0Kmt0O2lmKFd0PD0yKXJldHVybiBuZXcgTHQod3Qsa3QpO2llPU1hdGguc3FydChXdC8yKX1lbHNle2xldCBJdD0hMTtlZT5OdW1iZXIuRVBTSUxPTj9hcj5OdW1iZXIuRVBTSUxPTiYmKEl0PSEwKTplZTwtTnVtYmVyLkVQU0lMT04/YXI8LU51bWJlci5FUFNJTE9OJiYoSXQ9ITApOk1hdGguc2lnbihMZSk9PT1NYXRoLnNpZ24oZnIpJiYoSXQ9ITApLEl0Pyh3dD0tTGUsa3Q9ZWUsaWU9TWF0aC5zcXJ0KHR0KSk6KHd0PWVlLGt0PUxlLGllPU1hdGguc3FydCh0dC8yKSl9cmV0dXJuIG5ldyBMdCh3dC9pZSxrdC9pZSl9bGV0IHJ0PVtdO2ZvcihsZXQgcT0wLHB0PUYubGVuZ3RoLGh0PXB0LTEsd3Q9cSsxO3E8cHQ7cSsrLGh0Kyssd3QrKylodD09PXB0JiYoaHQ9MCksd3Q9PT1wdCYmKHd0PTApLHJ0W3FdPVooRltxXSxGW2h0XSxGW3d0XSk7bGV0IG90PVtdLHN0LFN0PXJ0LmNvbmNhdCgpO2ZvcihsZXQgcT0wLHB0PUkubGVuZ3RoO3E8cHQ7cSsrKXtsZXQgaHQ9SVtxXTtzdD1bXTtmb3IobGV0IHd0PTAsa3Q9aHQubGVuZ3RoLGllPWt0LTEsZWU9d3QrMTt3dDxrdDt3dCsrLGllKyssZWUrKylpZT09PWt0JiYoaWU9MCksZWU9PT1rdCYmKGVlPTApLHN0W3d0XT1aKGh0W3d0XSxodFtpZV0saHRbZWVdKTtvdC5wdXNoKHN0KSxTdD1TdC5jb25jYXQoc3QpfWZvcihsZXQgcT0wO3E8XztxKyspe2xldCBwdD1xL18saHQ9cCpNYXRoLmNvcyhwdCpNYXRoLlBJLzIpLHd0PWQqTWF0aC5zaW4ocHQqTWF0aC5QSS8yKStnO2ZvcihsZXQga3Q9MCxpZT1GLmxlbmd0aDtrdDxpZTtrdCsrKXtsZXQgZWU9eihGW2t0XSxydFtrdF0sd3QpO190KGVlLngsZWUueSwtaHQpfWZvcihsZXQga3Q9MCxpZT1JLmxlbmd0aDtrdDxpZTtrdCsrKXtsZXQgZWU9SVtrdF07c3Q9b3Rba3RdO2ZvcihsZXQgTGU9MCxhcj1lZS5sZW5ndGg7TGU8YXI7TGUrKyl7bGV0IGZyPXooZWVbTGVdLHN0W0xlXSx3dCk7X3QoZnIueCxmci55LC1odCl9fX1sZXQgYnQ9ZCtnO2ZvcihsZXQgcT0wO3E8VTtxKyspe2xldCBwdD1mP3ooQltxXSxTdFtxXSxidCk6QltxXTtTPyhrLmNvcHkoQy5ub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcihwdC54KSxQLmNvcHkoQy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHB0LnkpLE8uY29weShiWzBdKS5hZGQoaykuYWRkKFApLF90KE8ueCxPLnksTy56KSk6X3QocHQueCxwdC55LDApfWZvcihsZXQgcT0xO3E8PXU7cSsrKWZvcihsZXQgcHQ9MDtwdDxVO3B0Kyspe2xldCBodD1mP3ooQltwdF0sU3RbcHRdLGJ0KTpCW3B0XTtTPyhrLmNvcHkoQy5ub3JtYWxzW3FdKS5tdWx0aXBseVNjYWxhcihodC54KSxQLmNvcHkoQy5iaW5vcm1hbHNbcV0pLm11bHRpcGx5U2NhbGFyKGh0LnkpLE8uY29weShiW3FdKS5hZGQoaykuYWRkKFApLF90KE8ueCxPLnksTy56KSk6X3QoaHQueCxodC55LGgvdSpxKX1mb3IobGV0IHE9Xy0xO3E+PTA7cS0tKXtsZXQgcHQ9cS9fLGh0PXAqTWF0aC5jb3MocHQqTWF0aC5QSS8yKSx3dD1kKk1hdGguc2luKHB0Kk1hdGguUEkvMikrZztmb3IobGV0IGt0PTAsaWU9Ri5sZW5ndGg7a3Q8aWU7a3QrKyl7bGV0IGVlPXooRltrdF0scnRba3RdLHd0KTtfdChlZS54LGVlLnksaCtodCl9Zm9yKGxldCBrdD0wLGllPUkubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT1JW2t0XTtzdD1vdFtrdF07Zm9yKGxldCBMZT0wLGFyPWVlLmxlbmd0aDtMZTxhcjtMZSsrKXtsZXQgZnI9eihlZVtMZV0sc3RbTGVdLHd0KTtTP190KGZyLngsZnIueStiW3UtMV0ueSxiW3UtMV0ueCtodCk6X3QoZnIueCxmci55LGgraHQpfX19TXQoKSxsdCgpO2Z1bmN0aW9uIE10KCl7bGV0IHE9aS5sZW5ndGgvMztpZihmKXtsZXQgcHQ9MCxodD1VKnB0O2ZvcihsZXQgd3Q9MDt3dDxXO3d0Kyspe2xldCBrdD1SW3d0XTtjdChrdFsyXStodCxrdFsxXStodCxrdFswXStodCl9cHQ9dStfKjIsaHQ9VSpwdDtmb3IobGV0IHd0PTA7d3Q8Vzt3dCsrKXtsZXQga3Q9Ult3dF07Y3Qoa3RbMF0raHQsa3RbMV0raHQsa3RbMl0raHQpfX1lbHNle2ZvcihsZXQgcHQ9MDtwdDxXO3B0Kyspe2xldCBodD1SW3B0XTtjdChodFsyXSxodFsxXSxodFswXSl9Zm9yKGxldCBwdD0wO3B0PFc7cHQrKyl7bGV0IGh0PVJbcHRdO2N0KGh0WzBdK1UqdSxodFsxXStVKnUsaHRbMl0rVSp1KX19bi5hZGRHcm91cChxLGkubGVuZ3RoLzMtcSwwKX1mdW5jdGlvbiBsdCgpe2xldCBxPWkubGVuZ3RoLzMscHQ9MDtLdChGLHB0KSxwdCs9Ri5sZW5ndGg7Zm9yKGxldCBodD0wLHd0PUkubGVuZ3RoO2h0PHd0O2h0Kyspe2xldCBrdD1JW2h0XTtLdChrdCxwdCkscHQrPWt0Lmxlbmd0aH1uLmFkZEdyb3VwKHEsaS5sZW5ndGgvMy1xLDEpfWZ1bmN0aW9uIEt0KHEscHQpe2xldCBodD1xLmxlbmd0aDtmb3IoOy0taHQ+PTA7KXtsZXQgd3Q9aHQsa3Q9aHQtMTtrdDwwJiYoa3Q9cS5sZW5ndGgtMSk7Zm9yKGxldCBpZT0wLGVlPXUrXyoyO2llPGVlO2llKyspe2xldCBMZT1VKmllLGFyPVUqKGllKzEpLGZyPXB0K3d0K0xlLHR0PXB0K2t0K0xlLCQ9cHQra3QrYXIsSXQ9cHQrd3QrYXI7WChmcix0dCwkLEl0KX19fWZ1bmN0aW9uIF90KHEscHQsaHQpe2wucHVzaChxKSxsLnB1c2gocHQpLGwucHVzaChodCl9ZnVuY3Rpb24gY3QocSxwdCxodCl7ZXQocSksZXQocHQpLGV0KGh0KTtsZXQgd3Q9aS5sZW5ndGgvMyxrdD14LmdlbmVyYXRlVG9wVVYobixpLHd0LTMsd3QtMix3dC0xKTtkdChrdFswXSksZHQoa3RbMV0pLGR0KGt0WzJdKX1mdW5jdGlvbiBYKHEscHQsaHQsd3Qpe2V0KHEpLGV0KHB0KSxldCh3dCksZXQocHQpLGV0KGh0KSxldCh3dCk7bGV0IGt0PWkubGVuZ3RoLzMsaWU9eC5nZW5lcmF0ZVNpZGVXYWxsVVYobixpLGt0LTYsa3QtMyxrdC0yLGt0LTEpO2R0KGllWzBdKSxkdChpZVsxXSksZHQoaWVbM10pLGR0KGllWzFdKSxkdChpZVsyXSksZHQoaWVbM10pfWZ1bmN0aW9uIGV0KHEpe2kucHVzaChsW3EqMyswXSksaS5wdXNoKGxbcSozKzFdKSxpLnB1c2gobFtxKjMrMl0pfWZ1bmN0aW9uIGR0KHEpe28ucHVzaChxLngpLG8ucHVzaChxLnkpfX19dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCkscj10aGlzLnBhcmFtZXRlcnMuc2hhcGVzLG49dGhpcy5wYXJhbWV0ZXJzLm9wdGlvbnM7cmV0dXJuIG4wcihyLG4sdCl9c3RhdGljIGZyb21KU09OKHQscil7bGV0IG49W107Zm9yKGxldCBvPTAsYT10LnNoYXBlcy5sZW5ndGg7bzxhO28rKyl7bGV0IHM9clt0LnNoYXBlc1tvXV07bi5wdXNoKHMpfWxldCBpPXQub3B0aW9ucy5leHRydWRlUGF0aDtyZXR1cm4gaSE9PXZvaWQgMCYmKHQub3B0aW9ucy5leHRydWRlUGF0aD1uZXcgemh0W2kudHlwZV0oKS5mcm9tSlNPTihpKSksbmV3IGhoKG4sdC5vcHRpb25zKX19LHIwcj17Z2VuZXJhdGVUb3BVVjpmdW5jdGlvbihlLHQscixuLGkpe2xldCBvPXRbciozXSxhPXRbciozKzFdLHM9dFtuKjNdLGw9dFtuKjMrMV0sYz10W2kqM10sdT10W2kqMysxXTtyZXR1cm5bbmV3IEx0KG8sYSksbmV3IEx0KHMsbCksbmV3IEx0KGMsdSldfSxnZW5lcmF0ZVNpZGVXYWxsVVY6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe2xldCBhPXRbciozXSxzPXRbciozKzFdLGw9dFtyKjMrMl0sYz10W24qM10sdT10W24qMysxXSxoPXRbbiozKzJdLGY9dFtpKjNdLHA9dFtpKjMrMV0sZD10W2kqMysyXSxnPXRbbyozXSxfPXRbbyozKzFdLHk9dFtvKjMrMl07cmV0dXJuIE1hdGguYWJzKHMtdSk8TWF0aC5hYnMoYS1jKT9bbmV3IEx0KGEsMS1sKSxuZXcgTHQoYywxLWgpLG5ldyBMdChmLDEtZCksbmV3IEx0KGcsMS15KV06W25ldyBMdChzLDEtbCksbmV3IEx0KHUsMS1oKSxuZXcgTHQocCwxLWQpLG5ldyBMdChfLDEteSldfX07ZnVuY3Rpb24gbjByKGUsdCxyKXtpZihyLnNoYXBlcz1bXSxBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpO24rKyl7bGV0IG89ZVtuXTtyLnNoYXBlcy5wdXNoKG8udXVpZCl9ZWxzZSByLnNoYXBlcy5wdXNoKGUudXVpZCk7cmV0dXJuIHQuZXh0cnVkZVBhdGghPT12b2lkIDAmJihyLm9wdGlvbnMuZXh0cnVkZVBhdGg9dC5leHRydWRlUGF0aC50b0pTT04oKSkscn12YXIgR3Y9Y2xhc3MgZXh0ZW5kcyB1aHtjb25zdHJ1Y3Rvcih0PTEscj0wKXtsZXQgbj0oMStNYXRoLnNxcnQoNSkpLzIsaT1bLTEsbiwwLDEsbiwwLC0xLC1uLDAsMSwtbiwwLDAsLTEsbiwwLDEsbiwwLC0xLC1uLDAsMSwtbixuLDAsLTEsbiwwLDEsLW4sMCwtMSwtbiwwLDFdLG89WzAsMTEsNSwwLDUsMSwwLDEsNywwLDcsMTAsMCwxMCwxMSwxLDUsOSw1LDExLDQsMTEsMTAsMiwxMCw3LDYsNywxLDgsMyw5LDQsMyw0LDIsMywyLDYsMyw2LDgsMyw4LDksNCw5LDUsMiw0LDExLDYsMiwxMCw4LDYsNyw5LDgsMV07c3VwZXIoaSxvLHQsciksdGhpcy50eXBlPSJJY29zYWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGRldGFpbDpyfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBHdih0LnJhZGl1cyx0LmRldGFpbCl9fSxXdj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9W25ldyBMdCgwLC41KSxuZXcgTHQoLjUsMCksbmV3IEx0KDAsLS41KV0scj0xMixuPTAsaT1NYXRoLlBJKjIpe3N1cGVyKCksdGhpcy50eXBlPSJMYXRoZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3BvaW50czp0LHNlZ21lbnRzOnIscGhpU3RhcnQ6bixwaGlMZW5ndGg6aX0scj1NYXRoLmZsb29yKHIpLGk9Wm8oaSwwLE1hdGguUEkqMik7bGV0IG89W10sYT1bXSxzPVtdLGw9W10sYz1bXSx1PTEvcixoPW5ldyBqLGY9bmV3IEx0LHA9bmV3IGosZD1uZXcgaixnPW5ldyBqLF89MCx5PTA7Zm9yKGxldCB4PTA7eDw9dC5sZW5ndGgtMTt4Kyspc3dpdGNoKHgpe2Nhc2UgMDpfPXRbeCsxXS54LXRbeF0ueCx5PXRbeCsxXS55LXRbeF0ueSxwLng9eSoxLHAueT0tXyxwLno9eSowLGcuY29weShwKSxwLm5vcm1hbGl6ZSgpLGwucHVzaChwLngscC55LHAueik7YnJlYWs7Y2FzZSB0Lmxlbmd0aC0xOmwucHVzaChnLngsZy55LGcueik7YnJlYWs7ZGVmYXVsdDpfPXRbeCsxXS54LXRbeF0ueCx5PXRbeCsxXS55LXRbeF0ueSxwLng9eSoxLHAueT0tXyxwLno9eSowLGQuY29weShwKSxwLngrPWcueCxwLnkrPWcueSxwLnorPWcueixwLm5vcm1hbGl6ZSgpLGwucHVzaChwLngscC55LHAueiksZy5jb3B5KGQpfWZvcihsZXQgeD0wO3g8PXI7eCsrKXtsZXQgYj1uK3gqdSppLFM9TWF0aC5zaW4oYiksQz1NYXRoLmNvcyhiKTtmb3IobGV0IFA9MDtQPD10Lmxlbmd0aC0xO1ArKyl7aC54PXRbUF0ueCpTLGgueT10W1BdLnksaC56PXRbUF0ueCpDLGEucHVzaChoLngsaC55LGgueiksZi54PXgvcixmLnk9UC8odC5sZW5ndGgtMSkscy5wdXNoKGYueCxmLnkpO2xldCBrPWxbMypQKzBdKlMsTz1sWzMqUCsxXSxEPWxbMypQKzBdKkM7Yy5wdXNoKGssTyxEKX19Zm9yKGxldCB4PTA7eDxyO3grKylmb3IobGV0IGI9MDtiPHQubGVuZ3RoLTE7YisrKXtsZXQgUz1iK3gqdC5sZW5ndGgsQz1TLFA9Uyt0Lmxlbmd0aCxrPVMrdC5sZW5ndGgrMSxPPVMrMTtvLnB1c2goQyxQLE8pLG8ucHVzaChrLE8sUCl9dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShzLDIpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgV3YodC5wb2ludHMsdC5zZWdtZW50cyx0LnBoaVN0YXJ0LHQucGhpTGVuZ3RoKX19LFcwPWNsYXNzIGV4dGVuZHMgdWh7Y29uc3RydWN0b3IodD0xLHI9MCl7bGV0IG49WzEsMCwwLC0xLDAsMCwwLDEsMCwwLC0xLDAsMCwwLDEsMCwwLC0xXSxpPVswLDIsNCwwLDQsMywwLDMsNSwwLDUsMiwxLDIsNSwxLDUsMywxLDMsNCwxLDQsMl07c3VwZXIobixpLHQsciksdGhpcy50eXBlPSJPY3RhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOnJ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFcwKHQucmFkaXVzLHQuZGV0YWlsKX19LFl2PWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0uNSxyPTEsbj04LGk9MSxvPTAsYT1NYXRoLlBJKjIpe3N1cGVyKCksdGhpcy50eXBlPSJSaW5nR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17aW5uZXJSYWRpdXM6dCxvdXRlclJhZGl1czpyLHRoZXRhU2VnbWVudHM6bixwaGlTZWdtZW50czppLHRoZXRhU3RhcnQ6byx0aGV0YUxlbmd0aDphfSxuPU1hdGgubWF4KDMsbiksaT1NYXRoLm1heCgxLGkpO2xldCBzPVtdLGw9W10sYz1bXSx1PVtdLGg9dCxmPShyLXQpL2kscD1uZXcgaixkPW5ldyBMdDtmb3IobGV0IGc9MDtnPD1pO2crKyl7Zm9yKGxldCBfPTA7Xzw9bjtfKyspe2xldCB5PW8rXy9uKmE7cC54PWgqTWF0aC5jb3MoeSkscC55PWgqTWF0aC5zaW4oeSksbC5wdXNoKHAueCxwLnkscC56KSxjLnB1c2goMCwwLDEpLGQueD0ocC54L3IrMSkvMixkLnk9KHAueS9yKzEpLzIsdS5wdXNoKGQueCxkLnkpfWgrPWZ9Zm9yKGxldCBnPTA7ZzxpO2crKyl7bGV0IF89ZyoobisxKTtmb3IobGV0IHk9MDt5PG47eSsrKXtsZXQgeD15K18sYj14LFM9eCtuKzEsQz14K24rMixQPXgrMTtzLnB1c2goYixTLFApLHMucHVzaChTLEMsUCl9fXRoaXMuc2V0SW5kZXgocyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUobCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHUsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFl2KHQuaW5uZXJSYWRpdXMsdC5vdXRlclJhZGl1cyx0LnRoZXRhU2VnbWVudHMsdC5waGlTZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxZMD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bmV3IEtjKFtuZXcgTHQoMCwuNSksbmV3IEx0KC0uNSwtLjUpLG5ldyBMdCguNSwtLjUpXSkscj0xMil7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYXBlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsY3VydmVTZWdtZW50czpyfTtsZXQgbj1bXSxpPVtdLG89W10sYT1bXSxzPTAsbD0wO2lmKEFycmF5LmlzQXJyYXkodCk9PT0hMSljKHQpO2Vsc2UgZm9yKGxldCB1PTA7dTx0Lmxlbmd0aDt1KyspYyh0W3VdKSx0aGlzLmFkZEdyb3VwKHMsbCx1KSxzKz1sLGw9MDt0aGlzLnNldEluZGV4KG4pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShhLDIpKTtmdW5jdGlvbiBjKHUpe2xldCBoPWkubGVuZ3RoLzMsZj11LmV4dHJhY3RQb2ludHMocikscD1mLnNoYXBlLGQ9Zi5ob2xlcztaYy5pc0Nsb2NrV2lzZShwKT09PSExJiYocD1wLnJldmVyc2UoKSk7Zm9yKGxldCBfPTAseT1kLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1kW19dO1pjLmlzQ2xvY2tXaXNlKHgpPT09ITAmJihkW19dPXgucmV2ZXJzZSgpKX1sZXQgZz1aYy50cmlhbmd1bGF0ZVNoYXBlKHAsZCk7Zm9yKGxldCBfPTAseT1kLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1kW19dO3A9cC5jb25jYXQoeCl9Zm9yKGxldCBfPTAseT1wLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1wW19dO2kucHVzaCh4LngseC55LDApLG8ucHVzaCgwLDAsMSksYS5wdXNoKHgueCx4LnkpfWZvcihsZXQgXz0wLHk9Zy5sZW5ndGg7Xzx5O18rKyl7bGV0IHg9Z1tfXSxiPXhbMF0raCxTPXhbMV0raCxDPXhbMl0raDtuLnB1c2goYixTLEMpLGwrPTN9fX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKSxyPXRoaXMucGFyYW1ldGVycy5zaGFwZXM7cmV0dXJuIGkwcihyLHQpfXN0YXRpYyBmcm9tSlNPTih0LHIpe2xldCBuPVtdO2ZvcihsZXQgaT0wLG89dC5zaGFwZXMubGVuZ3RoO2k8bztpKyspe2xldCBhPXJbdC5zaGFwZXNbaV1dO24ucHVzaChhKX1yZXR1cm4gbmV3IFkwKG4sdC5jdXJ2ZVNlZ21lbnRzKX19O2Z1bmN0aW9uIGkwcihlLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCByPTAsbj1lLmxlbmd0aDtyPG47cisrKXtsZXQgaT1lW3JdO3Quc2hhcGVzLnB1c2goaS51dWlkKX1lbHNlIHQuc2hhcGVzLnB1c2goZS51dWlkKTtyZXR1cm4gdH12YXIgajA9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj0zMixuPTE2LGk9MCxvPU1hdGguUEkqMixhPTAscz1NYXRoLlBJKXtzdXBlcigpLHRoaXMudHlwZT0iU3BoZXJlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsd2lkdGhTZWdtZW50czpyLGhlaWdodFNlZ21lbnRzOm4scGhpU3RhcnQ6aSxwaGlMZW5ndGg6byx0aGV0YVN0YXJ0OmEsdGhldGFMZW5ndGg6c30scj1NYXRoLm1heCgzLE1hdGguZmxvb3IocikpLG49TWF0aC5tYXgoMixNYXRoLmZsb29yKG4pKTtsZXQgbD1NYXRoLm1pbihhK3MsTWF0aC5QSSksYz0wLHU9W10saD1uZXcgaixmPW5ldyBqLHA9W10sZD1bXSxnPVtdLF89W107Zm9yKGxldCB5PTA7eTw9bjt5Kyspe2xldCB4PVtdLGI9eS9uLFM9MDt5PT0wJiZhPT0wP1M9LjUvcjp5PT1uJiZsPT1NYXRoLlBJJiYoUz0tLjUvcik7Zm9yKGxldCBDPTA7Qzw9cjtDKyspe2xldCBQPUMvcjtoLng9LXQqTWF0aC5jb3MoaStQKm8pKk1hdGguc2luKGErYipzKSxoLnk9dCpNYXRoLmNvcyhhK2IqcyksaC56PXQqTWF0aC5zaW4oaStQKm8pKk1hdGguc2luKGErYipzKSxkLnB1c2goaC54LGgueSxoLnopLGYuY29weShoKS5ub3JtYWxpemUoKSxnLnB1c2goZi54LGYueSxmLnopLF8ucHVzaChQK1MsMS1iKSx4LnB1c2goYysrKX11LnB1c2goeCl9Zm9yKGxldCB5PTA7eTxuO3krKylmb3IobGV0IHg9MDt4PHI7eCsrKXtsZXQgYj11W3ldW3grMV0sUz11W3ldW3hdLEM9dVt5KzFdW3hdLFA9dVt5KzFdW3grMV07KHkhPT0wfHxhPjApJiZwLnB1c2goYixTLFApLCh5IT09bi0xfHxsPE1hdGguUEkpJiZwLnB1c2goUyxDLFApfXRoaXMuc2V0SW5kZXgocCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoZCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGcsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKF8sMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IGowKHQucmFkaXVzLHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQucGhpU3RhcnQsdC5waGlMZW5ndGgsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sanY9Y2xhc3MgZXh0ZW5kcyB1aHtjb25zdHJ1Y3Rvcih0PTEscj0wKXtsZXQgbj1bMSwxLDEsLTEsLTEsMSwtMSwxLC0xLDEsLTEsLTFdLGk9WzIsMSwwLDAsMywyLDEsMywwLDIsMywxXTtzdXBlcihuLGksdCxyKSx0aGlzLnR5cGU9IlRldHJhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOnJ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IGp2KHQucmFkaXVzLHQuZGV0YWlsKX19LFh2PWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9LjQsbj04LGk9NixvPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsdHViZTpyLHJhZGlhbFNlZ21lbnRzOm4sdHVidWxhclNlZ21lbnRzOmksYXJjOm99LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7bGV0IGE9W10scz1bXSxsPVtdLGM9W10sdT1uZXcgaixoPW5ldyBqLGY9bmV3IGo7Zm9yKGxldCBwPTA7cDw9bjtwKyspZm9yKGxldCBkPTA7ZDw9aTtkKyspe2xldCBnPWQvaSpvLF89cC9uKk1hdGguUEkqMjtoLng9KHQrcipNYXRoLmNvcyhfKSkqTWF0aC5jb3MoZyksaC55PSh0K3IqTWF0aC5jb3MoXykpKk1hdGguc2luKGcpLGguej1yKk1hdGguc2luKF8pLHMucHVzaChoLngsaC55LGgueiksdS54PXQqTWF0aC5jb3MoZyksdS55PXQqTWF0aC5zaW4oZyksZi5zdWJWZWN0b3JzKGgsdSkubm9ybWFsaXplKCksbC5wdXNoKGYueCxmLnksZi56KSxjLnB1c2goZC9pKSxjLnB1c2gocC9uKX1mb3IobGV0IHA9MTtwPD1uO3ArKylmb3IobGV0IGQ9MTtkPD1pO2QrKyl7bGV0IGc9KGkrMSkqcCtkLTEsXz0oaSsxKSoocC0xKStkLTEseT0oaSsxKSoocC0xKStkLHg9KGkrMSkqcCtkO2EucHVzaChnLF8seCksYS5wdXNoKF8seSx4KX10aGlzLnNldEluZGV4KGEpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShjLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBYdih0LnJhZGl1cyx0LnR1YmUsdC5yYWRpYWxTZWdtZW50cyx0LnR1YnVsYXJTZWdtZW50cyx0LmFyYyl9fSwkdj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPS40LG49NjQsaT04LG89MixhPTMpe3N1cGVyKCksdGhpcy50eXBlPSJUb3J1c0tub3RHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx0dWJlOnIsdHVidWxhclNlZ21lbnRzOm4scmFkaWFsU2VnbWVudHM6aSxwOm8scTphfSxuPU1hdGguZmxvb3IobiksaT1NYXRoLmZsb29yKGkpO2xldCBzPVtdLGw9W10sYz1bXSx1PVtdLGg9bmV3IGosZj1uZXcgaixwPW5ldyBqLGQ9bmV3IGosZz1uZXcgaixfPW5ldyBqLHk9bmV3IGo7Zm9yKGxldCBiPTA7Yjw9bjsrK2Ipe2xldCBTPWIvbipvKk1hdGguUEkqMjt4KFMsbyxhLHQscCkseChTKy4wMSxvLGEsdCxkKSxfLnN1YlZlY3RvcnMoZCxwKSx5LmFkZFZlY3RvcnMoZCxwKSxnLmNyb3NzVmVjdG9ycyhfLHkpLHkuY3Jvc3NWZWN0b3JzKGcsXyksZy5ub3JtYWxpemUoKSx5Lm5vcm1hbGl6ZSgpO2ZvcihsZXQgQz0wO0M8PWk7KytDKXtsZXQgUD1DL2kqTWF0aC5QSSoyLGs9LXIqTWF0aC5jb3MoUCksTz1yKk1hdGguc2luKFApO2gueD1wLngrKGsqeS54K08qZy54KSxoLnk9cC55KyhrKnkueStPKmcueSksaC56PXAueisoayp5LnorTypnLnopLGwucHVzaChoLngsaC55LGgueiksZi5zdWJWZWN0b3JzKGgscCkubm9ybWFsaXplKCksYy5wdXNoKGYueCxmLnksZi56KSx1LnB1c2goYi9uKSx1LnB1c2goQy9pKX19Zm9yKGxldCBiPTE7Yjw9bjtiKyspZm9yKGxldCBTPTE7Uzw9aTtTKyspe2xldCBDPShpKzEpKihiLTEpKyhTLTEpLFA9KGkrMSkqYisoUy0xKSxrPShpKzEpKmIrUyxPPShpKzEpKihiLTEpK1M7cy5wdXNoKEMsUCxPKSxzLnB1c2goUCxrLE8pfXRoaXMuc2V0SW5kZXgocyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUobCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHUsMikpO2Z1bmN0aW9uIHgoYixTLEMsUCxrKXtsZXQgTz1NYXRoLmNvcyhiKSxEPU1hdGguc2luKGIpLEI9Qy9TKmIsST1NYXRoLmNvcyhCKTtrLng9UCooMitJKSouNSpPLGsueT1QKigyK0kpKkQqLjUsay56PVAqTWF0aC5zaW4oQikqLjV9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3ICR2KHQucmFkaXVzLHQudHViZSx0LnR1YnVsYXJTZWdtZW50cyx0LnJhZGlhbFNlZ21lbnRzLHQucCx0LnEpfX0sS3Y9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PW5ldyBoTShuZXcgaigtMSwtMSwwKSxuZXcgaigtMSwxLDApLG5ldyBqKDEsMSwwKSkscj02NCxuPTEsaT04LG89ITEpe3N1cGVyKCksdGhpcy50eXBlPSJUdWJlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cGF0aDp0LHR1YnVsYXJTZWdtZW50czpyLHJhZGl1czpuLHJhZGlhbFNlZ21lbnRzOmksY2xvc2VkOm99O2xldCBhPXQuY29tcHV0ZUZyZW5ldEZyYW1lcyhyLG8pO3RoaXMudGFuZ2VudHM9YS50YW5nZW50cyx0aGlzLm5vcm1hbHM9YS5ub3JtYWxzLHRoaXMuYmlub3JtYWxzPWEuYmlub3JtYWxzO2xldCBzPW5ldyBqLGw9bmV3IGosYz1uZXcgTHQsdT1uZXcgaixoPVtdLGY9W10scD1bXSxkPVtdO2coKSx0aGlzLnNldEluZGV4KGQpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGgsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShmLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShwLDIpKTtmdW5jdGlvbiBnKCl7Zm9yKGxldCBiPTA7YjxyO2IrKylfKGIpO18obz09PSExP3I6MCkseCgpLHkoKX1mdW5jdGlvbiBfKGIpe3U9dC5nZXRQb2ludEF0KGIvcix1KTtsZXQgUz1hLm5vcm1hbHNbYl0sQz1hLmJpbm9ybWFsc1tiXTtmb3IobGV0IFA9MDtQPD1pO1ArKyl7bGV0IGs9UC9pKk1hdGguUEkqMixPPU1hdGguc2luKGspLEQ9LU1hdGguY29zKGspO2wueD1EKlMueCtPKkMueCxsLnk9RCpTLnkrTypDLnksbC56PUQqUy56K08qQy56LGwubm9ybWFsaXplKCksZi5wdXNoKGwueCxsLnksbC56KSxzLng9dS54K24qbC54LHMueT11LnkrbipsLnkscy56PXUueituKmwueixoLnB1c2gocy54LHMueSxzLnopfX1mdW5jdGlvbiB5KCl7Zm9yKGxldCBiPTE7Yjw9cjtiKyspZm9yKGxldCBTPTE7Uzw9aTtTKyspe2xldCBDPShpKzEpKihiLTEpKyhTLTEpLFA9KGkrMSkqYisoUy0xKSxrPShpKzEpKmIrUyxPPShpKzEpKihiLTEpK1M7ZC5wdXNoKEMsUCxPKSxkLnB1c2goUCxrLE8pfX1mdW5jdGlvbiB4KCl7Zm9yKGxldCBiPTA7Yjw9cjtiKyspZm9yKGxldCBTPTA7Uzw9aTtTKyspYy54PWIvcixjLnk9Uy9pLHAucHVzaChjLngsYy55KX19dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQucGF0aD10aGlzLnBhcmFtZXRlcnMucGF0aC50b0pTT04oKSx0fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEt2KG5ldyB6aHRbdC5wYXRoLnR5cGVdKCkuZnJvbUpTT04odC5wYXRoKSx0LnR1YnVsYXJTZWdtZW50cyx0LnJhZGl1cyx0LnJhZGlhbFNlZ21lbnRzLHQuY2xvc2VkKX19LHA2PWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1udWxsKXtpZihzdXBlcigpLHRoaXMudHlwZT0iV2lyZWZyYW1lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17Z2VvbWV0cnk6dH0sdCE9PW51bGwpe2xldCByPVtdLG49bmV3IFNldCxpPW5ldyBqLG89bmV3IGo7aWYodC5pbmRleCE9PW51bGwpe2xldCBhPXQuYXR0cmlidXRlcy5wb3NpdGlvbixzPXQuaW5kZXgsbD10Lmdyb3VwcztsLmxlbmd0aD09PTAmJihsPVt7c3RhcnQ6MCxjb3VudDpzLmNvdW50LG1hdGVyaWFsSW5kZXg6MH1dKTtmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTsrK2Mpe2xldCBoPWxbY10sZj1oLnN0YXJ0LHA9aC5jb3VudDtmb3IobGV0IGQ9ZixnPWYrcDtkPGc7ZCs9Mylmb3IobGV0IF89MDtfPDM7XysrKXtsZXQgeT1zLmdldFgoZCtfKSx4PXMuZ2V0WChkKyhfKzEpJTMpO2kuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHkpLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHgpLHBoZShpLG8sbik9PT0hMCYmKHIucHVzaChpLngsaS55LGkueiksci5wdXNoKG8ueCxvLnksby56KSl9fX1lbHNle2xldCBhPXQuYXR0cmlidXRlcy5wb3NpdGlvbjtmb3IobGV0IHM9MCxsPWEuY291bnQvMztzPGw7cysrKWZvcihsZXQgYz0wO2M8MztjKyspe2xldCB1PTMqcytjLGg9MypzKyhjKzEpJTM7aS5mcm9tQnVmZmVyQXR0cmlidXRlKGEsdSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGEsaCkscGhlKGksbyxuKT09PSEwJiYoci5wdXNoKGkueCxpLnksaS56KSxyLnB1c2goby54LG8ueSxvLnopKX19dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUociwzKSl9fX07ZnVuY3Rpb24gcGhlKGUsdCxyKXtsZXQgbj1gJHtlLnh9LCR7ZS55fSwke2Uuen0tJHt0Lnh9LCR7dC55fSwke3Quen1gLGk9YCR7dC54fSwke3QueX0sJHt0Lnp9LSR7ZS54fSwke2UueX0sJHtlLnp9YDtyZXR1cm4gci5oYXMobik9PT0hMHx8ci5oYXMoaSk9PT0hMD8hMTooci5hZGQobixpKSwhMCl9dmFyIGRoZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxCb3hHZW9tZXRyeTpRZixCb3hCdWZmZXJHZW9tZXRyeTpRZixDaXJjbGVHZW9tZXRyeTpGdixDaXJjbGVCdWZmZXJHZW9tZXRyeTpGdixDb25lR2VvbWV0cnk6QnYsQ29uZUJ1ZmZlckdlb21ldHJ5OkJ2LEN5bGluZGVyR2VvbWV0cnk6b20sQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTpvbSxEb2RlY2FoZWRyb25HZW9tZXRyeTpIdixEb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeTpIdixFZGdlc0dlb21ldHJ5OmE2LEV4dHJ1ZGVHZW9tZXRyeTpoaCxFeHRydWRlQnVmZmVyR2VvbWV0cnk6aGgsSWNvc2FoZWRyb25HZW9tZXRyeTpHdixJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5Okd2LExhdGhlR2VvbWV0cnk6V3YsTGF0aGVCdWZmZXJHZW9tZXRyeTpXdixPY3RhaGVkcm9uR2VvbWV0cnk6VzAsT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5OlcwLFBsYW5lR2VvbWV0cnk6VjAsUGxhbmVCdWZmZXJHZW9tZXRyeTpWMCxQb2x5aGVkcm9uR2VvbWV0cnk6dWgsUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5OnVoLFJpbmdHZW9tZXRyeTpZdixSaW5nQnVmZmVyR2VvbWV0cnk6WXYsU2hhcGVHZW9tZXRyeTpZMCxTaGFwZUJ1ZmZlckdlb21ldHJ5OlkwLFNwaGVyZUdlb21ldHJ5OmowLFNwaGVyZUJ1ZmZlckdlb21ldHJ5OmowLFRldHJhaGVkcm9uR2VvbWV0cnk6anYsVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTpqdixUb3J1c0dlb21ldHJ5Olh2LFRvcnVzQnVmZmVyR2VvbWV0cnk6WHYsVG9ydXNLbm90R2VvbWV0cnk6JHYsVG9ydXNLbm90QnVmZmVyR2VvbWV0cnk6JHYsVHViZUdlb21ldHJ5Okt2LFR1YmVCdWZmZXJHZW9tZXRyeTpLdixXaXJlZnJhbWVHZW9tZXRyeTpwNn0pLGQ2PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYWRvd01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgwKSx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXN9fTtkNi5wcm90b3R5cGUuaXNTaGFkb3dNYXRlcmlhbD0hMDt2YXIgcE09Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDE2Nzc3MjE1KSx0aGlzLnJvdWdobmVzcz0xLHRoaXMubWV0YWxuZXNzPTAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPWF4LHRoaXMubm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5yb3VnaG5lc3NNYXA9bnVsbCx0aGlzLm1ldGFsbmVzc01hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuZW52TWFwSW50ZW5zaXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MsdGhpcy5tZXRhbG5lc3M9dC5tZXRhbG5lc3MsdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5yb3VnaG5lc3NNYXA9dC5yb3VnaG5lc3NNYXAsdGhpcy5tZXRhbG5lc3NNYXA9dC5tZXRhbG5lc3NNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuZW52TWFwSW50ZW5zaXR5PXQuZW52TWFwSW50ZW5zaXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07cE0ucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITA7dmFyIG02PWNsYXNzIGV4dGVuZHMgcE17Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLnR5cGU9Ik1lc2hQaHlzaWNhbE1hdGVyaWFsIix0aGlzLmNsZWFyY29hdE1hcD1udWxsLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPTAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9bnVsbCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPW51bGwsdGhpcy5pb3I9MS41LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJyZWZsZWN0aXZpdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWm8oMi41Kih0aGlzLmlvci0xKS8odGhpcy5pb3IrMSksMCwxKX0sc2V0OmZ1bmN0aW9uKHIpe3RoaXMuaW9yPSgxKy40KnIpLygxLS40KnIpfX0pLHRoaXMuc2hlZW5Db2xvcj1uZXcgbmUoMCksdGhpcy5zaGVlbkNvbG9yTWFwPW51bGwsdGhpcy5zaGVlblJvdWdobmVzcz0xLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9bnVsbCx0aGlzLnRyYW5zbWlzc2lvbk1hcD1udWxsLHRoaXMudGhpY2tuZXNzPTAsdGhpcy50aGlja25lc3NNYXA9bnVsbCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9MCx0aGlzLmF0dGVudWF0aW9uQ29sb3I9bmV3IG5lKDEsMSwxKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD1udWxsLHRoaXMuc3BlY3VsYXJDb2xvcj1uZXcgbmUoMSwxLDEpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD1udWxsLHRoaXMuX3NoZWVuPTAsdGhpcy5fY2xlYXJjb2F0PTAsdGhpcy5fdHJhbnNtaXNzaW9uPTAsdGhpcy5zZXRWYWx1ZXModCl9Z2V0IHNoZWVuKCl7cmV0dXJuIHRoaXMuX3NoZWVufXNldCBzaGVlbih0KXt0aGlzLl9zaGVlbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3NoZWVuPXR9Z2V0IGNsZWFyY29hdCgpe3JldHVybiB0aGlzLl9jbGVhcmNvYXR9c2V0IGNsZWFyY29hdCh0KXt0aGlzLl9jbGVhcmNvYXQ+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9jbGVhcmNvYXQ9dH1nZXQgdHJhbnNtaXNzaW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zbWlzc2lvbn1zZXQgdHJhbnNtaXNzaW9uKHQpe3RoaXMuX3RyYW5zbWlzc2lvbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3RyYW5zbWlzc2lvbj10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQsdGhpcy5jbGVhcmNvYXRNYXA9dC5jbGVhcmNvYXRNYXAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9dC5jbGVhcmNvYXROb3JtYWxNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS5jb3B5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHRoaXMuaW9yPXQuaW9yLHRoaXMuc2hlZW49dC5zaGVlbix0aGlzLnNoZWVuQ29sb3IuY29weSh0LnNoZWVuQ29sb3IpLHRoaXMuc2hlZW5Db2xvck1hcD10LnNoZWVuQ29sb3JNYXAsdGhpcy5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9dC5zaGVlblJvdWdobmVzc01hcCx0aGlzLnRyYW5zbWlzc2lvbj10LnRyYW5zbWlzc2lvbix0aGlzLnRyYW5zbWlzc2lvbk1hcD10LnRyYW5zbWlzc2lvbk1hcCx0aGlzLnRoaWNrbmVzcz10LnRoaWNrbmVzcyx0aGlzLnRoaWNrbmVzc01hcD10LnRoaWNrbmVzc01hcCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9dC5hdHRlbnVhdGlvbkRpc3RhbmNlLHRoaXMuYXR0ZW51YXRpb25Db2xvci5jb3B5KHQuYXR0ZW51YXRpb25Db2xvciksdGhpcy5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dC5zcGVjdWxhckludGVuc2l0eU1hcCx0aGlzLnNwZWN1bGFyQ29sb3IuY29weSh0LnNwZWN1bGFyQ29sb3IpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD10LnNwZWN1bGFyQ29sb3JNYXAsdGhpc319O202LnByb3RvdHlwZS5pc01lc2hQaHlzaWNhbE1hdGVyaWFsPSEwO3ZhciBnNj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IG5lKDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IG5lKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9RDYsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnNwZWN1bGFyLmNvcHkodC5zcGVjdWxhciksdGhpcy5zaGluaW5lc3M9dC5zaGluaW5lc3MsdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07ZzYucHJvdG90eXBlLmlzTWVzaFBob25nTWF0ZXJpYWw9ITA7dmFyIF82PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1RPT046IiJ9LHRoaXMudHlwZT0iTWVzaFRvb25NYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5ncmFkaWVudE1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBuZSgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5ncmFkaWVudE1hcD10LmdyYWRpZW50TWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX07XzYucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMDt2YXIgeTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaE5vcm1hbE1hdGVyaWFsIix0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPWF4LHRoaXMubm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3k2LnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMDt2YXIgdjY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IG5lKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1ENix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTt2Ni5wcm90b3R5cGUuaXNNZXNoTGFtYmVydE1hdGVyaWFsPSEwO3ZhciB4Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17TUFUQ0FQOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXRjYXA9dC5tYXRjYXAsdGhpcy5tYXA9dC5tYXAsdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTt4Ni5wcm90b3R5cGUuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw9ITA7dmFyIGI2PWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVEYXNoZWRNYXRlcmlhbCIsdGhpcy5zY2FsZT0xLHRoaXMuZGFzaFNpemU9Myx0aGlzLmdhcFNpemU9MSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuc2NhbGU9dC5zY2FsZSx0aGlzLmRhc2hTaXplPXQuZGFzaFNpemUsdGhpcy5nYXBTaXplPXQuZ2FwU2l6ZSx0aGlzfX07YjYucHJvdG90eXBlLmlzTGluZURhc2hlZE1hdGVyaWFsPSEwO3ZhciBvMHI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsU2hhZG93TWF0ZXJpYWw6ZDYsU3ByaXRlTWF0ZXJpYWw6aU0sUmF3U2hhZGVyTWF0ZXJpYWw6VTAsU2hhZGVyTWF0ZXJpYWw6bGgsUG9pbnRzTWF0ZXJpYWw6bm0sTWVzaFBoeXNpY2FsTWF0ZXJpYWw6bTYsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6cE0sTWVzaFBob25nTWF0ZXJpYWw6ZzYsTWVzaFRvb25NYXRlcmlhbDpfNixNZXNoTm9ybWFsTWF0ZXJpYWw6eTYsTWVzaExhbWJlcnRNYXRlcmlhbDp2NixNZXNoRGVwdGhNYXRlcmlhbDplTSxNZXNoRGlzdGFuY2VNYXRlcmlhbDpyTSxNZXNoQmFzaWNNYXRlcmlhbDpzaCxNZXNoTWF0Y2FwTWF0ZXJpYWw6eDYsTGluZURhc2hlZE1hdGVyaWFsOmI2LExpbmVCYXNpY01hdGVyaWFsOkdpLE1hdGVyaWFsOnFpfSksam49e2FycmF5U2xpY2U6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBqbi5pc1R5cGVkQXJyYXkoZSk/bmV3IGUuY29uc3RydWN0b3IoZS5zdWJhcnJheSh0LHIhPT12b2lkIDA/cjplLmxlbmd0aCkpOmUuc2xpY2UodCxyKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4hZXx8IXImJmUuY29uc3RydWN0b3I9PT10P2U6dHlwZW9mIHQuQllURVNfUEVSX0VMRU1FTlQ9PSJudW1iZXIiP25ldyB0KGUpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpfSxpc1R5cGVkQXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfSxnZXRLZXlmcmFtZU9yZGVyOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxvKXtyZXR1cm4gZVtpXS1lW29dfWxldCByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO2ZvcihsZXQgaT0wO2khPT1yOysraSluW2ldPWk7cmV0dXJuIG4uc29ydCh0KSxufSxzb3J0ZWRBcnJheTpmdW5jdGlvbihlLHQscil7bGV0IG49ZS5sZW5ndGgsaT1uZXcgZS5jb25zdHJ1Y3RvcihuKTtmb3IobGV0IG89MCxhPTA7YSE9PW47KytvKXtsZXQgcz1yW29dKnQ7Zm9yKGxldCBsPTA7bCE9PXQ7KytsKWlbYSsrXT1lW3MrbF19cmV0dXJuIGl9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKGUsdCxyLG4pe2xldCBpPTEsbz1lWzBdO2Zvcig7byE9PXZvaWQgMCYmb1tuXT09PXZvaWQgMDspbz1lW2krK107aWYobz09PXZvaWQgMClyZXR1cm47bGV0IGE9b1tuXTtpZihhIT09dm9pZCAwKWlmKEFycmF5LmlzQXJyYXkoYSkpZG8gYT1vW25dLGEhPT12b2lkIDAmJih0LnB1c2goby50aW1lKSxyLnB1c2guYXBwbHkocixhKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCk7ZWxzZSBpZihhLnRvQXJyYXkhPT12b2lkIDApZG8gYT1vW25dLGEhPT12b2lkIDAmJih0LnB1c2goby50aW1lKSxhLnRvQXJyYXkocixyLmxlbmd0aCkpLG89ZVtpKytdO3doaWxlKG8hPT12b2lkIDApO2Vsc2UgZG8gYT1vW25dLGEhPT12b2lkIDAmJih0LnB1c2goby50aW1lKSxyLnB1c2goYSkpLG89ZVtpKytdO3doaWxlKG8hPT12b2lkIDApfSxzdWJjbGlwOmZ1bmN0aW9uKGUsdCxyLG4saT0zMCl7bGV0IG89ZS5jbG9uZSgpO28ubmFtZT10O2xldCBhPVtdO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbCl7bGV0IGM9by50cmFja3NbbF0sdT1jLmdldFZhbHVlU2l6ZSgpLGg9W10sZj1bXTtmb3IobGV0IHA9MDtwPGMudGltZXMubGVuZ3RoOysrcCl7bGV0IGQ9Yy50aW1lc1twXSppO2lmKCEoZDxyfHxkPj1uKSl7aC5wdXNoKGMudGltZXNbcF0pO2ZvcihsZXQgZz0wO2c8dTsrK2cpZi5wdXNoKGMudmFsdWVzW3AqdStnXSl9fWgubGVuZ3RoIT09MCYmKGMudGltZXM9am4uY29udmVydEFycmF5KGgsYy50aW1lcy5jb25zdHJ1Y3RvciksYy52YWx1ZXM9am4uY29udmVydEFycmF5KGYsYy52YWx1ZXMuY29uc3RydWN0b3IpLGEucHVzaChjKSl9by50cmFja3M9YTtsZXQgcz0xLzA7Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKXM+by50cmFja3NbbF0udGltZXNbMF0mJihzPW8udHJhY2tzW2xdLnRpbWVzWzBdKTtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpby50cmFja3NbbF0uc2hpZnQoLTEqcyk7cmV0dXJuIG8ucmVzZXREdXJhdGlvbigpLG99LG1ha2VDbGlwQWRkaXRpdmU6ZnVuY3Rpb24oZSx0PTAscj1lLG49MzApe248PTAmJihuPTMwKTtsZXQgaT1yLnRyYWNrcy5sZW5ndGgsbz10L247Zm9yKGxldCBhPTA7YTxpOysrYSl7bGV0IHM9ci50cmFja3NbYV0sbD1zLlZhbHVlVHlwZU5hbWU7aWYobD09PSJib29sInx8bD09PSJzdHJpbmciKWNvbnRpbnVlO2xldCBjPWUudHJhY2tzLmZpbmQoZnVuY3Rpb24oeSl7cmV0dXJuIHkubmFtZT09PXMubmFtZSYmeS5WYWx1ZVR5cGVOYW1lPT09bH0pO2lmKGM9PT12b2lkIDApY29udGludWU7bGV0IHU9MCxoPXMuZ2V0VmFsdWVTaXplKCk7cy5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHU9aC8zKTtsZXQgZj0wLHA9Yy5nZXRWYWx1ZVNpemUoKTtjLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYoZj1wLzMpO2xldCBkPXMudGltZXMubGVuZ3RoLTEsZztpZihvPD1zLnRpbWVzWzBdKXtsZXQgeT11LHg9aC11O2c9am4uYXJyYXlTbGljZShzLnZhbHVlcyx5LHgpfWVsc2UgaWYobz49cy50aW1lc1tkXSl7bGV0IHk9ZCpoK3UseD15K2gtdTtnPWpuLmFycmF5U2xpY2Uocy52YWx1ZXMseSx4KX1lbHNle2xldCB5PXMuY3JlYXRlSW50ZXJwb2xhbnQoKSx4PXUsYj1oLXU7eS5ldmFsdWF0ZShvKSxnPWpuLmFycmF5U2xpY2UoeS5yZXN1bHRCdWZmZXIseCxiKX1sPT09InF1YXRlcm5pb24iJiZuZXcgdmkoKS5mcm9tQXJyYXkoZykubm9ybWFsaXplKCkuY29uanVnYXRlKCkudG9BcnJheShnKTtsZXQgXz1jLnRpbWVzLmxlbmd0aDtmb3IobGV0IHk9MDt5PF87Kyt5KXtsZXQgeD15KnArZjtpZihsPT09InF1YXRlcm5pb24iKXZpLm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KGMudmFsdWVzLHgsZywwLGMudmFsdWVzLHgpO2Vsc2V7bGV0IGI9cC1mKjI7Zm9yKGxldCBTPTA7UzxiOysrUyljLnZhbHVlc1t4K1NdLT1nW1NdfX19cmV0dXJuIGUuYmxlbmRNb2RlPVJodCxlfX0sZmg9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPWkhPT12b2lkIDA/aTpuZXcgci5jb25zdHJ1Y3RvcihuKSx0aGlzLnNhbXBsZVZhbHVlcz1yLHRoaXMudmFsdWVTaXplPW4sdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtsZXQgcj10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxuPXRoaXMuX2NhY2hlZEluZGV4LGk9cltuXSxvPXJbbi0xXTt0OntlOntsZXQgYTtyOntuOmlmKCEodDxpKSl7Zm9yKGxldCBzPW4rMjs7KXtpZihpPT09dm9pZCAwKXtpZih0PG8pYnJlYWsgbjtyZXR1cm4gbj1yLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1uLHRoaXMuYWZ0ZXJFbmRfKG4tMSx0LG8pfWlmKG49PT1zKWJyZWFrO2lmKG89aSxpPXJbKytuXSx0PGkpYnJlYWsgZX1hPXIubGVuZ3RoO2JyZWFrIHJ9aWYoISh0Pj1vKSl7bGV0IHM9clsxXTt0PHMmJihuPTIsbz1zKTtmb3IobGV0IGw9bi0yOzspe2lmKG89PT12b2lkIDApcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LGkpO2lmKG49PT1sKWJyZWFrO2lmKGk9byxvPXJbLS1uLTFdLHQ+PW8pYnJlYWsgZX1hPW4sbj0wO2JyZWFrIHJ9YnJlYWsgdH1mb3IoO248YTspe2xldCBzPW4rYT4+PjE7dDxyW3NdP2E9czpuPXMrMX1pZihpPXJbbl0sbz1yW24tMV0sbz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsaSk7aWYoaT09PXZvaWQgMClyZXR1cm4gbj1yLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1uLHRoaXMuYWZ0ZXJFbmRfKG4tMSxvLHQpfXRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5pbnRlcnZhbENoYW5nZWRfKG4sbyxpKX1yZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8obixvLHQsaSl9Z2V0U2V0dGluZ3NfKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX31jb3B5U2FtcGxlVmFsdWVfKHQpe2xldCByPXRoaXMucmVzdWx0QnVmZmVyLG49dGhpcy5zYW1wbGVWYWx1ZXMsaT10aGlzLnZhbHVlU2l6ZSxvPXQqaTtmb3IobGV0IGE9MDthIT09aTsrK2EpclthXT1uW28rYV07cmV0dXJuIHJ9aW50ZXJwb2xhdGVfKCl7dGhyb3cgbmV3IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpfWludGVydmFsQ2hhbmdlZF8oKXt9fTtmaC5wcm90b3R5cGUuYmVmb3JlU3RhcnRfPWZoLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO2ZoLnByb3RvdHlwZS5hZnRlckVuZF89ZmgucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87dmFyIHdVPWNsYXNzIGV4dGVuZHMgZmh7Y29uc3RydWN0b3IodCxyLG4saSl7c3VwZXIodCxyLG4saSksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMCx0aGlzLkRlZmF1bHRTZXR0aW5nc189e2VuZGluZ1N0YXJ0OkV2LGVuZGluZ0VuZDpFdn19aW50ZXJ2YWxDaGFuZ2VkXyh0LHIsbil7bGV0IGk9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMsbz10LTIsYT10KzEscz1pW29dLGw9aVthXTtpZihzPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIFR2Om89dCxzPTIqci1uO2JyZWFrO2Nhc2UgWlA6bz1pLmxlbmd0aC0yLHM9citpW29dLWlbbysxXTticmVhaztkZWZhdWx0Om89dCxzPW59aWYobD09PXZvaWQgMClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgVHY6YT10LGw9MipuLXI7YnJlYWs7Y2FzZSBaUDphPTEsbD1uK2lbMV0taVswXTticmVhaztkZWZhdWx0OmE9dC0xLGw9cn1sZXQgYz0obi1yKSouNSx1PXRoaXMudmFsdWVTaXplO3RoaXMuX3dlaWdodFByZXY9Yy8oci1zKSx0aGlzLl93ZWlnaHROZXh0PWMvKGwtbiksdGhpcy5fb2Zmc2V0UHJldj1vKnUsdGhpcy5fb2Zmc2V0TmV4dD1hKnV9aW50ZXJwb2xhdGVfKHQscixuLGkpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLGE9dGhpcy5zYW1wbGVWYWx1ZXMscz10aGlzLnZhbHVlU2l6ZSxsPXQqcyxjPWwtcyx1PXRoaXMuX29mZnNldFByZXYsaD10aGlzLl9vZmZzZXROZXh0LGY9dGhpcy5fd2VpZ2h0UHJldixwPXRoaXMuX3dlaWdodE5leHQsZD0obi1yKS8oaS1yKSxnPWQqZCxfPWcqZCx5PS1mKl8rMipmKmctZipkLHg9KDErZikqXysoLTEuNS0yKmYpKmcrKC0uNStmKSpkKzEsYj0oLTEtcCkqXysoMS41K3ApKmcrLjUqZCxTPXAqXy1wKmc7Zm9yKGxldCBDPTA7QyE9PXM7KytDKW9bQ109eSphW3UrQ10reCphW2MrQ10rYiphW2wrQ10rUyphW2grQ107cmV0dXJuIG99fSx3Nj1jbGFzcyBleHRlbmRzIGZoe2NvbnN0cnVjdG9yKHQscixuLGkpe3N1cGVyKHQscixuLGkpfWludGVycG9sYXRlXyh0LHIsbixpKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHM9dGhpcy52YWx1ZVNpemUsbD10KnMsYz1sLXMsdT0obi1yKS8oaS1yKSxoPTEtdTtmb3IobGV0IGY9MDtmIT09czsrK2Ypb1tmXT1hW2MrZl0qaCthW2wrZl0qdTtyZXR1cm4gb319LFNVPWNsYXNzIGV4dGVuZHMgZmh7Y29uc3RydWN0b3IodCxyLG4saSl7c3VwZXIodCxyLG4saSl9aW50ZXJwb2xhdGVfKHQpe3JldHVybiB0aGlzLmNvcHlTYW1wbGVWYWx1ZV8odC0xKX19LERsPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGkpe2lmKHQ9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKHI9PT12b2lkIDB8fHIubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK3QpO3RoaXMubmFtZT10LHRoaXMudGltZXM9am4uY29udmVydEFycmF5KHIsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9am4uY29udmVydEFycmF5KG4sdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpLHRoaXMuc2V0SW50ZXJwb2xhdGlvbihpfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1zdGF0aWMgdG9KU09OKHQpe2xldCByPXQuY29uc3RydWN0b3IsbjtpZihyLnRvSlNPTiE9PXRoaXMudG9KU09OKW49ci50b0pTT04odCk7ZWxzZXtuPXtuYW1lOnQubmFtZSx0aW1lczpqbi5jb252ZXJ0QXJyYXkodC50aW1lcyxBcnJheSksdmFsdWVzOmpuLmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2xldCBpPXQuZ2V0SW50ZXJwb2xhdGlvbigpO2khPT10LkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYobi5pbnRlcnBvbGF0aW9uPWkpfXJldHVybiBuLnR5cGU9dC5WYWx1ZVR5cGVOYW1lLG59SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUodCl7cmV0dXJuIG5ldyBTVSh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgdzYodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfUludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCh0KXtyZXR1cm4gbmV3IHdVKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1zZXRJbnRlcnBvbGF0aW9uKHQpe2xldCByO3N3aXRjaCh0KXtjYXNlICRQOnI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIEtQOnI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSBlVTpyPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoO2JyZWFrfWlmKHI9PT12b2lkIDApe2xldCBuPSJ1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAiK3RoaXMuVmFsdWVUeXBlTmFtZSsiIGtleWZyYW1lIHRyYWNrIG5hbWVkICIrdGhpcy5uYW1lO2lmKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9PT12b2lkIDApaWYodCE9PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKG4pO3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixuKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PXIsdGhpc31nZXRJbnRlcnBvbGF0aW9uKCl7c3dpdGNoKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpyZXR1cm4gJFA7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gS1A7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gZVV9fWdldFZhbHVlU2l6ZSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9c2hpZnQodCl7aWYodCE9PTApe2xldCByPXRoaXMudGltZXM7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pcltuXSs9dH1yZXR1cm4gdGhpc31zY2FsZSh0KXtpZih0IT09MSl7bGV0IHI9dGhpcy50aW1lcztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbilyW25dKj10fXJldHVybiB0aGlzfXRyaW0odCxyKXtsZXQgbj10aGlzLnRpbWVzLGk9bi5sZW5ndGgsbz0wLGE9aS0xO2Zvcig7byE9PWkmJm5bb108dDspKytvO2Zvcig7YSE9PS0xJiZuW2FdPnI7KS0tYTtpZigrK2EsbyE9PTB8fGEhPT1pKXtvPj1hJiYoYT1NYXRoLm1heChhLDEpLG89YS0xKTtsZXQgcz10aGlzLmdldFZhbHVlU2l6ZSgpO3RoaXMudGltZXM9am4uYXJyYXlTbGljZShuLG8sYSksdGhpcy52YWx1ZXM9am4uYXJyYXlTbGljZSh0aGlzLnZhbHVlcyxvKnMsYSpzKX1yZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwLHI9dGhpcy5nZXRWYWx1ZVNpemUoKTtyLU1hdGguZmxvb3IocikhPT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IG49dGhpcy50aW1lcyxpPXRoaXMudmFsdWVzLG89bi5sZW5ndGg7bz09PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBhPW51bGw7Zm9yKGxldCBzPTA7cyE9PW87cysrKXtsZXQgbD1uW3NdO2lmKHR5cGVvZiBsPT0ibnVtYmVyIiYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxzLGwpLHQ9ITE7YnJlYWt9aWYoYSE9PW51bGwmJmE+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLHMsbCxhKSx0PSExO2JyZWFrfWE9bH1pZihpIT09dm9pZCAwJiZqbi5pc1R5cGVkQXJyYXkoaSkpZm9yKGxldCBzPTAsbD1pLmxlbmd0aDtzIT09bDsrK3Mpe2xldCBjPWlbc107aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMscyxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PWpuLmFycmF5U2xpY2UodGhpcy50aW1lcykscj1qbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxuPXRoaXMuZ2V0VmFsdWVTaXplKCksaT10aGlzLmdldEludGVycG9sYXRpb24oKT09PWVVLG89dC5sZW5ndGgtMSxhPTE7Zm9yKGxldCBzPTE7czxvOysrcyl7bGV0IGw9ITEsYz10W3NdLHU9dFtzKzFdO2lmKGMhPT11JiYocyE9PTF8fGMhPT10WzBdKSlpZihpKWw9ITA7ZWxzZXtsZXQgaD1zKm4sZj1oLW4scD1oK247Zm9yKGxldCBkPTA7ZCE9PW47KytkKXtsZXQgZz1yW2grZF07aWYoZyE9PXJbZitkXXx8ZyE9PXJbcCtkXSl7bD0hMDticmVha319fWlmKGwpe2lmKHMhPT1hKXt0W2FdPXRbc107bGV0IGg9cypuLGY9YSpuO2ZvcihsZXQgcD0wO3AhPT1uOysrcClyW2YrcF09cltoK3BdfSsrYX19aWYobz4wKXt0W2FdPXRbb107Zm9yKGxldCBzPW8qbixsPWEqbixjPTA7YyE9PW47KytjKXJbbCtjXT1yW3MrY107KythfXJldHVybiBhIT09dC5sZW5ndGg/KHRoaXMudGltZXM9am4uYXJyYXlTbGljZSh0LDAsYSksdGhpcy52YWx1ZXM9am4uYXJyYXlTbGljZShyLDAsYSpuKSk6KHRoaXMudGltZXM9dCx0aGlzLnZhbHVlcz1yKSx0aGlzfWNsb25lKCl7bGV0IHQ9am4uYXJyYXlTbGljZSh0aGlzLnRpbWVzLDApLHI9am4uYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKSxuPXRoaXMuY29uc3RydWN0b3IsaT1uZXcgbih0aGlzLm5hbWUsdCxyKTtyZXR1cm4gaS5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LGl9fTtEbC5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O0RsLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O0RsLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1LUDt2YXIgYW09Y2xhc3MgZXh0ZW5kcyBEbHt9O2FtLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJib29sIjthbS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O2FtLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0kUDthbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDthbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgUzY9Y2xhc3MgZXh0ZW5kcyBEbHt9O1M2LnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJjb2xvciI7dmFyIFp2PWNsYXNzIGV4dGVuZHMgRGx7fTtadi5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ibnVtYmVyIjt2YXIgTVU9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKX1pbnRlcnBvbGF0ZV8odCxyLG4saSl7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIsYT10aGlzLnNhbXBsZVZhbHVlcyxzPXRoaXMudmFsdWVTaXplLGw9KG4tcikvKGktciksYz10KnM7Zm9yKGxldCB1PWMrcztjIT09dTtjKz00KXZpLnNsZXJwRmxhdChvLDAsYSxjLXMsYSxjLGwpO3JldHVybiBvfX0sWDA9Y2xhc3MgZXh0ZW5kcyBEbHtJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBNVSh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9fTtYMC5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0icXVhdGVybmlvbiI7WDAucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPUtQO1gwLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBzbT1jbGFzcyBleHRlbmRzIERse307c20ucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyI7c20ucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheTtzbS5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249JFA7c20ucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDA7c20ucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIEp2PWNsYXNzIGV4dGVuZHMgRGx7fTtKdi5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0idmVjdG9yIjt2YXIgUXY9Y2xhc3N7Y29uc3RydWN0b3IodCxyPS0xLG4saT1YVSl7dGhpcy5uYW1lPXQsdGhpcy50cmFja3M9bix0aGlzLmR1cmF0aW9uPXIsdGhpcy5ibGVuZE1vZGU9aSx0aGlzLnV1aWQ9TmwoKSx0aGlzLmR1cmF0aW9uPDAmJnRoaXMucmVzZXREdXJhdGlvbigpfXN0YXRpYyBwYXJzZSh0KXtsZXQgcj1bXSxuPXQudHJhY2tzLGk9MS8odC5mcHN8fDEpO2ZvcihsZXQgYT0wLHM9bi5sZW5ndGg7YSE9PXM7KythKXIucHVzaChzMHIoblthXSkuc2NhbGUoaSkpO2xldCBvPW5ldyB0aGlzKHQubmFtZSx0LmR1cmF0aW9uLHIsdC5ibGVuZE1vZGUpO3JldHVybiBvLnV1aWQ9dC51dWlkLG99c3RhdGljIHRvSlNPTih0KXtsZXQgcj1bXSxuPXQudHJhY2tzLGk9e25hbWU6dC5uYW1lLGR1cmF0aW9uOnQuZHVyYXRpb24sdHJhY2tzOnIsdXVpZDp0LnV1aWQsYmxlbmRNb2RlOnQuYmxlbmRNb2RlfTtmb3IobGV0IG89MCxhPW4ubGVuZ3RoO28hPT1hOysrbylyLnB1c2goRGwudG9KU09OKG5bb10pKTtyZXR1cm4gaX1zdGF0aWMgQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UodCxyLG4saSl7bGV0IG89ci5sZW5ndGgsYT1bXTtmb3IobGV0IHM9MDtzPG87cysrKXtsZXQgbD1bXSxjPVtdO2wucHVzaCgocytvLTEpJW8scywocysxKSVvKSxjLnB1c2goMCwxLDApO2xldCB1PWpuLmdldEtleWZyYW1lT3JkZXIobCk7bD1qbi5zb3J0ZWRBcnJheShsLDEsdSksYz1qbi5zb3J0ZWRBcnJheShjLDEsdSksIWkmJmxbMF09PT0wJiYobC5wdXNoKG8pLGMucHVzaChjWzBdKSksYS5wdXNoKG5ldyBadigiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1siK3Jbc10ubmFtZSsiXSIsbCxjKS5zY2FsZSgxL24pKX1yZXR1cm4gbmV3IHRoaXModCwtMSxhKX1zdGF0aWMgZmluZEJ5TmFtZSh0LHIpe2xldCBuPXQ7aWYoIUFycmF5LmlzQXJyYXkodCkpe2xldCBpPXQ7bj1pLmdlb21ldHJ5JiZpLmdlb21ldHJ5LmFuaW1hdGlvbnN8fGkuYW5pbWF0aW9uc31mb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylpZihuW2ldLm5hbWU9PT1yKXJldHVybiBuW2ldO3JldHVybiBudWxsfXN0YXRpYyBDcmVhdGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlcyh0LHIsbil7bGV0IGk9e30sbz0vXihbXHctXSo/KShbXGRdKykkLztmb3IobGV0IHM9MCxsPXQubGVuZ3RoO3M8bDtzKyspe2xldCBjPXRbc10sdT1jLm5hbWUubWF0Y2gobyk7aWYodSYmdS5sZW5ndGg+MSl7bGV0IGg9dVsxXSxmPWlbaF07Znx8KGlbaF09Zj1bXSksZi5wdXNoKGMpfX1sZXQgYT1bXTtmb3IobGV0IHMgaW4gaSlhLnB1c2godGhpcy5DcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZShzLGlbc10scixuKSk7cmV0dXJuIGF9c3RhdGljIHBhcnNlQW5pbWF0aW9uKHQscil7aWYoIXQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkFuaW1hdGlvbkNsaXA6IE5vIGFuaW1hdGlvbiBpbiBKU09OTG9hZGVyIGRhdGEuIiksbnVsbDtsZXQgbj1mdW5jdGlvbihoLGYscCxkLGcpe2lmKHAubGVuZ3RoIT09MCl7bGV0IF89W10seT1bXTtqbi5mbGF0dGVuSlNPTihwLF8seSxkKSxfLmxlbmd0aCE9PTAmJmcucHVzaChuZXcgaChmLF8seSkpfX0saT1bXSxvPXQubmFtZXx8ImRlZmF1bHQiLGE9dC5mcHN8fDMwLHM9dC5ibGVuZE1vZGUsbD10Lmxlbmd0aHx8LTEsYz10LmhpZXJhcmNoeXx8W107Zm9yKGxldCBoPTA7aDxjLmxlbmd0aDtoKyspe2xldCBmPWNbaF0ua2V5cztpZighKCFmfHxmLmxlbmd0aD09PTApKWlmKGZbMF0ubW9ycGhUYXJnZXRzKXtsZXQgcD17fSxkO2ZvcihkPTA7ZDxmLmxlbmd0aDtkKyspaWYoZltkXS5tb3JwaFRhcmdldHMpZm9yKGxldCBnPTA7ZzxmW2RdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7ZysrKXBbZltkXS5tb3JwaFRhcmdldHNbZ11dPS0xO2ZvcihsZXQgZyBpbiBwKXtsZXQgXz1bXSx5PVtdO2ZvcihsZXQgeD0wO3ghPT1mW2RdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7Kyt4KXtsZXQgYj1mW2RdO18ucHVzaChiLnRpbWUpLHkucHVzaChiLm1vcnBoVGFyZ2V0PT09Zz8xOjApfWkucHVzaChuZXcgWnYoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK2crIl0iLF8seSkpfWw9cC5sZW5ndGgqKGF8fDEpfWVsc2V7bGV0IHA9Ii5ib25lc1siK3JbaF0ubmFtZSsiXSI7bihKdixwKyIucG9zaXRpb24iLGYsInBvcyIsaSksbihYMCxwKyIucXVhdGVybmlvbiIsZiwicm90IixpKSxuKEp2LHArIi5zY2FsZSIsZiwic2NsIixpKX19cmV0dXJuIGkubGVuZ3RoPT09MD9udWxsOm5ldyB0aGlzKG8sbCxpLHMpfXJlc2V0RHVyYXRpb24oKXtsZXQgdD10aGlzLnRyYWNrcyxyPTA7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXRoaXMudHJhY2tzW25dO3I9TWF0aC5tYXgocixvLnRpbWVzW28udGltZXMubGVuZ3RoLTFdKX1yZXR1cm4gdGhpcy5kdXJhdGlvbj1yLHRoaXN9dHJpbSgpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS50cmltKDAsdGhpcy5kdXJhdGlvbik7cmV0dXJuIHRoaXN9dmFsaWRhdGUoKXtsZXQgdD0hMDtmb3IobGV0IHI9MDtyPHRoaXMudHJhY2tzLmxlbmd0aDtyKyspdD10JiZ0aGlzLnRyYWNrc1tyXS52YWxpZGF0ZSgpO3JldHVybiB0fW9wdGltaXplKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLm9wdGltaXplKCk7cmV0dXJuIHRoaXN9Y2xvbmUoKXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPHRoaXMudHJhY2tzLmxlbmd0aDtyKyspdC5wdXNoKHRoaXMudHJhY2tzW3JdLmNsb25lKCkpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLm5hbWUsdGhpcy5kdXJhdGlvbix0LHRoaXMuYmxlbmRNb2RlKX10b0pTT04oKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b0pTT04odGhpcyl9fTtmdW5jdGlvbiBhMHIoZSl7c3dpdGNoKGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJzY2FsYXIiOmNhc2UiZG91YmxlIjpjYXNlImZsb2F0IjpjYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjpyZXR1cm4gWnY7Y2FzZSJ2ZWN0b3IiOmNhc2UidmVjdG9yMiI6Y2FzZSJ2ZWN0b3IzIjpjYXNlInZlY3RvcjQiOnJldHVybiBKdjtjYXNlImNvbG9yIjpyZXR1cm4gUzY7Y2FzZSJxdWF0ZXJuaW9uIjpyZXR1cm4gWDA7Y2FzZSJib29sIjpjYXNlImJvb2xlYW4iOnJldHVybiBhbTtjYXNlInN0cmluZyI6cmV0dXJuIHNtfXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVW5zdXBwb3J0ZWQgdHlwZU5hbWU6ICIrZSl9ZnVuY3Rpb24gczByKGUpe2lmKGUudHlwZT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlIik7bGV0IHQ9YTByKGUudHlwZSk7aWYoZS50aW1lcz09PXZvaWQgMCl7bGV0IHI9W10sbj1bXTtqbi5mbGF0dGVuSlNPTihlLmtleXMscixuLCJ2YWx1ZSIpLGUudGltZXM9cixlLnZhbHVlcz1ufXJldHVybiB0LnBhcnNlIT09dm9pZCAwP3QucGFyc2UoZSk6bmV3IHQoZS5uYW1lLGUudGltZXMsZS52YWx1ZXMsZS5pbnRlcnBvbGF0aW9uKX12YXIgdHg9e2VuYWJsZWQ6ITEsZmlsZXM6e30sYWRkOmZ1bmN0aW9uKGUsdCl7dGhpcy5lbmFibGVkIT09ITEmJih0aGlzLmZpbGVzW2VdPXQpfSxnZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5lbmFibGVkIT09ITEpcmV0dXJuIHRoaXMuZmlsZXNbZV19LHJlbW92ZTpmdW5jdGlvbihlKXtkZWxldGUgdGhpcy5maWxlc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmZpbGVzPXt9fX0sTTY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe2xldCBpPXRoaXMsbz0hMSxhPTAscz0wLGwsYz1bXTt0aGlzLm9uU3RhcnQ9dm9pZCAwLHRoaXMub25Mb2FkPXQsdGhpcy5vblByb2dyZXNzPXIsdGhpcy5vbkVycm9yPW4sdGhpcy5pdGVtU3RhcnQ9ZnVuY3Rpb24odSl7cysrLG89PT0hMSYmaS5vblN0YXJ0IT09dm9pZCAwJiZpLm9uU3RhcnQodSxhLHMpLG89ITB9LHRoaXMuaXRlbUVuZD1mdW5jdGlvbih1KXthKyssaS5vblByb2dyZXNzIT09dm9pZCAwJiZpLm9uUHJvZ3Jlc3ModSxhLHMpLGE9PT1zJiYobz0hMSxpLm9uTG9hZCE9PXZvaWQgMCYmaS5vbkxvYWQoKSl9LHRoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKHUpe2kub25FcnJvciE9PXZvaWQgMCYmaS5vbkVycm9yKHUpfSx0aGlzLnJlc29sdmVVUkw9ZnVuY3Rpb24odSl7cmV0dXJuIGw/bCh1KTp1fSx0aGlzLnNldFVSTE1vZGlmaWVyPWZ1bmN0aW9uKHUpe3JldHVybiBsPXUsdGhpc30sdGhpcy5hZGRIYW5kbGVyPWZ1bmN0aW9uKHUsaCl7cmV0dXJuIGMucHVzaCh1LGgpLHRoaXN9LHRoaXMucmVtb3ZlSGFuZGxlcj1mdW5jdGlvbih1KXtsZXQgaD1jLmluZGV4T2YodSk7cmV0dXJuIGghPT0tMSYmYy5zcGxpY2UoaCwyKSx0aGlzfSx0aGlzLmdldEhhbmRsZXI9ZnVuY3Rpb24odSl7Zm9yKGxldCBoPTAsZj1jLmxlbmd0aDtoPGY7aCs9Mil7bGV0IHA9Y1toXSxkPWNbaCsxXTtpZihwLmdsb2JhbCYmKHAubGFzdEluZGV4PTApLHAudGVzdCh1KSlyZXR1cm4gZH1yZXR1cm4gbnVsbH19fSxRZmU9bmV3IE02LGVhPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubWFuYWdlcj10IT09dm9pZCAwP3Q6UWZlLHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LHIpe2xldCBuPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7bi5sb2FkKHQsaSxyLG8pfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LFlkPXt9LEpjPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10eC5nZXQodCk7aWYobyE9PXZvaWQgMClyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ciYmcihvKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksbztpZihZZFt0XSE9PXZvaWQgMCl7WWRbdF0ucHVzaCh7b25Mb2FkOnIsb25Qcm9ncmVzczpuLG9uRXJyb3I6aX0pO3JldHVybn1ZZFt0XT1bXSxZZFt0XS5wdXNoKHtvbkxvYWQ6cixvblByb2dyZXNzOm4sb25FcnJvcjppfSk7bGV0IGE9bmV3IFJlcXVlc3QodCx7aGVhZGVyczpuZXcgSGVhZGVycyh0aGlzLnJlcXVlc3RIZWFkZXIpLGNyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4ifSkscz10aGlzLm1pbWVUeXBlLGw9dGhpcy5yZXNwb25zZVR5cGU7ZmV0Y2goYSkudGhlbihjPT57aWYoYy5zdGF0dXM9PT0yMDB8fGMuc3RhdHVzPT09MCl7aWYoYy5zdGF0dXM9PT0wJiZjb25zb2xlLndhcm4oIlRIUkVFLkZpbGVMb2FkZXI6IEhUVFAgU3RhdHVzIDAgcmVjZWl2ZWQuIiksdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0idW5kZWZpbmVkInx8Yy5ib2R5LmdldFJlYWRlcj09PXZvaWQgMClyZXR1cm4gYztsZXQgdT1ZZFt0XSxoPWMuYm9keS5nZXRSZWFkZXIoKSxmPWMuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIikscD1mP3BhcnNlSW50KGYpOjAsZD1wIT09MCxnPTAsXz1uZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0KHkpe3goKTtmdW5jdGlvbiB4KCl7aC5yZWFkKCkudGhlbigoe2RvbmU6Yix2YWx1ZTpTfSk9PntpZihiKXkuY2xvc2UoKTtlbHNle2crPVMuYnl0ZUxlbmd0aDtsZXQgQz1uZXcgUHJvZ3Jlc3NFdmVudCgicHJvZ3Jlc3MiLHtsZW5ndGhDb21wdXRhYmxlOmQsbG9hZGVkOmcsdG90YWw6cH0pO2ZvcihsZXQgUD0wLGs9dS5sZW5ndGg7UDxrO1ArKyl7bGV0IE89dVtQXTtPLm9uUHJvZ3Jlc3MmJk8ub25Qcm9ncmVzcyhDKX15LmVucXVldWUoUykseCgpfX0pfX19KTtyZXR1cm4gbmV3IFJlc3BvbnNlKF8pfWVsc2UgdGhyb3cgRXJyb3IoYGZldGNoIGZvciAiJHtjLnVybH0iIHJlc3BvbmRlZCB3aXRoICR7Yy5zdGF0dXN9OiAke2Muc3RhdHVzVGV4dH1gKX0pLnRoZW4oYz0+e3N3aXRjaChsKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gYy5hcnJheUJ1ZmZlcigpO2Nhc2UiYmxvYiI6cmV0dXJuIGMuYmxvYigpO2Nhc2UiZG9jdW1lbnQiOnJldHVybiBjLnRleHQoKS50aGVuKHU9Pm5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodSxzKSk7Y2FzZSJqc29uIjpyZXR1cm4gYy5qc29uKCk7ZGVmYXVsdDppZihzPT09dm9pZCAwKXJldHVybiBjLnRleHQoKTt7bGV0IGg9L2NoYXJzZXQ9Ij8oW147IlxzXSopIj8vaS5leGVjKHMpLGY9aCYmaFsxXT9oWzFdLnRvTG93ZXJDYXNlKCk6dm9pZCAwLHA9bmV3IFRleHREZWNvZGVyKGYpO3JldHVybiBjLmFycmF5QnVmZmVyKCkudGhlbihkPT5wLmRlY29kZShkKSl9fX0pLnRoZW4oYz0+e3R4LmFkZCh0LGMpO2xldCB1PVlkW3RdO2RlbGV0ZSBZZFt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBwPXVbaF07cC5vbkxvYWQmJnAub25Mb2FkKGMpfX0pLmNhdGNoKGM9PntsZXQgdT1ZZFt0XTtpZih1PT09dm9pZCAwKXRocm93IHRoaXMubWFuYWdlci5pdGVtRXJyb3IodCksYztkZWxldGUgWWRbdF07Zm9yKGxldCBoPTAsZj11Lmxlbmd0aDtoPGY7aCsrKXtsZXQgcD11W2hdO3Aub25FcnJvciYmcC5vbkVycm9yKGMpfXRoaXMubWFuYWdlci5pdGVtRXJyb3IodCl9KS5maW5hbGx5KCgpPT57dGhpcy5tYW5hZ2VyLml0ZW1FbmQodCl9KSx0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpfXNldFJlc3BvbnNlVHlwZSh0KXtyZXR1cm4gdGhpcy5yZXNwb25zZVR5cGU9dCx0aGlzfXNldE1pbWVUeXBlKHQpe3JldHVybiB0aGlzLm1pbWVUeXBlPXQsdGhpc319LGFodD1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89dGhpcyxhPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2Euc2V0UGF0aCh0aGlzLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCxmdW5jdGlvbihzKXt0cnl7cihvLnBhcnNlKEpTT04ucGFyc2UocykpKX1jYXRjaChsKXtpP2kobCk6Y29uc29sZS5lcnJvcihsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0sbixpKX1wYXJzZSh0KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7bGV0IGk9UXYucGFyc2UodFtuXSk7ci5wdXNoKGkpfXJldHVybiByfX0sc2h0PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9W10scz1uZXcgbzYsbD1uZXcgSmModGhpcy5tYW5hZ2VyKTtsLnNldFBhdGgodGhpcy5wYXRoKSxsLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxsLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxsLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyk7bGV0IGM9MDtmdW5jdGlvbiB1KGgpe2wubG9hZCh0W2hdLGZ1bmN0aW9uKGYpe2xldCBwPW8ucGFyc2UoZiwhMCk7YVtoXT17d2lkdGg6cC53aWR0aCxoZWlnaHQ6cC5oZWlnaHQsZm9ybWF0OnAuZm9ybWF0LG1pcG1hcHM6cC5taXBtYXBzfSxjKz0xLGM9PT02JiYocC5taXBtYXBDb3VudD09PTEmJihzLm1pbkZpbHRlcj1vaSkscy5pbWFnZT1hLHMuZm9ybWF0PXAuZm9ybWF0LHMubmVlZHNVcGRhdGU9ITAsciYmcihzKSl9LG4saSl9aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IGg9MCxmPXQubGVuZ3RoO2g8ZjsrK2gpdShoKTtlbHNlIGwubG9hZCh0LGZ1bmN0aW9uKGgpe2xldCBmPW8ucGFyc2UoaCwhMCk7aWYoZi5pc0N1YmVtYXApe2xldCBwPWYubWlwbWFwcy5sZW5ndGgvZi5taXBtYXBDb3VudDtmb3IobGV0IGQ9MDtkPHA7ZCsrKXthW2RdPXttaXBtYXBzOltdfTtmb3IobGV0IGc9MDtnPGYubWlwbWFwQ291bnQ7ZysrKWFbZF0ubWlwbWFwcy5wdXNoKGYubWlwbWFwc1tkKmYubWlwbWFwQ291bnQrZ10pLGFbZF0uZm9ybWF0PWYuZm9ybWF0LGFbZF0ud2lkdGg9Zi53aWR0aCxhW2RdLmhlaWdodD1mLmhlaWdodH1zLmltYWdlPWF9ZWxzZSBzLmltYWdlLndpZHRoPWYud2lkdGgscy5pbWFnZS5oZWlnaHQ9Zi5oZWlnaHQscy5taXBtYXBzPWYubWlwbWFwcztmLm1pcG1hcENvdW50PT09MSYmKHMubWluRmlsdGVyPW9pKSxzLmZvcm1hdD1mLmZvcm1hdCxzLm5lZWRzVXBkYXRlPSEwLHImJnIocyl9LG4saSk7cmV0dXJuIHN9fSxleD1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7dGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLGE9dHguZ2V0KHQpO2lmKGEhPT12b2lkIDApcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe3ImJnIoYSksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLGE7bGV0IHM9UVAoImltZyIpO2Z1bmN0aW9uIGwoKXt1KCksdHguYWRkKHQsdGhpcyksciYmcih0aGlzKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiBjKGgpe3UoKSxpJiZpKGgpLG8ubWFuYWdlci5pdGVtRXJyb3IodCksby5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gdSgpe3MucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSkscy5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSl9cmV0dXJuIHMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSkscy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSksdC5zdWJzdHIoMCw1KSE9PSJkYXRhOiImJnRoaXMuY3Jvc3NPcmlnaW4hPT12b2lkIDAmJihzLmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pLG8ubWFuYWdlci5pdGVtU3RhcnQodCkscy5zcmM9dCxzfX0sRVU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPW5ldyBIMCxhPW5ldyBleCh0aGlzLm1hbmFnZXIpO2Euc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksYS5zZXRQYXRoKHRoaXMucGF0aCk7bGV0IHM9MDtmdW5jdGlvbiBsKGMpe2EubG9hZCh0W2NdLGZ1bmN0aW9uKHUpe28uaW1hZ2VzW2NdPXUscysrLHM9PT02JiYoby5uZWVkc1VwZGF0ZT0hMCxyJiZyKG8pKX0sdm9pZCAwLGkpfWZvcihsZXQgYz0wO2M8dC5sZW5ndGg7KytjKWwoYyk7cmV0dXJuIG99fSxUVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89dGhpcyxhPW5ldyBKZCxzPW5ldyBKYyh0aGlzLm1hbmFnZXIpO3JldHVybiBzLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxzLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxzLnNldFBhdGgodGhpcy5wYXRoKSxzLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscykscy5sb2FkKHQsZnVuY3Rpb24obCl7bGV0IGM9by5wYXJzZShsKTshY3x8KGMuaW1hZ2UhPT12b2lkIDA/YS5pbWFnZT1jLmltYWdlOmMuZGF0YSE9PXZvaWQgMCYmKGEuaW1hZ2Uud2lkdGg9Yy53aWR0aCxhLmltYWdlLmhlaWdodD1jLmhlaWdodCxhLmltYWdlLmRhdGE9Yy5kYXRhKSxhLndyYXBTPWMud3JhcFMhPT12b2lkIDA/Yy53cmFwUzpKbyxhLndyYXBUPWMud3JhcFQhPT12b2lkIDA/Yy53cmFwVDpKbyxhLm1hZ0ZpbHRlcj1jLm1hZ0ZpbHRlciE9PXZvaWQgMD9jLm1hZ0ZpbHRlcjpvaSxhLm1pbkZpbHRlcj1jLm1pbkZpbHRlciE9PXZvaWQgMD9jLm1pbkZpbHRlcjpvaSxhLmFuaXNvdHJvcHk9Yy5hbmlzb3Ryb3B5IT09dm9pZCAwP2MuYW5pc290cm9weToxLGMuZW5jb2RpbmchPT12b2lkIDAmJihhLmVuY29kaW5nPWMuZW5jb2RpbmcpLGMuZmxpcFkhPT12b2lkIDAmJihhLmZsaXBZPWMuZmxpcFkpLGMuZm9ybWF0IT09dm9pZCAwJiYoYS5mb3JtYXQ9Yy5mb3JtYXQpLGMudHlwZSE9PXZvaWQgMCYmKGEudHlwZT1jLnR5cGUpLGMubWlwbWFwcyE9PXZvaWQgMCYmKGEubWlwbWFwcz1jLm1pcG1hcHMsYS5taW5GaWx0ZXI9b3gpLGMubWlwbWFwQ291bnQ9PT0xJiYoYS5taW5GaWx0ZXI9b2kpLGMuZ2VuZXJhdGVNaXBtYXBzIT09dm9pZCAwJiYoYS5nZW5lcmF0ZU1pcG1hcHM9Yy5nZW5lcmF0ZU1pcG1hcHMpLGEubmVlZHNVcGRhdGU9ITAsciYmcihhLGMpKX0sbixpKSxhfX0sQ1U9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPW5ldyB4aSxhPW5ldyBleCh0aGlzLm1hbmFnZXIpO3JldHVybiBhLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe28uaW1hZ2U9cyxvLm5lZWRzVXBkYXRlPSEwLHIhPT12b2lkIDAmJnIobyl9LG4saSksb319LE9sPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgbmUodCksdGhpcy5pbnRlbnNpdHk9cn1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxyLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdGhpcy5ncm91bmRDb2xvciE9PXZvaWQgMCYmKHIub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHRoaXMuZGlzdGFuY2UhPT12b2lkIDAmJihyLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx0aGlzLmFuZ2xlIT09dm9pZCAwJiYoci5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdGhpcy5kZWNheSE9PXZvaWQgMCYmKHIub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHRoaXMucGVudW1icmEhPT12b2lkIDAmJihyLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx0aGlzLnNoYWRvdyE9PXZvaWQgMCYmKHIub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSkscn19O09sLnByb3RvdHlwZS5pc0xpZ2h0PSEwO3ZhciBFNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcih0LG4pLHRoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkob3IuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMuZ3JvdW5kQ29sb3I9bmV3IG5lKHIpfWNvcHkodCl7cmV0dXJuIE9sLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmdyb3VuZENvbG9yLmNvcHkodC5ncm91bmRDb2xvciksdGhpc319O0U2LnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodD0hMDt2YXIgbWhlPW5ldyBNZSxnaGU9bmV3IGosX2hlPW5ldyBqLFQ2PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY2FtZXJhPXQsdGhpcy5iaWFzPTAsdGhpcy5ub3JtYWxCaWFzPTAsdGhpcy5yYWRpdXM9MSx0aGlzLmJsdXJTYW1wbGVzPTgsdGhpcy5tYXBTaXplPW5ldyBMdCg1MTIsNTEyKSx0aGlzLm1hcD1udWxsLHRoaXMubWFwUGFzcz1udWxsLHRoaXMubWF0cml4PW5ldyBNZSx0aGlzLmF1dG9VcGRhdGU9ITAsdGhpcy5uZWVkc1VwZGF0ZT0hMSx0aGlzLl9mcnVzdHVtPW5ldyBOdix0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEx0KDEsMSksdGhpcy5fdmlld3BvcnRDb3VudD0xLHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGVuKDAsMCwxLDEpXX1nZXRWaWV3cG9ydENvdW50KCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0Q291bnR9Z2V0RnJ1c3R1bSgpe3JldHVybiB0aGlzLl9mcnVzdHVtfXVwZGF0ZU1hdHJpY2VzKHQpe2xldCByPXRoaXMuY2FtZXJhLG49dGhpcy5tYXRyaXg7Z2hlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxyLnBvc2l0aW9uLmNvcHkoZ2hlKSxfaGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxyLmxvb2tBdChfaGUpLHIudXBkYXRlTWF0cml4V29ybGQoKSxtaGUubXVsdGlwbHlNYXRyaWNlcyhyLnByb2plY3Rpb25NYXRyaXgsci5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMuX2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgobWhlKSxuLnNldCguNSwwLDAsLjUsMCwuNSwwLC41LDAsMCwuNSwuNSwwLDAsMCwxKSxuLm11bHRpcGx5KHIucHJvamVjdGlvbk1hdHJpeCksbi5tdWx0aXBseShyLm1hdHJpeFdvcmxkSW52ZXJzZSl9Z2V0Vmlld3BvcnQodCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0c1t0XX1nZXRGcmFtZUV4dGVudHMoKXtyZXR1cm4gdGhpcy5fZnJhbWVFeHRlbnRzfWRpc3Bvc2UoKXt0aGlzLm1hcCYmdGhpcy5tYXAuZGlzcG9zZSgpLHRoaXMubWFwUGFzcyYmdGhpcy5tYXBQYXNzLmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiB0aGlzLmNhbWVyYT10LmNhbWVyYS5jbG9uZSgpLHRoaXMuYmlhcz10LmJpYXMsdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpcy5tYXBTaXplLmNvcHkodC5tYXBTaXplKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD17fTtyZXR1cm4gdGhpcy5iaWFzIT09MCYmKHQuYmlhcz10aGlzLmJpYXMpLHRoaXMubm9ybWFsQmlhcyE9PTAmJih0Lm5vcm1hbEJpYXM9dGhpcy5ub3JtYWxCaWFzKSx0aGlzLnJhZGl1cyE9PTEmJih0LnJhZGl1cz10aGlzLnJhZGl1cyksKHRoaXMubWFwU2l6ZS54IT09NTEyfHx0aGlzLm1hcFNpemUueSE9PTUxMikmJih0Lm1hcFNpemU9dGhpcy5tYXBTaXplLnRvQXJyYXkoKSksdC5jYW1lcmE9dGhpcy5jYW1lcmEudG9KU09OKCExKS5vYmplY3QsZGVsZXRlIHQuY2FtZXJhLm1hdHJpeCx0fX0sQVU9Y2xhc3MgZXh0ZW5kcyBUNntjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBVaSg1MCwxLC41LDUwMCkpLHRoaXMuZm9jdXM9MX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgcj10aGlzLmNhbWVyYSxuPUpQKjIqdC5hbmdsZSp0aGlzLmZvY3VzLGk9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQsbz10LmRpc3RhbmNlfHxyLmZhcjsobiE9PXIuZm92fHxpIT09ci5hc3BlY3R8fG8hPT1yLmZhcikmJihyLmZvdj1uLHIuYXNwZWN0PWksci5mYXI9byxyLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksc3VwZXIudXBkYXRlTWF0cmljZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZvY3VzPXQuZm9jdXMsdGhpc319O0FVLnByb3RvdHlwZS5pc1Nwb3RMaWdodFNoYWRvdz0hMDt2YXIgQzY9Y2xhc3MgZXh0ZW5kcyBPbHtjb25zdHJ1Y3Rvcih0LHIsbj0wLGk9TWF0aC5QSS8zLG89MCxhPTEpe3N1cGVyKHQsciksdGhpcy50eXBlPSJTcG90TGlnaHQiLHRoaXMucG9zaXRpb24uY29weShvci5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IG9yLHRoaXMuZGlzdGFuY2U9bix0aGlzLmFuZ2xlPWksdGhpcy5wZW51bWJyYT1vLHRoaXMuZGVjYXk9YSx0aGlzLnNoYWRvdz1uZXcgQVV9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvTWF0aC5QSX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBlbnVtYnJhPXQucGVudW1icmEsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX07QzYucHJvdG90eXBlLmlzU3BvdExpZ2h0PSEwO3ZhciB5aGU9bmV3IE1lLEZQPW5ldyBqLGJ1dD1uZXcgaixQVT1jbGFzcyBleHRlbmRzIFQ2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpKDkwLDEsLjUsNTAwKSksdGhpcy5fZnJhbWVFeHRlbnRzPW5ldyBMdCg0LDIpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9Nix0aGlzLl92aWV3cG9ydHM9W25ldyBlbigyLDEsMSwxKSxuZXcgZW4oMCwxLDEsMSksbmV3IGVuKDMsMSwxLDEpLG5ldyBlbigxLDEsMSwxKSxuZXcgZW4oMywwLDEsMSksbmV3IGVuKDEsMCwxLDEpXSx0aGlzLl9jdWJlRGlyZWN0aW9ucz1bbmV3IGooMSwwLDApLG5ldyBqKC0xLDAsMCksbmV3IGooMCwwLDEpLG5ldyBqKDAsMCwtMSksbmV3IGooMCwxLDApLG5ldyBqKDAsLTEsMCldLHRoaXMuX2N1YmVVcHM9W25ldyBqKDAsMSwwKSxuZXcgaigwLDEsMCksbmV3IGooMCwxLDApLG5ldyBqKDAsMSwwKSxuZXcgaigwLDAsMSksbmV3IGooMCwwLC0xKV19dXBkYXRlTWF0cmljZXModCxyPTApe2xldCBuPXRoaXMuY2FtZXJhLGk9dGhpcy5tYXRyaXgsbz10LmRpc3RhbmNlfHxuLmZhcjtvIT09bi5mYXImJihuLmZhcj1vLG4udXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxGUC5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksbi5wb3NpdGlvbi5jb3B5KEZQKSxidXQuY29weShuLnBvc2l0aW9uKSxidXQuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW3JdKSxuLnVwLmNvcHkodGhpcy5fY3ViZVVwc1tyXSksbi5sb29rQXQoYnV0KSxuLnVwZGF0ZU1hdHJpeFdvcmxkKCksaS5tYWtlVHJhbnNsYXRpb24oLUZQLngsLUZQLnksLUZQLnopLHloZS5tdWx0aXBseU1hdHJpY2VzKG4ucHJvamVjdGlvbk1hdHJpeCxuLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh5aGUpfX07UFUucHJvdG90eXBlLmlzUG9pbnRMaWdodFNoYWRvdz0hMDt2YXIgQTY9Y2xhc3MgZXh0ZW5kcyBPbHtjb25zdHJ1Y3Rvcih0LHIsbj0wLGk9MSl7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlBvaW50TGlnaHQiLHRoaXMuZGlzdGFuY2U9bix0aGlzLmRlY2F5PWksdGhpcy5zaGFkb3c9bmV3IFBVfWdldCBwb3dlcigpe3JldHVybiB0aGlzLmludGVuc2l0eSo0Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvKDQqTWF0aC5QSSl9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGlzdGFuY2U9dC5kaXN0YW5jZSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX07QTYucHJvdG90eXBlLmlzUG9pbnRMaWdodD0hMDt2YXIgSVU9Y2xhc3MgZXh0ZW5kcyBUNntjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBEdigtNSw1LDUsLTUsLjUsNTAwKSl9fTtJVS5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0U2hhZG93PSEwO3ZhciBQNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IkRpcmVjdGlvbmFsTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShvci5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IG9yLHRoaXMuc2hhZG93PW5ldyBJVX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtQNi5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0PSEwO3ZhciBJNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IkFtYmllbnRMaWdodCJ9fTtJNi5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHQ9ITA7dmFyIEw2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyLG49MTAsaT0xMCl7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlJlY3RBcmVhTGlnaHQiLHRoaXMud2lkdGg9bix0aGlzLmhlaWdodD1pfWdldCBwb3dlcigpe3JldHVybiB0aGlzLmludGVuc2l0eSp0aGlzLndpZHRoKnRoaXMuaGVpZ2h0Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvKHRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpc310b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC53aWR0aD10aGlzLndpZHRoLHIub2JqZWN0LmhlaWdodD10aGlzLmhlaWdodCxyfX07TDYucHJvdG90eXBlLmlzUmVjdEFyZWFMaWdodD0hMDt2YXIgazY9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmNvZWZmaWNpZW50cz1bXTtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzLnB1c2gobmV3IGopfXNldCh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLmNvcHkodFtyXSk7cmV0dXJuIHRoaXN9emVybygpe2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHNbdF0uc2V0KDAsMCwwKTtyZXR1cm4gdGhpc31nZXRBdCh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiByLmNvcHkoYVswXSkubXVsdGlwbHlTY2FsYXIoLjI4MjA5NSksci5hZGRTY2FsZWRWZWN0b3IoYVsxXSwuNDg4NjAzKmkpLHIuYWRkU2NhbGVkVmVjdG9yKGFbMl0sLjQ4ODYwMypvKSxyLmFkZFNjYWxlZFZlY3RvcihhWzNdLC40ODg2MDMqbiksci5hZGRTY2FsZWRWZWN0b3IoYVs0XSwxLjA5MjU0OCoobippKSksci5hZGRTY2FsZWRWZWN0b3IoYVs1XSwxLjA5MjU0OCooaSpvKSksci5hZGRTY2FsZWRWZWN0b3IoYVs2XSwuMzE1MzkyKigzKm8qby0xKSksci5hZGRTY2FsZWRWZWN0b3IoYVs3XSwxLjA5MjU0OCoobipvKSksci5hZGRTY2FsZWRWZWN0b3IoYVs4XSwuNTQ2Mjc0KihuKm4taSppKSkscn1nZXRJcnJhZGlhbmNlQXQodCxyKXtsZXQgbj10LngsaT10Lnksbz10LnosYT10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gci5jb3B5KGFbMF0pLm11bHRpcGx5U2NhbGFyKC44ODYyMjcpLHIuYWRkU2NhbGVkVmVjdG9yKGFbMV0sMiouNTExNjY0KmkpLHIuYWRkU2NhbGVkVmVjdG9yKGFbMl0sMiouNTExNjY0Km8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbM10sMiouNTExNjY0Km4pLHIuYWRkU2NhbGVkVmVjdG9yKGFbNF0sMiouNDI5MDQzKm4qaSksci5hZGRTY2FsZWRWZWN0b3IoYVs1XSwyKi40MjkwNDMqaSpvKSxyLmFkZFNjYWxlZFZlY3RvcihhWzZdLC43NDMxMjUqbypvLS4yNDc3MDgpLHIuYWRkU2NhbGVkVmVjdG9yKGFbN10sMiouNDI5MDQzKm4qbyksci5hZGRTY2FsZWRWZWN0b3IoYVs4XSwuNDI5MDQzKihuKm4taSppKSkscn1hZGQodCl7Zm9yKGxldCByPTA7cjw5O3IrKyl0aGlzLmNvZWZmaWNpZW50c1tyXS5hZGQodC5jb2VmZmljaWVudHNbcl0pO3JldHVybiB0aGlzfWFkZFNjYWxlZFNIKHQscil7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmNvZWZmaWNpZW50c1tuXS5hZGRTY2FsZWRWZWN0b3IodC5jb2VmZmljaWVudHNbbl0scik7cmV0dXJuIHRoaXN9c2NhbGUodCl7Zm9yKGxldCByPTA7cjw5O3IrKyl0aGlzLmNvZWZmaWNpZW50c1tyXS5tdWx0aXBseVNjYWxhcih0KTtyZXR1cm4gdGhpc31sZXJwKHQscil7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmNvZWZmaWNpZW50c1tuXS5sZXJwKHQuY29lZmZpY2llbnRzW25dLHIpO3JldHVybiB0aGlzfWVxdWFscyh0KXtmb3IobGV0IHI9MDtyPDk7cisrKWlmKCF0aGlzLmNvZWZmaWNpZW50c1tyXS5lcXVhbHModC5jb2VmZmljaWVudHNbcl0pKXJldHVybiExO3JldHVybiEwfWNvcHkodCl7cmV0dXJuIHRoaXMuc2V0KHQuY29lZmZpY2llbnRzKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9ZnJvbUFycmF5KHQscj0wKXtsZXQgbj10aGlzLmNvZWZmaWNpZW50cztmb3IobGV0IGk9MDtpPDk7aSsrKW5baV0uZnJvbUFycmF5KHQscitpKjMpO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxyPTApe2xldCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspbltpXS50b0FycmF5KHQscitpKjMpO3JldHVybiB0fXN0YXRpYyBnZXRCYXNpc0F0KHQscil7bGV0IG49dC54LGk9dC55LG89dC56O3JbMF09LjI4MjA5NSxyWzFdPS40ODg2MDMqaSxyWzJdPS40ODg2MDMqbyxyWzNdPS40ODg2MDMqbixyWzRdPTEuMDkyNTQ4Km4qaSxyWzVdPTEuMDkyNTQ4KmkqbyxyWzZdPS4zMTUzOTIqKDMqbypvLTEpLHJbN109MS4wOTI1NDgqbipvLHJbOF09LjU0NjI3NCoobipuLWkqaSl9fTtrNi5wcm90b3R5cGUuaXNTcGhlcmljYWxIYXJtb25pY3MzPSEwO3ZhciByeD1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQ9bmV3IGs2LHI9MSl7c3VwZXIodm9pZCAwLHIpLHRoaXMuc2g9dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuc2guY29weSh0LnNoKSx0aGlzfWZyb21KU09OKHQpe3JldHVybiB0aGlzLmludGVuc2l0eT10LmludGVuc2l0eSx0aGlzLnNoLmZyb21BcnJheSh0LnNoKSx0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHIub2JqZWN0LnNoPXRoaXMuc2gudG9BcnJheSgpLHJ9fTtyeC5wcm90b3R5cGUuaXNMaWdodFByb2JlPSEwO3ZhciBMVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudGV4dHVyZXM9e319bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpjKG8ubWFuYWdlcik7YS5zZXRQYXRoKG8ucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKG8ucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHMoby53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe3RyeXtyKG8ucGFyc2UoSlNPTi5wYXJzZShzKSkpfWNhdGNoKGwpe2k/aShsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxuLGkpfXBhcnNlKHQpe2xldCByPXRoaXMudGV4dHVyZXM7ZnVuY3Rpb24gbihvKXtyZXR1cm4gcltvXT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbExvYWRlcjogVW5kZWZpbmVkIHRleHR1cmUiLG8pLHJbb119bGV0IGk9bmV3IG8wclt0LnR5cGVdO2lmKHQudXVpZCE9PXZvaWQgMCYmKGkudXVpZD10LnV1aWQpLHQubmFtZSE9PXZvaWQgMCYmKGkubmFtZT10Lm5hbWUpLHQuY29sb3IhPT12b2lkIDAmJmkuY29sb3IhPT12b2lkIDAmJmkuY29sb3Iuc2V0SGV4KHQuY29sb3IpLHQucm91Z2huZXNzIT09dm9pZCAwJiYoaS5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLHQubWV0YWxuZXNzIT09dm9pZCAwJiYoaS5tZXRhbG5lc3M9dC5tZXRhbG5lc3MpLHQuc2hlZW4hPT12b2lkIDAmJihpLnNoZWVuPXQuc2hlZW4pLHQuc2hlZW5Db2xvciE9PXZvaWQgMCYmKGkuc2hlZW5Db2xvcj1uZXcgbmUoKS5zZXRIZXgodC5zaGVlbkNvbG9yKSksdC5zaGVlblJvdWdobmVzcyE9PXZvaWQgMCYmKGkuc2hlZW5Sb3VnaG5lc3M9dC5zaGVlblJvdWdobmVzcyksdC5lbWlzc2l2ZSE9PXZvaWQgMCYmaS5lbWlzc2l2ZSE9PXZvaWQgMCYmaS5lbWlzc2l2ZS5zZXRIZXgodC5lbWlzc2l2ZSksdC5zcGVjdWxhciE9PXZvaWQgMCYmaS5zcGVjdWxhciE9PXZvaWQgMCYmaS5zcGVjdWxhci5zZXRIZXgodC5zcGVjdWxhciksdC5zcGVjdWxhckludGVuc2l0eSE9PXZvaWQgMCYmKGkuc3BlY3VsYXJJbnRlbnNpdHk9dC5zcGVjdWxhckludGVuc2l0eSksdC5zcGVjdWxhckNvbG9yIT09dm9pZCAwJiZpLnNwZWN1bGFyQ29sb3IhPT12b2lkIDAmJmkuc3BlY3VsYXJDb2xvci5zZXRIZXgodC5zcGVjdWxhckNvbG9yKSx0LnNoaW5pbmVzcyE9PXZvaWQgMCYmKGkuc2hpbmluZXNzPXQuc2hpbmluZXNzKSx0LmNsZWFyY29hdCE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0PXQuY2xlYXJjb2F0KSx0LmNsZWFyY29hdFJvdWdobmVzcyE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Um91Z2huZXNzPXQuY2xlYXJjb2F0Um91Z2huZXNzKSx0LnRyYW5zbWlzc2lvbiE9PXZvaWQgMCYmKGkudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uKSx0LnRoaWNrbmVzcyE9PXZvaWQgMCYmKGkudGhpY2tuZXNzPXQudGhpY2tuZXNzKSx0LmF0dGVudWF0aW9uRGlzdGFuY2UhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uRGlzdGFuY2U9dC5hdHRlbnVhdGlvbkRpc3RhbmNlKSx0LmF0dGVudWF0aW9uQ29sb3IhPT12b2lkIDAmJmkuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmaS5hdHRlbnVhdGlvbkNvbG9yLnNldEhleCh0LmF0dGVudWF0aW9uQ29sb3IpLHQuZm9nIT09dm9pZCAwJiYoaS5mb2c9dC5mb2cpLHQuZmxhdFNoYWRpbmchPT12b2lkIDAmJihpLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcpLHQuYmxlbmRpbmchPT12b2lkIDAmJihpLmJsZW5kaW5nPXQuYmxlbmRpbmcpLHQuY29tYmluZSE9PXZvaWQgMCYmKGkuY29tYmluZT10LmNvbWJpbmUpLHQuc2lkZSE9PXZvaWQgMCYmKGkuc2lkZT10LnNpZGUpLHQuc2hhZG93U2lkZSE9PXZvaWQgMCYmKGkuc2hhZG93U2lkZT10LnNoYWRvd1NpZGUpLHQub3BhY2l0eSE9PXZvaWQgMCYmKGkub3BhY2l0eT10Lm9wYWNpdHkpLHQudHJhbnNwYXJlbnQhPT12b2lkIDAmJihpLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQpLHQuYWxwaGFUZXN0IT09dm9pZCAwJiYoaS5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QpLHQuZGVwdGhUZXN0IT09dm9pZCAwJiYoaS5kZXB0aFRlc3Q9dC5kZXB0aFRlc3QpLHQuZGVwdGhXcml0ZSE9PXZvaWQgMCYmKGkuZGVwdGhXcml0ZT10LmRlcHRoV3JpdGUpLHQuY29sb3JXcml0ZSE9PXZvaWQgMCYmKGkuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUpLHQuYWxwaGFXcml0ZSE9PXZvaWQgMCYmKGkuYWxwaGFXcml0ZT10LmFscGhhV3JpdGUpLHQuc3RlbmNpbFdyaXRlIT09dm9pZCAwJiYoaS5zdGVuY2lsV3JpdGU9dC5zdGVuY2lsV3JpdGUpLHQuc3RlbmNpbFdyaXRlTWFzayE9PXZvaWQgMCYmKGkuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2spLHQuc3RlbmNpbEZ1bmMhPT12b2lkIDAmJihpLnN0ZW5jaWxGdW5jPXQuc3RlbmNpbEZ1bmMpLHQuc3RlbmNpbFJlZiE9PXZvaWQgMCYmKGkuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYpLHQuc3RlbmNpbEZ1bmNNYXNrIT09dm9pZCAwJiYoaS5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2spLHQuc3RlbmNpbEZhaWwhPT12b2lkIDAmJihpLnN0ZW5jaWxGYWlsPXQuc3RlbmNpbEZhaWwpLHQuc3RlbmNpbFpGYWlsIT09dm9pZCAwJiYoaS5zdGVuY2lsWkZhaWw9dC5zdGVuY2lsWkZhaWwpLHQuc3RlbmNpbFpQYXNzIT09dm9pZCAwJiYoaS5zdGVuY2lsWlBhc3M9dC5zdGVuY2lsWlBhc3MpLHQud2lyZWZyYW1lIT09dm9pZCAwJiYoaS53aXJlZnJhbWU9dC53aXJlZnJhbWUpLHQud2lyZWZyYW1lTGluZXdpZHRoIT09dm9pZCAwJiYoaS53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgpLHQud2lyZWZyYW1lTGluZWNhcCE9PXZvaWQgMCYmKGkud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXApLHQud2lyZWZyYW1lTGluZWpvaW4hPT12b2lkIDAmJihpLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4pLHQucm90YXRpb24hPT12b2lkIDAmJihpLnJvdGF0aW9uPXQucm90YXRpb24pLHQubGluZXdpZHRoIT09MSYmKGkubGluZXdpZHRoPXQubGluZXdpZHRoKSx0LmRhc2hTaXplIT09dm9pZCAwJiYoaS5kYXNoU2l6ZT10LmRhc2hTaXplKSx0LmdhcFNpemUhPT12b2lkIDAmJihpLmdhcFNpemU9dC5nYXBTaXplKSx0LnNjYWxlIT09dm9pZCAwJiYoaS5zY2FsZT10LnNjYWxlKSx0LnBvbHlnb25PZmZzZXQhPT12b2lkIDAmJihpLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0KSx0LnBvbHlnb25PZmZzZXRGYWN0b3IhPT12b2lkIDAmJihpLnBvbHlnb25PZmZzZXRGYWN0b3I9dC5wb2x5Z29uT2Zmc2V0RmFjdG9yKSx0LnBvbHlnb25PZmZzZXRVbml0cyE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldFVuaXRzPXQucG9seWdvbk9mZnNldFVuaXRzKSx0LmRpdGhlcmluZyE9PXZvaWQgMCYmKGkuZGl0aGVyaW5nPXQuZGl0aGVyaW5nKSx0LmFscGhhVG9Db3ZlcmFnZSE9PXZvaWQgMCYmKGkuYWxwaGFUb0NvdmVyYWdlPXQuYWxwaGFUb0NvdmVyYWdlKSx0LnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMCYmKGkucHJlbXVsdGlwbGllZEFscGhhPXQucHJlbXVsdGlwbGllZEFscGhhKSx0LnZpc2libGUhPT12b2lkIDAmJihpLnZpc2libGU9dC52aXNpYmxlKSx0LnRvbmVNYXBwZWQhPT12b2lkIDAmJihpLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkKSx0LnVzZXJEYXRhIT09dm9pZCAwJiYoaS51c2VyRGF0YT10LnVzZXJEYXRhKSx0LnZlcnRleENvbG9ycyE9PXZvaWQgMCYmKHR5cGVvZiB0LnZlcnRleENvbG9ycz09Im51bWJlciI/aS52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnM+MDppLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycyksdC51bmlmb3JtcyE9PXZvaWQgMClmb3IobGV0IG8gaW4gdC51bmlmb3Jtcyl7bGV0IGE9dC51bmlmb3Jtc1tvXTtzd2l0Y2goaS51bmlmb3Jtc1tvXT17fSxhLnR5cGUpe2Nhc2UidCI6aS51bmlmb3Jtc1tvXS52YWx1ZT1uKGEudmFsdWUpO2JyZWFrO2Nhc2UiYyI6aS51bmlmb3Jtc1tvXS52YWx1ZT1uZXcgbmUoKS5zZXRIZXgoYS52YWx1ZSk7YnJlYWs7Y2FzZSJ2MiI6aS51bmlmb3Jtc1tvXS52YWx1ZT1uZXcgTHQoKS5mcm9tQXJyYXkoYS52YWx1ZSk7YnJlYWs7Y2FzZSJ2MyI6aS51bmlmb3Jtc1tvXS52YWx1ZT1uZXcgaigpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlInY0IjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBlbigpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlIm0zIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBraSgpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlIm00IjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBNZSgpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztkZWZhdWx0OmkudW5pZm9ybXNbb10udmFsdWU9YS52YWx1ZX19aWYodC5kZWZpbmVzIT09dm9pZCAwJiYoaS5kZWZpbmVzPXQuZGVmaW5lcyksdC52ZXJ0ZXhTaGFkZXIhPT12b2lkIDAmJihpLnZlcnRleFNoYWRlcj10LnZlcnRleFNoYWRlciksdC5mcmFnbWVudFNoYWRlciE9PXZvaWQgMCYmKGkuZnJhZ21lbnRTaGFkZXI9dC5mcmFnbWVudFNoYWRlciksdC5leHRlbnNpb25zIT09dm9pZCAwKWZvcihsZXQgbyBpbiB0LmV4dGVuc2lvbnMpaS5leHRlbnNpb25zW29dPXQuZXh0ZW5zaW9uc1tvXTtpZih0LnNoYWRpbmchPT12b2lkIDAmJihpLmZsYXRTaGFkaW5nPXQuc2hhZGluZz09PTEpLHQuc2l6ZSE9PXZvaWQgMCYmKGkuc2l6ZT10LnNpemUpLHQuc2l6ZUF0dGVudWF0aW9uIT09dm9pZCAwJiYoaS5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24pLHQubWFwIT09dm9pZCAwJiYoaS5tYXA9bih0Lm1hcCkpLHQubWF0Y2FwIT09dm9pZCAwJiYoaS5tYXRjYXA9bih0Lm1hdGNhcCkpLHQuYWxwaGFNYXAhPT12b2lkIDAmJihpLmFscGhhTWFwPW4odC5hbHBoYU1hcCkpLHQuYnVtcE1hcCE9PXZvaWQgMCYmKGkuYnVtcE1hcD1uKHQuYnVtcE1hcCkpLHQuYnVtcFNjYWxlIT09dm9pZCAwJiYoaS5idW1wU2NhbGU9dC5idW1wU2NhbGUpLHQubm9ybWFsTWFwIT09dm9pZCAwJiYoaS5ub3JtYWxNYXA9bih0Lm5vcm1hbE1hcCkpLHQubm9ybWFsTWFwVHlwZSE9PXZvaWQgMCYmKGkubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUpLHQubm9ybWFsU2NhbGUhPT12b2lkIDApe2xldCBvPXQubm9ybWFsU2NhbGU7QXJyYXkuaXNBcnJheShvKT09PSExJiYobz1bbyxvXSksaS5ub3JtYWxTY2FsZT1uZXcgTHQoKS5mcm9tQXJyYXkobyl9cmV0dXJuIHQuZGlzcGxhY2VtZW50TWFwIT09dm9pZCAwJiYoaS5kaXNwbGFjZW1lbnRNYXA9bih0LmRpc3BsYWNlbWVudE1hcCkpLHQuZGlzcGxhY2VtZW50U2NhbGUhPT12b2lkIDAmJihpLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUpLHQuZGlzcGxhY2VtZW50QmlhcyE9PXZvaWQgMCYmKGkuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMpLHQucm91Z2huZXNzTWFwIT09dm9pZCAwJiYoaS5yb3VnaG5lc3NNYXA9bih0LnJvdWdobmVzc01hcCkpLHQubWV0YWxuZXNzTWFwIT09dm9pZCAwJiYoaS5tZXRhbG5lc3NNYXA9bih0Lm1ldGFsbmVzc01hcCkpLHQuZW1pc3NpdmVNYXAhPT12b2lkIDAmJihpLmVtaXNzaXZlTWFwPW4odC5lbWlzc2l2ZU1hcCkpLHQuZW1pc3NpdmVJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHkpLHQuc3BlY3VsYXJNYXAhPT12b2lkIDAmJihpLnNwZWN1bGFyTWFwPW4odC5zcGVjdWxhck1hcCkpLHQuc3BlY3VsYXJJbnRlbnNpdHlNYXAhPT12b2lkIDAmJihpLnNwZWN1bGFySW50ZW5zaXR5TWFwPW4odC5zcGVjdWxhckludGVuc2l0eU1hcCkpLHQuc3BlY3VsYXJDb2xvck1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJDb2xvck1hcD1uKHQuc3BlY3VsYXJDb2xvck1hcCkpLHQuZW52TWFwIT09dm9pZCAwJiYoaS5lbnZNYXA9bih0LmVudk1hcCkpLHQuZW52TWFwSW50ZW5zaXR5IT09dm9pZCAwJiYoaS5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHkpLHQucmVmbGVjdGl2aXR5IT09dm9pZCAwJiYoaS5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHkpLHQucmVmcmFjdGlvblJhdGlvIT09dm9pZCAwJiYoaS5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8pLHQubGlnaHRNYXAhPT12b2lkIDAmJihpLmxpZ2h0TWFwPW4odC5saWdodE1hcCkpLHQubGlnaHRNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHkpLHQuYW9NYXAhPT12b2lkIDAmJihpLmFvTWFwPW4odC5hb01hcCkpLHQuYW9NYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHkpLHQuZ3JhZGllbnRNYXAhPT12b2lkIDAmJihpLmdyYWRpZW50TWFwPW4odC5ncmFkaWVudE1hcCkpLHQuY2xlYXJjb2F0TWFwIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRNYXA9bih0LmNsZWFyY29hdE1hcCkpLHQuY2xlYXJjb2F0Um91Z2huZXNzTWFwIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9bih0LmNsZWFyY29hdFJvdWdobmVzc01hcCkpLHQuY2xlYXJjb2F0Tm9ybWFsTWFwIT09dm9pZCAwJiYoaS5jbGVhcmNvYXROb3JtYWxNYXA9bih0LmNsZWFyY29hdE5vcm1hbE1hcCkpLHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUhPT12b2lkIDAmJihpLmNsZWFyY29hdE5vcm1hbFNjYWxlPW5ldyBMdCgpLmZyb21BcnJheSh0LmNsZWFyY29hdE5vcm1hbFNjYWxlKSksdC50cmFuc21pc3Npb25NYXAhPT12b2lkIDAmJihpLnRyYW5zbWlzc2lvbk1hcD1uKHQudHJhbnNtaXNzaW9uTWFwKSksdC50aGlja25lc3NNYXAhPT12b2lkIDAmJihpLnRoaWNrbmVzc01hcD1uKHQudGhpY2tuZXNzTWFwKSksdC5zaGVlbkNvbG9yTWFwIT09dm9pZCAwJiYoaS5zaGVlbkNvbG9yTWFwPW4odC5zaGVlbkNvbG9yTWFwKSksdC5zaGVlblJvdWdobmVzc01hcCE9PXZvaWQgMCYmKGkuc2hlZW5Sb3VnaG5lc3NNYXA9bih0LnNoZWVuUm91Z2huZXNzTWFwKSksaX1zZXRUZXh0dXJlcyh0KXtyZXR1cm4gdGhpcy50ZXh0dXJlcz10LHRoaXN9fSxkTT1jbGFzc3tzdGF0aWMgZGVjb2RlVGV4dCh0KXtpZih0eXBlb2YgVGV4dERlY29kZXIhPSJ1bmRlZmluZWQiKXJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUodCk7bGV0IHI9IiI7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUodFtuXSk7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHIpKX1jYXRjaChuKXtyZXR1cm4gcn19c3RhdGljIGV4dHJhY3RVcmxCYXNlKHQpe2xldCByPXQubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gcj09PS0xPyIuLyI6dC5zdWJzdHIoMCxyKzEpfXN0YXRpYyByZXNvbHZlVVJMKHQscil7cmV0dXJuIHR5cGVvZiB0IT0ic3RyaW5nInx8dD09PSIiPyIiOigvXmh0dHBzPzpcL1wvL2kudGVzdChyKSYmL15cLy8udGVzdCh0KSYmKHI9ci5yZXBsYWNlKC8oXmh0dHBzPzpcL1wvW15cL10rKS4qL2ksIiQxIikpLC9eKGh0dHBzPzopP1wvXC8vaS50ZXN0KHQpfHwvXmRhdGE6LiosLiokL2kudGVzdCh0KXx8L15ibG9iOi4qJC9pLnRlc3QodCk/dDpyK3QpfX0sUjY9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSIsdGhpcy5pbnN0YW5jZUNvdW50PTEvMH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VDb3VudD10Lmluc3RhbmNlQ291bnQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKHRoaXMpO3JldHVybiB0Lmluc3RhbmNlQ291bnQ9dGhpcy5pbnN0YW5jZUNvdW50LHQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCx0fX07UjYucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk9ITA7dmFyIGtVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpjKG8ubWFuYWdlcik7YS5zZXRQYXRoKG8ucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKG8ucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHMoby53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe3RyeXtyKG8ucGFyc2UoSlNPTi5wYXJzZShzKSkpfWNhdGNoKGwpe2k/aShsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxuLGkpfXBhcnNlKHQpe2xldCByPXt9LG49e307ZnVuY3Rpb24gaShwLGQpe2lmKHJbZF0hPT12b2lkIDApcmV0dXJuIHJbZF07bGV0IF89cC5pbnRlcmxlYXZlZEJ1ZmZlcnNbZF0seT1vKHAsXy5idWZmZXIpLHg9QjMoXy50eXBlLHkpLGI9bmV3IGVtKHgsXy5zdHJpZGUpO3JldHVybiBiLnV1aWQ9Xy51dWlkLHJbZF09YixifWZ1bmN0aW9uIG8ocCxkKXtpZihuW2RdIT09dm9pZCAwKXJldHVybiBuW2RdO2xldCBfPXAuYXJyYXlCdWZmZXJzW2RdLHk9bmV3IFVpbnQzMkFycmF5KF8pLmJ1ZmZlcjtyZXR1cm4gbltkXT15LHl9bGV0IGE9dC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5P25ldyBSNjpuZXcgUGUscz10LmRhdGEuaW5kZXg7aWYocyE9PXZvaWQgMCl7bGV0IHA9QjMocy50eXBlLHMuYXJyYXkpO2Euc2V0SW5kZXgobmV3IEplKHAsMSkpfWxldCBsPXQuZGF0YS5hdHRyaWJ1dGVzO2ZvcihsZXQgcCBpbiBsKXtsZXQgZD1sW3BdLGc7aWYoZC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgXz1pKHQuZGF0YSxkLmRhdGEpO2c9bmV3IHRwKF8sZC5pdGVtU2l6ZSxkLm9mZnNldCxkLm5vcm1hbGl6ZWQpfWVsc2V7bGV0IF89QjMoZC50eXBlLGQuYXJyYXkpLHk9ZC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT9ybTpKZTtnPW5ldyB5KF8sZC5pdGVtU2l6ZSxkLm5vcm1hbGl6ZWQpfWQubmFtZSE9PXZvaWQgMCYmKGcubmFtZT1kLm5hbWUpLGQudXNhZ2UhPT12b2lkIDAmJmcuc2V0VXNhZ2UoZC51c2FnZSksZC51cGRhdGVSYW5nZSE9PXZvaWQgMCYmKGcudXBkYXRlUmFuZ2Uub2Zmc2V0PWQudXBkYXRlUmFuZ2Uub2Zmc2V0LGcudXBkYXRlUmFuZ2UuY291bnQ9ZC51cGRhdGVSYW5nZS5jb3VudCksYS5zZXRBdHRyaWJ1dGUocCxnKX1sZXQgYz10LmRhdGEubW9ycGhBdHRyaWJ1dGVzO2lmKGMpZm9yKGxldCBwIGluIGMpe2xldCBkPWNbcF0sZz1bXTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX10sYjtpZih4LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2xldCBTPWkodC5kYXRhLHguZGF0YSk7Yj1uZXcgdHAoUyx4Lml0ZW1TaXplLHgub2Zmc2V0LHgubm9ybWFsaXplZCl9ZWxzZXtsZXQgUz1CMyh4LnR5cGUseC5hcnJheSk7Yj1uZXcgSmUoUyx4Lml0ZW1TaXplLHgubm9ybWFsaXplZCl9eC5uYW1lIT09dm9pZCAwJiYoYi5uYW1lPXgubmFtZSksZy5wdXNoKGIpfWEubW9ycGhBdHRyaWJ1dGVzW3BdPWd9dC5kYXRhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlJiYoYS5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMCk7bGV0IGg9dC5kYXRhLmdyb3Vwc3x8dC5kYXRhLmRyYXdjYWxsc3x8dC5kYXRhLm9mZnNldHM7aWYoaCE9PXZvaWQgMClmb3IobGV0IHA9MCxkPWgubGVuZ3RoO3AhPT1kOysrcCl7bGV0IGc9aFtwXTthLmFkZEdyb3VwKGcuc3RhcnQsZy5jb3VudCxnLm1hdGVyaWFsSW5kZXgpfWxldCBmPXQuZGF0YS5ib3VuZGluZ1NwaGVyZTtpZihmIT09dm9pZCAwKXtsZXQgcD1uZXcgajtmLmNlbnRlciE9PXZvaWQgMCYmcC5mcm9tQXJyYXkoZi5jZW50ZXIpLGEuYm91bmRpbmdTcGhlcmU9bmV3IFpmKHAsZi5yYWRpdXMpfXJldHVybiB0Lm5hbWUmJihhLm5hbWU9dC5uYW1lKSx0LnVzZXJEYXRhJiYoYS51c2VyRGF0YT10LnVzZXJEYXRhKSxhfX0sbGh0PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9dGhpcy5wYXRoPT09IiI/ZE0uZXh0cmFjdFVybEJhc2UodCk6dGhpcy5wYXRoO3RoaXMucmVzb3VyY2VQYXRoPXRoaXMucmVzb3VyY2VQYXRofHxhO2xldCBzPW5ldyBKYyh0aGlzLm1hbmFnZXIpO3Muc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxzLmxvYWQodCxmdW5jdGlvbihsKXtsZXQgYz1udWxsO3RyeXtjPUpTT04ucGFyc2UobCl9Y2F0Y2goaCl7aSE9PXZvaWQgMCYmaShoKSxjb25zb2xlLmVycm9yKCJUSFJFRTpPYmplY3RMb2FkZXI6IENhbid0IHBhcnNlICIrdCsiLiIsaC5tZXNzYWdlKTtyZXR1cm59bGV0IHU9Yy5tZXRhZGF0YTtpZih1PT09dm9pZCAwfHx1LnR5cGU9PT12b2lkIDB8fHUudHlwZS50b0xvd2VyQ2FzZSgpPT09Imdlb21ldHJ5Iil7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW4ndCBsb2FkICIrdCk7cmV0dXJufW8ucGFyc2UoYyxyKX0sbixpKX1sb2FkQXN5bmModCxyKXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuPXRoaXMsaT10aGlzLnBhdGg9PT0iIj9kTS5leHRyYWN0VXJsQmFzZSh0KTp0aGlzLnBhdGg7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5yZXNvdXJjZVBhdGh8fGk7bGV0IG89bmV3IEpjKHRoaXMubWFuYWdlcik7by5zZXRQYXRoKHRoaXMucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpO2xldCBhPXlpZWxkIG8ubG9hZEFzeW5jKHQscikscz1KU09OLnBhcnNlKGEpLGw9cy5tZXRhZGF0YTtpZihsPT09dm9pZCAwfHxsLnR5cGU9PT12b2lkIDB8fGwudHlwZS50b0xvd2VyQ2FzZSgpPT09Imdlb21ldHJ5Iil0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogQ2FuJ3QgbG9hZCAiK3QpO3JldHVybiB5aWVsZCBuLnBhcnNlQXN5bmMocyl9KX1wYXJzZSh0LHIpe2xldCBuPXRoaXMucGFyc2VBbmltYXRpb25zKHQuYW5pbWF0aW9ucyksaT10aGlzLnBhcnNlU2hhcGVzKHQuc2hhcGVzKSxvPXRoaXMucGFyc2VHZW9tZXRyaWVzKHQuZ2VvbWV0cmllcyxpKSxhPXRoaXMucGFyc2VJbWFnZXModC5pbWFnZXMsZnVuY3Rpb24oKXtyIT09dm9pZCAwJiZyKGMpfSkscz10aGlzLnBhcnNlVGV4dHVyZXModC50ZXh0dXJlcyxhKSxsPXRoaXMucGFyc2VNYXRlcmlhbHModC5tYXRlcmlhbHMscyksYz10aGlzLnBhcnNlT2JqZWN0KHQub2JqZWN0LG8sbCxzLG4pLHU9dGhpcy5wYXJzZVNrZWxldG9ucyh0LnNrZWxldG9ucyxjKTtpZih0aGlzLmJpbmRTa2VsZXRvbnMoYyx1KSxyIT09dm9pZCAwKXtsZXQgaD0hMTtmb3IobGV0IGYgaW4gYSlpZihhW2ZdaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KXtoPSEwO2JyZWFrfWg9PT0hMSYmcihjKX1yZXR1cm4gY31wYXJzZUFzeW5jKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9dGhpcy5wYXJzZUFuaW1hdGlvbnModC5hbmltYXRpb25zKSxuPXRoaXMucGFyc2VTaGFwZXModC5zaGFwZXMpLGk9dGhpcy5wYXJzZUdlb21ldHJpZXModC5nZW9tZXRyaWVzLG4pLG89eWllbGQgdGhpcy5wYXJzZUltYWdlc0FzeW5jKHQuaW1hZ2VzKSxhPXRoaXMucGFyc2VUZXh0dXJlcyh0LnRleHR1cmVzLG8pLHM9dGhpcy5wYXJzZU1hdGVyaWFscyh0Lm1hdGVyaWFscyxhKSxsPXRoaXMucGFyc2VPYmplY3QodC5vYmplY3QsaSxzLGEsciksYz10aGlzLnBhcnNlU2tlbGV0b25zKHQuc2tlbGV0b25zLGwpO3JldHVybiB0aGlzLmJpbmRTa2VsZXRvbnMobCxjKSxsfSl9cGFyc2VTaGFwZXModCl7bGV0IHI9e307aWYodCE9PXZvaWQgMClmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2xldCBvPW5ldyBLYygpLmZyb21KU09OKHRbbl0pO3Jbby51dWlkXT1vfXJldHVybiByfXBhcnNlU2tlbGV0b25zKHQscil7bGV0IG49e30saT17fTtpZihyLnRyYXZlcnNlKGZ1bmN0aW9uKG8pe28uaXNCb25lJiYoaVtvLnV1aWRdPW8pfSksdCE9PXZvaWQgMClmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspe2xldCBzPW5ldyBsTSgpLmZyb21KU09OKHRbb10saSk7bltzLnV1aWRdPXN9cmV0dXJuIG59cGFyc2VHZW9tZXRyaWVzKHQscil7bGV0IG49e307aWYodCE9PXZvaWQgMCl7bGV0IGk9bmV3IGtVO2ZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHMsbD10W29dO3N3aXRjaChsLnR5cGUpe2Nhc2UiQnVmZmVyR2VvbWV0cnkiOmNhc2UiSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiOnM9aS5wYXJzZShsKTticmVhaztjYXNlIkdlb21ldHJ5Ijpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IFRoZSBsZWdhY3kgR2VvbWV0cnkgdHlwZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiIpO2JyZWFrO2RlZmF1bHQ6bC50eXBlIGluIGRoZT9zPWRoZVtsLnR5cGVdLmZyb21KU09OKGwscik6Y29uc29sZS53YXJuKGBUSFJFRS5PYmplY3RMb2FkZXI6IFVuc3VwcG9ydGVkIGdlb21ldHJ5IHR5cGUgIiR7bC50eXBlfSJgKX1zLnV1aWQ9bC51dWlkLGwubmFtZSE9PXZvaWQgMCYmKHMubmFtZT1sLm5hbWUpLHMuaXNCdWZmZXJHZW9tZXRyeT09PSEwJiZsLnVzZXJEYXRhIT09dm9pZCAwJiYocy51c2VyRGF0YT1sLnVzZXJEYXRhKSxuW2wudXVpZF09c319cmV0dXJuIG59cGFyc2VNYXRlcmlhbHModCxyKXtsZXQgbj17fSxpPXt9O2lmKHQhPT12b2lkIDApe2xldCBvPW5ldyBMVTtvLnNldFRleHR1cmVzKHIpO2ZvcihsZXQgYT0wLHM9dC5sZW5ndGg7YTxzO2ErKyl7bGV0IGw9dFthXTtpZihsLnR5cGU9PT0iTXVsdGlNYXRlcmlhbCIpe2xldCBjPVtdO2ZvcihsZXQgdT0wO3U8bC5tYXRlcmlhbHMubGVuZ3RoO3UrKyl7bGV0IGg9bC5tYXRlcmlhbHNbdV07bltoLnV1aWRdPT09dm9pZCAwJiYobltoLnV1aWRdPW8ucGFyc2UoaCkpLGMucHVzaChuW2gudXVpZF0pfWlbbC51dWlkXT1jfWVsc2UgbltsLnV1aWRdPT09dm9pZCAwJiYobltsLnV1aWRdPW8ucGFyc2UobCkpLGlbbC51dWlkXT1uW2wudXVpZF19fXJldHVybiBpfXBhcnNlQW5pbWF0aW9ucyh0KXtsZXQgcj17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT10W25dLG89UXYucGFyc2UoaSk7cltvLnV1aWRdPW99cmV0dXJuIHJ9cGFyc2VJbWFnZXModCxyKXtsZXQgbj10aGlzLGk9e30sbztmdW5jdGlvbiBhKGwpe3JldHVybiBuLm1hbmFnZXIuaXRlbVN0YXJ0KGwpLG8ubG9hZChsLGZ1bmN0aW9uKCl7bi5tYW5hZ2VyLml0ZW1FbmQobCl9LHZvaWQgMCxmdW5jdGlvbigpe24ubWFuYWdlci5pdGVtRXJyb3IobCksbi5tYW5hZ2VyLml0ZW1FbmQobCl9KX1mdW5jdGlvbiBzKGwpe2lmKHR5cGVvZiBsPT0ic3RyaW5nIil7bGV0IGM9bCx1PS9eKFwvXC8pfChbYS16XSs6KFwvXC8pPykvaS50ZXN0KGMpP2M6bi5yZXNvdXJjZVBhdGgrYztyZXR1cm4gYSh1KX1lbHNlIHJldHVybiBsLmRhdGE/e2RhdGE6QjMobC50eXBlLGwuZGF0YSksd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHR9Om51bGx9aWYodCE9PXZvaWQgMCYmdC5sZW5ndGg+MCl7bGV0IGw9bmV3IE02KHIpO289bmV3IGV4KGwpLG8uc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Zm9yKGxldCBjPTAsdT10Lmxlbmd0aDtjPHU7YysrKXtsZXQgaD10W2NdLGY9aC51cmw7aWYoQXJyYXkuaXNBcnJheShmKSl7aVtoLnV1aWRdPVtdO2ZvcihsZXQgcD0wLGQ9Zi5sZW5ndGg7cDxkO3ArKyl7bGV0IGc9ZltwXSxfPXMoZyk7XyE9PW51bGwmJihfIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9pW2gudXVpZF0ucHVzaChfKTppW2gudXVpZF0ucHVzaChuZXcgSmQoXy5kYXRhLF8ud2lkdGgsXy5oZWlnaHQpKSl9fWVsc2V7bGV0IHA9cyhoLnVybCk7cCE9PW51bGwmJihpW2gudXVpZF09cCl9fX1yZXR1cm4gaX1wYXJzZUltYWdlc0FzeW5jKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9dGhpcyxuPXt9LGk7ZnVuY3Rpb24gbyhhKXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIil7bGV0IHM9YSxsPS9eKFwvXC8pfChbYS16XSs6KFwvXC8pPykvaS50ZXN0KHMpP3M6ci5yZXNvdXJjZVBhdGgrcztyZXR1cm4geWllbGQgaS5sb2FkQXN5bmMobCl9ZWxzZSByZXR1cm4gYS5kYXRhP3tkYXRhOkIzKGEudHlwZSxhLmRhdGEpLHdpZHRoOmEud2lkdGgsaGVpZ2h0OmEuaGVpZ2h0fTpudWxsfSl9aWYodCE9PXZvaWQgMCYmdC5sZW5ndGg+MCl7aT1uZXcgZXgodGhpcy5tYW5hZ2VyKSxpLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2ZvcihsZXQgYT0wLHM9dC5sZW5ndGg7YTxzO2ErKyl7bGV0IGw9dFthXSxjPWwudXJsO2lmKEFycmF5LmlzQXJyYXkoYykpe25bbC51dWlkXT1bXTtmb3IobGV0IHU9MCxoPWMubGVuZ3RoO3U8aDt1Kyspe2xldCBmPWNbdV0scD15aWVsZCBvKGYpO3AhPT1udWxsJiYocCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQ/bltsLnV1aWRdLnB1c2gocCk6bltsLnV1aWRdLnB1c2gobmV3IEpkKHAuZGF0YSxwLndpZHRoLHAuaGVpZ2h0KSkpfX1lbHNle2xldCB1PXlpZWxkIG8obC51cmwpO3UhPT1udWxsJiYobltsLnV1aWRdPXUpfX19cmV0dXJuIG59KX1wYXJzZVRleHR1cmVzKHQscil7ZnVuY3Rpb24gbihvLGEpe3JldHVybiB0eXBlb2Ygbz09Im51bWJlciI/bzooY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXIucGFyc2VUZXh0dXJlOiBDb25zdGFudCBzaG91bGQgYmUgaW4gbnVtZXJpYyBmb3JtLiIsbyksYVtvXSl9bGV0IGk9e307aWYodCE9PXZvaWQgMClmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspe2xldCBzPXRbb107cy5pbWFnZT09PXZvaWQgMCYmY29uc29sZS53YXJuKCdUSFJFRS5PYmplY3RMb2FkZXI6IE5vICJpbWFnZSIgc3BlY2lmaWVkIGZvcicscy51dWlkKSxyW3MuaW1hZ2VdPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIGltYWdlIixzLmltYWdlKTtsZXQgbCxjPXJbcy5pbWFnZV07QXJyYXkuaXNBcnJheShjKT8obD1uZXcgSDAoYyksYy5sZW5ndGg9PT02JiYobC5uZWVkc1VwZGF0ZT0hMCkpOihjJiZjLmRhdGE/bD1uZXcgSmQoYy5kYXRhLGMud2lkdGgsYy5oZWlnaHQpOmw9bmV3IHhpKGMpLGMmJihsLm5lZWRzVXBkYXRlPSEwKSksbC51dWlkPXMudXVpZCxzLm5hbWUhPT12b2lkIDAmJihsLm5hbWU9cy5uYW1lKSxzLm1hcHBpbmchPT12b2lkIDAmJihsLm1hcHBpbmc9bihzLm1hcHBpbmcsbDByKSkscy5vZmZzZXQhPT12b2lkIDAmJmwub2Zmc2V0LmZyb21BcnJheShzLm9mZnNldCkscy5yZXBlYXQhPT12b2lkIDAmJmwucmVwZWF0LmZyb21BcnJheShzLnJlcGVhdCkscy5jZW50ZXIhPT12b2lkIDAmJmwuY2VudGVyLmZyb21BcnJheShzLmNlbnRlcikscy5yb3RhdGlvbiE9PXZvaWQgMCYmKGwucm90YXRpb249cy5yb3RhdGlvbikscy53cmFwIT09dm9pZCAwJiYobC53cmFwUz1uKHMud3JhcFswXSx2aGUpLGwud3JhcFQ9bihzLndyYXBbMV0sdmhlKSkscy5mb3JtYXQhPT12b2lkIDAmJihsLmZvcm1hdD1zLmZvcm1hdCkscy50eXBlIT09dm9pZCAwJiYobC50eXBlPXMudHlwZSkscy5lbmNvZGluZyE9PXZvaWQgMCYmKGwuZW5jb2Rpbmc9cy5lbmNvZGluZykscy5taW5GaWx0ZXIhPT12b2lkIDAmJihsLm1pbkZpbHRlcj1uKHMubWluRmlsdGVyLHhoZSkpLHMubWFnRmlsdGVyIT09dm9pZCAwJiYobC5tYWdGaWx0ZXI9bihzLm1hZ0ZpbHRlcix4aGUpKSxzLmFuaXNvdHJvcHkhPT12b2lkIDAmJihsLmFuaXNvdHJvcHk9cy5hbmlzb3Ryb3B5KSxzLmZsaXBZIT09dm9pZCAwJiYobC5mbGlwWT1zLmZsaXBZKSxzLnByZW11bHRpcGx5QWxwaGEhPT12b2lkIDAmJihsLnByZW11bHRpcGx5QWxwaGE9cy5wcmVtdWx0aXBseUFscGhhKSxzLnVucGFja0FsaWdubWVudCE9PXZvaWQgMCYmKGwudW5wYWNrQWxpZ25tZW50PXMudW5wYWNrQWxpZ25tZW50KSxzLnVzZXJEYXRhIT09dm9pZCAwJiYobC51c2VyRGF0YT1zLnVzZXJEYXRhKSxpW3MudXVpZF09bH1yZXR1cm4gaX1wYXJzZU9iamVjdCh0LHIsbixpLG8pe2xldCBhO2Z1bmN0aW9uIHMoZil7cmV0dXJuIHJbZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgZ2VvbWV0cnkiLGYpLHJbZl19ZnVuY3Rpb24gbChmKXtpZihmIT09dm9pZCAwKXtpZihBcnJheS5pc0FycmF5KGYpKXtsZXQgcD1bXTtmb3IobGV0IGQ9MCxnPWYubGVuZ3RoO2Q8ZztkKyspe2xldCBfPWZbZF07bltfXT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCIsXykscC5wdXNoKG5bX10pfXJldHVybiBwfXJldHVybiBuW2ZdPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIixmKSxuW2ZdfX1mdW5jdGlvbiBjKGYpe3JldHVybiBpW2ZdPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIHRleHR1cmUiLGYpLGlbZl19bGV0IHUsaDtzd2l0Y2godC50eXBlKXtjYXNlIlNjZW5lIjphPW5ldyBxMCx0LmJhY2tncm91bmQhPT12b2lkIDAmJihOdW1iZXIuaXNJbnRlZ2VyKHQuYmFja2dyb3VuZCk/YS5iYWNrZ3JvdW5kPW5ldyBuZSh0LmJhY2tncm91bmQpOmEuYmFja2dyb3VuZD1jKHQuYmFja2dyb3VuZCkpLHQuZW52aXJvbm1lbnQhPT12b2lkIDAmJihhLmVudmlyb25tZW50PWModC5lbnZpcm9ubWVudCkpLHQuZm9nIT09dm9pZCAwJiYodC5mb2cudHlwZT09PSJGb2ciP2EuZm9nPW5ldyB6dih0LmZvZy5jb2xvcix0LmZvZy5uZWFyLHQuZm9nLmZhcik6dC5mb2cudHlwZT09PSJGb2dFeHAyIiYmKGEuZm9nPW5ldyBPdih0LmZvZy5jb2xvcix0LmZvZy5kZW5zaXR5KSkpO2JyZWFrO2Nhc2UiUGVyc3BlY3RpdmVDYW1lcmEiOmE9bmV3IFVpKHQuZm92LHQuYXNwZWN0LHQubmVhcix0LmZhciksdC5mb2N1cyE9PXZvaWQgMCYmKGEuZm9jdXM9dC5mb2N1cyksdC56b29tIT09dm9pZCAwJiYoYS56b29tPXQuem9vbSksdC5maWxtR2F1Z2UhPT12b2lkIDAmJihhLmZpbG1HYXVnZT10LmZpbG1HYXVnZSksdC5maWxtT2Zmc2V0IT09dm9pZCAwJiYoYS5maWxtT2Zmc2V0PXQuZmlsbU9mZnNldCksdC52aWV3IT09dm9pZCAwJiYoYS52aWV3PU9iamVjdC5hc3NpZ24oe30sdC52aWV3KSk7YnJlYWs7Y2FzZSJPcnRob2dyYXBoaWNDYW1lcmEiOmE9bmV3IER2KHQubGVmdCx0LnJpZ2h0LHQudG9wLHQuYm90dG9tLHQubmVhcix0LmZhciksdC56b29tIT09dm9pZCAwJiYoYS56b29tPXQuem9vbSksdC52aWV3IT09dm9pZCAwJiYoYS52aWV3PU9iamVjdC5hc3NpZ24oe30sdC52aWV3KSk7YnJlYWs7Y2FzZSJBbWJpZW50TGlnaHQiOmE9bmV3IEk2KHQuY29sb3IsdC5pbnRlbnNpdHkpO2JyZWFrO2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6YT1uZXcgUDYodC5jb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjphPW5ldyBBNih0LmNvbG9yLHQuaW50ZW5zaXR5LHQuZGlzdGFuY2UsdC5kZWNheSk7YnJlYWs7Y2FzZSJSZWN0QXJlYUxpZ2h0IjphPW5ldyBMNih0LmNvbG9yLHQuaW50ZW5zaXR5LHQud2lkdGgsdC5oZWlnaHQpO2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjphPW5ldyBDNih0LmNvbG9yLHQuaW50ZW5zaXR5LHQuZGlzdGFuY2UsdC5hbmdsZSx0LnBlbnVtYnJhLHQuZGVjYXkpO2JyZWFrO2Nhc2UiSGVtaXNwaGVyZUxpZ2h0IjphPW5ldyBFNih0LmNvbG9yLHQuZ3JvdW5kQ29sb3IsdC5pbnRlbnNpdHkpO2JyZWFrO2Nhc2UiTGlnaHRQcm9iZSI6YT1uZXcgcngoKS5mcm9tSlNPTih0KTticmVhaztjYXNlIlNraW5uZWRNZXNoIjp1PXModC5nZW9tZXRyeSksaD1sKHQubWF0ZXJpYWwpLGE9bmV3IGFNKHUsaCksdC5iaW5kTW9kZSE9PXZvaWQgMCYmKGEuYmluZE1vZGU9dC5iaW5kTW9kZSksdC5iaW5kTWF0cml4IT09dm9pZCAwJiZhLmJpbmRNYXRyaXguZnJvbUFycmF5KHQuYmluZE1hdHJpeCksdC5za2VsZXRvbiE9PXZvaWQgMCYmKGEuc2tlbGV0b249dC5za2VsZXRvbik7YnJlYWs7Y2FzZSJNZXNoIjp1PXModC5nZW9tZXRyeSksaD1sKHQubWF0ZXJpYWwpLGE9bmV3IGVpKHUsaCk7YnJlYWs7Y2FzZSJJbnN0YW5jZWRNZXNoIjp1PXModC5nZW9tZXRyeSksaD1sKHQubWF0ZXJpYWwpO2xldCBmPXQuY291bnQscD10Lmluc3RhbmNlTWF0cml4LGQ9dC5pbnN0YW5jZUNvbG9yO2E9bmV3IG42KHUsaCxmKSxhLmluc3RhbmNlTWF0cml4PW5ldyBybShuZXcgRmxvYXQzMkFycmF5KHAuYXJyYXkpLDE2KSxkIT09dm9pZCAwJiYoYS5pbnN0YW5jZUNvbG9yPW5ldyBybShuZXcgRmxvYXQzMkFycmF5KGQuYXJyYXkpLGQuaXRlbVNpemUpKTticmVhaztjYXNlIkxPRCI6YT1uZXcgZ1U7YnJlYWs7Y2FzZSJMaW5lIjphPW5ldyBjaChzKHQuZ2VvbWV0cnkpLGwodC5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UiTGluZUxvb3AiOmE9bmV3IGk2KHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJMaW5lU2VnbWVudHMiOmE9bmV3IEFhKHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJQb2ludENsb3VkIjpjYXNlIlBvaW50cyI6YT1uZXcgaW0ocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIlNwcml0ZSI6YT1uZXcgb00obCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJHcm91cCI6YT1uZXcgWGQ7YnJlYWs7Y2FzZSJCb25lIjphPW5ldyBzTTticmVhaztkZWZhdWx0OmE9bmV3IG9yfWlmKGEudXVpZD10LnV1aWQsdC5uYW1lIT09dm9pZCAwJiYoYS5uYW1lPXQubmFtZSksdC5tYXRyaXghPT12b2lkIDA/KGEubWF0cml4LmZyb21BcnJheSh0Lm1hdHJpeCksdC5tYXRyaXhBdXRvVXBkYXRlIT09dm9pZCAwJiYoYS5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSksYS5tYXRyaXhBdXRvVXBkYXRlJiZhLm1hdHJpeC5kZWNvbXBvc2UoYS5wb3NpdGlvbixhLnF1YXRlcm5pb24sYS5zY2FsZSkpOih0LnBvc2l0aW9uIT09dm9pZCAwJiZhLnBvc2l0aW9uLmZyb21BcnJheSh0LnBvc2l0aW9uKSx0LnJvdGF0aW9uIT09dm9pZCAwJiZhLnJvdGF0aW9uLmZyb21BcnJheSh0LnJvdGF0aW9uKSx0LnF1YXRlcm5pb24hPT12b2lkIDAmJmEucXVhdGVybmlvbi5mcm9tQXJyYXkodC5xdWF0ZXJuaW9uKSx0LnNjYWxlIT09dm9pZCAwJiZhLnNjYWxlLmZyb21BcnJheSh0LnNjYWxlKSksdC5jYXN0U2hhZG93IT09dm9pZCAwJiYoYS5jYXN0U2hhZG93PXQuY2FzdFNoYWRvdyksdC5yZWNlaXZlU2hhZG93IT09dm9pZCAwJiYoYS5yZWNlaXZlU2hhZG93PXQucmVjZWl2ZVNoYWRvdyksdC5zaGFkb3cmJih0LnNoYWRvdy5iaWFzIT09dm9pZCAwJiYoYS5zaGFkb3cuYmlhcz10LnNoYWRvdy5iaWFzKSx0LnNoYWRvdy5ub3JtYWxCaWFzIT09dm9pZCAwJiYoYS5zaGFkb3cubm9ybWFsQmlhcz10LnNoYWRvdy5ub3JtYWxCaWFzKSx0LnNoYWRvdy5yYWRpdXMhPT12b2lkIDAmJihhLnNoYWRvdy5yYWRpdXM9dC5zaGFkb3cucmFkaXVzKSx0LnNoYWRvdy5tYXBTaXplIT09dm9pZCAwJiZhLnNoYWRvdy5tYXBTaXplLmZyb21BcnJheSh0LnNoYWRvdy5tYXBTaXplKSx0LnNoYWRvdy5jYW1lcmEhPT12b2lkIDAmJihhLnNoYWRvdy5jYW1lcmE9dGhpcy5wYXJzZU9iamVjdCh0LnNoYWRvdy5jYW1lcmEpKSksdC52aXNpYmxlIT09dm9pZCAwJiYoYS52aXNpYmxlPXQudmlzaWJsZSksdC5mcnVzdHVtQ3VsbGVkIT09dm9pZCAwJiYoYS5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCksdC5yZW5kZXJPcmRlciE9PXZvaWQgMCYmKGEucmVuZGVyT3JkZXI9dC5yZW5kZXJPcmRlciksdC51c2VyRGF0YSE9PXZvaWQgMCYmKGEudXNlckRhdGE9dC51c2VyRGF0YSksdC5sYXllcnMhPT12b2lkIDAmJihhLmxheWVycy5tYXNrPXQubGF5ZXJzKSx0LmNoaWxkcmVuIT09dm9pZCAwKXtsZXQgZj10LmNoaWxkcmVuO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKWEuYWRkKHRoaXMucGFyc2VPYmplY3QoZltwXSxyLG4saSxvKSl9aWYodC5hbmltYXRpb25zIT09dm9pZCAwKXtsZXQgZj10LmFuaW1hdGlvbnM7Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspe2xldCBkPWZbcF07YS5hbmltYXRpb25zLnB1c2gob1tkXSl9fWlmKHQudHlwZT09PSJMT0QiKXt0LmF1dG9VcGRhdGUhPT12b2lkIDAmJihhLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlKTtsZXQgZj10LmxldmVscztmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IGQ9ZltwXSxnPWEuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgidXVpZCIsZC5vYmplY3QpO2chPT12b2lkIDAmJmEuYWRkTGV2ZWwoZyxkLmRpc3RhbmNlKX19cmV0dXJuIGF9YmluZFNrZWxldG9ucyh0LHIpe09iamVjdC5rZXlzKHIpLmxlbmd0aCE9PTAmJnQudHJhdmVyc2UoZnVuY3Rpb24obil7aWYobi5pc1NraW5uZWRNZXNoPT09ITAmJm4uc2tlbGV0b24hPT12b2lkIDApe2xldCBpPXJbbi5za2VsZXRvbl07aT09PXZvaWQgMD9jb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogTm8gc2tlbGV0b24gZm91bmQgd2l0aCBVVUlEOiIsbi5za2VsZXRvbik6bi5iaW5kKGksbi5iaW5kTWF0cml4KX19KX1zZXRUZXh0dXJlUGF0aCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IC5zZXRUZXh0dXJlUGF0aCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldFJlc291cmNlUGF0aCgpLiIpLHRoaXMuc2V0UmVzb3VyY2VQYXRoKHQpfX0sbDByPXtVVk1hcHBpbmc6alUsQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOm54LEN1YmVSZWZyYWN0aW9uTWFwcGluZzppeCxFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZzpXUCxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzpZUCxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzp4TSxDdWJlVVZSZWZyYWN0aW9uTWFwcGluZzpPNn0sdmhlPXtSZXBlYXRXcmFwcGluZzpqUCxDbGFtcFRvRWRnZVdyYXBwaW5nOkpvLE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6WFB9LHhoZT17TmVhcmVzdEZpbHRlcjpMaSxOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlcjppVSxOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyOm9VLExpbmVhckZpbHRlcjpvaSxMaW5lYXJNaXBtYXBOZWFyZXN0RmlsdGVyOmtodCxMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXI6b3h9LFJVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpLHR5cGVvZiBmZXRjaD09InVuZGVmaW5lZCImJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4iKSx0aGlzLm9wdGlvbnM9e3ByZW11bHRpcGx5QWxwaGE6Im5vbmUifX1zZXRPcHRpb25zKHQpe3JldHVybiB0aGlzLm9wdGlvbnM9dCx0aGlzfWxvYWQodCxyLG4saSl7dD09PXZvaWQgMCYmKHQ9IiIpLHRoaXMucGF0aCE9PXZvaWQgMCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxhPXR4LmdldCh0KTtpZihhIT09dm9pZCAwKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyJiZyKGEpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxhO2xldCBzPXt9O3MuY3JlZGVudGlhbHM9dGhpcy5jcm9zc09yaWdpbj09PSJhbm9ueW1vdXMiPyJzYW1lLW9yaWdpbiI6ImluY2x1ZGUiLHMuaGVhZGVycz10aGlzLnJlcXVlc3RIZWFkZXIsZmV0Y2godCxzKS50aGVuKGZ1bmN0aW9uKGwpe3JldHVybiBsLmJsb2IoKX0pLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKGwsT2JqZWN0LmFzc2lnbihvLm9wdGlvbnMse2NvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pKX0pLnRoZW4oZnVuY3Rpb24obCl7dHguYWRkKHQsbCksciYmcihsKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLmNhdGNoKGZ1bmN0aW9uKGwpe2kmJmkobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLG8ubWFuYWdlci5pdGVtU3RhcnQodCl9fTtSVS5wcm90b3R5cGUuaXNJbWFnZUJpdG1hcExvYWRlcj0hMDt2YXIgR1YsRmh0PXtnZXRDb250ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIEdWPT09dm9pZCAwJiYoR1Y9bmV3KHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKSxHVn0sc2V0Q29udGV4dDpmdW5jdGlvbihlKXtHVj1lfX0sTlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmModGhpcy5tYW5hZ2VyKTthLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxhLnNldFBhdGgodGhpcy5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e2xldCBsPXMuc2xpY2UoMCk7Rmh0LmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEobCxmdW5jdGlvbih1KXtyKHUpfSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9fSxEVT1jbGFzcyBleHRlbmRzIHJ4e2NvbnN0cnVjdG9yKHQscixuPTEpe3N1cGVyKHZvaWQgMCxuKTtsZXQgaT1uZXcgbmUoKS5zZXQodCksbz1uZXcgbmUoKS5zZXQociksYT1uZXcgaihpLnIsaS5nLGkuYikscz1uZXcgaihvLnIsby5nLG8uYiksbD1NYXRoLnNxcnQoTWF0aC5QSSksYz1sKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkoYSkuYWRkKHMpLm11bHRpcGx5U2NhbGFyKGwpLHRoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkoYSkuc3ViKHMpLm11bHRpcGx5U2NhbGFyKGMpfX07RFUucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITA7dmFyIE9VPWNsYXNzIGV4dGVuZHMgcnh7Y29uc3RydWN0b3IodCxyPTEpe3N1cGVyKHZvaWQgMCxyKTtsZXQgbj1uZXcgbmUoKS5zZXQodCk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KG4ucixuLmcsbi5iKS5tdWx0aXBseVNjYWxhcigyKk1hdGguc3FydChNYXRoLlBJKSl9fTtPVS5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHRQcm9iZT0hMDt2YXIgYmhlPW5ldyBNZSx3aGU9bmV3IE1lLHl2PW5ldyBNZSxjaHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9IlN0ZXJlb0NhbWVyYSIsdGhpcy5hc3BlY3Q9MSx0aGlzLmV5ZVNlcD0uMDY0LHRoaXMuY2FtZXJhTD1uZXcgVWksdGhpcy5jYW1lcmFMLmxheWVycy5lbmFibGUoMSksdGhpcy5jYW1lcmFMLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jYW1lcmFSPW5ldyBVaSx0aGlzLmNhbWVyYVIubGF5ZXJzLmVuYWJsZSgyKSx0aGlzLmNhbWVyYVIubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9jYWNoZT17Zm9jdXM6bnVsbCxmb3Y6bnVsbCxhc3BlY3Q6bnVsbCxuZWFyOm51bGwsZmFyOm51bGwsem9vbTpudWxsLGV5ZVNlcDpudWxsfX11cGRhdGUodCl7bGV0IHI9dGhpcy5fY2FjaGU7aWYoci5mb2N1cyE9PXQuZm9jdXN8fHIuZm92IT09dC5mb3Z8fHIuYXNwZWN0IT09dC5hc3BlY3QqdGhpcy5hc3BlY3R8fHIubmVhciE9PXQubmVhcnx8ci5mYXIhPT10LmZhcnx8ci56b29tIT09dC56b29tfHxyLmV5ZVNlcCE9PXRoaXMuZXllU2VwKXtyLmZvY3VzPXQuZm9jdXMsci5mb3Y9dC5mb3Ysci5hc3BlY3Q9dC5hc3BlY3QqdGhpcy5hc3BlY3Qsci5uZWFyPXQubmVhcixyLmZhcj10LmZhcixyLnpvb209dC56b29tLHIuZXllU2VwPXRoaXMuZXllU2VwLHl2LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KTtsZXQgaT1yLmV5ZVNlcC8yLG89aSpyLm5lYXIvci5mb2N1cyxhPXIubmVhcipNYXRoLnRhbihQdipyLmZvdiouNSkvci56b29tLHMsbDt3aGUuZWxlbWVudHNbMTJdPS1pLGJoZS5lbGVtZW50c1sxMl09aSxzPS1hKnIuYXNwZWN0K28sbD1hKnIuYXNwZWN0K28seXYuZWxlbWVudHNbMF09MipyLm5lYXIvKGwtcykseXYuZWxlbWVudHNbOF09KGwrcykvKGwtcyksdGhpcy5jYW1lcmFMLnByb2plY3Rpb25NYXRyaXguY29weSh5dikscz0tYSpyLmFzcGVjdC1vLGw9YSpyLmFzcGVjdC1vLHl2LmVsZW1lbnRzWzBdPTIqci5uZWFyLyhsLXMpLHl2LmVsZW1lbnRzWzhdPShsK3MpLyhsLXMpLHRoaXMuY2FtZXJhUi5wcm9qZWN0aW9uTWF0cml4LmNvcHkoeXYpfXRoaXMuY2FtZXJhTC5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLm11bHRpcGx5KHdoZSksdGhpcy5jYW1lcmFSLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCkubXVsdGlwbHkoYmhlKX19LG1NPWNsYXNze2NvbnN0cnVjdG9yKHQ9ITApe3RoaXMuYXV0b1N0YXJ0PXQsdGhpcy5zdGFydFRpbWU9MCx0aGlzLm9sZFRpbWU9MCx0aGlzLmVsYXBzZWRUaW1lPTAsdGhpcy5ydW5uaW5nPSExfXN0YXJ0KCl7dGhpcy5zdGFydFRpbWU9U2hlKCksdGhpcy5vbGRUaW1lPXRoaXMuc3RhcnRUaW1lLHRoaXMuZWxhcHNlZFRpbWU9MCx0aGlzLnJ1bm5pbmc9ITB9c3RvcCgpe3RoaXMuZ2V0RWxhcHNlZFRpbWUoKSx0aGlzLnJ1bm5pbmc9ITEsdGhpcy5hdXRvU3RhcnQ9ITF9Z2V0RWxhcHNlZFRpbWUoKXtyZXR1cm4gdGhpcy5nZXREZWx0YSgpLHRoaXMuZWxhcHNlZFRpbWV9Z2V0RGVsdGEoKXtsZXQgdD0wO2lmKHRoaXMuYXV0b1N0YXJ0JiYhdGhpcy5ydW5uaW5nKXJldHVybiB0aGlzLnN0YXJ0KCksMDtpZih0aGlzLnJ1bm5pbmcpe2xldCByPVNoZSgpO3Q9KHItdGhpcy5vbGRUaW1lKS8xZTMsdGhpcy5vbGRUaW1lPXIsdGhpcy5lbGFwc2VkVGltZSs9dH1yZXR1cm4gdH19O2Z1bmN0aW9uIFNoZSgpe3JldHVybih0eXBlb2YgcGVyZm9ybWFuY2U9PSJ1bmRlZmluZWQiP0RhdGU6cGVyZm9ybWFuY2UpLm5vdygpfXZhciB2dj1uZXcgaixNaGU9bmV3IHZpLGMwcj1uZXcgaix4dj1uZXcgaix1aHQ9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpb0xpc3RlbmVyIix0aGlzLmNvbnRleHQ9Rmh0LmdldENvbnRleHQoKSx0aGlzLmdhaW49dGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKSx0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZmlsdGVyPW51bGwsdGhpcy50aW1lRGVsdGE9MCx0aGlzLl9jbG9jaz1uZXcgbU19Z2V0SW5wdXQoKXtyZXR1cm4gdGhpcy5nYWlufXJlbW92ZUZpbHRlcigpe3JldHVybiB0aGlzLmZpbHRlciE9PW51bGwmJih0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCksdGhpc31nZXRGaWx0ZXIoKXtyZXR1cm4gdGhpcy5maWx0ZXJ9c2V0RmlsdGVyKHQpe3JldHVybiB0aGlzLmZpbHRlciE9PW51bGw/KHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbikpOnRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9dCx0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXN9Z2V0TWFzdGVyVm9sdW1lKCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnZhbHVlfXNldE1hc3RlclZvbHVtZSh0KXtyZXR1cm4gdGhpcy5nYWluLmdhaW4uc2V0VGFyZ2V0QXRUaW1lKHQsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc311cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KTtsZXQgcj10aGlzLmNvbnRleHQubGlzdGVuZXIsbj10aGlzLnVwO2lmKHRoaXMudGltZURlbHRhPXRoaXMuX2Nsb2NrLmdldERlbHRhKCksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UodnYsTWhlLGMwcikseHYuc2V0KDAsMCwtMSkuYXBwbHlRdWF0ZXJuaW9uKE1oZSksci5wb3NpdGlvblgpe2xldCBpPXRoaXMuY29udGV4dC5jdXJyZW50VGltZSt0aGlzLnRpbWVEZWx0YTtyLnBvc2l0aW9uWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2di54LGkpLHIucG9zaXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZ2LnksaSksci5wb3NpdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodnYueixpKSxyLmZvcndhcmRYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHh2LngsaSksci5mb3J3YXJkWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh4di55LGkpLHIuZm9yd2FyZFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoeHYueixpKSxyLnVwWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLngsaSksci51cFkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi55LGkpLHIudXBaLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueixpKX1lbHNlIHIuc2V0UG9zaXRpb24odnYueCx2di55LHZ2LnopLHIuc2V0T3JpZW50YXRpb24oeHYueCx4di55LHh2Lnosbi54LG4ueSxuLnopfX0sTjY9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKHRoaXMuaXNQbGF5aW5nPT09ITApe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IEF1ZGlvIGlzIGFscmVhZHkgcGxheWluZy4iKTtyZXR1cm59aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59dGhpcy5fc3RhcnRlZEF0PXRoaXMuY29udGV4dC5jdXJyZW50VGltZSt0O2xldCByPXRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtyZXR1cm4gci5idWZmZXI9dGhpcy5idWZmZXIsci5sb29wPXRoaXMubG9vcCxyLmxvb3BTdGFydD10aGlzLmxvb3BTdGFydCxyLmxvb3BFbmQ9dGhpcy5sb29wRW5kLHIub25lbmRlZD10aGlzLm9uRW5kZWQuYmluZCh0aGlzKSxyLnN0YXJ0KHRoaXMuX3N0YXJ0ZWRBdCx0aGlzLl9wcm9ncmVzcyt0aGlzLm9mZnNldCx0aGlzLmR1cmF0aW9uKSx0aGlzLmlzUGxheWluZz0hMCx0aGlzLnNvdXJjZT1yLHRoaXMuc2V0RGV0dW5lKHRoaXMuZGV0dW5lKSx0aGlzLnNldFBsYXliYWNrUmF0ZSh0aGlzLnBsYXliYWNrUmF0ZSksdGhpcy5jb25uZWN0KCl9cGF1c2UoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLHRoaXMubG9vcD09PSEwJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpc31zdG9wKCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxyPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxyO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxyPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxyO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSx0aGlzLl9jb25uZWN0ZWQ9PT0hMD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHRoaXMuc291cmNlLmRldHVuZSE9PXZvaWQgMClyZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmdGhpcy5zb3VyY2UuZGV0dW5lLnNldFRhcmdldEF0VGltZSh0aGlzLmRldHVuZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfWdldERldHVuZSgpe3JldHVybiB0aGlzLmRldHVuZX1nZXRGaWx0ZXIoKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbMF19c2V0RmlsdGVyKHQpe3JldHVybiB0aGlzLnNldEZpbHRlcnModD9bdF06W10pfXNldFBsYXliYWNrUmF0ZSh0KXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCx0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITE/KGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIiksITEpOnRoaXMubG9vcH1zZXRMb29wKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmxvb3A9dCx0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXN9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX0sYnY9bmV3IGosRWhlPW5ldyB2aSx1MHI9bmV3IGosd3Y9bmV3IGosaGh0PWNsYXNzIGV4dGVuZHMgTjZ7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5wYW5uZXI9dGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpLHRoaXMucGFubmVyLnBhbm5pbmdNb2RlbD0iSFJURiIsdGhpcy5wYW5uZXIuY29ubmVjdCh0aGlzLmdhaW4pfWdldE91dHB1dCgpe3JldHVybiB0aGlzLnBhbm5lcn1nZXRSZWZEaXN0YW5jZSgpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZX1zZXRSZWZEaXN0YW5jZSh0KXtyZXR1cm4gdGhpcy5wYW5uZXIucmVmRGlzdGFuY2U9dCx0aGlzfWdldFJvbGxvZmZGYWN0b3IoKXtyZXR1cm4gdGhpcy5wYW5uZXIucm9sbG9mZkZhY3Rvcn1zZXRSb2xsb2ZmRmFjdG9yKHQpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yPXQsdGhpc31nZXREaXN0YW5jZU1vZGVsKCl7cmV0dXJuIHRoaXMucGFubmVyLmRpc3RhbmNlTW9kZWx9c2V0RGlzdGFuY2VNb2RlbCh0KXtyZXR1cm4gdGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbD10LHRoaXN9Z2V0TWF4RGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5wYW5uZXIubWF4RGlzdGFuY2V9c2V0TWF4RGlzdGFuY2UodCl7cmV0dXJuIHRoaXMucGFubmVyLm1heERpc3RhbmNlPXQsdGhpc31zZXREaXJlY3Rpb25hbENvbmUodCxyLG4pe3JldHVybiB0aGlzLnBhbm5lci5jb25lSW5uZXJBbmdsZT10LHRoaXMucGFubmVyLmNvbmVPdXRlckFuZ2xlPXIsdGhpcy5wYW5uZXIuY29uZU91dGVyR2Fpbj1uLHRoaXN9dXBkYXRlTWF0cml4V29ybGQodCl7aWYoc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCksdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMCYmdGhpcy5pc1BsYXlpbmc9PT0hMSlyZXR1cm47dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoYnYsRWhlLHUwciksd3Yuc2V0KDAsMCwxKS5hcHBseVF1YXRlcm5pb24oRWhlKTtsZXQgcj10aGlzLnBhbm5lcjtpZihyLnBvc2l0aW9uWCl7bGV0IG49dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3RoaXMubGlzdGVuZXIudGltZURlbHRhO3IucG9zaXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGJ2Lngsbiksci5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYnYueSxuKSxyLnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShidi56LG4pLHIub3JpZW50YXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHd2Lngsbiksci5vcmllbnRhdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUod3YueSxuKSxyLm9yaWVudGF0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh3di56LG4pfWVsc2Ugci5zZXRQb3NpdGlvbihidi54LGJ2LnksYnYueiksci5zZXRPcmllbnRhdGlvbih3di54LHd2Lnksd3Yueil9fSx6VT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9MjA0OCl7dGhpcy5hbmFseXNlcj10LmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKSx0aGlzLmFuYWx5c2VyLmZmdFNpemU9cix0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkodGhpcy5hbmFseXNlci5mcmVxdWVuY3lCaW5Db3VudCksdC5nZXRPdXRwdXQoKS5jb25uZWN0KHRoaXMuYW5hbHlzZXIpfWdldEZyZXF1ZW5jeURhdGEoKXtyZXR1cm4gdGhpcy5hbmFseXNlci5nZXRCeXRlRnJlcXVlbmN5RGF0YSh0aGlzLmRhdGEpLHRoaXMuZGF0YX1nZXRBdmVyYWdlRnJlcXVlbmN5KCl7bGV0IHQ9MCxyPXRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXQrPXJbbl07cmV0dXJuIHQvci5sZW5ndGh9fSxGVT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7dGhpcy5iaW5kaW5nPXQsdGhpcy52YWx1ZVNpemU9bjtsZXQgaSxvLGE7c3dpdGNoKHIpe2Nhc2UicXVhdGVybmlvbiI6aT10aGlzLl9zbGVycCxvPXRoaXMuX3NsZXJwQWRkaXRpdmUsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbix0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KG4qNiksdGhpcy5fd29ya0luZGV4PTU7YnJlYWs7Y2FzZSJzdHJpbmciOmNhc2UiYm9vbCI6aT10aGlzLl9zZWxlY3Qsbz10aGlzLl9zZWxlY3QsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIsdGhpcy5idWZmZXI9bmV3IEFycmF5KG4qNSk7YnJlYWs7ZGVmYXVsdDppPXRoaXMuX2xlcnAsbz10aGlzLl9sZXJwQWRkaXRpdmUsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYyx0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KG4qNSl9dGhpcy5fbWl4QnVmZmVyUmVnaW9uPWksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmU9byx0aGlzLl9zZXRJZGVudGl0eT1hLHRoaXMuX29yaWdJbmRleD0zLHRoaXMuX2FkZEluZGV4PTQsdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCx0aGlzLnVzZUNvdW50PTAsdGhpcy5yZWZlcmVuY2VDb3VudD0wfWFjY3VtdWxhdGUodCxyKXtsZXQgbj10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLG89dCppK2ksYT10aGlzLmN1bXVsYXRpdmVXZWlnaHQ7aWYoYT09PTApe2ZvcihsZXQgcz0wO3MhPT1pOysrcyluW28rc109bltzXTthPXJ9ZWxzZXthKz1yO2xldCBzPXIvYTt0aGlzLl9taXhCdWZmZXJSZWdpb24obixvLDAscyxpKX10aGlzLmN1bXVsYXRpdmVXZWlnaHQ9YX1hY2N1bXVsYXRlQWRkaXRpdmUodCl7bGV0IHI9dGhpcy5idWZmZXIsbj10aGlzLnZhbHVlU2l6ZSxpPW4qdGhpcy5fYWRkSW5kZXg7dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9PT0wJiZ0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKHIsaSwwLHQsbiksdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUrPXR9YXBwbHkodCl7bGV0IHI9dGhpcy52YWx1ZVNpemUsbj10aGlzLmJ1ZmZlcixpPXQqcityLG89dGhpcy5jdW11bGF0aXZlV2VpZ2h0LGE9dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUscz10aGlzLmJpbmRpbmc7aWYodGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCxvPDEpe2xldCBsPXIqdGhpcy5fb3JpZ0luZGV4O3RoaXMuX21peEJ1ZmZlclJlZ2lvbihuLGksbCwxLW8scil9YT4wJiZ0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShuLGksdGhpcy5fYWRkSW5kZXgqciwxLHIpO2ZvcihsZXQgbD1yLGM9cityO2whPT1jOysrbClpZihuW2xdIT09bltsK3JdKXtzLnNldFZhbHVlKG4saSk7YnJlYWt9fXNhdmVPcmlnaW5hbFN0YXRlKCl7bGV0IHQ9dGhpcy5iaW5kaW5nLHI9dGhpcy5idWZmZXIsbj10aGlzLnZhbHVlU2l6ZSxpPW4qdGhpcy5fb3JpZ0luZGV4O3QuZ2V0VmFsdWUocixpKTtmb3IobGV0IG89bixhPWk7byE9PWE7KytvKXJbb109cltpK28lbl07dGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wfXJlc3RvcmVPcmlnaW5hbFN0YXRlKCl7bGV0IHQ9dGhpcy52YWx1ZVNpemUqMzt0aGlzLmJpbmRpbmcuc2V0VmFsdWUodGhpcy5idWZmZXIsdCl9X3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCl7bGV0IHQ9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUscj10K3RoaXMudmFsdWVTaXplO2ZvcihsZXQgbj10O248cjtuKyspdGhpcy5idWZmZXJbbl09MH1fc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb24oKXt0aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpLHRoaXMuYnVmZmVyW3RoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplKzNdPTF9X3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcigpe2xldCB0PXRoaXMuX29yaWdJbmRleCp0aGlzLnZhbHVlU2l6ZSxyPXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplO2ZvcihsZXQgbj0wO248dGhpcy52YWx1ZVNpemU7bisrKXRoaXMuYnVmZmVyW3Irbl09dGhpcy5idWZmZXJbdCtuXX1fc2VsZWN0KHQscixuLGksbyl7aWYoaT49LjUpZm9yKGxldCBhPTA7YSE9PW87KythKXRbcithXT10W24rYV19X3NsZXJwKHQscixuLGkpe3ZpLnNsZXJwRmxhdCh0LHIsdCxyLHQsbixpKX1fc2xlcnBBZGRpdGl2ZSh0LHIsbixpLG8pe2xldCBhPXRoaXMuX3dvcmtJbmRleCpvO3ZpLm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQsYSx0LHIsdCxuKSx2aS5zbGVycEZsYXQodCxyLHQscix0LGEsaSl9X2xlcnAodCxyLG4saSxvKXtsZXQgYT0xLWk7Zm9yKGxldCBzPTA7cyE9PW87KytzKXtsZXQgbD1yK3M7dFtsXT10W2xdKmErdFtuK3NdKml9fV9sZXJwQWRkaXRpdmUodCxyLG4saSxvKXtmb3IobGV0IGE9MDthIT09bzsrK2Epe2xldCBzPXIrYTt0W3NdPXRbc10rdFtuK2FdKml9fX0sQmh0PSJcXFtcXF1cXC46XFwvIixoMHI9bmV3IFJlZ0V4cCgiWyIrQmh0KyJdIiwiZyIpLEhodD0iW14iK0JodCsiXSIsZjByPSJbXiIrQmh0LnJlcGxhY2UoIlxcLiIsIiIpKyJdIixwMHI9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixIaHQpLGQwcj0vKFdDT0QrKT8vLnNvdXJjZS5yZXBsYWNlKCJXQ09EIixmMHIpLG0wcj0vKD86XC4oV0MrKSg/OlxbKC4rKVxdKT8pPy8uc291cmNlLnJlcGxhY2UoIldDIixIaHQpLGcwcj0vXC4oV0MrKSg/OlxbKC4rKVxdKT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsSGh0KSxfMHI9bmV3IFJlZ0V4cCgiXiIrcDByK2QwcittMHIrZzByKyIkIikseTByPVsibWF0ZXJpYWwiLCJtYXRlcmlhbHMiLCJib25lcyJdLGZodD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IGk9bnx8Q3IucGFyc2VUcmFja05hbWUocik7dGhpcy5fdGFyZ2V0R3JvdXA9dCx0aGlzLl9iaW5kaW5ncz10LnN1YnNjcmliZV8ocixpKX1nZXRWYWx1ZSh0LHIpe3RoaXMuYmluZCgpO2xldCBuPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXRoaXMuX2JpbmRpbmdzW25dO2khPT12b2lkIDAmJmkuZ2V0VmFsdWUodCxyKX1zZXRWYWx1ZSh0LHIpe2xldCBuPXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgaT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbz1uLmxlbmd0aDtpIT09bzsrK2kpbltpXS5zZXRWYWx1ZSh0LHIpfWJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLG49dC5sZW5ndGg7ciE9PW47KytyKXRbcl0uYmluZCgpfXVuYmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgcj10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbj10Lmxlbmd0aDtyIT09bjsrK3IpdFtyXS51bmJpbmQoKX19LENyPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLnBhdGg9cix0aGlzLnBhcnNlZFBhdGg9bnx8Q3IucGFyc2VUcmFja05hbWUociksdGhpcy5ub2RlPUNyLmZpbmROb2RlKHQsdGhpcy5wYXJzZWRQYXRoLm5vZGVOYW1lKXx8dCx0aGlzLnJvb3ROb2RlPXQsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH1zdGF0aWMgY3JlYXRlKHQscixuKXtyZXR1cm4gdCYmdC5pc0FuaW1hdGlvbk9iamVjdEdyb3VwP25ldyBDci5Db21wb3NpdGUodCxyLG4pOm5ldyBDcih0LHIsbil9c3RhdGljIHNhbml0aXplTm9kZU5hbWUodCl7cmV0dXJuIHQucmVwbGFjZSgvXHMvZywiXyIpLnJlcGxhY2UoaDByLCIiKX1zdGF0aWMgcGFyc2VUcmFja05hbWUodCl7bGV0IHI9XzByLmV4ZWModCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IENhbm5vdCBwYXJzZSB0cmFja05hbWU6ICIrdCk7bGV0IG49e25vZGVOYW1lOnJbMl0sb2JqZWN0TmFtZTpyWzNdLG9iamVjdEluZGV4OnJbNF0scHJvcGVydHlOYW1lOnJbNV0scHJvcGVydHlJbmRleDpyWzZdfSxpPW4ubm9kZU5hbWUmJm4ubm9kZU5hbWUubGFzdEluZGV4T2YoIi4iKTtpZihpIT09dm9pZCAwJiZpIT09LTEpe2xldCBvPW4ubm9kZU5hbWUuc3Vic3RyaW5nKGkrMSk7eTByLmluZGV4T2YobykhPT0tMSYmKG4ubm9kZU5hbWU9bi5ub2RlTmFtZS5zdWJzdHJpbmcoMCxpKSxuLm9iamVjdE5hbWU9byl9aWYobi5wcm9wZXJ0eU5hbWU9PT1udWxsfHxuLnByb3BlcnR5TmFtZS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBjYW4gbm90IHBhcnNlIHByb3BlcnR5TmFtZSBmcm9tIHRyYWNrTmFtZTogIit0KTtyZXR1cm4gbn1zdGF0aWMgZmluZE5vZGUodCxyKXtpZighcnx8cj09PSIifHxyPT09Ii4ifHxyPT09LTF8fHI9PT10Lm5hbWV8fHI9PT10LnV1aWQpcmV0dXJuIHQ7aWYodC5za2VsZXRvbil7bGV0IG49dC5za2VsZXRvbi5nZXRCb25lQnlOYW1lKHIpO2lmKG4hPT12b2lkIDApcmV0dXJuIG59aWYodC5jaGlsZHJlbil7bGV0IG49ZnVuY3Rpb24obyl7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspe2xldCBzPW9bYV07aWYocy5uYW1lPT09cnx8cy51dWlkPT09cilyZXR1cm4gcztsZXQgbD1uKHMuY2hpbGRyZW4pO2lmKGwpcmV0dXJuIGx9cmV0dXJuIG51bGx9LGk9bih0LmNoaWxkcmVuKTtpZihpKXJldHVybiBpfXJldHVybiBudWxsfV9nZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fc2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X2dldFZhbHVlX2RpcmVjdCh0LHIpe3Rbcl09dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdfV9nZXRWYWx1ZV9hcnJheSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSl0W3IrK109bltpXX1fZ2V0VmFsdWVfYXJyYXlFbGVtZW50KHQscil7dFtyXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX1fZ2V0VmFsdWVfdG9BcnJheSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS50b0FycmF5KHQscil9X3NldFZhbHVlX2RpcmVjdCh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtyXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxyKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtyXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXX1fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUodCxyKXtsZXQgbj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBpPTAsbz1uLmxlbmd0aDtpIT09bzsrK2kpbltpXT10W3IrK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxyKXtsZXQgbj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBpPTAsbz1uLmxlbmd0aDtpIT09bzsrK2kpbltpXT10W3IrK107dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtyXX1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlKHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtyXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxyKX1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlKHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxyKSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9nZXRWYWx1ZV91bmJvdW5kKHQscil7dGhpcy5iaW5kKCksdGhpcy5nZXRWYWx1ZSh0LHIpfV9zZXRWYWx1ZV91bmJvdW5kKHQscil7dGhpcy5iaW5kKCksdGhpcy5zZXRWYWx1ZSh0LHIpfWJpbmQoKXtsZXQgdD10aGlzLm5vZGUscj10aGlzLnBhcnNlZFBhdGgsbj1yLm9iamVjdE5hbWUsaT1yLnByb3BlcnR5TmFtZSxvPXIucHJvcGVydHlJbmRleDtpZih0fHwodD1Dci5maW5kTm9kZSh0aGlzLnJvb3ROb2RlLHIubm9kZU5hbWUpfHx0aGlzLnJvb3ROb2RlLHRoaXMubm9kZT10KSx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYXZhaWxhYmxlLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5hdmFpbGFibGUsIXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIit0aGlzLnBhdGgrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIpO3JldHVybn1pZihuKXtsZXQgYz1yLm9iamVjdEluZGV4O3N3aXRjaChuKXtjYXNlIm1hdGVyaWFscyI6aWYoIXQubWF0ZXJpYWwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFsLiIsdGhpcyk7cmV0dXJufWlmKCF0Lm1hdGVyaWFsLm1hdGVyaWFscyl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwubWF0ZXJpYWxzIGFzIG5vZGUubWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFscyBhcnJheS4iLHRoaXMpO3JldHVybn10PXQubWF0ZXJpYWwubWF0ZXJpYWxzO2JyZWFrO2Nhc2UiYm9uZXMiOmlmKCF0LnNrZWxldG9uKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO3JldHVybn10PXQuc2tlbGV0b24uYm9uZXM7Zm9yKGxldCB1PTA7dTx0Lmxlbmd0aDt1KyspaWYodFt1XS5uYW1lPT09Yyl7Yz11O2JyZWFrfWJyZWFrO2RlZmF1bHQ6aWYodFtuXT09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gb2JqZWN0TmFtZSBvZiBub2RlIHVuZGVmaW5lZC4iLHRoaXMpO3JldHVybn10PXRbbl19aWYoYyE9PXZvaWQgMCl7aWYodFtjXT09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gYmluZCB0byBvYmplY3RJbmRleCBvZiBvYmplY3ROYW1lLCBidXQgaXMgdW5kZWZpbmVkLiIsdGhpcyx0KTtyZXR1cm59dD10W2NdfX1sZXQgYT10W2ldO2lmKGE9PT12b2lkIDApe2xldCBjPXIubm9kZU5hbWU7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIHByb3BlcnR5IGZvciB0cmFjazogIitjKyIuIitpKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iLHQpO3JldHVybn1sZXQgcz10aGlzLlZlcnNpb25pbmcuTm9uZTt0aGlzLnRhcmdldE9iamVjdD10LHQubmVlZHNVcGRhdGUhPT12b2lkIDA/cz10aGlzLlZlcnNpb25pbmcuTmVlZHNVcGRhdGU6dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlIT09dm9pZCAwJiYocz10aGlzLlZlcnNpb25pbmcuTWF0cml4V29ybGROZWVkc1VwZGF0ZSk7bGV0IGw9dGhpcy5CaW5kaW5nVHlwZS5EaXJlY3Q7aWYobyE9PXZvaWQgMCl7aWYoaT09PSJtb3JwaFRhcmdldEluZmx1ZW5jZXMiKXtpZighdC5nZW9tZXRyeSl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkuIix0aGlzKTtyZXR1cm59aWYodC5nZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KXtpZighdC5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy4iLHRoaXMpO3JldHVybn10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtvXSE9PXZvaWQgMCYmKG89dC5tb3JwaFRhcmdldERpY3Rpb25hcnlbb10pfWVsc2V7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIG9uIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iLHRoaXMpO3JldHVybn19bD10aGlzLkJpbmRpbmdUeXBlLkFycmF5RWxlbWVudCx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSx0aGlzLnByb3BlcnR5SW5kZXg9b31lbHNlIGEuZnJvbUFycmF5IT09dm9pZCAwJiZhLnRvQXJyYXkhPT12b2lkIDA/KGw9dGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSk6QXJyYXkuaXNBcnJheShhKT8obD10aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTp0aGlzLnByb3BlcnR5TmFtZT1pO3RoaXMuZ2V0VmFsdWU9dGhpcy5HZXR0ZXJCeUJpbmRpbmdUeXBlW2xdLHRoaXMuc2V0VmFsdWU9dGhpcy5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZ1tsXVtzXX11bmJpbmQoKXt0aGlzLm5vZGU9bnVsbCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfX07Q3IuQ29tcG9zaXRlPWZodDtDci5wcm90b3R5cGUuQmluZGluZ1R5cGU9e0RpcmVjdDowLEVudGlyZUFycmF5OjEsQXJyYXlFbGVtZW50OjIsSGFzRnJvbVRvQXJyYXk6M307Q3IucHJvdG90eXBlLlZlcnNpb25pbmc9e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn07Q3IucHJvdG90eXBlLkdldHRlckJ5QmluZGluZ1R5cGU9W0NyLnByb3RvdHlwZS5fZ2V0VmFsdWVfZGlyZWN0LENyLnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXksQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheUVsZW1lbnQsQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV90b0FycmF5XTtDci5wcm90b3R5cGUuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc9W1tDci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdCxDci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSxDci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheSxDci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtDci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheSxDci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSxDci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXV07dmFyIEJVPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy51dWlkPU5sKCksdGhpcy5fb2JqZWN0cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLHRoaXMubkNhY2hlZE9iamVjdHNfPTA7bGV0IHQ9e307dGhpcy5faW5kaWNlc0J5VVVJRD10O2ZvcihsZXQgbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuIT09aTsrK24pdFthcmd1bWVudHNbbl0udXVpZF09bjt0aGlzLl9wYXRocz1bXSx0aGlzLl9wYXJzZWRQYXRocz1bXSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg9e307bGV0IHI9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gci5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLXIubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIHIuX2JpbmRpbmdzLmxlbmd0aH19fWFkZCgpe2xldCB0PXRoaXMuX29iamVjdHMscj10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fcGF0aHMsaT10aGlzLl9wYXJzZWRQYXRocyxvPXRoaXMuX2JpbmRpbmdzLGE9by5sZW5ndGgscyxsPXQubGVuZ3RoLGM9dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCB1PTAsaD1hcmd1bWVudHMubGVuZ3RoO3UhPT1oOysrdSl7bGV0IGY9YXJndW1lbnRzW3VdLHA9Zi51dWlkLGQ9cltwXTtpZihkPT09dm9pZCAwKXtkPWwrKyxyW3BdPWQsdC5wdXNoKGYpO2ZvcihsZXQgZz0wLF89YTtnIT09XzsrK2cpb1tnXS5wdXNoKG5ldyBDcihmLG5bZ10saVtnXSkpfWVsc2UgaWYoZDxjKXtzPXRbZF07bGV0IGc9LS1jLF89dFtnXTtyW18udXVpZF09ZCx0W2RdPV8scltwXT1nLHRbZ109Zjtmb3IobGV0IHk9MCx4PWE7eSE9PXg7Kyt5KXtsZXQgYj1vW3ldLFM9YltnXSxDPWJbZF07YltkXT1TLEM9PT12b2lkIDAmJihDPW5ldyBDcihmLG5beV0saVt5XSkpLGJbZ109Q319ZWxzZSB0W2RdIT09cyYmY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uT2JqZWN0R3JvdXA6IERpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4iKX10aGlzLm5DYWNoZWRPYmplY3RzXz1jfXJlbW92ZSgpe2xldCB0PXRoaXMuX29iamVjdHMscj10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fYmluZGluZ3MsaT1uLmxlbmd0aCxvPXRoaXMubkNhY2hlZE9iamVjdHNfO2ZvcihsZXQgYT0wLHM9YXJndW1lbnRzLmxlbmd0aDthIT09czsrK2Epe2xldCBsPWFyZ3VtZW50c1thXSxjPWwudXVpZCx1PXJbY107aWYodSE9PXZvaWQgMCYmdT49byl7bGV0IGg9bysrLGY9dFtoXTtyW2YudXVpZF09dSx0W3VdPWYscltjXT1oLHRbaF09bDtmb3IobGV0IHA9MCxkPWk7cCE9PWQ7KytwKXtsZXQgZz1uW3BdLF89Z1toXSx5PWdbdV07Z1t1XT1fLGdbaF09eX19fXRoaXMubkNhY2hlZE9iamVjdHNfPW99dW5jYWNoZSgpe2xldCB0PXRoaXMuX29iamVjdHMscj10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fYmluZGluZ3MsaT1uLmxlbmd0aCxvPXRoaXMubkNhY2hlZE9iamVjdHNfLGE9dC5sZW5ndGg7Zm9yKGxldCBzPTAsbD1hcmd1bWVudHMubGVuZ3RoO3MhPT1sOysrcyl7bGV0IGM9YXJndW1lbnRzW3NdLHU9Yy51dWlkLGg9clt1XTtpZihoIT09dm9pZCAwKWlmKGRlbGV0ZSByW3VdLGg8byl7bGV0IGY9LS1vLHA9dFtmXSxkPS0tYSxnPXRbZF07cltwLnV1aWRdPWgsdFtoXT1wLHJbZy51dWlkXT1mLHRbZl09Zyx0LnBvcCgpO2ZvcihsZXQgXz0wLHk9aTtfIT09eTsrK18pe2xldCB4PW5bX10sYj14W2ZdLFM9eFtkXTt4W2hdPWIseFtmXT1TLHgucG9wKCl9fWVsc2V7bGV0IGY9LS1hLHA9dFtmXTtmPjAmJihyW3AudXVpZF09aCksdFtoXT1wLHQucG9wKCk7Zm9yKGxldCBkPTAsZz1pO2QhPT1nOysrZCl7bGV0IF89bltkXTtfW2hdPV9bZl0sXy5wb3AoKX19fXRoaXMubkNhY2hlZE9iamVjdHNfPW99c3Vic2NyaWJlXyh0LHIpe2xldCBuPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxpPW5bdF0sbz10aGlzLl9iaW5kaW5ncztpZihpIT09dm9pZCAwKXJldHVybiBvW2ldO2xldCBhPXRoaXMuX3BhdGhzLHM9dGhpcy5fcGFyc2VkUGF0aHMsbD10aGlzLl9vYmplY3RzLGM9bC5sZW5ndGgsdT10aGlzLm5DYWNoZWRPYmplY3RzXyxoPW5ldyBBcnJheShjKTtpPW8ubGVuZ3RoLG5bdF09aSxhLnB1c2godCkscy5wdXNoKHIpLG8ucHVzaChoKTtmb3IobGV0IGY9dSxwPWwubGVuZ3RoO2YhPT1wOysrZil7bGV0IGQ9bFtmXTtoW2ZdPW5ldyBDcihkLHQscil9cmV0dXJuIGh9dW5zdWJzY3JpYmVfKHQpe2xldCByPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxuPXJbdF07aWYobiE9PXZvaWQgMCl7bGV0IGk9dGhpcy5fcGF0aHMsbz10aGlzLl9wYXJzZWRQYXRocyxhPXRoaXMuX2JpbmRpbmdzLHM9YS5sZW5ndGgtMSxsPWFbc10sYz10W3NdO3JbY109bixhW25dPWwsYS5wb3AoKSxvW25dPW9bc10sby5wb3AoKSxpW25dPWlbc10saS5wb3AoKX19fTtCVS5wcm90b3R5cGUuaXNBbmltYXRpb25PYmplY3RHcm91cD0hMDt2YXIgcGh0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuPW51bGwsaT1yLmJsZW5kTW9kZSl7dGhpcy5fbWl4ZXI9dCx0aGlzLl9jbGlwPXIsdGhpcy5fbG9jYWxSb290PW4sdGhpcy5ibGVuZE1vZGU9aTtsZXQgbz1yLnRyYWNrcyxhPW8ubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9e2VuZGluZ1N0YXJ0OkV2LGVuZGluZ0VuZDpFdn07Zm9yKGxldCBjPTA7YyE9PWE7KytjKXtsZXQgdT1vW2NdLmNyZWF0ZUludGVycG9sYW50KG51bGwpO3NbY109dSx1LnNldHRpbmdzPWx9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncz1sLHRoaXMuX2ludGVycG9sYW50cz1zLHRoaXMuX3Byb3BlcnR5QmluZGluZ3M9bmV3IEFycmF5KGEpLHRoaXMuX2NhY2hlSW5kZXg9bnVsbCx0aGlzLl9ieUNsaXBDYWNoZUluZGV4PW51bGwsdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMubG9vcD1FZmUsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTEsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPTEsdGhpcy53ZWlnaHQ9MSx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9MSx0aGlzLnJlcGV0aXRpb25zPTEvMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD0hMSx0aGlzLnplcm9TbG9wZUF0U3RhcnQ9ITAsdGhpcy56ZXJvU2xvcGVBdEVuZD0hMH1wbGF5KCl7cmV0dXJuIHRoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzfXN0b3AoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2RlYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpcy5yZXNldCgpfXJlc2V0KCl7cmV0dXJuIHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRpbWU9MCx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKX1pc1J1bm5pbmcoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5wYXVzZWQmJnRoaXMudGltZVNjYWxlIT09MCYmdGhpcy5fc3RhcnRUaW1lPT09bnVsbCYmdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfWlzU2NoZWR1bGVkKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1zdGFydEF0KHQpe3JldHVybiB0aGlzLl9zdGFydFRpbWU9dCx0aGlzfXNldExvb3AodCxyKXtyZXR1cm4gdGhpcy5sb29wPXQsdGhpcy5yZXBldGl0aW9ucz1yLHRoaXN9c2V0RWZmZWN0aXZlV2VpZ2h0KHQpe3JldHVybiB0aGlzLndlaWdodD10LHRoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLmVuYWJsZWQ/dDowLHRoaXMuc3RvcEZhZGluZygpfWdldEVmZmVjdGl2ZVdlaWdodCgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHR9ZmFkZUluKHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDAsMSl9ZmFkZU91dCh0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwxLDApfWNyb3NzRmFkZUZyb20odCxyLG4pe2lmKHQuZmFkZU91dChyKSx0aGlzLmZhZGVJbihyKSxuKXtsZXQgaT10aGlzLl9jbGlwLmR1cmF0aW9uLG89dC5fY2xpcC5kdXJhdGlvbixhPW8vaSxzPWkvbzt0LndhcnAoMSxhLHIpLHRoaXMud2FycChzLDEscil9cmV0dXJuIHRoaXN9Y3Jvc3NGYWRlVG8odCxyLG4pe3JldHVybiB0LmNyb3NzRmFkZUZyb20odGhpcyxyLG4pfXN0b3BGYWRpbmcoKXtsZXQgdD10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtyZXR1cm4gdCE9PW51bGwmJih0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31zZXRFZmZlY3RpdmVUaW1lU2NhbGUodCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXQsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPXRoaXMucGF1c2VkPzA6dCx0aGlzLnN0b3BXYXJwaW5nKCl9Z2V0RWZmZWN0aXZlVGltZVNjYWxlKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZX1zZXREdXJhdGlvbih0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dGhpcy5fY2xpcC5kdXJhdGlvbi90LHRoaXMuc3RvcFdhcnBpbmcoKX1zeW5jV2l0aCh0KXtyZXR1cm4gdGhpcy50aW1lPXQudGltZSx0aGlzLnRpbWVTY2FsZT10LnRpbWVTY2FsZSx0aGlzLnN0b3BXYXJwaW5nKCl9aGFsdCh0KXtyZXR1cm4gdGhpcy53YXJwKHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwwLHQpfXdhcnAodCxyLG4pe2xldCBpPXRoaXMuX21peGVyLG89aS50aW1lLGE9dGhpcy50aW1lU2NhbGUscz10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtzPT09bnVsbCYmKHM9aS5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PXMpO2xldCBsPXMucGFyYW1ldGVyUG9zaXRpb25zLGM9cy5zYW1wbGVWYWx1ZXM7cmV0dXJuIGxbMF09byxsWzFdPW8rbixjWzBdPXQvYSxjWzFdPXIvYSx0aGlzfXN0b3BXYXJwaW5nKCl7bGV0IHQ9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7cmV0dXJuIHQhPT1udWxsJiYodGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9Z2V0TWl4ZXIoKXtyZXR1cm4gdGhpcy5fbWl4ZXJ9Z2V0Q2xpcCgpe3JldHVybiB0aGlzLl9jbGlwfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHx0aGlzLl9taXhlci5fcm9vdH1fdXBkYXRlKHQscixuLGkpe2lmKCF0aGlzLmVuYWJsZWQpe3RoaXMuX3VwZGF0ZVdlaWdodCh0KTtyZXR1cm59bGV0IG89dGhpcy5fc3RhcnRUaW1lO2lmKG8hPT1udWxsKXtsZXQgbD0odC1vKSpuO2lmKGw8MHx8bj09PTApcmV0dXJuO3RoaXMuX3N0YXJ0VGltZT1udWxsLHI9bipsfXIqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZSh0KTtsZXQgYT10aGlzLl91cGRhdGVUaW1lKHIpLHM9dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2lmKHM+MCl7bGV0IGw9dGhpcy5faW50ZXJwb2xhbnRzLGM9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztzd2l0Y2godGhpcy5ibGVuZE1vZGUpe2Nhc2UgUmh0OmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUoYSksY1t1XS5hY2N1bXVsYXRlQWRkaXRpdmUocyk7YnJlYWs7Y2FzZSBYVTpkZWZhdWx0OmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUoYSksY1t1XS5hY2N1bXVsYXRlKGkscyl9fX1fdXBkYXRlV2VpZ2h0KHQpe2xldCByPTA7aWYodGhpcy5lbmFibGVkKXtyPXRoaXMud2VpZ2h0O2xldCBuPXRoaXMuX3dlaWdodEludGVycG9sYW50O2lmKG4hPT1udWxsKXtsZXQgaT1uLmV2YWx1YXRlKHQpWzBdO3IqPWksdD5uLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcEZhZGluZygpLGk9PT0wJiYodGhpcy5lbmFibGVkPSExKSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9cixyfV91cGRhdGVUaW1lU2NhbGUodCl7bGV0IHI9MDtpZighdGhpcy5wYXVzZWQpe3I9dGhpcy50aW1lU2NhbGU7bGV0IG49dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7biE9PW51bGwmJihyKj1uLmV2YWx1YXRlKHQpWzBdLHQ+bi5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCkscj09PTA/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9cikpfXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9cixyfV91cGRhdGVUaW1lKHQpe2xldCByPXRoaXMuX2NsaXAuZHVyYXRpb24sbj10aGlzLmxvb3AsaT10aGlzLnRpbWUrdCxvPXRoaXMuX2xvb3BDb3VudCxhPW49PT1UZmU7aWYodD09PTApcmV0dXJuIG89PT0tMT9pOmEmJihvJjEpPT09MT9yLWk6aTtpZihuPT09TWZlKXtvPT09LTEmJih0aGlzLl9sb29wQ291bnQ9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLCEwLCExKSk7dDp7aWYoaT49cilpPXI7ZWxzZSBpZihpPDApaT0wO2Vsc2V7dGhpcy50aW1lPWk7YnJlYWsgdH10aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSx0aGlzLnRpbWU9aSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ8MD8tMToxfSl9fWVsc2V7aWYobz09PS0xJiYodD49MD8obz0wLHRoaXMuX3NldEVuZGluZ3MoITAsdGhpcy5yZXBldGl0aW9ucz09PTAsYSkpOnRoaXMuX3NldEVuZGluZ3ModGhpcy5yZXBldGl0aW9ucz09PTAsITAsYSkpLGk+PXJ8fGk8MCl7bGV0IHM9TWF0aC5mbG9vcihpL3IpO2ktPXIqcyxvKz1NYXRoLmFicyhzKTtsZXQgbD10aGlzLnJlcGV0aXRpb25zLW87aWYobDw9MCl0aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSxpPXQ+MD9yOjAsdGhpcy50aW1lPWksdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PjA/MTotMX0pO2Vsc2V7aWYobD09PTEpe2xldCBjPXQ8MDt0aGlzLl9zZXRFbmRpbmdzKGMsIWMsYSl9ZWxzZSB0aGlzLl9zZXRFbmRpbmdzKCExLCExLGEpO3RoaXMuX2xvb3BDb3VudD1vLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6Imxvb3AiLGFjdGlvbjp0aGlzLGxvb3BEZWx0YTpzfSl9fWVsc2UgdGhpcy50aW1lPWk7aWYoYSYmKG8mMSk9PT0xKXJldHVybiByLWl9cmV0dXJuIGl9X3NldEVuZGluZ3ModCxyLG4pe2xldCBpPXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M7bj8oaS5lbmRpbmdTdGFydD1UdixpLmVuZGluZ0VuZD1Udik6KHQ/aS5lbmRpbmdTdGFydD10aGlzLnplcm9TbG9wZUF0U3RhcnQ/VHY6RXY6aS5lbmRpbmdTdGFydD1aUCxyP2kuZW5kaW5nRW5kPXRoaXMuemVyb1Nsb3BlQXRFbmQ/VHY6RXY6aS5lbmRpbmdFbmQ9WlApfV9zY2hlZHVsZUZhZGluZyh0LHIsbil7bGV0IGk9dGhpcy5fbWl4ZXIsbz1pLnRpbWUsYT10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDthPT09bnVsbCYmKGE9aS5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3dlaWdodEludGVycG9sYW50PWEpO2xldCBzPWEucGFyYW1ldGVyUG9zaXRpb25zLGw9YS5zYW1wbGVWYWx1ZXM7cmV0dXJuIHNbMF09byxsWzBdPXIsc1sxXT1vK3QsbFsxXT1uLHRoaXN9fSxIVT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX1fYmluZEFjdGlvbih0LHIpe2xldCBuPXQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCxpPXQuX2NsaXAudHJhY2tzLG89aS5sZW5ndGgsYT10Ll9wcm9wZXJ0eUJpbmRpbmdzLHM9dC5faW50ZXJwb2xhbnRzLGw9bi51dWlkLGM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHU9Y1tsXTt1PT09dm9pZCAwJiYodT17fSxjW2xdPXUpO2ZvcihsZXQgaD0wO2ghPT1vOysraCl7bGV0IGY9aVtoXSxwPWYubmFtZSxkPXVbcF07aWYoZCE9PXZvaWQgMCkrK2QucmVmZXJlbmNlQ291bnQsYVtoXT1kO2Vsc2V7aWYoZD1hW2hdLGQhPT12b2lkIDApe2QuX2NhY2hlSW5kZXg9PT1udWxsJiYoKytkLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhkLGwscCkpO2NvbnRpbnVlfWxldCBnPXImJnIuX3Byb3BlcnR5QmluZGluZ3NbaF0uYmluZGluZy5wYXJzZWRQYXRoO2Q9bmV3IEZVKENyLmNyZWF0ZShuLHAsZyksZi5WYWx1ZVR5cGVOYW1lLGYuZ2V0VmFsdWVTaXplKCkpLCsrZC5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZCxsLHApLGFbaF09ZH1zW2hdLnJlc3VsdEJ1ZmZlcj1kLmJ1ZmZlcn19X2FjdGl2YXRlQWN0aW9uKHQpe2lmKCF0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7aWYodC5fY2FjaGVJbmRleD09PW51bGwpe2xldCBuPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQsaT10Ll9jbGlwLnV1aWQsbz10aGlzLl9hY3Rpb25zQnlDbGlwW2ldO3RoaXMuX2JpbmRBY3Rpb24odCxvJiZvLmtub3duQWN0aW9uc1swXSksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24odCxpLG4pfWxldCByPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXJbbl07by51c2VDb3VudCsrPT09MCYmKHRoaXMuX2xlbmRCaW5kaW5nKG8pLG8uc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbih0KX19X2RlYWN0aXZhdGVBY3Rpb24odCl7aWYodGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2xldCByPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXJbbl07LS1vLnVzZUNvdW50PT09MCYmKG8ucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl90YWtlQmFja0JpbmRpbmcobykpfXRoaXMuX3Rha2VCYWNrQWN0aW9uKHQpfX1faW5pdE1lbW9yeU1hbmFnZXIoKXt0aGlzLl9hY3Rpb25zPVtdLHRoaXMuX25BY3RpdmVBY3Rpb25zPTAsdGhpcy5fYWN0aW9uc0J5Q2xpcD17fSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9uQWN0aXZlQmluZGluZ3M9MCx0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWU9e30sdGhpcy5fY29udHJvbEludGVycG9sYW50cz1bXSx0aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cz0wO2xldCB0PXRoaXM7dGhpcy5zdGF0cz17YWN0aW9uczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2FjdGlvbnMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUFjdGlvbnN9fSxiaW5kaW5nczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2JpbmRpbmdzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVCaW5kaW5nc319LGNvbnRyb2xJbnRlcnBvbGFudHM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9jb250cm9sSW50ZXJwb2xhbnRzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzfX19fV9pc0FjdGl2ZUFjdGlvbih0KXtsZXQgcj10Ll9jYWNoZUluZGV4O3JldHVybiByIT09bnVsbCYmcjx0aGlzLl9uQWN0aXZlQWN0aW9uc31fYWRkSW5hY3RpdmVBY3Rpb24odCxyLG4pe2xldCBpPXRoaXMuX2FjdGlvbnMsbz10aGlzLl9hY3Rpb25zQnlDbGlwLGE9b1tyXTtpZihhPT09dm9pZCAwKWE9e2tub3duQWN0aW9uczpbdF0sYWN0aW9uQnlSb290Ont9fSx0Ll9ieUNsaXBDYWNoZUluZGV4PTAsb1tyXT1hO2Vsc2V7bGV0IHM9YS5rbm93bkFjdGlvbnM7dC5fYnlDbGlwQ2FjaGVJbmRleD1zLmxlbmd0aCxzLnB1c2godCl9dC5fY2FjaGVJbmRleD1pLmxlbmd0aCxpLnB1c2godCksYS5hY3Rpb25CeVJvb3Rbbl09dH1fcmVtb3ZlSW5hY3RpdmVBY3Rpb24odCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXJbci5sZW5ndGgtMV0saT10Ll9jYWNoZUluZGV4O24uX2NhY2hlSW5kZXg9aSxyW2ldPW4sci5wb3AoKSx0Ll9jYWNoZUluZGV4PW51bGw7bGV0IG89dC5fY2xpcC51dWlkLGE9dGhpcy5fYWN0aW9uc0J5Q2xpcCxzPWFbb10sbD1zLmtub3duQWN0aW9ucyxjPWxbbC5sZW5ndGgtMV0sdT10Ll9ieUNsaXBDYWNoZUluZGV4O2MuX2J5Q2xpcENhY2hlSW5kZXg9dSxsW3VdPWMsbC5wb3AoKSx0Ll9ieUNsaXBDYWNoZUluZGV4PW51bGw7bGV0IGg9cy5hY3Rpb25CeVJvb3QsZj0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkO2RlbGV0ZSBoW2ZdLGwubGVuZ3RoPT09MCYmZGVsZXRlIGFbb10sdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KXtsZXQgcj10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7biE9PWk7KytuKXtsZXQgbz1yW25dOy0tby5yZWZlcmVuY2VDb3VudD09PTAmJnRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhvKX19X2xlbmRBY3Rpb24odCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXQuX2NhY2hlSW5kZXgsaT10aGlzLl9uQWN0aXZlQWN0aW9ucysrLG89cltpXTt0Ll9jYWNoZUluZGV4PWkscltpXT10LG8uX2NhY2hlSW5kZXg9bixyW25dPW99X3Rha2VCYWNrQWN0aW9uKHQpe2xldCByPXRoaXMuX2FjdGlvbnMsbj10Ll9jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQWN0aW9ucyxvPXJbaV07dC5fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9jYWNoZUluZGV4PW4scltuXT1vfV9hZGRJbmFjdGl2ZUJpbmRpbmcodCxyLG4pe2xldCBpPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxvPXRoaXMuX2JpbmRpbmdzLGE9aVtyXTthPT09dm9pZCAwJiYoYT17fSxpW3JdPWEpLGFbbl09dCx0Ll9jYWNoZUluZGV4PW8ubGVuZ3RoLG8ucHVzaCh0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHQpe2xldCByPXRoaXMuX2JpbmRpbmdzLG49dC5iaW5kaW5nLGk9bi5yb290Tm9kZS51dWlkLG89bi5wYXRoLGE9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHM9YVtpXSxsPXJbci5sZW5ndGgtMV0sYz10Ll9jYWNoZUluZGV4O2wuX2NhY2hlSW5kZXg9YyxyW2NdPWwsci5wb3AoKSxkZWxldGUgc1tvXSxPYmplY3Qua2V5cyhzKS5sZW5ndGg9PT0wJiZkZWxldGUgYVtpXX1fbGVuZEJpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10Ll9jYWNoZUluZGV4LGk9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzKyssbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fdGFrZUJhY2tCaW5kaW5nKHQpe2xldCByPXRoaXMuX2JpbmRpbmdzLG49dC5fY2FjaGVJbmRleCxpPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLG89cltpXTt0Ll9jYWNoZUluZGV4PWkscltpXT10LG8uX2NhY2hlSW5kZXg9bixyW25dPW99X2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKXtsZXQgdD10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLHI9dGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMrKyxuPXRbcl07cmV0dXJuIG49PT12b2lkIDAmJihuPW5ldyB3NihuZXcgRmxvYXQzMkFycmF5KDIpLG5ldyBGbG9hdDMyQXJyYXkoMiksMSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyKSxuLl9fY2FjaGVJbmRleD1yLHRbcl09biksbn1fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCl7bGV0IHI9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxuPXQuX19jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyxvPXJbaV07dC5fX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fX2NhY2hlSW5kZXg9bixyW25dPW99Y2xpcEFjdGlvbih0LHIsbil7bGV0IGk9cnx8dGhpcy5fcm9vdCxvPWkudXVpZCxhPXR5cGVvZiB0PT0ic3RyaW5nIj9Rdi5maW5kQnlOYW1lKGksdCk6dCxzPWEhPT1udWxsP2EudXVpZDp0LGw9dGhpcy5fYWN0aW9uc0J5Q2xpcFtzXSxjPW51bGw7aWYobj09PXZvaWQgMCYmKGEhPT1udWxsP249YS5ibGVuZE1vZGU6bj1YVSksbCE9PXZvaWQgMCl7bGV0IGg9bC5hY3Rpb25CeVJvb3Rbb107aWYoaCE9PXZvaWQgMCYmaC5ibGVuZE1vZGU9PT1uKXJldHVybiBoO2M9bC5rbm93bkFjdGlvbnNbMF0sYT09PW51bGwmJihhPWMuX2NsaXApfWlmKGE9PT1udWxsKXJldHVybiBudWxsO2xldCB1PW5ldyBwaHQodGhpcyxhLHIsbik7cmV0dXJuIHRoaXMuX2JpbmRBY3Rpb24odSxjKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih1LHMsbyksdX1leGlzdGluZ0FjdGlvbih0LHIpe2xldCBuPXJ8fHRoaXMuX3Jvb3QsaT1uLnV1aWQsbz10eXBlb2YgdD09InN0cmluZyI/UXYuZmluZEJ5TmFtZShuLHQpOnQsYT1vP28udXVpZDp0LHM9dGhpcy5fYWN0aW9uc0J5Q2xpcFthXTtyZXR1cm4gcyE9PXZvaWQgMCYmcy5hY3Rpb25CeVJvb3RbaV18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnMscj10aGlzLl9uQWN0aXZlQWN0aW9ucztmb3IobGV0IG49ci0xO24+PTA7LS1uKXRbbl0uc3RvcCgpO3JldHVybiB0aGlzfXVwZGF0ZSh0KXt0Kj10aGlzLnRpbWVTY2FsZTtsZXQgcj10aGlzLl9hY3Rpb25zLG49dGhpcy5fbkFjdGl2ZUFjdGlvbnMsaT10aGlzLnRpbWUrPXQsbz1NYXRoLnNpZ24odCksYT10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PW47KytjKXJbY10uX3VwZGF0ZShpLHQsbyxhKTtsZXQgcz10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2Mpc1tjXS5hcHBseShhKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgcj0wO3I8dGhpcy5fYWN0aW9ucy5sZW5ndGg7cisrKXRoaXMuX2FjdGlvbnNbcl0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXQudXVpZCxpPXRoaXMuX2FjdGlvbnNCeUNsaXAsbz1pW25dO2lmKG8hPT12b2lkIDApe2xldCBhPW8ua25vd25BY3Rpb25zO2ZvcihsZXQgcz0wLGw9YS5sZW5ndGg7cyE9PWw7KytzKXtsZXQgYz1hW3NdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IHU9Yy5fY2FjaGVJbmRleCxoPXJbci5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxoLl9jYWNoZUluZGV4PXUsclt1XT1oLHIucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgaVtuXX19dW5jYWNoZVJvb3QodCl7bGV0IHI9dC51dWlkLG49dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IGEgaW4gbil7bGV0IHM9blthXS5hY3Rpb25CeVJvb3QsbD1zW3JdO2whPT12b2lkIDAmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGwpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGwpKX1sZXQgaT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsbz1pW3JdO2lmKG8hPT12b2lkIDApZm9yKGxldCBhIGluIG8pe2xldCBzPW9bYV07cy5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhzKX19dW5jYWNoZUFjdGlvbih0LHIpe2xldCBuPXRoaXMuZXhpc3RpbmdBY3Rpb24odCxyKTtuIT09bnVsbCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obiksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obikpfX07SFUucHJvdG90eXBlLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMSk7dmFyIGdNPWNsYXNze2NvbnN0cnVjdG9yKHQpe3R5cGVvZiB0PT0ic3RyaW5nIiYmKGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKSx0PWFyZ3VtZW50c1sxXSksdGhpcy52YWx1ZT10fWNsb25lKCl7cmV0dXJuIG5ldyBnTSh0aGlzLnZhbHVlLmNsb25lPT09dm9pZCAwP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX19LFZVPWNsYXNzIGV4dGVuZHMgZW17Y29uc3RydWN0b3IodCxyLG49MSl7c3VwZXIodCxyKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9bn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc31jbG9uZSh0KXtsZXQgcj1zdXBlci5jbG9uZSh0KTtyZXR1cm4gci5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxyfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHIuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxyLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHJ9fTtWVS5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgVVU9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSxvKXt0aGlzLmJ1ZmZlcj10LHRoaXMudHlwZT1yLHRoaXMuaXRlbVNpemU9bix0aGlzLmVsZW1lbnRTaXplPWksdGhpcy5jb3VudD1vLHRoaXMudmVyc2lvbj0wfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzfXNldFR5cGUodCxyKXtyZXR1cm4gdGhpcy50eXBlPXQsdGhpcy5lbGVtZW50U2l6ZT1yLHRoaXN9c2V0SXRlbVNpemUodCl7cmV0dXJuIHRoaXMuaXRlbVNpemU9dCx0aGlzfXNldENvdW50KHQpe3JldHVybiB0aGlzLmNvdW50PXQsdGhpc319O1VVLnByb3RvdHlwZS5pc0dMQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBkaHQ9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG49MCxpPTEvMCl7dGhpcy5yYXk9bmV3IEpmKHQsciksdGhpcy5uZWFyPW4sdGhpcy5mYXI9aSx0aGlzLmNhbWVyYT1udWxsLHRoaXMubGF5ZXJzPW5ldyBYMyx0aGlzLnBhcmFtcz17TWVzaDp7fSxMaW5lOnt0aHJlc2hvbGQ6MX0sTE9EOnt9LFBvaW50czp7dGhyZXNob2xkOjF9LFNwcml0ZTp7fX19c2V0KHQscil7dGhpcy5yYXkuc2V0KHQscil9c2V0RnJvbUNhbWVyYSh0LHIpe3ImJnIuaXNQZXJzcGVjdGl2ZUNhbWVyYT8odGhpcy5yYXkub3JpZ2luLnNldEZyb21NYXRyaXhQb3NpdGlvbihyLm1hdHJpeFdvcmxkKSx0aGlzLnJheS5kaXJlY3Rpb24uc2V0KHQueCx0LnksLjUpLnVucHJvamVjdChyKS5zdWIodGhpcy5yYXkub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzLmNhbWVyYT1yKTpyJiZyLmlzT3J0aG9ncmFwaGljQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0KHQueCx0LnksKHIubmVhcityLmZhcikvKHIubmVhci1yLmZhcikpLnVucHJvamVjdChyKSx0aGlzLnJheS5kaXJlY3Rpb24uc2V0KDAsMCwtMSkudHJhbnNmb3JtRGlyZWN0aW9uKHIubWF0cml4V29ybGQpLHRoaXMuY2FtZXJhPXIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLlJheWNhc3RlcjogVW5zdXBwb3J0ZWQgY2FtZXJhIHR5cGU6ICIrci50eXBlKX1pbnRlcnNlY3RPYmplY3QodCxyPSEwLG49W10pe3JldHVybiBtaHQodCx0aGlzLG4sciksbi5zb3J0KFRoZSksbn1pbnRlcnNlY3RPYmplY3RzKHQscj0hMCxuPVtdKXtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspbWh0KHRbaV0sdGhpcyxuLHIpO3JldHVybiBuLnNvcnQoVGhlKSxufX07ZnVuY3Rpb24gVGhlKGUsdCl7cmV0dXJuIGUuZGlzdGFuY2UtdC5kaXN0YW5jZX1mdW5jdGlvbiBtaHQoZSx0LHIsbil7aWYoZS5sYXllcnMudGVzdCh0LmxheWVycykmJmUucmF5Y2FzdCh0LHIpLG49PT0hMCl7bGV0IGk9ZS5jaGlsZHJlbjtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspbWh0KGlbb10sdCxyLCEwKX19dmFyIF9NPWNsYXNze2NvbnN0cnVjdG9yKHQ9MSxyPTAsbj0wKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnBoaT1yLHRoaXMudGhldGE9bix0aGlzfXNldCh0LHIsbil7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy5waGk9cix0aGlzLnRoZXRhPW4sdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLnBoaT10LnBoaSx0aGlzLnRoZXRhPXQudGhldGEsdGhpc31tYWtlU2FmZSgpe3JldHVybiB0aGlzLnBoaT1NYXRoLm1heCgxZS02LE1hdGgubWluKE1hdGguUEktMWUtNix0aGlzLnBoaSkpLHRoaXN9c2V0RnJvbVZlY3RvcjModCl7cmV0dXJuIHRoaXMuc2V0RnJvbUNhcnRlc2lhbkNvb3Jkcyh0LngsdC55LHQueil9c2V0RnJvbUNhcnRlc2lhbkNvb3Jkcyh0LHIsbil7cmV0dXJuIHRoaXMucmFkaXVzPU1hdGguc3FydCh0KnQrcipyK24qbiksdGhpcy5yYWRpdXM9PT0wPyh0aGlzLnRoZXRhPTAsdGhpcy5waGk9MCk6KHRoaXMudGhldGE9TWF0aC5hdGFuMih0LG4pLHRoaXMucGhpPU1hdGguYWNvcyhabyhyL3RoaXMucmFkaXVzLC0xLDEpKSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxnaHQ9Y2xhc3N7Y29uc3RydWN0b3IodD0xLHI9MCxuPTApe3JldHVybiB0aGlzLnJhZGl1cz10LHRoaXMudGhldGE9cix0aGlzLnk9bix0aGlzfXNldCh0LHIsbil7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy50aGV0YT1yLHRoaXMueT1uLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpcy50aGV0YT10LnRoZXRhLHRoaXMueT10LnksdGhpc31zZXRGcm9tVmVjdG9yMyh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQueCx0LnksdC56KX1zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHQqdCtuKm4pLHRoaXMudGhldGE9TWF0aC5hdGFuMih0LG4pLHRoaXMueT1yLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sQ2hlPW5ldyBMdCwkMD1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBMdCgxLzAsMS8wKSxyPW5ldyBMdCgtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PXJ9c2V0KHQscil7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShyKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspdGhpcy5leHBhbmRCeVBvaW50KHRbcl0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQscil7bGV0IG49Q2hlLmNvcHkocikubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueX1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueSl9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4Lnl9Z2V0UGFyYW1ldGVyKHQscil7cmV0dXJuIHIuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueSl9Y2xhbXBQb2ludCh0LHIpe3JldHVybiByLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gQ2hlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMubWluLmFkZCh0KSx0aGlzLm1heC5hZGQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubWluLmVxdWFscyh0aGlzLm1pbikmJnQubWF4LmVxdWFscyh0aGlzLm1heCl9fTskMC5wcm90b3R5cGUuaXNCb3gyPSEwO3ZhciBBaGU9bmV3IGosV1Y9bmV3IGoscVU9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5zdGFydC5jb3B5KHQpLHRoaXMuZW5kLmNvcHkociksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnN0YXJ0LmNvcHkodC5zdGFydCksdGhpcy5lbmQuY29weSh0LmVuZCksdGhpc31nZXRDZW50ZXIodCl7cmV0dXJuIHQuYWRkVmVjdG9ycyh0aGlzLnN0YXJ0LHRoaXMuZW5kKS5tdWx0aXBseVNjYWxhciguNSl9ZGVsdGEodCl7cmV0dXJuIHQuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KX1kaXN0YW5jZVNxKCl7cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5lbmQpfWRpc3RhbmNlKCl7cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUbyh0aGlzLmVuZCl9YXQodCxyKXtyZXR1cm4gdGhpcy5kZWx0YShyKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5zdGFydCl9Y2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcih0LHIpe0FoZS5zdWJWZWN0b3JzKHQsdGhpcy5zdGFydCksV1Yuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTtsZXQgbj1XVi5kb3QoV1YpLG89V1YuZG90KEFoZSkvbjtyZXR1cm4gciYmKG89Wm8obywwLDEpKSxvfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxyLG4pe2xldCBpPXRoaXMuY2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcih0LHIpO3JldHVybiB0aGlzLmRlbHRhKG4pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLnN0YXJ0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuc3RhcnQuYXBwbHlNYXRyaXg0KHQpLHRoaXMuZW5kLmFwcGx5TWF0cml4NCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5zdGFydC5lcXVhbHModGhpcy5zdGFydCkmJnQuZW5kLmVxdWFscyh0aGlzLmVuZCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sUGhlPW5ldyBqLF9odD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscil7c3VwZXIoKSx0aGlzLmxpZ2h0PXQsdGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuY29sb3I9cjtsZXQgbj1uZXcgUGUsaT1bMCwwLDAsMCwwLDEsMCwwLDAsMSwwLDEsMCwwLDAsLTEsMCwxLDAsMCwwLDAsMSwxLDAsMCwwLDAsLTEsMV07Zm9yKGxldCBhPTAscz0xLGw9MzI7YTxsO2ErKyxzKyspe2xldCBjPWEvbCpNYXRoLlBJKjIsdT1zL2wqTWF0aC5QSSoyO2kucHVzaChNYXRoLmNvcyhjKSxNYXRoLnNpbihjKSwxLE1hdGguY29zKHUpLE1hdGguc2luKHUpLDEpfW4uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpO2xldCBvPW5ldyBHaSh7Zm9nOiExLHRvbmVNYXBwZWQ6ITF9KTt0aGlzLmNvbmU9bmV3IEFhKG4sbyksdGhpcy5hZGQodGhpcy5jb25lKSx0aGlzLnVwZGF0ZSgpfWRpc3Bvc2UoKXt0aGlzLmNvbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMuY29uZS5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO2xldCB0PXRoaXMubGlnaHQuZGlzdGFuY2U/dGhpcy5saWdodC5kaXN0YW5jZToxZTMscj10Kk1hdGgudGFuKHRoaXMubGlnaHQuYW5nbGUpO3RoaXMuY29uZS5zY2FsZS5zZXQocixyLHQpLFBoZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpLHRoaXMuY29uZS5sb29rQXQoUGhlKSx0aGlzLmNvbG9yIT09dm9pZCAwP3RoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik6dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSxPMD1uZXcgaixZVj1uZXcgTWUsd3V0PW5ldyBNZSxHVT1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQpe2xldCByPXRwZSh0KSxuPW5ldyBQZSxpPVtdLG89W10sYT1uZXcgbmUoMCwwLDEpLHM9bmV3IG5lKDAsMSwwKTtmb3IobGV0IGM9MDtjPHIubGVuZ3RoO2MrKyl7bGV0IHU9cltjXTt1LnBhcmVudCYmdS5wYXJlbnQuaXNCb25lJiYoaS5wdXNoKDAsMCwwKSxpLnB1c2goMCwwLDApLG8ucHVzaChhLnIsYS5nLGEuYiksby5wdXNoKHMucixzLmcscy5iKSl9bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksbi5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUobywzKSk7bGV0IGw9bmV3IEdpKHt2ZXJ0ZXhDb2xvcnM6ITAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsdG9uZU1hcHBlZDohMSx0cmFuc3BhcmVudDohMH0pO3N1cGVyKG4sbCksdGhpcy50eXBlPSJTa2VsZXRvbkhlbHBlciIsdGhpcy5pc1NrZWxldG9uSGVscGVyPSEwLHRoaXMucm9vdD10LHRoaXMuYm9uZXM9cix0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMX11cGRhdGVNYXRyaXhXb3JsZCh0KXtsZXQgcj10aGlzLmJvbmVzLG49dGhpcy5nZW9tZXRyeSxpPW4uZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO3d1dC5jb3B5KHRoaXMucm9vdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Zm9yKGxldCBvPTAsYT0wO288ci5sZW5ndGg7bysrKXtsZXQgcz1yW29dO3MucGFyZW50JiZzLnBhcmVudC5pc0JvbmUmJihZVi5tdWx0aXBseU1hdHJpY2VzKHd1dCxzLm1hdHJpeFdvcmxkKSxPMC5zZXRGcm9tTWF0cml4UG9zaXRpb24oWVYpLGkuc2V0WFlaKGEsTzAueCxPMC55LE8wLnopLFlWLm11bHRpcGx5TWF0cmljZXMod3V0LHMucGFyZW50Lm1hdHJpeFdvcmxkKSxPMC5zZXRGcm9tTWF0cml4UG9zaXRpb24oWVYpLGkuc2V0WFlaKGErMSxPMC54LE8wLnksTzAueiksYSs9Mil9bi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIikubmVlZHNVcGRhdGU9ITAsc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCl9fTtmdW5jdGlvbiB0cGUoZSl7bGV0IHQ9W107ZSYmZS5pc0JvbmUmJnQucHVzaChlKTtmb3IobGV0IHI9MDtyPGUuY2hpbGRyZW4ubGVuZ3RoO3IrKyl0LnB1c2guYXBwbHkodCx0cGUoZS5jaGlsZHJlbltyXSkpO3JldHVybiB0fXZhciB5aHQ9Y2xhc3MgZXh0ZW5kcyBlaXtjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IGk9bmV3IGowKHIsNCwyKSxvPW5ldyBzaCh7d2lyZWZyYW1lOiEwLGZvZzohMSx0b25lTWFwcGVkOiExfSk7c3VwZXIoaSxvKSx0aGlzLmxpZ2h0PXQsdGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpLHRoaXMuY29sb3I9bix0aGlzLnR5cGU9IlBvaW50TGlnaHRIZWxwZXIiLHRoaXMubWF0cml4PXRoaXMubGlnaHQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe3RoaXMuY29sb3IhPT12b2lkIDA/dGhpcy5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik6dGhpcy5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpfX0sdjByPW5ldyBqLEloZT1uZXcgbmUsTGhlPW5ldyBuZSx2aHQ9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIoKSx0aGlzLmxpZ2h0PXQsdGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuY29sb3I9bjtsZXQgaT1uZXcgVzAocik7aS5yb3RhdGVZKE1hdGguUEkqLjUpLHRoaXMubWF0ZXJpYWw9bmV3IHNoKHt3aXJlZnJhbWU6ITAsZm9nOiExLHRvbmVNYXBwZWQ6ITF9KSx0aGlzLmNvbG9yPT09dm9pZCAwJiYodGhpcy5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITApO2xldCBvPWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGE9bmV3IEZsb2F0MzJBcnJheShvLmNvdW50KjMpO2kuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IEplKGEsMykpLHRoaXMuYWRkKG5ldyBlaShpLHRoaXMubWF0ZXJpYWwpKSx0aGlzLnVwZGF0ZSgpfWRpc3Bvc2UoKXt0aGlzLmNoaWxkcmVuWzBdLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLmNoaWxkcmVuWzBdLm1hdGVyaWFsLmRpc3Bvc2UoKX11cGRhdGUoKXtsZXQgdD10aGlzLmNoaWxkcmVuWzBdO2lmKHRoaXMuY29sb3IhPT12b2lkIDApdGhpcy5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik7ZWxzZXtsZXQgcj10Lmdlb21ldHJ5LmdldEF0dHJpYnV0ZSgiY29sb3IiKTtJaGUuY29weSh0aGlzLmxpZ2h0LmNvbG9yKSxMaGUuY29weSh0aGlzLmxpZ2h0Lmdyb3VuZENvbG9yKTtmb3IobGV0IG49MCxpPXIuY291bnQ7bjxpO24rKyl7bGV0IG89bjxpLzI/SWhlOkxoZTtyLnNldFhZWihuLG8ucixvLmcsby5iKX1yLm5lZWRzVXBkYXRlPSEwfXQubG9va0F0KHYwci5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC5tYXRyaXhXb3JsZCkubmVnYXRlKCkpfX0sV1U9Y2xhc3MgZXh0ZW5kcyBBYXtjb25zdHJ1Y3Rvcih0PTEwLHI9MTAsbj00NDczOTI0LGk9ODk0Nzg0OCl7bj1uZXcgbmUobiksaT1uZXcgbmUoaSk7bGV0IG89ci8yLGE9dC9yLHM9dC8yLGw9W10sYz1bXTtmb3IobGV0IGY9MCxwPTAsZD0tcztmPD1yO2YrKyxkKz1hKXtsLnB1c2goLXMsMCxkLHMsMCxkKSxsLnB1c2goZCwwLC1zLGQsMCxzKTtsZXQgZz1mPT09bz9uOmk7Zy50b0FycmF5KGMscCkscCs9MyxnLnRvQXJyYXkoYyxwKSxwKz0zLGcudG9BcnJheShjLHApLHArPTMsZy50b0FycmF5KGMscCkscCs9M31sZXQgdT1uZXcgUGU7dS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUobCwzKSksdS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUoYywzKSk7bGV0IGg9bmV3IEdpKHt2ZXJ0ZXhDb2xvcnM6ITAsdG9uZU1hcHBlZDohMX0pO3N1cGVyKHUsaCksdGhpcy50eXBlPSJHcmlkSGVscGVyIn19LHhodD1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQ9MTAscj0xNixuPTgsaT02NCxvPTQ0NzM5MjQsYT04OTQ3ODQ4KXtvPW5ldyBuZShvKSxhPW5ldyBuZShhKTtsZXQgcz1bXSxsPVtdO2ZvcihsZXQgaD0wO2g8PXI7aCsrKXtsZXQgZj1oL3IqKE1hdGguUEkqMikscD1NYXRoLnNpbihmKSp0LGQ9TWF0aC5jb3MoZikqdDtzLnB1c2goMCwwLDApLHMucHVzaChwLDAsZCk7bGV0IGc9aCYxP286YTtsLnB1c2goZy5yLGcuZyxnLmIpLGwucHVzaChnLnIsZy5nLGcuYil9Zm9yKGxldCBoPTA7aDw9bjtoKyspe2xldCBmPWgmMT9vOmEscD10LXQvbipoO2ZvcihsZXQgZD0wO2Q8aTtkKyspe2xldCBnPWQvaSooTWF0aC5QSSoyKSxfPU1hdGguc2luKGcpKnAseT1NYXRoLmNvcyhnKSpwO3MucHVzaChfLDAseSksbC5wdXNoKGYucixmLmcsZi5iKSxnPShkKzEpL2kqKE1hdGguUEkqMiksXz1NYXRoLnNpbihnKSpwLHk9TWF0aC5jb3MoZykqcCxzLnB1c2goXywwLHkpLGwucHVzaChmLnIsZi5nLGYuYil9fWxldCBjPW5ldyBQZTtjLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShzLDMpKSxjLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShsLDMpKTtsZXQgdT1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIoYyx1KSx0aGlzLnR5cGU9IlBvbGFyR3JpZEhlbHBlciJ9fSxraGU9bmV3IGosalY9bmV3IGosUmhlPW5ldyBqLGJodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1uLHI9PT12b2lkIDAmJihyPTEpO2xldCBpPW5ldyBQZTtpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShbLXIsciwwLHIsciwwLHIsLXIsMCwtciwtciwwLC1yLHIsMF0sMykpO2xldCBvPW5ldyBHaSh7Zm9nOiExLHRvbmVNYXBwZWQ6ITF9KTt0aGlzLmxpZ2h0UGxhbmU9bmV3IGNoKGksbyksdGhpcy5hZGQodGhpcy5saWdodFBsYW5lKSxpPW5ldyBQZSxpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShbMCwwLDAsMCwwLDFdLDMpKSx0aGlzLnRhcmdldExpbmU9bmV3IGNoKGksbyksdGhpcy5hZGQodGhpcy50YXJnZXRMaW5lKSx0aGlzLnVwZGF0ZSgpfWRpc3Bvc2UoKXt0aGlzLmxpZ2h0UGxhbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMubGlnaHRQbGFuZS5tYXRlcmlhbC5kaXNwb3NlKCksdGhpcy50YXJnZXRMaW5lLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe2toZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC5tYXRyaXhXb3JsZCksalYuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxSaGUuc3ViVmVjdG9ycyhqVixraGUpLHRoaXMubGlnaHRQbGFuZS5sb29rQXQoalYpLHRoaXMuY29sb3IhPT12b2lkIDA/KHRoaXMubGlnaHRQbGFuZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvciksdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKSk6KHRoaXMubGlnaHRQbGFuZS5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpKSx0aGlzLnRhcmdldExpbmUubG9va0F0KGpWKSx0aGlzLnRhcmdldExpbmUuc2NhbGUuej1SaGUubGVuZ3RoKCl9fSxYVj1uZXcgaix5aT1uZXcgUnYsd2h0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCl7bGV0IHI9bmV3IFBlLG49bmV3IEdpKHtjb2xvcjoxNjc3NzIxNSx2ZXJ0ZXhDb2xvcnM6ITAsdG9uZU1hcHBlZDohMX0pLGk9W10sbz1bXSxhPXt9LHM9bmV3IG5lKDE2NzU1MjAwKSxsPW5ldyBuZSgxNjcxMTY4MCksYz1uZXcgbmUoNDM3NzUpLHU9bmV3IG5lKDE2Nzc3MjE1KSxoPW5ldyBuZSgzMzU1NDQzKTtmKCJuMSIsIm4yIixzKSxmKCJuMiIsIm40IixzKSxmKCJuNCIsIm4zIixzKSxmKCJuMyIsIm4xIixzKSxmKCJmMSIsImYyIixzKSxmKCJmMiIsImY0IixzKSxmKCJmNCIsImYzIixzKSxmKCJmMyIsImYxIixzKSxmKCJuMSIsImYxIixzKSxmKCJuMiIsImYyIixzKSxmKCJuMyIsImYzIixzKSxmKCJuNCIsImY0IixzKSxmKCJwIiwibjEiLGwpLGYoInAiLCJuMiIsbCksZigicCIsIm4zIixsKSxmKCJwIiwibjQiLGwpLGYoInUxIiwidTIiLGMpLGYoInUyIiwidTMiLGMpLGYoInUzIiwidTEiLGMpLGYoImMiLCJ0Iix1KSxmKCJwIiwiYyIsaCksZigiY24xIiwiY24yIixoKSxmKCJjbjMiLCJjbjQiLGgpLGYoImNmMSIsImNmMiIsaCksZigiY2YzIiwiY2Y0IixoKTtmdW5jdGlvbiBmKGQsZyxfKXtwKGQsXykscChnLF8pfWZ1bmN0aW9uIHAoZCxnKXtpLnB1c2goMCwwLDApLG8ucHVzaChnLnIsZy5nLGcuYiksYVtkXT09PXZvaWQgMCYmKGFbZF09W10pLGFbZF0ucHVzaChpLmxlbmd0aC8zLTEpfXIuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpLHIuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IHhlKG8sMykpLHN1cGVyKHIsbiksdGhpcy50eXBlPSJDYW1lcmFIZWxwZXIiLHRoaXMuY2FtZXJhPXQsdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCYmdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMucG9pbnRNYXA9YSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2xldCB0PXRoaXMuZ2VvbWV0cnkscj10aGlzLnBvaW50TWFwLG49MSxpPTE7eWkucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLmNhbWVyYS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksUGkoImMiLHIsdCx5aSwwLDAsLTEpLFBpKCJ0IixyLHQseWksMCwwLDEpLFBpKCJuMSIscix0LHlpLC1uLC1pLC0xKSxQaSgibjIiLHIsdCx5aSxuLC1pLC0xKSxQaSgibjMiLHIsdCx5aSwtbixpLC0xKSxQaSgibjQiLHIsdCx5aSxuLGksLTEpLFBpKCJmMSIscix0LHlpLC1uLC1pLDEpLFBpKCJmMiIscix0LHlpLG4sLWksMSksUGkoImYzIixyLHQseWksLW4saSwxKSxQaSgiZjQiLHIsdCx5aSxuLGksMSksUGkoInUxIixyLHQseWksbiouNyxpKjEuMSwtMSksUGkoInUyIixyLHQseWksLW4qLjcsaSoxLjEsLTEpLFBpKCJ1MyIscix0LHlpLDAsaSoyLC0xKSxQaSgiY2YxIixyLHQseWksLW4sMCwxKSxQaSgiY2YyIixyLHQseWksbiwwLDEpLFBpKCJjZjMiLHIsdCx5aSwwLC1pLDEpLFBpKCJjZjQiLHIsdCx5aSwwLGksMSksUGkoImNuMSIscix0LHlpLC1uLDAsLTEpLFBpKCJjbjIiLHIsdCx5aSxuLDAsLTEpLFBpKCJjbjMiLHIsdCx5aSwwLC1pLC0xKSxQaSgiY240IixyLHQseWksMCxpLC0xKSx0LmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMH1kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9fTtmdW5jdGlvbiBQaShlLHQscixuLGksbyxhKXtYVi5zZXQoaSxvLGEpLnVucHJvamVjdChuKTtsZXQgcz10W2VdO2lmKHMhPT12b2lkIDApe2xldCBsPXIuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO2ZvcihsZXQgYz0wLHU9cy5sZW5ndGg7Yzx1O2MrKylsLnNldFhZWihzW2NdLFhWLngsWFYueSxYVi56KX19dmFyICRWPW5ldyB0YSx5TT1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQscj0xNjc3Njk2MCl7bGV0IG49bmV3IFVpbnQxNkFycmF5KFswLDEsMSwyLDIsMywzLDAsNCw1LDUsNiw2LDcsNyw0LDAsNCwxLDUsMiw2LDMsN10pLGk9bmV3IEZsb2F0MzJBcnJheSg4KjMpLG89bmV3IFBlO28uc2V0SW5kZXgobmV3IEplKG4sMSkpLG8uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEplKGksMykpLHN1cGVyKG8sbmV3IEdpKHtjb2xvcjpyLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5vYmplY3Q9dCx0aGlzLnR5cGU9IkJveEhlbHBlciIsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMudXBkYXRlKCl9dXBkYXRlKHQpe2lmKHQhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQm94SGVscGVyOiAudXBkYXRlKCkgaGFzIG5vIGxvbmdlciBhcmd1bWVudHMuIiksdGhpcy5vYmplY3QhPT12b2lkIDAmJiRWLnNldEZyb21PYmplY3QodGhpcy5vYmplY3QpLCRWLmlzRW1wdHkoKSlyZXR1cm47bGV0IHI9JFYubWluLG49JFYubWF4LGk9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLG89aS5hcnJheTtvWzBdPW4ueCxvWzFdPW4ueSxvWzJdPW4ueixvWzNdPXIueCxvWzRdPW4ueSxvWzVdPW4ueixvWzZdPXIueCxvWzddPXIueSxvWzhdPW4ueixvWzldPW4ueCxvWzEwXT1yLnksb1sxMV09bi56LG9bMTJdPW4ueCxvWzEzXT1uLnksb1sxNF09ci56LG9bMTVdPXIueCxvWzE2XT1uLnksb1sxN109ci56LG9bMThdPXIueCxvWzE5XT1yLnksb1syMF09ci56LG9bMjFdPW4ueCxvWzIyXT1yLnksb1syM109ci56LGkubmVlZHNVcGRhdGU9ITAsdGhpcy5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1zZXRGcm9tT2JqZWN0KHQpe3JldHVybiB0aGlzLm9iamVjdD10LHRoaXMudXBkYXRlKCksdGhpc31jb3B5KHQpe3JldHVybiBBYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5vYmplY3Q9dC5vYmplY3QsdGhpc319LFNodD1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQscj0xNjc3Njk2MCl7bGV0IG49bmV3IFVpbnQxNkFycmF5KFswLDEsMSwyLDIsMywzLDAsNCw1LDUsNiw2LDcsNyw0LDAsNCwxLDUsMiw2LDMsN10pLGk9WzEsMSwxLC0xLDEsMSwtMSwtMSwxLDEsLTEsMSwxLDEsLTEsLTEsMSwtMSwtMSwtMSwtMSwxLC0xLC0xXSxvPW5ldyBQZTtvLnNldEluZGV4KG5ldyBKZShuLDEpKSxvLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSxzdXBlcihvLG5ldyBHaSh7Y29sb3I6cix0b25lTWFwcGVkOiExfSkpLHRoaXMuYm94PXQsdGhpcy50eXBlPSJCb3gzSGVscGVyIix0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPXRoaXMuYm94O3IuaXNFbXB0eSgpfHwoci5nZXRDZW50ZXIodGhpcy5wb3NpdGlvbiksci5nZXRTaXplKHRoaXMuc2NhbGUpLHRoaXMuc2NhbGUubXVsdGlwbHlTY2FsYXIoLjUpLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpKX19LE1odD1jbGFzcyBleHRlbmRzIGNoe2NvbnN0cnVjdG9yKHQscj0xLG49MTY3NzY5NjApe2xldCBpPW4sbz1bMSwtMSwxLC0xLDEsMSwtMSwtMSwxLDEsMSwxLC0xLDEsMSwtMSwtMSwxLDEsLTEsMSwxLDEsMSwwLDAsMSwwLDAsMF0sYT1uZXcgUGU7YS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUobywzKSksYS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxzdXBlcihhLG5ldyBHaSh7Y29sb3I6aSx0b25lTWFwcGVkOiExfSkpLHRoaXMudHlwZT0iUGxhbmVIZWxwZXIiLHRoaXMucGxhbmU9dCx0aGlzLnNpemU9cjtsZXQgcz1bMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsLTEsMSwxLC0xLDFdLGw9bmV3IFBlO2wuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHMsMykpLGwuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdGhpcy5hZGQobmV3IGVpKGwsbmV3IHNoKHtjb2xvcjppLG9wYWNpdHk6LjIsdHJhbnNwYXJlbnQ6ITAsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExfSkpKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtsZXQgcj0tdGhpcy5wbGFuZS5jb25zdGFudDtNYXRoLmFicyhyKTwxZS04JiYocj0xZS04KSx0aGlzLnNjYWxlLnNldCguNSp0aGlzLnNpemUsLjUqdGhpcy5zaXplLHIpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuc2lkZT1yPDA/SWk6SXYsdGhpcy5sb29rQXQodGhpcy5wbGFuZS5ub3JtYWwpLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfX0sTmhlPW5ldyBqLEtWLFN1dCxFaHQ9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBqKDAsMCwxKSxyPW5ldyBqKDAsMCwwKSxuPTEsaT0xNjc3Njk2MCxvPW4qLjIsYT1vKi4yKXtzdXBlcigpLHRoaXMudHlwZT0iQXJyb3dIZWxwZXIiLEtWPT09dm9pZCAwJiYoS1Y9bmV3IFBlLEtWLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShbMCwwLDAsMCwxLDBdLDMpKSxTdXQ9bmV3IG9tKDAsLjUsMSw1LDEpLFN1dC50cmFuc2xhdGUoMCwtLjUsMCkpLHRoaXMucG9zaXRpb24uY29weShyKSx0aGlzLmxpbmU9bmV3IGNoKEtWLG5ldyBHaSh7Y29sb3I6aSx0b25lTWFwcGVkOiExfSkpLHRoaXMubGluZS5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuYWRkKHRoaXMubGluZSksdGhpcy5jb25lPW5ldyBlaShTdXQsbmV3IHNoKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5jb25lLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5hZGQodGhpcy5jb25lKSx0aGlzLnNldERpcmVjdGlvbih0KSx0aGlzLnNldExlbmd0aChuLG8sYSl9c2V0RGlyZWN0aW9uKHQpe2lmKHQueT4uOTk5OTkpdGhpcy5xdWF0ZXJuaW9uLnNldCgwLDAsMCwxKTtlbHNlIGlmKHQueTwtLjk5OTk5KXRoaXMucXVhdGVybmlvbi5zZXQoMSwwLDAsMCk7ZWxzZXtOaGUuc2V0KHQueiwwLC10LngpLm5vcm1hbGl6ZSgpO2xldCByPU1hdGguYWNvcyh0LnkpO3RoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKE5oZSxyKX19c2V0TGVuZ3RoKHQscj10Ki4yLG49ciouMil7dGhpcy5saW5lLnNjYWxlLnNldCgxLE1hdGgubWF4KDFlLTQsdC1yKSwxKSx0aGlzLmxpbmUudXBkYXRlTWF0cml4KCksdGhpcy5jb25lLnNjYWxlLnNldChuLHIsbiksdGhpcy5jb25lLnBvc2l0aW9uLnk9dCx0aGlzLmNvbmUudXBkYXRlTWF0cml4KCl9c2V0Q29sb3IodCl7dGhpcy5saW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0KSx0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCwhMSksdGhpcy5saW5lLmNvcHkodC5saW5lKSx0aGlzLmNvbmUuY29weSh0LmNvbmUpLHRoaXN9fSx2TT1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQ9MSl7bGV0IHI9WzAsMCwwLHQsMCwwLDAsMCwwLDAsdCwwLDAsMCwwLDAsMCx0XSxuPVsxLDAsMCwxLC42LDAsMCwxLDAsLjYsMSwwLDAsMCwxLDAsLjYsMV0saT1uZXcgUGU7aS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUociwzKSksaS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUobiwzKSk7bGV0IG89bmV3IEdpKHt2ZXJ0ZXhDb2xvcnM6ITAsdG9uZU1hcHBlZDohMX0pO3N1cGVyKGksbyksdGhpcy50eXBlPSJBeGVzSGVscGVyIn1zZXRDb2xvcnModCxyLG4pe2xldCBpPW5ldyBuZSxvPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5hcnJheTtyZXR1cm4gaS5zZXQodCksaS50b0FycmF5KG8sMCksaS50b0FycmF5KG8sMyksaS5zZXQociksaS50b0FycmF5KG8sNiksaS50b0FycmF5KG8sOSksaS5zZXQobiksaS50b0FycmF5KG8sMTIpLGkudG9BcnJheShvLDE1KSx0aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IubmVlZHNVcGRhdGU9ITAsdGhpc31kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9fSxUaHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9IlNoYXBlUGF0aCIsdGhpcy5jb2xvcj1uZXcgbmUsdGhpcy5zdWJQYXRocz1bXSx0aGlzLmN1cnJlbnRQYXRoPW51bGx9bW92ZVRvKHQscil7cmV0dXJuIHRoaXMuY3VycmVudFBhdGg9bmV3IHF2LHRoaXMuc3ViUGF0aHMucHVzaCh0aGlzLmN1cnJlbnRQYXRoKSx0aGlzLmN1cnJlbnRQYXRoLm1vdmVUbyh0LHIpLHRoaXN9bGluZVRvKHQscil7cmV0dXJuIHRoaXMuY3VycmVudFBhdGgubGluZVRvKHQsciksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQscixuLGkpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLnF1YWRyYXRpY0N1cnZlVG8odCxyLG4saSksdGhpc31iZXppZXJDdXJ2ZVRvKHQscixuLGksbyxhKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5iZXppZXJDdXJ2ZVRvKHQscixuLGksbyxhKSx0aGlzfXNwbGluZVRocnUodCl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGguc3BsaW5lVGhydSh0KSx0aGlzfXRvU2hhcGVzKHQscil7ZnVuY3Rpb24gbih4KXtsZXQgYj1bXTtmb3IobGV0IFM9MCxDPXgubGVuZ3RoO1M8QztTKyspe2xldCBQPXhbU10saz1uZXcgS2M7ay5jdXJ2ZXM9UC5jdXJ2ZXMsYi5wdXNoKGspfXJldHVybiBifWZ1bmN0aW9uIGkoeCxiKXtsZXQgUz1iLmxlbmd0aCxDPSExO2ZvcihsZXQgUD1TLTEsaz0wO2s8UztQPWsrKyl7bGV0IE89YltQXSxEPWJba10sQj1ELngtTy54LEk9RC55LU8ueTtpZihNYXRoLmFicyhJKT5OdW1iZXIuRVBTSUxPTil7aWYoSTwwJiYoTz1iW2tdLEI9LUIsRD1iW1BdLEk9LUkpLHgueTxPLnl8fHgueT5ELnkpY29udGludWU7aWYoeC55PT09Ty55KXtpZih4Lng9PT1PLngpcmV0dXJuITB9ZWxzZXtsZXQgTD1JKih4LngtTy54KS1CKih4LnktTy55KTtpZihMPT09MClyZXR1cm4hMDtpZihMPDApY29udGludWU7Qz0hQ319ZWxzZXtpZih4LnkhPT1PLnkpY29udGludWU7aWYoRC54PD14LngmJngueDw9Ty54fHxPLng8PXgueCYmeC54PD1ELngpcmV0dXJuITB9fXJldHVybiBDfWxldCBvPVpjLmlzQ2xvY2tXaXNlLGE9dGhpcy5zdWJQYXRocztpZihhLmxlbmd0aD09PTApcmV0dXJuW107aWYocj09PSEwKXJldHVybiBuKGEpO2xldCBzLGwsYyx1PVtdO2lmKGEubGVuZ3RoPT09MSlyZXR1cm4gbD1hWzBdLGM9bmV3IEtjLGMuY3VydmVzPWwuY3VydmVzLHUucHVzaChjKSx1O2xldCBoPSFvKGFbMF0uZ2V0UG9pbnRzKCkpO2g9dD8haDpoO2xldCBmPVtdLHA9W10sZD1bXSxnPTAsXztwW2ddPXZvaWQgMCxkW2ddPVtdO2ZvcihsZXQgeD0wLGI9YS5sZW5ndGg7eDxiO3grKylsPWFbeF0sXz1sLmdldFBvaW50cygpLHM9byhfKSxzPXQ/IXM6cyxzPyghaCYmcFtnXSYmZysrLHBbZ109e3M6bmV3IEtjLHA6X30scFtnXS5zLmN1cnZlcz1sLmN1cnZlcyxoJiZnKyssZFtnXT1bXSk6ZFtnXS5wdXNoKHtoOmwscDpfWzBdfSk7aWYoIXBbMF0pcmV0dXJuIG4oYSk7aWYocC5sZW5ndGg+MSl7bGV0IHg9ITEsYj1bXTtmb3IobGV0IFM9MCxDPXAubGVuZ3RoO1M8QztTKyspZltTXT1bXTtmb3IobGV0IFM9MCxDPXAubGVuZ3RoO1M8QztTKyspe2xldCBQPWRbU107Zm9yKGxldCBrPTA7azxQLmxlbmd0aDtrKyspe2xldCBPPVBba10sRD0hMDtmb3IobGV0IEI9MDtCPHAubGVuZ3RoO0IrKylpKE8ucCxwW0JdLnApJiYoUyE9PUImJmIucHVzaCh7ZnJvbXM6Uyx0b3M6Qixob2xlOmt9KSxEPyhEPSExLGZbQl0ucHVzaChPKSk6eD0hMCk7RCYmZltTXS5wdXNoKE8pfX1iLmxlbmd0aD4wJiYoeHx8KGQ9ZikpfWxldCB5O2ZvcihsZXQgeD0wLGI9cC5sZW5ndGg7eDxiO3grKyl7Yz1wW3hdLnMsdS5wdXNoKGMpLHk9ZFt4XTtmb3IobGV0IFM9MCxDPXkubGVuZ3RoO1M8QztTKyspYy5ob2xlcy5wdXNoKHlbU10uaCl9cmV0dXJuIHV9fSxlcGU9bmV3IEZsb2F0MzJBcnJheSgxKSx4MHI9bmV3IEludDMyQXJyYXkoZXBlLmJ1ZmZlciksQ2h0PWNsYXNze3N0YXRpYyB0b0hhbGZGbG9hdCh0KXt0PjY1NTA0JiYoY29uc29sZS53YXJuKCJUSFJFRS5EYXRhVXRpbHMudG9IYWxmRmxvYXQoKTogdmFsdWUgZXhjZWVkcyA2NTUwNC4iKSx0PTY1NTA0KSxlcGVbMF09dDtsZXQgcj14MHJbMF0sbj1yPj4xNiYzMjc2OCxpPXI+PjEyJjIwNDcsbz1yPj4yMyYyNTU7cmV0dXJuIG88MTAzP246bz4xNDI/KG58PTMxNzQ0LG58PShvPT0yNTU/MDoxKSYmciY4Mzg4NjA3LG4pOm88MTEzPyhpfD0yMDQ4LG58PShpPj4xMTQtbykrKGk+PjExMy1vJjEpLG4pOihufD1vLTExMjw8MTB8aT4+MSxuKz1pJjEsbil9fSxiMHI9MCx3MHI9MSxTMHI9MCxNMHI9MSxFMHI9MjtmdW5jdGlvbiBUMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWVzaEZhY2VNYXRlcmlhbCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYW4gQXJyYXkgaW5zdGVhZC4iKSxlfWZ1bmN0aW9uIEMwcihlPVtdKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NdWx0aU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpLGUuaXNNdWx0aU1hdGVyaWFsPSEwLGUubWF0ZXJpYWxzPWUsZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBlLnNsaWNlKCl9LGV9ZnVuY3Rpb24gQTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4iKSxuZXcgaW0oZSx0KX1mdW5jdGlvbiBQMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGUgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5TcHJpdGUuIiksbmV3IG9NKGUpfWZ1bmN0aW9uIEkwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlU3lzdGVtIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpLG5ldyBpbShlLHQpfWZ1bmN0aW9uIEwwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4iKSxuZXcgbm0oZSl9ZnVuY3Rpb24gazByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlQmFzaWNNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpLG5ldyBubShlKX1mdW5jdGlvbiBSMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW1NYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpLG5ldyBubShlKX1mdW5jdGlvbiBOMHIoZSx0LHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlcnRleCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuVmVjdG9yMyBpbnN0ZWFkLiIpLG5ldyBqKGUsdCxyKX1mdW5jdGlvbiBEMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5EeW5hbWljQnVmZmVyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKCkuc2V0VXNhZ2UoIFRIUkVFLkR5bmFtaWNEcmF3VXNhZ2UgKSBpbnN0ZWFkLiIpLG5ldyBKZShlLHQpLnNldFVzYWdlKFkzKX1mdW5jdGlvbiBPMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50OEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IGxVKGUsdCl9ZnVuY3Rpb24gejByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50OEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IGNVKGUsdCl9ZnVuY3Rpb24gRjByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDhDbGFtcGVkQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgdVUoZSx0KX1mdW5jdGlvbiBCMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgaFUoZSx0KX1mdW5jdGlvbiBIMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50MTZBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyAkMyhlLHQpfWZ1bmN0aW9uIFYwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBmVShlLHQpfWZ1bmN0aW9uIFUwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IEszKGUsdCl9ZnVuY3Rpb24gcTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRmxvYXQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyB4ZShlLHQpfWZ1bmN0aW9uIEcwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZsb2F0NjRBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDY0QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgZFUoZSx0KX1mcy5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGZzLnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXRQb2ludD10LGV9O3F2LnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhlKX07ZnVuY3Rpb24gVzByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF4aXNIZWxwZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5BeGVzSGVscGVyLiIpLG5ldyB2TShlKX1mdW5jdGlvbiBZMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3VuZGluZ0JveEhlbHBlciBoYXMgYmVlbiBkZXByZWNhdGVkLiBDcmVhdGluZyBhIFRIUkVFLkJveEhlbHBlciBpbnN0ZWFkLiIpLG5ldyB5TShlLHQpfWZ1bmN0aW9uIGowcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkVkZ2VzSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5FZGdlc0dlb21ldHJ5IGluc3RlYWQuIiksbmV3IEFhKG5ldyBhNihlLmdlb21ldHJ5KSxuZXcgR2koe2NvbG9yOnQhPT12b2lkIDA/dDoxNjc3NzIxNX0pKX1XVS5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuR3JpZEhlbHBlcjogc2V0Q29sb3JzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGFzcyB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiIpfTtHVS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tlbGV0b25IZWxwZXI6IHVwZGF0ZSgpIG5vIGxvbmdlciBuZWVkcyB0byBiZSBjYWxsZWQuIil9O2Z1bmN0aW9uIFgwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldpcmVmcmFtZUhlbHBlciBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuV2lyZWZyYW1lR2VvbWV0cnkgaW5zdGVhZC4iKSxuZXcgQWEobmV3IHA2KGUuZ2VvbWV0cnkpLG5ldyBHaSh7Y29sb3I6dCE9PXZvaWQgMD90OjE2Nzc3MjE1fSkpfWVhLnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Mb2FkZXI6IC5leHRyYWN0VXJsQmFzZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5Mb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSgpIGluc3RlYWQuIiksZE0uZXh0cmFjdFVybEJhc2UoZSl9O2VhLkhhbmRsZXJzPXthZGQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmFkZCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5hZGRIYW5kbGVyKCkgaW5zdGVhZC4iKX0sZ2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5nZXQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuZ2V0SGFuZGxlcigpIGluc3RlYWQuIil9fTtmdW5jdGlvbiAkMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuWEhSTG9hZGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuRmlsZUxvYWRlci4iKSxuZXcgSmMoZSl9ZnVuY3Rpb24gSzByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJpbmFyeVRleHR1cmVMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5EYXRhVGV4dHVyZUxvYWRlci4iKSxuZXcgVFUoZSl9JDAucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIoZSl9OyQwLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07JDAucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3goZSl9OyQwLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShlKX07dGEucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIoZSl9O3RhLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07dGEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3goZSl9O3RhLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKGUpfTt0YS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUoZSl9O1pmLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTtOdi5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChlKX07cVUucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLiIpLHRoaXMuZ2V0Q2VudGVyKGUpfTtraS5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShlLHQpfTtraS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4Myh0aGlzKX07a2kucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07a2kucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4Myh0aGlzKX07a2kucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2tpLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkoZSkuaW52ZXJ0KCl9O01lLnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKGUpfTtNZS5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShlLHQpfTtNZS5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIiksbmV3IGooKS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9O01lLnByb3RvdHlwZS5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKSx0aGlzLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKGUpfTtNZS5wcm90b3R5cGUubXVsdGlwbHlUb0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXg0KHRoaXMpfTtNZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlQXhpcz1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUudHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfTtNZS5wcm90b3R5cGUuY3Jvc3NWZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmNyb3NzVmVjdG9yKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLnJvdGF0ZUJ5QXhpcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXg0KHRoaXMpfTtNZS5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLm1ha2VGcnVzdHVtPWZ1bmN0aW9uKGUsdCxyLG4saSxvKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKGUsdCxuLHIsaSxvKX07TWUucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShlKS5pbnZlcnQoKX07JGMucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uTGluZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzTGluZShlKX07dmkucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSxlLmFwcGx5UXVhdGVybmlvbih0aGlzKX07dmkucHJvdG90eXBlLmludmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuaW52ZXJzZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gaW52ZXJ0KCkuIiksdGhpcy5pbnZlcnQoKX07SmYucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07SmYucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uUGxhbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1BsYW5lKGUpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKGUpfTthaS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX07YWkucHJvdG90eXBlLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksdGhpcy5nZXRCYXJ5Y29vcmQoZSx0KX07YWkucHJvdG90eXBlLm1pZHBvaW50PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubWlkcG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRNaWRwb2ludCgpLiIpLHRoaXMuZ2V0TWlkcG9pbnQoZSl9O2FpLnByb3RvdHlwZW5vcm1hbD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHRoaXMuZ2V0Tm9ybWFsKGUpfTthaS5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZShlKX07YWkuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSxhaS5nZXRCYXJ5Y29vcmQoZSx0LHIsbixpKX07YWkubm9ybWFsPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksYWkuZ2V0Tm9ybWFsKGUsdCxyLG4pfTtLYy5wcm90b3R5cGUuZXh0cmFjdEFsbFBvaW50cz1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLiIpLHRoaXMuZXh0cmFjdFBvaW50cyhlKX07S2MucHJvdG90eXBlLmV4dHJ1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRydWRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV4dHJ1ZGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IGhoKHRoaXMsZSl9O0tjLnByb3RvdHlwZS5tYWtlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IFkwKHRoaXMsZSl9O0x0LnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtMdC5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8oZSl9O0x0LnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX07ai5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4iKX07ai5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUXVhdGVybmlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX07ai5wcm90b3R5cGUuZ2V0UG9zaXRpb25Gcm9tTWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhQb3NpdGlvbihlKX07ai5wcm90b3R5cGUuZ2V0U2NhbGVGcm9tTWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4iKSx0aGlzLnNldEZyb21NYXRyaXhTY2FsZShlKX07ai5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LGUpfTtqLnByb3RvdHlwZS5hcHBseVByb2plY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFwcGx5UHJvamVjdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuYXBwbHlNYXRyaXg0KCBtICkgaW5zdGVhZC4iKSx0aGlzLmFwcGx5TWF0cml4NChlKX07ai5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCxyKX07ai5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8oZSl9O2oucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtlbi5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCxyKX07ZW4ucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtvci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKGUpfTtvci5wcm90b3R5cGUucmVuZGVyRGVwdGg9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAucmVuZGVyRGVwdGggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5yZW5kZXJPcmRlciwgaW5zdGVhZC4iKX07b3IucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgaW5zdGVhZC4iKSx0aGlzLnRyYW5zbGF0ZU9uQXhpcyh0LGUpfTtvci5wcm90b3R5cGUuZ2V0V29ybGRSb3RhdGlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9O29yLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQoZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9yLnByb3RvdHlwZSx7ZXVsZXJPcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcn0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcj1lfX0sdXNlUXVhdGVybmlvbjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX19fSk7ZWkucHJvdG90eXBlLnNldERyYXdNb2RlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZWkucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLENmZX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuIil9fX0pO2FNLnByb3RvdHlwZS5pbml0Qm9uZXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Ta2lubmVkTWVzaDogaW5pdEJvbmVzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VWkucHJvdG90eXBlLnNldExlbnM9ZnVuY3Rpb24oZSx0KXtjb25zb2xlLndhcm4oIlRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhLnNldExlbnMgaXMgZGVwcmVjYXRlZC4gVXNlIC5zZXRGb2NhbExlbmd0aCBhbmQgLmZpbG1HYXVnZSBmb3IgYSBwaG90b2dyYXBoaWMgc2V0dXAuIiksdCE9PXZvaWQgMCYmKHRoaXMuZmlsbUdhdWdlPXQpLHRoaXMuc2V0Rm9jYWxMZW5ndGgoZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9sLnByb3RvdHlwZSx7b25seVNoYWRvdzp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLm9ubHlTaGFkb3cgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHNoYWRvd0NhbWVyYUZvdjp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGb3YgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZvdi4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZm92PWV9fSxzaGFkb3dDYW1lcmFMZWZ0OntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUxlZnQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmxlZnQuIiksdGhpcy5zaGFkb3cuY2FtZXJhLmxlZnQ9ZX19LHNoYWRvd0NhbWVyYVJpZ2h0OntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVJpZ2h0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5yaWdodC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEucmlnaHQ9ZX19LHNoYWRvd0NhbWVyYVRvcDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFUb3AgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnRvcC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEudG9wPWV9fSxzaGFkb3dDYW1lcmFCb3R0b206e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhQm90dG9tIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5ib3R0b20uIiksdGhpcy5zaGFkb3cuY2FtZXJhLmJvdHRvbT1lfX0sc2hhZG93Q2FtZXJhTmVhcjp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFOZWFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5uZWFyLiIpLHRoaXMuc2hhZG93LmNhbWVyYS5uZWFyPWV9fSxzaGFkb3dDYW1lcmFGYXI6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRmFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLmZhcj1lfX0sc2hhZG93Q2FtZXJhVmlzaWJsZTp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVZpc2libGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5DYW1lcmFIZWxwZXIoIGxpZ2h0LnNoYWRvdy5jYW1lcmEgKSBpbnN0ZWFkLiIpfX0sc2hhZG93Qmlhczp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dCaWFzIGlzIG5vdyAuc2hhZG93LmJpYXMuIiksdGhpcy5zaGFkb3cuYmlhcz1lfX0sc2hhZG93RGFya25lc3M6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dEYXJrbmVzcyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93TWFwV2lkdGg6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93TWFwV2lkdGggaXMgbm93IC5zaGFkb3cubWFwU2l6ZS53aWR0aC4iKSx0aGlzLnNoYWRvdy5tYXBTaXplLndpZHRoPWV9fSxzaGFkb3dNYXBIZWlnaHQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93TWFwSGVpZ2h0IGlzIG5vdyAuc2hhZG93Lm1hcFNpemUuaGVpZ2h0LiIpLHRoaXMuc2hhZG93Lm1hcFNpemUuaGVpZ2h0PWV9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEplLnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5jb3VudCBpbnN0ZWFkLiIpLHRoaXMuYXJyYXkubGVuZ3RofX0sZHluYW1pYzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy51c2FnZT09PVkzfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmR5bmFtaWMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC51c2FnZSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2UoWTMpfX19KTtKZS5wcm90b3R5cGUuc2V0RHluYW1pYz1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShlPT09ITA/WTM6VzMpLHRoaXN9O0plLnByb3RvdHlwZS5jb3B5SW5kaWNlc0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuY29weUluZGljZXNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LEplLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldEFycmF5IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBCdWZmZXJHZW9tZXRyeSAuc2V0QXR0cmlidXRlIHRvIHJlcGxhY2UvcmVzaXplIGF0dHJpYnV0ZSBidWZmZXJzIil9O1BlLnByb3RvdHlwZS5hZGRJbmRleD1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkSW5kZXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRJbmRleCgpLiIpLHRoaXMuc2V0SW5kZXgoZSl9O1BlLnByb3RvdHlwZS5hZGRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEF0dHJpYnV0ZSgpLiIpLCEodCYmdC5pc0J1ZmZlckF0dHJpYnV0ZSkmJiEodCYmdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKT8oY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIG5vdyBleHBlY3RzICggbmFtZSwgYXR0cmlidXRlICkuIiksdGhpcy5zZXRBdHRyaWJ1dGUoZSxuZXcgSmUoYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSkpKTplPT09ImluZGV4Ij8oY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5hZGRBdHRyaWJ1dGU6IFVzZSAuc2V0SW5kZXgoKSBmb3IgaW5kZXggYXR0cmlidXRlLiIpLHRoaXMuc2V0SW5kZXgodCksdGhpcyk6dGhpcy5zZXRBdHRyaWJ1dGUoZSx0KX07UGUucHJvdG90eXBlLmFkZERyYXdDYWxsPWZ1bmN0aW9uKGUsdCxyKXtyIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBubyBsb25nZXIgc3VwcG9ydHMgaW5kZXhPZmZzZXQuIiksY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZERyYXdDYWxsKCkgaXMgbm93IC5hZGRHcm91cCgpLiIpLHRoaXMuYWRkR3JvdXAoZSx0KX07UGUucHJvdG90eXBlLmNsZWFyRHJhd0NhbGxzPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNsZWFyRHJhd0NhbGxzKCkgaXMgbm93IC5jbGVhckdyb3VwcygpLiIpLHRoaXMuY2xlYXJHcm91cHMoKX07UGUucHJvdG90eXBlLmNvbXB1dGVPZmZzZXRzPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVPZmZzZXRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07UGUucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLnJlbW92ZUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmRlbGV0ZUF0dHJpYnV0ZSgpLiIpLHRoaXMuZGVsZXRlQXR0cmlidXRlKGUpfTtQZS5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLiIpLHRoaXMuYXBwbHlNYXRyaXg0KGUpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhQZS5wcm90b3R5cGUse2RyYXdjYWxsczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuZHJhd2NhbGxzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319LG9mZnNldHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAub2Zmc2V0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIiksdGhpcy5ncm91cHN9fX0pO2VtLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0RHluYW1pYygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0VXNhZ2UoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2UoZT09PSEwP1kzOlczKSx0aGlzfTtlbS5wcm90b3R5cGUuc2V0QXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldEFycmF5IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBCdWZmZXJHZW9tZXRyeSAuc2V0QXR0cmlidXRlIHRvIHJlcGxhY2UvcmVzaXplIGF0dHJpYnV0ZSBidWZmZXJzIil9O2hoLnByb3RvdHlwZS5nZXRBcnJheXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5nZXRBcnJheXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtoaC5wcm90b3R5cGUuYWRkU2hhcGVMaXN0PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGVMaXN0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07aGgucHJvdG90eXBlLmFkZFNoYXBlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtxMC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lOiAuZGlzcG9zZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2dNLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IC5vblVwZGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBvYmplY3Qub25CZWZvcmVSZW5kZXIoKSBpbnN0ZWFkLiIpLHRoaXN9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHFpLnByb3RvdHlwZSx7d3JhcEFyb3VuZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBBcm91bmQgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBBcm91bmQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LG92ZXJkcmF3OntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuIil9fSx3cmFwUkdCOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBSR0IgaGFzIGJlZW4gcmVtb3ZlZC4iKSxuZXcgbmV9fSxzaGFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPWU9PT1QaHR9fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPWV9fSx2ZXJ0ZXhUYW5nZW50czp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGgucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1lfX19KTtybi5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KGUpLHRoaXMuY2xlYXIodCxyLG4pfTtybi5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKGUpfTtybi5wcm90b3R5cGUuZ2V0Q3VycmVudFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKSx0aGlzLmdldFJlbmRlclRhcmdldCgpfTtybi5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX07cm4ucHJvdG90eXBlLmdldFByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufTtybi5wcm90b3R5cGUucmVzZXRHTFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4iKSx0aGlzLnN0YXRlLnJlc2V0KCl9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9O3JuLnByb3RvdHlwZS5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzQmxlbmRNaW5NYXg9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfTtybi5wcm90b3R5cGUuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9O3JuLnByb3RvdHlwZS5lbmFibGVTY2lzc29yVGVzdD1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKSx0aGlzLnNldFNjaXNzb3JUZXN0KGUpfTtybi5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFkZFByZVBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtybi5wcm90b3R5cGUuc2V0RmFjZUN1bGxpbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtybi5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHJuLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIiksdGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1lfX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIiksdGhpcy5zaGFkb3dNYXAudHlwZT1lfX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxjb250ZXh0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY29udGV4dCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmdldENvbnRleHQoKSBpbnN0ZWFkLiIpLHRoaXMuZ2V0Q29udGV4dCgpfX0sdnI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC52ciBoYXMgYmVlbiByZW5hbWVkIHRvIC54ciIpLHRoaXMueHJ9fSxnYW1tYUlucHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIil9fSxnYW1tYU91dHB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLHRoaXMub3V0cHV0RW5jb2Rpbmc9ZT09PSEwP1luOlFkfX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxnYW1tYUZhY3Rvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIiksMn0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoamZlLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KTtmdW5jdGlvbiBaMHIoZSx0LHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0Q3ViZSggd2lkdGgsIGhlaWdodCwgb3B0aW9ucyApIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKS4iKSxuZXcgUTMoZSxyKX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyh1cy5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1lfX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPWV9fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPWV9fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPWV9fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1lfX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1lfX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1lfX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1lfX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9ZX19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZX19fSk7TjYucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4gbmV3IE5VKCkubG9hZChlLGZ1bmN0aW9uKG4pe3Quc2V0QnVmZmVyKG4pfSksdGhpc307elUucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpLHRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpfTtKMy5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShlLHQpfTtKMy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihlLHQscixuKX07S2YuY3Jvc3NPcmlnaW49dm9pZCAwO0tmLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKGUsdCxyLG4pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IGk9bmV3IENVO2kuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IG89aS5sb2FkKGUscix2b2lkIDAsbik7cmV0dXJuIHQmJihvLm1hcHBpbmc9dCksb307S2YubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKGUsdCxyLG4pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgaT1uZXcgRVU7aS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1pLmxvYWQoZSxyLHZvaWQgMCxuKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfTtLZi5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O0tmLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfTtmdW5jdGlvbiBKMHIoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DYW52YXNSZW5kZXJlciBoYXMgYmVlbiByZW1vdmVkIil9ZnVuY3Rpb24gUTByKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSlNPTkxvYWRlciBoYXMgYmVlbiByZW1vdmVkLiIpfXZhciB0X3I9e2NyZWF0ZU11bHRpTWF0ZXJpYWxPYmplY3Q6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZVV0aWxzIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vdXRpbHMvU2NlbmVVdGlscy5qcyIpfSxkZXRhY2g6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZVV0aWxzIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vdXRpbHMvU2NlbmVVdGlscy5qcyIpfSxhdHRhY2g6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZVV0aWxzIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vdXRpbHMvU2NlbmVVdGlscy5qcyIpfX07ZnVuY3Rpb24gZV9yKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTGVuc0ZsYXJlIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vb2JqZWN0cy9MZW5zZmxhcmUuanMiKX1mdW5jdGlvbiByX3IoKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuUGFyYW1ldHJpY0dlb21ldHJ5IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vZ2VvbWV0cmllcy9QYXJhbWV0cmljR2VvbWV0cnkuanMiKSxuZXcgUGV9ZnVuY3Rpb24gbl9yKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlRleHRHZW9tZXRyeSBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2dlb21ldHJpZXMvVGV4dEdlb21ldHJ5LmpzIiksbmV3IFBlfWZ1bmN0aW9uIGlfcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkZvbnRMb2FkZXIgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXIuanMiKX1mdW5jdGlvbiBvX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Gb250IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vbG9hZGVycy9Gb250TG9hZGVyLmpzIil9ZnVuY3Rpb24gYV9yKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSW1tZWRpYXRlUmVuZGVyT2JqZWN0IGhhcyBiZWVuIHJlbW92ZWQuIil9dHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicmVnaXN0ZXIiLHtkZXRhaWw6e3JldmlzaW9uOllVfX0pKTt0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmKHdpbmRvdy5fX1RIUkVFX18/Y29uc29sZS53YXJuKCJXQVJOSU5HOiBNdWx0aXBsZSBpbnN0YW5jZXMgb2YgVGhyZWUuanMgYmVpbmcgaW1wb3J0ZWQuIik6d2luZG93Ll9fVEhSRUVfXz1ZVSk7dmFyIHJwZT17dHlwZToiY2hhbmdlIn0sVmh0PXt0eXBlOiJzdGFydCJ9LG5wZT17dHlwZToiZW5kIn0sWlU9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCkscj09PXZvaWQgMCYmY29uc29sZS53YXJuKCdUSFJFRS5PcmJpdENvbnRyb2xzOiBUaGUgc2Vjb25kIHBhcmFtZXRlciAiZG9tRWxlbWVudCIgaXMgbm93IG1hbmRhdG9yeS4nKSxyPT09ZG9jdW1lbnQmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLk9yYml0Q29udHJvbHM6ICJkb2N1bWVudCIgc2hvdWxkIG5vdCBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgImRvbUVsZW1lbnQiLiBQbGVhc2UgdXNlICJyZW5kZXJlci5kb21FbGVtZW50IiBpbnN0ZWFkLicpLHRoaXMub2JqZWN0PXQsdGhpcy5kb21FbGVtZW50PXIsdGhpcy5kb21FbGVtZW50LnN0eWxlLnRvdWNoQWN0aW9uPSJub25lIix0aGlzLmVuYWJsZWQ9ITAsdGhpcy50YXJnZXQ9bmV3IGosdGhpcy5taW5EaXN0YW5jZT0wLHRoaXMubWF4RGlzdGFuY2U9MS8wLHRoaXMubWluWm9vbT0wLHRoaXMubWF4Wm9vbT0xLzAsdGhpcy5taW5Qb2xhckFuZ2xlPTAsdGhpcy5tYXhQb2xhckFuZ2xlPU1hdGguUEksdGhpcy5taW5BemltdXRoQW5nbGU9LTEvMCx0aGlzLm1heEF6aW11dGhBbmdsZT0xLzAsdGhpcy5lbmFibGVEYW1waW5nPSExLHRoaXMuZGFtcGluZ0ZhY3Rvcj0uMDUsdGhpcy5lbmFibGVab29tPSEwLHRoaXMuem9vbVNwZWVkPTEsdGhpcy5lbmFibGVSb3RhdGU9ITAsdGhpcy5yb3RhdGVTcGVlZD0xLHRoaXMuZW5hYmxlUGFuPSEwLHRoaXMucGFuU3BlZWQ9MSx0aGlzLnNjcmVlblNwYWNlUGFubmluZz0hMCx0aGlzLmtleVBhblNwZWVkPTcsdGhpcy5hdXRvUm90YXRlPSExLHRoaXMuYXV0b1JvdGF0ZVNwZWVkPTIsdGhpcy5rZXlzPXtMRUZUOiJBcnJvd0xlZnQiLFVQOiJBcnJvd1VwIixSSUdIVDoiQXJyb3dSaWdodCIsQk9UVE9NOiJBcnJvd0Rvd24ifSx0aGlzLm1vdXNlQnV0dG9ucz17TEVGVDpLMC5ST1RBVEUsTUlERExFOkswLkRPTExZLFJJR0hUOkswLlBBTn0sdGhpcy50b3VjaGVzPXtPTkU6WjAuUk9UQVRFLFRXTzpaMC5ET0xMWV9QQU59LHRoaXMudGFyZ2V0MD10aGlzLnRhcmdldC5jbG9uZSgpLHRoaXMucG9zaXRpb24wPXRoaXMub2JqZWN0LnBvc2l0aW9uLmNsb25lKCksdGhpcy56b29tMD10aGlzLm9iamVjdC56b29tLHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHM9bnVsbCx0aGlzLmdldFBvbGFyQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gcy5waGl9LHRoaXMuZ2V0QXppbXV0aGFsQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gcy50aGV0YX0sdGhpcy5nZXREaXN0YW5jZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9iamVjdC5wb3NpdGlvbi5kaXN0YW5jZVRvKHRoaXMudGFyZ2V0KX0sdGhpcy5saXN0ZW5Ub0tleUV2ZW50cz1mdW5jdGlvbihudCl7bnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnIpLHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHM9bnR9LHRoaXMuc2F2ZVN0YXRlPWZ1bmN0aW9uKCl7bi50YXJnZXQwLmNvcHkobi50YXJnZXQpLG4ucG9zaXRpb24wLmNvcHkobi5vYmplY3QucG9zaXRpb24pLG4uem9vbTA9bi5vYmplY3Quem9vbX0sdGhpcy5yZXNldD1mdW5jdGlvbigpe24udGFyZ2V0LmNvcHkobi50YXJnZXQwKSxuLm9iamVjdC5wb3NpdGlvbi5jb3B5KG4ucG9zaXRpb24wKSxuLm9iamVjdC56b29tPW4uem9vbTAsbi5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLG4uZGlzcGF0Y2hFdmVudChycGUpLG4udXBkYXRlKCksbz1pLk5PTkV9LHRoaXMudXBkYXRlPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqLEN0PW5ldyB2aSgpLnNldEZyb21Vbml0VmVjdG9ycyh0LnVwLG5ldyBqKDAsMSwwKSksV3Q9Q3QuY2xvbmUoKS5pbnZlcnQoKSxmZT1uZXcgaixhdD1uZXcgdmksc2U9MipNYXRoLlBJO3JldHVybiBmdW5jdGlvbigpe2xldCBDZT1uLm9iamVjdC5wb3NpdGlvbjtudC5jb3B5KENlKS5zdWIobi50YXJnZXQpLG50LmFwcGx5UXVhdGVybmlvbihDdCkscy5zZXRGcm9tVmVjdG9yMyhudCksbi5hdXRvUm90YXRlJiZvPT09aS5OT05FJiZEKGsoKSksbi5lbmFibGVEYW1waW5nPyhzLnRoZXRhKz1sLnRoZXRhKm4uZGFtcGluZ0ZhY3RvcixzLnBoaSs9bC5waGkqbi5kYW1waW5nRmFjdG9yKToocy50aGV0YSs9bC50aGV0YSxzLnBoaSs9bC5waGkpO2xldCBQdD1uLm1pbkF6aW11dGhBbmdsZSxOdD1uLm1heEF6aW11dGhBbmdsZTtyZXR1cm4gaXNGaW5pdGUoUHQpJiZpc0Zpbml0ZShOdCkmJihQdDwtTWF0aC5QST9QdCs9c2U6UHQ+TWF0aC5QSSYmKFB0LT1zZSksTnQ8LU1hdGguUEk/TnQrPXNlOk50Pk1hdGguUEkmJihOdC09c2UpLFB0PD1OdD9zLnRoZXRhPU1hdGgubWF4KFB0LE1hdGgubWluKE50LHMudGhldGEpKTpzLnRoZXRhPXMudGhldGE+KFB0K050KS8yP01hdGgubWF4KFB0LHMudGhldGEpOk1hdGgubWluKE50LHMudGhldGEpKSxzLnBoaT1NYXRoLm1heChuLm1pblBvbGFyQW5nbGUsTWF0aC5taW4obi5tYXhQb2xhckFuZ2xlLHMucGhpKSkscy5tYWtlU2FmZSgpLHMucmFkaXVzKj1jLHMucmFkaXVzPU1hdGgubWF4KG4ubWluRGlzdGFuY2UsTWF0aC5taW4obi5tYXhEaXN0YW5jZSxzLnJhZGl1cykpLG4uZW5hYmxlRGFtcGluZz09PSEwP24udGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcih1LG4uZGFtcGluZ0ZhY3Rvcik6bi50YXJnZXQuYWRkKHUpLG50LnNldEZyb21TcGhlcmljYWwocyksbnQuYXBwbHlRdWF0ZXJuaW9uKFd0KSxDZS5jb3B5KG4udGFyZ2V0KS5hZGQobnQpLG4ub2JqZWN0Lmxvb2tBdChuLnRhcmdldCksbi5lbmFibGVEYW1waW5nPT09ITA/KGwudGhldGEqPTEtbi5kYW1waW5nRmFjdG9yLGwucGhpKj0xLW4uZGFtcGluZ0ZhY3Rvcix1Lm11bHRpcGx5U2NhbGFyKDEtbi5kYW1waW5nRmFjdG9yKSk6KGwuc2V0KDAsMCwwKSx1LnNldCgwLDAsMCkpLGM9MSxofHxmZS5kaXN0YW5jZVRvU3F1YXJlZChuLm9iamVjdC5wb3NpdGlvbik+YXx8OCooMS1hdC5kb3Qobi5vYmplY3QucXVhdGVybmlvbikpPmE/KG4uZGlzcGF0Y2hFdmVudChycGUpLGZlLmNvcHkobi5vYmplY3QucG9zaXRpb24pLGF0LmNvcHkobi5vYmplY3QucXVhdGVybmlvbiksaD0hMSwhMCk6ITF9fSgpLHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe24uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsSXQpLG4uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsaHQpLG4uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixpZSksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIixhciksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix3dCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsa3QpLG4uX2RvbUVsZW1lbnRLZXlFdmVudHMhPT1udWxsJiZuLl9kb21FbGVtZW50S2V5RXZlbnRzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZyKX07bGV0IG49dGhpcyxpPXtOT05FOi0xLFJPVEFURTowLERPTExZOjEsUEFOOjIsVE9VQ0hfUk9UQVRFOjMsVE9VQ0hfUEFOOjQsVE9VQ0hfRE9MTFlfUEFOOjUsVE9VQ0hfRE9MTFlfUk9UQVRFOjZ9LG89aS5OT05FLGE9MWUtNixzPW5ldyBfTSxsPW5ldyBfTSxjPTEsdT1uZXcgaixoPSExLGY9bmV3IEx0LHA9bmV3IEx0LGQ9bmV3IEx0LGc9bmV3IEx0LF89bmV3IEx0LHk9bmV3IEx0LHg9bmV3IEx0LGI9bmV3IEx0LFM9bmV3IEx0LEM9W10sUD17fTtmdW5jdGlvbiBrKCl7cmV0dXJuIDIqTWF0aC5QSS82MC82MCpuLmF1dG9Sb3RhdGVTcGVlZH1mdW5jdGlvbiBPKCl7cmV0dXJuIE1hdGgucG93KC45NSxuLnpvb21TcGVlZCl9ZnVuY3Rpb24gRChudCl7bC50aGV0YS09bnR9ZnVuY3Rpb24gQihudCl7bC5waGktPW50fWxldCBJPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqO3JldHVybiBmdW5jdGlvbihXdCxmZSl7bnQuc2V0RnJvbU1hdHJpeENvbHVtbihmZSwwKSxudC5tdWx0aXBseVNjYWxhcigtV3QpLHUuYWRkKG50KX19KCksTD1mdW5jdGlvbigpe2xldCBudD1uZXcgajtyZXR1cm4gZnVuY3Rpb24oV3QsZmUpe24uc2NyZWVuU3BhY2VQYW5uaW5nPT09ITA/bnQuc2V0RnJvbU1hdHJpeENvbHVtbihmZSwxKToobnQuc2V0RnJvbU1hdHJpeENvbHVtbihmZSwwKSxudC5jcm9zc1ZlY3RvcnMobi5vYmplY3QudXAsbnQpKSxudC5tdWx0aXBseVNjYWxhcihXdCksdS5hZGQobnQpfX0oKSxSPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqO3JldHVybiBmdW5jdGlvbihXdCxmZSl7bGV0IGF0PW4uZG9tRWxlbWVudDtpZihuLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhKXtsZXQgc2U9bi5vYmplY3QucG9zaXRpb247bnQuY29weShzZSkuc3ViKG4udGFyZ2V0KTtsZXQgUXQ9bnQubGVuZ3RoKCk7UXQqPU1hdGgudGFuKG4ub2JqZWN0LmZvdi8yKk1hdGguUEkvMTgwKSxJKDIqV3QqUXQvYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCksTCgyKmZlKlF0L2F0LmNsaWVudEhlaWdodCxuLm9iamVjdC5tYXRyaXgpfWVsc2Ugbi5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KEkoV3QqKG4ub2JqZWN0LnJpZ2h0LW4ub2JqZWN0LmxlZnQpL24ub2JqZWN0Lnpvb20vYXQuY2xpZW50V2lkdGgsbi5vYmplY3QubWF0cml4KSxMKGZlKihuLm9iamVjdC50b3Atbi5vYmplY3QuYm90dG9tKS9uLm9iamVjdC56b29tL2F0LmNsaWVudEhlaWdodCxuLm9iamVjdC5tYXRyaXgpKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBwYW4gZGlzYWJsZWQuIiksbi5lbmFibGVQYW49ITEpfX0oKTtmdW5jdGlvbiBGKG50KXtuLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhP2MvPW50Om4ub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhuLm9iamVjdC56b29tPU1hdGgubWF4KG4ubWluWm9vbSxNYXRoLm1pbihuLm1heFpvb20sbi5vYmplY3Quem9vbSpudCkpLG4ub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSxoPSEwKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLiIpLG4uZW5hYmxlWm9vbT0hMSl9ZnVuY3Rpb24geihudCl7bi5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYT9jKj1udDpuLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYT8obi5vYmplY3Quem9vbT1NYXRoLm1heChuLm1pblpvb20sTWF0aC5taW4obi5tYXhab29tLG4ub2JqZWN0Lnpvb20vbnQpKSxuLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksaD0hMCk6KGNvbnNvbGUud2FybigiV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gZG9sbHkvem9vbSBkaXNhYmxlZC4iKSxuLmVuYWJsZVpvb209ITEpfWZ1bmN0aW9uIFUobnQpe2Yuc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSl9ZnVuY3Rpb24gVyhudCl7eC5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKX1mdW5jdGlvbiBaKG50KXtnLnNldChudC5jbGllbnRYLG50LmNsaWVudFkpfWZ1bmN0aW9uIHJ0KG50KXtwLnNldChudC5jbGllbnRYLG50LmNsaWVudFkpLGQuc3ViVmVjdG9ycyhwLGYpLm11bHRpcGx5U2NhbGFyKG4ucm90YXRlU3BlZWQpO2xldCBDdD1uLmRvbUVsZW1lbnQ7RCgyKk1hdGguUEkqZC54L0N0LmNsaWVudEhlaWdodCksQigyKk1hdGguUEkqZC55L0N0LmNsaWVudEhlaWdodCksZi5jb3B5KHApLG4udXBkYXRlKCl9ZnVuY3Rpb24gb3QobnQpe2Iuc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSksUy5zdWJWZWN0b3JzKGIseCksUy55PjA/RihPKCkpOlMueTwwJiZ6KE8oKSkseC5jb3B5KGIpLG4udXBkYXRlKCl9ZnVuY3Rpb24gc3QobnQpe18uc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSkseS5zdWJWZWN0b3JzKF8sZykubXVsdGlwbHlTY2FsYXIobi5wYW5TcGVlZCksUih5LngseS55KSxnLmNvcHkoXyksbi51cGRhdGUoKX1mdW5jdGlvbiBTdChudCl7bnQuZGVsdGFZPDA/eihPKCkpOm50LmRlbHRhWT4wJiZGKE8oKSksbi51cGRhdGUoKX1mdW5jdGlvbiBidChudCl7bGV0IEN0PSExO3N3aXRjaChudC5jb2RlKXtjYXNlIG4ua2V5cy5VUDpSKDAsbi5rZXlQYW5TcGVlZCksQ3Q9ITA7YnJlYWs7Y2FzZSBuLmtleXMuQk9UVE9NOlIoMCwtbi5rZXlQYW5TcGVlZCksQ3Q9ITA7YnJlYWs7Y2FzZSBuLmtleXMuTEVGVDpSKG4ua2V5UGFuU3BlZWQsMCksQ3Q9ITA7YnJlYWs7Y2FzZSBuLmtleXMuUklHSFQ6Uigtbi5rZXlQYW5TcGVlZCwwKSxDdD0hMDticmVha31DdCYmKG50LnByZXZlbnREZWZhdWx0KCksbi51cGRhdGUoKSl9ZnVuY3Rpb24gTXQoKXtpZihDLmxlbmd0aD09PTEpZi5zZXQoQ1swXS5wYWdlWCxDWzBdLnBhZ2VZKTtlbHNle2xldCBudD0uNSooQ1swXS5wYWdlWCtDWzFdLnBhZ2VYKSxDdD0uNSooQ1swXS5wYWdlWStDWzFdLnBhZ2VZKTtmLnNldChudCxDdCl9fWZ1bmN0aW9uIGx0KCl7aWYoQy5sZW5ndGg9PT0xKWcuc2V0KENbMF0ucGFnZVgsQ1swXS5wYWdlWSk7ZWxzZXtsZXQgbnQ9LjUqKENbMF0ucGFnZVgrQ1sxXS5wYWdlWCksQ3Q9LjUqKENbMF0ucGFnZVkrQ1sxXS5wYWdlWSk7Zy5zZXQobnQsQ3QpfX1mdW5jdGlvbiBLdCgpe2xldCBudD1DWzBdLnBhZ2VYLUNbMV0ucGFnZVgsQ3Q9Q1swXS5wYWdlWS1DWzFdLnBhZ2VZLFd0PU1hdGguc3FydChudCpudCtDdCpDdCk7eC5zZXQoMCxXdCl9ZnVuY3Rpb24gX3QoKXtuLmVuYWJsZVpvb20mJkt0KCksbi5lbmFibGVQYW4mJmx0KCl9ZnVuY3Rpb24gY3QoKXtuLmVuYWJsZVpvb20mJkt0KCksbi5lbmFibGVSb3RhdGUmJk10KCl9ZnVuY3Rpb24gWChudCl7aWYoQy5sZW5ndGg9PTEpcC5zZXQobnQucGFnZVgsbnQucGFnZVkpO2Vsc2V7bGV0IFd0PWJlKG50KSxmZT0uNSoobnQucGFnZVgrV3QueCksYXQ9LjUqKG50LnBhZ2VZK1d0LnkpO3Auc2V0KGZlLGF0KX1kLnN1YlZlY3RvcnMocCxmKS5tdWx0aXBseVNjYWxhcihuLnJvdGF0ZVNwZWVkKTtsZXQgQ3Q9bi5kb21FbGVtZW50O0QoMipNYXRoLlBJKmQueC9DdC5jbGllbnRIZWlnaHQpLEIoMipNYXRoLlBJKmQueS9DdC5jbGllbnRIZWlnaHQpLGYuY29weShwKX1mdW5jdGlvbiBldChudCl7aWYoQy5sZW5ndGg9PT0xKV8uc2V0KG50LnBhZ2VYLG50LnBhZ2VZKTtlbHNle2xldCBDdD1iZShudCksV3Q9LjUqKG50LnBhZ2VYK0N0LngpLGZlPS41KihudC5wYWdlWStDdC55KTtfLnNldChXdCxmZSl9eS5zdWJWZWN0b3JzKF8sZykubXVsdGlwbHlTY2FsYXIobi5wYW5TcGVlZCksUih5LngseS55KSxnLmNvcHkoXyl9ZnVuY3Rpb24gZHQobnQpe2xldCBDdD1iZShudCksV3Q9bnQucGFnZVgtQ3QueCxmZT1udC5wYWdlWS1DdC55LGF0PU1hdGguc3FydChXdCpXdCtmZSpmZSk7Yi5zZXQoMCxhdCksUy5zZXQoMCxNYXRoLnBvdyhiLnkveC55LG4uem9vbVNwZWVkKSksRihTLnkpLHguY29weShiKX1mdW5jdGlvbiBxKG50KXtuLmVuYWJsZVpvb20mJmR0KG50KSxuLmVuYWJsZVBhbiYmZXQobnQpfWZ1bmN0aW9uIHB0KG50KXtuLmVuYWJsZVpvb20mJmR0KG50KSxuLmVuYWJsZVJvdGF0ZSYmWChudCl9ZnVuY3Rpb24gaHQobnQpe24uZW5hYmxlZCE9PSExJiYoQy5sZW5ndGg9PT0wJiYobi5kb21FbGVtZW50LnNldFBvaW50ZXJDYXB0dXJlKG50LnBvaW50ZXJJZCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix3dCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsa3QpKSwkdChudCksbnQucG9pbnRlclR5cGU9PT0idG91Y2giP3R0KG50KTplZShudCkpfWZ1bmN0aW9uIHd0KG50KXtuLmVuYWJsZWQhPT0hMSYmKG50LnBvaW50ZXJUeXBlPT09InRvdWNoIj8kKG50KTpMZShudCkpfWZ1bmN0aW9uIGt0KG50KXtoZShudCksQy5sZW5ndGg9PT0wJiYobi5kb21FbGVtZW50LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShudC5wb2ludGVySWQpLG4uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsd3QpLG4uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGt0KSksbi5kaXNwYXRjaEV2ZW50KG5wZSksbz1pLk5PTkV9ZnVuY3Rpb24gaWUobnQpe2hlKG50KX1mdW5jdGlvbiBlZShudCl7bGV0IEN0O3N3aXRjaChudC5idXR0b24pe2Nhc2UgMDpDdD1uLm1vdXNlQnV0dG9ucy5MRUZUO2JyZWFrO2Nhc2UgMTpDdD1uLm1vdXNlQnV0dG9ucy5NSURETEU7YnJlYWs7Y2FzZSAyOkN0PW4ubW91c2VCdXR0b25zLlJJR0hUO2JyZWFrO2RlZmF1bHQ6Q3Q9LTF9c3dpdGNoKEN0KXtjYXNlIEswLkRPTExZOmlmKG4uZW5hYmxlWm9vbT09PSExKXJldHVybjtXKG50KSxvPWkuRE9MTFk7YnJlYWs7Y2FzZSBLMC5ST1RBVEU6aWYobnQuY3RybEtleXx8bnQubWV0YUtleXx8bnQuc2hpZnRLZXkpe2lmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO1oobnQpLG89aS5QQU59ZWxzZXtpZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtVKG50KSxvPWkuUk9UQVRFfWJyZWFrO2Nhc2UgSzAuUEFOOmlmKG50LmN0cmxLZXl8fG50Lm1ldGFLZXl8fG50LnNoaWZ0S2V5KXtpZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtVKG50KSxvPWkuUk9UQVRFfWVsc2V7aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47WihudCksbz1pLlBBTn1icmVhaztkZWZhdWx0Om89aS5OT05FfW8hPT1pLk5PTkUmJm4uZGlzcGF0Y2hFdmVudChWaHQpfWZ1bmN0aW9uIExlKG50KXtpZihuLmVuYWJsZWQhPT0hMSlzd2l0Y2gobyl7Y2FzZSBpLlJPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtydChudCk7YnJlYWs7Y2FzZSBpLkRPTExZOmlmKG4uZW5hYmxlWm9vbT09PSExKXJldHVybjtvdChudCk7YnJlYWs7Y2FzZSBpLlBBTjppZihuLmVuYWJsZVBhbj09PSExKXJldHVybjtzdChudCk7YnJlYWt9fWZ1bmN0aW9uIGFyKG50KXtuLmVuYWJsZWQ9PT0hMXx8bi5lbmFibGVab29tPT09ITF8fG8hPT1pLk5PTkV8fChudC5wcmV2ZW50RGVmYXVsdCgpLG4uZGlzcGF0Y2hFdmVudChWaHQpLFN0KG50KSxuLmRpc3BhdGNoRXZlbnQobnBlKSl9ZnVuY3Rpb24gZnIobnQpe24uZW5hYmxlZD09PSExfHxuLmVuYWJsZVBhbj09PSExfHxidChudCl9ZnVuY3Rpb24gdHQobnQpe3N3aXRjaChUdChudCksQy5sZW5ndGgpe2Nhc2UgMTpzd2l0Y2gobi50b3VjaGVzLk9ORSl7Y2FzZSBaMC5ST1RBVEU6aWYobi5lbmFibGVSb3RhdGU9PT0hMSlyZXR1cm47TXQoKSxvPWkuVE9VQ0hfUk9UQVRFO2JyZWFrO2Nhc2UgWjAuUEFOOmlmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO2x0KCksbz1pLlRPVUNIX1BBTjticmVhaztkZWZhdWx0Om89aS5OT05FfWJyZWFrO2Nhc2UgMjpzd2l0Y2gobi50b3VjaGVzLlRXTyl7Y2FzZSBaMC5ET0xMWV9QQU46aWYobi5lbmFibGVab29tPT09ITEmJm4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO190KCksbz1pLlRPVUNIX0RPTExZX1BBTjticmVhaztjYXNlIFowLkRPTExZX1JPVEFURTppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVSb3RhdGU9PT0hMSlyZXR1cm47Y3QoKSxvPWkuVE9VQ0hfRE9MTFlfUk9UQVRFO2JyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9YnJlYWs7ZGVmYXVsdDpvPWkuTk9ORX1vIT09aS5OT05FJiZuLmRpc3BhdGNoRXZlbnQoVmh0KX1mdW5jdGlvbiAkKG50KXtzd2l0Y2goVHQobnQpLG8pe2Nhc2UgaS5UT1VDSF9ST1RBVEU6aWYobi5lbmFibGVSb3RhdGU9PT0hMSlyZXR1cm47WChudCksbi51cGRhdGUoKTticmVhaztjYXNlIGkuVE9VQ0hfUEFOOmlmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO2V0KG50KSxuLnVwZGF0ZSgpO2JyZWFrO2Nhc2UgaS5UT1VDSF9ET0xMWV9QQU46aWYobi5lbmFibGVab29tPT09ITEmJm4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO3EobnQpLG4udXBkYXRlKCk7YnJlYWs7Y2FzZSBpLlRPVUNIX0RPTExZX1JPVEFURTppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVSb3RhdGU9PT0hMSlyZXR1cm47cHQobnQpLG4udXBkYXRlKCk7YnJlYWs7ZGVmYXVsdDpvPWkuTk9ORX19ZnVuY3Rpb24gSXQobnQpe24uZW5hYmxlZCE9PSExJiZudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uICR0KG50KXtDLnB1c2gobnQpfWZ1bmN0aW9uIGhlKG50KXtkZWxldGUgUFtudC5wb2ludGVySWRdO2ZvcihsZXQgQ3Q9MDtDdDxDLmxlbmd0aDtDdCsrKWlmKENbQ3RdLnBvaW50ZXJJZD09bnQucG9pbnRlcklkKXtDLnNwbGljZShDdCwxKTtyZXR1cm59fWZ1bmN0aW9uIFR0KG50KXtsZXQgQ3Q9UFtudC5wb2ludGVySWRdO0N0PT09dm9pZCAwJiYoQ3Q9bmV3IEx0LFBbbnQucG9pbnRlcklkXT1DdCksQ3Quc2V0KG50LnBhZ2VYLG50LnBhZ2VZKX1mdW5jdGlvbiBiZShudCl7bGV0IEN0PW50LnBvaW50ZXJJZD09PUNbMF0ucG9pbnRlcklkP0NbMV06Q1swXTtyZXR1cm4gUFtDdC5wb2ludGVySWRdfW4uZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsSXQpLG4uZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsaHQpLG4uZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixpZSksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixhcix7cGFzc2l2ZTohMX0pLHRoaXMudXBkYXRlKCl9fTt2YXIgejY9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2xhc3RNZXNoPW51bGwsdGhpcy5fY2xvY2s9bmV3IG1NLHRoaXMuX2NhbnZhc1NpemU9bnVsbCx0aGlzLl9sYXllcnNDb25maWc9bnVsbCx0aGlzLl9ydW5Db2xvcj10fV9pc09iamVjdCh0KXt2YXIgcj10eXBlb2YgdDtyZXR1cm4gcj09Im9iamVjdCImJnQhPW51bGwmJiFBcnJheS5pc0FycmF5KHQpfV9hcHBseURlZmF1bHRzKHQscil7bGV0IG49e30saT1bdCxyXTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKyl7bGV0IGE9aVtvXTtmb3IobGV0IHMgaW4gYSl7bGV0IGw9cyBpbiBuO3RoaXMuX2lzT2JqZWN0KGFbc10pP25bc109dGhpcy5fYXBwbHlEZWZhdWx0cyhuW3NdfHx7fSxhW3NdKTpsfHwobltzXT1hW3NdKX19cmV0dXJuIG59X2NyZWF0ZUxheWVycygpe2lmKCEoIXRoaXMuX2xheWVyc0NvbmZpZ3x8IXRoaXMuX3NjZW5lfHwhdGhpcy5fbGFzdE1lc2gpKXtpZih0aGlzLl9sYXllcnNDb25maWcuc2hvd0JvdW5kaW5nQm94KXt2YXIgdD1uZXcgeU0odGhpcy5fbGFzdE1lc2gsbmV3IG5lKCJyZ2IoMCwgMCwgMjU1KSIpKTt0aGlzLl9zY2VuZS5hZGQodCl9aWYodGhpcy5fbGF5ZXJzQ29uZmlnLnNob3dBeGVzKXt2YXIgcj1uZXcgdk0oNSk7dGhpcy5fc2NlbmUuYWRkKHIpfX19c2V0TGF5ZXJzQ29uZmlnKHQpe3RoaXMuX2xheWVyc0NvbmZpZz10aGlzLl9hcHBseURlZmF1bHRzKHQsdGhpcy5fbGF5ZXJzQ29uZmlnfHx7fSl9X2NyZWF0ZVdvcmxkKHQscil7dmFyIGEscyxsLGM7aWYodGhpcy5pc1JlYWR5KCkpcmV0dXJuO3RoaXMuX3NjZW5lPW5ldyBxMDt2YXIgbj1uZXcgd01bdC5jYW1lcmEuY2xzXSh0LmNhbWVyYS5mb3YsKChhPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDphLndpZHRoKS8oKHM9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOnMuaGVpZ2h0KSx0LmNhbWVyYS5uZWFyLHQuY2FtZXJhLmZhcik7dGhpcy5fY2FtZXJhPW4sdGhpcy5pbml0Q2FtZXJhUG9zaXRpb249dm9pZCAwLHQuY2FtZXJhLnBvc2l0aW9uJiYodGhpcy5pbml0Q2FtZXJhUG9zaXRpb249bmV3IGooKS5mcm9tQXJyYXkodC5jYW1lcmEucG9zaXRpb24pKSx0aGlzLmluaXRDYW1lcmFMb29rQXQ9dm9pZCAwLHQuY2FtZXJhLmxvb2tBdCYmKHRoaXMuaW5pdENhbWVyYUxvb2tBdD1uZXcgaigpLmZyb21BcnJheSh0LmNhbWVyYS5sb29rQXQpKTt2YXIgaT1uZXcgWlUobixyKTtsZXQgbz1pO28ubG9va1NwZWVkPS40LG8ubW92ZW1lbnRTcGVlZD0yMCxvLm5vRmx5PSEwLG8ubG9va1ZlcnRpY2FsPSEwLG8uY29uc3RyYWluVmVydGljYWw9ITAsby52ZXJ0aWNhbE1pbj0xLG8udmVydGljYWxNYXg9MixvLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy5fb25DYW1lcmFQb3NpdGlvbkNoYW5nZS5iaW5kKHRoaXMpKSx0aGlzLl9jYW1lcmFDb250cm9scz1pLHRoaXMuX3JlbmRlcmVyPW5ldyBybih7YW50aWFsaWFzOiEwfSksdGhpcy5fcmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyksdGhpcy5fcmVuZGVyZXIuc2V0U2l6ZSgobD10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6bC53aWR0aCwoYz10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6Yy5oZWlnaHQpLHRoaXMuX3JlbmRlcmVyLnNldENsZWFyQ29sb3IoMTY3NzcyMTUsMSl9X2NsZWFyU2NlbmUoKXt2YXIgdDtpZih0aGlzLl9zY2VuZSlmb3IoO3RoaXMuX3NjZW5lLmNoaWxkcmVuLmxlbmd0aD4wOyl0aGlzLl9zY2VuZS5yZW1vdmUoKHQ9dGhpcy5fc2NlbmUpPT1udWxsP3ZvaWQgMDp0LmNoaWxkcmVuWzBdKX1nZXRSZW5kZXJlcigpe3JldHVybiB0aGlzLl9yZW5kZXJlcn1nZXRDYW1lcmFDb250cm9scygpe3JldHVybiB0aGlzLl9jYW1lcmFDb250cm9sc31pc1JlYWR5KCl7cmV0dXJuISF0aGlzLl9jYW1lcmEmJiEhdGhpcy5fY2FtZXJhQ29udHJvbHN9Z2V0Q2FtZXJhUG9zaXRpb24oKXt2YXIgdCxyLG47cmV0dXJue2ZhcjoodD10aGlzLl9jYW1lcmEpPT1udWxsP3ZvaWQgMDp0LmZhcixwb3NpdGlvbjoocj10aGlzLl9jYW1lcmEpPT1udWxsP3ZvaWQgMDpyLnBvc2l0aW9uLmNsb25lKCksdGFyZ2V0OihuPXRoaXMuX2NhbWVyYUNvbnRyb2xzKT09bnVsbD92b2lkIDA6bi50YXJnZXQuY2xvbmUoKX19c2V0Q2FudmFzU2l6ZSh0KXt0aGlzLl9jYW52YXNTaXplPXR9ZHJhdygpe3ZhciByLG4saSxvO3RoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXgmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXgpLHRoaXMuX2NhbWVyYSYmKHRoaXMuX2NhbWVyYS5hc3BlY3Q9KChyPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpyLndpZHRoKS8oKG49dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOm4uaGVpZ2h0KSx0aGlzLl9jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKChpPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDppLndpZHRoLChvPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpvLmhlaWdodCk7bGV0IHQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9jbG9jay5nZXREZWx0YSgpO3RoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZShhKSx0aGlzLl9hbmltYXRpb25GcmFtZUluZGV4PXJlcXVlc3RBbmltYXRpb25GcmFtZSh0KSx0aGlzLl9yZW5kZXJlci5yZW5kZXIodGhpcy5fc2NlbmUsdGhpcy5fY2FtZXJhKX0uYmluZCh0aGlzKTt0KCl9dXBkYXRlU2NlbmUodCxyKXtsZXQgbj17fTsiY29uZmlnImluIHQmJnQuY29uZmlnJiYobj1KU09OLnBhcnNlKHQuY29uZmlnKSksdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJiZWZvcmVVcGRhdGVTY2VuZSJ9KTtsZXQgaT17Y2FtZXJhOntjbHM6IlBlcnNwZWN0aXZlQ2FtZXJhIixmb3Y6NzUsbmVhcjouMSxmYXI6MWUzfSxsaWdodHM6W3tjbHM6IkFtYmllbnRMaWdodCIsY29sb3I6IiNmZmZmZmYiLGludGVuc2l0eTouNzV9LHtjbHM6IkRpcmVjdGlvbmFsTGlnaHQiLGNvbG9yOiIjZmZmZmZmIixpbnRlbnNpdHk6Ljc1LHBvc2l0aW9uOlswLC0xLDJdfV19O249dGhpcy5fYXBwbHlEZWZhdWx0cyhuLGkpLHRoaXMuX2NyZWF0ZVdvcmxkKG4sciksdGhpcy5fY2xlYXJTY2VuZSgpLHRoaXMuX2NyZWF0ZUxpZ2h0cyh0aGlzLl9zY2VuZSxuKSx0aGlzLl9jcmVhdGVHZW9tZXRyeSh0LG4pLHRoaXMuX2NyZWF0ZUxheWVycygpLHRoaXMuZHJhdygpfXJlc2V0Vmlldyh0KXt2YXIgbixpO2lmKCF0aGlzLmlzUmVhZHkoKSlyZXR1cm47KG49dGhpcy5fY2FtZXJhQ29udHJvbHMpPT1udWxsfHxuLnJlc2V0KCk7bGV0IHI7IXQmJnRoaXMuX2xhc3RNZXNoJiYocj10aGlzLl9sYXN0TWVzaCksciYmKHRoaXMuX2ZpdE9iamVjdFRvVmlld3BvcnQociksdGhpcy5fbGFzdE1lc2g9ciksKGk9dGhpcy5fY2FtZXJhQ29udHJvbHMpPT1udWxsfHxpLnVwZGF0ZSgpfV9jcmVhdGVHZW9tZXRyeSh0LHIpe2xldCBuPXQubWVzaDtuLnZlcnRpY2VzJiZuLmZhY2VzJiZuLmZhY2VzLmxlbmd0aD90aGlzLl9jcmVhdGVNZXNoKG4scik6dGhpcy5fY3JlYXRlUG9pbnRDbG91ZChuLHIpfV9jcmVhdGVQb2ludENsb3VkKHQscil7dmFyIGg7bGV0IG49dC52ZXJ0aWNlcyxpPXQuY29sb3JzLG89e21hdGVyaWFsOntjbHM6IlBvaW50c01hdGVyaWFsIixzaXplOi4wMDV9fTtpJiZpLmxlbmd0aD09bi5sZW5ndGg/by5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITA6by5tYXRlcmlhbC5jb2xvcj10aGlzLl9ydW5Db2xvcjtsZXQgYT10aGlzLl9hcHBseURlZmF1bHRzKHIsbykscz1uZXcgUGUsbD1uZXcgRmxvYXQzMkFycmF5KG4uZmxhdCgpKTtpZihzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShsLDMpKSxpJiZpLmxlbmd0aD09bi5sZW5ndGgpe2xldCBmPW5ldyBGbG9hdDMyQXJyYXkoaS5mbGF0KCkpO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKWZbcF09ZltwXS8yNTU7cy5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgSmUoZiwzKSl9dmFyIGM9bmV3IHdNW2EubWF0ZXJpYWwuY2xzXShhLm1hdGVyaWFsKSx1PW5ldyBpbShzLGMpOyhoPXRoaXMuX3NjZW5lKT09bnVsbHx8aC5hZGQodSksdGhpcy5fbGFzdE1lc2g9dX1zZXRDYW1lcmFWaWV3cG9pbnQodCxyLG4pe3RoaXMuX3NpbGVudD0hMCx0aGlzLl9jYW1lcmEmJih0aGlzLl9jYW1lcmEuZmFyPXIsdGhpcy5fY2FtZXJhLnBvc2l0aW9uLnNldCh0LngsdC55LHQueiksdGhpcy5fY2FtZXJhLmxvb2tBdChuLmNsb25lKCkpLHRoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHRoaXMuX2NhbWVyYUNvbnRyb2xzJiYodGhpcy5fY2FtZXJhQ29udHJvbHMudGFyZ2V0PW4uY2xvbmUoKSx0aGlzLl9jYW1lcmFDb250cm9scy51cGRhdGUoKSksdGhpcy5fc2lsZW50PSExfV9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlKHQpe3RoaXMuX3NpbGVudHx8dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjYW1lcmFQb3NpdGlvbkNoYW5nZSIsZXZlbnQ6dH0pfV9maXRPYmplY3RUb1ZpZXdwb3J0KHQpe3ZhciBwLGQsZztsZXQgbj1uZXcgdGEsaT1uZXcgaixvPW5ldyBqO24uc2V0RnJvbU9iamVjdCh0KSxuLmdldENlbnRlcihpKSxuLmdldFNpemUobyk7bGV0IGE9TWF0aC5tYXgoby54LG8ueSxvLnopLHM9KChwPXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnAuZm92KSooTWF0aC5QSS8xODApLGw9TWF0aC5hYnMoYS8oMipNYXRoLnRhbihzLzIpKSkqMS4yNSxjPW4ubWluLnosdT1jPDA/LWMrbDpsLWMsaD0oZD10aGlzLmluaXRDYW1lcmFQb3NpdGlvbikhPW51bGw/ZDpuZXcgaihpLngsaS55LGwpLGY9KGc9dGhpcy5pbml0Q2FtZXJhTG9va0F0KSE9bnVsbD9nOmk7dGhpcy5zZXRDYW1lcmFWaWV3cG9pbnQoaCx1KjMsZil9X2NyZWF0ZU1lc2godCxyKXt2YXIgZjtsZXQgbj10LnZlcnRpY2VzLGk9dC5mYWNlcyxvPXQuY29sb3JzLGE9dGhpcy5fYXBwbHlEZWZhdWx0cyhyLHttYXRlcmlhbDp7Y2xzOiJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsY29sb3I6IiNhMGEwYTAiLHJvdWdobmVzczoxLG1ldGFsbmVzczowfX0pLHM9bmV3IFBlLGw9bmV3IEZsb2F0MzJBcnJheShuLmZsYXQoKSk7cy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUobCwzKSk7bGV0IGM9bmV3IFVpbnQxNkFycmF5KGkuZmxhdCgpKTtpZihvJiZvLmxlbmd0aCl7bGV0IHA9by5mbGF0KCk7Zm9yKGxldCBkPTA7ZDxwLmxlbmd0aDtkKyspcFtkXT1wW2RdLzI1NTtzLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBKZShuZXcgRmxvYXQzMkFycmF5KHApLDMpKSxhLm1hdGVyaWFsPWEubWF0ZXJpYWx8fHt9LGEubWF0ZXJpYWwudmVydGV4Q29sb3JzPSEwfXMuY2VudGVyKCkscy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxzLnNldEluZGV4KG5ldyBKZShjLDEpKSxzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7bGV0IHU9bmV3IHdNW2EubWF0ZXJpYWwuY2xzXShhLm1hdGVyaWFsKSxoPW5ldyBlaShzLHUpO2guY2FzdFNoYWRvdz0hMCxoLnJlY2VpdmVTaGFkb3c9ITAsKGY9dGhpcy5fc2NlbmUpPT1udWxsfHxmLmFkZChoKSx0aGlzLl9sYXN0TWVzaD1ofV9jcmVhdGVMaWdodHModCxyKXtmb3IobGV0IG49MDtuPHIubGlnaHRzLmxlbmd0aDtuKyspe2xldCBpPXIubGlnaHRzW25dLG89bmV3IHdNW2kuY2xzXShpLmNvbG9yLGkuaW50ZW5zaXR5KTtpLnBvc2l0aW9uJiZvLnBvc2l0aW9uLnNldChpLnBvc2l0aW9uWzBdLGkucG9zaXRpb25bMV0saS5wb3NpdGlvblsyXSksdC5hZGQobyl9fX07dmFyIGtuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlbGVjdGVkVmlldz0iYWxsIix0aGlzLmFjdGl2ZT0hMSx0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb249Zm4sdGhpcy5fc3RlcHM9W10sdGhpcy5fbWVzaFZpZXdlckF0dGFjaGVkPSExLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQ9ITEsdGhpcy5faXNNZXNoTG9hZGluZz0hMX1nZXQgX3J1bkNvbG9yKCl7dmFyIHQ9dGhpcy5ydW47cmV0dXJuIHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbih0KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fZGF0YVByb3ZpZGVyPW5ldyBQUCh0aGlzLnJlcXVlc3RNYW5hZ2VyKTtsZXQgdD1uZXcgejYodGhpcy5fcnVuQ29sb3IpO3QuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlVXBkYXRlU2NlbmUiLHRoaXMuX3VwZGF0ZUNhbnZhc1NpemUuYmluZCh0aGlzKSksdC5hZGRFdmVudExpc3RlbmVyKCJjYW1lcmFQb3NpdGlvbkNoYW5nZSIsdGhpcy5fb25DYW1lcmFQb3NpdGlvbkNoYW5nZS5iaW5kKHRoaXMpKSx0aGlzLl9tZXNoVmlld2VyPXR9cmVsb2FkKCl7IXRoaXMuYWN0aXZlfHwhdGhpcy5fZGF0YVByb3ZpZGVyfHwodGhpcy5faXNNZXNoTG9hZGluZz0hMCx0aGlzLl9kYXRhUHJvdmlkZXIucmVsb2FkKHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKS50aGVuKHQ9PnshdHx8KHRoaXMuX3N0ZXBzPXQsdGhpcy5fc3RlcEluZGV4PXQubGVuZ3RoLTEpfSkuY2F0Y2godD0+e2lmKCF0fHwhdC5jb2RlfHx0LmNvZGUhPWR2LkNBTkNFTExFRCl0aHJvdyB0PXR8fCJSZXNwb25zZSBwcm9jZXNzaW5nIGZhaWxlZC4iLG5ldyBFcnJvcih0KX0pKX1fdXBkYXRlU2NlbmUoKXt2YXIgcjtsZXQgdD10aGlzLl9jdXJyZW50U3RlcDshdHx8IXQubWVzaHx8KHRoaXMuX21lc2hWaWV3ZXIudXBkYXRlU2NlbmUodCx0aGlzKSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluaXRpYWxpemVkfHwodGhpcy5fbWVzaFZpZXdlci5yZXNldFZpZXcoKSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluaXRpYWxpemVkPSEwKSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWR8fCgocj10aGlzLnNoYWRvd1Jvb3QpPT1udWxsfHxyLmFwcGVuZENoaWxkKHRoaXMuX21lc2hWaWV3ZXIuZ2V0UmVuZGVyZXIoKS5kb21FbGVtZW50KSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWQ9ITApKX1fZGVib3VuY2VkRmV0Y2hNZXNoKCl7dGhpcy5kZWJvdW5jZSgiZmV0Y2hNZXNoIiwoKT0+dGhpcy5fbWF5YmVGZXRjaE1lc2goKSwxMDApfV9tYXliZUZldGNoTWVzaCgpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHQ9dGhpcy5fY3VycmVudFN0ZXA7aWYoISghdHx8dC5tZXNofHx0Lm1lc2hGZXRjaGluZykpe3QubWVzaEZldGNoaW5nPSEwLHRoaXMuX2lzTWVzaExvYWRpbmc9ITA7dHJ5e2xldCByPXlpZWxkIHRoaXMuX2RhdGFQcm92aWRlci5mZXRjaERhdGEodCx0aGlzLnJ1bix0aGlzLnRhZyx0aGlzLnNhbXBsZSk7dC5tZXNoPXJbMF0sdGhpcy5ub3RpZnlQYXRoKCJfY3VycmVudFN0ZXAubWVzaCIpfWNhdGNoKHIpe2lmKCFyfHwhci5jb2RlfHxyLmNvZGUhPWR2LkNBTkNFTExFRCl0aHJvdyByPXJ8fCJSZXNwb25zZSBwcm9jZXNzaW5nIGZhaWxlZC4iLG5ldyBFcnJvcihyKX1maW5hbGx5e3RoaXMuX2lzTWVzaExvYWRpbmc9ITEsdC5tZXNoRmV0Y2hpbmc9ITF9fX0pfV9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlKCl7aWYoIXRoaXMuX21lc2hWaWV3ZXIuaXNSZWFkeSgpKXJldHVybjtsZXQgdD1uZXcgQ3VzdG9tRXZlbnQoImNhbWVyYS1wb3NpdGlvbi1jaGFuZ2UiLHtkZXRhaWw6dGhpcy5fbWVzaFZpZXdlci5nZXRDYW1lcmFQb3NpdGlvbigpfSk7dGhpcy5kaXNwYXRjaEV2ZW50KHQpfXNldENhbWVyYVZpZXdwb2ludCh0LHIsbil7dGhpcy5fbWVzaFZpZXdlci5zZXRDYW1lcmFWaWV3cG9pbnQodCxyLG4pfV91cGRhdGVDYW52YXNTaXplKCl7bGV0IHQ9dGhpcy5vZmZzZXRXaWR0aCxyPXQsbj10aGlzLiQkKCIudGYtbWVzaC1sb2FkZXItaGVhZGVyIikub2Zmc2V0SGVpZ2h0LGk9e3dpZHRoOnQsaGVpZ2h0OnItbn07dGhpcy5fbWVzaFZpZXdlci5zZXRDYW52YXNTaXplKGkpfXJlZHJhdygpe3RoaXMuX3VwZGF0ZUNhbnZhc1NpemUoKSx0aGlzLmlzQ29ubmVjdGVkJiZ0aGlzLl9tZXNoVmlld2VyLmRyYXcoKX1faGFzQXRMZWFzdE9uZVN0ZXAodCl7cmV0dXJuISF0JiZ0Lmxlbmd0aD4wfV9oYXNNdWx0aXBsZVN0ZXBzKHQpe3JldHVybiEhdCYmdC5sZW5ndGg+MX1nZXQgX2N1cnJlbnRTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHMscj10aGlzLl9zdGVwSW5kZXg7cmV0dXJuIHRbcl18fG51bGx9Z2V0IF9zdGVwVmFsdWUoKXtsZXQgdD10aGlzLl9jdXJyZW50U3RlcDtyZXR1cm4gdD90LnN0ZXA6MH1nZXQgX2N1cnJlbnRXYWxsVGltZSgpe2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3MyKHQud2FsbF90aW1lKToiIn1fZ2V0TWF4U3RlcEluZGV4KHQpe3JldHVybiB0Lmxlbmd0aC0xfV9nZXRTYW1wbGVUZXh0KHQpe3JldHVybiBTdHJpbmcodCsxKX1faGFzTXVsdGlwbGVTYW1wbGVzKHQpe3JldHVybiB0PjF9X3VwZGF0ZVZpZXcoKXt2YXIgdD10aGlzLnNlbGVjdGVkVmlldzt0aGlzLl9tZXNoVmlld2VyJiZ0PT0iYWxsIiYmdGhpcy5fbWVzaFZpZXdlci5yZXNldFZpZXcoKX10b0xvY2FsZVN0cmluZ18odCl7cmV0dXJuIHQudG9Mb2NhbGVTdHJpbmcoKX19O2tuLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGNvbG9yPSJbW19ydW5Db2xvcl1dIiBjbGFzcz0idGYtbWVzaC1sb2FkZXItaGVhZGVyIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXMob2ZTYW1wbGVzKV1dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfZ2V0U2FtcGxlVGV4dChzYW1wbGUpXV0gb2YgW1tvZlNhbXBsZXNdXTwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwKF9zdGVwcyldXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHN0ZXAKICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkIgogICAgICAgICAgICAgID5bW3RvTG9jYWxlU3RyaW5nXyhfc3RlcFZhbHVlKV1dPC9zcGFuCiAgICAgICAgICAgID4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCBoZWFkaW5nLXJpZ2h0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19jdXJyZW50V2FsbFRpbWVdXSI+CiAgICAgICAgICAgICAgW1tfY3VycmVudFdhbGxUaW1lXV0KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwgcmlnaHQiPgogICAgICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlIGFjdGl2ZSBoaWRkZW4kPSJbWyFfaXNNZXNoTG9hZGluZ11dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzKF9zdGVwcyldXSI+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9InN0ZXBzIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX2dldE1heFN0ZXBJbmRleChfc3RlcHMpXV0iCiAgICAgICAgICAgIG1heC1tYXJrZXJzPSJbW19nZXRNYXhTdGVwSW5kZXgoX3N0ZXBzKV1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KICAgIDxzdHlsZT4KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXJnaW4tbGVmdDogMXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMXB4OwogICAgICB9CiAgICAgIC50Zi1tZXNoLWxvYWRlci1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTA1cHg7CiAgICAgIH0KICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrbi5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrbi5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxrbi5wcm90b3R5cGUsInNhbXBsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxrbi5wcm90b3R5cGUsIm9mU2FtcGxlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrbi5wcm90b3R5cGUsInNlbGVjdGVkVmlldyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtuLnByb3RvdHlwZSwiYWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sa24ucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIix6NildLGtuLnByb3RvdHlwZSwiX21lc2hWaWV3ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsUFApXSxrbi5wcm90b3R5cGUsIl9kYXRhUHJvdmlkZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa24ucHJvdG90eXBlLCJfY29sb3JTY2FsZUZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sa24ucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGtuLnByb3RvdHlwZSwiX3N0ZXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtuLnByb3RvdHlwZSwiX21lc2hWaWV3ZXJBdHRhY2hlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtuLnByb3RvdHlwZSwiX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxrbi5wcm90b3R5cGUsIl9pc01lc2hMb2FkaW5nIix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrbi5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbQnQoInJ1biIsInRhZyIsImFjdGl2ZSIsIl9kYXRhUHJvdmlkZXIiLCJfbWVzaFZpZXdlciIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sa24ucHJvdG90eXBlLCJyZWxvYWQiLG51bGwpO0UoW0J0KCJfY3VycmVudFN0ZXAuKiIsIl9tZXNoVmlld2VyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxrbi5wcm90b3R5cGUsIl91cGRhdGVTY2VuZSIsbnVsbCk7RShbQnQoIl9jdXJyZW50U3RlcCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sa24ucHJvdG90eXBlLCJfZGVib3VuY2VkRmV0Y2hNZXNoIixudWxsKTtFKFtSdCgiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGtuLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwIixudWxsKTtFKFtSdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa24ucHJvdG90eXBlLCJfc3RlcFZhbHVlIixudWxsKTtFKFtSdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa24ucHJvdG90eXBlLCJfY3VycmVudFdhbGxUaW1lIixudWxsKTtFKFtCdCgic2VsZWN0ZWRWaWV3IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxrbi5wcm90b3R5cGUsIl91cGRhdGVWaWV3IixudWxsKTtrbj1FKFt5dCgidGYtbWVzaC1sb2FkZXIiKV0sa24pO3ZhciBwaD1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGFnRmlsdGVyPSIuKiIsdGhpcy5fc2VsZWN0ZWRWaWV3PSJhbGwiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwoKT0+e3RoaXMuX2hhbmRsZVdpbmRvd1Jlc2l6ZSgpfSwhMSksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfV9nZXRBbGxDaGlsZHJlbigpe3ZhciB0O3JldHVybiBBcnJheS5mcm9tKCh0PXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvckFsbCgidGYtbWVzaC1sb2FkZXIiKSl9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2VkKHQpe3RoaXMuX3NlbGVjdGVkVmlldz09InNoYXJlIiYmdGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKHI9Pnt0LnRhcmdldCE9ciYmci5zZXRDYW1lcmFWaWV3cG9pbnQodC5kZXRhaWwucG9zaXRpb24sdC5kZXRhaWwuZmFyLHQuZGV0YWlsLnRhcmdldCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKHRoaXMuX3JlbG9hZE1lc2hlcy5iaW5kKHRoaXMpKX1faGFuZGxlV2luZG93UmVzaXplKCl7dGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKHQ9Pnt0LnJlZHJhdygpfSl9X2ZldGNoVGFncygpe2xldCB0PXZlKCkucGx1Z2luUm91dGUoIm1lc2giLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e2lmKHN4LmlzRXF1YWwocix0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtsZXQgbj1zeC5tYXBWYWx1ZXMocixvPT5PYmplY3Qua2V5cyhvKSksaT0kaShuKTt0aGlzLl9kYXRhTm90Rm91bmQ9aS5sZW5ndGg9PT0wLHRoaXMuX3J1blRvVGFnSW5mbz1yfSl9X3JlbG9hZE1lc2hlcygpe3RoaXMuX2dldEFsbENoaWxkcmVuKCkuZm9yRWFjaCh0PT57dC5yZWxvYWQoKX0pfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcjtsZXQgaT1zeC5tYXBWYWx1ZXModCxsPT5PYmplY3Qua2V5cyhsKSksbz1RbChpLHIsbik7ZnVuY3Rpb24gYShsKXtsZXQgYz10W2wucnVuXVtsLnRhZ10uc2FtcGxlcztyZXR1cm4gc3gucmFuZ2UoYykubWFwKHU9Pk9iamVjdC5hc3NpZ24oe30sbCx7c2FtcGxlOnUsb2ZTYW1wbGVzOmN9KSl9cmV0dXJuIG8ubWFwKGw9Pk9iamVjdC5hc3NpZ24oe30sbCx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGwuaXRlbXMubWFwKGEpKX0pKX19O3BoLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBzbG90PSJzaWRlYmFyIiBjbGFzcz0iYWxsLWNvbnRyb2xzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gdmlldy1jb250cm9sIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+UG9pbnQgb2YgdmlldzwvaDM+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwCiAgICAgICAgICAgICAgICBpZD0idmlldy1yYWRpby1ncm91cCIKICAgICAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZFZpZXd9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJhbGwtcmFkaW8tYnV0dG9uIiBuYW1lPSJhbGwiPgogICAgICAgICAgICAgICAgICBEaXNwbGF5IGFsbCBwb2ludHMKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9ImFsbC1yYWRpby1idXR0b24iCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBab29tIGFuZCBjZW50ZXIgY2FtZXJhIHRvIGRpc3BsYXkgYWxsIHBvaW50cyBhdCBvbmNlLiBOb3RlLAogICAgICAgICAgICAgICAgICB0aGF0IHNvbWUgcG9pbnRzIGNvdWxkIGJlIHRvbyBmYXIgKGkuZS4gdG9vIHNtYWxsKSB0byBiZQogICAgICAgICAgICAgICAgICB2aXNpYmxlLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0idXNlci1yYWRpby1idXR0b24iIG5hbWU9InVzZXIiPgogICAgICAgICAgICAgICAgICBDdXJyZW50IHZpZXcKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9InVzZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgS2VlcCBjdXJyZW50IGNhbWVyYSBwb3NpdGlvbiBhbmQgem9vbSBsZXZlbC4KICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9InNoYXJlLXJhZGlvLWJ1dHRvbiIgbmFtZT0ic2hhcmUiPgogICAgICAgICAgICAgICAgICBTaGFyZSB2aWV3cG9pbnQKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9InNoYXJlLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludCBhbW9uZyBhbGwgY2FtZXJhcy4KICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBwb2ludCBjbG91ZCBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgWW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBwb2ludCBjbG91ZCBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbWVzaC1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBzZWxlY3RlZC12aWV3PSJbW19zZWxlY3RlZFZpZXddXSIKICAgICAgICAgICAgICAgICAgcnVuPSJbW2l0ZW0ucnVuXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICBzYW1wbGU9IltbaXRlbS5zYW1wbGVdXSIKICAgICAgICAgICAgICAgICAgb2Ytc2FtcGxlcz0iW1tpdGVtLm9mU2FtcGxlc11dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1jb250YWluZXIiCiAgICAgICAgICAgICAgICAgIG9uLWNhbWVyYS1wb3NpdGlvbi1jaGFuZ2U9Il9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlZCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvdGYtbWVzaC1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgIH0KICAgICAgLnNpZGViYXItc2VjdGlvbiBoMyB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnJ1bnMtc2VsZWN0b3IgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQoKICAgICAgdGYtcnVucy1zZWxlY3RvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLnZpZXctY29udHJvbCB7CiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLnZpZXctY29udHJvbCBoMy50aXRsZSB7CiAgICAgICAgcGFkZGluZy10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAudmlldy1jb250cm9sIHBhcGVyLXJhZGlvLWdyb3VwIHsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLyogTGF5b3V0IG11c3QgYmUgaG9yaXpvbnRhbCwgaS5lLiBpdGVtcyBhcnJhbmdlZCBpbiBhIHJvdy4gSWYgaXRlbXMgY2Fubm90IGZpdCBpbiBhIHJvdywKICAgICAgICogdGhleSBzaG91bGQgYmUgbW92ZWQgdG8gbmV4dCBsaW5lLiBBbGwgaXRlbXMgbXVzdCBiZSBzcXVhcmUgYXQgYWxsIHRpbWVzLiBNaW5pbXVtIHNpemUgb2YKICAgICAgICogdGhlIGl0ZW0gaXMgNDgwcHguIFRoaXMgbWVhbnMgdGhhdCBtYXhpbXVtIHNpemUgb2YgdGhlIGl0ZW0gbXVzdCBiZSA0ODBweCArIDQ3OXB4ID0gOTU5cHguCiAgICAgICAqICovCiAgICAgIC5ob3Jpem9udGFsIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIHRmLW1lc2gtbG9hZGVyIHsKICAgICAgICB3aWR0aDogNDgwcHg7CiAgICAgICAgZmxleC1iYXNpczogNDgwcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxwaC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLHBoLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwaC5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxwaC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scGgucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxwaC5wcm90b3R5cGUsIl9zZWxlY3RlZFZpZXciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scGgucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0scGgucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7cGg9RShbeXQoIm1lc2gtZGFzaGJvYXJkIiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0scGgpO3ZhciBKVT1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faW5zdGFsbENvbW1hbmQ9InBpcCBpbnN0YWxsIC1VIHRlbnNvcmJvYXJkLXBsdWdpbi1wcm9maWxlIn1fY29weUluc3RhbGxDb21tYW5kKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgdD0oKT0+UmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe3RoaXMuJC5jb21tYW5kVGV4dGFyZWEuc2VsZWN0KCk7dHJ5e3lpZWxkIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuX2luc3RhbGxDb21tYW5kKX1jYXRjaChpKXtpZighZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoKX19KSxyPXRoaXMuJC5jb3BpZWRNZXNzYWdlO3RyeXt5aWVsZCB0KCksci5pbm5lclRleHQ9IkNvcGllZC4ifWNhdGNoKG4pe3IuaW5uZXJUZXh0PSJGYWlsZWQgdG8gY29weSB0byBjbGlwYm9hcmQuIn19KX1fcmVtb3ZlQ29waWVkTWVzc2FnZSgpe2xldCB0PXRoaXMuJC5jb3BpZWRNZXNzYWdlO3QuaW5uZXJUZXh0PSIifX07SlUudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9Im1lc3NhZ2UiPgogICAgICA8aDM+VGhlIHByb2ZpbGUgcGx1Z2luIGhhcyBtb3ZlZC48L2gzPgogICAgICA8cD4KICAgICAgICBQbGVhc2UgaW5zdGFsbCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIHByb2ZpbGUgcGx1Z2luIGZyb20gUHlQSSBieQogICAgICAgIHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGZyb20gdGhlIG1hY2hpbmUgcnVubmluZyBUZW5zb3JCb2FyZDoKICAgICAgPC9wPgogICAgICA8dGV4dGFyZWEKICAgICAgICBpZD0iY29tbWFuZFRleHRhcmVhIgogICAgICAgIHJlYWRvbmx5PSIiCiAgICAgICAgcm93cz0iMSIKICAgICAgICBvbi1ibHVyPSJfcmVtb3ZlQ29waWVkTWVzc2FnZSIKICAgICAgPgpbW19pbnN0YWxsQ29tbWFuZF1dPC90ZXh0YXJlYQogICAgICA+CiAgICAgIDxkaXYgaWQ9ImNvcHlDb250YWluZXIiPgogICAgICAgIDxzcGFuIGlkPSJjb3BpZWRNZXNzYWdlIj48L3NwYW4+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQ9IiIgb24tdGFwPSJfY29weUluc3RhbGxDb21tYW5kIgogICAgICAgICAgPkNvcHkgdG8gY2xpcGJvYXJkPC9wYXBlci1idXR0b24KICAgICAgICA+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UgewogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICB9CiAgICAgICNjb21tYW5kVGV4dGFyZWEgewogICAgICAgIG1hcmdpbi10b3A6IDFleDsKICAgICAgICBwYWRkaW5nOiAxZXggMWVtOwogICAgICAgIHJlc2l6ZTogdmVydGljYWw7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgI2NvcHlDb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgI2NvcGllZE1lc3NhZ2UgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEpVLnByb3RvdHlwZSwiX2luc3RhbGxDb21tYW5kIix2b2lkIDApO0pVPUUoW3l0KCJ0Zi1wcm9maWxlLXJlZGlyZWN0LWRhc2hib2FyZCIpXSxKVSk7dmFyIGxtPUVlKE9lKCksMSk7dmFyIHpsPUVlKE9lKCksMSksUVU9RWUod2woKSwxKTt2YXIgbm49Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fcnVuVG9QckN1cnZlRW50cnk9e30sdGhpcy5fcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeT17fSx0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb249e3NjYWxlOmZufSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3hDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q9KCk9PntsZXQgdD1uZXcgUVUuU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6dCxheGlzOm5ldyBRVS5BeGVzLk51bWVyaWModCwiYm90dG9tIiksYWNjZXNzb3I6cj0+ci5yZWNhbGx9fSx0aGlzLl95VmFsdWVBY2Nlc3Nvcj10PT50LnByZWNpc2lvbix0aGlzLl90b29sdGlwQ29sdW1ucz0oKCk9PntsZXQgdD1XdShlMCkscj1uPT5pc05hTihuKT8iTmFOIjp0KG4pO3JldHVyblt7dGl0bGU6IlJ1biIsZXZhbHVhdGU6bj0+bi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJUaHJlc2hvbGQiLGV2YWx1YXRlOm49PnIobi5kYXR1bS50aHJlc2hvbGRzKX0se3RpdGxlOiJQcmVjaXNpb24iLGV2YWx1YXRlOm49PnIobi5kYXR1bS5wcmVjaXNpb24pfSx7dGl0bGU6IlJlY2FsbCIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnJlY2FsbCl9LHt0aXRsZToiVFAiLGV2YWx1YXRlOm49Pm4uZGF0dW0udHJ1ZV9wb3NpdGl2ZXN9LHt0aXRsZToiRlAiLGV2YWx1YXRlOm49Pm4uZGF0dW0uZmFsc2VfcG9zaXRpdmVzfSx7dGl0bGU6IlROIixldmFsdWF0ZTpuPT5uLmRhdHVtLnRydWVfbmVnYXRpdmVzfSx7dGl0bGU6IkZOIixldmFsdWF0ZTpuPT5uLmRhdHVtLmZhbHNlX25lZ2F0aXZlc31dfSkoKSx0aGlzLl9zZXJpZXNEYXRhRmllbGRzPVsidGhyZXNob2xkcyIsInByZWNpc2lvbiIsInJlY2FsbCIsInRydWVfcG9zaXRpdmVzIiwiZmFsc2VfcG9zaXRpdmVzIiwidHJ1ZV9uZWdhdGl2ZXMiLCJmYWxzZV9uZWdhdGl2ZXMiXSx0aGlzLl9kZWZhdWx0WFJhbmdlPVstLjA1LDEuMDVdLHRoaXMuX2RlZmF1bHRZUmFuZ2U9Wy0uMDUsMS4wNV0sdGhpcy5fcmVxdWVzdERhdGE9KHQscixuKT0+e2xldCBvPXZlKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi9wcl9jdXJ2ZXMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9YSxsPXRoaXMudGFnLGM9Q24obyx7dGFnOmwscnVuOnN9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGMpLnRoZW4odT0+dm9pZCByKHtpdGVtOmEsZGF0YTp1fSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fc21vb3RoaW5nRW5hYmxlZD0hMX1fY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpe3JldHVybih0LHIsbik9Pnt0aGlzLnNldCgiX3J1blRvRGF0YU92ZXJUaW1lIixPYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvRGF0YU92ZXJUaW1lLG4pKX19X2NvbXB1dGVSdW5Db2xvcih0KXtyZXR1cm4gZm4odCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2F0dGFjaGVkPSEwLHRoaXMucmVsb2FkKCl9X2dldENoYXJ0RGF0YUxvYWRlcigpe3ZhciB0O3JldHVybih0PXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvcigidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpfXJlbG9hZCgpe2lmKCEhdGhpcy5fYXR0YWNoZWQpe2lmKHRoaXMucnVucy5sZW5ndGg9PT0wKXt0aGlzLnNldCgiX3J1blRvRGF0YU92ZXJUaW1lIix7fSk7cmV0dXJufXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpfX1fc2V0Q2hhcnREYXRhKCl7dmFyIHQ9dGhpcy5fcnVuVG9QckN1cnZlRW50cnkscj10aGlzLl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5LG49dGhpcy5fc2V0T2ZSZWxldmFudFJ1bnM7emwuZm9yT3duKHQsKGksbyk9PntsZXQgYT1yW29dO2lmKCEoYSYmdFtvXS5zdGVwPT09YS5zdGVwKSl7aWYoIW5bb10pe3RoaXMuX2NsZWFyU2VyaWVzRGF0YShvKTtyZXR1cm59dGhpcy5fdXBkYXRlU2VyaWVzRGF0YUZvclJ1bihvLGkpfX0pfV91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKHQscil7bGV0IG49emwucmVkdWNlKHRoaXMuX3Nlcmllc0RhdGFGaWVsZHMsKGEscyk9PihhW3NdPXJbc10uc2xpY2UoKS5yZXZlcnNlKCksYSkse30pLGk9bmV3IEFycmF5KG5bdGhpcy5fc2VyaWVzRGF0YUZpZWxkc1swXV0ubGVuZ3RoKTtmb3IobGV0IGE9MDthPGkubGVuZ3RoO2ErKylpW2FdPXpsLm1hcFZhbHVlcyhuLHM9PnNbYV0pO2xldCBvPXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpO28uc2V0U2VyaWVzRGF0YSh0LGkpLG8uY29tbWl0Q2hhbmdlcygpfV9jbGVhclNlcmllc0RhdGEodCl7bGV0IHI9dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7ci5zZXRTZXJpZXNEYXRhKHQsW10pLHIuY29tbWl0Q2hhbmdlcygpfV91cGRhdGVSdW5Ub1ByQ3VydmVFbnRyeSgpe3ZhciB0PXRoaXMuX3J1blRvRGF0YU92ZXJUaW1lLHI9dGhpcy5ydW5Ub1N0ZXBDYXA7bGV0IG49e307emwuZm9yT3duKHQsKGksbyk9PnshaXx8IWkubGVuZ3RofHwobltvXT10aGlzLl9jb21wdXRlRW50cnlDbG9zZXN0T3JFcXVhbFRvU3RlcENhcChyW29dLGkpKX0pLHRoaXMuc2V0KCJfcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeSIsdGhpcy5fcnVuVG9QckN1cnZlRW50cnkpLHRoaXMuc2V0KCJfcnVuVG9QckN1cnZlRW50cnkiLG4pfV9ub3RpZnlEYXRhQ2hhbmdlKCl7dmFyIHQ9dGhpcy5fcnVuVG9EYXRhT3ZlclRpbWU7dGhpcy5vbkRhdGFDaGFuZ2UmJnRoaXMub25EYXRhQ2hhbmdlKHQpfV9jb21wdXRlRW50cnlDbG9zZXN0T3JFcXVhbFRvU3RlcENhcCh0LHIpe2xldCBuPU1hdGgubWluKHpsLnNvcnRlZEluZGV4KHIubWFwKGk9Pmkuc3RlcCksdCksci5sZW5ndGgtMSk7cmV0dXJuIHJbbl19Z2V0IF9ydW5zV2l0aFN0ZXBBdmFpbGFibGUoKXt2YXIgdD10aGlzLnJ1bnMscj10aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeTtyZXR1cm4gemwuZmlsdGVyKHQsbj0+cltuXSkuc29ydCgpfWdldCBfc2V0T2ZSZWxldmFudFJ1bnMoKXt2YXIgdD10aGlzLl9ydW5zV2l0aFN0ZXBBdmFpbGFibGU7bGV0IHI9e307cmV0dXJuIHpsLmZvckVhY2godCxuPT57cltuXT0hMH0pLHJ9X2NvbXB1dGVDdXJyZW50U3RlcEZvclJ1bih0LHIpe2xldCBuPXRbcl07cmV0dXJuIG4/bi5zdGVwOm51bGx9X2NvbXB1dGVDdXJyZW50V2FsbFRpbWVGb3JSdW4odCxyKXtsZXQgbj10W3JdO3JldHVybiBuP25ldyBEYXRlKG4ud2FsbF90aW1lKjFlMykudG9TdHJpbmcoKTpudWxsfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3Jlc2V0RG9tYWluKCl7dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCkucmVzZXREb21haW4oKX1yZWRyYXcoKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZWRyYXcoKX19O25uLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nCiAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICA+PC90Zi1jYXJkLWhlYWRpbmc+CgogICAgPHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIKICAgICAgeC1jb21wb25lbnRzLWNyZWF0aW9uLW1ldGhvZD0iW1tfeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICB5LXZhbHVlLWFjY2Vzc29yPSJbW195VmFsdWVBY2Nlc3Nvcl1dIgogICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlRnVuY3Rpb25dXSIKICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW19kZWZhdWx0WFJhbmdlXV0iCiAgICAgIGRlZmF1bHQteS1yYW5nZT0iW1tfZGVmYXVsdFlSYW5nZV1dIgogICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIKICAgICAgZGF0YS1zZXJpZXM9IltbcnVuc11dIgogICAgICBsb2FkLWtleT0iW1t0YWddXSIKICAgICAgcmVxdWVzdC1kYXRhPSJbW19yZXF1ZXN0RGF0YV1dIgogICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIgogICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICA+PC90Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyPgoKICAgIDxkaXYgaWQ9ImJ1dHRvbnMtcm93Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iUmVzZXQgYXhlcyB0byBbMCwgMV0uIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9InN0ZXAtbGVnZW5kIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcnVuc1dpdGhTdGVwQXZhaWxhYmxlXV0iIGFzPSJydW4iPgogICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1yb3ciPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iY29sb3ItYm94IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDogW1tfY29tcHV0ZVJ1bkNvbG9yKHJ1bildXTsiCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICBbW3J1bl1dIGlzIGF0CiAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcC1sYWJlbC10ZXh0Ij4KICAgICAgICAgICAgc3RlcCBbW19jb21wdXRlQ3VycmVudFN0ZXBGb3JSdW4oX3J1blRvUHJDdXJ2ZUVudHJ5LCBydW4pXV0gPC9zcGFuCiAgICAgICAgICA+PGJyIC8+CiAgICAgICAgICA8c3BhbiBjbGFzcz0id2FsbC10aW1lLWxhYmVsLXRleHQiPgogICAgICAgICAgICAoW1tfY29tcHV0ZUN1cnJlbnRXYWxsVGltZUZvclJ1bihfcnVuVG9QckN1cnZlRW50cnksIHJ1bildXSkKICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB3aWR0aDogNTAwcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICB0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIHsKICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciB7CiAgICAgICAgaGVpZ2h0OiA2MDBweDsKICAgICAgfQogICAgICAjYnV0dG9ucy1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQogICAgICAjYnV0dG9ucy1yb3cgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQogICAgICAjYnV0dG9ucy1yb3cgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CiAgICAgICNzdGVwLWxlZ2VuZCB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBmb250LXNpemU6IDAuOGVtOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogMCAwIDAgMTBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAubGVnZW5kLXJvdyB7CiAgICAgICAgbWFyZ2luOiA1cHggMCA1cHggMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuY29sb3ItYm94IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMXB4OwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgfQogICAgICAuc3RlcC1sYWJlbC10ZXh0IHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQogICAgICAud2FsbC10aW1lLWxhYmVsLXRleHQgewogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGZvbnQtc2l6ZTogMC44ZW07CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbm4ucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLG5uLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJydW5Ub1N0ZXBDYXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxubi5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbm4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbm4ucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfcnVuVG9QckN1cnZlRW50cnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9ydW5Ub0RhdGFPdmVyVGltZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLG5uLnByb3RvdHlwZSwib25EYXRhQ2hhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLG5uLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG5uLnByb3RvdHlwZSwiX2F0dGFjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwiX3hDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfeVZhbHVlQWNjZXNzb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsIl9zZXJpZXNEYXRhRmllbGRzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsIl9kZWZhdWx0WFJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsIl9kZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sbm4ucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0J0KCJydW5zIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxubi5wcm90b3R5cGUsInJlbG9hZCIsbnVsbCk7RShbQnQoIl9ydW5Ub1ByQ3VydmVFbnRyeSIsIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5IiwiX3NldE9mUmVsZXZhbnRSdW5zIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxubi5wcm90b3R5cGUsIl9zZXRDaGFydERhdGEiLG51bGwpO0UoW0J0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLCJydW5Ub1N0ZXBDYXAiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX3VwZGF0ZVJ1blRvUHJDdXJ2ZUVudHJ5IixudWxsKTtFKFtCdCgiX3J1blRvRGF0YU92ZXJUaW1lIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxubi5wcm90b3R5cGUsIl9ub3RpZnlEYXRhQ2hhbmdlIixudWxsKTtFKFtSdCgicnVucyIsIl9ydW5Ub1ByQ3VydmVFbnRyeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbm4ucHJvdG90eXBlLCJfcnVuc1dpdGhTdGVwQXZhaWxhYmxlIixudWxsKTtFKFtSdCgiX3J1bnNXaXRoU3RlcEF2YWlsYWJsZSIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLG5uLnByb3RvdHlwZSwiX3NldE9mUmVsZXZhbnRSdW5zIixudWxsKTtubj1FKFt5dCgidGYtcHItY3VydmUtY2FyZCIpXSxubik7dmFyIFNNPUVlKE9lKCksMSk7dmFyIGVwPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1blRvU3RlcEluZGV4PXt9fV9jb21wdXRlQ29sb3JGb3JSdW4odCl7cmV0dXJuIGZuKHQpfV9jb21wdXRlVGltZVRleHRGb3JSdW4odCxyLG4saSl7bGV0IG89cltuXTtpZighU00uaXNOdW1iZXIobykpcmV0dXJuIiI7bGV0IGE9dFtuXTtpZighYSlyZXR1cm4iIjtsZXQgcz1hW29dW2ldO2lmKGk9PT0ic3RlcCIpcmV0dXJuYHN0ZXAgJHtzfWA7aWYoaT09PSJyZWxhdGl2ZSIpcmV0dXJuIHM8MT9gJHsocyoxZTMpLnRvRml4ZWQoMil9IG1zYDpgJHtzLnRvRml4ZWQoMil9IHNgO2lmKGk9PT0id2FsbF90aW1lIilyZXR1cm4gbmV3IERhdGUocyoxZTMpLnRvU3RyaW5nKCk7dGhyb3cgbmV3IEVycm9yKGBUaGUgZGlzcGxheSB0eXBlIG9mICR7aX0gaXMgbm90IHJlY29nbml6ZWQuYCl9X3NsaWRlclZhbHVlQ2hhbmdlZCh0KXtsZXQgcj10LnRhcmdldC5kYXRhc2V0LnJ1bixuPXQudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLGk9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub1N0ZXBJbmRleCk7aXNOYU4obik/ZGVsZXRlIGlbcl06aVtyXT10LnRhcmdldC5pbW1lZGlhdGVWYWx1ZSx0aGlzLl9ydW5Ub1N0ZXBJbmRleD1pfV9jb21wdXRlTWF4U3RlcEluZGV4Rm9yUnVuKHQscil7bGV0IG49dFtyXTtyZXR1cm4gbiYmbi5sZW5ndGg/bi5sZW5ndGgtMTowfV91cGRhdGVTdGVwc0Zvck5ld1J1bnMoKXt2YXIgdD10aGlzLnJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXM7bGV0IHI9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub1N0ZXBJbmRleCk7U00uZm9yT3duKHQsKG4saSk9PntTTS5pc051bWJlcihyW2ldKXx8KHJbaV09bi5sZW5ndGgtMSl9KSx0aGlzLl9ydW5Ub1N0ZXBJbmRleD1yfV9nZXRTdGVwKHQscil7cmV0dXJuIHRoaXMuX3J1blRvU3RlcEluZGV4P3RoaXMuX3J1blRvU3RlcEluZGV4W3JdOjB9X2NvbXB1dGVSdW5Ub1N0ZXAodCxyKXtsZXQgbj17fTtyZXR1cm4gU00uZm9yT3duKHIsKGksbyk9PntsZXQgYT10W29dOyFhfHwobltvXT1hW2ldLnN0ZXApfSksbn1nZXQgX3J1bnNXaXRoU2xpZGVycygpe3ZhciB0PXRoaXMucnVucyxyPXRoaXMucnVuVG9BdmFpbGFibGVUaW1lRW50cmllcztyZXR1cm4gdC5maWx0ZXIobj0+cltuXSl9fTtlcC50ZW1wbGF0ZT1RYAogICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcnVuc1dpdGhTbGlkZXJzXV0iIGFzPSJydW4iPgogICAgICA8ZGl2IGNsYXNzPSJydW4td2lkZ2V0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJydW4tZGlzcGxheS1jb250YWluZXIiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0icnVuLWNvbG9yLWJveCIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6W1tfY29tcHV0ZUNvbG9yRm9yUnVuKHJ1bildXTsiCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJydW4tdGV4dCI+W1tydW5dXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtZGlzcGxheS1jb250YWluZXIiPgogICAgICAgICAgW1tfY29tcHV0ZVRpbWVUZXh0Rm9yUnVuKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCwKICAgICAgICAgIHJ1biwgdGltZURpc3BsYXlUeXBlKV1dCiAgICAgICAgPC9kaXY+CiAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgZGF0YS1ydW4kPSJbW3J1bl1dIgogICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgIG1heD0iW1tfY29tcHV0ZU1heFN0ZXBJbmRleEZvclJ1bihydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzLCBydW4pXV0iCiAgICAgICAgICB2YWx1ZT0iW1tfZ2V0U3RlcChfcnVuVG9TdGVwSW5kZXgsIHJ1bildXSIKICAgICAgICAgIG9uLWltbWVkaWF0ZS12YWx1ZS1jaGFuZ2VkPSJfc2xpZGVyVmFsdWVDaGFuZ2VkIgogICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAucnVuLXdpZGdldCB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgbWFyZ2luOiAtOHB4IDAgMCAtMTVweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuc3RlcC1kaXNwbGF5LWNvbnRhaW5lciB7CiAgICAgICAgZm9udC1zaXplOiAwLjllbTsKICAgICAgICBtYXJnaW46IDAgMTVweCAwIDA7CiAgICAgIH0KICAgICAgLnJ1bi10ZXh0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgICAgLnJ1bi1jb2xvci1ib3ggewogICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGVwLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlcC5wcm90b3R5cGUsInJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVJ1blRvU3RlcChydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzLCBfcnVuVG9TdGVwSW5kZXgpIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlcC5wcm90b3R5cGUsInJ1blRvU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxlcC5wcm90b3R5cGUsInRpbWVEaXNwbGF5VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlcC5wcm90b3R5cGUsIl9ydW5Ub1N0ZXBJbmRleCIsdm9pZCAwKTtFKFtCdCgicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZXAucHJvdG90eXBlLCJfdXBkYXRlU3RlcHNGb3JOZXdSdW5zIixudWxsKTtFKFtSdCgicnVucyIsInJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGVwLnByb3RvdHlwZSwiX3J1bnNXaXRoU2xpZGVycyIsbnVsbCk7ZXA9RShbeXQoInRmLXByLWN1cnZlLXN0ZXBzLXNlbGVjdG9yIildLGVwKTt2YXIga289Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90aW1lRGlzcGxheVR5cGU9InN0ZXAiLHRoaXMuX3NlbGVjdGVkUnVucz1bXSx0aGlzLl9ydW5Ub1RhZ0luZm89e30sdGhpcy5fdGFnVG9SdW5Ub0RhdGE9e30sdGhpcy5fZ2V0Q2F0ZWdvcnlJdGVtS2V5PXQ9PnQudGFnLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZSx0aGlzLl9zdGVwPTB9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtQcm9taXNlLmFsbChbdGhpcy5fZmV0Y2hUYWdzKCldKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkQ2FyZHMoKX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9mZXRjaFRhZ3MoKXtsZXQgdD12ZSgpLnBsdWdpblJvdXRlKCJwcl9jdXJ2ZXMiLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e2lmKGxtLmlzRXF1YWwocix0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtsZXQgbj1sbS5tYXBWYWx1ZXMocixvPT5sbS5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixpLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixyKSx0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfSl9X3JlbG9hZENhcmRzKCl7dmFyIHQ7bG0uZm9yRWFjaCgodD10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDp0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXByLWN1cnZlLWNhcmQiKSxyPT57ci5yZWxvYWQoKX0pfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcjtsZXQgaT1sbS5tYXBWYWx1ZXModCxvPT5PYmplY3Qua2V5cyhvKSk7cmV0dXJuIHVFKGkscixuKX1nZXQgX3JlbGV2YW50U2VsZWN0ZWRSdW5zKCl7dmFyIHQ9dGhpcy5fc2VsZWN0ZWRSdW5zLHI9dGhpcy5fcnVuVG9UYWdJbmZvO3JldHVybiB0LmZpbHRlcihuPT5yW25dKX1fdGFnTWV0YWRhdGEodCxyLG4pe2xldCBpPXt9O3IuZm9yRWFjaChhPT57aVthXT10W2FdW25dfSk7bGV0IG89bi5yZXBsYWNlKC9cL3ByX2N1cnZlcyQvLCIiKTtyZXR1cm4gaVIoaSxvKX1fY3JlYXRlRGF0YUNoYW5nZUNhbGxiYWNrKHQpe3JldHVybiByPT57dGhpcy5zZXQoIl90YWdUb1J1blRvRGF0YSIsTXgoS2woe30sdGhpcy5fdGFnVG9SdW5Ub0RhdGEpLHtbdF06cn0pKX19Z2V0IF9ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzKCl7dmFyIHQ9dGhpcy5fdGFnVG9SdW5Ub0RhdGE7bGV0IHI9e307Zm9yKGxldFtpLG9db2YgT2JqZWN0LmVudHJpZXModCkpZm9yKGxldFthXW9mIE9iamVjdC5lbnRyaWVzKG8pKShyW2FdPT1udWxsfHxpPHJbYV0pJiYoclthXT1pKTtsZXQgbj17fTtmb3IobGV0W2ksb11vZiBPYmplY3QuZW50cmllcyhyKSl7bGV0IGE9dFtvXVtpXTtuW2ldPWEubWFwKHM9Pih7c3RlcDpzLnN0ZXAsd2FsbF90aW1lOnMud2FsbF90aW1lLHJlbGF0aXZlOnMud2FsbF90aW1lLWFbMF0ud2FsbF90aW1lfSkpfXJldHVybiBufX07a28udGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9InRpbWUtdHlwZS1zZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJUaW1lIERpc3BsYXkgVHlwZSIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfdGltZURpc3BsYXlUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPCEtLQogICAgICAgICAgICAtLT4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iIGlkPSJzdGVwcy1zZWxlY3Rvci1jb250YWluZXIiPgogICAgICAgICAgICAgIDx0Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3RvcgogICAgICAgICAgICAgICAgcnVucz0iW1tfcmVsZXZhbnRTZWxlY3RlZFJ1bnNdXSIKICAgICAgICAgICAgICAgIHJ1bi10by1zdGVwPSJ7e19ydW5Ub1N0ZXB9fSIKICAgICAgICAgICAgICAgIHJ1bi10by1hdmFpbGFibGUtdGltZS1lbnRyaWVzPSJbW19ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzXV0iCiAgICAgICAgICAgICAgICB0aW1lLWRpc3BsYXktdHlwZT0iW1tfdGltZURpc3BsYXlUeXBlXV0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3I+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gcHJlY2lzaW9u4oCTcmVjYWxsIGN1cnZlIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHByZWNpc2lvbuKAk3JlY2FsbCBkYXRhIHRvIHlvdXIgZXZlbnQKICAgICAgICAgICAgICAgIGZpbGVzLgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgICAgZ2V0LWNhdGVnb3J5LWl0ZW0ta2V5PSJbW19nZXRDYXRlZ29yeUl0ZW1LZXldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1wci1jdXJ2ZS1jYXJkCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgcnVucz0iW1tpdGVtLnJ1bnNdXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW5zLCBpdGVtLnRhZyldXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBydW4tdG8tc3RlcC1jYXA9IltbX3J1blRvU3RlcF1dIgogICAgICAgICAgICAgICAgICBvbi1kYXRhLWNoYW5nZT0iW1tfY3JlYXRlRGF0YUNoYW5nZUNhbGxiYWNrKGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgPjwvdGYtcHItY3VydmUtY2FyZD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQoKICAgICAgLyoqIERvIG5vdCBsZXQgdGhlIHN0ZXBzIHNlbGVjdG9yIG9jY2x1ZGUgdGhlIHJ1biBzZWxlY3Rvci4gKi8KICAgICAgI3N0ZXBzLXNlbGVjdG9yLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogNjAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtvLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrby5wcm90b3R5cGUsIl90aW1lRGlzcGxheVR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGtvLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa28ucHJvdG90eXBlLCJfdGFnVG9SdW5Ub0RhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGtvLnByb3RvdHlwZSwiX3J1blRvU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtvLnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrby5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxrby5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa28ucHJvdG90eXBlLCJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sa28ucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGtvLnByb3RvdHlwZSwiX3N0ZXAiLHZvaWQgMCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGtvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO0UoW1J0KCJfc2VsZWN0ZWRSdW5zIiwiX3J1blRvVGFnSW5mbyIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa28ucHJvdG90eXBlLCJfcmVsZXZhbnRTZWxlY3RlZFJ1bnMiLG51bGwpO0UoW1J0KCJfdGFnVG9SdW5Ub0RhdGEiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrby5wcm90b3R5cGUsIl9ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIixudWxsKTtrbz1FKFt5dCgidGYtcHItY3VydmUtZGFzaGJvYXJkIildLGtvKTt2YXIgRjY9RWUoT2UoKSwxKTt2YXIgdW89Y2xhc3MgZXh0ZW5kcyBHdChuYil7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl9zaG93RG93bmxvYWRMaW5rcz12cCgiX3Nob3dEb3dubG9hZExpbmtzIix7ZGVmYXVsdFZhbHVlOiExLHVzZUxvY2FsU3RvcmFnZTohMH0pLmNhbGwodGhpcyksdGhpcy5fc21vb3RoaW5nV2VpZ2h0PWdFKCJfc21vb3RoaW5nV2VpZ2h0Iix7ZGVmYXVsdFZhbHVlOi42fSkuY2FsbCh0aGlzKSx0aGlzLl9pZ25vcmVZT3V0bGllcnM9dnAoIl9pZ25vcmVZT3V0bGllcnMiLHtkZWZhdWx0VmFsdWU6ITAsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl94VHlwZT1FZC5TVEVQLHRoaXMuX3NlbGVjdGVkUnVucz1bXSx0aGlzLl90YWdGaWx0ZXI9IiIsdGhpcy5fY2F0ZWdvcmllcz1bXSx0aGlzLl9nZXRDYXRlZ29yeUl0ZW1LZXk9dD0+dC50YWcsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlKDUwKSx0aGlzLl9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyPXhwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSksdGhpcy5fc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXI9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KSx0aGlzLl9pZ25vcmVZT3V0bGllcnNPYnNlcnZlcj14cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXt2YXIgdD10aGlzLl9zbW9vdGhpbmdXZWlnaHQ7cmV0dXJuIHQ+MH1fZ2V0Q2F0ZWdvcnlLZXkodCl7cmV0dXJuIHQubWV0YWRhdGEudHlwZT09TmEuU0VBUkNIX1JFU1VMVFM/IiI6dC5uYW1lfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZENoYXJ0cygpfSl9X2ZldGNoVGFncygpe2xldCB0PXZlKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e2lmKEY2LmlzRXF1YWwocix0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtsZXQgbj1GNi5tYXBWYWx1ZXMocixvPT5PYmplY3Qua2V5cyhvKSksaT0kaShuKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsaS5sZW5ndGg9PT0wKSx0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsciksdGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX0pfV9yZWxvYWRDaGFydHMoKXt2YXIgdDsodD10aGlzLnJvb3QpPT1udWxsfHx0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXNjYWxhci1jYXJkIikuZm9yRWFjaChyPT57ci5yZWxvYWQoKX0pfV91cGRhdGVDYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpLG89bixhPUY2Lm1hcFZhbHVlcyh0LHM9Pk9iamVjdC5rZXlzKHMpKTtpPXVFKGEscixvKSxpLmZvckVhY2gocz0+e3MuaXRlbXM9cy5pdGVtcy5tYXAobD0+KHt0YWc6bC50YWcsc2VyaWVzOmwucnVucy5tYXAoYz0+KHtydW46Yyx0YWc6bC50YWd9KSl9KSl9KSx0aGlzLnVwZGF0ZUFycmF5UHJvcCgiX2NhdGVnb3JpZXMiLGksdGhpcy5fZ2V0Q2F0ZWdvcnlLZXkpfV90YWdNZXRhZGF0YSh0LHIsbil7bGV0IGk9dC5uYW1lLG89bi50YWcsYT17fTtuLnNlcmllcy5mb3JFYWNoKCh7cnVuOnV9KT0+e2FbdV09clt1XVtvXX0pO2xldCBzPW8ucmVwbGFjZSgvXC9zY2FsYXJfc3VtbWFyeSQvLCIiKSx7ZGVzY3JpcHRpb246bCxkaXNwbGF5TmFtZTpjfT1pUihhLHMpO3JldHVybiB0Lm1ldGFkYXRhLnR5cGU9PU5hLlBSRUZJWF9HUk9VUCYmYy5zdGFydHNXaXRoKGkrIi8iKSYmKGM9Yy5zbGljZShpLmxlbmd0aCsxKSkse2Rlc2NyaXB0aW9uOmwsZGlzcGxheU5hbWU6Y319fTt1by50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgICBpZD0ic2hvdy1kb3dubG9hZC1saW5rcyIKICAgICAgICAgICAgICAgIGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgICBpZD0iaWdub3JlLXktb3V0bGllciIKICAgICAgICAgICAgICAgIGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319IgogICAgICAgICAgICAgICAgPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgICAgPGRpdj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdAogICAgICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9IjAiCiAgICAgICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0CiAgICAgICAgICAgICAgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIKICAgICAgICAgICAgICBzdGVwPSIwLjAwMSIKICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgbWF4PSIwLjk5OSIKICAgICAgICAgICAgPjwvdGYtc21vb3RoaW5nLWlucHV0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9IngtdHlwZS1zZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIEF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+PCEtLQogICAgICAgICAgICAtLT48cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBzY2FsYXIgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHNjYWxhciBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgICAgZ2V0LWNhdGVnb3J5LWl0ZW0ta2V5PSJbW19nZXRDYXRlZ29yeUl0ZW1LZXldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZAogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIGRhdGEtdG8tbG9hZD0iW1tpdGVtLnNlcmllc11dIgogICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgIG11bHRpLWV4cGVyaW1lbnRzPSJbW19nZXRNdWx0aUV4cGVyaW1lbnRzKGRhdGFTZWxlY3Rpb24pXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9IltbX3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoY2F0ZWdvcnksIF9ydW5Ub1RhZ0luZm8sIGl0ZW0pXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW190b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgICAgICAgICAgICB4LXR5cGU9IltbX3hUeXBlXV0iCiAgICAgICAgICAgICAgICAgIGJhdGNoLXNpemU9IltbZmVhdHVyZUZsYWdzLnNjYWxhcnNCYXRjaFNpemVdXSIKICAgICAgICAgICAgICAgICAgaW4tY29sYWI9IltbZmVhdHVyZUZsYWdzLmluQ29sYWJdXSIKICAgICAgICAgICAgICAgID48L3RmLXNjYWxhci1jYXJkPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICN0b29sdGlwLXNvcnRpbmcgewogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAtc29ydGluZyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgd2lkdGg6IDEwNXB4OwogICAgICB9CgogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIC5jZW50ZXIgewogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHVvLnByb3RvdHlwZSwiZmVhdHVyZUZsYWdzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfc2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHVvLnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHVvLnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx1by5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sdW8ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHVvLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHVvLnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx1by5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLHVvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sdW8ucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9zbW9vdGhpbmdXZWlnaHQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sdW8ucHJvdG90eXBlLCJfc21vb3RoaW5nRW5hYmxlZCIsbnVsbCk7RShbQnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHVvLnByb3RvdHlwZSwiX3VwZGF0ZUNhdGVnb3JpZXMiLG51bGwpO3VvPUUoW3l0KCJ0Zi1zY2FsYXItZGFzaGJvYXJkIildLHVvKTt2YXIgaXBlPUVlKE9lKCksMSk7dmFyIGRoPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZXh0cz1bXSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFufWdldCBfcnVuQ29sb3IoKXt2YXIgdD10aGlzLnJ1bjtyZXR1cm4gZm4odCl9X2NoYW5nZVJ1bkNvbG9yKCl7dmFyIHQ9dGhpcy5fcnVuQ29sb3I7dGhpcy51cGRhdGVTdHlsZXMoeyItLXRiLXRleHQtbG9hZGVyLW91dGxpbmUiOnR9KX1hdHRhY2hlZCgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuaXNBdHRhY2hlZClyZXR1cm47dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO2xldCB0PXZlKCkscj1Dbih0LnBsdWdpblJvdXRlKCJ0ZXh0IiwiL3RleHQiKSx7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixtYXJrZG93bjp0aGlzLm1hcmtkb3duRW5hYmxlZD8idHJ1ZSI6ImZhbHNlIn0pLG49dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGk9PntpZihpLmNhbmNlbGxlZClyZXR1cm47bGV0IG89aS52YWx1ZS5tYXAoYT0+KHt3YWxsX3RpbWU6bmV3IERhdGUoYS53YWxsX3RpbWUqMWUzKSxzdGVwOmEuc3RlcCx0ZXh0OmEudGV4dH0pKTt0aGlzLnNldCgiX3RleHRzIixvLnNsaWNlKCkucmV2ZXJzZSgpKX0pO3RoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChyKS50aGVuKG4pfV9mb3JtYXRTdGVwKHQpe3JldHVybiB4bigiLCIpKHQpfX07ZGgudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgcnVuPSJbW3J1bl1dIiB0YWc9IltbdGFnXV0iIGNvbG9yPSJbW19ydW5Db2xvcl1dIj4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHBhcGVyLW1hdGVyaWFsCiAgICAgIGVsZXZhdGlvbj0iMSIKICAgICAgaWQ9InN0ZXBzLWNvbnRhaW5lciIKICAgICAgY2xhc3M9ImNvbnRhaW5lciBzY3JvbGxiYXIiCiAgICA+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3RleHRzXV0iPgogICAgICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJzdGVwLWNvbnRhaW5lciI+CiAgICAgICAgICBzdGVwIDxzcGFuIGNsYXNzPSJzdGVwLXZhbHVlIj5bW19mb3JtYXRTdGVwKGl0ZW0uc3RlcCldXTwvc3Bhbj4KICAgICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJ0ZXh0Ij4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbaXRlbS50ZXh0XV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9wYXBlci1tYXRlcmlhbD4KICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIC5zY3JvbGxiYXIgewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgICAgI3N0ZXBzLWNvbnRhaW5lciB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIC8qIGNvbG9yIGNvbXB1dGVkIGFuZCBzZXQgYXMgaW5saW5lIHN0eWxlICovOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1heC1oZWlnaHQ6IDUwMHB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi10ZXh0LWxvYWRlci1vdXRsaW5lKTsKICAgICAgfQogICAgICAudGV4dCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDNweCAzcHggM3B4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zdGVwLWNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXRiLXVpLWJvcmRlcik7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7IC8qIHRvIGNvcnJlY3QgZm9yIGJvcmRlciAqLwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgfQogICAgICAuc3RlcC1jb250YWluZXI6bm90KDpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRoLnByb3RvdHlwZSwicnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRoLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZGgucHJvdG90eXBlLCJtYXJrZG93bkVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGRoLnByb3RvdHlwZSwiX3RleHRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sZGgucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLGRoLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtSdCgicnVuIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZGgucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpO0UoW0J0KCJfcnVuQ29sb3IiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRoLnByb3RvdHlwZSwiX2NoYW5nZVJ1bkNvbG9yIixudWxsKTtkaD1FKFt5dCgidGYtdGV4dC1sb2FkZXIiKV0sZGgpO3ZhciBRYz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX21hcmtkb3duRW5hYmxlZD12cCgiX21hcmtkb3duRW5hYmxlZCIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZSx0aGlzLl9tYXJrZG93bkVuYWJsZWRTdG9yYWdlT2JzZXJ2ZXI9eHAoIl9tYXJrZG93bkVuYWJsZWQiLHtkZWZhdWx0VmFsdWU6ITAsdXNlTG9jYWxTdG9yYWdlOiEwfSl9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9tYXJrZG93bkVuYWJsZWRPYnNlcnZlcihfbWFya2Rvd25FbmFibGVkKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZFRleHRzKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1fZmV0Y2hUYWdzKCl7bGV0IHQ9dmUoKS5wbHVnaW5Sb3V0ZSgidGV4dCIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoaXBlLmlzRXF1YWwocix0aGlzLl9ydW5Ub1RhZykpcmV0dXJuO2xldCBuPSRpKHIpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixuLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWciLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkVGV4dHMoKXt2YXIgdDsodD10aGlzLnJvb3QpPT1udWxsfHx0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXRleHQtbG9hZGVyIikuZm9yRWFjaChyPT57ci5yZWxvYWQoKX0pfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO3JldHVybiBRbCh0LHIsbil9X21hcmtkb3duRW5hYmxlZE9ic2VydmVyKCl7dGhpcy5fcmVsb2FkVGV4dHMoKX19O1FjLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19tYXJrZG93bkVuYWJsZWR9fSIKICAgICAgICAgICAgICA+RW5hYmxlIE1hcmtkb3duPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gdGV4dCBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgdGV4dCBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtdGV4dC1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgcnVuPSJbW2l0ZW0ucnVuXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgbWFya2Rvd24tZW5hYmxlZD0iW1tfbWFya2Rvd25FbmFibGVkXV0iCiAgICAgICAgICAgICAgICA+PC90Zi10ZXh0LWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxRYy5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxvYnNlcnZlcjoiX21hcmtkb3duRW5hYmxlZFN0b3JhZ2VPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFjLnByb3RvdHlwZSwiX21hcmtkb3duRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sUWMucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFjLnByb3RvdHlwZSwiX3J1blRvVGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFFjLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFjLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRYy5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiLCJfY2F0ZWdvcmllc0RvbVJlYWR5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxRYy5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKTtRYz1FKFt5dCgidGYtdGV4dC1kYXNoYm9hcmQiKV0sUWMpO3ZhciBvcGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX2JhY2tlbmQ9a0J9fTtvcGU9RShbeXQoInRmLWJhY2tlbmQiKV0sb3BlKTt2YXIgYXBlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy5ydW5zQ29sb3JTY2FsZT1mbn19O2FwZT1FKFt5dCgidGYtY29sb3Itc2NhbGUiKV0sYXBlKTt2YXIgc3BlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9mZWF0dXJlX2ZsYWdzPXRXfX07c3BlPUUoW3l0KCJ0Zi1mZWF0dXJlLWZsYWdzIildLHNwZSk7dmFyIGxwZT1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZW1wbGF0ZT1udWxsLHRoaXMudGZfZ2xvYmFscz1SV319O2xwZT1FKFt5dCgidGYtZ2xvYmFscyIpXSxscGUpO3ZhciBVaHQ9e307S3MoVWh0LHtUZkRvbVJlcGVhdDooKT0+T2ksYWRkTGltaXRMaXN0ZW5lcjooKT0+cVcsZ2V0TGltaXQ6KCk9PldXLHJlbW92ZUxpbWl0TGlzdGVuZXI6KCk9PkdXLHNldExpbWl0OigpPT5yMmV9KTt2YXIgY3BlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9wYWdpbmF0ZWRfdmlldz1VaHR9fTtjcGU9RShbeXQoInRmLXBhZ2luYXRlZC12aWV3LXN0b3JlIildLGNwZSk7dmFyIHVwZT1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZW1wbGF0ZT1udWxsLHRoaXMudGZfc3RvcmFnZT1EQn19O3VwZT1FKFt5dCgidGYtc3RvcmFnZSIpXSx1cGUpO30pKCk7Ci8qIQogKiBpcy1wbGFpbi1vYmplY3QgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdD4KICoKICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEpvbiBTY2hsaW5rZXJ0LgogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuCiAqLwovKiEKICogaXNvYmplY3QgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzb2JqZWN0PgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZQp0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZQpMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQpLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVECldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsCk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuCgpTZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMKYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwovKioKICogQGZpbGVvdmVydmlldwogKiBAc3VwcHJlc3Mge2NoZWNrUHJvdG90eXBhbFR5cGVzfQogKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQKICogYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heQogKiBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5CiAqIEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAKICogcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZAogKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5CiAqIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkKICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUAogKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMTggVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogKiBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMTAtMjAyMiBUaHJlZS5qcyBBdXRob3JzCiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKICovCi8qKgogKiBAbGljZW5zZQogKiBMb2Rhc2ggPGh0dHBzOi8vbG9kYXNoLmNvbS8+CiAqIENvcHlyaWdodCBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL29wZW5qc2Yub3JnLz4KICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPgogKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPgogKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnMKICovCi8qKgogKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogKiBAbGljZW5zZSBNSVQKICoKICogQGZpbGVvdmVydmlldyBtYW51YWxseSBhZGQgZDMtc2VsZWN0aW9uLW11bHRpIHRvIGQzIGRlZmF1bHQgYnVuZGxlLiBNb3N0IG9mIHRoaXMgY29kZSBpcwogKiBjb3BpZWQgZnJvbSBkMy1zZWxlY3Rpb24tbXVsdGlAMS4wLjAuCiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtc2VsZWN0aW9uLW11bHRpL2lzc3Vlcy8xMSBmb3Igd2h5IHdlIGhhdmUgdG8gZG8gdGhpcwogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKiBAZmlsZW92ZXJ2aWV3IEltcGxlbWVudHMgYSBjb252ZW5pZW50IHRodW5rIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgY29tbW9uIGNhc2UKICogb2YgY3JlYXRpbmcgYSBtZW1vaXplZCBmdW5jdGlvbiB0aGF0IHRha2VzIGl0cyBpbnB1dHMgZnJvbSBtdXRhYmxlIGNsYXNzIHByb3BlcnRpZXMuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyBhIGZ1bmN0aW9uIG1lbW9pemVyIHVzaW5nIHRoZSBTaWduYXR1cmUgQVBJLgogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKiBAZmlsZW92ZXJ2aWV3IEltcGxlbWVudHMgdGhlIFNpZ25hdHVyZSBBUEkgdG8gaGVscCBpbiBjb21wYXJpbmcgd2hlbiB0d28KICogUGxvdHRhYmxlIG9iamVjdHMgaGF2ZSAiY2hhbmdlZCIuCiAqCiAqIE1lbW9pemF0aW9uIGluIFBsb3R0YWJsZSBpcyBjb21wbGljYXRlZCBieSBtdXRhYmxlIHNjYWxlcyBhbmQgZGF0YXNldHMuIFdlIGNhbm5vdCBzaW1wbHkKICogcmVmZXJlbmNlIGNvbXBhcmUgdHdvIGUuZy4gc2NhbGVzIHNpbmNlIGl0IG1heSBoYXZlIGludGVybmFsbHkgbXV0YXRlZC4gVG8gcmVzb2x2ZSB0aGlzLAogKiB3ZSB3cml0ZSBhIHJlY3Vyc2l2ZSBTaWduYXR1cmUgaW50ZXJmYWNlIHRoYXQgaG9sZHMgYW4gaW1tdXRhYmxlIHNuYXBzaG90IG9mIHdoYXRldmVyCiAqIHN0YXRlIHRoZSBzY2FsZS9kYXRhIHdhcyBpbiBhdCB0aGUgdGltZS4gVGhlbiBvbiBtZW1vaXplZCBmdW5jdGlvbiBpbnZvY2F0aW9uIHdlIHNpZ24gdGhlCiAqIG5ldyBpbnB1dHMgYW5kIGNvbXBhcmUgdGhlIHNpZ25hdHVyZXMgdG8gZGVjaWRlIGlmIHdlIHNob3VsZCByZWNvbXB1dGUuCiAqCiAqIFdlIG11c3QgaGFuZC13cml0ZSBhIHNpZ25hdHVyZSBmb3IgZWFjaCBjdXN0b20gY2xhc3Mgd2Ugd2lzaCB0byBzdXBwb3J0LgogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQpmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwpwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQpmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwpwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE5IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KCigoKT0+e3ZhciBKZ2U9T2JqZWN0LmNyZWF0ZSxMRT1PYmplY3QuZGVmaW5lUHJvcGVydHksJGdlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZTBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLHQwZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbjBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksaG89KG4sdCk9PigpPT4obiYmKHQ9bihuPTApKSx0KSxSZD0obix0KT0+KCk9Pih0fHxuKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpLEJFPShuLHQpPT57Zm9yKHZhciBlIGluIHQpTEUobixlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9LEk2PShuLHQsZSxpKT0+e2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKGxldCByIG9mIGUwZSh0KSkhbjBlLmNhbGwobixyKSYmciE9PWUmJkxFKG4scix7Z2V0OigpPT50W3JdLGVudW1lcmFibGU6IShpPSRnZSh0LHIpKXx8aS5lbnVtZXJhYmxlfSk7cmV0dXJuIG59LG9OPShuLHQsZSk9PihlPW51bGwhPW4/SmdlKHQwZShuKSk6e30sSTYoIXQmJm4mJm4uX19lc01vZHVsZT9lOkxFKGUsImRlZmF1bHQiLHt2YWx1ZTpuLGVudW1lcmFibGU6ITB9KSxuKSksdVc9UmQoKERydCxlMSk9Pnt2YXIgajYsRzYsVzYscTYsWTYsWDYsUTYsSzYsWjYsSkUseU4sSjYsJDYsZVcsbTAsdFcsblcsaVcsclcsb1csc1csYVcsbFcsY1csJEU7IWZ1bmN0aW9uKG4pe3ZhciB0PSJvYmplY3QiPT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZjoib2JqZWN0Ij09dHlwZW9mIHRoaXM/dGhpczp7fTtmdW5jdGlvbiBlKGkscil7cmV0dXJuIGkhPT10JiYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pOmkuX19lc01vZHVsZT0hMCksZnVuY3Rpb24obyxzKXtyZXR1cm4gaVtvXT1yP3IobyxzKTpzfX0iZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSgidHNsaWIiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGkpe24oZSh0LGUoaSkpKX0pOm4oIm9iamVjdCI9PXR5cGVvZiBlMSYmIm9iamVjdCI9PXR5cGVvZiBlMS5leHBvcnRzP2UodCxlKGUxLmV4cG9ydHMpKTplKHQpKX0oZnVuY3Rpb24obil7dmFyIHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGkscil7aS5fX3Byb3RvX189cn18fGZ1bmN0aW9uKGkscil7Zm9yKHZhciBvIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbykmJihpW29dPXJbb10pfTtqNj1mdW5jdGlvbihpLHIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiByJiZudWxsIT09cil0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHIpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG8oKXt0aGlzLmNvbnN0cnVjdG9yPWl9dChpLHIpLGkucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KG8ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBvKX0sRzY9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oaSl7Zm9yKHZhciByLG89MSxzPWFyZ3VtZW50cy5sZW5ndGg7bzxzO28rKylmb3IodmFyIGEgaW4gcj1hcmd1bWVudHNbb10pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsYSkmJihpW2FdPXJbYV0pO3JldHVybiBpfSxXNj1mdW5jdGlvbihpLHIpe3ZhciBvPXt9O2Zvcih2YXIgcyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHMpJiZyLmluZGV4T2Yocyk8MCYmKG9bc109aVtzXSk7aWYobnVsbCE9aSYmImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPTA7Zm9yKHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhpKTthPHMubGVuZ3RoO2ErKylyLmluZGV4T2Yoc1thXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGksc1thXSkmJihvW3NbYV1dPWlbc1thXV0pfXJldHVybiBvfSxxNj1mdW5jdGlvbihpLHIsbyxzKXt2YXIgYyxhPWFyZ3VtZW50cy5sZW5ndGgsbD1hPDM/cjpudWxsPT09cz9zPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixvKTpzO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpbD1SZWZsZWN0LmRlY29yYXRlKGkscixvLHMpO2Vsc2UgZm9yKHZhciB1PWkubGVuZ3RoLTE7dT49MDt1LS0pKGM9aVt1XSkmJihsPShhPDM/YyhsKTphPjM/YyhyLG8sbCk6YyhyLG8pKXx8bCk7cmV0dXJuIGE+MyYmbCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyxsKSxsfSxZNj1mdW5jdGlvbihpLHIpe3JldHVybiBmdW5jdGlvbihvLHMpe3IobyxzLGkpfX0sWDY9ZnVuY3Rpb24oaSxyKXtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGkscil9LFE2PWZ1bmN0aW9uKGkscixvLHMpe3JldHVybiBuZXcob3x8KG89UHJvbWlzZSkpKGZ1bmN0aW9uKGwsYyl7ZnVuY3Rpb24gdShoKXt0cnl7cChzLm5leHQoaCkpfWNhdGNoKGYpe2MoZil9fWZ1bmN0aW9uIGQoaCl7dHJ5e3Aocy50aHJvdyhoKSl9Y2F0Y2goZil7YyhmKX19ZnVuY3Rpb24gcChoKXtoLmRvbmU/bChoLnZhbHVlKTpmdW5jdGlvbihsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIG8/bDpuZXcgbyhmdW5jdGlvbihjKXtjKGwpfSl9KGgudmFsdWUpLnRoZW4odSxkKX1wKChzPXMuYXBwbHkoaSxyfHxbXSkpLm5leHQoKSl9KX0sSzY9ZnVuY3Rpb24oaSxyKXt2YXIgcyxhLGwsYyxvPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmxbMF0pdGhyb3cgbFsxXTtyZXR1cm4gbFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBjPXtuZXh0OnUoMCksdGhyb3c6dSgxKSxyZXR1cm46dSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGNbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksYztmdW5jdGlvbiB1KHApe3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4gZnVuY3Rpb24ocCl7aWYocyl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtjJiYoYz0wLHBbMF0mJihvPTApKSxvOyl0cnl7aWYocz0xLGEmJihsPTImcFswXT9hLnJldHVybjpwWzBdP2EudGhyb3d8fCgobD1hLnJldHVybikmJmwuY2FsbChhKSwwKTphLm5leHQpJiYhKGw9bC5jYWxsKGEscFsxXSkpLmRvbmUpcmV0dXJuIGw7c3dpdGNoKGE9MCxsJiYocD1bMiZwWzBdLGwudmFsdWVdKSxwWzBdKXtjYXNlIDA6Y2FzZSAxOmw9cDticmVhaztjYXNlIDQ6cmV0dXJuIG8ubGFiZWwrKyx7dmFsdWU6cFsxXSxkb25lOiExfTtjYXNlIDU6by5sYWJlbCsrLGE9cFsxXSxwPVswXTtjb250aW51ZTtjYXNlIDc6cD1vLm9wcy5wb3AoKSxvLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKGw9KGw9by50cnlzKS5sZW5ndGg+MCYmbFtsLmxlbmd0aC0xXSkmJig2PT09cFswXXx8Mj09PXBbMF0pKXtvPTA7Y29udGludWV9aWYoMz09PXBbMF0mJighbHx8cFsxXT5sWzBdJiZwWzFdPGxbM10pKXtvLmxhYmVsPXBbMV07YnJlYWt9aWYoNj09PXBbMF0mJm8ubGFiZWw8bFsxXSl7by5sYWJlbD1sWzFdLGw9cDticmVha31pZihsJiZvLmxhYmVsPGxbMl0pe28ubGFiZWw9bFsyXSxvLm9wcy5wdXNoKHApO2JyZWFrfWxbMl0mJm8ub3BzLnBvcCgpLG8udHJ5cy5wb3AoKTtjb250aW51ZX1wPXIuY2FsbChpLG8pfWNhdGNoKGgpe3A9WzYsaF0sYT0wfWZpbmFsbHl7cz1sPTB9aWYoNSZwWzBdKXRocm93IHBbMV07cmV0dXJue3ZhbHVlOnBbMF0/cFsxXTp2b2lkIDAsZG9uZTohMH19KFtwLGhdKX19fSxaNj1mdW5jdGlvbihpLHIpe2Zvcih2YXIgbyBpbiBpKSJkZWZhdWx0IiE9PW8mJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixvKSYmJEUocixpLG8pfSwkRT1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGkscixvLHMpe3ZvaWQgMD09PXMmJihzPW8pO3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixvKTsoIWF8fCgiZ2V0ImluIGE/IXIuX19lc01vZHVsZTphLndyaXRhYmxlfHxhLmNvbmZpZ3VyYWJsZSkpJiYoYT17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcltvXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxzLGEpfTpmdW5jdGlvbihpLHIsbyxzKXt2b2lkIDA9PT1zJiYocz1vKSxpW3NdPXJbb119LEpFPWZ1bmN0aW9uKGkpe3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixvPXImJmlbcl0scz0wO2lmKG8pcmV0dXJuIG8uY2FsbChpKTtpZihpJiYibnVtYmVyIj09dHlwZW9mIGkubGVuZ3RoKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGkmJnM+PWkubGVuZ3RoJiYoaT12b2lkIDApLHt2YWx1ZTppJiZpW3MrK10sZG9uZTohaX19fTt0aHJvdyBuZXcgVHlwZUVycm9yKHI/Ik9iamVjdCBpcyBub3QgaXRlcmFibGUuIjoiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpfSx5Tj1mdW5jdGlvbihpLHIpe3ZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmlbU3ltYm9sLml0ZXJhdG9yXTtpZighbylyZXR1cm4gaTt2YXIgYSxjLHM9by5jYWxsKGkpLGw9W107dHJ5e2Zvcig7KHZvaWQgMD09PXJ8fHItLSA+MCkmJiEoYT1zLm5leHQoKSkuZG9uZTspbC5wdXNoKGEudmFsdWUpfWNhdGNoKHUpe2M9e2Vycm9yOnV9fWZpbmFsbHl7dHJ5e2EmJiFhLmRvbmUmJihvPXMucmV0dXJuKSYmby5jYWxsKHMpfWZpbmFsbHl7aWYoYyl0aHJvdyBjLmVycm9yfX1yZXR1cm4gbH0sSjY9ZnVuY3Rpb24oKXtmb3IodmFyIGk9W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspaT1pLmNvbmNhdCh5Tihhcmd1bWVudHNbcl0pKTtyZXR1cm4gaX0sJDY9ZnVuY3Rpb24oKXtmb3IodmFyIGk9MCxyPTAsbz1hcmd1bWVudHMubGVuZ3RoO3I8bztyKyspaSs9YXJndW1lbnRzW3JdLmxlbmd0aDt2YXIgcz1BcnJheShpKSxhPTA7Zm9yKHI9MDtyPG87cisrKWZvcih2YXIgbD1hcmd1bWVudHNbcl0sYz0wLHU9bC5sZW5ndGg7Yzx1O2MrKyxhKyspc1thXT1sW2NdO3JldHVybiBzfSxlVz1mdW5jdGlvbihpLHIsbyl7aWYob3x8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBsLHM9MCxhPXIubGVuZ3RoO3M8YTtzKyspKGx8fCEocyBpbiByKSkmJihsfHwobD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLDAscykpLGxbc109cltzXSk7cmV0dXJuIGkuY29uY2F0KGx8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIpKX0sbTA9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBtMD8odGhpcy52PWksdGhpcyk6bmV3IG0wKGkpfSx0Vz1mdW5jdGlvbihpLHIsbyl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBhLHM9by5hcHBseShpLHJ8fFtdKSxsPVtdO3JldHVybiBhPXt9LGMoIm5leHQiKSxjKCJ0aHJvdyIpLGMoInJldHVybiIpLGFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGE7ZnVuY3Rpb24gYyhtKXtzW21dJiYoYVttXT1mdW5jdGlvbih4KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZyxiKXtsLnB1c2goW20seCxnLGJdKT4xfHx1KG0seCl9KX0pfWZ1bmN0aW9uIHUobSx4KXt0cnl7IWZ1bmN0aW9uKG0pe20udmFsdWUgaW5zdGFuY2VvZiBtMD9Qcm9taXNlLnJlc29sdmUobS52YWx1ZS52KS50aGVuKHAsaCk6ZihsWzBdWzJdLG0pfShzW21dKHgpKX1jYXRjaChnKXtmKGxbMF1bM10sZyl9fWZ1bmN0aW9uIHAobSl7dSgibmV4dCIsbSl9ZnVuY3Rpb24gaChtKXt1KCJ0aHJvdyIsbSl9ZnVuY3Rpb24gZihtLHgpe20oeCksbC5zaGlmdCgpLGwubGVuZ3RoJiZ1KGxbMF1bMF0sbFswXVsxXSl9fSxuVz1mdW5jdGlvbihpKXt2YXIgcixvO3JldHVybiByPXt9LHMoIm5leHQiKSxzKCJ0aHJvdyIsZnVuY3Rpb24oYSl7dGhyb3cgYX0pLHMoInJldHVybiIpLHJbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxyO2Z1bmN0aW9uIHMoYSxsKXtyW2FdPWlbYV0/ZnVuY3Rpb24oYyl7cmV0dXJuKG89IW8pP3t2YWx1ZTptMChpW2FdKGMpKSxkb25lOiJyZXR1cm4iPT09YX06bD9sKGMpOmN9Omx9fSxpVz1mdW5jdGlvbihpKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIG8scj1pW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gcj9yLmNhbGwoaSk6KGk9SkUoaSksbz17fSxzKCJuZXh0IikscygidGhyb3ciKSxzKCJyZXR1cm4iKSxvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvKTtmdW5jdGlvbiBzKGwpe29bbF09aVtsXSYmZnVuY3Rpb24oYyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHUsZCl7IWZ1bmN0aW9uKGwsYyx1LGQpe1Byb21pc2UucmVzb2x2ZShkKS50aGVuKGZ1bmN0aW9uKHApe2woe3ZhbHVlOnAsZG9uZTp1fSl9LGMpfSh1LGQsKGM9aVtsXShjKSkuZG9uZSxjLnZhbHVlKX0pfX19LHJXPWZ1bmN0aW9uKGkscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoaSwicmF3Iix7dmFsdWU6cn0pOmkucmF3PXIsaX07dmFyIGU9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihpLHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpyfSl9OmZ1bmN0aW9uKGkscil7aS5kZWZhdWx0PXJ9O29XPWZ1bmN0aW9uKGkpe2lmKGkmJmkuX19lc01vZHVsZSlyZXR1cm4gaTt2YXIgcj17fTtpZihudWxsIT1pKWZvcih2YXIgbyBpbiBpKSJkZWZhdWx0IiE9PW8mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG8pJiYkRShyLGksbyk7cmV0dXJuIGUocixpKSxyfSxzVz1mdW5jdGlvbihpKXtyZXR1cm4gaSYmaS5fX2VzTW9kdWxlP2k6e2RlZmF1bHQ6aX19LGFXPWZ1bmN0aW9uKGkscixvLHMpe2lmKCJhIj09PW8mJiFzKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByP2khPT1yfHwhczohci5oYXMoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIm0iPT09bz9zOiJhIj09PW8/cy5jYWxsKGkpOnM/cy52YWx1ZTpyLmdldChpKX0sbFc9ZnVuY3Rpb24oaSxyLG8scyxhKXtpZigibSI9PT1zKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpO2lmKCJhIj09PXMmJiFhKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlciIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByP2khPT1yfHwhYTohci5oYXMoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTtyZXR1cm4iYSI9PT1zP2EuY2FsbChpLG8pOmE/YS52YWx1ZT1vOnIuc2V0KGksbyksb30sY1c9ZnVuY3Rpb24oaSxyKXtpZihudWxsPT09cnx8Im9iamVjdCIhPXR5cGVvZiByJiYiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdCIpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpP3I9PT1pOmkuaGFzKHIpfSxuKCJfX2V4dGVuZHMiLGo2KSxuKCJfX2Fzc2lnbiIsRzYpLG4oIl9fcmVzdCIsVzYpLG4oIl9fZGVjb3JhdGUiLHE2KSxuKCJfX3BhcmFtIixZNiksbigiX19tZXRhZGF0YSIsWDYpLG4oIl9fYXdhaXRlciIsUTYpLG4oIl9fZ2VuZXJhdG9yIixLNiksbigiX19leHBvcnRTdGFyIixaNiksbigiX19jcmVhdGVCaW5kaW5nIiwkRSksbigiX192YWx1ZXMiLEpFKSxuKCJfX3JlYWQiLHlOKSxuKCJfX3NwcmVhZCIsSjYpLG4oIl9fc3ByZWFkQXJyYXlzIiwkNiksbigiX19zcHJlYWRBcnJheSIsZVcpLG4oIl9fYXdhaXQiLG0wKSxuKCJfX2FzeW5jR2VuZXJhdG9yIix0VyksbigiX19hc3luY0RlbGVnYXRvciIsblcpLG4oIl9fYXN5bmNWYWx1ZXMiLGlXKSxuKCJfX21ha2VUZW1wbGF0ZU9iamVjdCIsclcpLG4oIl9faW1wb3J0U3RhciIsb1cpLG4oIl9faW1wb3J0RGVmYXVsdCIsc1cpLG4oIl9fY2xhc3NQcml2YXRlRmllbGRHZXQiLGFXKSxuKCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IixsVyksbigiX19jbGFzc1ByaXZhdGVGaWVsZEluIixjVyl9KX0pLG1aPVJkKGI1PT57InVzZSBzdHJpY3QiO3ZhciBuLHVoPWI1JiZiNS5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihuLHQsZSl7aWYoZXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBvLGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspKG98fCEoaSBpbiB0KSkmJihvfHwobz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LDAsaSkpLG9baV09dFtpXSk7cmV0dXJuIG4uY29uY2F0KG98fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKX07bj1mdW5jdGlvbigpeyFmdW5jdGlvbihRKXt2YXIgcmU9US5wZXJmb3JtYW5jZTtmdW5jdGlvbiBfZShTdCl7cmUmJnJlLm1hcmsmJnJlLm1hcmsoU3QpfWZ1bmN0aW9uIEkoU3Qsd2Upe3JlJiZyZS5tZWFzdXJlJiZyZS5tZWFzdXJlKFN0LHdlKX1fZSgiWm9uZSIpO3ZhciBYPVEuX19ab25lX3N5bWJvbF9wcmVmaXh8fCJfX3pvbmVfc3ltYm9sX18iO2Z1bmN0aW9uICQoU3Qpe3JldHVybiBYK1N0fXZhciBuZT0hMD09PVFbJCgiZm9yY2VEdXBsaWNhdGVab25lQ2hlY2siKV07aWYoUS5ab25lKXtpZihuZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFEuWm9uZS5fX3N5bWJvbF9fKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTtyZXR1cm4gUS5ab25lfXZhciBtZT1mdW5jdGlvbigpe2Z1bmN0aW9uIFN0KHdlLEVlKXt0aGlzLl9wYXJlbnQ9d2UsdGhpcy5fbmFtZT1FZT9FZS5uYW1lfHwidW5uYW1lZCI6Ijxyb290PiIsdGhpcy5fcHJvcGVydGllcz1FZSYmRWUucHJvcGVydGllc3x8e30sdGhpcy5fem9uZURlbGVnYXRlPW5ldyBsdCh0aGlzLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll96b25lRGVsZWdhdGUsRWUpfXJldHVybiBTdC5hc3NlcnRab25lUGF0Y2hlZD1mdW5jdGlvbigpe2lmKFEuUHJvbWlzZSE9PWpuLlpvbmVBd2FyZVByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJab25lLmpzIGhhcyBkZXRlY3RlZCB0aGF0IFpvbmVBd2FyZVByb21pc2UgYCh3aW5kb3d8Z2xvYmFsKS5Qcm9taXNlYCBoYXMgYmVlbiBvdmVyd3JpdHRlbi5cbk1vc3QgbGlrZWx5IGNhdXNlIGlzIHRoYXQgYSBQcm9taXNlIHBvbHlmaWxsIGhhcyBiZWVuIGxvYWRlZCBhZnRlciBab25lLmpzIChQb2x5ZmlsbGluZyBQcm9taXNlIGFwaSBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gem9uZS5qcyBpcyBsb2FkZWQuIElmIHlvdSBtdXN0IGxvYWQgb25lLCBkbyBzbyBiZWZvcmUgbG9hZGluZyB6b25lLmpzLikiKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0LCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB3ZT1TdC5jdXJyZW50O3dlLnBhcmVudDspd2U9d2UucGFyZW50O3JldHVybiB3ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsImN1cnJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYnIuem9uZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsImN1cnJlbnRUYXNrIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHhhfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFN0Ll9fbG9hZF9wYXRjaD1mdW5jdGlvbih3ZSxFZSxWZSl7aWYodm9pZCAwPT09VmUmJihWZT0hMSksam4uaGFzT3duUHJvcGVydHkod2UpKXtpZighVmUmJm5lKXRocm93IEVycm9yKCJBbHJlYWR5IGxvYWRlZCBwYXRjaDogIit3ZSl9ZWxzZSBpZighUVsiX19ab25lX2Rpc2FibGVfIit3ZV0pe3ZhciBrbj0iWm9uZToiK3dlO19lKGtuKSxqblt3ZV09RWUoUSxTdCxEciksSShrbixrbil9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QucHJvdG90eXBlLCJwYXJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdC5wcm90b3R5cGUsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmFtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxTdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHdlKXt2YXIgRWU9dGhpcy5nZXRab25lV2l0aCh3ZSk7aWYoRWUpcmV0dXJuIEVlLl9wcm9wZXJ0aWVzW3dlXX0sU3QucHJvdG90eXBlLmdldFpvbmVXaXRoPWZ1bmN0aW9uKHdlKXtmb3IodmFyIEVlPXRoaXM7RWU7KXtpZihFZS5fcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSh3ZSkpcmV0dXJuIEVlO0VlPUVlLl9wYXJlbnR9cmV0dXJuIG51bGx9LFN0LnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKHdlKXtpZighd2UpdGhyb3cgbmV3IEVycm9yKCJab25lU3BlYyByZXF1aXJlZCEiKTtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmZvcmsodGhpcyx3ZSl9LFN0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHdlLEVlKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygd2UpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAiK3dlKTt2YXIgVmU9dGhpcy5fem9uZURlbGVnYXRlLmludGVyY2VwdCh0aGlzLHdlLEVlKSxrbj10aGlzO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBrbi5ydW5HdWFyZGVkKFZlLHRoaXMsYXJndW1lbnRzLEVlKX19LFN0LnByb3RvdHlwZS5ydW49ZnVuY3Rpb24od2UsRWUsVmUsa24pe2JyPXtwYXJlbnQ6YnIsem9uZTp0aGlzfTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyx3ZSxFZSxWZSxrbil9ZmluYWxseXticj1ici5wYXJlbnR9fSxTdC5wcm90b3R5cGUucnVuR3VhcmRlZD1mdW5jdGlvbih3ZSxFZSxWZSxrbil7dm9pZCAwPT09RWUmJihFZT1udWxsKSxicj17cGFyZW50OmJyLHpvbmU6dGhpc307dHJ5e3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLHdlLEVlLFZlLGtuKX1jYXRjaChJcil7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsSXIpKXRocm93IElyfX1maW5hbGx5e2JyPWJyLnBhcmVudH19LFN0LnByb3RvdHlwZS5ydW5UYXNrPWZ1bmN0aW9uKHdlLEVlLFZlKXtpZih3ZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIHJ1biBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyh3ZS56b25lfHxPdCkubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7aWYod2Uuc3RhdGUhPT13aXx8d2UudHlwZSE9PVNpJiZ3ZS50eXBlIT09VW4pe3ZhciBrbj13ZS5zdGF0ZSE9JG47a24mJndlLl90cmFuc2l0aW9uVG8oJG4sWW4pLHdlLnJ1bkNvdW50Kys7dmFyIElyPXhhO3hhPXdlLGJyPXtwYXJlbnQ6YnIsem9uZTp0aGlzfTt0cnl7d2UudHlwZT09VW4mJndlLmRhdGEmJiF3ZS5kYXRhLmlzUGVyaW9kaWMmJih3ZS5jYW5jZWxGbj12b2lkIDApO3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZVRhc2sodGhpcyx3ZSxFZSxWZSl9Y2F0Y2goeGMpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHhjKSl0aHJvdyB4Y319ZmluYWxseXt3ZS5zdGF0ZSE9PXdpJiZ3ZS5zdGF0ZSE9PVlpJiYod2UudHlwZT09U2l8fHdlLmRhdGEmJndlLmRhdGEuaXNQZXJpb2RpYz9rbiYmd2UuX3RyYW5zaXRpb25UbyhZbiwkbik6KHdlLnJ1bkNvdW50PTAsdGhpcy5fdXBkYXRlVGFza0NvdW50KHdlLC0xKSxrbiYmd2UuX3RyYW5zaXRpb25Ubyh3aSwkbix3aSkpKSxicj1ici5wYXJlbnQseGE9SXJ9fX0sU3QucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbih3ZSl7aWYod2Uuem9uZSYmd2Uuem9uZSE9PXRoaXMpZm9yKHZhciBFZT10aGlzO0VlOyl7aWYoRWU9PT13ZS56b25lKXRocm93IEVycm9yKCJjYW4gbm90IHJlc2NoZWR1bGUgdGFzayB0byAiLmNvbmNhdCh0aGlzLm5hbWUsIiB3aGljaCBpcyBkZXNjZW5kYW50cyBvZiB0aGUgb3JpZ2luYWwgem9uZSAiKS5jb25jYXQod2Uuem9uZS5uYW1lKSk7RWU9RWUucGFyZW50fXdlLl90cmFuc2l0aW9uVG8oYWksd2kpO3ZhciBWZT1bXTt3ZS5fem9uZURlbGVnYXRlcz1WZSx3ZS5fem9uZT10aGlzO3RyeXt3ZT10aGlzLl96b25lRGVsZWdhdGUuc2NoZWR1bGVUYXNrKHRoaXMsd2UpfWNhdGNoKGtuKXt0aHJvdyB3ZS5fdHJhbnNpdGlvblRvKFlpLGFpLHdpKSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxrbiksa259cmV0dXJuIHdlLl96b25lRGVsZWdhdGVzPT09VmUmJnRoaXMuX3VwZGF0ZVRhc2tDb3VudCh3ZSwxKSx3ZS5zdGF0ZT09YWkmJndlLl90cmFuc2l0aW9uVG8oWW4sYWkpLHdlfSxTdC5wcm90b3R5cGUuc2NoZWR1bGVNaWNyb1Rhc2s9ZnVuY3Rpb24od2UsRWUsVmUsa24pe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgSmUoQW4sd2UsRWUsVmUsa24sdm9pZCAwKSl9LFN0LnByb3RvdHlwZS5zY2hlZHVsZU1hY3JvVGFzaz1mdW5jdGlvbih3ZSxFZSxWZSxrbixJcil7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBKZShVbix3ZSxFZSxWZSxrbixJcikpfSxTdC5wcm90b3R5cGUuc2NoZWR1bGVFdmVudFRhc2s9ZnVuY3Rpb24od2UsRWUsVmUsa24sSXIpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgSmUoU2ksd2UsRWUsVmUsa24sSXIpKX0sU3QucHJvdG90eXBlLmNhbmNlbFRhc2s9ZnVuY3Rpb24od2Upe2lmKHdlLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgY2FuY2VsbGVkIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKHdlLnpvbmV8fE90KS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtpZih3ZS5zdGF0ZT09PVlufHx3ZS5zdGF0ZT09PSRuKXt3ZS5fdHJhbnNpdGlvblRvKFl0LFluLCRuKTt0cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyx3ZSl9Y2F0Y2goRWUpe3Rocm93IHdlLl90cmFuc2l0aW9uVG8oWWksWXQpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLEVlKSxFZX1yZXR1cm4gdGhpcy5fdXBkYXRlVGFza0NvdW50KHdlLC0xKSx3ZS5fdHJhbnNpdGlvblRvKHdpLFl0KSx3ZS5ydW5Db3VudD0wLHdlfX0sU3QucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24od2UsRWUpe3ZhciBWZT13ZS5fem9uZURlbGVnYXRlczstMT09RWUmJih3ZS5fem9uZURlbGVnYXRlcz1udWxsKTtmb3IodmFyIGtuPTA7a248VmUubGVuZ3RoO2tuKyspVmVba25dLl91cGRhdGVUYXNrQ291bnQod2UudHlwZSxFZSl9LFN0fSgpO21lLl9fc3ltYm9sX189JDt2YXIgcnIsS2U9e25hbWU6IiIsb25IYXNUYXNrOmZ1bmN0aW9uKFN0LHdlLEVlLFZlKXtyZXR1cm4gU3QuaGFzVGFzayhFZSxWZSl9LG9uU2NoZWR1bGVUYXNrOmZ1bmN0aW9uKFN0LHdlLEVlLFZlKXtyZXR1cm4gU3Quc2NoZWR1bGVUYXNrKEVlLFZlKX0sb25JbnZva2VUYXNrOmZ1bmN0aW9uKFN0LHdlLEVlLFZlLGtuLElyKXtyZXR1cm4gU3QuaW52b2tlVGFzayhFZSxWZSxrbixJcil9LG9uQ2FuY2VsVGFzazpmdW5jdGlvbihTdCx3ZSxFZSxWZSl7cmV0dXJuIFN0LmNhbmNlbFRhc2soRWUsVmUpfX0sbHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTdCh3ZSxFZSxWZSl7dGhpcy5fdGFza0NvdW50cz17bWljcm9UYXNrOjAsbWFjcm9UYXNrOjAsZXZlbnRUYXNrOjB9LHRoaXMuem9uZT13ZSx0aGlzLl9wYXJlbnREZWxlZ2F0ZT1FZSx0aGlzLl9mb3JrWlM9VmUmJihWZSYmVmUub25Gb3JrP1ZlOkVlLl9mb3JrWlMpLHRoaXMuX2ZvcmtEbGd0PVZlJiYoVmUub25Gb3JrP0VlOkVlLl9mb3JrRGxndCksdGhpcy5fZm9ya0N1cnJab25lPVZlJiYoVmUub25Gb3JrP3RoaXMuem9uZTpFZS5fZm9ya0N1cnJab25lKSx0aGlzLl9pbnRlcmNlcHRaUz1WZSYmKFZlLm9uSW50ZXJjZXB0P1ZlOkVlLl9pbnRlcmNlcHRaUyksdGhpcy5faW50ZXJjZXB0RGxndD1WZSYmKFZlLm9uSW50ZXJjZXB0P0VlOkVlLl9pbnRlcmNlcHREbGd0KSx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZT1WZSYmKFZlLm9uSW50ZXJjZXB0P3RoaXMuem9uZTpFZS5faW50ZXJjZXB0Q3VyclpvbmUpLHRoaXMuX2ludm9rZVpTPVZlJiYoVmUub25JbnZva2U/VmU6RWUuX2ludm9rZVpTKSx0aGlzLl9pbnZva2VEbGd0PVZlJiYoVmUub25JbnZva2U/RWU6RWUuX2ludm9rZURsZ3QpLHRoaXMuX2ludm9rZUN1cnJab25lPVZlJiYoVmUub25JbnZva2U/dGhpcy56b25lOkVlLl9pbnZva2VDdXJyWm9uZSksdGhpcy5faGFuZGxlRXJyb3JaUz1WZSYmKFZlLm9uSGFuZGxlRXJyb3I/VmU6RWUuX2hhbmRsZUVycm9yWlMpLHRoaXMuX2hhbmRsZUVycm9yRGxndD1WZSYmKFZlLm9uSGFuZGxlRXJyb3I/RWU6RWUuX2hhbmRsZUVycm9yRGxndCksdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZT1WZSYmKFZlLm9uSGFuZGxlRXJyb3I/dGhpcy56b25lOkVlLl9oYW5kbGVFcnJvckN1cnJab25lKSx0aGlzLl9zY2hlZHVsZVRhc2taUz1WZSYmKFZlLm9uU2NoZWR1bGVUYXNrP1ZlOkVlLl9zY2hlZHVsZVRhc2taUyksdGhpcy5fc2NoZWR1bGVUYXNrRGxndD1WZSYmKFZlLm9uU2NoZWR1bGVUYXNrP0VlOkVlLl9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT1WZSYmKFZlLm9uU2NoZWR1bGVUYXNrP3RoaXMuem9uZTpFZS5fc2NoZWR1bGVUYXNrQ3VyclpvbmUpLHRoaXMuX2ludm9rZVRhc2taUz1WZSYmKFZlLm9uSW52b2tlVGFzaz9WZTpFZS5faW52b2tlVGFza1pTKSx0aGlzLl9pbnZva2VUYXNrRGxndD1WZSYmKFZlLm9uSW52b2tlVGFzaz9FZTpFZS5faW52b2tlVGFza0RsZ3QpLHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZT1WZSYmKFZlLm9uSW52b2tlVGFzaz90aGlzLnpvbmU6RWUuX2ludm9rZVRhc2tDdXJyWm9uZSksdGhpcy5fY2FuY2VsVGFza1pTPVZlJiYoVmUub25DYW5jZWxUYXNrP1ZlOkVlLl9jYW5jZWxUYXNrWlMpLHRoaXMuX2NhbmNlbFRhc2tEbGd0PVZlJiYoVmUub25DYW5jZWxUYXNrP0VlOkVlLl9jYW5jZWxUYXNrRGxndCksdGhpcy5fY2FuY2VsVGFza0N1cnJab25lPVZlJiYoVmUub25DYW5jZWxUYXNrP3RoaXMuem9uZTpFZS5fY2FuY2VsVGFza0N1cnJab25lKSx0aGlzLl9oYXNUYXNrWlM9bnVsbCx0aGlzLl9oYXNUYXNrRGxndD1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9bnVsbCx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9bnVsbDt2YXIga249VmUmJlZlLm9uSGFzVGFzazsoa258fEVlJiZFZS5faGFzVGFza1pTKSYmKHRoaXMuX2hhc1Rhc2taUz1rbj9WZTpLZSx0aGlzLl9oYXNUYXNrRGxndD1FZSx0aGlzLl9oYXNUYXNrRGxndE93bmVyPXRoaXMsdGhpcy5faGFzVGFza0N1cnJab25lPXdlLFZlLm9uU2NoZWR1bGVUYXNrfHwodGhpcy5fc2NoZWR1bGVUYXNrWlM9S2UsdGhpcy5fc2NoZWR1bGVUYXNrRGxndD1FZSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT10aGlzLnpvbmUpLFZlLm9uSW52b2tlVGFza3x8KHRoaXMuX2ludm9rZVRhc2taUz1LZSx0aGlzLl9pbnZva2VUYXNrRGxndD1FZSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxWZS5vbkNhbmNlbFRhc2t8fCh0aGlzLl9jYW5jZWxUYXNrWlM9S2UsdGhpcy5fY2FuY2VsVGFza0RsZ3Q9RWUsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lPXRoaXMuem9uZSkpfXJldHVybiBTdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbih3ZSxFZSl7cmV0dXJuIHRoaXMuX2ZvcmtaUz90aGlzLl9mb3JrWlMub25Gb3JrKHRoaXMuX2ZvcmtEbGd0LHRoaXMuem9uZSx3ZSxFZSk6bmV3IG1lKHdlLEVlKX0sU3QucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbih3ZSxFZSxWZSl7cmV0dXJuIHRoaXMuX2ludGVyY2VwdFpTP3RoaXMuX2ludGVyY2VwdFpTLm9uSW50ZXJjZXB0KHRoaXMuX2ludGVyY2VwdERsZ3QsdGhpcy5faW50ZXJjZXB0Q3VyclpvbmUsd2UsRWUsVmUpOkVlfSxTdC5wcm90b3R5cGUuaW52b2tlPWZ1bmN0aW9uKHdlLEVlLFZlLGtuLElyKXtyZXR1cm4gdGhpcy5faW52b2tlWlM/dGhpcy5faW52b2tlWlMub25JbnZva2UodGhpcy5faW52b2tlRGxndCx0aGlzLl9pbnZva2VDdXJyWm9uZSx3ZSxFZSxWZSxrbixJcik6RWUuYXBwbHkoVmUsa24pfSxTdC5wcm90b3R5cGUuaGFuZGxlRXJyb3I9ZnVuY3Rpb24od2UsRWUpe3JldHVybiF0aGlzLl9oYW5kbGVFcnJvclpTfHx0aGlzLl9oYW5kbGVFcnJvclpTLm9uSGFuZGxlRXJyb3IodGhpcy5faGFuZGxlRXJyb3JEbGd0LHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmUsd2UsRWUpfSxTdC5wcm90b3R5cGUuc2NoZWR1bGVUYXNrPWZ1bmN0aW9uKHdlLEVlKXt2YXIgVmU9RWU7aWYodGhpcy5fc2NoZWR1bGVUYXNrWlMpdGhpcy5faGFzVGFza1pTJiZWZS5fem9uZURlbGVnYXRlcy5wdXNoKHRoaXMuX2hhc1Rhc2tEbGd0T3duZXIpLChWZT10aGlzLl9zY2hlZHVsZVRhc2taUy5vblNjaGVkdWxlVGFzayh0aGlzLl9zY2hlZHVsZVRhc2tEbGd0LHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lLHdlLEVlKSl8fChWZT1FZSk7ZWxzZSBpZihFZS5zY2hlZHVsZUZuKUVlLnNjaGVkdWxlRm4oRWUpO2Vsc2V7aWYoRWUudHlwZSE9QW4pdGhyb3cgbmV3IEVycm9yKCJUYXNrIGlzIG1pc3Npbmcgc2NoZWR1bGVGbi4iKTtNbihFZSl9cmV0dXJuIFZlfSxTdC5wcm90b3R5cGUuaW52b2tlVGFzaz1mdW5jdGlvbih3ZSxFZSxWZSxrbil7cmV0dXJuIHRoaXMuX2ludm9rZVRhc2taUz90aGlzLl9pbnZva2VUYXNrWlMub25JbnZva2VUYXNrKHRoaXMuX2ludm9rZVRhc2tEbGd0LHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZSx3ZSxFZSxWZSxrbik6RWUuY2FsbGJhY2suYXBwbHkoVmUsa24pfSxTdC5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbih3ZSxFZSl7dmFyIFZlO2lmKHRoaXMuX2NhbmNlbFRhc2taUylWZT10aGlzLl9jYW5jZWxUYXNrWlMub25DYW5jZWxUYXNrKHRoaXMuX2NhbmNlbFRhc2tEbGd0LHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZSx3ZSxFZSk7ZWxzZXtpZighRWUuY2FuY2VsRm4pdGhyb3cgRXJyb3IoIlRhc2sgaXMgbm90IGNhbmNlbGFibGUiKTtWZT1FZS5jYW5jZWxGbihFZSl9cmV0dXJuIFZlfSxTdC5wcm90b3R5cGUuaGFzVGFzaz1mdW5jdGlvbih3ZSxFZSl7dHJ5e3RoaXMuX2hhc1Rhc2taUyYmdGhpcy5faGFzVGFza1pTLm9uSGFzVGFzayh0aGlzLl9oYXNUYXNrRGxndCx0aGlzLl9oYXNUYXNrQ3VyclpvbmUsd2UsRWUpfWNhdGNoKFZlKXt0aGlzLmhhbmRsZUVycm9yKHdlLFZlKX19LFN0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKHdlLEVlKXt2YXIgVmU9dGhpcy5fdGFza0NvdW50cyxrbj1WZVt3ZV0sSXI9VmVbd2VdPWtuK0VlO2lmKElyPDApdGhyb3cgbmV3IEVycm9yKCJNb3JlIHRhc2tzIGV4ZWN1dGVkIHRoZW4gd2VyZSBzY2hlZHVsZWQuIik7MCE9a24mJjAhPUlyfHx0aGlzLmhhc1Rhc2sodGhpcy56b25lLHttaWNyb1Rhc2s6VmUubWljcm9UYXNrPjAsbWFjcm9UYXNrOlZlLm1hY3JvVGFzaz4wLGV2ZW50VGFzazpWZS5ldmVudFRhc2s+MCxjaGFuZ2U6d2V9KX0sU3R9KCksSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTdCh3ZSxFZSxWZSxrbixJcix4Yyl7aWYodGhpcy5fem9uZT1udWxsLHRoaXMucnVuQ291bnQ9MCx0aGlzLl96b25lRGVsZWdhdGVzPW51bGwsdGhpcy5fc3RhdGU9Im5vdFNjaGVkdWxlZCIsdGhpcy50eXBlPXdlLHRoaXMuc291cmNlPUVlLHRoaXMuZGF0YT1rbix0aGlzLnNjaGVkdWxlRm49SXIsdGhpcy5jYW5jZWxGbj14YywhVmUpdGhyb3cgbmV3IEVycm9yKCJjYWxsYmFjayBpcyBub3QgZGVmaW5lZCIpO3RoaXMuY2FsbGJhY2s9VmU7dmFyIGN0PXRoaXM7dGhpcy5pbnZva2U9d2U9PT1TaSYma24mJmtuLnVzZUc/U3QuaW52b2tlVGFzazpmdW5jdGlvbigpe3JldHVybiBTdC5pbnZva2VUYXNrLmNhbGwoUSxjdCx0aGlzLGFyZ3VtZW50cyl9fXJldHVybiBTdC5pbnZva2VUYXNrPWZ1bmN0aW9uKHdlLEVlLFZlKXt3ZXx8KHdlPXRoaXMpLFZyKys7dHJ5e3JldHVybiB3ZS5ydW5Db3VudCsrLHdlLnpvbmUucnVuVGFzayh3ZSxFZSxWZSl9ZmluYWxseXsxPT1WciYmSG4oKSxWci0tfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0LnByb3RvdHlwZSwiem9uZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96b25lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdC5wcm90b3R5cGUsInN0YXRlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFN0LnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZVJlcXVlc3Q9ZnVuY3Rpb24oKXt0aGlzLl90cmFuc2l0aW9uVG8od2ksYWkpfSxTdC5wcm90b3R5cGUuX3RyYW5zaXRpb25Ubz1mdW5jdGlvbih3ZSxFZSxWZSl7aWYodGhpcy5fc3RhdGUhPT1FZSYmdGhpcy5fc3RhdGUhPT1WZSl0aHJvdyBuZXcgRXJyb3IoIiIuY29uY2F0KHRoaXMudHlwZSwiICciKS5jb25jYXQodGhpcy5zb3VyY2UsIic6IGNhbiBub3QgdHJhbnNpdGlvbiB0byAnIikuY29uY2F0KHdlLCInLCBleHBlY3Rpbmcgc3RhdGUgJyIpLmNvbmNhdChFZSwiJyIpLmNvbmNhdChWZT8iIG9yICciK1ZlKyInIjoiIiwiLCB3YXMgJyIpLmNvbmNhdCh0aGlzLl9zdGF0ZSwiJy4iKSk7dGhpcy5fc3RhdGU9d2Usd2U9PXdpJiYodGhpcy5fem9uZURlbGVnYXRlcz1udWxsKX0sU3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YSYmdHlwZW9mIHRoaXMuZGF0YS5oYW5kbGVJZDwidSI/dGhpcy5kYXRhLmhhbmRsZUlkLnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpfSxTdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19LFN0fSgpLGZ0PSQoInNldFRpbWVvdXQiKSxDdD0kKCJQcm9taXNlIiksSXQ9JCgidGhlbiIpLE50PVtdLGJuPSExO2Z1bmN0aW9uIEFpKFN0KXtpZihycnx8UVtDdF0mJihycj1RW0N0XS5yZXNvbHZlKDApKSxycil7dmFyIHdlPXJyW0l0XTt3ZXx8KHdlPXJyLnRoZW4pLHdlLmNhbGwocnIsU3QpfWVsc2UgUVtmdF0oU3QsMCl9ZnVuY3Rpb24gTW4oU3QpezA9PT1WciYmMD09PU50Lmxlbmd0aCYmQWkoSG4pLFN0JiZOdC5wdXNoKFN0KX1mdW5jdGlvbiBIbigpe2lmKCFibil7Zm9yKGJuPSEwO050Lmxlbmd0aDspe3ZhciBTdD1OdDtOdD1bXTtmb3IodmFyIHdlPTA7d2U8U3QubGVuZ3RoO3dlKyspe3ZhciBFZT1TdFt3ZV07dHJ5e0VlLnpvbmUucnVuVGFzayhFZSxudWxsLG51bGwpfWNhdGNoKFZlKXtEci5vblVuaGFuZGxlZEVycm9yKFZlKX19fURyLm1pY3JvdGFza0RyYWluRG9uZSgpLGJuPSExfX12YXIgT3Q9e25hbWU6Ik5PIFpPTkUifSx3aT0ibm90U2NoZWR1bGVkIixhaT0ic2NoZWR1bGluZyIsWW49InNjaGVkdWxlZCIsJG49InJ1bm5pbmciLFl0PSJjYW5jZWxpbmciLFlpPSJ1bmtub3duIixBbj0ibWljcm9UYXNrIixVbj0ibWFjcm9UYXNrIixTaT0iZXZlbnRUYXNrIixqbj17fSxEcj17c3ltYm9sOiQsY3VycmVudFpvbmVGcmFtZTpmdW5jdGlvbigpe3JldHVybiBicn0sb25VbmhhbmRsZWRFcnJvcjpBcixtaWNyb3Rhc2tEcmFpbkRvbmU6QXIsc2NoZWR1bGVNaWNyb1Rhc2s6TW4sc2hvd1VuY2F1Z2h0RXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4hbWVbJCgiaWdub3JlQ29uc29sZUVycm9yVW5jYXVnaHRFcnJvciIpXX0scGF0Y2hFdmVudFRhcmdldDpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaE9uUHJvcGVydGllczpBcixwYXRjaE1ldGhvZDpmdW5jdGlvbigpe3JldHVybiBBcn0sYmluZEFyZ3VtZW50czpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaFRoZW46ZnVuY3Rpb24oKXtyZXR1cm4gQXJ9LHBhdGNoTWFjcm9UYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIEFyfSxwYXRjaEV2ZW50UHJvdG90eXBlOmZ1bmN0aW9uKCl7cmV0dXJuIEFyfSxpc0lFT3JFZGdlOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGdldEdsb2JhbE9iamVjdHM6ZnVuY3Rpb24oKXt9LE9iamVjdERlZmluZVByb3BlcnR5OmZ1bmN0aW9uKCl7cmV0dXJuIEFyfSxPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnVuY3Rpb24oKXt9LE9iamVjdENyZWF0ZTpmdW5jdGlvbigpe30sQXJyYXlTbGljZTpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIEFyfSx3cmFwV2l0aEN1cnJlbnRab25lOmZ1bmN0aW9uKCl7cmV0dXJuIEFyfSxmaWx0ZXJQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuW119LGF0dGFjaE9yaWdpblRvUGF0Y2hlZDpmdW5jdGlvbigpe3JldHVybiBBcn0sX3JlZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oKXtyZXR1cm4gQXJ9LHBhdGNoQ2FsbGJhY2tzOmZ1bmN0aW9uKCl7cmV0dXJuIEFyfSxuYXRpdmVTY2hlZHVsZU1pY3JvVGFzazpBaX0sYnI9e3BhcmVudDpudWxsLHpvbmU6bmV3IG1lKG51bGwsbnVsbCl9LHhhPW51bGwsVnI9MDtmdW5jdGlvbiBBcigpe31JKCJab25lIiwiWm9uZSIpLFEuWm9uZT1tZX0odHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZzZWxmfHxnbG9iYWwpO3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsdD1PYmplY3QuZGVmaW5lUHJvcGVydHksZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsaT1PYmplY3QuY3JlYXRlLHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLG89ImFkZEV2ZW50TGlzdGVuZXIiLHM9InJlbW92ZUV2ZW50TGlzdGVuZXIiLGE9Wm9uZS5fX3N5bWJvbF9fKG8pLGw9Wm9uZS5fX3N5bWJvbF9fKHMpLGM9InRydWUiLHU9ImZhbHNlIixkPVpvbmUuX19zeW1ib2xfXygiIik7ZnVuY3Rpb24gcChRLHJlKXtyZXR1cm4gWm9uZS5jdXJyZW50LndyYXAoUSxyZSl9ZnVuY3Rpb24gaChRLHJlLF9lLEksWCl7cmV0dXJuIFpvbmUuY3VycmVudC5zY2hlZHVsZU1hY3JvVGFzayhRLHJlLF9lLEksWCl9dmFyIGY9Wm9uZS5fX3N5bWJvbF9fLG09dHlwZW9mIHdpbmRvdzwidSIseD1tP3dpbmRvdzp2b2lkIDAsZz1tJiZ4fHwib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGZ8fGdsb2JhbDtmdW5jdGlvbiBEKFEscmUpe2Zvcih2YXIgX2U9US5sZW5ndGgtMTtfZT49MDtfZS0tKSJmdW5jdGlvbiI9PXR5cGVvZiBRW19lXSYmKFFbX2VdPXAoUVtfZV0scmUrIl8iK19lKSk7cmV0dXJuIFF9ZnVuY3Rpb24gayhRKXtyZXR1cm4hUXx8ITEhPT1RLndyaXRhYmxlJiYhKCJmdW5jdGlvbiI9PXR5cGVvZiBRLmdldCYmdHlwZW9mIFEuc2V0PiJ1Iil9dmFyIFo9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLHo9ISgibnciaW4gZykmJnR5cGVvZiBnLnByb2Nlc3M8InUiJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKGcucHJvY2VzcyksZmU9IXomJiFaJiYhKCFtfHwheC5IVE1MRWxlbWVudCksdWU9dHlwZW9mIGcucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoZy5wcm9jZXNzKSYmIVomJiEoIW18fCF4LkhUTUxFbGVtZW50KSxoZT17fSx3PWZ1bmN0aW9uKFEpe2lmKFE9UXx8Zy5ldmVudCl7dmFyIHJlPWhlW1EudHlwZV07cmV8fChyZT1oZVtRLnR5cGVdPWYoIk9OX1BST1BFUlRZIitRLnR5cGUpKTt2YXIgWCxfZT10aGlzfHxRLnRhcmdldHx8ZyxJPV9lW3JlXTtpZihmZSYmX2U9PT14JiYiZXJyb3IiPT09US50eXBlKXt2YXIgJD1ROyEwPT09KFg9SSYmSS5jYWxsKHRoaXMsJC5tZXNzYWdlLCQuZmlsZW5hbWUsJC5saW5lbm8sJC5jb2xubywkLmVycm9yKSkmJlEucHJldmVudERlZmF1bHQoKX1lbHNlIG51bGwhPShYPUkmJkkuYXBwbHkodGhpcyxhcmd1bWVudHMpKSYmIVgmJlEucHJldmVudERlZmF1bHQoKTtyZXR1cm4gWH19O2Z1bmN0aW9uIEYoUSxyZSxfZSl7dmFyIEk9bihRLHJlKTtpZighSSYmX2UmJm4oX2UscmUpJiYoST17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxJJiZJLmNvbmZpZ3VyYWJsZSl7dmFyICQ9Zigib24iK3JlKyJwYXRjaGVkIik7aWYoIVEuaGFzT3duUHJvcGVydHkoJCl8fCFRWyRdKXtkZWxldGUgSS53cml0YWJsZSxkZWxldGUgSS52YWx1ZTt2YXIgbmU9SS5nZXQsbWU9SS5zZXQsS2U9cmUuc2xpY2UoMiksbHQ9aGVbS2VdO2x0fHwobHQ9aGVbS2VdPWYoIk9OX1BST1BFUlRZIitLZSkpLEkuc2V0PWZ1bmN0aW9uKEplKXt2YXIgZnQ9dGhpczshZnQmJlE9PT1nJiYoZnQ9ZyksZnQmJigiZnVuY3Rpb24iPT10eXBlb2YgZnRbbHRdJiZmdC5yZW1vdmVFdmVudExpc3RlbmVyKEtlLHcpLG1lJiZtZS5jYWxsKGZ0LG51bGwpLGZ0W2x0XT1KZSwiZnVuY3Rpb24iPT10eXBlb2YgSmUmJmZ0LmFkZEV2ZW50TGlzdGVuZXIoS2UsdywhMSkpfSxJLmdldD1mdW5jdGlvbigpe3ZhciBKZT10aGlzO2lmKCFKZSYmUT09PWcmJihKZT1nKSwhSmUpcmV0dXJuIG51bGw7dmFyIGZ0PUplW2x0XTtpZihmdClyZXR1cm4gZnQ7aWYobmUpe3ZhciBDdD1uZS5jYWxsKHRoaXMpO2lmKEN0KXJldHVybiBJLnNldC5jYWxsKHRoaXMsQ3QpLCJmdW5jdGlvbiI9PXR5cGVvZiBKZS5yZW1vdmVBdHRyaWJ1dGUmJkplLnJlbW92ZUF0dHJpYnV0ZShyZSksQ3R9cmV0dXJuIG51bGx9LHQoUSxyZSxJKSxRWyRdPSEwfX19ZnVuY3Rpb24gcShRLHJlLF9lKXtpZihyZSlmb3IodmFyIEk9MDtJPHJlLmxlbmd0aDtJKyspRihRLCJvbiIrcmVbSV0sX2UpO2Vsc2V7dmFyIFg9W107Zm9yKHZhciAkIGluIFEpIm9uIj09JC5zbGljZSgwLDIpJiZYLnB1c2goJCk7Zm9yKHZhciBuZT0wO25lPFgubGVuZ3RoO25lKyspRihRLFhbbmVdLF9lKX19dmFyIEs9Zigib3JpZ2luYWxJbnN0YW5jZSIpO2Z1bmN0aW9uIGRlKFEpe3ZhciByZT1nW1FdO2lmKHJlKXtnW2YoUSldPXJlLGdbUV09ZnVuY3Rpb24oKXt2YXIgWD1EKGFyZ3VtZW50cyxRKTtzd2l0Y2goWC5sZW5ndGgpe2Nhc2UgMDp0aGlzW0tdPW5ldyByZTticmVhaztjYXNlIDE6dGhpc1tLXT1uZXcgcmUoWFswXSk7YnJlYWs7Y2FzZSAyOnRoaXNbS109bmV3IHJlKFhbMF0sWFsxXSk7YnJlYWs7Y2FzZSAzOnRoaXNbS109bmV3IHJlKFhbMF0sWFsxXSxYWzJdKTticmVhaztjYXNlIDQ6dGhpc1tLXT1uZXcgcmUoWFswXSxYWzFdLFhbMl0sWFszXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkFyZyBsaXN0IHRvbyBsb25nLiIpfX0sbGUoZ1tRXSxyZSk7dmFyIEksX2U9bmV3IHJlKGZ1bmN0aW9uKCl7fSk7Zm9yKEkgaW4gX2UpIlhNTEh0dHBSZXF1ZXN0Ij09PVEmJiJyZXNwb25zZUJsb2IiPT09SXx8ZnVuY3Rpb24oWCl7ImZ1bmN0aW9uIj09dHlwZW9mIF9lW1hdP2dbUV0ucHJvdG90eXBlW1hdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbS11bWF0uYXBwbHkodGhpc1tLXSxhcmd1bWVudHMpfTp0KGdbUV0ucHJvdG90eXBlLFgse3NldDpmdW5jdGlvbigkKXsiZnVuY3Rpb24iPT10eXBlb2YgJD8odGhpc1tLXVtYXT1wKCQsUSsiLiIrWCksbGUodGhpc1tLXVtYXSwkKSk6dGhpc1tLXVtYXT0kfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tLXVtYXX19KX0oSSk7Zm9yKEkgaW4gcmUpInByb3RvdHlwZSIhPT1JJiZyZS5oYXNPd25Qcm9wZXJ0eShJKSYmKGdbUV1bSV09cmVbSV0pfX1mdW5jdGlvbiBZKFEscmUsX2Upe2Zvcih2YXIgST1RO0kmJiFJLmhhc093blByb3BlcnR5KHJlKTspST1lKEkpOyFJJiZRW3JlXSYmKEk9USk7dmFyIFg9ZihyZSksJD1udWxsO2lmKEkmJighKCQ9SVtYXSl8fCFJLmhhc093blByb3BlcnR5KFgpKSYmKCQ9SVtYXT1JW3JlXSxrKEkmJm4oSSxyZSkpKSl7dmFyIG1lPV9lKCQsWCxyZSk7SVtyZV09ZnVuY3Rpb24oKXtyZXR1cm4gbWUodGhpcyxhcmd1bWVudHMpfSxsZShJW3JlXSwkKX1yZXR1cm4gJH1mdW5jdGlvbiBhZShRLHJlLF9lKXt2YXIgST1udWxsO2Z1bmN0aW9uIFgoJCl7dmFyIG5lPSQuZGF0YTtyZXR1cm4gbmUuYXJnc1tuZS5jYklkeF09ZnVuY3Rpb24oKXskLmludm9rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEkuYXBwbHkobmUudGFyZ2V0LG5lLmFyZ3MpLCR9ST1ZKFEscmUsZnVuY3Rpb24oJCl7cmV0dXJuIGZ1bmN0aW9uKG5lLG1lKXt2YXIgS2U9X2UobmUsbWUpO3JldHVybiBLZS5jYklkeD49MCYmImZ1bmN0aW9uIj09dHlwZW9mIG1lW0tlLmNiSWR4XT9oKEtlLm5hbWUsbWVbS2UuY2JJZHhdLEtlLFgpOiQuYXBwbHkobmUsbWUpfX0pfWZ1bmN0aW9uIGxlKFEscmUpe1FbZigiT3JpZ2luYWxEZWxlZ2F0ZSIpXT1yZX12YXIgSWU9ITEsdmU9ITE7ZnVuY3Rpb24gbnQoKXtpZihJZSlyZXR1cm4gdmU7SWU9ITA7dHJ5e3ZhciBRPXgubmF2aWdhdG9yLnVzZXJBZ2VudDsoLTEhPT1RLmluZGV4T2YoIk1TSUUgIil8fC0xIT09US5pbmRleE9mKCJUcmlkZW50LyIpfHwtMSE9PVEuaW5kZXhPZigiRWRnZS8iKSkmJih2ZT0hMCl9Y2F0Y2h7fXJldHVybiB2ZX1ab25lLl9fbG9hZF9wYXRjaCgiWm9uZUF3YXJlUHJvbWlzZSIsZnVuY3Rpb24oUSxyZSxfZSl7dmFyIEk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixYPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxuZT1fZS5zeW1ib2wsbWU9W10sS2U9ITA9PT1RW25lKCJESVNBQkxFX1dSQVBQSU5HX1VOQ0FVR0hUX1BST01JU0VfUkVKRUNUSU9OIildLGx0PW5lKCJQcm9taXNlIiksSmU9bmUoInRoZW4iKTtfZS5vblVuaGFuZGxlZEVycm9yPWZ1bmN0aW9uKGN0KXtpZihfZS5zaG93VW5jYXVnaHRFcnJvcigpKXt2YXIgVnQ9Y3QmJmN0LnJlamVjdGlvbjtWdD9jb25zb2xlLmVycm9yKCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb246IixWdCBpbnN0YW5jZW9mIEVycm9yP1Z0Lm1lc3NhZ2U6VnQsIjsgWm9uZToiLGN0LnpvbmUubmFtZSwiOyBUYXNrOiIsY3QudGFzayYmY3QudGFzay5zb3VyY2UsIjsgVmFsdWU6IixWdCxWdCBpbnN0YW5jZW9mIEVycm9yP1Z0LnN0YWNrOnZvaWQgMCk6Y29uc29sZS5lcnJvcihjdCl9fSxfZS5taWNyb3Rhc2tEcmFpbkRvbmU9ZnVuY3Rpb24oKXtmb3IodmFyIGN0PWZ1bmN0aW9uKCl7dmFyIFZ0PW1lLnNoaWZ0KCk7dHJ5e1Z0LnpvbmUucnVuR3VhcmRlZChmdW5jdGlvbigpe3Rocm93IFZ0LnRocm93T3JpZ2luYWw/VnQucmVqZWN0aW9uOlZ0fSl9Y2F0Y2goRHQpeyFmdW5jdGlvbihjdCl7X2Uub25VbmhhbmRsZWRFcnJvcihjdCk7dHJ5e3ZhciBWdD1yZVtDdF07ImZ1bmN0aW9uIj09dHlwZW9mIFZ0JiZWdC5jYWxsKHRoaXMsY3QpfWNhdGNoe319KER0KX19O21lLmxlbmd0aDspY3QoKX07dmFyIEN0PW5lKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIE50KGN0KXtyZXR1cm4gY3QmJmN0LnRoZW59ZnVuY3Rpb24gYm4oY3Qpe3JldHVybiBjdH1mdW5jdGlvbiBycihjdCl7cmV0dXJuIEVlLnJlamVjdChjdCl9dmFyIEFpPW5lKCJzdGF0ZSIpLE1uPW5lKCJ2YWx1ZSIpLEhuPW5lKCJmaW5hbGx5IiksT3Q9bmUoInBhcmVudFByb21pc2VWYWx1ZSIpLHdpPW5lKCJwYXJlbnRQcm9taXNlU3RhdGUiKSxZbj1udWxsLFl0PSExO2Z1bmN0aW9uIEFuKGN0LFZ0KXtyZXR1cm4gZnVuY3Rpb24oRHQpe3RyeXtEcihjdCxWdCxEdCl9Y2F0Y2goaXQpe0RyKGN0LCExLGl0KX19fXZhciBVbj1mdW5jdGlvbigpe3ZhciBjdD0hMTtyZXR1cm4gZnVuY3Rpb24oRHQpe3JldHVybiBmdW5jdGlvbigpe2N0fHwoY3Q9ITAsRHQuYXBwbHkobnVsbCxhcmd1bWVudHMpKX19fSxqbj1uZSgiY3VycmVudFRhc2tUcmFjZSIpO2Z1bmN0aW9uIERyKGN0LFZ0LER0KXt2YXIgaXQ9VW4oKTtpZihjdD09PUR0KXRocm93IG5ldyBUeXBlRXJyb3IoIlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiKTtpZihjdFtBaV09PT1Zbil7dmFyIGNuPW51bGw7dHJ5eygib2JqZWN0Ij09dHlwZW9mIER0fHwiZnVuY3Rpb24iPT10eXBlb2YgRHQpJiYoY249RHQmJkR0LnRoZW4pfWNhdGNoKG1pKXtyZXR1cm4gaXQoZnVuY3Rpb24oKXtEcihjdCwhMSxtaSl9KSgpLGN0fWlmKFZ0IT09WXQmJkR0IGluc3RhbmNlb2YgRWUmJkR0Lmhhc093blByb3BlcnR5KEFpKSYmRHQuaGFzT3duUHJvcGVydHkoTW4pJiZEdFtBaV0hPT1Zbil4YShEdCksRHIoY3QsRHRbQWldLER0W01uXSk7ZWxzZSBpZihWdCE9PVl0JiYiZnVuY3Rpb24iPT10eXBlb2YgY24pdHJ5e2NuLmNhbGwoRHQsaXQoQW4oY3QsVnQpKSxpdChBbihjdCwhMSkpKX1jYXRjaChtaSl7aXQoZnVuY3Rpb24oKXtEcihjdCwhMSxtaSl9KSgpfWVsc2V7Y3RbQWldPVZ0O3ZhciBxbj1jdFtNbl07aWYoY3RbTW5dPUR0LGN0W0huXT09PUhuJiYhMD09PVZ0JiYoY3RbQWldPWN0W3dpXSxjdFtNbl09Y3RbT3RdKSxWdD09PVl0JiZEdCBpbnN0YW5jZW9mIEVycm9yKXt2YXIgQm49cmUuY3VycmVudFRhc2smJnJlLmN1cnJlbnRUYXNrLmRhdGEmJnJlLmN1cnJlbnRUYXNrLmRhdGEuX19jcmVhdGlvblRyYWNlX187Qm4mJlgoRHQsam4se2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOkJufSl9Zm9yKHZhciBsaT0wO2xpPHFuLmxlbmd0aDspVnIoY3QscW5bbGkrK10scW5bbGkrK10scW5bbGkrK10scW5bbGkrK10pO2lmKDA9PXFuLmxlbmd0aCYmVnQ9PVl0KXtjdFtBaV09MDt2YXIgY2k9RHQ7dHJ5e3Rocm93IG5ldyBFcnJvcigiVW5jYXVnaHQgKGluIHByb21pc2UpOiAiK2Z1bmN0aW9uKGN0KXtyZXR1cm4gY3QmJmN0LnRvU3RyaW5nPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz8oY3QuY29uc3RydWN0b3ImJmN0LmNvbnN0cnVjdG9yLm5hbWV8fCIiKSsiOiAiK0pTT04uc3RyaW5naWZ5KGN0KTpjdD9jdC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjdCl9KER0KSsoRHQmJkR0LnN0YWNrPyJcbiIrRHQuc3RhY2s6IiIpKX1jYXRjaChtaSl7Y2k9bWl9S2UmJihjaS50aHJvd09yaWdpbmFsPSEwKSxjaS5yZWplY3Rpb249RHQsY2kucHJvbWlzZT1jdCxjaS56b25lPXJlLmN1cnJlbnQsY2kudGFzaz1yZS5jdXJyZW50VGFzayxtZS5wdXNoKGNpKSxfZS5zY2hlZHVsZU1pY3JvVGFzaygpfX19cmV0dXJuIGN0fXZhciBicj1uZSgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKTtmdW5jdGlvbiB4YShjdCl7aWYoMD09PWN0W0FpXSl7dHJ5e3ZhciBWdD1yZVticl07VnQmJiJmdW5jdGlvbiI9PXR5cGVvZiBWdCYmVnQuY2FsbCh0aGlzLHtyZWplY3Rpb246Y3RbTW5dLHByb21pc2U6Y3R9KX1jYXRjaHt9Y3RbQWldPVl0O2Zvcih2YXIgRHQ9MDtEdDxtZS5sZW5ndGg7RHQrKyljdD09PW1lW0R0XS5wcm9taXNlJiZtZS5zcGxpY2UoRHQsMSl9fWZ1bmN0aW9uIFZyKGN0LFZ0LER0LGl0LGNuKXt4YShjdCk7dmFyIHFuPWN0W0FpXSxCbj1xbj8iZnVuY3Rpb24iPT10eXBlb2YgaXQ/aXQ6Ym46ImZ1bmN0aW9uIj09dHlwZW9mIGNuP2NuOnJyO1Z0LnNjaGVkdWxlTWljcm9UYXNrKCJQcm9taXNlLnRoZW4iLGZ1bmN0aW9uKCl7dHJ5e3ZhciBsaT1jdFtNbl0sY2k9ISFEdCYmSG49PT1EdFtIbl07Y2kmJihEdFtPdF09bGksRHRbd2ldPXFuKTt2YXIgbWk9VnQucnVuKEJuLHZvaWQgMCxjaSYmQm4hPT1yciYmQm4hPT1ibj9bXTpbbGldKTtEcihEdCwhMCxtaSl9Y2F0Y2goSWkpe0RyKER0LCExLElpKX19LER0KX12YXIgU3Q9ZnVuY3Rpb24oKXt9LHdlPVEuQWdncmVnYXRlRXJyb3IsRWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjdChWdCl7dmFyIER0PXRoaXM7aWYoIShEdCBpbnN0YW5jZW9mIGN0KSl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYmUgYW4gaW5zdGFuY2VvZiBQcm9taXNlLiIpO0R0W0FpXT1ZbixEdFtNbl09W107dHJ5e3ZhciBpdD1VbigpO1Z0JiZWdChpdChBbihEdCwhMCkpLGl0KEFuKER0LFl0KSkpfWNhdGNoKGNuKXtEcihEdCwhMSxjbil9fXJldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNvZGVdIH0ifSxjdC5yZXNvbHZlPWZ1bmN0aW9uKFZ0KXtyZXR1cm4gRHIobmV3IHRoaXMobnVsbCksITAsVnQpfSxjdC5yZWplY3Q9ZnVuY3Rpb24oVnQpe3JldHVybiBEcihuZXcgdGhpcyhudWxsKSxZdCxWdCl9LGN0LmFueT1mdW5jdGlvbihWdCl7aWYoIVZ0fHwiZnVuY3Rpb24iIT10eXBlb2YgVnRbU3ltYm9sLml0ZXJhdG9yXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHdlKFtdLCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKTt2YXIgRHQ9W10saXQ9MDt0cnl7Zm9yKHZhciBjbj0wLHFuPVZ0O2NuPHFuLmxlbmd0aDtjbisrKWl0KyssRHQucHVzaChjdC5yZXNvbHZlKHFuW2NuXSkpfWNhdGNoe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgd2UoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpfWlmKDA9PT1pdClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHdlKFtdLCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKTt2YXIgbGk9ITEsY2k9W107cmV0dXJuIG5ldyBjdChmdW5jdGlvbihtaSxJaSl7Zm9yKHZhciBQcj0wO1ByPER0Lmxlbmd0aDtQcisrKUR0W1ByXS50aGVuKGZ1bmN0aW9uKGZzKXtsaXx8KGxpPSEwLG1pKGZzKSl9LGZ1bmN0aW9uKGZzKXtjaS5wdXNoKGZzKSwwPT0tLWl0JiYobGk9ITAsSWkobmV3IHdlKGNpLCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKSl9KX0pfSxjdC5yYWNlPWZ1bmN0aW9uKFZ0KXt2YXIgRHQsaXQsY249bmV3IHRoaXMoZnVuY3Rpb24oSWksUHIpe0R0PUlpLGl0PVByfSk7ZnVuY3Rpb24gcW4oSWkpe0R0KElpKX1mdW5jdGlvbiBCbihJaSl7aXQoSWkpfWZvcih2YXIgbGk9MCxjaT1WdDtsaTxjaS5sZW5ndGg7bGkrKyl7dmFyIG1pPWNpW2xpXTtOdChtaSl8fChtaT10aGlzLnJlc29sdmUobWkpKSxtaS50aGVuKHFuLEJuKX1yZXR1cm4gY259LGN0LmFsbD1mdW5jdGlvbihWdCl7cmV0dXJuIGN0LmFsbFdpdGhDYWxsYmFjayhWdCl9LGN0LmFsbFNldHRsZWQ9ZnVuY3Rpb24oVnQpe3JldHVybih0aGlzJiZ0aGlzLnByb3RvdHlwZSBpbnN0YW5jZW9mIGN0P3RoaXM6Y3QpLmFsbFdpdGhDYWxsYmFjayhWdCx7dGhlbkNhbGxiYWNrOmZ1bmN0aW9uKGl0KXtyZXR1cm57c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOml0fX0sZXJyb3JDYWxsYmFjazpmdW5jdGlvbihpdCl7cmV0dXJue3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjppdH19fSl9LGN0LmFsbFdpdGhDYWxsYmFjaz1mdW5jdGlvbihWdCxEdCl7Zm9yKHZhciBpdCxjbixxbj1uZXcgdGhpcyhmdW5jdGlvbihTbyx0cyl7aXQ9U28sY249dHN9KSxCbj0yLGxpPTAsY2k9W10sbWk9ZnVuY3Rpb24oU28pe050KFNvKXx8KFNvPUlpLnJlc29sdmUoU28pKTt2YXIgdHM9bGk7dHJ5e1NvLnRoZW4oZnVuY3Rpb24ocG8pe2NpW3RzXT1EdD9EdC50aGVuQ2FsbGJhY2socG8pOnBvLDA9PS0tQm4mJml0KGNpKX0sZnVuY3Rpb24ocG8pe0R0PyhjaVt0c109RHQuZXJyb3JDYWxsYmFjayhwbyksMD09LS1CbiYmaXQoY2kpKTpjbihwbyl9KX1jYXRjaChwbyl7Y24ocG8pfUJuKyssbGkrK30sSWk9dGhpcyxQcj0wLGZzPVZ0O1ByPGZzLmxlbmd0aDtQcisrKW1pKGZzW1ByXSk7cmV0dXJuIDA9PShCbi09MikmJml0KGNpKSxxbn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0LnByb3RvdHlwZSxTeW1ib2wudG9TdHJpbmdUYWcse2dldDpmdW5jdGlvbigpe3JldHVybiJQcm9taXNlIn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoY3QucHJvdG90eXBlLFN5bWJvbC5zcGVjaWVzLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY3R9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksY3QucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oVnQsRHQpe3ZhciBpdCxjbj1udWxsPT09KGl0PXRoaXMuY29uc3RydWN0b3IpfHx2b2lkIDA9PT1pdD92b2lkIDA6aXRbU3ltYm9sLnNwZWNpZXNdOyghY258fCJmdW5jdGlvbiIhPXR5cGVvZiBjbikmJihjbj10aGlzLmNvbnN0cnVjdG9yfHxjdCk7dmFyIHFuPW5ldyBjbihTdCksQm49cmUuY3VycmVudDtyZXR1cm4gdGhpc1tBaV09PVluP3RoaXNbTW5dLnB1c2goQm4scW4sVnQsRHQpOlZyKHRoaXMsQm4scW4sVnQsRHQpLHFufSxjdC5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oVnQpe3JldHVybiB0aGlzLnRoZW4obnVsbCxWdCl9LGN0LnByb3RvdHlwZS5maW5hbGx5PWZ1bmN0aW9uKFZ0KXt2YXIgRHQsaXQ9bnVsbD09PShEdD10aGlzLmNvbnN0cnVjdG9yKXx8dm9pZCAwPT09RHQ/dm9pZCAwOkR0W1N5bWJvbC5zcGVjaWVzXTsoIWl0fHwiZnVuY3Rpb24iIT10eXBlb2YgaXQpJiYoaXQ9Y3QpO3ZhciBjbj1uZXcgaXQoU3QpO2NuW0huXT1Ibjt2YXIgcW49cmUuY3VycmVudDtyZXR1cm4gdGhpc1tBaV09PVluP3RoaXNbTW5dLnB1c2gocW4sY24sVnQsVnQpOlZyKHRoaXMscW4sY24sVnQsVnQpLGNufSxjdH0oKTtFZS5yZXNvbHZlPUVlLnJlc29sdmUsRWUucmVqZWN0PUVlLnJlamVjdCxFZS5yYWNlPUVlLnJhY2UsRWUuYWxsPUVlLmFsbDt2YXIgVmU9UVtsdF09US5Qcm9taXNlO1EuUHJvbWlzZT1FZTt2YXIga249bmUoInRoZW5QYXRjaGVkIik7ZnVuY3Rpb24gSXIoY3Qpe3ZhciBWdD1jdC5wcm90b3R5cGUsRHQ9SShWdCwidGhlbiIpO2lmKCFEdHx8ITEhPT1EdC53cml0YWJsZSYmRHQuY29uZmlndXJhYmxlKXt2YXIgaXQ9VnQudGhlbjtWdFtKZV09aXQsY3QucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oY24scW4pe3ZhciBCbj10aGlzO3JldHVybiBuZXcgRWUoZnVuY3Rpb24oY2ksbWkpe2l0LmNhbGwoQm4sY2ksbWkpfSkudGhlbihjbixxbil9LGN0W2tuXT0hMH19cmV0dXJuIF9lLnBhdGNoVGhlbj1JcixWZSYmKElyKFZlKSxZKFEsImZldGNoIixmdW5jdGlvbihjdCl7cmV0dXJuIGZ1bmN0aW9uKGN0KXtyZXR1cm4gZnVuY3Rpb24oVnQsRHQpe3ZhciBpdD1jdC5hcHBseShWdCxEdCk7aWYoaXQgaW5zdGFuY2VvZiBFZSlyZXR1cm4gaXQ7dmFyIGNuPWl0LmNvbnN0cnVjdG9yO3JldHVybiBjbltrbl18fElyKGNuKSxpdH19KGN0KX0pKSxQcm9taXNlW3JlLl9fc3ltYm9sX18oInVuY2F1Z2h0UHJvbWlzZUVycm9ycyIpXT1tZSxFZX0pLFpvbmUuX19sb2FkX3BhdGNoKCJ0b1N0cmluZyIsZnVuY3Rpb24oUSl7dmFyIHJlPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxfZT1mKCJPcmlnaW5hbERlbGVnYXRlIiksST1mKCJQcm9taXNlIiksWD1mKCJFcnJvciIpLCQ9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcyl7dmFyIGx0PXRoaXNbX2VdO2lmKGx0KXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBsdD9yZS5jYWxsKGx0KTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobHQpO2lmKHRoaXM9PT1Qcm9taXNlKXt2YXIgSmU9UVtJXTtpZihKZSlyZXR1cm4gcmUuY2FsbChKZSl9aWYodGhpcz09PUVycm9yKXt2YXIgZnQ9UVtYXTtpZihmdClyZXR1cm4gcmUuY2FsbChmdCl9fXJldHVybiByZS5jYWxsKHRoaXMpfTskW19lXT1yZSxGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9JDt2YXIgbmU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFByb21pc2UmJnRoaXMgaW5zdGFuY2VvZiBQcm9taXNlPyJbb2JqZWN0IFByb21pc2VdIjpuZS5jYWxsKHRoaXMpfX0pO3ZhciBndD0hMTtpZih0eXBlb2Ygd2luZG93PCJ1Iil0cnl7dmFyIFVlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe2d0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixVZSxVZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLFVlLFVlKX1jYXRjaHtndD0hMX12YXIgZmksV2kscWksZWUsVyxBZT17dXNlRzohMH0sdG49e30scHQ9e30sd3Q9bmV3IFJlZ0V4cCgiXiIrZCsiKFxcdyspKHRydWV8ZmFsc2UpJCIpLFRlPWYoInByb3BhZ2F0aW9uU3RvcHBlZCIpO2Z1bmN0aW9uIHh0KFEscmUpe3ZhciBfZT0ocmU/cmUoUSk6USkrdSxJPShyZT9yZShRKTpRKStjLFg9ZCtfZSwkPWQrSTt0bltRXT17fSx0bltRXVt1XT1YLHRuW1FdW2NdPSR9ZnVuY3Rpb24gbXQoUSxyZSxfZSxJKXt2YXIgWD1JJiZJLmFkZHx8bywkPUkmJkkucm18fHMsbmU9SSYmSS5saXN0ZW5lcnN8fCJldmVudExpc3RlbmVycyIsbWU9SSYmSS5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsS2U9ZihYKSxsdD0iLiIrWCsiOiIsQ3Q9ZnVuY3Rpb24oSG4sT3Qsd2kpe2lmKCFIbi5pc1JlbW92ZWQpe3ZhciBZbixhaT1Ibi5jYWxsYmFjazsib2JqZWN0Ij09dHlwZW9mIGFpJiZhaS5oYW5kbGVFdmVudCYmKEhuLmNhbGxiYWNrPWZ1bmN0aW9uKFlpKXtyZXR1cm4gYWkuaGFuZGxlRXZlbnQoWWkpfSxIbi5vcmlnaW5hbERlbGVnYXRlPWFpKTt0cnl7SG4uaW52b2tlKEhuLE90LFt3aV0pfWNhdGNoKFlpKXtZbj1ZaX12YXIgJG49SG4ub3B0aW9ucztyZXR1cm4gJG4mJiJvYmplY3QiPT10eXBlb2YgJG4mJiRuLm9uY2UmJk90WyRdLmNhbGwoT3Qsd2kudHlwZSxIbi5vcmlnaW5hbERlbGVnYXRlP0huLm9yaWdpbmFsRGVsZWdhdGU6SG4uY2FsbGJhY2ssJG4pLFlufX07ZnVuY3Rpb24gSXQoSG4sT3Qsd2kpe2lmKE90PU90fHxRLmV2ZW50KXt2YXIgYWk9SG58fE90LnRhcmdldHx8USxZbj1haVt0bltPdC50eXBlXVt3aT9jOnVdXTtpZihZbil7dmFyICRuPVtdO2lmKDE9PT1Zbi5sZW5ndGgpKFl0PUN0KFluWzBdLGFpLE90KSkmJiRuLnB1c2goWXQpO2Vsc2UgZm9yKHZhciBZaT1Zbi5zbGljZSgpLEFuPTA7QW48WWkubGVuZ3RoJiYoIU90fHwhMCE9PU90W1RlXSk7QW4rKyl7dmFyIFl0OyhZdD1DdChZaVtBbl0sYWksT3QpKSYmJG4ucHVzaChZdCl9aWYoMT09PSRuLmxlbmd0aCl0aHJvdyAkblswXTt2YXIgVW49ZnVuY3Rpb24oU2kpe3ZhciBqbj0kbltTaV07cmUubmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2soZnVuY3Rpb24oKXt0aHJvdyBqbn0pfTtmb3IoQW49MDtBbjwkbi5sZW5ndGg7QW4rKylVbihBbil9fX12YXIgTnQ9ZnVuY3Rpb24oSG4pe3JldHVybiBJdCh0aGlzLEhuLCExKX0sYm49ZnVuY3Rpb24oSG4pe3JldHVybiBJdCh0aGlzLEhuLCEwKX07ZnVuY3Rpb24gcnIoSG4sT3Qpe2lmKCFIbilyZXR1cm4hMTt2YXIgd2k9ITA7T3QmJnZvaWQgMCE9PU90LnVzZUcmJih3aT1PdC51c2VHKTt2YXIgYWk9T3QmJk90LnZoLFluPSEwO090JiZ2b2lkIDAhPT1PdC5jaGtEdXAmJihZbj1PdC5jaGtEdXApO3ZhciAkbj0hMTtPdCYmdm9pZCAwIT09T3QucnQmJigkbj1PdC5ydCk7Zm9yKHZhciBZdD1IbjtZdCYmIVl0Lmhhc093blByb3BlcnR5KFgpOylZdD1lKFl0KTtpZighWXQmJkhuW1hdJiYoWXQ9SG4pLCFZdHx8WXRbS2VdKXJldHVybiExO3ZhciBicixZaT1PdCYmT3QuZXZlbnROYW1lVG9TdHJpbmcsQW49e30sVW49WXRbS2VdPVl0W1hdLFNpPVl0W2YoJCldPVl0WyRdLGpuPVl0W2YobmUpXT1ZdFtuZV0sRHI9WXRbZihtZSldPVl0W21lXTtmdW5jdGlvbiB4YShpdCxjbil7cmV0dXJuIWd0JiYib2JqZWN0Ij09dHlwZW9mIGl0JiZpdD8hIWl0LmNhcHR1cmU6Z3QmJmNuPyJib29sZWFuIj09dHlwZW9mIGl0P3tjYXB0dXJlOml0LHBhc3NpdmU6ITB9Oml0PyJvYmplY3QiPT10eXBlb2YgaXQmJiExIT09aXQucGFzc2l2ZT9PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saXQpLHtwYXNzaXZlOiEwfSk6aXQ6e3Bhc3NpdmU6ITB9Oml0fU90JiZPdC5wcmVwZW5kJiYoYnI9WXRbZihPdC5wcmVwZW5kKV09WXRbT3QucHJlcGVuZF0pO3ZhciBWZT13aT9mdW5jdGlvbihpdCl7aWYoIUFuLmlzRXhpc3RpbmcpcmV0dXJuIFVuLmNhbGwoQW4udGFyZ2V0LEFuLmV2ZW50TmFtZSxBbi5jYXB0dXJlP2JuOk50LEFuLm9wdGlvbnMpfTpmdW5jdGlvbihpdCl7cmV0dXJuIFVuLmNhbGwoQW4udGFyZ2V0LEFuLmV2ZW50TmFtZSxpdC5pbnZva2UsQW4ub3B0aW9ucyl9LGtuPXdpP2Z1bmN0aW9uKGl0KXtpZighaXQuaXNSZW1vdmVkKXt2YXIgY249dG5baXQuZXZlbnROYW1lXSxxbj12b2lkIDA7Y24mJihxbj1jbltpdC5jYXB0dXJlP2M6dV0pO3ZhciBCbj1xbiYmaXQudGFyZ2V0W3FuXTtpZihCbilmb3IodmFyIGxpPTA7bGk8Qm4ubGVuZ3RoO2xpKyspaWYoQm5bbGldPT09aXQpe0JuLnNwbGljZShsaSwxKSxpdC5pc1JlbW92ZWQ9ITAsMD09PUJuLmxlbmd0aCYmKGl0LmFsbFJlbW92ZWQ9ITAsaXQudGFyZ2V0W3FuXT1udWxsKTticmVha319aWYoaXQuYWxsUmVtb3ZlZClyZXR1cm4gU2kuY2FsbChpdC50YXJnZXQsaXQuZXZlbnROYW1lLGl0LmNhcHR1cmU/Ym46TnQsaXQub3B0aW9ucyl9OmZ1bmN0aW9uKGl0KXtyZXR1cm4gU2kuY2FsbChpdC50YXJnZXQsaXQuZXZlbnROYW1lLGl0Lmludm9rZSxpdC5vcHRpb25zKX0seGM9T3QmJk90LmRpZmY/T3QuZGlmZjpmdW5jdGlvbihpdCxjbil7dmFyIHFuPXR5cGVvZiBjbjtyZXR1cm4iZnVuY3Rpb24iPT09cW4mJml0LmNhbGxiYWNrPT09Y258fCJvYmplY3QiPT09cW4mJml0Lm9yaWdpbmFsRGVsZWdhdGU9PT1jbn0sY3Q9Wm9uZVtmKCJVTlBBVENIRURfRVZFTlRTIildLFZ0PVFbZigiUEFTU0lWRV9FVkVOVFMiKV0sRHQ9ZnVuY3Rpb24oaXQsY24scW4sQm4sbGksY2kpe3JldHVybiB2b2lkIDA9PT1saSYmKGxpPSExKSx2b2lkIDA9PT1jaSYmKGNpPSExKSxmdW5jdGlvbigpe3ZhciBtaT10aGlzfHxRLElpPWFyZ3VtZW50c1swXTtPdCYmT3QudHJhbnNmZXJFdmVudE5hbWUmJihJaT1PdC50cmFuc2ZlckV2ZW50TmFtZShJaSkpO3ZhciBQcj1hcmd1bWVudHNbMV07aWYoIVByKXJldHVybiBpdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoeiYmInVuY2F1Z2h0RXhjZXB0aW9uIj09PUlpKXJldHVybiBpdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGZzPSExO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBQcil7aWYoIVByLmhhbmRsZUV2ZW50KXJldHVybiBpdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZnM9ITB9aWYoIWFpfHxhaShpdCxQcixtaSxhcmd1bWVudHMpKXt2YXIgUGQ9Z3QmJiEhVnQmJi0xIT09VnQuaW5kZXhPZihJaSksU289eGEoYXJndW1lbnRzWzJdLFBkKTtpZihjdClmb3IodmFyIHRzPTA7dHM8Y3QubGVuZ3RoO3RzKyspaWYoSWk9PT1jdFt0c10pcmV0dXJuIFBkP2l0LmNhbGwobWksSWksUHIsU28pOml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgcG89ISFTbyYmKCJib29sZWFuIj09dHlwZW9mIFNvfHxTby5jYXB0dXJlKSxhMD0hKCFTb3x8Im9iamVjdCIhPXR5cGVvZiBTbykmJlNvLm9uY2UsWmdlPVpvbmUuY3VycmVudCxyTj10bltJaV07ck58fCh4dChJaSxZaSksck49dG5bSWldKTt2YXIgRTY9ck5bcG8/Yzp1XSxsMD1taVtFNl0sVDY9ITE7aWYobDApe2lmKFQ2PSEwLFluKWZvcih0cz0wO3RzPGwwLmxlbmd0aDt0cysrKWlmKHhjKGwwW3RzXSxQcikpcmV0dXJufWVsc2UgbDA9bWlbRTZdPVtdO3ZhciBORSxENj1taS5jb25zdHJ1Y3Rvci5uYW1lLEE2PXB0W0Q2XTtBNiYmKE5FPUE2W0lpXSksTkV8fChORT1ENitjbisoWWk/WWkoSWkpOklpKSksQW4ub3B0aW9ucz1TbyxhMCYmKEFuLm9wdGlvbnMub25jZT0hMSksQW4udGFyZ2V0PW1pLEFuLmNhcHR1cmU9cG8sQW4uZXZlbnROYW1lPUlpLEFuLmlzRXhpc3Rpbmc9VDY7dmFyIHR4PXdpP0FlOnZvaWQgMDt0eCYmKHR4LnRhc2tEYXRhPUFuKTt2YXIgTnA9WmdlLnNjaGVkdWxlRXZlbnRUYXNrKE5FLFByLHR4LHFuLEJuKTtpZihBbi50YXJnZXQ9bnVsbCx0eCYmKHR4LnRhc2tEYXRhPW51bGwpLGEwJiYoU28ub25jZT0hMCksIWd0JiYiYm9vbGVhbiI9PXR5cGVvZiBOcC5vcHRpb25zfHwoTnAub3B0aW9ucz1TbyksTnAudGFyZ2V0PW1pLE5wLmNhcHR1cmU9cG8sTnAuZXZlbnROYW1lPUlpLGZzJiYoTnAub3JpZ2luYWxEZWxlZ2F0ZT1QciksY2k/bDAudW5zaGlmdChOcCk6bDAucHVzaChOcCksbGkpcmV0dXJuIG1pfX19O3JldHVybiBZdFtYXT1EdChVbixsdCxWZSxrbiwkbiksYnImJihZdC5wcmVwZW5kTGlzdGVuZXI9RHQoYnIsIi5wcmVwZW5kTGlzdGVuZXI6IixmdW5jdGlvbihpdCl7cmV0dXJuIGJyLmNhbGwoQW4udGFyZ2V0LEFuLmV2ZW50TmFtZSxpdC5pbnZva2UsQW4ub3B0aW9ucyl9LGtuLCRuLCEwKSksWXRbJF09ZnVuY3Rpb24oKXt2YXIgaXQ9dGhpc3x8USxjbj1hcmd1bWVudHNbMF07T3QmJk90LnRyYW5zZmVyRXZlbnROYW1lJiYoY249T3QudHJhbnNmZXJFdmVudE5hbWUoY24pKTt2YXIgcW49YXJndW1lbnRzWzJdLEJuPSEhcW4mJigiYm9vbGVhbiI9PXR5cGVvZiBxbnx8cW4uY2FwdHVyZSksbGk9YXJndW1lbnRzWzFdO2lmKCFsaSlyZXR1cm4gU2kuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCFhaXx8YWkoU2ksbGksaXQsYXJndW1lbnRzKSl7dmFyIG1pLGNpPXRuW2NuXTtjaSYmKG1pPWNpW0JuP2M6dV0pO3ZhciBJaT1taSYmaXRbbWldO2lmKElpKWZvcih2YXIgUHI9MDtQcjxJaS5sZW5ndGg7UHIrKyl7dmFyIGZzPUlpW1ByXTtpZih4YyhmcyxsaSkpe2lmKElpLnNwbGljZShQciwxKSxmcy5pc1JlbW92ZWQ9ITAsMD09PUlpLmxlbmd0aCYmKGZzLmFsbFJlbW92ZWQ9ITAsaXRbbWldPW51bGwsInN0cmluZyI9PXR5cGVvZiBjbikpe3ZhciBQZD1kKyJPTl9QUk9QRVJUWSIrY247aXRbUGRdPW51bGx9cmV0dXJuIGZzLnpvbmUuY2FuY2VsVGFzayhmcyksJG4/aXQ6dm9pZCAwfX1yZXR1cm4gU2kuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sWXRbbmVdPWZ1bmN0aW9uKCl7dmFyIGl0PXRoaXN8fFEsY249YXJndW1lbnRzWzBdO090JiZPdC50cmFuc2ZlckV2ZW50TmFtZSYmKGNuPU90LnRyYW5zZmVyRXZlbnROYW1lKGNuKSk7Zm9yKHZhciBxbj1bXSxCbj1jZShpdCxZaT9ZaShjbik6Y24pLGxpPTA7bGk8Qm4ubGVuZ3RoO2xpKyspe3ZhciBjaT1CbltsaV0sbWk9Y2kub3JpZ2luYWxEZWxlZ2F0ZT9jaS5vcmlnaW5hbERlbGVnYXRlOmNpLmNhbGxiYWNrO3FuLnB1c2gobWkpfXJldHVybiBxbn0sWXRbbWVdPWZ1bmN0aW9uKCl7dmFyIGl0PXRoaXN8fFEsY249YXJndW1lbnRzWzBdO2lmKGNuKXtPdCYmT3QudHJhbnNmZXJFdmVudE5hbWUmJihjbj1PdC50cmFuc2ZlckV2ZW50TmFtZShjbikpO3ZhciBJaT10bltjbl07aWYoSWkpe3ZhciBQcj1JaVt1XSxmcz1JaVtjXSxQZD1pdFtQcl0sU289aXRbZnNdO2lmKFBkKWZvcih2YXIgdHM9UGQuc2xpY2UoKSxCbj0wO0JuPHRzLmxlbmd0aDtCbisrKXRoaXNbJF0uY2FsbCh0aGlzLGNuLChwbz10c1tCbl0pLm9yaWdpbmFsRGVsZWdhdGU/cG8ub3JpZ2luYWxEZWxlZ2F0ZTpwby5jYWxsYmFjayxwby5vcHRpb25zKTtpZihTbylmb3IodHM9U28uc2xpY2UoKSxCbj0wO0JuPHRzLmxlbmd0aDtCbisrKXt2YXIgcG87dGhpc1skXS5jYWxsKHRoaXMsY24sKHBvPXRzW0JuXSkub3JpZ2luYWxEZWxlZ2F0ZT9wby5vcmlnaW5hbERlbGVnYXRlOnBvLmNhbGxiYWNrLHBvLm9wdGlvbnMpfX19ZWxzZXt2YXIgcW49T2JqZWN0LmtleXMoaXQpO2ZvcihCbj0wO0JuPHFuLmxlbmd0aDtCbisrKXt2YXIgbGk9cW5bQm5dLGNpPXd0LmV4ZWMobGkpLG1pPWNpJiZjaVsxXTttaSYmInJlbW92ZUxpc3RlbmVyIiE9PW1pJiZ0aGlzW21lXS5jYWxsKHRoaXMsbWkpfXRoaXNbbWVdLmNhbGwodGhpcywicmVtb3ZlTGlzdGVuZXIiKX1pZigkbilyZXR1cm4gdGhpc30sbGUoWXRbWF0sVW4pLGxlKFl0WyRdLFNpKSxEciYmbGUoWXRbbWVdLERyKSxqbiYmbGUoWXRbbmVdLGpuKSwhMH1mb3IodmFyIEFpPVtdLE1uPTA7TW48X2UubGVuZ3RoO01uKyspQWlbTW5dPXJyKF9lW01uXSxJKTtyZXR1cm4gQWl9ZnVuY3Rpb24gY2UoUSxyZSl7aWYoIXJlKXt2YXIgX2U9W107Zm9yKHZhciBJIGluIFEpe3ZhciBYPXd0LmV4ZWMoSSksJD1YJiZYWzFdO2lmKCQmJighcmV8fCQ9PT1yZSkpe3ZhciBuZT1RW0ldO2lmKG5lKWZvcih2YXIgbWU9MDttZTxuZS5sZW5ndGg7bWUrKylfZS5wdXNoKG5lW21lXSl9fXJldHVybiBfZX12YXIgS2U9dG5bcmVdO0tlfHwoeHQocmUpLEtlPXRuW3JlXSk7dmFyIGx0PVFbS2VbdV1dLEplPVFbS2VbY11dO3JldHVybiBsdD9KZT9sdC5jb25jYXQoSmUpOmx0LnNsaWNlKCk6SmU/SmUuc2xpY2UoKTpbXX1mdW5jdGlvbiBkdChRLHJlKXt2YXIgX2U9US5FdmVudDtfZSYmX2UucHJvdG90eXBlJiZyZS5wYXRjaE1ldGhvZChfZS5wcm90b3R5cGUsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsZnVuY3Rpb24oSSl7cmV0dXJuIGZ1bmN0aW9uKFgsJCl7WFtUZV09ITAsSSYmSS5hcHBseShYLCQpfX0pfWZ1bmN0aW9uIFdlKFEscmUsX2UsSSxYKXt2YXIgJD1ab25lLl9fc3ltYm9sX18oSSk7aWYoIXJlWyRdKXt2YXIgbmU9cmVbJF09cmVbSV07cmVbSV09ZnVuY3Rpb24obWUsS2UsbHQpe3JldHVybiBLZSYmS2UucHJvdG90eXBlJiZYLmZvckVhY2goZnVuY3Rpb24oSmUpe3ZhciBmdD0iIi5jb25jYXQoX2UsIi4iKS5jb25jYXQoSSwiOjoiKStKZSxDdD1LZS5wcm90b3R5cGU7dHJ5e2lmKEN0Lmhhc093blByb3BlcnR5KEplKSl7dmFyIEl0PVEuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEN0LEplKTtJdCYmSXQudmFsdWU/KEl0LnZhbHVlPVEud3JhcFdpdGhDdXJyZW50Wm9uZShJdC52YWx1ZSxmdCksUS5fcmVkZWZpbmVQcm9wZXJ0eShLZS5wcm90b3R5cGUsSmUsSXQpKTpDdFtKZV0mJihDdFtKZV09US53cmFwV2l0aEN1cnJlbnRab25lKEN0W0plXSxmdCkpfWVsc2UgQ3RbSmVdJiYoQ3RbSmVdPVEud3JhcFdpdGhDdXJyZW50Wm9uZShDdFtKZV0sZnQpKX1jYXRjaHt9fSksbmUuY2FsbChyZSxtZSxLZSxsdCl9LFEuYXR0YWNoT3JpZ2luVG9QYXRjaGVkKHJlW0ldLG5lKX19ZnVuY3Rpb24gTXQoUSxyZSxfZSl7aWYoIV9lfHwwPT09X2UubGVuZ3RoKXJldHVybiByZTt2YXIgST1fZS5maWx0ZXIoZnVuY3Rpb24oJCl7cmV0dXJuICQudGFyZ2V0PT09UX0pO2lmKCFJfHwwPT09SS5sZW5ndGgpcmV0dXJuIHJlO3ZhciBYPUlbMF0uaWdub3JlUHJvcGVydGllcztyZXR1cm4gcmUuZmlsdGVyKGZ1bmN0aW9uKCQpe3JldHVybi0xPT09WC5pbmRleE9mKCQpfSl9ZnVuY3Rpb24gYnQoUSxyZSxfZSxJKXtRJiZxKFEsTXQoUSxyZSxfZSksSSl9ZnVuY3Rpb24gaG4oUSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFEpLmZpbHRlcihmdW5jdGlvbihyZSl7cmV0dXJuIHJlLnN0YXJ0c1dpdGgoIm9uIikmJnJlLmxlbmd0aD4yfSkubWFwKGZ1bmN0aW9uKHJlKXtyZXR1cm4gcmUuc3Vic3RyaW5nKDIpfSl9ZnVuY3Rpb24gVHQoUSxyZSxfZSl7dmFyIEk9X2UuY29uZmlndXJhYmxlO3JldHVybiB3bihRLHJlLF9lPXFlKFEscmUsX2UpLEkpfWZ1bmN0aW9uIG1uKFEscmUpe3JldHVybiBRJiZRW1ddJiZRW1ddW3JlXX1mdW5jdGlvbiBxZShRLHJlLF9lKXtyZXR1cm4gT2JqZWN0LmlzRnJvemVuKF9lKXx8KF9lLmNvbmZpZ3VyYWJsZT0hMCksX2UuY29uZmlndXJhYmxlfHwoIVFbV10mJiFPYmplY3QuaXNGcm96ZW4oUSkmJldpKFEsVyx7d3JpdGFibGU6ITAsdmFsdWU6e319KSxRW1ddJiYoUVtXXVtyZV09ITApKSxfZX1mdW5jdGlvbiB3bihRLHJlLF9lLEkpe3RyeXtyZXR1cm4gV2koUSxyZSxfZSl9Y2F0Y2gobmUpe2lmKCFfZS5jb25maWd1cmFibGUpdGhyb3cgbmU7dHlwZW9mIEk+InUiP2RlbGV0ZSBfZS5jb25maWd1cmFibGU6X2UuY29uZmlndXJhYmxlPUk7dHJ5e3JldHVybiBXaShRLHJlLF9lKX1jYXRjaChtZSl7dmFyIFg9ITE7aWYoKCJjcmVhdGVkQ2FsbGJhY2siPT09cmV8fCJhdHRhY2hlZENhbGxiYWNrIj09PXJlfHwiZGV0YWNoZWRDYWxsYmFjayI9PT1yZXx8ImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayI9PT1yZSkmJihYPSEwKSwhWCl0aHJvdyBtZTt2YXIgJD1udWxsO3RyeXskPUpTT04uc3RyaW5naWZ5KF9lKX1jYXRjaHskPV9lLnRvU3RyaW5nKCl9Y29uc29sZS5sb2coIkF0dGVtcHRpbmcgdG8gY29uZmlndXJlICciLmNvbmNhdChyZSwiJyB3aXRoIGRlc2NyaXB0b3IgJyIpLmNvbmNhdCgkLCInIG9uIG9iamVjdCAnIikuY29uY2F0KFEsIicgYW5kIGdvdCBlcnJvciwgZ2l2aW5nIHVwOiAiKS5jb25jYXQobWUpKX19fVpvbmUuX19sb2FkX3BhdGNoKCJ1dGlsIixmdW5jdGlvbihRLHJlLF9lKXt2YXIgST1obihRKTtfZS5wYXRjaE9uUHJvcGVydGllcz1xLF9lLnBhdGNoTWV0aG9kPVksX2UuYmluZEFyZ3VtZW50cz1ELF9lLnBhdGNoTWFjcm9UYXNrPWFlO3ZhciBYPXJlLl9fc3ltYm9sX18oIkJMQUNLX0xJU1RFRF9FVkVOVFMiKSwkPXJlLl9fc3ltYm9sX18oIlVOUEFUQ0hFRF9FVkVOVFMiKTtRWyRdJiYoUVtYXT1RWyRdKSxRW1hdJiYocmVbWF09cmVbJF09UVtYXSksX2UucGF0Y2hFdmVudFByb3RvdHlwZT1kdCxfZS5wYXRjaEV2ZW50VGFyZ2V0PW10LF9lLmlzSUVPckVkZ2U9bnQsX2UuT2JqZWN0RGVmaW5lUHJvcGVydHk9dCxfZS5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9bixfZS5PYmplY3RDcmVhdGU9aSxfZS5BcnJheVNsaWNlPXIsX2UucGF0Y2hDbGFzcz1kZSxfZS53cmFwV2l0aEN1cnJlbnRab25lPXAsX2UuZmlsdGVyUHJvcGVydGllcz1NdCxfZS5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQ9bGUsX2UuX3JlZGVmaW5lUHJvcGVydHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LF9lLnBhdGNoQ2FsbGJhY2tzPVdlLF9lLmdldEdsb2JhbE9iamVjdHM9ZnVuY3Rpb24oKXtyZXR1cm57Z2xvYmFsU291cmNlczpwdCx6b25lU3ltYm9sRXZlbnROYW1lczp0bixldmVudE5hbWVzOkksaXNCcm93c2VyOmZlLGlzTWl4OnVlLGlzTm9kZTp6LFRSVUVfU1RSOmMsRkFMU0VfU1RSOnUsWk9ORV9TWU1CT0xfUFJFRklYOmQsQUREX0VWRU5UX0xJU1RFTkVSX1NUUjpvLFJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFI6c319fSk7dmFyIFEsRXM9dWgodWgodWgodWgodWgodWgodWgodWgoW10sWyJhYm9ydCIsImFuaW1hdGlvbmNhbmNlbCIsImFuaW1hdGlvbmVuZCIsImFuaW1hdGlvbml0ZXJhdGlvbiIsImF1eGNsaWNrIiwiYmVmb3JlaW5wdXQiLCJibHVyIiwiY2FuY2VsIiwiY2FucGxheSIsImNhbnBsYXl0aHJvdWdoIiwiY2hhbmdlIiwiY29tcG9zaXRpb25zdGFydCIsImNvbXBvc2l0aW9udXBkYXRlIiwiY29tcG9zaXRpb25lbmQiLCJjdWVjaGFuZ2UiLCJjbGljayIsImNsb3NlIiwiY29udGV4dG1lbnUiLCJjdXJlY2hhbmdlIiwiZGJsY2xpY2siLCJkcmFnIiwiZHJhZ2VuZCIsImRyYWdlbnRlciIsImRyYWdleGl0IiwiZHJhZ2xlYXZlIiwiZHJhZ292ZXIiLCJkcm9wIiwiZHVyYXRpb25jaGFuZ2UiLCJlbXB0aWVkIiwiZW5kZWQiLCJlcnJvciIsImZvY3VzIiwiZm9jdXNpbiIsImZvY3Vzb3V0IiwiZ290cG9pbnRlcmNhcHR1cmUiLCJpbnB1dCIsImludmFsaWQiLCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImxvYWQiLCJsb2Fkc3RhcnQiLCJsb2FkZWRkYXRhIiwibG9hZGVkbWV0YWRhdGEiLCJsb3N0cG9pbnRlcmNhcHR1cmUiLCJtb3VzZWRvd24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlbW92ZSIsIm1vdXNlb3V0IiwibW91c2VvdmVyIiwibW91c2V1cCIsIm1vdXNld2hlZWwiLCJvcmllbnRhdGlvbmNoYW5nZSIsInBhdXNlIiwicGxheSIsInBsYXlpbmciLCJwb2ludGVyY2FuY2VsIiwicG9pbnRlcmRvd24iLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJwb2ludGVybG9ja2NoYW5nZSIsIm1venBvaW50ZXJsb2NrY2hhbmdlIiwid2Via2l0cG9pbnRlcmxvY2tlcmNoYW5nZSIsInBvaW50ZXJsb2NrZXJyb3IiLCJtb3pwb2ludGVybG9ja2Vycm9yIiwid2Via2l0cG9pbnRlcmxvY2tlcnJvciIsInBvaW50ZXJtb3ZlIiwicG9pbnRvdXQiLCJwb2ludGVyb3ZlciIsInBvaW50ZXJ1cCIsInByb2dyZXNzIiwicmF0ZWNoYW5nZSIsInJlc2V0IiwicmVzaXplIiwic2Nyb2xsIiwic2Vla2VkIiwic2Vla2luZyIsInNlbGVjdCIsInNlbGVjdGlvbmNoYW5nZSIsInNlbGVjdHN0YXJ0Iiwic2hvdyIsInNvcnQiLCJzdGFsbGVkIiwic3VibWl0Iiwic3VzcGVuZCIsInRpbWV1cGRhdGUiLCJ2b2x1bWVjaGFuZ2UiLCJ0b3VjaGNhbmNlbCIsInRvdWNobW92ZSIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCIsInRyYW5zaXRpb25jYW5jZWwiLCJ0cmFuc2l0aW9uZW5kIiwid2FpdGluZyIsIndoZWVsIl0sITApLFsid2ViZ2xjb250ZXh0cmVzdG9yZWQiLCJ3ZWJnbGNvbnRleHRsb3N0Iiwid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciJdLCEwKSxbImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZWVycm9yIl0sITApLFsidG9nZ2xlIl0sITApLFsiYWZ0ZXJzY3JpcHRleGVjdXRlIiwiYmVmb3Jlc2NyaXB0ZXhlY3V0ZSIsIkRPTUNvbnRlbnRMb2FkZWQiLCJmcmVlemUiLCJmdWxsc2NyZWVuY2hhbmdlIiwibW96ZnVsbHNjcmVlbmNoYW5nZSIsIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCJtc2Z1bGxzY3JlZW5jaGFuZ2UiLCJmdWxsc2NyZWVuZXJyb3IiLCJtb3pmdWxsc2NyZWVuZXJyb3IiLCJ3ZWJraXRmdWxsc2NyZWVuZXJyb3IiLCJtc2Z1bGxzY3JlZW5lcnJvciIsInJlYWR5c3RhdGVjaGFuZ2UiLCJ2aXNpYmlsaXR5Y2hhbmdlIiwicmVzdW1lIl0sITApLFsiYWJzb2x1dGVkZXZpY2VvcmllbnRhdGlvbiIsImFmdGVyaW5wdXQiLCJhZnRlcnByaW50IiwiYXBwaW5zdGFsbGVkIiwiYmVmb3JlaW5zdGFsbHByb21wdCIsImJlZm9yZXByaW50IiwiYmVmb3JldW5sb2FkIiwiZGV2aWNlbGlnaHQiLCJkZXZpY2Vtb3Rpb24iLCJkZXZpY2VvcmllbnRhdGlvbiIsImRldmljZW9yaWVudGF0aW9uYWJzb2x1dGUiLCJkZXZpY2Vwcm94aW1pdHkiLCJoYXNoY2hhbmdlIiwibGFuZ3VhZ2VjaGFuZ2UiLCJtZXNzYWdlIiwibW96YmVmb3JlcGFpbnQiLCJvZmZsaW5lIiwib25saW5lIiwicGFpbnQiLCJwYWdlc2hvdyIsInBhZ2VoaWRlIiwicG9wc3RhdGUiLCJyZWplY3Rpb25oYW5kbGVkIiwic3RvcmFnZSIsInVuaGFuZGxlZHJlamVjdGlvbiIsInVubG9hZCIsInVzZXJwcm94aW1pdHkiLCJ2cmRpc3BsYXljb25uZWN0ZWQiLCJ2cmRpc3BsYXlkaXNjb25uZWN0ZWQiLCJ2cmRpc3BsYXlwcmVzZW50Y2hhbmdlIl0sITApLFsiYmVmb3JlY29weSIsImJlZm9yZWN1dCIsImJlZm9yZXBhc3RlIiwiY29weSIsImN1dCIsInBhc3RlIiwiZHJhZ3N0YXJ0IiwibG9hZGVuZCIsImFuaW1hdGlvbnN0YXJ0Iiwic2VhcmNoIiwidHJhbnNpdGlvbnJ1biIsInRyYW5zaXRpb25zdGFydCIsIndlYmtpdGFuaW1hdGlvbmVuZCIsIndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbiIsIndlYmtpdGFuaW1hdGlvbnN0YXJ0Iiwid2Via2l0dHJhbnNpdGlvbmVuZCJdLCEwKSxbImFjdGl2YXRlIiwiYWZ0ZXJ1cGRhdGUiLCJhcmlhcmVxdWVzdCIsImJlZm9yZWFjdGl2YXRlIiwiYmVmb3JlZGVhY3RpdmF0ZSIsImJlZm9yZWVkaXRmb2N1cyIsImJlZm9yZXVwZGF0ZSIsImNlbGxjaGFuZ2UiLCJjb250cm9sc2VsZWN0IiwiZGF0YWF2YWlsYWJsZSIsImRhdGFzZXRjaGFuZ2VkIiwiZGF0YXNldGNvbXBsZXRlIiwiZXJyb3J1cGRhdGUiLCJmaWx0ZXJjaGFuZ2UiLCJsYXlvdXRjb21wbGV0ZSIsImxvc2VjYXB0dXJlIiwibW92ZSIsIm1vdmVlbmQiLCJtb3Zlc3RhcnQiLCJwcm9wZXJ0eWNoYW5nZSIsInJlc2l6ZWVuZCIsInJlc2l6ZXN0YXJ0Iiwicm93ZW50ZXIiLCJyb3dleGl0Iiwicm93c2RlbGV0ZSIsInJvd3NpbnNlcnRlZCIsImNvbW1hbmQiLCJjb21wYXNzbmVlZHNjYWxpYnJhdGlvbiIsImRlYWN0aXZhdGUiLCJoZWxwIiwibXNjb250ZW50em9vbSIsIm1zbWFuaXB1bGF0aW9uc3RhdGVjaGFuZ2VkIiwibXNnZXN0dXJlY2hhbmdlIiwibXNnZXN0dXJlZG91YmxldGFwIiwibXNnZXN0dXJlZW5kIiwibXNnZXN0dXJlaG9sZCIsIm1zZ2VzdHVyZXN0YXJ0IiwibXNnZXN0dXJldGFwIiwibXNnb3Rwb2ludGVyY2FwdHVyZSIsIm1zaW5lcnRpYXN0YXJ0IiwibXNsb3N0cG9pbnRlcmNhcHR1cmUiLCJtc3BvaW50ZXJjYW5jZWwiLCJtc3BvaW50ZXJkb3duIiwibXNwb2ludGVyZW50ZXIiLCJtc3BvaW50ZXJob3ZlciIsIm1zcG9pbnRlcmxlYXZlIiwibXNwb2ludGVybW92ZSIsIm1zcG9pbnRlcm91dCIsIm1zcG9pbnRlcm92ZXIiLCJtc3BvaW50ZXJ1cCIsInBvaW50ZXJvdXQiLCJtc3NpdGVtb2RlanVtcGxpc3RpdGVtcmVtb3ZlZCIsIm1zdGh1bWJuYWlsY2xpY2siLCJzdG9wIiwic3RvcmFnZWNvbW1pdCJdLCEwKTsoUT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KVsoImxlZ2FjeVBhdGNoIiwoUS5fX1pvbmVfc3ltYm9sX3ByZWZpeHx8Il9fem9uZV9zeW1ib2xfXyIpKyJsZWdhY3lQYXRjaCIpXT1mdW5jdGlvbigpe3ZhciBJPVEuWm9uZTtJLl9fbG9hZF9wYXRjaCgiZGVmaW5lUHJvcGVydHkiLGZ1bmN0aW9uKFgsJCxuZSl7bmUuX3JlZGVmaW5lUHJvcGVydHk9VHQsZmk9Wm9uZS5fX3N5bWJvbF9fLFdpPU9iamVjdFtmaSgiZGVmaW5lUHJvcGVydHkiKV09T2JqZWN0LmRlZmluZVByb3BlcnR5LHFpPU9iamVjdFtmaSgiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIildPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZWU9T2JqZWN0LmNyZWF0ZSxXPWZpKCJ1bmNvbmZpZ3VyYWJsZXMiKSxPYmplY3QuZGVmaW5lUHJvcGVydHk9ZnVuY3Rpb24oUSxyZSxfZSl7aWYobW4oUSxyZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFzc2lnbiB0byByZWFkIG9ubHkgcHJvcGVydHkgJyIrcmUrIicgb2YgIitRKTt2YXIgST1fZS5jb25maWd1cmFibGU7cmV0dXJuInByb3RvdHlwZSIhPT1yZSYmKF9lPXFlKFEscmUsX2UpKSx3bihRLHJlLF9lLEkpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihRLHJlKXtPYmplY3Qua2V5cyhyZSkuZm9yRWFjaChmdW5jdGlvbihuZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFEsbmUscmVbbmVdKX0pO2Zvcih2YXIgX2U9MCxJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocmUpO19lPEkubGVuZ3RoO19lKyspe3ZhciBYPUlbX2VdO09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocmUsWCk/LmVudW1lcmFibGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShRLFgscmVbWF0pfXJldHVybiBRfSxPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKFEscmUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgcmUmJiFPYmplY3QuaXNGcm96ZW4ocmUpJiZPYmplY3Qua2V5cyhyZSkuZm9yRWFjaChmdW5jdGlvbihfZSl7cmVbX2VdPXFlKFEsX2UscmVbX2VdKX0pLGVlKFEscmUpfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKFEscmUpe3ZhciBfZT1xaShRLHJlKTtyZXR1cm4gX2UmJm1uKFEscmUpJiYoX2UuY29uZmlndXJhYmxlPSExKSxfZX19KSxJLl9fbG9hZF9wYXRjaCgicmVnaXN0ZXJFbGVtZW50IixmdW5jdGlvbihYLCQsbmUpeyFmdW5jdGlvbihRLHJlKXt2YXIgX2U9cmUuZ2V0R2xvYmFsT2JqZWN0cygpOyhfZS5pc0Jyb3dzZXJ8fF9lLmlzTWl4KSYmInJlZ2lzdGVyRWxlbWVudCJpbiBRLmRvY3VtZW50JiZyZS5wYXRjaENhbGxiYWNrcyhyZSxkb2N1bWVudCwiRG9jdW1lbnQiLCJyZWdpc3RlckVsZW1lbnQiLFsiY3JlYXRlZENhbGxiYWNrIiwiYXR0YWNoZWRDYWxsYmFjayIsImRldGFjaGVkQ2FsbGJhY2siLCJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siXSl9KFgsbmUpfSksSS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0TGVnYWN5IixmdW5jdGlvbihYLCQsbmUpeyhmdW5jdGlvbihRLHJlKXt2YXIgX2U9cmUuZ2V0R2xvYmFsT2JqZWN0cygpLEk9X2UuZXZlbnROYW1lcyxYPV9lLmdsb2JhbFNvdXJjZXMsJD1fZS56b25lU3ltYm9sRXZlbnROYW1lcyxuZT1fZS5UUlVFX1NUUixtZT1fZS5GQUxTRV9TVFIsS2U9X2UuWk9ORV9TWU1CT0xfUFJFRklYLEplPSJBcHBsaWNhdGlvbkNhY2hlLEV2ZW50U291cmNlLEZpbGVSZWFkZXIsSW5wdXRNZXRob2RDb250ZXh0LE1lZGlhQ29udHJvbGxlcixNZXNzYWdlUG9ydCxOb2RlLFBlcmZvcm1hbmNlLFNWR0VsZW1lbnRJbnN0YW5jZSxTaGFyZWRXb3JrZXIsVGV4dFRyYWNrLFRleHRUcmFja0N1ZSxUZXh0VHJhY2tMaXN0LFdlYktpdE5hbWVkRmxvdyxXaW5kb3csV29ya2VyLFdvcmtlckdsb2JhbFNjb3BlLFhNTEh0dHBSZXF1ZXN0LFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQsWE1MSHR0cFJlcXVlc3RVcGxvYWQsSURCUmVxdWVzdCxJREJPcGVuREJSZXF1ZXN0LElEQkRhdGFiYXNlLElEQlRyYW5zYWN0aW9uLElEQkN1cnNvcixEQkluZGV4LFdlYlNvY2tldCIuc3BsaXQoIiwiKSxmdD0iRXZlbnRUYXJnZXQiLEN0PVtdLEl0PVEud3RmLE50PSJBbmNob3IsQXJlYSxBdWRpbyxCUixCYXNlLEJhc2VGb250LEJvZHksQnV0dG9uLENhbnZhcyxDb250ZW50LERMaXN0LERpcmVjdG9yeSxEaXYsRW1iZWQsRmllbGRTZXQsRm9udCxGb3JtLEZyYW1lLEZyYW1lU2V0LEhSLEhlYWQsSGVhZGluZyxIdG1sLElGcmFtZSxJbWFnZSxJbnB1dCxLZXlnZW4sTEksTGFiZWwsTGVnZW5kLExpbmssTWFwLE1hcnF1ZWUsTWVkaWEsTWVudSxNZXRhLE1ldGVyLE1vZCxPTGlzdCxPYmplY3QsT3B0R3JvdXAsT3B0aW9uLE91dHB1dCxQYXJhZ3JhcGgsUHJlLFByb2dyZXNzLFF1b3RlLFNjcmlwdCxTZWxlY3QsU291cmNlLFNwYW4sU3R5bGUsVGFibGVDYXB0aW9uLFRhYmxlQ2VsbCxUYWJsZUNvbCxUYWJsZSxUYWJsZVJvdyxUYWJsZVNlY3Rpb24sVGV4dEFyZWEsVGl0bGUsVHJhY2ssVUxpc3QsVW5rbm93bixWaWRlbyIuc3BsaXQoIiwiKTtJdD9DdD1OdC5tYXAoZnVuY3Rpb24oVnIpe3JldHVybiJIVE1MIitWcisiRWxlbWVudCJ9KS5jb25jYXQoSmUpOlFbZnRdP0N0LnB1c2goZnQpOkN0PUplO2Zvcih2YXIgYm49US5fX1pvbmVfZGlzYWJsZV9JRV9jaGVja3x8ITEscnI9US5fX1pvbmVfZW5hYmxlX2Nyb3NzX2NvbnRleHRfY2hlY2t8fCExLEFpPXJlLmlzSUVPckVkZ2UoKSxIbj0iW29iamVjdCBGdW5jdGlvbldyYXBwZXJdIixPdD0iZnVuY3Rpb24gX19CUk9XU0VSVE9PTFNfQ09OU09MRV9TQUZFRlVOQygpIHsgW25hdGl2ZSBjb2RlXSB9Iix3aT17TVNQb2ludGVyQ2FuY2VsOiJwb2ludGVyY2FuY2VsIixNU1BvaW50ZXJEb3duOiJwb2ludGVyZG93biIsTVNQb2ludGVyRW50ZXI6InBvaW50ZXJlbnRlciIsTVNQb2ludGVySG92ZXI6InBvaW50ZXJob3ZlciIsTVNQb2ludGVyTGVhdmU6InBvaW50ZXJsZWF2ZSIsTVNQb2ludGVyTW92ZToicG9pbnRlcm1vdmUiLE1TUG9pbnRlck91dDoicG9pbnRlcm91dCIsTVNQb2ludGVyT3ZlcjoicG9pbnRlcm92ZXIiLE1TUG9pbnRlclVwOiJwb2ludGVydXAifSxhaT0wO2FpPEkubGVuZ3RoO2FpKyspe3ZhciBZaT1LZSsoKFluPUlbYWldKSttZSksQW49S2UrKFluK25lKTskW1luXT17fSwkW1luXVttZV09WWksJFtZbl1bbmVdPUFufWZvcihhaT0wO2FpPE50Lmxlbmd0aDthaSsrKWZvcih2YXIgVW49TnRbYWldLFNpPVhbVW5dPXt9LGpuPTA7am48SS5sZW5ndGg7am4rKyl7dmFyIFluO1NpW1luPUlbam5dXT1VbisiLmFkZEV2ZW50TGlzdGVuZXI6IitZbn12YXIgYnI9W107Zm9yKGFpPTA7YWk8Q3QubGVuZ3RoO2FpKyspe3ZhciB4YT1RW0N0W2FpXV07YnIucHVzaCh4YSYmeGEucHJvdG90eXBlKX1yZS5wYXRjaEV2ZW50VGFyZ2V0KFEscmUsYnIse3ZoOmZ1bmN0aW9uKFZyLEFyLFN0LHdlKXtpZighYm4mJkFpKWlmKHJyKXRyeXtpZigoRWU9QXIudG9TdHJpbmcoKSk9PT1Ibnx8RWU9PU90KXJldHVybiBWci5hcHBseShTdCx3ZSksITF9Y2F0Y2h7cmV0dXJuIFZyLmFwcGx5KFN0LHdlKSwhMX1lbHNle3ZhciBFZTtpZigoRWU9QXIudG9TdHJpbmcoKSk9PT1Ibnx8RWU9PU90KXJldHVybiBWci5hcHBseShTdCx3ZSksITF9ZWxzZSBpZihycil0cnl7QXIudG9TdHJpbmcoKX1jYXRjaHtyZXR1cm4gVnIuYXBwbHkoU3Qsd2UpLCExfXJldHVybiEwfSx0cmFuc2ZlckV2ZW50TmFtZTpmdW5jdGlvbihWcil7cmV0dXJuIHdpW1ZyXXx8VnJ9fSksWm9uZVtyZS5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV09ISFRW2Z0XX0pKFgsbmUpLGZ1bmN0aW9uKFEscmUpe3ZhciBfZT1RLmdldEdsb2JhbE9iamVjdHMoKTtpZigoIV9lLmlzTm9kZXx8X2UuaXNNaXgpJiYhZnVuY3Rpb24oUSxyZSl7dmFyIF9lPVEuZ2V0R2xvYmFsT2JqZWN0cygpO2lmKChfZS5pc0Jyb3dzZXJ8fF9lLmlzTWl4KSYmIVEuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIpJiZ0eXBlb2YgRWxlbWVudDwidSIpe3ZhciAkPVEuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIik7aWYoJCYmISQuY29uZmlndXJhYmxlKXJldHVybiExO2lmKCQpe1EuT2JqZWN0RGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KTt2YXIgbWU9ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5vbmNsaWNrO3JldHVybiBRLk9iamVjdERlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIiwkKSxtZX19dmFyIEtlPXJlLlhNTEh0dHBSZXF1ZXN0O2lmKCFLZSlyZXR1cm4hMTt2YXIgbHQ9Im9ucmVhZHlzdGF0ZWNoYW5nZSIsSmU9S2UucHJvdG90eXBlLGZ0PVEuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEplLGx0KTtpZihmdClyZXR1cm4gUS5PYmplY3REZWZpbmVQcm9wZXJ0eShKZSxsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSksbWU9ISEoQ3Q9bmV3IEtlKS5vbnJlYWR5c3RhdGVjaGFuZ2UsUS5PYmplY3REZWZpbmVQcm9wZXJ0eShKZSxsdCxmdHx8e30pLG1lO3ZhciBJdD1RLnN5bWJvbCgiZmFrZSIpO1EuT2JqZWN0RGVmaW5lUHJvcGVydHkoSmUsbHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW0l0XX0sc2V0OmZ1bmN0aW9uKEFpKXt0aGlzW0l0XT1BaX19KTt2YXIgQ3QsTnQ9ZnVuY3Rpb24oKXt9O3JldHVybihDdD1uZXcgS2UpLm9ucmVhZHlzdGF0ZWNoYW5nZT1OdCxtZT1DdFtJdF09PT1OdCxDdC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxtZX0oUSxyZSkpe3ZhciAkPXR5cGVvZiBXZWJTb2NrZXQ8InUiOyhmdW5jdGlvbihRKXtmb3IodmFyIHJlPVEuc3ltYm9sKCJ1bmJvdW5kIiksX2U9ZnVuY3Rpb24oWCl7dmFyICQ9RXNbWF0sbmU9Im9uIiskO3NlbGYuYWRkRXZlbnRMaXN0ZW5lcigkLGZ1bmN0aW9uKG1lKXt2YXIgbHQsSmUsS2U9bWUudGFyZ2V0O2ZvcihKZT1LZT9LZS5jb25zdHJ1Y3Rvci5uYW1lKyIuIituZToidW5rbm93bi4iK25lO0tlOylLZVtuZV0mJiFLZVtuZV1bcmVdJiYoKGx0PVEud3JhcFdpdGhDdXJyZW50Wm9uZShLZVtuZV0sSmUpKVtyZV09S2VbbmVdLEtlW25lXT1sdCksS2U9S2UucGFyZW50RWxlbWVudH0sITApfSxJPTA7STxFcy5sZW5ndGg7SSsrKV9lKEkpfSkoUSksUS5wYXRjaENsYXNzKCJYTUxIdHRwUmVxdWVzdCIpLCQmJmZ1bmN0aW9uKFEscmUpe3ZhciBfZT1RLmdldEdsb2JhbE9iamVjdHMoKSxJPV9lLkFERF9FVkVOVF9MSVNURU5FUl9TVFIsWD1fZS5SRU1PVkVfRVZFTlRfTElTVEVORVJfU1RSLCQ9cmUuV2ViU29ja2V0O3JlLkV2ZW50VGFyZ2V0fHxRLnBhdGNoRXZlbnRUYXJnZXQocmUsUSxbJC5wcm90b3R5cGVdKSxyZS5XZWJTb2NrZXQ9ZnVuY3Rpb24oS2UsbHQpe3ZhciBmdCxDdCxKZT1hcmd1bWVudHMubGVuZ3RoPjE/bmV3ICQoS2UsbHQpOm5ldyAkKEtlKSxJdD1RLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihKZSwib25tZXNzYWdlIik7cmV0dXJuIEl0JiYhMT09PUl0LmNvbmZpZ3VyYWJsZT8oZnQ9US5PYmplY3RDcmVhdGUoSmUpLEN0PUplLFtJLFgsInNlbmQiLCJjbG9zZSJdLmZvckVhY2goZnVuY3Rpb24oTnQpe2Z0W050XT1mdW5jdGlvbigpe3ZhciBibj1RLkFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpO2lmKE50PT09SXx8TnQ9PT1YKXt2YXIgcnI9Ym4ubGVuZ3RoPjA/Ym5bMF06dm9pZCAwO2lmKHJyKXt2YXIgQWk9Wm9uZS5fX3N5bWJvbF9fKCJPTl9QUk9QRVJUWSIrcnIpO0plW0FpXT1mdFtBaV19fXJldHVybiBKZVtOdF0uYXBwbHkoSmUsYm4pfX0pKTpmdD1KZSxRLnBhdGNoT25Qcm9wZXJ0aWVzKGZ0LFsiY2xvc2UiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcGVuIl0sQ3QpLGZ0fTt2YXIgbmU9cmUuV2ViU29ja2V0O2Zvcih2YXIgbWUgaW4gJCluZVttZV09JFttZV19KFEscmUpLFpvbmVbUS5zeW1ib2woInBhdGNoRXZlbnRzIildPSEwfX0obmUsWCl9KX07dmFyIGJhPWYoInpvbmVUYXNrIik7ZnVuY3Rpb24gYmMoUSxyZSxfZSxJKXt2YXIgWD1udWxsLCQ9bnVsbDtfZSs9STt2YXIgbmU9e307ZnVuY3Rpb24gbWUobHQpe3ZhciBKZT1sdC5kYXRhO3JldHVybiBKZS5hcmdzWzBdPWZ1bmN0aW9uKCl7cmV0dXJuIGx0Lmludm9rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEplLmhhbmRsZUlkPVguYXBwbHkoUSxKZS5hcmdzKSxsdH1mdW5jdGlvbiBLZShsdCl7cmV0dXJuICQuY2FsbChRLGx0LmRhdGEuaGFuZGxlSWQpfVg9WShRLHJlKz1JLGZ1bmN0aW9uKGx0KXtyZXR1cm4gZnVuY3Rpb24oSmUsZnQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmdFswXSl7dmFyIEN0PXtpc1BlcmlvZGljOiJJbnRlcnZhbCI9PT1JLGRlbGF5OiJUaW1lb3V0Ij09PUl8fCJJbnRlcnZhbCI9PT1JP2Z0WzFdfHwwOnZvaWQgMCxhcmdzOmZ0fSxJdD1mdFswXTtmdFswXT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gSXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7Q3QuaXNQZXJpb2RpY3x8KCJudW1iZXIiPT10eXBlb2YgQ3QuaGFuZGxlSWQ/ZGVsZXRlIG5lW0N0LmhhbmRsZUlkXTpDdC5oYW5kbGVJZCYmKEN0LmhhbmRsZUlkW2JhXT1udWxsKSl9fTt2YXIgTnQ9aChyZSxmdFswXSxDdCxtZSxLZSk7aWYoIU50KXJldHVybiBOdDt2YXIgYm49TnQuZGF0YS5oYW5kbGVJZDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGJuP25lW2JuXT1OdDpibiYmKGJuW2JhXT1OdCksYm4mJmJuLnJlZiYmYm4udW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBibi5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBibi51bnJlZiYmKE50LnJlZj1ibi5yZWYuYmluZChibiksTnQudW5yZWY9Ym4udW5yZWYuYmluZChibikpLCJudW1iZXIiPT10eXBlb2YgYm58fGJuP2JuOk50fXJldHVybiBsdC5hcHBseShRLGZ0KX19KSwkPVkoUSxfZSxmdW5jdGlvbihsdCl7cmV0dXJuIGZ1bmN0aW9uKEplLGZ0KXt2YXIgSXQsQ3Q9ZnRbMF07Im51bWJlciI9PXR5cGVvZiBDdD9JdD1uZVtDdF06KEl0PUN0JiZDdFtiYV0pfHwoSXQ9Q3QpLEl0JiYic3RyaW5nIj09dHlwZW9mIEl0LnR5cGU/Im5vdFNjaGVkdWxlZCIhPT1JdC5zdGF0ZSYmKEl0LmNhbmNlbEZuJiZJdC5kYXRhLmlzUGVyaW9kaWN8fDA9PT1JdC5ydW5Db3VudCkmJigibnVtYmVyIj09dHlwZW9mIEN0P2RlbGV0ZSBuZVtDdF06Q3QmJihDdFtiYV09bnVsbCksSXQuem9uZS5jYW5jZWxUYXNrKEl0KSk6bHQuYXBwbHkoUSxmdCl9fSl9Wm9uZS5fX2xvYWRfcGF0Y2goImxlZ2FjeSIsZnVuY3Rpb24oUSl7dmFyIHJlPVFbWm9uZS5fX3N5bWJvbF9fKCJsZWdhY3lQYXRjaCIpXTtyZSYmcmUoKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJxdWV1ZU1pY3JvdGFzayIsZnVuY3Rpb24oUSxyZSxfZSl7X2UucGF0Y2hNZXRob2QoUSwicXVldWVNaWNyb3Rhc2siLGZ1bmN0aW9uKEkpe3JldHVybiBmdW5jdGlvbihYLCQpe3JlLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInF1ZXVlTWljcm90YXNrIiwkWzBdKX19KX0pLFpvbmUuX19sb2FkX3BhdGNoKCJ0aW1lcnMiLGZ1bmN0aW9uKFEpe3ZhciBfZT0iY2xlYXIiO2JjKFEsInNldCIsX2UsIlRpbWVvdXQiKSxiYyhRLCJzZXQiLF9lLCJJbnRlcnZhbCIpLGJjKFEsInNldCIsX2UsIkltbWVkaWF0ZSIpfSksWm9uZS5fX2xvYWRfcGF0Y2goInJlcXVlc3RBbmltYXRpb25GcmFtZSIsZnVuY3Rpb24oUSl7YmMoUSwicmVxdWVzdCIsImNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksYmMoUSwibW96UmVxdWVzdCIsIm1vekNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksYmMoUSwid2Via2l0UmVxdWVzdCIsIndlYmtpdENhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIil9KSxab25lLl9fbG9hZF9wYXRjaCgiYmxvY2tpbmciLGZ1bmN0aW9uKFEscmUpe2Zvcih2YXIgX2U9WyJhbGVydCIsInByb21wdCIsImNvbmZpcm0iXSxJPTA7STxfZS5sZW5ndGg7SSsrKVkoUSxfZVtJXSxmdW5jdGlvbigkLG5lLG1lKXtyZXR1cm4gZnVuY3Rpb24oS2UsbHQpe3JldHVybiByZS5jdXJyZW50LnJ1bigkLFEsbHQsbWUpfX0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0IixmdW5jdGlvbihRLHJlLF9lKXsoZnVuY3Rpb24oUSxyZSl7cmUucGF0Y2hFdmVudFByb3RvdHlwZShRLHJlKX0pKFEsX2UpLGZ1bmN0aW9uKFEscmUpe2lmKCFab25lW3JlLnN5bWJvbCgicGF0Y2hFdmVudFRhcmdldCIpXSl7Zm9yKHZhciBfZT1yZS5nZXRHbG9iYWxPYmplY3RzKCksST1fZS5ldmVudE5hbWVzLFg9X2Uuem9uZVN5bWJvbEV2ZW50TmFtZXMsJD1fZS5UUlVFX1NUUixuZT1fZS5GQUxTRV9TVFIsbWU9X2UuWk9ORV9TWU1CT0xfUFJFRklYLEtlPTA7S2U8SS5sZW5ndGg7S2UrKyl7dmFyIGx0PUlbS2VdLEN0PW1lKyhsdCtuZSksSXQ9bWUrKGx0KyQpO1hbbHRdPXt9LFhbbHRdW25lXT1DdCxYW2x0XVskXT1JdH12YXIgTnQ9US5FdmVudFRhcmdldDtOdCYmTnQucHJvdG90eXBlJiZyZS5wYXRjaEV2ZW50VGFyZ2V0KFEscmUsW050JiZOdC5wcm90b3R5cGVdKX19KFEsX2UpO3ZhciBJPVEuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtJJiZJLnByb3RvdHlwZSYmX2UucGF0Y2hFdmVudFRhcmdldChRLF9lLFtJLnByb3RvdHlwZV0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIk11dGF0aW9uT2JzZXJ2ZXIiLGZ1bmN0aW9uKFEscmUsX2Upe2RlKCJNdXRhdGlvbk9ic2VydmVyIiksZGUoIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsZnVuY3Rpb24oUSxyZSxfZSl7ZGUoIkludGVyc2VjdGlvbk9ic2VydmVyIil9KSxab25lLl9fbG9hZF9wYXRjaCgiRmlsZVJlYWRlciIsZnVuY3Rpb24oUSxyZSxfZSl7ZGUoIkZpbGVSZWFkZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJvbl9wcm9wZXJ0eSIsZnVuY3Rpb24oUSxyZSxfZSl7IWZ1bmN0aW9uKFEscmUpe2lmKCghenx8dWUpJiYhWm9uZVtRLnN5bWJvbCgicGF0Y2hFdmVudHMiKV0pe3ZhciBfZT1yZS5fX1pvbmVfaWdub3JlX29uX3Byb3BlcnRpZXMsST1bXTtpZihmZSl7dmFyIFg9d2luZG93O0k9SS5jb25jYXQoWyJEb2N1bWVudCIsIlNWR0VsZW1lbnQiLCJFbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJIVE1MQm9keUVsZW1lbnQiLCJIVE1MTWVkaWFFbGVtZW50IiwiSFRNTEZyYW1lU2V0RWxlbWVudCIsIkhUTUxGcmFtZUVsZW1lbnQiLCJIVE1MSUZyYW1lRWxlbWVudCIsIkhUTUxNYXJxdWVlRWxlbWVudCIsIldvcmtlciJdKTt2YXIgJD1mdW5jdGlvbigpe3RyeXt2YXIgUT14Lm5hdmlnYXRvci51c2VyQWdlbnQ7aWYoLTEhPT1RLmluZGV4T2YoIk1TSUUgIil8fC0xIT09US5pbmRleE9mKCJUcmlkZW50LyIpKXJldHVybiEwfWNhdGNoe31yZXR1cm4hMX0oKT9be3RhcmdldDpYLGlnbm9yZVByb3BlcnRpZXM6WyJlcnJvciJdfV06W107YnQoWCxobihYKSxfZSYmX2UuY29uY2F0KCQpLGUoWCkpfUk9SS5jb25jYXQoWyJYTUxIdHRwUmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQiLCJJREJJbmRleCIsIklEQlJlcXVlc3QiLCJJREJPcGVuREJSZXF1ZXN0IiwiSURCRGF0YWJhc2UiLCJJREJUcmFuc2FjdGlvbiIsIklEQkN1cnNvciIsIldlYlNvY2tldCJdKTtmb3IodmFyIG5lPTA7bmU8SS5sZW5ndGg7bmUrKyl7dmFyIG1lPXJlW0lbbmVdXTttZSYmbWUucHJvdG90eXBlJiZidChtZS5wcm90b3R5cGUsaG4obWUucHJvdG90eXBlKSxfZSl9fX0oX2UsUSl9KSxab25lLl9fbG9hZF9wYXRjaCgiY3VzdG9tRWxlbWVudHMiLGZ1bmN0aW9uKFEscmUsX2UpeyFmdW5jdGlvbihRLHJlKXt2YXIgX2U9cmUuZ2V0R2xvYmFsT2JqZWN0cygpOyhfZS5pc0Jyb3dzZXJ8fF9lLmlzTWl4KSYmUS5jdXN0b21FbGVtZW50cyYmImN1c3RvbUVsZW1lbnRzImluIFEmJnJlLnBhdGNoQ2FsbGJhY2tzKHJlLFEuY3VzdG9tRWxlbWVudHMsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIixbImNvbm5lY3RlZENhbGxiYWNrIiwiZGlzY29ubmVjdGVkQ2FsbGJhY2siLCJhZG9wdGVkQ2FsbGJhY2siLCJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siXSl9KFEsX2UpfSksWm9uZS5fX2xvYWRfcGF0Y2goIlhIUiIsZnVuY3Rpb24oUSxyZSl7IWZ1bmN0aW9uKGx0KXt2YXIgSmU9bHQuWE1MSHR0cFJlcXVlc3Q7aWYoSmUpe3ZhciBmdD1KZS5wcm90b3R5cGUsSXQ9ZnRbYV0sTnQ9ZnRbbF07aWYoIUl0KXt2YXIgYm49bHQuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtpZihibil7dmFyIHJyPWJuLnByb3RvdHlwZTtJdD1yclthXSxOdD1ycltsXX19dmFyIEFpPSJyZWFkeXN0YXRlY2hhbmdlIixNbj0ic2NoZWR1bGVkIixhaT1ZKGZ0LCJvcGVuIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihVbixTaSl7cmV0dXJuIFVuW0ldPTA9PVNpWzJdLFVuW25lXT1TaVsxXSxhaS5hcHBseShVbixTaSl9fSksJG49ZigiZmV0Y2hUYXNrQWJvcnRpbmciKSxZdD1mKCJmZXRjaFRhc2tTY2hlZHVsaW5nIiksWWk9WShmdCwic2VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oVW4sU2kpe2lmKCEwPT09cmUuY3VycmVudFtZdF18fFVuW0ldKXJldHVybiBZaS5hcHBseShVbixTaSk7dmFyIGpuPXt0YXJnZXQ6VW4sdXJsOlVuW25lXSxpc1BlcmlvZGljOiExLGFyZ3M6U2ksYWJvcnRlZDohMX0sRHI9aCgiWE1MSHR0cFJlcXVlc3Quc2VuZCIsT3Qsam4sSG4sd2kpO1VuJiYhMD09PVVuW21lXSYmIWpuLmFib3J0ZWQmJkRyLnN0YXRlPT09TW4mJkRyLmludm9rZSgpfX0pLEFuPVkoZnQsImFib3J0IixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihVbixTaSl7dmFyIGpuPWZ1bmN0aW9uKFVuKXtyZXR1cm4gVW5bX2VdfShVbik7aWYoam4mJiJzdHJpbmciPT10eXBlb2Ygam4udHlwZSl7aWYobnVsbD09am4uY2FuY2VsRm58fGpuLmRhdGEmJmpuLmRhdGEuYWJvcnRlZClyZXR1cm47am4uem9uZS5jYW5jZWxUYXNrKGpuKX1lbHNlIGlmKCEwPT09cmUuY3VycmVudFskbl0pcmV0dXJuIEFuLmFwcGx5KFVuLFNpKX19KX1mdW5jdGlvbiBIbihVbil7dmFyIFNpPVVuLmRhdGEsam49U2kudGFyZ2V0O2puWyRdPSExLGpuW21lXT0hMTt2YXIgRHI9am5bWF07SXR8fChJdD1qblthXSxOdD1qbltsXSksRHImJk50LmNhbGwoam4sQWksRHIpO3ZhciBicj1qbltYXT1mdW5jdGlvbigpe2lmKGpuLnJlYWR5U3RhdGU9PT1qbi5ET05FKWlmKCFTaS5hYm9ydGVkJiZqblskXSYmVW4uc3RhdGU9PT1Nbil7dmFyIFZyPWpuW3JlLl9fc3ltYm9sX18oImxvYWRmYWxzZSIpXTtpZigwIT09am4uc3RhdHVzJiZWciYmVnIubGVuZ3RoPjApe3ZhciBBcj1Vbi5pbnZva2U7VW4uaW52b2tlPWZ1bmN0aW9uKCl7Zm9yKHZhciBTdD1qbltyZS5fX3N5bWJvbF9fKCJsb2FkZmFsc2UiKV0sd2U9MDt3ZTxTdC5sZW5ndGg7d2UrKylTdFt3ZV09PT1VbiYmU3Quc3BsaWNlKHdlLDEpOyFTaS5hYm9ydGVkJiZVbi5zdGF0ZT09PU1uJiZBci5jYWxsKFVuKX0sVnIucHVzaChVbil9ZWxzZSBVbi5pbnZva2UoKX1lbHNlIVNpLmFib3J0ZWQmJiExPT09am5bJF0mJihqblttZV09ITApfTtyZXR1cm4gSXQuY2FsbChqbixBaSxiciksam5bX2VdfHwoam5bX2VdPVVuKSxZaS5hcHBseShqbixTaS5hcmdzKSxqblskXT0hMCxVbn1mdW5jdGlvbiBPdCgpe31mdW5jdGlvbiB3aShVbil7dmFyIFNpPVVuLmRhdGE7cmV0dXJuIFNpLmFib3J0ZWQ9ITAsQW4uYXBwbHkoU2kudGFyZ2V0LFNpLmFyZ3MpfX0oUSk7dmFyIF9lPWYoInhoclRhc2siKSxJPWYoInhoclN5bmMiKSxYPWYoInhockxpc3RlbmVyIiksJD1mKCJ4aHJTY2hlZHVsZWQiKSxuZT1mKCJ4aHJVUkwiKSxtZT1mKCJ4aHJFcnJvckJlZm9yZVNjaGVkdWxlZCIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImdlb2xvY2F0aW9uIixmdW5jdGlvbihRKXtRLm5hdmlnYXRvciYmUS5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24mJmZ1bmN0aW9uKFEscmUpe2Zvcih2YXIgX2U9US5jb25zdHJ1Y3Rvci5uYW1lLEk9ZnVuY3Rpb24oJCl7dmFyIGx0LEplLG5lPXJlWyRdLG1lPVFbbmVdO2lmKG1lKXtpZighayhuKFEsbmUpKSlyZXR1cm4iY29udGludWUiO1FbbmVdPShKZT1mdW5jdGlvbigpe3JldHVybiBsdC5hcHBseSh0aGlzLEQoYXJndW1lbnRzLF9lKyIuIituZSkpfSxsZShKZSxsdD1tZSksSmUpfX0sWD0wO1g8cmUubGVuZ3RoO1grKylJKFgpfShRLm5hdmlnYXRvci5nZW9sb2NhdGlvbixbImdldEN1cnJlbnRQb3NpdGlvbiIsIndhdGNoUG9zaXRpb24iXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiUHJvbWlzZVJlamVjdGlvbkV2ZW50IixmdW5jdGlvbihRLHJlKXtmdW5jdGlvbiBfZShJKXtyZXR1cm4gZnVuY3Rpb24oWCl7Y2UoUSxJKS5mb3JFYWNoKGZ1bmN0aW9uKG5lKXt2YXIgbWU9US5Qcm9taXNlUmVqZWN0aW9uRXZlbnQ7aWYobWUpe3ZhciBLZT1uZXcgbWUoSSx7cHJvbWlzZTpYLnByb21pc2UscmVhc29uOlgucmVqZWN0aW9ufSk7bmUuaW52b2tlKEtlKX19KX19US5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJihyZVtmKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpXT1fZSgidW5oYW5kbGVkcmVqZWN0aW9uIikscmVbZigicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKV09X2UoInJlamVjdGlvbmhhbmRsZWQiKSl9KX0sImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUobik6bigpfSksSGI9UmQoJG89PnsidXNlIHN0cmljdCI7dmFyIEZKZT0kbyYmJG8uX192YWx1ZXN8fGZ1bmN0aW9uKG4pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJm5bU3ltYm9sLml0ZXJhdG9yXSxlPTA7cmV0dXJuIHQ/dC5jYWxsKG4pOntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG4mJmU+PW4ubGVuZ3RoJiYobj12b2lkIDApLHt2YWx1ZTpuJiZuW2UrK10sZG9uZTohbn19fX07ZnVuY3Rpb24gVmhlKG4sdCl7cmV0dXJuIE1hdGguZmxvb3IodCgpKm4pfWZ1bmN0aW9uIGxGKG4pe2Zvcih2YXIgdD1bXSxlPTA7ZTxuO2UrKyl0LnB1c2godm9pZCAwKTtyZXR1cm4gdH1mdW5jdGlvbiBRRyhuLHQpe3JldHVybiBsRihuKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdH0pfWZ1bmN0aW9uIEhoZShuKXtyZXR1cm4gUUcobiwwKX1mdW5jdGlvbiBVaGUobil7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkbywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksJG8udGF1UmFuZEludD1WaGUsJG8udGF1UmFuZD1mdW5jdGlvbihuKXtyZXR1cm4gbigpfSwkby5ub3JtPWZ1bmN0aW9uKG4pe3ZhciB0LGUsaT0wO3RyeXtmb3IodmFyIHI9RkplKG4pLG89ci5uZXh0KCk7IW8uZG9uZTtvPXIubmV4dCgpKWkrPU1hdGgucG93KG8udmFsdWUsMil9Y2F0Y2goYSl7dD17ZXJyb3I6YX19ZmluYWxseXt0cnl7byYmIW8uZG9uZSYmKGU9ci5yZXR1cm4pJiZlLmNhbGwocil9ZmluYWxseXtpZih0KXRocm93IHQuZXJyb3J9fXJldHVybiBNYXRoLnNxcnQoaSl9LCRvLmVtcHR5PWxGLCRvLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBsRihuKS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pfSwkby5maWxsZWQ9UUcsJG8uemVyb3M9SGhlLCRvLm9uZXM9ZnVuY3Rpb24obil7cmV0dXJuIFFHKG4sMSl9LCRvLmxpbmVhcj1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGxGKGUpLm1hcChmdW5jdGlvbihpLHIpe3JldHVybiBuK3IqKCh0LW4pLyhlLTEpKX0pfSwkby5zdW09VWhlLCRvLm1lYW49ZnVuY3Rpb24obil7cmV0dXJuIFVoZShuKS9uLmxlbmd0aH0sJG8ubWF4PWZ1bmN0aW9uKG4pe2Zvcih2YXIgdD0wLGU9MDtlPG4ubGVuZ3RoO2UrKyl0PW5bZV0+dD9uW2VdOnQ7cmV0dXJuIHR9LCRvLm1heDJkPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdD0wLGU9MDtlPG4ubGVuZ3RoO2UrKylmb3IodmFyIGk9MDtpPG5bZV0ubGVuZ3RoO2krKyl0PW5bZV1baV0+dD9uW2VdW2ldOnQ7cmV0dXJuIHR9LCRvLnJlamVjdGlvblNhbXBsZT1mdW5jdGlvbihuLHQsZSl7Zm9yKHZhciBpPUhoZShuKSxyPTA7cjxuO3IrKylmb3IodmFyIG89ITA7bzspe2Zvcih2YXIgcz1WaGUodCxlKSxhPSExLGw9MDtsPHI7bCsrKWlmKHM9PT1pW2xdKXthPSEwO2JyZWFrfWF8fChvPSExKSxpW3JdPXN9cmV0dXJuIGl9LCRvLnJlc2hhcGUyZD1mdW5jdGlvbihuLHQsZSl7dmFyIGk9W10sbz0wO2lmKG4ubGVuZ3RoIT09dCplKXRocm93IG5ldyBFcnJvcigiQXJyYXkgZGltZW5zaW9ucyBtdXN0IG1hdGNoIGlucHV0IGxlbmd0aC4iKTtmb3IodmFyIHM9MDtzPHQ7cysrKXtmb3IodmFyIGE9W10sbD0wO2w8ZTtsKyspYS5wdXNoKG5bb10pLG8rPTE7aS5wdXNoKGEpfXJldHVybiBpfX0pLFpHPVJkKGZ1PT57InVzZSBzdHJpY3QiO3ZhciBxSmU9ZnUmJmZ1Ll9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24obil7aWYobiYmbi5fX2VzTW9kdWxlKXJldHVybiBuO3ZhciB0PXt9O2lmKG51bGwhPW4pZm9yKHZhciBlIGluIG4pT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobixlKSYmKHRbZV09bltlXSk7cmV0dXJuIHQuZGVmYXVsdD1uLHR9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShmdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHdFPXFKZShIYigpKTtmdW5jdGlvbiB6aGUobix0KXt2YXIgZT1mdW5jdGlvbihyKXtyZXR1cm4gd0UuZW1wdHkobikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHdFLmZpbGxlZCh0LHIpfSl9LGk9W107cmV0dXJuIGkucHVzaChlKC0xKSksaS5wdXNoKGUoMS8wKSksaS5wdXNoKGUoMCkpLGl9ZnVuY3Rpb24gS0cobix0LGUsaSxyKXt0PU1hdGguZmxvb3IodCk7dmFyIG89blswXVt0XTtpZihlPj1uWzFdW3RdWzBdKXJldHVybiAwO2Zvcih2YXIgbD0wO2w8by5sZW5ndGg7bCsrKWlmKGk9PT1vW2xdKXJldHVybiAwO3JldHVybiBqaGUobix0LGUsaSxyKX1mdW5jdGlvbiBqaGUobix0LGUsaSxyKXt2YXIgbz1uWzBdW3RdLHM9blsxXVt0XSxhPW5bMl1bdF07aWYoZT49c1swXSlyZXR1cm4gMDtzWzBdPWUsb1swXT1pLGFbMF09cjtmb3IodmFyIGw9MCxjPTA7Oyl7dmFyIHU9MipsKzEsZD11KzEscD1uWzBdWzBdLmxlbmd0aDtpZih1Pj1wKWJyZWFrO2lmKGQ+PXApe2lmKCEoc1t1XT5lKSlicmVhaztjPXV9ZWxzZSBpZihzW3VdPj1zW2RdKXtpZighKGU8c1t1XSkpYnJlYWs7Yz11fWVsc2V7aWYoIShlPHNbZF0pKWJyZWFrO2M9ZH1zW2xdPXNbY10sb1tsXT1vW2NdLGFbbF09YVtjXSxsPWN9cmV0dXJuIHNbbF09ZSxvW2xdPWksYVtsXT1yLDF9ZnVuY3Rpb24gS0plKG4sdCxlLGkpe2Zvcig7MippKzE8ZTspe3ZhciByPTIqaSsxLG89cisxLHM9aTtpZihuW3NdPG5bcl0mJihzPXIpLG88ZSYmbltzXTxuW29dJiYocz1vKSxzPT09aSlicmVhazt2YXIgYT1uW2ldO25baV09bltzXSxuW3NdPWE7dmFyIGw9dFtpXTt0W2ldPXRbc10sdFtzXT1sLGk9c319ZnUubWFrZUhlYXA9emhlLGZ1LnJlamVjdGlvblNhbXBsZT1mdW5jdGlvbihuLHQsZSl7Zm9yKHZhciBpPXdFLnplcm9zKG4pLHI9MDtyPG47cisrKXtmb3IodmFyIG89ITAscz0wO287KXtzPXdFLnRhdVJhbmRJbnQodCxlKTtmb3IodmFyIGE9ITEsbD0wO2w8cjtsKyspaWYocz09PWlbbF0pe2E9ITA7YnJlYWt9YXx8KG89ITEpfWlbcl09c31yZXR1cm4gaX0sZnUuaGVhcFB1c2g9S0csZnUudW5jaGVja2VkSGVhcFB1c2g9amhlLGZ1LmJ1aWxkQ2FuZGlkYXRlcz1mdW5jdGlvbihuLHQsZSxpLHIpe2Zvcih2YXIgbz16aGUodCxpKSxzPTA7czx0O3MrKylmb3IodmFyIGE9MDthPGU7YSsrKWlmKCEoblswXVtzXVthXTwwKSl7dmFyIGw9blswXVtzXVthXSxjPW5bMl1bc11bYV0sdT13RS50YXVSYW5kKHIpO0tHKG8scyx1LGwsYyksS0cobyxsLHUscyxjKSxuWzJdW3NdW2FdPTB9cmV0dXJuIG99LGZ1LmRlaGVhcFNvcnQ9ZnVuY3Rpb24obil7Zm9yKHZhciB0PW5bMF0sZT1uWzFdLGk9MDtpPHQubGVuZ3RoO2krKylmb3IodmFyIHI9dFtpXSxvPWVbaV0scz0wO3M8ci5sZW5ndGgtMTtzKyspe3ZhciBhPXIubGVuZ3RoLXMtMSxsPW8ubGVuZ3RoLXMtMSxjPXJbMF07clswXT1yW2FdLHJbYV09Yzt2YXIgdT1vWzBdO29bMF09b1tsXSxvW2xdPXUsS0plKG8scixsLDApfXJldHVybntpbmRpY2VzOnQsd2VpZ2h0czplfX0sZnUuc21hbGxlc3RGbGFnZ2VkPWZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW5bMF1bdF0saT1uWzFdW3RdLHI9blsyXVt0XSxvPTEvMCxzPS0xLGE9MDthPmUubGVuZ3RoO2ErKykxPT09clthXSYmaVthXTxvJiYobz1pW2FdLHM9YSk7cmV0dXJuIHM+PTA/KHJbc109MCxNYXRoLmZsb29yKGVbc10pKTotMX19KSxKRz1SZChlcz0+eyJ1c2Ugc3RyaWN0Ijt2YXIgY0Y9ZXMmJmVzLl9fcmVhZHx8ZnVuY3Rpb24obix0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZuW1N5bWJvbC5pdGVyYXRvcl07aWYoIWUpcmV0dXJuIG47dmFyIHIscyxpPWUuY2FsbChuKSxvPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT10fHx0LS0gPjApJiYhKHI9aS5uZXh0KCkpLmRvbmU7KW8ucHVzaChyLnZhbHVlKX1jYXRjaChhKXtzPXtlcnJvcjphfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYoZT1pLnJldHVybikmJmUuY2FsbChpKX1maW5hbGx5e2lmKHMpdGhyb3cgcy5lcnJvcn19cmV0dXJuIG99LEpKZT1lcyYmZXMuX192YWx1ZXN8fGZ1bmN0aW9uKG4pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJm5bU3ltYm9sLml0ZXJhdG9yXSxlPTA7cmV0dXJuIHQ/dC5jYWxsKG4pOntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG4mJmU+PW4ubGVuZ3RoJiYobj12b2lkIDApLHt2YWx1ZTpuJiZuW2UrK10sZG9uZTohbn19fX0sJEplPWVzJiZlcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKG4pe2lmKG4mJm4uX19lc01vZHVsZSlyZXR1cm4gbjt2YXIgdD17fTtpZihudWxsIT1uKWZvcih2YXIgZSBpbiBuKU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sZSkmJih0W2VdPW5bZV0pO3JldHVybiB0LmRlZmF1bHQ9bix0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBTRSxHaGU9JEplKEhiKCkpLFViPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGUsaSxyKXtpZih0aGlzLmVudHJpZXM9bmV3IE1hcCx0aGlzLm5Sb3dzPTAsdGhpcy5uQ29scz0wLHQubGVuZ3RoIT09ZS5sZW5ndGh8fHQubGVuZ3RoIT09aS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJyb3dzLCBjb2xzIGFuZCB2YWx1ZXMgYXJyYXlzIG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIik7dGhpcy5uUm93cz1yWzBdLHRoaXMubkNvbHM9clsxXTtmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9dFtvXSxhPWVbb107dGhpcy5jaGVja0RpbXMocyxhKTt2YXIgbD10aGlzLm1ha2VLZXkocyxhKTt0aGlzLmVudHJpZXMuc2V0KGwse3ZhbHVlOmlbb10scm93OnMsY29sOmF9KX19cmV0dXJuIG4ucHJvdG90eXBlLm1ha2VLZXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCsiOiIrZX0sbi5wcm90b3R5cGUuY2hlY2tEaW1zPWZ1bmN0aW9uKHQsZSl7aWYoISh0PHRoaXMublJvd3MmJmU8dGhpcy5uQ29scykpdGhyb3cgbmV3IEVycm9yKCJyb3cgYW5kL29yIGNvbCBzcGVjaWZpZWQgb3V0c2lkZSBvZiBtYXRyaXggZGltZW5zaW9ucyIpfSxuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlLGkpe3RoaXMuY2hlY2tEaW1zKHQsZSk7dmFyIHI9dGhpcy5tYWtlS2V5KHQsZSk7dGhpcy5lbnRyaWVzLmhhcyhyKT90aGlzLmVudHJpZXMuZ2V0KHIpLnZhbHVlPWk6dGhpcy5lbnRyaWVzLnNldChyLHt2YWx1ZTppLHJvdzp0LGNvbDplfSl9LG4ucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUsaSl7dm9pZCAwPT09aSYmKGk9MCksdGhpcy5jaGVja0RpbXModCxlKTt2YXIgcj10aGlzLm1ha2VLZXkodCxlKTtyZXR1cm4gdGhpcy5lbnRyaWVzLmhhcyhyKT90aGlzLmVudHJpZXMuZ2V0KHIpLnZhbHVlOml9LG4ucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMCk7dmFyIGU9W107cmV0dXJuIHRoaXMuZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2UucHVzaChpKX0pLHQmJmUuc29ydChmdW5jdGlvbihpLHIpe3JldHVybiBpLnJvdz09PXIucm93P2kuY29sLXIuY29sOmkucm93LXIucm93fSksZX0sbi5wcm90b3R5cGUuZ2V0RGltcz1mdW5jdGlvbigpe3JldHVyblt0aGlzLm5Sb3dzLHRoaXMubkNvbHNdfSxuLnByb3RvdHlwZS5nZXRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLGZ1bmN0aW9uKHQpe3JldHVybiBjRih0LDIpWzFdLnJvd30pfSxuLnByb3RvdHlwZS5nZXRDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLGZ1bmN0aW9uKHQpe3JldHVybiBjRih0LDIpWzFdLmNvbH0pfSxuLnByb3RvdHlwZS5nZXRWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMsZnVuY3Rpb24odCl7cmV0dXJuIGNGKHQsMilbMV0udmFsdWV9KX0sbi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0KXt0aGlzLmVudHJpZXMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdChlLnZhbHVlLGUucm93LGUuY29sKX0pfSxuLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24odCl7dmFyIGU9W107dGhpcy5lbnRyaWVzLmZvckVhY2goZnVuY3Rpb24ocil7ZS5wdXNoKHQoci52YWx1ZSxyLnJvdyxyLmNvbCkpfSk7dmFyIGk9W3RoaXMublJvd3MsdGhpcy5uQ29sc107cmV0dXJuIG5ldyBuKHRoaXMuZ2V0Um93cygpLHRoaXMuZ2V0Q29scygpLGUsaSl9LG4ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9R2hlLmVtcHR5KHRoaXMublJvd3MpLm1hcChmdW5jdGlvbigpe3JldHVybiBHaGUuemVyb3ModC5uQ29scyl9KTtyZXR1cm4gdGhpcy5lbnRyaWVzLmZvckVhY2goZnVuY3Rpb24ocil7aVtyLnJvd11bci5jb2xdPXIudmFsdWV9KSxpfSxufSgpO2VzLlNwYXJzZU1hdHJpeD1VYixlcy50cmFuc3Bvc2U9ZnVuY3Rpb24obil7dmFyIHQ9W10sZT1bXSxpPVtdO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24obyxzLGEpe3QucHVzaChzKSxlLnB1c2goYSksaS5wdXNoKG8pfSksbmV3IFViKGUsdCxpLFtuLm5Db2xzLG4ublJvd3NdKX0sZXMuaWRlbnRpdHk9ZnVuY3Rpb24obil7Zm9yKHZhciBlPWNGKG4sMSlbMF0saT1uZXcgVWIoW10sW10sW10sbikscj0wO3I8ZTtyKyspaS5zZXQocixyLDEpO3JldHVybiBpfSxlcy5wYWlyd2lzZU11bHRpcGx5PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHVGKG4sdCxmdW5jdGlvbihlLGkpe3JldHVybiBlKml9KX0sZXMuYWRkPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHVGKG4sdCxmdW5jdGlvbihlLGkpe3JldHVybiBlK2l9KX0sZXMuc3VidHJhY3Q9ZnVuY3Rpb24obix0KXtyZXR1cm4gdUYobix0LGZ1bmN0aW9uKGUsaSl7cmV0dXJuIGUtaX0pfSxlcy5tYXhpbXVtPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHVGKG4sdCxmdW5jdGlvbihlLGkpe3JldHVybiBlPmk/ZTppfSl9LGVzLm11bHRpcGx5U2NhbGFyPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKnR9KX0sZXMuZWxpbWluYXRlWmVyb3M9ZnVuY3Rpb24obil7Zm9yKHZhciB0PW5ldyBTZXQsZT1uLmdldFZhbHVlcygpLGk9bi5nZXRSb3dzKCkscj1uLmdldENvbHMoKSxvPTA7bzxlLmxlbmd0aDtvKyspMD09PWVbb10mJnQuYWRkKG8pO3ZhciBzPWZ1bmN0aW9uKHUsZCl7cmV0dXJuIXQuaGFzKGQpfSxhPWUuZmlsdGVyKHMpLGw9aS5maWx0ZXIocyksYz1yLmZpbHRlcihzKTtyZXR1cm4gbmV3IFViKGwsYyxhLG4uZ2V0RGltcygpKX0sZXMubm9ybWFsaXplPWZ1bmN0aW9uKG4sdCl7dm9pZCAwPT09dCYmKHQ9ImwyIik7dmFyIGUsaSxyPWMkZVt0XSxvPW5ldyBNYXA7bi5mb3JFYWNoKGZ1bmN0aW9uKGQscCxoKXt2YXIgZj1vLmdldChwKXx8W107Zi5wdXNoKGgpLG8uc2V0KHAsZil9KTt2YXIgcz1uZXcgVWIoW10sW10sW10sbi5nZXREaW1zKCkpLGE9ZnVuY3Rpb24oZCl7Zm9yKHZhciBwPW8uZ2V0KGQpLnNvcnQoKSxoPXAubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBuLmdldChkLHgpfSksZj1yKGgpLG09MDttPGYubGVuZ3RoO20rKylzLnNldChkLHBbbV0sZlttXSl9O3RyeXtmb3IodmFyIGw9SkplKG8ua2V5cygpKSxjPWwubmV4dCgpOyFjLmRvbmU7Yz1sLm5leHQoKSlhKGMudmFsdWUpfWNhdGNoKGQpe2U9e2Vycm9yOmR9fWZpbmFsbHl7dHJ5e2MmJiFjLmRvbmUmJihpPWwucmV0dXJuKSYmaS5jYWxsKGwpfWZpbmFsbHl7aWYoZSl0aHJvdyBlLmVycm9yfX1yZXR1cm4gc307dmFyIGMkZT0oKFNFPXt9KS5tYXg9ZnVuY3Rpb24obil7Zm9yKHZhciB0PS0xLzAsZT0wO2U8bi5sZW5ndGg7ZSsrKXQ9bltlXT50P25bZV06dDtyZXR1cm4gbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkvdH0pfSxTRS5sMT1mdW5jdGlvbihuKXtmb3IodmFyIHQ9MCxlPTA7ZTxuLmxlbmd0aDtlKyspdCs9bltlXTtyZXR1cm4gbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkvdH0pfSxTRS5sMj1mdW5jdGlvbihuKXtmb3IodmFyIHQ9MCxlPTA7ZTxuLmxlbmd0aDtlKyspdCs9TWF0aC5wb3cobltlXSwyKTtyZXR1cm4gbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhpLDIpL3QpfSl9LFNFKTtmdW5jdGlvbiB1RihuLHQsZSl7Zm9yKHZhciBpPW5ldyBTZXQscj1bXSxvPVtdLHM9W10sYT1mdW5jdGlvbihELFQpe3IucHVzaChEKSxvLnB1c2goVCk7dmFyIGs9ZShuLmdldChELFQpLHQuZ2V0KEQsVCkpO3MucHVzaChrKX0sbD1uLmdldFZhbHVlcygpLGM9bi5nZXRSb3dzKCksdT1uLmdldENvbHMoKSxkPTA7ZDxsLmxlbmd0aDtkKyspaS5hZGQoKHA9Y1tkXSkrIjoiKyhoPXVbZF0pKSxhKHAsaCk7dmFyIG09dC5nZXRWYWx1ZXMoKSx4PXQuZ2V0Um93cygpLGc9dC5nZXRDb2xzKCk7Zm9yKGQ9MDtkPG0ubGVuZ3RoO2QrKyl7dmFyIHAsaDtpLmhhcygocD14W2RdKSsiOiIrKGg9Z1tkXSkpfHxhKHAsaCl9cmV0dXJuIG5ldyBVYihyLG8scyxbbi5uUm93cyxuLm5Db2xzXSl9ZXMuZ2V0Q1NSPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO24uZm9yRWFjaChmdW5jdGlvbihkLHAsaCl7dC5wdXNoKHt2YWx1ZTpkLHJvdzpwLGNvbDpofSl9KSx0LnNvcnQoZnVuY3Rpb24oZCxwKXtyZXR1cm4gZC5yb3c9PT1wLnJvdz9kLmNvbC1wLmNvbDpkLnJvdy1wLnJvd30pO2Zvcih2YXIgZT1bXSxpPVtdLHI9W10sbz0tMSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBhPXRbc10sbD1hLnJvdyxjPWEuY29sLHU9YS52YWx1ZTtsIT09byYmKG89bCxyLnB1c2gocykpLGUucHVzaChjKSxpLnB1c2godSl9cmV0dXJue2luZGljZXM6ZSx2YWx1ZXM6aSxpbmRwdHI6cn19fSksaTY9UmQoWWE9PnsidXNlIHN0cmljdCI7dmFyIGQkZT1ZYSYmWWEuX19yZWFkfHxmdW5jdGlvbihuLHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJm5bU3ltYm9sLml0ZXJhdG9yXTtpZighZSlyZXR1cm4gbjt2YXIgcixzLGk9ZS5jYWxsKG4pLG89W107dHJ5e2Zvcig7KHZvaWQgMD09PXR8fHQtLSA+MCkmJiEocj1pLm5leHQoKSkuZG9uZTspby5wdXNoKHIudmFsdWUpfWNhdGNoKGEpe3M9e2Vycm9yOmF9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihlPWkucmV0dXJuKSYmZS5jYWxsKGkpfWZpbmFsbHl7aWYocyl0aHJvdyBzLmVycm9yfX1yZXR1cm4gb30sV2hlPVlhJiZZYS5fX3NwcmVhZHx8ZnVuY3Rpb24oKXtmb3IodmFyIG49W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspbj1uLmNvbmNhdChkJGUoYXJndW1lbnRzW3RdKSk7cmV0dXJuIG59LHAkZT1ZYSYmWWEuX192YWx1ZXN8fGZ1bmN0aW9uKG4pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJm5bU3ltYm9sLml0ZXJhdG9yXSxlPTA7cmV0dXJuIHQ/dC5jYWxsKG4pOntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG4mJmU+PW4ubGVuZ3RoJiYobj12b2lkIDApLHt2YWx1ZTpuJiZuW2UrK10sZG9uZTohbn19fX0saCRlPVlhJiZZYS5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKG4pe2lmKG4mJm4uX19lc01vZHVsZSlyZXR1cm4gbjt2YXIgdD17fTtpZihudWxsIT1uKWZvcih2YXIgZSBpbiBuKU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sZSkmJih0W2VdPW5bZV0pO3JldHVybiB0LmRlZmF1bHQ9bix0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWWEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBYcz1oJGUoSGIoKSkscWhlPWZ1bmN0aW9uKHQsZSxpLHIpe3RoaXMuaHlwZXJwbGFuZXM9dCx0aGlzLm9mZnNldHM9ZSx0aGlzLmNoaWxkcmVuPWksdGhpcy5pbmRpY2VzPXJ9O2Z1bmN0aW9uICRHKG4sdCxlLGkscil7aWYodm9pZCAwPT09ZSYmKGU9MzApLHQubGVuZ3RoPmUpe3ZhciBvPWZ1bmN0aW9uKG4sdCxlKXtmb3IodmFyIGk9blswXS5sZW5ndGgscj1Ycy50YXVSYW5kSW50KHQubGVuZ3RoLGUpLG89WHMudGF1UmFuZEludCh0Lmxlbmd0aCxlKSxzPXRbcl0sYT10W289KG8rPXI9PT1vPzE6MCkldC5sZW5ndGhdLGw9MCxjPVhzLnplcm9zKGkpLHU9MDt1PGMubGVuZ3RoO3UrKyljW3VdPW5bc11bdV0tblthXVt1XSxsLT1jW3VdKihuW3NdW3VdK25bYV1bdV0pLzI7dmFyIGQ9MCxwPTAsaD1Ycy56ZXJvcyh0Lmxlbmd0aCk7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKyl7Zm9yKHZhciBmPWwsbT0wO208aTttKyspZis9Y1ttXSpuW3RbdV1dW21dOzA9PT1mPyhoW3VdPVhzLnRhdVJhbmRJbnQoMixlKSwwPT09aFt1XT9kKz0xOnArPTEpOmY+MD8oaFt1XT0wLGQrPTEpOihoW3VdPTEscCs9MSl9dmFyIHg9WHMuemVyb3MoZCksZz1Ycy56ZXJvcyhwKTtmb3IoZD0wLHA9MCx1PTA7dTxoLmxlbmd0aDt1KyspMD09PWhbdV0/KHhbZF09dFt1XSxkKz0xKTooZ1twXT10W3VdLHArPTEpO3JldHVybntpbmRpY2VzTGVmdDp4LGluZGljZXNSaWdodDpnLGh5cGVycGxhbmU6YyxvZmZzZXQ6bH19KG4sdCxyKSxhPW8uaW5kaWNlc1JpZ2h0LGw9by5oeXBlcnBsYW5lLGM9by5vZmZzZXQ7cmV0dXJue2xlZnRDaGlsZDokRyhuLG8uaW5kaWNlc0xlZnQsZSxpKzEscikscmlnaHRDaGlsZDokRyhuLGEsZSxpKzEsciksaXNMZWFmOiExLGh5cGVycGxhbmU6bCxvZmZzZXQ6Y319cmV0dXJue2luZGljZXM6dCxpc0xlYWY6ITB9fWZ1bmN0aW9uIGU2KG4sdCxlLGkscixvLHMpe3ZhciBhO2lmKG4uaXNMZWFmKXJldHVybiBpW29dWzBdPS1zLChhPXJbc10pLnNwbGljZS5hcHBseShhLFdoZShbMCxuLmluZGljZXMubGVuZ3RoXSxuLmluZGljZXMpKSx7bm9kZU51bTpvLGxlYWZOdW06cys9MX07dFtvXT1uLmh5cGVycGxhbmUsZVtvXT1uLm9mZnNldCxpW29dWzBdPW8rMTt2YXIgbD1vLGM9ZTYobi5sZWZ0Q2hpbGQsdCxlLGkscixvKzEscyk7cmV0dXJuIHM9Yy5sZWFmTnVtLGlbbF1bMV09KG89Yy5ub2RlTnVtKSsxLHtub2RlTnVtOihjPWU2KG4ucmlnaHRDaGlsZCx0LGUsaSxyLG8rMSxzKSkubm9kZU51bSxsZWFmTnVtOmMubGVhZk51bX19ZnVuY3Rpb24gdDYobil7cmV0dXJuIG4uaXNMZWFmPzE6MSt0NihuLmxlZnRDaGlsZCkrdDYobi5yaWdodENoaWxkKX1mdW5jdGlvbiBuNihuKXtyZXR1cm4gbi5pc0xlYWY/MTpuNihuLmxlZnRDaGlsZCkrbjYobi5yaWdodENoaWxkKX1mdW5jdGlvbiB5JGUobix0LGUsaSl7Zm9yKHZhciByPXQsbz0wO288ZS5sZW5ndGg7bysrKXIrPW5bb10qZVtvXTtyZXR1cm4gMD09PXI/WHMudGF1UmFuZEludCgyLGkpOnI+MD8wOjF9WWEuRmxhdFRyZWU9cWhlLFlhLm1ha2VGb3Jlc3Q9ZnVuY3Rpb24obix0LGUsaSl7dmFyIHI9TWF0aC5tYXgoMTAsdCksbz1Ycy5yYW5nZShlKS5tYXAoZnVuY3Rpb24oYSxsKXtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIHZvaWQgMD09PXQmJih0PTMwKSwkRyhuLFhzLnJhbmdlKG4ubGVuZ3RoKSx0LGUsaSl9KG4scixsLGkpfSkscz1vLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24obix0KXt2YXIgZT10NihuKSxpPW42KG4pLHI9WHMucmFuZ2UoZSkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIFhzLnplcm9zKG4uaHlwZXJwbGFuZT9uLmh5cGVycGxhbmUubGVuZ3RoOjApfSksbz1Ycy56ZXJvcyhlKSxzPVhzLnJhbmdlKGUpLm1hcChmdW5jdGlvbigpe3JldHVyblstMSwtMV19KSxhPVhzLnJhbmdlKGkpLm1hcChmdW5jdGlvbigpe3JldHVybiBYcy5yYW5nZSh0KS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4tMX0pfSk7cmV0dXJuIGU2KG4scixvLHMsYSwwLDApLG5ldyBxaGUocixvLHMsYSl9KGEscil9KTtyZXR1cm4gc30sWWEubWFrZUxlYWZBcnJheT1mdW5jdGlvbihuKXt2YXIgdCxlO2lmKG4ubGVuZ3RoPjApe3ZhciBpPVtdO3RyeXtmb3IodmFyIHI9cCRlKG4pLG89ci5uZXh0KCk7IW8uZG9uZTtvPXIubmV4dCgpKWkucHVzaC5hcHBseShpLFdoZShvLnZhbHVlLmluZGljZXMpKX1jYXRjaChhKXt0PXtlcnJvcjphfX1maW5hbGx5e3RyeXtvJiYhby5kb25lJiYoZT1yLnJldHVybikmJmUuY2FsbChyKX1maW5hbGx5e2lmKHQpdGhyb3cgdC5lcnJvcn19cmV0dXJuIGl9cmV0dXJuW1stMV1dfSxZYS5zZWFyY2hGbGF0VHJlZT1mdW5jdGlvbihuLHQsZSl7Zm9yKHZhciBpPTA7dC5jaGlsZHJlbltpXVswXT4wOylpPTA9PT15JGUodC5oeXBlcnBsYW5lc1tpXSx0Lm9mZnNldHNbaV0sbixlKT90LmNoaWxkcmVuW2ldWzBdOnQuY2hpbGRyZW5baV1bMV07cmV0dXJuIHQuaW5kaWNlc1stMSp0LmNoaWxkcmVuW2ldWzBdXX19KSxRaGU9UmQoSWQ9PnsidXNlIHN0cmljdCI7dmFyIFloZT1JZCYmSWQuX192YWx1ZXN8fGZ1bmN0aW9uKG4pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJm5bU3ltYm9sLml0ZXJhdG9yXSxlPTA7cmV0dXJuIHQ/dC5jYWxsKG4pOntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG4mJmU+PW4ubGVuZ3RoJiYobj12b2lkIDApLHt2YWx1ZTpuJiZuW2UrK10sZG9uZTohbn19fX0sZEY9SWQmJklkLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24obil7aWYobiYmbi5fX2VzTW9kdWxlKXJldHVybiBuO3ZhciB0PXt9O2lmKG51bGwhPW4pZm9yKHZhciBlIGluIG4pT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobixlKSYmKHRbZV09bltlXSk7cmV0dXJuIHQuZGVmYXVsdD1uLHR9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShJZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHlhPWRGKFpHKCkpLHgkZT1kRihKRygpKSxDJGU9ZEYoaTYoKSksWGhlPWRGKEhiKCkpO0lkLm1ha2VOTkRlc2NlbnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oaSxyLG8scyxhLGwsYyx1KXt2b2lkIDA9PT1zJiYocz0xMCksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWwmJihsPS4wMDEpLHZvaWQgMD09PWMmJihjPS41KSx2b2lkIDA9PT11JiYodT0hMCk7Zm9yKHZhciBkPWkubGVuZ3RoLHA9eWEubWFrZUhlYXAoaS5sZW5ndGgsbyksaD0wO2g8aS5sZW5ndGg7aCsrKWZvcih2YXIgZj15YS5yZWplY3Rpb25TYW1wbGUobyxpLmxlbmd0aCx0KSxtPTA7bTxmLmxlbmd0aDttKyspe3ZhciB4PW4oaVtoXSxpW2ZbbV1dKTt5YS5oZWFwUHVzaChwLGgseCxmW21dLDEpLHlhLmhlYXBQdXNoKHAsZlttXSx4LGgsMSl9aWYodSlmb3IodmFyIGc9MDtnPHIubGVuZ3RoO2crKylmb3IoaD0wO2g8cltnXS5sZW5ndGgmJiEocltnXVtoXTwwKTtoKyspZm9yKG09aCsxO208cltnXS5sZW5ndGgmJiEocltnXVttXTwwKTttKyspeD1uKGlbcltnXVtoXV0saVtyW2ddW21dXSkseWEuaGVhcFB1c2gocCxyW2ddW2hdLHgscltnXVttXSwxKSx5YS5oZWFwUHVzaChwLHJbZ11bbV0seCxyW2ddW2hdLDEpO2ZvcihnPTA7ZzxzO2crKyl7dmFyIGI9eWEuYnVpbGRDYW5kaWRhdGVzKHAsZCxvLGEsdCksRD0wO2ZvcihoPTA7aDxkO2grKylmb3IobT0wO208YTttKyspe3ZhciBUPU1hdGguZmxvb3IoYlswXVtoXVttXSk7aWYoIShUPDB8fFhoZS50YXVSYW5kKHQpPGMpKWZvcih2YXIgaz0wO2s8YTtrKyspe3ZhciBaPU1hdGguZmxvb3IoYlswXVtoXVtrXSk7WjwwfHwhYlsyXVtoXVttXSYmIWJbMl1baF1ba118fCh4PW4oaVtUXSxpW1pdKSxEKz15YS5oZWFwUHVzaChwLFQseCxaLDEpLEQrPXlhLmhlYXBQdXNoKHAsWix4LFQsMSkpfX1pZihEPD1sKm8qaS5sZW5ndGgpYnJlYWt9cmV0dXJuIHlhLmRlaGVhcFNvcnQocCl9fSxJZC5tYWtlSW5pdGlhbGl6YXRpb25zPWZ1bmN0aW9uKG4pe3JldHVybntpbml0RnJvbVJhbmRvbTpmdW5jdGlvbihpLHIsbyxzLGEpe2Zvcih2YXIgbD0wO2w8by5sZW5ndGg7bCsrKWZvcih2YXIgYz1YaGUucmVqZWN0aW9uU2FtcGxlKGksci5sZW5ndGgsYSksdT0wO3U8Yy5sZW5ndGg7dSsrKWlmKCEoY1t1XTwwKSl7dmFyIGQ9bihyW2NbdV1dLG9bbF0pO3lhLmhlYXBQdXNoKHMsbCxkLGNbdV0sMSl9fSxpbml0RnJvbVRyZWU6ZnVuY3Rpb24oaSxyLG8scyxhKXtmb3IodmFyIGw9MDtsPG8ubGVuZ3RoO2wrKylmb3IodmFyIGM9QyRlLnNlYXJjaEZsYXRUcmVlKG9bbF0saSxhKSx1PTA7dTxjLmxlbmd0aDt1Kyspe2lmKGNbdV08MClyZXR1cm47dmFyIGQ9bihyW2NbdV1dLG9bbF0pO3lhLmhlYXBQdXNoKHMsbCxkLGNbdV0sMSl9fX19LElkLm1ha2VJbml0aWFsaXplZE5OU2VhcmNoPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihlLGkscixvKXtmb3IodmFyIHMsYSxsPXgkZS5nZXRDU1IoaSksYz1sLmluZGljZXMsdT1sLmluZHB0cixkPTA7ZDxvLmxlbmd0aDtkKyspZm9yKHZhciBwPW5ldyBTZXQoclswXVtkXSk7Oyl7dmFyIGg9eWEuc21hbGxlc3RGbGFnZ2VkKHIsZCk7aWYoLTE9PT1oKWJyZWFrO3ZhciBmPWMuc2xpY2UodVtoXSx1W2grMV0pO3RyeXtmb3IodmFyIG09WWhlKGYpLHg9bS5uZXh0KCk7IXguZG9uZTt4PW0ubmV4dCgpKXt2YXIgZz14LnZhbHVlO2lmKGchPT1oJiYtMSE9PWcmJiFwLmhhcyhnKSl7dmFyIGI9bihlW2ddLG9bZF0pO3lhLnVuY2hlY2tlZEhlYXBQdXNoKHIsZCxiLGcsMSkscC5hZGQoZyl9fX1jYXRjaChEKXtzPXtlcnJvcjpEfX1maW5hbGx5e3RyeXt4JiYheC5kb25lJiYoYT1tLnJldHVybikmJmEuY2FsbChtKX1maW5hbGx5e2lmKHMpdGhyb3cgcy5lcnJvcn19fXJldHVybiByfX0sSWQuaW5pdGlhbGl6ZVNlYXJjaD1mdW5jdGlvbihuLHQsZSxpLHIsbyxzKXt2YXIgYSxsLGM9eWEubWFrZUhlYXAoZS5sZW5ndGgsaSk7aWYocihpLHQsZSxjLHMpLG4pdHJ5e2Zvcih2YXIgdT1ZaGUobiksZD11Lm5leHQoKTshZC5kb25lO2Q9dS5uZXh0KCkpbyhkLnZhbHVlLHQsZSxjLHMpfWNhdGNoKGgpe2E9e2Vycm9yOmh9fWZpbmFsbHl7dHJ5e2QmJiFkLmRvbmUmJihsPXUucmV0dXJuKSYmbC5jYWxsKHUpfWZpbmFsbHl7aWYoYSl0aHJvdyBhLmVycm9yfX1yZXR1cm4gY319KTtmdW5jdGlvbiBFRShuKXtyZXR1cm4gVCRlLmNhbGwobikuZW5kc1dpdGgoIkFycmF5XSIpfXZhciBUJGUsS2hlPWhvKCgpPT57VCRlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmd9KTtmdW5jdGlvbiBwRihuLHQsZSl7bGV0IGk9MCxyPWUodCk7Zm9yKGxldCBvPTA7bzxuLngubGVuZ3RoO28rKylpKz1NYXRoLmFicyhuLnlbb10tcihuLnhbb10pKTtyZXR1cm4gaX12YXIgWmhlPWhvKCgpPT57fSk7ZnVuY3Rpb24gSWYobil7cmV0dXJuIEQkZS5jYWxsKG4pLmVuZHNXaXRoKCJBcnJheV0iKX12YXIgRCRlLGhGPWhvKCgpPT57RCRlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmd9KTtmdW5jdGlvbiBBJGUobil7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFJZihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnB1dCBtdXN0IGJlIGFuIGFycmF5Iik7aWYoMD09PW4ubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoImlucHV0IG11c3Qgbm90IGJlIGVtcHR5Iik7dmFyIGU9dC5mcm9tSW5kZXgsaT12b2lkIDA9PT1lPzA6ZSxyPXQudG9JbmRleCxvPXZvaWQgMD09PXI/bi5sZW5ndGg6cjtpZihpPDB8fGk+PW4ubGVuZ3RofHwhTnVtYmVyLmlzSW50ZWdlcihpKSl0aHJvdyBuZXcgRXJyb3IoImZyb21JbmRleCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBzbWFsbGVyIHRoYW4gbGVuZ3RoIik7aWYobzw9aXx8bz5uLmxlbmd0aHx8IU51bWJlci5pc0ludGVnZXIobykpdGhyb3cgbmV3IEVycm9yKCJ0b0luZGV4IG11c3QgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gZnJvbUluZGV4IGFuZCBhdCBtb3N0IGVxdWFsIHRvIGxlbmd0aCIpO2Zvcih2YXIgcz1uW2ldLGE9aSsxO2E8bzthKyspblthXT5zJiYocz1uW2FdKTtyZXR1cm4gc312YXIgSmhlLCRoZT1obygoKT0+e2hGKCksSmhlPUEkZX0pO2Z1bmN0aW9uIEkkZShuKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIUlmKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImlucHV0IG11c3QgYmUgYW4gYXJyYXkiKTtpZigwPT09bi5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW5wdXQgbXVzdCBub3QgYmUgZW1wdHkiKTt2YXIgZT10LmZyb21JbmRleCxpPXZvaWQgMD09PWU/MDplLHI9dC50b0luZGV4LG89dm9pZCAwPT09cj9uLmxlbmd0aDpyO2lmKGk8MHx8aT49bi5sZW5ndGh8fCFOdW1iZXIuaXNJbnRlZ2VyKGkpKXRocm93IG5ldyBFcnJvcigiZnJvbUluZGV4IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHNtYWxsZXIgdGhhbiBsZW5ndGgiKTtpZihvPD1pfHxvPm4ubGVuZ3RofHwhTnVtYmVyLmlzSW50ZWdlcihvKSl0aHJvdyBuZXcgRXJyb3IoInRvSW5kZXggbXVzdCBiZSBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBmcm9tSW5kZXggYW5kIGF0IG1vc3QgZXF1YWwgdG8gbGVuZ3RoIik7Zm9yKHZhciBzPW5baV0sYT1pKzE7YTxvO2ErKyluW2FdPHMmJihzPW5bYV0pO3JldHVybiBzfXZhciBlZmUsdGZlPWhvKCgpPT57aEYoKSxlZmU9SSRlfSk7ZnVuY3Rpb24gUCRlKG4pe3ZhciBlLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFJZihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnB1dCBtdXN0IGJlIGFuIGFycmF5Iik7aWYoMD09PW4ubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoImlucHV0IG11c3Qgbm90IGJlIGVtcHR5Iik7aWYodm9pZCAwIT09dC5vdXRwdXQpe2lmKCFJZih0Lm91dHB1dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigib3V0cHV0IG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IGlmIHNwZWNpZmllZCIpO2U9dC5vdXRwdXR9ZWxzZSBlPW5ldyBBcnJheShuLmxlbmd0aCk7dmFyIGk9ZWZlKG4pLHI9SmhlKG4pO2lmKGk9PT1yKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW5pbXVtIGFuZCBtYXhpbXVtIGlucHV0IHZhbHVlcyBhcmUgZXF1YWwuIENhbm5vdCByZXNjYWxlIGEgY29uc3RhbnQgYXJyYXkiKTt2YXIgbz10Lm1pbixzPXZvaWQgMD09PW8/dC5hdXRvTWluTWF4P2k6MDpvLGE9dC5tYXgsbD12b2lkIDA9PT1hP3QuYXV0b01pbk1heD9yOjE6YTtpZihzPj1sKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW4gb3B0aW9uIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCBvcHRpb24iKTtmb3IodmFyIGM9KGwtcykvKHItaSksdT0wO3U8bi5sZW5ndGg7dSsrKWVbdV09KG5bdV0taSkqYytzO3JldHVybiBlfXZhciByNixuZmU9aG8oKCk9PntoRigpLCRoZSgpLHRmZSgpLHI2PVAkZX0pO2Z1bmN0aW9uIHJmZSgpe3JldHVybiBvNih0aGlzKX1mdW5jdGlvbiBvNihuLHQ9e30pe2xldHttYXhSb3dzOmU9MTUsbWF4Q29sdW1uczppPTEwLG1heE51bVNpemU6cj04fT10O3JldHVybmAke24uY29uc3RydWN0b3IubmFtZX0ge1xuJHtmRn1bXG4ke2lmZX0ke2Z1bmN0aW9uKG4sdCxlLGkpe2xldHtyb3dzOnIsY29sdW1uczpvfT1uLHM9TWF0aC5taW4ocix0KSxhPU1hdGgubWluKG8sZSksbD1bXTtmb3IobGV0IGM9MDtjPHM7YysrKXtsZXQgdT1bXTtmb3IobGV0IGQ9MDtkPGE7ZCsrKXUucHVzaChPJGUobi5nZXQoYyxkKSxpKSk7bC5wdXNoKGAke3Uuam9pbigiICIpfWApfXJldHVybiBhIT09byYmKGxbbC5sZW5ndGgtMV0rPWAgLi4uICR7by1lfSBtb3JlIGNvbHVtbnNgKSxzIT09ciYmbC5wdXNoKGAuLi4gJHtyLXR9IG1vcmUgcm93c2ApLGwuam9pbihgXG4ke2lmZX1gKX0obixlLGkscil9XG4ke2ZGfV1cbiR7ZkZ9cm93czogJHtuLnJvd3N9XG4ke2ZGfWNvbHVtbnM6ICR7bi5jb2x1bW5zfVxufWB9ZnVuY3Rpb24gTyRlKG4sdCl7bGV0IGU9U3RyaW5nKG4pO2lmKGUubGVuZ3RoPD10KXJldHVybiBlLnBhZEVuZCh0LCIgIik7bGV0IGk9bi50b1ByZWNpc2lvbih0LTIpO2lmKGkubGVuZ3RoPD10KXJldHVybiBpO2xldCByPW4udG9FeHBvbmVudGlhbCh0LTIpLG89ci5pbmRleE9mKCJlIikscz1yLnNsaWNlKG8pO3JldHVybiByLnNsaWNlKDAsdC1zLmxlbmd0aCkrc312YXIgZkYsaWZlLG9mZT1obygoKT0+e2ZGPSIgIi5yZXBlYXQoMiksaWZlPSIgIi5yZXBlYXQoNCl9KSxhZmU9aG8oKCk9Pnt9KTtmdW5jdGlvbiBnYyhuLHQsZSl7aWYodDwwfHx0PihlP24ucm93czpuLnJvd3MtMSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlJvdyBpbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBfYyhuLHQsZSl7aWYodDwwfHx0PihlP24uY29sdW1uczpuLmNvbHVtbnMtMSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNvbHVtbiBpbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBuMChuLHQpe2lmKHQudG8xREFycmF5JiYodD10LnRvMURBcnJheSgpKSx0Lmxlbmd0aCE9PW4uY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMiKTtyZXR1cm4gdH1mdW5jdGlvbiBpMChuLHQpe2lmKHQudG8xREFycmF5JiYodD10LnRvMURBcnJheSgpKSx0Lmxlbmd0aCE9PW4ucm93cyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIHJvd3MiKTtyZXR1cm4gdH1mdW5jdGlvbiBrJGUobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigidW5leHBlY3RlZCB0eXBlIGZvciByb3cgaW5kaWNlcyIpO2lmKHQuc29tZShpPT5pPDB8fGk+PW4ucm93cykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJvdyBpbmRpY2VzIGFyZSBvdXQgb2YgcmFuZ2UiKTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8KHQ9QXJyYXkuZnJvbSh0KSksdH1mdW5jdGlvbiBGJGUobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigidW5leHBlY3RlZCB0eXBlIGZvciBjb2x1bW4gaW5kaWNlcyIpO2lmKHQuc29tZShpPT5pPDB8fGk+PW4uY29sdW1ucykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImNvbHVtbiBpbmRpY2VzIGFyZSBvdXQgb2YgcmFuZ2UiKTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8KHQ9QXJyYXkuZnJvbSh0KSksdH1mdW5jdGlvbiBzNihuLHQsZSxpLHIpe2lmKDUhPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJleHBlY3RlZCA0IGFyZ3VtZW50cyIpO2lmKG1GKCJzdGFydFJvdyIsdCksbUYoImVuZFJvdyIsZSksbUYoInN0YXJ0Q29sdW1uIixpKSxtRigiZW5kQ29sdW1uIixyKSx0PmV8fGk+cnx8dDwwfHx0Pj1uLnJvd3N8fGU8MHx8ZT49bi5yb3dzfHxpPDB8fGk+PW4uY29sdW1uc3x8cjwwfHxyPj1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlN1Ym1hdHJpeCBpbmRpY2VzIGFyZSBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBURShuLHQ9MCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTxuO2krKyllLnB1c2godCk7cmV0dXJuIGV9ZnVuY3Rpb24gbUYobix0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtufSBtdXN0IGJlIGEgbnVtYmVyYCl9ZnVuY3Rpb24gcjAobil7aWYobi5pc0VtcHR5KCkpdGhyb3cgbmV3IEVycm9yKCJFbXB0eSBtYXRyaXggaGFzIG5vIGVsZW1lbnRzIHRvIGluZGV4Iil9dmFyIGE2PWhvKCgpPT57fSksVGZlPWhvKCgpPT57YTYoKX0pO2Z1bmN0aW9uIERmZShuLHQpe3JldHVybiBuLXR9dmFyIHRpLHJuLEFsLEFFLG8wPWhvKCgpPT57dmFyIG4sdDtuZmUoKSxvZmUoKSxhZmUoKSxUZmUoKSxhNigpLHRpPWNsYXNze3N0YXRpYyBmcm9tMURBcnJheSh0LGUsaSl7aWYodCplIT09aS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImRhdGEgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGdpdmVuIGRpbWVuc2lvbnMiKTtsZXQgbz1uZXcgcm4odCxlKTtmb3IobGV0IHM9MDtzPHQ7cysrKWZvcihsZXQgYT0wO2E8ZTthKyspby5zZXQocyxhLGlbcyplK2FdKTtyZXR1cm4gb31zdGF0aWMgcm93VmVjdG9yKHQpe2xldCBlPW5ldyBybigxLHQubGVuZ3RoKTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyllLnNldCgwLGksdFtpXSk7cmV0dXJuIGV9c3RhdGljIGNvbHVtblZlY3Rvcih0KXtsZXQgZT1uZXcgcm4odC5sZW5ndGgsMSk7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspZS5zZXQoaSwwLHRbaV0pO3JldHVybiBlfXN0YXRpYyB6ZXJvcyh0LGUpe3JldHVybiBuZXcgcm4odCxlKX1zdGF0aWMgb25lcyh0LGUpe3JldHVybiBuZXcgcm4odCxlKS5maWxsKDEpfXN0YXRpYyByYW5kKHQsZSxpPXt9KXtpZigib2JqZWN0IiE9dHlwZW9mIGkpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2xldHtyYW5kb206cj1NYXRoLnJhbmRvbX09aSxvPW5ldyBybih0LGUpO2ZvcihsZXQgcz0wO3M8dDtzKyspZm9yKGxldCBhPTA7YTxlO2ErKylvLnNldChzLGEscigpKTtyZXR1cm4gb31zdGF0aWMgcmFuZEludCh0LGUsaT17fSl7aWYoIm9iamVjdCIhPXR5cGVvZiBpKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtsZXR7bWluOnI9MCxtYXg6bz0xZTMscmFuZG9tOnM9TWF0aC5yYW5kb219PWk7aWYoIU51bWJlci5pc0ludGVnZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcigibWluIG11c3QgYmUgYW4gaW50ZWdlciIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoIm1heCBtdXN0IGJlIGFuIGludGVnZXIiKTtpZihyPj1vKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW4gbXVzdCBiZSBzbWFsbGVyIHRoYW4gbWF4Iik7bGV0IGE9by1yLGw9bmV3IHJuKHQsZSk7Zm9yKGxldCBjPTA7Yzx0O2MrKylmb3IobGV0IHU9MDt1PGU7dSsrKXtsZXQgZD1yK01hdGgucm91bmQocygpKmEpO2wuc2V0KGMsdSxkKX1yZXR1cm4gbH1zdGF0aWMgZXllKHQsZSxpKXt2b2lkIDA9PT1lJiYoZT10KSx2b2lkIDA9PT1pJiYoaT0xKTtsZXQgcj1NYXRoLm1pbih0LGUpLG89dGhpcy56ZXJvcyh0LGUpO2ZvcihsZXQgcz0wO3M8cjtzKyspby5zZXQocyxzLGkpO3JldHVybiBvfXN0YXRpYyBkaWFnKHQsZSxpKXtsZXQgcj10Lmxlbmd0aDt2b2lkIDA9PT1lJiYoZT1yKSx2b2lkIDA9PT1pJiYoaT1lKTtsZXQgbz1NYXRoLm1pbihyLGUsaSkscz10aGlzLnplcm9zKGUsaSk7Zm9yKGxldCBhPTA7YTxvO2ErKylzLnNldChhLGEsdFthXSk7cmV0dXJuIHN9c3RhdGljIG1pbih0LGUpe3Q9dGhpcy5jaGVja01hdHJpeCh0KSxlPXRoaXMuY2hlY2tNYXRyaXgoZSk7bGV0IGk9dC5yb3dzLHI9dC5jb2x1bW5zLG89bmV3IHJuKGkscik7Zm9yKGxldCBzPTA7czxpO3MrKylmb3IobGV0IGE9MDthPHI7YSsrKW8uc2V0KHMsYSxNYXRoLm1pbih0LmdldChzLGEpLGUuZ2V0KHMsYSkpKTtyZXR1cm4gb31zdGF0aWMgbWF4KHQsZSl7dD10aGlzLmNoZWNrTWF0cml4KHQpLGU9dGhpcy5jaGVja01hdHJpeChlKTtsZXQgaT10LnJvd3Mscj10LmNvbHVtbnMsbz1uZXcgdGhpcyhpLHIpO2ZvcihsZXQgcz0wO3M8aTtzKyspZm9yKGxldCBhPTA7YTxyO2ErKylvLnNldChzLGEsTWF0aC5tYXgodC5nZXQocyxhKSxlLmdldChzLGEpKSk7cmV0dXJuIG99c3RhdGljIGNoZWNrTWF0cml4KHQpe3JldHVybiB0aS5pc01hdHJpeCh0KT90Om5ldyBybih0KX1zdGF0aWMgaXNNYXRyaXgodCl7cmV0dXJuIG51bGwhPXQmJiJNYXRyaXgiPT09dC5rbGFzc31nZXQgc2l6ZSgpe3JldHVybiB0aGlzLnJvd3MqdGhpcy5jb2x1bW5zfWFwcGx5KHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdC5jYWxsKHRoaXMsZSxpKTtyZXR1cm4gdGhpc310bzFEQXJyYXkoKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXQucHVzaCh0aGlzLmdldChlLGkpKTtyZXR1cm4gdH10bzJEQXJyYXkoKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspe3QucHVzaChbXSk7Zm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXRbZV0ucHVzaCh0aGlzLmdldChlLGkpKX1yZXR1cm4gdH10b0pTT04oKXtyZXR1cm4gdGhpcy50bzJEQXJyYXkoKX1pc1Jvd1ZlY3Rvcigpe3JldHVybiAxPT09dGhpcy5yb3dzfWlzQ29sdW1uVmVjdG9yKCl7cmV0dXJuIDE9PT10aGlzLmNvbHVtbnN9aXNWZWN0b3IoKXtyZXR1cm4gMT09PXRoaXMucm93c3x8MT09PXRoaXMuY29sdW1uc31pc1NxdWFyZSgpe3JldHVybiB0aGlzLnJvd3M9PT10aGlzLmNvbHVtbnN9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5yb3dzfHwwPT09dGhpcy5jb2x1bW5zfWlzU3ltbWV0cmljKCl7aWYodGhpcy5pc1NxdWFyZSgpKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTw9dDtlKyspaWYodGhpcy5nZXQodCxlKSE9PXRoaXMuZ2V0KGUsdCkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9aXNFY2hlbG9uRm9ybSgpe2xldCB0PTAsZT0wLGk9LTEscj0hMCxvPSExO2Zvcig7dDx0aGlzLnJvd3MmJnI7KXtmb3IoZT0wLG89ITE7ZTx0aGlzLmNvbHVtbnMmJiExPT09bzspMD09PXRoaXMuZ2V0KHQsZSk/ZSsrOjE9PT10aGlzLmdldCh0LGUpJiZlPmk/KG89ITAsaT1lKToocj0hMSxvPSEwKTt0Kyt9cmV0dXJuIHJ9aXNSZWR1Y2VkRWNoZWxvbkZvcm0oKXtsZXQgdD0wLGU9MCxpPS0xLHI9ITAsbz0hMTtmb3IoO3Q8dGhpcy5yb3dzJiZyOyl7Zm9yKGU9MCxvPSExO2U8dGhpcy5jb2x1bW5zJiYhMT09PW87KTA9PT10aGlzLmdldCh0LGUpP2UrKzoxPT09dGhpcy5nZXQodCxlKSYmZT5pPyhvPSEwLGk9ZSk6KHI9ITEsbz0hMCk7Zm9yKGxldCBzPWUrMTtzPHRoaXMucm93cztzKyspMCE9PXRoaXMuZ2V0KHQscykmJihyPSExKTt0Kyt9cmV0dXJuIHJ9ZWNoZWxvbkZvcm0oKXtsZXQgdD10aGlzLmNsb25lKCksZT0wLGk9MDtmb3IoO2U8dC5yb3dzJiZpPHQuY29sdW1uczspe2xldCByPWU7Zm9yKGxldCBvPWU7bzx0LnJvd3M7bysrKXQuZ2V0KG8saSk+dC5nZXQocixpKSYmKHI9byk7aWYoMD09PXQuZ2V0KHIsaSkpaSsrO2Vsc2V7dC5zd2FwUm93cyhlLHIpO2xldCBvPXQuZ2V0KGUsaSk7Zm9yKGxldCBzPWk7czx0LmNvbHVtbnM7cysrKXQuc2V0KGUscyx0LmdldChlLHMpL28pO2ZvcihsZXQgcz1lKzE7czx0LnJvd3M7cysrKXtsZXQgYT10LmdldChzLGkpL3QuZ2V0KGUsaSk7dC5zZXQocyxpLDApO2ZvcihsZXQgbD1pKzE7bDx0LmNvbHVtbnM7bCsrKXQuc2V0KHMsbCx0LmdldChzLGwpLXQuZ2V0KGUsbCkqYSl9ZSsrLGkrK319cmV0dXJuIHR9cmVkdWNlZEVjaGVsb25Gb3JtKCl7bGV0IHQ9dGhpcy5lY2hlbG9uRm9ybSgpLGU9dC5jb2x1bW5zLGk9dC5yb3dzLHI9aS0xO2Zvcig7cj49MDspaWYoMD09PXQubWF4Um93KHIpKXItLTtlbHNle2xldCBvPTAscz0hMTtmb3IoO288aSYmITE9PT1zOykxPT09dC5nZXQocixvKT9zPSEwOm8rKztmb3IobGV0IGE9MDthPHI7YSsrKXtsZXQgbD10LmdldChhLG8pO2ZvcihsZXQgYz1vO2M8ZTtjKyspe2xldCB1PXQuZ2V0KGEsYyktbCp0LmdldChyLGMpO3Quc2V0KGEsYyx1KX19ci0tfXJldHVybiB0fXNldCgpe3Rocm93IG5ldyBFcnJvcigic2V0IG1ldGhvZCBpcyB1bmltcGxlbWVudGVkIil9Z2V0KCl7dGhyb3cgbmV3IEVycm9yKCJnZXQgbWV0aG9kIGlzIHVuaW1wbGVtZW50ZWQiKX1yZXBlYXQodD17fSl7aWYoIm9iamVjdCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtsZXR7cm93czplPTEsY29sdW1uczppPTF9PXQ7aWYoIU51bWJlci5pc0ludGVnZXIoZSl8fGU8PTApdGhyb3cgbmV3IFR5cGVFcnJvcigicm93cyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGkpfHxpPD0wKXRocm93IG5ldyBUeXBlRXJyb3IoImNvbHVtbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiKTtsZXQgcj1uZXcgcm4odGhpcy5yb3dzKmUsdGhpcy5jb2x1bW5zKmkpO2ZvcihsZXQgbz0wO288ZTtvKyspZm9yKGxldCBzPTA7czxpO3MrKylyLnNldFN1Yk1hdHJpeCh0aGlzLHRoaXMucm93cypvLHRoaXMuY29sdW1ucypzKTtyZXR1cm4gcn1maWxsKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdGhpcy5zZXQoZSxpLHQpO3JldHVybiB0aGlzfW5lZygpe3JldHVybiB0aGlzLm11bFMoLTEpfWdldFJvdyh0KXtnYyh0aGlzLHQpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb2x1bW5zO2krKyllLnB1c2godGhpcy5nZXQodCxpKSk7cmV0dXJuIGV9Z2V0Um93VmVjdG9yKHQpe3JldHVybiBybi5yb3dWZWN0b3IodGhpcy5nZXRSb3codCkpfXNldFJvdyh0LGUpe2djKHRoaXMsdCksZT1uMCh0aGlzLGUpO2ZvcihsZXQgaT0wO2k8dGhpcy5jb2x1bW5zO2krKyl0aGlzLnNldCh0LGksZVtpXSk7cmV0dXJuIHRoaXN9c3dhcFJvd3ModCxlKXtnYyh0aGlzLHQpLGdjKHRoaXMsZSk7Zm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXtsZXQgcj10aGlzLmdldCh0LGkpO3RoaXMuc2V0KHQsaSx0aGlzLmdldChlLGkpKSx0aGlzLnNldChlLGkscil9cmV0dXJuIHRoaXN9Z2V0Q29sdW1uKHQpe19jKHRoaXMsdCk7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWUucHVzaCh0aGlzLmdldChpLHQpKTtyZXR1cm4gZX1nZXRDb2x1bW5WZWN0b3IodCl7cmV0dXJuIHJuLmNvbHVtblZlY3Rvcih0aGlzLmdldENvbHVtbih0KSl9c2V0Q29sdW1uKHQsZSl7X2ModGhpcyx0KSxlPWkwKHRoaXMsZSk7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKXRoaXMuc2V0KGksdCxlW2ldKTtyZXR1cm4gdGhpc31zd2FwQ29sdW1ucyh0LGUpe19jKHRoaXMsdCksX2ModGhpcyxlKTtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspe2xldCByPXRoaXMuZ2V0KGksdCk7dGhpcy5zZXQoaSx0LHRoaXMuZ2V0KGksZSkpLHRoaXMuc2V0KGksZSxyKX1yZXR1cm4gdGhpc31hZGRSb3dWZWN0b3IodCl7dD1uMCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdGhpcy5zZXQoZSxpLHRoaXMuZ2V0KGUsaSkrdFtpXSk7cmV0dXJuIHRoaXN9c3ViUm93VmVjdG9yKHQpe3Q9bjAodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXRoaXMuc2V0KGUsaSx0aGlzLmdldChlLGkpLXRbaV0pO3JldHVybiB0aGlzfW11bFJvd1ZlY3Rvcih0KXt0PW4wKHRoaXMsdCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgaT0wO2k8dGhpcy5jb2x1bW5zO2krKyl0aGlzLnNldChlLGksdGhpcy5nZXQoZSxpKSp0W2ldKTtyZXR1cm4gdGhpc31kaXZSb3dWZWN0b3IodCl7dD1uMCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdGhpcy5zZXQoZSxpLHRoaXMuZ2V0KGUsaSkvdFtpXSk7cmV0dXJuIHRoaXN9YWRkQ29sdW1uVmVjdG9yKHQpe3Q9aTAodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXRoaXMuc2V0KGUsaSx0aGlzLmdldChlLGkpK3RbZV0pO3JldHVybiB0aGlzfXN1YkNvbHVtblZlY3Rvcih0KXt0PWkwKHRoaXMsdCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgaT0wO2k8dGhpcy5jb2x1bW5zO2krKyl0aGlzLnNldChlLGksdGhpcy5nZXQoZSxpKS10W2VdKTtyZXR1cm4gdGhpc31tdWxDb2x1bW5WZWN0b3IodCl7dD1pMCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdGhpcy5zZXQoZSxpLHRoaXMuZ2V0KGUsaSkqdFtlXSk7cmV0dXJuIHRoaXN9ZGl2Q29sdW1uVmVjdG9yKHQpe3Q9aTAodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXRoaXMuc2V0KGUsaSx0aGlzLmdldChlLGkpL3RbZV0pO3JldHVybiB0aGlzfW11bFJvdyh0LGUpe2djKHRoaXMsdCk7Zm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXRoaXMuc2V0KHQsaSx0aGlzLmdldCh0LGkpKmUpO3JldHVybiB0aGlzfW11bENvbHVtbih0LGUpe19jKHRoaXMsdCk7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKXRoaXMuc2V0KGksdCx0aGlzLmdldChpLHQpKmUpO3JldHVybiB0aGlzfW1heCgpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiBOYU47bGV0IHQ9dGhpcy5nZXQoMCwwKTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXRoaXMuZ2V0KGUsaSk+dCYmKHQ9dGhpcy5nZXQoZSxpKSk7cmV0dXJuIHR9bWF4SW5kZXgoKXtyMCh0aGlzKTtsZXQgdD10aGlzLmdldCgwLDApLGU9WzAsMF07Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLmdldChpLHIpPnQmJih0PXRoaXMuZ2V0KGksciksZVswXT1pLGVbMV09cik7cmV0dXJuIGV9bWluKCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuIE5hTjtsZXQgdD10aGlzLmdldCgwLDApO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdGhpcy5nZXQoZSxpKTx0JiYodD10aGlzLmdldChlLGkpKTtyZXR1cm4gdH1taW5JbmRleCgpe3IwKHRoaXMpO2xldCB0PXRoaXMuZ2V0KDAsMCksZT1bMCwwXTtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuZ2V0KGkscik8dCYmKHQ9dGhpcy5nZXQoaSxyKSxlWzBdPWksZVsxXT1yKTtyZXR1cm4gZX1tYXhSb3codCl7aWYoZ2ModGhpcyx0KSx0aGlzLmlzRW1wdHkoKSlyZXR1cm4gTmFOO2xldCBlPXRoaXMuZ2V0KHQsMCk7Zm9yKGxldCBpPTE7aTx0aGlzLmNvbHVtbnM7aSsrKXRoaXMuZ2V0KHQsaSk+ZSYmKGU9dGhpcy5nZXQodCxpKSk7cmV0dXJuIGV9bWF4Um93SW5kZXgodCl7Z2ModGhpcyx0KSxyMCh0aGlzKTtsZXQgZT10aGlzLmdldCh0LDApLGk9W3QsMF07Zm9yKGxldCByPTE7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuZ2V0KHQscik+ZSYmKGU9dGhpcy5nZXQodCxyKSxpWzFdPXIpO3JldHVybiBpfW1pblJvdyh0KXtpZihnYyh0aGlzLHQpLHRoaXMuaXNFbXB0eSgpKXJldHVybiBOYU47bGV0IGU9dGhpcy5nZXQodCwwKTtmb3IobGV0IGk9MTtpPHRoaXMuY29sdW1ucztpKyspdGhpcy5nZXQodCxpKTxlJiYoZT10aGlzLmdldCh0LGkpKTtyZXR1cm4gZX1taW5Sb3dJbmRleCh0KXtnYyh0aGlzLHQpLHIwKHRoaXMpO2xldCBlPXRoaXMuZ2V0KHQsMCksaT1bdCwwXTtmb3IobGV0IHI9MTtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5nZXQodCxyKTxlJiYoZT10aGlzLmdldCh0LHIpLGlbMV09cik7cmV0dXJuIGl9bWF4Q29sdW1uKHQpe2lmKF9jKHRoaXMsdCksdGhpcy5pc0VtcHR5KCkpcmV0dXJuIE5hTjtsZXQgZT10aGlzLmdldCgwLHQpO2ZvcihsZXQgaT0xO2k8dGhpcy5yb3dzO2krKyl0aGlzLmdldChpLHQpPmUmJihlPXRoaXMuZ2V0KGksdCkpO3JldHVybiBlfW1heENvbHVtbkluZGV4KHQpe19jKHRoaXMsdCkscjAodGhpcyk7bGV0IGU9dGhpcy5nZXQoMCx0KSxpPVswLHRdO2ZvcihsZXQgcj0xO3I8dGhpcy5yb3dzO3IrKyl0aGlzLmdldChyLHQpPmUmJihlPXRoaXMuZ2V0KHIsdCksaVswXT1yKTtyZXR1cm4gaX1taW5Db2x1bW4odCl7aWYoX2ModGhpcyx0KSx0aGlzLmlzRW1wdHkoKSlyZXR1cm4gTmFOO2xldCBlPXRoaXMuZ2V0KDAsdCk7Zm9yKGxldCBpPTE7aTx0aGlzLnJvd3M7aSsrKXRoaXMuZ2V0KGksdCk8ZSYmKGU9dGhpcy5nZXQoaSx0KSk7cmV0dXJuIGV9bWluQ29sdW1uSW5kZXgodCl7X2ModGhpcyx0KSxyMCh0aGlzKTtsZXQgZT10aGlzLmdldCgwLHQpLGk9WzAsdF07Zm9yKGxldCByPTE7cjx0aGlzLnJvd3M7cisrKXRoaXMuZ2V0KHIsdCk8ZSYmKGU9dGhpcy5nZXQocix0KSxpWzBdPXIpO3JldHVybiBpfWRpYWcoKXtsZXQgdD1NYXRoLm1pbih0aGlzLnJvd3MsdGhpcy5jb2x1bW5zKSxlPVtdO2ZvcihsZXQgaT0wO2k8dDtpKyspZS5wdXNoKHRoaXMuZ2V0KGksaSkpO3JldHVybiBlfW5vcm0odD0iZnJvYmVuaXVzIil7bGV0IGU9MDtpZigibWF4Ij09PXQpcmV0dXJuIHRoaXMubWF4KCk7aWYoImZyb2Jlbml1cyI9PT10KXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKWUrPXRoaXMuZ2V0KGkscikqdGhpcy5nZXQoaSxyKTtyZXR1cm4gTWF0aC5zcXJ0KGUpfXRocm93IG5ldyBSYW5nZUVycm9yKGB1bmtub3duIG5vcm0gdHlwZTogJHt0fWApfWN1bXVsYXRpdmVTdW0oKXtsZXQgdD0wO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdCs9dGhpcy5nZXQoZSxpKSx0aGlzLnNldChlLGksdCk7cmV0dXJuIHRoaXN9ZG90KHQpe3RpLmlzTWF0cml4KHQpJiYodD10LnRvMURBcnJheSgpKTtsZXQgZT10aGlzLnRvMURBcnJheSgpO2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInZlY3RvcnMgZG8gbm90IGhhdmUgdGhlIHNhbWUgc2l6ZSIpO2xldCBpPTA7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspaSs9ZVtyXSp0W3JdO3JldHVybiBpfW1tdWwodCl7dD1ybi5jaGVja01hdHJpeCh0KTtsZXQgZT10aGlzLnJvd3MsaT10aGlzLmNvbHVtbnMscj10LmNvbHVtbnMsbz1uZXcgcm4oZSxyKSxzPW5ldyBGbG9hdDY0QXJyYXkoaSk7Zm9yKGxldCBhPTA7YTxyO2ErKyl7Zm9yKGxldCBsPTA7bDxpO2wrKylzW2xdPXQuZ2V0KGwsYSk7Zm9yKGxldCBsPTA7bDxlO2wrKyl7bGV0IGM9MDtmb3IobGV0IHU9MDt1PGk7dSsrKWMrPXRoaXMuZ2V0KGwsdSkqc1t1XTtvLnNldChsLGEsYyl9fXJldHVybiBvfXN0cmFzc2VuMngyKHQpe3Q9cm4uY2hlY2tNYXRyaXgodCk7bGV0IGU9bmV3IHJuKDIsMiksaT10aGlzLmdldCgwLDApLHI9dC5nZXQoMCwwKSxvPXRoaXMuZ2V0KDAsMSkscz10LmdldCgwLDEpLGE9dGhpcy5nZXQoMSwwKSxsPXQuZ2V0KDEsMCksYz10aGlzLmdldCgxLDEpLHU9dC5nZXQoMSwxKSxkPShpK2MpKihyK3UpLHA9KGErYykqcixoPWkqKHMtdSksZj1jKihsLXIpLG09KGkrbykqdSxEPWgrbSxUPXArZixrPWQtcCtoKyhhLWkpKihyK3MpO3JldHVybiBlLnNldCgwLDAsZCtmLW0rKG8tYykqKGwrdSkpLGUuc2V0KDAsMSxEKSxlLnNldCgxLDAsVCksZS5zZXQoMSwxLGspLGV9c3RyYXNzZW4zeDModCl7dD1ybi5jaGVja01hdHJpeCh0KTtsZXQgZT1uZXcgcm4oMywzKSxpPXRoaXMuZ2V0KDAsMCkscj10aGlzLmdldCgwLDEpLG89dGhpcy5nZXQoMCwyKSxzPXRoaXMuZ2V0KDEsMCksYT10aGlzLmdldCgxLDEpLGw9dGhpcy5nZXQoMSwyKSxjPXRoaXMuZ2V0KDIsMCksdT10aGlzLmdldCgyLDEpLGQ9dGhpcy5nZXQoMiwyKSxwPXQuZ2V0KDAsMCksaD10LmdldCgwLDEpLGY9dC5nZXQoMCwyKSxtPXQuZ2V0KDEsMCkseD10LmdldCgxLDEpLGc9dC5nZXQoMSwyKSxiPXQuZ2V0KDIsMCksRD10LmdldCgyLDEpLFQ9dC5nZXQoMiwyKSxaPShpLXMpKigtaCt4KSxmZT0oLWkrcythKSoocC1oK3gpLHVlPShzK2EpKigtcCtoKSxoZT1pKnAsdz0oLWkrYyt1KSoocC1mK2cpLEY9KC1pK2MpKihmLWcpLHE9KGMrdSkqKC1wK2YpLFk9KC1vK3UrZCkqKHgrYi1EKSxhZT0oby1kKSooeC1EKSxsZT1vKmIsSWU9KHUrZCkqKC1iK0QpLHZlPSgtbythK2wpKihnK2ItVCksRGU9KG8tbCkqKGctVCksbnQ9KGErbCkqKC1iK1QpLFRlPShpK3Irby1zLWEtdS1kKSp4K2ZlK3VlK2hlK1krbGUrSWUseHQ9aGUrdytxKyhpK3Irby1hLWwtYy11KSpnK2xlK3ZlK250LG10PVorYSooLXAraCttLXgtZy1iK1QpK2ZlK2hlK2xlK3ZlK0RlLGNlPVorZmUrdWUraGUrbCpELGR0PWxlK3ZlK0RlK250K3MqZixXZT1oZSt3K0YrdSooLXArZittLXgtZy1iK0QpK1krYWUrbGUsTXQ9WSthZStsZStJZStjKmgsYnQ9aGUrdytGK3ErZCpUO3JldHVybiBlLnNldCgwLDAsaGUrbGUrciptKSxlLnNldCgwLDEsVGUpLGUuc2V0KDAsMix4dCksZS5zZXQoMSwwLG10KSxlLnNldCgxLDEsY2UpLGUuc2V0KDEsMixkdCksZS5zZXQoMiwwLFdlKSxlLnNldCgyLDEsTXQpLGUuc2V0KDIsMixidCksZX1tbXVsU3RyYXNzZW4odCl7dD1ybi5jaGVja01hdHJpeCh0KTtsZXQgZT10aGlzLmNsb25lKCksaT1lLnJvd3Mscj1lLmNvbHVtbnMsbz10LnJvd3Mscz10LmNvbHVtbnM7ZnVuY3Rpb24gYShkLHAsaCl7aWYoZC5yb3dzPT09cCYmZC5jb2x1bW5zPT09aClyZXR1cm4gZDt7bGV0IHg9dGkuemVyb3MocCxoKTtyZXR1cm4geD14LnNldFN1Yk1hdHJpeChkLDAsMCkseH19ciE9PW8mJmNvbnNvbGUud2FybihgTXVsdGlwbHlpbmcgJHtpfSB4ICR7cn0gYW5kICR7b30geCAke3N9IG1hdHJpeDogZGltZW5zaW9ucyBkbyBub3QgbWF0Y2guYCk7bGV0IGw9TWF0aC5tYXgoaSxvKSxjPU1hdGgubWF4KHIscyk7cmV0dXJuIGU9YShlLGwsYyksZnVuY3Rpb24gdShkLHAsaCxmKXtpZihoPD01MTJ8fGY8PTUxMilyZXR1cm4gZC5tbXVsKHApO2glMj09MSYmZiUyPT0xPyhkPWEoZCxoKzEsZisxKSxwPWEocCxoKzEsZisxKSk6aCUyPT0xPyhkPWEoZCxoKzEsZikscD1hKHAsaCsxLGYpKTpmJTI9PTEmJihkPWEoZCxoLGYrMSkscD1hKHAsaCxmKzEpKTtsZXQgbT1wYXJzZUludChkLnJvd3MvMiwxMCkseD1wYXJzZUludChkLmNvbHVtbnMvMiwxMCksZz1kLnN1Yk1hdHJpeCgwLG0tMSwwLHgtMSksYj1wLnN1Yk1hdHJpeCgwLG0tMSwwLHgtMSksRD1kLnN1Yk1hdHJpeCgwLG0tMSx4LGQuY29sdW1ucy0xKSxUPXAuc3ViTWF0cml4KDAsbS0xLHgscC5jb2x1bW5zLTEpLGs9ZC5zdWJNYXRyaXgobSxkLnJvd3MtMSwwLHgtMSksWj1wLnN1Yk1hdHJpeChtLHAucm93cy0xLDAseC0xKSx6PWQuc3ViTWF0cml4KG0sZC5yb3dzLTEseCxkLmNvbHVtbnMtMSksZmU9cC5zdWJNYXRyaXgobSxwLnJvd3MtMSx4LHAuY29sdW1ucy0xKSx1ZT11KHRpLmFkZChnLHopLHRpLmFkZChiLGZlKSxtLHgpLGhlPXUodGkuYWRkKGsseiksYixtLHgpLHc9dShnLHRpLnN1YihULGZlKSxtLHgpLEY9dSh6LHRpLnN1YihaLGIpLG0seCkscT11KHRpLmFkZChnLEQpLGZlLG0seCksSz11KHRpLnN1YihrLGcpLHRpLmFkZChiLFQpLG0seCksZGU9dSh0aS5zdWIoRCx6KSx0aS5hZGQoWixmZSksbSx4KSxZPXRpLmFkZCh1ZSxGKTtZLnN1YihxKSxZLmFkZChkZSk7bGV0IGFlPXRpLmFkZCh3LHEpLGxlPXRpLmFkZChoZSxGKSxJZT10aS5zdWIodWUsaGUpO0llLmFkZCh3KSxJZS5hZGQoSyk7bGV0IHZlPXRpLnplcm9zKDIqWS5yb3dzLDIqWS5jb2x1bW5zKTtyZXR1cm4gdmU9dmUuc2V0U3ViTWF0cml4KFksMCwwKSx2ZT12ZS5zZXRTdWJNYXRyaXgoYWUsWS5yb3dzLDApLHZlPXZlLnNldFN1Yk1hdHJpeChsZSwwLFkuY29sdW1ucyksdmU9dmUuc2V0U3ViTWF0cml4KEllLFkucm93cyxZLmNvbHVtbnMpLHZlLnN1Yk1hdHJpeCgwLGgtMSwwLGYtMSl9KGUsdD1hKHQsbCxjKSxsLGMpfXNjYWxlUm93cyh0PXt9KXtpZigib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2xldHttaW46ZT0wLG1heDppPTF9PXQ7aWYoIU51bWJlci5pc0Zpbml0ZShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtaW4gbXVzdCBiZSBhIG51bWJlciIpO2lmKCFOdW1iZXIuaXNGaW5pdGUoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigibWF4IG11c3QgYmUgYSBudW1iZXIiKTtpZihlPj1pKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW4gbXVzdCBiZSBzbWFsbGVyIHRoYW4gbWF4Iik7bGV0IHI9bmV3IHJuKHRoaXMucm93cyx0aGlzLmNvbHVtbnMpO2ZvcihsZXQgbz0wO288dGhpcy5yb3dzO28rKyl7bGV0IHM9dGhpcy5nZXRSb3cobyk7cy5sZW5ndGg+MCYmcjYocyx7bWluOmUsbWF4Omksb3V0cHV0OnN9KSxyLnNldFJvdyhvLHMpfXJldHVybiByfXNjYWxlQ29sdW1ucyh0PXt9KXtpZigib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2xldHttaW46ZT0wLG1heDppPTF9PXQ7aWYoIU51bWJlci5pc0Zpbml0ZShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtaW4gbXVzdCBiZSBhIG51bWJlciIpO2lmKCFOdW1iZXIuaXNGaW5pdGUoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigibWF4IG11c3QgYmUgYSBudW1iZXIiKTtpZihlPj1pKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW4gbXVzdCBiZSBzbWFsbGVyIHRoYW4gbWF4Iik7bGV0IHI9bmV3IHJuKHRoaXMucm93cyx0aGlzLmNvbHVtbnMpO2ZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl7bGV0IHM9dGhpcy5nZXRDb2x1bW4obyk7cy5sZW5ndGgmJnI2KHMse21pbjplLG1heDppLG91dHB1dDpzfSksci5zZXRDb2x1bW4obyxzKX1yZXR1cm4gcn1mbGlwUm93cygpe2xldCB0PU1hdGguY2VpbCh0aGlzLmNvbHVtbnMvMik7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgaT0wO2k8dDtpKyspe2xldCByPXRoaXMuZ2V0KGUsaSksbz10aGlzLmdldChlLHRoaXMuY29sdW1ucy0xLWkpO3RoaXMuc2V0KGUsaSxvKSx0aGlzLnNldChlLHRoaXMuY29sdW1ucy0xLWkscil9cmV0dXJuIHRoaXN9ZmxpcENvbHVtbnMoKXtsZXQgdD1NYXRoLmNlaWwodGhpcy5yb3dzLzIpO2ZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKylmb3IobGV0IGk9MDtpPHQ7aSsrKXtsZXQgcj10aGlzLmdldChpLGUpLG89dGhpcy5nZXQodGhpcy5yb3dzLTEtaSxlKTt0aGlzLnNldChpLGUsbyksdGhpcy5zZXQodGhpcy5yb3dzLTEtaSxlLHIpfXJldHVybiB0aGlzfWtyb25lY2tlclByb2R1Y3QodCl7dD1ybi5jaGVja01hdHJpeCh0KTtsZXQgZT10aGlzLnJvd3MsaT10aGlzLmNvbHVtbnMscj10LnJvd3Msbz10LmNvbHVtbnMscz1uZXcgcm4oZSpyLGkqbyk7Zm9yKGxldCBhPTA7YTxlO2ErKylmb3IobGV0IGw9MDtsPGk7bCsrKWZvcihsZXQgYz0wO2M8cjtjKyspZm9yKGxldCB1PTA7dTxvO3UrKylzLnNldChyKmErYyxvKmwrdSx0aGlzLmdldChhLGwpKnQuZ2V0KGMsdSkpO3JldHVybiBzfWtyb25lY2tlclN1bSh0KXtpZih0PXJuLmNoZWNrTWF0cml4KHQpLCF0aGlzLmlzU3F1YXJlKCl8fCF0LmlzU3F1YXJlKCkpdGhyb3cgbmV3IEVycm9yKCJLcm9uZWNrZXIgU3VtIG5lZWRzIHR3byBTcXVhcmUgTWF0cmljZXMiKTtsZXQgZT10aGlzLnJvd3MsaT10LnJvd3Mscj10aGlzLmtyb25lY2tlclByb2R1Y3Qocm4uZXllKGksaSkpLG89cm4uZXllKGUsZSkua3JvbmVja2VyUHJvZHVjdCh0KTtyZXR1cm4gci5hZGQobyl9dHJhbnNwb3NlKCl7bGV0IHQ9bmV3IHJuKHRoaXMuY29sdW1ucyx0aGlzLnJvd3MpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdC5zZXQoaSxlLHRoaXMuZ2V0KGUsaSkpO3JldHVybiB0fXNvcnRSb3dzKHQ9RGZlKXtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspdGhpcy5zZXRSb3coZSx0aGlzLmdldFJvdyhlKS5zb3J0KHQpKTtyZXR1cm4gdGhpc31zb3J0Q29sdW1ucyh0PURmZSl7Zm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0Q29sdW1uKGUsdGhpcy5nZXRDb2x1bW4oZSkuc29ydCh0KSk7cmV0dXJuIHRoaXN9c3ViTWF0cml4KHQsZSxpLHIpe3M2KHRoaXMsdCxlLGkscik7bGV0IG89bmV3IHJuKGUtdCsxLHItaSsxKTtmb3IobGV0IHM9dDtzPD1lO3MrKylmb3IobGV0IGE9aTthPD1yO2ErKylvLnNldChzLXQsYS1pLHRoaXMuZ2V0KHMsYSkpO3JldHVybiBvfXN1Yk1hdHJpeFJvdyh0LGUsaSl7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09aSYmKGk9dGhpcy5jb2x1bW5zLTEpLGU+aXx8ZTwwfHxlPj10aGlzLmNvbHVtbnN8fGk8MHx8aT49dGhpcy5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJBcmd1bWVudCBvdXQgb2YgcmFuZ2UiKTtsZXQgcj1uZXcgcm4odC5sZW5ndGgsaS1lKzEpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKWZvcihsZXQgcz1lO3M8PWk7cysrKXtpZih0W29dPDB8fHRbb10+PXRoaXMucm93cyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgUm93IGluZGV4IG91dCBvZiByYW5nZTogJHt0W29dfWApO3Iuc2V0KG8scy1lLHRoaXMuZ2V0KHRbb10scykpfXJldHVybiByfXN1Yk1hdHJpeENvbHVtbih0LGUsaSl7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09aSYmKGk9dGhpcy5yb3dzLTEpLGU+aXx8ZTwwfHxlPj10aGlzLnJvd3N8fGk8MHx8aT49dGhpcy5yb3dzKXRocm93IG5ldyBSYW5nZUVycm9yKCJBcmd1bWVudCBvdXQgb2YgcmFuZ2UiKTtsZXQgcj1uZXcgcm4oaS1lKzEsdC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKWZvcihsZXQgcz1lO3M8PWk7cysrKXtpZih0W29dPDB8fHRbb10+PXRoaXMuY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ29sdW1uIGluZGV4IG91dCBvZiByYW5nZTogJHt0W29dfWApO3Iuc2V0KHMtZSxvLHRoaXMuZ2V0KHMsdFtvXSkpfXJldHVybiByfXNldFN1Yk1hdHJpeCh0LGUsaSl7aWYoKHQ9cm4uY2hlY2tNYXRyaXgodCkpLmlzRW1wdHkoKSlyZXR1cm4gdGhpcztzNih0aGlzLGUsZSt0LnJvd3MtMSxpLGkrdC5jb2x1bW5zLTEpO2ZvcihsZXQgcz0wO3M8dC5yb3dzO3MrKylmb3IobGV0IGE9MDthPHQuY29sdW1uczthKyspdGhpcy5zZXQoZStzLGkrYSx0LmdldChzLGEpKTtyZXR1cm4gdGhpc31zZWxlY3Rpb24odCxlKXtsZXQgaT1mdW5jdGlvbihuLHQsZSl7cmV0dXJue3JvdzprJGUobix0KSxjb2x1bW46RiRlKG4sZSl9fSh0aGlzLHQsZSkscj1uZXcgcm4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihsZXQgbz0wO288aS5yb3cubGVuZ3RoO28rKyl7bGV0IHM9aS5yb3dbb107Zm9yKGxldCBhPTA7YTxpLmNvbHVtbi5sZW5ndGg7YSsrKXIuc2V0KG8sYSx0aGlzLmdldChzLGkuY29sdW1uW2FdKSl9cmV0dXJuIHJ9dHJhY2UoKXtsZXQgdD1NYXRoLm1pbih0aGlzLnJvd3MsdGhpcy5jb2x1bW5zKSxlPTA7Zm9yKGxldCBpPTA7aTx0O2krKyllKz10aGlzLmdldChpLGkpO3JldHVybiBlfWNsb25lKCl7bGV0IHQ9bmV3IHJuKHRoaXMucm93cyx0aGlzLmNvbHVtbnMpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdC5zZXQoZSxpLHRoaXMuZ2V0KGUsaSkpO3JldHVybiB0fXN1bSh0KXtzd2l0Y2godCl7Y2FzZSJyb3ciOnJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1URShuLnJvd3MpO2ZvcihsZXQgZT0wO2U8bi5yb3dzOysrZSlmb3IobGV0IGk9MDtpPG4uY29sdW1uczsrK2kpdFtlXSs9bi5nZXQoZSxpKTtyZXR1cm4gdH0odGhpcyk7Y2FzZSJjb2x1bW4iOnJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1URShuLmNvbHVtbnMpO2ZvcihsZXQgZT0wO2U8bi5yb3dzOysrZSlmb3IobGV0IGk9MDtpPG4uY29sdW1uczsrK2kpdFtpXSs9bi5nZXQoZSxpKTtyZXR1cm4gdH0odGhpcyk7Y2FzZSB2b2lkIDA6cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PTA7Zm9yKGxldCBlPTA7ZTxuLnJvd3M7ZSsrKWZvcihsZXQgaT0wO2k8bi5jb2x1bW5zO2krKyl0Kz1uLmdldChlLGkpO3JldHVybiB0fSh0aGlzKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7dH1gKX19cHJvZHVjdCh0KXtzd2l0Y2godCl7Y2FzZSJyb3ciOnJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1URShuLnJvd3MsMSk7Zm9yKGxldCBlPTA7ZTxuLnJvd3M7KytlKWZvcihsZXQgaT0wO2k8bi5jb2x1bW5zOysraSl0W2VdKj1uLmdldChlLGkpO3JldHVybiB0fSh0aGlzKTtjYXNlImNvbHVtbiI6cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PVRFKG4uY29sdW1ucywxKTtmb3IobGV0IGU9MDtlPG4ucm93czsrK2UpZm9yKGxldCBpPTA7aTxuLmNvbHVtbnM7KytpKXRbaV0qPW4uZ2V0KGUsaSk7cmV0dXJuIHR9KHRoaXMpO2Nhc2Ugdm9pZCAwOnJldHVybiBmdW5jdGlvbihuKXtsZXQgdD0xO2ZvcihsZXQgZT0wO2U8bi5yb3dzO2UrKylmb3IobGV0IGk9MDtpPG4uY29sdW1ucztpKyspdCo9bi5nZXQoZSxpKTtyZXR1cm4gdH0odGhpcyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke3R9YCl9fW1lYW4odCl7bGV0IGU9dGhpcy5zdW0odCk7c3dpdGNoKHQpe2Nhc2Uicm93Ijpmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZVtpXS89dGhpcy5jb2x1bW5zO3JldHVybiBlO2Nhc2UiY29sdW1uIjpmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspZVtpXS89dGhpcy5yb3dzO3JldHVybiBlO2Nhc2Ugdm9pZCAwOnJldHVybiBlL3RoaXMuc2l6ZTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7dH1gKX19dmFyaWFuY2UodCxlPXt9KXtpZigib2JqZWN0Ij09dHlwZW9mIHQmJihlPXQsdD12b2lkIDApLCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7bGV0e3VuYmlhc2VkOmk9ITAsbWVhbjpyPXRoaXMubWVhbih0KX09ZTtpZigiYm9vbGVhbiIhPXR5cGVvZiBpKXRocm93IG5ldyBUeXBlRXJyb3IoInVuYmlhc2VkIG11c3QgYmUgYSBib29sZWFuIik7c3dpdGNoKHQpe2Nhc2Uicm93IjppZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtZWFuIG11c3QgYmUgYW4gYXJyYXkiKTtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPW4ucm93cyxyPW4uY29sdW1ucyxvPVtdO2ZvcihsZXQgcz0wO3M8aTtzKyspe2xldCBhPTAsbD0wLGM9MDtmb3IobGV0IHU9MDt1PHI7dSsrKWM9bi5nZXQocyx1KS1lW3NdLGErPWMsbCs9YypjO28ucHVzaCh0PyhsLWEqYS9yKS8oci0xKToobC1hKmEvcikvcil9cmV0dXJuIG99KHRoaXMsaSxyKTtjYXNlImNvbHVtbiI6aWYoIUFycmF5LmlzQXJyYXkocikpdGhyb3cgbmV3IFR5cGVFcnJvcigibWVhbiBtdXN0IGJlIGFuIGFycmF5Iik7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uLnJvd3Mscj1uLmNvbHVtbnMsbz1bXTtmb3IobGV0IHM9MDtzPHI7cysrKXtsZXQgYT0wLGw9MCxjPTA7Zm9yKGxldCB1PTA7dTxpO3UrKyljPW4uZ2V0KHUscyktZVtzXSxhKz1jLGwrPWMqYztvLnB1c2godD8obC1hKmEvaSkvKGktMSk6KGwtYSphL2kpL2kpfXJldHVybiBvfSh0aGlzLGkscik7Y2FzZSB2b2lkIDA6aWYoIm51bWJlciIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoIm1lYW4gbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5yb3dzLHI9bi5jb2x1bW5zLG89aSpyLHM9MCxhPTAsbD0wO2ZvcihsZXQgYz0wO2M8aTtjKyspZm9yKGxldCB1PTA7dTxyO3UrKylsPW4uZ2V0KGMsdSktZSxzKz1sLGErPWwqbDtyZXR1cm4gdD8oYS1zKnMvbykvKG8tMSk6KGEtcypzL28pL299KHRoaXMsaSxyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7dH1gKX19c3RhbmRhcmREZXZpYXRpb24odCxlKXsib2JqZWN0Ij09dHlwZW9mIHQmJihlPXQsdD12b2lkIDApO2xldCBpPXRoaXMudmFyaWFuY2UodCxlKTtpZih2b2lkIDA9PT10KXJldHVybiBNYXRoLnNxcnQoaSk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXT1NYXRoLnNxcnQoaVtyXSk7cmV0dXJuIGl9Y2VudGVyKHQsZT17fSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYoZT10LHQ9dm9pZCAwKSwib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2xldHtjZW50ZXI6aT10aGlzLm1lYW4odCl9PWU7c3dpdGNoKHQpe2Nhc2Uicm93IjppZighQXJyYXkuaXNBcnJheShpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJjZW50ZXIgbXVzdCBiZSBhbiBhcnJheSIpO3JldHVybiBmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0wO2U8bi5yb3dzO2UrKylmb3IobGV0IGk9MDtpPG4uY29sdW1ucztpKyspbi5zZXQoZSxpLG4uZ2V0KGUsaSktdFtlXSl9KHRoaXMsaSksdGhpcztjYXNlImNvbHVtbiI6aWYoIUFycmF5LmlzQXJyYXkoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2VudGVyIG11c3QgYmUgYW4gYXJyYXkiKTtyZXR1cm4gZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPG4ucm93cztlKyspZm9yKGxldCBpPTA7aTxuLmNvbHVtbnM7aSsrKW4uc2V0KGUsaSxuLmdldChlLGkpLXRbaV0pfSh0aGlzLGkpLHRoaXM7Y2FzZSB2b2lkIDA6aWYoIm51bWJlciIhPXR5cGVvZiBpKXRocm93IG5ldyBUeXBlRXJyb3IoImNlbnRlciBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTA7ZTxuLnJvd3M7ZSsrKWZvcihsZXQgaT0wO2k8bi5jb2x1bW5zO2krKyluLnNldChlLGksbi5nZXQoZSxpKS10KX0odGhpcyxpKSx0aGlzO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG9wdGlvbjogJHt0fWApfX1zY2FsZSh0LGU9e30pe2lmKCJvYmplY3QiPT10eXBlb2YgdCYmKGU9dCx0PXZvaWQgMCksIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtsZXQgaT1lLnNjYWxlO3N3aXRjaCh0KXtjYXNlInJvdyI6aWYodm9pZCAwPT09aSlpPWZ1bmN0aW9uKG4pe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5yb3dzO2UrKyl7bGV0IGk9MDtmb3IobGV0IHI9MDtyPG4uY29sdW1ucztyKyspaSs9TWF0aC5wb3cobi5nZXQoZSxyKSwyKS8obi5jb2x1bW5zLTEpO3QucHVzaChNYXRoLnNxcnQoaSkpfXJldHVybiB0fSh0aGlzKTtlbHNlIGlmKCFBcnJheS5pc0FycmF5KGkpKXRocm93IG5ldyBUeXBlRXJyb3IoInNjYWxlIG11c3QgYmUgYW4gYXJyYXkiKTtyZXR1cm4gZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPG4ucm93cztlKyspZm9yKGxldCBpPTA7aTxuLmNvbHVtbnM7aSsrKW4uc2V0KGUsaSxuLmdldChlLGkpL3RbZV0pfSh0aGlzLGkpLHRoaXM7Y2FzZSJjb2x1bW4iOmlmKHZvaWQgMD09PWkpaT1mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPG4uY29sdW1ucztlKyspe2xldCBpPTA7Zm9yKGxldCByPTA7cjxuLnJvd3M7cisrKWkrPU1hdGgucG93KG4uZ2V0KHIsZSksMikvKG4ucm93cy0xKTt0LnB1c2goTWF0aC5zcXJ0KGkpKX1yZXR1cm4gdH0odGhpcyk7ZWxzZSBpZighQXJyYXkuaXNBcnJheShpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzY2FsZSBtdXN0IGJlIGFuIGFycmF5Iik7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTA7ZTxuLnJvd3M7ZSsrKWZvcihsZXQgaT0wO2k8bi5jb2x1bW5zO2krKyluLnNldChlLGksbi5nZXQoZSxpKS90W2ldKX0odGhpcyxpKSx0aGlzO2Nhc2Ugdm9pZCAwOmlmKHZvaWQgMD09PWkpaT1mdW5jdGlvbihuKXtsZXQgdD1uLnNpemUtMSxlPTA7Zm9yKGxldCBpPTA7aTxuLmNvbHVtbnM7aSsrKWZvcihsZXQgcj0wO3I8bi5yb3dzO3IrKyllKz1NYXRoLnBvdyhuLmdldChyLGkpLDIpL3Q7cmV0dXJuIE1hdGguc3FydChlKX0odGhpcyk7ZWxzZSBpZigibnVtYmVyIiE9dHlwZW9mIGkpdGhyb3cgbmV3IFR5cGVFcnJvcigic2NhbGUgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0wO2U8bi5yb3dzO2UrKylmb3IobGV0IGk9MDtpPG4uY29sdW1ucztpKyspbi5zZXQoZSxpLG4uZ2V0KGUsaSkvdCl9KHRoaXMsaSksdGhpcztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7dH1gKX19dG9TdHJpbmcodCl7cmV0dXJuIG82KHRoaXMsdCl9fSx0aS5wcm90b3R5cGUua2xhc3M9Ik1hdHJpeCIsdHlwZW9mIFN5bWJvbDwidSImJih0aS5wcm90b3R5cGVbU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09cmZlKSx0aS5yYW5kb209dGkucmFuZCx0aS5yYW5kb21JbnQ9dGkucmFuZEludCx0aS5kaWFnb25hbD10aS5kaWFnLHRpLnByb3RvdHlwZS5kaWFnb25hbD10aS5wcm90b3R5cGUuZGlhZyx0aS5pZGVudGl0eT10aS5leWUsdGkucHJvdG90eXBlLm5lZ2F0ZT10aS5wcm90b3R5cGUubmVnLHRpLnByb3RvdHlwZS50ZW5zb3JQcm9kdWN0PXRpLnByb3RvdHlwZS5rcm9uZWNrZXJQcm9kdWN0LHJuPWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxlKXtpZihzdXBlcigpLHJuLmlzTWF0cml4KHQpKXJldHVybiB0LmNsb25lKCk7aWYoTnVtYmVyLmlzSW50ZWdlcih0KSYmdD49MCl7aWYodGhpcy5kYXRhPVtdLCEoTnVtYmVyLmlzSW50ZWdlcihlKSYmZT49MCkpdGhyb3cgbmV3IFR5cGVFcnJvcigibkNvbHVtbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiKTtmb3IobGV0IGk9MDtpPHQ7aSsrKXRoaXMuZGF0YS5wdXNoKG5ldyBGbG9hdDY0QXJyYXkoZSkpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBvciBhbiBhcnJheSIpO3tsZXQgaT10O2lmKCJudW1iZXIiIT10eXBlb2YoZT0odD1pLmxlbmd0aCk/aVswXS5sZW5ndGg6MCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGF0YSBtdXN0IGJlIGEgMkQgYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudCIpO3RoaXMuZGF0YT1bXTtmb3IobGV0IHI9MDtyPHQ7cisrKXtpZihpW3JdLmxlbmd0aCE9PWUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluY29uc2lzdGVudCBhcnJheSBkaW1lbnNpb25zIik7dGhpcy5kYXRhLnB1c2goRmxvYXQ2NEFycmF5LmZyb20oaVtyXSkpfX19dGhpcy5yb3dzPXQsdGhpcy5jb2x1bW5zPWV9c2V0KHQsZSxpKXtyZXR1cm4gdGhpcy5kYXRhW3RdW2VdPWksdGhpc31nZXQodCxlKXtyZXR1cm4gdGhpcy5kYXRhW3RdW2VdfXJlbW92ZVJvdyh0KXtyZXR1cm4gZ2ModGhpcyx0KSx0aGlzLmRhdGEuc3BsaWNlKHQsMSksdGhpcy5yb3dzLT0xLHRoaXN9YWRkUm93KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXQsdD10aGlzLnJvd3MpLGdjKHRoaXMsdCwhMCksZT1GbG9hdDY0QXJyYXkuZnJvbShuMCh0aGlzLGUpKSx0aGlzLmRhdGEuc3BsaWNlKHQsMCxlKSx0aGlzLnJvd3MrPTEsdGhpc31yZW1vdmVDb2x1bW4odCl7X2ModGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspe2xldCBpPW5ldyBGbG9hdDY0QXJyYXkodGhpcy5jb2x1bW5zLTEpO2ZvcihsZXQgcj0wO3I8dDtyKyspaVtyXT10aGlzLmRhdGFbZV1bcl07Zm9yKGxldCByPXQrMTtyPHRoaXMuY29sdW1ucztyKyspaVtyLTFdPXRoaXMuZGF0YVtlXVtyXTt0aGlzLmRhdGFbZV09aX1yZXR1cm4gdGhpcy5jb2x1bW5zLT0xLHRoaXN9YWRkQ29sdW1uKHQsZSl7dHlwZW9mIGU+InUiJiYoZT10LHQ9dGhpcy5jb2x1bW5zKSxfYyh0aGlzLHQsITApLGU9aTAodGhpcyxlKTtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspe2xldCByPW5ldyBGbG9hdDY0QXJyYXkodGhpcy5jb2x1bW5zKzEpLG89MDtmb3IoO288dDtvKyspcltvXT10aGlzLmRhdGFbaV1bb107Zm9yKHJbbysrXT1lW2ldO288dGhpcy5jb2x1bW5zKzE7bysrKXJbb109dGhpcy5kYXRhW2ldW28tMV07dGhpcy5kYXRhW2ldPXJ9cmV0dXJuIHRoaXMuY29sdW1ucys9MSx0aGlzfX0sdD1ybiwobj10aSkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihpKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGk/dGhpcy5hZGRTKGkpOnRoaXMuYWRkTShpKX0sbi5wcm90b3R5cGUuYWRkUz1mdW5jdGlvbihpKXtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pK2kpO3JldHVybiB0aGlzfSxuLnByb3RvdHlwZS5hZGRNPWZ1bmN0aW9uKGkpe2lmKGk9dC5jaGVja01hdHJpeChpKSx0aGlzLnJvd3MhPT1pLnJvd3N8fHRoaXMuY29sdW1ucyE9PWkuY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCByPTA7cjx0aGlzLnJvd3M7cisrKWZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLnNldChyLG8sdGhpcy5nZXQocixvKStpLmdldChyLG8pKTtyZXR1cm4gdGhpc30sbi5hZGQ9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IHQoaSkuYWRkKHIpfSxuLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oaSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpP3RoaXMuc3ViUyhpKTp0aGlzLnN1Yk0oaSl9LG4ucHJvdG90eXBlLnN1YlM9ZnVuY3Rpb24oaSl7Zm9yKGxldCByPTA7cjx0aGlzLnJvd3M7cisrKWZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLnNldChyLG8sdGhpcy5nZXQocixvKS1pKTtyZXR1cm4gdGhpc30sbi5wcm90b3R5cGUuc3ViTT1mdW5jdGlvbihpKXtpZihpPXQuY2hlY2tNYXRyaXgoaSksdGhpcy5yb3dzIT09aS5yb3dzfHx0aGlzLmNvbHVtbnMhPT1pLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbyktaS5nZXQocixvKSk7cmV0dXJuIHRoaXN9LG4uc3ViPWZ1bmN0aW9uKGkscil7cmV0dXJuIG5ldyB0KGkpLnN1YihyKX0sbi5wcm90b3R5cGUuc3VidHJhY3Q9bi5wcm90b3R5cGUuc3ViLG4ucHJvdG90eXBlLnN1YnRyYWN0Uz1uLnByb3RvdHlwZS5zdWJTLG4ucHJvdG90eXBlLnN1YnRyYWN0TT1uLnByb3RvdHlwZS5zdWJNLG4uc3VidHJhY3Q9bi5zdWIsbi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGkpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLm11bFMoaSk6dGhpcy5tdWxNKGkpfSxuLnByb3RvdHlwZS5tdWxTPWZ1bmN0aW9uKGkpe2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbykqaSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLm11bE09ZnVuY3Rpb24oaSl7aWYoaT10LmNoZWNrTWF0cml4KGkpLHRoaXMucm93cyE9PWkucm93c3x8dGhpcy5jb2x1bW5zIT09aS5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pKmkuZ2V0KHIsbykpO3JldHVybiB0aGlzfSxuLm11bD1mdW5jdGlvbihpLHIpe3JldHVybiBuZXcgdChpKS5tdWwocil9LG4ucHJvdG90eXBlLm11bHRpcGx5PW4ucHJvdG90eXBlLm11bCxuLnByb3RvdHlwZS5tdWx0aXBseVM9bi5wcm90b3R5cGUubXVsUyxuLnByb3RvdHlwZS5tdWx0aXBseU09bi5wcm90b3R5cGUubXVsTSxuLm11bHRpcGx5PW4ubXVsLG4ucHJvdG90eXBlLmRpdj1mdW5jdGlvbihpKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGk/dGhpcy5kaXZTKGkpOnRoaXMuZGl2TShpKX0sbi5wcm90b3R5cGUuZGl2Uz1mdW5jdGlvbihpKXtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pL2kpO3JldHVybiB0aGlzfSxuLnByb3RvdHlwZS5kaXZNPWZ1bmN0aW9uKGkpe2lmKGk9dC5jaGVja01hdHJpeChpKSx0aGlzLnJvd3MhPT1pLnJvd3N8fHRoaXMuY29sdW1ucyE9PWkuY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCByPTA7cjx0aGlzLnJvd3M7cisrKWZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLnNldChyLG8sdGhpcy5nZXQocixvKS9pLmdldChyLG8pKTtyZXR1cm4gdGhpc30sbi5kaXY9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IHQoaSkuZGl2KHIpfSxuLnByb3RvdHlwZS5kaXZpZGU9bi5wcm90b3R5cGUuZGl2LG4ucHJvdG90eXBlLmRpdmlkZVM9bi5wcm90b3R5cGUuZGl2UyxuLnByb3RvdHlwZS5kaXZpZGVNPW4ucHJvdG90eXBlLmRpdk0sbi5kaXZpZGU9bi5kaXYsbi5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGkpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLm1vZFMoaSk6dGhpcy5tb2RNKGkpfSxuLnByb3RvdHlwZS5tb2RTPWZ1bmN0aW9uKGkpe2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbyklaSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLm1vZE09ZnVuY3Rpb24oaSl7aWYoaT10LmNoZWNrTWF0cml4KGkpLHRoaXMucm93cyE9PWkucm93c3x8dGhpcy5jb2x1bW5zIT09aS5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pJWkuZ2V0KHIsbykpO3JldHVybiB0aGlzfSxuLm1vZD1mdW5jdGlvbihpLHIpe3JldHVybiBuZXcgdChpKS5tb2Qocil9LG4ucHJvdG90eXBlLm1vZHVsdXM9bi5wcm90b3R5cGUubW9kLG4ucHJvdG90eXBlLm1vZHVsdXNTPW4ucHJvdG90eXBlLm1vZFMsbi5wcm90b3R5cGUubW9kdWx1c009bi5wcm90b3R5cGUubW9kTSxuLm1vZHVsdXM9bi5tb2Qsbi5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGkpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLmFuZFMoaSk6dGhpcy5hbmRNKGkpfSxuLnByb3RvdHlwZS5hbmRTPWZ1bmN0aW9uKGkpe2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbykmaSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLmFuZE09ZnVuY3Rpb24oaSl7aWYoaT10LmNoZWNrTWF0cml4KGkpLHRoaXMucm93cyE9PWkucm93c3x8dGhpcy5jb2x1bW5zIT09aS5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pJmkuZ2V0KHIsbykpO3JldHVybiB0aGlzfSxuLmFuZD1mdW5jdGlvbihpLHIpe3JldHVybiBuZXcgdChpKS5hbmQocil9LG4ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGkpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLm9yUyhpKTp0aGlzLm9yTShpKX0sbi5wcm90b3R5cGUub3JTPWZ1bmN0aW9uKGkpe2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbyl8aSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLm9yTT1mdW5jdGlvbihpKXtpZihpPXQuY2hlY2tNYXRyaXgoaSksdGhpcy5yb3dzIT09aS5yb3dzfHx0aGlzLmNvbHVtbnMhPT1pLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbyl8aS5nZXQocixvKSk7cmV0dXJuIHRoaXN9LG4ub3I9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IHQoaSkub3Iocil9LG4ucHJvdG90eXBlLnhvcj1mdW5jdGlvbihpKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGk/dGhpcy54b3JTKGkpOnRoaXMueG9yTShpKX0sbi5wcm90b3R5cGUueG9yUz1mdW5jdGlvbihpKXtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pXmkpO3JldHVybiB0aGlzfSxuLnByb3RvdHlwZS54b3JNPWZ1bmN0aW9uKGkpe2lmKGk9dC5jaGVja01hdHJpeChpKSx0aGlzLnJvd3MhPT1pLnJvd3N8fHRoaXMuY29sdW1ucyE9PWkuY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCByPTA7cjx0aGlzLnJvd3M7cisrKWZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLnNldChyLG8sdGhpcy5nZXQocixvKV5pLmdldChyLG8pKTtyZXR1cm4gdGhpc30sbi54b3I9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IHQoaSkueG9yKHIpfSxuLnByb3RvdHlwZS5sZWZ0U2hpZnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpP3RoaXMubGVmdFNoaWZ0UyhpKTp0aGlzLmxlZnRTaGlmdE0oaSl9LG4ucHJvdG90eXBlLmxlZnRTaGlmdFM9ZnVuY3Rpb24oaSl7Zm9yKGxldCByPTA7cjx0aGlzLnJvd3M7cisrKWZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLnNldChyLG8sdGhpcy5nZXQocixvKTw8aSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLmxlZnRTaGlmdE09ZnVuY3Rpb24oaSl7aWYoaT10LmNoZWNrTWF0cml4KGkpLHRoaXMucm93cyE9PWkucm93c3x8dGhpcy5jb2x1bW5zIT09aS5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pPDxpLmdldChyLG8pKTtyZXR1cm4gdGhpc30sbi5sZWZ0U2hpZnQ9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IHQoaSkubGVmdFNoaWZ0KHIpfSxuLnByb3RvdHlwZS5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0PWZ1bmN0aW9uKGkpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTKGkpOnRoaXMuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdE0oaSl9LG4ucHJvdG90eXBlLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTPWZ1bmN0aW9uKGkpe2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbyk+PmkpO3JldHVybiB0aGlzfSxuLnByb3RvdHlwZS5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0TT1mdW5jdGlvbihpKXtpZihpPXQuY2hlY2tNYXRyaXgoaSksdGhpcy5yb3dzIT09aS5yb3dzfHx0aGlzLmNvbHVtbnMhPT1pLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbyk+PmkuZ2V0KHIsbykpO3JldHVybiB0aGlzfSxuLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQ9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IHQoaSkuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdChyKX0sbi5wcm90b3R5cGUucmlnaHRTaGlmdD1mdW5jdGlvbihpKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGk/dGhpcy5yaWdodFNoaWZ0UyhpKTp0aGlzLnJpZ2h0U2hpZnRNKGkpfSxuLnByb3RvdHlwZS5yaWdodFNoaWZ0Uz1mdW5jdGlvbihpKXtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pPj4+aSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLnJpZ2h0U2hpZnRNPWZ1bmN0aW9uKGkpe2lmKGk9dC5jaGVja01hdHJpeChpKSx0aGlzLnJvd3MhPT1pLnJvd3N8fHRoaXMuY29sdW1ucyE9PWkuY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCByPTA7cjx0aGlzLnJvd3M7cisrKWZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLnNldChyLG8sdGhpcy5nZXQocixvKT4+PmkuZ2V0KHIsbykpO3JldHVybiB0aGlzfSxuLnJpZ2h0U2hpZnQ9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IHQoaSkucmlnaHRTaGlmdChyKX0sbi5wcm90b3R5cGUuemVyb0ZpbGxSaWdodFNoaWZ0PW4ucHJvdG90eXBlLnJpZ2h0U2hpZnQsbi5wcm90b3R5cGUuemVyb0ZpbGxSaWdodFNoaWZ0Uz1uLnByb3RvdHlwZS5yaWdodFNoaWZ0UyxuLnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnRNPW4ucHJvdG90eXBlLnJpZ2h0U2hpZnRNLG4uemVyb0ZpbGxSaWdodFNoaWZ0PW4ucmlnaHRTaGlmdCxuLnByb3RvdHlwZS5ub3Q9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscix+dGhpcy5nZXQoaSxyKSk7cmV0dXJuIHRoaXN9LG4ubm90PWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5ub3QoKX0sbi5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLnNldChpLHIsTWF0aC5hYnModGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmFicz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuYWJzKCl9LG4ucHJvdG90eXBlLmFjb3M9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLmFjb3ModGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmFjb3M9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyB0KGkpLmFjb3MoKX0sbi5wcm90b3R5cGUuYWNvc2g9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLmFjb3NoKHRoaXMuZ2V0KGkscikpKTtyZXR1cm4gdGhpc30sbi5hY29zaD1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuYWNvc2goKX0sbi5wcm90b3R5cGUuYXNpbj1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGguYXNpbih0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4uYXNpbj1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuYXNpbigpfSxuLnByb3RvdHlwZS5hc2luaD1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGguYXNpbmgodGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmFzaW5oPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5hc2luaCgpfSxuLnByb3RvdHlwZS5hdGFuPWZ1bmN0aW9uKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLnNldChpLHIsTWF0aC5hdGFuKHRoaXMuZ2V0KGkscikpKTtyZXR1cm4gdGhpc30sbi5hdGFuPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5hdGFuKCl9LG4ucHJvdG90eXBlLmF0YW5oPWZ1bmN0aW9uKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLnNldChpLHIsTWF0aC5hdGFuaCh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4uYXRhbmg9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyB0KGkpLmF0YW5oKCl9LG4ucHJvdG90eXBlLmNicnQ9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLmNicnQodGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmNicnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyB0KGkpLmNicnQoKX0sbi5wcm90b3R5cGUuY2VpbD1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGguY2VpbCh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4uY2VpbD1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuY2VpbCgpfSxuLnByb3RvdHlwZS5jbHozMj1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGguY2x6MzIodGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmNsejMyPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5jbHozMigpfSxuLnByb3RvdHlwZS5jb3M9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLmNvcyh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4uY29zPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5jb3MoKX0sbi5wcm90b3R5cGUuY29zaD1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGguY29zaCh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4uY29zaD1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuY29zaCgpfSxuLnByb3RvdHlwZS5leHA9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLmV4cCh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4uZXhwPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5leHAoKX0sbi5wcm90b3R5cGUuZXhwbTE9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLmV4cG0xKHRoaXMuZ2V0KGkscikpKTtyZXR1cm4gdGhpc30sbi5leHBtMT1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuZXhwbTEoKX0sbi5wcm90b3R5cGUuZmxvb3I9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLmZsb29yKHRoaXMuZ2V0KGkscikpKTtyZXR1cm4gdGhpc30sbi5mbG9vcj1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuZmxvb3IoKX0sbi5wcm90b3R5cGUuZnJvdW5kPWZ1bmN0aW9uKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLnNldChpLHIsTWF0aC5mcm91bmQodGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmZyb3VuZD1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuZnJvdW5kKCl9LG4ucHJvdG90eXBlLmxvZz1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGgubG9nKHRoaXMuZ2V0KGkscikpKTtyZXR1cm4gdGhpc30sbi5sb2c9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyB0KGkpLmxvZygpfSxuLnByb3RvdHlwZS5sb2cxcD1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGgubG9nMXAodGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmxvZzFwPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5sb2cxcCgpfSxuLnByb3RvdHlwZS5sb2cxMD1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGgubG9nMTAodGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmxvZzEwPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5sb2cxMCgpfSxuLnByb3RvdHlwZS5sb2cyPWZ1bmN0aW9uKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLnNldChpLHIsTWF0aC5sb2cyKHRoaXMuZ2V0KGkscikpKTtyZXR1cm4gdGhpc30sbi5sb2cyPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5sb2cyKCl9LG4ucHJvdG90eXBlLnJvdW5kPWZ1bmN0aW9uKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLnNldChpLHIsTWF0aC5yb3VuZCh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4ucm91bmQ9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyB0KGkpLnJvdW5kKCl9LG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLnNpZ24odGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLnNpZ249ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyB0KGkpLnNpZ24oKX0sbi5wcm90b3R5cGUuc2luPWZ1bmN0aW9uKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLnNldChpLHIsTWF0aC5zaW4odGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLnNpbj1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuc2luKCl9LG4ucHJvdG90eXBlLnNpbmg9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLnNpbmgodGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLnNpbmg9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyB0KGkpLnNpbmgoKX0sbi5wcm90b3R5cGUuc3FydD1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGguc3FydCh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4uc3FydD1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuc3FydCgpfSxuLnByb3RvdHlwZS50YW49ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLnRhbih0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4udGFuPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS50YW4oKX0sbi5wcm90b3R5cGUudGFuaD1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGgudGFuaCh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4udGFuaD1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkudGFuaCgpfSxuLnByb3RvdHlwZS50cnVuYz1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGgudHJ1bmModGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLnRydW5jPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS50cnVuYygpfSxuLnBvdz1mdW5jdGlvbihpLHIpe3JldHVybiBuZXcgdChpKS5wb3cocil9LG4ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihpKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGk/dGhpcy5wb3dTKGkpOnRoaXMucG93TShpKX0sbi5wcm90b3R5cGUucG93Uz1mdW5jdGlvbihpKXtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyxNYXRoLnBvdyh0aGlzLmdldChyLG8pLGkpKTtyZXR1cm4gdGhpc30sbi5wcm90b3R5cGUucG93TT1mdW5jdGlvbihpKXtpZihpPXQuY2hlY2tNYXRyaXgoaSksdGhpcy5yb3dzIT09aS5yb3dzfHx0aGlzLmNvbHVtbnMhPT1pLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLE1hdGgucG93KHRoaXMuZ2V0KHIsbyksaS5nZXQocixvKSkpO3JldHVybiB0aGlzfX0pLEFmZT1obygoKT0+e30pLERFPWhvKCgpPT57bzAoKSxBbD1jbGFzcyBleHRlbmRzIHRpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kYXRhPXQsdGhpcy5yb3dzPXQubGVuZ3RoLHRoaXMuY29sdW1ucz10WzBdLmxlbmd0aH1zZXQodCxlLGkpe3JldHVybiB0aGlzLmRhdGFbdF1bZV09aSx0aGlzfWdldCh0LGUpe3JldHVybiB0aGlzLmRhdGFbdF1bZV19fX0pLElmZT1obygoKT0+e28wKCksREUoKSxBRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtsZXQgYSxsLGMsdSxkLHAsaCxmLG0sZT0odD1BbC5jaGVja01hdHJpeCh0KSkuY2xvbmUoKSxpPWUucm93cyxyPWUuY29sdW1ucyxvPW5ldyBGbG9hdDY0QXJyYXkoaSkscz0xO2ZvcihhPTA7YTxpO2ErKylvW2FdPWE7Zm9yKGY9bmV3IEZsb2F0NjRBcnJheShpKSxsPTA7bDxyO2wrKyl7Zm9yKGE9MDthPGk7YSsrKWZbYV09ZS5nZXQoYSxsKTtmb3IoYT0wO2E8aTthKyspe2ZvcihtPU1hdGgubWluKGEsbCksZD0wLGM9MDtjPG07YysrKWQrPWUuZ2V0KGEsYykqZltjXTtmW2FdLT1kLGUuc2V0KGEsbCxmW2FdKX1mb3IodT1sLGE9bCsxO2E8aTthKyspTWF0aC5hYnMoZlthXSk+TWF0aC5hYnMoZlt1XSkmJih1PWEpO2lmKHUhPT1sKXtmb3IoYz0wO2M8cjtjKyspcD1lLmdldCh1LGMpLGUuc2V0KHUsYyxlLmdldChsLGMpKSxlLnNldChsLGMscCk7aD1vW3VdLG9bdV09b1tsXSxvW2xdPWgscz0tc31pZihsPGkmJjAhPT1lLmdldChsLGwpKWZvcihhPWwrMTthPGk7YSsrKWUuc2V0KGEsbCxlLmdldChhLGwpL2UuZ2V0KGwsbCkpfXRoaXMuTFU9ZSx0aGlzLnBpdm90VmVjdG9yPW8sdGhpcy5waXZvdFNpZ249c31pc1Npbmd1bGFyKCl7bGV0IHQ9dGhpcy5MVSxlPXQuY29sdW1ucztmb3IobGV0IGk9MDtpPGU7aSsrKWlmKDA9PT10LmdldChpLGkpKXJldHVybiEwO3JldHVybiExfXNvbHZlKHQpe3Q9cm4uY2hlY2tNYXRyaXgodCk7bGV0IGU9dGhpcy5MVTtpZihlLnJvd3MhPT10LnJvd3MpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1hdHJpeCBkaW1lbnNpb25zIik7aWYodGhpcy5pc1Npbmd1bGFyKCkpdGhyb3cgbmV3IEVycm9yKCJMVSBtYXRyaXggaXMgc2luZ3VsYXIiKTtsZXQgYSxsLGMscj10LmNvbHVtbnMsbz10LnN1Yk1hdHJpeFJvdyh0aGlzLnBpdm90VmVjdG9yLDAsci0xKSxzPWUuY29sdW1ucztmb3IoYz0wO2M8cztjKyspZm9yKGE9YysxO2E8czthKyspZm9yKGw9MDtsPHI7bCsrKW8uc2V0KGEsbCxvLmdldChhLGwpLW8uZ2V0KGMsbCkqZS5nZXQoYSxjKSk7Zm9yKGM9cy0xO2M+PTA7Yy0tKXtmb3IobD0wO2w8cjtsKyspby5zZXQoYyxsLG8uZ2V0KGMsbCkvZS5nZXQoYyxjKSk7Zm9yKGE9MDthPGM7YSsrKWZvcihsPTA7bDxyO2wrKylvLnNldChhLGwsby5nZXQoYSxsKS1vLmdldChjLGwpKmUuZ2V0KGEsYykpfXJldHVybiBvfWdldCBkZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuTFU7aWYoIXQuaXNTcXVhcmUoKSl0aHJvdyBuZXcgRXJyb3IoIk1hdHJpeCBtdXN0IGJlIHNxdWFyZSIpO2xldCBlPXRoaXMucGl2b3RTaWduLGk9dC5jb2x1bW5zO2ZvcihsZXQgcj0wO3I8aTtyKyspZSo9dC5nZXQocixyKTtyZXR1cm4gZX1nZXQgbG93ZXJUcmlhbmd1bGFyTWF0cml4KCl7bGV0IHQ9dGhpcy5MVSxlPXQucm93cyxpPXQuY29sdW1ucyxyPW5ldyBybihlLGkpO2ZvcihsZXQgbz0wO288ZTtvKyspZm9yKGxldCBzPTA7czxpO3MrKylyLnNldChvLHMsbz5zP3QuZ2V0KG8scyk6bz09PXM/MTowKTtyZXR1cm4gcn1nZXQgdXBwZXJUcmlhbmd1bGFyTWF0cml4KCl7bGV0IHQ9dGhpcy5MVSxlPXQucm93cyxpPXQuY29sdW1ucyxyPW5ldyBybihlLGkpO2ZvcihsZXQgbz0wO288ZTtvKyspZm9yKGxldCBzPTA7czxpO3MrKylyLnNldChvLHMsbzw9cz90LmdldChvLHMpOjApO3JldHVybiByfWdldCBwaXZvdFBlcm11dGF0aW9uVmVjdG9yKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5waXZvdFZlY3Rvcil9fX0pO2Z1bmN0aW9uIE9wKG4sdCl7bGV0IGU9MDtyZXR1cm4gTWF0aC5hYnMobik+TWF0aC5hYnModCk/KGU9dC9uLE1hdGguYWJzKG4pKk1hdGguc3FydCgxK2UqZSkpOjAhPT10PyhlPW4vdCxNYXRoLmFicyh0KSpNYXRoLnNxcnQoMStlKmUpKTowfXZhciBJRSx6YixsNj1obygoKT0+e30pLFBmZT1obygoKT0+e28wKCksREUoKSxsNigpLElFPWNsYXNze2NvbnN0cnVjdG9yKHQpe2xldCBzLGEsbCxjLGU9KHQ9QWwuY2hlY2tNYXRyaXgodCkpLmNsb25lKCksaT10LnJvd3Mscj10LmNvbHVtbnMsbz1uZXcgRmxvYXQ2NEFycmF5KHIpO2ZvcihsPTA7bDxyO2wrKyl7bGV0IHU9MDtmb3Iocz1sO3M8aTtzKyspdT1PcCh1LGUuZ2V0KHMsbCkpO2lmKDAhPT11KXtmb3IoZS5nZXQobCxsKTwwJiYodT0tdSkscz1sO3M8aTtzKyspZS5zZXQocyxsLGUuZ2V0KHMsbCkvdSk7Zm9yKGUuc2V0KGwsbCxlLmdldChsLGwpKzEpLGE9bCsxO2E8cjthKyspe2ZvcihjPTAscz1sO3M8aTtzKyspYys9ZS5nZXQocyxsKSplLmdldChzLGEpO2ZvcihjPS1jL2UuZ2V0KGwsbCkscz1sO3M8aTtzKyspZS5zZXQocyxhLGUuZ2V0KHMsYSkrYyplLmdldChzLGwpKX19b1tsXT0tdX10aGlzLlFSPWUsdGhpcy5SZGlhZz1vfXNvbHZlKHQpe3Q9cm4uY2hlY2tNYXRyaXgodCk7bGV0IGU9dGhpcy5RUixpPWUucm93cztpZih0LnJvd3MhPT1pKXRocm93IG5ldyBFcnJvcigiTWF0cml4IHJvdyBkaW1lbnNpb25zIG11c3QgYWdyZWUiKTtpZighdGhpcy5pc0Z1bGxSYW5rKCkpdGhyb3cgbmV3IEVycm9yKCJNYXRyaXggaXMgcmFuayBkZWZpY2llbnQiKTtsZXQgYSxsLGMsdSxyPXQuY29sdW1ucyxvPXQuY2xvbmUoKSxzPWUuY29sdW1ucztmb3IoYz0wO2M8cztjKyspZm9yKGw9MDtsPHI7bCsrKXtmb3IodT0wLGE9YzthPGk7YSsrKXUrPWUuZ2V0KGEsYykqby5nZXQoYSxsKTtmb3IodT0tdS9lLmdldChjLGMpLGE9YzthPGk7YSsrKW8uc2V0KGEsbCxvLmdldChhLGwpK3UqZS5nZXQoYSxjKSl9Zm9yKGM9cy0xO2M+PTA7Yy0tKXtmb3IobD0wO2w8cjtsKyspby5zZXQoYyxsLG8uZ2V0KGMsbCkvdGhpcy5SZGlhZ1tjXSk7Zm9yKGE9MDthPGM7YSsrKWZvcihsPTA7bDxyO2wrKylvLnNldChhLGwsby5nZXQoYSxsKS1vLmdldChjLGwpKmUuZ2V0KGEsYykpfXJldHVybiBvLnN1Yk1hdHJpeCgwLHMtMSwwLHItMSl9aXNGdWxsUmFuaygpe2xldCB0PXRoaXMuUVIuY29sdW1ucztmb3IobGV0IGU9MDtlPHQ7ZSsrKWlmKDA9PT10aGlzLlJkaWFnW2VdKXJldHVybiExO3JldHVybiEwfWdldCB1cHBlclRyaWFuZ3VsYXJNYXRyaXgoKXtsZXQgcixvLHQ9dGhpcy5RUixlPXQuY29sdW1ucyxpPW5ldyBybihlLGUpO2ZvcihyPTA7cjxlO3IrKylmb3Iobz0wO288ZTtvKyspaS5zZXQocixvLHI8bz90LmdldChyLG8pOnI9PT1vP3RoaXMuUmRpYWdbcl06MCk7cmV0dXJuIGl9Z2V0IG9ydGhvZ29uYWxNYXRyaXgoKXtsZXQgbyxzLGEsbCx0PXRoaXMuUVIsZT10LnJvd3MsaT10LmNvbHVtbnMscj1uZXcgcm4oZSxpKTtmb3IoYT1pLTE7YT49MDthLS0pe2ZvcihvPTA7bzxlO28rKylyLnNldChvLGEsMCk7Zm9yKHIuc2V0KGEsYSwxKSxzPWE7czxpO3MrKylpZigwIT09dC5nZXQoYSxhKSl7Zm9yKGw9MCxvPWE7bzxlO28rKylsKz10LmdldChvLGEpKnIuZ2V0KG8scyk7Zm9yKGw9LWwvdC5nZXQoYSxhKSxvPWE7bzxlO28rKylyLnNldChvLHMsci5nZXQobyxzKStsKnQuZ2V0KG8sYSkpfX1yZXR1cm4gcn19fSksUmZlPWhvKCgpPT57bzAoKSxERSgpLGw2KCksemI9Y2xhc3N7Y29uc3RydWN0b3IodCxlPXt9KXtpZigodD1BbC5jaGVja01hdHJpeCh0KSkuaXNFbXB0eSgpKXRocm93IG5ldyBFcnJvcigiTWF0cml4IG11c3QgYmUgbm9uLWVtcHR5Iik7bGV0IGQsaT10LnJvd3Mscj10LmNvbHVtbnMse2NvbXB1dGVMZWZ0U2luZ3VsYXJWZWN0b3JzOm89ITAsY29tcHV0ZVJpZ2h0U2luZ3VsYXJWZWN0b3JzOnM9ITAsYXV0b1RyYW5zcG9zZTphPSExfT1lLGw9Qm9vbGVhbihvKSxjPUJvb2xlYW4ocyksdT0hMTtpZihpPHIpaWYoYSl7ZD10LnRyYW5zcG9zZSgpLGk9ZC5yb3dzLHI9ZC5jb2x1bW5zLHU9ITA7bGV0IHc9bDtsPWMsYz13fWVsc2UgZD10LmNsb25lKCksY29uc29sZS53YXJuKCJDb21wdXRpbmcgU1ZEIG9uIGEgbWF0cml4IHdpdGggbW9yZSBjb2x1bW5zIHRoYW4gcm93cy4gQ29uc2lkZXIgZW5hYmxpbmcgYXV0b1RyYW5zcG9zZSIpO2Vsc2UgZD10LmNsb25lKCk7bGV0IHA9TWF0aC5taW4oaSxyKSxoPU1hdGgubWluKGkrMSxyKSxmPW5ldyBGbG9hdDY0QXJyYXkoaCksbT1uZXcgcm4oaSxwKSx4PW5ldyBybihyLHIpLGc9bmV3IEZsb2F0NjRBcnJheShyKSxiPW5ldyBGbG9hdDY0QXJyYXkoaSksRD1uZXcgRmxvYXQ2NEFycmF5KGgpO2ZvcihsZXQgdz0wO3c8aDt3KyspRFt3XT13O2xldCBUPU1hdGgubWluKGktMSxyKSxrPU1hdGgubWF4KDAsTWF0aC5taW4oci0yLGkpKSxaPU1hdGgubWF4KFQsayk7Zm9yKGxldCB3PTA7dzxaO3crKyl7aWYodzxUKXtmW3ddPTA7Zm9yKGxldCBGPXc7RjxpO0YrKylmW3ddPU9wKGZbd10sZC5nZXQoRix3KSk7aWYoMCE9PWZbd10pe2QuZ2V0KHcsdyk8MCYmKGZbd109LWZbd10pO2ZvcihsZXQgRj13O0Y8aTtGKyspZC5zZXQoRix3LGQuZ2V0KEYsdykvZlt3XSk7ZC5zZXQodyx3LGQuZ2V0KHcsdykrMSl9Zlt3XT0tZlt3XX1mb3IobGV0IEY9dysxO0Y8cjtGKyspe2lmKHc8VCYmMCE9PWZbd10pe2xldCBxPTA7Zm9yKGxldCBLPXc7SzxpO0srKylxKz1kLmdldChLLHcpKmQuZ2V0KEssRik7cT0tcS9kLmdldCh3LHcpO2ZvcihsZXQgSz13O0s8aTtLKyspZC5zZXQoSyxGLGQuZ2V0KEssRikrcSpkLmdldChLLHcpKX1nW0ZdPWQuZ2V0KHcsRil9aWYobCYmdzxUKWZvcihsZXQgRj13O0Y8aTtGKyspbS5zZXQoRix3LGQuZ2V0KEYsdykpO2lmKHc8ayl7Z1t3XT0wO2ZvcihsZXQgRj13KzE7RjxyO0YrKylnW3ddPU9wKGdbd10sZ1tGXSk7aWYoMCE9PWdbd10pe2dbdysxXTwwJiYoZ1t3XT0wLWdbd10pO2ZvcihsZXQgRj13KzE7RjxyO0YrKylnW0ZdLz1nW3ddO2dbdysxXSs9MX1pZihnW3ddPS1nW3ddLHcrMTxpJiYwIT09Z1t3XSl7Zm9yKGxldCBGPXcrMTtGPGk7RisrKWJbRl09MDtmb3IobGV0IEY9dysxO0Y8aTtGKyspZm9yKGxldCBxPXcrMTtxPHI7cSsrKWJbRl0rPWdbcV0qZC5nZXQoRixxKTtmb3IobGV0IEY9dysxO0Y8cjtGKyspe2xldCBxPS1nW0ZdL2dbdysxXTtmb3IobGV0IEs9dysxO0s8aTtLKyspZC5zZXQoSyxGLGQuZ2V0KEssRikrcSpiW0tdKX19aWYoYylmb3IobGV0IEY9dysxO0Y8cjtGKyspeC5zZXQoRix3LGdbRl0pfX1sZXQgej1NYXRoLm1pbihyLGkrMSk7aWYoVDxyJiYoZltUXT1kLmdldChULFQpKSxpPHomJihmW3otMV09MCksaysxPHomJihnW2tdPWQuZ2V0KGssei0xKSksZ1t6LTFdPTAsbCl7Zm9yKGxldCB3PVQ7dzxwO3crKyl7Zm9yKGxldCBGPTA7RjxpO0YrKyltLnNldChGLHcsMCk7bS5zZXQodyx3LDEpfWZvcihsZXQgdz1ULTE7dz49MDt3LS0paWYoMCE9PWZbd10pe2ZvcihsZXQgRj13KzE7RjxwO0YrKyl7bGV0IHE9MDtmb3IobGV0IEs9dztLPGk7SysrKXErPW0uZ2V0KEssdykqbS5nZXQoSyxGKTtxPS1xL20uZ2V0KHcsdyk7Zm9yKGxldCBLPXc7SzxpO0srKyltLnNldChLLEYsbS5nZXQoSyxGKStxKm0uZ2V0KEssdykpfWZvcihsZXQgRj13O0Y8aTtGKyspbS5zZXQoRix3LC1tLmdldChGLHcpKTttLnNldCh3LHcsMSttLmdldCh3LHcpKTtmb3IobGV0IEY9MDtGPHctMTtGKyspbS5zZXQoRix3LDApfWVsc2V7Zm9yKGxldCBGPTA7RjxpO0YrKyltLnNldChGLHcsMCk7bS5zZXQodyx3LDEpfX1pZihjKWZvcihsZXQgdz1yLTE7dz49MDt3LS0pe2lmKHc8ayYmMCE9PWdbd10pZm9yKGxldCBGPXcrMTtGPHI7RisrKXtsZXQgcT0wO2ZvcihsZXQgSz13KzE7SzxyO0srKylxKz14LmdldChLLHcpKnguZ2V0KEssRik7cT0tcS94LmdldCh3KzEsdyk7Zm9yKGxldCBLPXcrMTtLPHI7SysrKXguc2V0KEssRix4LmdldChLLEYpK3EqeC5nZXQoSyx3KSl9Zm9yKGxldCBGPTA7RjxyO0YrKyl4LnNldChGLHcsMCk7eC5zZXQodyx3LDEpfWxldCBmZT16LTEsdWU9MCxoZT1OdW1iZXIuRVBTSUxPTjtmb3IoO3o+MDspe2xldCB3LEY7Zm9yKHc9ei0yO3c+PS0xJiYtMSE9PXc7dy0tKXtsZXQgcT1OdW1iZXIuTUlOX1ZBTFVFK2hlKk1hdGguYWJzKGZbd10rTWF0aC5hYnMoZlt3KzFdKSk7aWYoTWF0aC5hYnMoZ1t3XSk8PXF8fE51bWJlci5pc05hTihnW3ddKSl7Z1t3XT0wO2JyZWFrfX1pZih3PT09ei0yKUY9NDtlbHNle2xldCBxO2ZvcihxPXotMTtxPj13JiZxIT09dztxLS0pe2xldCBLPShxIT09ej9NYXRoLmFicyhnW3FdKTowKSsocSE9PXcrMT9NYXRoLmFicyhnW3EtMV0pOjApO2lmKE1hdGguYWJzKGZbcV0pPD1oZSpLKXtmW3FdPTA7YnJlYWt9fXE9PT13P0Y9MzpxPT09ei0xP0Y9MTooRj0yLHc9cSl9c3dpdGNoKHcrKyxGKXtjYXNlIDE6e2xldCBxPWdbei0yXTtnW3otMl09MDtmb3IobGV0IEs9ei0yO0s+PXc7Sy0tKXtsZXQgZGU9T3AoZltLXSxxKSxZPWZbS10vZGUsYWU9cS9kZTtpZihmW0tdPWRlLEshPT13JiYocT0tYWUqZ1tLLTFdLGdbSy0xXT1ZKmdbSy0xXSksYylmb3IobGV0IGxlPTA7bGU8cjtsZSsrKWRlPVkqeC5nZXQobGUsSykrYWUqeC5nZXQobGUsei0xKSx4LnNldChsZSx6LTEsLWFlKnguZ2V0KGxlLEspK1kqeC5nZXQobGUsei0xKSkseC5zZXQobGUsSyxkZSl9YnJlYWt9Y2FzZSAyOntsZXQgcT1nW3ctMV07Z1t3LTFdPTA7Zm9yKGxldCBLPXc7Szx6O0srKyl7bGV0IGRlPU9wKGZbS10scSksWT1mW0tdL2RlLGFlPXEvZGU7aWYoZltLXT1kZSxxPS1hZSpnW0tdLGdbS109WSpnW0tdLGwpZm9yKGxldCBsZT0wO2xlPGk7bGUrKylkZT1ZKm0uZ2V0KGxlLEspK2FlKm0uZ2V0KGxlLHctMSksbS5zZXQobGUsdy0xLC1hZSptLmdldChsZSxLKStZKm0uZ2V0KGxlLHctMSkpLG0uc2V0KGxlLEssZGUpfWJyZWFrfWNhc2UgMzp7bGV0IHE9TWF0aC5tYXgoTWF0aC5hYnMoZlt6LTFdKSxNYXRoLmFicyhmW3otMl0pLE1hdGguYWJzKGdbei0yXSksTWF0aC5hYnMoZlt3XSksTWF0aC5hYnMoZ1t3XSkpLEs9Zlt6LTFdL3EsZGU9Zlt6LTJdL3EsWT1nW3otMl0vcSxhZT1mW3ddL3EsbGU9Z1t3XS9xLEllPSgoZGUrSykqKGRlLUspK1kqWSkvMix2ZT1LKlkqKEsqWSksRGU9MDsoMCE9PUllfHwwIT09dmUpJiYoRGU9SWU8MD8wLU1hdGguc3FydChJZSpJZSt2ZSk6TWF0aC5zcXJ0KEllKkllK3ZlKSxEZT12ZS8oSWUrRGUpKTtsZXQgbnQ9KGFlK0spKihhZS1LKStEZSxndD1hZSpsZTtmb3IobGV0IFVlPXc7VWU8ei0xO1VlKyspe2xldCBBZT1PcChudCxndCk7MD09PUFlJiYoQWU9TnVtYmVyLk1JTl9WQUxVRSk7bGV0IHRuPW50L0FlLHB0PWd0L0FlO2lmKFVlIT09dyYmKGdbVWUtMV09QWUpLG50PXRuKmZbVWVdK3B0KmdbVWVdLGdbVWVdPXRuKmdbVWVdLXB0KmZbVWVdLGd0PXB0KmZbVWUrMV0sZltVZSsxXT10bipmW1VlKzFdLGMpZm9yKGxldCB3dD0wO3d0PHI7d3QrKylBZT10bip4LmdldCh3dCxVZSkrcHQqeC5nZXQod3QsVWUrMSkseC5zZXQod3QsVWUrMSwtcHQqeC5nZXQod3QsVWUpK3RuKnguZ2V0KHd0LFVlKzEpKSx4LnNldCh3dCxVZSxBZSk7aWYoQWU9T3AobnQsZ3QpLDA9PT1BZSYmKEFlPU51bWJlci5NSU5fVkFMVUUpLHRuPW50L0FlLHB0PWd0L0FlLGZbVWVdPUFlLG50PXRuKmdbVWVdK3B0KmZbVWUrMV0sZltVZSsxXT0tcHQqZ1tVZV0rdG4qZltVZSsxXSxndD1wdCpnW1VlKzFdLGdbVWUrMV09dG4qZ1tVZSsxXSxsJiZVZTxpLTEpZm9yKGxldCB3dD0wO3d0PGk7d3QrKylBZT10biptLmdldCh3dCxVZSkrcHQqbS5nZXQod3QsVWUrMSksbS5zZXQod3QsVWUrMSwtcHQqbS5nZXQod3QsVWUpK3RuKm0uZ2V0KHd0LFVlKzEpKSxtLnNldCh3dCxVZSxBZSl9Z1t6LTJdPW50LHVlKz0xO2JyZWFrfWNhc2UgNDppZihmW3ddPD0wJiYoZlt3XT1mW3ddPDA/LWZbd106MCxjKSlmb3IobGV0IHE9MDtxPD1mZTtxKyspeC5zZXQocSx3LC14LmdldChxLHcpKTtmb3IoO3c8ZmUmJiEoZlt3XT49Zlt3KzFdKTspe2xldCBxPWZbd107aWYoZlt3XT1mW3crMV0sZlt3KzFdPXEsYyYmdzxyLTEpZm9yKGxldCBLPTA7SzxyO0srKylxPXguZ2V0KEssdysxKSx4LnNldChLLHcrMSx4LmdldChLLHcpKSx4LnNldChLLHcscSk7aWYobCYmdzxpLTEpZm9yKGxldCBLPTA7SzxpO0srKylxPW0uZ2V0KEssdysxKSxtLnNldChLLHcrMSxtLmdldChLLHcpKSxtLnNldChLLHcscSk7dysrfXVlPTAsei0tfX1pZih1KXtsZXQgdz14O3g9bSxtPXd9dGhpcy5tPWksdGhpcy5uPXIsdGhpcy5zPWYsdGhpcy5VPW0sdGhpcy5WPXh9c29sdmUodCl7bGV0IGU9dCxpPXRoaXMudGhyZXNob2xkLHI9dGhpcy5zLmxlbmd0aCxvPXJuLnplcm9zKHIscik7Zm9yKGxldCBwPTA7cDxyO3ArKylNYXRoLmFicyh0aGlzLnNbcF0pPD1pP28uc2V0KHAscCwwKTpvLnNldChwLHAsMS90aGlzLnNbcF0pO2xldCBzPXRoaXMuVSxhPXRoaXMucmlnaHRTaW5ndWxhclZlY3RvcnMsbD1hLm1tdWwobyksYz1hLnJvd3MsdT1zLnJvd3MsZD1ybi56ZXJvcyhjLHUpO2ZvcihsZXQgcD0wO3A8YztwKyspZm9yKGxldCBoPTA7aDx1O2grKyl7bGV0IGY9MDtmb3IobGV0IG09MDttPHI7bSsrKWYrPWwuZ2V0KHAsbSkqcy5nZXQoaCxtKTtkLnNldChwLGgsZil9cmV0dXJuIGQubW11bChlKX1zb2x2ZUZvckRpYWdvbmFsKHQpe3JldHVybiB0aGlzLnNvbHZlKHJuLmRpYWcodCkpfWludmVyc2UoKXtsZXQgdD10aGlzLlYsZT10aGlzLnRocmVzaG9sZCxpPXQucm93cyxyPXQuY29sdW1ucyxvPW5ldyBybihpLHRoaXMucy5sZW5ndGgpO2ZvcihsZXQgdT0wO3U8aTt1KyspZm9yKGxldCBkPTA7ZDxyO2QrKylNYXRoLmFicyh0aGlzLnNbZF0pPmUmJm8uc2V0KHUsZCx0LmdldCh1LGQpL3RoaXMuc1tkXSk7bGV0IHM9dGhpcy5VLGE9cy5yb3dzLGw9cy5jb2x1bW5zLGM9bmV3IHJuKGksYSk7Zm9yKGxldCB1PTA7dTxpO3UrKylmb3IobGV0IGQ9MDtkPGE7ZCsrKXtsZXQgcD0wO2ZvcihsZXQgaD0wO2g8bDtoKyspcCs9by5nZXQodSxoKSpzLmdldChkLGgpO2Muc2V0KHUsZCxwKX1yZXR1cm4gY31nZXQgY29uZGl0aW9uKCl7cmV0dXJuIHRoaXMuc1swXS90aGlzLnNbTWF0aC5taW4odGhpcy5tLHRoaXMubiktMV19Z2V0IG5vcm0yKCl7cmV0dXJuIHRoaXMuc1swXX1nZXQgcmFuaygpe2xldCB0PU1hdGgubWF4KHRoaXMubSx0aGlzLm4pKnRoaXMuc1swXSpOdW1iZXIuRVBTSUxPTixlPTAsaT10aGlzLnM7Zm9yKGxldCByPTAsbz1pLmxlbmd0aDtyPG87cisrKWlbcl0+dCYmZSsrO3JldHVybiBlfWdldCBkaWFnb25hbCgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMucyl9Z2V0IHRocmVzaG9sZCgpe3JldHVybiBOdW1iZXIuRVBTSUxPTi8yKk1hdGgubWF4KHRoaXMubSx0aGlzLm4pKnRoaXMuc1swXX1nZXQgbGVmdFNpbmd1bGFyVmVjdG9ycygpe3JldHVybiB0aGlzLlV9Z2V0IHJpZ2h0U2luZ3VsYXJWZWN0b3JzKCl7cmV0dXJuIHRoaXMuVn1nZXQgZGlhZ29uYWxNYXRyaXgoKXtyZXR1cm4gcm4uZGlhZyh0aGlzLnMpfX19KTt2YXIga2ZlPWhvKCgpPT57SWZlKCksUGZlKCksUmZlKCksbzAoKSxERSgpfSksRmZlPWhvKCgpPT57bzAoKSxBZmUoKSxrZmUoKX0pO2Z1bmN0aW9uIHU2KG4sdCxlLGkscil7bGV0IHM9cm4uZXllKHQubGVuZ3RoLHQubGVuZ3RoLGUqaSppKSxhPXIodCksbD1uZXcgRmxvYXQ2NEFycmF5KG4ueC5sZW5ndGgpO2ZvcihsZXQgcD0wO3A8bi54Lmxlbmd0aDtwKyspbFtwXT1hKG4ueFtwXSk7bGV0IGM9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1lLmxlbmd0aCxzPW4ueC5sZW5ndGgsYT1uZXcgQXJyYXkobyk7Zm9yKGxldCBsPTA7bDxvO2wrKyl7YVtsXT1uZXcgQXJyYXkocyk7bGV0IGM9ZS5zbGljZSgpO2NbbF0rPWk7bGV0IHU9cihjKTtmb3IobGV0IGQ9MDtkPHM7ZCsrKWFbbF1bZF09dFtkXS11KG4ueFtkXSl9cmV0dXJuIG5ldyBybihhKX0obixsLHQsaSxyKSx1PWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi54Lmxlbmd0aCxpPW5ldyBBcnJheShlKTtmb3IobGV0IHI9MDtyPGU7cisrKWlbcl09W24ueVtyXS10W3JdXTtyZXR1cm4gbmV3IHJuKGkpfShuLGwpLGQ9ZnVuY3Rpb24obix0PSExKXtyZXR1cm4gbj1BbC5jaGVja01hdHJpeChuKSx0P25ldyB6YihuKS5pbnZlcnNlKCk6ZnVuY3Rpb24obix0LGU9ITEpe3JldHVybiBuPUFsLmNoZWNrTWF0cml4KG4pLHQ9QWwuY2hlY2tNYXRyaXgodCksZT9uZXcgemIobikuc29sdmUodCk6bi5pc1NxdWFyZSgpP25ldyBBRShuKS5zb2x2ZSh0KTpuZXcgSUUobikuc29sdmUodCl9KG4scm4uZXllKG4ucm93cykpfShzLmFkZChjLm1tdWwoYy50cmFuc3Bvc2UoKSkpKTtyZXR1cm4odD0odD1uZXcgcm4oW3RdKSkuc3ViKGQubW11bChjKS5tbXVsKHUpLm11bChpKS50cmFuc3Bvc2UoKSkpLnRvMURBcnJheSgpfXZhciBOZmU9aG8oKCk9PntGZmUoKX0pLEJmZT17fTtmdW5jdGlvbiBMZmUobix0LGU9e30pe2xldHttYXhJdGVyYXRpb25zOmk9MTAwLGdyYWRpZW50RGlmZmVyZW5jZTpyPS4xLGRhbXBpbmc6bz0wLGVycm9yVG9sZXJhbmNlOnM9LjAxLG1pblZhbHVlczphLG1heFZhbHVlczpsLGluaXRpYWxWYWx1ZXM6Y309ZTtpZihvPD0wKXRocm93IG5ldyBFcnJvcigiVGhlIGRhbXBpbmcgb3B0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIiKTtpZighbi54fHwhbi55KXRocm93IG5ldyBFcnJvcigiVGhlIGRhdGEgcGFyYW1ldGVyIG11c3QgaGF2ZSB4IGFuZCB5IGVsZW1lbnRzIik7aWYoIUVFKG4ueCl8fG4ueC5sZW5ndGg8Mnx8IUVFKG4ueSl8fG4ueS5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIlRoZSBkYXRhIHBhcmFtZXRlciBlbGVtZW50cyBtdXN0IGJlIGFuIGFycmF5IHdpdGggbW9yZSB0aGFuIDIgcG9pbnRzIik7aWYobi54Lmxlbmd0aCE9PW4ueS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGF0YSBwYXJhbWV0ZXIgZWxlbWVudHMgbXVzdCBoYXZlIHRoZSBzYW1lIHNpemUiKTtsZXQgdT1jfHxuZXcgQXJyYXkodC5sZW5ndGgpLmZpbGwoMSksZD11Lmxlbmd0aDtpZihsPWx8fG5ldyBBcnJheShkKS5maWxsKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSxhPWF8fG5ldyBBcnJheShkKS5maWxsKE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKSxsLmxlbmd0aCE9PWEubGVuZ3RoKXRocm93IG5ldyBFcnJvcigibWluVmFsdWVzIGFuZCBtYXhWYWx1ZXMgbXVzdCBiZSB0aGUgc2FtZSBzaXplIik7aWYoIUVFKHUpKXRocm93IG5ldyBFcnJvcigiaW5pdGlhbFZhbHVlcyBtdXN0IGJlIGFuIGFycmF5Iik7bGV0IGYscD1wRihuLHUsdCksaD1wPD1zO2ZvcihmPTA7ZjxpJiYhaDtmKyspe3U9dTYobix1LG8scix0KTtmb3IobGV0IG09MDttPGQ7bSsrKXVbbV09TWF0aC5taW4oTWF0aC5tYXgoYVttXSx1W21dKSxsW21dKTtpZihwPXBGKG4sdSx0KSxpc05hTihwKSlicmVhaztoPXA8PXN9cmV0dXJue3BhcmFtZXRlclZhbHVlczp1LHBhcmFtZXRlckVycm9yOnAsaXRlcmF0aW9uczpmfX1CRShCZmUse2RlZmF1bHQ6KCk9PkxmZX0pO3ZhciBWZmU9aG8oKCk9PntLaGUoKSxaaGUoKSxOZmUoKX0pLEpmZT1SZCh3bz0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSGZlPXdvJiZ3by5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiBuZXcoZXx8KGU9UHJvbWlzZSkpKGZ1bmN0aW9uKHIsbyl7ZnVuY3Rpb24gcyhjKXt0cnl7bChpLm5leHQoYykpfWNhdGNoKHUpe28odSl9fWZ1bmN0aW9uIGEoYyl7dHJ5e2woaS50aHJvdyhjKSl9Y2F0Y2godSl7byh1KX19ZnVuY3Rpb24gbChjKXtjLmRvbmU/cihjLnZhbHVlKTpuZXcgZShmdW5jdGlvbih1KXt1KGMudmFsdWUpfSkudGhlbihzLGEpfWwoKGk9aS5hcHBseShuLHR8fFtdKSkubmV4dCgpKX0pfSxVZmU9d28mJndvLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihuLHQpe3ZhciBpLHIsbyxzLGU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb1swXSl0aHJvdyBvWzFdO3JldHVybiBvWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHM9e25leHQ6YSgwKSx0aHJvdzphKDEpLHJldHVybjphKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoc1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzO2Z1bmN0aW9uIGEoYyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBmdW5jdGlvbihjKXtpZihpKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2U7KXRyeXtpZihpPTEsciYmKG89MiZjWzBdP3IucmV0dXJuOmNbMF0/ci50aHJvd3x8KChvPXIucmV0dXJuKSYmby5jYWxsKHIpLDApOnIubmV4dCkmJiEobz1vLmNhbGwocixjWzFdKSkuZG9uZSlyZXR1cm4gbztzd2l0Y2gocj0wLG8mJihjPVsyJmNbMF0sby52YWx1ZV0pLGNbMF0pe2Nhc2UgMDpjYXNlIDE6bz1jO2JyZWFrO2Nhc2UgNDpyZXR1cm4gZS5sYWJlbCsrLHt2YWx1ZTpjWzFdLGRvbmU6ITF9O2Nhc2UgNTplLmxhYmVsKysscj1jWzFdLGM9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjPWUub3BzLnBvcCgpLGUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEobz0obz1lLnRyeXMpLmxlbmd0aD4wJiZvW28ubGVuZ3RoLTFdKSYmKDY9PT1jWzBdfHwyPT09Y1swXSkpe2U9MDtjb250aW51ZX1pZigzPT09Y1swXSYmKCFvfHxjWzFdPm9bMF0mJmNbMV08b1szXSkpe2UubGFiZWw9Y1sxXTticmVha31pZig2PT09Y1swXSYmZS5sYWJlbDxvWzFdKXtlLmxhYmVsPW9bMV0sbz1jO2JyZWFrfWlmKG8mJmUubGFiZWw8b1syXSl7ZS5sYWJlbD1vWzJdLGUub3BzLnB1c2goYyk7YnJlYWt9b1syXSYmZS5vcHMucG9wKCksZS50cnlzLnBvcCgpO2NvbnRpbnVlfWM9dC5jYWxsKG4sZSl9Y2F0Y2godSl7Yz1bNix1XSxyPTB9ZmluYWxseXtpPW89MH1pZig1JmNbMF0pdGhyb3cgY1sxXTtyZXR1cm57dmFsdWU6Y1swXT9jWzFdOnZvaWQgMCxkb25lOiEwfX0oW2MsdV0pfX19LGQ2PXdvJiZ3by5fX3JlYWR8fGZ1bmN0aW9uKG4sdCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmbltTeW1ib2wuaXRlcmF0b3JdO2lmKCFlKXJldHVybiBuO3ZhciByLHMsaT1lLmNhbGwobiksbz1bXTt0cnl7Zm9yKDsodm9pZCAwPT09dHx8dC0tID4wKSYmIShyPWkubmV4dCgpKS5kb25lOylvLnB1c2goci52YWx1ZSl9Y2F0Y2goYSl7cz17ZXJyb3I6YX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKGU9aS5yZXR1cm4pJiZlLmNhbGwoaSl9ZmluYWxseXtpZihzKXRocm93IHMuZXJyb3J9fXJldHVybiBvfSx6ZmU9d28mJndvLl9fc3ByZWFkfHxmdW5jdGlvbigpe2Zvcih2YXIgbj1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyluPW4uY29uY2F0KGQ2KGFyZ3VtZW50c1t0XSkpO3JldHVybiBufSxQRT13byYmd28uX19pbXBvcnRTdGFyfHxmdW5jdGlvbihuKXtpZihuJiZuLl9fZXNNb2R1bGUpcmV0dXJuIG47dmFyIHQ9e307aWYobnVsbCE9bilmb3IodmFyIGUgaW4gbilPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChuLGUpJiYodFtlXT1uW2VdKTtyZXR1cm4gdC5kZWZhdWx0PW4sdH0sQiRlPXdvJiZ3by5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKG4pe3JldHVybiBuJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHdvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbixWJGU9UEUoWkcoKSksY289UEUoSkcoKSksZ0Y9UEUoUWhlKCkpLGpmZT1QRShpNigpKSxNbz1QRShIYigpKSxIJGU9QiRlKChWZmUoKSxuPUJmZSxJNihMRSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbikpKSxfRj0uMDAxLFUkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBlPXRoaXM7dGhpcy5sZWFybmluZ1JhdGU9MSx0aGlzLmxvY2FsQ29ubmVjdGl2aXR5PTEsdGhpcy5taW5EaXN0PS4xLHRoaXMubkNvbXBvbmVudHM9Mix0aGlzLm5FcG9jaHM9MCx0aGlzLm5OZWlnaGJvcnM9MTUsdGhpcy5uZWdhdGl2ZVNhbXBsZVJhdGU9NSx0aGlzLnJhbmRvbT1NYXRoLnJhbmRvbSx0aGlzLnJlcHVsc2lvblN0cmVuZ3RoPTEsdGhpcy5zZXRPcE1peFJhdGlvPTEsdGhpcy5zcHJlYWQ9MSx0aGlzLnRyYW5zZm9ybVF1ZXVlU2l6ZT00LHRoaXMudGFyZ2V0TWV0cmljPSJjYXRlZ29yaWNhbCIsdGhpcy50YXJnZXRXZWlnaHQ9LjUsdGhpcy50YXJnZXROTmVpZ2hib3JzPXRoaXMubk5laWdoYm9ycyx0aGlzLmRpc3RhbmNlRm49WWZlLHRoaXMuaXNJbml0aWFsaXplZD0hMSx0aGlzLnJwRm9yZXN0PVtdLHRoaXMuZW1iZWRkaW5nPVtdLHRoaXMub3B0aW1pemF0aW9uU3RhdGU9bmV3IGokZTt2YXIgaT1mdW5jdGlvbihyKXt2b2lkIDAhPT10W3JdJiYoZVtyXT10W3JdKX07aSgiZGlzdGFuY2VGbiIpLGkoImxlYXJuaW5nUmF0ZSIpLGkoImxvY2FsQ29ubmVjdGl2aXR5IiksaSgibWluRGlzdCIpLGkoIm5Db21wb25lbnRzIiksaSgibkVwb2NocyIpLGkoIm5OZWlnaGJvcnMiKSxpKCJuZWdhdGl2ZVNhbXBsZVJhdGUiKSxpKCJyYW5kb20iKSxpKCJyZXB1bHNpb25TdHJlbmd0aCIpLGkoInNldE9wTWl4UmF0aW8iKSxpKCJzcHJlYWQiKSxpKCJ0cmFuc2Zvcm1RdWV1ZVNpemUiKX1yZXR1cm4gbi5wcm90b3R5cGUuZml0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXRpYWxpemVGaXQodCksdGhpcy5vcHRpbWl6ZUxheW91dCgpLHRoaXMuZW1iZWRkaW5nfSxuLnByb3RvdHlwZS5maXRBc3luYz1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1mdW5jdGlvbigpe3JldHVybiEwfSksSGZlKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBVZmUodGhpcyxmdW5jdGlvbihpKXtzd2l0Y2goaS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmluaXRpYWxpemVGaXQodCksWzQsdGhpcy5vcHRpbWl6ZUxheW91dEFzeW5jKGUpXTtjYXNlIDE6cmV0dXJuIGkuc2VudCgpLFsyLHRoaXMuZW1iZWRkaW5nXX19KX0pfSxuLnByb3RvdHlwZS5zZXRTdXBlcnZpc2VkUHJvamVjdGlvbj1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLlk9dCx0aGlzLnRhcmdldE1ldHJpYz1lLnRhcmdldE1ldHJpY3x8dGhpcy50YXJnZXRNZXRyaWMsdGhpcy50YXJnZXRXZWlnaHQ9ZS50YXJnZXRXZWlnaHR8fHRoaXMudGFyZ2V0V2VpZ2h0LHRoaXMudGFyZ2V0Tk5laWdoYm9ycz1lLnRhcmdldE5OZWlnaGJvcnN8fHRoaXMudGFyZ2V0Tk5laWdoYm9yc30sbi5wcm90b3R5cGUuc2V0UHJlY29tcHV0ZWRLTk49ZnVuY3Rpb24odCxlKXt0aGlzLmtubkluZGljZXM9dCx0aGlzLmtubkRpc3RhbmNlcz1lfSxuLnByb3RvdHlwZS5pbml0aWFsaXplRml0PWZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoPD10aGlzLm5OZWlnaGJvcnMpdGhyb3cgbmV3IEVycm9yKCJOb3QgZW5vdWdoIGRhdGEgcG9pbnRzICgiK3QubGVuZ3RoKyIpIHRvIGNyZWF0ZSBuTmVpZ2hib3JzOiAiK3RoaXMubk5laWdoYm9ycysiLiAgQWRkIG1vcmUgZGF0YSBwb2ludHMgb3IgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uLiIpO2lmKHRoaXMuWD09PXQmJnRoaXMuaXNJbml0aWFsaXplZClyZXR1cm4gdGhpcy5nZXRORXBvY2hzKCk7aWYodGhpcy5YPXQsIXRoaXMua25uSW5kaWNlcyYmIXRoaXMua25uRGlzdGFuY2VzKXt2YXIgZT10aGlzLm5lYXJlc3ROZWlnaGJvcnModCk7dGhpcy5rbm5JbmRpY2VzPWUua25uSW5kaWNlcyx0aGlzLmtubkRpc3RhbmNlcz1lLmtubkRpc3RhbmNlc310aGlzLmdyYXBoPXRoaXMuZnV6enlTaW1wbGljaWFsU2V0KHQsdGhpcy5uTmVpZ2hib3JzLHRoaXMuc2V0T3BNaXhSYXRpbyksdGhpcy5tYWtlU2VhcmNoRm5zKCksdGhpcy5zZWFyY2hHcmFwaD10aGlzLm1ha2VTZWFyY2hHcmFwaCh0KSx0aGlzLnByb2Nlc3NHcmFwaEZvclN1cGVydmlzZWRQcm9qZWN0aW9uKCk7dmFyIGk9dGhpcy5pbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZygpLG89aS50YWlsLHM9aS5lcG9jaHNQZXJTYW1wbGU7cmV0dXJuIHRoaXMub3B0aW1pemF0aW9uU3RhdGUuaGVhZD1pLmhlYWQsdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS50YWlsPW8sdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5lcG9jaHNQZXJTYW1wbGU9cyx0aGlzLmluaXRpYWxpemVPcHRpbWl6YXRpb24oKSx0aGlzLnByZXBhcmVGb3JPcHRpbWl6YXRpb25Mb29wKCksdGhpcy5pc0luaXRpYWxpemVkPSEwLHRoaXMuZ2V0TkVwb2NocygpfSxuLnByb3RvdHlwZS5tYWtlU2VhcmNoRm5zPWZ1bmN0aW9uKCl7dmFyIHQ9Z0YubWFrZUluaXRpYWxpemF0aW9ucyh0aGlzLmRpc3RhbmNlRm4pLGk9dC5pbml0RnJvbVJhbmRvbTt0aGlzLmluaXRGcm9tVHJlZT10LmluaXRGcm9tVHJlZSx0aGlzLmluaXRGcm9tUmFuZG9tPWksdGhpcy5zZWFyY2g9Z0YubWFrZUluaXRpYWxpemVkTk5TZWFyY2godGhpcy5kaXN0YW5jZUZuKX0sbi5wcm90b3R5cGUubWFrZVNlYXJjaEdyYXBoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmtubkluZGljZXMsaT10aGlzLmtubkRpc3RhbmNlcyxvPW5ldyBjby5TcGFyc2VNYXRyaXgoW10sW10sW10sW3QubGVuZ3RoLHQubGVuZ3RoXSkscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgYT1lW3NdLGw9aVtzXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWxbY107ZD4wJiZvLnNldChzLGFbY10sZCl9dmFyIHA9Y28udHJhbnNwb3NlKG8pO3JldHVybiBjby5tYXhpbXVtKG8scCl9LG4ucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9dGhpcy5YO2lmKHZvaWQgMD09PWl8fDA9PT1pLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgaGFzIGJlZW4gZml0LiIpO3ZhciByPU1hdGguZmxvb3IodGhpcy5uTmVpZ2hib3JzKnRoaXMudHJhbnNmb3JtUXVldWVTaXplKTtyPU1hdGgubWluKGkubGVuZ3RoLHIpO3ZhciBvPWdGLmluaXRpYWxpemVTZWFyY2godGhpcy5ycEZvcmVzdCxpLHQscix0aGlzLmluaXRGcm9tUmFuZG9tLHRoaXMuaW5pdEZyb21UcmVlLHRoaXMucmFuZG9tKSxzPXRoaXMuc2VhcmNoKGksdGhpcy5zZWFyY2hHcmFwaCxvLHQpLGE9ViRlLmRlaGVhcFNvcnQocyksbD1hLmluZGljZXMsYz1hLndlaWdodHM7bD1sLm1hcChmdW5jdGlvbihkZSl7cmV0dXJuIGRlLnNsaWNlKDAsZS5uTmVpZ2hib3JzKX0pLGM9Yy5tYXAoZnVuY3Rpb24oZGUpe3JldHVybiBkZS5zbGljZSgwLGUubk5laWdoYm9ycyl9KTt2YXIgdT1NYXRoLm1heCgwLHRoaXMubG9jYWxDb25uZWN0aXZpdHktMSksZD10aGlzLnNtb290aEtOTkRpc3RhbmNlKGMsdGhpcy5uTmVpZ2hib3JzLHUpLGY9dGhpcy5jb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3RocyhsLGMsZC5zaWdtYXMsZC5yaG9zKSxEPW5ldyBjby5TcGFyc2VNYXRyaXgoZi5yb3dzLGYuY29scyxmLnZhbHMsW3QubGVuZ3RoLGkubGVuZ3RoXSksVD1jby5ub3JtYWxpemUoRCwibDEiKSxrPWNvLmdldENTUihUKSxaPXQubGVuZ3RoLHVlPVpmZShNby5yZXNoYXBlMmQoay5pbmRpY2VzLFosdGhpcy5uTmVpZ2hib3JzKSxNby5yZXNoYXBlMmQoay52YWx1ZXMsWix0aGlzLm5OZWlnaGJvcnMpLHRoaXMuZW1iZWRkaW5nKSxoZT10aGlzLm5FcG9jaHM/dGhpcy5uRXBvY2hzLzM6RC5uUm93czw9MWU0PzEwMDozMCx3PUQuZ2V0VmFsdWVzKCkucmVkdWNlKGZ1bmN0aW9uKGRlLFkpe3JldHVybiBZPmRlP1k6ZGV9LDApO0Q9RC5tYXAoZnVuY3Rpb24oZGUpe3JldHVybiBkZTx3L2hlPzA6ZGV9KSxEPWNvLmVsaW1pbmF0ZVplcm9zKEQpO3ZhciBGPXRoaXMubWFrZUVwb2Noc1BlclNhbXBsZShELmdldFZhbHVlcygpLGhlKSxxPUQuZ2V0Um93cygpLEs9RC5nZXRDb2xzKCk7cmV0dXJuIHRoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtoZWFkRW1iZWRkaW5nOnVlLHRhaWxFbWJlZGRpbmc6dGhpcy5lbWJlZGRpbmcsaGVhZDpxLHRhaWw6SyxjdXJyZW50RXBvY2g6MCxuRXBvY2hzOmhlLG5WZXJ0aWNlczpELmdldERpbXMoKVsxXSxlcG9jaHNQZXJTYW1wbGU6Rn0pLHRoaXMucHJlcGFyZUZvck9wdGltaXphdGlvbkxvb3AoKSx0aGlzLm9wdGltaXplTGF5b3V0KCl9LG4ucHJvdG90eXBlLnByb2Nlc3NHcmFwaEZvclN1cGVydmlzZWRQcm9qZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ZO2lmKGUpe2lmKGUubGVuZ3RoIT09dGhpcy5YLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBvZiBYIGFuZCB5IG11c3QgYmUgZXF1YWwiKTsiY2F0ZWdvcmljYWwiPT09dGhpcy50YXJnZXRNZXRyaWMmJih0aGlzLmdyYXBoPXRoaXMuY2F0ZWdvcmljYWxTaW1wbGljaWFsU2V0SW50ZXJzZWN0aW9uKHRoaXMuZ3JhcGgsZSx0aGlzLnRhcmdldFdlaWdodDwxPzEvKDEtdGhpcy50YXJnZXRXZWlnaHQpKjIuNToxZTEyKSl9fSxuLnByb3RvdHlwZS5zdGVwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5jdXJyZW50RXBvY2g7cmV0dXJuIHQ8dGhpcy5nZXRORXBvY2hzKCkmJnRoaXMub3B0aW1pemVMYXlvdXRTdGVwKHQpLHRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NofSxuLnByb3RvdHlwZS5nZXRFbWJlZGRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWJlZGRpbmd9LG4ucHJvdG90eXBlLm5lYXJlc3ROZWlnaGJvcnM9ZnVuY3Rpb24odCl7dmFyIGYscj10aGlzLm5OZWlnaGJvcnMscz1nRi5tYWtlTk5EZXNjZW50KHRoaXMuZGlzdGFuY2VGbix0aGlzLnJhbmRvbSksbD01K01hdGguZmxvb3IoLjU9PShmPU1hdGgucG93KHQubGVuZ3RoLC41KS8yMCk/MDpNYXRoLnJvdW5kKGYpKSxjPU1hdGgubWF4KDUsTWF0aC5mbG9vcihNYXRoLnJvdW5kKGZ1bmN0aW9uKGYpe3JldHVybiBNYXRoLmxvZyhmKS9NYXRoLmxvZygyKX0odC5sZW5ndGgpKSkpO3RoaXMucnBGb3Jlc3Q9amZlLm1ha2VGb3Jlc3QodCxyLGwsdGhpcy5yYW5kb20pO3ZhciBkPXModCxqZmUubWFrZUxlYWZBcnJheSh0aGlzLnJwRm9yZXN0KSxyLGMpO3JldHVybntrbm5JbmRpY2VzOmQuaW5kaWNlcyxrbm5EaXN0YW5jZXM6ZC53ZWlnaHRzfX0sbi5wcm90b3R5cGUuZnV6enlTaW1wbGljaWFsU2V0PWZ1bmN0aW9uKHQsZSxpKXt2b2lkIDA9PT1pJiYoaT0xKTt2YXIgcj10aGlzLG89ci5rbm5JbmRpY2VzLHM9dm9pZCAwPT09bz9bXTpvLGE9ci5rbm5EaXN0YW5jZXMsbD12b2lkIDA9PT1hP1tdOmEsdT10aGlzLnNtb290aEtOTkRpc3RhbmNlKGwsZSxyLmxvY2FsQ29ubmVjdGl2aXR5KSxoPXRoaXMuY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHMocyxsLHUuc2lnbWFzLHUucmhvcyksYj1uZXcgY28uU3BhcnNlTWF0cml4KGgucm93cyxoLmNvbHMsaC52YWxzLFt0Lmxlbmd0aCx0Lmxlbmd0aF0pLEQ9Y28udHJhbnNwb3NlKGIpLFQ9Y28ucGFpcndpc2VNdWx0aXBseShiLEQpLGs9Y28uc3VidHJhY3QoY28uYWRkKGIsRCksVCksWj1jby5tdWx0aXBseVNjYWxhcihrLGkpLHo9Y28ubXVsdGlwbHlTY2FsYXIoVCwxLWkpO3JldHVybiBjby5hZGQoWix6KX0sbi5wcm90b3R5cGUuY2F0ZWdvcmljYWxTaW1wbGljaWFsU2V0SW50ZXJzZWN0aW9uPWZ1bmN0aW9uKHQsZSxpLHIpe3ZvaWQgMD09PXImJihyPTEpO3ZhciBvPVFmZSh0LGUscixpKTtyZXR1cm4gS2ZlKG89Y28uZWxpbWluYXRlWmVyb3MobykpfSxuLnByb3RvdHlwZS5zbW9vdGhLTk5EaXN0YW5jZT1mdW5jdGlvbih0LGUsaSxyLG8pe3ZvaWQgMD09PWkmJihpPTEpLHZvaWQgMD09PXImJihyPTY0KSx2b2lkIDA9PT1vJiYobz0xKTtmb3IodmFyIHM9TWF0aC5sb2coZSkvTWF0aC5sb2coMikqbyxhPU1vLnplcm9zKHQubGVuZ3RoKSxsPU1vLnplcm9zKHQubGVuZ3RoKSxjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciB1PTAsZD0xLzAscD0xLGg9dFtjXSxmPWguZmlsdGVyKGZ1bmN0aW9uKHope3JldHVybiB6PjB9KTtpZihmLmxlbmd0aD49aSl7dmFyIG09TWF0aC5mbG9vcihpKSx4PWktbTttPjA/KGFbY109ZlttLTFdLHg+MWUtNSYmKGFbY10rPXgqKGZbbV0tZlttLTFdKSkpOmFbY109eCpmWzBdfWVsc2UgZi5sZW5ndGg+MCYmKGFbY109TW8ubWF4KGYpKTtmb3IodmFyIGc9MDtnPHI7ZysrKXtmb3IodmFyIGI9MCxEPTE7RDx0W2NdLmxlbmd0aDtEKyspe3ZhciBUPXRbY11bRF0tYVtjXTtiKz1UPjA/TWF0aC5leHAoLVQvcCk6MX1pZihNYXRoLmFicyhiLXMpPDFlLTUpYnJlYWs7Yj5zP3A9KHUrKGQ9cCkpLzI6KHU9cCxkPT09MS8wP3AqPTI6cD0odStkKS8yKX1pZihsW2NdPXAsYVtjXT4wKXt2YXIgaz1Nby5tZWFuKGgpO2xbY108X0YqayYmKGxbY109X0Yqayl9ZWxzZXt2YXIgWj1Nby5tZWFuKHQubWFwKE1vLm1lYW4pKTtsW2NdPF9GKlomJihsW2NdPV9GKlopfX1yZXR1cm57c2lnbWFzOmwscmhvczphfX0sbi5wcm90b3R5cGUuY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHM9ZnVuY3Rpb24odCxlLGkscil7Zm9yKHZhciBvPXQubGVuZ3RoLHM9dFswXS5sZW5ndGgsYT1Nby56ZXJvcyhvKnMpLGw9TW8uemVyb3MobypzKSxjPU1vLnplcm9zKG8qcyksdT0wO3U8bzt1KyspZm9yKHZhciBkPTA7ZDxzO2QrKyl7dmFyIHA9MDstMSE9PXRbdV1bZF0mJihwPXRbdV1bZF09PT11PzA6ZVt1XVtkXS1yW3VdPD0wPzE6TWF0aC5leHAoLShlW3VdW2RdLXJbdV0pL2lbdV0pLGFbdSpzK2RdPXUsbFt1KnMrZF09dFt1XVtkXSxjW3UqcytkXT1wKX1yZXR1cm57cm93czphLGNvbHM6bCx2YWxzOmN9fSxuLnByb3RvdHlwZS5pbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dGhpcy5nZXRORXBvY2hzKCksaT10aGlzLm5Db21wb25lbnRzLHI9dGhpcy5ncmFwaC5nZXRWYWx1ZXMoKSxvPTAscz0wO3M8ci5sZW5ndGg7cysrKW88cltzXSYmKG89cltzXSk7dmFyIGw9dGhpcy5ncmFwaC5tYXAoZnVuY3Rpb24obSl7cmV0dXJuIG08by9lPzA6bX0pO3RoaXMuZW1iZWRkaW5nPU1vLnplcm9zKGwublJvd3MpLm1hcChmdW5jdGlvbigpe3JldHVybiBNby56ZXJvcyhpKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gMjAqTW8udGF1UmFuZCh0LnJhbmRvbSktMTB9KX0pO3ZhciBjPVtdLHU9W10sZD1bXSxwPWwuZ2V0QWxsKCk7Zm9yKHM9MDtzPHAubGVuZ3RoO3MrKyl7dmFyIGg9cFtzXTtoLnZhbHVlJiYoYy5wdXNoKGgudmFsdWUpLGQucHVzaChoLnJvdyksdS5wdXNoKGguY29sKSl9cmV0dXJue2hlYWQ6dSx0YWlsOmQsZXBvY2hzUGVyU2FtcGxlOnRoaXMubWFrZUVwb2Noc1BlclNhbXBsZShjLGUpfX0sbi5wcm90b3R5cGUubWFrZUVwb2Noc1BlclNhbXBsZT1mdW5jdGlvbih0LGUpe3ZhciBpPU1vLmZpbGxlZCh0Lmxlbmd0aCwtMSkscj1Nby5tYXgodCksbz10Lm1hcChmdW5jdGlvbihzKXtyZXR1cm4gcy9yKmV9KTtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKHMsYSl7cz4wJiYoaVthXT1lL29bYV0pfSksaX0sbi5wcm90b3R5cGUuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzPWZ1bmN0aW9uKHQpe09iamVjdC5hc3NpZ24odGhpcy5vcHRpbWl6YXRpb25TdGF0ZSx0KX0sbi5wcm90b3R5cGUucHJlcGFyZUZvck9wdGltaXphdGlvbkxvb3A9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5yZXB1bHNpb25TdHJlbmd0aCxpPXQubGVhcm5pbmdSYXRlLHI9dC5uZWdhdGl2ZVNhbXBsZVJhdGUsbz10aGlzLm9wdGltaXphdGlvblN0YXRlLHM9by5lcG9jaHNQZXJTYW1wbGUsYT1vLmhlYWRFbWJlZGRpbmcsYz1hWzBdLmxlbmd0aCx1PWEubGVuZ3RoPT09by50YWlsRW1iZWRkaW5nLmxlbmd0aCxkPXMubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBmL3J9KSxwPXpmZShkKSxoPXpmZShzKTt0aGlzLmFzc2lnbk9wdGltaXphdGlvblN0YXRlUGFyYW1ldGVycyh7ZXBvY2hPZk5leHRTYW1wbGU6aCxlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlOnAsZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGU6ZCxtb3ZlT3RoZXI6dSxpbml0aWFsQWxwaGE6aSxhbHBoYTppLGdhbW1hOmUsZGltOmN9KX0sbi5wcm90b3R5cGUuaW5pdGlhbGl6ZU9wdGltaXphdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZW1iZWRkaW5nLGU9dGhpcy5lbWJlZGRpbmcsaT10aGlzLm9wdGltaXphdGlvblN0YXRlLHI9aS5oZWFkLG89aS50YWlsLHM9aS5lcG9jaHNQZXJTYW1wbGUsYT10aGlzLmdldE5FcG9jaHMoKSxsPXRoaXMuZ3JhcGgubkNvbHMsYz1YZmUodGhpcy5zcHJlYWQsdGhpcy5taW5EaXN0KTt0aGlzLmFzc2lnbk9wdGltaXphdGlvblN0YXRlUGFyYW1ldGVycyh7aGVhZEVtYmVkZGluZzp0LHRhaWxFbWJlZGRpbmc6ZSxoZWFkOnIsdGFpbDpvLGVwb2Noc1BlclNhbXBsZTpzLGE6Yy5hLGI6Yy5iLG5FcG9jaHM6YSxuVmVydGljZXM6bH0pfSxuLnByb3RvdHlwZS5vcHRpbWl6ZUxheW91dFN0ZXA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub3B0aW1pemF0aW9uU3RhdGUsaT1lLmhlYWQscj1lLnRhaWwsbz1lLmhlYWRFbWJlZGRpbmcscz1lLnRhaWxFbWJlZGRpbmcsYT1lLmVwb2Noc1BlclNhbXBsZSxsPWUuZXBvY2hPZk5leHRTYW1wbGUsYz1lLmVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGUsdT1lLmVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlLGQ9ZS5tb3ZlT3RoZXIscD1lLmluaXRpYWxBbHBoYSxoPWUuYWxwaGEsZj1lLmdhbW1hLG09ZS5hLHg9ZS5iLGc9ZS5kaW0sYj1lLm5FcG9jaHMsRD1lLm5WZXJ0aWNlcyxrPTA7azxhLmxlbmd0aDtrKyspaWYoIShsW2tdPnQpKXt2YXIgWj1pW2tdLGZlPW9bWl0sdWU9c1tyW2tdXSxoZT1xZmUoZmUsdWUpLHc9MDtoZT4wJiYodz0tMiptKngqTWF0aC5wb3coaGUseC0xKSx3Lz1tKk1hdGgucG93KGhlLHgpKzEpO2Zvcih2YXIgRj0wO0Y8ZztGKyspe3ZhciBxPVdmZSh3KihmZVtGXS11ZVtGXSksNCk7ZmVbRl0rPXEqaCxkJiYodWVbRl0rPS1xKmgpfWxba10rPWFba107Zm9yKHZhciBLPU1hdGguZmxvb3IoKHQtY1trXSkvdVtrXSksZGU9MDtkZTxLO2RlKyspe3ZhciBZPU1vLnRhdVJhbmRJbnQoRCx0aGlzLnJhbmRvbSksYWU9c1tZXSxsZT1xZmUoZmUsYWUpLEllPTA7aWYobGU+MClJZT0yKmYqeCxJZS89KC4wMDErbGUpKihtKk1hdGgucG93KGxlLHgpKzEpO2Vsc2UgaWYoWj09PVkpY29udGludWU7Zm9yKEY9MDtGPGc7RisrKXE9NCxJZT4wJiYocT1XZmUoSWUqKGZlW0ZdLWFlW0ZdKSw0KSksZmVbRl0rPXEqaH1jW2tdKz1LKnVba119cmV0dXJuIGUuYWxwaGE9cCooMS10L2IpLGUuY3VycmVudEVwb2NoKz0xLG99LG4ucHJvdG90eXBlLm9wdGltaXplTGF5b3V0QXN5bmM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0pLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGkscil7dmFyIG89ZnVuY3Rpb24oKXtyZXR1cm4gSGZlKGUsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzLGEsYyx1LGQ7cmV0dXJuIFVmZSh0aGlzLGZ1bmN0aW9uKHApe3RyeXtpZihhPShzPXRoaXMub3B0aW1pemF0aW9uU3RhdGUpLm5FcG9jaHMsdGhpcy5lbWJlZGRpbmc9dGhpcy5vcHRpbWl6ZUxheW91dFN0ZXAocy5jdXJyZW50RXBvY2gpLHU9ITE9PT10KGM9dGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5jdXJyZW50RXBvY2gpLGQ9Yz09PWEsdXx8ZClyZXR1cm5bMixpKGQpXTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG8oKX0sMCl9Y2F0Y2goaCl7cihoKX1yZXR1cm5bMl19KX0pfTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG8oKX0sMCl9KX0sbi5wcm90b3R5cGUub3B0aW1pemVMYXlvdXQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0pO2Zvcih2YXIgZT0hMSxpPVtdOyFlOyl7dmFyIHI9dGhpcy5vcHRpbWl6YXRpb25TdGF0ZSxvPXIubkVwb2NocztpPXRoaXMub3B0aW1pemVMYXlvdXRTdGVwKHIuY3VycmVudEVwb2NoKTt2YXIgYT10aGlzLm9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaCxsPSExPT09dChhKTtlPWE9PT1vfHxsfXJldHVybiBpfSxuLnByb3RvdHlwZS5nZXRORXBvY2hzPWZ1bmN0aW9uKCl7aWYodGhpcy5uRXBvY2hzPjApcmV0dXJuIHRoaXMubkVwb2Noczt2YXIgZT10aGlzLmdyYXBoLm5Sb3dzO3JldHVybiBlPD0yNTAwPzUwMDplPD01ZTM/NDAwOmU8PTc1MDA/MzAwOjIwMH0sbn0oKTtmdW5jdGlvbiBZZmUobix0KXtmb3IodmFyIGU9MCxpPTA7aTxuLmxlbmd0aDtpKyspZSs9TWF0aC5wb3cobltpXS10W2ldLDIpO3JldHVybiBNYXRoLnNxcnQoZSl9d28uVU1BUD1VJGUsd28uZXVjbGlkZWFuPVlmZSx3by5jb3NpbmU9ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9MCxpPTAscj0wLG89MDtvPG4ubGVuZ3RoO28rKyllKz1uW29dKnRbb10saSs9TWF0aC5wb3cobltvXSwyKSxyKz1NYXRoLnBvdyh0W29dLDIpO3JldHVybiAwPT09aSYmMD09PXI/MDowPT09aXx8MD09PXI/MToxLWUvTWF0aC5zcXJ0KGkqcil9O3ZhciBqJGU9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRFcG9jaD0wLHRoaXMuaGVhZEVtYmVkZGluZz1bXSx0aGlzLnRhaWxFbWJlZGRpbmc9W10sdGhpcy5oZWFkPVtdLHRoaXMudGFpbD1bXSx0aGlzLmVwb2Noc1BlclNhbXBsZT1bXSx0aGlzLmVwb2NoT2ZOZXh0U2FtcGxlPVtdLHRoaXMuZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZT1bXSx0aGlzLmVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlPVtdLHRoaXMubW92ZU90aGVyPSEwLHRoaXMuaW5pdGlhbEFscGhhPTEsdGhpcy5hbHBoYT0xLHRoaXMuZ2FtbWE9MSx0aGlzLmE9MS41NzY5NDM0NjAzMTEzMDc3LHRoaXMuYj0uODk1MDYwODc3OTEwOTczMyx0aGlzLmRpbT0yLHRoaXMubkVwb2Nocz01MDAsdGhpcy5uVmVydGljZXM9MH07ZnVuY3Rpb24gV2ZlKG4sdCl7cmV0dXJuIG4+dD90Om48LXQ/LXQ6bn1mdW5jdGlvbiBxZmUobix0KXtmb3IodmFyIGU9MCxpPTA7aTxuLmxlbmd0aDtpKyspZSs9TWF0aC5wb3cobltpXS10W2ldLDIpO3JldHVybiBlfWZ1bmN0aW9uIFhmZShuLHQpe3ZhciBpPU1vLmxpbmVhcigwLDMqbiwzMDApLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gcDx0PzE6cH0pLHI9TW8uemVyb3MoaS5sZW5ndGgpLm1hcChmdW5jdGlvbihwLGgpe3JldHVybiBpW2hdPj10P01hdGguZXhwKC0oaVtoXS10KS9uKTpwfSksbD1IJGUuZGVmYXVsdCh7eDppLHk6cn0sZnVuY3Rpb24ocCl7dmFyIGg9ZDYocCwyKSxmPWhbMF0sbT1oWzFdO3JldHVybiBmdW5jdGlvbih4KXtyZXR1cm4gMS8oMStmKk1hdGgucG93KHgsMiptKSl9fSx7ZGFtcGluZzoxLjUsaW5pdGlhbFZhbHVlczpbLjUsLjVdLGdyYWRpZW50RGlmZmVyZW5jZTouMSxtYXhJdGVyYXRpb25zOjEwMCxlcnJvclRvbGVyYW5jZTouMDF9KS5wYXJhbWV0ZXJWYWx1ZXMsYz1kNihsLDIpO3JldHVybnthOmNbMF0sYjpjWzFdfX1mdW5jdGlvbiBRZmUobix0LGUsaSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTEpLHZvaWQgMD09PWkmJihpPTUpLG4ubWFwKGZ1bmN0aW9uKHIsbyxzKXtyZXR1cm4tMT09PXRbb118fC0xPT09dFtzXT9yKk1hdGguZXhwKC1lKTp0W29dIT09dFtzXT9yKk1hdGguZXhwKC1pKTpyfSl9ZnVuY3Rpb24gS2ZlKG4pe249Y28ubm9ybWFsaXplKG4sIm1heCIpO3ZhciB0PWNvLnRyYW5zcG9zZShuKSxlPWNvLnBhaXJ3aXNlTXVsdGlwbHkodCxuKTtyZXR1cm4gbj1jby5hZGQobixjby5zdWJ0cmFjdCh0LGUpKSxjby5lbGltaW5hdGVaZXJvcyhuKX1mdW5jdGlvbiBaZmUobix0LGUpe2Zvcih2YXIgaT1Nby56ZXJvcyhuLmxlbmd0aCkubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBNby56ZXJvcyhlWzBdLmxlbmd0aCl9KSxyPTA7cjxuLmxlbmd0aDtyKyspZm9yKHZhciBvPTA7bzxuWzBdLmxlbmd0aDtvKyspZm9yKHZhciBzPTA7czxlWzBdLmxlbmd0aDtzKyspaVtyXVtzXSs9dFtyXVtvXSplW25bcl1bb11dW3NdO3JldHVybiBpfXdvLmZpbmRBQlBhcmFtcz1YZmUsd28uZmFzdEludGVyc2VjdGlvbj1RZmUsd28ucmVzZXRMb2NhbENvbm5lY3Rpdml0eT1LZmUsd28uaW5pdFRyYW5zZm9ybT1aZmV9KSwkZmU9UmQocDY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHA2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRyRlPUpmZSgpO3A2LlVNQVA9RyRlLlVNQVB9KTtmdW5jdGlvbiBFbihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn1mdW5jdGlvbiBjMChuKXtsZXQgZT1uKGk9PntFcnJvci5jYWxsKGkpLGkuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2t9KTtyZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX12YXIgVkU9YzAobj0+ZnVuY3Rpb24oZSl7bih0aGlzKSx0aGlzLm1lc3NhZ2U9ZT9gJHtlLmxlbmd0aH0gZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbiR7ZS5tYXAoKGkscik9PmAke3IrMX0pICR7aS50b1N0cmluZygpfWApLmpvaW4oIlxuICAiKX1gOiIiLHRoaXMubmFtZT0iVW5zdWJzY3JpcHRpb25FcnJvciIsdGhpcy5lcnJvcnM9ZX0pO2Z1bmN0aW9uIGtmKG4sdCl7aWYobil7bGV0IGU9bi5pbmRleE9mKHQpOzA8PWUmJm4uc3BsaWNlKGUsMSl9fXZhciBTbj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmluaXRpYWxUZWFyZG93bj10LHRoaXMuY2xvc2VkPSExLHRoaXMuX3BhcmVudGFnZT1udWxsLHRoaXMuX2ZpbmFsaXplcnM9bnVsbH11bnN1YnNjcmliZSgpe2xldCB0O2lmKCF0aGlzLmNsb3NlZCl7dGhpcy5jbG9zZWQ9ITA7bGV0e19wYXJlbnRhZ2U6ZX09dGhpcztpZihlKWlmKHRoaXMuX3BhcmVudGFnZT1udWxsLEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCBvIG9mIGUpby5yZW1vdmUodGhpcyk7ZWxzZSBlLnJlbW92ZSh0aGlzKTtsZXR7aW5pdGlhbFRlYXJkb3duOml9PXRoaXM7aWYoRW4oaSkpdHJ5e2koKX1jYXRjaChvKXt0PW8gaW5zdGFuY2VvZiBWRT9vLmVycm9yczpbb119bGV0e19maW5hbGl6ZXJzOnJ9PXRoaXM7aWYocil7dGhpcy5fZmluYWxpemVycz1udWxsO2ZvcihsZXQgbyBvZiByKXRyeXtQNihvKX1jYXRjaChzKXt0PXQ/P1tdLHMgaW5zdGFuY2VvZiBWRT90PVsuLi50LC4uLnMuZXJyb3JzXTp0LnB1c2gocyl9fWlmKHQpdGhyb3cgbmV3IFZFKHQpfX1hZGQodCl7dmFyIGU7aWYodCYmdCE9PXRoaXMpaWYodGhpcy5jbG9zZWQpUDYodCk7ZWxzZXtpZih0IGluc3RhbmNlb2YgU24pe2lmKHQuY2xvc2VkfHx0Ll9oYXNQYXJlbnQodGhpcykpcmV0dXJuO3QuX2FkZFBhcmVudCh0aGlzKX0odGhpcy5fZmluYWxpemVycz1udWxsIT09KGU9dGhpcy5fZmluYWxpemVycykmJnZvaWQgMCE9PWU/ZTpbXSkucHVzaCh0KX19X2hhc1BhcmVudCh0KXtsZXR7X3BhcmVudGFnZTplfT10aGlzO3JldHVybiBlPT09dHx8QXJyYXkuaXNBcnJheShlKSYmZS5pbmNsdWRlcyh0KX1fYWRkUGFyZW50KHQpe2xldHtfcGFyZW50YWdlOmV9PXRoaXM7dGhpcy5fcGFyZW50YWdlPUFycmF5LmlzQXJyYXkoZSk/KGUucHVzaCh0KSxlKTplP1tlLHRdOnR9X3JlbW92ZVBhcmVudCh0KXtsZXR7X3BhcmVudGFnZTplfT10aGlzO2U9PT10P3RoaXMuX3BhcmVudGFnZT1udWxsOkFycmF5LmlzQXJyYXkoZSkmJmtmKGUsdCl9cmVtb3ZlKHQpe2xldHtfZmluYWxpemVyczplfT10aGlzO2UmJmtmKGUsdCksdCBpbnN0YW5jZW9mIFNuJiZ0Ll9yZW1vdmVQYXJlbnQodGhpcyl9fTtTbi5FTVBUWT0oKCk9PntsZXQgbj1uZXcgU247cmV0dXJuIG4uY2xvc2VkPSEwLG59KSgpO3ZhciBzTj1Tbi5FTVBUWTtmdW5jdGlvbiBIRShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIFNufHxuJiYiY2xvc2VkImluIG4mJkVuKG4ucmVtb3ZlKSYmRW4obi5hZGQpJiZFbihuLnVuc3Vic2NyaWJlKX1mdW5jdGlvbiBQNihuKXtFbihuKT9uKCk6bi51bnN1YnNjcmliZSgpfXZhciBDYz17b25VbmhhbmRsZWRFcnJvcjpudWxsLG9uU3RvcHBlZE5vdGlmaWNhdGlvbjpudWxsLFByb21pc2U6dm9pZCAwLHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ITEsdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiExfSx1MD17c2V0VGltZW91dChuLHQsLi4uZSl7bGV0e2RlbGVnYXRlOml9PXUwO3JldHVybiBpPy5zZXRUaW1lb3V0P2kuc2V0VGltZW91dChuLHQsLi4uZSk6c2V0VGltZW91dChuLHQsLi4uZSl9LGNsZWFyVGltZW91dChuKXtsZXR7ZGVsZWdhdGU6dH09dTA7cmV0dXJuKHQ/LmNsZWFyVGltZW91dHx8Y2xlYXJUaW1lb3V0KShuKX0sZGVsZWdhdGU6dm9pZCAwfTtmdW5jdGlvbiBVRShuKXt1MC5zZXRUaW1lb3V0KCgpPT57bGV0e29uVW5oYW5kbGVkRXJyb3I6dH09Q2M7aWYoIXQpdGhyb3cgbjt0KG4pfSl9ZnVuY3Rpb24gTWMoKXt9dmFyIFI2PWFOKCJDIix2b2lkIDAsdm9pZCAwKTtmdW5jdGlvbiBhTihuLHQsZSl7cmV0dXJue2tpbmQ6bix2YWx1ZTp0LGVycm9yOmV9fXZhciBGZj1udWxsO2Z1bmN0aW9uIGQwKG4pe2lmKENjLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpe2xldCB0PSFGZjtpZih0JiYoRmY9e2Vycm9yVGhyb3duOiExLGVycm9yOm51bGx9KSxuKCksdCl7bGV0e2Vycm9yVGhyb3duOmUsZXJyb3I6aX09RmY7aWYoRmY9bnVsbCxlKXRocm93IGl9fWVsc2UgbigpfXZhciBOZj1jbGFzcyBleHRlbmRzIFNue2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsdD8odGhpcy5kZXN0aW5hdGlvbj10LEhFKHQpJiZ0LmFkZCh0aGlzKSk6dGhpcy5kZXN0aW5hdGlvbj1zMGV9c3RhdGljIGNyZWF0ZSh0LGUsaSl7cmV0dXJuIG5ldyBPZCh0LGUsaSl9bmV4dCh0KXt0aGlzLmlzU3RvcHBlZD9jTihhTigiTiIsdCx2b2lkIDApLHRoaXMpOnRoaXMuX25leHQodCl9ZXJyb3IodCl7dGhpcy5pc1N0b3BwZWQ/Y04oYU4oIkUiLHZvaWQgMCx0KSx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IodCkpfWNvbXBsZXRlKCl7dGhpcy5pc1N0b3BwZWQ/Y04oUjYsdGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfXVuc3Vic2NyaWJlKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCxzdXBlci51bnN1YnNjcmliZSgpLHRoaXMuZGVzdGluYXRpb249bnVsbCl9X25leHQodCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfV9lcnJvcih0KXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19X2NvbXBsZXRlKCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19fSxyMGU9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7ZnVuY3Rpb24gbE4obix0KXtyZXR1cm4gcjBlLmNhbGwobix0KX12YXIgT2Q9Y2xhc3MgZXh0ZW5kcyBOZntjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHI7aWYoc3VwZXIoKSxFbih0KXx8IXQpcj17bmV4dDp0Pz92b2lkIDAsZXJyb3I6ZT8/dm9pZCAwLGNvbXBsZXRlOmk/P3ZvaWQgMH07ZWxzZXtsZXQgbzt0aGlzJiZDYy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQ/KG89T2JqZWN0LmNyZWF0ZSh0KSxvLnVuc3Vic2NyaWJlPSgpPT50aGlzLnVuc3Vic2NyaWJlKCkscj17bmV4dDp0Lm5leHQmJmxOKHQubmV4dCxvKSxlcnJvcjp0LmVycm9yJiZsTih0LmVycm9yLG8pLGNvbXBsZXRlOnQuY29tcGxldGUmJmxOKHQuY29tcGxldGUsbyl9KTpyPXR9dGhpcy5kZXN0aW5hdGlvbj1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5wYXJ0aWFsT2JzZXJ2ZXI9dH1uZXh0KHQpe2xldHtwYXJ0aWFsT2JzZXJ2ZXI6ZX09dGhpcztpZihlLm5leHQpdHJ5e2UubmV4dCh0KX1jYXRjaChpKXt6RShpKX19ZXJyb3IodCl7bGV0e3BhcnRpYWxPYnNlcnZlcjplfT10aGlzO2lmKGUuZXJyb3IpdHJ5e2UuZXJyb3IodCl9Y2F0Y2goaSl7ekUoaSl9ZWxzZSB6RSh0KX1jb21wbGV0ZSgpe2xldHtwYXJ0aWFsT2JzZXJ2ZXI6dH09dGhpcztpZih0LmNvbXBsZXRlKXRyeXt0LmNvbXBsZXRlKCl9Y2F0Y2goZSl7ekUoZSl9fX0ocil9fTtmdW5jdGlvbiB6RShuKXtDYy51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uKG4pe0NjLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJkZmJiYoRmYuZXJyb3JUaHJvd249ITAsRmYuZXJyb3I9bil9KG4pOlVFKG4pfWZ1bmN0aW9uIGNOKG4sdCl7bGV0e29uU3RvcHBlZE5vdGlmaWNhdGlvbjplfT1DYztlJiZ1MC5zZXRUaW1lb3V0KCgpPT5lKG4sdCkpfXZhciBzMGU9e2Nsb3NlZDohMCxuZXh0Ok1jLGVycm9yOmZ1bmN0aW9uKG4pe3Rocm93IG59LGNvbXBsZXRlOk1jfSxwMD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gbXMobil7cmV0dXJuIG59ZnVuY3Rpb24gcE4obil7cmV0dXJuIDA9PT1uLmxlbmd0aD9tczoxPT09bi5sZW5ndGg/blswXTpmdW5jdGlvbihlKXtyZXR1cm4gbi5yZWR1Y2UoKGkscik9PnIoaSksZSl9fXZhciB1bj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2UmJih0aGlzLl9zdWJzY3JpYmU9ZSl9bGlmdChlKXtsZXQgaT1uZXcgbjtyZXR1cm4gaS5zb3VyY2U9dGhpcyxpLm9wZXJhdG9yPWUsaX1zdWJzY3JpYmUoZSxpLHIpe2xldCBvPWZ1bmN0aW9uKG4pe3JldHVybiBuJiZuIGluc3RhbmNlb2YgTmZ8fGZ1bmN0aW9uKG4pe3JldHVybiBuJiZFbihuLm5leHQpJiZFbihuLmVycm9yKSYmRW4obi5jb21wbGV0ZSl9KG4pJiZIRShuKX0oZSk/ZTpuZXcgT2QoZSxpLHIpO3JldHVybiBkMCgoKT0+e2xldHtvcGVyYXRvcjpzLHNvdXJjZTphfT10aGlzO28uYWRkKHM/cy5jYWxsKG8sYSk6YT90aGlzLl9zdWJzY3JpYmUobyk6dGhpcy5fdHJ5U3Vic2NyaWJlKG8pKX0pLG99X3RyeVN1YnNjcmliZShlKXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZShlKX1jYXRjaChpKXtlLmVycm9yKGkpfX1mb3JFYWNoKGUsaSl7cmV0dXJuIG5ldyhpPU42KGkpKSgocixvKT0+e2xldCBzPW5ldyBPZCh7bmV4dDphPT57dHJ5e2UoYSl9Y2F0Y2gobCl7byhsKSxzLnVuc3Vic2NyaWJlKCl9fSxlcnJvcjpvLGNvbXBsZXRlOnJ9KTt0aGlzLnN1YnNjcmliZShzKX0pfV9zdWJzY3JpYmUoZSl7dmFyIGk7cmV0dXJuIG51bGw9PT0oaT10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuc3Vic2NyaWJlKGUpfVtwMF0oKXtyZXR1cm4gdGhpc31waXBlKC4uLmUpe3JldHVybiBwTihlKSh0aGlzKX10b1Byb21pc2UoZSl7cmV0dXJuIG5ldyhlPU42KGUpKSgoaSxyKT0+e2xldCBvO3RoaXMuc3Vic2NyaWJlKHM9Pm89cyxzPT5yKHMpLCgpPT5pKG8pKX0pfX1yZXR1cm4gbi5jcmVhdGU9dD0+bmV3IG4odCksbn0pKCk7ZnVuY3Rpb24gTjYobil7dmFyIHQ7cmV0dXJuIG51bGwhPT0odD1uPz9DYy5Qcm9taXNlKSYmdm9pZCAwIT09dD90OlByb21pc2V9ZnVuY3Rpb24gaE4obil7cmV0dXJuIEVuKG4/LmxpZnQpfWZ1bmN0aW9uIGVuKG4pe3JldHVybiB0PT57aWYoaE4odCkpcmV0dXJuIHQubGlmdChmdW5jdGlvbihlKXt0cnl7cmV0dXJuIG4oZSx0aGlzKX1jYXRjaChpKXt0aGlzLmVycm9yKGkpfX0pO3Rocm93IG5ldyBUeXBlRXJyb3IoIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlIil9fWZ1bmN0aW9uIGp0KG4sdCxlLGkscil7cmV0dXJuIG5ldyBueChuLHQsZSxpLHIpfXZhciBmTixueD1jbGFzcyBleHRlbmRzIE5me2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzKXtzdXBlcih0KSx0aGlzLm9uRmluYWxpemU9byx0aGlzLnNob3VsZFVuc3Vic2NyaWJlPXMsdGhpcy5fbmV4dD1lP2Z1bmN0aW9uKGEpe3RyeXtlKGEpfWNhdGNoKGwpe3QuZXJyb3IobCl9fTpzdXBlci5fbmV4dCx0aGlzLl9lcnJvcj1yP2Z1bmN0aW9uKGEpe3RyeXtyKGEpfWNhdGNoKGwpe3QuZXJyb3IobCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fZXJyb3IsdGhpcy5fY29tcGxldGU9aT9mdW5jdGlvbigpe3RyeXtpKCl9Y2F0Y2goYSl7dC5lcnJvcihhKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19OnN1cGVyLl9jb21wbGV0ZX11bnN1YnNjcmliZSgpe3ZhciB0O2lmKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlfHx0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpe2xldHtjbG9zZWQ6ZX09dGhpcztzdXBlci51bnN1YnNjcmliZSgpLCFlJiYobnVsbD09PSh0PXRoaXMub25GaW5hbGl6ZSl8fHZvaWQgMD09PXR8fHQuY2FsbCh0aGlzKSl9fX0saXg9Y2xhc3MgZXh0ZW5kcyB1bntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5zb3VyY2U9dCx0aGlzLnN1YmplY3RGYWN0b3J5PWUsdGhpcy5fc3ViamVjdD1udWxsLHRoaXMuX3JlZkNvdW50PTAsdGhpcy5fY29ubmVjdGlvbj1udWxsLGhOKHQpJiYodGhpcy5saWZ0PXQubGlmdCl9X3N1YnNjcmliZSh0KXtyZXR1cm4gdGhpcy5nZXRTdWJqZWN0KCkuc3Vic2NyaWJlKHQpfWdldFN1YmplY3QoKXtsZXQgdD10aGlzLl9zdWJqZWN0O3JldHVybighdHx8dC5pc1N0b3BwZWQpJiYodGhpcy5fc3ViamVjdD10aGlzLnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1YmplY3R9X3RlYXJkb3duKCl7dGhpcy5fcmVmQ291bnQ9MDtsZXR7X2Nvbm5lY3Rpb246dH09dGhpczt0aGlzLl9zdWJqZWN0PXRoaXMuX2Nvbm5lY3Rpb249bnVsbCx0Py51bnN1YnNjcmliZSgpfWNvbm5lY3QoKXtsZXQgdD10aGlzLl9jb25uZWN0aW9uO2lmKCF0KXt0PXRoaXMuX2Nvbm5lY3Rpb249bmV3IFNuO2xldCBlPXRoaXMuZ2V0U3ViamVjdCgpO3QuYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZShqdChlLHZvaWQgMCwoKT0+e3RoaXMuX3RlYXJkb3duKCksZS5jb21wbGV0ZSgpfSxpPT57dGhpcy5fdGVhcmRvd24oKSxlLmVycm9yKGkpfSwoKT0+dGhpcy5fdGVhcmRvd24oKSkpKSx0LmNsb3NlZCYmKHRoaXMuX2Nvbm5lY3Rpb249bnVsbCx0PVNuLkVNUFRZKX1yZXR1cm4gdH1yZWZDb3VudCgpe3JldHVybiBlbigobix0KT0+e2xldCBlPW51bGw7bi5fcmVmQ291bnQrKztsZXQgaT1qdCh0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLCgpPT57aWYoIW58fG4uX3JlZkNvdW50PD0wfHwwPC0tbi5fcmVmQ291bnQpcmV0dXJuIHZvaWQoZT1udWxsKTtsZXQgcj1uLl9jb25uZWN0aW9uLG89ZTtlPW51bGwsciYmKCFvfHxyPT09bykmJnIudW5zdWJzY3JpYmUoKSx0LnVuc3Vic2NyaWJlKCl9KTtuLnN1YnNjcmliZShpKSxpLmNsb3NlZHx8KGU9bi5jb25uZWN0KCkpfSkodGhpcyl9fSxoMD17c2NoZWR1bGUobil7bGV0IHQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lLGU9Y2FuY2VsQW5pbWF0aW9uRnJhbWUse2RlbGVnYXRlOml9PWgwO2kmJih0PWkucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGU9aS5jYW5jZWxBbmltYXRpb25GcmFtZSk7bGV0IHI9dChvPT57ZT12b2lkIDAsbihvKX0pO3JldHVybiBuZXcgU24oKCk9PmU/LihyKSl9LHJlcXVlc3RBbmltYXRpb25GcmFtZSguLi5uKXtsZXR7ZGVsZWdhdGU6dH09aDA7cmV0dXJuKHQ/LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8cmVxdWVzdEFuaW1hdGlvbkZyYW1lKSguLi5uKX0sY2FuY2VsQW5pbWF0aW9uRnJhbWUoLi4ubil7bGV0e2RlbGVnYXRlOnR9PWgwO3JldHVybih0Py5jYW5jZWxBbmltYXRpb25GcmFtZXx8Y2FuY2VsQW5pbWF0aW9uRnJhbWUpKC4uLm4pfSxkZWxlZ2F0ZTp2b2lkIDB9LEI2PWMwKG49PmZ1bmN0aW9uKCl7bih0aGlzKSx0aGlzLm5hbWU9Ik9iamVjdFVuc3Vic2NyaWJlZEVycm9yIix0aGlzLm1lc3NhZ2U9Im9iamVjdCB1bnN1YnNjcmliZWQifSksa2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHVue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmNsb3NlZD0hMSx0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCx0aGlzLm9ic2VydmVycz1bXSx0aGlzLmlzU3RvcHBlZD0hMSx0aGlzLmhhc0Vycm9yPSExLHRoaXMudGhyb3duRXJyb3I9bnVsbH1saWZ0KGUpe2xldCBpPW5ldyBqRSh0aGlzLHRoaXMpO3JldHVybiBpLm9wZXJhdG9yPWUsaX1fdGhyb3dJZkNsb3NlZCgpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBCNn1uZXh0KGUpe2QwKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5jdXJyZW50T2JzZXJ2ZXJzfHwodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPUFycmF5LmZyb20odGhpcy5vYnNlcnZlcnMpKTtmb3IobGV0IGkgb2YgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKWkubmV4dChlKX19KX1lcnJvcihlKXtkMCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuaGFzRXJyb3I9dGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy50aHJvd25FcnJvcj1lO2xldHtvYnNlcnZlcnM6aX09dGhpcztmb3IoO2kubGVuZ3RoOylpLnNoaWZ0KCkuZXJyb3IoZSl9fSl9Y29tcGxldGUoKXtkMCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuaXNTdG9wcGVkPSEwO2xldHtvYnNlcnZlcnM6ZX09dGhpcztmb3IoO2UubGVuZ3RoOyllLnNoaWZ0KCkuY29tcGxldGUoKX19KX11bnN1YnNjcmliZSgpe3RoaXMuaXNTdG9wcGVkPXRoaXMuY2xvc2VkPSEwLHRoaXMub2JzZXJ2ZXJzPXRoaXMuY3VycmVudE9ic2VydmVycz1udWxsfWdldCBvYnNlcnZlZCgpe3ZhciBlO3JldHVybihudWxsPT09KGU9dGhpcy5vYnNlcnZlcnMpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmxlbmd0aCk+MH1fdHJ5U3Vic2NyaWJlKGUpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksc3VwZXIuX3RyeVN1YnNjcmliZShlKX1fc3Vic2NyaWJlKGUpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhlKSx0aGlzLl9pbm5lclN1YnNjcmliZShlKX1faW5uZXJTdWJzY3JpYmUoZSl7bGV0e2hhc0Vycm9yOmksaXNTdG9wcGVkOnIsb2JzZXJ2ZXJzOm99PXRoaXM7cmV0dXJuIGl8fHI/c046KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLG8ucHVzaChlKSxuZXcgU24oKCk9Pnt0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCxrZihvLGUpfSkpfV9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGUpe2xldHtoYXNFcnJvcjppLHRocm93bkVycm9yOnIsaXNTdG9wcGVkOm99PXRoaXM7aT9lLmVycm9yKHIpOm8mJmUuY29tcGxldGUoKX1hc09ic2VydmFibGUoKXtsZXQgZT1uZXcgdW47cmV0dXJuIGUuc291cmNlPXRoaXMsZX19cmV0dXJuIG4uY3JlYXRlPSh0LGUpPT5uZXcgakUodCxlKSxufSkoKSxqRT1jbGFzcyBleHRlbmRzIGtle2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLmRlc3RpbmF0aW9uPXQsdGhpcy5zb3VyY2U9ZX1uZXh0KHQpe3ZhciBlLGk7bnVsbD09PShpPW51bGw9PT0oZT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5uZXh0KXx8dm9pZCAwPT09aXx8aS5jYWxsKGUsdCl9ZXJyb3IodCl7dmFyIGUsaTtudWxsPT09KGk9bnVsbD09PShlPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmVycm9yKXx8dm9pZCAwPT09aXx8aS5jYWxsKGUsdCl9Y29tcGxldGUoKXt2YXIgdCxlO251bGw9PT0oZT1udWxsPT09KHQ9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY29tcGxldGUpfHx2b2lkIDA9PT1lfHxlLmNhbGwodCl9X3N1YnNjcmliZSh0KXt2YXIgZSxpO3JldHVybiBudWxsIT09KGk9bnVsbD09PShlPXRoaXMuc291cmNlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zdWJzY3JpYmUodCkpJiZ2b2lkIDAhPT1pP2k6c059fSxocj1jbGFzcyBleHRlbmRzIGtle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fdmFsdWU9dH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfV9zdWJzY3JpYmUodCl7bGV0IGU9c3VwZXIuX3N1YnNjcmliZSh0KTtyZXR1cm4hZS5jbG9zZWQmJnQubmV4dCh0aGlzLl92YWx1ZSksZX1nZXRWYWx1ZSgpe2xldHtoYXNFcnJvcjp0LHRocm93bkVycm9yOmUsX3ZhbHVlOml9PXRoaXM7aWYodCl0aHJvdyBlO3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksaX1uZXh0KHQpe3N1cGVyLm5leHQodGhpcy5fdmFsdWU9dCl9fSxyeD17bm93OigpPT4ocnguZGVsZWdhdGV8fERhdGUpLm5vdygpLGRlbGVnYXRlOnZvaWQgMH0sTGY9Y2xhc3MgZXh0ZW5kcyBrZXtjb25zdHJ1Y3Rvcih0PTEvMCxlPTEvMCxpPXJ4KXtzdXBlcigpLHRoaXMuX2J1ZmZlclNpemU9dCx0aGlzLl93aW5kb3dUaW1lPWUsdGhpcy5fdGltZXN0YW1wUHJvdmlkZXI9aSx0aGlzLl9idWZmZXI9W10sdGhpcy5faW5maW5pdGVUaW1lV2luZG93PSEwLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz1lPT09MS8wLHRoaXMuX2J1ZmZlclNpemU9TWF0aC5tYXgoMSx0KSx0aGlzLl93aW5kb3dUaW1lPU1hdGgubWF4KDEsZSl9bmV4dCh0KXtsZXR7aXNTdG9wcGVkOmUsX2J1ZmZlcjppLF9pbmZpbml0ZVRpbWVXaW5kb3c6cixfdGltZXN0YW1wUHJvdmlkZXI6byxfd2luZG93VGltZTpzfT10aGlzO2V8fChpLnB1c2godCksIXImJmkucHVzaChvLm5vdygpK3MpKSx0aGlzLl90cmltQnVmZmVyKCksc3VwZXIubmV4dCh0KX1fc3Vic2NyaWJlKHQpe3RoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl90cmltQnVmZmVyKCk7bGV0IGU9dGhpcy5faW5uZXJTdWJzY3JpYmUodCkse19pbmZpbml0ZVRpbWVXaW5kb3c6aSxfYnVmZmVyOnJ9PXRoaXMsbz1yLnNsaWNlKCk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aCYmIXQuY2xvc2VkO3MrPWk/MToyKXQubmV4dChvW3NdKTtyZXR1cm4gdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyh0KSxlfV90cmltQnVmZmVyKCl7bGV0e19idWZmZXJTaXplOnQsX3RpbWVzdGFtcFByb3ZpZGVyOmUsX2J1ZmZlcjppLF9pbmZpbml0ZVRpbWVXaW5kb3c6cn09dGhpcyxvPShyPzE6MikqdDtpZih0PDEvMCYmbzxpLmxlbmd0aCYmaS5zcGxpY2UoMCxpLmxlbmd0aC1vKSwhcil7bGV0IHM9ZS5ub3coKSxhPTA7Zm9yKGxldCBsPTE7bDxpLmxlbmd0aCYmaVtsXTw9cztsKz0yKWE9bDthJiZpLnNwbGljZSgwLGErMSl9fX0sR0U9Y2xhc3MgZXh0ZW5kcyBTbntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCl9c2NoZWR1bGUodCxlPTApe3JldHVybiB0aGlzfX0sb3g9e3NldEludGVydmFsKG4sdCwuLi5lKXtsZXR7ZGVsZWdhdGU6aX09b3g7cmV0dXJuIGk/LnNldEludGVydmFsP2kuc2V0SW50ZXJ2YWwobix0LC4uLmUpOnNldEludGVydmFsKG4sdCwuLi5lKX0sY2xlYXJJbnRlcnZhbChuKXtsZXR7ZGVsZWdhdGU6dH09b3g7cmV0dXJuKHQ/LmNsZWFySW50ZXJ2YWx8fGNsZWFySW50ZXJ2YWwpKG4pfSxkZWxlZ2F0ZTp2b2lkIDB9LGd1PWNsYXNzIGV4dGVuZHMgR0V7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMuc2NoZWR1bGVyPXQsdGhpcy53b3JrPWUsdGhpcy5wZW5kaW5nPSExfXNjaGVkdWxlKHQsZT0wKXt2YXIgaTtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPXQ7bGV0IHI9dGhpcy5pZCxvPXRoaXMuc2NoZWR1bGVyO3JldHVybiBudWxsIT1yJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKG8scixlKSksdGhpcy5wZW5kaW5nPSEwLHRoaXMuZGVsYXk9ZSx0aGlzLmlkPW51bGwhPT0oaT10aGlzLmlkKSYmdm9pZCAwIT09aT9pOnRoaXMucmVxdWVzdEFzeW5jSWQobyx0aGlzLmlkLGUpLHRoaXN9cmVxdWVzdEFzeW5jSWQodCxlLGk9MCl7cmV0dXJuIG94LnNldEludGVydmFsKHQuZmx1c2guYmluZCh0LHRoaXMpLGkpfXJlY3ljbGVBc3luY0lkKHQsZSxpPTApe2lmKG51bGwhPWkmJnRoaXMuZGVsYXk9PT1pJiYhMT09PXRoaXMucGVuZGluZylyZXR1cm4gZTtudWxsIT1lJiZveC5jbGVhckludGVydmFsKGUpfWV4ZWN1dGUodCxlKXtpZih0aGlzLmNsb3NlZClyZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uIik7dGhpcy5wZW5kaW5nPSExO2xldCBpPXRoaXMuX2V4ZWN1dGUodCxlKTtpZihpKXJldHVybiBpOyExPT09dGhpcy5wZW5kaW5nJiZudWxsIT10aGlzLmlkJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLHRoaXMuaWQsbnVsbCkpfV9leGVjdXRlKHQsZSl7bGV0IHIsaT0hMTt0cnl7dGhpcy53b3JrKHQpfWNhdGNoKG8pe2k9ITAscj1vfHxuZXcgRXJyb3IoIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3IiKX1pZihpKXJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCkscn11bnN1YnNjcmliZSgpe2lmKCF0aGlzLmNsb3NlZCl7bGV0e2lkOnQsc2NoZWR1bGVyOmV9PXRoaXMse2FjdGlvbnM6aX09ZTt0aGlzLndvcms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSxrZihpLHRoaXMpLG51bGwhPXQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoZSx0LG51bGwpKSx0aGlzLmRlbGF5PW51bGwsc3VwZXIudW5zdWJzY3JpYmUoKX19fSxjMGU9MSxtTj17fTtmdW5jdGlvbiBWNihuKXtyZXR1cm4gbiBpbiBtTiYmKGRlbGV0ZSBtTltuXSwhMCl9dmFyIEg2PXtzZXRJbW1lZGlhdGUobil7bGV0IHQ9YzBlKys7cmV0dXJuIG1OW3RdPSEwLGZOfHwoZk49UHJvbWlzZS5yZXNvbHZlKCkpLGZOLnRoZW4oKCk9PlY2KHQpJiZuKCkpLHR9LGNsZWFySW1tZWRpYXRlKG4pe1Y2KG4pfX0se3NldEltbWVkaWF0ZTp1MGUsY2xlYXJJbW1lZGlhdGU6ZDBlfT1INixzeD17c2V0SW1tZWRpYXRlKC4uLm4pe2xldHtkZWxlZ2F0ZTp0fT1zeDtyZXR1cm4odD8uc2V0SW1tZWRpYXRlfHx1MGUpKC4uLm4pfSxjbGVhckltbWVkaWF0ZShuKXtsZXR7ZGVsZWdhdGU6dH09c3g7cmV0dXJuKHQ/LmNsZWFySW1tZWRpYXRlfHxkMGUpKG4pfSxkZWxlZ2F0ZTp2b2lkIDB9LExwPWNsYXNze2NvbnN0cnVjdG9yKHQsZT1McC5ub3cpe3RoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj10LHRoaXMubm93PWV9c2NoZWR1bGUodCxlPTAsaSl7cmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcyx0KS5zY2hlZHVsZShpLGUpfX07THAubm93PXJ4Lm5vdzt2YXIgX3U9Y2xhc3MgZXh0ZW5kcyBMcHtjb25zdHJ1Y3Rvcih0LGU9THAubm93KXtzdXBlcih0LGUpLHRoaXMuYWN0aW9ucz1bXSx0aGlzLl9hY3RpdmU9ITF9Zmx1c2godCl7bGV0IGkse2FjdGlvbnM6ZX09dGhpcztpZih0aGlzLl9hY3RpdmUpZS5wdXNoKHQpO2Vsc2V7dGhpcy5fYWN0aXZlPSEwO2Rve2lmKGk9dC5leGVjdXRlKHQuc3RhdGUsdC5kZWxheSkpYnJlYWt9d2hpbGUodD1lLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxpKXtmb3IoO3Q9ZS5zaGlmdCgpOyl0LnVuc3Vic2NyaWJlKCk7dGhyb3cgaX19fX0sZjA9bmV3IGNsYXNzIGV4dGVuZHMgX3V7Zmx1c2godCl7dGhpcy5fYWN0aXZlPSEwO2xldCBlPXRoaXMuX3NjaGVkdWxlZDt0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO2xldCByLHthY3Rpb25zOml9PXRoaXM7dD10fHxpLnNoaWZ0KCk7ZG97aWYocj10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSgodD1pWzBdKSYmdC5pZD09PWUmJmkuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLHIpe2Zvcig7KHQ9aVswXSkmJnQuaWQ9PT1lJiZpLnNoaWZ0KCk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyByfX19KGNsYXNzIGV4dGVuZHMgZ3V7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMuc2NoZWR1bGVyPXQsdGhpcy53b3JrPWV9cmVxdWVzdEFzeW5jSWQodCxlLGk9MCl7cmV0dXJuIG51bGwhPT1pJiZpPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQodCxlLGkpOih0LmFjdGlvbnMucHVzaCh0aGlzKSx0Ll9zY2hlZHVsZWR8fCh0Ll9zY2hlZHVsZWQ9c3guc2V0SW1tZWRpYXRlKHQuZmx1c2guYmluZCh0LHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQodCxlLGk9MCl7dmFyIHI7aWYobnVsbCE9aT9pPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZCh0LGUsaSk7bGV0e2FjdGlvbnM6b309dDtudWxsIT1lJiYobnVsbD09PShyPW9bby5sZW5ndGgtMV0pfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmlkKSE9PWUmJihzeC5jbGVhckltbWVkaWF0ZShlKSx0Ll9zY2hlZHVsZWQ9dm9pZCAwKX19KSxrZD1uZXcgX3UoZ3UpLFU2PWtkLGdOPW5ldyBjbGFzcyBleHRlbmRzIF91e30oY2xhc3MgZXh0ZW5kcyBndXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZX1zY2hlZHVsZSh0LGU9MCl7cmV0dXJuIGU+MD9zdXBlci5zY2hlZHVsZSh0LGUpOih0aGlzLmRlbGF5PWUsdGhpcy5zdGF0ZT10LHRoaXMuc2NoZWR1bGVyLmZsdXNoKHRoaXMpLHRoaXMpfWV4ZWN1dGUodCxlKXtyZXR1cm4gZT4wfHx0aGlzLmNsb3NlZD9zdXBlci5leGVjdXRlKHQsZSk6dGhpcy5fZXhlY3V0ZSh0LGUpfXJlcXVlc3RBc3luY0lkKHQsZSxpPTApe3JldHVybiBudWxsIT1pJiZpPjB8fG51bGw9PWkmJnRoaXMuZGVsYXk+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZCh0LGUsaSk6KHQuZmx1c2godGhpcyksMCl9fSksX049bmV3IGNsYXNzIGV4dGVuZHMgX3V7Zmx1c2godCl7dGhpcy5fYWN0aXZlPSEwO2xldCBlPXRoaXMuX3NjaGVkdWxlZDt0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO2xldCByLHthY3Rpb25zOml9PXRoaXM7dD10fHxpLnNoaWZ0KCk7ZG97aWYocj10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSgodD1pWzBdKSYmdC5pZD09PWUmJmkuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLHIpe2Zvcig7KHQ9aVswXSkmJnQuaWQ9PT1lJiZpLnNoaWZ0KCk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyByfX19KGNsYXNzIGV4dGVuZHMgZ3V7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMuc2NoZWR1bGVyPXQsdGhpcy53b3JrPWV9cmVxdWVzdEFzeW5jSWQodCxlLGk9MCl7cmV0dXJuIG51bGwhPT1pJiZpPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQodCxlLGkpOih0LmFjdGlvbnMucHVzaCh0aGlzKSx0Ll9zY2hlZHVsZWR8fCh0Ll9zY2hlZHVsZWQ9aDAucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50LmZsdXNoKHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQodCxlLGk9MCl7dmFyIHI7aWYobnVsbCE9aT9pPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZCh0LGUsaSk7bGV0e2FjdGlvbnM6b309dDtudWxsIT1lJiYobnVsbD09PShyPW9bby5sZW5ndGgtMV0pfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmlkKSE9PWUmJihoMC5jYW5jZWxBbmltYXRpb25GcmFtZShlKSx0Ll9zY2hlZHVsZWQ9dm9pZCAwKX19KSxlbz1uZXcgdW4obj0+bi5jb21wbGV0ZSgpKTtmdW5jdGlvbiBaRShuKXtyZXR1cm4gbiYmRW4obi5zY2hlZHVsZSl9ZnVuY3Rpb24gdk4obil7cmV0dXJuIG5bbi5sZW5ndGgtMV19ZnVuY3Rpb24gdnUobil7cmV0dXJuIEVuKHZOKG4pKT9uLnBvcCgpOnZvaWQgMH1mdW5jdGlvbiB5dShuKXtyZXR1cm4gWkUodk4obikpP24ucG9wKCk6dm9pZCAwfXZhciBkVz1vTih1VygpLDEpLHtfX2RlY29yYXRlOnBXLF9fYXdhaXRlcjpoVyxfX2F3YWl0OnQxLF9fYXN5bmNHZW5lcmF0b3I6ZlcsX19hc3luY1ZhbHVlczptV309ZFcuZGVmYXVsdCxnMD1uPT5uJiYibnVtYmVyIj09dHlwZW9mIG4ubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgbjtmdW5jdGlvbiBuMShuKXtyZXR1cm4gRW4obj8udGhlbil9ZnVuY3Rpb24gaTEobil7cmV0dXJuIEVuKG5bcDBdKX1mdW5jdGlvbiByMShuKXtyZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3ImJkVuKG4/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pfWZ1bmN0aW9uIG8xKG4pe3JldHVybiBuZXcgVHlwZUVycm9yKGBZb3UgcHJvdmlkZWQgJHtudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBuPyJhbiBpbnZhbGlkIG9iamVjdCI6YCcke259J2B9IHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuYCl9dmFyIHMxPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcj9TeW1ib2wuaXRlcmF0b3I6IkBAaXRlcmF0b3IiO2Z1bmN0aW9uIGExKG4pe3JldHVybiBFbihuPy5bczFdKX1mdW5jdGlvbiBsMShuKXtyZXR1cm4gZlcodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24qKCl7bGV0IGU9bi5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtsZXR7dmFsdWU6aSxkb25lOnJ9PXlpZWxkIHQxKGUucmVhZCgpKTtpZihyKXJldHVybiB5aWVsZCB0MSh2b2lkIDApO3lpZWxkIHlpZWxkIHQxKGkpfX1maW5hbGx5e2UucmVsZWFzZUxvY2soKX19KX1mdW5jdGlvbiBjMShuKXtyZXR1cm4gRW4obj8uZ2V0UmVhZGVyKX1mdW5jdGlvbiBnaShuKXtpZihuIGluc3RhbmNlb2YgdW4pcmV0dXJuIG47aWYobnVsbCE9bil7aWYoaTEobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdW4odD0+e2xldCBlPW5bcDBdKCk7aWYoRW4oZS5zdWJzY3JpYmUpKXJldHVybiBlLnN1YnNjcmliZSh0KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZSIpfSl9KG4pO2lmKGcwKG4pKXJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IHVuKHQ9Pntmb3IobGV0IGU9MDtlPG4ubGVuZ3RoJiYhdC5jbG9zZWQ7ZSsrKXQubmV4dChuW2VdKTt0LmNvbXBsZXRlKCl9KX0obik7aWYobjEobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdW4odD0+e24udGhlbihlPT57dC5jbG9zZWR8fCh0Lm5leHQoZSksdC5jb21wbGV0ZSgpKX0sZT0+dC5lcnJvcihlKSkudGhlbihudWxsLFVFKX0pfShuKTtpZihyMShuKSlyZXR1cm4gZ1cobik7aWYoYTEobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdW4odD0+e2ZvcihsZXQgZSBvZiBuKWlmKHQubmV4dChlKSx0LmNsb3NlZClyZXR1cm47dC5jb21wbGV0ZSgpfSl9KG4pO2lmKGMxKG4pKXJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZ1cobDEobikpfShuKX10aHJvdyBvMShuKX1mdW5jdGlvbiBnVyhuKXtyZXR1cm4gbmV3IHVuKHQ9PnsoZnVuY3Rpb24obix0KXt2YXIgZSxpLHIsbztyZXR1cm4gaFcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RyeXtmb3IoZT1tVyhuKTshKGk9eWllbGQgZS5uZXh0KCkpLmRvbmU7KWlmKHQubmV4dChpLnZhbHVlKSx0LmNsb3NlZClyZXR1cm59Y2F0Y2gocyl7cj17ZXJyb3I6c319ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKG89ZS5yZXR1cm4pJiYoeWllbGQgby5jYWxsKGUpKX1maW5hbGx5e2lmKHIpdGhyb3cgci5lcnJvcn19dC5jb21wbGV0ZSgpfSl9KShuLHQpLmNhdGNoKGU9PnQuZXJyb3IoZSkpfSl9ZnVuY3Rpb24gQ2Eobix0LGUsaT0wLHI9ITEpe2xldCBvPXQuc2NoZWR1bGUoZnVuY3Rpb24oKXtlKCkscj9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsaSkpOnRoaXMudW5zdWJzY3JpYmUoKX0saSk7aWYobi5hZGQobyksIXIpcmV0dXJuIG99ZnVuY3Rpb24gQmYobix0PTApe3JldHVybiBlbigoZSxpKT0+e2Uuc3Vic2NyaWJlKGp0KGkscj0+Q2EoaSxuLCgpPT5pLm5leHQociksdCksKCk9PkNhKGksbiwoKT0+aS5jb21wbGV0ZSgpLHQpLHI9PkNhKGksbiwoKT0+aS5lcnJvcihyKSx0KSkpfSl9ZnVuY3Rpb24gdTEobix0PTApe3JldHVybiBlbigoZSxpKT0+e2kuYWRkKG4uc2NoZWR1bGUoKCk9PmUuc3Vic2NyaWJlKGkpLHQpKX0pfWZ1bmN0aW9uIGQxKG4sdCl7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJJdGVyYWJsZSBjYW5ub3QgYmUgbnVsbCIpO3JldHVybiBuZXcgdW4oZT0+e0NhKGUsdCwoKT0+e2xldCBpPW5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7Q2EoZSx0LCgpPT57aS5uZXh0KCkudGhlbihyPT57ci5kb25lP2UuY29tcGxldGUoKTplLm5leHQoci52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIEVvKG4sdCl7cmV0dXJuIHQ/ZnVuY3Rpb24obix0KXtpZihudWxsIT1uKXtpZihpMShuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gZ2kobikucGlwZSh1MSh0KSxCZih0KSl9KG4sdCk7aWYoZzAobikpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5ldyB1bihlPT57bGV0IGk9MDtyZXR1cm4gdC5zY2hlZHVsZShmdW5jdGlvbigpe2k9PT1uLmxlbmd0aD9lLmNvbXBsZXRlKCk6KGUubmV4dChuW2krK10pLGUuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0obix0KTtpZihuMShuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gZ2kobikucGlwZSh1MSh0KSxCZih0KSl9KG4sdCk7aWYocjEobikpcmV0dXJuIGQxKG4sdCk7aWYoYTEobikpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5ldyB1bihlPT57bGV0IGk7cmV0dXJuIENhKGUsdCwoKT0+e2k9bltzMV0oKSxDYShlLHQsKCk9PntsZXQgcixvO3RyeXsoe3ZhbHVlOnIsZG9uZTpvfT1pLm5leHQoKSl9Y2F0Y2gocyl7cmV0dXJuIHZvaWQgZS5lcnJvcihzKX1vP2UuY29tcGxldGUoKTplLm5leHQocil9LDAsITApfSksKCk9PkVuKGk/LnJldHVybikmJmkucmV0dXJuKCl9KX0obix0KTtpZihjMShuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gZDEobDEobiksdCl9KG4sdCl9dGhyb3cgbzEobil9KG4sdCk6Z2kobil9ZnVuY3Rpb24gWHQoLi4ubil7cmV0dXJuIEVvKG4seXUobikpfWZ1bmN0aW9uIHdjKG4sdCl7bGV0IGU9RW4obik/bjooKT0+bixpPXI9PnIuZXJyb3IoZSgpKTtyZXR1cm4gbmV3IHVuKHQ/cj0+dC5zY2hlZHVsZShpLDAscik6aSl9dmFyIFJsPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmtpbmQ9dCx0aGlzLnZhbHVlPWUsdGhpcy5lcnJvcj1pLHRoaXMuaGFzVmFsdWU9Ik4iPT09dH1vYnNlcnZlKHQpe3JldHVybiBiTih0aGlzLHQpfWRvKHQsZSxpKXtsZXR7a2luZDpyLHZhbHVlOm8sZXJyb3I6c309dGhpcztyZXR1cm4iTiI9PT1yP3Q/LihvKToiRSI9PT1yP2U/LihzKTppPy4oKX1hY2NlcHQodCxlLGkpe3ZhciByO3JldHVybiBFbihudWxsPT09KHI9dCl8fHZvaWQgMD09PXI/dm9pZCAwOnIubmV4dCk/dGhpcy5vYnNlcnZlKHQpOnRoaXMuZG8odCxlLGkpfXRvT2JzZXJ2YWJsZSgpe2xldHtraW5kOnQsdmFsdWU6ZSxlcnJvcjppfT10aGlzLHI9Ik4iPT09dD9YdChlKToiRSI9PT10P3djKCgpPT5pKToiQyI9PT10P2VvOjA7aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5leHBlY3RlZCBub3RpZmljYXRpb24ga2luZCAke3R9YCk7cmV0dXJuIHJ9c3RhdGljIGNyZWF0ZU5leHQodCl7cmV0dXJuIG5ldyBSbCgiTiIsdCl9c3RhdGljIGNyZWF0ZUVycm9yKHQpe3JldHVybiBuZXcgUmwoIkUiLHZvaWQgMCx0KX1zdGF0aWMgY3JlYXRlQ29tcGxldGUoKXtyZXR1cm4gUmwuY29tcGxldGVOb3RpZmljYXRpb259fTtmdW5jdGlvbiBiTihuLHQpe3ZhciBlLGkscjtsZXR7a2luZDpvLHZhbHVlOnMsZXJyb3I6YX09bjtpZigic3RyaW5nIiE9dHlwZW9mIG8pdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBub3RpZmljYXRpb24sIG1pc3NpbmcgImtpbmQiJyk7Ik4iPT09bz9udWxsPT09KGU9dC5uZXh0KXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHQscyk6IkUiPT09bz9udWxsPT09KGk9dC5lcnJvcil8fHZvaWQgMD09PWl8fGkuY2FsbCh0LGEpOm51bGw9PT0ocj10LmNvbXBsZXRlKXx8dm9pZCAwPT09cnx8ci5jYWxsKHQpfWZ1bmN0aW9uIGF4KG4pe3JldHVybiEhbiYmKG4gaW5zdGFuY2VvZiB1bnx8RW4obi5saWZ0KSYmRW4obi5zdWJzY3JpYmUpKX1SbC5jb21wbGV0ZU5vdGlmaWNhdGlvbj1uZXcgUmwoIkMiKTt2YXIgXzA9YzAobj0+ZnVuY3Rpb24oKXtuKHRoaXMpLHRoaXMubmFtZT0iRW1wdHlFcnJvciIsdGhpcy5tZXNzYWdlPSJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSJ9KTtmdW5jdGlvbiBMKG4sdCl7cmV0dXJuIGVuKChlLGkpPT57bGV0IHI9MDtlLnN1YnNjcmliZShqdChpLG89PntpLm5leHQobi5jYWxsKHQsbyxyKyspKX0pKX0pfXZhcntpc0FycmF5OnkwZX09QXJyYXk7ZnVuY3Rpb24gQnAobil7cmV0dXJuIEwodD0+ZnVuY3Rpb24obix0KXtyZXR1cm4geTBlKHQpP24oLi4udCk6bih0KX0obix0KSl9dmFye2lzQXJyYXk6eDBlfT1BcnJheSx7Z2V0UHJvdG90eXBlT2Y6QzBlLHByb3RvdHlwZTpNMGUsa2V5czp3MGV9PU9iamVjdDtmdW5jdGlvbiBwMShuKXtpZigxPT09bi5sZW5ndGgpe2xldCB0PW5bMF07aWYoeDBlKHQpKXJldHVybnthcmdzOnQsa2V5czpudWxsfTtpZihmdW5jdGlvbihuKXtyZXR1cm4gbiYmIm9iamVjdCI9PXR5cGVvZiBuJiZDMGUobik9PT1NMGV9KHQpKXtsZXQgZT13MGUodCk7cmV0dXJue2FyZ3M6ZS5tYXAoaT0+dFtpXSksa2V5czplfX19cmV0dXJue2FyZ3M6bixrZXlzOm51bGx9fWZ1bmN0aW9uIGgxKG4sdCl7cmV0dXJuIG4ucmVkdWNlKChlLGkscik9PihlW2ldPXRbcl0sZSkse30pfWZ1bmN0aW9uIEx0KC4uLm4pe2xldCB0PXl1KG4pLGU9dnUobikse2FyZ3M6aSxrZXlzOnJ9PXAxKG4pO2lmKDA9PT1pLmxlbmd0aClyZXR1cm4gRW8oW10sdCk7bGV0IG89bmV3IHVuKHhOKGksdCxyP3M9PmgxKHIscyk6bXMpKTtyZXR1cm4gZT9vLnBpcGUoQnAoZSkpOm99ZnVuY3Rpb24geE4obix0LGU9bXMpe3JldHVybiBpPT57d1codCwoKT0+e2xldHtsZW5ndGg6cn09bixvPW5ldyBBcnJheShyKSxzPXIsYT1yO2ZvcihsZXQgbD0wO2w8cjtsKyspd1codCwoKT0+e2xldCBjPUVvKG5bbF0sdCksdT0hMTtjLnN1YnNjcmliZShqdChpLGQ9PntvW2xdPWQsdXx8KHU9ITAsYS0tKSxhfHxpLm5leHQoZShvLnNsaWNlKCkpKX0sKCk9PnstLXN8fGkuY29tcGxldGUoKX0pKX0saSl9LGkpfX1mdW5jdGlvbiB3VyhuLHQsZSl7bj9DYShlLG4sdCk6dCgpfWZ1bmN0aW9uIHhuKG4sdCxlPTEvMCl7cmV0dXJuIEVuKHQpP3huKChpLHIpPT5MKChvLHMpPT50KGksbyxyLHMpKShnaShuKGkscikpKSxlKTooIm51bWJlciI9PXR5cGVvZiB0JiYoZT10KSxlbigoaSxyKT0+ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhKXtsZXQgbD1bXSxjPTAsdT0wLGQ9ITEscD0oKT0+e2QmJiFsLmxlbmd0aCYmIWMmJnQuY29tcGxldGUoKX0saD1tPT5jPGk/ZihtKTpsLnB1c2gobSksZj1tPT57YysrO2xldCB4PSExO2dpKGUobSx1KyspKS5zdWJzY3JpYmUoanQodCxnPT57dC5uZXh0KGcpfSwoKT0+e3g9ITB9LHZvaWQgMCwoKT0+e2lmKHgpdHJ5e2ZvcihjLS07bC5sZW5ndGgmJmM8aTspe2xldCBnPWwuc2hpZnQoKTtmKGcpfXAoKX1jYXRjaChnKXt0LmVycm9yKGcpfX0pKX07cmV0dXJuIG4uc3Vic2NyaWJlKGp0KHQsaCwoKT0+e2Q9ITAscCgpfSkpLCgpPT57fX0oaSxyLG4sZSkpKX1mdW5jdGlvbiBmMShuPTEvMCl7cmV0dXJuIHhuKG1zLG4pfWZ1bmN0aW9uIFZwKC4uLm4pe3JldHVybiBmMSgxKShFbyhuLHl1KG4pKSl9ZnVuY3Rpb24gUWEobil7cmV0dXJuIG5ldyB1bih0PT57Z2kobigpKS5zdWJzY3JpYmUodCl9KX1mdW5jdGlvbiBsciguLi5uKXtsZXQgdD12dShuKSx7YXJnczplLGtleXM6aX09cDEobikscj1uZXcgdW4obz0+e2xldHtsZW5ndGg6c309ZTtpZighcylyZXR1cm4gdm9pZCBvLmNvbXBsZXRlKCk7bGV0IGE9bmV3IEFycmF5KHMpLGw9cyxjPXM7Zm9yKGxldCB1PTA7dTxzO3UrKyl7bGV0IGQ9ITE7Z2koZVt1XSkuc3Vic2NyaWJlKGp0KG8scD0+e2R8fChkPSEwLGMtLSksYVt1XT1wfSwoKT0+bC0tLHZvaWQgMCwoKT0+eyghbHx8IWQpJiYoY3x8by5uZXh0KGk/aDEoaSxhKTphKSxvLmNvbXBsZXRlKCkpfSkpfX0pO3JldHVybiB0P3IucGlwZShCcCh0KSk6cn12YXIgRTBlPVsiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciJdLFQwZT1bImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sRDBlPVsib24iLCJvZmYiXTtmdW5jdGlvbiBfaShuLHQsZSxpKXtpZihFbihlKSYmKGk9ZSxlPXZvaWQgMCksaSlyZXR1cm4gX2kobix0LGUpLnBpcGUoQnAoaSkpO2xldFtyLG9dPWZ1bmN0aW9uKG4pe3JldHVybiBFbihuLmFkZEV2ZW50TGlzdGVuZXIpJiZFbihuLnJlbW92ZUV2ZW50TGlzdGVuZXIpfShuKT9UMGUubWFwKHM9PmE9Pm5bc10odCxhLGUpKTpmdW5jdGlvbihuKXtyZXR1cm4gRW4obi5hZGRMaXN0ZW5lcikmJkVuKG4ucmVtb3ZlTGlzdGVuZXIpfShuKT9FMGUubWFwKFRXKG4sdCkpOmZ1bmN0aW9uKG4pe3JldHVybiBFbihuLm9uKSYmRW4obi5vZmYpfShuKT9EMGUubWFwKFRXKG4sdCkpOltdO2lmKCFyJiZnMChuKSlyZXR1cm4geG4ocz0+X2kocyx0LGUpKShnaShuKSk7aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBldmVudCB0YXJnZXQiKTtyZXR1cm4gbmV3IHVuKHM9PntsZXQgYT0oLi4ubCk9PnMubmV4dCgxPGwubGVuZ3RoP2w6bFswXSk7cmV0dXJuIHIoYSksKCk9Pm8oYSl9KX1mdW5jdGlvbiBUVyhuLHQpe3JldHVybiBlPT5pPT5uW2VdKHQsaSl9ZnVuY3Rpb24gS2Eobj0wLHQsZT1VNil7bGV0IGk9LTE7cmV0dXJuIG51bGwhPXQmJihaRSh0KT9lPXQ6aT10KSxuZXcgdW4ocj0+e2xldCBvPWZ1bmN0aW9uKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRGF0ZSYmIWlzTmFOKG4pfShuKT8rbi1lLm5vdygpOm47bzwwJiYobz0wKTtsZXQgcz0wO3JldHVybiBlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7ci5jbG9zZWR8fChyLm5leHQocysrKSwwPD1pP3RoaXMuc2NoZWR1bGUodm9pZCAwLGkpOnIuY29tcGxldGUoKSl9LG8pfSl9ZnVuY3Rpb24gSnQoLi4ubil7bGV0IHQ9eXUobiksZT1mdW5jdGlvbihuLHQpe3JldHVybiJudW1iZXIiPT10eXBlb2Ygdk4obik/bi5wb3AoKToxLzB9KG4pLGk9bjtyZXR1cm4gaS5sZW5ndGg/MT09PWkubGVuZ3RoP2dpKGlbMF0pOmYxKGUpKEVvKGksdCkpOmVvfXZhcntpc0FycmF5OlIwZX09QXJyYXk7ZnVuY3Rpb24gbTEobil7cmV0dXJuIDE9PT1uLmxlbmd0aCYmUjBlKG5bMF0pP25bMF06bn1mdW5jdGlvbiBZZShuLHQpe3JldHVybiBlbigoZSxpKT0+e2xldCByPTA7ZS5zdWJzY3JpYmUoanQoaSxvPT5uLmNhbGwodCxvLHIrKykmJmkubmV4dChvKSkpfSl9ZnVuY3Rpb24gYnUobix0PWtkKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGVuKCh0LGUpPT57bGV0IGk9ITEscj1udWxsLG89bnVsbCxzPSExLGE9KCk9PntpZihvPy51bnN1YnNjcmliZSgpLG89bnVsbCxpKXtpPSExO2xldCBjPXI7cj1udWxsLGUubmV4dChjKX1zJiZlLmNvbXBsZXRlKCl9LGw9KCk9PntvPW51bGwscyYmZS5jb21wbGV0ZSgpfTt0LnN1YnNjcmliZShqdChlLGM9PntpPSEwLHI9YyxvfHxnaShuKCkpLnN1YnNjcmliZShvPWp0KGUsYSxsKSl9LCgpPT57cz0hMCwoIWl8fCFvfHxvLmNsb3NlZCkmJmUuY29tcGxldGUoKX0pKX0pfSgoKT0+S2Eobix0KSl9ZnVuY3Rpb24gZm8obil7cmV0dXJuIGVuKCh0LGUpPT57bGV0IG8saT1udWxsLHI9ITE7aT10LnN1YnNjcmliZShqdChlLHZvaWQgMCx2b2lkIDAscz0+e289Z2kobihzLGZvKG4pKHQpKSksaT8oaS51bnN1YnNjcmliZSgpLGk9bnVsbCxvLnN1YnNjcmliZShlKSk6cj0hMH0pKSxyJiYoaS51bnN1YnNjcmliZSgpLGk9bnVsbCxvLnN1YnNjcmliZShlKSl9KX1mdW5jdGlvbiBBVyhuLHQsZSxpLHIpe3JldHVybihvLHMpPT57bGV0IGE9ZSxsPXQsYz0wO28uc3Vic2NyaWJlKGp0KHMsdT0+e2xldCBkPWMrKztsPWE/bihsLHUsZCk6KGE9ITAsdSksaSYmcy5uZXh0KGwpfSxyJiYoKCk9PnthJiZzLm5leHQobCkscy5jb21wbGV0ZSgpfSkpKX19ZnVuY3Rpb24gd04oLi4ubil7bGV0IHQ9dnUobik7cmV0dXJuIHQ/ZnVuY3Rpb24oLi4ubil7cmV0dXJuIHBOKG4pfSh3TiguLi5uKSxCcCh0KSk6ZW4oKGUsaSk9Pnt4TihbZSwuLi5tMShuKV0pKGkpfSl9ZnVuY3Rpb24gZnIoLi4ubil7cmV0dXJuIHdOKC4uLm4pfWZ1bmN0aW9uIEhyKG4sdD1rZCl7cmV0dXJuIGVuKChlLGkpPT57bGV0IHI9bnVsbCxvPW51bGwscz1udWxsLGE9KCk9PntpZihyKXtyLnVuc3Vic2NyaWJlKCkscj1udWxsO2xldCBjPW87bz1udWxsLGkubmV4dChjKX19O2Z1bmN0aW9uIGwoKXtsZXQgYz1zK24sdT10Lm5vdygpO2lmKHU8YylyZXR1cm4gcj10aGlzLnNjaGVkdWxlKHZvaWQgMCxjLXUpLHZvaWQgaS5hZGQocik7YSgpfWUuc3Vic2NyaWJlKGp0KGksYz0+e289YyxzPXQubm93KCkscnx8KHI9dC5zY2hlZHVsZShsLG4pLGkuYWRkKHIpKX0sKCk9PnthKCksaS5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntvPXI9bnVsbH0pKX0pfWZ1bmN0aW9uIF8xKG4pe3JldHVybiBlbigodCxlKT0+e2xldCBpPSExO3Quc3Vic2NyaWJlKGp0KGUscj0+e2k9ITAsZS5uZXh0KHIpfSwoKT0+e2l8fGUubmV4dChuKSxlLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBRdChuKXtyZXR1cm4gbjw9MD8oKT0+ZW86ZW4oKHQsZSk9PntsZXQgaT0wO3Quc3Vic2NyaWJlKGp0KGUscj0+eysraTw9biYmKGUubmV4dChyKSxuPD1pJiZlLmNvbXBsZXRlKCkpfSkpfSl9ZnVuY3Rpb24gbHgoKXtyZXR1cm4gZW4oKG4sdCk9PntuLnN1YnNjcmliZShqdCh0LE1jKSl9KX1mdW5jdGlvbiB2MChuLHQpe3JldHVybiB0P2U9PlZwKHQucGlwZShRdCgxKSxseCgpKSxlLnBpcGUodjAobikpKTp4bigoZSxpKT0+bihlLGkpLnBpcGUoUXQoMSksZnVuY3Rpb24obil7cmV0dXJuIEwoKCk9Pm4pfShlKSkpfWZ1bmN0aW9uIE9sKG4sdD1rZCl7bGV0IGU9S2Eobix0KTtyZXR1cm4gdjAoKCk9PmUpfWZ1bmN0aW9uIHlpKG4sdD1tcyl7cmV0dXJuIG49bj8/TzBlLGVuKChlLGkpPT57bGV0IHIsbz0hMDtlLnN1YnNjcmliZShqdChpLHM9PntsZXQgYT10KHMpOyhvfHwhbihyLGEpKSYmKG89ITEscj1hLGkubmV4dChzKSl9KSl9KX1mdW5jdGlvbiBPMGUobix0KXtyZXR1cm4gbj09PXR9ZnVuY3Rpb24gdjEobj1rMGUpe3JldHVybiBlbigodCxlKT0+e2xldCBpPSExO3Quc3Vic2NyaWJlKGp0KGUscj0+e2k9ITAsZS5uZXh0KHIpfSwoKT0+aT9lLmNvbXBsZXRlKCk6ZS5lcnJvcihuKCkpKSl9KX1mdW5jdGlvbiBrMGUoKXtyZXR1cm4gbmV3IF8wfWZ1bmN0aW9uIHkxKG4sdCl7cmV0dXJuIHQ/ZT0+ZS5waXBlKHkxKChpLHIpPT5naShuKGkscikpLnBpcGUoTCgobyxzKT0+dChpLG8scixzKSkpKSk6ZW4oKGUsaSk9PntsZXQgcj0wLG89bnVsbCxzPSExO2Uuc3Vic2NyaWJlKGp0KGksYT0+e298fChvPWp0KGksdm9pZCAwLCgpPT57bz1udWxsLHMmJmkuY29tcGxldGUoKX0pLGdpKG4oYSxyKyspKS5zdWJzY3JpYmUobykpfSwoKT0+e3M9ITAsIW8mJmkuY29tcGxldGUoKX0pKX0pfWZ1bmN0aW9uIHgxKG4sdCxlLGkpe3JldHVybiBlbigocixvKT0+e2xldCBzO3QmJiJmdW5jdGlvbiIhPXR5cGVvZiB0Pyh7ZHVyYXRpb246ZSxlbGVtZW50OnMsY29ubmVjdG9yOml9PXQpOnM9dDtsZXQgYT1uZXcgTWFwLGw9Zj0+e2EuZm9yRWFjaChmKSxmKG8pfSxjPWY9PmwobT0+bS5lcnJvcihmKSksdT0wLGQ9ITEscD1uZXcgbngobyxmPT57dHJ5e2xldCBtPW4oZikseD1hLmdldChtKTtpZigheCl7YS5zZXQobSx4PWk/aSgpOm5ldyBrZSk7bGV0IGc9ZnVuY3Rpb24oZixtKXtsZXQgeD1uZXcgdW4oZz0+e3UrKztsZXQgYj1tLnN1YnNjcmliZShnKTtyZXR1cm4oKT0+e2IudW5zdWJzY3JpYmUoKSwwPT0tLXUmJmQmJnAudW5zdWJzY3JpYmUoKX19KTtyZXR1cm4geC5rZXk9Zix4fShtLHgpO2lmKG8ubmV4dChnKSxlKXtsZXQgYj1qdCh4LCgpPT57eC5jb21wbGV0ZSgpLGI/LnVuc3Vic2NyaWJlKCl9LHZvaWQgMCx2b2lkIDAsKCk9PmEuZGVsZXRlKG0pKTtwLmFkZChnaShlKGcpKS5zdWJzY3JpYmUoYikpfX14Lm5leHQocz9zKGYpOmYpfWNhdGNoKG0pe2MobSl9fSwoKT0+bChmPT5mLmNvbXBsZXRlKCkpLGMsKCk9PmEuY2xlYXIoKSwoKT0+KGQ9ITAsMD09PXUpKTtyLnN1YnNjcmliZShwKX0pfWZ1bmN0aW9uIFBXKG4pe3JldHVybiBuPD0wPygpPT5lbzplbigodCxlKT0+e2xldCBpPVtdO3Quc3Vic2NyaWJlKGp0KGUscj0+e2kucHVzaChyKSxuPGkubGVuZ3RoJiZpLnNoaWZ0KCl9LCgpPT57Zm9yKGxldCByIG9mIGkpZS5uZXh0KHIpO2UuY29tcGxldGUoKX0sdm9pZCAwLCgpPT57aT1udWxsfSkpfSl9ZnVuY3Rpb24geTAoKXtyZXR1cm4gZW4oKG4sdCk9PntsZXQgZSxpPSExO24uc3Vic2NyaWJlKGp0KHQscj0+e2xldCBvPWU7ZT1yLGkmJnQubmV4dChbbyxyXSksaT0hMH0pKX0pfWZ1bmN0aW9uIFRzKG49e30pe2xldHtjb25uZWN0b3I6dD0oKCk9Pm5ldyBrZSkscmVzZXRPbkVycm9yOmU9ITAscmVzZXRPbkNvbXBsZXRlOmk9ITAscmVzZXRPblJlZkNvdW50WmVybzpyPSEwfT1uO3JldHVybiBvPT57bGV0IHMsYSxsLGM9MCx1PSExLGQ9ITEscD0oKT0+e2E/LnVuc3Vic2NyaWJlKCksYT12b2lkIDB9LGg9KCk9PntwKCkscz1sPXZvaWQgMCx1PWQ9ITF9LGY9KCk9PntsZXQgbT1zO2goKSxtPy51bnN1YnNjcmliZSgpfTtyZXR1cm4gZW4oKG0seCk9PntjKyssIWQmJiF1JiZwKCk7bGV0IGc9bD1sPz90KCk7eC5hZGQoKCk9PntjLS0sMD09PWMmJiFkJiYhdSYmKGE9Uk4oZixyKSl9KSxnLnN1YnNjcmliZSh4KSwhcyYmYz4wJiYocz1uZXcgT2Qoe25leHQ6Yj0+Zy5uZXh0KGIpLGVycm9yOmI9PntkPSEwLHAoKSxhPVJOKGgsZSxiKSxnLmVycm9yKGIpfSxjb21wbGV0ZTooKT0+e3U9ITAscCgpLGE9Uk4oaCxpKSxnLmNvbXBsZXRlKCl9fSksZ2kobSkuc3Vic2NyaWJlKHMpKX0pKG8pfX1mdW5jdGlvbiBSTihuLHQsLi4uZSl7aWYoITA9PT10KXJldHVybiB2b2lkIG4oKTtpZighMT09PXQpcmV0dXJuO2xldCBpPW5ldyBPZCh7bmV4dDooKT0+e2kudW5zdWJzY3JpYmUoKSxuKCl9fSk7cmV0dXJuIHQoLi4uZSkuc3Vic2NyaWJlKGkpfWZ1bmN0aW9uIE1hKG4sdCxlKXtsZXQgaSxyPSExO3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4/KHtidWZmZXJTaXplOmk9MS8wLHdpbmRvd1RpbWU6dD0xLzAscmVmQ291bnQ6cj0hMSxzY2hlZHVsZXI6ZX09bik6aT1uPz8xLzAsVHMoe2Nvbm5lY3RvcjooKT0+bmV3IExmKGksdCxlKSxyZXNldE9uRXJyb3I6ITAscmVzZXRPbkNvbXBsZXRlOiExLHJlc2V0T25SZWZDb3VudFplcm86cn0pfWZ1bmN0aW9uIFphKG4pe3JldHVybiBZZSgodCxlKT0+bjw9ZSl9ZnVuY3Rpb24gem4oLi4ubil7bGV0IHQ9eXUobik7cmV0dXJuIGVuKChlLGkpPT57KHQ/VnAobixlLHQpOlZwKG4sZSkpLnN1YnNjcmliZShpKX0pfWZ1bmN0aW9uIHVpKG4sdCl7cmV0dXJuIGVuKChlLGkpPT57bGV0IHI9bnVsbCxvPTAscz0hMSxhPSgpPT5zJiYhciYmaS5jb21wbGV0ZSgpO2Uuc3Vic2NyaWJlKGp0KGksbD0+e3I/LnVuc3Vic2NyaWJlKCk7bGV0IGM9MCx1PW8rKztnaShuKGwsdSkpLnN1YnNjcmliZShyPWp0KGksZD0+aS5uZXh0KHQ/dChsLGQsdSxjKyspOmQpLCgpPT57cj1udWxsLGEoKX0pKX0sKCk9PntzPSEwLGEoKX0pKX0pfWZ1bmN0aW9uIHN0KG4pe3JldHVybiBlbigodCxlKT0+e2dpKG4pLnN1YnNjcmliZShqdChlLCgpPT5lLmNvbXBsZXRlKCksTWMpKSwhZS5jbG9zZWQmJnQuc3Vic2NyaWJlKGUpfSl9ZnVuY3Rpb24gY3gobix0PSExKXtyZXR1cm4gZW4oKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKGp0KGksbz0+e2xldCBzPW4obyxyKyspOyhzfHx0KSYmaS5uZXh0KG8pLCFzJiZpLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBrdChuLHQsZSl7bGV0IGk9RW4obil8fHR8fGU/e25leHQ6bixlcnJvcjp0LGNvbXBsZXRlOmV9Om47cmV0dXJuIGk/ZW4oKHIsbyk9Pnt2YXIgcztudWxsPT09KHM9aS5zdWJzY3JpYmUpfHx2b2lkIDA9PT1zfHxzLmNhbGwoaSk7bGV0IGE9ITA7ci5zdWJzY3JpYmUoanQobyxsPT57dmFyIGM7bnVsbD09PShjPWkubmV4dCl8fHZvaWQgMD09PWN8fGMuY2FsbChpLGwpLG8ubmV4dChsKX0sKCk9Pnt2YXIgbDthPSExLG51bGw9PT0obD1pLmNvbXBsZXRlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpLG8uY29tcGxldGUoKX0sbD0+e3ZhciBjO2E9ITEsbnVsbD09PShjPWkuZXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwoaSxsKSxvLmVycm9yKGwpfSwoKT0+e3ZhciBsLGM7YSYmKG51bGw9PT0obD1pLnVuc3Vic2NyaWJlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpKSxudWxsPT09KGM9aS5maW5hbGl6ZSl8fHZvaWQgMD09PWN8fGMuY2FsbChpKX0pKX0pOm1zfXZhciBPTj17bGVhZGluZzohMCx0cmFpbGluZzohMX07ZnVuY3Rpb24gYjAobix0PWtkLGU9T04pe2xldCBpPUthKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4sdD1PTil7cmV0dXJuIGVuKChlLGkpPT57bGV0e2xlYWRpbmc6cix0cmFpbGluZzpvfT10LHM9ITEsYT1udWxsLGw9bnVsbCxjPSExLHU9KCk9PntsPy51bnN1YnNjcmliZSgpLGw9bnVsbCxvJiYoaCgpLGMmJmkuY29tcGxldGUoKSl9LGQ9KCk9PntsPW51bGwsYyYmaS5jb21wbGV0ZSgpfSxwPWY9Pmw9Z2kobihmKSkuc3Vic2NyaWJlKGp0KGksdSxkKSksaD0oKT0+e2lmKHMpe3M9ITE7bGV0IGY9YTthPW51bGwsaS5uZXh0KGYpLCFjJiZwKGYpfX07ZS5zdWJzY3JpYmUoanQoaSxmPT57cz0hMCxhPWYsKCFsfHxsLmNsb3NlZCkmJihyP2goKTpwKGYpKX0sKCk9PntjPSEwLCghKG8mJnMmJmwpfHxsLmNsb3NlZCkmJmkuY29tcGxldGUoKX0pKX0pfSgoKT0+aSxlKX1mdW5jdGlvbiBXdCguLi5uKXtsZXQgdD12dShuKTtyZXR1cm4gZW4oKGUsaSk9PntsZXQgcj1uLmxlbmd0aCxvPW5ldyBBcnJheShyKSxzPW4ubWFwKCgpPT4hMSksYT0hMTtmb3IobGV0IGw9MDtsPHI7bCsrKWdpKG5bbF0pLnN1YnNjcmliZShqdChpLGM9PntvW2xdPWMsIWEmJiFzW2xdJiYoc1tsXT0hMCwoYT1zLmV2ZXJ5KG1zKSkmJihzPW51bGwpKX0sTWMpKTtlLnN1YnNjcmliZShqdChpLGw9PntpZihhKXtsZXQgYz1bbCwuLi5vXTtpLm5leHQodD90KC4uLmMpOmMpfX0pKX0pfWZ1bmN0aW9uIG1yKG4pe2ZvcihsZXQgdCBpbiBuKWlmKG5bdF09PT1tcilyZXR1cm4gdDt0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0eSBvbiB0YXJnZXQgb2JqZWN0LiIpfWZ1bmN0aW9uIGtOKG4sdCl7Zm9yKGxldCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmIW4uaGFzT3duUHJvcGVydHkoZSkmJihuW2VdPXRbZV0pfWZ1bmN0aW9uIFRvKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbjtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiJbIituLm1hcChUbykuam9pbigiLCAiKSsiXSI7aWYobnVsbD09bilyZXR1cm4iIituO2lmKG4ub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7bi5vdmVycmlkZGVuTmFtZX1gO2lmKG4ubmFtZSlyZXR1cm5gJHtuLm5hbWV9YDtsZXQgdD1uLnRvU3RyaW5nKCk7aWYobnVsbD09dClyZXR1cm4iIit0O2xldCBlPXQuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PWU/dDp0LnN1YnN0cmluZygwLGUpfWZ1bmN0aW9uIHRMKG4sdCl7cmV0dXJuIG51bGw9PW58fCIiPT09bj9udWxsPT09dD8iIjp0Om51bGw9PXR8fCIiPT09dD9uOm4rIiAiK3R9dmFyIEYwZT1tcih7X19mb3J3YXJkX3JlZl9fOm1yfSk7ZnVuY3Rpb24gSm4obil7cmV0dXJuIG4uX19mb3J3YXJkX3JlZl9fPUpuLG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gVG8odGhpcygpKX0sbn1mdW5jdGlvbiBLaShuKXtyZXR1cm4gRTcobik/bigpOm59ZnVuY3Rpb24gRTcobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4uaGFzT3duUHJvcGVydHkoRjBlKSYmbi5fX2ZvcndhcmRfcmVmX189PT1Kbn12YXIgQXQ9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuYE5HMCR7TWF0aC5hYnMobil9JHt0PyI6ICIrdC50cmltKCk6IiJ9YH0odCxlKSksdGhpcy5jb2RlPXR9fTtmdW5jdGlvbiBLbihuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bjpudWxsPT1uPyIiOlN0cmluZyhuKX1mdW5jdGlvbiBvMyhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLm5hbWV8fG4udG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnR5cGU/bi50eXBlLm5hbWV8fG4udHlwZS50b1N0cmluZygpOktuKG4pfWZ1bmN0aW9uIHMzKG4sdCl7dGhyb3cgbmV3IEF0KC0yMDEsITEpfWZ1bmN0aW9uIFQ3KG4sdCxlLGkpe3Rocm93IG5ldyBFcnJvcihgQVNTRVJUSU9OIEVSUk9SOiAke259YCsobnVsbD09aT8iIjpgIFtFeHBlY3RlZD0+ICR7ZX0gJHtpfSAke3R9IDw9QWN0dWFsXWApKX1mdW5jdGlvbiB5ZShuKXtyZXR1cm57dG9rZW46bi50b2tlbixwcm92aWRlZEluOm4ucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5Om4uZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fWZ1bmN0aW9uIFYobil7cmV0dXJue3Byb3ZpZGVyczpuLnByb3ZpZGVyc3x8W10saW1wb3J0czpuLmltcG9ydHN8fFtdfX1mdW5jdGlvbiBhMyhuKXtyZXR1cm4gT1cobixMMSl8fE9XKG4sRDcpfWZ1bmN0aW9uIE9XKG4sdCl7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkodCk/blt0XTpudWxsfWZ1bmN0aW9uIGtXKG4pe3JldHVybiBuJiYobi5oYXNPd25Qcm9wZXJ0eShuTCl8fG4uaGFzT3duUHJvcGVydHkoVTBlKSk/bltuTF06bnVsbH12YXIgaUwsTDE9bXIoeyJcdTAyNzVwcm92Ijptcn0pLG5MPW1yKHsiXHUwMjc1aW5qIjptcn0pLEQ3PW1yKHtuZ0luamVjdGFibGVEZWY6bXJ9KSxVMGU9bXIoe25nSW5qZWN0b3JEZWY6bXJ9KSxkaT0oKCk9PntyZXR1cm4obj1kaXx8KGRpPXt9KSlbbi5EZWZhdWx0PTBdPSJEZWZhdWx0IixuW24uSG9zdD0xXT0iSG9zdCIsbltuLlNlbGY9Ml09IlNlbGYiLG5bbi5Ta2lwU2VsZj00XT0iU2tpcFNlbGYiLG5bbi5PcHRpb25hbD04XT0iT3B0aW9uYWwiLGRpO3ZhciBufSkoKTtmdW5jdGlvbiBrbChuKXtsZXQgdD1pTDtyZXR1cm4gaUw9bix0fWZ1bmN0aW9uIEE3KG4sdCxlKXtsZXQgaT1hMyhuKTtyZXR1cm4gaSYmInJvb3QiPT1pLnByb3ZpZGVkSW4/dm9pZCAwPT09aS52YWx1ZT9pLnZhbHVlPWkuZmFjdG9yeSgpOmkudmFsdWU6ZSZkaS5PcHRpb25hbD9udWxsOnZvaWQgMCE9PXQ/dDp2b2lkIHMzKFRvKG4pKX1mdW5jdGlvbiBaZihuKXtyZXR1cm57dG9TdHJpbmc6bn0udG9TdHJpbmcoKX12YXIgcHg9KCgpPT57cmV0dXJuKG49cHh8fChweD17fSkpW24uT25QdXNoPTBdPSJPblB1c2giLG5bbi5EZWZhdWx0PTFdPSJEZWZhdWx0IixweDt2YXIgbn0pKCksSmE9KCgpPT57cmV0dXJuKG49SmF8fChKYT17fSkpW24uRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixuW24uTm9uZT0yXT0iTm9uZSIsbltuLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIixKYTt2YXIgbn0pKCksdG89KCgpPT50eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiBnbG9iYWw8InUiJiZnbG9iYWx8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmKSgpLEEwPXt9LFFpPVtdLGNUPW1yKHsiXHUwMjc1Y21wIjptcn0pLGwzPW1yKHsiXHUwMjc1ZGlyIjptcn0pLGMzPW1yKHsiXHUwMjc1cGlwZSI6bXJ9KSxJNz1tcih7Ilx1MDI3NW1vZCI6bXJ9KSxOZD1tcih7Ilx1MDI3NWZhYyI6bXJ9KSxoeD1tcih7X19OR19FTEVNRU5UX0lEX186bXJ9KSxqMGU9MDtmdW5jdGlvbiBSKG4pe3JldHVybiBaZigoKT0+e2xldCBlPSEwPT09bi5zdGFuZGFsb25lLGk9e30scj17dHlwZTpuLnR5cGUscHJvdmlkZXJzUmVzb2x2ZXI6bnVsbCxkZWNsczpuLmRlY2xzLHZhcnM6bi52YXJzLGZhY3Rvcnk6bnVsbCx0ZW1wbGF0ZTpuLnRlbXBsYXRlfHxudWxsLGNvbnN0czpuLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3RvcnM6bi5uZ0NvbnRlbnRTZWxlY3RvcnMsaG9zdEJpbmRpbmdzOm4uaG9zdEJpbmRpbmdzfHxudWxsLGhvc3RWYXJzOm4uaG9zdFZhcnN8fDAsaG9zdEF0dHJzOm4uaG9zdEF0dHJzfHxudWxsLGNvbnRlbnRRdWVyaWVzOm4uY29udGVudFF1ZXJpZXN8fG51bGwsZGVjbGFyZWRJbnB1dHM6aSxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsZXhwb3J0QXM6bi5leHBvcnRBc3x8bnVsbCxvblB1c2g6bi5jaGFuZ2VEZXRlY3Rpb249PT1weC5PblB1c2gsZGlyZWN0aXZlRGVmczpudWxsLHBpcGVEZWZzOm51bGwsc3RhbmRhbG9uZTplLGRlcGVuZGVuY2llczplJiZuLmRlcGVuZGVuY2llc3x8bnVsbCxnZXRTdGFuZGFsb25lSW5qZWN0b3I6bnVsbCxzZWxlY3RvcnM6bi5zZWxlY3RvcnN8fFFpLHZpZXdRdWVyeTpuLnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczpuLmZlYXR1cmVzfHxudWxsLGRhdGE6bi5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbnx8SmEuRW11bGF0ZWQsaWQ6ImMiK2owZSsrLHN0eWxlczpuLnN0eWxlc3x8UWksXzpudWxsLHNldElucHV0Om51bGwsc2NoZW1hczpuLnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbH0sbz1uLmRlcGVuZGVuY2llcyxzPW4uZmVhdHVyZXM7cmV0dXJuIHIuaW5wdXRzPU5XKG4uaW5wdXRzLGkpLHIub3V0cHV0cz1OVyhuLm91dHB1dHMpLHMmJnMuZm9yRWFjaChhPT5hKHIpKSxyLmRpcmVjdGl2ZURlZnM9bz8oKT0+KCJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvKS5tYXAoUDcpLmZpbHRlcihGVyk6bnVsbCxyLnBpcGVEZWZzPW8/KCk9PigiZnVuY3Rpb24iPT10eXBlb2Ygbz9vKCk6bykubWFwKExkKS5maWx0ZXIoRlcpOm51bGwscn0pfWZ1bmN0aW9uIE54KG4sdCxlKXtsZXQgaT1uLlx1MDI3NWNtcDtpLmRpcmVjdGl2ZURlZnM9KCk9PigiZnVuY3Rpb24iPT10eXBlb2YgdD90KCk6dCkubWFwKFA3KSxpLnBpcGVEZWZzPSgpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGU/ZSgpOmUpLm1hcChMZCl9ZnVuY3Rpb24gUDcobil7cmV0dXJuIE5sKG4pfHxHZihuKX1mdW5jdGlvbiBGVyhuKXtyZXR1cm4gbnVsbCE9PW59ZnVuY3Rpb24gSChuKXtyZXR1cm4gWmYoKCk9Pih7dHlwZTpuLnR5cGUsYm9vdHN0cmFwOm4uYm9vdHN0cmFwfHxRaSxkZWNsYXJhdGlvbnM6bi5kZWNsYXJhdGlvbnN8fFFpLGltcG9ydHM6bi5pbXBvcnRzfHxRaSxleHBvcnRzOm4uZXhwb3J0c3x8UWksdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVsbCxzY2hlbWFzOm4uc2NoZW1hc3x8bnVsbCxpZDpuLmlkfHxudWxsfSkpfWZ1bmN0aW9uIE5XKG4sdCl7aWYobnVsbD09bilyZXR1cm4gQTA7bGV0IGU9e307Zm9yKGxldCBpIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShpKSl7bGV0IHI9bltpXSxvPXI7QXJyYXkuaXNBcnJheShyKSYmKG89clsxXSxyPXJbMF0pLGVbcl09aSx0JiYodFtyXT1vKX1yZXR1cm4gZX12YXIgSGU9UjtmdW5jdGlvbiBCMChuKXtyZXR1cm57dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsZmFjdG9yeTpudWxsLHB1cmU6ITEhPT1uLnB1cmUsc3RhbmRhbG9uZTohMD09PW4uc3RhbmRhbG9uZSxvbkRlc3Ryb3k6bi50eXBlLnByb3RvdHlwZS5uZ09uRGVzdHJveXx8bnVsbH19ZnVuY3Rpb24gTmwobil7cmV0dXJuIG5bY1RdfHxudWxsfWZ1bmN0aW9uIEdmKG4pe3JldHVybiBuW2wzXXx8bnVsbH1mdW5jdGlvbiBMZChuKXtyZXR1cm4gbltjM118fG51bGx9ZnVuY3Rpb24gUjcobil7bGV0IHQ9Tmwobil8fEdmKG4pfHxMZChuKTtyZXR1cm4gbnVsbCE9PXQmJnQuc3RhbmRhbG9uZX1mdW5jdGlvbiBJMChuLHQpe2xldCBlPW5bSTddfHxudWxsO2lmKCFlJiYhMD09PXQpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7VG8obil9IGRvZXMgbm90IGhhdmUgJ1x1MDI3NW1vZCcgcHJvcGVydHkuYCk7cmV0dXJuIGV9ZnVuY3Rpb24gemYobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2YgblsxXX1mdW5jdGlvbiBWZChuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmITA9PT1uWzFdfWZ1bmN0aW9uIHAzKG4pe3JldHVybiAwIT0oOCZuLmZsYWdzKX1mdW5jdGlvbiBoMyhuKXtyZXR1cm4gMj09KDImbi5mbGFncyl9ZnVuY3Rpb24gZFQobil7cmV0dXJuIDE9PSgxJm4uZmxhZ3MpfWZ1bmN0aW9uIEFjKG4pe3JldHVybiBudWxsIT09bi50ZW1wbGF0ZX1mdW5jdGlvbiBxMGUobil7cmV0dXJuIDAhPSgyNTYmblsyXSl9ZnVuY3Rpb24gV2Yobix0KXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eShOZCk/bltOZF06bnVsbH1mdW5jdGlvbiBGdCgpe3JldHVybiBGN31mdW5jdGlvbiBGNyhuKXtyZXR1cm4gbi50eXBlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcyYmKG4uc2V0SW5wdXQ9WDBlKSxZMGV9ZnVuY3Rpb24gWTBlKCl7bGV0IG49TDcodGhpcyksdD1uPy5jdXJyZW50O2lmKHQpe2xldCBlPW4ucHJldmlvdXM7aWYoZT09PUEwKW4ucHJldmlvdXM9dDtlbHNlIGZvcihsZXQgaSBpbiB0KWVbaV09dFtpXTtuLmN1cnJlbnQ9bnVsbCx0aGlzLm5nT25DaGFuZ2VzKHQpfX1mdW5jdGlvbiBYMGUobix0LGUsaSl7bGV0IHI9TDcobil8fGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5bTjddPXR9KG4se3ByZXZpb3VzOkEwLGN1cnJlbnQ6bnVsbH0pLG89ci5jdXJyZW50fHwoci5jdXJyZW50PXt9KSxzPXIucHJldmlvdXMsYT10aGlzLmRlY2xhcmVkSW5wdXRzW2VdLGw9c1thXTtvW2FdPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5wcmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPWl9aXNGaXJzdENoYW5nZSgpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfX0obCYmbC5jdXJyZW50VmFsdWUsdCxzPT09QTApLG5baV09dH1GdC5uZ0luaGVyaXQ9ITA7dmFyIE43PSJfX25nU2ltcGxlQ2hhbmdlc19fIjtmdW5jdGlvbiBMNyhuKXtyZXR1cm4gbltON118fG51bGx9ZnVuY3Rpb24gJGEobil7Zm9yKDtBcnJheS5pc0FycmF5KG4pOyluPW5bMF07cmV0dXJuIG59ZnVuY3Rpb24gcFQobix0KXtyZXR1cm4gJGEodFtuXSl9ZnVuY3Rpb24gVWwobix0KXtyZXR1cm4gJGEodFtuLmluZGV4XSl9ZnVuY3Rpb24gSDcobix0KXtyZXR1cm4gbi5kYXRhW3RdfWZ1bmN0aW9uIEgwKG4sdCl7cmV0dXJuIG5bdF19ZnVuY3Rpb24gcXAobix0KXtsZXQgZT10W25dO3JldHVybiB6ZihlKT9lOmVbMF19ZnVuY3Rpb24gVTEobil7cmV0dXJuIDY0PT0oNjQmblsyXSl9ZnVuY3Rpb24gVXAobix0KXtyZXR1cm4gbnVsbD09dD9udWxsOm5bdF19ZnVuY3Rpb24gVTcobil7blsxOF09MH1mdW5jdGlvbiBmMyhuLHQpe25bNV0rPXQ7bGV0IGU9bixpPW5bM107Zm9yKDtudWxsIT09aSYmKDE9PT10JiYxPT09ZVs1XXx8LTE9PT10JiYwPT09ZVs1XSk7KWlbNV0rPXQsZT1pLGk9aVszXX12YXIgWm49e2xGcmFtZTpRNyhudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITB9O2Z1bmN0aW9uIHo3KCl7cmV0dXJuIFpuLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBydCgpe3JldHVybiBabi5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gRmkoKXtyZXR1cm4gWm4ubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIG9lKG4pe3JldHVybiBabi5sRnJhbWUuY29udGV4dExWaWV3PW4sbls4XX1mdW5jdGlvbiBzZShuKXtyZXR1cm4gWm4ubEZyYW1lLmNvbnRleHRMVmlldz1udWxsLG59ZnVuY3Rpb24gem8oKXtsZXQgbj1qNygpO2Zvcig7bnVsbCE9PW4mJjY0PT09bi50eXBlOyluPW4ucGFyZW50O3JldHVybiBufWZ1bmN0aW9uIGo3KCl7cmV0dXJuIFpuLmxGcmFtZS5jdXJyZW50VE5vZGV9ZnVuY3Rpb24gd3goKXtsZXQgbj1abi5sRnJhbWUsdD1uLmN1cnJlbnRUTm9kZTtyZXR1cm4gbi5pc1BhcmVudD90OnQucGFyZW50fWZ1bmN0aW9uIE11KG4sdCl7bGV0IGU9Wm4ubEZyYW1lO2UuY3VycmVudFROb2RlPW4sZS5pc1BhcmVudD10fWZ1bmN0aW9uIG0zKCl7cmV0dXJuIFpuLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBnMygpe1puLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBLcygpe2xldCBuPVpuLmxGcmFtZSx0PW4uYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PXQmJih0PW4uYmluZGluZ1Jvb3RJbmRleD1uLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSx0fWZ1bmN0aW9uIEhkKCl7cmV0dXJuIFpuLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gRzcobil7cmV0dXJuIFpuLmxGcmFtZS5iaW5kaW5nSW5kZXg9bn1mdW5jdGlvbiBVMCgpe3JldHVybiBabi5sRnJhbWUuYmluZGluZ0luZGV4Kyt9ZnVuY3Rpb24gVWQobil7bGV0IHQ9Wm4ubEZyYW1lLGU9dC5iaW5kaW5nSW5kZXg7cmV0dXJuIHQuYmluZGluZ0luZGV4PXQuYmluZGluZ0luZGV4K24sZX1mdW5jdGlvbiBXNyhuKXtabi5sRnJhbWUuaW5JMThuPW59ZnVuY3Rpb24gc19lKG4sdCl7bGV0IGU9Wm4ubEZyYW1lO2UuYmluZGluZ0luZGV4PWUuYmluZGluZ1Jvb3RJbmRleD1uLHNMKHQpfWZ1bmN0aW9uIHNMKG4pe1puLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9bn1mdW5jdGlvbiBfMyhuKXtsZXQgdD1abi5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O3JldHVybi0xPT09dD9udWxsOm5bdF19ZnVuY3Rpb24gcTcoKXtyZXR1cm4gWm4ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4fWZ1bmN0aW9uIHYzKG4pe1puLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleD1ufWZ1bmN0aW9uIGxfZShuKXtsZXQgdD1uWzFdO3JldHVybiAyPT09dC50eXBlP3QuZGVjbFROb2RlOjE9PT10LnR5cGU/bls2XTpudWxsfWZ1bmN0aW9uIFk3KG4sdCxlKXtpZihlJmRpLlNraXBTZWxmKXtsZXQgcj10LG89bjtmb3IoOyEocj1yLnBhcmVudCxudWxsIT09cnx8ZSZkaS5Ib3N0fHwocj1sX2UobyksbnVsbD09PXJ8fChvPW9bMTVdLDEwJnIudHlwZSkpKTspO2lmKG51bGw9PT1yKXJldHVybiExO3Q9cixuPW99bGV0IGk9Wm4ubEZyYW1lPVg3KCk7cmV0dXJuIGkuY3VycmVudFROb2RlPXQsaS5sVmlldz1uLCEwfWZ1bmN0aW9uIHkzKG4pe2xldCB0PVg3KCksZT1uWzFdO1puLmxGcmFtZT10LHQuY3VycmVudFROb2RlPWUuZmlyc3RDaGlsZCx0LmxWaWV3PW4sdC50Vmlldz1lLHQuY29udGV4dExWaWV3PW4sdC5iaW5kaW5nSW5kZXg9ZS5iaW5kaW5nU3RhcnRJbmRleCx0LmluSTE4bj0hMX1mdW5jdGlvbiBYNygpe2xldCBuPVpuLmxGcmFtZSx0PW51bGw9PT1uP251bGw6bi5jaGlsZDtyZXR1cm4gbnVsbD09PXQ/UTcobik6dH1mdW5jdGlvbiBRNyhuKXtsZXQgdD17Y3VycmVudFROb2RlOm51bGwsaXNQYXJlbnQ6ITAsbFZpZXc6bnVsbCx0VmlldzpudWxsLHNlbGVjdGVkSW5kZXg6LTEsY29udGV4dExWaWV3Om51bGwsZWxlbWVudERlcHRoQ291bnQ6MCxjdXJyZW50TmFtZXNwYWNlOm51bGwsY3VycmVudERpcmVjdGl2ZUluZGV4Oi0xLGJpbmRpbmdSb290SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLGN1cnJlbnRRdWVyeUluZGV4OjAscGFyZW50Om4sY2hpbGQ6bnVsbCxpbkkxOG46ITF9O3JldHVybiBudWxsIT09biYmKG4uY2hpbGQ9dCksdH1mdW5jdGlvbiBLNygpe2xldCBuPVpuLmxGcmFtZTtyZXR1cm4gWm4ubEZyYW1lPW4ucGFyZW50LG4uY3VycmVudFROb2RlPW51bGwsbi5sVmlldz1udWxsLG59dmFyIFo3PUs3O2Z1bmN0aW9uIGIzKCl7bGV0IG49SzcoKTtuLmlzUGFyZW50PSEwLG4udFZpZXc9bnVsbCxuLnNlbGVjdGVkSW5kZXg9LTEsbi5jb250ZXh0TFZpZXc9bnVsbCxuLmVsZW1lbnREZXB0aENvdW50PTAsbi5jdXJyZW50RGlyZWN0aXZlSW5kZXg9LTEsbi5jdXJyZW50TmFtZXNwYWNlPW51bGwsbi5iaW5kaW5nUm9vdEluZGV4PS0xLG4uYmluZGluZ0luZGV4PS0xLG4uY3VycmVudFF1ZXJ5SW5kZXg9MH1mdW5jdGlvbiBacygpe3JldHVybiBabi5sRnJhbWUuc2VsZWN0ZWRJbmRleH1mdW5jdGlvbiB6cChuKXtabi5sRnJhbWUuc2VsZWN0ZWRJbmRleD1ufWZ1bmN0aW9uIG5vKCl7bGV0IG49Wm4ubEZyYW1lO3JldHVybiBINyhuLnRWaWV3LG4uc2VsZWN0ZWRJbmRleCl9ZnVuY3Rpb24gSW4oKXtabi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT0ic3ZnIn1mdW5jdGlvbiBKcygpe1puLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlPW51bGx9ZnVuY3Rpb24gaFQobix0KXtmb3IobGV0IGU9dC5kaXJlY3RpdmVTdGFydCxpPXQuZGlyZWN0aXZlRW5kO2U8aTtlKyspe2xldCBvPW4uZGF0YVtlXS50eXBlLnByb3RvdHlwZSx7bmdBZnRlckNvbnRlbnRJbml0OnMsbmdBZnRlckNvbnRlbnRDaGVja2VkOmEsbmdBZnRlclZpZXdJbml0OmwsbmdBZnRlclZpZXdDaGVja2VkOmMsbmdPbkRlc3Ryb3k6dX09bztzJiYobi5jb250ZW50SG9va3N8fChuLmNvbnRlbnRIb29rcz1bXSkpLnB1c2goLWUscyksYSYmKChuLmNvbnRlbnRIb29rc3x8KG4uY29udGVudEhvb2tzPVtdKSkucHVzaChlLGEpLChuLmNvbnRlbnRDaGVja0hvb2tzfHwobi5jb250ZW50Q2hlY2tIb29rcz1bXSkpLnB1c2goZSxhKSksbCYmKG4udmlld0hvb2tzfHwobi52aWV3SG9va3M9W10pKS5wdXNoKC1lLGwpLGMmJigobi52aWV3SG9va3N8fChuLnZpZXdIb29rcz1bXSkpLnB1c2goZSxjKSwobi52aWV3Q2hlY2tIb29rc3x8KG4udmlld0NoZWNrSG9va3M9W10pKS5wdXNoKGUsYykpLG51bGwhPXUmJihuLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKSkucHVzaChlLHUpfX1mdW5jdGlvbiBEMShuLHQsZSl7Sjcobix0LDMsZSl9ZnVuY3Rpb24gQTEobix0LGUsaSl7KDMmblsyXSk9PT1lJiZKNyhuLHQsZSxpKX1mdW5jdGlvbiBGTihuLHQpe2xldCBlPW5bMl07KDMmZSk9PT10JiYoZSY9MjA0NyxlKz0xLG5bMl09ZSl9ZnVuY3Rpb24gSjcobix0LGUsaSl7bGV0IG89aT8/LTEscz10Lmxlbmd0aC0xLGE9MDtmb3IobGV0IGw9dm9pZCAwIT09aT82NTUzNSZuWzE4XTowO2w8cztsKyspaWYoIm51bWJlciI9PXR5cGVvZiB0W2wrMV0pe2lmKGE9dFtsXSxudWxsIT1pJiZhPj1pKWJyZWFrfWVsc2UgdFtsXTwwJiYoblsxOF0rPTY1NTM2KSwoYTxvfHwtMT09bykmJihtX2UobixlLHQsbCksblsxOF09KDQyOTQ5MDE3NjAmblsxOF0pK2wrMiksbCsrfWZ1bmN0aW9uIG1fZShuLHQsZSxpKXtsZXQgcj1lW2ldPDAsbz1lW2krMV0sYT1uW3I/LWVbaV06ZVtpXV07aWYocil7aWYoblsyXT4+MTE8blsxOF0+PjE2JiYoMyZuWzJdKT09PXQpe25bMl0rPTIwNDg7dHJ5e28uY2FsbChhKX1maW5hbGx5e319fWVsc2UgdHJ5e28uY2FsbChhKX1maW5hbGx5e319dmFyIHFmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmZhY3Rvcnk9dCx0aGlzLnJlc29sdmluZz0hMSx0aGlzLmNhblNlZVZpZXdQcm92aWRlcnM9ZSx0aGlzLmluamVjdEltcGw9aX19O2Z1bmN0aW9uIHoxKG4sdCxlKXtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aDspe2xldCByPWVbaV07aWYoIm51bWJlciI9PXR5cGVvZiByKXtpZigwIT09cilicmVhaztpKys7bGV0IG89ZVtpKytdLHM9ZVtpKytdLGE9ZVtpKytdO24uc2V0QXR0cmlidXRlKHQscyxhLG8pfWVsc2V7bGV0IG89cixzPWVbKytpXTtiX2Uobyk/bi5zZXRQcm9wZXJ0eSh0LG8scyk6bi5zZXRBdHRyaWJ1dGUodCxvLHMpLGkrK319cmV0dXJuIGl9ZnVuY3Rpb24gJDcobil7cmV0dXJuIDM9PT1ufHw0PT09bnx8Nj09PW59ZnVuY3Rpb24gYl9lKG4pe3JldHVybiA2ND09PW4uY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBqMShuLHQpe2lmKG51bGwhPT10JiYwIT09dC5sZW5ndGgpaWYobnVsbD09PW58fDA9PT1uLmxlbmd0aCluPXQuc2xpY2UoKTtlbHNle2xldCBlPS0xO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtsZXQgcj10W2ldOyJudW1iZXIiPT10eXBlb2Ygcj9lPXI6MD09PWV8fFZXKG4sZSxyLG51bGwsLTE9PT1lfHwyPT09ZT90WysraV06bnVsbCl9fXJldHVybiBufWZ1bmN0aW9uIFZXKG4sdCxlLGkscil7bGV0IG89MCxzPW4ubGVuZ3RoO2lmKC0xPT09dClzPS0xO2Vsc2UgZm9yKDtvPG4ubGVuZ3RoOyl7bGV0IGE9bltvKytdO2lmKCJudW1iZXIiPT10eXBlb2YgYSl7aWYoYT09PXQpe3M9LTE7YnJlYWt9aWYoYT50KXtzPW8tMTticmVha319fWZvcig7bzxuLmxlbmd0aDspe2xldCBhPW5bb107aWYoIm51bWJlciI9PXR5cGVvZiBhKWJyZWFrO2lmKGE9PT1lKXtpZihudWxsPT09aSlyZXR1cm4gdm9pZChudWxsIT09ciYmKG5bbysxXT1yKSk7aWYoaT09PW5bbysxXSlyZXR1cm4gdm9pZChuW28rMl09cil9bysrLG51bGwhPT1pJiZvKyssbnVsbCE9PXImJm8rK30tMSE9PXMmJihuLnNwbGljZShzLDAsdCksbz1zKzEpLG4uc3BsaWNlKG8rKywwLGUpLG51bGwhPT1pJiZuLnNwbGljZShvKyssMCxpKSxudWxsIT09ciYmbi5zcGxpY2UobysrLDAscil9ZnVuY3Rpb24gZTkobil7cmV0dXJuLTEhPT1ufWZ1bmN0aW9uIEcxKG4pe3JldHVybiAzMjc2NyZufWZ1bmN0aW9uIFcxKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4+PjE2fShuKSxpPXQ7Zm9yKDtlPjA7KWk9aVsxNV0sZS0tO3JldHVybiBpfXZhciBhTD0hMDtmdW5jdGlvbiBxMShuKXtsZXQgdD1hTDtyZXR1cm4gYUw9bix0fXZhciBNX2U9MCx4dT17fTtmdW5jdGlvbiBTeChuLHQpe2xldCBlPWk5KG4sdCk7aWYoLTEhPT1lKXJldHVybiBlO2xldCBpPXRbMV07aS5maXJzdENyZWF0ZVBhc3MmJihuLmluamVjdG9ySW5kZXg9dC5sZW5ndGgsTk4oaS5kYXRhLG4pLE5OKHQsbnVsbCksTk4oaS5ibHVlcHJpbnQsbnVsbCkpO2xldCByPUMzKG4sdCksbz1uLmluamVjdG9ySW5kZXg7aWYoZTkocikpe2xldCBzPUcxKHIpLGE9VzEocix0KSxsPWFbMV0uZGF0YTtmb3IobGV0IGM9MDtjPDg7YysrKXRbbytjXT1hW3MrY118bFtzK2NdfXJldHVybiB0W28rOF09cixvfWZ1bmN0aW9uIE5OKG4sdCl7bi5wdXNoKDAsMCwwLDAsMCwwLDAsMCx0KX1mdW5jdGlvbiBpOShuLHQpe3JldHVybi0xPT09bi5pbmplY3RvckluZGV4fHxuLnBhcmVudCYmbi5wYXJlbnQuaW5qZWN0b3JJbmRleD09PW4uaW5qZWN0b3JJbmRleHx8bnVsbD09PXRbbi5pbmplY3RvckluZGV4KzhdPy0xOm4uaW5qZWN0b3JJbmRleH1mdW5jdGlvbiBDMyhuLHQpe2lmKG4ucGFyZW50JiYtMSE9PW4ucGFyZW50LmluamVjdG9ySW5kZXgpcmV0dXJuIG4ucGFyZW50LmluamVjdG9ySW5kZXg7bGV0IGU9MCxpPW51bGwscj10O2Zvcig7bnVsbCE9PXI7KXtpZihpPWw5KHIpLG51bGw9PT1pKXJldHVybi0xO2lmKGUrKyxyPXJbMTVdLC0xIT09aS5pbmplY3RvckluZGV4KXJldHVybiBpLmluamVjdG9ySW5kZXh8ZTw8MTZ9cmV0dXJuLTF9ZnVuY3Rpb24gWTEobix0LGUpeyFmdW5jdGlvbihuLHQsZSl7bGV0IGk7InN0cmluZyI9PXR5cGVvZiBlP2k9ZS5jaGFyQ29kZUF0KDApfHwwOmUuaGFzT3duUHJvcGVydHkoaHgpJiYoaT1lW2h4XSksbnVsbD09aSYmKGk9ZVtoeF09TV9lKyspO2xldCByPTI1NSZpO3QuZGF0YVtuKyhyPj41KV18PTE8PHJ9KG4sdCxlKX1mdW5jdGlvbiByOShuLHQsZSl7aWYoZSZkaS5PcHRpb25hbHx8dm9pZCAwIT09bilyZXR1cm4gbjtzMygpfWZ1bmN0aW9uIG85KG4sdCxlLGkpe2lmKGUmZGkuT3B0aW9uYWwmJnZvaWQgMD09PWkmJihpPW51bGwpLDA9PShlJihkaS5TZWxmfGRpLkhvc3QpKSl7bGV0IHI9bls5XSxvPWtsKHZvaWQgMCk7dHJ5e3JldHVybiByP3IuZ2V0KHQsaSxlJmRpLk9wdGlvbmFsKTpBNyh0LGksZSZkaS5PcHRpb25hbCl9ZmluYWxseXtrbChvKX19cmV0dXJuIHI5KGksMCxlKX1mdW5jdGlvbiBzOShuLHQsZSxpPWRpLkRlZmF1bHQscil7aWYobnVsbCE9PW4pe2lmKDEwMjQmdFsyXSl7bGV0IHM9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1uLHM9dDtmb3IoO251bGwhPT1vJiZudWxsIT09cyYmMTAyNCZzWzJdJiYhKDI1NiZzWzJdKTspe2xldCBhPWE5KG8scyxlLGl8ZGkuU2VsZix4dSk7aWYoYSE9PXh1KXJldHVybiBhO2xldCBsPW8ucGFyZW50O2lmKCFsKXtsZXQgYz1zWzIxXTtpZihjKXtsZXQgdT1jLmdldChlLHh1LGkpO2lmKHUhPT14dSlyZXR1cm4gdX1sPWw5KHMpLHM9c1sxNV19bz1sfXJldHVybiByfShuLHQsZSxpLHh1KTtpZihzIT09eHUpcmV0dXJuIHN9bGV0IG89YTkobix0LGUsaSx4dSk7aWYobyE9PXh1KXJldHVybiBvfXJldHVybiBvOSh0LGUsaSxyKX1mdW5jdGlvbiBhOShuLHQsZSxpLHIpe2xldCBvPWZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbi5jaGFyQ29kZUF0KDApfHwwO2xldCB0PW4uaGFzT3duUHJvcGVydHkoaHgpP25baHhdOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/dD49MD8yNTUmdDpEX2U6dH0oZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG8pe2lmKCFZNyh0LG4saSkpcmV0dXJuIGkmZGkuSG9zdD9yOShyLDAsaSk6bzkodCxlLGkscik7dHJ5e2xldCBzPW8oaSk7aWYobnVsbCE9c3x8aSZkaS5PcHRpb25hbClyZXR1cm4gcztzMygpfWZpbmFsbHl7WjcoKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIG8pe2xldCBzPW51bGwsYT1pOShuLHQpLGw9LTEsYz1pJmRpLkhvc3Q/dFsxNl1bNl06bnVsbDtmb3IoKC0xPT09YXx8aSZkaS5Ta2lwU2VsZikmJihsPS0xPT09YT9DMyhuLHQpOnRbYSs4XSwtMSE9PWwmJlVXKGksITEpPyhzPXRbMV0sYT1HMShsKSx0PVcxKGwsdCkpOmE9LTEpOy0xIT09YTspe2xldCB1PXRbMV07aWYoSFcobyxhLHUuZGF0YSkpe2xldCBkPUVfZShhLHQsZSxzLGksYyk7aWYoZCE9PXh1KXJldHVybiBkfWw9dFthKzhdLC0xIT09bCYmVVcoaSx0WzFdLmRhdGFbYSs4XT09PWMpJiZIVyhvLGEsdCk/KHM9dSxhPUcxKGwpLHQ9VzEobCx0KSk6YT0tMX19cmV0dXJuIHJ9ZnVuY3Rpb24gRV9lKG4sdCxlLGkscixvKXtsZXQgcz10WzFdLGE9cy5kYXRhW24rOF0sdT1JMShhLHMsZSxudWxsPT1pP2gzKGEpJiZhTDppIT1zJiYwIT0oMyZhLnR5cGUpLHImZGkuSG9zdCYmbz09PWEpO3JldHVybiBudWxsIT09dT9CeCh0LHMsdSxhKTp4dX1mdW5jdGlvbiBJMShuLHQsZSxpLHIpe2xldCBvPW4ucHJvdmlkZXJJbmRleGVzLHM9dC5kYXRhLGE9MTA0ODU3NSZvLGw9bi5kaXJlY3RpdmVTdGFydCx1PW8+PjIwLHA9cj9hK3U6bi5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBoPWk/YTphK3U7aDxwO2grKyl7bGV0IGY9c1toXTtpZihoPGwmJmU9PT1mfHxoPj1sJiZmLnR5cGU9PT1lKXJldHVybiBofWlmKHIpe2xldCBoPXNbbF07aWYoaCYmQWMoaCkmJmgudHlwZT09PWUpcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQngobix0LGUsaSl7bGV0IHI9bltlXSxvPXQuZGF0YTtpZihmdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIHFmfShyKSl7bGV0IHM9cjtzLnJlc29sdmluZyYmZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgQXQoLTIwMCxgQ2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBESSBkZXRlY3RlZCBmb3IgJHtufWApfShvMyhvW2VdKSk7bGV0IGE9cTEocy5jYW5TZWVWaWV3UHJvdmlkZXJzKTtzLnJlc29sdmluZz0hMDtsZXQgbD1zLmluamVjdEltcGw/a2wocy5pbmplY3RJbXBsKTpudWxsO1k3KG4saSxkaS5EZWZhdWx0KTt0cnl7cj1uW2VdPXMuZmFjdG9yeSh2b2lkIDAsbyxuLGkpLHQuZmlyc3RDcmVhdGVQYXNzJiZlPj1pLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbihuLHQsZSl7bGV0e25nT25DaGFuZ2VzOmksbmdPbkluaXQ6cixuZ0RvQ2hlY2s6b309dC50eXBlLnByb3RvdHlwZTtpZihpKXtsZXQgcz1GNyh0KTsoZS5wcmVPcmRlckhvb2tzfHwoZS5wcmVPcmRlckhvb2tzPVtdKSkucHVzaChuLHMpLChlLnByZU9yZGVyQ2hlY2tIb29rc3x8KGUucHJlT3JkZXJDaGVja0hvb2tzPVtdKSkucHVzaChuLHMpfXImJihlLnByZU9yZGVySG9va3N8fChlLnByZU9yZGVySG9va3M9W10pKS5wdXNoKDAtbixyKSxvJiYoKGUucHJlT3JkZXJIb29rc3x8KGUucHJlT3JkZXJIb29rcz1bXSkpLnB1c2gobixvKSwoZS5wcmVPcmRlckNoZWNrSG9va3N8fChlLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2gobixvKSl9KGUsb1tlXSx0KX1maW5hbGx5e251bGwhPT1sJiZrbChsKSxxMShhKSxzLnJlc29sdmluZz0hMSxaNygpfX1yZXR1cm4gcn1mdW5jdGlvbiBIVyhuLHQsZSl7cmV0dXJuISEoZVt0KyhuPj41KV0mMTw8bil9ZnVuY3Rpb24gVVcobix0KXtyZXR1cm4hKG4mZGkuU2VsZnx8biZkaS5Ib3N0JiZ0KX12YXIgamY9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl90Tm9kZT10LHRoaXMuX2xWaWV3PWV9Z2V0KHQsZSxpKXtyZXR1cm4gczkodGhpcy5fdE5vZGUsdGhpcy5fbFZpZXcsdCxpLGUpfX07ZnVuY3Rpb24gRF9lKCl7cmV0dXJuIG5ldyBqZih6bygpLHJ0KCkpfWZ1bmN0aW9uIHBpKG4pe3JldHVybiBaZigoKT0+e2xldCB0PW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLGU9dFtOZF18fGxMKHQpLGk9T2JqZWN0LnByb3RvdHlwZSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSkuY29uc3RydWN0b3I7Zm9yKDtyJiZyIT09aTspe2xldCBvPXJbTmRdfHxsTChyKTtpZihvJiZvIT09ZSlyZXR1cm4gbztyPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKX1yZXR1cm4gbz0+bmV3IG99KX1mdW5jdGlvbiBsTChuKXtyZXR1cm4gRTcobik/KCk9PntsZXQgdD1sTChLaShuKSk7cmV0dXJuIHQmJnQoKX06V2Yobil9ZnVuY3Rpb24gbDkobil7bGV0IHQ9blsxXSxlPXQudHlwZTtyZXR1cm4gMj09PWU/dC5kZWNsVE5vZGU6MT09PWU/bls2XTpudWxsfWZ1bmN0aW9uIHZvKG4pe3JldHVybiBmdW5jdGlvbihuLHQpe2lmKCJjbGFzcyI9PT10KXJldHVybiBuLmNsYXNzZXM7aWYoInN0eWxlIj09PXQpcmV0dXJuIG4uc3R5bGVzO2xldCBlPW4uYXR0cnM7aWYoZSl7bGV0IGk9ZS5sZW5ndGgscj0wO2Zvcig7cjxpOyl7bGV0IG89ZVtyXTtpZigkNyhvKSlicmVhaztpZigwPT09bylyKz0yO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBvKWZvcihyKys7cjxpJiYic3RyaW5nIj09dHlwZW9mIGVbcl07KXIrKztlbHNle2lmKG89PT10KXJldHVybiBlW3IrMV07cis9Mn19fXJldHVybiBudWxsfSh6bygpLG4pfXZhciBNMD0iX19hbm5vdGF0aW9uc19fIix3MD0iX19wYXJhbWV0ZXJzX18iLFMwPSJfX3Byb3BfX21ldGFkYXRhX18iO2Z1bmN0aW9uIFZ4KG4sdCxlLGkscil7cmV0dXJuIFpmKCgpPT57bGV0IG89TTModCk7ZnVuY3Rpb24gcyguLi5hKXtpZih0aGlzIGluc3RhbmNlb2YgcylyZXR1cm4gby5jYWxsKHRoaXMsLi4uYSksdGhpcztsZXQgbD1uZXcgcyguLi5hKTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHImJnIodSwuLi5hKSwodS5oYXNPd25Qcm9wZXJ0eShNMCk/dVtNMF06T2JqZWN0LmRlZmluZVByb3BlcnR5KHUsTTAse3ZhbHVlOltdfSlbTTBdKS5wdXNoKGwpLGkmJmkodSksdX19cmV0dXJuIGUmJihzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSkscy5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixzLmFubm90YXRpb25DbHM9cyxzfSl9ZnVuY3Rpb24gTTMobil7cmV0dXJuIGZ1bmN0aW9uKC4uLmUpe2lmKG4pe2xldCBpPW4oLi4uZSk7Zm9yKGxldCByIGluIGkpdGhpc1tyXT1pW3JdfX19ZnVuY3Rpb24gejAobix0LGUpe3JldHVybiBaZigoKT0+e2xldCBpPU0zKHQpO2Z1bmN0aW9uIHIoLi4ubyl7aWYodGhpcyBpbnN0YW5jZW9mIHIpcmV0dXJuIGkuYXBwbHkodGhpcyxvKSx0aGlzO2xldCBzPW5ldyByKC4uLm8pO3JldHVybiBhLmFubm90YXRpb249cyxhO2Z1bmN0aW9uIGEobCxjLHUpe2xldCBkPWwuaGFzT3duUHJvcGVydHkodzApP2xbdzBdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHcwLHt2YWx1ZTpbXX0pW3cwXTtmb3IoO2QubGVuZ3RoPD11OylkLnB1c2gobnVsbCk7cmV0dXJuKGRbdV09ZFt1XXx8W10pLnB1c2gocyksbH19cmV0dXJuIGUmJihyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksci5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixyLmFubm90YXRpb25DbHM9cixyfSl9ZnVuY3Rpb24gWXAobix0LGUsaSl7cmV0dXJuIFpmKCgpPT57bGV0IHI9TTModCk7ZnVuY3Rpb24gbyguLi5zKXtpZih0aGlzIGluc3RhbmNlb2YgbylyZXR1cm4gci5hcHBseSh0aGlzLHMpLHRoaXM7bGV0IGE9bmV3IG8oLi4ucyk7cmV0dXJuIGZ1bmN0aW9uKGMsdSl7bGV0IGQ9Yy5jb25zdHJ1Y3RvcixwPWQuaGFzT3duUHJvcGVydHkoUzApP2RbUzBdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLFMwLHt2YWx1ZTp7fX0pW1MwXTtwW3VdPXAuaGFzT3duUHJvcGVydHkodSkmJnBbdV18fFtdLHBbdV0udW5zaGlmdChhKSxpJiZpKGMsdSwuLi5zKX19cmV0dXJuIGUmJihvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksby5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixvLmFubm90YXRpb25DbHM9byxvfSl9dmFyIElfZT16MCgiQXR0cmlidXRlIixuPT4oe2F0dHJpYnV0ZU5hbWU6bixfX05HX0VMRU1FTlRfSURfXzooKT0+dm8obil9KSkscGU9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9kZXNjPXQsdGhpcy5uZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iLHRoaXMuXHUwMjc1cHJvdj12b2lkIDAsIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuX19OR19FTEVNRU5UX0lEX189ZTp2b2lkIDAhPT1lJiYodGhpcy5cdTAyNzVwcm92PXllKHt0b2tlbjp0aGlzLHByb3ZpZGVkSW46ZS5wcm92aWRlZElufHwicm9vdCIsZmFjdG9yeTplLmZhY3Rvcnl9KSl9Z2V0IG11bHRpKCl7cmV0dXJuIHRoaXN9dG9TdHJpbmcoKXtyZXR1cm5gSW5qZWN0aW9uVG9rZW4gJHt0aGlzLl9kZXNjfWB9fSxSMD0obmV3IHBlKCJBbmFseXplRm9yRW50cnlDb21wb25lbnRzIiksY2xhc3N7fSk7ZnVuY3Rpb24gTGwobil7bGV0IHQ9dG8ubmc7aWYodCYmdC5cdTAyNzVjb21waWxlckZhY2FkZSlyZXR1cm4gdC5cdTAyNzVjb21waWxlckZhY2FkZTt0aHJvdyBuZXcgRXJyb3IoIkpJVCBjb21waWxlciB1bmF2YWlsYWJsZSIpfVlwKCJDb250ZW50Q2hpbGRyZW4iLChuLHQ9e30pPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITEsaXNWaWV3UXVlcnk6ITEsZGVzY2VuZGFudHM6ITEsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ITAsLi4udH0pLFIwKSxZcCgiQ29udGVudENoaWxkIiwobix0PXt9KT0+KHtzZWxlY3RvcjpuLGZpcnN0OiEwLGlzVmlld1F1ZXJ5OiExLGRlc2NlbmRhbnRzOiEwLC4uLnR9KSxSMCksWXAoIlZpZXdDaGlsZHJlbiIsKG4sdD17fSk9Pih7c2VsZWN0b3I6bixmaXJzdDohMSxpc1ZpZXdRdWVyeTohMCxkZXNjZW5kYW50czohMCxlbWl0RGlzdGluY3RDaGFuZ2VzT25seTohMCwuLi50fSksUjApLFlwKCJWaWV3Q2hpbGQiLChuLHQpPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITAsaXNWaWV3UXVlcnk6ITAsZGVzY2VuZGFudHM6ITAsLi4udH0pLFIwKTt2YXIgUF9lPUZ1bmN0aW9uO2Z1bmN0aW9uIHV4KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIEZkKG4sdCl7dm9pZCAwPT09dCYmKHQ9bik7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07QXJyYXkuaXNBcnJheShpKT8odD09PW4mJih0PW4uc2xpY2UoMCxlKSksRmQoaSx0KSk6dCE9PW4mJnQucHVzaChpKX1yZXR1cm4gdH1mdW5jdGlvbiBFeChuLHQpe24uZm9yRWFjaChlPT5BcnJheS5pc0FycmF5KGUpP0V4KGUsdCk6dChlKSl9ZnVuY3Rpb24gdTkobix0LGUpe3Q+PW4ubGVuZ3RoP24ucHVzaChlKTpuLnNwbGljZSh0LDAsZSl9ZnVuY3Rpb24gWDEobix0KXtyZXR1cm4gdD49bi5sZW5ndGgtMT9uLnBvcCgpOm4uc3BsaWNlKHQsMSlbMF19ZnVuY3Rpb24gZngobix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPG47aSsrKWUucHVzaCh0KTtyZXR1cm4gZX1mdW5jdGlvbiBlbChuLHQsZSl7bGV0IGk9SHgobix0KTtyZXR1cm4gaT49MD9uWzF8aV09ZTooaT1+aSxmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uLmxlbmd0aDtpZihyPT10KW4ucHVzaChlLGkpO2Vsc2UgaWYoMT09PXIpbi5wdXNoKGksblswXSksblswXT1lO2Vsc2V7Zm9yKHItLSxuLnB1c2gobltyLTFdLG5bcl0pO3I+dDspbltyXT1uW3ItMl0sci0tO25bdF09ZSxuW3QrMV09aX19KG4saSx0LGUpKSxpfWZ1bmN0aW9uIExOKG4sdCl7bGV0IGU9SHgobix0KTtpZihlPj0wKXJldHVybiBuWzF8ZV19ZnVuY3Rpb24gSHgobix0KXtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPTAscj1uLmxlbmd0aD4+MTtmb3IoO3IhPT1pOyl7bGV0IG89aSsoci1pPj4xKSxzPW5bbzw8MV07aWYodD09PXMpcmV0dXJuIG88PDE7cz50P3I9bzppPW8rMX1yZXR1cm5+KHI8PDEpfShuLHQpfXZhciBGX2U9L15mdW5jdGlvblxzK1xTK1woXClccyp7W1xzXFNdK1wuYXBwbHlcKHRoaXMsXHMqKGFyZ3VtZW50c3woPzpbXigpXStcKFxbXF0sKT9bXigpXStcKGFyZ3VtZW50c1wpLiopXCkvLE5fZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3svLExfZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3tbXHNcU10qY29uc3RydWN0b3JccypcKC8sQl9lPS9eY2xhc3NccytbQS1aYS16XGQkX10qXHMqZXh0ZW5kc1xzK1tee10re1tcc1xTXSpjb25zdHJ1Y3RvclxzKlwoXClccyp7W159XSpzdXBlclwoXC5cLlwuYXJndW1lbnRzXCkvO2Z1bmN0aW9uIEJOKG4pe3JldHVybiBuP24ubWFwKHQ9Pm5ldygwLHQudHlwZS5hbm5vdGF0aW9uQ2xzKSguLi50LmFyZ3M/dC5hcmdzOltdKSk6W119ZnVuY3Rpb24gQzEobil7bGV0IHQ9bi5wcm90b3R5cGU/T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKTpudWxsO3JldHVybih0P3QuY29uc3RydWN0b3I6bnVsbCl8fE9iamVjdH12YXIgbXgsVHg9e30sdUw9Il9fTkdfRElfRkxBR19fIixRMT0ibmdUZW1wVG9rZW5QYXRoIix6X2U9L1xuL2dtLHpXPSJfX3NvdXJjZSI7ZnVuY3Rpb24geDAobil7bGV0IHQ9bXg7cmV0dXJuIG14PW4sdH1mdW5jdGlvbiBHX2Uobix0PWRpLkRlZmF1bHQpe2lmKHZvaWQgMD09PW14KXRocm93IG5ldyBBdCgtMjAzLCExKTtyZXR1cm4gbnVsbD09PW14P0E3KG4sdm9pZCAwLHQpOm14LmdldChuLHQmZGkuT3B0aW9uYWw/bnVsbDp2b2lkIDAsdCl9ZnVuY3Rpb24gaihuLHQ9ZGkuRGVmYXVsdCl7cmV0dXJuKGlMfHxHX2UpKEtpKG4pLHQpfWZ1bmN0aW9uIGQ5KG4pe3Rocm93IG5ldyBBdCgyMDIsITEpfWZ1bmN0aW9uIGpvKG4sdD1kaS5EZWZhdWx0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQmJih0PTB8KHQub3B0aW9uYWwmJjgpfCh0Lmhvc3QmJjEpfCh0LnNlbGYmJjIpfCh0LnNraXBTZWxmJiY0KSksaihuLHQpfWZ1bmN0aW9uIGRMKG4pe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1LaShuW2VdKTtpZihBcnJheS5pc0FycmF5KGkpKXtpZigwPT09aS5sZW5ndGgpdGhyb3cgbmV3IEF0KDkwMCwhMSk7bGV0IHIsbz1kaS5EZWZhdWx0O2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgYT1pW3NdLGw9V19lKGEpOyJudW1iZXIiPT10eXBlb2YgbD8tMT09PWw/cj1hLnRva2VuOm98PWw6cj1hfXQucHVzaChqKHIsbykpfWVsc2UgdC5wdXNoKGooaSkpfXJldHVybiB0fWZ1bmN0aW9uIFV4KG4sdCl7cmV0dXJuIG5bdUxdPXQsbi5wcm90b3R5cGVbdUxdPXQsbn1mdW5jdGlvbiBXX2Uobil7cmV0dXJuIG5bdUxdfXZhciBqMD1VeCh6MCgiSW5qZWN0IixuPT4oe3Rva2VuOm59KSksLTEpLG5zPVV4KHowKCJPcHRpb25hbCIpLDgpLHczPVV4KHowKCJTZWxmIiksMiksdGw9VXgoejAoIlNraXBTZWxmIiksNCksWF9lPVV4KHowKCJIb3N0IiksMSksalc9bnVsbDtmdW5jdGlvbiBTMygpe3JldHVybiBqVz1qV3x8bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlZmxlY3Q9dHx8dG8uUmVmbGVjdH1mYWN0b3J5KHQpe3JldHVybiguLi5lKT0+bmV3IHQoLi4uZSl9X3ppcFR5cGVzQW5kQW5ub3RhdGlvbnModCxlKXtsZXQgaTtpPWZ4KHR5cGVvZiB0PiJ1Ij9lLmxlbmd0aDp0Lmxlbmd0aCk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXT10eXBlb2YgdD4idSI/W106dFtyXSYmdFtyXSE9T2JqZWN0P1t0W3JdXTpbXSxlJiZudWxsIT1lW3JdJiYoaVtyXT1pW3JdLmNvbmNhdChlW3JdKSk7cmV0dXJuIGl9X293blBhcmFtZXRlcnModCxlKXtsZXQgaT10LnRvU3RyaW5nKCk7aWYoRl9lLnRlc3Qobj1pKXx8Ql9lLnRlc3Qobil8fE5fZS50ZXN0KG4pJiYhTF9lLnRlc3QobikpcmV0dXJuIG51bGw7dmFyIG47aWYodC5wYXJhbWV0ZXJzJiZ0LnBhcmFtZXRlcnMhPT1lLnBhcmFtZXRlcnMpcmV0dXJuIHQucGFyYW1ldGVycztsZXQgcj10LmN0b3JQYXJhbWV0ZXJzO2lmKHImJnIhPT1lLmN0b3JQYXJhbWV0ZXJzKXtsZXQgYT0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yKCk6cixsPWEubWFwKHU9PnUmJnUudHlwZSksYz1hLm1hcCh1PT51JiZCTih1LmRlY29yYXRvcnMpKTtyZXR1cm4gdGhpcy5femlwVHlwZXNBbmRBbm5vdGF0aW9ucyhsLGMpfWxldCBvPXQuaGFzT3duUHJvcGVydHkodzApJiZ0W3cwXSxzPXRoaXMuX3JlZmxlY3QmJnRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEmJnRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEoImRlc2lnbjpwYXJhbXR5cGVzIix0KTtyZXR1cm4gc3x8bz90aGlzLl96aXBUeXBlc0FuZEFubm90YXRpb25zKHMsbyk6ZngodC5sZW5ndGgpfXBhcmFtZXRlcnModCl7aWYoIXV4KHQpKXJldHVybltdO2xldCBlPUMxKHQpLGk9dGhpcy5fb3duUGFyYW1ldGVycyh0LGUpO3JldHVybiFpJiZlIT09T2JqZWN0JiYoaT10aGlzLnBhcmFtZXRlcnMoZSkpLGl8fFtdfV9vd25Bbm5vdGF0aW9ucyh0LGUpe2lmKHQuYW5ub3RhdGlvbnMmJnQuYW5ub3RhdGlvbnMhPT1lLmFubm90YXRpb25zKXtsZXQgaT10LmFubm90YXRpb25zO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZpLmFubm90YXRpb25zJiYoaT1pLmFubm90YXRpb25zKSxpfXJldHVybiB0LmRlY29yYXRvcnMmJnQuZGVjb3JhdG9ycyE9PWUuZGVjb3JhdG9ycz9CTih0LmRlY29yYXRvcnMpOnQuaGFzT3duUHJvcGVydHkoTTApP3RbTTBdOm51bGx9YW5ub3RhdGlvbnModCl7aWYoIXV4KHQpKXJldHVybltdO2xldCBlPUMxKHQpLGk9dGhpcy5fb3duQW5ub3RhdGlvbnModCxlKXx8W107cmV0dXJuKGUhPT1PYmplY3Q/dGhpcy5hbm5vdGF0aW9ucyhlKTpbXSkuY29uY2F0KGkpfV9vd25Qcm9wTWV0YWRhdGEodCxlKXtpZih0LnByb3BNZXRhZGF0YSYmdC5wcm9wTWV0YWRhdGEhPT1lLnByb3BNZXRhZGF0YSl7bGV0IGk9dC5wcm9wTWV0YWRhdGE7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGkmJmkucHJvcE1ldGFkYXRhJiYoaT1pLnByb3BNZXRhZGF0YSksaX1pZih0LnByb3BEZWNvcmF0b3JzJiZ0LnByb3BEZWNvcmF0b3JzIT09ZS5wcm9wRGVjb3JhdG9ycyl7bGV0IGk9dC5wcm9wRGVjb3JhdG9ycyxyPXt9O3JldHVybiBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKG89PntyW29dPUJOKGlbb10pfSkscn1yZXR1cm4gdC5oYXNPd25Qcm9wZXJ0eShTMCk/dFtTMF06bnVsbH1wcm9wTWV0YWRhdGEodCl7aWYoIXV4KHQpKXJldHVybnt9O2xldCBlPUMxKHQpLGk9e307aWYoZSE9PU9iamVjdCl7bGV0IG89dGhpcy5wcm9wTWV0YWRhdGEoZSk7T2JqZWN0LmtleXMobykuZm9yRWFjaChzPT57aVtzXT1vW3NdfSl9bGV0IHI9dGhpcy5fb3duUHJvcE1ldGFkYXRhKHQsZSk7cmV0dXJuIHImJk9iamVjdC5rZXlzKHIpLmZvckVhY2gobz0+e2xldCBzPVtdO2kuaGFzT3duUHJvcGVydHkobykmJnMucHVzaCguLi5pW29dKSxzLnB1c2goLi4ucltvXSksaVtvXT1zfSksaX1vd25Qcm9wTWV0YWRhdGEodCl7cmV0dXJuIHV4KHQpJiZ0aGlzLl9vd25Qcm9wTWV0YWRhdGEodCxDMSh0KSl8fHt9fWhhc0xpZmVjeWNsZUhvb2sodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIFBfZSYmZSBpbiB0LnByb3RvdHlwZX19fWZ1bmN0aW9uIGZUKG4pe3JldHVybiBwOShTMygpLnBhcmFtZXRlcnMobikpfWZ1bmN0aW9uIHA5KG4pe3JldHVybiBuLm1hcCh0PT5mdW5jdGlvbihuKXtsZXQgdD17dG9rZW46bnVsbCxhdHRyaWJ1dGU6bnVsbCxob3N0OiExLG9wdGlvbmFsOiExLHNlbGY6ITEsc2tpcFNlbGY6ITF9O2lmKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjApZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07aWYodm9pZCAwPT09aSljb250aW51ZTtsZXQgcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaSk7aWYoaSBpbnN0YW5jZW9mIG5zfHwiT3B0aW9uYWwiPT09ci5uZ01ldGFkYXRhTmFtZSl0Lm9wdGlvbmFsPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIHRsfHwiU2tpcFNlbGYiPT09ci5uZ01ldGFkYXRhTmFtZSl0LnNraXBTZWxmPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIHczfHwiU2VsZiI9PT1yLm5nTWV0YWRhdGFOYW1lKXQuc2VsZj0hMDtlbHNlIGlmKGkgaW5zdGFuY2VvZiBYX2V8fCJIb3N0Ij09PXIubmdNZXRhZGF0YU5hbWUpdC5ob3N0PSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGowKXQudG9rZW49aS50b2tlbjtlbHNlIGlmKGkgaW5zdGFuY2VvZiBJX2Upe2lmKHZvaWQgMD09PWkuYXR0cmlidXRlTmFtZSl0aHJvdyBuZXcgQXQoMjA0LCExKTt0LmF0dHJpYnV0ZT1pLmF0dHJpYnV0ZU5hbWV9ZWxzZSB0LnRva2VuPWl9ZWxzZSB0LnRva2VuPXZvaWQgMD09PW58fEFycmF5LmlzQXJyYXkobikmJjA9PT1uLmxlbmd0aD9udWxsOm47cmV0dXJuIHR9KHQpKX12YXIgRHg9bmV3IE1hcCxoOT1uZXcgU2V0O2Z1bmN0aW9uIGY5KG4pe3JldHVybiEhKG4udGVtcGxhdGVVcmwmJiFuLmhhc093blByb3BlcnR5KCJ0ZW1wbGF0ZSIpfHxuLnN0eWxlVXJscyYmbi5zdHlsZVVybHMubGVuZ3RoKX12YXIgcEwsTTEsdzEsR1c9bmV3IE1hcDtmdW5jdGlvbiBtOShuLHQpeyhmdW5jdGlvbihuLHQsZSl7aWYodCYmdCE9PWUpdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgbW9kdWxlIHJlZ2lzdGVyZWQgZm9yICR7bn0gLSAke1RvKHQpfSB2cyAke1RvKHQubmFtZSl9YCl9KSh0LEdXLmdldCh0KXx8bnVsbCxuKSxHVy5zZXQodCxuKX1mdW5jdGlvbiBfOSgpe3JldHVybiB2b2lkIDAhPT1wTD9wTDp0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50OnZvaWQgMH1mdW5jdGlvbiB2OSgpe2lmKHZvaWQgMD09PU0xJiYoTTE9bnVsbCx0by50cnVzdGVkVHlwZXMpKXRyeXtNMT10by50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyIix7Y3JlYXRlSFRNTDpuPT5uLGNyZWF0ZVNjcmlwdDpuPT5uLGNyZWF0ZVNjcmlwdFVSTDpuPT5ufSl9Y2F0Y2h7fXJldHVybiBNMX1mdW5jdGlvbiBPMChuKXtyZXR1cm4gdjkoKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiBFMygpe2lmKHZvaWQgMD09PXcxJiYodzE9bnVsbCx0by50cnVzdGVkVHlwZXMpKXRyeXt3MT10by50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI3Vuc2FmZS1ieXBhc3MiLHtjcmVhdGVIVE1MOm49Pm4sY3JlYXRlU2NyaXB0Om49Pm4sY3JlYXRlU2NyaXB0VVJMOm49Pm59KX1jYXRjaHt9cmV0dXJuIHcxfWZ1bmN0aW9uIFdXKG4pe3JldHVybiBFMygpPy5jcmVhdGVIVE1MKG4pfHxufWZ1bmN0aW9uIHFXKG4pe3JldHVybiBFMygpPy5jcmVhdGVTY3JpcHQobil8fG59ZnVuY3Rpb24gWVcobil7cmV0dXJuIEUzKCk/LmNyZWF0ZVNjcmlwdFVSTChuKXx8bn12YXIgQmQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5PXR9dG9TdHJpbmcoKXtyZXR1cm5gU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogJHt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHl9IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcylgfX0saEw9Y2xhc3MgZXh0ZW5kcyBCZHtnZXRUeXBlTmFtZSgpe3JldHVybiJIVE1MIn19LGZMPWNsYXNzIGV4dGVuZHMgQmR7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iU3R5bGUifX0sbUw9Y2xhc3MgZXh0ZW5kcyBCZHtnZXRUeXBlTmFtZSgpe3JldHVybiJTY3JpcHQifX0sZ0w9Y2xhc3MgZXh0ZW5kcyBCZHtnZXRUeXBlTmFtZSgpe3JldHVybiJVUkwifX0sX0w9Y2xhc3MgZXh0ZW5kcyBCZHtnZXRUeXBlTmFtZSgpe3JldHVybiJSZXNvdXJjZVVSTCJ9fTtmdW5jdGlvbiBUYShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEJkP24uY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTpufWZ1bmN0aW9uIFBjKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBCZCYmbi5nZXRUeXBlTmFtZSgpfHxudWxsfShuKTtpZihudWxsIT1lJiZlIT09dCl7aWYoIlJlc291cmNlVVJMIj09PWUmJiJVUkwiPT09dClyZXR1cm4hMDt0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGEgc2FmZSAke3R9LCBnb3QgYSAke2V9IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcylgKX1yZXR1cm4gZT09PXR9ZnVuY3Rpb24gdzkobil7bGV0IHQ9bmV3IHlMKG4pO3JldHVybiBmdW5jdGlvbigpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE8wKCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyB2TCh0KTp0fXZhciB2TD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXI9dH1nZXRJbmVydEJvZHlFbGVtZW50KHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0O3RyeXtsZXQgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhPMCh0KSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWU/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQodCk6KGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSxlKX1jYXRjaHtyZXR1cm4gbnVsbH19fSx5TD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLmRlZmF1bHREb2M9dCx0aGlzLmluZXJ0RG9jdW1lbnQ9dGhpcy5kZWZhdWx0RG9jLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgic2FuaXRpemF0aW9uLWluZXJ0IiksbnVsbD09dGhpcy5pbmVydERvY3VtZW50LmJvZHkpe2xldCBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJodG1sIik7dGhpcy5pbmVydERvY3VtZW50LmFwcGVuZENoaWxkKGUpO2xldCBpPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7ZS5hcHBlbmRDaGlsZChpKX19Z2V0SW5lcnRCb2R5RWxlbWVudCh0KXtsZXQgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtpZigiY29udGVudCJpbiBlKXJldHVybiBlLmlubmVySFRNTD1PMCh0KSxlO2xldCBpPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7cmV0dXJuIGkuaW5uZXJIVE1MPU8wKHQpLHRoaXMuZGVmYXVsdERvYy5kb2N1bWVudE1vZGUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKGkpLGl9c3RyaXBDdXN0b21Oc0F0dHJzKHQpe2xldCBlPXQuYXR0cmlidXRlcztmb3IobGV0IHI9ZS5sZW5ndGgtMTswPHI7ci0tKXtsZXQgcz1lLml0ZW0ocikubmFtZTsoInhtbG5zOm5zMSI9PT1zfHwwPT09cy5pbmRleE9mKCJuczE6IikpJiZ0LnJlbW92ZUF0dHJpYnV0ZShzKX1sZXQgaT10LmZpcnN0Q2hpbGQ7Zm9yKDtpOylpLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKGkpLGk9aS5uZXh0U2libGluZ319LGF2ZT0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZGF0YXxmdHB8dGVsfGZpbGV8c21zKTp8W14mOi8/I10qKD86Wy8/I118JCkpL2dpO2Z1bmN0aW9uIHp4KG4pe3JldHVybihuPVN0cmluZyhuKSkubWF0Y2goYXZlKT9uOiJ1bnNhZmU6IitufWZ1bmN0aW9uIHpkKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBvZiBuLnNwbGl0KCIsIikpdFtlXT0hMDtyZXR1cm4gdH1mdW5jdGlvbiBqeCguLi5uKXtsZXQgdD17fTtmb3IobGV0IGUgb2Ygbilmb3IobGV0IGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYodFtpXT0hMCk7cmV0dXJuIHR9dmFyIFMxLFM5PXpkKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksRTk9emQoImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxUOT16ZCgicnAscnQiKSxsdmU9angoVDksRTkpLGN2ZT1qeChFOSx6ZCgiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJsb2NrcXVvdGUsY2FwdGlvbixjZW50ZXIsZGVsLGRldGFpbHMsZGlhbG9nLGRpcixkaXYsZGwsZmlndXJlLGZpZ2NhcHRpb24sZm9vdGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWRlcixoZ3JvdXAsaHIsaW5zLG1haW4sbWFwLG1lbnUsbmF2LG9sLHByZSxzZWN0aW9uLHN1bW1hcnksdGFibGUsdWwiKSksdXZlPWp4KFQ5LHpkKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksYkw9angoUzksY3ZlLHV2ZSxsdmUpLFQzPXpkKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxkdmU9emQoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLHB2ZT16ZCgiYXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEtZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFyaWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25seSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFsdWVub3csYXJpYS12YWx1ZXRleHQiKSxEOT1qeChUMyxkdmUscHZlKSxodmU9emQoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpLGZ2ZT0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csbXZlPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBYVyhuKXtyZXR1cm4gbi5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShmdmUsZnVuY3Rpb24odCl7cmV0dXJuIiYjIisoMTAyNCoodC5jaGFyQ29kZUF0KDApLTU1Mjk2KSsodC5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFjZShtdmUsZnVuY3Rpb24odCl7cmV0dXJuIiYjIit0LmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9ZnVuY3Rpb24gRDMobix0KXtsZXQgZT1udWxsO3RyeXtTMT1TMXx8dzkobik7bGV0IGk9dD9TdHJpbmcodCk6IiI7ZT1TMS5nZXRJbmVydEJvZHlFbGVtZW50KGkpO2xldCByPTUsbz1pO2Rve2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtyLS0saT1vLG89ZS5pbm5lckhUTUwsZT1TMS5nZXRJbmVydEJvZHlFbGVtZW50KGkpfXdoaWxlKGkhPT1vKTtsZXQgYT0obmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119c2FuaXRpemVDaGlsZHJlbih0KXtsZXQgZT10LmZpcnN0Q2hpbGQsaT0hMDtmb3IoO2U7KWlmKGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERT9pPXRoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxpJiZlLmZpcnN0Q2hpbGQpZT1lLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTtsZXQgcj10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUubmV4dFNpYmxpbmcpO2lmKHIpe2U9cjticmVha31lPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9c3RhcnRFbGVtZW50KHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZighYkwuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLCFodmUuaGFzT3duUHJvcGVydHkoZSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goZSk7bGV0IGk9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKXtsZXQgbz1pLml0ZW0ocikscz1vLm5hbWUsYT1zLnRvTG93ZXJDYXNlKCk7aWYoIUQ5Lmhhc093blByb3BlcnR5KGEpKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMDtjb250aW51ZX1sZXQgbD1vLnZhbHVlO1QzW2FdJiYobD16eChsKSksdGhpcy5idWYucHVzaCgiICIscywnPSInLFhXKGwpLCciJyl9cmV0dXJuIHRoaXMuYnVmLnB1c2goIj4iKSwhMH1lbmRFbGVtZW50KHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtiTC5oYXNPd25Qcm9wZXJ0eShlKSYmIVM5Lmhhc093blByb3BlcnR5KGUpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5wdXNoKGUpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnModCl7dGhpcy5idWYucHVzaChYVyh0KSl9Y2hlY2tDbG9iYmVyZWRFbGVtZW50KHQsZSl7aWYoZSYmKHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHt0Lm91dGVySFRNTH1gKTtyZXR1cm4gZX19KS5zYW5pdGl6ZUNoaWxkcmVuKENMKGUpfHxlKTtyZXR1cm4gTzAoYSl9ZmluYWxseXtpZihlKXtsZXQgaT1DTChlKXx8ZTtmb3IoO2kuZmlyc3RDaGlsZDspaS5yZW1vdmVDaGlsZChpLmZpcnN0Q2hpbGQpfX19ZnVuY3Rpb24gQ0wobil7cmV0dXJuImNvbnRlbnQiaW4gbiYmZnVuY3Rpb24obil7cmV0dXJuIG4ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PW4ubm9kZU5hbWV9KG4pP24uY29udGVudDpudWxsfXZhciBtbz0oKCk9PntyZXR1cm4obj1tb3x8KG1vPXt9KSlbbi5OT05FPTBdPSJOT05FIixuW24uSFRNTD0xXT0iSFRNTCIsbltuLlNUWUxFPTJdPSJTVFlMRSIsbltuLlNDUklQVD0zXT0iU0NSSVBUIixuW24uVVJMPTRdPSJVUkwiLG5bbi5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsbW87dmFyIG59KSgpO2Z1bmN0aW9uIEEzKG4pe2xldCB0PUd4KCk7cmV0dXJuIHQ/V1codC5zYW5pdGl6ZShtby5IVE1MLG4pfHwiIik6UGMobiwiSFRNTCIpP1dXKFRhKG4pKTpEMyhfOSgpLEtuKG4pKX1mdW5jdGlvbiB6bChuKXtsZXQgdD1HeCgpO3JldHVybiB0P3Quc2FuaXRpemUobW8uVVJMLG4pfHwiIjpQYyhuLCJVUkwiKT9UYShuKTp6eChLbihuKSl9ZnVuY3Rpb24gQTkobil7bGV0IHQ9R3goKTtpZih0KXJldHVybiBZVyh0LnNhbml0aXplKG1vLlJFU09VUkNFX1VSTCxuKXx8IiIpO2lmKFBjKG4sIlJlc291cmNlVVJMIikpcmV0dXJuIFlXKFRhKG4pKTt0aHJvdyBuZXcgQXQoOTA0LCExKX1mdW5jdGlvbiBHeCgpe2xldCBuPXJ0KCk7cmV0dXJuIG4mJm5bMTJdfXZhciBtVD1uZXcgcGUoIkVOVklST05NRU5UX0lOSVRJQUxJWkVSIiksSTk9bmV3IHBlKCJJTkpFQ1RPUiIsLTEpLFA5PW5ldyBwZSgiSU5KRUNUT1JfREVGX1RZUEVTIiksSzE9Y2xhc3N7Z2V0KHQsZT1UeCl7aWYoZT09PVR4KXtsZXQgaT1uZXcgRXJyb3IoYE51bGxJbmplY3RvckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtUbyh0KX0hYCk7dGhyb3cgaS5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsaX1yZXR1cm4gZX19O2Z1bmN0aW9uIE12ZSguLi5uKXtyZXR1cm57Ilx1MDI3NXByb3ZpZGVycyI6UjkoMCxuKX19ZnVuY3Rpb24gUjkobiwuLi50KXtsZXQgcixlPVtdLGk9bmV3IFNldDtyZXR1cm4gRXgodCxvPT57bGV0IHM9bztNTChzLGUsW10saSkmJihyfHwocj1bXSksci5wdXNoKHMpKX0pLHZvaWQgMCE9PXImJk85KHIsZSksZX1mdW5jdGlvbiBPOShuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXR7cHJvdmlkZXJzOnJ9PW5bZV07RXgocixvPT57dC5wdXNoKG8pfSl9fWZ1bmN0aW9uIE1MKG4sdCxlLGkpe2lmKCEobj1LaShuKSkpcmV0dXJuITE7bGV0IHI9bnVsbCxvPWtXKG4pLHM9IW8mJk5sKG4pO2lmKG98fHMpe2lmKHMmJiFzLnN0YW5kYWxvbmUpcmV0dXJuITE7cj1ufWVsc2V7bGV0IGw9bi5uZ01vZHVsZTtpZihvPWtXKGwpLCFvKXJldHVybiExO3I9bH1sZXQgYT1pLmhhcyhyKTtpZihzKXtpZihhKXJldHVybiExO2lmKGkuYWRkKHIpLHMuZGVwZW5kZW5jaWVzKXtsZXQgbD0iZnVuY3Rpb24iPT10eXBlb2Ygcy5kZXBlbmRlbmNpZXM/cy5kZXBlbmRlbmNpZXMoKTpzLmRlcGVuZGVuY2llcztmb3IobGV0IGMgb2YgbClNTChjLHQsZSxpKX19ZWxzZXtpZighbylyZXR1cm4hMTt7aWYobnVsbCE9by5pbXBvcnRzJiYhYSl7bGV0IGM7aS5hZGQocik7dHJ5e0V4KG8uaW1wb3J0cyx1PT57TUwodSx0LGUsaSkmJihjfHwoYz1bXSksYy5wdXNoKHUpKX0pfWZpbmFsbHl7fXZvaWQgMCE9PWMmJk85KGMsdCl9aWYoIWEpe2xldCBjPVdmKHIpfHwoKCk9Pm5ldyByKTt0LnB1c2goe3Byb3ZpZGU6cix1c2VGYWN0b3J5OmMsZGVwczpRaX0se3Byb3ZpZGU6UDksdXNlVmFsdWU6cixtdWx0aTohMH0se3Byb3ZpZGU6bVQsdXNlVmFsdWU6KCk9PmoociksbXVsdGk6ITB9KX1sZXQgbD1vLnByb3ZpZGVycztudWxsPT1sfHxhfHxFeChsLHU9Pnt0LnB1c2godSl9KX19cmV0dXJuIHIhPT1uJiZ2b2lkIDAhPT1uLnByb3ZpZGVyc312YXIgd3ZlPW1yKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTptcn0pO2Z1bmN0aW9uIGs5KG4pe3JldHVybiBudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBuJiZ3dmUgaW4gbn1mdW5jdGlvbiBrMChuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn12YXIgVk4sZ1Q9bmV3IHBlKCJTZXQgSW5qZWN0b3Igc2NvcGUuIiksUDE9e30sRHZlPXt9O2Z1bmN0aW9uIEkzKCl7cmV0dXJuIHZvaWQgMD09PVZOJiYoVk49bmV3IEsxKSxWTn12YXIganA9Y2xhc3N7fSxaMT1jbGFzcyBleHRlbmRzIGpwe2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSx0aGlzLnNvdXJjZT1pLHRoaXMuc2NvcGVzPXIsdGhpcy5yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbmdPbkRlc3Ryb3lIb29rcz1uZXcgU2V0LHRoaXMuX29uRGVzdHJveUhvb2tzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSxTTCh0LHM9PnRoaXMucHJvY2Vzc1Byb3ZpZGVyKHMpKSx0aGlzLnJlY29yZHMuc2V0KEk5LEUwKHZvaWQgMCx0aGlzKSksci5oYXMoImVudmlyb25tZW50IikmJnRoaXMucmVjb3Jkcy5zZXQoanAsRTAodm9pZCAwLHRoaXMpKTtsZXQgbz10aGlzLnJlY29yZHMuZ2V0KGdUKTtudWxsIT1vJiYic3RyaW5nIj09dHlwZW9mIG8udmFsdWUmJnRoaXMuc2NvcGVzLmFkZChvLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChQOS5tdWx0aSxRaSxkaS5TZWxmKSl9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVzdHJveWVkPSEwO3RyeXtmb3IobGV0IHQgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcyl0Lm5nT25EZXN0cm95KCk7Zm9yKGxldCB0IG9mIHRoaXMuX29uRGVzdHJveUhvb2tzKXQoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5sZW5ndGg9MH19b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUhvb2tzLnB1c2godCl9cnVuSW5Db250ZXh0KHQpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7bGV0IGU9eDAodGhpcyksaT1rbCh2b2lkIDApO3RyeXtyZXR1cm4gdCgpfWZpbmFsbHl7eDAoZSksa2woaSl9fWdldCh0LGU9VHgsaT1kaS5EZWZhdWx0KXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpO2xldCByPXgwKHRoaXMpLG89a2wodm9pZCAwKTt0cnl7aWYoIShpJmRpLlNraXBTZWxmKSl7bGV0IGE9dGhpcy5yZWNvcmRzLmdldCh0KTtpZih2b2lkIDA9PT1hKXtsZXQgbD0oImZ1bmN0aW9uIj09dHlwZW9mKG49dCl8fCJvYmplY3QiPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIHBlKSYmYTModCk7YT1sJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKGwpP0UwKHdMKHQpLFAxKTpudWxsLHRoaXMucmVjb3Jkcy5zZXQodCxhKX1pZihudWxsIT1hKXJldHVybiB0aGlzLmh5ZHJhdGUodCxhKX1yZXR1cm4oaSZkaS5TZWxmP0kzKCk6dGhpcy5wYXJlbnQpLmdldCh0LGU9aSZkaS5PcHRpb25hbCYmZT09PVR4P251bGw6ZSl9Y2F0Y2gocyl7aWYoIk51bGxJbmplY3RvckVycm9yIj09PXMubmFtZSl7aWYoKHNbUTFdPXNbUTFdfHxbXSkudW5zaGlmdChUbyh0KSkscil0aHJvdyBzO3JldHVybiBmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uW1ExXTt0aHJvdyB0W3pXXSYmci51bnNoaWZ0KHRbelddKSxuLm1lc3NhZ2U9ZnVuY3Rpb24obix0LGUsaT1udWxsKXtuPW4mJiJcbiI9PT1uLmNoYXJBdCgwKSYmIlx1MDI3NSI9PW4uY2hhckF0KDEpP24uc2xpY2UoMik6bjtsZXQgcj1Ubyh0KTtpZihBcnJheS5pc0FycmF5KHQpKXI9dC5tYXAoVG8pLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgdCl7bGV0IG89W107Zm9yKGxldCBzIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShzKSl7bGV0IGE9dFtzXTtvLnB1c2gocysiOiIrKCJzdHJpbmciPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTpUbyhhKSkpfXI9YHske28uam9pbigiLCAiKX19YH1yZXR1cm5gJHtlfSR7aT8iKCIraSsiKSI6IiJ9WyR7cn1dOiAke24ucmVwbGFjZSh6X2UsIlxuICAiKX1gfSgiXG4iK24ubWVzc2FnZSxyLGUsaSksbi5uZ1Rva2VuUGF0aD1yLG5bUTFdPW51bGwsbn0ocyx0LCJSM0luamVjdG9yRXJyb3IiLHRoaXMuc291cmNlKX10aHJvdyBzfWZpbmFsbHl7a2wobykseDAocil9dmFyIG59cmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl7bGV0IHQ9eDAodGhpcyksZT1rbCh2b2lkIDApO3RyeXtsZXQgaT10aGlzLmdldChtVC5tdWx0aSxRaSxkaS5TZWxmKTtmb3IobGV0IHIgb2YgaSlyKCl9ZmluYWxseXt4MCh0KSxrbChlKX19dG9TdHJpbmcoKXtsZXQgdD1bXSxlPXRoaXMucmVjb3Jkcztmb3IobGV0IGkgb2YgZS5rZXlzKCkpdC5wdXNoKFRvKGkpKTtyZXR1cm5gUjNJbmplY3Rvclske3Quam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEF0KDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKHQpe2xldCBlPWswKHQ9S2kodCkpP3Q6S2kodCYmdC5wcm92aWRlKSxpPWZ1bmN0aW9uKG4pe3JldHVybiBrOShuKT9FMCh2b2lkIDAsbi51c2VWYWx1ZSk6RTAoRjkobiksUDEpfSh0KTtpZihrMCh0KXx8ITAhPT10Lm11bHRpKXRoaXMucmVjb3Jkcy5nZXQoZSk7ZWxzZXtsZXQgcj10aGlzLnJlY29yZHMuZ2V0KGUpO3J8fChyPUUwKHZvaWQgMCxQMSwhMCksci5mYWN0b3J5PSgpPT5kTChyLm11bHRpKSx0aGlzLnJlY29yZHMuc2V0KGUscikpLGU9dCxyLm11bHRpLnB1c2godCl9dGhpcy5yZWNvcmRzLnNldChlLGkpfWh5ZHJhdGUodCxlKXtyZXR1cm4gZS52YWx1ZT09PVAxJiYoZS52YWx1ZT1EdmUsZS52YWx1ZT1lLmZhY3RvcnkoKSksIm9iamVjdCI9PXR5cGVvZiBlLnZhbHVlJiZlLnZhbHVlJiZudWxsIT09KG49ZS52YWx1ZSkmJiJvYmplY3QiPT10eXBlb2YgbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4ubmdPbkRlc3Ryb3kmJnRoaXMuX25nT25EZXN0cm95SG9va3MuYWRkKGUudmFsdWUpLGUudmFsdWU7dmFyIG59aW5qZWN0YWJsZURlZkluU2NvcGUodCl7aWYoIXQucHJvdmlkZWRJbilyZXR1cm4hMTtsZXQgZT1LaSh0LnByb3ZpZGVkSW4pO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT8iYW55Ij09PWV8fHRoaXMuc2NvcGVzLmhhcyhlKTp0aGlzLmluamVjdG9yRGVmVHlwZXMuaGFzKGUpfX07ZnVuY3Rpb24gd0wobil7bGV0IHQ9YTMobiksZT1udWxsIT09dD90LmZhY3Rvcnk6V2Yobik7aWYobnVsbCE9PWUpcmV0dXJuIGU7aWYobiBpbnN0YW5jZW9mIHBlKXRocm93IG5ldyBBdCgyMDQsITEpO2lmKG4gaW5zdGFuY2VvZiBGdW5jdGlvbilyZXR1cm4gZnVuY3Rpb24obil7bGV0IHQ9bi5sZW5ndGg7aWYodD4wKXRocm93IGZ4KHQsIj8iKSxuZXcgQXQoMjA0LCExKTtsZXQgZT1mdW5jdGlvbihuKXtsZXQgdD1uJiYobltMMV18fG5bRDddKTtpZih0KXtsZXQgZT1mdW5jdGlvbihuKXtpZihuLmhhc093blByb3BlcnR5KCJuYW1lIikpcmV0dXJuIG4ubmFtZTtsZXQgdD0oIiIrbikubWF0Y2goL15mdW5jdGlvblxzKihbXlxzKF0rKS8pO3JldHVybiBudWxsPT09dD8iIjp0WzFdfShuKTtyZXR1cm4gY29uc29sZS53YXJuKGBERVBSRUNBVEVEOiBESSBpcyBpbnN0YW50aWF0aW5nIGEgdG9rZW4gIiR7ZX0iIHRoYXQgaW5oZXJpdHMgaXRzIEBJbmplY3RhYmxlIGRlY29yYXRvciBidXQgZG9lcyBub3QgcHJvdmlkZSBvbmUgaXRzZWxmLlxuVGhpcyB3aWxsIGJlY29tZSBhbiBlcnJvciBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEFuZ3VsYXIuIFBsZWFzZSBhZGQgQEluamVjdGFibGUoKSB0byB0aGUgIiR7ZX0iIGNsYXNzLmApLHR9cmV0dXJuIG51bGx9KG4pO3JldHVybiBudWxsIT09ZT8oKT0+ZS5mYWN0b3J5KG4pOigpPT5uZXcgbn0obik7dGhyb3cgbmV3IEF0KDIwNCwhMSl9ZnVuY3Rpb24gRjkobix0LGUpe2xldCBpO2lmKGswKG4pKXtsZXQgcj1LaShuKTtyZXR1cm4gV2Yocil8fHdMKHIpfWlmKGs5KG4pKWk9KCk9PktpKG4udXNlVmFsdWUpO2Vsc2UgaWYoZnVuY3Rpb24obil7cmV0dXJuISghbnx8IW4udXNlRmFjdG9yeSl9KG4pKWk9KCk9Pm4udXNlRmFjdG9yeSguLi5kTChuLmRlcHN8fFtdKSk7ZWxzZSBpZihmdW5jdGlvbihuKXtyZXR1cm4hKCFufHwhbi51c2VFeGlzdGluZyl9KG4pKWk9KCk9PmooS2kobi51c2VFeGlzdGluZykpO2Vsc2V7bGV0IHI9S2kobiYmKG4udXNlQ2xhc3N8fG4ucHJvdmlkZSkpO2lmKCFmdW5jdGlvbihuKXtyZXR1cm4hIW4uZGVwc30obikpcmV0dXJuIFdmKHIpfHx3TChyKTtpPSgpPT5uZXcgciguLi5kTChuLmRlcHMpKX1yZXR1cm4gaX1mdW5jdGlvbiBFMChuLHQsZT0hMSl7cmV0dXJue2ZhY3Rvcnk6bix2YWx1ZTp0LG11bHRpOmU/W106dm9pZCAwfX1mdW5jdGlvbiBrdmUobil7cmV0dXJuISFuLlx1MDI3NXByb3ZpZGVyc31mdW5jdGlvbiBTTChuLHQpe2ZvcihsZXQgZSBvZiBuKUFycmF5LmlzQXJyYXkoZSk/U0woZSx0KTprdmUoZSk/U0woZS5cdTAyNzVwcm92aWRlcnMsdCk6dChlKX12YXIgRUw9Y2xhc3N7fSxKMT1jbGFzc3t9LFRMPWNsYXNze3Jlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpe3Rocm93IGZ1bmN0aW9uKG4pe2xldCB0PUVycm9yKGBObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgJHtUbyhuKX0uIERpZCB5b3UgYWRkIGl0IHRvIEBOZ01vZHVsZS5lbnRyeUNvbXBvbmVudHM/YCk7cmV0dXJuIHQubmdDb21wb25lbnQ9bix0fSh0KX19LGdzPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLk5VTEw9bmV3IFRMLG59KSgpO2Z1bmN0aW9uIEx2ZSgpe3JldHVybiBHMCh6bygpLHJ0KCkpfWZ1bmN0aW9uIEcwKG4sdCl7cmV0dXJuIG5ldyBSZShVbChuLHQpKX12YXIgUmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9ZX19cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189THZlLG59KSgpO2Z1bmN0aW9uIEJ2ZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIFJlP24ubmF0aXZlRWxlbWVudDpufW5ldyBwZSgiUmVuZGVyZXIySW50ZXJjZXB0b3IiKTt2YXIgd3U9Y2xhc3N7fSxFdT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24oKXtsZXQgbj1ydCgpLGU9cXAoem8oKS5pbmRleCxuKTtyZXR1cm4oemYoZSk/ZTpuKVsxMV19KCksbn0pKCksSHZlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLG59KSgpLEljPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZnVsbD10LHRoaXMubWFqb3I9dC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9dC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9dC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19LFV2ZT1uZXcgSWMoIjE0LjIuMTEiKSxITj17fTtmdW5jdGlvbiBVTihuKXtyZXR1cm4gbi5uZ09yaWdpbmFsRXJyb3J9dmFyIFFzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKHQpe2xldCBlPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKHQpO3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIix0KSxlJiZ0aGlzLl9jb25zb2xlLmVycm9yKCJPUklHSU5BTCBFUlJPUiIsZSl9X2ZpbmRPcmlnaW5hbEVycm9yKHQpe2xldCBlPXQmJlVOKHQpO2Zvcig7ZSYmVU4oZSk7KWU9VU4oZSk7cmV0dXJuIGV8fG51bGx9fSxqdmU9L14+fF4tPnw8IS0tfC0tPnwtLSE+fDwhLSQvZyxHdmU9Lyg8fD4pLyxOOT1uZXcgTWFwLFl2ZT0wLFFXPSJfX25nQ29udGV4dF9fIjtmdW5jdGlvbiBTdShuLHQpe3pmKHQpPyhuW1FXXT10WzIwXSxmdW5jdGlvbihuKXtOOS5zZXQoblsyMF0sbil9KHQpKTpuW1FXXT10fWZ1bmN0aW9uIFd4KG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gX1Qobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudH1mdW5jdGlvbiBSMShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEZ1bmN0aW9uP24oKTpufXZhciBETCxCbD0oKCk9PntyZXR1cm4obj1CbHx8KEJsPXt9KSlbbi5JbXBvcnRhbnQ9MV09IkltcG9ydGFudCIsbltuLkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSIsQmw7dmFyIG59KSgpO2Z1bmN0aW9uIFAzKG4sdCl7cmV0dXJuIERMKG4sdCl9ZnVuY3Rpb24gUjMobil7bGV0IHQ9blszXTtyZXR1cm4gVmQodCk/dFszXTp0fWZ1bmN0aW9uIE8zKG4pe3JldHVybiBCOShuWzEzXSl9ZnVuY3Rpb24gazMobil7cmV0dXJuIEI5KG5bNF0pfWZ1bmN0aW9uIEI5KG4pe2Zvcig7bnVsbCE9PW4mJiFWZChuKTspbj1uWzRdO3JldHVybiBufWZ1bmN0aW9uIFQwKG4sdCxlLGkscil7aWYobnVsbCE9aSl7bGV0IG8scz0hMTtWZChpKT9vPWk6emYoaSkmJihzPSEwLGk9aVswXSk7bGV0IGE9JGEoaSk7MD09PW4mJm51bGwhPT1lP251bGw9PXI/RzkodCxlLGEpOllmKHQsZSxhLHJ8fG51bGwsITApOjE9PT1uJiZudWxsIT09ZT9ZZih0LGUsYSxyfHxudWxsLCEwKToyPT09bj9LOSh0LGEscyk6Mz09PW4mJnQuZGVzdHJveU5vZGUoYSksbnVsbCE9byYmZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1lWzddO28hPT0kYShlKSYmVDAodCxuLGksbyxyKTtmb3IobGV0IGE9MTA7YTxlLmxlbmd0aDthKyspe2xldCBsPWVbYV07cXgobFsxXSxsLG4sdCxpLG8pfX0odCxuLG8sZSxyKX19ZnVuY3Rpb24gRjMobix0KXtyZXR1cm4gbi5jcmVhdGVUZXh0KHQpfWZ1bmN0aW9uIFY5KG4sdCxlKXtuLnNldFZhbHVlKHQsZSl9ZnVuY3Rpb24gZXllKG4sdCl7cmV0dXJuIG4uY3JlYXRlQ29tbWVudChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKGp2ZSx0PT50LnJlcGxhY2UoR3ZlLCJcdTIwMGIkMVx1MjAwYiIpKX0odCkpfWZ1bmN0aW9uIE4zKG4sdCxlKXtyZXR1cm4gbi5jcmVhdGVFbGVtZW50KHQsZSl9ZnVuY3Rpb24gSDkobix0KXtsZXQgZT1uWzldLGk9ZS5pbmRleE9mKHQpLHI9dFszXTs1MTImdFsyXSYmKHRbMl0mPS01MTMsZjMociwtMSkpLGUuc3BsaWNlKGksMSl9ZnVuY3Rpb24gQUwobix0KXtpZihuLmxlbmd0aDw9MTApcmV0dXJuO2xldCBlPTEwK3QsaT1uW2VdO2lmKGkpe2xldCByPWlbMTddO251bGwhPT1yJiZyIT09biYmSDkocixpKSx0PjAmJihuW2UtMV1bNF09aVs0XSk7bGV0IG89WDEobiwxMCt0KTshZnVuY3Rpb24obix0KXtxeChuLHQsdFsxMV0sMixudWxsLG51bGwpLHRbMF09bnVsbCx0WzZdPW51bGx9KGlbMV0saSk7bGV0IHM9b1sxOV07bnVsbCE9PXMmJnMuZGV0YWNoVmlldyhvWzFdKSxpWzNdPW51bGwsaVs0XT1udWxsLGlbMl0mPS02NX1yZXR1cm4gaX1mdW5jdGlvbiBVOShuLHQpe2lmKCEoMTI4JnRbMl0pKXtsZXQgZT10WzExXTtlLmRlc3Ryb3lOb2RlJiZxeChuLHQsZSwzLG51bGwsbnVsbCksZnVuY3Rpb24obil7bGV0IHQ9blsxM107aWYoIXQpcmV0dXJuIHpOKG5bMV0sbik7Zm9yKDt0Oyl7bGV0IGU9bnVsbDtpZih6Zih0KSllPXRbMTNdO2Vsc2V7bGV0IGk9dFsxMF07aSYmKGU9aSl9aWYoIWUpe2Zvcig7dCYmIXRbNF0mJnQhPT1uOyl6Zih0KSYmek4odFsxXSx0KSx0PXRbM107bnVsbD09PXQmJih0PW4pLHpmKHQpJiZ6Tih0WzFdLHQpLGU9dCYmdFs0XX10PWV9fSh0KX19ZnVuY3Rpb24gek4obix0KXtpZighKDEyOCZ0WzJdKSl7dFsyXSY9LTY1LHRbMl18PTEyOCxmdW5jdGlvbihuLHQpe2xldCBlO2lmKG51bGwhPW4mJm51bGwhPShlPW4uZGVzdHJveUhvb2tzKSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krPTIpe2xldCByPXRbZVtpXV07aWYoIShyIGluc3RhbmNlb2YgcWYpKXtsZXQgbz1lW2krMV07aWYoQXJyYXkuaXNBcnJheShvKSlmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrPTIpe2xldCBhPXJbb1tzXV0sbD1vW3MrMV07dHJ5e2wuY2FsbChhKX1maW5hbGx5e319ZWxzZSB0cnl7by5jYWxsKHIpfWZpbmFsbHl7fX19fShuLHQpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5jbGVhbnVwLGk9dFs3XSxyPS0xO2lmKG51bGwhPT1lKWZvcihsZXQgbz0wO288ZS5sZW5ndGgtMTtvKz0yKWlmKCJzdHJpbmciPT10eXBlb2YgZVtvXSl7bGV0IHM9ZVtvKzFdLGE9ImZ1bmN0aW9uIj09dHlwZW9mIHM/cyh0KTokYSh0W3NdKSxsPWlbcj1lW28rMl1dLGM9ZVtvKzNdOyJib29sZWFuIj09dHlwZW9mIGM/YS5yZW1vdmVFdmVudExpc3RlbmVyKGVbb10sbCxjKTpjPj0wP2lbcj1jXSgpOmlbcj0tY10udW5zdWJzY3JpYmUoKSxvKz0yfWVsc2V7bGV0IHM9aVtyPWVbbysxXV07ZVtvXS5jYWxsKHMpfWlmKG51bGwhPT1pKXtmb3IobGV0IG89cisxO288aS5sZW5ndGg7bysrKSgwLGlbb10pKCk7dFs3XT1udWxsfX0obix0KSwxPT09dFsxXS50eXBlJiZ0WzExXS5kZXN0cm95KCk7bGV0IGU9dFsxN107aWYobnVsbCE9PWUmJlZkKHRbM10pKXtlIT09dFszXSYmSDkoZSx0KTtsZXQgaT10WzE5XTtudWxsIT09aSYmaS5kZXRhY2hWaWV3KG4pfSFmdW5jdGlvbihuKXtOOS5kZWxldGUoblsyMF0pfSh0KX19ZnVuY3Rpb24gejkobix0LGUpe3JldHVybiBqOShuLHQucGFyZW50LGUpfWZ1bmN0aW9uIGo5KG4sdCxlKXtsZXQgaT10O2Zvcig7bnVsbCE9PWkmJjQwJmkudHlwZTspaT0odD1pKS5wYXJlbnQ7aWYobnVsbD09PWkpcmV0dXJuIGVbMF07aWYoMiZpLmZsYWdzKXtsZXQgcj1uLmRhdGFbaS5kaXJlY3RpdmVTdGFydF0uZW5jYXBzdWxhdGlvbjtpZihyPT09SmEuTm9uZXx8cj09PUphLkVtdWxhdGVkKXJldHVybiBudWxsfXJldHVybiBVbChpLGUpfWZ1bmN0aW9uIFlmKG4sdCxlLGkscil7bi5pbnNlcnRCZWZvcmUodCxlLGkscil9ZnVuY3Rpb24gRzkobix0LGUpe24uYXBwZW5kQ2hpbGQodCxlKX1mdW5jdGlvbiBLVyhuLHQsZSxpLHIpe251bGwhPT1pP1lmKG4sdCxlLGkscik6Rzkobix0LGUpfWZ1bmN0aW9uIHZUKG4sdCl7cmV0dXJuIG4ucGFyZW50Tm9kZSh0KX1mdW5jdGlvbiBXOShuLHQsZSl7cmV0dXJuIFk5KG4sdCxlKX1mdW5jdGlvbiBxOShuLHQsZSl7cmV0dXJuIDQwJm4udHlwZT9VbChuLGUpOm51bGx9dmFyIElMLFk5PXE5O2Z1bmN0aW9uIFg5KG4sdCl7WTk9bixJTD10fWZ1bmN0aW9uIHlUKG4sdCxlLGkpe2xldCByPXo5KG4saSx0KSxvPXRbMTFdLGE9VzkoaS5wYXJlbnR8fHRbNl0saSx0KTtpZihudWxsIT1yKWlmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCBsPTA7bDxlLmxlbmd0aDtsKyspS1cobyxyLGVbbF0sYSwhMSk7ZWxzZSBLVyhvLHIsZSxhLCExKTt2b2lkIDAhPT1JTCYmSUwobyxpLHQsZSxyKX1mdW5jdGlvbiBPMShuLHQpe2lmKG51bGwhPT10KXtsZXQgZT10LnR5cGU7aWYoMyZlKXJldHVybiBVbCh0LG4pO2lmKDQmZSlyZXR1cm4gUEwoLTEsblt0LmluZGV4XSk7aWYoOCZlKXtsZXQgaT10LmNoaWxkO2lmKG51bGwhPT1pKXJldHVybiBPMShuLGkpO3tsZXQgcj1uW3QuaW5kZXhdO3JldHVybiBWZChyKT9QTCgtMSxyKTokYShyKX19aWYoMzImZSlyZXR1cm4gUDModCxuKSgpfHwkYShuW3QuaW5kZXhdKTt7bGV0IGk9UTkobix0KTtyZXR1cm4gbnVsbCE9PWk/QXJyYXkuaXNBcnJheShpKT9pWzBdOk8xKFIzKG5bMTZdKSxpKTpPMShuLHQubmV4dCl9fXJldHVybiBudWxsfWZ1bmN0aW9uIFE5KG4sdCl7cmV0dXJuIG51bGwhPT10P25bMTZdWzZdLnByb2plY3Rpb25bdC5wcm9qZWN0aW9uXTpudWxsfWZ1bmN0aW9uIFBMKG4sdCl7bGV0IGU9MTArbisxO2lmKGU8dC5sZW5ndGgpe2xldCBpPXRbZV0scj1pWzFdLmZpcnN0Q2hpbGQ7aWYobnVsbCE9PXIpcmV0dXJuIE8xKGkscil9cmV0dXJuIHRbN119ZnVuY3Rpb24gSzkobix0LGUpe2xldCBpPXZUKG4sdCk7aSYmZnVuY3Rpb24obix0LGUsaSl7bi5yZW1vdmVDaGlsZCh0LGUsaSl9KG4saSx0LGUpfWZ1bmN0aW9uIEwzKG4sdCxlLGkscixvLHMpe2Zvcig7bnVsbCE9ZTspe2xldCBhPWlbZS5pbmRleF0sbD1lLnR5cGU7aWYocyYmMD09PXQmJihhJiZTdSgkYShhKSxpKSxlLmZsYWdzfD00KSw2NCE9KDY0JmUuZmxhZ3MpKWlmKDgmbClMMyhuLHQsZS5jaGlsZCxpLHIsbywhMSksVDAodCxuLHIsYSxvKTtlbHNlIGlmKDMyJmwpe2xldCB1LGM9UDMoZSxpKTtmb3IoO3U9YygpOylUMCh0LG4scix1LG8pO1QwKHQsbixyLGEsbyl9ZWxzZSAxNiZsP1o5KG4sdCxpLGUscixvKTpUMCh0LG4scixhLG8pO2U9cz9lLnByb2plY3Rpb25OZXh0OmUubmV4dH19ZnVuY3Rpb24gcXgobix0LGUsaSxyLG8pe0wzKGUsaSxuLmZpcnN0Q2hpbGQsdCxyLG8sITEpfWZ1bmN0aW9uIFo5KG4sdCxlLGkscixvKXtsZXQgcz1lWzE2XSxsPXNbNl0ucHJvamVjdGlvbltpLnByb2plY3Rpb25dO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspVDAodCxuLHIsbFtjXSxvKTtlbHNlIEwzKG4sdCxsLHNbM10scixvLCEwKX1mdW5jdGlvbiBKOShuLHQsZSl7bi5zZXRBdHRyaWJ1dGUodCwic3R5bGUiLGUpfWZ1bmN0aW9uIEIzKG4sdCxlKXsiIj09PWU/bi5yZW1vdmVBdHRyaWJ1dGUodCwiY2xhc3MiKTpuLnNldEF0dHJpYnV0ZSh0LCJjbGFzcyIsZSl9ZnVuY3Rpb24gJDkobix0LGUpe2xldCBpPW4ubGVuZ3RoO2Zvcig7Oyl7bGV0IHI9bi5pbmRleE9mKHQsZSk7aWYoLTE9PT1yKXJldHVybiByO2lmKDA9PT1yfHxuLmNoYXJDb2RlQXQoci0xKTw9MzIpe2xldCBvPXQubGVuZ3RoO2lmKHIrbz09PWl8fG4uY2hhckNvZGVBdChyK28pPD0zMilyZXR1cm4gcn1lPXIrMX19dmFyIGVxPSJuZy10ZW1wbGF0ZSI7ZnVuY3Rpb24gZnllKG4sdCxlKXtsZXQgaT0wO2Zvcig7aTxuLmxlbmd0aDspe2xldCByPW5baSsrXTtpZihlJiYiY2xhc3MiPT09cil7aWYocj1uW2ldLC0xIT09JDkoci50b0xvd2VyQ2FzZSgpLHQsMCkpcmV0dXJuITB9ZWxzZSBpZigxPT09cil7Zm9yKDtpPG4ubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mKHI9bltpKytdKTspaWYoci50b0xvd2VyQ2FzZSgpPT09dClyZXR1cm4hMDtyZXR1cm4hMX19cmV0dXJuITF9ZnVuY3Rpb24gdHEobil7cmV0dXJuIDQ9PT1uLnR5cGUmJm4udmFsdWUhPT1lcX1mdW5jdGlvbiBteWUobix0LGUpe3JldHVybiB0PT09KDQhPT1uLnR5cGV8fGU/bi52YWx1ZTplcSl9ZnVuY3Rpb24gZ3llKG4sdCxlKXtsZXQgaT00LHI9bi5hdHRyc3x8W10sbz1mdW5jdGlvbihuKXtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylpZigkNyhuW3RdKSlyZXR1cm4gdDtyZXR1cm4gbi5sZW5ndGh9KHIpLHM9ITE7Zm9yKGxldCBhPTA7YTx0Lmxlbmd0aDthKyspe2xldCBsPXRbYV07aWYoIm51bWJlciIhPXR5cGVvZiBsKXtpZighcylpZig0Jmkpe2lmKGk9MnwxJmksIiIhPT1sJiYhbXllKG4sbCxlKXx8IiI9PT1sJiYxPT09dC5sZW5ndGgpe2lmKFNjKGkpKXJldHVybiExO3M9ITB9fWVsc2V7bGV0IGM9OCZpP2w6dFsrK2FdO2lmKDgmaSYmbnVsbCE9PW4uYXR0cnMpe2lmKCFmeWUobi5hdHRycyxjLGUpKXtpZihTYyhpKSlyZXR1cm4hMTtzPSEwfWNvbnRpbnVlfWxldCBkPV95ZSg4Jmk/ImNsYXNzIjpsLHIsdHEobiksZSk7aWYoLTE9PT1kKXtpZihTYyhpKSlyZXR1cm4hMTtzPSEwO2NvbnRpbnVlfWlmKCIiIT09Yyl7bGV0IHA7cD1kPm8/IiI6cltkKzFdLnRvTG93ZXJDYXNlKCk7bGV0IGg9OCZpP3A6bnVsbDtpZihoJiYtMSE9PSQ5KGgsYywwKXx8MiZpJiZjIT09cCl7aWYoU2MoaSkpcmV0dXJuITE7cz0hMH19fX1lbHNle2lmKCFzJiYhU2MoaSkmJiFTYyhsKSlyZXR1cm4hMTtpZihzJiZTYyhsKSljb250aW51ZTtzPSExLGk9bHwxJml9fXJldHVybiBTYyhpKXx8c31mdW5jdGlvbiBTYyhuKXtyZXR1cm4gMD09KDEmbil9ZnVuY3Rpb24gX3llKG4sdCxlLGkpe2lmKG51bGw9PT10KXJldHVybi0xO2xldCByPTA7aWYoaXx8IWUpe2xldCBvPSExO2Zvcig7cjx0Lmxlbmd0aDspe2xldCBzPXRbcl07aWYocz09PW4pcmV0dXJuIHI7aWYoMz09PXN8fDY9PT1zKW89ITA7ZWxzZXtpZigxPT09c3x8Mj09PXMpe2xldCBhPXRbKytyXTtmb3IoOyJzdHJpbmciPT10eXBlb2YgYTspYT10Wysrcl07Y29udGludWV9aWYoND09PXMpYnJlYWs7aWYoMD09PXMpe3IrPTQ7Y29udGludWV9fXIrPW8/MToyfXJldHVybi0xfXJldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPW4uaW5kZXhPZig0KTtpZihlPi0xKWZvcihlKys7ZTxuLmxlbmd0aDspe2xldCBpPW5bZV07aWYoIm51bWJlciI9PXR5cGVvZiBpKXJldHVybi0xO2lmKGk9PT10KXJldHVybiBlO2UrK31yZXR1cm4tMX0odCxuKX1mdW5jdGlvbiBucShuLHQsZT0hMSl7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspaWYoZ3llKG4sdFtpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB4eWUobix0KXtlOmZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtsZXQgaT10W2VdO2lmKG4ubGVuZ3RoPT09aS5sZW5ndGgpe2ZvcihsZXQgcj0wO3I8bi5sZW5ndGg7cisrKWlmKG5bcl0hPT1pW3JdKWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIFpXKG4sdCl7cmV0dXJuIG4/Ijpub3QoIit0LnRyaW0oKSsiKSI6dH1mdW5jdGlvbiBDeWUobil7bGV0IHQ9blswXSxlPTEsaT0yLHI9IiIsbz0hMTtmb3IoO2U8bi5sZW5ndGg7KXtsZXQgcz1uW2VdO2lmKCJzdHJpbmciPT10eXBlb2YgcylpZigyJmkpe2xldCBhPW5bKytlXTtyKz0iWyIrcysoYS5sZW5ndGg+MD8nPSInK2ErJyInOiIiKSsiXSJ9ZWxzZSA4Jmk/cis9Ii4iK3M6NCZpJiYocis9IiAiK3MpO2Vsc2UiIiE9PXImJiFTYyhzKSYmKHQrPVpXKG8scikscj0iIiksaT1zLG89b3x8IVNjKGkpO2UrK31yZXR1cm4iIiE9PXImJih0Kz1aVyhvLHIpKSx0fXZhciBRbj17fTtmdW5jdGlvbiBDKG4pe2lxKEZpKCkscnQoKSxacygpK24sITEpfWZ1bmN0aW9uIGlxKG4sdCxlLGkpe2lmKCFpKWlmKDM9PSgzJnRbMl0pKXtsZXQgbz1uLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09byYmRDEodCxvLGUpfWVsc2V7bGV0IG89bi5wcmVPcmRlckhvb2tzO251bGwhPT1vJiZBMSh0LG8sMCxlKX16cChlKX12YXIgSlc9eyJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlIjp5ZSwiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiOlYsIlx1MDI3NVx1MDI3NWluamVjdCI6aiwiXHUwMjc1XHUwMjc1aW52YWxpZEZhY3RvcnlEZXAiOmQ5LHJlc29sdmVGb3J3YXJkUmVmOktpfTt2YXIgRXllPW1yKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTptcn0pO2Z1bmN0aW9uICRXKG4pe3JldHVybiB2b2lkIDAhPT1uLnVzZUNsYXNzfWZ1bmN0aW9uIGU3KG4pe3JldHVybiB2b2lkIDAhPT1uLnVzZUZhY3Rvcnl9dmFyIHJxPVZ4KCJJbmplY3RhYmxlIix2b2lkIDAsdm9pZCAwLHZvaWQgMCwobix0KT0+ZnVuY3Rpb24obix0KXtsZXQgZT1udWxsLGk9bnVsbDtuLmhhc093blByb3BlcnR5KEwxKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sTDEse2dldDooKT0+KG51bGw9PT1lJiYoZT1MbCgpLmNvbXBpbGVJbmplY3RhYmxlKEpXLGBuZzovLy8ke24ubmFtZX0vXHUwMjc1cHJvdi5qc2AsZnVuY3Rpb24obix0KXtsZXQgZT10fHx7cHJvdmlkZWRJbjpudWxsfSxpPXtuYW1lOm4ubmFtZSx0eXBlOm4sdHlwZUFyZ3VtZW50Q291bnQ6MCxwcm92aWRlZEluOmUucHJvdmlkZWRJbn07cmV0dXJuKCRXKGUpfHxlNyhlKSkmJnZvaWQgMCE9PWUuZGVwcyYmKGkuZGVwcz1wOShlLmRlcHMpKSwkVyhlKT9pLnVzZUNsYXNzPWUudXNlQ2xhc3M6ZnVuY3Rpb24obil7cmV0dXJuIEV5ZSBpbiBufShlKT9pLnVzZVZhbHVlPWUudXNlVmFsdWU6ZTcoZSk/aS51c2VGYWN0b3J5PWUudXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi51c2VFeGlzdGluZ30oZSkmJihpLnVzZUV4aXN0aW5nPWUudXNlRXhpc3RpbmcpLGl9KG4sdCkpKSxlKX0pLG4uaGFzT3duUHJvcGVydHkoTmQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobixOZCx7Z2V0OigpPT57aWYobnVsbD09PWkpe2xldCByPUxsKCk7aT1yLmNvbXBpbGVGYWN0b3J5KEpXLGBuZzovLy8ke24ubmFtZX0vXHUwMjc1ZmFjLmpzYCx7bmFtZTpuLm5hbWUsdHlwZTpuLHR5cGVBcmd1bWVudENvdW50OjAsZGVwczpmVChuKSx0YXJnZXQ6ci5GYWN0b3J5VGFyZ2V0LkluamVjdGFibGV9KX1yZXR1cm4gaX0sY29uZmlndXJhYmxlOiEwfSl9KG4sdCkpO2Z1bmN0aW9uIHQ3KG4sdD1udWxsLGU9bnVsbCxpKXtsZXQgcj1vcShuLHQsZSxpKTtyZXR1cm4gci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSxyfWZ1bmN0aW9uIG9xKG4sdD1udWxsLGU9bnVsbCxpLHI9bmV3IFNldCl7bGV0IG89W2V8fFFpLE12ZShuKV07cmV0dXJuIGk9aXx8KCJvYmplY3QiPT10eXBlb2Ygbj92b2lkIDA6VG8obikpLG5ldyBaMShvLHR8fEkzKCksaXx8bnVsbCxyKX12YXIgWG49KCgpPT57Y2xhc3MgbntzdGF0aWMgY3JlYXRlKGUsaSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gdDcoe25hbWU6IiJ9LGksZSwiIik7e2xldCByPWUubmFtZT8/IiI7cmV0dXJuIHQ3KHtuYW1lOnJ9LGUucGFyZW50LGUucHJvdmlkZXJzLHIpfX19cmV0dXJuIG4uVEhST1dfSUZfTk9UX0ZPVU5EPVR4LG4uTlVMTD1uZXcgSzEsbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLHByb3ZpZGVkSW46ImFueSIsZmFjdG9yeTooKT0+aihJOSl9KSxuLl9fTkdfRUxFTUVOVF9JRF9fPS0xLG59KSgpLGd4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7aWYodGhpcy50b2tlbj10LHRoaXMuaWQ9ZSwhdCl0aHJvdyBuZXcgQXQoMjA4LCExKTt0aGlzLmRpc3BsYXlOYW1lPVRvKHRoaXMudG9rZW4pfXN0YXRpYyBnZXQodCl7cmV0dXJuIG43LmdldChLaSh0KSl9c3RhdGljIGdldCBudW1iZXJPZktleXMoKXtyZXR1cm4gbjcubnVtYmVyT2ZLZXlzfX0sbjc9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fYWxsS2V5cz1uZXcgTWFwfWdldCh0KXtpZih0IGluc3RhbmNlb2YgZ3gpcmV0dXJuIHQ7aWYodGhpcy5fYWxsS2V5cy5oYXModCkpcmV0dXJuIHRoaXMuX2FsbEtleXMuZ2V0KHQpO2xldCBlPW5ldyBneCh0LGd4Lm51bWJlck9mS2V5cyk7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2V0KHQsZSksZX1nZXQgbnVtYmVyT2ZLZXlzKCl7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2l6ZX19O2Z1bmN0aW9uIE0obix0PWRpLkRlZmF1bHQpe2xldCBlPXJ0KCk7cmV0dXJuIG51bGw9PT1lP2oobix0KTpzOSh6bygpLGUsS2kobiksdCl9ZnVuY3Rpb24gbmwoKXt0aHJvdyBuZXcgRXJyb3IoImludmFsaWQiKX1mdW5jdGlvbiBFMShuLHQpe3JldHVybiBuPDwxN3x0PDwyfWZ1bmN0aW9uIFhmKG4pe3JldHVybiBuPj4xNyYzMjc2N31mdW5jdGlvbiBPTChuKXtyZXR1cm4gMnxufWZ1bmN0aW9uIEYwKG4pe3JldHVybigxMzEwNjgmbik+PjJ9ZnVuY3Rpb24gak4obix0KXtyZXR1cm4tMTMxMDY5Jm58dDw8Mn1mdW5jdGlvbiBrTChuKXtyZXR1cm4gMXxufWZ1bmN0aW9uIHNxKG4sdCl7bGV0IGU9bi5jb250ZW50UXVlcmllcztpZihudWxsIT09ZSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krPTIpe2xldCByPWVbaV0sbz1lW2krMV07aWYoLTEhPT1vKXtsZXQgcz1uLmRhdGFbb107djMocikscy5jb250ZW50UXVlcmllcygyLHRbb10sbyl9fX1mdW5jdGlvbiBiVChuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPXQuYmx1ZXByaW50LnNsaWNlKCk7cmV0dXJuIGRbMF09cixkWzJdPTc2fGksKG51bGwhPT11fHxuJiYxMDI0Jm5bMl0pJiYoZFsyXXw9MTAyNCksVTcoZCksZFszXT1kWzE1XT1uLGRbOF09ZSxkWzEwXT1zfHxuJiZuWzEwXSxkWzExXT1hfHxuJiZuWzExXSxkWzEyXT1sfHxuJiZuWzEyXXx8bnVsbCxkWzldPWN8fG4mJm5bOV18fG51bGwsZFs2XT1vLGRbMjBdPVl2ZSsrLGRbMjFdPXUsZFsxNl09Mj09dC50eXBlP25bMTZdOmQsZH1mdW5jdGlvbiBXMChuLHQsZSxpLHIpe2xldCBvPW4uZGF0YVt0XTtpZihudWxsPT09bylvPVYzKG4sdCxlLGksciksWm4ubEZyYW1lLmluSTE4biYmKG8uZmxhZ3N8PTY0KTtlbHNlIGlmKDY0Jm8udHlwZSl7by50eXBlPWUsby52YWx1ZT1pLG8uYXR0cnM9cjtsZXQgcz13eCgpO28uaW5qZWN0b3JJbmRleD1udWxsPT09cz8tMTpzLmluamVjdG9ySW5kZXh9cmV0dXJuIE11KG8sITApLG99ZnVuY3Rpb24gVjMobix0LGUsaSxyKXtsZXQgbz1qNygpLHM9bTMoKSxsPW4uZGF0YVt0XT1mdW5jdGlvbihuLHQsZSxpLHIsbyl7cmV0dXJue3R5cGU6ZSxpbmRleDppLGluc2VydEJlZm9yZUluZGV4Om51bGwsaW5qZWN0b3JJbmRleDp0P3QuaW5qZWN0b3JJbmRleDotMSxkaXJlY3RpdmVTdGFydDotMSxkaXJlY3RpdmVFbmQ6LTEsZGlyZWN0aXZlU3R5bGluZ0xhc3Q6LTEscHJvcGVydHlCaW5kaW5nczpudWxsLGZsYWdzOjAscHJvdmlkZXJJbmRleGVzOjAsdmFsdWU6cixhdHRyczpvLG1lcmdlZEF0dHJzOm51bGwsbG9jYWxOYW1lczpudWxsLGluaXRpYWxJbnB1dHM6dm9pZCAwLGlucHV0czpudWxsLG91dHB1dHM6bnVsbCx0Vmlld3M6bnVsbCxuZXh0Om51bGwscHJvamVjdGlvbk5leHQ6bnVsbCxjaGlsZDpudWxsLHBhcmVudDp0LHByb2plY3Rpb246bnVsbCxzdHlsZXM6bnVsbCxzdHlsZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsU3R5bGVzOnZvaWQgMCxjbGFzc2VzOm51bGwsY2xhc3Nlc1dpdGhvdXRIb3N0Om51bGwscmVzaWR1YWxDbGFzc2VzOnZvaWQgMCxjbGFzc0JpbmRpbmdzOjAsc3R5bGVCaW5kaW5nczowfX0oMCxzP286byYmby5wYXJlbnQsZSx0LGkscik7cmV0dXJuIG51bGw9PT1uLmZpcnN0Q2hpbGQmJihuLmZpcnN0Q2hpbGQ9bCksbnVsbCE9PW8mJihzP251bGw9PW8uY2hpbGQmJm51bGwhPT1sLnBhcmVudCYmKG8uY2hpbGQ9bCk6bnVsbD09PW8ubmV4dCYmKG8ubmV4dD1sKSksbH1mdW5jdGlvbiBxMChuLHQsZSxpKXtpZigwPT09ZSlyZXR1cm4tMTtsZXQgcj10Lmxlbmd0aDtmb3IobGV0IG89MDtvPGU7bysrKXQucHVzaChpKSxuLmJsdWVwcmludC5wdXNoKGkpLG4uZGF0YS5wdXNoKG51bGwpO3JldHVybiByfWZ1bmN0aW9uIEgzKG4sdCxlKXt5Myh0KTt0cnl7bGV0IGk9bi52aWV3UXVlcnk7bnVsbCE9PWkmJk5MKDEsaSxlKTtsZXQgcj1uLnRlbXBsYXRlO251bGwhPT1yJiZhcShuLHQsciwxLGUpLG4uZmlyc3RDcmVhdGVQYXNzJiYobi5maXJzdENyZWF0ZVBhc3M9ITEpLG4uc3RhdGljQ29udGVudFF1ZXJpZXMmJnNxKG4sdCksbi5zdGF0aWNWaWV3UXVlcmllcyYmTkwoMixuLnZpZXdRdWVyeSxlKTtsZXQgbz1uLmNvbXBvbmVudHM7bnVsbCE9PW8mJmZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspJHllKG4sdFtlXSl9KHQsbyl9Y2F0Y2goaSl7dGhyb3cgbi5maXJzdENyZWF0ZVBhc3MmJihuLmluY29tcGxldGVGaXJzdFBhc3M9ITAsbi5maXJzdENyZWF0ZVBhc3M9ITEpLGl9ZmluYWxseXt0WzJdJj0tNSxiMygpfX1mdW5jdGlvbiB4VChuLHQsZSxpKXtsZXQgcj10WzJdO2lmKDEyOCE9KDEyOCZyKSl7eTModCk7dHJ5e1U3KHQpLEc3KG4uYmluZGluZ1N0YXJ0SW5kZXgpLG51bGwhPT1lJiZhcShuLHQsZSwyLGkpO2xldCBzPTM9PSgzJnIpO2lmKHMpe2xldCBjPW4ucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT1jJiZEMSh0LGMsbnVsbCl9ZWxzZXtsZXQgYz1uLnByZU9yZGVySG9va3M7bnVsbCE9PWMmJkExKHQsYywwLG51bGwpLEZOKHQsMCl9aWYoZnVuY3Rpb24obil7Zm9yKGxldCB0PU8zKG4pO251bGwhPT10O3Q9azModCkpe2lmKCF0WzJdKWNvbnRpbnVlO2xldCBlPXRbOV07Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCByPWVbaV0sbz1yWzNdOzA9PSg1MTImclsyXSkmJmYzKG8sMSksclsyXXw9NTEyfX19KHQpLGZ1bmN0aW9uKG4pe2ZvcihsZXQgdD1PMyhuKTtudWxsIT09dDt0PWszKHQpKWZvcihsZXQgZT0xMDtlPHQubGVuZ3RoO2UrKyl7bGV0IGk9dFtlXSxyPWlbMV07VTEoaSkmJnhUKHIsaSxyLnRlbXBsYXRlLGlbOF0pfX0odCksbnVsbCE9PW4uY29udGVudFF1ZXJpZXMmJnNxKG4sdCkscyl7bGV0IGM9bi5jb250ZW50Q2hlY2tIb29rcztudWxsIT09YyYmRDEodCxjKX1lbHNle2xldCBjPW4uY29udGVudEhvb2tzO251bGwhPT1jJiZBMSh0LGMsMSksRk4odCwxKX0hZnVuY3Rpb24obix0KXtsZXQgZT1uLmhvc3RCaW5kaW5nT3BDb2RlcztpZihudWxsIT09ZSl0cnl7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCByPWVbaV07aWYocjwwKXpwKH5yKTtlbHNle2xldCBvPXIscz1lWysraV0sYT1lWysraV07c19lKHMsbyksYSgyLHRbb10pfX19ZmluYWxseXt6cCgtMSl9fShuLHQpO2xldCBhPW4uY29tcG9uZW50cztudWxsIT09YSYmZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylKeWUobix0W2VdKX0odCxhKTtsZXQgbD1uLnZpZXdRdWVyeTtpZihudWxsIT09bCYmTkwoMixsLGkpLHMpe2xldCBjPW4udmlld0NoZWNrSG9va3M7bnVsbCE9PWMmJkQxKHQsYyl9ZWxzZXtsZXQgYz1uLnZpZXdIb29rcztudWxsIT09YyYmQTEodCxjLDIpLEZOKHQsMil9ITA9PT1uLmZpcnN0VXBkYXRlUGFzcyYmKG4uZmlyc3RVcGRhdGVQYXNzPSExKSx0WzJdJj0tNDEsNTEyJnRbMl0mJih0WzJdJj0tNTEzLGYzKHRbM10sLTEpKX1maW5hbGx5e2IzKCl9fX1mdW5jdGlvbiBhcShuLHQsZSxpLHIpe2xldCBvPVpzKCkscz0yJmk7dHJ5e3pwKC0xKSxzJiZ0Lmxlbmd0aD4yMiYmaXEobix0LDIyLCExKSxlKGkscil9ZmluYWxseXt6cChvKX19ZnVuY3Rpb24gbHEobix0LGUpe2lmKHAzKHQpKXtsZXQgcj10LmRpcmVjdGl2ZUVuZDtmb3IobGV0IG89dC5kaXJlY3RpdmVTdGFydDtvPHI7bysrKXtsZXQgcz1uLmRhdGFbb107cy5jb250ZW50UXVlcmllcyYmcy5jb250ZW50UXVlcmllcygxLGVbb10sbyl9fX1mdW5jdGlvbiBVMyhuLHQsZSl7IXo3KCl8fChmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1lLmRpcmVjdGl2ZVN0YXJ0LG89ZS5kaXJlY3RpdmVFbmQ7bi5maXJzdENyZWF0ZVBhc3N8fFN4KGUsdCksU3UoaSx0KTtsZXQgcz1lLmluaXRpYWxJbnB1dHM7Zm9yKGxldCBhPXI7YTxvO2ErKyl7bGV0IGw9bi5kYXRhW2FdLGM9QWMobCk7YyYmWXllKHQsZSxsKTtsZXQgdT1CeCh0LG4sYSxlKTtTdSh1LHQpLG51bGwhPT1zJiZYeWUoMCxhLXIsdSxsLDAscyksYyYmKHFwKGUuaW5kZXgsdClbOF09dSl9fShuLHQsZSxVbChlLHQpKSwxMjg9PSgxMjgmZS5mbGFncykmJmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1lLmRpcmVjdGl2ZVN0YXJ0LHI9ZS5kaXJlY3RpdmVFbmQsbz1lLmluZGV4LHM9Wm4ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleDt0cnl7enAobyk7Zm9yKGxldCBhPWk7YTxyO2ErKyl7bGV0IGw9bi5kYXRhW2FdLGM9dFthXTtzTChhKSwobnVsbCE9PWwuaG9zdEJpbmRpbmdzfHwwIT09bC5ob3N0VmFyc3x8bnVsbCE9PWwuaG9zdEF0dHJzKSYmZnEobCxjKX19ZmluYWxseXt6cCgtMSksc0wocyl9fShuLHQsZSkpfWZ1bmN0aW9uIHozKG4sdCxlPVVsKXtsZXQgaT10LmxvY2FsTmFtZXM7aWYobnVsbCE9PWkpe2xldCByPXQuaW5kZXgrMTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rPTIpe2xldCBzPWlbbysxXSxhPS0xPT09cz9lKHQsbik6bltzXTtuW3IrK109YX19fWZ1bmN0aW9uIGNxKG4pe2xldCB0PW4udFZpZXc7cmV0dXJuIG51bGw9PT10fHx0LmluY29tcGxldGVGaXJzdFBhc3M/bi50Vmlldz1qMygxLG51bGwsbi50ZW1wbGF0ZSxuLmRlY2xzLG4udmFycyxuLmRpcmVjdGl2ZURlZnMsbi5waXBlRGVmcyxuLnZpZXdRdWVyeSxuLnNjaGVtYXMsbi5jb25zdHMpOnR9ZnVuY3Rpb24gajMobix0LGUsaSxyLG8scyxhLGwsYyl7bGV0IHU9MjIraSxkPXUrcixwPWZ1bmN0aW9uKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0O2krKyllLnB1c2goaTxuP251bGw6UW4pO3JldHVybiBlfSh1LGQpLGg9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YygpOmM7cmV0dXJuIHBbMV09e3R5cGU6bixibHVlcHJpbnQ6cCx0ZW1wbGF0ZTplLHF1ZXJpZXM6bnVsbCx2aWV3UXVlcnk6YSxkZWNsVE5vZGU6dCxkYXRhOnAuc2xpY2UoKS5maWxsKG51bGwsdSksYmluZGluZ1N0YXJ0SW5kZXg6dSxleHBhbmRvU3RhcnRJbmRleDpkLGhvc3RCaW5kaW5nT3BDb2RlczpudWxsLGZpcnN0Q3JlYXRlUGFzczohMCxmaXJzdFVwZGF0ZVBhc3M6ITAsc3RhdGljVmlld1F1ZXJpZXM6ITEsc3RhdGljQ29udGVudFF1ZXJpZXM6ITEscHJlT3JkZXJIb29rczpudWxsLHByZU9yZGVyQ2hlY2tIb29rczpudWxsLGNvbnRlbnRIb29rczpudWxsLGNvbnRlbnRDaGVja0hvb2tzOm51bGwsdmlld0hvb2tzOm51bGwsdmlld0NoZWNrSG9va3M6bnVsbCxkZXN0cm95SG9va3M6bnVsbCxjbGVhbnVwOm51bGwsY29udGVudFF1ZXJpZXM6bnVsbCxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIG8/bygpOm8scGlwZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBzP3MoKTpzLGZpcnN0Q2hpbGQ6bnVsbCxzY2hlbWFzOmwsY29uc3RzOmgsaW5jb21wbGV0ZUZpcnN0UGFzczohMX19ZnVuY3Rpb24gdXEobix0LGUsaSl7bGV0IHI9eHEodCk7bnVsbD09PWU/ci5wdXNoKGkpOihyLnB1c2goZSksbi5maXJzdENyZWF0ZVBhc3MmJkNxKG4pLnB1c2goaSxyLmxlbmd0aC0xKSl9ZnVuY3Rpb24gaTcobix0LGUpe2ZvcihsZXQgaSBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkoaSkpe2xldCByPW5baV07KGU9bnVsbD09PWU/e306ZSkuaGFzT3duUHJvcGVydHkoaSk/ZVtpXS5wdXNoKHQscik6ZVtpXT1bdCxyXX1yZXR1cm4gZX1mdW5jdGlvbiBkcShuLHQpe2xldCBpPXQuZGlyZWN0aXZlRW5kLHI9bi5kYXRhLG89dC5hdHRycyxzPVtdLGE9bnVsbCxsPW51bGw7Zm9yKGxldCBjPXQuZGlyZWN0aXZlU3RhcnQ7YzxpO2MrKyl7bGV0IHU9cltjXSxkPXUuaW5wdXRzLHA9bnVsbD09PW98fHRxKHQpP251bGw6UXllKGQsbyk7cy5wdXNoKHApLGE9aTcoZCxjLGEpLGw9aTcodS5vdXRwdXRzLGMsbCl9bnVsbCE9PWEmJihhLmhhc093blByb3BlcnR5KCJjbGFzcyIpJiYodC5mbGFnc3w9MTYpLGEuaGFzT3duUHJvcGVydHkoInN0eWxlIikmJih0LmZsYWdzfD0zMikpLHQuaW5pdGlhbElucHV0cz1zLHQuaW5wdXRzPWEsdC5vdXRwdXRzPWx9ZnVuY3Rpb24gaWwobix0LGUsaSxyLG8scyxhKXtsZXQgdSxsPVVsKHQsZSksYz10LmlucHV0czshYSYmbnVsbCE9YyYmKHU9Y1tpXSk/KHEzKG4sZSx1LGksciksaDModCkmJnBxKGUsdC5pbmRleCkpOjMmdC50eXBlJiYoaT1mdW5jdGlvbihuKXtyZXR1cm4iY2xhc3MiPT09bj8iY2xhc3NOYW1lIjoiZm9yIj09PW4/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09PW4/ImZvcm1BY3Rpb24iOiJpbm5lckh0bWwiPT09bj8iaW5uZXJIVE1MIjoicmVhZG9ubHkiPT09bj8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1uPyJ0YWJJbmRleCI6bn0oaSkscj1udWxsIT1zP3Mocix0LnZhbHVlfHwiIixpKTpyLG8uc2V0UHJvcGVydHkobCxpLHIpKX1mdW5jdGlvbiBwcShuLHQpe2xldCBlPXFwKHQsbik7MTYmZVsyXXx8KGVbMl18PTMyKX1mdW5jdGlvbiBHMyhuLHQsZSxpKXtsZXQgcj0hMTtpZih6NygpKXtsZXQgbz1mdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5kaXJlY3RpdmVSZWdpc3RyeSxyPW51bGw7aWYoaSlmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKyl7bGV0IHM9aVtvXTtucShlLHMuc2VsZWN0b3JzLCExKSYmKHJ8fChyPVtdKSxZMShTeChlLHQpLG4scy50eXBlKSxBYyhzKT8obXEobixlKSxyLnVuc2hpZnQocykpOnIucHVzaChzKSl9cmV0dXJuIHJ9KG4sdCxlKSxzPW51bGw9PT1pP251bGw6eyIiOi0xfTtpZihudWxsIT09byl7cj0hMCxncShlLG4uZGF0YS5sZW5ndGgsby5sZW5ndGgpO2ZvcihsZXQgdT0wO3U8by5sZW5ndGg7dSsrKXtsZXQgZD1vW3VdO2QucHJvdmlkZXJzUmVzb2x2ZXImJmQucHJvdmlkZXJzUmVzb2x2ZXIoZCl9bGV0IGE9ITEsbD0hMSxjPXEwKG4sdCxvLmxlbmd0aCxudWxsKTtmb3IobGV0IHU9MDt1PG8ubGVuZ3RoO3UrKyl7bGV0IGQ9b1t1XTtlLm1lcmdlZEF0dHJzPWoxKGUubWVyZ2VkQXR0cnMsZC5ob3N0QXR0cnMpLF9xKG4sZSx0LGMsZCkscXllKGMsZCxzKSxudWxsIT09ZC5jb250ZW50UXVlcmllcyYmKGUuZmxhZ3N8PTgpLChudWxsIT09ZC5ob3N0QmluZGluZ3N8fG51bGwhPT1kLmhvc3RBdHRyc3x8MCE9PWQuaG9zdFZhcnMpJiYoZS5mbGFnc3w9MTI4KTtsZXQgcD1kLnR5cGUucHJvdG90eXBlOyFhJiYocC5uZ09uQ2hhbmdlc3x8cC5uZ09uSW5pdHx8cC5uZ0RvQ2hlY2spJiYoKG4ucHJlT3JkZXJIb29rc3x8KG4ucHJlT3JkZXJIb29rcz1bXSkpLnB1c2goZS5pbmRleCksYT0hMCksIWwmJihwLm5nT25DaGFuZ2VzfHxwLm5nRG9DaGVjaykmJigobi5wcmVPcmRlckNoZWNrSG9va3N8fChuLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2goZS5pbmRleCksbD0hMCksYysrfWRxKG4sZSl9cyYmZnVuY3Rpb24obix0LGUpe2lmKHQpe2xldCBpPW4ubG9jYWxOYW1lcz1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrPTIpe2xldCBvPWVbdFtyKzFdXTtpZihudWxsPT1vKXRocm93IG5ldyBBdCgtMzAxLCExKTtpLnB1c2godFtyXSxvKX19fShlLGkscyl9cmV0dXJuIGUubWVyZ2VkQXR0cnM9ajEoZS5tZXJnZWRBdHRycyxlLmF0dHJzKSxyfWZ1bmN0aW9uIGhxKG4sdCxlLGkscixvKXtsZXQgcz1vLmhvc3RCaW5kaW5ncztpZihzKXtsZXQgYT1uLmhvc3RCaW5kaW5nT3BDb2RlcztudWxsPT09YSYmKGE9bi5ob3N0QmluZGluZ09wQ29kZXM9W10pO2xldCBsPX50LmluZGV4OyhmdW5jdGlvbihuKXtsZXQgdD1uLmxlbmd0aDtmb3IoO3Q+MDspe2xldCBlPW5bLS10XTtpZigibnVtYmVyIj09dHlwZW9mIGUmJmU8MClyZXR1cm4gZX1yZXR1cm4gMH0pKGEpIT1sJiZhLnB1c2gobCksYS5wdXNoKGkscixzKX19ZnVuY3Rpb24gZnEobix0KXtudWxsIT09bi5ob3N0QmluZGluZ3MmJm4uaG9zdEJpbmRpbmdzKDEsdCl9ZnVuY3Rpb24gbXEobix0KXt0LmZsYWdzfD0yLChuLmNvbXBvbmVudHN8fChuLmNvbXBvbmVudHM9W10pKS5wdXNoKHQuaW5kZXgpfWZ1bmN0aW9uIHF5ZShuLHQsZSl7aWYoZSl7aWYodC5leHBvcnRBcylmb3IobGV0IGk9MDtpPHQuZXhwb3J0QXMubGVuZ3RoO2krKyllW3QuZXhwb3J0QXNbaV1dPW47QWModCkmJihlWyIiXT1uKX19ZnVuY3Rpb24gZ3Eobix0LGUpe24uZmxhZ3N8PTEsbi5kaXJlY3RpdmVTdGFydD10LG4uZGlyZWN0aXZlRW5kPXQrZSxuLnByb3ZpZGVySW5kZXhlcz10fWZ1bmN0aW9uIF9xKG4sdCxlLGkscil7bi5kYXRhW2ldPXI7bGV0IG89ci5mYWN0b3J5fHwoci5mYWN0b3J5PVdmKHIudHlwZSkpLHM9bmV3IHFmKG8sQWMociksTSk7bi5ibHVlcHJpbnRbaV09cyxlW2ldPXMsaHEobix0LDAsaSxxMChuLGUsci5ob3N0VmFycyxRbikscil9ZnVuY3Rpb24gWXllKG4sdCxlKXtsZXQgaT1VbCh0LG4pLHI9Y3EoZSksbz1uWzEwXSxzPUNUKG4sYlQobixyLG51bGwsZS5vblB1c2g/MzI6MTYsaSx0LG8sby5jcmVhdGVSZW5kZXJlcihpLGUpLG51bGwsbnVsbCxudWxsKSk7blt0LmluZGV4XT1zfWZ1bmN0aW9uIFR1KG4sdCxlLGkscixvKXtsZXQgcz1VbChuLHQpO1czKHRbMTFdLHMsbyxuLnZhbHVlLGUsaSxyKX1mdW5jdGlvbiBXMyhuLHQsZSxpLHIsbyxzKXtpZihudWxsPT1vKW4ucmVtb3ZlQXR0cmlidXRlKHQscixlKTtlbHNle2xldCBhPW51bGw9PXM/S24obyk6cyhvLGl8fCIiLHIpO24uc2V0QXR0cmlidXRlKHQscixhLGUpfX1mdW5jdGlvbiBYeWUobix0LGUsaSxyLG8pe2xldCBzPW9bdF07aWYobnVsbCE9PXMpe2xldCBhPWkuc2V0SW5wdXQ7Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDspe2xldCBjPXNbbCsrXSx1PXNbbCsrXSxkPXNbbCsrXTtudWxsIT09YT9pLnNldElucHV0KGUsZCxjLHUpOmVbdV09ZH19fWZ1bmN0aW9uIFF5ZShuLHQpe2xldCBlPW51bGwsaT0wO2Zvcig7aTx0Lmxlbmd0aDspe2xldCByPXRbaV07aWYoMCE9PXIpaWYoNSE9PXIpe2lmKCJudW1iZXIiPT10eXBlb2YgcilicmVhaztuLmhhc093blByb3BlcnR5KHIpJiYobnVsbD09PWUmJihlPVtdKSxlLnB1c2gocixuW3JdLHRbaSsxXSkpLGkrPTJ9ZWxzZSBpKz0yO2Vsc2UgaSs9NH1yZXR1cm4gZX1mdW5jdGlvbiB2cShuLHQsZSxpKXtyZXR1cm4gbmV3IEFycmF5KG4sITAsITEsdCxudWxsLDAsaSxlLG51bGwsbnVsbCl9ZnVuY3Rpb24gSnllKG4sdCl7bGV0IGU9cXAodCxuKTtpZihVMShlKSl7bGV0IGk9ZVsxXTs0OCZlWzJdP3hUKGksZSxpLnRlbXBsYXRlLGVbOF0pOmVbNV0+MCYmRkwoZSl9fWZ1bmN0aW9uIEZMKG4pe2ZvcihsZXQgaT1PMyhuKTtudWxsIT09aTtpPWszKGkpKWZvcihsZXQgcj0xMDtyPGkubGVuZ3RoO3IrKyl7bGV0IG89aVtyXTtpZihVMShvKSlpZig1MTImb1syXSl7bGV0IHM9b1sxXTt4VChzLG8scy50ZW1wbGF0ZSxvWzhdKX1lbHNlIG9bNV0+MCYmRkwobyl9bGV0IGU9blsxXS5jb21wb25lbnRzO2lmKG51bGwhPT1lKWZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1xcChlW2ldLG4pO1UxKHIpJiZyWzVdPjAmJkZMKHIpfX1mdW5jdGlvbiAkeWUobix0KXtsZXQgZT1xcCh0LG4pLGk9ZVsxXTsoZnVuY3Rpb24obix0KXtmb3IobGV0IGU9dC5sZW5ndGg7ZTxuLmJsdWVwcmludC5sZW5ndGg7ZSsrKXQucHVzaChuLmJsdWVwcmludFtlXSl9KShpLGUpLEgzKGksZSxlWzhdKX1mdW5jdGlvbiBDVChuLHQpe3JldHVybiBuWzEzXT9uWzE0XVs0XT10Om5bMTNdPXQsblsxNF09dCx0fWZ1bmN0aW9uIHlxKG4pe2Zvcig7bjspe25bMl18PTMyO2xldCB0PVIzKG4pO2lmKHEwZShuKSYmIXQpcmV0dXJuIG47bj10fXJldHVybiBudWxsfWZ1bmN0aW9uIGJxKG4sdCxlLGk9ITApe2xldCByPXRbMTBdO3IuYmVnaW4mJnIuYmVnaW4oKTt0cnl7eFQobix0LG4udGVtcGxhdGUsZSl9Y2F0Y2gocyl7dGhyb3cgaSYmd3EodCxzKSxzfWZpbmFsbHl7ci5lbmQmJnIuZW5kKCl9fWZ1bmN0aW9uIE5MKG4sdCxlKXt2MygwKSx0KG4sZSl9ZnVuY3Rpb24geHEobil7cmV0dXJuIG5bN118fChuWzddPVtdKX1mdW5jdGlvbiBDcShuKXtyZXR1cm4gbi5jbGVhbnVwfHwobi5jbGVhbnVwPVtdKX1mdW5jdGlvbiBNcShuLHQsZSl7cmV0dXJuKG51bGw9PT1ufHxBYyhuKSkmJihlPWZ1bmN0aW9uKG4pe2Zvcig7QXJyYXkuaXNBcnJheShuKTspe2lmKCJvYmplY3QiPT10eXBlb2YgblsxXSlyZXR1cm4gbjtuPW5bMF19cmV0dXJuIG51bGx9KGVbdC5pbmRleF0pKSxlWzExXX1mdW5jdGlvbiB3cShuLHQpe2xldCBlPW5bOV0saT1lP2UuZ2V0KFFzLG51bGwpOm51bGw7aSYmaS5oYW5kbGVFcnJvcih0KX1mdW5jdGlvbiBxMyhuLHQsZSxpLHIpe2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7KXtsZXQgcz1lW28rK10sYT1lW28rK10sbD10W3NdLGM9bi5kYXRhW3NdO251bGwhPT1jLnNldElucHV0P2Muc2V0SW5wdXQobCxyLGksYSk6bFthXT1yfX1mdW5jdGlvbiBqZChuLHQsZSl7bGV0IGk9cFQodCxuKTtWOShuWzExXSxpLGUpfWZ1bmN0aW9uICQxKG4sdCxlKXtsZXQgaT1lP24uc3R5bGVzOm51bGwscj1lP24uY2xhc3NlczpudWxsLG89MDtpZihudWxsIT09dClmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrKyl7bGV0IGE9dFtzXTsibnVtYmVyIj09dHlwZW9mIGE/bz1hOjE9PW8/cj10TChyLGEpOjI9PW8mJihpPXRMKGksYSsiOiAiK3RbKytzXSsiOyIpKX1lP24uc3R5bGVzPWk6bi5zdHlsZXNXaXRob3V0SG9zdD1pLGU/bi5jbGFzc2VzPXI6bi5jbGFzc2VzV2l0aG91dEhvc3Q9cn1mdW5jdGlvbiBrMShuLHQsZSxpLHI9ITEpe2Zvcig7bnVsbCE9PWU7KXtsZXQgbz10W2UuaW5kZXhdO2lmKG51bGwhPT1vJiZpLnB1c2goJGEobykpLFZkKG8pKWZvcihsZXQgYT0xMDthPG8ubGVuZ3RoO2ErKyl7bGV0IGw9b1thXSxjPWxbMV0uZmlyc3RDaGlsZDtudWxsIT09YyYmazEobFsxXSxsLGMsaSl9bGV0IHM9ZS50eXBlO2lmKDgmcylrMShuLHQsZS5jaGlsZCxpKTtlbHNlIGlmKDMyJnMpe2xldCBsLGE9UDMoZSx0KTtmb3IoO2w9YSgpOylpLnB1c2gobCl9ZWxzZSBpZigxNiZzKXtsZXQgYT1ROSh0LGUpO2lmKEFycmF5LmlzQXJyYXkoYSkpaS5wdXNoKC4uLmEpO2Vsc2V7bGV0IGw9UjModFsxNl0pO2sxKGxbMV0sbCxhLGksITApfX1lPXI/ZS5wcm9qZWN0aW9uTmV4dDplLm5leHR9cmV0dXJuIGl9dmFyIFFmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fbFZpZXc9dCx0aGlzLl9jZFJlZkluamVjdGluZ1ZpZXc9ZSx0aGlzLl9hcHBSZWY9bnVsbCx0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMX1nZXQgcm9vdE5vZGVzKCl7bGV0IHQ9dGhpcy5fbFZpZXcsZT10WzFdO3JldHVybiBrMShlLHQsZS5maXJzdENoaWxkLFtdKX1nZXQgY29udGV4dCgpe3JldHVybiB0aGlzLl9sVmlld1s4XX1zZXQgY29udGV4dCh0KXt0aGlzLl9sVmlld1s4XT10fWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gMTI4PT0oMTI4JnRoaXMuX2xWaWV3WzJdKX1kZXN0cm95KCl7aWYodGhpcy5fYXBwUmVmKXRoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHRoaXMpO2Vsc2UgaWYodGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIpe2xldCB0PXRoaXMuX2xWaWV3WzNdO2lmKFZkKHQpKXtsZXQgZT10WzhdLGk9ZT9lLmluZGV4T2YodGhpcyk6LTE7aT4tMSYmKEFMKHQsaSksWDEoZSxpKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9VTkodGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcpfW9uRGVzdHJveSh0KXt1cSh0aGlzLl9sVmlld1sxXSx0aGlzLl9sVmlldyxudWxsLHQpfW1hcmtGb3JDaGVjaygpe3lxKHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlld3x8dGhpcy5fbFZpZXcpfWRldGFjaCgpe3RoaXMuX2xWaWV3WzJdJj0tNjV9cmVhdHRhY2goKXt0aGlzLl9sVmlld1syXXw9NjR9ZGV0ZWN0Q2hhbmdlcygpe2JxKHRoaXMuX2xWaWV3WzFdLHRoaXMuX2xWaWV3LHRoaXMuY29udGV4dCl9Y2hlY2tOb0NoYW5nZXMoKXt9YXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKCl7aWYodGhpcy5fYXBwUmVmKXRocm93IG5ldyBBdCg5MDIsITEpO3RoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSEwfWRldGFjaEZyb21BcHBSZWYoKXt2YXIgdDt0aGlzLl9hcHBSZWY9bnVsbCxxeCh0aGlzLl9sVmlld1sxXSx0PXRoaXMuX2xWaWV3LHRbMTFdLDIsbnVsbCxudWxsKX1hdHRhY2hUb0FwcFJlZih0KXtpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil0aHJvdyBuZXcgQXQoOTAyLCExKTt0aGlzLl9hcHBSZWY9dH19LExMPWNsYXNzIGV4dGVuZHMgUWZ7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fdmlldz10fWRldGVjdENoYW5nZXMoKXtsZXQgdD10aGlzLl92aWV3O2JxKHRbMV0sdCx0WzhdLCExKX1jaGVja05vQ2hhbmdlcygpe31nZXQgY29udGV4dCgpe3JldHVybiBudWxsfX0sQXg9Y2xhc3MgZXh0ZW5kcyBnc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMubmdNb2R1bGU9dH1yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KXtsZXQgZT1ObCh0KTtyZXR1cm4gbmV3IGVUKGUsdGhpcy5uZ01vZHVsZSl9fTtmdW5jdGlvbiByNyhuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbiluLmhhc093blByb3BlcnR5KGUpJiZ0LnB1c2goe3Byb3BOYW1lOm5bZV0sdGVtcGxhdGVOYW1lOmV9KTtyZXR1cm4gdH12YXIgZVQ9Y2xhc3MgZXh0ZW5kcyBKMXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5jb21wb25lbnREZWY9dCx0aGlzLm5nTW9kdWxlPWUsdGhpcy5jb21wb25lbnRUeXBlPXQudHlwZSx0aGlzLnNlbGVjdG9yPXQuc2VsZWN0b3JzLm1hcChDeWUpLmpvaW4oIiwiKSx0aGlzLm5nQ29udGVudFNlbGVjdG9ycz10Lm5nQ29udGVudFNlbGVjdG9ycz90Lm5nQ29udGVudFNlbGVjdG9yczpbXSx0aGlzLmlzQm91bmRUb01vZHVsZT0hIWV9Z2V0IGlucHV0cygpe3JldHVybiByNyh0aGlzLmNvbXBvbmVudERlZi5pbnB1dHMpfWdldCBvdXRwdXRzKCl7cmV0dXJuIHI3KHRoaXMuY29tcG9uZW50RGVmLm91dHB1dHMpfWNyZWF0ZSh0LGUsaSxyKXtsZXQgbz0ocj1yfHx0aGlzLm5nTW9kdWxlKWluc3RhbmNlb2YganA/cjpyPy5pbmplY3RvcjtvJiZudWxsIT09dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yJiYobz10aGlzLmNvbXBvbmVudERlZi5nZXRTdGFuZGFsb25lSW5qZWN0b3Iobyl8fG8pO2xldCBzPW8/bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pbmplY3Rvcj10LHRoaXMucGFyZW50SW5qZWN0b3I9ZX1nZXQodCxlLGkpe2xldCByPXRoaXMuaW5qZWN0b3IuZ2V0KHQsSE4saSk7cmV0dXJuIHIhPT1ITnx8ZT09PUhOP3I6dGhpcy5wYXJlbnRJbmplY3Rvci5nZXQodCxlLGkpfX0odCxvKTp0LGE9cy5nZXQod3UsbnVsbCk7aWYobnVsbD09PWEpdGhyb3cgbmV3IEF0KDQwNywhMSk7bGV0IG0seCxsPXMuZ2V0KEh2ZSxudWxsKSxjPWEuY3JlYXRlUmVuZGVyZXIobnVsbCx0aGlzLmNvbXBvbmVudERlZiksdT10aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF1bMF18fCJkaXYiLGQ9aT9mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG4uc2VsZWN0Um9vdEVsZW1lbnQodCxlPT09SmEuU2hhZG93RG9tKX0oYyxpLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24pOk4zKGMsdSxmdW5jdGlvbihuKXtsZXQgdD1uLnRvTG93ZXJDYXNlKCk7cmV0dXJuInN2ZyI9PT10PyJzdmciOiJtYXRoIj09PXQ/Im1hdGgiOm51bGx9KHUpKSxwPXRoaXMuY29tcG9uZW50RGVmLm9uUHVzaD8yODg6MjcyLGg9ajMoMCxudWxsLG51bGwsMSwwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksZj1iVChudWxsLGgsbnVsbCxwLG51bGwsbnVsbCxhLGMsbCxzLG51bGwpO3kzKGYpO3RyeXtsZXQgZz1mdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IHM9ZVsxXTtlWzIyXT1uO2xldCBsPVcwKHMsMjIsMiwiI2hvc3QiLG51bGwpLGM9bC5tZXJnZWRBdHRycz10Lmhvc3RBdHRycztudWxsIT09YyYmKCQxKGwsYywhMCksbnVsbCE9PW4mJih6MShyLG4sYyksbnVsbCE9PWwuY2xhc3NlcyYmQjMocixuLGwuY2xhc3NlcyksbnVsbCE9PWwuc3R5bGVzJiZKOShyLG4sbC5zdHlsZXMpKSk7bGV0IHU9aS5jcmVhdGVSZW5kZXJlcihuLHQpLGQ9YlQoZSxjcSh0KSxudWxsLHQub25QdXNoPzMyOjE2LGVbMjJdLGwsaSx1LG51bGwsbnVsbCxudWxsKTtyZXR1cm4gcy5maXJzdENyZWF0ZVBhc3MmJihZMShTeChsLGUpLHMsdC50eXBlKSxtcShzLGwpLGdxKGwsZS5sZW5ndGgsMSkpLENUKGUsZCksZVsyMl09ZH0oZCx0aGlzLmNvbXBvbmVudERlZixmLGEsYyk7aWYoZClpZihpKXoxKGMsZCxbIm5nLXZlcnNpb24iLFV2ZS5mdWxsXSk7ZWxzZXtsZXR7YXR0cnM6YixjbGFzc2VzOkR9PWZ1bmN0aW9uKG4pe2xldCB0PVtdLGU9W10saT0xLHI9Mjtmb3IoO2k8bi5sZW5ndGg7KXtsZXQgbz1uW2ldO2lmKCJzdHJpbmciPT10eXBlb2YgbykyPT09cj8iIiE9PW8mJnQucHVzaChvLG5bKytpXSk6OD09PXImJmUucHVzaChvKTtlbHNle2lmKCFTYyhyKSlicmVhaztyPW99aSsrfXJldHVybnthdHRyczp0LGNsYXNzZXM6ZX19KHRoaXMuY29tcG9uZW50RGVmLnNlbGVjdG9yc1swXSk7YiYmejEoYyxkLGIpLEQmJkQubGVuZ3RoPjAmJkIzKGMsZCxELmpvaW4oIiAiKSl9aWYoeD1INyhoLDIyKSx2b2lkIDAhPT1lKXtsZXQgYj14LnByb2plY3Rpb249W107Zm9yKGxldCBEPTA7RDx0aGlzLm5nQ29udGVudFNlbGVjdG9ycy5sZW5ndGg7RCsrKXtsZXQgVD1lW0RdO2IucHVzaChudWxsIT1UP0FycmF5LmZyb20oVCk6bnVsbCl9fW09ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9ZVsxXSxvPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT16bygpO24uZmlyc3RDcmVhdGVQYXNzJiYoZS5wcm92aWRlcnNSZXNvbHZlciYmZS5wcm92aWRlcnNSZXNvbHZlcihlKSxfcShuLGksdCxxMChuLHQsMSxudWxsKSxlKSxkcShuLGkpKTtsZXQgcj1CeCh0LG4saS5kaXJlY3RpdmVTdGFydCxpKTtTdShyLHQpO2xldCBvPVVsKGksdCk7cmV0dXJuIG8mJlN1KG8sdCkscn0ocixlLHQpO2lmKG5bOF09ZVs4XT1vLG51bGwhPT1pKWZvcihsZXQgYSBvZiBpKWEobyx0KTtpZih0LmNvbnRlbnRRdWVyaWVzKXtsZXQgYT16bygpO3QuY29udGVudFF1ZXJpZXMoMSxvLGEuZGlyZWN0aXZlU3RhcnQpfWxldCBzPXpvKCk7cmV0dXJuIXIuZmlyc3RDcmVhdGVQYXNzfHxudWxsPT09dC5ob3N0QmluZGluZ3MmJm51bGw9PT10Lmhvc3RBdHRyc3x8KHpwKHMuaW5kZXgpLGhxKGVbMV0scywwLHMuZGlyZWN0aXZlU3RhcnQscy5kaXJlY3RpdmVFbmQsdCksZnEodCxvKSksb30oZyx0aGlzLmNvbXBvbmVudERlZixmLFtyYmVdKSxIMyhoLGYsbnVsbCl9ZmluYWxseXtiMygpfXJldHVybiBuZXcgVkwodGhpcy5jb21wb25lbnRUeXBlLG0sRzAoeCxmKSxmLHgpfX0sVkw9KG5ldyBBeCxjbGFzcyBleHRlbmRzIEVMe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPWksdGhpcy5fcm9vdExWaWV3PXIsdGhpcy5fdE5vZGU9byx0aGlzLmluc3RhbmNlPWUsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBMTChyKSx0aGlzLmNvbXBvbmVudFR5cGU9dH1zZXRJbnB1dCh0LGUpe2xldCByLGk9dGhpcy5fdE5vZGUuaW5wdXRzO2lmKG51bGwhPT1pJiYocj1pW3RdKSl7bGV0IG89dGhpcy5fcm9vdExWaWV3O3EzKG9bMV0sbyxyLHQsZSkscHEobyx0aGlzLl90Tm9kZS5pbmRleCl9fWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgamYodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25EZXN0cm95KHQpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KHQpfX0pO2Z1bmN0aW9uIHJiZSgpe2xldCBuPXpvKCk7aFQocnQoKVsxXSxuKX1mdW5jdGlvbiBTcShuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1mdW5jdGlvbiB0dChuKXtsZXQgdD1TcShuLnR5cGUpLGU9ITAsaT1bbl07Zm9yKDt0Oyl7bGV0IHI7aWYoQWMobikpcj10Llx1MDI3NWNtcHx8dC5cdTAyNzVkaXI7ZWxzZXtpZih0Llx1MDI3NWNtcCl0aHJvdyBuZXcgQXQoOTAzLCExKTtyPXQuXHUwMjc1ZGlyfWlmKHIpe2lmKGUpe2kucHVzaChyKTtsZXQgcz1uO3MuaW5wdXRzPUdOKG4uaW5wdXRzKSxzLmRlY2xhcmVkSW5wdXRzPUdOKG4uZGVjbGFyZWRJbnB1dHMpLHMub3V0cHV0cz1HTihuLm91dHB1dHMpO2xldCBhPXIuaG9zdEJpbmRpbmdzO2EmJmxiZShuLGEpO2xldCBsPXIudmlld1F1ZXJ5LGM9ci5jb250ZW50UXVlcmllcztpZihsJiZzYmUobixsKSxjJiZhYmUobixjKSxrTihuLmlucHV0cyxyLmlucHV0cyksa04obi5kZWNsYXJlZElucHV0cyxyLmRlY2xhcmVkSW5wdXRzKSxrTihuLm91dHB1dHMsci5vdXRwdXRzKSxBYyhyKSYmci5kYXRhLmFuaW1hdGlvbil7bGV0IHU9bi5kYXRhO3UuYW5pbWF0aW9uPSh1LmFuaW1hdGlvbnx8W10pLmNvbmNhdChyLmRhdGEuYW5pbWF0aW9uKX19bGV0IG89ci5mZWF0dXJlcztpZihvKWZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKXtsZXQgYT1vW3NdO2EmJmEubmdJbmhlcml0JiZhKG4pLGE9PT10dCYmKGU9ITEpfX10PU9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0hZnVuY3Rpb24obil7bGV0IHQ9MCxlPW51bGw7Zm9yKGxldCBpPW4ubGVuZ3RoLTE7aT49MDtpLS0pe2xldCByPW5baV07ci5ob3N0VmFycz10Kz1yLmhvc3RWYXJzLHIuaG9zdEF0dHJzPWoxKHIuaG9zdEF0dHJzLGU9ajEoZSxyLmhvc3RBdHRycykpfX0oaSl9ZnVuY3Rpb24gR04obil7cmV0dXJuIG49PT1BMD97fTpuPT09UWk/W106bn1mdW5jdGlvbiBzYmUobix0KXtsZXQgZT1uLnZpZXdRdWVyeTtuLnZpZXdRdWVyeT1lPyhpLHIpPT57dChpLHIpLGUoaSxyKX06dH1mdW5jdGlvbiBhYmUobix0KXtsZXQgZT1uLmNvbnRlbnRRdWVyaWVzO24uY29udGVudFF1ZXJpZXM9ZT8oaSxyLG8pPT57dChpLHIsbyksZShpLHIsbyl9OnR9ZnVuY3Rpb24gbGJlKG4sdCl7bGV0IGU9bi5ob3N0QmluZGluZ3M7bi5ob3N0QmluZGluZ3M9ZT8oaSxyKT0+e3QoaSxyKSxlKGkscil9OnR9dmFyIGNiZT1bInByb3ZpZGVyc1Jlc29sdmVyIl0sdWJlPVsidGVtcGxhdGUiLCJkZWNscyIsImNvbnN0cyIsInZhcnMiLCJvblB1c2giLCJuZ0NvbnRlbnRTZWxlY3RvcnMiLCJzdHlsZXMiLCJlbmNhcHN1bGF0aW9uIiwic2NoZW1hcyJdO3ZhciBUMT1udWxsO2Z1bmN0aW9uIE1UKCl7aWYoIVQxKXtsZXQgbj10by5TeW1ib2w7aWYobiYmbi5pdGVyYXRvcilUMT1uLml0ZXJhdG9yO2Vsc2V7bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTWFwLnByb3RvdHlwZSk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDsrK2Upe2xldCBpPXRbZV07ImVudHJpZXMiIT09aSYmInNpemUiIT09aSYmTWFwLnByb3RvdHlwZVtpXT09PU1hcC5wcm90b3R5cGUuZW50cmllcyYmKFQxPWkpfX19cmV0dXJuIFQxfWZ1bmN0aW9uIHdUKG4pe3JldHVybiEhWTMobikmJihBcnJheS5pc0FycmF5KG4pfHwhKG4gaW5zdGFuY2VvZiBNYXApJiZNVCgpaW4gbil9ZnVuY3Rpb24gWTMobil7cmV0dXJuIG51bGwhPT1uJiYoImZ1bmN0aW9uIj09dHlwZW9mIG58fCJvYmplY3QiPT10eXBlb2Ygbil9ZnVuY3Rpb24gRHUobix0LGUpe3JldHVybiBuW3RdPWV9ZnVuY3Rpb24gWXgobix0KXtyZXR1cm4gblt0XX1mdW5jdGlvbiBEcyhuLHQsZSl7cmV0dXJuIU9iamVjdC5pcyhuW3RdLGUpJiYoblt0XT1lLCEwKX1mdW5jdGlvbiBLZihuLHQsZSxpKXtsZXQgcj1EcyhuLHQsZSk7cmV0dXJuIERzKG4sdCsxLGkpfHxyfWZ1bmN0aW9uIFNUKG4sdCxlLGkscil7bGV0IG89S2Yobix0LGUsaSk7cmV0dXJuIERzKG4sdCsyLHIpfHxvfWZ1bmN0aW9uIFZsKG4sdCxlLGkscixvKXtsZXQgcz1LZihuLHQsZSxpKTtyZXR1cm4gS2Yobix0KzIscixvKXx8c31mdW5jdGlvbiB6ZShuLHQsZSxpKXtsZXQgcj1ydCgpO3JldHVybiBEcyhyLFUwKCksdCkmJihGaSgpLFR1KG5vKCkscixuLHQsZSxpKSksemV9ZnVuY3Rpb24gWTAobix0KXtsZXQgZT0hMSxpPUhkKCk7Zm9yKGxldCBvPTE7bzx0Lmxlbmd0aDtvKz0yKWU9RHMobixpKyssdFtvXSl8fGU7aWYoRzcoaSksIWUpcmV0dXJuIFFuO2xldCByPXRbMF07Zm9yKGxldCBvPTE7bzx0Lmxlbmd0aDtvKz0yKXIrPUtuKHRbb10pK3RbbysxXTtyZXR1cm4gcn1mdW5jdGlvbiBYMChuLHQsZSxpKXtyZXR1cm4gRHMobixVMCgpLGUpP3QrS24oZSkraTpRbn1mdW5jdGlvbiBRMChuLHQsZSxpLHIsbyl7bGV0IGE9S2YobixIZCgpLGUscik7cmV0dXJuIFVkKDIpLGE/dCtLbihlKStpK0tuKHIpK286UW59ZnVuY3Rpb24gSzAobix0LGUsaSxyLG8scyxhKXtsZXQgYz1TVChuLEhkKCksZSxyLHMpO3JldHVybiBVZCgzKSxjP3QrS24oZSkraStLbihyKStvK0tuKHMpK2E6UW59ZnVuY3Rpb24gWjAobix0LGUsaSxyLG8scyxhLGwsYyl7bGV0IGQ9VmwobixIZCgpLGUscixzLGwpO3JldHVybiBVZCg0KSxkP3QrS24oZSkraStLbihyKStvK0tuKHMpK2ErS24obCkrYzpRbn1mdW5jdGlvbiBKMChuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCl7bGV0IHA9SGQoKSxoPVZsKG4scCxlLHIscyxsKTtyZXR1cm4gaD1EcyhuLHArNCx1KXx8aCxVZCg1KSxoP3QrS24oZSkraStLbihyKStvK0tuKHMpK2ErS24obCkrYytLbih1KStkOlFufWZ1bmN0aW9uICQwKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCl7bGV0IGY9SGQoKSxtPVZsKG4sZixlLHIscyxsKTtyZXR1cm4gbT1LZihuLGYrNCx1LHApfHxtLFVkKDYpLG0/dCtLbihlKStpK0tuKHIpK28rS24ocykrYStLbihsKStjK0tuKHUpK2QrS24ocCkraDpRbn1mdW5jdGlvbiBlXyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtKXtsZXQgeD1IZCgpLGc9Vmwobix4LGUscixzLGwpO3JldHVybiBnPVNUKG4seCs0LHUscCxmKXx8ZyxVZCg3KSxnP3QrS24oZSkraStLbihyKStvK0tuKHMpK2ErS24obCkrYytLbih1KStkK0tuKHApK2grS24oZikrbTpRbn1mdW5jdGlvbiB0XyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLHgsZyl7bGV0IGI9SGQoKSxEPVZsKG4sYixlLHIscyxsKTtyZXR1cm4gRD1WbChuLGIrNCx1LHAsZix4KXx8RCxVZCg4KSxEP3QrS24oZSkraStLbihyKStvK0tuKHMpK2ErS24obCkrYytLbih1KStkK0tuKHApK2grS24oZikrbStLbih4KStnOlFufWZ1bmN0aW9uIEUobix0LGUsaSxyLG8scyxhKXtsZXQgbD1ydCgpLGM9RmkoKSx1PW4rMjIsZD1jLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCl7bGV0IGM9dC5jb25zdHMsdT1XMCh0LG4sNCxzfHxudWxsLFVwKGMsYSkpO0czKHQsZSx1LFVwKGMsbCkpLGhUKHQsdSk7bGV0IGQ9dS50Vmlld3M9ajMoMix1LGkscixvLHQuZGlyZWN0aXZlUmVnaXN0cnksdC5waXBlUmVnaXN0cnksbnVsbCx0LnNjaGVtYXMsYyk7cmV0dXJuIG51bGwhPT10LnF1ZXJpZXMmJih0LnF1ZXJpZXMudGVtcGxhdGUodCx1KSxkLnF1ZXJpZXM9dC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcodSkpLHV9KHUsYyxsLHQsZSxpLHIsbyxzKTpjLmRhdGFbdV07TXUoZCwhMSk7bGV0IHA9bFsxMV0uY3JlYXRlQ29tbWVudCgiIik7eVQoYyxsLHAsZCksU3UocCxsKSxDVChsLGxbdV09dnEocCxsLHAsZCkpLGRUKGQpJiZVMyhjLGwsZCksbnVsbCE9cyYmejMobCxkLGEpfWZ1bmN0aW9uICRlKG4pe3JldHVybiBIMChabi5sRnJhbWUuY29udGV4dExWaWV3LDIyK24pfWZ1bmN0aW9uIHkobix0LGUpe2xldCBpPXJ0KCk7cmV0dXJuIERzKGksVTAoKSx0KSYmaWwoRmkoKSxubygpLGksbix0LGlbMTFdLGUsITEpLHl9ZnVuY3Rpb24gSEwobix0LGUsaSxyKXtsZXQgcz1yPyJjbGFzcyI6InN0eWxlIjtxMyhuLGUsdC5pbnB1dHNbc10scyxpKX1mdW5jdGlvbiBfKG4sdCxlLGkpe2xldCByPXJ0KCksbz1GaSgpLHM9MjIrbixhPXJbMTFdLGw9cltzXT1OMyhhLHQsWm4ubEZyYW1lLmN1cnJlbnROYW1lc3BhY2UpLGM9by5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24obix0LGUsaSxyLG8scyl7bGV0IGE9dC5jb25zdHMsYz1XMCh0LG4sMixyLFVwKGEsbykpO3JldHVybiBHMyh0LGUsYyxVcChhLHMpKSxudWxsIT09Yy5hdHRycyYmJDEoYyxjLmF0dHJzLCExKSxudWxsIT09Yy5tZXJnZWRBdHRycyYmJDEoYyxjLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09dC5xdWVyaWVzJiZ0LnF1ZXJpZXMuZWxlbWVudFN0YXJ0KHQsYyksY30ocyxvLHIsMCx0LGUsaSk6by5kYXRhW3NdO011KGMsITApO2xldCB1PWMubWVyZ2VkQXR0cnM7bnVsbCE9PXUmJnoxKGEsbCx1KTtsZXQgZD1jLmNsYXNzZXM7bnVsbCE9PWQmJkIzKGEsbCxkKTtsZXQgcD1jLnN0eWxlcztyZXR1cm4gbnVsbCE9PXAmJko5KGEsbCxwKSw2NCE9KDY0JmMuZmxhZ3MpJiZ5VChvLHIsbCxjKSwwPT09Wm4ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50JiZTdShsLHIpLFpuLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCsrLGRUKGMpJiYoVTMobyxyLGMpLGxxKG8sYyxyKSksbnVsbCE9PWkmJnozKHIsYyksX31mdW5jdGlvbiB2KCl7bGV0IG49em8oKTttMygpP2czKCk6KG49bi5wYXJlbnQsTXUobiwhMSkpO2xldCB0PW47Wm4ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50LS07bGV0IGU9RmkoKTtyZXR1cm4gZS5maXJzdENyZWF0ZVBhc3MmJihoVChlLG4pLHAzKG4pJiZlLnF1ZXJpZXMuZWxlbWVudEVuZChuKSksbnVsbCE9dC5jbGFzc2VzV2l0aG91dEhvc3QmJmZ1bmN0aW9uKG4pe3JldHVybiAwIT0oMTYmbi5mbGFncyl9KHQpJiZITChlLHQscnQoKSx0LmNsYXNzZXNXaXRob3V0SG9zdCwhMCksbnVsbCE9dC5zdHlsZXNXaXRob3V0SG9zdCYmZnVuY3Rpb24obil7cmV0dXJuIDAhPSgzMiZuLmZsYWdzKX0odCkmJkhMKGUsdCxydCgpLHQuc3R5bGVzV2l0aG91dEhvc3QsITEpLHZ9ZnVuY3Rpb24gTyhuLHQsZSxpKXtyZXR1cm4gXyhuLHQsZSxpKSx2KCksT31mdW5jdGlvbiBzbihuLHQsZSl7bGV0IGk9cnQoKSxyPUZpKCksbz1uKzIyLHM9ci5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz10LmNvbnN0cyxzPVVwKG8saSksYT1XMCh0LG4sOCwibmctY29udGFpbmVyIixzKTtyZXR1cm4gbnVsbCE9PXMmJiQxKGEscywhMCksRzModCxlLGEsVXAobyxyKSksbnVsbCE9PXQucXVlcmllcyYmdC5xdWVyaWVzLmVsZW1lbnRTdGFydCh0LGEpLGF9KG8scixpLHQsZSk6ci5kYXRhW29dO011KHMsITApO2xldCBhPWlbb109aVsxMV0uY3JlYXRlQ29tbWVudCgiIik7cmV0dXJuIHlUKHIsaSxhLHMpLFN1KGEsaSksZFQocykmJihVMyhyLGkscyksbHEocixzLGkpKSxudWxsIT1lJiZ6MyhpLHMpLHNufWZ1bmN0aW9uIGFuKCl7bGV0IG49em8oKSx0PUZpKCk7cmV0dXJuIG0zKCk/ZzMoKToobj1uLnBhcmVudCxNdShuLCExKSksdC5maXJzdENyZWF0ZVBhc3MmJihoVCh0LG4pLHAzKG4pJiZ0LnF1ZXJpZXMuZWxlbWVudEVuZChuKSksYW59ZnVuY3Rpb24gTmkobix0LGUpe3JldHVybiBzbihuLHQsZSksYW4oKSxOaX1mdW5jdGlvbiBQZSgpe3JldHVybiBydCgpfWZ1bmN0aW9uIG5fKG4pe3JldHVybiEhbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4udGhlbn1mdW5jdGlvbiBYMyhuKXtyZXR1cm4hIW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnN1YnNjcmliZX12YXIgUTM9WDM7ZnVuY3Rpb24gUChuLHQsZSxpKXtsZXQgcj1ydCgpLG89RmkoKSxzPXpvKCk7cmV0dXJuIEZxKG8scixyWzExXSxzLG4sdCwwLGkpLFB9ZnVuY3Rpb24gaV8obix0KXtsZXQgZT16bygpLGk9cnQoKSxyPUZpKCk7cmV0dXJuIEZxKHIsaSxNcShfMyhyLmRhdGEpLGUsaSksZSxuLHQpLGlffWZ1bmN0aW9uIEZxKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9ZFQoaSksdT1uLmZpcnN0Q3JlYXRlUGFzcyYmQ3EobikscD14cSh0KSxoPSEwO2lmKDMmaS50eXBlfHxhKXtsZXQgeD1VbChpLHQpLGc9YT9hKHgpOngsYj1wLmxlbmd0aCxEPWE/az0+YSgkYShrW2kuaW5kZXhdKSk6aS5pbmRleCxUPW51bGw7aWYoIWEmJmwmJihUPWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW4uY2xlYW51cDtpZihudWxsIT1yKWZvcihsZXQgbz0wO288ci5sZW5ndGgtMTtvKz0yKXtsZXQgcz1yW29dO2lmKHM9PT1lJiZyW28rMV09PT1pKXtsZXQgYT10WzddLGw9cltvKzJdO3JldHVybiBhLmxlbmd0aD5sP2FbbF06bnVsbH0ic3RyaW5nIj09dHlwZW9mIHMmJihvKz0yKX1yZXR1cm4gbnVsbH0obix0LHIsaS5pbmRleCkpLG51bGwhPT1UKShULl9fbmdMYXN0TGlzdGVuZXJGbl9ffHxUKS5fX25nTmV4dExpc3RlbmVyRm5fXz1vLFQuX19uZ0xhc3RMaXN0ZW5lckZuX189byxoPSExO2Vsc2V7bz1zNyhpLHQsMCxvLCExKTtsZXQgaz1lLmxpc3RlbihnLHIsbyk7cC5wdXNoKG8sayksdSYmdS5wdXNoKHIsRCxiLGIrMSl9fWVsc2Ugbz1zNyhpLHQsMCxvLCExKTtsZXQgbSxmPWkub3V0cHV0cztpZihoJiZudWxsIT09ZiYmKG09ZltyXSkpe2xldCB4PW0ubGVuZ3RoO2lmKHgpZm9yKGxldCBnPTA7Zzx4O2crPTIpe2xldCBaPXRbbVtnXV1bbVtnKzFdXS5zdWJzY3JpYmUobyksej1wLmxlbmd0aDtwLnB1c2gobyxaKSx1JiZ1LnB1c2gocixpLmluZGV4LHosLSh6KzEpKX19fWZ1bmN0aW9uIG83KG4sdCxlLGkpe3RyeXtyZXR1cm4hMSE9PWUoaSl9Y2F0Y2gocil7cmV0dXJuIHdxKG4sciksITF9fWZ1bmN0aW9uIHM3KG4sdCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uIG8ocyl7aWYocz09PUZ1bmN0aW9uKXJldHVybiBpO3lxKDImbi5mbGFncz9xcChuLmluZGV4LHQpOnQpO2xldCBsPW83KHQsMCxpLHMpLGM9by5fX25nTmV4dExpc3RlbmVyRm5fXztmb3IoO2M7KWw9bzcodCwwLGMscykmJmwsYz1jLl9fbmdOZXh0TGlzdGVuZXJGbl9fO3JldHVybiByJiYhMT09PWwmJihzLnByZXZlbnREZWZhdWx0KCkscy5yZXR1cm5WYWx1ZT0hMSksbH19ZnVuY3Rpb24gUyhuPTEpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4oWm4ubEZyYW1lLmNvbnRleHRMVmlldz1mdW5jdGlvbihuLHQpe2Zvcig7bj4wOyl0PXRbMTVdLG4tLTtyZXR1cm4gdH0obixabi5sRnJhbWUuY29udGV4dExWaWV3KSlbOF19KG4pfWZ1bmN0aW9uIHZiZShuLHQpe2xldCBlPW51bGwsaT1mdW5jdGlvbihuKXtsZXQgdD1uLmF0dHJzO2lmKG51bGwhPXQpe2xldCBlPXQuaW5kZXhPZig1KTtpZigwPT0oMSZlKSlyZXR1cm4gdFtlKzFdfXJldHVybiBudWxsfShuKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG89dFtyXTtpZigiKiIhPT1vKXtpZihudWxsPT09aT9ucShuLG8sITApOnh5ZShpLG8pKXJldHVybiByfWVsc2UgZT1yfXJldHVybiBlfWZ1bmN0aW9uIHhpKG4pe2xldCB0PXJ0KClbMTZdWzZdO2lmKCF0LnByb2plY3Rpb24pe2xldCBpPXQucHJvamVjdGlvbj1meChuP24ubGVuZ3RoOjEsbnVsbCkscj1pLnNsaWNlKCksbz10LmNoaWxkO2Zvcig7bnVsbCE9PW87KXtsZXQgcz1uP3ZiZShvLG4pOjA7bnVsbCE9PXMmJihyW3NdP3Jbc10ucHJvamVjdGlvbk5leHQ9bzppW3NdPW8scltzXT1vKSxvPW8ubmV4dH19fWZ1bmN0aW9uIFZuKG4sdD0wLGUpe2xldCBpPXJ0KCkscj1GaSgpLG89VzAociwyMituLDE2LG51bGwsZXx8bnVsbCk7bnVsbD09PW8ucHJvamVjdGlvbiYmKG8ucHJvamVjdGlvbj10KSxnMygpLDY0IT0oNjQmby5mbGFncykmJmZ1bmN0aW9uKG4sdCxlKXtaOSh0WzExXSwwLHQsZSx6OShuLGUsdCksVzkoZS5wYXJlbnR8fHRbNl0sZSx0KSl9KHIsaSxvKX1mdW5jdGlvbiBaaShuLHQsZSl7cmV0dXJuIFh4KG4sIiIsdCwiIixlKSxaaX1mdW5jdGlvbiBYeChuLHQsZSxpLHIpe2xldCBvPXJ0KCkscz1YMChvLHQsZSxpKTtyZXR1cm4gcyE9PVFuJiZpbChGaSgpLG5vKCksbyxuLHMsb1sxMV0sciwhMSksWHh9ZnVuY3Rpb24gRVQobix0LGUsaSxyLG8scyl7bGV0IGE9cnQoKSxsPVEwKGEsdCxlLGkscixvKTtyZXR1cm4gbCE9PVFuJiZpbChGaSgpLG5vKCksYSxuLGwsYVsxMV0scywhMSksRVR9ZnVuY3Rpb24gYTcobix0LGUsaSxyKXtsZXQgbz1uW2UrMV0scz1udWxsPT09dCxhPWk/WGYobyk6RjAobyksbD0hMTtmb3IoOzAhPT1hJiYoITE9PT1sfHxzKTspe2xldCB1PW5bYSsxXTt4YmUoblthXSx0KSYmKGw9ITAsblthKzFdPWk/a0wodSk6T0wodSkpLGE9aT9YZih1KTpGMCh1KX1sJiYobltlKzFdPWk/T0wobyk6a0wobykpfWZ1bmN0aW9uIHhiZShuLHQpe3JldHVybiBudWxsPT09bnx8bnVsbD09dHx8KEFycmF5LmlzQXJyYXkobik/blsxXTpuKT09PXR8fCEoIUFycmF5LmlzQXJyYXkobil8fCJzdHJpbmciIT10eXBlb2YgdCkmJkh4KG4sdCk+PTB9dmFyIFVvPXt0ZXh0RW5kOjAsa2V5OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiBqcShuKXtyZXR1cm4gbi5zdWJzdHJpbmcoVW8ua2V5LFVvLmtleUVuZCl9ZnVuY3Rpb24gQ2JlKG4pe3JldHVybiBuLnN1YnN0cmluZyhVby52YWx1ZSxVby52YWx1ZUVuZCl9ZnVuY3Rpb24gR3Eobix0KXtsZXQgZT1Vby50ZXh0RW5kO3JldHVybiBlPT09dD8tMToodD1Vby5rZXlFbmQ9ZnVuY3Rpb24obix0LGUpe2Zvcig7dDxlJiZuLmNoYXJDb2RlQXQodCk+MzI7KXQrKztyZXR1cm4gdH0obixVby5rZXk9dCxlKSxOMChuLHQsZSkpfWZ1bmN0aW9uIFdxKG4sdCl7bGV0IGU9VW8udGV4dEVuZCxpPVVvLmtleT1OMChuLHQsZSk7cmV0dXJuIGU9PT1pPy0xOihpPVVvLmtleUVuZD1mdW5jdGlvbihuLHQsZSl7bGV0IGk7Zm9yKDt0PGUmJig0NT09PShpPW4uY2hhckNvZGVBdCh0KSl8fDk1PT09aXx8KC0zMyZpKT49NjUmJigtMzMmaSk8PTkwfHxpPj00OCYmaTw9NTcpOyl0Kys7cmV0dXJuIHR9KG4saSxlKSxpPWw3KG4saSxlKSxpPVVvLnZhbHVlPU4wKG4saSxlKSxpPVVvLnZhbHVlRW5kPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT0tMSxyPS0xLG89LTEscz10LGE9cztmb3IoO3M8ZTspe2xldCBsPW4uY2hhckNvZGVBdChzKyspO2lmKDU5PT09bClyZXR1cm4gYTszND09PWx8fDM5PT09bD9hPXM9YzcobixsLHMsZSk6dD09PXMtNCYmODU9PT1vJiY4Mj09PXImJjc2PT09aSYmNDA9PT1sP2E9cz1jNyhuLDQxLHMsZSk6bD4zMiYmKGE9cyksbz1yLHI9aSxpPS0zMyZsfXJldHVybiBhfShuLGksZSksbDcobixpLGUpKX1mdW5jdGlvbiBxcShuKXtVby5rZXk9MCxVby5rZXlFbmQ9MCxVby52YWx1ZT0wLFVvLnZhbHVlRW5kPTAsVW8udGV4dEVuZD1uLmxlbmd0aH1mdW5jdGlvbiBOMChuLHQsZSl7Zm9yKDt0PGUmJm4uY2hhckNvZGVBdCh0KTw9MzI7KXQrKztyZXR1cm4gdH1mdW5jdGlvbiBsNyhuLHQsZSxpKXtyZXR1cm4odD1OMChuLHQsZSkpPGUmJnQrKyx0fWZ1bmN0aW9uIGM3KG4sdCxlLGkpe2xldCByPS0xLG89ZTtmb3IoO288aTspe2xldCBzPW4uY2hhckNvZGVBdChvKyspO2lmKHM9PXQmJjkyIT09cilyZXR1cm4gbztyPTkyPT1zJiY5Mj09PXI/MDpzfXRocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBQdChuLHQsZSl7cmV0dXJuIFJjKG4sdCxlLCExKSxQdH1mdW5jdGlvbiBldChuLHQpe3JldHVybiBSYyhuLHQsbnVsbCwhMCksZXR9ZnVuY3Rpb24gamwobil7T2MoUXEsRGJlLG4sITEpfWZ1bmN0aW9uIERiZShuLHQpe2ZvcihsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gcXEobiksV3EobixOMChuLDAsVW8udGV4dEVuZCkpfSh0KTtlPj0wO2U9V3EodCxlKSlRcShuLGpxKHQpLENiZSh0KSl9ZnVuY3Rpb24gRGEobil7T2MoZWwsQXUsbiwhMCl9ZnVuY3Rpb24gQXUobix0KXtmb3IobGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIHFxKG4pLEdxKG4sTjAobiwwLFVvLnRleHRFbmQpKX0odCk7ZT49MDtlPUdxKHQsZSkpZWwobixqcSh0KSwhMCl9ZnVuY3Rpb24gUmMobix0LGUsaSl7bGV0IHI9cnQoKSxvPUZpKCkscz1VZCgyKTtvLmZpcnN0VXBkYXRlUGFzcyYmWHEobyxuLHMsaSksdCE9PVFuJiZEcyhyLHMsdCkmJktxKG8sby5kYXRhW1pzKCldLHIsclsxMV0sbixyW3MrMV09ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bnx8KCJzdHJpbmciPT10eXBlb2YgdD9uKz10OiJvYmplY3QiPT10eXBlb2YgbiYmKG49VG8oVGEobikpKSksbn0odCxlKSxpLHMpfWZ1bmN0aW9uIE9jKG4sdCxlLGkpe2xldCByPUZpKCksbz1VZCgyKTtyLmZpcnN0VXBkYXRlUGFzcyYmWHEocixudWxsLG8saSk7bGV0IHM9cnQoKTtpZihlIT09UW4mJkRzKHMsbyxlKSl7bGV0IGE9ci5kYXRhW1pzKCldO2lmKFpxKGEsaSkmJiFZcShyLG8pKXtsZXQgbD1pP2EuY2xhc3Nlc1dpdGhvdXRIb3N0OmEuc3R5bGVzV2l0aG91dEhvc3Q7bnVsbCE9PWwmJihlPXRMKGwsZXx8IiIpKSxITChyLGEscyxlLGkpfWVsc2UhZnVuY3Rpb24obix0LGUsaSxyLG8scyxhKXtyPT09UW4mJihyPVFpKTtsZXQgbD0wLGM9MCx1PTA8ci5sZW5ndGg/clswXTpudWxsLGQ9MDxvLmxlbmd0aD9vWzBdOm51bGw7Zm9yKDtudWxsIT09dXx8bnVsbCE9PWQ7KXtsZXQgbSxwPWw8ci5sZW5ndGg/cltsKzFdOnZvaWQgMCxoPWM8by5sZW5ndGg/b1tjKzFdOnZvaWQgMCxmPW51bGw7dT09PWQ/KGwrPTIsYys9MixwIT09aCYmKGY9ZCxtPWgpKTpudWxsPT09ZHx8bnVsbCE9PXUmJnU8ZD8obCs9MixmPXUpOihjKz0yLGY9ZCxtPWgpLG51bGwhPT1mJiZLcShuLHQsZSxpLGYsbSxzLGEpLHU9bDxyLmxlbmd0aD9yW2xdOm51bGwsZD1jPG8ubGVuZ3RoP29bY106bnVsbH19KHIsYSxzLHNbMTFdLHNbbysxXSxzW28rMV09ZnVuY3Rpb24obix0LGUpe2lmKG51bGw9PWV8fCIiPT09ZSlyZXR1cm4gUWk7bGV0IGk9W10scj1UYShlKTtpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKW4oaSxyW29dLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2Ygcilmb3IobGV0IG8gaW4gcilyLmhhc093blByb3BlcnR5KG8pJiZuKGksbyxyW29dKTtlbHNlInN0cmluZyI9PXR5cGVvZiByJiZ0KGkscik7cmV0dXJuIGl9KG4sdCxlKSxpLG8pfX1mdW5jdGlvbiBZcShuLHQpe3JldHVybiB0Pj1uLmV4cGFuZG9TdGFydEluZGV4fWZ1bmN0aW9uIFhxKG4sdCxlLGkpe2xldCByPW4uZGF0YTtpZihudWxsPT09cltlKzFdKXtsZXQgbz1yW1pzKCldLHM9WXEobixlKTtacShvLGkpJiZudWxsPT09dCYmIXMmJih0PSExKSx0PWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPV8zKG4pLG89aT90LnJlc2lkdWFsQ2xhc3Nlczp0LnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1yKTA9PT0oaT90LmNsYXNzQmluZGluZ3M6dC5zdHlsZUJpbmRpbmdzKSYmKGU9SXgoZT1XTihudWxsLG4sdCxlLGkpLHQuYXR0cnMsaSksbz1udWxsKTtlbHNle2xldCBzPXQuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7aWYoLTE9PT1zfHxuW3NdIT09cilpZihlPVdOKHIsbix0LGUsaSksbnVsbD09PW8pe2xldCBsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1lP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3M7aWYoMCE9PUYwKGkpKXJldHVybiBuW1hmKGkpXX0obix0LGkpO3ZvaWQgMCE9PWwmJkFycmF5LmlzQXJyYXkobCkmJihsPVdOKG51bGwsbix0LGxbMV0saSksbD1JeChsLHQuYXR0cnMsaSksZnVuY3Rpb24obix0LGUsaSl7bltYZihlP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3MpXT1pfShuLHQsaSxsKSl9ZWxzZSBvPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaSxyPXQuZGlyZWN0aXZlRW5kO2ZvcihsZXQgbz0xK3QuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7bzxyO28rKylpPUl4KGksbltvXS5ob3N0QXR0cnMsZSk7cmV0dXJuIEl4KGksdC5hdHRycyxlKX0obix0LGkpfXJldHVybiB2b2lkIDAhPT1vJiYoaT90LnJlc2lkdWFsQ2xhc3Nlcz1vOnQucmVzaWR1YWxTdHlsZXM9byksZX0ocixvLHQsaSksZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPW8/dC5jbGFzc0JpbmRpbmdzOnQuc3R5bGVCaW5kaW5ncyxhPVhmKHMpLGw9RjAocyk7bltpXT1lO2xldCB1LGM9ITE7aWYoQXJyYXkuaXNBcnJheShlKSl7bGV0IGQ9ZTt1PWRbMV0sKG51bGw9PT11fHxIeChkLHUpPjApJiYoYz0hMCl9ZWxzZSB1PWU7aWYocilpZigwIT09bCl7bGV0IHA9WGYoblthKzFdKTtuW2krMV09RTEocCxhKSwwIT09cCYmKG5bcCsxXT1qTihuW3ArMV0saSkpLG5bYSsxXT1mdW5jdGlvbihuLHQpe3JldHVybiAxMzEwNzEmbnx0PDwxN30oblthKzFdLGkpfWVsc2UgbltpKzFdPUUxKGEsMCksMCE9PWEmJihuW2ErMV09ak4oblthKzFdLGkpKSxhPWk7ZWxzZSBuW2krMV09RTEobCwwKSwwPT09YT9hPWk6bltsKzFdPWpOKG5bbCsxXSxpKSxsPWk7YyYmKG5baSsxXT1PTChuW2krMV0pKSxhNyhuLHUsaSwhMCksYTcobix1LGksITEpLGZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89cj9uLnJlc2lkdWFsQ2xhc3NlczpuLnJlc2lkdWFsU3R5bGVzO251bGwhPW8mJiJzdHJpbmciPT10eXBlb2YgdCYmSHgobyx0KT49MCYmKGVbaSsxXT1rTChlW2krMV0pKX0odCx1LG4saSxvKSxzPUUxKGEsbCksbz90LmNsYXNzQmluZGluZ3M9czp0LnN0eWxlQmluZGluZ3M9c30ocixvLHQsZSxzLGkpfX1mdW5jdGlvbiBXTihuLHQsZSxpLHIpe2xldCBvPW51bGwscz1lLmRpcmVjdGl2ZUVuZCxhPWUuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7Zm9yKC0xPT09YT9hPWUuZGlyZWN0aXZlU3RhcnQ6YSsrO2E8cyYmKG89dFthXSxpPUl4KGksby5ob3N0QXR0cnMsciksbyE9PW4pOylhKys7cmV0dXJuIG51bGwhPT1uJiYoZS5kaXJlY3RpdmVTdHlsaW5nTGFzdD1hKSxpfWZ1bmN0aW9uIEl4KG4sdCxlKXtsZXQgaT1lPzE6MixyPS0xO2lmKG51bGwhPT10KWZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dOyJudW1iZXIiPT10eXBlb2Ygcz9yPXM6cj09PWkmJihBcnJheS5pc0FycmF5KG4pfHwobj12b2lkIDA9PT1uP1tdOlsiIixuXSksZWwobixzLCEhZXx8dFsrK29dKSl9cmV0dXJuIHZvaWQgMD09PW4/bnVsbDpufWZ1bmN0aW9uIFFxKG4sdCxlKXtlbChuLHQsVGEoZSkpfWZ1bmN0aW9uIEtxKG4sdCxlLGkscixvLHMsYSl7aWYoISgzJnQudHlwZSkpcmV0dXJuO2xldCBsPW4uZGF0YSxjPWxbYSsxXSx1PWZ1bmN0aW9uKG4pe3JldHVybiAxPT0oMSZuKX0oYyk/dTcobCx0LGUscixGMChjKSxzKTp2b2lkIDA7dFQodSl8fCh0VChvKXx8ZnVuY3Rpb24obil7cmV0dXJuIDI9PSgyJm4pfShjKSYmKG89dTcobCxudWxsLGUscixhLHMpKSxmdW5jdGlvbihuLHQsZSxpLHIpe2lmKHQpcj9uLmFkZENsYXNzKGUsaSk6bi5yZW1vdmVDbGFzcyhlLGkpO2Vsc2V7bGV0IG89LTE9PT1pLmluZGV4T2YoIi0iKT92b2lkIDA6QmwuRGFzaENhc2U7bnVsbD09cj9uLnJlbW92ZVN0eWxlKGUsaSxvKTooInN0cmluZyI9PXR5cGVvZiByJiZyLmVuZHNXaXRoKCIhaW1wb3J0YW50IikmJihyPXIuc2xpY2UoMCwtMTApLG98PUJsLkltcG9ydGFudCksbi5zZXRTdHlsZShlLGkscixvKSl9fShpLHMscFQoWnMoKSxlKSxyLG8pKX1mdW5jdGlvbiB1NyhuLHQsZSxpLHIsbyl7bGV0IGEscz1udWxsPT09dDtmb3IoO3I+MDspe2xldCBsPW5bcl0sYz1BcnJheS5pc0FycmF5KGwpLHU9Yz9sWzFdOmwsZD1udWxsPT09dSxwPWVbcisxXTtwPT09UW4mJihwPWQ/UWk6dm9pZCAwKTtsZXQgaD1kP0xOKHAsaSk6dT09PWk/cDp2b2lkIDA7aWYoYyYmIXRUKGgpJiYoaD1MTihsLGkpKSx0VChoKSYmKGE9aCxzKSlyZXR1cm4gYTtsZXQgZj1uW3IrMV07cj1zP1hmKGYpOkYwKGYpfWlmKG51bGwhPT10KXtsZXQgbD1vP3QucmVzaWR1YWxDbGFzc2VzOnQucmVzaWR1YWxTdHlsZXM7bnVsbCE9bCYmKGE9TE4obCxpKSl9cmV0dXJuIGF9ZnVuY3Rpb24gdFQobil7cmV0dXJuIHZvaWQgMCE9PW59ZnVuY3Rpb24gWnEobix0KXtyZXR1cm4gMCE9KG4uZmxhZ3MmKHQ/MTY6MzIpKX1mdW5jdGlvbiBBKG4sdD0iIil7bGV0IGU9cnQoKSxpPUZpKCkscj1uKzIyLG89aS5maXJzdENyZWF0ZVBhc3M/VzAoaSxyLDEsdCxudWxsKTppLmRhdGFbcl0scz1lW3JdPUYzKGVbMTFdLHQpO3lUKGksZSxzLG8pLE11KG8sITEpfWZ1bmN0aW9uIHl0KG4pe3JldHVybiBqZSgiIixuLCIiKSx5dH1mdW5jdGlvbiBqZShuLHQsZSl7bGV0IGk9cnQoKSxyPVgwKGksbix0LGUpO3JldHVybiByIT09UW4mJmpkKGksWnMoKSxyKSxqZX1mdW5jdGlvbiBYcChuLHQsZSxpLHIpe2xldCBvPXJ0KCkscz1RMChvLG4sdCxlLGkscik7cmV0dXJuIHMhPT1RbiYmamQobyxacygpLHMpLFhwfWZ1bmN0aW9uIFRUKG4sdCxlLGkscixvLHMpe2xldCBhPXJ0KCksbD1LMChhLG4sdCxlLGkscixvLHMpO3JldHVybiBsIT09UW4mJmpkKGEsWnMoKSxsKSxUVH1mdW5jdGlvbiBReChuLHQsZSl7T2MoZWwsQXUsWDAocnQoKSxuLHQsZSksITApfWZ1bmN0aW9uIF9zKG4sdCxlKXtsZXQgaT1ydCgpO3JldHVybiBEcyhpLFUwKCksdCkmJmlsKEZpKCksbm8oKSxpLG4sdCxpWzExXSxlLCEwKSxfc31mdW5jdGlvbiByXyhuLHQsZSl7bGV0IGk9cnQoKTtpZihEcyhpLFUwKCksdCkpe2xldCBvPUZpKCkscz1ubygpO2lsKG8scyxpLG4sdCxNcShfMyhvLmRhdGEpLHMsaSksZSwhMCl9cmV0dXJuIHJffXZhciBWZj12b2lkIDAsZXhlPVsiZW4iLFtbImEiLCJwIl0sWyJBTSIsIlBNIl0sVmZdLFtbIkFNIiwiUE0iXSxWZixWZl0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0sVmYsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLFZmLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIsVmYsInsxfSAnYXQnIHswfSIsVmZdLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiVVNEIiwiJCIsIlVTIERvbGxhciIse30sImx0ciIsZnVuY3Rpb24obil7bGV0IGU9TWF0aC5mbG9vcihNYXRoLmFicyhuKSksaT1uLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09ZSYmMD09PWk/MTo1fV0scU49e307ZnVuY3Rpb24gQWEobil7bGV0IHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0obiksZT1kNyh0KTtpZihlKXJldHVybiBlO2xldCBpPXQuc3BsaXQoIi0iKVswXTtpZihlPWQ3KGkpLGUpcmV0dXJuIGU7aWYoImVuIj09PWkpcmV0dXJuIGV4ZTt0aHJvdyBuZXcgQXQoNzAxLCExKX1mdW5jdGlvbiBkNyhuKXtyZXR1cm4gbiBpbiBxTnx8KHFOW25dPXRvLm5nJiZ0by5uZy5jb21tb24mJnRvLm5nLmNvbW1vbi5sb2NhbGVzJiZ0by5uZy5jb21tb24ubG9jYWxlc1tuXSkscU5bbl19dmFyIFJyPSgoKT0+e3JldHVybihuPVJyfHwoUnI9e30pKVtuLkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsbltuLkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLG5bbi5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLG5bbi5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0IixuW24uRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIixuW24uTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLG5bbi5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIixuW24uRXJhcz03XT0iRXJhcyIsbltuLkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsbltuLldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIixuW24uRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLG5bbi5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsbltuLkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLG5bbi5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsbltuLk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIixuW24uQ3VycmVuY3lDb2RlPTE1XT0iQ3VycmVuY3lDb2RlIixuW24uQ3VycmVuY3lTeW1ib2w9MTZdPSJDdXJyZW5jeVN5bWJvbCIsbltuLkN1cnJlbmN5TmFtZT0xN109IkN1cnJlbmN5TmFtZSIsbltuLkN1cnJlbmNpZXM9MThdPSJDdXJyZW5jaWVzIixuW24uRGlyZWN0aW9uYWxpdHk9MTldPSJEaXJlY3Rpb25hbGl0eSIsbltuLlBsdXJhbENhc2U9MjBdPSJQbHVyYWxDYXNlIixuW24uRXh0cmFEYXRhPTIxXT0iRXh0cmFEYXRhIixScjt2YXIgbn0pKCksbnhlPVsiemVybyIsIm9uZSIsInR3byIsImZldyIsIm1hbnkiXTt2YXIgblQ9ImVuLVVTIixmWT17bWFya2VyOiJlbGVtZW50In0sbVk9e21hcmtlcjoiSUNVIn0sRWM9KCgpPT57cmV0dXJuKG49RWN8fChFYz17fSkpW24uU0hJRlQ9Ml09IlNISUZUIixuW24uQVBQRU5EX0VBR0VSTFk9MV09IkFQUEVORF9FQUdFUkxZIixuW24uQ09NTUVOVD0yXT0iQ09NTUVOVCIsRWM7dmFyIG59KSgpLGdZPW5UO2Z1bmN0aW9uIF9ZKG4sdCxlKXtsZXQgaT10Lmluc2VydEJlZm9yZUluZGV4LHI9QXJyYXkuaXNBcnJheShpKT9pWzBdOmk7cmV0dXJuIG51bGw9PT1yP3E5KG4sMCxlKTokYShlW3JdKX1mdW5jdGlvbiB2WShuLHQsZSxpLHIpe2xldCBvPXQuaW5zZXJ0QmVmb3JlSW5kZXg7aWYoQXJyYXkuaXNBcnJheShvKSl7bGV0IHM9aSxhPW51bGw7aWYoMyZ0LnR5cGV8fChhPXMscz1yKSxudWxsIT09cyYmMD09KDImdC5mbGFncykpZm9yKGxldCBsPTE7bDxvLmxlbmd0aDtsKyspWWYobixzLGVbb1tsXV0sYSwhMSl9fWZ1bmN0aW9uIHlZKG4sdCl7aWYobi5wdXNoKHQpLG4ubGVuZ3RoPjEpZm9yKGxldCBlPW4ubGVuZ3RoLTI7ZT49MDtlLS0pe2xldCBpPW5bZV07YlkoaSl8fGF4ZShpLHQpJiZudWxsPT09bHhlKGkpJiZjeGUoaSx0LmluZGV4KX19ZnVuY3Rpb24gYlkobil7cmV0dXJuISg2NCZuLnR5cGUpfWZ1bmN0aW9uIGF4ZShuLHQpe3JldHVybiBiWSh0KXx8bi5pbmRleD50LmluZGV4fWZ1bmN0aW9uIGx4ZShuKXtsZXQgdD1uLmluc2VydEJlZm9yZUluZGV4O3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RbMF06dH1mdW5jdGlvbiBjeGUobix0KXtsZXQgZT1uLmluc2VydEJlZm9yZUluZGV4O0FycmF5LmlzQXJyYXkoZSk/ZVswXT10OihYOShfWSx2WSksbi5pbnNlcnRCZWZvcmVJbmRleD10KX1mdW5jdGlvbiBfeChuLHQpe2xldCBlPW4uZGF0YVt0XTtyZXR1cm4gbnVsbD09PWV8fCJzdHJpbmciPT10eXBlb2YgZT9udWxsOmUuaGFzT3duUHJvcGVydHkoImN1cnJlbnRDYXNlTFZpZXdJbmRleCIpP2U6ZS52YWx1ZX1mdW5jdGlvbiBweGUobix0LGUpe2xldCBpPVYzKG4sZSw2NCxudWxsLG51bGwpO3JldHVybiB5WSh0LGkpLGl9ZnVuY3Rpb24gRFQobix0KXtsZXQgZT10W24uY3VycmVudENhc2VMVmlld0luZGV4XTtyZXR1cm4gbnVsbD09PWU/ZTplPDA/fmU6ZX1mdW5jdGlvbiBoeGUobil7cmV0dXJuIG4+Pj4xN31mdW5jdGlvbiBmeGUobil7cmV0dXJuKDEzMTA3MCZuKT4+PjF9dmFyIFB4PTAsdng9MDtmdW5jdGlvbiB4WShuLHQsZSxpKXtsZXQgcyxyPWVbMTFdLG89bnVsbDtmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyl7bGV0IGw9dFthXTtpZigic3RyaW5nIj09dHlwZW9mIGwpe2xldCBjPXRbKythXTtudWxsPT09ZVtjXSYmKGVbY109RjMocixsKSl9ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGwpc3dpdGNoKDEmbCl7Y2FzZSAwOmxldCB1LGQsYz1oeGUobCk7aWYobnVsbD09PW8mJihvPWMscz12VChyLGkpKSxjPT09bz8odT1pLGQ9cyk6KHU9bnVsbCxkPSRhKGVbY10pKSxudWxsIT09ZCl7bGV0IG09ZnhlKGwpO1lmKHIsZCxlW21dLHUsITEpO2xldCBnPV94KG4sbSk7aWYobnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyl7bGV0IGI9RFQoZyxlKTtudWxsIT09YiYmeFkobixnLmNyZWF0ZVtiXSxlLGVbZy5hbmNob3JJZHhdKX19YnJlYWs7Y2FzZSAxOmxldCBoPXRbKythXSxmPXRbKythXTtXMyhyLHBUKGw+Pj4xLGUpLG51bGwsbnVsbCxoLGYsbnVsbCl9ZWxzZSBzd2l0Y2gobCl7Y2FzZSBtWTpsZXQgYz10WysrYV0sdT10WysrYV07bnVsbD09PWVbdV0mJlN1KGVbdV09ZXllKHIsYyksZSk7YnJlYWs7Y2FzZSBmWTpsZXQgZD10WysrYV0scD10WysrYV07bnVsbD09PWVbcF0mJlN1KGVbcF09TjMocixkLG51bGwpLGUpfX19ZnVuY3Rpb24gQ1kobix0LGUsaSxyKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IHM9ZVtvXSxhPWVbKytvXTtpZihzJnIpe2xldCBsPSIiO2ZvcihsZXQgYz1vKzE7Yzw9bythO2MrKyl7bGV0IHU9ZVtjXTtpZigic3RyaW5nIj09dHlwZW9mIHUpbCs9dTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdSlpZih1PDApbCs9S24odFtpLXVdKTtlbHNle2xldCBkPXU+Pj4yO3N3aXRjaCgzJnUpe2Nhc2UgMTpsZXQgcD1lWysrY10saD1lWysrY10sZj1uLmRhdGFbZF07InN0cmluZyI9PXR5cGVvZiBmP1czKHRbMTFdLHRbZF0sbnVsbCxmLHAsbCxoKTppbChuLGYsdCxwLGwsdFsxMV0saCwhMSk7YnJlYWs7Y2FzZSAwOmxldCBtPXRbZF07bnVsbCE9PW0mJlY5KHRbMTFdLG0sbCk7YnJlYWs7Y2FzZSAyOnl4ZShuLF94KG4sZCksdCxsKTticmVhaztjYXNlIDM6cDcobixfeChuLGQpLGksdCl9fX19ZWxzZXtsZXQgbD1lW28rMV07aWYobD4wJiYzPT0oMyZsKSl7bGV0IHU9X3gobixsPj4+Mik7dFt1LmN1cnJlbnRDYXNlTFZpZXdJbmRleF08MCYmcDcobix1LGksdCl9fW8rPWF9fWZ1bmN0aW9uIHA3KG4sdCxlLGkpe2xldCByPWlbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdO2lmKG51bGwhPT1yKXtsZXQgbz1QeDtyPDAmJihyPWlbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdPX5yLG89LTEpLENZKG4saSx0LnVwZGF0ZVtyXSxlLG8pfX1mdW5jdGlvbiB5eGUobix0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZT1uLmNhc2VzLmluZGV4T2YodCk7aWYoLTE9PT1lKXN3aXRjaChuLnR5cGUpe2Nhc2UgMTp7bGV0IGk9ZnVuY3Rpb24obix0KXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gQWEobilbUnIuUGx1cmFsQ2FzZV19KHQpKHBhcnNlSW50KG4sMTApKSxpPW54ZVtlXTtyZXR1cm4gdm9pZCAwIT09aT9pOiJvdGhlciJ9KHQsZ1kpO2U9bi5jYXNlcy5pbmRleE9mKGkpLC0xPT09ZSYmIm90aGVyIiE9PWkmJihlPW4uY2FzZXMuaW5kZXhPZigib3RoZXIiKSk7YnJlYWt9Y2FzZSAwOmU9bi5jYXNlcy5pbmRleE9mKCJvdGhlciIpfXJldHVybi0xPT09ZT9udWxsOmV9KHQsaSk7aWYoRFQodCxlKSE9PXImJihNWShuLHQsZSksZVt0LmN1cnJlbnRDYXNlTFZpZXdJbmRleF09bnVsbD09PXI/bnVsbDp+cixudWxsIT09cikpe2xldCBzPWVbdC5hbmNob3JJZHhdO3MmJnhZKG4sdC5jcmVhdGVbcl0sZSxzKX19ZnVuY3Rpb24gTVkobix0LGUpe2xldCBpPURUKHQsZSk7aWYobnVsbCE9PWkpe2xldCByPXQucmVtb3ZlW2ldO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXQgcz1yW29dO2lmKHM+MCl7bGV0IGE9cFQocyxlKTtudWxsIT09YSYmSzkoZVsxMV0sYSl9ZWxzZSBNWShuLF94KG4sfnMpLGUpfX19ZnVuY3Rpb24geHhlKCl7bGV0IGUsaSxuPVtdLHQ9LTE7ZnVuY3Rpb24gbyhhLGwpe3Q9MDtsZXQgYz1EVChhLGwpO2k9bnVsbCE9PWM/YS5yZW1vdmVbY106UWl9ZnVuY3Rpb24gcygpe2lmKHQ8aS5sZW5ndGgpe2xldCBhPWlbdCsrXTtyZXR1cm4gYT4wP2VbYV06KG4ucHVzaCh0LGkpLG8oZVsxXS5kYXRhW35hXSxlKSxzKCkpfXJldHVybiAwPT09bi5sZW5ndGg/bnVsbDooaT1uLnBvcCgpLHQ9bi5wb3AoKSxzKCkpfXJldHVybiBmdW5jdGlvbihhLGwpe2ZvcihlPWw7bi5sZW5ndGg7KW4ucG9wKCk7cmV0dXJuIG8oYS52YWx1ZSxsKSxzfX12YXIgaVQ9L1x1ZmZmZChcZCspOj9cZCpcdWZmZmQvZ2ksQ3hlPS8oe1xzKlx1ZmZmZFxkKzo/XGQqXHVmZmZkXHMqLFxzKlxTezZ9XHMqLFtcc1xTXSp9KS9naSxNeGU9L1x1ZmZmZChcZCspXHVmZmZkLyx3WT0vXlxzKihcdWZmZmRcZCs6P1xkKlx1ZmZmZClccyosXHMqKHNlbGVjdHxwbHVyYWwpXHMqLC8sd3hlPS9cdWZmZmRcLz9cKihcZCs6XGQrKVx1ZmZmZC9naSxTeGU9L1x1ZmZmZChcLz9bIypdXGQrKTo/XGQqXHVmZmZkL2dpLEV4ZT0vXHVFNTAwL2c7ZnVuY3Rpb24gU1kobix0LGUsaSxyLG8scyl7bGV0IGE9cTAobixpLDEsbnVsbCksbD1hPDxFYy5TSElGVCxjPXd4KCk7dD09PWMmJihjPW51bGwpLG51bGw9PT1jJiYobHw9RWMuQVBQRU5EX0VBR0VSTFkpLHMmJihsfD1FYy5DT01NRU5ULGZ1bmN0aW9uKG4pe3ZvaWQgMD09PURMJiYoREw9bigpKX0oeHhlKSksci5wdXNoKGwsbnVsbD09PW8/IiI6byk7bGV0IHU9VjMobixhLHM/MzI6MSxudWxsPT09bz8iIjpvLG51bGwpO3lZKGUsdSk7bGV0IGQ9dS5pbmRleDtyZXR1cm4gTXUodSwhMSksbnVsbCE9PWMmJnQhPT1jJiZmdW5jdGlvbihuLHQpe2xldCBlPW4uaW5zZXJ0QmVmb3JlSW5kZXg7bnVsbD09PWU/KFg5KF9ZLHZZKSxlPW4uaW5zZXJ0QmVmb3JlSW5kZXg9W251bGwsdF0pOihmdW5jdGlvbihuLHQsZSl7MSE9biYmVDcoIkV4cGVjdGluZyBhcnJheSBoZXJlIixuLCEwLCI9PSIpfShBcnJheS5pc0FycmF5KGUpKSxlLnB1c2godCkpfShjLGQpLHV9ZnVuY3Rpb24gQXhlKG4sdCxlLGkscixvLHMpe2xldCBhPXMubWF0Y2goaVQpLGw9U1kobix0LGUsbyxpLGE/bnVsbDpzLCExKTthJiZieChyLHMsbC5pbmRleCxudWxsLDAsbnVsbCl9ZnVuY3Rpb24gYngobix0LGUsaSxyLG8pe2xldCBzPW4ubGVuZ3RoLGE9cysxO24ucHVzaChudWxsLG51bGwpO2xldCBsPXMrMixjPXQuc3BsaXQoaVQpLHU9MDtmb3IobGV0IGQ9MDtkPGMubGVuZ3RoO2QrKyl7bGV0IHA9Y1tkXTtpZigxJmQpe2xldCBoPXIrcGFyc2VJbnQocCwxMCk7bi5wdXNoKC0xLWgpLHV8PUVZKGgpfWVsc2UiIiE9PXAmJm4ucHVzaChwKX1yZXR1cm4gbi5wdXNoKGU8PDJ8KGk/MTowKSksaSYmbi5wdXNoKGksbyksbltzXT11LG5bYV09bi5sZW5ndGgtbCx1fWZ1bmN0aW9uIFB4ZShuKXtsZXQgdD0wO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uW2VdOyJudW1iZXIiPT10eXBlb2YgaSYmaTwwJiZ0Kyt9cmV0dXJuIHR9ZnVuY3Rpb24gRVkobil7cmV0dXJuIDE8PE1hdGgubWluKG4sMzEpfWZ1bmN0aW9uIGg3KG4pe2xldCB0LG8sZT0iIixpPTAscj0hMTtmb3IoO251bGwhPT0odD13eGUuZXhlYyhuKSk7KXI/dFswXT09PWBcdWZmZmQvKiR7b31cdWZmZmRgJiYoaT10LmluZGV4LHI9ITEpOihlKz1uLnN1YnN0cmluZyhpLHQuaW5kZXgrdFswXS5sZW5ndGgpLG89dFsxXSxyPSEwKTtyZXR1cm4gZSs9bi5zbGljZShpKSxlfWZ1bmN0aW9uIFRZKG4sdCxlLGkscixvKXtsZXQgcz0wLGE9e3R5cGU6ci50eXBlLGN1cnJlbnRDYXNlTFZpZXdJbmRleDpxMChuLHQsMSxudWxsKSxhbmNob3JJZHg6byxjYXNlczpbXSxjcmVhdGU6W10scmVtb3ZlOltdLHVwZGF0ZTpbXX07KGZ1bmN0aW9uKG4sdCxlKXtuLnB1c2goRVkodC5tYWluQmluZGluZyksMiwtMS10Lm1haW5CaW5kaW5nLGU8PDJ8Mil9KShlLHIsbyksZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZGF0YVt0XTtudWxsPT09aT9uLmRhdGFbdF09ZTppLnZhbHVlPWV9KG4sbyxhKTtsZXQgbD1yLnZhbHVlcztmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXSxkPVtdO2ZvcihsZXQgcD0wO3A8dS5sZW5ndGg7cCsrKXtsZXQgaD11W3BdO2lmKCJzdHJpbmciIT10eXBlb2YgaCl7bGV0IGY9ZC5wdXNoKGgpLTE7dVtwXT1gXHgzYyEtLVx1ZmZmZCR7Zn1cdWZmZmQtLVx4M2VgfX1zPUZ4ZShuLGEsdCxlLGksci5jYXNlc1tjXSx1LmpvaW4oIiIpLGQpfHN9cyYmZnVuY3Rpb24obix0LGUpe24ucHVzaCh0LDEsZTw8MnwzKX0oZSxzLG8pfWZ1bmN0aW9uIGt4ZShuKXtsZXQgdD1bXSxlPVtdLGk9MSxyPTAsbz1VTChuPW4ucmVwbGFjZSh3WSxmdW5jdGlvbihzLGEsbCl7cmV0dXJuIGk9InNlbGVjdCI9PT1sPzA6MSxyPXBhcnNlSW50KGEuc2xpY2UoMSksMTApLCIifSkpO2ZvcihsZXQgcz0wO3M8by5sZW5ndGg7KXtsZXQgYT1vW3MrK10udHJpbSgpOzE9PT1pJiYoYT1hLnJlcGxhY2UoL1xzKig/Oj0pPyhcdyspXHMqLywiJDEiKSksYS5sZW5ndGgmJnQucHVzaChhKTtsZXQgbD1VTChvW3MrK10pO3QubGVuZ3RoPmUubGVuZ3RoJiZlLnB1c2gobCl9cmV0dXJue3R5cGU6aSxtYWluQmluZGluZzpyLGNhc2VzOnQsdmFsdWVzOmV9fWZ1bmN0aW9uIFVMKG4pe2lmKCFuKXJldHVybltdO2xldCBvLHQ9MCxlPVtdLGk9W10scj0vW3t9XS9nO2ZvcihyLmxhc3RJbmRleD0wO289ci5leGVjKG4pOyl7bGV0IGE9by5pbmRleDtpZigifSI9PW9bMF0pe2lmKGUucG9wKCksMD09ZS5sZW5ndGgpe2xldCBsPW4uc3Vic3RyaW5nKHQsYSk7d1kudGVzdChsKT9pLnB1c2goa3hlKGwpKTppLnB1c2gobCksdD1hKzF9fWVsc2V7aWYoMD09ZS5sZW5ndGgpe2xldCBsPW4uc3Vic3RyaW5nKHQsYSk7aS5wdXNoKGwpLHQ9YSsxfWUucHVzaCgieyIpfX1sZXQgcz1uLnN1YnN0cmluZyh0KTtyZXR1cm4gaS5wdXNoKHMpLGl9ZnVuY3Rpb24gRnhlKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9W10sYz1bXSx1PVtdO3QuY2FzZXMucHVzaChvKSx0LmNyZWF0ZS5wdXNoKGwpLHQucmVtb3ZlLnB1c2goYyksdC51cGRhdGUucHVzaCh1KTtsZXQgcD13OShfOSgpKS5nZXRJbmVydEJvZHlFbGVtZW50KHMpLGg9Q0wocCl8fHA7cmV0dXJuIGg/RFkobix0LGUsaSxsLGMsdSxoLHIsYSwwKTowfWZ1bmN0aW9uIERZKG4sdCxlLGkscixvLHMsYSxsLGMsdSl7bGV0IGQ9MCxwPWEuZmlyc3RDaGlsZDtmb3IoO3A7KXtsZXQgaD1xMChuLGUsMSxudWxsKTtzd2l0Y2gocC5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpsZXQgZj1wLG09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoYkwuaGFzT3duUHJvcGVydHkobSkpe1lOKHIsZlksbSxsLGgpLG4uZGF0YVtoXT1tO2xldCBEPWYuYXR0cmlidXRlcztmb3IobGV0IFQ9MDtUPEQubGVuZ3RoO1QrKyl7bGV0IGs9RC5pdGVtKFQpLFo9ay5uYW1lLnRvTG93ZXJDYXNlKCk7ay52YWx1ZS5tYXRjaChpVCk/RDkuaGFzT3duUHJvcGVydHkoWikmJmJ4KHMsay52YWx1ZSxoLGsubmFtZSwwLFQzW1pdP3p4Om51bGwpOlZ4ZShyLGgsayl9ZD1EWShuLHQsZSxpLHIsbyxzLHAsaCxjLHUrMSl8ZCxmNyhvLGgsdSl9YnJlYWs7Y2FzZSBOb2RlLlRFWFRfTk9ERTpsZXQgeD1wLnRleHRDb250ZW50fHwiIixnPXgubWF0Y2goaVQpO1lOKHIsbnVsbCxnPyIiOngsbCxoKSxmNyhvLGgsdSksZyYmKGQ9Yngocyx4LGgsbnVsbCwwLG51bGwpfGQpO2JyZWFrO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6bGV0IGI9TXhlLmV4ZWMocC50ZXh0Q29udGVudHx8IiIpO2lmKGIpe2xldCBUPWNbcGFyc2VJbnQoYlsxXSwxMCldO1lOKHIsbVksIiIsbCxoKSxUWShuLGUsaSxsLFQsaCksTnhlKG8saCx1KX19cD1wLm5leHRTaWJsaW5nfXJldHVybiBkfWZ1bmN0aW9uIGY3KG4sdCxlKXswPT09ZSYmbi5wdXNoKHQpfWZ1bmN0aW9uIE54ZShuLHQsZSl7MD09PWUmJihuLnB1c2gofnQpLG4ucHVzaCh0KSl9ZnVuY3Rpb24gWU4obix0LGUsaSxyKXtudWxsIT09dCYmbi5wdXNoKHQpLG4ucHVzaChlLHIsZnVuY3Rpb24obix0LGUpe3JldHVybiAwfHQ8PDE3fGU8PDF9KDAsaSxyKSl9ZnVuY3Rpb24gVnhlKG4sdCxlKXtuLnB1c2godDw8MXwxLGUubmFtZSxlLnZhbHVlKX12YXIgSHhlPS9cWyhcdWZmZmQuKz9cdWZmZmQ/KVxdLyxVeGU9L1xbKFx1ZmZmZC4rP1x1ZmZmZD8pXF18KFx1ZmZmZFwvP1wqXGQrOlxkK1x1ZmZmZCkvZyx6eGU9Lyh7XHMqKShWQVJfKFBMVVJBTHxTRUxFQ1QpKF9cZCspPykoXHMqLCkvZyxqeGU9L3soW0EtWjAtOV9dKyl9L2csR3hlPS9cdWZmZmRJMThOX0VYUF8oSUNVKF9cZCspPylcdWZmZmQvZyxXeGU9L1wvXCovLHF4ZT0vXGQrXDooXGQrKS87ZnVuY3Rpb24gQVkobix0LGU9LTEpe2xldCBpPUZpKCkscj1ydCgpLG89MjIrbixzPVVwKGkuY29uc3RzLHQpLGE9d3goKTtpLmZpcnN0Q3JlYXRlUGFzcyYmZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPXd4KCksYT1bXSxsPVtdLGM9W1tdXTtyPWZ1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24obil7cmV0dXJuLTE9PT1ufSh0KSlyZXR1cm4gaDcobik7e2xldCBlPW4uaW5kZXhPZihgOiR7dH1cdWZmZmRgKSsyK3QudG9TdHJpbmcoKS5sZW5ndGgsaT1uLnNlYXJjaChuZXcgUmVnRXhwKGBcdWZmZmRcXC9cXCpcXGQrOiR7dH1cdWZmZmRgKSk7cmV0dXJuIGg3KG4uc3Vic3RyaW5nKGUsaSkpfX0ocixvKTtsZXQgdT1mdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKEV4ZSwiICIpfShyKS5zcGxpdChTeGUpO2ZvcihsZXQgZD0wO2Q8dS5sZW5ndGg7ZCsrKXtsZXQgcD11W2RdO2lmKDA9PSgxJmQpKXtsZXQgaD1VTChwKTtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7bGV0IG09aFtmXTtpZigwPT0oMSZmKSl7bGV0IHg9bTsiIiE9PXgmJkF4ZShuLHMsY1swXSxhLGwsZSx4KX1lbHNle2xldCB4PW07aWYoIm9iamVjdCIhPXR5cGVvZiB4KXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIElDVSBleHByZXNzaW9uIGluICIke3J9IiBtZXNzYWdlLmApO1RZKG4sZSxsLHQseCxTWShuLHMsY1swXSxlLGEsIiIsITApLmluZGV4KX19fWVsc2V7bGV0IGg9NDc9PT1wLmNoYXJDb2RlQXQoMCksbT0ocC5jaGFyQ29kZUF0KGg/MTowKSwyMitOdW1iZXIucGFyc2VJbnQocC5zdWJzdHJpbmcoaD8yOjEpKSk7aWYoaCljLnNoaWZ0KCksTXUod3goKSwhMSk7ZWxzZXtsZXQgeD1weGUobixjWzBdLG0pO2MudW5zaGlmdChbXSksTXUoeCwhMCl9fX1uLmRhdGFbaV09e2NyZWF0ZTphLHVwZGF0ZTpsfX0oaSxudWxsPT09YT8wOmEuaW5kZXgscixvLHMsZSk7bGV0IGw9aS5kYXRhW29dLHU9ajkoaSxhPT09cls2XT9udWxsOmEscik7KGZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW5bMTFdO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcz10W28rK10sYT10W29dLGw9KHMmRWMuQ09NTUVOVCk9PT1FYy5DT01NRU5ULGM9KHMmRWMuQVBQRU5EX0VBR0VSTFkpPT09RWMuQVBQRU5EX0VBR0VSTFksdT1zPj4+RWMuU0hJRlQsZD1uW3VdO251bGw9PT1kJiYoZD1uW3VdPWw/ci5jcmVhdGVDb21tZW50KGEpOkYzKHIsYSkpLGMmJm51bGwhPT1lJiZZZihyLGUsZCxpLCExKX19KShyLGwuY3JlYXRlLHUsYSYmOCZhLnR5cGU/clthLmluZGV4XTpudWxsKSxXNyghMCl9ZnVuY3Rpb24gSVkoKXtXNyghMSl9ZnVuY3Rpb24gQVQobix0LGUpe0FZKG4sdCxlKSxJWSgpfWZ1bmN0aW9uIEt4KG4pe3JldHVybiBmdW5jdGlvbihuKXtuJiYoUHh8PTE8PE1hdGgubWluKHZ4LDMxKSksdngrK30oRHMocnQoKSxVMCgpLG4pKSxLeH1mdW5jdGlvbiBJVChuKXshZnVuY3Rpb24obix0LGUpe2lmKHZ4PjApe2xldCBpPW4uZGF0YVtlXTtDWShuLHQsQXJyYXkuaXNBcnJheShpKT9pOmkudXBkYXRlLEhkKCktdngtMSxQeCl9UHg9MCx2eD0wfShGaSgpLHJ0KCksbisyMil9ZnVuY3Rpb24gUFQobix0PXt9KXtyZXR1cm4gZnVuY3Rpb24obix0PXt9KXtsZXQgZT1uO2lmKEh4ZS50ZXN0KG4pKXtsZXQgaT17fSxyPVswXTtlPWUucmVwbGFjZShVeGUsKG8scyxhKT0+e2xldCBsPXN8fGEsYz1pW2xdfHxbXTtpZihjLmxlbmd0aHx8KGwuc3BsaXQoInwiKS5mb3JFYWNoKG09PntsZXQgeD1tLm1hdGNoKHF4ZSksZz14P3BhcnNlSW50KHhbMV0sMTApOjAsYj1XeGUudGVzdChtKTtjLnB1c2goW2csYixtXSl9KSxpW2xdPWMpLCFjLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYGkxOG4gcG9zdHByb2Nlc3M6IHVubWF0Y2hlZCBwbGFjZWhvbGRlciAtICR7bH1gKTtsZXQgdT1yW3IubGVuZ3RoLTFdLGQ9MDtmb3IobGV0IG09MDttPGMubGVuZ3RoO20rKylpZihjW21dWzBdPT09dSl7ZD1tO2JyZWFrfWxldFtwLGgsZl09Y1tkXTtyZXR1cm4gaD9yLnBvcCgpOnUhPT1wJiZyLnB1c2gocCksYy5zcGxpY2UoZCwxKSxmfSl9cmV0dXJuIE9iamVjdC5rZXlzKHQpLmxlbmd0aCYmKGU9ZS5yZXBsYWNlKHp4ZSwoaSxyLG8scyxhLGwpPT50Lmhhc093blByb3BlcnR5KG8pP2Ake3J9JHt0W29dfSR7bH1gOmkpLGU9ZS5yZXBsYWNlKGp4ZSwoaSxyKT0+dC5oYXNPd25Qcm9wZXJ0eShyKT90W3JdOmkpLGU9ZS5yZXBsYWNlKEd4ZSwoaSxyKT0+e2lmKHQuaGFzT3duUHJvcGVydHkocikpe2xldCBvPXRbcl07aWYoIW8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgaTE4biBwb3N0cHJvY2VzczogdW5tYXRjaGVkIElDVSAtICR7aX0gd2l0aCBrZXk6ICR7cn1gKTtyZXR1cm4gby5zaGlmdCgpfXJldHVybiBpfSkpLGV9KG4sdCl9ZnVuY3Rpb24gekwobix0LGUsaSxyKXtpZihuPUtpKG4pLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBvPTA7bzxuLmxlbmd0aDtvKyspekwobltvXSx0LGUsaSxyKTtlbHNle2xldCBvPUZpKCkscz1ydCgpLGE9azAobik/bjpLaShuLnByb3ZpZGUpLGw9RjkobiksYz16bygpLHU9MTA0ODU3NSZjLnByb3ZpZGVySW5kZXhlcyxkPWMuZGlyZWN0aXZlU3RhcnQscD1jLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYoazAobil8fCFuLm11bHRpKXtsZXQgaD1uZXcgcWYobCxyLE0pLGY9UU4oYSx0LHI/dTp1K3AsZCk7LTE9PT1mPyhZMShTeChjLHMpLG8sYSksWE4obyxuLHQubGVuZ3RoKSx0LnB1c2goYSksYy5kaXJlY3RpdmVTdGFydCsrLGMuZGlyZWN0aXZlRW5kKyssciYmKGMucHJvdmlkZXJJbmRleGVzKz0xMDQ4NTc2KSxlLnB1c2goaCkscy5wdXNoKGgpKTooZVtmXT1oLHNbZl09aCl9ZWxzZXtsZXQgaD1RTihhLHQsdStwLGQpLGY9UU4oYSx0LHUsdStwKSxtPWg+PTAmJmVbaF0seD1mPj0wJiZlW2ZdO2lmKHImJiF4fHwhciYmIW0pe1kxKFN4KGMscyksbyxhKTtsZXQgZz1mdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPW5ldyBxZihuLGUsTSk7cmV0dXJuIG8ubXVsdGk9W10sby5pbmRleD10LG8uY29tcG9uZW50UHJvdmlkZXJzPTAsUFkobyxyLGkmJiFlKSxvfShyP1p4ZTpLeGUsZS5sZW5ndGgscixpLGwpOyFyJiZ4JiYoZVtmXS5wcm92aWRlckZhY3Rvcnk9ZyksWE4obyxuLHQubGVuZ3RoLDApLHQucHVzaChhKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxyJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGUucHVzaChnKSxzLnB1c2goZyl9ZWxzZSBYTihvLG4saD4tMT9oOmYsUFkoZVtyP2Y6aF0sbCwhciYmaSkpOyFyJiZpJiZ4JiZlW2ZdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gWE4obix0LGUsaSl7bGV0IHI9azAodCksbz1mdW5jdGlvbihuKXtyZXR1cm4hIW4udXNlQ2xhc3N9KHQpO2lmKHJ8fG8pe2xldCBsPShvP0tpKHQudXNlQ2xhc3MpOnQpLnByb3RvdHlwZS5uZ09uRGVzdHJveTtpZihsKXtsZXQgYz1uLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKTtpZighciYmdC5tdWx0aSl7bGV0IHU9Yy5pbmRleE9mKGUpOy0xPT09dT9jLnB1c2goZSxbaSxsXSk6Y1t1KzFdLnB1c2goaSxsKX1lbHNlIGMucHVzaChlLGwpfX19ZnVuY3Rpb24gUFkobix0LGUpe3JldHVybiBlJiZuLmNvbXBvbmVudFByb3ZpZGVycysrLG4ubXVsdGkucHVzaCh0KS0xfWZ1bmN0aW9uIFFOKG4sdCxlLGkpe2ZvcihsZXQgcj1lO3I8aTtyKyspaWYodFtyXT09PW4pcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gS3hlKG4sdCxlLGkpe3JldHVybiBqTCh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBaeGUobix0LGUsaSl7bGV0IG8scj10aGlzLm11bHRpO2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtsZXQgcz10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsYT1CeChlLGVbMV0sdGhpcy5wcm92aWRlckZhY3RvcnkuaW5kZXgsaSk7bz1hLnNsaWNlKDAscyksakwocixvKTtmb3IobGV0IGw9cztsPGEubGVuZ3RoO2wrKylvLnB1c2goYVtsXSl9ZWxzZSBvPVtdLGpMKHIsbyk7cmV0dXJuIG99ZnVuY3Rpb24gakwobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0LnB1c2goKDAsbltlXSkoKSk7cmV0dXJuIHR9ZnVuY3Rpb24gJHQobix0PVtdKXtyZXR1cm4gZT0+e2UucHJvdmlkZXJzUmVzb2x2ZXI9KGkscik9PmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1GaSgpO2lmKGkuZmlyc3RDcmVhdGVQYXNzKXtsZXQgcj1BYyhuKTt6TChlLGkuZGF0YSxpLmJsdWVwcmludCxyLCEwKSx6TCh0LGkuZGF0YSxpLmJsdWVwcmludCxyLCExKX19KGkscj9yKG4pOm4sdCl9fXZhciBHcD1jbGFzc3t9LEdMPWNsYXNze30sV0w9Y2xhc3MgZXh0ZW5kcyBHcHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1bXSx0aGlzLmRlc3Ryb3lDYnM9W10sdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IEF4KHRoaXMpO2xldCBpPUkwKHQpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9UjEoaS5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9b3EodCxlLFt7cHJvdmlkZTpHcCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpncyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLFRvKHQpLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSksdGhpcy5fcjNJbmplY3Rvci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KHQpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9yM0luamVjdG9yfWRlc3Ryb3koKXtsZXQgdD10aGlzLl9yM0luamVjdG9yOyF0LmRlc3Ryb3llZCYmdC5kZXN0cm95KCksdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goZT0+ZSgpKSx0aGlzLmRlc3Ryb3lDYnM9bnVsbH1vbkRlc3Ryb3kodCl7dGhpcy5kZXN0cm95Q2JzLnB1c2godCl9fSxxTD1jbGFzcyBleHRlbmRzIEdMe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5tb2R1bGVUeXBlPXR9Y3JlYXRlKHQpe3JldHVybiBuZXcgV0wodGhpcy5tb2R1bGVUeXBlLHQpfX0sWUw9Y2xhc3MgZXh0ZW5kcyBHcHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgQXgodGhpcyksdGhpcy5pbnN0YW5jZT1udWxsO2xldCByPW5ldyBaMShbLi4udCx7cHJvdmlkZTpHcCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpncyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLGV8fEkzKCksaSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpO3RoaXMuaW5qZWN0b3I9cixyLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpfWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRlc3Ryb3koKX1vbkRlc3Ryb3kodCl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3kodCl9fSxlQ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9pbmplY3Rvcj1lLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoZSl7aWYoIWUuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGUuaWQpKXtsZXQgaT1SOSgwLGUudHlwZSkscj1pLmxlbmd0aD4wP2Z1bmN0aW9uKG4sdCxlPW51bGwpe3JldHVybiBuZXcgWUwobix0LGUpLmluamVjdG9yfShbaV0sdGhpcy5faW5qZWN0b3IsYFN0YW5kYWxvbmVbJHtlLnR5cGUubmFtZX1dYCk6bnVsbDt0aGlzLmNhY2hlZEluamVjdG9ycy5zZXQoZS5pZCxyKX1yZXR1cm4gdGhpcy5jYWNoZWRJbmplY3RvcnMuZ2V0KGUuaWQpfW5nT25EZXN0cm95KCl7dHJ5e2ZvcihsZXQgZSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09ZSYmZS5kZXN0cm95KCl9ZmluYWxseXt0aGlzLmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX19cmV0dXJuIG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3IG4oaihqcCkpfSksbn0pKCk7ZnVuY3Rpb24gUXAobix0LGUpe2xldCBpPUtzKCkrbixyPXJ0KCk7cmV0dXJuIHJbaV09PT1Rbj9EdShyLGksZT90LmNhbGwoZSk6dCgpKTpZeChyLGkpfWZ1bmN0aW9uIE9uKG4sdCxlLGkpe3JldHVybiBSWShydCgpLEtzKCksbix0LGUsaSl9ZnVuY3Rpb24gUXIobix0LGUsaSxyKXtyZXR1cm4gT1kocnQoKSxLcygpLG4sdCxlLGkscil9ZnVuY3Rpb24gWngobix0LGUsaSxyLG8pe3JldHVybiBrWShydCgpLEtzKCksbix0LGUsaSxyLG8pfWZ1bmN0aW9uIEszKG4sdCxlLGkscixvLHMpe3JldHVybiBGWShydCgpLEtzKCksbix0LGUsaSxyLG8scyl9ZnVuY3Rpb24gWjMobix0LGUsaSxyLG8scyxhKXtsZXQgbD1LcygpK24sYz1ydCgpLHU9VmwoYyxsLGUsaSxyLG8pO3JldHVybiBEcyhjLGwrNCxzKXx8dT9EdShjLGwrNSxhP3QuY2FsbChhLGUsaSxyLG8scyk6dChlLGkscixvLHMpKTpZeChjLGwrNSl9ZnVuY3Rpb24gSngobix0KXtsZXQgZT1uW3RdO3JldHVybiBlPT09UW4/dm9pZCAwOmV9ZnVuY3Rpb24gUlkobix0LGUsaSxyLG8pe2xldCBzPXQrZTtyZXR1cm4gRHMobixzLHIpP0R1KG4scysxLG8/aS5jYWxsKG8scik6aShyKSk6SngobixzKzEpfWZ1bmN0aW9uIE9ZKG4sdCxlLGkscixvLHMpe2xldCBhPXQrZTtyZXR1cm4gS2YobixhLHIsbyk/RHUobixhKzIscz9pLmNhbGwocyxyLG8pOmkocixvKSk6SngobixhKzIpfWZ1bmN0aW9uIGtZKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9dCtlO3JldHVybiBTVChuLGwscixvLHMpP0R1KG4sbCszLGE/aS5jYWxsKGEscixvLHMpOmkocixvLHMpKTpKeChuLGwrMyl9ZnVuY3Rpb24gRlkobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXQrZTtyZXR1cm4gVmwobixjLHIsbyxzLGEpP0R1KG4sYys0LGw/aS5jYWxsKGwscixvLHMsYSk6aShyLG8scyxhKSk6SngobixjKzQpfWZ1bmN0aW9uIE5ZKG4sdCxlLGkscixvKXtsZXQgcz10K2UsYT0hMTtmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKylEcyhuLHMrKyxyW2xdKSYmKGE9ITApO3JldHVybiBhP0R1KG4scyxpLmFwcGx5KG8scikpOkp4KG4scyl9ZnVuY3Rpb24gQihuLHQpe2xldCBpLGU9RmkoKSxyPW4rMjI7ZS5maXJzdENyZWF0ZVBhc3M/KGk9ZnVuY3Rpb24obix0KXtpZih0KWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKXtsZXQgaT10W2VdO2lmKG49PT1pLm5hbWUpcmV0dXJuIGl9fSh0LGUucGlwZVJlZ2lzdHJ5KSxlLmRhdGFbcl09aSxpLm9uRGVzdHJveSYmKGUuZGVzdHJveUhvb2tzfHwoZS5kZXN0cm95SG9va3M9W10pKS5wdXNoKHIsaS5vbkRlc3Ryb3kpKTppPWUuZGF0YVtyXTtsZXQgbz1pLmZhY3Rvcnl8fChpLmZhY3Rvcnk9V2YoaS50eXBlKSkscz1rbChNKTt0cnl7bGV0IGE9cTEoITEpLGw9bygpO3JldHVybiBxMShhKSxmdW5jdGlvbihuLHQsZSxpKXtlPj1uLmRhdGEubGVuZ3RoJiYobi5kYXRhW2VdPW51bGwsbi5ibHVlcHJpbnRbZV09bnVsbCksdFtlXT1pfShlLHJ0KCkscixsKSxsfWZpbmFsbHl7a2wocyl9fWZ1bmN0aW9uIFUobix0LGUpe2xldCBpPW4rMjIscj1ydCgpLG89SDAocixpKTtyZXR1cm4gJHgocixpKT9SWShyLEtzKCksdCxvLnRyYW5zZm9ybSxlLG8pOm8udHJhbnNmb3JtKGUpfWZ1bmN0aW9uIEpmKG4sdCxlLGkpe2xldCByPW4rMjIsbz1ydCgpLHM9SDAobyxyKTtyZXR1cm4gJHgobyxyKT9PWShvLEtzKCksdCxzLnRyYW5zZm9ybSxlLGkscyk6cy50cmFuc2Zvcm0oZSxpKX1mdW5jdGlvbiBKMyhuLHQsZSxpLHIpe2xldCBvPW4rMjIscz1ydCgpLGE9SDAocyxvKTtyZXR1cm4gJHgocyxvKT9rWShzLEtzKCksdCxhLnRyYW5zZm9ybSxlLGkscixhKTphLnRyYW5zZm9ybShlLGkscil9ZnVuY3Rpb24gJHgobix0KXtyZXR1cm4gblsxXS5kYXRhW3RdLnB1cmV9ZnVuY3Rpb24gS04obil7cmV0dXJuIHQ9PntzZXRUaW1lb3V0KG4sdm9pZCAwLHQpfX12YXIgRz1jbGFzcyBleHRlbmRzIGtle2NvbnN0cnVjdG9yKHQ9ITEpe3N1cGVyKCksdGhpcy5fX2lzQXN5bmM9dH1lbWl0KHQpe3N1cGVyLm5leHQodCl9c3Vic2NyaWJlKHQsZSxpKXtsZXQgcj10LG89ZXx8KCgpPT5udWxsKSxzPWk7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0KXtsZXQgbD10O3I9bC5uZXh0Py5iaW5kKGwpLG89bC5lcnJvcj8uYmluZChsKSxzPWwuY29tcGxldGU/LmJpbmQobCl9dGhpcy5fX2lzQXN5bmMmJihvPUtOKG8pLHImJihyPUtOKHIpKSxzJiYocz1LTihzKSkpO2xldCBhPXN1cGVyLnN1YnNjcmliZSh7bmV4dDpyLGVycm9yOm8sY29tcGxldGU6c30pO3JldHVybiB0IGluc3RhbmNlb2YgU24mJnQuYWRkKGEpLGF9fTtmdW5jdGlvbiBjQ2UoKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tNVCgpXSgpfXZhciBIbD1jbGFzc3tjb25zdHJ1Y3Rvcih0PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT10LHRoaXMuZGlydHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtsZXQgZT1NVCgpLGk9SGwucHJvdG90eXBlO2lbZV18fChpW2VdPWNDZSl9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlc3x8KHRoaXMuX2NoYW5nZXM9bmV3IEcpfWdldCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0c1t0XX1tYXAodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfWZpbHRlcih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maWx0ZXIodCl9ZmluZCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maW5kKHQpfXJlZHVjZSh0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfWZvckVhY2godCl7dGhpcy5fcmVzdWx0cy5mb3JFYWNoKHQpfXNvbWUodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc29tZSh0KX10b0FycmF5KCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9yZXN1bHRzLnRvU3RyaW5nKCl9cmVzZXQodCxlKXtsZXQgaT10aGlzO2kuZGlydHk9ITE7bGV0IHI9RmQodCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hZnVuY3Rpb24obix0LGUpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCByPW5baV0sbz10W2ldO2lmKGUmJihyPWUociksbz1lKG8pKSxvIT09cilyZXR1cm4hMX1yZXR1cm4hMH0oaS5fcmVzdWx0cyxyLGUpKSYmKGkuX3Jlc3VsdHM9cixpLmxlbmd0aD1yLmxlbmd0aCxpLmxhc3Q9clt0aGlzLmxlbmd0aC0xXSxpLmZpcnN0PXJbMF0pfW5vdGlmeU9uQ2hhbmdlcygpe3RoaXMuX2NoYW5nZXMmJih0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWR8fCF0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seSkmJnRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITB9ZGVzdHJveSgpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfX0sVmk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189cENlLG59KSgpLHVDZT1WaSxkQ2U9Y2xhc3MgZXh0ZW5kcyB1Q2V7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fZGVjbGFyYXRpb25MVmlldz10LHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lcj1lLHRoaXMuZWxlbWVudFJlZj1pfWNyZWF0ZUVtYmVkZGVkVmlldyh0LGUpe2xldCBpPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlld3Mscj1iVCh0aGlzLl9kZWNsYXJhdGlvbkxWaWV3LGksdCwxNixudWxsLGkuZGVjbFROb2RlLG51bGwsbnVsbCxudWxsLG51bGwsZXx8bnVsbCk7clsxN109dGhpcy5fZGVjbGFyYXRpb25MVmlld1t0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIuaW5kZXhdO2xldCBzPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbMTldO3JldHVybiBudWxsIT09cyYmKHJbMTldPXMuY3JlYXRlRW1iZWRkZWRWaWV3KGkpKSxIMyhpLHIsdCksbmV3IFFmKHIpfX07ZnVuY3Rpb24gcENlKCl7cmV0dXJuIFJUKHpvKCkscnQoKSl9ZnVuY3Rpb24gUlQobix0KXtyZXR1cm4gNCZuLnR5cGU/bmV3IGRDZSh0LG4sRzAobix0KSk6bnVsbH12YXIgT2k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189aENlLG59KSgpO2Z1bmN0aW9uIGhDZSgpe3JldHVybiBCWSh6bygpLHJ0KCkpfXZhciBmQ2U9T2ksTFk9Y2xhc3MgZXh0ZW5kcyBmQ2V7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fbENvbnRhaW5lcj10LHRoaXMuX2hvc3RUTm9kZT1lLHRoaXMuX2hvc3RMVmlldz1pfWdldCBlbGVtZW50KCl7cmV0dXJuIEcwKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgamYodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IHBhcmVudEluamVjdG9yKCl7bGV0IHQ9QzModGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYoZTkodCkpe2xldCBlPVcxKHQsdGhpcy5faG9zdExWaWV3KSxpPUcxKHQpO3JldHVybiBuZXcgamYoZVsxXS5kYXRhW2krOF0sZSl9cmV0dXJuIG5ldyBqZihudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldCh0KXtsZXQgZT1nNyh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWUmJmVbdF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC0xMH1jcmVhdGVFbWJlZGRlZFZpZXcodCxlLGkpe2xldCByLG87Im51bWJlciI9PXR5cGVvZiBpP3I9aTpudWxsIT1pJiYocj1pLmluZGV4LG89aS5pbmplY3Rvcik7bGV0IHM9dC5jcmVhdGVFbWJlZGRlZFZpZXcoZXx8e30sbyk7cmV0dXJuIHRoaXMuaW5zZXJ0KHMsciksc31jcmVhdGVDb21wb25lbnQodCxlLGkscixvKXtsZXQgYSxzPXQmJiF1eCh0KTtpZihzKWE9ZTtlbHNle2xldCBkPWV8fHt9O2E9ZC5pbmRleCxpPWQuaW5qZWN0b3Iscj1kLnByb2plY3RhYmxlTm9kZXMsbz1kLmVudmlyb25tZW50SW5qZWN0b3J8fGQubmdNb2R1bGVSZWZ9bGV0IGw9cz90Om5ldyBlVChObCh0KSksYz1pfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFvJiZudWxsPT1sLm5nTW9kdWxlKXtsZXQgcD0ocz9jOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChqcCxudWxsKTtwJiYobz1wKX1sZXQgdT1sLmNyZWF0ZShjLHIsdm9pZCAwLG8pO3JldHVybiB0aGlzLmluc2VydCh1Lmhvc3RWaWV3LGEpLHV9aW5zZXJ0KHQsZSl7bGV0IGk9dC5fbFZpZXcscj1pWzFdO2lmKFZkKGlbM10pKXtsZXQgdT10aGlzLmluZGV4T2YodCk7aWYoLTEhPT11KXRoaXMuZGV0YWNoKHUpO2Vsc2V7bGV0IGQ9aVszXSxwPW5ldyBMWShkLGRbNl0sZFszXSk7cC5kZXRhY2gocC5pbmRleE9mKHQpKX19bGV0IG89dGhpcy5fYWRqdXN0SW5kZXgoZSkscz10aGlzLl9sQ29udGFpbmVyOyFmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xMCtpLG89ZS5sZW5ndGg7aT4wJiYoZVtyLTFdWzRdPXQpLGk8by0xMD8odFs0XT1lW3JdLHU5KGUsMTAraSx0KSk6KGUucHVzaCh0KSx0WzRdPW51bGwpLHRbM109ZTtsZXQgcz10WzE3XTtudWxsIT09cyYmZSE9PXMmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bls5XTt0WzE2XSE9PXRbM11bM11bMTZdJiYoblsyXT0hMCksbnVsbD09PWU/bls5XT1bdF06ZS5wdXNoKHQpfShzLHQpO2xldCBhPXRbMTldO251bGwhPT1hJiZhLmluc2VydFZpZXcobiksdFsyXXw9NjR9KHIsaSxzLG8pO2xldCBhPVBMKG8scyksbD1pWzExXSxjPXZUKGwsc1s3XSk7cmV0dXJuIG51bGwhPT1jJiZmdW5jdGlvbihuLHQsZSxpLHIsbyl7aVswXT1yLGlbNl09dCxxeChuLGksZSwxLHIsbyl9KHIsc1s2XSxsLGksYyxhKSx0LmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLHU5KFpOKHMpLG8sdCksdH1tb3ZlKHQsZSl7cmV0dXJuIHRoaXMuaW5zZXJ0KHQsZSl9aW5kZXhPZih0KXtsZXQgZT1nNyh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWU/ZS5pbmRleE9mKHQpOi0xfXJlbW92ZSh0KXtsZXQgZT10aGlzLl9hZGp1c3RJbmRleCh0LC0xKSxpPUFMKHRoaXMuX2xDb250YWluZXIsZSk7aSYmKFgxKFpOKHRoaXMuX2xDb250YWluZXIpLGUpLFU5KGlbMV0saSkpfWRldGFjaCh0KXtsZXQgZT10aGlzLl9hZGp1c3RJbmRleCh0LC0xKSxpPUFMKHRoaXMuX2xDb250YWluZXIsZSk7cmV0dXJuIGkmJm51bGwhPVgxKFpOKHRoaXMuX2xDb250YWluZXIpLGUpP25ldyBRZihpKTpudWxsfV9hZGp1c3RJbmRleCh0LGU9MCl7cmV0dXJuIHQ/P3RoaXMubGVuZ3RoK2V9fTtmdW5jdGlvbiBnNyhuKXtyZXR1cm4gbls4XX1mdW5jdGlvbiBaTihuKXtyZXR1cm4gbls4XXx8KG5bOF09W10pfWZ1bmN0aW9uIEJZKG4sdCl7bGV0IGUsaT10W24uaW5kZXhdO2lmKFZkKGkpKWU9aTtlbHNle2xldCByO2lmKDgmbi50eXBlKXI9JGEoaSk7ZWxzZXtsZXQgbz10WzExXTtyPW8uY3JlYXRlQ29tbWVudCgiIik7bGV0IHM9VWwobix0KTtZZihvLHZUKG8scykscixmdW5jdGlvbihuLHQpe3JldHVybiBuLm5leHRTaWJsaW5nKHQpfShvLHMpLCExKX10W24uaW5kZXhdPWU9dnEoaSx0LHIsbiksQ1QodCxlKX1yZXR1cm4gbmV3IExZKGUsbix0KX12YXIgUng9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5xdWVyeUxpc3Q9dCx0aGlzLm1hdGNoZXM9bnVsbH1jbG9uZSgpe3JldHVybiBuZXcgUngodGhpcy5xdWVyeUxpc3QpfXNldERpcnR5KCl7dGhpcy5xdWVyeUxpc3Quc2V0RGlydHkoKX19LE94PWNsYXNze2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMucXVlcmllcz10fWNyZWF0ZUVtYmVkZGVkVmlldyh0KXtsZXQgZT10LnF1ZXJpZXM7aWYobnVsbCE9PWUpe2xldCBpPW51bGwhPT10LmNvbnRlbnRRdWVyaWVzP3QuY29udGVudFF1ZXJpZXNbMF06ZS5sZW5ndGgscj1bXTtmb3IobGV0IG89MDtvPGk7bysrKXtsZXQgcz1lLmdldEJ5SW5kZXgobyk7ci5wdXNoKHRoaXMucXVlcmllc1tzLmluZGV4SW5EZWNsYXJhdGlvblZpZXddLmNsb25lKCkpfXJldHVybiBuZXcgT3gocil9cmV0dXJuIG51bGx9aW5zZXJ0Vmlldyh0KXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKHQpfWRldGFjaFZpZXcodCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KX1kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KXtmb3IobGV0IGU9MDtlPHRoaXMucXVlcmllcy5sZW5ndGg7ZSsrKW51bGwhPT16WSh0LGUpLm1hdGNoZXMmJnRoaXMucXVlcmllc1tlXS5zZXREaXJ0eSgpfX0sclQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCl7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLmZsYWdzPWUsdGhpcy5yZWFkPWl9fSxreD1jbGFzc3tjb25zdHJ1Y3Rvcih0PVtdKXt0aGlzLnF1ZXJpZXM9dH1lbGVtZW50U3RhcnQodCxlKXtmb3IobGV0IGk9MDtpPHRoaXMucXVlcmllcy5sZW5ndGg7aSsrKXRoaXMucXVlcmllc1tpXS5lbGVtZW50U3RhcnQodCxlKX1lbGVtZW50RW5kKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5xdWVyaWVzLmxlbmd0aDtlKyspdGhpcy5xdWVyaWVzW2VdLmVsZW1lbnRFbmQodCl9ZW1iZWRkZWRUVmlldyh0KXtsZXQgZT1udWxsO2ZvcihsZXQgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXtsZXQgcj1udWxsIT09ZT9lLmxlbmd0aDowLG89dGhpcy5nZXRCeUluZGV4KGkpLmVtYmVkZGVkVFZpZXcodCxyKTtvJiYoby5pbmRleEluRGVjbGFyYXRpb25WaWV3PWksbnVsbCE9PWU/ZS5wdXNoKG8pOmU9W29dKX1yZXR1cm4gbnVsbCE9PWU/bmV3IGt4KGUpOm51bGx9dGVtcGxhdGUodCxlKXtmb3IobGV0IGk9MDtpPHRoaXMucXVlcmllcy5sZW5ndGg7aSsrKXRoaXMucXVlcmllc1tpXS50ZW1wbGF0ZSh0LGUpfWdldEJ5SW5kZXgodCl7cmV0dXJuIHRoaXMucXVlcmllc1t0XX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2sodCl7dGhpcy5xdWVyaWVzLnB1c2godCl9fSxGeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9LTEpe3RoaXMubWV0YWRhdGE9dCx0aGlzLm1hdGNoZXM9bnVsbCx0aGlzLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9LTEsdGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMSx0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMCx0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD1lfWVsZW1lbnRTdGFydCh0LGUpe3RoaXMuaXNBcHBseWluZ1RvTm9kZShlKSYmdGhpcy5tYXRjaFROb2RlKHQsZSl9ZWxlbWVudEVuZCh0KXt0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD09PXQuaW5kZXgmJih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMSl9dGVtcGxhdGUodCxlKXt0aGlzLmVsZW1lbnRTdGFydCh0LGUpfWVtYmVkZGVkVFZpZXcodCxlKXtyZXR1cm4gdGhpcy5pc0FwcGx5aW5nVG9Ob2RlKHQpPyh0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSEwLHRoaXMuYWRkTWF0Y2goLXQuaW5kZXgsZSksbmV3IEZ4KHRoaXMubWV0YWRhdGEpKTpudWxsfWlzQXBwbHlpbmdUb05vZGUodCl7aWYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGUmJjEhPSgxJnRoaXMubWV0YWRhdGEuZmxhZ3MpKXtsZXQgZT10aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleCxpPXQucGFyZW50O2Zvcig7bnVsbCE9PWkmJjgmaS50eXBlJiZpLmluZGV4IT09ZTspaT1pLnBhcmVudDtyZXR1cm4gZT09PShudWxsIT09aT9pLmluZGV4Oi0xKX1yZXR1cm4gdGhpcy5fYXBwbGllc1RvTmV4dE5vZGV9bWF0Y2hUTm9kZSh0LGUpe2xldCBpPXRoaXMubWV0YWRhdGEucHJlZGljYXRlO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLF9DZShlLG8pKSx0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsSTEoZSx0LG8sITEsITEpKX1lbHNlIGk9PT1WaT80JmUudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsSTEoZSx0LGksITEsITEpKX1tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLGkpe2lmKG51bGwhPT1pKXtsZXQgcj10aGlzLm1ldGFkYXRhLnJlYWQ7aWYobnVsbCE9PXIpaWYocj09PVJlfHxyPT09T2l8fHI9PT1WaSYmNCZlLnR5cGUpdGhpcy5hZGRNYXRjaChlLmluZGV4LC0yKTtlbHNle2xldCBvPUkxKGUsdCxyLCExLCExKTtudWxsIT09byYmdGhpcy5hZGRNYXRjaChlLmluZGV4LG8pfWVsc2UgdGhpcy5hZGRNYXRjaChlLmluZGV4LGkpfX1hZGRNYXRjaCh0LGUpe251bGw9PT10aGlzLm1hdGNoZXM/dGhpcy5tYXRjaGVzPVt0LGVdOnRoaXMubWF0Y2hlcy5wdXNoKHQsZSl9fTtmdW5jdGlvbiBfQ2Uobix0KXtsZXQgZT1uLmxvY2FsTmFtZXM7aWYobnVsbCE9PWUpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKWlmKGVbaV09PT10KXJldHVybiBlW2krMV07cmV0dXJuIG51bGx9ZnVuY3Rpb24geUNlKG4sdCxlLGkpe3JldHVybi0xPT09ZT9mdW5jdGlvbihuLHQpe3JldHVybiAxMSZuLnR5cGU/RzAobix0KTo0Jm4udHlwZT9SVChuLHQpOm51bGx9KHQsbik6LTI9PT1lP2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gZT09PVJlP0cwKHQsbik6ZT09PVZpP1JUKHQsbik6ZT09PU9pP0JZKHQsbik6dm9pZCAwfShuLHQsaSk6QngobixuWzFdLGUsdCl9ZnVuY3Rpb24gVlkobix0LGUsaSl7bGV0IHI9dFsxOV0ucXVlcmllc1tpXTtpZihudWxsPT09ci5tYXRjaGVzKXtsZXQgbz1uLmRhdGEscz1lLm1hdGNoZXMsYT1bXTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTIpe2xldCBjPXNbbF07YS5wdXNoKGM8MD9udWxsOnlDZSh0LG9bY10sc1tsKzFdLGUubWV0YWRhdGEucmVhZCkpfXIubWF0Y2hlcz1hfXJldHVybiByLm1hdGNoZXN9ZnVuY3Rpb24gUUwobix0LGUsaSl7bGV0IHI9bi5xdWVyaWVzLmdldEJ5SW5kZXgoZSksbz1yLm1hdGNoZXM7aWYobnVsbCE9PW8pe2xldCBzPVZZKG4sdCxyLGUpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSs9Mil7bGV0IGw9b1thXTtpZihsPjApaS5wdXNoKHNbYS8yXSk7ZWxzZXtsZXQgYz1vW2ErMV0sdT10Wy1sXTtmb3IobGV0IGQ9MTA7ZDx1Lmxlbmd0aDtkKyspe2xldCBwPXVbZF07cFsxN109PT1wWzNdJiZRTChwWzFdLHAsYyxpKX1pZihudWxsIT09dVs5XSl7bGV0IGQ9dVs5XTtmb3IobGV0IHA9MDtwPGQubGVuZ3RoO3ArKyl7bGV0IGg9ZFtwXTtRTChoWzFdLGgsYyxpKX19fX19cmV0dXJuIGl9ZnVuY3Rpb24gTmUobil7bGV0IHQ9cnQoKSxlPUZpKCksaT1xNygpO3YzKGkrMSk7bGV0IHI9elkoZSxpKTtpZihuLmRpcnR5JiZmdW5jdGlvbihuKXtyZXR1cm4gND09KDQmblsyXSl9KHQpPT09KDI9PSgyJnIubWV0YWRhdGEuZmxhZ3MpKSl7aWYobnVsbD09PXIubWF0Y2hlcyluLnJlc2V0KFtdKTtlbHNle2xldCBvPXIuY3Jvc3Nlc05nVGVtcGxhdGU/UUwoZSx0LGksW10pOlZZKGUsdCxyLGkpO24ucmVzZXQobyxCdmUpLG4ubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gb3Qobix0LGUpe2xldCBpPUZpKCk7aS5maXJzdENyZWF0ZVBhc3MmJihVWShpLG5ldyByVChuLHQsZSksLTEpLDI9PSgyJnQpJiYoaS5zdGF0aWNWaWV3UXVlcmllcz0hMCkpLEhZKGkscnQoKSx0KX1mdW5jdGlvbiBFaShuLHQsZSxpKXtsZXQgcj1GaSgpO2lmKHIuZmlyc3RDcmVhdGVQYXNzKXtsZXQgbz16bygpO1VZKHIsbmV3IHJUKHQsZSxpKSxvLmluZGV4KSxmdW5jdGlvbihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXN8fChuLmNvbnRlbnRRdWVyaWVzPVtdKTt0IT09KGUubGVuZ3RoP2VbZS5sZW5ndGgtMV06LTEpJiZlLnB1c2gobi5xdWVyaWVzLmxlbmd0aC0xLHQpfShyLG4pLDI9PSgyJmUpJiYoci5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9SFkocixydCgpLGUpfWZ1bmN0aW9uIExlKCl7cmV0dXJuIG49cnQoKSx0PXE3KCksblsxOV0ucXVlcmllc1t0XS5xdWVyeUxpc3Q7dmFyIG4sdH1mdW5jdGlvbiBIWShuLHQsZSl7bGV0IGk9bmV3IEhsKDQ9PSg0JmUpKTt1cShuLHQsaSxpLmRlc3Ryb3kpLG51bGw9PT10WzE5XSYmKHRbMTldPW5ldyBPeCksdFsxOV0ucXVlcmllcy5wdXNoKG5ldyBSeChpKSl9ZnVuY3Rpb24gVVkobix0LGUpe251bGw9PT1uLnF1ZXJpZXMmJihuLnF1ZXJpZXM9bmV3IGt4KSxuLnF1ZXJpZXMudHJhY2sobmV3IEZ4KHQsZSkpfWZ1bmN0aW9uIHpZKG4sdCl7cmV0dXJuIG4ucXVlcmllcy5nZXRCeUluZGV4KHQpfWZ1bmN0aW9uIHF0KG4sdCl7cmV0dXJuIFJUKG4sdCl9dmFyIEhwPXsiXHUwMjc1XHUwMjc1YXR0cmlidXRlIjp6ZSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGUxIjpmdW5jdGlvbiBFcShuLHQsZSxpLHIsbyl7bGV0IHM9cnQoKSxhPVgwKHMsdCxlLGkpO3JldHVybiBhIT09UW4mJlR1KG5vKCkscyxuLGEscixvKSxFcX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMiI6ZnVuY3Rpb24gVHEobix0LGUsaSxyLG8scyxhKXtsZXQgbD1ydCgpLGM9UTAobCx0LGUsaSxyLG8pO3JldHVybiBjIT09UW4mJlR1KG5vKCksbCxuLGMscyxhKSxUcX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMyI6ZnVuY3Rpb24gRHEobix0LGUsaSxyLG8scyxhLGwsYyl7bGV0IHU9cnQoKSxkPUswKHUsdCxlLGkscixvLHMsYSk7cmV0dXJuIGQhPT1RbiYmVHUobm8oKSx1LG4sZCxsLGMpLERxfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiBBcShuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCl7bGV0IHA9cnQoKSxoPVowKHAsdCxlLGkscixvLHMsYSxsLGMpO3JldHVybiBoIT09UW4mJlR1KG5vKCkscCxuLGgsdSxkKSxBcX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNSI6ZnVuY3Rpb24gSXEobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoKXtsZXQgZj1ydCgpLG09SjAoZix0LGUsaSxyLG8scyxhLGwsYyx1LGQpO3JldHVybiBtIT09UW4mJlR1KG5vKCksZixuLG0scCxoKSxJcX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNiI6ZnVuY3Rpb24gUHEobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSl7bGV0IHg9cnQoKSxnPSQwKHgsdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCk7cmV0dXJuIGchPT1RbiYmVHUobm8oKSx4LG4sZyxmLG0pLFBxfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBScShuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLHgsZyl7bGV0IGI9cnQoKSxEPWVfKGIsdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0pO3JldHVybiBEIT09UW4mJlR1KG5vKCksYixuLEQseCxnKSxScX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlOCI6ZnVuY3Rpb24gT3Eobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSx4LGcsYixEKXtsZXQgVD1ydCgpLGs9dF8oVCx0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSx4LGcpO3JldHVybiBrIT09UW4mJlR1KG5vKCksVCxuLGssYixEKSxPcX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlViI6ZnVuY3Rpb24ga3Eobix0LGUsaSl7bGV0IHI9cnQoKSxvPVkwKHIsdCk7cmV0dXJuIG8hPT1RbiYmVHUobm8oKSxyLG4sbyxlLGkpLGtxfSwiXHUwMjc1XHUwMjc1ZGVmaW5lQ29tcG9uZW50IjpSLCJcdTAyNzVcdTAyNzVkZWZpbmVEaXJlY3RpdmUiOkhlLCJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlIjp5ZSwiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiOlYsIlx1MDI3NVx1MDI3NWRlZmluZU5nTW9kdWxlIjpILCJcdTAyNzVcdTAyNzVkZWZpbmVQaXBlIjpCMCwiXHUwMjc1XHUwMjc1ZGlyZWN0aXZlSW5qZWN0IjpNLCJcdTAyNzVcdTAyNzVnZXRJbmhlcml0ZWRGYWN0b3J5IjpwaSwiXHUwMjc1XHUwMjc1aW5qZWN0IjpqLCJcdTAyNzVcdTAyNzVpbmplY3RBdHRyaWJ1dGUiOnZvLCJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeSI6bmwsIlx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5RGVwIjpkOSwiXHUwMjc1XHUwMjc1dGVtcGxhdGVSZWZFeHRyYWN0b3IiOnF0LCJcdTAyNzVcdTAyNzVyZXNldFZpZXciOnNlLCJcdTAyNzVcdTAyNzVOZ09uQ2hhbmdlc0ZlYXR1cmUiOkZ0LCJcdTAyNzVcdTAyNzVQcm92aWRlcnNGZWF0dXJlIjokdCwiXHUwMjc1XHUwMjc1Q29weURlZmluaXRpb25GZWF0dXJlIjpmdW5jdGlvbihuKXtsZXQgZSx0PVNxKG4udHlwZSk7ZT1BYyhuKT90Llx1MDI3NWNtcDp0Llx1MDI3NWRpcjtsZXQgaT1uO2ZvcihsZXQgciBvZiBjYmUpaVtyXT1lW3JdO2lmKEFjKGUpKWZvcihsZXQgciBvZiB1YmUpaVtyXT1lW3JdfSwiXHUwMjc1XHUwMjc1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIjp0dCwiXHUwMjc1XHUwMjc1U3RhbmRhbG9uZUZlYXR1cmUiOmZ1bmN0aW9uKG4pe24uZ2V0U3RhbmRhbG9uZUluamVjdG9yPXQ9PnQuZ2V0KGVDZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3Iobil9LCJcdTAyNzVcdTAyNzVuZXh0Q29udGV4dCI6UywiXHUwMjc1XHUwMjc1bmFtZXNwYWNlSFRNTCI6SnMsIlx1MDI3NVx1MDI3NW5hbWVzcGFjZU1hdGhNTCI6ZnVuY3Rpb24oKXtabi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT0ibWF0aCJ9LCJcdTAyNzVcdTAyNzVuYW1lc3BhY2VTVkciOkluLCJcdTAyNzVcdTAyNzVlbmFibGVCaW5kaW5ncyI6ZnVuY3Rpb24oKXtabi5iaW5kaW5nc0VuYWJsZWQ9ITB9LCJcdTAyNzVcdTAyNzVkaXNhYmxlQmluZGluZ3MiOmZ1bmN0aW9uKCl7Wm4uYmluZGluZ3NFbmFibGVkPSExfSwiXHUwMjc1XHUwMjc1ZWxlbWVudFN0YXJ0IjpfLCJcdTAyNzVcdTAyNzVlbGVtZW50RW5kIjp2LCJcdTAyNzVcdTAyNzVlbGVtZW50IjpPLCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyU3RhcnQiOnNuLCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyRW5kIjphbiwiXHUwMjc1XHUwMjc1ZWxlbWVudENvbnRhaW5lciI6TmksIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjAiOlFwLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24xIjpPbiwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMiI6UXIsIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjMiOlp4LCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb240IjpLMywiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNSI6WjMsIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsKXtsZXQgYz1LcygpK24sdT1ydCgpLGQ9VmwodSxjLGUsaSxyLG8pO3JldHVybiBLZih1LGMrNCxzLGEpfHxkP0R1KHUsYys2LGw/dC5jYWxsKGwsZSxpLHIsbyxzLGEpOnQoZSxpLHIsbyxzLGEpKTpZeCh1LGMrNil9LCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb243IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjKXtsZXQgdT1LcygpK24sZD1ydCgpLHA9VmwoZCx1LGUsaSxyLG8pO3JldHVybiBTVChkLHUrNCxzLGEsbCl8fHA/RHUoZCx1KzcsYz90LmNhbGwoYyxlLGkscixvLHMsYSxsKTp0KGUsaSxyLG8scyxhLGwpKTpZeChkLHUrNyl9LCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb244IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPUtzKCkrbixwPXJ0KCksaD1WbChwLGQsZSxpLHIsbyk7cmV0dXJuIFZsKHAsZCs0LHMsYSxsLGMpfHxoP0R1KHAsZCs4LHU/dC5jYWxsKHUsZSxpLHIsbyxzLGEsbCxjKTp0KGUsaSxyLG8scyxhLGwsYykpOll4KHAsZCs4KX0sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvblYiOmZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiBOWShydCgpLEtzKCksbix0LGUsaSl9LCJcdTAyNzVcdTAyNzVnZXRDdXJyZW50VmlldyI6UGUsIlx1MDI3NVx1MDI3NXJlc3RvcmVWaWV3IjpvZSwiXHUwMjc1XHUwMjc1bGlzdGVuZXIiOlAsIlx1MDI3NVx1MDI3NXByb2plY3Rpb24iOlZuLCJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0UHJvcGVydHkiOnJfLCJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0TGlzdGVuZXIiOmlfLCJcdTAyNzVcdTAyNzVwaXBlQmluZDEiOlUsIlx1MDI3NVx1MDI3NXBpcGVCaW5kMiI6SmYsIlx1MDI3NVx1MDI3NXBpcGVCaW5kMyI6SjMsIlx1MDI3NVx1MDI3NXBpcGVCaW5kNCI6ZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPW4rMjIsYT1ydCgpLGw9SDAoYSxzKTtyZXR1cm4gJHgoYSxzKT9GWShhLEtzKCksdCxsLnRyYW5zZm9ybSxlLGkscixvLGwpOmwudHJhbnNmb3JtKGUsaSxyLG8pfSwiXHUwMjc1XHUwMjc1cGlwZUJpbmRWIjpmdW5jdGlvbihuLHQsZSl7bGV0IGk9bisyMixyPXJ0KCksbz1IMChyLGkpO3JldHVybiAkeChyLGkpP05ZKHIsS3MoKSx0LG8udHJhbnNmb3JtLGUsbyk6by50cmFuc2Zvcm0uYXBwbHkobyxlKX0sIlx1MDI3NVx1MDI3NXByb2plY3Rpb25EZWYiOnhpLCJcdTAyNzVcdTAyNzVob3N0UHJvcGVydHkiOl9zLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eSI6eSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZSI6WmksIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUxIjpYeCwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTIiOkVULCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMyI6ZnVuY3Rpb24gTnEobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXJ0KCksdT1LMChjLHQsZSxpLHIsbyxzLGEpO3JldHVybiB1IT09UW4mJmlsKEZpKCksbm8oKSxjLG4sdSxjWzExXSxsLCExKSxOcX0sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU0IjpmdW5jdGlvbiBMcShuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPXJ0KCkscD1aMChkLHQsZSxpLHIsbyxzLGEsbCxjKTtyZXR1cm4gcCE9PVFuJiZpbChGaSgpLG5vKCksZCxuLHAsZFsxMV0sdSwhMSksTHF9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNSI6ZnVuY3Rpb24gQnEobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7bGV0IGg9cnQoKSxmPUowKGgsdCxlLGkscixvLHMsYSxsLGMsdSxkKTtyZXR1cm4gZiE9PVFuJiZpbChGaSgpLG5vKCksaCxuLGYsaFsxMV0scCwhMSksQnF9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNiI6ZnVuY3Rpb24gVnEobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe2xldCBtPXJ0KCkseD0kMChtLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpO3JldHVybiB4IT09UW4mJmlsKEZpKCksbm8oKSxtLG4seCxtWzExXSxmLCExKSxWcX0sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBIcShuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLHgpe2xldCBnPXJ0KCksYj1lXyhnLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtKTtyZXR1cm4gYiE9PVFuJiZpbChGaSgpLG5vKCksZyxuLGIsZ1sxMV0seCwhMSksSHF9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlOCI6ZnVuY3Rpb24gVXEobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSx4LGcsYil7bGV0IEQ9cnQoKSxUPXRfKEQsdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0seCxnKTtyZXR1cm4gVCE9PVFuJiZpbChGaSgpLG5vKCksRCxuLFQsRFsxMV0sYiwhMSksVXF9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlViI6ZnVuY3Rpb24genEobix0LGUpe2xldCBpPXJ0KCkscj1ZMChpLHQpO3JldHVybiByIT09UW4mJmlsKEZpKCksbm8oKSxpLG4scixpWzExXSxlLCExKSx6cX0sIlx1MDI3NVx1MDI3NXBpcGUiOkIsIlx1MDI3NVx1MDI3NXF1ZXJ5UmVmcmVzaCI6TmUsIlx1MDI3NVx1MDI3NXZpZXdRdWVyeSI6b3QsIlx1MDI3NVx1MDI3NWxvYWRRdWVyeSI6TGUsIlx1MDI3NVx1MDI3NWNvbnRlbnRRdWVyeSI6RWksIlx1MDI3NVx1MDI3NXJlZmVyZW5jZSI6JGUsIlx1MDI3NVx1MDI3NWNsYXNzTWFwIjpEYSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTEiOlF4LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlMiI6ZnVuY3Rpb24obix0LGUsaSxyKXtPYyhlbCxBdSxRMChydCgpLG4sdCxlLGksciksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMpe09jKGVsLEF1LEswKHJ0KCksbix0LGUsaSxyLG8scyksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsKXtPYyhlbCxBdSxaMChydCgpLG4sdCxlLGkscixvLHMsYSxsKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNSI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1KXtPYyhlbCxBdSxKMChydCgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHApe09jKGVsLEF1LCQwKHJ0KCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKXtPYyhlbCxBdSxlXyhydCgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlOCI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSx4KXtPYyhlbCxBdSx0XyhydCgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0seCksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uKG4pe09jKGVsLEF1LFkwKHJ0KCksbiksITApfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXAiOmpsLCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMSI6ZnVuY3Rpb24obix0LGUpe2psKFgwKHJ0KCksbix0LGUpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGUyIjpmdW5jdGlvbihuLHQsZSxpLHIpe2psKFEwKHJ0KCksbix0LGUsaSxyKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMyI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyl7amwoSzAocnQoKSxuLHQsZSxpLHIsbyxzKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNCI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwpe2psKFowKHJ0KCksbix0LGUsaSxyLG8scyxhLGwpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU1IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2psKEowKHJ0KCksbix0LGUsaSxyLG8scyxhLGwsYyx1KSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNiI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7amwoJDAocnQoKSxuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNyI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe2psKGVfKHJ0KCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU4IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLHgpe2psKHRfKHJ0KCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSx4KSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlViI6ZnVuY3Rpb24obil7amwoWTAocnQoKSxuKSl9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3AiOlB0LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTEiOmZ1bmN0aW9uIHJZKG4sdCxlLGkscil7cmV0dXJuIFJjKG4sWDAocnQoKSx0LGUsaSksciwhMSkscll9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTIiOmZ1bmN0aW9uIG9ZKG4sdCxlLGkscixvLHMpe3JldHVybiBSYyhuLFEwKHJ0KCksdCxlLGkscixvKSxzLCExKSxvWX0sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMyI6ZnVuY3Rpb24gc1kobix0LGUsaSxyLG8scyxhLGwpe3JldHVybiBSYyhuLEswKHJ0KCksdCxlLGkscixvLHMsYSksbCwhMSksc1l9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIGFZKG4sdCxlLGkscixvLHMsYSxsLGMsdSl7cmV0dXJuIFJjKG4sWjAocnQoKSx0LGUsaSxyLG8scyxhLGwsYyksdSwhMSksYVl9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uIGxZKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHApe3JldHVybiBSYyhuLEowKHJ0KCksdCxlLGkscixvLHMsYSxsLGMsdSxkKSxwLCExKSxsWX0sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNiI6ZnVuY3Rpb24gY1kobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe3JldHVybiBSYyhuLCQwKHJ0KCksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCksZiwhMSksY1l9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIHVZKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0seCl7cmV0dXJuIFJjKG4sZV8ocnQoKSx0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSkseCwhMSksdVl9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uIGRZKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0seCxnLGIpe3JldHVybiBSYyhuLHRfKHJ0KCksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0seCxnKSxiLCExKSxkWX0sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlViI6ZnVuY3Rpb24gcFkobix0LGUpe3JldHVybiBSYyhuLFkwKHJ0KCksdCksZSwhMSkscFl9LCJcdTAyNzVcdTAyNzVjbGFzc1Byb3AiOmV0LCJcdTAyNzVcdTAyNzVhZHZhbmNlIjpDLCJcdTAyNzVcdTAyNzV0ZW1wbGF0ZSI6RSwiXHUwMjc1XHUwMjc1dGV4dCI6QSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlIjp5dCwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMSI6amUsIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTIiOlhwLCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUzIjpUVCwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNCI6ZnVuY3Rpb24gSnEobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXJ0KCksdT1aMChjLG4sdCxlLGkscixvLHMsYSxsKTtyZXR1cm4gdSE9PVFuJiZqZChjLFpzKCksdSksSnF9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU1IjpmdW5jdGlvbiAkcShuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPXJ0KCkscD1KMChkLG4sdCxlLGkscixvLHMsYSxsLGMsdSk7cmV0dXJuIHAhPT1RbiYmamQoZCxacygpLHApLCRxfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNiI6ZnVuY3Rpb24gZVkobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7bGV0IGg9cnQoKSxmPSQwKGgsbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCk7cmV0dXJuIGYhPT1RbiYmamQoaCxacygpLGYpLGVZfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNyI6ZnVuY3Rpb24gdFkobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe2xldCBtPXJ0KCkseD1lXyhtLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKTtyZXR1cm4geCE9PVFuJiZqZChtLFpzKCkseCksdFl9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU4IjpmdW5jdGlvbiBuWShuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLHgpe2xldCBnPXJ0KCksYj10XyhnLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0seCk7cmV0dXJuIGIhPT1RbiYmamQoZyxacygpLGIpLG5ZfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlViI6ZnVuY3Rpb24gaVkobil7bGV0IHQ9cnQoKSxlPVkwKHQsbik7cmV0dXJuIGUhPT1RbiYmamQodCxacygpLGUpLGlZfSwiXHUwMjc1XHUwMjc1aTE4biI6QVQsIlx1MDI3NVx1MDI3NWkxOG5BdHRyaWJ1dGVzIjpmdW5jdGlvbihuLHQpe2xldCBlPUZpKCk7IWZ1bmN0aW9uKG4sdCxlKXtsZXQgcj16bygpLmluZGV4LG89W107aWYobi5maXJzdENyZWF0ZVBhc3MmJm51bGw9PT1uLmRhdGFbdF0pe2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9Mil7bGV0IGE9ZVtzXSxsPWVbcysxXTtpZigiIiE9PWwpe2lmKEN4ZS50ZXN0KGwpKXRocm93IG5ldyBFcnJvcihgSUNVIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGF0dHJpYnV0ZXMuIE1lc3NhZ2U6ICIke2x9Ii5gKTtieChvLGwscixhLFB4ZShvKSxudWxsKX19bi5kYXRhW3RdPW99fShlLG4rMjIsVXAoZS5jb25zdHMsdCkpfSwiXHUwMjc1XHUwMjc1aTE4bkV4cCI6S3gsIlx1MDI3NVx1MDI3NWkxOG5TdGFydCI6QVksIlx1MDI3NVx1MDI3NWkxOG5FbmQiOklZLCJcdTAyNzVcdTAyNzVpMThuQXBwbHkiOklULCJcdTAyNzVcdTAyNzVpMThuUG9zdHByb2Nlc3MiOlBULCJcdTAyNzVcdTAyNzVyZXNvbHZlV2luZG93IjpXeCwiXHUwMjc1XHUwMjc1cmVzb2x2ZURvY3VtZW50IjpfVCwiXHUwMjc1XHUwMjc1cmVzb2x2ZUJvZHkiOmZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQuYm9keX0sIlx1MDI3NVx1MDI3NXNldENvbXBvbmVudFNjb3BlIjpOeCwiXHUwMjc1XHUwMjc1c2V0TmdNb2R1bGVTY29wZSI6ZnVuY3Rpb24obix0KXtyZXR1cm4gWmYoKCk9PntsZXQgZT1JMChuLCEwKTtlLmRlY2xhcmF0aW9ucz10LmRlY2xhcmF0aW9uc3x8UWksZS5pbXBvcnRzPXQuaW1wb3J0c3x8UWksZS5leHBvcnRzPXQuZXhwb3J0c3x8UWl9KX0sIlx1MDI3NVx1MDI3NXJlZ2lzdGVyTmdNb2R1bGVUeXBlIjptOSwiXHUwMjc1XHUwMjc1c2FuaXRpemVIdG1sIjpBMywiXHUwMjc1XHUwMjc1c2FuaXRpemVTdHlsZSI6ZnVuY3Rpb24obil7bGV0IHQ9R3goKTtyZXR1cm4gdD90LnNhbml0aXplKG1vLlNUWUxFLG4pfHwiIjpQYyhuLCJTdHlsZSIpP1RhKG4pOktuKG4pfSwiXHUwMjc1XHUwMjc1c2FuaXRpemVSZXNvdXJjZVVybCI6QTksIlx1MDI3NVx1MDI3NXNhbml0aXplU2NyaXB0IjpmdW5jdGlvbihuKXtsZXQgdD1HeCgpO2lmKHQpcmV0dXJuIHFXKHQuc2FuaXRpemUobW8uU0NSSVBULG4pfHwiIik7aWYoUGMobiwiU2NyaXB0IikpcmV0dXJuIHFXKFRhKG4pKTt0aHJvdyBuZXcgQXQoOTA1LCExKX0sIlx1MDI3NVx1MDI3NXNhbml0aXplVXJsIjp6bCwiXHUwMjc1XHUwMjc1c2FuaXRpemVVcmxPclJlc291cmNlVXJsIjpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuInNyYyI9PT10JiYoImVtYmVkIj09PW58fCJmcmFtZSI9PT1ufHwiaWZyYW1lIj09PW58fCJtZWRpYSI9PT1ufHwic2NyaXB0Ij09PW4pfHwiaHJlZiI9PT10JiYoImJhc2UiPT09bnx8ImxpbmsiPT09bik/QTk6emx9KHQsZSkobil9LCJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50SHRtbCI6ZnVuY3Rpb24obil7cmV0dXJuIE8wKG5bMF0pfSwiXHUwMjc1XHUwMjc1dHJ1c3RDb25zdGFudFJlc291cmNlVXJsIjpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHY5KCk/LmNyZWF0ZVNjcmlwdFVSTChuKXx8bn0oblswXSl9LGZvcndhcmRSZWY6Sm4scmVzb2x2ZUZvcndhcmRSZWY6S2l9O2Z1bmN0aW9uIGpZKG4pe3JldHVybiEhSTAobil9dmFyIEYxPVtdLEpOPSExO2Z1bmN0aW9uIEdZKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uZXZlcnkoR1kpOiEhS2kobil9ZnVuY3Rpb24gSUNlKG4sdCl7bGV0IGU9RmQodC5kZWNsYXJhdGlvbnN8fFFpKSxpPUwwKG4pO2UuZm9yRWFjaChyPT57KHI9S2kocikpLmhhc093blByb3BlcnR5KGNUKT9XWShObChyKSxpKTohci5oYXNPd25Qcm9wZXJ0eShsMykmJiFyLmhhc093blByb3BlcnR5KGMzKSYmKHIubmdTZWxlY3RvclNjb3BlPW4pfSl9ZnVuY3Rpb24gV1kobix0KXtuLmRpcmVjdGl2ZURlZnM9KCk9PkFycmF5LmZyb20odC5jb21waWxhdGlvbi5kaXJlY3RpdmVzKS5tYXAoZT0+ZS5oYXNPd25Qcm9wZXJ0eShjVCk/TmwoZSk6R2YoZSkpLmZpbHRlcihlPT4hIWUpLG4ucGlwZURlZnM9KCk9PkFycmF5LmZyb20odC5jb21waWxhdGlvbi5waXBlcykubWFwKGU9PkxkKGUpKSxuLnNjaGVtYXM9dC5zY2hlbWFzLG4udFZpZXc9bnVsbH1mdW5jdGlvbiBMMChuKXtpZihqWShuKSlyZXR1cm4gZnVuY3Rpb24obil7bGV0IHQ9STAobiwhMCk7aWYobnVsbCE9PXQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXMpcmV0dXJuIHQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM7bGV0IGU9e3NjaGVtYXM6dC5zY2hlbWFzfHxudWxsLGNvbXBpbGF0aW9uOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH0sZXhwb3J0ZWQ6e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fX07cmV0dXJuIFIxKHQuaW1wb3J0cykuZm9yRWFjaChpPT57bGV0IHI9TDAoaSk7ci5leHBvcnRlZC5kaXJlY3RpdmVzLmZvckVhY2gobz0+ZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChvKSksci5leHBvcnRlZC5waXBlcy5mb3JFYWNoKG89PmUuY29tcGlsYXRpb24ucGlwZXMuYWRkKG8pKX0pLFIxKHQuZGVjbGFyYXRpb25zKS5mb3JFYWNoKGk9PntMZChpKT9lLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChpKTplLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKGkpfSksUjEodC5leHBvcnRzKS5mb3JFYWNoKGk9PntsZXQgcj1pO2lmKGpZKHIpKXtsZXQgbz1MMChyKTtvLmV4cG9ydGVkLmRpcmVjdGl2ZXMuZm9yRWFjaChzPT57ZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChzKSxlLmV4cG9ydGVkLmRpcmVjdGl2ZXMuYWRkKHMpfSksby5leHBvcnRlZC5waXBlcy5mb3JFYWNoKHM9PntlLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChzKSxlLmV4cG9ydGVkLnBpcGVzLmFkZChzKX0pfWVsc2UgTGQocik/ZS5leHBvcnRlZC5waXBlcy5hZGQocik6ZS5leHBvcnRlZC5kaXJlY3RpdmVzLmFkZChyKX0pLHQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM9ZSxlfShuKTtpZihSNyhuKSl7aWYobnVsbCE9PShObChuKXx8R2YobikpKXJldHVybntzY2hlbWFzOm51bGwsY29tcGlsYXRpb246e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fSxleHBvcnRlZDp7ZGlyZWN0aXZlczpuZXcgU2V0KFtuXSkscGlwZXM6bmV3IFNldH19O2lmKG51bGwhPT1MZChuKSlyZXR1cm57c2NoZW1hczpudWxsLGNvbXBpbGF0aW9uOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH0sZXhwb3J0ZWQ6e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0KFtuXSl9fX10aHJvdyBuZXcgRXJyb3IoYCR7bi5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgbW9kdWxlIGRlZiAoXHUwMjc1bW9kIHByb3BlcnR5KWApfWZ1bmN0aW9uIF83KG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi5uZ01vZHVsZX0obik/bi5uZ01vZHVsZTpufXZhciAkTj0wO2Z1bmN0aW9uIHFZKG4sdCl7bGV0IGU9bnVsbDtYWShuLHR8fHt9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixsMyx7Z2V0OigpPT57aWYobnVsbD09PWUpe2xldCBpPVlZKG4sdHx8e30pO2U9TGwoKS5jb21waWxlRGlyZWN0aXZlKEhwLGkuc291cmNlTWFwVXJsLGkubWV0YWRhdGEpfXJldHVybiBlfSxjb25maWd1cmFibGU6ITF9KX1mdW5jdGlvbiBZWShuLHQpe2xldCBlPW4mJm4ubmFtZSxpPWBuZzovLy8ke2V9L1x1MDI3NWRpci5qc2Ascj1MbCgpLG89UVkobix0KTtyZXR1cm4gby50eXBlU291cmNlU3Bhbj1yLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiRGlyZWN0aXZlIixlLGkpLG8udXNlc0luaGVyaXRhbmNlJiZLWShuKSx7bWV0YWRhdGE6byxzb3VyY2VNYXBVcmw6aX19ZnVuY3Rpb24gWFkobix0KXtsZXQgZT1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLE5kLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9WVkobix0KSxyPUxsKCk7ZT1yLmNvbXBpbGVGYWN0b3J5KEhwLGBuZzovLy8ke24ubmFtZX0vXHUwMjc1ZmFjLmpzYCx7bmFtZTppLm1ldGFkYXRhLm5hbWUsdHlwZTppLm1ldGFkYXRhLnR5cGUsdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOmZUKG4pLHRhcmdldDpyLkZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9cmV0dXJuIGV9LGNvbmZpZ3VyYWJsZTohMX0pfWZ1bmN0aW9uIEZDZShuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKT09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gUVkobix0KXtsZXQgZT1TMygpLGk9ZS5vd25Qcm9wTWV0YWRhdGEobik7cmV0dXJue25hbWU6bi5uYW1lLHR5cGU6bixzZWxlY3Rvcjp2b2lkIDAhPT10LnNlbGVjdG9yP3Quc2VsZWN0b3I6bnVsbCxob3N0OnQuaG9zdHx8QTAscHJvcE1ldGFkYXRhOmksaW5wdXRzOnQuaW5wdXRzfHxRaSxvdXRwdXRzOnQub3V0cHV0c3x8UWkscXVlcmllczp2NyhuLGksWlkpLGxpZmVjeWNsZTp7dXNlc09uQ2hhbmdlczplLmhhc0xpZmVjeWNsZUhvb2sobiwibmdPbkNoYW5nZXMiKX0sdHlwZVNvdXJjZVNwYW46bnVsbCx1c2VzSW5oZXJpdGFuY2U6IUZDZShuKSxleHBvcnRBczpCQ2UodC5leHBvcnRBcykscHJvdmlkZXJzOnQucHJvdmlkZXJzfHxudWxsLHZpZXdRdWVyaWVzOnY3KG4saSxKWSksaXNTdGFuZGFsb25lOiEhdC5zdGFuZGFsb25lfX1mdW5jdGlvbiBLWShuKXtsZXQgdD1PYmplY3QucHJvdG90eXBlLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjtmb3IoO2UmJmUhPT10OykhR2YoZSkmJiFObChlKSYmSENlKGUpJiZxWShlLG51bGwpLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfWZ1bmN0aW9uIE5DZShuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/ZVgobik6S2kobil9ZnVuY3Rpb24gTENlKG4sdCl7cmV0dXJue3Byb3BlcnR5TmFtZTpuLHByZWRpY2F0ZTpOQ2UodC5zZWxlY3RvciksZGVzY2VuZGFudHM6dC5kZXNjZW5kYW50cyxmaXJzdDp0LmZpcnN0LHJlYWQ6dC5yZWFkP3QucmVhZDpudWxsLHN0YXRpYzohIXQuc3RhdGljLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiEhdC5lbWl0RGlzdGluY3RDaGFuZ2VzT25seX19ZnVuY3Rpb24gdjcobix0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkocikpe2xldCBvPXRbcl07by5mb3JFYWNoKHM9PntpZihlKHMpKXtpZighcy5zZWxlY3Rvcil0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNvbnN0cnVjdCBhIHF1ZXJ5IGZvciB0aGUgcHJvcGVydHkgIiR7cn0iIG9mICIke28zKG4pfSIgc2luY2UgdGhlIHF1ZXJ5IHNlbGVjdG9yIHdhc24ndCBkZWZpbmVkLmApO2lmKG8uc29tZSgkWSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tYmluZSBASW5wdXQgZGVjb3JhdG9ycyB3aXRoIHF1ZXJ5IGRlY29yYXRvcnMiKTtpLnB1c2goTENlKHIscykpfX0pfXJldHVybiBpfWZ1bmN0aW9uIEJDZShuKXtyZXR1cm4gdm9pZCAwPT09bj9udWxsOmVYKG4pfWZ1bmN0aW9uIFpZKG4pe2xldCB0PW4ubmdNZXRhZGF0YU5hbWU7cmV0dXJuIkNvbnRlbnRDaGlsZCI9PT10fHwiQ29udGVudENoaWxkcmVuIj09PXR9ZnVuY3Rpb24gSlkobil7bGV0IHQ9bi5uZ01ldGFkYXRhTmFtZTtyZXR1cm4iVmlld0NoaWxkIj09PXR8fCJWaWV3Q2hpbGRyZW4iPT09dH1mdW5jdGlvbiAkWShuKXtyZXR1cm4iSW5wdXQiPT09bi5uZ01ldGFkYXRhTmFtZX1mdW5jdGlvbiBlWChuKXtyZXR1cm4gbi5zcGxpdCgiLCIpLm1hcCh0PT50LnRyaW0oKSl9dmFyIFZDZT1bIm5nT25DaGFuZ2VzIiwibmdPbkluaXQiLCJuZ09uRGVzdHJveSIsIm5nRG9DaGVjayIsIm5nQWZ0ZXJWaWV3SW5pdCIsIm5nQWZ0ZXJWaWV3Q2hlY2tlZCIsIm5nQWZ0ZXJDb250ZW50SW5pdCIsIm5nQWZ0ZXJDb250ZW50Q2hlY2tlZCJdO2Z1bmN0aW9uIEhDZShuKXtsZXQgdD1TMygpO2lmKFZDZS5zb21lKGk9PnQuaGFzTGlmZWN5Y2xlSG9vayhuLGkpKSlyZXR1cm4hMDtsZXQgZT10LnByb3BNZXRhZGF0YShuKTtmb3IobGV0IGkgaW4gZSl7bGV0IHI9ZVtpXTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IHM9cltvXSxhPXMubmdNZXRhZGF0YU5hbWU7aWYoJFkocyl8fFpZKHMpfHxKWShzKXx8Ik91dHB1dCI9PT1hfHwiSG9zdEJpbmRpbmciPT09YXx8Ikhvc3RMaXN0ZW5lciI9PT1hKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiB5NyhuLHQpe3JldHVybnt0eXBlOm4sbmFtZTpuLm5hbWUscGlwZU5hbWU6dC5uYW1lLHB1cmU6dm9pZCAwPT09dC5wdXJlfHx0LnB1cmUsaXNTdGFuZGFsb25lOiEhdC5zdGFuZGFsb25lfX12YXIgekNlPVZ4KCJEaXJlY3RpdmUiLChuPXt9KT0+bix2b2lkIDAsdm9pZCAwLChuLHQpPT5xWShuLHQpKTtmdW5jdGlvbiBvVCguLi5uKXt9VngoIkNvbXBvbmVudCIsKG49e30pPT4oe2NoYW5nZURldGVjdGlvbjpweC5EZWZhdWx0LC4uLm59KSx6Q2Usdm9pZCAwLChuLHQpPT5mdW5jdGlvbihuLHQpe2xldCBlPW51bGw7KGZ1bmN0aW9uKG4sdCl7ZjkodCkmJihEeC5zZXQobix0KSxoOS5hZGQobikpfSkobix0KSxYWShuLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGNULHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9TGwoKTtpZihmOSh0KSl7bGV0IGM9W2BDb21wb25lbnQgJyR7bi5uYW1lfScgaXMgbm90IHJlc29sdmVkOmBdO3Rocm93IHQudGVtcGxhdGVVcmwmJmMucHVzaChgIC0gdGVtcGxhdGVVcmw6ICR7dC50ZW1wbGF0ZVVybH1gKSx0LnN0eWxlVXJscyYmdC5zdHlsZVVybHMubGVuZ3RoJiZjLnB1c2goYCAtIHN0eWxlVXJsczogJHtKU09OLnN0cmluZ2lmeSh0LnN0eWxlVXJscyl9YCksYy5wdXNoKCJEaWQgeW91IHJ1biBhbmQgd2FpdCBmb3IgJ3Jlc29sdmVDb21wb25lbnRSZXNvdXJjZXMoKSc/IiksbmV3IEVycm9yKGMuam9pbigiXG4iKSl9bGV0IHI9bnVsbCxvPXQucHJlc2VydmVXaGl0ZXNwYWNlczt2b2lkIDA9PT1vJiYobz1udWxsIT09ciYmdm9pZCAwIT09ci5wcmVzZXJ2ZVdoaXRlc3BhY2VzJiZyLnByZXNlcnZlV2hpdGVzcGFjZXMpO2xldCBzPXQuZW5jYXBzdWxhdGlvbjt2b2lkIDA9PT1zJiYocz1udWxsIT09ciYmdm9pZCAwIT09ci5kZWZhdWx0RW5jYXBzdWxhdGlvbj9yLmRlZmF1bHRFbmNhcHN1bGF0aW9uOkphLkVtdWxhdGVkKTtsZXQgYT10LnRlbXBsYXRlVXJsfHxgbmc6Ly8vJHtuLm5hbWV9L3RlbXBsYXRlLmh0bWxgLGw9ey4uLlFZKG4sdCksdHlwZVNvdXJjZVNwYW46aS5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oIkNvbXBvbmVudCIsbi5uYW1lLGEpLHRlbXBsYXRlOnQudGVtcGxhdGV8fCIiLHByZXNlcnZlV2hpdGVzcGFjZXM6byxzdHlsZXM6dC5zdHlsZXN8fFFpLGFuaW1hdGlvbnM6dC5hbmltYXRpb25zLGRlY2xhcmF0aW9uczpbXSxjaGFuZ2VEZXRlY3Rpb246dC5jaGFuZ2VEZXRlY3Rpb24sZW5jYXBzdWxhdGlvbjpzLGludGVycG9sYXRpb246dC5pbnRlcnBvbGF0aW9uLHZpZXdQcm92aWRlcnM6dC52aWV3UHJvdmlkZXJzfHxudWxsLGlzU3RhbmRhbG9uZTohIXQuc3RhbmRhbG9uZX07JE4rKzt0cnl7aWYobC51c2VzSW5oZXJpdGFuY2UmJktZKG4pLGU9aS5jb21waWxlQ29tcG9uZW50KEhwLGEsbCksdC5zdGFuZGFsb25lKXtsZXQgYz1GZCh0LmltcG9ydHN8fFFpKSx7ZGlyZWN0aXZlRGVmczp1LHBpcGVEZWZzOmR9PWZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7cmV0dXJue2RpcmVjdGl2ZURlZnM6KCk9PntpZihudWxsPT09ZSl7ZT1bTmwobildO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPUtpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxJMChsKSl7bGV0IGM9TDAobCk7Zm9yKGxldCB1IG9mIGMuZXhwb3J0ZWQuZGlyZWN0aXZlcyl7bGV0IGQ9TmwodSl8fEdmKHUpO2QmJiFzLmhhcyh1KSYmKHMuYWRkKHUpLGUucHVzaChkKSl9fWVsc2V7bGV0IGM9TmwobCl8fEdmKGwpO2MmJmUucHVzaChjKX19fXJldHVybiBlfSxwaXBlRGVmczooKT0+e2lmKG51bGw9PT1pKXtpPVtdO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPUtpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxJMChsKSl7bGV0IGM9TDAobCk7Zm9yKGxldCB1IG9mIGMuZXhwb3J0ZWQucGlwZXMpe2xldCBkPUxkKHUpO2QmJiFzLmhhcyh1KSYmKHMuYWRkKHUpLGkucHVzaChkKSl9fWVsc2V7bGV0IGM9TGQobCk7YyYmaS5wdXNoKGMpfX19cmV0dXJuIGl9fX0obixjKTtlLmRpcmVjdGl2ZURlZnM9dSxlLnBpcGVEZWZzPWQsZS5kZXBlbmRlbmNpZXM9KCk9PmMubWFwKEtpKX19ZmluYWxseXskTi0tfWlmKDA9PT0kTiYmZnVuY3Rpb24oKXtpZighSk4pe0pOPSEwO3RyeXtmb3IobGV0IG49RjEubGVuZ3RoLTE7bj49MDtuLS0pe2xldHttb2R1bGVUeXBlOnQsbmdNb2R1bGU6ZX09RjFbbl07ZS5kZWNsYXJhdGlvbnMmJmUuZGVjbGFyYXRpb25zLmV2ZXJ5KEdZKSYmKEYxLnNwbGljZShuLDEpLElDZSh0LGUpKX19ZmluYWxseXtKTj0hMX19fSgpLGZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLm5nU2VsZWN0b3JTY29wZX0obikpe2xldCBjPUwwKG4ubmdTZWxlY3RvclNjb3BlKTtXWShlLGMpfWlmKHQuc2NoZW1hcyl7aWYoIXQuc3RhbmRhbG9uZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSAnc2NoZW1hcycgd2FzIHNwZWNpZmllZCBmb3IgdGhlICR7bzMobil9IGJ1dCBpcyBvbmx5IHZhbGlkIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgc3RhbmRhbG9uZS5gKTtlLnNjaGVtYXM9dC5zY2hlbWFzfWVsc2UgdC5zdGFuZGFsb25lJiYoZS5zY2hlbWFzPVtdKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLFZ4KCJQaXBlIixuPT4oe3B1cmU6ITAsLi4ubn0pLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sTmQse2dldDooKT0+e2lmKG51bGw9PT1pKXtsZXQgcj15NyhuLHQpLG89TGwoKTtpPW8uY29tcGlsZUZhY3RvcnkoSHAsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVmYWMuanNgLHtuYW1lOnIubmFtZSx0eXBlOnIudHlwZSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6ZlQobiksdGFyZ2V0Om8uRmFjdG9yeVRhcmdldC5QaXBlfSl9cmV0dXJuIGl9LGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGMzLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IHI9eTcobix0KTtlPUxsKCkuY29tcGlsZVBpcGUoSHAsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVwaXBlLmpzYCxyKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLFlwKCJJbnB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksWXAoIk91dHB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksWXAoIkhvc3RCaW5kaW5nIixuPT4oe2hvc3RQcm9wZXJ0eU5hbWU6bn0pKSxZcCgiSG9zdExpc3RlbmVyIiwobix0KT0+KHtldmVudE5hbWU6bixhcmdzOnR9KSksVngoIk5nTW9kdWxlIixuPT5uLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdD17fSl7KGZ1bmN0aW9uKG4sdCxlPSExKXtsZXQgaT1GZCh0LmRlY2xhcmF0aW9uc3x8UWkpLHI9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkobixJNyx7Y29uZmlndXJhYmxlOiEwLGdldDooKT0+KG51bGw9PT1yJiYocj1MbCgpLmNvbXBpbGVOZ01vZHVsZShIcCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NW1vZC5qc2Ase3R5cGU6bixib290c3RyYXA6RmQodC5ib290c3RyYXB8fFFpKS5tYXAoS2kpLGRlY2xhcmF0aW9uczppLm1hcChLaSksaW1wb3J0czpGZCh0LmltcG9ydHN8fFFpKS5tYXAoS2kpLm1hcChfNyksZXhwb3J0czpGZCh0LmV4cG9ydHN8fFFpKS5tYXAoS2kpLm1hcChfNyksc2NoZW1hczp0LnNjaGVtYXM/RmQodC5zY2hlbWFzKTpudWxsLGlkOnQuaWR8fG51bGx9KSxyLnNjaGVtYXN8fChyLnNjaGVtYXM9W10pKSxyKX0pO2xldCBvPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sTmQse2dldDooKT0+e2lmKG51bGw9PT1vKXtsZXQgYT1MbCgpO289YS5jb21waWxlRmFjdG9yeShIcCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWZhYy5qc2Ase25hbWU6bi5uYW1lLHR5cGU6bixkZXBzOmZUKG4pLHRhcmdldDphLkZhY3RvcnlUYXJnZXQuTmdNb2R1bGUsdHlwZUFyZ3VtZW50Q291bnQ6MH0pfXJldHVybiBvfSxjb25maWd1cmFibGU6ITF9KTtsZXQgcz1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLG5MLHtnZXQ6KCk9PntpZihudWxsPT09cyl7bGV0IGE9e25hbWU6bi5uYW1lLHR5cGU6bixwcm92aWRlcnM6dC5wcm92aWRlcnN8fFFpLGltcG9ydHM6Wyh0LmltcG9ydHN8fFFpKS5tYXAoS2kpLCh0LmV4cG9ydHN8fFFpKS5tYXAoS2kpXX07cz1MbCgpLmNvbXBpbGVJbmplY3RvcihIcCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWluai5qc2AsYSl9cmV0dXJuIHN9LGNvbmZpZ3VyYWJsZTohMX0pfSkobix0KSx2b2lkIDAhPT10LmlkJiZtOShuLHQuaWQpLGZ1bmN0aW9uKG4sdCl7RjEucHVzaCh7bW9kdWxlVHlwZTpuLG5nTW9kdWxlOnR9KX0obix0KX0obix0KSk7dmFyICQzPW5ldyBwZSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKSxPVD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuYXBwSW5pdHM9ZSx0aGlzLnJlc29sdmU9b1QsdGhpcy5yZWplY3Q9b1QsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoaSxyKT0+e3RoaXMucmVzb2x2ZT1pLHRoaXMucmVqZWN0PXJ9KX1ydW5Jbml0aWFsaXplcnMoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjtsZXQgZT1bXSxpPSgpPT57dGhpcy5kb25lPSEwLHRoaXMucmVzb2x2ZSgpfTtpZih0aGlzLmFwcEluaXRzKWZvcihsZXQgcj0wO3I8dGhpcy5hcHBJbml0cy5sZW5ndGg7cisrKXtsZXQgbz10aGlzLmFwcEluaXRzW3JdKCk7aWYobl8obykpZS5wdXNoKG8pO2Vsc2UgaWYoUTMobykpe2xldCBzPW5ldyBQcm9taXNlKChhLGwpPT57by5zdWJzY3JpYmUoe2NvbXBsZXRlOmEsZXJyb3I6bH0pfSk7ZS5wdXNoKHMpfX1Qcm9taXNlLmFsbChlKS50aGVuKCgpPT57aSgpfSkuY2F0Y2gocj0+e3RoaXMucmVqZWN0KHIpfSksMD09PWUubGVuZ3RoJiZpKCksdGhpcy5pbml0aWFsaXplZD0hMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaigkMyw4KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksJGY9bmV3IHBlKCJBcHBJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm5gJHtlTCgpfSR7ZUwoKX0ke2VMKCl9YH19KTtmdW5jdGlvbiBlTCgpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfXZhciBlQj1uZXcgcGUoIlBsYXRmb3JtIEluaXRpYWxpemVyIiksR2Q9bmV3IHBlKCJQbGF0Zm9ybSBJRCIse3Byb3ZpZGVkSW46InBsYXRmb3JtIixmYWN0b3J5OigpPT4idW5rbm93biJ9KSxHQ2U9bmV3IHBlKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpLFBpPShuZXcgcGUoIkFwcGxpY2F0aW9uIFBhY2thZ2VzIFJvb3QgVVJMIiksbmV3IHBlKCJBbmltYXRpb25Nb2R1bGVUeXBlIikpLFdkPW5ldyBwZSgiTG9jYWxlSWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5qbyhXZCxkaS5PcHRpb25hbHxkaS5Ta2lwU2VsZil8fHR5cGVvZiAkbG9jYWxpemU8InUiJiYkbG9jYWxpemUubG9jYWxlfHxuVH0pLFhDZT0obmV3IHBlKCJEZWZhdWx0Q3VycmVuY3lDb2RlIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlVTRCJ9KSxuZXcgcGUoIlRyYW5zbGF0aW9ucyIpLG5ldyBwZSgiVHJhbnNsYXRpb25zRm9ybWF0IiksbmV3IHBlKCJjb21waWxlck9wdGlvbnMiKSxQcm9taXNlLnJlc29sdmUoMCkpO2Z1bmN0aW9uIEtMKG4pe3R5cGVvZiBab25lPiJ1Ij9YQ2UudGhlbigoKT0+e24mJm4uYXBwbHkobnVsbCxudWxsKX0pOlpvbmUuY3VycmVudC5zY2hlZHVsZU1pY3JvVGFzaygic2NoZWR1bGVNaWNyb3Rhc2siLG4pfXZhciBfdD1jbGFzc3tjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6dD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmU9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246aT0hMX0pe2lmKHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgRyghMSksdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBHKCExKSx0aGlzLm9uU3RhYmxlPW5ldyBHKCExKSx0aGlzLm9uRXJyb3I9bmV3IEcoITEpLHR5cGVvZiBab25lPiJ1Iil0aHJvdyBuZXcgQXQoOTA4LCExKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCk7bGV0IHI9dGhpcztpZihyLl9uZXN0aW5nPTAsci5fb3V0ZXI9ci5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuQXN5bmNTdGFja1RhZ2dpbmdab25lU3BlYyl7bGV0IG89Wm9uZS5Bc3luY1N0YWNrVGFnZ2luZ1pvbmVTcGVjO3IuX2lubmVyPXIuX2lubmVyLmZvcmsobmV3IG8oIkFuZ3VsYXIiKSl9Wm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYyYmKHIuX2lubmVyPXIuX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSx0JiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJihyLl9pbm5lcj1yLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLHIuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbj0haSYmZSxyLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uPWksci5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsci5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oKXtsZXQgbj10by5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsdD10by5jYW5jZWxBbmltYXRpb25GcmFtZTtpZih0eXBlb2YgWm9uZTwidSImJm4mJnQpe2xldCBlPW5bWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2UmJihuPWUpO2xldCBpPXRbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2kmJih0PWkpfXJldHVybntuYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6bixuYXRpdmVDYW5jZWxBbmltYXRpb25GcmFtZTp0fX0oKS5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZnVuY3Rpb24obil7bGV0IHQ9KCk9PnshZnVuY3Rpb24obil7bi5pc0NoZWNrU3RhYmxlUnVubmluZ3x8LTEhPT1uLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZHx8KG4ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPW4ubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLmNhbGwodG8sKCk9PntuLmZha2VUb3BFdmVudFRhc2t8fChuLmZha2VUb3BFdmVudFRhc2s9Wm9uZS5yb290LnNjaGVkdWxlRXZlbnRUYXNrKCJmYWtlVG9wRXZlbnRUYXNrIiwoKT0+e24ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLFpMKG4pLG4uaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITAsdEIobiksbi5pc0NoZWNrU3RhYmxlUnVubmluZz0hMX0sdm9pZCAwLCgpPT57fSwoKT0+e30pKSxuLmZha2VUb3BFdmVudFRhc2suaW52b2tlKCl9KSxaTChuKSl9KG4pfTtuLl9pbm5lcj1uLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6KGUsaSxyLG8scyxhKT0+e3RyeXtyZXR1cm4gYjcobiksZS5pbnZva2VUYXNrKHIsbyxzLGEpfWZpbmFsbHl7KG4uc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2ZW50VGFzayI9PT1vLnR5cGV8fG4uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiZ0KCkseDcobil9fSxvbkludm9rZTooZSxpLHIsbyxzLGEsbCk9Pnt0cnl7cmV0dXJuIGI3KG4pLGUuaW52b2tlKHIsbyxzLGEsbCl9ZmluYWxseXtuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uJiZ0KCkseDcobil9fSxvbkhhc1Rhc2s6KGUsaSxyLG8pPT57ZS5oYXNUYXNrKHIsbyksaT09PXImJigibWljcm9UYXNrIj09by5jaGFuZ2U/KG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzPW8ubWljcm9UYXNrLFpMKG4pLHRCKG4pKToibWFjcm9UYXNrIj09by5jaGFuZ2UmJihuLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPW8ubWFjcm9UYXNrKSl9LG9uSGFuZGxlRXJyb3I6KGUsaSxyLG8pPT4oZS5oYW5kbGVFcnJvcihyLG8pLG4ucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4ub25FcnJvci5lbWl0KG8pKSwhMSl9KX0ocil9c3RhdGljIGlzSW5Bbmd1bGFyWm9uZSgpe3JldHVybiB0eXBlb2YgWm9uZTwidSImJiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIV90LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBBdCg5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYoX3QuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEF0KDkwOSwhMSl9cnVuKHQsZSxpKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKHQsZSxpKX1ydW5UYXNrKHQsZSxpLHIpe2xldCBvPXRoaXMuX2lubmVyLHM9by5zY2hlZHVsZUV2ZW50VGFzaygiTmdab25lRXZlbnQ6ICIrcix0LEtDZSxvVCxvVCk7dHJ5e3JldHVybiBvLnJ1blRhc2socyxlLGkpfWZpbmFsbHl7by5jYW5jZWxUYXNrKHMpfX1ydW5HdWFyZGVkKHQsZSxpKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuR3VhcmRlZCh0LGUsaSl9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bih0KX19LEtDZT17fTtmdW5jdGlvbiB0QihuKXtpZigwPT1uLl9uZXN0aW5nJiYhbi5oYXNQZW5kaW5nTWljcm90YXNrcyYmIW4uaXNTdGFibGUpdHJ5e24uX25lc3RpbmcrKyxuLm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKG4uX25lc3RpbmctLSwhbi5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7bi5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5vblN0YWJsZS5lbWl0KG51bGwpKX1maW5hbGx5e24uaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBaTChuKXtuLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSEhKG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzfHwobi5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHxuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmLTEhPT1uLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCl9ZnVuY3Rpb24gYjcobil7bi5fbmVzdGluZysrLG4uaXNTdGFibGUmJihuLmlzU3RhYmxlPSExLG4ub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiB4NyhuKXtuLl9uZXN0aW5nLS0sdEIobil9dmFyIGlCLG5CPW5ldyBwZSgiIiksZUM9bmV3IHBlKCIiKSxrVD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLnJlZ2lzdHJ5PWksdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLGlCfHwoZnVuY3Rpb24obil7aUI9bn0ociksci5hZGRUb1dpbmRvdyhpKSksdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksZS5ydW4oKCk9Pnt0aGlzLnRhc2tUcmFja2luZ1pvbmU9dHlwZW9mIFpvbmU+InUiP251bGw6Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNraW5nWm9uZSIpfSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2RpZFdvcms9ITAsdGhpcy5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9PntfdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksS0woKCk9Pnt0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSl9fSl9KX1pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50Kz0xLHRoaXMuX2RpZFdvcms9ITAsdGhpcy5fcGVuZGluZ0NvdW50fWRlY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudCgpe2lmKHRoaXMuX3BlbmRpbmdDb3VudC09MSx0aGlzLl9wZW5kaW5nQ291bnQ8MCl0aHJvdyBuZXcgRXJyb3IoInBlbmRpbmcgYXN5bmMgcmVxdWVzdHMgYmVsb3cgemVybyIpO3JldHVybiB0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCksdGhpcy5fcGVuZGluZ0NvdW50fWlzU3RhYmxlKCl7cmV0dXJuIHRoaXMuX2lzWm9uZVN0YWJsZSYmMD09PXRoaXMuX3BlbmRpbmdDb3VudCYmIXRoaXMuX25nWm9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc31fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpe2lmKHRoaXMuaXNTdGFibGUoKSlLTCgoKT0+e2Zvcig7MCE9PXRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7KXtsZXQgZT10aGlzLl9jYWxsYmFja3MucG9wKCk7Y2xlYXJUaW1lb3V0KGUudGltZW91dElkKSxlLmRvbmVDYih0aGlzLl9kaWRXb3JrKX10aGlzLl9kaWRXb3JrPSExfSk7ZWxzZXtsZXQgZT10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGk9PiFpLnVwZGF0ZUNifHwhaS51cGRhdGVDYihlKXx8KGNsZWFyVGltZW91dChpLnRpbWVvdXRJZCksITEpKSx0aGlzLl9kaWRXb3JrPSEwfX1nZXRQZW5kaW5nVGFza3MoKXtyZXR1cm4gdGhpcy50YXNrVHJhY2tpbmdab25lP3RoaXMudGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChlPT4oe3NvdXJjZTplLnNvdXJjZSxjcmVhdGlvbkxvY2F0aW9uOmUuY3JlYXRpb25Mb2NhdGlvbixkYXRhOmUuZGF0YX0pKTpbXX1hZGRDYWxsYmFjayhlLGkscil7bGV0IG89LTE7aSYmaT4wJiYobz1zZXRUaW1lb3V0KCgpPT57dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIocz0+cy50aW1lb3V0SWQhPT1vKSxlKHRoaXMuX2RpZFdvcmssdGhpcy5nZXRQZW5kaW5nVGFza3MoKSl9LGkpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOmUsdGltZW91dElkOm8sdXBkYXRlQ2I6cn0pfXdoZW5TdGFibGUoZSxpLHIpe2lmKHImJiF0aGlzLnRhc2tUcmFja2luZ1pvbmUpdGhyb3cgbmV3IEVycm9yKCdUYXNrIHRyYWNraW5nIHpvbmUgaXMgcmVxdWlyZWQgd2hlbiBwYXNzaW5nIGFuIHVwZGF0ZSBjYWxsYmFjayB0byB3aGVuU3RhYmxlKCkuIElzICJ6b25lLmpzL3BsdWdpbnMvdGFzay10cmFja2luZyIgbG9hZGVkPycpO3RoaXMuYWRkQ2FsbGJhY2soZSxpLHIpLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX1nZXRQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudH1yZWdpc3RlckFwcGxpY2F0aW9uKGUpe3RoaXMucmVnaXN0cnkucmVnaXN0ZXJBcHBsaWNhdGlvbihlLHRoaXMpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKXt0aGlzLnJlZ2lzdHJ5LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKX1maW5kUHJvdmlkZXJzKGUsaSxyKXtyZXR1cm5bXX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihfdCksaihGVCksaihlQykpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEZUPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcH1yZWdpc3RlckFwcGxpY2F0aW9uKGUsaSl7dGhpcy5fYXBwbGljYXRpb25zLnNldChlLGkpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKGUpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1nZXRUZXN0YWJpbGl0eShlKXtyZXR1cm4gdGhpcy5fYXBwbGljYXRpb25zLmdldChlKXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5kVGVzdGFiaWxpdHlJblRyZWUoZSxpPSEwKXtyZXR1cm4gaUI/LmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLGUsaSk/P251bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKSx4eD1udWxsLHRYPW5ldyBwZSgiQWxsb3dNdWx0aXBsZVRva2VuIiksblg9bmV3IHBlKCJQbGF0Zm9ybURlc3Ryb3lMaXN0ZW5lcnMiKTtmdW5jdGlvbiByQihuLHQsZT1bXSl7bGV0IGk9YFBsYXRmb3JtOiAke3R9YCxyPW5ldyBwZShpKTtyZXR1cm4obz1bXSk9PntsZXQgcz1pWCgpO2lmKCFzfHxzLmluamVjdG9yLmdldCh0WCwhMSkpe2xldCBhPVsuLi5lLC4uLm8se3Byb3ZpZGU6cix1c2VWYWx1ZTohMH1dO24/bihhKTpmdW5jdGlvbihuKXtpZih4eCYmIXh4LmdldCh0WCwhMSkpdGhyb3cgbmV3IEF0KDQwMCwhMSk7eHg9bjtsZXQgdD1uLmdldChyWCk7KGZ1bmN0aW9uKG4pe2xldCB0PW4uZ2V0KGVCLG51bGwpO3QmJnQuZm9yRWFjaChlPT5lKCkpfSkobil9KGZ1bmN0aW9uKG49W10sdCl7cmV0dXJuIFhuLmNyZWF0ZSh7bmFtZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z1QsdXNlVmFsdWU6InBsYXRmb3JtIn0se3Byb3ZpZGU6blgsdXNlVmFsdWU6bmV3IFNldChbKCk9Pnh4PW51bGxdKX0sLi4ubl19KX0oYSxpKSl9cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PWlYKCk7aWYoIXQpdGhyb3cgbmV3IEF0KDQwMSwhMSk7cmV0dXJuIHR9KCl9fWZ1bmN0aW9uIGlYKCl7cmV0dXJuIHh4Py5nZXQoclgpPz9udWxsfXZhciByWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2luamVjdG9yPWUsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KGUsaSl7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZTtyZXR1cm4gZT0ibm9vcCI9PT1uP25ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgRyx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEcsdGhpcy5vblN0YWJsZT1uZXcgRyx0aGlzLm9uRXJyb3I9bmV3IEd9cnVuKHQsZSxpKXtyZXR1cm4gdC5hcHBseShlLGkpfXJ1bkd1YXJkZWQodCxlLGkpe3JldHVybiB0LmFwcGx5KGUsaSl9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0dXJuIHQoKX1ydW5UYXNrKHQsZSxpLHIpe3JldHVybiB0LmFwcGx5KGUsaSl9fTooInpvbmUuanMiPT09bj92b2lkIDA6bil8fG5ldyBfdCh0KSxlfShpPy5uZ1pvbmUsZnVuY3Rpb24obil7cmV0dXJue2VuYWJsZUxvbmdTdGFja1RyYWNlOiExLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246ISghbnx8IW4ubmdab25lRXZlbnRDb2FsZXNjaW5nKXx8ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246ISghbnx8IW4ubmdab25lUnVuQ29hbGVzY2luZyl8fCExfX0oaSkpLG89W3twcm92aWRlOl90LHVzZVZhbHVlOnJ9XTtyZXR1cm4gci5ydW4oKCk9PntsZXQgcz1Ybi5jcmVhdGUoe3Byb3ZpZGVyczpvLHBhcmVudDp0aGlzLmluamVjdG9yLG5hbWU6ZS5tb2R1bGVUeXBlLm5hbWV9KSxhPWUuY3JlYXRlKHMpLGw9YS5pbmplY3Rvci5nZXQoUXMsbnVsbCk7aWYoIWwpdGhyb3cgbmV3IEF0KDQwMiwhMSk7cmV0dXJuIHIucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgYz1yLm9uRXJyb3Iuc3Vic2NyaWJlKHtuZXh0OnU9PntsLmhhbmRsZUVycm9yKHUpfX0pO2Eub25EZXN0cm95KCgpPT57TjEodGhpcy5fbW9kdWxlcyxhKSxjLnVuc3Vic2NyaWJlKCl9KX0pLGZ1bmN0aW9uKG4sdCxlKXt0cnl7bGV0IGk9ZSgpO3JldHVybiBuXyhpKT9pLmNhdGNoKHI9Pnt0aHJvdyB0LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLmhhbmRsZUVycm9yKHIpKSxyfSk6aX1jYXRjaChpKXt0aHJvdyB0LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLmhhbmRsZUVycm9yKGkpKSxpfX0obCxyLCgpPT57bGV0IGM9YS5pbmplY3Rvci5nZXQoT1QpO3JldHVybiBjLnJ1bkluaXRpYWxpemVycygpLGMuZG9uZVByb21pc2UudGhlbigoKT0+KGZ1bmN0aW9uKG4peyhmdW5jdGlvbihuLHQpe251bGw9PW4mJlQ3KCJFeHBlY3RlZCBsb2NhbGVJZCB0byBiZSBkZWZpbmVkIixuLG51bGwsIiE9Iil9KShuKSwic3RyaW5nIj09dHlwZW9mIG4mJihnWT1uLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIikpfShhLmluamVjdG9yLmdldChXZCxuVCl8fG5UKSx0aGlzLl9tb2R1bGVEb0Jvb3RzdHJhcChhKSxhKSl9KX0pfWJvb3RzdHJhcE1vZHVsZShlLGk9W10pe2xldCByPW9YKHt9LGkpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9bmV3IHFMKGUpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9KDAsMCxlKS50aGVuKG89PnRoaXMuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShvLHIpKX1fbW9kdWxlRG9Cb290c3RyYXAoZSl7bGV0IGk9ZS5pbmplY3Rvci5nZXQoSXUpO2lmKGUuX2Jvb3RzdHJhcENvbXBvbmVudHMubGVuZ3RoPjApZS5fYm9vdHN0cmFwQ29tcG9uZW50cy5mb3JFYWNoKHI9PmkuYm9vdHN0cmFwKHIpKTtlbHNle2lmKCFlLmluc3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IEF0KDQwMywhMSk7ZS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGkpfXRoaXMuX21vZHVsZXMucHVzaChlKX1vbkRlc3Ryb3koZSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGUpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBBdCg0MDQsITEpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGk9PmkuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goaT0+aSgpKTtsZXQgZT10aGlzLl9pbmplY3Rvci5nZXQoblgsbnVsbCk7ZSYmKGUuZm9yRWFjaChpPT5pKCkpLGUuY2xlYXIoKSksdGhpcy5fZGVzdHJveWVkPSEwfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKFhuKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpO2Z1bmN0aW9uIG9YKG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5yZWR1Y2Uob1gsbik6ey4uLm4sLi4udH19dmFyIEl1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3pvbmU9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9cix0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fc3RhYmxlPSEwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy50aWNrKCl9KX19KTtsZXQgbz1uZXcgdW4oYT0+e3RoaXMuX3N0YWJsZT10aGlzLl96b25lLmlzU3RhYmxlJiYhdGhpcy5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MsdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EubmV4dCh0aGlzLl9zdGFibGUpLGEuY29tcGxldGUoKX0pfSkscz1uZXcgdW4oYT0+e2xldCBsO3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsPXRoaXMuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpPT57X3QuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLEtMKCgpPT57IXRoaXMuX3N0YWJsZSYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiF0aGlzLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYodGhpcy5fc3RhYmxlPSEwLGEubmV4dCghMCkpfSl9KX0pO2xldCBjPXRoaXMuX3pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntfdC5hc3NlcnRJbkFuZ3VsYXJab25lKCksdGhpcy5fc3RhYmxlJiYodGhpcy5fc3RhYmxlPSExLHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnthLm5leHQoITEpfSkpfSk7cmV0dXJuKCk9PntsLnVuc3Vic2NyaWJlKCksYy51bnN1YnNjcmliZSgpfX0pO3RoaXMuaXNTdGFibGU9SnQobyxzLnBpcGUoVHMoKSkpfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1ib290c3RyYXAoZSxpKXtsZXQgcyxyPWUgaW5zdGFuY2VvZiBKMTtpZighdGhpcy5faW5qZWN0b3IuZ2V0KE9UKS5kb25lKXRocm93IXImJlI3KGUpLG5ldyBBdCg0MDUsZmFsc2UpO3M9cj9lOnRoaXMuX2luamVjdG9yLmdldChncykucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKHMuY29tcG9uZW50VHlwZSk7bGV0IGE9ZnVuY3Rpb24obil7cmV0dXJuIG4uaXNCb3VuZFRvTW9kdWxlfShzKT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KEdwKSxjPXMuY3JlYXRlKFhuLk5VTEwsW10saXx8cy5zZWxlY3RvcixhKSx1PWMubG9jYXRpb24ubmF0aXZlRWxlbWVudCxkPWMuaW5qZWN0b3IuZ2V0KG5CLG51bGwpO3JldHVybiBkPy5yZWdpc3RlckFwcGxpY2F0aW9uKHUpLGMub25EZXN0cm95KCgpPT57dGhpcy5kZXRhY2hWaWV3KGMuaG9zdFZpZXcpLE4xKHRoaXMuY29tcG9uZW50cyxjKSxkPy51bnJlZ2lzdGVyQXBwbGljYXRpb24odSl9KSx0aGlzLl9sb2FkQ29tcG9uZW50KGMpLGN9dGljaygpe2lmKHRoaXMuX3J1bm5pbmdUaWNrKXRocm93IG5ldyBBdCgxMDEsITEpO3RyeXt0aGlzLl9ydW5uaW5nVGljaz0hMDtmb3IobGV0IGUgb2YgdGhpcy5fdmlld3MpZS5kZXRlY3RDaGFuZ2VzKCl9Y2F0Y2goZSl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fZXhjZXB0aW9uSGFuZGxlci5oYW5kbGVFcnJvcihlKSl9ZmluYWxseXt0aGlzLl9ydW5uaW5nVGljaz0hMX19YXR0YWNoVmlldyhlKXtsZXQgaT1lO3RoaXMuX3ZpZXdzLnB1c2goaSksaS5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGUpe2xldCBpPWU7TjEodGhpcy5fdmlld3MsaSksaS5kZXRhY2hGcm9tQXBwUmVmKCl9X2xvYWRDb21wb25lbnQoZSl7dGhpcy5hdHRhY2hWaWV3KGUuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKGUpLHRoaXMuX2luamVjdG9yLmdldChHQ2UsW10pLmNvbmNhdCh0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLmZvckVhY2gocj0+cihlKSl9bmdPbkRlc3Ryb3koKXtpZighdGhpcy5fZGVzdHJveWVkKXRyeXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZT0+ZSgpKSx0aGlzLl92aWV3cy5zbGljZSgpLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1maW5hbGx5e3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl92aWV3cz1bXSx0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXX19b25EZXN0cm95KGUpe3JldHVybiB0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goZSksKCk9Pk4xKHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMsZSl9ZGVzdHJveSgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgQXQoNDA2LCExKTtsZXQgZT10aGlzLl9pbmplY3RvcjtlLmRlc3Ryb3kmJiFlLmRlc3Ryb3llZCYmZS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKF90KSxqKGpwKSxqKFFzKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gTjEobix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX12YXIgc1g9ITAsYVg9ITE7ZnVuY3Rpb24gdEMoKXtyZXR1cm4gYVg9ITAsc1h9dmFyIG5uPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLl9fTkdfRUxFTUVOVF9JRF9fPXVNZSxufSkoKTtmdW5jdGlvbiB1TWUobil7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtpZihoMyhuKSYmIWUpe2xldCBpPXFwKG4uaW5kZXgsdCk7cmV0dXJuIG5ldyBRZihpLGkpfXJldHVybiA0NyZuLnR5cGU/bmV3IFFmKHRbMTZdLHQpOm51bGx9KHpvKCkscnQoKSwxNj09KDE2Jm4pKX12YXIgc1Q9Y2xhc3N7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHModCl7cmV0dXJuIHdUKHQpfWNyZWF0ZSh0KXtyZXR1cm4gbmV3ICRMKHQpfX0scE1lPShuLHQpPT50LCRMPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGVuZ3RoPTAsdGhpcy5fbGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3VubGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3ByZXZpb3VzSXRIZWFkPW51bGwsdGhpcy5faXRIZWFkPW51bGwsdGhpcy5faXRUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9tb3Zlc0hlYWQ9bnVsbCx0aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsLHRoaXMuX3RyYWNrQnlGbj10fHxwTWV9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5faXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfWZvckVhY2hPcGVyYXRpb24odCl7bGV0IGU9dGhpcy5faXRIZWFkLGk9dGhpcy5fcmVtb3ZhbHNIZWFkLHI9MCxvPW51bGw7Zm9yKDtlfHxpOyl7bGV0IHM9IWl8fGUmJmUuY3VycmVudEluZGV4PE03KGkscixvKT9lOmksYT1NNyhzLHIsbyksbD1zLmN1cnJlbnRJbmRleDtpZihzPT09aSlyLS0saT1pLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1zLnByZXZpb3VzSW5kZXgpcisrO2Vsc2V7b3x8KG89W10pO2xldCBjPWEtcix1PWwtcjtpZihjIT11KXtmb3IobGV0IHA9MDtwPGM7cCsrKXtsZXQgaD1wPG8ubGVuZ3RoP29bcF06b1twXT0wLGY9aCtwO3U8PWYmJmY8YyYmKG9bcF09aCsxKX1vW3MucHJldmlvdXNJbmRleF09dS1jfX1hIT09bCYmdChzLGEsbCl9fWZvckVhY2hQcmV2aW91c0l0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX1mb3JFYWNoQWRkZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX1mb3JFYWNoTW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX21vdmVzSGVhZDtudWxsIT09ZTtlPWUuX25leHRNb3ZlZCl0KGUpfWZvckVhY2hSZW1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfWZvckVhY2hJZGVudGl0eUNoYW5nZSh0KXtsZXQgZTtmb3IoZT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9ZGlmZih0KXtpZihudWxsPT10JiYodD1bXSksIXdUKHQpKXRocm93IG5ldyBBdCg5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgcixvLHMsZT10aGlzLl9pdEhlYWQsaT0hMTtpZihBcnJheS5pc0FycmF5KHQpKXt0aGlzLmxlbmd0aD10Lmxlbmd0aDtmb3IobGV0IGE9MDthPHRoaXMubGVuZ3RoO2ErKylvPXRbYV0scz10aGlzLl90cmFja0J5Rm4oYSxvKSxudWxsIT09ZSYmT2JqZWN0LmlzKGUudHJhY2tCeUlkLHMpPyhpJiYoZT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihlLG8scyxhKSksT2JqZWN0LmlzKGUuaXRlbSxvKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoZSxvKSk6KGU9dGhpcy5fbWlzbWF0Y2goZSxvLHMsYSksaT0hMCksZT1lLl9uZXh0fWVsc2Ugcj0wLGZ1bmN0aW9uKG4sdCl7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0KG5bZV0pO2Vsc2V7bGV0IGksZT1uW01UKCldKCk7Zm9yKDshKGk9ZS5uZXh0KCkpLmRvbmU7KXQoaS52YWx1ZSl9fSh0LGE9PntzPXRoaXMuX3RyYWNrQnlGbihyLGEpLG51bGwhPT1lJiZPYmplY3QuaXMoZS50cmFja0J5SWQscyk/KGkmJihlPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGUsYSxzLHIpKSxPYmplY3QuaXMoZS5pdGVtLGEpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShlLGEpKTooZT10aGlzLl9taXNtYXRjaChlLGEscyxyKSxpPSEwKSxlPWUuX25leHQscisrfSksdGhpcy5sZW5ndGg9cjtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUoZSksdGhpcy5jb2xsZWN0aW9uPXQsdGhpcy5pc0RpcnR5fWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCB0O2Zvcih0PXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHQ9dGhpcy5fbW92ZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dE1vdmVkKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsfX1fbWlzbWF0Y2godCxlLGkscil7bGV0IG87cmV0dXJuIG51bGw9PT10P289dGhpcy5faXRUYWlsOihvPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoaSxudWxsKSk/KE9iamVjdC5pcyh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fcmVpbnNlcnRBZnRlcih0LG8scikpOm51bGwhPT0odD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KGkscikpPyhPYmplY3QuaXModC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX21vdmVBZnRlcih0LG8scikpOnQ9dGhpcy5fYWRkQWZ0ZXIobmV3IGUzKGUsaSksbyxyKSx0fV92ZXJpZnlSZWluc2VydGlvbih0LGUsaSxyKXtsZXQgbz1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChpLG51bGwpO3JldHVybiBudWxsIT09bz90PXRoaXMuX3JlaW5zZXJ0QWZ0ZXIobyx0Ll9wcmV2LHIpOnQuY3VycmVudEluZGV4IT1yJiYodC5jdXJyZW50SW5kZXg9cix0aGlzLl9hZGRUb01vdmVzKHQscikpLHR9X3RydW5jYXRlKHQpe2Zvcig7bnVsbCE9PXQ7KXtsZXQgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIodCxlLGkpe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7bGV0IHI9dC5fcHJldlJlbW92ZWQsbz10Ll9uZXh0UmVtb3ZlZDtyZXR1cm4gbnVsbD09PXI/dGhpcy5fcmVtb3ZhbHNIZWFkPW86ci5fbmV4dFJlbW92ZWQ9byxudWxsPT09bz90aGlzLl9yZW1vdmFsc1RhaWw9cjpvLl9wcmV2UmVtb3ZlZD1yLHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRUb01vdmVzKHQsaSksdH1fbW92ZUFmdGVyKHQsZSxpKXtyZXR1cm4gdGhpcy5fdW5saW5rKHQpLHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRUb01vdmVzKHQsaSksdH1fYWRkQWZ0ZXIodCxlLGkpe3JldHVybiB0aGlzLl9pbnNlcnRBZnRlcih0LGUsaSksdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsPT09dGhpcy5fYWRkaXRpb25zVGFpbD90aGlzLl9hZGRpdGlvbnNIZWFkPXQ6dGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdH1faW5zZXJ0QWZ0ZXIodCxlLGkpe2xldCByPW51bGw9PT1lP3RoaXMuX2l0SGVhZDplLl9uZXh0O3JldHVybiB0Ll9uZXh0PXIsdC5fcHJldj1lLG51bGw9PT1yP3RoaXMuX2l0VGFpbD10OnIuX3ByZXY9dCxudWxsPT09ZT90aGlzLl9pdEhlYWQ9dDplLl9uZXh0PXQsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBhVCksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9aSx0fV9yZW1vdmUodCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKX1fdW5saW5rKHQpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTtsZXQgZT10Ll9wcmV2LGk9dC5fbmV4dDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faXRIZWFkPWk6ZS5fbmV4dD1pLG51bGw9PT1pP3RoaXMuX2l0VGFpbD1lOmkuX3ByZXY9ZSx0fV9hZGRUb01vdmVzKHQsZSl7cmV0dXJuIHQucHJldmlvdXNJbmRleD09PWV8fCh0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10KSx0fV9hZGRUb1JlbW92YWxzKHQpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBhVCksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1udWxsLHQuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD10LHQuX3ByZXZSZW1vdmVkPW51bGwpOih0Ll9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9dCksdH1fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKXtyZXR1cm4gdC5pdGVtPWUsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXQ6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPXQsdH19LGUzPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pdGVtPXQsdGhpcy50cmFja0J5SWQ9ZSx0aGlzLmN1cnJlbnRJbmRleD1udWxsLHRoaXMucHJldmlvdXNJbmRleD1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldkR1cD1udWxsLHRoaXMuX25leHREdXA9bnVsbCx0aGlzLl9wcmV2UmVtb3ZlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dE1vdmVkPW51bGwsdGhpcy5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGx9fSxhVD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9cHV0KHQpe2xldCBlPXQudHJhY2tCeUlkLGk9dGhpcy5tYXAuZ2V0KGUpO2l8fChpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2hlYWQ9bnVsbCx0aGlzLl90YWlsPW51bGx9YWRkKHQpe251bGw9PT10aGlzLl9oZWFkPyh0aGlzLl9oZWFkPXRoaXMuX3RhaWw9dCx0Ll9uZXh0RHVwPW51bGwsdC5fcHJldkR1cD1udWxsKToodGhpcy5fdGFpbC5fbmV4dER1cD10LHQuX3ByZXZEdXA9dGhpcy5fdGFpbCx0Ll9uZXh0RHVwPW51bGwsdGhpcy5fdGFpbD10KX1nZXQodCxlKXtsZXQgaTtmb3IoaT10aGlzLl9oZWFkO251bGwhPT1pO2k9aS5fbmV4dER1cClpZigobnVsbD09PWV8fGU8PWkuY3VycmVudEluZGV4KSYmT2JqZWN0LmlzKGkudHJhY2tCeUlkLHQpKXJldHVybiBpO3JldHVybiBudWxsfXJlbW92ZSh0KXtsZXQgZT10Ll9wcmV2RHVwLGk9dC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faGVhZD1pOmUuX25leHREdXA9aSxudWxsPT09aT90aGlzLl90YWlsPWU6aS5fcHJldkR1cD1lLG51bGw9PT10aGlzLl9oZWFkfX0sdGhpcy5tYXAuc2V0KGUsaSkpLGkuYWRkKHQpfWdldCh0LGUpe2xldCByPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gcj9yLmdldCh0LGUpOm51bGx9cmVtb3ZlKHQpe2xldCBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH1nZXQgaXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fTtmdW5jdGlvbiBNNyhuLHQsZSl7bGV0IGk9bi5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1pKXJldHVybiBpO2xldCByPTA7cmV0dXJuIGUmJmk8ZS5sZW5ndGgmJihyPWVbaV0pLGkrdCtyfXZhciBsVD1jbGFzc3tjb25zdHJ1Y3Rvcigpe31zdXBwb3J0cyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE1hcHx8WTModCl9Y3JlYXRlKCl7cmV0dXJuIG5ldyBuM319LG4zPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fbWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX1mb3JFYWNoUHJldmlvdXNJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfWZvckVhY2hDaGFuZ2VkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9Zm9yRWFjaEFkZGVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9Zm9yRWFjaFJlbW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9ZGlmZih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fFkzKHQpKSl0aHJvdyBuZXcgQXQoOTAwLCExKX1lbHNlIHQ9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKHQpe3RoaXMuX3Jlc2V0KCk7bGV0IGU9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2godCwoaSxyKT0+e2lmKGUmJmUua2V5PT09cil0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhlLGkpLHRoaXMuX2FwcGVuZEFmdGVyPWUsZT1lLl9uZXh0O2Vsc2V7bGV0IG89dGhpcy5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkocixpKTtlPXRoaXMuX2luc2VydEJlZm9yZU9yQXBwZW5kKGUsbyl9fSksZSl7ZS5fcHJldiYmKGUuX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPWU7Zm9yKGxldCBpPWU7bnVsbCE9PWk7aT1pLl9uZXh0UmVtb3ZlZClpPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoaS5rZXkpLGkuX25leHRSZW1vdmVkPWkuX25leHQsaS5wcmV2aW91c1ZhbHVlPWkuY3VycmVudFZhbHVlLGkuY3VycmVudFZhbHVlPW51bGwsaS5fcHJldj1udWxsLGkuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9X2luc2VydEJlZm9yZU9yQXBwZW5kKHQsZSl7aWYodCl7bGV0IGk9dC5fcHJldjtyZXR1cm4gZS5fbmV4dD10LGUuX3ByZXY9aSx0Ll9wcmV2PWUsaSYmKGkuX25leHQ9ZSksdD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPWUpLHRoaXMuX2FwcGVuZEFmdGVyPXQsdH1yZXR1cm4gdGhpcy5fYXBwZW5kQWZ0ZXI/KHRoaXMuX2FwcGVuZEFmdGVyLl9uZXh0PWUsZS5fcHJldj10aGlzLl9hcHBlbmRBZnRlcik6dGhpcy5fbWFwSGVhZD1lLHRoaXMuX2FwcGVuZEFmdGVyPWUsbnVsbH1fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkodCxlKXtpZih0aGlzLl9yZWNvcmRzLmhhcyh0KSl7bGV0IHI9dGhpcy5fcmVjb3Jkcy5nZXQodCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMocixlKTtsZXQgbz1yLl9wcmV2LHM9ci5fbmV4dDtyZXR1cm4gbyYmKG8uX25leHQ9cykscyYmKHMuX3ByZXY9byksci5fbmV4dD1udWxsLHIuX3ByZXY9bnVsbCxyfWxldCBpPW5ldyBpMyh0KTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5zZXQodCxpKSxpLmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQWRkaXRpb25zKGkpLGl9X3Jlc2V0KCl7aWYodGhpcy5pc0RpcnR5KXtsZXQgdDtmb3IodGhpcy5fcHJldmlvdXNNYXBIZWFkPXRoaXMuX21hcEhlYWQsdD10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dENoYW5nZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbH19X21heWJlQWRkVG9DaGFuZ2VzKHQsZSl7T2JqZWN0LmlzKGUsdC5jdXJyZW50VmFsdWUpfHwodC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9DaGFuZ2VzKHQpKX1fYWRkVG9BZGRpdGlvbnModCl7bnVsbD09PXRoaXMuX2FkZGl0aW9uc0hlYWQ/dGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPXQ6KHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHRoaXMuX2FkZGl0aW9uc1RhaWw9dCl9X2FkZFRvQ2hhbmdlcyh0KXtudWxsPT09dGhpcy5fY2hhbmdlc0hlYWQ/dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9dDoodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPXQsdGhpcy5fY2hhbmdlc1RhaWw9dCl9X2ZvckVhY2godCxlKXt0IGluc3RhbmNlb2YgTWFwP3QuZm9yRWFjaChlKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PmUodFtpXSxpKSl9fSxpMz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9fTtmdW5jdGlvbiB3Nygpe3JldHVybiBuZXcga2MoW25ldyBzVF0pfXZhciBrYz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLGkpe2lmKG51bGwhPWkpe2xldCByPWkuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXtyZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6aT0+bi5jcmVhdGUoZSxpfHx3NygpKSxkZXBzOltbbixuZXcgdGwsbmV3IG5zXV19fWZpbmQoZSl7bGV0IGk9dGhpcy5mYWN0b3JpZXMuZmluZChyPT5yLnN1cHBvcnRzKGUpKTtpZihudWxsIT1pKXJldHVybiBpO3Rocm93IG5ldyBBdCg5MDEsITEpfX1yZXR1cm4gbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6dzd9KSxufSkoKTtmdW5jdGlvbiBTNygpe3JldHVybiBuZXcgbkMoW25ldyBsVF0pfXZhciBuQz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLGkpe2lmKGkpe2xldCByPWkuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXtyZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6aT0+bi5jcmVhdGUoZSxpfHxTNygpKSxkZXBzOltbbixuZXcgdGwsbmV3IG5zXV19fWZpbmQoZSl7bGV0IGk9dGhpcy5mYWN0b3JpZXMuZmluZChyPT5yLnN1cHBvcnRzKGUpKTtpZihpKXJldHVybiBpO3Rocm93IG5ldyBBdCg5MDEsITEpfX1yZXR1cm4gbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6Uzd9KSxufSkoKSxoTWU9W25ldyBsVF0sZk1lPVtuZXcgc1RdLGNYPShuZXcga2MoZk1lKSxuZXcgbkMoaE1lKSxyQihudWxsLCJjb3JlIixbXSkpLHVYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEl1KSl9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpO2Z1bmN0aW9uIE5UKG4pe3JldHVybiJib29sZWFuIj09dHlwZW9mIG4/bjpudWxsIT1uJiYiZmFsc2UiIT09bn12YXIgV2w9KCgpPT57cmV0dXJuKG49V2x8fChXbD17fSkpW24uUkFXX1RFWFQ9MF09IlJBV19URVhUIixuW24uRVNDQVBBQkxFX1JBV19URVhUPTFdPSJFU0NBUEFCTEVfUkFXX1RFWFQiLG5bbi5QQVJTQUJMRV9EQVRBPTJdPSJQQVJTQUJMRV9EQVRBIixXbDt2YXIgbn0pKCk7ZnVuY3Rpb24gS2Qobil7aWYoIjoiIT1uWzBdKXJldHVybltudWxsLG5dO2xldCB0PW4uaW5kZXhPZigiOiIsMSk7aWYoLTE9PT10KXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZm9ybWF0ICIke259IiBleHBlY3RpbmcgIjpuYW1lc3BhY2U6bmFtZSJgKTtyZXR1cm5bbi5zbGljZSgxLHQpLG4uc2xpY2UodCsxKV19ZnVuY3Rpb24gQ0Iobil7cmV0dXJuIm5nLWNvbnRhaW5lciI9PT1LZChuKVsxXX1mdW5jdGlvbiBNQihuKXtyZXR1cm4ibmctY29udGVudCI9PT1LZChuKVsxXX1mdW5jdGlvbiBkWChuKXtyZXR1cm4gbnVsbD09PW4/bnVsbDpLZChuKVswXX1mdW5jdGlvbiB3QihuLHQpe3JldHVybiBuP2A6JHtufToke3R9YDp0fXZhciBwWCxMVCxlaT1jbGFzc3tjb25zdHJ1Y3Rvcih7Y2xvc2VkQnlDaGlsZHJlbjp0LGltcGxpY2l0TmFtZXNwYWNlUHJlZml4OmUsY29udGVudFR5cGU6aT1XbC5QQVJTQUJMRV9EQVRBLGNsb3NlZEJ5UGFyZW50OnI9ITEsaXNWb2lkOm89ITEsaWdub3JlRmlyc3RMZjpzPSExLHByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZTphPSExfT17fSl7dGhpcy5jbG9zZWRCeUNoaWxkcmVuPXt9LHRoaXMuY2xvc2VkQnlQYXJlbnQ9ITEsdGhpcy5jYW5TZWxmQ2xvc2U9ITEsdCYmdC5sZW5ndGg+MCYmdC5mb3JFYWNoKGw9PnRoaXMuY2xvc2VkQnlDaGlsZHJlbltsXT0hMCksdGhpcy5pc1ZvaWQ9byx0aGlzLmNsb3NlZEJ5UGFyZW50PXJ8fG8sdGhpcy5pbXBsaWNpdE5hbWVzcGFjZVByZWZpeD1lfHxudWxsLHRoaXMuY29udGVudFR5cGU9aSx0aGlzLmlnbm9yZUZpcnN0TGY9cyx0aGlzLnByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZT1hfWlzQ2xvc2VkQnlDaGlsZCh0KXtyZXR1cm4gdGhpcy5pc1ZvaWR8fHQudG9Mb3dlckNhc2UoKWluIHRoaXMuY2xvc2VkQnlDaGlsZHJlbn1nZXRDb250ZW50VHlwZSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHRoaXMuY29udGVudFR5cGU/KHZvaWQgMD09PXQ/dm9pZCAwOnRoaXMuY29udGVudFR5cGVbdF0pPz90aGlzLmNvbnRlbnRUeXBlLmRlZmF1bHQ6dGhpcy5jb250ZW50VHlwZX19O2Z1bmN0aW9uIEZWKG4pe3JldHVybiBMVHx8KHBYPW5ldyBlaSxMVD17YmFzZTpuZXcgZWkoe2lzVm9pZDohMH0pLG1ldGE6bmV3IGVpKHtpc1ZvaWQ6ITB9KSxhcmVhOm5ldyBlaSh7aXNWb2lkOiEwfSksZW1iZWQ6bmV3IGVpKHtpc1ZvaWQ6ITB9KSxsaW5rOm5ldyBlaSh7aXNWb2lkOiEwfSksaW1nOm5ldyBlaSh7aXNWb2lkOiEwfSksaW5wdXQ6bmV3IGVpKHtpc1ZvaWQ6ITB9KSxwYXJhbTpuZXcgZWkoe2lzVm9pZDohMH0pLGhyOm5ldyBlaSh7aXNWb2lkOiEwfSksYnI6bmV3IGVpKHtpc1ZvaWQ6ITB9KSxzb3VyY2U6bmV3IGVpKHtpc1ZvaWQ6ITB9KSx0cmFjazpuZXcgZWkoe2lzVm9pZDohMH0pLHdicjpuZXcgZWkoe2lzVm9pZDohMH0pLHA6bmV3IGVpKHtjbG9zZWRCeUNoaWxkcmVuOlsiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImJsb2NrcXVvdGUiLCJkaXYiLCJkbCIsImZpZWxkc2V0IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWRlciIsImhncm91cCIsImhyIiwibWFpbiIsIm5hdiIsIm9sIiwicCIsInByZSIsInNlY3Rpb24iLCJ0YWJsZSIsInVsIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSx0aGVhZDpuZXcgZWkoe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSIsInRmb290Il19KSx0Ym9keTpuZXcgZWkoe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSIsInRmb290Il0sY2xvc2VkQnlQYXJlbnQ6ITB9KSx0Zm9vdDpuZXcgZWkoe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSJdLGNsb3NlZEJ5UGFyZW50OiEwfSksdHI6bmV3IGVpKHtjbG9zZWRCeUNoaWxkcmVuOlsidHIiXSxjbG9zZWRCeVBhcmVudDohMH0pLHRkOm5ldyBlaSh7Y2xvc2VkQnlDaGlsZHJlbjpbInRkIiwidGgiXSxjbG9zZWRCeVBhcmVudDohMH0pLHRoOm5ldyBlaSh7Y2xvc2VkQnlDaGlsZHJlbjpbInRkIiwidGgiXSxjbG9zZWRCeVBhcmVudDohMH0pLGNvbDpuZXcgZWkoe2lzVm9pZDohMH0pLHN2ZzpuZXcgZWkoe2ltcGxpY2l0TmFtZXNwYWNlUHJlZml4OiJzdmcifSksZm9yZWlnbk9iamVjdDpuZXcgZWkoe2ltcGxpY2l0TmFtZXNwYWNlUHJlZml4OiJzdmciLHByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZTohMH0pLG1hdGg6bmV3IGVpKHtpbXBsaWNpdE5hbWVzcGFjZVByZWZpeDoibWF0aCJ9KSxsaTpuZXcgZWkoe2Nsb3NlZEJ5Q2hpbGRyZW46WyJsaSJdLGNsb3NlZEJ5UGFyZW50OiEwfSksZHQ6bmV3IGVpKHtjbG9zZWRCeUNoaWxkcmVuOlsiZHQiLCJkZCJdfSksZGQ6bmV3IGVpKHtjbG9zZWRCeUNoaWxkcmVuOlsiZHQiLCJkZCJdLGNsb3NlZEJ5UGFyZW50OiEwfSkscmI6bmV3IGVpKHtjbG9zZWRCeUNoaWxkcmVuOlsicmIiLCJydCIsInJ0YyIsInJwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxydDpuZXcgZWkoe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0IiwicnRjIiwicnAiXSxjbG9zZWRCeVBhcmVudDohMH0pLHJ0YzpuZXcgZWkoe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0YyIsInJwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxycDpuZXcgZWkoe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0IiwicnRjIiwicnAiXSxjbG9zZWRCeVBhcmVudDohMH0pLG9wdGdyb3VwOm5ldyBlaSh7Y2xvc2VkQnlDaGlsZHJlbjpbIm9wdGdyb3VwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxvcHRpb246bmV3IGVpKHtjbG9zZWRCeUNoaWxkcmVuOlsib3B0aW9uIiwib3B0Z3JvdXAiXSxjbG9zZWRCeVBhcmVudDohMH0pLHByZTpuZXcgZWkoe2lnbm9yZUZpcnN0TGY6ITB9KSxsaXN0aW5nOm5ldyBlaSh7aWdub3JlRmlyc3RMZjohMH0pLHN0eWxlOm5ldyBlaSh7Y29udGVudFR5cGU6V2wuUkFXX1RFWFR9KSxzY3JpcHQ6bmV3IGVpKHtjb250ZW50VHlwZTpXbC5SQVdfVEVYVH0pLHRpdGxlOm5ldyBlaSh7Y29udGVudFR5cGU6e2RlZmF1bHQ6V2wuRVNDQVBBQkxFX1JBV19URVhULHN2ZzpXbC5QQVJTQUJMRV9EQVRBfX0pLHRleHRhcmVhOm5ldyBlaSh7Y29udGVudFR5cGU6V2wuRVNDQVBBQkxFX1JBV19URVhULGlnbm9yZUZpcnN0TGY6ITB9KX0pLExUW25dPz9MVFtuLnRvTG93ZXJDYXNlKCldPz9wWH12YXIgaFg9bmV3IFJlZ0V4cCgiKFxcOm5vdFxcKCl8KChbXFwuXFwjXT8pWy1cXHddKyl8KD86XFxbKFstLlxcdypcXFxcJF0rKSg/Oj0oW1wiJ10/KShbXlxcXVwiJ10qKVxcNSk/XFxdKXwoXFwpKXwoXFxzKixcXHMqKSIsImciKSxaZD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudD1udWxsLHRoaXMuY2xhc3NOYW1lcz1bXSx0aGlzLmF0dHJzPVtdLHRoaXMubm90U2VsZWN0b3JzPVtdfXN0YXRpYyBwYXJzZSh0KXtsZXQgbyxlPVtdLGk9KGwsYyk9PntjLm5vdFNlbGVjdG9ycy5sZW5ndGg+MCYmIWMuZWxlbWVudCYmMD09Yy5jbGFzc05hbWVzLmxlbmd0aCYmMD09Yy5hdHRycy5sZW5ndGgmJihjLmVsZW1lbnQ9IioiKSxsLnB1c2goYyl9LHI9bmV3IFpkLHM9cixhPSExO2ZvcihoWC5sYXN0SW5kZXg9MDtvPWhYLmV4ZWModCk7KXtpZihvWzFdKXtpZihhKXRocm93IG5ldyBFcnJvcigiTmVzdGluZyA6bm90IGluIGEgc2VsZWN0b3IgaXMgbm90IGFsbG93ZWQiKTthPSEwLHM9bmV3IFpkLHIubm90U2VsZWN0b3JzLnB1c2gocyl9bGV0IGw9b1syXTtpZihsKXtsZXQgdT1vWzNdOyIjIj09PXU/cy5hZGRBdHRyaWJ1dGUoImlkIixsLnNsaWNlKDEpKToiLiI9PT11P3MuYWRkQ2xhc3NOYW1lKGwuc2xpY2UoMSkpOnMuc2V0RWxlbWVudChsKX1sZXQgYz1vWzRdO2lmKGMmJnMuYWRkQXR0cmlidXRlKHMudW5lc2NhcGVBdHRyaWJ1dGUoYyksb1s2XSksb1s3XSYmKGE9ITEscz1yKSxvWzhdKXtpZihhKXRocm93IG5ldyBFcnJvcigiTXVsdGlwbGUgc2VsZWN0b3JzIGluIDpub3QgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpKGUscikscj1zPW5ldyBaZH19cmV0dXJuIGkoZSxyKSxlfXVuZXNjYXBlQXR0cmlidXRlKHQpe2xldCBlPSIiLGk9ITE7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBvPXQuY2hhckF0KHIpO2lmKCJcXCIhPT1vKXtpZigiJCI9PT1vJiYhaSl0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGluIGF0dHJpYnV0ZSBzZWxlY3RvciAiJHt0fSIuIFVuZXNjYXBlZCAiJCIgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIGVzY2FwZSB3aXRoICJcXCQiLmApO2k9ITEsZSs9b31lbHNlIGk9ITB9cmV0dXJuIGV9ZXNjYXBlQXR0cmlidXRlKHQpe3JldHVybiB0LnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC9cJC9nLCJcXCQiKX1pc0VsZW1lbnRTZWxlY3Rvcigpe3JldHVybiB0aGlzLmhhc0VsZW1lbnRTZWxlY3RvcigpJiYwPT10aGlzLmNsYXNzTmFtZXMubGVuZ3RoJiYwPT10aGlzLmF0dHJzLmxlbmd0aCYmMD09PXRoaXMubm90U2VsZWN0b3JzLmxlbmd0aH1oYXNFbGVtZW50U2VsZWN0b3IoKXtyZXR1cm4hIXRoaXMuZWxlbWVudH1zZXRFbGVtZW50KHQ9bnVsbCl7dGhpcy5lbGVtZW50PXR9Z2V0TWF0Y2hpbmdFbGVtZW50VGVtcGxhdGUoKXtsZXQgdD10aGlzLmVsZW1lbnR8fCJkaXYiLGU9dGhpcy5jbGFzc05hbWVzLmxlbmd0aD4wP2AgY2xhc3M9IiR7dGhpcy5jbGFzc05hbWVzLmpvaW4oIiAiKX0iYDoiIixpPSIiO2ZvcihsZXQgcj0wO3I8dGhpcy5hdHRycy5sZW5ndGg7cis9MilpKz1gICR7dGhpcy5hdHRyc1tyXX0keyIiIT09dGhpcy5hdHRyc1tyKzFdP2A9IiR7dGhpcy5hdHRyc1tyKzFdfSJgOiIifWA7cmV0dXJuIEZWKHQpLmlzVm9pZD9gPCR7dH0ke2V9JHtpfS8+YDpgPCR7dH0ke2V9JHtpfT48LyR7dH0+YH1nZXRBdHRycygpe2xldCB0PVtdO3JldHVybiB0aGlzLmNsYXNzTmFtZXMubGVuZ3RoPjAmJnQucHVzaCgiY2xhc3MiLHRoaXMuY2xhc3NOYW1lcy5qb2luKCIgIikpLHQuY29uY2F0KHRoaXMuYXR0cnMpfWFkZEF0dHJpYnV0ZSh0LGU9IiIpe3RoaXMuYXR0cnMucHVzaCh0LGUmJmUudG9Mb3dlckNhc2UoKXx8IiIpfWFkZENsYXNzTmFtZSh0KXt0aGlzLmNsYXNzTmFtZXMucHVzaCh0LnRvTG93ZXJDYXNlKCkpfXRvU3RyaW5nKCl7bGV0IHQ9dGhpcy5lbGVtZW50fHwiIjtpZih0aGlzLmNsYXNzTmFtZXMmJnRoaXMuY2xhc3NOYW1lcy5mb3JFYWNoKGU9PnQrPWAuJHtlfWApLHRoaXMuYXR0cnMpZm9yKGxldCBlPTA7ZTx0aGlzLmF0dHJzLmxlbmd0aDtlKz0yKXtsZXQgaT10aGlzLmVzY2FwZUF0dHJpYnV0ZSh0aGlzLmF0dHJzW2VdKSxyPXRoaXMuYXR0cnNbZSsxXTt0Kz1gWyR7aX0ke3I/Ij0iK3I6IiJ9XWB9cmV0dXJuIHRoaXMubm90U2VsZWN0b3JzLmZvckVhY2goZT0+dCs9YDpub3QoJHtlfSlgKSx0fX0scWQ9KCgpPT57cmV0dXJuKG49cWR8fChxZD17fSkpW24uRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixuW24uTm9uZT0yXT0iTm9uZSIsbltuLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIixxZDt2YXIgbn0pKCksY0M9KCgpPT57cmV0dXJuKG49Y0N8fChjQz17fSkpW24uT25QdXNoPTBdPSJPblB1c2giLG5bbi5EZWZhdWx0PTFdPSJEZWZhdWx0IixjQzt2YXIgbn0pKCksaW89KCgpPT57cmV0dXJuKG49aW98fChpbz17fSkpW24uTk9ORT0wXT0iTk9ORSIsbltuLkhUTUw9MV09IkhUTUwiLG5bbi5TVFlMRT0yXT0iU1RZTEUiLG5bbi5TQ1JJUFQ9M109IlNDUklQVCIsbltuLlVSTD00XT0iVVJMIixuW24uUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLGlvO3ZhciBufSkoKTtmdW5jdGlvbiB2TWUobil7bGV0IHQ9ZnVuY3Rpb24obil7bGV0IHQ9bi5jbGFzc05hbWVzJiZuLmNsYXNzTmFtZXMubGVuZ3RoP1s4LC4uLm4uY2xhc3NOYW1lc106W107cmV0dXJuW24uZWxlbWVudCYmIioiIT09bi5lbGVtZW50P24uZWxlbWVudDoiIiwuLi5uLmF0dHJzLC4uLnRdfShuKSxlPW4ubm90U2VsZWN0b3JzJiZuLm5vdFNlbGVjdG9ycy5sZW5ndGg/bi5ub3RTZWxlY3RvcnMubWFwKGk9PmZ1bmN0aW9uKG4pe2xldCB0PW4uY2xhc3NOYW1lcyYmbi5jbGFzc05hbWVzLmxlbmd0aD9bOCwuLi5uLmNsYXNzTmFtZXNdOltdO3JldHVybiBuLmVsZW1lbnQ/WzUsbi5lbGVtZW50LC4uLm4uYXR0cnMsLi4udF06bi5hdHRycy5sZW5ndGg/WzMsLi4ubi5hdHRycywuLi50XTpuLmNsYXNzTmFtZXMmJm4uY2xhc3NOYW1lcy5sZW5ndGg/WzksLi4ubi5jbGFzc05hbWVzXTpbXX0oaSkpOltdO3JldHVybiB0LmNvbmNhdCguLi5lKX1mdW5jdGlvbiBOVihuKXtyZXR1cm4gbj9aZC5wYXJzZShuKS5tYXAodk1lKTpbXX12YXIgeU1lPS8tKyhbYS16MC05XSkvZztmdW5jdGlvbiBPUShuLHQsZSl7bGV0IGk9bi5pbmRleE9mKHQpO3JldHVybi0xPT1pP2U6W24uc2xpY2UoMCxpKS50cmltKCksbi5zbGljZShpKzEpLnRyaW0oKV19ZnVuY3Rpb24gUVQobil7dGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbCBFcnJvcjogJHtufWApfWZ1bmN0aW9uIExWKG4pe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uLmNoYXJDb2RlQXQoZSk7aWYoaT49NTUyOTYmJmk8PTU2MzE5JiZuLmxlbmd0aD5lKzEpe2xldCByPW4uY2hhckNvZGVBdChlKzEpO3I+PTU2MzIwJiZyPD01NzM0MyYmKGUrKyxpPShpLTU1Mjk2PDwxMCkrci01NjMyMCs2NTUzNil9aTw9MTI3P3QucHVzaChpKTppPD0yMDQ3P3QucHVzaChpPj42JjMxfDE5Miw2MyZpfDEyOCk6aTw9NjU1MzU/dC5wdXNoKGk+PjEyfDIyNCxpPj42JjYzfDEyOCw2MyZpfDEyOCk6aTw9MjA5NzE1MSYmdC5wdXNoKGk+PjE4Jjd8MjQwLGk+PjEyJjYzfDEyOCxpPj42JjYzfDEyOCw2MyZpfDEyOCl9cmV0dXJuIHR9ZnVuY3Rpb24ga1Eobil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBuO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIlsiK24ubWFwKGtRKS5qb2luKCIsICIpKyJdIjtpZihudWxsPT1uKXJldHVybiIiK247aWYobi5vdmVycmlkZGVuTmFtZSlyZXR1cm5gJHtuLm92ZXJyaWRkZW5OYW1lfWA7aWYobi5uYW1lKXJldHVybmAke24ubmFtZX1gO2lmKCFuLnRvU3RyaW5nKXJldHVybiJvYmplY3QiO2xldCB0PW4udG9TdHJpbmcoKTtpZihudWxsPT10KXJldHVybiIiK3Q7bGV0IGU9dC5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09ZT90OnQuc3Vic3RyaW5nKDAsZSl9dmFyIHBfPSgoKT0+dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCksbmg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kaWdpdHM9dH1zdGF0aWMgemVybygpe3JldHVybiBuZXcgbmgoWzBdKX1zdGF0aWMgb25lKCl7cmV0dXJuIG5ldyBuaChbMV0pfWNsb25lKCl7cmV0dXJuIG5ldyBuaCh0aGlzLmRpZ2l0cy5zbGljZSgpKX1hZGQodCl7bGV0IGU9dGhpcy5jbG9uZSgpO3JldHVybiBlLmFkZFRvU2VsZih0KSxlfWFkZFRvU2VsZih0KXtsZXQgZT1NYXRoLm1heCh0aGlzLmRpZ2l0cy5sZW5ndGgsdC5kaWdpdHMubGVuZ3RoKSxpPTA7Zm9yKGxldCByPTA7cjxlO3IrKyl7bGV0IG89aTtyPHRoaXMuZGlnaXRzLmxlbmd0aCYmKG8rPXRoaXMuZGlnaXRzW3JdKSxyPHQuZGlnaXRzLmxlbmd0aCYmKG8rPXQuZGlnaXRzW3JdKSxvPj0xMD8odGhpcy5kaWdpdHNbcl09by0xMCxpPTEpOih0aGlzLmRpZ2l0c1tyXT1vLGk9MCl9aT4wJiYodGhpcy5kaWdpdHNbZV09MSl9dG9TdHJpbmcoKXtsZXQgdD0iIjtmb3IobGV0IGU9dGhpcy5kaWdpdHMubGVuZ3RoLTE7ZT49MDtlLS0pdCs9dGhpcy5kaWdpdHNbZV07cmV0dXJuIHR9fSxLVD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBvd2VyT2ZUd29zPVt0XX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnBvd2VyT2ZUd29zWzBdfW11bHRpcGx5QnkodCl7bGV0IGU9bmguemVybygpO3JldHVybiB0aGlzLm11bHRpcGx5QnlBbmRBZGRUbyh0LGUpLGV9bXVsdGlwbHlCeUFuZEFkZFRvKHQsZSl7Zm9yKGxldCBpPTA7MCE9PXQ7dD4+Pj0xLGkrKylpZigxJnQpe2xldCByPXRoaXMuZ2V0TXVsdGlwbGllZEJ5UG93ZXJPZlR3byhpKTtlLmFkZFRvU2VsZihyKX19Z2V0TXVsdGlwbGllZEJ5UG93ZXJPZlR3byh0KXtmb3IobGV0IGU9dGhpcy5wb3dlck9mVHdvcy5sZW5ndGg7ZTw9dDtlKyspe2xldCBpPXRoaXMucG93ZXJPZlR3b3NbZS0xXTt0aGlzLnBvd2VyT2ZUd29zW2VdPWkuYWRkKGkpfXJldHVybiB0aGlzLnBvd2VyT2ZUd29zW3RdfX07ZnVuY3Rpb24gU01lKG4pe3JldHVybiBmdW5jdGlvbihuKXtsZXQgdD1MVihuKSxlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5sZW5ndGgrMz4+PjIsaT1bXTtmb3IobGV0IHI9MDtyPGU7cisrKWlbcl09ZW0obiw0KnIsdCk7cmV0dXJuIGl9KHQsRmMuQmlnKSxpPTgqdC5sZW5ndGgscj1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8ODA7aSsrKWUucHVzaCh1bmRlZmluZWQpO3JldHVybiBlfSgpLG89MTczMjU4NDE5MyxzPTQwMjMyMzM0MTcsYT0yNTYyMzgzMTAyLGw9MjcxNzMzODc4LGM9MzI4NTM3NzUyMDtlW2k+PjVdfD0xMjg8PDI0LWklMzIsZVsxNSsoaSs2ND4+OTw8NCldPWk7Zm9yKGxldCB1PTA7dTxlLmxlbmd0aDt1Kz0xNil7bGV0IGQ9byxwPXMsaD1hLGY9bCxtPWM7Zm9yKGxldCB4PTA7eDw4MDt4Kyspe3JbeF09eDwxNj9lW3UreF06b0Ioclt4LTNdXnJbeC04XV5yW3gtMTRdXnJbeC0xNl0sMSk7bGV0IGc9SU1lKHgscyxhLGwpLGI9Z1swXSxEPWdbMV0sVD1bb0Iobyw1KSxiLGMsRCxyW3hdXS5yZWR1Y2UoZWEpO2M9bCxsPWEsYT1vQihzLDMwKSxzPW8sbz1UfW89ZWEobyxkKSxzPWVhKHMscCksYT1lYShhLGgpLGw9ZWEobCxmKSxjPWVhKGMsbSl9cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1EQihuLGUpO3QrPShpPj4+NCkudG9TdHJpbmcoMTYpKygxNSZpKS50b1N0cmluZygxNil9cmV0dXJuIHQudG9Mb3dlckNhc2UoKX0oZnVuY3Rpb24obil7cmV0dXJuIG4ucmVkdWNlKCh0LGUpPT50LmNvbmNhdChmdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPDQ7ZSsrKXQucHVzaChuPj4+OCooMy1lKSYyNTUpO3JldHVybiB0fShlKSksW10pfShbbyxzLGEsbCxjXSkpfShmdW5jdGlvbihuKXtyZXR1cm4gbi5tYXAodD0+dC52aXNpdChUTWUsbnVsbCkpfShuLm5vZGVzKS5qb2luKCIiKStgWyR7bi5tZWFuaW5nfV1gKX1mdW5jdGlvbiBGUShuKXtsZXQgdD1uZXcgVEI7cmV0dXJuIEFEKG4ubm9kZXMubWFwKGk9PmkudmlzaXQodCxudWxsKSkuam9pbigiIiksbi5tZWFuaW5nKX12YXIgWlQ9Y2xhc3N7dmlzaXRUZXh0KHQsZSl7cmV0dXJuIHQudmFsdWV9dmlzaXRDb250YWluZXIodCxlKXtyZXR1cm5gWyR7dC5jaGlsZHJlbi5tYXAoaT0+aS52aXNpdCh0aGlzKSkuam9pbigiLCAiKX1dYH12aXNpdEljdSh0LGUpe2xldCBpPU9iamVjdC5rZXlzKHQuY2FzZXMpLm1hcChyPT5gJHtyfSB7JHt0LmNhc2VzW3JdLnZpc2l0KHRoaXMpfX1gKTtyZXR1cm5geyR7dC5leHByZXNzaW9ufSwgJHt0LnR5cGV9LCAke2kuam9pbigiLCAiKX19YH12aXNpdFRhZ1BsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHQuaXNWb2lkP2A8cGggdGFnIG5hbWU9IiR7dC5zdGFydE5hbWV9Ii8+YDpgPHBoIHRhZyBuYW1lPSIke3Quc3RhcnROYW1lfSI+JHt0LmNoaWxkcmVuLm1hcChpPT5pLnZpc2l0KHRoaXMpKS5qb2luKCIsICIpfTwvcGggbmFtZT0iJHt0LmNsb3NlTmFtZX0iPmB9dmlzaXRQbGFjZWhvbGRlcih0LGUpe3JldHVybiB0LnZhbHVlP2A8cGggbmFtZT0iJHt0Lm5hbWV9Ij4ke3QudmFsdWV9PC9waD5gOmA8cGggbmFtZT0iJHt0Lm5hbWV9Ii8+YH12aXNpdEljdVBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuYDxwaCBpY3UgbmFtZT0iJHt0Lm5hbWV9Ij4ke3QudmFsdWUudmlzaXQodGhpcyl9PC9waD5gfX0sVE1lPW5ldyBaVCxUQj1jbGFzcyBleHRlbmRzIFpUe3Zpc2l0SWN1KHQsZSl7bGV0IGk9T2JqZWN0LmtleXModC5jYXNlcykubWFwKHI9PmAke3J9IHske3QuY2FzZXNbcl0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LnR5cGV9LCAke2kuam9pbigiLCAiKX19YH19O2Z1bmN0aW9uIElNZShuLHQsZSxpKXtyZXR1cm4gbjwyMD9bdCZlfH50JmksMTUxODUwMDI0OV06bjw0MD9bdF5lXmksMTg1OTc3NTM5M106bjw2MD9bdCZlfHQmaXxlJmksMjQwMDk1OTcwOF06W3ReZV5pLDMzOTU0Njk3ODJdfWZ1bmN0aW9uIGdYKG4pe2xldCB0PUxWKG4pLGU9X1godCwwKSxpPV9YKHQsMTAyMDcyKTtyZXR1cm4gMD09ZSYmKDA9PWl8fDE9PWkpJiYoZV49MzE5NzkwMDYzLGlePS0xODAxNDEwMjY0KSxbZSxpXX1mdW5jdGlvbiBBRChuLHQ9IiIpe2xldCBlPWdYKG4pO2lmKHQpe2xldCBvPWdYKHQpO2U9ZnVuY3Rpb24obix0KXtsZXQgZT1uWzBdLHI9dFswXSxzPU5RKG5bMV0sdFsxXSksYT1zWzBdLGw9c1sxXTtyZXR1cm5bZWEoZWEoZSxyKSxhKSxsXX0oZnVuY3Rpb24obix0KXtsZXQgZT1uWzBdLGk9blsxXTtyZXR1cm5bZTw8MXxpPj4+MzEsaTw8MXxlPj4+MzFdfShlKSxvKX1yZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT15WC50b1RoZVBvd2VyT2YoMCkubXVsdGlwbHlCeSh0KTtyZXR1cm4geVgudG9UaGVQb3dlck9mKDQpLm11bHRpcGx5QnlBbmRBZGRUbyhuLGUpLGUudG9TdHJpbmcoKX0oMjE0NzQ4MzY0NyZlWzBdLGVbMV0pfWZ1bmN0aW9uIF9YKG4sdCl7bGV0IHIsZT0yNjU0NDM1NzY5LGk9MjY1NDQzNTc2OSxvPW4ubGVuZ3RoO2ZvcihyPTA7cisxMjw9bztyKz0xMil7ZT1lYShlLGVtKG4scixGYy5MaXR0bGUpKSxpPWVhKGksZW0obixyKzQsRmMuTGl0dGxlKSk7bGV0IHM9dlgoZSxpLHQ9ZWEodCxlbShuLHIrOCxGYy5MaXR0bGUpKSk7ZT1zWzBdLGk9c1sxXSx0PXNbMl19cmV0dXJuIGU9ZWEoZSxlbShuLHIsRmMuTGl0dGxlKSksaT1lYShpLGVtKG4scis0LEZjLkxpdHRsZSkpLHQ9ZWEodCxvKSx2WChlLGksdD1lYSh0LGVtKG4scis4LEZjLkxpdHRsZSk8PDgpKVsyXX1mdW5jdGlvbiB2WChuLHQsZSl7cmV0dXJuIG49aXMobix0KSxuPWlzKG4sZSksbl49ZT4+PjEzLHQ9aXModCxlKSx0PWlzKHQsbiksdF49bjw8OCxlPWlzKGUsbiksZT1pcyhlLHQpLGVePXQ+Pj4xMyxuPWlzKG4sdCksbj1pcyhuLGUpLG5ePWU+Pj4xMix0PWlzKHQsZSksdD1pcyh0LG4pLHRePW48PDE2LGU9aXMoZSxuKSxlPWlzKGUsdCksZV49dD4+PjUsbj1pcyhuLHQpLG49aXMobixlKSxuXj1lPj4+Myx0PWlzKHQsZSksdD1pcyh0LG4pLHRePW48PDEwLGU9aXMoZSxuKSxlPWlzKGUsdCksW24sdCxlXj10Pj4+MTVdfXZhciBGYz0oKCk9PntyZXR1cm4obj1GY3x8KEZjPXt9KSlbbi5MaXR0bGU9MF09IkxpdHRsZSIsbltuLkJpZz0xXT0iQmlnIixGYzt2YXIgbn0pKCk7ZnVuY3Rpb24gZWEobix0KXtyZXR1cm4gTlEobix0KVsxXX1mdW5jdGlvbiBOUShuLHQpe2xldCBlPSg2NTUzNSZuKSsoNjU1MzUmdCksaT0obj4+PjE2KSsodD4+PjE2KSsoZT4+PjE2KTtyZXR1cm5baT4+PjE2LGk8PDE2fDY1NTM1JmVdfWZ1bmN0aW9uIGlzKG4sdCl7bGV0IGU9KDY1NTM1Jm4pLSg2NTUzNSZ0KTtyZXR1cm4obj4+MTYpLSh0Pj4xNikrKGU+PjE2KTw8MTZ8NjU1MzUmZX1mdW5jdGlvbiBvQihuLHQpe3JldHVybiBuPDx0fG4+Pj4zMi10fWZ1bmN0aW9uIERCKG4sdCl7cmV0dXJuIHQ+PW4ubGVuZ3RoPzA6blt0XX1mdW5jdGlvbiBlbShuLHQsZSl7bGV0IGk9MDtpZihlPT09RmMuQmlnKWZvcihsZXQgcj0wO3I8NDtyKyspaSs9REIobix0K3IpPDwyNC04KnI7ZWxzZSBmb3IobGV0IHI9MDtyPDQ7cisrKWkrPURCKG4sdCtyKTw8OCpyO3JldHVybiBpfXZhciB5WD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5iYXNlPXQsdGhpcy5leHBvbmVudHM9W25ldyBLVChuaC5vbmUoKSldfXRvVGhlUG93ZXJPZih0KXtmb3IobGV0IGU9dGhpcy5leHBvbmVudHMubGVuZ3RoO2U8PXQ7ZSsrKXtsZXQgaT10aGlzLmV4cG9uZW50c1tlLTFdLm11bHRpcGx5QnkodGhpcy5iYXNlKTt0aGlzLmV4cG9uZW50c1tlXT1uZXcgS1QoaSl9cmV0dXJuIHRoaXMuZXhwb25lbnRzW3RdfX0oMjU2KSxqVD0oKCk9PntyZXR1cm4obj1qVHx8KGpUPXt9KSlbbi5Ob25lPTBdPSJOb25lIixuW24uQ29uc3Q9MV09IkNvbnN0IixqVDt2YXIgbn0pKCksSlQ9Y2xhc3N7Y29uc3RydWN0b3IodD1qVC5Ob25lKXt0aGlzLm1vZGlmaWVycz10fWhhc01vZGlmaWVyKHQpe3JldHVybiAwIT0odGhpcy5tb2RpZmllcnMmdCl9fSxCYz0oKCk9PntyZXR1cm4obj1CY3x8KEJjPXt9KSlbbi5EeW5hbWljPTBdPSJEeW5hbWljIixuW24uQm9vbD0xXT0iQm9vbCIsbltuLlN0cmluZz0yXT0iU3RyaW5nIixuW24uSW50PTNdPSJJbnQiLG5bbi5OdW1iZXI9NF09Ik51bWJlciIsbltuLkZ1bmN0aW9uPTVdPSJGdW5jdGlvbiIsbltuLkluZmVycmVkPTZdPSJJbmZlcnJlZCIsbltuLk5vbmU9N109Ik5vbmUiLEJjO3ZhciBufSkoKSxCdT1jbGFzcyBleHRlbmRzIEpUe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoZSksdGhpcy5uYW1lPXR9dmlzaXRUeXBlKHQsZSl7cmV0dXJuIHQudmlzaXRCdWlsdGluVHlwZSh0aGlzLGUpfX0sVmM9Y2xhc3MgZXh0ZW5kcyBKVHtjb25zdHJ1Y3Rvcih0LGUsaT1udWxsKXtzdXBlcihlKSx0aGlzLnZhbHVlPXQsdGhpcy50eXBlUGFyYW1zPWl9dmlzaXRUeXBlKHQsZSl7cmV0dXJuIHQudmlzaXRFeHByZXNzaW9uVHlwZSh0aGlzLGUpfX0sVl89bmV3IEJ1KEJjLkR5bmFtaWMpLFBhPW5ldyBCdShCYy5JbmZlcnJlZCksQk1lPW5ldyBCdShCYy5Cb29sKSxaQz0obmV3IEJ1KEJjLkludCksbmV3IEJ1KEJjLk51bWJlcikpLExRPW5ldyBCdShCYy5TdHJpbmcpLEpkPShuZXcgQnUoQmMuRnVuY3Rpb24pLG5ldyBCdShCYy5Ob25lKSksYW09KCgpPT57cmV0dXJuKG49YW18fChhbT17fSkpW24uTWludXM9MF09Ik1pbnVzIixuW24uUGx1cz0xXT0iUGx1cyIsYW07dmFyIG59KSgpLENuPSgoKT0+e3JldHVybihuPUNufHwoQ249e30pKVtuLkVxdWFscz0wXT0iRXF1YWxzIixuW24uTm90RXF1YWxzPTFdPSJOb3RFcXVhbHMiLG5bbi5JZGVudGljYWw9Ml09IklkZW50aWNhbCIsbltuLk5vdElkZW50aWNhbD0zXT0iTm90SWRlbnRpY2FsIixuW24uTWludXM9NF09Ik1pbnVzIixuW24uUGx1cz01XT0iUGx1cyIsbltuLkRpdmlkZT02XT0iRGl2aWRlIixuW24uTXVsdGlwbHk9N109Ik11bHRpcGx5IixuW24uTW9kdWxvPThdPSJNb2R1bG8iLG5bbi5BbmQ9OV09IkFuZCIsbltuLk9yPTEwXT0iT3IiLG5bbi5CaXR3aXNlQW5kPTExXT0iQml0d2lzZUFuZCIsbltuLkxvd2VyPTEyXT0iTG93ZXIiLG5bbi5Mb3dlckVxdWFscz0xM109Ikxvd2VyRXF1YWxzIixuW24uQmlnZ2VyPTE0XT0iQmlnZ2VyIixuW24uQmlnZ2VyRXF1YWxzPTE1XT0iQmlnZ2VyRXF1YWxzIixuW24uTnVsbGlzaENvYWxlc2NlPTE2XT0iTnVsbGlzaENvYWxlc2NlIixDbjt2YXIgbn0pKCk7ZnVuY3Rpb24gQlEobix0LGUpe2xldCBpPW4ubGVuZ3RoO2lmKGkhPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MDtyPGk7cisrKWlmKCFlKG5bcl0sdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gVWMobix0KXtyZXR1cm4gQlEobix0LChlLGkpPT5lLmlzRXF1aXZhbGVudChpKSl9dmFyIE9yPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50eXBlPXR8fG51bGwsdGhpcy5zb3VyY2VTcGFuPWV8fG51bGx9cHJvcCh0LGUpe3JldHVybiBuZXcgYl8odGhpcyx0LG51bGwsZSl9a2V5KHQsZSxpKXtyZXR1cm4gbmV3IE1DKHRoaXMsdCxlLGkpfWNhbGxGbih0LGUsaSl7cmV0dXJuIG5ldyBvaCh0aGlzLHQsbnVsbCxlLGkpfWluc3RhbnRpYXRlKHQsZSxpKXtyZXR1cm4gbmV3IGRtKHRoaXMsdCxlLGkpfWNvbmRpdGlvbmFsKHQsZT1udWxsLGkpe3JldHVybiBuZXcgYkModGhpcyx0LGUsbnVsbCxpKX1lcXVhbHModCxlKXtyZXR1cm4gbmV3IGdyKENuLkVxdWFscyx0aGlzLHQsbnVsbCxlKX1ub3RFcXVhbHModCxlKXtyZXR1cm4gbmV3IGdyKENuLk5vdEVxdWFscyx0aGlzLHQsbnVsbCxlKX1pZGVudGljYWwodCxlKXtyZXR1cm4gbmV3IGdyKENuLklkZW50aWNhbCx0aGlzLHQsbnVsbCxlKX1ub3RJZGVudGljYWwodCxlKXtyZXR1cm4gbmV3IGdyKENuLk5vdElkZW50aWNhbCx0aGlzLHQsbnVsbCxlKX1taW51cyh0LGUpe3JldHVybiBuZXcgZ3IoQ24uTWludXMsdGhpcyx0LG51bGwsZSl9cGx1cyh0LGUpe3JldHVybiBuZXcgZ3IoQ24uUGx1cyx0aGlzLHQsbnVsbCxlKX1kaXZpZGUodCxlKXtyZXR1cm4gbmV3IGdyKENuLkRpdmlkZSx0aGlzLHQsbnVsbCxlKX1tdWx0aXBseSh0LGUpe3JldHVybiBuZXcgZ3IoQ24uTXVsdGlwbHksdGhpcyx0LG51bGwsZSl9bW9kdWxvKHQsZSl7cmV0dXJuIG5ldyBncihDbi5Nb2R1bG8sdGhpcyx0LG51bGwsZSl9YW5kKHQsZSl7cmV0dXJuIG5ldyBncihDbi5BbmQsdGhpcyx0LG51bGwsZSl9Yml0d2lzZUFuZCh0LGUsaT0hMCl7cmV0dXJuIG5ldyBncihDbi5CaXR3aXNlQW5kLHRoaXMsdCxudWxsLGUsaSl9b3IodCxlKXtyZXR1cm4gbmV3IGdyKENuLk9yLHRoaXMsdCxudWxsLGUpfWxvd2VyKHQsZSl7cmV0dXJuIG5ldyBncihDbi5Mb3dlcix0aGlzLHQsbnVsbCxlKX1sb3dlckVxdWFscyh0LGUpe3JldHVybiBuZXcgZ3IoQ24uTG93ZXJFcXVhbHMsdGhpcyx0LG51bGwsZSl9YmlnZ2VyKHQsZSl7cmV0dXJuIG5ldyBncihDbi5CaWdnZXIsdGhpcyx0LG51bGwsZSl9YmlnZ2VyRXF1YWxzKHQsZSl7cmV0dXJuIG5ldyBncihDbi5CaWdnZXJFcXVhbHMsdGhpcyx0LG51bGwsZSl9aXNCbGFuayh0KXtyZXR1cm4gdGhpcy5lcXVhbHMoV1QsdCl9bnVsbGlzaENvYWxlc2NlKHQsZSl7cmV0dXJuIG5ldyBncihDbi5OdWxsaXNoQ29hbGVzY2UsdGhpcyx0LG51bGwsZSl9dG9TdG10KCl7cmV0dXJuIG5ldyBIdSh0aGlzLG51bGwpfX0sdW09Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLm5hbWU9dH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB1bSYmdGhpcy5uYW1lPT09dC5uYW1lfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFJlYWRWYXJFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgZ0ModGhpcy5uYW1lLHQsbnVsbCx0aGlzLnNvdXJjZVNwYW4pfX0sdl89Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmV4cHI9dH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFR5cGVvZkV4cHIodGhpcyxlKX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB2XyYmdC5leHByLmlzRXF1aXZhbGVudCh0aGlzLmV4cHIpfWlzQ29uc3RhbnQoKXtyZXR1cm4gdGhpcy5leHByLmlzQ29uc3RhbnQoKX19LExuPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGUsaSksdGhpcy5ub2RlPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgTG4mJnRoaXMubm9kZT09PXQubm9kZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcmFwcGVkTm9kZUV4cHIodGhpcyxlKX19LGdDPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaXx8ZS50eXBlLHIpLHRoaXMubmFtZT10LHRoaXMudmFsdWU9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBnQyYmdGhpcy5uYW1lPT09dC5uYW1lJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcml0ZVZhckV4cHIodGhpcyxlKX10b0RlY2xTdG10KHQsZSl7cmV0dXJuIG5ldyBWdSh0aGlzLm5hbWUsdGhpcy52YWx1ZSx0LGUsdGhpcy5zb3VyY2VTcGFuKX10b0NvbnN0RGVjbCgpe3JldHVybiB0aGlzLnRvRGVjbFN0bXQoUGEsbGwuRmluYWwpfX0sX0M9Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKHJ8fGkudHlwZSxvKSx0aGlzLnJlY2VpdmVyPXQsdGhpcy5pbmRleD1lLHRoaXMudmFsdWU9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBfQyYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMuaW5kZXguaXNFcXVpdmFsZW50KHQuaW5kZXgpJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcml0ZUtleUV4cHIodGhpcyxlKX19LHZDPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihyfHxpLnR5cGUsbyksdGhpcy5yZWNlaXZlcj10LHRoaXMubmFtZT1lLHRoaXMudmFsdWU9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB2QyYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMubmFtZT09PXQubmFtZSYmdGhpcy52YWx1ZS5pc0VxdWl2YWxlbnQodC52YWx1ZSl9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0V3JpdGVQcm9wRXhwcih0aGlzLGUpfX0sb2g9Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITEpe3N1cGVyKGksciksdGhpcy5mbj10LHRoaXMuYXJncz1lLHRoaXMucHVyZT1vfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG9oJiZ0aGlzLmZuLmlzRXF1aXZhbGVudCh0LmZuKSYmVWModGhpcy5hcmdzLHQuYXJncykmJnRoaXMucHVyZT09PXQucHVyZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRJbnZva2VGdW5jdGlvbkV4cHIodGhpcyxlKX19LHlDPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaSxyKSx0aGlzLnRhZz10LHRoaXMudGVtcGxhdGU9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB5QyYmdGhpcy50YWcuaXNFcXVpdmFsZW50KHQudGFnKSYmQlEodGhpcy50ZW1wbGF0ZS5lbGVtZW50cyx0LnRlbXBsYXRlLmVsZW1lbnRzLChlLGkpPT5lLnRleHQ9PT1pLnRleHQpJiZVYyh0aGlzLnRlbXBsYXRlLmV4cHJlc3Npb25zLHQudGVtcGxhdGUuZXhwcmVzc2lvbnMpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFRhZ2dlZFRlbXBsYXRlRXhwcih0aGlzLGUpfX0sZG09Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcihpLHIpLHRoaXMuY2xhc3NFeHByPXQsdGhpcy5hcmdzPWV9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgZG0mJnRoaXMuY2xhc3NFeHByLmlzRXF1aXZhbGVudCh0LmNsYXNzRXhwcikmJlVjKHRoaXMuYXJncyx0LmFyZ3MpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdEluc3RhbnRpYXRlRXhwcih0aGlzLGUpfX0sY2w9Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLnZhbHVlPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgY2wmJnRoaXMudmFsdWU9PT10LnZhbHVlfWlzQ29uc3RhbnQoKXtyZXR1cm4hMH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdExpdGVyYWxFeHByKHRoaXMsZSl9fSwkVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuZWxlbWVudHM9dCx0aGlzLmV4cHJlc3Npb25zPWV9fSxlRD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5yYXdUZXh0PWk/P2U/LnRvU3RyaW5nKCk/P0lCKEdUKHQpKX19LGxtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWV9fSxoXz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5hc3NvY2lhdGVkTWVzc2FnZT1pfX0sQUI9Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKExRLG8pLHRoaXMubWV0YUJsb2NrPXQsdGhpcy5tZXNzYWdlUGFydHM9ZSx0aGlzLnBsYWNlSG9sZGVyTmFtZXM9aSx0aGlzLmV4cHJlc3Npb25zPXJ9aXNFcXVpdmFsZW50KHQpe3JldHVybiExfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdExvY2FsaXplZFN0cmluZyh0aGlzLGUpfXNlcmlhbGl6ZUkxOG5IZWFkKCl7bGV0IHQ9dGhpcy5tZXRhQmxvY2suZGVzY3JpcHRpb258fCIiO3JldHVybiB0aGlzLm1ldGFCbG9jay5tZWFuaW5nJiYodD1gJHt0aGlzLm1ldGFCbG9jay5tZWFuaW5nfXwke3R9YCksdGhpcy5tZXRhQmxvY2suY3VzdG9tSWQmJih0PWAke3R9QEAke3RoaXMubWV0YUJsb2NrLmN1c3RvbUlkfWApLHRoaXMubWV0YUJsb2NrLmxlZ2FjeUlkcyYmdGhpcy5tZXRhQmxvY2subGVnYWN5SWRzLmZvckVhY2goZT0+e3Q9YCR7dH1cdTI0MWYke2V9YH0pLHhYKHQsdGhpcy5tZXNzYWdlUGFydHNbMF0udGV4dCx0aGlzLmdldE1lc3NhZ2VQYXJ0U291cmNlU3BhbigwKSl9Z2V0TWVzc2FnZVBhcnRTb3VyY2VTcGFuKHQpe3JldHVybiB0aGlzLm1lc3NhZ2VQYXJ0c1t0XT8uc291cmNlU3Bhbj8/dGhpcy5zb3VyY2VTcGFufWdldFBsYWNlaG9sZGVyU291cmNlU3Bhbih0KXtyZXR1cm4gdGhpcy5wbGFjZUhvbGRlck5hbWVzW3RdPy5zb3VyY2VTcGFuPz90aGlzLmV4cHJlc3Npb25zW3RdPy5zb3VyY2VTcGFuPz90aGlzLnNvdXJjZVNwYW59c2VyaWFsaXplSTE4blRlbXBsYXRlUGFydCh0KXtsZXQgZT10aGlzLnBsYWNlSG9sZGVyTmFtZXNbdC0xXSxpPXRoaXMubWVzc2FnZVBhcnRzW3RdLHI9ZS50ZXh0O3JldHVybiAwPT09ZS5hc3NvY2lhdGVkTWVzc2FnZT8ubGVnYWN5SWRzLmxlbmd0aCYmKHIrPWBAQCR7QUQoZS5hc3NvY2lhdGVkTWVzc2FnZS5tZXNzYWdlU3RyaW5nLGUuYXNzb2NpYXRlZE1lc3NhZ2UubWVhbmluZyl9YCkseFgocixpLnRleHQsdGhpcy5nZXRNZXNzYWdlUGFydFNvdXJjZVNwYW4odCkpfX0sR1Q9bj0+bi5yZXBsYWNlKC9cXC9nLCJcXFxcIiksek1lPW49Pm4ucmVwbGFjZSgvXjovLCJcXDoiKSxqTWU9bj0+bi5yZXBsYWNlKC86L2csIlxcOiIpLElCPW49Pm4ucmVwbGFjZSgvYC9nLCJcXGAiKS5yZXBsYWNlKC9cJHsvZywiJFxceyIpO2Z1bmN0aW9uIHhYKG4sdCxlKXtyZXR1cm4iIj09PW4/e2Nvb2tlZDp0LHJhdzpJQih6TWUoR1QodCkpKSxyYW5nZTplfTp7Y29va2VkOmA6JHtufToke3R9YCxyYXc6SUIoYDoke2pNZShHVChuKSl9OiR7R1QodCl9YCkscmFuZ2U6ZX19dmFyIHlfPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyKXtzdXBlcihlLHIpLHRoaXMudmFsdWU9dCx0aGlzLnR5cGVQYXJhbXM9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB5XyYmdGhpcy52YWx1ZS5uYW1lPT09dC52YWx1ZS5uYW1lJiZ0aGlzLnZhbHVlLm1vZHVsZU5hbWU9PT10LnZhbHVlLm1vZHVsZU5hbWUmJnRoaXMudmFsdWUucnVudGltZT09PXQudmFsdWUucnVudGltZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRFeHRlcm5hbEV4cHIodGhpcyxlKX19LGJDPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyLG8pe3N1cGVyKHJ8fGUudHlwZSxvKSx0aGlzLmNvbmRpdGlvbj10LHRoaXMuZmFsc2VDYXNlPWksdGhpcy50cnVlQ2FzZT1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGJDJiZ0aGlzLmNvbmRpdGlvbi5pc0VxdWl2YWxlbnQodC5jb25kaXRpb24pJiZ0aGlzLnRydWVDYXNlLmlzRXF1aXZhbGVudCh0LnRydWVDYXNlKSYmZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bnx8bnVsbD09dD9uPT10Om4uaXNFcXVpdmFsZW50KHQpfSh0aGlzLmZhbHNlQ2FzZSx0LmZhbHNlQ2FzZSl9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0Q29uZGl0aW9uYWxFeHByKHRoaXMsZSl9fSx4Qz1jbGFzcyBleHRlbmRzIE9ye2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoQk1lLGUpLHRoaXMuY29uZGl0aW9uPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgeEMmJnRoaXMuY29uZGl0aW9uLmlzRXF1aXZhbGVudCh0LmNvbmRpdGlvbil9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0Tm90RXhwcih0aGlzLGUpfX0saWE9Y2xhc3N7Y29uc3RydWN0b3IodCxlPW51bGwpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdGhpcy5uYW1lPT09dC5uYW1lfX0scG09Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKGksciksdGhpcy5wYXJhbXM9dCx0aGlzLnN0YXRlbWVudHM9ZSx0aGlzLm5hbWU9b31pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBwbSYmVWModGhpcy5wYXJhbXMsdC5wYXJhbXMpJiZVYyh0aGlzLnN0YXRlbWVudHMsdC5zdGF0ZW1lbnRzKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRGdW5jdGlvbkV4cHIodGhpcyxlKX10b0RlY2xTdG10KHQsZSl7cmV0dXJuIG5ldyB3Qyh0LHRoaXMucGFyYW1zLHRoaXMuc3RhdGVtZW50cyx0aGlzLnR5cGUsZSx0aGlzLnNvdXJjZVNwYW4pfX0sQ0M9Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITApe3N1cGVyKGl8fFpDLHIpLHRoaXMub3BlcmF0b3I9dCx0aGlzLmV4cHI9ZSx0aGlzLnBhcmVucz1vfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIENDJiZ0aGlzLm9wZXJhdG9yPT09dC5vcGVyYXRvciYmdGhpcy5leHByLmlzRXF1aXZhbGVudCh0LmV4cHIpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFVuYXJ5T3BlcmF0b3JFeHByKHRoaXMsZSl9fSxncj1jbGFzcyBleHRlbmRzIE9ye2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzPSEwKXtzdXBlcihyfHxlLnR5cGUsbyksdGhpcy5vcGVyYXRvcj10LHRoaXMucmhzPWksdGhpcy5wYXJlbnM9cyx0aGlzLmxocz1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGdyJiZ0aGlzLm9wZXJhdG9yPT09dC5vcGVyYXRvciYmdGhpcy5saHMuaXNFcXVpdmFsZW50KHQubGhzKSYmdGhpcy5yaHMuaXNFcXVpdmFsZW50KHQucmhzKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRCaW5hcnlPcGVyYXRvckV4cHIodGhpcyxlKX19LGJfPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaSxyKSx0aGlzLnJlY2VpdmVyPXQsdGhpcy5uYW1lPWV9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgYl8mJnRoaXMucmVjZWl2ZXIuaXNFcXVpdmFsZW50KHQucmVjZWl2ZXIpJiZ0aGlzLm5hbWU9PT10Lm5hbWV9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0UmVhZFByb3BFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgdkModGhpcy5yZWNlaXZlcix0aGlzLm5hbWUsdCxudWxsLHRoaXMuc291cmNlU3Bhbil9fSxNQz1jbGFzcyBleHRlbmRzIE9ye2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKGksciksdGhpcy5yZWNlaXZlcj10LHRoaXMuaW5kZXg9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBNQyYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMuaW5kZXguaXNFcXVpdmFsZW50KHQuaW5kZXgpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFJlYWRLZXlFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgX0ModGhpcy5yZWNlaXZlcix0aGlzLmluZGV4LHQsbnVsbCx0aGlzLnNvdXJjZVNwYW4pfX0saG09Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmVudHJpZXM9dH1pc0NvbnN0YW50KCl7cmV0dXJuIHRoaXMuZW50cmllcy5ldmVyeSh0PT50LmlzQ29uc3RhbnQoKSl9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgaG0mJlVjKHRoaXMuZW50cmllcyx0LmVudHJpZXMpfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0TGl0ZXJhbEFycmF5RXhwcih0aGlzLGUpfX0sdEQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMua2V5PXQsdGhpcy52YWx1ZT1lLHRoaXMucXVvdGVkPWl9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0aGlzLmtleT09PXQua2V5JiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX19LHhfPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGUsaSksdGhpcy5lbnRyaWVzPXQsdGhpcy52YWx1ZVR5cGU9bnVsbCxlJiYodGhpcy52YWx1ZVR5cGU9ZS52YWx1ZVR5cGUpfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHhfJiZVYyh0aGlzLmVudHJpZXMsdC5lbnRyaWVzKX1pc0NvbnN0YW50KCl7cmV0dXJuIHRoaXMuZW50cmllcy5ldmVyeSh0PT50LnZhbHVlLmlzQ29uc3RhbnQoKSl9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRMaXRlcmFsTWFwRXhwcih0aGlzLGUpfX0sUEI9bmV3IGNsKG51bGwsbnVsbCxudWxsKSxXVD1uZXcgY2wobnVsbCxQYSxudWxsKSxsbD0oKCk9PntyZXR1cm4obj1sbHx8KGxsPXt9KSlbbi5Ob25lPTBdPSJOb25lIixuW24uRmluYWw9MV09IkZpbmFsIixuW24uUHJpdmF0ZT0yXT0iUHJpdmF0ZSIsbltuLkV4cG9ydGVkPTRdPSJFeHBvcnRlZCIsbltuLlN0YXRpYz04XT0iU3RhdGljIixsbDt2YXIgbn0pKCksUkI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudGV4dD10LHRoaXMubXVsdGlsaW5lPWUsdGhpcy50cmFpbGluZ05ld2xpbmU9aX10b1N0cmluZygpe3JldHVybiB0aGlzLm11bHRpbGluZT9gICR7dGhpcy50ZXh0fSBgOnRoaXMudGV4dH19LG5EPWNsYXNzIGV4dGVuZHMgUkJ7Y29uc3RydWN0b3IodCl7c3VwZXIoIiIsITAsITApLHRoaXMudGFncz10fXRvU3RyaW5nKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4iIjtpZigxPT09bi5sZW5ndGgmJm5bMF0udGFnTmFtZSYmIW5bMF0udGV4dClyZXR1cm5gKiR7TVgoblswXSl9IGA7bGV0IHQ9IipcbiI7Zm9yKGxldCBlIG9mIG4pdCs9IiAqIix0Kz1NWChlKS5yZXBsYWNlKC9cbi9nLCJcbiAqICIpLHQrPSJcbiI7cmV0dXJuIHQrPSIgIix0fSh0aGlzLnRhZ3MpfX0sZm09Y2xhc3N7Y29uc3RydWN0b3IodD1sbC5Ob25lLGU9bnVsbCxpKXt0aGlzLm1vZGlmaWVycz10LHRoaXMuc291cmNlU3Bhbj1lLHRoaXMubGVhZGluZ0NvbW1lbnRzPWl9aGFzTW9kaWZpZXIodCl7cmV0dXJuIDAhPSh0aGlzLm1vZGlmaWVycyZ0KX1hZGRMZWFkaW5nQ29tbWVudCh0KXt0aGlzLmxlYWRpbmdDb21tZW50cz10aGlzLmxlYWRpbmdDb21tZW50cz8/W10sdGhpcy5sZWFkaW5nQ29tbWVudHMucHVzaCh0KX19LFZ1PWNsYXNzIGV4dGVuZHMgZm17Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHIsbyxzKSx0aGlzLm5hbWU9dCx0aGlzLnZhbHVlPWUsdGhpcy50eXBlPWl8fGUmJmUudHlwZXx8bnVsbH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBWdSYmdGhpcy5uYW1lPT09dC5uYW1lJiYodGhpcy52YWx1ZT8hIXQudmFsdWUmJnRoaXMudmFsdWUuaXNFcXVpdmFsZW50KHQudmFsdWUpOiF0LnZhbHVlKX12aXNpdFN0YXRlbWVudCh0LGUpe3JldHVybiB0LnZpc2l0RGVjbGFyZVZhclN0bXQodGhpcyxlKX19LHdDPWNsYXNzIGV4dGVuZHMgZm17Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSl7c3VwZXIobyxzLGEpLHRoaXMubmFtZT10LHRoaXMucGFyYW1zPWUsdGhpcy5zdGF0ZW1lbnRzPWksdGhpcy50eXBlPXJ8fG51bGx9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2Ygd0MmJlVjKHRoaXMucGFyYW1zLHQucGFyYW1zKSYmVWModGhpcy5zdGF0ZW1lbnRzLHQuc3RhdGVtZW50cyl9dmlzaXRTdGF0ZW1lbnQodCxlKXtyZXR1cm4gdC52aXNpdERlY2xhcmVGdW5jdGlvblN0bXQodGhpcyxlKX19LEh1PWNsYXNzIGV4dGVuZHMgZm17Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGxsLk5vbmUsZSxpKSx0aGlzLmV4cHI9dH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBIdSYmdGhpcy5leHByLmlzRXF1aXZhbGVudCh0LmV4cHIpfXZpc2l0U3RhdGVtZW50KHQsZSl7cmV0dXJuIHQudmlzaXRFeHByZXNzaW9uU3RtdCh0aGlzLGUpfX0sRG89Y2xhc3MgZXh0ZW5kcyBmbXtjb25zdHJ1Y3Rvcih0LGU9bnVsbCxpKXtzdXBlcihsbC5Ob25lLGUsaSksdGhpcy52YWx1ZT10fWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERvJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX12aXNpdFN0YXRlbWVudCh0LGUpe3JldHVybiB0LnZpc2l0UmV0dXJuU3RtdCh0aGlzLGUpfX0sU0M9Y2xhc3MgZXh0ZW5kcyBmbXtjb25zdHJ1Y3Rvcih0LGUsaT1bXSxyLG8pe3N1cGVyKGxsLk5vbmUscixvKSx0aGlzLmNvbmRpdGlvbj10LHRoaXMudHJ1ZUNhc2U9ZSx0aGlzLmZhbHNlQ2FzZT1pfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFNDJiZ0aGlzLmNvbmRpdGlvbi5pc0VxdWl2YWxlbnQodC5jb25kaXRpb24pJiZVYyh0aGlzLnRydWVDYXNlLHQudHJ1ZUNhc2UpJiZVYyh0aGlzLmZhbHNlQ2FzZSx0LmZhbHNlQ2FzZSl9dmlzaXRTdGF0ZW1lbnQodCxlKXtyZXR1cm4gdC52aXNpdElmU3RtdCh0aGlzLGUpfX07ZnVuY3Rpb24gUmkobix0LGUpe3JldHVybiBuZXcgdW0obix0LGUpfWZ1bmN0aW9uIFRuKG4sdD1udWxsLGUpe3JldHVybiBuZXcgeV8obixudWxsLHQsZSl9ZnVuY3Rpb24gdWwobix0LGUpe3JldHVybiBuZXcgVmMobix0LGUpfWZ1bmN0aW9uIEJWKG4pe3JldHVybiBuZXcgdl8obil9ZnVuY3Rpb24gX3Iobix0LGUpe3JldHVybiBuZXcgaG0obix0LGUpfWZ1bmN0aW9uIHFsKG4sdD1udWxsKXtyZXR1cm4gbmV3IHhfKG4ubWFwKGU9Pm5ldyB0RChlLmtleSxlLnZhbHVlLGUucXVvdGVkKSksdCxudWxsKX1mdW5jdGlvbiByYShuLHQsZSxpLHIpe3JldHVybiBuZXcgcG0obix0LGUsaSxyKX1mdW5jdGlvbiBWVihuLHQsZSxpLHIpe3JldHVybiBuZXcgU0Mobix0LGUsaSxyKX1mdW5jdGlvbiBDWChuLHQsZSxpKXtyZXR1cm4gbmV3IHlDKG4sdCxlLGkpfWZ1bmN0aW9uIGh0KG4sdCxlKXtyZXR1cm4gbmV3IGNsKG4sdCxlKX1mdW5jdGlvbiBWUShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGNsJiZudWxsPT09bi52YWx1ZX1mdW5jdGlvbiBNWChuKXtsZXQgdD0iIjtpZihuLnRhZ05hbWUmJih0Kz1gIEAke24udGFnTmFtZX1gKSxuLnRleHQpe2lmKG4udGV4dC5tYXRjaCgvXC9cKnxcKlwvLykpdGhyb3cgbmV3IEVycm9yKCdKU0RvYyB0ZXh0IGNhbm5vdCBjb250YWluICIvKiIgYW5kICIqLyInKTt0Kz0iICIrbi50ZXh0LnJlcGxhY2UoL0AvZywiXFxAIil9cmV0dXJuIHR9dmFyIHdYPVJpKCI8dW5rbm93bj4iKSxIUT17fSxDXz1jbGFzcyBleHRlbmRzIE9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQudHlwZSksdGhpcy5yZXNvbHZlZD10LHRoaXMub3JpZ2luYWw9dH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gZT09PUhRP3RoaXMub3JpZ2luYWwudmlzaXRFeHByZXNzaW9uKHQsZSk6dGhpcy5yZXNvbHZlZC52aXNpdEV4cHJlc3Npb24odCxlKX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBDXyYmdGhpcy5yZXNvbHZlZC5pc0VxdWl2YWxlbnQodC5yZXNvbHZlZCl9aXNDb25zdGFudCgpe3JldHVybiEwfWZpeHVwKHQpe3RoaXMucmVzb2x2ZWQ9dCx0aGlzLnNoYXJlZD0hMH19LGlEPWNsYXNze2NvbnN0cnVjdG9yKHQ9ITEpe3RoaXMuaXNDbG9zdXJlQ29tcGlsZXJFbmFibGVkPXQsdGhpcy5zdGF0ZW1lbnRzPVtdLHRoaXMubGl0ZXJhbHM9bmV3IE1hcCx0aGlzLmxpdGVyYWxGYWN0b3JpZXM9bmV3IE1hcCx0aGlzLm5leHROYW1lSW5kZXg9MH1nZXRDb25zdExpdGVyYWwodCxlKXtpZih0IGluc3RhbmNlb2YgY2wmJiFTWCh0KXx8dCBpbnN0YW5jZW9mIENfKXJldHVybiB0O2xldCBpPXRoaXMua2V5T2YodCkscj10aGlzLmxpdGVyYWxzLmdldChpKSxvPSExO2lmKHJ8fChyPW5ldyBDXyh0KSx0aGlzLmxpdGVyYWxzLnNldChpLHIpLG89ITApLCFvJiYhci5zaGFyZWR8fG8mJmUpe2xldCBhLGwscz10aGlzLmZyZXNoTmFtZSgpO3RoaXMuaXNDbG9zdXJlQ29tcGlsZXJFbmFibGVkJiZTWCh0KT8oYT1SaShzKS5zZXQobmV3IHBtKFtdLFtuZXcgRG8odCldKSksbD1SaShzKS5jYWxsRm4oW10pKTooYT1SaShzKS5zZXQodCksbD1SaShzKSksdGhpcy5zdGF0ZW1lbnRzLnB1c2goYS50b0RlY2xTdG10KFBhLGxsLkZpbmFsKSksci5maXh1cChsKX1yZXR1cm4gcn1nZXRMaXRlcmFsRmFjdG9yeSh0KXtpZih0IGluc3RhbmNlb2YgaG0pe2xldCBlPXQuZW50cmllcy5tYXAocj0+ci5pc0NvbnN0YW50KCk/cjp3WCksaT10aGlzLmtleU9mKF9yKGUpKTtyZXR1cm4gdGhpcy5fZ2V0TGl0ZXJhbEZhY3RvcnkoaSx0LmVudHJpZXMscj0+X3IocikpfXtsZXQgZT1xbCh0LmVudHJpZXMubWFwKHI9Pih7a2V5OnIua2V5LHZhbHVlOnIudmFsdWUuaXNDb25zdGFudCgpP3IudmFsdWU6d1gscXVvdGVkOnIucXVvdGVkfSkpKSxpPXRoaXMua2V5T2YoZSk7cmV0dXJuIHRoaXMuX2dldExpdGVyYWxGYWN0b3J5KGksdC5lbnRyaWVzLm1hcChyPT5yLnZhbHVlKSxyPT5xbChyLm1hcCgobyxzKT0+KHtrZXk6dC5lbnRyaWVzW3NdLmtleSx2YWx1ZTpvLHF1b3RlZDp0LmVudHJpZXNbc10ucXVvdGVkfSkpKSl9fV9nZXRMaXRlcmFsRmFjdG9yeSh0LGUsaSl7bGV0IHI9dGhpcy5saXRlcmFsRmFjdG9yaWVzLmdldCh0KSxvPWUuZmlsdGVyKHM9PiFzLmlzQ29uc3RhbnQoKSk7aWYoIXIpe2xldCBzPWUubWFwKCh1LGQpPT51LmlzQ29uc3RhbnQoKT90aGlzLmdldENvbnN0TGl0ZXJhbCh1LCEwKTpSaShgYSR7ZH1gKSksbD1yYShzLmZpbHRlcihLTWUpLm1hcCh1PT5uZXcgaWEodS5uYW1lLFZfKSksW25ldyBEbyhpKHMpKV0sUGEpLGM9dGhpcy5mcmVzaE5hbWUoKTt0aGlzLnN0YXRlbWVudHMucHVzaChSaShjKS5zZXQobCkudG9EZWNsU3RtdChQYSxsbC5GaW5hbCkpLHI9UmkoYyksdGhpcy5saXRlcmFsRmFjdG9yaWVzLnNldCh0LHIpfXJldHVybntsaXRlcmFsRmFjdG9yeTpyLGxpdGVyYWxGYWN0b3J5QXJndW1lbnRzOm99fXVuaXF1ZU5hbWUodCl7cmV0dXJuYCR7dH0ke3RoaXMubmV4dE5hbWVJbmRleCsrfWB9ZnJlc2hOYW1lKCl7cmV0dXJuIHRoaXMudW5pcXVlTmFtZSgiX2MiKX1rZXlPZih0KXtyZXR1cm4gdC52aXNpdEV4cHJlc3Npb24obmV3IE9CLEhRKX19LE9CPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52aXNpdFdyYXBwZWROb2RlRXhwcj1ycyx0aGlzLnZpc2l0V3JpdGVWYXJFeHByPXJzLHRoaXMudmlzaXRXcml0ZUtleUV4cHI9cnMsdGhpcy52aXNpdFdyaXRlUHJvcEV4cHI9cnMsdGhpcy52aXNpdEludm9rZUZ1bmN0aW9uRXhwcj1ycyx0aGlzLnZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByPXJzLHRoaXMudmlzaXRJbnN0YW50aWF0ZUV4cHI9cnMsdGhpcy52aXNpdENvbmRpdGlvbmFsRXhwcj1ycyx0aGlzLnZpc2l0Tm90RXhwcj1ycyx0aGlzLnZpc2l0QXNzZXJ0Tm90TnVsbEV4cHI9cnMsdGhpcy52aXNpdENhc3RFeHByPXJzLHRoaXMudmlzaXRGdW5jdGlvbkV4cHI9cnMsdGhpcy52aXNpdFVuYXJ5T3BlcmF0b3JFeHByPXJzLHRoaXMudmlzaXRCaW5hcnlPcGVyYXRvckV4cHI9cnMsdGhpcy52aXNpdFJlYWRQcm9wRXhwcj1ycyx0aGlzLnZpc2l0UmVhZEtleUV4cHI9cnMsdGhpcy52aXNpdENvbW1hRXhwcj1ycyx0aGlzLnZpc2l0TG9jYWxpemVkU3RyaW5nPXJzfXZpc2l0TGl0ZXJhbEV4cHIodCl7cmV0dXJuYCR7InN0cmluZyI9PXR5cGVvZiB0LnZhbHVlPyciJyt0LnZhbHVlKyciJzp0LnZhbHVlfWB9dmlzaXRMaXRlcmFsQXJyYXlFeHByKHQsZSl7cmV0dXJuYFske3QuZW50cmllcy5tYXAoaT0+aS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSkuam9pbigiLCIpfV1gfXZpc2l0TGl0ZXJhbE1hcEV4cHIodCxlKXtyZXR1cm5geyR7dC5lbnRyaWVzLm1hcChvPT5gJHsobz0+e2xldCBzPW8ucXVvdGVkPyciJzoiIjtyZXR1cm5gJHtzfSR7by5rZXl9JHtzfWB9KShvKX06JHtvLnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpfWApLmpvaW4oIiwiKX1gfXZpc2l0RXh0ZXJuYWxFeHByKHQpe3JldHVybiB0LnZhbHVlLm1vZHVsZU5hbWU/YEVYOiR7dC52YWx1ZS5tb2R1bGVOYW1lfToke3QudmFsdWUubmFtZX1gOmBFWDoke3QudmFsdWUucnVudGltZS5uYW1lfWB9dmlzaXRSZWFkVmFyRXhwcih0KXtyZXR1cm5gVkFSOiR7dC5uYW1lfWB9dmlzaXRUeXBlb2ZFeHByKHQsZSl7cmV0dXJuYFRZUEVPRjoke3QuZXhwci52aXNpdEV4cHJlc3Npb24odGhpcyxlKX1gfX07ZnVuY3Rpb24gcnMobil7dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0YXRlOiBWaXNpdG9yICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBkb2Vzbid0IGhhbmRsZSAke24uY29uc3RydWN0b3IubmFtZX1gKX1mdW5jdGlvbiBLTWUobil7cmV0dXJuIG4gaW5zdGFuY2VvZiB1bX1mdW5jdGlvbiBTWChuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGNsJiYic3RyaW5nIj09dHlwZW9mIG4udmFsdWUmJm4udmFsdWUubGVuZ3RoPj01MH12YXIgeGU9IkBhbmd1bGFyL2NvcmUiLHRlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLk5FV19NRVRIT0Q9ImZhY3RvcnkiLG4uVFJBTlNGT1JNX01FVEhPRD0idHJhbnNmb3JtIixuLlBBVENIX0RFUFM9InBhdGNoZWREZXBzIixuLmNvcmU9e25hbWU6bnVsbCxtb2R1bGVOYW1lOnhlfSxuLm5hbWVzcGFjZUhUTUw9e25hbWU6Ilx1MDI3NVx1MDI3NW5hbWVzcGFjZUhUTUwiLG1vZHVsZU5hbWU6eGV9LG4ubmFtZXNwYWNlTWF0aE1MPXtuYW1lOiJcdTAyNzVcdTAyNzVuYW1lc3BhY2VNYXRoTUwiLG1vZHVsZU5hbWU6eGV9LG4ubmFtZXNwYWNlU1ZHPXtuYW1lOiJcdTAyNzVcdTAyNzVuYW1lc3BhY2VTVkciLG1vZHVsZU5hbWU6eGV9LG4uZWxlbWVudD17bmFtZToiXHUwMjc1XHUwMjc1ZWxlbWVudCIsbW9kdWxlTmFtZTp4ZX0sbi5lbGVtZW50U3RhcnQ9e25hbWU6Ilx1MDI3NVx1MDI3NWVsZW1lbnRTdGFydCIsbW9kdWxlTmFtZTp4ZX0sbi5lbGVtZW50RW5kPXtuYW1lOiJcdTAyNzVcdTAyNzVlbGVtZW50RW5kIixtb2R1bGVOYW1lOnhlfSxuLmFkdmFuY2U9e25hbWU6Ilx1MDI3NVx1MDI3NWFkdmFuY2UiLG1vZHVsZU5hbWU6eGV9LG4uc3ludGhldGljSG9zdFByb3BlcnR5PXtuYW1lOiJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0UHJvcGVydHkiLG1vZHVsZU5hbWU6eGV9LG4uc3ludGhldGljSG9zdExpc3RlbmVyPXtuYW1lOiJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0TGlzdGVuZXIiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlPXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGUiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGUxPXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTEiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGUyPXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTIiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGUzPXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTMiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGU0PXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTQiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGU1PXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTUiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGU2PXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTYiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGU3PXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTciLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGU4PXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTgiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGVWPXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZVYiLG1vZHVsZU5hbWU6eGV9LG4uY2xhc3NQcm9wPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc1Byb3AiLG1vZHVsZU5hbWU6eGV9LG4uZWxlbWVudENvbnRhaW5lclN0YXJ0PXtuYW1lOiJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyU3RhcnQiLG1vZHVsZU5hbWU6eGV9LG4uZWxlbWVudENvbnRhaW5lckVuZD17bmFtZToiXHUwMjc1XHUwMjc1ZWxlbWVudENvbnRhaW5lckVuZCIsbW9kdWxlTmFtZTp4ZX0sbi5lbGVtZW50Q29udGFpbmVyPXtuYW1lOiJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyIixtb2R1bGVOYW1lOnhlfSxuLnN0eWxlTWFwPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcCIsbW9kdWxlTmFtZTp4ZX0sbi5zdHlsZU1hcEludGVycG9sYXRlMT17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTEiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGUyIixtb2R1bGVOYW1lOnhlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGUzPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMyIsbW9kdWxlTmFtZTp4ZX0sbi5zdHlsZU1hcEludGVycG9sYXRlND17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTQiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU1Iixtb2R1bGVOYW1lOnhlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGU2PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNiIsbW9kdWxlTmFtZTp4ZX0sbi5zdHlsZU1hcEludGVycG9sYXRlNz17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTciLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU4Iixtb2R1bGVOYW1lOnhlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGVWPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlViIsbW9kdWxlTmFtZTp4ZX0sbi5jbGFzc01hcD17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXAiLG1vZHVsZU5hbWU6eGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTE9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGUxIixtb2R1bGVOYW1lOnhlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGUyPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlMiIsbW9kdWxlTmFtZTp4ZX0sbi5jbGFzc01hcEludGVycG9sYXRlMz17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTMiLG1vZHVsZU5hbWU6eGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTQ9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU0Iixtb2R1bGVOYW1lOnhlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGU1PXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNSIsbW9kdWxlTmFtZTp4ZX0sbi5jbGFzc01hcEludGVycG9sYXRlNj17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTYiLG1vZHVsZU5hbWU6eGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTc9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU3Iixtb2R1bGVOYW1lOnhlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGU4PXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlOCIsbW9kdWxlTmFtZTp4ZX0sbi5jbGFzc01hcEludGVycG9sYXRlVj17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZVYiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3AiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGUxPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTEiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGUyPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTIiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGUzPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTMiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGU0PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTQiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGU1PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTUiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGU2PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTYiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGU3PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTciLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGU4PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTgiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGVWPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZVYiLG1vZHVsZU5hbWU6eGV9LG4ubmV4dENvbnRleHQ9e25hbWU6Ilx1MDI3NVx1MDI3NW5leHRDb250ZXh0Iixtb2R1bGVOYW1lOnhlfSxuLnJlc2V0Vmlldz17bmFtZToiXHUwMjc1XHUwMjc1cmVzZXRWaWV3Iixtb2R1bGVOYW1lOnhlfSxuLnRlbXBsYXRlQ3JlYXRlPXtuYW1lOiJcdTAyNzVcdTAyNzV0ZW1wbGF0ZSIsbW9kdWxlTmFtZTp4ZX0sbi50ZXh0PXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0Iixtb2R1bGVOYW1lOnhlfSxuLmVuYWJsZUJpbmRpbmdzPXtuYW1lOiJcdTAyNzVcdTAyNzVlbmFibGVCaW5kaW5ncyIsbW9kdWxlTmFtZTp4ZX0sbi5kaXNhYmxlQmluZGluZ3M9e25hbWU6Ilx1MDI3NVx1MDI3NWRpc2FibGVCaW5kaW5ncyIsbW9kdWxlTmFtZTp4ZX0sbi5nZXRDdXJyZW50Vmlldz17bmFtZToiXHUwMjc1XHUwMjc1Z2V0Q3VycmVudFZpZXciLG1vZHVsZU5hbWU6eGV9LG4udGV4dEludGVycG9sYXRlPXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUiLG1vZHVsZU5hbWU6eGV9LG4udGV4dEludGVycG9sYXRlMT17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMSIsbW9kdWxlTmFtZTp4ZX0sbi50ZXh0SW50ZXJwb2xhdGUyPXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUyIixtb2R1bGVOYW1lOnhlfSxuLnRleHRJbnRlcnBvbGF0ZTM9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTMiLG1vZHVsZU5hbWU6eGV9LG4udGV4dEludGVycG9sYXRlND17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNCIsbW9kdWxlTmFtZTp4ZX0sbi50ZXh0SW50ZXJwb2xhdGU1PXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU1Iixtb2R1bGVOYW1lOnhlfSxuLnRleHRJbnRlcnBvbGF0ZTY9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTYiLG1vZHVsZU5hbWU6eGV9LG4udGV4dEludGVycG9sYXRlNz17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNyIsbW9kdWxlTmFtZTp4ZX0sbi50ZXh0SW50ZXJwb2xhdGU4PXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU4Iixtb2R1bGVOYW1lOnhlfSxuLnRleHRJbnRlcnBvbGF0ZVY9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZVYiLG1vZHVsZU5hbWU6eGV9LG4ucmVzdG9yZVZpZXc9e25hbWU6Ilx1MDI3NVx1MDI3NXJlc3RvcmVWaWV3Iixtb2R1bGVOYW1lOnhlfSxuLnB1cmVGdW5jdGlvbjA9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjAiLG1vZHVsZU5hbWU6eGV9LG4ucHVyZUZ1bmN0aW9uMT17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMSIsbW9kdWxlTmFtZTp4ZX0sbi5wdXJlRnVuY3Rpb24yPXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24yIixtb2R1bGVOYW1lOnhlfSxuLnB1cmVGdW5jdGlvbjM9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjMiLG1vZHVsZU5hbWU6eGV9LG4ucHVyZUZ1bmN0aW9uND17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNCIsbW9kdWxlTmFtZTp4ZX0sbi5wdXJlRnVuY3Rpb241PXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb241Iixtb2R1bGVOYW1lOnhlfSxuLnB1cmVGdW5jdGlvbjY9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjYiLG1vZHVsZU5hbWU6eGV9LG4ucHVyZUZ1bmN0aW9uNz17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNyIsbW9kdWxlTmFtZTp4ZX0sbi5wdXJlRnVuY3Rpb244PXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb244Iixtb2R1bGVOYW1lOnhlfSxuLnB1cmVGdW5jdGlvblY9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvblYiLG1vZHVsZU5hbWU6eGV9LG4ucGlwZUJpbmQxPXtuYW1lOiJcdTAyNzVcdTAyNzVwaXBlQmluZDEiLG1vZHVsZU5hbWU6eGV9LG4ucGlwZUJpbmQyPXtuYW1lOiJcdTAyNzVcdTAyNzVwaXBlQmluZDIiLG1vZHVsZU5hbWU6eGV9LG4ucGlwZUJpbmQzPXtuYW1lOiJcdTAyNzVcdTAyNzVwaXBlQmluZDMiLG1vZHVsZU5hbWU6eGV9LG4ucGlwZUJpbmQ0PXtuYW1lOiJcdTAyNzVcdTAyNzVwaXBlQmluZDQiLG1vZHVsZU5hbWU6eGV9LG4ucGlwZUJpbmRWPXtuYW1lOiJcdTAyNzVcdTAyNzVwaXBlQmluZFYiLG1vZHVsZU5hbWU6eGV9LG4uaG9zdFByb3BlcnR5PXtuYW1lOiJcdTAyNzVcdTAyNzVob3N0UHJvcGVydHkiLG1vZHVsZU5hbWU6eGV9LG4ucHJvcGVydHk9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5Iixtb2R1bGVOYW1lOnhlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGU9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUiLG1vZHVsZU5hbWU6eGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTE9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUxIixtb2R1bGVOYW1lOnhlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGUyPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMiIsbW9kdWxlTmFtZTp4ZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlMz17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTMiLG1vZHVsZU5hbWU6eGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTQ9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU0Iixtb2R1bGVOYW1lOnhlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGU1PXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNSIsbW9kdWxlTmFtZTp4ZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlNj17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTYiLG1vZHVsZU5hbWU6eGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTc9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU3Iixtb2R1bGVOYW1lOnhlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGU4PXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlOCIsbW9kdWxlTmFtZTp4ZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlVj17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZVYiLG1vZHVsZU5hbWU6eGV9LG4uaTE4bj17bmFtZToiXHUwMjc1XHUwMjc1aTE4biIsbW9kdWxlTmFtZTp4ZX0sbi5pMThuQXR0cmlidXRlcz17bmFtZToiXHUwMjc1XHUwMjc1aTE4bkF0dHJpYnV0ZXMiLG1vZHVsZU5hbWU6eGV9LG4uaTE4bkV4cD17bmFtZToiXHUwMjc1XHUwMjc1aTE4bkV4cCIsbW9kdWxlTmFtZTp4ZX0sbi5pMThuU3RhcnQ9e25hbWU6Ilx1MDI3NVx1MDI3NWkxOG5TdGFydCIsbW9kdWxlTmFtZTp4ZX0sbi5pMThuRW5kPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuRW5kIixtb2R1bGVOYW1lOnhlfSxuLmkxOG5BcHBseT17bmFtZToiXHUwMjc1XHUwMjc1aTE4bkFwcGx5Iixtb2R1bGVOYW1lOnhlfSxuLmkxOG5Qb3N0cHJvY2Vzcz17bmFtZToiXHUwMjc1XHUwMjc1aTE4blBvc3Rwcm9jZXNzIixtb2R1bGVOYW1lOnhlfSxuLnBpcGU9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGUiLG1vZHVsZU5hbWU6eGV9LG4ucHJvamVjdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1cHJvamVjdGlvbiIsbW9kdWxlTmFtZTp4ZX0sbi5wcm9qZWN0aW9uRGVmPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9qZWN0aW9uRGVmIixtb2R1bGVOYW1lOnhlfSxuLnJlZmVyZW5jZT17bmFtZToiXHUwMjc1XHUwMjc1cmVmZXJlbmNlIixtb2R1bGVOYW1lOnhlfSxuLmluamVjdD17bmFtZToiXHUwMjc1XHUwMjc1aW5qZWN0Iixtb2R1bGVOYW1lOnhlfSxuLmluamVjdEF0dHJpYnV0ZT17bmFtZToiXHUwMjc1XHUwMjc1aW5qZWN0QXR0cmlidXRlIixtb2R1bGVOYW1lOnhlfSxuLmRpcmVjdGl2ZUluamVjdD17bmFtZToiXHUwMjc1XHUwMjc1ZGlyZWN0aXZlSW5qZWN0Iixtb2R1bGVOYW1lOnhlfSxuLmludmFsaWRGYWN0b3J5PXtuYW1lOiJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeSIsbW9kdWxlTmFtZTp4ZX0sbi5pbnZhbGlkRmFjdG9yeURlcD17bmFtZToiXHUwMjc1XHUwMjc1aW52YWxpZEZhY3RvcnlEZXAiLG1vZHVsZU5hbWU6eGV9LG4udGVtcGxhdGVSZWZFeHRyYWN0b3I9e25hbWU6Ilx1MDI3NVx1MDI3NXRlbXBsYXRlUmVmRXh0cmFjdG9yIixtb2R1bGVOYW1lOnhlfSxuLmZvcndhcmRSZWY9e25hbWU6ImZvcndhcmRSZWYiLG1vZHVsZU5hbWU6eGV9LG4ucmVzb2x2ZUZvcndhcmRSZWY9e25hbWU6InJlc29sdmVGb3J3YXJkUmVmIixtb2R1bGVOYW1lOnhlfSxuLlx1MDI3NVx1MDI3NWRlZmluZUluamVjdGFibGU9e25hbWU6Ilx1MDI3NVx1MDI3NWRlZmluZUluamVjdGFibGUiLG1vZHVsZU5hbWU6eGV9LG4uZGVjbGFyZUluamVjdGFibGU9e25hbWU6Ilx1MDI3NVx1MDI3NW5nRGVjbGFyZUluamVjdGFibGUiLG1vZHVsZU5hbWU6eGV9LG4uSW5qZWN0YWJsZURlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVJbmplY3RhYmxlRGVjbGFyYXRpb24iLG1vZHVsZU5hbWU6eGV9LG4ucmVzb2x2ZVdpbmRvdz17bmFtZToiXHUwMjc1XHUwMjc1cmVzb2x2ZVdpbmRvdyIsbW9kdWxlTmFtZTp4ZX0sbi5yZXNvbHZlRG9jdW1lbnQ9e25hbWU6Ilx1MDI3NVx1MDI3NXJlc29sdmVEb2N1bWVudCIsbW9kdWxlTmFtZTp4ZX0sbi5yZXNvbHZlQm9keT17bmFtZToiXHUwMjc1XHUwMjc1cmVzb2x2ZUJvZHkiLG1vZHVsZU5hbWU6eGV9LG4uZGVmaW5lQ29tcG9uZW50PXtuYW1lOiJcdTAyNzVcdTAyNzVkZWZpbmVDb21wb25lbnQiLG1vZHVsZU5hbWU6eGV9LG4uZGVjbGFyZUNvbXBvbmVudD17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlQ29tcG9uZW50Iixtb2R1bGVOYW1lOnhlfSxuLnNldENvbXBvbmVudFNjb3BlPXtuYW1lOiJcdTAyNzVcdTAyNzVzZXRDb21wb25lbnRTY29wZSIsbW9kdWxlTmFtZTp4ZX0sbi5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneT17bmFtZToiQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kiLG1vZHVsZU5hbWU6eGV9LG4uVmlld0VuY2Fwc3VsYXRpb249e25hbWU6IlZpZXdFbmNhcHN1bGF0aW9uIixtb2R1bGVOYW1lOnhlfSxuLkNvbXBvbmVudERlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVDb21wb25lbnREZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTp4ZX0sbi5GYWN0b3J5RGVjbGFyYXRpb249e25hbWU6Ilx1MDI3NVx1MDI3NUZhY3RvcnlEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTp4ZX0sbi5kZWNsYXJlRmFjdG9yeT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlRmFjdG9yeSIsbW9kdWxlTmFtZTp4ZX0sbi5GYWN0b3J5VGFyZ2V0PXtuYW1lOiJcdTAyNzVcdTAyNzVGYWN0b3J5VGFyZ2V0Iixtb2R1bGVOYW1lOnhlfSxuLmRlZmluZURpcmVjdGl2ZT17bmFtZToiXHUwMjc1XHUwMjc1ZGVmaW5lRGlyZWN0aXZlIixtb2R1bGVOYW1lOnhlfSxuLmRlY2xhcmVEaXJlY3RpdmU9e25hbWU6Ilx1MDI3NVx1MDI3NW5nRGVjbGFyZURpcmVjdGl2ZSIsbW9kdWxlTmFtZTp4ZX0sbi5EaXJlY3RpdmVEZWNsYXJhdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1RGlyZWN0aXZlRGVjbGFyYXRpb24iLG1vZHVsZU5hbWU6eGV9LG4uSW5qZWN0b3JEZWY9e25hbWU6Ilx1MDI3NVx1MDI3NUluamVjdG9yRGVmIixtb2R1bGVOYW1lOnhlfSxuLkluamVjdG9yRGVjbGFyYXRpb249e25hbWU6Ilx1MDI3NVx1MDI3NUluamVjdG9yRGVjbGFyYXRpb24iLG1vZHVsZU5hbWU6eGV9LG4uZGVmaW5lSW5qZWN0b3I9e25hbWU6Ilx1MDI3NVx1MDI3NWRlZmluZUluamVjdG9yIixtb2R1bGVOYW1lOnhlfSxuLmRlY2xhcmVJbmplY3Rvcj17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlSW5qZWN0b3IiLG1vZHVsZU5hbWU6eGV9LG4uTmdNb2R1bGVEZWNsYXJhdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1TmdNb2R1bGVEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTp4ZX0sbi5Nb2R1bGVXaXRoUHJvdmlkZXJzPXtuYW1lOiJNb2R1bGVXaXRoUHJvdmlkZXJzIixtb2R1bGVOYW1lOnhlfSxuLmRlZmluZU5nTW9kdWxlPXtuYW1lOiJcdTAyNzVcdTAyNzVkZWZpbmVOZ01vZHVsZSIsbW9kdWxlTmFtZTp4ZX0sbi5kZWNsYXJlTmdNb2R1bGU9e25hbWU6Ilx1MDI3NVx1MDI3NW5nRGVjbGFyZU5nTW9kdWxlIixtb2R1bGVOYW1lOnhlfSxuLnNldE5nTW9kdWxlU2NvcGU9e25hbWU6Ilx1MDI3NVx1MDI3NXNldE5nTW9kdWxlU2NvcGUiLG1vZHVsZU5hbWU6eGV9LG4ucmVnaXN0ZXJOZ01vZHVsZVR5cGU9e25hbWU6Ilx1MDI3NVx1MDI3NXJlZ2lzdGVyTmdNb2R1bGVUeXBlIixtb2R1bGVOYW1lOnhlfSxuLlBpcGVEZWNsYXJhdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1UGlwZURlY2xhcmF0aW9uIixtb2R1bGVOYW1lOnhlfSxuLmRlZmluZVBpcGU9e25hbWU6Ilx1MDI3NVx1MDI3NWRlZmluZVBpcGUiLG1vZHVsZU5hbWU6eGV9LG4uZGVjbGFyZVBpcGU9e25hbWU6Ilx1MDI3NVx1MDI3NW5nRGVjbGFyZVBpcGUiLG1vZHVsZU5hbWU6eGV9LG4uZGVjbGFyZUNsYXNzTWV0YWRhdGE9e25hbWU6Ilx1MDI3NVx1MDI3NW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEiLG1vZHVsZU5hbWU6eGV9LG4uc2V0Q2xhc3NNZXRhZGF0YT17bmFtZToiXHUwMjc1c2V0Q2xhc3NNZXRhZGF0YSIsbW9kdWxlTmFtZTp4ZX0sbi5xdWVyeVJlZnJlc2g9e25hbWU6Ilx1MDI3NVx1MDI3NXF1ZXJ5UmVmcmVzaCIsbW9kdWxlTmFtZTp4ZX0sbi52aWV3UXVlcnk9e25hbWU6Ilx1MDI3NVx1MDI3NXZpZXdRdWVyeSIsbW9kdWxlTmFtZTp4ZX0sbi5sb2FkUXVlcnk9e25hbWU6Ilx1MDI3NVx1MDI3NWxvYWRRdWVyeSIsbW9kdWxlTmFtZTp4ZX0sbi5jb250ZW50UXVlcnk9e25hbWU6Ilx1MDI3NVx1MDI3NWNvbnRlbnRRdWVyeSIsbW9kdWxlTmFtZTp4ZX0sbi5OZ09uQ2hhbmdlc0ZlYXR1cmU9e25hbWU6Ilx1MDI3NVx1MDI3NU5nT25DaGFuZ2VzRmVhdHVyZSIsbW9kdWxlTmFtZTp4ZX0sbi5Jbmhlcml0RGVmaW5pdGlvbkZlYXR1cmU9e25hbWU6Ilx1MDI3NVx1MDI3NUluaGVyaXREZWZpbml0aW9uRmVhdHVyZSIsbW9kdWxlTmFtZTp4ZX0sbi5Db3B5RGVmaW5pdGlvbkZlYXR1cmU9e25hbWU6Ilx1MDI3NVx1MDI3NUNvcHlEZWZpbml0aW9uRmVhdHVyZSIsbW9kdWxlTmFtZTp4ZX0sbi5TdGFuZGFsb25lRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1U3RhbmRhbG9uZUZlYXR1cmUiLG1vZHVsZU5hbWU6eGV9LG4uUHJvdmlkZXJzRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1UHJvdmlkZXJzRmVhdHVyZSIsbW9kdWxlTmFtZTp4ZX0sbi5saXN0ZW5lcj17bmFtZToiXHUwMjc1XHUwMjc1bGlzdGVuZXIiLG1vZHVsZU5hbWU6eGV9LG4uZ2V0SW5oZXJpdGVkRmFjdG9yeT17bmFtZToiXHUwMjc1XHUwMjc1Z2V0SW5oZXJpdGVkRmFjdG9yeSIsbW9kdWxlTmFtZTp4ZX0sbi5zYW5pdGl6ZUh0bWw9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplSHRtbCIsbW9kdWxlTmFtZTp4ZX0sbi5zYW5pdGl6ZVN0eWxlPXtuYW1lOiJcdTAyNzVcdTAyNzVzYW5pdGl6ZVN0eWxlIixtb2R1bGVOYW1lOnhlfSxuLnNhbml0aXplUmVzb3VyY2VVcmw9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplUmVzb3VyY2VVcmwiLG1vZHVsZU5hbWU6eGV9LG4uc2FuaXRpemVTY3JpcHQ9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplU2NyaXB0Iixtb2R1bGVOYW1lOnhlfSxuLnNhbml0aXplVXJsPXtuYW1lOiJcdTAyNzVcdTAyNzVzYW5pdGl6ZVVybCIsbW9kdWxlTmFtZTp4ZX0sbi5zYW5pdGl6ZVVybE9yUmVzb3VyY2VVcmw9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplVXJsT3JSZXNvdXJjZVVybCIsbW9kdWxlTmFtZTp4ZX0sbi50cnVzdENvbnN0YW50SHRtbD17bmFtZToiXHUwMjc1XHUwMjc1dHJ1c3RDb25zdGFudEh0bWwiLG1vZHVsZU5hbWU6eGV9LG4udHJ1c3RDb25zdGFudFJlc291cmNlVXJsPXtuYW1lOiJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50UmVzb3VyY2VVcmwiLG1vZHVsZU5hbWU6eGV9LG59KSgpO2Z1bmN0aW9uIEJUKG4pe249bjwwPzErKC1uPDwxKTpuPDwxO2xldCB0PSIiO2Rve2xldCBlPTMxJm47KG4+Pj01KT4wJiYoZXw9MzIpLHQrPXNDKGUpfXdoaWxlKG4+MCk7cmV0dXJuIHR9ZnVuY3Rpb24gc0Mobil7aWYobjwwfHxuPj02NCl0aHJvdyBuZXcgRXJyb3IoIkNhbiBvbmx5IGVuY29kZSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDYzXSIpO3JldHVybiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIltuXX12YXIgdHdlPS8nfFxcfFxufFxyfFwkL2csbndlPS9eWyRBLVpfXVswLTlBLVpfJF0qJC9pLHJEPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuaW5kZW50PXQsdGhpcy5wYXJ0c0xlbmd0aD0wLHRoaXMucGFydHM9W10sdGhpcy5zcmNTcGFucz1bXX19LEVDPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2luZGVudD10LHRoaXMuX2xpbmVzPVtuZXcgckQodCldfXN0YXRpYyBjcmVhdGVSb290KCl7cmV0dXJuIG5ldyBFQygwKX1nZXQgX2N1cnJlbnRMaW5lKCl7cmV0dXJuIHRoaXMuX2xpbmVzW3RoaXMuX2xpbmVzLmxlbmd0aC0xXX1wcmludGxuKHQsZT0iIil7dGhpcy5wcmludCh0fHxudWxsLGUsITApfWxpbmVJc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLl9jdXJyZW50TGluZS5wYXJ0cy5sZW5ndGh9bGluZUxlbmd0aCgpe3JldHVybiB0aGlzLl9jdXJyZW50TGluZS5pbmRlbnQqIiAgIi5sZW5ndGgrdGhpcy5fY3VycmVudExpbmUucGFydHNMZW5ndGh9cHJpbnQodCxlLGk9ITEpe2UubGVuZ3RoPjAmJih0aGlzLl9jdXJyZW50TGluZS5wYXJ0cy5wdXNoKGUpLHRoaXMuX2N1cnJlbnRMaW5lLnBhcnRzTGVuZ3RoKz1lLmxlbmd0aCx0aGlzLl9jdXJyZW50TGluZS5zcmNTcGFucy5wdXNoKHQmJnQuc291cmNlU3Bhbnx8bnVsbCkpLGkmJnRoaXMuX2xpbmVzLnB1c2gobmV3IHJEKHRoaXMuX2luZGVudCkpfXJlbW92ZUVtcHR5TGFzdExpbmUoKXt0aGlzLmxpbmVJc0VtcHR5KCkmJnRoaXMuX2xpbmVzLnBvcCgpfWluY0luZGVudCgpe3RoaXMuX2luZGVudCsrLHRoaXMubGluZUlzRW1wdHkoKSYmKHRoaXMuX2N1cnJlbnRMaW5lLmluZGVudD10aGlzLl9pbmRlbnQpfWRlY0luZGVudCgpe3RoaXMuX2luZGVudC0tLHRoaXMubGluZUlzRW1wdHkoKSYmKHRoaXMuX2N1cnJlbnRMaW5lLmluZGVudD10aGlzLl9pbmRlbnQpfXRvU291cmNlKCl7cmV0dXJuIHRoaXMuc291cmNlTGluZXMubWFwKHQ9PnQucGFydHMubGVuZ3RoPjA/RVgodC5pbmRlbnQpK3QucGFydHMuam9pbigiIik6IiIpLmpvaW4oIlxuIil9dG9Tb3VyY2VNYXBHZW5lcmF0b3IodCxlPTApe2xldCBpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0PW51bGwpe3RoaXMuZmlsZT10LHRoaXMuc291cmNlc0NvbnRlbnQ9bmV3IE1hcCx0aGlzLmxpbmVzPVtdLHRoaXMubGFzdENvbDA9MCx0aGlzLmhhc01hcHBpbmdzPSExfWFkZFNvdXJjZSh0LGU9bnVsbCl7cmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnQuaGFzKHQpfHx0aGlzLnNvdXJjZXNDb250ZW50LnNldCh0LGUpLHRoaXN9YWRkTGluZSgpe3JldHVybiB0aGlzLmxpbmVzLnB1c2goW10pLHRoaXMubGFzdENvbDA9MCx0aGlzfWFkZE1hcHBpbmcodCxlLGkscil7aWYoIXRoaXMuY3VycmVudExpbmUpdGhyb3cgbmV3IEVycm9yKCJBIGxpbmUgbXVzdCBiZSBhZGRlZCBiZWZvcmUgbWFwcGluZ3MgY2FuIGJlIGFkZGVkIik7aWYobnVsbCE9ZSYmIXRoaXMuc291cmNlc0NvbnRlbnQuaGFzKGUpKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBzb3VyY2UgZmlsZSAiJHtlfSJgKTtpZihudWxsPT10KXRocm93IG5ldyBFcnJvcigiVGhlIGNvbHVtbiBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgbXVzdCBiZSBwcm92aWRlZCIpO2lmKHQ8dGhpcy5sYXN0Q29sMCl0aHJvdyBuZXcgRXJyb3IoIk1hcHBpbmcgc2hvdWxkIGJlIGFkZGVkIGluIG91dHB1dCBvcmRlciIpO2lmKGUmJihudWxsPT1pfHxudWxsPT1yKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzb3VyY2UgbG9jYXRpb24gbXVzdCBiZSBwcm92aWRlZCB3aGVuIGEgc291cmNlIHVybCBpcyBwcm92aWRlZCIpO3JldHVybiB0aGlzLmhhc01hcHBpbmdzPSEwLHRoaXMubGFzdENvbDA9dCx0aGlzLmN1cnJlbnRMaW5lLnB1c2goe2NvbDA6dCxzb3VyY2VVcmw6ZSxzb3VyY2VMaW5lMDppLHNvdXJjZUNvbDA6cn0pLHRoaXN9Z2V0IGN1cnJlbnRMaW5lKCl7cmV0dXJuIHRoaXMubGluZXMuc2xpY2UoLTEpWzBdfXRvSlNPTigpe2lmKCF0aGlzLmhhc01hcHBpbmdzKXJldHVybiBudWxsO2xldCB0PW5ldyBNYXAsZT1bXSxpPVtdO0FycmF5LmZyb20odGhpcy5zb3VyY2VzQ29udGVudC5rZXlzKCkpLmZvckVhY2goKGMsdSk9Pnt0LnNldChjLHUpLGUucHVzaChjKSxpLnB1c2godGhpcy5zb3VyY2VzQ29udGVudC5nZXQoYyl8fG51bGwpfSk7bGV0IHI9IiIsbz0wLHM9MCxhPTAsbD0wO3JldHVybiB0aGlzLmxpbmVzLmZvckVhY2goYz0+e289MCxyKz1jLm1hcCh1PT57bGV0IGQ9QlQodS5jb2wwLW8pO3JldHVybiBvPXUuY29sMCxudWxsIT11LnNvdXJjZVVybCYmKGQrPUJUKHQuZ2V0KHUuc291cmNlVXJsKS1zKSxzPXQuZ2V0KHUuc291cmNlVXJsKSxkKz1CVCh1LnNvdXJjZUxpbmUwLWEpLGE9dS5zb3VyY2VMaW5lMCxkKz1CVCh1LnNvdXJjZUNvbDAtbCksbD11LnNvdXJjZUNvbDApLGR9KS5qb2luKCIsIikscis9IjsifSkscj1yLnNsaWNlKDAsLTEpLHtmaWxlOnRoaXMuZmlsZXx8IiIsdmVyc2lvbjozLHNvdXJjZVJvb3Q6IiIsc291cmNlczplLHNvdXJjZXNDb250ZW50OmksbWFwcGluZ3M6cn19dG9Kc0NvbW1lbnQoKXtyZXR1cm4gdGhpcy5oYXNNYXBwaW5ncz8iLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiK2Z1bmN0aW9uKG4pe2xldCB0PSIiLGU9TFYobik7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDspe2xldCByPWVbaSsrXSxvPWk8ZS5sZW5ndGg/ZVtpKytdOm51bGwscz1pPGUubGVuZ3RoP2VbaSsrXTpudWxsO3QrPXNDKHI+PjIpLHQrPXNDKCgzJnIpPDw0fChudWxsPT09bz8wOm8+PjQpKSx0Kz1udWxsPT09bz8iPSI6c0MoKDE1Jm8pPDwyfChudWxsPT09cz8wOnM+PjYpKSx0Kz1udWxsPT09b3x8bnVsbD09PXM/Ij0iOnNDKDYzJnMpfXJldHVybiB0fShKU09OLnN0cmluZ2lmeSh0aGlzLG51bGwsMCkpOiIifX0odCkscj0hMSxvPSgpPT57cnx8KGkuYWRkU291cmNlKHQsIiAiKS5hZGRNYXBwaW5nKDAsdCwwLDApLHI9ITApfTtmb3IobGV0IHM9MDtzPGU7cysrKWkuYWRkTGluZSgpLG8oKTtyZXR1cm4gdGhpcy5zb3VyY2VMaW5lcy5mb3JFYWNoKChzLGEpPT57aS5hZGRMaW5lKCk7bGV0IGw9cy5zcmNTcGFucyxjPXMucGFydHMsdT1zLmluZGVudCoiICAiLmxlbmd0aCxkPTA7Zm9yKDtkPGwubGVuZ3RoJiYhbFtkXTspdSs9Y1tkXS5sZW5ndGgsZCsrO2ZvcihkPGwubGVuZ3RoJiYwPT09YSYmMD09PXU/cj0hMDpvKCk7ZDxsLmxlbmd0aDspe2xldCBwPWxbZF0saD1wLnN0YXJ0LmZpbGUsZj1wLnN0YXJ0LmxpbmUsbT1wLnN0YXJ0LmNvbDtmb3IoaS5hZGRTb3VyY2UoaC51cmwsaC5jb250ZW50KS5hZGRNYXBwaW5nKHUsaC51cmwsZixtKSx1Kz1jW2RdLmxlbmd0aCxkKys7ZDxsLmxlbmd0aCYmKHA9PT1sW2RdfHwhbFtkXSk7KXUrPWNbZF0ubGVuZ3RoLGQrK319KSxpfXNwYW5PZih0LGUpe2xldCBpPXRoaXMuX2xpbmVzW3RdO2lmKGkpe2xldCByPWUtRVgoaS5pbmRlbnQpLmxlbmd0aDtmb3IobGV0IG89MDtvPGkucGFydHMubGVuZ3RoO28rKyl7bGV0IHM9aS5wYXJ0c1tvXTtpZihzLmxlbmd0aD5yKXJldHVybiBpLnNyY1NwYW5zW29dO3ItPXMubGVuZ3RofX1yZXR1cm4gbnVsbH1nZXQgc291cmNlTGluZXMoKXtyZXR1cm4gdGhpcy5fbGluZXMubGVuZ3RoJiYwPT09dGhpcy5fbGluZXNbdGhpcy5fbGluZXMubGVuZ3RoLTFdLnBhcnRzLmxlbmd0aD90aGlzLl9saW5lcy5zbGljZSgwLC0xKTp0aGlzLl9saW5lc319LE5CPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2VzY2FwZURvbGxhckluU3RyaW5ncz10fXByaW50TGVhZGluZ0NvbW1lbnRzKHQsZSl7aWYodm9pZCAwIT09dC5sZWFkaW5nQ29tbWVudHMpZm9yKGxldCBpIG9mIHQubGVhZGluZ0NvbW1lbnRzKWkgaW5zdGFuY2VvZiBuRD9lLnByaW50KHQsYC8qJHtpLnRvU3RyaW5nKCl9Ki9gLGkudHJhaWxpbmdOZXdsaW5lKTppLm11bHRpbGluZT9lLnByaW50KHQsYC8qICR7aS50ZXh0fSAqL2AsaS50cmFpbGluZ05ld2xpbmUpOmkudGV4dC5zcGxpdCgiXG4iKS5mb3JFYWNoKHI9PntlLnByaW50bG4odCxgLy8gJHtyfWApfSl9dmlzaXRFeHByZXNzaW9uU3RtdCh0LGUpe3JldHVybiB0aGlzLnByaW50TGVhZGluZ0NvbW1lbnRzKHQsZSksdC5leHByLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnRsbih0LCI7IiksbnVsbH12aXNpdFJldHVyblN0bXQodCxlKXtyZXR1cm4gdGhpcy5wcmludExlYWRpbmdDb21tZW50cyh0LGUpLGUucHJpbnQodCwicmV0dXJuICIpLHQudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludGxuKHQsIjsiKSxudWxsfXZpc2l0SWZTdG10KHQsZSl7dGhpcy5wcmludExlYWRpbmdDb21tZW50cyh0LGUpLGUucHJpbnQodCwiaWYgKCIpLHQuY29uZGl0aW9uLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiKSB7Iik7bGV0IGk9bnVsbCE9dC5mYWxzZUNhc2UmJnQuZmFsc2VDYXNlLmxlbmd0aD4wO3JldHVybiB0LnRydWVDYXNlLmxlbmd0aDw9MSYmIWk/KGUucHJpbnQodCwiICIpLHRoaXMudmlzaXRBbGxTdGF0ZW1lbnRzKHQudHJ1ZUNhc2UsZSksZS5yZW1vdmVFbXB0eUxhc3RMaW5lKCksZS5wcmludCh0LCIgIikpOihlLnByaW50bG4oKSxlLmluY0luZGVudCgpLHRoaXMudmlzaXRBbGxTdGF0ZW1lbnRzKHQudHJ1ZUNhc2UsZSksZS5kZWNJbmRlbnQoKSxpJiYoZS5wcmludGxuKHQsIn0gZWxzZSB7IiksZS5pbmNJbmRlbnQoKSx0aGlzLnZpc2l0QWxsU3RhdGVtZW50cyh0LmZhbHNlQ2FzZSxlKSxlLmRlY0luZGVudCgpKSksZS5wcmludGxuKHQsIn0iKSxudWxsfXZpc2l0V3JpdGVWYXJFeHByKHQsZSl7bGV0IGk9ZS5saW5lSXNFbXB0eSgpO3JldHVybiBpfHxlLnByaW50KHQsIigiKSxlLnByaW50KHQsYCR7dC5uYW1lfSA9IGApLHQudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksaXx8ZS5wcmludCh0LCIpIiksbnVsbH12aXNpdFdyaXRlS2V5RXhwcih0LGUpe2xldCBpPWUubGluZUlzRW1wdHkoKTtyZXR1cm4gaXx8ZS5wcmludCh0LCIoIiksdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIlsiKSx0LmluZGV4LnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiXSA9ICIpLHQudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksaXx8ZS5wcmludCh0LCIpIiksbnVsbH12aXNpdFdyaXRlUHJvcEV4cHIodCxlKXtsZXQgaT1lLmxpbmVJc0VtcHR5KCk7cmV0dXJuIGl8fGUucHJpbnQodCwiKCIpLHQucmVjZWl2ZXIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LGAuJHt0Lm5hbWV9ID0gYCksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxpfHxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0SW52b2tlRnVuY3Rpb25FeHByKHQsZSl7cmV0dXJuIHQuZm4udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCIoIiksdGhpcy52aXNpdEFsbEV4cHJlc3Npb25zKHQuYXJncyxlLCIsIiksZS5wcmludCh0LCIpIiksbnVsbH12aXNpdFRhZ2dlZFRlbXBsYXRlRXhwcih0LGUpe3QudGFnLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiYCIrdC50ZW1wbGF0ZS5lbGVtZW50c1swXS5yYXdUZXh0KTtmb3IobGV0IGk9MTtpPHQudGVtcGxhdGUuZWxlbWVudHMubGVuZ3RoO2krKyllLnByaW50KHQsIiR7IiksdC50ZW1wbGF0ZS5leHByZXNzaW9uc1tpLTFdLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCxgfSR7dC50ZW1wbGF0ZS5lbGVtZW50c1tpXS5yYXdUZXh0fWApO3JldHVybiBlLnByaW50KHQsImAiKSxudWxsfXZpc2l0V3JhcHBlZE5vZGVFeHByKHQsZSl7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBlbWl0dGVyIGNhbm5vdCB2aXNpdCBXcmFwcGVkTm9kZUV4cHIuIil9dmlzaXRUeXBlb2ZFeHByKHQsZSl7ZS5wcmludCh0LCJ0eXBlb2YgIiksdC5leHByLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpfXZpc2l0UmVhZFZhckV4cHIodCxlKXtyZXR1cm4gZS5wcmludCh0LHQubmFtZSksbnVsbH12aXNpdEluc3RhbnRpYXRlRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsIm5ldyAiKSx0LmNsYXNzRXhwci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIigiKSx0aGlzLnZpc2l0QWxsRXhwcmVzc2lvbnModC5hcmdzLGUsIiwiKSxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0TGl0ZXJhbEV4cHIodCxlKXtsZXQgaT10LnZhbHVlO3JldHVybiBlLnByaW50KHQsInN0cmluZyI9PXR5cGVvZiBpP3JtKGksdGhpcy5fZXNjYXBlRG9sbGFySW5TdHJpbmdzKTpgJHtpfWApLG51bGx9dmlzaXRMb2NhbGl6ZWRTdHJpbmcodCxlKXtsZXQgaT10LnNlcmlhbGl6ZUkxOG5IZWFkKCk7ZS5wcmludCh0LCIkbG9jYWxpemUgYCIraS5yYXcpO2ZvcihsZXQgcj0xO3I8dC5tZXNzYWdlUGFydHMubGVuZ3RoO3IrKyllLnByaW50KHQsIiR7IiksdC5leHByZXNzaW9uc1tyLTFdLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCxgfSR7dC5zZXJpYWxpemVJMThuVGVtcGxhdGVQYXJ0KHIpLnJhd31gKTtyZXR1cm4gZS5wcmludCh0LCJgIiksbnVsbH12aXNpdENvbmRpdGlvbmFsRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsIigiKSx0LmNvbmRpdGlvbi52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIj8gIiksdC50cnVlQ2FzZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIjogIiksdC5mYWxzZUNhc2UudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCIpIiksbnVsbH12aXNpdE5vdEV4cHIodCxlKXtyZXR1cm4gZS5wcmludCh0LCIhIiksdC5jb25kaXRpb24udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksbnVsbH12aXNpdFVuYXJ5T3BlcmF0b3JFeHByKHQsZSl7bGV0IGk7c3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UgYW0uUGx1czppPSIrIjticmVhaztjYXNlIGFtLk1pbnVzOmk9Ii0iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG9wZXJhdG9yICR7dC5vcGVyYXRvcn1gKX1yZXR1cm4gdC5wYXJlbnMmJmUucHJpbnQodCwiKCIpLGUucHJpbnQodCxpKSx0LmV4cHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksdC5wYXJlbnMmJmUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRCaW5hcnlPcGVyYXRvckV4cHIodCxlKXtsZXQgaTtzd2l0Y2godC5vcGVyYXRvcil7Y2FzZSBDbi5FcXVhbHM6aT0iPT0iO2JyZWFrO2Nhc2UgQ24uSWRlbnRpY2FsOmk9Ij09PSI7YnJlYWs7Y2FzZSBDbi5Ob3RFcXVhbHM6aT0iIT0iO2JyZWFrO2Nhc2UgQ24uTm90SWRlbnRpY2FsOmk9IiE9PSI7YnJlYWs7Y2FzZSBDbi5BbmQ6aT0iJiYiO2JyZWFrO2Nhc2UgQ24uQml0d2lzZUFuZDppPSImIjticmVhaztjYXNlIENuLk9yOmk9Inx8IjticmVhaztjYXNlIENuLlBsdXM6aT0iKyI7YnJlYWs7Y2FzZSBDbi5NaW51czppPSItIjticmVhaztjYXNlIENuLkRpdmlkZTppPSIvIjticmVhaztjYXNlIENuLk11bHRpcGx5Omk9IioiO2JyZWFrO2Nhc2UgQ24uTW9kdWxvOmk9IiUiO2JyZWFrO2Nhc2UgQ24uTG93ZXI6aT0iPCI7YnJlYWs7Y2FzZSBDbi5Mb3dlckVxdWFsczppPSI8PSI7YnJlYWs7Y2FzZSBDbi5CaWdnZXI6aT0iPiI7YnJlYWs7Y2FzZSBDbi5CaWdnZXJFcXVhbHM6aT0iPj0iO2JyZWFrO2Nhc2UgQ24uTnVsbGlzaENvYWxlc2NlOmk9Ij8/IjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBvcGVyYXRvciAke3Qub3BlcmF0b3J9YCl9cmV0dXJuIHQucGFyZW5zJiZlLnByaW50KHQsIigiKSx0Lmxocy52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsYCAke2l9IGApLHQucmhzLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLHQucGFyZW5zJiZlLnByaW50KHQsIikiKSxudWxsfXZpc2l0UmVhZFByb3BFeHByKHQsZSl7cmV0dXJuIHQucmVjZWl2ZXIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCIuIiksZS5wcmludCh0LHQubmFtZSksbnVsbH12aXNpdFJlYWRLZXlFeHByKHQsZSl7cmV0dXJuIHQucmVjZWl2ZXIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCJbIiksdC5pbmRleC52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIl0iKSxudWxsfXZpc2l0TGl0ZXJhbEFycmF5RXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsIlsiKSx0aGlzLnZpc2l0QWxsRXhwcmVzc2lvbnModC5lbnRyaWVzLGUsIiwiKSxlLnByaW50KHQsIl0iKSxudWxsfXZpc2l0TGl0ZXJhbE1hcEV4cHIodCxlKXtyZXR1cm4gZS5wcmludCh0LCJ7IiksdGhpcy52aXNpdEFsbE9iamVjdHMoaT0+e2UucHJpbnQodCxgJHtybShpLmtleSx0aGlzLl9lc2NhcGVEb2xsYXJJblN0cmluZ3MsaS5xdW90ZWQpfTpgKSxpLnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpfSx0LmVudHJpZXMsZSwiLCIpLGUucHJpbnQodCwifSIpLG51bGx9dmlzaXRDb21tYUV4cHIodCxlKXtyZXR1cm4gZS5wcmludCh0LCIoIiksdGhpcy52aXNpdEFsbEV4cHJlc3Npb25zKHQucGFydHMsZSwiLCIpLGUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRBbGxFeHByZXNzaW9ucyh0LGUsaSl7dGhpcy52aXNpdEFsbE9iamVjdHMocj0+ci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSx0LGUsaSl9dmlzaXRBbGxPYmplY3RzKHQsZSxpLHIpe2xldCBvPSExO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKXM+MCYmKGkubGluZUxlbmd0aCgpPjgwPyhpLnByaW50KG51bGwsciwhMCksb3x8KGkuaW5jSW5kZW50KCksaS5pbmNJbmRlbnQoKSxvPSEwKSk6aS5wcmludChudWxsLHIsITEpKSx0KGVbc10pO28mJihpLmRlY0luZGVudCgpLGkuZGVjSW5kZW50KCkpfXZpc2l0QWxsU3RhdGVtZW50cyh0LGUpe3QuZm9yRWFjaChpPT5pLnZpc2l0U3RhdGVtZW50KHRoaXMsZSkpfX07ZnVuY3Rpb24gcm0obix0LGU9ITApe2lmKG51bGw9PW4pcmV0dXJuIG51bGw7bGV0IGk9bi5yZXBsYWNlKHR3ZSwoLi4ubyk9PiIkIj09b1swXT90PyJcXCQiOiIkIjoiXG4iPT1vWzBdPyJcXG4iOiJcciI9PW9bMF0/IlxcciI6YFxcJHtvWzBdfWApO3JldHVybiBlfHwhbndlLnRlc3QoaSk/YCcke2l9J2A6aX1mdW5jdGlvbiBFWChuKXtsZXQgdD0iIjtmb3IobGV0IGU9MDtlPG47ZSsrKXQrPSIgICI7cmV0dXJuIHR9ZnVuY3Rpb24gSUQobix0KXtpZigwPT09dClyZXR1cm4gdWwobik7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0O2krKyllLnB1c2goVl8pO3JldHVybiB1bChuLHZvaWQgMCxlKX1mdW5jdGlvbiB6UShuKXtyZXR1cm5gQCR7bn1gfWZ1bmN0aW9uIHJ3ZShuLHQpe2xldCBlPXJtKHQsITEsITEpO3JldHVybiBlIT09dD9gJHtufVske2V9XWA6YCR7bn0uJHt0fWB9ZnVuY3Rpb24galEobix0KXtyZXR1cm5gYW5pbWF0aW9uXyR7bn1fJHt0fWB9ZnVuY3Rpb24gQXMobil7bGV0IHQ9bmV3IExuKG4pO3JldHVybnt2YWx1ZTp0LHR5cGU6dH19ZnVuY3Rpb24gb20obix0KXtsZXQgZT1fcihuLm1hcChpPT5pLnZhbHVlKSk7cmV0dXJuIHQ/cmEoW10sW25ldyBEbyhlKV0pOmV9ZnVuY3Rpb24gSFYobix0KXtyZXR1cm57ZXhwcmVzc2lvbjpuLGZvcndhcmRSZWY6dH19dmFyIGZfPSgoKT0+e3JldHVybihuPWZffHwoZl89e30pKVtuLkNsYXNzPTBdPSJDbGFzcyIsbltuLkZ1bmN0aW9uPTFdPSJGdW5jdGlvbiIsZl87dmFyIG59KSgpLE5jPSgoKT0+e3JldHVybihuPU5jfHwoTmM9e30pKVtuLkRpcmVjdGl2ZT0wXT0iRGlyZWN0aXZlIixuW24uQ29tcG9uZW50PTFdPSJDb21wb25lbnQiLG5bbi5JbmplY3RhYmxlPTJdPSJJbmplY3RhYmxlIixuW24uUGlwZT0zXT0iUGlwZSIsbltuLk5nTW9kdWxlPTRdPSJOZ01vZHVsZSIsTmM7dmFyIG59KSgpO2Z1bmN0aW9uIG5tKG4pe2xldCB0PVJpKCJ0IiksZT1udWxsLGk9RFgobik/dDpuZXcgZ3IoQ24uT3IsdCxuLmludGVybmFsVHlwZSkscj1udWxsO251bGwhPT1uLmRlcHM/ImludmFsaWQiIT09bi5kZXBzJiYocj1uZXcgZG0oaSxUWChuLmRlcHMsbi50YXJnZXQpKSk6KGU9UmkoYFx1MDI3NSR7bi5uYW1lfV9CYXNlRmFjdG9yeWApLHI9ZS5jYWxsRm4oW2ldKSk7bGV0IG89W10scz1udWxsO2Z1bmN0aW9uIGEoYyl7bGV0IHU9UmkoInIiKTtvLnB1c2godS5zZXQoUEIpLnRvRGVjbFN0bXQoKSk7bGV0IGQ9bnVsbCE9PXI/dS5zZXQocikudG9TdG10KCk6VG4odGUuaW52YWxpZEZhY3RvcnkpLmNhbGxGbihbXSkudG9TdG10KCk7cmV0dXJuIG8ucHVzaChWVih0LFtkXSxbdS5zZXQoYykudG9TdG10KCldKSksdX1pZihEWChuKSl7bGV0IGM9VFgobi5kZWxlZ2F0ZURlcHMsbi50YXJnZXQpO3M9YShuZXcobi5kZWxlZ2F0ZVR5cGU9PT1mXy5DbGFzcz9kbTpvaCkobi5kZWxlZ2F0ZSxjKSl9ZWxzZSBzPWZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLmV4cHJlc3Npb259KG4pP2Eobi5leHByZXNzaW9uKTpyO2lmKG51bGw9PT1zKW8ucHVzaChUbih0ZS5pbnZhbGlkRmFjdG9yeSkuY2FsbEZuKFtdKS50b1N0bXQoKSk7ZWxzZSBpZihudWxsIT09ZSl7bGV0IGM9VG4odGUuZ2V0SW5oZXJpdGVkRmFjdG9yeSkuY2FsbEZuKFtuLmludGVybmFsVHlwZV0pLHU9bmV3IGdyKENuLk9yLGUsZS5zZXQoYykpO28ucHVzaChuZXcgRG8odS5jYWxsRm4oW2ldKSkpfWVsc2Ugby5wdXNoKG5ldyBEbyhzKSk7bGV0IGw9cmEoW25ldyBpYSgidCIsVl8pXSxvLFBhLHZvaWQgMCxgJHtuLm5hbWV9X0ZhY3RvcnlgKTtyZXR1cm4gbnVsbCE9PWUmJihsPXJhKFtdLFtuZXcgVnUoZS5uYW1lKSxuZXcgRG8obCldKS5jYWxsRm4oW10sdm9pZCAwLCEwKSkse2V4cHJlc3Npb246bCxzdGF0ZW1lbnRzOltdLHR5cGU6Y3dlKG4pfX1mdW5jdGlvbiBjd2Uobil7bGV0IHQ9bnVsbCE9PW4uZGVwcyYmImludmFsaWQiIT09bi5kZXBzP2Z1bmN0aW9uKG4pe2xldCB0PSExLGU9bi5tYXAoaT0+e2xldCByPWZ1bmN0aW9uKG4pe2xldCB0PVtdO3JldHVybiBudWxsIT09bi5hdHRyaWJ1dGVOYW1lVHlwZSYmdC5wdXNoKHtrZXk6ImF0dHJpYnV0ZSIsdmFsdWU6bi5hdHRyaWJ1dGVOYW1lVHlwZSxxdW90ZWQ6ITF9KSxuLm9wdGlvbmFsJiZ0LnB1c2goe2tleToib3B0aW9uYWwiLHZhbHVlOmh0KCEwKSxxdW90ZWQ6ITF9KSxuLmhvc3QmJnQucHVzaCh7a2V5OiJob3N0Iix2YWx1ZTpodCghMCkscXVvdGVkOiExfSksbi5zZWxmJiZ0LnB1c2goe2tleToic2VsZiIsdmFsdWU6aHQoITApLHF1b3RlZDohMX0pLG4uc2tpcFNlbGYmJnQucHVzaCh7a2V5OiJza2lwU2VsZiIsdmFsdWU6aHQoITApLHF1b3RlZDohMX0pLHQubGVuZ3RoPjA/cWwodCk6bnVsbH0oaSk7cmV0dXJuIG51bGwhPT1yPyh0PSEwLHIpOmh0KG51bGwpfSk7cmV0dXJuIHQ/dWwoX3IoZSkpOkpkfShuLmRlcHMpOkpkO3JldHVybiB1bChUbih0ZS5GYWN0b3J5RGVjbGFyYXRpb24sW0lEKG4udHlwZS50eXBlLG4udHlwZUFyZ3VtZW50Q291bnQpLHRdKSl9ZnVuY3Rpb24gVFgobix0KXtyZXR1cm4gbi5tYXAoKGUsaSk9PmZ1bmN0aW9uKG4sdCxlKXtpZihudWxsPT09bi50b2tlbilyZXR1cm4gVG4odGUuaW52YWxpZEZhY3RvcnlEZXApLmNhbGxGbihbaHQoZSldKTtpZihudWxsPT09bi5hdHRyaWJ1dGVOYW1lVHlwZSl7bGV0IGk9MHwobi5zZWxmPzI6MCl8KG4uc2tpcFNlbGY/NDowKXwobi5ob3N0PzE6MCl8KG4ub3B0aW9uYWw/ODowKXwodD09PU5jLlBpcGU/MTY6MCkscj0wIT09aXx8bi5vcHRpb25hbD9odChpKTpudWxsLG89W24udG9rZW5dO3ImJm8ucHVzaChyKTtsZXQgcz1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSBOYy5Db21wb25lbnQ6Y2FzZSBOYy5EaXJlY3RpdmU6Y2FzZSBOYy5QaXBlOnJldHVybiB0ZS5kaXJlY3RpdmVJbmplY3Q7ZGVmYXVsdDpyZXR1cm4gdGUuaW5qZWN0fX0odCk7cmV0dXJuIFRuKHMpLmNhbGxGbihvKX1yZXR1cm4gVG4odGUuaW5qZWN0QXR0cmlidXRlKS5jYWxsRm4oW24udG9rZW5dKX0oZSx0LGkpKX1mdW5jdGlvbiBEWChuKXtyZXR1cm4gdm9pZCAwIT09bi5kZWxlZ2F0ZVR5cGV9dmFyIE1fPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52YWx1ZT10LHRoaXMuc291cmNlU3Bhbj1lfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0VGV4dCh0aGlzKX19LFRDPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5pMThuPWl9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRCb3VuZFRleHQodGhpcyl9fSxEQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW8sdGhpcy5pMThuPXN9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRUZXh0QXR0cmlidXRlKHRoaXMpfX0sd189Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuc2VjdXJpdHlDb250ZXh0PWksdGhpcy52YWx1ZT1yLHRoaXMudW5pdD1vLHRoaXMuc291cmNlU3Bhbj1zLHRoaXMua2V5U3Bhbj1hLHRoaXMudmFsdWVTcGFuPWwsdGhpcy5pMThuPWN9c3RhdGljIGZyb21Cb3VuZEVsZW1lbnRQcm9wZXJ0eSh0LGUpe2lmKHZvaWQgMD09PXQua2V5U3Bhbil0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdGU6IGtleVNwYW4gbXVzdCBiZSBkZWZpbmVkIGZvciBib3VuZCBhdHRyaWJ1dGVzIGJ1dCB3YXMgbm90IGZvciAke3QubmFtZX06ICR7dC5zb3VyY2VTcGFufWApO3JldHVybiBuZXcgd18odC5uYW1lLHQudHlwZSx0LnNlY3VyaXR5Q29udGV4dCx0LnZhbHVlLHQudW5pdCx0LnNvdXJjZVNwYW4sdC5rZXlTcGFuLHQudmFsdWVTcGFuLGUpfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0Qm91bmRBdHRyaWJ1dGUodGhpcyl9fSxTXz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuaGFuZGxlcj1pLHRoaXMudGFyZ2V0PXIsdGhpcy5waGFzZT1vLHRoaXMuc291cmNlU3Bhbj1zLHRoaXMuaGFuZGxlclNwYW49YSx0aGlzLmtleVNwYW49bH1zdGF0aWMgZnJvbVBhcnNlZEV2ZW50KHQpe2xldCBlPTA9PT10LnR5cGU/dC50YXJnZXRPclBoYXNlOm51bGwsaT0xPT09dC50eXBlP3QudGFyZ2V0T3JQaGFzZTpudWxsO2lmKHZvaWQgMD09PXQua2V5U3Bhbil0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdGU6IGtleVNwYW4gbXVzdCBiZSBkZWZpbmVkIGZvciBib3VuZCBldmVudCBidXQgd2FzIG5vdCBmb3IgJHt0Lm5hbWV9OiAke3Quc291cmNlU3Bhbn1gKTtyZXR1cm4gbmV3IFNfKHQubmFtZSx0LnR5cGUsdC5oYW5kbGVyLGUsaSx0LnNvdXJjZVNwYW4sdC5oYW5kbGVyU3Bhbix0LmtleVNwYW4pfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0Qm91bmRFdmVudCh0aGlzKX19LEVfPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjLHUpe3RoaXMubmFtZT10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuaW5wdXRzPWksdGhpcy5vdXRwdXRzPXIsdGhpcy5jaGlsZHJlbj1vLHRoaXMucmVmZXJlbmNlcz1zLHRoaXMuc291cmNlU3Bhbj1hLHRoaXMuc3RhcnRTb3VyY2VTcGFuPWwsdGhpcy5lbmRTb3VyY2VTcGFuPWMsdGhpcy5pMThuPXV9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRFbGVtZW50KHRoaXMpfX0sdUM9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsdSxkLHApe3RoaXMudGFnTmFtZT10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuaW5wdXRzPWksdGhpcy5vdXRwdXRzPXIsdGhpcy50ZW1wbGF0ZUF0dHJzPW8sdGhpcy5jaGlsZHJlbj1zLHRoaXMucmVmZXJlbmNlcz1hLHRoaXMudmFyaWFibGVzPWwsdGhpcy5zb3VyY2VTcGFuPWMsdGhpcy5zdGFydFNvdXJjZVNwYW49dSx0aGlzLmVuZFNvdXJjZVNwYW49ZCx0aGlzLmkxOG49cH12aXNpdCh0KXtyZXR1cm4gdC52aXNpdFRlbXBsYXRlKHRoaXMpfX0sb0Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLm5hbWU9dCx0aGlzLnZhbHVlPWUsdGhpcy5zb3VyY2VTcGFuPWksdGhpcy5rZXlTcGFuPXIsdGhpcy52YWx1ZVNwYW49b312aXNpdCh0KXtyZXR1cm4gdC52aXNpdFZhcmlhYmxlKHRoaXMpfX0sc0Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy52YXJzPXQsdGhpcy5wbGFjZWhvbGRlcnM9ZSx0aGlzLnNvdXJjZVNwYW49aSx0aGlzLmkxOG49cn12aXNpdCh0KXtyZXR1cm4gdC52aXNpdEljdSh0aGlzKX19O2Z1bmN0aW9uIEFYKG4sdCl7bGV0IGU9W107aWYobi52aXNpdClmb3IobGV0IGkgb2YgdCluLnZpc2l0KGkpfHxpLnZpc2l0KG4pO2Vsc2UgZm9yKGxldCBpIG9mIHQpe2xldCByPWkudmlzaXQobik7ciYmZS5wdXNoKHIpfXJldHVybiBlfXZhciBGdT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5ub2Rlcz10LHRoaXMucGxhY2Vob2xkZXJzPWUsdGhpcy5wbGFjZWhvbGRlclRvTWVzc2FnZT1pLHRoaXMubWVhbmluZz1yLHRoaXMuZGVzY3JpcHRpb249byx0aGlzLmN1c3RvbUlkPXMsdGhpcy5pZD10aGlzLmN1c3RvbUlkLHRoaXMubGVnYWN5SWRzPVtdLHRoaXMubWVzc2FnZVN0cmluZz1mdW5jdGlvbihuKXtsZXQgdD1uZXcgVUI7cmV0dXJuIG4ubWFwKGk9PmkudmlzaXQodCkpLmpvaW4oIiIpfSh0aGlzLm5vZGVzKSx0aGlzLnNvdXJjZXM9dC5sZW5ndGg/W3tmaWxlUGF0aDp0WzBdLnNvdXJjZVNwYW4uc3RhcnQuZmlsZS51cmwsc3RhcnRMaW5lOnRbMF0uc291cmNlU3Bhbi5zdGFydC5saW5lKzEsc3RhcnRDb2w6dFswXS5zb3VyY2VTcGFuLnN0YXJ0LmNvbCsxLGVuZExpbmU6dFt0Lmxlbmd0aC0xXS5zb3VyY2VTcGFuLmVuZC5saW5lKzEsZW5kQ29sOnRbMF0uc291cmNlU3Bhbi5zdGFydC5jb2wrMX1dOltdfX0sbF89Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWV9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdFRleHQodGhpcyxlKX19LG1tPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jaGlsZHJlbj10LHRoaXMuc291cmNlU3Bhbj1lfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRDb250YWluZXIodGhpcyxlKX19LGFEPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuZXhwcmVzc2lvbj10LHRoaXMudHlwZT1lLHRoaXMuY2FzZXM9aSx0aGlzLnNvdXJjZVNwYW49cn12aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0SWN1KHRoaXMsZSl9fSxsRD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy52YWx1ZT10LHRoaXMubmFtZT1lLHRoaXMuc291cmNlU3Bhbj1pfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRQbGFjZWhvbGRlcih0aGlzLGUpfX0sVF89Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudmFsdWU9dCx0aGlzLm5hbWU9ZSx0aGlzLnNvdXJjZVNwYW49aX12aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0SWN1UGxhY2Vob2xkZXIodGhpcyxlKX19LFVCPWNsYXNze3Zpc2l0VGV4dCh0KXtyZXR1cm4gdC52YWx1ZX12aXNpdENvbnRhaW5lcih0KXtyZXR1cm4gdC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9dmlzaXRJY3UodCl7bGV0IGU9T2JqZWN0LmtleXModC5jYXNlcykubWFwKGk9PmAke2l9IHske3QuY2FzZXNbaV0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LmV4cHJlc3Npb25QbGFjZWhvbGRlcn0sICR7dC50eXBlfSwgJHtlLmpvaW4oIiAiKX19YH12aXNpdFRhZ1BsYWNlaG9sZGVyKHQpe2xldCBlPXQuY2hpbGRyZW4ubWFwKGk9PmkudmlzaXQodGhpcykpLmpvaW4oIiIpO3JldHVybmB7JCR7dC5zdGFydE5hbWV9fSR7ZX17JCR7dC5jbG9zZU5hbWV9fWB9dmlzaXRQbGFjZWhvbGRlcih0KXtyZXR1cm5geyQke3QubmFtZX19YH12aXNpdEljdVBsYWNlaG9sZGVyKHQpe3JldHVybmB7JCR7dC5uYW1lfX1gfX07bmV3IGNsYXNze3Zpc2l0VGFnKHQpe2xldCBlPXRoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXModC5hdHRycyk7aWYoMD09dC5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuYDwke3QubmFtZX0ke2V9Lz5gO2xldCBpPXQuY2hpbGRyZW4ubWFwKHI9PnIudmlzaXQodGhpcykpO3JldHVybmA8JHt0Lm5hbWV9JHtlfT4ke2kuam9pbigiIil9PC8ke3QubmFtZX0+YH12aXNpdFRleHQodCl7cmV0dXJuIHQudmFsdWV9dmlzaXREZWNsYXJhdGlvbih0KXtyZXR1cm5gPD94bWwke3RoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXModC5hdHRycyl9ID8+YH1fc2VyaWFsaXplQXR0cmlidXRlcyh0KXtsZXQgZT1PYmplY3Qua2V5cyh0KS5tYXAoaT0+YCR7aX09IiR7dFtpXX0iYCkuam9pbigiICIpO3JldHVybiBlLmxlbmd0aD4wPyIgIitlOiIifXZpc2l0RG9jdHlwZSh0KXtyZXR1cm5gPCFET0NUWVBFICR7dC5yb290VGFnfSBbXG4ke3QuZHRkfVxuXT5gfX07dmFyIGpCPSJpMThuLSI7ZnVuY3Rpb24gQUMobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBGdX1mdW5jdGlvbiBWVChuKXtyZXR1cm4gQUMobikmJjE9PT1uLm5vZGVzLmxlbmd0aCYmbi5ub2Rlc1swXWluc3RhbmNlb2YgYUR9ZnVuY3Rpb24gQ3dlKG4pe3JldHVybiEhbi5pMThufWZ1bmN0aW9uIFdRKG4pe3JldHVybiBuLm5vZGVzWzBdfWZ1bmN0aW9uIFBEKG4sdD0wKXtyZXR1cm5gXHVmZmZkJHtufSR7dD4wP2A6JHt0fWA6IiJ9XHVmZmZkYH1mdW5jdGlvbiBTd2Uobj0wKXtsZXQgdD1uO3JldHVybigpPT50Kyt9ZnVuY3Rpb24gUFgobil7bGV0IHQ9e307cmV0dXJuIG4uZm9yRWFjaCgoZSxpKT0+e3RbaV09aHQoZS5sZW5ndGg+MT9gWyR7ZS5qb2luKCJ8Iil9XWA6ZVswXSl9KSx0fWZ1bmN0aW9uIHFUKG4sdCwuLi5lKXtsZXQgaT1uLmdldCh0KXx8W107aS5wdXNoKC4uLmUpLG4uc2V0KHQsaSl9ZnVuY3Rpb24gcVEobix0PTAsZT0wKXtsZXQgaT10LHI9bmV3IE1hcCxvPW4gaW5zdGFuY2VvZiBGdT9uLm5vZGVzLmZpbmQocz0+cyBpbnN0YW5jZW9mIG1tKTpuO3JldHVybiBvJiZvLmNoaWxkcmVuLmZpbHRlcihzPT5zIGluc3RhbmNlb2YgbEQpLmZvckVhY2goKHMsYSk9PntsZXQgbD1QRChpK2EsZSk7cVQocixzLm5hbWUsbCl9KSxyfWZ1bmN0aW9uIFVWKG49e30sdCl7bGV0IGU9e307cmV0dXJuIG4mJk9iamVjdC5rZXlzKG4pLmxlbmd0aCYmT2JqZWN0LmtleXMobikuZm9yRWFjaChpPT5lW0pDKGksdCldPW5baV0pLGV9ZnVuY3Rpb24gSkMobix0PSEwKXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gbi50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1teQS1aMC05X10vZywiXyIpfShuKTtpZighdClyZXR1cm4gZTtsZXQgcixpPWUuc3BsaXQoIl8iKTtpZigxPT09aS5sZW5ndGgpcmV0dXJuIG4udG9Mb3dlckNhc2UoKTsvXlxkKyQvLnRlc3QoaVtpLmxlbmd0aC0xXSkmJihyPWkucG9wKCkpO2xldCBvPWkuc2hpZnQoKS50b0xvd2VyQ2FzZSgpO3JldHVybiBpLmxlbmd0aCYmKG8rPWkubWFwKHM9PnMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrcy5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKS5qb2luKCIiKSkscj9gJHtvfV8ke3J9YDpvfWZ1bmN0aW9uIFJYKG4pe3JldHVybmBNU0dfJHtufWAudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBFd2Uobil7cmV0dXJuIG5ldyBWdShuLm5hbWUsdm9pZCAwLFBhLHZvaWQgMCxuLnNvdXJjZVNwYW4pfXZhciBUd2U9L1stLl0vLEhjPSJjdHgiLCRDPSJyZiIsWVE9InJlc3RvcmVkQ3R4IixSd2U9bmV3IFNldChbdGUuZWxlbWVudCx0ZS5lbGVtZW50U3RhcnQsdGUuZWxlbWVudEVuZCx0ZS5lbGVtZW50Q29udGFpbmVyLHRlLmVsZW1lbnRDb250YWluZXJTdGFydCx0ZS5lbGVtZW50Q29udGFpbmVyRW5kLHRlLmkxOG5FeHAsdGUubGlzdGVuZXIsdGUuY2xhc3NQcm9wLHRlLnN5bnRoZXRpY0hvc3RMaXN0ZW5lcix0ZS5ob3N0UHJvcGVydHksdGUuc3ludGhldGljSG9zdFByb3BlcnR5LHRlLnByb3BlcnR5LHRlLnByb3BlcnR5SW50ZXJwb2xhdGUxLHRlLnByb3BlcnR5SW50ZXJwb2xhdGUyLHRlLnByb3BlcnR5SW50ZXJwb2xhdGUzLHRlLnByb3BlcnR5SW50ZXJwb2xhdGU0LHRlLnByb3BlcnR5SW50ZXJwb2xhdGU1LHRlLnByb3BlcnR5SW50ZXJwb2xhdGU2LHRlLnByb3BlcnR5SW50ZXJwb2xhdGU3LHRlLnByb3BlcnR5SW50ZXJwb2xhdGU4LHRlLnByb3BlcnR5SW50ZXJwb2xhdGVWLHRlLmF0dHJpYnV0ZSx0ZS5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTEsdGUuYXR0cmlidXRlSW50ZXJwb2xhdGUyLHRlLmF0dHJpYnV0ZUludGVycG9sYXRlMyx0ZS5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTQsdGUuYXR0cmlidXRlSW50ZXJwb2xhdGU1LHRlLmF0dHJpYnV0ZUludGVycG9sYXRlNix0ZS5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTcsdGUuYXR0cmlidXRlSW50ZXJwb2xhdGU4LHRlLmF0dHJpYnV0ZUludGVycG9sYXRlVix0ZS5zdHlsZVByb3AsdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGUxLHRlLnN0eWxlUHJvcEludGVycG9sYXRlMix0ZS5zdHlsZVByb3BJbnRlcnBvbGF0ZTMsdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGU0LHRlLnN0eWxlUHJvcEludGVycG9sYXRlNSx0ZS5zdHlsZVByb3BJbnRlcnBvbGF0ZTYsdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGU3LHRlLnN0eWxlUHJvcEludGVycG9sYXRlOCx0ZS5zdHlsZVByb3BJbnRlcnBvbGF0ZVYsdGUudGV4dEludGVycG9sYXRlLHRlLnRleHRJbnRlcnBvbGF0ZTEsdGUudGV4dEludGVycG9sYXRlMix0ZS50ZXh0SW50ZXJwb2xhdGUzLHRlLnRleHRJbnRlcnBvbGF0ZTQsdGUudGV4dEludGVycG9sYXRlNSx0ZS50ZXh0SW50ZXJwb2xhdGU2LHRlLnRleHRJbnRlcnBvbGF0ZTcsdGUudGV4dEludGVycG9sYXRlOCx0ZS50ZXh0SW50ZXJwb2xhdGVWXSk7ZnVuY3Rpb24gZ20obix0LGUpe3JldHVybiBUbih0LG51bGwsbikuY2FsbEZuKGUsbil9ZnVuY3Rpb24gWFEobix0KXtsZXQgZT1udWxsO3JldHVybigpPT4oZXx8KG4ucHVzaChuZXcgVnUoIl90Iix2b2lkIDAsVl8pKSxlPVJpKHQpKSxlKX1mdW5jdGlvbiBpQyhuKXt0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3RhdGU6IFZpc2l0b3IgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGRvZXNuJ3QgaGFuZGxlICR7bi5jb25zdHJ1Y3Rvci5uYW1lfWApfWZ1bmN0aW9uIE51KG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP19yKG4ubWFwKE51KSk6aHQobixQYSl9ZnVuY3Rpb24gT1gobix0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikubGVuZ3RoPjA/ZnVuY3Rpb24obix0KXtyZXR1cm4gcWwoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikubWFwKGU9PntsZXQgcixvLHMsYSxpPW5bZV07cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/KFtvLHJdPWkscz1lLGE9byE9PXIpOihzPXI9ZSxvPWksYT0hMSkse2tleTpzLHF1b3RlZDpUd2UudGVzdChzKSx2YWx1ZTp0JiZhP19yKFtOdShvKSxOdShyKV0pOk51KG8pfX0pKX0obix0KTpudWxsfWZ1bmN0aW9uIHNCKG4pe2Zvcig7VlEobltuLmxlbmd0aC0xXSk7KW4ucG9wKCk7cmV0dXJuIG59ZnVuY3Rpb24ga3dlKG4sdCl7aWYoQXJyYXkuaXNBcnJheShuLnByZWRpY2F0ZSkpe2xldCBlPVtdO3JldHVybiBuLnByZWRpY2F0ZS5mb3JFYWNoKGk9PntsZXQgcj1pLnNwbGl0KCIsIikubWFwKG89Pmh0KG8udHJpbSgpKSk7ZS5wdXNoKC4uLnIpfSksdC5nZXRDb25zdExpdGVyYWwoX3IoZSksITApfXN3aXRjaChuLnByZWRpY2F0ZS5mb3J3YXJkUmVmKXtjYXNlIDA6Y2FzZSAyOnJldHVybiBuLnByZWRpY2F0ZS5leHByZXNzaW9uO2Nhc2UgMTpyZXR1cm4gVG4odGUucmVzb2x2ZUZvcndhcmRSZWYpLmNhbGxGbihbbi5wcmVkaWNhdGUuZXhwcmVzc2lvbl0pfX12YXIgc2g9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnZhbHVlcz1bXX1zZXQodCxlKXtlJiZ0aGlzLnZhbHVlcy5wdXNoKHtrZXk6dCx2YWx1ZTplLHF1b3RlZDohMX0pfXRvTGl0ZXJhbE1hcCgpe3JldHVybiBxbCh0aGlzLnZhbHVlcyl9fTtmdW5jdGlvbiB3bShuKXtsZXR7ZXhwcmVzc2lvbnM6dCxzdHJpbmdzOmV9PW47cmV0dXJuIDE9PT10Lmxlbmd0aCYmMj09PWUubGVuZ3RoJiYiIj09PWVbMF0mJiIiPT09ZVsxXT8xOnQubGVuZ3RoK2UubGVuZ3RofWZ1bmN0aW9uIGNEKG4pe2xldCB0PVtdLGU9bnVsbCxpPW51bGwscj0wO2ZvcihsZXQgbyBvZiBuKXtsZXQgcz0oImZ1bmN0aW9uIj09dHlwZW9mIG8ucGFyYW1zT3JGbj9vLnBhcmFtc09yRm4oKTpvLnBhcmFtc09yRm4pPz9bXSxhPUFycmF5LmlzQXJyYXkocyk/czpbc107cjw1MDAmJmk9PT1vLnJlZmVyZW5jZSYmUndlLmhhcyhpKT8oZT1lLmNhbGxGbihhLGUuc291cmNlU3BhbikscisrKToobnVsbCE9PWUmJnQucHVzaChlLnRvU3RtdCgpKSxlPWdtKG8uc3BhbixvLnJlZmVyZW5jZSxhKSxpPW8ucmVmZXJlbmNlLHI9MCl9cmV0dXJuIG51bGwhPT1lJiZ0LnB1c2goZS50b1N0bXQoKSksdH1mdW5jdGlvbiBrWChuLHQpe2xldCBlPW51bGwsaT17bmFtZTpuLm5hbWUsdHlwZTpuLnR5cGUsaW50ZXJuYWxUeXBlOm4uaW50ZXJuYWxUeXBlLHR5cGVBcmd1bWVudENvdW50Om4udHlwZUFyZ3VtZW50Q291bnQsZGVwczpbXSx0YXJnZXQ6TmMuSW5qZWN0YWJsZX07aWYodm9pZCAwIT09bi51c2VDbGFzcyl7bGV0IGwsYT1uLnVzZUNsYXNzLmV4cHJlc3Npb24uaXNFcXVpdmFsZW50KG4uaW50ZXJuYWxUeXBlKTt2b2lkIDAhPT1uLmRlcHMmJihsPW4uZGVwcyksZT12b2lkIDAhPT1sP25tKHsuLi5pLGRlbGVnYXRlOm4udXNlQ2xhc3MuZXhwcmVzc2lvbixkZWxlZ2F0ZURlcHM6bCxkZWxlZ2F0ZVR5cGU6Zl8uQ2xhc3N9KTphP25tKGkpOntzdGF0ZW1lbnRzOltdLGV4cHJlc3Npb246Rlgobi50eXBlLnZhbHVlLG4udXNlQ2xhc3MuZXhwcmVzc2lvbix0KX19ZWxzZSBlPXZvaWQgMCE9PW4udXNlRmFjdG9yeT92b2lkIDAhPT1uLmRlcHM/bm0oey4uLmksZGVsZWdhdGU6bi51c2VGYWN0b3J5LGRlbGVnYXRlRGVwczpuLmRlcHN8fFtdLGRlbGVnYXRlVHlwZTpmXy5GdW5jdGlvbn0pOntzdGF0ZW1lbnRzOltdLGV4cHJlc3Npb246cmEoW10sW25ldyBEbyhuLnVzZUZhY3RvcnkuY2FsbEZuKFtdKSldKX06dm9pZCAwIT09bi51c2VWYWx1ZT9ubSh7Li4uaSxleHByZXNzaW9uOm4udXNlVmFsdWUuZXhwcmVzc2lvbn0pOnZvaWQgMCE9PW4udXNlRXhpc3Rpbmc/bm0oey4uLmksZXhwcmVzc2lvbjpUbih0ZS5pbmplY3QpLmNhbGxGbihbbi51c2VFeGlzdGluZy5leHByZXNzaW9uXSl9KTp7c3RhdGVtZW50czpbXSxleHByZXNzaW9uOkZYKG4udHlwZS52YWx1ZSxuLmludGVybmFsVHlwZSx0KX07bGV0IHI9bi5pbnRlcm5hbFR5cGUsbz1uZXcgc2g7cmV0dXJuIG8uc2V0KCJ0b2tlbiIsciksby5zZXQoImZhY3RvcnkiLGUuZXhwcmVzc2lvbiksbnVsbCE9PW4ucHJvdmlkZWRJbi5leHByZXNzaW9uLnZhbHVlJiZvLnNldCgicHJvdmlkZWRJbiIsZnVuY3Rpb24oe2V4cHJlc3Npb246bixmb3J3YXJkUmVmOnR9KXtzd2l0Y2godCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gbjtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBUbih0ZS5mb3J3YXJkUmVmKS5jYWxsRm4oW3JhKFtdLFtuZXcgRG8obildKV0pfShuKX19KG4ucHJvdmlkZWRJbikpLHtleHByZXNzaW9uOlRuKHRlLlx1MDI3NVx1MDI3NWRlZmluZUluamVjdGFibGUpLmNhbGxGbihbby50b0xpdGVyYWxNYXAoKV0sdm9pZCAwLCEwKSx0eXBlOkZ3ZShuKSxzdGF0ZW1lbnRzOmUuc3RhdGVtZW50c319ZnVuY3Rpb24gRndlKG4pe3JldHVybiBuZXcgVmMoVG4odGUuSW5qZWN0YWJsZURlY2xhcmF0aW9uLFtJRChuLnR5cGUudHlwZSxuLnR5cGVBcmd1bWVudENvdW50KV0pKX1mdW5jdGlvbiBGWChuLHQsZSl7cmV0dXJuIG4ubm9kZT09PXQubm9kZT90LnByb3AoIlx1MDI3NWZhYyIpOk5YKGU/VG4odGUucmVzb2x2ZUZvcndhcmRSZWYpLmNhbGxGbihbdF0pOnQpfWZ1bmN0aW9uIE5YKG4pe3JldHVybiByYShbbmV3IGlhKCJ0IixWXyldLFtuZXcgRG8obi5wcm9wKCJcdTAyNzVmYWMiKS5jYWxsRm4oW1JpKCJ0IildKSldKX12YXIgTndlPVsvXlxzKiQvLC9bPD5dLywvXlt7fV0kLywvJigjfFthLXpdKS9pLC9eXC9cLy9dLERfPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zdGFydD10LHRoaXMuZW5kPWV9c3RhdGljIGZyb21BcnJheSh0KXtyZXR1cm4gdD8oZnVuY3Rpb24obix0KXtpZihudWxsIT10JiYoIUFycmF5LmlzQXJyYXkodCl8fDIhPXQubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkICdpbnRlcnBvbGF0aW9uJyB0byBiZSBhbiBhcnJheSwgW3N0YXJ0LCBlbmRdLiIpO2lmKG51bGwhPXQpe2xldCBlPXRbMF0saT10WzFdO053ZS5mb3JFYWNoKHI9PntpZihyLnRlc3QoZSl8fHIudGVzdChpKSl0aHJvdyBuZXcgRXJyb3IoYFsnJHtlfScsICcke2l9J10gY29udGFpbnMgdW51c2FibGUgaW50ZXJwb2xhdGlvbiBzeW1ib2wuYCl9KX19KDAsdCksbmV3IERfKHRbMF0sdFsxXSkpOlB1fX0sUHU9bmV3IERfKCJ7eyIsIn19IiksdGg9MTIzLE91PTEyNTtmdW5jdGlvbiBRVihuKXtyZXR1cm4gbj49OSYmbjw9MzJ8fDE2MD09bn1mdW5jdGlvbiAkcChuKXtyZXR1cm4gNDg8PW4mJm48PTU3fWZ1bmN0aW9uIEtWKG4pe3JldHVybiBuPj05NyYmbjw9MTIyfHxuPj02NSYmbjw9OTB9ZnVuY3Rpb24gY0sobil7cmV0dXJuIDEwPT09bnx8MTM9PT1ufWZ1bmN0aW9uIFZYKG4pe3JldHVybiA0ODw9biYmbjw9NTV9ZnVuY3Rpb24gV0Iobil7cmV0dXJuIDM5PT09bnx8MzQ9PT1ufHw5Nj09PW59dmFyIHZtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuZmlsZT10LHRoaXMub2Zmc2V0PWUsdGhpcy5saW5lPWksdGhpcy5jb2w9cn10b1N0cmluZygpe3JldHVybiBudWxsIT10aGlzLm9mZnNldD9gJHt0aGlzLmZpbGUudXJsfUAke3RoaXMubGluZX06JHt0aGlzLmNvbH1gOnRoaXMuZmlsZS51cmx9bW92ZUJ5KHQpe2xldCBlPXRoaXMuZmlsZS5jb250ZW50LGk9ZS5sZW5ndGgscj10aGlzLm9mZnNldCxvPXRoaXMubGluZSxzPXRoaXMuY29sO2Zvcig7cj4wJiZ0PDA7KWlmKHItLSx0KyssMTA9PWUuY2hhckNvZGVBdChyKSl7by0tO2xldCBsPWUuc3Vic3RyaW5nKDAsci0xKS5sYXN0SW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKDEwKSk7cz1sPjA/ci1sOnJ9ZWxzZSBzLS07Zm9yKDtyPGkmJnQ+MDspe2xldCBhPWUuY2hhckNvZGVBdChyKTtyKyssdC0tLDEwPT1hPyhvKysscz0wKTpzKyt9cmV0dXJuIG5ldyB2bSh0aGlzLmZpbGUscixvLHMpfWdldENvbnRleHQodCxlKXtsZXQgaT10aGlzLmZpbGUuY29udGVudCxyPXRoaXMub2Zmc2V0O2lmKG51bGwhPXIpe3I+aS5sZW5ndGgtMSYmKHI9aS5sZW5ndGgtMSk7bGV0IG89cixzPTAsYT0wO2Zvcig7czx0JiZyPjAmJihyLS0scysrLCJcbiIhPWlbcl18fCsrYSE9ZSk7KTtmb3Iocz0wLGE9MDtzPHQmJm88aS5sZW5ndGgtMSYmKG8rKyxzKyssIlxuIiE9aVtvXXx8KythIT1lKTspO3JldHVybntiZWZvcmU6aS5zdWJzdHJpbmcocix0aGlzLm9mZnNldCksYWZ0ZXI6aS5zdWJzdHJpbmcodGhpcy5vZmZzZXQsbysxKX19cmV0dXJuIG51bGx9fSxwRD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuY29udGVudD10LHRoaXMudXJsPWV9fSxHbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT10LHI9bnVsbCl7dGhpcy5zdGFydD10LHRoaXMuZW5kPWUsdGhpcy5mdWxsU3RhcnQ9aSx0aGlzLmRldGFpbHM9cn10b1N0cmluZygpe3JldHVybiB0aGlzLnN0YXJ0LmZpbGUuY29udGVudC5zdWJzdHJpbmcodGhpcy5zdGFydC5vZmZzZXQsdGhpcy5lbmQub2Zmc2V0KX19LGt1PSgoKT0+e3JldHVybihuPWt1fHwoa3U9e30pKVtuLldBUk5JTkc9MF09IldBUk5JTkciLG5bbi5FUlJPUj0xXT0iRVJST1IiLGt1O3ZhciBufSkoKSx5bT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT1rdS5FUlJPUil7dGhpcy5zcGFuPXQsdGhpcy5tc2c9ZSx0aGlzLmxldmVsPWl9Y29udGV4dHVhbE1lc3NhZ2UoKXtsZXQgdD10aGlzLnNwYW4uc3RhcnQuZ2V0Q29udGV4dCgxMDAsMyk7cmV0dXJuIHQ/YCR7dGhpcy5tc2d9ICgiJHt0LmJlZm9yZX1bJHtrdVt0aGlzLmxldmVsXX0gLT5dJHt0LmFmdGVyfSIpYDp0aGlzLm1zZ310b1N0cmluZygpe2xldCB0PXRoaXMuc3Bhbi5kZXRhaWxzP2AsICR7dGhpcy5zcGFuLmRldGFpbHN9YDoiIjtyZXR1cm5gJHt0aGlzLmNvbnRleHR1YWxNZXNzYWdlKCl9OiAke3RoaXMuc3Bhbi5zdGFydH0ke3R9YH19LFp3ZT0wO2Z1bmN0aW9uIG1fKG4pe3JldHVybiBuLnJlcGxhY2UoL1xXL2csIl8iKX12YXIgSFQsSFg9Jyh0aGlzJiZ0aGlzLl9fbWFrZVRlbXBsYXRlT2JqZWN0fHxmdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9KScscUI9Y2xhc3MgZXh0ZW5kcyBOQntjb25zdHJ1Y3Rvcigpe3N1cGVyKCExKX12aXNpdFdyYXBwZWROb2RlRXhwcih0LGUpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGVtaXQgYSBXcmFwcGVkTm9kZUV4cHIgaW4gSmF2YXNjcmlwdC4iKX12aXNpdERlY2xhcmVWYXJTdG10KHQsZSl7cmV0dXJuIGUucHJpbnQodCxgdmFyICR7dC5uYW1lfWApLHQudmFsdWUmJihlLnByaW50KHQsIiA9ICIpLHQudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsZSkpLGUucHJpbnRsbih0LCI7IiksbnVsbH12aXNpdFRhZ2dlZFRlbXBsYXRlRXhwcih0LGUpe2xldCBpPXQudGVtcGxhdGUuZWxlbWVudHM7cmV0dXJuIHQudGFnLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCxgKCR7SFh9KGApLGUucHJpbnQodCxgWyR7aS5tYXAocj0+cm0oci50ZXh0LCExKSkuam9pbigiLCAiKX1dLCBgKSxlLnByaW50KHQsYFske2kubWFwKHI9PnJtKHIucmF3VGV4dCwhMSkpLmpvaW4oIiwgIil9XSlgKSx0LnRlbXBsYXRlLmV4cHJlc3Npb25zLmZvckVhY2gocj0+e2UucHJpbnQodCwiLCAiKSxyLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpfSksZS5wcmludCh0LCIpIiksbnVsbH12aXNpdEZ1bmN0aW9uRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsYGZ1bmN0aW9uJHt0Lm5hbWU/IiAiK3QubmFtZToiIn0oYCksdGhpcy5fdmlzaXRQYXJhbXModC5wYXJhbXMsZSksZS5wcmludGxuKHQsIikgeyIpLGUuaW5jSW5kZW50KCksdGhpcy52aXNpdEFsbFN0YXRlbWVudHModC5zdGF0ZW1lbnRzLGUpLGUuZGVjSW5kZW50KCksZS5wcmludCh0LCJ9IiksbnVsbH12aXNpdERlY2xhcmVGdW5jdGlvblN0bXQodCxlKXtyZXR1cm4gZS5wcmludCh0LGBmdW5jdGlvbiAke3QubmFtZX0oYCksdGhpcy5fdmlzaXRQYXJhbXModC5wYXJhbXMsZSksZS5wcmludGxuKHQsIikgeyIpLGUuaW5jSW5kZW50KCksdGhpcy52aXNpdEFsbFN0YXRlbWVudHModC5zdGF0ZW1lbnRzLGUpLGUuZGVjSW5kZW50KCksZS5wcmludGxuKHQsIn0iKSxudWxsfXZpc2l0TG9jYWxpemVkU3RyaW5nKHQsZSl7ZS5wcmludCh0LGAkbG9jYWxpemUoJHtIWH0oYCk7bGV0IGk9W3Quc2VyaWFsaXplSTE4bkhlYWQoKV07Zm9yKGxldCByPTE7cjx0Lm1lc3NhZ2VQYXJ0cy5sZW5ndGg7cisrKWkucHVzaCh0LnNlcmlhbGl6ZUkxOG5UZW1wbGF0ZVBhcnQocikpO3JldHVybiBlLnByaW50KHQsYFske2kubWFwKHI9PnJtKHIuY29va2VkLCExKSkuam9pbigiLCAiKX1dLCBgKSxlLnByaW50KHQsYFske2kubWFwKHI9PnJtKHIucmF3LCExKSkuam9pbigiLCAiKX1dKWApLHQuZXhwcmVzc2lvbnMuZm9yRWFjaChyPT57ZS5wcmludCh0LCIsICIpLHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSl9KSxlLnByaW50KHQsIikiKSxudWxsfV92aXNpdFBhcmFtcyh0LGUpe3RoaXMudmlzaXRBbGxPYmplY3RzKGk9PmUucHJpbnQobnVsbCxpLm5hbWUpLHQsZSwiLCIpfX07ZnVuY3Rpb24gVVgoLi4ubil7aWYoIXBfLnRydXN0ZWRUeXBlcylyZXR1cm4gbmV3IEZ1bmN0aW9uKC4uLm4pO2xldCBpPWAoZnVuY3Rpb24gYW5vbnltb3VzKCR7bi5zbGljZSgwLC0xKS5qb2luKCIsIil9XG4pIHsgJHtuW24ubGVuZ3RoLTFdfVxufSlgLHI9cF8uZXZhbChmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1IVCYmKEhUPW51bGwscF8udHJ1c3RlZFR5cGVzKSl0cnl7SFQ9cF8udHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtaml0Iix7Y3JlYXRlU2NyaXB0Om49Pm59KX1jYXRjaHt9cmV0dXJuIEhUfSgpPy5jcmVhdGVTY3JpcHQobil8fG59KGkpKTtyZXR1cm4gdm9pZCAwPT09ci5iaW5kP25ldyBGdW5jdGlvbiguLi5uKTooci50b1N0cmluZz0oKT0+aSxyLmJpbmQocF8pKX12YXIgWEI9Y2xhc3MgZXh0ZW5kcyBxQntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMucmVmUmVzb2x2ZXI9dCx0aGlzLl9ldmFsQXJnTmFtZXM9W10sdGhpcy5fZXZhbEFyZ1ZhbHVlcz1bXSx0aGlzLl9ldmFsRXhwb3J0ZWRWYXJzPVtdfWNyZWF0ZVJldHVyblN0bXQodCl7bmV3IERvKG5ldyB4Xyh0aGlzLl9ldmFsRXhwb3J0ZWRWYXJzLm1hcChpPT5uZXcgdEQoaSxSaShpKSwhMSkpKSkudmlzaXRTdGF0ZW1lbnQodGhpcyx0KX1nZXRBcmdzKCl7bGV0IHQ9e307Zm9yKGxldCBlPTA7ZTx0aGlzLl9ldmFsQXJnTmFtZXMubGVuZ3RoO2UrKyl0W3RoaXMuX2V2YWxBcmdOYW1lc1tlXV09dGhpcy5fZXZhbEFyZ1ZhbHVlc1tlXTtyZXR1cm4gdH12aXNpdEV4dGVybmFsRXhwcih0LGUpe3JldHVybiB0aGlzLl9lbWl0UmVmZXJlbmNlVG9FeHRlcm5hbCh0LHRoaXMucmVmUmVzb2x2ZXIucmVzb2x2ZUV4dGVybmFsUmVmZXJlbmNlKHQudmFsdWUpLGUpLG51bGx9dmlzaXRXcmFwcGVkTm9kZUV4cHIodCxlKXtyZXR1cm4gdGhpcy5fZW1pdFJlZmVyZW5jZVRvRXh0ZXJuYWwodCx0Lm5vZGUsZSksbnVsbH12aXNpdERlY2xhcmVWYXJTdG10KHQsZSl7cmV0dXJuIHQuaGFzTW9kaWZpZXIobGwuRXhwb3J0ZWQpJiZ0aGlzLl9ldmFsRXhwb3J0ZWRWYXJzLnB1c2godC5uYW1lKSxzdXBlci52aXNpdERlY2xhcmVWYXJTdG10KHQsZSl9dmlzaXREZWNsYXJlRnVuY3Rpb25TdG10KHQsZSl7cmV0dXJuIHQuaGFzTW9kaWZpZXIobGwuRXhwb3J0ZWQpJiZ0aGlzLl9ldmFsRXhwb3J0ZWRWYXJzLnB1c2godC5uYW1lKSxzdXBlci52aXNpdERlY2xhcmVGdW5jdGlvblN0bXQodCxlKX1fZW1pdFJlZmVyZW5jZVRvRXh0ZXJuYWwodCxlLGkpe2xldCByPXRoaXMuX2V2YWxBcmdWYWx1ZXMuaW5kZXhPZihlKTtpZigtMT09PXIpe3I9dGhpcy5fZXZhbEFyZ1ZhbHVlcy5sZW5ndGgsdGhpcy5fZXZhbEFyZ1ZhbHVlcy5wdXNoKGUpO2xldCBvPWZ1bmN0aW9uKG4pe2lmKCFufHwhbi5yZWZlcmVuY2UpcmV0dXJuIG51bGw7bGV0IHQ9bi5yZWZlcmVuY2U7aWYodC5fX2Fub255bW91c1R5cGUpcmV0dXJuIHQuX19hbm9ueW1vdXNUeXBlO2lmKHQuX19mb3J3YXJkX3JlZl9fKXJldHVybiJfX2ZvcndhcmRfcmVmX18iO2xldCBlPWtRKHQpO3JldHVybiBlLmluZGV4T2YoIigiKT49MD8oZT0iYW5vbnltb3VzXyIrWndlKyssdC5fX2Fub255bW91c1R5cGU9ZSk6ZT1tXyhlKSxlfSh7cmVmZXJlbmNlOmV9KXx8InZhbCI7dGhpcy5fZXZhbEFyZ05hbWVzLnB1c2goYGppdF8ke299XyR7cn1gKX1pLnByaW50KHQsdGhpcy5fZXZhbEFyZ05hbWVzW3JdKX19O2Z1bmN0aW9uIHpYKG4pe2xldCB0PW5ldyBzaDtudWxsIT09bi5wcm92aWRlcnMmJnQuc2V0KCJwcm92aWRlcnMiLG4ucHJvdmlkZXJzKSxuLmltcG9ydHMubGVuZ3RoPjAmJnQuc2V0KCJpbXBvcnRzIixfcihuLmltcG9ydHMpKTtsZXQgZT1Ubih0ZS5kZWZpbmVJbmplY3RvcikuY2FsbEZuKFt0LnRvTGl0ZXJhbE1hcCgpXSx2b2lkIDAsITApLGk9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBWYyhUbih0ZS5JbmplY3RvckRlY2xhcmF0aW9uLFtuZXcgVmMobi50eXBlLnR5cGUpXSkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjplLHR5cGU6aSxzdGF0ZW1lbnRzOltdfX12YXIgZ189KCgpPT57cmV0dXJuKG49Z198fChnXz17fSkpW24uSW5saW5lPTBdPSJJbmxpbmUiLG5bbi5TaWRlRWZmZWN0PTFdPSJTaWRlRWZmZWN0IixuW24uT21pdD0yXT0iT21pdCIsZ187dmFyIG59KSgpO2Z1bmN0aW9uIGlTZShuKXtsZXR7YWRqYWNlbnRUeXBlOnQsaW50ZXJuYWxUeXBlOmUsYm9vdHN0cmFwOmksZGVjbGFyYXRpb25zOnIsaW1wb3J0czpvLGV4cG9ydHM6cyxzY2hlbWFzOmEsY29udGFpbnNGb3J3YXJkRGVjbHM6bCxzZWxlY3RvclNjb3BlTW9kZTpjLGlkOnV9PW4sZD1bXSxwPW5ldyBzaDtpZihwLnNldCgidHlwZSIsZSksaS5sZW5ndGg+MCYmcC5zZXQoImJvb3RzdHJhcCIsb20oaSxsKSksYz09PWdfLklubGluZSlyLmxlbmd0aD4wJiZwLnNldCgiZGVjbGFyYXRpb25zIixvbShyLGwpKSxvLmxlbmd0aD4wJiZwLnNldCgiaW1wb3J0cyIsb20obyxsKSkscy5sZW5ndGg+MCYmcC5zZXQoImV4cG9ydHMiLG9tKHMsbCkpO2Vsc2UgaWYoYz09PWdfLlNpZGVFZmZlY3Qpe2xldCBtPWZ1bmN0aW9uKG4pe2xldHthZGphY2VudFR5cGU6dCxkZWNsYXJhdGlvbnM6ZSxpbXBvcnRzOmksZXhwb3J0czpyLGNvbnRhaW5zRm9yd2FyZERlY2xzOm99PW4scz1uZXcgc2g7aWYoZS5sZW5ndGg+MCYmcy5zZXQoImRlY2xhcmF0aW9ucyIsb20oZSxvKSksaS5sZW5ndGg+MCYmcy5zZXQoImltcG9ydHMiLG9tKGksbykpLHIubGVuZ3RoPjAmJnMuc2V0KCJleHBvcnRzIixvbShyLG8pKSwwPT09T2JqZWN0LmtleXMocy52YWx1ZXMpLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbD1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgeV8oe25hbWU6Im5nSml0TW9kZSIsbW9kdWxlTmFtZTpudWxsfSksaT1uZXcgZ3IoQ24uSWRlbnRpY2FsLG5ldyB2XyhlKSxodCgidW5kZWZpbmVkIikpLHI9bmV3IGdyKENuLk9yLGksZSx2b2lkIDAsdm9pZCAwLCEwKTtyZXR1cm4gbmV3IGdyKENuLkFuZCxyLHQpfSgwLG4pfShuZXcgb2goVG4odGUuc2V0TmdNb2R1bGVTY29wZSksW3Qscy50b0xpdGVyYWxNYXAoKV0pKSxjPW5ldyBwbShbXSxbbC50b1N0bXQoKV0pO3JldHVybiBuZXcgb2goYyxbXSkudG9TdG10KCl9KG4pO251bGwhPT1tJiZkLnB1c2gobSl9bnVsbCE9PWEmJmEubGVuZ3RoPjAmJnAuc2V0KCJzY2hlbWFzIixfcihhLm1hcChtPT5tLnZhbHVlKSkpLG51bGwhPT11JiYocC5zZXQoImlkIix1KSxkLnB1c2goVG4odGUucmVnaXN0ZXJOZ01vZHVsZVR5cGUpLmNhbGxGbihbdCx1XSkudG9TdG10KCkpKTtsZXQgaD1Ubih0ZS5kZWZpbmVOZ01vZHVsZSkuY2FsbEZuKFtwLnRvTGl0ZXJhbE1hcCgpXSx2b2lkIDAsITApLGY9ZnVuY3Rpb24oe3R5cGU6bixkZWNsYXJhdGlvbnM6dCxleHBvcnRzOmUsaW1wb3J0czppLGluY2x1ZGVJbXBvcnRUeXBlczpyLHB1YmxpY0RlY2xhcmF0aW9uVHlwZXM6b30pe3JldHVybiBuZXcgVmMoVG4odGUuTmdNb2R1bGVEZWNsYXJhdGlvbixbbmV3IFZjKG4udHlwZSksbnVsbD09PW8/YUIodCk6YVNlKG8pLHI/YUIoaSk6SmQsYUIoZSldKSl9KG4pO3JldHVybntleHByZXNzaW9uOmgsdHlwZTpmLHN0YXRlbWVudHM6ZH19ZnVuY3Rpb24gYUIobil7bGV0IHQ9bi5tYXAoZT0+QlYoZS50eXBlKSk7cmV0dXJuIG4ubGVuZ3RoPjA/dWwoX3IodCkpOkpkfWZ1bmN0aW9uIGFTZShuKXtsZXQgdD1uLm1hcChlPT5CVihlKSk7cmV0dXJuIG4ubGVuZ3RoPjA/dWwoX3IodCkpOkpkfWZ1bmN0aW9uIGpYKG4pe2xldCB0PVtdO3QucHVzaCh7a2V5OiJuYW1lIix2YWx1ZTpodChuLnBpcGVOYW1lKSxxdW90ZWQ6ITF9KSx0LnB1c2goe2tleToidHlwZSIsdmFsdWU6bi50eXBlLnZhbHVlLHF1b3RlZDohMX0pLHQucHVzaCh7a2V5OiJwdXJlIix2YWx1ZTpodChuLnB1cmUpLHF1b3RlZDohMX0pLG4uaXNTdGFuZGFsb25lJiZ0LnB1c2goe2tleToic3RhbmRhbG9uZSIsdmFsdWU6aHQoITApLHF1b3RlZDohMX0pO2xldCBlPVRuKHRlLmRlZmluZVBpcGUpLmNhbGxGbihbcWwodCldLHZvaWQgMCwhMCksaT1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IFZjKFRuKHRlLlBpcGVEZWNsYXJhdGlvbixbSUQobi50eXBlLnR5cGUsbi50eXBlQXJndW1lbnRDb3VudCksbmV3IFZjKG5ldyBjbChuLnBpcGVOYW1lKSksbmV3IFZjKG5ldyBjbChuLmlzU3RhbmRhbG9uZSkpXSkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjplLHR5cGU6aSxzdGF0ZW1lbnRzOltdfX12YXIgX189KCgpPT57cmV0dXJuKG49X198fChfXz17fSkpW24uRGlyZWN0aXZlPTBdPSJEaXJlY3RpdmUiLG5bbi5QaXBlPTFdPSJQaXBlIixuW24uTmdNb2R1bGU9Ml09Ik5nTW9kdWxlIixfXzt2YXIgbn0pKCksUkM9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5pbnB1dD1lLHRoaXMuZXJyTG9jYXRpb249aSx0aGlzLmN0eExvY2F0aW9uPXIsdGhpcy5tZXNzYWdlPWBQYXJzZXIgRXJyb3I6ICR7dH0gJHtpfSBbJHtlfV0gaW4gJHtyfWB9fSxibT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1lfXRvQWJzb2x1dGUodCl7cmV0dXJuIG5ldyBhbCh0K3RoaXMuc3RhcnQsdCt0aGlzLmVuZCl9fSxBbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3Bhbj10LHRoaXMuc291cmNlU3Bhbj1lfXRvU3RyaW5nKCl7cmV0dXJuIkFTVCJ9fSxBXz1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMubmFtZVNwYW49aX19LElhPWNsYXNzIGV4dGVuZHMgQW97dmlzaXQodCxlPW51bGwpe319LHhtPWNsYXNzIGV4dGVuZHMgQW97dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0SW1wbGljaXRSZWNlaXZlcih0aGlzLGUpfX0sT0M9Y2xhc3MgZXh0ZW5kcyB4bXt2aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRUaGlzUmVjZWl2ZXI/Lih0aGlzLGUpfX0sa0M9Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb25zPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0Q2hhaW4odGhpcyxlKX19LEZDPWNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUpLHRoaXMuY29uZGl0aW9uPWksdGhpcy50cnVlRXhwPXIsdGhpcy5mYWxzZUV4cD1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdENvbmRpdGlvbmFsKHRoaXMsZSl9fSxMdT1jbGFzcyBleHRlbmRzIEFfe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlLGkpLHRoaXMucmVjZWl2ZXI9cix0aGlzLm5hbWU9b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRQcm9wZXJ0eVJlYWQodGhpcyxlKX19LE5DPWNsYXNzIGV4dGVuZHMgQV97Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHQsZSxpKSx0aGlzLnJlY2VpdmVyPXIsdGhpcy5uYW1lPW8sdGhpcy52YWx1ZT1zfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFByb3BlcnR5V3JpdGUodGhpcyxlKX19LExDPWNsYXNzIGV4dGVuZHMgQV97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUsaSksdGhpcy5yZWNlaXZlcj1yLHRoaXMubmFtZT1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFNhZmVQcm9wZXJ0eVJlYWQodGhpcyxlKX19LElfPWNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRLZXllZFJlYWQodGhpcyxlKX19LFBfPWNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRTYWZlS2V5ZWRSZWFkKHRoaXMsZSl9fSxCQz1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cix0aGlzLnZhbHVlPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0S2V5ZWRXcml0ZSh0aGlzLGUpfX0sUl89Y2xhc3MgZXh0ZW5kcyBBX3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7c3VwZXIodCxlLHMpLHRoaXMuZXhwPWksdGhpcy5uYW1lPXIsdGhpcy5hcmdzPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0UGlwZSh0aGlzLGUpfX0sdGE9Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLnZhbHVlPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0TGl0ZXJhbFByaW1pdGl2ZSh0aGlzLGUpfX0sT189Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb25zPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0TGl0ZXJhbEFycmF5KHRoaXMsZSl9fSxWQz1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSksdGhpcy5rZXlzPWksdGhpcy52YWx1ZXM9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRMaXRlcmFsTWFwKHRoaXMsZSl9fSx2cz1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSksdGhpcy5zdHJpbmdzPWksdGhpcy5leHByZXNzaW9ucz1yfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdEludGVycG9sYXRpb24odGhpcyxlKX19LEdsPWNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUpLHRoaXMub3BlcmF0aW9uPWksdGhpcy5sZWZ0PXIsdGhpcy5yaWdodD1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdEJpbmFyeSh0aGlzLGUpfX0semM9Y2xhc3MgZXh0ZW5kcyBHbHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXtzdXBlcih0LGUsbyxzLGEpLHRoaXMub3BlcmF0b3I9aSx0aGlzLmV4cHI9cix0aGlzLmxlZnQ9bnVsbCx0aGlzLnJpZ2h0PW51bGwsdGhpcy5vcGVyYXRpb249bnVsbH1zdGF0aWMgY3JlYXRlTWludXModCxlLGkpe3JldHVybiBuZXcgemModCxlLCItIixpLCItIixuZXcgdGEodCxlLDApLGkpfXN0YXRpYyBjcmVhdGVQbHVzKHQsZSxpKXtyZXR1cm4gbmV3IHpjKHQsZSwiKyIsaSwiLSIsaSxuZXcgdGEodCxlLDApKX12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHZvaWQgMCE9PXQudmlzaXRVbmFyeT90LnZpc2l0VW5hcnkodGhpcyxlKTp0LnZpc2l0QmluYXJ5KHRoaXMsZSl9fSxIQz1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMuZXhwcmVzc2lvbj1pfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFByZWZpeE5vdCh0aGlzLGUpfX0sVUM9Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb249aX12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXROb25OdWxsQXNzZXJ0KHRoaXMsZSl9fSxhaD1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5hcmdzPXIsdGhpcy5hcmd1bWVudFNwYW49b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRDYWxsKHRoaXMsZSl9fSxrXz1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5hcmdzPXIsdGhpcy5hcmd1bWVudFNwYW49b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRTYWZlQ2FsbCh0aGlzLGUpfX0sYWw9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZX19LFJ1PWNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihuZXcgYm0oMCxudWxsPT09ZT8wOmUubGVuZ3RoKSxuZXcgYWwocixudWxsPT09ZT9yOnIrZS5sZW5ndGgpKSx0aGlzLmFzdD10LHRoaXMuc291cmNlPWUsdGhpcy5sb2NhdGlvbj1pLHRoaXMuZXJyb3JzPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0QVNUV2l0aFNvdXJjZT90LnZpc2l0QVNUV2l0aFNvdXJjZSh0aGlzLGUpOnRoaXMuYXN0LnZpc2l0KHQsZSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnNvdXJjZX0gaW4gJHt0aGlzLmxvY2F0aW9ufWB9fSx6Qz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zb3VyY2VTcGFuPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPWl9fSxaQj1jbGFzc3t2aXNpdCh0LGUpe3QudmlzaXQodGhpcyxlKX12aXNpdFVuYXJ5KHQsZSl7dGhpcy52aXNpdCh0LmV4cHIsZSl9dmlzaXRCaW5hcnkodCxlKXt0aGlzLnZpc2l0KHQubGVmdCxlKSx0aGlzLnZpc2l0KHQucmlnaHQsZSl9dmlzaXRDaGFpbih0LGUpe3RoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyxlKX12aXNpdENvbmRpdGlvbmFsKHQsZSl7dGhpcy52aXNpdCh0LmNvbmRpdGlvbixlKSx0aGlzLnZpc2l0KHQudHJ1ZUV4cCxlKSx0aGlzLnZpc2l0KHQuZmFsc2VFeHAsZSl9dmlzaXRQaXBlKHQsZSl7dGhpcy52aXNpdCh0LmV4cCxlKSx0aGlzLnZpc2l0QWxsKHQuYXJncyxlKX12aXNpdEltcGxpY2l0UmVjZWl2ZXIodCxlKXt9dmlzaXRUaGlzUmVjZWl2ZXIodCxlKXt9dmlzaXRJbnRlcnBvbGF0aW9uKHQsZSl7dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zLGUpfXZpc2l0S2V5ZWRSZWFkKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSl9dmlzaXRLZXllZFdyaXRlKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSksdGhpcy52aXNpdCh0LnZhbHVlLGUpfXZpc2l0TGl0ZXJhbEFycmF5KHQsZSl7dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zLGUpfXZpc2l0TGl0ZXJhbE1hcCh0LGUpe3RoaXMudmlzaXRBbGwodC52YWx1ZXMsZSl9dmlzaXRMaXRlcmFsUHJpbWl0aXZlKHQsZSl7fXZpc2l0UHJlZml4Tm90KHQsZSl7dGhpcy52aXNpdCh0LmV4cHJlc3Npb24sZSl9dmlzaXROb25OdWxsQXNzZXJ0KHQsZSl7dGhpcy52aXNpdCh0LmV4cHJlc3Npb24sZSl9dmlzaXRQcm9wZXJ0eVJlYWQodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSl9dmlzaXRQcm9wZXJ0eVdyaXRlKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC52YWx1ZSxlKX12aXNpdFNhZmVQcm9wZXJ0eVJlYWQodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSl9dmlzaXRTYWZlS2V5ZWRSZWFkKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSl9dmlzaXRDYWxsKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXRBbGwodC5hcmdzLGUpfXZpc2l0U2FmZUNhbGwodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSksdGhpcy52aXNpdEFsbCh0LmFyZ3MsZSl9dmlzaXRBbGwodCxlKXtmb3IobGV0IGkgb2YgdCl0aGlzLnZpc2l0KGksZSl9fSxKQj1jbGFzc3t2aXNpdEltcGxpY2l0UmVjZWl2ZXIodCxlKXtyZXR1cm4gdH12aXNpdFRoaXNSZWNlaXZlcih0LGUpe3JldHVybiB0fXZpc2l0SW50ZXJwb2xhdGlvbih0LGUpe3JldHVybiBuZXcgdnModC5zcGFuLHQuc291cmNlU3Bhbix0LnN0cmluZ3MsdGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKSl9dmlzaXRMaXRlcmFsUHJpbWl0aXZlKHQsZSl7cmV0dXJuIG5ldyB0YSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQudmFsdWUpfXZpc2l0UHJvcGVydHlSZWFkKHQsZSl7cmV0dXJuIG5ldyBMdSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQubmFtZVNwYW4sdC5yZWNlaXZlci52aXNpdCh0aGlzKSx0Lm5hbWUpfXZpc2l0UHJvcGVydHlXcml0ZSh0LGUpe3JldHVybiBuZXcgTkModC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5uYW1lLHQudmFsdWUudmlzaXQodGhpcykpfXZpc2l0U2FmZVByb3BlcnR5UmVhZCh0LGUpe3JldHVybiBuZXcgTEModC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5uYW1lKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3JldHVybiBuZXcgT18odC5zcGFuLHQuc291cmNlU3Bhbix0aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpKX12aXNpdExpdGVyYWxNYXAodCxlKXtyZXR1cm4gbmV3IFZDKHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5rZXlzLHRoaXMudmlzaXRBbGwodC52YWx1ZXMpKX12aXNpdFVuYXJ5KHQsZSl7c3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6cmV0dXJuIHpjLmNyZWF0ZVBsdXModC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHIudmlzaXQodGhpcykpO2Nhc2UiLSI6cmV0dXJuIHpjLmNyZWF0ZU1pbnVzKHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5leHByLnZpc2l0KHRoaXMpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biB1bmFyeSBvcGVyYXRvciAke3Qub3BlcmF0b3J9YCl9fXZpc2l0QmluYXJ5KHQsZSl7cmV0dXJuIG5ldyBHbCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQub3BlcmF0aW9uLHQubGVmdC52aXNpdCh0aGlzKSx0LnJpZ2h0LnZpc2l0KHRoaXMpKX12aXNpdFByZWZpeE5vdCh0LGUpe3JldHVybiBuZXcgSEModC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHJlc3Npb24udmlzaXQodGhpcykpfXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe3JldHVybiBuZXcgVUModC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHJlc3Npb24udmlzaXQodGhpcykpfXZpc2l0Q29uZGl0aW9uYWwodCxlKXtyZXR1cm4gbmV3IEZDKHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5jb25kaXRpb24udmlzaXQodGhpcyksdC50cnVlRXhwLnZpc2l0KHRoaXMpLHQuZmFsc2VFeHAudmlzaXQodGhpcykpfXZpc2l0UGlwZSh0LGUpe3JldHVybiBuZXcgUl8odC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cC52aXNpdCh0aGlzKSx0Lm5hbWUsdGhpcy52aXNpdEFsbCh0LmFyZ3MpLHQubmFtZVNwYW4pfXZpc2l0S2V5ZWRSZWFkKHQsZSl7cmV0dXJuIG5ldyBJXyh0LnNwYW4sdC5zb3VyY2VTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5rZXkudmlzaXQodGhpcykpfXZpc2l0S2V5ZWRXcml0ZSh0LGUpe3JldHVybiBuZXcgQkModC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHQua2V5LnZpc2l0KHRoaXMpLHQudmFsdWUudmlzaXQodGhpcykpfXZpc2l0Q2FsbCh0LGUpe3JldHVybiBuZXcgYWgodC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHRoaXMudmlzaXRBbGwodC5hcmdzKSx0LmFyZ3VtZW50U3Bhbil9dmlzaXRTYWZlQ2FsbCh0LGUpe3JldHVybiBuZXcga18odC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHRoaXMudmlzaXRBbGwodC5hcmdzKSx0LmFyZ3VtZW50U3Bhbil9dmlzaXRBbGwodCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDsrK2kpZVtpXT10W2ldLnZpc2l0KHRoaXMpO3JldHVybiBlfXZpc2l0Q2hhaW4odCxlKXtyZXR1cm4gbmV3IGtDKHQuc3Bhbix0LnNvdXJjZVNwYW4sdGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKSl9dmlzaXRTYWZlS2V5ZWRSZWFkKHQsZSl7cmV0dXJuIG5ldyBQXyh0LnNwYW4sdC5zb3VyY2VTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5rZXkudmlzaXQodGhpcykpfX0sJEI9Y2xhc3N7dmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl7cmV0dXJuIHR9dmlzaXRUaGlzUmVjZWl2ZXIodCxlKXtyZXR1cm4gdH12aXNpdEludGVycG9sYXRpb24odCxlKXtsZXQgaT10aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpO3JldHVybiBpIT09dC5leHByZXNzaW9ucz9uZXcgdnModC5zcGFuLHQuc291cmNlU3Bhbix0LnN0cmluZ3MsaSk6dH12aXNpdExpdGVyYWxQcmltaXRpdmUodCxlKXtyZXR1cm4gdH12aXNpdFByb3BlcnR5UmVhZCh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyP25ldyBMdSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQubmFtZVNwYW4saSx0Lm5hbWUpOnR9dmlzaXRQcm9wZXJ0eVdyaXRlKHQsZSl7bGV0IGk9dC5yZWNlaXZlci52aXNpdCh0aGlzKSxyPXQudmFsdWUudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC52YWx1ZT9uZXcgTkModC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLGksdC5uYW1lLHIpOnR9dmlzaXRTYWZlUHJvcGVydHlSZWFkKHQsZSl7bGV0IGk9dC5yZWNlaXZlci52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQucmVjZWl2ZXI/bmV3IExDKHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5uYW1lU3BhbixpLHQubmFtZSk6dH12aXNpdExpdGVyYWxBcnJheSh0LGUpe2xldCBpPXRoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyk7cmV0dXJuIGkhPT10LmV4cHJlc3Npb25zP25ldyBPXyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpOnR9dmlzaXRMaXRlcmFsTWFwKHQsZSl7bGV0IGk9dGhpcy52aXNpdEFsbCh0LnZhbHVlcyk7cmV0dXJuIGkhPT10LnZhbHVlcz9uZXcgVkModC5zcGFuLHQuc291cmNlU3Bhbix0LmtleXMsaSk6dH12aXNpdFVuYXJ5KHQsZSl7bGV0IGk9dC5leHByLnZpc2l0KHRoaXMpO2lmKGkhPT10LmV4cHIpc3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6cmV0dXJuIHpjLmNyZWF0ZVBsdXModC5zcGFuLHQuc291cmNlU3BhbixpKTtjYXNlIi0iOnJldHVybiB6Yy5jcmVhdGVNaW51cyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHVuYXJ5IG9wZXJhdG9yICR7dC5vcGVyYXRvcn1gKX1yZXR1cm4gdH12aXNpdEJpbmFyeSh0LGUpe2xldCBpPXQubGVmdC52aXNpdCh0aGlzKSxyPXQucmlnaHQudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LmxlZnR8fHIhPT10LnJpZ2h0P25ldyBHbCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQub3BlcmF0aW9uLGkscik6dH12aXNpdFByZWZpeE5vdCh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbi52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbj9uZXcgSEModC5zcGFuLHQuc291cmNlU3BhbixpKTp0fXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbi52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbj9uZXcgVUModC5zcGFuLHQuc291cmNlU3BhbixpKTp0fXZpc2l0Q29uZGl0aW9uYWwodCxlKXtsZXQgaT10LmNvbmRpdGlvbi52aXNpdCh0aGlzKSxyPXQudHJ1ZUV4cC52aXNpdCh0aGlzKSxvPXQuZmFsc2VFeHAudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LmNvbmRpdGlvbnx8ciE9PXQudHJ1ZUV4cHx8byE9PXQuZmFsc2VFeHA/bmV3IEZDKHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyLG8pOnR9dmlzaXRQaXBlKHQsZSl7bGV0IGk9dC5leHAudmlzaXQodGhpcykscj10aGlzLnZpc2l0QWxsKHQuYXJncyk7cmV0dXJuIGkhPT10LmV4cHx8ciE9PXQuYXJncz9uZXcgUl8odC5zcGFuLHQuc291cmNlU3BhbixpLHQubmFtZSxyLHQubmFtZVNwYW4pOnR9dmlzaXRLZXllZFJlYWQodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dC5rZXkudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXk/bmV3IElfKHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyKTp0fXZpc2l0S2V5ZWRXcml0ZSh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcykscj10LmtleS52aXNpdCh0aGlzKSxvPXQudmFsdWUudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXl8fG8hPT10LnZhbHVlP25ldyBCQyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkscixvKTp0fXZpc2l0QWxsKHQpe2xldCBlPVtdLGk9ITE7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDsrK3Ipe2xldCBvPXRbcl0scz1vLnZpc2l0KHRoaXMpO2Vbcl09cyxpPWl8fHMhPT1vfXJldHVybiBpP2U6dH12aXNpdENoYWluKHQsZSl7bGV0IGk9dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbnM/bmV3IGtDKHQuc3Bhbix0LnNvdXJjZVNwYW4saSk6dH12aXNpdENhbGwodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dGhpcy52aXNpdEFsbCh0LmFyZ3MpO3JldHVybiBpIT09dC5yZWNlaXZlcnx8ciE9PXQuYXJncz9uZXcgYWgodC5zcGFuLHQuc291cmNlU3BhbixpLHIsdC5hcmd1bWVudFNwYW4pOnR9dmlzaXRTYWZlQ2FsbCh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcykscj10aGlzLnZpc2l0QWxsKHQuYXJncyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5hcmdzP25ldyBrXyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkscix0LmFyZ3VtZW50U3Bhbik6dH12aXNpdFNhZmVLZXllZFJlYWQodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dC5rZXkudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXk/bmV3IFBfKHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyKTp0fX0scEM9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3RoaXMubmFtZT10LHRoaXMuZXhwcmVzc2lvbj1lLHRoaXMudHlwZT1pLHRoaXMuc291cmNlU3Bhbj1yLHRoaXMua2V5U3Bhbj1vLHRoaXMudmFsdWVTcGFuPXMsdGhpcy5pc0xpdGVyYWw9dGhpcy50eXBlPT09aWguTElURVJBTF9BVFRSLHRoaXMuaXNBbmltYXRpb249dGhpcy50eXBlPT09aWguQU5JTUFUSU9OfX0saWg9KCgpPT57cmV0dXJuKG49aWh8fChpaD17fSkpW24uREVGQVVMVD0wXT0iREVGQVVMVCIsbltuLkxJVEVSQUxfQVRUUj0xXT0iTElURVJBTF9BVFRSIixuW24uQU5JTUFUSU9OPTJdPSJBTklNQVRJT04iLGloO3ZhciBufSkoKSxoRD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXt0aGlzLm5hbWU9dCx0aGlzLnRhcmdldE9yUGhhc2U9ZSx0aGlzLnR5cGU9aSx0aGlzLmhhbmRsZXI9cix0aGlzLnNvdXJjZVNwYW49byx0aGlzLmhhbmRsZXJTcGFuPXMsdGhpcy5rZXlTcGFuPWF9fSxlVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3RoaXMubmFtZT10LHRoaXMudmFsdWU9ZSx0aGlzLnNvdXJjZVNwYW49aSx0aGlzLmtleVNwYW49cix0aGlzLnZhbHVlU3Bhbj1vfX0sZkQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsKXt0aGlzLm5hbWU9dCx0aGlzLnR5cGU9ZSx0aGlzLnNlY3VyaXR5Q29udGV4dD1pLHRoaXMudmFsdWU9cix0aGlzLnVuaXQ9byx0aGlzLnNvdXJjZVNwYW49cyx0aGlzLmtleVNwYW49YSx0aGlzLnZhbHVlU3Bhbj1sfX0sakM9Y2xhc3N7fTtmdW5jdGlvbiBjU2Uobix0LGUsaSxyLG8scyl7bnx8KG49bmV3IG1EKHMpKTtsZXQgYT1mdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBpVihuKTtyZXR1cm4gdC52aXNpdChlKX0obix0KX0oe2NyZWF0ZUxpdGVyYWxBcnJheUNvbnZlcnRlcjpkPT5wPT5fcihwKSxjcmVhdGVMaXRlcmFsTWFwQ29udmVydGVyOmQ9PnA9PnFsKGQubWFwKChmLG0pPT4oe2tleTpmLmtleSx2YWx1ZTpwW21dLHF1b3RlZDpmLnF1b3RlZH0pKSksY3JlYXRlUGlwZUNvbnZlcnRlcjpkPT57dGhyb3cgbmV3IEVycm9yKGBJbGxlZ2FsIFN0YXRlOiBBY3Rpb25zIGFyZSBub3QgYWxsb3dlZCB0byBjb250YWluIHBpcGVzLiBQaXBlOiAke2R9YCl9fSxlKSxsPW5ldyBHQyhuLHQsaSwhMSxyLG8pLGM9W107aEsoYS52aXNpdChsLHppLlN0YXRlbWVudCksYyksZnVuY3Rpb24obix0LGUpe2ZvcihsZXQgaT1uLTE7aT49MDtpLS0pZS51bnNoaWZ0KHBLKHQsaSkpfShsLnRlbXBvcmFyeUNvdW50LGksYyksbC51c2VzSW1wbGljaXRSZWNlaXZlciYmbi5ub3RpZnlJbXBsaWNpdFJlY2VpdmVyVXNlKCk7bGV0IHU9Yy5sZW5ndGgtMTtpZih1Pj0wKXtsZXQgZD1jW3VdO2QgaW5zdGFuY2VvZiBIdSYmKGNbdV09bmV3IERvKGQuZXhwcikpfXJldHVybiBjfWZ1bmN0aW9uIHVLKG4sdCxlLGkpe258fChuPW5ldyBtRCk7bGV0IHI9bmV3IEdDKG4sdCxpLCExKSxvPWUudmlzaXQocix6aS5FeHByZXNzaW9uKSxzPWRLKHIsaSk7cmV0dXJuIHIudXNlc0ltcGxpY2l0UmVjZWl2ZXImJm4ubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RtdHM9dCx0aGlzLmN1cnJWYWxFeHByPWV9fShzLG8pfWZ1bmN0aW9uIGRLKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTxuLnRlbXBvcmFyeUNvdW50O2krKyllLnB1c2gocEsodCxpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gblYobix0KXtyZXR1cm5gdG1wXyR7bn1fJHt0fWB9ZnVuY3Rpb24gcEsobix0KXtyZXR1cm4gbmV3IFZ1KG5WKG4sdCkpfWpDLmV2ZW50PVJpKCIkZXZlbnQiKTt2YXIgemk9KCgpPT57cmV0dXJuKG49eml8fCh6aT17fSkpW24uU3RhdGVtZW50PTBdPSJTdGF0ZW1lbnQiLG5bbi5FeHByZXNzaW9uPTFdPSJFeHByZXNzaW9uIix6aTt2YXIgbn0pKCk7ZnVuY3Rpb24gR1gobix0KXtpZihuIT09emkuRXhwcmVzc2lvbil0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIGV4cHJlc3Npb24sIGJ1dCBzYXcgJHt0fWApfWZ1bmN0aW9uICRzKG4sdCl7cmV0dXJuIG49PT16aS5TdGF0ZW1lbnQ/dC50b1N0bXQoKTp0fXZhciBpVj1jbGFzcyBleHRlbmRzIEpCe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fY29udmVydGVyRmFjdG9yeT10fXZpc2l0UGlwZSh0LGUpe2xldCBpPVt0LmV4cCwuLi50LmFyZ3NdLm1hcChyPT5yLnZpc2l0KHRoaXMsZSkpO3JldHVybiBuZXcgcmgodC5zcGFuLHQuc291cmNlU3BhbixpLHRoaXMuX2NvbnZlcnRlckZhY3RvcnkuY3JlYXRlUGlwZUNvbnZlcnRlcih0Lm5hbWUsaS5sZW5ndGgpKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbnMubWFwKHI9PnIudmlzaXQodGhpcyxlKSk7cmV0dXJuIG5ldyByaCh0LnNwYW4sdC5zb3VyY2VTcGFuLGksdGhpcy5fY29udmVydGVyRmFjdG9yeS5jcmVhdGVMaXRlcmFsQXJyYXlDb252ZXJ0ZXIodC5leHByZXNzaW9ucy5sZW5ndGgpKX12aXNpdExpdGVyYWxNYXAodCxlKXtsZXQgaT10LnZhbHVlcy5tYXAocj0+ci52aXNpdCh0aGlzLGUpKTtyZXR1cm4gbmV3IHJoKHQuc3Bhbix0LnNvdXJjZVNwYW4saSx0aGlzLl9jb252ZXJ0ZXJGYWN0b3J5LmNyZWF0ZUxpdGVyYWxNYXBDb252ZXJ0ZXIodC5rZXlzKSl9fSxHQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5fbG9jYWxSZXNvbHZlcj10LHRoaXMuX2ltcGxpY2l0UmVjZWl2ZXI9ZSx0aGlzLmJpbmRpbmdJZD1pLHRoaXMuc3VwcG9ydHNJbnRlcnBvbGF0aW9uPXIsdGhpcy5iYXNlU291cmNlU3Bhbj1vLHRoaXMuaW1wbGljaXRSZWNlaXZlckFjY2Vzc2VzPXMsdGhpcy5fbm9kZU1hcD1uZXcgTWFwLHRoaXMuX3Jlc3VsdE1hcD1uZXcgTWFwLHRoaXMuX2N1cnJlbnRUZW1wb3Jhcnk9MCx0aGlzLnRlbXBvcmFyeUNvdW50PTAsdGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj0hMX12aXNpdFVuYXJ5KHQsZSl7bGV0IGk7c3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6aT1hbS5QbHVzO2JyZWFrO2Nhc2UiLSI6aT1hbS5NaW51czticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3BlcmF0b3IgJHt0Lm9wZXJhdG9yfWApfXJldHVybiAkcyhlLG5ldyBDQyhpLHRoaXMuX3Zpc2l0KHQuZXhwcix6aS5FeHByZXNzaW9uKSx2b2lkIDAsdGhpcy5jb252ZXJ0U291cmNlU3Bhbih0LnNwYW4pKSl9dmlzaXRCaW5hcnkodCxlKXtsZXQgaTtzd2l0Y2godC5vcGVyYXRpb24pe2Nhc2UiKyI6aT1Dbi5QbHVzO2JyZWFrO2Nhc2UiLSI6aT1Dbi5NaW51czticmVhaztjYXNlIioiOmk9Q24uTXVsdGlwbHk7YnJlYWs7Y2FzZSIvIjppPUNuLkRpdmlkZTticmVhaztjYXNlIiUiOmk9Q24uTW9kdWxvO2JyZWFrO2Nhc2UiJiYiOmk9Q24uQW5kO2JyZWFrO2Nhc2UifHwiOmk9Q24uT3I7YnJlYWs7Y2FzZSI9PSI6aT1Dbi5FcXVhbHM7YnJlYWs7Y2FzZSIhPSI6aT1Dbi5Ob3RFcXVhbHM7YnJlYWs7Y2FzZSI9PT0iOmk9Q24uSWRlbnRpY2FsO2JyZWFrO2Nhc2UiIT09IjppPUNuLk5vdElkZW50aWNhbDticmVhaztjYXNlIjwiOmk9Q24uTG93ZXI7YnJlYWs7Y2FzZSI+IjppPUNuLkJpZ2dlcjticmVhaztjYXNlIjw9IjppPUNuLkxvd2VyRXF1YWxzO2JyZWFrO2Nhc2UiPj0iOmk9Q24uQmlnZ2VyRXF1YWxzO2JyZWFrO2Nhc2UiPz8iOnJldHVybiB0aGlzLmNvbnZlcnROdWxsaXNoQ29hbGVzY2UodCxlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3BlcmF0aW9uICR7dC5vcGVyYXRpb259YCl9cmV0dXJuICRzKGUsbmV3IGdyKGksdGhpcy5fdmlzaXQodC5sZWZ0LHppLkV4cHJlc3Npb24pLHRoaXMuX3Zpc2l0KHQucmlnaHQsemkuRXhwcmVzc2lvbiksdm9pZCAwLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfXZpc2l0Q2hhaW4odCxlKXtyZXR1cm4gZnVuY3Rpb24obix0KXtpZihuIT09emkuU3RhdGVtZW50KXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBzdGF0ZW1lbnQsIGJ1dCBzYXcgJHt0fWApfShlLHQpLHRoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyxlKX12aXNpdENvbmRpdGlvbmFsKHQsZSl7cmV0dXJuICRzKGUsdGhpcy5fdmlzaXQodC5jb25kaXRpb24semkuRXhwcmVzc2lvbikuY29uZGl0aW9uYWwodGhpcy5fdmlzaXQodC50cnVlRXhwLHppLkV4cHJlc3Npb24pLHRoaXMuX3Zpc2l0KHQuZmFsc2VFeHAsemkuRXhwcmVzc2lvbiksdGhpcy5jb252ZXJ0U291cmNlU3Bhbih0LnNwYW4pKSl9dmlzaXRQaXBlKHQsZSl7dGhyb3cgbmV3IEVycm9yKGBJbGxlZ2FsIHN0YXRlOiBQaXBlcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIGZ1bmN0aW9ucy4gUGlwZTogJHt0Lm5hbWV9YCl9dmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl7cmV0dXJuIEdYKGUsdCksdGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj0hMCx0aGlzLl9pbXBsaWNpdFJlY2VpdmVyfXZpc2l0VGhpc1JlY2VpdmVyKHQsZSl7cmV0dXJuIHRoaXMudmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl9dmlzaXRJbnRlcnBvbGF0aW9uKHQsZSl7aWYoIXRoaXMuc3VwcG9ydHNJbnRlcnBvbGF0aW9uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnRlcnBvbGF0aW9uIik7R1goZSx0KTtsZXQgaT1bXTtmb3IobGV0IG89MDtvPHQuc3RyaW5ncy5sZW5ndGgtMTtvKyspaS5wdXNoKGh0KHQuc3RyaW5nc1tvXSkpLGkucHVzaCh0aGlzLl92aXNpdCh0LmV4cHJlc3Npb25zW29dLHppLkV4cHJlc3Npb24pKTtpLnB1c2goaHQodC5zdHJpbmdzW3Quc3RyaW5ncy5sZW5ndGgtMV0pKTtsZXQgcj10LnN0cmluZ3M7cmV0dXJuIDI9PT1yLmxlbmd0aCYmIiI9PT1yWzBdJiYiIj09PXJbMV0/aT1baVsxXV06dC5leHByZXNzaW9ucy5sZW5ndGg+PTkmJihpPVtfcihpKV0pLG5ldyByVihpKX12aXNpdEtleWVkUmVhZCh0LGUpe2xldCBpPXRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KTtyZXR1cm4gaT90aGlzLmNvbnZlcnRTYWZlQWNjZXNzKHQsaSxlKTokcyhlLHRoaXMuX3Zpc2l0KHQucmVjZWl2ZXIsemkuRXhwcmVzc2lvbikua2V5KHRoaXMuX3Zpc2l0KHQua2V5LHppLkV4cHJlc3Npb24pKSl9dmlzaXRLZXllZFdyaXRlKHQsZSl7bGV0IGk9dGhpcy5fdmlzaXQodC5yZWNlaXZlcix6aS5FeHByZXNzaW9uKSxyPXRoaXMuX3Zpc2l0KHQua2V5LHppLkV4cHJlc3Npb24pLG89dGhpcy5fdmlzaXQodC52YWx1ZSx6aS5FeHByZXNzaW9uKTtyZXR1cm4gaT09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXImJnRoaXMuX2xvY2FsUmVzb2x2ZXIubWF5YmVSZXN0b3JlVmlldygpLCRzKGUsaS5rZXkocikuc2V0KG8pKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3Rocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogbGl0ZXJhbCBhcnJheXMgc2hvdWxkIGhhdmUgYmVlbiBjb252ZXJ0ZWQgaW50byBmdW5jdGlvbnMiKX12aXNpdExpdGVyYWxNYXAodCxlKXt0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IGxpdGVyYWwgbWFwcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIGZ1bmN0aW9ucyIpfXZpc2l0TGl0ZXJhbFByaW1pdGl2ZSh0LGUpe3JldHVybiAkcyhlLGh0KHQudmFsdWUsbnVsbD09dC52YWx1ZXx8ITA9PT10LnZhbHVlfHwhMD09PXQudmFsdWU/UGE6dm9pZCAwLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfV9nZXRMb2NhbCh0LGUpe3JldHVybiB0aGlzLl9sb2NhbFJlc29sdmVyLmdsb2JhbHM/Lmhhcyh0KSYmZSBpbnN0YW5jZW9mIE9DP251bGw6dGhpcy5fbG9jYWxSZXNvbHZlci5nZXRMb2NhbCh0KX12aXNpdFByZWZpeE5vdCh0LGUpe3JldHVybiAkcyhlLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5ldyB4QyhuLHZvaWQgMCl9KHRoaXMuX3Zpc2l0KHQuZXhwcmVzc2lvbix6aS5FeHByZXNzaW9uKSkpfXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe3JldHVybiAkcyhlLHRoaXMuX3Zpc2l0KHQuZXhwcmVzc2lvbix6aS5FeHByZXNzaW9uKSl9dmlzaXRQcm9wZXJ0eVJlYWQodCxlKXtsZXQgaT10aGlzLmxlZnRNb3N0U2FmZU5vZGUodCk7aWYoaSlyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LGksZSk7e2xldCByPW51bGwsbz10aGlzLnVzZXNJbXBsaWNpdFJlY2VpdmVyLHM9dGhpcy5fdmlzaXQodC5yZWNlaXZlcix6aS5FeHByZXNzaW9uKTtyZXR1cm4gcz09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXImJihyPXRoaXMuX2dldExvY2FsKHQubmFtZSx0LnJlY2VpdmVyKSxyJiYodGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj1vLHRoaXMuYWRkSW1wbGljaXRSZWNlaXZlckFjY2Vzcyh0Lm5hbWUpKSksbnVsbD09ciYmKHI9cy5wcm9wKHQubmFtZSx0aGlzLmNvbnZlcnRTb3VyY2VTcGFuKHQuc3BhbikpKSwkcyhlLHIpfX12aXNpdFByb3BlcnR5V3JpdGUodCxlKXtsZXQgaT10aGlzLl92aXNpdCh0LnJlY2VpdmVyLHppLkV4cHJlc3Npb24pLHI9dGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcixvPW51bGw7aWYoaT09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXIpe2xldCBzPXRoaXMuX2dldExvY2FsKHQubmFtZSx0LnJlY2VpdmVyKTtpZihzKXtpZighKHMgaW5zdGFuY2VvZiBiXykpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYXNzaWduIHZhbHVlICIke3QudmFsdWUgaW5zdGFuY2VvZiBMdT90LnZhbHVlLm5hbWU6dm9pZCAwfSIgdG8gdGVtcGxhdGUgdmFyaWFibGUgIiR7dC5uYW1lfSIuIFRlbXBsYXRlIHZhcmlhYmxlcyBhcmUgcmVhZC1vbmx5LmApO289cyx0aGlzLnVzZXNJbXBsaWNpdFJlY2VpdmVyPXIsdGhpcy5hZGRJbXBsaWNpdFJlY2VpdmVyQWNjZXNzKHQubmFtZSl9fXJldHVybiBudWxsPT09byYmKG89aS5wcm9wKHQubmFtZSx0aGlzLmNvbnZlcnRTb3VyY2VTcGFuKHQuc3BhbikpKSwkcyhlLG8uc2V0KHRoaXMuX3Zpc2l0KHQudmFsdWUsemkuRXhwcmVzc2lvbikpKX12aXNpdFNhZmVQcm9wZXJ0eVJlYWQodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX12aXNpdFNhZmVLZXllZFJlYWQodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX12aXNpdEFsbCh0LGUpe3JldHVybiB0Lm1hcChpPT50aGlzLl92aXNpdChpLGUpKX12aXNpdENhbGwodCxlKXtsZXQgaT10aGlzLmxlZnRNb3N0U2FmZU5vZGUodCk7aWYoaSlyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LGksZSk7bGV0IHI9dGhpcy52aXNpdEFsbCh0LmFyZ3MsemkuRXhwcmVzc2lvbik7aWYodCBpbnN0YW5jZW9mIHJoKXJldHVybiAkcyhlLHQuY29udmVydGVyKHIpKTtsZXQgbz10LnJlY2VpdmVyO2lmKG8gaW5zdGFuY2VvZiBMdSYmby5yZWNlaXZlciBpbnN0YW5jZW9mIHhtJiYhKG8ucmVjZWl2ZXIgaW5zdGFuY2VvZiBPQykmJiIkYW55Ij09PW8ubmFtZSl7aWYoMSE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjYWxsIHRvICRhbnksIGV4cGVjdGVkIDEgYXJndW1lbnQgYnV0IHJlY2VpdmVkICR7ci5sZW5ndGh8fCJub25lIn1gKTtyZXR1cm4gJHMoZSxyWzBdKX1yZXR1cm4gJHMoZSx0aGlzLl92aXNpdChvLHppLkV4cHJlc3Npb24pLmNhbGxGbihyLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfXZpc2l0U2FmZUNhbGwodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX1fdmlzaXQodCxlKXtyZXR1cm4gdGhpcy5fcmVzdWx0TWFwLmdldCh0KXx8KHRoaXMuX25vZGVNYXAuZ2V0KHQpfHx0KS52aXNpdCh0aGlzLGUpfWNvbnZlcnRTYWZlQWNjZXNzKHQsZSxpKXtsZXQgbyxyPXRoaXMuX3Zpc2l0KGUucmVjZWl2ZXIsemkuRXhwcmVzc2lvbik7dGhpcy5uZWVkc1RlbXBvcmFyeUluU2FmZUFjY2VzcyhlLnJlY2VpdmVyKSYmKG89dGhpcy5hbGxvY2F0ZVRlbXBvcmFyeSgpLHI9by5zZXQociksdGhpcy5fcmVzdWx0TWFwLnNldChlLnJlY2VpdmVyLG8pKTtsZXQgcz1yLmlzQmxhbmsoKTt0aGlzLl9ub2RlTWFwLnNldChlLGUgaW5zdGFuY2VvZiBrXz9uZXcgYWgoZS5zcGFuLGUuc291cmNlU3BhbixlLnJlY2VpdmVyLGUuYXJncyxlLmFyZ3VtZW50U3Bhbik6ZSBpbnN0YW5jZW9mIFBfP25ldyBJXyhlLnNwYW4sZS5zb3VyY2VTcGFuLGUucmVjZWl2ZXIsZS5rZXkpOm5ldyBMdShlLnNwYW4sZS5zb3VyY2VTcGFuLGUubmFtZVNwYW4sZS5yZWNlaXZlcixlLm5hbWUpKTtsZXQgYT10aGlzLl92aXNpdCh0LHppLkV4cHJlc3Npb24pO3JldHVybiB0aGlzLl9ub2RlTWFwLmRlbGV0ZShlKSxvJiZ0aGlzLnJlbGVhc2VUZW1wb3JhcnkobyksJHMoaSxzLmNvbmRpdGlvbmFsKFBCLGEpKX1jb252ZXJ0TnVsbGlzaENvYWxlc2NlKHQsZSl7bGV0IGk9dGhpcy5fdmlzaXQodC5sZWZ0LHppLkV4cHJlc3Npb24pLHI9dGhpcy5fdmlzaXQodC5yaWdodCx6aS5FeHByZXNzaW9uKSxvPXRoaXMuYWxsb2NhdGVUZW1wb3JhcnkoKTtyZXR1cm4gdGhpcy5yZWxlYXNlVGVtcG9yYXJ5KG8pLCRzKGUsby5zZXQoaSkubm90SWRlbnRpY2FsKFBCKS5hbmQoby5ub3RJZGVudGljYWwoaHQodm9pZCAwKSkpLmNvbmRpdGlvbmFsKG8scikpfWxlZnRNb3N0U2FmZU5vZGUodCl7bGV0IGU9KGkscik9Pih0aGlzLl9ub2RlTWFwLmdldChyKXx8cikudmlzaXQoaSk7cmV0dXJuIHQudmlzaXQoe3Zpc2l0VW5hcnk6aT0+bnVsbCx2aXNpdEJpbmFyeTppPT5udWxsLHZpc2l0Q2hhaW46aT0+bnVsbCx2aXNpdENvbmRpdGlvbmFsOmk9Pm51bGwsdmlzaXRDYWxsKGkpe3JldHVybiBlKHRoaXMsaS5yZWNlaXZlcil9LHZpc2l0U2FmZUNhbGwoaSl7cmV0dXJuIGUodGhpcyxpLnJlY2VpdmVyKXx8aX0sdmlzaXRJbXBsaWNpdFJlY2VpdmVyOmk9Pm51bGwsdmlzaXRUaGlzUmVjZWl2ZXI6aT0+bnVsbCx2aXNpdEludGVycG9sYXRpb246aT0+bnVsbCx2aXNpdEtleWVkUmVhZChpKXtyZXR1cm4gZSh0aGlzLGkucmVjZWl2ZXIpfSx2aXNpdEtleWVkV3JpdGU6aT0+bnVsbCx2aXNpdExpdGVyYWxBcnJheTppPT5udWxsLHZpc2l0TGl0ZXJhbE1hcDppPT5udWxsLHZpc2l0TGl0ZXJhbFByaW1pdGl2ZTppPT5udWxsLHZpc2l0UGlwZTppPT5udWxsLHZpc2l0UHJlZml4Tm90Omk9Pm51bGwsdmlzaXROb25OdWxsQXNzZXJ0Omk9Pm51bGwsdmlzaXRQcm9wZXJ0eVJlYWQoaSl7cmV0dXJuIGUodGhpcyxpLnJlY2VpdmVyKX0sdmlzaXRQcm9wZXJ0eVdyaXRlOmk9Pm51bGwsdmlzaXRTYWZlUHJvcGVydHlSZWFkKGkpe3JldHVybiBlKHRoaXMsaS5yZWNlaXZlcil8fGl9LHZpc2l0U2FmZUtleWVkUmVhZChpKXtyZXR1cm4gZSh0aGlzLGkucmVjZWl2ZXIpfHxpfX0pfW5lZWRzVGVtcG9yYXJ5SW5TYWZlQWNjZXNzKHQpe2xldCBlPShyLG8pPT5vJiYodGhpcy5fbm9kZU1hcC5nZXQobyl8fG8pLnZpc2l0KHIpO3JldHVybiB0LnZpc2l0KHt2aXNpdFVuYXJ5KHIpe3JldHVybiBlKHRoaXMsci5leHByKX0sdmlzaXRCaW5hcnkocil7cmV0dXJuIGUodGhpcyxyLmxlZnQpfHxlKHRoaXMsci5yaWdodCl9LHZpc2l0Q2hhaW46cj0+ITEsdmlzaXRDb25kaXRpb25hbChyKXtyZXR1cm4gZSh0aGlzLHIuY29uZGl0aW9uKXx8ZSh0aGlzLHIudHJ1ZUV4cCl8fGUodGhpcyxyLmZhbHNlRXhwKX0sdmlzaXRDYWxsOnI9PiEwLHZpc2l0U2FmZUNhbGw6cj0+ITAsdmlzaXRJbXBsaWNpdFJlY2VpdmVyOnI9PiExLHZpc2l0VGhpc1JlY2VpdmVyOnI9PiExLHZpc2l0SW50ZXJwb2xhdGlvbihyKXtyZXR1cm4oKHIsbyk9Pm8uc29tZShzPT5lKHIscykpKSh0aGlzLHIuZXhwcmVzc2lvbnMpfSx2aXNpdEtleWVkUmVhZDpyPT4hMSx2aXNpdEtleWVkV3JpdGU6cj0+ITEsdmlzaXRMaXRlcmFsQXJyYXk6cj0+ITAsdmlzaXRMaXRlcmFsTWFwOnI9PiEwLHZpc2l0TGl0ZXJhbFByaW1pdGl2ZTpyPT4hMSx2aXNpdFBpcGU6cj0+ITAsdmlzaXRQcmVmaXhOb3Qocil7cmV0dXJuIGUodGhpcyxyLmV4cHJlc3Npb24pfSx2aXNpdE5vbk51bGxBc3NlcnQocil7cmV0dXJuIGUodGhpcyxyLmV4cHJlc3Npb24pfSx2aXNpdFByb3BlcnR5UmVhZDpyPT4hMSx2aXNpdFByb3BlcnR5V3JpdGU6cj0+ITEsdmlzaXRTYWZlUHJvcGVydHlSZWFkOnI9PiExLHZpc2l0U2FmZUtleWVkUmVhZDpyPT4hMX0pfWFsbG9jYXRlVGVtcG9yYXJ5KCl7bGV0IHQ9dGhpcy5fY3VycmVudFRlbXBvcmFyeSsrO3JldHVybiB0aGlzLnRlbXBvcmFyeUNvdW50PU1hdGgubWF4KHRoaXMuX2N1cnJlbnRUZW1wb3JhcnksdGhpcy50ZW1wb3JhcnlDb3VudCksbmV3IHVtKG5WKHRoaXMuYmluZGluZ0lkLHQpKX1yZWxlYXNlVGVtcG9yYXJ5KHQpe2lmKHRoaXMuX2N1cnJlbnRUZW1wb3JhcnktLSx0Lm5hbWUhPW5WKHRoaXMuYmluZGluZ0lkLHRoaXMuX2N1cnJlbnRUZW1wb3JhcnkpKXRocm93IG5ldyBFcnJvcihgVGVtcG9yYXJ5ICR7dC5uYW1lfSByZWxlYXNlZCBvdXQgb2Ygb3JkZXJgKX1jb252ZXJ0U291cmNlU3Bhbih0KXtpZih0aGlzLmJhc2VTb3VyY2VTcGFuKXtsZXQgZT10aGlzLmJhc2VTb3VyY2VTcGFuLnN0YXJ0Lm1vdmVCeSh0LnN0YXJ0KSxpPXRoaXMuYmFzZVNvdXJjZVNwYW4uc3RhcnQubW92ZUJ5KHQuZW5kKSxyPXRoaXMuYmFzZVNvdXJjZVNwYW4uZnVsbFN0YXJ0Lm1vdmVCeSh0LnN0YXJ0KTtyZXR1cm4gbmV3IEdvKGUsaSxyKX1yZXR1cm4gbnVsbH1hZGRJbXBsaWNpdFJlY2VpdmVyQWNjZXNzKHQpe3RoaXMuaW1wbGljaXRSZWNlaXZlckFjY2Vzc2VzJiZ0aGlzLmltcGxpY2l0UmVjZWl2ZXJBY2Nlc3Nlcy5hZGQodCl9fTtmdW5jdGlvbiBoSyhuLHQpe0FycmF5LmlzQXJyYXkobik/bi5mb3JFYWNoKGU9PmhLKGUsdCkpOnQucHVzaChuKX1mdW5jdGlvbiBsQigpe3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uIil9dmFyIHJWPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCl7c3VwZXIobnVsbCxudWxsKSx0aGlzLmFyZ3M9dCx0aGlzLmlzQ29uc3RhbnQ9bEIsdGhpcy5pc0VxdWl2YWxlbnQ9bEIsdGhpcy52aXNpdEV4cHJlc3Npb249bEJ9fSxtRD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmdsb2JhbHM9dH1ub3RpZnlJbXBsaWNpdFJlY2VpdmVyVXNlKCl7fW1heWJlUmVzdG9yZVZpZXcoKXt9Z2V0TG9jYWwodCl7cmV0dXJuIHQ9PT1qQy5ldmVudC5uYW1lP2pDLmV2ZW50Om51bGx9fSxyaD1jbGFzcyBleHRlbmRzIGFoe2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxuZXcgSWEodCxlKSxpLG51bGwpLHRoaXMuY29udmVydGVyPXJ9fSxtU2U9L3BvbHlmaWxsLW5leHQtc2VsZWN0b3JbXn1dKmNvbnRlbnQ6W1xzXSo/KFsnIl0pKC4qPylcMVs7XHNdKn0oW157XSo/KXsvZ2ltLGdTZT0vKHBvbHlmaWxsLXJ1bGUpW159XSooY29udGVudDpbXHNdKihbJyJdKSguKj8pXDMpWztcc10qW159XSp9L2dpbSxXWD0vKHBvbHlmaWxsLXVuc2NvcGVkLXJ1bGUpW159XSooY29udGVudDpbXHNdKihbJyJdKSguKj8pXDMpWztcc10qW159XSp9L2dpbSxnRD0iLXNoYWRvd2Nzc2hvc3QiLFpWPSItc2hhZG93Y3NzY29udGV4dCIsSlY9Iig/OlxcKCgoPzpcXChbXikoXSpcXCl8W14pKF0qKSs/KVxcKSk/KFteLHtdKikiLF9TZT1uZXcgUmVnRXhwKGdEK0pWLCJnaW0iKSx2U2U9bmV3IFJlZ0V4cChaVitKViwiZ2ltIikseVNlPW5ldyBSZWdFeHAoWlYrSlYsImltIiksdG09Z0QrIi1uby1jb21iaW5hdG9yIixxWD0vLXNoYWRvd2Nzc2hvc3Qtbm8tY29tYmluYXRvcihbXlxzXSopLyxiU2U9Wy86OnNoYWRvdy9nLC86OmNvbnRlbnQvZywvXC9zaGFkb3ctZGVlcFwvL2csL1wvc2hhZG93XC8vZ10sWVg9Lyg/Oj4+Pil8KD86XC9kZWVwXC8pfCg/Ojo6bmctZGVlcCkvZyxkXz0vLXNoYWRvd2Nzc2hvc3QvZ2ltLENTZT0vOmhvc3QvZ2ltLE1TZT0vOmhvc3QtY29udGV4dC9naW0sd1NlPS9cL1wqW1xzXFNdKj9cKlwvL2csRVNlPS9cL1wqXHMqI1xzKnNvdXJjZShNYXBwaW5nKT9VUkw9W1xzXFNdKz9cKlwvL2csY0I9IiVCTE9DSyUiLEFTZT0vKFxzKikoW147XHtcfV0rPykoXHMqKSgoPzp7JUJMT0NLJX0/XHMqOz8pfCg/OlxzKjspKS9nLElTZT0vJVFVT1RFRCUvZyxQU2U9bmV3IE1hcChbWyJ7IiwifSJdXSksUlNlPW5ldyBNYXAoW1snIicsJyInXSxbIiciLCInIl1dKSxXQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc2VsZWN0b3I9dCx0aGlzLmNvbnRlbnQ9ZX19O2Z1bmN0aW9uIFhYKG4sdCl7bGV0IGU9UVgobixSU2UsIiVRVU9URUQlIiksaT1RWChlLmVzY2FwZWRTdHJpbmcsUFNlLGNCKSxyPTAsbz0wO3JldHVybiBpLmVzY2FwZWRTdHJpbmcucmVwbGFjZShBU2UsKC4uLnMpPT57bGV0IGE9c1syXSxsPSIiLGM9c1s0XSx1PSIiO2MmJmMuc3RhcnRzV2l0aCgieyIrY0IpJiYobD1pLmJsb2Nrc1tyKytdLGM9Yy5zdWJzdHJpbmcoY0IubGVuZ3RoKzEpLHU9InsiKTtsZXQgZD10KG5ldyBXQyhhLGwpKTtyZXR1cm5gJHtzWzFdfSR7ZC5zZWxlY3Rvcn0ke3NbM119JHt1fSR7ZC5jb250ZW50fSR7Y31gfSkucmVwbGFjZShJU2UsKCk9PmUuYmxvY2tzW28rK10pfWZ1bmN0aW9uIFFYKG4sdCxlKXtsZXQgbCxjLGk9W10scj1bXSxvPTAscz0wLGE9LTE7Zm9yKGxldCB1PTA7dTxuLmxlbmd0aDt1Kyspe2xldCBkPW5bdV07IlxcIj09PWQ/dSsrOmQ9PT1jPyhvLS0sMD09PW8mJihyLnB1c2gobi5zdWJzdHJpbmcoYSx1KSksaS5wdXNoKGUpLHM9dSxhPS0xLGw9Yz12b2lkIDApKTpkPT09bD9vKys6MD09PW8mJnQuaGFzKGQpJiYobD1kLGM9dC5nZXQoZCksbz0xLGE9dSsxLGkucHVzaChuLnN1YnN0cmluZyhzLGEpKSl9cmV0dXJuLTEhPT1hPyhyLnB1c2gobi5zdWJzdHJpbmcoYSkpLGkucHVzaChlKSk6aS5wdXNoKG4uc3Vic3RyaW5nKHMpKSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLmVzY2FwZWRTdHJpbmc9dCx0aGlzLmJsb2Nrcz1lfX0oaS5qb2luKCIiKSxyKX1mdW5jdGlvbiBrU2Uobix0KXtsZXQgZT1uLmxlbmd0aDtmb3IobGV0IGk9MTtpPHQ7aSsrKWZvcihsZXQgcj0wO3I8ZTtyKyspbltyK2kqZV09bltyXS5zbGljZSgwKX1mdW5jdGlvbiBLWChuKXtsZXQgdD1uLmNoYXJDb2RlQXQoMCk7aWYodD09bi5jaGFyQ29kZUF0KG4ubGVuZ3RoLTEpJiYoMzk9PXR8fDM0PT10KSl7bGV0IGk9bi5zdWJzdHJpbmcoMSxuLmxlbmd0aC0xKTstMT09aS5pbmRleE9mKCInIikmJi0xPT1pLmluZGV4T2YoJyInKSYmKG49aSl9cmV0dXJuIG59ZnVuY3Rpb24gZksobil7cmV0dXJuIG4ucmVwbGFjZSgvW2Etel1bQS1aXS9nLHQ9PnQuY2hhckF0KDApKyItIit0LmNoYXJBdCgxKSkudG9Mb3dlckNhc2UoKX12YXIgdkQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZGlyZWN0aXZlRXhwcj10LHRoaXMuX2hhc0luaXRpYWxWYWx1ZXM9ITEsdGhpcy5oYXNCaW5kaW5ncz0hMSx0aGlzLmhhc0JpbmRpbmdzV2l0aFBpcGVzPSExLHRoaXMuX2NsYXNzTWFwSW5wdXQ9bnVsbCx0aGlzLl9zdHlsZU1hcElucHV0PW51bGwsdGhpcy5fc2luZ2xlU3R5bGVJbnB1dHM9bnVsbCx0aGlzLl9zaW5nbGVDbGFzc0lucHV0cz1udWxsLHRoaXMuX2xhc3RTdHlsaW5nSW5wdXQ9bnVsbCx0aGlzLl9maXJzdFN0eWxpbmdJbnB1dD1udWxsLHRoaXMuX3N0eWxlc0luZGV4PW5ldyBNYXAsdGhpcy5fY2xhc3Nlc0luZGV4PW5ldyBNYXAsdGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzPVtdLHRoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcz1bXX1yZWdpc3RlckJvdW5kSW5wdXQodCl7bGV0IGU9bnVsbCxpPXQubmFtZTtzd2l0Y2godC50eXBlKXtjYXNlIDA6ZT10aGlzLnJlZ2lzdGVySW5wdXRCYXNlZE9uTmFtZShpLHQudmFsdWUsdC5zb3VyY2VTcGFuKTticmVhaztjYXNlIDM6ZT10aGlzLnJlZ2lzdGVyU3R5bGVJbnB1dChpLCExLHQudmFsdWUsdC5zb3VyY2VTcGFuLHQudW5pdCk7YnJlYWs7Y2FzZSAyOmU9dGhpcy5yZWdpc3RlckNsYXNzSW5wdXQoaSwhMSx0LnZhbHVlLHQuc291cmNlU3Bhbil9cmV0dXJuISFlfXJlZ2lzdGVySW5wdXRCYXNlZE9uTmFtZSh0LGUsaSl7bGV0IHI9bnVsbCxvPXQuc3Vic3RyaW5nKDAsNikscz0ic3R5bGUiPT09dHx8InN0eWxlLiI9PT1vfHwic3R5bGUhIj09PW87aWYoc3x8IXMmJigiY2xhc3MiPT09dHx8ImNsYXNzLiI9PT1vfHwiY2xhc3MhIj09PW8pKXtsZXQgbD0iLiIhPT10LmNoYXJBdCg1KSxjPXQuc2xpY2UobD81OjYpO3I9cz90aGlzLnJlZ2lzdGVyU3R5bGVJbnB1dChjLGwsZSxpKTp0aGlzLnJlZ2lzdGVyQ2xhc3NJbnB1dChjLGwsZSxpKX1yZXR1cm4gcn1yZWdpc3RlclN0eWxlSW5wdXQodCxlLGkscixvKXtpZigkWChpKSlyZXR1cm4gbnVsbDt0LnN0YXJ0c1dpdGgoIi0tIil8fCh0PWZLKHQpKTtsZXR7cHJvcGVydHk6cyxoYXNPdmVycmlkZUZsYWc6YSxzdWZmaXg6bH09SlgodCksYz17bmFtZTpzLHN1ZmZpeDpvPSJzdHJpbmciPT10eXBlb2YgbyYmMCE9PW8ubGVuZ3RoP286bCx2YWx1ZTppLHNvdXJjZVNwYW46cixoYXNPdmVycmlkZUZsYWc6YX07cmV0dXJuIGU/dGhpcy5fc3R5bGVNYXBJbnB1dD1jOigodGhpcy5fc2luZ2xlU3R5bGVJbnB1dHM9dGhpcy5fc2luZ2xlU3R5bGVJbnB1dHN8fFtdKS5wdXNoKGMpLFpYKHRoaXMuX3N0eWxlc0luZGV4LHMpKSx0aGlzLl9sYXN0U3R5bGluZ0lucHV0PWMsdGhpcy5fZmlyc3RTdHlsaW5nSW5wdXQ9dGhpcy5fZmlyc3RTdHlsaW5nSW5wdXR8fGMsdGhpcy5fY2hlY2tGb3JQaXBlcyhpKSx0aGlzLmhhc0JpbmRpbmdzPSEwLGN9cmVnaXN0ZXJDbGFzc0lucHV0KHQsZSxpLHIpe2lmKCRYKGkpKXJldHVybiBudWxsO2xldHtwcm9wZXJ0eTpvLGhhc092ZXJyaWRlRmxhZzpzfT1KWCh0KSxhPXtuYW1lOm8sdmFsdWU6aSxzb3VyY2VTcGFuOnIsaGFzT3ZlcnJpZGVGbGFnOnMsc3VmZml4Om51bGx9O3JldHVybiBlP3RoaXMuX2NsYXNzTWFwSW5wdXQ9YTooKHRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzPXRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzfHxbXSkucHVzaChhKSxaWCh0aGlzLl9jbGFzc2VzSW5kZXgsbykpLHRoaXMuX2xhc3RTdHlsaW5nSW5wdXQ9YSx0aGlzLl9maXJzdFN0eWxpbmdJbnB1dD10aGlzLl9maXJzdFN0eWxpbmdJbnB1dHx8YSx0aGlzLl9jaGVja0ZvclBpcGVzKGkpLHRoaXMuaGFzQmluZGluZ3M9ITAsYX1fY2hlY2tGb3JQaXBlcyh0KXt0IGluc3RhbmNlb2YgUnUmJnQuYXN0IGluc3RhbmNlb2YgUl8mJih0aGlzLmhhc0JpbmRpbmdzV2l0aFBpcGVzPSEwKX1yZWdpc3RlclN0eWxlQXR0cih0KXt0aGlzLl9pbml0aWFsU3R5bGVWYWx1ZXM9ZnVuY3Rpb24obil7bGV0IHQ9W10sZT0wLGk9MCxyPTAsbz0wLHM9MCxhPW51bGwsbD0hMTtmb3IoO2U8bi5sZW5ndGg7KXN3aXRjaChuLmNoYXJDb2RlQXQoZSsrKSl7Y2FzZSA0MDppKys7YnJlYWs7Y2FzZSA0MTppLS07YnJlYWs7Y2FzZSAzOTpsPWx8fG8+MCwwPT09cj9yPTM5OjM5PT09ciYmOTIhPT1uLmNoYXJDb2RlQXQoZS0xKSYmKHI9MCk7YnJlYWs7Y2FzZSAzNDpsPWx8fG8+MCwwPT09cj9yPTM0OjM0PT09ciYmOTIhPT1uLmNoYXJDb2RlQXQoZS0xKSYmKHI9MCk7YnJlYWs7Y2FzZSA1ODohYSYmMD09PWkmJjA9PT1yJiYoYT1mSyhuLnN1YnN0cmluZyhzLGUtMSkudHJpbSgpKSxvPWUpO2JyZWFrO2Nhc2UgNTk6aWYoYSYmbz4wJiYwPT09aSYmMD09PXIpe2xldCB1PW4uc3Vic3RyaW5nKG8sZS0xKS50cmltKCk7dC5wdXNoKGEsbD9LWCh1KTp1KSxzPWUsbz0wLGE9bnVsbCxsPSExfX1pZihhJiZvKXtsZXQgYz1uLnNsaWNlKG8pLnRyaW0oKTt0LnB1c2goYSxsP0tYKGMpOmMpfXJldHVybiB0fSh0KSx0aGlzLl9oYXNJbml0aWFsVmFsdWVzPSEwfXJlZ2lzdGVyQ2xhc3NBdHRyKHQpe3RoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcz10LnRyaW0oKS5zcGxpdCgvXHMrL2cpLHRoaXMuX2hhc0luaXRpYWxWYWx1ZXM9ITB9cG9wdWxhdGVJbml0aWFsU3R5bGluZ0F0dHJzKHQpe2lmKHRoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcy5sZW5ndGgpe3QucHVzaChodCgxKSk7Zm9yKGxldCBlPTA7ZTx0aGlzLl9pbml0aWFsQ2xhc3NWYWx1ZXMubGVuZ3RoO2UrKyl0LnB1c2goaHQodGhpcy5faW5pdGlhbENsYXNzVmFsdWVzW2VdKSl9aWYodGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzLmxlbmd0aCl7dC5wdXNoKGh0KDIpKTtmb3IobGV0IGU9MDtlPHRoaXMuX2luaXRpYWxTdHlsZVZhbHVlcy5sZW5ndGg7ZSs9Mil0LnB1c2goaHQodGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzW2VdKSxodCh0aGlzLl9pbml0aWFsU3R5bGVWYWx1ZXNbZSsxXSkpfX1hc3NpZ25Ib3N0QXR0cnModCxlKXt0aGlzLl9kaXJlY3RpdmVFeHByJiYodC5sZW5ndGh8fHRoaXMuX2hhc0luaXRpYWxWYWx1ZXMpJiYodGhpcy5wb3B1bGF0ZUluaXRpYWxTdHlsaW5nQXR0cnModCksZS5zZXQoImhvc3RBdHRycyIsX3IodCkpKX1idWlsZENsYXNzTWFwSW5zdHJ1Y3Rpb24odCl7cmV0dXJuIHRoaXMuX2NsYXNzTWFwSW5wdXQ/dGhpcy5fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsITAsdGhpcy5fY2xhc3NNYXBJbnB1dCk6bnVsbH1idWlsZFN0eWxlTWFwSW5zdHJ1Y3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0eWxlTWFwSW5wdXQ/dGhpcy5fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsITEsdGhpcy5fc3R5bGVNYXBJbnB1dCk6bnVsbH1fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsZSxpKXtsZXQgcyxyPTIsbz1pLnZhbHVlLnZpc2l0KHQpO3JldHVybiBvIGluc3RhbmNlb2YgdnM/KHIrPW8uZXhwcmVzc2lvbnMubGVuZ3RoLHM9ZT9mdW5jdGlvbihuKXtzd2l0Y2god20obikpe2Nhc2UgMTpyZXR1cm4gdGUuY2xhc3NNYXA7Y2FzZSAzOnJldHVybiB0ZS5jbGFzc01hcEludGVycG9sYXRlMTtjYXNlIDU6cmV0dXJuIHRlLmNsYXNzTWFwSW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gdGUuY2xhc3NNYXBJbnRlcnBvbGF0ZTM7Y2FzZSA5OnJldHVybiB0ZS5jbGFzc01hcEludGVycG9sYXRlNDtjYXNlIDExOnJldHVybiB0ZS5jbGFzc01hcEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiB0ZS5jbGFzc01hcEludGVycG9sYXRlNjtjYXNlIDE1OnJldHVybiB0ZS5jbGFzc01hcEludGVycG9sYXRlNztjYXNlIDE3OnJldHVybiB0ZS5jbGFzc01hcEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiB0ZS5jbGFzc01hcEludGVycG9sYXRlVn19KG8pOmZ1bmN0aW9uKG4pe3N3aXRjaCh3bShuKSl7Y2FzZSAxOnJldHVybiB0ZS5zdHlsZU1hcDtjYXNlIDM6cmV0dXJuIHRlLnN0eWxlTWFwSW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gdGUuc3R5bGVNYXBJbnRlcnBvbGF0ZTI7Y2FzZSA3OnJldHVybiB0ZS5zdHlsZU1hcEludGVycG9sYXRlMztjYXNlIDk6cmV0dXJuIHRlLnN0eWxlTWFwSW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIHRlLnN0eWxlTWFwSW50ZXJwb2xhdGU1O2Nhc2UgMTM6cmV0dXJuIHRlLnN0eWxlTWFwSW50ZXJwb2xhdGU2O2Nhc2UgMTU6cmV0dXJuIHRlLnN0eWxlTWFwSW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIHRlLnN0eWxlTWFwSW50ZXJwb2xhdGU4O2RlZmF1bHQ6cmV0dXJuIHRlLnN0eWxlTWFwSW50ZXJwb2xhdGVWfX0obykpOnM9ZT90ZS5jbGFzc01hcDp0ZS5zdHlsZU1hcCx7cmVmZXJlbmNlOnMsY2FsbHM6W3tzdXBwb3J0c0ludGVycG9sYXRpb246ITAsc291cmNlU3BhbjppLnNvdXJjZVNwYW4sYWxsb2NhdGVCaW5kaW5nU2xvdHM6cixwYXJhbXM6YT0+e2xldCBsPWEobyk7cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bDpbbF19fV19fV9idWlsZFNpbmdsZUlucHV0cyh0LGUsaSxyLG8pe2xldCBzPVtdO3JldHVybiBlLmZvckVhY2goYT0+e2xldCBsPXNbcy5sZW5ndGgtMV0sYz1hLnZhbHVlLnZpc2l0KGkpLHU9dCxkPTI7YyBpbnN0YW5jZW9mIHZzJiYoZCs9Yy5leHByZXNzaW9ucy5sZW5ndGgsciYmKHU9cihjKSkpO2xldCBwPXtzb3VyY2VTcGFuOmEuc291cmNlU3BhbixhbGxvY2F0ZUJpbmRpbmdTbG90czpkLHN1cHBvcnRzSW50ZXJwb2xhdGlvbjohIXIscGFyYW1zOmg9PntsZXQgZj1bXTtmLnB1c2goaHQoYS5uYW1lKSk7bGV0IG09aChjKTtyZXR1cm4gQXJyYXkuaXNBcnJheShtKT9mLnB1c2goLi4ubSk6Zi5wdXNoKG0pLCFvJiZudWxsIT09YS5zdWZmaXgmJmYucHVzaChodChhLnN1ZmZpeCkpLGZ9fTtsJiZsLnJlZmVyZW5jZT09PXU/bC5jYWxscy5wdXNoKHApOnMucHVzaCh7cmVmZXJlbmNlOnUsY2FsbHM6W3BdfSl9KSxzfV9idWlsZENsYXNzSW5wdXRzKHQpe3JldHVybiB0aGlzLl9zaW5nbGVDbGFzc0lucHV0cz90aGlzLl9idWlsZFNpbmdsZUlucHV0cyh0ZS5jbGFzc1Byb3AsdGhpcy5fc2luZ2xlQ2xhc3NJbnB1dHMsdCxudWxsLCEwKTpbXX1fYnVpbGRTdHlsZUlucHV0cyh0KXtyZXR1cm4gdGhpcy5fc2luZ2xlU3R5bGVJbnB1dHM/dGhpcy5fYnVpbGRTaW5nbGVJbnB1dHModGUuc3R5bGVQcm9wLHRoaXMuX3NpbmdsZVN0eWxlSW5wdXRzLHQsVlNlLCExKTpbXX1idWlsZFVwZGF0ZUxldmVsSW5zdHJ1Y3Rpb25zKHQpe2xldCBlPVtdO2lmKHRoaXMuaGFzQmluZGluZ3Mpe2xldCBpPXRoaXMuYnVpbGRTdHlsZU1hcEluc3RydWN0aW9uKHQpO2kmJmUucHVzaChpKTtsZXQgcj10aGlzLmJ1aWxkQ2xhc3NNYXBJbnN0cnVjdGlvbih0KTtyJiZlLnB1c2gociksZS5wdXNoKC4uLnRoaXMuX2J1aWxkU3R5bGVJbnB1dHModCkpLGUucHVzaCguLi50aGlzLl9idWlsZENsYXNzSW5wdXRzKHQpKX1yZXR1cm4gZX19O2Z1bmN0aW9uIFpYKG4sdCl7bi5oYXModCl8fG4uc2V0KHQsbi5zaXplKX1mdW5jdGlvbiBKWChuKXtsZXQgdD0hMSxlPW4uaW5kZXhPZigiIWltcG9ydGFudCIpOy0xIT09ZSYmKG49ZT4wP24uc3Vic3RyaW5nKDAsZSk6IiIsdD0hMCk7bGV0IGk9bnVsbCxyPW4sbz1uLmxhc3RJbmRleE9mKCIuIik7cmV0dXJuIG8+MCYmKGk9bi5zbGljZShvKzEpLHI9bi5zdWJzdHJpbmcoMCxvKSkse3Byb3BlcnR5OnIsc3VmZml4OmksaGFzT3ZlcnJpZGVGbGFnOnR9fWZ1bmN0aW9uIFZTZShuKXtzd2l0Y2god20obikpe2Nhc2UgMTpyZXR1cm4gdGUuc3R5bGVQcm9wO2Nhc2UgMzpyZXR1cm4gdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGUzO2Nhc2UgOTpyZXR1cm4gdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIHRlLnN0eWxlUHJvcEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiB0ZS5zdHlsZVByb3BJbnRlcnBvbGF0ZTY7Y2FzZSAxNTpyZXR1cm4gdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIHRlLnN0eWxlUHJvcEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiB0ZS5zdHlsZVByb3BJbnRlcnBvbGF0ZVZ9fWZ1bmN0aW9uICRYKG4pe3JldHVybiBuIGluc3RhbmNlb2YgUnUmJihuPW4uYXN0KSxuIGluc3RhbmNlb2YgSWF9dmFyIG5pPSgoKT0+e3JldHVybihuPW5pfHwobmk9e30pKVtuLkNoYXJhY3Rlcj0wXT0iQ2hhcmFjdGVyIixuW24uSWRlbnRpZmllcj0xXT0iSWRlbnRpZmllciIsbltuLlByaXZhdGVJZGVudGlmaWVyPTJdPSJQcml2YXRlSWRlbnRpZmllciIsbltuLktleXdvcmQ9M109IktleXdvcmQiLG5bbi5TdHJpbmc9NF09IlN0cmluZyIsbltuLk9wZXJhdG9yPTVdPSJPcGVyYXRvciIsbltuLk51bWJlcj02XT0iTnVtYmVyIixuW24uRXJyb3I9N109IkVycm9yIixuaTt2YXIgbn0pKCksVVNlPVsidmFyIiwibGV0IiwiYXMiLCJudWxsIiwidW5kZWZpbmVkIiwidHJ1ZSIsImZhbHNlIiwiaWYiLCJlbHNlIiwidGhpcyJdLHlEPWNsYXNze3Rva2VuaXplKHQpe2xldCBlPW5ldyBsVih0KSxpPVtdLHI9ZS5zY2FuVG9rZW4oKTtmb3IoO251bGwhPXI7KWkucHVzaChyKSxyPWUuc2NhblRva2VuKCk7cmV0dXJuIGl9fSxqYz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3RoaXMuaW5kZXg9dCx0aGlzLmVuZD1lLHRoaXMudHlwZT1pLHRoaXMubnVtVmFsdWU9cix0aGlzLnN0clZhbHVlPW99aXNDaGFyYWN0ZXIodCl7cmV0dXJuIHRoaXMudHlwZT09bmkuQ2hhcmFjdGVyJiZ0aGlzLm51bVZhbHVlPT10fWlzTnVtYmVyKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuTnVtYmVyfWlzU3RyaW5nKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuU3RyaW5nfWlzT3BlcmF0b3IodCl7cmV0dXJuIHRoaXMudHlwZT09bmkuT3BlcmF0b3ImJnRoaXMuc3RyVmFsdWU9PXR9aXNJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuSWRlbnRpZmllcn1pc1ByaXZhdGVJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuUHJpdmF0ZUlkZW50aWZpZXJ9aXNLZXl3b3JkKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuS2V5d29yZH1pc0tleXdvcmRMZXQoKXtyZXR1cm4gdGhpcy50eXBlPT1uaS5LZXl3b3JkJiYibGV0Ij09dGhpcy5zdHJWYWx1ZX1pc0tleXdvcmRBcygpe3JldHVybiB0aGlzLnR5cGU9PW5pLktleXdvcmQmJiJhcyI9PXRoaXMuc3RyVmFsdWV9aXNLZXl3b3JkTnVsbCgpe3JldHVybiB0aGlzLnR5cGU9PW5pLktleXdvcmQmJiJudWxsIj09dGhpcy5zdHJWYWx1ZX1pc0tleXdvcmRVbmRlZmluZWQoKXtyZXR1cm4gdGhpcy50eXBlPT1uaS5LZXl3b3JkJiYidW5kZWZpbmVkIj09dGhpcy5zdHJWYWx1ZX1pc0tleXdvcmRUcnVlKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuS2V5d29yZCYmInRydWUiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZEZhbHNlKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuS2V5d29yZCYmImZhbHNlIj09dGhpcy5zdHJWYWx1ZX1pc0tleXdvcmRUaGlzKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuS2V5d29yZCYmInRoaXMiPT10aGlzLnN0clZhbHVlfWlzRXJyb3IoKXtyZXR1cm4gdGhpcy50eXBlPT1uaS5FcnJvcn10b051bWJlcigpe3JldHVybiB0aGlzLnR5cGU9PW5pLk51bWJlcj90aGlzLm51bVZhbHVlOi0xfXRvU3RyaW5nKCl7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSBuaS5DaGFyYWN0ZXI6Y2FzZSBuaS5JZGVudGlmaWVyOmNhc2UgbmkuS2V5d29yZDpjYXNlIG5pLk9wZXJhdG9yOmNhc2UgbmkuUHJpdmF0ZUlkZW50aWZpZXI6Y2FzZSBuaS5TdHJpbmc6Y2FzZSBuaS5FcnJvcjpyZXR1cm4gdGhpcy5zdHJWYWx1ZTtjYXNlIG5pLk51bWJlcjpyZXR1cm4gdGhpcy5udW1WYWx1ZS50b1N0cmluZygpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fX07ZnVuY3Rpb24gZVEobix0LGUpe3JldHVybiBuZXcgamMobix0LG5pLkNoYXJhY3RlcixlLFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpfWZ1bmN0aW9uIHVCKG4sdCxlKXtyZXR1cm4gbmV3IGpjKG4sdCxuaS5PcGVyYXRvciwwLGUpfXZhciBkQj1uZXcgamMoLTEsLTEsbmkuQ2hhcmFjdGVyLDAsIiIpLGxWPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuaW5wdXQ9dCx0aGlzLnBlZWs9MCx0aGlzLmluZGV4PS0xLHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMuYWR2YW5jZSgpfWFkdmFuY2UoKXt0aGlzLnBlZWs9Kyt0aGlzLmluZGV4Pj10aGlzLmxlbmd0aD8wOnRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLmluZGV4KX1zY2FuVG9rZW4oKXtsZXQgdD10aGlzLmlucHV0LGU9dGhpcy5sZW5ndGgsaT10aGlzLnBlZWsscj10aGlzLmluZGV4O2Zvcig7aTw9MzI7KXtpZigrK3I+PWUpe2k9MDticmVha31pPXQuY2hhckNvZGVBdChyKX1pZih0aGlzLnBlZWs9aSx0aGlzLmluZGV4PXIscj49ZSlyZXR1cm4gbnVsbDtpZih0UShpKSlyZXR1cm4gdGhpcy5zY2FuSWRlbnRpZmllcigpO2lmKCRwKGkpKXJldHVybiB0aGlzLnNjYW5OdW1iZXIocik7bGV0IG89cjtzd2l0Y2goaSl7Y2FzZSA0NjpyZXR1cm4gdGhpcy5hZHZhbmNlKCksJHAodGhpcy5wZWVrKT90aGlzLnNjYW5OdW1iZXIobyk6ZVEobyx0aGlzLmluZGV4LDQ2KTtjYXNlIDQwOmNhc2UgNDE6Y2FzZSB0aDpjYXNlIE91OmNhc2UgOTE6Y2FzZSA5MzpjYXNlIDQ0OmNhc2UgNTg6Y2FzZSA1OTpyZXR1cm4gdGhpcy5zY2FuQ2hhcmFjdGVyKG8saSk7Y2FzZSAzOTpjYXNlIDM0OnJldHVybiB0aGlzLnNjYW5TdHJpbmcoKTtjYXNlIDM1OnJldHVybiB0aGlzLnNjYW5Qcml2YXRlSWRlbnRpZmllcigpO2Nhc2UgNDM6Y2FzZSA0NTpjYXNlIDQyOmNhc2UgNDc6Y2FzZSAzNzpjYXNlIDk0OnJldHVybiB0aGlzLnNjYW5PcGVyYXRvcihvLFN0cmluZy5mcm9tQ2hhckNvZGUoaSkpO2Nhc2UgNjM6cmV0dXJuIHRoaXMuc2NhblF1ZXN0aW9uKG8pO2Nhc2UgNjA6Y2FzZSA2MjpyZXR1cm4gdGhpcy5zY2FuQ29tcGxleE9wZXJhdG9yKG8sU3RyaW5nLmZyb21DaGFyQ29kZShpKSw2MSwiPSIpO2Nhc2UgMzM6Y2FzZSA2MTpyZXR1cm4gdGhpcy5zY2FuQ29tcGxleE9wZXJhdG9yKG8sU3RyaW5nLmZyb21DaGFyQ29kZShpKSw2MSwiPSIsNjEsIj0iKTtjYXNlIDM4OnJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IobywiJiIsMzgsIiYiKTtjYXNlIDEyNDpyZXR1cm4gdGhpcy5zY2FuQ29tcGxleE9wZXJhdG9yKG8sInwiLDEyNCwifCIpO2Nhc2UgMTYwOmZvcig7UVYodGhpcy5wZWVrKTspdGhpcy5hZHZhbmNlKCk7cmV0dXJuIHRoaXMuc2NhblRva2VuKCl9cmV0dXJuIHRoaXMuYWR2YW5jZSgpLHRoaXMuZXJyb3IoYFVuZXhwZWN0ZWQgY2hhcmFjdGVyIFske1N0cmluZy5mcm9tQ2hhckNvZGUoaSl9XWAsMCl9c2NhbkNoYXJhY3Rlcih0LGUpe3JldHVybiB0aGlzLmFkdmFuY2UoKSxlUSh0LHRoaXMuaW5kZXgsZSl9c2Nhbk9wZXJhdG9yKHQsZSl7cmV0dXJuIHRoaXMuYWR2YW5jZSgpLHVCKHQsdGhpcy5pbmRleCxlKX1zY2FuQ29tcGxleE9wZXJhdG9yKHQsZSxpLHIsbyxzKXt0aGlzLmFkdmFuY2UoKTtsZXQgYT1lO3JldHVybiB0aGlzLnBlZWs9PWkmJih0aGlzLmFkdmFuY2UoKSxhKz1yKSxudWxsIT1vJiZ0aGlzLnBlZWs9PW8mJih0aGlzLmFkdmFuY2UoKSxhKz1zKSx1Qih0LHRoaXMuaW5kZXgsYSl9c2NhbklkZW50aWZpZXIoKXtsZXQgdD10aGlzLmluZGV4O2Zvcih0aGlzLmFkdmFuY2UoKTtuUSh0aGlzLnBlZWspOyl0aGlzLmFkdmFuY2UoKTtsZXQgZT10aGlzLmlucHV0LnN1YnN0cmluZyh0LHRoaXMuaW5kZXgpO3JldHVybiBVU2UuaW5kZXhPZihlKT4tMT9mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBqYyhuLHQsbmkuS2V5d29yZCwwLGUpfSh0LHRoaXMuaW5kZXgsZSk6ZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgamMobix0LG5pLklkZW50aWZpZXIsMCxlKX0odCx0aGlzLmluZGV4LGUpfXNjYW5Qcml2YXRlSWRlbnRpZmllcigpe2xldCB0PXRoaXMuaW5kZXg7aWYodGhpcy5hZHZhbmNlKCksIXRRKHRoaXMucGVlaykpcmV0dXJuIHRoaXMuZXJyb3IoIkludmFsaWQgY2hhcmFjdGVyIFsjXSIsLTEpO2Zvcig7blEodGhpcy5wZWVrKTspdGhpcy5hZHZhbmNlKCk7bGV0IGU9dGhpcy5pbnB1dC5zdWJzdHJpbmcodCx0aGlzLmluZGV4KTtyZXR1cm4gZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgamMobix0LG5pLlByaXZhdGVJZGVudGlmaWVyLDAsZSl9KHQsdGhpcy5pbmRleCxlKX1zY2FuTnVtYmVyKHQpe2xldCBlPXRoaXMuaW5kZXg9PT10LGk9ITE7Zm9yKHRoaXMuYWR2YW5jZSgpOzspe2lmKCEkcCh0aGlzLnBlZWspKWlmKDk1PT09dGhpcy5wZWVrKXtpZighJHAodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuaW5kZXgtMSkpfHwhJHAodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuaW5kZXgrMSkpKXJldHVybiB0aGlzLmVycm9yKCJJbnZhbGlkIG51bWVyaWMgc2VwYXJhdG9yIiwwKTtpPSEwfWVsc2UgaWYoNDY9PT10aGlzLnBlZWspZT0hMTtlbHNle2lmKDEwMSE9KG49dGhpcy5wZWVrKSYmNjkhPW4pYnJlYWs7aWYodGhpcy5hZHZhbmNlKCksUVNlKHRoaXMucGVlaykmJnRoaXMuYWR2YW5jZSgpLCEkcCh0aGlzLnBlZWspKXJldHVybiB0aGlzLmVycm9yKCJJbnZhbGlkIGV4cG9uZW50IiwtMSk7ZT0hMX10aGlzLmFkdmFuY2UoKX12YXIgbjtsZXQgcj10aGlzLmlucHV0LnN1YnN0cmluZyh0LHRoaXMuaW5kZXgpO2kmJihyPXIucmVwbGFjZSgvXy9nLCIiKSk7bGV0IG89ZT9mdW5jdGlvbihuKXtsZXQgdD1wYXJzZUludChuKTtpZihpc05hTih0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW50ZWdlciBsaXRlcmFsIHdoZW4gcGFyc2luZyAiK24pO3JldHVybiB0fShyKTpwYXJzZUZsb2F0KHIpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBqYyhuLHQsbmkuTnVtYmVyLGUsIiIpfSh0LHRoaXMuaW5kZXgsbyl9c2NhblN0cmluZygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLnBlZWs7dGhpcy5hZHZhbmNlKCk7bGV0IGk9IiIscj10aGlzLmluZGV4LG89dGhpcy5pbnB1dDtmb3IoO3RoaXMucGVlayE9ZTspaWYoOTI9PXRoaXMucGVlayl7bGV0IGE7aWYoaSs9by5zdWJzdHJpbmcocix0aGlzLmluZGV4KSx0aGlzLmFkdmFuY2UoKSx0aGlzLnBlZWs9dGhpcy5wZWVrLDExNz09dGhpcy5wZWVrKXtsZXQgbD1vLnN1YnN0cmluZyh0aGlzLmluZGV4KzEsdGhpcy5pbmRleCs1KTtpZighL15bMC05YS1mXSskL2kudGVzdChsKSlyZXR1cm4gdGhpcy5lcnJvcihgSW52YWxpZCB1bmljb2RlIGVzY2FwZSBbXFx1JHtsfV1gLDApO2E9cGFyc2VJbnQobCwxNik7Zm9yKGxldCBjPTA7Yzw1O2MrKyl0aGlzLmFkdmFuY2UoKX1lbHNlIGE9S1NlKHRoaXMucGVlayksdGhpcy5hZHZhbmNlKCk7aSs9U3RyaW5nLmZyb21DaGFyQ29kZShhKSxyPXRoaXMuaW5kZXh9ZWxzZXtpZigwPT10aGlzLnBlZWspcmV0dXJuIHRoaXMuZXJyb3IoIlVudGVybWluYXRlZCBxdW90ZSIsMCk7dGhpcy5hZHZhbmNlKCl9bGV0IHM9by5zdWJzdHJpbmcocix0aGlzLmluZGV4KTtyZXR1cm4gdGhpcy5hZHZhbmNlKCksZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgamMobix0LG5pLlN0cmluZywwLGUpfSh0LHRoaXMuaW5kZXgsaStzKX1zY2FuUXVlc3Rpb24odCl7dGhpcy5hZHZhbmNlKCk7bGV0IGU9Ij8iO3JldHVybig2Mz09PXRoaXMucGVla3x8NDY9PT10aGlzLnBlZWspJiYoZSs9NDY9PT10aGlzLnBlZWs/Ii4iOiI/Iix0aGlzLmFkdmFuY2UoKSksdUIodCx0aGlzLmluZGV4LGUpfWVycm9yKHQsZSl7bGV0IGk9dGhpcy5pbmRleCtlO3JldHVybiBmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBqYyhuLHQsbmkuRXJyb3IsMCxlKX0oaSx0aGlzLmluZGV4LGBMZXhlciBFcnJvcjogJHt0fSBhdCBjb2x1bW4gJHtpfSBpbiBleHByZXNzaW9uIFske3RoaXMuaW5wdXR9XWApfX07ZnVuY3Rpb24gdFEobil7cmV0dXJuIDk3PD1uJiZuPD0xMjJ8fDY1PD1uJiZuPD05MHx8OTU9PW58fDM2PT1ufWZ1bmN0aW9uIG5RKG4pe3JldHVybiBLVihuKXx8JHAobil8fDk1PT1ufHwzNj09bn1mdW5jdGlvbiBRU2Uobil7cmV0dXJuIDQ1PT1ufHw0Mz09bn1mdW5jdGlvbiBLU2Uobil7c3dpdGNoKG4pe2Nhc2UgMTEwOnJldHVybiAxMDtjYXNlIDEwMjpyZXR1cm4gMTI7Y2FzZSAxMTQ6cmV0dXJuIDEzO2Nhc2UgMTE2OnJldHVybiA5O2Nhc2UgMTE4OnJldHVybiAxMTtkZWZhdWx0OnJldHVybiBufX12YXIgYkQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fbGV4ZXI9dCx0aGlzLmVycm9ycz1bXX1wYXJzZUFjdGlvbih0LGUsaSxyLG89UHUpe3RoaXMuX2NoZWNrTm9JbnRlcnBvbGF0aW9uKHQsaSxvKTtsZXQgcz10aGlzLl9zdHJpcENvbW1lbnRzKHQpLGE9dGhpcy5fbGV4ZXIudG9rZW5pemUocyksbD0xO2UmJihsfD0yKTtsZXQgYz1uZXcgaW0odCxpLHIsYSxsLHRoaXMuZXJyb3JzLDApLnBhcnNlQ2hhaW4oKTtyZXR1cm4gbmV3IFJ1KGMsdCxpLHIsdGhpcy5lcnJvcnMpfXBhcnNlQmluZGluZyh0LGUsaSxyPVB1KXtsZXQgbz10aGlzLl9wYXJzZUJpbmRpbmdBc3QodCxlLGkscik7cmV0dXJuIG5ldyBSdShvLHQsZSxpLHRoaXMuZXJyb3JzKX1jaGVja1NpbXBsZUV4cHJlc3Npb24odCl7bGV0IGU9bmV3IGRWO3JldHVybiB0LnZpc2l0KGUpLGUuZXJyb3JzfXBhcnNlU2ltcGxlQmluZGluZyh0LGUsaSxyPVB1KXtsZXQgbz10aGlzLl9wYXJzZUJpbmRpbmdBc3QodCxlLGkscikscz10aGlzLmNoZWNrU2ltcGxlRXhwcmVzc2lvbihvKTtyZXR1cm4gcy5sZW5ndGg+MCYmdGhpcy5fcmVwb3J0RXJyb3IoYEhvc3QgYmluZGluZyBleHByZXNzaW9uIGNhbm5vdCBjb250YWluICR7cy5qb2luKCIgIil9YCx0LGUpLG5ldyBSdShvLHQsZSxpLHRoaXMuZXJyb3JzKX1fcmVwb3J0RXJyb3IodCxlLGkscil7dGhpcy5lcnJvcnMucHVzaChuZXcgUkModCxlLGkscikpfV9wYXJzZUJpbmRpbmdBc3QodCxlLGkscil7dGhpcy5fY2hlY2tOb0ludGVycG9sYXRpb24odCxlLHIpO2xldCBvPXRoaXMuX3N0cmlwQ29tbWVudHModCkscz10aGlzLl9sZXhlci50b2tlbml6ZShvKTtyZXR1cm4gbmV3IGltKHQsZSxpLHMsMCx0aGlzLmVycm9ycywwKS5wYXJzZUNoYWluKCl9cGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQsZSxpLHIsbyl7bGV0IHM9dGhpcy5fbGV4ZXIudG9rZW5pemUoZSk7cmV0dXJuIG5ldyBpbShlLGksbyxzLDAsdGhpcy5lcnJvcnMsMCkucGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHtzb3VyY2U6dCxzcGFuOm5ldyBhbChyLHIrdC5sZW5ndGgpfSl9cGFyc2VJbnRlcnBvbGF0aW9uKHQsZSxpLHIsbz1QdSl7bGV0e3N0cmluZ3M6cyxleHByZXNzaW9uczphLG9mZnNldHM6bH09dGhpcy5zcGxpdEludGVycG9sYXRpb24odCxlLHIsbyk7aWYoMD09PWEubGVuZ3RoKXJldHVybiBudWxsO2xldCBjPVtdO2ZvcihsZXQgdT0wO3U8YS5sZW5ndGg7Kyt1KXtsZXQgcD10aGlzLl9zdHJpcENvbW1lbnRzKGFbdV0udGV4dCksaD10aGlzLl9sZXhlci50b2tlbml6ZShwKSxmPW5ldyBpbSh0LGUsaSxoLDAsdGhpcy5lcnJvcnMsbFt1XSkucGFyc2VDaGFpbigpO2MucHVzaChmKX1yZXR1cm4gdGhpcy5jcmVhdGVJbnRlcnBvbGF0aW9uQXN0KHMubWFwKHU9PnUudGV4dCksYyx0LGUsaSl9cGFyc2VJbnRlcnBvbGF0aW9uRXhwcmVzc2lvbih0LGUsaSl7bGV0IHI9dGhpcy5fc3RyaXBDb21tZW50cyh0KSxvPXRoaXMuX2xleGVyLnRva2VuaXplKHIpLHM9bmV3IGltKHQsZSxpLG8sMCx0aGlzLmVycm9ycywwKS5wYXJzZUNoYWluKCk7cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhdGlvbkFzdChbIiIsIiJdLFtzXSx0LGUsaSl9Y3JlYXRlSW50ZXJwb2xhdGlvbkFzdCh0LGUsaSxyLG8pe2xldCBzPW5ldyBibSgwLGkubGVuZ3RoKSxhPW5ldyB2cyhzLHMudG9BYnNvbHV0ZShvKSx0LGUpO3JldHVybiBuZXcgUnUoYSxpLHIsbyx0aGlzLmVycm9ycyl9c3BsaXRJbnRlcnBvbGF0aW9uKHQsZSxpLHI9UHUpe2xldCBvPVtdLHM9W10sYT1bXSxsPWk/ZnVuY3Rpb24obil7bGV0IHQ9bmV3IE1hcCxlPTAsaT0wLHI9MDtmb3IoO3I8bi5sZW5ndGg7KXtsZXQgbz1uW3JdO2lmKDk9PT1vLnR5cGUpe2xldFtzLGFdPW8ucGFydHM7ZSs9YS5sZW5ndGgsaSs9cy5sZW5ndGh9ZWxzZXtsZXQgcz1vLnBhcnRzLnJlZHVjZSgoYSxsKT0+YStsLmxlbmd0aCwwKTtpKz1zLGUrPXN9dC5zZXQoaSxlKSxyKyt9cmV0dXJuIHR9KGkpOm51bGwsYz0wLHU9ITEsZD0hMSx7c3RhcnQ6cCxlbmQ6aH09cjtmb3IoO2M8dC5sZW5ndGg7KWlmKHUpe2xldCBmPWMsbT1mK3AubGVuZ3RoLHg9dGhpcy5fZ2V0SW50ZXJwb2xhdGlvbkVuZEluZGV4KHQsaCxtKTtpZigtMT09PXgpe3U9ITEsZD0hMDticmVha31sZXQgZz14K2gubGVuZ3RoLGI9dC5zdWJzdHJpbmcobSx4KTswPT09Yi50cmltKCkubGVuZ3RoJiZ0aGlzLl9yZXBvcnRFcnJvcigiQmxhbmsgZXhwcmVzc2lvbnMgYXJlIG5vdCBhbGxvd2VkIGluIGludGVycG9sYXRlZCBzdHJpbmdzIix0LGBhdCBjb2x1bW4gJHtjfSBpbmAsZSkscy5wdXNoKHt0ZXh0OmIsc3RhcnQ6ZixlbmQ6Z30pO2xldCBUPShsPy5nZXQoZik/P2YpK3AubGVuZ3RoO2EucHVzaChUKSxjPWcsdT0hMX1lbHNle2xldCBmPWM7Yz10LmluZGV4T2YocCxjKSwtMT09PWMmJihjPXQubGVuZ3RoKTtsZXQgbT10LnN1YnN0cmluZyhmLGMpO28ucHVzaCh7dGV4dDptLHN0YXJ0OmYsZW5kOmN9KSx1PSEwfWlmKCF1KWlmKGQpe2xldCBmPW9bby5sZW5ndGgtMV07Zi50ZXh0Kz10LnN1YnN0cmluZyhjKSxmLmVuZD10Lmxlbmd0aH1lbHNlIG8ucHVzaCh7dGV4dDp0LnN1YnN0cmluZyhjKSxzdGFydDpjLGVuZDp0Lmxlbmd0aH0pO3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuc3RyaW5ncz10LHRoaXMuZXhwcmVzc2lvbnM9ZSx0aGlzLm9mZnNldHM9aX19KG8scyxhKX13cmFwTGl0ZXJhbFByaW1pdGl2ZSh0LGUsaSl7bGV0IHI9bmV3IGJtKDAsbnVsbD09dD8wOnQubGVuZ3RoKTtyZXR1cm4gbmV3IFJ1KG5ldyB0YShyLHIudG9BYnNvbHV0ZShpKSx0KSx0LGUsaSx0aGlzLmVycm9ycyl9X3N0cmlwQ29tbWVudHModCl7bGV0IGU9dGhpcy5fY29tbWVudFN0YXJ0KHQpO3JldHVybiBudWxsIT1lP3Quc3Vic3RyaW5nKDAsZSk6dH1fY29tbWVudFN0YXJ0KHQpe2xldCBlPW51bGw7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aC0xO2krKyl7bGV0IHI9dC5jaGFyQ29kZUF0KGkpLG89dC5jaGFyQ29kZUF0KGkrMSk7aWYoNDc9PT1yJiY0Nz09byYmbnVsbD09ZSlyZXR1cm4gaTtlPT09cj9lPW51bGw6bnVsbD09ZSYmV0IocikmJihlPXIpfXJldHVybiBudWxsfV9jaGVja05vSW50ZXJwb2xhdGlvbih0LGUse3N0YXJ0OmksZW5kOnJ9KXtsZXQgbz0tMSxzPS0xO2ZvcihsZXQgYSBvZiB0aGlzLl9mb3JFYWNoVW5xdW90ZWRDaGFyKHQsMCkpaWYoLTE9PT1vKXQuc3RhcnRzV2l0aChpKSYmKG89YSk7ZWxzZSBpZihzPXRoaXMuX2dldEludGVycG9sYXRpb25FbmRJbmRleCh0LHIsYSkscz4tMSlicmVhaztvPi0xJiZzPi0xJiZ0aGlzLl9yZXBvcnRFcnJvcihgR290IGludGVycG9sYXRpb24gKCR7aX0ke3J9KSB3aGVyZSBleHByZXNzaW9uIHdhcyBleHBlY3RlZGAsdCxgYXQgY29sdW1uICR7b30gaW5gLGUpfV9nZXRJbnRlcnBvbGF0aW9uRW5kSW5kZXgodCxlLGkpe2ZvcihsZXQgciBvZiB0aGlzLl9mb3JFYWNoVW5xdW90ZWRDaGFyKHQsaSkpe2lmKHQuc3RhcnRzV2l0aChlLHIpKXJldHVybiByO2lmKHQuc3RhcnRzV2l0aCgiLy8iLHIpKXJldHVybiB0LmluZGV4T2YoZSxyKX1yZXR1cm4tMX0qX2ZvckVhY2hVbnF1b3RlZENoYXIodCxlKXtsZXQgaT1udWxsLHI9MDtmb3IobGV0IG89ZTtvPHQubGVuZ3RoO28rKyl7bGV0IHM9dFtvXTshV0IodC5jaGFyQ29kZUF0KG8pKXx8bnVsbCE9PWkmJmkhPT1zfHxyJTIhPTA/bnVsbD09PWkmJih5aWVsZCBvKTppPW51bGw9PT1pP3M6bnVsbCxyPSJcXCI9PT1zP3IrMTowfX19LHNtPSgoKT0+e3JldHVybihuPXNtfHwoc209e30pKVtuLk5vbmU9MF09Ik5vbmUiLG5bbi5Xcml0YWJsZT0xXT0iV3JpdGFibGUiLHNtO3ZhciBufSkoKSxpbT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXt0aGlzLmlucHV0PXQsdGhpcy5sb2NhdGlvbj1lLHRoaXMuYWJzb2x1dGVPZmZzZXQ9aSx0aGlzLnRva2Vucz1yLHRoaXMucGFyc2VGbGFncz1vLHRoaXMuZXJyb3JzPXMsdGhpcy5vZmZzZXQ9YSx0aGlzLnJwYXJlbnNFeHBlY3RlZD0wLHRoaXMucmJyYWNrZXRzRXhwZWN0ZWQ9MCx0aGlzLnJicmFjZXNFeHBlY3RlZD0wLHRoaXMuY29udGV4dD1zbS5Ob25lLHRoaXMuc291cmNlU3BhbkNhY2hlPW5ldyBNYXAsdGhpcy5pbmRleD0wfXBlZWsodCl7bGV0IGU9dGhpcy5pbmRleCt0O3JldHVybiBlPHRoaXMudG9rZW5zLmxlbmd0aD90aGlzLnRva2Vuc1tlXTpkQn1nZXQgbmV4dCgpe3JldHVybiB0aGlzLnBlZWsoMCl9Z2V0IGF0RU9GKCl7cmV0dXJuIHRoaXMuaW5kZXg+PXRoaXMudG9rZW5zLmxlbmd0aH1nZXQgaW5wdXRJbmRleCgpe3JldHVybiB0aGlzLmF0RU9GP3RoaXMuY3VycmVudEVuZEluZGV4OnRoaXMubmV4dC5pbmRleCt0aGlzLm9mZnNldH1nZXQgY3VycmVudEVuZEluZGV4KCl7cmV0dXJuIHRoaXMuaW5kZXg+MD90aGlzLnBlZWsoLTEpLmVuZCt0aGlzLm9mZnNldDowPT09dGhpcy50b2tlbnMubGVuZ3RoP3RoaXMuaW5wdXQubGVuZ3RoK3RoaXMub2Zmc2V0OnRoaXMubmV4dC5pbmRleCt0aGlzLm9mZnNldH1nZXQgY3VycmVudEFic29sdXRlT2Zmc2V0KCl7cmV0dXJuIHRoaXMuYWJzb2x1dGVPZmZzZXQrdGhpcy5pbnB1dEluZGV4fXNwYW4odCxlKXtsZXQgaT10aGlzLmN1cnJlbnRFbmRJbmRleDtpZih2b2lkIDAhPT1lJiZlPnRoaXMuY3VycmVudEVuZEluZGV4JiYoaT1lKSx0Pmkpe2xldCByPWk7aT10LHQ9cn1yZXR1cm4gbmV3IGJtKHQsaSl9c291cmNlU3Bhbih0LGUpe2xldCBpPWAke3R9QCR7dGhpcy5pbnB1dEluZGV4fToke2V9YDtyZXR1cm4gdGhpcy5zb3VyY2VTcGFuQ2FjaGUuaGFzKGkpfHx0aGlzLnNvdXJjZVNwYW5DYWNoZS5zZXQoaSx0aGlzLnNwYW4odCxlKS50b0Fic29sdXRlKHRoaXMuYWJzb2x1dGVPZmZzZXQpKSx0aGlzLnNvdXJjZVNwYW5DYWNoZS5nZXQoaSl9YWR2YW5jZSgpe3RoaXMuaW5kZXgrK313aXRoQ29udGV4dCh0LGUpe3RoaXMuY29udGV4dHw9dDtsZXQgaT1lKCk7cmV0dXJuIHRoaXMuY29udGV4dF49dCxpfWNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcih0KXtyZXR1cm4hIXRoaXMubmV4dC5pc0NoYXJhY3Rlcih0KSYmKHRoaXMuYWR2YW5jZSgpLCEwKX1wZWVrS2V5d29yZExldCgpe3JldHVybiB0aGlzLm5leHQuaXNLZXl3b3JkTGV0KCl9cGVla0tleXdvcmRBcygpe3JldHVybiB0aGlzLm5leHQuaXNLZXl3b3JkQXMoKX1leHBlY3RDaGFyYWN0ZXIodCl7dGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIodCl8fHRoaXMuZXJyb3IoYE1pc3NpbmcgZXhwZWN0ZWQgJHtTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfWApfWNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKHQpe3JldHVybiEhdGhpcy5uZXh0LmlzT3BlcmF0b3IodCkmJih0aGlzLmFkdmFuY2UoKSwhMCl9ZXhwZWN0T3BlcmF0b3IodCl7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcih0KXx8dGhpcy5lcnJvcihgTWlzc2luZyBleHBlY3RlZCBvcGVyYXRvciAke3R9YCl9cHJldHR5UHJpbnRUb2tlbih0KXtyZXR1cm4gdD09PWRCPyJlbmQgb2YgaW5wdXQiOmB0b2tlbiAke3R9YH1leHBlY3RJZGVudGlmaWVyT3JLZXl3b3JkKCl7bGV0IHQ9dGhpcy5uZXh0O3JldHVybiB0LmlzSWRlbnRpZmllcigpfHx0LmlzS2V5d29yZCgpPyh0aGlzLmFkdmFuY2UoKSx0LnRvU3RyaW5nKCkpOih0LmlzUHJpdmF0ZUlkZW50aWZpZXIoKT90aGlzLl9yZXBvcnRFcnJvckZvclByaXZhdGVJZGVudGlmaWVyKHQsImV4cGVjdGVkIGlkZW50aWZpZXIgb3Iga2V5d29yZCIpOnRoaXMuZXJyb3IoYFVuZXhwZWN0ZWQgJHt0aGlzLnByZXR0eVByaW50VG9rZW4odCl9LCBleHBlY3RlZCBpZGVudGlmaWVyIG9yIGtleXdvcmRgKSxudWxsKX1leHBlY3RJZGVudGlmaWVyT3JLZXl3b3JkT3JTdHJpbmcoKXtsZXQgdD10aGlzLm5leHQ7cmV0dXJuIHQuaXNJZGVudGlmaWVyKCl8fHQuaXNLZXl3b3JkKCl8fHQuaXNTdHJpbmcoKT8odGhpcy5hZHZhbmNlKCksdC50b1N0cmluZygpKToodC5pc1ByaXZhdGVJZGVudGlmaWVyKCk/dGhpcy5fcmVwb3J0RXJyb3JGb3JQcml2YXRlSWRlbnRpZmllcih0LCJleHBlY3RlZCBpZGVudGlmaWVyLCBrZXl3b3JkIG9yIHN0cmluZyIpOnRoaXMuZXJyb3IoYFVuZXhwZWN0ZWQgJHt0aGlzLnByZXR0eVByaW50VG9rZW4odCl9LCBleHBlY3RlZCBpZGVudGlmaWVyLCBrZXl3b3JkLCBvciBzdHJpbmdgKSwiIil9cGFyc2VDaGFpbigpe2xldCB0PVtdLGU9dGhpcy5pbnB1dEluZGV4O2Zvcig7dGhpcy5pbmRleDx0aGlzLnRva2Vucy5sZW5ndGg7KXtsZXQgaT10aGlzLnBhcnNlUGlwZSgpO2lmKHQucHVzaChpKSx0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OSkpZm9yKDEmdGhpcy5wYXJzZUZsYWdzfHx0aGlzLmVycm9yKCJCaW5kaW5nIGV4cHJlc3Npb24gY2Fubm90IGNvbnRhaW4gY2hhaW5lZCBleHByZXNzaW9uIik7dGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNTkpOyk7ZWxzZSBpZih0aGlzLmluZGV4PHRoaXMudG9rZW5zLmxlbmd0aCl7bGV0IHI9dGhpcy5pbmRleDtpZih0aGlzLmVycm9yKGBVbmV4cGVjdGVkIHRva2VuICcke3RoaXMubmV4dH0nYCksdGhpcy5pbmRleD09PXIpYnJlYWt9fWlmKDA9PT10Lmxlbmd0aCl7bGV0IGk9dGhpcy5vZmZzZXQscj10aGlzLm9mZnNldCt0aGlzLmlucHV0Lmxlbmd0aDtyZXR1cm4gbmV3IElhKHRoaXMuc3BhbihpLHIpLHRoaXMuc291cmNlU3BhbihpLHIpKX1yZXR1cm4gMT09dC5sZW5ndGg/dFswXTpuZXcga0ModGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSx0KX1wYXJzZVBpcGUoKXtsZXQgdD10aGlzLmlucHV0SW5kZXgsZT10aGlzLnBhcnNlRXhwcmVzc2lvbigpO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoInwiKSl7MSZ0aGlzLnBhcnNlRmxhZ3MmJnRoaXMuZXJyb3IoIkNhbm5vdCBoYXZlIGEgcGlwZSBpbiBhbiBhY3Rpb24gZXhwcmVzc2lvbiIpO2Rve2xldCBvLHMsaT10aGlzLmlucHV0SW5kZXgscj10aGlzLmV4cGVjdElkZW50aWZpZXJPcktleXdvcmQoKTtudWxsIT09cj9vPXRoaXMuc291cmNlU3BhbihpKToocj0iIixzPS0xIT09dGhpcy5uZXh0LmluZGV4P3RoaXMubmV4dC5pbmRleDp0aGlzLmlucHV0Lmxlbmd0aCt0aGlzLm9mZnNldCxvPW5ldyBibShzLHMpLnRvQWJzb2x1dGUodGhpcy5hYnNvbHV0ZU9mZnNldCkpO2xldCBhPVtdO2Zvcig7dGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNTgpOylhLnB1c2godGhpcy5wYXJzZUV4cHJlc3Npb24oKSk7ZT1uZXcgUl8odGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0LHMpLGUscixhLG8pfXdoaWxlKHRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoInwiKSl9cmV0dXJuIGV9cGFyc2VFeHByZXNzaW9uKCl7cmV0dXJuIHRoaXMucGFyc2VDb25kaXRpb25hbCgpfXBhcnNlQ29uZGl0aW9uYWwoKXtsZXQgdD10aGlzLmlucHV0SW5kZXgsZT10aGlzLnBhcnNlTG9naWNhbE9yKCk7aWYodGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPyIpKXtsZXQgcixpPXRoaXMucGFyc2VQaXBlKCk7aWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNTgpKXI9dGhpcy5wYXJzZVBpcGUoKTtlbHNle2xldCBzPXRoaXMuaW5wdXQuc3Vic3RyaW5nKHQsdGhpcy5pbnB1dEluZGV4KTt0aGlzLmVycm9yKGBDb25kaXRpb25hbCBleHByZXNzaW9uICR7c30gcmVxdWlyZXMgYWxsIDMgZXhwcmVzc2lvbnNgKSxyPW5ldyBJYSh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKX1yZXR1cm4gbmV3IEZDKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksZSxpLHIpfXJldHVybiBlfXBhcnNlTG9naWNhbE9yKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZUxvZ2ljYWxBbmQoKTtmb3IoO3RoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoInx8Iik7KXtsZXQgaT10aGlzLnBhcnNlTG9naWNhbEFuZCgpO2U9bmV3IEdsKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksInx8IixlLGkpfXJldHVybiBlfXBhcnNlTG9naWNhbEFuZCgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VOdWxsaXNoQ29hbGVzY2luZygpO2Zvcig7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiJiYiKTspe2xldCBpPXRoaXMucGFyc2VOdWxsaXNoQ29hbGVzY2luZygpO2U9bmV3IEdsKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksIiYmIixlLGkpfXJldHVybiBlfXBhcnNlTnVsbGlzaENvYWxlc2NpbmcoKXtsZXQgdD10aGlzLmlucHV0SW5kZXgsZT10aGlzLnBhcnNlRXF1YWxpdHkoKTtmb3IoO3RoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIj8/Iik7KXtsZXQgaT10aGlzLnBhcnNlRXF1YWxpdHkoKTtlPW5ldyBHbCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLCI/PyIsZSxpKX1yZXR1cm4gZX1wYXJzZUVxdWFsaXR5KCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZVJlbGF0aW9uYWwoKTtmb3IoO3RoaXMubmV4dC50eXBlPT1uaS5PcGVyYXRvcjspe2xldCBpPXRoaXMubmV4dC5zdHJWYWx1ZTtzd2l0Y2goaSl7Y2FzZSI9PSI6Y2FzZSI9PT0iOmNhc2UiIT0iOmNhc2UiIT09Ijp0aGlzLmFkdmFuY2UoKTtsZXQgcj10aGlzLnBhcnNlUmVsYXRpb25hbCgpO2U9bmV3IEdsKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksaSxlLHIpO2NvbnRpbnVlfWJyZWFrfXJldHVybiBlfXBhcnNlUmVsYXRpb25hbCgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VBZGRpdGl2ZSgpO2Zvcig7dGhpcy5uZXh0LnR5cGU9PW5pLk9wZXJhdG9yOyl7bGV0IGk9dGhpcy5uZXh0LnN0clZhbHVlO3N3aXRjaChpKXtjYXNlIjwiOmNhc2UiPiI6Y2FzZSI8PSI6Y2FzZSI+PSI6dGhpcy5hZHZhbmNlKCk7bGV0IHI9dGhpcy5wYXJzZUFkZGl0aXZlKCk7ZT1uZXcgR2wodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpLGUscik7Y29udGludWV9YnJlYWt9cmV0dXJuIGV9cGFyc2VBZGRpdGl2ZSgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VNdWx0aXBsaWNhdGl2ZSgpO2Zvcig7dGhpcy5uZXh0LnR5cGU9PW5pLk9wZXJhdG9yOyl7bGV0IGk9dGhpcy5uZXh0LnN0clZhbHVlO3N3aXRjaChpKXtjYXNlIisiOmNhc2UiLSI6dGhpcy5hZHZhbmNlKCk7bGV0IHI9dGhpcy5wYXJzZU11bHRpcGxpY2F0aXZlKCk7ZT1uZXcgR2wodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpLGUscik7Y29udGludWV9YnJlYWt9cmV0dXJuIGV9cGFyc2VNdWx0aXBsaWNhdGl2ZSgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VQcmVmaXgoKTtmb3IoO3RoaXMubmV4dC50eXBlPT1uaS5PcGVyYXRvcjspe2xldCBpPXRoaXMubmV4dC5zdHJWYWx1ZTtzd2l0Y2goaSl7Y2FzZSIqIjpjYXNlIiUiOmNhc2UiLyI6dGhpcy5hZHZhbmNlKCk7bGV0IHI9dGhpcy5wYXJzZVByZWZpeCgpO2U9bmV3IEdsKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksaSxlLHIpO2NvbnRpbnVlfWJyZWFrfXJldHVybiBlfXBhcnNlUHJlZml4KCl7aWYodGhpcy5uZXh0LnR5cGU9PW5pLk9wZXJhdG9yKXtsZXQgaSx0PXRoaXMuaW5wdXRJbmRleDtzd2l0Y2godGhpcy5uZXh0LnN0clZhbHVlKXtjYXNlIisiOnJldHVybiB0aGlzLmFkdmFuY2UoKSxpPXRoaXMucGFyc2VQcmVmaXgoKSx6Yy5jcmVhdGVQbHVzKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksaSk7Y2FzZSItIjpyZXR1cm4gdGhpcy5hZHZhbmNlKCksaT10aGlzLnBhcnNlUHJlZml4KCksemMuY3JlYXRlTWludXModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpKTtjYXNlIiEiOnJldHVybiB0aGlzLmFkdmFuY2UoKSxpPXRoaXMucGFyc2VQcmVmaXgoKSxuZXcgSEModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpKX19cmV0dXJuIHRoaXMucGFyc2VDYWxsQ2hhaW4oKX1wYXJzZUNhbGxDaGFpbigpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VQcmltYXJ5KCk7Zm9yKDs7KWlmKHRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDQ2KSllPXRoaXMucGFyc2VBY2Nlc3NNZW1iZXIoZSx0LCExKTtlbHNlIGlmKHRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIj8uIikpZT10aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0MCk/dGhpcy5wYXJzZUNhbGwoZSx0LCEwKTp0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig5MSk/dGhpcy5wYXJzZUtleWVkUmVhZE9yV3JpdGUoZSx0LCEwKTp0aGlzLnBhcnNlQWNjZXNzTWVtYmVyKGUsdCwhMCk7ZWxzZSBpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig5MSkpZT10aGlzLnBhcnNlS2V5ZWRSZWFkT3JXcml0ZShlLHQsITEpO2Vsc2UgaWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDApKWU9dGhpcy5wYXJzZUNhbGwoZSx0LCExKTtlbHNle2lmKCF0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCIhIikpcmV0dXJuIGU7ZT1uZXcgVUModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxlKX19cGFyc2VQcmltYXJ5KCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4O2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDQwKSl7dGhpcy5ycGFyZW5zRXhwZWN0ZWQrKztsZXQgZT10aGlzLnBhcnNlUGlwZSgpO3JldHVybiB0aGlzLnJwYXJlbnNFeHBlY3RlZC0tLHRoaXMuZXhwZWN0Q2hhcmFjdGVyKDQxKSxlfWlmKHRoaXMubmV4dC5pc0tleXdvcmROdWxsKCkpcmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyB0YSh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLG51bGwpO2lmKHRoaXMubmV4dC5pc0tleXdvcmRVbmRlZmluZWQoKSlyZXR1cm4gdGhpcy5hZHZhbmNlKCksbmV3IHRhKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksdm9pZCAwKTtpZih0aGlzLm5leHQuaXNLZXl3b3JkVHJ1ZSgpKXJldHVybiB0aGlzLmFkdmFuY2UoKSxuZXcgdGEodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSwhMCk7aWYodGhpcy5uZXh0LmlzS2V5d29yZEZhbHNlKCkpcmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyB0YSh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLCExKTtpZih0aGlzLm5leHQuaXNLZXl3b3JkVGhpcygpKXJldHVybiB0aGlzLmFkdmFuY2UoKSxuZXcgT0ModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSk7aWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoOTEpKXt0aGlzLnJicmFja2V0c0V4cGVjdGVkKys7bGV0IGU9dGhpcy5wYXJzZUV4cHJlc3Npb25MaXN0KDkzKTtyZXR1cm4gdGhpcy5yYnJhY2tldHNFeHBlY3RlZC0tLHRoaXMuZXhwZWN0Q2hhcmFjdGVyKDkzKSxuZXcgT18odGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxlKX1pZih0aGlzLm5leHQuaXNDaGFyYWN0ZXIodGgpKXJldHVybiB0aGlzLnBhcnNlTGl0ZXJhbE1hcCgpO2lmKHRoaXMubmV4dC5pc0lkZW50aWZpZXIoKSlyZXR1cm4gdGhpcy5wYXJzZUFjY2Vzc01lbWJlcihuZXcgeG0odGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSksdCwhMSk7aWYodGhpcy5uZXh0LmlzTnVtYmVyKCkpe2xldCBlPXRoaXMubmV4dC50b051bWJlcigpO3JldHVybiB0aGlzLmFkdmFuY2UoKSxuZXcgdGEodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxlKX1pZih0aGlzLm5leHQuaXNTdHJpbmcoKSl7bGV0IGU9dGhpcy5uZXh0LnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyB0YSh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGUpfXJldHVybiB0aGlzLm5leHQuaXNQcml2YXRlSWRlbnRpZmllcigpPyh0aGlzLl9yZXBvcnRFcnJvckZvclByaXZhdGVJZGVudGlmaWVyKHRoaXMubmV4dCxudWxsKSxuZXcgSWEodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSkpOnRoaXMuaW5kZXg+PXRoaXMudG9rZW5zLmxlbmd0aD8odGhpcy5lcnJvcihgVW5leHBlY3RlZCBlbmQgb2YgZXhwcmVzc2lvbjogJHt0aGlzLmlucHV0fWApLG5ldyBJYSh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKSk6KHRoaXMuZXJyb3IoYFVuZXhwZWN0ZWQgdG9rZW4gJHt0aGlzLm5leHR9YCksbmV3IElhKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCkpKX1wYXJzZUV4cHJlc3Npb25MaXN0KHQpe2xldCBlPVtdO2Rve2lmKHRoaXMubmV4dC5pc0NoYXJhY3Rlcih0KSlicmVhaztlLnB1c2godGhpcy5wYXJzZVBpcGUoKSl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDQpKTtyZXR1cm4gZX1wYXJzZUxpdGVyYWxNYXAoKXtsZXQgdD1bXSxlPVtdLGk9dGhpcy5pbnB1dEluZGV4O2lmKHRoaXMuZXhwZWN0Q2hhcmFjdGVyKHRoKSwhdGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoT3UpKXt0aGlzLnJicmFjZXNFeHBlY3RlZCsrO2Rve2xldCByPXRoaXMuaW5wdXRJbmRleCxvPXRoaXMubmV4dC5pc1N0cmluZygpLHM9dGhpcy5leHBlY3RJZGVudGlmaWVyT3JLZXl3b3JkT3JTdHJpbmcoKTtpZih0LnB1c2goe2tleTpzLHF1b3RlZDpvfSksbyl0aGlzLmV4cGVjdENoYXJhY3Rlcig1OCksZS5wdXNoKHRoaXMucGFyc2VQaXBlKCkpO2Vsc2UgaWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNTgpKWUucHVzaCh0aGlzLnBhcnNlUGlwZSgpKTtlbHNle2xldCBhPXRoaXMuc3BhbihyKSxsPXRoaXMuc291cmNlU3BhbihyKTtlLnB1c2gobmV3IEx1KGEsbCxsLG5ldyB4bShhLGwpLHMpKX19d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDQpKTt0aGlzLnJicmFjZXNFeHBlY3RlZC0tLHRoaXMuZXhwZWN0Q2hhcmFjdGVyKE91KX1yZXR1cm4gbmV3IFZDKHRoaXMuc3BhbihpKSx0aGlzLnNvdXJjZVNwYW4oaSksdCxlKX1wYXJzZUFjY2Vzc01lbWJlcih0LGUsaSl7bGV0IGEscj10aGlzLmlucHV0SW5kZXgsbz10aGlzLndpdGhDb250ZXh0KHNtLldyaXRhYmxlLCgpPT57bGV0IGw9dGhpcy5leHBlY3RJZGVudGlmaWVyT3JLZXl3b3JkKCk/PyIiO3JldHVybiAwPT09bC5sZW5ndGgmJnRoaXMuZXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIgZm9yIHByb3BlcnR5IGFjY2VzcyIsdC5zcGFuLmVuZCksbH0pLHM9dGhpcy5zb3VyY2VTcGFuKHIpO2lmKGkpdGhpcy5jb25zdW1lT3B0aW9uYWxBc3NpZ25tZW50KCk/KHRoaXMuZXJyb3IoIlRoZSAnPy4nIG9wZXJhdG9yIGNhbm5vdCBiZSB1c2VkIGluIHRoZSBhc3NpZ25tZW50IiksYT1uZXcgSWEodGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSkpOmE9bmV3IExDKHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSkscyx0LG8pO2Vsc2UgaWYodGhpcy5jb25zdW1lT3B0aW9uYWxBc3NpZ25tZW50KCkpe2lmKCEoMSZ0aGlzLnBhcnNlRmxhZ3MpKXJldHVybiB0aGlzLmVycm9yKCJCaW5kaW5ncyBjYW5ub3QgY29udGFpbiBhc3NpZ25tZW50cyIpLG5ldyBJYSh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpKTtsZXQgbD10aGlzLnBhcnNlQ29uZGl0aW9uYWwoKTthPW5ldyBOQyh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHMsdCxvLGwpfWVsc2UgYT1uZXcgTHUodGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSxzLHQsbyk7cmV0dXJuIGF9cGFyc2VDYWxsKHQsZSxpKXtsZXQgcj10aGlzLmlucHV0SW5kZXg7dGhpcy5ycGFyZW5zRXhwZWN0ZWQrKztsZXQgbz10aGlzLnBhcnNlQ2FsbEFyZ3VtZW50cygpLHM9dGhpcy5zcGFuKHIsdGhpcy5pbnB1dEluZGV4KS50b0Fic29sdXRlKHRoaXMuYWJzb2x1dGVPZmZzZXQpO3RoaXMuZXhwZWN0Q2hhcmFjdGVyKDQxKSx0aGlzLnJwYXJlbnNFeHBlY3RlZC0tO2xldCBhPXRoaXMuc3BhbihlKSxsPXRoaXMuc291cmNlU3BhbihlKTtyZXR1cm4gaT9uZXcga18oYSxsLHQsbyxzKTpuZXcgYWgoYSxsLHQsbyxzKX1jb25zdW1lT3B0aW9uYWxBc3NpZ25tZW50KCl7cmV0dXJuIDImdGhpcy5wYXJzZUZsYWdzJiZ0aGlzLm5leHQuaXNPcGVyYXRvcigiISIpJiZ0aGlzLnBlZWsoMSkuaXNPcGVyYXRvcigiPSIpPyh0aGlzLmFkdmFuY2UoKSx0aGlzLmFkdmFuY2UoKSwhMCk6dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPSIpfXBhcnNlQ2FsbEFyZ3VtZW50cygpe2lmKHRoaXMubmV4dC5pc0NoYXJhY3Rlcig0MSkpcmV0dXJuW107bGV0IHQ9W107ZG97dC5wdXNoKHRoaXMucGFyc2VQaXBlKCkpfXdoaWxlKHRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDQ0KSk7cmV0dXJuIHR9ZXhwZWN0VGVtcGxhdGVCaW5kaW5nS2V5KCl7bGV0IHQ9IiIsZT0hMSxpPXRoaXMuY3VycmVudEFic29sdXRlT2Zmc2V0O2Rve3QrPXRoaXMuZXhwZWN0SWRlbnRpZmllck9yS2V5d29yZE9yU3RyaW5nKCksZT10aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCItIiksZSYmKHQrPSItIil9d2hpbGUoZSk7cmV0dXJue3NvdXJjZTp0LHNwYW46bmV3IGFsKGksaSt0Lmxlbmd0aCl9fXBhcnNlVGVtcGxhdGVCaW5kaW5ncyh0KXtsZXQgZT1bXTtmb3IoZS5wdXNoKC4uLnRoaXMucGFyc2VEaXJlY3RpdmVLZXl3b3JkQmluZGluZ3ModCkpO3RoaXMuaW5kZXg8dGhpcy50b2tlbnMubGVuZ3RoOyl7bGV0IGk9dGhpcy5wYXJzZUxldEJpbmRpbmcoKTtpZihpKWUucHVzaChpKTtlbHNle2xldCByPXRoaXMuZXhwZWN0VGVtcGxhdGVCaW5kaW5nS2V5KCksbz10aGlzLnBhcnNlQXNCaW5kaW5nKHIpO28/ZS5wdXNoKG8pOihyLnNvdXJjZT10LnNvdXJjZStyLnNvdXJjZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStyLnNvdXJjZS5zdWJzdHJpbmcoMSksZS5wdXNoKC4uLnRoaXMucGFyc2VEaXJlY3RpdmVLZXl3b3JkQmluZGluZ3MocikpKX10aGlzLmNvbnN1bWVTdGF0ZW1lbnRUZXJtaW5hdG9yKCl9cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50ZW1wbGF0ZUJpbmRpbmdzPXQsdGhpcy53YXJuaW5ncz1lLHRoaXMuZXJyb3JzPWl9fShlLFtdLHRoaXMuZXJyb3JzKX1wYXJzZUtleWVkUmVhZE9yV3JpdGUodCxlLGkpe3JldHVybiB0aGlzLndpdGhDb250ZXh0KHNtLldyaXRhYmxlLCgpPT57dGhpcy5yYnJhY2tldHNFeHBlY3RlZCsrO2xldCByPXRoaXMucGFyc2VQaXBlKCk7aWYociBpbnN0YW5jZW9mIElhJiZ0aGlzLmVycm9yKCJLZXkgYWNjZXNzIGNhbm5vdCBiZSBlbXB0eSIpLHRoaXMucmJyYWNrZXRzRXhwZWN0ZWQtLSx0aGlzLmV4cGVjdENoYXJhY3Rlcig5MyksIXRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIj0iKSlyZXR1cm4gaT9uZXcgUF8odGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSx0LHIpOm5ldyBJXyh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHQscik7aWYoIWkpe2xldCBvPXRoaXMucGFyc2VDb25kaXRpb25hbCgpO3JldHVybiBuZXcgQkModGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSx0LHIsbyl9cmV0dXJuIHRoaXMuZXJyb3IoIlRoZSAnPy4nIG9wZXJhdG9yIGNhbm5vdCBiZSB1c2VkIGluIHRoZSBhc3NpZ25tZW50IiksbmV3IElhKHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSkpfSl9cGFyc2VEaXJlY3RpdmVLZXl3b3JkQmluZGluZ3ModCl7bGV0IGU9W107dGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNTgpO2xldCBpPXRoaXMuZ2V0RGlyZWN0aXZlQm91bmRUYXJnZXQoKSxyPXRoaXMuY3VycmVudEFic29sdXRlT2Zmc2V0LG89dGhpcy5wYXJzZUFzQmluZGluZyh0KTtvfHwodGhpcy5jb25zdW1lU3RhdGVtZW50VGVybWluYXRvcigpLHI9dGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQpO2xldCBzPW5ldyBhbCh0LnNwYW4uc3RhcnQscik7cmV0dXJuIGUucHVzaChuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuc291cmNlU3Bhbj10LHRoaXMua2V5PWUsdGhpcy52YWx1ZT1pfX0ocyx0LGkpKSxvJiZlLnB1c2gobyksZX1nZXREaXJlY3RpdmVCb3VuZFRhcmdldCgpe2lmKHRoaXMubmV4dD09PWRCfHx0aGlzLnBlZWtLZXl3b3JkQXMoKXx8dGhpcy5wZWVrS2V5d29yZExldCgpKXJldHVybiBudWxsO2xldCB0PXRoaXMucGFyc2VQaXBlKCkse3N0YXJ0OmUsZW5kOml9PXQuc3BhbixyPXRoaXMuaW5wdXQuc3Vic3RyaW5nKGUsaSk7cmV0dXJuIG5ldyBSdSh0LHIsdGhpcy5sb2NhdGlvbix0aGlzLmFic29sdXRlT2Zmc2V0K2UsdGhpcy5lcnJvcnMpfXBhcnNlQXNCaW5kaW5nKHQpe2lmKCF0aGlzLnBlZWtLZXl3b3JkQXMoKSlyZXR1cm4gbnVsbDt0aGlzLmFkdmFuY2UoKTtsZXQgZT10aGlzLmV4cGVjdFRlbXBsYXRlQmluZGluZ0tleSgpO3RoaXMuY29uc3VtZVN0YXRlbWVudFRlcm1pbmF0b3IoKTtsZXQgaT1uZXcgYWwodC5zcGFuLnN0YXJ0LHRoaXMuY3VycmVudEFic29sdXRlT2Zmc2V0KTtyZXR1cm4gbmV3IHpDKGksZSx0KX1wYXJzZUxldEJpbmRpbmcoKXtpZighdGhpcy5wZWVrS2V5d29yZExldCgpKXJldHVybiBudWxsO2xldCB0PXRoaXMuY3VycmVudEFic29sdXRlT2Zmc2V0O3RoaXMuYWR2YW5jZSgpO2xldCBlPXRoaXMuZXhwZWN0VGVtcGxhdGVCaW5kaW5nS2V5KCksaT1udWxsO3RoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIj0iKSYmKGk9dGhpcy5leHBlY3RUZW1wbGF0ZUJpbmRpbmdLZXkoKSksdGhpcy5jb25zdW1lU3RhdGVtZW50VGVybWluYXRvcigpO2xldCByPW5ldyBhbCh0LHRoaXMuY3VycmVudEFic29sdXRlT2Zmc2V0KTtyZXR1cm4gbmV3IHpDKHIsZSxpKX1jb25zdW1lU3RhdGVtZW50VGVybWluYXRvcigpe3RoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDU5KXx8dGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDQpfWVycm9yKHQsZT1udWxsKXt0aGlzLmVycm9ycy5wdXNoKG5ldyBSQyh0LHRoaXMuaW5wdXQsdGhpcy5sb2NhdGlvblRleHQoZSksdGhpcy5sb2NhdGlvbikpLHRoaXMuc2tpcCgpfWxvY2F0aW9uVGV4dCh0PW51bGwpe3JldHVybiBudWxsPT10JiYodD10aGlzLmluZGV4KSx0PHRoaXMudG9rZW5zLmxlbmd0aD9gYXQgY29sdW1uICR7dGhpcy50b2tlbnNbdF0uaW5kZXgrMX0gaW5gOiJhdCB0aGUgZW5kIG9mIHRoZSBleHByZXNzaW9uIn1fcmVwb3J0RXJyb3JGb3JQcml2YXRlSWRlbnRpZmllcih0LGUpe2xldCBpPWBQcml2YXRlIGlkZW50aWZpZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiBVbmV4cGVjdGVkIHByaXZhdGUgaWRlbnRpZmllcjogJHt0fWA7bnVsbCE9PWUmJihpKz1gLCAke2V9YCksdGhpcy5lcnJvcihpKX1za2lwKCl7bGV0IHQ9dGhpcy5uZXh0O2Zvcig7dGhpcy5pbmRleDx0aGlzLnRva2Vucy5sZW5ndGgmJiF0LmlzQ2hhcmFjdGVyKDU5KSYmIXQuaXNPcGVyYXRvcigifCIpJiYodGhpcy5ycGFyZW5zRXhwZWN0ZWQ8PTB8fCF0LmlzQ2hhcmFjdGVyKDQxKSkmJih0aGlzLnJicmFjZXNFeHBlY3RlZDw9MHx8IXQuaXNDaGFyYWN0ZXIoT3UpKSYmKHRoaXMucmJyYWNrZXRzRXhwZWN0ZWQ8PTB8fCF0LmlzQ2hhcmFjdGVyKDkzKSkmJiEodGhpcy5jb250ZXh0JnNtLldyaXRhYmxlJiZ0LmlzT3BlcmF0b3IoIj0iKSk7KXRoaXMubmV4dC5pc0Vycm9yKCkmJnRoaXMuZXJyb3JzLnB1c2gobmV3IFJDKHRoaXMubmV4dC50b1N0cmluZygpLHRoaXMuaW5wdXQsdGhpcy5sb2NhdGlvblRleHQoKSx0aGlzLmxvY2F0aW9uKSksdGhpcy5hZHZhbmNlKCksdD10aGlzLm5leHR9fSxkVj1jbGFzcyBleHRlbmRzIFpCe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmVycm9ycz1bXX12aXNpdFBpcGUoKXt0aGlzLmVycm9ycy5wdXNoKCJwaXBlcyIpfX0sQ209Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZVNwYW49dCx0aGlzLmkxOG49ZX19LEZfPWNsYXNzIGV4dGVuZHMgQ217Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoZSxyKSx0aGlzLnZhbHVlPXQsdGhpcy50b2tlbnM9aX12aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0VGV4dCh0aGlzLGUpfX0sTl89Y2xhc3MgZXh0ZW5kcyBDbXtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7c3VwZXIocixzKSx0aGlzLnN3aXRjaFZhbHVlPXQsdGhpcy50eXBlPWUsdGhpcy5jYXNlcz1pLHRoaXMuc3dpdGNoVmFsdWVTb3VyY2VTcGFuPW99dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdEV4cGFuc2lvbih0aGlzLGUpfX0saFY9Y2xhc3MgZXh0ZW5kcyBDbXtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXtzdXBlcihpLGEpLHRoaXMubmFtZT10LHRoaXMudmFsdWU9ZSx0aGlzLmtleVNwYW49cix0aGlzLnZhbHVlU3Bhbj1vLHRoaXMudmFsdWVUb2tlbnM9c312aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0QXR0cmlidXRlKHRoaXMsZSl9fSxxQz1jbGFzcyBleHRlbmRzIENte2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzPW51bGwsYSl7c3VwZXIocixhKSx0aGlzLm5hbWU9dCx0aGlzLmF0dHJzPWUsdGhpcy5jaGlsZHJlbj1pLHRoaXMuc3RhcnRTb3VyY2VTcGFuPW8sdGhpcy5lbmRTb3VyY2VTcGFuPXN9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdEVsZW1lbnQodGhpcyxlKX19LHhEPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52YWx1ZT10LHRoaXMuc291cmNlU3Bhbj1lfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRDb21tZW50KHRoaXMsZSl9fTtmdW5jdGlvbiBVdShuLHQsZT1udWxsKXtsZXQgaT1bXSxyPW4udmlzaXQ/bz0+bi52aXNpdChvLGUpfHxvLnZpc2l0KG4sZSk6bz0+by52aXNpdChuLGUpO3JldHVybiB0LmZvckVhY2gobz0+e2xldCBzPXIobyk7cyYmaS5wdXNoKHMpfSksaX12YXIgQ0Q9e0FFbGlnOiJceGM2IixBTVA6IiYiLGFtcDoiJiIsQWFjdXRlOiJceGMxIixBYnJldmU6Ilx1MDEwMiIsQWNpcmM6Ilx4YzIiLEFjeToiXHUwNDEwIixBZnI6Ilx1ZDgzNVx1ZGQwNCIsQWdyYXZlOiJceGMwIixBbHBoYToiXHUwMzkxIixBbWFjcjoiXHUwMTAwIixBbmQ6Ilx1MmE1MyIsQW9nb246Ilx1MDEwNCIsQW9wZjoiXHVkODM1XHVkZDM4IixBcHBseUZ1bmN0aW9uOiJcdTIwNjEiLGFmOiJcdTIwNjEiLEFyaW5nOiJceGM1IixhbmdzdDoiXHhjNSIsQXNjcjoiXHVkODM1XHVkYzljIixBc3NpZ246Ilx1MjI1NCIsY29sb25lOiJcdTIyNTQiLGNvbG9uZXE6Ilx1MjI1NCIsQXRpbGRlOiJceGMzIixBdW1sOiJceGM0IixCYWNrc2xhc2g6Ilx1MjIxNiIsc2V0bWludXM6Ilx1MjIxNiIsc2V0bW46Ilx1MjIxNiIsc21hbGxzZXRtaW51czoiXHUyMjE2Iixzc2V0bW46Ilx1MjIxNiIsQmFydjoiXHUyYWU3IixCYXJ3ZWQ6Ilx1MjMwNiIsZG91YmxlYmFyd2VkZ2U6Ilx1MjMwNiIsQmN5OiJcdTA0MTEiLEJlY2F1c2U6Ilx1MjIzNSIsYmVjYXVzOiJcdTIyMzUiLGJlY2F1c2U6Ilx1MjIzNSIsQmVybm91bGxpczoiXHUyMTJjIixCc2NyOiJcdTIxMmMiLGJlcm5vdToiXHUyMTJjIixCZXRhOiJcdTAzOTIiLEJmcjoiXHVkODM1XHVkZDA1IixCb3BmOiJcdWQ4MzVcdWRkMzkiLEJyZXZlOiJcdTAyZDgiLGJyZXZlOiJcdTAyZDgiLEJ1bXBlcToiXHUyMjRlIixIdW1wRG93bkh1bXA6Ilx1MjI0ZSIsYnVtcDoiXHUyMjRlIixDSGN5OiJcdTA0MjciLENPUFk6Ilx4YTkiLGNvcHk6Ilx4YTkiLENhY3V0ZToiXHUwMTA2IixDYXA6Ilx1MjJkMiIsQ2FwaXRhbERpZmZlcmVudGlhbEQ6Ilx1MjE0NSIsREQ6Ilx1MjE0NSIsQ2F5bGV5czoiXHUyMTJkIixDZnI6Ilx1MjEyZCIsQ2Nhcm9uOiJcdTAxMGMiLENjZWRpbDoiXHhjNyIsQ2NpcmM6Ilx1MDEwOCIsQ2NvbmludDoiXHUyMjMwIixDZG90OiJcdTAxMGEiLENlZGlsbGE6Ilx4YjgiLGNlZGlsOiJceGI4IixDZW50ZXJEb3Q6Ilx4YjciLGNlbnRlcmRvdDoiXHhiNyIsbWlkZG90OiJceGI3IixDaGk6Ilx1MDNhNyIsQ2lyY2xlRG90OiJcdTIyOTkiLG9kb3Q6Ilx1MjI5OSIsQ2lyY2xlTWludXM6Ilx1MjI5NiIsb21pbnVzOiJcdTIyOTYiLENpcmNsZVBsdXM6Ilx1MjI5NSIsb3BsdXM6Ilx1MjI5NSIsQ2lyY2xlVGltZXM6Ilx1MjI5NyIsb3RpbWVzOiJcdTIyOTciLENsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDoiXHUyMjMyIixjd2NvbmludDoiXHUyMjMyIixDbG9zZUN1cmx5RG91YmxlUXVvdGU6Ilx1MjAxZCIscmRxdW86Ilx1MjAxZCIscmRxdW9yOiJcdTIwMWQiLENsb3NlQ3VybHlRdW90ZToiXHUyMDE5Iixyc3F1bzoiXHUyMDE5Iixyc3F1b3I6Ilx1MjAxOSIsQ29sb246Ilx1MjIzNyIsUHJvcG9ydGlvbjoiXHUyMjM3IixDb2xvbmU6Ilx1MmE3NCIsQ29uZ3J1ZW50OiJcdTIyNjEiLGVxdWl2OiJcdTIyNjEiLENvbmludDoiXHUyMjJmIixEb3VibGVDb250b3VySW50ZWdyYWw6Ilx1MjIyZiIsQ29udG91ckludGVncmFsOiJcdTIyMmUiLGNvbmludDoiXHUyMjJlIixvaW50OiJcdTIyMmUiLENvcGY6Ilx1MjEwMiIsY29tcGxleGVzOiJcdTIxMDIiLENvcHJvZHVjdDoiXHUyMjEwIixjb3Byb2Q6Ilx1MjIxMCIsQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDoiXHUyMjMzIixhd2NvbmludDoiXHUyMjMzIixDcm9zczoiXHUyYTJmIixDc2NyOiJcdWQ4MzVcdWRjOWUiLEN1cDoiXHUyMmQzIixDdXBDYXA6Ilx1MjI0ZCIsYXN5bXBlcToiXHUyMjRkIixERG90cmFoZDoiXHUyOTExIixESmN5OiJcdTA0MDIiLERTY3k6Ilx1MDQwNSIsRFpjeToiXHUwNDBmIixEYWdnZXI6Ilx1MjAyMSIsZGRhZ2dlcjoiXHUyMDIxIixEYXJyOiJcdTIxYTEiLERhc2h2OiJcdTJhZTQiLERvdWJsZUxlZnRUZWU6Ilx1MmFlNCIsRGNhcm9uOiJcdTAxMGUiLERjeToiXHUwNDE0IixEZWw6Ilx1MjIwNyIsbmFibGE6Ilx1MjIwNyIsRGVsdGE6Ilx1MDM5NCIsRGZyOiJcdWQ4MzVcdWRkMDciLERpYWNyaXRpY2FsQWN1dGU6Ilx4YjQiLGFjdXRlOiJceGI0IixEaWFjcml0aWNhbERvdDoiXHUwMmQ5Iixkb3Q6Ilx1MDJkOSIsRGlhY3JpdGljYWxEb3VibGVBY3V0ZToiXHUwMmRkIixkYmxhYzoiXHUwMmRkIixEaWFjcml0aWNhbEdyYXZlOiJgIixncmF2ZToiYCIsRGlhY3JpdGljYWxUaWxkZToiXHUwMmRjIix0aWxkZToiXHUwMmRjIixEaWFtb25kOiJcdTIyYzQiLGRpYW06Ilx1MjJjNCIsZGlhbW9uZDoiXHUyMmM0IixEaWZmZXJlbnRpYWxEOiJcdTIxNDYiLGRkOiJcdTIxNDYiLERvcGY6Ilx1ZDgzNVx1ZGQzYiIsRG90OiJceGE4IixEb3VibGVEb3Q6Ilx4YTgiLGRpZToiXHhhOCIsdW1sOiJceGE4IixEb3REb3Q6Ilx1MjBkYyIsRG90RXF1YWw6Ilx1MjI1MCIsZG90ZXE6Ilx1MjI1MCIsZXNkb3Q6Ilx1MjI1MCIsRG91YmxlRG93bkFycm93OiJcdTIxZDMiLERvd25hcnJvdzoiXHUyMWQzIixkQXJyOiJcdTIxZDMiLERvdWJsZUxlZnRBcnJvdzoiXHUyMWQwIixMZWZ0YXJyb3c6Ilx1MjFkMCIsbEFycjoiXHUyMWQwIixEb3VibGVMZWZ0UmlnaHRBcnJvdzoiXHUyMWQ0IixMZWZ0cmlnaHRhcnJvdzoiXHUyMWQ0IixoQXJyOiJcdTIxZDQiLGlmZjoiXHUyMWQ0IixEb3VibGVMb25nTGVmdEFycm93OiJcdTI3ZjgiLExvbmdsZWZ0YXJyb3c6Ilx1MjdmOCIseGxBcnI6Ilx1MjdmOCIsRG91YmxlTG9uZ0xlZnRSaWdodEFycm93OiJcdTI3ZmEiLExvbmdsZWZ0cmlnaHRhcnJvdzoiXHUyN2ZhIix4aEFycjoiXHUyN2ZhIixEb3VibGVMb25nUmlnaHRBcnJvdzoiXHUyN2Y5IixMb25ncmlnaHRhcnJvdzoiXHUyN2Y5Iix4ckFycjoiXHUyN2Y5IixEb3VibGVSaWdodEFycm93OiJcdTIxZDIiLEltcGxpZXM6Ilx1MjFkMiIsUmlnaHRhcnJvdzoiXHUyMWQyIixyQXJyOiJcdTIxZDIiLERvdWJsZVJpZ2h0VGVlOiJcdTIyYTgiLHZEYXNoOiJcdTIyYTgiLERvdWJsZVVwQXJyb3c6Ilx1MjFkMSIsVXBhcnJvdzoiXHUyMWQxIix1QXJyOiJcdTIxZDEiLERvdWJsZVVwRG93bkFycm93OiJcdTIxZDUiLFVwZG93bmFycm93OiJcdTIxZDUiLHZBcnI6Ilx1MjFkNSIsRG91YmxlVmVydGljYWxCYXI6Ilx1MjIyNSIscGFyOiJcdTIyMjUiLHBhcmFsbGVsOiJcdTIyMjUiLHNob3J0cGFyYWxsZWw6Ilx1MjIyNSIsc3BhcjoiXHUyMjI1IixEb3duQXJyb3c6Ilx1MjE5MyIsU2hvcnREb3duQXJyb3c6Ilx1MjE5MyIsZGFycjoiXHUyMTkzIixkb3duYXJyb3c6Ilx1MjE5MyIsRG93bkFycm93QmFyOiJcdTI5MTMiLERvd25BcnJvd1VwQXJyb3c6Ilx1MjFmNSIsZHVhcnI6Ilx1MjFmNSIsRG93bkJyZXZlOiJcdTAzMTEiLERvd25MZWZ0UmlnaHRWZWN0b3I6Ilx1Mjk1MCIsRG93bkxlZnRUZWVWZWN0b3I6Ilx1Mjk1ZSIsRG93bkxlZnRWZWN0b3I6Ilx1MjFiZCIsbGVmdGhhcnBvb25kb3duOiJcdTIxYmQiLGxoYXJkOiJcdTIxYmQiLERvd25MZWZ0VmVjdG9yQmFyOiJcdTI5NTYiLERvd25SaWdodFRlZVZlY3RvcjoiXHUyOTVmIixEb3duUmlnaHRWZWN0b3I6Ilx1MjFjMSIscmhhcmQ6Ilx1MjFjMSIscmlnaHRoYXJwb29uZG93bjoiXHUyMWMxIixEb3duUmlnaHRWZWN0b3JCYXI6Ilx1Mjk1NyIsRG93blRlZToiXHUyMmE0Iix0b3A6Ilx1MjJhNCIsRG93blRlZUFycm93OiJcdTIxYTciLG1hcHN0b2Rvd246Ilx1MjFhNyIsRHNjcjoiXHVkODM1XHVkYzlmIixEc3Ryb2s6Ilx1MDExMCIsRU5HOiJcdTAxNGEiLEVUSDoiXHhkMCIsRWFjdXRlOiJceGM5IixFY2Fyb246Ilx1MDExYSIsRWNpcmM6Ilx4Y2EiLEVjeToiXHUwNDJkIixFZG90OiJcdTAxMTYiLEVmcjoiXHVkODM1XHVkZDA4IixFZ3JhdmU6Ilx4YzgiLEVsZW1lbnQ6Ilx1MjIwOCIsaW46Ilx1MjIwOCIsaXNpbjoiXHUyMjA4Iixpc2ludjoiXHUyMjA4IixFbWFjcjoiXHUwMTEyIixFbXB0eVNtYWxsU3F1YXJlOiJcdTI1ZmIiLEVtcHR5VmVyeVNtYWxsU3F1YXJlOiJcdTI1YWIiLEVvZ29uOiJcdTAxMTgiLEVvcGY6Ilx1ZDgzNVx1ZGQzYyIsRXBzaWxvbjoiXHUwMzk1IixFcXVhbDoiXHUyYTc1IixFcXVhbFRpbGRlOiJcdTIyNDIiLGVxc2ltOiJcdTIyNDIiLGVzaW06Ilx1MjI0MiIsRXF1aWxpYnJpdW06Ilx1MjFjYyIscmlnaHRsZWZ0aGFycG9vbnM6Ilx1MjFjYyIscmxoYXI6Ilx1MjFjYyIsRXNjcjoiXHUyMTMwIixleHBlY3RhdGlvbjoiXHUyMTMwIixFc2ltOiJcdTJhNzMiLEV0YToiXHUwMzk3IixFdW1sOiJceGNiIixFeGlzdHM6Ilx1MjIwMyIsZXhpc3Q6Ilx1MjIwMyIsRXhwb25lbnRpYWxFOiJcdTIxNDciLGVlOiJcdTIxNDciLGV4cG9uZW50aWFsZToiXHUyMTQ3IixGY3k6Ilx1MDQyNCIsRmZyOiJcdWQ4MzVcdWRkMDkiLEZpbGxlZFNtYWxsU3F1YXJlOiJcdTI1ZmMiLEZpbGxlZFZlcnlTbWFsbFNxdWFyZToiXHUyNWFhIixibGFja3NxdWFyZToiXHUyNWFhIixzcXVhcmY6Ilx1MjVhYSIsc3F1ZjoiXHUyNWFhIixGb3BmOiJcdWQ4MzVcdWRkM2QiLEZvckFsbDoiXHUyMjAwIixmb3JhbGw6Ilx1MjIwMCIsRm91cmllcnRyZjoiXHUyMTMxIixGc2NyOiJcdTIxMzEiLEdKY3k6Ilx1MDQwMyIsR1Q6Ij4iLGd0OiI+IixHYW1tYToiXHUwMzkzIixHYW1tYWQ6Ilx1MDNkYyIsR2JyZXZlOiJcdTAxMWUiLEdjZWRpbDoiXHUwMTIyIixHY2lyYzoiXHUwMTFjIixHY3k6Ilx1MDQxMyIsR2RvdDoiXHUwMTIwIixHZnI6Ilx1ZDgzNVx1ZGQwYSIsR2c6Ilx1MjJkOSIsZ2dnOiJcdTIyZDkiLEdvcGY6Ilx1ZDgzNVx1ZGQzZSIsR3JlYXRlckVxdWFsOiJcdTIyNjUiLGdlOiJcdTIyNjUiLGdlcToiXHUyMjY1IixHcmVhdGVyRXF1YWxMZXNzOiJcdTIyZGIiLGdlbDoiXHUyMmRiIixndHJlcWxlc3M6Ilx1MjJkYiIsR3JlYXRlckZ1bGxFcXVhbDoiXHUyMjY3IixnRToiXHUyMjY3IixnZXFxOiJcdTIyNjciLEdyZWF0ZXJHcmVhdGVyOiJcdTJhYTIiLEdyZWF0ZXJMZXNzOiJcdTIyNzciLGdsOiJcdTIyNzciLGd0cmxlc3M6Ilx1MjI3NyIsR3JlYXRlclNsYW50RXF1YWw6Ilx1MmE3ZSIsZ2Vxc2xhbnQ6Ilx1MmE3ZSIsZ2VzOiJcdTJhN2UiLEdyZWF0ZXJUaWxkZToiXHUyMjczIixnc2ltOiJcdTIyNzMiLGd0cnNpbToiXHUyMjczIixHc2NyOiJcdWQ4MzVcdWRjYTIiLEd0OiJcdTIyNmIiLE5lc3RlZEdyZWF0ZXJHcmVhdGVyOiJcdTIyNmIiLGdnOiJcdTIyNmIiLEhBUkRjeToiXHUwNDJhIixIYWNlazoiXHUwMmM3IixjYXJvbjoiXHUwMmM3IixIYXQ6Il4iLEhjaXJjOiJcdTAxMjQiLEhmcjoiXHUyMTBjIixQb2luY2FyZXBsYW5lOiJcdTIxMGMiLEhpbGJlcnRTcGFjZToiXHUyMTBiIixIc2NyOiJcdTIxMGIiLGhhbWlsdDoiXHUyMTBiIixIb3BmOiJcdTIxMGQiLHF1YXRlcm5pb25zOiJcdTIxMGQiLEhvcml6b250YWxMaW5lOiJcdTI1MDAiLGJveGg6Ilx1MjUwMCIsSHN0cm9rOiJcdTAxMjYiLEh1bXBFcXVhbDoiXHUyMjRmIixidW1wZToiXHUyMjRmIixidW1wZXE6Ilx1MjI0ZiIsSUVjeToiXHUwNDE1IixJSmxpZzoiXHUwMTMyIixJT2N5OiJcdTA0MDEiLElhY3V0ZToiXHhjZCIsSWNpcmM6Ilx4Y2UiLEljeToiXHUwNDE4IixJZG90OiJcdTAxMzAiLElmcjoiXHUyMTExIixJbToiXHUyMTExIixpbWFnZToiXHUyMTExIixpbWFncGFydDoiXHUyMTExIixJZ3JhdmU6Ilx4Y2MiLEltYWNyOiJcdTAxMmEiLEltYWdpbmFyeUk6Ilx1MjE0OCIsaWk6Ilx1MjE0OCIsSW50OiJcdTIyMmMiLEludGVncmFsOiJcdTIyMmIiLGludDoiXHUyMjJiIixJbnRlcnNlY3Rpb246Ilx1MjJjMiIsYmlnY2FwOiJcdTIyYzIiLHhjYXA6Ilx1MjJjMiIsSW52aXNpYmxlQ29tbWE6Ilx1MjA2MyIsaWM6Ilx1MjA2MyIsSW52aXNpYmxlVGltZXM6Ilx1MjA2MiIsaXQ6Ilx1MjA2MiIsSW9nb246Ilx1MDEyZSIsSW9wZjoiXHVkODM1XHVkZDQwIixJb3RhOiJcdTAzOTkiLElzY3I6Ilx1MjExMCIsaW1hZ2xpbmU6Ilx1MjExMCIsSXRpbGRlOiJcdTAxMjgiLEl1a2N5OiJcdTA0MDYiLEl1bWw6Ilx4Y2YiLEpjaXJjOiJcdTAxMzQiLEpjeToiXHUwNDE5IixKZnI6Ilx1ZDgzNVx1ZGQwZCIsSm9wZjoiXHVkODM1XHVkZDQxIixKc2NyOiJcdWQ4MzVcdWRjYTUiLEpzZXJjeToiXHUwNDA4IixKdWtjeToiXHUwNDA0IixLSGN5OiJcdTA0MjUiLEtKY3k6Ilx1MDQwYyIsS2FwcGE6Ilx1MDM5YSIsS2NlZGlsOiJcdTAxMzYiLEtjeToiXHUwNDFhIixLZnI6Ilx1ZDgzNVx1ZGQwZSIsS29wZjoiXHVkODM1XHVkZDQyIixLc2NyOiJcdWQ4MzVcdWRjYTYiLExKY3k6Ilx1MDQwOSIsTFQ6IjwiLGx0OiI8IixMYWN1dGU6Ilx1MDEzOSIsTGFtYmRhOiJcdTAzOWIiLExhbmc6Ilx1MjdlYSIsTGFwbGFjZXRyZjoiXHUyMTEyIixMc2NyOiJcdTIxMTIiLGxhZ3JhbjoiXHUyMTEyIixMYXJyOiJcdTIxOWUiLHR3b2hlYWRsZWZ0YXJyb3c6Ilx1MjE5ZSIsTGNhcm9uOiJcdTAxM2QiLExjZWRpbDoiXHUwMTNiIixMY3k6Ilx1MDQxYiIsTGVmdEFuZ2xlQnJhY2tldDoiXHUyN2U4IixsYW5nOiJcdTI3ZTgiLGxhbmdsZToiXHUyN2U4IixMZWZ0QXJyb3c6Ilx1MjE5MCIsU2hvcnRMZWZ0QXJyb3c6Ilx1MjE5MCIsbGFycjoiXHUyMTkwIixsZWZ0YXJyb3c6Ilx1MjE5MCIsc2xhcnI6Ilx1MjE5MCIsTGVmdEFycm93QmFyOiJcdTIxZTQiLGxhcnJiOiJcdTIxZTQiLExlZnRBcnJvd1JpZ2h0QXJyb3c6Ilx1MjFjNiIsbGVmdHJpZ2h0YXJyb3dzOiJcdTIxYzYiLGxyYXJyOiJcdTIxYzYiLExlZnRDZWlsaW5nOiJcdTIzMDgiLGxjZWlsOiJcdTIzMDgiLExlZnREb3VibGVCcmFja2V0OiJcdTI3ZTYiLGxvYnJrOiJcdTI3ZTYiLExlZnREb3duVGVlVmVjdG9yOiJcdTI5NjEiLExlZnREb3duVmVjdG9yOiJcdTIxYzMiLGRoYXJsOiJcdTIxYzMiLGRvd25oYXJwb29ubGVmdDoiXHUyMWMzIixMZWZ0RG93blZlY3RvckJhcjoiXHUyOTU5IixMZWZ0Rmxvb3I6Ilx1MjMwYSIsbGZsb29yOiJcdTIzMGEiLExlZnRSaWdodEFycm93OiJcdTIxOTQiLGhhcnI6Ilx1MjE5NCIsbGVmdHJpZ2h0YXJyb3c6Ilx1MjE5NCIsTGVmdFJpZ2h0VmVjdG9yOiJcdTI5NGUiLExlZnRUZWU6Ilx1MjJhMyIsZGFzaHY6Ilx1MjJhMyIsTGVmdFRlZUFycm93OiJcdTIxYTQiLG1hcHN0b2xlZnQ6Ilx1MjFhNCIsTGVmdFRlZVZlY3RvcjoiXHUyOTVhIixMZWZ0VHJpYW5nbGU6Ilx1MjJiMiIsdmFydHJpYW5nbGVsZWZ0OiJcdTIyYjIiLHZsdHJpOiJcdTIyYjIiLExlZnRUcmlhbmdsZUJhcjoiXHUyOWNmIixMZWZ0VHJpYW5nbGVFcXVhbDoiXHUyMmI0IixsdHJpZToiXHUyMmI0Iix0cmlhbmdsZWxlZnRlcToiXHUyMmI0IixMZWZ0VXBEb3duVmVjdG9yOiJcdTI5NTEiLExlZnRVcFRlZVZlY3RvcjoiXHUyOTYwIixMZWZ0VXBWZWN0b3I6Ilx1MjFiZiIsdWhhcmw6Ilx1MjFiZiIsdXBoYXJwb29ubGVmdDoiXHUyMWJmIixMZWZ0VXBWZWN0b3JCYXI6Ilx1Mjk1OCIsTGVmdFZlY3RvcjoiXHUyMWJjIixsZWZ0aGFycG9vbnVwOiJcdTIxYmMiLGxoYXJ1OiJcdTIxYmMiLExlZnRWZWN0b3JCYXI6Ilx1Mjk1MiIsTGVzc0VxdWFsR3JlYXRlcjoiXHUyMmRhIixsZWc6Ilx1MjJkYSIsbGVzc2VxZ3RyOiJcdTIyZGEiLExlc3NGdWxsRXF1YWw6Ilx1MjI2NiIsbEU6Ilx1MjI2NiIsbGVxcToiXHUyMjY2IixMZXNzR3JlYXRlcjoiXHUyMjc2IixsZXNzZ3RyOiJcdTIyNzYiLGxnOiJcdTIyNzYiLExlc3NMZXNzOiJcdTJhYTEiLExlc3NTbGFudEVxdWFsOiJcdTJhN2QiLGxlcXNsYW50OiJcdTJhN2QiLGxlczoiXHUyYTdkIixMZXNzVGlsZGU6Ilx1MjI3MiIsbGVzc3NpbToiXHUyMjcyIixsc2ltOiJcdTIyNzIiLExmcjoiXHVkODM1XHVkZDBmIixMbDoiXHUyMmQ4IixMbGVmdGFycm93OiJcdTIxZGEiLGxBYXJyOiJcdTIxZGEiLExtaWRvdDoiXHUwMTNmIixMb25nTGVmdEFycm93OiJcdTI3ZjUiLGxvbmdsZWZ0YXJyb3c6Ilx1MjdmNSIseGxhcnI6Ilx1MjdmNSIsTG9uZ0xlZnRSaWdodEFycm93OiJcdTI3ZjciLGxvbmdsZWZ0cmlnaHRhcnJvdzoiXHUyN2Y3Iix4aGFycjoiXHUyN2Y3IixMb25nUmlnaHRBcnJvdzoiXHUyN2Y2Iixsb25ncmlnaHRhcnJvdzoiXHUyN2Y2Iix4cmFycjoiXHUyN2Y2IixMb3BmOiJcdWQ4MzVcdWRkNDMiLExvd2VyTGVmdEFycm93OiJcdTIxOTkiLHN3YXJyOiJcdTIxOTkiLHN3YXJyb3c6Ilx1MjE5OSIsTG93ZXJSaWdodEFycm93OiJcdTIxOTgiLHNlYXJyOiJcdTIxOTgiLHNlYXJyb3c6Ilx1MjE5OCIsTHNoOiJcdTIxYjAiLGxzaDoiXHUyMWIwIixMc3Ryb2s6Ilx1MDE0MSIsTHQ6Ilx1MjI2YSIsTmVzdGVkTGVzc0xlc3M6Ilx1MjI2YSIsbGw6Ilx1MjI2YSIsTWFwOiJcdTI5MDUiLE1jeToiXHUwNDFjIixNZWRpdW1TcGFjZToiXHUyMDVmIixNZWxsaW50cmY6Ilx1MjEzMyIsTXNjcjoiXHUyMTMzIixwaG1tYXQ6Ilx1MjEzMyIsTWZyOiJcdWQ4MzVcdWRkMTAiLE1pbnVzUGx1czoiXHUyMjEzIixtbnBsdXM6Ilx1MjIxMyIsbXA6Ilx1MjIxMyIsTW9wZjoiXHVkODM1XHVkZDQ0IixNdToiXHUwMzljIixOSmN5OiJcdTA0MGEiLE5hY3V0ZToiXHUwMTQzIixOY2Fyb246Ilx1MDE0NyIsTmNlZGlsOiJcdTAxNDUiLE5jeToiXHUwNDFkIixOZWdhdGl2ZU1lZGl1bVNwYWNlOiJcdTIwMGIiLE5lZ2F0aXZlVGhpY2tTcGFjZToiXHUyMDBiIixOZWdhdGl2ZVRoaW5TcGFjZToiXHUyMDBiIixOZWdhdGl2ZVZlcnlUaGluU3BhY2U6Ilx1MjAwYiIsWmVyb1dpZHRoU3BhY2U6Ilx1MjAwYiIsTmV3TGluZToiXG4iLE5mcjoiXHVkODM1XHVkZDExIixOb0JyZWFrOiJcdTIwNjAiLE5vbkJyZWFraW5nU3BhY2U6Ilx4YTAiLG5ic3A6Ilx4YTAiLE5vcGY6Ilx1MjExNSIsbmF0dXJhbHM6Ilx1MjExNSIsTm90OiJcdTJhZWMiLE5vdENvbmdydWVudDoiXHUyMjYyIixuZXF1aXY6Ilx1MjI2MiIsTm90Q3VwQ2FwOiJcdTIyNmQiLE5vdERvdWJsZVZlcnRpY2FsQmFyOiJcdTIyMjYiLG5wYXI6Ilx1MjIyNiIsbnBhcmFsbGVsOiJcdTIyMjYiLG5zaG9ydHBhcmFsbGVsOiJcdTIyMjYiLG5zcGFyOiJcdTIyMjYiLE5vdEVsZW1lbnQ6Ilx1MjIwOSIsbm90aW46Ilx1MjIwOSIsbm90aW52YToiXHUyMjA5IixOb3RFcXVhbDoiXHUyMjYwIixuZToiXHUyMjYwIixOb3RFcXVhbFRpbGRlOiJcdTIyNDJcdTAzMzgiLG5lc2ltOiJcdTIyNDJcdTAzMzgiLE5vdEV4aXN0czoiXHUyMjA0IixuZXhpc3Q6Ilx1MjIwNCIsbmV4aXN0czoiXHUyMjA0IixOb3RHcmVhdGVyOiJcdTIyNmYiLG5ndDoiXHUyMjZmIixuZ3RyOiJcdTIyNmYiLE5vdEdyZWF0ZXJFcXVhbDoiXHUyMjcxIixuZ2U6Ilx1MjI3MSIsbmdlcToiXHUyMjcxIixOb3RHcmVhdGVyRnVsbEVxdWFsOiJcdTIyNjdcdTAzMzgiLG5nRToiXHUyMjY3XHUwMzM4IixuZ2VxcToiXHUyMjY3XHUwMzM4IixOb3RHcmVhdGVyR3JlYXRlcjoiXHUyMjZiXHUwMzM4IixuR3R2OiJcdTIyNmJcdTAzMzgiLE5vdEdyZWF0ZXJMZXNzOiJcdTIyNzkiLG50Z2w6Ilx1MjI3OSIsTm90R3JlYXRlclNsYW50RXF1YWw6Ilx1MmE3ZVx1MDMzOCIsbmdlcXNsYW50OiJcdTJhN2VcdTAzMzgiLG5nZXM6Ilx1MmE3ZVx1MDMzOCIsTm90R3JlYXRlclRpbGRlOiJcdTIyNzUiLG5nc2ltOiJcdTIyNzUiLE5vdEh1bXBEb3duSHVtcDoiXHUyMjRlXHUwMzM4IixuYnVtcDoiXHUyMjRlXHUwMzM4IixOb3RIdW1wRXF1YWw6Ilx1MjI0Zlx1MDMzOCIsbmJ1bXBlOiJcdTIyNGZcdTAzMzgiLE5vdExlZnRUcmlhbmdsZToiXHUyMmVhIixubHRyaToiXHUyMmVhIixudHJpYW5nbGVsZWZ0OiJcdTIyZWEiLE5vdExlZnRUcmlhbmdsZUJhcjoiXHUyOWNmXHUwMzM4IixOb3RMZWZ0VHJpYW5nbGVFcXVhbDoiXHUyMmVjIixubHRyaWU6Ilx1MjJlYyIsbnRyaWFuZ2xlbGVmdGVxOiJcdTIyZWMiLE5vdExlc3M6Ilx1MjI2ZSIsbmxlc3M6Ilx1MjI2ZSIsbmx0OiJcdTIyNmUiLE5vdExlc3NFcXVhbDoiXHUyMjcwIixubGU6Ilx1MjI3MCIsbmxlcToiXHUyMjcwIixOb3RMZXNzR3JlYXRlcjoiXHUyMjc4IixudGxnOiJcdTIyNzgiLE5vdExlc3NMZXNzOiJcdTIyNmFcdTAzMzgiLG5MdHY6Ilx1MjI2YVx1MDMzOCIsTm90TGVzc1NsYW50RXF1YWw6Ilx1MmE3ZFx1MDMzOCIsbmxlcXNsYW50OiJcdTJhN2RcdTAzMzgiLG5sZXM6Ilx1MmE3ZFx1MDMzOCIsTm90TGVzc1RpbGRlOiJcdTIyNzQiLG5sc2ltOiJcdTIyNzQiLE5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyOiJcdTJhYTJcdTAzMzgiLE5vdE5lc3RlZExlc3NMZXNzOiJcdTJhYTFcdTAzMzgiLE5vdFByZWNlZGVzOiJcdTIyODAiLG5wcjoiXHUyMjgwIixucHJlYzoiXHUyMjgwIixOb3RQcmVjZWRlc0VxdWFsOiJcdTJhYWZcdTAzMzgiLG5wcmU6Ilx1MmFhZlx1MDMzOCIsbnByZWNlcToiXHUyYWFmXHUwMzM4IixOb3RQcmVjZWRlc1NsYW50RXF1YWw6Ilx1MjJlMCIsbnByY3VlOiJcdTIyZTAiLE5vdFJldmVyc2VFbGVtZW50OiJcdTIyMGMiLG5vdG5pOiJcdTIyMGMiLG5vdG5pdmE6Ilx1MjIwYyIsTm90UmlnaHRUcmlhbmdsZToiXHUyMmViIixucnRyaToiXHUyMmViIixudHJpYW5nbGVyaWdodDoiXHUyMmViIixOb3RSaWdodFRyaWFuZ2xlQmFyOiJcdTI5ZDBcdTAzMzgiLE5vdFJpZ2h0VHJpYW5nbGVFcXVhbDoiXHUyMmVkIixucnRyaWU6Ilx1MjJlZCIsbnRyaWFuZ2xlcmlnaHRlcToiXHUyMmVkIixOb3RTcXVhcmVTdWJzZXQ6Ilx1MjI4Zlx1MDMzOCIsTm90U3F1YXJlU3Vic2V0RXF1YWw6Ilx1MjJlMiIsbnNxc3ViZToiXHUyMmUyIixOb3RTcXVhcmVTdXBlcnNldDoiXHUyMjkwXHUwMzM4IixOb3RTcXVhcmVTdXBlcnNldEVxdWFsOiJcdTIyZTMiLG5zcXN1cGU6Ilx1MjJlMyIsTm90U3Vic2V0OiJcdTIyODJcdTIwZDIiLG5zdWJzZXQ6Ilx1MjI4Mlx1MjBkMiIsdm5zdWI6Ilx1MjI4Mlx1MjBkMiIsTm90U3Vic2V0RXF1YWw6Ilx1MjI4OCIsbnN1YmU6Ilx1MjI4OCIsbnN1YnNldGVxOiJcdTIyODgiLE5vdFN1Y2NlZWRzOiJcdTIyODEiLG5zYzoiXHUyMjgxIixuc3VjYzoiXHUyMjgxIixOb3RTdWNjZWVkc0VxdWFsOiJcdTJhYjBcdTAzMzgiLG5zY2U6Ilx1MmFiMFx1MDMzOCIsbnN1Y2NlcToiXHUyYWIwXHUwMzM4IixOb3RTdWNjZWVkc1NsYW50RXF1YWw6Ilx1MjJlMSIsbnNjY3VlOiJcdTIyZTEiLE5vdFN1Y2NlZWRzVGlsZGU6Ilx1MjI3Zlx1MDMzOCIsTm90U3VwZXJzZXQ6Ilx1MjI4M1x1MjBkMiIsbnN1cHNldDoiXHUyMjgzXHUyMGQyIix2bnN1cDoiXHUyMjgzXHUyMGQyIixOb3RTdXBlcnNldEVxdWFsOiJcdTIyODkiLG5zdXBlOiJcdTIyODkiLG5zdXBzZXRlcToiXHUyMjg5IixOb3RUaWxkZToiXHUyMjQxIixuc2ltOiJcdTIyNDEiLE5vdFRpbGRlRXF1YWw6Ilx1MjI0NCIsbnNpbWU6Ilx1MjI0NCIsbnNpbWVxOiJcdTIyNDQiLE5vdFRpbGRlRnVsbEVxdWFsOiJcdTIyNDciLG5jb25nOiJcdTIyNDciLE5vdFRpbGRlVGlsZGU6Ilx1MjI0OSIsbmFwOiJcdTIyNDkiLG5hcHByb3g6Ilx1MjI0OSIsTm90VmVydGljYWxCYXI6Ilx1MjIyNCIsbm1pZDoiXHUyMjI0Iixuc2hvcnRtaWQ6Ilx1MjIyNCIsbnNtaWQ6Ilx1MjIyNCIsTnNjcjoiXHVkODM1XHVkY2E5IixOdGlsZGU6Ilx4ZDEiLE51OiJcdTAzOWQiLE9FbGlnOiJcdTAxNTIiLE9hY3V0ZToiXHhkMyIsT2NpcmM6Ilx4ZDQiLE9jeToiXHUwNDFlIixPZGJsYWM6Ilx1MDE1MCIsT2ZyOiJcdWQ4MzVcdWRkMTIiLE9ncmF2ZToiXHhkMiIsT21hY3I6Ilx1MDE0YyIsT21lZ2E6Ilx1MDNhOSIsb2htOiJcdTAzYTkiLE9taWNyb246Ilx1MDM5ZiIsT29wZjoiXHVkODM1XHVkZDQ2IixPcGVuQ3VybHlEb3VibGVRdW90ZToiXHUyMDFjIixsZHF1bzoiXHUyMDFjIixPcGVuQ3VybHlRdW90ZToiXHUyMDE4Iixsc3F1bzoiXHUyMDE4IixPcjoiXHUyYTU0IixPc2NyOiJcdWQ4MzVcdWRjYWEiLE9zbGFzaDoiXHhkOCIsT3RpbGRlOiJceGQ1IixPdGltZXM6Ilx1MmEzNyIsT3VtbDoiXHhkNiIsT3ZlckJhcjoiXHUyMDNlIixvbGluZToiXHUyMDNlIixPdmVyQnJhY2U6Ilx1MjNkZSIsT3ZlckJyYWNrZXQ6Ilx1MjNiNCIsdGJyazoiXHUyM2I0IixPdmVyUGFyZW50aGVzaXM6Ilx1MjNkYyIsUGFydGlhbEQ6Ilx1MjIwMiIscGFydDoiXHUyMjAyIixQY3k6Ilx1MDQxZiIsUGZyOiJcdWQ4MzVcdWRkMTMiLFBoaToiXHUwM2E2IixQaToiXHUwM2EwIixQbHVzTWludXM6Ilx4YjEiLHBsdXNtbjoiXHhiMSIscG06Ilx4YjEiLFBvcGY6Ilx1MjExOSIscHJpbWVzOiJcdTIxMTkiLFByOiJcdTJhYmIiLFByZWNlZGVzOiJcdTIyN2EiLHByOiJcdTIyN2EiLHByZWM6Ilx1MjI3YSIsUHJlY2VkZXNFcXVhbDoiXHUyYWFmIixwcmU6Ilx1MmFhZiIscHJlY2VxOiJcdTJhYWYiLFByZWNlZGVzU2xhbnRFcXVhbDoiXHUyMjdjIixwcmN1ZToiXHUyMjdjIixwcmVjY3VybHllcToiXHUyMjdjIixQcmVjZWRlc1RpbGRlOiJcdTIyN2UiLHByZWNzaW06Ilx1MjI3ZSIscHJzaW06Ilx1MjI3ZSIsUHJpbWU6Ilx1MjAzMyIsUHJvZHVjdDoiXHUyMjBmIixwcm9kOiJcdTIyMGYiLFByb3BvcnRpb25hbDoiXHUyMjFkIixwcm9wOiJcdTIyMWQiLHByb3B0bzoiXHUyMjFkIix2YXJwcm9wdG86Ilx1MjIxZCIsdnByb3A6Ilx1MjIxZCIsUHNjcjoiXHVkODM1XHVkY2FiIixQc2k6Ilx1MDNhOCIsUVVPVDonIicscXVvdDonIicsUWZyOiJcdWQ4MzVcdWRkMTQiLFFvcGY6Ilx1MjExYSIscmF0aW9uYWxzOiJcdTIxMWEiLFFzY3I6Ilx1ZDgzNVx1ZGNhYyIsUkJhcnI6Ilx1MjkxMCIsZHJia2Fyb3c6Ilx1MjkxMCIsUkVHOiJceGFlIixjaXJjbGVkUjoiXHhhZSIscmVnOiJceGFlIixSYWN1dGU6Ilx1MDE1NCIsUmFuZzoiXHUyN2ViIixSYXJyOiJcdTIxYTAiLHR3b2hlYWRyaWdodGFycm93OiJcdTIxYTAiLFJhcnJ0bDoiXHUyOTE2IixSY2Fyb246Ilx1MDE1OCIsUmNlZGlsOiJcdTAxNTYiLFJjeToiXHUwNDIwIixSZToiXHUyMTFjIixSZnI6Ilx1MjExYyIscmVhbDoiXHUyMTFjIixyZWFscGFydDoiXHUyMTFjIixSZXZlcnNlRWxlbWVudDoiXHUyMjBiIixTdWNoVGhhdDoiXHUyMjBiIixuaToiXHUyMjBiIixuaXY6Ilx1MjIwYiIsUmV2ZXJzZUVxdWlsaWJyaXVtOiJcdTIxY2IiLGxlZnRyaWdodGhhcnBvb25zOiJcdTIxY2IiLGxyaGFyOiJcdTIxY2IiLFJldmVyc2VVcEVxdWlsaWJyaXVtOiJcdTI5NmYiLGR1aGFyOiJcdTI5NmYiLFJobzoiXHUwM2ExIixSaWdodEFuZ2xlQnJhY2tldDoiXHUyN2U5IixyYW5nOiJcdTI3ZTkiLHJhbmdsZToiXHUyN2U5IixSaWdodEFycm93OiJcdTIxOTIiLFNob3J0UmlnaHRBcnJvdzoiXHUyMTkyIixyYXJyOiJcdTIxOTIiLHJpZ2h0YXJyb3c6Ilx1MjE5MiIsc3JhcnI6Ilx1MjE5MiIsUmlnaHRBcnJvd0JhcjoiXHUyMWU1IixyYXJyYjoiXHUyMWU1IixSaWdodEFycm93TGVmdEFycm93OiJcdTIxYzQiLHJpZ2h0bGVmdGFycm93czoiXHUyMWM0IixybGFycjoiXHUyMWM0IixSaWdodENlaWxpbmc6Ilx1MjMwOSIscmNlaWw6Ilx1MjMwOSIsUmlnaHREb3VibGVCcmFja2V0OiJcdTI3ZTciLHJvYnJrOiJcdTI3ZTciLFJpZ2h0RG93blRlZVZlY3RvcjoiXHUyOTVkIixSaWdodERvd25WZWN0b3I6Ilx1MjFjMiIsZGhhcnI6Ilx1MjFjMiIsZG93bmhhcnBvb25yaWdodDoiXHUyMWMyIixSaWdodERvd25WZWN0b3JCYXI6Ilx1Mjk1NSIsUmlnaHRGbG9vcjoiXHUyMzBiIixyZmxvb3I6Ilx1MjMwYiIsUmlnaHRUZWU6Ilx1MjJhMiIsdmRhc2g6Ilx1MjJhMiIsUmlnaHRUZWVBcnJvdzoiXHUyMWE2IixtYXA6Ilx1MjFhNiIsbWFwc3RvOiJcdTIxYTYiLFJpZ2h0VGVlVmVjdG9yOiJcdTI5NWIiLFJpZ2h0VHJpYW5nbGU6Ilx1MjJiMyIsdmFydHJpYW5nbGVyaWdodDoiXHUyMmIzIix2cnRyaToiXHUyMmIzIixSaWdodFRyaWFuZ2xlQmFyOiJcdTI5ZDAiLFJpZ2h0VHJpYW5nbGVFcXVhbDoiXHUyMmI1IixydHJpZToiXHUyMmI1Iix0cmlhbmdsZXJpZ2h0ZXE6Ilx1MjJiNSIsUmlnaHRVcERvd25WZWN0b3I6Ilx1Mjk0ZiIsUmlnaHRVcFRlZVZlY3RvcjoiXHUyOTVjIixSaWdodFVwVmVjdG9yOiJcdTIxYmUiLHVoYXJyOiJcdTIxYmUiLHVwaGFycG9vbnJpZ2h0OiJcdTIxYmUiLFJpZ2h0VXBWZWN0b3JCYXI6Ilx1Mjk1NCIsUmlnaHRWZWN0b3I6Ilx1MjFjMCIscmhhcnU6Ilx1MjFjMCIscmlnaHRoYXJwb29udXA6Ilx1MjFjMCIsUmlnaHRWZWN0b3JCYXI6Ilx1Mjk1MyIsUm9wZjoiXHUyMTFkIixyZWFsczoiXHUyMTFkIixSb3VuZEltcGxpZXM6Ilx1Mjk3MCIsUnJpZ2h0YXJyb3c6Ilx1MjFkYiIsckFhcnI6Ilx1MjFkYiIsUnNjcjoiXHUyMTFiIixyZWFsaW5lOiJcdTIxMWIiLFJzaDoiXHUyMWIxIixyc2g6Ilx1MjFiMSIsUnVsZURlbGF5ZWQ6Ilx1MjlmNCIsU0hDSGN5OiJcdTA0MjkiLFNIY3k6Ilx1MDQyOCIsU09GVGN5OiJcdTA0MmMiLFNhY3V0ZToiXHUwMTVhIixTYzoiXHUyYWJjIixTY2Fyb246Ilx1MDE2MCIsU2NlZGlsOiJcdTAxNWUiLFNjaXJjOiJcdTAxNWMiLFNjeToiXHUwNDIxIixTZnI6Ilx1ZDgzNVx1ZGQxNiIsU2hvcnRVcEFycm93OiJcdTIxOTEiLFVwQXJyb3c6Ilx1MjE5MSIsdWFycjoiXHUyMTkxIix1cGFycm93OiJcdTIxOTEiLFNpZ21hOiJcdTAzYTMiLFNtYWxsQ2lyY2xlOiJcdTIyMTgiLGNvbXBmbjoiXHUyMjE4IixTb3BmOiJcdWQ4MzVcdWRkNGEiLFNxcnQ6Ilx1MjIxYSIscmFkaWM6Ilx1MjIxYSIsU3F1YXJlOiJcdTI1YTEiLHNxdToiXHUyNWExIixzcXVhcmU6Ilx1MjVhMSIsU3F1YXJlSW50ZXJzZWN0aW9uOiJcdTIyOTMiLHNxY2FwOiJcdTIyOTMiLFNxdWFyZVN1YnNldDoiXHUyMjhmIixzcXN1YjoiXHUyMjhmIixzcXN1YnNldDoiXHUyMjhmIixTcXVhcmVTdWJzZXRFcXVhbDoiXHUyMjkxIixzcXN1YmU6Ilx1MjI5MSIsc3FzdWJzZXRlcToiXHUyMjkxIixTcXVhcmVTdXBlcnNldDoiXHUyMjkwIixzcXN1cDoiXHUyMjkwIixzcXN1cHNldDoiXHUyMjkwIixTcXVhcmVTdXBlcnNldEVxdWFsOiJcdTIyOTIiLHNxc3VwZToiXHUyMjkyIixzcXN1cHNldGVxOiJcdTIyOTIiLFNxdWFyZVVuaW9uOiJcdTIyOTQiLHNxY3VwOiJcdTIyOTQiLFNzY3I6Ilx1ZDgzNVx1ZGNhZSIsU3RhcjoiXHUyMmM2Iixzc3RhcmY6Ilx1MjJjNiIsU3ViOiJcdTIyZDAiLFN1YnNldDoiXHUyMmQwIixTdWJzZXRFcXVhbDoiXHUyMjg2IixzdWJlOiJcdTIyODYiLHN1YnNldGVxOiJcdTIyODYiLFN1Y2NlZWRzOiJcdTIyN2IiLHNjOiJcdTIyN2IiLHN1Y2M6Ilx1MjI3YiIsU3VjY2VlZHNFcXVhbDoiXHUyYWIwIixzY2U6Ilx1MmFiMCIsc3VjY2VxOiJcdTJhYjAiLFN1Y2NlZWRzU2xhbnRFcXVhbDoiXHUyMjdkIixzY2N1ZToiXHUyMjdkIixzdWNjY3VybHllcToiXHUyMjdkIixTdWNjZWVkc1RpbGRlOiJcdTIyN2YiLHNjc2ltOiJcdTIyN2YiLHN1Y2NzaW06Ilx1MjI3ZiIsU3VtOiJcdTIyMTEiLHN1bToiXHUyMjExIixTdXA6Ilx1MjJkMSIsU3Vwc2V0OiJcdTIyZDEiLFN1cGVyc2V0OiJcdTIyODMiLHN1cDoiXHUyMjgzIixzdXBzZXQ6Ilx1MjI4MyIsU3VwZXJzZXRFcXVhbDoiXHUyMjg3IixzdXBlOiJcdTIyODciLHN1cHNldGVxOiJcdTIyODciLFRIT1JOOiJceGRlIixUUkFERToiXHUyMTIyIix0cmFkZToiXHUyMTIyIixUU0hjeToiXHUwNDBiIixUU2N5OiJcdTA0MjYiLFRhYjoiXHQiLFRhdToiXHUwM2E0IixUY2Fyb246Ilx1MDE2NCIsVGNlZGlsOiJcdTAxNjIiLFRjeToiXHUwNDIyIixUZnI6Ilx1ZDgzNVx1ZGQxNyIsVGhlcmVmb3JlOiJcdTIyMzQiLHRoZXJlNDoiXHUyMjM0Iix0aGVyZWZvcmU6Ilx1MjIzNCIsVGhldGE6Ilx1MDM5OCIsVGhpY2tTcGFjZToiXHUyMDVmXHUyMDBhIixUaGluU3BhY2U6Ilx1MjAwOSIsdGhpbnNwOiJcdTIwMDkiLFRpbGRlOiJcdTIyM2MiLHNpbToiXHUyMjNjIix0aGlja3NpbToiXHUyMjNjIix0aGtzaW06Ilx1MjIzYyIsVGlsZGVFcXVhbDoiXHUyMjQzIixzaW1lOiJcdTIyNDMiLHNpbWVxOiJcdTIyNDMiLFRpbGRlRnVsbEVxdWFsOiJcdTIyNDUiLGNvbmc6Ilx1MjI0NSIsVGlsZGVUaWxkZToiXHUyMjQ4IixhcDoiXHUyMjQ4IixhcHByb3g6Ilx1MjI0OCIsYXN5bXA6Ilx1MjI0OCIsdGhpY2thcHByb3g6Ilx1MjI0OCIsdGhrYXA6Ilx1MjI0OCIsVG9wZjoiXHVkODM1XHVkZDRiIixUcmlwbGVEb3Q6Ilx1MjBkYiIsdGRvdDoiXHUyMGRiIixUc2NyOiJcdWQ4MzVcdWRjYWYiLFRzdHJvazoiXHUwMTY2IixVYWN1dGU6Ilx4ZGEiLFVhcnI6Ilx1MjE5ZiIsVWFycm9jaXI6Ilx1Mjk0OSIsVWJyY3k6Ilx1MDQwZSIsVWJyZXZlOiJcdTAxNmMiLFVjaXJjOiJceGRiIixVY3k6Ilx1MDQyMyIsVWRibGFjOiJcdTAxNzAiLFVmcjoiXHVkODM1XHVkZDE4IixVZ3JhdmU6Ilx4ZDkiLFVtYWNyOiJcdTAxNmEiLFVuZGVyQmFyOiJfIixsb3diYXI6Il8iLFVuZGVyQnJhY2U6Ilx1MjNkZiIsVW5kZXJCcmFja2V0OiJcdTIzYjUiLGJicms6Ilx1MjNiNSIsVW5kZXJQYXJlbnRoZXNpczoiXHUyM2RkIixVbmlvbjoiXHUyMmMzIixiaWdjdXA6Ilx1MjJjMyIseGN1cDoiXHUyMmMzIixVbmlvblBsdXM6Ilx1MjI4ZSIsdXBsdXM6Ilx1MjI4ZSIsVW9nb246Ilx1MDE3MiIsVW9wZjoiXHVkODM1XHVkZDRjIixVcEFycm93QmFyOiJcdTI5MTIiLFVwQXJyb3dEb3duQXJyb3c6Ilx1MjFjNSIsdWRhcnI6Ilx1MjFjNSIsVXBEb3duQXJyb3c6Ilx1MjE5NSIsdXBkb3duYXJyb3c6Ilx1MjE5NSIsdmFycjoiXHUyMTk1IixVcEVxdWlsaWJyaXVtOiJcdTI5NmUiLHVkaGFyOiJcdTI5NmUiLFVwVGVlOiJcdTIyYTUiLGJvdDoiXHUyMmE1Iixib3R0b206Ilx1MjJhNSIscGVycDoiXHUyMmE1IixVcFRlZUFycm93OiJcdTIxYTUiLG1hcHN0b3VwOiJcdTIxYTUiLFVwcGVyTGVmdEFycm93OiJcdTIxOTYiLG53YXJyOiJcdTIxOTYiLG53YXJyb3c6Ilx1MjE5NiIsVXBwZXJSaWdodEFycm93OiJcdTIxOTciLG5lYXJyOiJcdTIxOTciLG5lYXJyb3c6Ilx1MjE5NyIsVXBzaToiXHUwM2QyIix1cHNpaDoiXHUwM2QyIixVcHNpbG9uOiJcdTAzYTUiLFVyaW5nOiJcdTAxNmUiLFVzY3I6Ilx1ZDgzNVx1ZGNiMCIsVXRpbGRlOiJcdTAxNjgiLFV1bWw6Ilx4ZGMiLFZEYXNoOiJcdTIyYWIiLFZiYXI6Ilx1MmFlYiIsVmN5OiJcdTA0MTIiLFZkYXNoOiJcdTIyYTkiLFZkYXNobDoiXHUyYWU2IixWZWU6Ilx1MjJjMSIsYmlndmVlOiJcdTIyYzEiLHh2ZWU6Ilx1MjJjMSIsVmVyYmFyOiJcdTIwMTYiLFZlcnQ6Ilx1MjAxNiIsVmVydGljYWxCYXI6Ilx1MjIyMyIsbWlkOiJcdTIyMjMiLHNob3J0bWlkOiJcdTIyMjMiLHNtaWQ6Ilx1MjIyMyIsVmVydGljYWxMaW5lOiJ8Iix2ZXJiYXI6InwiLHZlcnQ6InwiLFZlcnRpY2FsU2VwYXJhdG9yOiJcdTI3NTgiLFZlcnRpY2FsVGlsZGU6Ilx1MjI0MCIsd3I6Ilx1MjI0MCIsd3JlYXRoOiJcdTIyNDAiLFZlcnlUaGluU3BhY2U6Ilx1MjAwYSIsaGFpcnNwOiJcdTIwMGEiLFZmcjoiXHVkODM1XHVkZDE5IixWb3BmOiJcdWQ4MzVcdWRkNGQiLFZzY3I6Ilx1ZDgzNVx1ZGNiMSIsVnZkYXNoOiJcdTIyYWEiLFdjaXJjOiJcdTAxNzQiLFdlZGdlOiJcdTIyYzAiLGJpZ3dlZGdlOiJcdTIyYzAiLHh3ZWRnZToiXHUyMmMwIixXZnI6Ilx1ZDgzNVx1ZGQxYSIsV29wZjoiXHVkODM1XHVkZDRlIixXc2NyOiJcdWQ4MzVcdWRjYjIiLFhmcjoiXHVkODM1XHVkZDFiIixYaToiXHUwMzllIixYb3BmOiJcdWQ4MzVcdWRkNGYiLFhzY3I6Ilx1ZDgzNVx1ZGNiMyIsWUFjeToiXHUwNDJmIixZSWN5OiJcdTA0MDciLFlVY3k6Ilx1MDQyZSIsWWFjdXRlOiJceGRkIixZY2lyYzoiXHUwMTc2IixZY3k6Ilx1MDQyYiIsWWZyOiJcdWQ4MzVcdWRkMWMiLFlvcGY6Ilx1ZDgzNVx1ZGQ1MCIsWXNjcjoiXHVkODM1XHVkY2I0IixZdW1sOiJcdTAxNzgiLFpIY3k6Ilx1MDQxNiIsWmFjdXRlOiJcdTAxNzkiLFpjYXJvbjoiXHUwMTdkIixaY3k6Ilx1MDQxNyIsWmRvdDoiXHUwMTdiIixaZXRhOiJcdTAzOTYiLFpmcjoiXHUyMTI4Iix6ZWV0cmY6Ilx1MjEyOCIsWm9wZjoiXHUyMTI0IixpbnRlZ2VyczoiXHUyMTI0Iixac2NyOiJcdWQ4MzVcdWRjYjUiLGFhY3V0ZToiXHhlMSIsYWJyZXZlOiJcdTAxMDMiLGFjOiJcdTIyM2UiLG1zdHBvczoiXHUyMjNlIixhY0U6Ilx1MjIzZVx1MDMzMyIsYWNkOiJcdTIyM2YiLGFjaXJjOiJceGUyIixhY3k6Ilx1MDQzMCIsYWVsaWc6Ilx4ZTYiLGFmcjoiXHVkODM1XHVkZDFlIixhZ3JhdmU6Ilx4ZTAiLGFsZWZzeW06Ilx1MjEzNSIsYWxlcGg6Ilx1MjEzNSIsYWxwaGE6Ilx1MDNiMSIsYW1hY3I6Ilx1MDEwMSIsYW1hbGc6Ilx1MmEzZiIsYW5kOiJcdTIyMjciLHdlZGdlOiJcdTIyMjciLGFuZGFuZDoiXHUyYTU1IixhbmRkOiJcdTJhNWMiLGFuZHNsb3BlOiJcdTJhNTgiLGFuZHY6Ilx1MmE1YSIsYW5nOiJcdTIyMjAiLGFuZ2xlOiJcdTIyMjAiLGFuZ2U6Ilx1MjlhNCIsYW5nbXNkOiJcdTIyMjEiLG1lYXN1cmVkYW5nbGU6Ilx1MjIyMSIsYW5nbXNkYWE6Ilx1MjlhOCIsYW5nbXNkYWI6Ilx1MjlhOSIsYW5nbXNkYWM6Ilx1MjlhYSIsYW5nbXNkYWQ6Ilx1MjlhYiIsYW5nbXNkYWU6Ilx1MjlhYyIsYW5nbXNkYWY6Ilx1MjlhZCIsYW5nbXNkYWc6Ilx1MjlhZSIsYW5nbXNkYWg6Ilx1MjlhZiIsYW5ncnQ6Ilx1MjIxZiIsYW5ncnR2YjoiXHUyMmJlIixhbmdydHZiZDoiXHUyOTlkIixhbmdzcGg6Ilx1MjIyMiIsYW5nemFycjoiXHUyMzdjIixhb2dvbjoiXHUwMTA1Iixhb3BmOiJcdWQ4MzVcdWRkNTIiLGFwRToiXHUyYTcwIixhcGFjaXI6Ilx1MmE2ZiIsYXBlOiJcdTIyNGEiLGFwcHJveGVxOiJcdTIyNGEiLGFwaWQ6Ilx1MjI0YiIsYXBvczoiJyIsYXJpbmc6Ilx4ZTUiLGFzY3I6Ilx1ZDgzNVx1ZGNiNiIsYXN0OiIqIixtaWRhc3Q6IioiLGF0aWxkZToiXHhlMyIsYXVtbDoiXHhlNCIsYXdpbnQ6Ilx1MmExMSIsYk5vdDoiXHUyYWVkIixiYWNrY29uZzoiXHUyMjRjIixiY29uZzoiXHUyMjRjIixiYWNrZXBzaWxvbjoiXHUwM2Y2IixiZXBzaToiXHUwM2Y2IixiYWNrcHJpbWU6Ilx1MjAzNSIsYnByaW1lOiJcdTIwMzUiLGJhY2tzaW06Ilx1MjIzZCIsYnNpbToiXHUyMjNkIixiYWNrc2ltZXE6Ilx1MjJjZCIsYnNpbWU6Ilx1MjJjZCIsYmFydmVlOiJcdTIyYmQiLGJhcndlZDoiXHUyMzA1IixiYXJ3ZWRnZToiXHUyMzA1IixiYnJrdGJyazoiXHUyM2I2IixiY3k6Ilx1MDQzMSIsYmRxdW86Ilx1MjAxZSIsbGRxdW9yOiJcdTIwMWUiLGJlbXB0eXY6Ilx1MjliMCIsYmV0YToiXHUwM2IyIixiZXRoOiJcdTIxMzYiLGJldHdlZW46Ilx1MjI2YyIsdHdpeHQ6Ilx1MjI2YyIsYmZyOiJcdWQ4MzVcdWRkMWYiLGJpZ2NpcmM6Ilx1MjVlZiIseGNpcmM6Ilx1MjVlZiIsYmlnb2RvdDoiXHUyYTAwIix4b2RvdDoiXHUyYTAwIixiaWdvcGx1czoiXHUyYTAxIix4b3BsdXM6Ilx1MmEwMSIsYmlnb3RpbWVzOiJcdTJhMDIiLHhvdGltZToiXHUyYTAyIixiaWdzcWN1cDoiXHUyYTA2Iix4c3FjdXA6Ilx1MmEwNiIsYmlnc3RhcjoiXHUyNjA1IixzdGFyZjoiXHUyNjA1IixiaWd0cmlhbmdsZWRvd246Ilx1MjViZCIseGR0cmk6Ilx1MjViZCIsYmlndHJpYW5nbGV1cDoiXHUyNWIzIix4dXRyaToiXHUyNWIzIixiaWd1cGx1czoiXHUyYTA0Iix4dXBsdXM6Ilx1MmEwNCIsYmthcm93OiJcdTI5MGQiLHJiYXJyOiJcdTI5MGQiLGJsYWNrbG96ZW5nZToiXHUyOWViIixsb3pmOiJcdTI5ZWIiLGJsYWNrdHJpYW5nbGU6Ilx1MjViNCIsdXRyaWY6Ilx1MjViNCIsYmxhY2t0cmlhbmdsZWRvd246Ilx1MjViZSIsZHRyaWY6Ilx1MjViZSIsYmxhY2t0cmlhbmdsZWxlZnQ6Ilx1MjVjMiIsbHRyaWY6Ilx1MjVjMiIsYmxhY2t0cmlhbmdsZXJpZ2h0OiJcdTI1YjgiLHJ0cmlmOiJcdTI1YjgiLGJsYW5rOiJcdTI0MjMiLGJsazEyOiJcdTI1OTIiLGJsazE0OiJcdTI1OTEiLGJsazM0OiJcdTI1OTMiLGJsb2NrOiJcdTI1ODgiLGJuZToiPVx1MjBlNSIsYm5lcXVpdjoiXHUyMjYxXHUyMGU1Iixibm90OiJcdTIzMTAiLGJvcGY6Ilx1ZDgzNVx1ZGQ1MyIsYm93dGllOiJcdTIyYzgiLGJveERMOiJcdTI1NTciLGJveERSOiJcdTI1NTQiLGJveERsOiJcdTI1NTYiLGJveERyOiJcdTI1NTMiLGJveEg6Ilx1MjU1MCIsYm94SEQ6Ilx1MjU2NiIsYm94SFU6Ilx1MjU2OSIsYm94SGQ6Ilx1MjU2NCIsYm94SHU6Ilx1MjU2NyIsYm94VUw6Ilx1MjU1ZCIsYm94VVI6Ilx1MjU1YSIsYm94VWw6Ilx1MjU1YyIsYm94VXI6Ilx1MjU1OSIsYm94VjoiXHUyNTUxIixib3hWSDoiXHUyNTZjIixib3hWTDoiXHUyNTYzIixib3hWUjoiXHUyNTYwIixib3hWaDoiXHUyNTZiIixib3hWbDoiXHUyNTYyIixib3hWcjoiXHUyNTVmIixib3hib3g6Ilx1MjljOSIsYm94ZEw6Ilx1MjU1NSIsYm94ZFI6Ilx1MjU1MiIsYm94ZGw6Ilx1MjUxMCIsYm94ZHI6Ilx1MjUwYyIsYm94aEQ6Ilx1MjU2NSIsYm94aFU6Ilx1MjU2OCIsYm94aGQ6Ilx1MjUyYyIsYm94aHU6Ilx1MjUzNCIsYm94bWludXM6Ilx1MjI5ZiIsbWludXNiOiJcdTIyOWYiLGJveHBsdXM6Ilx1MjI5ZSIscGx1c2I6Ilx1MjI5ZSIsYm94dGltZXM6Ilx1MjJhMCIsdGltZXNiOiJcdTIyYTAiLGJveHVMOiJcdTI1NWIiLGJveHVSOiJcdTI1NTgiLGJveHVsOiJcdTI1MTgiLGJveHVyOiJcdTI1MTQiLGJveHY6Ilx1MjUwMiIsYm94dkg6Ilx1MjU2YSIsYm94dkw6Ilx1MjU2MSIsYm94dlI6Ilx1MjU1ZSIsYm94dmg6Ilx1MjUzYyIsYm94dmw6Ilx1MjUyNCIsYm94dnI6Ilx1MjUxYyIsYnJ2YmFyOiJceGE2Iixic2NyOiJcdWQ4MzVcdWRjYjciLGJzZW1pOiJcdTIwNGYiLGJzb2w6IlxcIixic29sYjoiXHUyOWM1Iixic29saHN1YjoiXHUyN2M4IixidWxsOiJcdTIwMjIiLGJ1bGxldDoiXHUyMDIyIixidW1wRToiXHUyYWFlIixjYWN1dGU6Ilx1MDEwNyIsY2FwOiJcdTIyMjkiLGNhcGFuZDoiXHUyYTQ0IixjYXBicmN1cDoiXHUyYTQ5IixjYXBjYXA6Ilx1MmE0YiIsY2FwY3VwOiJcdTJhNDciLGNhcGRvdDoiXHUyYTQwIixjYXBzOiJcdTIyMjlcdWZlMDAiLGNhcmV0OiJcdTIwNDEiLGNjYXBzOiJcdTJhNGQiLGNjYXJvbjoiXHUwMTBkIixjY2VkaWw6Ilx4ZTciLGNjaXJjOiJcdTAxMDkiLGNjdXBzOiJcdTJhNGMiLGNjdXBzc206Ilx1MmE1MCIsY2RvdDoiXHUwMTBiIixjZW1wdHl2OiJcdTI5YjIiLGNlbnQ6Ilx4YTIiLGNmcjoiXHVkODM1XHVkZDIwIixjaGN5OiJcdTA0NDciLGNoZWNrOiJcdTI3MTMiLGNoZWNrbWFyazoiXHUyNzEzIixjaGk6Ilx1MDNjNyIsY2lyOiJcdTI1Y2IiLGNpckU6Ilx1MjljMyIsY2lyYzoiXHUwMmM2IixjaXJjZXE6Ilx1MjI1NyIsY2lyZToiXHUyMjU3IixjaXJjbGVhcnJvd2xlZnQ6Ilx1MjFiYSIsb2xhcnI6Ilx1MjFiYSIsY2lyY2xlYXJyb3dyaWdodDoiXHUyMWJiIixvcmFycjoiXHUyMWJiIixjaXJjbGVkUzoiXHUyNGM4IixvUzoiXHUyNGM4IixjaXJjbGVkYXN0OiJcdTIyOWIiLG9hc3Q6Ilx1MjI5YiIsY2lyY2xlZGNpcmM6Ilx1MjI5YSIsb2NpcjoiXHUyMjlhIixjaXJjbGVkZGFzaDoiXHUyMjlkIixvZGFzaDoiXHUyMjlkIixjaXJmbmludDoiXHUyYTEwIixjaXJtaWQ6Ilx1MmFlZiIsY2lyc2NpcjoiXHUyOWMyIixjbHViczoiXHUyNjYzIixjbHVic3VpdDoiXHUyNjYzIixjb2xvbjoiOiIsY29tbWE6IiwiLGNvbW1hdDoiQCIsY29tcDoiXHUyMjAxIixjb21wbGVtZW50OiJcdTIyMDEiLGNvbmdkb3Q6Ilx1MmE2ZCIsY29wZjoiXHVkODM1XHVkZDU0Iixjb3B5c3I6Ilx1MjExNyIsY3JhcnI6Ilx1MjFiNSIsY3Jvc3M6Ilx1MjcxNyIsY3NjcjoiXHVkODM1XHVkY2I4Iixjc3ViOiJcdTJhY2YiLGNzdWJlOiJcdTJhZDEiLGNzdXA6Ilx1MmFkMCIsY3N1cGU6Ilx1MmFkMiIsY3Rkb3Q6Ilx1MjJlZiIsY3VkYXJybDoiXHUyOTM4IixjdWRhcnJyOiJcdTI5MzUiLGN1ZXByOiJcdTIyZGUiLGN1cmx5ZXFwcmVjOiJcdTIyZGUiLGN1ZXNjOiJcdTIyZGYiLGN1cmx5ZXFzdWNjOiJcdTIyZGYiLGN1bGFycjoiXHUyMWI2IixjdXJ2ZWFycm93bGVmdDoiXHUyMWI2IixjdWxhcnJwOiJcdTI5M2QiLGN1cDoiXHUyMjJhIixjdXBicmNhcDoiXHUyYTQ4IixjdXBjYXA6Ilx1MmE0NiIsY3VwY3VwOiJcdTJhNGEiLGN1cGRvdDoiXHUyMjhkIixjdXBvcjoiXHUyYTQ1IixjdXBzOiJcdTIyMmFcdWZlMDAiLGN1cmFycjoiXHUyMWI3IixjdXJ2ZWFycm93cmlnaHQ6Ilx1MjFiNyIsY3VyYXJybToiXHUyOTNjIixjdXJseXZlZToiXHUyMmNlIixjdXZlZToiXHUyMmNlIixjdXJseXdlZGdlOiJcdTIyY2YiLGN1d2VkOiJcdTIyY2YiLGN1cnJlbjoiXHhhNCIsY3dpbnQ6Ilx1MjIzMSIsY3lsY3R5OiJcdTIzMmQiLGRIYXI6Ilx1Mjk2NSIsZGFnZ2VyOiJcdTIwMjAiLGRhbGV0aDoiXHUyMTM4IixkYXNoOiJcdTIwMTAiLGh5cGhlbjoiXHUyMDEwIixkYmthcm93OiJcdTI5MGYiLHJCYXJyOiJcdTI5MGYiLGRjYXJvbjoiXHUwMTBmIixkY3k6Ilx1MDQzNCIsZGRhcnI6Ilx1MjFjYSIsZG93bmRvd25hcnJvd3M6Ilx1MjFjYSIsZGRvdHNlcToiXHUyYTc3IixlRERvdDoiXHUyYTc3IixkZWc6Ilx4YjAiLGRlbHRhOiJcdTAzYjQiLGRlbXB0eXY6Ilx1MjliMSIsZGZpc2h0OiJcdTI5N2YiLGRmcjoiXHVkODM1XHVkZDIxIixkaWFtb25kc3VpdDoiXHUyNjY2IixkaWFtczoiXHUyNjY2IixkaWdhbW1hOiJcdTAzZGQiLGdhbW1hZDoiXHUwM2RkIixkaXNpbjoiXHUyMmYyIixkaXY6Ilx4ZjciLGRpdmlkZToiXHhmNyIsZGl2aWRlb250aW1lczoiXHUyMmM3IixkaXZvbng6Ilx1MjJjNyIsZGpjeToiXHUwNDUyIixkbGNvcm46Ilx1MjMxZSIsbGxjb3JuZXI6Ilx1MjMxZSIsZGxjcm9wOiJcdTIzMGQiLGRvbGxhcjoiJCIsZG9wZjoiXHVkODM1XHVkZDU1Iixkb3RlcWRvdDoiXHUyMjUxIixlRG90OiJcdTIyNTEiLGRvdG1pbnVzOiJcdTIyMzgiLG1pbnVzZDoiXHUyMjM4Iixkb3RwbHVzOiJcdTIyMTQiLHBsdXNkbzoiXHUyMjE0Iixkb3RzcXVhcmU6Ilx1MjJhMSIsc2RvdGI6Ilx1MjJhMSIsZHJjb3JuOiJcdTIzMWYiLGxyY29ybmVyOiJcdTIzMWYiLGRyY3JvcDoiXHUyMzBjIixkc2NyOiJcdWQ4MzVcdWRjYjkiLGRzY3k6Ilx1MDQ1NSIsZHNvbDoiXHUyOWY2Iixkc3Ryb2s6Ilx1MDExMSIsZHRkb3Q6Ilx1MjJmMSIsZHRyaToiXHUyNWJmIix0cmlhbmdsZWRvd246Ilx1MjViZiIsZHdhbmdsZToiXHUyOWE2IixkemN5OiJcdTA0NWYiLGR6aWdyYXJyOiJcdTI3ZmYiLGVhY3V0ZToiXHhlOSIsZWFzdGVyOiJcdTJhNmUiLGVjYXJvbjoiXHUwMTFiIixlY2lyOiJcdTIyNTYiLGVxY2lyYzoiXHUyMjU2IixlY2lyYzoiXHhlYSIsZWNvbG9uOiJcdTIyNTUiLGVxY29sb246Ilx1MjI1NSIsZWN5OiJcdTA0NGQiLGVkb3Q6Ilx1MDExNyIsZWZEb3Q6Ilx1MjI1MiIsZmFsbGluZ2RvdHNlcToiXHUyMjUyIixlZnI6Ilx1ZDgzNVx1ZGQyMiIsZWc6Ilx1MmE5YSIsZWdyYXZlOiJceGU4IixlZ3M6Ilx1MmE5NiIsZXFzbGFudGd0cjoiXHUyYTk2IixlZ3Nkb3Q6Ilx1MmE5OCIsZWw6Ilx1MmE5OSIsZWxpbnRlcnM6Ilx1MjNlNyIsZWxsOiJcdTIxMTMiLGVsczoiXHUyYTk1IixlcXNsYW50bGVzczoiXHUyYTk1IixlbHNkb3Q6Ilx1MmE5NyIsZW1hY3I6Ilx1MDExMyIsZW1wdHk6Ilx1MjIwNSIsZW1wdHlzZXQ6Ilx1MjIwNSIsZW1wdHl2OiJcdTIyMDUiLHZhcm5vdGhpbmc6Ilx1MjIwNSIsZW1zcDEzOiJcdTIwMDQiLGVtc3AxNDoiXHUyMDA1IixlbXNwOiJcdTIwMDMiLGVuZzoiXHUwMTRiIixlbnNwOiJcdTIwMDIiLGVvZ29uOiJcdTAxMTkiLGVvcGY6Ilx1ZDgzNVx1ZGQ1NiIsZXBhcjoiXHUyMmQ1IixlcGFyc2w6Ilx1MjllMyIsZXBsdXM6Ilx1MmE3MSIsZXBzaToiXHUwM2I1IixlcHNpbG9uOiJcdTAzYjUiLGVwc2l2OiJcdTAzZjUiLHN0cmFpZ2h0ZXBzaWxvbjoiXHUwM2Y1Iix2YXJlcHNpbG9uOiJcdTAzZjUiLGVxdWFsczoiPSIsZXF1ZXN0OiJcdTIyNWYiLHF1ZXN0ZXE6Ilx1MjI1ZiIsZXF1aXZERDoiXHUyYTc4IixlcXZwYXJzbDoiXHUyOWU1IixlckRvdDoiXHUyMjUzIixyaXNpbmdkb3RzZXE6Ilx1MjI1MyIsZXJhcnI6Ilx1Mjk3MSIsZXNjcjoiXHUyMTJmIixldGE6Ilx1MDNiNyIsZXRoOiJceGYwIixldW1sOiJceGViIixldXJvOiJcdTIwYWMiLGV4Y2w6IiEiLGZjeToiXHUwNDQ0IixmZW1hbGU6Ilx1MjY0MCIsZmZpbGlnOiJcdWZiMDMiLGZmbGlnOiJcdWZiMDAiLGZmbGxpZzoiXHVmYjA0IixmZnI6Ilx1ZDgzNVx1ZGQyMyIsZmlsaWc6Ilx1ZmIwMSIsZmpsaWc6ImZqIixmbGF0OiJcdTI2NmQiLGZsbGlnOiJcdWZiMDIiLGZsdG5zOiJcdTI1YjEiLGZub2Y6Ilx1MDE5MiIsZm9wZjoiXHVkODM1XHVkZDU3Iixmb3JrOiJcdTIyZDQiLHBpdGNoZm9yazoiXHUyMmQ0Iixmb3JrdjoiXHUyYWQ5IixmcGFydGludDoiXHUyYTBkIixmcmFjMTI6Ilx4YmQiLGhhbGY6Ilx4YmQiLGZyYWMxMzoiXHUyMTUzIixmcmFjMTQ6Ilx4YmMiLGZyYWMxNToiXHUyMTU1IixmcmFjMTY6Ilx1MjE1OSIsZnJhYzE4OiJcdTIxNWIiLGZyYWMyMzoiXHUyMTU0IixmcmFjMjU6Ilx1MjE1NiIsZnJhYzM0OiJceGJlIixmcmFjMzU6Ilx1MjE1NyIsZnJhYzM4OiJcdTIxNWMiLGZyYWM0NToiXHUyMTU4IixmcmFjNTY6Ilx1MjE1YSIsZnJhYzU4OiJcdTIxNWQiLGZyYWM3ODoiXHUyMTVlIixmcmFzbDoiXHUyMDQ0Iixmcm93bjoiXHUyMzIyIixzZnJvd246Ilx1MjMyMiIsZnNjcjoiXHVkODM1XHVkY2JiIixnRWw6Ilx1MmE4YyIsZ3RyZXFxbGVzczoiXHUyYThjIixnYWN1dGU6Ilx1MDFmNSIsZ2FtbWE6Ilx1MDNiMyIsZ2FwOiJcdTJhODYiLGd0cmFwcHJveDoiXHUyYTg2IixnYnJldmU6Ilx1MDExZiIsZ2NpcmM6Ilx1MDExZCIsZ2N5OiJcdTA0MzMiLGdkb3Q6Ilx1MDEyMSIsZ2VzY2M6Ilx1MmFhOSIsZ2VzZG90OiJcdTJhODAiLGdlc2RvdG86Ilx1MmE4MiIsZ2VzZG90b2w6Ilx1MmE4NCIsZ2VzbDoiXHUyMmRiXHVmZTAwIixnZXNsZXM6Ilx1MmE5NCIsZ2ZyOiJcdWQ4MzVcdWRkMjQiLGdpbWVsOiJcdTIxMzciLGdqY3k6Ilx1MDQ1MyIsZ2xFOiJcdTJhOTIiLGdsYToiXHUyYWE1IixnbGo6Ilx1MmFhNCIsZ25FOiJcdTIyNjkiLGduZXFxOiJcdTIyNjkiLGduYXA6Ilx1MmE4YSIsZ25hcHByb3g6Ilx1MmE4YSIsZ25lOiJcdTJhODgiLGduZXE6Ilx1MmE4OCIsZ25zaW06Ilx1MjJlNyIsZ29wZjoiXHVkODM1XHVkZDU4Iixnc2NyOiJcdTIxMGEiLGdzaW1lOiJcdTJhOGUiLGdzaW1sOiJcdTJhOTAiLGd0Y2M6Ilx1MmFhNyIsZ3RjaXI6Ilx1MmE3YSIsZ3Rkb3Q6Ilx1MjJkNyIsZ3RyZG90OiJcdTIyZDciLGd0bFBhcjoiXHUyOTk1IixndHF1ZXN0OiJcdTJhN2MiLGd0cmFycjoiXHUyOTc4IixndmVydG5lcXE6Ilx1MjI2OVx1ZmUwMCIsZ3ZuRToiXHUyMjY5XHVmZTAwIixoYXJkY3k6Ilx1MDQ0YSIsaGFycmNpcjoiXHUyOTQ4IixoYXJydzoiXHUyMWFkIixsZWZ0cmlnaHRzcXVpZ2Fycm93OiJcdTIxYWQiLGhiYXI6Ilx1MjEwZiIsaHNsYXNoOiJcdTIxMGYiLHBsYW5jazoiXHUyMTBmIixwbGFua3Y6Ilx1MjEwZiIsaGNpcmM6Ilx1MDEyNSIsaGVhcnRzOiJcdTI2NjUiLGhlYXJ0c3VpdDoiXHUyNjY1IixoZWxsaXA6Ilx1MjAyNiIsbWxkcjoiXHUyMDI2IixoZXJjb246Ilx1MjJiOSIsaGZyOiJcdWQ4MzVcdWRkMjUiLGhrc2Vhcm93OiJcdTI5MjUiLHNlYXJoazoiXHUyOTI1Iixoa3N3YXJvdzoiXHUyOTI2Iixzd2FyaGs6Ilx1MjkyNiIsaG9hcnI6Ilx1MjFmZiIsaG9tdGh0OiJcdTIyM2IiLGhvb2tsZWZ0YXJyb3c6Ilx1MjFhOSIsbGFycmhrOiJcdTIxYTkiLGhvb2tyaWdodGFycm93OiJcdTIxYWEiLHJhcnJoazoiXHUyMWFhIixob3BmOiJcdWQ4MzVcdWRkNTkiLGhvcmJhcjoiXHUyMDE1Iixoc2NyOiJcdWQ4MzVcdWRjYmQiLGhzdHJvazoiXHUwMTI3IixoeWJ1bGw6Ilx1MjA0MyIsaWFjdXRlOiJceGVkIixpY2lyYzoiXHhlZSIsaWN5OiJcdTA0MzgiLGllY3k6Ilx1MDQzNSIsaWV4Y2w6Ilx4YTEiLGlmcjoiXHVkODM1XHVkZDI2IixpZ3JhdmU6Ilx4ZWMiLGlpaWludDoiXHUyYTBjIixxaW50OiJcdTJhMGMiLGlpaW50OiJcdTIyMmQiLHRpbnQ6Ilx1MjIyZCIsaWluZmluOiJcdTI5ZGMiLGlpb3RhOiJcdTIxMjkiLGlqbGlnOiJcdTAxMzMiLGltYWNyOiJcdTAxMmIiLGltYXRoOiJcdTAxMzEiLGlub2RvdDoiXHUwMTMxIixpbW9mOiJcdTIyYjciLGltcGVkOiJcdTAxYjUiLGluY2FyZToiXHUyMTA1IixpbmZpbjoiXHUyMjFlIixpbmZpbnRpZToiXHUyOWRkIixpbnRjYWw6Ilx1MjJiYSIsaW50ZXJjYWw6Ilx1MjJiYSIsaW50bGFyaGs6Ilx1MmExNyIsaW50cHJvZDoiXHUyYTNjIixpcHJvZDoiXHUyYTNjIixpb2N5OiJcdTA0NTEiLGlvZ29uOiJcdTAxMmYiLGlvcGY6Ilx1ZDgzNVx1ZGQ1YSIsaW90YToiXHUwM2I5IixpcXVlc3Q6Ilx4YmYiLGlzY3I6Ilx1ZDgzNVx1ZGNiZSIsaXNpbkU6Ilx1MjJmOSIsaXNpbmRvdDoiXHUyMmY1Iixpc2luczoiXHUyMmY0Iixpc2luc3Y6Ilx1MjJmMyIsaXRpbGRlOiJcdTAxMjkiLGl1a2N5OiJcdTA0NTYiLGl1bWw6Ilx4ZWYiLGpjaXJjOiJcdTAxMzUiLGpjeToiXHUwNDM5IixqZnI6Ilx1ZDgzNVx1ZGQyNyIsam1hdGg6Ilx1MDIzNyIsam9wZjoiXHVkODM1XHVkZDViIixqc2NyOiJcdWQ4MzVcdWRjYmYiLGpzZXJjeToiXHUwNDU4IixqdWtjeToiXHUwNDU0IixrYXBwYToiXHUwM2JhIixrYXBwYXY6Ilx1MDNmMCIsdmFya2FwcGE6Ilx1MDNmMCIsa2NlZGlsOiJcdTAxMzciLGtjeToiXHUwNDNhIixrZnI6Ilx1ZDgzNVx1ZGQyOCIsa2dyZWVuOiJcdTAxMzgiLGtoY3k6Ilx1MDQ0NSIsa2pjeToiXHUwNDVjIixrb3BmOiJcdWQ4MzVcdWRkNWMiLGtzY3I6Ilx1ZDgzNVx1ZGNjMCIsbEF0YWlsOiJcdTI5MWIiLGxCYXJyOiJcdTI5MGUiLGxFZzoiXHUyYThiIixsZXNzZXFxZ3RyOiJcdTJhOGIiLGxIYXI6Ilx1Mjk2MiIsbGFjdXRlOiJcdTAxM2EiLGxhZW1wdHl2OiJcdTI5YjQiLGxhbWJkYToiXHUwM2JiIixsYW5nZDoiXHUyOTkxIixsYXA6Ilx1MmE4NSIsbGVzc2FwcHJveDoiXHUyYTg1IixsYXF1bzoiXHhhYiIsbGFycmJmczoiXHUyOTFmIixsYXJyZnM6Ilx1MjkxZCIsbGFycmxwOiJcdTIxYWIiLGxvb3BhcnJvd2xlZnQ6Ilx1MjFhYiIsbGFycnBsOiJcdTI5MzkiLGxhcnJzaW06Ilx1Mjk3MyIsbGFycnRsOiJcdTIxYTIiLGxlZnRhcnJvd3RhaWw6Ilx1MjFhMiIsbGF0OiJcdTJhYWIiLGxhdGFpbDoiXHUyOTE5IixsYXRlOiJcdTJhYWQiLGxhdGVzOiJcdTJhYWRcdWZlMDAiLGxiYXJyOiJcdTI5MGMiLGxiYnJrOiJcdTI3NzIiLGxicmFjZToieyIsbGN1YjoieyIsbGJyYWNrOiJbIixsc3FiOiJbIixsYnJrZToiXHUyOThiIixsYnJrc2xkOiJcdTI5OGYiLGxicmtzbHU6Ilx1Mjk4ZCIsbGNhcm9uOiJcdTAxM2UiLGxjZWRpbDoiXHUwMTNjIixsY3k6Ilx1MDQzYiIsbGRjYToiXHUyOTM2IixsZHJkaGFyOiJcdTI5NjciLGxkcnVzaGFyOiJcdTI5NGIiLGxkc2g6Ilx1MjFiMiIsbGU6Ilx1MjI2NCIsbGVxOiJcdTIyNjQiLGxlZnRsZWZ0YXJyb3dzOiJcdTIxYzciLGxsYXJyOiJcdTIxYzciLGxlZnR0aHJlZXRpbWVzOiJcdTIyY2IiLGx0aHJlZToiXHUyMmNiIixsZXNjYzoiXHUyYWE4IixsZXNkb3Q6Ilx1MmE3ZiIsbGVzZG90bzoiXHUyYTgxIixsZXNkb3RvcjoiXHUyYTgzIixsZXNnOiJcdTIyZGFcdWZlMDAiLGxlc2dlczoiXHUyYTkzIixsZXNzZG90OiJcdTIyZDYiLGx0ZG90OiJcdTIyZDYiLGxmaXNodDoiXHUyOTdjIixsZnI6Ilx1ZDgzNVx1ZGQyOSIsbGdFOiJcdTJhOTEiLGxoYXJ1bDoiXHUyOTZhIixsaGJsazoiXHUyNTg0IixsamN5OiJcdTA0NTkiLGxsaGFyZDoiXHUyOTZiIixsbHRyaToiXHUyNWZhIixsbWlkb3Q6Ilx1MDE0MCIsbG1vdXN0OiJcdTIzYjAiLGxtb3VzdGFjaGU6Ilx1MjNiMCIsbG5FOiJcdTIyNjgiLGxuZXFxOiJcdTIyNjgiLGxuYXA6Ilx1MmE4OSIsbG5hcHByb3g6Ilx1MmE4OSIsbG5lOiJcdTJhODciLGxuZXE6Ilx1MmE4NyIsbG5zaW06Ilx1MjJlNiIsbG9hbmc6Ilx1MjdlYyIsbG9hcnI6Ilx1MjFmZCIsbG9uZ21hcHN0bzoiXHUyN2ZjIix4bWFwOiJcdTI3ZmMiLGxvb3BhcnJvd3JpZ2h0OiJcdTIxYWMiLHJhcnJscDoiXHUyMWFjIixsb3BhcjoiXHUyOTg1Iixsb3BmOiJcdWQ4MzVcdWRkNWQiLGxvcGx1czoiXHUyYTJkIixsb3RpbWVzOiJcdTJhMzQiLGxvd2FzdDoiXHUyMjE3Iixsb3o6Ilx1MjVjYSIsbG96ZW5nZToiXHUyNWNhIixscGFyOiIoIixscGFybHQ6Ilx1Mjk5MyIsbHJoYXJkOiJcdTI5NmQiLGxybToiXHUyMDBlIixscnRyaToiXHUyMmJmIixsc2FxdW86Ilx1MjAzOSIsbHNjcjoiXHVkODM1XHVkY2MxIixsc2ltZToiXHUyYThkIixsc2ltZzoiXHUyYThmIixsc3F1b3I6Ilx1MjAxYSIsc2JxdW86Ilx1MjAxYSIsbHN0cm9rOiJcdTAxNDIiLGx0Y2M6Ilx1MmFhNiIsbHRjaXI6Ilx1MmE3OSIsbHRpbWVzOiJcdTIyYzkiLGx0bGFycjoiXHUyOTc2IixsdHF1ZXN0OiJcdTJhN2IiLGx0clBhcjoiXHUyOTk2IixsdHJpOiJcdTI1YzMiLHRyaWFuZ2xlbGVmdDoiXHUyNWMzIixsdXJkc2hhcjoiXHUyOTRhIixsdXJ1aGFyOiJcdTI5NjYiLGx2ZXJ0bmVxcToiXHUyMjY4XHVmZTAwIixsdm5FOiJcdTIyNjhcdWZlMDAiLG1ERG90OiJcdTIyM2EiLG1hY3I6Ilx4YWYiLHN0cm5zOiJceGFmIixtYWxlOiJcdTI2NDIiLG1hbHQ6Ilx1MjcyMCIsbWFsdGVzZToiXHUyNzIwIixtYXJrZXI6Ilx1MjVhZSIsbWNvbW1hOiJcdTJhMjkiLG1jeToiXHUwNDNjIixtZGFzaDoiXHUyMDE0IixtZnI6Ilx1ZDgzNVx1ZGQyYSIsbWhvOiJcdTIxMjciLG1pY3JvOiJceGI1IixtaWRjaXI6Ilx1MmFmMCIsbWludXM6Ilx1MjIxMiIsbWludXNkdToiXHUyYTJhIixtbGNwOiJcdTJhZGIiLG1vZGVsczoiXHUyMmE3Iixtb3BmOiJcdWQ4MzVcdWRkNWUiLG1zY3I6Ilx1ZDgzNVx1ZGNjMiIsbXU6Ilx1MDNiYyIsbXVsdGltYXA6Ilx1MjJiOCIsbXVtYXA6Ilx1MjJiOCIsbkdnOiJcdTIyZDlcdTAzMzgiLG5HdDoiXHUyMjZiXHUyMGQyIixuTGVmdGFycm93OiJcdTIxY2QiLG5sQXJyOiJcdTIxY2QiLG5MZWZ0cmlnaHRhcnJvdzoiXHUyMWNlIixuaEFycjoiXHUyMWNlIixuTGw6Ilx1MjJkOFx1MDMzOCIsbkx0OiJcdTIyNmFcdTIwZDIiLG5SaWdodGFycm93OiJcdTIxY2YiLG5yQXJyOiJcdTIxY2YiLG5WRGFzaDoiXHUyMmFmIixuVmRhc2g6Ilx1MjJhZSIsbmFjdXRlOiJcdTAxNDQiLG5hbmc6Ilx1MjIyMFx1MjBkMiIsbmFwRToiXHUyYTcwXHUwMzM4IixuYXBpZDoiXHUyMjRiXHUwMzM4IixuYXBvczoiXHUwMTQ5IixuYXR1cjoiXHUyNjZlIixuYXR1cmFsOiJcdTI2NmUiLG5jYXA6Ilx1MmE0MyIsbmNhcm9uOiJcdTAxNDgiLG5jZWRpbDoiXHUwMTQ2IixuY29uZ2RvdDoiXHUyYTZkXHUwMzM4IixuY3VwOiJcdTJhNDIiLG5jeToiXHUwNDNkIixuZGFzaDoiXHUyMDEzIixuZUFycjoiXHUyMWQ3IixuZWFyaGs6Ilx1MjkyNCIsbmVkb3Q6Ilx1MjI1MFx1MDMzOCIsbmVzZWFyOiJcdTI5MjgiLHRvZWE6Ilx1MjkyOCIsbmZyOiJcdWQ4MzVcdWRkMmIiLG5oYXJyOiJcdTIxYWUiLG5sZWZ0cmlnaHRhcnJvdzoiXHUyMWFlIixuaHBhcjoiXHUyYWYyIixuaXM6Ilx1MjJmYyIsbmlzZDoiXHUyMmZhIixuamN5OiJcdTA0NWEiLG5sRToiXHUyMjY2XHUwMzM4IixubGVxcToiXHUyMjY2XHUwMzM4IixubGFycjoiXHUyMTlhIixubGVmdGFycm93OiJcdTIxOWEiLG5sZHI6Ilx1MjAyNSIsbm9wZjoiXHVkODM1XHVkZDVmIixub3Q6Ilx4YWMiLG5vdGluRToiXHUyMmY5XHUwMzM4Iixub3RpbmRvdDoiXHUyMmY1XHUwMzM4Iixub3RpbnZiOiJcdTIyZjciLG5vdGludmM6Ilx1MjJmNiIsbm90bml2YjoiXHUyMmZlIixub3RuaXZjOiJcdTIyZmQiLG5wYXJzbDoiXHUyYWZkXHUyMGU1IixucGFydDoiXHUyMjAyXHUwMzM4IixucG9saW50OiJcdTJhMTQiLG5yYXJyOiJcdTIxOWIiLG5yaWdodGFycm93OiJcdTIxOWIiLG5yYXJyYzoiXHUyOTMzXHUwMzM4IixucmFycnc6Ilx1MjE5ZFx1MDMzOCIsbnNjcjoiXHVkODM1XHVkY2MzIixuc3ViOiJcdTIyODQiLG5zdWJFOiJcdTJhYzVcdTAzMzgiLG5zdWJzZXRlcXE6Ilx1MmFjNVx1MDMzOCIsbnN1cDoiXHUyMjg1Iixuc3VwRToiXHUyYWM2XHUwMzM4Iixuc3Vwc2V0ZXFxOiJcdTJhYzZcdTAzMzgiLG50aWxkZToiXHhmMSIsbnU6Ilx1MDNiZCIsbnVtOiIjIixudW1lcm86Ilx1MjExNiIsbnVtc3A6Ilx1MjAwNyIsbnZEYXNoOiJcdTIyYWQiLG52SGFycjoiXHUyOTA0IixudmFwOiJcdTIyNGRcdTIwZDIiLG52ZGFzaDoiXHUyMmFjIixudmdlOiJcdTIyNjVcdTIwZDIiLG52Z3Q6Ij5cdTIwZDIiLG52aW5maW46Ilx1MjlkZSIsbnZsQXJyOiJcdTI5MDIiLG52bGU6Ilx1MjI2NFx1MjBkMiIsbnZsdDoiPFx1MjBkMiIsbnZsdHJpZToiXHUyMmI0XHUyMGQyIixudnJBcnI6Ilx1MjkwMyIsbnZydHJpZToiXHUyMmI1XHUyMGQyIixudnNpbToiXHUyMjNjXHUyMGQyIixud0FycjoiXHUyMWQ2Iixud2FyaGs6Ilx1MjkyMyIsbnduZWFyOiJcdTI5MjciLG9hY3V0ZToiXHhmMyIsb2NpcmM6Ilx4ZjQiLG9jeToiXHUwNDNlIixvZGJsYWM6Ilx1MDE1MSIsb2RpdjoiXHUyYTM4IixvZHNvbGQ6Ilx1MjliYyIsb2VsaWc6Ilx1MDE1MyIsb2ZjaXI6Ilx1MjliZiIsb2ZyOiJcdWQ4MzVcdWRkMmMiLG9nb246Ilx1MDJkYiIsb2dyYXZlOiJceGYyIixvZ3Q6Ilx1MjljMSIsb2hiYXI6Ilx1MjliNSIsb2xjaXI6Ilx1MjliZSIsb2xjcm9zczoiXHUyOWJiIixvbHQ6Ilx1MjljMCIsb21hY3I6Ilx1MDE0ZCIsb21lZ2E6Ilx1MDNjOSIsb21pY3JvbjoiXHUwM2JmIixvbWlkOiJcdTI5YjYiLG9vcGY6Ilx1ZDgzNVx1ZGQ2MCIsb3BhcjoiXHUyOWI3IixvcGVycDoiXHUyOWI5IixvcjoiXHUyMjI4Iix2ZWU6Ilx1MjIyOCIsb3JkOiJcdTJhNWQiLG9yZGVyOiJcdTIxMzQiLG9yZGVyb2Y6Ilx1MjEzNCIsb3NjcjoiXHUyMTM0IixvcmRmOiJceGFhIixvcmRtOiJceGJhIixvcmlnb2Y6Ilx1MjJiNiIsb3JvcjoiXHUyYTU2IixvcnNsb3BlOiJcdTJhNTciLG9ydjoiXHUyYTViIixvc2xhc2g6Ilx4ZjgiLG9zb2w6Ilx1MjI5OCIsb3RpbGRlOiJceGY1IixvdGltZXNhczoiXHUyYTM2IixvdW1sOiJceGY2IixvdmJhcjoiXHUyMzNkIixwYXJhOiJceGI2IixwYXJzaW06Ilx1MmFmMyIscGFyc2w6Ilx1MmFmZCIscGN5OiJcdTA0M2YiLHBlcmNudDoiJSIscGVyaW9kOiIuIixwZXJtaWw6Ilx1MjAzMCIscGVydGVuazoiXHUyMDMxIixwZnI6Ilx1ZDgzNVx1ZGQyZCIscGhpOiJcdTAzYzYiLHBoaXY6Ilx1MDNkNSIsc3RyYWlnaHRwaGk6Ilx1MDNkNSIsdmFycGhpOiJcdTAzZDUiLHBob25lOiJcdTI2MGUiLHBpOiJcdTAzYzAiLHBpdjoiXHUwM2Q2Iix2YXJwaToiXHUwM2Q2IixwbGFuY2toOiJcdTIxMGUiLHBsdXM6IisiLHBsdXNhY2lyOiJcdTJhMjMiLHBsdXNjaXI6Ilx1MmEyMiIscGx1c2R1OiJcdTJhMjUiLHBsdXNlOiJcdTJhNzIiLHBsdXNzaW06Ilx1MmEyNiIscGx1c3R3bzoiXHUyYTI3Iixwb2ludGludDoiXHUyYTE1Iixwb3BmOiJcdWQ4MzVcdWRkNjEiLHBvdW5kOiJceGEzIixwckU6Ilx1MmFiMyIscHJhcDoiXHUyYWI3IixwcmVjYXBwcm94OiJcdTJhYjciLHByZWNuYXBwcm94OiJcdTJhYjkiLHBybmFwOiJcdTJhYjkiLHByZWNuZXFxOiJcdTJhYjUiLHBybkU6Ilx1MmFiNSIscHJlY25zaW06Ilx1MjJlOCIscHJuc2ltOiJcdTIyZTgiLHByaW1lOiJcdTIwMzIiLHByb2ZhbGFyOiJcdTIzMmUiLHByb2ZsaW5lOiJcdTIzMTIiLHByb2ZzdXJmOiJcdTIzMTMiLHBydXJlbDoiXHUyMmIwIixwc2NyOiJcdWQ4MzVcdWRjYzUiLHBzaToiXHUwM2M4IixwdW5jc3A6Ilx1MjAwOCIscWZyOiJcdWQ4MzVcdWRkMmUiLHFvcGY6Ilx1ZDgzNVx1ZGQ2MiIscXByaW1lOiJcdTIwNTciLHFzY3I6Ilx1ZDgzNVx1ZGNjNiIscXVhdGludDoiXHUyYTE2IixxdWVzdDoiPyIsckF0YWlsOiJcdTI5MWMiLHJIYXI6Ilx1Mjk2NCIscmFjZToiXHUyMjNkXHUwMzMxIixyYWN1dGU6Ilx1MDE1NSIscmFlbXB0eXY6Ilx1MjliMyIscmFuZ2Q6Ilx1Mjk5MiIscmFuZ2U6Ilx1MjlhNSIscmFxdW86Ilx4YmIiLHJhcnJhcDoiXHUyOTc1IixyYXJyYmZzOiJcdTI5MjAiLHJhcnJjOiJcdTI5MzMiLHJhcnJmczoiXHUyOTFlIixyYXJycGw6Ilx1Mjk0NSIscmFycnNpbToiXHUyOTc0IixyYXJydGw6Ilx1MjFhMyIscmlnaHRhcnJvd3RhaWw6Ilx1MjFhMyIscmFycnc6Ilx1MjE5ZCIscmlnaHRzcXVpZ2Fycm93OiJcdTIxOWQiLHJhdGFpbDoiXHUyOTFhIixyYXRpbzoiXHUyMjM2IixyYmJyazoiXHUyNzczIixyYnJhY2U6In0iLHJjdWI6In0iLHJicmFjazoiXSIscnNxYjoiXSIscmJya2U6Ilx1Mjk4YyIscmJya3NsZDoiXHUyOThlIixyYnJrc2x1OiJcdTI5OTAiLHJjYXJvbjoiXHUwMTU5IixyY2VkaWw6Ilx1MDE1NyIscmN5OiJcdTA0NDAiLHJkY2E6Ilx1MjkzNyIscmRsZGhhcjoiXHUyOTY5IixyZHNoOiJcdTIxYjMiLHJlY3Q6Ilx1MjVhZCIscmZpc2h0OiJcdTI5N2QiLHJmcjoiXHVkODM1XHVkZDJmIixyaGFydWw6Ilx1Mjk2YyIscmhvOiJcdTAzYzEiLHJob3Y6Ilx1MDNmMSIsdmFycmhvOiJcdTAzZjEiLHJpZ2h0cmlnaHRhcnJvd3M6Ilx1MjFjOSIscnJhcnI6Ilx1MjFjOSIscmlnaHR0aHJlZXRpbWVzOiJcdTIyY2MiLHJ0aHJlZToiXHUyMmNjIixyaW5nOiJcdTAyZGEiLHJsbToiXHUyMDBmIixybW91c3Q6Ilx1MjNiMSIscm1vdXN0YWNoZToiXHUyM2IxIixybm1pZDoiXHUyYWVlIixyb2FuZzoiXHUyN2VkIixyb2FycjoiXHUyMWZlIixyb3BhcjoiXHUyOTg2Iixyb3BmOiJcdWQ4MzVcdWRkNjMiLHJvcGx1czoiXHUyYTJlIixyb3RpbWVzOiJcdTJhMzUiLHJwYXI6IikiLHJwYXJndDoiXHUyOTk0IixycHBvbGludDoiXHUyYTEyIixyc2FxdW86Ilx1MjAzYSIscnNjcjoiXHVkODM1XHVkY2M3IixydGltZXM6Ilx1MjJjYSIscnRyaToiXHUyNWI5Iix0cmlhbmdsZXJpZ2h0OiJcdTI1YjkiLHJ0cmlsdHJpOiJcdTI5Y2UiLHJ1bHVoYXI6Ilx1Mjk2OCIscng6Ilx1MjExZSIsc2FjdXRlOiJcdTAxNWIiLHNjRToiXHUyYWI0IixzY2FwOiJcdTJhYjgiLHN1Y2NhcHByb3g6Ilx1MmFiOCIsc2Nhcm9uOiJcdTAxNjEiLHNjZWRpbDoiXHUwMTVmIixzY2lyYzoiXHUwMTVkIixzY25FOiJcdTJhYjYiLHN1Y2NuZXFxOiJcdTJhYjYiLHNjbmFwOiJcdTJhYmEiLHN1Y2NuYXBwcm94OiJcdTJhYmEiLHNjbnNpbToiXHUyMmU5IixzdWNjbnNpbToiXHUyMmU5IixzY3BvbGludDoiXHUyYTEzIixzY3k6Ilx1MDQ0MSIsc2RvdDoiXHUyMmM1IixzZG90ZToiXHUyYTY2IixzZUFycjoiXHUyMWQ4IixzZWN0OiJceGE3IixzZW1pOiI7IixzZXN3YXI6Ilx1MjkyOSIsdG9zYToiXHUyOTI5IixzZXh0OiJcdTI3MzYiLHNmcjoiXHVkODM1XHVkZDMwIixzaGFycDoiXHUyNjZmIixzaGNoY3k6Ilx1MDQ0OSIsc2hjeToiXHUwNDQ4IixzaHk6Ilx4YWQiLHNpZ21hOiJcdTAzYzMiLHNpZ21hZjoiXHUwM2MyIixzaWdtYXY6Ilx1MDNjMiIsdmFyc2lnbWE6Ilx1MDNjMiIsc2ltZG90OiJcdTJhNmEiLHNpbWc6Ilx1MmE5ZSIsc2ltZ0U6Ilx1MmFhMCIsc2ltbDoiXHUyYTlkIixzaW1sRToiXHUyYTlmIixzaW1uZToiXHUyMjQ2IixzaW1wbHVzOiJcdTJhMjQiLHNpbXJhcnI6Ilx1Mjk3MiIsc21hc2hwOiJcdTJhMzMiLHNtZXBhcnNsOiJcdTI5ZTQiLHNtaWxlOiJcdTIzMjMiLHNzbWlsZToiXHUyMzIzIixzbXQ6Ilx1MmFhYSIsc210ZToiXHUyYWFjIixzbXRlczoiXHUyYWFjXHVmZTAwIixzb2Z0Y3k6Ilx1MDQ0YyIsc29sOiIvIixzb2xiOiJcdTI5YzQiLHNvbGJhcjoiXHUyMzNmIixzb3BmOiJcdWQ4MzVcdWRkNjQiLHNwYWRlczoiXHUyNjYwIixzcGFkZXN1aXQ6Ilx1MjY2MCIsc3FjYXBzOiJcdTIyOTNcdWZlMDAiLHNxY3VwczoiXHUyMjk0XHVmZTAwIixzc2NyOiJcdWQ4MzVcdWRjYzgiLHN0YXI6Ilx1MjYwNiIsc3ViOiJcdTIyODIiLHN1YnNldDoiXHUyMjgyIixzdWJFOiJcdTJhYzUiLHN1YnNldGVxcToiXHUyYWM1IixzdWJkb3Q6Ilx1MmFiZCIsc3ViZWRvdDoiXHUyYWMzIixzdWJtdWx0OiJcdTJhYzEiLHN1Ym5FOiJcdTJhY2IiLHN1YnNldG5lcXE6Ilx1MmFjYiIsc3VibmU6Ilx1MjI4YSIsc3Vic2V0bmVxOiJcdTIyOGEiLHN1YnBsdXM6Ilx1MmFiZiIsc3VicmFycjoiXHUyOTc5IixzdWJzaW06Ilx1MmFjNyIsc3Vic3ViOiJcdTJhZDUiLHN1YnN1cDoiXHUyYWQzIixzdW5nOiJcdTI2NmEiLHN1cDE6Ilx4YjkiLHN1cDI6Ilx4YjIiLHN1cDM6Ilx4YjMiLHN1cEU6Ilx1MmFjNiIsc3Vwc2V0ZXFxOiJcdTJhYzYiLHN1cGRvdDoiXHUyYWJlIixzdXBkc3ViOiJcdTJhZDgiLHN1cGVkb3Q6Ilx1MmFjNCIsc3VwaHNvbDoiXHUyN2M5IixzdXBoc3ViOiJcdTJhZDciLHN1cGxhcnI6Ilx1Mjk3YiIsc3VwbXVsdDoiXHUyYWMyIixzdXBuRToiXHUyYWNjIixzdXBzZXRuZXFxOiJcdTJhY2MiLHN1cG5lOiJcdTIyOGIiLHN1cHNldG5lcToiXHUyMjhiIixzdXBwbHVzOiJcdTJhYzAiLHN1cHNpbToiXHUyYWM4IixzdXBzdWI6Ilx1MmFkNCIsc3Vwc3VwOiJcdTJhZDYiLHN3QXJyOiJcdTIxZDkiLHN3bndhcjoiXHUyOTJhIixzemxpZzoiXHhkZiIsdGFyZ2V0OiJcdTIzMTYiLHRhdToiXHUwM2M0Iix0Y2Fyb246Ilx1MDE2NSIsdGNlZGlsOiJcdTAxNjMiLHRjeToiXHUwNDQyIix0ZWxyZWM6Ilx1MjMxNSIsdGZyOiJcdWQ4MzVcdWRkMzEiLHRoZXRhOiJcdTAzYjgiLHRoZXRhc3ltOiJcdTAzZDEiLHRoZXRhdjoiXHUwM2QxIix2YXJ0aGV0YToiXHUwM2QxIix0aG9ybjoiXHhmZSIsdGltZXM6Ilx4ZDciLHRpbWVzYmFyOiJcdTJhMzEiLHRpbWVzZDoiXHUyYTMwIix0b3Bib3Q6Ilx1MjMzNiIsdG9wY2lyOiJcdTJhZjEiLHRvcGY6Ilx1ZDgzNVx1ZGQ2NSIsdG9wZm9yazoiXHUyYWRhIix0cHJpbWU6Ilx1MjAzNCIsdHJpYW5nbGU6Ilx1MjViNSIsdXRyaToiXHUyNWI1Iix0cmlhbmdsZXE6Ilx1MjI1YyIsdHJpZToiXHUyMjVjIix0cmlkb3Q6Ilx1MjVlYyIsdHJpbWludXM6Ilx1MmEzYSIsdHJpcGx1czoiXHUyYTM5Iix0cmlzYjoiXHUyOWNkIix0cml0aW1lOiJcdTJhM2IiLHRycGV6aXVtOiJcdTIzZTIiLHRzY3I6Ilx1ZDgzNVx1ZGNjOSIsdHNjeToiXHUwNDQ2Iix0c2hjeToiXHUwNDViIix0c3Ryb2s6Ilx1MDE2NyIsdUhhcjoiXHUyOTYzIix1YWN1dGU6Ilx4ZmEiLHVicmN5OiJcdTA0NWUiLHVicmV2ZToiXHUwMTZkIix1Y2lyYzoiXHhmYiIsdWN5OiJcdTA0NDMiLHVkYmxhYzoiXHUwMTcxIix1ZmlzaHQ6Ilx1Mjk3ZSIsdWZyOiJcdWQ4MzVcdWRkMzIiLHVncmF2ZToiXHhmOSIsdWhibGs6Ilx1MjU4MCIsdWxjb3JuOiJcdTIzMWMiLHVsY29ybmVyOiJcdTIzMWMiLHVsY3JvcDoiXHUyMzBmIix1bHRyaToiXHUyNWY4Iix1bWFjcjoiXHUwMTZiIix1b2dvbjoiXHUwMTczIix1b3BmOiJcdWQ4MzVcdWRkNjYiLHVwc2k6Ilx1MDNjNSIsdXBzaWxvbjoiXHUwM2M1Iix1cHVwYXJyb3dzOiJcdTIxYzgiLHV1YXJyOiJcdTIxYzgiLHVyY29ybjoiXHUyMzFkIix1cmNvcm5lcjoiXHUyMzFkIix1cmNyb3A6Ilx1MjMwZSIsdXJpbmc6Ilx1MDE2ZiIsdXJ0cmk6Ilx1MjVmOSIsdXNjcjoiXHVkODM1XHVkY2NhIix1dGRvdDoiXHUyMmYwIix1dGlsZGU6Ilx1MDE2OSIsdXVtbDoiXHhmYyIsdXdhbmdsZToiXHUyOWE3Iix2QmFyOiJcdTJhZTgiLHZCYXJ2OiJcdTJhZTkiLHZhbmdydDoiXHUyOTljIix2YXJzdWJzZXRuZXE6Ilx1MjI4YVx1ZmUwMCIsdnN1Ym5lOiJcdTIyOGFcdWZlMDAiLHZhcnN1YnNldG5lcXE6Ilx1MmFjYlx1ZmUwMCIsdnN1Ym5FOiJcdTJhY2JcdWZlMDAiLHZhcnN1cHNldG5lcToiXHUyMjhiXHVmZTAwIix2c3VwbmU6Ilx1MjI4Ylx1ZmUwMCIsdmFyc3Vwc2V0bmVxcToiXHUyYWNjXHVmZTAwIix2c3VwbkU6Ilx1MmFjY1x1ZmUwMCIsdmN5OiJcdTA0MzIiLHZlZWJhcjoiXHUyMmJiIix2ZWVlcToiXHUyMjVhIix2ZWxsaXA6Ilx1MjJlZSIsdmZyOiJcdWQ4MzVcdWRkMzMiLHZvcGY6Ilx1ZDgzNVx1ZGQ2NyIsdnNjcjoiXHVkODM1XHVkY2NiIix2emlnemFnOiJcdTI5OWEiLHdjaXJjOiJcdTAxNzUiLHdlZGJhcjoiXHUyYTVmIix3ZWRnZXE6Ilx1MjI1OSIsd2VpZXJwOiJcdTIxMTgiLHdwOiJcdTIxMTgiLHdmcjoiXHVkODM1XHVkZDM0Iix3b3BmOiJcdWQ4MzVcdWRkNjgiLHdzY3I6Ilx1ZDgzNVx1ZGNjYyIseGZyOiJcdWQ4MzVcdWRkMzUiLHhpOiJcdTAzYmUiLHhuaXM6Ilx1MjJmYiIseG9wZjoiXHVkODM1XHVkZDY5Iix4c2NyOiJcdWQ4MzVcdWRjY2QiLHlhY3V0ZToiXHhmZCIseWFjeToiXHUwNDRmIix5Y2lyYzoiXHUwMTc3Iix5Y3k6Ilx1MDQ0YiIseWVuOiJceGE1Iix5ZnI6Ilx1ZDgzNVx1ZGQzNiIseWljeToiXHUwNDU3Iix5b3BmOiJcdWQ4MzVcdWRkNmEiLHlzY3I6Ilx1ZDgzNVx1ZGNjZSIseXVjeToiXHUwNDRlIix5dW1sOiJceGZmIix6YWN1dGU6Ilx1MDE3YSIsemNhcm9uOiJcdTAxN2UiLHpjeToiXHUwNDM3Iix6ZG90OiJcdTAxN2MiLHpldGE6Ilx1MDNiNiIsemZyOiJcdWQ4MzVcdWRkMzciLHpoY3k6Ilx1MDQzNiIsemlncmFycjoiXHUyMWRkIix6b3BmOiJcdWQ4MzVcdWRkNmIiLHpzY3I6Ilx1ZDgzNVx1ZGNjZiIsendqOiJcdTIwMGQiLHp3bmo6Ilx1MjAwYyIsbmdzcDoiXHVlNTAwIn0saEM9Y2xhc3MgZXh0ZW5kcyB5bXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoaSx0KSx0aGlzLnRva2VuVHlwZT1lfX0sZUVlPS9cclxuPy9nO2Z1bmN0aW9uIHJDKG4pe3JldHVybmBVbmV4cGVjdGVkIGNoYXJhY3RlciAiJHswPT09bj8iRU9GIjpTdHJpbmcuZnJvbUNoYXJDb2RlKG4pfSJgfWZ1bmN0aW9uIGlRKG4pe3JldHVybmBVbmtub3duIGVudGl0eSAiJHtufSIgLSB1c2UgdGhlICImIzxkZWNpbWFsPjsiIG9yICAiJiN4PGhleD47IiBzeW50YXhgfXZhciBmQz0oKCk9PntyZXR1cm4obj1mQ3x8KGZDPXt9KSkuSEVYPSJoZXhhZGVjaW1hbCIsbi5ERUM9ImRlY2ltYWwiLGZDO3ZhciBufSkoKSxtQz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmVycm9yPXR9fTtmdW5jdGlvbiBybChuKXtyZXR1cm4hUVYobil8fDA9PT1ufWZ1bmN0aW9uIHJRKG4pe3JldHVybiBRVihuKXx8NjI9PT1ufHw2MD09PW58fDQ3PT09bnx8Mzk9PT1ufHwzND09PW58fDYxPT09bnx8MD09PW59ZnVuY3Rpb24gaUVlKG4pe3JldHVybiA1OT09PW58fDA9PT1ufHwhZnVuY3Rpb24obil7cmV0dXJuIG4+PTk3JiZuPD0xMDJ8fG4+PTY1JiZuPD03MHx8JHAobil9KG4pfWZ1bmN0aW9uIHJFZShuKXtyZXR1cm4gNTk9PT1ufHwwPT09bnx8IUtWKG4pfWZ1bmN0aW9uIG9RKG4pe3JldHVybiBuPj05NyYmbjw9MTIyP24tOTcrNjU6bn12YXIgTW09Y2xhc3N7Y29uc3RydWN0b3IodCxlKXtpZih0IGluc3RhbmNlb2YgTW0pe3RoaXMuZmlsZT10LmZpbGUsdGhpcy5pbnB1dD10LmlucHV0LHRoaXMuZW5kPXQuZW5kO2xldCBpPXQuc3RhdGU7dGhpcy5zdGF0ZT17cGVlazppLnBlZWssb2Zmc2V0Omkub2Zmc2V0LGxpbmU6aS5saW5lLGNvbHVtbjppLmNvbHVtbn19ZWxzZXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlByb2dyYW1taW5nIGVycm9yOiB0aGUgcmFuZ2UgYXJndW1lbnQgbXVzdCBiZSBwcm92aWRlZCB3aXRoIGEgZmlsZSBhcmd1bWVudC4iKTt0aGlzLmZpbGU9dCx0aGlzLmlucHV0PXQuY29udGVudCx0aGlzLmVuZD1lLmVuZFBvcyx0aGlzLnN0YXRlPXtwZWVrOi0xLG9mZnNldDplLnN0YXJ0UG9zLGxpbmU6ZS5zdGFydExpbmUsY29sdW1uOmUuc3RhcnRDb2x9fX1jbG9uZSgpe3JldHVybiBuZXcgTW0odGhpcyl9cGVlaygpe3JldHVybiB0aGlzLnN0YXRlLnBlZWt9Y2hhcnNMZWZ0KCl7cmV0dXJuIHRoaXMuZW5kLXRoaXMuc3RhdGUub2Zmc2V0fWRpZmYodCl7cmV0dXJuIHRoaXMuc3RhdGUub2Zmc2V0LXQuc3RhdGUub2Zmc2V0fWFkdmFuY2UoKXt0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLnN0YXRlKX1pbml0KCl7dGhpcy51cGRhdGVQZWVrKHRoaXMuc3RhdGUpfWdldFNwYW4odCxlKXtsZXQgaT10PXR8fHRoaXM7aWYoZSlmb3IoO3RoaXMuZGlmZih0KT4wJiYtMSE9PWUuaW5kZXhPZih0LnBlZWsoKSk7KWk9PT10JiYodD10LmNsb25lKCkpLHQuYWR2YW5jZSgpO2xldCByPXRoaXMubG9jYXRpb25Gcm9tQ3Vyc29yKHQpLG89dGhpcy5sb2NhdGlvbkZyb21DdXJzb3IodGhpcykscz1pIT09dD90aGlzLmxvY2F0aW9uRnJvbUN1cnNvcihpKTpyO3JldHVybiBuZXcgR28ocixvLHMpfWdldENoYXJzKHQpe3JldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyh0LnN0YXRlLm9mZnNldCx0aGlzLnN0YXRlLm9mZnNldCl9Y2hhckF0KHQpe3JldHVybiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodCl9YWR2YW5jZVN0YXRlKHQpe2lmKHQub2Zmc2V0Pj10aGlzLmVuZCl0aHJvdyB0aGlzLnN0YXRlPXQsbmV3IFlDKCdVbmV4cGVjdGVkIGNoYXJhY3RlciAiRU9GIicsdGhpcyk7bGV0IGU9dGhpcy5jaGFyQXQodC5vZmZzZXQpOzEwPT09ZT8odC5saW5lKyssdC5jb2x1bW49MCk6Y0soZSl8fHQuY29sdW1uKyssdC5vZmZzZXQrKyx0aGlzLnVwZGF0ZVBlZWsodCl9dXBkYXRlUGVlayh0KXt0LnBlZWs9dC5vZmZzZXQ+PXRoaXMuZW5kPzA6dGhpcy5jaGFyQXQodC5vZmZzZXQpfWxvY2F0aW9uRnJvbUN1cnNvcih0KXtyZXR1cm4gbmV3IHZtKHQuZmlsZSx0LnN0YXRlLm9mZnNldCx0LnN0YXRlLmxpbmUsdC5zdGF0ZS5jb2x1bW4pfX0sTF89Y2xhc3MgZXh0ZW5kcyBNbXtjb25zdHJ1Y3Rvcih0LGUpe3QgaW5zdGFuY2VvZiBMXz8oc3VwZXIodCksdGhpcy5pbnRlcm5hbFN0YXRlPXsuLi50LmludGVybmFsU3RhdGV9KTooc3VwZXIodCxlKSx0aGlzLmludGVybmFsU3RhdGU9dGhpcy5zdGF0ZSl9YWR2YW5jZSgpe3RoaXMuc3RhdGU9dGhpcy5pbnRlcm5hbFN0YXRlLHN1cGVyLmFkdmFuY2UoKSx0aGlzLnByb2Nlc3NFc2NhcGVTZXF1ZW5jZSgpfWluaXQoKXtzdXBlci5pbml0KCksdGhpcy5wcm9jZXNzRXNjYXBlU2VxdWVuY2UoKX1jbG9uZSgpe3JldHVybiBuZXcgTF8odGhpcyl9Z2V0Q2hhcnModCl7bGV0IGU9dC5jbG9uZSgpLGk9IiI7Zm9yKDtlLmludGVybmFsU3RhdGUub2Zmc2V0PHRoaXMuaW50ZXJuYWxTdGF0ZS5vZmZzZXQ7KWkrPVN0cmluZy5mcm9tQ29kZVBvaW50KGUucGVlaygpKSxlLmFkdmFuY2UoKTtyZXR1cm4gaX1wcm9jZXNzRXNjYXBlU2VxdWVuY2UoKXtsZXQgdD0oKT0+dGhpcy5pbnRlcm5hbFN0YXRlLnBlZWs7aWYoOTI9PT10KCkpaWYodGhpcy5pbnRlcm5hbFN0YXRlPXsuLi50aGlzLnN0YXRlfSx0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLDExMD09PXQoKSl0aGlzLnN0YXRlLnBlZWs9MTA7ZWxzZSBpZigxMTQ9PT10KCkpdGhpcy5zdGF0ZS5wZWVrPTEzO2Vsc2UgaWYoMTE4PT09dCgpKXRoaXMuc3RhdGUucGVlaz0xMTtlbHNlIGlmKDExNj09PXQoKSl0aGlzLnN0YXRlLnBlZWs9OTtlbHNlIGlmKDk4PT09dCgpKXRoaXMuc3RhdGUucGVlaz04O2Vsc2UgaWYoMTAyPT09dCgpKXRoaXMuc3RhdGUucGVlaz0xMjtlbHNlIGlmKDExNz09PXQoKSlpZih0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLHQoKT09PXRoKXt0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpO2xldCBlPXRoaXMuY2xvbmUoKSxpPTA7Zm9yKDt0KCkhPT1PdTspdGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSxpKys7dGhpcy5zdGF0ZS5wZWVrPXRoaXMuZGVjb2RlSGV4RGlnaXRzKGUsaSl9ZWxzZXtsZXQgZT10aGlzLmNsb25lKCk7dGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSx0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLHRoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksdGhpcy5zdGF0ZS5wZWVrPXRoaXMuZGVjb2RlSGV4RGlnaXRzKGUsNCl9ZWxzZSBpZigxMjA9PT10KCkpe3RoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSk7bGV0IGU9dGhpcy5jbG9uZSgpO3RoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksdGhpcy5zdGF0ZS5wZWVrPXRoaXMuZGVjb2RlSGV4RGlnaXRzKGUsMil9ZWxzZSBpZihWWCh0KCkpKXtsZXQgZT0iIixpPTAscj10aGlzLmNsb25lKCk7Zm9yKDtWWCh0KCkpJiZpPDM7KXI9dGhpcy5jbG9uZSgpLGUrPVN0cmluZy5mcm9tQ29kZVBvaW50KHQoKSksdGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSxpKys7dGhpcy5zdGF0ZS5wZWVrPXBhcnNlSW50KGUsOCksdGhpcy5pbnRlcm5hbFN0YXRlPXIuaW50ZXJuYWxTdGF0ZX1lbHNlIGNLKHRoaXMuaW50ZXJuYWxTdGF0ZS5wZWVrKT8odGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSx0aGlzLnN0YXRlPXRoaXMuaW50ZXJuYWxTdGF0ZSk6dGhpcy5zdGF0ZS5wZWVrPXRoaXMuaW50ZXJuYWxTdGF0ZS5wZWVrfWRlY29kZUhleERpZ2l0cyh0LGUpe2xldCBpPXRoaXMuaW5wdXQuc2xpY2UodC5pbnRlcm5hbFN0YXRlLm9mZnNldCx0LmludGVybmFsU3RhdGUub2Zmc2V0K2UpLHI9cGFyc2VJbnQoaSwxNik7aWYoaXNOYU4ocikpdGhyb3cgdC5zdGF0ZT10LmludGVybmFsU3RhdGUsbmV3IFlDKCJJbnZhbGlkIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZSIsdCk7cmV0dXJuIHJ9fSxZQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMubXNnPXQsdGhpcy5jdXJzb3I9ZX19LG9sPWNsYXNzIGV4dGVuZHMgeW17Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGUsaSksdGhpcy5lbGVtZW50TmFtZT10fXN0YXRpYyBjcmVhdGUodCxlLGkpe3JldHVybiBuZXcgb2wodCxlLGkpfX0sTUQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJvb3ROb2Rlcz10LHRoaXMuZXJyb3JzPWV9fSxnVj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmdldFRhZ0RlZmluaXRpb249dH1wYXJzZSh0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obix0LGUsaT17fSl7bGV0IHI9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLl9nZXRUYWdEZWZpbml0aW9uPWUsdGhpcy5fY3VycmVudFRva2VuU3RhcnQ9bnVsbCx0aGlzLl9jdXJyZW50VG9rZW5UeXBlPW51bGwsdGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrPVtdLHRoaXMuX2luSW50ZXJwb2xhdGlvbj0hMSx0aGlzLnRva2Vucz1bXSx0aGlzLmVycm9ycz1bXSx0aGlzLm5vbk5vcm1hbGl6ZWRJY3VFeHByZXNzaW9ucz1bXSx0aGlzLl90b2tlbml6ZUljdT1pLnRva2VuaXplRXhwYW5zaW9uRm9ybXN8fCExLHRoaXMuX2ludGVycG9sYXRpb25Db25maWc9aS5pbnRlcnBvbGF0aW9uQ29uZmlnfHxQdSx0aGlzLl9sZWFkaW5nVHJpdmlhQ29kZVBvaW50cz1pLmxlYWRpbmdUcml2aWFDaGFycyYmaS5sZWFkaW5nVHJpdmlhQ2hhcnMubWFwKG89Pm8uY29kZVBvaW50QXQoMCl8fDApO2xldCByPWkucmFuZ2V8fHtlbmRQb3M6dC5jb250ZW50Lmxlbmd0aCxzdGFydFBvczowLHN0YXJ0TGluZTowLHN0YXJ0Q29sOjB9O3RoaXMuX2N1cnNvcj1pLmVzY2FwZWRTdHJpbmc/bmV3IExfKHQscik6bmV3IE1tKHQsciksdGhpcy5fcHJlc2VydmVMaW5lRW5kaW5ncz1pLnByZXNlcnZlTGluZUVuZGluZ3N8fCExLHRoaXMuX2VzY2FwZWRTdHJpbmc9aS5lc2NhcGVkU3RyaW5nfHwhMSx0aGlzLl9pMThuTm9ybWFsaXplTGluZUVuZGluZ3NJbklDVXM9aS5pMThuTm9ybWFsaXplTGluZUVuZGluZ3NJbklDVXN8fCExO3RyeXt0aGlzLl9jdXJzb3IuaW5pdCgpfWNhdGNoKG8pe3RoaXMuaGFuZGxlRXJyb3Iobyl9fV9wcm9jZXNzQ2FycmlhZ2VSZXR1cm5zKHQpe3JldHVybiB0aGlzLl9wcmVzZXJ2ZUxpbmVFbmRpbmdzP3Q6dC5yZXBsYWNlKGVFZSwiXG4iKX10b2tlbml6ZSgpe2Zvcig7MCE9PXRoaXMuX2N1cnNvci5wZWVrKCk7KXtsZXQgdD10aGlzLl9jdXJzb3IuY2xvbmUoKTt0cnl7dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDYwKT90aGlzLl9hdHRlbXB0Q2hhckNvZGUoMzMpP3RoaXMuX2F0dGVtcHRDaGFyQ29kZSg5MSk/dGhpcy5fY29uc3VtZUNkYXRhKHQpOnRoaXMuX2F0dGVtcHRDaGFyQ29kZSg0NSk/dGhpcy5fY29uc3VtZUNvbW1lbnQodCk6dGhpcy5fY29uc3VtZURvY1R5cGUodCk6dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDQ3KT90aGlzLl9jb25zdW1lVGFnQ2xvc2UodCk6dGhpcy5fY29uc3VtZVRhZ09wZW4odCk6dGhpcy5fdG9rZW5pemVJY3UmJnRoaXMuX3Rva2VuaXplRXhwYW5zaW9uRm9ybSgpfHx0aGlzLl9jb25zdW1lV2l0aEludGVycG9sYXRpb24oNSw4LCgpPT50aGlzLl9pc1RleHRFbmQoKSwoKT0+dGhpcy5faXNUYWdTdGFydCgpKX1jYXRjaChlKXt0aGlzLmhhbmRsZUVycm9yKGUpfX10aGlzLl9iZWdpblRva2VuKDI0KSx0aGlzLl9lbmRUb2tlbihbXSl9X3Rva2VuaXplRXhwYW5zaW9uRm9ybSgpe2lmKHRoaXMuaXNFeHBhbnNpb25Gb3JtU3RhcnQoKSlyZXR1cm4gdGhpcy5fY29uc3VtZUV4cGFuc2lvbkZvcm1TdGFydCgpLCEwO2lmKHRoaXMuX2N1cnNvci5wZWVrKCkhPT1PdSYmdGhpcy5faXNJbkV4cGFuc2lvbkZvcm0oKSlyZXR1cm4gdGhpcy5fY29uc3VtZUV4cGFuc2lvbkNhc2VTdGFydCgpLCEwO2lmKHRoaXMuX2N1cnNvci5wZWVrKCk9PT1PdSl7aWYodGhpcy5faXNJbkV4cGFuc2lvbkNhc2UoKSlyZXR1cm4gdGhpcy5fY29uc3VtZUV4cGFuc2lvbkNhc2VFbmQoKSwhMDtpZih0aGlzLl9pc0luRXhwYW5zaW9uRm9ybSgpKXJldHVybiB0aGlzLl9jb25zdW1lRXhwYW5zaW9uRm9ybUVuZCgpLCEwfXJldHVybiExfV9iZWdpblRva2VuKHQsZT10aGlzLl9jdXJzb3IuY2xvbmUoKSl7dGhpcy5fY3VycmVudFRva2VuU3RhcnQ9ZSx0aGlzLl9jdXJyZW50VG9rZW5UeXBlPXR9X2VuZFRva2VuKHQsZSl7aWYobnVsbD09PXRoaXMuX2N1cnJlbnRUb2tlblN0YXJ0KXRocm93IG5ldyBoQygiUHJvZ3JhbW1pbmcgZXJyb3IgLSBhdHRlbXB0ZWQgdG8gZW5kIGEgdG9rZW4gd2hlbiB0aGVyZSB3YXMgbm8gc3RhcnQgdG8gdGhlIHRva2VuIix0aGlzLl9jdXJyZW50VG9rZW5UeXBlLHRoaXMuX2N1cnNvci5nZXRTcGFuKGUpKTtpZihudWxsPT09dGhpcy5fY3VycmVudFRva2VuVHlwZSl0aHJvdyBuZXcgaEMoIlByb2dyYW1taW5nIGVycm9yIC0gYXR0ZW1wdGVkIHRvIGVuZCBhIHRva2VuIHdoaWNoIGhhcyBubyB0b2tlbiB0eXBlIixudWxsLHRoaXMuX2N1cnNvci5nZXRTcGFuKHRoaXMuX2N1cnJlbnRUb2tlblN0YXJ0KSk7bGV0IGk9e3R5cGU6dGhpcy5fY3VycmVudFRva2VuVHlwZSxwYXJ0czp0LHNvdXJjZVNwYW46KGU/P3RoaXMuX2N1cnNvcikuZ2V0U3Bhbih0aGlzLl9jdXJyZW50VG9rZW5TdGFydCx0aGlzLl9sZWFkaW5nVHJpdmlhQ29kZVBvaW50cyl9O3JldHVybiB0aGlzLnRva2Vucy5wdXNoKGkpLHRoaXMuX2N1cnJlbnRUb2tlblN0YXJ0PW51bGwsdGhpcy5fY3VycmVudFRva2VuVHlwZT1udWxsLGl9X2NyZWF0ZUVycm9yKHQsZSl7dGhpcy5faXNJbkV4cGFuc2lvbkZvcm0oKSYmKHQrPScgKERvIHlvdSBoYXZlIGFuIHVuZXNjYXBlZCAieyIgaW4geW91ciB0ZW1wbGF0ZT8gVXNlICJ7eyBcJ3tcJyB9fSIpIHRvIGVzY2FwZSBpdC4pJyk7bGV0IGk9bmV3IGhDKHQsdGhpcy5fY3VycmVudFRva2VuVHlwZSxlKTtyZXR1cm4gdGhpcy5fY3VycmVudFRva2VuU3RhcnQ9bnVsbCx0aGlzLl9jdXJyZW50VG9rZW5UeXBlPW51bGwsbmV3IG1DKGkpfWhhbmRsZUVycm9yKHQpe2lmKHQgaW5zdGFuY2VvZiBZQyYmKHQ9dGhpcy5fY3JlYXRlRXJyb3IodC5tc2csdGhpcy5fY3Vyc29yLmdldFNwYW4odC5jdXJzb3IpKSksISh0IGluc3RhbmNlb2YgbUMpKXRocm93IHQ7dGhpcy5lcnJvcnMucHVzaCh0LmVycm9yKX1fYXR0ZW1wdENoYXJDb2RlKHQpe3JldHVybiB0aGlzLl9jdXJzb3IucGVlaygpPT09dCYmKHRoaXMuX2N1cnNvci5hZHZhbmNlKCksITApfV9hdHRlbXB0Q2hhckNvZGVDYXNlSW5zZW5zaXRpdmUodCl7cmV0dXJuISFmdW5jdGlvbihuLHQpe3JldHVybiBvUShuKT09PW9RKHQpfSh0aGlzLl9jdXJzb3IucGVlaygpLHQpJiYodGhpcy5fY3Vyc29yLmFkdmFuY2UoKSwhMCl9X3JlcXVpcmVDaGFyQ29kZSh0KXtsZXQgZT10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZighdGhpcy5fYXR0ZW1wdENoYXJDb2RlKHQpKXRocm93IHRoaXMuX2NyZWF0ZUVycm9yKHJDKHRoaXMuX2N1cnNvci5wZWVrKCkpLHRoaXMuX2N1cnNvci5nZXRTcGFuKGUpKX1fYXR0ZW1wdFN0cih0KXtsZXQgZT10Lmxlbmd0aDtpZih0aGlzLl9jdXJzb3IuY2hhcnNMZWZ0KCk8ZSlyZXR1cm4hMTtsZXQgaT10aGlzLl9jdXJzb3IuY2xvbmUoKTtmb3IobGV0IHI9MDtyPGU7cisrKWlmKCF0aGlzLl9hdHRlbXB0Q2hhckNvZGUodC5jaGFyQ29kZUF0KHIpKSlyZXR1cm4gdGhpcy5fY3Vyc29yPWksITE7cmV0dXJuITB9X2F0dGVtcHRTdHJDYXNlSW5zZW5zaXRpdmUodCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoIXRoaXMuX2F0dGVtcHRDaGFyQ29kZUNhc2VJbnNlbnNpdGl2ZSh0LmNoYXJDb2RlQXQoZSkpKXJldHVybiExO3JldHVybiEwfV9yZXF1aXJlU3RyKHQpe2xldCBlPXRoaXMuX2N1cnNvci5jbG9uZSgpO2lmKCF0aGlzLl9hdHRlbXB0U3RyKHQpKXRocm93IHRoaXMuX2NyZWF0ZUVycm9yKHJDKHRoaXMuX2N1cnNvci5wZWVrKCkpLHRoaXMuX2N1cnNvci5nZXRTcGFuKGUpKX1fYXR0ZW1wdENoYXJDb2RlVW50aWxGbih0KXtmb3IoOyF0KHRoaXMuX2N1cnNvci5wZWVrKCkpOyl0aGlzLl9jdXJzb3IuYWR2YW5jZSgpfV9yZXF1aXJlQ2hhckNvZGVVbnRpbEZuKHQsZSl7bGV0IGk9dGhpcy5fY3Vyc29yLmNsb25lKCk7aWYodGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbih0KSx0aGlzLl9jdXJzb3IuZGlmZihpKTxlKXRocm93IHRoaXMuX2NyZWF0ZUVycm9yKHJDKHRoaXMuX2N1cnNvci5wZWVrKCkpLHRoaXMuX2N1cnNvci5nZXRTcGFuKGkpKX1fYXR0ZW1wdFVudGlsQ2hhcih0KXtmb3IoO3RoaXMuX2N1cnNvci5wZWVrKCkhPT10Oyl0aGlzLl9jdXJzb3IuYWR2YW5jZSgpfV9yZWFkQ2hhcigpe2xldCB0PVN0cmluZy5mcm9tQ29kZVBvaW50KHRoaXMuX2N1cnNvci5wZWVrKCkpO3JldHVybiB0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLHR9X2NvbnN1bWVFbnRpdHkodCl7dGhpcy5fYmVnaW5Ub2tlbig5KTtsZXQgZT10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZih0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZSgzNSkpe2xldCBpPXRoaXMuX2F0dGVtcHRDaGFyQ29kZSgxMjApfHx0aGlzLl9hdHRlbXB0Q2hhckNvZGUoODgpLHI9dGhpcy5fY3Vyc29yLmNsb25lKCk7aWYodGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihpRWUpLDU5IT10aGlzLl9jdXJzb3IucGVlaygpKXRocm93IHRoaXMuX2N1cnNvci5hZHZhbmNlKCksdGhpcy5fY3JlYXRlRXJyb3IoZnVuY3Rpb24obix0KXtyZXR1cm5gVW5hYmxlIHRvIHBhcnNlIGVudGl0eSAiJHt0fSIgLSAke259IGNoYXJhY3RlciByZWZlcmVuY2UgZW50aXRpZXMgbXVzdCBlbmQgd2l0aCAiOyJgfShpP2ZDLkhFWDpmQy5ERUMsdGhpcy5fY3Vyc29yLmdldENoYXJzKGUpKSx0aGlzLl9jdXJzb3IuZ2V0U3BhbigpKTtsZXQgbz10aGlzLl9jdXJzb3IuZ2V0Q2hhcnMocik7dGhpcy5fY3Vyc29yLmFkdmFuY2UoKTt0cnl7bGV0IHM9cGFyc2VJbnQobyxpPzE2OjEwKTt0aGlzLl9lbmRUb2tlbihbU3RyaW5nLmZyb21DaGFyQ29kZShzKSx0aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoZSldKX1jYXRjaHt0aHJvdyB0aGlzLl9jcmVhdGVFcnJvcihpUSh0aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoZSkpLHRoaXMuX2N1cnNvci5nZXRTcGFuKCkpfX1lbHNle2xldCBpPXRoaXMuX2N1cnNvci5jbG9uZSgpO2lmKHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4ockVlKSw1OSE9dGhpcy5fY3Vyc29yLnBlZWsoKSl0aGlzLl9iZWdpblRva2VuKHQsZSksdGhpcy5fY3Vyc29yPWksdGhpcy5fZW5kVG9rZW4oWyImIl0pO2Vsc2V7bGV0IHI9dGhpcy5fY3Vyc29yLmdldENoYXJzKGkpO3RoaXMuX2N1cnNvci5hZHZhbmNlKCk7bGV0IG89Q0Rbcl07aWYoIW8pdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IoaVEociksdGhpcy5fY3Vyc29yLmdldFNwYW4oZSkpO3RoaXMuX2VuZFRva2VuKFtvLGAmJHtyfTtgXSl9fX1fY29uc3VtZVJhd1RleHQodCxlKXt0aGlzLl9iZWdpblRva2VuKHQ/Njo3KTtsZXQgaT1bXTtmb3IoOzspe2xldCByPXRoaXMuX2N1cnNvci5jbG9uZSgpLG89ZSgpO2lmKHRoaXMuX2N1cnNvcj1yLG8pYnJlYWs7dCYmMzg9PT10aGlzLl9jdXJzb3IucGVlaygpPyh0aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhpLmpvaW4oIiIpKV0pLGkubGVuZ3RoPTAsdGhpcy5fY29uc3VtZUVudGl0eSg2KSx0aGlzLl9iZWdpblRva2VuKDYpKTppLnB1c2godGhpcy5fcmVhZENoYXIoKSl9dGhpcy5fZW5kVG9rZW4oW3RoaXMuX3Byb2Nlc3NDYXJyaWFnZVJldHVybnMoaS5qb2luKCIiKSldKX1fY29uc3VtZUNvbW1lbnQodCl7dGhpcy5fYmVnaW5Ub2tlbigxMCx0KSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUoNDUpLHRoaXMuX2VuZFRva2VuKFtdKSx0aGlzLl9jb25zdW1lUmF3VGV4dCghMSwoKT0+dGhpcy5fYXR0ZW1wdFN0cigiLS1ceDNlIikpLHRoaXMuX2JlZ2luVG9rZW4oMTEpLHRoaXMuX3JlcXVpcmVTdHIoIi0tXHgzZSIpLHRoaXMuX2VuZFRva2VuKFtdKX1fY29uc3VtZUNkYXRhKHQpe3RoaXMuX2JlZ2luVG9rZW4oMTIsdCksdGhpcy5fcmVxdWlyZVN0cigiQ0RBVEFbIiksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2NvbnN1bWVSYXdUZXh0KCExLCgpPT50aGlzLl9hdHRlbXB0U3RyKCJdXT4iKSksdGhpcy5fYmVnaW5Ub2tlbigxMyksdGhpcy5fcmVxdWlyZVN0cigiXV0+IiksdGhpcy5fZW5kVG9rZW4oW10pfV9jb25zdW1lRG9jVHlwZSh0KXt0aGlzLl9iZWdpblRva2VuKDE4LHQpO2xldCBlPXRoaXMuX2N1cnNvci5jbG9uZSgpO3RoaXMuX2F0dGVtcHRVbnRpbENoYXIoNjIpO2xldCBpPXRoaXMuX2N1cnNvci5nZXRDaGFycyhlKTt0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLHRoaXMuX2VuZFRva2VuKFtpXSl9X2NvbnN1bWVQcmVmaXhBbmROYW1lKCl7bGV0IHQ9dGhpcy5fY3Vyc29yLmNsb25lKCksZT0iIjtmb3IoOzU4IT09dGhpcy5fY3Vyc29yLnBlZWsoKSYmISgoKG49dGhpcy5fY3Vyc29yLnBlZWsoKSk8OTd8fDEyMjxuKSYmKG48NjV8fDkwPG4pJiYobjw0OHx8bj41NykpOyl0aGlzLl9jdXJzb3IuYWR2YW5jZSgpO3ZhciBuO2xldCBpO3JldHVybiA1OD09PXRoaXMuX2N1cnNvci5wZWVrKCk/KGU9dGhpcy5fY3Vyc29yLmdldENoYXJzKHQpLHRoaXMuX2N1cnNvci5hZHZhbmNlKCksaT10aGlzLl9jdXJzb3IuY2xvbmUoKSk6aT10LHRoaXMuX3JlcXVpcmVDaGFyQ29kZVVudGlsRm4oclEsIiI9PT1lPzA6MSksW2UsdGhpcy5fY3Vyc29yLmdldENoYXJzKGkpXX1fY29uc3VtZVRhZ09wZW4odCl7bGV0IGUsaSxyO3RyeXtpZighS1YodGhpcy5fY3Vyc29yLnBlZWsoKSkpdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IockModGhpcy5fY3Vyc29yLnBlZWsoKSksdGhpcy5fY3Vyc29yLmdldFNwYW4odCkpO2ZvcihyPXRoaXMuX2NvbnN1bWVUYWdPcGVuU3RhcnQodCksaT1yLnBhcnRzWzBdLGU9ci5wYXJ0c1sxXSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKTs0NyE9PXRoaXMuX2N1cnNvci5wZWVrKCkmJjYyIT09dGhpcy5fY3Vyc29yLnBlZWsoKSYmNjAhPT10aGlzLl9jdXJzb3IucGVlaygpJiYwIT09dGhpcy5fY3Vyc29yLnBlZWsoKTspdGhpcy5fY29uc3VtZUF0dHJpYnV0ZU5hbWUoKSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKSx0aGlzLl9hdHRlbXB0Q2hhckNvZGUoNjEpJiYodGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihybCksdGhpcy5fY29uc3VtZUF0dHJpYnV0ZVZhbHVlKCkpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4ocmwpO3RoaXMuX2NvbnN1bWVUYWdPcGVuRW5kKCl9Y2F0Y2gocyl7aWYocyBpbnN0YW5jZW9mIG1DKXJldHVybiB2b2lkKHI/ci50eXBlPTQ6KHRoaXMuX2JlZ2luVG9rZW4oNSx0KSx0aGlzLl9lbmRUb2tlbihbIjwiXSkpKTt0aHJvdyBzfWxldCBvPXRoaXMuX2dldFRhZ0RlZmluaXRpb24oZSkuZ2V0Q29udGVudFR5cGUoaSk7bz09PVdsLlJBV19URVhUP3RoaXMuX2NvbnN1bWVSYXdUZXh0V2l0aFRhZ0Nsb3NlKGksZSwhMSk6bz09PVdsLkVTQ0FQQUJMRV9SQVdfVEVYVCYmdGhpcy5fY29uc3VtZVJhd1RleHRXaXRoVGFnQ2xvc2UoaSxlLCEwKX1fY29uc3VtZVJhd1RleHRXaXRoVGFnQ2xvc2UodCxlLGkpe3RoaXMuX2NvbnN1bWVSYXdUZXh0KGksKCk9PiEhKHRoaXMuX2F0dGVtcHRDaGFyQ29kZSg2MCkmJnRoaXMuX2F0dGVtcHRDaGFyQ29kZSg0NykmJih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKSx0aGlzLl9hdHRlbXB0U3RyQ2FzZUluc2Vuc2l0aXZlKGUpKSkmJih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKSx0aGlzLl9hdHRlbXB0Q2hhckNvZGUoNjIpKSksdGhpcy5fYmVnaW5Ub2tlbigzKSx0aGlzLl9yZXF1aXJlQ2hhckNvZGVVbnRpbEZuKHI9PjYyPT09ciwzKSx0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLHRoaXMuX2VuZFRva2VuKFt0LGVdKX1fY29uc3VtZVRhZ09wZW5TdGFydCh0KXt0aGlzLl9iZWdpblRva2VuKDAsdCk7bGV0IGU9dGhpcy5fY29uc3VtZVByZWZpeEFuZE5hbWUoKTtyZXR1cm4gdGhpcy5fZW5kVG9rZW4oZSl9X2NvbnN1bWVBdHRyaWJ1dGVOYW1lKCl7bGV0IHQ9dGhpcy5fY3Vyc29yLnBlZWsoKTtpZigzOT09PXR8fDM0PT09dCl0aHJvdyB0aGlzLl9jcmVhdGVFcnJvcihyQyh0KSx0aGlzLl9jdXJzb3IuZ2V0U3BhbigpKTt0aGlzLl9iZWdpblRva2VuKDE0KTtsZXQgZT10aGlzLl9jb25zdW1lUHJlZml4QW5kTmFtZSgpO3RoaXMuX2VuZFRva2VuKGUpfV9jb25zdW1lQXR0cmlidXRlVmFsdWUoKXtpZigzOT09PXRoaXMuX2N1cnNvci5wZWVrKCl8fDM0PT09dGhpcy5fY3Vyc29yLnBlZWsoKSl7bGV0IGU9dGhpcy5fY3Vyc29yLnBlZWsoKTt0aGlzLl9jb25zdW1lUXVvdGUoZSk7bGV0IGk9KCk9PnRoaXMuX2N1cnNvci5wZWVrKCk9PT1lO3RoaXMuX2NvbnN1bWVXaXRoSW50ZXJwb2xhdGlvbigxNiwxNyxpLGkpLHRoaXMuX2NvbnN1bWVRdW90ZShlKX1lbHNle2xldCBlPSgpPT5yUSh0aGlzLl9jdXJzb3IucGVlaygpKTt0aGlzLl9jb25zdW1lV2l0aEludGVycG9sYXRpb24oMTYsMTcsZSxlKX19X2NvbnN1bWVRdW90ZSh0KXt0aGlzLl9iZWdpblRva2VuKDE1KSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUodCksdGhpcy5fZW5kVG9rZW4oW1N0cmluZy5mcm9tQ29kZVBvaW50KHQpXSl9X2NvbnN1bWVUYWdPcGVuRW5kKCl7bGV0IHQ9dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDQ3KT8yOjE7dGhpcy5fYmVnaW5Ub2tlbih0KSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUoNjIpLHRoaXMuX2VuZFRva2VuKFtdKX1fY29uc3VtZVRhZ0Nsb3NlKHQpe3RoaXMuX2JlZ2luVG9rZW4oMyx0KSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKTtsZXQgZT10aGlzLl9jb25zdW1lUHJlZml4QW5kTmFtZSgpO3RoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4ocmwpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSg2MiksdGhpcy5fZW5kVG9rZW4oZSl9X2NvbnN1bWVFeHBhbnNpb25Gb3JtU3RhcnQoKXt0aGlzLl9iZWdpblRva2VuKDE5KSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUodGgpLHRoaXMuX2VuZFRva2VuKFtdKSx0aGlzLl9leHBhbnNpb25DYXNlU3RhY2sucHVzaCgxOSksdGhpcy5fYmVnaW5Ub2tlbig3KTtsZXQgdD10aGlzLl9yZWFkVW50aWwoNDQpLGU9dGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyh0KTtpZih0aGlzLl9pMThuTm9ybWFsaXplTGluZUVuZGluZ3NJbklDVXMpdGhpcy5fZW5kVG9rZW4oW2VdKTtlbHNle2xldCByPXRoaXMuX2VuZFRva2VuKFt0XSk7ZSE9PXQmJnRoaXMubm9uTm9ybWFsaXplZEljdUV4cHJlc3Npb25zLnB1c2gocil9dGhpcy5fcmVxdWlyZUNoYXJDb2RlKDQ0KSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKSx0aGlzLl9iZWdpblRva2VuKDcpO2xldCBpPXRoaXMuX3JlYWRVbnRpbCg0NCk7dGhpcy5fZW5kVG9rZW4oW2ldKSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUoNDQpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4ocmwpfV9jb25zdW1lRXhwYW5zaW9uQ2FzZVN0YXJ0KCl7dGhpcy5fYmVnaW5Ub2tlbigyMCk7bGV0IHQ9dGhpcy5fcmVhZFVudGlsKHRoKS50cmltKCk7dGhpcy5fZW5kVG9rZW4oW3RdKSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKSx0aGlzLl9iZWdpblRva2VuKDIxKSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUodGgpLHRoaXMuX2VuZFRva2VuKFtdKSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKSx0aGlzLl9leHBhbnNpb25DYXNlU3RhY2sucHVzaCgyMSl9X2NvbnN1bWVFeHBhbnNpb25DYXNlRW5kKCl7dGhpcy5fYmVnaW5Ub2tlbigyMiksdGhpcy5fcmVxdWlyZUNoYXJDb2RlKE91KSx0aGlzLl9lbmRUb2tlbihbXSksdGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihybCksdGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrLnBvcCgpfV9jb25zdW1lRXhwYW5zaW9uRm9ybUVuZCgpe3RoaXMuX2JlZ2luVG9rZW4oMjMpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZShPdSksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5wb3AoKX1fY29uc3VtZVdpdGhJbnRlcnBvbGF0aW9uKHQsZSxpLHIpe3RoaXMuX2JlZ2luVG9rZW4odCk7bGV0IG89W107Zm9yKDshaSgpOyl7bGV0IHM9dGhpcy5fY3Vyc29yLmNsb25lKCk7dGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZyYmdGhpcy5fYXR0ZW1wdFN0cih0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnLnN0YXJ0KT8odGhpcy5fZW5kVG9rZW4oW3RoaXMuX3Byb2Nlc3NDYXJyaWFnZVJldHVybnMoby5qb2luKCIiKSldLHMpLG8ubGVuZ3RoPTAsdGhpcy5fY29uc3VtZUludGVycG9sYXRpb24oZSxzLHIpLHRoaXMuX2JlZ2luVG9rZW4odCkpOjM4PT09dGhpcy5fY3Vyc29yLnBlZWsoKT8odGhpcy5fZW5kVG9rZW4oW3RoaXMuX3Byb2Nlc3NDYXJyaWFnZVJldHVybnMoby5qb2luKCIiKSldKSxvLmxlbmd0aD0wLHRoaXMuX2NvbnN1bWVFbnRpdHkodCksdGhpcy5fYmVnaW5Ub2tlbih0KSk6by5wdXNoKHRoaXMuX3JlYWRDaGFyKCkpfXRoaXMuX2luSW50ZXJwb2xhdGlvbj0hMSx0aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhvLmpvaW4oIiIpKV0pfV9jb25zdW1lSW50ZXJwb2xhdGlvbih0LGUsaSl7bGV0IHI9W107dGhpcy5fYmVnaW5Ub2tlbih0LGUpLHIucHVzaCh0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnLnN0YXJ0KTtsZXQgbz10aGlzLl9jdXJzb3IuY2xvbmUoKSxzPW51bGwsYT0hMTtmb3IoOzAhPT10aGlzLl9jdXJzb3IucGVlaygpJiYobnVsbD09PWl8fCFpKCkpOyl7bGV0IGw9dGhpcy5fY3Vyc29yLmNsb25lKCk7aWYodGhpcy5faXNUYWdTdGFydCgpKXJldHVybiB0aGlzLl9jdXJzb3I9bCxyLnB1c2godGhpcy5fZ2V0UHJvY2Vzc2VkQ2hhcnMobyxsKSksdm9pZCB0aGlzLl9lbmRUb2tlbihyKTtpZihudWxsPT09cyl7aWYodGhpcy5fYXR0ZW1wdFN0cih0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnLmVuZCkpcmV0dXJuIHIucHVzaCh0aGlzLl9nZXRQcm9jZXNzZWRDaGFycyhvLGwpKSxyLnB1c2godGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZy5lbmQpLHZvaWQgdGhpcy5fZW5kVG9rZW4ocik7dGhpcy5fYXR0ZW1wdFN0cigiLy8iKSYmKGE9ITApfWxldCBjPXRoaXMuX2N1cnNvci5wZWVrKCk7dGhpcy5fY3Vyc29yLmFkdmFuY2UoKSw5Mj09PWM/dGhpcy5fY3Vyc29yLmFkdmFuY2UoKTpjPT09cz9zPW51bGw6IWEmJm51bGw9PT1zJiZXQihjKSYmKHM9Yyl9ci5wdXNoKHRoaXMuX2dldFByb2Nlc3NlZENoYXJzKG8sdGhpcy5fY3Vyc29yKSksdGhpcy5fZW5kVG9rZW4ocil9X2dldFByb2Nlc3NlZENoYXJzKHQsZSl7cmV0dXJuIHRoaXMuX3Byb2Nlc3NDYXJyaWFnZVJldHVybnMoZS5nZXRDaGFycyh0KSl9X2lzVGV4dEVuZCgpe3JldHVybiEhKHRoaXMuX2lzVGFnU3RhcnQoKXx8MD09PXRoaXMuX2N1cnNvci5wZWVrKCl8fHRoaXMuX3Rva2VuaXplSWN1JiYhdGhpcy5faW5JbnRlcnBvbGF0aW9uJiYodGhpcy5pc0V4cGFuc2lvbkZvcm1TdGFydCgpfHx0aGlzLl9jdXJzb3IucGVlaygpPT09T3UmJnRoaXMuX2lzSW5FeHBhbnNpb25DYXNlKCkpKX1faXNUYWdTdGFydCgpe2lmKDYwPT09dGhpcy5fY3Vyc29yLnBlZWsoKSl7bGV0IHQ9dGhpcy5fY3Vyc29yLmNsb25lKCk7dC5hZHZhbmNlKCk7bGV0IGU9dC5wZWVrKCk7aWYoOTc8PWUmJmU8PTEyMnx8NjU8PWUmJmU8PTkwfHw0Nz09PWV8fDMzPT09ZSlyZXR1cm4hMH1yZXR1cm4hMX1fcmVhZFVudGlsKHQpe2xldCBlPXRoaXMuX2N1cnNvci5jbG9uZSgpO3JldHVybiB0aGlzLl9hdHRlbXB0VW50aWxDaGFyKHQpLHRoaXMuX2N1cnNvci5nZXRDaGFycyhlKX1faXNJbkV4cGFuc2lvbkNhc2UoKXtyZXR1cm4gdGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrLmxlbmd0aD4wJiYyMT09PXRoaXMuX2V4cGFuc2lvbkNhc2VTdGFja1t0aGlzLl9leHBhbnNpb25DYXNlU3RhY2subGVuZ3RoLTFdfV9pc0luRXhwYW5zaW9uRm9ybSgpe3JldHVybiB0aGlzLl9leHBhbnNpb25DYXNlU3RhY2subGVuZ3RoPjAmJjE5PT09dGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrW3RoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5sZW5ndGgtMV19aXNFeHBhbnNpb25Gb3JtU3RhcnQoKXtpZih0aGlzLl9jdXJzb3IucGVlaygpIT09dGgpcmV0dXJuITE7aWYodGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZyl7bGV0IHQ9dGhpcy5fY3Vyc29yLmNsb25lKCksZT10aGlzLl9hdHRlbXB0U3RyKHRoaXMuX2ludGVycG9sYXRpb25Db25maWcuc3RhcnQpO3JldHVybiB0aGlzLl9jdXJzb3I9dCwhZX1yZXR1cm4hMH19KG5ldyBwRChuLHQpLGUsaSk7cmV0dXJuIHIudG9rZW5pemUoKSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudG9rZW5zPXQsdGhpcy5lcnJvcnM9ZSx0aGlzLm5vbk5vcm1hbGl6ZWRJY3VFeHByZXNzaW9ucz1pfX0oZnVuY3Rpb24obil7bGV0IGUsdD1bXTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IHI9bltpXTtlJiY1PT09ZS50eXBlJiY1PT09ci50eXBlfHxlJiYxNj09PWUudHlwZSYmMTY9PT1yLnR5cGU/KGUucGFydHNbMF0rPXIucGFydHNbMF0sZS5zb3VyY2VTcGFuLmVuZD1yLnNvdXJjZVNwYW4uZW5kKTooZT1yLHQucHVzaChlKSl9cmV0dXJuIHR9KHIudG9rZW5zKSxyLmVycm9ycyxyLm5vbk5vcm1hbGl6ZWRJY3VFeHByZXNzaW9ucyl9KHQsZSx0aGlzLmdldFRhZ0RlZmluaXRpb24saSksbz1uZXcgWEMoci50b2tlbnMsdGhpcy5nZXRUYWdEZWZpbml0aW9uKTtyZXR1cm4gby5idWlsZCgpLG5ldyBNRChvLnJvb3ROb2RlcyxyLmVycm9ycy5jb25jYXQoby5lcnJvcnMpKX19LFhDPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50b2tlbnM9dCx0aGlzLmdldFRhZ0RlZmluaXRpb249ZSx0aGlzLl9pbmRleD0tMSx0aGlzLl9lbGVtZW50U3RhY2s9W10sdGhpcy5yb290Tm9kZXM9W10sdGhpcy5lcnJvcnM9W10sdGhpcy5fYWR2YW5jZSgpfWJ1aWxkKCl7Zm9yKDsyNCE9PXRoaXMuX3BlZWsudHlwZTspMD09PXRoaXMuX3BlZWsudHlwZXx8ND09PXRoaXMuX3BlZWsudHlwZT90aGlzLl9jb25zdW1lU3RhcnRUYWcodGhpcy5fYWR2YW5jZSgpKTozPT09dGhpcy5fcGVlay50eXBlP3RoaXMuX2NvbnN1bWVFbmRUYWcodGhpcy5fYWR2YW5jZSgpKToxMj09PXRoaXMuX3BlZWsudHlwZT8odGhpcy5fY2xvc2VWb2lkRWxlbWVudCgpLHRoaXMuX2NvbnN1bWVDZGF0YSh0aGlzLl9hZHZhbmNlKCkpKToxMD09PXRoaXMuX3BlZWsudHlwZT8odGhpcy5fY2xvc2VWb2lkRWxlbWVudCgpLHRoaXMuX2NvbnN1bWVDb21tZW50KHRoaXMuX2FkdmFuY2UoKSkpOjU9PT10aGlzLl9wZWVrLnR5cGV8fDc9PT10aGlzLl9wZWVrLnR5cGV8fDY9PT10aGlzLl9wZWVrLnR5cGU/KHRoaXMuX2Nsb3NlVm9pZEVsZW1lbnQoKSx0aGlzLl9jb25zdW1lVGV4dCh0aGlzLl9hZHZhbmNlKCkpKToxOT09PXRoaXMuX3BlZWsudHlwZT90aGlzLl9jb25zdW1lRXhwYW5zaW9uKHRoaXMuX2FkdmFuY2UoKSk6dGhpcy5fYWR2YW5jZSgpfV9hZHZhbmNlKCl7bGV0IHQ9dGhpcy5fcGVlaztyZXR1cm4gdGhpcy5faW5kZXg8dGhpcy50b2tlbnMubGVuZ3RoLTEmJnRoaXMuX2luZGV4KyssdGhpcy5fcGVlaz10aGlzLnRva2Vuc1t0aGlzLl9pbmRleF0sdH1fYWR2YW5jZUlmKHQpe3JldHVybiB0aGlzLl9wZWVrLnR5cGU9PT10P3RoaXMuX2FkdmFuY2UoKTpudWxsfV9jb25zdW1lQ2RhdGEodCl7dGhpcy5fY29uc3VtZVRleHQodGhpcy5fYWR2YW5jZSgpKSx0aGlzLl9hZHZhbmNlSWYoMTMpfV9jb25zdW1lQ29tbWVudCh0KXtsZXQgZT10aGlzLl9hZHZhbmNlSWYoNyk7dGhpcy5fYWR2YW5jZUlmKDExKTtsZXQgaT1udWxsIT1lP2UucGFydHNbMF0udHJpbSgpOm51bGw7dGhpcy5fYWRkVG9QYXJlbnQobmV3IHhEKGksdC5zb3VyY2VTcGFuKSl9X2NvbnN1bWVFeHBhbnNpb24odCl7bGV0IGU9dGhpcy5fYWR2YW5jZSgpLGk9dGhpcy5fYWR2YW5jZSgpLHI9W107Zm9yKDsyMD09PXRoaXMuX3BlZWsudHlwZTspe2xldCBzPXRoaXMuX3BhcnNlRXhwYW5zaW9uQ2FzZSgpO2lmKCFzKXJldHVybjtyLnB1c2gocyl9aWYoMjMhPT10aGlzLl9wZWVrLnR5cGUpcmV0dXJuIHZvaWQgdGhpcy5lcnJvcnMucHVzaChvbC5jcmVhdGUobnVsbCx0aGlzLl9wZWVrLnNvdXJjZVNwYW4sIkludmFsaWQgSUNVIG1lc3NhZ2UuIE1pc3NpbmcgJ30nLiIpKTtsZXQgbz1uZXcgR28odC5zb3VyY2VTcGFuLnN0YXJ0LHRoaXMuX3BlZWsuc291cmNlU3Bhbi5lbmQsdC5zb3VyY2VTcGFuLmZ1bGxTdGFydCk7dGhpcy5fYWRkVG9QYXJlbnQobmV3IE5fKGUucGFydHNbMF0saS5wYXJ0c1swXSxyLG8sZS5zb3VyY2VTcGFuKSksdGhpcy5fYWR2YW5jZSgpfV9wYXJzZUV4cGFuc2lvbkNhc2UoKXtsZXQgdD10aGlzLl9hZHZhbmNlKCk7aWYoMjEhPT10aGlzLl9wZWVrLnR5cGUpcmV0dXJuIHRoaXMuZXJyb3JzLnB1c2gob2wuY3JlYXRlKG51bGwsdGhpcy5fcGVlay5zb3VyY2VTcGFuLCJJbnZhbGlkIElDVSBtZXNzYWdlLiBNaXNzaW5nICd7Jy4iKSksbnVsbDtsZXQgZT10aGlzLl9hZHZhbmNlKCksaT10aGlzLl9jb2xsZWN0RXhwYW5zaW9uRXhwVG9rZW5zKGUpO2lmKCFpKXJldHVybiBudWxsO2xldCByPXRoaXMuX2FkdmFuY2UoKTtpLnB1c2goe3R5cGU6MjQscGFydHM6W10sc291cmNlU3BhbjpyLnNvdXJjZVNwYW59KTtsZXQgbz1uZXcgWEMoaSx0aGlzLmdldFRhZ0RlZmluaXRpb24pO2lmKG8uYnVpbGQoKSxvLmVycm9ycy5sZW5ndGg+MClyZXR1cm4gdGhpcy5lcnJvcnM9dGhpcy5lcnJvcnMuY29uY2F0KG8uZXJyb3JzKSxudWxsO2xldCBzPW5ldyBHbyh0LnNvdXJjZVNwYW4uc3RhcnQsci5zb3VyY2VTcGFuLmVuZCx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0KSxhPW5ldyBHbyhlLnNvdXJjZVNwYW4uc3RhcnQsci5zb3VyY2VTcGFuLmVuZCxlLnNvdXJjZVNwYW4uZnVsbFN0YXJ0KTtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy52YWx1ZT10LHRoaXMuZXhwcmVzc2lvbj1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMudmFsdWVTb3VyY2VTcGFuPXIsdGhpcy5leHBTb3VyY2VTcGFuPW99dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdEV4cGFuc2lvbkNhc2UodGhpcyxlKX19KHQucGFydHNbMF0sby5yb290Tm9kZXMscyx0LnNvdXJjZVNwYW4sYSl9X2NvbGxlY3RFeHBhbnNpb25FeHBUb2tlbnModCl7bGV0IGU9W10saT1bMjFdO2Zvcig7Oyl7aWYoKDE5PT09dGhpcy5fcGVlay50eXBlfHwyMT09PXRoaXMuX3BlZWsudHlwZSkmJmkucHVzaCh0aGlzLl9wZWVrLnR5cGUpLDIyPT09dGhpcy5fcGVlay50eXBlKXtpZighc1EoaSwyMSkpcmV0dXJuIHRoaXMuZXJyb3JzLnB1c2gob2wuY3JlYXRlKG51bGwsdC5zb3VyY2VTcGFuLCJJbnZhbGlkIElDVSBtZXNzYWdlLiBNaXNzaW5nICd9Jy4iKSksbnVsbDtpZihpLnBvcCgpLDA9PT1pLmxlbmd0aClyZXR1cm4gZX1pZigyMz09PXRoaXMuX3BlZWsudHlwZSl7aWYoIXNRKGksMTkpKXJldHVybiB0aGlzLmVycm9ycy5wdXNoKG9sLmNyZWF0ZShudWxsLHQuc291cmNlU3BhbiwiSW52YWxpZCBJQ1UgbWVzc2FnZS4gTWlzc2luZyAnfScuIikpLG51bGw7aS5wb3AoKX1pZigyND09PXRoaXMuX3BlZWsudHlwZSlyZXR1cm4gdGhpcy5lcnJvcnMucHVzaChvbC5jcmVhdGUobnVsbCx0LnNvdXJjZVNwYW4sIkludmFsaWQgSUNVIG1lc3NhZ2UuIE1pc3NpbmcgJ30nLiIpKSxudWxsO2UucHVzaCh0aGlzLl9hZHZhbmNlKCkpfX1fY29uc3VtZVRleHQodCl7bGV0IGU9W3RdLGk9dC5zb3VyY2VTcGFuLHI9dC5wYXJ0c1swXTtpZihyLmxlbmd0aD4wJiYiXG4iPT09clswXSl7bGV0IG89dGhpcy5fZ2V0UGFyZW50RWxlbWVudCgpO251bGwhPW8mJjA9PT1vLmNoaWxkcmVuLmxlbmd0aCYmdGhpcy5nZXRUYWdEZWZpbml0aW9uKG8ubmFtZSkuaWdub3JlRmlyc3RMZiYmKHI9ci5zdWJzdHJpbmcoMSksZVswXT17dHlwZTp0LnR5cGUsc291cmNlU3Bhbjp0LnNvdXJjZVNwYW4scGFydHM6W3JdfSl9Zm9yKDs4PT09dGhpcy5fcGVlay50eXBlfHw1PT09dGhpcy5fcGVlay50eXBlfHw5PT09dGhpcy5fcGVlay50eXBlOyl0PXRoaXMuX2FkdmFuY2UoKSxlLnB1c2godCkscis9OD09PXQudHlwZT90LnBhcnRzLmpvaW4oIiIpLnJlcGxhY2UoLyYoW147XSspOy9nLGFRKTo5PT09dC50eXBlP3QucGFydHNbMF06dC5wYXJ0cy5qb2luKCIiKTtyLmxlbmd0aD4wJiZ0aGlzLl9hZGRUb1BhcmVudChuZXcgRl8ocixuZXcgR28oaS5zdGFydCx0LnNvdXJjZVNwYW4uZW5kLGkuZnVsbFN0YXJ0LGkuZGV0YWlscyksZSkpfV9jbG9zZVZvaWRFbGVtZW50KCl7bGV0IHQ9dGhpcy5fZ2V0UGFyZW50RWxlbWVudCgpO3QmJnRoaXMuZ2V0VGFnRGVmaW5pdGlvbih0Lm5hbWUpLmlzVm9pZCYmdGhpcy5fZWxlbWVudFN0YWNrLnBvcCgpfV9jb25zdW1lU3RhcnRUYWcodCl7bGV0W2UsaV09dC5wYXJ0cyxyPVtdO2Zvcig7MTQ9PT10aGlzLl9wZWVrLnR5cGU7KXIucHVzaCh0aGlzLl9jb25zdW1lQXR0cih0aGlzLl9hZHZhbmNlKCkpKTtsZXQgbz10aGlzLl9nZXRFbGVtZW50RnVsbE5hbWUoZSxpLHRoaXMuX2dldFBhcmVudEVsZW1lbnQoKSkscz0hMTtpZigyPT09dGhpcy5fcGVlay50eXBlKXt0aGlzLl9hZHZhbmNlKCkscz0hMDtsZXQgZD10aGlzLmdldFRhZ0RlZmluaXRpb24obyk7ZC5jYW5TZWxmQ2xvc2V8fG51bGwhPT1kWChvKXx8ZC5pc1ZvaWR8fHRoaXMuZXJyb3JzLnB1c2gob2wuY3JlYXRlKG8sdC5zb3VyY2VTcGFuLGBPbmx5IHZvaWQgYW5kIGZvcmVpZ24gZWxlbWVudHMgY2FuIGJlIHNlbGYgY2xvc2VkICIke3QucGFydHNbMV19ImApKX1lbHNlIDE9PT10aGlzLl9wZWVrLnR5cGUmJih0aGlzLl9hZHZhbmNlKCkscz0hMSk7bGV0IGE9dGhpcy5fcGVlay5zb3VyY2VTcGFuLmZ1bGxTdGFydCxsPW5ldyBHbyh0LnNvdXJjZVNwYW4uc3RhcnQsYSx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0KSxjPW5ldyBHbyh0LnNvdXJjZVNwYW4uc3RhcnQsYSx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0KSx1PW5ldyBxQyhvLHIsW10sbCxjLHZvaWQgMCk7dGhpcy5fcHVzaEVsZW1lbnQodSkscz90aGlzLl9wb3BFbGVtZW50KG8sbCk6ND09PXQudHlwZSYmKHRoaXMuX3BvcEVsZW1lbnQobyxudWxsKSx0aGlzLmVycm9ycy5wdXNoKG9sLmNyZWF0ZShvLGwsYE9wZW5pbmcgdGFnICIke299IiBub3QgdGVybWluYXRlZC5gKSkpfV9wdXNoRWxlbWVudCh0KXtsZXQgZT10aGlzLl9nZXRQYXJlbnRFbGVtZW50KCk7ZSYmdGhpcy5nZXRUYWdEZWZpbml0aW9uKGUubmFtZSkuaXNDbG9zZWRCeUNoaWxkKHQubmFtZSkmJnRoaXMuX2VsZW1lbnRTdGFjay5wb3AoKSx0aGlzLl9hZGRUb1BhcmVudCh0KSx0aGlzLl9lbGVtZW50U3RhY2sucHVzaCh0KX1fY29uc3VtZUVuZFRhZyh0KXtsZXQgZT10aGlzLl9nZXRFbGVtZW50RnVsbE5hbWUodC5wYXJ0c1swXSx0LnBhcnRzWzFdLHRoaXMuX2dldFBhcmVudEVsZW1lbnQoKSk7dGhpcy5nZXRUYWdEZWZpbml0aW9uKGUpLmlzVm9pZD90aGlzLmVycm9ycy5wdXNoKG9sLmNyZWF0ZShlLHQuc291cmNlU3BhbixgVm9pZCBlbGVtZW50cyBkbyBub3QgaGF2ZSBlbmQgdGFncyAiJHt0LnBhcnRzWzFdfSJgKSk6dGhpcy5fcG9wRWxlbWVudChlLHQuc291cmNlU3Bhbil8fHRoaXMuZXJyb3JzLnB1c2gob2wuY3JlYXRlKGUsdC5zb3VyY2VTcGFuLGBVbmV4cGVjdGVkIGNsb3NpbmcgdGFnICIke2V9Ii4gSXQgbWF5IGhhcHBlbiB3aGVuIHRoZSB0YWcgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQgYnkgYW5vdGhlciB0YWcuIEZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9zeW50YXguaHRtbCNjbG9zaW5nLWVsZW1lbnRzLXRoYXQtaGF2ZS1pbXBsaWVkLWVuZC10YWdzYCkpfV9wb3BFbGVtZW50KHQsZSl7bGV0IGk9ITE7Zm9yKGxldCByPXRoaXMuX2VsZW1lbnRTdGFjay5sZW5ndGgtMTtyPj0wO3ItLSl7bGV0IG89dGhpcy5fZWxlbWVudFN0YWNrW3JdO2lmKG8ubmFtZT09PXQpcmV0dXJuIG8uZW5kU291cmNlU3Bhbj1lLG8uc291cmNlU3Bhbi5lbmQ9bnVsbCE9PWU/ZS5lbmQ6by5zb3VyY2VTcGFuLmVuZCx0aGlzLl9lbGVtZW50U3RhY2suc3BsaWNlKHIsdGhpcy5fZWxlbWVudFN0YWNrLmxlbmd0aC1yKSwhaTt0aGlzLmdldFRhZ0RlZmluaXRpb24oby5uYW1lKS5jbG9zZWRCeVBhcmVudHx8KGk9ITApfXJldHVybiExfV9jb25zdW1lQXR0cih0KXtsZXQgZT13Qih0LnBhcnRzWzBdLHQucGFydHNbMV0pLGk9dC5zb3VyY2VTcGFuLmVuZDsxNT09PXRoaXMuX3BlZWsudHlwZSYmdGhpcy5fYWR2YW5jZSgpO2xldCBzLGEscj0iIixvPVtdO2lmKDE2PT09dGhpcy5fcGVlay50eXBlKWZvcihzPXRoaXMuX3BlZWsuc291cmNlU3BhbixhPXRoaXMuX3BlZWsuc291cmNlU3Bhbi5lbmQ7MTY9PT10aGlzLl9wZWVrLnR5cGV8fDE3PT09dGhpcy5fcGVlay50eXBlfHw5PT09dGhpcy5fcGVlay50eXBlOyl7bGV0IHU9dGhpcy5fYWR2YW5jZSgpO28ucHVzaCh1KSxyKz0xNz09PXUudHlwZT91LnBhcnRzLmpvaW4oIiIpLnJlcGxhY2UoLyYoW147XSspOy9nLGFRKTo5PT09dS50eXBlP3UucGFydHNbMF06dS5wYXJ0cy5qb2luKCIiKSxhPWk9dS5zb3VyY2VTcGFuLmVuZH0xNT09PXRoaXMuX3BlZWsudHlwZSYmKGk9dGhpcy5fYWR2YW5jZSgpLnNvdXJjZVNwYW4uZW5kKTtsZXQgYz1zJiZhJiZuZXcgR28ocy5zdGFydCxhLHMuZnVsbFN0YXJ0KTtyZXR1cm4gbmV3IGhWKGUscixuZXcgR28odC5zb3VyY2VTcGFuLnN0YXJ0LGksdC5zb3VyY2VTcGFuLmZ1bGxTdGFydCksdC5zb3VyY2VTcGFuLGMsby5sZW5ndGg+MD9vOnZvaWQgMCx2b2lkIDApfV9nZXRQYXJlbnRFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRTdGFjay5sZW5ndGg+MD90aGlzLl9lbGVtZW50U3RhY2tbdGhpcy5fZWxlbWVudFN0YWNrLmxlbmd0aC0xXTpudWxsfV9hZGRUb1BhcmVudCh0KXtsZXQgZT10aGlzLl9nZXRQYXJlbnRFbGVtZW50KCk7bnVsbCE9ZT9lLmNoaWxkcmVuLnB1c2godCk6dGhpcy5yb290Tm9kZXMucHVzaCh0KX1fZ2V0RWxlbWVudEZ1bGxOYW1lKHQsZSxpKXtpZigiIj09PXQmJiIiPT09KHQ9dGhpcy5nZXRUYWdEZWZpbml0aW9uKGUpLmltcGxpY2l0TmFtZXNwYWNlUHJlZml4fHwiIikmJm51bGwhPWkpe2xldCByPUtkKGkubmFtZSlbMV07dGhpcy5nZXRUYWdEZWZpbml0aW9uKHIpLnByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZXx8KHQ9ZFgoaS5uYW1lKSl9cmV0dXJuIHdCKHQsZSl9fTtmdW5jdGlvbiBzUShuLHQpe3JldHVybiBuLmxlbmd0aD4wJiZuW24ubGVuZ3RoLTFdPT09dH1mdW5jdGlvbiBhUShuLHQpe3JldHVybiB2b2lkIDAhPT1DRFt0XT9DRFt0XXx8bjovXiN4W2EtZjAtOV0rJC9pLnRlc3QodCk/U3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQodC5zbGljZSgyKSwxNikpOi9eI1xkKyQvLnRlc3QodCk/U3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQodC5zbGljZSgxKSwxMCkpOm59dmFyIFhULF9WPWNsYXNzIGV4dGVuZHMgZ1Z7Y29uc3RydWN0b3IoKXtzdXBlcihGVil9cGFyc2UodCxlLGkpe3JldHVybiBzdXBlci5wYXJzZSh0LGUsaSl9fSxnSz0ibmdQcmVzZXJ2ZVdoaXRlc3BhY2VzIixsRWU9bmV3IFNldChbInByZSIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJzY3JpcHQiLCJzdHlsZSJdKSxfSz0iIFxmXG5cclx0XHZcdTE2ODBcdTE4MGVcdTIwMDAtXHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmIixjRWU9bmV3IFJlZ0V4cChgW14ke19LfV1gKSx1RWU9bmV3IFJlZ0V4cChgWyR7X0t9XXsyLH1gLCJnIik7ZnVuY3Rpb24gdksobil7cmV0dXJuIG4ucmVwbGFjZShuZXcgUmVnRXhwKCJcdWU1MDAiLCJnIiksIiAiKX1mdW5jdGlvbiB5SyhuKXtyZXR1cm4gdksobikucmVwbGFjZSh1RWUsIiAiKX1mdW5jdGlvbiB3RChuLHQ9ITEpe3JldHVybiBxbChPYmplY3Qua2V5cyhuKS5tYXAoZT0+KHtrZXk6ZSxxdW90ZWQ6dCx2YWx1ZTpuW2VdfSkpKX1mdW5jdGlvbiBsUSgpe3JldHVybiBYVHx8KFhUPXt9LFVUKGlvLkhUTUwsWyJpZnJhbWV8c3JjZG9jIiwiKnxpbm5lckhUTUwiLCIqfG91dGVySFRNTCJdKSxVVChpby5TVFlMRSxbIip8c3R5bGUiXSksVVQoaW8uVVJMLFsiKnxmb3JtQWN0aW9uIiwiYXJlYXxocmVmIiwiYXJlYXxwaW5nIiwiYXVkaW98c3JjIiwiYXxocmVmIiwiYXxwaW5nIiwiYmxvY2txdW90ZXxjaXRlIiwiYm9keXxiYWNrZ3JvdW5kIiwiZGVsfGNpdGUiLCJmb3JtfGFjdGlvbiIsImltZ3xzcmMiLCJpbnB1dHxzcmMiLCJpbnN8Y2l0ZSIsInF8Y2l0ZSIsInNvdXJjZXxzcmMiLCJ0cmFja3xzcmMiLCJ2aWRlb3xwb3N0ZXIiLCJ2aWRlb3xzcmMiXSksVVQoaW8uUkVTT1VSQ0VfVVJMLFsiYXBwbGV0fGNvZGUiLCJhcHBsZXR8Y29kZWJhc2UiLCJiYXNlfGhyZWYiLCJlbWJlZHxzcmMiLCJmcmFtZXxzcmMiLCJoZWFkfHByb2ZpbGUiLCJodG1sfG1hbmlmZXN0IiwiaWZyYW1lfHNyYyIsImxpbmt8aHJlZiIsIm1lZGlhfHNyYyIsIm9iamVjdHxjb2RlYmFzZSIsIm9iamVjdHxkYXRhIiwic2NyaXB0fHNyYyJdKSksWFR9ZnVuY3Rpb24gVVQobix0KXtmb3IobGV0IGUgb2YgdClYVFtlLnRvTG93ZXJDYXNlKCldPW59dmFyIHlWPWNsYXNze30sdkVlPVsiW0VsZW1lbnRdfHRleHRDb250ZW50LCVjbGFzc0xpc3QsY2xhc3NOYW1lLGlkLGlubmVySFRNTCwqYmVmb3JlY29weSwqYmVmb3JlY3V0LCpiZWZvcmVwYXN0ZSwqY29weSwqY3V0LCpwYXN0ZSwqc2VhcmNoLCpzZWxlY3RzdGFydCwqd2Via2l0ZnVsbHNjcmVlbmNoYW5nZSwqd2Via2l0ZnVsbHNjcmVlbmVycm9yLCp3aGVlbCxvdXRlckhUTUwsI3Njcm9sbExlZnQsI3Njcm9sbFRvcCxzbG90LCptZXNzYWdlLCptb3pmdWxsc2NyZWVuY2hhbmdlLCptb3pmdWxsc2NyZWVuZXJyb3IsKm1venBvaW50ZXJsb2NrY2hhbmdlLCptb3pwb2ludGVybG9ja2Vycm9yLCp3ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yLCp3ZWJnbGNvbnRleHRsb3N0LCp3ZWJnbGNvbnRleHRyZXN0b3JlZCIsIltIVE1MRWxlbWVudF1eW0VsZW1lbnRdfGFjY2Vzc0tleSxjb250ZW50RWRpdGFibGUsZGlyLCFkcmFnZ2FibGUsIWhpZGRlbixpbm5lclRleHQsbGFuZywqYWJvcnQsKmF1eGNsaWNrLCpibHVyLCpjYW5jZWwsKmNhbnBsYXksKmNhbnBsYXl0aHJvdWdoLCpjaGFuZ2UsKmNsaWNrLCpjbG9zZSwqY29udGV4dG1lbnUsKmN1ZWNoYW5nZSwqZGJsY2xpY2ssKmRyYWcsKmRyYWdlbmQsKmRyYWdlbnRlciwqZHJhZ2xlYXZlLCpkcmFnb3ZlciwqZHJhZ3N0YXJ0LCpkcm9wLCpkdXJhdGlvbmNoYW5nZSwqZW1wdGllZCwqZW5kZWQsKmVycm9yLCpmb2N1cywqZ290cG9pbnRlcmNhcHR1cmUsKmlucHV0LCppbnZhbGlkLCprZXlkb3duLCprZXlwcmVzcywqa2V5dXAsKmxvYWQsKmxvYWRlZGRhdGEsKmxvYWRlZG1ldGFkYXRhLCpsb2Fkc3RhcnQsKmxvc3Rwb2ludGVyY2FwdHVyZSwqbW91c2Vkb3duLCptb3VzZWVudGVyLCptb3VzZWxlYXZlLCptb3VzZW1vdmUsKm1vdXNlb3V0LCptb3VzZW92ZXIsKm1vdXNldXAsKm1vdXNld2hlZWwsKnBhdXNlLCpwbGF5LCpwbGF5aW5nLCpwb2ludGVyY2FuY2VsLCpwb2ludGVyZG93biwqcG9pbnRlcmVudGVyLCpwb2ludGVybGVhdmUsKnBvaW50ZXJtb3ZlLCpwb2ludGVyb3V0LCpwb2ludGVyb3ZlciwqcG9pbnRlcnVwLCpwcm9ncmVzcywqcmF0ZWNoYW5nZSwqcmVzZXQsKnJlc2l6ZSwqc2Nyb2xsLCpzZWVrZWQsKnNlZWtpbmcsKnNlbGVjdCwqc2hvdywqc3RhbGxlZCwqc3VibWl0LCpzdXNwZW5kLCp0aW1ldXBkYXRlLCp0b2dnbGUsKnZvbHVtZWNoYW5nZSwqd2FpdGluZyxvdXRlclRleHQsIXNwZWxsY2hlY2ssJXN0eWxlLCN0YWJJbmRleCx0aXRsZSwhdHJhbnNsYXRlIiwiYWJicixhZGRyZXNzLGFydGljbGUsYXNpZGUsYixiZGksYmRvLGNpdGUsY29kZSxkZCxkZm4sZHQsZW0sZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixpLGtiZCxtYWluLG1hcmssbmF2LG5vc2NyaXB0LHJiLHJwLHJ0LHJ0YyxydWJ5LHMsc2FtcCxzZWN0aW9uLHNtYWxsLHN0cm9uZyxzdWIsc3VwLHUsdmFyLHdicl5bSFRNTEVsZW1lbnRdfGFjY2Vzc0tleSxjb250ZW50RWRpdGFibGUsZGlyLCFkcmFnZ2FibGUsIWhpZGRlbixpbm5lclRleHQsbGFuZywqYWJvcnQsKmF1eGNsaWNrLCpibHVyLCpjYW5jZWwsKmNhbnBsYXksKmNhbnBsYXl0aHJvdWdoLCpjaGFuZ2UsKmNsaWNrLCpjbG9zZSwqY29udGV4dG1lbnUsKmN1ZWNoYW5nZSwqZGJsY2xpY2ssKmRyYWcsKmRyYWdlbmQsKmRyYWdlbnRlciwqZHJhZ2xlYXZlLCpkcmFnb3ZlciwqZHJhZ3N0YXJ0LCpkcm9wLCpkdXJhdGlvbmNoYW5nZSwqZW1wdGllZCwqZW5kZWQsKmVycm9yLCpmb2N1cywqZ290cG9pbnRlcmNhcHR1cmUsKmlucHV0LCppbnZhbGlkLCprZXlkb3duLCprZXlwcmVzcywqa2V5dXAsKmxvYWQsKmxvYWRlZGRhdGEsKmxvYWRlZG1ldGFkYXRhLCpsb2Fkc3RhcnQsKmxvc3Rwb2ludGVyY2FwdHVyZSwqbW91c2Vkb3duLCptb3VzZWVudGVyLCptb3VzZWxlYXZlLCptb3VzZW1vdmUsKm1vdXNlb3V0LCptb3VzZW92ZXIsKm1vdXNldXAsKm1vdXNld2hlZWwsKnBhdXNlLCpwbGF5LCpwbGF5aW5nLCpwb2ludGVyY2FuY2VsLCpwb2ludGVyZG93biwqcG9pbnRlcmVudGVyLCpwb2ludGVybGVhdmUsKnBvaW50ZXJtb3ZlLCpwb2ludGVyb3V0LCpwb2ludGVyb3ZlciwqcG9pbnRlcnVwLCpwcm9ncmVzcywqcmF0ZWNoYW5nZSwqcmVzZXQsKnJlc2l6ZSwqc2Nyb2xsLCpzZWVrZWQsKnNlZWtpbmcsKnNlbGVjdCwqc2hvdywqc3RhbGxlZCwqc3VibWl0LCpzdXNwZW5kLCp0aW1ldXBkYXRlLCp0b2dnbGUsKnZvbHVtZWNoYW5nZSwqd2FpdGluZyxvdXRlclRleHQsIXNwZWxsY2hlY2ssJXN0eWxlLCN0YWJJbmRleCx0aXRsZSwhdHJhbnNsYXRlIiwibWVkaWFeW0hUTUxFbGVtZW50XXwhYXV0b3BsYXksIWNvbnRyb2xzLCVjb250cm9sc0xpc3QsJWNyb3NzT3JpZ2luLCNjdXJyZW50VGltZSwhZGVmYXVsdE11dGVkLCNkZWZhdWx0UGxheWJhY2tSYXRlLCFkaXNhYmxlUmVtb3RlUGxheWJhY2ssIWxvb3AsIW11dGVkLCplbmNyeXB0ZWQsKndhaXRpbmdmb3JrZXksI3BsYXliYWNrUmF0ZSxwcmVsb2FkLHNyYywlc3JjT2JqZWN0LCN2b2x1bWUiLCI6c3ZnOl5bSFRNTEVsZW1lbnRdfCphYm9ydCwqYXV4Y2xpY2ssKmJsdXIsKmNhbmNlbCwqY2FucGxheSwqY2FucGxheXRocm91Z2gsKmNoYW5nZSwqY2xpY2ssKmNsb3NlLCpjb250ZXh0bWVudSwqY3VlY2hhbmdlLCpkYmxjbGljaywqZHJhZywqZHJhZ2VuZCwqZHJhZ2VudGVyLCpkcmFnbGVhdmUsKmRyYWdvdmVyLCpkcmFnc3RhcnQsKmRyb3AsKmR1cmF0aW9uY2hhbmdlLCplbXB0aWVkLCplbmRlZCwqZXJyb3IsKmZvY3VzLCpnb3Rwb2ludGVyY2FwdHVyZSwqaW5wdXQsKmludmFsaWQsKmtleWRvd24sKmtleXByZXNzLCprZXl1cCwqbG9hZCwqbG9hZGVkZGF0YSwqbG9hZGVkbWV0YWRhdGEsKmxvYWRzdGFydCwqbG9zdHBvaW50ZXJjYXB0dXJlLCptb3VzZWRvd24sKm1vdXNlZW50ZXIsKm1vdXNlbGVhdmUsKm1vdXNlbW92ZSwqbW91c2VvdXQsKm1vdXNlb3ZlciwqbW91c2V1cCwqbW91c2V3aGVlbCwqcGF1c2UsKnBsYXksKnBsYXlpbmcsKnBvaW50ZXJjYW5jZWwsKnBvaW50ZXJkb3duLCpwb2ludGVyZW50ZXIsKnBvaW50ZXJsZWF2ZSwqcG9pbnRlcm1vdmUsKnBvaW50ZXJvdXQsKnBvaW50ZXJvdmVyLCpwb2ludGVydXAsKnByb2dyZXNzLCpyYXRlY2hhbmdlLCpyZXNldCwqcmVzaXplLCpzY3JvbGwsKnNlZWtlZCwqc2Vla2luZywqc2VsZWN0LCpzaG93LCpzdGFsbGVkLCpzdWJtaXQsKnN1c3BlbmQsKnRpbWV1cGRhdGUsKnRvZ2dsZSwqdm9sdW1lY2hhbmdlLCp3YWl0aW5nLCVzdHlsZSwjdGFiSW5kZXgiLCI6c3ZnOmdyYXBoaWNzXjpzdmc6fCIsIjpzdmc6YW5pbWF0aW9uXjpzdmc6fCpiZWdpbiwqZW5kLCpyZXBlYXQiLCI6c3ZnOmdlb21ldHJ5Xjpzdmc6fCIsIjpzdmc6Y29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbl46c3ZnOnwiLCI6c3ZnOmdyYWRpZW50Xjpzdmc6fCIsIjpzdmc6dGV4dENvbnRlbnReOnN2ZzpncmFwaGljc3wiLCI6c3ZnOnRleHRQb3NpdGlvbmluZ146c3ZnOnRleHRDb250ZW50fCIsImFeW0hUTUxFbGVtZW50XXxjaGFyc2V0LGNvb3Jkcyxkb3dubG9hZCxoYXNoLGhvc3QsaG9zdG5hbWUsaHJlZixocmVmbGFuZyxuYW1lLHBhc3N3b3JkLHBhdGhuYW1lLHBpbmcscG9ydCxwcm90b2NvbCxyZWZlcnJlclBvbGljeSxyZWwscmV2LHNlYXJjaCxzaGFwZSx0YXJnZXQsdGV4dCx0eXBlLHVzZXJuYW1lIiwiYXJlYV5bSFRNTEVsZW1lbnRdfGFsdCxjb29yZHMsZG93bmxvYWQsaGFzaCxob3N0LGhvc3RuYW1lLGhyZWYsIW5vSHJlZixwYXNzd29yZCxwYXRobmFtZSxwaW5nLHBvcnQscHJvdG9jb2wscmVmZXJyZXJQb2xpY3kscmVsLHNlYXJjaCxzaGFwZSx0YXJnZXQsdXNlcm5hbWUiLCJhdWRpb15tZWRpYXwiLCJicl5bSFRNTEVsZW1lbnRdfGNsZWFyIiwiYmFzZV5bSFRNTEVsZW1lbnRdfGhyZWYsdGFyZ2V0IiwiYm9keV5bSFRNTEVsZW1lbnRdfGFMaW5rLGJhY2tncm91bmQsYmdDb2xvcixsaW5rLCpiZWZvcmV1bmxvYWQsKmJsdXIsKmVycm9yLCpmb2N1cywqaGFzaGNoYW5nZSwqbGFuZ3VhZ2VjaGFuZ2UsKmxvYWQsKm1lc3NhZ2UsKm9mZmxpbmUsKm9ubGluZSwqcGFnZWhpZGUsKnBhZ2VzaG93LCpwb3BzdGF0ZSwqcmVqZWN0aW9uaGFuZGxlZCwqcmVzaXplLCpzY3JvbGwsKnN0b3JhZ2UsKnVuaGFuZGxlZHJlamVjdGlvbiwqdW5sb2FkLHRleHQsdkxpbmsiLCJidXR0b25eW0hUTUxFbGVtZW50XXwhYXV0b2ZvY3VzLCFkaXNhYmxlZCxmb3JtQWN0aW9uLGZvcm1FbmN0eXBlLGZvcm1NZXRob2QsIWZvcm1Ob1ZhbGlkYXRlLGZvcm1UYXJnZXQsbmFtZSx0eXBlLHZhbHVlIiwiY2FudmFzXltIVE1MRWxlbWVudF18I2hlaWdodCwjd2lkdGgiLCJjb250ZW50XltIVE1MRWxlbWVudF18c2VsZWN0IiwiZGxeW0hUTUxFbGVtZW50XXwhY29tcGFjdCIsImRhdGFsaXN0XltIVE1MRWxlbWVudF18IiwiZGV0YWlsc15bSFRNTEVsZW1lbnRdfCFvcGVuIiwiZGlhbG9nXltIVE1MRWxlbWVudF18IW9wZW4scmV0dXJuVmFsdWUiLCJkaXJeW0hUTUxFbGVtZW50XXwhY29tcGFjdCIsImRpdl5bSFRNTEVsZW1lbnRdfGFsaWduIiwiZW1iZWReW0hUTUxFbGVtZW50XXxhbGlnbixoZWlnaHQsbmFtZSxzcmMsdHlwZSx3aWR0aCIsImZpZWxkc2V0XltIVE1MRWxlbWVudF18IWRpc2FibGVkLG5hbWUiLCJmb250XltIVE1MRWxlbWVudF18Y29sb3IsZmFjZSxzaXplIiwiZm9ybV5bSFRNTEVsZW1lbnRdfGFjY2VwdENoYXJzZXQsYWN0aW9uLGF1dG9jb21wbGV0ZSxlbmNvZGluZyxlbmN0eXBlLG1ldGhvZCxuYW1lLCFub1ZhbGlkYXRlLHRhcmdldCIsImZyYW1lXltIVE1MRWxlbWVudF18ZnJhbWVCb3JkZXIsbG9uZ0Rlc2MsbWFyZ2luSGVpZ2h0LG1hcmdpbldpZHRoLG5hbWUsIW5vUmVzaXplLHNjcm9sbGluZyxzcmMiLCJmcmFtZXNldF5bSFRNTEVsZW1lbnRdfGNvbHMsKmJlZm9yZXVubG9hZCwqYmx1ciwqZXJyb3IsKmZvY3VzLCpoYXNoY2hhbmdlLCpsYW5ndWFnZWNoYW5nZSwqbG9hZCwqbWVzc2FnZSwqb2ZmbGluZSwqb25saW5lLCpwYWdlaGlkZSwqcGFnZXNob3csKnBvcHN0YXRlLCpyZWplY3Rpb25oYW5kbGVkLCpyZXNpemUsKnNjcm9sbCwqc3RvcmFnZSwqdW5oYW5kbGVkcmVqZWN0aW9uLCp1bmxvYWQscm93cyIsImhyXltIVE1MRWxlbWVudF18YWxpZ24sY29sb3IsIW5vU2hhZGUsc2l6ZSx3aWR0aCIsImhlYWReW0hUTUxFbGVtZW50XXwiLCJoMSxoMixoMyxoNCxoNSxoNl5bSFRNTEVsZW1lbnRdfGFsaWduIiwiaHRtbF5bSFRNTEVsZW1lbnRdfHZlcnNpb24iLCJpZnJhbWVeW0hUTUxFbGVtZW50XXxhbGlnbiwhYWxsb3dGdWxsc2NyZWVuLGZyYW1lQm9yZGVyLGhlaWdodCxsb25nRGVzYyxtYXJnaW5IZWlnaHQsbWFyZ2luV2lkdGgsbmFtZSxyZWZlcnJlclBvbGljeSwlc2FuZGJveCxzY3JvbGxpbmcsc3JjLHNyY2RvYyx3aWR0aCIsImltZ15bSFRNTEVsZW1lbnRdfGFsaWduLGFsdCxib3JkZXIsJWNyb3NzT3JpZ2luLCNoZWlnaHQsI2hzcGFjZSwhaXNNYXAsbG9uZ0Rlc2MsbG93c3JjLG5hbWUscmVmZXJyZXJQb2xpY3ksc2l6ZXMsc3JjLHNyY3NldCx1c2VNYXAsI3ZzcGFjZSwjd2lkdGgiLCJpbnB1dF5bSFRNTEVsZW1lbnRdfGFjY2VwdCxhbGlnbixhbHQsYXV0b2NhcGl0YWxpemUsYXV0b2NvbXBsZXRlLCFhdXRvZm9jdXMsIWNoZWNrZWQsIWRlZmF1bHRDaGVja2VkLGRlZmF1bHRWYWx1ZSxkaXJOYW1lLCFkaXNhYmxlZCwlZmlsZXMsZm9ybUFjdGlvbixmb3JtRW5jdHlwZSxmb3JtTWV0aG9kLCFmb3JtTm9WYWxpZGF0ZSxmb3JtVGFyZ2V0LCNoZWlnaHQsIWluY3JlbWVudGFsLCFpbmRldGVybWluYXRlLG1heCwjbWF4TGVuZ3RoLG1pbiwjbWluTGVuZ3RoLCFtdWx0aXBsZSxuYW1lLHBhdHRlcm4scGxhY2Vob2xkZXIsIXJlYWRPbmx5LCFyZXF1aXJlZCxzZWxlY3Rpb25EaXJlY3Rpb24sI3NlbGVjdGlvbkVuZCwjc2VsZWN0aW9uU3RhcnQsI3NpemUsc3JjLHN0ZXAsdHlwZSx1c2VNYXAsdmFsdWUsJXZhbHVlQXNEYXRlLCN2YWx1ZUFzTnVtYmVyLCN3aWR0aCIsImxpXltIVE1MRWxlbWVudF18dHlwZSwjdmFsdWUiLCJsYWJlbF5bSFRNTEVsZW1lbnRdfGh0bWxGb3IiLCJsZWdlbmReW0hUTUxFbGVtZW50XXxhbGlnbiIsImxpbmteW0hUTUxFbGVtZW50XXxhcyxjaGFyc2V0LCVjcm9zc09yaWdpbiwhZGlzYWJsZWQsaHJlZixocmVmbGFuZyxpbnRlZ3JpdHksbWVkaWEscmVmZXJyZXJQb2xpY3kscmVsLCVyZWxMaXN0LHJldiwlc2l6ZXMsdGFyZ2V0LHR5cGUiLCJtYXBeW0hUTUxFbGVtZW50XXxuYW1lIiwibWFycXVlZV5bSFRNTEVsZW1lbnRdfGJlaGF2aW9yLGJnQ29sb3IsZGlyZWN0aW9uLGhlaWdodCwjaHNwYWNlLCNsb29wLCNzY3JvbGxBbW91bnQsI3Njcm9sbERlbGF5LCF0cnVlU3BlZWQsI3ZzcGFjZSx3aWR0aCIsIm1lbnVeW0hUTUxFbGVtZW50XXwhY29tcGFjdCIsIm1ldGFeW0hUTUxFbGVtZW50XXxjb250ZW50LGh0dHBFcXVpdixuYW1lLHNjaGVtZSIsIm1ldGVyXltIVE1MRWxlbWVudF18I2hpZ2gsI2xvdywjbWF4LCNtaW4sI29wdGltdW0sI3ZhbHVlIiwiaW5zLGRlbF5bSFRNTEVsZW1lbnRdfGNpdGUsZGF0ZVRpbWUiLCJvbF5bSFRNTEVsZW1lbnRdfCFjb21wYWN0LCFyZXZlcnNlZCwjc3RhcnQsdHlwZSIsIm9iamVjdF5bSFRNTEVsZW1lbnRdfGFsaWduLGFyY2hpdmUsYm9yZGVyLGNvZGUsY29kZUJhc2UsY29kZVR5cGUsZGF0YSwhZGVjbGFyZSxoZWlnaHQsI2hzcGFjZSxuYW1lLHN0YW5kYnksdHlwZSx1c2VNYXAsI3ZzcGFjZSx3aWR0aCIsIm9wdGdyb3VwXltIVE1MRWxlbWVudF18IWRpc2FibGVkLGxhYmVsIiwib3B0aW9uXltIVE1MRWxlbWVudF18IWRlZmF1bHRTZWxlY3RlZCwhZGlzYWJsZWQsbGFiZWwsIXNlbGVjdGVkLHRleHQsdmFsdWUiLCJvdXRwdXReW0hUTUxFbGVtZW50XXxkZWZhdWx0VmFsdWUsJWh0bWxGb3IsbmFtZSx2YWx1ZSIsInBeW0hUTUxFbGVtZW50XXxhbGlnbiIsInBhcmFtXltIVE1MRWxlbWVudF18bmFtZSx0eXBlLHZhbHVlLHZhbHVlVHlwZSIsInBpY3R1cmVeW0hUTUxFbGVtZW50XXwiLCJwcmVeW0hUTUxFbGVtZW50XXwjd2lkdGgiLCJwcm9ncmVzc15bSFRNTEVsZW1lbnRdfCNtYXgsI3ZhbHVlIiwicSxibG9ja3F1b3RlLGNpdGVeW0hUTUxFbGVtZW50XXwiLCJzY3JpcHReW0hUTUxFbGVtZW50XXwhYXN5bmMsY2hhcnNldCwlY3Jvc3NPcmlnaW4sIWRlZmVyLGV2ZW50LGh0bWxGb3IsaW50ZWdyaXR5LHNyYyx0ZXh0LHR5cGUiLCJzZWxlY3ReW0hUTUxFbGVtZW50XXxhdXRvY29tcGxldGUsIWF1dG9mb2N1cywhZGlzYWJsZWQsI2xlbmd0aCwhbXVsdGlwbGUsbmFtZSwhcmVxdWlyZWQsI3NlbGVjdGVkSW5kZXgsI3NpemUsdmFsdWUiLCJzaGFkb3deW0hUTUxFbGVtZW50XXwiLCJzbG90XltIVE1MRWxlbWVudF18bmFtZSIsInNvdXJjZV5bSFRNTEVsZW1lbnRdfG1lZGlhLHNpemVzLHNyYyxzcmNzZXQsdHlwZSIsInNwYW5eW0hUTUxFbGVtZW50XXwiLCJzdHlsZV5bSFRNTEVsZW1lbnRdfCFkaXNhYmxlZCxtZWRpYSx0eXBlIiwiY2FwdGlvbl5bSFRNTEVsZW1lbnRdfGFsaWduIiwidGgsdGReW0hUTUxFbGVtZW50XXxhYmJyLGFsaWduLGF4aXMsYmdDb2xvcixjaCxjaE9mZiwjY29sU3BhbixoZWFkZXJzLGhlaWdodCwhbm9XcmFwLCNyb3dTcGFuLHNjb3BlLHZBbGlnbix3aWR0aCIsImNvbCxjb2xncm91cF5bSFRNTEVsZW1lbnRdfGFsaWduLGNoLGNoT2ZmLCNzcGFuLHZBbGlnbix3aWR0aCIsInRhYmxlXltIVE1MRWxlbWVudF18YWxpZ24sYmdDb2xvcixib3JkZXIsJWNhcHRpb24sY2VsbFBhZGRpbmcsY2VsbFNwYWNpbmcsZnJhbWUscnVsZXMsc3VtbWFyeSwldEZvb3QsJXRIZWFkLHdpZHRoIiwidHJeW0hUTUxFbGVtZW50XXxhbGlnbixiZ0NvbG9yLGNoLGNoT2ZmLHZBbGlnbiIsInRmb290LHRoZWFkLHRib2R5XltIVE1MRWxlbWVudF18YWxpZ24sY2gsY2hPZmYsdkFsaWduIiwidGVtcGxhdGVeW0hUTUxFbGVtZW50XXwiLCJ0ZXh0YXJlYV5bSFRNTEVsZW1lbnRdfGF1dG9jYXBpdGFsaXplLGF1dG9jb21wbGV0ZSwhYXV0b2ZvY3VzLCNjb2xzLGRlZmF1bHRWYWx1ZSxkaXJOYW1lLCFkaXNhYmxlZCwjbWF4TGVuZ3RoLCNtaW5MZW5ndGgsbmFtZSxwbGFjZWhvbGRlciwhcmVhZE9ubHksIXJlcXVpcmVkLCNyb3dzLHNlbGVjdGlvbkRpcmVjdGlvbiwjc2VsZWN0aW9uRW5kLCNzZWxlY3Rpb25TdGFydCx2YWx1ZSx3cmFwIiwidGl0bGVeW0hUTUxFbGVtZW50XXx0ZXh0IiwidHJhY2teW0hUTUxFbGVtZW50XXwhZGVmYXVsdCxraW5kLGxhYmVsLHNyYyxzcmNsYW5nIiwidWxeW0hUTUxFbGVtZW50XXwhY29tcGFjdCx0eXBlIiwidW5rbm93bl5bSFRNTEVsZW1lbnRdfCIsInZpZGVvXm1lZGlhfCNoZWlnaHQscG9zdGVyLCN3aWR0aCIsIjpzdmc6YV46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6YW5pbWF0ZV46c3ZnOmFuaW1hdGlvbnwiLCI6c3ZnOmFuaW1hdGVNb3Rpb25eOnN2ZzphbmltYXRpb258IiwiOnN2ZzphbmltYXRlVHJhbnNmb3JtXjpzdmc6YW5pbWF0aW9ufCIsIjpzdmc6Y2lyY2xlXjpzdmc6Z2VvbWV0cnl8IiwiOnN2ZzpjbGlwUGF0aF46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6ZGVmc146c3ZnOmdyYXBoaWNzfCIsIjpzdmc6ZGVzY146c3ZnOnwiLCI6c3ZnOmRpc2NhcmReOnN2Zzp8IiwiOnN2ZzplbGxpcHNlXjpzdmc6Z2VvbWV0cnl8IiwiOnN2ZzpmZUJsZW5kXjpzdmc6fCIsIjpzdmc6ZmVDb2xvck1hdHJpeF46c3ZnOnwiLCI6c3ZnOmZlQ29tcG9uZW50VHJhbnNmZXJeOnN2Zzp8IiwiOnN2ZzpmZUNvbXBvc2l0ZV46c3ZnOnwiLCI6c3ZnOmZlQ29udm9sdmVNYXRyaXheOnN2Zzp8IiwiOnN2ZzpmZURpZmZ1c2VMaWdodGluZ146c3ZnOnwiLCI6c3ZnOmZlRGlzcGxhY2VtZW50TWFwXjpzdmc6fCIsIjpzdmc6ZmVEaXN0YW50TGlnaHReOnN2Zzp8IiwiOnN2ZzpmZURyb3BTaGFkb3deOnN2Zzp8IiwiOnN2ZzpmZUZsb29kXjpzdmc6fCIsIjpzdmc6ZmVGdW5jQV46c3ZnOmNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb258IiwiOnN2ZzpmZUZ1bmNCXjpzdmc6Y29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbnwiLCI6c3ZnOmZlRnVuY0deOnN2Zzpjb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9ufCIsIjpzdmc6ZmVGdW5jUl46c3ZnOmNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb258IiwiOnN2ZzpmZUdhdXNzaWFuQmx1cl46c3ZnOnwiLCI6c3ZnOmZlSW1hZ2VeOnN2Zzp8IiwiOnN2ZzpmZU1lcmdlXjpzdmc6fCIsIjpzdmc6ZmVNZXJnZU5vZGVeOnN2Zzp8IiwiOnN2ZzpmZU1vcnBob2xvZ3leOnN2Zzp8IiwiOnN2ZzpmZU9mZnNldF46c3ZnOnwiLCI6c3ZnOmZlUG9pbnRMaWdodF46c3ZnOnwiLCI6c3ZnOmZlU3BlY3VsYXJMaWdodGluZ146c3ZnOnwiLCI6c3ZnOmZlU3BvdExpZ2h0Xjpzdmc6fCIsIjpzdmc6ZmVUaWxlXjpzdmc6fCIsIjpzdmc6ZmVUdXJidWxlbmNlXjpzdmc6fCIsIjpzdmc6ZmlsdGVyXjpzdmc6fCIsIjpzdmc6Zm9yZWlnbk9iamVjdF46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6Z146c3ZnOmdyYXBoaWNzfCIsIjpzdmc6aW1hZ2VeOnN2ZzpncmFwaGljc3wiLCI6c3ZnOmxpbmVeOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOmxpbmVhckdyYWRpZW50Xjpzdmc6Z3JhZGllbnR8IiwiOnN2ZzptcGF0aF46c3ZnOnwiLCI6c3ZnOm1hcmtlcl46c3ZnOnwiLCI6c3ZnOm1hc2teOnN2Zzp8IiwiOnN2ZzptZXRhZGF0YV46c3ZnOnwiLCI6c3ZnOnBhdGheOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOnBhdHRlcm5eOnN2Zzp8IiwiOnN2Zzpwb2x5Z29uXjpzdmc6Z2VvbWV0cnl8IiwiOnN2Zzpwb2x5bGluZV46c3ZnOmdlb21ldHJ5fCIsIjpzdmc6cmFkaWFsR3JhZGllbnReOnN2ZzpncmFkaWVudHwiLCI6c3ZnOnJlY3ReOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOnN2Z146c3ZnOmdyYXBoaWNzfCNjdXJyZW50U2NhbGUsI3pvb21BbmRQYW4iLCI6c3ZnOnNjcmlwdF46c3ZnOnx0eXBlIiwiOnN2ZzpzZXReOnN2ZzphbmltYXRpb258IiwiOnN2ZzpzdG9wXjpzdmc6fCIsIjpzdmc6c3R5bGVeOnN2Zzp8IWRpc2FibGVkLG1lZGlhLHRpdGxlLHR5cGUiLCI6c3ZnOnN3aXRjaF46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6c3ltYm9sXjpzdmc6fCIsIjpzdmc6dHNwYW5eOnN2Zzp0ZXh0UG9zaXRpb25pbmd8IiwiOnN2Zzp0ZXh0Xjpzdmc6dGV4dFBvc2l0aW9uaW5nfCIsIjpzdmc6dGV4dFBhdGheOnN2Zzp0ZXh0Q29udGVudHwiLCI6c3ZnOnRpdGxlXjpzdmc6fCIsIjpzdmc6dXNlXjpzdmc6Z3JhcGhpY3N8IiwiOnN2Zzp2aWV3Xjpzdmc6fCN6b29tQW5kUGFuIiwiZGF0YV5bSFRNTEVsZW1lbnRdfHZhbHVlIiwia2V5Z2VuXltIVE1MRWxlbWVudF18IWF1dG9mb2N1cyxjaGFsbGVuZ2UsIWRpc2FibGVkLGZvcm0sa2V5dHlwZSxuYW1lIiwibWVudWl0ZW1eW0hUTUxFbGVtZW50XXx0eXBlLGxhYmVsLGljb24sIWRpc2FibGVkLCFjaGVja2VkLHJhZGlvZ3JvdXAsIWRlZmF1bHQiLCJzdW1tYXJ5XltIVE1MRWxlbWVudF18IiwidGltZV5bSFRNTEVsZW1lbnRdfGRhdGVUaW1lIiwiOnN2ZzpjdXJzb3JeOnN2Zzp8Il0sYks9bmV3IE1hcChPYmplY3QuZW50cmllcyh7Y2xhc3M6ImNsYXNzTmFtZSIsZm9yOiJodG1sRm9yIixmb3JtYWN0aW9uOiJmb3JtQWN0aW9uIixpbm5lckh0bWw6ImlubmVySFRNTCIscmVhZG9ubHk6InJlYWRPbmx5Iix0YWJpbmRleDoidGFiSW5kZXgifSkpLHlFZT1BcnJheS5mcm9tKGJLKS5yZWR1Y2UoKG4sW3QsZV0pPT4obi5zZXQodCxlKSxuKSxuZXcgTWFwKSxTRD1jbGFzcyBleHRlbmRzIHlWe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zY2hlbWE9bmV3IE1hcCx0aGlzLl9ldmVudFNjaGVtYT1uZXcgTWFwLHZFZS5mb3JFYWNoKHQ9PntsZXQgZT1uZXcgTWFwLGk9bmV3IFNldCxbcixvXT10LnNwbGl0KCJ8Iikscz1vLnNwbGl0KCIsIiksW2EsbF09ci5zcGxpdCgiXiIpO2Euc3BsaXQoIiwiKS5mb3JFYWNoKHU9Pnt0aGlzLl9zY2hlbWEuc2V0KHUudG9Mb3dlckNhc2UoKSxlKSx0aGlzLl9ldmVudFNjaGVtYS5zZXQodS50b0xvd2VyQ2FzZSgpLGkpfSk7bGV0IGM9bCYmdGhpcy5fc2NoZW1hLmdldChsLnRvTG93ZXJDYXNlKCkpO2lmKGMpe2ZvcihsZXRbdSxkXW9mIGMpZS5zZXQodSxkKTtmb3IobGV0IHUgb2YgdGhpcy5fZXZlbnRTY2hlbWEuZ2V0KGwudG9Mb3dlckNhc2UoKSkpaS5hZGQodSl9cy5mb3JFYWNoKHU9PntpZih1Lmxlbmd0aD4wKXN3aXRjaCh1WzBdKXtjYXNlIioiOmkuYWRkKHUuc3Vic3RyaW5nKDEpKTticmVhaztjYXNlIiEiOmUuc2V0KHUuc3Vic3RyaW5nKDEpLCJib29sZWFuIik7YnJlYWs7Y2FzZSIjIjplLnNldCh1LnN1YnN0cmluZygxKSwibnVtYmVyIik7YnJlYWs7Y2FzZSIlIjplLnNldCh1LnN1YnN0cmluZygxKSwib2JqZWN0Iik7YnJlYWs7ZGVmYXVsdDplLnNldCh1LCJzdHJpbmciKX19KX0pfWhhc1Byb3BlcnR5KHQsZSxpKXtpZihpLnNvbWUobz0+Im5vLWVycm9ycy1zY2hlbWEiPT09by5uYW1lKSlyZXR1cm4hMDtpZih0LmluZGV4T2YoIi0iKT4tMSl7aWYoQ0IodCl8fE1CKHQpKXJldHVybiExO2lmKGkuc29tZShvPT4iY3VzdG9tLWVsZW1lbnRzIj09PW8ubmFtZSkpcmV0dXJuITB9cmV0dXJuKHRoaXMuX3NjaGVtYS5nZXQodC50b0xvd2VyQ2FzZSgpKXx8dGhpcy5fc2NoZW1hLmdldCgidW5rbm93biIpKS5oYXMoZSl9aGFzRWxlbWVudCh0LGUpe3JldHVybiEhKGUuc29tZShpPT4ibm8tZXJyb3JzLXNjaGVtYSI9PT1pLm5hbWUpfHx0LmluZGV4T2YoIi0iKT4tMSYmKENCKHQpfHxNQih0KXx8ZS5zb21lKGk9PiJjdXN0b20tZWxlbWVudHMiPT09aS5uYW1lKSkpfHx0aGlzLl9zY2hlbWEuaGFzKHQudG9Mb3dlckNhc2UoKSl9c2VjdXJpdHlDb250ZXh0KHQsZSxpKXtpJiYoZT10aGlzLmdldE1hcHBlZFByb3BOYW1lKGUpKSx0PXQudG9Mb3dlckNhc2UoKSxlPWUudG9Mb3dlckNhc2UoKTtsZXQgcj1sUSgpW3QrInwiK2VdO3JldHVybiByfHwocj1sUSgpWyIqfCIrZV0scnx8aW8uTk9ORSl9Z2V0TWFwcGVkUHJvcE5hbWUodCl7cmV0dXJuIGJLLmdldCh0KT8/dH1nZXREZWZhdWx0Q29tcG9uZW50RWxlbWVudE5hbWUoKXtyZXR1cm4ibmctY29tcG9uZW50In12YWxpZGF0ZVByb3BlcnR5KHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgib24iKT97ZXJyb3I6ITAsbXNnOmBCaW5kaW5nIHRvIGV2ZW50IHByb3BlcnR5ICcke3R9JyBpcyBkaXNhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zLCBwbGVhc2UgdXNlICgke3Quc2xpY2UoMil9KT0uLi5cbklmICcke3R9JyBpcyBhIGRpcmVjdGl2ZSBpbnB1dCwgbWFrZSBzdXJlIHRoZSBkaXJlY3RpdmUgaXMgaW1wb3J0ZWQgYnkgdGhlIGN1cnJlbnQgbW9kdWxlLmB9OntlcnJvcjohMX19dmFsaWRhdGVBdHRyaWJ1dGUodCl7cmV0dXJuIHQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJvbiIpP3tlcnJvcjohMCxtc2c6YEJpbmRpbmcgdG8gZXZlbnQgYXR0cmlidXRlICcke3R9JyBpcyBkaXNhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zLCBwbGVhc2UgdXNlICgke3Quc2xpY2UoMil9KT0uLi5gfTp7ZXJyb3I6ITF9fWFsbEtub3duRWxlbWVudE5hbWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fc2NoZW1hLmtleXMoKSl9YWxsS25vd25BdHRyaWJ1dGVzT2ZFbGVtZW50KHQpe2xldCBlPXRoaXMuX3NjaGVtYS5nZXQodC50b0xvd2VyQ2FzZSgpKXx8dGhpcy5fc2NoZW1hLmdldCgidW5rbm93biIpO3JldHVybiBBcnJheS5mcm9tKGUua2V5cygpKS5tYXAoaT0+eUVlLmdldChpKT8/aSl9YWxsS25vd25FdmVudHNPZkVsZW1lbnQodCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fZXZlbnRTY2hlbWEuZ2V0KHQudG9Mb3dlckNhc2UoKSk/P1tdKX1ub3JtYWxpemVBbmltYXRpb25TdHlsZVByb3BlcnR5KHQpe3JldHVybiB0LnJlcGxhY2UoeU1lLCguLi50KT0+dFsxXS50b1VwcGVyQ2FzZSgpKX1ub3JtYWxpemVBbmltYXRpb25TdHlsZVZhbHVlKHQsZSxpKXtsZXQgcj0iIixvPWkudG9TdHJpbmcoKS50cmltKCkscz1udWxsO2lmKGZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIndpZHRoIjpjYXNlImhlaWdodCI6Y2FzZSJtaW5XaWR0aCI6Y2FzZSJtaW5IZWlnaHQiOmNhc2UibWF4V2lkdGgiOmNhc2UibWF4SGVpZ2h0IjpjYXNlImxlZnQiOmNhc2UidG9wIjpjYXNlImJvdHRvbSI6Y2FzZSJyaWdodCI6Y2FzZSJmb250U2l6ZSI6Y2FzZSJvdXRsaW5lV2lkdGgiOmNhc2Uib3V0bGluZU9mZnNldCI6Y2FzZSJwYWRkaW5nVG9wIjpjYXNlInBhZGRpbmdMZWZ0IjpjYXNlInBhZGRpbmdCb3R0b20iOmNhc2UicGFkZGluZ1JpZ2h0IjpjYXNlIm1hcmdpblRvcCI6Y2FzZSJtYXJnaW5MZWZ0IjpjYXNlIm1hcmdpbkJvdHRvbSI6Y2FzZSJtYXJnaW5SaWdodCI6Y2FzZSJib3JkZXJSYWRpdXMiOmNhc2UiYm9yZGVyV2lkdGgiOmNhc2UiYm9yZGVyVG9wV2lkdGgiOmNhc2UiYm9yZGVyTGVmdFdpZHRoIjpjYXNlImJvcmRlclJpZ2h0V2lkdGgiOmNhc2UiYm9yZGVyQm90dG9tV2lkdGgiOmNhc2UidGV4dEluZGVudCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19KHQpJiYwIT09aSYmIjAiIT09aSlpZigibnVtYmVyIj09dHlwZW9mIGkpcj0icHgiO2Vsc2V7bGV0IGE9aS5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO2EmJjA9PWFbMV0ubGVuZ3RoJiYocz1gUGxlYXNlIHByb3ZpZGUgYSBDU1MgdW5pdCB2YWx1ZSBmb3IgJHtlfToke2l9YCl9cmV0dXJue2Vycm9yOnMsdmFsdWU6bytyfX19LGNRPW5ldyBTZXQoWyJpZnJhbWV8c3JjZG9jIiwiKnxpbm5lcmh0bWwiLCIqfG91dGVyaHRtbCIsImVtYmVkfHNyYyIsIm9iamVjdHxjb2RlYmFzZSIsIm9iamVjdHxkYXRhIl0pO2Z1bmN0aW9uIHhLKG4sdCl7cmV0dXJuIG49bi50b0xvd2VyQ2FzZSgpLHQ9dC50b0xvd2VyQ2FzZSgpLGNRLmhhcyhuKyJ8Iit0KXx8Y1EuaGFzKCIqfCIrdCl9dmFyIHBCPSJhbmltYXRlLSI7ZnVuY3Rpb24gaEIobil7cmV0dXJuIkAiPT1uWzBdfWZ1bmN0aW9uIGZCKG4sdCxlLGkpe2xldCByPVtdO3JldHVybiBaZC5wYXJzZSh0KS5mb3JFYWNoKG89PntsZXQgcz1vLmVsZW1lbnQ/W28uZWxlbWVudF06bi5hbGxLbm93bkVsZW1lbnROYW1lcygpLGE9bmV3IFNldChvLm5vdFNlbGVjdG9ycy5maWx0ZXIoYz0+Yy5pc0VsZW1lbnRTZWxlY3RvcigpKS5tYXAoYz0+Yy5lbGVtZW50KSksbD1zLmZpbHRlcihjPT4hYS5oYXMoYykpO3IucHVzaCguLi5sLm1hcChjPT5uLnNlY3VyaXR5Q29udGV4dChjLGUsaSkpKX0pLDA9PT1yLmxlbmd0aD9baW8uTk9ORV06QXJyYXkuZnJvbShuZXcgU2V0KHIpKS5zb3J0KCl9ZnVuY3Rpb24gS3Aobix0KXtsZXQgZT10LnN0YXJ0LW4uc3RhcnQub2Zmc2V0LGk9dC5lbmQtbi5lbmQub2Zmc2V0O3JldHVybiBuZXcgR28obi5zdGFydC5tb3ZlQnkoZSksbi5lbmQubW92ZUJ5KGkpLG4uZnVsbFN0YXJ0Lm1vdmVCeShlKSxuLmRldGFpbHMpfXZhciBFRWU9L14oW146Lz8jXSspOi87ZnVuY3Rpb24gQ0sobil7bGV0IHQ9bnVsbCxlPW51bGwsaT1udWxsLHI9ITEsbz0iIjtuLmF0dHJzLmZvckVhY2gobD0+e2xldCBjPWwubmFtZS50b0xvd2VyQ2FzZSgpOyJzZWxlY3QiPT1jP3Q9bC52YWx1ZToiaHJlZiI9PWM/ZT1sLnZhbHVlOiJyZWwiPT1jP2k9bC52YWx1ZToibmdOb25CaW5kYWJsZSI9PWwubmFtZT9yPSEwOiJuZ1Byb2plY3RBcyI9PWwubmFtZSYmbC52YWx1ZS5sZW5ndGg+MCYmKG89bC52YWx1ZSl9KSx0PWZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT09bnx8MD09PW4ubGVuZ3RoPyIqIjpufSh0KTtsZXQgcz1uLm5hbWUudG9Mb3dlckNhc2UoKSxhPW5hLk9USEVSO3JldHVybiBNQihzKT9hPW5hLk5HX0NPTlRFTlQ6InN0eWxlIj09cz9hPW5hLlNUWUxFOiJzY3JpcHQiPT1zP2E9bmEuU0NSSVBUOiJsaW5rIj09cyYmInN0eWxlc2hlZXQiPT1pJiYoYT1uYS5TVFlMRVNIRUVUKSxuZXcgeFYoYSx0LGUscixvKX12YXIgbmE9KCgpPT57cmV0dXJuKG49bmF8fChuYT17fSkpW24uTkdfQ09OVEVOVD0wXT0iTkdfQ09OVEVOVCIsbltuLlNUWUxFPTFdPSJTVFlMRSIsbltuLlNUWUxFU0hFRVQ9Ml09IlNUWUxFU0hFRVQiLG5bbi5TQ1JJUFQ9M109IlNDUklQVCIsbltuLk9USEVSPTRdPSJPVEhFUiIsbmE7dmFyIG59KSgpLHhWPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy50eXBlPXQsdGhpcy5zZWxlY3RBdHRyPWUsdGhpcy5ocmVmQXR0cj1pLHRoaXMubm9uQmluZGFibGU9cix0aGlzLnByb2plY3RBcz1vfX0sTEVlPS9eKD86KGJpbmQtKXwobGV0LSl8KHJlZi18Iyl8KG9uLSl8KGJpbmRvbi0pfChAKSkoLiopJC8sWnBfQkFOQU5BX0JPWD17c3RhcnQ6IlsoIixlbmQ6IildIn0sWnBfUFJPUEVSVFk9e3N0YXJ0OiJbIixlbmQ6Il0ifSxacF9FVkVOVD17c3RhcnQ6IigiLGVuZDoiKSJ9LEhFZT1uZXcgY2xhc3N7dmlzaXRFbGVtZW50KHQpe2xldCBlPUNLKHQpO2lmKGUudHlwZT09PW5hLlNDUklQVHx8ZS50eXBlPT09bmEuU1RZTEV8fGUudHlwZT09PW5hLlNUWUxFU0hFRVQpcmV0dXJuIG51bGw7bGV0IGk9VXUodGhpcyx0LmNoaWxkcmVuLG51bGwpO3JldHVybiBuZXcgRV8odC5uYW1lLFV1KHRoaXMsdC5hdHRycyksW10sW10saSxbXSx0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuKX12aXNpdENvbW1lbnQodCl7cmV0dXJuIG51bGx9dmlzaXRBdHRyaWJ1dGUodCl7cmV0dXJuIG5ldyBEQyh0Lm5hbWUsdC52YWx1ZSx0LnNvdXJjZVNwYW4sdC5rZXlTcGFuLHQudmFsdWVTcGFuLHQuaTE4bil9dmlzaXRUZXh0KHQpe3JldHVybiBuZXcgTV8odC52YWx1ZSx0LnNvdXJjZVNwYW4pfXZpc2l0RXhwYW5zaW9uKHQpe3JldHVybiBudWxsfXZpc2l0RXhwYW5zaW9uQ2FzZSh0KXtyZXR1cm4gbnVsbH19O2Z1bmN0aW9uIF9RKG4pe3JldHVybi9eZGF0YS0vaS50ZXN0KG4pP24uc3Vic3RyaW5nKDUpOm59ZnVuY3Rpb24gbUIobix0KXt0LnB1c2goLi4ubi5tYXAoZT0+U18uZnJvbVBhcnNlZEV2ZW50KGUpKSl9dmFyIExjPSgoKT0+e3JldHVybihuPUxjfHwoTGM9e30pKVtuLkVMRU1FTlQ9MF09IkVMRU1FTlQiLG5bbi5URU1QTEFURT0xXT0iVEVNUExBVEUiLExjO3ZhciBufSkoKSxRQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT0wLHI9bnVsbCxvLHMpe3RoaXMuaW5kZXg9dCx0aGlzLnJlZj1lLHRoaXMubGV2ZWw9aSx0aGlzLnRlbXBsYXRlSW5kZXg9cix0aGlzLm1ldGE9byx0aGlzLnJlZ2lzdHJ5PXMsdGhpcy5iaW5kaW5ncz1uZXcgU2V0LHRoaXMucGxhY2Vob2xkZXJzPW5ldyBNYXAsdGhpcy5pc0VtaXR0ZWQ9ITEsdGhpcy5fdW5yZXNvbHZlZEN0eENvdW50PTAsdGhpcy5fcmVnaXN0cnk9c3x8e2dldFVuaXF1ZUlkOlN3ZSgpLGljdXM6bmV3IE1hcH0sdGhpcy5pZD10aGlzLl9yZWdpc3RyeS5nZXRVbmlxdWVJZCgpfWFwcGVuZFRhZyh0LGUsaSxyKXtlLmlzVm9pZCYmcnx8cVQodGhpcy5wbGFjZWhvbGRlcnMsZS5pc1ZvaWR8fCFyP2Uuc3RhcnROYW1lOmUuY2xvc2VOYW1lLHt0eXBlOnQsaW5kZXg6aSxjdHg6dGhpcy5pZCxpc1ZvaWQ6ZS5pc1ZvaWQsY2xvc2VkOnJ9KX1nZXQgaWN1cygpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5pY3VzfWdldCBpc1Jvb3QoKXtyZXR1cm4gMD09PXRoaXMubGV2ZWx9Z2V0IGlzUmVzb2x2ZWQoKXtyZXR1cm4gMD09PXRoaXMuX3VucmVzb2x2ZWRDdHhDb3VudH1nZXRTZXJpYWxpemVkUGxhY2Vob2xkZXJzKCl7bGV0IHQ9bmV3IE1hcDtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnMuZm9yRWFjaCgoZSxpKT0+dC5zZXQoaSxlLm1hcChXRWUpKSksdH1hcHBlbmRCaW5kaW5nKHQpe3RoaXMuYmluZGluZ3MuYWRkKHQpfWFwcGVuZEljdSh0LGUpe3FUKHRoaXMuX3JlZ2lzdHJ5LmljdXMsdCxlKX1hcHBlbmRCb3VuZFRleHQodCl7cVEodCx0aGlzLmJpbmRpbmdzLnNpemUsdGhpcy5pZCkuZm9yRWFjaCgoaSxyKT0+cVQodGhpcy5wbGFjZWhvbGRlcnMsciwuLi5pKSl9YXBwZW5kVGVtcGxhdGUodCxlKXt0aGlzLmFwcGVuZFRhZyhMYy5URU1QTEFURSx0LGUsITEpLHRoaXMuYXBwZW5kVGFnKExjLlRFTVBMQVRFLHQsZSwhMCksdGhpcy5fdW5yZXNvbHZlZEN0eENvdW50Kyt9YXBwZW5kRWxlbWVudCh0LGUsaSl7dGhpcy5hcHBlbmRUYWcoTGMuRUxFTUVOVCx0LGUsaSl9YXBwZW5kUHJvamVjdGlvbih0LGUpe3RoaXMuYXBwZW5kVGFnKExjLkVMRU1FTlQsdCxlLCExKSx0aGlzLmFwcGVuZFRhZyhMYy5FTEVNRU5ULHQsZSwhMCl9Zm9ya0NoaWxkQ29udGV4dCh0LGUsaSl7cmV0dXJuIG5ldyBRQyh0LHRoaXMucmVmLHRoaXMubGV2ZWwrMSxlLGksdGhpcy5fcmVnaXN0cnkpfXJlY29uY2lsZUNoaWxkQ29udGV4dCh0KXtbInN0YXJ0IiwiY2xvc2UiXS5mb3JFYWNoKGk9PntsZXQgcz0odGhpcy5wbGFjZWhvbGRlcnMuZ2V0KHQubWV0YVtgJHtpfU5hbWVgXSl8fFtdKS5maW5kKHZRKHRoaXMuaWQsdC50ZW1wbGF0ZUluZGV4KSk7cyYmKHMuY3R4PXQuaWQpfSksdC5wbGFjZWhvbGRlcnMuZm9yRWFjaCgoaSxyKT0+e2xldCBvPXRoaXMucGxhY2Vob2xkZXJzLmdldChyKTtpZighbylyZXR1cm4gdm9pZCB0aGlzLnBsYWNlaG9sZGVycy5zZXQocixpKTtsZXQgcz1vLmZpbmRJbmRleCh2USh0LmlkLHQudGVtcGxhdGVJbmRleCkpO2lmKHM+PTApe2xldCBhPXIuc3RhcnRzV2l0aCgiQ0xPU0UiKTtyLmVuZHNXaXRoKCJORy1URU1QTEFURSIpP28uc3BsaWNlKHMrKGE/MDoxKSwwLC4uLmkpOihpW2E/aS5sZW5ndGgtMTowXS50bXBsPW9bc10sby5zcGxpY2UocywxLC4uLmkpKX1lbHNlIG8ucHVzaCguLi5pKTt0aGlzLnBsYWNlaG9sZGVycy5zZXQocixvKX0pLHRoaXMuX3VucmVzb2x2ZWRDdHhDb3VudC0tfX07ZnVuY3Rpb24gZ0Iobix0LGUsaSl7cmV0dXJuIFBEKGAke2k/Ii8iOiIifSR7bn0ke3R9YCxlKX1mdW5jdGlvbiBfQihuLHtpbmRleDp0LGN0eDplLGlzVm9pZDppfSxyKXtyZXR1cm4gaT9nQihuLHQsZSkrZ0Iobix0LGUsITApOmdCKG4sdCxlLHIpfWZ1bmN0aW9uIHZRKG4sdCl7cmV0dXJuIGU9PiJvYmplY3QiPT10eXBlb2YgZSYmZS50eXBlPT09TGMuVEVNUExBVEUmJmUuaW5kZXg9PT10JiZlLmN0eD09PW59ZnVuY3Rpb24gV0VlKG4pe2xldCB0PShyLG8pPT5fQigiIyIscixvKSxlPShyLG8pPT5fQigiKiIscixvKTtzd2l0Y2gobi50eXBlKXtjYXNlIExjLkVMRU1FTlQ6cmV0dXJuIG4uY2xvc2VkP3QobiwhMCkrKG4udG1wbD9lKG4udG1wbCwhMCk6IiIpOm4udG1wbD9lKG4udG1wbCkrdChuKSsobi5pc1ZvaWQ/ZShuLnRtcGwsITApOiIiKTp0KG4pO2Nhc2UgTGMuVEVNUExBVEU6cmV0dXJuIGUobixuLmNsb3NlZCk7ZGVmYXVsdDpyZXR1cm4gbn19dmFyIHFFZT1uZXcgY2xhc3N7dmlzaXRUZXh0KHQpe3JldHVybiB0LnZhbHVlfXZpc2l0Q29udGFpbmVyKHQpe3JldHVybiB0LmNoaWxkcmVuLm1hcChlPT5lLnZpc2l0KHRoaXMpKS5qb2luKCIiKX12aXNpdEljdSh0KXtsZXQgZT1PYmplY3Qua2V5cyh0LmNhc2VzKS5tYXAocj0+YCR7cn0geyR7dC5jYXNlc1tyXS52aXNpdCh0aGlzKX19YCk7cmV0dXJuYHske3QuZXhwcmVzc2lvblBsYWNlaG9sZGVyfSwgJHt0LnR5cGV9LCAke2Uuam9pbigiICIpfX1gfXZpc2l0VGFnUGxhY2Vob2xkZXIodCl7cmV0dXJuIHQuaXNWb2lkP3RoaXMuZm9ybWF0UGgodC5zdGFydE5hbWUpOmAke3RoaXMuZm9ybWF0UGgodC5zdGFydE5hbWUpfSR7dC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9JHt0aGlzLmZvcm1hdFBoKHQuY2xvc2VOYW1lKX1gfXZpc2l0UGxhY2Vob2xkZXIodCl7cmV0dXJuIHRoaXMuZm9ybWF0UGgodC5uYW1lKX12aXNpdEljdVBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHRoaXMuZm9ybWF0UGgodC5uYW1lKX1mb3JtYXRQaCh0KXtyZXR1cm5geyR7SkModCwhMSl9fWB9fTtmdW5jdGlvbiBNSyhuKXtyZXR1cm4gbi52aXNpdChxRWUpfXZhciB5UT17QToiTElOSyIsQjoiQk9MRF9URVhUIixCUjoiTElORV9CUkVBSyIsRU06IkVNUEhBU0lTRURfVEVYVCIsSDE6IkhFQURJTkdfTEVWRUwxIixIMjoiSEVBRElOR19MRVZFTDIiLEgzOiJIRUFESU5HX0xFVkVMMyIsSDQ6IkhFQURJTkdfTEVWRUw0IixINToiSEVBRElOR19MRVZFTDUiLEg2OiJIRUFESU5HX0xFVkVMNiIsSFI6IkhPUklaT05UQUxfUlVMRSIsSToiSVRBTElDX1RFWFQiLExJOiJMSVNUX0lURU0iLExJTks6Ik1FRElBX0xJTksiLE9MOiJPUkRFUkVEX0xJU1QiLFA6IlBBUkFHUkFQSCIsUToiUVVPVEFUSU9OIixTOiJTVFJJS0VUSFJPVUdIX1RFWFQiLFNNQUxMOiJTTUFMTF9URVhUIixTVUI6IlNVQlNUUklQVCIsU1VQOiJTVVBFUlNDUklQVCIsVEJPRFk6IlRBQkxFX0JPRFkiLFREOiJUQUJMRV9DRUxMIixURk9PVDoiVEFCTEVfRk9PVEVSIixUSDoiVEFCTEVfSEVBREVSX0NFTEwiLFRIRUFEOiJUQUJMRV9IRUFERVIiLFRSOiJUQUJMRV9ST1ciLFRUOiJNT05PU1BBQ0VEX1RFWFQiLFU6IlVOREVSTElORURfVEVYVCIsVUw6IlVOT1JERVJFRF9MSVNUIn0sU1Y9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9wbGFjZUhvbGRlck5hbWVDb3VudHM9e30sdGhpcy5fc2lnbmF0dXJlVG9OYW1lPXt9fWdldFN0YXJ0VGFnUGxhY2Vob2xkZXJOYW1lKHQsZSxpKXtsZXQgcj10aGlzLl9oYXNoVGFnKHQsZSxpKTtpZih0aGlzLl9zaWduYXR1cmVUb05hbWVbcl0pcmV0dXJuIHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtyXTtsZXQgbz10LnRvVXBwZXJDYXNlKCkscz15UVtvXXx8YFRBR18ke299YCxhPXRoaXMuX2dlbmVyYXRlVW5pcXVlTmFtZShpP3M6YFNUQVJUXyR7c31gKTtyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW3JdPWEsYX1nZXRDbG9zZVRhZ1BsYWNlaG9sZGVyTmFtZSh0KXtsZXQgZT10aGlzLl9oYXNoQ2xvc2luZ1RhZyh0KTtpZih0aGlzLl9zaWduYXR1cmVUb05hbWVbZV0pcmV0dXJuIHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtlXTtsZXQgaT10LnRvVXBwZXJDYXNlKCksbz10aGlzLl9nZW5lcmF0ZVVuaXF1ZU5hbWUoYENMT1NFXyR7eVFbaV18fGBUQUdfJHtpfWB9YCk7cmV0dXJuIHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtlXT1vLG99Z2V0UGxhY2Vob2xkZXJOYW1lKHQsZSl7bGV0IGk9dC50b1VwcGVyQ2FzZSgpLHI9YFBIOiAke2l9PSR7ZX1gO2lmKHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtyXSlyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW3JdO2xldCBvPXRoaXMuX2dlbmVyYXRlVW5pcXVlTmFtZShpKTtyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW3JdPW8sb31nZXRVbmlxdWVQbGFjZWhvbGRlcih0KXtyZXR1cm4gdGhpcy5fZ2VuZXJhdGVVbmlxdWVOYW1lKHQudG9VcHBlckNhc2UoKSl9X2hhc2hUYWcodCxlLGkpe3JldHVybmA8JHt0fWArT2JqZWN0LmtleXMoZSkuc29ydCgpLm1hcChhPT5gICR7YX09JHtlW2FdfWApLmpvaW4oIiIpKyhpPyIvPiI6YD48LyR7dH0+YCl9X2hhc2hDbG9zaW5nVGFnKHQpe3JldHVybiB0aGlzLl9oYXNoVGFnKGAvJHt0fWAse30sITEpfV9nZW5lcmF0ZVVuaXF1ZU5hbWUodCl7aWYoIXRoaXMuX3BsYWNlSG9sZGVyTmFtZUNvdW50cy5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gdGhpcy5fcGxhY2VIb2xkZXJOYW1lQ291bnRzW3RdPTEsdDtsZXQgaT10aGlzLl9wbGFjZUhvbGRlck5hbWVDb3VudHNbdF07cmV0dXJuIHRoaXMuX3BsYWNlSG9sZGVyTmFtZUNvdW50c1t0XT1pKzEsYCR7dH1fJHtpfWB9fSxZRWU9bmV3IGJEKG5ldyB5RCk7ZnVuY3Rpb24gUUVlKG4sdCl7cmV0dXJuIHR9dmFyICRFZT0vXC9cL1tcc1xTXSppMThuW1xzXFNdKlwoW1xzXFNdKnBoW1xzXFNdKj1bXHNcU10qKCJ8JykoW1xzXFNdKj8pXDFbXHNcU10qXCkvZyxUVj1jbGFzcyBleHRlbmRzIHlte2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKX19LHQxZT0obix0KT0+KG4gaW5zdGFuY2VvZiBDbSYmKHQgaW5zdGFuY2VvZiBUXyYmbi5pMThuIGluc3RhbmNlb2YgRnUmJih0LnByZXZpb3VzTWVzc2FnZT1uLmkxOG4pLG4uaTE4bj10KSx0KSxFRD1jbGFzc3tjb25zdHJ1Y3Rvcih0PVB1LGU9ITEsaT0hMSl7dGhpcy5pbnRlcnBvbGF0aW9uQ29uZmlnPXQsdGhpcy5rZWVwSTE4bkF0dHJzPWUsdGhpcy5lbmFibGVJMThuTGVnYWN5TWVzc2FnZUlkRm9ybWF0PWksdGhpcy5oYXNJMThuTWV0YT0hMSx0aGlzLl9lcnJvcnM9W10sdGhpcy5fY3JlYXRlSTE4bk1lc3NhZ2U9ZnVuY3Rpb24obil7bGV0IHQ9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fZXhwcmVzc2lvblBhcnNlcj10LHRoaXMuX2ludGVycG9sYXRpb25Db25maWc9ZX10b0kxOG5NZXNzYWdlKHQsZT0iIixpPSIiLHI9IiIsbyl7bGV0IHM9e2lzSWN1OjE9PXQubGVuZ3RoJiZ0WzBdaW5zdGFuY2VvZiBOXyxpY3VEZXB0aDowLHBsYWNlaG9sZGVyUmVnaXN0cnk6bmV3IFNWLHBsYWNlaG9sZGVyVG9Db250ZW50Ont9LHBsYWNlaG9sZGVyVG9NZXNzYWdlOnt9LHZpc2l0Tm9kZUZuOm98fFFFZX0sYT1VdSh0aGlzLHQscyk7cmV0dXJuIG5ldyBGdShhLHMucGxhY2Vob2xkZXJUb0NvbnRlbnQscy5wbGFjZWhvbGRlclRvTWVzc2FnZSxlLGkscil9dmlzaXRFbGVtZW50KHQsZSl7bGV0IGk9VXUodGhpcyx0LmNoaWxkcmVuLGUpLHI9e307dC5hdHRycy5mb3JFYWNoKGM9PntyW2MubmFtZV09Yy52YWx1ZX0pO2xldCBvPUZWKHQubmFtZSkuaXNWb2lkLHM9ZS5wbGFjZWhvbGRlclJlZ2lzdHJ5LmdldFN0YXJ0VGFnUGxhY2Vob2xkZXJOYW1lKHQubmFtZSxyLG8pO2UucGxhY2Vob2xkZXJUb0NvbnRlbnRbc109e3RleHQ6dC5zdGFydFNvdXJjZVNwYW4udG9TdHJpbmcoKSxzb3VyY2VTcGFuOnQuc3RhcnRTb3VyY2VTcGFufTtsZXQgYT0iIjtvfHwoYT1lLnBsYWNlaG9sZGVyUmVnaXN0cnkuZ2V0Q2xvc2VUYWdQbGFjZWhvbGRlck5hbWUodC5uYW1lKSxlLnBsYWNlaG9sZGVyVG9Db250ZW50W2FdPXt0ZXh0OmA8LyR7dC5uYW1lfT5gLHNvdXJjZVNwYW46dC5lbmRTb3VyY2VTcGFuPz90LnNvdXJjZVNwYW59KTtsZXQgbD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3RoaXMudGFnPXQsdGhpcy5hdHRycz1lLHRoaXMuc3RhcnROYW1lPWksdGhpcy5jbG9zZU5hbWU9cix0aGlzLmNoaWxkcmVuPW8sdGhpcy5pc1ZvaWQ9cyx0aGlzLnNvdXJjZVNwYW49YSx0aGlzLnN0YXJ0U291cmNlU3Bhbj1sLHRoaXMuZW5kU291cmNlU3Bhbj1jfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRUYWdQbGFjZWhvbGRlcih0aGlzLGUpfX0odC5uYW1lLHIscyxhLGksbyx0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuKTtyZXR1cm4gZS52aXNpdE5vZGVGbih0LGwpfXZpc2l0QXR0cmlidXRlKHQsZSl7bGV0IGk9dm9pZCAwPT09dC52YWx1ZVRva2Vuc3x8MT09PXQudmFsdWVUb2tlbnMubGVuZ3RoP25ldyBsXyh0LnZhbHVlLHQudmFsdWVTcGFufHx0LnNvdXJjZVNwYW4pOnRoaXMuX3Zpc2l0VGV4dFdpdGhJbnRlcnBvbGF0aW9uKHQudmFsdWVUb2tlbnMsdC52YWx1ZVNwYW58fHQuc291cmNlU3BhbixlLHQuaTE4bik7cmV0dXJuIGUudmlzaXROb2RlRm4odCxpKX12aXNpdFRleHQodCxlKXtsZXQgaT0xPT09dC50b2tlbnMubGVuZ3RoP25ldyBsXyh0LnZhbHVlLHQuc291cmNlU3Bhbik6dGhpcy5fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odC50b2tlbnMsdC5zb3VyY2VTcGFuLGUsdC5pMThuKTtyZXR1cm4gZS52aXNpdE5vZGVGbih0LGkpfXZpc2l0Q29tbWVudCh0LGUpe3JldHVybiBudWxsfXZpc2l0RXhwYW5zaW9uKHQsZSl7ZS5pY3VEZXB0aCsrO2xldCBpPXt9LHI9bmV3IGFEKHQuc3dpdGNoVmFsdWUsdC50eXBlLGksdC5zb3VyY2VTcGFuKTtpZih0LmNhc2VzLmZvckVhY2goYT0+e2lbYS52YWx1ZV09bmV3IG1tKGEuZXhwcmVzc2lvbi5tYXAobD0+bC52aXNpdCh0aGlzLGUpKSxhLmV4cFNvdXJjZVNwYW4pfSksZS5pY3VEZXB0aC0tLGUuaXNJY3V8fGUuaWN1RGVwdGg+MCl7bGV0IGE9ZS5wbGFjZWhvbGRlclJlZ2lzdHJ5LmdldFVuaXF1ZVBsYWNlaG9sZGVyKGBWQVJfJHt0LnR5cGV9YCk7cmV0dXJuIHIuZXhwcmVzc2lvblBsYWNlaG9sZGVyPWEsZS5wbGFjZWhvbGRlclRvQ29udGVudFthXT17dGV4dDp0LnN3aXRjaFZhbHVlLHNvdXJjZVNwYW46dC5zd2l0Y2hWYWx1ZVNvdXJjZVNwYW59LGUudmlzaXROb2RlRm4odCxyKX1sZXQgbz1lLnBsYWNlaG9sZGVyUmVnaXN0cnkuZ2V0UGxhY2Vob2xkZXJOYW1lKCJJQ1UiLHQuc291cmNlU3Bhbi50b1N0cmluZygpKTtlLnBsYWNlaG9sZGVyVG9NZXNzYWdlW29dPXRoaXMudG9JMThuTWVzc2FnZShbdF0sIiIsIiIsIiIsdm9pZCAwKTtsZXQgcz1uZXcgVF8ocixvLHQuc291cmNlU3Bhbik7cmV0dXJuIGUudmlzaXROb2RlRm4odCxzKX12aXNpdEV4cGFuc2lvbkNhc2UodCxlKXt0aHJvdyBuZXcgRXJyb3IoIlVucmVhY2hhYmxlIGNvZGUiKX1fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odCxlLGkscil7bGV0IG89W10scz0hMTtmb3IobGV0IGEgb2YgdClzd2l0Y2goYS50eXBlKXtjYXNlIDg6Y2FzZSAxNzpzPSEwO2xldCBsPWEucGFydHNbMV0sYz1sLnNwbGl0KCRFZSlbMl18fCJJTlRFUlBPTEFUSU9OIix1PWkucGxhY2Vob2xkZXJSZWdpc3RyeS5nZXRQbGFjZWhvbGRlck5hbWUoYyxsKTtpLnBsYWNlaG9sZGVyVG9Db250ZW50W3VdPXt0ZXh0OmEucGFydHMuam9pbigiIiksc291cmNlU3BhbjphLnNvdXJjZVNwYW59LG8ucHVzaChuZXcgbEQobCx1LGEuc291cmNlU3BhbikpO2JyZWFrO2RlZmF1bHQ6aWYoYS5wYXJ0c1swXS5sZW5ndGg+MCl7bGV0IGQ9b1tvLmxlbmd0aC0xXTtkIGluc3RhbmNlb2YgbF8/KGQudmFsdWUrPWEucGFydHNbMF0sZC5zb3VyY2VTcGFuPW5ldyBHbyhkLnNvdXJjZVNwYW4uc3RhcnQsYS5zb3VyY2VTcGFuLmVuZCxkLnNvdXJjZVNwYW4uZnVsbFN0YXJ0LGQuc291cmNlU3Bhbi5kZXRhaWxzKSk6by5wdXNoKG5ldyBsXyhhLnBhcnRzWzBdLGEuc291cmNlU3BhbikpfX1yZXR1cm4gcz8oZnVuY3Rpb24obix0KXtpZih0IGluc3RhbmNlb2YgRnUmJihmdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVzO2lmKDEhPT10Lmxlbmd0aHx8ISh0WzBdaW5zdGFuY2VvZiBtbSkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHByZXZpb3VzIGkxOG4gbWVzc2FnZSAtIGV4cGVjdGVkIGl0IHRvIGNvbnNpc3Qgb2Ygb25seSBhIHNpbmdsZSBgQ29udGFpbmVyYCBub2RlLiIpfSh0KSx0PXQubm9kZXNbMF0pLHQgaW5zdGFuY2VvZiBtbSl7IWZ1bmN0aW9uKG4sdCl7aWYobi5sZW5ndGghPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBudW1iZXIgb2YgaTE4biBtZXNzYWdlIGNoaWxkcmVuIGNoYW5nZWQgYmV0d2VlbiBmaXJzdCBhbmQgc2Vjb25kIHBhc3MuIik7aWYobi5zb21lKChlLGkpPT50W2ldLmNvbnN0cnVjdG9yIT09ZS5jb25zdHJ1Y3RvcikpdGhyb3cgbmV3IEVycm9yKCJUaGUgdHlwZXMgb2YgdGhlIGkxOG4gbWVzc2FnZSBjaGlsZHJlbiBjaGFuZ2VkIGJldHdlZW4gZmlyc3QgYW5kIHNlY29uZCBwYXNzLiIpfSh0LmNoaWxkcmVuLG4pO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0uc291cmNlU3Bhbj10LmNoaWxkcmVuW2VdLnNvdXJjZVNwYW59fShvLHIpLG5ldyBtbShvLGUpKTpvWzBdfX0oWUVlLG4pO3JldHVybihlLGkscixvLHMpPT50LnRvSTE4bk1lc3NhZ2UoZSxpLHIsbyxzKX0odGhpcy5pbnRlcnBvbGF0aW9uQ29uZmlnKX1fZ2VuZXJhdGVJMThuTWVzc2FnZSh0LGU9IiIsaSl7bGV0e21lYW5pbmc6cixkZXNjcmlwdGlvbjpvLGN1c3RvbUlkOnN9PXRoaXMuX3BhcnNlTWV0YWRhdGEoZSksYT10aGlzLl9jcmVhdGVJMThuTWVzc2FnZSh0LHIsbyxzLGkpO3JldHVybiB0aGlzLl9zZXRNZXNzYWdlSWQoYSxlKSx0aGlzLl9zZXRMZWdhY3lJZHMoYSxlKSxhfXZpc2l0QWxsV2l0aEVycm9ycyh0KXtsZXQgZT10Lm1hcChpPT5pLnZpc2l0KHRoaXMsbnVsbCkpO3JldHVybiBuZXcgTUQoZSx0aGlzLl9lcnJvcnMpfXZpc2l0RWxlbWVudCh0KXtsZXQgZTtpZihmdW5jdGlvbihuKXtyZXR1cm4gbi5hdHRycy5zb21lKHQ9PmZ1bmN0aW9uKG4pe3JldHVybiJpMThuIj09PW58fG4uc3RhcnRzV2l0aChqQil9KHQubmFtZSkpfSh0KSl7dGhpcy5oYXNJMThuTWV0YT0hMDtsZXQgaT1bXSxyPXt9O2ZvcihsZXQgbyBvZiB0LmF0dHJzKWlmKCJpMThuIj09PW8ubmFtZSllPXRoaXMuX2dlbmVyYXRlSTE4bk1lc3NhZ2UodC5jaGlsZHJlbix0LmkxOG58fG8udmFsdWUsdDFlKSwwPT09ZS5ub2Rlcy5sZW5ndGgmJihlPXZvaWQgMCksdC5pMThuPWU7ZWxzZSBpZihvLm5hbWUuc3RhcnRzV2l0aChqQikpe2xldCBzPW8ubmFtZS5zbGljZShqQi5sZW5ndGgpO3hLKHQubmFtZSxzKT90aGlzLl9yZXBvcnRFcnJvcihvLGBUcmFuc2xhdGluZyBhdHRyaWJ1dGUgJyR7c30nIGlzIGRpc2FsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuYCk6cltzXT1vLnZhbHVlfWVsc2UgaS5wdXNoKG8pO2lmKE9iamVjdC5rZXlzKHIpLmxlbmd0aClmb3IobGV0IG8gb2YgaSl7bGV0IHM9cltvLm5hbWVdO3ZvaWQgMCE9PXMmJm8udmFsdWUmJihvLmkxOG49dGhpcy5fZ2VuZXJhdGVJMThuTWVzc2FnZShbb10sby5pMThufHxzKSl9dGhpcy5rZWVwSTE4bkF0dHJzfHwodC5hdHRycz1pKX1yZXR1cm4gVXUodGhpcyx0LmNoaWxkcmVuLGUpLHR9dmlzaXRFeHBhbnNpb24odCxlKXtsZXQgaSxyPXQuaTE4bjtpZih0aGlzLmhhc0kxOG5NZXRhPSEwLHIgaW5zdGFuY2VvZiBUXyl7bGV0IG89ci5uYW1lO2k9dGhpcy5fZ2VuZXJhdGVJMThuTWVzc2FnZShbdF0sciksV1EoaSkubmFtZT1vLG51bGwhPT1lJiYoZS5wbGFjZWhvbGRlclRvTWVzc2FnZVtvXT1pKX1lbHNlIGk9dGhpcy5fZ2VuZXJhdGVJMThuTWVzc2FnZShbdF0sZXx8cik7cmV0dXJuIHQuaTE4bj1pLHR9dmlzaXRUZXh0KHQpe3JldHVybiB0fXZpc2l0QXR0cmlidXRlKHQpe3JldHVybiB0fXZpc2l0Q29tbWVudCh0KXtyZXR1cm4gdH12aXNpdEV4cGFuc2lvbkNhc2UodCl7cmV0dXJuIHR9X3BhcnNlTWV0YWRhdGEodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKG49IiIpe2xldCB0LGUsaTtpZihuPW4udHJpbSgpKXtsZXQgcyxyPW4uaW5kZXhPZigiQEAiKSxvPW4uaW5kZXhPZigifCIpO1tzLHRdPXI+LTE/W24uc2xpY2UoMCxyKSxuLnNsaWNlKHIrMildOltuLCIiXSxbZSxpXT1vPi0xP1tzLnNsaWNlKDAsbykscy5zbGljZShvKzEpXTpbIiIsc119cmV0dXJue2N1c3RvbUlkOnQsbWVhbmluZzplLGRlc2NyaXB0aW9uOml9fSh0KTp0IGluc3RhbmNlb2YgRnU/dDp7fX1fc2V0TWVzc2FnZUlkKHQsZSl7dmFyIG47dC5pZHx8KHQuaWQ9ZSBpbnN0YW5jZW9mIEZ1JiZlLmlkfHwobj10KS5pZHx8RlEobikpfV9zZXRMZWdhY3lJZHModCxlKXtpZih0aGlzLmVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQpdC5sZWdhY3lJZHM9W1NNZSh0KSxGUSh0KV07ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUpe2xldCBpPWUgaW5zdGFuY2VvZiBGdT9lOmUgaW5zdGFuY2VvZiBUXz9lLnByZXZpb3VzTWVzc2FnZTp2b2lkIDA7dC5sZWdhY3lJZHM9aT9pLmxlZ2FjeUlkczpbXX19X3JlcG9ydEVycm9yKHQsZSl7dGhpcy5fZXJyb3JzLnB1c2gobmV3IFRWKHQuc291cmNlU3BhbixlKSl9fTtmdW5jdGlvbiBhMWUobix0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obil7cmV0dXJuIG4ubm9kZXMubWFwKHQ9PnQudmlzaXQobDFlLG51bGwpKS5qb2luKCIiKX0odCksbz1baHQocildO09iamVjdC5rZXlzKGkpLmxlbmd0aCYmKG8ucHVzaCh3RChVVihpLCEwKSwhMCkpLG8ucHVzaCh3RCh7b3JpZ2luYWxfY29kZTpxbChPYmplY3Qua2V5cyhpKS5tYXAobD0+KHtrZXk6SkMobCkscXVvdGVkOiEwLHZhbHVlOmh0KHQucGxhY2Vob2xkZXJzW2xdP3QucGxhY2Vob2xkZXJzW2xdLnNvdXJjZVNwYW4udG9TdHJpbmcoKTp0LnBsYWNlaG9sZGVyVG9NZXNzYWdlW2xdLm5vZGVzLm1hcChjPT5jLnNvdXJjZVNwYW4udG9TdHJpbmcoKSkuam9pbigiIikpfSkpKX0pKSk7bGV0IHM9ZS5zZXQoUmkoImdvb2cuZ2V0TXNnIikuY2FsbEZuKG8pKS50b0NvbnN0RGVjbCgpO3JldHVybiBzLmFkZExlYWRpbmdDb21tZW50KGZ1bmN0aW9uKG4pe2xldCB0PVtdO3JldHVybiB0LnB1c2gobi5kZXNjcmlwdGlvbj97dGFnTmFtZToiZGVzYyIsdGV4dDpuLmRlc2NyaXB0aW9ufTp7dGFnTmFtZToic3VwcHJlc3MiLHRleHQ6Inttc2dEZXNjcmlwdGlvbnN9In0pLG4ubWVhbmluZyYmdC5wdXNoKHt0YWdOYW1lOiJtZWFuaW5nIix0ZXh0Om4ubWVhbmluZ30pLGZ1bmN0aW9uKG49W10pe3JldHVybiBuZXcgbkQobil9KHQpfSh0KSksW3MsbmV3IEh1KG4uc2V0KGUpKV19dmFyIGwxZT1uZXcgY2xhc3N7Zm9ybWF0UGgodCl7cmV0dXJuYHskJHtKQyh0KX19YH12aXNpdFRleHQodCl7cmV0dXJuIHQudmFsdWV9dmlzaXRDb250YWluZXIodCl7cmV0dXJuIHQuY2hpbGRyZW4ubWFwKGU9PmUudmlzaXQodGhpcykpLmpvaW4oIiIpfXZpc2l0SWN1KHQpe3JldHVybiBNSyh0KX12aXNpdFRhZ1BsYWNlaG9sZGVyKHQpe3JldHVybiB0LmlzVm9pZD90aGlzLmZvcm1hdFBoKHQuc3RhcnROYW1lKTpgJHt0aGlzLmZvcm1hdFBoKHQuc3RhcnROYW1lKX0ke3QuY2hpbGRyZW4ubWFwKGU9PmUudmlzaXQodGhpcykpLmpvaW4oIiIpfSR7dGhpcy5mb3JtYXRQaCh0LmNsb3NlTmFtZSl9YH12aXNpdFBsYWNlaG9sZGVyKHQpe3JldHVybiB0aGlzLmZvcm1hdFBoKHQubmFtZSl9dmlzaXRJY3VQbGFjZWhvbGRlcih0LGUpe3JldHVybiB0aGlzLmZvcm1hdFBoKHQubmFtZSl9fTtmdW5jdGlvbiB1MWUobix0LGUpe2xldHttZXNzYWdlUGFydHM6aSxwbGFjZUhvbGRlcnM6cn09ZnVuY3Rpb24obil7bGV0IHQ9W10sZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnBsYWNlaG9sZGVyVG9NZXNzYWdlPXQsdGhpcy5waWVjZXM9ZX12aXNpdFRleHQodCl7aWYodGhpcy5waWVjZXNbdGhpcy5waWVjZXMubGVuZ3RoLTFdaW5zdGFuY2VvZiBsbSl0aGlzLnBpZWNlc1t0aGlzLnBpZWNlcy5sZW5ndGgtMV0udGV4dCs9dC52YWx1ZTtlbHNle2xldCBlPW5ldyBHbyh0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0LHQuc291cmNlU3Bhbi5lbmQsdC5zb3VyY2VTcGFuLmZ1bGxTdGFydCx0LnNvdXJjZVNwYW4uZGV0YWlscyk7dGhpcy5waWVjZXMucHVzaChuZXcgbG0odC52YWx1ZSxlKSl9fXZpc2l0Q29udGFpbmVyKHQpe3QuY2hpbGRyZW4uZm9yRWFjaChlPT5lLnZpc2l0KHRoaXMpKX12aXNpdEljdSh0KXt0aGlzLnBpZWNlcy5wdXNoKG5ldyBsbShNSyh0KSx0LnNvdXJjZVNwYW4pKX12aXNpdFRhZ1BsYWNlaG9sZGVyKHQpe3RoaXMucGllY2VzLnB1c2godGhpcy5jcmVhdGVQbGFjZWhvbGRlclBpZWNlKHQuc3RhcnROYW1lLHQuc3RhcnRTb3VyY2VTcGFuPz90LnNvdXJjZVNwYW4pKSx0LmlzVm9pZHx8KHQuY2hpbGRyZW4uZm9yRWFjaChlPT5lLnZpc2l0KHRoaXMpKSx0aGlzLnBpZWNlcy5wdXNoKHRoaXMuY3JlYXRlUGxhY2Vob2xkZXJQaWVjZSh0LmNsb3NlTmFtZSx0LmVuZFNvdXJjZVNwYW4/P3Quc291cmNlU3BhbikpKX12aXNpdFBsYWNlaG9sZGVyKHQpe3RoaXMucGllY2VzLnB1c2godGhpcy5jcmVhdGVQbGFjZWhvbGRlclBpZWNlKHQubmFtZSx0LnNvdXJjZVNwYW4pKX12aXNpdEljdVBsYWNlaG9sZGVyKHQpe3RoaXMucGllY2VzLnB1c2godGhpcy5jcmVhdGVQbGFjZWhvbGRlclBpZWNlKHQubmFtZSx0LnNvdXJjZVNwYW4sdGhpcy5wbGFjZWhvbGRlclRvTWVzc2FnZVt0Lm5hbWVdKSl9Y3JlYXRlUGxhY2Vob2xkZXJQaWVjZSh0LGUsaSl7cmV0dXJuIG5ldyBoXyhKQyh0LCExKSxlLGkpfX0obi5wbGFjZWhvbGRlclRvTWVzc2FnZSx0KTtyZXR1cm4gbi5ub2Rlcy5mb3JFYWNoKGk9PmkudmlzaXQoZSkpLGZ1bmN0aW9uKG4pe2xldCB0PVtdLGU9W107blswXWluc3RhbmNlb2YgaF8mJnQucHVzaCh2QihuWzBdLnNvdXJjZVNwYW4uc3RhcnQpKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IHI9bltpXTtyIGluc3RhbmNlb2YgbG0/dC5wdXNoKHIpOihlLnB1c2gociksbltpLTFdaW5zdGFuY2VvZiBoXyYmdC5wdXNoKHZCKG5baS0xXS5zb3VyY2VTcGFuLmVuZCkpKX1yZXR1cm4gbltuLmxlbmd0aC0xXWluc3RhbmNlb2YgaF8mJnQucHVzaCh2QihuW24ubGVuZ3RoLTFdLnNvdXJjZVNwYW4uZW5kKSkse21lc3NhZ2VQYXJ0czp0LHBsYWNlSG9sZGVyczplfX0odCl9KHQpLG89ZnVuY3Rpb24obil7bGV0IHQ9bi5ub2Rlc1swXTtyZXR1cm4gbmV3IEdvKHQuc291cmNlU3Bhbi5mdWxsU3RhcnQsbi5ub2Rlc1tuLm5vZGVzLmxlbmd0aC0xXS5zb3VyY2VTcGFuLmVuZCx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0LHQuc291cmNlU3Bhbi5kZXRhaWxzKX0odCkscz1yLm1hcChjPT5lW2MudGV4dF0pLGE9ZnVuY3Rpb24obix0LGUsaSxyKXtyZXR1cm4gbmV3IEFCKG4sdCxlLGkscil9KHQsaSxyLHMsbyksbD1uLnNldChhKTtyZXR1cm5bbmV3IEh1KGwpXX1mdW5jdGlvbiB2QihuKXtyZXR1cm4gbmV3IGxtKCIiLG5ldyBHbyhuLG4pKX12YXIgd0s9bmV3IFNldChbIiRldmVudCJdKSx5Qj1uZXcgTWFwKFtbIndpbmRvdyIsdGUucmVzb2x2ZVdpbmRvd10sWyJkb2N1bWVudCIsdGUucmVzb2x2ZURvY3VtZW50XSxbImJvZHkiLHRlLnJlc29sdmVCb2R5XV0pLGcxZT1bIiAiLCJcbiIsIlxyIiwiXHQiXTtmdW5jdGlvbiBsaChuLHQpe3JldHVybiBWVihSaSgkQykuYml0d2lzZUFuZChodChuKSxudWxsLCExKSx0KX1mdW5jdGlvbiBTSyhuLHQ9bnVsbCxlPW51bGwpe2xldHt0eXBlOmksbmFtZTpyLHRhcmdldDpvLHBoYXNlOnMsaGFuZGxlcjphfT1uO2lmKG8mJiF5Qi5oYXMobykpdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGdsb2JhbCB0YXJnZXQgJyR7b30nIGRlZmluZWQgZm9yICcke3J9JyBldmVudC5cbiAgICAgICAgU3VwcG9ydGVkIGxpc3Qgb2YgZ2xvYmFsIHRhcmdldHM6ICR7QXJyYXkuZnJvbSh5Qi5rZXlzKCkpfS5gKTtsZXQgbD0iJGV2ZW50IixjPW5ldyBTZXQsdT1udWxsPT09ZXx8MD09PWUuYmluZGluZ0xldmVsP1JpKEhjKTplLmdldE9yQ3JlYXRlU2hhcmVkQ29udGV4dFZhcigwKSxkPWNTZShlLHUsYSwiYiIsbi5oYW5kbGVyU3BhbixjLHdLKSxwPVtdLGg9ZT8udmFyaWFibGVEZWNsYXJhdGlvbnMoKSxmPWU/LnJlc3RvcmVWaWV3U3RhdGVtZW50KCk7aWYoaCYmcC5wdXNoKC4uLmgpLHAucHVzaCguLi5kKSxmKXtwLnVuc2hpZnQoZik7bGV0IFQ9cFtwLmxlbmd0aC0xXTtUIGluc3RhbmNlb2YgRG8/cFtwLmxlbmd0aC0xXT1uZXcgRG8oZ20oVC52YWx1ZS5zb3VyY2VTcGFuLHRlLnJlc2V0VmlldyxbVC52YWx1ZV0pKTpwLnB1c2gobmV3IEh1KGdtKG51bGwsdGUucmVzZXRWaWV3LFtdKSkpfWxldCBtPTE9PT1pP2Z1bmN0aW9uKG4sdCl7cmV0dXJuYEAke259LiR7dH1gfShyLHMpOnIseD10JiZtXyh0KSxnPVtdO2MuaGFzKGwpJiZnLnB1c2gobmV3IGlhKGwsVl8pKTtsZXQgYj1yYShnLHAsUGEsbnVsbCx4KSxEPVtodChtKSxiXTtyZXR1cm4gbyYmRC5wdXNoKGh0KCExKSxUbih5Qi5nZXQobykpKSxEfXZhciBLQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT0wLHIsbyxzLGEsbCxjLHUsZD1mdW5jdGlvbigpe3JldHVybntwcmVwYXJlU3RhdGVtZW50czpbXSxjb25zdEV4cHJlc3Npb25zOltdLGkxOG5WYXJSZWZzQ2FjaGU6bmV3IE1hcH19KCkpe3RoaXMuY29uc3RhbnRQb29sPXQsdGhpcy5sZXZlbD1pLHRoaXMuY29udGV4dE5hbWU9cix0aGlzLmkxOG5Db250ZXh0PW8sdGhpcy50ZW1wbGF0ZUluZGV4PXMsdGhpcy50ZW1wbGF0ZU5hbWU9YSx0aGlzLl9uYW1lc3BhY2U9bCx0aGlzLmkxOG5Vc2VFeHRlcm5hbElkcz11LHRoaXMuX2NvbnN0YW50cz1kLHRoaXMuX2RhdGFJbmRleD0wLHRoaXMuX2JpbmRpbmdDb250ZXh0PTAsdGhpcy5fcHJlZml4Q29kZT1bXSx0aGlzLl9jcmVhdGlvbkNvZGVGbnM9W10sdGhpcy5fdXBkYXRlQ29kZUZucz1bXSx0aGlzLl9jdXJyZW50SW5kZXg9MCx0aGlzLl90ZW1wVmFyaWFibGVzPVtdLHRoaXMuX25lc3RlZFRlbXBsYXRlRm5zPVtdLHRoaXMuaTE4bj1udWxsLHRoaXMuX3B1cmVGdW5jdGlvblNsb3RzPTAsdGhpcy5fYmluZGluZ1Nsb3RzPTAsdGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cz1bXSx0aGlzLl9uZ0NvbnRlbnRTZWxlY3RvcnNPZmZzZXQ9MCx0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj1udWxsLHRoaXMudmlzaXRSZWZlcmVuY2U9aUMsdGhpcy52aXNpdFZhcmlhYmxlPWlDLHRoaXMudmlzaXRUZXh0QXR0cmlidXRlPWlDLHRoaXMudmlzaXRCb3VuZEF0dHJpYnV0ZT1pQyx0aGlzLnZpc2l0Qm91bmRFdmVudD1pQyx0aGlzLl9iaW5kaW5nU2NvcGU9ZS5uZXN0ZWRTY29wZShpKSx0aGlzLmZpbGVCYXNlZEkxOG5TdWZmaXg9Yy5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywiXyIpKyJfIix0aGlzLl92YWx1ZUNvbnZlcnRlcj1uZXcgVEQodCwoKT0+dGhpcy5hbGxvY2F0ZURhdGFTbG90KCkscD0+dGhpcy5hbGxvY2F0ZVB1cmVGdW5jdGlvblNsb3RzKHApLChwLGgsZixtKT0+e3RoaXMuX2JpbmRpbmdTY29wZS5zZXQodGhpcy5sZXZlbCxoLG0pLHRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbihudWxsLHRlLnBpcGUsW2h0KGYpLGh0KHApXSl9KX1idWlsZFRlbXBsYXRlRnVuY3Rpb24odCxlLGk9MCxyKXt0aGlzLl9uZ0NvbnRlbnRTZWxlY3RvcnNPZmZzZXQ9aSx0aGlzLl9uYW1lc3BhY2UhPT10ZS5uYW1lc3BhY2VIVE1MJiZ0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24obnVsbCx0aGlzLl9uYW1lc3BhY2UpLGUuZm9yRWFjaChoPT50aGlzLnJlZ2lzdGVyQ29udGV4dFZhcmlhYmxlcyhoKSk7bGV0IG89dGhpcy5pMThuQ29udGV4dHx8QUMocikmJiFWVChyKSYmISgxPT09KG49dCkubGVuZ3RoJiZuWzBdaW5zdGFuY2VvZiBFXyYmdFswXS5pMThuPT09cikscz1iQih0KTt2YXIgbjtpZihvJiZ0aGlzLmkxOG5TdGFydChudWxsLHIscyksQVgodGhpcyx0KSx0aGlzLl9wdXJlRnVuY3Rpb25TbG90cys9dGhpcy5fYmluZGluZ1Nsb3RzLHRoaXMuX3ZhbHVlQ29udmVydGVyLnVwZGF0ZVBpcGVTbG90T2Zmc2V0cyh0aGlzLl9iaW5kaW5nU2xvdHMpLHRoaXMuX25lc3RlZFRlbXBsYXRlRm5zLmZvckVhY2goaD0+aCgpKSwwPT09dGhpcy5sZXZlbCYmdGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cy5sZW5ndGgpe2xldCBoPVtdO2lmKHRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoPjF8fCIqIiE9PXRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHNbMF0pe2xldCBmPXRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubWFwKG09PiIqIiE9PW0/TlYobSk6bSk7aC5wdXNoKHRoaXMuY29uc3RhbnRQb29sLmdldENvbnN0TGl0ZXJhbChOdShmKSwhMCkpfXRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbihudWxsLHRlLnByb2plY3Rpb25EZWYsaCwhMCl9byYmdGhpcy5pMThuRW5kKG51bGwscyk7bGV0IGE9Y0QodGhpcy5fY3JlYXRpb25Db2RlRm5zKSxsPWNEKHRoaXMuX3VwZGF0ZUNvZGVGbnMpLGM9dGhpcy5fYmluZGluZ1Njb3BlLnZpZXdTbmFwc2hvdFN0YXRlbWVudHMoKSx1PXRoaXMuX2JpbmRpbmdTY29wZS52YXJpYWJsZURlY2xhcmF0aW9ucygpLmNvbmNhdCh0aGlzLl90ZW1wVmFyaWFibGVzKSxkPWEubGVuZ3RoPjA/W2xoKDEsYy5jb25jYXQoYSkpXTpbXSxwPWwubGVuZ3RoPjA/W2xoKDIsdS5jb25jYXQobCkpXTpbXTtyZXR1cm4gcmEoW25ldyBpYSgkQyxaQyksbmV3IGlhKEhjLG51bGwpXSxbLi4udGhpcy5fcHJlZml4Q29kZSwuLi5kLC4uLnBdLFBhLG51bGwsdGhpcy50ZW1wbGF0ZU5hbWUpfWdldExvY2FsKHQpe3JldHVybiB0aGlzLl9iaW5kaW5nU2NvcGUuZ2V0KHQpfW5vdGlmeUltcGxpY2l0UmVjZWl2ZXJVc2UoKXt0aGlzLl9iaW5kaW5nU2NvcGUubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpfW1heWJlUmVzdG9yZVZpZXcoKXt0aGlzLl9iaW5kaW5nU2NvcGUubWF5YmVSZXN0b3JlVmlldygpfWkxOG5UcmFuc2xhdGUodCxlPXt9LGkscil7bGV0IG89aXx8dGhpcy5pMThuR2VuZXJhdGVNYWluQmxvY2tWYXIoKSxhPWZ1bmN0aW9uKG4sdCxlLGk9e30scil7bGV0IG89W0V3ZSh0KSxWVihCVihSaShNUSkpLm5vdElkZW50aWNhbChodCgidW5kZWZpbmVkIixMUSkpLmFuZChSaShNUSkpLGExZSh0LG4sZSxpKSx1MWUodCxuLFVWKGksITEpKSldO3JldHVybiByJiZvLnB1c2gobmV3IEh1KHQuc2V0KHIodCkpKSksb30odCxvLHRoaXMuaTE4bkdlbmVyYXRlQ2xvc3VyZVZhcih0LmlkKSxlLHIpO3JldHVybiB0aGlzLl9jb25zdGFudHMucHJlcGFyZVN0YXRlbWVudHMucHVzaCguLi5hKSxvfXJlZ2lzdGVyQ29udGV4dFZhcmlhYmxlcyh0KXtsZXQgZT10aGlzLl9iaW5kaW5nU2NvcGUuZnJlc2hSZWZlcmVuY2VOYW1lKCksaT10aGlzLmxldmVsLHI9UmkodC5uYW1lK2UpO3RoaXMuX2JpbmRpbmdTY29wZS5zZXQoaSx0Lm5hbWUsciwxLChvLHMpPT57bGV0IGE7cmV0dXJuIG8uYmluZGluZ0xldmVsPT09aT9vLmlzTGlzdGVuZXJTY29wZSgpJiZvLmhhc1Jlc3RvcmVWaWV3VmFyaWFibGUoKT8oYT1SaShZUSksby5ub3RpZnlSZXN0b3JlZFZpZXdDb250ZXh0VXNlKCkpOmE9UmkoSGMpOmE9by5nZXRTaGFyZWRDb250ZXh0TmFtZShpKXx8SVYocyksW3Iuc2V0KGEucHJvcCh0LnZhbHVlfHwiJGltcGxpY2l0IikpLnRvQ29uc3REZWNsKCldfSl9aTE4bkFwcGVuZEJpbmRpbmdzKHQpe3QubGVuZ3RoPjAmJnQuZm9yRWFjaChlPT50aGlzLmkxOG4uYXBwZW5kQmluZGluZyhlKSl9aTE4bkJpbmRQcm9wcyh0KXtsZXQgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChpPT57bGV0IHI9dFtpXTtpZihyIGluc3RhbmNlb2YgTV8pZVtpXT1odChyLnZhbHVlKTtlbHNle2xldCBvPXIudmFsdWUudmlzaXQodGhpcy5fdmFsdWVDb252ZXJ0ZXIpO2lmKHRoaXMuYWxsb2NhdGVCaW5kaW5nU2xvdHMobyksbyBpbnN0YW5jZW9mIHZzKXtsZXR7c3RyaW5nczpzLGV4cHJlc3Npb25zOmF9PW8se2lkOmwsYmluZGluZ3M6Y309dGhpcy5pMThuLHU9ZnVuY3Rpb24obix0PTAsZT0wKXtpZighbi5sZW5ndGgpcmV0dXJuIiI7bGV0IGk9IiIscj1uLmxlbmd0aC0xO2ZvcihsZXQgbz0wO288cjtvKyspaSs9YCR7bltvXX0ke1BEKHQrbyxlKX1gO3JldHVybiBpKz1uW3JdLGl9KHMsYy5zaXplLGwpO3RoaXMuaTE4bkFwcGVuZEJpbmRpbmdzKGEpLGVbaV09aHQodSl9fX0pLGV9aTE4bkdlbmVyYXRlTWFpbkJsb2NrVmFyKCl7cmV0dXJuIFJpKHRoaXMuY29uc3RhbnRQb29sLnVuaXF1ZU5hbWUoImkxOG5fIikpfWkxOG5HZW5lcmF0ZUNsb3N1cmVWYXIodCl7bGV0IGUsaT10aGlzLmZpbGVCYXNlZEkxOG5TdWZmaXgudG9VcHBlckNhc2UoKTtpZih0aGlzLmkxOG5Vc2VFeHRlcm5hbElkcyl7bGV0IHI9UlgoIkVYVEVSTkFMXyIpLG89dGhpcy5jb25zdGFudFBvb2wudW5pcXVlTmFtZShpKTtlPWAke3J9JHttXyh0KX0kJCR7b31gfWVsc2V7bGV0IHI9UlgoaSk7ZT10aGlzLmNvbnN0YW50UG9vbC51bmlxdWVOYW1lKHIpfXJldHVybiBSaShlKX1pMThuVXBkYXRlUmVmKHQpe2xldHtpY3VzOmUsbWV0YTppLGlzUm9vdDpyLGlzUmVzb2x2ZWQ6byxpc0VtaXR0ZWQ6c309dDtpZihyJiZvJiYhcyYmIVZUKGkpKXt0LmlzRW1pdHRlZD0hMDtsZXQgZCxhPXQuZ2V0U2VyaWFsaXplZFBsYWNlaG9sZGVycygpLGw9e30sYz1hLnNpemU/UFgoYSk6e307ZS5zaXplJiZlLmZvckVhY2goKHAsaCk9PntpZigxPT09cC5sZW5ndGgpY1toXT1wWzBdO2Vsc2V7bGV0IGY9UEQoYEkxOE5fRVhQXyR7aH1gKTtjW2hdPWh0KGYpLGxbaF09X3IocCl9fSksKEFycmF5LmZyb20oYS52YWx1ZXMoKSkuc29tZShwPT5wLmxlbmd0aD4xKXx8T2JqZWN0LmtleXMobCkubGVuZ3RoKSYmKGQ9cD0+e2xldCBoPVtwXTtyZXR1cm4gT2JqZWN0LmtleXMobCkubGVuZ3RoJiZoLnB1c2god0QobCwhMCkpLGdtKG51bGwsdGUuaTE4blBvc3Rwcm9jZXNzLGgpfSksdGhpcy5pMThuVHJhbnNsYXRlKGksYyx0LnJlZixkKX19aTE4blN0YXJ0KHQ9bnVsbCxlLGkpe2xldCByPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpO3RoaXMuaTE4bj10aGlzLmkxOG5Db250ZXh0P3RoaXMuaTE4bkNvbnRleHQuZm9ya0NoaWxkQ29udGV4dChyLHRoaXMudGVtcGxhdGVJbmRleCxlKTpuZXcgUUMocix0aGlzLmkxOG5HZW5lcmF0ZU1haW5CbG9ja1ZhcigpLDAsdGhpcy50ZW1wbGF0ZUluZGV4LGUpO2xldHtpZDpvLHJlZjpzfT10aGlzLmkxOG4sYT1baHQociksdGhpcy5hZGRUb0NvbnN0cyhzKV07bz4wJiZhLnB1c2goaHQobykpLHRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbih0LGk/dGUuaTE4bjp0ZS5pMThuU3RhcnQsYSl9aTE4bkVuZCh0PW51bGwsZSl7aWYoIXRoaXMuaTE4bil0aHJvdyBuZXcgRXJyb3IoImkxOG5FbmQgaXMgZXhlY3V0ZWQgd2l0aCBubyBpMThuIGNvbnRleHQgcHJlc2VudCIpO3RoaXMuaTE4bkNvbnRleHQ/KHRoaXMuaTE4bkNvbnRleHQucmVjb25jaWxlQ2hpbGRDb250ZXh0KHRoaXMuaTE4biksdGhpcy5pMThuVXBkYXRlUmVmKHRoaXMuaTE4bkNvbnRleHQpKTp0aGlzLmkxOG5VcGRhdGVSZWYodGhpcy5pMThuKTtsZXR7aW5kZXg6aSxiaW5kaW5nczpyfT10aGlzLmkxOG47aWYoci5zaXplKXtmb3IobGV0IG8gb2Ygcil0aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UodGhpcy5nZXRDb25zdENvdW50KCktMSx0LHRlLmkxOG5FeHAsKCk9PnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhvKSk7dGhpcy51cGRhdGVJbnN0cnVjdGlvbih0LHRlLmkxOG5BcHBseSxbaHQoaSldKX1lfHx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odCx0ZS5pMThuRW5kKSx0aGlzLmkxOG49bnVsbH1pMThuQXR0cmlidXRlc0luc3RydWN0aW9uKHQsZSxpKXtsZXQgcj0hMSxvPVtdO2lmKGUuZm9yRWFjaChzPT57bGV0IGE9cy5pMThuLGw9cy52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7aWYodGhpcy5hbGxvY2F0ZUJpbmRpbmdTbG90cyhsKSxsIGluc3RhbmNlb2YgdnMpe2xldCB1PVBYKHFRKGEpKTtvLnB1c2goaHQocy5uYW1lKSx0aGlzLmkxOG5UcmFuc2xhdGUoYSx1KSksbC5leHByZXNzaW9ucy5mb3JFYWNoKGQ9PntyPSEwLHRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LGksdGUuaTE4bkV4cCwoKT0+dGhpcy5jb252ZXJ0UHJvcGVydHlCaW5kaW5nKGQpKX0pfX0pLG8ubGVuZ3RoPjApe2xldCBzPWh0KHRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpKSxhPXRoaXMuYWRkVG9Db25zdHMoX3IobykpO3RoaXMuY3JlYXRpb25JbnN0cnVjdGlvbihpLHRlLmkxOG5BdHRyaWJ1dGVzLFtzLGFdKSxyJiZ0aGlzLnVwZGF0ZUluc3RydWN0aW9uKGksdGUuaTE4bkFwcGx5LFtzXSl9fWdldE5hbWVzcGFjZUluc3RydWN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIm1hdGgiOnJldHVybiB0ZS5uYW1lc3BhY2VNYXRoTUw7Y2FzZSJzdmciOnJldHVybiB0ZS5uYW1lc3BhY2VTVkc7ZGVmYXVsdDpyZXR1cm4gdGUubmFtZXNwYWNlSFRNTH19YWRkTmFtZXNwYWNlSW5zdHJ1Y3Rpb24odCxlKXt0aGlzLl9uYW1lc3BhY2U9dCx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24oZS5zdGFydFNvdXJjZVNwYW4sdCl9aW50ZXJwb2xhdGVkVXBkYXRlSW5zdHJ1Y3Rpb24odCxlLGkscixvLHMpe3RoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZShlLHIuc291cmNlU3Bhbix0LCgpPT5baHQoaSksLi4udGhpcy5nZXRVcGRhdGVJbnN0cnVjdGlvbkFyZ3VtZW50cyhvKSwuLi5zXSl9dmlzaXRDb250ZW50KHQpe2xldCBlPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpLGk9dGhpcy5fbmdDb250ZW50U2VsZWN0b3JzT2Zmc2V0K3RoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoLHI9W2h0KGUpXTt0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLnB1c2godC5zZWxlY3Rvcik7bGV0IG89dC5hdHRyaWJ1dGVzLmZpbHRlcihhPT4ic2VsZWN0IiE9PWEubmFtZS50b0xvd2VyQ2FzZSgpKSxzPXRoaXMuZ2V0QXR0cmlidXRlRXhwcmVzc2lvbnModC5uYW1lLG8sW10sW10pO3MubGVuZ3RoPjA/ci5wdXNoKGh0KGkpLF9yKHMpKTowIT09aSYmci5wdXNoKGh0KGkpKSx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLHRlLnByb2plY3Rpb24sciksdGhpcy5pMThuJiZ0aGlzLmkxOG4uYXBwZW5kUHJvamVjdGlvbih0LmkxOG4sZSl9dmlzaXRFbGVtZW50KHQpe2xldCBlPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpLGk9bmV3IHZEKG51bGwpLHI9ITEsbz1BQyh0LmkxOG4pJiYhVlQodC5pMThuKSxzPVtdLFthLGxdPUtkKHQubmFtZSksYz1DQih0Lm5hbWUpO2ZvcihsZXQgdWUgb2YgdC5hdHRyaWJ1dGVzKXtsZXR7bmFtZTpoZSx2YWx1ZTp3fT11ZTsibmdOb25CaW5kYWJsZSI9PT1oZT9yPSEwOiJzdHlsZSI9PT1oZT9pLnJlZ2lzdGVyU3R5bGVBdHRyKHcpOiJjbGFzcyI9PT1oZT9pLnJlZ2lzdGVyQ2xhc3NBdHRyKHcpOnMucHVzaCh1ZSl9bGV0IHU9W2h0KGUpXTtjfHx1LnB1c2goaHQobCkpO2xldCBkPVtdLHA9W107dC5pbnB1dHMuZm9yRWFjaCh1ZT0+e2kucmVnaXN0ZXJCb3VuZElucHV0KHVlKXx8KDA9PT11ZS50eXBlJiZ1ZS5pMThuP3AucHVzaCh1ZSk6ZC5wdXNoKHVlKSl9KTtsZXQgaD10aGlzLmdldEF0dHJpYnV0ZUV4cHJlc3Npb25zKHQubmFtZSxzLGQsdC5vdXRwdXRzLGksW10scCk7dS5wdXNoKHRoaXMuYWRkQXR0cnNUb0NvbnN0cyhoKSk7bGV0IGY9dGhpcy5wcmVwYXJlUmVmc0FycmF5KHQucmVmZXJlbmNlcyk7dS5wdXNoKHRoaXMuYWRkVG9Db25zdHMoZikpO2xldCBtPXRoaXMuX25hbWVzcGFjZSx4PXRoaXMuZ2V0TmFtZXNwYWNlSW5zdHJ1Y3Rpb24oYSk7eCE9PW0mJnRoaXMuYWRkTmFtZXNwYWNlSW5zdHJ1Y3Rpb24oeCx0KSx0aGlzLmkxOG4mJnRoaXMuaTE4bi5hcHBlbmRFbGVtZW50KHQuaTE4bixlKTtsZXQgZz0hbyYmdGhpcy5pMThuPyFiQih0LmNoaWxkcmVuKTp0LmNoaWxkcmVuLmxlbmd0aD4wLGI9IWkuaGFzQmluZGluZ3NXaXRoUGlwZXMmJjA9PT10Lm91dHB1dHMubGVuZ3RoJiYwPT09cC5sZW5ndGgmJiFnLEQ9IWImJmJCKHQuY2hpbGRyZW4pO2lmKGIpdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQuc291cmNlU3BhbixjP3RlLmVsZW1lbnRDb250YWluZXI6dGUuZWxlbWVudCxzQih1KSk7ZWxzZXtpZih0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zdGFydFNvdXJjZVNwYW4sYz90ZS5lbGVtZW50Q29udGFpbmVyU3RhcnQ6dGUuZWxlbWVudFN0YXJ0LHNCKHUpKSxyJiZ0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zdGFydFNvdXJjZVNwYW4sdGUuZGlzYWJsZUJpbmRpbmdzKSxwLmxlbmd0aD4wJiZ0aGlzLmkxOG5BdHRyaWJ1dGVzSW5zdHJ1Y3Rpb24oZSxwLHQuc3RhcnRTb3VyY2VTcGFuPz90LnNvdXJjZVNwYW4pLHQub3V0cHV0cy5sZW5ndGg+MClmb3IobGV0IHVlIG9mIHQub3V0cHV0cyl0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odWUuc291cmNlU3Bhbix0ZS5saXN0ZW5lcix0aGlzLnByZXBhcmVMaXN0ZW5lclBhcmFtZXRlcih0Lm5hbWUsdWUsZSkpO28mJnRoaXMuaTE4blN0YXJ0KHQuc3RhcnRTb3VyY2VTcGFuLHQuaTE4bixEKX1sZXQgVD1pLmJ1aWxkVXBkYXRlTGV2ZWxJbnN0cnVjdGlvbnModGhpcy5fdmFsdWVDb252ZXJ0ZXIpLGs9VC5sZW5ndGgtMTtmb3IobGV0IHVlPTA7dWU8PWs7dWUrKyl0aGlzLl9iaW5kaW5nU2xvdHMrPXRoaXMucHJvY2Vzc1N0eWxpbmdVcGRhdGVJbnN0cnVjdGlvbihlLFRbdWVdKTtsZXQgWj1odCh2b2lkIDApLHo9W10sZmU9W107ZC5mb3JFYWNoKHVlPT57bGV0IGhlPXVlLnR5cGU7aWYoND09PWhlKXtsZXQgdz11ZS52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlciksRj0hKHcgaW5zdGFuY2VvZiB0YSYmIXcudmFsdWUpO3RoaXMuYWxsb2NhdGVCaW5kaW5nU2xvdHModyksei5wdXNoKHtzcGFuOnVlLnNvdXJjZVNwYW4scGFyYW1zT3JGbjp6VCgoKT0+Rj90aGlzLmNvbnZlcnRQcm9wZXJ0eUJpbmRpbmcodyk6Wix6USh1ZS5uYW1lKSl9KX1lbHNle2lmKHVlLmkxOG4pcmV0dXJuO2xldCB3PXVlLnZhbHVlLnZpc2l0KHRoaXMuX3ZhbHVlQ29udmVydGVyKTtpZih2b2lkIDAhPT13KXtsZXQgRj1bXSxbcSxLXT1LZCh1ZS5uYW1lKSxZPVRLKHVlLnNlY3VyaXR5Q29udGV4dCwxPT09aGUpO2lmKFkmJkYucHVzaChZKSxxKXtsZXQgYWU9aHQocSk7WT9GLnB1c2goYWUpOkYucHVzaChodChudWxsKSxhZSl9aWYodGhpcy5hbGxvY2F0ZUJpbmRpbmdTbG90cyh3KSwwPT09aGUpdyBpbnN0YW5jZW9mIHZzP3RoaXMuaW50ZXJwb2xhdGVkVXBkYXRlSW5zdHJ1Y3Rpb24oQ1EodyksZSxLLHVlLHcsRik6ei5wdXNoKHtzcGFuOnVlLnNvdXJjZVNwYW4scGFyYW1zT3JGbjp6VCgoKT0+dGhpcy5jb252ZXJ0UHJvcGVydHlCaW5kaW5nKHcpLEssRil9KTtlbHNlIGlmKDE9PT1oZSlpZih3IGluc3RhbmNlb2YgdnMmJndtKHcpPjEpdGhpcy5pbnRlcnBvbGF0ZWRVcGRhdGVJbnN0cnVjdGlvbihmdW5jdGlvbihuKXtzd2l0Y2god20obikpe2Nhc2UgMzpyZXR1cm4gdGUuYXR0cmlidXRlSW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gdGUuYXR0cmlidXRlSW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gdGUuYXR0cmlidXRlSW50ZXJwb2xhdGUzO2Nhc2UgOTpyZXR1cm4gdGUuYXR0cmlidXRlSW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIHRlLmF0dHJpYnV0ZUludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiB0ZS5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTY7Y2FzZSAxNTpyZXR1cm4gdGUuYXR0cmlidXRlSW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIHRlLmF0dHJpYnV0ZUludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiB0ZS5hdHRyaWJ1dGVJbnRlcnBvbGF0ZVZ9fSh3KSxlLEssdWUsdyxGKTtlbHNle2xldCBhZT13IGluc3RhbmNlb2YgdnM/dy5leHByZXNzaW9uc1swXTp3O2ZlLnB1c2goe3NwYW46dWUuc291cmNlU3BhbixwYXJhbXNPckZuOnpUKCgpPT50aGlzLmNvbnZlcnRQcm9wZXJ0eUJpbmRpbmcoYWUpLEssRil9KX1lbHNlIHRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZShlLHVlLnNvdXJjZVNwYW4sdGUuY2xhc3NQcm9wLCgpPT5baHQoZSksaHQoSyksdGhpcy5jb252ZXJ0UHJvcGVydHlCaW5kaW5nKHcpLC4uLkZdKX19fSk7Zm9yKGxldCB1ZSBvZiB6KXRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZShlLHVlLnNwYW4sdGUucHJvcGVydHksdWUucGFyYW1zT3JGbik7Zm9yKGxldCB1ZSBvZiBmZSl0aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UoZSx1ZS5zcGFuLHRlLmF0dHJpYnV0ZSx1ZS5wYXJhbXNPckZuKTtpZihBWCh0aGlzLHQuY2hpbGRyZW4pLCFvJiZ0aGlzLmkxOG4mJnRoaXMuaTE4bi5hcHBlbmRFbGVtZW50KHQuaTE4bixlLCEwKSwhYil7bGV0IHVlPXQuZW5kU291cmNlU3Bhbj8/dC5zb3VyY2VTcGFuO28mJnRoaXMuaTE4bkVuZCh1ZSxEKSxyJiZ0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odWUsdGUuZW5hYmxlQmluZGluZ3MpLHRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbih1ZSxjP3RlLmVsZW1lbnRDb250YWluZXJFbmQ6dGUuZWxlbWVudEVuZCl9fXZpc2l0VGVtcGxhdGUodCl7bGV0IGU9Im5nLXRlbXBsYXRlIixpPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpO3RoaXMuaTE4biYmdGhpcy5pMThuLmFwcGVuZFRlbXBsYXRlKHQuaTE4bixpKTtsZXQgcj10LnRhZ05hbWU/S2QodC50YWdOYW1lKVsxXTp0LnRhZ05hbWUsbz1gJHt0aGlzLmNvbnRleHROYW1lfSR7dC50YWdOYW1lPyJfIittXyh0LnRhZ05hbWUpOiIifV8ke2l9YCxzPWAke299X1RlbXBsYXRlYCxhPVtodChpKSxSaShzKSxodChyKV0sbD10aGlzLmdldEF0dHJpYnV0ZUV4cHJlc3Npb25zKGUsdC5hdHRyaWJ1dGVzLHQuaW5wdXRzLHQub3V0cHV0cyx2b2lkIDAsdC50ZW1wbGF0ZUF0dHJzKTtpZihhLnB1c2godGhpcy5hZGRBdHRyc1RvQ29uc3RzKGwpKSx0LnJlZmVyZW5jZXMmJnQucmVmZXJlbmNlcy5sZW5ndGgpe2xldCB1PXRoaXMucHJlcGFyZVJlZnNBcnJheSh0LnJlZmVyZW5jZXMpO2EucHVzaCh0aGlzLmFkZFRvQ29uc3RzKHUpKSxhLnB1c2goVG4odGUudGVtcGxhdGVSZWZFeHRyYWN0b3IpKX1sZXQgYz1uZXcgS0ModGhpcy5jb25zdGFudFBvb2wsdGhpcy5fYmluZGluZ1Njb3BlLHRoaXMubGV2ZWwrMSxvLHRoaXMuaTE4bixpLHMsdGhpcy5fbmFtZXNwYWNlLHRoaXMuZmlsZUJhc2VkSTE4blN1ZmZpeCx0aGlzLmkxOG5Vc2VFeHRlcm5hbElkcyx0aGlzLl9jb25zdGFudHMpO2lmKHRoaXMuX25lc3RlZFRlbXBsYXRlRm5zLnB1c2goKCk9PntsZXQgdT1jLmJ1aWxkVGVtcGxhdGVGdW5jdGlvbih0LmNoaWxkcmVuLHQudmFyaWFibGVzLHRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoK3RoaXMuX25nQ29udGVudFNlbGVjdG9yc09mZnNldCx0LmkxOG4pO3RoaXMuY29uc3RhbnRQb29sLnN0YXRlbWVudHMucHVzaCh1LnRvRGVjbFN0bXQocykpLGMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoJiZ0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLnB1c2goLi4uYy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cyl9KSx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLHRlLnRlbXBsYXRlQ3JlYXRlLCgpPT4oYS5zcGxpY2UoMiwwLGh0KGMuZ2V0Q29uc3RDb3VudCgpKSxodChjLmdldFZhckNvdW50KCkpKSxzQihhKSkpLHRoaXMudGVtcGxhdGVQcm9wZXJ0eUJpbmRpbmdzKGksdC50ZW1wbGF0ZUF0dHJzKSxyPT09ZSl7bGV0W3UsZF09ZnVuY3Rpb24obix0KXtsZXQgZT1bXSxpPVtdO2ZvcihsZXQgciBvZiBuKSh0KHIpP2U6aSkucHVzaChyKTtyZXR1cm5bZSxpXX0odC5pbnB1dHMsQ3dlKTt1Lmxlbmd0aD4wJiZ0aGlzLmkxOG5BdHRyaWJ1dGVzSW5zdHJ1Y3Rpb24oaSx1LHQuc3RhcnRTb3VyY2VTcGFuPz90LnNvdXJjZVNwYW4pLGQubGVuZ3RoPjAmJnRoaXMudGVtcGxhdGVQcm9wZXJ0eUJpbmRpbmdzKGksZCk7Zm9yKGxldCBwIG9mIHQub3V0cHV0cyl0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24ocC5zb3VyY2VTcGFuLHRlLmxpc3RlbmVyLHRoaXMucHJlcGFyZUxpc3RlbmVyUGFyYW1ldGVyKCJuZ190ZW1wbGF0ZSIscCxpKSl9fXZpc2l0Qm91bmRUZXh0KHQpe2lmKHRoaXMuaTE4bil7bGV0IHI9dC52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7cmV0dXJuIHRoaXMuYWxsb2NhdGVCaW5kaW5nU2xvdHMociksdm9pZChyIGluc3RhbmNlb2YgdnMmJih0aGlzLmkxOG4uYXBwZW5kQm91bmRUZXh0KHQuaTE4biksdGhpcy5pMThuQXBwZW5kQmluZGluZ3Moci5leHByZXNzaW9ucykpKX1sZXQgZT10aGlzLmFsbG9jYXRlRGF0YVNsb3QoKTt0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLHRlLnRleHQsW2h0KGUpXSk7bGV0IGk9dC52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7dGhpcy5hbGxvY2F0ZUJpbmRpbmdTbG90cyhpKSxpIGluc3RhbmNlb2YgdnM/dGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKGUsdC5zb3VyY2VTcGFuLGZ1bmN0aW9uKG4pe3N3aXRjaCh3bShuKSl7Y2FzZSAxOnJldHVybiB0ZS50ZXh0SW50ZXJwb2xhdGU7Y2FzZSAzOnJldHVybiB0ZS50ZXh0SW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gdGUudGV4dEludGVycG9sYXRlMjtjYXNlIDc6cmV0dXJuIHRlLnRleHRJbnRlcnBvbGF0ZTM7Y2FzZSA5OnJldHVybiB0ZS50ZXh0SW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIHRlLnRleHRJbnRlcnBvbGF0ZTU7Y2FzZSAxMzpyZXR1cm4gdGUudGV4dEludGVycG9sYXRlNjtjYXNlIDE1OnJldHVybiB0ZS50ZXh0SW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIHRlLnRleHRJbnRlcnBvbGF0ZTg7ZGVmYXVsdDpyZXR1cm4gdGUudGV4dEludGVycG9sYXRlVn19KGkpLCgpPT50aGlzLmdldFVwZGF0ZUluc3RydWN0aW9uQXJndW1lbnRzKGkpKTpRVCgiVGV4dCBub2RlcyBzaG91bGQgYmUgaW50ZXJwb2xhdGVkIGFuZCBuZXZlciBib3VuZCBkaXJlY3RseS4iKX12aXNpdFRleHQodCl7dGhpcy5pMThufHx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLHRlLnRleHQsW2h0KHRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpKSxodCh0LnZhbHVlKV0pfXZpc2l0SWN1KHQpe2xldCBlPSExO3RoaXMuaTE4bnx8KGU9ITAsdGhpcy5pMThuU3RhcnQobnVsbCx0LmkxOG4sITApKTtsZXQgaT10aGlzLmkxOG4scj10aGlzLmkxOG5CaW5kUHJvcHModC52YXJzKSxvPXRoaXMuaTE4bkJpbmRQcm9wcyh0LnBsYWNlaG9sZGVycykscz10LmkxOG4sYT1sPT57bGV0IHU9VVYoey4uLnIsLi4ub30sITEpO3JldHVybiBnbShudWxsLHRlLmkxOG5Qb3N0cHJvY2VzcyxbbCx3RCh1LCEwKV0pfTtpZihWVChpLm1ldGEpKXRoaXMuaTE4blRyYW5zbGF0ZShzLHt9LGkucmVmLGEpO2Vsc2V7bGV0IGw9dGhpcy5pMThuVHJhbnNsYXRlKHMse30sdm9pZCAwLGEpO2kuYXBwZW5kSWN1KFdRKHMpLm5hbWUsbCl9cmV0dXJuIGUmJnRoaXMuaTE4bkVuZChudWxsLCEwKSxudWxsfWFsbG9jYXRlRGF0YVNsb3QoKXtyZXR1cm4gdGhpcy5fZGF0YUluZGV4Kyt9Z2V0Q29uc3RDb3VudCgpe3JldHVybiB0aGlzLl9kYXRhSW5kZXh9Z2V0VmFyQ291bnQoKXtyZXR1cm4gdGhpcy5fcHVyZUZ1bmN0aW9uU2xvdHN9Z2V0Q29uc3RzKCl7cmV0dXJuIHRoaXMuX2NvbnN0YW50c31nZXROZ0NvbnRlbnRTZWxlY3RvcnMoKXtyZXR1cm4gdGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cy5sZW5ndGg/dGhpcy5jb25zdGFudFBvb2wuZ2V0Q29uc3RMaXRlcmFsKE51KHRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMpLCEwKTpudWxsfWJpbmRpbmdDb250ZXh0KCl7cmV0dXJuIiIrdGhpcy5fYmluZGluZ0NvbnRleHQrK310ZW1wbGF0ZVByb3BlcnR5QmluZGluZ3ModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgZSl7aWYoIShyIGluc3RhbmNlb2Ygd18pKWNvbnRpbnVlO2xldCBvPXIudmFsdWUudmlzaXQodGhpcy5fdmFsdWVDb252ZXJ0ZXIpO2lmKHZvaWQgMCE9PW8paWYodGhpcy5hbGxvY2F0ZUJpbmRpbmdTbG90cyhvKSxvIGluc3RhbmNlb2YgdnMpe2xldCBzPVtdO3RoaXMuaW50ZXJwb2xhdGVkVXBkYXRlSW5zdHJ1Y3Rpb24oQ1EobyksdCxyLm5hbWUscixvLHMpfWVsc2UgaS5wdXNoKHtzcGFuOnIuc291cmNlU3BhbixwYXJhbXNPckZuOnpUKCgpPT50aGlzLmNvbnZlcnRQcm9wZXJ0eUJpbmRpbmcobyksci5uYW1lKX0pfWZvcihsZXQgciBvZiBpKXRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LHIuc3Bhbix0ZS5wcm9wZXJ0eSxyLnBhcmFtc09yRm4pfWluc3RydWN0aW9uRm4odCxlLGkscixvPSExKXt0W28/InVuc2hpZnQiOiJwdXNoIl0oe3NwYW46ZSxyZWZlcmVuY2U6aSxwYXJhbXNPckZuOnJ9KX1wcm9jZXNzU3R5bGluZ1VwZGF0ZUluc3RydWN0aW9uKHQsZSl7bGV0IGk9MDtpZihlKWZvcihsZXQgciBvZiBlLmNhbGxzKWkrPXIuYWxsb2NhdGVCaW5kaW5nU2xvdHMsdGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKHQsci5zb3VyY2VTcGFuLGUucmVmZXJlbmNlLCgpPT5yLnBhcmFtcyhvPT5yLnN1cHBvcnRzSW50ZXJwb2xhdGlvbiYmbyBpbnN0YW5jZW9mIHZzP3RoaXMuZ2V0VXBkYXRlSW5zdHJ1Y3Rpb25Bcmd1bWVudHMobyk6dGhpcy5jb252ZXJ0UHJvcGVydHlCaW5kaW5nKG8pKSk7cmV0dXJuIGl9Y3JlYXRpb25JbnN0cnVjdGlvbih0LGUsaSxyKXt0aGlzLmluc3RydWN0aW9uRm4odGhpcy5fY3JlYXRpb25Db2RlRm5zLHQsZSxpfHxbXSxyKX11cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKHQsZSxpLHIpe3RoaXMuYWRkQWR2YW5jZUluc3RydWN0aW9uSWZOZWNlc3NhcnkodCxlKSx0aGlzLnVwZGF0ZUluc3RydWN0aW9uKGUsaSxyKX11cGRhdGVJbnN0cnVjdGlvbih0LGUsaSl7dGhpcy5pbnN0cnVjdGlvbkZuKHRoaXMuX3VwZGF0ZUNvZGVGbnMsdCxlLGl8fFtdKX1hZGRBZHZhbmNlSW5zdHJ1Y3Rpb25JZk5lY2Vzc2FyeSh0LGUpe2lmKHQhPT10aGlzLl9jdXJyZW50SW5kZXgpe2xldCBpPXQtdGhpcy5fY3VycmVudEluZGV4O2lmKGk8MSl0aHJvdyBuZXcgRXJyb3IoImFkdmFuY2UgaW5zdHJ1Y3Rpb24gY2FuIG9ubHkgZ28gZm9yd2FyZHMiKTt0aGlzLmluc3RydWN0aW9uRm4odGhpcy5fdXBkYXRlQ29kZUZucyxlLHRlLmFkdmFuY2UsW2h0KGkpXSksdGhpcy5fY3VycmVudEluZGV4PXR9fWFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHModCl7bGV0IGU9dGhpcy5fcHVyZUZ1bmN0aW9uU2xvdHM7cmV0dXJuIHRoaXMuX3B1cmVGdW5jdGlvblNsb3RzKz10LGV9YWxsb2NhdGVCaW5kaW5nU2xvdHModCl7dGhpcy5fYmluZGluZ1Nsb3RzKz10IGluc3RhbmNlb2YgdnM/dC5leHByZXNzaW9ucy5sZW5ndGg6MX1nZXRJbXBsaWNpdFJlY2VpdmVyRXhwcigpe3JldHVybiB0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj90aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcjp0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj0wPT09dGhpcy5sZXZlbD9SaShIYyk6dGhpcy5fYmluZGluZ1Njb3BlLmdldE9yQ3JlYXRlU2hhcmVkQ29udGV4dFZhcigwKX1jb252ZXJ0UHJvcGVydHlCaW5kaW5nKHQpe2xldCBlPXVLKHRoaXMsdGhpcy5nZXRJbXBsaWNpdFJlY2VpdmVyRXhwcigpLHQsdGhpcy5iaW5kaW5nQ29udGV4dCgpKSxpPWUuY3VyclZhbEV4cHI7cmV0dXJuIHRoaXMuX3RlbXBWYXJpYWJsZXMucHVzaCguLi5lLnN0bXRzKSxpfWdldFVwZGF0ZUluc3RydWN0aW9uQXJndW1lbnRzKHQpe2xldHthcmdzOmUsc3RtdHM6aX09ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bmV3IEdDKG4sdCxpLCEwKSxvPXIudmlzaXRJbnRlcnBvbGF0aW9uKGUsemkuRXhwcmVzc2lvbik7cmV0dXJuIHIudXNlc0ltcGxpY2l0UmVjZWl2ZXImJm4ubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpLHtzdG10czpkSyhyLGkpLGFyZ3M6by5hcmdzfX0odGhpcyx0aGlzLmdldEltcGxpY2l0UmVjZWl2ZXJFeHByKCksdCx0aGlzLmJpbmRpbmdDb250ZXh0KCkpO3JldHVybiB0aGlzLl90ZW1wVmFyaWFibGVzLnB1c2goLi4uaSksZX1nZXRBdHRyaWJ1dGVFeHByZXNzaW9ucyh0LGUsaSxyLG8scz1bXSxhPVtdKXtsZXQgdSxsPW5ldyBTZXQsYz1bXTtmb3IobGV0IHAgb2YgZSlpZigibmdQcm9qZWN0QXMiPT09cC5uYW1lJiYodT1wKSxwLmkxOG4pe2xldCBmLHtpMThuVmFyUmVmc0NhY2hlOmh9PXRoaXMuX2NvbnN0YW50cztoLmhhcyhwLmkxOG4pP2Y9aC5nZXQocC5pMThuKTooZj10aGlzLmkxOG5UcmFuc2xhdGUocC5pMThuKSxoLnNldChwLmkxOG4sZikpLGMucHVzaChodChwLm5hbWUpLGYpfWVsc2UgYy5wdXNoKC4uLnhRKHAubmFtZSksRTFlKHQscCkpO2Z1bmN0aW9uIGQocCxoKXsic3RyaW5nIj09dHlwZW9mIHA/bC5oYXMocCl8fChjLnB1c2goLi4ueFEocCkpLHZvaWQgMCE9PWgmJmMucHVzaChoKSxsLmFkZChwKSk6Yy5wdXNoKGh0KHApKX1pZih1JiZjLnB1c2goLi4uZnVuY3Rpb24obil7bGV0IHQ9TlYobi52YWx1ZSlbMF07cmV0dXJuW2h0KDUpLE51KHQpXX0odSkpLG8mJm8ucG9wdWxhdGVJbml0aWFsU3R5bGluZ0F0dHJzKGMpLGkubGVuZ3RofHxyLmxlbmd0aCl7bGV0IHA9Yy5sZW5ndGg7Zm9yKGxldCBoPTA7aDxpLmxlbmd0aDtoKyspe2xldCBmPWlbaF07NCE9PWYudHlwZSYmMSE9PWYudHlwZSYmZChmLm5hbWUpfWZvcihsZXQgaD0wO2g8ci5sZW5ndGg7aCsrKXtsZXQgZj1yW2hdOzEhPT1mLnR5cGUmJmQoZi5uYW1lKX1jLmxlbmd0aCE9PXAmJmMuc3BsaWNlKHAsMCxodCgzKSl9cmV0dXJuIHMubGVuZ3RoJiYoYy5wdXNoKGh0KDQpKSxzLmZvckVhY2gocD0+ZChwLm5hbWUpKSksYS5sZW5ndGgmJihjLnB1c2goaHQoNikpLGEuZm9yRWFjaChwPT5kKHAubmFtZSkpKSxjfWFkZFRvQ29uc3RzKHQpe2lmKFZRKHQpKXJldHVybiBXVDtsZXQgZT10aGlzLl9jb25zdGFudHMuY29uc3RFeHByZXNzaW9ucztmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKylpZihlW2ldLmlzRXF1aXZhbGVudCh0KSlyZXR1cm4gaHQoaSk7cmV0dXJuIGh0KGUucHVzaCh0KS0xKX1hZGRBdHRyc1RvQ29uc3RzKHQpe3JldHVybiB0Lmxlbmd0aD4wP3RoaXMuYWRkVG9Db25zdHMoX3IodCkpOldUfXByZXBhcmVSZWZzQXJyYXkodCl7cmV0dXJuIHQmJjAhPT10Lmxlbmd0aD9OdShESyh0Lm1hcChpPT57bGV0IHI9dGhpcy5hbGxvY2F0ZURhdGFTbG90KCksbz10aGlzLl9iaW5kaW5nU2NvcGUuZnJlc2hSZWZlcmVuY2VOYW1lKCkscz10aGlzLmxldmVsLGE9Umkobyk7cmV0dXJuIHRoaXMuX2JpbmRpbmdTY29wZS5zZXQocyxpLm5hbWUsYSwwLChsLGMpPT57bGV0IHU9Yz4wP1tJVihjKS50b1N0bXQoKV06W10sZD1hLnNldChUbih0ZS5yZWZlcmVuY2UpLmNhbGxGbihbaHQocildKSk7cmV0dXJuIHUuY29uY2F0KGQudG9Db25zdERlY2woKSl9LCEwKSxbaS5uYW1lLGkudmFsdWVdfSkpKTpXVH1wcmVwYXJlTGlzdGVuZXJQYXJhbWV0ZXIodCxlLGkpe3JldHVybigpPT57bGV0IHI9ZS5uYW1lLG89MT09PWUudHlwZT9qUShyLGUucGhhc2UpOm1fKHIpLHM9YCR7dGhpcy50ZW1wbGF0ZU5hbWV9XyR7dH1fJHtvfV8ke2l9X2xpc3RlbmVyYCxhPXRoaXMuX2JpbmRpbmdTY29wZS5uZXN0ZWRTY29wZSh0aGlzLl9iaW5kaW5nU2NvcGUuYmluZGluZ0xldmVsLHdLKTtyZXR1cm4gU0soZSxzLGEpfX19LFREPWNsYXNzIGV4dGVuZHMgJEJ7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoKSx0aGlzLmNvbnN0YW50UG9vbD10LHRoaXMuYWxsb2NhdGVTbG90PWUsdGhpcy5hbGxvY2F0ZVB1cmVGdW5jdGlvblNsb3RzPWksdGhpcy5kZWZpbmVQaXBlPXIsdGhpcy5fcGlwZUJpbmRFeHBycz1bXX12aXNpdFBpcGUodCxlKXtsZXQgaT10aGlzLmFsbG9jYXRlU2xvdCgpLHI9YFBJUEU6JHtpfWAsbz10aGlzLmFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHMoMit0LmFyZ3MubGVuZ3RoKSxzPW5ldyBMdSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQubmFtZVNwYW4sbmV3IHhtKHQuc3Bhbix0LnNvdXJjZVNwYW4pLHIpLHtpZGVudGlmaWVyOmEsaXNWYXJMZW5ndGg6bH09ZnVuY3Rpb24obil7bGV0IHQ9djFlW24ubGVuZ3RoXTtyZXR1cm57aWRlbnRpZmllcjp0fHx0ZS5waXBlQmluZFYsaXNWYXJMZW5ndGg6IXR9fSh0LmFyZ3MpO3RoaXMuZGVmaW5lUGlwZSh0Lm5hbWUscixpLFRuKGEpKTtsZXQgYz1bdC5leHAsLi4udC5hcmdzXSx1PXRoaXMudmlzaXRBbGwobD9bbmV3IE9fKHQuc3Bhbix0LnNvdXJjZVNwYW4sYyldOmMpLGQ9bmV3IGFoKHQuc3Bhbix0LnNvdXJjZVNwYW4scyxbbmV3IHRhKHQuc3Bhbix0LnNvdXJjZVNwYW4saSksbmV3IHRhKHQuc3Bhbix0LnNvdXJjZVNwYW4sbyksLi4udV0sbnVsbCk7cmV0dXJuIHRoaXMuX3BpcGVCaW5kRXhwcnMucHVzaChkKSxkfXVwZGF0ZVBpcGVTbG90T2Zmc2V0cyh0KXt0aGlzLl9waXBlQmluZEV4cHJzLmZvckVhY2goZT0+e2UuYXJnc1sxXS52YWx1ZSs9dH0pfXZpc2l0TGl0ZXJhbEFycmF5KHQsZSl7cmV0dXJuIG5ldyByaCh0LnNwYW4sdC5zb3VyY2VTcGFuLHRoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyksaT0+e2xldCByPV9yKGkpO3JldHVybiBiUSh0aGlzLmNvbnN0YW50UG9vbCxyLHRoaXMuYWxsb2NhdGVQdXJlRnVuY3Rpb25TbG90cyl9KX12aXNpdExpdGVyYWxNYXAodCxlKXtyZXR1cm4gbmV3IHJoKHQuc3Bhbix0LnNvdXJjZVNwYW4sdGhpcy52aXNpdEFsbCh0LnZhbHVlcyksaT0+e2xldCByPXFsKGkubWFwKChvLHMpPT4oe2tleTp0LmtleXNbc10ua2V5LHZhbHVlOm8scXVvdGVkOnQua2V5c1tzXS5xdW90ZWR9KSkpO3JldHVybiBiUSh0aGlzLmNvbnN0YW50UG9vbCxyLHRoaXMuYWxsb2NhdGVQdXJlRnVuY3Rpb25TbG90cyl9KX19LHYxZT1bdGUucGlwZUJpbmQxLHRlLnBpcGVCaW5kMix0ZS5waXBlQmluZDMsdGUucGlwZUJpbmQ0XSxiMWU9W3RlLnB1cmVGdW5jdGlvbjAsdGUucHVyZUZ1bmN0aW9uMSx0ZS5wdXJlRnVuY3Rpb24yLHRlLnB1cmVGdW5jdGlvbjMsdGUucHVyZUZ1bmN0aW9uNCx0ZS5wdXJlRnVuY3Rpb241LHRlLnB1cmVGdW5jdGlvbjYsdGUucHVyZUZ1bmN0aW9uNyx0ZS5wdXJlRnVuY3Rpb244XTtmdW5jdGlvbiBJVihuKXtyZXR1cm4gVG4odGUubmV4dENvbnRleHQpLmNhbGxGbihuPjE/W2h0KG4pXTpbXSl9ZnVuY3Rpb24gYlEobix0LGUpe2xldHtsaXRlcmFsRmFjdG9yeTppLGxpdGVyYWxGYWN0b3J5QXJndW1lbnRzOnJ9PW4uZ2V0TGl0ZXJhbEZhY3RvcnkodCksbz1lKDErci5sZW5ndGgpLHtpZGVudGlmaWVyOnMsaXNWYXJMZW5ndGg6YX09ZnVuY3Rpb24obil7bGV0IHQ9YjFlW24ubGVuZ3RoXTtyZXR1cm57aWRlbnRpZmllcjp0fHx0ZS5wdXJlRnVuY3Rpb25WLGlzVmFyTGVuZ3RoOiF0fX0ociksbD1baHQobyksaV07cmV0dXJuIGE/bC5wdXNoKF9yKHIpKTpsLnB1c2goLi4uciksVG4ocykuY2FsbEZuKGwpfWZ1bmN0aW9uIHhRKG4pe2xldFt0LGVdPUtkKG4pLGk9aHQoZSk7cmV0dXJuIHQ/W2h0KDApLGh0KHQpLGldOltpXX12YXIgb189IiQkc2hhcmVkX2N0eCQkIixCXz1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT1udWxsLGkpe2lmKHRoaXMuYmluZGluZ0xldmVsPXQsdGhpcy5wYXJlbnQ9ZSx0aGlzLmdsb2JhbHM9aSx0aGlzLm1hcD1uZXcgTWFwLHRoaXMucmVmZXJlbmNlTmFtZUluZGV4PTAsdGhpcy5yZXN0b3JlVmlld1ZhcmlhYmxlPW51bGwsdGhpcy51c2VzUmVzdG9yZWRWaWV3Q29udGV4dD0hMSx2b2lkIDAhPT1pKWZvcihsZXQgciBvZiBpKXRoaXMuc2V0KDAscixSaShyKSl9c3RhdGljIGNyZWF0ZVJvb3RTY29wZSgpe3JldHVybiBuZXcgQl99Z2V0KHQpe2xldCBlPXRoaXM7Zm9yKDtlOyl7bGV0IGk9ZS5tYXAuZ2V0KHQpO2lmKG51bGwhPWkpcmV0dXJuIGUhPT10aGlzJiYoaT17cmV0cmlldmFsTGV2ZWw6aS5yZXRyaWV2YWxMZXZlbCxsaHM6aS5saHMsZGVjbGFyZUxvY2FsQ2FsbGJhY2s6aS5kZWNsYXJlTG9jYWxDYWxsYmFjayxkZWNsYXJlOiExLHByaW9yaXR5OmkucHJpb3JpdHl9LHRoaXMubWFwLnNldCh0LGkpLHRoaXMubWF5YmVHZW5lcmF0ZVNoYXJlZENvbnRleHRWYXIoaSksdGhpcy5tYXliZVJlc3RvcmVWaWV3KCkpLGkuZGVjbGFyZUxvY2FsQ2FsbGJhY2smJiFpLmRlY2xhcmUmJihpLmRlY2xhcmU9ITApLGkubGhzO2U9ZS5wYXJlbnR9cmV0dXJuIDA9PT10aGlzLmJpbmRpbmdMZXZlbD9udWxsOnRoaXMuZ2V0Q29tcG9uZW50UHJvcGVydHkodCl9c2V0KHQsZSxpLHI9MCxvLHMpe2lmKHRoaXMubWFwLmhhcyhlKSl7aWYocylyZXR1cm4gdGhpcztRVChgVGhlIG5hbWUgJHtlfSBpcyBhbHJlYWR5IGRlZmluZWQgaW4gc2NvcGUgdG8gYmUgJHt0aGlzLm1hcC5nZXQoZSl9YCl9cmV0dXJuIHRoaXMubWFwLnNldChlLHtyZXRyaWV2YWxMZXZlbDp0LGxoczppLGRlY2xhcmU6ITEsZGVjbGFyZUxvY2FsQ2FsbGJhY2s6byxwcmlvcml0eTpyfSksdGhpc31nZXRMb2NhbCh0KXtyZXR1cm4gdGhpcy5nZXQodCl9bm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpezAhPT10aGlzLmJpbmRpbmdMZXZlbCYmKHRoaXMubWFwLmdldChvXyswKS5kZWNsYXJlPSEwKX1uZXN0ZWRTY29wZSh0LGUpe2xldCBpPW5ldyBCXyh0LHRoaXMsZSk7cmV0dXJuIHQ+MCYmaS5nZW5lcmF0ZVNoYXJlZENvbnRleHRWYXIoMCksaX1nZXRPckNyZWF0ZVNoYXJlZENvbnRleHRWYXIodCl7bGV0IGU9b18rdDtyZXR1cm4gdGhpcy5tYXAuaGFzKGUpfHx0aGlzLmdlbmVyYXRlU2hhcmVkQ29udGV4dFZhcih0KSx0aGlzLm1hcC5nZXQoZSkubGhzfWdldFNoYXJlZENvbnRleHROYW1lKHQpe2xldCBlPXRoaXMubWFwLmdldChvXyt0KTtyZXR1cm4gZSYmZS5kZWNsYXJlP2UubGhzOm51bGx9bWF5YmVHZW5lcmF0ZVNoYXJlZENvbnRleHRWYXIodCl7aWYoMT09PXQucHJpb3JpdHkmJnQucmV0cmlldmFsTGV2ZWw8dGhpcy5iaW5kaW5nTGV2ZWwpe2xldCBlPXRoaXMubWFwLmdldChvXyt0LnJldHJpZXZhbExldmVsKTtlP2UuZGVjbGFyZT0hMDp0aGlzLmdlbmVyYXRlU2hhcmVkQ29udGV4dFZhcih0LnJldHJpZXZhbExldmVsKX19Z2VuZXJhdGVTaGFyZWRDb250ZXh0VmFyKHQpe2xldCBlPVJpKEhjK3RoaXMuZnJlc2hSZWZlcmVuY2VOYW1lKCkpO3RoaXMubWFwLnNldChvXyt0LHtyZXRyaWV2YWxMZXZlbDp0LGxoczplLGRlY2xhcmVMb2NhbENhbGxiYWNrOihpLHIpPT5bZS5zZXQoSVYocikpLnRvQ29uc3REZWNsKCldLGRlY2xhcmU6ITEscHJpb3JpdHk6Mn0pfWdldENvbXBvbmVudFByb3BlcnR5KHQpe2xldCBlPXRoaXMubWFwLmdldChvXyswKTtyZXR1cm4gZS5kZWNsYXJlPSEwLHRoaXMubWF5YmVSZXN0b3JlVmlldygpLGUubGhzLnByb3AodCl9bWF5YmVSZXN0b3JlVmlldygpe3RoaXMuaXNMaXN0ZW5lclNjb3BlKCkmJih0aGlzLnBhcmVudC5yZXN0b3JlVmlld1ZhcmlhYmxlfHwodGhpcy5wYXJlbnQucmVzdG9yZVZpZXdWYXJpYWJsZT1SaSh0aGlzLnBhcmVudC5mcmVzaFJlZmVyZW5jZU5hbWUoKSkpLHRoaXMucmVzdG9yZVZpZXdWYXJpYWJsZT10aGlzLnBhcmVudC5yZXN0b3JlVmlld1ZhcmlhYmxlKX1yZXN0b3JlVmlld1N0YXRlbWVudCgpe2lmKHRoaXMucmVzdG9yZVZpZXdWYXJpYWJsZSl7bGV0IHQ9Z20obnVsbCx0ZS5yZXN0b3JlVmlldyxbdGhpcy5yZXN0b3JlVmlld1ZhcmlhYmxlXSk7cmV0dXJuIHRoaXMudXNlc1Jlc3RvcmVkVmlld0NvbnRleHQ/UmkoWVEpLnNldCh0KS50b0NvbnN0RGVjbCgpOnQudG9TdG10KCl9cmV0dXJuIG51bGx9dmlld1NuYXBzaG90U3RhdGVtZW50cygpe3JldHVybiB0aGlzLnJlc3RvcmVWaWV3VmFyaWFibGU/W3RoaXMucmVzdG9yZVZpZXdWYXJpYWJsZS5zZXQoZ20obnVsbCx0ZS5nZXRDdXJyZW50VmlldyxbXSkpLnRvQ29uc3REZWNsKCldOltdfWlzTGlzdGVuZXJTY29wZSgpe3JldHVybiB0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuYmluZGluZ0xldmVsPT09dGhpcy5iaW5kaW5nTGV2ZWx9dmFyaWFibGVEZWNsYXJhdGlvbnMoKXtsZXQgdD0wO3JldHVybiBBcnJheS5mcm9tKHRoaXMubWFwLnZhbHVlcygpKS5maWx0ZXIoZT0+ZS5kZWNsYXJlKS5zb3J0KChlLGkpPT5pLnJldHJpZXZhbExldmVsLWUucmV0cmlldmFsTGV2ZWx8fGkucHJpb3JpdHktZS5wcmlvcml0eSkucmVkdWNlKChlLGkpPT57bGV0IHI9dGhpcy5iaW5kaW5nTGV2ZWwtaS5yZXRyaWV2YWxMZXZlbCxvPWkuZGVjbGFyZUxvY2FsQ2FsbGJhY2sodGhpcyxyLXQpO3JldHVybiB0PXIsZS5jb25jYXQobyl9LFtdKX1mcmVzaFJlZmVyZW5jZU5hbWUoKXtsZXQgdD10aGlzO2Zvcig7dC5wYXJlbnQ7KXQ9dC5wYXJlbnQ7cmV0dXJuIl9yIit0LnJlZmVyZW5jZU5hbWVJbmRleCsrfWhhc1Jlc3RvcmVWaWV3VmFyaWFibGUoKXtyZXR1cm4hIXRoaXMucmVzdG9yZVZpZXdWYXJpYWJsZX1ub3RpZnlSZXN0b3JlZFZpZXdDb250ZXh0VXNlKCl7dGhpcy51c2VzUmVzdG9yZWRWaWV3Q29udGV4dD0hMH19O2Z1bmN0aW9uIENRKG4pe3N3aXRjaCh3bShuKSl7Y2FzZSAxOnJldHVybiB0ZS5wcm9wZXJ0eUludGVycG9sYXRlO2Nhc2UgMzpyZXR1cm4gdGUucHJvcGVydHlJbnRlcnBvbGF0ZTE7Y2FzZSA1OnJldHVybiB0ZS5wcm9wZXJ0eUludGVycG9sYXRlMjtjYXNlIDc6cmV0dXJuIHRlLnByb3BlcnR5SW50ZXJwb2xhdGUzO2Nhc2UgOTpyZXR1cm4gdGUucHJvcGVydHlJbnRlcnBvbGF0ZTQ7Y2FzZSAxMTpyZXR1cm4gdGUucHJvcGVydHlJbnRlcnBvbGF0ZTU7Y2FzZSAxMzpyZXR1cm4gdGUucHJvcGVydHlJbnRlcnBvbGF0ZTY7Y2FzZSAxNTpyZXR1cm4gdGUucHJvcGVydHlJbnRlcnBvbGF0ZTc7Y2FzZSAxNzpyZXR1cm4gdGUucHJvcGVydHlJbnRlcnBvbGF0ZTg7ZGVmYXVsdDpyZXR1cm4gdGUucHJvcGVydHlJbnRlcnBvbGF0ZVZ9fWZ1bmN0aW9uIFMxZShuLHQsZT17fSl7bGV0e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZW5hYmxlSTE4bkxlZ2FjeU1lc3NhZ2VJZEZvcm1hdDpvfT1lLHM9REQoaSksbD0obmV3IF9WKS5wYXJzZShuLHQse2xlYWRpbmdUcml2aWFDaGFyczpnMWUsLi4uZSx0b2tlbml6ZUV4cGFuc2lvbkZvcm1zOiEwfSk7aWYoIWUuYWx3YXlzQXR0ZW1wdEh0bWxUb1IzQXN0Q29udmVyc2lvbiYmbC5lcnJvcnMmJmwuZXJyb3JzLmxlbmd0aD4wKXtsZXQgRD17aW50ZXJwb2xhdGlvbkNvbmZpZzppLHByZXNlcnZlV2hpdGVzcGFjZXM6cixlcnJvcnM6bC5lcnJvcnMsbm9kZXM6W10sc3R5bGVVcmxzOltdLHN0eWxlczpbXSxuZ0NvbnRlbnRTZWxlY3RvcnM6W119O3JldHVybiBlLmNvbGxlY3RDb21tZW50Tm9kZXMmJihELmNvbW1lbnROb2Rlcz1bXSksRH1sZXQgYz1sLnJvb3ROb2Rlcyx1PW5ldyBFRChpLCFyLG8pLGQ9dS52aXNpdEFsbFdpdGhFcnJvcnMoYyk7aWYoIWUuYWx3YXlzQXR0ZW1wdEh0bWxUb1IzQXN0Q29udmVyc2lvbiYmZC5lcnJvcnMmJmQuZXJyb3JzLmxlbmd0aD4wKXtsZXQgRD17aW50ZXJwb2xhdGlvbkNvbmZpZzppLHByZXNlcnZlV2hpdGVzcGFjZXM6cixlcnJvcnM6ZC5lcnJvcnMsbm9kZXM6W10sc3R5bGVVcmxzOltdLHN0eWxlczpbXSxuZ0NvbnRlbnRTZWxlY3RvcnM6W119O3JldHVybiBlLmNvbGxlY3RDb21tZW50Tm9kZXMmJihELmNvbW1lbnROb2Rlcz1bXSksRH1jPWQucm9vdE5vZGVzLHJ8fChjPVV1KG5ldyBjbGFzc3t2aXNpdEVsZW1lbnQodCxlKXtyZXR1cm4gbEVlLmhhcyh0Lm5hbWUpfHx0LmF0dHJzLnNvbWUodD0+dC5uYW1lPT09Z0spP25ldyBxQyh0Lm5hbWUsVXUodGhpcyx0LmF0dHJzKSx0LmNoaWxkcmVuLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4sdC5pMThuKTpuZXcgcUModC5uYW1lLHQuYXR0cnMsZnVuY3Rpb24obix0KXtsZXQgZT1bXTtyZXR1cm4gdC5mb3JFYWNoKChpLHIpPT57bGV0IHM9aS52aXNpdChuLHtwcmV2OnRbci0xXSxuZXh0OnRbcisxXX0pO3MmJmUucHVzaChzKX0pLGV9KHRoaXMsdC5jaGlsZHJlbiksdC5zb3VyY2VTcGFuLHQuc3RhcnRTb3VyY2VTcGFuLHQuZW5kU291cmNlU3Bhbix0LmkxOG4pfXZpc2l0QXR0cmlidXRlKHQsZSl7cmV0dXJuIHQubmFtZSE9PWdLP3Q6bnVsbH12aXNpdFRleHQodCxlKXtpZih0LnZhbHVlLm1hdGNoKGNFZSl8fGUmJihlLnByZXYgaW5zdGFuY2VvZiBOX3x8ZS5uZXh0IGluc3RhbmNlb2YgTl8pKXtsZXQgbz10LnRva2Vucy5tYXAoYT0+NT09PWEudHlwZT9mdW5jdGlvbih7dHlwZTpuLHBhcnRzOnQsc291cmNlU3BhbjplfSl7cmV0dXJue3R5cGU6bixwYXJ0czpbeUsodFswXSldLHNvdXJjZVNwYW46ZX19KGEpOmEpLHM9eUsodC52YWx1ZSk7cmV0dXJuIG5ldyBGXyhzLHQuc291cmNlU3BhbixvLHQuaTE4bil9cmV0dXJuIG51bGx9dmlzaXRDb21tZW50KHQsZSl7cmV0dXJuIHR9dmlzaXRFeHBhbnNpb24odCxlKXtyZXR1cm4gdH12aXNpdEV4cGFuc2lvbkNhc2UodCxlKXtyZXR1cm4gdH19LGMpLHUuaGFzSTE4bk1ldGEmJihjPVV1KG5ldyBFRChpLCExKSxjKSkpO2xldHtub2RlczpwLGVycm9yczpoLHN0eWxlVXJsczpmLHN0eWxlczptLG5nQ29udGVudFNlbGVjdG9yczp4LGNvbW1lbnROb2RlczpnfT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5iaW5kaW5nUGFyc2VyPXQsdGhpcy5vcHRpb25zPWUsdGhpcy5lcnJvcnM9W10sdGhpcy5zdHlsZXM9W10sdGhpcy5zdHlsZVVybHM9W10sdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnM9W10sdGhpcy5jb21tZW50Tm9kZXM9W10sdGhpcy5pbkkxOG5CbG9jaz0hMX12aXNpdEVsZW1lbnQodCl7bGV0IGU9QUModC5pMThuKTtlJiYodGhpcy5pbkkxOG5CbG9jayYmdGhpcy5yZXBvcnRFcnJvcigiQ2Fubm90IG1hcmsgYW4gZWxlbWVudCBhcyB0cmFuc2xhdGFibGUgaW5zaWRlIG9mIGEgdHJhbnNsYXRhYmxlIHNlY3Rpb24uIFBsZWFzZSByZW1vdmUgdGhlIG5lc3RlZCBpMThuIG1hcmtlci4iLHQuc291cmNlU3BhbiksdGhpcy5pbkkxOG5CbG9jaz0hMCk7bGV0IGk9Q0sodCk7aWYoaS50eXBlPT09bmEuU0NSSVBUKXJldHVybiBudWxsO2lmKGkudHlwZT09PW5hLlNUWUxFKXtsZXQgeD0xPT09KG49dCkuY2hpbGRyZW4ubGVuZ3RoJiZuLmNoaWxkcmVuWzBdaW5zdGFuY2VvZiBGXz9uLmNoaWxkcmVuWzBdLnZhbHVlOm51bGw7cmV0dXJuIG51bGwhPT14JiZ0aGlzLnN0eWxlcy5wdXNoKHgpLG51bGx9aWYoaS50eXBlPT09bmEuU1RZTEVTSEVFVCYmZnVuY3Rpb24obil7aWYobnVsbD09bnx8MD09PW4ubGVuZ3RofHwiLyI9PW5bMF0pcmV0dXJuITE7bGV0IHQ9bi5tYXRjaChFRWUpO3JldHVybiBudWxsPT09dHx8InBhY2thZ2UiPT10WzFdfHwiYXNzZXQiPT10WzFdfShpLmhyZWZBdHRyKSlyZXR1cm4gdGhpcy5zdHlsZVVybHMucHVzaChpLmhyZWZBdHRyKSxudWxsO3ZhciBuO2xldCByPWZ1bmN0aW9uKG4pe3JldHVybiJuZy10ZW1wbGF0ZSI9PT1LZChuKVsxXX0odC5uYW1lKSxvPVtdLHM9W10sYT1bXSxsPVtdLGM9W10sdT17fSxkPVtdLHA9W10saD0hMTtmb3IobGV0IHggb2YgdC5hdHRycyl7bGV0IGc9ITEsYj1fUSh4Lm5hbWUpLEQ9ITE7aWYoeC5pMThuJiYodVt4Lm5hbWVdPXguaTE4biksYi5zdGFydHNXaXRoKCIqIikpe2gmJnRoaXMucmVwb3J0RXJyb3IoIkNhbid0IGhhdmUgbXVsdGlwbGUgdGVtcGxhdGUgYmluZGluZ3Mgb24gb25lIGVsZW1lbnQuIFVzZSBvbmx5IG9uZSBhdHRyaWJ1dGUgcHJlZml4ZWQgd2l0aCAqIix4LnNvdXJjZVNwYW4pLEQ9ITAsaD0hMDtsZXQgVD14LnZhbHVlLGs9Yi5zdWJzdHJpbmcoIioiLmxlbmd0aCksWj1bXTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VJbmxpbmVUZW1wbGF0ZUJpbmRpbmcoayxULHguc291cmNlU3Bhbix4LnZhbHVlU3Bhbj94LnZhbHVlU3Bhbi5zdGFydC5vZmZzZXQ6eC5zb3VyY2VTcGFuLnN0YXJ0Lm9mZnNldCt4Lm5hbWUubGVuZ3RoLFtdLGQsWiwhMCkscC5wdXNoKC4uLloubWFwKGZlPT5uZXcgb0QoZmUubmFtZSxmZS52YWx1ZSxmZS5zb3VyY2VTcGFuLGZlLmtleVNwYW4sZmUudmFsdWVTcGFuKSkpfWVsc2UgZz10aGlzLnBhcnNlQXR0cmlidXRlKHIseCxbXSxvLHMsYSxsKTshZyYmIUQmJmMucHVzaCh0aGlzLnZpc2l0QXR0cmlidXRlKHgpKX1sZXQgbSxmPVV1KGkubm9uQmluZGFibGU/SEVlOnRoaXMsdC5jaGlsZHJlbik7aWYoaS50eXBlPT09bmEuTkdfQ09OVEVOVCl7dC5jaGlsZHJlbiYmIXQuY2hpbGRyZW4uZXZlcnkoYj0+ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBGXyYmMD09bi52YWx1ZS50cmltKCkubGVuZ3RofShiKXx8ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiB4RH0oYikpJiZ0aGlzLnJlcG9ydEVycm9yKCI8bmctY29udGVudD4gZWxlbWVudCBjYW5ub3QgaGF2ZSBjb250ZW50LiIsdC5zb3VyY2VTcGFuKTtsZXQgeD1pLnNlbGVjdEF0dHIsZz10LmF0dHJzLm1hcChiPT50aGlzLnZpc2l0QXR0cmlidXRlKGIpKTttPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnNlbGVjdG9yPXQsdGhpcy5hdHRyaWJ1dGVzPWUsdGhpcy5zb3VyY2VTcGFuPWksdGhpcy5pMThuPXIsdGhpcy5uYW1lPSJuZy1jb250ZW50In12aXNpdCh0KXtyZXR1cm4gdC52aXNpdENvbnRlbnQodGhpcyl9fSh4LGcsdC5zb3VyY2VTcGFuLHQuaTE4biksdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnMucHVzaCh4KX1lbHNlIGlmKHIpe2xldCB4PXRoaXMuZXh0cmFjdEF0dHJpYnV0ZXModC5uYW1lLG8sdSk7bT1uZXcgdUModC5uYW1lLGMseC5ib3VuZCxzLFtdLGYsbCxhLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4sdC5pMThuKX1lbHNle2xldCB4PXRoaXMuZXh0cmFjdEF0dHJpYnV0ZXModC5uYW1lLG8sdSk7bT1uZXcgRV8odC5uYW1lLGMseC5ib3VuZCxzLGYsbCx0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuLHQuaTE4bil9aWYoaCl7bGV0IHg9dGhpcy5leHRyYWN0QXR0cmlidXRlcygibmctdGVtcGxhdGUiLGQsdSksZz1bXTt4LmxpdGVyYWwuZm9yRWFjaChrPT5nLnB1c2goaykpLHguYm91bmQuZm9yRWFjaChrPT5nLnB1c2goaykpO2xldCBiPW0gaW5zdGFuY2VvZiBFXz97YXR0cmlidXRlczptLmF0dHJpYnV0ZXMsaW5wdXRzOm0uaW5wdXRzLG91dHB1dHM6bS5vdXRwdXRzfTp7YXR0cmlidXRlczpbXSxpbnB1dHM6W10sb3V0cHV0czpbXX07bT1uZXcgdUMobSBpbnN0YW5jZW9mIHVDP251bGw6bS5uYW1lLGIuYXR0cmlidXRlcyxiLmlucHV0cyxiLm91dHB1dHMsZyxbbV0sW10scCx0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuLHImJmU/dm9pZCAwOnQuaTE4bil9cmV0dXJuIGUmJih0aGlzLmluSTE4bkJsb2NrPSExKSxtfXZpc2l0QXR0cmlidXRlKHQpe3JldHVybiBuZXcgREModC5uYW1lLHQudmFsdWUsdC5zb3VyY2VTcGFuLHQua2V5U3Bhbix0LnZhbHVlU3Bhbix0LmkxOG4pfXZpc2l0VGV4dCh0KXtyZXR1cm4gdGhpcy5fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odC52YWx1ZSx0LnNvdXJjZVNwYW4sdC50b2tlbnMsdC5pMThuKX12aXNpdEV4cGFuc2lvbih0KXtpZighdC5pMThuKXJldHVybiBudWxsO2lmKCFBQyh0LmkxOG4pKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlICIke3QuaTE4bi5jb25zdHJ1Y3Rvcn0iIGZvciAiaTE4biIgcHJvcGVydHkgb2YgJHt0LnNvdXJjZVNwYW4udG9TdHJpbmcoKX0uIEV4cGVjdGVkIGEgIk1lc3NhZ2UiYCk7bGV0IGU9dC5pMThuLGk9e30scj17fTtyZXR1cm4gT2JqZWN0LmtleXMoZS5wbGFjZWhvbGRlcnMpLmZvckVhY2gobz0+e2xldCBzPWUucGxhY2Vob2xkZXJzW29dO2lmKG8uc3RhcnRzV2l0aCgiVkFSXyIpKXtsZXQgYT1vLnRyaW0oKSxsPXRoaXMuYmluZGluZ1BhcnNlci5wYXJzZUludGVycG9sYXRpb25FeHByZXNzaW9uKHMudGV4dCxzLnNvdXJjZVNwYW4pO2lbYV09bmV3IFRDKGwscy5zb3VyY2VTcGFuKX1lbHNlIHJbb109dGhpcy5fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24ocy50ZXh0LHMuc291cmNlU3BhbixudWxsKX0pLG5ldyBzRChpLHIsdC5zb3VyY2VTcGFuLGUpfXZpc2l0RXhwYW5zaW9uQ2FzZSh0KXtyZXR1cm4gbnVsbH12aXNpdENvbW1lbnQodCl7cmV0dXJuIHRoaXMub3B0aW9ucy5jb2xsZWN0Q29tbWVudE5vZGVzJiZ0aGlzLmNvbW1lbnROb2Rlcy5wdXNoKG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMudmFsdWU9dCx0aGlzLnNvdXJjZVNwYW49ZX12aXNpdCh0KXt0aHJvdyBuZXcgRXJyb3IoInZpc2l0KCkgbm90IGltcGxlbWVudGVkIGZvciBDb21tZW50Iil9fSh0LnZhbHVlfHwiIix0LnNvdXJjZVNwYW4pKSxudWxsfWV4dHJhY3RBdHRyaWJ1dGVzKHQsZSxpKXtsZXQgcj1bXSxvPVtdO3JldHVybiBlLmZvckVhY2gocz0+e2xldCBhPWlbcy5uYW1lXTtpZihzLmlzTGl0ZXJhbClvLnB1c2gobmV3IERDKHMubmFtZSxzLmV4cHJlc3Npb24uc291cmNlfHwiIixzLnNvdXJjZVNwYW4scy5rZXlTcGFuLHMudmFsdWVTcGFuLGEpKTtlbHNle2xldCBsPXRoaXMuYmluZGluZ1BhcnNlci5jcmVhdGVCb3VuZEVsZW1lbnRQcm9wZXJ0eSh0LHMsITAsITEpO3IucHVzaCh3Xy5mcm9tQm91bmRFbGVtZW50UHJvcGVydHkobCxhKSl9fSkse2JvdW5kOnIsbGl0ZXJhbDpvfX1wYXJzZUF0dHJpYnV0ZSh0LGUsaSxyLG8scyxhKXtsZXQgbD1fUShlLm5hbWUpLGM9ZS52YWx1ZSx1PWUuc291cmNlU3BhbixkPWUudmFsdWVTcGFuP2UudmFsdWVTcGFuLnN0YXJ0Lm9mZnNldDp1LnN0YXJ0Lm9mZnNldDtmdW5jdGlvbiBwKGcsYixEKXtsZXQgaz1nLnN0YXJ0Lm1vdmVCeShiLmxlbmd0aCsoZS5uYW1lLmxlbmd0aC1sLmxlbmd0aCkpLFo9ay5tb3ZlQnkoRC5sZW5ndGgpO3JldHVybiBuZXcgR28oayxaLGssRCl9bGV0IGg9bC5tYXRjaChMRWUpO2lmKGgpe2lmKG51bGwhPWhbMV0pe2xldCBnPWhbN10sYj1wKHUsaFsxXSxnKTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VQcm9wZXJ0eUJpbmRpbmcoZyxjLCExLHUsZCxlLnZhbHVlU3BhbixpLHIsYil9ZWxzZSBpZihoWzJdKWlmKHQpe2xldCBnPWhbN10sYj1wKHUsaFsyXSxnKTt0aGlzLnBhcnNlVmFyaWFibGUoZyxjLHUsYixlLnZhbHVlU3BhbixzKX1lbHNlIHRoaXMucmVwb3J0RXJyb3IoJyJsZXQtIiBpcyBvbmx5IHN1cHBvcnRlZCBvbiBuZy10ZW1wbGF0ZSBlbGVtZW50cy4nLHUpO2Vsc2UgaWYoaFszXSl7bGV0IGc9aFs3XSxiPXAodSxoWzNdLGcpO3RoaXMucGFyc2VSZWZlcmVuY2UoZyxjLHUsYixlLnZhbHVlU3BhbixhKX1lbHNlIGlmKGhbNF0pe2xldCBnPVtdLGI9aFs3XSxEPXAodSxoWzRdLGIpO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZUV2ZW50KGIsYywhMSx1LGUudmFsdWVTcGFufHx1LGksZyxEKSxtQihnLG8pfWVsc2UgaWYoaFs1XSl7bGV0IGc9aFs3XSxiPXAodSxoWzVdLGcpO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5QmluZGluZyhnLGMsITEsdSxkLGUudmFsdWVTcGFuLGkscixiKSx0aGlzLnBhcnNlQXNzaWdubWVudEV2ZW50KGcsYyx1LGUudmFsdWVTcGFuLGksbyxiKX1lbHNlIGlmKGhbNl0pe2xldCBnPXAodSwiIixsKTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VMaXRlcmFsQXR0cihsLGMsdSxkLGUudmFsdWVTcGFuLGkscixnKX1yZXR1cm4hMH1sZXQgZj1udWxsO2lmKGwuc3RhcnRzV2l0aChacF9CQU5BTkFfQk9YLnN0YXJ0KT9mPVpwX0JBTkFOQV9CT1g6bC5zdGFydHNXaXRoKFpwX1BST1BFUlRZLnN0YXJ0KT9mPVpwX1BST1BFUlRZOmwuc3RhcnRzV2l0aChacF9FVkVOVC5zdGFydCkmJihmPVpwX0VWRU5UKSxudWxsIT09ZiYmbC5lbmRzV2l0aChmLmVuZCkmJmwubGVuZ3RoPmYuc3RhcnQubGVuZ3RoK2YuZW5kLmxlbmd0aCl7bGV0IGc9bC5zdWJzdHJpbmcoZi5zdGFydC5sZW5ndGgsbC5sZW5ndGgtZi5lbmQubGVuZ3RoKSxiPXAodSxmLnN0YXJ0LGcpO2lmKGYuc3RhcnQ9PT1acF9CQU5BTkFfQk9YLnN0YXJ0KXRoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5QmluZGluZyhnLGMsITEsdSxkLGUudmFsdWVTcGFuLGkscixiKSx0aGlzLnBhcnNlQXNzaWdubWVudEV2ZW50KGcsYyx1LGUudmFsdWVTcGFuLGksbyxiKTtlbHNlIGlmKGYuc3RhcnQ9PT1acF9QUk9QRVJUWS5zdGFydCl0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VQcm9wZXJ0eUJpbmRpbmcoZyxjLCExLHUsZCxlLnZhbHVlU3BhbixpLHIsYik7ZWxzZXtsZXQgRD1bXTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VFdmVudChnLGMsITEsdSxlLnZhbHVlU3Bhbnx8dSxpLEQsYiksbUIoRCxvKX1yZXR1cm4hMH1sZXQgbT1wKHUsIiIsbCk7cmV0dXJuIHRoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5SW50ZXJwb2xhdGlvbihsLGMsdSxlLnZhbHVlU3BhbixpLHIsbSxlLnZhbHVlVG9rZW5zPz9udWxsKX1fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odCxlLGkscil7bGV0IG89dksodCkscz10aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VJbnRlcnBvbGF0aW9uKG8sZSxpKTtyZXR1cm4gcz9uZXcgVEMocyxlLHIpOm5ldyBNXyhvLGUpfXBhcnNlVmFyaWFibGUodCxlLGkscixvLHMpe3QuaW5kZXhPZigiLSIpPi0xP3RoaXMucmVwb3J0RXJyb3IoJyItIiBpcyBub3QgYWxsb3dlZCBpbiB2YXJpYWJsZSBuYW1lcycsaSk6MD09PXQubGVuZ3RoJiZ0aGlzLnJlcG9ydEVycm9yKCJWYXJpYWJsZSBkb2VzIG5vdCBoYXZlIGEgbmFtZSIsaSkscy5wdXNoKG5ldyBvRCh0LGUsaSxyLG8pKX1wYXJzZVJlZmVyZW5jZSh0LGUsaSxyLG8scyl7dC5pbmRleE9mKCItIik+LTE/dGhpcy5yZXBvcnRFcnJvcignIi0iIGlzIG5vdCBhbGxvd2VkIGluIHJlZmVyZW5jZSBuYW1lcycsaSk6MD09PXQubGVuZ3RoP3RoaXMucmVwb3J0RXJyb3IoIlJlZmVyZW5jZSBkb2VzIG5vdCBoYXZlIGEgbmFtZSIsaSk6cy5zb21lKGE9PmEubmFtZT09PXQpJiZ0aGlzLnJlcG9ydEVycm9yKGBSZWZlcmVuY2UgIiMke3R9IiBpcyBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlYCxpKSxzLnB1c2gobmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW99dmlzaXQodCl7cmV0dXJuIHQudmlzaXRSZWZlcmVuY2UodGhpcyl9fSh0LGUsaSxyLG8pKX1wYXJzZUFzc2lnbm1lbnRFdmVudCh0LGUsaSxyLG8scyxhKXtsZXQgbD1bXTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VFdmVudChgJHt0fUNoYW5nZWAsYCR7ZX0gPSRldmVudGAsITAsaSxyfHxpLG8sbCxhKSxtQihsLHMpfXJlcG9ydEVycm9yKHQsZSxpPWt1LkVSUk9SKXt0aGlzLmVycm9ycy5wdXNoKG5ldyB5bShlLHQsaSkpfX0odCxlKSxzPXtub2RlczpVdShpLG4pLGVycm9yczp0LmVycm9ycy5jb25jYXQoaS5lcnJvcnMpLHN0eWxlVXJsczppLnN0eWxlVXJscyxzdHlsZXM6aS5zdHlsZXMsbmdDb250ZW50U2VsZWN0b3JzOmkubmdDb250ZW50U2VsZWN0b3JzfTtyZXR1cm4gZS5jb2xsZWN0Q29tbWVudE5vZGVzJiYocy5jb21tZW50Tm9kZXM9aS5jb21tZW50Tm9kZXMpLHN9KGMscyx7Y29sbGVjdENvbW1lbnROb2RlczohIWUuY29sbGVjdENvbW1lbnROb2Rlc30pO2gucHVzaCguLi5sLmVycm9ycywuLi5kLmVycm9ycyk7bGV0IGI9e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZXJyb3JzOmgubGVuZ3RoPjA/aDpudWxsLG5vZGVzOnAsc3R5bGVVcmxzOmYsc3R5bGVzOm0sbmdDb250ZW50U2VsZWN0b3JzOnh9O3JldHVybiBlLmNvbGxlY3RDb21tZW50Tm9kZXMmJihiLmNvbW1lbnROb2Rlcz1nKSxifXZhciBFSz1uZXcgU0Q7ZnVuY3Rpb24gREQobj1QdSl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl9leHByUGFyc2VyPXQsdGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZz1lLHRoaXMuX3NjaGVtYVJlZ2lzdHJ5PWksdGhpcy5lcnJvcnM9cn1nZXQgaW50ZXJwb2xhdGlvbkNvbmZpZygpe3JldHVybiB0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnfWNyZWF0ZUJvdW5kSG9zdFByb3BlcnRpZXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgT2JqZWN0LmtleXModCkpe2xldCBvPXRbcl07InN0cmluZyI9PXR5cGVvZiBvP3RoaXMucGFyc2VQcm9wZXJ0eUJpbmRpbmcocixvLCEwLGUsZS5zdGFydC5vZmZzZXQsdm9pZCAwLFtdLGksZSk6dGhpcy5fcmVwb3J0RXJyb3IoYFZhbHVlIG9mIHRoZSBob3N0IHByb3BlcnR5IGJpbmRpbmcgIiR7cn0iIG5lZWRzIHRvIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBleHByZXNzaW9uIGJ1dCBnb3QgIiR7b30iICgke3R5cGVvZiBvfSlgLGUpfXJldHVybiBpfWNyZWF0ZURpcmVjdGl2ZUhvc3RFdmVudEFzdHModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgT2JqZWN0LmtleXModCkpe2xldCBvPXRbcl07InN0cmluZyI9PXR5cGVvZiBvP3RoaXMucGFyc2VFdmVudChyLG8sITEsZSxlLFtdLGksZSk6dGhpcy5fcmVwb3J0RXJyb3IoYFZhbHVlIG9mIHRoZSBob3N0IGxpc3RlbmVyICIke3J9IiBuZWVkcyB0byBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gZXhwcmVzc2lvbiBidXQgZ290ICIke299IiAoJHt0eXBlb2Ygb30pYCxlKX1yZXR1cm4gaX1wYXJzZUludGVycG9sYXRpb24odCxlLGkpe2xldCByPWUuc3RhcnQudG9TdHJpbmcoKSxvPWUuZnVsbFN0YXJ0Lm9mZnNldDt0cnl7bGV0IHM9dGhpcy5fZXhwclBhcnNlci5wYXJzZUludGVycG9sYXRpb24odCxyLG8saSx0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKTtyZXR1cm4gcyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhzLmVycm9ycyxlKSxzfWNhdGNoKHMpe3JldHVybiB0aGlzLl9yZXBvcnRFcnJvcihgJHtzfWAsZSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLHIsbyl9fXBhcnNlSW50ZXJwb2xhdGlvbkV4cHJlc3Npb24odCxlKXtsZXQgaT1lLnN0YXJ0LnRvU3RyaW5nKCkscj1lLnN0YXJ0Lm9mZnNldDt0cnl7bGV0IG89dGhpcy5fZXhwclBhcnNlci5wYXJzZUludGVycG9sYXRpb25FeHByZXNzaW9uKHQsaSxyKTtyZXR1cm4gbyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhvLmVycm9ycyxlKSxvfWNhdGNoKG8pe3JldHVybiB0aGlzLl9yZXBvcnRFcnJvcihgJHtvfWAsZSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLGkscil9fXBhcnNlSW5saW5lVGVtcGxhdGVCaW5kaW5nKHQsZSxpLHIsbyxzLGEsbCl7bGV0IHU9dGhpcy5fcGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQsZSxpLGkuc3RhcnQub2Zmc2V0KyIqIi5sZW5ndGgscik7Zm9yKGxldCBkIG9mIHUpe2xldCBwPUtwKGksZC5zb3VyY2VTcGFuKSxoPWQua2V5LnNvdXJjZSxmPUtwKGksZC5rZXkuc3Bhbik7aWYoZCBpbnN0YW5jZW9mIHpDKXtsZXQgbT1kLnZhbHVlP2QudmFsdWUuc291cmNlOiIkaW1wbGljaXQiLHg9ZC52YWx1ZT9LcChpLGQudmFsdWUuc3Bhbik6dm9pZCAwO2EucHVzaChuZXcgZVYoaCxtLHAsZix4KSl9ZWxzZSBpZihkLnZhbHVlKXtsZXQgbT1sP3A6aSx4PUtwKGksZC52YWx1ZS5hc3Quc291cmNlU3Bhbik7dGhpcy5fcGFyc2VQcm9wZXJ0eUFzdChoLGQudmFsdWUsbSxmLHgsbyxzKX1lbHNlIG8ucHVzaChbaCwiIl0pLHRoaXMucGFyc2VMaXRlcmFsQXR0cihoLG51bGwsZixyLHZvaWQgMCxvLHMsZil9fV9wYXJzZVRlbXBsYXRlQmluZGluZ3ModCxlLGkscixvKXtsZXQgcz1pLnN0YXJ0LnRvU3RyaW5nKCk7dHJ5e2xldCBhPXRoaXMuX2V4cHJQYXJzZXIucGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQsZSxzLHIsbyk7cmV0dXJuIHRoaXMuX3JlcG9ydEV4cHJlc3Npb25QYXJzZXJFcnJvcnMoYS5lcnJvcnMsaSksYS53YXJuaW5ncy5mb3JFYWNoKGw9Pnt0aGlzLl9yZXBvcnRFcnJvcihsLGksa3UuV0FSTklORyl9KSxhLnRlbXBsYXRlQmluZGluZ3N9Y2F0Y2goYSl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke2F9YCxpKSxbXX19cGFyc2VMaXRlcmFsQXR0cih0LGUsaSxyLG8scyxhLGwpe2hCKHQpPyh0PXQuc3Vic3RyaW5nKDEpLHZvaWQgMCE9PWwmJihsPUtwKGwsbmV3IGFsKGwuc3RhcnQub2Zmc2V0KzEsbC5lbmQub2Zmc2V0KSkpLGUmJnRoaXMuX3JlcG9ydEVycm9yKCdBc3NpZ25pbmcgYW5pbWF0aW9uIHRyaWdnZXJzIHZpYSBAcHJvcD0iZXhwIiBhdHRyaWJ1dGVzIHdpdGggYW4gZXhwcmVzc2lvbiBpcyBpbnZhbGlkLiBVc2UgcHJvcGVydHkgYmluZGluZ3MgKGUuZy4gW0Bwcm9wXT0iZXhwIikgb3IgdXNlIGFuIGF0dHJpYnV0ZSB3aXRob3V0IGEgdmFsdWUgKGUuZy4gQHByb3ApIGluc3RlYWQuJyxpLGt1LkVSUk9SKSx0aGlzLl9wYXJzZUFuaW1hdGlvbih0LGUsaSxyLGwsbyxzLGEpKTphLnB1c2gobmV3IHBDKHQsdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZShlLCIiLHIpLGloLkxJVEVSQUxfQVRUUixpLGwsbykpfXBhcnNlUHJvcGVydHlCaW5kaW5nKHQsZSxpLHIsbyxzLGEsbCxjKXswPT09dC5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJQcm9wZXJ0eSBuYW1lIGlzIG1pc3NpbmcgaW4gYmluZGluZyIscik7bGV0IHU9ITE7dC5zdGFydHNXaXRoKHBCKT8odT0hMCx0PXQuc3Vic3RyaW5nKHBCLmxlbmd0aCksdm9pZCAwIT09YyYmKGM9S3AoYyxuZXcgYWwoYy5zdGFydC5vZmZzZXQrcEIubGVuZ3RoLGMuZW5kLm9mZnNldCkpKSk6aEIodCkmJih1PSEwLHQ9dC5zdWJzdHJpbmcoMSksdm9pZCAwIT09YyYmKGM9S3AoYyxuZXcgYWwoYy5zdGFydC5vZmZzZXQrMSxjLmVuZC5vZmZzZXQpKSkpLHU/dGhpcy5fcGFyc2VBbmltYXRpb24odCxlLHIsbyxjLHMsYSxsKTp0aGlzLl9wYXJzZVByb3BlcnR5QXN0KHQsdGhpcy5fcGFyc2VCaW5kaW5nKGUsaSxzfHxyLG8pLHIsYyxzLGEsbCl9cGFyc2VQcm9wZXJ0eUludGVycG9sYXRpb24odCxlLGkscixvLHMsYSxsKXtsZXQgYz10aGlzLnBhcnNlSW50ZXJwb2xhdGlvbihlLHJ8fGksbCk7cmV0dXJuISFjJiYodGhpcy5fcGFyc2VQcm9wZXJ0eUFzdCh0LGMsaSxhLHIsbyxzKSwhMCl9X3BhcnNlUHJvcGVydHlBc3QodCxlLGkscixvLHMsYSl7cy5wdXNoKFt0LGUuc291cmNlXSksYS5wdXNoKG5ldyBwQyh0LGUsaWguREVGQVVMVCxpLHIsbykpfV9wYXJzZUFuaW1hdGlvbih0LGUsaSxyLG8scyxhLGwpezA9PT10Lmxlbmd0aCYmdGhpcy5fcmVwb3J0RXJyb3IoIkFuaW1hdGlvbiB0cmlnZ2VyIGlzIG1pc3NpbmciLGkpO2xldCBjPXRoaXMuX3BhcnNlQmluZGluZyhlfHwidW5kZWZpbmVkIiwhMSxzfHxpLHIpO2EucHVzaChbdCxjLnNvdXJjZV0pLGwucHVzaChuZXcgcEModCxjLGloLkFOSU1BVElPTixpLG8scykpfV9wYXJzZUJpbmRpbmcodCxlLGkscil7bGV0IG89KGkmJmkuc3RhcnR8fCIodW5rbm93bikiKS50b1N0cmluZygpO3RyeXtsZXQgcz1lP3RoaXMuX2V4cHJQYXJzZXIucGFyc2VTaW1wbGVCaW5kaW5nKHQsbyxyLHRoaXMuX2ludGVycG9sYXRpb25Db25maWcpOnRoaXMuX2V4cHJQYXJzZXIucGFyc2VCaW5kaW5nKHQsbyxyLHRoaXMuX2ludGVycG9sYXRpb25Db25maWcpO3JldHVybiBzJiZ0aGlzLl9yZXBvcnRFeHByZXNzaW9uUGFyc2VyRXJyb3JzKHMuZXJyb3JzLGkpLHN9Y2F0Y2gocyl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke3N9YCxpKSx0aGlzLl9leHByUGFyc2VyLndyYXBMaXRlcmFsUHJpbWl0aXZlKCJFUlJPUiIsbyxyKX19Y3JlYXRlQm91bmRFbGVtZW50UHJvcGVydHkodCxlLGk9ITEscj0hMCl7aWYoZS5pc0FuaW1hdGlvbilyZXR1cm4gbmV3IGZEKGUubmFtZSw0LGlvLk5PTkUsZS5leHByZXNzaW9uLG51bGwsZS5zb3VyY2VTcGFuLGUua2V5U3BhbixlLnZhbHVlU3Bhbik7bGV0IHMsYyxvPW51bGwsYT1udWxsLGw9ZS5uYW1lLnNwbGl0KCIuIik7aWYobC5sZW5ndGg+MSlpZigiYXR0ciI9PWxbMF0pe2E9bC5zbGljZSgxKS5qb2luKCIuIiksaXx8dGhpcy5fdmFsaWRhdGVQcm9wZXJ0eU9yQXR0cmlidXRlTmFtZShhLGUuc291cmNlU3BhbiwhMCksYz1mQih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LGEsITApO2xldCB1PWEuaW5kZXhPZigiOiIpO2lmKHU+LTEpe2xldCBkPWEuc3Vic3RyaW5nKDAsdSkscD1hLnN1YnN0cmluZyh1KzEpO2E9d0IoZCxwKX1zPTF9ZWxzZSJjbGFzcyI9PWxbMF0/KGE9bFsxXSxzPTIsYz1baW8uTk9ORV0pOiJzdHlsZSI9PWxbMF0mJihvPWwubGVuZ3RoPjI/bFsyXTpudWxsLGE9bFsxXSxzPTMsYz1baW8uU1RZTEVdKTtpZihudWxsPT09YSl7bGV0IHU9dGhpcy5fc2NoZW1hUmVnaXN0cnkuZ2V0TWFwcGVkUHJvcE5hbWUoZS5uYW1lKTthPXI/dTplLm5hbWUsYz1mQih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LHUsITEpLHM9MCxpfHx0aGlzLl92YWxpZGF0ZVByb3BlcnR5T3JBdHRyaWJ1dGVOYW1lKHUsZS5zb3VyY2VTcGFuLCExKX1yZXR1cm4gbmV3IGZEKGEscyxjWzBdLGUuZXhwcmVzc2lvbixvLGUuc291cmNlU3BhbixlLmtleVNwYW4sZS52YWx1ZVNwYW4pfXBhcnNlRXZlbnQodCxlLGkscixvLHMsYSxsKXswPT09dC5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJFdmVudCBuYW1lIGlzIG1pc3NpbmcgaW4gYmluZGluZyIsciksaEIodCk/KHQ9dC5zbGljZSgxKSx2b2lkIDAhPT1sJiYobD1LcChsLG5ldyBhbChsLnN0YXJ0Lm9mZnNldCsxLGwuZW5kLm9mZnNldCkpKSx0aGlzLl9wYXJzZUFuaW1hdGlvbkV2ZW50KHQsZSxpLHIsbyxhLGwpKTp0aGlzLl9wYXJzZVJlZ3VsYXJFdmVudCh0LGUsaSxyLG8scyxhLGwpfWNhbGNQb3NzaWJsZVNlY3VyaXR5Q29udGV4dHModCxlLGkpe2xldCByPXRoaXMuX3NjaGVtYVJlZ2lzdHJ5LmdldE1hcHBlZFByb3BOYW1lKGUpO3JldHVybiBmQih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LHIsaSl9X3BhcnNlQW5pbWF0aW9uRXZlbnQodCxlLGkscixvLHMsYSl7bGV0IGw9ZnVuY3Rpb24obix0KXtyZXR1cm4gT1EobiwiLiIsdCl9KHQsW3QsIiJdKSxjPWxbMF0sdT1sWzFdLnRvTG93ZXJDYXNlKCksZD10aGlzLl9wYXJzZUFjdGlvbihlLGksbyk7cy5wdXNoKG5ldyBoRChjLHUsMSxkLHIsbyxhKSksMD09PWMubGVuZ3RoJiZ0aGlzLl9yZXBvcnRFcnJvcigiQW5pbWF0aW9uIGV2ZW50IG5hbWUgaXMgbWlzc2luZyBpbiBiaW5kaW5nIixyKSx1PyJzdGFydCIhPT11JiYiZG9uZSIhPT11JiZ0aGlzLl9yZXBvcnRFcnJvcihgVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiBvdXRwdXQgcGhhc2UgdmFsdWUgIiR7dX0iIGZvciAiQCR7Y30iIGlzIG5vdCBzdXBwb3J0ZWQgKHVzZSBzdGFydCBvciBkb25lKWAscik6dGhpcy5fcmVwb3J0RXJyb3IoYFRoZSBhbmltYXRpb24gdHJpZ2dlciBvdXRwdXQgZXZlbnQgKEAke2N9KSBpcyBtaXNzaW5nIGl0cyBwaGFzZSB2YWx1ZSBuYW1lIChzdGFydCBvciBkb25lIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkKWAscil9X3BhcnNlUmVndWxhckV2ZW50KHQsZSxpLHIsbyxzLGEsbCl7bGV0W2MsdV09ZnVuY3Rpb24obix0KXtyZXR1cm4gT1EobiwiOiIsdCl9KHQsW251bGwsdF0pLGQ9dGhpcy5fcGFyc2VBY3Rpb24oZSxpLG8pO3MucHVzaChbdCxkLnNvdXJjZV0pLGEucHVzaChuZXcgaEQodSxjLDAsZCxyLG8sbCkpfV9wYXJzZUFjdGlvbih0LGUsaSl7bGV0IHI9KGkmJmkuc3RhcnR8fCIodW5rbm93biIpLnRvU3RyaW5nKCksbz1pJiZpLnN0YXJ0P2kuc3RhcnQub2Zmc2V0OjA7dHJ5e2xldCBzPXRoaXMuX2V4cHJQYXJzZXIucGFyc2VBY3Rpb24odCxlLHIsbyx0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKTtyZXR1cm4gcyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhzLmVycm9ycyxpKSwhc3x8cy5hc3QgaW5zdGFuY2VvZiBJYT8odGhpcy5fcmVwb3J0RXJyb3IoIkVtcHR5IGV4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCIsaSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLHIsbykpOnN9Y2F0Y2gocyl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke3N9YCxpKSx0aGlzLl9leHByUGFyc2VyLndyYXBMaXRlcmFsUHJpbWl0aXZlKCJFUlJPUiIscixvKX19X3JlcG9ydEVycm9yKHQsZSxpPWt1LkVSUk9SKXt0aGlzLmVycm9ycy5wdXNoKG5ldyB5bShlLHQsaSkpfV9yZXBvcnRFeHByZXNzaW9uUGFyc2VyRXJyb3JzKHQsZSl7Zm9yKGxldCBpIG9mIHQpdGhpcy5fcmVwb3J0RXJyb3IoaS5tZXNzYWdlLGUpfV92YWxpZGF0ZVByb3BlcnR5T3JBdHRyaWJ1dGVOYW1lKHQsZSxpKXtsZXQgcj1pP3RoaXMuX3NjaGVtYVJlZ2lzdHJ5LnZhbGlkYXRlQXR0cmlidXRlKHQpOnRoaXMuX3NjaGVtYVJlZ2lzdHJ5LnZhbGlkYXRlUHJvcGVydHkodCk7ci5lcnJvciYmdGhpcy5fcmVwb3J0RXJyb3Ioci5tc2csZSxrdS5FUlJPUil9fShuZXcgYkQobmV3IHlEKSxuLEVLLFtdKX1mdW5jdGlvbiBUSyhuLHQpe3N3aXRjaChuKXtjYXNlIGlvLkhUTUw6cmV0dXJuIFRuKHRlLnNhbml0aXplSHRtbCk7Y2FzZSBpby5TQ1JJUFQ6cmV0dXJuIFRuKHRlLnNhbml0aXplU2NyaXB0KTtjYXNlIGlvLlNUWUxFOnJldHVybiB0P1RuKHRlLnNhbml0aXplU3R5bGUpOm51bGw7Y2FzZSBpby5VUkw6cmV0dXJuIFRuKHRlLnNhbml0aXplVXJsKTtjYXNlIGlvLlJFU09VUkNFX1VSTDpyZXR1cm4gVG4odGUuc2FuaXRpemVSZXNvdXJjZVVybCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gRTFlKG4sdCl7bGV0IGU9TnUodC52YWx1ZSk7aWYoIXhLKG4sdC5uYW1lKSlyZXR1cm4gZTtzd2l0Y2goRUsuc2VjdXJpdHlDb250ZXh0KG4sdC5uYW1lLCEwKSl7Y2FzZSBpby5IVE1MOnJldHVybiBDWChUbih0ZS50cnVzdENvbnN0YW50SHRtbCksbmV3ICRUKFtuZXcgZUQodC52YWx1ZSldLFtdKSx2b2lkIDAsdC52YWx1ZVNwYW4pO2Nhc2UgaW8uUkVTT1VSQ0VfVVJMOnJldHVybiBDWChUbih0ZS50cnVzdENvbnN0YW50UmVzb3VyY2VVcmwpLG5ldyAkVChbbmV3IGVEKHQudmFsdWUpXSxbXSksdm9pZCAwLHQudmFsdWVTcGFuKTtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBEMWUobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBNX3x8biBpbnN0YW5jZW9mIFRDfHxuIGluc3RhbmNlb2Ygc0R9ZnVuY3Rpb24gYkIobil7cmV0dXJuIG4uZXZlcnkoRDFlKX1mdW5jdGlvbiB6VChuLHQsZSl7cmV0dXJuKCk9PntsZXQgaT1uKCkscj1BcnJheS5pc0FycmF5KGkpP2k6W2ldO3JldHVybiBlJiZyLnB1c2goLi4uZSksdCYmci51bnNoaWZ0KGh0KHQpKSxyfX12YXIgTVE9Im5nSTE4bkNsb3N1cmVNb2RlIjtmdW5jdGlvbiBESyhuKXtyZXR1cm4gbi5yZWR1Y2UoKHQsZSk9PntsZXQgaT1BcnJheS5pc0FycmF5KGUpP0RLKGUpOmU7cmV0dXJuIHQuY29uY2F0KGkpfSxbXSl9dmFyIFAxZT0vYXR0clwuKFteXF1dKykvO2Z1bmN0aW9uIElLKG4sdCxlKXtsZXQgaT1uZXcgc2gscj1OVihuLnNlbGVjdG9yKTtyZXR1cm4gaS5zZXQoInR5cGUiLG4uaW50ZXJuYWxUeXBlKSxyLmxlbmd0aD4wJiZpLnNldCgic2VsZWN0b3JzIixOdShyKSksbi5xdWVyaWVzLmxlbmd0aD4wJiZpLnNldCgiY29udGVudFF1ZXJpZXMiLGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1bXSxyPVtdLG89WFEociwiX3QiKTtmb3IobGV0IGEgb2Ygbil7aS5wdXNoKFRuKHRlLmNvbnRlbnRRdWVyeSkuY2FsbEZuKFtSaSgiZGlySW5kZXgiKSwuLi5SSyhhLHQpXSkudG9TdG10KCkpO2xldCBsPW8oKSxjPVRuKHRlLmxvYWRRdWVyeSkuY2FsbEZuKFtdKSx1PVRuKHRlLnF1ZXJ5UmVmcmVzaCkuY2FsbEZuKFtsLnNldChjKV0pLGQ9UmkoSGMpLnByb3AoYS5wcm9wZXJ0eU5hbWUpLnNldChhLmZpcnN0P2wucHJvcCgiZmlyc3QiKTpsKTtyLnB1c2godS5hbmQoZCkudG9TdG10KCkpfWxldCBzPWU/YCR7ZX1fQ29udGVudFF1ZXJpZXNgOm51bGw7cmV0dXJuIHJhKFtuZXcgaWEoJEMsWkMpLG5ldyBpYShIYyxudWxsKSxuZXcgaWEoImRpckluZGV4IixudWxsKV0sW2xoKDEsaSksbGgoMixyKV0sUGEsbnVsbCxzKX0obi5xdWVyaWVzLHQsbi5uYW1lKSksbi52aWV3UXVlcmllcy5sZW5ndGgmJmkuc2V0KCJ2aWV3UXVlcnkiLGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1bXSxyPVtdLG89WFEociwiX3QiKTtuLmZvckVhY2goYT0+e2xldCBsPVRuKHRlLnZpZXdRdWVyeSkuY2FsbEZuKFJLKGEsdCkpO2kucHVzaChsLnRvU3RtdCgpKTtsZXQgYz1vKCksdT1Ubih0ZS5sb2FkUXVlcnkpLmNhbGxGbihbXSksZD1Ubih0ZS5xdWVyeVJlZnJlc2gpLmNhbGxGbihbYy5zZXQodSldKSxwPVJpKEhjKS5wcm9wKGEucHJvcGVydHlOYW1lKS5zZXQoYS5maXJzdD9jLnByb3AoImZpcnN0Iik6Yyk7ci5wdXNoKGQuYW5kKHApLnRvU3RtdCgpKX0pO2xldCBzPWU/YCR7ZX1fUXVlcnlgOm51bGw7cmV0dXJuIHJhKFtuZXcgaWEoJEMsWkMpLG5ldyBpYShIYyxudWxsKV0sW2xoKDEsaSksbGgoMixyKV0sUGEsbnVsbCxzKX0obi52aWV3UXVlcmllcyx0LG4ubmFtZSkpLGkuc2V0KCJob3N0QmluZGluZ3MiLGZ1bmN0aW9uKG4sdCxlLGkscixvLHMpe2xldCBhPVJpKEhjKSxsPW5ldyB2RChhKSx7c3R5bGVBdHRyOmMsY2xhc3NBdHRyOnV9PW4uc3BlY2lhbEF0dHJpYnV0ZXM7dm9pZCAwIT09YyYmbC5yZWdpc3RlclN0eWxlQXR0cihjKSx2b2lkIDAhPT11JiZsLnJlZ2lzdGVyQ2xhc3NBdHRyKHUpO2xldCBkPVtdLHA9W10saD1bXSxmPXQsbT1lLmNyZWF0ZURpcmVjdGl2ZUhvc3RFdmVudEFzdHMobi5saXN0ZW5lcnMsZik7bSYmbS5sZW5ndGgmJmQucHVzaCguLi5mdW5jdGlvbihuLHQpe2xldCBlPVtdLGk9W10scj1bXTtmb3IobGV0IG8gb2Ygbil7bGV0IHM9by5uYW1lJiZtXyhvLm5hbWUpLGE9MT09PW8udHlwZT9qUShzLG8udGFyZ2V0T3JQaGFzZSk6cyxsPXQmJnM/YCR7dH1fJHthfV9Ib3N0QmluZGluZ0hhbmRsZXJgOm51bGwsYz1TSyhTXy5mcm9tUGFyc2VkRXZlbnQobyksbCk7MT09by50eXBlP2kucHVzaChjKTplLnB1c2goYyl9Zm9yKGxldCBvIG9mIGkpci5wdXNoKHtyZWZlcmVuY2U6dGUuc3ludGhldGljSG9zdExpc3RlbmVyLHBhcmFtc09yRm46byxzcGFuOm51bGx9KTtmb3IobGV0IG8gb2YgZSlyLnB1c2goe3JlZmVyZW5jZTp0ZS5saXN0ZW5lcixwYXJhbXNPckZuOm8sc3BhbjpudWxsfSk7cmV0dXJuIHJ9KG0sbykpO2xldCB4PWUuY3JlYXRlQm91bmRIb3N0UHJvcGVydGllcyhuLnByb3BlcnRpZXMsZiksZz1bXSxiPTA7eCYmeC5mb3JFYWNoKHVlPT57bC5yZWdpc3RlcklucHV0QmFzZWRPbk5hbWUodWUubmFtZSx1ZS5leHByZXNzaW9uLGYpP2IrPTI6KGcucHVzaCh1ZSksYisrKX0pO2xldCBELFQ9KCk9PihEfHwoRD1uZXcgVEQoaSwoKT0+UVQoIlVuZXhwZWN0ZWQgbm9kZSIpLGhlPT57bGV0IHc9YjtyZXR1cm4gYis9aGUsd30sKCk9PlFUKCJVbmV4cGVjdGVkIHBpcGUiKSkpLEQpLGs9W10sWj1bXSx6PVtdO2ZvcihsZXQgdWUgb2YgZyl7bGV0IGhlPXVlLmV4cHJlc3Npb24udmlzaXQoVCgpKSx3PVNRKGEsaGUpLHtiaW5kaW5nTmFtZTpGLGluc3RydWN0aW9uOnEsaXNBdHRyaWJ1dGU6S309cTFlKHVlKSxkZT1lLmNhbGNQb3NzaWJsZVNlY3VyaXR5Q29udGV4dHMocixGLEspLmZpbHRlcihsZT0+bGUhPT1pby5OT05FKSxZPW51bGw7ZGUubGVuZ3RoJiYoWT0yPT09ZGUubGVuZ3RoJiZkZS5pbmRleE9mKGlvLlVSTCk+LTEmJmRlLmluZGV4T2YoaW8uUkVTT1VSQ0VfVVJMKT4tMT9Ubih0ZS5zYW5pdGl6ZVVybE9yUmVzb3VyY2VVcmwpOlRLKGRlWzBdLEspKTtsZXQgYWU9W2h0KEYpLHcuY3VyclZhbEV4cHJdO1kmJmFlLnB1c2goWSksaC5wdXNoKC4uLncuc3RtdHMpLHE9PT10ZS5ob3N0UHJvcGVydHk/ay5wdXNoKGFlKTpxPT09dGUuYXR0cmlidXRlP1oucHVzaChhZSk6cT09PXRlLnN5bnRoZXRpY0hvc3RQcm9wZXJ0eT96LnB1c2goYWUpOnAucHVzaCh7cmVmZXJlbmNlOnEscGFyYW1zT3JGbjphZSxzcGFuOm51bGx9KX1mb3IobGV0IHVlIG9mIGspcC5wdXNoKHtyZWZlcmVuY2U6dGUuaG9zdFByb3BlcnR5LHBhcmFtc09yRm46dWUsc3BhbjpudWxsfSk7Zm9yKGxldCB1ZSBvZiBaKXAucHVzaCh7cmVmZXJlbmNlOnRlLmF0dHJpYnV0ZSxwYXJhbXNPckZuOnVlLHNwYW46bnVsbH0pO2ZvcihsZXQgdWUgb2YgeilwLnB1c2goe3JlZmVyZW5jZTp0ZS5zeW50aGV0aWNIb3N0UHJvcGVydHkscGFyYW1zT3JGbjp1ZSxzcGFuOm51bGx9KTtsZXQgZmU9ZnVuY3Rpb24obil7bGV0IHQ9W107Zm9yKGxldCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pKXtsZXQgaT1uW2VdO3QucHVzaChodChlKSxpKX1yZXR1cm4gdH0obi5hdHRyaWJ1dGVzKTtpZihsLmFzc2lnbkhvc3RBdHRycyhmZSxzKSxsLmhhc0JpbmRpbmdzJiZsLmJ1aWxkVXBkYXRlTGV2ZWxJbnN0cnVjdGlvbnMoVCgpKS5mb3JFYWNoKHVlPT57Zm9yKGxldCBoZSBvZiB1ZS5jYWxscyliKz1NYXRoLm1heChoZS5hbGxvY2F0ZUJpbmRpbmdTbG90cy0yLDApLHAucHVzaCh7cmVmZXJlbmNlOnVlLnJlZmVyZW5jZSxwYXJhbXNPckZuOlcxZShoZSxhLFNRKSxzcGFuOm51bGx9KX0pLGImJnMuc2V0KCJob3N0VmFycyIsaHQoYikpLGQubGVuZ3RoPjB8fHAubGVuZ3RoPjApe2xldCB1ZT1vP2Ake299X0hvc3RCaW5kaW5nc2A6bnVsbCxoZT1bXTtyZXR1cm4gZC5sZW5ndGg+MCYmaGUucHVzaChsaCgxLGNEKGQpKSkscC5sZW5ndGg+MCYmaGUucHVzaChsaCgyLGguY29uY2F0KGNEKHApKSkpLHJhKFtuZXcgaWEoJEMsWkMpLG5ldyBpYShIYyxudWxsKV0saGUsUGEsbnVsbCx1ZSl9cmV0dXJuIG51bGx9KG4uaG9zdCxuLnR5cGVTb3VyY2VTcGFuLGUsdCxuLnNlbGVjdG9yfHwiIixuLm5hbWUsaSkpLGkuc2V0KCJpbnB1dHMiLE9YKG4uaW5wdXRzLCEwKSksaS5zZXQoIm91dHB1dHMiLE9YKG4ub3V0cHV0cykpLG51bGwhPT1uLmV4cG9ydEFzJiZpLnNldCgiZXhwb3J0QXMiLF9yKG4uZXhwb3J0QXMubWFwKG89Pmh0KG8pKSkpLG4uaXNTdGFuZGFsb25lJiZpLnNldCgic3RhbmRhbG9uZSIsaHQoITApKSxpfWZ1bmN0aW9uIFBLKG4sdCl7bGV0IGU9W10saT10LnByb3ZpZGVycyxyPXQudmlld1Byb3ZpZGVycztpZihpfHxyKXtsZXQgbz1baXx8bmV3IGhtKFtdKV07ciYmby5wdXNoKHIpLGUucHVzaChUbih0ZS5Qcm92aWRlcnNGZWF0dXJlKS5jYWxsRm4obykpfXQudXNlc0luaGVyaXRhbmNlJiZlLnB1c2goVG4odGUuSW5oZXJpdERlZmluaXRpb25GZWF0dXJlKSksdC5mdWxsSW5oZXJpdGFuY2UmJmUucHVzaChUbih0ZS5Db3B5RGVmaW5pdGlvbkZlYXR1cmUpKSx0LmxpZmVjeWNsZS51c2VzT25DaGFuZ2VzJiZlLnB1c2goVG4odGUuTmdPbkNoYW5nZXNGZWF0dXJlKSksdC5oYXNPd25Qcm9wZXJ0eSgidGVtcGxhdGUiKSYmdC5pc1N0YW5kYWxvbmUmJmUucHVzaChUbih0ZS5TdGFuZGFsb25lRmVhdHVyZSkpLGUubGVuZ3RoJiZuLnNldCgiZmVhdHVyZXMiLF9yKGUpKX1mdW5jdGlvbiBSSyhuLHQpe2xldCBlPVtrd2Uobix0KSxodChCMWUobikpXTtyZXR1cm4gbi5yZWFkJiZlLnB1c2gobi5yZWFkKSxlfWZ1bmN0aW9uIEIxZShuKXtyZXR1cm4obi5kZXNjZW5kYW50cz8xOjApfChuLnN0YXRpYz8yOjApfChuLmVtaXREaXN0aW5jdENoYW5nZXNPbmx5PzQ6MCl9ZnVuY3Rpb24gVTFlKG4pe3JldHVybiB1bChodChuKSl9ZnVuY3Rpb24gd1Eobil7cmV0dXJuIHVsKHFsKE9iamVjdC5rZXlzKG4pLm1hcChlPT4oe2tleTplLHZhbHVlOmh0KEFycmF5LmlzQXJyYXkobltlXSk/bltlXVswXTpuW2VdKSxxdW90ZWQ6ITB9KSkpKX1mdW5jdGlvbiBQVihuKXtyZXR1cm4gbi5sZW5ndGg+MD91bChfcihuLm1hcCh0PT5odCh0KSkpKTpKZH1mdW5jdGlvbiBPSyhuKXtsZXQgdD1udWxsIT09bi5zZWxlY3Rvcj9uLnNlbGVjdG9yLnJlcGxhY2UoL1xuL2csIiIpOm51bGw7cmV0dXJuW0lEKG4udHlwZS50eXBlLG4udHlwZUFyZ3VtZW50Q291bnQpLG51bGwhPT10P1UxZSh0KTpKZCxudWxsIT09bi5leHBvcnRBcz9QVihuLmV4cG9ydEFzKTpKZCx3UShuLmlucHV0cyksd1Eobi5vdXRwdXRzKSxQVihuLnF1ZXJpZXMubWFwKGU9PmUucHJvcGVydHlOYW1lKSldfWZ1bmN0aW9uIFNRKG4sdCl7cmV0dXJuIHVLKG51bGwsbix0LCJiIil9ZnVuY3Rpb24gVzFlKG4sdCxlKXtyZXR1cm4gbi5wYXJhbXMoaT0+ZSh0LGkpLmN1cnJWYWxFeHByKX1mdW5jdGlvbiBxMWUobil7bGV0IGUsdD1uLm5hbWUsaT10Lm1hdGNoKFAxZSk7cmV0dXJuIGk/KHQ9aVsxXSxlPXRlLmF0dHJpYnV0ZSk6bi5pc0FuaW1hdGlvbj8odD16USh0KSxlPXRlLnN5bnRoZXRpY0hvc3RQcm9wZXJ0eSk6ZT10ZS5ob3N0UHJvcGVydHkse2JpbmRpbmdOYW1lOnQsaW5zdHJ1Y3Rpb246ZSxpc0F0dHJpYnV0ZTohIWl9fXZhciBuLFgxZT0vXig/OlxbKFteXF1dKylcXSl8KD86XCgoW15cKV0rKVwpKSQvLFJWPWNsYXNze307ZnVuY3Rpb24gRVEobil7cmV0dXJuey4uLm4scHJlZGljYXRlOmtLKG4ucHJlZGljYXRlKSxyZWFkOm4ucmVhZD9uZXcgTG4obi5yZWFkKTpudWxsLHN0YXRpYzpuLnN0YXRpYyxlbWl0RGlzdGluY3RDaGFuZ2VzT25seTpuLmVtaXREaXN0aW5jdENoYW5nZXNPbmx5fX1mdW5jdGlvbiBUUShuKXtyZXR1cm57cHJvcGVydHlOYW1lOm4ucHJvcGVydHlOYW1lLGZpcnN0Om4uZmlyc3Q/PyExLHByZWRpY2F0ZTprSyhuLnByZWRpY2F0ZSksZGVzY2VuZGFudHM6bi5kZXNjZW5kYW50cz8/ITEscmVhZDpuLnJlYWQ/bmV3IExuKG4ucmVhZCk6bnVsbCxzdGF0aWM6bi5zdGF0aWM/PyExLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5Om4uZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk/PyEwfX1mdW5jdGlvbiBrSyhuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOkhWKG5ldyBMbihuKSwxKX1mdW5jdGlvbiBEUShuKXtsZXQgdD1SUShuLmlucHV0c3x8W10pLGU9UlEobi5vdXRwdXRzfHxbXSksaT1uLnByb3BNZXRhZGF0YSxyPXt9LG89e307Zm9yKGxldCBzIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShzKSYmaVtzXS5mb3JFYWNoKGE9PntsVGUoYSk/cltzXT1hLmJpbmRpbmdQcm9wZXJ0eU5hbWU/W2EuYmluZGluZ1Byb3BlcnR5TmFtZSxzXTpzOmNUZShhKSYmKG9bc109YS5iaW5kaW5nUHJvcGVydHlOYW1lfHxzKX0pO3JldHVybnsuLi5uLHR5cGVBcmd1bWVudENvdW50OjAsdHlwZVNvdXJjZVNwYW46bi50eXBlU291cmNlU3Bhbix0eXBlOkFzKG4udHlwZSksaW50ZXJuYWxUeXBlOm5ldyBMbihuLnR5cGUpLGRlcHM6bnVsbCxob3N0Om9UZShuLnByb3BNZXRhZGF0YSxuLnR5cGVTb3VyY2VTcGFuLG4uaG9zdCksaW5wdXRzOnsuLi50LC4uLnJ9LG91dHB1dHM6ey4uLmUsLi4ub30scXVlcmllczpuLnF1ZXJpZXMubWFwKEVRKSxwcm92aWRlcnM6bnVsbCE9bi5wcm92aWRlcnM/bmV3IExuKG4ucHJvdmlkZXJzKTpudWxsLHZpZXdRdWVyaWVzOm4udmlld1F1ZXJpZXMubWFwKEVRKSxmdWxsSW5oZXJpdGFuY2U6ITF9fWZ1bmN0aW9uIEZLKG4sdCl7cmV0dXJue25hbWU6bi50eXBlLm5hbWUsdHlwZTpBcyhuLnR5cGUpLHR5cGVTb3VyY2VTcGFuOnQsaW50ZXJuYWxUeXBlOm5ldyBMbihuLnR5cGUpLHNlbGVjdG9yOm4uc2VsZWN0b3I/P251bGwsaW5wdXRzOm4uaW5wdXRzPz97fSxvdXRwdXRzOm4ub3V0cHV0cz8/e30saG9zdDpKMWUobi5ob3N0KSxxdWVyaWVzOihuLnF1ZXJpZXM/P1tdKS5tYXAoVFEpLHZpZXdRdWVyaWVzOihuLnZpZXdRdWVyaWVzPz9bXSkubWFwKFRRKSxwcm92aWRlcnM6dm9pZCAwIT09bi5wcm92aWRlcnM/bmV3IExuKG4ucHJvdmlkZXJzKTpudWxsLGV4cG9ydEFzOm4uZXhwb3J0QXM/P251bGwsdXNlc0luaGVyaXRhbmNlOm4udXNlc0luaGVyaXRhbmNlPz8hMSxsaWZlY3ljbGU6e3VzZXNPbkNoYW5nZXM6bi51c2VzT25DaGFuZ2VzPz8hMX0sZGVwczpudWxsLHR5cGVBcmd1bWVudENvdW50OjAsZnVsbEluaGVyaXRhbmNlOiExLGlzU3RhbmRhbG9uZTpuLmlzU3RhbmRhbG9uZT8/ITF9fWZ1bmN0aW9uIEoxZShuPXt9KXtyZXR1cm57YXR0cmlidXRlczokMWUobi5hdHRyaWJ1dGVzPz97fSksbGlzdGVuZXJzOm4ubGlzdGVuZXJzPz97fSxwcm9wZXJ0aWVzOm4ucHJvcGVydGllcz8/e30sc3BlY2lhbEF0dHJpYnV0ZXM6e2NsYXNzQXR0cjpuLmNsYXNzQXR0cmlidXRlLHN0eWxlQXR0cjpuLnN0eWxlQXR0cmlidXRlfX19ZnVuY3Rpb24gJDFlKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyhuKSl0W2VdPW5ldyBMbihuW2VdKTtyZXR1cm4gdH1mdW5jdGlvbiB0VGUobil7cmV0dXJuey4uLm4sdHlwZTpuZXcgTG4obi50eXBlKX19ZnVuY3Rpb24geEIobix0PW51bGwpe3JldHVybntraW5kOl9fLkRpcmVjdGl2ZSxpc0NvbXBvbmVudDp0fHwiY29tcG9uZW50Ij09PW4ua2luZCxzZWxlY3RvcjpuLnNlbGVjdG9yLHR5cGU6bmV3IExuKG4udHlwZSksaW5wdXRzOm4uaW5wdXRzPz9bXSxvdXRwdXRzOm4ub3V0cHV0cz8/W10sZXhwb3J0QXM6bi5leHBvcnRBcz8/bnVsbH19ZnVuY3Rpb24gaVRlKG4pe3JldHVybntraW5kOl9fLlBpcGUsbmFtZTpuLm5hbWUsdHlwZTpuZXcgTG4obi50eXBlKX19ZnVuY3Rpb24gTksobix0LGUsaSxyKXtsZXQgbz1yP0RfLmZyb21BcnJheShyKTpQdSxzPVMxZShuLGUse3ByZXNlcnZlV2hpdGVzcGFjZXM6aSxpbnRlcnBvbGF0aW9uQ29uZmlnOm99KTtpZihudWxsIT09cy5lcnJvcnMpe2xldCBhPXMuZXJyb3JzLm1hcChsPT5sLnRvU3RyaW5nKCkpLmpvaW4oIiwgIik7dGhyb3cgbmV3IEVycm9yKGBFcnJvcnMgZHVyaW5nIEpJVCBjb21waWxhdGlvbiBvZiB0ZW1wbGF0ZSBmb3IgJHt0fTogJHthfWApfXJldHVybnt0ZW1wbGF0ZTpzLGludGVycG9sYXRpb246b319ZnVuY3Rpb24gc18obix0KXtpZihuLmhhc093blByb3BlcnR5KHQpKXJldHVybiBIVihuZXcgTG4oblt0XSksMCl9ZnVuY3Rpb24gQVEobix0KXtpZihuLmhhc093blByb3BlcnR5KHQpKXJldHVybiBuZXcgTG4oblt0XSl9ZnVuY3Rpb24gSVEobil7cmV0dXJuIEhWKCJmdW5jdGlvbiI9PXR5cGVvZiBuP25ldyBMbihuKTpuZXcgY2wobj8/bnVsbCksMCl9ZnVuY3Rpb24gTEsobil7bGV0IHQ9bnVsbCE9bi5hdHRyaWJ1dGUsZT1udWxsPT09bi50b2tlbj9udWxsOm5ldyBMbihuLnRva2VuKTtyZXR1cm4gQksodD9uZXcgTG4obi5hdHRyaWJ1dGUpOmUsdCxuLmhvc3Qsbi5vcHRpb25hbCxuLnNlbGYsbi5za2lwU2VsZil9ZnVuY3Rpb24gUFEobil7bGV0IHQ9bi5hdHRyaWJ1dGU/PyExO3JldHVybiBCSyhudWxsPT09bi50b2tlbj9udWxsOm5ldyBMbihuLnRva2VuKSx0LG4uaG9zdD8/ITEsbi5vcHRpb25hbD8/ITEsbi5zZWxmPz8hMSxuLnNraXBTZWxmPz8hMSl9ZnVuY3Rpb24gQksobix0LGUsaSxyLG8pe3JldHVybnt0b2tlbjpuLGF0dHJpYnV0ZU5hbWVUeXBlOnQ/aHQoInVua25vd24iKTpudWxsLGhvc3Q6ZSxvcHRpb25hbDppLHNlbGY6cixza2lwU2VsZjpvfX1mdW5jdGlvbiBvVGUobix0LGUpe2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PXt9LGU9e30saT17fSxyPXt9O2ZvcihsZXQgbyBvZiBPYmplY3Qua2V5cyhuKSl7bGV0IHM9bltvXSxhPW8ubWF0Y2goWDFlKTtpZihudWxsPT09YSlzd2l0Y2gobyl7Y2FzZSJjbGFzcyI6aWYoInN0cmluZyIhPXR5cGVvZiBzKXRocm93IG5ldyBFcnJvcigiQ2xhc3MgYmluZGluZyBtdXN0IGJlIHN0cmluZyIpO3IuY2xhc3NBdHRyPXM7YnJlYWs7Y2FzZSJzdHlsZSI6aWYoInN0cmluZyIhPXR5cGVvZiBzKXRocm93IG5ldyBFcnJvcigiU3R5bGUgYmluZGluZyBtdXN0IGJlIHN0cmluZyIpO3Iuc3R5bGVBdHRyPXM7YnJlYWs7ZGVmYXVsdDp0W29dPSJzdHJpbmciPT10eXBlb2Ygcz9odChzKTpzfWVsc2UgaWYobnVsbCE9YVsxXSl7aWYoInN0cmluZyIhPXR5cGVvZiBzKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHkgYmluZGluZyBtdXN0IGJlIHN0cmluZyIpO2lbYVsxXV09c31lbHNlIGlmKG51bGwhPWFbMl0pe2lmKCJzdHJpbmciIT10eXBlb2Ygcyl0aHJvdyBuZXcgRXJyb3IoIkV2ZW50IGJpbmRpbmcgbXVzdCBiZSBzdHJpbmciKTtlW2FbMl1dPXN9fXJldHVybnthdHRyaWJ1dGVzOnQsbGlzdGVuZXJzOmUscHJvcGVydGllczppLHNwZWNpYWxBdHRyaWJ1dGVzOnJ9fShlfHx7fSkscj1mdW5jdGlvbihuLHQpe2xldCBlPUREKCk7cmV0dXJuIGUuY3JlYXRlRGlyZWN0aXZlSG9zdEV2ZW50QXN0cyhuLmxpc3RlbmVycyx0KSxlLmNyZWF0ZUJvdW5kSG9zdFByb3BlcnRpZXMobi5wcm9wZXJ0aWVzLHQpLGUuZXJyb3JzfShpLHQpO2lmKHIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihyLm1hcChvPT5vLm1zZykuam9pbigiXG4iKSk7Zm9yKGxldCBvIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShvKSYmbltvXS5mb3JFYWNoKHM9PntzVGUocyk/aS5wcm9wZXJ0aWVzW3MuaG9zdFByb3BlcnR5TmFtZXx8b109cndlKCJ0aGlzIixvKTphVGUocykmJihpLmxpc3RlbmVyc1tzLmV2ZW50TmFtZXx8b109YCR7b30oJHsocy5hcmdzfHxbXSkuam9pbigiLCIpfSlgKX0pO3JldHVybiBpfWZ1bmN0aW9uIHNUZShuKXtyZXR1cm4iSG9zdEJpbmRpbmciPT09bi5uZ01ldGFkYXRhTmFtZX1mdW5jdGlvbiBhVGUobil7cmV0dXJuIkhvc3RMaXN0ZW5lciI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uIGxUZShuKXtyZXR1cm4iSW5wdXQiPT09bi5uZ01ldGFkYXRhTmFtZX1mdW5jdGlvbiBjVGUobil7cmV0dXJuIk91dHB1dCI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uIFJRKG4pe3JldHVybiBuLnJlZHVjZSgodCxlKT0+e2xldFtpLHJdPWUuc3BsaXQoIjoiLDIpLm1hcChvPT5vLnRyaW0oKSk7cmV0dXJuIHRbaV09cnx8aSx0fSx7fSl9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZnVsbD10O2xldCBlPXQuc3BsaXQoIi4iKTt0aGlzLm1ham9yPWVbMF0sdGhpcy5taW5vcj1lWzFdLHRoaXMucGF0Y2g9ZS5zbGljZSgyKS5qb2luKCIuIil9fSgiMTQuMi4xMSIpLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2xvc2VkQnlQYXJlbnQ9ITEsdGhpcy5pc1ZvaWQ9ITEsdGhpcy5pZ25vcmVGaXJzdExmPSExLHRoaXMuY2FuU2VsZkNsb3NlPSEwLHRoaXMucHJldmVudE5hbWVzcGFjZUluaGVyaXRhbmNlPSExfXJlcXVpcmVFeHRyYVBhcmVudCh0KXtyZXR1cm4hMX1pc0Nsb3NlZEJ5Q2hpbGQodCl7cmV0dXJuITF9Z2V0Q29udGVudFR5cGUoKXtyZXR1cm4gV2wuUEFSU0FCTEVfREFUQX19LCgobj1wXykubmd8fChuLm5nPXt9KSkuXHUwMjc1Y29tcGlsZXJGYWNhZGU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGNsYXNze2V2YWx1YXRlU3RhdGVtZW50cyh0LGUsaSxyKXtsZXQgbz1uZXcgWEIoaSkscz1FQy5jcmVhdGVSb290KCk7cmV0dXJuIGUubGVuZ3RoPjAmJiFlWzBdLmlzRXF1aXZhbGVudChodCgidXNlIHN0cmljdCIpLnRvU3RtdCgpKSYmKGU9W2h0KCJ1c2Ugc3RyaWN0IikudG9TdG10KCksLi4uZV0pLG8udmlzaXRBbGxTdGF0ZW1lbnRzKGUscyksby5jcmVhdGVSZXR1cm5TdG10KHMpLHRoaXMuZXZhbHVhdGVDb2RlKHQscyxvLmdldEFyZ3MoKSxyKX1ldmFsdWF0ZUNvZGUodCxlLGkscil7bGV0IG89YCJ1c2Ugc3RyaWN0Ijske2UudG9Tb3VyY2UoKX1cbi8vIyBzb3VyY2VVUkw9JHt0fWAscz1bXSxhPVtdO2ZvcihsZXQgYyBpbiBpKWEucHVzaChpW2NdKSxzLnB1c2goYyk7aWYocil7bGV0IGM9VVgoLi4ucy5jb25jYXQoInJldHVybiBudWxsOyIpKS50b1N0cmluZygpLHU9Yy5zbGljZSgwLGMuaW5kZXhPZigicmV0dXJuIG51bGw7IikpLnNwbGl0KCJcbiIpLmxlbmd0aC0xO28rPWBcbiR7ZS50b1NvdXJjZU1hcEdlbmVyYXRvcih0LHUpLnRvSnNDb21tZW50KCl9YH1sZXQgbD1VWCguLi5zLmNvbmNhdChvKSk7cmV0dXJuIHRoaXMuZXhlY3V0ZUZ1bmN0aW9uKGwsYSl9ZXhlY3V0ZUZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQoLi4uZSl9fSl7dGhpcy5qaXRFdmFsdWF0b3I9dCx0aGlzLkZhY3RvcnlUYXJnZXQ9TmMsdGhpcy5SZXNvdXJjZUxvYWRlcj1SVix0aGlzLmVsZW1lbnRTY2hlbWFSZWdpc3RyeT1uZXcgU0R9Y29tcGlsZVBpcGUodCxlLGkpe2xldCBvPWpYKHtuYW1lOmkubmFtZSx0eXBlOkFzKGkudHlwZSksaW50ZXJuYWxUeXBlOm5ldyBMbihpLnR5cGUpLHR5cGVBcmd1bWVudENvdW50OjAsZGVwczpudWxsLHBpcGVOYW1lOmkucGlwZU5hbWUscHVyZTppLnB1cmUsaXNTdGFuZGFsb25lOmkuaXNTdGFuZGFsb25lfSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihvLmV4cHJlc3Npb24sdCxlLFtdKX1jb21waWxlUGlwZURlY2xhcmF0aW9uKHQsZSxpKXtsZXQgbz1qWCh7bmFtZToobj1pKS50eXBlLm5hbWUsdHlwZTpBcyhuLnR5cGUpLGludGVybmFsVHlwZTpuZXcgTG4obi50eXBlKSx0eXBlQXJndW1lbnRDb3VudDowLHBpcGVOYW1lOm4ubmFtZSxkZXBzOm51bGwscHVyZTpuLnB1cmU/PyEwLGlzU3RhbmRhbG9uZTpuLmlzU3RhbmRhbG9uZT8/ITF9KTt2YXIgbjtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKG8uZXhwcmVzc2lvbix0LGUsW10pfWNvbXBpbGVJbmplY3RhYmxlKHQsZSxpKXtsZXR7ZXhwcmVzc2lvbjpyLHN0YXRlbWVudHM6b309a1goe25hbWU6aS5uYW1lLHR5cGU6QXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IExuKGkudHlwZSksdHlwZUFyZ3VtZW50Q291bnQ6aS50eXBlQXJndW1lbnRDb3VudCxwcm92aWRlZEluOklRKGkucHJvdmlkZWRJbiksdXNlQ2xhc3M6c18oaSwidXNlQ2xhc3MiKSx1c2VGYWN0b3J5OkFRKGksInVzZUZhY3RvcnkiKSx1c2VWYWx1ZTpzXyhpLCJ1c2VWYWx1ZSIpLHVzZUV4aXN0aW5nOnNfKGksInVzZUV4aXN0aW5nIiksZGVwczppLmRlcHM/Lm1hcChMSyl9LCEwKTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKHIsdCxlLG8pfWNvbXBpbGVJbmplY3RhYmxlRGVjbGFyYXRpb24odCxlLGkpe2xldHtleHByZXNzaW9uOnIsc3RhdGVtZW50czpvfT1rWCh7bmFtZTppLnR5cGUubmFtZSx0eXBlOkFzKGkudHlwZSksaW50ZXJuYWxUeXBlOm5ldyBMbihpLnR5cGUpLHR5cGVBcmd1bWVudENvdW50OjAscHJvdmlkZWRJbjpJUShpLnByb3ZpZGVkSW4pLHVzZUNsYXNzOnNfKGksInVzZUNsYXNzIiksdXNlRmFjdG9yeTpBUShpLCJ1c2VGYWN0b3J5IiksdXNlVmFsdWU6c18oaSwidXNlVmFsdWUiKSx1c2VFeGlzdGluZzpzXyhpLCJ1c2VFeGlzdGluZyIpLGRlcHM6aS5kZXBzPy5tYXAoUFEpfSwhMCk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihyLHQsZSxvKX1jb21waWxlSW5qZWN0b3IodCxlLGkpe2xldCBvPXpYKHtuYW1lOmkubmFtZSx0eXBlOkFzKGkudHlwZSksaW50ZXJuYWxUeXBlOm5ldyBMbihpLnR5cGUpLHByb3ZpZGVyczppLnByb3ZpZGVycyYmaS5wcm92aWRlcnMubGVuZ3RoPjA/bmV3IExuKGkucHJvdmlkZXJzKTpudWxsLGltcG9ydHM6aS5pbXBvcnRzLm1hcChzPT5uZXcgTG4ocykpfSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihvLmV4cHJlc3Npb24sdCxlLFtdKX1jb21waWxlSW5qZWN0b3JEZWNsYXJhdGlvbih0LGUsaSl7bGV0IHI9e25hbWU6KG49aSkudHlwZS5uYW1lLHR5cGU6QXMobi50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IExuKG4udHlwZSkscHJvdmlkZXJzOnZvaWQgMCE9PW4ucHJvdmlkZXJzJiZuLnByb3ZpZGVycy5sZW5ndGg+MD9uZXcgTG4obi5wcm92aWRlcnMpOm51bGwsaW1wb3J0czp2b2lkIDAhPT1uLmltcG9ydHM/bi5pbXBvcnRzLm1hcCh0PT5uZXcgTG4odCkpOltdfSxvPXpYKHIpO3ZhciBuO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24oby5leHByZXNzaW9uLHQsZSxbXSl9Y29tcGlsZU5nTW9kdWxlKHQsZSxpKXtsZXQgbz1pU2Uoe3R5cGU6QXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IExuKGkudHlwZSksYWRqYWNlbnRUeXBlOm5ldyBMbihpLnR5cGUpLGJvb3RzdHJhcDppLmJvb3RzdHJhcC5tYXAoQXMpLGRlY2xhcmF0aW9uczppLmRlY2xhcmF0aW9ucy5tYXAoQXMpLHB1YmxpY0RlY2xhcmF0aW9uVHlwZXM6bnVsbCxpbXBvcnRzOmkuaW1wb3J0cy5tYXAoQXMpLGluY2x1ZGVJbXBvcnRUeXBlczohMCxleHBvcnRzOmkuZXhwb3J0cy5tYXAoQXMpLHNlbGVjdG9yU2NvcGVNb2RlOmdfLklubGluZSxjb250YWluc0ZvcndhcmREZWNsczohMSxzY2hlbWFzOmkuc2NoZW1hcz9pLnNjaGVtYXMubWFwKEFzKTpudWxsLGlkOmkuaWQ/bmV3IExuKGkuaWQpOm51bGx9KTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKG8uZXhwcmVzc2lvbix0LGUsW10pfWNvbXBpbGVOZ01vZHVsZURlY2xhcmF0aW9uKHQsZSxpKXtsZXQgcj1mdW5jdGlvbihuKXtsZXQgdD1uZXcgc2g7cmV0dXJuIHQuc2V0KCJ0eXBlIixuZXcgTG4obi50eXBlKSksdm9pZCAwIT09bi5ib290c3RyYXAmJnQuc2V0KCJib290c3RyYXAiLG5ldyBMbihuLmJvb3RzdHJhcCkpLHZvaWQgMCE9PW4uZGVjbGFyYXRpb25zJiZ0LnNldCgiZGVjbGFyYXRpb25zIixuZXcgTG4obi5kZWNsYXJhdGlvbnMpKSx2b2lkIDAhPT1uLmltcG9ydHMmJnQuc2V0KCJpbXBvcnRzIixuZXcgTG4obi5pbXBvcnRzKSksdm9pZCAwIT09bi5leHBvcnRzJiZ0LnNldCgiZXhwb3J0cyIsbmV3IExuKG4uZXhwb3J0cykpLHZvaWQgMCE9PW4uc2NoZW1hcyYmdC5zZXQoInNjaGVtYXMiLG5ldyBMbihuLnNjaGVtYXMpKSx2b2lkIDAhPT1uLmlkJiZ0LnNldCgiaWQiLG5ldyBMbihuLmlkKSksVG4odGUuZGVmaW5lTmdNb2R1bGUpLmNhbGxGbihbdC50b0xpdGVyYWxNYXAoKV0pfShpKTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKHIsdCxlLFtdKX1jb21waWxlRGlyZWN0aXZlKHQsZSxpKXtsZXQgcj1EUShpKTtyZXR1cm4gdGhpcy5jb21waWxlRGlyZWN0aXZlRnJvbU1ldGEodCxlLHIpfWNvbXBpbGVEaXJlY3RpdmVEZWNsYXJhdGlvbih0LGUsaSl7bGV0IG89RksoaSx0aGlzLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiRGlyZWN0aXZlIixpLnR5cGUubmFtZSxlKSk7cmV0dXJuIHRoaXMuY29tcGlsZURpcmVjdGl2ZUZyb21NZXRhKHQsZSxvKX1jb21waWxlRGlyZWN0aXZlRnJvbU1ldGEodCxlLGkpe2xldCByPW5ldyBpRCxzPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1JSyhuLHQsZSk7UEsoaSxuKTtsZXQgcj1Ubih0ZS5kZWZpbmVEaXJlY3RpdmUpLmNhbGxGbihbaS50b0xpdGVyYWxNYXAoKV0sdm9pZCAwLCEwKSxvPWZ1bmN0aW9uKG4pe2xldCB0PU9LKG4pO3JldHVybiB0LnB1c2goSmQpLHQucHVzaCh1bChodChuLmlzU3RhbmRhbG9uZSkpKSx1bChUbih0ZS5EaXJlY3RpdmVEZWNsYXJhdGlvbix0KSl9KG4pO3JldHVybntleHByZXNzaW9uOnIsdHlwZTpvLHN0YXRlbWVudHM6W119fShpLHIsREQoKSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihzLmV4cHJlc3Npb24sdCxlLHIuc3RhdGVtZW50cyl9Y29tcGlsZUNvbXBvbmVudCh0LGUsaSl7bGV0e3RlbXBsYXRlOnIsaW50ZXJwb2xhdGlvbjpvfT1OSyhpLnRlbXBsYXRlLGkubmFtZSxlLGkucHJlc2VydmVXaGl0ZXNwYWNlcyxpLmludGVycG9sYXRpb24pLHM9ey4uLmksLi4uRFEoaSksc2VsZWN0b3I6aS5zZWxlY3Rvcnx8dGhpcy5lbGVtZW50U2NoZW1hUmVnaXN0cnkuZ2V0RGVmYXVsdENvbXBvbmVudEVsZW1lbnROYW1lKCksdGVtcGxhdGU6cixkZWNsYXJhdGlvbnM6aS5kZWNsYXJhdGlvbnMubWFwKHRUZSksZGVjbGFyYXRpb25MaXN0RW1pdE1vZGU6MCxzdHlsZXM6Wy4uLmkuc3R5bGVzLC4uLnIuc3R5bGVzXSxlbmNhcHN1bGF0aW9uOmkuZW5jYXBzdWxhdGlvbixpbnRlcnBvbGF0aW9uOm8sY2hhbmdlRGV0ZWN0aW9uOmkuY2hhbmdlRGV0ZWN0aW9uLGFuaW1hdGlvbnM6bnVsbCE9aS5hbmltYXRpb25zP25ldyBMbihpLmFuaW1hdGlvbnMpOm51bGwsdmlld1Byb3ZpZGVyczpudWxsIT1pLnZpZXdQcm92aWRlcnM/bmV3IExuKGkudmlld1Byb3ZpZGVycyk6bnVsbCxyZWxhdGl2ZUNvbnRleHRGaWxlUGF0aDoiIixpMThuVXNlRXh0ZXJuYWxJZHM6ITB9O3JldHVybiB0aGlzLmNvbXBpbGVDb21wb25lbnRGcm9tTWV0YSh0LGBuZzovLy8ke2kubmFtZX0uanNgLHMpfWNvbXBpbGVDb21wb25lbnREZWNsYXJhdGlvbih0LGUsaSl7bGV0IG89ZnVuY3Rpb24obix0LGUpe2xldHt0ZW1wbGF0ZTppLGludGVycG9sYXRpb246cn09Tksobi50ZW1wbGF0ZSxuLnR5cGUubmFtZSxlLG4ucHJlc2VydmVXaGl0ZXNwYWNlcz8/ITEsbi5pbnRlcnBvbGF0aW9uKSxvPVtdO2lmKG4uZGVwZW5kZW5jaWVzKWZvcihsZXQgcyBvZiBuLmRlcGVuZGVuY2llcylzd2l0Y2gocy5raW5kKXtjYXNlImRpcmVjdGl2ZSI6Y2FzZSJjb21wb25lbnQiOm8ucHVzaCh4QihzKSk7YnJlYWs7Y2FzZSJwaXBlIjpvLnB1c2goaVRlKHMpKX1lbHNlKG4uY29tcG9uZW50c3x8bi5kaXJlY3RpdmVzfHxuLnBpcGVzKSYmKG4uY29tcG9uZW50cyYmby5wdXNoKC4uLm4uY29tcG9uZW50cy5tYXAocz0+eEIocywhMCkpKSxuLmRpcmVjdGl2ZXMmJm8ucHVzaCguLi5uLmRpcmVjdGl2ZXMubWFwKHM9PnhCKHMpKSksbi5waXBlcyYmby5wdXNoKC4uLmZ1bmN0aW9uKG4pe3JldHVybiBuP09iamVjdC5rZXlzKG4pLm1hcCh0PT4oe2tpbmQ6X18uUGlwZSxuYW1lOnQsdHlwZTpuZXcgTG4oblt0XSl9KSk6W119KG4ucGlwZXMpKSk7cmV0dXJuey4uLkZLKG4sdCksdGVtcGxhdGU6aSxzdHlsZXM6bi5zdHlsZXM/P1tdLGRlY2xhcmF0aW9uczpvLHZpZXdQcm92aWRlcnM6dm9pZCAwIT09bi52aWV3UHJvdmlkZXJzP25ldyBMbihuLnZpZXdQcm92aWRlcnMpOm51bGwsYW5pbWF0aW9uczp2b2lkIDAhPT1uLmFuaW1hdGlvbnM/bmV3IExuKG4uYW5pbWF0aW9ucyk6bnVsbCxjaGFuZ2VEZXRlY3Rpb246bi5jaGFuZ2VEZXRlY3Rpb24/P2NDLkRlZmF1bHQsZW5jYXBzdWxhdGlvbjpuLmVuY2Fwc3VsYXRpb24/P3FkLkVtdWxhdGVkLGludGVycG9sYXRpb246cixkZWNsYXJhdGlvbkxpc3RFbWl0TW9kZToyLHJlbGF0aXZlQ29udGV4dEZpbGVQYXRoOiIiLGkxOG5Vc2VFeHRlcm5hbElkczohMH19KGksdGhpcy5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oIkNvbXBvbmVudCIsaS50eXBlLm5hbWUsZSksZSk7cmV0dXJuIHRoaXMuY29tcGlsZUNvbXBvbmVudEZyb21NZXRhKHQsZSxvKX1jb21waWxlQ29tcG9uZW50RnJvbU1ldGEodCxlLGkpe2xldCByPW5ldyBpRCxzPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1JSyhuLHQsZSk7UEsoaSxuKTtsZXQgcj1uLnNlbGVjdG9yJiZaZC5wYXJzZShuLnNlbGVjdG9yKSxvPXImJnJbMF07aWYobyl7bGV0IGc9by5nZXRBdHRycygpO2cubGVuZ3RoJiZpLnNldCgiYXR0cnMiLHQuZ2V0Q29uc3RMaXRlcmFsKF9yKGcubWFwKGI9Pmh0KG51bGwhPWI/Yjp2b2lkIDApKSksITApKX1sZXQgcz1uLm5hbWUsYT1zP2Ake3N9X1RlbXBsYXRlYDpudWxsLGw9bi5jaGFuZ2VEZXRlY3Rpb24sYz1uLnRlbXBsYXRlLHU9bmV3IEtDKHQsQl8uY3JlYXRlUm9vdFNjb3BlKCksMCxzLG51bGwsbnVsbCxhLHRlLm5hbWVzcGFjZUhUTUwsbi5yZWxhdGl2ZUNvbnRleHRGaWxlUGF0aCxuLmkxOG5Vc2VFeHRlcm5hbElkcyksZD11LmJ1aWxkVGVtcGxhdGVGdW5jdGlvbihjLm5vZGVzLFtdKSxwPXUuZ2V0TmdDb250ZW50U2VsZWN0b3JzKCk7cCYmaS5zZXQoIm5nQ29udGVudFNlbGVjdG9ycyIscCksaS5zZXQoImRlY2xzIixodCh1LmdldENvbnN0Q291bnQoKSkpLGkuc2V0KCJ2YXJzIixodCh1LmdldFZhckNvdW50KCkpKTtsZXR7Y29uc3RFeHByZXNzaW9uczpoLHByZXBhcmVTdGF0ZW1lbnRzOmZ9PXUuZ2V0Q29uc3RzKCk7aWYoaC5sZW5ndGg+MCl7bGV0IGc9X3IoaCk7Zi5sZW5ndGg+MCYmKGc9cmEoW10sWy4uLmYsbmV3IERvKGcpXSkpLGkuc2V0KCJjb25zdHMiLGcpfWlmKGkuc2V0KCJ0ZW1wbGF0ZSIsZCksbi5kZWNsYXJhdGlvbnMubGVuZ3RoPjAmJmkuc2V0KCJkZXBlbmRlbmNpZXMiLGZ1bmN0aW9uKG4sdCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gbjtjYXNlIDE6cmV0dXJuIHJhKFtdLFtuZXcgRG8obildKTtjYXNlIDI6bGV0IGU9bi5wcm9wKCJtYXAiKS5jYWxsRm4oW1RuKHRlLnJlc29sdmVGb3J3YXJkUmVmKV0pO3JldHVybiByYShbXSxbbmV3IERvKGUpXSl9fShfcihuLmRlY2xhcmF0aW9ucy5tYXAoZz0+Zy50eXBlKSksbi5kZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSkpLG51bGw9PT1uLmVuY2Fwc3VsYXRpb24mJihuLmVuY2Fwc3VsYXRpb249cWQuRW11bGF0ZWQpLG4uc3R5bGVzJiZuLnN0eWxlcy5sZW5ndGgpe2xldCBiPShuLmVuY2Fwc3VsYXRpb249PXFkLkVtdWxhdGVkP2Z1bmN0aW9uKG4sdCxlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnN0cmljdFN0eWxpbmc9ITB9c2hpbUNzc1RleHQodCxlLGk9IiIpe2xldCByPXQubWF0Y2goRVNlKXx8W107cmV0dXJuIHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZSh3U2UsIiIpfSh0KSx0PXRoaXMuX2luc2VydERpcmVjdGl2ZXModCksW3RoaXMuX3Njb3BlQ3NzVGV4dCh0LGUsaSksLi4ucl0uam9pbigiXG4iKX1faW5zZXJ0RGlyZWN0aXZlcyh0KXtyZXR1cm4gdD10aGlzLl9pbnNlcnRQb2x5ZmlsbERpcmVjdGl2ZXNJbkNzc1RleHQodCksdGhpcy5faW5zZXJ0UG9seWZpbGxSdWxlc0luQ3NzVGV4dCh0KX1faW5zZXJ0UG9seWZpbGxEaXJlY3RpdmVzSW5Dc3NUZXh0KHQpe3JldHVybiB0LnJlcGxhY2UobVNlLGZ1bmN0aW9uKC4uLmUpe3JldHVybiBlWzJdKyJ7In0pfV9pbnNlcnRQb2x5ZmlsbFJ1bGVzSW5Dc3NUZXh0KHQpe3JldHVybiB0LnJlcGxhY2UoZ1NlLCguLi5lKT0+e2xldCBpPWVbMF0ucmVwbGFjZShlWzFdLCIiKS5yZXBsYWNlKGVbMl0sIiIpO3JldHVybiBlWzRdK2l9KX1fc2NvcGVDc3NUZXh0KHQsZSxpKXtsZXQgcj10aGlzLl9leHRyYWN0VW5zY29wZWRSdWxlc0Zyb21Dc3NUZXh0KHQpO3JldHVybiB0PXRoaXMuX2luc2VydFBvbHlmaWxsSG9zdEluQ3NzVGV4dCh0KSx0PXRoaXMuX2NvbnZlcnRDb2xvbkhvc3QodCksdD10aGlzLl9jb252ZXJ0Q29sb25Ib3N0Q29udGV4dCh0KSx0PXRoaXMuX2NvbnZlcnRTaGFkb3dET01TZWxlY3RvcnModCksZSYmKHQ9dGhpcy5fc2NvcGVTZWxlY3RvcnModCxlLGkpKSwodD10KyJcbiIrcikudHJpbSgpfV9leHRyYWN0VW5zY29wZWRSdWxlc0Zyb21Dc3NUZXh0KHQpe2xldCBpLGU9IiI7Zm9yKFdYLmxhc3RJbmRleD0wO251bGwhPT0oaT1XWC5leGVjKHQpKTspZSs9aVswXS5yZXBsYWNlKGlbMl0sIiIpLnJlcGxhY2UoaVsxXSxpWzRdKSsiXG5cbiI7cmV0dXJuIGV9X2NvbnZlcnRDb2xvbkhvc3QodCl7cmV0dXJuIHQucmVwbGFjZShfU2UsKGUsaSxyKT0+e2lmKGkpe2xldCBvPVtdLHM9aS5zcGxpdCgiLCIpLm1hcChhPT5hLnRyaW0oKSk7Zm9yKGxldCBhIG9mIHMpe2lmKCFhKWJyZWFrO2xldCBsPXRtK2EucmVwbGFjZShnRCwiIikrcjtvLnB1c2gobCl9cmV0dXJuIG8uam9pbigiLCIpfXJldHVybiB0bStyfSl9X2NvbnZlcnRDb2xvbkhvc3RDb250ZXh0KHQpe3JldHVybiB0LnJlcGxhY2UodlNlLGU9PntsZXQgcixpPVtbXV07Zm9yKDtyPXlTZS5leGVjKGUpOyl7bGV0IG89KHJbMV0/PyIiKS50cmltKCkuc3BsaXQoIiwiKS5tYXAoYT0+YS50cmltKCkpLmZpbHRlcihhPT4iIiE9PWEpLHM9aS5sZW5ndGg7a1NlKGksby5sZW5ndGgpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKWZvcihsZXQgbD0wO2w8cztsKyspaVtsK2Eqc10ucHVzaChvW2FdKTtlPXJbMl19cmV0dXJuIGkubWFwKG89PmZ1bmN0aW9uKG4sdCl7bGV0IGU9dG07ZF8ubGFzdEluZGV4PTA7bGV0IGk9ZF8udGVzdCh0KTtpZigwPT09bi5sZW5ndGgpcmV0dXJuIGUrdDtsZXQgcj1bbi5wb3AoKXx8IiJdO2Zvcig7bi5sZW5ndGg+MDspe2xldCBvPXIubGVuZ3RoLHM9bi5wb3AoKTtmb3IobGV0IGE9MDthPG87YSsrKXtsZXQgbD1yW2FdO3JbMipvK2FdPWwrIiAiK3MscltvK2FdPXMrIiAiK2wsclthXT1zK2x9fXJldHVybiByLm1hcChvPT5pP2Ake299JHt0fWA6YCR7b30ke2V9JHt0fSwgJHtvfSAke2V9JHt0fWApLmpvaW4oIiwiKX0obyxlKSkuam9pbigiLCAiKX0pfV9jb252ZXJ0U2hhZG93RE9NU2VsZWN0b3JzKHQpe3JldHVybiBiU2UucmVkdWNlKChlLGkpPT5lLnJlcGxhY2UoaSwiICIpLHQpfV9zY29wZVNlbGVjdG9ycyh0LGUsaSl7cmV0dXJuIFhYKHQscj0+e2xldCBvPXIuc2VsZWN0b3Iscz1yLmNvbnRlbnQ7cmV0dXJuIkAiIT09ci5zZWxlY3RvclswXT9vPXRoaXMuX3Njb3BlU2VsZWN0b3Ioci5zZWxlY3RvcixlLGksdGhpcy5zdHJpY3RTdHlsaW5nKTpyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBtZWRpYSIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBzdXBwb3J0cyIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBkb2N1bWVudCIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBsYXllciIpP3M9dGhpcy5fc2NvcGVTZWxlY3RvcnMoci5jb250ZW50LGUsaSk6KHIuc2VsZWN0b3Iuc3RhcnRzV2l0aCgiQGZvbnQtZmFjZSIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBwYWdlIikpJiYocz10aGlzLl9zdHJpcFNjb3BpbmdTZWxlY3RvcnMoci5jb250ZW50KSksbmV3IFdDKG8scyl9KX1fc3RyaXBTY29waW5nU2VsZWN0b3JzKHQpe3JldHVybiBYWCh0LGU9PntsZXQgaT1lLnNlbGVjdG9yLnJlcGxhY2UoWVgsIiAiKS5yZXBsYWNlKHFYLCIgIik7cmV0dXJuIG5ldyBXQyhpLGUuY29udGVudCl9KX1fc2NvcGVTZWxlY3Rvcih0LGUsaSxyKXtyZXR1cm4gdC5zcGxpdCgiLCIpLm1hcChvPT5vLnRyaW0oKS5zcGxpdChZWCkpLm1hcChvPT57bGV0W3MsLi4uYV09bztyZXR1cm5bKGM9PnRoaXMuX3NlbGVjdG9yTmVlZHNTY29waW5nKGMsZSk/cj90aGlzLl9hcHBseVN0cmljdFNlbGVjdG9yU2NvcGUoYyxlLGkpOnRoaXMuX2FwcGx5U2VsZWN0b3JTY29wZShjLGUsaSk6YykocyksLi4uYV0uam9pbigiICIpfSkuam9pbigiLCAiKX1fc2VsZWN0b3JOZWVkc1Njb3BpbmcodCxlKXtyZXR1cm4hdGhpcy5fbWFrZVNjb3BlTWF0Y2hlcihlKS50ZXN0KHQpfV9tYWtlU2NvcGVNYXRjaGVyKHQpe3JldHVybiB0PXQucmVwbGFjZSgvXFsvZywiXFxbIikucmVwbGFjZSgvXF0vZywiXFxdIiksbmV3IFJlZ0V4cCgiXigiK3QrIikoWz5cXHN+K1suLHs6XVtcXHNcXFNdKik/JCIsIm0iKX1fYXBwbHlTZWxlY3RvclNjb3BlKHQsZSxpKXtyZXR1cm4gdGhpcy5fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKHQsZSxpKX1fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKHQsZSxpKXtpZihkXy5sYXN0SW5kZXg9MCxkXy50ZXN0KHQpKXtsZXQgcj10aGlzLnN0cmljdFN0eWxpbmc/YFske2l9XWA6ZTtyZXR1cm4gdC5yZXBsYWNlKHFYLChvLHMpPT5zLnJlcGxhY2UoLyhbXjpdKikoOiopKC4qKS8sKGEsbCxjLHUpPT5sK3IrYyt1KSkucmVwbGFjZShkXyxyKyIgIil9cmV0dXJuIGUrIiAiK3R9X2FwcGx5U3RyaWN0U2VsZWN0b3JTY29wZSh0LGUsaSl7bGV0IHUsbz0iWyIrKGU9ZS5yZXBsYWNlKC9cW2lzPShbXlxdXSopXF0vZywobSwuLi54KT0+eFswXSkpKyJdIixzPW09PntsZXQgeD1tLnRyaW0oKTtpZigheClyZXR1cm4iIjtpZihtLmluZGV4T2YodG0pPi0xKXg9dGhpcy5fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKG0sZSxpKTtlbHNle2xldCBnPW0ucmVwbGFjZShkXywiIik7aWYoZy5sZW5ndGg+MCl7bGV0IGI9Zy5tYXRjaCgvKFteOl0qKSg6KikoLiopLyk7YiYmKHg9YlsxXStvK2JbMl0rYlszXSl9fXJldHVybiB4fSxhPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBsYWNlaG9sZGVycz1bXSx0aGlzLmluZGV4PTAsdD10aGlzLl9lc2NhcGVSZWdleE1hdGNoZXModCwvKFxbW15cXV0qXF0pL2cpLHQ9dGhpcy5fZXNjYXBlUmVnZXhNYXRjaGVzKHQsLyhcXC4pL2cpLHRoaXMuX2NvbnRlbnQ9dC5yZXBsYWNlKC8oOm50aC1bLVx3XSspKFwoW14pXStcKSkvZywoZSxpLHIpPT57bGV0IG89YF9fcGgtJHt0aGlzLmluZGV4fV9fYDtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnMucHVzaChyKSx0aGlzLmluZGV4KyssaStvfSl9cmVzdG9yZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9fX3BoLShcZCspX18vZywoZSxpKT0+dGhpcy5wbGFjZWhvbGRlcnNbK2ldKX1jb250ZW50KCl7cmV0dXJuIHRoaXMuX2NvbnRlbnR9X2VzY2FwZVJlZ2V4TWF0Y2hlcyh0LGUpe3JldHVybiB0LnJlcGxhY2UoZSwoaSxyKT0+e2xldCBvPWBfX3BoLSR7dGhpcy5pbmRleH1fX2A7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXJzLnB1c2gociksdGhpcy5pbmRleCsrLG99KX19KHQpLGw9IiIsYz0wLGQ9LyggfD58XCt8fig/IT0pKVxzKi9nLGg9ISgodD1hLmNvbnRlbnQoKSkuaW5kZXhPZih0bSk+LTEpO2Zvcig7bnVsbCE9PSh1PWQuZXhlYyh0KSk7KXtsZXQgbT11WzFdLHg9dC5zbGljZShjLHUuaW5kZXgpLnRyaW0oKTtoPWh8fHguaW5kZXhPZih0bSk+LTEsbCs9YCR7aD9zKHgpOnh9ICR7bX0gYCxjPWQubGFzdEluZGV4fWxldCBmPXQuc3Vic3RyaW5nKGMpO3JldHVybiBoPWh8fGYuaW5kZXhPZih0bSk+LTEsbCs9aD9zKGYpOmYsYS5yZXN0b3JlKGwpfV9pbnNlcnRQb2x5ZmlsbEhvc3RJbkNzc1RleHQodCl7cmV0dXJuIHQucmVwbGFjZShNU2UsWlYpLnJlcGxhY2UoQ1NlLGdEKX19O3JldHVybiBuLm1hcChyPT5pLnNoaW1Dc3NUZXh0KHIsIl9uZ2NvbnRlbnQtJUNPTVAlIiwiX25naG9zdC0lQ09NUCUiKSl9KG4uc3R5bGVzKTpuLnN0eWxlcykucmVkdWNlKChELFQpPT4oVC50cmltKCkubGVuZ3RoPjAmJkQucHVzaCh0LmdldENvbnN0TGl0ZXJhbChodChUKSkpLEQpLFtdKTtiLmxlbmd0aD4wJiZpLnNldCgic3R5bGVzIixfcihiKSl9ZWxzZSBuLmVuY2Fwc3VsYXRpb249PT1xZC5FbXVsYXRlZCYmKG4uZW5jYXBzdWxhdGlvbj1xZC5Ob25lKTtuLmVuY2Fwc3VsYXRpb24hPT1xZC5FbXVsYXRlZCYmaS5zZXQoImVuY2Fwc3VsYXRpb24iLGh0KG4uZW5jYXBzdWxhdGlvbikpLG51bGwhPT1uLmFuaW1hdGlvbnMmJmkuc2V0KCJkYXRhIixxbChbe2tleToiYW5pbWF0aW9uIix2YWx1ZTpuLmFuaW1hdGlvbnMscXVvdGVkOiExfV0pKSxudWxsIT1sJiZsIT09Y0MuRGVmYXVsdCYmaS5zZXQoImNoYW5nZURldGVjdGlvbiIsaHQobCkpO2xldCBtPVRuKHRlLmRlZmluZUNvbXBvbmVudCkuY2FsbEZuKFtpLnRvTGl0ZXJhbE1hcCgpXSx2b2lkIDAsITApLHg9ZnVuY3Rpb24obil7bGV0IHQ9T0sobik7cmV0dXJuIHQucHVzaChQVihuLnRlbXBsYXRlLm5nQ29udGVudFNlbGVjdG9ycykpLHQucHVzaCh1bChodChuLmlzU3RhbmRhbG9uZSkpKSx1bChUbih0ZS5Db21wb25lbnREZWNsYXJhdGlvbix0KSl9KG4pO3JldHVybntleHByZXNzaW9uOm0sdHlwZTp4LHN0YXRlbWVudHM6W119fShpLHIsREQoaS5pbnRlcnBvbGF0aW9uKSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihzLmV4cHJlc3Npb24sdCxlLHIuc3RhdGVtZW50cyl9Y29tcGlsZUZhY3RvcnkodCxlLGkpe2xldCByPW5tKHtuYW1lOmkubmFtZSx0eXBlOkFzKGkudHlwZSksaW50ZXJuYWxUeXBlOm5ldyBMbihpLnR5cGUpLHR5cGVBcmd1bWVudENvdW50OmkudHlwZUFyZ3VtZW50Q291bnQsZGVwczoobj1pLmRlcHMsbnVsbD09bj9udWxsOm4ubWFwKExLKSksdGFyZ2V0OmkudGFyZ2V0fSk7dmFyIG47cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihyLmV4cHJlc3Npb24sdCxlLHIuc3RhdGVtZW50cyl9Y29tcGlsZUZhY3RvcnlEZWNsYXJhdGlvbih0LGUsaSl7bGV0IHI9bm0oe25hbWU6aS50eXBlLm5hbWUsdHlwZTpBcyhpLnR5cGUpLGludGVybmFsVHlwZTpuZXcgTG4oaS50eXBlKSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6QXJyYXkuaXNBcnJheShpLmRlcHMpP2kuZGVwcy5tYXAoUFEpOmkuZGVwcyx0YXJnZXQ6aS50YXJnZXR9KTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKHIuZXhwcmVzc2lvbix0LGUsci5zdGF0ZW1lbnRzKX1jcmVhdGVQYXJzZVNvdXJjZVNwYW4odCxlLGkpe3JldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IHI9bmV3IHBEKCIiLGBpbiAke259ICR7dH0gaW4gJHtlfWApO3JldHVybiBuZXcgR28obmV3IHZtKHIsLTEsLTEsLTEpLG5ldyB2bShyLC0xLC0xLC0xKSl9KHQsZSxpKX1qaXRFeHByZXNzaW9uKHQsZSxpLHIpe2xldCBvPVsuLi5yLG5ldyBWdSgiJGRlZiIsdCx2b2lkIDAsbGwuRXhwb3J0ZWQpXTtyZXR1cm4gdGhpcy5qaXRFdmFsdWF0b3IuZXZhbHVhdGVTdGF0ZW1lbnRzKGksbyxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jb250ZXh0PXR9cmVzb2x2ZUV4dGVybmFsUmVmZXJlbmNlKHQpe2lmKCJAYW5ndWxhci9jb3JlIiE9PXQubW9kdWxlTmFtZSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIGV4dGVybmFsIHJlZmVyZW5jZSB0byAke3QubW9kdWxlTmFtZX0sIG9ubHkgcmVmZXJlbmNlcyB0byBAYW5ndWxhci9jb3JlIGFyZSBzdXBwb3J0ZWQuYCk7aWYoIXRoaXMuY29udGV4dC5oYXNPd25Qcm9wZXJ0eSh0Lm5hbWUpKXRocm93IG5ldyBFcnJvcihgTm8gdmFsdWUgcHJvdmlkZWQgZm9yIEBhbmd1bGFyL2NvcmUgc3ltYm9sICcke3QubmFtZX0nLmApO3JldHVybiB0aGlzLmNvbnRleHRbdC5uYW1lXX19KGUpLCEwKS4kZGVmfX07dmFyIE9EPWZ1bmN0aW9uKG4sLi4udCl7aWYoT0QudHJhbnNsYXRlKXtsZXQgaT1PRC50cmFuc2xhdGUobix0KTtuPWlbMF0sdD1pWzFdfWxldCBlPVZLKG5bMF0sbi5yYXdbMF0pO2ZvcihsZXQgaT0xO2k8bi5sZW5ndGg7aSsrKWUrPXRbaS0xXStWSyhuW2ldLG4ucmF3W2ldKTtyZXR1cm4gZX07ZnVuY3Rpb24gVksobix0KXtyZXR1cm4iOiI9PT10LmNoYXJBdCgwKT9uLnN1YnN0cmluZyhmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0xLGk9MTtlPG4ubGVuZ3RoO2UrKyxpKyspaWYoIlxcIj09PXRbaV0paSsrO2Vsc2UgaWYoIjoiPT09bltlXSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYFVudGVybWluYXRlZCAkbG9jYWxpemUgbWV0YWRhdGEgYmxvY2sgaW4gIiR7dH0iLmApfShuLHQpKzEpOm59KCgpPT50eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiBnbG9iYWw8InUiJiZnbG9iYWx8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmKSgpLiRsb2NhbGl6ZT1PRDt2YXIgcjU9bnVsbDtmdW5jdGlvbiBZbCgpe3JldHVybiByNX12YXIgekQ9Y2xhc3N7fSxIdD1uZXcgcGUoIkRvY3VtZW50VG9rZW4iKSxLSz0oKCk9PntjbGFzcyBue2hpc3RvcnlHbyhlKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gaihaSyl9LHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpO25ldyBwZSgiTG9jYXRpb24gSW5pdGlhbGl6ZWQiKTt2YXIgWks9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEtLe2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fZG9jPWUsdGhpcy5faW5pdCgpfV9pbml0KCl7dGhpcy5sb2NhdGlvbj13aW5kb3cubG9jYXRpb24sdGhpcy5faGlzdG9yeT13aW5kb3cuaGlzdG9yeX1nZXRCYXNlSHJlZkZyb21ET00oKXtyZXR1cm4gWWwoKS5nZXRCYXNlSHJlZih0aGlzLl9kb2MpfW9uUG9wU3RhdGUoZSl7bGV0IGk9WWwoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiBpLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixlLCExKSwoKT0+aS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsZSl9b25IYXNoQ2hhbmdlKGUpe2xldCBpPVlsKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gaS5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixlLCExKSwoKT0+aS5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixlKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLmxvY2F0aW9uLmhyZWZ9Z2V0IHByb3RvY29sKCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucHJvdG9jb2x9Z2V0IGhvc3RuYW1lKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5wb3J0fWdldCBwYXRobmFtZSgpe3JldHVybiB0aGlzLmxvY2F0aW9uLnBhdGhuYW1lfWdldCBzZWFyY2goKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5oYXNofXNldCBwYXRobmFtZShlKXt0aGlzLmxvY2F0aW9uLnBhdGhuYW1lPWV9cHVzaFN0YXRlKGUsaSxyKXtVSygpP3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKGUsaSxyKTp0aGlzLmxvY2F0aW9uLmhhc2g9cn1yZXBsYWNlU3RhdGUoZSxpLHIpe1VLKCk/dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUoZSxpLHIpOnRoaXMubG9jYXRpb24uaGFzaD1yfWZvcndhcmQoKXt0aGlzLl9oaXN0b3J5LmZvcndhcmQoKX1iYWNrKCl7dGhpcy5faGlzdG9yeS5iYWNrKCl9aGlzdG9yeUdvKGU9MCl7dGhpcy5faGlzdG9yeS5nbyhlKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9oaXN0b3J5LnN0YXRlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEh0KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBaSyhqKEh0KSl9LHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpO2Z1bmN0aW9uIFVLKCl7cmV0dXJuISF3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGV9ZnVuY3Rpb24gSksobix0KXtpZigwPT1uLmxlbmd0aClyZXR1cm4gdDtpZigwPT10Lmxlbmd0aClyZXR1cm4gbjtsZXQgZT0wO3JldHVybiBuLmVuZHNXaXRoKCIvIikmJmUrKyx0LnN0YXJ0c1dpdGgoIi8iKSYmZSsrLDI9PWU/bit0LnN1YnN0cmluZygxKToxPT1lP24rdDpuKyIvIit0fWZ1bmN0aW9uIHpLKG4pe2xldCB0PW4ubWF0Y2goLyN8XD98JC8pLGU9dCYmdC5pbmRleHx8bi5sZW5ndGg7cmV0dXJuIG4uc2xpY2UoMCxlLSgiLyI9PT1uW2UtMV0/MTowKSkrbi5zbGljZShlKX1mdW5jdGlvbiBTbShuKXtyZXR1cm4gbiYmIj8iIT09blswXT8iPyIrbjpufXZhciBjNT0oKCk9PntjbGFzcyBue2hpc3RvcnlHbyhlKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gam8oeVRlKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSx2VGU9bmV3IHBlKCJhcHBCYXNlSHJlZiIpLHlUZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgYzV7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb249ZSx0aGlzLl9yZW1vdmVMaXN0ZW5lckZucz1bXSx0aGlzLl9iYXNlSHJlZj1pPz90aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJvbURPTSgpPz9qbyhIdCkubG9jYXRpb24/Lm9yaWdpbj8/IiJ9bmdPbkRlc3Ryb3koKXtmb3IoO3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLmxlbmd0aDspdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucG9wKCkoKX1vblBvcFN0YXRlKGUpe3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnB1c2godGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKGUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKGUpKX1nZXRCYXNlSHJlZigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn1wcmVwYXJlRXh0ZXJuYWxVcmwoZSl7cmV0dXJuIEpLKHRoaXMuX2Jhc2VIcmVmLGUpfXBhdGgoZT0hMSl7bGV0IGk9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZStTbSh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnNlYXJjaCkscj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIHImJmU/YCR7aX0ke3J9YDppfXB1c2hTdGF0ZShlLGkscixvKXtsZXQgcz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChyK1NtKG8pKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShlLGkscyl9cmVwbGFjZVN0YXRlKGUsaSxyLG8pe2xldCBzPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKHIrU20obykpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKGUsaSxzKX1mb3J3YXJkKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0U3RhdGUoKX1oaXN0b3J5R28oZT0wKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhpc3RvcnlHbz8uKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEtLKSxqKHZUZSw4KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksaU09KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9zdWJqZWN0PW5ldyBHLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5PWU7bGV0IGk9dGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX2Jhc2VIcmVmPXpLKGpLKGkpKSx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lm9uUG9wU3RhdGUocj0+e3RoaXMuX3N1YmplY3QuZW1pdCh7dXJsOnRoaXMucGF0aCghMCkscG9wOiEwLHN0YXRlOnIuc3RhdGUsdHlwZTpyLnR5cGV9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXX1wYXRoKGU9ITEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSh0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnBhdGgoZSkpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0U3RhdGUoKX1pc0N1cnJlbnRQYXRoRXF1YWxUbyhlLGk9IiIpe3JldHVybiB0aGlzLnBhdGgoKT09dGhpcy5ub3JtYWxpemUoZStTbShpKSl9bm9ybWFsaXplKGUpe3JldHVybiBuLnN0cmlwVHJhaWxpbmdTbGFzaChmdW5jdGlvbihuLHQpe3JldHVybiBuJiZ0LnN0YXJ0c1dpdGgobik/dC5zdWJzdHJpbmcobi5sZW5ndGgpOnR9KHRoaXMuX2Jhc2VIcmVmLGpLKGUpKSl9cHJlcGFyZUV4dGVybmFsVXJsKGUpe3JldHVybiBlJiYiLyIhPT1lWzBdJiYoZT0iLyIrZSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwoZSl9Z28oZSxpPSIiLHI9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5wdXNoU3RhdGUociwiIixlLGkpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChlK1NtKGkpKSxyKX1yZXBsYWNlU3RhdGUoZSxpPSIiLHI9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5yZXBsYWNlU3RhdGUociwiIixlLGkpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChlK1NtKGkpKSxyKX1mb3J3YXJkKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuYmFjaygpfWhpc3RvcnlHbyhlPTApe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuaGlzdG9yeUdvPy4oZSl9b25VcmxDaGFuZ2UoZSl7cmV0dXJuIHRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5wdXNoKGUpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbnx8KHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj10aGlzLnN1YnNjcmliZShpPT57dGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKGkudXJsLGkuc3RhdGUpfSkpLCgpPT57bGV0IGk9dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmluZGV4T2YoZSk7dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnNwbGljZShpLDEpLDA9PT10aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMubGVuZ3RoJiYodGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj1udWxsKX19X25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhlPSIiLGkpe3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5mb3JFYWNoKHI9PnIoZSxpKSl9c3Vic2NyaWJlKGUsaSxyKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjppLGNvbXBsZXRlOnJ9KX19cmV0dXJuIG4ubm9ybWFsaXplUXVlcnlQYXJhbXM9U20sbi5qb2luV2l0aFNsYXNoPUpLLG4uc3RyaXBUcmFpbGluZ1NsYXNoPXpLLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihjNSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgaU0oaihjNSkpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGpLKG4pe3JldHVybiBuLnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX12YXIgSEQ9KCgpPT4oZnVuY3Rpb24obil7bltuLkRlY2ltYWw9MF09IkRlY2ltYWwiLG5bbi5QZXJjZW50PTFdPSJQZXJjZW50IixuW24uQ3VycmVuY3k9Ml09IkN1cnJlbmN5IixuW24uU2NpZW50aWZpYz0zXT0iU2NpZW50aWZpYyJ9KEhEfHwoSEQ9e30pKSxIRCkpKCkseXM9KCgpPT4oZnVuY3Rpb24obil7bltuLkZvcm1hdD0wXT0iRm9ybWF0IixuW24uU3RhbmRhbG9uZT0xXT0iU3RhbmRhbG9uZSJ9KHlzfHwoeXM9e30pKSx5cykpKCksb3I9KCgpPT4oZnVuY3Rpb24obil7bltuLk5hcnJvdz0wXT0iTmFycm93IixuW24uQWJicmV2aWF0ZWQ9MV09IkFiYnJldmlhdGVkIixuW24uV2lkZT0yXT0iV2lkZSIsbltuLlNob3J0PTNdPSJTaG9ydCJ9KG9yfHwob3I9e30pKSxvcikpKCksb2E9KCgpPT4oZnVuY3Rpb24obil7bltuLlNob3J0PTBdPSJTaG9ydCIsbltuLk1lZGl1bT0xXT0iTWVkaXVtIixuW24uTG9uZz0yXT0iTG9uZyIsbltuLkZ1bGw9M109IkZ1bGwifShvYXx8KG9hPXt9KSksb2EpKSgpLElzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5EZWNpbWFsPTBdPSJEZWNpbWFsIixuW24uR3JvdXA9MV09Ikdyb3VwIixuW24uTGlzdD0yXT0iTGlzdCIsbltuLlBlcmNlbnRTaWduPTNdPSJQZXJjZW50U2lnbiIsbltuLlBsdXNTaWduPTRdPSJQbHVzU2lnbiIsbltuLk1pbnVzU2lnbj01XT0iTWludXNTaWduIixuW24uRXhwb25lbnRpYWw9Nl09IkV4cG9uZW50aWFsIixuW24uU3VwZXJzY3JpcHRpbmdFeHBvbmVudD03XT0iU3VwZXJzY3JpcHRpbmdFeHBvbmVudCIsbltuLlBlck1pbGxlPThdPSJQZXJNaWxsZSIsbltuLkluZmluaXR5PTldPSJJbmZpbml0eSIsbltuLk5hTj0xMF09Ik5hTiIsbltuLlRpbWVTZXBhcmF0b3I9MTFdPSJUaW1lU2VwYXJhdG9yIixuW24uQ3VycmVuY3lEZWNpbWFsPTEyXT0iQ3VycmVuY3lEZWNpbWFsIixuW24uQ3VycmVuY3lHcm91cD0xM109IkN1cnJlbmN5R3JvdXAifShJc3x8KElzPXt9KSksSXMpKSgpO2Z1bmN0aW9uIGtEKG4sdCl7cmV0dXJuIFhsKEFhKG4pW1JyLkRhdGVGb3JtYXRdLHQpfWZ1bmN0aW9uIEZEKG4sdCl7cmV0dXJuIFhsKEFhKG4pW1JyLlRpbWVGb3JtYXRdLHQpfWZ1bmN0aW9uIE5EKG4sdCl7cmV0dXJuIFhsKEFhKG4pW1JyLkRhdGVUaW1lRm9ybWF0XSx0KX1mdW5jdGlvbiBlcChuLHQpe2xldCBlPUFhKG4pLGk9ZVtSci5OdW1iZXJTeW1ib2xzXVt0XTtpZih0eXBlb2YgaT4idSIpe2lmKHQ9PT1Jcy5DdXJyZW5jeURlY2ltYWwpcmV0dXJuIGVbUnIuTnVtYmVyU3ltYm9sc11bSXMuRGVjaW1hbF07aWYodD09PUlzLkN1cnJlbmN5R3JvdXApcmV0dXJuIGVbUnIuTnVtYmVyU3ltYm9sc11bSXMuR3JvdXBdfXJldHVybiBpfWZ1bmN0aW9uICRLKG4pe2lmKCFuW1JyLkV4dHJhRGF0YV0pdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV4dHJhIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlICIke25bUnIuTG9jYWxlSWRdfSIuIFVzZSAicmVnaXN0ZXJMb2NhbGVEYXRhIiB0byBsb2FkIG5ldyBkYXRhLiBTZWUgdGhlICJJMThuIGd1aWRlIiBvbiBhbmd1bGFyLmlvIHRvIGtub3cgbW9yZS5gKX1mdW5jdGlvbiBYbChuLHQpe2ZvcihsZXQgZT10O2U+LTE7ZS0tKWlmKHR5cGVvZiBuW2VdPCJ1IilyZXR1cm4gbltlXTt0aHJvdyBuZXcgRXJyb3IoIkxvY2FsZSBkYXRhIEFQSTogbG9jYWxlIGRhdGEgdW5kZWZpbmVkIil9ZnVuY3Rpb24gJFYobil7bGV0W3QsZV09bi5zcGxpdCgiOiIpO3JldHVybntob3VyczordCxtaW51dGVzOitlfX12YXIgSVRlPS9eKFxkezQsfSktPyhcZFxkKS0/KFxkXGQpKD86VChcZFxkKSg/Ojo/KFxkXGQpKD86Oj8oXGRcZCkoPzpcLihcZCspKT8pPyk/KFp8KFsrLV0pKFxkXGQpOj8oXGRcZCkpPyk/JC8sdE09e30sUFRlPS8oKD86W15CRUdITE1PU1dZWmFiY2RobXN3eXonXSspfCg/OicoPzpbXiddfCcnKSonKXwoPzpHezEsNX18eXsxLDR9fFl7MSw0fXxNezEsNX18THsxLDV9fHd7MSwyfXxXezF9fGR7MSwyfXxFezEsNn18Y3sxLDZ9fGF7MSw1fXxiezEsNX18QnsxLDV9fGh7MSwyfXxIezEsMn18bXsxLDJ9fHN7MSwyfXxTezEsM318ensxLDR9fFp7MSw1fXxPezEsNH0pKShbXHNcU10qKS8sV2M9KCgpPT4oZnVuY3Rpb24obil7bltuLlNob3J0PTBdPSJTaG9ydCIsbltuLlNob3J0R01UPTFdPSJTaG9ydEdNVCIsbltuLkxvbmc9Ml09IkxvbmciLG5bbi5FeHRlbmRlZD0zXT0iRXh0ZW5kZWQifShXY3x8KFdjPXt9KSksV2MpKSgpLFVpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5GdWxsWWVhcj0wXT0iRnVsbFllYXIiLG5bbi5Nb250aD0xXT0iTW9udGgiLG5bbi5EYXRlPTJdPSJEYXRlIixuW24uSG91cnM9M109IkhvdXJzIixuW24uTWludXRlcz00XT0iTWludXRlcyIsbltuLlNlY29uZHM9NV09IlNlY29uZHMiLG5bbi5GcmFjdGlvbmFsU2Vjb25kcz02XT0iRnJhY3Rpb25hbFNlY29uZHMiLG5bbi5EYXk9N109IkRheSJ9KFVpfHwoVWk9e30pKSxVaSkpKCksSGk9KCgpPT4oZnVuY3Rpb24obil7bltuLkRheVBlcmlvZHM9MF09IkRheVBlcmlvZHMiLG5bbi5EYXlzPTFdPSJEYXlzIixuW24uTW9udGhzPTJdPSJNb250aHMiLG5bbi5FcmFzPTNdPSJFcmFzIn0oSGl8fChIaT17fSkpLEhpKSkoKTtmdW5jdGlvbiBSVGUobix0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obil7aWYoR0sobikpcmV0dXJuIG47aWYoIm51bWJlciI9PXR5cGVvZiBuJiYhaXNOYU4obikpcmV0dXJuIG5ldyBEYXRlKG4pO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7aWYobj1uLnRyaW0oKSwvXihcZHs0fSgtXGR7MSwyfSgtXGR7MSwyfSk/KT8pJC8udGVzdChuKSl7bGV0W3Isbz0xLHM9MV09bi5zcGxpdCgiLSIpLm1hcChhPT4rYSk7cmV0dXJuIGpEKHIsby0xLHMpfWxldCBpLGU9cGFyc2VGbG9hdChuKTtpZighaXNOYU4obi1lKSlyZXR1cm4gbmV3IERhdGUoZSk7aWYoaT1uLm1hdGNoKElUZSkpcmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PW5ldyBEYXRlKDApLGU9MCxpPTAscj1uWzhdP3Quc2V0VVRDRnVsbFllYXI6dC5zZXRGdWxsWWVhcixvPW5bOF0/dC5zZXRVVENIb3Vyczp0LnNldEhvdXJzO25bOV0mJihlPU51bWJlcihuWzldK25bMTBdKSxpPU51bWJlcihuWzldK25bMTFdKSksci5jYWxsKHQsTnVtYmVyKG5bMV0pLE51bWJlcihuWzJdKS0xLE51bWJlcihuWzNdKSk7bGV0IHM9TnVtYmVyKG5bNF18fDApLWUsYT1OdW1iZXIobls1XXx8MCktaSxsPU51bWJlcihuWzZdfHwwKSxjPU1hdGguZmxvb3IoMWUzKnBhcnNlRmxvYXQoIjAuIisobls3XXx8MCkpKTtyZXR1cm4gby5jYWxsKHQscyxhLGwsYyksdH0oaSl9bGV0IHQ9bmV3IERhdGUobik7aWYoIUdLKHQpKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGNvbnZlcnQgIiR7bn0iIGludG8gYSBkYXRlYCk7cmV0dXJuIHR9KG4pO3Q9JGQoZSx0KXx8dDtsZXQgYSxzPVtdO2Zvcig7dDspe2lmKGE9UFRlLmV4ZWModCksIWEpe3MucHVzaCh0KTticmVha317cz1zLmNvbmNhdChhLnNsaWNlKDEpKTtsZXQgdT1zLnBvcCgpO2lmKCF1KWJyZWFrO3Q9dX19bGV0IGw9ci5nZXRUaW1lem9uZU9mZnNldCgpO2kmJihsPXRaKGksbCkscj1mdW5jdGlvbihuLHQsZSl7bGV0IHI9bi5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybiBmdW5jdGlvbihuLHQpe3JldHVybihuPW5ldyBEYXRlKG4uZ2V0VGltZSgpKSkuc2V0TWludXRlcyhuLmdldE1pbnV0ZXMoKSt0KSxufShuLC0xKih0Wih0LHIpLXIpKX0ocixpKSk7bGV0IGM9IiI7cmV0dXJuIHMuZm9yRWFjaCh1PT57bGV0IGQ9ZnVuY3Rpb24obil7aWYodDVbbl0pcmV0dXJuIHQ1W25dO2xldCB0O3N3aXRjaChuKXtjYXNlIkciOmNhc2UiR0ciOmNhc2UiR0dHIjp0PXhyKEhpLkVyYXMsb3IuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiR0dHRyI6dD14cihIaS5FcmFzLG9yLldpZGUpO2JyZWFrO2Nhc2UiR0dHR0ciOnQ9eHIoSGkuRXJhcyxvci5OYXJyb3cpO2JyZWFrO2Nhc2UieSI6dD1JbyhVaS5GdWxsWWVhciwxLDAsITEsITApO2JyZWFrO2Nhc2UieXkiOnQ9SW8oVWkuRnVsbFllYXIsMiwwLCEwLCEwKTticmVhaztjYXNlInl5eSI6dD1JbyhVaS5GdWxsWWVhciwzLDAsITEsITApO2JyZWFrO2Nhc2UieXl5eSI6dD1JbyhVaS5GdWxsWWVhciw0LDAsITEsITApO2JyZWFrO2Nhc2UiWSI6dD1WRCgxKTticmVhaztjYXNlIllZIjp0PVZEKDIsITApO2JyZWFrO2Nhc2UiWVlZIjp0PVZEKDMpO2JyZWFrO2Nhc2UiWVlZWSI6dD1WRCg0KTticmVhaztjYXNlIk0iOmNhc2UiTCI6dD1JbyhVaS5Nb250aCwxLDEpO2JyZWFrO2Nhc2UiTU0iOmNhc2UiTEwiOnQ9SW8oVWkuTW9udGgsMiwxKTticmVhaztjYXNlIk1NTSI6dD14cihIaS5Nb250aHMsb3IuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiTU1NTSI6dD14cihIaS5Nb250aHMsb3IuV2lkZSk7YnJlYWs7Y2FzZSJNTU1NTSI6dD14cihIaS5Nb250aHMsb3IuTmFycm93KTticmVhaztjYXNlIkxMTCI6dD14cihIaS5Nb250aHMsb3IuQWJicmV2aWF0ZWQseXMuU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJMTExMIjp0PXhyKEhpLk1vbnRocyxvci5XaWRlLHlzLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiTExMTEwiOnQ9eHIoSGkuTW9udGhzLG9yLk5hcnJvdyx5cy5TdGFuZGFsb25lKTticmVhaztjYXNlInciOnQ9ZTUoMSk7YnJlYWs7Y2FzZSJ3dyI6dD1lNSgyKTticmVhaztjYXNlIlciOnQ9ZTUoMSwhMCk7YnJlYWs7Y2FzZSJkIjp0PUlvKFVpLkRhdGUsMSk7YnJlYWs7Y2FzZSJkZCI6dD1JbyhVaS5EYXRlLDIpO2JyZWFrO2Nhc2UiYyI6Y2FzZSJjYyI6dD1JbyhVaS5EYXksMSk7YnJlYWs7Y2FzZSJjY2MiOnQ9eHIoSGkuRGF5cyxvci5BYmJyZXZpYXRlZCx5cy5TdGFuZGFsb25lKTticmVhaztjYXNlImNjY2MiOnQ9eHIoSGkuRGF5cyxvci5XaWRlLHlzLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiY2NjY2MiOnQ9eHIoSGkuRGF5cyxvci5OYXJyb3cseXMuU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJjY2NjY2MiOnQ9eHIoSGkuRGF5cyxvci5TaG9ydCx5cy5TdGFuZGFsb25lKTticmVhaztjYXNlIkUiOmNhc2UiRUUiOmNhc2UiRUVFIjp0PXhyKEhpLkRheXMsb3IuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiRUVFRSI6dD14cihIaS5EYXlzLG9yLldpZGUpO2JyZWFrO2Nhc2UiRUVFRUUiOnQ9eHIoSGkuRGF5cyxvci5OYXJyb3cpO2JyZWFrO2Nhc2UiRUVFRUVFIjp0PXhyKEhpLkRheXMsb3IuU2hvcnQpO2JyZWFrO2Nhc2UiYSI6Y2FzZSJhYSI6Y2FzZSJhYWEiOnQ9eHIoSGkuRGF5UGVyaW9kcyxvci5BYmJyZXZpYXRlZCk7YnJlYWs7Y2FzZSJhYWFhIjp0PXhyKEhpLkRheVBlcmlvZHMsb3IuV2lkZSk7YnJlYWs7Y2FzZSJhYWFhYSI6dD14cihIaS5EYXlQZXJpb2RzLG9yLk5hcnJvdyk7YnJlYWs7Y2FzZSJiIjpjYXNlImJiIjpjYXNlImJiYiI6dD14cihIaS5EYXlQZXJpb2RzLG9yLkFiYnJldmlhdGVkLHlzLlN0YW5kYWxvbmUsITApO2JyZWFrO2Nhc2UiYmJiYiI6dD14cihIaS5EYXlQZXJpb2RzLG9yLldpZGUseXMuU3RhbmRhbG9uZSwhMCk7YnJlYWs7Y2FzZSJiYmJiYiI6dD14cihIaS5EYXlQZXJpb2RzLG9yLk5hcnJvdyx5cy5TdGFuZGFsb25lLCEwKTticmVhaztjYXNlIkIiOmNhc2UiQkIiOmNhc2UiQkJCIjp0PXhyKEhpLkRheVBlcmlvZHMsb3IuQWJicmV2aWF0ZWQseXMuRm9ybWF0LCEwKTticmVhaztjYXNlIkJCQkIiOnQ9eHIoSGkuRGF5UGVyaW9kcyxvci5XaWRlLHlzLkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJCQkJCQiI6dD14cihIaS5EYXlQZXJpb2RzLG9yLk5hcnJvdyx5cy5Gb3JtYXQsITApO2JyZWFrO2Nhc2UiaCI6dD1JbyhVaS5Ib3VycywxLC0xMik7YnJlYWs7Y2FzZSJoaCI6dD1JbyhVaS5Ib3VycywyLC0xMik7YnJlYWs7Y2FzZSJIIjp0PUlvKFVpLkhvdXJzLDEpO2JyZWFrO2Nhc2UiSEgiOnQ9SW8oVWkuSG91cnMsMik7YnJlYWs7Y2FzZSJtIjp0PUlvKFVpLk1pbnV0ZXMsMSk7YnJlYWs7Y2FzZSJtbSI6dD1JbyhVaS5NaW51dGVzLDIpO2JyZWFrO2Nhc2UicyI6dD1JbyhVaS5TZWNvbmRzLDEpO2JyZWFrO2Nhc2Uic3MiOnQ9SW8oVWkuU2Vjb25kcywyKTticmVhaztjYXNlIlMiOnQ9SW8oVWkuRnJhY3Rpb25hbFNlY29uZHMsMSk7YnJlYWs7Y2FzZSJTUyI6dD1JbyhVaS5GcmFjdGlvbmFsU2Vjb25kcywyKTticmVhaztjYXNlIlNTUyI6dD1JbyhVaS5GcmFjdGlvbmFsU2Vjb25kcywzKTticmVhaztjYXNlIloiOmNhc2UiWloiOmNhc2UiWlpaIjp0PUJEKFdjLlNob3J0KTticmVhaztjYXNlIlpaWlpaIjp0PUJEKFdjLkV4dGVuZGVkKTticmVhaztjYXNlIk8iOmNhc2UiT08iOmNhc2UiT09PIjpjYXNlInoiOmNhc2UienoiOmNhc2Uienp6Ijp0PUJEKFdjLlNob3J0R01UKTticmVhaztjYXNlIk9PT08iOmNhc2UiWlpaWiI6Y2FzZSJ6enp6Ijp0PUJEKFdjLkxvbmcpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIHQ1W25dPXQsdH0odSk7Yys9ZD9kKHIsZSxsKToiJyciPT09dT8iJyI6dS5yZXBsYWNlKC8oXid8JyQpL2csIiIpLnJlcGxhY2UoLycnL2csIiciKX0pLGN9ZnVuY3Rpb24gakQobix0LGUpe2xldCBpPW5ldyBEYXRlKDApO3JldHVybiBpLnNldEZ1bGxZZWFyKG4sdCxlKSxpLnNldEhvdXJzKDAsMCwwKSxpfWZ1bmN0aW9uICRkKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIEFhKG4pW1JyLkxvY2FsZUlkXX0obik7aWYodE1bZV09dE1bZV18fHt9LHRNW2VdW3RdKXJldHVybiB0TVtlXVt0XTtsZXQgaT0iIjtzd2l0Y2godCl7Y2FzZSJzaG9ydERhdGUiOmk9a0QobixvYS5TaG9ydCk7YnJlYWs7Y2FzZSJtZWRpdW1EYXRlIjppPWtEKG4sb2EuTWVkaXVtKTticmVhaztjYXNlImxvbmdEYXRlIjppPWtEKG4sb2EuTG9uZyk7YnJlYWs7Y2FzZSJmdWxsRGF0ZSI6aT1rRChuLG9hLkZ1bGwpO2JyZWFrO2Nhc2Uic2hvcnRUaW1lIjppPUZEKG4sb2EuU2hvcnQpO2JyZWFrO2Nhc2UibWVkaXVtVGltZSI6aT1GRChuLG9hLk1lZGl1bSk7YnJlYWs7Y2FzZSJsb25nVGltZSI6aT1GRChuLG9hLkxvbmcpO2JyZWFrO2Nhc2UiZnVsbFRpbWUiOmk9RkQobixvYS5GdWxsKTticmVhaztjYXNlInNob3J0IjpsZXQgcj0kZChuLCJzaG9ydFRpbWUiKSxvPSRkKG4sInNob3J0RGF0ZSIpO2k9TEQoTkQobixvYS5TaG9ydCksW3Isb10pO2JyZWFrO2Nhc2UibWVkaXVtIjpsZXQgcz0kZChuLCJtZWRpdW1UaW1lIiksYT0kZChuLCJtZWRpdW1EYXRlIik7aT1MRChORChuLG9hLk1lZGl1bSksW3MsYV0pO2JyZWFrO2Nhc2UibG9uZyI6bGV0IGw9JGQobiwibG9uZ1RpbWUiKSxjPSRkKG4sImxvbmdEYXRlIik7aT1MRChORChuLG9hLkxvbmcpLFtsLGNdKTticmVhaztjYXNlImZ1bGwiOmxldCB1PSRkKG4sImZ1bGxUaW1lIiksZD0kZChuLCJmdWxsRGF0ZSIpO2k9TEQoTkQobixvYS5GdWxsKSxbdSxkXSl9cmV0dXJuIGkmJih0TVtlXVt0XT1pKSxpfWZ1bmN0aW9uIExEKG4sdCl7cmV0dXJuIHQmJihuPW4ucmVwbGFjZSgvXHsoW159XSspfS9nLGZ1bmN0aW9uKGUsaSl7cmV0dXJuIG51bGwhPXQmJmkgaW4gdD90W2ldOmV9KSksbn1mdW5jdGlvbiBHYyhuLHQsZT0iLSIsaSxyKXtsZXQgbz0iIjsobjwwfHxyJiZuPD0wKSYmKHI/bj0xLW46KG49LW4sbz1lKSk7bGV0IHM9U3RyaW5nKG4pO2Zvcig7cy5sZW5ndGg8dDspcz0iMCIrcztyZXR1cm4gaSYmKHM9cy5zbGljZShzLmxlbmd0aC10KSksbytzfWZ1bmN0aW9uIElvKG4sdCxlPTAsaT0hMSxyPSExKXtyZXR1cm4gZnVuY3Rpb24obyxzKXtsZXQgYT1mdW5jdGlvbihuLHQpe3N3aXRjaChuKXtjYXNlIFVpLkZ1bGxZZWFyOnJldHVybiB0LmdldEZ1bGxZZWFyKCk7Y2FzZSBVaS5Nb250aDpyZXR1cm4gdC5nZXRNb250aCgpO2Nhc2UgVWkuRGF0ZTpyZXR1cm4gdC5nZXREYXRlKCk7Y2FzZSBVaS5Ib3VyczpyZXR1cm4gdC5nZXRIb3VycygpO2Nhc2UgVWkuTWludXRlczpyZXR1cm4gdC5nZXRNaW51dGVzKCk7Y2FzZSBVaS5TZWNvbmRzOnJldHVybiB0LmdldFNlY29uZHMoKTtjYXNlIFVpLkZyYWN0aW9uYWxTZWNvbmRzOnJldHVybiB0LmdldE1pbGxpc2Vjb25kcygpO2Nhc2UgVWkuRGF5OnJldHVybiB0LmdldERheSgpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERhdGVUeXBlIHZhbHVlICIke259Ii5gKX19KG4sbyk7aWYoKGU+MHx8YT4tZSkmJihhKz1lKSxuPT09VWkuSG91cnMpMD09PWEmJi0xMj09PWUmJihhPTEyKTtlbHNlIGlmKG49PT1VaS5GcmFjdGlvbmFsU2Vjb25kcylyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gR2MobiwzKS5zdWJzdHJpbmcoMCx0KX0oYSx0KTtsZXQgbD1lcChzLElzLk1pbnVzU2lnbik7cmV0dXJuIEdjKGEsdCxsLGkscil9fWZ1bmN0aW9uIHhyKG4sdCxlPXlzLkZvcm1hdCxpPSExKXtyZXR1cm4gZnVuY3Rpb24ocixvKXtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSxyLG8pe3N3aXRjaChlKXtjYXNlIEhpLk1vbnRoczpyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPUFhKG4pLG89WGwoW2lbUnIuTW9udGhzRm9ybWF0XSxpW1JyLk1vbnRoc1N0YW5kYWxvbmVdXSx0KTtyZXR1cm4gWGwobyxlKX0odCxyLGkpW24uZ2V0TW9udGgoKV07Y2FzZSBIaS5EYXlzOnJldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9QWEobiksbz1YbChbaVtSci5EYXlzRm9ybWF0XSxpW1JyLkRheXNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIFhsKG8sZSl9KHQscixpKVtuLmdldERheSgpXTtjYXNlIEhpLkRheVBlcmlvZHM6bGV0IHM9bi5nZXRIb3VycygpLGE9bi5nZXRNaW51dGVzKCk7aWYobyl7bGV0IGM9ZnVuY3Rpb24obil7bGV0IHQ9QWEobik7cmV0dXJuICRLKHQpLCh0W1JyLkV4dHJhRGF0YV1bMl18fFtdKS5tYXAoaT0+InN0cmluZyI9PXR5cGVvZiBpPyRWKGkpOlskVihpWzBdKSwkVihpWzFdKV0pfSh0KSx1PWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1BYShuKTskSyhpKTtsZXQgbz1YbChbaVtSci5FeHRyYURhdGFdWzBdLGlbUnIuRXh0cmFEYXRhXVsxXV0sdCl8fFtdO3JldHVybiBYbChvLGUpfHxbXX0odCxyLGkpLGQ9Yy5maW5kSW5kZXgocD0+e2lmKEFycmF5LmlzQXJyYXkocCkpe2xldFtoLGZdPXAsbT1zPj1oLmhvdXJzJiZhPj1oLm1pbnV0ZXMseD1zPGYuaG91cnN8fHM9PT1mLmhvdXJzJiZhPGYubWludXRlcztpZihoLmhvdXJzPGYuaG91cnMpe2lmKG0mJngpcmV0dXJuITB9ZWxzZSBpZihtfHx4KXJldHVybiEwfWVsc2UgaWYocC5ob3Vycz09PXMmJnAubWludXRlcz09PWEpcmV0dXJuITA7cmV0dXJuITF9KTtpZigtMSE9PWQpcmV0dXJuIHVbZF19cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1BYShuKSxvPVhsKFtpW1JyLkRheVBlcmlvZHNGb3JtYXRdLGlbUnIuRGF5UGVyaW9kc1N0YW5kYWxvbmVdXSx0KTtyZXR1cm4gWGwobyxlKX0odCxyLGkpW3M8MTI/MDoxXTtjYXNlIEhpLkVyYXM6cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIFhsKEFhKG4pW1JyLkVyYXNdLHQpfSh0LGkpW24uZ2V0RnVsbFllYXIoKTw9MD8wOjFdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHRyYW5zbGF0aW9uIHR5cGUgJHtlfWApfX0ocixvLG4sdCxlLGkpfX1mdW5jdGlvbiBCRChuKXtyZXR1cm4gZnVuY3Rpb24odCxlLGkpe2xldCByPS0xKmksbz1lcChlLElzLk1pbnVzU2lnbikscz1yPjA/TWF0aC5mbG9vcihyLzYwKTpNYXRoLmNlaWwoci82MCk7c3dpdGNoKG4pe2Nhc2UgV2MuU2hvcnQ6cmV0dXJuKHI+PTA/IisiOiIiKStHYyhzLDIsbykrR2MoTWF0aC5hYnMociU2MCksMixvKTtjYXNlIFdjLlNob3J0R01UOnJldHVybiJHTVQiKyhyPj0wPyIrIjoiIikrR2MocywxLG8pO2Nhc2UgV2MuTG9uZzpyZXR1cm4iR01UIisocj49MD8iKyI6IiIpK0djKHMsMixvKSsiOiIrR2MoTWF0aC5hYnMociU2MCksMixvKTtjYXNlIFdjLkV4dGVuZGVkOnJldHVybiAwPT09aT8iWiI6KHI+PTA/IisiOiIiKStHYyhzLDIsbykrIjoiK0djKE1hdGguYWJzKHIlNjApLDIsbyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gem9uZSB3aWR0aCAiJHtufSJgKX19fWZ1bmN0aW9uIGVaKG4pe3JldHVybiBqRChuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpKyg0LW4uZ2V0RGF5KCkpKX1mdW5jdGlvbiBlNShuLHQ9ITEpe3JldHVybiBmdW5jdGlvbihlLGkpe2xldCByO2lmKHQpe2xldCBvPW5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCksMSkuZ2V0RGF5KCktMSxzPWUuZ2V0RGF0ZSgpO3I9MStNYXRoLmZsb29yKChzK28pLzcpfWVsc2V7bGV0IG89ZVooZSkscz1mdW5jdGlvbihuKXtsZXQgdD1qRChuLDAsMSkuZ2V0RGF5KCk7cmV0dXJuIGpEKG4sMCwxKyh0PD00PzQ6MTEpLXQpfShvLmdldEZ1bGxZZWFyKCkpLGE9by5nZXRUaW1lKCktcy5nZXRUaW1lKCk7cj0xK01hdGgucm91bmQoYS82MDQ4ZTUpfXJldHVybiBHYyhyLG4sZXAoaSxJcy5NaW51c1NpZ24pKX19ZnVuY3Rpb24gVkQobix0PSExKXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtyZXR1cm4gR2MoZVooZSkuZ2V0RnVsbFllYXIoKSxuLGVwKGksSXMuTWludXNTaWduKSx0KX19dmFyIHQ1PXt9O2Z1bmN0aW9uIHRaKG4sdCl7bj1uLnJlcGxhY2UoLzovZywiIik7bGV0IGU9RGF0ZS5wYXJzZSgiSmFuIDAxLCAxOTcwIDAwOjAwOjAwICIrbikvNmU0O3JldHVybiBpc05hTihlKT90OmV9ZnVuY3Rpb24gR0sobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4obi52YWx1ZU9mKCkpfXZhciBqVGU9L14oXGQrKT9cLigoXGQrKSgtKFxkKykpPyk/JC87ZnVuY3Rpb24gdTUobix0LGUpe2xldCBpPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEFhKG4pW1JyLk51bWJlckZvcm1hdHNdW3RdfSh0LEhELkRlY2ltYWwpLHI9ZnVuY3Rpb24obix0PSItIil7bGV0IGU9e21pbkludDoxLG1pbkZyYWM6MCxtYXhGcmFjOjAscG9zUHJlOiIiLHBvc1N1ZjoiIixuZWdQcmU6IiIsbmVnU3VmOiIiLGdTaXplOjAsbGdTaXplOjB9LGk9bi5zcGxpdCgiOyIpLHI9aVswXSxvPWlbMV0scz0tMSE9PXIuaW5kZXhPZigiLiIpP3Iuc3BsaXQoIi4iKTpbci5zdWJzdHJpbmcoMCxyLmxhc3RJbmRleE9mKCIwIikrMSksci5zdWJzdHJpbmcoci5sYXN0SW5kZXhPZigiMCIpKzEpXSxhPXNbMF0sbD1zWzFdfHwiIjtlLnBvc1ByZT1hLnN1YnN0cmluZygwLGEuaW5kZXhPZigiIyIpKTtmb3IobGV0IHU9MDt1PGwubGVuZ3RoO3UrKyl7bGV0IGQ9bC5jaGFyQXQodSk7IjAiPT09ZD9lLm1pbkZyYWM9ZS5tYXhGcmFjPXUrMToiIyI9PT1kP2UubWF4RnJhYz11KzE6ZS5wb3NTdWYrPWR9bGV0IGM9YS5zcGxpdCgiLCIpO2lmKGUuZ1NpemU9Y1sxXT9jWzFdLmxlbmd0aDowLGUubGdTaXplPWNbMl18fGNbMV0/KGNbMl18fGNbMV0pLmxlbmd0aDowLG8pe2xldCB1PXIubGVuZ3RoLWUucG9zUHJlLmxlbmd0aC1lLnBvc1N1Zi5sZW5ndGgsZD1vLmluZGV4T2YoIiMiKTtlLm5lZ1ByZT1vLnN1YnN0cmluZygwLGQpLnJlcGxhY2UoLycvZywiIiksZS5uZWdTdWY9by5zbGljZShkK3UpLnJlcGxhY2UoLycvZywiIil9ZWxzZSBlLm5lZ1ByZT10K2UucG9zUHJlLGUubmVnU3VmPWUucG9zU3VmO3JldHVybiBlfShpLGVwKHQsSXMuTWludXNTaWduKSk7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscixvLHM9ITEpe2xldCBhPSIiLGw9ITE7aWYoaXNGaW5pdGUobikpe2xldCBjPWZ1bmN0aW9uKG4pe2xldCBpLHIsbyxzLGEsdD1NYXRoLmFicyhuKSsiIixlPTA7Zm9yKChyPXQuaW5kZXhPZigiLiIpKT4tMSYmKHQ9dC5yZXBsYWNlKCIuIiwiIikpLChvPXQuc2VhcmNoKC9lL2kpKT4wPyhyPDAmJihyPW8pLHIrPSt0LnNsaWNlKG8rMSksdD10LnN1YnN0cmluZygwLG8pKTpyPDAmJihyPXQubGVuZ3RoKSxvPTA7IjAiPT09dC5jaGFyQXQobyk7bysrKTtpZihvPT09KGE9dC5sZW5ndGgpKWk9WzBdLHI9MTtlbHNle2ZvcihhLS07IjAiPT09dC5jaGFyQXQoYSk7KWEtLTtmb3Ioci09byxpPVtdLHM9MDtvPD1hO28rKyxzKyspaVtzXT1OdW1iZXIodC5jaGFyQXQobykpfXJldHVybiByPjIyJiYoaT1pLnNwbGljZSgwLDIxKSxlPXItMSxyPTEpLHtkaWdpdHM6aSxleHBvbmVudDplLGludGVnZXJMZW46cn19KG4pO3MmJihjPWZ1bmN0aW9uKG4pe2lmKDA9PT1uLmRpZ2l0c1swXSlyZXR1cm4gbjtsZXQgdD1uLmRpZ2l0cy5sZW5ndGgtbi5pbnRlZ2VyTGVuO3JldHVybiBuLmV4cG9uZW50P24uZXhwb25lbnQrPTI6KDA9PT10P24uZGlnaXRzLnB1c2goMCwwKToxPT09dCYmbi5kaWdpdHMucHVzaCgwKSxuLmludGVnZXJMZW4rPTIpLG59KGMpKTtsZXQgdT10Lm1pbkludCxkPXQubWluRnJhYyxwPXQubWF4RnJhYztpZihvKXtsZXQgYj1vLm1hdGNoKGpUZSk7aWYobnVsbD09PWIpdGhyb3cgbmV3IEVycm9yKGAke299IGlzIG5vdCBhIHZhbGlkIGRpZ2l0IGluZm9gKTtsZXQgRD1iWzFdLFQ9YlszXSxrPWJbNV07bnVsbCE9RCYmKHU9aTUoRCkpLG51bGwhPVQmJihkPWk1KFQpKSxudWxsIT1rP3A9aTUoayk6bnVsbCE9VCYmZD5wJiYocD1kKX0hZnVuY3Rpb24obix0LGUpe2lmKHQ+ZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBtaW5pbXVtIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgZnJhY3Rpb24gKCR7dH0pIGlzIGhpZ2hlciB0aGFuIHRoZSBtYXhpbXVtICgke2V9KS5gKTtsZXQgaT1uLmRpZ2l0cyxyPWkubGVuZ3RoLW4uaW50ZWdlckxlbixvPU1hdGgubWluKE1hdGgubWF4KHQsciksZSkscz1vK24uaW50ZWdlckxlbixhPWlbc107aWYocz4wKXtpLnNwbGljZShNYXRoLm1heChuLmludGVnZXJMZW4scykpO2ZvcihsZXQgZD1zO2Q8aS5sZW5ndGg7ZCsrKWlbZF09MH1lbHNle3I9TWF0aC5tYXgoMCxyKSxuLmludGVnZXJMZW49MSxpLmxlbmd0aD1NYXRoLm1heCgxLHM9bysxKSxpWzBdPTA7Zm9yKGxldCBkPTE7ZDxzO2QrKylpW2RdPTB9aWYoYT49NSlpZihzLTE8MCl7Zm9yKGxldCBkPTA7ZD5zO2QtLSlpLnVuc2hpZnQoMCksbi5pbnRlZ2VyTGVuKys7aS51bnNoaWZ0KDEpLG4uaW50ZWdlckxlbisrfWVsc2UgaVtzLTFdKys7Zm9yKDtyPE1hdGgubWF4KDAsbyk7cisrKWkucHVzaCgwKTtsZXQgbD0wIT09byxjPXQrbi5pbnRlZ2VyTGVuLHU9aS5yZWR1Y2VSaWdodChmdW5jdGlvbihkLHAsaCxmKXtyZXR1cm4gZltoXT0ocCs9ZCk8MTA/cDpwLTEwLGwmJigwPT09ZltoXSYmaD49Yz9mLnBvcCgpOmw9ITEpLHA+PTEwPzE6MH0sMCk7dSYmKGkudW5zaGlmdCh1KSxuLmludGVnZXJMZW4rKyl9KGMsZCxwKTtsZXQgaD1jLmRpZ2l0cyxmPWMuaW50ZWdlckxlbixtPWMuZXhwb25lbnQseD1bXTtmb3IobD1oLmV2ZXJ5KGI9PiFiKTtmPHU7ZisrKWgudW5zaGlmdCgwKTtmb3IoO2Y8MDtmKyspaC51bnNoaWZ0KDApO2Y+MD94PWguc3BsaWNlKGYsaC5sZW5ndGgpOih4PWgsaD1bMF0pO2xldCBnPVtdO2ZvcihoLmxlbmd0aD49dC5sZ1NpemUmJmcudW5zaGlmdChoLnNwbGljZSgtdC5sZ1NpemUsaC5sZW5ndGgpLmpvaW4oIiIpKTtoLmxlbmd0aD50LmdTaXplOylnLnVuc2hpZnQoaC5zcGxpY2UoLXQuZ1NpemUsaC5sZW5ndGgpLmpvaW4oIiIpKTtoLmxlbmd0aCYmZy51bnNoaWZ0KGguam9pbigiIikpLGE9Zy5qb2luKGVwKGUsaSkpLHgubGVuZ3RoJiYoYSs9ZXAoZSxyKSt4LmpvaW4oIiIpKSxtJiYoYSs9ZXAoZSxJcy5FeHBvbmVudGlhbCkrIisiK20pfWVsc2UgYT1lcChlLElzLkluZmluaXR5KTtyZXR1cm4gYT1uPDAmJiFsP3QubmVnUHJlK2ErdC5uZWdTdWY6dC5wb3NQcmUrYSt0LnBvc1N1ZixhfShuLHIsdCxJcy5Hcm91cCxJcy5EZWNpbWFsLGUpfWZ1bmN0aW9uIGk1KG4pe2xldCB0PXBhcnNlSW50KG4pO2lmKGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnRlZ2VyIGxpdGVyYWwgd2hlbiBwYXJzaW5nICIrbik7cmV0dXJuIHR9ZnVuY3Rpb24gcUQobix0KXt0PWVuY29kZVVSSUNvbXBvbmVudCh0KTtmb3IobGV0IGUgb2Ygbi5zcGxpdCgiOyIpKXtsZXQgaT1lLmluZGV4T2YoIj0iKSxbcixvXT0tMT09aT9bZSwiIl06W2Uuc2xpY2UoMCxpKSxlLnNsaWNlKGkrMSldO2lmKHIudHJpbSgpPT09dClyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KG8pfXJldHVybiBudWxsfXZhciBGbj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2l0ZXJhYmxlRGlmZmVycz1lLHRoaXMuX2tleVZhbHVlRGlmZmVycz1pLHRoaXMuX25nRWw9cix0aGlzLl9yZW5kZXJlcj1vLHRoaXMuX2l0ZXJhYmxlRGlmZmVyPW51bGwsdGhpcy5fa2V5VmFsdWVEaWZmZXI9bnVsbCx0aGlzLl9pbml0aWFsQ2xhc3Nlcz1bXSx0aGlzLl9yYXdDbGFzcz1udWxsfXNldCBrbGFzcyhlKXt0aGlzLl9yZW1vdmVDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9pbml0aWFsQ2xhc3Nlcz0ic3RyaW5nIj09dHlwZW9mIGU/ZS5zcGxpdCgvXHMrLyk6W10sdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5fcmF3Q2xhc3MpfXNldCBuZ0NsYXNzKGUpe3RoaXMuX3JlbW92ZUNsYXNzZXModGhpcy5fcmF3Q2xhc3MpLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5faXRlcmFibGVEaWZmZXI9bnVsbCx0aGlzLl9rZXlWYWx1ZURpZmZlcj1udWxsLHRoaXMuX3Jhd0NsYXNzPSJzdHJpbmciPT10eXBlb2YgZT9lLnNwbGl0KC9ccysvKTplLHRoaXMuX3Jhd0NsYXNzJiYod1QodGhpcy5fcmF3Q2xhc3MpP3RoaXMuX2l0ZXJhYmxlRGlmZmVyPXRoaXMuX2l0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuX3Jhd0NsYXNzKS5jcmVhdGUoKTp0aGlzLl9rZXlWYWx1ZURpZmZlcj10aGlzLl9rZXlWYWx1ZURpZmZlcnMuZmluZCh0aGlzLl9yYXdDbGFzcykuY3JlYXRlKCkpfW5nRG9DaGVjaygpe2lmKHRoaXMuX2l0ZXJhYmxlRGlmZmVyKXtsZXQgZT10aGlzLl9pdGVyYWJsZURpZmZlci5kaWZmKHRoaXMuX3Jhd0NsYXNzKTtlJiZ0aGlzLl9hcHBseUl0ZXJhYmxlQ2hhbmdlcyhlKX1lbHNlIGlmKHRoaXMuX2tleVZhbHVlRGlmZmVyKXtsZXQgZT10aGlzLl9rZXlWYWx1ZURpZmZlci5kaWZmKHRoaXMuX3Jhd0NsYXNzKTtlJiZ0aGlzLl9hcHBseUtleVZhbHVlQ2hhbmdlcyhlKX19X2FwcGx5S2V5VmFsdWVDaGFuZ2VzKGUpe2UuZm9yRWFjaEFkZGVkSXRlbShpPT50aGlzLl90b2dnbGVDbGFzcyhpLmtleSxpLmN1cnJlbnRWYWx1ZSkpLGUuZm9yRWFjaENoYW5nZWRJdGVtKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGkua2V5LGkuY3VycmVudFZhbHVlKSksZS5mb3JFYWNoUmVtb3ZlZEl0ZW0oaT0+e2kucHJldmlvdXNWYWx1ZSYmdGhpcy5fdG9nZ2xlQ2xhc3MoaS5rZXksITEpfSl9X2FwcGx5SXRlcmFibGVDaGFuZ2VzKGUpe2UuZm9yRWFjaEFkZGVkSXRlbShpPT57aWYoInN0cmluZyIhPXR5cGVvZiBpLml0ZW0pdGhyb3cgbmV3IEVycm9yKGBOZ0NsYXNzIGNhbiBvbmx5IHRvZ2dsZSBDU1MgY2xhc3NlcyBleHByZXNzZWQgYXMgc3RyaW5ncywgZ290ICR7VG8oaS5pdGVtKX1gKTt0aGlzLl90b2dnbGVDbGFzcyhpLml0ZW0sITApfSksZS5mb3JFYWNoUmVtb3ZlZEl0ZW0oaT0+dGhpcy5fdG9nZ2xlQ2xhc3MoaS5pdGVtLCExKSl9X2FwcGx5Q2xhc3NlcyhlKXtlJiYoQXJyYXkuaXNBcnJheShlKXx8ZSBpbnN0YW5jZW9mIFNldD9lLmZvckVhY2goaT0+dGhpcy5fdG9nZ2xlQ2xhc3MoaSwhMCkpOk9iamVjdC5rZXlzKGUpLmZvckVhY2goaT0+dGhpcy5fdG9nZ2xlQ2xhc3MoaSwhIWVbaV0pKSl9X3JlbW92ZUNsYXNzZXMoZSl7ZSYmKEFycmF5LmlzQXJyYXkoZSl8fGUgaW5zdGFuY2VvZiBTZXQ/ZS5mb3JFYWNoKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGksITEpKTpPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGksITEpKSl9X3RvZ2dsZUNsYXNzKGUsaSl7KGU9ZS50cmltKCkpJiZlLnNwbGl0KC9ccysvZykuZm9yRWFjaChyPT57aT90aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQscik6dGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oa2MpLE0obkMpLE0oUmUpLE0oRXUpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdDbGFzcyIsIiJdXSxpbnB1dHM6e2tsYXNzOlsiY2xhc3MiLCJrbGFzcyJdLG5nQ2xhc3M6Im5nQ2xhc3MifSxzdGFuZGFsb25lOiEwfSksbn0pKCksZG49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fdmlld0NvbnRhaW5lcj1lLHRoaXMuX3RlbXBsYXRlPWksdGhpcy5fZGlmZmVycz1yLHRoaXMuX25nRm9yT2Y9bnVsbCx0aGlzLl9uZ0Zvck9mRGlydHk9ITAsdGhpcy5fZGlmZmVyPW51bGx9c2V0IG5nRm9yT2YoZSl7dGhpcy5fbmdGb3JPZj1lLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMH1zZXQgbmdGb3JUcmFja0J5KGUpe3RoaXMuX3RyYWNrQnlGbj1lfWdldCBuZ0ZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufXNldCBuZ0ZvclRlbXBsYXRlKGUpe2UmJih0aGlzLl90ZW1wbGF0ZT1lKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtsZXQgZT10aGlzLl9uZ0Zvck9mOyF0aGlzLl9kaWZmZXImJmUmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGUpLmNyZWF0ZSh0aGlzLm5nRm9yVHJhY2tCeSkpfWlmKHRoaXMuX2RpZmZlcil7bGV0IGU9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdGb3JPZik7ZSYmdGhpcy5fYXBwbHlDaGFuZ2VzKGUpfX1fYXBwbHlDaGFuZ2VzKGUpe2xldCBpPXRoaXMuX3ZpZXdDb250YWluZXI7ZS5mb3JFYWNoT3BlcmF0aW9uKChyLG8scyk9PntpZihudWxsPT1yLnByZXZpb3VzSW5kZXgpaS5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGUsbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuJGltcGxpY2l0PXQsdGhpcy5uZ0Zvck9mPWUsdGhpcy5pbmRleD1pLHRoaXMuY291bnQ9cn1nZXQgZmlyc3QoKXtyZXR1cm4gMD09PXRoaXMuaW5kZXh9Z2V0IGxhc3QoKXtyZXR1cm4gdGhpcy5pbmRleD09PXRoaXMuY291bnQtMX1nZXQgZXZlbigpe3JldHVybiB0aGlzLmluZGV4JTI9PTB9Z2V0IG9kZCgpe3JldHVybiF0aGlzLmV2ZW59fShyLml0ZW0sdGhpcy5fbmdGb3JPZiwtMSwtMSksbnVsbD09PXM/dm9pZCAwOnMpO2Vsc2UgaWYobnVsbD09cylpLnJlbW92ZShudWxsPT09bz92b2lkIDA6byk7ZWxzZSBpZihudWxsIT09byl7bGV0IGE9aS5nZXQobyk7aS5tb3ZlKGEscyksWUsoYSxyKX19KTtmb3IobGV0IHI9MCxvPWkubGVuZ3RoO3I8bztyKyspe2xldCBhPWkuZ2V0KHIpLmNvbnRleHQ7YS5pbmRleD1yLGEuY291bnQ9byxhLm5nRm9yT2Y9dGhpcy5fbmdGb3JPZn1lLmZvckVhY2hJZGVudGl0eUNoYW5nZShyPT57WUsoaS5nZXQoci5jdXJyZW50SW5kZXgpLHIpfSl9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoZSxpKXtyZXR1cm4hMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShPaSksTShWaSksTShrYykpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ0ZvciIsIiIsIm5nRm9yT2YiLCIiXV0saW5wdXRzOntuZ0Zvck9mOiJuZ0Zvck9mIixuZ0ZvclRyYWNrQnk6Im5nRm9yVHJhY2tCeSIsbmdGb3JUZW1wbGF0ZToibmdGb3JUZW1wbGF0ZSJ9LHN0YW5kYWxvbmU6ITB9KSxufSkoKTtmdW5jdGlvbiBZSyhuLHQpe24uY29udGV4dC4kaW1wbGljaXQ9dC5pdGVtfXZhciBCZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fdmlld0NvbnRhaW5lcj1lLHRoaXMuX2NvbnRleHQ9bmV3IHM1LHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1udWxsLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWY9aX1zZXQgbmdJZihlKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD10aGlzLl9jb250ZXh0Lm5nSWY9ZSx0aGlzLl91cGRhdGVWaWV3KCl9c2V0IG5nSWZUaGVuKGUpe1hLKCJuZ0lmVGhlbiIsZSksdGhpcy5fdGhlblRlbXBsYXRlUmVmPWUsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9c2V0IG5nSWZFbHNlKGUpe1hLKCJuZ0lmRWxzZSIsZSksdGhpcy5fZWxzZVRlbXBsYXRlUmVmPWUsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9X3VwZGF0ZVZpZXcoKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD90aGlzLl90aGVuVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZiYmKHRoaXMuX3RoZW5WaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RoZW5UZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpOnRoaXMuX2Vsc2VWaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmJiYodGhpcy5fZWxzZVZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fZWxzZVRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSl9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoZSxpKXtyZXR1cm4hMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShPaSksTShWaSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ0lmIiwiIl1dLGlucHV0czp7bmdJZjoibmdJZiIsbmdJZlRoZW46Im5nSWZUaGVuIixuZ0lmRWxzZToibmdJZkVsc2UifSxzdGFuZGFsb25lOiEwfSksbn0pKCksczU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLiRpbXBsaWNpdD1udWxsLHRoaXMubmdJZj1udWxsfX07ZnVuY3Rpb24gWEsobix0KXtpZih0JiYhdC5jcmVhdGVFbWJlZGRlZFZpZXcpdGhyb3cgbmV3IEVycm9yKGAke259IG11c3QgYmUgYSBUZW1wbGF0ZVJlZiwgYnV0IHJlY2VpdmVkICcke1RvKHQpfScuYCl9dmFyIFdEPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10LHRoaXMuX3RlbXBsYXRlUmVmPWUsdGhpcy5fY3JlYXRlZD0hMX1jcmVhdGUoKXt0aGlzLl9jcmVhdGVkPSEwLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmKX1kZXN0cm95KCl7dGhpcy5fY3JlYXRlZD0hMSx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCl9ZW5mb3JjZVN0YXRlKHQpe3QmJiF0aGlzLl9jcmVhdGVkP3RoaXMuY3JlYXRlKCk6IXQmJnRoaXMuX2NyZWF0ZWQmJnRoaXMuZGVzdHJveSgpfX0sQ3I9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRVc2VkPSExLHRoaXMuX2Nhc2VDb3VudD0wLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITF9c2V0IG5nU3dpdGNoKGUpe3RoaXMuX25nU3dpdGNoPWUsMD09PXRoaXMuX2Nhc2VDb3VudCYmdGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCEwKX1fYWRkQ2FzZSgpe3JldHVybiB0aGlzLl9jYXNlQ291bnQrK31fYWRkRGVmYXVsdChlKXt0aGlzLl9kZWZhdWx0Vmlld3N8fCh0aGlzLl9kZWZhdWx0Vmlld3M9W10pLHRoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKGUpfV9tYXRjaENhc2UoZSl7bGV0IGk9ZT09dGhpcy5fbmdTd2l0Y2g7cmV0dXJuIHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9dGhpcy5fbGFzdENhc2VzTWF0Y2hlZHx8aSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXgrKyx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9PT10aGlzLl9jYXNlQ291bnQmJih0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoIXRoaXMuX2xhc3RDYXNlc01hdGNoZWQpLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITEpLGl9X3VwZGF0ZURlZmF1bHRDYXNlcyhlKXtpZih0aGlzLl9kZWZhdWx0Vmlld3MmJmUhPT10aGlzLl9kZWZhdWx0VXNlZCl7dGhpcy5fZGVmYXVsdFVzZWQ9ZTtmb3IobGV0IGk9MDtpPHRoaXMuX2RlZmF1bHRWaWV3cy5sZW5ndGg7aSsrKXRoaXMuX2RlZmF1bHRWaWV3c1tpXS5lbmZvcmNlU3RhdGUoZSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2giLCIiXV0saW5wdXRzOntuZ1N3aXRjaDoibmdTd2l0Y2gifSxzdGFuZGFsb25lOiEwfSksbn0pKCksVXI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5uZ1N3aXRjaD1yLHIuX2FkZENhc2UoKSx0aGlzLl92aWV3PW5ldyBXRChlLGkpfW5nRG9DaGVjaygpe3RoaXMuX3ZpZXcuZW5mb3JjZVN0YXRlKHRoaXMubmdTd2l0Y2guX21hdGNoQ2FzZSh0aGlzLm5nU3dpdGNoQ2FzZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKE9pKSxNKFZpKSxNKENyLDkpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hDYXNlIiwiIl1dLGlucHV0czp7bmdTd2l0Y2hDYXNlOiJuZ1N3aXRjaENhc2UifSxzdGFuZGFsb25lOiEwfSksbn0pKCksY2g9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7ci5fYWRkRGVmYXVsdChuZXcgV0QoZSxpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oT2kpLE0oVmkpLE0oQ3IsOSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ1N3aXRjaERlZmF1bHQiLCIiXV0sc3RhbmRhbG9uZTohMH0pLG59KSgpLHp1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX25nRWw9ZSx0aGlzLl9kaWZmZXJzPWksdGhpcy5fcmVuZGVyZXI9cix0aGlzLl9uZ1N0eWxlPW51bGwsdGhpcy5fZGlmZmVyPW51bGx9c2V0IG5nU3R5bGUoZSl7dGhpcy5fbmdTdHlsZT1lLCF0aGlzLl9kaWZmZXImJmUmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGUpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXIpe2xldCBlPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nU3R5bGUpO2UmJnRoaXMuX2FwcGx5Q2hhbmdlcyhlKX19X3NldFN0eWxlKGUsaSl7bGV0W3Isb109ZS5zcGxpdCgiLiIpLHM9LTE9PT1yLmluZGV4T2YoIi0iKT92b2lkIDA6QmwuRGFzaENhc2U7bnVsbCE9aT90aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQscixvP2Ake2l9JHtvfWA6aSxzKTp0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQscixzKX1fYXBwbHlDaGFuZ2VzKGUpe2UuZm9yRWFjaFJlbW92ZWRJdGVtKGk9PnRoaXMuX3NldFN0eWxlKGkua2V5LG51bGwpKSxlLmZvckVhY2hBZGRlZEl0ZW0oaT0+dGhpcy5fc2V0U3R5bGUoaS5rZXksaS5jdXJyZW50VmFsdWUpKSxlLmZvckVhY2hDaGFuZ2VkSXRlbShpPT50aGlzLl9zZXRTdHlsZShpLmtleSxpLmN1cnJlbnRWYWx1ZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKG5DKSxNKEV1KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3R5bGUiLCIiXV0saW5wdXRzOntuZ1N0eWxlOiJuZ1N0eWxlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLG9zPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1lLHRoaXMuX3ZpZXdSZWY9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0PW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0PW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I9bnVsbH1uZ09uQ2hhbmdlcyhlKXtpZihlLm5nVGVtcGxhdGVPdXRsZXR8fGUubmdUZW1wbGF0ZU91dGxldEluamVjdG9yKXtsZXQgaT10aGlzLl92aWV3Q29udGFpbmVyUmVmO2lmKHRoaXMuX3ZpZXdSZWYmJmkucmVtb3ZlKGkuaW5kZXhPZih0aGlzLl92aWV3UmVmKSksdGhpcy5uZ1RlbXBsYXRlT3V0bGV0KXtsZXR7bmdUZW1wbGF0ZU91dGxldDpyLG5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Om8sbmdUZW1wbGF0ZU91dGxldEluamVjdG9yOnN9PXRoaXM7dGhpcy5fdmlld1JlZj1pLmNyZWF0ZUVtYmVkZGVkVmlldyhyLG8scz97aW5qZWN0b3I6c306dm9pZCAwKX1lbHNlIHRoaXMuX3ZpZXdSZWY9bnVsbH1lbHNlIHRoaXMuX3ZpZXdSZWYmJmUubmdUZW1wbGF0ZU91dGxldENvbnRleHQmJnRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQmJih0aGlzLl92aWV3UmVmLmNvbnRleHQ9dGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oT2kpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdUZW1wbGF0ZU91dGxldCIsIiJdXSxpbnB1dHM6e25nVGVtcGxhdGVPdXRsZXRDb250ZXh0OiJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbmdUZW1wbGF0ZU91dGxldDoibmdUZW1wbGF0ZU91dGxldCIsbmdUZW1wbGF0ZU91dGxldEluamVjdG9yOiJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltGdF19KSxufSkoKTtmdW5jdGlvbiBZRChuLHQpe3JldHVybiBuZXcgQXQoMjEwMCwhMSl9dmFyIEpUZT1uZXcgY2xhc3N7Y3JlYXRlU3Vic2NyaXB0aW9uKHQsZSl7cmV0dXJuIHQudGhlbihlLGk9Pnt0aHJvdyBpfSl9ZGlzcG9zZSh0KXt9fSwkVGU9bmV3IGNsYXNze2NyZWF0ZVN1YnNjcmlwdGlvbih0LGUpe3JldHVybiB0LnN1YnNjcmliZSh7bmV4dDplLGVycm9yOmk9Pnt0aHJvdyBpfX0pfWRpc3Bvc2UodCl7dC51bnN1YnNjcmliZSgpfX0sR2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsLHRoaXMuX3N0cmF0ZWd5PW51bGwsdGhpcy5fcmVmPWV9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb24mJnRoaXMuX2Rpc3Bvc2UoKSx0aGlzLl9yZWY9bnVsbH10cmFuc2Zvcm0oZSl7cmV0dXJuIHRoaXMuX29iaj9lIT09dGhpcy5fb2JqPyh0aGlzLl9kaXNwb3NlKCksdGhpcy50cmFuc2Zvcm0oZSkpOnRoaXMuX2xhdGVzdFZhbHVlOihlJiZ0aGlzLl9zdWJzY3JpYmUoZSksdGhpcy5fbGF0ZXN0VmFsdWUpfV9zdWJzY3JpYmUoZSl7dGhpcy5fb2JqPWUsdGhpcy5fc3RyYXRlZ3k9dGhpcy5fc2VsZWN0U3RyYXRlZ3koZSksdGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuX3N0cmF0ZWd5LmNyZWF0ZVN1YnNjcmlwdGlvbihlLGk9PnRoaXMuX3VwZGF0ZUxhdGVzdFZhbHVlKGUsaSkpfV9zZWxlY3RTdHJhdGVneShlKXtpZihuXyhlKSlyZXR1cm4gSlRlO2lmKFgzKGUpKXJldHVybiAkVGU7dGhyb3cgWUQoKX1fZGlzcG9zZSgpe3RoaXMuX3N0cmF0ZWd5LmRpc3Bvc2UodGhpcy5fc3Vic2NyaXB0aW9uKSx0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsfV91cGRhdGVMYXRlc3RWYWx1ZShlLGkpe2U9PT10aGlzLl9vYmomJih0aGlzLl9sYXRlc3RWYWx1ZT1pLHRoaXMuX3JlZi5tYXJrRm9yQ2hlY2soKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0obm4sMTYpKX0sbi5cdTAyNzVwaXBlPUIwKHtuYW1lOiJhc3luYyIsdHlwZTpuLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pLG59KSgpLGVEZT1uZXcgcGUoIkRBVEVfUElQRV9ERUZBVUxUX1RJTUVaT05FIiksVV89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMubG9jYWxlPWUsdGhpcy5kZWZhdWx0VGltZXpvbmU9aX10cmFuc2Zvcm0oZSxpPSJtZWRpdW1EYXRlIixyLG8pe2lmKG51bGw9PWV8fCIiPT09ZXx8ZSE9ZSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIFJUZShlLGksb3x8dGhpcy5sb2NhbGUscj8/dGhpcy5kZWZhdWx0VGltZXpvbmU/P3ZvaWQgMCl9Y2F0Y2gocyl7dGhyb3cgWUQoKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oV2QsMTYpLE0oZURlLDI0KSl9LG4uXHUwMjc1cGlwZT1CMCh7bmFtZToiZGF0ZSIsdHlwZTpuLHB1cmU6ITAsc3RhbmRhbG9uZTohMH0pLG59KSgpLFFsPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fbG9jYWxlPWV9dHJhbnNmb3JtKGUsaSxyKXtpZighZnVuY3Rpb24obil7cmV0dXJuIShudWxsPT1ufHwiIj09PW58fG4hPW4pfShlKSlyZXR1cm4gbnVsbDtyPXJ8fHRoaXMuX2xvY2FsZTt0cnl7bGV0IG89ZnVuY3Rpb24obil7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhaXNOYU4oTnVtYmVyKG4pLXBhcnNlRmxvYXQobikpKXJldHVybiBOdW1iZXIobik7aWYoIm51bWJlciIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcihgJHtufSBpcyBub3QgYSBudW1iZXJgKTtyZXR1cm4gbn0oZSk7cmV0dXJuIHU1KG8scixpKX1jYXRjaChvKXt0aHJvdyBZRCgpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShXZCwxNikpfSxuLlx1MDI3NXBpcGU9QjAoe25hbWU6Im51bWJlciIsdHlwZTpuLHB1cmU6ITAsc3RhbmRhbG9uZTohMH0pLG59KSgpLG5aPSgoKT0+e2NsYXNzIG57dHJhbnNmb3JtKGUsaSxyKXtpZihudWxsPT1lKXJldHVybiBudWxsO2lmKCF0aGlzLnN1cHBvcnRzKGUpKXRocm93IFlEKCk7cmV0dXJuIGUuc2xpY2UoaSxyKX1zdXBwb3J0cyhlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV8fEFycmF5LmlzQXJyYXkoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXBpcGU9QjAoe25hbWU6InNsaWNlIix0eXBlOm4scHVyZTohMSxzdGFuZGFsb25lOiEwfSksbn0pKCksTWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLGQ1PSJicm93c2VyIjtmdW5jdGlvbiBYRChuKXtyZXR1cm4gbj09PWQ1fW5ldyBJYygiMTQuMi4xMSIpO3ZhciBFbT1jbGFzc3t9O2Z1bmN0aW9uIHNEZShuKXtyZXR1cm4gbi5zdGFydHNXaXRoKCIvIik/bi5zbGljZSgxKTpufW5ldyBwZSgiUFJFQ09OTkVDVF9DSEVDS19CTE9DS0xJU1QiKTt2YXIgYURlPW49Pm4uc3JjLGxEZT1uZXcgcGUoIkltYWdlTG9hZGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+YURlfSk7ZnVuY3Rpb24gUUQobix0KXtyZXR1cm4gZnVuY3Rpb24oaSxyPXtlbnN1cmVQcmVjb25uZWN0OiEwfSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciIT10eXBlb2Ygbnx8IiI9PT1uLnRyaW0oKSlyZXR1cm4hMTt0cnl7cmV0dXJuIG5ldyBVUkwobiksITB9Y2F0Y2h7cmV0dXJuITF9fShpKXx8ZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgQXQoMjk1OSwhMSl9KCksaT1mdW5jdGlvbihuKXtyZXR1cm4gbi5lbmRzV2l0aCgiLyIpP24uc2xpY2UoMCwtMSk6bn0oaSksW3twcm92aWRlOmxEZSx1c2VWYWx1ZTphPT4oZnVuY3Rpb24obil7cmV0dXJuL15odHRwcz86XC9cLy8udGVzdChuKX0oYS5zcmMpJiZmdW5jdGlvbihuLHQpe3Rocm93IG5ldyBBdCgyOTU5LCExKX0oKSxuKGksey4uLmEsc3JjOnNEZShhLnNyYyl9KSl9XX19UUQoZnVuY3Rpb24obix0KXtsZXQgZT0iZm9ybWF0PWF1dG8iO3JldHVybiB0LndpZHRoJiYoZSs9YCx3aWR0aD0ke3Qud2lkdGh9YCksYCR7bn0vY2RuLWNnaS9pbWFnZS8ke2V9LyR7dC5zcmN9YH0pLFFEKGZ1bmN0aW9uKG4sdCl7bGV0IGU9ImZfYXV0byxxX2F1dG8iO3JldHVybiB0LndpZHRoJiYoZSs9YCx3XyR7dC53aWR0aH1gKSxgJHtufS9pbWFnZS91cGxvYWQvJHtlfS8ke3Quc3JjfWB9KSxRRChmdW5jdGlvbihuLHQpe2xldCBlPSJ0cjpxLWF1dG8iO3JldHVybiB0LndpZHRoJiYoZSs9YCx3LSR7dC53aWR0aH1gKSxgJHtufS8ke2V9LyR7dC5zcmN9YH0pLFFEKGZ1bmN0aW9uKG4sdCl7bGV0IGU9bmV3IFVSTChgJHtufS8ke3Quc3JjfWApO3JldHVybiBlLnNlYXJjaFBhcmFtcy5zZXQoImF1dG8iLCJmb3JtYXQiKSx0LndpZHRoJiZlLnNlYXJjaFBhcmFtcy5zZXQoInciLHQud2lkdGgudG9TdHJpbmcoKSksZS5ocmVmfSk7dmFyIEtELGg1PWNsYXNzIGV4dGVuZHMgekR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9ITB9fSxhTT1jbGFzcyBleHRlbmRzIGg1e3N0YXRpYyBtYWtlQ3VycmVudCgpeyFmdW5jdGlvbihuKXtyNXx8KHI1PW4pfShuZXcgYU0pfW9uQW5kQ2FuY2VsKHQsZSxpKXtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGUsaSwhMSksKCk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxpLCExKX19ZGlzcGF0Y2hFdmVudCh0LGUpe3QuZGlzcGF0Y2hFdmVudChlKX1yZW1vdmUodCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybihlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlSHRtbERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9Z2V0RGVmYXVsdERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50fWlzRWxlbWVudE5vZGUodCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX1pc1NoYWRvd1Jvb3QodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50fWdldEdsb2JhbEV2ZW50VGFyZ2V0KHQsZSl7cmV0dXJuIndpbmRvdyI9PT1lP3dpbmRvdzoiZG9jdW1lbnQiPT09ZT90OiJib2R5Ij09PWU/dC5ib2R5Om51bGx9Z2V0QmFzZUhyZWYodCl7bGV0IGU9KHJNPXJNfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIikpP3JNLmdldEF0dHJpYnV0ZSgiaHJlZiIpOm51bGw7cmV0dXJuIG51bGw9PWU/bnVsbDpmdW5jdGlvbihuKXsoS0Q9S0R8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSkuc2V0QXR0cmlidXRlKCJocmVmIixuKTtsZXQgdD1LRC5wYXRobmFtZTtyZXR1cm4iLyI9PT10LmNoYXJBdCgwKT90OmAvJHt0fWB9KGUpfXJlc2V0QmFzZUVsZW1lbnQoKXtyTT1udWxsfWdldFVzZXJBZ2VudCgpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudH1nZXRDb29raWUodCl7cmV0dXJuIHFEKGRvY3VtZW50LmNvb2tpZSx0KX19LHJNPW51bGwsY1o9bmV3IHBlKCJUUkFOU0lUSU9OX0lEIikseURlPVt7cHJvdmlkZTokMyx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4oKT0+e2UuZ2V0KE9UKS5kb25lUHJvbWlzZS50aGVuKCgpPT57bGV0IGk9WWwoKSxyPXQucXVlcnlTZWxlY3RvckFsbChgc3R5bGVbbmctdHJhbnNpdGlvbj0iJHtufSJdYCk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspaS5yZW1vdmUocltvXSl9KX19LGRlcHM6W2NaLEh0LFhuXSxtdWx0aTohMH1dLGJEZT0oKCk9PntjbGFzcyBue2J1aWxkKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWkQ9bmV3IHBlKCJFdmVudE1hbmFnZXJQbHVnaW5zIiksSkQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3pvbmU9aSx0aGlzLl9ldmVudE5hbWVUb1BsdWdpbj1uZXcgTWFwLGUuZm9yRWFjaChyPT5yLm1hbmFnZXI9dGhpcyksdGhpcy5fcGx1Z2lucz1lLnNsaWNlKCkucmV2ZXJzZSgpfWFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGkpLmFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpfWFkZEdsb2JhbEV2ZW50TGlzdGVuZXIoZSxpLHIpe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGkpLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXIoZSxpLHIpfWdldFpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1fZmluZFBsdWdpbkZvcihlKXtsZXQgaT10aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5nZXQoZSk7aWYoaSlyZXR1cm4gaTtsZXQgcj10aGlzLl9wbHVnaW5zO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXQgcz1yW29dO2lmKHMuc3VwcG9ydHMoZSkpcmV0dXJuIHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLnNldChlLHMpLHN9dGhyb3cgbmV3IEVycm9yKGBObyBldmVudCBtYW5hZ2VyIHBsdWdpbiBmb3VuZCBmb3IgZXZlbnQgJHtlfWApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKFpEKSxqKF90KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksJEQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZG9jPXR9YWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsaSl7bGV0IHI9WWwoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsdCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBldmVudCB0YXJnZXQgJHtyfSBmb3IgZXZlbnQgJHtlfWApO3JldHVybiB0aGlzLmFkZEV2ZW50TGlzdGVuZXIocixlLGkpfX0sdVo9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0eWxlc1NldD1uZXcgU2V0fWFkZFN0eWxlcyhlKXtsZXQgaT1uZXcgU2V0O2UuZm9yRWFjaChyPT57dGhpcy5fc3R5bGVzU2V0LmhhcyhyKXx8KHRoaXMuX3N0eWxlc1NldC5hZGQociksaS5hZGQocikpfSksdGhpcy5vblN0eWxlc0FkZGVkKGkpfW9uU3R5bGVzQWRkZWQoZSl7fWdldEFsbFN0eWxlcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3N0eWxlc1NldCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLG9NPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB1Wntjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuX2RvYz1lLHRoaXMuX2hvc3ROb2Rlcz1uZXcgTWFwLHRoaXMuX2hvc3ROb2Rlcy5zZXQoZS5oZWFkLFtdKX1fYWRkU3R5bGVzVG9Ib3N0KGUsaSxyKXtlLmZvckVhY2gobz0+e2xldCBzPXRoaXMuX2RvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3MudGV4dENvbnRlbnQ9byxyLnB1c2goaS5hcHBlbmRDaGlsZChzKSl9KX1hZGRIb3N0KGUpe2xldCBpPVtdO3RoaXMuX2FkZFN0eWxlc1RvSG9zdCh0aGlzLl9zdHlsZXNTZXQsZSxpKSx0aGlzLl9ob3N0Tm9kZXMuc2V0KGUsaSl9cmVtb3ZlSG9zdChlKXtsZXQgaT10aGlzLl9ob3N0Tm9kZXMuZ2V0KGUpO2kmJmkuZm9yRWFjaChpWiksdGhpcy5faG9zdE5vZGVzLmRlbGV0ZShlKX1vblN0eWxlc0FkZGVkKGUpe3RoaXMuX2hvc3ROb2Rlcy5mb3JFYWNoKChpLHIpPT57dGhpcy5fYWRkU3R5bGVzVG9Ib3N0KGUscixpKX0pfW5nT25EZXN0cm95KCl7dGhpcy5faG9zdE5vZGVzLmZvckVhY2goZT0+ZS5mb3JFYWNoKGlaKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiBpWihuKXtZbCgpLnJlbW92ZShuKX12YXIgcDU9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsbWF0aDoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoTUwvIn0sXzU9LyVDT01QJS9nO2Z1bmN0aW9uIGVBKG4sdCxlKXtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyl7bGV0IHI9dFtpXTtBcnJheS5pc0FycmF5KHIpP2VBKG4scixlKToocj1yLnJlcGxhY2UoXzUsbiksZS5wdXNoKHIpKX1yZXR1cm4gZX1mdW5jdGlvbiBvWihuKXtyZXR1cm4gdD0+e2lmKCJfX25nVW53cmFwX18iPT09dClyZXR1cm4gbjshMT09PW4odCkmJih0LnByZXZlbnREZWZhdWx0KCksdC5yZXR1cm5WYWx1ZT0hMSl9fXZhciBzTT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmV2ZW50TWFuYWdlcj1lLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1pLHRoaXMuYXBwSWQ9cix0aGlzLnJlbmRlcmVyQnlDb21wSWQ9bmV3IE1hcCx0aGlzLmRlZmF1bHRSZW5kZXJlcj1uZXcgbE0oZSl9Y3JlYXRlUmVuZGVyZXIoZSxpKXtpZighZXx8IWkpcmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyO3N3aXRjaChpLmVuY2Fwc3VsYXRpb24pe2Nhc2UgSmEuRW11bGF0ZWQ6e2xldCByPXRoaXMucmVuZGVyZXJCeUNvbXBJZC5nZXQoaS5pZCk7cmV0dXJuIHJ8fChyPW5ldyBtNSh0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnNoYXJlZFN0eWxlc0hvc3QsaSx0aGlzLmFwcElkKSx0aGlzLnJlbmRlcmVyQnlDb21wSWQuc2V0KGkuaWQscikpLHIuYXBwbHlUb0hvc3QoZSkscn1jYXNlIDE6Y2FzZSBKYS5TaGFkb3dEb206cmV0dXJuIG5ldyBnNSh0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnNoYXJlZFN0eWxlc0hvc3QsZSxpKTtkZWZhdWx0OmlmKCF0aGlzLnJlbmRlcmVyQnlDb21wSWQuaGFzKGkuaWQpKXtsZXQgcj1lQShpLmlkLGkuc3R5bGVzLFtdKTt0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkU3R5bGVzKHIpLHRoaXMucmVuZGVyZXJCeUNvbXBJZC5zZXQoaS5pZCx0aGlzLmRlZmF1bHRSZW5kZXJlcil9cmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyfX1iZWdpbigpe31lbmQoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSkQpLGoob00pLGooJGYpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxsTT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmV2ZW50TWFuYWdlcj10LHRoaXMuZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZGVzdHJveU5vZGU9bnVsbH1kZXN0cm95KCl7fWNyZWF0ZUVsZW1lbnQodCxlKXtyZXR1cm4gZT9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocDVbZV18fGUsdCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KX1jcmVhdGVDb21tZW50KHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVDb21tZW50KHQpfWNyZWF0ZVRleHQodCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpfWFwcGVuZENoaWxkKHQsZSl7KGFaKHQpP3QuY29udGVudDp0KS5hcHBlbmRDaGlsZChlKX1pbnNlcnRCZWZvcmUodCxlLGkpe3QmJihhWih0KT90LmNvbnRlbnQ6dCkuaW5zZXJ0QmVmb3JlKGUsaSl9cmVtb3ZlQ2hpbGQodCxlKXt0JiZ0LnJlbW92ZUNoaWxkKGUpfXNlbGVjdFJvb3RFbGVtZW50KHQsZSl7bGV0IGk9InN0cmluZyI9PXR5cGVvZiB0P2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk6dDtpZighaSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZWxlY3RvciAiJHt0fSIgZGlkIG5vdCBtYXRjaCBhbnkgZWxlbWVudHNgKTtyZXR1cm4gZXx8KGkudGV4dENvbnRlbnQ9IiIpLGl9cGFyZW50Tm9kZSh0KXtyZXR1cm4gdC5wYXJlbnROb2RlfW5leHRTaWJsaW5nKHQpe3JldHVybiB0Lm5leHRTaWJsaW5nfXNldEF0dHJpYnV0ZSh0LGUsaSxyKXtpZihyKXtlPXIrIjoiK2U7bGV0IG89cDVbcl07bz90LnNldEF0dHJpYnV0ZU5TKG8sZSxpKTp0LnNldEF0dHJpYnV0ZShlLGkpfWVsc2UgdC5zZXRBdHRyaWJ1dGUoZSxpKX1yZW1vdmVBdHRyaWJ1dGUodCxlLGkpe2lmKGkpe2xldCByPXA1W2ldO3I/dC5yZW1vdmVBdHRyaWJ1dGVOUyhyLGUpOnQucmVtb3ZlQXR0cmlidXRlKGAke2l9OiR7ZX1gKX1lbHNlIHQucmVtb3ZlQXR0cmlidXRlKGUpfWFkZENsYXNzKHQsZSl7dC5jbGFzc0xpc3QuYWRkKGUpfXJlbW92ZUNsYXNzKHQsZSl7dC5jbGFzc0xpc3QucmVtb3ZlKGUpfXNldFN0eWxlKHQsZSxpLHIpe3ImKEJsLkRhc2hDYXNlfEJsLkltcG9ydGFudCk/dC5zdHlsZS5zZXRQcm9wZXJ0eShlLGksciZCbC5JbXBvcnRhbnQ/ImltcG9ydGFudCI6IiIpOnQuc3R5bGVbZV09aX1yZW1vdmVTdHlsZSh0LGUsaSl7aSZCbC5EYXNoQ2FzZT90LnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnQuc3R5bGVbZV09IiJ9c2V0UHJvcGVydHkodCxlLGkpe3RbZV09aX1zZXRWYWx1ZSh0LGUpe3Qubm9kZVZhbHVlPWV9bGlzdGVuKHQsZSxpKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5ldmVudE1hbmFnZXIuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsb1ooaSkpOnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCxlLG9aKGkpKX19O2Z1bmN0aW9uIGFaKG4pe3JldHVybiJURU1QTEFURSI9PT1uLnRhZ05hbWUmJnZvaWQgMCE9PW4uY29udGVudH0iQCIuY2hhckNvZGVBdCgwKTt2YXIgbTU9Y2xhc3MgZXh0ZW5kcyBsTXtjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0KSx0aGlzLmNvbXBvbmVudD1pO2xldCBvPWVBKHIrIi0iK2kuaWQsaS5zdHlsZXMsW10pO2UuYWRkU3R5bGVzKG8pLHRoaXMuY29udGVudEF0dHI9ZnVuY3Rpb24obil7cmV0dXJuIl9uZ2NvbnRlbnQtJUNPTVAlIi5yZXBsYWNlKF81LG4pfShyKyItIitpLmlkKSx0aGlzLmhvc3RBdHRyPWZ1bmN0aW9uKG4pe3JldHVybiJfbmdob3N0LSVDT01QJSIucmVwbGFjZShfNSxuKX0ocisiLSIraS5pZCl9YXBwbHlUb0hvc3QodCl7c3VwZXIuc2V0QXR0cmlidXRlKHQsdGhpcy5ob3N0QXR0ciwiIil9Y3JlYXRlRWxlbWVudCh0LGUpe2xldCBpPXN1cGVyLmNyZWF0ZUVsZW1lbnQodCxlKTtyZXR1cm4gc3VwZXIuc2V0QXR0cmlidXRlKGksdGhpcy5jb250ZW50QXR0ciwiIiksaX19LGc1PWNsYXNzIGV4dGVuZHMgbE17Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWUsdGhpcy5ob3N0RWw9aSx0aGlzLnNoYWRvd1Jvb3Q9aS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZEhvc3QodGhpcy5zaGFkb3dSb290KTtsZXQgbz1lQShyLmlkLHIuc3R5bGVzLFtdKTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKyl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTthLnRleHRDb250ZW50PW9bc10sdGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKGEpfX1ub2RlT3JTaGFkb3dSb290KHQpe3JldHVybiB0PT09dGhpcy5ob3N0RWw/dGhpcy5zaGFkb3dSb290OnR9ZGVzdHJveSgpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9YXBwZW5kQ2hpbGQodCxlKXtyZXR1cm4gc3VwZXIuYXBwZW5kQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUpfWluc2VydEJlZm9yZSh0LGUsaSl7cmV0dXJuIHN1cGVyLmluc2VydEJlZm9yZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3QodCksZSxpKX1yZW1vdmVDaGlsZCh0LGUpe3JldHVybiBzdXBlci5yZW1vdmVDaGlsZCh0aGlzLm5vZGVPclNoYWRvd1Jvb3QodCksZSl9cGFyZW50Tm9kZSh0KXtyZXR1cm4gdGhpcy5ub2RlT3JTaGFkb3dSb290KHN1cGVyLnBhcmVudE5vZGUodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpKSl9fSxFRGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzICREe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfXN1cHBvcnRzKGUpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoaSxyLCExKSwoKT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSxyKX1yZW1vdmVFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gZS5yZW1vdmVFdmVudExpc3RlbmVyKGkscil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxsWj1bImFsdCIsImNvbnRyb2wiLCJtZXRhIiwic2hpZnQiXSxURGU9eyJcYiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIsTWVudToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LEREZT17YWx0Om49Pm4uYWx0S2V5LGNvbnRyb2w6bj0+bi5jdHJsS2V5LG1ldGE6bj0+bi5tZXRhS2V5LHNoaWZ0Om49Pm4uc2hpZnRLZXl9LEFEZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgJER7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSl9c3VwcG9ydHMoZSl7cmV0dXJuIG51bGwhPW4ucGFyc2VFdmVudE5hbWUoZSl9YWRkRXZlbnRMaXN0ZW5lcihlLGkscil7bGV0IG89bi5wYXJzZUV2ZW50TmFtZShpKSxzPW4uZXZlbnRDYWxsYmFjayhvLmZ1bGxLZXkscix0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+WWwoKS5vbkFuZENhbmNlbChlLG8uZG9tRXZlbnROYW1lLHMpKX1zdGF0aWMgcGFyc2VFdmVudE5hbWUoZSl7bGV0IGk9ZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCIuIikscj1pLnNoaWZ0KCk7aWYoMD09PWkubGVuZ3RofHwia2V5ZG93biIhPT1yJiYia2V5dXAiIT09cilyZXR1cm4gbnVsbDtsZXQgbz1uLl9ub3JtYWxpemVLZXkoaS5wb3AoKSkscz0iIixhPWkuaW5kZXhPZigiY29kZSIpO2lmKGE+LTEmJihpLnNwbGljZShhLDEpLHM9ImNvZGUuIiksbFouZm9yRWFjaChjPT57bGV0IHU9aS5pbmRleE9mKGMpO3U+LTEmJihpLnNwbGljZSh1LDEpLHMrPWMrIi4iKX0pLHMrPW8sMCE9aS5sZW5ndGh8fDA9PT1vLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbD17fTtyZXR1cm4gbC5kb21FdmVudE5hbWU9cixsLmZ1bGxLZXk9cyxsfXN0YXRpYyBtYXRjaEV2ZW50RnVsbEtleUNvZGUoZSxpKXtsZXQgcj1URGVbZS5rZXldfHxlLmtleSxvPSIiO3JldHVybiBpLmluZGV4T2YoImNvZGUuIik+LTEmJihyPWUuY29kZSxvPSJjb2RlLiIpLCEobnVsbD09cnx8IXIpJiYocj1yLnRvTG93ZXJDYXNlKCksIiAiPT09cj9yPSJzcGFjZSI6Ii4iPT09ciYmKHI9ImRvdCIpLGxaLmZvckVhY2gocz0+e3MhPT1yJiYoMCxERGVbc10pKGUpJiYobys9cysiLiIpfSksbys9cixvPT09aSl9c3RhdGljIGV2ZW50Q2FsbGJhY2soZSxpLHIpe3JldHVybiBvPT57bi5tYXRjaEV2ZW50RnVsbEtleUNvZGUobyxlKSYmci5ydW5HdWFyZGVkKCgpPT5pKG8pKX19c3RhdGljIF9ub3JtYWxpemVLZXkoZSl7cmV0dXJuImVzYyI9PT1lPyJlc2NhcGUiOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxPRGU9W3twcm92aWRlOkdkLHVzZVZhbHVlOmQ1fSx7cHJvdmlkZTplQix1c2VWYWx1ZTpmdW5jdGlvbigpe2FNLm1ha2VDdXJyZW50KCl9LG11bHRpOiEwfSx7cHJvdmlkZTpIdCx1c2VGYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3BMPW59KGRvY3VtZW50KSxkb2N1bWVudH0sZGVwczpbXX1dLHk1PXJCKGNYLCJicm93c2VyIixPRGUpLHBaPW5ldyBwZSgiIiksa0RlPVt7cHJvdmlkZTplQyx1c2VDbGFzczpjbGFzc3thZGRUb1dpbmRvdyh0KXt0by5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGkscj0hMCk9PntsZXQgbz10LmZpbmRUZXN0YWJpbGl0eUluVHJlZShpLHIpO2lmKG51bGw9PW8pdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB0ZXN0YWJpbGl0eSBmb3IgZWxlbWVudC4iKTtyZXR1cm4gb30sdG8uZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXM9KCk9PnQuZ2V0QWxsVGVzdGFiaWxpdGllcygpLHRvLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9KCk9PnQuZ2V0QWxsUm9vdEVsZW1lbnRzKCksdG8uZnJhbWV3b3JrU3RhYmlsaXplcnN8fCh0by5mcmFtZXdvcmtTdGFiaWxpemVycz1bXSksdG8uZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChpPT57bGV0IHI9dG8uZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKSxvPXIubGVuZ3RoLHM9ITEsYT1mdW5jdGlvbihsKXtzPXN8fGwsby0tLDA9PW8mJmkocyl9O3IuZm9yRWFjaChmdW5jdGlvbihsKXtsLndoZW5TdGFibGUoYSl9KX0pfWZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUsaSl7cmV0dXJuIG51bGw9PWU/bnVsbDp0LmdldFRlc3RhYmlsaXR5KGUpPz8oaT9ZbCgpLmlzU2hhZG93Um9vdChlKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUuaG9zdCwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLnBhcmVudEVsZW1lbnQsITApOm51bGwpfX0sZGVwczpbXX0se3Byb3ZpZGU6bkIsdXNlQ2xhc3M6a1QsZGVwczpbX3QsRlQsZUNdfSx7cHJvdmlkZTprVCx1c2VDbGFzczprVCxkZXBzOltfdCxGVCxlQ119XSxGRGU9W3twcm92aWRlOmdULHVzZVZhbHVlOiJyb290In0se3Byb3ZpZGU6UXMsdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgUXN9LGRlcHM6W119LHtwcm92aWRlOlpELHVzZUNsYXNzOkVEZSxtdWx0aTohMCxkZXBzOltIdCxfdCxHZF19LHtwcm92aWRlOlpELHVzZUNsYXNzOkFEZSxtdWx0aTohMCxkZXBzOltIdF19LHtwcm92aWRlOnNNLHVzZUNsYXNzOnNNLGRlcHM6W0pELG9NLCRmXX0se3Byb3ZpZGU6d3UsdXNlRXhpc3Rpbmc6c019LHtwcm92aWRlOnVaLHVzZUV4aXN0aW5nOm9NfSx7cHJvdmlkZTpvTSx1c2VDbGFzczpvTSxkZXBzOltIdF19LHtwcm92aWRlOkpELHVzZUNsYXNzOkpELGRlcHM6W1pELF90XX0se3Byb3ZpZGU6RW0sdXNlQ2xhc3M6YkRlLGRlcHM6W119LFtdXSx0QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe31zdGF0aWMgd2l0aFNlcnZlclRyYW5zaXRpb24oZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOlt7cHJvdmlkZTokZix1c2VWYWx1ZTplLmFwcElkfSx7cHJvdmlkZTpjWix1c2VFeGlzdGluZzokZn0seURlXX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGoocFosMTIpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOlsuLi5GRGUsLi4ua0RlXSxpbXBvcnRzOltNZSx1WF19KSxufSkoKSxUbT0obmV3IHBlKCJIYW1tZXJHZXN0dXJlQ29uZmlnIiksbmV3IHBlKCJIYW1tZXJMb2FkZXIiKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oZSl7bGV0IGk9bnVsbDtyZXR1cm4gaT1lP25ldyhlfHxuKTpqKGhaKSxpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpKSxoWj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVG17Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kb2M9ZX1zYW5pdGl6ZShlLGkpe2lmKG51bGw9PWkpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2UgbW8uTk9ORTpyZXR1cm4gaTtjYXNlIG1vLkhUTUw6cmV0dXJuIFBjKGksIkhUTUwiKT9UYShpKTpEMyh0aGlzLl9kb2MsU3RyaW5nKGkpKS50b1N0cmluZygpO2Nhc2UgbW8uU1RZTEU6cmV0dXJuIFBjKGksIlN0eWxlIik/VGEoaSk6aTtjYXNlIG1vLlNDUklQVDppZihQYyhpLCJTY3JpcHQiKSlyZXR1cm4gVGEoaSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHNjcmlwdCBjb250ZXh0Iik7Y2FzZSBtby5VUkw6cmV0dXJuIFBjKGksIlVSTCIpP1RhKGkpOnp4KFN0cmluZyhpKSk7Y2FzZSBtby5SRVNPVVJDRV9VUkw6aWYoUGMoaSwiUmVzb3VyY2VVUkwiKSlyZXR1cm4gVGEoaSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHJlc291cmNlIFVSTCBjb250ZXh0IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBTZWN1cml0eUNvbnRleHQgJHtlfSAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpYCl9fWJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGhMKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgZkwobil9KGUpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RTY3JpcHQoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgbUwobil9KGUpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgZ0wobil9KGUpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBfTChuKX0oZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oZSl7bGV0IGk9bnVsbDtyZXR1cm4gaT1lP25ldyBlOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgaFoobi5nZXQoSHQpKX0oaihYbikpLGl9LHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksY009KG5ldyBJYygiMTQuMi4xMSIpLG9OKG1aKCksMSksY2xhc3N7fSksbkE9Y2xhc3N7fSxqdT0iKiI7ZnVuY3Rpb24gS3Iobix0KXtyZXR1cm57dHlwZTo3LG5hbWU6bixkZWZpbml0aW9uczp0LG9wdGlvbnM6e319fWZ1bmN0aW9uIGppKG4sdD1udWxsKXtyZXR1cm57dHlwZTo0LHN0eWxlczp0LHRpbWluZ3M6bn19ZnVuY3Rpb24geDUobix0PW51bGwpe3JldHVybnt0eXBlOjMsc3RlcHM6bixvcHRpb25zOnR9fWZ1bmN0aW9uIGlBKG4sdD1udWxsKXtyZXR1cm57dHlwZToyLHN0ZXBzOm4sb3B0aW9uczp0fX1mdW5jdGlvbiBnbihuKXtyZXR1cm57dHlwZTo2LHN0eWxlczpuLG9mZnNldDpudWxsfX1mdW5jdGlvbiBraShuLHQsZSl7cmV0dXJue3R5cGU6MCxuYW1lOm4sc3R5bGVzOnQsb3B0aW9uczplfX1mdW5jdGlvbiBEbShuKXtyZXR1cm57dHlwZTo1LHN0ZXBzOm59fWZ1bmN0aW9uIExpKG4sdCxlPW51bGwpe3JldHVybnt0eXBlOjEsZXhwcjpuLGFuaW1hdGlvbjp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gQW0obj1udWxsKXtyZXR1cm57dHlwZTo5LG9wdGlvbnM6bn19ZnVuY3Rpb24gSW0obix0LGU9bnVsbCl7cmV0dXJue3R5cGU6MTEsc2VsZWN0b3I6bixhbmltYXRpb246dCxvcHRpb25zOmV9fWZ1bmN0aW9uIGdaKG4pe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4obil9dmFyIGRoPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTApe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fcG9zaXRpb249MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPXQrZX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1vblN0YXJ0KHQpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKHQpLHRoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaCh0KSx0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtnWigoKT0+dGhpcy5fb25GaW5pc2goKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdfXBhdXNlKCl7fXJlc3RhcnQoKXt9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKX1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31zZXRQb3NpdGlvbih0KXt0aGlzLl9wb3NpdGlvbj10aGlzLnRvdGFsVGltZT90KnRoaXMudG90YWxUaW1lOjF9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy50b3RhbFRpbWU/dGhpcy5fcG9zaXRpb24vdGhpcy50b3RhbFRpbWU6MX10cmlnZ2VyQ2FsbGJhY2sodCl7bGV0IGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goaT0+aSgpKSxlLmxlbmd0aD0wfX0sdU09Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXllcnM9dDtsZXQgZT0wLGk9MCxyPTAsbz10aGlzLnBsYXllcnMubGVuZ3RoOzA9PW8/Z1ooKCk9PnRoaXMuX29uRmluaXNoKCkpOnRoaXMucGxheWVycy5mb3JFYWNoKHM9PntzLm9uRG9uZSgoKT0+eysrZT09byYmdGhpcy5fb25GaW5pc2goKX0pLHMub25EZXN0cm95KCgpPT57KytpPT1vJiZ0aGlzLl9vbkRlc3Ryb3koKX0pLHMub25TdGFydCgoKT0+eysrcj09byYmdGhpcy5fb25TdGFydCgpfSl9KSx0aGlzLnRvdGFsVGltZT10aGlzLnBsYXllcnMucmVkdWNlKChzLGEpPT5NYXRoLm1heChzLGEudG90YWxUaW1lKSwwKX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2godD0+dC5pbml0KCkpfW9uU3RhcnQodCl7dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfV9vblN0YXJ0KCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uU3RhcnRGbnM9W10pfW9uRG9uZSh0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQucGxheSgpKX1wYXVzZSgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQucGF1c2UoKSl9cmVzdGFydCgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQucmVzdGFydCgpKX1maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuZmluaXNoKCkpfWRlc3Ryb3koKXt0aGlzLl9vbkRlc3Ryb3koKX1fb25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVhY2godD0+dC5kZXN0cm95KCkpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQucmVzZXQoKSksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITF9c2V0UG9zaXRpb24odCl7bGV0IGU9dCp0aGlzLnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChpPT57bGV0IHI9aS50b3RhbFRpbWU/TWF0aC5taW4oMSxlL2kudG90YWxUaW1lKToxO2kuc2V0UG9zaXRpb24ocil9KX1nZXRQb3NpdGlvbigpe2xldCB0PXRoaXMucGxheWVycy5yZWR1Y2UoKGUsaSk9Pm51bGw9PT1lfHxpLnRvdGFsVGltZT5lLnRvdGFsVGltZT9pOmUsbnVsbCk7cmV0dXJuIG51bGwhPXQ/dC5nZXRQb3NpdGlvbigpOjB9YmVmb3JlRGVzdHJveSgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9Pnt0LmJlZm9yZURlc3Ryb3kmJnQuYmVmb3JlRGVzdHJveSgpfSl9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGk9PmkoKSksZS5sZW5ndGg9MH19O2Z1bmN0aW9uIF9aKG4pe3JldHVybiBuZXcgQXQoM2UzLCExKX1mdW5jdGlvbiB6NSgpe3JldHVybiB0eXBlb2YgcHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwocHJvY2Vzcyl9ZnVuY3Rpb24gcGgobil7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBkaDtjYXNlIDE6cmV0dXJuIG5bMF07ZGVmYXVsdDpyZXR1cm4gbmV3IHVNKG4pfX1mdW5jdGlvbiBSWihuLHQsZSxpLHI9bmV3IE1hcCxvPW5ldyBNYXApe2xldCBzPVtdLGE9W10sbD0tMSxjPW51bGw7aWYoaS5mb3JFYWNoKHU9PntsZXQgZD11LmdldCgib2Zmc2V0IikscD1kPT1sLGg9cCYmY3x8bmV3IE1hcDt1LmZvckVhY2goKGYsbSk9PntsZXQgeD1tLGc9ZjtpZigib2Zmc2V0IiE9PW0pc3dpdGNoKHg9dC5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoeCxzKSxnKXtjYXNlIiEiOmc9ci5nZXQobSk7YnJlYWs7Y2FzZSBqdTpnPW8uZ2V0KG0pO2JyZWFrO2RlZmF1bHQ6Zz10Lm5vcm1hbGl6ZVN0eWxlVmFsdWUobSx4LGcscyl9aC5zZXQoeCxnKX0pLHB8fGEucHVzaChoKSxjPWgsbD1kfSkscy5sZW5ndGgpdGhyb3cgbmV3IEF0KDM1MDIsITEpO3JldHVybiBhfWZ1bmN0aW9uIGo1KG4sdCxlLGkpe3N3aXRjaCh0KXtjYXNlInN0YXJ0IjpuLm9uU3RhcnQoKCk9PmkoZSYmQzUoZSwic3RhcnQiLG4pKSk7YnJlYWs7Y2FzZSJkb25lIjpuLm9uRG9uZSgoKT0+aShlJiZDNShlLCJkb25lIixuKSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6bi5vbkRlc3Ryb3koKCk9PmkoZSYmQzUoZSwiZGVzdHJveSIsbikpKX19ZnVuY3Rpb24gQzUobix0LGUpe2xldCBvPUc1KG4uZWxlbWVudCxuLnRyaWdnZXJOYW1lLG4uZnJvbVN0YXRlLG4udG9TdGF0ZSx0fHxuLnBoYXNlTmFtZSxlLnRvdGFsVGltZT8/bi50b3RhbFRpbWUsISFlLmRpc2FibGVkKSxzPW4uX2RhdGE7cmV0dXJuIG51bGwhPXMmJihvLl9kYXRhPXMpLG99ZnVuY3Rpb24gRzUobix0LGUsaSxyPSIiLG89MCxzKXtyZXR1cm57ZWxlbWVudDpuLHRyaWdnZXJOYW1lOnQsZnJvbVN0YXRlOmUsdG9TdGF0ZTppLHBoYXNlTmFtZTpyLHRvdGFsVGltZTpvLGRpc2FibGVkOiEhc319ZnVuY3Rpb24gcGwobix0LGUpe2xldCBpPW4uZ2V0KHQpO3JldHVybiBpfHxuLnNldCh0LGk9ZSksaX1mdW5jdGlvbiB2WihuKXtsZXQgdD1uLmluZGV4T2YoIjoiKTtyZXR1cm5bbi5zdWJzdHJpbmcoMSx0KSxuLnNsaWNlKHQrMSldfXZhciBENT0obix0KT0+ITEsT1o9KG4sdCxlKT0+W10sa1o9bnVsbDtmdW5jdGlvbiBXNShuKXtsZXQgdD1uLnBhcmVudE5vZGV8fG4uaG9zdDtyZXR1cm4gdD09PWtaP251bGw6dH0oejUoKXx8dHlwZW9mIEVsZW1lbnQ8InUiKSYmKHR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50PCJ1Ij8oa1o9KCgpPT5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKCksRDU9KG4sdCk9Pntmb3IoO3Q7KXtpZih0PT09bilyZXR1cm4hMDt0PVc1KHQpfXJldHVybiExfSk6RDU9KG4sdCk9Pm4uY29udGFpbnModCksT1o9KG4sdCxlKT0+e2lmKGUpcmV0dXJuIEFycmF5LmZyb20obi5xdWVyeVNlbGVjdG9yQWxsKHQpKTtsZXQgaT1uLnF1ZXJ5U2VsZWN0b3IodCk7cmV0dXJuIGk/W2ldOltdfSk7dmFyIFBtPW51bGwseVo9ITE7dmFyIEZaPUQ1LE5aPU9aLHE1PSgoKT0+e2NsYXNzIG57dmFsaWRhdGVTdHlsZVByb3BlcnR5KGUpe3JldHVybiBmdW5jdGlvbihuKXtQbXx8KFBtPSh0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmJvZHk6bnVsbCl8fHt9LHlaPSEhUG0uc3R5bGUmJiJXZWJraXRBcHBlYXJhbmNlImluIFBtLnN0eWxlKTtsZXQgdD0hMDtyZXR1cm4gUG0uc3R5bGUmJiFmdW5jdGlvbihuKXtyZXR1cm4iZWJraXQiPT1uLnN1YnN0cmluZygxLDYpfShuKSYmKHQ9biBpbiBQbS5zdHlsZSwhdCYmeVomJih0PSJXZWJraXQiK24uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbi5zbGljZSgxKWluIFBtLnN0eWxlKSksdH0oZSl9bWF0Y2hlc0VsZW1lbnQoZSxpKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQoZSxpKXtyZXR1cm4gRlooZSxpKX1nZXRQYXJlbnRFbGVtZW50KGUpe3JldHVybiBXNShlKX1xdWVyeShlLGkscil7cmV0dXJuIE5aKGUsaSxyKX1jb21wdXRlU3R5bGUoZSxpLHIpe3JldHVybiByfHwiIn1hbmltYXRlKGUsaSxyLG8scyxhPVtdLGwpe3JldHVybiBuZXcgZGgocixvKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdk09KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uTk9PUD1uZXcgcTUsbn0pKCksQlo9Im5nLWVudGVyIixBNT0ibmctbGVhdmUiLG9BPSJuZy10cmlnZ2VyIixjQT0iLm5nLXRyaWdnZXIiLGJaPSJuZy1hbmltYXRpbmciLEk1PSIubmctYW5pbWF0aW5nIjtmdW5jdGlvbiB0cChuKXtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIG47bGV0IHQ9bi5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4hdHx8dC5sZW5ndGg8Mj8wOlA1KHBhcnNlRmxvYXQodFsxXSksdFsyXSl9ZnVuY3Rpb24gUDUobix0KXtyZXR1cm4icyI9PT10PzFlMypuOm59ZnVuY3Rpb24gdUEobix0LGUpe3JldHVybiBuLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP246ZnVuY3Rpb24obix0LGUpe2xldCByLG89MCxzPSIiO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7bGV0IGE9bi5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PWEpcmV0dXJuIHQucHVzaChfWigpKSx7ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiIn07cj1QNShwYXJzZUZsb2F0KGFbMV0pLGFbMl0pO2xldCBsPWFbM107bnVsbCE9bCYmKG89UDUocGFyc2VGbG9hdChsKSxhWzRdKSk7bGV0IGM9YVs1XTtjJiYocz1jKX1lbHNlIHI9bjtpZighZSl7bGV0IGE9ITEsbD10Lmxlbmd0aDtyPDAmJih0LnB1c2gobmV3IEF0KDMxMDAsITEpKSxhPSEwKSxvPDAmJih0LnB1c2gobmV3IEF0KDMxMDEsITEpKSxhPSEwKSxhJiZ0LnNwbGljZShsLDAsX1ooKSl9cmV0dXJue2R1cmF0aW9uOnIsZGVsYXk6byxlYXNpbmc6c319KG4sdCxlKX1mdW5jdGlvbiB5TShuLHQ9e30pe3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGU9Pnt0W2VdPW5bZV19KSx0fWZ1bmN0aW9uIFZaKG4pe2xldCB0PW5ldyBNYXA7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goZT0+e3Quc2V0KGUsbltlXSl9KSx0fWZ1bmN0aW9uIGpfKG4sdD1uZXcgTWFwLGUpe2lmKGUpZm9yKGxldFtpLHJdb2YgZSl0LnNldChpLHIpO2ZvcihsZXRbaSxyXW9mIG4pdC5zZXQoaSxyKTtyZXR1cm4gdH1mdW5jdGlvbiB4WihuLHQsZSl7cmV0dXJuIGU/dCsiOiIrZSsiOyI6IiJ9ZnVuY3Rpb24gSFoobil7bGV0IHQ9IiI7Zm9yKGxldCBlPTA7ZTxuLnN0eWxlLmxlbmd0aDtlKyspe2xldCBpPW4uc3R5bGUuaXRlbShlKTt0Kz14WigwLGksbi5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGkpKX1mb3IobGV0IGUgaW4gbi5zdHlsZSluLnN0eWxlLmhhc093blByb3BlcnR5KGUpJiYhZS5zdGFydHNXaXRoKCJfIikmJih0Kz14WigwLFNBZShlKSxuLnN0eWxlW2VdKSk7bi5zZXRBdHRyaWJ1dGUoInN0eWxlIix0KX1mdW5jdGlvbiBHdShuLHQsZSl7bi5zdHlsZSYmKHQuZm9yRWFjaCgoaSxyKT0+e2xldCBvPVk1KHIpO2UmJiFlLmhhcyhyKSYmZS5zZXQocixuLnN0eWxlW29dKSxuLnN0eWxlW29dPWl9KSx6NSgpJiZIWihuKSl9ZnVuY3Rpb24gT20obix0KXtuLnN0eWxlJiYodC5mb3JFYWNoKChlLGkpPT57bGV0IHI9WTUoaSk7bi5zdHlsZVtyXT0iIn0pLHo1KCkmJkhaKG4pKX1mdW5jdGlvbiBkTShuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT8xPT1uLmxlbmd0aD9uWzBdOmlBKG4pOm59dmFyIFI1PW5ldyBSZWdFeHAoInt7XFxzKiguKz8pXFxzKn19IiwiZyIpO2Z1bmN0aW9uIFVaKG4pe2xldCB0PVtdO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7bGV0IGU7Zm9yKDtlPVI1LmV4ZWMobik7KXQucHVzaChlWzFdKTtSNS5sYXN0SW5kZXg9MH1yZXR1cm4gdH1mdW5jdGlvbiBoTShuLHQsZSl7bGV0IGk9bi50b1N0cmluZygpLHI9aS5yZXBsYWNlKFI1LChvLHMpPT57bGV0IGE9dFtzXTtyZXR1cm4gbnVsbD09YSYmKGUucHVzaChuZXcgQXQoMzAwMywhMSkpLGE9IiIpLGEudG9TdHJpbmcoKX0pO3JldHVybiByPT1pP246cn1mdW5jdGlvbiBkQShuKXtsZXQgdD1bXSxlPW4ubmV4dCgpO2Zvcig7IWUuZG9uZTspdC5wdXNoKGUudmFsdWUpLGU9bi5uZXh0KCk7cmV0dXJuIHR9dmFyIHdBZT0vLSsoW2EtejAtOV0pL2c7ZnVuY3Rpb24gWTUobil7cmV0dXJuIG4ucmVwbGFjZSh3QWUsKC4uLnQpPT50WzFdLnRvVXBwZXJDYXNlKCkpfWZ1bmN0aW9uIFNBZShuKXtyZXR1cm4gbi5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZGwobix0LGUpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgNzpyZXR1cm4gbi52aXNpdFRyaWdnZXIodCxlKTtjYXNlIDA6cmV0dXJuIG4udmlzaXRTdGF0ZSh0LGUpO2Nhc2UgMTpyZXR1cm4gbi52aXNpdFRyYW5zaXRpb24odCxlKTtjYXNlIDI6cmV0dXJuIG4udmlzaXRTZXF1ZW5jZSh0LGUpO2Nhc2UgMzpyZXR1cm4gbi52aXNpdEdyb3VwKHQsZSk7Y2FzZSA0OnJldHVybiBuLnZpc2l0QW5pbWF0ZSh0LGUpO2Nhc2UgNTpyZXR1cm4gbi52aXNpdEtleWZyYW1lcyh0LGUpO2Nhc2UgNjpyZXR1cm4gbi52aXNpdFN0eWxlKHQsZSk7Y2FzZSA4OnJldHVybiBuLnZpc2l0UmVmZXJlbmNlKHQsZSk7Y2FzZSA5OnJldHVybiBuLnZpc2l0QW5pbWF0ZUNoaWxkKHQsZSk7Y2FzZSAxMDpyZXR1cm4gbi52aXNpdEFuaW1hdGVSZWYodCxlKTtjYXNlIDExOnJldHVybiBuLnZpc2l0UXVlcnkodCxlKTtjYXNlIDEyOnJldHVybiBuLnZpc2l0U3RhZ2dlcih0LGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEF0KDMwMDQsITEpfX1mdW5jdGlvbiB6WihuLHQpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShuKVt0XX1mdW5jdGlvbiBJQWUobix0KXtsZXQgZT1bXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goaT0+ZnVuY3Rpb24obix0LGUpe2lmKCI6Ij09blswXSl7bGV0IGw9ZnVuY3Rpb24obix0KXtzd2l0Y2gobil7Y2FzZSI6ZW50ZXIiOnJldHVybiJ2b2lkID0+ICoiO2Nhc2UiOmxlYXZlIjpyZXR1cm4iKiA9PiB2b2lkIjtjYXNlIjppbmNyZW1lbnQiOnJldHVybihlLGkpPT5wYXJzZUZsb2F0KGkpPnBhcnNlRmxvYXQoZSk7Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4oZSxpKT0+cGFyc2VGbG9hdChpKTxwYXJzZUZsb2F0KGUpO2RlZmF1bHQ6cmV0dXJuIHQucHVzaChuZXcgQXQoMzAxNiwhMSkpLCIqID0+ICoifX0obixlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbClyZXR1cm4gdm9pZCB0LnB1c2gobCk7bj1sfWxldCBpPW4ubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWl8fGkubGVuZ3RoPDQpcmV0dXJuIGUucHVzaChuZXcgQXQoMzAxNSwhMSkpLHQ7bGV0IHI9aVsxXSxvPWlbMl0scz1pWzNdO3QucHVzaChDWihyLHMpKSwiPCI9PW9bMF0mJiEoIioiPT1yJiYiKiI9PXMpJiZ0LnB1c2goQ1oocyxyKSl9KGksZSx0KSk6ZS5wdXNoKG4pLGV9dmFyIHNBPW5ldyBTZXQoWyJ0cnVlIiwiMSJdKSxhQT1uZXcgU2V0KFsiZmFsc2UiLCIwIl0pO2Z1bmN0aW9uIENaKG4sdCl7bGV0IGU9c0EuaGFzKG4pfHxhQS5oYXMobiksaT1zQS5oYXModCl8fGFBLmhhcyh0KTtyZXR1cm4ocixvKT0+e2xldCBzPSIqIj09bnx8bj09cixhPSIqIj09dHx8dD09bztyZXR1cm4hcyYmZSYmImJvb2xlYW4iPT10eXBlb2YgciYmKHM9cj9zQS5oYXMobik6YUEuaGFzKG4pKSwhYSYmaSYmImJvb2xlYW4iPT10eXBlb2YgbyYmKGE9bz9zQS5oYXModCk6YUEuaGFzKHQpKSxzJiZhfX12YXIgT0FlPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIHFaKG4sdCxlLGkpe3JldHVybiBuZXcgTzUobikuYnVpbGQodCxlLGkpfXZhciBPNT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kcml2ZXI9dH1idWlsZCh0LGUsaSl7bGV0IHI9bmV3IGs1KGUpO3JldHVybiB0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKHIpLGRsKHRoaXMsZE0odCkscil9X3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUodCl7dC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIix0LmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLHQuY29sbGVjdGVkU3R5bGVzLnNldCgiIixuZXcgTWFwKSx0LmN1cnJlbnRUaW1lPTB9dmlzaXRUcmlnZ2VyKHQsZSl7bGV0IGk9ZS5xdWVyeUNvdW50PTAscj1lLmRlcENvdW50PTAsbz1bXSxzPVtdO3JldHVybiJAIj09dC5uYW1lLmNoYXJBdCgwKSYmZS5lcnJvcnMucHVzaChuZXcgQXQoMzAwNiwhMSkpLHQuZGVmaW5pdGlvbnMuZm9yRWFjaChhPT57aWYodGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShlKSwwPT1hLnR5cGUpe2xldCBsPWEsYz1sLm5hbWU7Yy50b1N0cmluZygpLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaCh1PT57bC5uYW1lPXUsby5wdXNoKHRoaXMudmlzaXRTdGF0ZShsLGUpKX0pLGwubmFtZT1jfWVsc2UgaWYoMT09YS50eXBlKXtsZXQgbD10aGlzLnZpc2l0VHJhbnNpdGlvbihhLGUpO2krPWwucXVlcnlDb3VudCxyKz1sLmRlcENvdW50LHMucHVzaChsKX1lbHNlIGUuZXJyb3JzLnB1c2gobmV3IEF0KDMwMDcsITEpKX0pLHt0eXBlOjcsbmFtZTp0Lm5hbWUsc3RhdGVzOm8sdHJhbnNpdGlvbnM6cyxxdWVyeUNvdW50OmksZGVwQ291bnQ6cixvcHRpb25zOm51bGx9fXZpc2l0U3RhdGUodCxlKXtsZXQgaT10aGlzLnZpc2l0U3R5bGUodC5zdHlsZXMsZSkscj10Lm9wdGlvbnMmJnQub3B0aW9ucy5wYXJhbXN8fG51bGw7aWYoaS5jb250YWluc0R5bmFtaWNTdHlsZXMpe2xldCBvPW5ldyBTZXQscz1yfHx7fTtpLnN0eWxlcy5mb3JFYWNoKGE9PnthIGluc3RhbmNlb2YgTWFwJiZhLmZvckVhY2gobD0+e1VaKGwpLmZvckVhY2goYz0+e3MuaGFzT3duUHJvcGVydHkoYyl8fG8uYWRkKGMpfSl9KX0pLG8uc2l6ZSYmKGRBKG8udmFsdWVzKCkpLGUuZXJyb3JzLnB1c2gobmV3IEF0KDMwMDgsITEpKSl9cmV0dXJue3R5cGU6MCxuYW1lOnQubmFtZSxzdHlsZTppLG9wdGlvbnM6cj97cGFyYW1zOnJ9Om51bGx9fXZpc2l0VHJhbnNpdGlvbih0LGUpe2UucXVlcnlDb3VudD0wLGUuZGVwQ291bnQ9MDtsZXQgaT1kbCh0aGlzLGRNKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm57dHlwZToxLG1hdGNoZXJzOklBZSh0LmV4cHIsZS5lcnJvcnMpLGFuaW1hdGlvbjppLHF1ZXJ5Q291bnQ6ZS5xdWVyeUNvdW50LGRlcENvdW50OmUuZGVwQ291bnQsb3B0aW9uczpSbSh0Lm9wdGlvbnMpfX12aXNpdFNlcXVlbmNlKHQsZSl7cmV0dXJue3R5cGU6MixzdGVwczp0LnN0ZXBzLm1hcChpPT5kbCh0aGlzLGksZSkpLG9wdGlvbnM6Um0odC5vcHRpb25zKX19dmlzaXRHcm91cCh0LGUpe2xldCBpPWUuY3VycmVudFRpbWUscj0wLG89dC5zdGVwcy5tYXAocz0+e2UuY3VycmVudFRpbWU9aTtsZXQgYT1kbCh0aGlzLHMsZSk7cmV0dXJuIHI9TWF0aC5tYXgocixlLmN1cnJlbnRUaW1lKSxhfSk7cmV0dXJuIGUuY3VycmVudFRpbWU9cix7dHlwZTozLHN0ZXBzOm8sb3B0aW9uczpSbSh0Lm9wdGlvbnMpfX12aXNpdEFuaW1hdGUodCxlKXtsZXQgaT1mdW5jdGlvbihuLHQpe2lmKG4uaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpcmV0dXJuIG47aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVybiBNNSh1QShuLHQpLmR1cmF0aW9uLDAsIiIpO2xldCBlPW47aWYoZS5zcGxpdCgvXHMrLykuc29tZShvPT4ieyI9PW8uY2hhckF0KDApJiYieyI9PW8uY2hhckF0KDEpKSl7bGV0IG89TTUoMCwwLCIiKTtyZXR1cm4gby5keW5hbWljPSEwLG8uc3RyVmFsdWU9ZSxvfWxldCByPXVBKGUsdCk7cmV0dXJuIE01KHIuZHVyYXRpb24sci5kZWxheSxyLmVhc2luZyl9KHQudGltaW5ncyxlLmVycm9ycyk7ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9aTtsZXQgcixvPXQuc3R5bGVzP3Quc3R5bGVzOmduKHt9KTtpZig1PT1vLnR5cGUpcj10aGlzLnZpc2l0S2V5ZnJhbWVzKG8sZSk7ZWxzZXtsZXQgcz10LnN0eWxlcyxhPSExO2lmKCFzKXthPSEwO2xldCBjPXt9O2kuZWFzaW5nJiYoYy5lYXNpbmc9aS5lYXNpbmcpLHM9Z24oYyl9ZS5jdXJyZW50VGltZSs9aS5kdXJhdGlvbitpLmRlbGF5O2xldCBsPXRoaXMudmlzaXRTdHlsZShzLGUpO2wuaXNFbXB0eVN0ZXA9YSxyPWx9cmV0dXJuIGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6NCx0aW1pbmdzOmksc3R5bGU6cixvcHRpb25zOm51bGx9fXZpc2l0U3R5bGUodCxlKXtsZXQgaT10aGlzLl9tYWtlU3R5bGVBc3QodCxlKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChpLGUpLGl9X21ha2VTdHlsZUFzdCh0LGUpe2xldCBpPVtdLHI9QXJyYXkuaXNBcnJheSh0LnN0eWxlcyk/dC5zdHlsZXM6W3Quc3R5bGVzXTtmb3IobGV0IGEgb2Ygcikic3RyaW5nIj09dHlwZW9mIGE/YT09PWp1P2kucHVzaChhKTplLmVycm9ycy5wdXNoKG5ldyBBdCgzMDAyLCExKSk6aS5wdXNoKFZaKGEpKTtsZXQgbz0hMSxzPW51bGw7cmV0dXJuIGkuZm9yRWFjaChhPT57aWYoYSBpbnN0YW5jZW9mIE1hcCYmKGEuaGFzKCJlYXNpbmciKSYmKHM9YS5nZXQoImVhc2luZyIpLGEuZGVsZXRlKCJlYXNpbmciKSksIW8pKWZvcihsZXQgbCBvZiBhLnZhbHVlcygpKWlmKGwudG9TdHJpbmcoKS5pbmRleE9mKCJ7eyIpPj0wKXtvPSEwO2JyZWFrfX0pLHt0eXBlOjYsc3R5bGVzOmksZWFzaW5nOnMsb2Zmc2V0OnQub2Zmc2V0LGNvbnRhaW5zRHluYW1pY1N0eWxlczpvLG9wdGlvbnM6bnVsbH19X3ZhbGlkYXRlU3R5bGVBc3QodCxlKXtsZXQgaT1lLmN1cnJlbnRBbmltYXRlVGltaW5ncyxyPWUuY3VycmVudFRpbWUsbz1lLmN1cnJlbnRUaW1lO2kmJm8+MCYmKG8tPWkuZHVyYXRpb24raS5kZWxheSksdC5zdHlsZXMuZm9yRWFjaChzPT57InN0cmluZyIhPXR5cGVvZiBzJiZzLmZvckVhY2goKGEsbCk9PntsZXQgYz1lLmNvbGxlY3RlZFN0eWxlcy5nZXQoZS5jdXJyZW50UXVlcnlTZWxlY3RvciksdT1jLmdldChsKSxkPSEwO3UmJihvIT1yJiZvPj11LnN0YXJ0VGltZSYmcjw9dS5lbmRUaW1lJiYoZS5lcnJvcnMucHVzaChuZXcgQXQoMzAxMCwhMSkpLGQ9ITEpLG89dS5zdGFydFRpbWUpLGQmJmMuc2V0KGwse3N0YXJ0VGltZTpvLGVuZFRpbWU6cn0pLGUub3B0aW9ucyYmZnVuY3Rpb24obix0LGUpe2xldCBpPXQucGFyYW1zfHx7fSxyPVVaKG4pO3IubGVuZ3RoJiZyLmZvckVhY2gobz0+e2kuaGFzT3duUHJvcGVydHkobyl8fGUucHVzaChuZXcgQXQoMzAwMSwhMSkpfSl9KGEsZS5vcHRpb25zLGUuZXJyb3JzKX0pfSl9dmlzaXRLZXlmcmFtZXModCxlKXtsZXQgaT17dHlwZTo1LHN0eWxlczpbXSxvcHRpb25zOm51bGx9O2lmKCFlLmN1cnJlbnRBbmltYXRlVGltaW5ncylyZXR1cm4gZS5lcnJvcnMucHVzaChuZXcgQXQoMzAxMSwhMSkpLGk7bGV0IG89MCxzPVtdLGE9ITEsbD0hMSxjPTAsdT10LnN0ZXBzLm1hcChnPT57bGV0IGI9dGhpcy5fbWFrZVN0eWxlQXN0KGcsZSksRD1udWxsIT1iLm9mZnNldD9iLm9mZnNldDpmdW5jdGlvbihuKXtpZigic3RyaW5nIj09dHlwZW9mIG4pcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtpZihBcnJheS5pc0FycmF5KG4pKW4uZm9yRWFjaChlPT57aWYoZSBpbnN0YW5jZW9mIE1hcCYmZS5oYXMoIm9mZnNldCIpKXtsZXQgaT1lO3Q9cGFyc2VGbG9hdChpLmdldCgib2Zmc2V0IikpLGkuZGVsZXRlKCJvZmZzZXQiKX19KTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBNYXAmJm4uaGFzKCJvZmZzZXQiKSl7bGV0IGU9bjt0PXBhcnNlRmxvYXQoZS5nZXQoIm9mZnNldCIpKSxlLmRlbGV0ZSgib2Zmc2V0Iil9cmV0dXJuIHR9KGIuc3R5bGVzKSxUPTA7cmV0dXJuIG51bGwhPUQmJihvKyssVD1iLm9mZnNldD1EKSxsPWx8fFQ8MHx8VD4xLGE9YXx8VDxjLGM9VCxzLnB1c2goVCksYn0pO2wmJmUuZXJyb3JzLnB1c2gobmV3IEF0KDMwMTIsITEpKSxhJiZlLmVycm9ycy5wdXNoKG5ldyBBdCgzMjAwLCExKSk7bGV0IGQ9dC5zdGVwcy5sZW5ndGgscD0wO28+MCYmbzxkP2UuZXJyb3JzLnB1c2gobmV3IEF0KDMyMDIsITEpKTowPT1vJiYocD0xLyhkLTEpKTtsZXQgaD1kLTEsZj1lLmN1cnJlbnRUaW1lLG09ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MseD1tLmR1cmF0aW9uO3JldHVybiB1LmZvckVhY2goKGcsYik9PntsZXQgRD1wPjA/Yj09aD8xOnAqYjpzW2JdLFQ9RCp4O2UuY3VycmVudFRpbWU9ZittLmRlbGF5K1QsbS5kdXJhdGlvbj1ULHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QoZyxlKSxnLm9mZnNldD1ELGkuc3R5bGVzLnB1c2goZyl9KSxpfXZpc2l0UmVmZXJlbmNlKHQsZSl7cmV0dXJue3R5cGU6OCxhbmltYXRpb246ZGwodGhpcyxkTSh0LmFuaW1hdGlvbiksZSksb3B0aW9uczpSbSh0Lm9wdGlvbnMpfX12aXNpdEFuaW1hdGVDaGlsZCh0LGUpe3JldHVybiBlLmRlcENvdW50Kysse3R5cGU6OSxvcHRpb25zOlJtKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZVJlZih0LGUpe3JldHVybnt0eXBlOjEwLGFuaW1hdGlvbjp0aGlzLnZpc2l0UmVmZXJlbmNlKHQuYW5pbWF0aW9uLGUpLG9wdGlvbnM6Um0odC5vcHRpb25zKX19dmlzaXRRdWVyeSh0LGUpe2xldCBpPWUuY3VycmVudFF1ZXJ5U2VsZWN0b3Iscj10Lm9wdGlvbnN8fHt9O2UucXVlcnlDb3VudCsrLGUuY3VycmVudFF1ZXJ5PXQ7bGV0W28sc109ZnVuY3Rpb24obil7bGV0IHQ9ISFuLnNwbGl0KC9ccyosXHMqLykuZmluZChlPT4iOnNlbGYiPT1lKTtyZXR1cm4gdCYmKG49bi5yZXBsYWNlKE9BZSwiIikpLG49bi5yZXBsYWNlKC9AXCovZyxjQSkucmVwbGFjZSgvQFx3Ky9nLGU9PmNBKyItIitlLnNsaWNlKDEpKS5yZXBsYWNlKC86YW5pbWF0aW5nL2csSTUpLFtuLHRdfSh0LnNlbGVjdG9yKTtlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWkubGVuZ3RoP2krIiAiK286byxwbChlLmNvbGxlY3RlZFN0eWxlcyxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yLG5ldyBNYXApO2xldCBhPWRsKHRoaXMsZE0odC5hbmltYXRpb24pLGUpO3JldHVybiBlLmN1cnJlbnRRdWVyeT1udWxsLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3I9aSx7dHlwZToxMSxzZWxlY3RvcjpvLGxpbWl0OnIubGltaXR8fDAsb3B0aW9uYWw6ISFyLm9wdGlvbmFsLGluY2x1ZGVTZWxmOnMsYW5pbWF0aW9uOmEsb3JpZ2luYWxTZWxlY3Rvcjp0LnNlbGVjdG9yLG9wdGlvbnM6Um0odC5vcHRpb25zKX19dmlzaXRTdGFnZ2VyKHQsZSl7ZS5jdXJyZW50UXVlcnl8fGUuZXJyb3JzLnB1c2gobmV3IEF0KDMwMTMsITEpKTtsZXQgaT0iZnVsbCI9PT10LnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTp1QSh0LnRpbWluZ3MsZS5lcnJvcnMsITApO3JldHVybnt0eXBlOjEyLGFuaW1hdGlvbjpkbCh0aGlzLGRNKHQuYW5pbWF0aW9uKSxlKSx0aW1pbmdzOmksb3B0aW9uczpudWxsfX19LGs1PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZXJyb3JzPXQsdGhpcy5xdWVyeUNvdW50PTAsdGhpcy5kZXBDb3VudD0wLHRoaXMuY3VycmVudFRyYW5zaXRpb249bnVsbCx0aGlzLmN1cnJlbnRRdWVyeT1udWxsLHRoaXMuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLHRoaXMub3B0aW9ucz1udWxsLHRoaXMudW5zdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzRm91bmQ9bmV3IFNldH19O2Z1bmN0aW9uIFJtKG4pe3JldHVybiBuPyhuPXlNKG4pKS5wYXJhbXMmJihuLnBhcmFtcz1mdW5jdGlvbihuKXtyZXR1cm4gbj95TShuKTpudWxsfShuLnBhcmFtcykpOm49e30sbn1mdW5jdGlvbiBNNShuLHQsZSl7cmV0dXJue2R1cmF0aW9uOm4sZGVsYXk6dCxlYXNpbmc6ZX19ZnVuY3Rpb24gWDUobix0LGUsaSxyLG8scz1udWxsLGE9ITEpe3JldHVybnt0eXBlOjEsZWxlbWVudDpuLGtleWZyYW1lczp0LHByZVN0eWxlUHJvcHM6ZSxwb3N0U3R5bGVQcm9wczppLGR1cmF0aW9uOnIsZGVsYXk6byx0b3RhbFRpbWU6citvLGVhc2luZzpzLHN1YlRpbWVsaW5lOmF9fXZhciBmTT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwfWdldCh0KXtyZXR1cm4gdGhpcy5fbWFwLmdldCh0KXx8W119YXBwZW5kKHQsZSl7bGV0IGk9dGhpcy5fbWFwLmdldCh0KTtpfHx0aGlzLl9tYXAuc2V0KHQsaT1bXSksaS5wdXNoKC4uLmUpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX0sSEFlPW5ldyBSZWdFeHAoIjplbnRlciIsImciKSx6QWU9bmV3IFJlZ0V4cCgiOmxlYXZlIiwiZyIpO2Z1bmN0aW9uIFlaKG4sdCxlLGkscixvPW5ldyBNYXAscz1uZXcgTWFwLGEsbCxjPVtdKXtyZXR1cm4obmV3IEY1KS5idWlsZEtleWZyYW1lcyhuLHQsZSxpLHIsbyxzLGEsbCxjKX12YXIgRjU9Y2xhc3N7YnVpbGRLZXlmcmFtZXModCxlLGkscixvLHMsYSxsLGMsdT1bXSl7Yz1jfHxuZXcgZk07bGV0IGQ9bmV3IG1NKHQsZSxjLHIsbyx1LFtdKTtkLm9wdGlvbnM9bDtsZXQgcD1sLmRlbGF5P3RwKGwuZGVsYXkpOjA7ZC5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcChwKSxkLmN1cnJlbnRUaW1lbGluZS5zZXRTdHlsZXMoW3NdLG51bGwsZC5lcnJvcnMsbCksZGwodGhpcyxpLGQpO2xldCBoPWQudGltZWxpbmVzLmZpbHRlcihmPT5mLmNvbnRhaW5zQW5pbWF0aW9uKCkpO2lmKGgubGVuZ3RoJiZhLnNpemUpe2xldCBmO2ZvcihsZXQgbT1oLmxlbmd0aC0xO20+PTA7bS0tKXtsZXQgeD1oW21dO2lmKHguZWxlbWVudD09PWUpe2Y9eDticmVha319ZiYmIWYuYWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKSYmZi5zZXRTdHlsZXMoW2FdLG51bGwsZC5lcnJvcnMsbCl9cmV0dXJuIGgubGVuZ3RoP2gubWFwKGY9PmYuYnVpbGRLZXlmcmFtZXMoKSk6W1g1KGUsW10sW10sW10sMCxwLCIiLCExKV19dmlzaXRUcmlnZ2VyKHQsZSl7fXZpc2l0U3RhdGUodCxlKXt9dmlzaXRUcmFuc2l0aW9uKHQsZSl7fXZpc2l0QW5pbWF0ZUNoaWxkKHQsZSl7bGV0IGk9ZS5zdWJJbnN0cnVjdGlvbnMuZ2V0KGUuZWxlbWVudCk7aWYoaSl7bGV0IHI9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyksbz1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxzPXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGkscixyLm9wdGlvbnMpO28hPXMmJmUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHMpfWUucHJldmlvdXNOb2RlPXR9dmlzaXRBbmltYXRlUmVmKHQsZSl7bGV0IGk9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyk7aS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSx0aGlzLl9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyhbdC5vcHRpb25zLHQuYW5pbWF0aW9uLm9wdGlvbnNdLGUsaSksdGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixpKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShpLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZS5wcmV2aW91c05vZGU9dH1fYXBwbHlBbmltYXRpb25SZWZEZWxheXModCxlLGkpe2ZvcihsZXQgciBvZiB0KXtsZXQgbz1yPy5kZWxheTtpZihvKXtsZXQgcz0ibnVtYmVyIj09dHlwZW9mIG8/bzp0cChoTShvLHI/LnBhcmFtcz8/e30sZS5lcnJvcnMpKTtpLmRlbGF5TmV4dFN0ZXAocyl9fX1fdmlzaXRTdWJJbnN0cnVjdGlvbnModCxlLGkpe2xldCBvPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLHM9bnVsbCE9aS5kdXJhdGlvbj90cChpLmR1cmF0aW9uKTpudWxsLGE9bnVsbCE9aS5kZWxheT90cChpLmRlbGF5KTpudWxsO3JldHVybiAwIT09cyYmdC5mb3JFYWNoKGw9PntsZXQgYz1lLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShsLHMsYSk7bz1NYXRoLm1heChvLGMuZHVyYXRpb24rYy5kZWxheSl9KSxvfXZpc2l0UmVmZXJlbmNlKHQsZSl7ZS51cGRhdGVPcHRpb25zKHQub3B0aW9ucywhMCksZGwodGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0U2VxdWVuY2UodCxlKXtsZXQgaT1lLnN1YkNvbnRleHRDb3VudCxyPWUsbz10Lm9wdGlvbnM7aWYobyYmKG8ucGFyYW1zfHxvLmRlbGF5KSYmKHI9ZS5jcmVhdGVTdWJDb250ZXh0KG8pLHIudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9by5kZWxheSkpezY9PXIucHJldmlvdXNOb2RlLnR5cGUmJihyLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxyLnByZXZpb3VzTm9kZT1oQSk7bGV0IHM9dHAoby5kZWxheSk7ci5kZWxheU5leHRTdGVwKHMpfXQuc3RlcHMubGVuZ3RoJiYodC5zdGVwcy5mb3JFYWNoKHM9PmRsKHRoaXMscyxyKSksci5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksci5zdWJDb250ZXh0Q291bnQ+aSYmci50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksZS5wcmV2aW91c05vZGU9dH12aXNpdEdyb3VwKHQsZSl7bGV0IGk9W10scj1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxvPXQub3B0aW9ucyYmdC5vcHRpb25zLmRlbGF5P3RwKHQub3B0aW9ucy5kZWxheSk6MDt0LnN0ZXBzLmZvckVhY2gocz0+e2xldCBhPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO28mJmEuZGVsYXlOZXh0U3RlcChvKSxkbCh0aGlzLHMsYSkscj1NYXRoLm1heChyLGEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxpLnB1c2goYS5jdXJyZW50VGltZWxpbmUpfSksaS5mb3JFYWNoKHM9PmUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMocykpLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHIpLGUucHJldmlvdXNOb2RlPXR9X3Zpc2l0VGltaW5nKHQsZSl7aWYodC5keW5hbWljKXtsZXQgaT10LnN0clZhbHVlO3JldHVybiB1QShlLnBhcmFtcz9oTShpLGUucGFyYW1zLGUuZXJyb3JzKTppLGUuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246dC5kdXJhdGlvbixkZWxheTp0LmRlbGF5LGVhc2luZzp0LmVhc2luZ319dmlzaXRBbmltYXRlKHQsZSl7bGV0IGk9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5fdmlzaXRUaW1pbmcodC50aW1pbmdzLGUpLHI9ZS5jdXJyZW50VGltZWxpbmU7aS5kZWxheSYmKGUuaW5jcmVtZW50VGltZShpLmRlbGF5KSxyLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTtsZXQgbz10LnN0eWxlOzU9PW8udHlwZT90aGlzLnZpc2l0S2V5ZnJhbWVzKG8sZSk6KGUuaW5jcmVtZW50VGltZShpLmR1cmF0aW9uKSx0aGlzLnZpc2l0U3R5bGUobyxlKSxyLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpKSxlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLGUucHJldmlvdXNOb2RlPXR9dmlzaXRTdHlsZSh0LGUpe2xldCBpPWUuY3VycmVudFRpbWVsaW5lLHI9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IXImJmkuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpJiZpLmZvcndhcmRGcmFtZSgpO2xldCBvPXImJnIuZWFzaW5nfHx0LmVhc2luZzt0LmlzRW1wdHlTdGVwP2kuYXBwbHlFbXB0eVN0ZXAobyk6aS5zZXRTdHlsZXModC5zdHlsZXMsbyxlLmVycm9ycyxlLm9wdGlvbnMpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRLZXlmcmFtZXModCxlKXtsZXQgaT1lLmN1cnJlbnRBbmltYXRlVGltaW5ncyxyPWUuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uLG89aS5kdXJhdGlvbixhPWUuY3JlYXRlU3ViQ29udGV4dCgpLmN1cnJlbnRUaW1lbGluZTthLmVhc2luZz1pLmVhc2luZyx0LnN0eWxlcy5mb3JFYWNoKGw9PnthLmZvcndhcmRUaW1lKChsLm9mZnNldHx8MCkqbyksYS5zZXRTdHlsZXMobC5zdHlsZXMsbC5lYXNpbmcsZS5lcnJvcnMsZS5vcHRpb25zKSxhLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSksZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhhKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShyK28pLGUucHJldmlvdXNOb2RlPXR9dmlzaXRRdWVyeSh0LGUpe2xldCBpPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLHI9dC5vcHRpb25zfHx7fSxvPXIuZGVsYXk/dHAoci5kZWxheSk6MDtvJiYoNj09PWUucHJldmlvdXNOb2RlLnR5cGV8fDA9PWkmJmUuY3VycmVudFRpbWVsaW5lLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSkmJihlLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxlLnByZXZpb3VzTm9kZT1oQSk7bGV0IHM9aSxhPWUuaW52b2tlUXVlcnkodC5zZWxlY3Rvcix0Lm9yaWdpbmFsU2VsZWN0b3IsdC5saW1pdCx0LmluY2x1ZGVTZWxmLCEhci5vcHRpb25hbCxlLmVycm9ycyk7ZS5jdXJyZW50UXVlcnlUb3RhbD1hLmxlbmd0aDtsZXQgbD1udWxsO2EuZm9yRWFjaCgoYyx1KT0+e2UuY3VycmVudFF1ZXJ5SW5kZXg9dTtsZXQgZD1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zLGMpO28mJmQuZGVsYXlOZXh0U3RlcChvKSxjPT09ZS5lbGVtZW50JiYobD1kLmN1cnJlbnRUaW1lbGluZSksZGwodGhpcyx0LmFuaW1hdGlvbixkKSxkLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxzPU1hdGgubWF4KHMsZC5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpfSksZS5jdXJyZW50UXVlcnlJbmRleD0wLGUuY3VycmVudFF1ZXJ5VG90YWw9MCxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShzKSxsJiYoZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhsKSxlLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSksZS5wcmV2aW91c05vZGU9dH12aXNpdFN0YWdnZXIodCxlKXtsZXQgaT1lLnBhcmVudENvbnRleHQscj1lLmN1cnJlbnRUaW1lbGluZSxvPXQudGltaW5ncyxzPU1hdGguYWJzKG8uZHVyYXRpb24pLGE9cyooZS5jdXJyZW50UXVlcnlUb3RhbC0xKSxsPXMqZS5jdXJyZW50UXVlcnlJbmRleDtzd2l0Y2goby5kdXJhdGlvbjwwPyJyZXZlcnNlIjpvLmVhc2luZyl7Y2FzZSJyZXZlcnNlIjpsPWEtbDticmVhaztjYXNlImZ1bGwiOmw9aS5jdXJyZW50U3RhZ2dlclRpbWV9bGV0IHU9ZS5jdXJyZW50VGltZWxpbmU7bCYmdS5kZWxheU5leHRTdGVwKGwpO2xldCBkPXUuY3VycmVudFRpbWU7ZGwodGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10LGkuY3VycmVudFN0YWdnZXJUaW1lPXIuY3VycmVudFRpbWUtZCsoci5zdGFydFRpbWUtaS5jdXJyZW50VGltZWxpbmUuc3RhcnRUaW1lKX19LGhBPXt9LG1NPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCl7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdWJJbnN0cnVjdGlvbnM9aSx0aGlzLl9lbnRlckNsYXNzTmFtZT1yLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPW8sdGhpcy5lcnJvcnM9cyx0aGlzLnRpbWVsaW5lcz1hLHRoaXMucGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9aEEsdGhpcy5zdWJDb250ZXh0Q291bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlzLmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPWx8fG5ldyBHXyh0aGlzLl9kcml2ZXIsZSwwKSxhLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpfWdldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc311cGRhdGVPcHRpb25zKHQsZSl7aWYoIXQpcmV0dXJuO2xldCBpPXQscj10aGlzLm9wdGlvbnM7bnVsbCE9aS5kdXJhdGlvbiYmKHIuZHVyYXRpb249dHAoaS5kdXJhdGlvbikpLG51bGwhPWkuZGVsYXkmJihyLmRlbGF5PXRwKGkuZGVsYXkpKTtsZXQgbz1pLnBhcmFtcztpZihvKXtsZXQgcz1yLnBhcmFtcztzfHwocz10aGlzLm9wdGlvbnMucGFyYW1zPXt9KSxPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGE9PnsoIWV8fCFzLmhhc093blByb3BlcnR5KGEpKSYmKHNbYV09aE0ob1thXSxzLHRoaXMuZXJyb3JzKSl9KX19X2NvcHlPcHRpb25zKCl7bGV0IHQ9e307aWYodGhpcy5vcHRpb25zKXtsZXQgZT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGUpe2xldCBpPXQucGFyYW1zPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2gocj0+e2lbcl09ZVtyXX0pfX1yZXR1cm4gdH1jcmVhdGVTdWJDb250ZXh0KHQ9bnVsbCxlLGkpe2xldCByPWV8fHRoaXMuZWxlbWVudCxvPW5ldyBtTSh0aGlzLl9kcml2ZXIscix0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHIsaXx8MCkpO3JldHVybiBvLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxvLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxvLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxvLnVwZGF0ZU9wdGlvbnModCksby5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LG8uY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxvLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLG99dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHQpe3JldHVybiB0aGlzLnByZXZpb3VzTm9kZT1oQSx0aGlzLmN1cnJlbnRUaW1lbGluZT10aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHRoaXMuZWxlbWVudCx0KSx0aGlzLnRpbWVsaW5lcy5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKSx0aGlzLmN1cnJlbnRUaW1lbGluZX1hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUodCxlLGkpe2xldCByPXtkdXJhdGlvbjplPz90LmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhpPz8wKSt0LmRlbGF5LGVhc2luZzoiIn0sbz1uZXcgTjUodGhpcy5fZHJpdmVyLHQuZWxlbWVudCx0LmtleWZyYW1lcyx0LnByZVN0eWxlUHJvcHMsdC5wb3N0U3R5bGVQcm9wcyxyLHQuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUpO3JldHVybiB0aGlzLnRpbWVsaW5lcy5wdXNoKG8pLHJ9aW5jcmVtZW50VGltZSh0KXt0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbit0KX1kZWxheU5leHRTdGVwKHQpe3Q+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcCh0KX1pbnZva2VRdWVyeSh0LGUsaSxyLG8scyl7bGV0IGE9W107aWYociYmYS5wdXNoKHRoaXMuZWxlbWVudCksdC5sZW5ndGg+MCl7dD0odD10LnJlcGxhY2UoSEFlLCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UoekFlLCIuIit0aGlzLl9sZWF2ZUNsYXNzTmFtZSk7bGV0IGM9dGhpcy5fZHJpdmVyLnF1ZXJ5KHRoaXMuZWxlbWVudCx0LDEhPWkpOzAhPT1pJiYoYz1pPDA/Yy5zbGljZShjLmxlbmd0aCtpLGMubGVuZ3RoKTpjLnNsaWNlKDAsaSkpLGEucHVzaCguLi5jKX1yZXR1cm4hbyYmMD09YS5sZW5ndGgmJnMucHVzaChuZXcgQXQoMzAxNCwhMSkpLGF9fSxHXz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl9kcml2ZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLnN0YXJ0VGltZT1pLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1yLHRoaXMuZHVyYXRpb249MCx0aGlzLl9wcmV2aW91c0tleWZyYW1lPW5ldyBNYXAsdGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzPW5ldyBNYXAsdGhpcy5fc3R5bGVTdW1tYXJ5PW5ldyBNYXAsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdTdHlsZXM9bmV3IE1hcCx0aGlzLl9iYWNrRmlsbD1uZXcgTWFwLHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuZ2V0KGUpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzfHwodGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuc2V0KGUsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcykpLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWNvbnRhaW5zQW5pbWF0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKTtkZWZhdWx0OnJldHVybiEwfX1oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zaXplPjB9Z2V0IGN1cnJlbnRUaW1lKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259ZGVsYXlOZXh0U3RlcCh0KXtsZXQgZT0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJnRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZTt0aGlzLmR1cmF0aW9ufHxlPyh0aGlzLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWUrdCksZSYmdGhpcy5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk6dGhpcy5zdGFydFRpbWUrPXR9Zm9yayh0LGUpe3JldHVybiB0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG5ldyBHXyh0aGlzLl9kcml2ZXIsdCxlfHx0aGlzLmN1cnJlbnRUaW1lLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cCl9X2xvYWRLZXlmcmFtZSgpe3RoaXMuX2N1cnJlbnRLZXlmcmFtZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9dGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWV8fCh0aGlzLl9jdXJyZW50S2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9rZXlmcmFtZXMuc2V0KHRoaXMuZHVyYXRpb24sdGhpcy5fY3VycmVudEtleWZyYW1lKSl9Zm9yd2FyZEZyYW1lKCl7dGhpcy5kdXJhdGlvbis9MSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1mb3J3YXJkVGltZSh0KXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249dCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1fdXBkYXRlU3R5bGUodCxlKXt0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLnNldCh0LGUpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLnNldCh0LGUpLHRoaXMuX3N0eWxlU3VtbWFyeS5zZXQodCx7dGltZTp0aGlzLmN1cnJlbnRUaW1lLHZhbHVlOmV9KX1hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpe3JldHVybiB0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWUhPT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9YXBwbHlFbXB0eVN0ZXAodCl7dCYmdGhpcy5fcHJldmlvdXNLZXlmcmFtZS5zZXQoImVhc2luZyIsdCk7Zm9yKGxldFtlLGldb2YgdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpdGhpcy5fYmFja0ZpbGwuc2V0KGUsaXx8anUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoZSxqdSk7dGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZX1zZXRTdHlsZXModCxlLGkscil7ZSYmdGhpcy5fcHJldmlvdXNLZXlmcmFtZS5zZXQoImVhc2luZyIsZSk7bGV0IG89ciYmci5wYXJhbXN8fHt9LHM9ZnVuY3Rpb24obix0KXtsZXQgaSxlPW5ldyBNYXA7cmV0dXJuIG4uZm9yRWFjaChyPT57aWYoIioiPT09cil7aT1pfHx0LmtleXMoKTtmb3IobGV0IG8gb2YgaSllLnNldChvLGp1KX1lbHNlIGpfKHIsZSl9KSxlfSh0LHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKTtmb3IobGV0W2EsbF1vZiBzKXtsZXQgYz1oTShsLG8saSk7dGhpcy5fcGVuZGluZ1N0eWxlcy5zZXQoYSxjKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmhhcyhhKXx8dGhpcy5fYmFja0ZpbGwuc2V0KGEsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuZ2V0KGEpPz9qdSksdGhpcy5fdXBkYXRlU3R5bGUoYSxjKX19YXBwbHlTdHlsZXNUb0tleWZyYW1lKCl7MCE9dGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplJiYodGhpcy5fcGVuZGluZ1N0eWxlcy5mb3JFYWNoKCh0LGUpPT57dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChlLHQpfSksdGhpcy5fcGVuZGluZ1N0eWxlcy5jbGVhcigpLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuZm9yRWFjaCgodCxlKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5oYXMoZSl8fHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoZSx0KX0pKX1zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKXtmb3IobGV0W3QsZV1vZiB0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KHQsZSksdGhpcy5fdXBkYXRlU3R5bGUodCxlKX1nZXRGaW5hbEtleWZyYW1lKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbil9Z2V0IHByb3BlcnRpZXMoKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gdGhpcy5fY3VycmVudEtleWZyYW1lKXQucHVzaChlKTtyZXR1cm4gdH1tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHQpe3QuX3N0eWxlU3VtbWFyeS5mb3JFYWNoKChlLGkpPT57bGV0IHI9dGhpcy5fc3R5bGVTdW1tYXJ5LmdldChpKTsoIXJ8fGUudGltZT5yLnRpbWUpJiZ0aGlzLl91cGRhdGVTdHlsZShpLGUudmFsdWUpfSl9YnVpbGRLZXlmcmFtZXMoKXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpO2xldCB0PW5ldyBTZXQsZT1uZXcgU2V0LGk9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiYwPT09dGhpcy5kdXJhdGlvbixyPVtdO3RoaXMuX2tleWZyYW1lcy5mb3JFYWNoKChhLGwpPT57bGV0IGM9al8oYSxuZXcgTWFwLHRoaXMuX2JhY2tGaWxsKTtjLmZvckVhY2goKHUsZCk9PnsiISI9PT11P3QuYWRkKGQpOnU9PT1qdSYmZS5hZGQoZCl9KSxpfHxjLnNldCgib2Zmc2V0IixsL3RoaXMuZHVyYXRpb24pLHIucHVzaChjKX0pO2xldCBvPXQuc2l6ZT9kQSh0LnZhbHVlcygpKTpbXSxzPWUuc2l6ZT9kQShlLnZhbHVlcygpKTpbXTtpZihpKXtsZXQgYT1yWzBdLGw9bmV3IE1hcChhKTthLnNldCgib2Zmc2V0IiwwKSxsLnNldCgib2Zmc2V0IiwxKSxyPVthLGxdfXJldHVybiBYNSh0aGlzLmVsZW1lbnQscixvLHMsdGhpcy5kdXJhdGlvbix0aGlzLnN0YXJ0VGltZSx0aGlzLmVhc2luZywhMSl9fSxONT1jbGFzcyBleHRlbmRzIEdfe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGE9ITEpe3N1cGVyKHQsZSxzLmRlbGF5KSx0aGlzLmtleWZyYW1lcz1pLHRoaXMucHJlU3R5bGVQcm9wcz1yLHRoaXMucG9zdFN0eWxlUHJvcHM9byx0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT1hLHRoaXMudGltaW5ncz17ZHVyYXRpb246cy5kdXJhdGlvbixkZWxheTpzLmRlbGF5LGVhc2luZzpzLmVhc2luZ319Y29udGFpbnNBbmltYXRpb24oKXtyZXR1cm4gdGhpcy5rZXlmcmFtZXMubGVuZ3RoPjF9YnVpbGRLZXlmcmFtZXMoKXtsZXQgdD10aGlzLmtleWZyYW1lcyx7ZGVsYXk6ZSxkdXJhdGlvbjppLGVhc2luZzpyfT10aGlzLnRpbWluZ3M7aWYodGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUmJmUpe2xldCBvPVtdLHM9aStlLGE9ZS9zLGw9al8odFswXSk7bC5zZXQoIm9mZnNldCIsMCksby5wdXNoKGwpO2xldCBjPWpfKHRbMF0pO2Muc2V0KCJvZmZzZXQiLHdaKGEpKSxvLnB1c2goYyk7bGV0IHU9dC5sZW5ndGgtMTtmb3IobGV0IGQ9MTtkPD11O2QrKyl7bGV0IHA9al8odFtkXSksaD1wLmdldCgib2Zmc2V0Iik7cC5zZXQoIm9mZnNldCIsd1ooKGUraCppKS9zKSksby5wdXNoKHApfWk9cyxlPTAscj0iIix0PW99cmV0dXJuIFg1KHRoaXMuZWxlbWVudCx0LHRoaXMucHJlU3R5bGVQcm9wcyx0aGlzLnBvc3RTdHlsZVByb3BzLGksZSxyLCEwKX19O2Z1bmN0aW9uIHdaKG4sdD0zKXtsZXQgZT1NYXRoLnBvdygxMCx0LTEpO3JldHVybiBNYXRoLnJvdW5kKG4qZSkvZX12YXIga209Y2xhc3N7fSxHQWU9bmV3IFNldChbIndpZHRoIiwiaGVpZ2h0IiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImxlZnQiLCJ0b3AiLCJib3R0b20iLCJyaWdodCIsImZvbnRTaXplIiwib3V0bGluZVdpZHRoIiwib3V0bGluZU9mZnNldCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nUmlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwibWFyZ2luQm90dG9tIiwibWFyZ2luUmlnaHQiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJXaWR0aCIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwidGV4dEluZGVudCIsInBlcnNwZWN0aXZlIl0pLGZBPWNsYXNzIGV4dGVuZHMga217bm9ybWFsaXplUHJvcGVydHlOYW1lKHQsZSl7cmV0dXJuIFk1KHQpfW5vcm1hbGl6ZVN0eWxlVmFsdWUodCxlLGkscil7bGV0IG89IiIscz1pLnRvU3RyaW5nKCkudHJpbSgpO2lmKEdBZS5oYXMoZSkmJjAhPT1pJiYiMCIhPT1pKWlmKCJudW1iZXIiPT10eXBlb2YgaSlvPSJweCI7ZWxzZXtsZXQgYT1pLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7YSYmMD09YVsxXS5sZW5ndGgmJnIucHVzaChuZXcgQXQoMzAwNSwhMSkpfXJldHVybiBzK299fTtmdW5jdGlvbiBTWihuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6bix0cmlnZ2VyTmFtZTp0LGlzUmVtb3ZhbFRyYW5zaXRpb246cixmcm9tU3RhdGU6ZSxmcm9tU3R5bGVzOm8sdG9TdGF0ZTppLHRvU3R5bGVzOnMsdGltZWxpbmVzOmEscXVlcmllZEVsZW1lbnRzOmwscHJlU3R5bGVQcm9wczpjLHBvc3RTdHlsZVByb3BzOnUsdG90YWxUaW1lOmQsZXJyb3JzOnB9fXZhciB3NT17fSxtQT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5fdHJpZ2dlck5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX3N0YXRlU3R5bGVzPWl9bWF0Y2godCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJuIG4uc29tZShvPT5vKHQsZSxpLHIpKX0odGhpcy5hc3QubWF0Y2hlcnMsdCxlLGkscil9YnVpbGRTdHlsZXModCxlLGkpe2xldCByPXRoaXMuX3N0YXRlU3R5bGVzLmdldCgiKiIpO3JldHVybiB2b2lkIDAhPT10JiYocj10aGlzLl9zdGF0ZVN0eWxlcy5nZXQodD8udG9TdHJpbmcoKSl8fHIpLHI/ci5idWlsZFN0eWxlcyhlLGkpOm5ldyBNYXB9YnVpbGQodCxlLGkscixvLHMsYSxsLGMsdSl7bGV0IGQ9W10scD10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8dzUsZj10aGlzLmJ1aWxkU3R5bGVzKGksYSYmYS5wYXJhbXN8fHc1LGQpLG09bCYmbC5wYXJhbXN8fHc1LHg9dGhpcy5idWlsZFN0eWxlcyhyLG0sZCksZz1uZXcgU2V0LGI9bmV3IE1hcCxEPW5ldyBNYXAsVD0idm9pZCI9PT1yLGs9e3BhcmFtczpxQWUobSxwKSxkZWxheTp0aGlzLmFzdC5vcHRpb25zPy5kZWxheX0sWj11P1tdOllaKHQsZSx0aGlzLmFzdC5hbmltYXRpb24sbyxzLGYseCxrLGMsZCksej0wO2lmKFouZm9yRWFjaCh1ZT0+e3o9TWF0aC5tYXgodWUuZHVyYXRpb24rdWUuZGVsYXkseil9KSxkLmxlbmd0aClyZXR1cm4gU1ooZSx0aGlzLl90cmlnZ2VyTmFtZSxpLHIsVCxmLHgsW10sW10sYixELHosZCk7Wi5mb3JFYWNoKHVlPT57bGV0IGhlPXVlLmVsZW1lbnQsdz1wbChiLGhlLG5ldyBTZXQpO3VlLnByZVN0eWxlUHJvcHMuZm9yRWFjaChxPT53LmFkZChxKSk7bGV0IEY9cGwoRCxoZSxuZXcgU2V0KTt1ZS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKHE9PkYuYWRkKHEpKSxoZSE9PWUmJmcuYWRkKGhlKX0pO2xldCBmZT1kQShnLnZhbHVlcygpKTtyZXR1cm4gU1ooZSx0aGlzLl90cmlnZ2VyTmFtZSxpLHIsVCxmLHgsWixmZSxiLEQseil9fTtmdW5jdGlvbiBxQWUobix0KXtsZXQgZT15TSh0KTtmb3IobGV0IGkgaW4gbiluLmhhc093blByb3BlcnR5KGkpJiZudWxsIT1uW2ldJiYoZVtpXT1uW2ldKTtyZXR1cm4gZX1mdW5jdGlvbiBFWihuLHQsZSl7bi5oYXModCk/bi5oYXMoZSl8fG4uc2V0KGUsbi5nZXQodCkpOm4uaGFzKGUpJiZuLnNldCh0LG4uZ2V0KGUpKX12YXIgUUFlPW5ldyBmTSxUWj0ibmctYW5pbWF0ZS1xdWV1ZWQiLFM1PSJuZy1hbmltYXRlLWRpc2FibGVkIixlSWU9W10sWFo9e25hbWVzcGFjZUlkOiIiLHNldEZvclJlbW92YWw6ITEsc2V0Rm9yTW92ZTohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITF9LHRJZT17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yTW92ZTohMSxzZXRGb3JSZW1vdmFsOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMH0sS2w9Il9fbmdfcmVtb3ZlZCIsZ009Y2xhc3N7Y29uc3RydWN0b3IodCxlPSIiKXt0aGlzLm5hbWVzcGFjZUlkPWU7bGV0IGk9dCYmdC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKTtpZih0aGlzLnZhbHVlPWZ1bmN0aW9uKG4pe3JldHVybiBuPz9udWxsfShpP3QudmFsdWU6dCksaSl7bGV0IG89eU0odCk7ZGVsZXRlIG8udmFsdWUsdGhpcy5vcHRpb25zPW99ZWxzZSB0aGlzLm9wdGlvbnM9e307dGhpcy5vcHRpb25zLnBhcmFtc3x8KHRoaXMub3B0aW9ucy5wYXJhbXM9e30pfWdldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc31hYnNvcmJPcHRpb25zKHQpe2xldCBlPXQucGFyYW1zO2lmKGUpe2xldCBpPXRoaXMub3B0aW9ucy5wYXJhbXM7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChyPT57bnVsbD09aVtyXSYmKGlbcl09ZVtyXSl9KX19fSxwTT0idm9pZCIsRTU9bmV3IGdNKHBNKSxfTT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5uYW1lc3BhY2VJZD10LHRoaXMudHJpZ2dlck5hbWU9ZSx0aGlzLmVsZW1lbnQ9aSx0aGlzLl9wbGF5ZXI9bmV3IGRoLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9bmV3IE1hcCx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLm1hcmtlZEZvckRlc3Ryb3k9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnF1ZXVlZD0hMCx0aGlzLnRvdGFsVGltZT0wfXNldFJlYWxQbGF5ZXIodCl7dGhpcy5fY29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVyPXQsdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmZvckVhY2goKGUsaSk9PntlLmZvckVhY2gocj0+ajUodCxpLHZvaWQgMCxyKSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuY2xlYXIoKSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFsVGltZSh0LnRvdGFsVGltZSksdGhpcy5xdWV1ZWQ9ITEpfWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4gdGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKHQpe3RoaXMudG90YWxUaW1lPXR9c3luY1BsYXllckV2ZW50cyh0KXtsZXQgZT10aGlzLl9wbGF5ZXI7ZS50cmlnZ2VyQ2FsbGJhY2smJnQub25TdGFydCgoKT0+ZS50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0IikpLHQub25Eb25lKCgpPT50aGlzLmZpbmlzaCgpKSx0Lm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KCkpfV9xdWV1ZUV2ZW50KHQsZSl7cGwodGhpcy5fcXVldWVkQ2FsbGJhY2tzLHQsW10pLnB1c2goZSl9b25Eb25lKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIix0KSx0aGlzLl9wbGF5ZXIub25Eb25lKHQpfW9uU3RhcnQodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoInN0YXJ0Iix0KSx0aGlzLl9wbGF5ZXIub25TdGFydCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLHQpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3kodCl9aW5pdCgpe3RoaXMuX3BsYXllci5pbml0KCl9aGFzU3RhcnRlZCgpe3JldHVybiF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLmhhc1N0YXJ0ZWQoKX1wbGF5KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfXBhdXNlKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGF1c2UoKX1yZXN0YXJ0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzdGFydCgpfWZpbmlzaCgpe3RoaXMuX3BsYXllci5maW5pc2goKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX1yZXNldCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc2V0KCl9c2V0UG9zaXRpb24odCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbih0KX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT10aGlzLl9wbGF5ZXI7ZS50cmlnZ2VyQ2FsbGJhY2smJmUudHJpZ2dlckNhbGxiYWNrKHQpfX07ZnVuY3Rpb24gbEEobil7cmV0dXJuIG4mJjE9PT1uLm5vZGVUeXBlfWZ1bmN0aW9uIERaKG4sdCl7bGV0IGU9bi5zdHlsZS5kaXNwbGF5O3JldHVybiBuLnN0eWxlLmRpc3BsYXk9dD8/Im5vbmUiLGV9ZnVuY3Rpb24gQVoobix0LGUsaSxyKXtsZXQgbz1bXTtlLmZvckVhY2gobD0+by5wdXNoKERaKGwpKSk7bGV0IHM9W107aS5mb3JFYWNoKChsLGMpPT57bGV0IHU9bmV3IE1hcDtsLmZvckVhY2goZD0+e2xldCBwPXQuY29tcHV0ZVN0eWxlKGMsZCxyKTt1LnNldChkLHApLCghcHx8MD09cC5sZW5ndGgpJiYoY1tLbF09dEllLHMucHVzaChjKSl9KSxuLnNldChjLHUpfSk7bGV0IGE9MDtyZXR1cm4gZS5mb3JFYWNoKGw9PkRaKGwsb1thKytdKSksc31mdW5jdGlvbiBJWihuLHQpe2xldCBlPW5ldyBNYXA7aWYobi5mb3JFYWNoKGE9PmUuc2V0KGEsW10pKSwwPT10Lmxlbmd0aClyZXR1cm4gZTtsZXQgcj1uZXcgU2V0KHQpLG89bmV3IE1hcDtmdW5jdGlvbiBzKGEpe2lmKCFhKXJldHVybiAxO2xldCBsPW8uZ2V0KGEpO2lmKGwpcmV0dXJuIGw7bGV0IGM9YS5wYXJlbnROb2RlO3JldHVybiBsPWUuaGFzKGMpP2M6ci5oYXMoYyk/MTpzKGMpLG8uc2V0KGEsbCksbH1yZXR1cm4gdC5mb3JFYWNoKGE9PntsZXQgbD1zKGEpOzEhPT1sJiZlLmdldChsKS5wdXNoKGEpfSksZX1mdW5jdGlvbiBabChuLHQpe24uY2xhc3NMaXN0Py5hZGQodCl9ZnVuY3Rpb24gel8obix0KXtuLmNsYXNzTGlzdD8ucmVtb3ZlKHQpfWZ1bmN0aW9uIG9JZShuLHQsZSl7cGgoZSkub25Eb25lKCgpPT5uLnByb2Nlc3NMZWF2ZU5vZGUodCkpfWZ1bmN0aW9uIFFaKG4sdCl7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07aSBpbnN0YW5jZW9mIHVNP1FaKGkucGxheWVycyx0KTp0LnB1c2goaSl9fWZ1bmN0aW9uIFBaKG4sdCxlKXtsZXQgaT1lLmdldChuKTtpZighaSlyZXR1cm4hMTtsZXQgcj10LmdldChuKTtyZXR1cm4gcj9pLmZvckVhY2gobz0+ci5hZGQobykpOnQuc2V0KG4saSksZS5kZWxldGUobiksITB9dmFyIGhoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5fZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMuX3RyaWdnZXJDYWNoZT17fSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShyLG8pPT57fSx0aGlzLl90cmFuc2l0aW9uRW5naW5lPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5ib2R5Tm9kZT10LHRoaXMuZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMucGxheWVycz1bXSx0aGlzLm5ld0hvc3RFbGVtZW50cz1uZXcgTWFwLHRoaXMucGxheWVyc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQ9bmV3IE1hcCx0aGlzLnN0YXRlc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMuZGlzYWJsZWROb2Rlcz1uZXcgU2V0LHRoaXMudG90YWxBbmltYXRpb25zPTAsdGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLl9uYW1lc3BhY2VMb29rdXA9e30sdGhpcy5fbmFtZXNwYWNlTGlzdD1bXSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnM9W10sdGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudD1uZXcgTWFwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cz1bXSx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHM9W10sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0ocixvKT0+e319X29uUmVtb3ZhbENvbXBsZXRlKHQsZSl7dGhpcy5vblJlbW92YWxDb21wbGV0ZSh0LGUpfWdldCBxdWV1ZWRQbGF5ZXJzKCl7bGV0IHQ9W107cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxpc3QuZm9yRWFjaChlPT57ZS5wbGF5ZXJzLmZvckVhY2goaT0+e2kucXVldWVkJiZ0LnB1c2goaSl9KX0pLHR9Y3JlYXRlTmFtZXNwYWNlKHQsZSl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmlkPXQsdGhpcy5ob3N0RWxlbWVudD1lLHRoaXMuX2VuZ2luZT1pLHRoaXMucGxheWVycz1bXSx0aGlzLl90cmlnZ2Vycz1uZXcgTWFwLHRoaXMuX3F1ZXVlPVtdLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnM9bmV3IE1hcCx0aGlzLl9ob3N0Q2xhc3NOYW1lPSJuZy10bnMtIit0LFpsKGUsdGhpcy5faG9zdENsYXNzTmFtZSl9bGlzdGVuKHQsZSxpLHIpe2lmKCF0aGlzLl90cmlnZ2Vycy5oYXMoZSkpdGhyb3cgbmV3IEF0KDMzMDIsITEpO2lmKG51bGw9PWl8fDA9PWkubGVuZ3RoKXRocm93IG5ldyBBdCgzMzAzLCExKTtpZighZnVuY3Rpb24obil7cmV0dXJuInN0YXJ0Ij09bnx8ImRvbmUiPT1ufShpKSl0aHJvdyBuZXcgQXQoMzQwMCwhMSk7bGV0IG89cGwodGhpcy5fZWxlbWVudExpc3RlbmVycyx0LFtdKSxzPXtuYW1lOmUscGhhc2U6aSxjYWxsYmFjazpyfTtvLnB1c2gocyk7bGV0IGE9cGwodGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudCx0LG5ldyBNYXApO3JldHVybiBhLmhhcyhlKXx8KFpsKHQsb0EpLFpsKHQsb0ErIi0iK2UpLGEuc2V0KGUsRTUpKSwoKT0+e3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57bGV0IGw9by5pbmRleE9mKHMpO2w+PTAmJm8uc3BsaWNlKGwsMSksdGhpcy5fdHJpZ2dlcnMuaGFzKGUpfHxhLmRlbGV0ZShlKX0pfX1yZWdpc3Rlcih0LGUpe3JldHVybiF0aGlzLl90cmlnZ2Vycy5oYXModCkmJih0aGlzLl90cmlnZ2Vycy5zZXQodCxlKSwhMCl9X2dldFRyaWdnZXIodCl7bGV0IGU9dGhpcy5fdHJpZ2dlcnMuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyBBdCgzNDAxLCExKTtyZXR1cm4gZX10cmlnZ2VyKHQsZSxpLHI9ITApe2xldCBvPXRoaXMuX2dldFRyaWdnZXIoZSkscz1uZXcgX00odGhpcy5pZCxlLHQpLGE9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7YXx8KFpsKHQsb0EpLFpsKHQsb0ErIi0iK2UpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuc2V0KHQsYT1uZXcgTWFwKSk7bGV0IGw9YS5nZXQoZSksYz1uZXcgZ00oaSx0aGlzLmlkKTtpZighKGkmJmkuaGFzT3duUHJvcGVydHkoInZhbHVlIikpJiZsJiZjLmFic29yYk9wdGlvbnMobC5vcHRpb25zKSxhLnNldChlLGMpLGx8fChsPUU1KSxjLnZhbHVlIT09cE0mJmwudmFsdWU9PT1jLnZhbHVlKXtpZighZnVuY3Rpb24obix0KXtsZXQgZT1PYmplY3Qua2V5cyhuKSxpPU9iamVjdC5rZXlzKHQpO2lmKGUubGVuZ3RoIT1pLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG89ZVtyXTtpZighdC5oYXNPd25Qcm9wZXJ0eShvKXx8bltvXSE9PXRbb10pcmV0dXJuITF9cmV0dXJuITB9KGwucGFyYW1zLGMucGFyYW1zKSl7bGV0IG09W10seD1vLm1hdGNoU3R5bGVzKGwudmFsdWUsbC5wYXJhbXMsbSksZz1vLm1hdGNoU3R5bGVzKGMudmFsdWUsYy5wYXJhbXMsbSk7bS5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKG0pOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57T20odCx4KSxHdSh0LGcpfSl9cmV0dXJufWxldCBwPXBsKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LHQsW10pO3AuZm9yRWFjaChtPT57bS5uYW1lc3BhY2VJZD09dGhpcy5pZCYmbS50cmlnZ2VyTmFtZT09ZSYmbS5xdWV1ZWQmJm0uZGVzdHJveSgpfSk7bGV0IGg9by5tYXRjaFRyYW5zaXRpb24obC52YWx1ZSxjLnZhbHVlLHQsYy5wYXJhbXMpLGY9ITE7aWYoIWgpe2lmKCFyKXJldHVybjtoPW8uZmFsbGJhY2tUcmFuc2l0aW9uLGY9ITB9cmV0dXJuIHRoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSx0cmFuc2l0aW9uOmgsZnJvbVN0YXRlOmwsdG9TdGF0ZTpjLHBsYXllcjpzLGlzRmFsbGJhY2tUcmFuc2l0aW9uOmZ9KSxmfHwoWmwodCxUWikscy5vblN0YXJ0KCgpPT57el8odCxUWil9KSkscy5vbkRvbmUoKCk9PntsZXQgbT10aGlzLnBsYXllcnMuaW5kZXhPZihzKTttPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKG0sMSk7bGV0IHg9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKHgpe2xldCBnPXguaW5kZXhPZihzKTtnPj0wJiZ4LnNwbGljZShnLDEpfX0pLHRoaXMucGxheWVycy5wdXNoKHMpLHAucHVzaChzKSxzfWRlcmVnaXN0ZXIodCl7dGhpcy5fdHJpZ2dlcnMuZGVsZXRlKHQpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZm9yRWFjaChlPT5lLmRlbGV0ZSh0KSksdGhpcy5fZWxlbWVudExpc3RlbmVycy5mb3JFYWNoKChlLGkpPT57dGhpcy5fZWxlbWVudExpc3RlbmVycy5zZXQoaSxlLmZpbHRlcihyPT5yLm5hbWUhPXQpKX0pfWNsZWFyRWxlbWVudENhY2hlKHQpe3RoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZGVsZXRlKHQpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZGVsZXRlKHQpO2xldCBlPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiYoZS5mb3JFYWNoKGk9PmkuZGVzdHJveSgpKSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUodCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0LGUpe2xldCBpPXRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkodCxjQSwhMCk7aS5mb3JFYWNoKHI9PntpZihyW0tsXSlyZXR1cm47bGV0IG89dGhpcy5fZW5naW5lLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudChyKTtvLnNpemU/by5mb3JFYWNoKHM9PnMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHIsZSwhMSwhMCkpOnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUocil9KSx0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT5pLmZvckVhY2gocj0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZShyKSkpfXRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsaSxyKXtsZXQgbz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KSxzPW5ldyBNYXA7aWYobyl7bGV0IGE9W107aWYoby5mb3JFYWNoKChsLGMpPT57aWYocy5zZXQoYyxsLnZhbHVlKSx0aGlzLl90cmlnZ2Vycy5oYXMoYykpe2xldCB1PXRoaXMudHJpZ2dlcih0LGMscE0scik7dSYmYS5wdXNoKHUpfX0pLGEubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCEwLGUscyksaSYmcGgoYSkub25Eb25lKCgpPT50aGlzLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZSh0KSksITB9cmV0dXJuITF9cHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpe2xldCBlPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KHQpLGk9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYoZSYmaSl7bGV0IHI9bmV3IFNldDtlLmZvckVhY2gobz0+e2xldCBzPW8ubmFtZTtpZihyLmhhcyhzKSlyZXR1cm47ci5hZGQocyk7bGV0IGw9dGhpcy5fdHJpZ2dlcnMuZ2V0KHMpLmZhbGxiYWNrVHJhbnNpdGlvbixjPWkuZ2V0KHMpfHxFNSx1PW5ldyBnTShwTSksZD1uZXcgX00odGhpcy5pZCxzLHQpO3RoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6cyx0cmFuc2l0aW9uOmwsZnJvbVN0YXRlOmMsdG9TdGF0ZTp1LHBsYXllcjpkLGlzRmFsbGJhY2tUcmFuc2l0aW9uOiEwfSl9KX19cmVtb3ZlTm9kZSh0LGUpe2xldCBpPXRoaXMuX2VuZ2luZTtpZih0LmNoaWxkRWxlbWVudENvdW50JiZ0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0LGUpLHRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSwhMCkpcmV0dXJuO2xldCByPSExO2lmKGkudG90YWxBbmltYXRpb25zKXtsZXQgbz1pLnBsYXllcnMubGVuZ3RoP2kucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpOltdO2lmKG8mJm8ubGVuZ3RoKXI9ITA7ZWxzZXtsZXQgcz10O2Zvcig7cz1zLnBhcmVudE5vZGU7KWlmKGkuc3RhdGVzQnlFbGVtZW50LmdldChzKSl7cj0hMDticmVha319fWlmKHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpLHIpaS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITEsZSk7ZWxzZXtsZXQgbz10W0tsXTsoIW98fG89PT1YWikmJihpLmFmdGVyRmx1c2goKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUodCkpLGkuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KSxpLl9vblJlbW92YWxDb21wbGV0ZSh0LGUpKX19aW5zZXJ0Tm9kZSh0LGUpe1psKHQsdGhpcy5faG9zdENsYXNzTmFtZSl9ZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyh0KXtsZXQgZT1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaChpPT57bGV0IHI9aS5wbGF5ZXI7aWYoci5kZXN0cm95ZWQpcmV0dXJuO2xldCBvPWkuZWxlbWVudCxzPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KG8pO3MmJnMuZm9yRWFjaChhPT57aWYoYS5uYW1lPT1pLnRyaWdnZXJOYW1lKXtsZXQgbD1HNShvLGkudHJpZ2dlck5hbWUsaS5mcm9tU3RhdGUudmFsdWUsaS50b1N0YXRlLnZhbHVlKTtsLl9kYXRhPXQsajUoaS5wbGF5ZXIsYS5waGFzZSxsLGEuY2FsbGJhY2spfX0pLHIubWFya2VkRm9yRGVzdHJveT90aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e3IuZGVzdHJveSgpfSk6ZS5wdXNoKGkpfSksdGhpcy5fcXVldWU9W10sZS5zb3J0KChpLHIpPT57bGV0IG89aS50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCxzPXIudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQ7cmV0dXJuIDA9PW98fDA9PXM/by1zOnRoaXMuX2VuZ2luZS5kcml2ZXIuY29udGFpbnNFbGVtZW50KGkuZWxlbWVudCxyLmVsZW1lbnQpPzE6LTF9KX1kZXN0cm95KHQpe3RoaXMucGxheWVycy5mb3JFYWNoKGU9PmUuZGVzdHJveSgpKSx0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LHQpfWVsZW1lbnRDb250YWluc0RhdGEodCl7bGV0IGU9ITE7cmV0dXJuIHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuaGFzKHQpJiYoZT0hMCksZT0hIXRoaXMuX3F1ZXVlLmZpbmQoaT0+aS5lbGVtZW50PT09dCl8fGUsZX19KHQsZSx0aGlzKTtyZXR1cm4gdGhpcy5ib2R5Tm9kZSYmdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuYm9keU5vZGUsZSk/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoaSxlKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGUsaSksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF09aX1fYmFsYW5jZU5hbWVzcGFjZUxpc3QodCxlKXtsZXQgaT10aGlzLl9uYW1lc3BhY2VMaXN0LHI9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudDtpZihpLmxlbmd0aC0xPj0wKXtsZXQgcz0hMSxhPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoZSk7Zm9yKDthOyl7bGV0IGw9ci5nZXQoYSk7aWYobCl7bGV0IGM9aS5pbmRleE9mKGwpO2kuc3BsaWNlKGMrMSwwLHQpLHM9ITA7YnJlYWt9YT10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KGEpfXN8fGkudW5zaGlmdCh0KX1lbHNlIGkucHVzaCh0KTtyZXR1cm4gci5zZXQoZSx0KSx0fXJlZ2lzdGVyKHQsZSl7bGV0IGk9dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3JldHVybiBpfHwoaT10aGlzLmNyZWF0ZU5hbWVzcGFjZSh0LGUpKSxpfXJlZ2lzdGVyVHJpZ2dlcih0LGUsaSl7bGV0IHI9dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3ImJnIucmVnaXN0ZXIoZSxpKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK31kZXN0cm95KHQsZSl7aWYoIXQpcmV0dXJuO2xldCBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO3RoaXMuYWZ0ZXJGbHVzaCgoKT0+e3RoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRlKGkuaG9zdEVsZW1lbnQpLGRlbGV0ZSB0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07bGV0IHI9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKGkpO3I+PTAmJnRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKHIsMSl9KSx0aGlzLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+aS5kZXN0cm95KGUpKX1fZmV0Y2hOYW1lc3BhY2UodCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XX1mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQodCl7bGV0IGU9bmV3IFNldCxpPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihpKWZvcihsZXQgciBvZiBpLnZhbHVlcygpKWlmKHIubmFtZXNwYWNlSWQpe2xldCBvPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHIubmFtZXNwYWNlSWQpO28mJmUuYWRkKG8pfXJldHVybiBlfXRyaWdnZXIodCxlLGkscil7aWYobEEoZSkpe2xldCBvPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO2lmKG8pcmV0dXJuIG8udHJpZ2dlcihlLGksciksITB9cmV0dXJuITF9aW5zZXJ0Tm9kZSh0LGUsaSxyKXtpZighbEEoZSkpcmV0dXJuO2xldCBvPWVbS2xdO2lmKG8mJm8uc2V0Rm9yUmVtb3ZhbCl7by5zZXRGb3JSZW1vdmFsPSExLG8uc2V0Rm9yTW92ZT0hMDtsZXQgcz10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihlKTtzPj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKHMsMSl9aWYodCl7bGV0IHM9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7cyYmcy5pbnNlcnROb2RlKGUsaSl9ciYmdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpfWNvbGxlY3RFbnRlckVsZW1lbnQodCl7dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLnB1c2godCl9bWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsZSl7ZT90aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpfHwodGhpcy5kaXNhYmxlZE5vZGVzLmFkZCh0KSxabCh0LFM1KSk6dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh0KSYmKHRoaXMuZGlzYWJsZWROb2Rlcy5kZWxldGUodCksel8odCxTNSkpfXJlbW92ZU5vZGUodCxlLGkscil7aWYobEEoZSkpe2xldCBvPXQ/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk6bnVsbDtpZihvP28ucmVtb3ZlTm9kZShlLHIpOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLCExLHIpLGkpe2xldCBzPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZ2V0KGUpO3MmJnMuaWQhPT10JiZzLnJlbW92ZU5vZGUoZSxyKX19ZWxzZSB0aGlzLl9vblJlbW92YWxDb21wbGV0ZShlLHIpfW1hcmtFbGVtZW50QXNSZW1vdmVkKHQsZSxpLHIsbyl7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goZSksZVtLbF09e25hbWVzcGFjZUlkOnQsc2V0Rm9yUmVtb3ZhbDpyLGhhc0FuaW1hdGlvbjppLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExLHByZXZpb3VzVHJpZ2dlcnNWYWx1ZXM6b319bGlzdGVuKHQsZSxpLHIsbyl7cmV0dXJuIGxBKGUpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmxpc3RlbihlLGkscixvKTooKT0+e319X2J1aWxkSW5zdHJ1Y3Rpb24odCxlLGkscixvKXtyZXR1cm4gdC50cmFuc2l0aW9uLmJ1aWxkKHRoaXMuZHJpdmVyLHQuZWxlbWVudCx0LmZyb21TdGF0ZS52YWx1ZSx0LnRvU3RhdGUudmFsdWUsaSxyLHQuZnJvbVN0YXRlLm9wdGlvbnMsdC50b1N0YXRlLm9wdGlvbnMsZSxvKX1kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpe2xldCBlPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsY0EsITApO2UuZm9yRWFjaChpPT50aGlzLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChpKSksMCE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5zaXplJiYoZT10aGlzLmRyaXZlci5xdWVyeSh0LEk1LCEwKSxlLmZvckVhY2goaT0+dGhpcy5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGkpKSl9ZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KHQpe2xldCBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGk9PntpLnF1ZXVlZD9pLm1hcmtlZEZvckRlc3Ryb3k9ITA6aS5kZXN0cm95KCl9KX1maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KHQpe2xldCBlPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChpPT5pLmZpbmlzaCgpKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57aWYodGhpcy5wbGF5ZXJzLmxlbmd0aClyZXR1cm4gcGgodGhpcy5wbGF5ZXJzKS5vbkRvbmUoKCk9PnQoKSk7dCgpfSl9cHJvY2Vzc0xlYXZlTm9kZSh0KXtsZXQgZT10W0tsXTtpZihlJiZlLnNldEZvclJlbW92YWwpe2lmKHRbS2xdPVhaLGUubmFtZXNwYWNlSWQpe3RoaXMuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KTtsZXQgaT10aGlzLl9mZXRjaE5hbWVzcGFjZShlLm5hbWVzcGFjZUlkKTtpJiZpLmNsZWFyRWxlbWVudENhY2hlKHQpfXRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKHQsZS5zZXRGb3JSZW1vdmFsKX10LmNsYXNzTGlzdD8uY29udGFpbnMoUzUpJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LCExKSx0aGlzLmRyaXZlci5xdWVyeSh0LCIubmctYW5pbWF0ZS1kaXNhYmxlZCIsITApLmZvckVhY2goaT0+e3RoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGksITEpfSl9Zmx1c2godD0tMSl7bGV0IGU9W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2goKGkscik9PnRoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGkscikpLHRoaXMubmV3SG9zdEVsZW1lbnRzLmNsZWFyKCkpLHRoaXMudG90YWxBbmltYXRpb25zJiZ0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKWZvcihsZXQgaT0wO2k8dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aDtpKyspWmwodGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzW2ldLCJuZy1zdGFyLWluc2VydGVkIik7aWYodGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgmJih0aGlzLnRvdGFsUXVldWVkUGxheWVyc3x8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aCkpe2xldCBpPVtdO3RyeXtlPXRoaXMuX2ZsdXNoQW5pbWF0aW9ucyhpLHQpfWZpbmFsbHl7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXSgpfX1lbHNlIGZvcihsZXQgaT0wO2k8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtpKyspdGhpcy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tpXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZvckVhY2goaT0+aSgpKSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnMubGVuZ3RoKXtsZXQgaT10aGlzLl93aGVuUXVpZXRGbnM7dGhpcy5fd2hlblF1aWV0Rm5zPVtdLGUubGVuZ3RoP3BoKGUpLm9uRG9uZSgoKT0+e2kuZm9yRWFjaChyPT5yKCkpfSk6aS5mb3JFYWNoKHI9PnIoKSl9fXJlcG9ydEVycm9yKHQpe3Rocm93IG5ldyBBdCgzNDAyLCExKX1fZmx1c2hBbmltYXRpb25zKHQsZSl7bGV0IGk9bmV3IGZNLHI9W10sbz1uZXcgTWFwLHM9W10sYT1uZXcgTWFwLGw9bmV3IE1hcCxjPW5ldyBNYXAsdT1uZXcgU2V0O3RoaXMuZGlzYWJsZWROb2Rlcy5mb3JFYWNoKFk9Pnt1LmFkZChZKTtsZXQgYWU9dGhpcy5kcml2ZXIucXVlcnkoWSwiLm5nLWFuaW1hdGUtcXVldWVkIiwhMCk7Zm9yKGxldCBsZT0wO2xlPGFlLmxlbmd0aDtsZSsrKXUuYWRkKGFlW2xlXSl9KTtsZXQgZD10aGlzLmJvZHlOb2RlLHA9QXJyYXkuZnJvbSh0aGlzLnN0YXRlc0J5RWxlbWVudC5rZXlzKCkpLGg9SVoocCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMpLGY9bmV3IE1hcCxtPTA7aC5mb3JFYWNoKChZLGFlKT0+e2xldCBsZT1CWittKys7Zi5zZXQoYWUsbGUpLFkuZm9yRWFjaChJZT0+WmwoSWUsbGUpKX0pO2xldCB4PVtdLGc9bmV3IFNldCxiPW5ldyBTZXQ7Zm9yKGxldCBZPTA7WTx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO1krKyl7bGV0IGFlPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tZXSxsZT1hZVtLbF07bGUmJmxlLnNldEZvclJlbW92YWwmJih4LnB1c2goYWUpLGcuYWRkKGFlKSxsZS5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoYWUsIi5uZy1zdGFyLWluc2VydGVkIiwhMCkuZm9yRWFjaChJZT0+Zy5hZGQoSWUpKTpiLmFkZChhZSkpfWxldCBEPW5ldyBNYXAsVD1JWihwLEFycmF5LmZyb20oZykpO1QuZm9yRWFjaCgoWSxhZSk9PntsZXQgbGU9QTUrbSsrO0Quc2V0KGFlLGxlKSxZLmZvckVhY2goSWU9PlpsKEllLGxlKSl9KSx0LnB1c2goKCk9PntoLmZvckVhY2goKFksYWUpPT57bGV0IGxlPWYuZ2V0KGFlKTtZLmZvckVhY2goSWU9PnpfKEllLGxlKSl9KSxULmZvckVhY2goKFksYWUpPT57bGV0IGxlPUQuZ2V0KGFlKTtZLmZvckVhY2goSWU9PnpfKEllLGxlKSl9KSx4LmZvckVhY2goWT0+e3RoaXMucHJvY2Vzc0xlYXZlTm9kZShZKX0pfSk7bGV0IGs9W10sWj1bXTtmb3IobGV0IFk9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtZPj0wO1ktLSl0aGlzLl9uYW1lc3BhY2VMaXN0W1ldLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaChsZT0+e2xldCBJZT1sZS5wbGF5ZXIsdmU9bGUuZWxlbWVudDtpZihrLnB1c2goSWUpLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpe2xldCBwdD12ZVtLbF07aWYocHQmJnB0LnNldEZvck1vdmUpe2lmKHB0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMmJnB0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuaGFzKGxlLnRyaWdnZXJOYW1lKSl7bGV0IHd0PXB0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuZ2V0KGxlLnRyaWdnZXJOYW1lKSxUZT10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQobGUuZWxlbWVudCk7aWYoVGUmJlRlLmhhcyhsZS50cmlnZ2VyTmFtZSkpe2xldCB4dD1UZS5nZXQobGUudHJpZ2dlck5hbWUpO3h0LnZhbHVlPXd0LFRlLnNldChsZS50cmlnZ2VyTmFtZSx4dCl9fXJldHVybiB2b2lkIEllLmRlc3Ryb3koKX19bGV0IERlPSFkfHwhdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KGQsdmUpLG50PUQuZ2V0KHZlKSxndD1mLmdldCh2ZSksVWU9dGhpcy5fYnVpbGRJbnN0cnVjdGlvbihsZSxpLGd0LG50LERlKTtpZihVZS5lcnJvcnMmJlVlLmVycm9ycy5sZW5ndGgpcmV0dXJuIHZvaWQgWi5wdXNoKFVlKTtpZihEZSlyZXR1cm4gSWUub25TdGFydCgoKT0+T20odmUsVWUuZnJvbVN0eWxlcykpLEllLm9uRGVzdHJveSgoKT0+R3UodmUsVWUudG9TdHlsZXMpKSx2b2lkIHIucHVzaChJZSk7aWYobGUuaXNGYWxsYmFja1RyYW5zaXRpb24pcmV0dXJuIEllLm9uU3RhcnQoKCk9Pk9tKHZlLFVlLmZyb21TdHlsZXMpKSxJZS5vbkRlc3Ryb3koKCk9Pkd1KHZlLFVlLnRvU3R5bGVzKSksdm9pZCByLnB1c2goSWUpO2xldCBBZT1bXTtVZS50aW1lbGluZXMuZm9yRWFjaChwdD0+e3B0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lPSEwLHRoaXMuZGlzYWJsZWROb2Rlcy5oYXMocHQuZWxlbWVudCl8fEFlLnB1c2gocHQpfSksVWUudGltZWxpbmVzPUFlLGkuYXBwZW5kKHZlLFVlLnRpbWVsaW5lcykscy5wdXNoKHtpbnN0cnVjdGlvbjpVZSxwbGF5ZXI6SWUsZWxlbWVudDp2ZX0pLFVlLnF1ZXJpZWRFbGVtZW50cy5mb3JFYWNoKHB0PT5wbChhLHB0LFtdKS5wdXNoKEllKSksVWUucHJlU3R5bGVQcm9wcy5mb3JFYWNoKChwdCx3dCk9PntpZihwdC5zaXplKXtsZXQgVGU9bC5nZXQod3QpO1RlfHxsLnNldCh3dCxUZT1uZXcgU2V0KSxwdC5mb3JFYWNoKCh4dCxtdCk9PlRlLmFkZChtdCkpfX0pLFVlLnBvc3RTdHlsZVByb3BzLmZvckVhY2goKHB0LHd0KT0+e2xldCBUZT1jLmdldCh3dCk7VGV8fGMuc2V0KHd0LFRlPW5ldyBTZXQpLHB0LmZvckVhY2goKHh0LG10KT0+VGUuYWRkKG10KSl9KX0pO2lmKFoubGVuZ3RoKXtsZXQgWT1bXTtaLmZvckVhY2goYWU9PntZLnB1c2gobmV3IEF0KDM1MDUsITEpKX0pLGsuZm9yRWFjaChhZT0+YWUuZGVzdHJveSgpKSx0aGlzLnJlcG9ydEVycm9yKFkpfWxldCB6PW5ldyBNYXAsZmU9bmV3IE1hcDtzLmZvckVhY2goWT0+e2xldCBhZT1ZLmVsZW1lbnQ7aS5oYXMoYWUpJiYoZmUuc2V0KGFlLGFlKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZChZLnBsYXllci5uYW1lc3BhY2VJZCxZLmluc3RydWN0aW9uLHopKX0pLHIuZm9yRWFjaChZPT57bGV0IGFlPVkuZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoYWUsITEsWS5uYW1lc3BhY2VJZCxZLnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2goSWU9PntwbCh6LGFlLFtdKS5wdXNoKEllKSxJZS5kZXN0cm95KCl9KX0pO2xldCB1ZT14LmZpbHRlcihZPT5QWihZLGwsYykpLGhlPW5ldyBNYXA7QVooaGUsdGhpcy5kcml2ZXIsYixjLGp1KS5mb3JFYWNoKFk9PntQWihZLGwsYykmJnVlLnB1c2goWSl9KTtsZXQgRj1uZXcgTWFwO2guZm9yRWFjaCgoWSxhZSk9PntBWihGLHRoaXMuZHJpdmVyLG5ldyBTZXQoWSksbCwiISIpfSksdWUuZm9yRWFjaChZPT57bGV0IGFlPWhlLmdldChZKSxsZT1GLmdldChZKTtoZS5zZXQoWSxuZXcgTWFwKFsuLi5BcnJheS5mcm9tKGFlPy5lbnRyaWVzKCk/P1tdKSwuLi5BcnJheS5mcm9tKGxlPy5lbnRyaWVzKCk/P1tdKV0pKX0pO2xldCBxPVtdLEs9W10sZGU9e307cy5mb3JFYWNoKFk9PntsZXR7ZWxlbWVudDphZSxwbGF5ZXI6bGUsaW5zdHJ1Y3Rpb246SWV9PVk7aWYoaS5oYXMoYWUpKXtpZih1LmhhcyhhZSkpcmV0dXJuIGxlLm9uRGVzdHJveSgoKT0+R3UoYWUsSWUudG9TdHlsZXMpKSxsZS5kaXNhYmxlZD0hMCxsZS5vdmVycmlkZVRvdGFsVGltZShJZS50b3RhbFRpbWUpLHZvaWQgci5wdXNoKGxlKTtsZXQgdmU9ZGU7aWYoZmUuc2l6ZT4xKXtsZXQgbnQ9YWUsZ3Q9W107Zm9yKDtudD1udC5wYXJlbnROb2RlOyl7bGV0IFVlPWZlLmdldChudCk7aWYoVWUpe3ZlPVVlO2JyZWFrfWd0LnB1c2gobnQpfWd0LmZvckVhY2goVWU9PmZlLnNldChVZSx2ZSkpfWxldCBEZT10aGlzLl9idWlsZEFuaW1hdGlvbihsZS5uYW1lc3BhY2VJZCxJZSx6LG8sRixoZSk7aWYobGUuc2V0UmVhbFBsYXllcihEZSksdmU9PT1kZSlxLnB1c2gobGUpO2Vsc2V7bGV0IG50PXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodmUpO250JiZudC5sZW5ndGgmJihsZS5wYXJlbnRQbGF5ZXI9cGgobnQpKSxyLnB1c2gobGUpfX1lbHNlIE9tKGFlLEllLmZyb21TdHlsZXMpLGxlLm9uRGVzdHJveSgoKT0+R3UoYWUsSWUudG9TdHlsZXMpKSxLLnB1c2gobGUpLHUuaGFzKGFlKSYmci5wdXNoKGxlKX0pLEsuZm9yRWFjaChZPT57bGV0IGFlPW8uZ2V0KFkuZWxlbWVudCk7aWYoYWUmJmFlLmxlbmd0aCl7bGV0IGxlPXBoKGFlKTtZLnNldFJlYWxQbGF5ZXIobGUpfX0pLHIuZm9yRWFjaChZPT57WS5wYXJlbnRQbGF5ZXI/WS5zeW5jUGxheWVyRXZlbnRzKFkucGFyZW50UGxheWVyKTpZLmRlc3Ryb3koKX0pO2ZvcihsZXQgWT0wO1k8eC5sZW5ndGg7WSsrKXtsZXQgYWU9eFtZXSxsZT1hZVtLbF07aWYoel8oYWUsQTUpLGxlJiZsZS5oYXNBbmltYXRpb24pY29udGludWU7bGV0IEllPVtdO2lmKGEuc2l6ZSl7bGV0IERlPWEuZ2V0KGFlKTtEZSYmRGUubGVuZ3RoJiZJZS5wdXNoKC4uLkRlKTtsZXQgbnQ9dGhpcy5kcml2ZXIucXVlcnkoYWUsSTUsITApO2ZvcihsZXQgZ3Q9MDtndDxudC5sZW5ndGg7Z3QrKyl7bGV0IFVlPWEuZ2V0KG50W2d0XSk7VWUmJlVlLmxlbmd0aCYmSWUucHVzaCguLi5VZSl9fWxldCB2ZT1JZS5maWx0ZXIoRGU9PiFEZS5kZXN0cm95ZWQpO3ZlLmxlbmd0aD9vSWUodGhpcyxhZSx2ZSk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKGFlKX1yZXR1cm4geC5sZW5ndGg9MCxxLmZvckVhY2goWT0+e3RoaXMucGxheWVycy5wdXNoKFkpLFkub25Eb25lKCgpPT57WS5kZXN0cm95KCk7bGV0IGFlPXRoaXMucGxheWVycy5pbmRleE9mKFkpO3RoaXMucGxheWVycy5zcGxpY2UoYWUsMSl9KSxZLnBsYXkoKX0pLHF9ZWxlbWVudENvbnRhaW5zRGF0YSh0LGUpe2xldCBpPSExLHI9ZVtLbF07cmV0dXJuIHImJnIuc2V0Rm9yUmVtb3ZhbCYmKGk9ITApLHRoaXMucGxheWVyc0J5RWxlbWVudC5oYXMoZSkmJihpPSEwKSx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmhhcyhlKSYmKGk9ITApLHRoaXMuc3RhdGVzQnlFbGVtZW50LmhhcyhlKSYmKGk9ITApLHRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmVsZW1lbnRDb250YWluc0RhdGEoZSl8fGl9YWZ0ZXJGbHVzaCh0KXt0aGlzLl9mbHVzaEZucy5wdXNoKHQpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSh0KXt0aGlzLl93aGVuUXVpZXRGbnMucHVzaCh0KX1fZ2V0UHJldmlvdXNQbGF5ZXJzKHQsZSxpLHIsbyl7bGV0IHM9W107aWYoZSl7bGV0IGE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk7YSYmKHM9YSl9ZWxzZXtsZXQgYT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKGEpe2xldCBsPSFvfHxvPT1wTTthLmZvckVhY2goYz0+e2MucXVldWVkfHwhbCYmYy50cmlnZ2VyTmFtZSE9cnx8cy5wdXNoKGMpfSl9fXJldHVybihpfHxyKSYmKHM9cy5maWx0ZXIoYT0+IShpJiZpIT1hLm5hbWVzcGFjZUlkfHxyJiZyIT1hLnRyaWdnZXJOYW1lKSkpLHN9X2JlZm9yZUFuaW1hdGlvbkJ1aWxkKHQsZSxpKXtsZXQgbz1lLmVsZW1lbnQscz1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOnQsYT1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmUudHJpZ2dlck5hbWU7Zm9yKGxldCBsIG9mIGUudGltZWxpbmVzKXtsZXQgYz1sLmVsZW1lbnQsdT1jIT09byxkPXBsKGksYyxbXSk7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKGMsdSxzLGEsZS50b1N0YXRlKS5mb3JFYWNoKGg9PntsZXQgZj1oLmdldFJlYWxQbGF5ZXIoKTtmLmJlZm9yZURlc3Ryb3kmJmYuYmVmb3JlRGVzdHJveSgpLGguZGVzdHJveSgpLGQucHVzaChoKX0pfU9tKG8sZS5mcm9tU3R5bGVzKX1fYnVpbGRBbmltYXRpb24odCxlLGkscixvLHMpe2xldCBhPWUudHJpZ2dlck5hbWUsbD1lLmVsZW1lbnQsYz1bXSx1PW5ldyBTZXQsZD1uZXcgU2V0LHA9ZS50aW1lbGluZXMubWFwKGY9PntsZXQgbT1mLmVsZW1lbnQ7dS5hZGQobSk7bGV0IHg9bVtLbF07aWYoeCYmeC5yZW1vdmVkQmVmb3JlUXVlcmllZClyZXR1cm4gbmV3IGRoKGYuZHVyYXRpb24sZi5kZWxheSk7bGV0IGc9bSE9PWwsYj1mdW5jdGlvbihuKXtsZXQgdD1bXTtyZXR1cm4gUVoobix0KSx0fSgoaS5nZXQobSl8fGVJZSkubWFwKHo9PnouZ2V0UmVhbFBsYXllcigpKSkuZmlsdGVyKHo9PiEhei5lbGVtZW50JiZ6LmVsZW1lbnQ9PT1tKSxEPW8uZ2V0KG0pLFQ9cy5nZXQobSksaz1SWigwLHRoaXMuX25vcm1hbGl6ZXIsMCxmLmtleWZyYW1lcyxELFQpLFo9dGhpcy5fYnVpbGRQbGF5ZXIoZixrLGIpO2lmKGYuc3ViVGltZWxpbmUmJnImJmQuYWRkKG0pLGcpe2xldCB6PW5ldyBfTSh0LGEsbSk7ei5zZXRSZWFsUGxheWVyKFopLGMucHVzaCh6KX1yZXR1cm4gWn0pO2MuZm9yRWFjaChmPT57cGwodGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCxmLmVsZW1lbnQsW10pLnB1c2goZiksZi5vbkRvbmUoKCk9PmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uLmdldCh0KTtpZihpKXtpZihpLmxlbmd0aCl7bGV0IHI9aS5pbmRleE9mKGUpO2kuc3BsaWNlKHIsMSl9MD09aS5sZW5ndGgmJm4uZGVsZXRlKHQpfXJldHVybiBpfSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LGYuZWxlbWVudCxmKSl9KSx1LmZvckVhY2goZj0+WmwoZixiWikpO2xldCBoPXBoKHApO3JldHVybiBoLm9uRGVzdHJveSgoKT0+e3UuZm9yRWFjaChmPT56XyhmLGJaKSksR3UobCxlLnRvU3R5bGVzKX0pLGQuZm9yRWFjaChmPT57cGwocixmLFtdKS5wdXNoKGgpfSksaH1fYnVpbGRQbGF5ZXIodCxlLGkpe3JldHVybiBlLmxlbmd0aD4wP3RoaXMuZHJpdmVyLmFuaW1hdGUodC5lbGVtZW50LGUsdC5kdXJhdGlvbix0LmRlbGF5LHQuZWFzaW5nLGkpOm5ldyBkaCh0LmR1cmF0aW9uLHQuZGVsYXkpfX0odCxlLGkpLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5ib2R5Tm9kZT10LHRoaXMuX2RyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9aSx0aGlzLl9hbmltYXRpb25zPW5ldyBNYXAsdGhpcy5fcGxheWVyc0J5SWQ9bmV3IE1hcCx0aGlzLnBsYXllcnM9W119cmVnaXN0ZXIodCxlKXtsZXQgaT1bXSxvPXFaKHRoaXMuX2RyaXZlcixlLGksW10pO2lmKGkubGVuZ3RoKXRocm93IG5ldyBBdCgzNTAzLCExKTt0aGlzLl9hbmltYXRpb25zLnNldCh0LG8pfV9idWlsZFBsYXllcih0LGUsaSl7bGV0IHI9dC5lbGVtZW50LG89UlooMCx0aGlzLl9ub3JtYWxpemVyLDAsdC5rZXlmcmFtZXMsZSxpKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUocixvLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxbXSwhMCl9Y3JlYXRlKHQsZSxpPXt9KXtsZXQgcyxyPVtdLG89dGhpcy5fYW5pbWF0aW9ucy5nZXQodCksYT1uZXcgTWFwO2lmKG8/KHM9WVoodGhpcy5fZHJpdmVyLGUsbyxCWixBNSxuZXcgTWFwLG5ldyBNYXAsaSxRQWUscikscy5mb3JFYWNoKHU9PntsZXQgZD1wbChhLHUuZWxlbWVudCxuZXcgTWFwKTt1LnBvc3RTdHlsZVByb3BzLmZvckVhY2gocD0+ZC5zZXQocCxudWxsKSl9KSk6KHIucHVzaChuZXcgQXQoMzMwMCwhMSkpLHM9W10pLHIubGVuZ3RoKXRocm93IG5ldyBBdCgzNTA0LCExKTthLmZvckVhY2goKHUsZCk9Pnt1LmZvckVhY2goKHAsaCk9Pnt1LnNldChoLHRoaXMuX2RyaXZlci5jb21wdXRlU3R5bGUoZCxoLGp1KSl9KX0pO2xldCBjPXBoKHMubWFwKHU9PntsZXQgZD1hLmdldCh1LmVsZW1lbnQpO3JldHVybiB0aGlzLl9idWlsZFBsYXllcih1LG5ldyBNYXAsZCl9KSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkLnNldCh0LGMpLGMub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3kodCkpLHRoaXMucGxheWVycy5wdXNoKGMpLGN9ZGVzdHJveSh0KXtsZXQgZT10aGlzLl9nZXRQbGF5ZXIodCk7ZS5kZXN0cm95KCksdGhpcy5fcGxheWVyc0J5SWQuZGVsZXRlKHQpO2xldCBpPXRoaXMucGxheWVycy5pbmRleE9mKGUpO2k+PTAmJnRoaXMucGxheWVycy5zcGxpY2UoaSwxKX1fZ2V0UGxheWVyKHQpe2xldCBlPXRoaXMuX3BsYXllcnNCeUlkLmdldCh0KTtpZighZSl0aHJvdyBuZXcgQXQoMzMwMSwhMSk7cmV0dXJuIGV9bGlzdGVuKHQsZSxpLHIpe2xldCBvPUc1KGUsIiIsIiIsIiIpO3JldHVybiBqNSh0aGlzLl9nZXRQbGF5ZXIodCksaSxvLHIpLCgpPT57fX1jb21tYW5kKHQsZSxpLHIpe2lmKCJyZWdpc3RlciI9PWkpcmV0dXJuIHZvaWQgdGhpcy5yZWdpc3Rlcih0LHJbMF0pO2lmKCJjcmVhdGUiPT1pKXJldHVybiB2b2lkIHRoaXMuY3JlYXRlKHQsZSxyWzBdfHx7fSk7bGV0IG89dGhpcy5fZ2V0UGxheWVyKHQpO3N3aXRjaChpKXtjYXNlInBsYXkiOm8ucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOm8ucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpvLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpvLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6by5maW5pc2goKTticmVhaztjYXNlImluaXQiOm8uaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOm8uc2V0UG9zaXRpb24ocGFyc2VGbG9hdChyWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kodCl9fX0odCxlLGkpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9KHIsbyk9PnRoaXMub25SZW1vdmFsQ29tcGxldGUocixvKX1yZWdpc3RlclRyaWdnZXIodCxlLGkscixvKXtsZXQgcz10KyItIityLGE9dGhpcy5fdHJpZ2dlckNhY2hlW3NdO2lmKCFhKXtsZXQgbD1bXSx1PXFaKHRoaXMuX2RyaXZlcixvLGwsW10pO2lmKGwubGVuZ3RoKXRocm93IG5ldyBBdCgzNDA0LCExKTthPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLm5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX25vcm1hbGl6ZXI9aSx0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXM9W10sdGhpcy5zdGF0ZXM9bmV3IE1hcCxlLnN0YXRlcy5mb3JFYWNoKHI9PntsZXQgbz1yLm9wdGlvbnMmJnIub3B0aW9ucy5wYXJhbXN8fHt9O3RoaXMuc3RhdGVzLnNldChyLm5hbWUsbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnN0eWxlcz10LHRoaXMuZGVmYXVsdFBhcmFtcz1lLHRoaXMubm9ybWFsaXplcj1pfWJ1aWxkU3R5bGVzKHQsZSl7bGV0IGk9bmV3IE1hcCxyPXlNKHRoaXMuZGVmYXVsdFBhcmFtcyk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2gobz0+e2xldCBzPXRbb107bnVsbCE9PXMmJihyW29dPXMpfSksdGhpcy5zdHlsZXMuc3R5bGVzLmZvckVhY2gobz0+eyJzdHJpbmciIT10eXBlb2YgbyYmby5mb3JFYWNoKChzLGEpPT57cyYmKHM9aE0ocyxyLGUpKTtsZXQgbD10aGlzLm5vcm1hbGl6ZXIubm9ybWFsaXplUHJvcGVydHlOYW1lKGEsZSk7cz10aGlzLm5vcm1hbGl6ZXIubm9ybWFsaXplU3R5bGVWYWx1ZShhLGwscyxlKSxpLnNldChsLHMpfSl9KSxpfX0oci5zdHlsZSxvLGkpKX0pLEVaKHRoaXMuc3RhdGVzLCJ0cnVlIiwiMSIpLEVaKHRoaXMuc3RhdGVzLCJmYWxzZSIsIjAiKSxlLnRyYW5zaXRpb25zLmZvckVhY2gocj0+e3RoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5wdXNoKG5ldyBtQSh0LHIsdGhpcy5zdGF0ZXMpKX0pLHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IG1BKG4se3R5cGU6MSxhbmltYXRpb246e3R5cGU6MixzdGVwczpbXSxvcHRpb25zOm51bGx9LG1hdGNoZXJzOlsocyxhKT0+ITBdLG9wdGlvbnM6bnVsbCxxdWVyeUNvdW50OjAsZGVwQ291bnQ6MH0sdCl9KHQsdGhpcy5zdGF0ZXMpfWdldCBjb250YWluc1F1ZXJpZXMoKXtyZXR1cm4gdGhpcy5hc3QucXVlcnlDb3VudD4wfW1hdGNoVHJhbnNpdGlvbih0LGUsaSxyKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLmZpbmQocz0+cy5tYXRjaCh0LGUsaSxyKSl8fG51bGx9bWF0Y2hTdHlsZXModCxlLGkpe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxlcyh0LGUsaSl9fShuLHQsZSl9KHIsdSx0aGlzLl9ub3JtYWxpemVyKSx0aGlzLl90cmlnZ2VyQ2FjaGVbc109YX10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihlLHIsYSl9cmVnaXN0ZXIodCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyKHQsZSl9ZGVzdHJveSh0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveSh0LGUpfW9uSW5zZXJ0KHQsZSxpLHIpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZSh0LGUsaSxyKX1vblJlbW92ZSh0LGUsaSxyKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUodCxlLHJ8fCExLGkpfWRpc2FibGVBbmltYXRpb25zKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKX1wcm9jZXNzKHQsZSxpLHIpe2lmKCJAIj09aS5jaGFyQXQoMCkpe2xldFtvLHNdPXZaKGkpO3RoaXMuX3RpbWVsaW5lRW5naW5lLmNvbW1hbmQobyxlLHMscil9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIodCxlLGkscil9bGlzdGVuKHQsZSxpLHIsbyl7aWYoIkAiPT1pLmNoYXJBdCgwKSl7bGV0W3MsYV09dlooaSk7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3RlbihzLGUsYSxvKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4odCxlLGkscixvKX1mbHVzaCh0PS0xKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmZsdXNoKHQpfWdldCBwbGF5ZXJzKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUucGxheWVycy5jb25jYXQodGhpcy5fdGltZWxpbmVFbmdpbmUucGxheWVycyl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfX0sY0llPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9zdGFydFN0eWxlcz1pLHRoaXMuX2VuZFN0eWxlcz1yLHRoaXMuX3N0YXRlPTA7bGV0IG89bi5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmdldChlKTtvfHxuLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuc2V0KGUsbz1uZXcgTWFwKSx0aGlzLl9pbml0aWFsU3R5bGVzPW99c3RhcnQoKXt0aGlzLl9zdGF0ZTwxJiYodGhpcy5fc3RhcnRTdHlsZXMmJkd1KHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9MSl9ZmluaXNoKCl7dGhpcy5zdGFydCgpLHRoaXMuX3N0YXRlPDImJihHdSh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcyYmKEd1KHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuZmluaXNoKCksdGhpcy5fc3RhdGU8MyYmKG4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5kZWxldGUodGhpcy5fZWxlbWVudCksdGhpcy5fc3RhcnRTdHlsZXMmJihPbSh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fZW5kU3R5bGVzJiYoT20odGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSxHdSh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTMpfX1yZXR1cm4gbi5pbml0aWFsU3R5bGVzQnlFbGVtZW50PW5ldyBXZWFrTWFwLG59KSgpO2Z1bmN0aW9uIFQ1KG4pe2xldCB0PW51bGw7cmV0dXJuIG4uZm9yRWFjaCgoZSxpKT0+eyhmdW5jdGlvbihuKXtyZXR1cm4iZGlzcGxheSI9PT1ufHwicG9zaXRpb24iPT09bn0pKGkpJiYodD10fHxuZXcgTWFwLHQuc2V0KGksZSkpfSksdH12YXIgZ0E9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5lbGVtZW50PXQsdGhpcy5rZXlmcmFtZXM9ZSx0aGlzLm9wdGlvbnM9aSx0aGlzLl9zcGVjaWFsU3R5bGVzPXIsdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29yaWdpbmFsT25Eb25lRm5zPVtdLHRoaXMuX29yaWdpbmFsT25TdGFydEZucz1bXSx0aGlzLnRpbWU9MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuY3VycmVudFNuYXBzaG90PW5ldyBNYXAsdGhpcy5fZHVyYXRpb249aS5kdXJhdGlvbix0aGlzLl9kZWxheT1pLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLl9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKX1fYnVpbGRQbGF5ZXIoKXtpZih0aGlzLl9pbml0aWFsaXplZClyZXR1cm47dGhpcy5faW5pdGlhbGl6ZWQ9ITA7bGV0IHQ9dGhpcy5rZXlmcmFtZXM7dGhpcy5kb21QbGF5ZXI9dGhpcy5fdHJpZ2dlcldlYkFuaW1hdGlvbih0aGlzLmVsZW1lbnQsdCx0aGlzLm9wdGlvbnMpLHRoaXMuX2ZpbmFsS2V5ZnJhbWU9dC5sZW5ndGg/dFt0Lmxlbmd0aC0xXTpuZXcgTWFwLHRoaXMuZG9tUGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaCIsKCk9PnRoaXMuX29uRmluaXNoKCkpfV9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKXt0aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCk6dGhpcy5kb21QbGF5ZXIucGF1c2UoKX1fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KHQpe2xldCBlPVtdO3JldHVybiB0LmZvckVhY2goaT0+e2UucHVzaChPYmplY3QuZnJvbUVudHJpZXMoaSkpfSksZX1fdHJpZ2dlcldlYkFuaW1hdGlvbih0LGUsaSl7cmV0dXJuIHQuYW5pbWF0ZSh0aGlzLl9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QoZSksaSl9b25TdGFydCh0KXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaCh0KSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9b25Eb25lKHQpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2godCksdGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfXBsYXkoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9zdGFydGVkPSEwLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuc3RhcnQoKSksdGhpcy5kb21QbGF5ZXIucGxheSgpfXBhdXNlKCl7dGhpcy5pbml0KCksdGhpcy5kb21QbGF5ZXIucGF1c2UoKX1maW5pc2goKXt0aGlzLmluaXQoKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmZpbmlzaCgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5kb21QbGF5ZXIuZmluaXNoKCl9cmVzZXQoKXt0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fb25TdGFydEZucz10aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMsdGhpcy5fb25Eb25lRm5zPXRoaXMuX29yaWdpbmFsT25Eb25lRm5zfV9yZXNldERvbVBsYXllclN0YXRlKCl7dGhpcy5kb21QbGF5ZXImJnRoaXMuZG9tUGxheWVyLmNhbmNlbCgpfXJlc3RhcnQoKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5kZXN0cm95KCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXNldFBvc2l0aW9uKHQpe3ZvaWQgMD09PXRoaXMuZG9tUGxheWVyJiZ0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZT10KnRoaXMudGltZX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZS90aGlzLnRpbWV9Z2V0IHRvdGFsVGltZSgpe3JldHVybiB0aGlzLl9kZWxheSt0aGlzLl9kdXJhdGlvbn1iZWZvcmVEZXN0cm95KCl7bGV0IHQ9bmV3IE1hcDt0aGlzLmhhc1N0YXJ0ZWQoKSYmdGhpcy5fZmluYWxLZXlmcmFtZS5mb3JFYWNoKChpLHIpPT57Im9mZnNldCIhPT1yJiZ0LnNldChyLHRoaXMuX2ZpbmlzaGVkP2k6eloodGhpcy5lbGVtZW50LHIpKX0pLHRoaXMuY3VycmVudFNuYXBzaG90PXR9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPSJzdGFydCI9PT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChpPT5pKCkpLGUubGVuZ3RoPTB9fSxwSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGNNe2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLl9uZXh0QW5pbWF0aW9uSWQ9MCx0aGlzLl9yZW5kZXJlcj1lLmNyZWF0ZVJlbmRlcmVyKGkuYm9keSx7aWQ6IjAiLGVuY2Fwc3VsYXRpb246SmEuTm9uZSxzdHlsZXM6W10sZGF0YTp7YW5pbWF0aW9uOltdfX0pfWJ1aWxkKGUpe2xldCBpPXRoaXMuX25leHRBbmltYXRpb25JZC50b1N0cmluZygpO3RoaXMuX25leHRBbmltYXRpb25JZCsrO2xldCByPUFycmF5LmlzQXJyYXkoZSk/aUEoZSk6ZTtyZXR1cm4gWloodGhpcy5fcmVuZGVyZXIsbnVsbCxpLCJyZWdpc3RlciIsW3JdKSxuZXcgUTUoaSx0aGlzLl9yZW5kZXJlcil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGood3UpLGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxRNT1jbGFzcyBleHRlbmRzIG5Be2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLl9pZD10LHRoaXMuX3JlbmRlcmVyPWV9Y3JlYXRlKHQsZSl7cmV0dXJuIG5ldyBLNSh0aGlzLl9pZCx0LGV8fHt9LHRoaXMuX3JlbmRlcmVyKX19LEs1PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaWQ9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLl9yZW5kZXJlcj1yLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLnRvdGFsVGltZT0wLHRoaXMuX2NvbW1hbmQoImNyZWF0ZSIsaSl9X2xpc3Rlbih0LGUpe3JldHVybiB0aGlzLl9yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50LGBAQCR7dGhpcy5pZH06JHt0fWAsZSl9X2NvbW1hbmQodCwuLi5lKXtyZXR1cm4gWloodGhpcy5fcmVuZGVyZXIsdGhpcy5lbGVtZW50LHRoaXMuaWQsdCxlKX1vbkRvbmUodCl7dGhpcy5fbGlzdGVuKCJkb25lIix0KX1vblN0YXJ0KHQpe3RoaXMuX2xpc3Rlbigic3RhcnQiLHQpfW9uRGVzdHJveSh0KXt0aGlzLl9saXN0ZW4oImRlc3Ryb3kiLHQpfWluaXQoKXt0aGlzLl9jb21tYW5kKCJpbml0Iil9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLl9jb21tYW5kKCJwbGF5IiksdGhpcy5fc3RhcnRlZD0hMH1wYXVzZSgpe3RoaXMuX2NvbW1hbmQoInBhdXNlIil9cmVzdGFydCgpe3RoaXMuX2NvbW1hbmQoInJlc3RhcnQiKX1maW5pc2goKXt0aGlzLl9jb21tYW5kKCJmaW5pc2giKX1kZXN0cm95KCl7dGhpcy5fY29tbWFuZCgiZGVzdHJveSIpfXJlc2V0KCl7dGhpcy5fY29tbWFuZCgicmVzZXQiKSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKHQpe3RoaXMuX2NvbW1hbmQoInNldFBvc2l0aW9uIix0KX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5lbmdpbmUucGxheWVyc1srdGhpcy5pZF0/LmdldFBvc2l0aW9uKCk/PzB9fTtmdW5jdGlvbiBaWihuLHQsZSxpLHIpe3JldHVybiBuLnNldFByb3BlcnR5KHQsYEBAJHtlfToke2l9YCxyKX12YXIgSlo9IkAuZGlzYWJsZWQiLGhJZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmRlbGVnYXRlPWUsdGhpcy5lbmdpbmU9aSx0aGlzLl96b25lPXIsdGhpcy5fY3VycmVudElkPTAsdGhpcy5fbWljcm90YXNrSWQ9MSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W10sdGhpcy5fcmVuZGVyZXJDYWNoZT1uZXcgTWFwLHRoaXMuX2NkUmVjdXJEZXB0aD0wLHRoaXMucHJvbWlzZT1Qcm9taXNlLnJlc29sdmUoMCksaS5vblJlbW92YWxDb21wbGV0ZT0obyxzKT0+e2xldCBhPXM/LnBhcmVudE5vZGUobyk7YSYmcy5yZW1vdmVDaGlsZChhLG8pfX1jcmVhdGVSZW5kZXJlcihlLGkpe2xldCBvPXRoaXMuZGVsZWdhdGUuY3JlYXRlUmVuZGVyZXIoZSxpKTtpZighKGUmJmkmJmkuZGF0YSYmaS5kYXRhLmFuaW1hdGlvbikpe2xldCB1PXRoaXMuX3JlbmRlcmVyQ2FjaGUuZ2V0KG8pO3JldHVybiB1fHwodT1uZXcgeUEoIiIsbyx0aGlzLmVuZ2luZSwoKT0+dGhpcy5fcmVuZGVyZXJDYWNoZS5kZWxldGUobykpLHRoaXMuX3JlbmRlcmVyQ2FjaGUuc2V0KG8sdSkpLHV9bGV0IHM9aS5pZCxhPWkuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDt0aGlzLl9jdXJyZW50SWQrKyx0aGlzLmVuZ2luZS5yZWdpc3RlcihhLGUpO2xldCBsPXU9PntBcnJheS5pc0FycmF5KHUpP3UuZm9yRWFjaChsKTp0aGlzLmVuZ2luZS5yZWdpc3RlclRyaWdnZXIocyxhLGUsdS5uYW1lLHUpfTtyZXR1cm4gaS5kYXRhLmFuaW1hdGlvbi5mb3JFYWNoKGwpLG5ldyBaNSh0aGlzLGEsbyx0aGlzLmVuZ2luZSl9YmVnaW4oKXt0aGlzLl9jZFJlY3VyRGVwdGgrKyx0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9X3NjaGVkdWxlQ291bnRUYXNrKCl7dGhpcy5wcm9taXNlLnRoZW4oKCk9Pnt0aGlzLl9taWNyb3Rhc2tJZCsrfSl9c2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKGUsaSxyKXtlPj0wJiZlPHRoaXMuX21pY3JvdGFza0lkP3RoaXMuX3pvbmUucnVuKCgpPT5pKHIpKTooMD09dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmxlbmd0aCYmUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oKCk9Pnt0aGlzLl96b25lLnJ1bigoKT0+e3RoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5mb3JFYWNoKG89PntsZXRbcyxhXT1vO3MoYSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5wdXNoKFtpLHJdKSl9ZW5kKCl7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc2NoZWR1bGVDb3VudFRhc2soKSx0aGlzLmVuZ2luZS5mbHVzaCh0aGlzLl9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLmVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKHd1KSxqKGhoKSxqKF90KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkseUE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5uYW1lc3BhY2VJZD10LHRoaXMuZGVsZWdhdGU9ZSx0aGlzLmVuZ2luZT1pLHRoaXMuX29uRGVzdHJveT1yLHRoaXMuZGVzdHJveU5vZGU9dGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZT9vPT5lLmRlc3Ryb3lOb2RlKG8pOm51bGx9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kYXRhfWRlc3Ryb3koKXt0aGlzLmVuZ2luZS5kZXN0cm95KHRoaXMubmFtZXNwYWNlSWQsdGhpcy5kZWxlZ2F0ZSksdGhpcy5kZWxlZ2F0ZS5kZXN0cm95KCksdGhpcy5fb25EZXN0cm95Py4oKX1jcmVhdGVFbGVtZW50KHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudCh0LGUpfWNyZWF0ZUNvbW1lbnQodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KX1jcmVhdGVUZXh0KHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQodCl9YXBwZW5kQ2hpbGQodCxlKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsITEpfWluc2VydEJlZm9yZSh0LGUsaSxyPSEwKXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsaSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQscil9cmVtb3ZlQ2hpbGQodCxlLGkpe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsZSx0aGlzLmRlbGVnYXRlLGkpfXNlbGVjdFJvb3RFbGVtZW50KHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCxlKX1wYXJlbnROb2RlKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCl9bmV4dFNpYmxpbmcodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9c2V0QXR0cmlidXRlKHQsZSxpLHIpe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsZSxpLHIpfXJlbW92ZUF0dHJpYnV0ZSh0LGUsaSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxlLGkpfWFkZENsYXNzKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpfXJlbW92ZUNsYXNzKHQsZSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfXNldFN0eWxlKHQsZSxpLHIpe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLGkscil9cmVtb3ZlU3R5bGUodCxlLGkpe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlLGkpfXNldFByb3BlcnR5KHQsZSxpKXsiQCI9PWUuY2hhckF0KDApJiZlPT1KWj90aGlzLmRpc2FibGVBbmltYXRpb25zKHQsISFpKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxpKX1zZXRWYWx1ZSh0LGUpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX1saXN0ZW4odCxlLGkpe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsaSl9ZGlzYWJsZUFuaW1hdGlvbnModCxlKXt0aGlzLmVuZ2luZS5kaXNhYmxlQW5pbWF0aW9ucyh0LGUpfX0sWjU9Y2xhc3MgZXh0ZW5kcyB5QXtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pLHRoaXMuZmFjdG9yeT10LHRoaXMubmFtZXNwYWNlSWQ9ZX1zZXRQcm9wZXJ0eSh0LGUsaSl7IkAiPT1lLmNoYXJBdCgwKT8iLiI9PWUuY2hhckF0KDEpJiZlPT1KWj90aGlzLmRpc2FibGVBbmltYXRpb25zKHQsaT12b2lkIDA9PT1pfHwhIWkpOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCx0LGUuc2xpY2UoMSksaSk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsaSl9bGlzdGVuKHQsZSxpKXtpZigiQCI9PWUuY2hhckF0KDApKXtsZXQgcj1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSJib2R5IjpyZXR1cm4gZG9jdW1lbnQuYm9keTtjYXNlImRvY3VtZW50IjpyZXR1cm4gZG9jdW1lbnQ7Y2FzZSJ3aW5kb3ciOnJldHVybiB3aW5kb3c7ZGVmYXVsdDpyZXR1cm4gbn19KHQpLG89ZS5zbGljZSgxKSxzPSIiO3JldHVybiJAIiE9by5jaGFyQXQoMCkmJihbbyxzXT1mdW5jdGlvbihuKXtsZXQgdD1uLmluZGV4T2YoIi4iKTtyZXR1cm5bbi5zdWJzdHJpbmcoMCx0KSxuLnNsaWNlKHQrMSldfShvKSksdGhpcy5lbmdpbmUubGlzdGVuKHRoaXMubmFtZXNwYWNlSWQscixvLHMsYT0+e3RoaXMuZmFjdG9yeS5zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2soYS5fZGF0YXx8LTEsaSxhKX0pfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsaSl9fSxnSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhoe2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUuYm9keSxpLHIpfW5nT25EZXN0cm95KCl7dGhpcy5mbHVzaCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEh0KSxqKHZNKSxqKGttKSxqKEl1KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksJFo9W3twcm92aWRlOmNNLHVzZUNsYXNzOnBJZX0se3Byb3ZpZGU6a20sdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgZkF9fSx7cHJvdmlkZTpoaCx1c2VDbGFzczpnSWV9LHtwcm92aWRlOnd1LHVzZUZhY3Rvcnk6ZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgaEllKG4sdCxlKX0sZGVwczpbc00saGgsX3RdfV0sS1o9W3twcm92aWRlOnZNLHVzZUZhY3Rvcnk6KCk9Pm5ldyBjbGFzc3t2YWxpZGF0ZVN0eWxlUHJvcGVydHkodCl7cmV0dXJuITB9dmFsaWRhdGVBbmltYXRhYmxlU3R5bGVQcm9wZXJ0eSh0KXtyZXR1cm4hMH1tYXRjaGVzRWxlbWVudCh0LGUpe3JldHVybiExfWNvbnRhaW5zRWxlbWVudCh0LGUpe3JldHVybiBGWih0LGUpfWdldFBhcmVudEVsZW1lbnQodCl7cmV0dXJuIFc1KHQpfXF1ZXJ5KHQsZSxpKXtyZXR1cm4gTloodCxlLGkpfWNvbXB1dGVTdHlsZSh0LGUsaSl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfWFuaW1hdGUodCxlLGkscixvLHM9W10pe2xldCBsPXtkdXJhdGlvbjppLGRlbGF5OnIsZmlsbDowPT1yPyJib3RoIjoiZm9yd2FyZHMifTtvJiYobC5lYXNpbmc9byk7bGV0IGM9bmV3IE1hcCx1PXMuZmlsdGVyKGg9PmggaW5zdGFuY2VvZiBnQSk7KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIDA9PT1ufHwwPT09dH0pKGkscikmJnUuZm9yRWFjaChoPT57aC5jdXJyZW50U25hcHNob3QuZm9yRWFjaCgoZixtKT0+Yy5zZXQobSxmKSl9KTtsZXQgZD1mdW5jdGlvbihuKXtyZXR1cm4gbi5sZW5ndGg/blswXWluc3RhbmNlb2YgTWFwP246bi5tYXAodD0+VloodCkpOltdfShlKS5tYXAoaD0+al8oaCkpO2Q9ZnVuY3Rpb24obix0LGUpe2lmKGUuc2l6ZSYmdC5sZW5ndGgpe2xldCBpPXRbMF0scj1bXTtpZihlLmZvckVhY2goKG8scyk9PntpLmhhcyhzKXx8ci5wdXNoKHMpLGkuc2V0KHMsbyl9KSxyLmxlbmd0aClmb3IobGV0IG89MTtvPHQubGVuZ3RoO28rKyl7bGV0IHM9dFtvXTtyLmZvckVhY2goYT0+cy5zZXQoYSx6WihuLGEpKSl9fXJldHVybiB0fSh0LGQsYyk7bGV0IHA9ZnVuY3Rpb24obix0KXtsZXQgZT1udWxsLGk9bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg/KGU9VDUodFswXSksdC5sZW5ndGg+MSYmKGk9VDUodFt0Lmxlbmd0aC0xXSkpKTp0IGluc3RhbmNlb2YgTWFwJiYoZT1UNSh0KSksZXx8aT9uZXcgY0llKG4sZSxpKTpudWxsfSh0LGQpO3JldHVybiBuZXcgZ0EodCxkLGwscCl9fX0se3Byb3ZpZGU6UGksdXNlVmFsdWU6IkJyb3dzZXJBbmltYXRpb25zIn0sLi4uJFpdLHlJZT1be3Byb3ZpZGU6dk0sdXNlQ2xhc3M6cTV9LHtwcm92aWRlOlBpLHVzZVZhbHVlOiJOb29wQW5pbWF0aW9ucyJ9LC4uLiRaXSxlSj0oKCk9PntjbGFzcyBue3N0YXRpYyB3aXRoQ29uZmlnKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczplLmRpc2FibGVBbmltYXRpb25zP3lJZTpLWn19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6S1osaW1wb3J0czpbdEFdfSksbn0pKCksdDQ9e307ZnVuY3Rpb24gYmUobix0KXtpZih0NFtuXT0odDRbbl18fDApKzEsImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIEo1KG4sKC4uLmkpPT4oey4uLnQoLi4uaSksdHlwZTpufSkpO3N3aXRjaCh0P3QuX2FzOiJlbXB0eSIpe2Nhc2UiZW1wdHkiOnJldHVybiBKNShuLCgpPT4oe3R5cGU6bn0pKTtjYXNlInByb3BzIjpyZXR1cm4gSjUobixpPT4oey4uLmksdHlwZTpufSkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNvbmZpZy4iKX19ZnVuY3Rpb24gSjUobix0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInR5cGUiLHt2YWx1ZTpuLHdyaXRhYmxlOiExfSl9dmFyIGdKPSJAbmdyeC9zdG9yZS9pbml0IixxXz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgaHJ7Y29uc3RydWN0b3IoKXtzdXBlcih7dHlwZTpnSn0pfW5leHQoZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiXG4gICAgICAgIERpc3BhdGNoIGV4cGVjdGVkIGFuIG9iamVjdCwgaW5zdGVhZCBpdCByZWNlaXZlZCBhIGZ1bmN0aW9uLlxuICAgICAgICBJZiB5b3UncmUgdXNpbmcgdGhlIGNyZWF0ZUFjdGlvbiBmdW5jdGlvbiwgbWFrZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb25cbiAgICAgICAgYmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBhY3Rpb24uIEZvciBleGFtcGxlLCBzb21lQWN0aW9uIHNob3VsZCBiZSBzb21lQWN0aW9uKCkuIik7aWYodHlwZW9mIGU+InUiKXRocm93IG5ldyBUeXBlRXJyb3IoIkFjdGlvbnMgbXVzdCBiZSBvYmplY3RzIik7aWYodHlwZW9mIGUudHlwZT4idSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWN0aW9ucyBtdXN0IGhhdmUgYSB0eXBlIHByb3BlcnR5Iik7c3VwZXIubmV4dChlKX1jb21wbGV0ZSgpe31uZ09uRGVzdHJveSgpe3N1cGVyLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGJJZT1bcV9dLF9KPW5ldyBwZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgUm9vdCBHdWFyZCIpLHRKPW5ldyBwZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgSW5pdGlhbCBTdGF0ZSIpLG80PW5ldyBwZSgiQG5ncngvc3RvcmUgSW5pdGlhbCBTdGF0ZSIpLHZKPW5ldyBwZSgiQG5ncngvc3RvcmUgUmVkdWNlciBGYWN0b3J5Iiksbko9bmV3IHBlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSZWR1Y2VyIEZhY3RvcnkgUHJvdmlkZXIiKSx5Sj1uZXcgcGUoIkBuZ3J4L3N0b3JlIEluaXRpYWwgUmVkdWNlcnMiKSwkNT1uZXcgcGUoIkBuZ3J4L3N0b3JlIEludGVybmFsIEluaXRpYWwgUmVkdWNlcnMiKSxpSj1uZXcgcGUoIkBuZ3J4L3N0b3JlIFN0b3JlIEZlYXR1cmVzIikscko9bmV3IHBlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBTdG9yZSBSZWR1Y2VycyIpLGU0PW5ldyBwZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgRmVhdHVyZSBSZWR1Y2VycyIpLG9KPW5ldyBwZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgRmVhdHVyZSBDb25maWdzIiksYko9bmV3IHBlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBTdG9yZSBGZWF0dXJlcyIpLHNKPW5ldyBwZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgRmVhdHVyZSBSZWR1Y2VycyBUb2tlbiIpLHhKPW5ldyBwZSgiQG5ncngvc3RvcmUgRmVhdHVyZSBSZWR1Y2VycyIpLGFKPW5ldyBwZSgiQG5ncngvc3RvcmUgVXNlciBQcm92aWRlZCBNZXRhIFJlZHVjZXJzIiksV189bmV3IHBlKCJAbmdyeC9zdG9yZSBNZXRhIFJlZHVjZXJzIiksbEo9bmV3IHBlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSZXNvbHZlZCBNZXRhIFJlZHVjZXJzIiksY0o9bmV3IHBlKCJAbmdyeC9zdG9yZSBVc2VyIFJ1bnRpbWUgQ2hlY2tzIENvbmZpZyIpLHVKPW5ldyBwZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgVXNlciBSdW50aW1lIENoZWNrcyBDb25maWciKSxiTT1uZXcgcGUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJ1bnRpbWUgQ2hlY2tzIiksczQ9bmV3IHBlKCJAbmdyeC9zdG9yZSBDaGVjayBpZiBBY3Rpb24gdHlwZXMgYXJlIHVuaXF1ZSIpO2Z1bmN0aW9uIEZtKG4sdD17fSl7bGV0IGU9T2JqZWN0LmtleXMobiksaT17fTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IHM9ZVtvXTsiZnVuY3Rpb24iPT10eXBlb2YgbltzXSYmKGlbc109bltzXSl9bGV0IHI9T2JqZWN0LmtleXMoaSk7cmV0dXJuIGZ1bmN0aW9uKHMsYSl7cz12b2lkIDA9PT1zP3Q6cztsZXQgbD0hMSxjPXt9O2ZvcihsZXQgdT0wO3U8ci5sZW5ndGg7dSsrKXtsZXQgZD1yW3VdLGg9c1tkXSxmPSgwLGlbZF0pKGgsYSk7Y1tkXT1mLGw9bHx8ZiE9PWh9cmV0dXJuIGw/YzpzfX1mdW5jdGlvbiBNQSguLi5uKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiB0O2xldCBlPW5bbi5sZW5ndGgtMV07cmV0dXJuIG4uc2xpY2UoMCwtMSkucmVkdWNlUmlnaHQoKHIsbyk9Pm8ociksZSh0KSl9fWZ1bmN0aW9uIENKKG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPjAmJihuPU1BLmFwcGx5KG51bGwsWy4uLnQsbl0pKSwoZSxpKT0+e2xldCByPW4oZSk7cmV0dXJuKG8scyk9PnIobz12b2lkIDA9PT1vP2k6byxzKX19bmV3IHBlKCJAbmdyeC9zdG9yZSBSb290IFN0b3JlIFByb3ZpZGVyIiksbmV3IHBlKCJAbmdyeC9zdG9yZSBGZWF0dXJlIFN0YXRlIFByb3ZpZGVyIik7dmFyIHhNPWNsYXNzIGV4dGVuZHMgdW57fSxiQT1jbGFzcyBleHRlbmRzIHFfe30seEE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhye2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKG8ocixpKSksdGhpcy5kaXNwYXRjaGVyPWUsdGhpcy5pbml0aWFsU3RhdGU9aSx0aGlzLnJlZHVjZXJzPXIsdGhpcy5yZWR1Y2VyRmFjdG9yeT1vfWdldCBjdXJyZW50UmVkdWNlcnMoKXtyZXR1cm4gdGhpcy5yZWR1Y2Vyc31hZGRGZWF0dXJlKGUpe3RoaXMuYWRkRmVhdHVyZXMoW2VdKX1hZGRGZWF0dXJlcyhlKXtsZXQgaT1lLnJlZHVjZSgocix7cmVkdWNlcnM6byxyZWR1Y2VyRmFjdG9yeTpzLG1ldGFSZWR1Y2VyczphLGluaXRpYWxTdGF0ZTpsLGtleTpjfSk9PntsZXQgdT0iZnVuY3Rpb24iPT10eXBlb2Ygbz9mdW5jdGlvbihuKXtsZXQgdD1BcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aD4wP01BKC4uLm4pOmU9PmU7cmV0dXJuKGUsaSk9PihlPXQoZSksKHIsbyk9PmUocj12b2lkIDA9PT1yP2k6cixvKSl9KGEpKG8sbCk6Q0oocyxhKShvLGwpO3JldHVybiByW2NdPXUscn0se30pO3RoaXMuYWRkUmVkdWNlcnMoaSl9cmVtb3ZlRmVhdHVyZShlKXt0aGlzLnJlbW92ZUZlYXR1cmVzKFtlXSl9cmVtb3ZlRmVhdHVyZXMoZSl7dGhpcy5yZW1vdmVSZWR1Y2VycyhlLm1hcChpPT5pLmtleSkpfWFkZFJlZHVjZXIoZSxpKXt0aGlzLmFkZFJlZHVjZXJzKHtbZV06aX0pfWFkZFJlZHVjZXJzKGUpe3RoaXMucmVkdWNlcnM9ey4uLnRoaXMucmVkdWNlcnMsLi4uZX0sdGhpcy51cGRhdGVSZWR1Y2VycyhPYmplY3Qua2V5cyhlKSl9cmVtb3ZlUmVkdWNlcihlKXt0aGlzLnJlbW92ZVJlZHVjZXJzKFtlXSl9cmVtb3ZlUmVkdWNlcnMoZSl7ZS5mb3JFYWNoKGk9Pnt0aGlzLnJlZHVjZXJzPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZpbHRlcihlPT5lIT09dCkucmVkdWNlKChlLGkpPT5PYmplY3QuYXNzaWduKGUse1tpXTpuW2ldfSkse30pfSh0aGlzLnJlZHVjZXJzLGkpfSksdGhpcy51cGRhdGVSZWR1Y2VycyhlKX11cGRhdGVSZWR1Y2VycyhlKXt0aGlzLm5leHQodGhpcy5yZWR1Y2VyRmFjdG9yeSh0aGlzLnJlZHVjZXJzLHRoaXMuaW5pdGlhbFN0YXRlKSksdGhpcy5kaXNwYXRjaGVyLm5leHQoe3R5cGU6IkBuZ3J4L3N0b3JlL3VwZGF0ZS1yZWR1Y2VycyIsZmVhdHVyZXM6ZX0pfW5nT25EZXN0cm95KCl7dGhpcy5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKGJBKSxqKG80KSxqKHlKKSxqKHZKKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksRUllPVt4QSx7cHJvdmlkZTp4TSx1c2VFeGlzdGluZzp4QX0se3Byb3ZpZGU6YkEsdXNlRXhpc3Rpbmc6cV99XSxDTT0oKCk9PntjbGFzcyBuIGV4dGVuZHMga2V7bmdPbkRlc3Ryb3koKXt0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxUSWU9W0NNXSxDQT1jbGFzcyBleHRlbmRzIHVue30sZEo9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhye2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKG8pO2xldCBjPWUucGlwZShCZihnTikpLnBpcGUoV3QoaSkpLnBpcGUoZnVuY3Rpb24obix0KXtyZXR1cm4gZW4oQVcobix0LGFyZ3VtZW50cy5sZW5ndGg+PTIsITApKX0oREllLHtzdGF0ZTpvfSkpO3RoaXMuc3RhdGVTdWJzY3JpcHRpb249Yy5zdWJzY3JpYmUoKHtzdGF0ZTp1LGFjdGlvbjpkfSk9Pnt0aGlzLm5leHQodSksci5uZXh0KGQpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5jb21wbGV0ZSgpfX1yZXR1cm4gbi5JTklUPWdKLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihxXyksaih4TSksaihDTSksaihvNCkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpO2Z1bmN0aW9uIERJZShuPXtzdGF0ZTp2b2lkIDB9LFt0LGVdKXtsZXR7c3RhdGU6aX09bjtyZXR1cm57c3RhdGU6ZShpLHQpLGFjdGlvbjp0fX12YXIgQUllPVtkSix7cHJvdmlkZTpDQSx1c2VFeGlzdGluZzpkSn1dLENlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB1bntjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoKSx0aGlzLmFjdGlvbnNPYnNlcnZlcj1pLHRoaXMucmVkdWNlck1hbmFnZXI9cix0aGlzLnNvdXJjZT1lfXNlbGVjdChlLC4uLmkpe3JldHVybiB2dC5jYWxsKG51bGwsZSwuLi5pKSh0aGlzKX1saWZ0KGUpe2xldCBpPW5ldyBuKHRoaXMsdGhpcy5hY3Rpb25zT2JzZXJ2ZXIsdGhpcy5yZWR1Y2VyTWFuYWdlcik7cmV0dXJuIGkub3BlcmF0b3I9ZSxpfWRpc3BhdGNoKGUpe3RoaXMuYWN0aW9uc09ic2VydmVyLm5leHQoZSl9bmV4dChlKXt0aGlzLmFjdGlvbnNPYnNlcnZlci5uZXh0KGUpfWVycm9yKGUpe3RoaXMuYWN0aW9uc09ic2VydmVyLmVycm9yKGUpfWNvbXBsZXRlKCl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIuY29tcGxldGUoKX1hZGRSZWR1Y2VyKGUsaSl7dGhpcy5yZWR1Y2VyTWFuYWdlci5hZGRSZWR1Y2VyKGUsaSl9cmVtb3ZlUmVkdWNlcihlKXt0aGlzLnJlZHVjZXJNYW5hZ2VyLnJlbW92ZVJlZHVjZXIoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooQ0EpLGoocV8pLGooeEEpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxJSWU9W0NlXTtmdW5jdGlvbiB2dChuLHQsLi4uZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2xldCBvO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7bGV0IHM9W3QsLi4uZV0uZmlsdGVyKEJvb2xlYW4pO289ci5waXBlKGZ1bmN0aW9uKC4uLm4pe2xldCB0PW4ubGVuZ3RoO2lmKDA9PT10KXRocm93IG5ldyBFcnJvcigibGlzdCBvZiBwcm9wZXJ0aWVzIGNhbm5vdCBiZSBlbXB0eS4iKTtyZXR1cm4gTChlPT57bGV0IGk9ZTtmb3IobGV0IHI9MDtyPHQ7cisrKXtsZXQgbz1pPy5bbltyXV07aWYoISh0eXBlb2YgbzwidSIpKXJldHVybjtpPW99cmV0dXJuIGl9KX0obiwuLi5zKSl9ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmV4cGVjdGVkIHR5cGUgJyR7dHlwZW9mIG59JyBpbiBzZWxlY3Qgb3BlcmF0b3IsIGV4cGVjdGVkICdzdHJpbmcnIG9yICdmdW5jdGlvbidgKTtvPXIucGlwZShMKHM9Pm4ocyx0KSkpfXJldHVybiBvLnBpcGUoeWkoKSl9fXZhciBhND0iaHR0cHM6Ly9uZ3J4LmlvL2d1aWRlL3N0b3JlL2NvbmZpZ3VyYXRpb24vcnVudGltZS1jaGVja3MiO2Z1bmN0aW9uIHBKKG4pe3JldHVybiB2b2lkIDA9PT1ufWZ1bmN0aW9uIGhKKG4pe3JldHVybiBudWxsPT09bn1mdW5jdGlvbiBNSihuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKX1mdW5jdGlvbiB3SihuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1ufWZ1bmN0aW9uIG40KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIGZKKG4sdCl7cmV0dXJuIG49PT10fWZ1bmN0aW9uIEhJZShuLHQsZSl7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspaWYoIWUobltpXSx0W2ldKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBTSihuLHQ9ZkosZT1mSil7bGV0IG8saT1udWxsLHI9bnVsbDtyZXR1cm57bWVtb2l6ZWQ6ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1vKXJldHVybiBvLnJlc3VsdDtpZighaSlyZXR1cm4gcj1uLmFwcGx5KG51bGwsYXJndW1lbnRzKSxpPWFyZ3VtZW50cyxyO2lmKCFISWUoYXJndW1lbnRzLGksdCkpcmV0dXJuIHI7bGV0IHU9bi5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGk9YXJndW1lbnRzLGUocix1KT9yOihyPXUsdSl9LHJlc2V0OmZ1bmN0aW9uKCl7aT1udWxsLHI9bnVsbH0sc2V0UmVzdWx0OmZ1bmN0aW9uKHUpe289e3Jlc3VsdDp1fX0sY2xlYXJSZXN1bHQ6ZnVuY3Rpb24oKXtvPXZvaWQgMH19fWZ1bmN0aW9uIEooLi4ubil7cmV0dXJuIGZ1bmN0aW9uKG4sdD17c3RhdGVGbjpVSWV9KXtyZXR1cm4gZnVuY3Rpb24oLi4uZSl7bGV0IGk9ZTtpZihBcnJheS5pc0FycmF5KGlbMF0pKXtsZXRbdSwuLi5kXT1pO2k9Wy4uLnUsLi4uZF19bGV0IHI9aS5zbGljZSgwLGkubGVuZ3RoLTEpLG89aVtpLmxlbmd0aC0xXSxzPXIuZmlsdGVyKHU9PnUucmVsZWFzZSYmImZ1bmN0aW9uIj09dHlwZW9mIHUucmVsZWFzZSksYT1uKGZ1bmN0aW9uKC4uLnUpe3JldHVybiBvLmFwcGx5KG51bGwsdSl9KSxsPVNKKGZ1bmN0aW9uKHUsZCl7cmV0dXJuIHQuc3RhdGVGbi5hcHBseShudWxsLFt1LHIsZCxhXSl9KTtyZXR1cm4gT2JqZWN0LmFzc2lnbihsLm1lbW9pemVkLHtyZWxlYXNlOmZ1bmN0aW9uKCl7bC5yZXNldCgpLGEucmVzZXQoKSxzLmZvckVhY2godT0+dS5yZWxlYXNlKCkpfSxwcm9qZWN0b3I6YS5tZW1vaXplZCxzZXRSZXN1bHQ6bC5zZXRSZXN1bHQsY2xlYXJSZXN1bHQ6bC5jbGVhclJlc3VsdH0pfX0oU0opKC4uLm4pfWZ1bmN0aW9uIFVJZShuLHQsZSxpKXtpZih2b2lkIDA9PT1lKXtsZXQgbz10Lm1hcChzPT5zKG4pKTtyZXR1cm4gaS5tZW1vaXplZC5hcHBseShudWxsLG8pfWxldCByPXQubWFwKG89Pm8obixlKSk7cmV0dXJuIGkubWVtb2l6ZWQuYXBwbHkobnVsbCxbLi4ucixlXSl9ZnVuY3Rpb24gTXIobil7cmV0dXJuIEoodD0+e2xldCBlPXRbbl07cmV0dXJuIHRDKCkmJiEobiBpbiB0KSYmY29uc29sZS53YXJuKGBAbmdyeC9zdG9yZTogVGhlIGZlYXR1cmUgbmFtZSAiJHtufSIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHN0YXRlLCB0aGVyZWZvcmUgY3JlYXRlRmVhdHVyZVNlbGVjdG9yIGNhbm5vdCBhY2Nlc3MgaXQuICBCZSBzdXJlIGl0IGlzIGltcG9ydGVkIGluIGEgbG9hZGVkIG1vZHVsZSB1c2luZyBTdG9yZU1vZHVsZS5mb3JSb290KCcke259JywgLi4uKSBvciBTdG9yZU1vZHVsZS5mb3JGZWF0dXJlKCcke259JywgLi4uKS4gIElmIHRoZSBkZWZhdWx0IHN0YXRlIGlzIGludGVuZGVkIHRvIGJlIHVuZGVmaW5lZCwgYXMgaXMgdGhlIGNhc2Ugd2l0aCByb3V0ZXIgc3RhdGUsIHRoaXMgZGV2ZWxvcG1lbnQtb25seSB3YXJuaW5nIG1lc3NhZ2UgY2FuIGJlIGlnbm9yZWQuYCksZX0sdD0+dCl9ZnVuY3Rpb24gakllKG4sdCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBwZT9uLmdldCh0KTp0fWZ1bmN0aW9uIEdJZShuLHQsZSl7cmV0dXJuIGUubWFwKChpLHIpPT57aWYodFtyXWluc3RhbmNlb2YgcGUpe2xldCBvPW4uZ2V0KHRbcl0pO3JldHVybntrZXk6aS5rZXkscmVkdWNlckZhY3Rvcnk6by5yZWR1Y2VyRmFjdG9yeT9vLnJlZHVjZXJGYWN0b3J5OkZtLG1ldGFSZWR1Y2VyczpvLm1ldGFSZWR1Y2Vycz9vLm1ldGFSZWR1Y2VyczpbXSxpbml0aWFsU3RhdGU6by5pbml0aWFsU3RhdGV9fXJldHVybiBpfSl9ZnVuY3Rpb24gV0llKG4sdCl7cmV0dXJuIHQubWFwKGk9PmkgaW5zdGFuY2VvZiBwZT9uLmdldChpKTppKX1mdW5jdGlvbiBFSihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uKCk6bn1mdW5jdGlvbiBxSWUobix0KXtyZXR1cm4gbi5jb25jYXQodCl9ZnVuY3Rpb24gWUllKG4pe2lmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHJvb3QgU3RvcmUgaGFzIGJlZW4gcHJvdmlkZWQgbW9yZSB0aGFuIG9uY2UuIEZlYXR1cmUgbW9kdWxlcyBzaG91bGQgcHJvdmlkZSBmZWF0dXJlIHN0YXRlcyBpbnN0ZWFkLiIpO3JldHVybiJndWFyZGVkIn1mdW5jdGlvbiBpNChuKXtPYmplY3QuZnJlZXplKG4pO2xldCB0PW40KG4pO3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5mb3JFYWNoKGU9PntpZighZS5zdGFydHNXaXRoKCJcdTAyNzUiKSYmZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdCl9KG4sZSkmJighdHx8ImNhbGxlciIhPT1lJiYiY2FsbGVlIiE9PWUmJiJhcmd1bWVudHMiIT09ZSkpe2xldCBpPW5bZV07KHdKKGkpfHxuNChpKSkmJiFPYmplY3QuaXNGcm96ZW4oaSkmJmk0KGkpfX0pLG59ZnVuY3Rpb24gcjQobix0PVtdKXtyZXR1cm4ocEoobil8fGhKKG4pKSYmMD09PXQubGVuZ3RoP3twYXRoOlsicm9vdCJdLHZhbHVlOm59Ok9iamVjdC5rZXlzKG4pLnJlZHVjZSgoaSxyKT0+e2lmKGkpcmV0dXJuIGk7bGV0IG89bltyXTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG40KG4pJiZuLmhhc093blByb3BlcnR5KCJcdTAyNzVjbXAiKX0obyk/aTohKHBKKG8pfHxoSihvKXx8ZnVuY3Rpb24obil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBufShvKXx8ZnVuY3Rpb24obil7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygbn0obyl8fGZ1bmN0aW9uKG4pe3JldHVybiJzdHJpbmciPT10eXBlb2Ygbn0obyl8fE1KKG8pKSYmKGZ1bmN0aW9uKG4pe2lmKCFmdW5jdGlvbihuKXtyZXR1cm4gd0oobikmJiFNSihuKX0obikpcmV0dXJuITE7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiB0PT09T2JqZWN0LnByb3RvdHlwZXx8bnVsbD09PXR9KG8pP3I0KG8sWy4uLnQscl0pOntwYXRoOlsuLi50LHJdLHZhbHVlOm99KX0sITEpfWZ1bmN0aW9uIG1KKG4sdCl7aWYoITE9PT1uKXJldHVybjtsZXQgZT1uLnBhdGguam9pbigiLiIpLGk9bmV3IEVycm9yKGBEZXRlY3RlZCB1bnNlcmlhbGl6YWJsZSAke3R9IGF0ICIke2V9Ii4gJHthNH0jc3RyaWN0JHt0fXNlcmlhbGl6YWJpbGl0eWApO3Rocm93IGkudmFsdWU9bi52YWx1ZSxpLnVuc2VyaWFsaXphYmxlUGF0aD1lLGl9ZnVuY3Rpb24gWkllKG4pe3JldHVybiB0QygpP3tzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiEwLHN0cmljdEFjdGlvbldpdGhpbk5nWm9uZTohMSxzdHJpY3RBY3Rpb25UeXBlVW5pcXVlbmVzczohMSwuLi5ufTp7c3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdFN0YXRlSW1tdXRhYmlsaXR5OiExLHN0cmljdEFjdGlvbkltbXV0YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6ITEsc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3M6ITF9fWZ1bmN0aW9uIEpJZSh7c3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5Om4sc3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6dH0pe3JldHVybiBlPT5ufHx0P2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7dC5hY3Rpb24oaSkmJm1KKHI0KGkpLCJhY3Rpb24iKTtsZXQgcj1uKGUsaSk7cmV0dXJuIHQuc3RhdGUoKSYmbUoocjQociksInN0YXRlIikscn19KGUse2FjdGlvbjppPT5uJiYhbDQoaSksc3RhdGU6KCk9PnR9KTplfWZ1bmN0aW9uICRJZSh7c3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5Om4sc3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6dH0pe3JldHVybiBlPT5ufHx0P2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7bGV0IHI9dC5hY3Rpb24oaSk/aTQoaSk6aSxvPW4oZSxyKTtyZXR1cm4gdC5zdGF0ZSgpP2k0KG8pOm99fShlLHthY3Rpb246aT0+biYmIWw0KGkpLHN0YXRlOigpPT50fSk6ZX1mdW5jdGlvbiBsNChuKXtyZXR1cm4gbi50eXBlLnN0YXJ0c1dpdGgoIkBuZ3J4Iil9ZnVuY3Rpb24gZTJlKHtzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6bn0pe3JldHVybiB0PT5uP2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7aWYodC5hY3Rpb24oaSkmJiFfdC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiAnJHtpLnR5cGV9JyBydW5uaW5nIG91dHNpZGUgTmdab25lLiAke2E0fSNzdHJpY3RhY3Rpb253aXRoaW5uZ3pvbmVgKTtyZXR1cm4gbihlLGkpfX0odCx7YWN0aW9uOmU9Pm4mJiFsNChlKX0pOnR9ZnVuY3Rpb24gdDJlKG4pe3JldHVyblt7cHJvdmlkZTp1Six1c2VWYWx1ZTpufSx7cHJvdmlkZTpjSix1c2VGYWN0b3J5Om4yZSxkZXBzOlt1Sl19LHtwcm92aWRlOmJNLGRlcHM6W2NKXSx1c2VGYWN0b3J5OlpJZX0se3Byb3ZpZGU6V18sbXVsdGk6ITAsZGVwczpbYk1dLHVzZUZhY3Rvcnk6JEllfSx7cHJvdmlkZTpXXyxtdWx0aTohMCxkZXBzOltiTV0sdXNlRmFjdG9yeTpKSWV9LHtwcm92aWRlOldfLG11bHRpOiEwLGRlcHM6W2JNXSx1c2VGYWN0b3J5OmUyZX1dfWZ1bmN0aW9uIFRKKCl7cmV0dXJuW3twcm92aWRlOnM0LG11bHRpOiEwLGRlcHM6W2JNXSx1c2VGYWN0b3J5OmkyZX1dfWZ1bmN0aW9uIG4yZShuKXtyZXR1cm4gbn1mdW5jdGlvbiBpMmUobil7aWYoIW4uc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3MpcmV0dXJuO2xldCB0PU9iamVjdC5lbnRyaWVzKHQ0KS5maWx0ZXIoKFssZV0pPT5lPjEpLm1hcCgoW2VdKT0+ZSk7aWYodC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBBY3Rpb24gdHlwZXMgYXJlIHJlZ2lzdGVyZWQgbW9yZSB0aGFuIG9uY2UsICR7dC5tYXAoZT0+YCIke2V9ImApLmpvaW4oIiwgIil9LiAke2E0fSNzdHJpY3RhY3Rpb250eXBldW5pcXVlbmVzc2ApfWZ1bmN0aW9uIHIyZShuLHQpe3JldHVyblt7cHJvdmlkZTpfSix1c2VGYWN0b3J5OllJZSxkZXBzOltbQ2UsbmV3IG5zLG5ldyB0bF1dfSx7cHJvdmlkZTp0Six1c2VWYWx1ZTp0LmluaXRpYWxTdGF0ZX0se3Byb3ZpZGU6bzQsdXNlRmFjdG9yeTpFSixkZXBzOlt0Sl19LHtwcm92aWRlOiQ1LHVzZVZhbHVlOm59LHtwcm92aWRlOnJKLHVzZUV4aXN0aW5nOm4gaW5zdGFuY2VvZiBwZT9uOiQ1fSx7cHJvdmlkZTp5SixkZXBzOltYbiwkNSxbbmV3IGowKHJKKV1dLHVzZUZhY3Rvcnk6akllfSx7cHJvdmlkZTphSix1c2VWYWx1ZTp0Lm1ldGFSZWR1Y2Vycz90Lm1ldGFSZWR1Y2VyczpbXX0se3Byb3ZpZGU6bEosZGVwczpbV18sYUpdLHVzZUZhY3Rvcnk6cUllfSx7cHJvdmlkZTpuSix1c2VWYWx1ZTp0LnJlZHVjZXJGYWN0b3J5P3QucmVkdWNlckZhY3Rvcnk6Rm19LHtwcm92aWRlOnZKLGRlcHM6W25KLGxKXSx1c2VGYWN0b3J5OkNKfSxiSWUsRUllLFRJZSxBSWUsSUllLHQyZSh0LnJ1bnRpbWVDaGVja3MpLFRKKCldfWZ1bmN0aW9uIG8yZShuLHQsZT17fSl7cmV0dXJuW3twcm92aWRlOm9KLG11bHRpOiEwLHVzZVZhbHVlOm4gaW5zdGFuY2VvZiBPYmplY3Q/e306ZX0se3Byb3ZpZGU6aUosbXVsdGk6ITAsdXNlVmFsdWU6e2tleTpuIGluc3RhbmNlb2YgT2JqZWN0P24ubmFtZTpuLHJlZHVjZXJGYWN0b3J5OmUgaW5zdGFuY2VvZiBwZXx8IWUucmVkdWNlckZhY3Rvcnk/Rm06ZS5yZWR1Y2VyRmFjdG9yeSxtZXRhUmVkdWNlcnM6ZSBpbnN0YW5jZW9mIHBlfHwhZS5tZXRhUmVkdWNlcnM/W106ZS5tZXRhUmVkdWNlcnMsaW5pdGlhbFN0YXRlOmUgaW5zdGFuY2VvZiBwZXx8IWUuaW5pdGlhbFN0YXRlP3ZvaWQgMDplLmluaXRpYWxTdGF0ZX19LHtwcm92aWRlOmJKLGRlcHM6W1huLG9KLGlKXSx1c2VGYWN0b3J5OkdJZX0se3Byb3ZpZGU6ZTQsbXVsdGk6ITAsdXNlVmFsdWU6biBpbnN0YW5jZW9mIE9iamVjdD9uLnJlZHVjZXI6dH0se3Byb3ZpZGU6c0osbXVsdGk6ITAsdXNlRXhpc3Rpbmc6dCBpbnN0YW5jZW9mIHBlP3Q6ZTR9LHtwcm92aWRlOnhKLG11bHRpOiEwLGRlcHM6W1huLGU0LFtuZXcgajAoc0opXV0sdXNlRmFjdG9yeTpXSWV9LFRKKCldfXZhciBNTT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGoocV8pLGooeE0pLGooQ00pLGooQ2UpLGooX0osOCksaihzNCw4KSl9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLHdBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzKXt0aGlzLmZlYXR1cmVzPWUsdGhpcy5mZWF0dXJlUmVkdWNlcnM9aSx0aGlzLnJlZHVjZXJNYW5hZ2VyPXI7bGV0IGE9ZS5tYXAoKGwsYyk9PntsZXQgZD1pLnNoaWZ0KClbY107cmV0dXJuey4uLmwscmVkdWNlcnM6ZCxpbml0aWFsU3RhdGU6RUoobC5pbml0aWFsU3RhdGUpfX0pO3IuYWRkRmVhdHVyZXMoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlZHVjZXJNYW5hZ2VyLnJlbW92ZUZlYXR1cmVzKHRoaXMuZmVhdHVyZXMpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKGJKKSxqKHhKKSxqKHhBKSxqKE1NKSxqKHM0LDgpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksd3I9KCgpPT57Y2xhc3MgbntzdGF0aWMgZm9yUm9vdChlLGk9e30pe3JldHVybntuZ01vZHVsZTpNTSxwcm92aWRlcnM6Wy4uLnIyZShlLGkpXX19c3RhdGljIGZvckZlYXR1cmUoZSxpLHI9e30pe3JldHVybntuZ01vZHVsZTp3QSxwcm92aWRlcnM6Wy4uLm8yZShlLGkscildfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpO2Z1bmN0aW9uIFNlKC4uLm4pe3JldHVybntyZWR1Y2VyOm4ucG9wKCksdHlwZXM6bi5tYXAoaT0+aS50eXBlKX19ZnVuY3Rpb24gdnIobiwuLi50KXtsZXQgZT1uZXcgTWFwO2ZvcihsZXQgaSBvZiB0KWZvcihsZXQgciBvZiBpLnR5cGVzKXtsZXQgbz1lLmdldChyKTtlLnNldChyLG8/KGEsbCk9PmkucmVkdWNlcihvKGEsbCksbCk6aS5yZWR1Y2VyKX1yZXR1cm4gZnVuY3Rpb24oaT1uLHIpe2xldCBvPWUuZ2V0KHIudHlwZSk7cmV0dXJuIG8/byhpLHIpOml9fXZhciBzMmU9e2Rpc3BhdGNoOiEwLHVzZUVmZmVjdHNFcnJvckhhbmRsZXI6ITB9LEVBPSJfX0BuZ3J4L2VmZmVjdHNfY3JlYXRlX18iO2Z1bmN0aW9uIGNyKG4sdCl7bGV0IGU9bigpLGk9ey4uLnMyZSwuLi50fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsRUEse3ZhbHVlOml9KSxlfWZ1bmN0aW9uIGEyZShuKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikuZmlsdGVyKGk9PiEoIW5baV18fCFuW2ldLmhhc093blByb3BlcnR5KEVBKSkmJm5baV1bRUFdLmhhc093blByb3BlcnR5KCJkaXNwYXRjaCIpKS5tYXAoaT0+KHtwcm9wZXJ0eU5hbWU6aSwuLi5uW2ldW0VBXX0pKX1mdW5jdGlvbiB1NChuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pfXZhciBJSj0iX19AbmdyeC9lZmZlY3RzX18iO2Z1bmN0aW9uIGwyZShuKXtyZXR1cm4gTUEodTJlLHU0KShuKX1mdW5jdGlvbiB1MmUobil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuLmNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KElKKX0obik/bi5jb25zdHJ1Y3RvcltJSl06W119ZnVuY3Rpb24gUEoobix0LGU9MTApe3JldHVybiBuLnBpcGUoZm8oaT0+KHQmJnQuaGFuZGxlRXJyb3IoaSksZTw9MT9uOlBKKG4sdCxlLTEpKSkpfXZhciBQbz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdW57Y29uc3RydWN0b3IoZSl7c3VwZXIoKSxlJiYodGhpcy5zb3VyY2U9ZSl9bGlmdChlKXtsZXQgaT1uZXcgbjtyZXR1cm4gaS5zb3VyY2U9dGhpcyxpLm9wZXJhdG9yPWUsaX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihDTSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGlpKC4uLm4pe3JldHVybiBZZSh0PT5uLnNvbWUoZT0+InN0cmluZyI9PXR5cGVvZiBlP2U9PT10LnR5cGU6ZS50eXBlPT09dC50eXBlKSl9dmFyIFJKPW5ldyBwZSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBSb290IEd1YXJkIiksU0E9bmV3IHBlKCJAbmdyeC9lZmZlY3RzIFVzZXIgUHJvdmlkZWQgRWZmZWN0cyIpLGM0PW5ldyBwZSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBSb290IEVmZmVjdHMiKSxPSj1uZXcgcGUoIkBuZ3J4L2VmZmVjdHMgUm9vdCBFZmZlY3RzIiksREo9bmV3IHBlKCJAbmdyeC9lZmZlY3RzIEludGVybmFsIEZlYXR1cmUgRWZmZWN0cyIpLGtKPW5ldyBwZSgiQG5ncngvZWZmZWN0cyBGZWF0dXJlIEVmZmVjdHMiKSxmMmU9bmV3IHBlKCJAbmdyeC9lZmZlY3RzIEVmZmVjdHMgRXJyb3IgSGFuZGxlciIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PlBKfSksRko9IkBuZ3J4L2VmZmVjdHMvaW5pdCI7ZnVuY3Rpb24gdzJlKG4pe3JldHVybiBkNChuLCJuZ3J4T25Jbml0RWZmZWN0cyIpfWZ1bmN0aW9uIGQ0KG4sdCl7cmV0dXJuIG4mJnQgaW4gbiYmImZ1bmN0aW9uIj09dHlwZW9mIG5bdF19YmUoRkopO3ZhciBOSj0oKCk9PntjbGFzcyBuIGV4dGVuZHMga2V7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuZXJyb3JIYW5kbGVyPWUsdGhpcy5lZmZlY3RzRXJyb3JIYW5kbGVyPWl9YWRkRWZmZWN0cyhlKXt0aGlzLm5leHQoZSl9dG9BY3Rpb25zKCl7cmV0dXJuIHRoaXMucGlwZSh4MSh1NCkseG4oZT0+ZS5waXBlKHgxKFMyZSkpKSx4bihlPT57bGV0IGk9ZS5waXBlKHkxKG89PmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGU9PntsZXQgaT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9dTQobikuY29uc3RydWN0b3IubmFtZSxyPWZ1bmN0aW9uKG4pe3JldHVybltsMmUsYTJlXS5yZWR1Y2UoKGUsaSk9PmUuY29uY2F0KGkobikpLFtdKX0obikubWFwKCh7cHJvcGVydHlOYW1lOm8sZGlzcGF0Y2g6cyx1c2VFZmZlY3RzRXJyb3JIYW5kbGVyOmF9KT0+e2xldCBsPSJmdW5jdGlvbiI9PXR5cGVvZiBuW29dP25bb10oKTpuW29dLGM9YT9lKGwsdCk6bDtyZXR1cm4hMT09PXM/Yy5waXBlKGx4KCkpOmMucGlwZShlbigobix0KT0+e24uc3Vic2NyaWJlKGp0KHQsZT0+e3QubmV4dChSbC5jcmVhdGVOZXh0KGUpKX0sKCk9Pnt0Lm5leHQoUmwuY3JlYXRlQ29tcGxldGUoKSksdC5jb21wbGV0ZSgpfSxlPT57dC5uZXh0KFJsLmNyZWF0ZUVycm9yKGUpKSx0LmNvbXBsZXRlKCl9KSl9KSkucGlwZShMKGQ9Pih7ZWZmZWN0Om5bb10sbm90aWZpY2F0aW9uOmQscHJvcGVydHlOYW1lOm8sc291cmNlTmFtZTppLHNvdXJjZUluc3RhbmNlOm59KSkpfSk7cmV0dXJuIEp0KC4uLnIpfShlLG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBkNChuLCJuZ3J4T25SdW5FZmZlY3RzIil9KGUpP2UubmdyeE9uUnVuRWZmZWN0cyhpKTppfX0odGhpcy5lcnJvckhhbmRsZXIsdGhpcy5lZmZlY3RzRXJyb3JIYW5kbGVyKShvKSksTChvPT4oZnVuY3Rpb24obix0KXtpZigiTiI9PT1uLm5vdGlmaWNhdGlvbi5raW5kKXtsZXQgZT1uLm5vdGlmaWNhdGlvbi52YWx1ZTshZnVuY3Rpb24obil7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIG4mJm4mJm4udHlwZSYmInN0cmluZyI9PXR5cGVvZiBuLnR5cGV9KGUpJiZ0LmhhbmRsZUVycm9yKG5ldyBFcnJvcihgRWZmZWN0ICR7ZnVuY3Rpb24oe3Byb3BlcnR5TmFtZTpuLHNvdXJjZUluc3RhbmNlOnQsc291cmNlTmFtZTplfSl7bGV0IGk9ImZ1bmN0aW9uIj09dHlwZW9mIHRbbl07cmV0dXJuYCIke2V9LiR7U3RyaW5nKG4pfSR7aT8iKCkiOiIifSJgfShuKX0gZGlzcGF0Y2hlZCBhbiBpbnZhbGlkIGFjdGlvbjogJHtmdW5jdGlvbihuKXt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG4pfWNhdGNoe3JldHVybiBufX0oZSl9YCkpfX0obyx0aGlzLmVycm9ySGFuZGxlciksby5ub3RpZmljYXRpb24pKSxZZShvPT4iTiI9PT1vLmtpbmQmJm51bGwhPW8udmFsdWUpLGVuKChuLHQpPT57bi5zdWJzY3JpYmUoanQodCxlPT5iTihlLHQpKSl9KSk7cmV0dXJuIEp0KGksZS5waXBlKFF0KDEpLFllKHcyZSksTChvPT5vLm5ncnhPbkluaXRFZmZlY3RzKCkpKSl9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooUXMpLGooZjJlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gUzJlKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZDQobiwibmdyeE9uSWRlbnRpZnlFZmZlY3RzIil9KG4pP24ubmdyeE9uSWRlbnRpZnlFZmZlY3RzKCk6IiJ9dmFyIExKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmVmZmVjdFNvdXJjZXM9ZSx0aGlzLnN0b3JlPWksdGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uPW51bGx9Z2V0IGlzU3RhcnRlZCgpe3JldHVybiEhdGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9ufXN0YXJ0KCl7dGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9ufHwodGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uPXRoaXMuZWZmZWN0U291cmNlcy50b0FjdGlvbnMoKS5zdWJzY3JpYmUodGhpcy5zdG9yZSkpfW5nT25EZXN0cm95KCl7dGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uJiYodGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uPW51bGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKE5KKSxqKENlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksQko9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXt0aGlzLnNvdXJjZXM9ZSxpLnN0YXJ0KCksby5mb3JFYWNoKGM9PmUuYWRkRWZmZWN0cyhjKSksci5kaXNwYXRjaCh7dHlwZTpGSn0pfWFkZEVmZmVjdHMoZSl7dGhpcy5zb3VyY2VzLmFkZEVmZmVjdHMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooTkopLGooTEopLGooQ2UpLGooT0opLGooTU0sOCksaih3QSw4KSxqKFJKLDgpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksVDJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7aS5mb3JFYWNoKHM9PnMuZm9yRWFjaChhPT5lLmFkZEVmZmVjdHMoYSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihCSiksaihrSiksaihNTSw4KSxqKHdBLDgpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCkscm89KCgpPT57Y2xhc3MgbntzdGF0aWMgZm9yRmVhdHVyZShlPVtdKXtyZXR1cm57bmdNb2R1bGU6VDJlLHByb3ZpZGVyczpbZSx7cHJvdmlkZTpESixtdWx0aTohMCx1c2VWYWx1ZTplfSx7cHJvdmlkZTpTQSxtdWx0aTohMCx1c2VWYWx1ZTpbXX0se3Byb3ZpZGU6a0osbXVsdGk6ITAsdXNlRmFjdG9yeTpBSixkZXBzOltYbixESixTQV19XX19c3RhdGljIGZvclJvb3QoZT1bXSl7cmV0dXJue25nTW9kdWxlOkJKLHByb3ZpZGVyczpbZSx7cHJvdmlkZTpjNCx1c2VWYWx1ZTpbZV19LHtwcm92aWRlOlJKLHVzZUZhY3Rvcnk6QTJlLGRlcHM6W1tMSixuZXcgbnMsbmV3IHRsXSxbYzQsbmV3IHczXV19LHtwcm92aWRlOlNBLG11bHRpOiEwLHVzZVZhbHVlOltdfSx7cHJvdmlkZTpPSix1c2VGYWN0b3J5OkFKLGRlcHM6W1huLGM0LFNBXX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpO2Z1bmN0aW9uIEFKKG4sdCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgdClpLnB1c2goLi4ucik7Zm9yKGxldCByIG9mIGUpaS5wdXNoKC4uLnIpO3JldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiB0Lm1hcChlPT5uLmdldChlKSl9KG4saSl9ZnVuY3Rpb24gQTJlKG4sdCl7aWYoKDEhPT10Lmxlbmd0aHx8MCE9PXRbMF0ubGVuZ3RoKSYmbil0aHJvdyBuZXcgVHlwZUVycm9yKCJFZmZlY3RzTW9kdWxlLmZvclJvb3QoKSBjYWxsZWQgdHdpY2UuIEZlYXR1cmUgbW9kdWxlcyBzaG91bGQgdXNlIEVmZmVjdHNNb2R1bGUuZm9yRmVhdHVyZSgpIGluc3RlYWQuIik7cmV0dXJuImd1YXJkZWQifXZhciBoaT0oKCk9PihmdW5jdGlvbihuKXtuW24uVU5LTk9XTj0wXT0iVU5LTk9XTiIsbltuLkVYUEVSSU1FTlRTPTFdPSJFWFBFUklNRU5UUyIsbltuLkVYUEVSSU1FTlQ9Ml09IkVYUEVSSU1FTlQiLG5bbi5DT01QQVJFX0VYUEVSSU1FTlQ9M109IkNPTVBBUkVfRVhQRVJJTUVOVCIsbltuLk5PVF9TRVQ9NF09Ik5PVF9TRVQiLG5bbi5GTEFHUz01XT0iRkxBR1MifShoaXx8KGhpPXt9KSksaGkpKSgpLFRBPSJkZWZhdWx0RXhwZXJpbWVudElkIixZXz0oKCk9PihmdW5jdGlvbihuKXtuW24uRVhQRVJJTUVOVFM9MF09IkVYUEVSSU1FTlRTIixuW24uREFTSEJPQVJEPTFdPSJEQVNIQk9BUkQifShZX3x8KFlfPXt9KSksWV8pKSgpO2Z1bmN0aW9uIFNNKG4pe3JldHVybiBuLnNwbGl0KCIsIikubWFwKHQ9PntsZXQgZT10LmluZGV4T2YoIjoiKTtpZihlPDApdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgY29sb24gZGVsaW1pdGluZyBuYW1lIGFuZCBJRDogJHt0fWApO2xldCBpPXQuc2xpY2UoMCxlKSxyPXQuc2xpY2UoZSsxKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBpZCB0byBiZSBub24tZmFsc3k6ICR7dH1gKTtyZXR1cm57bmFtZTppLGlkOnJ9fSl9ZnVuY3Rpb24gVkoobil7cmV0dXJuIG4ubWFwKCh7YWxpYXM6dCxpZDplfSk9PmAke3R9OiR7ZX1gKS5qb2luKCIsIil9ZnVuY3Rpb24gd00obix0KXtzd2l0Y2gobil7Y2FzZSBoaS5FWFBFUklNRU5UOnJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZXhwZXJpbWVudElkIik/W3QuZXhwZXJpbWVudElkXTpbVEFdO2Nhc2UgaGkuQ09NUEFSRV9FWFBFUklNRU5UOnJldHVybiBTTSh0LmV4cGVyaW1lbnRJZHMpLm1hcCgoe2lkOml9KT0+aSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gUHMobix0KXtpZighbnx8IXQpcmV0dXJuIG49PT10O2lmKG4ucm91dGVLaW5kIT09dC5yb3V0ZUtpbmQpcmV0dXJuITE7bGV0IGU9d00obi5yb3V0ZUtpbmQsbi5wYXJhbXMpLGk9d00odC5yb3V0ZUtpbmQsdC5wYXJhbXMpO2lmKG51bGw9PT1lfHxudWxsPT09aSlyZXR1cm4gZT09PWk7aWYoZS5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMTtsZXQgcj1pLnNvcnQoKTtyZXR1cm4gZS5zb3J0KCkuZXZlcnkoKG8scyk9PnJbc109PT1vKX1mdW5jdGlvbiBwNChuKXtzd2l0Y2gobil7Y2FzZSBoaS5FWFBFUklNRU5UUzpyZXR1cm4gWV8uRVhQRVJJTUVOVFM7Y2FzZSBoaS5FWFBFUklNRU5UOmNhc2UgaGkuQ09NUEFSRV9FWFBFUklNRU5UOnJldHVybiBZXy5EQVNIQk9BUkQ7Y2FzZSBoaS5VTktOT1dOOmNhc2UgaGkuTk9UX1NFVDpjYXNlIGhpLkZMQUdTOnJldHVybiBudWxsfX1mdW5jdGlvbiBEQShuLHQsZSl7bGV0IGk9cDQobik7cmV0dXJuIG51bGwhPT1pJiYhZS5zb21lKHI9PnIuZGVlcExpbmtHcm91cD09PWkmJnIubmFtZXNwYWNlSWQ9PT10KX12YXIgakpfZ2V0SHJlZj0oKT0+d2luZG93LmxvY2F0aW9uLmhyZWYsTm09KCgpPT57Y2xhc3MgbntnZXRIcmVmKCl7cmV0dXJuIGpKX2dldEhyZWYoKX1nZXRTZWFyY2goKXtsZXQgZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLGk9W107cmV0dXJuIGUuZm9yRWFjaCgocixvKT0+e2kucHVzaCh7a2V5Om8sdmFsdWU6cn0pfSksaX1nZXRIYXNoKCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5oYXNofWdldFBhdGgoKXtyZXR1cm4gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfWdldEhpc3RvcnlTdGF0ZSgpe3JldHVybiB3aW5kb3cuaGlzdG9yeS5zdGF0ZX1yZXBsYWNlU3RhdGVVcmwoZSl7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHdpbmRvdy5oaXN0b3J5LnN0YXRlLCIiLGUpfXB1c2hTdGF0ZVVybChlKXt3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwiIixlKX1yZXBsYWNlU3RhdGVEYXRhKGUpe3dpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShlLCIiKX1vblBvcFN0YXRlKCl7cmV0dXJuIF9pKHdpbmRvdywicG9wc3RhdGUiKS5waXBlKEwoZT0+KHtwYXRobmFtZTp0aGlzLmdldFBhdGgoKSxzdGF0ZTplLnN0YXRlfSkpKX1nZXRSZXNvbHZlZFBhdGgoZSl7cmV0dXJuIG5ldyBVUkwoZSxqSl9nZXRIcmVmKCkpLnBhdGhuYW1lfWdldEZ1bGxQYXRoKGUsaSxyKXtsZXQgbz10aGlzLmdldFJlc29sdmVkUGF0aChlKSxzPSIiO3JldHVybiBpLmxlbmd0aCYmKHM9Ij8iK2Z1bmN0aW9uKG4pe2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGxldHtrZXk6ZSx2YWx1ZTppfW9mIG4pdC5hcHBlbmQoZSxpKTtyZXR1cm4gdH0oaSkudG9TdHJpbmcoKSksYCR7b30ke3N9JHtyP3RoaXMuZ2V0SGFzaCgpOiIifWB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLExtPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5hcHBSb290PXRoaXMuZ2V0QXBwUm9vdEZyb21NZXRhRWxlbWVudChlKX1nZXRBcHBSb290RnJvbU1ldGFFbGVtZW50KGUpe2xldCBpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgbWV0YVtuYW1lPSJ0Yi1yZWxhdGl2ZS1yb290Il0nKTtpZighaSlyZXR1cm4iLyI7bGV0e3BhdGhuYW1lOnJ9PW5ldyBVUkwoaS5jb250ZW50LGUuZ2V0SHJlZigpKTtyZXR1cm4gci5yZXBsYWNlKC9cLyokLywiLyIpfWdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoZSl7cmV0dXJuIHRoaXMuYXBwUm9vdC5zbGljZSgwLC0xKStlfWdldEFwcFJvb3RsZXNzUGF0aG5hbWUoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCh0aGlzLmFwcFJvb3QpPyIvIitlLnNsaWNlKHRoaXMuYXBwUm9vdC5sZW5ndGgpOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooTm0pKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxYXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOltObV19KSxufSkoKSxRXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOltMbV0saW1wb3J0czpbWF9dfSksbn0pKCksbTQ9bmV3IHBlKCJbQXBwIFJvdXRpbmddIERpcnR5IFVwZGF0ZXMiKSxBQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlydHlVcGRhdGVzU2VsZWN0b3JGYWN0b3JpZXM9ZX1nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKXtyZXR1cm4gdGhpcy5kaXJ0eVVwZGF0ZXNTZWxlY3RvckZhY3Rvcmllcz8/W119c3RhdGljIHJlZ2lzdGVyRGlydHlVcGRhdGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6bTQsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKG00LDgpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksR0o9YmUoIltBcHAgUm91dGluZ10gRGlzY2FyZGluZyBVbnNhdmVkIFVwZGF0ZXMiKSxLXz1iZSgiW0FwcCBSb3V0aW5nXSBTdGF0ZSBSZWh5ZHJhdGVkIEZyb20gVXJsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSUE9YmUoIltBcHAgUm91dGluZ10gUm91dGUgQ29uZmlnIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGc0PWJlKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW9uIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFBBPWJlKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSmw9YmUoIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLF80PW5ldyBwZSgiW0FwcCBSb3V0aW5nXSBQcm9ncmFtbWF0aWNhbCBOYXZpZ2F0aW9uIFByb3ZpZGVyIiksUkE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnByb3ZpZGVycz1uZXcgTWFwO2ZvcihsZXQgaSBvZiBlfHxbXSl7aWYodGhpcy5wcm92aWRlcnMuaGFzKGkuYWN0aW9uQ3JlYXRvci50eXBlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgIiR7aS5hY3Rpb25DcmVhdG9yLnR5cGV9IiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIG5hdi4gTXVsdGlwbGUgbmF2aWdhdGlvbnMgb24gc2FtZSBraWNrIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldChpLmFjdGlvbkNyZWF0b3IudHlwZSxpLmxhbWJkYSl9fWdldE5hdmlnYXRpb24oZSl7bGV0IGk9dGhpcy5wcm92aWRlcnMuZ2V0KGUudHlwZSk7cmV0dXJuIGk/aShlKTpudWxsfXN0YXRpYyByZWdpc3RlclByb2dyYW1tYXRpY2FsTmF2aWdhdGlvbihlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOl80LG11bHRpOiEwLHVzZUZhY3Rvcnk6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihfNCw4KSl9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpO2Z1bmN0aW9uIEVNKG4pe3JldHVybiBudWxsIT1uLnJvdXRlS2luZH1mdW5jdGlvbiBiNChuKXtyZXR1cm4gWEoobikubWFwKGU9PntsZXQgaT1lLnN0YXJ0c1dpdGgoIjoiKTtyZXR1cm4gaT97cGF0aFBhcnQ6ZSxpc1BhcmFtOiEwLHBhcmFtTmFtZTplLnNsaWNlKDEpfTp7cGF0aFBhcnQ6ZSxpc1BhcmFtOml9fSl9dmFyIFpfPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsaWRhdGVDb25maWcodCksdGhpcy5wYXRoRnJhZ21lbnRzPWI0KHQucGF0aCksdGhpcy5wYXRoTWF0Y2hlcnM9dGhpcy5nZXRQYXRoTWF0Y2hlcnModGhpcy5wYXRoRnJhZ21lbnRzKX1zdGF0aWMgZ2V0TWF0Y2hlcih0KXtyZXR1cm4gRU0odCk/bmV3IFRNKHQpOmZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLnJlZGlyZWN0aW9uUGF0aH0odCk/bmV3IHY0KHQpOm5ldyB5NCh0KX12YWxpZGF0ZUNvbmZpZyh7cGF0aDp0fSl7aWYoIXQuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBzaG91bGQgc3RhcnQgd2l0aCAnLycuICR7dH1gKTtsZXQgZT0wO2Zvcig7KGU9dC5pbmRleE9mKCI6IixlKzEpKT49MDspe2lmKCIvIiE9PXRbZS0xXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uZmlnLnBhdGggcGFyYW1ldGVyIHNob3VsZCBjb21lIGFmdGVyICcvJy4gJHt0fWApO2lmKHZvaWQgMD09PXRbZSsxXXx8Ii8iPT09dFtlKzFdKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBwYXJhbWV0ZXIgc2hvdWxkIGhhdmUgbm9uLWVtcHR5IG5hbWUuICR7dH1gKX19Z2V0UGF0aE1hdGNoZXJzKHQpe3JldHVybiB0Lm1hcChlPT57bGV0e3BhdGhQYXJ0Oml9PWU7cmV0dXJuIGUuaXNQYXJhbT9yPT4oe2lzUGFyYW1QYXRoUGFydDohMCxwYXJ0TWF0Y2hlZDohMCxwYXJhbU5hbWU6ZS5wYXJhbU5hbWUscGFyYW1WYWx1ZTpyfSk6cj0+KHtpc1BhcmFtUGF0aFBhcnQ6ITEscGFydE1hdGNoZWQ6cj09PWl9KX0pfW1hdGNoKHQpe2xldCBlPXt9O2lmKHRoaXMucGF0aE1hdGNoZXJzLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybntyZXN1bHQ6ITF9O2xldCBpPTA7Zm9yKGxldCByIG9mIHRoaXMucGF0aE1hdGNoZXJzKXtsZXQgcz1yKHRbaSsrXSk7aWYoIXMucGFydE1hdGNoZWQpcmV0dXJue3Jlc3VsdDohMX07cy5pc1BhcmFtUGF0aFBhcnQmJihlPXsuLi5lLFtzLnBhcmFtTmFtZV06cy5wYXJhbVZhbHVlfSl9cmV0dXJue3Jlc3VsdDohMCxwYXJhbXM6ZSxwYXRoUGFydHM6dCxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1tYXRjaEJ5UGFyYW1zKHQpe3JldHVybntyZXN1bHQ6ITAscGFyYW1zOnQscGF0aFBhcnRzOnRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucGF0aEZyYWdtZW50cyx0KSxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1yZXByb2plY3RQYXRoQnlQYXJhbXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgdClpZihyLmlzUGFyYW0pe2xldHtwYXJhbU5hbWU6b309cjtpZighZS5oYXNPd25Qcm9wZXJ0eShvKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgRmFpbGVkIHRvIHJlcHJvamVjdCBwYXJhbWV0ZXIuICIke299IiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHByZXNlbnQuYCk7aS5wdXNoKGVbb10pfWVsc2UgaS5wdXNoKHIucGF0aFBhcnQpO3JldHVybiBpfX0sVE09Y2xhc3MgZXh0ZW5kcyBaX3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH19LHY0PWNsYXNzIGV4dGVuZHMgWl97Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZWZpbml0aW9uPXQsdGhpcy5yZWRpcmVjdGlvbkZyYWdtZW50cz1iNCh0LnJlZGlyZWN0aW9uUGF0aCl9bWF0Y2godCl7bGV0IGU9c3VwZXIubWF0Y2godCk7aWYoIWUucmVzdWx0KXJldHVybiBlO2xldCBpPXRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucmVkaXJlY3Rpb25GcmFnbWVudHMsZS5wYXJhbXMpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczp2b2lkIDB9fX0seTQ9Y2xhc3MgZXh0ZW5kcyBaX3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH1tYXRjaCh0KXtsZXQgZT1zdXBlci5tYXRjaCh0KTtpZighZS5yZXN1bHQpcmV0dXJuIGU7bGV0e3BhdGhQYXJ0czppLHF1ZXJ5UGFyYW1zOnJ9PXRoaXMuZGVmaW5pdGlvbi5yZWRpcmVjdG9yKHQpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczpyfX19LERNPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0zKXtpZih0aGlzLm1heFJlZGlyZWN0aW9uPWUsZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJtYXhSZWRpcmVjdGlvbiBoYXMgdG8gYmUgbm9uLW5lZ2F0aXZlIG51bWJlciIpO3RoaXMudmFsaWRhdGVSb3V0ZUNvbmZpZ3ModCksdGhpcy5kZWZhdWx0Um91dGVDb25maWc9bnVsbCx0aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycz1uZXcgTWFwLHRoaXMuY29uZmlnTWF0Y2hlcnM9W107Zm9yKGxldCBpIG9mIHQpe2xldCByPVpfLmdldE1hdGNoZXIoaSk7dGhpcy5jb25maWdNYXRjaGVycy5wdXNoKHIpLHIgaW5zdGFuY2VvZiBUTSYmKHRoaXMucm91dGVLaW5kVG9Db25jcmV0ZUNvbmZpZ01hdGNoZXJzLnNldChyLmRlZmluaXRpb24ucm91dGVLaW5kLHIpLHIuZGVmaW5pdGlvbi5kZWZhdWx0Um91dGUmJih0aGlzLmRlZmF1bHRSb3V0ZUNvbmZpZz1yKSl9fXZhbGlkYXRlUm91dGVDb25maWdzKHQpe2xldCBlPXQuZmlsdGVyKEVNKSxpPWUuZmlsdGVyKG89Pm8uZGVmYXVsdFJvdXRlKTtpZihpLmxlbmd0aD4xKXtsZXQgbz1pLm1hcCgoe3BhdGg6c30pPT5zKS5qb2luKCIsICIpO3Rocm93IG5ldyBSYW5nZUVycm9yKGBUaGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBkZWZhdWx0Um91dGVzLiAke299YCl9aWYoMT09PWkubGVuZ3RoKXtsZXR7cGF0aDpvfT1pWzBdO2lmKEJvb2xlYW4oYjQobykuZmluZCgoe2lzUGFyYW06YX0pPT5hKSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEEgZGVmYXVsdFJvdXRlIGNhbm5vdCBoYXZlIGFueSBwYXJhbXMuICR7b31gKX1sZXQgcj1uZXcgU2V0O2ZvcihsZXR7cm91dGVLaW5kOm99b2YgZSl7aWYoci5oYXMobykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE11bHRpcGxlIHJvdXRlIGNvbmZpZ3VyYXRpb24gZm9yIGtpbmQ6ICR7b30uIENvbmZpZ3VyYXRpb25zIHNob3VsZCBoYXZlIHVuaXF1ZSByb3V0ZUtpbmRzYCk7ci5hZGQobyl9fWdlbmVyYXRlQWN0aW9uKHQsZSl7cmV0dXJuIHQuYWN0aW9uR2VuZXJhdG9yP3QuYWN0aW9uR2VuZXJhdG9yKGUpOm51bGx9bWF0Y2godCl7aWYoIXQucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKCdOYXZpZ2F0aW9uIGhhcyB0byBtYWRlIHdpdGggcGF0aG5hbWUgdGhhdCBzdGFydHMgd2l0aCAiLyInKTtsZXQgbyxlPVhKKHQucGF0aG5hbWUpLGk9MCxyPSExO2Zvcig7Oyl7bGV0IHM9ITE7Zm9yKGxldCBhIG9mIHRoaXMuY29uZmlnTWF0Y2hlcnMpe2xldCBsPWEubWF0Y2goZSk7aWYobC5yZXN1bHQpe3M9ITA7bGV0e3BhcmFtczpjLHBhdGhQYXJ0czp1LGlzUmVkaXJlY3Rpb246ZH09bDtpZihkKXtlPXUscj0hMCxvPWwucmVkaXJlY3Rpb25RdWVyeVBhcmFtczticmVha31pZighKGEgaW5zdGFuY2VvZiBUTSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk5vIGNvbmNyZXRlIHJvdXRlIGRlZmluaXRpb24gYG1hdGNoYCByZXR1cm4gcmVkaXJlY3Rpb24iKTtsZXR7ZGVmaW5pdGlvbjpwfT1hLGg9e3JvdXRlS2luZDpwLnJvdXRlS2luZCxwYXJhbXM6YyxwYXRobmFtZTpZSih1KSxkZWVwTGlua1Byb3ZpZGVyOnAuZGVlcExpbmtQcm92aWRlcnx8bnVsbCxhY3Rpb246dGhpcy5nZW5lcmF0ZUFjdGlvbihwLHUpfTtyZXR1cm4gcj97Li4uaCxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6b306ey4uLmgsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExfX19aWYociYmaSsrLCFzfHxpPnRoaXMubWF4UmVkaXJlY3Rpb24pYnJlYWt9aWYoaT50aGlzLm1heFJlZGlyZWN0aW9uKXRocm93IG5ldyBFcnJvcihgUG90ZW50aWFsIHJlZGlyZWN0aW9uIGxvb3AgKHJlZGlyZWN0aW5nIG1vcmUgdGhhbiAke3RoaXMubWF4UmVkaXJlY3Rpb259IHRpbWVzLiBQbGVhc2UgZG8gbm90IGhhdmUgY3ljbGVzIGluIHRoZSByb3V0ZXMuYCk7aWYodGhpcy5kZWZhdWx0Um91dGVDb25maWcpe2xldHtkZWZpbml0aW9uOnN9PXRoaXMuZGVmYXVsdFJvdXRlQ29uZmlnO3JldHVybntyb3V0ZUtpbmQ6cy5yb3V0ZUtpbmQsZGVlcExpbmtQcm92aWRlcjpzLmRlZXBMaW5rUHJvdmlkZXI/P251bGwscGF0aG5hbWU6cy5wYXRoLHBhcmFtczp7fSxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6dm9pZCAwLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKHMsZSl9fXJldHVybiBudWxsfW1hdGNoQnlSb3V0ZUtpbmQodCxlKXtsZXQgaT10aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycy5nZXQodCk7aWYoIWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJlcXVpcmVzIGNvbmZpZ3VyYXRpb24gZm9yIHJvdXRlS2luZDogJHt0fWApO2xldCByPWkubWF0Y2hCeVBhcmFtcyhlKTtyZXR1cm57cm91dGVLaW5kOnQscGFyYW1zOmUscGF0aG5hbWU6WUooci5wYXRoUGFydHMpLGRlZXBMaW5rUHJvdmlkZXI6aS5kZWZpbml0aW9uLmRlZXBMaW5rUHJvdmlkZXJ8fG51bGwsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKGkuZGVmaW5pdGlvbixyLnBhdGhQYXJ0cyl9fX07ZnVuY3Rpb24gWEoobil7cmV0dXJuIG4uc3BsaXQoIi8iKS5zbGljZSgxKX1mdW5jdGlvbiBZSihuKXtyZXR1cm4iLyIrbi5qb2luKCIvIil9dmFyIHg0PW5ldyBwZSgiW0FwcCBSb3V0aW5nXSBSb3V0ZSBDb25maWciKSxxYz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudD1uZXcgTWFwLCFlKXJldHVybiB2b2lkKHRoaXMucm91dGVDb25maWdzPW5ldyBETShbXSkpO2xldCBpPVtdO2ZvcihsZXQgciBvZiBlKWZvcihsZXQgbyBvZiByKWkucHVzaChvKTt0aGlzLnJvdXRlQ29uZmlncz1uZXcgRE0oaSksaS5mb3JFYWNoKHI9PntFTShyKSYmdGhpcy5yb3V0ZUtpbmRUb05nQ29tcG9uZW50LnNldChyLnJvdXRlS2luZCxyLm5nQ29tcG9uZW50KX0pfWdldFJlZ2lzdGVyZWRSb3V0ZUtpbmRzKCl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5rZXlzKCl9Z2V0Um91dGVDb25maWdzKCl7cmV0dXJuIHRoaXMucm91dGVDb25maWdzfWdldE5nQ29tcG9uZW50QnlSb3V0ZUtpbmQoZSl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5nZXQoZSl8fG51bGx9c3RhdGljIHJlZ2lzdGVyUm91dGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6eDQsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKHg0LDgpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksT0E9ImFwcF9yb3V0aW5nIixBTT1NcihPQSksUmE9SihBTSxuPT5uLmFjdGl2ZVJvdXRlKSxaSj1KKEFNLG49Pm4ubmV4dFJvdXRlKSxKSj1KKEFNLG49Pm4uYWN0aXZlTmFtZXNwYWNlSWQpLCRKPUooQU0sbj0+bi5yZWh5ZHJhdGVkRGVlcExpbmtzKSxlJD1KKEFNLG49Pm4ucmVnaXN0ZXJlZFJvdXRlS2V5cykscXU9SihSYSxuPT5uP24ucm91dGVLaW5kOmhpLk5PVF9TRVQpLE00PUooUmEsbj0+bj9uLnBhcmFtczp7fSksV289SihxdSxNNCwobix0KT0+d00obix0KSksWXU9KEoocXUsTTQsKG4sdCk9PntpZihuIT09aGkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1TTShuLmV4cGVyaW1lbnRJZHMpO2ZvcihsZXR7aWQ6aSxuYW1lOnJ9b2YgZSlyJiZ0LnNldChpLHIpO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pLEoocXUsTTQsKG4sdCk9PntpZihuIT09aGkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1TTShuLmV4cGVyaW1lbnRJZHMpLGk9MDtmb3IobGV0e2lkOnIsbmFtZTpvfW9mIGUpaSsrLCF0LmhhcyhyKSYmdC5zZXQocix7YWxpYXNUZXh0Om8sYWxpYXNOdW1iZXI6aX0pO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pKSx3ND1iZSgiW0FwcCBSb3V0aW5nXSBFZmZlY3RzIEluaXQiKSxzYT0oKCk9PihmdW5jdGlvbihuKXtuW24uVU5DSEFOR0VEPTBdPSJVTkNIQU5HRUQiLG5bbi5ORVc9MV09Ik5FVyIsbltuLkZST01fSElTVE9SWT0yXT0iRlJPTV9ISVNUT1JZIn0oc2F8fChzYT17fSkpLHNhKSkoKSx0JD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5sb2NhdGlvbj1yLHRoaXMuZGlydHlVcGRhdGVzUmVnaXN0cnk9byx0aGlzLnJlZ2lzdHJ5PXMsdGhpcy5wcm9ncmFtbWF0aWNhbE5hdk1vZHVsZT1hLHRoaXMuYXBwUm9vdFByb3ZpZGVyPWwsdGhpcy5vbk5hdmlnYXRpb25SZXF1ZXN0ZWQkPXRoaXMuYWN0aW9ucyQucGlwZShpaShnNCksTChjPT4oe3BhdGhuYW1lOmMucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpP3RoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoYy5wYXRobmFtZSk6dGhpcy5sb2NhdGlvbi5nZXRSZXNvbHZlZFBhdGgoYy5wYXRobmFtZSksb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMSxyZXBsYWNlU3RhdGU6Yy5yZXBsYWNlU3RhdGU/PyExLG5hbWVzcGFjZVVwZGF0ZTp7b3B0aW9uOmMucmVzZXROYW1lc3BhY2VkU3RhdGU/c2EuTkVXOnNhLlVOQ0hBTkdFRH19fSkpKSx0aGlzLmJvb3RzdHJhcFJlZHVjZXJzJD1jcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKGlpKHc0KSxMKCgpPT5JQSh7cm91dGVLaW5kczpuZXcgU2V0KHRoaXMucmVnaXN0cnkuZ2V0UmVnaXN0ZXJlZFJvdXRlS2luZHMoKSl9KSkpKSx0aGlzLm9uSW5pdCQ9dGhpcy5hY3Rpb25zJC5waXBlKGlpKHc0KSkucGlwZShPbCgwKSxMKCgpPT57bGV0IGM9dGhpcy5sb2NhdGlvbi5nZXRIaXN0b3J5U3RhdGUoKT8ubmFtZXNwYWNlSWQsdT12b2lkIDA9PT1jP3tvcHRpb246c2EuTkVXfTp7b3B0aW9uOnNhLkZST01fSElTVE9SWSxuYW1lc3BhY2VJZDpjfTtyZXR1cm57cGF0aG5hbWU6dGhpcy5sb2NhdGlvbi5nZXRQYXRoKCksb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMCxyZXBsYWNlU3RhdGU6ITAsbmFtZXNwYWNlVXBkYXRlOnV9fX0pKSx0aGlzLm9uUG9wU3RhdGUkPXRoaXMubG9jYXRpb24ub25Qb3BTdGF0ZSgpLnBpcGUoTChjPT4oe3BhdGhuYW1lOmMucGF0aG5hbWUsb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMCxyZXBsYWNlU3RhdGU6ITAsbmFtZXNwYWNlVXBkYXRlOnZvaWQgMD09PWMuc3RhdGU/Lm5hbWVzcGFjZUlkP3tvcHRpb246c2EuVU5DSEFOR0VEfTp7b3B0aW9uOnNhLkZST01fSElTVE9SWSxuYW1lc3BhY2VJZDpjLnN0YXRlLm5hbWVzcGFjZUlkfX19KSkpLHRoaXMudXNlckluaXROYXZSb3V0ZSQ9SnQodGhpcy5vbk5hdmlnYXRpb25SZXF1ZXN0ZWQkLHRoaXMub25Jbml0JCx0aGlzLm9uUG9wU3RhdGUkKS5waXBlKEwoYz0+e2lmKCFjLnBhdGhuYW1lLnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgRXJyb3IoYFtBcHAgcm91dGluZ10gcGF0aG5hbWUgbXVzdCBzdGFydCB3aXRoICcvJy4gR290OiAke2MucGF0aG5hbWV9YCk7cmV0dXJuey4uLmMscGF0aG5hbWU6dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QXBwUm9vdGxlc3NQYXRobmFtZShjLnBhdGhuYW1lKX19KSxMKGM9Pih7cm91dGVNYXRjaDp0aGlzLnJvdXRlQ29uZmlncy5tYXRjaChjKSxvcHRpb25zOmMub3B0aW9uc30pKSksdGhpcy5wcm9ncmFtbWF0aWNhbE5hdlJvdXRlJD10aGlzLmFjdGlvbnMkLnBpcGUoTChjPT50aGlzLnByb2dyYW1tYXRpY2FsTmF2TW9kdWxlLmdldE5hdmlnYXRpb24oYykpLFllKGM9Pm51bGwhPT1jKSxMKGM9PntsZXQgZix1PWMse3JlcGxhY2VTdGF0ZTpkPSExLHJlc2V0TmFtZXNwYWNlZFN0YXRlOnAscm91dGVLaW5kOmh9PXU7cmV0dXJuIGY9dS5yb3V0ZUtpbmQ9PT1oaS5DT01QQVJFX0VYUEVSSU1FTlQ/e2V4cGVyaW1lbnRJZHM6VkoodS5yb3V0ZVBhcmFtcy5hbGlhc0FuZEV4cGVyaW1lbnRJZHMpfTp1LnJvdXRlUGFyYW1zLHtyZXBsYWNlU3RhdGU6ZCxyb3V0ZUtpbmQ6aCxyb3V0ZVBhcmFtczpmLHJlc2V0TmFtZXNwYWNlZFN0YXRlOnB9fSksTCgoe3JlcGxhY2VTdGF0ZTpjLHJvdXRlS2luZDp1LHJvdXRlUGFyYW1zOmQscmVzZXROYW1lc3BhY2VkU3RhdGU6cH0pPT4oe3JvdXRlTWF0Y2g6dGhpcy5yb3V0ZUNvbmZpZ3M/dGhpcy5yb3V0ZUNvbmZpZ3MubWF0Y2hCeVJvdXRlS2luZCh1LGQpOm51bGwsb3B0aW9uczp7cmVwbGFjZVN0YXRlOmMsYnJvd3NlckluaXRpYXRlZDohMSxuYW1lc3BhY2VVcGRhdGU6e29wdGlvbjpwP3NhLk5FVzpzYS5VTkNIQU5HRUR9fX0pKSksdGhpcy52YWxpZGF0ZWRSb3V0ZU1hdGNoJD1KdCh0aGlzLnVzZXJJbml0TmF2Um91dGUkLHRoaXMucHJvZ3JhbW1hdGljYWxOYXZSb3V0ZSQpLnBpcGUoWWUoKHtyb3V0ZU1hdGNoOmN9KT0+Qm9vbGVhbihjKSksTCgoe3JvdXRlTWF0Y2g6YyxvcHRpb25zOnV9KT0+KHtyb3V0ZU1hdGNoOmMsb3B0aW9uczp1fSkpKSx0aGlzLm5hdmlnYXRlJD1jcigoKT0+dGhpcy52YWxpZGF0ZWRSb3V0ZU1hdGNoJC5waXBlKFd0KHRoaXMuc3RvcmUuc2VsZWN0KFJhKSkseG4oKFtkLHBdKT0+e2xldCBoPW51bGwhPT1wJiZQcyhwLGQucm91dGVNYXRjaCksZj10aGlzLmRpcnR5VXBkYXRlc1JlZ2lzdHJ5LmdldERpcnR5VXBkYXRlc1NlbGVjdG9ycygpO3JldHVybiBofHwhZi5sZW5ndGg/WHQoZCk6bHIodGhpcy5kaXJ0eVVwZGF0ZXNSZWdpc3RyeS5nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKS5tYXAobT0+dGhpcy5zdG9yZS5zZWxlY3QobSkucGlwZShRdCgxKSkpKS5waXBlKEwobT0+dm9pZCAwIT09bVswXS5leHBlcmltZW50SWRzJiZtWzBdLmV4cGVyaW1lbnRJZHMubGVuZ3RoPjApLFllKG09PntpZihtKXtsZXQgeD13aW5kb3cuY29uZmlybSgiWW91IGhhdmUgdW5zYXZlZCBlZGl0cywgYXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRpc2NhcmQgdGhlbT8iKTtyZXR1cm4geCYmdGhpcy5zdG9yZS5kaXNwYXRjaChHSigpKSx4fXJldHVybiEwfSksTCgoKT0+ZCkpfSksV3QodGhpcy5zdG9yZS5zZWxlY3QoJEopKSxrdCgoW3tyb3V0ZU1hdGNoOmQsb3B0aW9uczpwfSxoXSk9PntpZighcC5icm93c2VySW5pdGlhdGVkfHwhZC5kZWVwTGlua1Byb3ZpZGVyfHxwLm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1zYS5GUk9NX0hJU1RPUlkmJiFEQShkLnJvdXRlS2luZCxwLm5hbWVzcGFjZVVwZGF0ZS5uYW1lc3BhY2VJZCxoKSlyZXR1cm47bGV0IGY9ZC5vcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb24mJmQucmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM/ZC5yZWRpcmVjdGlvbk9ubHlRdWVyeVBhcmFtczp0aGlzLmxvY2F0aW9uLmdldFNlYXJjaCgpLG09ZC5kZWVwTGlua1Byb3ZpZGVyLmRlc2VyaWFsaXplUXVlcnlQYXJhbXMoZik7dGhpcy5zdG9yZS5kaXNwYXRjaChLXyh7cm91dGVLaW5kOmQucm91dGVLaW5kLHBhcnRpYWxTdGF0ZTptfSkpfSksa3QoKFt7cm91dGVNYXRjaDpkfV0pPT57ZC5hY3Rpb24mJnRoaXMuc3RvcmUuZGlzcGF0Y2goZC5hY3Rpb24pfSksdWkoKFt7cm91dGVNYXRjaDpkLG9wdGlvbnM6cH1dKT0+bnVsbD09PWQuZGVlcExpbmtQcm92aWRlcj9YdCh7cm91dGU6e3JvdXRlS2luZDpkLnJvdXRlS2luZCxwYXJhbXM6ZC5wYXJhbXN9LHBhdGhuYW1lOmQucGF0aG5hbWUscXVlcnlQYXJhbXM6W10sb3B0aW9uczpwfSk6ZC5kZWVwTGlua1Byb3ZpZGVyLnNlcmlhbGl6ZVN0YXRlVG9RdWVyeVBhcmFtcyh0aGlzLnN0b3JlKS5waXBlKEwoKGgsZik9Pih7cm91dGU6e3JvdXRlS2luZDpkLnJvdXRlS2luZCxwYXJhbXM6ZC5wYXJhbXN9LHBhdGhuYW1lOmQucGF0aG5hbWUscXVlcnlQYXJhbXM6aCxvcHRpb25zOjA9PT1mP3A6ey4uLnAsbmFtZXNwYWNlVXBkYXRlOntvcHRpb246c2EuVU5DSEFOR0VEfSxyZXBsYWNlU3RhdGU6ITB9fSkpKSksa3QoKHtyb3V0ZTpkfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFBBKHthZnRlcjpkfSkpfSksSHIoMCkpLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoUmEpKSxMKChbZCxwXSk9PntsZXQgaD1udWxsPT09cHx8bnVsbD09PWQucm91dGV8fFBzKHAsZC5yb3V0ZSk7cmV0dXJuey4uLmQscHJlc2VydmVIYXNoOmh9fSksa3QoKHtwcmVzZXJ2ZUhhc2g6ZCxwYXRobmFtZTpwLHF1ZXJ5UGFyYW1zOmgsb3B0aW9uczpmfSk9PnsoZnVuY3Rpb24obix0KXtyZXR1cm4gbi5wYXRobmFtZT09PXQucGF0aG5hbWUmJm4ucXVlcnlQYXJhbXMubGVuZ3RoPT09dC5xdWVyeVBhcmFtcy5sZW5ndGgmJm4ucXVlcnlQYXJhbXMuZXZlcnkoKGUsaSk9PntsZXQgcj10LnF1ZXJ5UGFyYW1zW2ldO3JldHVybiBlLmtleT09PXIua2V5JiZlLnZhbHVlPT09ci52YWx1ZX0pfSkoe3BhdGhuYW1lOnAscXVlcnlQYXJhbXM6aH0se3BhdGhuYW1lOnRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFwcFJvb3RsZXNzUGF0aG5hbWUodGhpcy5sb2NhdGlvbi5nZXRQYXRoKCkpLHF1ZXJ5UGFyYW1zOnRoaXMubG9jYXRpb24uZ2V0U2VhcmNoKCl9KXx8KGYucmVwbGFjZVN0YXRlP3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlVXJsKHRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QodGhpcy5sb2NhdGlvbi5nZXRGdWxsUGF0aChwLGgsZCkpKTp0aGlzLmxvY2F0aW9uLnB1c2hTdGF0ZVVybCh0aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHRoaXMubG9jYXRpb24uZ2V0RnVsbFBhdGgocCxoLGQpKSkpfSkpLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoUmEpLHRoaXMuc3RvcmUuc2VsZWN0KEpKKSksTCgoW3tyb3V0ZTpkLG9wdGlvbnM6cH0saCxmXSk9PntsZXQgbT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIHQubmFtZXNwYWNlVXBkYXRlLm9wdGlvbj09PXNhLkZST01fSElTVE9SWT90Lm5hbWVzcGFjZVVwZGF0ZS5uYW1lc3BhY2VJZDpudWxsPT1lfHx0Lm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1zYS5ORVc/YCR7RGF0ZS5ub3coKS50b1N0cmluZygpfToke2Z1bmN0aW9uKCl7bGV0IG49bmV3IFVpbnQ4QXJyYXkoMzIpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXMobik7bGV0IHQ9IiI7Zm9yKGxldCBlIG9mIG4pdCs9KGU+PjQpLnRvU3RyaW5nKDE2KTtyZXR1cm4gdH0oKX1gOmV9KDAscCxmKTtyZXR1cm4gdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGVEYXRhKHsuLi50aGlzLmxvY2F0aW9uLmdldEhpc3RvcnlTdGF0ZSgpLG5hbWVzcGFjZUlkOm19KSxKbCh7YmVmb3JlOmgsYWZ0ZXI6ZCxiZWZvcmVOYW1lc3BhY2VJZDpmLGFmdGVyTmFtZXNwYWNlSWQ6bX0pfSkpKSx0aGlzLnJvdXRlQ29uZmlncz1zLmdldFJvdXRlQ29uZmlncygpfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIHc0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooUG8pLGooQ2UpLGooTm0pLGooQUEpLGoocWMpLGooUkEpLGooTG0pKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxrMmU9dnIoe2FjdGl2ZVJvdXRlOm51bGwsbmV4dFJvdXRlOm51bGwsYWN0aXZlTmFtZXNwYWNlSWQ6bnVsbCxyZWh5ZHJhdGVkRGVlcExpbmtzOltdLHJlZ2lzdGVyZWRSb3V0ZUtleXM6bmV3IFNldH0sU2UoUEEsKG4se2FmdGVyOnR9KT0+KHsuLi5uLG5leHRSb3V0ZTp0fSkpLFNlKEpsLChuLHthZnRlcjp0LGFmdGVyTmFtZXNwYWNlSWQ6ZX0pPT57bGV0IGk9bi5yZWh5ZHJhdGVkRGVlcExpbmtzO3JldHVybiBEQSh0LnJvdXRlS2luZCxlLGkpJiYoaT1bLi4uaV0saS5wdXNoKHtkZWVwTGlua0dyb3VwOnA0KHQucm91dGVLaW5kKSxuYW1lc3BhY2VJZDplfSkpLHsuLi5uLGFjdGl2ZVJvdXRlOnQsbmV4dFJvdXRlOm51bGwsYWN0aXZlTmFtZXNwYWNlSWQ6ZSxyZWh5ZHJhdGVkRGVlcExpbmtzOml9fSksU2UoSUEsKG4se3JvdXRlS2luZHM6dH0pPT4oey4uLm4scmVnaXN0ZXJlZFJvdXRlS2V5czp0fSkpKTtmdW5jdGlvbiBuJChuLHQpe3JldHVybiBrMmUobix0KX12YXIgSl89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbQUEsUkFdLGltcG9ydHM6W3FjLHdyLmZvckZlYXR1cmUoT0EsbiQpLHJvLmZvckZlYXR1cmUoW3QkXSksUV8sWF9dfSksbn0pKCksaSQ9Il9fdGFiX18iLHIkPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRmU3RvcmFnZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1zdG9yYWdlIiksZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtZ2xvYmFscyIpLnRmX2dsb2JhbHMuc2V0VXNlSGFzaCghMCksdGhpcy50ZlN0b3JhZ2UudGZfc3RvcmFnZS5taWdyYXRlTGVnYWN5VVJMU2NoZW1lKCl9Z2V0U3RyaW5nKGUpe3JldHVybiB0aGlzLnRmU3RvcmFnZS50Zl9zdG9yYWdlLmdldFN0cmluZyhlKX1zZXRTdHJpbmcoZSxpLHIpe3RoaXMudGZTdG9yYWdlLnRmX3N0b3JhZ2Uuc2V0U3RyaW5nKGUsaSxyKX1nZXRQbHVnaW5JZCgpe3JldHVybiB0aGlzLmdldFN0cmluZyhpJCl9c2V0UGx1Z2luSWQoZSxpKXt0aGlzLnNldFN0cmluZyhpJCxlLGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxmaD1jbGFzc3t9LFM0PW5ldyBwZSgiW1BlcnNpc3RlbnQgU2V0dGluZ3NdIEdsb2JhbCBTZXR0aW5ncyIpLFNyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPVtdLGUmJih0aGlzLmdsb2JhbFNldHRpbmdTZWxlY3RvcnM9ZS5tYXAoaT0+aSgpKSl9Z2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpe3JldHVybiB0aGlzLmdsb2JhbFNldHRpbmdTZWxlY3RvcnM/P1tdfXN0YXRpYyBkZWZpbmVHbG9iYWxTZXR0aW5nKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6UzQsbXVsdGk6ITAsdXNlVmFsdWU6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihTNCw4KSl9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLE9hPSgoKT0+KGZ1bmN0aW9uKG4pe24uQlJPV1NFUl9ERUZBVUxUPSJicm93c2VyX2RlZmF1bHQiLG4uTElHSFQ9ImxpZ2h0IixuLkRBUks9ImRhcmsifShPYXx8KE9hPXt9KSksT2EpKSgpLG8kPSJfdGJfZ2xvYmFsX3NldHRpbmdzLnRpbWVzZXJpZXMiLHMkPSJfdGJfZ2xvYmFsX3NldHRpbmdzIixhJD0ibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lc3RhbXAiLGtBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEZBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEU0PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBGQXt1aVRvQmFja2VuZChlKXtsZXQgaT17fTtyZXR1cm4gdm9pZCAwIT09ZS5pZ25vcmVPdXRsaWVycyYmKGkuaWdub3JlT3V0bGllcnM9ZS5pZ25vcmVPdXRsaWVycyksdm9pZCAwIT09ZS5zY2FsYXJTbW9vdGhpbmcmJihpLnNjYWxhclNtb290aGluZz1lLnNjYWxhclNtb290aGluZyksdm9pZCAwIT09ZS50b29sdGlwU29ydCYmKGkudG9vbHRpcFNvcnQ9ZS50b29sdGlwU29ydCksdm9pZCAwIT09ZS5hdXRvUmVsb2FkJiYoaS5hdXRvUmVsb2FkPWUuYXV0b1JlbG9hZCksdm9pZCAwIT09ZS5hdXRvUmVsb2FkUGVyaW9kSW5NcyYmKGkuYXV0b1JlbG9hZFBlcmlvZEluTXM9ZS5hdXRvUmVsb2FkUGVyaW9kSW5Ncyksdm9pZCAwIT09ZS5wYWdlU2l6ZSYmKGkucGFnaW5hdGlvblNpemU9ZS5wYWdlU2l6ZSksdm9pZCAwIT09ZS50aGVtZU92ZXJyaWRlJiYoaS50aGVtZT1lLnRoZW1lT3ZlcnJpZGUpLHZvaWQgMCE9PWUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGkubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLHZvaWQgMCE9PWUuc2lkZUJhcldpZHRoSW5QZXJjZW50JiYoaS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9ZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLHZvaWQgMCE9PWUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCYmKGkudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZD1lLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQpLHZvaWQgMCE9PWUudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGkudGltZVNlcmllc0NhcmRNaW5XaWR0aD1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgpLHZvaWQgMCE9PWUuc3RlcFNlbGVjdG9yRW5hYmxlZCYmKGkuc3RlcFNlbGVjdG9yRW5hYmxlZD1lLnN0ZXBTZWxlY3RvckVuYWJsZWQpLHZvaWQgMCE9PWUucmFuZ2VTZWxlY3Rpb25FbmFibGVkJiYoaS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ9ZS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLHZvaWQgMCE9PWUubGlua2VkVGltZUVuYWJsZWQmJihpLmxpbmtlZFRpbWVFbmFibGVkPWUubGlua2VkVGltZUVuYWJsZWQpLGl9YmFja2VuZFRvVWkoZSl7bGV0IGk9e307cmV0dXJuIGUuaGFzT3duUHJvcGVydHkoInNjYWxhclNtb290aGluZyIpJiYibnVtYmVyIj09dHlwZW9mIGUuc2NhbGFyU21vb3RoaW5nJiYoaS5zY2FsYXJTbW9vdGhpbmc9ZS5zY2FsYXJTbW9vdGhpbmcpLGUuaGFzT3duUHJvcGVydHkoImlnbm9yZU91dGxpZXJzIikmJiJib29sZWFuIj09dHlwZW9mIGUuaWdub3JlT3V0bGllcnMmJihpLmlnbm9yZU91dGxpZXJzPWUuaWdub3JlT3V0bGllcnMpLGUuaGFzT3duUHJvcGVydHkoInRvb2x0aXBTb3J0IikmJiJzdHJpbmciPT10eXBlb2YgZS50b29sdGlwU29ydCYmKGkudG9vbHRpcFNvcnQ9ZS50b29sdGlwU29ydCksZS5oYXNPd25Qcm9wZXJ0eSgiYXV0b1JlbG9hZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLmF1dG9SZWxvYWQmJihpLmF1dG9SZWxvYWQ9ZS5hdXRvUmVsb2FkKSxlLmhhc093blByb3BlcnR5KCJhdXRvUmVsb2FkUGVyaW9kSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIGUuYXV0b1JlbG9hZFBlcmlvZEluTXMmJihpLmF1dG9SZWxvYWRQZXJpb2RJbk1zPWUuYXV0b1JlbG9hZFBlcmlvZEluTXMpLGUuaGFzT3duUHJvcGVydHkoInBhZ2luYXRpb25TaXplIikmJiJudW1iZXIiPT10eXBlb2YgZS5wYWdpbmF0aW9uU2l6ZSYmKGkucGFnZVNpemU9ZS5wYWdpbmF0aW9uU2l6ZSksZS5oYXNPd25Qcm9wZXJ0eSgidGhlbWUiKSYmInN0cmluZyI9PXR5cGVvZiBlLnRoZW1lJiZuZXcgU2V0KE9iamVjdC52YWx1ZXMoT2EpKS5oYXMoZS50aGVtZSkmJihpLnRoZW1lT3ZlcnJpZGU9ZS50aGVtZSksZS5oYXNPd25Qcm9wZXJ0eSgibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIGUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGkubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLGUuaGFzT3duUHJvcGVydHkoInNpZGVCYXJXaWR0aEluUGVyY2VudCIpJiYibnVtYmVyIj09dHlwZW9mIGUuc2lkZUJhcldpZHRoSW5QZXJjZW50JiYoaS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9ZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLGUuaGFzT3duUHJvcGVydHkoInRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkJiYoaS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkPWUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCksZS5oYXNPd25Qcm9wZXJ0eSgidGltZVNlcmllc0NhcmRNaW5XaWR0aCIpJiYibnVtYmVyIj09dHlwZW9mIGUudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGkudGltZVNlcmllc0NhcmRNaW5XaWR0aD1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgpLGUuaGFzT3duUHJvcGVydHkoInN0ZXBTZWxlY3RvckVuYWJsZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS5zdGVwU2VsZWN0b3JFbmFibGVkJiYoaS5zdGVwU2VsZWN0b3JFbmFibGVkPWUuc3RlcFNlbGVjdG9yRW5hYmxlZCksZS5oYXNPd25Qcm9wZXJ0eSgicmFuZ2VTZWxlY3Rpb25FbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUucmFuZ2VTZWxlY3Rpb25FbmFibGVkJiYoaS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ9ZS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLGUuaGFzT3duUHJvcGVydHkoImxpbmtlZFRpbWVFbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUubGlua2VkVGltZUVuYWJsZWQmJihpLmxpbmtlZFRpbWVFbmFibGVkPWUubGlua2VkVGltZUVuYWJsZWQpLGl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxsJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY29udmVydGVyPWV9c2V0U2V0dGluZ3MoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpP3RoaXMuZ2V0U2V0dGluZ3MoKS5waXBlKGt0KGk9Pntsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzJCxKU09OLnN0cmluZ2lmeSh0aGlzLmNvbnZlcnRlci51aVRvQmFja2VuZCh7Li4uaSwuLi5lfSkpKSxsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShvJCksbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYSQpfSksTCgoKT0+e30pKTplb31kZXNlcmlhbGl6ZShlKXt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2h7cmV0dXJue319fWdldFNldHRpbmdzKCl7bGV0IGU9bG9jYWxTdG9yYWdlLmdldEl0ZW0oYSQpO3JldHVybiBYdCh7Li4udGhpcy5jb252ZXJ0ZXIuYmFja2VuZFRvVWkodGhpcy5kZXNlcmlhbGl6ZShlP0pTT04uc3RyaW5naWZ5KHtub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zOk51bWJlcihlKX0pOiJ7fSIpKSwuLi50aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG8kKT8/Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUobG9jYWxTdG9yYWdlLmdldEl0ZW0ocyQpPz8ie30iKSl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihGQSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGMkPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W3twcm92aWRlOmtBLHVzZUNsYXNzOmwkfSxFNCx7cHJvdmlkZTpGQSx1c2VFeGlzdGluZzpFNH1dfSksbn0pKCksWWM9YmUoIltQZXJzaXN0ZW50IFNldHRpbmdzXSBHbG9iYWwgU2V0dGluZ3MgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdSQ9YmUoIltQZXJzaXN0ZW50IFNldHRpbmdzXSBFZmZlY3RzIEluaXQiKSxkJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5jb25maWdNb2R1bGU9cix0aGlzLmRhdGFTb3VyY2U9byx0aGlzLmluaXRpYWxpemVBbmRVcGRhdGVTZXR0aW5ncyQ9Y3IoKCk9PntsZXQgcz10aGlzLmFjdGlvbnMkLnBpcGUoaWkodSQpLHhuKCgpPT50aGlzLmRhdGFTb3VyY2UuZ2V0U2V0dGluZ3MoKSksa3QoYT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goWWMoe3BhcnRpYWxTZXR0aW5nczphfSkpfSksT2woMCkseG4oKCk9Pkp0KC4uLnRoaXMuY29uZmlnTW9kdWxlLmdldEdsb2JhbFNldHRpbmdTZWxlY3RvcnMoKS5tYXAobD0+dGhpcy5zdG9yZS5zZWxlY3QobCkucGlwZSh5aSgoYyx1KT0+e2xldCBkPU9iamVjdC52YWx1ZXMoYykscD1PYmplY3QudmFsdWVzKHUpO3JldHVybiBkLmxlbmd0aD09PXAubGVuZ3RoJiZkLmV2ZXJ5KChoLGYpPT5oPT09cFtmXSl9KSxaYSgxKSkpKSksVHMoKSk7cmV0dXJuIHMucGlwZShmdW5jdGlvbihuKXtyZXR1cm4gZW4oKHQsZSk9PntsZXQgaT1bXTtyZXR1cm4gdC5zdWJzY3JpYmUoanQoZSxyPT5pLnB1c2gociksKCk9PntlLm5leHQoaSksZS5jb21wbGV0ZSgpfSkpLG4uc3Vic2NyaWJlKGp0KGUsKCk9PntsZXQgcj1pO2k9W10sZS5uZXh0KHIpfSxNYykpLCgpPT57aT1udWxsfX0pfShzLnBpcGUoSHIoNTAwKSkpLHhuKGE9PntsZXQgbD17fTtmb3IobGV0IGMgb2YgYSlPYmplY3QuYXNzaWduKGwsYyk7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5zZXRTZXR0aW5ncyhsKX0pKX0se2Rpc3BhdGNoOiExfSl9bmdyeE9uSW5pdEVmZmVjdHMoKXtyZXR1cm4gdSQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihQbyksaihDZSksaihTciksaihrQSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFQ0PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W1NyXSxpbXBvcnRzOltyby5mb3JGZWF0dXJlKFtkJF0pLGMkXX0pLG59KSgpLExBPWNsYXNze30sQkE9Y2xhc3N7fSxobD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm5vcm1hbGl6ZWROYW1lcz1uZXcgTWFwLHRoaXMubGF6eVVwZGF0ZT1udWxsLHQ/dGhpcy5sYXp5SW5pdD0ic3RyaW5nIj09dHlwZW9mIHQ/KCk9Pnt0aGlzLmhlYWRlcnM9bmV3IE1hcCx0LnNwbGl0KCJcbiIpLmZvckVhY2goZT0+e2xldCBpPWUuaW5kZXhPZigiOiIpO2lmKGk+MCl7bGV0IHI9ZS5zbGljZSgwLGkpLG89ci50b0xvd2VyQ2FzZSgpLHM9ZS5zbGljZShpKzEpLnRyaW0oKTt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUocixvKSx0aGlzLmhlYWRlcnMuaGFzKG8pP3RoaXMuaGVhZGVycy5nZXQobykucHVzaChzKTp0aGlzLmhlYWRlcnMuc2V0KG8sW3NdKX19KX06KCk9Pnt0aGlzLmhlYWRlcnM9bmV3IE1hcCxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGU9PntsZXQgaT10W2VdLHI9ZS50b0xvd2VyQ2FzZSgpOyJzdHJpbmciPT10eXBlb2YgaSYmKGk9W2ldKSxpLmxlbmd0aD4wJiYodGhpcy5oZWFkZXJzLnNldChyLGkpLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShlLHIpKX0pfTp0aGlzLmhlYWRlcnM9bmV3IE1hcH1oYXModCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5oYXModC50b0xvd2VyQ2FzZSgpKX1nZXQodCl7dGhpcy5pbml0KCk7bGV0IGU9dGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpO3JldHVybiBlJiZlLmxlbmd0aD4wP2VbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbCh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiYSJ9KX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6InMifSl9ZGVsZXRlKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUodCxlKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoZSl8fHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIGhsP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlVcGRhdGUuZm9yRWFjaCh0PT50aGlzLmFwcGx5VXBkYXRlKHQpKSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfWNvcHlGcm9tKHQpe3QuaW5pdCgpLEFycmF5LmZyb20odC5oZWFkZXJzLmtleXMoKSkuZm9yRWFjaChlPT57dGhpcy5oZWFkZXJzLnNldChlLHQuaGVhZGVycy5nZXQoZSkpLHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQubm9ybWFsaXplZE5hbWVzLmdldChlKSl9KX1jbG9uZSh0KXtsZXQgZT1uZXcgaGw7cmV0dXJuIGUubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIGhsP3RoaXMubGF6eUluaXQ6dGhpcyxlLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbdF0pLGV9YXBwbHlVcGRhdGUodCl7bGV0IGU9dC5uYW1lLnRvTG93ZXJDYXNlKCk7c3dpdGNoKHQub3Ape2Nhc2UiYSI6Y2FzZSJzIjpsZXQgaT10LnZhbHVlO2lmKCJzdHJpbmciPT10eXBlb2YgaSYmKGk9W2ldKSwwPT09aS5sZW5ndGgpcmV0dXJuO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZSh0Lm5hbWUsZSk7bGV0IHI9KCJhIj09PXQub3A/dGhpcy5oZWFkZXJzLmdldChlKTp2b2lkIDApfHxbXTtyLnB1c2goLi4uaSksdGhpcy5oZWFkZXJzLnNldChlLHIpO2JyZWFrO2Nhc2UiZCI6bGV0IG89dC52YWx1ZTtpZihvKXtsZXQgcz10aGlzLmhlYWRlcnMuZ2V0KGUpO2lmKCFzKXJldHVybjtzPXMuZmlsdGVyKGE9Pi0xPT09by5pbmRleE9mKGEpKSwwPT09cy5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpKTp0aGlzLmhlYWRlcnMuc2V0KGUscyl9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGUpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShlKX19Zm9yRWFjaCh0KXt0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLmtleXMoKSkuZm9yRWFjaChlPT50KHRoaXMubm9ybWFsaXplZE5hbWVzLmdldChlKSx0aGlzLmhlYWRlcnMuZ2V0KGUpKSl9fSxWMmU9LyUoXGRbYS1mMC05XSkvZ2ksSDJlPXs0MDoiQCIsIjNBIjoiOiIsMjQ6IiQiLCIyQyI6IiwiLCIzQiI6IjsiLCIzRCI6Ij0iLCIzRiI6Ij8iLCIyRiI6Ii8ifTtmdW5jdGlvbiBwJChuKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG4pLnJlcGxhY2UoVjJlLCh0LGUpPT5IMmVbZV0/P3QpfWZ1bmN0aW9uIE5BKG4pe3JldHVybmAke259YH12YXIgWHU9Y2xhc3N7Y29uc3RydWN0b3IodD17fSl7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209bnVsbCx0aGlzLmVuY29kZXI9dC5lbmNvZGVyfHxuZXcgY2xhc3N7ZW5jb2RlS2V5KHQpe3JldHVybiBwJCh0KX1lbmNvZGVWYWx1ZSh0KXtyZXR1cm4gcCQodCl9ZGVjb2RlS2V5KHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZGVjb2RlVmFsdWUodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX19LHQuZnJvbVN0cmluZyl7aWYodC5mcm9tT2JqZWN0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNwZWNpZnkgYm90aCBmcm9tU3RyaW5nIGFuZCBmcm9tT2JqZWN0LiIpO3RoaXMubWFwPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bmV3IE1hcDtyZXR1cm4gbi5sZW5ndGg+MCYmbi5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZvckVhY2gocj0+e2xldCBvPXIuaW5kZXhPZigiPSIpLFtzLGFdPS0xPT1vP1t0LmRlY29kZUtleShyKSwiIl06W3QuZGVjb2RlS2V5KHIuc2xpY2UoMCxvKSksdC5kZWNvZGVWYWx1ZShyLnNsaWNlKG8rMSkpXSxsPWUuZ2V0KHMpfHxbXTtsLnB1c2goYSksZS5zZXQocyxsKX0pLGV9KHQuZnJvbVN0cmluZyx0aGlzLmVuY29kZXIpfWVsc2UgdC5mcm9tT2JqZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKHQuZnJvbU9iamVjdCkuZm9yRWFjaChlPT57bGV0IGk9dC5mcm9tT2JqZWN0W2VdLHI9QXJyYXkuaXNBcnJheShpKT9pLm1hcChOQSk6W05BKGkpXTt0aGlzLm1hcC5zZXQoZSxyKX0pKTp0aGlzLm1hcD1udWxsfWhhcyh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuaGFzKHQpfWdldCh0KXt0aGlzLmluaXQoKTtsZXQgZT10aGlzLm1hcC5nZXQodCk7cmV0dXJuIGU/ZVswXTpudWxsfWdldEFsbCh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuZ2V0KHQpfHxudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfWFwcGVuZCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImEifSl9YXBwZW5kQWxsKHQpe2xldCBlPVtdO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PntsZXQgcj10W2ldO0FycmF5LmlzQXJyYXkocik/ci5mb3JFYWNoKG89PntlLnB1c2goe3BhcmFtOmksdmFsdWU6byxvcDoiYSJ9KX0pOmUucHVzaCh7cGFyYW06aSx2YWx1ZTpyLG9wOiJhIn0pfSksdGhpcy5jbG9uZShlKX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJzIn0pfWRlbGV0ZSh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImQifSl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5rZXlzKCkubWFwKHQ9PntsZXQgZT10aGlzLmVuY29kZXIuZW5jb2RlS2V5KHQpO3JldHVybiB0aGlzLm1hcC5nZXQodCkubWFwKGk9PmUrIj0iK3RoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZShpKSkuam9pbigiJiIpfSkuZmlsdGVyKHQ9PiIiIT09dCkuam9pbigiJiIpfWNsb25lKHQpe2xldCBlPW5ldyBYdSh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gZS5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRoaXMsZS51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQodCksZX1pbml0KCl7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1hcCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKHQ9PnRoaXMubWFwLnNldCh0LHRoaXMuY2xvbmVGcm9tLm1hcC5nZXQodCkpKSx0aGlzLnVwZGF0ZXMuZm9yRWFjaCh0PT57c3dpdGNoKHQub3Ape2Nhc2UiYSI6Y2FzZSJzIjpsZXQgZT0oImEiPT09dC5vcD90aGlzLm1hcC5nZXQodC5wYXJhbSk6dm9pZCAwKXx8W107ZS5wdXNoKE5BKHQudmFsdWUpKSx0aGlzLm1hcC5zZXQodC5wYXJhbSxlKTticmVhaztjYXNlImQiOmlmKHZvaWQgMD09PXQudmFsdWUpe3RoaXMubWFwLmRlbGV0ZSh0LnBhcmFtKTticmVha317bGV0IGk9dGhpcy5tYXAuZ2V0KHQucGFyYW0pfHxbXSxyPWkuaW5kZXhPZihOQSh0LnZhbHVlKSk7LTEhPT1yJiZpLnNwbGljZShyLDEpLGkubGVuZ3RoPjA/dGhpcy5tYXAuc2V0KHQucGFyYW0saSk6dGhpcy5tYXAuZGVsZXRlKHQucGFyYW0pfX19KSx0aGlzLmNsb25lRnJvbT10aGlzLnVwZGF0ZXM9bnVsbCl9fTtmdW5jdGlvbiBoJChuKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmbiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIGYkKG4pe3JldHVybiB0eXBlb2YgQmxvYjwidSImJm4gaW5zdGFuY2VvZiBCbG9ifWZ1bmN0aW9uIG0kKG4pe3JldHVybiB0eXBlb2YgRm9ybURhdGE8InUiJiZuIGluc3RhbmNlb2YgRm9ybURhdGF9dmFyIEJtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2xldCBvO2lmKHRoaXMudXJsPWUsdGhpcy5ib2R5PW51bGwsdGhpcy5yZXBvcnRQcm9ncmVzcz0hMSx0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnJlc3BvbnNlVHlwZT0ianNvbiIsdGhpcy5tZXRob2Q9dC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIkRFTEVURSI6Y2FzZSJHRVQiOmNhc2UiSEVBRCI6Y2FzZSJPUFRJT05TIjpjYXNlIkpTT05QIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX0odGhpcy5tZXRob2QpfHxyPyh0aGlzLmJvZHk9dm9pZCAwIT09aT9pOm51bGwsbz1yKTpvPWksbyYmKHRoaXMucmVwb3J0UHJvZ3Jlc3M9ISFvLnJlcG9ydFByb2dyZXNzLHRoaXMud2l0aENyZWRlbnRpYWxzPSEhby53aXRoQ3JlZGVudGlhbHMsby5yZXNwb25zZVR5cGUmJih0aGlzLnJlc3BvbnNlVHlwZT1vLnJlc3BvbnNlVHlwZSksby5oZWFkZXJzJiYodGhpcy5oZWFkZXJzPW8uaGVhZGVycyksby5jb250ZXh0JiYodGhpcy5jb250ZXh0PW8uY29udGV4dCksby5wYXJhbXMmJih0aGlzLnBhcmFtcz1vLnBhcmFtcykpLHRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgaGwpLHRoaXMuY29udGV4dHx8KHRoaXMuY29udGV4dD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXNldCh0LGUpe3JldHVybiB0aGlzLm1hcC5zZXQodCxlKSx0aGlzfWdldCh0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHQpfHx0aGlzLm1hcC5zZXQodCx0LmRlZmF1bHRWYWx1ZSgpKSx0aGlzLm1hcC5nZXQodCl9ZGVsZXRlKHQpe3JldHVybiB0aGlzLm1hcC5kZWxldGUodCksdGhpc31oYXModCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0KX1rZXlzKCl7cmV0dXJuIHRoaXMubWFwLmtleXMoKX19KSx0aGlzLnBhcmFtcyl7bGV0IHM9dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09cy5sZW5ndGgpdGhpcy51cmxXaXRoUGFyYW1zPWU7ZWxzZXtsZXQgYT1lLmluZGV4T2YoIj8iKTt0aGlzLnVybFdpdGhQYXJhbXM9ZSsoLTE9PT1hPyI/IjphPGUubGVuZ3RoLTE/IiYiOiIiKStzfX1lbHNlIHRoaXMucGFyYW1zPW5ldyBYdSx0aGlzLnVybFdpdGhQYXJhbXM9ZX1zZXJpYWxpemVCb2R5KCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHk/bnVsbDpoJCh0aGlzLmJvZHkpfHxmJCh0aGlzLmJvZHkpfHxtJCh0aGlzLmJvZHkpfHxmdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSImJm4gaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXN9KHRoaXMuYm9keSl8fCJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5P3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiBYdT90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX1kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5fHxtJCh0aGlzLmJvZHkpP251bGw6ZiQodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDpoJCh0aGlzLmJvZHkpP251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/InRleHQvcGxhaW4iOnRoaXMuYm9keSBpbnN0YW5jZW9mIFh1PyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCI6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJudW1iZXIiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHk/ImFwcGxpY2F0aW9uL2pzb24iOm51bGx9Y2xvbmUodD17fSl7bGV0IGU9dC5tZXRob2R8fHRoaXMubWV0aG9kLGk9dC51cmx8fHRoaXMudXJsLHI9dC5yZXNwb25zZVR5cGV8fHRoaXMucmVzcG9uc2VUeXBlLG89dm9pZCAwIT09dC5ib2R5P3QuYm9keTp0aGlzLmJvZHkscz12b2lkIDAhPT10LndpdGhDcmVkZW50aWFscz90LndpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscyxhPXZvaWQgMCE9PXQucmVwb3J0UHJvZ3Jlc3M/dC5yZXBvcnRQcm9ncmVzczp0aGlzLnJlcG9ydFByb2dyZXNzLGw9dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsYz10LnBhcmFtc3x8dGhpcy5wYXJhbXMsdT10LmNvbnRleHQ/P3RoaXMuY29udGV4dDtyZXR1cm4gdm9pZCAwIT09dC5zZXRIZWFkZXJzJiYobD1PYmplY3Qua2V5cyh0LnNldEhlYWRlcnMpLnJlZHVjZSgoZCxwKT0+ZC5zZXQocCx0LnNldEhlYWRlcnNbcF0pLGwpKSx0LnNldFBhcmFtcyYmKGM9T2JqZWN0LmtleXModC5zZXRQYXJhbXMpLnJlZHVjZSgoZCxwKT0+ZC5zZXQocCx0LnNldFBhcmFtc1twXSksYykpLG5ldyBCbShlLGksbyx7cGFyYW1zOmMsaGVhZGVyczpsLGNvbnRleHQ6dSxyZXBvcnRQcm9ncmVzczphLHJlc3BvbnNlVHlwZTpyLHdpdGhDcmVkZW50aWFsczpzfSl9fSxtaD0oKCk9PihmdW5jdGlvbihuKXtuW24uU2VudD0wXT0iU2VudCIsbltuLlVwbG9hZFByb2dyZXNzPTFdPSJVcGxvYWRQcm9ncmVzcyIsbltuLlJlc3BvbnNlSGVhZGVyPTJdPSJSZXNwb25zZUhlYWRlciIsbltuLkRvd25sb2FkUHJvZ3Jlc3M9M109IkRvd25sb2FkUHJvZ3Jlc3MiLG5bbi5SZXNwb25zZT00XT0iUmVzcG9uc2UiLG5bbi5Vc2VyPTVdPSJVc2VyIn0obWh8fChtaD17fSkpLG1oKSkoKSxQTT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MjAwLGk9Ik9LIil7dGhpcy5oZWFkZXJzPXQuaGVhZGVyc3x8bmV3IGhsLHRoaXMuc3RhdHVzPXZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOmUsdGhpcy5zdGF0dXNUZXh0PXQuc3RhdHVzVGV4dHx8aSx0aGlzLnVybD10LnVybHx8bnVsbCx0aGlzLm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMH19LFJNPWNsYXNzIGV4dGVuZHMgUE17Y29uc3RydWN0b3IodD17fSl7c3VwZXIodCksdGhpcy50eXBlPW1oLlJlc3BvbnNlSGVhZGVyfWNsb25lKHQ9e30pe3JldHVybiBuZXcgUk0oe2hlYWRlcnM6dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOnQudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fSwkXz1jbGFzcyBleHRlbmRzIFBNe2NvbnN0cnVjdG9yKHQ9e30pe3N1cGVyKHQpLHRoaXMudHlwZT1taC5SZXNwb25zZSx0aGlzLmJvZHk9dm9pZCAwIT09dC5ib2R5P3QuYm9keTpudWxsfWNsb25lKHQ9e30pe3JldHVybiBuZXcgJF8oe2JvZHk6dm9pZCAwIT09dC5ib2R5P3QuYm9keTp0aGlzLmJvZHksaGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19LG5wPWNsYXNzIGV4dGVuZHMgUE17Y29uc3RydWN0b3IodCl7c3VwZXIodCwwLCJVbmtub3duIEVycm9yIiksdGhpcy5uYW1lPSJIdHRwRXJyb3JSZXNwb25zZSIsdGhpcy5vaz0hMSx0aGlzLm1lc3NhZ2U9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwP2BIdHRwIGZhaWx1cmUgZHVyaW5nIHBhcnNpbmcgZm9yICR7dC51cmx8fCIodW5rbm93biB1cmwpIn1gOmBIdHRwIGZhaWx1cmUgcmVzcG9uc2UgZm9yICR7dC51cmx8fCIodW5rbm93biB1cmwpIn06ICR7dC5zdGF0dXN9ICR7dC5zdGF0dXNUZXh0fWAsdGhpcy5lcnJvcj10LmVycm9yfHxudWxsfX07ZnVuY3Rpb24gRDQobix0KXtyZXR1cm57Ym9keTp0LGhlYWRlcnM6bi5oZWFkZXJzLGNvbnRleHQ6bi5jb250ZXh0LG9ic2VydmU6bi5vYnNlcnZlLHBhcmFtczpuLnBhcmFtcyxyZXBvcnRQcm9ncmVzczpuLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpuLnJlc3BvbnNlVHlwZSx3aXRoQ3JlZGVudGlhbHM6bi53aXRoQ3JlZGVudGlhbHN9fXZhciBWbT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaGFuZGxlcj1lfXJlcXVlc3QoZSxpLHI9e30pe2xldCBvO2lmKGUgaW5zdGFuY2VvZiBCbSlvPWU7ZWxzZXtsZXQgbCxjO2w9ci5oZWFkZXJzIGluc3RhbmNlb2YgaGw/ci5oZWFkZXJzOm5ldyBobChyLmhlYWRlcnMpLHIucGFyYW1zJiYoYz1yLnBhcmFtcyBpbnN0YW5jZW9mIFh1P3IucGFyYW1zOm5ldyBYdSh7ZnJvbU9iamVjdDpyLnBhcmFtc30pKSxvPW5ldyBCbShlLGksdm9pZCAwIT09ci5ib2R5P3IuYm9keTpudWxsLHtoZWFkZXJzOmwsY29udGV4dDpyLmNvbnRleHQscGFyYW1zOmMscmVwb3J0UHJvZ3Jlc3M6ci5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6ci5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6ci53aXRoQ3JlZGVudGlhbHN9KX1sZXQgcz1YdChvKS5waXBlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIEVuKHQpP3huKG4sdCwxKTp4bihuLDEpfShsPT50aGlzLmhhbmRsZXIuaGFuZGxlKGwpKSk7aWYoZSBpbnN0YW5jZW9mIEJtfHwiZXZlbnRzIj09PXIub2JzZXJ2ZSlyZXR1cm4gcztsZXQgYT1zLnBpcGUoWWUobD0+bCBpbnN0YW5jZW9mICRfKSk7c3dpdGNoKHIub2JzZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRjaChvLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIGEucGlwZShMKGw9PntpZihudWxsIT09bC5ib2R5JiYhKGwuYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhbiBBcnJheUJ1ZmZlci4iKTtyZXR1cm4gbC5ib2R5fSkpO2Nhc2UiYmxvYiI6cmV0dXJuIGEucGlwZShMKGw9PntpZihudWxsIT09bC5ib2R5JiYhKGwuYm9keSBpbnN0YW5jZW9mIEJsb2IpKXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgQmxvYi4iKTtyZXR1cm4gbC5ib2R5fSkpO2Nhc2UidGV4dCI6cmV0dXJuIGEucGlwZShMKGw9PntpZihudWxsIT09bC5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIGwuYm9keSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4iKTtyZXR1cm4gbC5ib2R5fSkpO2RlZmF1bHQ6cmV0dXJuIGEucGlwZShMKGw9PmwuYm9keSkpfWNhc2UicmVzcG9uc2UiOnJldHVybiBhO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnJlYWNoYWJsZTogdW5oYW5kbGVkIG9ic2VydmUgdHlwZSAke3Iub2JzZXJ2ZX19YCl9fWRlbGV0ZShlLGk9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkRFTEVURSIsZSxpKX1nZXQoZSxpPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJHRVQiLGUsaSl9aGVhZChlLGk9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkhFQUQiLGUsaSl9anNvbnAoZSxpKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJKU09OUCIsZSx7cGFyYW1zOihuZXcgWHUpLmFwcGVuZChpLCJKU09OUF9DQUxMQkFDSyIpLG9ic2VydmU6ImJvZHkiLHJlc3BvbnNlVHlwZToianNvbiJ9KX1vcHRpb25zKGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiT1BUSU9OUyIsZSxpKX1wYXRjaChlLGkscj17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUEFUQ0giLGUsRDQocixpKSl9cG9zdChlLGkscj17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUE9TVCIsZSxENChyLGkpKX1wdXQoZSxpLHI9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBVVCIsZSxENChyLGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihMQSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEhBPW5ldyBwZSgiSFRUUF9JTlRFUkNFUFRPUlMiKSxqMmU9KCgpPT57Y2xhc3MgbntpbnRlcmNlcHQoZSxpKXtyZXR1cm4gaS5oYW5kbGUoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEcyZT0vXlwpXF1cfScsP1xuLyxnJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMueGhyRmFjdG9yeT1lfWhhbmRsZShlKXtpZigiSlNPTlAiPT09ZS5tZXRob2QpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gY29uc3RydWN0IEpzb25wIHJlcXVlc3Qgd2l0aG91dCBIdHRwQ2xpZW50SnNvbnBNb2R1bGUgaW5zdGFsbGVkLiIpO3JldHVybiBuZXcgdW4oaT0+e2xldCByPXRoaXMueGhyRmFjdG9yeS5idWlsZCgpO2lmKHIub3BlbihlLm1ldGhvZCxlLnVybFdpdGhQYXJhbXMpLGUud2l0aENyZWRlbnRpYWxzJiYoci53aXRoQ3JlZGVudGlhbHM9ITApLGUuaGVhZGVycy5mb3JFYWNoKChoLGYpPT5yLnNldFJlcXVlc3RIZWFkZXIoaCxmLmpvaW4oIiwiKSkpLGUuaGVhZGVycy5oYXMoIkFjY2VwdCIpfHxyLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCFlLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7bGV0IGg9ZS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1oJiZyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsaCl9aWYoZS5yZXNwb25zZVR5cGUpe2xldCBoPWUucmVzcG9uc2VUeXBlLnRvTG93ZXJDYXNlKCk7ci5yZXNwb25zZVR5cGU9Impzb24iIT09aD9oOiJ0ZXh0In1sZXQgbz1lLnNlcmlhbGl6ZUJvZHkoKSxzPW51bGwsYT0oKT0+e2lmKG51bGwhPT1zKXJldHVybiBzO2xldCBoPXIuc3RhdHVzVGV4dHx8Ik9LIixmPW5ldyBobChyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxtPWZ1bmN0aW9uKG4pe3JldHVybiJyZXNwb25zZVVSTCJpbiBuJiZuLnJlc3BvbnNlVVJMP24ucmVzcG9uc2VVUkw6L15YLVJlcXVlc3QtVVJMOi9tLnRlc3Qobi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk/bi5nZXRSZXNwb25zZUhlYWRlcigiWC1SZXF1ZXN0LVVSTCIpOm51bGx9KHIpfHxlLnVybDtyZXR1cm4gcz1uZXcgUk0oe2hlYWRlcnM6ZixzdGF0dXM6ci5zdGF0dXMsc3RhdHVzVGV4dDpoLHVybDptfSksc30sbD0oKT0+e2xldHtoZWFkZXJzOmgsc3RhdHVzOmYsc3RhdHVzVGV4dDptLHVybDp4fT1hKCksZz1udWxsOzIwNCE9PWYmJihnPXR5cGVvZiByLnJlc3BvbnNlPiJ1Ij9yLnJlc3BvbnNlVGV4dDpyLnJlc3BvbnNlKSwwPT09ZiYmKGY9Zz8yMDA6MCk7bGV0IGI9Zj49MjAwJiZmPDMwMDtpZigianNvbiI9PT1lLnJlc3BvbnNlVHlwZSYmInN0cmluZyI9PXR5cGVvZiBnKXtsZXQgRD1nO2c9Zy5yZXBsYWNlKEcyZSwiIik7dHJ5e2c9IiIhPT1nP0pTT04ucGFyc2UoZyk6bnVsbH1jYXRjaChUKXtnPUQsYiYmKGI9ITEsZz17ZXJyb3I6VCx0ZXh0Omd9KX19Yj8oaS5uZXh0KG5ldyAkXyh7Ym9keTpnLGhlYWRlcnM6aCxzdGF0dXM6ZixzdGF0dXNUZXh0Om0sdXJsOnh8fHZvaWQgMH0pKSxpLmNvbXBsZXRlKCkpOmkuZXJyb3IobmV3IG5wKHtlcnJvcjpnLGhlYWRlcnM6aCxzdGF0dXM6ZixzdGF0dXNUZXh0Om0sdXJsOnh8fHZvaWQgMH0pKX0sYz1oPT57bGV0e3VybDpmfT1hKCksbT1uZXcgbnAoe2Vycm9yOmgsc3RhdHVzOnIuc3RhdHVzfHwwLHN0YXR1c1RleHQ6ci5zdGF0dXNUZXh0fHwiVW5rbm93biBFcnJvciIsdXJsOmZ8fHZvaWQgMH0pO2kuZXJyb3IobSl9LHU9ITEsZD1oPT57dXx8KGkubmV4dChhKCkpLHU9ITApO2xldCBmPXt0eXBlOm1oLkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOmgubG9hZGVkfTtoLmxlbmd0aENvbXB1dGFibGUmJihmLnRvdGFsPWgudG90YWwpLCJ0ZXh0Ij09PWUucmVzcG9uc2VUeXBlJiYhIXIucmVzcG9uc2VUZXh0JiYoZi5wYXJ0aWFsVGV4dD1yLnJlc3BvbnNlVGV4dCksaS5uZXh0KGYpfSxwPWg9PntsZXQgZj17dHlwZTptaC5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6aC5sb2FkZWR9O2gubGVuZ3RoQ29tcHV0YWJsZSYmKGYudG90YWw9aC50b3RhbCksaS5uZXh0KGYpfTtyZXR1cm4gci5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsKSxyLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjKSxyLmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLGMpLHIuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLGUucmVwb3J0UHJvZ3Jlc3MmJihyLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixkKSxudWxsIT09byYmci51cGxvYWQmJnIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixwKSksci5zZW5kKG8pLGkubmV4dCh7dHlwZTptaC5TZW50fSksKCk9PntyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZW91dCIsYyksZS5yZXBvcnRQcm9ncmVzcyYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGQpLG51bGwhPT1vJiZyLnVwbG9hZCYmci51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxyLnJlYWR5U3RhdGUhPT1yLkRPTkUmJnIuYWJvcnQoKX19KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihFbSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLE80PW5ldyBwZSgiWFNSRl9DT09LSUVfTkFNRSIpLGs0PW5ldyBwZSgiWFNSRl9IRUFERVJfTkFNRSIpLFZBPWNsYXNze30scTJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZG9jPWUsdGhpcy5wbGF0Zm9ybT1pLHRoaXMuY29va2llTmFtZT1yLHRoaXMubGFzdENvb2tpZVN0cmluZz0iIix0aGlzLmxhc3RUb2tlbj1udWxsLHRoaXMucGFyc2VDb3VudD0wfWdldFRva2VuKCl7aWYoInNlcnZlciI9PT10aGlzLnBsYXRmb3JtKXJldHVybiBudWxsO2xldCBlPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGUhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1xRChlLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPWUpLHRoaXMubGFzdFRva2VufX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEh0KSxqKEdkKSxqKE80KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksQTQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMudG9rZW5TZXJ2aWNlPWUsdGhpcy5oZWFkZXJOYW1lPWl9aW50ZXJjZXB0KGUsaSl7bGV0IHI9ZS51cmwudG9Mb3dlckNhc2UoKTtpZigiR0VUIj09PWUubWV0aG9kfHwiSEVBRCI9PT1lLm1ldGhvZHx8ci5zdGFydHNXaXRoKCJodHRwOi8vIil8fHIuc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSlyZXR1cm4gaS5oYW5kbGUoZSk7bGV0IG89dGhpcy50b2tlblNlcnZpY2UuZ2V0VG9rZW4oKTtyZXR1cm4gbnVsbCE9PW8mJiFlLmhlYWRlcnMuaGFzKHRoaXMuaGVhZGVyTmFtZSkmJihlPWUuY2xvbmUoe2hlYWRlcnM6ZS5oZWFkZXJzLnNldCh0aGlzLmhlYWRlck5hbWUsbyl9KSksaS5oYW5kbGUoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooVkEpLGooazQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxZMmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuYmFja2VuZD1lLHRoaXMuaW5qZWN0b3I9aSx0aGlzLmNoYWluPW51bGx9aGFuZGxlKGUpe2lmKG51bGw9PT10aGlzLmNoYWluKXtsZXQgaT10aGlzLmluamVjdG9yLmdldChIQSxbXSk7dGhpcy5jaGFpbj1pLnJlZHVjZVJpZ2h0KChyLG8pPT5uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLm5leHQ9dCx0aGlzLmludGVyY2VwdG9yPWV9aGFuZGxlKHQpe3JldHVybiB0aGlzLmludGVyY2VwdG9yLmludGVyY2VwdCh0LHRoaXMubmV4dCl9fShyLG8pLHRoaXMuYmFja2VuZCl9cmV0dXJuIHRoaXMuY2hhaW4uaGFuZGxlKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEJBKSxqKFhuKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWDJlPSgoKT0+e2NsYXNzIG57c3RhdGljIGRpc2FibGUoKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOkE0LHVzZUNsYXNzOmoyZX1dfX1zdGF0aWMgd2l0aE9wdGlvbnMoZT17fSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOltlLmNvb2tpZU5hbWU/e3Byb3ZpZGU6TzQsdXNlVmFsdWU6ZS5jb29raWVOYW1lfTpbXSxlLmhlYWRlck5hbWU/e3Byb3ZpZGU6azQsdXNlVmFsdWU6ZS5oZWFkZXJOYW1lfTpbXV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOltBNCx7cHJvdmlkZTpIQSx1c2VFeGlzdGluZzpBNCxtdWx0aTohMH0se3Byb3ZpZGU6VkEsdXNlQ2xhc3M6cTJlfSx7cHJvdmlkZTpPNCx1c2VWYWx1ZToiWFNSRi1UT0tFTiJ9LHtwcm92aWRlOms0LHVzZVZhbHVlOiJYLVhTUkYtVE9LRU4ifV19KSxufSkoKSxfJD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOltWbSx7cHJvdmlkZTpMQSx1c2VDbGFzczpZMmV9LGckLHtwcm92aWRlOkJBLHVzZUV4aXN0aW5nOmckfV0saW1wb3J0czpbWDJlLndpdGhPcHRpb25zKHtjb29raWVOYW1lOiJYU1JGLVRPS0VOIixoZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4ifSldfSksbn0pKCksVUE9ImZlYXR1cmUiLGV2PU1yKFVBKSxnaD1KKGV2LG49Pm4uaXNGZWF0dXJlRmxhZ3NMb2FkZWQpLGJzPUooZXYsbj0+KHsuLi5uLmRlZmF1bHRGbGFncywuLi5uLmZsYWdPdmVycmlkZXN9KSkseSQ9SihldixuPT5uLmRlZmF1bHRGbGFncyksekE9SihldixuPT5uLmZsYWdPdmVycmlkZXN8fHt9KSxIbT1KKGV2LG49Pm4ubWV0YWRhdGEpLGpBPUooZXYsbj0+e2xldCB0PXt9O2ZvcihsZXQgZSBpbiBuLmZsYWdPdmVycmlkZXMpe2xldCBpPW4ubWV0YWRhdGFbZV07aSYmaS5xdWVyeVBhcmFtT3ZlcnJpZGUmJmkuc2VuZFRvU2VydmVyV2hlbk92ZXJyaWRkZW4mJih0W2VdPW4uZmxhZ092ZXJyaWRlc1tlXSl9cmV0dXJuIHR9KSxiJD1KKGJzLG49Pm4uaXNBdXRvRGFya01vZGVBbGxvd2VkKSxRdT1KKGJzLG49Pm51bGwhPT1uLmVuYWJsZURhcmtNb2RlT3ZlcnJpZGU/bi5lbmFibGVEYXJrTW9kZU92ZXJyaWRlOm4uZGVmYXVsdEVuYWJsZURhcmtNb2RlKSxHQT1KKGJzLG49Pm4uZW5hYmxlRGFya01vZGVPdmVycmlkZSkseCQ9SihicyxuPT5uLmVuYWJsZWRFeHBlcmltZW50YWxQbHVnaW5zKSxDJD1KKGJzLG49Pm4uaW5Db2xhYiksV0E9SihicyxuPT5uLm1ldHJpY3NJbWFnZVN1cHBvcnRFbmFibGVkKSxNJD1KKGJzLG49Pm4uZW5hYmxlZExpbmtlZFRpbWUpLHckPUooYnMsbj0+bi5mb3JjZVN2ZyksUyQ9SihicyxuPT5uLmVuYWJsZWRTY2FsYXJEYXRhVGFibGUpLEUkPUooYnMsbj0+bi5lbmFibGVTaG93RmxhZ3MpLFQkPUooYnMsbj0+bi5hbGxvd1JhbmdlU2VsZWN0aW9uKSxEJD1KKGJzLG49Pm4uZW5hYmxlZFByb3NwZWN0aXZlRm9iKSxxQT1KKGJzLG49Pm4uZW5hYmxlU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbik7ZnVuY3Rpb24gUTJlKG4pe2xldCB0PXt9O2ZvcihsZXRbZSxpXW9mIG4uZW50cmllcygpKXRbZV09aTtyZXR1cm4gdH1mdW5jdGlvbiBGNChuKXtsZXQgdD1uLmhlYWRlcnN8fG5ldyBobDtyZXR1cm4gdD10LmFwcGVuZCgiWC1YU1JGLVByb3RlY3RlZCIsIjEiKSx7Li4ubixoZWFkZXJzOnR9fXZhciBrYT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFwcFJvb3RQcm92aWRlcj1lLHRoaXMuaHR0cD1pLHRoaXMuc3RvcmU9cn1yZXNvbHZlQXBwUm9vdChlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCIvIik/dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdChlKTplfWdldChlLGk9e30pe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMucmVzb2x2ZUFwcFJvb3QoZSksaSl9cG9zdChlLGkscj17fSl7cmV0dXJuIHI9RjQociksdGhpcy5zdG9yZS5zZWxlY3QoZ2gpLnBpcGUoWWUobz0+Qm9vbGVhbihvKSksUXQoMSksV3QodGhpcy5zdG9yZS5zZWxlY3QoQyQpKSx4bigoWyxvXSk9PntsZXQgcz10aGlzLnJlc29sdmVBcHBSb290KGUpO3JldHVybiBvP3RoaXMuaHR0cC5nZXQocyx7aGVhZGVyczpyLmhlYWRlcnM/P3t9LHBhcmFtczpRMmUoaSl9KTp0aGlzLmh0dHAucG9zdChzLGkscil9KSl9cHV0KGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLnJlc29sdmVBcHBSb290KGUpLGksRjQocikpfWRlbGV0ZShlLGk9e30pe3JldHVybiB0aGlzLmh0dHAuZGVsZXRlKHRoaXMucmVzb2x2ZUFwcFJvb3QoZSksRjQoaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKExtKSxqKFZtKSxqKENlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksS3U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpba2FdLGltcG9ydHM6W18kLFFfXX0pLG59KSgpLCRsPSgoKT0+KGZ1bmN0aW9uKG4pe24uVU5LTk9XTj0iVU5LTk9XTiIsbi5OT1RfRk9VTkQ9Ik5PVF9GT1VORCIsbi5QRVJNSVNTSU9OX0RFTklFRD0iUEVSTUlTU0lPTl9ERU5JRUQifSgkbHx8KCRsPXt9KSksJGwpKSgpLEEkPW5ldyBwZSgiVGVuc29yQm9hcmQgYnJhbmQgbmFtZSIpLFJvPSgoKT0+KGZ1bmN0aW9uKG4pe24uU1RFUD0ic3RlcCIsbi5XQUxMX1RJTUU9IndhbGxfdGltZSIsbi5SRUxBVElWRT0icmVsYXRpdmUifShSb3x8KFJvPXt9KSksUm8pKSgpLHpyPSgoKT0+KGZ1bmN0aW9uKG4pe24uT0ZGU0VUPSJvZmZzZXQiLG4uT1ZFUkxBWT0ib3ZlcmxheSJ9KHpyfHwoenI9e30pKSx6cikpKCk7ZnVuY3Rpb24gSSQobil7bGV0IHQ9JGwuVU5LTk9XTjtyZXR1cm4gbiBpbnN0YW5jZW9mIG5wJiYoNDA0PT09bi5zdGF0dXMmJih0PSRsLk5PVF9GT1VORCksNDAzPT09bi5zdGF0dXMmJih0PSRsLlBFUk1JU1NJT05fREVOSUVEKSksd2MobmV3IE9NKHQpKX12YXIgT009Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5mYWlsdXJlQ29kZT10fX0sWUE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmh0dHA9ZSx0aGlzLnRmQmFja2VuZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1iYWNrZW5kIikudGZfYmFja2VuZH1mZXRjaFBsdWdpbnNMaXN0aW5nKGUpe2xldCBpPWZ1bmN0aW9uKG4pe2lmKCFuLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgdD1uZXcgVVJMU2VhcmNoUGFyYW1zO2ZvcihsZXQgZSBvZiBuKXQuYXBwZW5kKCJleHBlcmltZW50YWxQbHVnaW4iLGUpO3JldHVybiB0fShlKSxyPWk/YGRhdGEvcGx1Z2luc19saXN0aW5nPyR7aS50b1N0cmluZygpfWA6ImRhdGEvcGx1Z2luc19saXN0aW5nIjtyZXR1cm4gdGhpcy5odHRwLmdldChyKS5waXBlKGZvKEkkKSl9ZmV0Y2hFbnZpcm9ubWVudCgpe3JldHVybiBscihbdGhpcy5odHRwLmdldCgiZGF0YS9lbnZpcm9ubWVudCIpLEVvKHRoaXMudGZCYWNrZW5kLmVudmlyb25tZW50U3RvcmUucmVmcmVzaCgpKV0pLnBpcGUoTCgoW3JdKT0+ciksZm8oSSQpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihrYSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFAkPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W1lBXSxpbXBvcnRzOltLdV19KSxufSkoKSxPZT0oKCk9PihmdW5jdGlvbihuKXtuW24uTk9UX0xPQURFRD0wXT0iTk9UX0xPQURFRCIsbltuLkxPQURFRD0xXT0iTE9BREVEIixuW24uTE9BRElORz0yXT0iTE9BRElORyIsbltuLkZBSUxFRD0zXT0iRkFJTEVEIn0oT2V8fChPZT17fSkpLE9lKSkoKSxadT1iZSgiW0NvcmVdIFBsdWdpbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWEE9YmUoIltDb3JlXSBQbHVnaW4gVXJsIEhhc2ggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFIkPWJlKCJbQ29yZV0gTG9hZGVkIiksRmE9YmUoIltDb3JlXSBVc2VyIFRyaWdnZXJlZCBSZWxvYWQiKSxhYT1iZSgiW0NvcmVdIEF1dG8gUmVsb2FkIiksUUE9YmUoIltDb3JlXSBQbHVnaW5MaXN0aW5nIEZldGNoIFJlcXVlc3RlZCIpLFVtPWJlKCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksa009YmUoIltDb3JlXSBQbHVnaW5MaXN0aW5nIEZldGNoIEZhaWxlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEtBPWJlKCJbQ29yZV0gUG9seW1lciBDb21wb25lbnQgUnVucyBGZXRjaCBSZXF1ZXN0ZWQiKSxaQT1iZSgiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggU3VjY2Vzc2Z1bCIpLEpBPWJlKCJbQ29yZV0gUG9seW1lciBDb21wb25lbnQgUnVucyBGZXRjaCBGYWlsZWQiKSwkQT1iZSgiW0NvcmVdIEVudmlyb25tZW50IEZldGNoIFN1Y2Nlc3NmdWwiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPJD1iZSgiW0NvcmVdIFJ1biBTZWxlY3Rpb24gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGskPWJlKCJbQ29yZV0gUnVuIEZldGNoIFN1Y2Nlc3NmdWwiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxudj1iZSgiW0NvcmVdIFNpZGUgQmFyIFdpZHRoIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtmdW5jdGlvbiB6bShuLHQsZSl7bGV0IGk9T2JqZWN0LmtleXMobikscj17Li4ubiwuLi50LHByaXZhdGVOYW1lc3BhY2VkU3RhdGU6e319O3JldHVybntpbml0aWFsU3RhdGU6cixyZWR1Y2Vyczp2cihyLFNlKEpsLChhLHtiZWZvcmU6bCxhZnRlcjpjLGJlZm9yZU5hbWVzcGFjZUlkOnUsYWZ0ZXJOYW1lc3BhY2VJZDpkfSk9PntsZXQgcD1hO3JldHVybiB1IT09ZCYmKHA9ZnVuY3Rpb24oYSxsLGMpe2xldCB1PXsuLi5hLnByaXZhdGVOYW1lc3BhY2VkU3RhdGV9O2lmKGwpe2xldCBwPXt9O2ZvcihsZXQgaCBvZiBpKXBbaF09YVtoXTt1PXsuLi51LFtsXTpwfX1sZXQgZD17fTtyZXR1cm4gYS5wcml2YXRlTmFtZXNwYWNlZFN0YXRlPy5bY10/ZD1hLnByaXZhdGVOYW1lc3BhY2VkU3RhdGVbY106bCYmKGQ9biksey4uLmEsLi4uZCxwcml2YXRlTmFtZXNwYWNlZFN0YXRlOnV9fShhLHUsZCkpLGUmJihwPWUocCxsLGMpKSxwfSkpfX1mdW5jdGlvbiBqbSguLi5uKXtyZXR1cm4odCxlKT0+e2xldCBpPXQ7Zm9yKGxldCByIG9mIG4paT1yKGksZSk7cmV0dXJuIGl9fXZhciBGTT17YWN0aXZlUGx1Z2luOm51bGwscGx1Z2luczp7fSxjb3JlRGF0YUxvYWRTdGF0ZTp7c3RhdGU6T2UuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0scGx1Z2luc0xpc3RMb2FkZWQ6e3N0YXRlOk9lLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGwsZmFpbHVyZUNvZGU6bnVsbH0sZW52aXJvbm1lbnQ6e2RhdGFfbG9jYXRpb246IiIsd2luZG93X3RpdGxlOiIifSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTp7c3RhdGU6T2UuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0scG9seW1lckludGVyb3BSdW5zOltdLHBvbHltZXJJbnRlcm9wUnVuU2VsZWN0aW9uOm5ldyBTZXQsc2lkZUJhcldpZHRoSW5QZXJjZW50OjIwfSwkMmU9dnIoRk0sU2UoWnUsWEEsKG4se3BsdWdpbjp0fSk9Pih7Li4ubixhY3RpdmVQbHVnaW46dH0pKSxTZShRQSxuPT4oey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ey4uLm4uY29yZURhdGFMb2FkU3RhdGUsc3RhdGU6T2UuTE9BRElOR30scGx1Z2luc0xpc3RMb2FkZWQ6ey4uLm4ucGx1Z2luc0xpc3RMb2FkZWQsc3RhdGU6T2UuTE9BRElOR319KSksU2Uoa00sKG4se2ZhaWx1cmVDb2RlOnR9KT0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOk9lLkZBSUxFRH0scGx1Z2luc0xpc3RMb2FkZWQ6ey4uLm4ucGx1Z2luc0xpc3RMb2FkZWQsc3RhdGU6T2UuRkFJTEVELGZhaWx1cmVDb2RlOnR9fSkpLFNlKFVtLChuLHtwbHVnaW5zOnR9KT0+e2xldCBlPU9iamVjdC5rZXlzKHQpLmZpbmQocz0+dFtzXS5lbmFibGVkKXx8bnVsbCxpPW4uYWN0aXZlUGx1Z2lufHxlLHI9RGF0ZS5ub3coKSxvPW4uY29yZURhdGFMb2FkU3RhdGU7cmV0dXJuIG4ucG9seW1lclJ1bnNMb2FkU3RhdGUuc3RhdGU9PT1PZS5MT0FERUQmJihvPXtzdGF0ZTpPZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnJ9KSx7Li4ubixhY3RpdmVQbHVnaW46aSxjb3JlRGF0YUxvYWRTdGF0ZTpvLHBsdWdpbnM6dCxwbHVnaW5zTGlzdExvYWRlZDp7c3RhdGU6T2UuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpyLGZhaWx1cmVDb2RlOm51bGx9fX0pLFNlKEtBLG49Pih7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTp7Li4ubi5jb3JlRGF0YUxvYWRTdGF0ZSxzdGF0ZTpPZS5MT0FESU5HfSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTp7Li4ubi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSxzdGF0ZTpPZS5MT0FESU5HfX0pKSxTZShaQSxuPT57bGV0IHQ9RGF0ZS5ub3coKSxlPW4uY29yZURhdGFMb2FkU3RhdGU7cmV0dXJuIG4ucGx1Z2luc0xpc3RMb2FkZWQuc3RhdGU9PT1PZS5MT0FERUQmJihlPXtzdGF0ZTpPZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnR9KSx7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTplLHBvbHltZXJSdW5zTG9hZFN0YXRlOnsuLi5uLnBvbHltZXJSdW5zTG9hZFN0YXRlLHN0YXRlOk9lLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6dH19fSksU2UoSkEsbj0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOk9lLkZBSUxFRH0scG9seW1lclJ1bnNMb2FkU3RhdGU6ey4uLm4ucG9seW1lclJ1bnNMb2FkU3RhdGUsc3RhdGU6T2UuRkFJTEVEfX0pKSxTZSgkQSwobix7ZW52aXJvbm1lbnQ6dH0pPT4oey4uLm4sZW52aXJvbm1lbnQ6dH0pKSxTZShrJCwobix7cnVuczp0fSk9Pih7Li4ubixwb2x5bWVySW50ZXJvcFJ1bnM6dH0pKSxTZShPJCwobix7bmV4dFNlbGVjdGlvbjp0fSk9Pih7Li4ubixwb2x5bWVySW50ZXJvcFJ1blNlbGVjdGlvbjpuZXcgU2V0KHQpfSkpLFNlKG52LChuLHt3aWR0aEluUGVyY2VudDp0fSk9Pih7Li4ubixzaWRlQmFyV2lkdGhJblBlcmNlbnQ6TWF0aC5taW4oTWF0aC5tYXgoMCx0KSwxMDApfSkpLFNlKFljLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57bGV0IGU9ey4uLm59LGk9dC5zaWRlQmFyV2lkdGhJblBlcmNlbnQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpJiZpPj0wJiZpPD0xMDAmJihlLnNpZGVCYXJXaWR0aEluUGVyY2VudD1pKSxlfSkpLHtyZWR1Y2VyczplUGV9PXptKEZNLHt9KTtmdW5jdGlvbiBGJChuLHQpe3JldHVybiBqbSgkMmUsZVBlKShuLHQpfXZhciBfaD1NcigiY29yZSIpLG5JPUooX2gsbj0+bi5wbHVnaW5zTGlzdExvYWRlZCksTiQ9SihfaCxuPT5uLnBvbHltZXJSdW5zTG9hZFN0YXRlKSxMJD1KKF9oLG49Pm4uY29yZURhdGFMb2FkU3RhdGUuc3RhdGUpLGl2PUooX2gsbj0+bi5jb3JlRGF0YUxvYWRTdGF0ZS5sYXN0TG9hZGVkVGltZUluTXMpLFJzPUooX2gsbj0+bi5hY3RpdmVQbHVnaW4pLHJ2PUooX2gsbj0+bi5wbHVnaW5zKSxvdj1KKF9oLG49Pm4uZW52aXJvbm1lbnQpLGlJPUooX2gsbj0+bi5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLEIkPW5ldyBTZXQoW2hpLkNPTVBBUkVfRVhQRVJJTUVOVCxoaS5FWFBFUklNRU5ULGhpLk5PVF9TRVRdKSxWJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMud2ViYXBwRGF0YVNvdXJjZT1yLHRoaXMudGZCYWNrZW5kPXtyZWY6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtYmFja2VuZCIpLnRmX2JhY2tlbmR9LHRoaXMub25EYXNoYm9hcmRMb2FkJD1KdCh0aGlzLmFjdGlvbnMkLnBpcGUoaWkoUiQsSmwpLFd0KHRoaXMuc3RvcmUuc2VsZWN0KFJhKSkseWkoKFssb10sWyxzXSk9PlBzKG8scykpKSx0aGlzLmFjdGlvbnMkLnBpcGUoaWkoYWEsRmEpKSkucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdChxdSkpLFllKChbLG9dKT0+QiQuaGFzKG8pKSxiMCgxLHZvaWQgMCx7bGVhZGluZzohMH0pKSx0aGlzLmZldGNoV2ViQXBwRGF0YSQ9Y3IoKCk9PntsZXQgbz10aGlzLm9uRGFzaGJvYXJkTG9hZCQucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdChuSSksdGhpcy5zdG9yZS5zZWxlY3QoeCQpKSxZZSgoWyx7c3RhdGU6YX1dKT0+YSE9PU9lLkxPQURJTkcpLGt0KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKFFBKCkpKSx4bigoWywsYV0pPT5mdW5jdGlvbiguLi5uKXtsZXQgdD12dShuKSxlPW0xKG4pO3JldHVybiBlLmxlbmd0aD9uZXcgdW4oaT0+e2xldCByPWUubWFwKCgpPT5bXSksbz1lLm1hcCgoKT0+ITEpO2kuYWRkKCgpPT57cj1vPW51bGx9KTtmb3IobGV0IHM9MDshaS5jbG9zZWQmJnM8ZS5sZW5ndGg7cysrKWdpKGVbc10pLnN1YnNjcmliZShqdChpLGE9PntpZihyW3NdLnB1c2goYSksci5ldmVyeShsPT5sLmxlbmd0aCkpe2xldCBsPXIubWFwKGM9PmMuc2hpZnQoKSk7aS5uZXh0KHQ/dCguLi5sKTpsKSxyLnNvbWUoKGMsdSk9PiFjLmxlbmd0aCYmb1t1XSkmJmkuY29tcGxldGUoKX19LCgpPT57b1tzXT0hMCwhcltzXS5sZW5ndGgmJmkuY29tcGxldGUoKX0pKTtyZXR1cm4oKT0+e3I9bz1udWxsfX0pOmVvfSh0aGlzLndlYmFwcERhdGFTb3VyY2UuZmV0Y2hQbHVnaW5zTGlzdGluZyhhKSx0aGlzLmZldGNoRW52aXJvbm1lbnQoKSkucGlwZShMKChbbF0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChVbSh7cGx1Z2luczpsfSkpfSksZm8obD0+KHRoaXMuc3RvcmUuZGlzcGF0Y2goa00obCBpbnN0YW5jZW9mIE9NP3tmYWlsdXJlQ29kZTpsLmZhaWx1cmVDb2RlfTp7ZmFpbHVyZUNvZGU6JGwuVU5LTk9XTn0pKSxlbykpKSkpO3JldHVybiBKdChvLHRoaXMub25EYXNoYm9hcmRMb2FkJC5waXBlKEwoKFssYV0pPT5hKSx1aShhPT5hIT09aGkuQ09NUEFSRV9FWFBFUklNRU5UP1h0KFtdKTp0aGlzLnN0b3JlLnNlbGVjdChZdSkucGlwZSh5aSgobCxjKT0+e2xldCB1PU9iamVjdC5lbnRyaWVzKGwpLGQ9bmV3IE1hcChPYmplY3QuZW50cmllcyhjKSk7aWYodS5sZW5ndGghPT1kLnNpemUpcmV0dXJuITE7Zm9yKGxldFtwLGhdb2YgdSlpZighZC5nZXQocCl8fGQuZ2V0KHApLmFsaWFzVGV4dCE9PWguYWxpYXNUZXh0fHxkLmdldChwKS5hbGlhc051bWJlciE9PWguYWxpYXNOdW1iZXIpcmV0dXJuITE7cmV0dXJuITB9KSxPbCgwKSxiMCg1MDAsdm9pZCAwLHtsZWFkaW5nOiEwLHRyYWlsaW5nOiEwfSkpKSxXdCh0aGlzLnN0b3JlLnNlbGVjdChxdSksdGhpcy5zdG9yZS5zZWxlY3QoTiQpKSxZZSgoWyxhLGxdKT0+QiQuaGFzKGEpJiZsLnN0YXRlIT09T2UuTE9BRElORyksa3QoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEtBKCkpfSksdWkoKCk9PnRoaXMucmVmcmVzaFBvbHltZXJSdW5zKCkpLGt0KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChaQSgpKX0pLGZvKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaChKQSgpKSxlbykpKSl9LHtkaXNwYXRjaDohMX0pLHRoaXMuZGlzcGF0Y2hDaGFuZ2VQbHVnaW4kPWNyKCgpPT5KdCh0aGlzLm9uRGFzaGJvYXJkTG9hZCQsdGhpcy5hY3Rpb25zJC5waXBlKGlpKFVtKSkpLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoUnMpKSxMKChbLG9dKT0+bykseWkoKSxZZShvPT5udWxsIT09byksUXQoMSksa3Qobz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goWnUoe3BsdWdpbjpvfSkpfSkpLHtkaXNwYXRjaDohMX0pfXJlZnJlc2hQb2x5bWVyUnVucygpe3JldHVybiBFbyh0aGlzLnRmQmFja2VuZC5yZWYucnVuc1N0b3JlLnJlZnJlc2goKSl9ZmV0Y2hFbnZpcm9ubWVudCgpe3JldHVybiB0aGlzLndlYmFwcERhdGFTb3VyY2UuZmV0Y2hFbnZpcm9ubWVudCgpLnBpcGUoa3QoZT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goJEEoe2Vudmlyb25tZW50OmV9KSl9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooUG8pLGooQ2UpLGooWUEpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxOND1uZXcgcGUoIkNvcmUgRmVhdHVyZSBDb25maWciKTtmdW5jdGlvbiBIJChuKXtyZXR1cm57aW5pdGlhbFN0YXRlOnsuLi5GTSxhY3RpdmVQbHVnaW46bi5nZXRQbHVnaW5JZCgpfHxudWxsfX19ZnVuY3Rpb24gaVBlKCl7cmV0dXJuIEooaUksbj0+KHtzaWRlQmFyV2lkdGhJblBlcmNlbnQ6bn0pKX12YXIgZWM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6TjQsZGVwczpbZmhdLHVzZUZhY3Rvcnk6SCR9XSxpbXBvcnRzOltyby5mb3JGZWF0dXJlKFtWJF0pLHdyLmZvckZlYXR1cmUoImNvcmUiLEYkLE40KSxQJCxTci5kZWZpbmVHbG9iYWxTZXR0aW5nKGlQZSldfSksbn0pKCksVSQ9bmV3IHBlKCJbQWxlcnRdIEFjdGlvbi1Uby1BbGVydCBQcm92aWRlciIpLEp1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5wcm92aWRlcnM9bmV3IE1hcDtmb3IobGV0IGkgb2YgZXx8W10pZm9yKGxldCByIG9mIGkpe2lmKHRoaXMucHJvdmlkZXJzLmhhcyhyLmFjdGlvbkNyZWF0b3IudHlwZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCIke3IuYWN0aW9uQ3JlYXRvci50eXBlfSIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGZvciBhbGVydHMuIE11bHRpcGxlIGFsZXJ0cyBmb3IgdGhlIHNhbWUgYWN0aW9uIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldChyLmFjdGlvbkNyZWF0b3IudHlwZSxyLmFsZXJ0RnJvbUFjdGlvbil9fWdldEFsZXJ0RnJvbUFjdGlvbihlKXtsZXQgaT10aGlzLnByb3ZpZGVycy5nZXQoZS50eXBlKTtyZXR1cm4gaT9pKGUpOm51bGx9c3RhdGljIHJlZ2lzdGVyQWxlcnRBY3Rpb25zKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6VSQsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKFUkLDgpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksckk9YmUoIltSdW5zXSBGZXRjaCBSdW5zIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHZoPWJlKCJbUnVuc10gRmV0Y2ggUnVucyBTdWNjZWVkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxzdj1iZSgiW1J1bnNdIEZldGNoIFJ1bnMgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksb0k9YmUoIltSdW5zXSBSdW4gU2VsZWN0aW9uIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxzST1iZSgiW1J1bnNdIFNpbmdsZSBSdW4gU2VsZWN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxhST1iZSgiW1J1bnNdIFJ1biBQYWdlIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbEk9YmUoIltSdW5zXSBSdW4gU2VsZWN0b3IgUGFnaW5hdGlvbiBPcHRpb24gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGNJPWJlKCJbUnVuc10gUnVuIFNlbGVjdG9yIFNvcnQgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE5NPWJlKCJbUnVuc10gUnVuIFNlbGVjdG9yIFJlZ2V4IEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdUk9YmUoIltSdW5zXSBSdW4gQ29sb3IgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGRJPWJlKCJbUnVuc10gUnVuIFRhYmxlIFNob3duIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksYXY9YmUoIltSdW5zXSBSdW4gR3JvdXAgQnkgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLENpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5ESVNDUkVURT0wXT0iRElTQ1JFVEUiLG5bbi5JTlRFUlZBTD0xXT0iSU5URVJWQUwifShDaXx8KENpPXt9KSksQ2kpKSgpLHBJPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEdtPXt9O0JFKEdtLHtocGFyYW1zRGlzY3JldGVIcGFyYW1GaWx0ZXJDaGFuZ2VkOigpPT5WNCxocGFyYW1zSW50ZXJ2YWxIcGFyYW1GaWx0ZXJDaGFuZ2VkOigpPT5INCxocGFyYW1zTWV0cmljRmlsdGVyQ2hhbmdlZDooKT0+VTR9KTt2YXIgVjQ9YmUoIltIcGFyYW1zXSBIcGFyYW1zIERpc2NyZXRlIEhwYXJhbSBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEg0PWJlKCJbSHBhcmFtc10gSHBhcmFtcyBJbnRlcnZhbCBIcGFyYW0gRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxVND1iZSgiW0hwYXJhbXNdIEhwYXJhbXMgTWV0cmljIEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSk7ZnVuY3Rpb24gV20obil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFsuLi5uXS5zb3J0KCkpfWZ1bmN0aW9uIExNKG4pe2xldCB0PW5ldyBNYXAsZT1uZXcgTWFwLGk9bmV3IE1hcDtmb3IobGV0IHIgb2Ygbilmb3IobGV0W28sc11vZiByKWlmKHMudHlwZT09PUNpLkRJU0NSRVRFKXtsZXR7cG9zc2libGVWYWx1ZXM6YSx2YWx1ZXM6bH09ZS5nZXQobyl8fHtwb3NzaWJsZVZhbHVlczpuZXcgU2V0LHZhbHVlczpuZXcgU2V0fTtmb3IobGV0IGMgb2Ygcy5maWx0ZXJWYWx1ZXMpbC5hZGQoYyk7Zm9yKGxldCBjIG9mIHMucG9zc2libGVWYWx1ZXMpYS5hZGQoYyk7ZS5zZXQobyx7cG9zc2libGVWYWx1ZXM6YSx2YWx1ZXM6bH0pfWVsc2V7bGV0IGE9aS5nZXQobyk7aS5zZXQobyx7ZmlsdGVyTG93ZXJWYWx1ZTpNYXRoLm1pbihzLmZpbHRlckxvd2VyVmFsdWUsYT8uZmlsdGVyTG93ZXJWYWx1ZT8/MS8wKSxmaWx0ZXJVcHBlclZhbHVlOk1hdGgubWF4KHMuZmlsdGVyVXBwZXJWYWx1ZSxhPy5maWx0ZXJVcHBlclZhbHVlPz8tMS8wKSxtaW5WYWx1ZTpNYXRoLm1pbihzLm1pblZhbHVlLGE/Lm1pblZhbHVlPz8xLzApLG1heFZhbHVlOk1hdGgubWF4KHMubWF4VmFsdWUsYT8ubWF4VmFsdWU/Py0xLzApfSl9Zm9yKGxldFtyLHt2YWx1ZXM6byxwb3NzaWJsZVZhbHVlczpzfV1vZiBlKXQuc2V0KHIse3R5cGU6Q2kuRElTQ1JFVEUsaW5jbHVkZVVuZGVmaW5lZDohMCxwb3NzaWJsZVZhbHVlczpbLi4uc10sZmlsdGVyVmFsdWVzOlsuLi5vXX0pO2ZvcihsZXRbcix7bWluVmFsdWU6byxtYXhWYWx1ZTpzLGZpbHRlckxvd2VyVmFsdWU6YSxmaWx0ZXJVcHBlclZhbHVlOmx9XW9mIGkpe2lmKHQuaGFzKHIpKXtsZXQgYz10LmdldChyKTtpZihjLnR5cGU9PT1DaS5ESVNDUkVURSYmYy5wb3NzaWJsZVZhbHVlcy5zb21lKHU9PnUpKXRocm93IG5ldyBSYW5nZUVycm9yKGBDYW5ub3QgY29tYmluZSBocGFyYW0sICR7cn0sIGFzIGl0IGlzIG9mIG1peGVkIHR5cGVzLmApfXQuc2V0KHIse3R5cGU6Q2kuSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCxtaW5WYWx1ZTpvLG1heFZhbHVlOnMsZmlsdGVyTG93ZXJWYWx1ZTphLGZpbHRlclVwcGVyVmFsdWU6bH0pfXJldHVybiB0fWZ1bmN0aW9uIGhJKG4pe2xldCB0PW5ldyBNYXA7Zm9yKGxldCBlIG9mIG4pZm9yKGxldFtpLHJdb2YgZSl7bGV0IG89dC5nZXQoaSk7dC5zZXQoaSx7dHlwZTpDaS5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOiEwLC4uLm8sbWluVmFsdWU6TWF0aC5taW4oci5taW5WYWx1ZSxvPy5taW5WYWx1ZT8/MS8wKSxtYXhWYWx1ZTpNYXRoLm1heChyLm1heFZhbHVlLG8/Lm1heFZhbHVlPz8tMS8wKSxmaWx0ZXJMb3dlclZhbHVlOk1hdGgubWluKHIuZmlsdGVyTG93ZXJWYWx1ZSxvPy5maWx0ZXJMb3dlclZhbHVlPz8xLzApLGZpbHRlclVwcGVyVmFsdWU6TWF0aC5tYXgoci5maWx0ZXJVcHBlclZhbHVlLG8/LmZpbHRlclVwcGVyVmFsdWU/Py0xLzApfSl9cmV0dXJuIHR9dmFyIGxQZT12cih7c3BlY3M6e30sZmlsdGVyczp7fX0sU2UoVjQsKG4sdCk9PntsZXR7ZXhwZXJpbWVudElkczplLGhwYXJhbU5hbWU6aSxmaWx0ZXJWYWx1ZXM6cixpbmNsdWRlVW5kZWZpbmVkOm99PXQscz1XbShlKSxhPW4uZmlsdGVyc1tzXT8/e2hwYXJhbXM6bmV3IE1hcH0sbD1hLmhwYXJhbXMuZ2V0KGkpO2lmKGwmJmwudHlwZSE9PUNpLkRJU0NSRVRFKXRocm93IG5ldyBSYW5nZUVycm9yKGBOZXcgZGlzY3JldGUgZmlsdGVyIG9mICR7aX0gY29uZmxpY3RzIGV4aXN0aW5nIGZpbHRlciBvZiBgK0NpW2wudHlwZV0pO2xldCBjPUxNKGUuZmlsdGVyKGg9PkJvb2xlYW4obi5zcGVjc1toXSkpLm1hcChoPT5uLnNwZWNzW2hdLmhwYXJhbS5kZWZhdWx0RmlsdGVycykpLmdldChpKTtpZighYyl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgaHBhcmFtLCAke2l9LCB3aGVuIGl0IGlzIG5vdCBrbm93biBmb3IgZXhwZXJpbWVudElkczogJHtlLmpvaW4oIiwgIil9YCk7aWYoYy50eXBlIT09Q2kuRElTQ1JFVEUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0ICR7aX0gd2hlbiBkZWZhdWx0IGZpbHRlciBpcyBub3Qgb2YgZGlzY3JldGUgdHlwZS5gKTtsZXQgdT1uZXcgU2V0KGMucG9zc2libGVWYWx1ZXMpLGQ9Wy4uLnJdLmZpbHRlcihoPT4hdS5oYXMoaCkpO2lmKGQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgTmV3IGZpbHRlciBmb3IgJHtpfSBoYXMgbW9yZSB0aGFuIG9uZSB2YWx1ZSB0aGF0IGlzIG5vdCBwcmVzZW50IGluIHRoZSBzcGVjLiBCYWQgdmFsdWVzOiAke2Quam9pbigiLCAiKX1gKTtsZXQgcD1uZXcgTWFwKGEuaHBhcmFtcyk7cmV0dXJuIHAuc2V0KGksey4uLmwsdHlwZTpDaS5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOm8scG9zc2libGVWYWx1ZXM6Wy4uLnVdLGZpbHRlclZhbHVlczpyfSksey4uLm4sZmlsdGVyczp7Li4ubi5maWx0ZXJzLFtzXTp7Li4uYSxocGFyYW1zOnB9fX19KSxTZShINCwobix0KT0+e2xldHtleHBlcmltZW50SWRzOmUsaHBhcmFtTmFtZTppLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm8saW5jbHVkZVVuZGVmaW5lZDpzfT10LGE9V20oZSksbD1uLmZpbHRlcnNbYV0/P3ttZXRyaWNzOm5ldyBNYXAsaHBhcmFtczpuZXcgTWFwfSxjPWwuaHBhcmFtcy5nZXQoaSk7aWYoYyYmYy50eXBlIT09Q2kuSU5URVJWQUwpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBpbnRlcnZhbCBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArQ2lbYy50eXBlXSk7bGV0IHU9TE0oZS5maWx0ZXIocD0+Qm9vbGVhbihuLnNwZWNzW3BdKSkubWFwKHA9Pm4uc3BlY3NbcF0uaHBhcmFtLmRlZmF1bHRGaWx0ZXJzKSkuZ2V0KGkpO2lmKCF1KXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYSwgJHtpfSwgd2hlbiBpdCBpcyBub3Qga25vd24gZm9yIGV4cGVyaW1lbnRJZHM6ICR7ZS5qb2luKCIsICIpfWApO2lmKHUudHlwZSE9PUNpLklOVEVSVkFMKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCAke2l9IHdoZW4gZGVmYXVsdCBmaWx0ZXIgaXMgbm90IG9mIGludGVydmFsIHR5cGUuYCk7bGV0IGQ9bmV3IE1hcChsLmhwYXJhbXMpO3JldHVybiBkLnNldChpLHsuLi5jLHR5cGU6Q2kuSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDpzLG1pblZhbHVlOnUubWluVmFsdWUsbWF4VmFsdWU6dS5tYXhWYWx1ZSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvfSksey4uLm4sZmlsdGVyczp7Li4ubi5maWx0ZXJzLFthXTp7Li4ubCxocGFyYW1zOmR9fX19KSxTZShVNCwobix0KT0+e2xldHtleHBlcmltZW50SWRzOmUsbWV0cmljVGFnOmksZmlsdGVyTG93ZXJWYWx1ZTpyLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOnN9PXQsYT1XbShlKSxsPW4uZmlsdGVyc1thXT8/e21ldHJpY3M6bmV3IE1hcCxocGFyYW1zOm5ldyBNYXB9LGM9aEkoZS5maWx0ZXIocD0+Qm9vbGVhbihuLnNwZWNzW3BdKSkubWFwKHA9Pm4uc3BlY3NbcF0ubWV0cmljLmRlZmF1bHRGaWx0ZXJzKSkuZ2V0KGkpO2lmKCFjKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBtZXRyaWMsICR7aX0sIHdoZW4gaXQgaXMgbm90IGtub3duIGZvciBleHBlcmltZW50SWRzOiAke2Uuam9pbigiLCAiKX1gKTtsZXQgdT1sLm1ldHJpY3MuZ2V0KGkpLGQ9bmV3IE1hcChsLm1ldHJpY3MpO3JldHVybiBkLnNldChpLHsuLi51LHR5cGU6Q2kuSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDpzLG1pblZhbHVlOmMubWluVmFsdWUsbWF4VmFsdWU6Yy5tYXhWYWx1ZSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvfSksey4uLm4sZmlsdGVyczp7Li4ubi5maWx0ZXJzLFthXTp7Li4ubCxtZXRyaWNzOmR9fX19KSxTZSh2aCwobix0KT0+e2lmKDA9PT1PYmplY3Qua2V5cyh0Lm5ld1J1bnNBbmRNZXRhZGF0YSkubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLnNwZWNzfSxpPW5ldyBNYXAscj1uZXcgU2V0O2ZvcihsZXQgbyBvZiBPYmplY3Qua2V5cyh0Lm5ld1J1bnNBbmRNZXRhZGF0YSkpe2xldCBzPW5ldyBNYXAsYT1uZXcgTWFwLGw9bmV3IE1hcCxjPW5ldyBNYXAse3J1bnM6dSxtZXRhZGF0YTpkfT10Lm5ld1J1bnNBbmRNZXRhZGF0YVtvXTtmb3IobGV0IHAgb2YgdSl7bGV0IGg9ZC5ydW5Ub0hwYXJhbXNBbmRNZXRyaWNzW3AuaWRdO2lmKGgpZm9yKGxldCBmIG9mIGgubWV0cmljcyl7bGV0IG09aS5nZXQoZi50YWcpO2kuc2V0KGYudGFnLHttaW46bT9NYXRoLm1pbihtLm1pbixmLnZhbHVlKTpmLnZhbHVlLG1heDptP01hdGgubWF4KG0ubWF4LGYudmFsdWUpOmYudmFsdWV9KX19Zm9yKGxldHtuYW1lOnAsZG9tYWluOmh9b2YgZC5ocGFyYW1TcGVjcylpZihoLnR5cGU9PT1DaS5ESVNDUkVURSl7bGV0IGY9bC5nZXQocCl8fG5ldyBTZXQ7Zm9yKGxldCBtIG9mIGgudmFsdWVzKWYuYWRkKG0pO2wuc2V0KHAsZil9ZWxzZXtsZXQgZj1jLmdldChwKTtjLnNldChwLHttaW5WYWx1ZTpmP01hdGgubWluKGgubWluVmFsdWUsZi5taW5WYWx1ZSk6aC5taW5WYWx1ZSxtYXhWYWx1ZTpmP01hdGgubWF4KGgubWF4VmFsdWUsZi5tYXhWYWx1ZSk6aC5tYXhWYWx1ZX0pfWZvcihsZXQgcCBvZiBkLm1ldHJpY1NwZWNzKXIuYWRkKHAudGFnKTtmb3IobGV0W3AsaF1vZiBsKXMuc2V0KHAse3R5cGU6Q2kuRElTQ1JFVEUsaW5jbHVkZVVuZGVmaW5lZDohMCxwb3NzaWJsZVZhbHVlczpbLi4uaF0sZmlsdGVyVmFsdWVzOlsuLi5oXX0pO2ZvcihsZXRbcCx7bWluVmFsdWU6aCxtYXhWYWx1ZTpmfV1vZiBjKXMuc2V0KHAse3R5cGU6Q2kuSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCxtaW5WYWx1ZTpoLG1heFZhbHVlOmYsZmlsdGVyTG93ZXJWYWx1ZTpoLGZpbHRlclVwcGVyVmFsdWU6Zn0pO2ZvcihsZXQgcCBvZiByKXtsZXQgaD1pLmdldChwKSxmPWg/Lm1pbj8/MCxtPWg/Lm1heD8/MDthLnNldChwLHt0eXBlOkNpLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6ZixtYXhWYWx1ZTptLGZpbHRlckxvd2VyVmFsdWU6ZixmaWx0ZXJVcHBlclZhbHVlOm19KX1lW29dPXtocGFyYW06ey4uLmVbb10/LmhwYXJhbSxzcGVjczpkLmhwYXJhbVNwZWNzLGRlZmF1bHRGaWx0ZXJzOnN9LG1ldHJpYzp7Li4uZVtvXT8ubWV0cmljLHNwZWNzOmQubWV0cmljU3BlY3MsZGVmYXVsdEZpbHRlcnM6YX19fXJldHVybnsuLi5uLHNwZWNzOmV9fSkpO2Z1bmN0aW9uIHokKG4sdCl7cmV0dXJuIGxQZShuLHQpfXZhciBmST0iaHBhcmFtcyIsaiQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W3dyLmZvckZlYXR1cmUoZkkseiQpXX0pLG59KSgpLG1JPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltqJF19KSxufSkoKTtmdW5jdGlvbiBjUGUobix0KXtyZXR1cm5gJHt0fS8ke259YH12YXIgRyQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmh0dHA9ZX1mZXRjaFJ1bnMoZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoImRhdGEvcnVucyIpLnBpcGUoTChpPT5pLm1hcChyPT4oe2lkOmNQZShyLGUpLG5hbWU6cixzdGFydFRpbWU6MH0pKSkpfWZldGNoSHBhcmFtc01ldGFkYXRhKGUpe3JldHVybiBYdCh7aHBhcmFtU3BlY3M6W10sbWV0cmljU3BlY3M6W10scnVuVG9IcGFyYW1zQW5kTWV0cmljczp7fX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKGthKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksVyQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6cEksdXNlQ2xhc3M6RyR9XX0pLG59KSgpLHEkPUooTXIoImFsZXJ0cyIpLG49Pm4ubGF0ZXN0QWxlcnQpLF9JPSJleHBlcmltZW50cyIscFBlPUooTXIoX0kpLG49Pm4uZGF0YSksdkk9SihwUGUsKG4sdCk9PntsZXR7ZXhwZXJpbWVudElkOmV9PXQ7cmV0dXJuIG4uZXhwZXJpbWVudE1hcFtlXXx8bnVsbH0pLHJpPSgoKT0+KGZ1bmN0aW9uKG4pe24uU0NBTEFSUz0ic2NhbGFycyIsbi5ISVNUT0dSQU1TPSJoaXN0b2dyYW1zIixuLklNQUdFUz0iaW1hZ2VzIn0ocml8fChyaT17fSkpLHJpKSkoKSxKaT0oKCk9PihmdW5jdGlvbihuKXtuW24uU1RFUD0wXT0iU1RFUCIsbltuLlJFTEFUSVZFPTFdPSJSRUxBVElWRSIsbltuLldBTExfVElNRT0yXT0iV0FMTF9USU1FIn0oSml8fChKaT17fSkpLEppKSkoKSxCTT0idGltZXNlcmllcyI7ZnVuY3Rpb24gWCQobil7cmV0dXJuIG49PT1yaS5TQ0FMQVJTfHxuPT09cmkuSElTVE9HUkFNU3x8bj09PXJpLklNQUdFU312YXIgaFBlPVtyaS5JTUFHRVNdO2Z1bmN0aW9uIGZsKG4pe3JldHVybiBoUGUuaW5jbHVkZXMobil9dmFyIGZQZT1bcmkuSElTVE9HUkFNUyxyaS5JTUFHRVNdO2Z1bmN0aW9uIG1sKG4pe3JldHVybiBmUGUuaW5jbHVkZXMobil9ZnVuY3Rpb24gejQobil7cmV0dXJuIG1sKG4ucGx1Z2luKX12YXIgJHU9Y2xhc3N7fTtmdW5jdGlvbiBiSShuKXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgiZXJyb3IiKX12YXIgajQ9ImRhdGEvcGx1Z2luL3RpbWVzZXJpZXMiO2Z1bmN0aW9uIFEkKG4pe2xldCB0PW4uaW5kZXhPZigiLyIpO3JldHVybntydW46bi5zdWJzdHJpbmcodCsxKSxleHBlcmltZW50SWQ6bi5zdWJzdHJpbmcoMCx0KX19ZnVuY3Rpb24gWiQobix0KXtyZXR1cm5gJHt0fS8ke259YH1mdW5jdGlvbiBLJChuLHQpe2xldHtydW5Ub1NlcmllczplLHJ1bjppLC4uLnJ9PW4sbz17Li4ucn07cmV0dXJuIGUmJihvLnJ1blRvU2VyaWVzPUc0KGUsdCkpLGkmJihvLnJ1bklkPVokKGksdCkpLG99ZnVuY3Rpb24gRzQobix0KXtsZXQgZT17fTtmb3IobGV0IGkgaW4gbiluLmhhc093blByb3BlcnR5KGkpJiYoZVtaJChpLHQpXT1uW2ldKTtyZXR1cm4gZX12YXIgSiQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaHR0cD1lLHRoaXMuc3RvcmU9aX1mZXRjaFRhZ01ldGFkYXRhKGUpe2xldCBpPWUubWFwKG89PnRoaXMuaHR0cC5nZXQoYC9leHBlcmltZW50LyR7b30vJHtqNH0vdGFnc2ApLnBpcGUoTChhPT5mdW5jdGlvbihuLHQpe2xldCBlPXt9O2ZvcihsZXQgaSBvZiBPYmplY3Qua2V5cyhuKSl7bGV0IHI9aTtpZihmbChyKSl7bGV0e3RhZ1J1blNhbXBsZWRJbmZvOm8sLi4uc309bltyXSxhPXt9O2ZvcihsZXQgbCBpbiBvKW8uaGFzT3duUHJvcGVydHkobCkmJihhW2xdPUc0KG9bbF0sdCkpO2Vbcl09ey4uLnMsdGFnUnVuU2FtcGxlZEluZm86YX19ZWxzZXtsZXR7cnVuVGFnSW5mbzpvLC4uLnN9PW5bcl07ZVtyXT17Li4ucyxydW5UYWdJbmZvOkc0KG8sdCl9fX1yZXR1cm4gZX0oYSxvKSkpKSxyPXRoaXMuc3RvcmUuc2VsZWN0KGdoKS5waXBlKFllKEJvb2xlYW4pLFF0KDEpLFd0KHRoaXMuc3RvcmUuc2VsZWN0KFdBKSksTCgoWyxvXSk9Pm8pKTtyZXR1cm4gbHIoaSkucGlwZShXdChyKSxMKChbbyxzXSk9PntsZXQgYT1mdW5jdGlvbihuKXtsZXQgdD17fTtmb3IobGV0IGUgb2Ygbilmb3IobGV0IGkgb2YgT2JqZWN0LnZhbHVlcyhyaSkpaWYoZmwoaSkpe3RbaV09dFtpXXx8e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX07bGV0e3RhZ0Rlc2NyaXB0aW9uczpyLHRhZ1J1blNhbXBsZWRJbmZvOm99PWVbaV07dFtpXS50YWdEZXNjcmlwdGlvbnM9ey4uLnRbaV0udGFnRGVzY3JpcHRpb25zLC4uLnJ9O2xldCBzPXRbaV0udGFnUnVuU2FtcGxlZEluZm87Zm9yKGxldCBhIG9mIE9iamVjdC5rZXlzKG8pKXtzW2FdPXNbYV18fHt9O2ZvcihsZXQgbCBvZiBPYmplY3Qua2V5cyhvW2FdKSlzW2FdW2xdPW9bYV1bbF19fWVsc2V7dFtpXT10W2ldfHx7dGFnRGVzY3JpcHRpb25zOnt9LHJ1blRhZ0luZm86e319O2xldHt0YWdEZXNjcmlwdGlvbnM6cixydW5UYWdJbmZvOm99PWVbaV07dFtpXS50YWdEZXNjcmlwdGlvbnM9ey4uLnRbaV0udGFnRGVzY3JpcHRpb25zLC4uLnJ9LHRbaV0ucnVuVGFnSW5mbz17Li4udFtpXS5ydW5UYWdJbmZvLC4uLm99fXJldHVybiB0fShvKTtyZXR1cm4gc3x8KGFbcmkuSU1BR0VTXT17dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1J1blNhbXBsZWRJbmZvOnt9fSksYX0pKX1mZXRjaFRpbWVTZXJpZXMoZSl7bGV0IGk9ZS5tYXAocj0+e2lmKG1sKHIucGx1Z2luKSl7bGV0e3J1bklkOmwsLi4uY309cix7cnVuOnUsZXhwZXJpbWVudElkOmR9PVEkKGwpLHA9ey4uLmMscnVuOnV9O3JldHVybiB0aGlzLmZldGNoVGltZVNlcmllc0JhY2tlbmRSZXF1ZXN0KHAsZCkucGlwZShMKCh7cmVzcG9uc2U6aCxleHBlcmltZW50SWQ6Zn0pPT5LJChoLGYpKSl9bGV0e2V4cGVyaW1lbnRJZHM6bywuLi5zfT1yO3JldHVybiBscihvLm1hcChsPT50aGlzLmZldGNoVGltZVNlcmllc0JhY2tlbmRSZXF1ZXN0KHMsbCkpKS5waXBlKEwobD0+e2xldHtydW5Ub1NlcmllczpjLGVycm9yOnUsLi4uZH09bFswXS5yZXNwb25zZSxwPWQ7Zm9yKGxldHtyZXNwb25zZTpoLGV4cGVyaW1lbnRJZDpmfW9mIGwpe2xldCBtPUskKGgsZik7aWYocC5lcnJvciljb250aW51ZTtsZXR7cnVuVG9TZXJpZXM6eCxlcnJvcjpnfT1tO2lmKGcpcC5lcnJvcj1nLHAucnVuVG9TZXJpZXM9dm9pZCAwO2Vsc2V7cC5ydW5Ub1Nlcmllcz1wLnJ1blRvU2VyaWVzfHx7fTtmb3IobGV0IGIgb2YgT2JqZWN0LmtleXMoeCkpcC5ydW5Ub1Nlcmllc1tiXT14W2JdfX1yZXR1cm4gcH0pKX0pO3JldHVybiBscihpKX1mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdChlLGkpe2xldCByPW5ldyBGb3JtRGF0YTtyZXR1cm4gci5hcHBlbmQoInJlcXVlc3RzIixKU09OLnN0cmluZ2lmeShbZV0pKSx0aGlzLmh0dHAucG9zdChgL2V4cGVyaW1lbnQvJHtpfS8ke2o0fS90aW1lU2VyaWVzYCxyKS5waXBlKEwobz0+KHtyZXNwb25zZTpvWzBdLGV4cGVyaW1lbnRJZDppfSkpKX1pbWFnZVVybChlKXtyZXR1cm5gJHtqNH0vaW1hZ2VEYXRhP2ltYWdlSWQ9JHtlfWB9ZG93bmxvYWRVcmwoZSxpLHIsbyl7bGV0IGwse3J1bjpzLGV4cGVyaW1lbnRJZDphfT1RJChyKTtpZihlIT09cmkuU0NBTEFSUyl0aHJvdyBuZXcgRXJyb3IoYE5vdCBpbXBsZW1lbnRlZDogZG93bmxvYWRVcmwgZm9yICR7ZX0gaXMgbm90IGltcGxlbWVudGVkIHlldGApO2lmKGw9InNjYWxhcnMvc2NhbGFycyIsIWEpdGhyb3cgbmV3IEVycm9yKCJleHBlcmltZW50SWQgaXMgZW1wdHk7IGl0IGlzIHJlcXVpcmVkIHRvIGZvcm0gZG93bmxvYWRVcmwuIik7cmV0dXJuYC9leHBlcmltZW50LyR7YX0vZGF0YS9wbHVnaW4vc2NhbGFycy9zY2FsYXJzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOmkscnVuOnMsZm9ybWF0Om99KX1gfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKGthKSxqKENlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdlBlPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkseEk9KCgpPT57Y2xhc3MgbntnZXRQYXJhbXMoKXtyZXR1cm4gdlBlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxWTT0idGJfZmVhdHVyZV9mbGFnX3N0b3JhZ2Vfa2V5IixXND0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucXVlcnlQYXJhbXM9ZX1nZXRGZWF0dXJlcyhlLGkpe2xldCByPWU/dGhpcy5nZXRQYXJ0aWFsRmVhdHVyZXNGcm9tTWVkaWFRdWVyeSgpOnt9LG89ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmVudHJpZXMobikucmVkdWNlKChlLFtpLHJdKT0+e2xldCBvPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5xdWVyeVBhcmFtT3ZlcnJpZGU7aWYoIWV8fCF0LmhhcyhlKSlyZXR1cm4gbnVsbDtsZXQgaT10LmdldChlKTtyZXR1cm4gbnVsbD09aT9udWxsOm4ucGFyc2VWYWx1ZShpKX0ocix0KTtyZXR1cm4gbnVsbCE9PW8mJihlW2ldPW8pLGV9LHt9KX0oaSx0aGlzLnF1ZXJ5UGFyYW1zLmdldFBhcmFtcygpKTtyZXR1cm57Li4uciwuLi5PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModGhpcy5nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCkpLmZpbHRlcigoW2FdKT0+aVthXSkpLC4uLm99fXBlcnNpc3RGZWF0dXJlRmxhZ3MoZSl7bGV0IHI9ey4uLnRoaXMuZ2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpLC4uLmV9O2xvY2FsU3RvcmFnZS5zZXRJdGVtKFZNLEpTT04uc3RyaW5naWZ5KHIpKX1yZXNldFBlcnNpc3RlZEZlYXR1cmVGbGFnKGUpe2xldCBpPXRoaXMuZ2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpO2lmKG51bGwhPWlbZV0pe2lmKGRlbGV0ZSBpW2VdLDA9PT1PYmplY3Qua2V5cyhpKS5sZW5ndGgpcmV0dXJuIHZvaWQgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oVk0pO2xvY2FsU3RvcmFnZS5zZXRJdGVtKFZNLEpTT04uc3RyaW5naWZ5KGkpKX19cmVzZXRBbGxQZXJzaXN0ZWRGZWF0dXJlRmxhZ3MoKXtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShWTSl9Z2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpe2xldCBlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKFZNKTtyZXR1cm4gbnVsbD09ZT97fTpKU09OLnBhcnNlKGUpfWdldFBhcnRpYWxGZWF0dXJlc0Zyb21NZWRpYVF1ZXJ5KCl7bGV0IGU9e307cmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcyYmKGUuZGVmYXVsdEVuYWJsZURhcmtNb2RlPSEwKSxlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKHhJKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksQ0k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdGVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W1c0LHhJLHtwcm92aWRlOkNJLHVzZUNsYXNzOlc0fV19KSxufSkoKSxITT1iZSgiW0ZFQVRVUkUgRkxBR10gUGFydGlhbCBGZWF0dXJlIEZsYWdzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE1JPWJlKCJbRkVBVFVSRSBGTEFHXSBFbmFibGUgRGFyayBNb2RlIE92ZXJyaWRlIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxxbT1iZSgiW0ZFQVRVUkUgRkxBR10gU3RvcmUgdGhlIGZlYXR1cmUgZmxhZ3MgaW4gcGVyc2lzdGVudCBsb2NhbFN0b3JhZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx5aD1iZSgiW0ZFQVRVUkUgRkxBR10gUmVzZXQgZmVhdHVyZSBmbGFnIG92ZXJyaWRlcyIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGx2PWJlKCJbRkVBVFVSRSBGTEFHXSBSZXNldCBhbGwgZmVhdHVyZSBmbGFnIG92ZXJyaWRlcyIpLHE0PSJfdGJfZm9yY2Vfc3ZnIix3ST0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7fWdldEZvcmNlU3ZnRmxhZygpe3JldHVybiEhbG9jYWxTdG9yYWdlLmdldEl0ZW0ocTQpfXVwZGF0ZUZvcmNlU3ZnRmxhZyhlKXtlP2xvY2FsU3RvcmFnZS5zZXRJdGVtKHE0LCJwcmVzZW50Iik6bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0ocTQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxuZWU9YmUoIltGRUFUVVJFIEZMQUddIEVmZmVjdHMgSW5pdCIpLGllZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5kYXRhU291cmNlPXIsdGhpcy5mb3JjZVN2Z0RhdGFTb3VyY2U9byx0aGlzLnRmRmVhdHVyZUZsYWdzPXtyZWY6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtZmVhdHVyZS1mbGFncyIpLnRmX2ZlYXR1cmVfZmxhZ3N9LHRoaXMuZ2V0RmVhdHVyZUZsYWdzJD1jcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKGlpKG5lZSksZnIodGhpcy5zdG9yZS5zZWxlY3QoYiQpLHRoaXMuc3RvcmUuc2VsZWN0KEhtKSksTCgoWyxzLGFdKT0+e2xldCBsPXRoaXMuZGF0YVNvdXJjZS5nZXRGZWF0dXJlcyhzLGEpO3JldHVybiBudWxsIT1sLmZvcmNlU3ZnP3RoaXMuZm9yY2VTdmdEYXRhU291cmNlLnVwZGF0ZUZvcmNlU3ZnRmxhZyhsLmZvcmNlU3ZnKTp0aGlzLmZvcmNlU3ZnRGF0YVNvdXJjZS5nZXRGb3JjZVN2Z0ZsYWcoKSYmKGwuZm9yY2VTdmc9ITApLEhNKHtmZWF0dXJlczpsfSl9KSkpLHRoaXMudXBkYXRlUG9seW1lckZlYXR1cmVGbGFncyQ9Y3IoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShpaShITSksV3QodGhpcy5zdG9yZS5zZWxlY3QoYnMpLHRoaXMuc3RvcmUuc2VsZWN0KGpBKSksa3QoKFsscyxhXSk9Pnt0aGlzLnRmRmVhdHVyZUZsYWdzLnJlZi5zZXRGZWF0dXJlRmxhZ3MocyxhKX0pKSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLnN0b3JlRmVhdHVyZUZsYWckPWNyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoaWkocW0pLGt0KCh7ZmxhZ3M6c30pPT57dGhpcy5kYXRhU291cmNlLnBlcnNpc3RGZWF0dXJlRmxhZ3Mocyl9KSkse2Rpc3BhdGNoOiExfSksdGhpcy5yZXNldEZlYXR1cmVGbGFnT3ZlcnJpZGVzJD1jcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKGlpKHloKSxrdCgoe2ZsYWdzOnN9KT0+e3MuZm9yRWFjaChhPT57dGhpcy5kYXRhU291cmNlLnJlc2V0UGVyc2lzdGVkRmVhdHVyZUZsYWcoYSl9KX0pKSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLnJlc2V0QWxsRmVhdHVyZUZsYWdPdmVycmlkZXMkPWNyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoaWkobHYpLGt0KCgpPT57dGhpcy5kYXRhU291cmNlLnJlc2V0QWxsUGVyc2lzdGVkRmVhdHVyZUZsYWdzKCl9KSkse2Rpc3BhdGNoOiExfSl9bmdyeE9uSW5pdEVmZmVjdHMoKXtyZXR1cm4gbmVlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooUG8pLGooQ2UpLGooQ0kpLGood0kpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxyZWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbd0ldfSksbn0pKCksc2VlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lfWludGVyY2VwdChlLGkpe3JldHVybiB0aGlzLnN0b3JlLnBpcGUodnQoakEpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gaT0+aS5waXBlKG4/WWUoKHIsbyk9Pm4ocixvLGkpKTptcyxRdCgxKSxlP18xKHQpOnYxKCgpPT5uZXcgXzApKX0oKSx1aShyPT4oZT1lLmNsb25lKHtoZWFkZXJzOmUuaGVhZGVycy5zZXQoIlgtVGVuc29yQm9hcmQtRmVhdHVyZS1GbGFncyIsSlNPTi5zdHJpbmdpZnkocikpfSksaS5oYW5kbGUoZSkpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooQ2UpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiBpcChuKXtyZXR1cm4iZmFsc2UiIT09bn12YXIgWTQ9e3NjYWxhcnNCYXRjaFNpemU6e2RlZmF1bHRWYWx1ZTp2b2lkIDAscXVlcnlQYXJhbU92ZXJyaWRlOiJzY2FsYXJzQmF0Y2hTaXplIixwYXJzZVZhbHVlOnBhcnNlSW50fSxlbmFibGVkRXhwZXJpbWVudGFsUGx1Z2luczp7ZGVmYXVsdFZhbHVlOltdLHF1ZXJ5UGFyYW1PdmVycmlkZToiZXhwZXJpbWVudGFsUGx1Z2luIixwYXJzZVZhbHVlOmZ1bmN0aW9uKG4pe3JldHVybiBuP24uc3BsaXQoIiwiKTpbXX19LGVuYWJsZWRMaW5rZWRUaW1lOntkZWZhdWx0VmFsdWU6ITAscXVlcnlQYXJhbU92ZXJyaWRlOiJlbmFibGVMaW5rZWRUaW1lIixwYXJzZVZhbHVlOmlwfSxlbmFibGVkU2NhbGFyRGF0YVRhYmxlOntkZWZhdWx0VmFsdWU6ITAscXVlcnlQYXJhbU92ZXJyaWRlOiJlbmFibGVEYXRhVGFibGUiLHBhcnNlVmFsdWU6aXB9LGZvcmNlU3ZnOntkZWZhdWx0VmFsdWU6ITEscXVlcnlQYXJhbU92ZXJyaWRlOiJmb3JjZVNWRyIscGFyc2VWYWx1ZTppcH0sZW5hYmxlRGFya01vZGVPdmVycmlkZTp7ZGVmYXVsdFZhbHVlOm51bGwscXVlcnlQYXJhbU92ZXJyaWRlOm51bGx9LGRlZmF1bHRFbmFibGVEYXJrTW9kZTp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZGFya01vZGUiLHBhcnNlVmFsdWU6aXB9LGlzQXV0b0RhcmtNb2RlQWxsb3dlZDp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZTpudWxsfSxpbkNvbGFiOntkZWZhdWx0VmFsdWU6ITEscXVlcnlQYXJhbU92ZXJyaWRlOiJ0ZW5zb3Jib2FyZENvbGFiIixwYXJzZVZhbHVlOmlwfSxtZXRyaWNzSW1hZ2VTdXBwb3J0RW5hYmxlZDp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZTpudWxsfSxlbmFibGVTaG93RmxhZ3M6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6InNob3dGbGFncyIscGFyc2VWYWx1ZTppcH0sYWxsb3dSYW5nZVNlbGVjdGlvbjp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiYWxsb3dSYW5nZVNlbGVjdGlvbiIscGFyc2VWYWx1ZTppcH0sZW5hYmxlZFByb3NwZWN0aXZlRm9iOntkZWZhdWx0VmFsdWU6ITAscXVlcnlQYXJhbU92ZXJyaWRlOiJlbmFibGVQcm9zcGVjdGl2ZUZvYiIscGFyc2VWYWx1ZTppcH0sZW5hYmxlU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbjp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbiIscGFyc2VWYWx1ZTppcH19LFg0PXtpc0ZlYXR1cmVGbGFnc0xvYWRlZDohMSxkZWZhdWx0RmxhZ3M6ZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLnJlZHVjZSgodCxbZSxpXSk9Pih0W2VdPWkuZGVmYXVsdFZhbHVlLHQpLHt9KX0oWTQpLG1ldGFkYXRhOlk0LGZsYWdPdmVycmlkZXM6e319LFE0PW5ldyBwZSgiW0ZlYXR1cmUgRmxhZ10gU3RvcmUgQ29uZmlnIik7ZnVuY3Rpb24gbGVlKCl7cmV0dXJue2luaXRpYWxTdGF0ZTpYNH19dmFyIEVQZT12cihYNCxTZShITSwobix7ZmVhdHVyZXM6dH0pPT4oey4uLm4saXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ITAsZmxhZ092ZXJyaWRlczp7Li4ubi5mbGFnT3ZlcnJpZGVzLC4uLnR9fSkpLFNlKE1JLChuLHtlbmFibGVEYXJrTW9kZTp0fSk9Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnsuLi5uLmZsYWdPdmVycmlkZXMsZW5hYmxlRGFya01vZGVPdmVycmlkZTp0fX0pKSxTZShxbSwobix0KT0+KHsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcywuLi50LmZsYWdzfX0pKSxTZSh5aCwobix0KT0+e2lmKCF0fHwhdC5mbGFnc3x8IXQuZmxhZ3MubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLmZsYWdPdmVycmlkZXN9O3JldHVybiB0LmZsYWdzLmZvckVhY2goaT0+e2RlbGV0ZSBlW2ldfSksey4uLm4sZmxhZ092ZXJyaWRlczplfX0pLFNlKGx2LG49Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnt9fSkpLFNlKFljLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57aWYoIXQudGhlbWVPdmVycmlkZSlyZXR1cm4gbjtsZXQgZTtzd2l0Y2godC50aGVtZU92ZXJyaWRlKXtjYXNlIE9hLkJST1dTRVJfREVGQVVMVDplPW51bGw7YnJlYWs7Y2FzZSBPYS5EQVJLOmU9ITA7YnJlYWs7Y2FzZSBPYS5MSUdIVDplPSExfXJldHVybnsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcyxlbmFibGVEYXJrTW9kZU92ZXJyaWRlOmV9fX0pKTtmdW5jdGlvbiBjZWUobix0KXtyZXR1cm4gRVBlKG4sdCl9ZnVuY3Rpb24gVFBlKCl7cmV0dXJuIEooR0Esbj0+bnVsbD09PW4/e3RoZW1lT3ZlcnJpZGU6T2EuQlJPV1NFUl9ERUZBVUxUfTp7dGhlbWVPdmVycmlkZTpuP09hLkRBUks6T2EuTElHSFR9KX12YXIgY3Y9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6UTQsdXNlRmFjdG9yeTpsZWV9LHtwcm92aWRlOkhBLHVzZUNsYXNzOnNlZSxtdWx0aTohMH1dLGltcG9ydHM6W3JlZSx0ZWUsd3IuZm9yRmVhdHVyZShVQSxjZWUsUTQpLHJvLmZvckZlYXR1cmUoW2llZV0pLFNyLmRlZmluZUdsb2JhbFNldHRpbmcoVFBlKV19KSxufSkoKSxTST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOlt7cHJvdmlkZTokdSx1c2VDbGFzczpKJH1dLGltcG9ydHM6W2N2LEt1XX0pLG59KSgpO2Z1bmN0aW9uIHJwKG4sdCxlLGkpe3JldHVybiBuW3RdLmhhc093blByb3BlcnR5KGUpP2ZsKHQpP25bdF1bZV0uaGFzT3duUHJvcGVydHkoaSk/blt0XVtlXVtpXTpudWxsOm5bdF1bZV06bnVsbH1mdW5jdGlvbiBFSShuLHQsZSxpKXtpZihmbCh0KSl7bGV0IHM9ey4uLm5bdF19LGE9ZnVuY3Rpb24obix0LGUpe2xldCByPW4uaGFzT3duUHJvcGVydHkodCk/ey4uLm5bdF19Ont9LG89ci5oYXNPd25Qcm9wZXJ0eShlKTtyZXR1cm4gcltlXT1vP3suLi5yW2VdfTp7cnVuVG9TZXJpZXM6e30scnVuVG9Mb2FkU3RhdGU6e319LHJ9KHMsZSxpKTtyZXR1cm4gc1tlXT1hLHN9bGV0IHI9ey4uLm5bdF19LG89ci5oYXNPd25Qcm9wZXJ0eShlKTtyZXR1cm4gcltlXT1vP3suLi5yW2VdfTp7cnVuVG9TZXJpZXM6e30scnVuVG9Mb2FkU3RhdGU6e319LHJ9ZnVuY3Rpb24gcGVlKG4pe3JldHVybiBKU09OLnN0cmluZ2lmeShuKX1mdW5jdGlvbiBUSShuLHQsZSl7bGV0IGk9ey4uLmV9O2ZvcihsZXQgciBvZiB0KWlbcl09bjtyZXR1cm4gaX1mdW5jdGlvbiB1dihuLHQsZSxpKXtpZihmbCh0KSl7bGV0IG89blt0XS50YWdSdW5TYW1wbGVkSW5mbztyZXR1cm4gby5oYXNPd25Qcm9wZXJ0eShlKT9PYmplY3Qua2V5cyhvW2VdKS5maWx0ZXIoYT0+aTxvW2VdW2FdLm1heFNhbXBsZXNQZXJTdGVwKTpbXX1sZXQgcj1uW3RdLnRhZ1RvUnVucztyZXR1cm4gci5oYXNPd25Qcm9wZXJ0eShlKT9yW2VdOltdfWZ1bmN0aW9uIFBQZShuLHQpe3JldHVybiBuLnBsdWdpbj09PXQucGx1Z2luJiZuLnRhZz09PXQudGFnJiZuLnNhbXBsZT09PXQuc2FtcGxlJiYobi5ydW5JZD09PXQucnVuSWR8fCFuLnJ1bklkJiYhdC5ydW5JZCl9ZnVuY3Rpb24gSzQobix0LGUsaSxyLG8scyl7bGV0IGE9bmV3IFNldChuKSxsPVtdO2ZvcihsZXQgdSBvZiBuKWZvcihsZXQgZCBvZiB0KWlmKFBQZShlW2RdLHUpKXtsLnB1c2goZCksYS5kZWxldGUodSk7YnJlYWt9aWYoIWwubGVuZ3RoKXJldHVybnt1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpuLGNhcmRNZXRhZGF0YU1hcDplLGNhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6c307bGV0IGM9e2NhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6cyxjYXJkTWV0YWRhdGFNYXA6ZX07Zm9yKGxldCB1IG9mIGwpYz1aNCh1LGMuY2FyZFRvUGlubmVkQ29weSxjLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxjLnBpbm5lZENhcmRUb09yaWdpbmFsLGMuY2FyZFN0ZXBJbmRleCxjLmNhcmRNZXRhZGF0YU1hcCk7cmV0dXJuey4uLmMsdW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHM6Wy4uLmFdfX1mdW5jdGlvbiBaNChuLHQsZSxpLHIsbyl7aWYodC5oYXMobikpcmV0dXJue2NhcmRUb1Bpbm5lZENvcHk6dCxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6ZSxwaW5uZWRDYXJkVG9PcmlnaW5hbDppLGNhcmRTdGVwSW5kZXg6cixjYXJkTWV0YWRhdGFNYXA6b307bGV0IHM9bmV3IE1hcCh0KSxhPW5ldyBNYXAoZSksbD1uZXcgTWFwKGkpLGM9ey4uLnJ9LHU9ey4uLm99LGQ9ZnVuY3Rpb24obil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHtiYXNlQ2FyZElkOm59KX0obik7cy5zZXQobixkKSxhLnNldChuLGQpLGwuc2V0KGQsbiksci5oYXNPd25Qcm9wZXJ0eShuKSYmKGNbZF09cltuXSk7bGV0IHA9b1tuXTtpZighcCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBwaW4gYSBjYXJkIHdpdGhvdXQgbWV0YWRhdGEiKTtyZXR1cm4gdVtkXT1wLHtjYXJkVG9QaW5uZWRDb3B5OnMsY2FyZFRvUGlubmVkQ29weUNhY2hlOmEscGlubmVkQ2FyZFRvT3JpZ2luYWw6bCxjYXJkU3RlcEluZGV4OmMsY2FyZE1ldGFkYXRhTWFwOnV9fWZ1bmN0aW9uIERJKG4pe3JldHVybiBuLnBpbm5lZENhcmRUb09yaWdpbmFsLnNpemUrbi51bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkcy5sZW5ndGg8MTB9ZnVuY3Rpb24gSjQobix0LGUsaSl7bGV0IHI9ey4uLm59O3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKG89PntpZighby5pbmNsdWRlcygnInBsdWdpbiI6ImltYWdlcyInKSlyZXR1cm47bGV0IHM9JDQobyx0LGUpLGE9bnVsbDtpZihudWxsPT09aS5lbmQpYT1mdW5jdGlvbihuLHQpe2xldCBlPXQuaW5kZXhPZihuKTtpZigtMSE9PWUpcmV0dXJue2luZGV4OmUsaXNDbG9zZXN0OiExfTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoLTE7aSsrKXtsZXQgcj10W2ldLG89dFtpKzFdLHM9LjEqKG8tcik7aWYobjxyKXJldHVybiBudWxsO2lmKCEobj5vKSl7aWYobi1yPD1zKXJldHVybntpbmRleDppLGlzQ2xvc2VzdDohMH07aWYoby1uPD1zKXJldHVybntpbmRleDppKzEsaXNDbG9zZXN0OiEwfX19cmV0dXJuIG51bGx9KGkuc3RhcnQuc3RlcCxzKTtlbHNle2xldCBjPXNbbltvXS5pbmRleF0sdT1mdW5jdGlvbihuLHQpe2lmKCFuKXJldHVybltdO2lmKG51bGw9PT1uLmVuZClyZXR1cm4tMSE9PXQuaW5kZXhPZihuLnN0YXJ0LnN0ZXApP1tuLnN0YXJ0LnN0ZXBdOltdO2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KWk+PW4uc3RhcnQuc3RlcCYmaTw9bi5lbmQuc3RlcCYmZS5wdXNoKGkpO3JldHVybiBlfShpLHMpO2E9ZnVuY3Rpb24obix0LGUpe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgaT1uWzBdLHI9bltuLmxlbmd0aC0xXTtyZXR1cm4gZT5yP3tpbmRleDp0LmluZGV4T2YociksaXNDbG9zZXN0OiExfTplPGk/e2luZGV4OnQuaW5kZXhPZihpKSxpc0Nsb3Nlc3Q6ITF9Om51bGx9KHUscyxjKX1udWxsIT09YSYmKHJbb109YSl9KSxyfWZ1bmN0aW9uICQ0KG4sdCxlKXtpZighdC5oYXNPd25Qcm9wZXJ0eShuKSlyZXR1cm5bXTtsZXR7cGx1Z2luOmksdGFnOnIsc2FtcGxlOm8scnVuSWQ6c309dFtuXTtpZihudWxsPT09cylyZXR1cm5bXTtsZXQgYT1ycChlLGkscixvKTtyZXR1cm4gbnVsbCE9PWEmJmEucnVuVG9TZXJpZXMuaGFzT3duUHJvcGVydHkocyk/YS5ydW5Ub1Nlcmllc1tzXS5tYXAobD0+bC5zdGVwKTpbXX12YXIgT289KCgpPT4oZnVuY3Rpb24obil7bi5ERUZBVUxUPSJkZWZhdWx0IixuLkFMUEhBQkVUSUNBTD0iYWxwaGFiZXRpY2FsIixuLkFTQ0VORElORz0iYXNjZW5kaW5nIixuLkRFU0NFTkRJTkc9ImRlc2NlbmRpbmciLG4uTkVBUkVTVD0ibmVhcmVzdCIsbi5ORUFSRVNUX1k9Im5lYXJlc3RfWSJ9KE9vfHwoT289e30pKSxPbykpKCksQUk9Im1ldHJpY3MiLElJPXtjYXJkTWluV2lkdGg6bnVsbCx0b29sdGlwU29ydDpPby5BTFBIQUJFVElDQUwsaWdub3JlT3V0bGllcnM6ITAseEF4aXNUeXBlOkppLlNURVAsc2NhbGFyU21vb3RoaW5nOi42LHNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1g6ITEsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaToxZTMsaW1hZ2VDb250cmFzdEluTWlsbGk6MWUzLGltYWdlU2hvd0FjdHVhbFNpemU6ITEsaGlzdG9ncmFtTW9kZTp6ci5PRkZTRVR9LHVyPU1yKEFJKSxVTT1KKHVyLG49Pm4udGFnTWV0YWRhdGFMb2FkU3RhdGUpLExQZT0oSih1cixuPT5uLnRhZ01ldGFkYXRhKSxKKHVyLG49Pm4uY2FyZExpc3QpKSxiaD1KKHVyLChuLHQpPT57aWYoIW4uY2FyZE1ldGFkYXRhTWFwLmhhc093blByb3BlcnR5KHQpKXJldHVybiBPZS5OT1RfTE9BREVEO2xldHtwbHVnaW46ZSx0YWc6aSxydW5JZDpyLHNhbXBsZTpvfT1uLmNhcmRNZXRhZGF0YU1hcFt0XSxzPXJwKG4udGltZVNlcmllc0RhdGEsZSxpLG8pO2lmKCFzKXJldHVybiBPZS5OT1RfTE9BREVEO2xldCBhPXMucnVuVG9Mb2FkU3RhdGU7aWYocilyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShyKT9hW3JdOk9lLk5PVF9MT0FERUQ7bGV0IGw9dXYobi50YWdNZXRhZGF0YSxlLGksbyk7aWYoIWwubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGxvYWQgYSBjYXJkIHdob3NlIHRhZyBoYXMgbm8gcnVucyIpO3JldHVybiBsLmV2ZXJ5KGM9PmFbY109PT1PZS5MT0FERUQpP09lLkxPQURFRDpsLnNvbWUoYz0+YVtjXT09PU9lLkxPQURJTkcpP09lLkxPQURJTkc6T2UuTk9UX0xPQURFRH0pLHhoPUoodXIsKG4sdCk9PntpZighbi5jYXJkTWV0YWRhdGFNYXAuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIG51bGw7bGV0e3BsdWdpbjplLHRhZzppLHNhbXBsZTpyfT1uLmNhcmRNZXRhZGF0YU1hcFt0XSxvPXJwKG4udGltZVNlcmllc0RhdGEsZSxpLHIpO3JldHVybiBvP28ucnVuVG9TZXJpZXM6bnVsbH0pLGVIPUoodXIsbj0+bi5jYXJkTWV0YWRhdGFNYXApLHRjPUooZUgsKG4sdCk9Pm4uaGFzT3duUHJvcGVydHkodCk/blt0XTpudWxsKSxCUGU9Sih1cixuPT5uLnZpc2libGVDYXJkTWFwKSxtZWU9SihCUGUsbj0+bmV3IFNldChuLnZhbHVlcygpKSksUEk9SihMUGUsZUgsKG4sdCk9Pm4uZmlsdGVyKGU9PnQuaGFzT3duUHJvcGVydHkoZSkpLm1hcChlPT4oe2NhcmRJZDplLC4uLnRbZV19KSkpLHRIPUoodXIsKG4sdCk9Pm4uY2FyZFN0ZXBJbmRleC5oYXNPd25Qcm9wZXJ0eSh0KT9uLmNhcmRTdGVwSW5kZXhbdF06bnVsbCksZ2VlPUoodXIsKG4sdCk9PiQ0KHQsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSkpLF9lZT1KKHVyLG49Pm4uY2FyZFRvUGlubmVkQ29weSksVlBlPUoodXIsbj0+bi5waW5uZWRDYXJkVG9PcmlnaW5hbCksek09SihfZWUsZUgsKG4sdCk9PlsuLi5uLnZhbHVlcygpXS5maWx0ZXIoZT0+dC5oYXNPd25Qcm9wZXJ0eShlKSkubWFwKGU9Pih7Y2FyZElkOmUsLi4udFtlXX0pKSksQ2g9SihfZWUsVlBlLChuLHQsZSk9Pm4uaGFzKGUpfHx0LmhhcyhlKSksdmVlPUoodXIsbj0+bi51bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkcykseWVlPUoodXIsbj0+REkobikpLGVkPUoodXIsbj0+KHsuLi5uLnNldHRpbmdzLC4uLm4uc2V0dGluZ092ZXJyaWRlc30pKSxiZWU9Sih1cixuPT5uLnNldHRpbmdPdmVycmlkZXMpLGR2PUooZWQsbj0+bi5jYXJkTWluV2lkdGgpLHB2PUooZWQsbj0+bi50b29sdGlwU29ydCksaHY9SihlZCxuPT5uLmlnbm9yZU91dGxpZXJzKSx0ZD1KKGVkLG49Pm4ueEF4aXNUeXBlKSxSST1KKGVkLG49Pm4uaGlzdG9ncmFtTW9kZSksb3A9SihlZCxuPT5uLnNjYWxhclNtb290aGluZyksT0k9SihlZCxuPT5uLnNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1gpLGtJPUooZWQsbj0+bi5pbWFnZUJyaWdodG5lc3NJbk1pbGxpKSxGST1KKGVkLG49Pm4uaW1hZ2VDb250cmFzdEluTWlsbGkpLE5JPUooZWQsbj0+bi5pbWFnZVNob3dBY3R1YWxTaXplKSxYYz1KKHVyLG49Pm4udGFnRmlsdGVyKSxMST1KKHVyLChuLHQpPT5Cb29sZWFuKG4udGFnR3JvdXBFeHBhbmRlZC5nZXQodCkpKSxZbT1KKHVyLG49Pm4ubGlua2VkVGltZUVuYWJsZWQpLGZ2PUoodXIsbj0+bi5zdGVwU2VsZWN0b3JFbmFibGVkKSxtdj1KKHVyLG49Pm4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkKSxuSD1KKHVyLG49PntsZXR7bWluOnQsbWF4OmV9PW4uc3RlcE1pbk1heDtyZXR1cm57bWluOnQ9PT0xLzA/MDp0LG1heDplPT09LTEvMD8xZTM6ZX19KSxCST1KKHVyLG49Pm4uc2luZ2xlU2VsZWN0aW9uSGVhZGVycyksVkk9Sih1cixuPT5uLnJhbmdlU2VsZWN0aW9uSGVhZGVycyksaUg9Sih1cixuSCwobix0KT0+bi5saW5rZWRUaW1lU2VsZWN0aW9uP24ubGlua2VkVGltZVNlbGVjdGlvbjp7c3RhcnQ6e3N0ZXA6dC5taW59LGVuZDpudWxsfSksWG09Sih1cixpSCwobix0KT0+bi5saW5rZWRUaW1lRW5hYmxlZD90Om51bGwpLG5kPUoodXIsbj0+bi5maWx0ZXJlZFBsdWdpblR5cGVzKSxIST1KKHVyLG49Pm4uaXNTZXR0aW5nc1BhbmVPcGVuKSxVST1KKHVyLG49Pm4uaXNTbGlkZW91dE1lbnVPcGVuKSxDZWU9TXIoIm5vdGlmaWNhdGlvbiIpLGlkPShKKENlZSxuPT5uLm5vdGlmaWNhdGlvbnMpLEooQ2VlLG49Pm4ubGFzdFJlYWRUaW1lc3RhbXBJbk1zPz8tMSksKCgpPT4oZnVuY3Rpb24obil7bltuLkVYUEVSSU1FTlRfTkFNRT0wXT0iRVhQRVJJTUVOVF9OQU1FIixuW24uSFBBUkFNPTFdPSJIUEFSQU0iLG5bbi5NRVRSSUM9Ml09Ik1FVFJJQyIsbltuLlJVTl9OQU1FPTNdPSJSVU5fTkFNRSJ9KGlkfHwoaWQ9e30pKSxpZCkpKCkpLHNyPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5SVU49MF09IlJVTiIsbltuLkVYUEVSSU1FTlQ9MV09IkVYUEVSSU1FTlQiLG5bbi5SRUdFWD0yXT0iUkVHRVgifShzcnx8KHNyPXt9KSksc3IpKSgpO2Z1bmN0aW9uIEdNKG4sdCxlKXtsZXQgaT17fSxyPVtdLG89e21hdGNoZXM6aSxub25NYXRjaGVzOnJ9O3N3aXRjaChuLmtleSl7Y2FzZSBzci5SVU46Zm9yKGxldCBhIG9mIHQpaVthLmlkXT1bYV07YnJlYWs7Y2FzZSBzci5FWFBFUklNRU5UOmZvcihsZXQgYSBvZiB0KXtsZXQgbD1lW2EuaWRdLGM9aVtsXXx8W107Yy5wdXNoKGEpLGlbbF09Y31icmVhaztjYXNlIHNyLlJFR0VYOmlmKCFuLnJlZ2V4U3RyaW5nKWJyZWFrO2xldCBzO3RyeXtzPW5ldyBSZWdFeHAobi5yZWdleFN0cmluZyl9Y2F0Y2h7YnJlYWt9Zm9yKGxldCBhIG9mIHQpe2xldCBsPWEubmFtZS5tYXRjaChzKTtpZihsKXtsZXQgdT1sLmxlbmd0aD4xP0pTT04uc3RyaW5naWZ5KGwuc2xpY2UoMSkpOiJwc2V1ZG9fZ3JvdXAiLGQ9aVt1XXx8W107ZC5wdXNoKGEpLGlbdV09ZH1lbHNlIHIucHVzaChhKX19cmV0dXJuIG99ZnVuY3Rpb24gakkobix0KXtyZXR1cm4gbj09PXNyLlJFR0VYP3trZXk6bixyZWdleFN0cmluZzp0Pz8iIn06e2tleTpufX12YXIgTWVlPU1yKCJydW5zIiksZ2w9SihNZWUsbj0+bi5kYXRhKSx3ZWU9SihnbCxuPT5uLnJ1bklkVG9FeHBJZCksR0k9SihnbCwobix0KT0+bi5ydW5JZFRvRXhwSWRbdC5ydW5JZF0/P251bGwpLFdJPUooZ2wsKG4sdCk9Pm4ucnVuTWV0YWRhdGFbdC5ydW5JZF0/P251bGwpLHJkPUooZ2wsKG4sdCk9PihuLnJ1bklkc1t0LmV4cGVyaW1lbnRJZF18fFtdKS5maWx0ZXIoaT0+Qm9vbGVhbihuLnJ1bk1ldGFkYXRhW2ldKSkubWFwKGk9Pm4ucnVuTWV0YWRhdGFbaV0pKSxTZWU9SihnbCwobix0KT0+bi5ydW5JZHNbdC5leHBlcmltZW50SWRdPz9bXSkscUk9SihnbCxuPT5uZXcgTWFwKE9iamVjdC5lbnRyaWVzKG4ucnVuTWV0YWRhdGEpKSksV009SihnbCwobix0KT0+bi5ydW5zTG9hZFN0YXRlW3QuZXhwZXJpbWVudElkXXx8e2xhc3RMb2FkZWRUaW1lSW5NczpudWxsLHN0YXRlOk9lLk5PVF9MT0FERUR9KSxySD1KKGdsLG49Pm51bGwhPT1uLnVzZXJTZXRHcm91cEJ5S2V5P2pJKG4udXNlclNldEdyb3VwQnlLZXksbi5jb2xvckdyb3VwUmVnZXhTdHJpbmcpOm51bGwpLEVlZT1KKHJILGdsLChuLHQpPT5uPz90LmluaXRpYWxHcm91cEJ5KSxRbT1KKGdsLG49Pm4ucmVnZXhGaWx0ZXIpLG9IPUooTWVlLG49Pm4udWkpLHNIPUoob0gsbj0+bi5wYWdpbmF0aW9uT3B0aW9uKSxhSD1KKG9ILG49Pm4uc29ydCksVGVlPUoob0gsbj0+bi5zZWxlY3Rpb25TdGF0ZSksRGVlPUooZ2wsbj0+bi5ydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeSksQWVlPUooZ2wsbj0+bi5kZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnkpLFlJPUooZ2wsbj0+bi5jb2xvckdyb3VwUmVnZXhTdHJpbmcpLFhJPWJlKCJbU2V0dGluZ3NdIFJlbG9hZCBFbmFibGUgVG9nZ2xlZCIpLFFJPWJlKCJbU2V0dGluZ3NdIFJlbG9hZCBQZXJpb2QgQ2hhbmdlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksS0k9YmUoIltTZXR0aW5nc10gUGFnZSBTaXplIENoYW5nZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE5hPXt9O0JFKE5hLHtnZXRDb2xvclBhbGV0dGU6KCk9PkhQZSxnZXRQYWdlU2l6ZTooKT0+S20sZ2V0UmVsb2FkRW5hYmxlZDooKT0+WU0sZ2V0UmVsb2FkUGVyaW9kSW5NczooKT0+WE0sZ2V0U2V0dGluZ3NMb2FkU3RhdGU6KCk9PmxIfSk7dmFyIFpJPSJzZXR0aW5ncyIsUmVlPXtzdGF0ZTpPZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCksc2V0dGluZ3M6e3JlbG9hZFBlcmlvZEluTXM6M2U0LHJlbG9hZEVuYWJsZWQ6ITEscGFnZVNpemU6MTIsY29sb3JQYWxldHRlOntpZDoiZGVmYXVsdCIsbmFtZToiRGVmYWx0Iixjb2xvcnM6W3tuYW1lOiJTbGF0ZSIsbGlnaHRIZXg6IiM0MjUwNjYiLGRhcmtIZXg6IiM4ZTk4YTMifSx7bmFtZToiQ3lhbiIsbGlnaHRIZXg6IiMxMmI1Y2IiLGRhcmtIZXg6IiMxMmI1Y2IifSx7bmFtZToiUGluayIsbGlnaHRIZXg6IiNlNTI1OTIiLGRhcmtIZXg6IiNlNTI1OTIifSx7bmFtZToiWWVsbG93IixsaWdodEhleDoiI2Y5YWIwMCIsZGFya0hleDoiI2Y5YWIwMCJ9LHtuYW1lOiJQdXJwbGUiLGxpZ2h0SGV4OiIjOTMzNGU2IixkYXJrSGV4OiIjOTMzNGU2In0se25hbWU6IkxpZ2h0IEdyZWVuIixsaWdodEhleDoiIzdjYjM0MiIsZGFya0hleDoiIzdjYjM0MiJ9LHtuYW1lOiJPcmFuZ2UiLGxpZ2h0SGV4OiIjZTg3MTBhIixkYXJrSGV4OiIjZTg3MTBhIn1dLGluYWN0aXZlOntuYW1lOiJHcmF5IixsaWdodEhleDoiI2UwZTBlMCIsZGFya0hleDoiIzNiM2IzYiJ9fX19LHFNPU1yKFpJKSxsSD1KKHFNLG49Pm4uc3RhdGUpLFlNPUoocU0sbj0+bi5zZXR0aW5ncy5yZWxvYWRFbmFibGVkKSxYTT1KKHFNLG49Pm4uc2V0dGluZ3MucmVsb2FkUGVyaW9kSW5NcyksS209SihxTSxuPT5uLnNldHRpbmdzLnBhZ2VTaXplKSxIUGU9SihxTSxuPT5uLnNldHRpbmdzLmNvbG9yUGFsZXR0ZSk7ZnVuY3Rpb24gSkkobix0LGUpe2lmKCF0KXJldHVybiEwO2xldCBpO3RyeXtpPW5ldyBSZWdFeHAodCwiaSIpfWNhdGNoe3JldHVybiExfWxldCByPVtuLnJ1bk5hbWVdO3JldHVybiBlJiZyLnB1c2gobi5leHBlcmltZW50QWxpYXMuYWxpYXNUZXh0LGAke24uZXhwZXJpbWVudEFsaWFzLmFsaWFzVGV4dH0vJHtuLnJ1bk5hbWV9YCksci5zb21lKG89PmkudGVzdChvKSl9dmFyIFVQZT1KKFdvLFRlZSx3ZWUsKG4sdCxlKT0+e2lmKCFuKXJldHVybiBuZXcgTWFwO2xldCBpPW5ldyBNYXA7Zm9yKGxldFtyLG9db2YgdC5lbnRyaWVzKCkpe2xldCBzPWVbcl07cyYmbi5pbmRleE9mKHMpPj0wJiZpLnNldChyLG8pfXJldHVybiBpfSksb289SihXbyxVUGUsUW0sbj0+e2xldCB0PVdvKG4pPz9bXSxlPVl1KG4pLGk9bmV3IE1hcDtmb3IobGV0IHIgb2YgdCl7bGV0IG89cmQobix7ZXhwZXJpbWVudElkOnJ9KTtmb3IobGV0IHMgb2YgbylpLnNldChzLmlkLHtydW5OYW1lOnMubmFtZSxleHBlcmltZW50QWxpYXM6ZVtyXX0pfXJldHVybiBpfSxxdSwobix0LGUsaSxyKT0+e2lmKCFuKXJldHVybiBudWxsO2xldCBvPXI9PT1oaS5DT01QQVJFX0VYUEVSSU1FTlQscz1uZXcgTWFwO2ZvcihsZXRbYSxsXW9mIHQuZW50cmllcygpKXtsZXQgYz1pLmdldChhKTtzLnNldChhLEpJKGMsZSxvKSYmbCl9cmV0dXJuIHN9KSxuYz1KKE5hLmdldENvbG9yUGFsZXR0ZSxBZWUsRGVlLFF1LChuLHQsZSxpKT0+e2xldCByPXt9O3JldHVybiB0LmZvckVhY2goKG8scyk9PntsZXQgYT1pP24uaW5hY3RpdmUuZGFya0hleDpuLmluYWN0aXZlLmxpZ2h0SGV4O2lmKGUuaGFzKHMpKWE9ZS5nZXQocyk7ZWxzZSBpZihvPj0wKXtsZXQgbD1uLmNvbG9yc1tvJW4uY29sb3JzLmxlbmd0aF07YT1pP2wuZGFya0hleDpsLmxpZ2h0SGV4fXJbc109YX0pLHJ9KSxPZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLnJ1bnNEYXRhU291cmNlPXIsdGhpcy5sb2FkUnVuc09uUnVuVGFibGVTaG93biQ9Y3IoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShpaShkSSkseG4oKHtleHBlcmltZW50SWRzOm99KT0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUobyxhPT5hPT09T2UuRkFJTEVEfHxhPT09T2UuTk9UX0xPQURFRCkucGlwZShZZShhPT4hIWEubGVuZ3RoKSx4bihhPT50aGlzLmZldGNoQWxsUnVuc0xpc3QobyxhKSkpKSkse2Rpc3BhdGNoOiExfSksdGhpcy5leHBlcmltZW50c1dpdGhTdGFsZVJ1bnNPblJvdXRlQ2hhbmdlJD10aGlzLmFjdGlvbnMkLnBpcGUoaWkoSmwpLFd0KHRoaXMuc3RvcmUuc2VsZWN0KFJhKSkseWkoKFssb10sWyxzXSk9PlBzKG8scykpLFd0KHRoaXMuc3RvcmUuc2VsZWN0KFdvKSksWWUoKFssb10pPT4hIW8pLEwoKFssb10pPT5vKSx4bihvPT50aGlzLmdldEV4cGVyaW1lbnRzV2l0aExvYWRTdGF0ZShvLHM9PnM9PT1PZS5GQUlMRUR8fHM9PT1PZS5OT1RfTE9BREVEKS5waXBlKEwocz0+KHtleHBlcmltZW50SWRzOm8sZXhwZXJpbWVudElkc1RvQmVGZXRjaGVkOnN9KSkpKSksdGhpcy5leHBlcmltZW50c1dpdGhTdGFsZVJ1bnNPblJlbG9hZCQ9dGhpcy5hY3Rpb25zJC5waXBlKGlpKGFhLEZhKSxXdCh0aGlzLnN0b3JlLnNlbGVjdChXbykpLFllKChbLG9dKT0+ISFvKSxMKChbLG9dKT0+bykseG4obz0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUobyxzPT5zIT09T2UuTE9BRElORykucGlwZShMKHM9Pih7ZXhwZXJpbWVudElkczpvLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDpzfSkpKSkpLHRoaXMubG9hZFJ1bnNPbk5hdmlnYXRpb25PclJlbG9hZCQ9Y3IoKCk9Pkp0KHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25Sb3V0ZUNoYW5nZSQsdGhpcy5leHBlcmltZW50c1dpdGhTdGFsZVJ1bnNPblJlbG9hZCQpLnBpcGUoeG4oKHtleHBlcmltZW50SWRzOm8sZXhwZXJpbWVudElkc1RvQmVGZXRjaGVkOnN9KT0+dGhpcy5mZXRjaEFsbFJ1bnNMaXN0KG8scykpKSx7ZGlzcGF0Y2g6ITF9KX1nZXRSdW5zTGlzdExvYWRTdGF0ZShlKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoV00se2V4cGVyaW1lbnRJZDplfSkucGlwZShRdCgxKSl9Z2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKGUsaSl7cmV0dXJuIGxyKGUubWFwKHI9PnRoaXMuZ2V0UnVuc0xpc3RMb2FkU3RhdGUocikpKS5waXBlKEwocj0+ZS5maWx0ZXIoKG8scyk9PmkocltzXS5zdGF0ZSkpKSl9ZmV0Y2hBbGxSdW5zTGlzdChlLGkpe3JldHVybiBYdCh7ZXhwZXJpbWVudElkczplLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDppfSkucGlwZShrdCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2gockkoe2V4cGVyaW1lbnRJZHM6ZSxyZXF1ZXN0ZWRFeHBlcmltZW50SWRzOml9KSl9KSx4bigoKT0+e2xldCByPW5ldyBTZXQoaSk7cmV0dXJuIGxyKGUubWFwKHM9PnIuaGFzKHMpP3RoaXMuZmV0Y2hSdW5zRm9yRXhwZXJpbWVudChzKTp0aGlzLm1heWJlV2FpdEZvclJ1bnNBbmRHZXRSdW5zKHMpKSl9KSxMKHI9PntsZXQgbz17fSxzPVtdO2ZvcihsZXQgYSBvZiByKXMucHVzaCguLi5hLnJ1bnMpLGEuZnJvbVJlbW90ZSYmKG9bYS5leHBlcmltZW50SWRdPXtydW5zOmEucnVucyxtZXRhZGF0YTphLm1ldGFkYXRhfSk7cmV0dXJue25ld1J1bnNBbmRNZXRhZGF0YTpvLHJ1bnNGb3JBbGxFeHBlcmltZW50czpzfX0pLGt0KCh7bmV3UnVuc0FuZE1ldGFkYXRhOnIscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm99KT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2godmgoe2V4cGVyaW1lbnRJZHM6ZSxuZXdSdW5zQW5kTWV0YWRhdGE6cixydW5zRm9yQWxsRXhwZXJpbWVudHM6b30pKX0pLGZvKHI9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKHN2KHtleHBlcmltZW50SWRzOmUscmVxdWVzdGVkRXhwZXJpbWVudElkczppfSkpLFh0KG51bGwpKSksTCgoKT0+bnVsbCkpfW1heWJlV2FpdEZvclJ1bnNBbmRHZXRSdW5zKGUpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChXTSx7ZXhwZXJpbWVudElkOmV9KS5waXBlKFllKGk9Pmkuc3RhdGUhPT1PZS5MT0FESU5HKSxRdCgxKSx4bihpPT5pLnN0YXRlPT09T2UuRkFJTEVEP3djKG5ldyBFcnJvcigiUGVuZGluZyByZXF1ZXN0IGZhaWxlZCIpKTpYdChpKSksV3QodGhpcy5zdG9yZS5zZWxlY3QocmQse2V4cGVyaW1lbnRJZDplfSkpLEwoKFssaV0pPT4oe2Zyb21SZW1vdGU6ITEsZXhwZXJpbWVudElkOmUscnVuczppfSkpKX1mZXRjaFJ1bnNGb3JFeHBlcmltZW50KGUpe3JldHVybiBscihbdGhpcy5ydW5zRGF0YVNvdXJjZS5mZXRjaFJ1bnMoZSksdGhpcy5ydW5zRGF0YVNvdXJjZS5mZXRjaEhwYXJhbXNNZXRhZGF0YShlKV0pLnBpcGUoTCgoW2kscl0pPT4oe2Zyb21SZW1vdGU6ITAsZXhwZXJpbWVudElkOmUscnVuczppLG1ldGFkYXRhOnJ9KSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKFBvKSxqKENlKSxqKHBJKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksaWM9KCgpPT4oZnVuY3Rpb24obil7bi5BU0M9ImFzYyIsbi5ERVNDPSJkZXNjIixuLlVOU0VUPSIifShpY3x8KGljPXt9KSksaWMpKSgpLHtpbml0aWFsU3RhdGU6elBlLHJlZHVjZXJzOmpQZX09em0oe3J1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5Om5ldyBNYXAsZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5Om5ldyBNYXAsZ3JvdXBLZXlUb0NvbG9ySWQ6bmV3IE1hcCxpbml0aWFsR3JvdXBCeTp7a2V5OnNyLlJVTn0sdXNlclNldEdyb3VwQnlLZXk6bnVsbCxjb2xvckdyb3VwUmVnZXhTdHJpbmc6IiIscmVnZXhGaWx0ZXI6IiJ9LHtydW5JZHM6e30scnVuSWRUb0V4cElkOnt9LHJ1bk1ldGFkYXRhOnt9LHJ1bnNMb2FkU3RhdGU6e319LChuLHQsZSk9PlBzKHQsZSk/bjp7Li4ubixpbml0aWFsR3JvdXBCeTp7a2V5OmUucm91dGVLaW5kPT09aGkuQ09NUEFSRV9FWFBFUklNRU5UP3NyLkVYUEVSSU1FTlQ6c3IuUlVOfX0pLEdQZT12cih6UGUsU2UoS18sKG4se3JvdXRlS2luZDp0LHBhcnRpYWxTdGF0ZTplfSk9PntpZih0IT09aGkuQ09NUEFSRV9FWFBFUklNRU5UJiZ0IT09aGkuRVhQRVJJTUVOVClyZXR1cm4gbjtsZXQgcj1lLnJ1bnMuZ3JvdXBCeSxvPWUucnVucy5yZWdleEZpbHRlcj8/IiI7aWYoIXImJiFvKXJldHVybiBuO2xldHtjb2xvckdyb3VwUmVnZXhTdHJpbmc6cyx1c2VyU2V0R3JvdXBCeUtleTphfT1uO3JldHVybiByJiYocz1yLmtleT09PXNyLlJFR0VYP3IucmVnZXhTdHJpbmc6bi5jb2xvckdyb3VwUmVnZXhTdHJpbmcsYT1yLmtleT8/bnVsbCksey4uLm4sY29sb3JHcm91cFJlZ2V4U3RyaW5nOnMscmVnZXhGaWx0ZXI6byx1c2VyU2V0R3JvdXBCeUtleTphfX0pLFNlKHJJLChuLHQpPT57bGV0IGU9ey4uLm4ucnVuc0xvYWRTdGF0ZX07Zm9yKGxldCBpIG9mIHQucmVxdWVzdGVkRXhwZXJpbWVudElkcyllW2ldPWVbaV0/ey4uLmVbaV0sc3RhdGU6T2UuTE9BRElOR306e2xhc3RMb2FkZWRUaW1lSW5NczpudWxsLHN0YXRlOk9lLkxPQURJTkd9O3JldHVybnsuLi5uLHJ1bnNMb2FkU3RhdGU6ZX19KSxTZSh2aCwobix0KT0+e2xldCBlPXsuLi5uLnJ1bklkc30saT17Li4ubi5ydW5NZXRhZGF0YX0scj17Li4ubi5ydW5JZFRvRXhwSWR9LG89ey4uLm4ucnVuc0xvYWRTdGF0ZX07Zm9yKGxldCBzIG9mIE9iamVjdC5rZXlzKHQubmV3UnVuc0FuZE1ldGFkYXRhKSl7bGV0e3J1bnM6YSxtZXRhZGF0YTpsfT10Lm5ld1J1bnNBbmRNZXRhZGF0YVtzXTtlW3NdPWEubWFwKCh7aWQ6Y30pPT5jKSxvW3NdPXsuLi5vW3NdLGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpLHN0YXRlOk9lLkxPQURFRH07Zm9yKGxldCBjIG9mIGEpe2xldCB1PWwucnVuVG9IcGFyYW1zQW5kTWV0cmljc1tjLmlkXTtpW2MuaWRdPXsuLi5jLGhwYXJhbXM6dT91LmhwYXJhbXM6bnVsbCxtZXRyaWNzOnU/dS5tZXRyaWNzOm51bGx9LHJbYy5pZF09c319cmV0dXJuey4uLm4scnVuSWRzOmUscnVuSWRUb0V4cElkOnIscnVuTWV0YWRhdGE6aSxydW5zTG9hZFN0YXRlOm99fSksU2Uoc3YsKG4sdCk9PntsZXQgZT17Li4ubi5ydW5zTG9hZFN0YXRlfTtmb3IobGV0IGkgb2YgdC5yZXF1ZXN0ZWRFeHBlcmltZW50SWRzKWVbaV09ZVtpXT97Li4uZVtpXSxzdGF0ZTpPZS5GQUlMRUR9OntsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTpPZS5GQUlMRUR9O3JldHVybnsuLi5uLHJ1bnNMb2FkU3RhdGU6ZX19KSxTZSh2aCwobix7cnVuc0ZvckFsbEV4cGVyaW1lbnRzOnR9KT0+e2xldCBlPW5ldyBNYXAobi5ncm91cEtleVRvQ29sb3JJZCksaT1uZXcgTWFwKG4uZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5KSxyPW4uaW5pdGlhbEdyb3VwQnk7bnVsbCE9PW4udXNlclNldEdyb3VwQnlLZXkmJihyPWpJKG4udXNlclNldEdyb3VwQnlLZXksbi5jb2xvckdyb3VwUmVnZXhTdHJpbmcpKTtsZXQgbz1HTShyLHQsbi5ydW5JZFRvRXhwSWQpO09iamVjdC5lbnRyaWVzKG8ubWF0Y2hlcykuZm9yRWFjaCgoW3MsYV0pPT57bGV0IGw9ZS5nZXQocyk/P2Uuc2l6ZTtlLnNldChzLGwpO2ZvcihsZXQgYyBvZiBhKWkuc2V0KGMuaWQsbCl9KTtmb3IobGV0IHMgb2Ygby5ub25NYXRjaGVzKWkuc2V0KHMuaWQsLTEpO3JldHVybnsuLi5uLGRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeTppLGdyb3VwS2V5VG9Db2xvcklkOmV9fSksU2UoYXYsKG4se2V4cGVyaW1lbnRJZHM6dCxncm91cEJ5OmV9KT0+e2xldCBpPW5ldyBNYXAscj1uZXcgTWFwKG4uZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5KSxzPUdNKGUsdC5mbGF0TWFwKGw9Pm4ucnVuSWRzW2xdKS5tYXAobD0+bi5ydW5NZXRhZGF0YVtsXSksbi5ydW5JZFRvRXhwSWQpO09iamVjdC5lbnRyaWVzKHMubWF0Y2hlcykuZm9yRWFjaCgoW2wsY10pPT57bGV0IHU9aS5nZXQobCk/P2kuc2l6ZTtpLnNldChsLHUpO2ZvcihsZXQgZCBvZiBjKXIuc2V0KGQuaWQsdSl9KTtmb3IobGV0IGwgb2Ygcy5ub25NYXRjaGVzKXIuc2V0KGwuaWQsLTEpO2xldCBhPWUua2V5PT09c3IuUkVHRVg/ZS5yZWdleFN0cmluZzpuLmNvbG9yR3JvdXBSZWdleFN0cmluZztyZXR1cm57Li4ubixjb2xvckdyb3VwUmVnZXhTdHJpbmc6YSx1c2VyU2V0R3JvdXBCeUtleTplLmtleSxkZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnk6cixncm91cEtleVRvQ29sb3JJZDppLHJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5Om5ldyBNYXB9fSksU2UodUksKG4se3J1bklkOnQsbmV3Q29sb3I6ZX0pPT57bGV0IGk9bmV3IE1hcChuLnJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5KTtyZXR1cm4gaS5zZXQodCxlKSx7Li4ubixydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTppfX0pLFNlKE5NLChuLHQpPT4oey4uLm4scmVnZXhGaWx0ZXI6dC5yZWdleFN0cmluZ30pKSksV1BlPWptKEdQZSxqUGUpLHFQZT17a2V5Om51bGwsZGlyZWN0aW9uOmljLlVOU0VUfSx7aW5pdGlhbFN0YXRlOllQZSxyZWR1Y2VyczpYUGV9PXptKHtwYWdpbmF0aW9uT3B0aW9uOntwYWdlSW5kZXg6MCxwYWdlU2l6ZToxMH0sc29ydDpxUGUsc2VsZWN0aW9uU3RhdGU6bmV3IE1hcH0se30pLFFQZT12cihZUGUsU2UobEksKG4se3BhZ2VTaXplOnQscGFnZUluZGV4OmV9KT0+KHsuLi5uLHBhZ2luYXRpb25PcHRpb246e3BhZ2VTaXplOnQscGFnZUluZGV4OmV9fSkpLFNlKE5NLChuLHQpPT4oey4uLm4scGFnaW5hdGlvbk9wdGlvbjp7Li4ubi5wYWdpbmF0aW9uT3B0aW9uLHBhZ2VJbmRleDowfX0pKSxTZShjSSwobix0KT0+KHsuLi5uLHNvcnQ6e2tleTp0LmtleSxkaXJlY3Rpb246dC5kaXJlY3Rpb259fSkpLFNlKHZoLChuLHQpPT57bGV0IGU9bmV3IE1hcChuLnNlbGVjdGlvblN0YXRlKSxpPXQucnVuc0ZvckFsbEV4cGVyaW1lbnRzLmxlbmd0aDw9NTAwO2ZvcihsZXQgciBvZiB0LnJ1bnNGb3JBbGxFeHBlcmltZW50cyllLmhhcyhyLmlkKXx8ZS5zZXQoci5pZCxpKTtyZXR1cm57Li4ubixzZWxlY3Rpb25TdGF0ZTplfX0pLFNlKG9JLChuLHtydW5JZDp0fSk9PntsZXQgZT1uZXcgTWFwKG4uc2VsZWN0aW9uU3RhdGUpO3JldHVybiBlLnNldCh0LCFCb29sZWFuKGUuZ2V0KHQpKSksey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSxTZShzSSwobix7cnVuSWQ6dH0pPT57bGV0IGU9bmV3IE1hcDtmb3IobGV0IGkgb2Ygbi5zZWxlY3Rpb25TdGF0ZS5rZXlzKCkpZS5zZXQoaSx0PT09aSk7cmV0dXJuey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSxTZShhSSwobix7cnVuSWRzOnR9KT0+e2xldCBlPW5ldyBNYXAobi5zZWxlY3Rpb25TdGF0ZSksaT0hdC5ldmVyeShyPT5Cb29sZWFuKGUuZ2V0KHIpKSk7Zm9yKGxldCByIG9mIHQpZS5zZXQocixpKTtyZXR1cm57Li4ubixzZWxlY3Rpb25TdGF0ZTplfX0pKSxLUGU9am0oUVBlLFhQZSk7ZnVuY3Rpb24ga2VlKG4sdCl7cmV0dXJuIEZtKHtkYXRhOldQZSx1aTpLUGV9KShuLHQpfWZ1bmN0aW9uIFpQZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjpzdixhbGVydEZyb21BY3Rpb246KCk9Pih7bG9jYWxpemVkTWVzc2FnZToiRmFpbGVkIHRvIGZldGNoIHJ1bnMifSl9XX12YXIgJEk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W3dyLmZvckZlYXR1cmUoInJ1bnMiLGtlZSkscm8uZm9yRmVhdHVyZShbT2VlXSksVyQsSnUucmVnaXN0ZXJBbGVydEFjdGlvbnMoWlBlKSxtSV19KSxufSkoKSxzcD0oKCk9PihmdW5jdGlvbihuKXtuLlJVTlNfQ0hBTkdFRD0iZXhwZXJpbWVudGFsLlJ1bnNDaGFuZ2VkIixuLkdFVF9SVU5TPSJleHBlcmltZW50YWwuR2V0UnVucyIsbi5HRVRfVVJMX0RBVEE9ImV4cGVyaW1lbnRhbC5HZXRVUkxQbHVnaW5EYXRhIixuLkRBVEFfUkVMT0FERUQ9ImV4cGVyaW1lbnRhbC5EYXRhUmVsb2FkZWQifShzcHx8KHNwPXt9KSksc3ApKSgpLE5lZT1uZXcgV2Vha01hcCxndj1uZXcgU2V0LGNIPW5ldyBNYXAsdDI9bmV3IE1hcDtmdW5jdGlvbiBMZWUobix0KXtyZXR1cm4gZT0+e2xldCBpPXQyLmdldCh0KSxyPU5lZS5nZXQoaSl8fG51bGw7cmV0dXJuIG4ocixlKX19d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG49PntpZigiZXhwZXJpbWVudGFsLmJvb3RzdHJhcCIhPT1uLmRhdGEpcmV0dXJuO2xldCB0PW4ucG9ydHNbMF07aWYoIXQpcmV0dXJuO2xldCBlPW4uc291cmNlP24uc291cmNlLmZyYW1lRWxlbWVudDpudWxsOyFlfHxmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBvcnQ9dCx0aGlzLmlkPTAsdGhpcy5yZXNwb25zZVdhaXRzPW5ldyBNYXAsdGhpcy5saXN0ZW5lcnM9bmV3IE1hcCx0aGlzLnBvcnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZT0+dGhpcy5vbk1lc3NhZ2UoZSkpfWxpc3Rlbih0LGUpe3RoaXMubGlzdGVuZXJzLnNldCh0LGUpfXVubGlzdGVuKHQpe3RoaXMubGlzdGVuZXJzLmRlbGV0ZSh0KX1hc3luYyBvbk1lc3NhZ2UodCl7bGV0IGU9SlNPTi5wYXJzZSh0LmRhdGEpLGk9ZS50eXBlLHI9ZS5pZCxvPWUucGF5bG9hZCxzPWUuZXJyb3I7aWYoZS5pc1JlcGx5KXtpZighdGhpcy5yZXNwb25zZVdhaXRzLmhhcyhyKSlyZXR1cm47bGV0e3Jlc29sdmU6ZCxyZWplY3Q6cH09dGhpcy5yZXNwb25zZVdhaXRzLmdldChyKTtyZXR1cm4gdGhpcy5yZXNwb25zZVdhaXRzLmRlbGV0ZShyKSx2b2lkKHM/cChuZXcgRXJyb3IocykpOmQobykpfWxldCBsPW51bGwsYz1udWxsO2lmKHRoaXMubGlzdGVuZXJzLmhhcyhpKSl7bGV0IGQ9dGhpcy5saXN0ZW5lcnMuZ2V0KGkpO3RyeXtsPWF3YWl0IGQobyl9Y2F0Y2gocCl7Yz1wfX10aGlzLnBvc3RNZXNzYWdlKHt0eXBlOmksaWQ6cixwYXlsb2FkOmwsZXJyb3I6Yyxpc1JlcGx5OiEwfSl9cG9zdE1lc3NhZ2UodCl7dGhpcy5wb3J0LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHQpKX1zZW5kTWVzc2FnZSh0LGUpe2xldCBpPXRoaXMuaWQrKztyZXR1cm4gdGhpcy5wb3N0TWVzc2FnZSh7dHlwZTp0LGlkOmkscGF5bG9hZDplLGVycm9yOm51bGwsaXNSZXBseTohMX0pLG5ldyBQcm9taXNlKChvLHMpPT57dGhpcy5yZXNwb25zZVdhaXRzLnNldChpLHtyZXNvbHZlOm8scmVqZWN0OnN9KX0pfX0obik7Z3YuYWRkKGUpLHQyLnNldChlLHQpLG4uc3RhcnQoKTtmb3IobGV0W2kscl1vZiBjSCl7bGV0IG89TGVlKHIsZSk7ZS5saXN0ZW4oaSxvKX19KHQsZSl9KTt2YXIgZEgsX3Y9KCgpPT57Y2xhc3Mgbnticm9hZGNhc3QoZSxpKXtyZXR1cm4gZnVuY3Rpb24obix0KXtmb3IobGV0IGkgb2YgZ3YpdDIuZ2V0KGkpLmlzQ29ubmVjdGVkfHwoZ3YuZGVsZXRlKGkpLHQyLmRlbGV0ZShpKSk7bGV0IGU9Wy4uLmd2XS5tYXAoaT0+aS5zZW5kTWVzc2FnZShuLHQpKTtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9KGUsaSl9bGlzdGVuKGUsaSl7IWZ1bmN0aW9uKG4sdCl7Y0guc2V0KG4sdCk7Zm9yKGxldCBlIG9mIGd2KXtsZXQgaT1MZWUodCxlKTtlLmxpc3RlbihuLGkpfX0oZSxpKX11bmxpc3RlbihlKXshZnVuY3Rpb24obil7Y0guZGVsZXRlKG4pO2ZvcihsZXQgdCBvZiBndil0LnVubGlzdGVuKG4pfShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksbjI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaXBjPWUsdGhpcy5zdG9yZT1pfWluaXQoKXtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1zdG9yYWdlIik7dGhpcy5pcGMubGlzdGVuKHNwLkdFVF9VUkxfREFUQSxpPT57aWYoIWkpcmV0dXJuO2xldCByPWBwLiR7aS5wbHVnaW5OYW1lfS5gLG89e30scz1lLnRmX3N0b3JhZ2UuZ2V0VXJsSGFzaERpY3QoKTtmb3IobGV0IGEgaW4gcylhLnN0YXJ0c1dpdGgocikmJihvW2Euc3Vic3RyaW5nKHIubGVuZ3RoKV09c1thXSk7cmV0dXJuIG99KSx0aGlzLnN0b3JlLnNlbGVjdChpdikucGlwZShZZShpPT5udWxsIT09aSkseWkoKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5pcGMuYnJvYWRjYXN0KHNwLkRBVEFfUkVMT0FERUQsdm9pZCAwKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKF92KSxqKENlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksaTI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaXBjPWUsdGhpcy5zdG9yZT1pfWluaXQoKXtsZXQgZT10aGlzLnN0b3JlLnNlbGVjdChXbykucGlwZSh4bihpPT5pP0x0KGkubWFwKG89PnRoaXMuc3RvcmUuc2VsZWN0KHJkLHtleHBlcmltZW50SWQ6b30pKSkucGlwZShMKG89Pm8uZmxhdCgpKSx5aSgobyxzKT0+by5sZW5ndGg9PT1zLmxlbmd0aCYmby5ldmVyeSgoYSxsKT0+c1tsXS5pZD09PWEuaWQpKSxMKG89Pm8ubWFwKCh7bmFtZTpzfSk9PnMpKSk6WHQoW10pKSk7ZS5zdWJzY3JpYmUoaT0+e3RoaXMuaXBjLmJyb2FkY2FzdChzcC5SVU5TX0NIQU5HRUQsaSl9KSx0aGlzLmlwYy5saXN0ZW4oc3AuR0VUX1JVTlMsKCk9PmUucGlwZShRdCgxKSkudG9Qcm9taXNlKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKF92KSxqKENlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCkscjI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe2kuaW5pdCgpLGUuaW5pdCgpfXJlZ2lzdGVyUGx1Z2luSWZyYW1lKGUsaSl7IWZ1bmN0aW9uKG4sdCl7TmVlLnNldChuLHtwbHVnaW5OYW1lOnR9KX0oZSxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihpMiksaihuMikpfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W192LG4yLGkyXSxpbXBvcnRzOltKXyxlYywkSV19KSxufSkoKSx2dj1iZSgiW0FsZXJ0XSBBbGVydCBSZXBvcnRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEhlZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuYWxlcnRBY3Rpb25Nb2R1bGU9cix0aGlzLnJlcG9ydFJlZ2lzdGVyZWRBY3Rpb25BbGVydHMkPWNyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoa3Qobz0+e2xldCBzPXRoaXMuYWxlcnRBY3Rpb25Nb2R1bGUuZ2V0QWxlcnRGcm9tQWN0aW9uKG8pO3MmJnRoaXMuc3RvcmUuZGlzcGF0Y2godnYocykpfSkpLHtkaXNwYXRjaDohMX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKFBvKSxqKENlKSxqKEp1KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksYVJlPXZyKHtsYXRlc3RBbGVydDpudWxsfSxTZSh2diwobix7bG9jYWxpemVkTWVzc2FnZTp0LGZvbGxvd3VwQWN0aW9uOmV9KT0+e2xldCBpPXtsb2NhbGl6ZWRNZXNzYWdlOnQsY3JlYXRlZDpEYXRlLm5vdygpfTtyZXR1cm4gZSYmKGkuZm9sbG93dXBBY3Rpb249ZSksey4uLm4sbGF0ZXN0QWxlcnQ6aX19KSk7ZnVuY3Rpb24gVWVlKG4sdCl7cmV0dXJuIGFSZShuLHQpfXRyeXtkSD10eXBlb2YgSW50bDwidSImJkludGwudjhCcmVha0l0ZXJhdG9yfWNhdGNoe2RIPSExfXZhciB5dixRTSxvMixabSx1SCxvaT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3BsYXRmb3JtSWQ9ZSx0aGlzLmlzQnJvd3Nlcj10aGlzLl9wbGF0Zm9ybUlkP1hEKHRoaXMuX3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQsdGhpcy5FREdFPXRoaXMuaXNCcm93c2VyJiYvKGVkZ2UpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLlRSSURFTlQ9dGhpcy5pc0Jyb3dzZXImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5CTElOSz10aGlzLmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIWRIKSYmdHlwZW9mIENTUzwidSImJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmISgiTVNTdHJlYW0iaW4gd2luZG93KSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEdkKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksemVlPVsiY29sb3IiLCJidXR0b24iLCJjaGVja2JveCIsImRhdGUiLCJkYXRldGltZS1sb2NhbCIsImVtYWlsIiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwibW9udGgiLCJudW1iZXIiLCJwYXNzd29yZCIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInNlYXJjaCIsInN1Ym1pdCIsInRlbCIsInRleHQiLCJ0aW1lIiwidXJsIiwid2VlayJdO2Z1bmN0aW9uIHBIKCl7aWYoeXYpcmV0dXJuIHl2O2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudClyZXR1cm4geXY9bmV3IFNldCh6ZWUpO2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIHl2PW5ldyBTZXQoemVlLmZpbHRlcih0PT4obi5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4udHlwZT09PXQpKSl9ZnVuY3Rpb24gbGEobil7cmV0dXJuIGZ1bmN0aW9uKCl7aWYobnVsbD09UU0mJnR5cGVvZiB3aW5kb3c8InUiKXRyeXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6KCk9PlFNPSEwfSkpfWZpbmFsbHl7UU09UU18fCExfXJldHVybiBRTX0oKT9uOiEhbi5jYXB0dXJlfWZ1bmN0aW9uIHMyKCl7aWYobnVsbD09Wm0pe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudHx8ImZ1bmN0aW9uIiE9dHlwZW9mIEVsZW1lbnR8fCFFbGVtZW50KXJldHVybiBabT0hMTtpZigic2Nyb2xsQmVoYXZpb3IiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKVptPSEwO2Vsc2V7bGV0IG49RWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsVG87Wm09ISFuJiYhL1x7XHMqXFtuYXRpdmUgY29kZVxdXHMqXH0vLnRlc3Qobi50b1N0cmluZygpKX19cmV0dXJuIFptfWZ1bmN0aW9uIGJ2KCl7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50KXJldHVybiAwO2lmKG51bGw9PW8yKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0PW4uc3R5bGU7bi5kaXI9InJ0bCIsdC53aWR0aD0iMXB4Iix0Lm92ZXJmbG93PSJhdXRvIix0LnZpc2liaWxpdHk9ImhpZGRlbiIsdC5wb2ludGVyRXZlbnRzPSJub25lIix0LnBvc2l0aW9uPSJhYnNvbHV0ZSI7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksaT1lLnN0eWxlO2kud2lkdGg9IjJweCIsaS5oZWlnaHQ9IjFweCIsbi5hcHBlbmRDaGlsZChlKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pLG8yPTAsMD09PW4uc2Nyb2xsTGVmdCYmKG4uc2Nyb2xsTGVmdD0xLG8yPTA9PT1uLnNjcm9sbExlZnQ/MToyKSxuLnJlbW92ZSgpfXJldHVybiBvMn1mdW5jdGlvbiBhMihuKXtpZihmdW5jdGlvbigpe2lmKG51bGw9PXVIKXtsZXQgbj10eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmhlYWQ6bnVsbDt1SD0hKCFufHwhbi5jcmVhdGVTaGFkb3dSb290JiYhbi5hdHRhY2hTaGFkb3cpfXJldHVybiB1SH0oKSl7bGV0IHQ9bi5nZXRSb290Tm9kZT9uLmdldFJvb3ROb2RlKCk6bnVsbDtpZih0eXBlb2YgU2hhZG93Um9vdDwidSImJlNoYWRvd1Jvb3QmJnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KXJldHVybiB0fXJldHVybiBudWxsfWZ1bmN0aW9uIEtNKCl7bGV0IG49dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQ/ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDpudWxsO2Zvcig7biYmbi5zaGFkb3dSb290Oyl7bGV0IHQ9bi5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7aWYodD09PW4pYnJlYWs7bj10fXJldHVybiBufWZ1bmN0aW9uIFFjKG4pe3JldHVybiBuLmNvbXBvc2VkUGF0aD9uLmNvbXBvc2VkUGF0aCgpWzBdOm4udGFyZ2V0fWZ1bmN0aW9uIFpNKCl7cmV0dXJuIHR5cGVvZiBfX2thcm1hX188InUiJiYhIV9fa2FybWFfX3x8dHlwZW9mIGphc21pbmU8InUiJiYhIWphc21pbmV8fHR5cGVvZiBqZXN0PCJ1IiYmISFqZXN0fHx0eXBlb2YgTW9jaGE8InUiJiYhIU1vY2hhfWZ1bmN0aW9uIGtyKG4sLi4udCl7cmV0dXJuIHQubGVuZ3RoP3Quc29tZShlPT5uW2VdKTpuLmFsdEtleXx8bi5zaGlmdEtleXx8bi5jdHJsS2V5fHxuLm1ldGFLZXl9ZnVuY3Rpb24gUnQobil7cmV0dXJuIG51bGwhPW4mJiJmYWxzZSIhPWAke259YH1mdW5jdGlvbiBCaShuLHQ9MCl7cmV0dXJuIGhIKG4pP051bWJlcihuKTp0fWZ1bmN0aW9uIGhIKG4pe3JldHVybiFpc05hTihwYXJzZUZsb2F0KG4pKSYmIWlzTmFOKE51bWJlcihuKSl9ZnVuY3Rpb24geHYobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bjpbbl19ZnVuY3Rpb24geW8obil7cmV0dXJuIG51bGw9PW4/IiI6InN0cmluZyI9PXR5cGVvZiBuP246YCR7bn1weGB9ZnVuY3Rpb24gTGEobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBSZT9uLm5hdGl2ZUVsZW1lbnQ6bn12YXIgQ3YsR2VlPSgoKT0+e2NsYXNzIG57Y3JlYXRlKGUpe3JldHVybiB0eXBlb2YgTXV0YXRpb25PYnNlcnZlcj4idSI/bnVsbDpuZXcgTXV0YXRpb25PYnNlcnZlcihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksdVJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fbXV0YXRpb25PYnNlcnZlckZhY3Rvcnk9ZSx0aGlzLl9vYnNlcnZlZEVsZW1lbnRzPW5ldyBNYXB9bmdPbkRlc3Ryb3koKXt0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmZvckVhY2goKGUsaSk9PnRoaXMuX2NsZWFudXBPYnNlcnZlcihpKSl9b2JzZXJ2ZShlKXtsZXQgaT1MYShlKTtyZXR1cm4gbmV3IHVuKHI9PntsZXQgcz10aGlzLl9vYnNlcnZlRWxlbWVudChpKS5zdWJzY3JpYmUocik7cmV0dXJuKCk9PntzLnVuc3Vic2NyaWJlKCksdGhpcy5fdW5vYnNlcnZlRWxlbWVudChpKX19KX1fb2JzZXJ2ZUVsZW1lbnQoZSl7aWYodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkpdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQoZSkuY291bnQrKztlbHNle2xldCBpPW5ldyBrZSxyPXRoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5LmNyZWF0ZShvPT5pLm5leHQobykpO3ImJnIub2JzZXJ2ZShlLHtjaGFyYWN0ZXJEYXRhOiEwLGNoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5zZXQoZSx7b2JzZXJ2ZXI6cixzdHJlYW06aSxjb3VudDoxfSl9cmV0dXJuIHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLnN0cmVhbX1fdW5vYnNlcnZlRWxlbWVudChlKXt0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmhhcyhlKSYmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50LS0sdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQoZSkuY291bnR8fHRoaXMuX2NsZWFudXBPYnNlcnZlcihlKSl9X2NsZWFudXBPYnNlcnZlcihlKXtpZih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmhhcyhlKSl7bGV0e29ic2VydmVyOmksc3RyZWFtOnJ9PXRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpO2kmJmkuZGlzY29ubmVjdCgpLHIuY29tcGxldGUoKSx0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmRlbGV0ZShlKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooR2VlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksd2g9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY29udGVudE9ic2VydmVyPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuZXZlbnQ9bmV3IEcsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbj1udWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9UnQoZSksdGhpcy5fZGlzYWJsZWQ/dGhpcy5fdW5zdWJzY3JpYmUoKTp0aGlzLl9zdWJzY3JpYmUoKX1nZXQgZGVib3VuY2UoKXtyZXR1cm4gdGhpcy5fZGVib3VuY2V9c2V0IGRlYm91bmNlKGUpe3RoaXMuX2RlYm91bmNlPUJpKGUpLHRoaXMuX3N1YnNjcmliZSgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpeyF0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fc3Vic2NyaWJlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bnN1YnNjcmliZSgpfV9zdWJzY3JpYmUoKXt0aGlzLl91bnN1YnNjcmliZSgpO2xldCBlPXRoaXMuX2NvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb249KHRoaXMuZGVib3VuY2U/ZS5waXBlKEhyKHRoaXMuZGVib3VuY2UpKTplKS5zdWJzY3JpYmUodGhpcy5ldmVudCl9KX1fdW5zdWJzY3JpYmUoKXt0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKHVSZSksTShSZSksTShfdCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtPYnNlcnZlQ29udGVudCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOlsiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImRpc2FibGVkIl0sZGVib3VuY2U6ImRlYm91bmNlIn0sb3V0cHV0czp7ZXZlbnQ6ImNka09ic2VydmVDb250ZW50In0sZXhwb3J0QXM6WyJjZGtPYnNlcnZlQ29udGVudCJdfSksbn0pKCksb2Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbR2VlXX0pLG59KSgpLFdlZT1uZXcgU2V0LGRSZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fbWF0Y2hNZWRpYT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJndpbmRvdy5tYXRjaE1lZGlhP3dpbmRvdy5tYXRjaE1lZGlhLmJpbmQod2luZG93KTpoUmV9bWF0Y2hNZWRpYShlKXtyZXR1cm4odGhpcy5fcGxhdGZvcm0uV0VCS0lUfHx0aGlzLl9wbGF0Zm9ybS5CTElOSykmJmZ1bmN0aW9uKG4pe2lmKCFXZWUuaGFzKG4pKXRyeXtDdnx8KChDdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoQ3YpKSxDdi5zaGVldCYmKEN2LnNoZWV0Lmluc2VydFJ1bGUoYEBtZWRpYSAke259IHtib2R5eyB9fWAsMCksV2VlLmFkZChuKSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19KGUpLHRoaXMuX21hdGNoTWVkaWEoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGoob2kpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBoUmUobil7cmV0dXJue21hdGNoZXM6ImFsbCI9PT1ufHwiIj09PW4sbWVkaWE6bixhZGRMaXN0ZW5lcjooKT0+e30scmVtb3ZlTGlzdGVuZXI6KCk9Pnt9fX12YXIgSm09KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX21lZGlhTWF0Y2hlcj1lLHRoaXMuX3pvbmU9aSx0aGlzLl9xdWVyaWVzPW5ldyBNYXAsdGhpcy5fZGVzdHJveVN1YmplY3Q9bmV3IGtlfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveVN1YmplY3QubmV4dCgpLHRoaXMuX2Rlc3Ryb3lTdWJqZWN0LmNvbXBsZXRlKCl9aXNNYXRjaGVkKGUpe3JldHVybiBxZWUoeHYoZSkpLnNvbWUocj0+dGhpcy5fcmVnaXN0ZXJRdWVyeShyKS5tcWwubWF0Y2hlcyl9b2JzZXJ2ZShlKXtsZXQgbz1MdChxZWUoeHYoZSkpLm1hcChzPT50aGlzLl9yZWdpc3RlclF1ZXJ5KHMpLm9ic2VydmFibGUpKTtyZXR1cm4gbz1WcChvLnBpcGUoUXQoMSkpLG8ucGlwZShaYSgxKSxIcigwKSkpLG8ucGlwZShMKHM9PntsZXQgYT17bWF0Y2hlczohMSxicmVha3BvaW50czp7fX07cmV0dXJuIHMuZm9yRWFjaCgoe21hdGNoZXM6bCxxdWVyeTpjfSk9PnthLm1hdGNoZXM9YS5tYXRjaGVzfHxsLGEuYnJlYWtwb2ludHNbY109bH0pLGF9KSl9X3JlZ2lzdGVyUXVlcnkoZSl7aWYodGhpcy5fcXVlcmllcy5oYXMoZSkpcmV0dXJuIHRoaXMuX3F1ZXJpZXMuZ2V0KGUpO2xldCBpPXRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKGUpLG89e29ic2VydmFibGU6bmV3IHVuKHM9PntsZXQgYT1sPT50aGlzLl96b25lLnJ1bigoKT0+cy5uZXh0KGwpKTtyZXR1cm4gaS5hZGRMaXN0ZW5lcihhKSwoKT0+e2kucmVtb3ZlTGlzdGVuZXIoYSl9fSkucGlwZSh6bihpKSxMKCh7bWF0Y2hlczpzfSk9Pih7cXVlcnk6ZSxtYXRjaGVzOnN9KSksc3QodGhpcy5fZGVzdHJveVN1YmplY3QpKSxtcWw6aX07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KGUsbyksb319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihkUmUpLGooX3QpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBxZWUobil7cmV0dXJuIG4ubWFwKHQ9PnQuc3BsaXQoIiwiKSkucmVkdWNlKCh0LGUpPT50LmNvbmNhdChlKSkubWFwKHQ9PnQudHJpbSgpKX1mdW5jdGlvbiBwMihuLHQpe3JldHVybihuLmdldEF0dHJpYnV0ZSh0KXx8IiIpLm1hdGNoKC9cUysvZyl8fFtdfXZhciAkZWU9ImNkay1kZXNjcmliZWRieS1tZXNzYWdlIix1Mj0iY2RrLWRlc2NyaWJlZGJ5LWhvc3QiLGdIPTAsZjI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWksdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5PW5ldyBNYXAsdGhpcy5fbWVzc2FnZXNDb250YWluZXI9bnVsbCx0aGlzLl9pZD0iIitnSCsrLHRoaXMuX2RvY3VtZW50PWUsdGhpcy5faWQ9am8oJGYpKyItIitnSCsrfWRlc2NyaWJlKGUsaSxyKXtpZighdGhpcy5fY2FuQmVEZXNjcmliZWQoZSxpKSlyZXR1cm47bGV0IG89ZkgoaSxyKTsic3RyaW5nIiE9dHlwZW9mIGk/KFhlZShpLHRoaXMuX2lkKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KG8se21lc3NhZ2VFbGVtZW50OmkscmVmZXJlbmNlQ291bnQ6MH0pKTp0aGlzLl9tZXNzYWdlUmVnaXN0cnkuaGFzKG8pfHx0aGlzLl9jcmVhdGVNZXNzYWdlRWxlbWVudChpLHIpLHRoaXMuX2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLG8pfHx0aGlzLl9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsbyl9cmVtb3ZlRGVzY3JpcHRpb24oZSxpLHIpe2lmKCFpfHwhdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm47bGV0IG89ZkgoaSxyKTtpZih0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UoZSxvKSYmdGhpcy5fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZShlLG8pLCJzdHJpbmciPT10eXBlb2YgaSl7bGV0IHM9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChvKTtzJiYwPT09cy5yZWZlcmVuY2VDb3VudCYmdGhpcy5fZGVsZXRlTWVzc2FnZUVsZW1lbnQobyl9MD09PXRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5jaGlsZE5vZGVzLmxlbmd0aCYmKHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgWyR7dTJ9PSIke3RoaXMuX2lkfSJdYCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdGhpcy5fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZVtpXSksZVtpXS5yZW1vdmVBdHRyaWJ1dGUodTIpO3RoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5yZW1vdmUoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcj1udWxsLHRoaXMuX21lc3NhZ2VSZWdpc3RyeS5jbGVhcigpfV9jcmVhdGVNZXNzYWdlRWxlbWVudChlLGkpe2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1hlZShyLHRoaXMuX2lkKSxyLnRleHRDb250ZW50PWUsaSYmci5zZXRBdHRyaWJ1dGUoInJvbGUiLGkpLHRoaXMuX2NyZWF0ZU1lc3NhZ2VzQ29udGFpbmVyKCksdGhpcy5fbWVzc2FnZXNDb250YWluZXIuYXBwZW5kQ2hpbGQociksdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LnNldChmSChlLGkpLHttZXNzYWdlRWxlbWVudDpyLHJlZmVyZW5jZUNvdW50OjB9KX1fZGVsZXRlTWVzc2FnZUVsZW1lbnQoZSl7dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChlKT8ubWVzc2FnZUVsZW1lbnQ/LnJlbW92ZSgpLHRoaXMuX21lc3NhZ2VSZWdpc3RyeS5kZWxldGUoZSl9X2NyZWF0ZU1lc3NhZ2VzQ29udGFpbmVyKCl7aWYodGhpcy5fbWVzc2FnZXNDb250YWluZXIpcmV0dXJuO2xldCBlPSJjZGstZGVzY3JpYmVkYnktbWVzc2FnZS1jb250YWluZXIiLGk9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7ZX1bcGxhdGZvcm09InNlcnZlciJdYCk7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspaVtvXS5yZW1vdmUoKTtsZXQgcj10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsci5jbGFzc0xpc3QuYWRkKGUpLHIuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHRoaXMuX3BsYXRmb3JtJiYhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZyLnNldEF0dHJpYnV0ZSgicGxhdGZvcm0iLCJzZXJ2ZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPXJ9X3JlbW92ZUNka0Rlc2NyaWJlZEJ5UmVmZXJlbmNlSWRzKGUpe2xldCBpPXAyKGUsImFyaWEtZGVzY3JpYmVkYnkiKS5maWx0ZXIocj0+MCE9ci5pbmRleE9mKCRlZSkpO2Uuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixpLmpvaW4oIiAiKSl9X2FkZE1lc3NhZ2VSZWZlcmVuY2UoZSxpKXtsZXQgcj10aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGkpOyhmdW5jdGlvbihuLHQsZSl7bGV0IGk9cDIobix0KTtpLnNvbWUocj0+ci50cmltKCk9PWUudHJpbSgpKXx8KGkucHVzaChlLnRyaW0oKSksbi5zZXRBdHRyaWJ1dGUodCxpLmpvaW4oIiAiKSkpfSkoZSwiYXJpYS1kZXNjcmliZWRieSIsci5tZXNzYWdlRWxlbWVudC5pZCksZS5zZXRBdHRyaWJ1dGUodTIsdGhpcy5faWQpLHIucmVmZXJlbmNlQ291bnQrK31fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZShlLGkpe2xldCByPXRoaXMuX21lc3NhZ2VSZWdpc3RyeS5nZXQoaSk7ci5yZWZlcmVuY2VDb3VudC0tLGZ1bmN0aW9uKG4sdCxlKXtsZXQgcj1wMihuLHQpLmZpbHRlcihvPT5vIT1lLnRyaW0oKSk7ci5sZW5ndGg/bi5zZXRBdHRyaWJ1dGUodCxyLmpvaW4oIiAiKSk6bi5yZW1vdmVBdHRyaWJ1dGUodCl9KGUsImFyaWEtZGVzY3JpYmVkYnkiLHIubWVzc2FnZUVsZW1lbnQuaWQpLGUucmVtb3ZlQXR0cmlidXRlKHUyKX1faXNFbGVtZW50RGVzY3JpYmVkQnlNZXNzYWdlKGUsaSl7bGV0IHI9cDIoZSwiYXJpYS1kZXNjcmliZWRieSIpLG89dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChpKSxzPW8mJm8ubWVzc2FnZUVsZW1lbnQuaWQ7cmV0dXJuISFzJiYtMSE9ci5pbmRleE9mKHMpfV9jYW5CZURlc2NyaWJlZChlLGkpe2lmKCF0aGlzLl9pc0VsZW1lbnROb2RlKGUpKXJldHVybiExO2lmKGkmJiJvYmplY3QiPT10eXBlb2YgaSlyZXR1cm4hMDtsZXQgcj1udWxsPT1pPyIiOmAke2l9YC50cmltKCksbz1lLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpO3JldHVybiEoIXJ8fG8mJm8udHJpbSgpPT09cil9X2lzRWxlbWVudE5vZGUoZSl7cmV0dXJuIGUubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSHQpLGoob2kpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBmSChuLHQpe3JldHVybiJzdHJpbmciPT10eXBlb2Ygbj9gJHt0fHwiIn0vJHtufWA6bn1mdW5jdGlvbiBYZWUobix0KXtuLmlkfHwobi5pZD1gJHskZWV9LSR7dH0tJHtnSCsrfWApfXZhciBoMj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9pdGVtcz10LHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD0tMSx0aGlzLl9hY3RpdmVJdGVtPW51bGwsdGhpcy5fd3JhcD0hMSx0aGlzLl9sZXR0ZXJLZXlTdHJlYW09bmV3IGtlLHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbj1Tbi5FTVBUWSx0aGlzLl92ZXJ0aWNhbD0hMCx0aGlzLl9hbGxvd2VkTW9kaWZpZXJLZXlzPVtdLHRoaXMuX2hvbWVBbmRFbmQ9ITEsdGhpcy5fc2tpcFByZWRpY2F0ZUZuPWU9PmUuZGlzYWJsZWQsdGhpcy5fcHJlc3NlZExldHRlcnM9W10sdGhpcy50YWJPdXQ9bmV3IGtlLHRoaXMuY2hhbmdlPW5ldyBrZSx0IGluc3RhbmNlb2YgSGwmJnQuY2hhbmdlcy5zdWJzY3JpYmUoZT0+e2lmKHRoaXMuX2FjdGl2ZUl0ZW0pe2xldCByPWUudG9BcnJheSgpLmluZGV4T2YodGhpcy5fYWN0aXZlSXRlbSk7cj4tMSYmciE9PXRoaXMuX2FjdGl2ZUl0ZW1JbmRleCYmKHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD1yKX19KX1za2lwUHJlZGljYXRlKHQpe3JldHVybiB0aGlzLl9za2lwUHJlZGljYXRlRm49dCx0aGlzfXdpdGhXcmFwKHQ9ITApe3JldHVybiB0aGlzLl93cmFwPXQsdGhpc313aXRoVmVydGljYWxPcmllbnRhdGlvbih0PSEwKXtyZXR1cm4gdGhpcy5fdmVydGljYWw9dCx0aGlzfXdpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odCl7cmV0dXJuIHRoaXMuX2hvcml6b250YWw9dCx0aGlzfXdpdGhBbGxvd2VkTW9kaWZpZXJLZXlzKHQpe3JldHVybiB0aGlzLl9hbGxvd2VkTW9kaWZpZXJLZXlzPXQsdGhpc313aXRoVHlwZUFoZWFkKHQ9MjAwKXtyZXR1cm4gdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPXRoaXMuX2xldHRlcktleVN0cmVhbS5waXBlKGt0KGU9PnRoaXMuX3ByZXNzZWRMZXR0ZXJzLnB1c2goZSkpLEhyKHQpLFllKCgpPT50aGlzLl9wcmVzc2VkTGV0dGVycy5sZW5ndGg+MCksTCgoKT0+dGhpcy5fcHJlc3NlZExldHRlcnMuam9pbigiIikpKS5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuX2dldEl0ZW1zQXJyYXkoKTtmb3IobGV0IHI9MTtyPGkubGVuZ3RoKzE7cisrKXtsZXQgbz0odGhpcy5fYWN0aXZlSXRlbUluZGV4K3IpJWkubGVuZ3RoLHM9aVtvXTtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKHMpJiYwPT09cy5nZXRMYWJlbCgpLnRvVXBwZXJDYXNlKCkudHJpbSgpLmluZGV4T2YoZSkpe3RoaXMuc2V0QWN0aXZlSXRlbShvKTticmVha319dGhpcy5fcHJlc3NlZExldHRlcnM9W119KSx0aGlzfXdpdGhIb21lQW5kRW5kKHQ9ITApe3JldHVybiB0aGlzLl9ob21lQW5kRW5kPXQsdGhpc31zZXRBY3RpdmVJdGVtKHQpe2xldCBlPXRoaXMuX2FjdGl2ZUl0ZW07dGhpcy51cGRhdGVBY3RpdmVJdGVtKHQpLHRoaXMuX2FjdGl2ZUl0ZW0hPT1lJiZ0aGlzLmNoYW5nZS5uZXh0KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCl9b25LZXlkb3duKHQpe2xldCBlPXQua2V5Q29kZSxyPVsiYWx0S2V5IiwiY3RybEtleSIsIm1ldGFLZXkiLCJzaGlmdEtleSJdLmV2ZXJ5KG89PiF0W29dfHx0aGlzLl9hbGxvd2VkTW9kaWZpZXJLZXlzLmluZGV4T2Yobyk+LTEpO3N3aXRjaChlKXtjYXNlIDk6cmV0dXJuIHZvaWQgdGhpcy50YWJPdXQubmV4dCgpO2Nhc2UgNDA6aWYodGhpcy5fdmVydGljYWwmJnIpe3RoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzODppZih0aGlzLl92ZXJ0aWNhbCYmcil7dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzOTppZih0aGlzLl9ob3Jpem9udGFsJiZyKXsicnRsIj09PXRoaXMuX2hvcml6b250YWw/dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTp0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzc6aWYodGhpcy5faG9yaXpvbnRhbCYmcil7InJ0bCI9PT10aGlzLl9ob3Jpem9udGFsP3RoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTp0aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM2OmlmKHRoaXMuX2hvbWVBbmRFbmQmJnIpe3RoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzU6aWYodGhpcy5faG9tZUFuZEVuZCYmcil7dGhpcy5zZXRMYXN0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtkZWZhdWx0OnJldHVybiB2b2lkKChyfHxrcih0LCJzaGlmdEtleSIpKSYmKHQua2V5JiYxPT09dC5rZXkubGVuZ3RoP3RoaXMuX2xldHRlcktleVN0cmVhbS5uZXh0KHQua2V5LnRvTG9jYWxlVXBwZXJDYXNlKCkpOihlPj02NSYmZTw9OTB8fGU+PTQ4JiZlPD01NykmJnRoaXMuX2xldHRlcktleVN0cmVhbS5uZXh0KFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpKSl9dGhpcy5fcHJlc3NlZExldHRlcnM9W10sdC5wcmV2ZW50RGVmYXVsdCgpfWdldCBhY3RpdmVJdGVtSW5kZXgoKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbUluZGV4fWdldCBhY3RpdmVJdGVtKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW19aXNUeXBpbmcoKXtyZXR1cm4gdGhpcy5fcHJlc3NlZExldHRlcnMubGVuZ3RoPjB9c2V0Rmlyc3RJdGVtQWN0aXZlKCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgoMCwxKX1zZXRMYXN0SXRlbUFjdGl2ZSgpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KHRoaXMuX2l0ZW1zLmxlbmd0aC0xLC0xKX1zZXROZXh0SXRlbUFjdGl2ZSgpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwP3RoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk6dGhpcy5fc2V0QWN0aXZlSXRlbUJ5RGVsdGEoMSl9c2V0UHJldmlvdXNJdGVtQWN0aXZlKCl7dGhpcy5fYWN0aXZlSXRlbUluZGV4PDAmJnRoaXMuX3dyYXA/dGhpcy5zZXRMYXN0SXRlbUFjdGl2ZSgpOnRoaXMuX3NldEFjdGl2ZUl0ZW1CeURlbHRhKC0xKX11cGRhdGVBY3RpdmVJdGVtKHQpe2xldCBlPXRoaXMuX2dldEl0ZW1zQXJyYXkoKSxpPSJudW1iZXIiPT10eXBlb2YgdD90OmUuaW5kZXhPZih0KTt0aGlzLl9hY3RpdmVJdGVtPWVbaV0/P251bGwsdGhpcy5fYWN0aXZlSXRlbUluZGV4PWl9X3NldEFjdGl2ZUl0ZW1CeURlbHRhKHQpe3RoaXMuX3dyYXA/dGhpcy5fc2V0QWN0aXZlSW5XcmFwTW9kZSh0KTp0aGlzLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlKHQpfV9zZXRBY3RpdmVJbldyYXBNb2RlKHQpe2xldCBlPXRoaXMuX2dldEl0ZW1zQXJyYXkoKTtmb3IobGV0IGk9MTtpPD1lLmxlbmd0aDtpKyspe2xldCByPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCppK2UubGVuZ3RoKSVlLmxlbmd0aDtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGVbcl0pKXJldHVybiB2b2lkIHRoaXMuc2V0QWN0aXZlSXRlbShyKX19X3NldEFjdGl2ZUluRGVmYXVsdE1vZGUodCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5fYWN0aXZlSXRlbUluZGV4K3QsdCl9X3NldEFjdGl2ZUl0ZW1CeUluZGV4KHQsZSl7bGV0IGk9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2lmKGlbdF0pe2Zvcig7dGhpcy5fc2tpcFByZWRpY2F0ZUZuKGlbdF0pOylpZighaVt0Kz1lXSlyZXR1cm47dGhpcy5zZXRBY3RpdmVJdGVtKHQpfX1fZ2V0SXRlbXNBcnJheSgpe3JldHVybiB0aGlzLl9pdGVtcyBpbnN0YW5jZW9mIEhsP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKTp0aGlzLl9pdGVtc319LHd2PWNsYXNzIGV4dGVuZHMgaDJ7c2V0QWN0aXZlSXRlbSh0KXt0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5zZXRJbmFjdGl2ZVN0eWxlcygpLHN1cGVyLnNldEFjdGl2ZUl0ZW0odCksdGhpcy5hY3RpdmVJdGVtJiZ0aGlzLmFjdGl2ZUl0ZW0uc2V0QWN0aXZlU3R5bGVzKCl9fSxTaD1jbGFzcyBleHRlbmRzIGgye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcmlnaW49InByb2dyYW0ifXNldEZvY3VzT3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCx0aGlzfXNldEFjdGl2ZUl0ZW0odCl7c3VwZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5mb2N1cyh0aGlzLl9vcmlnaW4pfX0sU3Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybT1lfWlzRGlzYWJsZWQoZSl7cmV0dXJuIGUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfWlzVmlzaWJsZShlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuISEobi5vZmZzZXRXaWR0aHx8bi5vZmZzZXRIZWlnaHR8fCJmdW5jdGlvbiI9PXR5cGVvZiBuLmdldENsaWVudFJlY3RzJiZuLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0oZSkmJiJ2aXNpYmxlIj09PWdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eX1pc1RhYmJhYmxlKGUpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuITE7bGV0IGk9ZnVuY3Rpb24obil7dHJ5e3JldHVybiBuLmZyYW1lRWxlbWVudH1jYXRjaHtyZXR1cm4gbnVsbH19KGZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQmJm4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fShlKSk7aWYoaSYmKC0xPT09UWVlKGkpfHwhdGhpcy5pc1Zpc2libGUoaSkpKXJldHVybiExO2xldCByPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxvPVFlZShlKTtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpPy0xIT09bzohKCJpZnJhbWUiPT09cnx8Im9iamVjdCI9PT1yfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIWZ1bmN0aW9uKG4pe2xldCB0PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxlPSJpbnB1dCI9PT10JiZuLnR5cGU7cmV0dXJuInRleHQiPT09ZXx8InBhc3N3b3JkIj09PWV8fCJzZWxlY3QiPT09dHx8InRleHRhcmVhIj09PXR9KGUpKSYmKCJhdWRpbyI9PT1yPyEhZS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJi0xIT09bzoidmlkZW8iPT09cj8tMSE9PW8mJihudWxsIT09b3x8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8ZS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOmUudGFiSW5kZXg+PTApfWlzRm9jdXNhYmxlKGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiFmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuImlucHV0Ij09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfShuKSYmImhpZGRlbiI9PW4udHlwZX0obikmJihmdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXR8fCJzZWxlY3QiPT09dHx8ImJ1dHRvbiI9PT10fHwidGV4dGFyZWEiPT09dH0obil8fGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4iYSI9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0obikmJm4uaGFzQXR0cmlidXRlKCJocmVmIil9KG4pfHxuLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fGV0ZShuKSl9KGUpJiYhdGhpcy5pc0Rpc2FibGVkKGUpJiYoaT8uaWdub3JlVmlzaWJpbGl0eXx8dGhpcy5pc1Zpc2libGUoZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKG9pKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gZXRlKG4pe2lmKCFuLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8dm9pZCAwPT09bi50YWJJbmRleClyZXR1cm4hMTtsZXQgdD1uLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtyZXR1cm4hKCF0fHxpc05hTihwYXJzZUludCh0LDEwKSkpfWZ1bmN0aW9uIFFlZShuKXtpZighZXRlKG4pKXJldHVybiBudWxsO2xldCB0PXBhcnNlSW50KG4uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKHQpPy0xOnR9dmFyIEpNPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2NoZWNrZXI9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kb2N1bWVudD1yfWNyZWF0ZShlLGk9ITEpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvPSExKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5faGFzQXR0YWNoZWQ9ITEsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuX2VuYWJsZWQ9ITAsb3x8dGhpcy5hdHRhY2hBbmNob3JzKCl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZCh0KXt0aGlzLl9lbmFibGVkPXQsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fZW5kQW5jaG9yKSl9ZGVzdHJveSgpe2xldCB0PXRoaXMuX3N0YXJ0QW5jaG9yLGU9dGhpcy5fZW5kQW5jaG9yO3QmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpLHQucmVtb3ZlKCkpLGUmJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSxlLnJlbW92ZSgpKSx0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbCx0aGlzLl9oYXNBdHRhY2hlZD0hMX1hdHRhY2hBbmNob3JzKCl7cmV0dXJuISF0aGlzLl9oYXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N0YXJ0QW5jaG9yfHwodGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fc3RhcnRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcikpLHRoaXMuX2VuZEFuY2hvcnx8KHRoaXMuX2VuZEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9lbmRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpKX0pLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fc3RhcnRBbmNob3IsdGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IsdGhpcy5fZWxlbWVudC5uZXh0U2libGluZyksdGhpcy5faGFzQXR0YWNoZWQ9ITApLHRoaXMuX2hhc0F0dGFjaGVkKX1mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5lKHRoaXMuZm9jdXNJbml0aWFsRWxlbWVudCh0KSkpfSl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+ZSh0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCkpKX0pfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+ZSh0aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCh0KSkpfSl9X2dldFJlZ2lvbkJvdW5kYXJ5KHQpe2xldCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2Nkay1mb2N1cy1yZWdpb24tJHt0fV0sIFtjZGtGb2N1c1JlZ2lvbiR7dH1dLCBbY2RrLWZvY3VzLSR7dH1dYCk7cmV0dXJuInN0YXJ0Ij09dD9lLmxlbmd0aD9lWzBdOnRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOmUubGVuZ3RoP2VbZS5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KX1mb2N1c0luaXRpYWxFbGVtZW50KHQpe2xldCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiW2Nkay1mb2N1cy1pbml0aWFsXSwgW2Nka0ZvY3VzSW5pdGlhbF0iKTtpZihlKXtpZighdGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShlKSl7bGV0IGk9dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoZSk7cmV0dXJuIGk/LmZvY3VzKHQpLCEhaX1yZXR1cm4gZS5mb2N1cyh0KSwhMH1yZXR1cm4gdGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KHQpfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCl7bGV0IGU9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoInN0YXJ0Iik7cmV0dXJuIGUmJmUuZm9jdXModCksISFlfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCh0KXtsZXQgZT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgiZW5kIik7cmV0dXJuIGUmJmUuZm9jdXModCksISFlfWhhc0F0dGFjaGVkKCl7cmV0dXJuIHRoaXMuX2hhc0F0dGFjaGVkfV9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7bGV0IGU9dC5jaGlsZHJlbjtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHI9ZVtpXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW2ldKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9X2dldExhc3RUYWJiYWJsZUVsZW1lbnQodCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2xldCBlPXQuY2hpbGRyZW47Zm9yKGxldCBpPWUubGVuZ3RoLTE7aT49MDtpLS0pe2xldCByPWVbaV0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChlW2ldKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9X2NyZWF0ZUFuY2hvcigpe2xldCB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0aGlzLl9lbmFibGVkLHQpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWZvY3VzLXRyYXAtYW5jaG9yIiksdC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHR9X3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsZSl7dD9lLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIik6ZS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9dG9nZ2xlQW5jaG9ycyh0KXt0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9lbmRBbmNob3IpKX1fZXhlY3V0ZU9uU3RhYmxlKHQpe3RoaXMuX25nWm9uZS5pc1N0YWJsZT90KCk6dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoUXQoMSkpLnN1YnNjcmliZSh0KX19KGUsdGhpcy5fY2hlY2tlcix0aGlzLl9uZ1pvbmUsdGhpcy5fZG9jdW1lbnQsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooU3YpLGooX3QpLGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiAkTShuKXtyZXR1cm4gMD09PW4uYnV0dG9uc3x8MD09PW4ub2Zmc2V0WCYmMD09PW4ub2Zmc2V0WX1mdW5jdGlvbiBldyhuKXtsZXQgdD1uLnRvdWNoZXMmJm4udG91Y2hlc1swXXx8bi5jaGFuZ2VkVG91Y2hlcyYmbi5jaGFuZ2VkVG91Y2hlc1swXTtyZXR1cm4hKCF0fHwtMSE9PXQuaWRlbnRpZmllcnx8bnVsbCE9dC5yYWRpdXNYJiYxIT09dC5yYWRpdXNYfHxudWxsIT10LnJhZGl1c1kmJjEhPT10LnJhZGl1c1kpfW5ldyBwZSgiRk9DVVNfVFJBUF9JTkVSVF9TVFJBVEVHWSIpO3ZhciBrUmU9bmV3IHBlKCJjZGstaW5wdXQtbW9kYWxpdHktZGV0ZWN0b3Itb3B0aW9ucyIpLEZSZT17aWdub3JlS2V5czpbMTgsMTcsMjI0LDkxLDE2XX0sTXY9bGEoe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLE5SZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fbW9zdFJlY2VudFRhcmdldD1udWxsLHRoaXMuX21vZGFsaXR5PW5ldyBocihudWxsKSx0aGlzLl9sYXN0VG91Y2hNcz0wLHRoaXMuX29uS2V5ZG93bj1zPT57dGhpcy5fb3B0aW9ucz8uaWdub3JlS2V5cz8uc29tZShhPT5hPT09cy5rZXlDb2RlKXx8KHRoaXMuX21vZGFsaXR5Lm5leHQoImtleWJvYXJkIiksdGhpcy5fbW9zdFJlY2VudFRhcmdldD1RYyhzKSl9LHRoaXMuX29uTW91c2Vkb3duPXM9PntEYXRlLm5vdygpLXRoaXMuX2xhc3RUb3VjaE1zPDY1MHx8KHRoaXMuX21vZGFsaXR5Lm5leHQoJE0ocyk/ImtleWJvYXJkIjoibW91c2UiKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PVFjKHMpKX0sdGhpcy5fb25Ub3VjaHN0YXJ0PXM9PntldyhzKT90aGlzLl9tb2RhbGl0eS5uZXh0KCJrZXlib2FyZCIpOih0aGlzLl9sYXN0VG91Y2hNcz1EYXRlLm5vdygpLHRoaXMuX21vZGFsaXR5Lm5leHQoInRvdWNoIiksdGhpcy5fbW9zdFJlY2VudFRhcmdldD1RYyhzKSl9LHRoaXMuX29wdGlvbnM9ey4uLkZSZSwuLi5vfSx0aGlzLm1vZGFsaXR5RGV0ZWN0ZWQ9dGhpcy5fbW9kYWxpdHkucGlwZShaYSgxKSksdGhpcy5tb2RhbGl0eUNoYW5nZWQ9dGhpcy5tb2RhbGl0eURldGVjdGVkLnBpcGUoeWkoKSksZS5pc0Jyb3dzZXImJmkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5ZG93bixNdiksci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2Vkb3duLE12KSxyLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hzdGFydCxNdil9KX1nZXQgbW9zdFJlY2VudE1vZGFsaXR5KCl7cmV0dXJuIHRoaXMuX21vZGFsaXR5LnZhbHVlfW5nT25EZXN0cm95KCl7dGhpcy5fbW9kYWxpdHkuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleWRvd24sTXYpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24sTXYpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hzdGFydCxNdikpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKG9pKSxqKF90KSxqKEh0KSxqKGtSZSw4KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksTFJlPW5ldyBwZSgibGl2ZUFubm91bmNlckVsZW1lbnQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSksVlJlPW5ldyBwZSgiTElWRV9BTk5PVU5DRVJfREVGQVVMVF9PUFRJT05TIiksdHc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1vLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5fbGl2ZUVsZW1lbnQ9ZXx8dGhpcy5fY3JlYXRlTGl2ZUVsZW1lbnQoKX1hbm5vdW5jZShlLC4uLmkpe2xldCBvLHMscj10aGlzLl9kZWZhdWx0T3B0aW9ucztyZXR1cm4gMT09PWkubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIGlbMF0/cz1pWzBdOltvLHNdPWksdGhpcy5jbGVhcigpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLG98fChvPXImJnIucG9saXRlbmVzcz9yLnBvbGl0ZW5lc3M6InBvbGl0ZSIpLG51bGw9PXMmJnImJihzPXIuZHVyYXRpb24pLHRoaXMuX2xpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIixvKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pih0aGlzLl9jdXJyZW50UHJvbWlzZXx8KHRoaXMuX2N1cnJlbnRQcm9taXNlPW5ldyBQcm9taXNlKGE9PnRoaXMuX2N1cnJlbnRSZXNvbHZlPWEpKSxjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSx0aGlzLl9wcmV2aW91c1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuX2xpdmVFbGVtZW50LnRleHRDb250ZW50PWUsIm51bWJlciI9PXR5cGVvZiBzJiYodGhpcy5fcHJldmlvdXNUaW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuY2xlYXIoKSxzKSksdGhpcy5fY3VycmVudFJlc29sdmUoKSx0aGlzLl9jdXJyZW50UHJvbWlzZT10aGlzLl9jdXJyZW50UmVzb2x2ZT12b2lkIDB9LDEwMCksdGhpcy5fY3VycmVudFByb21pc2UpKX1jbGVhcigpe3RoaXMuX2xpdmVFbGVtZW50JiYodGhpcy5fbGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ9IiIpfW5nT25EZXN0cm95KCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3ByZXZpb3VzVGltZW91dCksdGhpcy5fbGl2ZUVsZW1lbnQ/LnJlbW92ZSgpLHRoaXMuX2xpdmVFbGVtZW50PW51bGwsdGhpcy5fY3VycmVudFJlc29sdmU/LigpLHRoaXMuX2N1cnJlbnRQcm9taXNlPXRoaXMuX2N1cnJlbnRSZXNvbHZlPXZvaWQgMH1fY3JlYXRlTGl2ZUVsZW1lbnQoKXtsZXQgZT0iY2RrLWxpdmUtYW5ub3VuY2VyLWVsZW1lbnQiLGk9dGhpcy5fZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKSxyPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKWlbb10ucmVtb3ZlKCk7cmV0dXJuIHIuY2xhc3NMaXN0LmFkZChlKSxyLmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1hdG9taWMiLCJ0cnVlIiksci5zZXRBdHRyaWJ1dGUoImFyaWEtbGl2ZSIsInBvbGl0ZSIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocikscn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihMUmUsOCksaihfdCksaihIdCksaihWUmUsOCkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEhSZT1uZXcgcGUoImNkay1mb2N1cy1tb25pdG9yLWRlZmF1bHQtb3B0aW9ucyIpLGQyPWxhKHtwYXNzaXZlOiEwLGNhcHR1cmU6ITB9KSxGcj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyl7dGhpcy5fbmdab25lPWUsdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9pbnB1dE1vZGFsaXR5RGV0ZWN0b3I9cix0aGlzLl9vcmlnaW49bnVsbCx0aGlzLl93aW5kb3dGb2N1c2VkPSExLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPSExLHRoaXMuX2VsZW1lbnRJbmZvPW5ldyBNYXAsdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50PTAsdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQ9bmV3IE1hcCx0aGlzLl93aW5kb3dGb2N1c0xpc3RlbmVyPSgpPT57dGhpcy5fd2luZG93Rm9jdXNlZD0hMCx0aGlzLl93aW5kb3dGb2N1c1RpbWVvdXRJZD13aW5kb3cuc2V0VGltZW91dCgoKT0+dGhpcy5fd2luZG93Rm9jdXNlZD0hMSl9LHRoaXMuX3N0b3BJbnB1dE1vZGFsaXR5RGV0ZWN0b3I9bmV3IGtlLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXI9YT0+e2ZvcihsZXQgYz1RYyhhKTtjO2M9Yy5wYXJlbnRFbGVtZW50KSJmb2N1cyI9PT1hLnR5cGU/dGhpcy5fb25Gb2N1cyhhLGMpOnRoaXMuX29uQmx1cihhLGMpfSx0aGlzLl9kb2N1bWVudD1vLHRoaXMuX2RldGVjdGlvbk1vZGU9cz8uZGV0ZWN0aW9uTW9kZXx8MH1tb25pdG9yKGUsaT0hMSl7bGV0IHI9TGEoZSk7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8MSE9PXIubm9kZVR5cGUpcmV0dXJuIFh0KG51bGwpO2xldCBvPWEyKHIpfHx0aGlzLl9nZXREb2N1bWVudCgpLHM9dGhpcy5fZWxlbWVudEluZm8uZ2V0KHIpO2lmKHMpcmV0dXJuIGkmJihzLmNoZWNrQ2hpbGRyZW49ITApLHMuc3ViamVjdDtsZXQgYT17Y2hlY2tDaGlsZHJlbjppLHN1YmplY3Q6bmV3IGtlLHJvb3ROb2RlOm99O3JldHVybiB0aGlzLl9lbGVtZW50SW5mby5zZXQocixhKSx0aGlzLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycyhhKSxhLnN1YmplY3R9c3RvcE1vbml0b3JpbmcoZSl7bGV0IGk9TGEoZSkscj10aGlzLl9lbGVtZW50SW5mby5nZXQoaSk7ciYmKHIuc3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3NldENsYXNzZXMoaSksdGhpcy5fZWxlbWVudEluZm8uZGVsZXRlKGkpLHRoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVycyhyKSl9Zm9jdXNWaWEoZSxpLHIpe2xldCBvPUxhKGUpO289PT10aGlzLl9nZXREb2N1bWVudCgpLmFjdGl2ZUVsZW1lbnQ/dGhpcy5fZ2V0Q2xvc2VzdEVsZW1lbnRzSW5mbyhvKS5mb3JFYWNoKChbYSxsXSk9PnRoaXMuX29yaWdpbkNoYW5nZWQoYSxpLGwpKToodGhpcy5fc2V0T3JpZ2luKGkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmZvY3VzJiZvLmZvY3VzKHIpKX1uZ09uRGVzdHJveSgpe3RoaXMuX2VsZW1lbnRJbmZvLmZvckVhY2goKGUsaSk9PnRoaXMuc3RvcE1vbml0b3JpbmcoaSkpfV9nZXREb2N1bWVudCgpe3JldHVybiB0aGlzLl9kb2N1bWVudHx8ZG9jdW1lbnR9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9nZXREb2N1bWVudCgpLmRlZmF1bHRWaWV3fHx3aW5kb3d9X2dldEZvY3VzT3JpZ2luKGUpe3JldHVybiB0aGlzLl9vcmlnaW4/dGhpcy5fb3JpZ2luRnJvbVRvdWNoSW50ZXJhY3Rpb24/dGhpcy5fc2hvdWxkQmVBdHRyaWJ1dGVkVG9Ub3VjaChlKT8idG91Y2giOiJwcm9ncmFtIjp0aGlzLl9vcmlnaW46dGhpcy5fd2luZG93Rm9jdXNlZCYmdGhpcy5fbGFzdEZvY3VzT3JpZ2luP3RoaXMuX2xhc3RGb2N1c09yaWdpbjplJiZ0aGlzLl9pc0xhc3RJbnRlcmFjdGlvbkZyb21JbnB1dExhYmVsKGUpPyJtb3VzZSI6InByb2dyYW0ifV9zaG91bGRCZUF0dHJpYnV0ZWRUb1RvdWNoKGUpe3JldHVybiAxPT09dGhpcy5fZGV0ZWN0aW9uTW9kZXx8ISFlPy5jb250YWlucyh0aGlzLl9pbnB1dE1vZGFsaXR5RGV0ZWN0b3IuX21vc3RSZWNlbnRUYXJnZXQpfV9zZXRDbGFzc2VzKGUsaSl7ZS5jbGFzc0xpc3QudG9nZ2xlKCJjZGstZm9jdXNlZCIsISFpKSxlLmNsYXNzTGlzdC50b2dnbGUoImNkay10b3VjaC1mb2N1c2VkIiwidG91Y2giPT09aSksZS5jbGFzc0xpc3QudG9nZ2xlKCJjZGsta2V5Ym9hcmQtZm9jdXNlZCIsImtleWJvYXJkIj09PWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLW1vdXNlLWZvY3VzZWQiLCJtb3VzZSI9PT1pKSxlLmNsYXNzTGlzdC50b2dnbGUoImNkay1wcm9ncmFtLWZvY3VzZWQiLCJwcm9ncmFtIj09PWkpfV9zZXRPcmlnaW4oZSxpPSExKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9vcmlnaW49ZSx0aGlzLl9vcmlnaW5Gcm9tVG91Y2hJbnRlcmFjdGlvbj0idG91Y2giPT09ZSYmaSwwPT09dGhpcy5fZGV0ZWN0aW9uTW9kZSYmKGNsZWFyVGltZW91dCh0aGlzLl9vcmlnaW5UaW1lb3V0SWQpLHRoaXMuX29yaWdpblRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT50aGlzLl9vcmlnaW49bnVsbCx0aGlzLl9vcmlnaW5Gcm9tVG91Y2hJbnRlcmFjdGlvbj82NTA6MSkpfSl9X29uRm9jdXMoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50SW5mby5nZXQoaSksbz1RYyhlKTshcnx8IXIuY2hlY2tDaGlsZHJlbiYmaSE9PW98fHRoaXMuX29yaWdpbkNoYW5nZWQoaSx0aGlzLl9nZXRGb2N1c09yaWdpbihvKSxyKX1fb25CbHVyKGUsaSl7bGV0IHI9dGhpcy5fZWxlbWVudEluZm8uZ2V0KGkpOyFyfHxyLmNoZWNrQ2hpbGRyZW4mJmUucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIE5vZGUmJmkuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KXx8KHRoaXMuX3NldENsYXNzZXMoaSksdGhpcy5fZW1pdE9yaWdpbihyLG51bGwpKX1fZW1pdE9yaWdpbihlLGkpe2Uuc3ViamVjdC5vYnNlcnZlcnMubGVuZ3RoJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT5lLnN1YmplY3QubmV4dChpKSl9X3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKGUpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuO2xldCBpPWUucm9vdE5vZGUscj10aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5nZXQoaSl8fDA7cnx8dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aS5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixkMiksaS5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLGQyKX0pLHRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LnNldChpLHIrMSksMT09Kyt0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQmJih0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9nZXRXaW5kb3coKS5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fd2luZG93Rm9jdXNMaXN0ZW5lcil9KSx0aGlzLl9pbnB1dE1vZGFsaXR5RGV0ZWN0b3IubW9kYWxpdHlEZXRlY3RlZC5waXBlKHN0KHRoaXMuX3N0b3BJbnB1dE1vZGFsaXR5RGV0ZWN0b3IpKS5zdWJzY3JpYmUobz0+e3RoaXMuX3NldE9yaWdpbihvLCEwKX0pKX1fcmVtb3ZlR2xvYmFsTGlzdGVuZXJzKGUpe2xldCBpPWUucm9vdE5vZGU7aWYodGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuaGFzKGkpKXtsZXQgcj10aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5nZXQoaSk7cj4xP3RoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LnNldChpLHItMSk6KGkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXIsZDIpLGkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixkMiksdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuZGVsZXRlKGkpKX0tLXRoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudHx8KHRoaXMuX2dldFdpbmRvdygpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl93aW5kb3dGb2N1c0xpc3RlbmVyKSx0aGlzLl9zdG9wSW5wdXRNb2RhbGl0eURldGVjdG9yLm5leHQoKSxjbGVhclRpbWVvdXQodGhpcy5fd2luZG93Rm9jdXNUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0aGlzLl9vcmlnaW5UaW1lb3V0SWQpKX1fb3JpZ2luQ2hhbmdlZChlLGkscil7dGhpcy5fc2V0Q2xhc3NlcyhlLGkpLHRoaXMuX2VtaXRPcmlnaW4ocixpKSx0aGlzLl9sYXN0Rm9jdXNPcmlnaW49aX1fZ2V0Q2xvc2VzdEVsZW1lbnRzSW5mbyhlKXtsZXQgaT1bXTtyZXR1cm4gdGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaCgocixvKT0+eyhvPT09ZXx8ci5jaGVja0NoaWxkcmVuJiZvLmNvbnRhaW5zKGUpKSYmaS5wdXNoKFtvLHJdKX0pLGl9X2lzTGFzdEludGVyYWN0aW9uRnJvbUlucHV0TGFiZWwoZSl7bGV0e19tb3N0UmVjZW50VGFyZ2V0OmksbW9zdFJlY2VudE1vZGFsaXR5OnJ9PXRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3RvcjtpZigibW91c2UiIT09cnx8IWl8fGk9PT1lfHwiSU5QVVQiIT09ZS5ub2RlTmFtZSYmIlRFWFRBUkVBIiE9PWUubm9kZU5hbWV8fGUuZGlzYWJsZWQpcmV0dXJuITE7bGV0IG89ZS5sYWJlbHM7aWYobylmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKylpZihvW3NdLmNvbnRhaW5zKGkpKXJldHVybiEwO3JldHVybiExfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKF90KSxqKG9pKSxqKE5SZSksaihIdCw4KSxqKEhSZSw4KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksbnRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fZm9jdXNPcmlnaW49bnVsbCx0aGlzLmNka0ZvY3VzQ2hhbmdlPW5ldyBHfWdldCBmb2N1c09yaWdpbigpe3JldHVybiB0aGlzLl9mb2N1c09yaWdpbn1uZ0FmdGVyVmlld0luaXQoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fbW9uaXRvclN1YnNjcmlwdGlvbj10aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcihlLDE9PT1lLm5vZGVUeXBlJiZlLmhhc0F0dHJpYnV0ZSgiY2RrTW9uaXRvclN1YnRyZWVGb2N1cyIpKS5zdWJzY3JpYmUoaT0+e3RoaXMuX2ZvY3VzT3JpZ2luPWksdGhpcy5jZGtGb2N1c0NoYW5nZS5lbWl0KGkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fbW9uaXRvclN1YnNjcmlwdGlvbiYmdGhpcy5fbW9uaXRvclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKEZyKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNka01vbml0b3JFbGVtZW50Rm9jdXMiLCIiXSxbIiIsImNka01vbml0b3JTdWJ0cmVlRm9jdXMiLCIiXV0sb3V0cHV0czp7Y2RrRm9jdXNDaGFuZ2U6ImNka0ZvY3VzQ2hhbmdlIn0sZXhwb3J0QXM6WyJjZGtNb25pdG9yRm9jdXMiXX0pLG59KSgpLEtlZT0iY2RrLWhpZ2gtY29udHJhc3QtYmxhY2stb24td2hpdGUiLFplZT0iY2RrLWhpZ2gtY29udHJhc3Qtd2hpdGUtb24tYmxhY2siLG1IPSJjZGstaGlnaC1jb250cmFzdC1hY3RpdmUiLENIPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbj1qbyhKbSkub2JzZXJ2ZSgiKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSkiKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9oYXNDaGVja2VkSGlnaENvbnRyYXN0TW9kZSYmKHRoaXMuX2hhc0NoZWNrZWRIaWdoQ29udHJhc3RNb2RlPSExLHRoaXMuX2FwcGx5Qm9keUhpZ2hDb250cmFzdE1vZGVDc3NDbGFzc2VzKCkpfSl9Z2V0SGlnaENvbnRyYXN0TW9kZSgpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIDA7bGV0IGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9InJnYigxLDIsMykiLGUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO2xldCBpPXRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cscj1pJiZpLmdldENvbXB1dGVkU3R5bGU/aS5nZXRDb21wdXRlZFN0eWxlKGUpOm51bGwsbz0ociYmci5iYWNrZ3JvdW5kQ29sb3J8fCIiKS5yZXBsYWNlKC8gL2csIiIpO3N3aXRjaChlLnJlbW92ZSgpLG8pe2Nhc2UicmdiKDAsMCwwKSI6Y2FzZSJyZ2IoNDUsNTAsNTQpIjpjYXNlInJnYigzMiwzMiwzMikiOnJldHVybiAyO2Nhc2UicmdiKDI1NSwyNTUsMjU1KSI6Y2FzZSJyZ2IoMjU1LDI1MCwyMzkpIjpyZXR1cm4gMX1yZXR1cm4gMH1uZ09uRGVzdHJveSgpe3RoaXMuX2JyZWFrcG9pbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKXtpZighdGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGUmJnRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmdGhpcy5fZG9jdW1lbnQuYm9keSl7bGV0IGU9dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3Q7ZS5yZW1vdmUobUgsS2VlLFplZSksdGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITA7bGV0IGk9dGhpcy5nZXRIaWdoQ29udHJhc3RNb2RlKCk7MT09PWk/ZS5hZGQobUgsS2VlKToyPT09aSYmZS5hZGQobUgsWmVlKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGoob2kpLGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxFdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2UuX2FwcGx5Qm9keUhpZ2hDb250cmFzdE1vZGVDc3NDbGFzc2VzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooQ0gpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbb2RdfSksbn0pKCksVVJlPW5ldyBwZSgiY2RrLWRpci1kb2MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIGpvKEh0KX19KSxqUmU9L14oYXJ8Y2tifGR2fGhlfGl3fGZhfG5xb3xwc3xzZHx1Z3x1cnx5aXwuKlstX10oQWRsbXxBcmFifEhlYnJ8Tmtvb3xSb2hnfFRoYWEpKSg/IS4qWy1fXShMYXRufEN5cmwpKCR8LXxfKSkoJHwtfF8pL2ksJGk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtpZih0aGlzLnZhbHVlPSJsdHIiLHRoaXMuY2hhbmdlPW5ldyBHLGUpe2xldCByPWUuZG9jdW1lbnRFbGVtZW50P2UuZG9jdW1lbnRFbGVtZW50LmRpcjpudWxsO3RoaXMudmFsdWU9ZnVuY3Rpb24obil7bGV0IHQ9bj8udG9Mb3dlckNhc2UoKXx8IiI7cmV0dXJuImF1dG8iPT09dCYmdHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8ubGFuZ3VhZ2U/alJlLnRlc3QobmF2aWdhdG9yLmxhbmd1YWdlKT8icnRsIjoibHRyIjoicnRsIj09PXQ/InJ0bCI6Imx0ciJ9KChlLmJvZHk/ZS5ib2R5LmRpcjpudWxsKXx8cnx8Imx0ciIpfX1uZ09uRGVzdHJveSgpe3RoaXMuY2hhbmdlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooVVJlLDgpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxEaD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCk7ZnVuY3Rpb24gV1JlKG4sdCl7aWYoMSZuJiZPKDAsIm1hdC1wc2V1ZG8tY2hlY2tib3giLDQpLDImbil7bGV0IGU9UygpO3koInN0YXRlIixlLnNlbGVjdGVkPyJjaGVja2VkIjoidW5jaGVja2VkIikoImRpc2FibGVkIixlLmRpc2FibGVkKX19ZnVuY3Rpb24gcVJlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiw1KSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSxqZSgiKCIsZS5ncm91cC5sYWJlbCwiKSIpfX12YXIgWVJlPVsiKiJdLHN0ZT0obmV3IEljKCIxNC4yLjciKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5TVEFOREFSRF9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIixuLkRFQ0VMRVJBVElPTl9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuMCwwLjAsMC4yLDEpIixuLkFDQ0VMRVJBVElPTl9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMSwxKSIsbi5TSEFSUF9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC42LDEpIixufSkoKSksYXRlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLkNPTVBMRVg9IjM3NW1zIixuLkVOVEVSSU5HPSIyMjVtcyIsbi5FWElUSU5HPSIxOTVtcyIsbn0pKCksUVJlPW5ldyBwZSgibWF0LXNhbml0eS1jaGVja3MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSksbG49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fc2FuaXR5Q2hlY2tzPWksdGhpcy5fZG9jdW1lbnQ9cix0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzPSExLGUuX2FwcGx5Qm9keUhpZ2hDb250cmFzdE1vZGVDc3NDbGFzc2VzKCksdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrc3x8KHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITApfV9jaGVja0lzRW5hYmxlZChlKXtyZXR1cm4hWk0oKSYmKCJib29sZWFuIj09dHlwZW9mIHRoaXMuX3Nhbml0eUNoZWNrcz90aGlzLl9zYW5pdHlDaGVja3M6ISF0aGlzLl9zYW5pdHlDaGVja3NbZV0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKENIKSxqKFFSZSw4KSxqKEh0KSl9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W0RoLERoXX0pLG59KSgpO2Z1bmN0aW9uIHNvKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZWQ9ITF9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD1SdCh0KX19fWZ1bmN0aW9uIGtvKG4sdCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSx0aGlzLmRlZmF1bHRDb2xvcj10LHRoaXMuY29sb3I9dH1nZXQgY29sb3IoKXtyZXR1cm4gdGhpcy5fY29sb3J9c2V0IGNvbG9yKGUpe2xldCBpPWV8fHRoaXMuZGVmYXVsdENvbG9yO2khPT10aGlzLl9jb2xvciYmKHRoaXMuX2NvbG9yJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShgbWF0LSR7dGhpcy5fY29sb3J9YCksaSYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYG1hdC0ke2l9YCksdGhpcy5fY29sb3I9aSl9fX1mdW5jdGlvbiBxbyhuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX2Rpc2FibGVSaXBwbGU9ITF9Z2V0IGRpc2FibGVSaXBwbGUoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVJpcHBsZX1zZXQgZGlzYWJsZVJpcHBsZSh0KXt0aGlzLl9kaXNhYmxlUmlwcGxlPVJ0KHQpfX19ZnVuY3Rpb24gb2Mobix0PTApe3JldHVybiBjbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoLi4uZSl7c3VwZXIoLi4uZSksdGhpcy5fdGFiSW5kZXg9dCx0aGlzLmRlZmF1bHRUYWJJbmRleD10fWdldCB0YWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPy0xOnRoaXMuX3RhYkluZGV4fXNldCB0YWJJbmRleChlKXt0aGlzLl90YWJJbmRleD1udWxsIT1lP0JpKGUpOnRoaXMuZGVmYXVsdFRhYkluZGV4fX19ZnVuY3Rpb24gRHYobil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLmVycm9yU3RhdGU9ITF9dXBkYXRlRXJyb3JTdGF0ZSgpe2xldCB0PXRoaXMuZXJyb3JTdGF0ZSxvPSh0aGlzLmVycm9yU3RhdGVNYXRjaGVyfHx0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIpLmlzRXJyb3JTdGF0ZSh0aGlzLm5nQ29udHJvbD90aGlzLm5nQ29udHJvbC5jb250cm9sOm51bGwsdGhpcy5fcGFyZW50Rm9ybUdyb3VwfHx0aGlzLl9wYXJlbnRGb3JtKTtvIT09dCYmKHRoaXMuZXJyb3JTdGF0ZT1vLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9fX1mdW5jdGlvbiBtMihuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX2lzSW5pdGlhbGl6ZWQ9ITEsdGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzPVtdLHRoaXMuaW5pdGlhbGl6ZWQ9bmV3IHVuKGU9Pnt0aGlzLl9pc0luaXRpYWxpemVkP3RoaXMuX25vdGlmeVN1YnNjcmliZXIoZSk6dGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzLnB1c2goZSl9KX1fbWFya0luaXRpYWxpemVkKCl7dGhpcy5faXNJbml0aWFsaXplZD0hMCx0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnMuZm9yRWFjaCh0aGlzLl9ub3RpZnlTdWJzY3JpYmVyKSx0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnM9bnVsbH1fbm90aWZ5U3Vic2NyaWJlcih0KXt0Lm5leHQoKSx0LmNvbXBsZXRlKCl9fX1uZXcgcGUoIk1BVF9EQVRFX0xPQ0FMRSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gam8oV2QpfX0pLG5ldyBwZSgibWF0LWRhdGUtZm9ybWF0cyIpO3ZhciBjZD0oKCk9PntjbGFzcyBue2lzRXJyb3JTdGF0ZShlLGkpe3JldHVybiEhKGUmJmUuaW52YWxpZCYmKGUudG91Y2hlZHx8aSYmaS5zdWJtaXR0ZWQpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksaXRlPXtlbnRlckR1cmF0aW9uOjIyNSxleGl0RHVyYXRpb246MTUwfSxNSD1sYSh7cGFzc2l2ZTohMH0pLHJ0ZT1bIm1vdXNlZG93biIsInRvdWNoc3RhcnQiXSxvdGU9WyJtb3VzZXVwIiwibW91c2VsZWF2ZSIsInRvdWNoZW5kIiwidG91Y2hjYW5jZWwiXSxUdj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl90YXJnZXQ9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2FjdGl2ZVJpcHBsZXM9bmV3IE1hcCx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSExLHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1MYShpKSl9ZmFkZUluUmlwcGxlKHQsZSxpPXt9KXtsZXQgcj10aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX2NvbnRhaW5lclJlY3R8fHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz17Li4uaXRlLC4uLmkuYW5pbWF0aW9ufTtpLmNlbnRlcmVkJiYodD1yLmxlZnQrci53aWR0aC8yLGU9ci50b3Arci5oZWlnaHQvMik7bGV0IHM9aS5yYWRpdXN8fGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1NYXRoLm1heChNYXRoLmFicyhuLWUubGVmdCksTWF0aC5hYnMobi1lLnJpZ2h0KSkscj1NYXRoLm1heChNYXRoLmFicyh0LWUudG9wKSxNYXRoLmFicyh0LWUuYm90dG9tKSk7cmV0dXJuIE1hdGguc3FydChpKmkrcipyKX0odCxlLHIpLGE9dC1yLmxlZnQsbD1lLXIudG9wLGM9by5lbnRlckR1cmF0aW9uLHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jbGFzc0xpc3QuYWRkKCJtYXQtcmlwcGxlLWVsZW1lbnQiKSx1LnN0eWxlLmxlZnQ9YS1zKyJweCIsdS5zdHlsZS50b3A9bC1zKyJweCIsdS5zdHlsZS5oZWlnaHQ9MipzKyJweCIsdS5zdHlsZS53aWR0aD0yKnMrInB4IixudWxsIT1pLmNvbG9yJiYodS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9aS5jb2xvciksdS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249YCR7Y31tc2AsdGhpcy5fY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh1KTtsZXQgZD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh1KSxoPWQudHJhbnNpdGlvbkR1cmF0aW9uLGY9Im5vbmUiPT09ZC50cmFuc2l0aW9uUHJvcGVydHl8fCIwcyI9PT1ofHwiMHMsIDBzIj09PWgsbT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscj0hMSl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLmNvbmZpZz1pLHRoaXMuX2FuaW1hdGlvbkZvcmNpYmx5RGlzYWJsZWRUaHJvdWdoQ3NzPXIsdGhpcy5zdGF0ZT0zfWZhZGVPdXQoKXt0aGlzLl9yZW5kZXJlci5mYWRlT3V0UmlwcGxlKHRoaXMpfX0odGhpcyx1LGksZik7dS5zdHlsZS50cmFuc2Zvcm09InNjYWxlM2QoMSwgMSwgMSkiLG0uc3RhdGU9MCxpLnBlcnNpc3RlbnR8fCh0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW0pO2xldCB4PW51bGw7cmV0dXJuIWYmJihjfHxvLmV4aXREdXJhdGlvbikmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCBnPSgpPT50aGlzLl9maW5pc2hSaXBwbGVUcmFuc2l0aW9uKG0pLGI9KCk9PnRoaXMuX2Rlc3Ryb3lSaXBwbGUobSk7dS5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixnKSx1LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25jYW5jZWwiLGIpLHg9e29uVHJhbnNpdGlvbkVuZDpnLG9uVHJhbnNpdGlvbkNhbmNlbDpifX0pLHRoaXMuX2FjdGl2ZVJpcHBsZXMuc2V0KG0seCksKGZ8fCFjKSYmdGhpcy5fZmluaXNoUmlwcGxlVHJhbnNpdGlvbihtKSxtfWZhZGVPdXRSaXBwbGUodCl7aWYoMj09PXQuc3RhdGV8fDM9PT10LnN0YXRlKXJldHVybjtsZXQgZT10LmVsZW1lbnQsaT17Li4uaXRlLC4uLnQuY29uZmlnLmFuaW1hdGlvbn07ZS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249YCR7aS5leGl0RHVyYXRpb259bXNgLGUuc3R5bGUub3BhY2l0eT0iMCIsdC5zdGF0ZT0yLCh0Ll9hbmltYXRpb25Gb3JjaWJseURpc2FibGVkVGhyb3VnaENzc3x8IWkuZXhpdER1cmF0aW9uKSYmdGhpcy5fZmluaXNoUmlwcGxlVHJhbnNpdGlvbih0KX1mYWRlT3V0QWxsKCl7dGhpcy5fZ2V0QWN0aXZlUmlwcGxlcygpLmZvckVhY2godD0+dC5mYWRlT3V0KCkpfWZhZGVPdXRBbGxOb25QZXJzaXN0ZW50KCl7dGhpcy5fZ2V0QWN0aXZlUmlwcGxlcygpLmZvckVhY2godD0+e3QuY29uZmlnLnBlcnNpc3RlbnR8fHQuZmFkZU91dCgpfSl9c2V0dXBUcmlnZ2VyRXZlbnRzKHQpe2xldCBlPUxhKHQpOyFlfHxlPT09dGhpcy5fdHJpZ2dlckVsZW1lbnR8fCh0aGlzLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCksdGhpcy5fdHJpZ2dlckVsZW1lbnQ9ZSx0aGlzLl9yZWdpc3RlckV2ZW50cyhydGUpKX1oYW5kbGVFdmVudCh0KXsibW91c2Vkb3duIj09PXQudHlwZT90aGlzLl9vbk1vdXNlZG93bih0KToidG91Y2hzdGFydCI9PT10LnR5cGU/dGhpcy5fb25Ub3VjaFN0YXJ0KHQpOnRoaXMuX29uUG9pbnRlclVwKCksdGhpcy5fcG9pbnRlclVwRXZlbnRzUmVnaXN0ZXJlZHx8KHRoaXMuX3JlZ2lzdGVyRXZlbnRzKG90ZSksdGhpcy5fcG9pbnRlclVwRXZlbnRzUmVnaXN0ZXJlZD0hMCl9X2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24odCl7MD09PXQuc3RhdGU/dGhpcy5fc3RhcnRGYWRlT3V0VHJhbnNpdGlvbih0KToyPT09dC5zdGF0ZSYmdGhpcy5fZGVzdHJveVJpcHBsZSh0KX1fc3RhcnRGYWRlT3V0VHJhbnNpdGlvbih0KXtsZXQgZT10PT09dGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZSx7cGVyc2lzdGVudDppfT10LmNvbmZpZzt0LnN0YXRlPTEsIWkmJighZXx8IXRoaXMuX2lzUG9pbnRlckRvd24pJiZ0LmZhZGVPdXQoKX1fZGVzdHJveVJpcHBsZSh0KXtsZXQgZT10aGlzLl9hY3RpdmVSaXBwbGVzLmdldCh0KT8/bnVsbDt0aGlzLl9hY3RpdmVSaXBwbGVzLmRlbGV0ZSh0KSx0aGlzLl9hY3RpdmVSaXBwbGVzLnNpemV8fCh0aGlzLl9jb250YWluZXJSZWN0PW51bGwpLHQ9PT10aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlJiYodGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZT1udWxsKSx0LnN0YXRlPTMsbnVsbCE9PWUmJih0LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsZS5vblRyYW5zaXRpb25FbmQpLHQuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uY2FuY2VsIixlLm9uVHJhbnNpdGlvbkNhbmNlbCkpLHQuZWxlbWVudC5yZW1vdmUoKX1fb25Nb3VzZWRvd24odCl7bGV0IGU9JE0odCksaT10aGlzLl9sYXN0VG91Y2hTdGFydEV2ZW50JiZEYXRlLm5vdygpPHRoaXMuX2xhc3RUb3VjaFN0YXJ0RXZlbnQrODAwOyF0aGlzLl90YXJnZXQucmlwcGxlRGlzYWJsZWQmJiFlJiYhaSYmKHRoaXMuX2lzUG9pbnRlckRvd249ITAsdGhpcy5mYWRlSW5SaXBwbGUodC5jbGllbnRYLHQuY2xpZW50WSx0aGlzLl90YXJnZXQucmlwcGxlQ29uZmlnKSl9X29uVG91Y2hTdGFydCh0KXtpZighdGhpcy5fdGFyZ2V0LnJpcHBsZURpc2FibGVkJiYhZXcodCkpe3RoaXMuX2xhc3RUb3VjaFN0YXJ0RXZlbnQ9RGF0ZS5ub3coKSx0aGlzLl9pc1BvaW50ZXJEb3duPSEwO2xldCBlPXQuY2hhbmdlZFRvdWNoZXM7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdGhpcy5mYWRlSW5SaXBwbGUoZVtpXS5jbGllbnRYLGVbaV0uY2xpZW50WSx0aGlzLl90YXJnZXQucmlwcGxlQ29uZmlnKX19X29uUG9pbnRlclVwKCl7IXRoaXMuX2lzUG9pbnRlckRvd258fCh0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9PnshdC5jb25maWcucGVyc2lzdGVudCYmKDE9PT10LnN0YXRlfHx0LmNvbmZpZy50ZXJtaW5hdGVPblBvaW50ZXJVcCYmMD09PXQuc3RhdGUpJiZ0LmZhZGVPdXQoKX0pKX1fcmVnaXN0ZXJFdmVudHModCl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dC5mb3JFYWNoKGU9Pnt0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGUsdGhpcyxNSCl9KX0pfV9nZXRBY3RpdmVSaXBwbGVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYWN0aXZlUmlwcGxlcy5rZXlzKCkpfV9yZW1vdmVUcmlnZ2VyRXZlbnRzKCl7dGhpcy5fdHJpZ2dlckVsZW1lbnQmJihydGUuZm9yRWFjaCh0PT57dGhpcy5fdHJpZ2dlckVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LHRoaXMsTUgpfSksdGhpcy5fcG9pbnRlclVwRXZlbnRzUmVnaXN0ZXJlZCYmb3RlLmZvckVhY2godD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLE1IKX0pKX19LGcyPW5ldyBwZSgibWF0LXJpcHBsZS1nbG9iYWwtb3B0aW9ucyIpLFlvPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fYW5pbWF0aW9uTW9kZT1zLHRoaXMucmFkaXVzPTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPW98fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBUdih0aGlzLGksZSxyKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe2UmJnRoaXMuZmFkZU91dEFsbE5vblBlcnNpc3RlbnQoKSx0aGlzLl9kaXNhYmxlZD1lLHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfWdldCB0cmlnZ2VyKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1zZXQgdHJpZ2dlcihlKXt0aGlzLl90cmlnZ2VyPWUsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9bmdPbkluaXQoKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwLHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfW5nT25EZXN0cm95KCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuX3JlbW92ZVRyaWdnZXJFdmVudHMoKX1mYWRlT3V0QWxsKCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZU91dEFsbCgpfWZhZGVPdXRBbGxOb25QZXJzaXN0ZW50KCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZU91dEFsbE5vblBlcnNpc3RlbnQoKX1nZXQgcmlwcGxlQ29uZmlnKCl7cmV0dXJue2NlbnRlcmVkOnRoaXMuY2VudGVyZWQscmFkaXVzOnRoaXMucmFkaXVzLGNvbG9yOnRoaXMuY29sb3IsYW5pbWF0aW9uOnsuLi50aGlzLl9nbG9iYWxPcHRpb25zLmFuaW1hdGlvbiwuLi4iTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uTW9kZT97ZW50ZXJEdXJhdGlvbjowLGV4aXREdXJhdGlvbjowfTp7fSwuLi50aGlzLmFuaW1hdGlvbn0sdGVybWluYXRlT25Qb2ludGVyVXA6dGhpcy5fZ2xvYmFsT3B0aW9ucy50ZXJtaW5hdGVPblBvaW50ZXJVcH19Z2V0IHJpcHBsZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCEhdGhpcy5fZ2xvYmFsT3B0aW9ucy5kaXNhYmxlZH1fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl7IXRoaXMuZGlzYWJsZWQmJnRoaXMuX2lzSW5pdGlhbGl6ZWQmJnRoaXMuX3JpcHBsZVJlbmRlcmVyLnNldHVwVHJpZ2dlckV2ZW50cyh0aGlzLnRyaWdnZXIpfWxhdW5jaChlLGk9MCxyKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKGUsaSx7Li4udGhpcy5yaXBwbGVDb25maWcsLi4ucn0pOnRoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZSgwLDAsey4uLnRoaXMucmlwcGxlQ29uZmlnLC4uLmV9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSksTShfdCksTShvaSksTShnMiw4KSxNKFBpLDgpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LXJpcHBsZSIsIiJdLFsiIiwibWF0UmlwcGxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LXJpcHBsZSJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZldCgibWF0LXJpcHBsZS11bmJvdW5kZWQiLGkudW5ib3VuZGVkKX0saW5wdXRzOntjb2xvcjpbIm1hdFJpcHBsZUNvbG9yIiwiY29sb3IiXSx1bmJvdW5kZWQ6WyJtYXRSaXBwbGVVbmJvdW5kZWQiLCJ1bmJvdW5kZWQiXSxjZW50ZXJlZDpbIm1hdFJpcHBsZUNlbnRlcmVkIiwiY2VudGVyZWQiXSxyYWRpdXM6WyJtYXRSaXBwbGVSYWRpdXMiLCJyYWRpdXMiXSxhbmltYXRpb246WyJtYXRSaXBwbGVBbmltYXRpb24iLCJhbmltYXRpb24iXSxkaXNhYmxlZDpbIm1hdFJpcHBsZURpc2FibGVkIiwiZGlzYWJsZWQiXSx0cmlnZ2VyOlsibWF0UmlwcGxlVHJpZ2dlciIsInRyaWdnZXIiXX0sZXhwb3J0QXM6WyJtYXRSaXBwbGUiXX0pLG59KSgpLF9sPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltsbixsbl19KSxufSkoKSwkUmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hbmltYXRpb25Nb2RlPWUsdGhpcy5zdGF0ZT0idW5jaGVja2VkIix0aGlzLmRpc2FibGVkPSExfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFBpLDgpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtcHNldWRvLWNoZWNrYm94Il1dLGhvc3RBdHRyczpbMSwibWF0LXBzZXVkby1jaGVja2JveCJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZldCgibWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIiwiaW5kZXRlcm1pbmF0ZSI9PT1pLnN0YXRlKSgibWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkIiwiY2hlY2tlZCI9PT1pLnN0YXRlKSgibWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSl9LGlucHV0czp7c3RhdGU6InN0YXRlIixkaXNhYmxlZDoiZGlzYWJsZWQifSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sc3R5bGVzOlsnLm1hdC1wc2V1ZG8tY2hlY2tib3h7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXI6MnB4IHNvbGlkO2JvcmRlci1yYWRpdXM6MnB4O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSksYmFja2dyb3VuZC1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9Lm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDtjb250ZW50OiIiO2JvcmRlci1ib3R0b206MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjt0cmFuc2l0aW9uOm9wYWNpdHkgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfS5tYXQtcHNldWRvLWNoZWNrYm94Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3guX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LXBzZXVkby1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTo6YWZ0ZXJ7dHJhbnNpdGlvbjpub25lfS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGU6OmFmdGVye3RvcDo1cHg7bGVmdDoxcHg7d2lkdGg6MTBweDtvcGFjaXR5OjE7Ym9yZGVyLXJhZGl1czoycHh9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZDo6YWZ0ZXJ7dG9wOjIuNHB4O2xlZnQ6MXB4O3dpZHRoOjhweDtoZWlnaHQ6M3B4O2JvcmRlci1sZWZ0OjJweCBzb2xpZCBjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO29wYWNpdHk6MTtib3gtc2l6aW5nOmNvbnRlbnQtYm94fSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGVPZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbbG5dfSksbn0pKCksaXc9bmV3IHBlKCJNQVRfT1BUSU9OX1BBUkVOVF9DT01QT05FTlQiKSxydz0oc28oY2xhc3N7fSksbmV3IHBlKCJNYXRPcHRncm91cCIpKSx0T2U9MCxudz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9ITEpe3RoaXMuc291cmNlPXQsdGhpcy5pc1VzZXJJbnB1dD1lfX0sbk9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fZWxlbWVudD1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fcGFyZW50PXIsdGhpcy5ncm91cD1vLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlPSIiLHRoaXMuaWQ9Im1hdC1vcHRpb24tIit0T2UrKyx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlPW5ldyBHLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcga2V9Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Lm11bHRpcGxlfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5ncm91cCYmdGhpcy5ncm91cC5kaXNhYmxlZHx8dGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVJ0KGUpfWdldCBkaXNhYmxlUmlwcGxlKCl7cmV0dXJuISghdGhpcy5fcGFyZW50fHwhdGhpcy5fcGFyZW50LmRpc2FibGVSaXBwbGUpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfWdldCB2aWV3VmFsdWUoKXtyZXR1cm4odGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS50ZXh0Q29udGVudHx8IiIpLnRyaW0oKX1zZWxlY3QoKXt0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCgpKX1kZXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfWZvY3VzKGUsaSl7bGV0IHI9dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKTsiZnVuY3Rpb24iPT10eXBlb2Ygci5mb2N1cyYmci5mb2N1cyhpKX1zZXRBY3RpdmVTdHlsZXMoKXt0aGlzLl9hY3RpdmV8fCh0aGlzLl9hY3RpdmU9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfXNldEluYWN0aXZlU3R5bGVzKCl7dGhpcy5fYWN0aXZlJiYodGhpcy5fYWN0aXZlPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXRMYWJlbCgpe3JldHVybiB0aGlzLnZpZXdWYWx1ZX1faGFuZGxlS2V5ZG93bihlKXsoMTM9PT1lLmtleUNvZGV8fDMyPT09ZS5rZXlDb2RlKSYmIWtyKGUpJiYodGhpcy5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSxlLnByZXZlbnREZWZhdWx0KCkpfV9zZWxlY3RWaWFJbnRlcmFjdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zZWxlY3RlZD0hdGhpcy5tdWx0aXBsZXx8IXRoaXMuX3NlbGVjdGVkLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCghMCkpfV9nZXRBcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZHx8IXRoaXMubXVsdGlwbGUmJm51bGx9X2dldFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/Ii0xIjoiMCJ9X2dldEhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudH1uZ0FmdGVyVmlld0NoZWNrZWQoKXtpZih0aGlzLl9zZWxlY3RlZCl7bGV0IGU9dGhpcy52aWV3VmFsdWU7ZSE9PXRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWUmJih0aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlPWUsdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKSl9fW5nT25EZXN0cm95KCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9X2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudChlPSExKXt0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmVtaXQobmV3IG53KHRoaXMsZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7bmwoKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsaWQ6ImlkIixkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntvblNlbGVjdGlvbkNoYW5nZToib25TZWxlY3Rpb25DaGFuZ2UifX0pLG59KSgpLE9zPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBuT2V7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0obm4pLE0oaXcsOCksTShydyw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LW9wdGlvbiJdXSxob3N0QXR0cnM6WyJyb2xlIiwib3B0aW9uIiwxLCJtYXQtb3B0aW9uIiwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJihfcygiaWQiLGkuaWQpLHplKCJ0YWJpbmRleCIsaS5fZ2V0VGFiSW5kZXgoKSkoImFyaWEtc2VsZWN0ZWQiLGkuX2dldEFyaWFTZWxlY3RlZCgpKSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZC50b1N0cmluZygpKSxldCgibWF0LXNlbGVjdGVkIixpLnNlbGVjdGVkKSgibWF0LW9wdGlvbi1tdWx0aXBsZSIsaS5tdWx0aXBsZSkoIm1hdC1hY3RpdmUiLGkuYWN0aXZlKSgibWF0LW9wdGlvbi1kaXNhYmxlZCIsaS5kaXNhYmxlZCkpfSxleHBvcnRBczpbIm1hdE9wdGlvbiJdLGZlYXR1cmVzOlt0dF0sbmdDb250ZW50U2VsZWN0b3JzOllSZSxkZWNsczo1LHZhcnM6NCxjb25zdHM6W1siY2xhc3MiLCJtYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCIsNCwibmdJZiJdLFsxLCJtYXQtb3B0aW9uLXRleHQiXSxbImNsYXNzIiwiY2RrLXZpc3VhbGx5LWhpZGRlbiIsNCwibmdJZiJdLFsibWF0LXJpcHBsZSIsIiIsMSwibWF0LW9wdGlvbi1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdLFsxLCJtYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCJdLFsxLCJjZGstdmlzdWFsbHktaGlkZGVuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoKSxFKDAsV1JlLDEsMiwibWF0LXBzZXVkby1jaGVja2JveCIsMCksXygxLCJzcGFuIiwxKSxWbigyKSx2KCksRSgzLHFSZSwyLDEsInNwYW4iLDIpLE8oNCwiZGl2IiwzKSksMiZlJiYoeSgibmdJZiIsaS5tdWx0aXBsZSksQygzKSx5KCJuZ0lmIixpLmdyb3VwJiZpLmdyb3VwLl9pbmVydCksQygxKSx5KCJtYXRSaXBwbGVUcmlnZ2VyIixpLl9nZXRIb3N0RWxlbWVudCgpKSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuZGlzYWJsZWR8fGkuZGlzYWJsZVJpcHBsZSkpfSxkZXBlbmRlbmNpZXM6W1lvLEJlLCRSZV0sc3R5bGVzOlsnLm1hdC1vcHRpb257d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bWF4LXdpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7bWF4LXdpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LW9wdGlvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9W2Rpcj1ydGxdIC5tYXQtb3B0aW9ue3RleHQtYWxpZ246cmlnaHR9Lm1hdC1vcHRpb24gLm1hdC1pY29ue21hcmdpbi1yaWdodDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LW9wdGlvbiAubWF0LWljb24gc3Zne3ZlcnRpY2FsLWFsaWduOnRvcH1bZGlyPXJ0bF0gLm1hdC1vcHRpb24gLm1hdC1pY29ue21hcmdpbi1sZWZ0OjE2cHg7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1vcHRpb25bYXJpYS1kaXNhYmxlZD10cnVlXXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LW9wdGdyb3VwIC5tYXQtb3B0aW9uOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSl7cGFkZGluZy1sZWZ0OjMycHh9W2Rpcj1ydGxdIC5tYXQtb3B0Z3JvdXAgLm1hdC1vcHRpb246bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjMycHh9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZTo6YmVmb3Jle2NvbnRlbnQ6IiJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW9wdGlvblthcmlhLWRpc2FibGVkPXRydWVde29wYWNpdHk6LjV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTo6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7d2lkdGg6MTBweDtoZWlnaHQ6MDtib3JkZXItYm90dG9tOnNvbGlkIDEwcHg7Ym9yZGVyLXJhZGl1czoxMHB4fVtkaXI9cnRsXSAuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOjphZnRlcntyaWdodDphdXRvO2xlZnQ6MTZweH0ubWF0LW9wdGlvbi10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtb3B0aW9uIC5tYXQtb3B0aW9uLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveHttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LW9wdGlvbi1wc2V1ZG8tY2hlY2tib3h7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIG93KG4sdCxlKXtpZihlLmxlbmd0aCl7bGV0IGk9dC50b0FycmF5KCkscj1lLnRvQXJyYXkoKSxvPTA7Zm9yKGxldCBzPTA7czxuKzE7cysrKWlbc10uZ3JvdXAmJmlbc10uZ3JvdXA9PT1yW29dJiZvKys7cmV0dXJuIG99cmV0dXJuIDB9ZnVuY3Rpb24gXzIobix0LGUsaSl7cmV0dXJuIG48ZT9uOm4rdD5lK2k/TWF0aC5tYXgoMCxuLWkrdCk6ZX12YXIgQXY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W19sLE1lLGxuLGVPZV19KSxufSkoKSxsdGU9WyJtYXQtYnV0dG9uIiwiIl0sY3RlPVsiKiJdLG9PZT1bIm1hdC1idXR0b24iLCJtYXQtZmxhdC1idXR0b24iLCJtYXQtaWNvbi1idXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIm1hdC1taW5pLWZhYiIsIm1hdC1mYWIiXSxzT2U9a28oc28ocW8oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pKSksX249KCgpPT57Y2xhc3MgbiBleHRlbmRzIHNPZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSksdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fYW5pbWF0aW9uTW9kZT1yLHRoaXMuaXNSb3VuZEJ1dHRvbj10aGlzLl9oYXNIb3N0QXR0cmlidXRlcygibWF0LWZhYiIsIm1hdC1taW5pLWZhYiIpLHRoaXMuaXNJY29uQnV0dG9uPXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtaWNvbi1idXR0b24iKTtmb3IobGV0IG8gb2Ygb09lKXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKG8pJiZ0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmNsYXNzTGlzdC5hZGQobyk7ZS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1idXR0b24tYmFzZSIpLHRoaXMuaXNSb3VuZEJ1dHRvbiYmKHRoaXMuY29sb3I9ImFjY2VudCIpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpfWZvY3VzKGUsaSl7ZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSxlLGkpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoaSl9X2dldEhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X2hhc0hvc3RBdHRyaWJ1dGVzKC4uLmUpe3JldHVybiBlLnNvbWUoaT0+dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5oYXNBdHRyaWJ1dGUoaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKEZyKSxNKFBpLDgpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJidXR0b24iLCJtYXQtYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtZmFiIiwiIl0sWyJidXR0b24iLCJtYXQtbWluaS1mYWIiLCIiXSxbImJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWZsYXQtYnV0dG9uIiwiIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmb3QoWW8sNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5yaXBwbGU9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksZXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkoIm1hdC1idXR0b24tZGlzYWJsZWQiLGkuZGlzYWJsZWQpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGNvbG9yOiJjb2xvciJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIl0sZmVhdHVyZXM6W3R0XSxhdHRyczpsdGUsbmdDb250ZW50U2VsZWN0b3JzOmN0ZSxkZWNsczo0LHZhcnM6NSxjb25zdHM6W1sxLCJtYXQtYnV0dG9uLXdyYXBwZXIiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LWJ1dHRvbi1yaXBwbGUiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwibWF0UmlwcGxlQ2VudGVyZWQiLCJtYXRSaXBwbGVUcmlnZ2VyIl0sWzEsIm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHhpKCksXygwLCJzcGFuIiwwKSxWbigxKSx2KCksTygyLCJzcGFuIiwxKSgzLCJzcGFuIiwyKSksMiZlJiYoQygyKSxldCgibWF0LWJ1dHRvbi1yaXBwbGUtcm91bmQiLGkuaXNSb3VuZEJ1dHRvbnx8aS5pc0ljb25CdXR0b24pLHkoIm1hdFJpcHBsZURpc2FibGVkIixpLl9pc1JpcHBsZURpc2FibGVkKCkpKCJtYXRSaXBwbGVDZW50ZXJlZCIsaS5pc0ljb25CdXR0b24pKCJtYXRSaXBwbGVUcmlnZ2VyIixpLl9nZXRIb3N0RWxlbWVudCgpKSl9LGRlcGVuZGVuY2llczpbWW9dLHN0eWxlczpbIi5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH0ubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowfX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGV9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfS5tYXQtcmFpc2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LXJhaXNlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtcmFpc2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b24uX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dG9wOi0xcHg7bGVmdDotMXB4O3JpZ2h0Oi0xcHg7Ym90dG9tOi0xcHh9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO21pbi13aWR0aDowO2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzowO2ZsZXgtc2hyaW5rOjB9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXJ7cGFkZGluZzoxNnB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LW1pbmktZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXJ7cGFkZGluZzo4cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtaWNvbi1idXR0b257cGFkZGluZzowO21pbi13aWR0aDowO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7ZmxleC1zaHJpbms6MDtsaW5lLWhlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtaWNvbi1idXR0b24gaSwubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntsaW5lLWhlaWdodDoyNHB4fS5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlLC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXR9Lm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGU6bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDIwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDIwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1idXR0b24tcmlwcGxlLXJvdW5ke2JvcmRlci1yYWRpdXM6NTAlO3otaW5kZXg6MX0ubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mbGF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1yYWlzZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPip7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTppbmhlcml0O3dpZHRoOjIuNWVtO2hlaWdodDoyLjVlbX0ubWF0LWZsYXQtYnV0dG9uOjpiZWZvcmUsLm1hdC1yYWlzZWQtYnV0dG9uOjpiZWZvcmUsLm1hdC1mYWI6OmJlZm9yZSwubWF0LW1pbmktZmFiOjpiZWZvcmV7bWFyZ2luOmNhbGMoY2FsYyh2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSArIDJweCkgKiAtMSl9Lm1hdC1zdHJva2VkLWJ1dHRvbjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAzcHgpICogLTEpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZsYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1yYWlzZWQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1pY29uLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZmFiLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1taW5pLWZhYntvdXRsaW5lOnNvbGlkIDFweH0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxJdj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgX257Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoaSxlLHIpLHRoaXMuX25nWm9uZT1vLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cz1zPT57dGhpcy5kaXNhYmxlZCYmKHMucHJldmVudERlZmF1bHQoKSxzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19bmdBZnRlclZpZXdJbml0KCl7c3VwZXIubmdBZnRlclZpZXdJbml0KCksdGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFsdERpc2FibGVkRXZlbnRzKX0pOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFsdERpc2FibGVkRXZlbnRzKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9oYWx0RGlzYWJsZWRFdmVudHMpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKEZyKSxNKFJlKSxNKFBpLDgpLE0oX3QsOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImEiLCJtYXQtYnV0dG9uIiwiIl0sWyJhIiwibWF0LXJhaXNlZC1idXR0b24iLCIiXSxbImEiLCJtYXQtaWNvbi1idXR0b24iLCIiXSxbImEiLCJtYXQtZmFiIiwiIl0sWyJhIiwibWF0LW1pbmktZmFiIiwiIl0sWyJhIiwibWF0LXN0cm9rZWQtYnV0dG9uIiwiIl0sWyJhIiwibWF0LWZsYXQtYnV0dG9uIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiYoemUoInRhYmluZGV4IixpLmRpc2FibGVkPy0xOmkudGFiSW5kZXgpKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQudG9TdHJpbmcoKSksZXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkoIm1hdC1idXR0b24tZGlzYWJsZWQiLGkuZGlzYWJsZWQpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGNvbG9yOiJjb2xvciIsdGFiSW5kZXg6InRhYkluZGV4In0sZXhwb3J0QXM6WyJtYXRCdXR0b24iLCJtYXRBbmNob3IiXSxmZWF0dXJlczpbdHRdLGF0dHJzOmx0ZSxuZ0NvbnRlbnRTZWxlY3RvcnM6Y3RlLGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzEsIm1hdC1idXR0b24td3JhcHBlciJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoKSxfKDAsInNwYW4iLDApLFZuKDEpLHYoKSxPKDIsInNwYW4iLDEpKDMsInNwYW4iLDIpKSwyJmUmJihDKDIpLGV0KCJtYXQtYnV0dG9uLXJpcHBsZS1yb3VuZCIsaS5pc1JvdW5kQnV0dG9ufHxpLmlzSWNvbkJ1dHRvbikseSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZUNlbnRlcmVkIixpLmlzSWNvbkJ1dHRvbikoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2dldEhvc3RFbGVtZW50KCkpKX0sZGVwZW5kZW5jaWVzOltZb10sc3R5bGVzOlsiLm1hdC1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowfS5tYXQtYnV0dG9uOmhvdmVyOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uOmhvdmVyOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4wNH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtYnV0dG9uOmhvdmVyOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uOmhvdmVyOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9fS5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtcmFpc2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtcmFpc2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtc3Ryb2tlZC1idXR0b257Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7cGFkZGluZzowIDE1cHg7bGluZS1oZWlnaHQ6MzRweH0ubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0b3A6LTFweDtsZWZ0Oi0xcHg7cmlnaHQ6LTFweDtib3R0b206LTFweH0ubWF0LWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjE2cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtbWluaS1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO21pbi13aWR0aDowO2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7cGFkZGluZzowO2ZsZXgtc2hyaW5rOjB9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1taW5pLWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtbWluaS1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1pY29uLWJ1dHRvbntwYWRkaW5nOjA7bWluLXdpZHRoOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1pY29uLWJ1dHRvbiBpLC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX0ubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmR7Ym9yZGVyLXJhZGl1czo1MCU7ei1pbmRleDoxfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZsYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXJhaXNlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOmluaGVyaXQ7d2lkdGg6Mi41ZW07aGVpZ2h0OjIuNWVtfS5tYXQtZmxhdC1idXR0b246OmJlZm9yZSwubWF0LXJhaXNlZC1idXR0b246OmJlZm9yZSwubWF0LWZhYjo6YmVmb3JlLC5tYXQtbWluaS1mYWI6OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgMnB4KSAqIC0xKX0ubWF0LXN0cm9rZWQtYnV0dG9uOjpiZWZvcmV7bWFyZ2luOmNhbGMoY2FsYyh2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSArIDNweCkgKiAtMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZmxhdC1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXJhaXNlZC1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWljb24tYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mYWIsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1pbmktZmFie291dGxpbmU6c29saWQgMXB4fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFBuPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltfbCxsbixsbl19KSxufSkoKSxQdj1jbGFzc3t9LHYyPWNsYXNzIGV4dGVuZHMgUHZ7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9kYXRhPXR9Y29ubmVjdCgpe3JldHVybiBheCh0aGlzLl9kYXRhKT90aGlzLl9kYXRhOlh0KHRoaXMuX2RhdGEpfWRpc2Nvbm5lY3QoKXt9fSx5Mj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudmlld0NhY2hlU2l6ZT0yMCx0aGlzLl92aWV3Q2FjaGU9W119YXBwbHlDaGFuZ2VzKHQsZSxpLHIsbyl7dC5mb3JFYWNoT3BlcmF0aW9uKChzLGEsbCk9PntsZXQgYyx1O251bGw9PXMucHJldmlvdXNJbmRleD8oYz10aGlzLl9pbnNlcnRWaWV3KCgpPT5pKHMsYSxsKSxsLGUscihzKSksdT1jPzE6MCk6bnVsbD09bD8odGhpcy5fZGV0YWNoQW5kQ2FjaGVWaWV3KGEsZSksdT0zKTooYz10aGlzLl9tb3ZlVmlldyhhLGwsZSxyKHMpKSx1PTIpLG8mJm8oe2NvbnRleHQ6Yz8uY29udGV4dCxvcGVyYXRpb246dSxyZWNvcmQ6c30pfSl9ZGV0YWNoKCl7Zm9yKGxldCB0IG9mIHRoaXMuX3ZpZXdDYWNoZSl0LmRlc3Ryb3koKTt0aGlzLl92aWV3Q2FjaGU9W119X2luc2VydFZpZXcodCxlLGkscil7bGV0IG89dGhpcy5faW5zZXJ0Vmlld0Zyb21DYWNoZShlLGkpO2lmKG8pcmV0dXJuIHZvaWQoby5jb250ZXh0LiRpbXBsaWNpdD1yKTtsZXQgcz10KCk7cmV0dXJuIGkuY3JlYXRlRW1iZWRkZWRWaWV3KHMudGVtcGxhdGVSZWYscy5jb250ZXh0LHMuaW5kZXgpfV9kZXRhY2hBbmRDYWNoZVZpZXcodCxlKXtsZXQgaT1lLmRldGFjaCh0KTt0aGlzLl9tYXliZUNhY2hlVmlldyhpLGUpfV9tb3ZlVmlldyh0LGUsaSxyKXtsZXQgbz1pLmdldCh0KTtyZXR1cm4gaS5tb3ZlKG8sZSksby5jb250ZXh0LiRpbXBsaWNpdD1yLG99X21heWJlQ2FjaGVWaWV3KHQsZSl7aWYodGhpcy5fdmlld0NhY2hlLmxlbmd0aDx0aGlzLnZpZXdDYWNoZVNpemUpdGhpcy5fdmlld0NhY2hlLnB1c2godCk7ZWxzZXtsZXQgaT1lLmluZGV4T2YodCk7LTE9PT1pP3QuZGVzdHJveSgpOmUucmVtb3ZlKGkpfX1faW5zZXJ0Vmlld0Zyb21DYWNoZSh0LGUpe2xldCBpPXRoaXMuX3ZpZXdDYWNoZS5wb3AoKTtyZXR1cm4gaSYmZS5pbnNlcnQoaSx0KSxpfHxudWxsfX0sQWg9Y2xhc3N7Y29uc3RydWN0b3IodD0hMSxlLGk9ITAscil7dGhpcy5fbXVsdGlwbGU9dCx0aGlzLl9lbWl0Q2hhbmdlcz1pLHRoaXMuY29tcGFyZVdpdGg9cix0aGlzLl9zZWxlY3Rpb249bmV3IFNldCx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0PVtdLHRoaXMuX3NlbGVjdGVkVG9FbWl0PVtdLHRoaXMuY2hhbmdlZD1uZXcga2UsZSYmZS5sZW5ndGgmJih0P2UuZm9yRWFjaChvPT50aGlzLl9tYXJrU2VsZWN0ZWQobykpOnRoaXMuX21hcmtTZWxlY3RlZChlWzBdKSx0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGg9MCl9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfHwodGhpcy5fc2VsZWN0ZWQ9QXJyYXkuZnJvbSh0aGlzLl9zZWxlY3Rpb24udmFsdWVzKCkpKSx0aGlzLl9zZWxlY3RlZH1zZWxlY3QoLi4udCl7dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpLHQuZm9yRWFjaChpPT50aGlzLl9tYXJrU2VsZWN0ZWQoaSkpO2xldCBlPXRoaXMuX2hhc1F1ZXVlZENoYW5nZXMoKTtyZXR1cm4gdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksZX1kZXNlbGVjdCguLi50KXt0aGlzLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQodCksdC5mb3JFYWNoKGk9PnRoaXMuX3VubWFya1NlbGVjdGVkKGkpKTtsZXQgZT10aGlzLl9oYXNRdWV1ZWRDaGFuZ2VzKCk7cmV0dXJuIHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpLGV9c2V0U2VsZWN0aW9uKC4uLnQpe3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KTtsZXQgZT10aGlzLnNlbGVjdGVkLGk9bmV3IFNldCh0KTt0LmZvckVhY2gobz0+dGhpcy5fbWFya1NlbGVjdGVkKG8pKSxlLmZpbHRlcihvPT4haS5oYXMobykpLmZvckVhY2gobz0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQobykpO2xldCByPXRoaXMuX2hhc1F1ZXVlZENoYW5nZXMoKTtyZXR1cm4gdGhpcy5fZW1pdENoYW5nZUV2ZW50KCkscn10b2dnbGUodCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0KT90aGlzLmRlc2VsZWN0KHQpOnRoaXMuc2VsZWN0KHQpfWNsZWFyKHQ9ITApe3RoaXMuX3VubWFya0FsbCgpO2xldCBlPXRoaXMuX2hhc1F1ZXVlZENoYW5nZXMoKTtyZXR1cm4gdCYmdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksZX1pc1NlbGVjdGVkKHQpe2lmKHRoaXMuY29tcGFyZVdpdGgpe2ZvcihsZXQgZSBvZiB0aGlzLl9zZWxlY3Rpb24paWYodGhpcy5jb21wYXJlV2l0aChlLHQpKXJldHVybiEwO3JldHVybiExfXJldHVybiB0aGlzLl9zZWxlY3Rpb24uaGFzKHQpfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuX3NlbGVjdGlvbi5zaXplfWhhc1ZhbHVlKCl7cmV0dXJuIXRoaXMuaXNFbXB0eSgpfXNvcnQodCl7dGhpcy5fbXVsdGlwbGUmJnRoaXMuc2VsZWN0ZWQmJnRoaXMuX3NlbGVjdGVkLnNvcnQodCl9aXNNdWx0aXBsZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1fZW1pdENoYW5nZUV2ZW50KCl7dGhpcy5fc2VsZWN0ZWQ9bnVsbCwodGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RofHx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0Lmxlbmd0aCkmJih0aGlzLmNoYW5nZWQubmV4dCh7c291cmNlOnRoaXMsYWRkZWQ6dGhpcy5fc2VsZWN0ZWRUb0VtaXQscmVtb3ZlZDp0aGlzLl9kZXNlbGVjdGVkVG9FbWl0fSksdGhpcy5fZGVzZWxlY3RlZFRvRW1pdD1bXSx0aGlzLl9zZWxlY3RlZFRvRW1pdD1bXSl9X21hcmtTZWxlY3RlZCh0KXt0aGlzLmlzU2VsZWN0ZWQodCl8fCh0aGlzLl9tdWx0aXBsZXx8dGhpcy5fdW5tYXJrQWxsKCksdGhpcy5pc1NlbGVjdGVkKHQpfHx0aGlzLl9zZWxlY3Rpb24uYWRkKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9zZWxlY3RlZFRvRW1pdC5wdXNoKHQpKX1fdW5tYXJrU2VsZWN0ZWQodCl7dGhpcy5pc1NlbGVjdGVkKHQpJiYodGhpcy5fc2VsZWN0aW9uLmRlbGV0ZSh0KSx0aGlzLl9lbWl0Q2hhbmdlcyYmdGhpcy5fZGVzZWxlY3RlZFRvRW1pdC5wdXNoKHQpKX1fdW5tYXJrQWxsKCl7dGhpcy5pc0VtcHR5KCl8fHRoaXMuX3NlbGVjdGlvbi5mb3JFYWNoKHQ9PnRoaXMuX3VubWFya1NlbGVjdGVkKHQpKX1fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpe31faGFzUXVldWVkQ2hhbmdlcygpe3JldHVybiEoIXRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQubGVuZ3RoJiYhdGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RoKX19LFNIPW5ldyBwZSgiX1ZpZXdSZXBlYXRlciIpLGFPZT1bImNvbnRlbnRXcmFwcGVyIl0sbE9lPVsiKiJdLGh0ZT1uZXcgcGUoIlZJUlRVQUxfU0NST0xMX1NUUkFURUdZIik7ZnVuY3Rpb24gY09lKG4pe3JldHVybiBuLl9zY3JvbGxTdHJhdGVneX12YXIgYjI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2l0ZW1TaXplPTIwLHRoaXMuX21pbkJ1ZmZlclB4PTEwMCx0aGlzLl9tYXhCdWZmZXJQeD0yMDAsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBrZSx0aGlzLnNjcm9sbGVkSW5kZXhDaGFuZ2U9dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5waXBlKHlpKCkpLHRoaXMuX3ZpZXdwb3J0PW51bGwsdGhpcy5faXRlbVNpemU9dCx0aGlzLl9taW5CdWZmZXJQeD1lLHRoaXMuX21heEJ1ZmZlclB4PWl9YXR0YWNoKHQpe3RoaXMuX3ZpZXdwb3J0PXQsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1kZXRhY2goKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnQ9bnVsbH11cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZSh0LGUsaSl7dGhpcy5faXRlbVNpemU9dCx0aGlzLl9taW5CdWZmZXJQeD1lLHRoaXMuX21heEJ1ZmZlclB4PWksdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRTY3JvbGxlZCgpe3RoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkRhdGFMZW5ndGhDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRSZW5kZXJlZCgpe31vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpe31zY3JvbGxUb0luZGV4KHQsZSl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNjcm9sbFRvT2Zmc2V0KHQqdGhpcy5faXRlbVNpemUsZSl9X3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKXshdGhpcy5fdmlld3BvcnR8fHRoaXMuX3ZpZXdwb3J0LnNldFRvdGFsQ29udGVudFNpemUodGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpKnRoaXMuX2l0ZW1TaXplKX1fdXBkYXRlUmVuZGVyZWRSYW5nZSgpe2lmKCF0aGlzLl92aWV3cG9ydClyZXR1cm47bGV0IHQ9dGhpcy5fdmlld3BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLGU9e3N0YXJ0OnQuc3RhcnQsZW5kOnQuZW5kfSxpPXRoaXMuX3ZpZXdwb3J0LmdldFZpZXdwb3J0U2l6ZSgpLHI9dGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpLG89dGhpcy5fdmlld3BvcnQubWVhc3VyZVNjcm9sbE9mZnNldCgpLHM9dGhpcy5faXRlbVNpemU+MD9vL3RoaXMuX2l0ZW1TaXplOjA7aWYoZS5lbmQ+cil7bGV0IGw9TWF0aC5jZWlsKGkvdGhpcy5faXRlbVNpemUpLGM9TWF0aC5tYXgoMCxNYXRoLm1pbihzLHItbCkpO3MhPWMmJihzPWMsbz1jKnRoaXMuX2l0ZW1TaXplLGUuc3RhcnQ9TWF0aC5mbG9vcihzKSksZS5lbmQ9TWF0aC5tYXgoMCxNYXRoLm1pbihyLGUuc3RhcnQrbCkpfWxldCBhPW8tZS5zdGFydCp0aGlzLl9pdGVtU2l6ZTtpZihhPHRoaXMuX21pbkJ1ZmZlclB4JiYwIT1lLnN0YXJ0KXtsZXQgbD1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LWEpL3RoaXMuX2l0ZW1TaXplKTtlLnN0YXJ0PU1hdGgubWF4KDAsZS5zdGFydC1sKSxlLmVuZD1NYXRoLm1pbihyLE1hdGguY2VpbChzKyhpK3RoaXMuX21pbkJ1ZmZlclB4KS90aGlzLl9pdGVtU2l6ZSkpfWVsc2V7bGV0IGw9ZS5lbmQqdGhpcy5faXRlbVNpemUtKG8raSk7aWYobDx0aGlzLl9taW5CdWZmZXJQeCYmZS5lbmQhPXIpe2xldCBjPU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtbCkvdGhpcy5faXRlbVNpemUpO2M+MCYmKGUuZW5kPU1hdGgubWluKHIsZS5lbmQrYyksZS5zdGFydD1NYXRoLm1heCgwLE1hdGguZmxvb3Iocy10aGlzLl9taW5CdWZmZXJQeC90aGlzLl9pdGVtU2l6ZSkpKX19dGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRSYW5nZShlKSx0aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5faXRlbVNpemUqZS5zdGFydCksdGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5uZXh0KE1hdGguZmxvb3IocykpfX0odGhpcy5pdGVtU2l6ZSx0aGlzLm1pbkJ1ZmZlclB4LHRoaXMubWF4QnVmZmVyUHgpfWdldCBpdGVtU2l6ZSgpe3JldHVybiB0aGlzLl9pdGVtU2l6ZX1zZXQgaXRlbVNpemUoZSl7dGhpcy5faXRlbVNpemU9QmkoZSl9Z2V0IG1pbkJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX21pbkJ1ZmZlclB4fXNldCBtaW5CdWZmZXJQeChlKXt0aGlzLl9taW5CdWZmZXJQeD1CaShlKX1nZXQgbWF4QnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fbWF4QnVmZmVyUHh9c2V0IG1heEJ1ZmZlclB4KGUpe3RoaXMuX21heEJ1ZmZlclB4PUJpKGUpfW5nT25DaGFuZ2VzKCl7dGhpcy5fc2Nyb2xsU3RyYXRlZ3kudXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodGhpcy5pdGVtU2l6ZSx0aGlzLm1pbkJ1ZmZlclB4LHRoaXMubWF4QnVmZmVyUHgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwiaXRlbVNpemUiLCIiXV0saW5wdXRzOntpdGVtU2l6ZToiaXRlbVNpemUiLG1pbkJ1ZmZlclB4OiJtaW5CdWZmZXJQeCIsbWF4QnVmZmVyUHg6Im1heEJ1ZmZlclB4In0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpodGUsdXNlRmFjdG9yeTpjT2UsZGVwczpbSm4oKCk9Pm4pXX1dKSxGdF19KSxufSkoKSwkbT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX3Njcm9sbGVkPW5ldyBrZSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXAsdGhpcy5fZG9jdW1lbnQ9cn1yZWdpc3RlcihlKXt0aGlzLnNjcm9sbENvbnRhaW5lcnMuaGFzKGUpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMuc2V0KGUsZS5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoZSkpKX1kZXJlZ2lzdGVyKGUpe2xldCBpPXRoaXMuc2Nyb2xsQ29udGFpbmVycy5nZXQoZSk7aSYmKGkudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKGUpKX1zY3JvbGxlZChlPTIwKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP25ldyB1bihpPT57dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9ufHx0aGlzLl9hZGRHbG9iYWxMaXN0ZW5lcigpO2xldCByPWU+MD90aGlzLl9zY3JvbGxlZC5waXBlKGJ1KGUpKS5zdWJzY3JpYmUoaSk6dGhpcy5fc2Nyb2xsZWQuc3Vic2NyaWJlKGkpO3JldHVybiB0aGlzLl9zY3JvbGxlZENvdW50KyssKCk9PntyLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsZWRDb3VudC0tLHRoaXMuX3Njcm9sbGVkQ291bnR8fHRoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSk6WHQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGUsaSk9PnRoaXMuZGVyZWdpc3RlcihpKSksdGhpcy5fc2Nyb2xsZWQuY29tcGxldGUoKX1hbmNlc3RvclNjcm9sbGVkKGUsaSl7bGV0IHI9dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoZSk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoaSkucGlwZShZZShvPT4hb3x8ci5pbmRleE9mKG8pPi0xKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgocixvKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQobyxlKSYmaS5wdXNoKG8pfSksaX1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoZSxpKXtsZXQgcj1MYShpKSxvPWUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYocj09bylyZXR1cm4hMH13aGlsZShyPXIucGFyZW50RWxlbWVudCk7cmV0dXJuITF9X2FkZEdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+X2kodGhpcy5fZ2V0V2luZG93KCkuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSl9X3JlbW92ZUdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uJiYodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKF90KSxqKG9pKSxqKEh0LDgpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxJaD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuZWxlbWVudFJlZj1lLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1pLHRoaXMubmdab25lPXIsdGhpcy5kaXI9byx0aGlzLl9kZXN0cm95ZWQ9bmV3IGtlLHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgdW4ocz0+dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pl9pKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJzY3JvbGwiKS5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShzKSkpfW5nT25Jbml0KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1lbGVtZW50U2Nyb2xsZWQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkfWdldEVsZW1lbnRSZWYoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmfXNjcm9sbFRvKGUpe2xldCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHI9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZTtudWxsPT1lLmxlZnQmJihlLmxlZnQ9cj9lLmVuZDplLnN0YXJ0KSxudWxsPT1lLnJpZ2h0JiYoZS5yaWdodD1yP2Uuc3RhcnQ6ZS5lbmQpLG51bGwhPWUuYm90dG9tJiYoZS50b3A9aS5zY3JvbGxIZWlnaHQtaS5jbGllbnRIZWlnaHQtZS5ib3R0b20pLHImJjAhPWJ2KCk/KG51bGwhPWUubGVmdCYmKGUucmlnaHQ9aS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLWUubGVmdCksMj09YnYoKT9lLmxlZnQ9ZS5yaWdodDoxPT1idigpJiYoZS5sZWZ0PWUucmlnaHQ/LWUucmlnaHQ6ZS5yaWdodCkpOm51bGwhPWUucmlnaHQmJihlLmxlZnQ9aS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLWUucmlnaHQpLHRoaXMuX2FwcGx5U2Nyb2xsVG9PcHRpb25zKGUpfV9hcHBseVNjcm9sbFRvT3B0aW9ucyhlKXtsZXQgaT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtzMigpP2kuc2Nyb2xsVG8oZSk6KG51bGwhPWUudG9wJiYoaS5zY3JvbGxUb3A9ZS50b3ApLG51bGwhPWUubGVmdCYmKGkuc2Nyb2xsTGVmdD1lLmxlZnQpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCBpPSJsZWZ0IixyPSJyaWdodCIsbz10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZigidG9wIj09ZSlyZXR1cm4gby5zY3JvbGxUb3A7aWYoImJvdHRvbSI9PWUpcmV0dXJuIG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0LW8uc2Nyb2xsVG9wO2xldCBzPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7cmV0dXJuInN0YXJ0Ij09ZT9lPXM/cjppOiJlbmQiPT1lJiYoZT1zP2k6cikscyYmMj09YnYoKT9lPT1pP28uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aC1vLnNjcm9sbExlZnQ6by5zY3JvbGxMZWZ0OnMmJjE9PWJ2KCk/ZT09aT9vLnNjcm9sbExlZnQrby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoOi1vLnNjcm9sbExlZnQ6ZT09aT9vLnNjcm9sbExlZnQ6by5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoLW8uc2Nyb2xsTGVmdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSksTSgkbSksTShfdCksTSgkaSw4KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxlIiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dfSksbn0pKCksVmE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9jaGFuZ2U9bmV3IGtlLHRoaXMuX2NoYW5nZUxpc3RlbmVyPW89Pnt0aGlzLl9jaGFuZ2UubmV4dChvKX0sdGhpcy5fZG9jdW1lbnQ9cixpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoZS5pc0Jyb3dzZXIpe2xldCBvPXRoaXMuX2dldFdpbmRvdygpO28uYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksby5hZGRFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5fY2hhbmdlLmNvbXBsZXRlKCl9Z2V0Vmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTtsZXQgZT17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGV9Z2V0Vmlld3BvcnRSZWN0KCl7bGV0IGU9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmksaGVpZ2h0OnJ9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDplLnRvcCxsZWZ0OmUubGVmdCxib3R0b206ZS50b3ArcixyaWdodDplLmxlZnQraSxoZWlnaHQ6cix3aWR0aDppfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtsZXQgZT10aGlzLl9kb2N1bWVudCxpPXRoaXMuX2dldFdpbmRvdygpLHI9ZS5kb2N1bWVudEVsZW1lbnQsbz1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LW8udG9wfHxlLmJvZHkuc2Nyb2xsVG9wfHxpLnNjcm9sbFl8fHIuc2Nyb2xsVG9wfHwwLGxlZnQ6LW8ubGVmdHx8ZS5ib2R5LnNjcm9sbExlZnR8fGkuc2Nyb2xsWHx8ci5zY3JvbGxMZWZ0fHwwfX1jaGFuZ2UoZT0yMCl7cmV0dXJuIGU+MD90aGlzLl9jaGFuZ2UucGlwZShidShlKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6ZS5pbm5lcldpZHRoLGhlaWdodDplLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGoob2kpLGooX3QpLGooSHQsOCkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGR0ZT1uZXcgcGUoIlZJUlRVQUxfU0NST0xMQUJMRSIpLHBPZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSWh7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9bWVhc3VyZVZpZXdwb3J0U2l6ZShlKXtsZXQgaT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT1lP2kuY2xpZW50V2lkdGg6aS5jbGllbnRIZWlnaHR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oJG0pLE0oX3QpLE0oJGksOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLGZlYXR1cmVzOlt0dF19KSxufSkoKSxmT2U9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTwidSI/X046ZjAsZWc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBPZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKGUsYSxyLHMpLHRoaXMuZWxlbWVudFJlZj1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9byx0aGlzLnNjcm9sbGFibGU9Yyx0aGlzLl9wbGF0Zm9ybT1qbyhvaSksdGhpcy5fZGV0YWNoZWRTdWJqZWN0PW5ldyBrZSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdD1uZXcga2UsdGhpcy5fb3JpZW50YXRpb249InZlcnRpY2FsIix0aGlzLl9hcHBlbmRPbmx5PSExLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgdW4odT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsZWRJbmRleENoYW5nZS5zdWJzY3JpYmUoZD0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5uZ1pvbmUucnVuKCgpPT51Lm5leHQoZCkpKSkpLHRoaXMucmVuZGVyZWRSYW5nZVN0cmVhbT10aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdCx0aGlzLl90b3RhbENvbnRlbnRTaXplPTAsdGhpcy5fdG90YWxDb250ZW50V2lkdGg9IiIsdGhpcy5fdG90YWxDb250ZW50SGVpZ2h0PSIiLHRoaXMuX3JlbmRlcmVkUmFuZ2U9e3N0YXJ0OjAsZW5kOjB9LHRoaXMuX2RhdGFMZW5ndGg9MCx0aGlzLl92aWV3cG9ydFNpemU9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITEsdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uPVtdLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1Tbi5FTVBUWSx0aGlzLl92aWV3cG9ydENoYW5nZXM9bC5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNoZWNrVmlld3BvcnRTaXplKCl9KSx0aGlzLnNjcm9sbGFibGV8fCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstdmlydHVhbC1zY3JvbGxhYmxlIiksdGhpcy5zY3JvbGxhYmxlPXRoaXMpfWdldCBvcmllbnRhdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbn1zZXQgb3JpZW50YXRpb24oZSl7dGhpcy5fb3JpZW50YXRpb24hPT1lJiYodGhpcy5fb3JpZW50YXRpb249ZSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCkpfWdldCBhcHBlbmRPbmx5KCl7cmV0dXJuIHRoaXMuX2FwcGVuZE9ubHl9c2V0IGFwcGVuZE9ubHkoZSl7dGhpcy5fYXBwZW5kT25seT1SdChlKX1uZ09uSW5pdCgpeyF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fCh0aGlzLnNjcm9sbGFibGU9PT10aGlzJiZzdXBlci5uZ09uSW5pdCgpLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLnNjcm9sbGFibGUuZWxlbWVudFNjcm9sbGVkKCkucGlwZSh6bihudWxsKSxidSgwLGZPZSkpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25Db250ZW50U2Nyb2xsZWQoKSksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpfSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuZGV0YWNoKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QuY29tcGxldGUoKSx0aGlzLl9kZXRhY2hlZFN1YmplY3QuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydENoYW5nZXMudW5zdWJzY3JpYmUoKSxzdXBlci5uZ09uRGVzdHJveSgpfWF0dGFjaChlKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2Zvck9mPWUsdGhpcy5fZm9yT2YuZGF0YVN0cmVhbS5waXBlKHN0KHRoaXMuX2RldGFjaGVkU3ViamVjdCkpLnN1YnNjcmliZShpPT57bGV0IHI9aS5sZW5ndGg7ciE9PXRoaXMuX2RhdGFMZW5ndGgmJih0aGlzLl9kYXRhTGVuZ3RoPXIsdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpKSx0aGlzLl9kb0NoYW5nZURldGVjdGlvbigpfSl9KX1kZXRhY2goKXt0aGlzLl9mb3JPZj1udWxsLHRoaXMuX2RldGFjaGVkU3ViamVjdC5uZXh0KCl9Z2V0RGF0YUxlbmd0aCgpe3JldHVybiB0aGlzLl9kYXRhTGVuZ3RofWdldFZpZXdwb3J0U2l6ZSgpe3JldHVybiB0aGlzLl92aWV3cG9ydFNpemV9Z2V0UmVuZGVyZWRSYW5nZSgpe3JldHVybiB0aGlzLl9yZW5kZXJlZFJhbmdlfW1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGUpe3JldHVybiB0aGlzLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2VdfXNldFRvdGFsQ29udGVudFNpemUoZSl7dGhpcy5fdG90YWxDb250ZW50U2l6ZSE9PWUmJih0aGlzLl90b3RhbENvbnRlbnRTaXplPWUsdGhpcy5fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKSl9c2V0UmVuZGVyZWRSYW5nZShlKXsoZnVuY3Rpb24obix0KXtyZXR1cm4gbi5zdGFydD09dC5zdGFydCYmbi5lbmQ9PXQuZW5kfSkodGhpcy5fcmVuZGVyZWRSYW5nZSxlKXx8KHRoaXMuYXBwZW5kT25seSYmKGU9e3N0YXJ0OjAsZW5kOk1hdGgubWF4KHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kLGUuZW5kKX0pLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0Lm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZT1lKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRSZW5kZXJlZCgpKSl9Z2V0T2Zmc2V0VG9SZW5kZXJlZENvbnRlbnRTdGFydCgpe3JldHVybiB0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/bnVsbDp0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXR9c2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KGUsaT0idG8tc3RhcnQiKXtlPXRoaXMuYXBwZW5kT25seSYmInRvLXN0YXJ0Ij09PWk/MDplO2xldCBvPSJob3Jpem9udGFsIj09dGhpcy5vcmllbnRhdGlvbixzPW8/IlgiOiJZIixsPWB0cmFuc2xhdGUke3N9KCR7TnVtYmVyKChvJiZ0aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlPy0xOjEpKmUpfXB4KWA7dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0PWUsInRvLWVuZCI9PT1pJiYobCs9YCB0cmFuc2xhdGUke3N9KC0xMDAlKWAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSEwKSx0aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm0hPWwmJih0aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm09bCx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCgpPT57dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPyh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQtPXRoaXMubWVhc3VyZVJlbmRlcmVkQ29udGVudFNpemUoKSx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITEsdGhpcy5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0KSk6dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25SZW5kZXJlZE9mZnNldENoYW5nZWQoKX0pKX1zY3JvbGxUb09mZnNldChlLGk9ImF1dG8iKXtsZXQgcj17YmVoYXZpb3I6aX07Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9yLnN0YXJ0PWU6ci50b3A9ZSx0aGlzLnNjcm9sbGFibGUuc2Nyb2xsVG8ocil9c2Nyb2xsVG9JbmRleChlLGk9ImF1dG8iKXt0aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxUb0luZGV4KGUsaSl9bWVhc3VyZVNjcm9sbE9mZnNldChlKXtsZXQgaTtyZXR1cm4gaT10aGlzLnNjcm9sbGFibGU9PXRoaXM/cj0+c3VwZXIubWVhc3VyZVNjcm9sbE9mZnNldChyKTpyPT50aGlzLnNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldChyKSxNYXRoLm1heCgwLGkoZT8/KCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/InN0YXJ0IjoidG9wIikpLXRoaXMubWVhc3VyZVZpZXdwb3J0T2Zmc2V0KCkpfW1lYXN1cmVWaWV3cG9ydE9mZnNldChlKXtsZXQgaSxyPSJsZWZ0IixvPSJyaWdodCIscz0icnRsIj09dGhpcy5kaXI/LnZhbHVlO2k9InN0YXJ0Ij09ZT9zP286cjoiZW5kIj09ZT9zP3I6bzplfHwoImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ibGVmdCI6InRvcCIpO2xldCBhPXRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlQm91bmRpbmdDbGllbnRSZWN0V2l0aFNjcm9sbE9mZnNldChpKTtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbaV0tYX1tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpe2xldCBlPXRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9lLm9mZnNldFdpZHRoOmUub2Zmc2V0SGVpZ2h0fW1lYXN1cmVSYW5nZVNpemUoZSl7cmV0dXJuIHRoaXMuX2Zvck9mP3RoaXMuX2Zvck9mLm1lYXN1cmVSYW5nZVNpemUoZSx0aGlzLm9yaWVudGF0aW9uKTowfWNoZWNrVmlld3BvcnRTaXplKCl7dGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKX1fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0U2l6ZT10aGlzLnNjcm9sbGFibGUubWVhc3VyZVZpZXdwb3J0U2l6ZSh0aGlzLm9yaWVudGF0aW9uKX1fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZChlKXtlJiZ0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbi5wdXNoKGUpLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZ3x8KHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMCx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KSkpfV9kb0NoYW5nZURldGVjdGlvbigpe3RoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMSx0aGlzLl9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT10aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm0sdGhpcy5uZ1pvbmUucnVuKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7bGV0IGU9dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb247dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W107Zm9yKGxldCBpIG9mIGUpaSgpfV9jYWxjdWxhdGVTcGFjZXJTaXplKCl7dGhpcy5fdG90YWxDb250ZW50SGVpZ2h0PSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/IiI6YCR7dGhpcy5fdG90YWxDb250ZW50U2l6ZX1weGAsdGhpcy5fdG90YWxDb250ZW50V2lkdGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9gJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YDoiIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSksTShubiksTShfdCksTShodGUsOCksTSgkaSw4KSxNKCRtKSxNKFZhKSxNKGR0ZSw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmb3QoYU9lLDcpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2NvbnRlbnRXcmFwcGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmZXQoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1pLm9yaWVudGF0aW9uKSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1pLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRpb24iLGFwcGVuZE9ubHk6ImFwcGVuZE9ubHkifSxvdXRwdXRzOntzY3JvbGxlZEluZGV4Q2hhbmdlOiJzY3JvbGxlZEluZGV4Q2hhbmdlIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpJaCx1c2VGYWN0b3J5Oih0LGUpPT50fHxlLGRlcHM6W1tuZXcgbnMsbmV3IGowKGR0ZSldLG5dfV0pLHR0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6bE9lLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWzEsImNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXIiXSxbImNvbnRlbnRXcmFwcGVyIiwiIl0sWzEsImNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih4aSgpLF8oMCwiZGl2IiwwLDEpLFZuKDIpLHYoKSxPKDMsImRpdiIsMikpLDImZSYmKEMoMyksUHQoIndpZHRoIixpLl90b3RhbENvbnRlbnRXaWR0aCkoImhlaWdodCIsaS5fdG90YWxDb250ZW50SGVpZ2h0KSl9LHN0eWxlczpbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5jZGstdmlydHVhbC1zY3JvbGxhYmxle292ZXJmbG93OmF1dG87d2lsbC1jaGFuZ2U6c2Nyb2xsLXBvc2l0aW9uO2NvbnRhaW46c3RyaWN0Oy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtjb250YWluOmNvbnRlbnR9W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3JpZ2h0OjA7bGVmdDphdXRvfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4taGVpZ2h0OjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLXdpZHRoOjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcntoZWlnaHQ6MXB4O3RyYW5zZm9ybS1vcmlnaW46MCAwO2ZsZXg6MCAwIGF1dG99W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHB0ZShuLHQsZSl7aWYoIWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiAwO2xldCByPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuImhvcml6b250YWwiPT09bj8ic3RhcnQiPT09dD9yLmxlZnQ6ci5yaWdodDoic3RhcnQiPT09dD9yLnRvcDpyLmJvdHRvbX12YXIgeDI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1lLHRoaXMuX3RlbXBsYXRlPWksdGhpcy5fZGlmZmVycz1yLHRoaXMuX3ZpZXdSZXBlYXRlcj1vLHRoaXMuX3ZpZXdwb3J0PXMsdGhpcy52aWV3Q2hhbmdlPW5ldyBrZSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcz1uZXcga2UsdGhpcy5kYXRhU3RyZWFtPXRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLnBpcGUoem4obnVsbCkseTAoKSx1aSgoW2wsY10pPT50aGlzLl9jaGFuZ2VEYXRhU291cmNlKGwsYykpLE1hKDEpKSx0aGlzLl9kaWZmZXI9bnVsbCx0aGlzLl9uZWVkc1VwZGF0ZT0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IGtlLHRoaXMuZGF0YVN0cmVhbS5zdWJzY3JpYmUobD0+e3RoaXMuX2RhdGE9bCx0aGlzLl9vblJlbmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShsPT57dGhpcy5fcmVuZGVyZWRSYW5nZT1sLHRoaXMudmlld0NoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZhLnJ1bigoKT0+dGhpcy52aWV3Q2hhbmdlLm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZSkpLHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSx0aGlzLl92aWV3cG9ydC5hdHRhY2godGhpcyl9Z2V0IGNka1ZpcnR1YWxGb3JPZigpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yT2Z9c2V0IGNka1ZpcnR1YWxGb3JPZihlKXt0aGlzLl9jZGtWaXJ0dWFsRm9yT2Y9ZSxmdW5jdGlvbihuKXtyZXR1cm4gbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4uY29ubmVjdCYmIShuIGluc3RhbmNlb2YgaXgpfShlKT90aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KGUpOnRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQobmV3IHYyKGF4KGUpP2U6QXJyYXkuZnJvbShlfHxbXSkpKX1nZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fY2RrVmlydHVhbEZvclRyYWNrQnl9c2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KGUpe3RoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5PWU/KGkscik9PmUoaSsodGhpcy5fcmVuZGVyZWRSYW5nZT90aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0OjApLHIpOnZvaWQgMH1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKGUpe2UmJih0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl90ZW1wbGF0ZT1lKX1nZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoZSl7dGhpcy5fdmlld1JlcGVhdGVyLnZpZXdDYWNoZVNpemU9QmkoZSl9bWVhc3VyZVJhbmdlU2l6ZShlLGkpe2lmKGUuc3RhcnQ+PWUuZW5kKXJldHVybiAwO2xldCBzLGEscj1lLnN0YXJ0LXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsbz1lLmVuZC1lLnN0YXJ0O2ZvcihsZXQgbD0wO2w8bztsKyspe2xldCBjPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGwrcik7aWYoYyYmYy5yb290Tm9kZXMubGVuZ3RoKXtzPWE9Yy5yb290Tm9kZXNbMF07YnJlYWt9fWZvcihsZXQgbD1vLTE7bD4tMTtsLS0pe2xldCBjPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGwrcik7aWYoYyYmYy5yb290Tm9kZXMubGVuZ3RoKXthPWMucm9vdE5vZGVzW2Mucm9vdE5vZGVzLmxlbmd0aC0xXTticmVha319cmV0dXJuIHMmJmE/cHRlKGksImVuZCIsYSktcHRlKGksInN0YXJ0IixzKTowfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlciYmdGhpcy5fbmVlZHNVcGRhdGUpe2xldCBlPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX3JlbmRlcmVkSXRlbXMpO2U/dGhpcy5fYXBwbHlDaGFuZ2VzKGUpOnRoaXMuX3VwZGF0ZUNvbnRleHQoKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMX19bmdPbkRlc3Ryb3koKXt0aGlzLl92aWV3cG9ydC5kZXRhY2goKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KHZvaWQgMCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLnZpZXdDaGFuZ2UuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdSZXBlYXRlci5kZXRhY2goKX1fb25SZW5kZXJlZERhdGFDaGFuZ2UoKXshdGhpcy5fcmVuZGVyZWRSYW5nZXx8KHRoaXMuX3JlbmRlcmVkSXRlbXM9dGhpcy5fZGF0YS5zbGljZSh0aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kKSx0aGlzLl9kaWZmZXJ8fCh0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHRoaXMuX3JlbmRlcmVkSXRlbXMpLmNyZWF0ZSgoZSxpKT0+dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeT90aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5KGUsaSk6aSkpLHRoaXMuX25lZWRzVXBkYXRlPSEwKX1fY2hhbmdlRGF0YVNvdXJjZShlLGkpe3JldHVybiBlJiZlLmRpc2Nvbm5lY3QodGhpcyksdGhpcy5fbmVlZHNVcGRhdGU9ITAsaT9pLmNvbm5lY3QodGhpcyk6WHQoKX1fdXBkYXRlQ29udGV4dCgpe2xldCBlPXRoaXMuX2RhdGEubGVuZ3RoLGk9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtpLS07KXtsZXQgcj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChpKTtyLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtpLHIuY29udGV4dC5jb3VudD1lLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoci5jb250ZXh0KSxyLmRldGVjdENoYW5nZXMoKX19X2FwcGx5Q2hhbmdlcyhlKXt0aGlzLl92aWV3UmVwZWF0ZXIuYXBwbHlDaGFuZ2VzKGUsdGhpcy5fdmlld0NvbnRhaW5lclJlZiwobyxzLGEpPT50aGlzLl9nZXRFbWJlZGRlZFZpZXdBcmdzKG8sYSksbz0+by5pdGVtKSxlLmZvckVhY2hJZGVudGl0eUNoYW5nZShvPT57dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoby5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PW8uaXRlbX0pO2xldCBpPXRoaXMuX2RhdGEubGVuZ3RoLHI9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtyLS07KXtsZXQgbz10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChyKTtvLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtyLG8uY29udGV4dC5jb3VudD1pLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoby5jb250ZXh0KX19X3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoZSl7ZS5maXJzdD0wPT09ZS5pbmRleCxlLmxhc3Q9ZS5pbmRleD09PWUuY291bnQtMSxlLmV2ZW49ZS5pbmRleCUyPT0wLGUub2RkPSFlLmV2ZW59X2dldEVtYmVkZGVkVmlld0FyZ3MoZSxpKXtyZXR1cm57dGVtcGxhdGVSZWY6dGhpcy5fdGVtcGxhdGUsY29udGV4dDp7JGltcGxpY2l0OmUuaXRlbSxjZGtWaXJ0dWFsRm9yT2Y6dGhpcy5fY2RrVmlydHVhbEZvck9mLGluZGV4Oi0xLGNvdW50Oi0xLGZpcnN0OiExLGxhc3Q6ITEsb2RkOiExLGV2ZW46ITF9LGluZGV4Oml9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKE9pKSxNKFZpKSxNKGtjKSxNKFNIKSxNKGVnLDQpLE0oX3QpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrVmlydHVhbEZvciIsIiIsImNka1ZpcnR1YWxGb3JPZiIsIiJdXSxpbnB1dHM6e2Nka1ZpcnR1YWxGb3JPZjoiY2RrVmlydHVhbEZvck9mIixjZGtWaXJ0dWFsRm9yVHJhY2tCeToiY2RrVmlydHVhbEZvclRyYWNrQnkiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlIixjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6U0gsdXNlQ2xhc3M6eTJ9XSldfSksbn0pKCksdWQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLFpjPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltEaCx1ZCxEaCx1ZF19KSxufSkoKSxzdz1jbGFzc3thdHRhY2godCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkSG9zdD10LHQuYXR0YWNoKHRoaXMpfWRldGFjaCgpe2xldCB0PXRoaXMuX2F0dGFjaGVkSG9zdDtudWxsIT10JiYodGhpcy5fYXR0YWNoZWRIb3N0PW51bGwsdC5kZXRhY2goKSl9Z2V0IGlzQXR0YWNoZWQoKXtyZXR1cm4gbnVsbCE9dGhpcy5fYXR0YWNoZWRIb3N0fXNldEF0dGFjaGVkSG9zdCh0KXt0aGlzLl9hdHRhY2hlZEhvc3Q9dH19LCRjPWNsYXNzIGV4dGVuZHMgc3d7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoKSx0aGlzLmNvbXBvbmVudD10LHRoaXMudmlld0NvbnRhaW5lclJlZj1lLHRoaXMuaW5qZWN0b3I9aSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1yfX0sa3M9Y2xhc3MgZXh0ZW5kcyBzd3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcigpLHRoaXMudGVtcGxhdGVSZWY9dCx0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmNvbnRleHQ9aSx0aGlzLmluamVjdG9yPXJ9Z2V0IG9yaWdpbigpe3JldHVybiB0aGlzLnRlbXBsYXRlUmVmLmVsZW1lbnRSZWZ9YXR0YWNoKHQsZT10aGlzLmNvbnRleHQpe3JldHVybiB0aGlzLmNvbnRleHQ9ZSxzdXBlci5hdHRhY2godCl9ZGV0YWNoKCl7cmV0dXJuIHRoaXMuY29udGV4dD12b2lkIDAsc3VwZXIuZGV0YWNoKCl9fSxUSD1jbGFzcyBleHRlbmRzIHN3e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5lbGVtZW50PXQgaW5zdGFuY2VvZiBSZT90Lm5hdGl2ZUVsZW1lbnQ6dH19LFBoPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLmF0dGFjaERvbVBvcnRhbD1udWxsfWhhc0F0dGFjaGVkKCl7cmV0dXJuISF0aGlzLl9hdHRhY2hlZFBvcnRhbH1hdHRhY2godCl7cmV0dXJuIHQgaW5zdGFuY2VvZiAkYz8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaENvbXBvbmVudFBvcnRhbCh0KSk6dCBpbnN0YW5jZW9mIGtzPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwodCkpOnRoaXMuYXR0YWNoRG9tUG9ydGFsJiZ0IGluc3RhbmNlb2YgVEg/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hEb21Qb3J0YWwodCkpOnZvaWQgMH1kZXRhY2goKXt0aGlzLl9hdHRhY2hlZFBvcnRhbCYmKHRoaXMuX2F0dGFjaGVkUG9ydGFsLnNldEF0dGFjaGVkSG9zdChudWxsKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKX1kaXNwb3NlKCl7dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmRldGFjaCgpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpLHRoaXMuX2lzRGlzcG9zZWQ9ITB9c2V0RGlzcG9zZUZuKHQpe3RoaXMuX2Rpc3Bvc2VGbj10fV9pbnZva2VEaXNwb3NlRm4oKXt0aGlzLl9kaXNwb3NlRm4mJih0aGlzLl9kaXNwb3NlRm4oKSx0aGlzLl9kaXNwb3NlRm49bnVsbCl9fSxhdz1jbGFzcyBleHRlbmRzIFBoe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoKSx0aGlzLm91dGxldEVsZW1lbnQ9dCx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLl9hcHBSZWY9aSx0aGlzLl9kZWZhdWx0SW5qZWN0b3I9cix0aGlzLmF0dGFjaERvbVBvcnRhbD1zPT57bGV0IGE9cy5lbGVtZW50LGw9dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiZG9tLXBvcnRhbCIpO2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobCxhKSx0aGlzLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQoYSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9cyxzdXBlci5zZXREaXNwb3NlRm4oKCk9PntsLnBhcmVudE5vZGUmJmwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYSxsKX0pfSx0aGlzLl9kb2N1bWVudD1vfWF0dGFjaENvbXBvbmVudFBvcnRhbCh0KXtsZXQgcixpPSh0LmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcnx8dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0LmNvbXBvbmVudCk7cmV0dXJuIHQudmlld0NvbnRhaW5lclJlZj8ocj10LnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGksdC52aWV3Q29udGFpbmVyUmVmLmxlbmd0aCx0LmluamVjdG9yfHx0LnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3IpLHRoaXMuc2V0RGlzcG9zZUZuKCgpPT5yLmRlc3Ryb3koKSkpOihyPWkuY3JlYXRlKHQuaW5qZWN0b3J8fHRoaXMuX2RlZmF1bHRJbmplY3Rvcnx8WG4uTlVMTCksdGhpcy5fYXBwUmVmLmF0dGFjaFZpZXcoci5ob3N0VmlldyksdGhpcy5zZXREaXNwb3NlRm4oKCk9Pnt0aGlzLl9hcHBSZWYudmlld0NvdW50PjAmJnRoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHIuaG9zdFZpZXcpLHIuZGVzdHJveSgpfSkpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9nZXRDb21wb25lbnRSb290Tm9kZShyKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxyfWF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpe2xldCBlPXQudmlld0NvbnRhaW5lclJlZixpPWUuY3JlYXRlRW1iZWRkZWRWaWV3KHQudGVtcGxhdGVSZWYsdC5jb250ZXh0LHtpbmplY3Rvcjp0LmluamVjdG9yfSk7cmV0dXJuIGkucm9vdE5vZGVzLmZvckVhY2gocj0+dGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHIpKSxpLmRldGVjdENoYW5nZXMoKSx0aGlzLnNldERpc3Bvc2VGbigoKT0+e2xldCByPWUuaW5kZXhPZihpKTstMSE9PXImJmUucmVtb3ZlKHIpfSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxpfWRpc3Bvc2UoKXtzdXBlci5kaXNwb3NlKCksdGhpcy5vdXRsZXRFbGVtZW50LnJlbW92ZSgpfV9nZXRDb21wb25lbnRSb290Tm9kZSh0KXtyZXR1cm4gdC5ob3N0Vmlldy5yb290Tm9kZXNbMF19fSxmdGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGtze2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoZSxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShWaSksTShPaSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtQb3J0YWwiLCIiXV0sZXhwb3J0QXM6WyJjZGtQb3J0YWwiXSxmZWF0dXJlczpbdHRdfSksbn0pKCksZGE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFBoe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9aSx0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuYXR0YWNoZWQ9bmV3IEcsdGhpcy5hdHRhY2hEb21Qb3J0YWw9bz0+e2xldCBzPW8uZWxlbWVudCxhPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUNvbW1lbnQoImRvbS1wb3J0YWwiKTtvLnNldEF0dGFjaGVkSG9zdCh0aGlzKSxzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEscyksdGhpcy5fZ2V0Um9vdE5vZGUoKS5hcHBlbmRDaGlsZChzKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1vLHN1cGVyLnNldERpc3Bvc2VGbigoKT0+e2EucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChzLGEpfSl9LHRoaXMuX2RvY3VtZW50PXJ9Z2V0IHBvcnRhbCgpe3JldHVybiB0aGlzLl9hdHRhY2hlZFBvcnRhbH1zZXQgcG9ydGFsKGUpe3RoaXMuaGFzQXR0YWNoZWQoKSYmIWUmJiF0aGlzLl9pc0luaXRpYWxpemVkfHwodGhpcy5oYXNBdHRhY2hlZCgpJiZzdXBlci5kZXRhY2goKSxlJiZzdXBlci5hdHRhY2goZSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZXx8bnVsbCl9Z2V0IGF0dGFjaGVkUmVmKCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkUmVmfW5nT25Jbml0KCl7dGhpcy5faXNJbml0aWFsaXplZD0hMH1uZ09uRGVzdHJveSgpe3N1cGVyLmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsLHRoaXMuX2F0dGFjaGVkUmVmPW51bGx9YXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpe2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO2xldCBpPW51bGwhPWUudmlld0NvbnRhaW5lclJlZj9lLnZpZXdDb250YWluZXJSZWY6dGhpcy5fdmlld0NvbnRhaW5lclJlZixvPShlLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcnx8dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShlLmNvbXBvbmVudCkscz1pLmNyZWF0ZUNvbXBvbmVudChvLGkubGVuZ3RoLGUuaW5qZWN0b3J8fGkuaW5qZWN0b3IpO3JldHVybiBpIT09dGhpcy5fdmlld0NvbnRhaW5lclJlZiYmdGhpcy5fZ2V0Um9vdE5vZGUoKS5hcHBlbmRDaGlsZChzLmhvc3RWaWV3LnJvb3ROb2Rlc1swXSksc3VwZXIuc2V0RGlzcG9zZUZuKCgpPT5zLmRlc3Ryb3koKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1zLHRoaXMuYXR0YWNoZWQuZW1pdChzKSxzfWF0dGFjaFRlbXBsYXRlUG9ydGFsKGUpe2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO2xldCBpPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KGUudGVtcGxhdGVSZWYsZS5jb250ZXh0LHtpbmplY3RvcjplLmluamVjdG9yfSk7cmV0dXJuIHN1cGVyLnNldERpc3Bvc2VGbigoKT0+dGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lLHRoaXMuX2F0dGFjaGVkUmVmPWksdGhpcy5hdHRhY2hlZC5lbWl0KGkpLGl9X2dldFJvb3ROb2RlKCl7bGV0IGU9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIGUubm9kZVR5cGU9PT1lLkVMRU1FTlRfTk9ERT9lOmUucGFyZW50Tm9kZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShncyksTShPaSksTShIdCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtQb3J0YWxPdXRsZXQiLCIiXV0saW5wdXRzOntwb3J0YWw6WyJjZGtQb3J0YWxPdXRsZXQiLCJwb3J0YWwiXX0sb3V0cHV0czp7YXR0YWNoZWQ6ImF0dGFjaGVkIn0sZXhwb3J0QXM6WyJjZGtQb3J0YWxPdXRsZXQiXSxmZWF0dXJlczpbdHRdfSksbn0pKCksZXU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLG10ZT1zMigpLE0yPWNsYXNze2VuYWJsZSgpe31kaXNhYmxlKCl7fWF0dGFjaCgpe319O2Z1bmN0aW9uIElIKG4sdCl7cmV0dXJuIHQuc29tZShlPT5uLmJvdHRvbTxlLnRvcHx8bi50b3A+ZS5ib3R0b218fG4ucmlnaHQ8ZS5sZWZ0fHxuLmxlZnQ+ZS5yaWdodCl9ZnVuY3Rpb24gZ3RlKG4sdCl7cmV0dXJuIHQuc29tZShlPT5uLnRvcDxlLnRvcHx8bi5ib3R0b20+ZS5ib3R0b218fG4ubGVmdDxlLmxlZnR8fG4ucmlnaHQ+ZS5yaWdodCl9dmFyIG5nPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPWksdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGx9YXR0YWNoKHQpe3RoaXMuX292ZXJsYXlSZWY9dH1lbmFibGUoKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb258fCh0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5zY3JvbGxlZCh0aGlzLl9jb25maWc/dGhpcy5fY29uZmlnLnNjcm9sbFRocm90dGxlOjApLnN1YnNjcmliZSgoKT0+e2lmKHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzLl9jb25maWcmJnRoaXMuX2NvbmZpZy5hdXRvQ2xvc2Upe2xldCBlPXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse3dpZHRoOmksaGVpZ2h0OnJ9PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCk7SUgoZSxbe3dpZHRoOmksaGVpZ2h0OnIsYm90dG9tOnIscmlnaHQ6aSx0b3A6MCxsZWZ0OjB9XSkmJih0aGlzLmRpc2FibGUoKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpKSl9fSkpfWRpc2FibGUoKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9ZGV0YWNoKCl7dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsfX0sbU9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj1lLHRoaXMuX3ZpZXdwb3J0UnVsZXI9aSx0aGlzLl9uZ1pvbmU9cix0aGlzLm5vb3A9KCk9Pm5ldyBNMix0aGlzLmNsb3NlPXM9Pm5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1pLHRoaXMuX2NvbmZpZz1yLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX2RldGFjaD0oKT0+e3RoaXMuZGlzYWJsZSgpLHRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSYmdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSl9fWF0dGFjaCh0KXt0aGlzLl9vdmVybGF5UmVmPXR9ZW5hYmxlKCl7aWYodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uKXJldHVybjtsZXQgdD10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKDApO3RoaXMuX2NvbmZpZyYmdGhpcy5fY29uZmlnLnRocmVzaG9sZCYmdGhpcy5fY29uZmlnLnRocmVzaG9sZD4xPyh0aGlzLl9pbml0aWFsU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10LnN1YnNjcmliZSgoKT0+e2xldCBlPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLnRvcDtNYXRoLmFicyhlLXRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbik+dGhpcy5fY29uZmlnLnRocmVzaG9sZD90aGlzLl9kZXRhY2goKTp0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9KSk6dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXQuc3Vic2NyaWJlKHRoaXMuX2RldGFjaCl9ZGlzYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX1kZXRhY2goKXt0aGlzLmRpc2FibGUoKSx0aGlzLl9vdmVybGF5UmVmPW51bGx9fSh0aGlzLl9zY3JvbGxEaXNwYXRjaGVyLHRoaXMuX25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHMpLHRoaXMuYmxvY2s9KCk9Pm5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3ZpZXdwb3J0UnVsZXI9dCx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXM9e3RvcDoiIixsZWZ0OiIifSx0aGlzLl9pc0VuYWJsZWQ9ITEsdGhpcy5fZG9jdW1lbnQ9ZX1hdHRhY2goKXt9ZW5hYmxlKCl7aWYodGhpcy5fY2FuQmVFbmFibGVkKCkpe2xldCB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudDt0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0PXQuc3R5bGUubGVmdHx8IiIsdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLnRvcD10LnN0eWxlLnRvcHx8IiIsdC5zdHlsZS5sZWZ0PXlvKC10aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQpLHQuc3R5bGUudG9wPXlvKC10aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksdC5jbGFzc0xpc3QuYWRkKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksdGhpcy5faXNFbmFibGVkPSEwfX1kaXNhYmxlKCl7aWYodGhpcy5faXNFbmFibGVkKXtsZXQgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaT10LnN0eWxlLHI9dGhpcy5fZG9jdW1lbnQuYm9keS5zdHlsZSxvPWkuc2Nyb2xsQmVoYXZpb3J8fCIiLHM9ci5zY3JvbGxCZWhhdmlvcnx8IiI7dGhpcy5faXNFbmFibGVkPSExLGkubGVmdD10aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdCxpLnRvcD10aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wLHQuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLG10ZSYmKGkuc2Nyb2xsQmVoYXZpb3I9ci5zY3JvbGxCZWhhdmlvcj0iYXV0byIpLHdpbmRvdy5zY3JvbGwodGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0LHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSxtdGUmJihpLnNjcm9sbEJlaGF2aW9yPW8sci5zY3JvbGxCZWhhdmlvcj1zKX19X2NhbkJlRW5hYmxlZCgpe2lmKHRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKXx8dGhpcy5faXNFbmFibGVkKXJldHVybiExO2xldCBlPXRoaXMuX2RvY3VtZW50LmJvZHksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybiBlLnNjcm9sbEhlaWdodD5pLmhlaWdodHx8ZS5zY3JvbGxXaWR0aD5pLndpZHRofX0odGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCksdGhpcy5yZXBvc2l0aW9uPXM9Pm5ldyBuZyh0aGlzLl9zY3JvbGxEaXNwYXRjaGVyLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fbmdab25lLHMpLHRoaXMuX2RvY3VtZW50PW99fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooJG0pLGooVmEpLGooX3QpLGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxzYz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnNjcm9sbFN0cmF0ZWd5PW5ldyBNMix0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMSx0aGlzLmJhY2tkcm9wQ2xhc3M9ImNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AiLHRoaXMuZGlzcG9zZU9uTmF2aWdhdGlvbj0hMSx0KXtsZXQgZT1PYmplY3Qua2V5cyh0KTtmb3IobGV0IGkgb2YgZSl2b2lkIDAhPT10W2ldJiYodGhpc1tpXT10W2ldKX19fSx4dGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdHRhY2hlZE92ZXJsYXlzPVtdLHRoaXMuX2RvY3VtZW50PWV9bmdPbkRlc3Ryb3koKXt0aGlzLmRldGFjaCgpfWFkZChlKXt0aGlzLnJlbW92ZShlKSx0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnB1c2goZSl9cmVtb3ZlKGUpe2xldCBpPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuaW5kZXhPZihlKTtpPi0xJiZ0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNwbGljZShpLDEpLDA9PT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmdGhpcy5kZXRhY2goKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihIdCkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGdPZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgeHRle2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoZSksdGhpcy5fbmdab25lPWksdGhpcy5fa2V5ZG93bkxpc3RlbmVyPXI9PntsZXQgbz10aGlzLl9hdHRhY2hlZE92ZXJsYXlzO2ZvcihsZXQgcz1vLmxlbmd0aC0xO3M+LTE7cy0tKWlmKG9bc10uX2tleWRvd25FdmVudHMub2JzZXJ2ZXJzLmxlbmd0aD4wKXtsZXQgYT1vW3NdLl9rZXlkb3duRXZlbnRzO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5hLm5leHQocikpOmEubmV4dChyKTticmVha319fWFkZChlKXtzdXBlci5hZGQoZSksdGhpcy5faXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRoaXMuX2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyKSk6dGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIpLHRoaXMuX2lzQXR0YWNoZWQ9ITApfWRldGFjaCgpe3RoaXMuX2lzQXR0YWNoZWQmJih0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lciksdGhpcy5faXNBdHRhY2hlZD0hMSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSHQpLGooX3QsOCkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLF9PZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgeHRle2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2N1cnNvclN0eWxlSXNTZXQ9ITEsdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lcj1vPT57dGhpcy5fcG9pbnRlckRvd25FdmVudFRhcmdldD1RYyhvKX0sdGhpcy5fY2xpY2tMaXN0ZW5lcj1vPT57bGV0IHM9UWMobyksYT0iY2xpY2siPT09by50eXBlJiZ0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0P3RoaXMuX3BvaW50ZXJEb3duRXZlbnRUYXJnZXQ6czt0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0PW51bGw7bGV0IGw9dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5zbGljZSgpO2ZvcihsZXQgYz1sLmxlbmd0aC0xO2M+LTE7Yy0tKXtsZXQgdT1sW2NdO2lmKHUuX291dHNpZGVQb2ludGVyRXZlbnRzLm9ic2VydmVycy5sZW5ndGg8MXx8IXUuaGFzQXR0YWNoZWQoKSljb250aW51ZTtpZih1Lm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKHMpfHx1Lm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKGEpKWJyZWFrO2xldCBkPXUuX291dHNpZGVQb2ludGVyRXZlbnRzO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5kLm5leHQobykpOmQubmV4dChvKX19fWFkZChlKXtpZihzdXBlci5hZGQoZSksIXRoaXMuX2lzQXR0YWNoZWQpe2xldCBpPXRoaXMuX2RvY3VtZW50LmJvZHk7dGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoaSkpOnRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKGkpLHRoaXMuX3BsYXRmb3JtLklPUyYmIXRoaXMuX2N1cnNvclN0eWxlSXNTZXQmJih0aGlzLl9jdXJzb3JPcmlnaW5hbFZhbHVlPWkuc3R5bGUuY3Vyc29yLGkuc3R5bGUuY3Vyc29yPSJwb2ludGVyIix0aGlzLl9jdXJzb3JTdHlsZUlzU2V0PSEwKSx0aGlzLl9pc0F0dGFjaGVkPSEwfX1kZXRhY2goKXtpZih0aGlzLl9pc0F0dGFjaGVkKXtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5O2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYXV4Y2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fY3Vyc29yU3R5bGVJc1NldCYmKGUuc3R5bGUuY3Vyc29yPXRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWUsdGhpcy5fY3Vyc29yU3R5bGVJc1NldD0hMSksdGhpcy5faXNBdHRhY2hlZD0hMX19X2FkZEV2ZW50TGlzdGVuZXJzKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiYXV4Y2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEh0KSxqKG9pKSxqKF90LDgpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxSdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fcGxhdGZvcm09aSx0aGlzLl9kb2N1bWVudD1lfW5nT25EZXN0cm95KCl7dGhpcy5fY29udGFpbmVyRWxlbWVudD8ucmVtb3ZlKCl9Z2V0Q29udGFpbmVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9jb250YWluZXJFbGVtZW50fHx0aGlzLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9jb250YWluZXJFbGVtZW50fV9jcmVhdGVDb250YWluZXIoKXtsZXQgZT0iY2RrLW92ZXJsYXktY29udGFpbmVyIjtpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fFpNKCkpe2xldCByPXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2V9W3BsYXRmb3JtPSJzZXJ2ZXIiXSwgLiR7ZX1bcGxhdGZvcm09InRlc3QiXWApO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXJbb10ucmVtb3ZlKCl9bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5jbGFzc0xpc3QuYWRkKGUpLFpNKCk/aS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwidGVzdCIpOnRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8aS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwic2VydmVyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpKSx0aGlzLl9jb250YWluZXJFbGVtZW50PWl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSHQpLGoob2kpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxkZD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyx1PSExKXt0aGlzLl9wb3J0YWxPdXRsZXQ9dCx0aGlzLl9ob3N0PWUsdGhpcy5fcGFuZT1pLHRoaXMuX2NvbmZpZz1yLHRoaXMuX25nWm9uZT1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1zLHRoaXMuX2RvY3VtZW50PWEsdGhpcy5fbG9jYXRpb249bCx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyPWMsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPXUsdGhpcy5fYmFja2Ryb3BFbGVtZW50PW51bGwsdGhpcy5fYmFja2Ryb3BDbGljaz1uZXcga2UsdGhpcy5fYXR0YWNobWVudHM9bmV3IGtlLHRoaXMuX2RldGFjaG1lbnRzPW5ldyBrZSx0aGlzLl9sb2NhdGlvbkNoYW5nZXM9U24uRU1QVFksdGhpcy5fYmFja2Ryb3BDbGlja0hhbmRsZXI9ZD0+dGhpcy5fYmFja2Ryb3BDbGljay5uZXh0KGQpLHRoaXMuX2JhY2tkcm9wVHJhbnNpdGlvbmVuZEhhbmRsZXI9ZD0+e3RoaXMuX2Rpc3Bvc2VCYWNrZHJvcChkLnRhcmdldCl9LHRoaXMuX2tleWRvd25FdmVudHM9bmV3IGtlLHRoaXMuX291dHNpZGVQb2ludGVyRXZlbnRzPW5ldyBrZSxyLnNjcm9sbFN0cmF0ZWd5JiYodGhpcy5fc2Nyb2xsU3RyYXRlZ3k9ci5zY3JvbGxTdHJhdGVneSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcykpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9ci5wb3NpdGlvblN0cmF0ZWd5fWdldCBvdmVybGF5RWxlbWVudCgpe3JldHVybiB0aGlzLl9wYW5lfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fWdldCBob3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9ob3N0fWF0dGFjaCh0KXshdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiZ0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQmJnRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KTtsZXQgZT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoKHQpO3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLl91cGRhdGVTdGFja2luZ09yZGVyKCksdGhpcy5fdXBkYXRlRWxlbWVudFNpemUoKSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmVuYWJsZSgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKFF0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMudXBkYXRlUG9zaXRpb24oKX0pLHRoaXMuX3RvZ2dsZVBvaW50ZXJFdmVudHMoITApLHRoaXMuX2NvbmZpZy5oYXNCYWNrZHJvcCYmdGhpcy5fYXR0YWNoQmFja2Ryb3AoKSx0aGlzLl9jb25maWcucGFuZWxDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzLCEwKSx0aGlzLl9hdHRhY2htZW50cy5uZXh0KCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLmFkZCh0aGlzKSx0aGlzLl9jb25maWcuZGlzcG9zZU9uTmF2aWdhdGlvbiYmKHRoaXMuX2xvY2F0aW9uQ2hhbmdlcz10aGlzLl9sb2NhdGlvbi5zdWJzY3JpYmUoKCk9PnRoaXMuZGlzcG9zZSgpKSksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5hZGQodGhpcyksImZ1bmN0aW9uIj09dHlwZW9mIGU/Lm9uRGVzdHJveSYmZS5vbkRlc3Ryb3koKCk9Pnt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5kZXRhY2goKSkpfSksZX1kZXRhY2goKXtpZighdGhpcy5oYXNBdHRhY2hlZCgpKXJldHVybjt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kZXRhY2gmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRpc2FibGUoKTtsZXQgdD10aGlzLl9wb3J0YWxPdXRsZXQuZGV0YWNoKCk7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHRoaXMuX2RldGFjaENvbnRlbnRXaGVuU3RhYmxlKCksdGhpcy5fbG9jYXRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdH1kaXNwb3NlKCl7bGV0IHQ9dGhpcy5oYXNBdHRhY2hlZCgpO3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpLHRoaXMuX2Rpc3Bvc2VTY3JvbGxTdHJhdGVneSgpLHRoaXMuX2Rpc3Bvc2VCYWNrZHJvcCh0aGlzLl9iYWNrZHJvcEVsZW1lbnQpLHRoaXMuX2xvY2F0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fcG9ydGFsT3V0bGV0LmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2htZW50cy5jb21wbGV0ZSgpLHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKSx0aGlzLl9rZXlkb3duRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5fb3V0c2lkZVBvaW50ZXJFdmVudHMuY29tcGxldGUoKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9ob3N0Py5yZW1vdmUoKSx0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQ9dGhpcy5fcGFuZT10aGlzLl9ob3N0PW51bGwsdCYmdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2RldGFjaG1lbnRzLmNvbXBsZXRlKCl9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCl9YmFja2Ryb3BDbGljaygpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrfWF0dGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2F0dGFjaG1lbnRzfWRldGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzfWtleWRvd25FdmVudHMoKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50c31vdXRzaWRlUG9pbnRlckV2ZW50cygpe3JldHVybiB0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50c31nZXRDb25maWcoKXtyZXR1cm4gdGhpcy5fY29uZmlnfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5hcHBseSgpfXVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodCl7dCE9PXRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJih0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5PXQsdGhpcy5oYXNBdHRhY2hlZCgpJiYodC5hdHRhY2godGhpcyksdGhpcy51cGRhdGVQb3NpdGlvbigpKSl9dXBkYXRlU2l6ZSh0KXt0aGlzLl9jb25maWc9ey4uLnRoaXMuX2NvbmZpZywuLi50fSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpfXNldERpcmVjdGlvbih0KXt0aGlzLl9jb25maWc9ey4uLnRoaXMuX2NvbmZpZyxkaXJlY3Rpb246dH0sdGhpcy5fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpfWFkZFBhbmVsQ2xhc3ModCl7dGhpcy5fcGFuZSYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHQsITApfXJlbW92ZVBhbmVsQ2xhc3ModCl7dGhpcy5fcGFuZSYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHQsITEpfWdldERpcmVjdGlvbigpe2xldCB0PXRoaXMuX2NvbmZpZy5kaXJlY3Rpb247cmV0dXJuIHQ/InN0cmluZyI9PXR5cGVvZiB0P3Q6dC52YWx1ZToibHRyIn11cGRhdGVTY3JvbGxTdHJhdGVneSh0KXt0IT09dGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJih0aGlzLl9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKSx0aGlzLl9zY3JvbGxTdHJhdGVneT10LHRoaXMuaGFzQXR0YWNoZWQoKSYmKHQuYXR0YWNoKHRoaXMpLHQuZW5hYmxlKCkpKX1fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfV91cGRhdGVFbGVtZW50U2l6ZSgpe2lmKCF0aGlzLl9wYW5lKXJldHVybjtsZXQgdD10aGlzLl9wYW5lLnN0eWxlO3Qud2lkdGg9eW8odGhpcy5fY29uZmlnLndpZHRoKSx0LmhlaWdodD15byh0aGlzLl9jb25maWcuaGVpZ2h0KSx0Lm1pbldpZHRoPXlvKHRoaXMuX2NvbmZpZy5taW5XaWR0aCksdC5taW5IZWlnaHQ9eW8odGhpcy5fY29uZmlnLm1pbkhlaWdodCksdC5tYXhXaWR0aD15byh0aGlzLl9jb25maWcubWF4V2lkdGgpLHQubWF4SGVpZ2h0PXlvKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQpfV90b2dnbGVQb2ludGVyRXZlbnRzKHQpe3RoaXMuX3BhbmUuc3R5bGUucG9pbnRlckV2ZW50cz10PyIiOiJub25lIn1fYXR0YWNoQmFja2Ryb3AoKXtsZXQgdD0iY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyI7dGhpcy5fYmFja2Ryb3BFbGVtZW50PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcCIpLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9uIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2JhY2tkcm9wQ2xpY2tIYW5kbGVyKSwhdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiZ0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9iYWNrZHJvcEVsZW1lbnQmJnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKHQpfSl9KTp0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0KX1fdXBkYXRlU3RhY2tpbmdPcmRlcigpe3RoaXMuX2hvc3QubmV4dFNpYmxpbmcmJnRoaXMuX2hvc3QucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KX1kZXRhY2hCYWNrZHJvcCgpe2xldCB0PXRoaXMuX2JhY2tkcm9wRWxlbWVudDtpZih0KXtpZih0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQpcmV0dXJuIHZvaWQgdGhpcy5fZGlzcG9zZUJhY2tkcm9wKHQpO3QuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3QuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsdGhpcy5fYmFja2Ryb3BUcmFuc2l0aW9uZW5kSGFuZGxlcil9KSx0LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHRoaXMuX2JhY2tkcm9wVGltZW91dD10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnNldFRpbWVvdXQoKCk9Pnt0aGlzLl9kaXNwb3NlQmFja2Ryb3AodCl9LDUwMCkpfX1fdG9nZ2xlQ2xhc3Nlcyh0LGUsaSl7bGV0IHI9eHYoZXx8W10pLmZpbHRlcihvPT4hIW8pO3IubGVuZ3RoJiYoaT90LmNsYXNzTGlzdC5hZGQoLi4ucik6dC5jbGFzc0xpc3QucmVtb3ZlKC4uLnIpKX1fZGV0YWNoQ29udGVudFdoZW5TdGFibGUoKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgdD10aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShzdChKdCh0aGlzLl9hdHRhY2htZW50cyx0aGlzLl9kZXRhY2htZW50cykpKS5zdWJzY3JpYmUoKCk9PnsoIXRoaXMuX3BhbmV8fCF0aGlzLl9ob3N0fHwwPT09dGhpcy5fcGFuZS5jaGlsZHJlbi5sZW5ndGgpJiYodGhpcy5fcGFuZSYmdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMSksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiYodGhpcy5fcHJldmlvdXNIb3N0UGFyZW50PXRoaXMuX2hvc3QucGFyZW50RWxlbWVudCx0aGlzLl9ob3N0LnJlbW92ZSgpKSx0LnVuc3Vic2NyaWJlKCkpfSl9KX1fZGlzcG9zZVNjcm9sbFN0cmF0ZWd5KCl7bGV0IHQ9dGhpcy5fc2Nyb2xsU3RyYXRlZ3k7dCYmKHQuZGlzYWJsZSgpLHQuZGV0YWNoJiZ0LmRldGFjaCgpKX1fZGlzcG9zZUJhY2tkcm9wKHQpe3QmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9iYWNrZHJvcENsaWNrSGFuZGxlciksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix0aGlzLl9iYWNrZHJvcFRyYW5zaXRpb25lbmRIYW5kbGVyKSx0LnJlbW92ZSgpLHRoaXMuX2JhY2tkcm9wRWxlbWVudD09PXQmJih0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCkpLHRoaXMuX2JhY2tkcm9wVGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl9iYWNrZHJvcFRpbWVvdXQpLHRoaXMuX2JhY2tkcm9wVGltZW91dD12b2lkIDApfX0sX3RlPSJjZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94Iix2T2U9LyhbQS1aYS16JV0rKSQvO2Z1bmN0aW9uIHRnKG4sdCl7Zm9yKGxldCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmKG5bZV09dFtlXSk7cmV0dXJuIG59ZnVuY3Rpb24gdnRlKG4pe2lmKCJudW1iZXIiIT10eXBlb2YgbiYmbnVsbCE9bil7bGV0W3QsZV09bi5zcGxpdCh2T2UpO3JldHVybiBlJiYicHgiIT09ZT9udWxsOnBhcnNlRmxvYXQodCl9cmV0dXJuIG58fG51bGx9ZnVuY3Rpb24geXRlKG4pe3JldHVybnt0b3A6TWF0aC5mbG9vcihuLnRvcCkscmlnaHQ6TWF0aC5mbG9vcihuLnJpZ2h0KSxib3R0b206TWF0aC5mbG9vcihuLmJvdHRvbSksbGVmdDpNYXRoLmZsb29yKG4ubGVmdCksd2lkdGg6TWF0aC5mbG9vcihuLndpZHRoKSxoZWlnaHQ6TWF0aC5mbG9vcihuLmhlaWdodCl9fXZhciBidGU9ImNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIix5T2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9wbGF0Zm9ybT1yLHRoaXMuX292ZXJsYXlDb250YWluZXI9b31nbG9iYWwoKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY3NzUG9zaXRpb249InN0YXRpYyIsdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl9hbGlnbkl0ZW1zPSIiLHRoaXMuX3hQb3NpdGlvbj0iIix0aGlzLl94T2Zmc2V0PSIiLHRoaXMuX3dpZHRoPSIiLHRoaXMuX2hlaWdodD0iIix0aGlzLl9pc0Rpc3Bvc2VkPSExfWF0dGFjaCh0KXtsZXQgZT10LmdldENvbmZpZygpO3RoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl93aWR0aCYmIWUud2lkdGgmJnQudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fd2lkdGh9KSx0aGlzLl9oZWlnaHQmJiFlLmhlaWdodCYmdC51cGRhdGVTaXplKHtoZWlnaHQ6dGhpcy5faGVpZ2h0fSksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGJ0ZSksdGhpcy5faXNEaXNwb3NlZD0hMX10b3AodD0iIil7cmV0dXJuIHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl90b3BPZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LXN0YXJ0Iix0aGlzfWxlZnQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249ImxlZnQiLHRoaXN9Ym90dG9tKHQ9IiIpe3JldHVybiB0aGlzLl90b3BPZmZzZXQ9IiIsdGhpcy5fYm90dG9tT2Zmc2V0PXQsdGhpcy5fYWxpZ25JdGVtcz0iZmxleC1lbmQiLHRoaXN9cmlnaHQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249InJpZ2h0Iix0aGlzfXN0YXJ0KHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJzdGFydCIsdGhpc31lbmQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249ImVuZCIsdGhpc313aWR0aCh0PSIiKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe3dpZHRoOnR9KTp0aGlzLl93aWR0aD10LHRoaXN9aGVpZ2h0KHQ9IiIpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7aGVpZ2h0OnR9KTp0aGlzLl9oZWlnaHQ9dCx0aGlzfWNlbnRlckhvcml6b250YWxseSh0PSIiKXtyZXR1cm4gdGhpcy5sZWZ0KHQpLHRoaXMuX3hQb3NpdGlvbj0iY2VudGVyIix0aGlzfWNlbnRlclZlcnRpY2FsbHkodD0iIil7cmV0dXJuIHRoaXMudG9wKHQpLHRoaXMuX2FsaWduSXRlbXM9ImNlbnRlciIsdGhpc31hcHBseSgpe2lmKCF0aGlzLl9vdmVybGF5UmVmfHwhdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpKXJldHVybjtsZXQgdD10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLGU9dGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5zdHlsZSxpPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkse3dpZHRoOnIsaGVpZ2h0Om8sbWF4V2lkdGg6cyxtYXhIZWlnaHQ6YX09aSxsPSEoIjEwMCUiIT09ciYmIjEwMHZ3IiE9PXJ8fHMmJiIxMDAlIiE9PXMmJiIxMDB2dyIhPT1zKSxjPSEoIjEwMCUiIT09byYmIjEwMHZoIiE9PW98fGEmJiIxMDAlIiE9PWEmJiIxMDB2aCIhPT1hKSx1PXRoaXMuX3hQb3NpdGlvbixkPXRoaXMuX3hPZmZzZXQscD0icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkuZGlyZWN0aW9uLGg9IiIsZj0iIixtPSIiO2w/bT0iZmxleC1zdGFydCI6ImNlbnRlciI9PT11PyhtPSJjZW50ZXIiLHA/Zj1kOmg9ZCk6cD8ibGVmdCI9PT11fHwiZW5kIj09PXU/KG09ImZsZXgtZW5kIixoPWQpOigicmlnaHQiPT09dXx8InN0YXJ0Ij09PXUpJiYobT0iZmxleC1zdGFydCIsZj1kKToibGVmdCI9PT11fHwic3RhcnQiPT09dT8obT0iZmxleC1zdGFydCIsaD1kKTooInJpZ2h0Ij09PXV8fCJlbmQiPT09dSkmJihtPSJmbGV4LWVuZCIsZj1kKSx0LnBvc2l0aW9uPXRoaXMuX2Nzc1Bvc2l0aW9uLHQubWFyZ2luTGVmdD1sPyIwIjpoLHQubWFyZ2luVG9wPWM/IjAiOnRoaXMuX3RvcE9mZnNldCx0Lm1hcmdpbkJvdHRvbT10aGlzLl9ib3R0b21PZmZzZXQsdC5tYXJnaW5SaWdodD1sPyIwIjpmLGUuanVzdGlmeUNvbnRlbnQ9bSxlLmFsaWduSXRlbXM9Yz8iZmxleC1zdGFydCI6dGhpcy5fYWxpZ25JdGVtc31kaXNwb3NlKCl7aWYodGhpcy5faXNEaXNwb3NlZHx8IXRoaXMuX292ZXJsYXlSZWYpcmV0dXJuO2xldCB0PXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUsZT10aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LGk9ZS5zdHlsZTtlLmNsYXNzTGlzdC5yZW1vdmUoYnRlKSxpLmp1c3RpZnlDb250ZW50PWkuYWxpZ25JdGVtcz10Lm1hcmdpblRvcD10Lm1hcmdpbkJvdHRvbT10Lm1hcmdpbkxlZnQ9dC5tYXJnaW5SaWdodD10LnBvc2l0aW9uPSIiLHRoaXMuX292ZXJsYXlSZWY9bnVsbCx0aGlzLl9pc0Rpc3Bvc2VkPSEwfX19ZmxleGlibGVDb25uZWN0ZWRUbyhlKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fcGxhdGZvcm09cix0aGlzLl9vdmVybGF5Q29udGFpbmVyPW8sdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5faXNQdXNoZWQ9ITEsdGhpcy5fY2FuUHVzaD0hMCx0aGlzLl9ncm93QWZ0ZXJPcGVuPSExLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucz0hMCx0aGlzLl9wb3NpdGlvbkxvY2tlZD0hMSx0aGlzLl92aWV3cG9ydE1hcmdpbj0wLHRoaXMuX3Njcm9sbGFibGVzPVtdLHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvbkNoYW5nZXM9bmV3IGtlLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj1Tbi5FTVBUWSx0aGlzLl9vZmZzZXRYPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXM9W10sdGhpcy5wb3NpdGlvbkNoYW5nZXM9dGhpcy5fcG9zaXRpb25DaGFuZ2VzLHRoaXMuc2V0T3JpZ2luKHQpfWdldCBwb3NpdGlvbnMoKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfWF0dGFjaCh0KXt0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChfdGUpLHRoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl9ib3VuZGluZ0JveD10Lmhvc3RFbGVtZW50LHRoaXMuX3BhbmU9dC5vdmVybGF5RWxlbWVudCx0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMCx0aGlzLl9sYXN0UG9zaXRpb249bnVsbCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9pc0luaXRpYWxSZW5kZXI9ITAsdGhpcy5hcHBseSgpfSl9YXBwbHkoKXtpZih0aGlzLl9pc0Rpc3Bvc2VkfHwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybjtpZighdGhpcy5faXNJbml0aWFsUmVuZGVyJiZ0aGlzLl9wb3NpdGlvbkxvY2tlZCYmdGhpcy5fbGFzdFBvc2l0aW9uKXJldHVybiB2b2lkIHRoaXMucmVhcHBseUxhc3RQb3NpdGlvbigpO3RoaXMuX2NsZWFyUGFuZWxDbGFzc2VzKCksdGhpcy5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpLHRoaXMuX3Jlc2V0Qm91bmRpbmdCb3hTdHlsZXMoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKSx0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX2dldE9yaWdpblJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX2NvbnRhaW5lclJlY3Q9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IHMsdD10aGlzLl9vcmlnaW5SZWN0LGU9dGhpcy5fb3ZlcmxheVJlY3QsaT10aGlzLl92aWV3cG9ydFJlY3Qscj10aGlzLl9jb250YWluZXJSZWN0LG89W107Zm9yKGxldCBhIG9mIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucyl7bGV0IGw9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodCxyLGEpLGM9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGwsZSxhKSx1PXRoaXMuX2dldE92ZXJsYXlGaXQoYyxlLGksYSk7aWYodS5pc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKGEsbCk7dGhpcy5fY2FuRml0V2l0aEZsZXhpYmxlRGltZW5zaW9ucyh1LGMsaSk/by5wdXNoKHtwb3NpdGlvbjphLG9yaWdpbjpsLG92ZXJsYXlSZWN0OmUsYm91bmRpbmdCb3hSZWN0OnRoaXMuX2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdChsLGEpfSk6KCFzfHxzLm92ZXJsYXlGaXQudmlzaWJsZUFyZWE8dS52aXNpYmxlQXJlYSkmJihzPXtvdmVybGF5Rml0OnUsb3ZlcmxheVBvaW50OmMsb3JpZ2luUG9pbnQ6bCxwb3NpdGlvbjphLG92ZXJsYXlSZWN0OmV9KX1pZihvLmxlbmd0aCl7bGV0IGE9bnVsbCxsPS0xO2ZvcihsZXQgYyBvZiBvKXtsZXQgdT1jLmJvdW5kaW5nQm94UmVjdC53aWR0aCpjLmJvdW5kaW5nQm94UmVjdC5oZWlnaHQqKGMucG9zaXRpb24ud2VpZ2h0fHwxKTt1PmwmJihsPXUsYT1jKX1yZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKGEucG9zaXRpb24sYS5vcmlnaW4pfWlmKHRoaXMuX2NhblB1c2gpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSEwLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihzLnBvc2l0aW9uLHMub3JpZ2luUG9pbnQpO3RoaXMuX2FwcGx5UG9zaXRpb24ocy5wb3NpdGlvbixzLm9yaWdpblBvaW50KX1kZXRhY2goKXt0aGlzLl9jbGVhclBhbmVsQ2xhc3NlcygpLHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsLHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudD1udWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkfHwodGhpcy5fYm91bmRpbmdCb3gmJnRnKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IiIsbGVmdDoiIixyaWdodDoiIixib3R0b206IiIsaGVpZ2h0OiIiLHdpZHRoOiIiLGFsaWduSXRlbXM6IiIsanVzdGlmeUNvbnRlbnQ6IiJ9KSx0aGlzLl9wYW5lJiZ0aGlzLl9yZXNldE92ZXJsYXlFbGVtZW50U3R5bGVzKCksdGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKF90ZSksdGhpcy5kZXRhY2goKSx0aGlzLl9wb3NpdGlvbkNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9vdmVybGF5UmVmPXRoaXMuX2JvdW5kaW5nQm94PW51bGwsdGhpcy5faXNEaXNwb3NlZD0hMCl9cmVhcHBseUxhc3RQb3NpdGlvbigpe2lmKHRoaXMuX2lzRGlzcG9zZWR8fCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuO2xldCB0PXRoaXMuX2xhc3RQb3NpdGlvbjtpZih0KXt0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX2dldE9yaWdpblJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpLHRoaXMuX2NvbnRhaW5lclJlY3Q9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IGU9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodGhpcy5fb3JpZ2luUmVjdCx0aGlzLl9jb250YWluZXJSZWN0LHQpO3RoaXMuX2FwcGx5UG9zaXRpb24odCxlKX1lbHNlIHRoaXMuYXBwbHkoKX13aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVzPXQsdGhpc313aXRoUG9zaXRpb25zKHQpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9dCwtMT09PXQuaW5kZXhPZih0aGlzLl9sYXN0UG9zaXRpb24pJiYodGhpcy5fbGFzdFBvc2l0aW9uPW51bGwpLHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdGhpc313aXRoVmlld3BvcnRNYXJnaW4odCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0TWFyZ2luPXQsdGhpc313aXRoRmxleGlibGVEaW1lbnNpb25zKHQ9ITApe3JldHVybiB0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9dCx0aGlzfXdpdGhHcm93QWZ0ZXJPcGVuKHQ9ITApe3JldHVybiB0aGlzLl9ncm93QWZ0ZXJPcGVuPXQsdGhpc313aXRoUHVzaCh0PSEwKXtyZXR1cm4gdGhpcy5fY2FuUHVzaD10LHRoaXN9d2l0aExvY2tlZFBvc2l0aW9uKHQ9ITApe3JldHVybiB0aGlzLl9wb3NpdGlvbkxvY2tlZD10LHRoaXN9c2V0T3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCx0aGlzfXdpdGhEZWZhdWx0T2Zmc2V0WCh0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WD10LHRoaXN9d2l0aERlZmF1bHRPZmZzZXRZKHQpe3JldHVybiB0aGlzLl9vZmZzZXRZPXQsdGhpc313aXRoVHJhbnNmb3JtT3JpZ2luT24odCl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yPXQsdGhpc31fZ2V0T3JpZ2luUG9pbnQodCxlLGkpe2xldCByLG87aWYoImNlbnRlciI9PWkub3JpZ2luWClyPXQubGVmdCt0LndpZHRoLzI7ZWxzZXtsZXQgcz10aGlzLl9pc1J0bCgpP3QucmlnaHQ6dC5sZWZ0LGE9dGhpcy5faXNSdGwoKT90LmxlZnQ6dC5yaWdodDtyPSJzdGFydCI9PWkub3JpZ2luWD9zOmF9cmV0dXJuIGUubGVmdDwwJiYoci09ZS5sZWZ0KSxvPSJjZW50ZXIiPT1pLm9yaWdpblk/dC50b3ArdC5oZWlnaHQvMjoidG9wIj09aS5vcmlnaW5ZP3QudG9wOnQuYm90dG9tLGUudG9wPDAmJihvLT1lLnRvcCkse3g6cix5Om99fV9nZXRPdmVybGF5UG9pbnQodCxlLGkpe2xldCByLG87cmV0dXJuIHI9ImNlbnRlciI9PWkub3ZlcmxheVg/LWUud2lkdGgvMjoic3RhcnQiPT09aS5vdmVybGF5WD90aGlzLl9pc1J0bCgpPy1lLndpZHRoOjA6dGhpcy5faXNSdGwoKT8wOi1lLndpZHRoLG89ImNlbnRlciI9PWkub3ZlcmxheVk/LWUuaGVpZ2h0LzI6InRvcCI9PWkub3ZlcmxheVk/MDotZS5oZWlnaHQse3g6dC54K3IseTp0Lnkrb319X2dldE92ZXJsYXlGaXQodCxlLGkscil7bGV0IG89eXRlKGUpLHt4OnMseTphfT10LGw9dGhpcy5fZ2V0T2Zmc2V0KHIsIngiKSxjPXRoaXMuX2dldE9mZnNldChyLCJ5Iik7bCYmKHMrPWwpLGMmJihhKz1jKTtsZXQgcD0wLWEsaD1hK28uaGVpZ2h0LWkuaGVpZ2h0LGY9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3Moby53aWR0aCwwLXMscytvLndpZHRoLWkud2lkdGgpLG09dGhpcy5fc3VidHJhY3RPdmVyZmxvd3Moby5oZWlnaHQscCxoKSx4PWYqbTtyZXR1cm57dmlzaWJsZUFyZWE6eCxpc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydDpvLndpZHRoKm8uaGVpZ2h0PT09eCxmaXRzSW5WaWV3cG9ydFZlcnRpY2FsbHk6bT09PW8uaGVpZ2h0LGZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5OmY9PW8ud2lkdGh9fV9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKHQsZSxpKXtpZih0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMpe2xldCByPWkuYm90dG9tLWUueSxvPWkucmlnaHQtZS54LHM9dnRlKHRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWluSGVpZ2h0KSxhPXZ0ZSh0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbldpZHRoKSxjPXQuZml0c0luVmlld3BvcnRIb3Jpem9udGFsbHl8fG51bGwhPWEmJmE8PW87cmV0dXJuKHQuZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5fHxudWxsIT1zJiZzPD1yKSYmY31yZXR1cm4hMX1fcHVzaE92ZXJsYXlPblNjcmVlbih0LGUsaSl7aWYodGhpcy5fcHJldmlvdXNQdXNoQW1vdW50JiZ0aGlzLl9wb3NpdGlvbkxvY2tlZClyZXR1cm57eDp0LngrdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50LngseTp0LnkrdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50Lnl9O2xldCByPXl0ZShlKSxvPXRoaXMuX3ZpZXdwb3J0UmVjdCxzPU1hdGgubWF4KHQueCtyLndpZHRoLW8ud2lkdGgsMCksYT1NYXRoLm1heCh0Lnkrci5oZWlnaHQtby5oZWlnaHQsMCksbD1NYXRoLm1heChvLnRvcC1pLnRvcC10LnksMCksYz1NYXRoLm1heChvLmxlZnQtaS5sZWZ0LXQueCwwKSx1PTAsZD0wO3JldHVybiB1PXIud2lkdGg8PW8ud2lkdGg/Y3x8LXM6dC54PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28ubGVmdC1pLmxlZnQtdC54OjAsZD1yLmhlaWdodDw9by5oZWlnaHQ/bHx8LWE6dC55PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28udG9wLWkudG9wLXQueTowLHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudD17eDp1LHk6ZH0se3g6dC54K3UseTp0LnkrZH19X2FwcGx5UG9zaXRpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHQucGFuZWxDbGFzcyYmdGhpcy5fYWRkUGFuZWxDbGFzc2VzKHQucGFuZWxDbGFzcyksdGhpcy5fbGFzdFBvc2l0aW9uPXQsdGhpcy5fcG9zaXRpb25DaGFuZ2VzLm9ic2VydmVycy5sZW5ndGgpe2xldCBpPXRoaXMuX2dldFNjcm9sbFZpc2liaWxpdHkoKSxyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuY29ubmVjdGlvblBhaXI9dCx0aGlzLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcz1lfX0odCxpKTt0aGlzLl9wb3NpdGlvbkNoYW5nZXMubmV4dChyKX10aGlzLl9pc0luaXRpYWxSZW5kZXI9ITF9X3NldFRyYW5zZm9ybU9yaWdpbih0KXtpZighdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpcmV0dXJuO2xldCBpLGU9dGhpcy5fYm91bmRpbmdCb3gucXVlcnlTZWxlY3RvckFsbCh0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcikscj10Lm92ZXJsYXlZO2k9ImNlbnRlciI9PT10Lm92ZXJsYXlYPyJjZW50ZXIiOnRoaXMuX2lzUnRsKCk/InN0YXJ0Ij09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCI6InN0YXJ0Ij09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5zdHlsZS50cmFuc2Zvcm1PcmlnaW49YCR7aX0gJHtyfWB9X2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh0LGUpe2xldCBvLHMsYSx1LGQscCxpPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPXRoaXMuX2lzUnRsKCk7aWYoInRvcCI9PT1lLm92ZXJsYXlZKXM9dC55LG89aS5oZWlnaHQtcyt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNlIGlmKCJib3R0b20iPT09ZS5vdmVybGF5WSlhPWkuaGVpZ2h0LXQueSsyKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLG89aS5oZWlnaHQtYSt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNle2xldCBoPU1hdGgubWluKGkuYm90dG9tLXQueStpLnRvcCx0LnkpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7bz0yKmgscz10LnktaCxvPmYmJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYocz10LnktZi8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiFyfHwic3RhcnQiPT09ZS5vdmVybGF5WCYmcilwPWkud2lkdGgtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHU9dC54LXRoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2UgaWYoInN0YXJ0Ij09PWUub3ZlcmxheVgmJiFyfHwiZW5kIj09PWUub3ZlcmxheVgmJnIpZD10LngsdT1pLnJpZ2h0LXQueDtlbHNle2xldCBoPU1hdGgubWluKGkucmlnaHQtdC54K2kubGVmdCx0LngpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aDt1PTIqaCxkPXQueC1oLHU+ZiYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihkPXQueC1mLzIpfXJldHVybnt0b3A6cyxsZWZ0OmQsYm90dG9tOmEscmlnaHQ6cCx3aWR0aDp1LGhlaWdodDpvfX1fc2V0Qm91bmRpbmdCb3hTdHlsZXModCxlKXtsZXQgaT10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTshdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGkuaGVpZ2h0PU1hdGgubWluKGkuaGVpZ2h0LHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUuaGVpZ2h0KSxpLndpZHRoPU1hdGgubWluKGkud2lkdGgsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aCkpO2xldCByPXt9O2lmKHRoaXMuX2hhc0V4YWN0UG9zaXRpb24oKSlyLnRvcD1yLmxlZnQ9IjAiLHIuYm90dG9tPXIucmlnaHQ9ci5tYXhIZWlnaHQ9ci5tYXhXaWR0aD0iIixyLndpZHRoPXIuaGVpZ2h0PSIxMDAlIjtlbHNle2xldCBvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LHM9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtyLmhlaWdodD15byhpLmhlaWdodCksci50b3A9eW8oaS50b3ApLHIuYm90dG9tPXlvKGkuYm90dG9tKSxyLndpZHRoPXlvKGkud2lkdGgpLHIubGVmdD15byhpLmxlZnQpLHIucmlnaHQ9eW8oaS5yaWdodCksci5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsci5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLG8mJihyLm1heEhlaWdodD15byhvKSkscyYmKHIubWF4V2lkdGg9eW8ocykpfXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9aSx0Zyh0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSxyKX1fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpe3RnKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IjAiLGxlZnQ6IjAiLHJpZ2h0OiIwIixib3R0b206IjAiLGhlaWdodDoiIix3aWR0aDoiIixhbGlnbkl0ZW1zOiIiLGp1c3RpZnlDb250ZW50OiIifSl9X3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKXt0Zyh0aGlzLl9wYW5lLnN0eWxlLHt0b3A6IiIsbGVmdDoiIixib3R0b206IiIscmlnaHQ6IiIscG9zaXRpb246IiIsdHJhbnNmb3JtOiIifSl9X3NldE92ZXJsYXlFbGVtZW50U3R5bGVzKHQsZSl7bGV0IGk9e30scj10aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCksbz10aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMscz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpO2lmKHIpe2xldCB1PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3RnKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WShlLHQsdSkpLHRnKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WChlLHQsdSkpfWVsc2UgaS5wb3NpdGlvbj0ic3RhdGljIjtsZXQgYT0iIixsPXRoaXMuX2dldE9mZnNldChlLCJ4IiksYz10aGlzLl9nZXRPZmZzZXQoZSwieSIpO2wmJihhKz1gdHJhbnNsYXRlWCgke2x9cHgpIGApLGMmJihhKz1gdHJhbnNsYXRlWSgke2N9cHgpYCksaS50cmFuc2Zvcm09YS50cmltKCkscy5tYXhIZWlnaHQmJihyP2kubWF4SGVpZ2h0PXlvKHMubWF4SGVpZ2h0KTpvJiYoaS5tYXhIZWlnaHQ9IiIpKSxzLm1heFdpZHRoJiYocj9pLm1heFdpZHRoPXlvKHMubWF4V2lkdGgpOm8mJihpLm1heFdpZHRoPSIiKSksdGcodGhpcy5fcGFuZS5zdHlsZSxpKX1fZ2V0RXhhY3RPdmVybGF5WSh0LGUsaSl7bGV0IHI9e3RvcDoiIixib3R0b206IiJ9LG89dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYobz10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKG8sdGhpcy5fb3ZlcmxheVJlY3QsaSkpLCJib3R0b20iPT09dC5vdmVybGF5WT9yLmJvdHRvbT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LShvLnkrdGhpcy5fb3ZlcmxheVJlY3QuaGVpZ2h0KSsicHgiOnIudG9wPXlvKG8ueSkscn1fZ2V0RXhhY3RPdmVybGF5WCh0LGUsaSl7bGV0IHMscj17bGVmdDoiIixyaWdodDoiIn0sbz10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihvPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4obyx0aGlzLl9vdmVybGF5UmVjdCxpKSkscz10aGlzLl9pc1J0bCgpPyJlbmQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0IjoiZW5kIj09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCIsInJpZ2h0Ij09PXM/ci5yaWdodD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgtKG8ueCt0aGlzLl9vdmVybGF5UmVjdC53aWR0aCkrInB4IjpyLmxlZnQ9eW8oby54KSxyfV9nZXRTY3JvbGxWaXNpYmlsaXR5KCl7bGV0IHQ9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLGU9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXRoaXMuX3Njcm9sbGFibGVzLm1hcChyPT5yLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOmd0ZSh0LGkpLGlzT3JpZ2luT3V0c2lkZVZpZXc6SUgodCxpKSxpc092ZXJsYXlDbGlwcGVkOmd0ZShlLGkpLGlzT3ZlcmxheU91dHNpZGVWaWV3OklIKGUsaSl9fV9zdWJ0cmFjdE92ZXJmbG93cyh0LC4uLmUpe3JldHVybiBlLnJlZHVjZSgoaSxyKT0+aS1NYXRoLm1heChyLDApLHQpfV9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpe2xldCB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxlPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57dG9wOmkudG9wK3RoaXMuX3ZpZXdwb3J0TWFyZ2luLGxlZnQ6aS5sZWZ0K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHJpZ2h0OmkubGVmdCt0LXRoaXMuX3ZpZXdwb3J0TWFyZ2luLGJvdHRvbTppLnRvcCtlLXRoaXMuX3ZpZXdwb3J0TWFyZ2luLHdpZHRoOnQtMip0aGlzLl92aWV3cG9ydE1hcmdpbixoZWlnaHQ6ZS0yKnRoaXMuX3ZpZXdwb3J0TWFyZ2lufX1faXNSdGwoKXtyZXR1cm4icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0RGlyZWN0aW9uKCl9X2hhc0V4YWN0UG9zaXRpb24oKXtyZXR1cm4hdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zfHx0aGlzLl9pc1B1c2hlZH1fZ2V0T2Zmc2V0KHQsZSl7cmV0dXJuIngiPT09ZT9udWxsPT10Lm9mZnNldFg/dGhpcy5fb2Zmc2V0WDp0Lm9mZnNldFg6bnVsbD09dC5vZmZzZXRZP3RoaXMuX29mZnNldFk6dC5vZmZzZXRZfV92YWxpZGF0ZVBvc2l0aW9ucygpe31fYWRkUGFuZWxDbGFzc2VzKHQpe3RoaXMuX3BhbmUmJnh2KHQpLmZvckVhY2goZT0+eyIiIT09ZSYmLTE9PT10aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzLmluZGV4T2YoZSkmJih0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzLnB1c2goZSksdGhpcy5fcGFuZS5jbGFzc0xpc3QuYWRkKGUpKX0pfV9jbGVhclBhbmVsQ2xhc3Nlcygpe3RoaXMuX3BhbmUmJih0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzLmZvckVhY2godD0+e3RoaXMuX3BhbmUuY2xhc3NMaXN0LnJlbW92ZSh0KX0pLHRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXM9W10pfV9nZXRPcmlnaW5SZWN0KCl7bGV0IHQ9dGhpcy5fb3JpZ2luO2lmKHQgaW5zdGFuY2VvZiBSZSlyZXR1cm4gdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKHQgaW5zdGFuY2VvZiBFbGVtZW50KXJldHVybiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBlPXQud2lkdGh8fDAsaT10LmhlaWdodHx8MDtyZXR1cm57dG9wOnQueSxib3R0b206dC55K2ksbGVmdDp0LngscmlnaHQ6dC54K2UsaGVpZ2h0Omksd2lkdGg6ZX19fShlLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fcGxhdGZvcm0sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooVmEpLGooSHQpLGoob2kpLGooUnYpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxiT2U9MCx0cj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyx1LGQscCxoKXt0aGlzLnNjcm9sbFN0cmF0ZWdpZXM9ZSx0aGlzLl9vdmVybGF5Q29udGFpbmVyPWksdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPXIsdGhpcy5fcG9zaXRpb25CdWlsZGVyPW8sdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyPXMsdGhpcy5faW5qZWN0b3I9YSx0aGlzLl9uZ1pvbmU9bCx0aGlzLl9kb2N1bWVudD1jLHRoaXMuX2RpcmVjdGlvbmFsaXR5PXUsdGhpcy5fbG9jYXRpb249ZCx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyPXAsdGhpcy5fYW5pbWF0aW9uc01vZHVsZVR5cGU9aH1jcmVhdGUoZSl7bGV0IGk9dGhpcy5fY3JlYXRlSG9zdEVsZW1lbnQoKSxyPXRoaXMuX2NyZWF0ZVBhbmVFbGVtZW50KGkpLG89dGhpcy5fY3JlYXRlUG9ydGFsT3V0bGV0KHIpLHM9bmV3IHNjKGUpO3JldHVybiBzLmRpcmVjdGlvbj1zLmRpcmVjdGlvbnx8dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWUsbmV3IGRkKG8saSxyLHMsdGhpcy5fbmdab25lLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcix0aGlzLl9kb2N1bWVudCx0aGlzLl9sb2NhdGlvbix0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLCJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25zTW9kdWxlVHlwZSl9cG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25CdWlsZGVyfV9jcmVhdGVQYW5lRWxlbWVudChlKXtsZXQgaT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gaS5pZD0iY2RrLW92ZXJsYXktIitiT2UrKyxpLmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LXBhbmUiKSxlLmFwcGVuZENoaWxkKGkpLGl9X2NyZWF0ZUhvc3RFbGVtZW50KCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFwcGVuZENoaWxkKGUpLGV9X2NyZWF0ZVBvcnRhbE91dGxldChlKXtyZXR1cm4gdGhpcy5fYXBwUmVmfHwodGhpcy5fYXBwUmVmPXRoaXMuX2luamVjdG9yLmdldChJdSkpLG5ldyBhdyhlLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcix0aGlzLl9hcHBSZWYsdGhpcy5faW5qZWN0b3IsdGhpcy5fZG9jdW1lbnQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKG1PZSksaihSdiksaihncyksaih5T2UpLGooZ09lKSxqKFhuKSxqKF90KSxqKEh0KSxqKCRpKSxqKGlNKSxqKF9PZSksaihQaSw4KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkseE9lPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6InRvcCJ9XSxDdGU9bmV3IHBlKCJjZGstY29ubmVjdGVkLW92ZXJsYXktc2Nyb2xsLXN0cmF0ZWd5IiksaWc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnRSZWY9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstb3ZlcmxheS1vcmlnaW4iLCIiXSxbIiIsIm92ZXJsYXktb3JpZ2luIiwiIl0sWyIiLCJjZGtPdmVybGF5T3JpZ2luIiwiIl1dLGV4cG9ydEFzOlsiY2RrT3ZlcmxheU9yaWdpbiJdfSksbn0pKCksUmg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9kaXI9cyx0aGlzLl9oYXNCYWNrZHJvcD0hMSx0aGlzLl9sb2NrUG9zaXRpb249ITEsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9ITEsdGhpcy5fcHVzaD0hMSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbj1Tbi5FTVBUWSx0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb249U24uRU1QVFksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uPVNuLkVNUFRZLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uPVNuLkVNUFRZLHRoaXMudmlld3BvcnRNYXJnaW49MCx0aGlzLm9wZW49ITEsdGhpcy5kaXNhYmxlQ2xvc2U9ITEsdGhpcy5iYWNrZHJvcENsaWNrPW5ldyBHLHRoaXMucG9zaXRpb25DaGFuZ2U9bmV3IEcsdGhpcy5hdHRhY2g9bmV3IEcsdGhpcy5kZXRhY2g9bmV3IEcsdGhpcy5vdmVybGF5S2V5ZG93bj1uZXcgRyx0aGlzLm92ZXJsYXlPdXRzaWRlQ2xpY2s9bmV3IEcsdGhpcy5fdGVtcGxhdGVQb3J0YWw9bmV3IGtzKGksciksdGhpcy5fc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5PW8sdGhpcy5zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKX1nZXQgb2Zmc2V0WCgpe3JldHVybiB0aGlzLl9vZmZzZXRYfXNldCBvZmZzZXRYKGUpe3RoaXMuX29mZnNldFg9ZSx0aGlzLl9wb3NpdGlvbiYmdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbil9Z2V0IG9mZnNldFkoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0WX1zZXQgb2Zmc2V0WShlKXt0aGlzLl9vZmZzZXRZPWUsdGhpcy5fcG9zaXRpb24mJnRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pfWdldCBoYXNCYWNrZHJvcCgpe3JldHVybiB0aGlzLl9oYXNCYWNrZHJvcH1zZXQgaGFzQmFja2Ryb3AoZSl7dGhpcy5faGFzQmFja2Ryb3A9UnQoZSl9Z2V0IGxvY2tQb3NpdGlvbigpe3JldHVybiB0aGlzLl9sb2NrUG9zaXRpb259c2V0IGxvY2tQb3NpdGlvbihlKXt0aGlzLl9sb2NrUG9zaXRpb249UnQoZSl9Z2V0IGZsZXhpYmxlRGltZW5zaW9ucygpe3JldHVybiB0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnN9c2V0IGZsZXhpYmxlRGltZW5zaW9ucyhlKXt0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9UnQoZSl9Z2V0IGdyb3dBZnRlck9wZW4oKXtyZXR1cm4gdGhpcy5fZ3Jvd0FmdGVyT3Blbn1zZXQgZ3Jvd0FmdGVyT3BlbihlKXt0aGlzLl9ncm93QWZ0ZXJPcGVuPVJ0KGUpfWdldCBwdXNoKCl7cmV0dXJuIHRoaXMuX3B1c2h9c2V0IHB1c2goZSl7dGhpcy5fcHVzaD1SdChlKX1nZXQgb3ZlcmxheVJlZigpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmfWdldCBkaXIoKXtyZXR1cm4gdGhpcy5fZGlyP3RoaXMuX2Rpci52YWx1ZToibHRyIn1uZ09uRGVzdHJveSgpe3RoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9wb3NpdGlvbiYmKHRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy53aWR0aCxtaW5XaWR0aDp0aGlzLm1pbldpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxtaW5IZWlnaHQ6dGhpcy5taW5IZWlnaHR9KSxlLm9yaWdpbiYmdGhpcy5vcGVuJiZ0aGlzLl9wb3NpdGlvbi5hcHBseSgpKSxlLm9wZW4mJih0aGlzLm9wZW4/dGhpcy5fYXR0YWNoT3ZlcmxheSgpOnRoaXMuX2RldGFjaE92ZXJsYXkoKSl9X2NyZWF0ZU92ZXJsYXkoKXsoIXRoaXMucG9zaXRpb25zfHwhdGhpcy5wb3NpdGlvbnMubGVuZ3RoKSYmKHRoaXMucG9zaXRpb25zPXhPZSk7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9idWlsZENvbmZpZygpKTt0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb249ZS5hdHRhY2htZW50cygpLnN1YnNjcmliZSgoKT0+dGhpcy5hdHRhY2guZW1pdCgpKSx0aGlzLl9kZXRhY2hTdWJzY3JpcHRpb249ZS5kZXRhY2htZW50cygpLnN1YnNjcmliZSgoKT0+dGhpcy5kZXRhY2guZW1pdCgpKSxlLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoaT0+e3RoaXMub3ZlcmxheUtleWRvd24ubmV4dChpKSwyNz09PWkua2V5Q29kZSYmIXRoaXMuZGlzYWJsZUNsb3NlJiYha3IoaSkmJihpLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGV0YWNoT3ZlcmxheSgpKX0pLHRoaXMuX292ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5zdWJzY3JpYmUoaT0+e3RoaXMub3ZlcmxheU91dHNpZGVDbGljay5uZXh0KGkpfSl9X2J1aWxkQ29uZmlnKCl7bGV0IGU9dGhpcy5fcG9zaXRpb249dGhpcy5wb3NpdGlvblN0cmF0ZWd5fHx0aGlzLl9jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCksaT1uZXcgc2Moe2RpcmVjdGlvbjp0aGlzLl9kaXIscG9zaXRpb25TdHJhdGVneTplLHNjcm9sbFN0cmF0ZWd5OnRoaXMuc2Nyb2xsU3RyYXRlZ3ksaGFzQmFja2Ryb3A6dGhpcy5oYXNCYWNrZHJvcH0pO3JldHVybih0aGlzLndpZHRofHwwPT09dGhpcy53aWR0aCkmJihpLndpZHRoPXRoaXMud2lkdGgpLCh0aGlzLmhlaWdodHx8MD09PXRoaXMuaGVpZ2h0KSYmKGkuaGVpZ2h0PXRoaXMuaGVpZ2h0KSwodGhpcy5taW5XaWR0aHx8MD09PXRoaXMubWluV2lkdGgpJiYoaS5taW5XaWR0aD10aGlzLm1pbldpZHRoKSwodGhpcy5taW5IZWlnaHR8fDA9PT10aGlzLm1pbkhlaWdodCkmJihpLm1pbkhlaWdodD10aGlzLm1pbkhlaWdodCksdGhpcy5iYWNrZHJvcENsYXNzJiYoaS5iYWNrZHJvcENsYXNzPXRoaXMuYmFja2Ryb3BDbGFzcyksdGhpcy5wYW5lbENsYXNzJiYoaS5wYW5lbENsYXNzPXRoaXMucGFuZWxDbGFzcyksaX1fdXBkYXRlUG9zaXRpb25TdHJhdGVneShlKXtsZXQgaT10aGlzLnBvc2l0aW9ucy5tYXAocj0+KHtvcmlnaW5YOnIub3JpZ2luWCxvcmlnaW5ZOnIub3JpZ2luWSxvdmVybGF5WDpyLm92ZXJsYXlYLG92ZXJsYXlZOnIub3ZlcmxheVksb2Zmc2V0WDpyLm9mZnNldFh8fHRoaXMub2Zmc2V0WCxvZmZzZXRZOnIub2Zmc2V0WXx8dGhpcy5vZmZzZXRZLHBhbmVsQ2xhc3M6ci5wYW5lbENsYXNzfHx2b2lkIDB9KSk7cmV0dXJuIGUuc2V0T3JpZ2luKHRoaXMuX2dldEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbigpKS53aXRoUG9zaXRpb25zKGkpLndpdGhGbGV4aWJsZURpbWVuc2lvbnModGhpcy5mbGV4aWJsZURpbWVuc2lvbnMpLndpdGhQdXNoKHRoaXMucHVzaCkud2l0aEdyb3dBZnRlck9wZW4odGhpcy5ncm93QWZ0ZXJPcGVuKS53aXRoVmlld3BvcnRNYXJnaW4odGhpcy52aWV3cG9ydE1hcmdpbikud2l0aExvY2tlZFBvc2l0aW9uKHRoaXMubG9ja1Bvc2l0aW9uKS53aXRoVHJhbnNmb3JtT3JpZ2luT24odGhpcy50cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcil9X2NyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKXtsZXQgZT10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9nZXRGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oKSk7cmV0dXJuIHRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3koZSksZX1fZ2V0RmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKCl7cmV0dXJuIHRoaXMub3JpZ2luIGluc3RhbmNlb2YgaWc/dGhpcy5vcmlnaW4uZWxlbWVudFJlZjp0aGlzLm9yaWdpbn1fYXR0YWNoT3ZlcmxheSgpe3RoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5oYXNCYWNrZHJvcD10aGlzLmhhc0JhY2tkcm9wOnRoaXMuX2NyZWF0ZU92ZXJsYXkoKSx0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCl8fHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKHRoaXMuX3RlbXBsYXRlUG9ydGFsKSx0aGlzLmhhc0JhY2tkcm9wP3RoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uPXRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZShlPT57dGhpcy5iYWNrZHJvcENsaWNrLmVtaXQoZSl9KTp0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoPjAmJih0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbj10aGlzLl9wb3NpdGlvbi5wb3NpdGlvbkNoYW5nZXMucGlwZShjeCgoKT0+dGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoPjApKS5zdWJzY3JpYmUoZT0+e3RoaXMucG9zaXRpb25DaGFuZ2UuZW1pdChlKSwwPT09dGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZ0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSkpfV9kZXRhY2hPdmVybGF5KCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0odHIpLE0oVmkpLE0oT2kpLE0oQ3RlKSxNKCRpLDgpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrLWNvbm5lY3RlZC1vdmVybGF5IiwiIl0sWyIiLCJjb25uZWN0ZWQtb3ZlcmxheSIsIiJdLFsiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheSIsIiJdXSxpbnB1dHM6e29yaWdpbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iLCJvcmlnaW4iXSxwb3NpdGlvbnM6WyJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwicG9zaXRpb25zIl0scG9zaXRpb25TdHJhdGVneTpbImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvblN0cmF0ZWd5IiwicG9zaXRpb25TdHJhdGVneSJdLG9mZnNldFg6WyJjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WCIsIm9mZnNldFgiXSxvZmZzZXRZOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLCJvZmZzZXRZIl0sd2lkdGg6WyJjZGtDb25uZWN0ZWRPdmVybGF5V2lkdGgiLCJ3aWR0aCJdLGhlaWdodDpbImNka0Nvbm5lY3RlZE92ZXJsYXlIZWlnaHQiLCJoZWlnaHQiXSxtaW5XaWR0aDpbImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aCIsIm1pbldpZHRoIl0sbWluSGVpZ2h0OlsiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbkhlaWdodCIsIm1pbkhlaWdodCJdLGJhY2tkcm9wQ2xhc3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcyIsImJhY2tkcm9wQ2xhc3MiXSxwYW5lbENsYXNzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLCJwYW5lbENsYXNzIl0sdmlld3BvcnRNYXJnaW46WyJjZGtDb25uZWN0ZWRPdmVybGF5Vmlld3BvcnRNYXJnaW4iLCJ2aWV3cG9ydE1hcmdpbiJdLHNjcm9sbFN0cmF0ZWd5OlsiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5Iiwic2Nyb2xsU3RyYXRlZ3kiXSxvcGVuOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJvcGVuIl0sZGlzYWJsZUNsb3NlOlsiY2RrQ29ubmVjdGVkT3ZlcmxheURpc2FibGVDbG9zZSIsImRpc2FibGVDbG9zZSJdLHRyYW5zZm9ybU9yaWdpblNlbGVjdG9yOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVRyYW5zZm9ybU9yaWdpbk9uIiwidHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IiXSxoYXNCYWNrZHJvcDpbImNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcCIsImhhc0JhY2tkcm9wIl0sbG9ja1Bvc2l0aW9uOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsImxvY2tQb3NpdGlvbiJdLGZsZXhpYmxlRGltZW5zaW9uczpbImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiLCJmbGV4aWJsZURpbWVuc2lvbnMiXSxncm93QWZ0ZXJPcGVuOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iLCJncm93QWZ0ZXJPcGVuIl0scHVzaDpbImNka0Nvbm5lY3RlZE92ZXJsYXlQdXNoIiwicHVzaCJdfSxvdXRwdXRzOntiYWNrZHJvcENsaWNrOiJiYWNrZHJvcENsaWNrIixwb3NpdGlvbkNoYW5nZToicG9zaXRpb25DaGFuZ2UiLGF0dGFjaDoiYXR0YWNoIixkZXRhY2g6ImRldGFjaCIsb3ZlcmxheUtleWRvd246Im92ZXJsYXlLZXlkb3duIixvdmVybGF5T3V0c2lkZUNsaWNrOiJvdmVybGF5T3V0c2lkZUNsaWNrIn0sZXhwb3J0QXM6WyJjZGtDb25uZWN0ZWRPdmVybGF5Il0sZmVhdHVyZXM6W0Z0XX0pLG59KSgpLE1PZT17cHJvdmlkZTpDdGUsZGVwczpbdHJdLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fSxzcz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOlt0cixNT2VdLGltcG9ydHM6W0RoLGV1LFpjLFpjXX0pLG59KSgpO2Z1bmN0aW9uIHdPZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMikoMSwiYnV0dG9uIiwzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLmFjdGlvbigpKX0pLEEoMiksdigpKCl9aWYoMiZuKXtsZXQgZT1TKCk7QygyKSx5dChlLmRhdGEuYWN0aW9uKX19ZnVuY3Rpb24gU09lKG4sdCl7fXZhciB3Mj1uZXcgcGUoIk1hdFNuYWNrQmFyRGF0YSIpLE92PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5wb2xpdGVuZXNzPSJhc3NlcnRpdmUiLHRoaXMuYW5ub3VuY2VtZW50TWVzc2FnZT0iIix0aGlzLmR1cmF0aW9uPTAsdGhpcy5kYXRhPW51bGwsdGhpcy5ob3Jpem9udGFsUG9zaXRpb249ImNlbnRlciIsdGhpcy52ZXJ0aWNhbFBvc2l0aW9uPSJib3R0b20ifX0sRU9lPU1hdGgucG93KDIsMzEpLTEscmc9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9vdmVybGF5UmVmPWUsdGhpcy5fYWZ0ZXJEaXNtaXNzZWQ9bmV3IGtlLHRoaXMuX2FmdGVyT3BlbmVkPW5ldyBrZSx0aGlzLl9vbkFjdGlvbj1uZXcga2UsdGhpcy5fZGlzbWlzc2VkQnlBY3Rpb249ITEsdGhpcy5jb250YWluZXJJbnN0YW5jZT10LHQuX29uRXhpdC5zdWJzY3JpYmUoKCk9PnRoaXMuX2ZpbmlzaERpc21pc3MoKSl9ZGlzbWlzcygpe3RoaXMuX2FmdGVyRGlzbWlzc2VkLmNsb3NlZHx8dGhpcy5jb250YWluZXJJbnN0YW5jZS5leGl0KCksY2xlYXJUaW1lb3V0KHRoaXMuX2R1cmF0aW9uVGltZW91dElkKX1kaXNtaXNzV2l0aEFjdGlvbigpe3RoaXMuX29uQWN0aW9uLmNsb3NlZHx8KHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSEwLHRoaXMuX29uQWN0aW9uLm5leHQoKSx0aGlzLl9vbkFjdGlvbi5jb21wbGV0ZSgpLHRoaXMuZGlzbWlzcygpKSxjbGVhclRpbWVvdXQodGhpcy5fZHVyYXRpb25UaW1lb3V0SWQpfWNsb3NlV2l0aEFjdGlvbigpe3RoaXMuZGlzbWlzc1dpdGhBY3Rpb24oKX1fZGlzbWlzc0FmdGVyKHQpe3RoaXMuX2R1cmF0aW9uVGltZW91dElkPXNldFRpbWVvdXQoKCk9PnRoaXMuZGlzbWlzcygpLE1hdGgubWluKHQsRU9lKSl9X29wZW4oKXt0aGlzLl9hZnRlck9wZW5lZC5jbG9zZWR8fCh0aGlzLl9hZnRlck9wZW5lZC5uZXh0KCksdGhpcy5fYWZ0ZXJPcGVuZWQuY29tcGxldGUoKSl9X2ZpbmlzaERpc21pc3MoKXt0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKSx0aGlzLl9vbkFjdGlvbi5jbG9zZWR8fHRoaXMuX29uQWN0aW9uLmNvbXBsZXRlKCksdGhpcy5fYWZ0ZXJEaXNtaXNzZWQubmV4dCh7ZGlzbWlzc2VkQnlBY3Rpb246dGhpcy5fZGlzbWlzc2VkQnlBY3Rpb259KSx0aGlzLl9hZnRlckRpc21pc3NlZC5jb21wbGV0ZSgpLHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSExfWFmdGVyRGlzbWlzc2VkKCl7cmV0dXJuIHRoaXMuX2FmdGVyRGlzbWlzc2VkfWFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuY29udGFpbmVySW5zdGFuY2UuX29uRW50ZXJ9b25BY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25BY3Rpb259fSxUT2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc25hY2tCYXJSZWY9ZSx0aGlzLmRhdGE9aX1hY3Rpb24oKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3NXaXRoQWN0aW9uKCl9Z2V0IGhhc0FjdGlvbigpe3JldHVybiEhdGhpcy5kYXRhLmFjdGlvbn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShyZyksTSh3MikpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInNpbXBsZS1zbmFjay1iYXIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc2ltcGxlLXNuYWNrYmFyIl0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbMSwibWF0LXNpbXBsZS1zbmFjay1iYXItY29udGVudCJdLFsiY2xhc3MiLCJtYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiIsNCwibmdJZiJdLFsxLCJtYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiJdLFsibWF0LWJ1dHRvbiIsIiIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsInNwYW4iLDApLEEoMSksdigpLEUoMix3T2UsMywxLCJkaXYiLDEpKSwyJmUmJihDKDEpLHl0KGkuZGF0YS5tZXNzYWdlKSxDKDEpLHkoIm5nSWYiLGkuaGFzQWN0aW9uKSl9LGRlcGVuZGVuY2llczpbQmUsX25dLHN0eWxlczpbIi5tYXQtc2ltcGxlLXNuYWNrYmFye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bGluZS1oZWlnaHQ6MjBweDtvcGFjaXR5OjF9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2ZsZXgtc2hyaW5rOjA7bWFyZ2luOi04cHggLThweCAtOHB4IDhweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24gYnV0dG9ue21heC1oZWlnaHQ6MzZweDttaW4td2lkdGg6MH1bZGlyPXJ0bF0gLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue21hcmdpbi1sZWZ0Oi04cHg7bWFyZ2luLXJpZ2h0OjhweH0ubWF0LXNpbXBsZS1zbmFjay1iYXItY29udGVudHtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxET2U9e3NuYWNrQmFyU3RhdGU6S3IoInN0YXRlIixba2koInZvaWQsIGhpZGRlbiIsZ24oe3RyYW5zZm9ybToic2NhbGUoMC44KSIsb3BhY2l0eTowfSkpLGtpKCJ2aXNpYmxlIixnbih7dHJhbnNmb3JtOiJzY2FsZSgxKSIsb3BhY2l0eToxfSkpLExpKCIqID0+IHZpc2libGUiLGppKCIxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIpKSxMaSgiKiA9PiB2b2lkLCAqID0+IGhpZGRlbiIsamkoIjc1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKSIsZ24oe29wYWNpdHk6MH0pKSldKX0sQU9lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBQaHtjb25zdHJ1Y3RvcihlLGkscixvLHMpe3N1cGVyKCksdGhpcy5fbmdab25lPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXIsdGhpcy5fcGxhdGZvcm09byx0aGlzLnNuYWNrQmFyQ29uZmlnPXMsdGhpcy5fYW5ub3VuY2VEZWxheT0xNTAsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uQW5ub3VuY2U9bmV3IGtlLHRoaXMuX29uRXhpdD1uZXcga2UsdGhpcy5fb25FbnRlcj1uZXcga2UsdGhpcy5fYW5pbWF0aW9uU3RhdGU9InZvaWQiLHRoaXMuYXR0YWNoRG9tUG9ydGFsPWE9Pnt0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpO2xldCBsPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hEb21Qb3J0YWwoYSk7cmV0dXJuIHRoaXMuX2FmdGVyUG9ydGFsQXR0YWNoZWQoKSxsfSx0aGlzLl9saXZlPSJhc3NlcnRpdmUiIT09cy5wb2xpdGVuZXNzfHxzLmFubm91bmNlbWVudE1lc3NhZ2U/Im9mZiI9PT1zLnBvbGl0ZW5lc3M/Im9mZiI6InBvbGl0ZSI6ImFzc2VydGl2ZSIsdGhpcy5fcGxhdGZvcm0uRklSRUZPWCYmKCJwb2xpdGUiPT09dGhpcy5fbGl2ZSYmKHRoaXMuX3JvbGU9InN0YXR1cyIpLCJhc3NlcnRpdmUiPT09dGhpcy5fbGl2ZSYmKHRoaXMuX3JvbGU9ImFsZXJ0IikpfWF0dGFjaENvbXBvbmVudFBvcnRhbChlKXt0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpO2xldCBpPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hDb21wb25lbnRQb3J0YWwoZSk7cmV0dXJuIHRoaXMuX2FmdGVyUG9ydGFsQXR0YWNoZWQoKSxpfWF0dGFjaFRlbXBsYXRlUG9ydGFsKGUpe3RoaXMuX2Fzc2VydE5vdEF0dGFjaGVkKCk7bGV0IGk9dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaFRlbXBsYXRlUG9ydGFsKGUpO3JldHVybiB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksaX1vbkFuaW1hdGlvbkVuZChlKXtsZXR7ZnJvbVN0YXRlOmksdG9TdGF0ZTpyfT1lO2lmKCgidm9pZCI9PT1yJiYidm9pZCIhPT1pfHwiaGlkZGVuIj09PXIpJiZ0aGlzLl9jb21wbGV0ZUV4aXQoKSwidmlzaWJsZSI9PT1yKXtsZXQgbz10aGlzLl9vbkVudGVyO3RoaXMuX25nWm9uZS5ydW4oKCk9PntvLm5leHQoKSxvLmNvbXBsZXRlKCl9KX19ZW50ZXIoKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9hbmltYXRpb25TdGF0ZT0idmlzaWJsZSIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuX3NjcmVlblJlYWRlckFubm91bmNlKCkpfWV4aXQoKXtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX2FuaW1hdGlvblN0YXRlPSJoaWRkZW4iLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hdC1leGl0IiwiIiksY2xlYXJUaW1lb3V0KHRoaXMuX2Fubm91bmNlVGltZW91dElkKX0pLHRoaXMuX29uRXhpdH1uZ09uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9jb21wbGV0ZUV4aXQoKX1fY29tcGxldGVFeGl0KCl7dGhpcy5fbmdab25lLm9uTWljcm90YXNrRW1wdHkucGlwZShRdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX29uRXhpdC5uZXh0KCksdGhpcy5fb25FeGl0LmNvbXBsZXRlKCl9KX0pfV9hZnRlclBvcnRhbEF0dGFjaGVkKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9dGhpcy5zbmFja0JhckNvbmZpZy5wYW5lbENsYXNzO2kmJihBcnJheS5pc0FycmF5KGkpP2kuZm9yRWFjaChyPT5lLmNsYXNzTGlzdC5hZGQocikpOmUuY2xhc3NMaXN0LmFkZChpKSl9X2Fzc2VydE5vdEF0dGFjaGVkKCl7dGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCl9X3NjcmVlblJlYWRlckFubm91bmNlKCl7dGhpcy5fYW5ub3VuY2VUaW1lb3V0SWR8fHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2Fubm91bmNlVGltZW91dElkPXNldFRpbWVvdXQoKCk9PntsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiW2FyaWEtaGlkZGVuXSIpLGk9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIlthcmlhLWxpdmVdIik7aWYoZSYmaSl7bGV0IHI9bnVsbDt0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmZS5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmKHI9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCksZS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiksaS5hcHBlbmRDaGlsZChlKSxyPy5mb2N1cygpLHRoaXMuX29uQW5ub3VuY2UubmV4dCgpLHRoaXMuX29uQW5ub3VuY2UuY29tcGxldGUoKX19LHRoaXMuX2Fubm91bmNlRGVsYXkpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oX3QpLE0oUmUpLE0obm4pLE0ob2kpLE0oT3YpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bix2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KGRhLDcpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX3BvcnRhbE91dGxldD1yLmZpcnN0KX19LGZlYXR1cmVzOlt0dF19KSxufSkoKSxJT2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEFPZXtfYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpe3N1cGVyLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksImNlbnRlciI9PT10aGlzLnNuYWNrQmFyQ29uZmlnLmhvcml6b250YWxQb3NpdGlvbiYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1zbmFjay1iYXItY2VudGVyIiksInRvcCI9PT10aGlzLnNuYWNrQmFyQ29uZmlnLnZlcnRpY2FsUG9zaXRpb24mJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtc25hY2stYmFyLXRvcCIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sic25hY2stYmFyLWNvbnRhaW5lciJdXSxob3N0QXR0cnM6WzEsIm1hdC1zbmFjay1iYXItY29udGFpbmVyIl0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJmlfKCJAc3RhdGUuZG9uZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25BbmltYXRpb25FbmQobyl9KSwyJmUmJnJfKCJAc3RhdGUiLGkuX2FuaW1hdGlvblN0YXRlKX0sZmVhdHVyZXM6W3R0XSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1siYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWyJjZGtQb3J0YWxPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCksRSgxLFNPZSwwLDAsIm5nLXRlbXBsYXRlIiwxKSx2KCksTygyLCJkaXYiKSksMiZlJiYoQygyKSx6ZSgiYXJpYS1saXZlIixpLl9saXZlKSgicm9sZSIsaS5fcm9sZSkpfSxkZXBlbmRlbmNpZXM6W2RhXSxzdHlsZXM6WyIubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjI0cHg7bWF4LXdpZHRoOjMzdnc7bWluLXdpZHRoOjM0NHB4O3BhZGRpbmc6MTRweCAxNnB4O21pbi1oZWlnaHQ6NDhweDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntib3JkZXI6c29saWQgMXB4fS5tYXQtc25hY2stYmFyLWhhbmRzZXR7d2lkdGg6MTAwJX0ubWF0LXNuYWNrLWJhci1oYW5kc2V0IC5tYXQtc25hY2stYmFyLWNvbnRhaW5lcnttYXJnaW46OHB4O21heC13aWR0aDoxMDAlO21pbi13aWR0aDowO3dpZHRoOjEwMCV9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbRE9lLnNuYWNrQmFyU3RhdGVdfX0pLG59KSgpLGtIPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltzcyxldSxNZSxQbixsbixsbl19KSxufSkoKSxNdGU9bmV3IHBlKCJtYXQtc25hY2stYmFyLWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE92fX0pLFJPZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fbGl2ZT1pLHRoaXMuX2luamVjdG9yPXIsdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPW8sdGhpcy5fcGFyZW50U25hY2tCYXI9cyx0aGlzLl9kZWZhdWx0Q29uZmlnPWEsdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1udWxsfWdldCBfb3BlbmVkU25hY2tCYXJSZWYoKXtsZXQgZT10aGlzLl9wYXJlbnRTbmFja0JhcjtyZXR1cm4gZT9lLl9vcGVuZWRTbmFja0JhclJlZjp0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsfXNldCBfb3BlbmVkU25hY2tCYXJSZWYoZSl7dGhpcy5fcGFyZW50U25hY2tCYXI/dGhpcy5fcGFyZW50U25hY2tCYXIuX29wZW5lZFNuYWNrQmFyUmVmPWU6dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1lfW9wZW5Gcm9tQ29tcG9uZW50KGUsaSl7cmV0dXJuIHRoaXMuX2F0dGFjaChlLGkpfW9wZW5Gcm9tVGVtcGxhdGUoZSxpKXtyZXR1cm4gdGhpcy5fYXR0YWNoKGUsaSl9b3BlbihlLGk9IiIscil7bGV0IG89ey4uLnRoaXMuX2RlZmF1bHRDb25maWcsLi4ucn07cmV0dXJuIG8uZGF0YT17bWVzc2FnZTplLGFjdGlvbjppfSxvLmFubm91bmNlbWVudE1lc3NhZ2U9PT1lJiYoby5hbm5vdW5jZW1lbnRNZXNzYWdlPXZvaWQgMCksdGhpcy5vcGVuRnJvbUNvbXBvbmVudCh0aGlzLnNpbXBsZVNuYWNrQmFyQ29tcG9uZW50LG8pfWRpc21pc3MoKXt0aGlzLl9vcGVuZWRTbmFja0JhclJlZiYmdGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuZGlzbWlzcygpfW5nT25EZXN0cm95KCl7dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbCYmdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbC5kaXNtaXNzKCl9X2F0dGFjaFNuYWNrQmFyQ29udGFpbmVyKGUsaSl7bGV0IG89WG4uY3JlYXRlKHtwYXJlbnQ6aSYmaS52aWV3Q29udGFpbmVyUmVmJiZpLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpbe3Byb3ZpZGU6T3YsdXNlVmFsdWU6aX1dfSkscz1uZXcgJGModGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudCxpLnZpZXdDb250YWluZXJSZWYsbyksYT1lLmF0dGFjaChzKTtyZXR1cm4gYS5pbnN0YW5jZS5zbmFja0JhckNvbmZpZz1pLGEuaW5zdGFuY2V9X2F0dGFjaChlLGkpe2xldCByPXsuLi5uZXcgT3YsLi4udGhpcy5fZGVmYXVsdENvbmZpZywuLi5pfSxvPXRoaXMuX2NyZWF0ZU92ZXJsYXkocikscz10aGlzLl9hdHRhY2hTbmFja0JhckNvbnRhaW5lcihvLHIpLGE9bmV3IHJnKHMsbyk7aWYoZSBpbnN0YW5jZW9mIFZpKXtsZXQgbD1uZXcga3MoZSxudWxsLHskaW1wbGljaXQ6ci5kYXRhLHNuYWNrQmFyUmVmOmF9KTthLmluc3RhbmNlPXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwobCl9ZWxzZXtsZXQgbD10aGlzLl9jcmVhdGVJbmplY3RvcihyLGEpLGM9bmV3ICRjKGUsdm9pZCAwLGwpLHU9cy5hdHRhY2hDb21wb25lbnRQb3J0YWwoYyk7YS5pbnN0YW5jZT11Lmluc3RhbmNlfXJldHVybiB0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZSgiKG1heC13aWR0aDogNTk5Ljk4cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIpLnBpcGUoc3Qoby5kZXRhY2htZW50cygpKSkuc3Vic2NyaWJlKGw9PntvLm92ZXJsYXlFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUodGhpcy5oYW5kc2V0Q3NzQ2xhc3MsbC5tYXRjaGVzKX0pLHIuYW5ub3VuY2VtZW50TWVzc2FnZSYmcy5fb25Bbm5vdW5jZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9saXZlLmFubm91bmNlKHIuYW5ub3VuY2VtZW50TWVzc2FnZSxyLnBvbGl0ZW5lc3MpfSksdGhpcy5fYW5pbWF0ZVNuYWNrQmFyKGEsciksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9YSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZn1fYW5pbWF0ZVNuYWNrQmFyKGUsaSl7ZS5hZnRlckRpc21pc3NlZCgpLnN1YnNjcmliZSgoKT0+e3RoaXMuX29wZW5lZFNuYWNrQmFyUmVmPT1lJiYodGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9bnVsbCksaS5hbm5vdW5jZW1lbnRNZXNzYWdlJiZ0aGlzLl9saXZlLmNsZWFyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZj8odGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCk9PntlLmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZi5kaXNtaXNzKCkpOmUuY29udGFpbmVySW5zdGFuY2UuZW50ZXIoKSxpLmR1cmF0aW9uJiZpLmR1cmF0aW9uPjAmJmUuYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCk9PmUuX2Rpc21pc3NBZnRlcihpLmR1cmF0aW9uKSl9X2NyZWF0ZU92ZXJsYXkoZSl7bGV0IGk9bmV3IHNjO2kuZGlyZWN0aW9uPWUuZGlyZWN0aW9uO2xldCByPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKSxvPSJydGwiPT09ZS5kaXJlY3Rpb24scz0ibGVmdCI9PT1lLmhvcml6b250YWxQb3NpdGlvbnx8InN0YXJ0Ij09PWUuaG9yaXpvbnRhbFBvc2l0aW9uJiYhb3x8ImVuZCI9PT1lLmhvcml6b250YWxQb3NpdGlvbiYmbyxhPSFzJiYiY2VudGVyIiE9PWUuaG9yaXpvbnRhbFBvc2l0aW9uO3JldHVybiBzP3IubGVmdCgiMCIpOmE/ci5yaWdodCgiMCIpOnIuY2VudGVySG9yaXpvbnRhbGx5KCksInRvcCI9PT1lLnZlcnRpY2FsUG9zaXRpb24/ci50b3AoIjAiKTpyLmJvdHRvbSgiMCIpLGkucG9zaXRpb25TdHJhdGVneT1yLHRoaXMuX292ZXJsYXkuY3JlYXRlKGkpfV9jcmVhdGVJbmplY3RvcihlLGkpe3JldHVybiBYbi5jcmVhdGUoe3BhcmVudDplJiZlLnZpZXdDb250YWluZXJSZWYmJmUudmlld0NvbnRhaW5lclJlZi5pbmplY3Rvcnx8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOlt7cHJvdmlkZTpyZyx1c2VWYWx1ZTppfSx7cHJvdmlkZTp3Mix1c2VWYWx1ZTplLmRhdGF9XX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKHRyKSxqKHR3KSxqKFhuKSxqKEptKSxqKG4sMTIpLGooTXRlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksd3RlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBST2V7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3N1cGVyKGUsaSxyLG8scyxhKSx0aGlzLnNpbXBsZVNuYWNrQmFyQ29tcG9uZW50PVRPZSx0aGlzLnNuYWNrQmFyQ29udGFpbmVyQ29tcG9uZW50PUlPZSx0aGlzLmhhbmRzZXRDc3NDbGFzcz0ibWF0LXNuYWNrLWJhci1oYW5kc2V0In19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaih0ciksaih0dyksaihYbiksaihKbSksaihuLDEyKSxqKE10ZSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOmtIfSksbn0pKCksT09lPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxFdGU9IlxcdTAwMDAtXFx1MDAyMFxcdTAwN2YtXFx1MDA5ZiIsRk9lPW5ldyBSZWdFeHAoIig/OlthLXpBLVpdW2EtekEtWjAtOSsuLV17Mix9OlxcL1xcL3xkYXRhOnx3d3dcXC4pW15cXHMiK0V0ZSsnIl17Mix9W15cXHMnK0V0ZSsiXCInKX1cXF0sOjsuIT9dIiwiZ3UiKTtmdW5jdGlvbiBEdGUobil7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7dC5mbGFncy5pbmNsdWRlcygiZyIpfHwodD1uZXcgUmVnRXhwKHQsdC5mbGFncysiZyIpKTtsZXQgZT1bXSxpPTA7Zm9yKGxldCByIG9mIG4ubWF0Y2hBbGwodCkpe2xldCBvPXIuaW5kZXgscz1yWzBdO28+aSYmZS5wdXNoKHtpbmRleDppLHRleHQ6bi5zdWJzdHJpbmcoaSxvKSxtYXRjaGVzUmVnZXg6ITF9KSxlLnB1c2goe2luZGV4Om8sdGV4dDpzLG1hdGNoZXNSZWdleDohMH0pLGk9bytzLmxlbmd0aH1yZXR1cm4gbi5sZW5ndGg+aSYmZS5wdXNoKHtpbmRleDppLHRleHQ6bi5zdWJzdHJpbmcoaSxuLmxlbmd0aCksbWF0Y2hlc1JlZ2V4OiExfSksZX0obixGT2UpLm1hcCgoe21hdGNoZXNSZWdleDp0LHRleHQ6ZX0pPT4oe2lzVVJMOnQsdGV4dDplfSkpfWZ1bmN0aW9uIE5PZShuLHQpe2lmKDEmbiYmKHNuKDApLEEoMSksYW4oKSksMiZuKXtsZXQgZT1TKCkuJGltcGxpY2l0O0MoMSksamUoIiAiLGUudGV4dCwiICIpfX1mdW5jdGlvbiBMT2Uobix0KXtpZigxJm4mJihfKDAsImEiLDcpLEEoMSksdigpKSwyJm4pe2xldCBlPVMoKS4kaW1wbGljaXQ7WmkoImhyZWYiLGUudGV4dCx6bCksQygxKSx5dChlLnRleHQpfX1mdW5jdGlvbiBCT2Uobix0KXtpZigxJm4mJihzbigwKSxFKDEsTk9lLDIsMSwibmctY29udGFpbmVyIiw1KSxFKDIsTE9lLDIsMiwibmctdGVtcGxhdGUiLG51bGwsNixxdCksYW4oKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPSRlKDMpO0MoMSkseSgibmdJZiIsIWUuaXNVUkwpKCJuZ0lmRWxzZSIsaSl9fWZ1bmN0aW9uIFZPZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImJ1dHRvbiIsOCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbkFjdGlvbkJ1dHRvbkNsaWNrZWQoKSl9KSxBKDEpLHYoKX1pZigyJm4pe2xldCBlPVMoKTtDKDEpLGplKCIgIixlLmFsZXJ0LmZvbGxvd3VwQWN0aW9uLmxvY2FsaXplZExhYmVsLCIgIil9fXZhciBBdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5zbmFja0JhclJlZj1lLHRoaXMudW5rbm93bkRhdGE9aSx0aGlzLnN0b3JlPXIsdGhpcy5zcGxpdEJ5VVJMPUR0ZSx0aGlzLmFsZXJ0PWl9YXN5bmMgb25BY3Rpb25CdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCk7bGV0IGU9YXdhaXQgdGhpcy5hbGVydC5mb2xsb3d1cEFjdGlvbi5nZXRGb2xsb3d1cEFjdGlvbih0aGlzLnN0b3JlKTt0aGlzLnN0b3JlLmRpc3BhdGNoKGUpfW9uQ2xvc2VCdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0ocmcpLE0odzIpLE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJhbGVydC1kaXNwbGF5LXNuYWNrYmFyIl1dLGRlY2xzOjYsdmFyczoyLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gY2xvc2UgdGhlIHNuYWNrYmFyIG1lc3NhZ2XikJ9lYTRkOWZlNjE0MjBhM2ZjZTgxY2Y1NGM0YzYxNWUzYzE5YzY0NmE24pCfMTUzNjA4NzUxOTc0MzcwNzM2MjpEaXNtaXNzYCxbWzEsIm1lc3NhZ2UiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtYnV0dG9uIiwiIiwiY2xhc3MiLCJmb2xsb3d1cC1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwxLCJkaXNtaXNzLWJ1dHRvbiIsMywiY2xpY2siXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJsaW5rUGllY2UiLCIiXSxbInJlbCIsIm5vcmVmZXJyZXIgbm9vcGVuZXIiLCJ0YXJnZXQiLCJfYmxhbmsiLDMsImhyZWYiXSxbIm1hdC1idXR0b24iLCIiLDEsImZvbGxvd3VwLWJ1dHRvbiIsMywiY2xpY2siXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDApLEUoMSxCT2UsNCwyLCJuZy1jb250YWluZXIiLDEpLHYoKSxfKDIsImRpdiIsMiksRSgzLFZPZSwyLDEsImJ1dHRvbiIsMyksXyg0LCJidXR0b24iLDQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2xvc2VCdXR0b25DbGlja2VkKCl9KSxBKDUsIiBEaXNtaXNzICIpLHYoKSgpKSwyJmUmJihDKDEpLHkoIm5nRm9yT2YiLGkuc3BsaXRCeVVSTChpLmFsZXJ0LmxvY2FsaXplZE1lc3NhZ2UpKSxDKDIpLHkoIm5nSWYiLGkuYWxlcnQuZm9sbG93dXBBY3Rpb24pKX0sZGVwZW5kZW5jaWVzOltkbixCZSxfbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2FsaWduLXNlbGY6Y2VudGVyO21hcmdpbjo1cHggMDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tbGVmdDphdXRvfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSXRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5zbmFja0Jhcj1pLHRoaXMubmdVbnN1YnNjcmliZT1uZXcga2V9bmdPbkluaXQoKXt0aGlzLnN0b3JlLnNlbGVjdChxJCkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpLFllKGU9PkJvb2xlYW4oZSkpKS5zdWJzY3JpYmUoZT0+e3RoaXMuc2hvd0FsZXJ0KGUpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfXNob3dBbGVydChlKXt0aGlzLnNuYWNrQmFyLm9wZW5Gcm9tQ29tcG9uZW50KEF0ZSx7ZHVyYXRpb246NWUzLGhvcml6b250YWxQb3NpdGlvbjoic3RhcnQiLHZlcnRpY2FsUG9zaXRpb246ImJvdHRvbSIsZGF0YTplfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpLE0od3RlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siYWxlcnQtc25hY2tiYXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFMyPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxQbixrSF19KSxufSkoKSxFMj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbSnUsUzIsd3IuZm9yRmVhdHVyZSgiYWxlcnRzIixVZWUpLHJvLmZvckZlYXR1cmUoW0hlZV0pXX0pLG59KSgpO2Z1bmN0aW9uIFVPZShuLHQpe312YXIgb2c9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJvbGU9ImRpYWxvZyIsdGhpcy5wYW5lbENsYXNzPSIiLHRoaXMuaGFzQmFja2Ryb3A9ITAsdGhpcy5iYWNrZHJvcENsYXNzPSIiLHRoaXMuZGlzYWJsZUNsb3NlPSExLHRoaXMud2lkdGg9IiIsdGhpcy5oZWlnaHQ9IiIsdGhpcy5kYXRhPW51bGwsdGhpcy5hcmlhRGVzY3JpYmVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbGxlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWw9bnVsbCx0aGlzLmFyaWFNb2RhbD0hMCx0aGlzLmF1dG9Gb2N1cz0iZmlyc3QtdGFiYmFibGUiLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMuY2xvc2VPbk5hdmlnYXRpb249ITAsdGhpcy5jbG9zZU9uRGVzdHJveT0hMH19LE5IPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBQaHtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKCksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9aSx0aGlzLl9jb25maWc9byx0aGlzLl9pbnRlcmFjdGl2aXR5Q2hlY2tlcj1zLHRoaXMuX25nWm9uZT1hLHRoaXMuX292ZXJsYXlSZWY9bCx0aGlzLl9mb2N1c01vbml0b3I9Yyx0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZD1udWxsLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlPW51bGwsdGhpcy5hdHRhY2hEb21Qb3J0YWw9dT0+e3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpO2xldCBkPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hEb21Qb3J0YWwodSk7cmV0dXJuIHRoaXMuX2NvbnRlbnRBdHRhY2hlZCgpLGR9LHRoaXMuX2FyaWFMYWJlbGxlZEJ5PXRoaXMuX2NvbmZpZy5hcmlhTGFiZWxsZWRCeXx8bnVsbCx0aGlzLl9kb2N1bWVudD1yfV9jb250ZW50QXR0YWNoZWQoKXt0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKCksdGhpcy5faGFuZGxlQmFja2Ryb3BDbGlja3MoKSx0aGlzLl9jYXB0dXJlSW5pdGlhbEZvY3VzKCl9X2NhcHR1cmVJbml0aWFsRm9jdXMoKXt0aGlzLl90cmFwRm9jdXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3Jlc3RvcmVGb2N1cygpfWF0dGFjaENvbXBvbmVudFBvcnRhbChlKXt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpO3JldHVybiB0aGlzLl9jb250ZW50QXR0YWNoZWQoKSxpfWF0dGFjaFRlbXBsYXRlUG9ydGFsKGUpe3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpO2xldCBpPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKTtyZXR1cm4gdGhpcy5fY29udGVudEF0dGFjaGVkKCksaX1fcmVjYXB0dXJlRm9jdXMoKXt0aGlzLl9jb250YWluc0ZvY3VzKCl8fHRoaXMuX3RyYXBGb2N1cygpfV9mb3JjZUZvY3VzKGUsaSl7dGhpcy5faW50ZXJhY3Rpdml0eUNoZWNrZXIuaXNGb2N1c2FibGUoZSl8fChlLnRhYkluZGV4PS0xLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCByPSgpPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsciksZS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9O2UuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsciksZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHIpfSkpLGUuZm9jdXMoaSl9X2ZvY3VzQnlDc3NTZWxlY3RvcihlLGkpe2xldCByPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGUpO3ImJnRoaXMuX2ZvcmNlRm9jdXMocixpKX1fdHJhcEZvY3VzKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3N3aXRjaCh0aGlzLl9jb25maWcuYXV0b0ZvY3VzKXtjYXNlITE6Y2FzZSJkaWFsb2ciOnRoaXMuX2NvbnRhaW5zRm9jdXMoKXx8ZS5mb2N1cygpO2JyZWFrO2Nhc2UhMDpjYXNlImZpcnN0LXRhYmJhYmxlIjp0aGlzLl9mb2N1c1RyYXAuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSgpLnRoZW4oaT0+e2l8fHRoaXMuX2ZvY3VzRGlhbG9nQ29udGFpbmVyKCl9KTticmVhaztjYXNlImZpcnN0LWhlYWRpbmciOnRoaXMuX2ZvY3VzQnlDc3NTZWxlY3RvcignaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgW3JvbGU9ImhlYWRpbmciXScpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fZm9jdXNCeUNzc1NlbGVjdG9yKHRoaXMuX2NvbmZpZy5hdXRvRm9jdXMpfX1fcmVzdG9yZUZvY3VzKCl7bGV0IGU9dGhpcy5fY29uZmlnLnJlc3RvcmVGb2N1cyxpPW51bGw7aWYoInN0cmluZyI9PXR5cGVvZiBlP2k9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKToiYm9vbGVhbiI9PXR5cGVvZiBlP2k9ZT90aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZDpudWxsOmUmJihpPWUpLHRoaXMuX2NvbmZpZy5yZXN0b3JlRm9jdXMmJmkmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLmZvY3VzKXtsZXQgcj1LTSgpLG89dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Oyghcnx8cj09PXRoaXMuX2RvY3VtZW50LmJvZHl8fHI9PT1vfHxvLmNvbnRhaW5zKHIpKSYmKHRoaXMuX2ZvY3VzTW9uaXRvcj8odGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKGksdGhpcy5fY2xvc2VJbnRlcmFjdGlvblR5cGUpLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlPW51bGwpOmkuZm9jdXMoKSl9dGhpcy5fZm9jdXNUcmFwJiZ0aGlzLl9mb2N1c1RyYXAuZGVzdHJveSgpfV9mb2N1c0RpYWxvZ0NvbnRhaW5lcigpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9X2NvbnRhaW5zRm9jdXMoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaT1LTSgpO3JldHVybiBlPT09aXx8ZS5jb250YWlucyhpKX1faW5pdGlhbGl6ZUZvY3VzVHJhcCgpe3RoaXMuX2ZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX2RvY3VtZW50JiYodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ9S00oKSl9X2hhbmRsZUJhY2tkcm9wQ2xpY2tzKCl7dGhpcy5fb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5fY29uZmlnLmRpc2FibGVDbG9zZSYmdGhpcy5fcmVjYXB0dXJlRm9jdXMoKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKEpNKSxNKEh0LDgpLE0ob2cpLE0oU3YpLE0oX3QpLE0oZGQpLE0oRnIpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJjZGstZGlhbG9nLWNvbnRhaW5lciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KGRhLDcpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX3BvcnRhbE91dGxldD1yLmZpcnN0KX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsImNkay1kaWFsb2ctY29udGFpbmVyIl0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJpZCIsaS5fY29uZmlnLmlkfHxudWxsKSgicm9sZSIsaS5fY29uZmlnLnJvbGUpKCJhcmlhLW1vZGFsIixpLl9jb25maWcuYXJpYU1vZGFsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLl9jb25maWcuYXJpYUxhYmVsP251bGw6aS5fYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWxhYmVsIixpLl9jb25maWcuYXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsaS5fY29uZmlnLmFyaWFEZXNjcmliZWRCeXx8bnVsbCl9LGZlYXR1cmVzOlt0dF0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRSgwLFVPZSwwLDAsIm5nLXRlbXBsYXRlIiwwKX0sZGVwZW5kZW5jaWVzOltkYV0sc3R5bGVzOlsiLmNkay1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OmluaGVyaXQ7bWF4LWhlaWdodDppbmhlcml0fSJdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGx3PWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5vdmVybGF5UmVmPXQsdGhpcy5jb25maWc9ZSx0aGlzLmNsb3NlZD1uZXcga2UsdGhpcy5kaXNhYmxlQ2xvc2U9ZS5kaXNhYmxlQ2xvc2UsdGhpcy5iYWNrZHJvcENsaWNrPXQuYmFja2Ryb3BDbGljaygpLHRoaXMua2V5ZG93bkV2ZW50cz10LmtleWRvd25FdmVudHMoKSx0aGlzLm91dHNpZGVQb2ludGVyRXZlbnRzPXQub3V0c2lkZVBvaW50ZXJFdmVudHMoKSx0aGlzLmlkPWUuaWQsdGhpcy5rZXlkb3duRXZlbnRzLnN1YnNjcmliZShpPT57Mjc9PT1pLmtleUNvZGUmJiF0aGlzLmRpc2FibGVDbG9zZSYmIWtyKGkpJiYoaS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2Uodm9pZCAwLHtmb2N1c09yaWdpbjoia2V5Ym9hcmQifSkpfSksdGhpcy5iYWNrZHJvcENsaWNrLnN1YnNjcmliZSgoKT0+e3RoaXMuZGlzYWJsZUNsb3NlfHx0aGlzLmNsb3NlKHZvaWQgMCx7Zm9jdXNPcmlnaW46Im1vdXNlIn0pfSl9Y2xvc2UodCxlKXtpZih0aGlzLmNvbnRhaW5lckluc3RhbmNlKXtsZXQgaT10aGlzLmNsb3NlZDt0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9jbG9zZUludGVyYWN0aW9uVHlwZT1lPy5mb2N1c09yaWdpbnx8InByb2dyYW0iLHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCksaS5uZXh0KHQpLGkuY29tcGxldGUoKSx0aGlzLmNvbXBvbmVudEluc3RhbmNlPXRoaXMuY29udGFpbmVySW5zdGFuY2U9bnVsbH19dXBkYXRlUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksdGhpc311cGRhdGVTaXplKHQ9IiIsZT0iIil7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0LGhlaWdodDplfSksdGhpc31hZGRQYW5lbENsYXNzKHQpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcyh0KSx0aGlzfXJlbW92ZVBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi5yZW1vdmVQYW5lbENsYXNzKHQpLHRoaXN9fSxQdGU9bmV3IHBlKCJEaWFsb2dTY3JvbGxTdHJhdGVneSIpLHpPZT1uZXcgcGUoIkRpYWxvZ0RhdGEiKSxqT2U9bmV3IHBlKCJEZWZhdWx0RGlhbG9nQ29uZmlnIiksV09lPXtwcm92aWRlOlB0ZSxkZXBzOlt0cl0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCl9fSxxT2U9MCxMSD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5faW5qZWN0b3I9aSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1yLHRoaXMuX3BhcmVudERpYWxvZz1vLHRoaXMuX292ZXJsYXlDb250YWluZXI9cyx0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsPVtdLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWw9bmV3IGtlLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWw9bmV3IGtlLHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cz1uZXcgTWFwLHRoaXMuYWZ0ZXJBbGxDbG9zZWQ9UWEoKCk9PnRoaXMub3BlbkRpYWxvZ3MubGVuZ3RoP3RoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5waXBlKHpuKHZvaWQgMCkpKSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hfWdldCBvcGVuRGlhbG9ncygpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLm9wZW5EaWFsb2dzOnRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWx9Z2V0IGFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuX3BhcmVudERpYWxvZz90aGlzLl9wYXJlbnREaWFsb2cuYWZ0ZXJPcGVuZWQ6dGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbH1vcGVuKGUsaSl7KGk9ey4uLnRoaXMuX2RlZmF1bHRPcHRpb25zfHxuZXcgb2csLi4uaX0pLmlkPWkuaWR8fCJjZGstZGlhbG9nLSIrcU9lKyssaS5pZCYmdGhpcy5nZXREaWFsb2dCeUlkKGkuaWQpO2xldCBvPXRoaXMuX2dldE92ZXJsYXlDb25maWcoaSkscz10aGlzLl9vdmVybGF5LmNyZWF0ZShvKSxhPW5ldyBsdyhzLGkpLGw9dGhpcy5fYXR0YWNoQ29udGFpbmVyKHMsYSxpKTtyZXR1cm4gYS5jb250YWluZXJJbnN0YW5jZT1sLHRoaXMuX2F0dGFjaERpYWxvZ0NvbnRlbnQoZSxhLGwsaSksdGhpcy5vcGVuRGlhbG9ncy5sZW5ndGh8fHRoaXMuX2hpZGVOb25EaWFsb2dDb250ZW50RnJvbUFzc2lzdGl2ZVRlY2hub2xvZ3koKSx0aGlzLm9wZW5EaWFsb2dzLnB1c2goYSksYS5jbG9zZWQuc3Vic2NyaWJlKCgpPT50aGlzLl9yZW1vdmVPcGVuRGlhbG9nKGEsITApKSx0aGlzLmFmdGVyT3BlbmVkLm5leHQoYSksYX1jbG9zZUFsbCgpe0ZIKHRoaXMub3BlbkRpYWxvZ3MsZT0+ZS5jbG9zZSgpKX1nZXREaWFsb2dCeUlkKGUpe3JldHVybiB0aGlzLm9wZW5EaWFsb2dzLmZpbmQoaT0+aS5pZD09PWUpfW5nT25EZXN0cm95KCl7RkgodGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbCxlPT57ITE9PT1lLmNvbmZpZy5jbG9zZU9uRGVzdHJveSYmdGhpcy5fcmVtb3ZlT3BlbkRpYWxvZyhlLCExKX0pLEZIKHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWwsZT0+ZS5jbG9zZSgpKSx0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsLmNvbXBsZXRlKCksdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbC5jb21wbGV0ZSgpLHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw9W119X2dldE92ZXJsYXlDb25maWcoZSl7bGV0IGk9bmV3IHNjKHtwb3NpdGlvblN0cmF0ZWd5OmUucG9zaXRpb25TdHJhdGVneXx8dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpLmNlbnRlckhvcml6b250YWxseSgpLmNlbnRlclZlcnRpY2FsbHkoKSxzY3JvbGxTdHJhdGVneTplLnNjcm9sbFN0cmF0ZWd5fHx0aGlzLl9zY3JvbGxTdHJhdGVneSgpLHBhbmVsQ2xhc3M6ZS5wYW5lbENsYXNzLGhhc0JhY2tkcm9wOmUuaGFzQmFja2Ryb3AsZGlyZWN0aW9uOmUuZGlyZWN0aW9uLG1pbldpZHRoOmUubWluV2lkdGgsbWluSGVpZ2h0OmUubWluSGVpZ2h0LG1heFdpZHRoOmUubWF4V2lkdGgsbWF4SGVpZ2h0OmUubWF4SGVpZ2h0LHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LGRpc3Bvc2VPbk5hdmlnYXRpb246ZS5jbG9zZU9uTmF2aWdhdGlvbn0pO3JldHVybiBlLmJhY2tkcm9wQ2xhc3MmJihpLmJhY2tkcm9wQ2xhc3M9ZS5iYWNrZHJvcENsYXNzKSxpfV9hdHRhY2hDb250YWluZXIoZSxpLHIpe2xldCBhLG89ci5pbmplY3Rvcnx8ci52aWV3Q29udGFpbmVyUmVmPy5pbmplY3RvcixzPVt7cHJvdmlkZTpvZyx1c2VWYWx1ZTpyfSx7cHJvdmlkZTpsdyx1c2VWYWx1ZTppfSx7cHJvdmlkZTpkZCx1c2VWYWx1ZTplfV07ci5jb250YWluZXI/ImZ1bmN0aW9uIj09dHlwZW9mIHIuY29udGFpbmVyP2E9ci5jb250YWluZXI6KGE9ci5jb250YWluZXIudHlwZSxzLnB1c2goLi4uci5jb250YWluZXIucHJvdmlkZXJzKHIpKSk6YT1OSDtsZXQgbD1uZXcgJGMoYSxyLnZpZXdDb250YWluZXJSZWYsWG4uY3JlYXRlKHtwYXJlbnQ6b3x8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOnN9KSxyLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7cmV0dXJuIGUuYXR0YWNoKGwpLmluc3RhbmNlfV9hdHRhY2hEaWFsb2dDb250ZW50KGUsaSxyLG8pe2lmKGUgaW5zdGFuY2VvZiBWaSl7bGV0IHM9dGhpcy5fY3JlYXRlSW5qZWN0b3IobyxpLHIsdm9pZCAwKSxhPXskaW1wbGljaXQ6by5kYXRhLGRpYWxvZ1JlZjppfTtvLnRlbXBsYXRlQ29udGV4dCYmKGE9ey4uLmEsLi4uImZ1bmN0aW9uIj09dHlwZW9mIG8udGVtcGxhdGVDb250ZXh0P28udGVtcGxhdGVDb250ZXh0KCk6by50ZW1wbGF0ZUNvbnRleHR9KSxyLmF0dGFjaFRlbXBsYXRlUG9ydGFsKG5ldyBrcyhlLG51bGwsYSxzKSl9ZWxzZXtsZXQgcz10aGlzLl9jcmVhdGVJbmplY3RvcihvLGkscix0aGlzLl9pbmplY3RvciksYT1yLmF0dGFjaENvbXBvbmVudFBvcnRhbChuZXcgJGMoZSxvLnZpZXdDb250YWluZXJSZWYscyxvLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikpO2kuY29tcG9uZW50SW5zdGFuY2U9YS5pbnN0YW5jZX19X2NyZWF0ZUluamVjdG9yKGUsaSxyLG8pe2xldCBzPWUuaW5qZWN0b3J8fGUudmlld0NvbnRhaW5lclJlZj8uaW5qZWN0b3IsYT1be3Byb3ZpZGU6ek9lLHVzZVZhbHVlOmUuZGF0YX0se3Byb3ZpZGU6bHcsdXNlVmFsdWU6aX1dO3JldHVybiBlLnByb3ZpZGVycyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnByb3ZpZGVycz9hLnB1c2goLi4uZS5wcm92aWRlcnMoaSxlLHIpKTphLnB1c2goLi4uZS5wcm92aWRlcnMpKSxlLmRpcmVjdGlvbiYmKCFzfHwhcy5nZXQoJGksbnVsbCxkaS5PcHRpb25hbCkpJiZhLnB1c2goe3Byb3ZpZGU6JGksdXNlVmFsdWU6e3ZhbHVlOmUuZGlyZWN0aW9uLGNoYW5nZTpYdCgpfX0pLFhuLmNyZWF0ZSh7cGFyZW50OnN8fG8scHJvdmlkZXJzOmF9KX1fcmVtb3ZlT3BlbkRpYWxvZyhlLGkpe2xldCByPXRoaXMub3BlbkRpYWxvZ3MuaW5kZXhPZihlKTtyPi0xJiYodGhpcy5vcGVuRGlhbG9ncy5zcGxpY2UociwxKSx0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8KHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cy5mb3JFYWNoKChvLHMpPT57bz9zLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLG8pOnMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpfSksdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLmNsZWFyKCksaSYmdGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5uZXh0KCkpKX1faGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpe2xldCBlPXRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpO2lmKGUucGFyZW50RWxlbWVudCl7bGV0IGk9ZS5wYXJlbnRFbGVtZW50LmNoaWxkcmVuO2ZvcihsZXQgcj1pLmxlbmd0aC0xO3I+LTE7ci0tKXtsZXQgbz1pW3JdO28hPT1lJiYiU0NSSVBUIiE9PW8ubm9kZU5hbWUmJiJTVFlMRSIhPT1vLm5vZGVOYW1lJiYhby5oYXNBdHRyaWJ1dGUoImFyaWEtbGl2ZSIpJiYodGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLnNldChvLG8uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpKSxvLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIikpfX19X2dldEFmdGVyQWxsQ2xvc2VkKCl7bGV0IGU9dGhpcy5fcGFyZW50RGlhbG9nO3JldHVybiBlP2UuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaih0ciksaihYbiksaihqT2UsOCksaihuLDEyKSxqKFJ2KSxqKFB0ZSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpO2Z1bmN0aW9uIEZIKG4sdCl7bGV0IGU9bi5sZW5ndGg7Zm9yKDtlLS07KXQobltlXSl9dmFyIFJ0ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOltMSCxXT2VdLGltcG9ydHM6W3NzLGV1LEV2LGV1XX0pLG59KSgpO2Z1bmN0aW9uIFlPZShuLHQpe312YXIga3Y9e3BhcmFtczp7ZW50ZXJBbmltYXRpb25EdXJhdGlvbjoiMTUwbXMiLGV4aXRBbmltYXRpb25EdXJhdGlvbjoiNzVtcyJ9fSxYT2U9e2RpYWxvZ0NvbnRhaW5lcjpLcigiZGlhbG9nQ29udGFpbmVyIixba2koInZvaWQsIGV4aXQiLGduKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwLjcpIn0pKSxraSgiZW50ZXIiLGduKHt0cmFuc2Zvcm06Im5vbmUifSkpLExpKCIqID0+IGVudGVyIix4NShbamkoInt7ZW50ZXJBbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixnbih7dHJhbnNmb3JtOiJub25lIixvcGFjaXR5OjF9KSksSW0oIkAqIixBbSgpLHtvcHRpb25hbDohMH0pXSksa3YpLExpKCIqID0+IHZvaWQsICogPT4gZXhpdCIseDUoW2ppKCJ7e2V4aXRBbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSIsZ24oe29wYWNpdHk6MH0pKSxJbSgiQCoiLEFtKCkse29wdGlvbmFsOiEwfSldKSxrdildKX0sRnY9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJvbGU9ImRpYWxvZyIsdGhpcy5wYW5lbENsYXNzPSIiLHRoaXMuaGFzQmFja2Ryb3A9ITAsdGhpcy5iYWNrZHJvcENsYXNzPSIiLHRoaXMuZGlzYWJsZUNsb3NlPSExLHRoaXMud2lkdGg9IiIsdGhpcy5oZWlnaHQ9IiIsdGhpcy5tYXhXaWR0aD0iODB2dyIsdGhpcy5kYXRhPW51bGwsdGhpcy5hcmlhRGVzY3JpYmVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbGxlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWw9bnVsbCx0aGlzLmFyaWFNb2RhbD0hMCx0aGlzLmF1dG9Gb2N1cz0iZmlyc3QtdGFiYmFibGUiLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMuZGVsYXlGb2N1c1RyYXA9ITAsdGhpcy5jbG9zZU9uTmF2aWdhdGlvbj0hMCx0aGlzLmVudGVyQW5pbWF0aW9uRHVyYXRpb249a3YucGFyYW1zLmVudGVyQW5pbWF0aW9uRHVyYXRpb24sdGhpcy5leGl0QW5pbWF0aW9uRHVyYXRpb249a3YucGFyYW1zLmV4aXRBbmltYXRpb25EdXJhdGlvbn19LFFPZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTkh7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcihlLGkscixvLHMsYSxsLGMpLHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZD1uZXcgR31fY2FwdHVyZUluaXRpYWxGb2N1cygpe3RoaXMuX2NvbmZpZy5kZWxheUZvY3VzVHJhcHx8dGhpcy5fdHJhcEZvY3VzKCl9X29wZW5BbmltYXRpb25Eb25lKGUpe3RoaXMuX2NvbmZpZy5kZWxheUZvY3VzVHJhcCYmdGhpcy5fdHJhcEZvY3VzKCksdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJvcGVuZWQiLHRvdGFsVGltZTplfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oSk0pLE0oSHQsOCksTShGdiksTShTdiksTShfdCksTShkZCksTShGcikpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxmZWF0dXJlczpbdHRdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxLT2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFFPZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSl7c3VwZXIoZSxpLHIsbyxzLGEsbCx1KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1jLHRoaXMuX3N0YXRlPSJlbnRlciJ9X29uQW5pbWF0aW9uRG9uZSh7dG9TdGF0ZTplLHRvdGFsVGltZTppfSl7ImVudGVyIj09PWU/dGhpcy5fb3BlbkFuaW1hdGlvbkRvbmUoaSk6ImV4aXQiPT09ZSYmdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJjbG9zZWQiLHRvdGFsVGltZTppfSl9X29uQW5pbWF0aW9uU3RhcnQoe3RvU3RhdGU6ZSx0b3RhbFRpbWU6aX0peyJlbnRlciI9PT1lP3RoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToib3BlbmluZyIsdG90YWxUaW1lOml9KTooImV4aXQiPT09ZXx8InZvaWQiPT09ZSkmJnRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToiY2xvc2luZyIsdG90YWxUaW1lOml9KX1fc3RhcnRFeGl0QW5pbWF0aW9uKCl7dGhpcy5fc3RhdGU9ImV4aXQiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9nZXRBbmltYXRpb25TdGF0ZSgpe3JldHVybnt2YWx1ZTp0aGlzLl9zdGF0ZSxwYXJhbXM6e2VudGVyQW5pbWF0aW9uRHVyYXRpb246dGhpcy5fY29uZmlnLmVudGVyQW5pbWF0aW9uRHVyYXRpb258fGt2LnBhcmFtcy5lbnRlckFuaW1hdGlvbkR1cmF0aW9uLGV4aXRBbmltYXRpb25EdXJhdGlvbjp0aGlzLl9jb25maWcuZXhpdEFuaW1hdGlvbkR1cmF0aW9ufHxrdi5wYXJhbXMuZXhpdEFuaW1hdGlvbkR1cmF0aW9ufX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oSk0pLE0oSHQsOCksTShGdiksTShTdiksTShfdCksTShkZCksTShubiksTShGcikpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1kaWFsb2ctY29udGFpbmVyIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsIm1hdC1kaWFsb2ctY29udGFpbmVyIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJmlfKCJAZGlhbG9nQ29udGFpbmVyLnN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25BbmltYXRpb25TdGFydChvKX0pKCJAZGlhbG9nQ29udGFpbmVyLmRvbmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkFuaW1hdGlvbkRvbmUobyl9KSwyJmUmJihfcygiaWQiLGkuX2NvbmZpZy5pZCksemUoImFyaWEtbW9kYWwiLGkuX2NvbmZpZy5hcmlhTW9kYWwpKCJyb2xlIixpLl9jb25maWcucm9sZSkoImFyaWEtbGFiZWxsZWRieSIsaS5fY29uZmlnLmFyaWFMYWJlbD9udWxsOmkuX2FyaWFMYWJlbGxlZEJ5KSgiYXJpYS1sYWJlbCIsaS5fY29uZmlnLmFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGkuX2NvbmZpZy5hcmlhRGVzY3JpYmVkQnl8fG51bGwpLHJfKCJAZGlhbG9nQ29udGFpbmVyIixpLl9nZXRBbmltYXRpb25TdGF0ZSgpKSl9LGZlYXR1cmVzOlt0dF0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRSgwLFlPZSwwLDAsIm5nLXRlbXBsYXRlIiwwKX0sZGVwZW5kZW5jaWVzOltkYV0sc3R5bGVzOlsiLm1hdC1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzphdXRvO291dGxpbmU6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6aW5oZXJpdDttYXgtaGVpZ2h0OmluaGVyaXR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWRpYWxvZy1jb250YWluZXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1kaWFsb2ctY29udGVudHtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4O3BhZGRpbmc6MCAyNHB4O21heC1oZWlnaHQ6NjV2aDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5tYXQtZGlhbG9nLXRpdGxle21hcmdpbjowIDAgMjBweDtkaXNwbGF5OmJsb2NrfS5tYXQtZGlhbG9nLWFjdGlvbnN7cGFkZGluZzo4cHggMDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWluLWhlaWdodDo1MnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmNvbnRlbnQtYm94O21hcmdpbi1ib3R0b206LTI0cHh9Lm1hdC1kaWFsb2ctYWN0aW9ucy5tYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tY2VudGVyLC5tYXQtZGlhbG9nLWFjdGlvbnNbYWxpZ249Y2VudGVyXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5tYXQtZGlhbG9nLWFjdGlvbnMubWF0LWRpYWxvZy1hY3Rpb25zLWFsaWduLWVuZCwubWF0LWRpYWxvZy1hY3Rpb25zW2FsaWduPWVuZF17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLC5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1tZGMtYnV0dG9uLWJhc2UrLm1hdC1tZGMtYnV0dG9uLWJhc2V7bWFyZ2luLWxlZnQ6OHB4fVtkaXI9cnRsXSAubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtYnV0dG9uLWJhc2UrLm1hdC1idXR0b24tYmFzZSxbZGlyPXJ0bF0gLm1hdC1kaWFsb2ctYWN0aW9ucyAubWF0LW1kYy1idXR0b24tYmFzZSsubWF0LW1kYy1idXR0b24tYmFzZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbWE9lLmRpYWxvZ0NvbnRhaW5lcl19fSksbn0pKCksdHU9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3JlZj10LHRoaXMuX2NvbnRhaW5lckluc3RhbmNlPWksdGhpcy5fYWZ0ZXJPcGVuZWQ9bmV3IGtlLHRoaXMuX2JlZm9yZUNsb3NlZD1uZXcga2UsdGhpcy5fc3RhdGU9MCx0aGlzLmRpc2FibGVDbG9zZT1lLmRpc2FibGVDbG9zZSx0aGlzLmlkPXQuaWQsaS5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLnBpcGUoWWUocj0+Im9wZW5lZCI9PT1yLnN0YXRlKSxRdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCl9KSxpLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShZZShyPT4iY2xvc2VkIj09PXIuc3RhdGUpLFF0KDEpKS5zdWJzY3JpYmUoKCk9PntjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx0Lm92ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9iZWZvcmVDbG9zZWQubmV4dCh0aGlzLl9yZXN1bHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSxKdCh0aGlzLmJhY2tkcm9wQ2xpY2soKSx0aGlzLmtleWRvd25FdmVudHMoKS5waXBlKFllKHI9PjI3PT09ci5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiFrcihyKSkpKS5zdWJzY3JpYmUocj0+e3RoaXMuZGlzYWJsZUNsb3NlfHwoci5wcmV2ZW50RGVmYXVsdCgpLE90ZSh0aGlzLCJrZXlkb3duIj09PXIudHlwZT8ia2V5Ym9hcmQiOiJtb3VzZSIpKX0pfWNsb3NlKHQpe3RoaXMuX3Jlc3VsdD10LHRoaXMuX2NvbnRhaW5lckluc3RhbmNlLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShZZShlPT4iY2xvc2luZyI9PT1lLnN0YXRlKSxRdCgxKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLl9iZWZvcmVDbG9zZWQubmV4dCh0KSx0aGlzLl9iZWZvcmVDbG9zZWQuY29tcGxldGUoKSx0aGlzLl9yZWYub3ZlcmxheVJlZi5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX2Nsb3NlRmFsbGJhY2tUaW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCksZS50b3RhbFRpbWUrMTAwKX0pLHRoaXMuX3N0YXRlPTEsdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX3N0YXJ0RXhpdEFuaW1hdGlvbigpfWFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuX2FmdGVyT3BlbmVkfWFmdGVyQ2xvc2VkKCl7cmV0dXJuIHRoaXMuX3JlZi5jbG9zZWR9YmVmb3JlQ2xvc2VkKCl7cmV0dXJuIHRoaXMuX2JlZm9yZUNsb3NlZH1iYWNrZHJvcENsaWNrKCl7cmV0dXJuIHRoaXMuX3JlZi5iYWNrZHJvcENsaWNrfWtleWRvd25FdmVudHMoKXtyZXR1cm4gdGhpcy5fcmVmLmtleWRvd25FdmVudHN9dXBkYXRlUG9zaXRpb24odCl7bGV0IGU9dGhpcy5fcmVmLmNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5O3JldHVybiB0JiYodC5sZWZ0fHx0LnJpZ2h0KT90LmxlZnQ/ZS5sZWZ0KHQubGVmdCk6ZS5yaWdodCh0LnJpZ2h0KTplLmNlbnRlckhvcml6b250YWxseSgpLHQmJih0LnRvcHx8dC5ib3R0b20pP3QudG9wP2UudG9wKHQudG9wKTplLmJvdHRvbSh0LmJvdHRvbSk6ZS5jZW50ZXJWZXJ0aWNhbGx5KCksdGhpcy5fcmVmLnVwZGF0ZVBvc2l0aW9uKCksdGhpc311cGRhdGVTaXplKHQ9IiIsZT0iIil7cmV0dXJuIHRoaXMuX3JlZi51cGRhdGVTaXplKHQsZSksdGhpc31hZGRQYW5lbENsYXNzKHQpe3JldHVybiB0aGlzLl9yZWYuYWRkUGFuZWxDbGFzcyh0KSx0aGlzfXJlbW92ZVBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMuX3JlZi5yZW1vdmVQYW5lbENsYXNzKHQpLHRoaXN9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fc3RhdGV9X2ZpbmlzaERpYWxvZ0Nsb3NlKCl7dGhpcy5fc3RhdGU9Mix0aGlzLl9yZWYuY2xvc2UodGhpcy5fcmVzdWx0LHtmb2N1c09yaWdpbjp0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZX0pLHRoaXMuY29tcG9uZW50SW5zdGFuY2U9bnVsbH19O2Z1bmN0aW9uIE90ZShuLHQsZSl7cmV0dXJuIG4uX2Nsb3NlSW50ZXJhY3Rpb25UeXBlPXQsbi5jbG9zZShlKX12YXIgY3c9bmV3IHBlKCJNYXREaWFsb2dEYXRhIiksWk9lPW5ldyBwZSgibWF0LWRpYWxvZy1kZWZhdWx0LW9wdGlvbnMiKSxrdGU9bmV3IHBlKCJtYXQtZGlhbG9nLXNjcm9sbC1zdHJhdGVneSIpLCRPZT17cHJvdmlkZTprdGUsZGVwczpbdHJdLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpfX0sZWtlPTAsdGtlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLHUsZCl7dGhpcy5fb3ZlcmxheT1lLHRoaXMuX2RlZmF1bHRPcHRpb25zPXIsdGhpcy5fcGFyZW50RGlhbG9nPW8sdGhpcy5fZGlhbG9nUmVmQ29uc3RydWN0b3I9bCx0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlPWMsdGhpcy5fZGlhbG9nRGF0YVRva2VuPXUsdGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbD1bXSx0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsPW5ldyBrZSx0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsPW5ldyBrZSx0aGlzLl9pZFByZWZpeD0ibWF0LWRpYWxvZy0iLHRoaXMuYWZ0ZXJBbGxDbG9zZWQ9UWEoKCk9PnRoaXMub3BlbkRpYWxvZ3MubGVuZ3RoP3RoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5waXBlKHpuKHZvaWQgMCkpKSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hLHRoaXMuX2RpYWxvZz1pLmdldChMSCl9Z2V0IG9wZW5EaWFsb2dzKCl7cmV0dXJuIHRoaXMuX3BhcmVudERpYWxvZz90aGlzLl9wYXJlbnREaWFsb2cub3BlbkRpYWxvZ3M6dGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbH1nZXQgYWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5hZnRlck9wZW5lZDp0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsfV9nZXRBZnRlckFsbENsb3NlZCgpe2xldCBlPXRoaXMuX3BhcmVudERpYWxvZztyZXR1cm4gZT9lLl9nZXRBZnRlckFsbENsb3NlZCgpOnRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWx9b3BlbihlLGkpe2xldCByOyhpPXsuLi50aGlzLl9kZWZhdWx0T3B0aW9uc3x8bmV3IEZ2LC4uLml9KS5pZD1pLmlkfHxgJHt0aGlzLl9pZFByZWZpeH0ke2VrZSsrfWAsaS5zY3JvbGxTdHJhdGVneT1pLnNjcm9sbFN0cmF0ZWd5fHx0aGlzLl9zY3JvbGxTdHJhdGVneSgpO2xldCBvPXRoaXMuX2RpYWxvZy5vcGVuKGUsey4uLmkscG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuY2VudGVyVmVydGljYWxseSgpLGRpc2FibGVDbG9zZTohMCxjbG9zZU9uRGVzdHJveTohMSxjb250YWluZXI6e3R5cGU6dGhpcy5fZGlhbG9nQ29udGFpbmVyVHlwZSxwcm92aWRlcnM6KCk9Plt7cHJvdmlkZTpGdix1c2VWYWx1ZTppfSx7cHJvdmlkZTpvZyx1c2VWYWx1ZTppfV19LHRlbXBsYXRlQ29udGV4dDooKT0+KHtkaWFsb2dSZWY6cn0pLHByb3ZpZGVyczoocyxhLGwpPT4ocj1uZXcgdGhpcy5fZGlhbG9nUmVmQ29uc3RydWN0b3IocyxpLGwpLHIudXBkYXRlUG9zaXRpb24oaT8ucG9zaXRpb24pLFt7cHJvdmlkZTp0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlLHVzZVZhbHVlOmx9LHtwcm92aWRlOnRoaXMuX2RpYWxvZ0RhdGFUb2tlbix1c2VWYWx1ZTphLmRhdGF9LHtwcm92aWRlOnRoaXMuX2RpYWxvZ1JlZkNvbnN0cnVjdG9yLHVzZVZhbHVlOnJ9XSl9KTtyZXR1cm4gci5jb21wb25lbnRJbnN0YW5jZT1vLmNvbXBvbmVudEluc3RhbmNlLHRoaXMub3BlbkRpYWxvZ3MucHVzaChyKSx0aGlzLmFmdGVyT3BlbmVkLm5leHQociksci5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKT0+e2xldCBzPXRoaXMub3BlbkRpYWxvZ3MuaW5kZXhPZihyKTtzPi0xJiYodGhpcy5vcGVuRGlhbG9ncy5zcGxpY2UocywxKSx0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5uZXh0KCkpfSkscn1jbG9zZUFsbCgpe3RoaXMuX2Nsb3NlRGlhbG9ncyh0aGlzLm9wZW5EaWFsb2dzKX1nZXREaWFsb2dCeUlkKGUpe3JldHVybiB0aGlzLm9wZW5EaWFsb2dzLmZpbmQoaT0+aS5pZD09PWUpfW5nT25EZXN0cm95KCl7dGhpcy5fY2xvc2VEaWFsb2dzKHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWwpLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWwuY29tcGxldGUoKSx0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsLmNvbXBsZXRlKCl9X2Nsb3NlRGlhbG9ncyhlKXtsZXQgaT1lLmxlbmd0aDtmb3IoO2ktLTspZVtpXS5jbG9zZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7bmwoKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx2bD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdGtle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoZSxpLG8sYSxsLHMsdHUsS09lLGN3LGMpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKHRyKSxqKFhuKSxqKGlNLDgpLGooWk9lLDgpLGooa3RlKSxqKG4sMTIpLGooUnYpLGooUGksOCkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLG5rZT0wLFQyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZGlhbG9nUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2RpYWxvZz1yLHRoaXMudHlwZT0iYnV0dG9uIn1uZ09uSW5pdCgpe3RoaXMuZGlhbG9nUmVmfHwodGhpcy5kaWFsb2dSZWY9TnRlKHRoaXMuX2VsZW1lbnRSZWYsdGhpcy5fZGlhbG9nLm9wZW5EaWFsb2dzKSl9bmdPbkNoYW5nZXMoZSl7bGV0IGk9ZS5fbWF0RGlhbG9nQ2xvc2V8fGUuX21hdERpYWxvZ0Nsb3NlUmVzdWx0O2kmJih0aGlzLmRpYWxvZ1Jlc3VsdD1pLmN1cnJlbnRWYWx1ZSl9X29uQnV0dG9uQ2xpY2soZSl7T3RlKHRoaXMuZGlhbG9nUmVmLDA9PT1lLnNjcmVlblgmJjA9PT1lLnNjcmVlblk/ImtleWJvYXJkIjoibW91c2UiLHRoaXMuZGlhbG9nUmVzdWx0KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTSh0dSw4KSxNKFJlKSxNKHZsKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbIiIsIm1hdERpYWxvZ0Nsb3NlIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX29uQnV0dG9uQ2xpY2sobyl9KSwyJmUmJnplKCJhcmlhLWxhYmVsIixpLmFyaWFMYWJlbHx8bnVsbCkoInR5cGUiLGkudHlwZSl9LGlucHV0czp7YXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLHR5cGU6InR5cGUiLGRpYWxvZ1Jlc3VsdDpbIm1hdC1kaWFsb2ctY2xvc2UiLCJkaWFsb2dSZXN1bHQiXSxfbWF0RGlhbG9nQ2xvc2U6WyJtYXREaWFsb2dDbG9zZSIsIl9tYXREaWFsb2dDbG9zZSJdfSxleHBvcnRBczpbIm1hdERpYWxvZ0Nsb3NlIl0sZmVhdHVyZXM6W0Z0XX0pLG59KSgpLEZ0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9kaWFsb2dSZWY9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5fZGlhbG9nPXIsdGhpcy5pZD0ibWF0LWRpYWxvZy10aXRsZS0iK25rZSsrfW5nT25Jbml0KCl7dGhpcy5fZGlhbG9nUmVmfHwodGhpcy5fZGlhbG9nUmVmPU50ZSh0aGlzLl9lbGVtZW50UmVmLHRoaXMuX2RpYWxvZy5vcGVuRGlhbG9ncykpLHRoaXMuX2RpYWxvZ1JlZiYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMuX2RpYWxvZ1JlZi5fY29udGFpbmVySW5zdGFuY2U7ZSYmIWUuX2FyaWFMYWJlbGxlZEJ5JiYoZS5fYXJpYUxhYmVsbGVkQnk9dGhpcy5pZCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTSh0dSw4KSxNKFJlKSxNKHZsKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIiIsIm1hdERpYWxvZ1RpdGxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy10aXRsZSJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZfcygiaWQiLGkuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGV4cG9ydEFzOlsibWF0RGlhbG9nVGl0bGUiXX0pLG59KSgpLEQyPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWNvbnRlbnQiLCIiXSxbIm1hdC1kaWFsb2ctY29udGVudCJdLFsiIiwibWF0RGlhbG9nQ29udGVudCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1kaWFsb2ctY29udGVudCJdfSksbn0pKCksQTI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWxpZ249InN0YXJ0In19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctYWN0aW9ucyIsIiJdLFsibWF0LWRpYWxvZy1hY3Rpb25zIl0sWyIiLCJtYXREaWFsb2dBY3Rpb25zIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy1hY3Rpb25zIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmV0KCJtYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tY2VudGVyIiwiY2VudGVyIj09PWkuYWxpZ24pKCJtYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tZW5kIiwiZW5kIj09PWkuYWxpZ24pfSxpbnB1dHM6e2FsaWduOiJhbGlnbiJ9fSksbn0pKCk7ZnVuY3Rpb24gTnRlKG4sdCl7bGV0IGU9bi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7Zm9yKDtlJiYhZS5jbGFzc0xpc3QuY29udGFpbnMoIm1hdC1kaWFsb2ctY29udGFpbmVyIik7KWU9ZS5wYXJlbnRFbGVtZW50O3JldHVybiBlP3QuZmluZChpPT5pLmlkPT09ZS5pZCk6bnVsbH12YXIgT2g9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbdmwsJE9lXSxpbXBvcnRzOltSdGUsc3MsZXUsbG4sbG5dfSksbn0pKCksaWtlPVsiY29ubmVjdGlvbkNvbnRhaW5lciJdLHJrZT1bImlucHV0Q29udGFpbmVyIl0sb2tlPVsibGFiZWwiXTtmdW5jdGlvbiBza2Uobix0KXsxJm4mJihzbigwKSxfKDEsImRpdiIsMTQpLE8oMiwiZGl2IiwxNSkoMywiZGl2IiwxNikoNCwiZGl2IiwxNyksdigpLF8oNSwiZGl2IiwxOCksTyg2LCJkaXYiLDE1KSg3LCJkaXYiLDE2KSg4LCJkaXYiLDE3KSx2KCksYW4oKSl9ZnVuY3Rpb24gYWtlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwxOSksUCgiY2RrT2JzZXJ2ZUNvbnRlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS51cGRhdGVPdXRsaW5lR2FwKCkpfSksVm4oMSwxKSx2KCl9MiZuJiZ5KCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwib3V0bGluZSIhPVMoKS5hcHBlYXJhbmNlKX1mdW5jdGlvbiBsa2Uobix0KXtpZigxJm4mJihzbigwKSxWbigxLDIpLF8oMiwic3BhbiIpLEEoMyksdigpLGFuKCkpLDImbil7bGV0IGU9UygyKTtDKDMpLHl0KGUuX2NvbnRyb2wucGxhY2Vob2xkZXIpfX1mdW5jdGlvbiBja2Uobix0KXsxJm4mJlZuKDAsMyxbIipuZ1N3aXRjaENhc2UiLCJ0cnVlIl0pfWZ1bmN0aW9uIHVrZShuLHQpezEmbiYmKF8oMCwic3BhbiIsMjMpLEEoMSwiICoiKSx2KCkpfWZ1bmN0aW9uIGRrZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImxhYmVsIiwyMCwyMSksUCgiY2RrT2JzZXJ2ZUNvbnRlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS51cGRhdGVPdXRsaW5lR2FwKCkpfSksRSgyLGxrZSw0LDEsIm5nLWNvbnRhaW5lciIsMTIpLEUoMyxja2UsMSwwLCJuZy1jb250ZW50IiwxMiksRSg0LHVrZSwyLDAsInNwYW4iLDIyKSx2KCl9aWYoMiZuKXtsZXQgZT1TKCk7ZXQoIm1hdC1lbXB0eSIsZS5fY29udHJvbC5lbXB0eSYmIWUuX3Nob3VsZEFsd2F5c0Zsb2F0KCkpKCJtYXQtZm9ybS1maWVsZC1lbXB0eSIsZS5fY29udHJvbC5lbXB0eSYmIWUuX3Nob3VsZEFsd2F5c0Zsb2F0KCkpKCJtYXQtYWNjZW50IiwiYWNjZW50Ij09ZS5jb2xvcikoIm1hdC13YXJuIiwid2FybiI9PWUuY29sb3IpLHkoImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJvdXRsaW5lIiE9ZS5hcHBlYXJhbmNlKSgiaWQiLGUuX2xhYmVsSWQpKCJuZ1N3aXRjaCIsZS5faGFzTGFiZWwoKSksemUoImZvciIsZS5fY29udHJvbC5pZCkoImFyaWEtb3ducyIsZS5fY29udHJvbC5pZCksQygyKSx5KCJuZ1N3aXRjaENhc2UiLCExKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsITApLEMoMSkseSgibmdJZiIsIWUuaGlkZVJlcXVpcmVkTWFya2VyJiZlLl9jb250cm9sLnJlcXVpcmVkJiYhZS5fY29udHJvbC5kaXNhYmxlZCl9fWZ1bmN0aW9uIHBrZShuLHQpezEmbiYmKF8oMCwiZGl2IiwyNCksVm4oMSw0KSx2KCkpfWZ1bmN0aW9uIGhrZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwyNSksTygxLCJzcGFuIiwyNiksdigpKSwyJm4pe2xldCBlPVMoKTtDKDEpLGV0KCJtYXQtYWNjZW50IiwiYWNjZW50Ij09ZS5jb2xvcikoIm1hdC13YXJuIiwid2FybiI9PWUuY29sb3IpfX1mdW5jdGlvbiBma2Uobix0KXsxJm4mJihfKDAsImRpdiIpLFZuKDEsNSksdigpKSwyJm4mJnkoIkB0cmFuc2l0aW9uTWVzc2FnZXMiLFMoKS5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGUpfWZ1bmN0aW9uIG1rZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwzMCksQSgxKSx2KCkpLDImbil7bGV0IGU9UygyKTt5KCJpZCIsZS5faGludExhYmVsSWQpLEMoMSkseXQoZS5oaW50TGFiZWwpfX1mdW5jdGlvbiBna2Uobix0KXtpZigxJm4mJihfKDAsImRpdiIsMjcpLEUoMSxta2UsMiwyLCJkaXYiLDI4KSxWbigyLDYpLE8oMywiZGl2IiwyOSksVm4oNCw3KSx2KCkpLDImbil7bGV0IGU9UygpO3koIkB0cmFuc2l0aW9uTWVzc2FnZXMiLGUuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlKSxDKDEpLHkoIm5nSWYiLGUuaGludExhYmVsKX19dmFyIF9rZT1bIioiLFtbIiIsIm1hdFByZWZpeCIsIiJdXSxbWyJtYXQtcGxhY2Vob2xkZXIiXV0sW1sibWF0LWxhYmVsIl1dLFtbIiIsIm1hdFN1ZmZpeCIsIiJdXSxbWyJtYXQtZXJyb3IiXV0sW1sibWF0LWhpbnQiLDMsImFsaWduIiwiZW5kIl1dLFtbIm1hdC1oaW50IiwiYWxpZ24iLCJlbmQiXV1dLHZrZT1bIioiLCJbbWF0UHJlZml4XSIsIm1hdC1wbGFjZWhvbGRlciIsIm1hdC1sYWJlbCIsIlttYXRTdWZmaXhdIiwibWF0LWVycm9yIiwibWF0LWhpbnQ6bm90KFthbGlnbj0nZW5kJ10pIiwibWF0LWhpbnRbYWxpZ249J2VuZCddIl0seWtlPTAsVnRlPW5ldyBwZSgiTWF0RXJyb3IiKSxIdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaWQ9Im1hdC1lcnJvci0iK3lrZSsrLGV8fGkubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtbGl2ZSIsInBvbGl0ZSIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh2bygiYXJpYS1saXZlIiksTShSZSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtZXJyb3IiXV0saG9zdEF0dHJzOlsiYXJpYS1hdG9taWMiLCJ0cnVlIiwxLCJtYXQtZXJyb3IiXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmemUoImlkIixpLmlkKX0saW5wdXRzOntpZDoiaWQifSxmZWF0dXJlczpbJHQoW3twcm92aWRlOlZ0ZSx1c2VFeGlzdGluZzpufV0pXX0pLG59KSgpLGJrZT17dHJhbnNpdGlvbk1lc3NhZ2VzOktyKCJ0cmFuc2l0aW9uTWVzc2FnZXMiLFtraSgiZW50ZXIiLGduKHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDAlKSJ9KSksTGkoInZvaWQgPT4gZW50ZXIiLFtnbih7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlWSgtNXB4KSJ9KSxqaSgiMzAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikiKV0pXSl9LGtoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpufSksbn0pKCkseGtlPW5ldyBwZSgiTWF0SGludCIpLE52PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtbGFiZWwiXV19KSxufSkoKSxDa2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1wbGFjZWhvbGRlciJdXX0pLG59KSgpLE1rZT1uZXcgcGUoIk1hdFByZWZpeCIpLHdrZT1uZXcgcGUoIk1hdFN1ZmZpeCIpLEx0ZT0wLEVrZT1rbyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSwicHJpbWFyeSIpLFRrZT1uZXcgcGUoIk1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUyIpLHNnPW5ldyBwZSgiTWF0Rm9ybUZpZWxkIikscGQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEVrZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX2Rpcj1yLHRoaXMuX2RlZmF1bHRzPW8sdGhpcy5fcGxhdGZvcm09cyx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IGtlLHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj0hMSx0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZT0hMSx0aGlzLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZT0iIix0aGlzLl9oaW50TGFiZWw9IiIsdGhpcy5faGludExhYmVsSWQ9Im1hdC1oaW50LSIrTHRlKyssdGhpcy5fbGFiZWxJZD0ibWF0LWZvcm0tZmllbGQtbGFiZWwtIitMdGUrKyx0aGlzLmZsb2F0TGFiZWw9dGhpcy5fZ2V0RGVmYXVsdEZsb2F0TGFiZWxTdGF0ZSgpLHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkPSJOb29wQW5pbWF0aW9ucyIhPT1sLHRoaXMuYXBwZWFyYW5jZT1vPy5hcHBlYXJhbmNlfHwibGVnYWN5IixvJiYodGhpcy5faGlkZVJlcXVpcmVkTWFya2VyPUJvb2xlYW4oby5oaWRlUmVxdWlyZWRNYXJrZXIpLG8uY29sb3ImJih0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPW8uY29sb3IpKX1nZXQgYXBwZWFyYW5jZSgpe3JldHVybiB0aGlzLl9hcHBlYXJhbmNlfXNldCBhcHBlYXJhbmNlKGUpe2xldCBpPXRoaXMuX2FwcGVhcmFuY2U7dGhpcy5fYXBwZWFyYW5jZT1lfHx0aGlzLl9kZWZhdWx0cz8uYXBwZWFyYW5jZXx8ImxlZ2FjeSIsIm91dGxpbmUiPT09dGhpcy5fYXBwZWFyYW5jZSYmaSE9PWUmJih0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMCl9Z2V0IGhpZGVSZXF1aXJlZE1hcmtlcigpe3JldHVybiB0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXJ9c2V0IGhpZGVSZXF1aXJlZE1hcmtlcihlKXt0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXI9UnQoZSl9X3Nob3VsZEFsd2F5c0Zsb2F0KCl7cmV0dXJuImFsd2F5cyI9PT10aGlzLmZsb2F0TGFiZWwmJiF0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZX1fY2FuTGFiZWxGbG9hdCgpe3JldHVybiJuZXZlciIhPT10aGlzLmZsb2F0TGFiZWx9Z2V0IGhpbnRMYWJlbCgpe3JldHVybiB0aGlzLl9oaW50TGFiZWx9c2V0IGhpbnRMYWJlbChlKXt0aGlzLl9oaW50TGFiZWw9ZSx0aGlzLl9wcm9jZXNzSGludHMoKX1nZXQgZmxvYXRMYWJlbCgpe3JldHVybiJsZWdhY3kiIT09dGhpcy5hcHBlYXJhbmNlJiYibmV2ZXIiPT09dGhpcy5fZmxvYXRMYWJlbD8iYXV0byI6dGhpcy5fZmxvYXRMYWJlbH1zZXQgZmxvYXRMYWJlbChlKXtlIT09dGhpcy5fZmxvYXRMYWJlbCYmKHRoaXMuX2Zsb2F0TGFiZWw9ZXx8dGhpcy5fZ2V0RGVmYXVsdEZsb2F0TGFiZWxTdGF0ZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXQgX2NvbnRyb2woKXtyZXR1cm4gdGhpcy5fZXhwbGljaXRGb3JtRmllbGRDb250cm9sfHx0aGlzLl9jb250cm9sTm9uU3RhdGljfHx0aGlzLl9jb250cm9sU3RhdGljfXNldCBfY29udHJvbChlKXt0aGlzLl9leHBsaWNpdEZvcm1GaWVsZENvbnRyb2w9ZX1nZXRMYWJlbElkKCl7cmV0dXJuIHRoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKT90aGlzLl9sYWJlbElkOm51bGx9Z2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpe3JldHVybiB0aGlzLl9jb25uZWN0aW9uQ29udGFpbmVyUmVmfHx0aGlzLl9lbGVtZW50UmVmfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX3ZhbGlkYXRlQ29udHJvbENoaWxkKCk7bGV0IGU9dGhpcy5fY29udHJvbDtlLmNvbnRyb2xUeXBlJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbWF0LWZvcm0tZmllbGQtdHlwZS0ke2UuY29udHJvbFR5cGV9YCksZS5zdGF0ZUNoYW5nZXMucGlwZSh6bihudWxsKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdmFsaWRhdGVQbGFjZWhvbGRlcnMoKSx0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGUubmdDb250cm9sJiZlLm5nQ29udHJvbC52YWx1ZUNoYW5nZXMmJmUubmdDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZE9uU3RhYmxlJiZ0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKX0pfSksSnQodGhpcy5fcHJlZml4Q2hpbGRyZW4uY2hhbmdlcyx0aGlzLl9zdWZmaXhDaGlsZHJlbi5jaGFuZ2VzKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2hpbnRDaGlsZHJlbi5jaGFuZ2VzLnBpcGUoem4obnVsbCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Byb2Nlc3NIaW50cygpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdGhpcy5fZXJyb3JDaGlsZHJlbi5jaGFuZ2VzLnBpcGUoem4obnVsbCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3N5bmNEZXNjcmliZWRCeUlkcygpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdGhpcy5fZGlyJiZ0aGlzLl9kaXIuY2hhbmdlLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMudXBkYXRlT3V0bGluZUdhcCgpKX0pOnRoaXMudXBkYXRlT3V0bGluZUdhcCgpfSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5fdmFsaWRhdGVDb250cm9sQ2hpbGQoKSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseSYmdGhpcy51cGRhdGVPdXRsaW5lR2FwKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGU9ImVudGVyIix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfV9zaG91bGRGb3J3YXJkKGUpe2xldCBpPXRoaXMuX2NvbnRyb2w/dGhpcy5fY29udHJvbC5uZ0NvbnRyb2w6bnVsbDtyZXR1cm4gaSYmaVtlXX1faGFzUGxhY2Vob2xkZXIoKXtyZXR1cm4hISh0aGlzLl9jb250cm9sJiZ0aGlzLl9jb250cm9sLnBsYWNlaG9sZGVyfHx0aGlzLl9wbGFjZWhvbGRlckNoaWxkKX1faGFzTGFiZWwoKXtyZXR1cm4hKCF0aGlzLl9sYWJlbENoaWxkTm9uU3RhdGljJiYhdGhpcy5fbGFiZWxDaGlsZFN0YXRpYyl9X3Nob3VsZExhYmVsRmxvYXQoKXtyZXR1cm4gdGhpcy5fY2FuTGFiZWxGbG9hdCgpJiYodGhpcy5fY29udHJvbCYmdGhpcy5fY29udHJvbC5zaG91bGRMYWJlbEZsb2F0fHx0aGlzLl9zaG91bGRBbHdheXNGbG9hdCgpKX1faGlkZUNvbnRyb2xQbGFjZWhvbGRlcigpe3JldHVybiJsZWdhY3kiPT09dGhpcy5hcHBlYXJhbmNlJiYhdGhpcy5faGFzTGFiZWwoKXx8dGhpcy5faGFzTGFiZWwoKSYmIXRoaXMuX3Nob3VsZExhYmVsRmxvYXQoKX1faGFzRmxvYXRpbmdMYWJlbCgpe3JldHVybiB0aGlzLl9oYXNMYWJlbCgpfHwibGVnYWN5Ij09PXRoaXMuYXBwZWFyYW5jZSYmdGhpcy5faGFzUGxhY2Vob2xkZXIoKX1fZ2V0RGlzcGxheWVkTWVzc2FnZXMoKXtyZXR1cm4gdGhpcy5fZXJyb3JDaGlsZHJlbiYmdGhpcy5fZXJyb3JDaGlsZHJlbi5sZW5ndGg+MCYmdGhpcy5fY29udHJvbC5lcnJvclN0YXRlPyJlcnJvciI6ImhpbnQifV9hbmltYXRlQW5kTG9ja0xhYmVsKCl7dGhpcy5faGFzRmxvYXRpbmdMYWJlbCgpJiZ0aGlzLl9jYW5MYWJlbEZsb2F0KCkmJih0aGlzLl9hbmltYXRpb25zRW5hYmxlZCYmdGhpcy5fbGFiZWwmJih0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZT0hMCxfaSh0aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2l0aW9uZW5kIikucGlwZShRdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGU9ITF9KSksdGhpcy5mbG9hdExhYmVsPSJhbHdheXMiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fdmFsaWRhdGVQbGFjZWhvbGRlcnMoKXt9X3Byb2Nlc3NIaW50cygpe3RoaXMuX3ZhbGlkYXRlSGludHMoKSx0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKX1fdmFsaWRhdGVIaW50cygpe31fZ2V0RGVmYXVsdEZsb2F0TGFiZWxTdGF0ZSgpe3JldHVybiB0aGlzLl9kZWZhdWx0cyYmdGhpcy5fZGVmYXVsdHMuZmxvYXRMYWJlbHx8ImF1dG8ifV9zeW5jRGVzY3JpYmVkQnlJZHMoKXtpZih0aGlzLl9jb250cm9sKXtsZXQgZT1bXTtpZih0aGlzLl9jb250cm9sLnVzZXJBcmlhRGVzY3JpYmVkQnkmJiJzdHJpbmciPT10eXBlb2YgdGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5JiZlLnB1c2goLi4udGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5LnNwbGl0KCIgIikpLCJoaW50Ij09PXRoaXMuX2dldERpc3BsYXllZE1lc3NhZ2VzKCkpe2xldCBpPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZChvPT4ic3RhcnQiPT09by5hbGlnbik6bnVsbCxyPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZChvPT4iZW5kIj09PW8uYWxpZ24pOm51bGw7aT9lLnB1c2goaS5pZCk6dGhpcy5faGludExhYmVsJiZlLnB1c2godGhpcy5faGludExhYmVsSWQpLHImJmUucHVzaChyLmlkKX1lbHNlIHRoaXMuX2Vycm9yQ2hpbGRyZW4mJmUucHVzaCguLi50aGlzLl9lcnJvckNoaWxkcmVuLm1hcChpPT5pLmlkKSk7dGhpcy5fY29udHJvbC5zZXREZXNjcmliZWRCeUlkcyhlKX19X3ZhbGlkYXRlQ29udHJvbENoaWxkKCl7fXVwZGF0ZU91dGxpbmVHYXAoKXtsZXQgZT10aGlzLl9sYWJlbD90aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50Om51bGwsaT10aGlzLl9jb25uZWN0aW9uQ29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQscj0iLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQiLG89Ii5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCI7aWYoIm91dGxpbmUiIT09dGhpcy5hcHBlYXJhbmNlfHwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybjtpZighZXx8IWUuY2hpbGRyZW4ubGVuZ3RofHwhZS50ZXh0Q29udGVudC50cmltKCkpe2xldCB1PWkucXVlcnlTZWxlY3RvckFsbChgJHtyfSwgJHtvfWApO2ZvcihsZXQgZD0wO2Q8dS5sZW5ndGg7ZCsrKXVbZF0uc3R5bGUud2lkdGg9IjAiO3JldHVybn1pZighdGhpcy5faXNBdHRhY2hlZFRvRE9NKCkpcmV0dXJuIHZvaWQodGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHk9ITApO2xldCBzPTAsYT0wLGw9aS5xdWVyeVNlbGVjdG9yQWxsKHIpLGM9aS5xdWVyeVNlbGVjdG9yQWxsKG8pO2lmKHRoaXMuX2xhYmVsJiZ0aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCl7bGV0IHU9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigwPT09dS53aWR0aCYmMD09PXUuaGVpZ2h0KXJldHVybiB0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMCx2b2lkKHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5PSExKTtsZXQgZD10aGlzLl9nZXRTdGFydEVuZCh1KSxwPWUuY2hpbGRyZW4saD10aGlzLl9nZXRTdGFydEVuZChwWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxmPTA7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKyspZis9cFttXS5vZmZzZXRXaWR0aDtzPU1hdGguYWJzKGgtZCktNSxhPWY+MD8uNzUqZisxMDowfWZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKWxbdV0uc3R5bGUud2lkdGg9YCR7c31weGA7Zm9yKGxldCB1PTA7dTxjLmxlbmd0aDt1KyspY1t1XS5zdHlsZS53aWR0aD1gJHthfXB4YDt0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT10aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMX1fZ2V0U3RhcnRFbmQoZSl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/ZS5yaWdodDplLmxlZnR9X2lzQXR0YWNoZWRUb0RPTSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZihlLmdldFJvb3ROb2RlKXtsZXQgaT1lLmdldFJvb3ROb2RlKCk7cmV0dXJuIGkmJmkhPT1lfXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0obm4pLE0oJGksOCksTShUa2UsOCksTShvaSksTShfdCksTShQaSw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWZvcm0tZmllbGQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKEVpKHIsa2gsNSksRWkocixraCw3KSxFaShyLE52LDUpLEVpKHIsTnYsNyksRWkocixDa2UsNSksRWkocixWdGUsNSksRWkocix4a2UsNSksRWkocixNa2UsNSksRWkocix3a2UsNSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX2NvbnRyb2xOb25TdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2NvbnRyb2xTdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2xhYmVsQ2hpbGROb25TdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2xhYmVsQ2hpbGRTdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX3BsYWNlaG9sZGVyQ2hpbGQ9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2Vycm9yQ2hpbGRyZW49byksTmUobz1MZSgpKSYmKGkuX2hpbnRDaGlsZHJlbj1vKSxOZShvPUxlKCkpJiYoaS5fcHJlZml4Q2hpbGRyZW49byksTmUobz1MZSgpKSYmKGkuX3N1ZmZpeENoaWxkcmVuPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoaWtlLDcpLG90KHJrZSw1KSxvdChva2UsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2Nvbm5lY3Rpb25Db250YWluZXJSZWY9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuX2lucHV0Q29udGFpbmVyUmVmPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9sYWJlbD1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LWZvcm0tZmllbGQiXSxob3N0VmFyczo0MCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmV0KCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT1pLmFwcGVhcmFuY2UpKCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwiLCJmaWxsIj09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIiwib3V0bGluZSI9PWkuYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IiwibGVnYWN5Ij09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtaW52YWxpZCIsaS5fY29udHJvbC5lcnJvclN0YXRlKSgibWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IixpLl9jYW5MYWJlbEZsb2F0KCkpKCJtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQiLGkuX3Nob3VsZExhYmVsRmxvYXQoKSkoIm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCIsaS5faGFzRmxvYXRpbmdMYWJlbCgpKSgibWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciIsaS5faGlkZUNvbnRyb2xQbGFjZWhvbGRlcigpKSgibWF0LWZvcm0tZmllbGQtZGlzYWJsZWQiLGkuX2NvbnRyb2wuZGlzYWJsZWQpKCJtYXQtZm9ybS1maWVsZC1hdXRvZmlsbGVkIixpLl9jb250cm9sLmF1dG9maWxsZWQpKCJtYXQtZm9jdXNlZCIsaS5fY29udHJvbC5mb2N1c2VkKSgibmctdW50b3VjaGVkIixpLl9zaG91bGRGb3J3YXJkKCJ1bnRvdWNoZWQiKSkoIm5nLXRvdWNoZWQiLGkuX3Nob3VsZEZvcndhcmQoInRvdWNoZWQiKSkoIm5nLXByaXN0aW5lIixpLl9zaG91bGRGb3J3YXJkKCJwcmlzdGluZSIpKSgibmctZGlydHkiLGkuX3Nob3VsZEZvcndhcmQoImRpcnR5IikpKCJuZy12YWxpZCIsaS5fc2hvdWxkRm9yd2FyZCgidmFsaWQiKSkoIm5nLWludmFsaWQiLGkuX3Nob3VsZEZvcndhcmQoImludmFsaWQiKSkoIm5nLXBlbmRpbmciLGkuX3Nob3VsZEZvcndhcmQoInBlbmRpbmciKSkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwhaS5fYW5pbWF0aW9uc0VuYWJsZWQpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsaGlkZVJlcXVpcmVkTWFya2VyOiJoaWRlUmVxdWlyZWRNYXJrZXIiLGhpbnRMYWJlbDoiaGludExhYmVsIixmbG9hdExhYmVsOiJmbG9hdExhYmVsIn0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOnNnLHVzZUV4aXN0aW5nOm59XSksdHRdLG5nQ29udGVudFNlbGVjdG9yczp2a2UsZGVjbHM6MTUsdmFyczo4LGNvbnN0czpbWzEsIm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIiXSxbMSwibWF0LWZvcm0tZmllbGQtZmxleCIsMywiY2xpY2siXSxbImNvbm5lY3Rpb25Db250YWluZXIiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1wcmVmaXgiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJjZGtPYnNlcnZlQ29udGVudCIsNCwibmdJZiJdLFsxLCJtYXQtZm9ybS1maWVsZC1pbmZpeCJdLFsiaW5wdXRDb250YWluZXIiLCIiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1sYWJlbCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImlkIiwibWF0LWVtcHR5IiwibWF0LWZvcm0tZmllbGQtZW1wdHkiLCJtYXQtYWNjZW50IiwibWF0LXdhcm4iLCJuZ1N3aXRjaCIsImNka09ic2VydmVDb250ZW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIiLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lIl0sWzEsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZSIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2siXSxbMSwibWF0LWZvcm0tZmllbGQtcHJlZml4IiwzLCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJpZCIsIm5nU3dpdGNoIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbImxhYmVsIiwiIl0sWyJjbGFzcyIsIm1hdC1wbGFjZWhvbGRlci1yZXF1aXJlZCBtYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWF0LXBsYWNlaG9sZGVyLXJlcXVpcmVkIiwibWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIl0sWzEsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCJdLFsxLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiXSxbMSwibWF0LWZvcm0tZmllbGQtcmlwcGxlIl0sWzEsIm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtaGludCIsMywiaWQiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtaGludC1zcGFjZXIiXSxbMSwibWF0LWhpbnQiLDMsImlkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoX2tlKSxfKDAsImRpdiIsMCkoMSwiZGl2IiwxLDIpLFAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fY29udHJvbC5vbkNvbnRhaW5lckNsaWNrJiZpLl9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2sobyl9KSxFKDMsc2tlLDksMCwibmctY29udGFpbmVyIiwzKSxFKDQsYWtlLDIsMSwiZGl2Iiw0KSxfKDUsImRpdiIsNSw2KSxWbig3KSxfKDgsInNwYW4iLDcpLEUoOSxka2UsNSwxNiwibGFiZWwiLDgpLHYoKSgpLEUoMTAscGtlLDIsMCwiZGl2Iiw5KSx2KCksRSgxMSxoa2UsMiw0LCJkaXYiLDEwKSxfKDEyLCJkaXYiLDExKSxFKDEzLGZrZSwyLDEsImRpdiIsMTIpLEUoMTQsZ2tlLDUsMiwiZGl2IiwxMyksdigpKCkpLDImZSYmKEMoMykseSgibmdJZiIsIm91dGxpbmUiPT1pLmFwcGVhcmFuY2UpLEMoMSkseSgibmdJZiIsaS5fcHJlZml4Q2hpbGRyZW4ubGVuZ3RoKSxDKDUpLHkoIm5nSWYiLGkuX2hhc0Zsb2F0aW5nTGFiZWwoKSksQygxKSx5KCJuZ0lmIixpLl9zdWZmaXhDaGlsZHJlbi5sZW5ndGgpLEMoMSkseSgibmdJZiIsIm91dGxpbmUiIT1pLmFwcGVhcmFuY2UpLEMoMSkseSgibmdTd2l0Y2giLGkuX2dldERpc3BsYXllZE1lc3NhZ2VzKCkpLEMoMSkseSgibmdTd2l0Y2hDYXNlIiwiZXJyb3IiKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsImhpbnQiKSl9LGRlcGVuZGVuY2llczpbQmUsQ3IsVXIsd2hdLHN0eWxlczpbIi5tYXQtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtc3VmZml4e3doaXRlLXNwYWNlOm5vd3JhcDtmbGV4Om5vbmU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ZmxleDphdXRvO21pbi13aWR0aDowO3dpZHRoOjE4MHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e2JvcmRlci1pbWFnZTpsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym94LXNpemluZzpjb250ZW50LWJveDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWZvcm0tZmllbGQtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2ZvbnQ6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCU7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLHdpZHRoIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO2Rpc3BsYXk6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwO2xlZnQ6YXV0bztyaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpHcmF5VGV4dH0ubWF0LWZvcm0tZmllbGQtZW1wdHkubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9jazt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtaW5wdXQtc2VydmVyW3BsYWNlaG9sZGVyXTpub3QoOnBsYWNlaG9sZGVyLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbcGxhY2Vob2xkZXJdOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1sYWJlbDpub3QoLm1hdC1mb3JtLWZpZWxkLWVtcHR5KXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNmb3JtOnNjYWxlM2QoMSwgMS4wMDAxLCAxKX0ubWF0LWZvcm0tZmllbGQtcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO3RyYW5zZm9ybS1vcmlnaW46NTAlO3RyYW5zZm9ybTpzY2FsZVgoMC41KTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246dHJhbnNmb3JtIDMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLG9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1pY29ue3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2ZvbnQtc2l6ZTppbmhlcml0O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfS5tYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5tYXQtZm9ybS1maWVsZC1oaW50LXNwYWNlcntmbGV4OjEgMCAxZW19Lm1hdC1lcnJvcntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1jb250cm9sLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtZW5ke29yZGVyOjF9Lm1hdC1mb3JtLWZpZWxkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9IiwnLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwO3BhZGRpbmc6Ljc1ZW0gLjc1ZW0gMCAuNzVlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmUtY29sb3I6R3JheVRleHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmU6ZGFzaGVkIDNweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7aGVpZ2h0OjFweDt3aWR0aDoxMDAlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDowfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGw6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye3BhZGRpbmc6MCAxZW19JywnLm1hdC1pbnB1dC1lbGVtZW50e2ZvbnQ6aW5oZXJpdDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Y29sb3I6Y3VycmVudENvbG9yO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjpib3R0b207dGV4dC1hbGlnbjppbmhlcml0O2JveC1zaXppbmc6Y29udGVudC1ib3h9Lm1hdC1pbnB1dC1lbGVtZW50Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9Lm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY29udGFjdHMtYXV0by1maWxsLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2Fwcy1sb2NrLWluZGljYXRvciwubWF0LWlucHV0LWVsZW1lbnQ6bm90KFt0eXBlPXBhc3N3b3JkXSk6Oi13ZWJraXQtY3JlZGVudGlhbHMtYXV0by1maWxsLWJ1dHRvbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRlXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZV0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPW1vbnRoXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT13ZWVrXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT10aW1lXXtsaW5lLWhlaWdodDoxfS5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGVdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZV06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lLWxvY2FsXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9bW9udGhdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT13ZWVrXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9dGltZV06OmFmdGVye2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHh9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jbGVhci1idXR0b257Zm9udC1zaXplOi43NWVtfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dHJhbnNpdGlvbjpjb2xvciA0MDBtcyAxMzMuMzMzMzMzMzMzM21zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsMCkgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLDApICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLDApICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwwKSAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntvcGFjaXR5OjB9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246bm9uZX10ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudHtyZXNpemU6dmVydGljYWw7b3ZlcmZsb3c6YXV0b310ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudC5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZzoycHggMDttYXJnaW46LTJweCAwfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZy10b3A6MWVtO3RvcDotMWVtO21hcmdpbi1ib3R0b206LTFlbX1zZWxlY3QubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50Om5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29udGVudDoiIjt3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OjVweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yaWdodDo1cHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItdG9wOjVweCBzb2xpZDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjA7bWFyZ2luLXRvcDotMi41cHg7cG9pbnRlci1ldmVudHM6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntyaWdodDphdXRvO2xlZnQ6MH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZy1yaWdodDoxNXB4fVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNXB4fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye21heC13aWR0aDpjYWxjKDEwMCUgLSAxMHB4KX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcnttYXJnaW4tdG9wOi01cHh9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7bWFyZ2luLXRvcDotMTBweH0nLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMDBweCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbnt3aWR0aDoxZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2ZvbnQ6aW5oZXJpdDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntmb250LXNpemU6aW5oZXJpdH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtoZWlnaHQ6MXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dG9wOjA7aGVpZ2h0OjJweDtvdmVyZmxvdzpoaWRkZW59LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym9yZGVyLXRvcC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXRvcC13aWR0aDoycHg7Ym9yZGVyLXRvcC1jb2xvcjpHcmF5VGV4dH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtaW52YWxpZDpub3QoLm1hdC1mb2N1c2VkKSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDoxcHh9IiwiLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcnttYXJnaW46LjI1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmc6MCAuNzVlbSAwIC43NWVtO21hcmdpbi10b3A6LTAuMjVlbTtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1wcmVmaXgsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3VmZml4e3RvcDouMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LjI1ZW07bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5ke2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO21pbi13aWR0aDo1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydHtib3JkZXItcmFkaXVzOjVweCAwIDAgNXB4O2JvcmRlci1yaWdodC1zdHlsZTpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItbGVmdC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6MCA1cHggNXB4IDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmR7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMDtib3JkZXItbGVmdC1zdHlsZTpub25lO2ZsZXgtZ3JvdzoxfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItbGVmdC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtc3R5bGU6bm9uZTtib3JkZXItcmFkaXVzOjVweCAwIDAgNXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci1yYWRpdXM6LjAwMDAwMXB4O2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tib3JkZXI6M3B4IGRhc2hlZH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3ZlciAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6R3JheVRleHR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtb3V0bGluZSwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXB7dHJhbnNpdGlvbjpub25lfSIsIi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmctdG9wOi43NWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtcG9zaXRpb246MDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvcmRlci10b3Atc3R5bGU6ZG90dGVkO2JvcmRlci10b3Atd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5IDYwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYmtlLnRyYW5zaXRpb25NZXNzYWdlc119LGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYWc9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLGxuLG9kLGxuXX0pLG59KSgpLEt0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fcmVuZGVyZXI9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5vbkNoYW5nZT1yPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e319c2V0UHJvcGVydHkoZSxpKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZSxpKX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKEV1KSxNKFJlKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm59KSxufSkoKSxsZz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgS3Rle31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sZmVhdHVyZXM6W3R0XX0pLG59KSgpLE5vPW5ldyBwZSgiTmdWYWx1ZUFjY2Vzc29yIiksRGtlPXtwcm92aWRlOk5vLHVzZUV4aXN0aW5nOkpuKCgpPT5Ba2UpLG11bHRpOiEwfSxBa2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGxne3dyaXRlVmFsdWUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQuY2hlY2tlZCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbJHQoW0RrZV0pLHR0XX0pLG59KSgpLElrZT17cHJvdmlkZTpObyx1c2VFeGlzdGluZzpKbigoKT0+QnYpLG11bHRpOiEwfSxSa2U9bmV3IHBlKCJDb21wb3NpdGlvbkV2ZW50TW9kZSIpLEJ2PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBLdGV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSksdGhpcy5fY29tcG9zaXRpb25Nb2RlPXIsdGhpcy5fY29tcG9zaW5nPSExLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9kZT0hZnVuY3Rpb24oKXtsZXQgbj1ZbCgpP1lsKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3Qobi50b0xvd2VyQ2FzZSgpKX0oKSl9d3JpdGVWYWx1ZShlKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsZT8/IiIpfV9oYW5kbGVJbnB1dChlKXsoIXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZShlKX1fY29tcG9zaXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0hMH1fY29tcG9zaXRpb25FbmQoZSl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShFdSksTShSZSksTShSa2UsOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVJbnB1dChvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pKCJjb21wb3NpdGlvbnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLl9jb21wb3NpdGlvblN0YXJ0KCl9KSgiY29tcG9zaXRpb25lbmQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9jb21wb3NpdGlvbkVuZChvLnRhcmdldC52YWx1ZSl9KX0sZmVhdHVyZXM6WyR0KFtJa2VdKSx0dF19KSxufSkoKTtmdW5jdGlvbiBGaChuKXtyZXR1cm4gbnVsbD09bnx8KCJzdHJpbmciPT10eXBlb2Ygbnx8QXJyYXkuaXNBcnJheShuKSkmJjA9PT1uLmxlbmd0aH1mdW5jdGlvbiBadGUobil7cmV0dXJuIG51bGwhPW4mJiJudW1iZXIiPT10eXBlb2Ygbi5sZW5ndGh9dmFyIExvPW5ldyBwZSgiTmdWYWxpZGF0b3JzIiksTmg9bmV3IHBlKCJOZ0FzeW5jVmFsaWRhdG9ycyIpLGtrZT0vXig/PS57MSwyNTR9JCkoPz0uezEsNjR9QClbYS16QS1aMC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKD86XC5bYS16QS1aMC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLEZvPWNsYXNze3N0YXRpYyBtaW4odCl7cmV0dXJuIEp0ZSh0KX1zdGF0aWMgbWF4KHQpe3JldHVybiAkdGUodCl9c3RhdGljIHJlcXVpcmVkKHQpe3JldHVybiBlbmUodCl9c3RhdGljIHJlcXVpcmVkVHJ1ZSh0KXtyZXR1cm4gdG5lKHQpfXN0YXRpYyBlbWFpbCh0KXtyZXR1cm4gbm5lKHQpfXN0YXRpYyBtaW5MZW5ndGgodCl7cmV0dXJuIGluZSh0KX1zdGF0aWMgbWF4TGVuZ3RoKHQpe3JldHVybiBybmUodCl9c3RhdGljIHBhdHRlcm4odCl7cmV0dXJuIG9uZSh0KX1zdGF0aWMgbnVsbFZhbGlkYXRvcih0KXtyZXR1cm4gbnVsbH1zdGF0aWMgY29tcG9zZSh0KXtyZXR1cm4gZG5lKHQpfXN0YXRpYyBjb21wb3NlQXN5bmModCl7cmV0dXJuIHBuZSh0KX19O2Z1bmN0aW9uIEp0ZShuKXtyZXR1cm4gdD0+e2lmKEZoKHQudmFsdWUpfHxGaChuKSlyZXR1cm4gbnVsbDtsZXQgZT1wYXJzZUZsb2F0KHQudmFsdWUpO3JldHVybiFpc05hTihlKSYmZTxuP3ttaW46e21pbjpuLGFjdHVhbDp0LnZhbHVlfX06bnVsbH19ZnVuY3Rpb24gJHRlKG4pe3JldHVybiB0PT57aWYoRmgodC52YWx1ZSl8fEZoKG4pKXJldHVybiBudWxsO2xldCBlPXBhcnNlRmxvYXQodC52YWx1ZSk7cmV0dXJuIWlzTmFOKGUpJiZlPm4/e21heDp7bWF4Om4sYWN0dWFsOnQudmFsdWV9fTpudWxsfX1mdW5jdGlvbiBlbmUobil7cmV0dXJuIEZoKG4udmFsdWUpP3tyZXF1aXJlZDohMH06bnVsbH1mdW5jdGlvbiB0bmUobil7cmV0dXJuITA9PT1uLnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX1mdW5jdGlvbiBubmUobil7cmV0dXJuIEZoKG4udmFsdWUpfHxra2UudGVzdChuLnZhbHVlKT9udWxsOntlbWFpbDohMH19ZnVuY3Rpb24gaW5lKG4pe3JldHVybiB0PT5GaCh0LnZhbHVlKXx8IVp0ZSh0LnZhbHVlKT9udWxsOnQudmFsdWUubGVuZ3RoPG4/e21pbmxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6bixhY3R1YWxMZW5ndGg6dC52YWx1ZS5sZW5ndGh9fTpudWxsfWZ1bmN0aW9uIHJuZShuKXtyZXR1cm4gdD0+WnRlKHQudmFsdWUpJiZ0LnZhbHVlLmxlbmd0aD5uP3ttYXhsZW5ndGg6e3JlcXVpcmVkTGVuZ3RoOm4sYWN0dWFsTGVuZ3RoOnQudmFsdWUubGVuZ3RofX06bnVsbH1mdW5jdGlvbiBvbmUobil7aWYoIW4pcmV0dXJuIFAyO2xldCB0LGU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuPyhlPSIiLCJeIiE9PW4uY2hhckF0KDApJiYoZSs9Il4iKSxlKz1uLCIkIiE9PW4uY2hhckF0KG4ubGVuZ3RoLTEpJiYoZSs9IiQiKSx0PW5ldyBSZWdFeHAoZSkpOihlPW4udG9TdHJpbmcoKSx0PW4pLGk9PntpZihGaChpLnZhbHVlKSlyZXR1cm4gbnVsbDtsZXQgcj1pLnZhbHVlO3JldHVybiB0LnRlc3Qocik/bnVsbDp7cGF0dGVybjp7cmVxdWlyZWRQYXR0ZXJuOmUsYWN0dWFsVmFsdWU6cn19fX1mdW5jdGlvbiBQMihuKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBzbmUobil7cmV0dXJuIG51bGwhPW59ZnVuY3Rpb24gYW5lKG4pe3JldHVybiBuXyhuKT9FbyhuKTpufWZ1bmN0aW9uIGxuZShuKXtsZXQgdD17fTtyZXR1cm4gbi5mb3JFYWNoKGU9Pnt0PW51bGwhPWU/ey4uLnQsLi4uZX06dH0pLDA9PT1PYmplY3Qua2V5cyh0KS5sZW5ndGg/bnVsbDp0fWZ1bmN0aW9uIGNuZShuLHQpe3JldHVybiB0Lm1hcChlPT5lKG4pKX1mdW5jdGlvbiB1bmUobil7cmV0dXJuIG4ubWFwKHQ9PmZ1bmN0aW9uKG4pe3JldHVybiFuLnZhbGlkYXRlfSh0KT90OmU9PnQudmFsaWRhdGUoZSkpfWZ1bmN0aW9uIGRuZShuKXtpZighbilyZXR1cm4gbnVsbDtsZXQgdD1uLmZpbHRlcihzbmUpO3JldHVybiAwPT10Lmxlbmd0aD9udWxsOmZ1bmN0aW9uKGUpe3JldHVybiBsbmUoY25lKGUsdCkpfX1mdW5jdGlvbiBVSChuKXtyZXR1cm4gbnVsbCE9bj9kbmUodW5lKG4pKTpudWxsfWZ1bmN0aW9uIHBuZShuKXtpZighbilyZXR1cm4gbnVsbDtsZXQgdD1uLmZpbHRlcihzbmUpO3JldHVybiAwPT10Lmxlbmd0aD9udWxsOmZ1bmN0aW9uKGUpe3JldHVybiBscihjbmUoZSx0KS5tYXAoYW5lKSkucGlwZShMKGxuZSkpfX1mdW5jdGlvbiB6SChuKXtyZXR1cm4gbnVsbCE9bj9wbmUodW5lKG4pKTpudWxsfWZ1bmN0aW9uIFV0ZShuLHQpe3JldHVybiBudWxsPT09bj9bdF06QXJyYXkuaXNBcnJheShuKT9bLi4ubix0XTpbbix0XX1mdW5jdGlvbiBobmUobil7cmV0dXJuIG4uX3Jhd1ZhbGlkYXRvcnN9ZnVuY3Rpb24gZm5lKG4pe3JldHVybiBuLl9yYXdBc3luY1ZhbGlkYXRvcnN9ZnVuY3Rpb24gQkgobil7cmV0dXJuIG4/QXJyYXkuaXNBcnJheShuKT9uOltuXTpbXX1mdW5jdGlvbiBSMihuLHQpe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uaW5jbHVkZXModCk6bj09PXR9ZnVuY3Rpb24genRlKG4sdCl7bGV0IGU9QkgodCk7cmV0dXJuIEJIKG4pLmZvckVhY2gocj0+e1IyKGUscil8fGUucHVzaChyKX0pLGV9ZnVuY3Rpb24ganRlKG4sdCl7cmV0dXJuIEJIKHQpLmZpbHRlcihlPT4hUjIobixlKSl9dmFyIE8yPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1bXSx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9W10sdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlOm51bGx9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsaWQ6bnVsbH1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmludmFsaWQ6bnVsbH1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnBlbmRpbmc6bnVsbH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXNhYmxlZDpudWxsfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZW5hYmxlZDpudWxsfWdldCBlcnJvcnMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH1nZXQgcHJpc3RpbmUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wcmlzdGluZTpudWxsfWdldCBkaXJ0eSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpcnR5Om51bGx9Z2V0IHRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC50b3VjaGVkOm51bGx9Z2V0IHN0YXR1cygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1czpudWxsfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC51bnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXM6bnVsbH1nZXQgdmFsdWVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH1fc2V0VmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdWYWxpZGF0b3JzPXR8fFtdLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49VUgodGhpcy5fcmF3VmFsaWRhdG9ycyl9X3NldEFzeW5jVmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9dHx8W10sdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPXpIKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufHxudWxsfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm58fG51bGx9X3JlZ2lzdGVyT25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5wdXNoKHQpfV9pbnZva2VPbkRlc3Ryb3lDYWxsYmFja3MoKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1yZXNldCh0KXt0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldCh0KX1oYXNFcnJvcih0LGUpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IodCxlKX1nZXRFcnJvcih0LGUpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKHQsZSk6bnVsbH19LEZzPWNsYXNzIGV4dGVuZHMgTzJ7Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gbnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfX0sTnM9Y2xhc3MgZXh0ZW5kcyBPMntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcGFyZW50PW51bGwsdGhpcy5uYW1lPW51bGwsdGhpcy52YWx1ZUFjY2Vzc29yPW51bGx9fSxWSD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9jZD10fWdldCBpc1RvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy50b3VjaGVkfWdldCBpc1VudG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnVudG91Y2hlZH1nZXQgaXNQcmlzdGluZSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnByaXN0aW5lfWdldCBpc0RpcnR5KCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uZGlydHl9Z2V0IGlzVmFsaWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy52YWxpZH1nZXQgaXNJbnZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uaW52YWxpZH1nZXQgaXNQZW5kaW5nKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucGVuZGluZ31nZXQgaXNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5zdWJtaXR0ZWR9fSxWMj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVkh7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oTnMsMikpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm5nTW9kZWwiLCIiXSxbIiIsImZvcm1Db250cm9sIiwiIl1dLGhvc3RWYXJzOjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmZXQoIm5nLXVudG91Y2hlZCIsaS5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGkuaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGkuaXNQcmlzdGluZSkoIm5nLWRpcnR5IixpLmlzRGlydHkpKCJuZy12YWxpZCIsaS5pc1ZhbGlkKSgibmctaW52YWxpZCIsaS5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixpLmlzUGVuZGluZyl9LGZlYXR1cmVzOlt0dF19KSxufSkoKSxkdz0iVkFMSUQiLEkyPSJJTlZBTElEIixMdj0iUEVORElORyIscHc9IkRJU0FCTEVEIjtmdW5jdGlvbiBnbmUobil7cmV0dXJuKEgyKG4pP24udmFsaWRhdG9yczpuKXx8bnVsbH1mdW5jdGlvbiBHdGUobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/VUgobik6bnx8bnVsbH1mdW5jdGlvbiBfbmUobix0KXtyZXR1cm4oSDIodCk/dC5hc3luY1ZhbGlkYXRvcnM6bil8fG51bGx9ZnVuY3Rpb24gV3RlKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP3pIKG4pOm58fG51bGx9ZnVuY3Rpb24gSDIobil7cmV0dXJuIG51bGwhPW4mJiFBcnJheS5pc0FycmF5KG4pJiYib2JqZWN0Ij09dHlwZW9mIG59dmFyIGsyPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9KCk9Pnt9LHRoaXMuX3BhcmVudD1udWxsLHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fcmF3VmFsaWRhdG9ycz10LHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1lLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49R3RlKHRoaXMuX3Jhd1ZhbGlkYXRvcnMpLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1XdGUodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm59c2V0IHZhbGlkYXRvcih0KXt0aGlzLl9yYXdWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49dH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufXNldCBhc3luY1ZhbGlkYXRvcih0KXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPXR9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09ZHd9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1JMn1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLnN0YXR1cz09THZ9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09cHd9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXMhPT1wd31nZXQgZGlydHkoKXtyZXR1cm4hdGhpcy5wcmlzdGluZX1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIXRoaXMudG91Y2hlZH1nZXQgdXBkYXRlT24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlT24/dGhpcy5fdXBkYXRlT246dGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQudXBkYXRlT246ImNoYW5nZSJ9c2V0VmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdWYWxpZGF0b3JzPXQsdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1HdGUodCl9c2V0QXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10LHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1XdGUodCl9YWRkVmFsaWRhdG9ycyh0KXt0aGlzLnNldFZhbGlkYXRvcnMoenRlKHQsdGhpcy5fcmF3VmFsaWRhdG9ycykpfWFkZEFzeW5jVmFsaWRhdG9ycyh0KXt0aGlzLnNldEFzeW5jVmFsaWRhdG9ycyh6dGUodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyhqdGUodCx0aGlzLl9yYXdWYWxpZGF0b3JzKSl9cmVtb3ZlQXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuc2V0QXN5bmNWYWxpZGF0b3JzKGp0ZSh0LHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycykpfWhhc1ZhbGlkYXRvcih0KXtyZXR1cm4gUjIodGhpcy5fcmF3VmFsaWRhdG9ycyx0KX1oYXNBc3luY1ZhbGlkYXRvcih0KXtyZXR1cm4gUjIodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzLHQpfWNsZWFyVmFsaWRhdG9ycygpe3RoaXMudmFsaWRhdG9yPW51bGx9Y2xlYXJBc3luY1ZhbGlkYXRvcnMoKXt0aGlzLmFzeW5jVmFsaWRhdG9yPW51bGx9bWFya0FzVG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9ITAsdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc1RvdWNoZWQodCl9bWFya0FsbEFzVG91Y2hlZCgpe3RoaXMubWFya0FzVG91Y2hlZCh7b25seVNlbGY6ITB9KSx0aGlzLl9mb3JFYWNoQ2hpbGQodD0+dC5tYXJrQWxsQXNUb3VjaGVkKCkpfW1hcmtBc1VudG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGU9PntlLm1hcmtBc1VudG91Y2hlZCh7b25seVNlbGY6ITB9KX0pLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCh0KX1tYXJrQXNEaXJ0eSh0PXt9KXt0aGlzLnByaXN0aW5lPSExLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNEaXJ0eSh0KX1tYXJrQXNQcmlzdGluZSh0PXt9KXt0aGlzLnByaXN0aW5lPSEwLHRoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoZT0+e2UubWFya0FzUHJpc3RpbmUoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKHQpfW1hcmtBc1BlbmRpbmcodD17fSl7dGhpcy5zdGF0dXM9THYsITEhPT10LmVtaXRFdmVudCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNQZW5kaW5nKHQpfWRpc2FibGUodD17fSl7bGV0IGU9dGhpcy5fcGFyZW50TWFya2VkRGlydHkodC5vbmx5U2VsZik7dGhpcy5zdGF0dXM9cHcsdGhpcy5lcnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoaT0+e2kuZGlzYWJsZSh7Li4udCxvbmx5U2VsZjohMH0pfSksdGhpcy5fdXBkYXRlVmFsdWUoKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4udCxza2lwUHJpc3RpbmVDaGVjazplfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGk9PmkoITApKX1lbmFibGUodD17fSl7bGV0IGU9dGhpcy5fcGFyZW50TWFya2VkRGlydHkodC5vbmx5U2VsZik7dGhpcy5zdGF0dXM9ZHcsdGhpcy5fZm9yRWFjaENoaWxkKGk9PntpLmVuYWJsZSh7Li4udCxvbmx5U2VsZjohMH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6dC5lbWl0RXZlbnR9KSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoey4uLnQsc2tpcFByaXN0aW5lQ2hlY2s6ZX0pLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChpPT5pKCExKSl9X3VwZGF0ZUFuY2VzdG9ycyh0KXt0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiYodGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkodCksdC5za2lwUHJpc3RpbmVDaGVja3x8dGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSgpLHRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCgpKX1zZXRQYXJlbnQodCl7dGhpcy5fcGFyZW50PXR9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZX11cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQ9e30pe3RoaXMuX3NldEluaXRpYWxTdGF0dXMoKSx0aGlzLl91cGRhdGVWYWx1ZSgpLHRoaXMuZW5hYmxlZCYmKHRoaXMuX2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uKCksdGhpcy5lcnJvcnM9dGhpcy5fcnVuVmFsaWRhdG9yKCksdGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksKHRoaXMuc3RhdHVzPT09ZHd8fHRoaXMuc3RhdHVzPT09THYpJiZ0aGlzLl9ydW5Bc3luY1ZhbGlkYXRvcih0LmVtaXRFdmVudCkpLCExIT09dC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkodCl9X3VwZGF0ZVRyZWVWYWxpZGl0eSh0PXtlbWl0RXZlbnQ6ITB9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoZT0+ZS5fdXBkYXRlVHJlZVZhbGlkaXR5KHQpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pfV9zZXRJbml0aWFsU3RhdHVzKCl7dGhpcy5zdGF0dXM9dGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP3B3OmR3fV9ydW5WYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy52YWxpZGF0b3I/dGhpcy52YWxpZGF0b3IodGhpcyk6bnVsbH1fcnVuQXN5bmNWYWxpZGF0b3IodCl7aWYodGhpcy5hc3luY1ZhbGlkYXRvcil7dGhpcy5zdGF0dXM9THYsdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSEwO2xldCBlPWFuZSh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUoaT0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhpLHtlbWl0RXZlbnQ6dH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKHQsZT17fSl7dGhpcy5lcnJvcnM9dCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWUuZW1pdEV2ZW50KX1nZXQodCl7bGV0IGU9dDtyZXR1cm4gbnVsbD09ZXx8KEFycmF5LmlzQXJyYXkoZSl8fChlPWUuc3BsaXQoIi4iKSksMD09PWUubGVuZ3RoKT9udWxsOmUucmVkdWNlKChpLHIpPT5pJiZpLl9maW5kKHIpLHRoaXMpfWdldEVycm9yKHQsZSl7bGV0IGk9ZT90aGlzLmdldChlKTp0aGlzO3JldHVybiBpJiZpLmVycm9ycz9pLmVycm9yc1t0XTpudWxsfWhhc0Vycm9yKHQsZSl7cmV0dXJuISF0aGlzLmdldEVycm9yKHQsZSl9Z2V0IHJvb3QoKXtsZXQgdD10aGlzO2Zvcig7dC5fcGFyZW50Oyl0PXQuX3BhcmVudDtyZXR1cm4gdH1fdXBkYXRlQ29udHJvbHNFcnJvcnModCl7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksdCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyh0KX1faW5pdE9ic2VydmFibGVzKCl7dGhpcy52YWx1ZUNoYW5nZXM9bmV3IEcsdGhpcy5zdGF0dXNDaGFuZ2VzPW5ldyBHfV9jYWxjdWxhdGVTdGF0dXMoKXtyZXR1cm4gdGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP3B3OnRoaXMuZXJyb3JzP0kyOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKEx2KT9Mdjp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoSTIpP0kyOmR3fV9hbnlDb250cm9sc0hhdmVTdGF0dXModCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGU9PmUuc3RhdHVzPT09dCl9X2FueUNvbnRyb2xzRGlydHkoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHModD0+dC5kaXJ0eSl9X2FueUNvbnRyb2xzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyh0PT50LnRvdWNoZWQpfV91cGRhdGVQcmlzdGluZSh0PXt9KXt0aGlzLnByaXN0aW5lPSF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1fdXBkYXRlVG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfV9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0KXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9dH1fc2V0VXBkYXRlU3RyYXRlZ3kodCl7SDIodCkmJm51bGwhPXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkodCl7cmV0dXJuIXQmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX1fZmluZCh0KXtyZXR1cm4gbnVsbH19LEYyPWNsYXNzIGV4dGVuZHMgazJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGduZShlKSxfbmUoaSxlKSksdGhpcy5jb250cm9scz10LHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGUpLHRoaXMuX3NldFVwQ29udHJvbHMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KX1yZWdpc3RlckNvbnRyb2wodCxlKXtyZXR1cm4gdGhpcy5jb250cm9sc1t0XT90aGlzLmNvbnRyb2xzW3RdOih0aGlzLmNvbnRyb2xzW3RdPWUsZS5zZXRQYXJlbnQodGhpcyksZS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSxlKX1hZGRDb250cm9sKHQsZSxpPXt9KXt0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmkuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9cmVtb3ZlQ29udHJvbCh0LGU9e30pe3RoaXMuY29udHJvbHNbdF0mJnRoaXMuY29udHJvbHNbdF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbdF0sdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1zZXRDb250cm9sKHQsZSxpPXt9KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLGUmJnRoaXMucmVnaXN0ZXJDb250cm9sKHQsZSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6aS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1jb250YWlucyh0KXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpcy5jb250cm9sc1t0XS5lbmFibGVkfXNldFZhbHVlKHQsZT17fSl7KGZ1bmN0aW9uKG4sdCxlKXtuLl9mb3JFYWNoQ2hpbGQoKGkscik9PntpZih2b2lkIDA9PT1lW3JdKXRocm93IG5ldyBBdCgxMDAyLCIiKX0pfSkodGhpcywwLHQpLE9iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+eyhmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5jb250cm9scztpZighKHQ/T2JqZWN0LmtleXMoaSk6aSkubGVuZ3RoKXRocm93IG5ldyBBdCgxZTMsIiIpO2lmKCFpW2VdKXRocm93IG5ldyBBdCgxMDAxLCIiKX0pKHRoaXMsITAsaSksdGhpcy5jb250cm9sc1tpXS5zZXRWYWx1ZSh0W2ldLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX1wYXRjaFZhbHVlKHQsZT17fSl7bnVsbCE9dCYmKE9iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+e2xldCByPXRoaXMuY29udHJvbHNbaV07ciYmci5wYXRjaFZhbHVlKHRbaV0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpKX1yZXNldCh0PXt9LGU9e30pe3RoaXMuX2ZvckVhY2hDaGlsZCgoaSxyKT0+e2kucmVzZXQodFtyXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLl91cGRhdGVQcmlzdGluZShlKSx0aGlzLl91cGRhdGVUb3VjaGVkKGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwodCxlLGkpPT4odFtpXT1lLmdldFJhd1ZhbHVlKCksdCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IHQ9dGhpcy5fcmVkdWNlQ2hpbGRyZW4oITEsKGUsaSk9PiEhaS5fc3luY1BlbmRpbmdDb250cm9scygpfHxlKTtyZXR1cm4gdCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLHR9X2ZvckVhY2hDaGlsZCh0KXtPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5mb3JFYWNoKGU9PntsZXQgaT10aGlzLmNvbnRyb2xzW2VdO2kmJnQoaSxlKX0pfV9zZXRVcENvbnRyb2xzKCl7dGhpcy5fZm9yRWFjaENoaWxkKHQ9Pnt0LnNldFBhcmVudCh0aGlzKSx0Ll9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpfSl9X3VwZGF0ZVZhbHVlKCl7dGhpcy52YWx1ZT10aGlzLl9yZWR1Y2VWYWx1ZSgpfV9hbnlDb250cm9scyh0KXtmb3IobGV0W2UsaV1vZiBPYmplY3QuZW50cmllcyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRhaW5zKGUpJiZ0KGkpKXJldHVybiEwO3JldHVybiExfV9yZWR1Y2VWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwoZSxpLHIpPT4oKGkuZW5hYmxlZHx8dGhpcy5kaXNhYmxlZCkmJihlW3JdPWkudmFsdWUpLGUpKX1fcmVkdWNlQ2hpbGRyZW4odCxlKXtsZXQgaT10O3JldHVybiB0aGlzLl9mb3JFYWNoQ2hpbGQoKHIsbyk9PntpPWUoaSxyLG8pfSksaX1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe2ZvcihsZXQgdCBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRyb2xzW3RdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9maW5kKHQpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KHQpP3RoaXMuY29udHJvbHNbdF06bnVsbH19O2Z1bmN0aW9uIFUyKG4sdCl7cmV0dXJuWy4uLnQucGF0aCxuXX1mdW5jdGlvbiBmdyhuLHQpe2pIKG4sdCksdC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUobi52YWx1ZSksbi5kaXNhYmxlZCYmdC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGU/LighMCksZnVuY3Rpb24obix0KXt0LnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZShlPT57bi5fcGVuZGluZ1ZhbHVlPWUsbi5fcGVuZGluZ0NoYW5nZT0hMCxuLl9wZW5kaW5nRGlydHk9ITAsImNoYW5nZSI9PT1uLnVwZGF0ZU9uJiZ2bmUobix0KX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9KGkscik9Pnt0LnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShpKSxyJiZ0LnZpZXdUb01vZGVsVXBkYXRlKGkpfTtuLnJlZ2lzdGVyT25DaGFuZ2UoZSksdC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25DaGFuZ2UoZSl9KX0obix0KSxmdW5jdGlvbihuLHQpe3QudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKT0+e24uX3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PW4udXBkYXRlT24mJm4uX3BlbmRpbmdDaGFuZ2UmJnZuZShuLHQpLCJzdWJtaXQiIT09bi51cGRhdGVPbiYmbi5tYXJrQXNUb3VjaGVkKCl9KX0obix0KSxmdW5jdGlvbihuLHQpe2lmKHQudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKXtsZXQgZT1pPT57dC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUoaSl9O24ucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGUpLHQuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57bi5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoZSl9KX19KG4sdCl9ZnVuY3Rpb24gTjIobix0LGU9ITApe2xldCBpPSgpPT57fTt0LnZhbHVlQWNjZXNzb3ImJih0LnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZShpKSx0LnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoaSkpLEIyKG4sdCksbiYmKHQuX2ludm9rZU9uRGVzdHJveUNhbGxiYWNrcygpLG4uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSkpfWZ1bmN0aW9uIEwyKG4sdCl7bi5mb3JFYWNoKGU9PntlLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UmJmUucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSh0KX0pfWZ1bmN0aW9uIGpIKG4sdCl7bGV0IGU9aG5lKG4pO251bGwhPT10LnZhbGlkYXRvcj9uLnNldFZhbGlkYXRvcnMoVXRlKGUsdC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmbi5zZXRWYWxpZGF0b3JzKFtlXSk7bGV0IGk9Zm5lKG4pO251bGwhPT10LmFzeW5jVmFsaWRhdG9yP24uc2V0QXN5bmNWYWxpZGF0b3JzKFV0ZShpLHQuYXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgaSYmbi5zZXRBc3luY1ZhbGlkYXRvcnMoW2ldKTtsZXQgcj0oKT0+bi51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7TDIodC5fcmF3VmFsaWRhdG9ycyxyKSxMMih0Ll9yYXdBc3luY1ZhbGlkYXRvcnMscil9ZnVuY3Rpb24gQjIobix0KXtsZXQgZT0hMTtpZihudWxsIT09bil7aWYobnVsbCE9PXQudmFsaWRhdG9yKXtsZXQgcj1obmUobik7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCl7bGV0IG89ci5maWx0ZXIocz0+cyE9PXQudmFsaWRhdG9yKTtvLmxlbmd0aCE9PXIubGVuZ3RoJiYoZT0hMCxuLnNldFZhbGlkYXRvcnMobykpfX1pZihudWxsIT09dC5hc3luY1ZhbGlkYXRvcil7bGV0IHI9Zm5lKG4pO2lmKEFycmF5LmlzQXJyYXkocikmJnIubGVuZ3RoPjApe2xldCBvPXIuZmlsdGVyKHM9PnMhPT10LmFzeW5jVmFsaWRhdG9yKTtvLmxlbmd0aCE9PXIubGVuZ3RoJiYoZT0hMCxuLnNldEFzeW5jVmFsaWRhdG9ycyhvKSl9fX1sZXQgaT0oKT0+e307cmV0dXJuIEwyKHQuX3Jhd1ZhbGlkYXRvcnMsaSksTDIodC5fcmF3QXN5bmNWYWxpZGF0b3JzLGkpLGV9ZnVuY3Rpb24gdm5lKG4sdCl7bi5fcGVuZGluZ0RpcnR5JiZuLm1hcmtBc0RpcnR5KCksbi5zZXRWYWx1ZShuLl9wZW5kaW5nVmFsdWUse2VtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLHQudmlld1RvTW9kZWxVcGRhdGUobi5fcGVuZGluZ1ZhbHVlKSxuLl9wZW5kaW5nQ2hhbmdlPSExfWZ1bmN0aW9uIHluZShuLHQpe2pIKG4sdCl9ZnVuY3Rpb24gR0gobix0KXtpZighbi5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtsZXQgZT1uLm1vZGVsO3JldHVybiEhZS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXModCxlLmN1cnJlbnRWYWx1ZSl9ZnVuY3Rpb24gYm5lKG4sdCl7bi5fc3luY1BlbmRpbmdDb250cm9scygpLHQuZm9yRWFjaChlPT57bGV0IGk9ZS5jb250cm9sOyJzdWJtaXQiPT09aS51cGRhdGVPbiYmaS5fcGVuZGluZ0NoYW5nZSYmKGUudmlld1RvTW9kZWxVcGRhdGUoaS5fcGVuZGluZ1ZhbHVlKSxpLl9wZW5kaW5nQ2hhbmdlPSExKX0pfWZ1bmN0aW9uIFdIKG4sdCl7aWYoIXQpcmV0dXJuIG51bGw7bGV0IGUsaSxyO3JldHVybiBBcnJheS5pc0FycmF5KHQpLHQuZm9yRWFjaChvPT57by5jb25zdHJ1Y3Rvcj09PUJ2P2U9bzpmdW5jdGlvbihuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4uY29uc3RydWN0b3IpPT09bGd9KG8pP2k9bzpyPW99KSxyfHxpfHxlfHxudWxsfXZhciBRa2U9e3Byb3ZpZGU6RnMsdXNlRXhpc3Rpbmc6Sm4oKCk9PkxoKX0saHc9UHJvbWlzZS5yZXNvbHZlKCksTGg9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEZze2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLnN1Ym1pdHRlZD0hMSx0aGlzLl9kaXJlY3RpdmVzPW5ldyBTZXQsdGhpcy5uZ1N1Ym1pdD1uZXcgRyx0aGlzLmZvcm09bmV3IEYyKHt9LFVIKGUpLHpIKGkpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXN9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc31hZGRDb250cm9sKGUpe2h3LnRoZW4oKCk9PntsZXQgaT10aGlzLl9maW5kQ29udGFpbmVyKGUucGF0aCk7ZS5jb250cm9sPWkucmVnaXN0ZXJDb250cm9sKGUubmFtZSxlLmNvbnRyb2wpLGZ3KGUuY29udHJvbCxlKSxlLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5fZGlyZWN0aXZlcy5hZGQoZSl9KX1nZXRDb250cm9sKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9cmVtb3ZlQ29udHJvbChlKXtody50aGVuKCgpPT57bGV0IGk9dGhpcy5fZmluZENvbnRhaW5lcihlLnBhdGgpO2kmJmkucmVtb3ZlQ29udHJvbChlLm5hbWUpLHRoaXMuX2RpcmVjdGl2ZXMuZGVsZXRlKGUpfSl9YWRkRm9ybUdyb3VwKGUpe2h3LnRoZW4oKCk9PntsZXQgaT10aGlzLl9maW5kQ29udGFpbmVyKGUucGF0aCkscj1uZXcgRjIoe30pO3luZShyLGUpLGkucmVnaXN0ZXJDb250cm9sKGUubmFtZSxyKSxyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVtb3ZlRm9ybUdyb3VwKGUpe2h3LnRoZW4oKCk9PntsZXQgaT10aGlzLl9maW5kQ29udGFpbmVyKGUucGF0aCk7aSYmaS5yZW1vdmVDb250cm9sKGUubmFtZSl9KX1nZXRGb3JtR3JvdXAoZSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoZS5wYXRoKX11cGRhdGVNb2RlbChlLGkpe2h3LnRoZW4oKCk9Pnt0aGlzLmZvcm0uZ2V0KGUucGF0aCkuc2V0VmFsdWUoaSl9KX1zZXRWYWx1ZShlKXt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoZSl9b25TdWJtaXQoZSl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLGJuZSh0aGlzLmZvcm0sdGhpcy5fZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGUpLCJkaWFsb2ciPT09ZT8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKGUpe3RoaXMuZm9ybS5yZXNldChlKSx0aGlzLnN1Ym1pdHRlZD0hMX1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuZm9ybS5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1fZmluZENvbnRhaW5lcihlKXtyZXR1cm4gZS5wb3AoKSxlLmxlbmd0aD90aGlzLmZvcm0uZ2V0KGUpOnRoaXMuZm9ybX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShMbywxMCksTShOaCwxMCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdyb3VwIiwiIl0sWyJuZy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJzdWJtaXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU3VibWl0KG8pfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzZXQoKX0pfSxpbnB1dHM6e29wdGlvbnM6WyJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOlskdChbUWtlXSksdHRdfSksbn0pKCk7ZnVuY3Rpb24gcXRlKG4sdCl7bGV0IGU9bi5pbmRleE9mKHQpO2U+LTEmJm4uc3BsaWNlKGUsMSl9ZnVuY3Rpb24gWXRlKG4pe3JldHVybiJvYmplY3QiPT10eXBlb2YgbiYmbnVsbCE9PW4mJjI9PT1PYmplY3Qua2V5cyhuKS5sZW5ndGgmJiJ2YWx1ZSJpbiBuJiYiZGlzYWJsZWQiaW4gbn12YXIgQmg9Y2xhc3MgZXh0ZW5kcyBrMntjb25zdHJ1Y3Rvcih0PW51bGwsZSxpKXtzdXBlcihnbmUoZSksX25lKGksZSkpLHRoaXMuZGVmYXVsdFZhbHVlPW51bGwsdGhpcy5fb25DaGFuZ2U9W10sdGhpcy5fcGVuZGluZ0NoYW5nZT0hMSx0aGlzLl9hcHBseUZvcm1TdGF0ZSh0KSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KSxIMihlKSYmKGUubm9uTnVsbGFibGV8fGUuaW5pdGlhbFZhbHVlSXNEZWZhdWx0KSYmKHRoaXMuZGVmYXVsdFZhbHVlPVl0ZSh0KT90LnZhbHVlOnQpfXNldFZhbHVlKHQsZT17fSl7dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dCx0aGlzLl9vbkNoYW5nZS5sZW5ndGgmJiExIT09ZS5lbWl0TW9kZWxUb1ZpZXdDaGFuZ2UmJnRoaXMuX29uQ2hhbmdlLmZvckVhY2goaT0+aSh0aGlzLnZhbHVlLCExIT09ZS5lbWl0Vmlld1RvTW9kZWxDaGFuZ2UpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9cGF0Y2hWYWx1ZSh0LGU9e30pe3RoaXMuc2V0VmFsdWUodCxlKX1yZXNldCh0PXRoaXMuZGVmYXVsdFZhbHVlLGU9e30pe3RoaXMuX2FwcGx5Rm9ybVN0YXRlKHQpLHRoaXMubWFya0FzUHJpc3RpbmUoZSksdGhpcy5tYXJrQXNVbnRvdWNoZWQoZSksdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlLGUpLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITF9X3VwZGF0ZVZhbHVlKCl7fV9hbnlDb250cm9scyh0KXtyZXR1cm4hMX1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfXJlZ2lzdGVyT25DaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2UucHVzaCh0KX1fdW5yZWdpc3Rlck9uQ2hhbmdlKHQpe3F0ZSh0aGlzLl9vbkNoYW5nZSx0KX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UodCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKHQpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0KXtxdGUodGhpcy5fb25EaXNhYmxlZENoYW5nZSx0KX1fZm9yRWFjaENoaWxkKHQpe31fc3luY1BlbmRpbmdDb250cm9scygpe3JldHVybiEoInN1Ym1pdCIhPT10aGlzLnVwZGF0ZU9ufHwodGhpcy5fcGVuZGluZ0RpcnR5JiZ0aGlzLm1hcmtBc0RpcnR5KCksdGhpcy5fcGVuZGluZ1RvdWNoZWQmJnRoaXMubWFya0FzVG91Y2hlZCgpLCF0aGlzLl9wZW5kaW5nQ2hhbmdlKXx8KHRoaXMuc2V0VmFsdWUodGhpcy5fcGVuZGluZ1ZhbHVlLHtvbmx5U2VsZjohMCxlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSwwKSl9X2FwcGx5Rm9ybVN0YXRlKHQpe1l0ZSh0KT8odGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dC52YWx1ZSx0LmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSk6dGhpcy5lbmFibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10fX0seG5lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBGc3tuZ09uSW5pdCgpe3RoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuZm9ybURpcmVjdGl2ZS5hZGRGb3JtR3JvdXAodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVGb3JtR3JvdXAodGhpcyl9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmdldEZvcm1Hcm91cCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiBVMihudWxsPT10aGlzLm5hbWU/dGhpcy5uYW1lOnRoaXMubmFtZS50b1N0cmluZygpLHRoaXMuX3BhcmVudCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9X2NoZWNrUGFyZW50VHlwZSgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1waShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLGZlYXR1cmVzOlt0dF19KSxufSkoKSxaa2U9e3Byb3ZpZGU6RnMsdXNlRXhpc3Rpbmc6Sm4oKCk9PkprZSl9LEprZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgeG5le2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpfV9jaGVja1BhcmVudFR5cGUoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oRnMsNSksTShMbywxMCksTShOaCwxMCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ01vZGVsR3JvdXAiLCIiXV0saW5wdXRzOntuYW1lOlsibmdNb2RlbEdyb3VwIiwibmFtZSJdfSxleHBvcnRBczpbIm5nTW9kZWxHcm91cCJdLGZlYXR1cmVzOlskdChbWmtlXSksdHRdfSksbn0pKCksJGtlPXtwcm92aWRlOk5zLHVzZUV4aXN0aW5nOkpuKCgpPT5lRmUpfSxYdGU9UHJvbWlzZS5yZXNvbHZlKCksZUZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBOc3tjb25zdHJ1Y3RvcihlLGkscixvLHMpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cyx0aGlzLmNvbnRyb2w9bmV3IEJoLHRoaXMuX3JlZ2lzdGVyZWQ9ITEsdGhpcy51cGRhdGU9bmV3IEcsdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMociksdGhpcy52YWx1ZUFjY2Vzc29yPVdIKDAsbyl9bmdPbkNoYW5nZXMoZSl7aWYodGhpcy5fY2hlY2tGb3JFcnJvcnMoKSwhdGhpcy5fcmVnaXN0ZXJlZHx8Im5hbWUiaW4gZSl7aWYodGhpcy5fcmVnaXN0ZXJlZCYmKHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuZm9ybURpcmVjdGl2ZSkpe2xldCBpPWUubmFtZS5wcmV2aW91c1ZhbHVlO3RoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHtuYW1lOmkscGF0aDp0aGlzLl9nZXRQYXRoKGkpfSl9dGhpcy5fc2V0VXBDb250cm9sKCl9ImlzRGlzYWJsZWQiaW4gZSYmdGhpcy5fdXBkYXRlRGlzYWJsZWQoZSksR0goZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLl91cGRhdGVWYWx1ZSh0aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5fZ2V0UGF0aCh0aGlzLm5hbWUpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfXZpZXdUb01vZGVsVXBkYXRlKGUpe3RoaXMudmlld01vZGVsPWUsdGhpcy51cGRhdGUuZW1pdChlKX1fc2V0VXBDb250cm9sKCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKSx0aGlzLl9pc1N0YW5kYWxvbmUoKT90aGlzLl9zZXRVcFN0YW5kYWxvbmUoKTp0aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzLl9yZWdpc3RlcmVkPSEwfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5jb250cm9sLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9pc1N0YW5kYWxvbmUoKXtyZXR1cm4hdGhpcy5fcGFyZW50fHwhKCF0aGlzLm9wdGlvbnN8fCF0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSl9X3NldFVwU3RhbmRhbG9uZSgpe2Z3KHRoaXMuY29udHJvbCx0aGlzKSx0aGlzLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X2NoZWNrRm9yRXJyb3JzKCl7dGhpcy5faXNTdGFuZGFsb25lKCl8fHRoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuX2NoZWNrTmFtZSgpfV9jaGVja1BhcmVudFR5cGUoKXt9X2NoZWNrTmFtZSgpe3RoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLm5hbWUmJih0aGlzLm5hbWU9dGhpcy5vcHRpb25zLm5hbWUpLHRoaXMuX2lzU3RhbmRhbG9uZSgpfV91cGRhdGVWYWx1ZShlKXtYdGUudGhlbigoKT0+e3RoaXMuY29udHJvbC5zZXRWYWx1ZShlLHtlbWl0Vmlld1RvTW9kZWxDaGFuZ2U6ITF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fdXBkYXRlRGlzYWJsZWQoZSl7bGV0IGk9ZS5pc0Rpc2FibGVkLmN1cnJlbnRWYWx1ZSxyPTAhPT1pJiZOVChpKTtYdGUudGhlbigoKT0+e3ImJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohciYmdGhpcy5jb250cm9sLmRpc2FibGVkJiZ0aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoZSl7cmV0dXJuIHRoaXMuX3BhcmVudD9VMihlLHRoaXMuX3BhcmVudCk6W2VdfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKEZzLDkpLE0oTG8sMTApLE0oTmgsMTApLE0oTm8sMTApLE0obm4sOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ01vZGVsIiwiIiwzLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsImZvcm1Db250cm9sIiwiIl1dLGlucHV0czp7bmFtZToibmFtZSIsaXNEaXNhYmxlZDpbImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl0sb3B0aW9uczpbIm5nTW9kZWxPcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOnt1cGRhdGU6Im5nTW9kZWxDaGFuZ2UifSxleHBvcnRBczpbIm5nTW9kZWwiXSxmZWF0dXJlczpbJHQoWyRrZV0pLHR0LEZ0XX0pLG59KSgpLHRGZT17cHJvdmlkZTpObyx1c2VFeGlzdGluZzpKbigoKT0+cUgpLG11bHRpOiEwfSxxSD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbGd7d3JpdGVWYWx1ZShlKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsZT8/IiIpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1pPT57ZSgiIj09aT9udWxsOnBhcnNlRmxvYXQoaSkpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1waShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2hhbmdlKG8udGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGZlYXR1cmVzOlskdChbdEZlXSksdHRdfSksbn0pKCksbkZlPXtwcm92aWRlOk5vLHVzZUV4aXN0aW5nOkpuKCgpPT5yRmUpLG11bHRpOiEwfSxDbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLGlGZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fYWNjZXNzb3JzPVtdfWFkZChlLGkpe3RoaXMuX2FjY2Vzc29ycy5wdXNoKFtlLGldKX1yZW1vdmUoZSl7Zm9yKGxldCBpPXRoaXMuX2FjY2Vzc29ycy5sZW5ndGgtMTtpPj0wOy0taSlpZih0aGlzLl9hY2Nlc3NvcnNbaV1bMV09PT1lKXJldHVybiB2b2lkIHRoaXMuX2FjY2Vzc29ycy5zcGxpY2UoaSwxKX1zZWxlY3QoZSl7dGhpcy5fYWNjZXNzb3JzLmZvckVhY2goaT0+e3RoaXMuX2lzU2FtZUdyb3VwKGksZSkmJmlbMV0hPT1lJiZpWzFdLmZpcmVVbmNoZWNrKGUudmFsdWUpfSl9X2lzU2FtZUdyb3VwKGUsaSl7cmV0dXJuISFlWzBdLmNvbnRyb2wmJmVbMF0uX3BhcmVudD09PWkuX2NvbnRyb2wuX3BhcmVudCYmZVsxXS5uYW1lPT09aS5uYW1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjpDbmV9KSxufSkoKSxyRmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGxne2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSksdGhpcy5fcmVnaXN0cnk9cix0aGlzLl9pbmplY3Rvcj1vLHRoaXMub25DaGFuZ2U9KCk9Pnt9fW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rvci5nZXQoTnMpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoZSl7dGhpcy5fc3RhdGU9ZT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fZm49ZSx0aGlzLm9uQ2hhbmdlPSgpPT57ZSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fWZpcmVVbmNoZWNrKGUpe3RoaXMud3JpdGVWYWx1ZShlKX1fY2hlY2tOYW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKEV1KSxNKFJlKSxNKGlGZSksTShYbikpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2hhbmdlKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e25hbWU6Im5hbWUiLGZvcm1Db250cm9sTmFtZToiZm9ybUNvbnRyb2xOYW1lIix2YWx1ZToidmFsdWUifSxmZWF0dXJlczpbJHQoW25GZV0pLHR0XX0pLG59KSgpLG9GZT17cHJvdmlkZTpObyx1c2VFeGlzdGluZzpKbigoKT0+c0ZlKSxtdWx0aTohMH0sc0ZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBsZ3t3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixwYXJzZUZsb2F0KGUpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9aT0+e2UoIiI9PWk/bnVsbDpwYXJzZUZsb2F0KGkpKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQudmFsdWUpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbJHQoW29GZV0pLHR0XX0pLG59KSgpLFlIPW5ldyBwZSgiTmdNb2RlbFdpdGhGb3JtQ29udHJvbFdhcm5pbmciKSxhRmU9e3Byb3ZpZGU6TnMsdXNlRXhpc3Rpbmc6Sm4oKCk9Pm13KX0sbXc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE5ze2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKCksdGhpcy5fbmdNb2RlbFdhcm5pbmdDb25maWc9byx0aGlzLnVwZGF0ZT1uZXcgRyx0aGlzLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITEsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaSksdGhpcy52YWx1ZUFjY2Vzc29yPVdIKDAscil9c2V0IGlzRGlzYWJsZWQoZSl7fW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuX2lzQ29udHJvbENoYW5nZWQoZSkpe2xldCBpPWUuZm9ybS5wcmV2aW91c1ZhbHVlO2kmJk4yKGksdGhpcywhMSksZncodGhpcy5mb3JtLHRoaXMpLHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1HSChlLHRoaXMudmlld01vZGVsKSYmKHRoaXMuZm9ybS5zZXRWYWx1ZSh0aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybSYmTjIodGhpcy5mb3JtLHRoaXMsITEpfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfXZpZXdUb01vZGVsVXBkYXRlKGUpe3RoaXMudmlld01vZGVsPWUsdGhpcy51cGRhdGUuZW1pdChlKX1faXNDb250cm9sQ2hhbmdlZChlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpfX1yZXR1cm4gbi5fbmdNb2RlbFdhcm5pbmdTZW50T25jZT0hMSxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oTG8sMTApLE0oTmgsMTApLE0oTm8sMTApLE0oWUgsOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e2Zvcm06WyJmb3JtQ29udHJvbCIsImZvcm0iXSxpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WyJuZ01vZGVsIiwibW9kZWwiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbJHQoW2FGZV0pLHR0LEZ0XX0pLG59KSgpLGxGZT17cHJvdmlkZTpGcyx1c2VFeGlzdGluZzpKbigoKT0+VmgpfSxWaD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+dGhpcy5fdXBkYXRlRG9tVmFsdWUoKSx0aGlzLmRpcmVjdGl2ZXM9W10sdGhpcy5mb3JtPW51bGwsdGhpcy5uZ1N1Ym1pdD1uZXcgRyx0aGlzLl9zZXRWYWxpZGF0b3JzKGUpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhpKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9jaGVja0Zvcm1QcmVzZW50KCksZS5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpJiYodGhpcy5fdXBkYXRlVmFsaWRhdG9ycygpLHRoaXMuX3VwZGF0ZURvbVZhbHVlKCksdGhpcy5fdXBkYXRlUmVnaXN0cmF0aW9ucygpLHRoaXMuX29sZEZvcm09dGhpcy5mb3JtKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybSYmKEIyKHRoaXMuZm9ybSx0aGlzKSx0aGlzLmZvcm0uX29uQ29sbGVjdGlvbkNoYW5nZT09PXRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSYmdGhpcy5mb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWFkZENvbnRyb2woZSl7bGV0IGk9dGhpcy5mb3JtLmdldChlLnBhdGgpO3JldHVybiBmdyhpLGUpLGkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5kaXJlY3RpdmVzLnB1c2goZSksaX1nZXRDb250cm9sKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9cmVtb3ZlQ29udHJvbChlKXtOMihlLmNvbnRyb2x8fG51bGwsZSwhMSksZnVuY3Rpb24obix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX0odGhpcy5kaXJlY3RpdmVzLGUpfWFkZEZvcm1Hcm91cChlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUdyb3VwKGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1Hcm91cChlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfWFkZEZvcm1BcnJheShlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUFycmF5KGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1BcnJheShlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfXVwZGF0ZU1vZGVsKGUsaSl7dGhpcy5mb3JtLmdldChlLnBhdGgpLnNldFZhbHVlKGkpfW9uU3VibWl0KGUpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCxibmUodGhpcy5mb3JtLHRoaXMuZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGUpLCJkaWFsb2ciPT09ZT8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKGUpe3RoaXMuZm9ybS5yZXNldChlKSx0aGlzLnN1Ym1pdHRlZD0hMX1fdXBkYXRlRG9tVmFsdWUoKXt0aGlzLmRpcmVjdGl2ZXMuZm9yRWFjaChlPT57bGV0IGk9ZS5jb250cm9sLHI9dGhpcy5mb3JtLmdldChlLnBhdGgpO2khPT1yJiYoTjIoaXx8bnVsbCxlKSwobj0+biBpbnN0YW5jZW9mIEJoKShyKSYmKGZ3KHIsZSksZS5jb250cm9sPXIpKX0pLHRoaXMuZm9ybS5fdXBkYXRlVHJlZVZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fc2V0VXBGb3JtQ29udGFpbmVyKGUpe2xldCBpPXRoaXMuZm9ybS5nZXQoZS5wYXRoKTt5bmUoaSxlKSxpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9jbGVhblVwRm9ybUNvbnRhaW5lcihlKXtpZih0aGlzLmZvcm0pe2xldCBpPXRoaXMuZm9ybS5nZXQoZS5wYXRoKTtpJiZmdW5jdGlvbihuLHQpe3JldHVybiBCMihuLHQpfShpLGUpJiZpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfX1fdXBkYXRlUmVnaXN0cmF0aW9ucygpe3RoaXMuZm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSx0aGlzLl9vbGRGb3JtJiZ0aGlzLl9vbGRGb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pfV91cGRhdGVWYWxpZGF0b3JzKCl7akgodGhpcy5mb3JtLHRoaXMpLHRoaXMuX29sZEZvcm0mJkIyKHRoaXMuX29sZEZvcm0sdGhpcyl9X2NoZWNrRm9ybVByZXNlbnQoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oTG8sMTApLE0oTmgsMTApKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUdyb3VwIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgic3VibWl0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblN1Ym1pdChvKX0pKCJyZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlc2V0KCl9KX0saW5wdXRzOntmb3JtOlsiZm9ybUdyb3VwIiwiZm9ybSJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOlskdChbbEZlXSksdHQsRnRdfSksbn0pKCksY0ZlPXtwcm92aWRlOkZzLHVzZUV4aXN0aW5nOkpuKCgpPT5NbmUpfSxNbmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHhuZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoKSx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9zZXRWYWxpZGF0b3JzKGkpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhyKX1fY2hlY2tQYXJlbnRUeXBlKCl7U25lKHRoaXMuX3BhcmVudCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oRnMsMTMpLE0oTG8sMTApLE0oTmgsMTApKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUdyb3VwTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtR3JvdXBOYW1lIiwibmFtZSJdfSxmZWF0dXJlczpbJHQoW2NGZV0pLHR0XX0pLG59KSgpLHVGZT17cHJvdmlkZTpGcyx1c2VFeGlzdGluZzpKbigoKT0+d25lKX0sd25lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBGc3tjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoKSx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9zZXRWYWxpZGF0b3JzKGkpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhyKX1uZ09uSW5pdCgpe3RoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuZm9ybURpcmVjdGl2ZS5hZGRGb3JtQXJyYXkodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVGb3JtQXJyYXkodGhpcyl9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmdldEZvcm1BcnJheSh0aGlzKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH1nZXQgcGF0aCgpe3JldHVybiBVMihudWxsPT10aGlzLm5hbWU/dGhpcy5uYW1lOnRoaXMubmFtZS50b1N0cmluZygpLHRoaXMuX3BhcmVudCl9X2NoZWNrUGFyZW50VHlwZSgpe1NuZSh0aGlzLl9wYXJlbnQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKEZzLDEzKSxNKExvLDEwKSxNKE5oLDEwKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1BcnJheU5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUFycmF5TmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6WyR0KFt1RmVdKSx0dF19KSxufSkoKTtmdW5jdGlvbiBTbmUobil7cmV0dXJuIShuIGluc3RhbmNlb2YgTW5lfHxuIGluc3RhbmNlb2YgVmh8fG4gaW5zdGFuY2VvZiB3bmUpfXZhciBkRmU9e3Byb3ZpZGU6TnMsdXNlRXhpc3Rpbmc6Sm4oKCk9PnBGZSl9LHBGZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTnN7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnPXMsdGhpcy5fYWRkZWQ9ITEsdGhpcy51cGRhdGU9bmV3IEcsdGhpcy5fbmdNb2RlbFdhcm5pbmdTZW50PSExLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpLHRoaXMudmFsdWVBY2Nlc3Nvcj1XSCgwLG8pfXNldCBpc0Rpc2FibGVkKGUpe31uZ09uQ2hhbmdlcyhlKXt0aGlzLl9hZGRlZHx8dGhpcy5fc2V0VXBDb250cm9sKCksR0goZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsLHRoaXMuZm9ybURpcmVjdGl2ZS51cGRhdGVNb2RlbCh0aGlzLHRoaXMubW9kZWwpKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9dmlld1RvTW9kZWxVcGRhdGUoZSl7dGhpcy52aWV3TW9kZWw9ZSx0aGlzLnVwZGF0ZS5lbWl0KGUpfWdldCBwYXRoKCl7cmV0dXJuIFUyKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH1fY2hlY2tQYXJlbnRUeXBlKCl7fV9zZXRVcENvbnRyb2woKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmNvbnRyb2w9dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fYWRkZWQ9ITB9fXJldHVybiBuLl9uZ01vZGVsV2FybmluZ1NlbnRPbmNlPSExLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShGcywxMyksTShMbywxMCksTShOaCwxMCksTShObywxMCksTShZSCw4KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtQ29udHJvbE5hbWUiLCJuYW1lIl0saXNEaXNhYmxlZDpbImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGZlYXR1cmVzOlskdChbZEZlXSksdHQsRnRdfSksbn0pKCksaEZlPXtwcm92aWRlOk5vLHVzZUV4aXN0aW5nOkpuKCgpPT5UbmUpLG11bHRpOiEwfTtmdW5jdGlvbiBFbmUobix0KXtyZXR1cm4gbnVsbD09bj9gJHt0fWA6KHQmJiJvYmplY3QiPT10eXBlb2YgdCYmKHQ9Ik9iamVjdCIpLGAke259OiAke3R9YC5zbGljZSgwLDUwKSl9dmFyIFRuZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbGd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMuX2NvbXBhcmVXaXRoPU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZX13cml0ZVZhbHVlKGUpe3RoaXMudmFsdWU9ZTtsZXQgcj1FbmUodGhpcy5fZ2V0T3B0aW9uSWQoZSksZSk7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLHIpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1pPT57dGhpcy52YWx1ZT10aGlzLl9nZXRPcHRpb25WYWx1ZShpKSxlKHRoaXMudmFsdWUpfX1fcmVnaXN0ZXJPcHRpb24oKXtyZXR1cm4odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCl9X2dldE9wdGlvbklkKGUpe2ZvcihsZXQgaSBvZiBBcnJheS5mcm9tKHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpKWlmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQoaSksZSkpcmV0dXJuIGk7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGUpe2xldCBpPWZ1bmN0aW9uKG4pe3JldHVybiBuLnNwbGl0KCI6IilbMF19KGUpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGkpP3RoaXMuX29wdGlvbk1hcC5nZXQoaSk6ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1waShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJmb3JtQ29udHJvbCIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsIm5nTW9kZWwiLCIiLDMsIm11bHRpcGxlIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOlskdChbaEZlXSksdHRdfSksbn0pKCksRG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9yZW5kZXJlcj1pLHRoaXMuX3NlbGVjdD1yLHRoaXMuX3NlbGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbigpKX1zZXQgbmdWYWx1ZShlKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5zZXQodGhpcy5pZCxlKSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoRW5lKHRoaXMuaWQsZSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShlKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoZSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oRXUpLE0oVG5lLDkpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVlIn19KSxufSkoKSxtRmU9e3Byb3ZpZGU6Tm8sdXNlRXhpc3Rpbmc6Sm4oKCk9PkFuZSksbXVsdGk6ITB9O2Z1bmN0aW9uIFF0ZShuLHQpe3JldHVybiBudWxsPT1uP2Ake3R9YDooInN0cmluZyI9PXR5cGVvZiB0JiYodD1gJyR7dH0nYCksdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYodD0iT2JqZWN0IiksYCR7bn06ICR7dH1gLnNsaWNlKDAsNTApKX12YXIgQW5lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBsZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVyPTAsdGhpcy5fY29tcGFyZVdpdGg9T2JqZWN0LmlzfXNldCBjb21wYXJlV2l0aChlKXt0aGlzLl9jb21wYXJlV2l0aD1lfXdyaXRlVmFsdWUoZSl7bGV0IGk7aWYodGhpcy52YWx1ZT1lLEFycmF5LmlzQXJyYXkoZSkpe2xldCByPWUubWFwKG89PnRoaXMuX2dldE9wdGlvbklkKG8pKTtpPShvLHMpPT57by5fc2V0U2VsZWN0ZWQoci5pbmRleE9mKHMudG9TdHJpbmcoKSk+LTEpfX1lbHNlIGk9KHIsbyk9PntyLl9zZXRTZWxlY3RlZCghMSl9O3RoaXMuX29wdGlvbk1hcC5mb3JFYWNoKGkpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1pPT57bGV0IHI9W10sbz1pLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1vKXtsZXQgcz1vO2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKXtsZXQgYz10aGlzLl9nZXRPcHRpb25WYWx1ZShzW2FdLnZhbHVlKTtyLnB1c2goYyl9fWVsc2V7bGV0IHM9aS5vcHRpb25zO2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKXtsZXQgbD1zW2FdO2lmKGwuc2VsZWN0ZWQpe2xldCBjPXRoaXMuX2dldE9wdGlvblZhbHVlKGwudmFsdWUpO3IucHVzaChjKX19fXRoaXMudmFsdWU9cixlKHIpfX1fcmVnaXN0ZXJPcHRpb24oZSl7bGV0IGk9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGksZSksaX1fZ2V0T3B0aW9uSWQoZSl7Zm9yKGxldCBpIG9mIEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChpKS5fdmFsdWUsZSkpcmV0dXJuIGk7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGUpe2xldCBpPWZ1bmN0aW9uKG4pe3JldHVybiBuLnNwbGl0KCI6IilbMF19KGUpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGkpP3RoaXMuX29wdGlvbk1hcC5nZXQoaSkuX3ZhbHVlOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1sic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxmZWF0dXJlczpbJHQoW21GZV0pLHR0XX0pLG59KSgpLEluZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9aSx0aGlzLl9zZWxlY3Q9cix0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24odGhpcykpfXNldCBuZ1ZhbHVlKGUpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3ZhbHVlPWUsdGhpcy5fc2V0RWxlbWVudFZhbHVlKFF0ZSh0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoZSl7dGhpcy5fc2VsZWN0Pyh0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShRdGUodGhpcy5pZCxlKSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSk6dGhpcy5fc2V0RWxlbWVudFZhbHVlKGUpfV9zZXRFbGVtZW50VmFsdWUoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZSl9X3NldFNlbGVjdGVkKGUpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwic2VsZWN0ZWQiLGUpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKEV1KSxNKEFuZSw5KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSksbn0pKCk7ZnVuY3Rpb24gUG5lKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbj9uOnBhcnNlSW50KG4sMTApfWZ1bmN0aW9uIFJuZShuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG4/bjpwYXJzZUZsb2F0KG4pfXZhciBjZz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fdmFsaWRhdG9yPVAyfW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuaW5wdXROYW1lIGluIGUpe2xldCBpPXRoaXMubm9ybWFsaXplSW5wdXQoZVt0aGlzLmlucHV0TmFtZV0uY3VycmVudFZhbHVlKTt0aGlzLl9lbmFibGVkPXRoaXMuZW5hYmxlZChpKSx0aGlzLl92YWxpZGF0b3I9dGhpcy5fZW5hYmxlZD90aGlzLmNyZWF0ZVZhbGlkYXRvcihpKTpQMix0aGlzLl9vbkNoYW5nZSYmdGhpcy5fb25DaGFuZ2UoKX19dmFsaWRhdGUoZSl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRvcihlKX1yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGUpe3RoaXMuX29uQ2hhbmdlPWV9ZW5hYmxlZChlKXtyZXR1cm4gbnVsbCE9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sZmVhdHVyZXM6W0Z0XX0pLG59KSgpLF9GZT17cHJvdmlkZTpMbyx1c2VFeGlzdGluZzpKbigoKT0+dkZlKSxtdWx0aTohMH0sdkZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1heCIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5SbmUoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+JHRlKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWF4IiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtYXgiLGkuX2VuYWJsZWQ/aS5tYXg6bnVsbCl9LGlucHV0czp7bWF4OiJtYXgifSxmZWF0dXJlczpbJHQoW19GZV0pLHR0XX0pLG59KSgpLHlGZT17cHJvdmlkZTpMbyx1c2VFeGlzdGluZzpKbigoKT0+YkZlKSxtdWx0aTohMH0sYkZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1pbiIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5SbmUoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+SnRlKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1pbiIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWluIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1pbiIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtaW4iLGkuX2VuYWJsZWQ/aS5taW46bnVsbCl9LGlucHV0czp7bWluOiJtaW4ifSxmZWF0dXJlczpbJHQoW3lGZV0pLHR0XX0pLG59KSgpLHhGZT17cHJvdmlkZTpMbyx1c2VFeGlzdGluZzpKbigoKT0+T25lKSxtdWx0aTohMH0sQ0ZlPXtwcm92aWRlOkxvLHVzZUV4aXN0aW5nOkpuKCgpPT5ndyksbXVsdGk6ITB9LE9uZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgY2d7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJyZXF1aXJlZCIsdGhpcy5ub3JtYWxpemVJbnB1dD1OVCx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5lbmV9ZW5hYmxlZChlKXtyZXR1cm4gZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1waShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbIiIsInJlcXVpcmVkIiwiIiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgicmVxdWlyZWQiLGkuX2VuYWJsZWQ/IiI6bnVsbCl9LGlucHV0czp7cmVxdWlyZWQ6InJlcXVpcmVkIn0sZmVhdHVyZXM6WyR0KFt4RmVdKSx0dF19KSxufSkoKSxndz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgT25le2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT50bmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmemUoInJlcXVpcmVkIixpLl9lbmFibGVkPyIiOm51bGwpfSxmZWF0dXJlczpbJHQoW0NGZV0pLHR0XX0pLG59KSgpLE1GZT17cHJvdmlkZTpMbyx1c2VFeGlzdGluZzpKbigoKT0+d0ZlKSxtdWx0aTohMH0sd0ZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9ImVtYWlsIix0aGlzLm5vcm1hbGl6ZUlucHV0PU5ULHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9Pm5uZX1lbmFibGVkKGUpe3JldHVybiBlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImVtYWlsIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJlbWFpbCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyIiLCJlbWFpbCIsIiIsIm5nTW9kZWwiLCIiXV0saW5wdXRzOntlbWFpbDoiZW1haWwifSxmZWF0dXJlczpbJHQoW01GZV0pLHR0XX0pLG59KSgpLFNGZT17cHJvdmlkZTpMbyx1c2VFeGlzdGluZzpKbigoKT0+RUZlKSxtdWx0aTohMH0sRUZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1pbmxlbmd0aCIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5QbmUoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+aW5lKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1pbmxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWlubGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1pbmxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtaW5sZW5ndGgiLGkuX2VuYWJsZWQ/aS5taW5sZW5ndGg6bnVsbCl9LGlucHV0czp7bWlubGVuZ3RoOiJtaW5sZW5ndGgifSxmZWF0dXJlczpbJHQoW1NGZV0pLHR0XX0pLG59KSgpLFRGZT17cHJvdmlkZTpMbyx1c2VFeGlzdGluZzpKbigoKT0+REZlKSxtdWx0aTohMH0sREZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1heGxlbmd0aCIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5QbmUoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+cm5lKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1heGxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWF4bGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1heGxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtYXhsZW5ndGgiLGkuX2VuYWJsZWQ/aS5tYXhsZW5ndGg6bnVsbCl9LGlucHV0czp7bWF4bGVuZ3RoOiJtYXhsZW5ndGgifSxmZWF0dXJlczpbJHQoW1RGZV0pLHR0XX0pLG59KSgpLEFGZT17cHJvdmlkZTpMbyx1c2VFeGlzdGluZzpKbigoKT0+SUZlKSxtdWx0aTohMH0sSUZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InBhdHRlcm4iLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+ZSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5vbmUoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwicGF0dGVybiIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwicGF0dGVybiIsIiIsImZvcm1Db250cm9sIiwiIl0sWyIiLCJwYXR0ZXJuIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmemUoInBhdHRlcm4iLGkuX2VuYWJsZWQ/aS5wYXR0ZXJuOm51bGwpfSxpbnB1dHM6e3BhdHRlcm46InBhdHRlcm4ifSxmZWF0dXJlczpbJHQoW0FGZV0pLHR0XX0pLG59KSgpLGtuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbQ25lXX0pLG59KSgpLGpyPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltrbmVdfSksbn0pKCksejI9KCgpPT57Y2xhc3MgbntzdGF0aWMgd2l0aENvbmZpZyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOllILHVzZVZhbHVlOmUud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbH1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W2tuZV19KSxufSkoKSxQRmU9KG5ldyBJYygiMTQuMi4xMSIpLFsidHJpZ2dlciJdKSxSRmU9WyJwYW5lbCJdO2Z1bmN0aW9uIE9GZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsOCksQSgxKSx2KCkpLDImbil7bGV0IGU9UygpO0MoMSkseXQoZS5wbGFjZWhvbGRlcil9fWZ1bmN0aW9uIGtGZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsMTIpLEEoMSksdigpKSwyJm4pe2xldCBlPVMoMik7QygxKSx5dChlLnRyaWdnZXJWYWx1ZSl9fWZ1bmN0aW9uIEZGZShuLHQpezEmbiYmVm4oMCwwLFsiKm5nU3dpdGNoQ2FzZSIsInRydWUiXSl9ZnVuY3Rpb24gTkZlKG4sdCl7MSZuJiYoXygwLCJzcGFuIiw5KSxFKDEsa0ZlLDIsMSwic3BhbiIsMTApLEUoMixGRmUsMSwwLCJuZy1jb250ZW50IiwxMSksdigpKSwyJm4mJih5KCJuZ1N3aXRjaCIsISFTKCkuY3VzdG9tVHJpZ2dlciksQygyKSx5KCJuZ1N3aXRjaENhc2UiLCEwKSl9ZnVuY3Rpb24gTEZlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwxMykoMSwiZGl2IiwxNCwxNSksUCgiQHRyYW5zZm9ybVBhbmVsLmRvbmUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbS5uZXh0KHIudG9TdGF0ZSkpfSkoImtleWRvd24iLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkuX2hhbmRsZUtleWRvd24ocikpfSksVm4oMywxKSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTt5KCJAdHJhbnNmb3JtUGFuZWxXcmFwIix2b2lkIDApLEMoMSksUXgoIm1hdC1zZWxlY3QtcGFuZWwgIixlLl9nZXRQYW5lbFRoZW1lKCksIiIpLFB0KCJ0cmFuc2Zvcm0tb3JpZ2luIixlLl90cmFuc2Zvcm1PcmlnaW4pKCJmb250LXNpemUiLGUuX3RyaWdnZXJGb250U2l6ZSwicHgiKSx5KCJuZ0NsYXNzIixlLnBhbmVsQ2xhc3MpKCJAdHJhbnNmb3JtUGFuZWwiLGUubXVsdGlwbGU/InNob3dpbmctbXVsdGlwbGUiOiJzaG93aW5nIiksemUoImlkIixlLmlkKyItcGFuZWwiKSgiYXJpYS1tdWx0aXNlbGVjdGFibGUiLGUubXVsdGlwbGUpKCJhcmlhLWxhYmVsIixlLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsZS5fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieSgpKX19dmFyIEJGZT1bW1sibWF0LXNlbGVjdC10cmlnZ2VyIl1dLCIqIl0sVkZlPVsibWF0LXNlbGVjdC10cmlnZ2VyIiwiKiJdLEZuZT17dHJhbnNmb3JtUGFuZWxXcmFwOktyKCJ0cmFuc2Zvcm1QYW5lbFdyYXAiLFtMaSgiKiA9PiB2b2lkIixJbSgiQHRyYW5zZm9ybVBhbmVsIixbQW0oKV0se29wdGlvbmFsOiEwfSkpXSksdHJhbnNmb3JtUGFuZWw6S3IoInRyYW5zZm9ybVBhbmVsIixba2koInZvaWQiLGduKHt0cmFuc2Zvcm06InNjYWxlWSgwLjgpIixtaW5XaWR0aDoiMTAwJSIsb3BhY2l0eTowfSkpLGtpKCJzaG93aW5nIixnbih7b3BhY2l0eToxLG1pbldpZHRoOiJjYWxjKDEwMCUgKyAzMnB4KSIsdHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpLGtpKCJzaG93aW5nLW11bHRpcGxlIixnbih7b3BhY2l0eToxLG1pbldpZHRoOiJjYWxjKDEwMCUgKyA2NHB4KSIsdHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpLExpKCJ2b2lkID0+ICoiLGppKCIxMjBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIpKSxMaSgiKiA9PiB2b2lkIixqaSgiMTAwbXMgMjVtcyBsaW5lYXIiLGduKHtvcGFjaXR5OjB9KSkpXSl9LE5uZT0wLEJuZT1uZXcgcGUoIm1hdC1zZWxlY3Qtc2Nyb2xsLXN0cmF0ZWd5IiksakZlPW5ldyBwZSgiTUFUX1NFTEVDVF9DT05GSUciKSxHRmU9e3Byb3ZpZGU6Qm5lLGRlcHM6W3RyXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sV0ZlPXFvKG9jKHNvKER2KGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkscil7dGhpcy5fZWxlbWVudFJlZj1uLHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj10LHRoaXMuX3BhcmVudEZvcm09ZSx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9aSx0aGlzLm5nQ29udHJvbD1yLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBrZX19KSkpKSxxRmU9bmV3IHBlKCJNYXRTZWxlY3RUcmlnZ2VyIiksWUZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBXRmV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtKXtzdXBlcihzLG8sbCxjLGQpLHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2Rpcj1hLHRoaXMuX3BhcmVudEZvcm1GaWVsZD11LHRoaXMuX2xpdmVBbm5vdW5jZXI9Zix0aGlzLl9kZWZhdWx0T3B0aW9ucz1tLHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9jb21wYXJlV2l0aD0oeCxnKT0+eD09PWcsdGhpcy5fdWlkPSJtYXQtc2VsZWN0LSIrTm5lKyssdGhpcy5fdHJpZ2dlckFyaWFMYWJlbGxlZEJ5PW51bGwsdGhpcy5fZGVzdHJveT1uZXcga2UsdGhpcy5fb25DaGFuZ2U9KCk9Pnt9LHRoaXMuX29uVG91Y2hlZD0oKT0+e30sdGhpcy5fdmFsdWVJZD0ibWF0LXNlbGVjdC12YWx1ZS0iK05uZSsrLHRoaXMuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbT1uZXcga2UsdGhpcy5fb3ZlcmxheVBhbmVsQ2xhc3M9dGhpcy5fZGVmYXVsdE9wdGlvbnM/Lm92ZXJsYXlQYW5lbENsYXNzfHwiIix0aGlzLl9mb2N1c2VkPSExLHRoaXMuY29udHJvbFR5cGU9Im1hdC1zZWxlY3QiLHRoaXMuX211bHRpcGxlPSExLHRoaXMuX2Rpc2FibGVPcHRpb25DZW50ZXJpbmc9dGhpcy5fZGVmYXVsdE9wdGlvbnM/LmRpc2FibGVPcHRpb25DZW50ZXJpbmc/PyExLHRoaXMuYXJpYUxhYmVsPSIiLHRoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcz1RYSgoKT0+e2xldCB4PXRoaXMub3B0aW9ucztyZXR1cm4geD94LmNoYW5nZXMucGlwZSh6bih4KSx1aSgoKT0+SnQoLi4ueC5tYXAoZz0+Zy5vblNlbGVjdGlvbkNoYW5nZSkpKSk6dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoUXQoMSksdWkoKCk9PnRoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcykpfSksdGhpcy5vcGVuZWRDaGFuZ2U9bmV3IEcsdGhpcy5fb3BlbmVkU3RyZWFtPXRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoWWUoeD0+eCksTCgoKT0+e30pKSx0aGlzLl9jbG9zZWRTdHJlYW09dGhpcy5vcGVuZWRDaGFuZ2UucGlwZShZZSh4PT4heCksTCgoKT0+e30pKSx0aGlzLnNlbGVjdGlvbkNoYW5nZT1uZXcgRyx0aGlzLnZhbHVlQ2hhbmdlPW5ldyBHLHRoaXMubmdDb250cm9sJiYodGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3Nvcj10aGlzKSxudWxsIT1tPy50eXBlYWhlYWREZWJvdW5jZUludGVydmFsJiYodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbD1tLnR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5RmFjdG9yeT1oLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PXRoaXMuX3Njcm9sbFN0cmF0ZWd5RmFjdG9yeSgpLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQocCl8fDAsdGhpcy5pZD10aGlzLmlkfWdldCBmb2N1c2VkKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWR8fHRoaXMuX3BhbmVsT3Blbn1nZXQgcGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXJ9c2V0IHBsYWNlaG9sZGVyKGUpe3RoaXMuX3BsYWNlaG9sZGVyPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfWdldCByZXF1aXJlZCgpe3JldHVybiB0aGlzLl9yZXF1aXJlZD8/dGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihGby5yZXF1aXJlZCk/PyExfXNldCByZXF1aXJlZChlKXt0aGlzLl9yZXF1aXJlZD1SdChlKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfXNldCBtdWx0aXBsZShlKXt0aGlzLl9tdWx0aXBsZT1SdChlKX1nZXQgZGlzYWJsZU9wdGlvbkNlbnRlcmluZygpe3JldHVybiB0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nfXNldCBkaXNhYmxlT3B0aW9uQ2VudGVyaW5nKGUpe3RoaXMuX2Rpc2FibGVPcHRpb25DZW50ZXJpbmc9UnQoZSl9Z2V0IGNvbXBhcmVXaXRoKCl7cmV0dXJuIHRoaXMuX2NvbXBhcmVXaXRofXNldCBjb21wYXJlV2l0aChlKXt0aGlzLl9jb21wYXJlV2l0aD1lLHRoaXMuX3NlbGVjdGlvbk1vZGVsJiZ0aGlzLl9pbml0aWFsaXplU2VsZWN0aW9uKCl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfXNldCB2YWx1ZShlKXt0aGlzLl9hc3NpZ25WYWx1ZShlKSYmdGhpcy5fb25DaGFuZ2UoZSl9Z2V0IHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwoKXtyZXR1cm4gdGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbH1zZXQgdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbChlKXt0aGlzLl90eXBlYWhlYWREZWJvdW5jZUludGVydmFsPUJpKGUpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoZSl7dGhpcy5faWQ9ZXx8dGhpcy5fdWlkLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBBaCh0aGlzLm11bHRpcGxlKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCksdGhpcy5fcGFuZWxEb25lQW5pbWF0aW5nU3RyZWFtLnBpcGUoeWkoKSxzdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpPT50aGlzLl9wYW5lbERvbmVBbmltYXRpbmcodGhpcy5wYW5lbE9wZW4pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9pbml0S2V5TWFuYWdlcigpLHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZShzdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGU9PntlLmFkZGVkLmZvckVhY2goaT0+aS5zZWxlY3QoKSksZS5yZW1vdmVkLmZvckVhY2goaT0+aS5kZXNlbGVjdCgpKX0pLHRoaXMub3B0aW9ucy5jaGFuZ2VzLnBpcGUoem4obnVsbCksc3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Jlc2V0T3B0aW9ucygpLHRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKX0pfW5nRG9DaGVjaygpe2xldCBlPXRoaXMuX2dldFRyaWdnZXJBcmlhTGFiZWxsZWRieSgpLGk9dGhpcy5uZ0NvbnRyb2w7aWYoZSE9PXRoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeSl7bGV0IHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeT1lLGU/ci5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsZSk6ci5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpfWkmJih0aGlzLl9wcmV2aW91c0NvbnRyb2whPT1pLmNvbnRyb2wmJih2b2lkIDAhPT10aGlzLl9wcmV2aW91c0NvbnRyb2wmJm51bGwhPT1pLmRpc2FibGVkJiZpLmRpc2FibGVkIT09dGhpcy5kaXNhYmxlZCYmKHRoaXMuZGlzYWJsZWQ9aS5kaXNhYmxlZCksdGhpcy5fcHJldmlvdXNDb250cm9sPWkuY29udHJvbCksdGhpcy51cGRhdGVFcnJvclN0YXRlKCkpfW5nT25DaGFuZ2VzKGUpeyhlLmRpc2FibGVkfHxlLnVzZXJBcmlhRGVzY3JpYmVkQnkpJiZ0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCksZS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsJiZ0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLndpdGhUeXBlQWhlYWQodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95Lm5leHQoKSx0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCksdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX10b2dnbGUoKXt0aGlzLnBhbmVsT3Blbj90aGlzLmNsb3NlKCk6dGhpcy5vcGVuKCl9b3Blbigpe3RoaXMuX2Nhbk9wZW4oKSYmKHRoaXMuX3BhbmVsT3Blbj0hMCx0aGlzLl9rZXlNYW5hZ2VyLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24obnVsbCksdGhpcy5faGlnaGxpZ2h0Q29ycmVjdE9wdGlvbigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1jbG9zZSgpe3RoaXMuX3BhbmVsT3BlbiYmKHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9rZXlNYW5hZ2VyLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5faXNSdGwoKT8icnRsIjoibHRyIiksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fb25Ub3VjaGVkKCkpfXdyaXRlVmFsdWUoZSl7dGhpcy5fYXNzaWduVmFsdWUoZSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcGFuZWxPcGVuKCl7cmV0dXJuIHRoaXMuX3BhbmVsT3Blbn1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5tdWx0aXBsZT90aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWR8fFtdOnRoaXMuX3NlbGVjdGlvbk1vZGVsPy5zZWxlY3RlZFswXX1nZXQgdHJpZ2dlclZhbHVlKCl7aWYodGhpcy5lbXB0eSlyZXR1cm4iIjtpZih0aGlzLl9tdWx0aXBsZSl7bGV0IGU9dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQubWFwKGk9Pmkudmlld1ZhbHVlKTtyZXR1cm4gdGhpcy5faXNSdGwoKSYmZS5yZXZlcnNlKCksZS5qb2luKCIsICIpfXJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXS52aWV3VmFsdWV9X2lzUnRsKCl7cmV0dXJuISF0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlfV9oYW5kbGVLZXlkb3duKGUpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLnBhbmVsT3Blbj90aGlzLl9oYW5kbGVPcGVuS2V5ZG93bihlKTp0aGlzLl9oYW5kbGVDbG9zZWRLZXlkb3duKGUpKX1faGFuZGxlQ2xvc2VkS2V5ZG93bihlKXtsZXQgaT1lLmtleUNvZGUscj00MD09PWl8fDM4PT09aXx8Mzc9PT1pfHwzOT09PWksbz0xMz09PWl8fDMyPT09aSxzPXRoaXMuX2tleU1hbmFnZXI7aWYoIXMuaXNUeXBpbmcoKSYmbyYmIWtyKGUpfHwodGhpcy5tdWx0aXBsZXx8ZS5hbHRLZXkpJiZyKWUucHJldmVudERlZmF1bHQoKSx0aGlzLm9wZW4oKTtlbHNlIGlmKCF0aGlzLm11bHRpcGxlKXtsZXQgYT10aGlzLnNlbGVjdGVkO3Mub25LZXlkb3duKGUpO2xldCBsPXRoaXMuc2VsZWN0ZWQ7bCYmYSE9PWwmJnRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UobC52aWV3VmFsdWUsMWU0KX19X2hhbmRsZU9wZW5LZXlkb3duKGUpe2xldCBpPXRoaXMuX2tleU1hbmFnZXIscj1lLmtleUNvZGUsbz00MD09PXJ8fDM4PT09cixzPWkuaXNUeXBpbmcoKTtpZihvJiZlLmFsdEtleSllLnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZSgpO2Vsc2UgaWYoc3x8MTMhPT1yJiYzMiE9PXJ8fCFpLmFjdGl2ZUl0ZW18fGtyKGUpKWlmKCFzJiZ0aGlzLl9tdWx0aXBsZSYmNjU9PT1yJiZlLmN0cmxLZXkpe2UucHJldmVudERlZmF1bHQoKTtsZXQgYT10aGlzLm9wdGlvbnMuc29tZShsPT4hbC5kaXNhYmxlZCYmIWwuc2VsZWN0ZWQpO3RoaXMub3B0aW9ucy5mb3JFYWNoKGw9PntsLmRpc2FibGVkfHwoYT9sLnNlbGVjdCgpOmwuZGVzZWxlY3QoKSl9KX1lbHNle2xldCBhPWkuYWN0aXZlSXRlbUluZGV4O2kub25LZXlkb3duKGUpLHRoaXMuX211bHRpcGxlJiZvJiZlLnNoaWZ0S2V5JiZpLmFjdGl2ZUl0ZW0mJmkuYWN0aXZlSXRlbUluZGV4IT09YSYmaS5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpfWVsc2UgZS5wcmV2ZW50RGVmYXVsdCgpLGkuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX1fb25Gb2N1cygpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9mb2N1c2VkPSEwLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X29uQmx1cigpe3RoaXMuX2ZvY3VzZWQ9ITEsIXRoaXMuZGlzYWJsZWQmJiF0aGlzLnBhbmVsT3BlbiYmKHRoaXMuX29uVG91Y2hlZCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X29uQXR0YWNoZWQoKXt0aGlzLl9vdmVybGF5RGlyLnBvc2l0aW9uQ2hhbmdlLnBpcGUoUXQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLl9wb3NpdGlvbmluZ1NldHRsZWQoKX0pfV9nZXRQYW5lbFRoZW1lKCl7cmV0dXJuIHRoaXMuX3BhcmVudEZvcm1GaWVsZD9gbWF0LSR7dGhpcy5fcGFyZW50Rm9ybUZpZWxkLmNvbG9yfWA6IiJ9Z2V0IGVtcHR5KCl7cmV0dXJuIXRoaXMuX3NlbGVjdGlvbk1vZGVsfHx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCl9X2luaXRpYWxpemVTZWxlY3Rpb24oKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5uZ0NvbnRyb2wmJih0aGlzLl92YWx1ZT10aGlzLm5nQ29udHJvbC52YWx1ZSksdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0aGlzLl92YWx1ZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSl9X3NldFNlbGVjdGlvbkJ5VmFsdWUoZSl7aWYodGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQuZm9yRWFjaChpPT5pLnNldEluYWN0aXZlU3R5bGVzKCkpLHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCksdGhpcy5tdWx0aXBsZSYmZSlBcnJheS5pc0FycmF5KGUpLGUuZm9yRWFjaChpPT50aGlzLl9zZWxlY3RPcHRpb25CeVZhbHVlKGkpKSx0aGlzLl9zb3J0VmFsdWVzKCk7ZWxzZXtsZXQgaT10aGlzLl9zZWxlY3RPcHRpb25CeVZhbHVlKGUpO2k/dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGkpOnRoaXMucGFuZWxPcGVufHx0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oLTEpfXRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9zZWxlY3RPcHRpb25CeVZhbHVlKGUpe2xldCBpPXRoaXMub3B0aW9ucy5maW5kKHI9PntpZih0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKHIpKXJldHVybiExO3RyeXtyZXR1cm4gbnVsbCE9ci52YWx1ZSYmdGhpcy5fY29tcGFyZVdpdGgoci52YWx1ZSxlKX1jYXRjaHtyZXR1cm4hMX19KTtyZXR1cm4gaSYmdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGkpLGl9X2Fzc2lnblZhbHVlKGUpe3JldHVybiEhKGUhPT10aGlzLl92YWx1ZXx8dGhpcy5fbXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoZSkpJiYodGhpcy5vcHRpb25zJiZ0aGlzLl9zZXRTZWxlY3Rpb25CeVZhbHVlKGUpLHRoaXMuX3ZhbHVlPWUsITApfV9pbml0S2V5TWFuYWdlcigpe3RoaXMuX2tleU1hbmFnZXI9bmV3IHd2KHRoaXMub3B0aW9ucykud2l0aFR5cGVBaGVhZCh0aGlzLl90eXBlYWhlYWREZWJvdW5jZUludGVydmFsKS53aXRoVmVydGljYWxPcmllbnRhdGlvbigpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5faXNSdGwoKT8icnRsIjoibHRyIikud2l0aEhvbWVBbmRFbmQoKS53aXRoQWxsb3dlZE1vZGlmaWVyS2V5cyhbInNoaWZ0S2V5Il0pLHRoaXMuX2tleU1hbmFnZXIudGFiT3V0LnBpcGUoc3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMucGFuZWxPcGVuJiYoIXRoaXMubXVsdGlwbGUmJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLHRoaXMuZm9jdXMoKSx0aGlzLmNsb3NlKCkpfSksdGhpcy5fa2V5TWFuYWdlci5jaGFuZ2UucGlwZShzdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fcGFuZWxPcGVuJiZ0aGlzLnBhbmVsP3RoaXMuX3Njcm9sbE9wdGlvbkludG9WaWV3KHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4fHwwKTohdGhpcy5fcGFuZWxPcGVuJiYhdGhpcy5tdWx0aXBsZSYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9KX1fcmVzZXRPcHRpb25zKCl7bGV0IGU9SnQodGhpcy5vcHRpb25zLmNoYW5nZXMsdGhpcy5fZGVzdHJveSk7dGhpcy5vcHRpb25TZWxlY3Rpb25DaGFuZ2VzLnBpcGUoc3QoZSkpLnN1YnNjcmliZShpPT57dGhpcy5fb25TZWxlY3QoaS5zb3VyY2UsaS5pc1VzZXJJbnB1dCksaS5pc1VzZXJJbnB1dCYmIXRoaXMubXVsdGlwbGUmJnRoaXMuX3BhbmVsT3BlbiYmKHRoaXMuY2xvc2UoKSx0aGlzLmZvY3VzKCkpfSksSnQoLi4udGhpcy5vcHRpb25zLm1hcChpPT5pLl9zdGF0ZUNoYW5nZXMpKS5waXBlKHN0KGUpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9KX1fb25TZWxlY3QoZSxpKXtsZXQgcj10aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKGUpO251bGwhPWUudmFsdWV8fHRoaXMuX211bHRpcGxlPyhyIT09ZS5zZWxlY3RlZCYmKGUuc2VsZWN0ZWQ/dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGUpOnRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGUpKSxpJiZ0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oZSksdGhpcy5tdWx0aXBsZSYmKHRoaXMuX3NvcnRWYWx1ZXMoKSxpJiZ0aGlzLmZvY3VzKCkpKTooZS5kZXNlbGVjdCgpLHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCksbnVsbCE9dGhpcy52YWx1ZSYmdGhpcy5fcHJvcGFnYXRlQ2hhbmdlcyhlLnZhbHVlKSksciE9PXRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQoZSkmJnRoaXMuX3Byb3BhZ2F0ZUNoYW5nZXMoKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9X3NvcnRWYWx1ZXMoKXtpZih0aGlzLm11bHRpcGxlKXtsZXQgZT10aGlzLm9wdGlvbnMudG9BcnJheSgpO3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNvcnQoKGkscik9PnRoaXMuc29ydENvbXBhcmF0b3I/dGhpcy5zb3J0Q29tcGFyYXRvcihpLHIsZSk6ZS5pbmRleE9mKGkpLWUuaW5kZXhPZihyKSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfX1fcHJvcGFnYXRlQ2hhbmdlcyhlKXtsZXQgaT1udWxsO2k9dGhpcy5tdWx0aXBsZT90aGlzLnNlbGVjdGVkLm1hcChyPT5yLnZhbHVlKTp0aGlzLnNlbGVjdGVkP3RoaXMuc2VsZWN0ZWQudmFsdWU6ZSx0aGlzLl92YWx1ZT1pLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChpKSx0aGlzLl9vbkNoYW5nZShpKSx0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuX2dldENoYW5nZUV2ZW50KGkpKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1faGlnaGxpZ2h0Q29ycmVjdE9wdGlvbigpe3RoaXMuX2tleU1hbmFnZXImJih0aGlzLmVtcHR5P3RoaXMuX2tleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCk6dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdKSl9X2Nhbk9wZW4oKXtyZXR1cm4hdGhpcy5fcGFuZWxPcGVuJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5vcHRpb25zPy5sZW5ndGg+MH1mb2N1cyhlKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoZSl9X2dldFBhbmVsQXJpYUxhYmVsbGVkYnkoKXtpZih0aGlzLmFyaWFMYWJlbClyZXR1cm4gbnVsbDtsZXQgZT10aGlzLl9wYXJlbnRGb3JtRmllbGQ/LmdldExhYmVsSWQoKTtyZXR1cm4gdGhpcy5hcmlhTGFiZWxsZWRieT8oZT9lKyIgIjoiIikrdGhpcy5hcmlhTGFiZWxsZWRieTplfV9nZXRBcmlhQWN0aXZlRGVzY2VuZGFudCgpe3JldHVybiB0aGlzLnBhbmVsT3BlbiYmdGhpcy5fa2V5TWFuYWdlciYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtP3RoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbS5pZDpudWxsfV9nZXRUcmlnZ2VyQXJpYUxhYmVsbGVkYnkoKXtpZih0aGlzLmFyaWFMYWJlbClyZXR1cm4gbnVsbDtsZXQgZT10aGlzLl9wYXJlbnRGb3JtRmllbGQ/LmdldExhYmVsSWQoKSxpPShlP2UrIiAiOiIiKSt0aGlzLl92YWx1ZUlkO3JldHVybiB0aGlzLmFyaWFMYWJlbGxlZGJ5JiYoaSs9IiAiK3RoaXMuYXJpYUxhYmVsbGVkYnkpLGl9X3BhbmVsRG9uZUFuaW1hdGluZyhlKXt0aGlzLm9wZW5lZENoYW5nZS5lbWl0KGUpfXNldERlc2NyaWJlZEJ5SWRzKGUpe2UubGVuZ3RoP3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiLGUuam9pbigiICIpKTp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5Iil9b25Db250YWluZXJDbGljaygpe3RoaXMuZm9jdXMoKSx0aGlzLm9wZW4oKX1nZXQgc2hvdWxkTGFiZWxGbG9hdCgpe3JldHVybiB0aGlzLl9wYW5lbE9wZW58fCF0aGlzLmVtcHR5fHx0aGlzLl9mb2N1c2VkJiYhIXRoaXMuX3BsYWNlaG9sZGVyfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFZhKSxNKG5uKSxNKF90KSxNKGNkKSxNKFJlKSxNKCRpLDgpLE0oTGgsOCksTShWaCw4KSxNKHNnLDgpLE0oTnMsMTApLHZvKCJ0YWJpbmRleCIpLE0oQm5lKSxNKHR3KSxNKGpGZSw4KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoUEZlLDUpLG90KFJGZSw1KSxvdChSaCw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS50cmlnZ2VyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnBhbmVsPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9vdmVybGF5RGlyPXIuZmlyc3QpfX0saW5wdXRzOnt1c2VyQXJpYURlc2NyaWJlZEJ5OlsiYXJpYS1kZXNjcmliZWRieSIsInVzZXJBcmlhRGVzY3JpYmVkQnkiXSxwYW5lbENsYXNzOiJwYW5lbENsYXNzIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHJlcXVpcmVkOiJyZXF1aXJlZCIsbXVsdGlwbGU6Im11bHRpcGxlIixkaXNhYmxlT3B0aW9uQ2VudGVyaW5nOiJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIixjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgiLHZhbHVlOiJ2YWx1ZSIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIiLHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw6InR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLHNvcnRDb21wYXJhdG9yOiJzb3J0Q29tcGFyYXRvciIsaWQ6ImlkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UiLF9vcGVuZWRTdHJlYW06Im9wZW5lZCIsX2Nsb3NlZFN0cmVhbToiY2xvc2VkIixzZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbkNoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W3R0LEZ0XX0pLG59KSgpLEhoPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBZRmV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Njcm9sbFRvcD0wLHRoaXMuX3RyaWdnZXJGb250U2l6ZT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0idG9wIix0aGlzLl9vZmZzZXRZPTAsdGhpcy5fcG9zaXRpb25zPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImJvdHRvbSJ9XX1fY2FsY3VsYXRlT3ZlcmxheVNjcm9sbChlLGkscil7bGV0IG89dGhpcy5fZ2V0SXRlbUhlaWdodCgpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heCgwLG8qZS1pK28vMikscil9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpLHRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkucGlwZShzdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYW5lbE9wZW4mJih0aGlzLl90cmlnZ2VyUmVjdD10aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9KX1vcGVuKCl7c3VwZXIuX2Nhbk9wZW4oKSYmKHN1cGVyLm9wZW4oKSx0aGlzLl90cmlnZ2VyUmVjdD10aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl90cmlnZ2VyRm9udFNpemU9cGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudCkuZm9udFNpemV8fCIwIiksdGhpcy5fY2FsY3VsYXRlT3ZlcmxheVBvc2l0aW9uKCksdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoUXQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3RyaWdnZXJGb250U2l6ZSYmdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQmJih0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUuZm9udFNpemU9YCR7dGhpcy5fdHJpZ2dlckZvbnRTaXplfXB4YCl9KSl9X3Njcm9sbE9wdGlvbkludG9WaWV3KGUpe2xldCBpPW93KGUsdGhpcy5vcHRpb25zLHRoaXMub3B0aW9uR3JvdXBzKSxyPXRoaXMuX2dldEl0ZW1IZWlnaHQoKTt0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wPTA9PT1lJiYxPT09aT8wOl8yKChlK2kpKnIscix0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wLDI1Nil9X3Bvc2l0aW9uaW5nU2V0dGxlZCgpe3RoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCksdGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcD10aGlzLl9zY3JvbGxUb3B9X3BhbmVsRG9uZUFuaW1hdGluZyhlKXt0aGlzLnBhbmVsT3Blbj90aGlzLl9zY3JvbGxUb3A9MDoodGhpcy5fb3ZlcmxheURpci5vZmZzZXRYPTAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHN1cGVyLl9wYW5lbERvbmVBbmltYXRpbmcoZSl9X2dldENoYW5nZUV2ZW50KGUpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMudmFsdWU9ZX19KHRoaXMsZSl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCl7bGV0IHMsZT10aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLHI9dGhpcy5faXNSdGwoKSxvPXRoaXMubXVsdGlwbGU/NTY6MzI7aWYodGhpcy5tdWx0aXBsZSlzPTQwO2Vsc2UgaWYodGhpcy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nKXM9MTY7ZWxzZXtsZXQgYz10aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXXx8dGhpcy5vcHRpb25zLmZpcnN0O3M9YyYmYy5ncm91cD8zMjoxNn1yfHwocyo9LTEpO2xldCBhPTAtKGUubGVmdCtzLShyP286MCkpLGw9ZS5yaWdodCtzLWkud2lkdGgrKHI/MDpvKTthPjA/cys9YSs4Omw+MCYmKHMtPWwrOCksdGhpcy5fb3ZlcmxheURpci5vZmZzZXRYPU1hdGgucm91bmQocyksdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGUsaSxyKXtsZXQgbCxvPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxzPShvLXRoaXMuX3RyaWdnZXJSZWN0LmhlaWdodCkvMixhPU1hdGguZmxvb3IoMjU2L28pO3JldHVybiB0aGlzLmRpc2FibGVPcHRpb25DZW50ZXJpbmc/MDoobD0wPT09dGhpcy5fc2Nyb2xsVG9wP2Uqbzp0aGlzLl9zY3JvbGxUb3A9PT1yPyhlLSh0aGlzLl9nZXRJdGVtQ291bnQoKS1hKSkqbysoby0odGhpcy5fZ2V0SXRlbUNvdW50KCkqby0yNTYpJW8pOmktby8yLE1hdGgucm91bmQoLTEqbC1zKSl9X2NoZWNrT3ZlcmxheVdpdGhpblZpZXdwb3J0KGUpe2xldCBpPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxyPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksbz10aGlzLl90cmlnZ2VyUmVjdC50b3AtOCxzPXIuaGVpZ2h0LXRoaXMuX3RyaWdnZXJSZWN0LmJvdHRvbS04LGE9TWF0aC5hYnModGhpcy5fb2Zmc2V0WSksYz1NYXRoLm1pbih0aGlzLl9nZXRJdGVtQ291bnQoKSppLDI1NiktYS10aGlzLl90cmlnZ2VyUmVjdC5oZWlnaHQ7Yz5zP3RoaXMuX2FkanVzdFBhbmVsVXAoYyxzKTphPm8/dGhpcy5fYWRqdXN0UGFuZWxEb3duKGEsbyxlKTp0aGlzLl90cmFuc2Zvcm1PcmlnaW49dGhpcy5fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpfV9hZGp1c3RQYW5lbFVwKGUsaSl7bGV0IHI9TWF0aC5yb3VuZChlLWkpO3RoaXMuX3Njcm9sbFRvcC09cix0aGlzLl9vZmZzZXRZLT1yLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj10aGlzLl9nZXRPcmlnaW5CYXNlZE9uT3B0aW9uKCksdGhpcy5fc2Nyb2xsVG9wPD0wJiYodGhpcy5fc2Nyb2xsVG9wPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIGJvdHRvbSAwcHgiKX1fYWRqdXN0UGFuZWxEb3duKGUsaSxyKXtsZXQgbz1NYXRoLnJvdW5kKGUtaSk7aWYodGhpcy5fc2Nyb2xsVG9wKz1vLHRoaXMuX29mZnNldFkrPW8sdGhpcy5fdHJhbnNmb3JtT3JpZ2luPXRoaXMuX2dldE9yaWdpbkJhc2VkT25PcHRpb24oKSx0aGlzLl9zY3JvbGxUb3A+PXIpcmV0dXJuIHRoaXMuX3Njcm9sbFRvcD1yLHRoaXMuX29mZnNldFk9MCx2b2lkKHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIHRvcCAwcHgiKX1fY2FsY3VsYXRlT3ZlcmxheVBvc2l0aW9uKCl7bGV0IGEsZT10aGlzLl9nZXRJdGVtSGVpZ2h0KCksaT10aGlzLl9nZXRJdGVtQ291bnQoKSxyPU1hdGgubWluKGkqZSwyNTYpLHM9aSplLXI7YT10aGlzLmVtcHR5PzA6TWF0aC5tYXgodGhpcy5vcHRpb25zLnRvQXJyYXkoKS5pbmRleE9mKHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdKSwwKSxhKz1vdyhhLHRoaXMub3B0aW9ucyx0aGlzLm9wdGlvbkdyb3Vwcyk7bGV0IGw9ci8yO3RoaXMuX3Njcm9sbFRvcD10aGlzLl9jYWxjdWxhdGVPdmVybGF5U2Nyb2xsKGEsbCxzKSx0aGlzLl9vZmZzZXRZPXRoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGEsbCxzKSx0aGlzLl9jaGVja092ZXJsYXlXaXRoaW5WaWV3cG9ydChzKX1fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpe2xldCBlPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxpPShlLXRoaXMuX3RyaWdnZXJSZWN0LmhlaWdodCkvMjtyZXR1cm5gNTAlICR7TWF0aC5hYnModGhpcy5fb2Zmc2V0WSktaStlLzJ9cHggMHB4YH1fZ2V0SXRlbUhlaWdodCgpe3JldHVybiAzKnRoaXMuX3RyaWdnZXJGb250U2l6ZX1fZ2V0SXRlbUNvdW50KCl7cmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGgrdGhpcy5vcHRpb25Hcm91cHMubGVuZ3RofX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNlbGVjdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoRWkocixxRmUsNSksRWkocixPcyw1KSxFaShyLHJ3LDUpKSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLmN1c3RvbVRyaWdnZXI9by5maXJzdCksTmUobz1MZSgpKSYmKGkub3B0aW9ucz1vKSxOZShvPUxlKCkpJiYoaS5vcHRpb25Hcm91cHM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiY29tYm9ib3giLCJhcmlhLWF1dG9jb21wbGV0ZSIsIm5vbmUiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwibWF0LXNlbGVjdCJdLGhvc3RWYXJzOjE5LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uRm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkJsdXIoKX0pLDImZSYmKHplKCJpZCIsaS5pZCkoInRhYmluZGV4IixpLnRhYkluZGV4KSgiYXJpYS1jb250cm9scyIsaS5wYW5lbE9wZW4/aS5pZCsiLXBhbmVsIjpudWxsKSgiYXJpYS1leHBhbmRlZCIsaS5wYW5lbE9wZW4pKCJhcmlhLWxhYmVsIixpLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtcmVxdWlyZWQiLGkucmVxdWlyZWQudG9TdHJpbmcoKSkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQudG9TdHJpbmcoKSkoImFyaWEtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixpLl9nZXRBcmlhQWN0aXZlRGVzY2VuZGFudCgpKSxldCgibWF0LXNlbGVjdC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1zZWxlY3QtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgibWF0LXNlbGVjdC1yZXF1aXJlZCIsaS5yZXF1aXJlZCkoIm1hdC1zZWxlY3QtZW1wdHkiLGkuZW1wdHkpKCJtYXQtc2VsZWN0LW11bHRpcGxlIixpLm11bHRpcGxlKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIix0YWJJbmRleDoidGFiSW5kZXgifSxleHBvcnRBczpbIm1hdFNlbGVjdCJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6a2gsdXNlRXhpc3Rpbmc6bn0se3Byb3ZpZGU6aXcsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOlZGZSxkZWNsczo5LHZhcnM6MTIsY29uc3RzOltbImNkay1vdmVybGF5LW9yaWdpbiIsIiIsMSwibWF0LXNlbGVjdC10cmlnZ2VyIiwzLCJjbGljayJdLFsib3JpZ2luIiwiY2RrT3ZlcmxheU9yaWdpbiIsInRyaWdnZXIiLCIiXSxbMSwibWF0LXNlbGVjdC12YWx1ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1wbGFjZWhvbGRlciBtYXQtc2VsZWN0LW1pbi1saW5lIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwibWF0LXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlciJdLFsxLCJtYXQtc2VsZWN0LWFycm93Il0sWyJjZGstY29ubmVjdGVkLW92ZXJsYXkiLCIiLCJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3MiLCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIsMywiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLCJiYWNrZHJvcENsaWNrIiwiYXR0YWNoIiwiZGV0YWNoIl0sWzEsIm1hdC1zZWxlY3QtcGxhY2Vob2xkZXIiLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtdmFsdWUtdGV4dCIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1taW4tbGluZSIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtcGFuZWwtd3JhcCJdLFsicm9sZSIsImxpc3Rib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ0NsYXNzIiwia2V5ZG93biJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJih4aShCRmUpLF8oMCwiZGl2IiwwLDEpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZSgpfSksXygzLCJkaXYiLDIpLEUoNCxPRmUsMiwxLCJzcGFuIiwzKSxFKDUsTkZlLDMsMiwic3BhbiIsNCksdigpLF8oNiwiZGl2Iiw1KSxPKDcsImRpdiIsNiksdigpKCksRSg4LExGZSw0LDE0LCJuZy10ZW1wbGF0ZSIsNyksUCgiYmFja2Ryb3BDbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZSgpfSkoImF0dGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25BdHRhY2hlZCgpfSkoImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZSgpfSkpLDImZSl7bGV0IHI9JGUoMSk7emUoImFyaWEtb3ducyIsaS5wYW5lbE9wZW4/aS5pZCsiLXBhbmVsIjpudWxsKSxDKDMpLHkoIm5nU3dpdGNoIixpLmVtcHR5KSx6ZSgiaWQiLGkuX3ZhbHVlSWQpLEMoMSkseSgibmdTd2l0Y2hDYXNlIiwhMCksQygxKSx5KCJuZ1N3aXRjaENhc2UiLCExKSxDKDMpLHkoImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIixpLl9vdmVybGF5UGFuZWxDbGFzcykoImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsaS5fc2Nyb2xsU3RyYXRlZ3kpKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixyKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLGkucGFuZWxPcGVuKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsaS5fcG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIixudWxsPT1pLl90cmlnZ2VyUmVjdD9udWxsOmkuX3RyaWdnZXJSZWN0LndpZHRoKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLGkuX29mZnNldFkpfX0sZGVwZW5kZW5jaWVzOltGbixDcixVcixjaCxSaCxpZ10sc3R5bGVzOlsnLm1hdC1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9Lm1hdC1zZWxlY3QtdHJpZ2dlcntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC10cmlnZ2Vyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtc2VsZWN0LXZhbHVle3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtc2VsZWN0LXZhbHVlLXRleHR7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7aGVpZ2h0OjE2cHg7ZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNSUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCAubWF0LXNlbGVjdDpub3QoLm1hdC1zZWxlY3QtZW1wdHkpIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1lbXB0eSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZW1wdHkgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1zZWxlY3QtYXJyb3d7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDo1cHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXRvcDo1cHggc29saWQ7bWFyZ2luOjAgNHB4fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX0ubWF0LXNlbGVjdC1wYW5lbC13cmFwe2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXNlbGVjdC1wYW5lbHttaW4td2lkdGg6MTEycHg7bWF4LXdpZHRoOjI4MHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21heC1oZWlnaHQ6MjU2cHg7bWluLXdpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo0cHg7b3V0bGluZTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zZWxlY3QtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRncm91cC1sYWJlbCwubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbntmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDozZW07aGVpZ2h0OjNlbX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0Om5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4e2N1cnNvcjpwb2ludGVyfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3dpZHRoOmNhbGMoMTAwJSAtIDE4cHgpfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsMCk7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmU7ZGlzcGxheTpibG9ja30ubWF0LXNlbGVjdC1taW4tbGluZTplbXB0eTo6YmVmb3Jle2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmlzaWJpbGl0eTpoaWRkZW59J10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbRm5lLnRyYW5zZm9ybVBhbmVsV3JhcCxGbmUudHJhbnNmb3JtUGFuZWxdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGxjPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W0dGZV0saW1wb3J0czpbTWUsc3MsQXYsbG4sdWQsYWcsQXYsbG5dfSksbn0pKCk7ZnVuY3Rpb24gWEZlKG4sdCl7MSZuJiYoc24oMCksXygxLCJkaXYiLDEpLEEoMiwiIFRoZXJlIGlzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIERlZmF1bHQgLSAoRW5hYmxlZC9EaXNhYmxlZCkgYW5kIChFbmFibGVkL0Rpc2FibGVkKSAiKSx2KCksXygzLCJkaXYiLDEpLEEoNCwiIE9ubHkgZmxhZ3Mgd2l0aCBub24gZGVmYXVsdCB2YWx1ZXMgYXJlIHNlbnQgdG8gdGhlIGJhY2tlbmQuICIpLHYoKSxhbigpKX1mdW5jdGlvbiBRRmUobix0KXsxJm4mJihfKDAsInN1cCIsMTEpLEEoMSwiMSIpLHYoKSl9ZnVuY3Rpb24gS0ZlKG4sdCl7MSZuJiZOaSgwKX1mdW5jdGlvbiBaRmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJtYXQtc2VsZWN0IiwxMiksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKCkuJGltcGxpY2l0O3JldHVybiBzZShTKCkuZmxhZ0NoYW5nZWQuZW1pdCh7ZmxhZzpvLmZsYWcsc3RhdHVzOnIudmFsdWV9KSl9KSxfKDEsIm1hdC1vcHRpb24iLDEzKSxBKDIpLHYoKSxfKDMsIm1hdC1vcHRpb24iLDE0KSxBKDQsIkVuYWJsZWQiKSx2KCksXyg1LCJtYXQtb3B0aW9uIiwxNSksQSg2LCJEaXNhYmxlZCIpLHYoKSgpfWlmKDImbil7bGV0IGU9UygpLiRpbXBsaWNpdCxpPVMoKTt5KCJ2YWx1ZSIsZS5zdGF0dXMpLEMoMiksamUoIiBEZWZhdWx0ICIsaS5mb3JtYXRGbGFnVmFsdWUoZS5kZWZhdWx0VmFsdWUpLCIgIil9fWZ1bmN0aW9uIEpGZShuLHQpe2lmKDEmbiYmKF8oMCwidGQiKSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKCkuJGltcGxpY2l0LGk9UygpO0MoMSksamUoIlVuc3VwcG9ydGVkIEJ5IFVJICIsaS5mb3JtYXRGbGFnVmFsdWUoZS52YWx1ZSksIiIpfX1mdW5jdGlvbiAkRmUobix0KXtpZigxJm4mJihzbigwKSxfKDEsInRyIikoMiwidGQiKSgzLCJkaXYiKSxBKDQpLEUoNSxRRmUsMiwwLCJzdXAiLDcpLHYoKSgpLEUoNixLRmUsMSwwLCJuZy1jb250YWluZXIiLDgpLEUoNyxaRmUsNywyLCJuZy10ZW1wbGF0ZSIsbnVsbCw5LHF0KSxFKDksSkZlLDIsMSwibmctdGVtcGxhdGUiLG51bGwsMTAscXQpLHYoKSxhbigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9JGUoOCkscj0kZSgxMCksbz1TKCk7Qyg0KSxqZSgiICIsZS5mbGFnLCIgIiksQygxKSx5KCJuZ0lmIixlLnNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVuKSxDKDEpLHkoIm5nSWYiLG8uaXNFZGl0YWJsZShlKSkoIm5nSWZUaGVuIixpKSgibmdJZkVsc2UiLHIpfX1mdW5jdGlvbiBlTmUobix0KXsxJm4mJihfKDAsImRpdiIsMTEpLEEoMSwiIDEuIFNlbnQgdG8gc2VydmVyIHdoZW4gb3ZlcnJpZGRlbiAiKSx2KCkpfXZhciBxMixWbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzRmxhZ3NTZW50VG9TZXJ2ZXI9ITEsdGhpcy5mbGFnQ2hhbmdlZD1uZXcgRyx0aGlzLmFsbEZsYWdzUmVzZXQ9bmV3IEd9c2VyaWFsaXplRmxhZ1ZhbHVlKGUpe3JldHVybiEwPT09ZT8iRW5hYmxlZCI6ITE9PT1lPyJEaXNhYmxlZCI6bnVsbD09ZT8ibnVsbCI6QXJyYXkuaXNBcnJheShlKT9KU09OLnN0cmluZ2lmeShlKTplLnRvU3RyaW5nKCl9aXNFZGl0YWJsZShlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlLmRlZmF1bHRWYWx1ZX1mb3JtYXRGbGFnVmFsdWUoZSl7bGV0IGk9dGhpcy5zZXJpYWxpemVGbGFnVmFsdWUoZSk7cmV0dXJuIDA9PT1pLmxlbmd0aD8iIjpgLSAke2l9YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZmVhdHVyZS1mbGFnLXBhZ2UtY29tcG9uZW50Il1dLGlucHV0czp7ZmVhdHVyZUZsYWdTdGF0dXNlczoiZmVhdHVyZUZsYWdTdGF0dXNlcyIsaGFzRmxhZ3NTZW50VG9TZXJ2ZXI6Imhhc0ZsYWdzU2VudFRvU2VydmVyIn0sb3V0cHV0czp7ZmxhZ0NoYW5nZWQ6ImZsYWdDaGFuZ2VkIixhbGxGbGFnc1Jlc2V0OiJhbGxGbGFnc1Jlc2V0In0sZGVjbHM6MTEsdmFyczozLGNvbnN0czpbWzEsInNjcm9sbGluZy1wYWdlIl0sWzEsIm1lc3NhZ2UiXSxbMSwid2FybmluZyJdLFs0LCJuZ0lmIl0sWzEsImZlYXR1cmUtZmxhZy10YWJsZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIl0sWyJjbGFzcyIsIm5vdGUtMSIsNCwibmdJZiJdLFs0LCJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdLFsic2VsZWN0QmxvY2siLCIiXSxbInVuc3VwcG9ydGVkQmxvY2siLCIiXSxbMSwibm90ZS0xIl0sWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWyJ2YWx1ZSIsImRlZmF1bHQiXSxbInZhbHVlIiwiZW5hYmxlZCJdLFsidmFsdWUiLCJkaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImgyIiwyKSxBKDMsIldBUk5JTkc6IEVYUEVSSU1FTlRBTCBGRUFUVVJFUyBBSEVBRCEiKSx2KCksQSg0LCIgQnkgZW5hYmxpbmcgdGhlc2UgZmVhdHVyZXMsIHlvdSBjb3VsZCBwdXQgdGhlIGFwcGxpY2F0aW9uIGluIGFuIHVudXNhYmxlIHN0YXRlIG9yIGV4cG9zZSB5b3Vyc2VsZiB0byB1bnRlc3RlZCBmZWF0dXJlcyBvciBwb3RlbnRpYWwgYnVncy4gIiksdigpLEUoNSxYRmUsNSwwLCJuZy1jb250YWluZXIiLDMpLF8oNiwidGFibGUiLDQpLEUoNywkRmUsMTEsNSwibmctY29udGFpbmVyIiw1KSx2KCksXyg4LCJidXR0b24iLDYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmFsbEZsYWdzUmVzZXQuZW1pdCgpfSksQSg5LCJSZXNldCBBbGwiKSx2KCksRSgxMCxlTmUsMiwwLCJkaXYiLDcpLHYoKSksMiZlJiYoQyg1KSx5KCJuZ0lmIixpLmhhc0ZsYWdzU2VudFRvU2VydmVyKSxDKDIpLHkoIm5nRm9yT2YiLGkuZmVhdHVyZUZsYWdTdGF0dXNlcyksQygzKSx5KCJuZ0lmIixpLmhhc0ZsYWdzU2VudFRvU2VydmVyKSl9LGRlcGVuZGVuY2llczpbZG4sQmUsX24sSGgsT3NdLHN0eWxlczpbIi5tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjE2cHh9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmNDQzMzZ9Lm5vdGUtMVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmOTgwMH0uc2Nyb2xsaW5nLXBhZ2VbX25nY29udGVudC0lQ09NUCVde21heC1oZWlnaHQ6OTB2aH0uZmVhdHVyZS1mbGFnLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfSJdfSksbn0pKCksVzI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5oYXNGbGFnc1NlbnRUb1NlcnZlciQ9dGhpcy5zdG9yZS5zZWxlY3QoSG0pLnBpcGUoTChpPT5PYmplY3QudmFsdWVzKGkpLnNvbWUocj0+ci5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbikpKSx0aGlzLmZlYXR1cmVGbGFncyQ9dGhpcy5zdG9yZS5zZWxlY3QoekEpLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoeSQpLHRoaXMuc3RvcmUuc2VsZWN0KEhtKSksTCgoW2kscixvXSk9Pk9iamVjdC5lbnRyaWVzKHIpLm1hcCgoW3MsYV0pPT57bGV0IGw9ZnVuY3Rpb24obix0KXtyZXR1cm4gdm9pZCAwPT09dFtuXT8iZGVmYXVsdCI6dFtuXT8iZW5hYmxlZCI6ImRpc2FibGVkIn0ocyxpKTtyZXR1cm57ZmxhZzpzLGRlZmF1bHRWYWx1ZTphLHN0YXR1czpsLHNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVuOm9bc10uc2VuZFRvU2VydmVyV2hlbk92ZXJyaWRkZW59fSkpKX1vbkZsYWdDaGFuZ2VkKHtmbGFnOmUsc3RhdHVzOml9KXtzd2l0Y2goaSl7Y2FzZSJkZWZhdWx0Ijp0aGlzLnN0b3JlLmRpc3BhdGNoKHloKHtmbGFnczpbZV19KSk7YnJlYWs7Y2FzZSJlbmFibGVkIjp0aGlzLnN0b3JlLmRpc3BhdGNoKHFtKHtmbGFnczp7W2VdOiEwfX0pKTticmVhaztjYXNlImRpc2FibGVkIjp0aGlzLnN0b3JlLmRpc3BhdGNoKHFtKHtmbGFnczp7W2VdOiExfX0pKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRmxhZyBjaGFuZ2VkIHRvIGludmFsaWQgc3RhdHVzIil9fW9uQWxsRmxhZ3NSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2gobHYoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJmZWF0dXJlLWZsYWctcGFnZSJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJmZWF0dXJlRmxhZ1N0YXR1c2VzIiwiaGFzRmxhZ3NTZW50VG9TZXJ2ZXIiLCJmbGFnQ2hhbmdlZCIsImFsbEZsYWdzUmVzZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImZlYXR1cmUtZmxhZy1wYWdlLWNvbXBvbmVudCIsMCksUCgiZmxhZ0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRmxhZ0NoYW5nZWQobyl9KSgiYWxsRmxhZ3NSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkFsbEZsYWdzUmVzZXQoKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksdigpKSwyJmUmJnkoImZlYXR1cmVGbGFnU3RhdHVzZXMiLFUoMSwyLGkuZmVhdHVyZUZsYWdzJCkpKCJoYXNGbGFnc1NlbnRUb1NlcnZlciIsVSgyLDQsaS5oYXNGbGFnc1NlbnRUb1NlcnZlciQpKX0sZGVwZW5kZW5jaWVzOltWbmUsR2VdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLEhuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMuZGlhbG9nPWksdGhpcy5zaG93RmVhdHVyZUZsYWdzJD10aGlzLnN0b3JlLnNlbGVjdChFJCl9bmdPbkluaXQoKXt0aGlzLnNob3dGZWF0dXJlRmxhZ3MkLnN1YnNjcmliZShlPT57aWYoZSlyZXR1cm4gdGhpcy5mZWF0dXJlRmxhZ3NEaWFsb2c9dGhpcy5kaWFsb2cub3BlbihXMiksdm9pZCB0aGlzLmZlYXR1cmVGbGFnc0RpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goeWgoe2ZsYWdzOlsiZW5hYmxlU2hvd0ZsYWdzIl19KSksc2V0VGltZW91dCgoKT0+e3dpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKX0sMSl9KX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSxNKHZsKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZmVhdHVyZS1mbGFnLW1vZGFsLXRyaWdnZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLG9OZT1bInJvdXRlQ29udGFpbmVyIl0sVW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZX1uZ09uQ2hhbmdlcyhlKXtsZXQgaT1lLmFjdGl2ZU5nQ29tcG9uZW50O2lmKGkmJih0aGlzLnJvdXRlQ29udGFpbmVyLmNsZWFyKCksaS5jdXJyZW50VmFsdWUpKXtsZXQgcj10aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShpLmN1cnJlbnRWYWx1ZSk7dGhpcy5yb3V0ZUNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQocil9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKGdzKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChvTmUsNyxPaSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5yb3V0ZUNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7YWN0aXZlTmdDb21wb25lbnQ6ImFjdGl2ZU5nQ29tcG9uZW50In0sZmVhdHVyZXM6W0Z0XSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sicm91dGVDb250YWluZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJk5pKDAsbnVsbCwwKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksem5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWdpc3RyeT1pLHRoaXMuYWN0aXZlTmdDb21wb25lbnQkPUx0KFt0aGlzLnN0b3JlLnNlbGVjdChSYSksdGhpcy5zdG9yZS5zZWxlY3QoWkopXSkucGlwZShMKChbcixvXSk9PnImJihudWxsPT09b3x8UHMocixvKSk/dGhpcy5yZWdpc3RyeS5nZXROZ0NvbXBvbmVudEJ5Um91dGVLaW5kKHIucm91dGVLaW5kKTpudWxsKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpLE0ocWMpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0Il1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsImFjdGl2ZU5nQ29tcG9uZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJyb3V0ZXItb3V0bGV0LWNvbXBvbmVudCIsMCksQigxLCJhc3luYyIpKSwyJmUmJnkoImFjdGl2ZU5nQ29tcG9uZW50IixVKDEsMSxpLmFjdGl2ZU5nQ29tcG9uZW50JCkpfSxkZXBlbmRlbmNpZXM6W1VuZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksam5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7ZS5zZWxlY3QoUXUpLnN1YnNjcmliZShpPT57ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrLW1vZGUiLGkpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJkYXJrLW1vZGUtc3VwcG9ydGVyIl1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFV2PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5BQ1RJVkVfUExVR0lOPTBdPSJBQ1RJVkVfUExVR0lOIn0oVXZ8fChVdj17fSkpLFV2KSkoKSxHbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZXBMaW5rZXI9ZSx0aGlzLm9uVmFsdWVDaGFuZ2U9bmV3IEcsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBrZSx0aGlzLm9uSGFzaENoYW5nZT1faSh3aW5kb3csInBvcHN0YXRlIix7cGFzc2l2ZTohMH0pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSl9bmdPbkluaXQoKXt0aGlzLm9uSGFzaENoYW5nZS5zdWJzY3JpYmUoKCk9PntsZXQgZT10aGlzLmRlZXBMaW5rZXIuZ2V0UGx1Z2luSWQoKTtlIT09dGhpcy5hY3RpdmVQbHVnaW5JZCYmdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoe3Byb3A6VXYuQUNUSVZFX1BMVUdJTix2YWx1ZTplfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bmdPbkNoYW5nZXMoZSl7aWYoZS5hY3RpdmVQbHVnaW5JZCl7bGV0IGk9ZS5hY3RpdmVQbHVnaW5JZDt0aGlzLmRlZXBMaW5rZXIuc2V0UGx1Z2luSWQobnVsbD09PWkuY3VycmVudFZhbHVlPyIiOmkuY3VycmVudFZhbHVlLHtkZWZhdWx0VmFsdWU6IiIsdXNlTG9jYXRpb25SZXBsYWNlOm51bGw9PT1pLnByZXZpb3VzVmFsdWV8fGkuZmlyc3RDaGFuZ2V9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oZmgpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJoYXNoLXN0b3JhZ2UtY29tcG9uZW50Il1dLGlucHV0czp7YWN0aXZlUGx1Z2luSWQ6ImFjdGl2ZVBsdWdpbklkIn0sb3V0cHV0czp7b25WYWx1ZUNoYW5nZToib25WYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltGdF0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFduZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnBpcGUodnQoUnMpKX1vblZhbHVlQ2hhbmdlZChlKXtlLnByb3A9PT1Vdi5BQ1RJVkVfUExVR0lOJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKFhBKHtwbHVnaW46ZS52YWx1ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImhhc2gtc3RvcmFnZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJhY3RpdmVQbHVnaW5JZCIsIm9uVmFsdWVDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImhhc2gtc3RvcmFnZS1jb21wb25lbnQiLDApLFAoIm9uVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmFsdWVDaGFuZ2VkKG8pfSksQigxLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJhY3RpdmVQbHVnaW5JZCIsVSgxLDEsaS5hY3RpdmVQbHVnaW5JZCQpKX0sZGVwZW5kZW5jaWVzOltHbmUsR2VdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZE5lPVsiKiJdO2Z1bmN0aW9uIHZ3KG4pe3JldHVybiBmdW5jdGlvbigpe2lmKHZvaWQgMD09PXEyJiYocTI9bnVsbCx0eXBlb2Ygd2luZG93PCJ1Iikpe2xldCBuPXdpbmRvdzt2b2lkIDAhPT1uLnRydXN0ZWRUeXBlcyYmKHEyPW4udHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciNjb21wb25lbnRzIix7Y3JlYXRlSFRNTDp0PT50fSkpfXJldHVybiBxMn0oKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiBxbmUobil7cmV0dXJuIEVycm9yKGBVbmFibGUgdG8gZmluZCBpY29uIHdpdGggdGhlIG5hbWUgIiR7bn0iYCl9ZnVuY3Rpb24gWW5lKG4pe3JldHVybiBFcnJvcihgVGhlIFVSTCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIGEgcmVzb3VyY2UgVVJMIHZpYSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgVVJMIHdhcyAiJHtufSIuYCl9ZnVuY3Rpb24gWG5lKG4pe3JldHVybiBFcnJvcihgVGhlIGxpdGVyYWwgcHJvdmlkZWQgdG8gTWF0SWNvblJlZ2lzdHJ5IHdhcyBub3QgdHJ1c3RlZCBhcyBzYWZlIEhUTUwgYnkgQW5ndWxhcidzIERvbVNhbml0aXplci4gQXR0ZW1wdGVkIGxpdGVyYWwgd2FzICIke259Ii5gKX12YXIgY3A9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudXJsPXQsdGhpcy5zdmdUZXh0PWUsdGhpcy5vcHRpb25zPWl9fSx6dj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2h0dHBDbGllbnQ9ZSx0aGlzLl9zYW5pdGl6ZXI9aSx0aGlzLl9lcnJvckhhbmRsZXI9byx0aGlzLl9zdmdJY29uQ29uZmlncz1uZXcgTWFwLHRoaXMuX2ljb25TZXRDb25maWdzPW5ldyBNYXAsdGhpcy5fY2FjaGVkSWNvbnNCeVVybD1uZXcgTWFwLHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzPW5ldyBNYXAsdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzPW5ldyBNYXAsdGhpcy5fcmVzb2x2ZXJzPVtdLHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9WyJtYXRlcmlhbC1pY29ucyIsIm1hdC1saWdhdHVyZS1mb250Il0sdGhpcy5fZG9jdW1lbnQ9cn1hZGRTdmdJY29uKGUsaSxyKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uSW5OYW1lc3BhY2UoIiIsZSxpLHIpfWFkZFN2Z0ljb25MaXRlcmFsKGUsaSxyKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uTGl0ZXJhbEluTmFtZXNwYWNlKCIiLGUsaSxyKX1hZGRTdmdJY29uSW5OYW1lc3BhY2UoZSxpLHIsbyl7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcoZSxpLG5ldyBjcChyLG51bGwsbykpfWFkZFN2Z0ljb25SZXNvbHZlcihlKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZXJzLnB1c2goZSksdGhpc31hZGRTdmdJY29uTGl0ZXJhbEluTmFtZXNwYWNlKGUsaSxyLG8pe2xldCBzPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShtby5IVE1MLHIpO2lmKCFzKXRocm93IFhuZShyKTtsZXQgYT12dyhzKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyhlLGksbmV3IGNwKCIiLGEsbykpfWFkZFN2Z0ljb25TZXQoZSxpKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2UoIiIsZSxpKX1hZGRTdmdJY29uU2V0TGl0ZXJhbChlLGkpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2UoIiIsZSxpKX1hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2UoZSxpLHIpe3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKGUsbmV3IGNwKGksbnVsbCxyKSl9YWRkU3ZnSWNvblNldExpdGVyYWxJbk5hbWVzcGFjZShlLGkscil7bGV0IG89dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKG1vLkhUTUwsaSk7aWYoIW8pdGhyb3cgWG5lKGkpO2xldCBzPXZ3KG8pO3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKGUsbmV3IGNwKCIiLHMscikpfXJlZ2lzdGVyRm9udENsYXNzQWxpYXMoZSxpPWUpe3JldHVybiB0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuc2V0KGUsaSksdGhpc31jbGFzc05hbWVGb3JGb250QWxpYXMoZSl7cmV0dXJuIHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5nZXQoZSl8fGV9c2V0RGVmYXVsdEZvbnRTZXRDbGFzcyguLi5lKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz1lLHRoaXN9Z2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzfWdldFN2Z0ljb25Gcm9tVXJsKGUpe2xldCBpPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShtby5SRVNPVVJDRV9VUkwsZSk7aWYoIWkpdGhyb3cgWW5lKGUpO2xldCByPXRoaXMuX2NhY2hlZEljb25zQnlVcmwuZ2V0KGkpO3JldHVybiByP1h0KFkyKHIpKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcobmV3IGNwKGUsbnVsbCkpLnBpcGUoa3Qobz0+dGhpcy5fY2FjaGVkSWNvbnNCeVVybC5zZXQoaSxvKSksTChvPT5ZMihvKSkpfWdldE5hbWVkU3ZnSWNvbihlLGk9IiIpe2xldCByPVFuZShpLGUpLG89dGhpcy5fc3ZnSWNvbkNvbmZpZ3MuZ2V0KHIpO2lmKG8pcmV0dXJuIHRoaXMuX2dldFN2Z0Zyb21Db25maWcobyk7aWYobz10aGlzLl9nZXRJY29uQ29uZmlnRnJvbVJlc29sdmVycyhpLGUpLG8pcmV0dXJuIHRoaXMuX3N2Z0ljb25Db25maWdzLnNldChyLG8pLHRoaXMuX2dldFN2Z0Zyb21Db25maWcobyk7bGV0IHM9dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KGkpO3JldHVybiBzP3RoaXMuX2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyhlLHMpOndjKHFuZShyKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXNvbHZlcnM9W10sdGhpcy5fc3ZnSWNvbkNvbmZpZ3MuY2xlYXIoKSx0aGlzLl9pY29uU2V0Q29uZmlncy5jbGVhcigpLHRoaXMuX2NhY2hlZEljb25zQnlVcmwuY2xlYXIoKX1fZ2V0U3ZnRnJvbUNvbmZpZyhlKXtyZXR1cm4gZS5zdmdUZXh0P1h0KFkyKHRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKGUpKSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKGUpLnBpcGUoTChpPT5ZMihpKSkpfV9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3MoZSxpKXtsZXQgcj10aGlzLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldChlLGkpO3JldHVybiByP1h0KHIpOmxyKGkuZmlsdGVyKHM9PiFzLnN2Z1RleHQpLm1hcChzPT50aGlzLl9sb2FkU3ZnSWNvblNldEZyb21Db25maWcocykucGlwZShmbyhhPT57bGV0IGM9YExvYWRpbmcgaWNvbiBzZXQgVVJMOiAke3RoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShtby5SRVNPVVJDRV9VUkwscy51cmwpfSBmYWlsZWQ6ICR7YS5tZXNzYWdlfWA7cmV0dXJuIHRoaXMuX2Vycm9ySGFuZGxlci5oYW5kbGVFcnJvcihuZXcgRXJyb3IoYykpLFh0KG51bGwpfSkpKSkucGlwZShMKCgpPT57bGV0IHM9dGhpcy5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQoZSxpKTtpZighcyl0aHJvdyBxbmUoZSk7cmV0dXJuIHN9KSl9X2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KGUsaSl7Zm9yKGxldCByPWkubGVuZ3RoLTE7cj49MDtyLS0pe2xldCBvPWlbcl07aWYoby5zdmdUZXh0JiZvLnN2Z1RleHQudG9TdHJpbmcoKS5pbmRleE9mKGUpPi0xKXtsZXQgcz10aGlzLl9zdmdFbGVtZW50RnJvbUNvbmZpZyhvKSxhPXRoaXMuX2V4dHJhY3RTdmdJY29uRnJvbVNldChzLGUsby5vcHRpb25zKTtpZihhKXJldHVybiBhfX1yZXR1cm4gbnVsbH1fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKGUpe3JldHVybiB0aGlzLl9mZXRjaEljb24oZSkucGlwZShrdChpPT5lLnN2Z1RleHQ9aSksTCgoKT0+dGhpcy5fc3ZnRWxlbWVudEZyb21Db25maWcoZSkpKX1fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnKGUpe3JldHVybiBlLnN2Z1RleHQ/WHQobnVsbCk6dGhpcy5fZmV0Y2hJY29uKGUpLnBpcGUoa3QoaT0+ZS5zdmdUZXh0PWkpKX1fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0KGUsaSxyKXtsZXQgbz1lLnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtpfSJdYCk7aWYoIW8pcmV0dXJuIG51bGw7bGV0IHM9by5jbG9uZU5vZGUoITApO2lmKHMucmVtb3ZlQXR0cmlidXRlKCJpZCIpLCJzdmciPT09cy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKHMscik7aWYoInN5bWJvbCI9PT1zLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXModGhpcy5fdG9TdmdFbGVtZW50KHMpLHIpO2xldCBhPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKHZ3KCI8c3ZnPjwvc3ZnPiIpKTtyZXR1cm4gYS5hcHBlbmRDaGlsZChzKSx0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGEscil9X3N2Z0VsZW1lbnRGcm9tU3RyaW5nKGUpe2xldCBpPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2kuaW5uZXJIVE1MPWU7bGV0IHI9aS5xdWVyeVNlbGVjdG9yKCJzdmciKTtpZighcil0aHJvdyBFcnJvcigiPHN2Zz4gdGFnIG5vdCBmb3VuZCIpO3JldHVybiByfV90b1N2Z0VsZW1lbnQoZSl7bGV0IGk9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcodncoIjxzdmc+PC9zdmc+IikpLHI9ZS5hdHRyaWJ1dGVzO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXR7bmFtZTpzLHZhbHVlOmF9PXJbb107ImlkIiE9PXMmJmkuc2V0QXR0cmlidXRlKHMsYSl9Zm9yKGxldCBvPTA7bzxlLmNoaWxkTm9kZXMubGVuZ3RoO28rKyllLmNoaWxkTm9kZXNbb10ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREUmJmkuYXBwZW5kQ2hpbGQoZS5jaGlsZE5vZGVzW29dLmNsb25lTm9kZSghMCkpO3JldHVybiBpfV9zZXRTdmdBdHRyaWJ1dGVzKGUsaSl7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJmaXQiLCIiKSxlLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMTAwJSIpLGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjEwMCUiKSxlLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSxlLnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSxpJiZpLnZpZXdCb3gmJmUuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixpLnZpZXdCb3gpLGV9X2ZldGNoSWNvbihlKXtsZXR7dXJsOmksb3B0aW9uczpyfT1lLG89cj8ud2l0aENyZWRlbnRpYWxzPz8hMTtpZighdGhpcy5faHR0cENsaWVudCl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSHR0cENsaWVudCBwcm92aWRlciBmb3IgdXNlIHdpdGggQW5ndWxhciBNYXRlcmlhbCBpY29ucy4gUGxlYXNlIGluY2x1ZGUgdGhlIEh0dHBDbGllbnRNb2R1bGUgZnJvbSBAYW5ndWxhci9jb21tb24vaHR0cCBpbiB5b3VyIGFwcCBpbXBvcnRzLiIpO2lmKG51bGw9PWkpdGhyb3cgRXJyb3IoYENhbm5vdCBmZXRjaCBpY29uIGZyb20gVVJMICIke2l9Ii5gKTtsZXQgcz10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUobW8uUkVTT1VSQ0VfVVJMLGkpO2lmKCFzKXRocm93IFluZShpKTtsZXQgYT10aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5nZXQocyk7aWYoYSlyZXR1cm4gYTtsZXQgbD10aGlzLl9odHRwQ2xpZW50LmdldChzLHtyZXNwb25zZVR5cGU6InRleHQiLHdpdGhDcmVkZW50aWFsczpvfSkucGlwZShMKGM9PnZ3KGMpKSxmdW5jdGlvbihuKXtyZXR1cm4gZW4oKHQsZSk9Pnt0cnl7dC5zdWJzY3JpYmUoZSl9ZmluYWxseXtlLmFkZChuKX19KX0oKCk9PnRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLmRlbGV0ZShzKSksVHMoKSk7cmV0dXJuIHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLnNldChzLGwpLGx9X2FkZFN2Z0ljb25Db25maWcoZSxpLHIpe3JldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQoUW5lKGUsaSksciksdGhpc31fYWRkU3ZnSWNvblNldENvbmZpZyhlLGkpe2xldCByPXRoaXMuX2ljb25TZXRDb25maWdzLmdldChlKTtyZXR1cm4gcj9yLnB1c2goaSk6dGhpcy5faWNvblNldENvbmZpZ3Muc2V0KGUsW2ldKSx0aGlzfV9zdmdFbGVtZW50RnJvbUNvbmZpZyhlKXtpZighZS5zdmdFbGVtZW50KXtsZXQgaT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhlLnN2Z1RleHQpO3RoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoaSxlLm9wdGlvbnMpLGUuc3ZnRWxlbWVudD1pfXJldHVybiBlLnN2Z0VsZW1lbnR9X2dldEljb25Db25maWdGcm9tUmVzb2x2ZXJzKGUsaSl7Zm9yKGxldCByPTA7cjx0aGlzLl9yZXNvbHZlcnMubGVuZ3RoO3IrKyl7bGV0IG89dGhpcy5fcmVzb2x2ZXJzW3JdKGksZSk7aWYobylyZXR1cm4gbU5lKG8pP25ldyBjcChvLnVybCxudWxsLG8ub3B0aW9ucyk6bmV3IGNwKG8sbnVsbCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKFZtLDgpLGooVG0pLGooSHQsOCksaihRcykpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIFkyKG4pe3JldHVybiBuLmNsb25lTm9kZSghMCl9ZnVuY3Rpb24gUW5lKG4sdCl7cmV0dXJuIG4rIjoiK3R9ZnVuY3Rpb24gbU5lKG4pe3JldHVybiEoIW4udXJsfHwhbi5vcHRpb25zKX1uZXcgbnMsbmV3IHRsLG5ldyBucyxuZXcgbnM7dmFyIGdOZT1rbyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksX05lPW5ldyBwZSgiTUFUX0lDT05fREVGQVVMVF9PUFRJT05TIiksdk5lPW5ldyBwZSgibWF0LWljb24tbG9jYXRpb24iLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7bGV0IG49am8oSHQpLHQ9bj9uLmxvY2F0aW9uOm51bGw7cmV0dXJue2dldFBhdGhuYW1lOigpPT50P3QucGF0aG5hbWUrdC5zZWFyY2g6IiJ9fX0pLEtuZT1bImNsaXAtcGF0aCIsImNvbG9yLXByb2ZpbGUiLCJzcmMiLCJjdXJzb3IiLCJmaWxsIiwiZmlsdGVyIiwibWFya2VyIiwibWFya2VyLXN0YXJ0IiwibWFya2VyLW1pZCIsIm1hcmtlci1lbmQiLCJtYXNrIiwic3Ryb2tlIl0sYk5lPUtuZS5tYXAobj0+YFske259XWApLmpvaW4oIiwgIikseE5lPS9edXJsXChbJyJdPyMoLio/KVsnIl0/XCkkLyxHdD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZ05le2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcihlKSx0aGlzLl9pY29uUmVnaXN0cnk9aSx0aGlzLl9sb2NhdGlvbj1vLHRoaXMuX2Vycm9ySGFuZGxlcj1zLHRoaXMuX2lubGluZT0hMSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1bXSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPVNuLkVNUFRZLGEmJihhLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1hLmNvbG9yKSxhLmZvbnRTZXQmJih0aGlzLmZvbnRTZXQ9YS5mb250U2V0KSkscnx8ZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIil9Z2V0IGlubGluZSgpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGlubGluZShlKXt0aGlzLl9pbmxpbmU9UnQoZSl9Z2V0IHN2Z0ljb24oKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbn1zZXQgc3ZnSWNvbihlKXtlIT09dGhpcy5fc3ZnSWNvbiYmKGU/dGhpcy5fdXBkYXRlU3ZnSWNvbihlKTp0aGlzLl9zdmdJY29uJiZ0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKSx0aGlzLl9zdmdJY29uPWUpfWdldCBmb250U2V0KCl7cmV0dXJuIHRoaXMuX2ZvbnRTZXR9c2V0IGZvbnRTZXQoZSl7bGV0IGk9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZShlKTtpIT09dGhpcy5fZm9udFNldCYmKHRoaXMuX2ZvbnRTZXQ9aSx0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKSl9Z2V0IGZvbnRJY29uKCl7cmV0dXJuIHRoaXMuX2ZvbnRJY29ufXNldCBmb250SWNvbihlKXtsZXQgaT10aGlzLl9jbGVhbnVwRm9udFZhbHVlKGUpO2khPT10aGlzLl9mb250SWNvbiYmKHRoaXMuX2ZvbnRJY29uPWksdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCkpfV9zcGxpdEljb25OYW1lKGUpe2lmKCFlKXJldHVyblsiIiwiIl07bGV0IGk9ZS5zcGxpdCgiOiIpO3N3aXRjaChpLmxlbmd0aCl7Y2FzZSAxOnJldHVyblsiIixpWzBdXTtjYXNlIDI6cmV0dXJuIGk7ZGVmYXVsdDp0aHJvdyBFcnJvcihgSW52YWxpZCBpY29uIG5hbWU6ICIke2V9ImApfX1uZ09uSW5pdCgpe3RoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2xldCBlPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcztpZihlJiZlLnNpemUpe2xldCBpPXRoaXMuX2xvY2F0aW9uLmdldFBhdGhuYW1lKCk7aSE9PXRoaXMuX3ByZXZpb3VzUGF0aCYmKHRoaXMuX3ByZXZpb3VzUGF0aD1pLHRoaXMuX3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKGkpKX19bmdPbkRlc3Ryb3koKXt0aGlzLl9jdXJyZW50SWNvbkZldGNoLnVuc3Vic2NyaWJlKCksdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzJiZ0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMuY2xlYXIoKX1fdXNpbmdGb250SWNvbigpe3JldHVybiF0aGlzLnN2Z0ljb259X3NldFN2Z0VsZW1lbnQoZSl7dGhpcy5fY2xlYXJTdmdFbGVtZW50KCk7bGV0IGk9dGhpcy5fbG9jYXRpb24uZ2V0UGF0aG5hbWUoKTt0aGlzLl9wcmV2aW91c1BhdGg9aSx0aGlzLl9jYWNoZUNoaWxkcmVuV2l0aEV4dGVybmFsUmVmZXJlbmNlcyhlKSx0aGlzLl9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyhpKSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZSl9X2NsZWFyU3ZnRWxlbWVudCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPWUuY2hpbGROb2Rlcy5sZW5ndGg7Zm9yKHRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcyYmdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzLmNsZWFyKCk7aS0tOyl7bGV0IHI9ZS5jaGlsZE5vZGVzW2ldOygxIT09ci5ub2RlVHlwZXx8InN2ZyI9PT1yLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiZyLnJlbW92ZSgpfX1fdXBkYXRlRm9udEljb25DbGFzc2VzKCl7aWYoIXRoaXMuX3VzaW5nRm9udEljb24oKSlyZXR1cm47bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9KHRoaXMuZm9udFNldD90aGlzLl9pY29uUmVnaXN0cnkuY2xhc3NOYW1lRm9yRm9udEFsaWFzKHRoaXMuZm9udFNldCkuc3BsaXQoLyArLyk6dGhpcy5faWNvblJlZ2lzdHJ5LmdldERlZmF1bHRGb250U2V0Q2xhc3MoKSkuZmlsdGVyKHI9PnIubGVuZ3RoPjApO3RoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QucmVtb3ZlKHIpKSxpLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QuYWRkKHIpKSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1pLHRoaXMuZm9udEljb24hPT10aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MmJiFpLmluY2x1ZGVzKCJtYXQtbGlnYXR1cmUtZm9udCIpJiYodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiZlLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzKSx0aGlzLmZvbnRJY29uJiZlLmNsYXNzTGlzdC5hZGQodGhpcy5mb250SWNvbiksdGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzPXRoaXMuZm9udEljb24pfV9jbGVhbnVwRm9udFZhbHVlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9lLnRyaW0oKS5zcGxpdCgiICIpWzBdOmV9X3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKGUpe2xldCBpPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcztpJiZpLmZvckVhY2goKHIsbyk9PntyLmZvckVhY2gocz0+e28uc2V0QXR0cmlidXRlKHMubmFtZSxgdXJsKCcke2V9IyR7cy52YWx1ZX0nKWApfSl9KX1fY2FjaGVDaGlsZHJlbldpdGhFeHRlcm5hbFJlZmVyZW5jZXMoZSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yQWxsKGJOZSkscj10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXM9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzfHxuZXcgTWFwO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKUtuZS5mb3JFYWNoKHM9PntsZXQgYT1pW29dLGw9YS5nZXRBdHRyaWJ1dGUocyksYz1sP2wubWF0Y2goeE5lKTpudWxsO2lmKGMpe2xldCB1PXIuZ2V0KGEpO3V8fCh1PVtdLHIuc2V0KGEsdSkpLHUucHVzaCh7bmFtZTpzLHZhbHVlOmNbMV19KX19KX1fdXBkYXRlU3ZnSWNvbihlKXtpZih0aGlzLl9zdmdOYW1lc3BhY2U9bnVsbCx0aGlzLl9zdmdOYW1lPW51bGwsdGhpcy5fY3VycmVudEljb25GZXRjaC51bnN1YnNjcmliZSgpLGUpe2xldFtpLHJdPXRoaXMuX3NwbGl0SWNvbk5hbWUoZSk7aSYmKHRoaXMuX3N2Z05hbWVzcGFjZT1pKSxyJiYodGhpcy5fc3ZnTmFtZT1yKSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPXRoaXMuX2ljb25SZWdpc3RyeS5nZXROYW1lZFN2Z0ljb24ocixpKS5waXBlKFF0KDEpKS5zdWJzY3JpYmUobz0+dGhpcy5fc2V0U3ZnRWxlbWVudChvKSxvPT57dGhpcy5fZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKG5ldyBFcnJvcihgRXJyb3IgcmV0cmlldmluZyBpY29uICR7aX06JHtyfSEgJHtvLm1lc3NhZ2V9YCkpfSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKHp2KSx2bygiYXJpYS1oaWRkZW4iKSxNKHZOZSksTShRcyksTShfTmUsOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1pY29uIl1dLGhvc3RBdHRyczpbInJvbGUiLCJpbWciLDEsIm1hdC1pY29uIiwibm90cmFuc2xhdGUiXSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJkYXRhLW1hdC1pY29uLXR5cGUiLGkuX3VzaW5nRm9udEljb24oKT8iZm9udCI6InN2ZyIpKCJkYXRhLW1hdC1pY29uLW5hbWUiLGkuX3N2Z05hbWV8fGkuZm9udEljb24pKCJkYXRhLW1hdC1pY29uLW5hbWVzcGFjZSIsaS5fc3ZnTmFtZXNwYWNlfHxpLmZvbnRTZXQpKCJmb250SWNvbiIsaS5fdXNpbmdGb250SWNvbigpP2kuZm9udEljb246bnVsbCksZXQoIm1hdC1pY29uLWlubGluZSIsaS5pbmxpbmUpKCJtYXQtaWNvbi1uby1jb2xvciIsInByaW1hcnkiIT09aS5jb2xvciYmImFjY2VudCIhPT1pLmNvbG9yJiYid2FybiIhPT1pLmNvbG9yKSl9LGlucHV0czp7Y29sb3I6ImNvbG9yIixpbmxpbmU6ImlubGluZSIsc3ZnSWNvbjoic3ZnSWNvbiIsZm9udFNldDoiZm9udFNldCIsZm9udEljb246ImZvbnRJY29uIn0sZXhwb3J0QXM6WyJtYXRJY29uIl0sZmVhdHVyZXM6W3R0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZE5lLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoKSxWbigwKSl9LHN0eWxlczpbIi5tYXQtaWNvbnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1pY29uLm1hdC1pY29uLWlubGluZXtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O3dpZHRoOmluaGVyaXR9Lm1hdC1pY29uLm1hdC1saWdhdHVyZS1mb250W2ZvbnRJY29uXTo6YmVmb3Jle2NvbnRlbnQ6YXR0cihmb250SWNvbil9W2Rpcj1ydGxdIC5tYXQtaWNvbi1ydGwtbWlycm9ye3RyYW5zZm9ybTpzY2FsZSgtMSwgMSl9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue21hcmdpbjphdXRvfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHBuPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltsbixsbl19KSxufSkoKSxDTmU9WyIqIixbWyJtYXQtdG9vbGJhci1yb3ciXV1dLE1OZT1bIioiLCJtYXQtdG9vbGJhci1yb3ciXSx3TmU9a28oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pLFNOZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRvb2xiYXItcm93Il1dLGhvc3RBdHRyczpbMSwibWF0LXRvb2xiYXItcm93Il0sZXhwb3J0QXM6WyJtYXRUb29sYmFyUm93Il19KSxufSkoKSxabmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHdOZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSksdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9kb2N1bWVudD1yfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuX2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKSx0aGlzLl90b29sYmFyUm93cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpKSl9X2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0ob2kpLE0oSHQpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdG9vbGJhciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiZFaShyLFNOZSw1KSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLl90b29sYmFyUm93cz1vKX19LGhvc3RBdHRyczpbMSwibWF0LXRvb2xiYXIiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmZXQoIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLGkuX3Rvb2xiYXJSb3dzLmxlbmd0aD4wKSgibWF0LXRvb2xiYXItc2luZ2xlLXJvdyIsMD09PWkuX3Rvb2xiYXJSb3dzLmxlbmd0aCl9LGlucHV0czp7Y29sb3I6ImNvbG9yIn0sZXhwb3J0QXM6WyJtYXRUb29sYmFyIl0sZmVhdHVyZXM6W3R0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6TU5lLGRlY2xzOjIsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoQ05lKSxWbigwKSxWbigxLDEpKX0sc3R5bGVzOlsiLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRvb2xiYXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3dpZHRoOjEwMCU7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJX0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W2xuLGxuXX0pLG59KSgpO2Z1bmN0aW9uIFFIKG4pe3JldHVybiBuLnN0YXRlIT09T2UuTk9UX0xPQURFRCYmbi5zdGF0ZSE9PU9lLkxPQURJTkd9dmFyIFROZT12cihSZWUsU2UoWEksbj0+UUgobik/ey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MscmVsb2FkRW5hYmxlZDohbi5zZXR0aW5ncy5yZWxvYWRFbmFibGVkfX06biksU2UoUUksKG4se3BlcmlvZEluTXM6dH0pPT57aWYoIVFIKG4pKXJldHVybiBuO2xldCBlPXQ+PTNlND90Om4uc2V0dGluZ3MucmVsb2FkUGVyaW9kSW5NcztyZXR1cm57Li4ubixzZXR0aW5nczp7Li4ubi5zZXR0aW5ncyxyZWxvYWRQZXJpb2RJbk1zOmV9fX0pLFNlKEtJLChuLHtzaXplOnR9KT0+e2lmKCFRSChuKSlyZXR1cm4gbjtsZXQgZT10PjA/dDpuLnNldHRpbmdzLnBhZ2VTaXplO3JldHVybnsuLi5uLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLHBhZ2VTaXplOmV9fX0pLFNlKFljLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57bGV0IGU9e307cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0LnBhZ2VTaXplKSYmdC5wYWdlU2l6ZT4wJiYoZS5wYWdlU2l6ZT1OdW1iZXIodC5wYWdlU2l6ZSkpLCJib29sZWFuIj09dHlwZW9mIHQuYXV0b1JlbG9hZCYmKGUucmVsb2FkRW5hYmxlZD10LmF1dG9SZWxvYWQpLE51bWJlci5pc0Zpbml0ZSh0LmF1dG9SZWxvYWRQZXJpb2RJbk1zKSYmdC5hdXRvUmVsb2FkUGVyaW9kSW5Ncz4zZTQmJihlLnJlbG9hZFBlcmlvZEluTXM9TnVtYmVyKHQuYXV0b1JlbG9hZFBlcmlvZEluTXMpKSx7Li4ubixzZXR0aW5nczp7Li4ubi5zZXR0aW5ncywuLi5lfX19KSk7ZnVuY3Rpb24gJG5lKG4sdCl7cmV0dXJuIFROZShuLHQpfXZhciBETmU9WyJpbnB1dCJdLEFOZT1bImxhYmVsIl0sSU5lPWZ1bmN0aW9uKG4pe3JldHVybntlbnRlckR1cmF0aW9uOm59fSxQTmU9WyIqIl0sUk5lPW5ldyBwZSgibWF0LWNoZWNrYm94LWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57Y29sb3I6ImFjY2VudCIsY2xpY2tBY3Rpb246ImNoZWNrLWluZGV0ZXJtaW5hdGUifX19KTt2YXIgT05lPTAsZWllPXtjb2xvcjoiYWNjZW50IixjbGlja0FjdGlvbjoiY2hlY2staW5kZXRlcm1pbmF0ZSJ9LGtOZT17cHJvdmlkZTpObyx1c2VFeGlzdGluZzpKbigoKT0+eWwpLG11bHRpOiEwfSxGTmU9b2Moa28ocW8oc28oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pKSkpLE5OZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRk5le2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3N1cGVyKGkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXIsdGhpcy5fbmdab25lPW8sdGhpcy5fYW5pbWF0aW9uTW9kZT1hLHRoaXMuX29wdGlvbnM9bCx0aGlzLmFyaWFMYWJlbD0iIix0aGlzLmFyaWFMYWJlbGxlZGJ5PW51bGwsdGhpcy5sYWJlbFBvc2l0aW9uPSJhZnRlciIsdGhpcy5uYW1lPW51bGwsdGhpcy5jaGFuZ2U9bmV3IEcsdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlPW5ldyBHLHRoaXMuX29uVG91Y2hlZD0oKT0+e30sdGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzPSIiLHRoaXMuX2N1cnJlbnRDaGVja1N0YXRlPTAsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj0oKT0+e30sdGhpcy5fY2hlY2tlZD0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9pbmRldGVybWluYXRlPSExLHRoaXMuX29wdGlvbnM9dGhpcy5fb3B0aW9uc3x8ZWllLHRoaXMuY29sb3I9dGhpcy5kZWZhdWx0Q29sb3I9dGhpcy5fb3B0aW9ucy5jb2xvcnx8ZWllLmNvbG9yLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQocyl8fDAsdGhpcy5pZD10aGlzLl91bmlxdWVJZD1gJHtlfSR7KytPTmV9YH1nZXQgaW5wdXRJZCgpe3JldHVybmAke3RoaXMuaWR8fHRoaXMuX3VuaXF1ZUlkfS1pbnB1dGB9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZChlKXt0aGlzLl9yZXF1aXJlZD1SdChlKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zeW5jSW5kZXRlcm1pbmF0ZSh0aGlzLl9pbmRldGVybWluYXRlKX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLl9jaGVja2VkfXNldCBjaGVja2VkKGUpe2xldCBpPVJ0KGUpO2khPXRoaXMuY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXtsZXQgaT1SdChlKTtpIT09dGhpcy5kaXNhYmxlZCYmKHRoaXMuX2Rpc2FibGVkPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBpbmRldGVybWluYXRlKCl7cmV0dXJuIHRoaXMuX2luZGV0ZXJtaW5hdGV9c2V0IGluZGV0ZXJtaW5hdGUoZSl7bGV0IGk9ZSE9dGhpcy5faW5kZXRlcm1pbmF0ZTt0aGlzLl9pbmRldGVybWluYXRlPVJ0KGUpLGkmJih0aGlzLl90cmFuc2l0aW9uQ2hlY2tTdGF0ZSh0aGlzLl9pbmRldGVybWluYXRlPzM6dGhpcy5jaGVja2VkPzE6MiksdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlLmVtaXQodGhpcy5faW5kZXRlcm1pbmF0ZSkpLHRoaXMuX3N5bmNJbmRldGVybWluYXRlKHRoaXMuX2luZGV0ZXJtaW5hdGUpfV9pc1JpcHBsZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5kaXNhYmxlZH1fb25MYWJlbFRleHRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9d3JpdGVWYWx1ZShlKXt0aGlzLmNoZWNrZWQ9ISFlfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lfV9nZXRBcmlhQ2hlY2tlZCgpe3JldHVybiB0aGlzLmNoZWNrZWQ/InRydWUiOnRoaXMuaW5kZXRlcm1pbmF0ZT8ibWl4ZWQiOiJmYWxzZSJ9X3RyYW5zaXRpb25DaGVja1N0YXRlKGUpe2xldCBpPXRoaXMuX2N1cnJlbnRDaGVja1N0YXRlLHI9dGhpcy5fZ2V0QW5pbWF0aW9uVGFyZ2V0RWxlbWVudCgpO2lmKGkhPT1lJiZyJiYodGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzJiZyLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzKSx0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3M9dGhpcy5fZ2V0QW5pbWF0aW9uQ2xhc3NGb3JDaGVja1N0YXRlVHJhbnNpdGlvbihpLGUpLHRoaXMuX2N1cnJlbnRDaGVja1N0YXRlPWUsdGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzLmxlbmd0aD4wKSl7ci5jbGFzc0xpc3QuYWRkKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyk7bGV0IG89dGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3NldFRpbWVvdXQoKCk9PntyLmNsYXNzTGlzdC5yZW1vdmUobyl9LDFlMyl9KX19X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4odGhpcy5jaGVja2VkKSx0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KHRoaXMuY2hlY2tlZCkpLHRoaXMuX2lucHV0RWxlbWVudCYmKHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQ9dGhpcy5jaGVja2VkKX10b2dnbGUoKXt0aGlzLmNoZWNrZWQ9IXRoaXMuY2hlY2tlZCx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMuY2hlY2tlZCl9X2hhbmRsZUlucHV0Q2xpY2soKXtsZXQgZT10aGlzLl9vcHRpb25zPy5jbGlja0FjdGlvbjt0aGlzLmRpc2FibGVkfHwibm9vcCI9PT1lPyF0aGlzLmRpc2FibGVkJiYibm9vcCI9PT1lJiYodGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hlY2tlZD10aGlzLmNoZWNrZWQsdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaW5kZXRlcm1pbmF0ZT10aGlzLmluZGV0ZXJtaW5hdGUpOih0aGlzLmluZGV0ZXJtaW5hdGUmJiJjaGVjayIhPT1lJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5faW5kZXRlcm1pbmF0ZT0hMSx0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2UuZW1pdCh0aGlzLl9pbmRldGVybWluYXRlKX0pLHRoaXMuX2NoZWNrZWQ9IXRoaXMuX2NoZWNrZWQsdGhpcy5fdHJhbnNpdGlvbkNoZWNrU3RhdGUodGhpcy5fY2hlY2tlZD8xOjIpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpKX1fb25JbnRlcmFjdGlvbkV2ZW50KGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9X29uQmx1cigpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfV9nZXRBbmltYXRpb25DbGFzc0ZvckNoZWNrU3RhdGVUcmFuc2l0aW9uKGUsaSl7aWYoIk5vb3BBbmltYXRpb25zIj09PXRoaXMuX2FuaW1hdGlvbk1vZGUpcmV0dXJuIiI7c3dpdGNoKGUpe2Nhc2UgMDppZigxPT09aSlyZXR1cm4gdGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0NoZWNrZWQ7aWYoMz09aSlyZXR1cm4gdGhpcy5fY2hlY2tlZD90aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7YnJlYWs7Y2FzZSAyOnJldHVybiAxPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLnVuY2hlY2tlZFRvQ2hlY2tlZDp0aGlzLl9hbmltYXRpb25DbGFzc2VzLnVuY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZTtjYXNlIDE6cmV0dXJuIDI9PT1pP3RoaXMuX2FuaW1hdGlvbkNsYXNzZXMuY2hlY2tlZFRvVW5jaGVja2VkOnRoaXMuX2FuaW1hdGlvbkNsYXNzZXMuY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZTtjYXNlIDM6cmV0dXJuIDE9PT1pP3RoaXMuX2FuaW1hdGlvbkNsYXNzZXMuaW5kZXRlcm1pbmF0ZVRvQ2hlY2tlZDp0aGlzLl9hbmltYXRpb25DbGFzc2VzLmluZGV0ZXJtaW5hdGVUb1VuY2hlY2tlZH1yZXR1cm4iIn1fc3luY0luZGV0ZXJtaW5hdGUoZSl7bGV0IGk9dGhpcy5faW5wdXRFbGVtZW50O2kmJihpLm5hdGl2ZUVsZW1lbnQuaW5kZXRlcm1pbmF0ZT1lKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe25sKCl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoRE5lLDUpLG90KEFOZSw1KSxvdChZbyw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5faW5wdXRFbGVtZW50PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9sYWJlbEVsZW1lbnQ9ci5maXJzdCksTmUocj1MZSgpKSYmKGkucmlwcGxlPXIuZmlyc3QpfX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGFyaWFEZXNjcmliZWRieTpbImFyaWEtZGVzY3JpYmVkYnkiLCJhcmlhRGVzY3JpYmVkYnkiXSxpZDoiaWQiLHJlcXVpcmVkOiJyZXF1aXJlZCIsbGFiZWxQb3NpdGlvbjoibGFiZWxQb3NpdGlvbiIsbmFtZToibmFtZSIsdmFsdWU6InZhbHVlIixjaGVja2VkOiJjaGVja2VkIixkaXNhYmxlZDoiZGlzYWJsZWQiLGluZGV0ZXJtaW5hdGU6ImluZGV0ZXJtaW5hdGUifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsaW5kZXRlcm1pbmF0ZUNoYW5nZToiaW5kZXRlcm1pbmF0ZUNoYW5nZSJ9LGZlYXR1cmVzOlt0dF19KSxufSkoKSx5bD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTk5le2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3N1cGVyKCJtYXQtY2hlY2tib3gtIixlLGksbyxzLGEsbCksdGhpcy5fZm9jdXNNb25pdG9yPXIsdGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcz17dW5jaGVja2VkVG9DaGVja2VkOiJtYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtY2hlY2tlZCIsdW5jaGVja2VkVG9JbmRldGVybWluYXRlOiJtYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSIsY2hlY2tlZFRvVW5jaGVja2VkOiJtYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLXVuY2hlY2tlZCIsY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZToibWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC1pbmRldGVybWluYXRlIixpbmRldGVybWluYXRlVG9DaGVja2VkOiJtYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQiLGluZGV0ZXJtaW5hdGVUb1VuY2hlY2tlZDoibWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQifX1fY3JlYXRlQ2hhbmdlRXZlbnQoZSl7bGV0IGk9bmV3IGNsYXNze307cmV0dXJuIGkuc291cmNlPXRoaXMsaS5jaGVja2VkPWUsaX1fZ2V0QW5pbWF0aW9uVGFyZ2V0RWxlbWVudCgpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9bmdBZnRlclZpZXdJbml0KCl7c3VwZXIubmdBZnRlclZpZXdJbml0KCksdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCkuc3Vic2NyaWJlKGU9PntlfHx0aGlzLl9vbkJsdXIoKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpfV9vbklucHV0Q2xpY2soZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxzdXBlci5faGFuZGxlSW5wdXRDbGljaygpfWZvY3VzKGUsaSl7ZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5faW5wdXRFbGVtZW50LGUsaSk6dGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0obm4pLE0oRnIpLE0oX3QpLHZvKCJ0YWJpbmRleCIpLE0oUGksOCksTShSTmUsOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1jaGVja2JveCJdXSxob3N0QXR0cnM6WzEsIm1hdC1jaGVja2JveCJdLGhvc3RWYXJzOjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKF9zKCJpZCIsaS5pZCksemUoInRhYmluZGV4IixudWxsKSgiYXJpYS1sYWJlbCIsbnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbnVsbCksZXQoIm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIixpLmluZGV0ZXJtaW5hdGUpKCJtYXQtY2hlY2tib3gtY2hlY2tlZCIsaS5jaGVja2VkKSgibWF0LWNoZWNrYm94LWRpc2FibGVkIixpLmRpc2FibGVkKSgibWF0LWNoZWNrYm94LWxhYmVsLWJlZm9yZSIsImJlZm9yZSI9PWkubGFiZWxQb3NpdGlvbikoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkpfSxpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGNvbG9yOiJjb2xvciIsdGFiSW5kZXg6InRhYkluZGV4In0sZXhwb3J0QXM6WyJtYXRDaGVja2JveCJdLGZlYXR1cmVzOlskdChba05lXSksdHRdLG5nQ29udGVudFNlbGVjdG9yczpQTmUsZGVjbHM6MTcsdmFyczoyMSxjb25zdHM6W1sxLCJtYXQtY2hlY2tib3gtbGF5b3V0Il0sWyJsYWJlbCIsIiJdLFsxLCJtYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyIl0sWyJ0eXBlIiwiY2hlY2tib3giLDEsIm1hdC1jaGVja2JveC1pbnB1dCIsImNkay12aXN1YWxseS1oaWRkZW4iLDMsImlkIiwicmVxdWlyZWQiLCJjaGVja2VkIiwiZGlzYWJsZWQiLCJ0YWJJbmRleCIsImNoYW5nZSIsImNsaWNrIl0sWyJpbnB1dCIsIiJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtY2hlY2tib3gtcmlwcGxlIiwibWF0LWZvY3VzLWluZGljYXRvciIsMywibWF0UmlwcGxlVHJpZ2dlciIsIm1hdFJpcHBsZURpc2FibGVkIiwibWF0UmlwcGxlUmFkaXVzIiwibWF0UmlwcGxlQ2VudGVyZWQiLCJtYXRSaXBwbGVBbmltYXRpb24iXSxbMSwibWF0LXJpcHBsZS1lbGVtZW50IiwibWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxlIl0sWzEsIm1hdC1jaGVja2JveC1mcmFtZSJdLFsxLCJtYXQtY2hlY2tib3gtYmFja2dyb3VuZCJdLFsidmVyc2lvbiIsIjEuMSIsImZvY3VzYWJsZSIsImZhbHNlIiwidmlld0JveCIsIjAgMCAyNCAyNCIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWF0LWNoZWNrYm94LWNoZWNrbWFyayJdLFsiZmlsbCIsIm5vbmUiLCJzdHJva2UiLCJ3aGl0ZSIsImQiLCJNNC4xLDEyLjcgOSwxNy42IDIwLjMsNi4zIiwxLCJtYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGgiXSxbMSwibWF0LWNoZWNrYm94LW1peGVkbWFyayJdLFsxLCJtYXQtY2hlY2tib3gtbGFiZWwiLDMsImNka09ic2VydmVDb250ZW50Il0sWyJjaGVja2JveExhYmVsIiwiIl0sWzIsImRpc3BsYXkiLCJub25lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoeGkoKSxfKDAsImxhYmVsIiwwLDEpKDIsInNwYW4iLDIpKDMsImlucHV0IiwzLDQpLFAoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX29uSW50ZXJhY3Rpb25FdmVudChvKX0pKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX29uSW5wdXRDbGljayhvKX0pLHYoKSxfKDUsInNwYW4iLDUpLE8oNiwic3BhbiIsNiksdigpLE8oNywic3BhbiIsNyksXyg4LCJzcGFuIiw4KSxJbigpLF8oOSwic3ZnIiw5KSxPKDEwLCJwYXRoIiwxMCksdigpLEpzKCksTygxMSwic3BhbiIsMTEpLHYoKSgpLF8oMTIsInNwYW4iLDEyLDEzKSxQKCJjZGtPYnNlcnZlQ29udGVudCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25MYWJlbFRleHRDaGFuZ2UoKX0pLF8oMTQsInNwYW4iLDE0KSxBKDE1LCJceGEwIiksdigpLFZuKDE2KSx2KCkoKSksMiZlKXtsZXQgcj0kZSgxKSxvPSRlKDEzKTt6ZSgiZm9yIixpLmlucHV0SWQpLEMoMiksZXQoIm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXItbm8tc2lkZS1tYXJnaW4iLCFvLnRleHRDb250ZW50fHwhby50ZXh0Q29udGVudC50cmltKCkpLEMoMSkseSgiaWQiLGkuaW5wdXRJZCkoInJlcXVpcmVkIixpLnJlcXVpcmVkKSgiY2hlY2tlZCIsaS5jaGVja2VkKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJ0YWJJbmRleCIsaS50YWJJbmRleCksemUoInZhbHVlIixpLnZhbHVlKSgibmFtZSIsaS5uYW1lKSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLGkuYXJpYUxhYmVsbGVkYnkpKCJhcmlhLWNoZWNrZWQiLGkuX2dldEFyaWFDaGVja2VkKCkpKCJhcmlhLWRlc2NyaWJlZGJ5IixpLmFyaWFEZXNjcmliZWRieSksQygyKSx5KCJtYXRSaXBwbGVUcmlnZ2VyIixyKSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZVJhZGl1cyIsMjApKCJtYXRSaXBwbGVDZW50ZXJlZCIsITApKCJtYXRSaXBwbGVBbmltYXRpb24iLE9uKDE5LElOZSwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZT8wOjE1MCkpfX0sZGVwZW5kZW5jaWVzOltZbyx3aF0sc3R5bGVzOlsnQGtleWZyYW1lcyBtYXQtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kezAle29wYWNpdHk6MH01MCV7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1mYWRlLW91dC1iYWNrZ3JvdW5kezAlLDUwJXtvcGFjaXR5OjF9MTAwJXtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRoezAlLDUwJXtzdHJva2UtZGFzaG9mZnNldDoyMi45MTAyNTl9NTAle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKX0xMDAle3N0cm9rZS1kYXNob2Zmc2V0OjB9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya3swJSw2OC4yJXt0cmFuc2Zvcm06c2NhbGVYKDApfTY4LjIle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAsIDEpfTEwMCV7dHJhbnNmb3JtOnNjYWxlWCgxKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtY2hlY2tlZC11bmNoZWNrZWQtY2hlY2ttYXJrLXBhdGh7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpO3N0cm9rZS1kYXNob2Zmc2V0OjB9dG97c3Ryb2tlLWRhc2hvZmZzZXQ6LTIyLjkxMDI1OX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLWNoZWNrbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKTtvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1jaGVja21hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTtvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKTtvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtbWl4ZWRtYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4xNCwgMCwgMCwgMSk7b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoMzE1ZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQtbWl4ZWRtYXJrezAle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246bGluZWFyO29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGVYKDEpfTMyLjglLDEwMCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZVgoMCl9fS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWZyYW1le3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtY2hlY2tib3h7ZGlzcGxheTppbmxpbmUtYmxvY2s7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtjdXJzb3I6cG9pbnRlcjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWNoZWNrYm94Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxlKXtvcGFjaXR5Oi4xNn0ubWF0LWNoZWNrYm94IC5tYXQtY2hlY2tib3gtcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6Y2FsYyg1MCUgLSAyMHB4KTt0b3A6Y2FsYyg1MCUgLSAyMHB4KTtoZWlnaHQ6NDBweDt3aWR0aDo0MHB4O3otaW5kZXg6MTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtY2hlY2tib3gtbGF5b3V0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjppbmhlcml0O2FsaWduLWl0ZW1zOmJhc2VsaW5lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OmlubGluZS1mbGV4O3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LWNoZWNrYm94LWxhYmVsey13ZWJraXQtdXNlci1zZWxlY3Q6YXV0bzt1c2VyLXNlbGVjdDphdXRvfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjA7bWFyZ2luOmF1dG87bWFyZ2luLXJpZ2h0OjhweDtvcmRlcjowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6MTZweDtmbGV4LXNocmluazowfVtkaXI9cnRsXSAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OmF1dG99Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXItbm8tc2lkZS1tYXJnaW57bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0ubWF0LWNoZWNrYm94LWZyYW1le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItc3R5bGU6c29saWR9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtY2hlY2tib3gtZnJhbWV7dHJhbnNpdGlvbjpub25lfS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSksb3BhY2l0eSA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7LXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6ZXhhY3Q7Y29sb3ItYWRqdXN0OmV4YWN0fS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZDpub25lfS5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RyYW5zZm9ybTpub25lfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyOmhvdmVyIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTouMDR9Lm1hdC1jaGVja2JveC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjEyfS5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXI6aG92ZXIgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5OjB9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcjpob3ZlciAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle2Rpc3BsYXk6bm9uZX19Lm1hdC1jaGVja2JveC1jaGVja21hcmt7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJX0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjIyLjkxMDI1OTtzdHJva2UtZGFzaGFycmF5OjIyLjkxMDI1OTtzdHJva2Utd2lkdGg6Mi4xMzMzMzMzMzMzcHh9LmNkay1oaWdoLWNvbnRyYXN0LWJsYWNrLW9uLXdoaXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiMwMDAgIWltcG9ydGFudH0ubWF0LWNoZWNrYm94LW1peGVkbWFya3t3aWR0aDpjYWxjKDEwMCUgLSA2cHgpO2hlaWdodDoycHg7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZVgoMCkgcm90YXRlKDBkZWcpO2JvcmRlci1yYWRpdXM6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHg7bWFyZ2luLXRvcDoycHh9Lm1hdC1jaGVja2JveC1sYWJlbC1iZWZvcmUgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7b3JkZXI6MTttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OmF1dG99W2Rpcj1ydGxdIC5tYXQtY2hlY2tib3gtbGFiZWwtYmVmb3JlIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjhweH0ubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmt7b3BhY2l0eToxfS5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjB9Lm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre3RyYW5zZm9ybTpzY2FsZVgoMSkgcm90YXRlKC00NWRlZyl9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDowfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoMGRlZyl9Lm1hdC1jaGVja2JveC11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWNoZWNrYm94LWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveC1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWNoZWNrZWQtY2hlY2ttYXJrLXBhdGh9Lm1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kfS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHthbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aH0ubWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2FuaW1hdGlvbjo5MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1jaGVja21hcmt9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmt7YW5pbWF0aW9uOjUwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1jaGVja21hcmt9Lm1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246NTAwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FuaW1hdGlvbjoxODBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1mYWRlLW91dC1iYWNrZ3JvdW5kfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246MzAwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtaW5wdXR7Ym90dG9tOjA7bGVmdDo1MCV9Lm1hdC1jaGVja2JveC1pbnB1dDpmb2N1c34ubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2NvbnRlbnQ6IiJ9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTE5lPXtwcm92aWRlOkxvLHVzZUV4aXN0aW5nOkpuKCgpPT5CTmUpLG11bHRpOiEwfSxCTmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGd3e31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1jaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiXV0sZmVhdHVyZXM6WyR0KFtMTmVdKSx0dF19KSxufSkoKSx0aWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLExzPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltfbCxsbixvZCx0aWUsbG4sdGllXX0pLG59KSgpLGlpZT1sYSh7cGFzc2l2ZTohMH0pLHJpZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cz1uZXcgTWFwfW1vbml0b3IoZSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gZW87bGV0IGk9TGEoZSkscj10aGlzLl9tb25pdG9yZWRFbGVtZW50cy5nZXQoaSk7aWYocilyZXR1cm4gci5zdWJqZWN0O2xldCBvPW5ldyBrZSxzPSJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIixhPWw9PnsiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQiIT09bC5hbmltYXRpb25OYW1lfHxpLmNsYXNzTGlzdC5jb250YWlucyhzKT8iY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIj09PWwuYW5pbWF0aW9uTmFtZSYmaS5jbGFzc0xpc3QuY29udGFpbnMocykmJihpLmNsYXNzTGlzdC5yZW1vdmUocyksdGhpcy5fbmdab25lLnJ1bigoKT0+by5uZXh0KHt0YXJnZXQ6bC50YXJnZXQsaXNBdXRvZmlsbGVkOiExfSkpKTooaS5jbGFzc0xpc3QuYWRkKHMpLHRoaXMuX25nWm9uZS5ydW4oKCk9Pm8ubmV4dCh7dGFyZ2V0OmwudGFyZ2V0LGlzQXV0b2ZpbGxlZDohMH0pKSl9O3JldHVybiB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpLmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0IixhLGlpZSksaS5jbGFzc0xpc3QuYWRkKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQiKX0pLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzLnNldChpLHtzdWJqZWN0Om8sdW5saXN0ZW46KCk9PntpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0IixhLGlpZSl9fSksb31zdG9wTW9uaXRvcmluZyhlKXtsZXQgaT1MYShlKSxyPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldChpKTtyJiYoci51bmxpc3RlbigpLHIuc3ViamVjdC5jb21wbGV0ZSgpLGkuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIiksaS5jbGFzc0xpc3QucmVtb3ZlKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIiksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZGVsZXRlKGkpKX1uZ09uRGVzdHJveSgpe3RoaXMuX21vbml0b3JlZEVsZW1lbnRzLmZvckVhY2goKGUsaSk9PnRoaXMuc3RvcE1vbml0b3JpbmcoaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKG9pKSxqKF90KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksWkg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLEhOZT1uZXcgcGUoIk1BVF9JTlBVVF9WQUxVRV9BQ0NFU1NPUiIpLFVOZT1bImJ1dHRvbiIsImNoZWNrYm94IiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwicmFkaW8iLCJyYW5nZSIsInJlc2V0Iiwic3VibWl0Il0sek5lPTAsak5lPUR2KGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkpe3RoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj1uLHRoaXMuX3BhcmVudEZvcm09dCx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9ZSx0aGlzLm5nQ29udHJvbD1pLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBrZX19KSxVaD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgak5le2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyx1LGQpe3N1cGVyKGEsbyxzLHIpLHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2F1dG9maWxsTW9uaXRvcj1jLHRoaXMuX2Zvcm1GaWVsZD1kLHRoaXMuX3VpZD0ibWF0LWlucHV0LSIrek5lKyssdGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBrZSx0aGlzLmNvbnRyb2xUeXBlPSJtYXQtaW5wdXQiLHRoaXMuYXV0b2ZpbGxlZD0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl90eXBlPSJ0ZXh0Iix0aGlzLl9yZWFkb25seT0hMSx0aGlzLl9uZXZlckVtcHR5SW5wdXRUeXBlcz1bImRhdGUiLCJkYXRldGltZSIsImRhdGV0aW1lLWxvY2FsIiwibW9udGgiLCJ0aW1lIiwid2VlayJdLmZpbHRlcihmPT5wSCgpLmhhcyhmKSksdGhpcy5faU9TS2V5dXBMaXN0ZW5lcj1mPT57bGV0IG09Zi50YXJnZXQ7IW0udmFsdWUmJjA9PT1tLnNlbGVjdGlvblN0YXJ0JiYwPT09bS5zZWxlY3Rpb25FbmQmJihtLnNldFNlbGVjdGlvblJhbmdlKDEsMSksbS5zZXRTZWxlY3Rpb25SYW5nZSgwLDApKX07bGV0IHA9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGg9cC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3RoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvcj1sfHxwLHRoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWU9dGhpcy52YWx1ZSx0aGlzLmlkPXRoaXMuaWQsaS5JT1MmJnUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntlLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuX2lPU0tleXVwTGlzdGVuZXIpfSksdGhpcy5faXNTZXJ2ZXI9IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcix0aGlzLl9pc05hdGl2ZVNlbGVjdD0ic2VsZWN0Ij09PWgsdGhpcy5faXNUZXh0YXJlYT0idGV4dGFyZWEiPT09aCx0aGlzLl9pc0luRm9ybUZpZWxkPSEhZCx0aGlzLl9pc05hdGl2ZVNlbGVjdCYmKHRoaXMuY29udHJvbFR5cGU9cC5tdWx0aXBsZT8ibWF0LW5hdGl2ZS1zZWxlY3QtbXVsdGlwbGUiOiJtYXQtbmF0aXZlLXNlbGVjdCIpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLm5nQ29udHJvbCYmbnVsbCE9PXRoaXMubmdDb250cm9sLmRpc2FibGVkP3RoaXMubmdDb250cm9sLmRpc2FibGVkOnRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD1SdChlKSx0aGlzLmZvY3VzZWQmJih0aGlzLmZvY3VzZWQ9ITEsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGUpe3RoaXMuX2lkPWV8fHRoaXMuX3VpZH1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWQ/P3RoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoRm8ucmVxdWlyZWQpPz8hMX1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9UnQoZSl9Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy5fdHlwZX1zZXQgdHlwZShlKXt0aGlzLl90eXBlPWV8fCJ0ZXh0Iix0aGlzLl92YWxpZGF0ZVR5cGUoKSwhdGhpcy5faXNUZXh0YXJlYSYmcEgoKS5oYXModGhpcy5fdHlwZSkmJih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudHlwZT10aGlzLl90eXBlKX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yLnZhbHVlfXNldCB2YWx1ZShlKXtlIT09dGhpcy52YWx1ZSYmKHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZT1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Z2V0IHJlYWRvbmx5KCl7cmV0dXJuIHRoaXMuX3JlYWRvbmx5fXNldCByZWFkb25seShlKXt0aGlzLl9yZWFkb25seT1SdChlKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2F1dG9maWxsTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuc3Vic2NyaWJlKGU9Pnt0aGlzLmF1dG9maWxsZWQ9ZS5pc0F1dG9maWxsZWQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSl9bmdPbkNoYW5nZXMoKXt0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmdGhpcy5fYXV0b2ZpbGxNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCksdGhpcy5fcGxhdGZvcm0uSU9TJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuX2lPU0tleXVwTGlzdGVuZXIpfW5nRG9DaGVjaygpe3RoaXMubmdDb250cm9sJiZ0aGlzLnVwZGF0ZUVycm9yU3RhdGUoKSx0aGlzLl9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKSx0aGlzLl9kaXJ0eUNoZWNrUGxhY2Vob2xkZXIoKX1mb2N1cyhlKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoZSl9X2ZvY3VzQ2hhbmdlZChlKXtlIT09dGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fb25JbnB1dCgpe31fZGlydHlDaGVja1BsYWNlaG9sZGVyKCl7bGV0IGU9dGhpcy5fZm9ybUZpZWxkLGk9ZSYmImxlZ2FjeSI9PT1lLmFwcGVhcmFuY2UmJiFlLl9oYXNMYWJlbD8uKCk/bnVsbDp0aGlzLnBsYWNlaG9sZGVyO2lmKGkhPT10aGlzLl9wcmV2aW91c1BsYWNlaG9sZGVyKXtsZXQgcj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fcHJldmlvdXNQbGFjZWhvbGRlcj1pLGk/ci5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIixpKTpyLnJlbW92ZUF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiKX19X2RpcnR5Q2hlY2tOYXRpdmVWYWx1ZSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZTt0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlIT09ZSYmKHRoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWU9ZSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV92YWxpZGF0ZVR5cGUoKXtVTmUuaW5kZXhPZih0aGlzLl90eXBlKX1faXNOZXZlckVtcHR5KCl7cmV0dXJuIHRoaXMuX25ldmVyRW1wdHlJbnB1dFR5cGVzLmluZGV4T2YodGhpcy5fdHlwZSk+LTF9X2lzQmFkSW5wdXQoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsaWRpdHk7cmV0dXJuIGUmJmUuYmFkSW5wdXR9Z2V0IGVtcHR5KCl7cmV0dXJuISh0aGlzLl9pc05ldmVyRW1wdHkoKXx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlfHx0aGlzLl9pc0JhZElucHV0KCl8fHRoaXMuYXV0b2ZpbGxlZCl9Z2V0IHNob3VsZExhYmVsRmxvYXQoKXtpZih0aGlzLl9pc05hdGl2ZVNlbGVjdCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9ZS5vcHRpb25zWzBdO3JldHVybiB0aGlzLmZvY3VzZWR8fGUubXVsdGlwbGV8fCF0aGlzLmVtcHR5fHwhIShlLnNlbGVjdGVkSW5kZXg+LTEmJmkmJmkubGFiZWwpfXJldHVybiB0aGlzLmZvY3VzZWR8fCF0aGlzLmVtcHR5fXNldERlc2NyaWJlZEJ5SWRzKGUpe2UubGVuZ3RoP3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiLGUuam9pbigiICIpKTp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5Iil9b25Db250YWluZXJDbGljaygpe3RoaXMuZm9jdXNlZHx8dGhpcy5mb2N1cygpfV9pc0lubGluZVNlbGVjdCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtyZXR1cm4gdGhpcy5faXNOYXRpdmVTZWxlY3QmJihlLm11bHRpcGxlfHxlLnNpemU+MSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0ob2kpLE0oTnMsMTApLE0oTGgsOCksTShWaCw4KSxNKGNkKSxNKEhOZSwxMCksTShyaWUpLE0oX3QpLE0oc2csOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsIm1hdElucHV0IiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdElucHV0IiwiIl0sWyJzZWxlY3QiLCJtYXROYXRpdmVDb250cm9sIiwiIl0sWyJpbnB1dCIsIm1hdE5hdGl2ZUNvbnRyb2wiLCIiXSxbInRleHRhcmVhIiwibWF0TmF0aXZlQ29udHJvbCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1pbnB1dC1lbGVtZW50IiwibWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbCJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2ZvY3VzQ2hhbmdlZCghMCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fZm9jdXNDaGFuZ2VkKCExKX0pKCJpbnB1dCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25JbnB1dCgpfSksMiZlJiYoX3MoImRpc2FibGVkIixpLmRpc2FibGVkKSgicmVxdWlyZWQiLGkucmVxdWlyZWQpLHplKCJpZCIsaS5pZCkoImRhdGEtcGxhY2Vob2xkZXIiLGkucGxhY2Vob2xkZXIpKCJuYW1lIixpLm5hbWV8fG51bGwpKCJyZWFkb25seSIsaS5yZWFkb25seSYmIWkuX2lzTmF0aXZlU2VsZWN0fHxudWxsKSgiYXJpYS1pbnZhbGlkIixpLmVtcHR5JiZpLnJlcXVpcmVkP251bGw6aS5lcnJvclN0YXRlKSgiYXJpYS1yZXF1aXJlZCIsaS5yZXF1aXJlZCksZXQoIm1hdC1pbnB1dC1zZXJ2ZXIiLGkuX2lzU2VydmVyKSgibWF0LW5hdGl2ZS1zZWxlY3QtaW5saW5lIixpLl9pc0lubGluZVNlbGVjdCgpKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixpZDoiaWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsbmFtZToibmFtZSIscmVxdWlyZWQ6InJlcXVpcmVkIix0eXBlOiJ0eXBlIixlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIiLHVzZXJBcmlhRGVzY3JpYmVkQnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwidXNlckFyaWFEZXNjcmliZWRCeSJdLHZhbHVlOiJ2YWx1ZSIscmVhZG9ubHk6InJlYWRvbmx5In0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6a2gsdXNlRXhpc3Rpbmc6bn1dKSx0dCxGdF19KSxufSkoKSxIYT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOltjZF0saW1wb3J0czpbWkgsYWcsbG4sWkgsYWddfSksbn0pKCk7ZnVuY3Rpb24gR05lKG4sdCl7aWYoMSZuJiYoXygwLCJtYXQtZXJyb3IiKSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSxqZSgiIFJlbG9hZCBwZXJpb2QgaGFzIHRvIGJlIG1pbmltdW0gb2YgIixlLk1JTl9SRUxPQURfUEVSSU9EX0lOX1MsIiBzZWNvbmRzLiAiKX19ZnVuY3Rpb24gV05lKG4sdCl7MSZuJiYoXygwLCJtYXQtZXJyb3IiKSxBKDEsIiBQYWdlIHNpemUgaGFzIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4gIiksdigpKX12YXIgb2llPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnJlbG9hZFRvZ2dsZWQ9bmV3IEcsdGhpcy5yZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZD1uZXcgRyx0aGlzLnBhZ2VTaXplQ2hhbmdlZD1uZXcgRyx0aGlzLk1JTl9SRUxPQURfUEVSSU9EX0lOX1M9MzAsdGhpcy5yZWxvYWRQZXJpb2RDb250cm9sPW5ldyBCaCh0aGlzLk1JTl9SRUxPQURfUEVSSU9EX0lOX1MsW0ZvLnJlcXVpcmVkLEZvLm1pbih0aGlzLk1JTl9SRUxPQURfUEVSSU9EX0lOX1MpXSksdGhpcy5wYWdpbmF0aW9uQ29udHJvbD1uZXcgQmgoMSxbRm8ucmVxdWlyZWQsRm8ubWluKDEpLG49PntsZXQgdD1OdW1iZXIobi52YWx1ZSk7cmV0dXJuIE1hdGgucm91bmQodCk9PT1uLnZhbHVlP251bGw6e2ludGVnZXI6e3ZhbHVlOm4udmFsdWV9fX1dKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IGtlfW5nT25Jbml0KCl7dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSksSHIoNTAwKSxZZSgoKT0+dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbGlkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbGlkJiZ0aGlzLnJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkLmVtaXQoMWUzKnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWx1ZSl9KSx0aGlzLnBhZ2luYXRpb25Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSksSHIoNTAwKSxZZSgoKT0+dGhpcy5wYWdpbmF0aW9uQ29udHJvbC52YWxpZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMucGFnZVNpemVDaGFuZ2VkLmVtaXQodGhpcy5wYWdpbmF0aW9uQ29udHJvbC52YWx1ZSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bmdPbkNoYW5nZXMoZSl7aWYoZS5yZWxvYWRQZXJpb2RJbk1zKXtsZXQgaT1lLnJlbG9hZFBlcmlvZEluTXM7aS5wcmV2aW91c1ZhbHVlIT09aS5jdXJyZW50VmFsdWUmJnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC5zZXRWYWx1ZShpLmN1cnJlbnRWYWx1ZS8xZTMpfWlmKGUucmVsb2FkRW5hYmxlZCYmKGUucmVsb2FkRW5hYmxlZC5jdXJyZW50VmFsdWU/dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLmVuYWJsZSgpOnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC5kaXNhYmxlKCkpLGUucGFnZVNpemUpe2xldCBpPWUucGFnZVNpemU7aS5wcmV2aW91c1ZhbHVlIT09aS5jdXJyZW50VmFsdWUmJnRoaXMucGFnaW5hdGlvbkNvbnRyb2wuc2V0VmFsdWUoaS5jdXJyZW50VmFsdWUpfX1vblJlbG9hZFRvZ2dsZSgpe3RoaXMucmVsb2FkVG9nZ2xlZC5lbWl0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInNldHRpbmdzLWRpYWxvZy1jb21wb25lbnQiXV0saW5wdXRzOntyZWxvYWRFbmFibGVkOiJyZWxvYWRFbmFibGVkIixyZWxvYWRQZXJpb2RJbk1zOiJyZWxvYWRQZXJpb2RJbk1zIixwYWdlU2l6ZToicGFnZVNpemUifSxvdXRwdXRzOntyZWxvYWRUb2dnbGVkOiJyZWxvYWRUb2dnbGVkIixyZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZDoicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLHBhZ2VTaXplQ2hhbmdlZDoicGFnZVNpemVDaGFuZ2VkIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczoxNCx2YXJzOjUsY29uc3RzOltbMSwicmVsb2FkLXRvZ2dsZSJdLFszLCJjaGVja2VkIiwiY2hhbmdlIl0sWyJtYXRJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJwbGFjZWhvbGRlciIsIlJlbG9hZCBQZXJpb2QgKHNlY29uZHMpIiwxLCJyZWxvYWQtcGVyaW9kIiwzLCJmb3JtQ29udHJvbCJdLFs0LCJuZ0lmIl0sWyJtYXRJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJwbGFjZWhvbGRlciIsIlBhZ2luYXRpb24gTGltaXQiLDEsInBhZ2Utc2l6ZSIsMywiZm9ybUNvbnRyb2wiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImgzIiksQSgxLCJTZXR0aW5ncyIpLHYoKSxfKDIsImRpdiIpKDMsImRpdiIsMCkoNCwibWF0LWNoZWNrYm94IiwxKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZWxvYWRUb2dnbGUoKX0pLEEoNSwiUmVsb2FkIGRhdGEiKSx2KCkoKSxfKDYsImRpdiIpKDcsIm1hdC1mb3JtLWZpZWxkIiksTyg4LCJpbnB1dCIsMiksdigpLEUoOSxHTmUsMiwxLCJtYXQtZXJyb3IiLDMpLHYoKSgpLF8oMTAsImRpdiIpKDExLCJtYXQtZm9ybS1maWVsZCIpLE8oMTIsImlucHV0Iiw0KSx2KCksRSgxMyxXTmUsMiwwLCJtYXQtZXJyb3IiLDMpLHYoKSksMiZlJiYoQyg0KSx5KCJjaGVja2VkIixpLnJlbG9hZEVuYWJsZWQpLEMoNCkseSgiZm9ybUNvbnRyb2wiLGkucmVsb2FkUGVyaW9kQ29udHJvbCksQygxKSx5KCJuZ0lmIixpLnJlbG9hZFBlcmlvZENvbnRyb2wuaGFzRXJyb3IoIm1pbiIpfHxpLnJlbG9hZFBlcmlvZENvbnRyb2wuaGFzRXJyb3IoInJlcXVpcmVkIikpLEMoMykseSgiZm9ybUNvbnRyb2wiLGkucGFnaW5hdGlvbkNvbnRyb2wpLEMoMSkseSgibmdJZiIsaS5wYWdpbmF0aW9uQ29udHJvbC5pbnZhbGlkKSl9LGRlcGVuZGVuY2llczpbQmUsQnYscUgsVjIsbXcseWwsSHRlLHBkLFVoXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxNXB4O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gZGl2W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIG1hcmdpbjogMTBweCAwO1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgPiBbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG5oM1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDIwcHg7XG59XG5cbi5yZWxvYWQtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59Il19KSxufSkoKSxzaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWxvYWRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChZTSksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChYTSksdGhpcy5wYWdlU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoS20pfW9uUmVsb2FkVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goWEkoKSl9b25SZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFFJKHtwZXJpb2RJbk1zOmV9KSl9b25QYWdlU2l6ZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChLSSh7c2l6ZTplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtZGlhbG9nIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlbG9hZEVuYWJsZWQiLCJyZWxvYWRQZXJpb2RJbk1zIiwicGFnZVNpemUiLCJyZWxvYWRUb2dnbGVkIiwicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLCJwYWdlU2l6ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsInNldHRpbmdzLWRpYWxvZy1jb21wb25lbnQiLDApLFAoInJlbG9hZFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZWxvYWRUb2dnbGVkKCl9KSgicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQobyl9KSgicGFnZVNpemVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBhZ2VTaXplQ2hhbmdlZChvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJyZWxvYWRFbmFibGVkIixVKDEsMyxpLnJlbG9hZEVuYWJsZWQkKSkoInJlbG9hZFBlcmlvZEluTXMiLFUoMiw1LGkucmVsb2FkUGVyaW9kSW5NcyQpKSgicGFnZVNpemUiLFUoMyw3LGkucGFnZVNpemUkKSl9LGRlcGVuZGVuY2llczpbb2llLEdlXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxhaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmRpYWxvZz1lfWlzQnV0dG9uRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PU9lLk5PVF9MT0FERUR8fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1PZS5MT0FESU5HfW9wZW5EaWFsb2coKXt0aGlzLmRpYWxvZy5vcGVuKHNpZSx7d2lkdGg6IjQwMHB4In0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKHZsKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uLWNvbXBvbmVudCJdXSxpbnB1dHM6e3NldHRpbmdzTG9hZFN0YXRlOiJzZXR0aW5nc0xvYWRTdGF0ZSJ9LGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJidXR0b24iLDApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9wZW5EaWFsb2coKX0pLE8oMSwibWF0LWljb24iLDEpLHYoKSksMiZlJiZ5KCJkaXNhYmxlZCIsaS5pc0J1dHRvbkRpc2FibGVkKCkpfSxkZXBlbmRlbmNpZXM6W19uLEd0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxsaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QobEgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsInNldHRpbmdzTG9hZFN0YXRlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJzZXR0aW5ncy1idXR0b24tY29tcG9uZW50IiwwKSxCKDEsImFzeW5jIikpLDImZSYmeSgic2V0dGluZ3NMb2FkU3RhdGUiLFUoMSwxLGkuc2V0dGluZ3NMb2FkU3RhdGUkKSl9LGRlcGVuZGVuY2llczpbYWllLEdlXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxLTmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9kb2N1bWVudD1lfWNvcHkoZSl7bGV0IGk9dGhpcy5iZWdpbkNvcHkoZSkscj1pLmNvcHkoKTtyZXR1cm4gaS5kZXN0cm95KCkscn1iZWdpbkNvcHkoZSl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2RvY3VtZW50PWU7bGV0IGk9dGhpcy5fdGV4dGFyZWE9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKSxyPWkuc3R5bGU7ci5wb3NpdGlvbj0iZml4ZWQiLHIudG9wPXIub3BhY2l0eT0iMCIsci5sZWZ0PSItOTk5ZW0iLGkuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxpLnZhbHVlPXQsaS5yZWFkT25seT0hMCx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpfWNvcHkoKXtsZXQgdD10aGlzLl90ZXh0YXJlYSxlPSExO3RyeXtpZih0KXtsZXQgaT10aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50O3Quc2VsZWN0KCksdC5zZXRTZWxlY3Rpb25SYW5nZSgwLHQudmFsdWUubGVuZ3RoKSxlPXRoaXMuX2RvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5IiksaSYmaS5mb2N1cygpfX1jYXRjaHt9cmV0dXJuIGV9ZGVzdHJveSgpe2xldCB0PXRoaXMuX3RleHRhcmVhO3QmJih0LnJlbW92ZSgpLHRoaXMuX3RleHRhcmVhPXZvaWQgMCl9fShlLHRoaXMuX2RvY3VtZW50KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihIdCkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLFpOZT1uZXcgcGUoIkNES19DT1BZX1RPX0NMSVBCT0FSRF9DT05GSUciKSxjaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY2xpcGJvYXJkPWUsdGhpcy5fbmdab25lPWksdGhpcy50ZXh0PSIiLHRoaXMuYXR0ZW1wdHM9MSx0aGlzLmNvcGllZD1uZXcgRyx0aGlzLl9wZW5kaW5nPW5ldyBTZXQsciYmbnVsbCE9ci5hdHRlbXB0cyYmKHRoaXMuYXR0ZW1wdHM9ci5hdHRlbXB0cyl9Y29weShlPXRoaXMuYXR0ZW1wdHMpe2lmKGU+MSl7bGV0IGk9ZSxyPXRoaXMuX2NsaXBib2FyZC5iZWdpbkNvcHkodGhpcy50ZXh0KTt0aGlzLl9wZW5kaW5nLmFkZChyKTtsZXQgbz0oKT0+e2xldCBzPXIuY29weSgpO3N8fCEtLWl8fHRoaXMuX2Rlc3Ryb3llZD8odGhpcy5fY3VycmVudFRpbWVvdXQ9bnVsbCx0aGlzLl9wZW5kaW5nLmRlbGV0ZShyKSxyLmRlc3Ryb3koKSx0aGlzLmNvcGllZC5lbWl0KHMpKTp0aGlzLl9jdXJyZW50VGltZW91dD10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnNldFRpbWVvdXQobywxKSl9O28oKX1lbHNlIHRoaXMuY29waWVkLmVtaXQodGhpcy5fY2xpcGJvYXJkLmNvcHkodGhpcy50ZXh0KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9jdXJyZW50VGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX2N1cnJlbnRUaW1lb3V0KSx0aGlzLl9wZW5kaW5nLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLHRoaXMuX3BlbmRpbmcuY2xlYXIoKSx0aGlzLl9kZXN0cm95ZWQ9ITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oS05lKSxNKF90KSxNKFpOZSw4KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNka0NvcHlUb0NsaXBib2FyZCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmNvcHkoKX0pfSxpbnB1dHM6e3RleHQ6WyJjZGtDb3B5VG9DbGlwYm9hcmQiLCJ0ZXh0Il0sYXR0ZW1wdHM6WyJjZGtDb3B5VG9DbGlwYm9hcmRBdHRlbXB0cyIsImF0dGVtcHRzIl19LG91dHB1dHM6e2NvcGllZDoiY2RrQ29weVRvQ2xpcGJvYXJkQ29waWVkIn19KSxufSkoKSx1aWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLGRpZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlhbG9nUmVmPWUsdGhpcy50ZW5zb3Jib2FyZERvdERldlVybD0iaHR0cHM6Ly90ZW5zb3Jib2FyZC5kZXYvP3V0bV9zb3VyY2U9dGVuc29yYm9hcmQifW9uQ2xvc2UoKXt0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpfWdldENvbW1hbmRUZXh0KCl7cmV0dXJuIHRoaXMubG9nZGlyPyJ0ZW5zb3Jib2FyZCBkZXYgdXBsb2FkIC0tbG9nZGlyIFxcXG4gICAgJyIrdGhpcy5sb2dkaXIucmVwbGFjZSgvJy9nLCInXFwnJyIpKyInIjoidGVuc29yYm9hcmQgZGV2IHVwbG9hZCAtLWxvZ2RpciB7bG9nZGlyfSJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0odHUpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ0YmRldi11cGxvYWQtZGlhbG9nLWNvbXBvbmVudCJdXSxpbnB1dHM6e2xvZ2RpcjoibG9nZGlyIn0sZGVjbHM6MjEsdmFyczo0LGNvbnN0czpbWyJ0YXJnZXQiLCJfYmxhbmsiLCJyZWwiLCJub3JlZmVycmVyIG5vb3BlbmVyIiwxLCJhbmNob3ItdGV4dCIsMywiaHJlZiJdLFsxLCJjb21tYW5kIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNsaWNrIHRvIGNvcHkgdGhlIGNvbW1hbmQiLDEsImNvbW1hbmQtY29weSIsMywiY2RrQ29weVRvQ2xpcGJvYXJkIl0sWyJzdmdJY29uIiwiY29udGVudF9jb3B5XzI0cHgiXSxbMSwiYm90dG9tLWJ1dHRvbnMiXSxbIm1hdC1mbGF0LWJ1dHRvbiIsIiIsMSwiY2xvc2UtYnV0dG9uIiwzLCJjbGljayJdLFsibWF0LWZsYXQtYnV0dG9uIiwiIiwidGFyZ2V0IiwiX2JsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciIsMSwibGVhcm4tbW9yZS1idXR0b24iLDMsImhyZWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImgzIiksQSgxLCJVcGxvYWQgdG8gVGVuc29yQm9hcmQuZGV2IiksdigpLF8oMiwicCIpKDMsImEiLDApLEEoNCwiIFRlbnNvckJvYXJkLmRldiIpLHYoKSxBKDUsIiBlbmFibGVzIHlvdSB0byBlYXNpbHkgaG9zdCwgdHJhY2ssIGFuZCBzaGFyZSB5b3VyIE1MIGV4cGVyaW1lbnRzIHdpdGggZXZlcnlvbmUuIFlvdSBjYW4gc2hhcmUgYSBsaW5rIHRvIHRoZSB1cGxvYWRlZCBUZW5zb3JCb2FyZCBpbiBwYXBlcnMsIGJsb2cgcG9zdHMsIGFuZCBzb2NpYWwgbWVkaWEuIFRoaXMgY2FuIHNob3djYXNlIHRoZSByZXN1bHRzIG1vcmUgZWZmZWN0aXZlbHkgYW5kIGhlbHBzIHJlcHJvZHVjaWJpbGl0eS5cbiIpLHYoKSxfKDYsInAiKSxBKDcsIlRvIHVwbG9hZCBhIGxvZ2RpciB0byBUZW5zb3JCb2FyZC5kZXYsIHJ1biB0aGUgY29tbWFuZDoiKSx2KCksXyg4LCJkaXYiLDEpKDksInByZSIpKDEwLCJjb2RlIiksQSgxMSksdigpKCksXygxMiwiYnV0dG9uIiwyKSxPKDEzLCJtYXQtaWNvbiIsMyksdigpKCksXygxNCwicCIpLEEoMTUsIiBPbmx5IGNlcnRhaW4gcGx1Z2lucyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4gVXBsb2FkZWQgVGVuc29yQm9hcmRzIGFyZSBwdWJsaWMgYW5kIHZpc2libGUgdG8gZXZlcnlvbmU7IGRvIG5vdCB1cGxvYWQgc2Vuc2l0aXZlIGRhdGEuXG4iKSx2KCksXygxNiwiZGl2Iiw0KSgxNywiYnV0dG9uIiw1KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNsb3NlKCl9KSxBKDE4LCIgQ2xvc2UgIiksdigpLF8oMTksImEiLDYpLEEoMjAsIiBMZWFybiBtb3JlICIpLHYoKSgpKSwyJmUmJihDKDMpLFppKCJocmVmIixpLnRlbnNvcmJvYXJkRG90RGV2VXJsLHpsKSxDKDgpLHl0KGkuZ2V0Q29tbWFuZFRleHQoKSksQygxKSx5KCJjZGtDb3B5VG9DbGlwYm9hcmQiLGkuZ2V0Q29tbWFuZFRleHQoKSksQyg3KSxaaSgiaHJlZiIsaS50ZW5zb3Jib2FyZERvdERldlVybCx6bCkpfSxkZXBlbmRlbmNpZXM6W2NpZSxfbixJdixHdF0sc3R5bGVzOlsiZGl2W19uZ2NvbnRlbnQtJUNPTVAlXSwgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjE2cHggMH1bX25naG9zdC0lQ09NUCVdID4gW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9W19uZ2hvc3QtJUNPTVAlXSA+IFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9aDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxLjV9cFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzIxMjEyMTtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LmFuY2hvci10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWRlY29yYXRpb246bm9uZX0uY29tbWFuZFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6I2Y1ZjZmNztib3JkZXItcmFkaXVzOjRweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzoycHggMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29tbWFuZFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb21tYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjF9cHJlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy14OmF1dG99Y29kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS41fS5ib3R0b20tYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bWFyZ2luLXJpZ2h0OjhweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY2xvc2UtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9W19uZ2hvc3QtJUNPTVAlXSAgIC5sZWFybi1tb3JlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzE5NzZkMjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmxlYXJuLW1vcmUtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNDJhNWY1fSJdfSksbn0pKCksZUxlPUoob3Ysbj0+bi5kYXRhX2xvY2F0aW9uKSxwaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5sb2dkaXIkPXRoaXMuc3RvcmUucGlwZSh2dChlTGUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiZGV2LXVwbG9hZC1kaWFsb2ciXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywibG9nZGlyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJ0YmRldi11cGxvYWQtZGlhbG9nLWNvbXBvbmVudCIsMCksQigxLCJhc3luYyIpKSwyJmUmJnkoImxvZ2RpciIsVSgxLDEsaS5sb2dkaXIkKSl9LGRlcGVuZGVuY2llczpbZGllLEdlXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtmdW5jdGlvbiB0TGUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJidXR0b24iLDEpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub3BlbkRpYWxvZygpKX0pLF8oMSwic3BhbiIsMiksTygyLCJtYXQtaWNvbiIsMyksQSgzLCIgVXBsb2FkICIpLHYoKSgpfX12YXIgbkxlPVsibG9jYWxob3N0IiwiMTI3LjAuMC4xIl0saGllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLndpbmRvdz1lLHRoaXMuZGlhbG9nPWksdGhpcy5zaG93bj1uTGUuaW5jbHVkZXMoZS5sb2NhdGlvbi5ob3N0bmFtZSl9b3BlbkRpYWxvZygpe3RoaXMuZGlhbG9nLm9wZW4ocGllLHt3aWR0aDoiNTYwcHgifSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oIndpbmRvdyIpLE0odmwpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ0YmRldi11cGxvYWQtYnV0dG9uIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZldCgic2hvd24iLGkuc2hvd24pfSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1sibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwzLCJjbGljayJdLFsxLCJidXR0b24tY29udGVudHMiXSxbInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRSgwLHRMZSw0LDAsImJ1dHRvbiIsMCksMiZlJiZ5KCJuZ0lmIixpLnNob3duKX0sZGVwZW5kZW5jaWVzOltCZSxfbixHdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMDtib3JkZXI6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfS5idXR0b24tY29udGVudHNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6NnB4fSJdfSksbn0pKCksckxlPVsibWF0LW1lbnUtaXRlbSIsIiJdO2Z1bmN0aW9uIG9MZShuLHQpezEmbiYmKEluKCksXygwLCJzdmciLDIpLE8oMSwicG9seWdvbiIsMyksdigpKX12YXIgbWllPVsiKiJdO2Z1bmN0aW9uIHNMZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMCksUCgia2V5ZG93biIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5faGFuZGxlS2V5ZG93bihyKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5jbG9zZWQuZW1pdCgiY2xpY2siKSl9KSgiQHRyYW5zZm9ybU1lbnUuc3RhcnQiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkuX29uQW5pbWF0aW9uU3RhcnQocikpfSkoIkB0cmFuc2Zvcm1NZW51LmRvbmUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkuX29uQW5pbWF0aW9uRG9uZShyKSl9KSxfKDEsImRpdiIsMSksVm4oMiksdigpKCl9aWYoMiZuKXtsZXQgZT1TKCk7eSgiaWQiLGUucGFuZWxJZCkoIm5nQ2xhc3MiLGUuX2NsYXNzTGlzdCkoIkB0cmFuc2Zvcm1NZW51IixlLl9wYW5lbEFuaW1hdGlvblN0YXRlKSx6ZSgiYXJpYS1sYWJlbCIsZS5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLGUuYXJpYUxhYmVsbGVkYnl8fG51bGwpKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmFyaWFEZXNjcmliZWRieXx8bnVsbCl9fXZhciBLMj17dHJhbnNmb3JtTWVudTpLcigidHJhbnNmb3JtTWVudSIsW2tpKCJ2b2lkIixnbih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMC44KSJ9KSksTGkoInZvaWQgPT4gZW50ZXIiLGppKCIxMjBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIsZ24oe29wYWNpdHk6MSx0cmFuc2Zvcm06InNjYWxlKDEpIn0pKSksTGkoIiogPT4gdm9pZCIsamkoIjEwMG1zIDI1bXMgbGluZWFyIixnbih7b3BhY2l0eTowfSkpKV0pLGZhZGVJbkl0ZW1zOktyKCJmYWRlSW5JdGVtcyIsW2tpKCJzaG93aW5nIixnbih7b3BhY2l0eToxfSkpLExpKCJ2b2lkID0+ICoiLFtnbih7b3BhY2l0eTowfSksamkoIjQwMG1zIDEwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpIildKV0pfSxhTGU9bmV3IHBlKCJNYXRNZW51Q29udGVudCIpLCRIPW5ldyBwZSgiTUFUX01FTlVfUEFORUwiKSxsTGU9cW8oc28oY2xhc3N7fSkpLG51PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBsTGV7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kb2N1bWVudD1pLHRoaXMuX2ZvY3VzTW9uaXRvcj1yLHRoaXMuX3BhcmVudE1lbnU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMucm9sZT0ibWVudWl0ZW0iLHRoaXMuX2hvdmVyZWQ9bmV3IGtlLHRoaXMuX2ZvY3VzZWQ9bmV3IGtlLHRoaXMuX2hpZ2hsaWdodGVkPSExLHRoaXMuX3RyaWdnZXJzU3VibWVudT0hMSxvPy5hZGRJdGVtPy4odGhpcyl9Zm9jdXMoZSxpKXt0aGlzLl9mb2N1c01vbml0b3ImJmU/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2dldEhvc3RFbGVtZW50KCksZSxpKTp0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmZvY3VzKGkpLHRoaXMuX2ZvY3VzZWQubmV4dCh0aGlzKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3ImJnRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITEpfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yJiZ0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fcGFyZW50TWVudSYmdGhpcy5fcGFyZW50TWVudS5yZW1vdmVJdGVtJiZ0aGlzLl9wYXJlbnRNZW51LnJlbW92ZUl0ZW0odGhpcyksdGhpcy5faG92ZXJlZC5jb21wbGV0ZSgpLHRoaXMuX2ZvY3VzZWQuY29tcGxldGUoKX1fZ2V0VGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn1fZ2V0SG9zdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fV9jaGVja0Rpc2FibGVkKGUpe3RoaXMuZGlzYWJsZWQmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSl9X2hhbmRsZU1vdXNlRW50ZXIoKXt0aGlzLl9ob3ZlcmVkLm5leHQodGhpcyl9Z2V0TGFiZWwoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvbmVOb2RlKCEwKSxpPWUucXVlcnlTZWxlY3RvckFsbCgibWF0LWljb24sIC5tYXRlcmlhbC1pY29ucyIpO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlbcl0ucmVtb3ZlKCk7cmV0dXJuIGUudGV4dENvbnRlbnQ/LnRyaW0oKXx8IiJ9X3NldEhpZ2hsaWdodGVkKGUpe3RoaXMuX2hpZ2hsaWdodGVkPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfV9oYXNGb2N1cygpe3JldHVybiB0aGlzLl9kb2N1bWVudCYmdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuX2dldEhvc3RFbGVtZW50KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oSHQpLE0oRnIpLE0oJEgsOCksTShubikpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1tZW51LWl0ZW0iLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2NoZWNrRGlzYWJsZWQobyl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlTW91c2VFbnRlcigpfSksMiZlJiYoemUoInJvbGUiLGkucm9sZSkoInRhYmluZGV4IixpLl9nZXRUYWJJbmRleCgpKSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZC50b1N0cmluZygpKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpLGV0KCJtYXQtbWVudS1pdGVtIiwhMCkoIm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQiLGkuX2hpZ2hsaWdodGVkKSgibWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXIiLGkuX3RyaWdnZXJzU3VibWVudSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIscm9sZToicm9sZSJ9LGV4cG9ydEFzOlsibWF0TWVudUl0ZW0iXSxmZWF0dXJlczpbdHRdLGF0dHJzOnJMZSxuZ0NvbnRlbnRTZWxlY3RvcnM6bWllLGRlY2xzOjMsdmFyczozLGNvbnN0czpbWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1tZW51LXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVUcmlnZ2VyIl0sWyJjbGFzcyIsIm1hdC1tZW51LXN1Ym1lbnUtaWNvbiIsInZpZXdCb3giLCIwIDAgNSAxMCIsImZvY3VzYWJsZSIsImZhbHNlIiw0LCJuZ0lmIl0sWyJ2aWV3Qm94IiwiMCAwIDUgMTAiLCJmb2N1c2FibGUiLCJmYWxzZSIsMSwibWF0LW1lbnUtc3VibWVudS1pY29uIl0sWyJwb2ludHMiLCIwLDAgNSw1IDAsMTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih4aSgpLFZuKDApLE8oMSwiZGl2IiwwKSxFKDIsb0xlLDIsMCwic3ZnIiwxKSksMiZlJiYoQygxKSx5KCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5kaXNhYmxlUmlwcGxlfHxpLmRpc2FibGVkKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZ2V0SG9zdEVsZW1lbnQoKSksQygxKSx5KCJuZ0lmIixpLl90cmlnZ2Vyc1N1Ym1lbnUpKX0sZGVwZW5kZW5jaWVzOltCZSxZb10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZ2llPW5ldyBwZSgibWF0LW1lbnUtZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybntvdmVybGFwVHJpZ2dlcjohMSx4UG9zaXRpb246ImFmdGVyIix5UG9zaXRpb246ImJlbG93IixiYWNrZHJvcENsYXNzOiJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCJ9fX0pLHVMZT0wLHl3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2RlZmF1bHRPcHRpb25zPXIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9byx0aGlzLl94UG9zaXRpb249dGhpcy5fZGVmYXVsdE9wdGlvbnMueFBvc2l0aW9uLHRoaXMuX3lQb3NpdGlvbj10aGlzLl9kZWZhdWx0T3B0aW9ucy55UG9zaXRpb24sdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zPW5ldyBIbCx0aGlzLl90YWJTdWJzY3JpcHRpb249U24uRU1QVFksdGhpcy5fY2xhc3NMaXN0PXt9LHRoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9InZvaWQiLHRoaXMuX2FuaW1hdGlvbkRvbmU9bmV3IGtlLHRoaXMub3ZlcmxheVBhbmVsQ2xhc3M9dGhpcy5fZGVmYXVsdE9wdGlvbnMub3ZlcmxheVBhbmVsQ2xhc3N8fCIiLHRoaXMuYmFja2Ryb3BDbGFzcz10aGlzLl9kZWZhdWx0T3B0aW9ucy5iYWNrZHJvcENsYXNzLHRoaXMuX292ZXJsYXBUcmlnZ2VyPXRoaXMuX2RlZmF1bHRPcHRpb25zLm92ZXJsYXBUcmlnZ2VyLHRoaXMuX2hhc0JhY2tkcm9wPXRoaXMuX2RlZmF1bHRPcHRpb25zLmhhc0JhY2tkcm9wLHRoaXMuY2xvc2VkPW5ldyBHLHRoaXMuY2xvc2U9dGhpcy5jbG9zZWQsdGhpcy5wYW5lbElkPSJtYXQtbWVudS1wYW5lbC0iK3VMZSsrfWdldCB4UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5feFBvc2l0aW9ufXNldCB4UG9zaXRpb24oZSl7dGhpcy5feFBvc2l0aW9uPWUsdGhpcy5zZXRQb3NpdGlvbkNsYXNzZXMoKX1nZXQgeVBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3lQb3NpdGlvbn1zZXQgeVBvc2l0aW9uKGUpe3RoaXMuX3lQb3NpdGlvbj1lLHRoaXMuc2V0UG9zaXRpb25DbGFzc2VzKCl9Z2V0IG92ZXJsYXBUcmlnZ2VyKCl7cmV0dXJuIHRoaXMuX292ZXJsYXBUcmlnZ2VyfXNldCBvdmVybGFwVHJpZ2dlcihlKXt0aGlzLl9vdmVybGFwVHJpZ2dlcj1SdChlKX1nZXQgaGFzQmFja2Ryb3AoKXtyZXR1cm4gdGhpcy5faGFzQmFja2Ryb3B9c2V0IGhhc0JhY2tkcm9wKGUpe3RoaXMuX2hhc0JhY2tkcm9wPVJ0KGUpfXNldCBwYW5lbENsYXNzKGUpe2xldCBpPXRoaXMuX3ByZXZpb3VzUGFuZWxDbGFzcztpJiZpLmxlbmd0aCYmaS5zcGxpdCgiICIpLmZvckVhY2gocj0+e3RoaXMuX2NsYXNzTGlzdFtyXT0hMX0pLHRoaXMuX3ByZXZpb3VzUGFuZWxDbGFzcz1lLGUmJmUubGVuZ3RoJiYoZS5zcGxpdCgiICIpLmZvckVhY2gocj0+e3RoaXMuX2NsYXNzTGlzdFtyXT0hMH0pLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc05hbWU9IiIpfWdldCBjbGFzc0xpc3QoKXtyZXR1cm4gdGhpcy5wYW5lbENsYXNzfXNldCBjbGFzc0xpc3QoZSl7dGhpcy5wYW5lbENsYXNzPWV9bmdPbkluaXQoKXt0aGlzLnNldFBvc2l0aW9uQ2xhc3NlcygpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX3VwZGF0ZURpcmVjdERlc2NlbmRhbnRzKCksdGhpcy5fa2V5TWFuYWdlcj1uZXcgU2godGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zKS53aXRoV3JhcCgpLndpdGhUeXBlQWhlYWQoKS53aXRoSG9tZUFuZEVuZCgpLHRoaXMuX3RhYlN1YnNjcmlwdGlvbj10aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5zdWJzY3JpYmUoKCk9PnRoaXMuY2xvc2VkLmVtaXQoInRhYiIpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5waXBlKHpuKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcyksdWkoZT0+SnQoLi4uZS5tYXAoaT0+aS5fZm9jdXNlZCkpKSkuc3Vic2NyaWJlKGU9PnRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShlKSksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLl9rZXlNYW5hZ2VyO2lmKCJlbnRlciI9PT10aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlJiZpLmFjdGl2ZUl0ZW0/Ll9oYXNGb2N1cygpKXtsZXQgcj1lLnRvQXJyYXkoKSxvPU1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMSxpLmFjdGl2ZUl0ZW1JbmRleHx8MCkpO3Jbb10mJiFyW29dLmRpc2FibGVkP2kuc2V0QWN0aXZlSXRlbShvKTppLnNldE5leHRJdGVtQWN0aXZlKCl9fSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuZGVzdHJveSgpLHRoaXMuX3RhYlN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuY2xvc2VkLmNvbXBsZXRlKCl9X2hvdmVyZWQoKXtyZXR1cm4gdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmNoYW5nZXMucGlwZSh6bih0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMpLHVpKGk9Pkp0KC4uLmkubWFwKHI9PnIuX2hvdmVyZWQpKSkpfWFkZEl0ZW0oZSl7fXJlbW92ZUl0ZW0oZSl7fV9oYW5kbGVLZXlkb3duKGUpe2xldCBpPWUua2V5Q29kZSxyPXRoaXMuX2tleU1hbmFnZXI7c3dpdGNoKGkpe2Nhc2UgMjc6a3IoZSl8fChlLnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZWQuZW1pdCgia2V5ZG93biIpKTticmVhaztjYXNlIDM3OnRoaXMucGFyZW50TWVudSYmImx0ciI9PT10aGlzLmRpcmVjdGlvbiYmdGhpcy5jbG9zZWQuZW1pdCgia2V5ZG93biIpO2JyZWFrO2Nhc2UgMzk6dGhpcy5wYXJlbnRNZW51JiYicnRsIj09PXRoaXMuZGlyZWN0aW9uJiZ0aGlzLmNsb3NlZC5lbWl0KCJrZXlkb3duIik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4oMzg9PT1pfHw0MD09PWkpJiZyLnNldEZvY3VzT3JpZ2luKCJrZXlib2FyZCIpLHZvaWQgci5vbktleWRvd24oZSl9ZS5zdG9wUHJvcGFnYXRpb24oKX1mb2N1c0ZpcnN0SXRlbShlPSJwcm9ncmFtIil7dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoUXQoMSkpLnN1YnNjcmliZSgoKT0+e2xldCBpPW51bGw7aWYodGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmxlbmd0aCYmKGk9dGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmZpcnN0Ll9nZXRIb3N0RWxlbWVudCgpLmNsb3Nlc3QoJ1tyb2xlPSJtZW51Il0nKSksIWl8fCFpLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKXtsZXQgcj10aGlzLl9rZXlNYW5hZ2VyO3Iuc2V0Rm9jdXNPcmlnaW4oZSkuc2V0Rmlyc3RJdGVtQWN0aXZlKCksIXIuYWN0aXZlSXRlbSYmaSYmaS5mb2N1cygpfX0pfXJlc2V0QWN0aXZlSXRlbSgpe3RoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSl9c2V0RWxldmF0aW9uKGUpe2xldCBpPU1hdGgubWluKHRoaXMuX2Jhc2VFbGV2YXRpb24rZSwyNCkscj1gJHt0aGlzLl9lbGV2YXRpb25QcmVmaXh9JHtpfWAsbz1PYmplY3Qua2V5cyh0aGlzLl9jbGFzc0xpc3QpLmZpbmQocz0+cy5zdGFydHNXaXRoKHRoaXMuX2VsZXZhdGlvblByZWZpeCkpOyghb3x8bz09PXRoaXMuX3ByZXZpb3VzRWxldmF0aW9uKSYmKHRoaXMuX3ByZXZpb3VzRWxldmF0aW9uJiYodGhpcy5fY2xhc3NMaXN0W3RoaXMuX3ByZXZpb3VzRWxldmF0aW9uXT0hMSksdGhpcy5fY2xhc3NMaXN0W3JdPSEwLHRoaXMuX3ByZXZpb3VzRWxldmF0aW9uPXIpfXNldFBvc2l0aW9uQ2xhc3NlcyhlPXRoaXMueFBvc2l0aW9uLGk9dGhpcy55UG9zaXRpb24pe2xldCByPXRoaXMuX2NsYXNzTGlzdDtyWyJtYXQtbWVudS1iZWZvcmUiXT0iYmVmb3JlIj09PWUsclsibWF0LW1lbnUtYWZ0ZXIiXT0iYWZ0ZXIiPT09ZSxyWyJtYXQtbWVudS1hYm92ZSJdPSJhYm92ZSI9PT1pLHJbIm1hdC1tZW51LWJlbG93Il09ImJlbG93Ij09PWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfV9zdGFydEFuaW1hdGlvbigpe3RoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9ImVudGVyIn1fcmVzZXRBbmltYXRpb24oKXt0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlPSJ2b2lkIn1fb25BbmltYXRpb25Eb25lKGUpe3RoaXMuX2FuaW1hdGlvbkRvbmUubmV4dChlKSx0aGlzLl9pc0FuaW1hdGluZz0hMX1fb25BbmltYXRpb25TdGFydChlKXt0aGlzLl9pc0FuaW1hdGluZz0hMCwiZW50ZXIiPT09ZS50b1N0YXRlJiYwPT09dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXgmJihlLmVsZW1lbnQuc2Nyb2xsVG9wPTApfV91cGRhdGVEaXJlY3REZXNjZW5kYW50cygpe3RoaXMuX2FsbEl0ZW1zLmNoYW5nZXMucGlwZSh6bih0aGlzLl9hbGxJdGVtcykpLnN1YnNjcmliZShlPT57dGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLnJlc2V0KGUuZmlsdGVyKGk9PmkuX3BhcmVudE1lbnU9PT10aGlzKSksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLm5vdGlmeU9uQ2hhbmdlcygpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oX3QpLE0oZ2llKSxNKG5uKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKEVpKHIsYUxlLDUpLEVpKHIsbnUsNSksRWkocixudSw0KSksMiZlKXtsZXQgbztOZShvPUxlKCkpJiYoaS5sYXp5Q29udGVudD1vLmZpcnN0KSxOZShvPUxlKCkpJiYoaS5fYWxsSXRlbXM9byksTmUobz1MZSgpKSYmKGkuaXRlbXM9byl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KFZpLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkudGVtcGxhdGVSZWY9ci5maXJzdCl9fSxpbnB1dHM6e2JhY2tkcm9wQ2xhc3M6ImJhY2tkcm9wQ2xhc3MiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il0sYXJpYURlc2NyaWJlZGJ5OlsiYXJpYS1kZXNjcmliZWRieSIsImFyaWFEZXNjcmliZWRieSJdLHhQb3NpdGlvbjoieFBvc2l0aW9uIix5UG9zaXRpb246InlQb3NpdGlvbiIsb3ZlcmxhcFRyaWdnZXI6Im92ZXJsYXBUcmlnZ2VyIixoYXNCYWNrZHJvcDoiaGFzQmFja2Ryb3AiLHBhbmVsQ2xhc3M6WyJjbGFzcyIsInBhbmVsQ2xhc3MiXSxjbGFzc0xpc3Q6ImNsYXNzTGlzdCJ9LG91dHB1dHM6e2Nsb3NlZDoiY2xvc2VkIixjbG9zZToiY2xvc2UifX0pLG59KSgpLGhkPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB5d3tjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKSx0aGlzLl9lbGV2YXRpb25QcmVmaXg9Im1hdC1lbGV2YXRpb24teiIsdGhpcy5fYmFzZUVsZXZhdGlvbj00fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKF90KSxNKGdpZSksTShubikpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1tZW51Il1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgiYXJpYS1sYWJlbCIsbnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbnVsbCkoImFyaWEtZGVzY3JpYmVkYnkiLG51bGwpfSxleHBvcnRBczpbIm1hdE1lbnUiXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOiRILHVzZUV4aXN0aW5nOm59XSksdHRdLG5nQ29udGVudFNlbGVjdG9yczptaWUsZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbInRhYmluZGV4IiwiLTEiLCJyb2xlIiwibWVudSIsMSwibWF0LW1lbnUtcGFuZWwiLDMsImlkIiwibmdDbGFzcyIsImtleWRvd24iLCJjbGljayJdLFsxLCJtYXQtbWVudS1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoKSxFKDAsc0xlLDMsNiwibmctdGVtcGxhdGUiKSl9LGRlcGVuZGVuY2llczpbRm5dLHN0eWxlczpbJ21hdC1tZW51e2Rpc3BsYXk6bm9uZX0ubWF0LW1lbnUtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQ4cHgpO2JvcmRlci1yYWRpdXM6NHB4O291dGxpbmU6MDttaW4taGVpZ2h0OjY0cHg7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZW51LXBhbmVsLm5nLWFuaW1hdGluZ3twb2ludGVyLWV2ZW50czpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LXBhbmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtbWVudS1jb250ZW50Om5vdCg6ZW1wdHkpe3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1tZW51LWl0ZW17LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lO21heC13aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWVudS1pdGVtOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1tZW51LWl0ZW17dGV4dC1hbGlnbjpyaWdodH0ubWF0LW1lbnUtaXRlbSAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbSAubWF0LWljb257bWFyZ2luLWxlZnQ6MTZweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF06OmFmdGVye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjt0b3A6MDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1pdGVte21hcmdpbi10b3A6MXB4fS5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcntwYWRkaW5nLXJpZ2h0OjMycHh9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcntwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjMycHh9Lm1hdC1tZW51LXN1Ym1lbnUtaWNvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7d2lkdGg6NXB4O2hlaWdodDoxMHB4O2ZpbGw6Y3VycmVudENvbG9yfVtkaXI9cnRsXSAubWF0LW1lbnUtc3VibWVudS1pY29ue3JpZ2h0OmF1dG87bGVmdDoxNnB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpIHNjYWxlWCgtMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtc3VibWVudS1pY29ue2ZpbGw6Q2FudmFzVGV4dH1idXR0b24ubWF0LW1lbnUtaXRlbXt3aWR0aDoxMDAlfS5tYXQtbWVudS1pdGVtIC5tYXQtbWVudS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0nXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltLMi50cmFuc2Zvcm1NZW51LEsyLmZhZGVJbkl0ZW1zXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxfaWU9bmV3IHBlKCJtYXQtbWVudS1zY3JvbGwtc3RyYXRlZ3kiKSxwTGU9e3Byb3ZpZGU6X2llLGRlcHM6W3RyXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sZmllPWxhKHtwYXNzaXZlOiEwfSksaExlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLHUpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9lbGVtZW50PWksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1yLHRoaXMuX21lbnVJdGVtSW5zdGFuY2U9YSx0aGlzLl9kaXI9bCx0aGlzLl9mb2N1c01vbml0b3I9Yyx0aGlzLl9uZ1pvbmU9dSx0aGlzLl9vdmVybGF5UmVmPW51bGwsdGhpcy5fbWVudU9wZW49ITEsdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249U24uRU1QVFksdGhpcy5faG92ZXJTdWJzY3JpcHRpb249U24uRU1QVFksdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uPVNuLkVNUFRZLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQ9ZD0+e2V3KGQpfHwodGhpcy5fb3BlbmVkQnk9InRvdWNoIil9LHRoaXMuX29wZW5lZEJ5PXZvaWQgMCx0aGlzLnJlc3RvcmVGb2N1cz0hMCx0aGlzLm1lbnVPcGVuZWQ9bmV3IEcsdGhpcy5vbk1lbnVPcGVuPXRoaXMubWVudU9wZW5lZCx0aGlzLm1lbnVDbG9zZWQ9bmV3IEcsdGhpcy5vbk1lbnVDbG9zZT10aGlzLm1lbnVDbG9zZWQsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9byx0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnU9cyBpbnN0YW5jZW9mIHl3P3M6dm9pZCAwLGkubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9oYW5kbGVUb3VjaFN0YXJ0LGZpZSksYSYmKGEuX3RyaWdnZXJzU3VibWVudT10aGlzLnRyaWdnZXJzU3VibWVudSgpKX1nZXQgX2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvcigpe3JldHVybiB0aGlzLm1lbnV9c2V0IF9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3IoZSl7dGhpcy5tZW51PWV9Z2V0IG1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudX1zZXQgbWVudShlKXtlIT09dGhpcy5fbWVudSYmKHRoaXMuX21lbnU9ZSx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxlJiYodGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uPWUuY2xvc2Uuc3Vic2NyaWJlKGk9Pnt0aGlzLl9kZXN0cm95TWVudShpKSwoImNsaWNrIj09PWl8fCJ0YWIiPT09aSkmJnRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51LmNsb3NlZC5lbWl0KGkpfSkpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9oYW5kbGVIb3ZlcigpfW5nT25EZXN0cm95KCl7dGhpcy5fb3ZlcmxheVJlZiYmKHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpLHRoaXMuX292ZXJsYXlSZWY9bnVsbCksdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQsZmllKSx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9Z2V0IG1lbnVPcGVuKCl7cmV0dXJuIHRoaXMuX21lbnVPcGVufWdldCBkaXIoKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8icnRsIjoibHRyIn10cmlnZ2Vyc1N1Ym1lbnUoKXtyZXR1cm4hKCF0aGlzLl9tZW51SXRlbUluc3RhbmNlfHwhdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51KX10b2dnbGVNZW51KCl7cmV0dXJuIHRoaXMuX21lbnVPcGVuP3RoaXMuY2xvc2VNZW51KCk6dGhpcy5vcGVuTWVudSgpfW9wZW5NZW51KCl7bGV0IGU9dGhpcy5tZW51O2lmKHRoaXMuX21lbnVPcGVufHwhZSlyZXR1cm47bGV0IGk9dGhpcy5fY3JlYXRlT3ZlcmxheShlKSxyPWkuZ2V0Q29uZmlnKCksbz1yLnBvc2l0aW9uU3RyYXRlZ3k7dGhpcy5fc2V0UG9zaXRpb24oZSxvKSxyLmhhc0JhY2tkcm9wPW51bGw9PWUuaGFzQmFja2Ryb3A/IXRoaXMudHJpZ2dlcnNTdWJtZW51KCk6ZS5oYXNCYWNrZHJvcCxpLmF0dGFjaCh0aGlzLl9nZXRQb3J0YWwoZSkpLGUubGF6eUNvbnRlbnQmJmUubGF6eUNvbnRlbnQuYXR0YWNoKHRoaXMubWVudURhdGEpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uPXRoaXMuX21lbnVDbG9zaW5nQWN0aW9ucygpLnN1YnNjcmliZSgoKT0+dGhpcy5jbG9zZU1lbnUoKSksdGhpcy5faW5pdE1lbnUoZSksZSBpbnN0YW5jZW9mIHl3JiYoZS5fc3RhcnRBbmltYXRpb24oKSxlLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5waXBlKHN0KGUuY2xvc2UpKS5zdWJzY3JpYmUoKCk9PntvLndpdGhMb2NrZWRQb3NpdGlvbighMSkucmVhcHBseUxhc3RQb3NpdGlvbigpLG8ud2l0aExvY2tlZFBvc2l0aW9uKCEwKX0pKX1jbG9zZU1lbnUoKXt0aGlzLm1lbnU/LmNsb3NlLmVtaXQoKX1mb2N1cyhlLGkpe3RoaXMuX2ZvY3VzTW9uaXRvciYmZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZWxlbWVudCxlLGkpOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyhpKX11cGRhdGVQb3NpdGlvbigpe3RoaXMuX292ZXJsYXlSZWY/LnVwZGF0ZVBvc2l0aW9uKCl9X2Rlc3Ryb3lNZW51KGUpe2lmKCF0aGlzLl9vdmVybGF5UmVmfHwhdGhpcy5tZW51T3BlbilyZXR1cm47bGV0IGk9dGhpcy5tZW51O3RoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSx0aGlzLnJlc3RvcmVGb2N1cyYmKCJrZXlkb3duIj09PWV8fCF0aGlzLl9vcGVuZWRCeXx8IXRoaXMudHJpZ2dlcnNTdWJtZW51KCkpJiZ0aGlzLmZvY3VzKHRoaXMuX29wZW5lZEJ5KSx0aGlzLl9vcGVuZWRCeT12b2lkIDAsaSBpbnN0YW5jZW9mIHl3PyhpLl9yZXNldEFuaW1hdGlvbigpLGkubGF6eUNvbnRlbnQ/aS5fYW5pbWF0aW9uRG9uZS5waXBlKFllKHI9PiJ2b2lkIj09PXIudG9TdGF0ZSksUXQoMSksc3QoaS5sYXp5Q29udGVudC5fYXR0YWNoZWQpKS5zdWJzY3JpYmUoe25leHQ6KCk9PmkubGF6eUNvbnRlbnQuZGV0YWNoKCksY29tcGxldGU6KCk9PnRoaXMuX3NldElzTWVudU9wZW4oITEpfSk6dGhpcy5fc2V0SXNNZW51T3BlbighMSkpOih0aGlzLl9zZXRJc01lbnVPcGVuKCExKSxpPy5sYXp5Q29udGVudD8uZGV0YWNoKCkpfV9pbml0TWVudShlKXtlLnBhcmVudE1lbnU9dGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnU6dm9pZCAwLGUuZGlyZWN0aW9uPXRoaXMuZGlyLHRoaXMuX3NldE1lbnVFbGV2YXRpb24oZSksZS5mb2N1c0ZpcnN0SXRlbSh0aGlzLl9vcGVuZWRCeXx8InByb2dyYW0iKSx0aGlzLl9zZXRJc01lbnVPcGVuKCEwKX1fc2V0TWVudUVsZXZhdGlvbihlKXtpZihlLnNldEVsZXZhdGlvbil7bGV0IGk9MCxyPWUucGFyZW50TWVudTtmb3IoO3I7KWkrKyxyPXIucGFyZW50TWVudTtlLnNldEVsZXZhdGlvbihpKX19X3NldElzTWVudU9wZW4oZSl7dGhpcy5fbWVudU9wZW49ZSx0aGlzLl9tZW51T3Blbj90aGlzLm1lbnVPcGVuZWQuZW1pdCgpOnRoaXMubWVudUNsb3NlZC5lbWl0KCksdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmdGhpcy5fbWVudUl0ZW1JbnN0YW5jZS5fc2V0SGlnaGxpZ2h0ZWQoZSl9X2NyZWF0ZU92ZXJsYXkoZSl7aWYoIXRoaXMuX292ZXJsYXlSZWYpe2xldCBpPXRoaXMuX2dldE92ZXJsYXlDb25maWcoZSk7dGhpcy5fc3Vic2NyaWJlVG9Qb3NpdGlvbnMoZSxpLnBvc2l0aW9uU3RyYXRlZ3kpLHRoaXMuX292ZXJsYXlSZWY9dGhpcy5fb3ZlcmxheS5jcmVhdGUoaSksdGhpcy5fb3ZlcmxheVJlZi5rZXlkb3duRXZlbnRzKCkuc3Vic2NyaWJlKCl9cmV0dXJuIHRoaXMuX292ZXJsYXlSZWZ9X2dldE92ZXJsYXlDb25maWcoZSl7cmV0dXJuIG5ldyBzYyh7cG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50KS53aXRoTG9ja2VkUG9zaXRpb24oKS53aXRoR3Jvd0FmdGVyT3BlbigpLndpdGhUcmFuc2Zvcm1PcmlnaW5PbigiLm1hdC1tZW51LXBhbmVsLCAubWF0LW1kYy1tZW51LXBhbmVsIiksYmFja2Ryb3BDbGFzczplLmJhY2tkcm9wQ2xhc3N8fCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIscGFuZWxDbGFzczplLm92ZXJsYXlQYW5lbENsYXNzLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksZGlyZWN0aW9uOnRoaXMuX2Rpcn0pfV9zdWJzY3JpYmVUb1Bvc2l0aW9ucyhlLGkpe2Uuc2V0UG9zaXRpb25DbGFzc2VzJiZpLnBvc2l0aW9uQ2hhbmdlcy5zdWJzY3JpYmUocj0+e2xldCBvPSJzdGFydCI9PT1yLmNvbm5lY3Rpb25QYWlyLm92ZXJsYXlYPyJhZnRlciI6ImJlZm9yZSIscz0idG9wIj09PXIuY29ubmVjdGlvblBhaXIub3ZlcmxheVk/ImJlbG93IjoiYWJvdmUiO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5lLnNldFBvc2l0aW9uQ2xhc3NlcyhvLHMpKTplLnNldFBvc2l0aW9uQ2xhc3NlcyhvLHMpfSl9X3NldFBvc2l0aW9uKGUsaSl7bGV0W3Isb109ImJlZm9yZSI9PT1lLnhQb3NpdGlvbj9bImVuZCIsInN0YXJ0Il06WyJzdGFydCIsImVuZCJdLFtzLGFdPSJhYm92ZSI9PT1lLnlQb3NpdGlvbj9bImJvdHRvbSIsInRvcCJdOlsidG9wIiwiYm90dG9tIl0sW2wsY109W3MsYV0sW3UsZF09W3Isb10scD0wO2lmKHRoaXMudHJpZ2dlcnNTdWJtZW51KCkpe2lmKGQ9cj0iYmVmb3JlIj09PWUueFBvc2l0aW9uPyJzdGFydCI6ImVuZCIsbz11PSJlbmQiPT09cj8ic3RhcnQiOiJlbmQiLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSl7aWYobnVsbD09dGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nKXtsZXQgaD10aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuaXRlbXMuZmlyc3Q7dGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nPWg/aC5fZ2V0SG9zdEVsZW1lbnQoKS5vZmZzZXRUb3A6MH1wPSJib3R0b20iPT09cz90aGlzLl9wYXJlbnRJbm5lclBhZGRpbmc6LXRoaXMuX3BhcmVudElubmVyUGFkZGluZ319ZWxzZSBlLm92ZXJsYXBUcmlnZ2VyfHwobD0idG9wIj09PXM/ImJvdHRvbSI6InRvcCIsYz0idG9wIj09PWE/ImJvdHRvbSI6InRvcCIpO2kud2l0aFBvc2l0aW9ucyhbe29yaWdpblg6cixvcmlnaW5ZOmwsb3ZlcmxheVg6dSxvdmVybGF5WTpzLG9mZnNldFk6cH0se29yaWdpblg6byxvcmlnaW5ZOmwsb3ZlcmxheVg6ZCxvdmVybGF5WTpzLG9mZnNldFk6cH0se29yaWdpblg6cixvcmlnaW5ZOmMsb3ZlcmxheVg6dSxvdmVybGF5WTphLG9mZnNldFk6LXB9LHtvcmlnaW5YOm8sb3JpZ2luWTpjLG92ZXJsYXlYOmQsb3ZlcmxheVk6YSxvZmZzZXRZOi1wfV0pfV9tZW51Q2xvc2luZ0FjdGlvbnMoKXtsZXQgZT10aGlzLl9vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKSxpPXRoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKTtyZXR1cm4gSnQoZSx0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnU/dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51LmNsb3NlZDpYdCgpLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuX2hvdmVyZWQoKS5waXBlKFllKHM9PnMhPT10aGlzLl9tZW51SXRlbUluc3RhbmNlKSxZZSgoKT0+dGhpcy5fbWVudU9wZW4pKTpYdCgpLGkpfV9oYW5kbGVNb3VzZWRvd24oZSl7JE0oZSl8fCh0aGlzLl9vcGVuZWRCeT0wPT09ZS5idXR0b24/Im1vdXNlIjp2b2lkIDAsdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmZS5wcmV2ZW50RGVmYXVsdCgpKX1faGFuZGxlS2V5ZG93bihlKXtsZXQgaT1lLmtleUNvZGU7KDEzPT09aXx8MzI9PT1pKSYmKHRoaXMuX29wZW5lZEJ5PSJrZXlib2FyZCIpLHRoaXMudHJpZ2dlcnNTdWJtZW51KCkmJigzOT09PWkmJiJsdHIiPT09dGhpcy5kaXJ8fDM3PT09aSYmInJ0bCI9PT10aGlzLmRpcikmJih0aGlzLl9vcGVuZWRCeT0ia2V5Ym9hcmQiLHRoaXMub3Blbk1lbnUoKSl9X2hhbmRsZUNsaWNrKGUpe3RoaXMudHJpZ2dlcnNTdWJtZW51KCk/KGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vcGVuTWVudSgpKTp0aGlzLnRvZ2dsZU1lbnUoKX1faGFuZGxlSG92ZXIoKXshdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKXx8IXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudXx8KHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uPXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpLnBpcGUoWWUoZT0+ZT09PXRoaXMuX21lbnVJdGVtSW5zdGFuY2UmJiFlLmRpc2FibGVkKSxPbCgwLGYwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fb3BlbmVkQnk9Im1vdXNlIix0aGlzLm1lbnUgaW5zdGFuY2VvZiB5dyYmdGhpcy5tZW51Ll9pc0FuaW1hdGluZz90aGlzLm1lbnUuX2FuaW1hdGlvbkRvbmUucGlwZShRdCgxKSxPbCgwLGYwKSxzdCh0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuX2hvdmVyZWQoKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5vcGVuTWVudSgpKTp0aGlzLm9wZW5NZW51KCl9KSl9X2dldFBvcnRhbChlKXtyZXR1cm4oIXRoaXMuX3BvcnRhbHx8dGhpcy5fcG9ydGFsLnRlbXBsYXRlUmVmIT09ZS50ZW1wbGF0ZVJlZikmJih0aGlzLl9wb3J0YWw9bmV3IGtzKGUudGVtcGxhdGVSZWYsdGhpcy5fdmlld0NvbnRhaW5lclJlZikpLHRoaXMuX3BvcnRhbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTSh0ciksTShSZSksTShPaSksTShfaWUpLE0oJEgsOCksTShudSwxMCksTSgkaSw4KSxNKEZyKSxNKF90KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlQ2xpY2sobyl9KSgibW91c2Vkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlTW91c2Vkb3duKG8pfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVLZXlkb3duKG8pfSksMiZlJiZ6ZSgiYXJpYS1oYXNwb3B1cCIsaS5tZW51PyJtZW51IjpudWxsKSgiYXJpYS1leHBhbmRlZCIsaS5tZW51T3Blbnx8bnVsbCkoImFyaWEtY29udHJvbHMiLGkubWVudU9wZW4/aS5tZW51LnBhbmVsSWQ6bnVsbCl9LGlucHV0czp7X2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvcjpbIm1hdC1tZW51LXRyaWdnZXItZm9yIiwiX2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvciJdLG1lbnU6WyJtYXRNZW51VHJpZ2dlckZvciIsIm1lbnUiXSxtZW51RGF0YTpbIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1lbnVEYXRhIl0scmVzdG9yZUZvY3VzOlsibWF0TWVudVRyaWdnZXJSZXN0b3JlRm9jdXMiLCJyZXN0b3JlRm9jdXMiXX0sb3V0cHV0czp7bWVudU9wZW5lZDoibWVudU9wZW5lZCIsb25NZW51T3Blbjoib25NZW51T3BlbiIsbWVudUNsb3NlZDoibWVudUNsb3NlZCIsb25NZW51Q2xvc2U6Im9uTWVudUNsb3NlIn19KSxufSkoKSxmZD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgaExle31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1tZW51LXRyaWdnZXItZm9yIiwiIl0sWyIiLCJtYXRNZW51VHJpZ2dlckZvciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZW51LXRyaWdnZXIiXSxleHBvcnRBczpbIm1hdE1lbnVUcmlnZ2VyIl0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLHpoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W3BMZV0saW1wb3J0czpbTWUsbG4sX2wsc3MsdWQsbG5dfSksbn0pKCk7ZnVuY3Rpb24gZkxlKG4sdCl7MSZuJiZPKDAsIm1hdC1pY29uIiw4KX1mdW5jdGlvbiBtTGUobix0KXsxJm4mJk8oMCwibWF0LWljb24iLDkpfWZ1bmN0aW9uIGdMZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMTApfXZhciBVYT0oKCk9PihmdW5jdGlvbihuKXtuW24uREVGQVVMVD0wXT0iREVGQVVMVCIsbltuLkRBUktfTU9ERV9PTj0xXT0iREFSS19NT0RFX09OIixuW24uREFSS19NT0RFX09GRj0yXT0iREFSS19NT0RFX09GRiJ9KFVhfHwoVWE9e30pKSxVYSkpKCksdmllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkRhcmtNb2RlT3ZlcnJpZGU9VWEsdGhpcy5vbk92ZXJyaWRlQ2hhbmdlZD1uZXcgR31nZXRCdXR0b25UaXRsZSgpe2xldCBlO3N3aXRjaCh0aGlzLmRhcmtNb2RlT3ZlcnJpZGUpe2Nhc2UgVWEuREVGQVVMVDplPSJCcm93c2VyIGRlZmF1bHQiO2JyZWFrO2Nhc2UgVWEuREFSS19NT0RFX09OOmU9IkRhcmsgbW9kZSI7YnJlYWs7Y2FzZSBVYS5EQVJLX01PREVfT0ZGOmU9IkxpZ2h0IG1vZGUifXJldHVybmBDdXJyZW50IG1vZGU6IFske2V9XS4gU3dpdGNoIGJldHdlZW4gYnJvd3NlciBkZWZhdWx0LCBsaWdodCwgb3IgZGFyayB0aGVtZS5gfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUtY29tcG9uZW50Il1dLGlucHV0czp7ZGFya01vZGVPdmVycmlkZToiZGFya01vZGVPdmVycmlkZSJ9LG91dHB1dHM6e29uT3ZlcnJpZGVDaGFuZ2VkOiJvbk92ZXJyaWRlQ2hhbmdlZCJ9LGRlY2xzOjE1LHZhcnM6Nixjb25zdHM6W1sibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsIk1lbnUgZm9yIGNoYW5naW5nIGxpZ2h0IG9yIGRhcmsgdGhlbWUiLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIiwibmdTd2l0Y2giLCJ0aXRsZSJdLFsic3ZnSWNvbiIsImJyaWdodG5lc3NfNl8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInN2Z0ljb24iLCJsaWdodF9tb2RlXzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic3ZnSWNvbiIsImRhcmtfbW9kZV8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbIm1lbnUiLCJtYXRNZW51Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJTZXQgdGhlIHRoZW1lIHRvIG1hdGNoIHRoZSBkZWZhdWx0IG1vZGUgaW4gdGhlIGJyb3dzZXIuIiwzLCJjbGljayJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInRpdGxlIiwiRm9yY2UgbGlnaHQgVGVuc29yQm9hcmQgdGhlbWUuIiwzLCJjbGljayJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInRpdGxlIiwiRm9yY2UgZGFyayBUZW5zb3JCb2FyZCB0aGVtZS4iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiYnJpZ2h0bmVzc182XzI0cHgiXSxbInN2Z0ljb24iLCJsaWdodF9tb2RlXzI0cHgiXSxbInN2Z0ljb24iLCJkYXJrX21vZGVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiYnV0dG9uIiwwKSxFKDEsZkxlLDEsMCwibWF0LWljb24iLDEpLEUoMixtTGUsMSwwLCJtYXQtaWNvbiIsMiksRSgzLGdMZSwxLDAsIm1hdC1pY29uIiwzKSx2KCksXyg0LCJtYXQtbWVudSIsbnVsbCw0KSg2LCJidXR0b24iLDUpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uT3ZlcnJpZGVDaGFuZ2VkLmVtaXQoaS5EYXJrTW9kZU92ZXJyaWRlLkRFRkFVTFQpfSksXyg3LCJsYWJlbCIpLEEoOCwiQnJvd3NlciBkZWZhdWx0IiksdigpKCksXyg5LCJidXR0b24iLDYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uT3ZlcnJpZGVDaGFuZ2VkLmVtaXQoaS5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PRkYpfSksXygxMCwibGFiZWwiKSxBKDExLCJMaWdodCIpLHYoKSgpLF8oMTIsImJ1dHRvbiIsNyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09OKX0pLF8oMTMsImxhYmVsIiksQSgxNCwiRGFyayIpLHYoKSgpKCkpLDImZSYmKHkoIm1hdE1lbnVUcmlnZ2VyRm9yIiwkZSg1KSkoIm5nU3dpdGNoIixpLmRhcmtNb2RlT3ZlcnJpZGUpKCJ0aXRsZSIsaS5nZXRCdXR0b25UaXRsZSgpKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsaS5EYXJrTW9kZU92ZXJyaWRlLkRFRkFVTFQpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixpLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09GRiksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT04pKX0sZGVwZW5kZW5jaWVzOltfbixHdCxoZCxudSxmZCxDcixVcl0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCkseWllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZGFya01vZGVPdmVycmlkZSQ9dGhpcy5zdG9yZS5zZWxlY3QoR0EpLnBpcGUoTChpPT5udWxsPT09aT9VYS5ERUZBVUxUOmk/VWEuREFSS19NT0RFX09OOlVhLkRBUktfTU9ERV9PRkYpKX1jaGFuZ2VEYXJrTW9kZShlKXtsZXQgaT1udWxsO3N3aXRjaChlKXtjYXNlIFVhLkRFRkFVTFQ6aT1udWxsO2JyZWFrO2Nhc2UgVWEuREFSS19NT0RFX09GRjppPSExO2JyZWFrO2Nhc2UgVWEuREFSS19NT0RFX09OOmk9ITB9dGhpcy5zdG9yZS5kaXNwYXRjaChNSSh7ZW5hYmxlRGFya01vZGU6aX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJkYXJrTW9kZU92ZXJyaWRlIiwib25PdmVycmlkZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQiLDApLFAoIm9uT3ZlcnJpZGVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5jaGFuZ2VEYXJrTW9kZShvKX0pLEIoMSwiYXN5bmMiKSx2KCkpLDImZSYmeSgiZGFya01vZGVPdmVycmlkZSIsVSgxLDEsaS5kYXJrTW9kZU92ZXJyaWRlJCkpfSxkZXBlbmRlbmNpZXM6W3ZpZSxHZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCk7ZnVuY3Rpb24geUxlKG4sdCl7MSZuJiZWbigwKX12YXIgTWllPVsiKiJdO2Z1bmN0aW9uIGJMZShuLHQpe312YXIgeExlPWZ1bmN0aW9uKG4pe3JldHVybnthbmltYXRpb25EdXJhdGlvbjpufX0sQ0xlPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3ZhbHVlOm4scGFyYW1zOnR9fSxNTGU9WyJ0YWJMaXN0Q29udGFpbmVyIl0sd0xlPVsidGFiTGlzdCJdLFNMZT1bInRhYkxpc3RJbm5lciJdLEVMZT1bIm5leHRQYWdpbmF0b3IiXSxUTGU9WyJwcmV2aW91c1BhZ2luYXRvciJdLERMZT1bInRhYkJvZHlXcmFwcGVyIl0sQUxlPVsidGFiSGVhZGVyIl07ZnVuY3Rpb24gSUxlKG4sdCl7fWZ1bmN0aW9uIFBMZShuLHQpezEmbiYmRSgwLElMZSwwLDAsIm5nLXRlbXBsYXRlIiwxMCksMiZuJiZ5KCJjZGtQb3J0YWxPdXRsZXQiLFMoKS4kaW1wbGljaXQudGVtcGxhdGVMYWJlbCl9ZnVuY3Rpb24gUkxlKG4sdCl7MSZuJiZBKDApLDImbiYmeXQoUygpLiRpbXBsaWNpdC50ZXh0TGFiZWwpfWZ1bmN0aW9uIE9MZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IHI9b2UoZSksbz1yLiRpbXBsaWNpdCxzPXIuaW5kZXgsYT1TKCksbD0kZSgxKTtyZXR1cm4gc2UoYS5faGFuZGxlQ2xpY2sobyxsLHMpKX0pKCJjZGtGb2N1c0NoYW5nZSIsZnVuY3Rpb24ocil7bGV0IHM9b2UoZSkuaW5kZXg7cmV0dXJuIHNlKFMoKS5fdGFiRm9jdXNDaGFuZ2VkKHIscykpfSksXygxLCJkaXYiLDcpLEUoMixQTGUsMSwxLCJuZy10ZW1wbGF0ZSIsOCksRSgzLFJMZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDkscXQpLHYoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9JGUoNCksbz1TKCk7ZXQoIm1hdC10YWItbGFiZWwtYWN0aXZlIixvLnNlbGVjdGVkSW5kZXg9PT1pKSx5KCJpZCIsby5fZ2V0VGFiTGFiZWxJZChpKSkoIm5nQ2xhc3MiLGUubGFiZWxDbGFzcykoImRpc2FibGVkIixlLmRpc2FibGVkKSgibWF0UmlwcGxlRGlzYWJsZWQiLGUuZGlzYWJsZWR8fG8uZGlzYWJsZVJpcHBsZSksemUoInRhYkluZGV4IixvLl9nZXRUYWJJbmRleChlLGkpKSgiYXJpYS1wb3NpbnNldCIsaSsxKSgiYXJpYS1zZXRzaXplIixvLl90YWJzLmxlbmd0aCkoImFyaWEtY29udHJvbHMiLG8uX2dldFRhYkNvbnRlbnRJZChpKSkoImFyaWEtc2VsZWN0ZWQiLG8uc2VsZWN0ZWRJbmRleD09PWkpKCJhcmlhLWxhYmVsIixlLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsIWUuYXJpYUxhYmVsJiZlLmFyaWFMYWJlbGxlZGJ5P2UuYXJpYUxhYmVsbGVkYnk6bnVsbCksQygyKSx5KCJuZ0lmIixlLnRlbXBsYXRlTGFiZWwpKCJuZ0lmRWxzZSIscil9fWZ1bmN0aW9uIGtMZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsIm1hdC10YWItYm9keSIsMTEpLFAoIl9vbkNlbnRlcmVkIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkuX3JlbW92ZVRhYkJvZHlXcmFwcGVySGVpZ2h0KCkpfSkoIl9vbkNlbnRlcmluZyIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5fc2V0VGFiQm9keVdyYXBwZXJIZWlnaHQocikpfSksdigpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9UygpO2V0KCJtYXQtdGFiLWJvZHktYWN0aXZlIixyLnNlbGVjdGVkSW5kZXg9PT1pKSx5KCJpZCIsci5fZ2V0VGFiQ29udGVudElkKGkpKSgibmdDbGFzcyIsZS5ib2R5Q2xhc3MpKCJjb250ZW50IixlLmNvbnRlbnQpKCJwb3NpdGlvbiIsZS5wb3NpdGlvbikoIm9yaWdpbiIsZS5vcmlnaW4pKCJhbmltYXRpb25EdXJhdGlvbiIsci5hbmltYXRpb25EdXJhdGlvbikoInByZXNlcnZlQ29udGVudCIsci5wcmVzZXJ2ZUNvbnRlbnQpLHplKCJ0YWJpbmRleCIsbnVsbCE9ci5jb250ZW50VGFiSW5kZXgmJnIuc2VsZWN0ZWRJbmRleD09PWk/ci5jb250ZW50VGFiSW5kZXg6bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsci5fZ2V0VGFiTGFiZWxJZChpKSl9fXZhciBGTGU9bmV3IHBlKCJNYXRJbmtCYXJQb3NpdGlvbmVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiB0PT4oe2xlZnQ6dD8odC5vZmZzZXRMZWZ0fHwwKSsicHgiOiIwIix3aWR0aDp0Pyh0Lm9mZnNldFdpZHRofHwwKSsicHgiOiIwIn0pfX0pLGJpZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9pbmtCYXJQb3NpdGlvbmVyPXIsdGhpcy5fYW5pbWF0aW9uTW9kZT1vfWFsaWduVG9FbGVtZW50KGUpe3RoaXMuc2hvdygpLHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShRdCgxKSkuc3Vic2NyaWJlKCgpPT57bGV0IGk9dGhpcy5faW5rQmFyUG9zaXRpb25lcihlKSxyPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtyLnN0eWxlLmxlZnQ9aS5sZWZ0LHIuc3R5bGUud2lkdGg9aS53aWR0aH0pfSl9c2hvdygpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIn1oaWRlKCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oX3QpLE0oRkxlKSxNKFBpLDgpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWluay1iYXIiXV0saG9zdEF0dHJzOlsxLCJtYXQtaW5rLWJhciJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZldCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKX19KSxufSkoKSxMTGU9bmV3IHBlKCJNYXRUYWJDb250ZW50Iiksd2llPW5ldyBwZSgiTWF0VGFiTGFiZWwiKSxTaWU9bmV3IHBlKCJNQVRfVEFCIiksRWllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBmdGV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSksdGhpcy5fY2xvc2VzdFRhYj1yfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFZpKSxNKE9pKSxNKFNpZSw4KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC10YWItbGFiZWwiLCIiXSxbIiIsIm1hdFRhYkxhYmVsIiwiIl1dLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6d2llLHVzZUV4aXN0aW5nOm59XSksdHRdfSksbn0pKCksQkxlPXNvKGNsYXNze30pLFRpZT1uZXcgcGUoIk1BVF9UQUJfR1JPVVAiKSx4dz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQkxle2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLl92aWV3Q29udGFpbmVyUmVmPWUsdGhpcy5fY2xvc2VzdFRhYkdyb3VwPWksdGhpcy50ZXh0TGFiZWw9IiIsdGhpcy5fY29udGVudFBvcnRhbD1udWxsLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcga2UsdGhpcy5wb3NpdGlvbj1udWxsLHRoaXMub3JpZ2luPW51bGwsdGhpcy5pc0FjdGl2ZT0hMX1nZXQgdGVtcGxhdGVMYWJlbCgpe3JldHVybiB0aGlzLl90ZW1wbGF0ZUxhYmVsfXNldCB0ZW1wbGF0ZUxhYmVsKGUpe3RoaXMuX3NldFRlbXBsYXRlTGFiZWxJbnB1dChlKX1nZXQgY29udGVudCgpe3JldHVybiB0aGlzLl9jb250ZW50UG9ydGFsfW5nT25DaGFuZ2VzKGUpeyhlLmhhc093blByb3BlcnR5KCJ0ZXh0TGFiZWwiKXx8ZS5oYXNPd25Qcm9wZXJ0eSgiZGlzYWJsZWQiKSkmJnRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX1uZ09uSW5pdCgpe3RoaXMuX2NvbnRlbnRQb3J0YWw9bmV3IGtzKHRoaXMuX2V4cGxpY2l0Q29udGVudHx8dGhpcy5faW1wbGljaXRDb250ZW50LHRoaXMuX3ZpZXdDb250YWluZXJSZWYpfV9zZXRUZW1wbGF0ZUxhYmVsSW5wdXQoZSl7ZSYmZS5fY2xvc2VzdFRhYj09PXRoaXMmJih0aGlzLl90ZW1wbGF0ZUxhYmVsPWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKE9pKSxNKFRpZSw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRhYiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoRWkocix3aWUsNSksRWkocixMTGUsNyxWaSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkudGVtcGxhdGVMYWJlbD1vLmZpcnN0KSxOZShvPUxlKCkpJiYoaS5fZXhwbGljaXRDb250ZW50PW8uZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChWaSw3KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9pbXBsaWNpdENvbnRlbnQ9ci5maXJzdCl9fSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsdGV4dExhYmVsOlsibGFiZWwiLCJ0ZXh0TGFiZWwiXSxhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGxhYmVsQ2xhc3M6ImxhYmVsQ2xhc3MiLGJvZHlDbGFzczoiYm9keUNsYXNzIn0sZXhwb3J0QXM6WyJtYXRUYWIiXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOlNpZSx1c2VFeGlzdGluZzpufV0pLHR0LEZ0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6TWllLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoKSxFKDAseUxlLDEsMCwibmctdGVtcGxhdGUiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFZMZT17dHJhbnNsYXRlVGFiOktyKCJ0cmFuc2xhdGVUYWIiLFtraSgiY2VudGVyLCB2b2lkLCBsZWZ0LW9yaWdpbi1jZW50ZXIsIHJpZ2h0LW9yaWdpbi1jZW50ZXIiLGduKHt0cmFuc2Zvcm06Im5vbmUifSkpLGtpKCJsZWZ0Iixnbih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkiLG1pbkhlaWdodDoiMXB4Iix2aXNpYmlsaXR5OiJoaWRkZW4ifSkpLGtpKCJyaWdodCIsZ24oe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoMTAwJSwgMCwgMCkiLG1pbkhlaWdodDoiMXB4Iix2aXNpYmlsaXR5OiJoaWRkZW4ifSkpLExpKCIqID0+IGxlZnQsICogPT4gcmlnaHQsIGxlZnQgPT4gY2VudGVyLCByaWdodCA9PiBjZW50ZXIiLGppKCJ7e2FuaW1hdGlvbkR1cmF0aW9ufX0gY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpIikpLExpKCJ2b2lkID0+IGxlZnQtb3JpZ2luLWNlbnRlciIsW2duKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKSIsdmlzaWJpbGl0eToiaGlkZGVuIn0pLGppKCJ7e2FuaW1hdGlvbkR1cmF0aW9ufX0gY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpIildKSxMaSgidm9pZCA9PiByaWdodC1vcmlnaW4tY2VudGVyIixbZ24oe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoMTAwJSwgMCwgMCkiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KSxqaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpXSldKX0sSExlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBkYXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGksbyksdGhpcy5faG9zdD1yLHRoaXMuX2NlbnRlcmluZ1N1Yj1Tbi5FTVBUWSx0aGlzLl9sZWF2aW5nU3ViPVNuLkVNUFRZfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLl9jZW50ZXJpbmdTdWI9dGhpcy5faG9zdC5fYmVmb3JlQ2VudGVyaW5nLnBpcGUoem4odGhpcy5faG9zdC5faXNDZW50ZXJQb3NpdGlvbih0aGlzLl9ob3N0Ll9wb3NpdGlvbikpKS5zdWJzY3JpYmUoZT0+e2UmJiF0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuYXR0YWNoKHRoaXMuX2hvc3QuX2NvbnRlbnQpfSksdGhpcy5fbGVhdmluZ1N1Yj10aGlzLl9ob3N0Ll9hZnRlckxlYXZpbmdDZW50ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5faG9zdC5wcmVzZXJ2ZUNvbnRlbnR8fHRoaXMuZGV0YWNoKCl9KX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5fY2VudGVyaW5nU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fbGVhdmluZ1N1Yi51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKGdzKSxNKE9pKSxNKEpuKCgpPT5EaWUpKSxNKEh0KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFRhYkJvZHlIb3N0IiwiIl1dLGZlYXR1cmVzOlt0dF19KSxufSkoKSxVTGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2Rpcj1pLHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1Tbi5FTVBUWSx0aGlzLl90cmFuc2xhdGVUYWJDb21wbGV0ZT1uZXcga2UsdGhpcy5fb25DZW50ZXJpbmc9bmV3IEcsdGhpcy5fYmVmb3JlQ2VudGVyaW5nPW5ldyBHLHRoaXMuX2FmdGVyTGVhdmluZ0NlbnRlcj1uZXcgRyx0aGlzLl9vbkNlbnRlcmVkPW5ldyBHKCEwKSx0aGlzLmFuaW1hdGlvbkR1cmF0aW9uPSI1MDBtcyIsdGhpcy5wcmVzZXJ2ZUNvbnRlbnQ9ITEsaSYmKHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1pLmNoYW5nZS5zdWJzY3JpYmUobz0+e3RoaXMuX2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKG8pLHIubWFya0ZvckNoZWNrKCl9KSksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGUucGlwZSh5aSgobyxzKT0+by5mcm9tU3RhdGU9PT1zLmZyb21TdGF0ZSYmby50b1N0YXRlPT09cy50b1N0YXRlKSkuc3Vic2NyaWJlKG89Pnt0aGlzLl9pc0NlbnRlclBvc2l0aW9uKG8udG9TdGF0ZSkmJnRoaXMuX2lzQ2VudGVyUG9zaXRpb24odGhpcy5fcG9zaXRpb24pJiZ0aGlzLl9vbkNlbnRlcmVkLmVtaXQoKSx0aGlzLl9pc0NlbnRlclBvc2l0aW9uKG8uZnJvbVN0YXRlKSYmIXRoaXMuX2lzQ2VudGVyUG9zaXRpb24odGhpcy5fcG9zaXRpb24pJiZ0aGlzLl9hZnRlckxlYXZpbmdDZW50ZXIuZW1pdCgpfSl9c2V0IHBvc2l0aW9uKGUpe3RoaXMuX3Bvc2l0aW9uSW5kZXg9ZSx0aGlzLl9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZSgpfW5nT25Jbml0KCl7ImNlbnRlciI9PXRoaXMuX3Bvc2l0aW9uJiZudWxsIT10aGlzLm9yaWdpbiYmKHRoaXMuX3Bvc2l0aW9uPXRoaXMuX2NvbXB1dGVQb3NpdGlvbkZyb21PcmlnaW4odGhpcy5vcmlnaW4pKX1uZ09uRGVzdHJveSgpe3RoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLmNvbXBsZXRlKCl9X29uVHJhbnNsYXRlVGFiU3RhcnRlZChlKXtsZXQgaT10aGlzLl9pc0NlbnRlclBvc2l0aW9uKGUudG9TdGF0ZSk7dGhpcy5fYmVmb3JlQ2VudGVyaW5nLmVtaXQoaSksaSYmdGhpcy5fb25DZW50ZXJpbmcuZW1pdCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0KX1fZ2V0TGF5b3V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/InJ0bCI6Imx0ciJ9X2lzQ2VudGVyUG9zaXRpb24oZSl7cmV0dXJuImNlbnRlciI9PWV8fCJsZWZ0LW9yaWdpbi1jZW50ZXIiPT1lfHwicmlnaHQtb3JpZ2luLWNlbnRlciI9PWV9X2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKGU9dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkpe3RoaXMuX3Bvc2l0aW9uPXRoaXMuX3Bvc2l0aW9uSW5kZXg8MD8ibHRyIj09ZT8ibGVmdCI6InJpZ2h0Ijp0aGlzLl9wb3NpdGlvbkluZGV4PjA/Imx0ciI9PWU/InJpZ2h0IjoibGVmdCI6ImNlbnRlciJ9X2NvbXB1dGVQb3NpdGlvbkZyb21PcmlnaW4oZSl7bGV0IGk9dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk7cmV0dXJuImx0ciI9PWkmJmU8PTB8fCJydGwiPT1pJiZlPjA/ImxlZnQtb3JpZ2luLWNlbnRlciI6InJpZ2h0LW9yaWdpbi1jZW50ZXIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKCRpLDgpLE0obm4pKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixpbnB1dHM6e19jb250ZW50OlsiY29udGVudCIsIl9jb250ZW50Il0sb3JpZ2luOiJvcmlnaW4iLGFuaW1hdGlvbkR1cmF0aW9uOiJhbmltYXRpb25EdXJhdGlvbiIscHJlc2VydmVDb250ZW50OiJwcmVzZXJ2ZUNvbnRlbnQiLHBvc2l0aW9uOiJwb3NpdGlvbiJ9LG91dHB1dHM6e19vbkNlbnRlcmluZzoiX29uQ2VudGVyaW5nIixfYmVmb3JlQ2VudGVyaW5nOiJfYmVmb3JlQ2VudGVyaW5nIixfYWZ0ZXJMZWF2aW5nQ2VudGVyOiJfYWZ0ZXJMZWF2aW5nQ2VudGVyIixfb25DZW50ZXJlZDoiX29uQ2VudGVyZWQifX0pLG59KSgpLERpZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVUxle2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLGkscil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oJGksOCksTShubikpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWItYm9keSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KGRhLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX3BvcnRhbEhvc3Q9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC10YWItYm9keSJdLGZlYXR1cmVzOlt0dF0sZGVjbHM6Myx2YXJzOjYsY29uc3RzOltbImNka1Njcm9sbGFibGUiLCIiLDEsIm1hdC10YWItYm9keS1jb250ZW50Il0sWyJjb250ZW50IiwiIl0sWyJtYXRUYWJCb2R5SG9zdCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwLDEpLFAoIkB0cmFuc2xhdGVUYWIuc3RhcnQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vblRyYW5zbGF0ZVRhYlN0YXJ0ZWQobyl9KSgiQHRyYW5zbGF0ZVRhYi5kb25lIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fdHJhbnNsYXRlVGFiQ29tcGxldGUubmV4dChvKX0pLEUoMixiTGUsMCwwLCJuZy10ZW1wbGF0ZSIsMiksdigpKSwyJmUmJnkoIkB0cmFuc2xhdGVUYWIiLFFyKDMsQ0xlLGkuX3Bvc2l0aW9uLE9uKDEseExlLGkuYW5pbWF0aW9uRHVyYXRpb24pKSl9LGRlcGVuZGVuY2llczpbSExlXSxzdHlsZXM6WycubWF0LXRhYi1ib2R5LWNvbnRlbnR7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b30ubWF0LXRhYi1ncm91cC1keW5hbWljLWhlaWdodCAubWF0LXRhYi1ib2R5LWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtdGFiLWJvZHktY29udGVudFtzdHlsZSo9InZpc2liaWxpdHk6IGhpZGRlbiJde2Rpc3BsYXk6bm9uZX0nXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltWTGUudHJhbnNsYXRlVGFiXX19KSxufSkoKSxBaWU9bmV3IHBlKCJNQVRfVEFCU19DT05GSUciKSx6TGU9c28oY2xhc3N7fSksSWllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB6TGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmVsZW1lbnRSZWY9ZX1mb2N1cygpe3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9Z2V0T2Zmc2V0TGVmdCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0fWdldE9mZnNldFdpZHRoKCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFRhYkxhYmVsV3JhcHBlciIsIiJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJhcmlhLWRpc2FibGVkIiwhIWkuZGlzYWJsZWQpLGV0KCJtYXQtdGFiLWRpc2FibGVkIixpLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIn0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLHhpZT1sYSh7cGFzc2l2ZTohMH0pLFdMZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX3ZpZXdwb3J0UnVsZXI9cix0aGlzLl9kaXI9byx0aGlzLl9uZ1pvbmU9cyx0aGlzLl9wbGF0Zm9ybT1hLHRoaXMuX2FuaW1hdGlvbk1vZGU9bCx0aGlzLl9zY3JvbGxEaXN0YW5jZT0wLHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcga2UsdGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scz0hMSx0aGlzLl9kaXNhYmxlU2Nyb2xsQWZ0ZXI9ITAsdGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0hMCx0aGlzLl9zdG9wU2Nyb2xsaW5nPW5ldyBrZSx0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLl9zZWxlY3RlZEluZGV4PTAsdGhpcy5zZWxlY3RGb2N1c2VkSW5kZXg9bmV3IEcsdGhpcy5pbmRleEZvY3VzZWQ9bmV3IEcscy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e19pKGUubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIpLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fc3RvcEludGVydmFsKCl9KX0pfWdldCBkaXNhYmxlUGFnaW5hdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbn1zZXQgZGlzYWJsZVBhZ2luYXRpb24oZSl7dGhpcy5fZGlzYWJsZVBhZ2luYXRpb249UnQoZSl9Z2V0IHNlbGVjdGVkSW5kZXgoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleH1zZXQgc2VsZWN0ZWRJbmRleChlKXtlPUJpKGUpLHRoaXMuX3NlbGVjdGVkSW5kZXghPWUmJih0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZD0hMCx0aGlzLl9zZWxlY3RlZEluZGV4PWUsdGhpcy5fa2V5TWFuYWdlciYmdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGUpKX1uZ0FmdGVyVmlld0luaXQoKXtfaSh0aGlzLl9wcmV2aW91c1BhZ2luYXRvci5uYXRpdmVFbGVtZW50LCJ0b3VjaHN0YXJ0Iix4aWUpLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImJlZm9yZSIpfSksX2kodGhpcy5fbmV4dFBhZ2luYXRvci5uYXRpdmVFbGVtZW50LCJ0b3VjaHN0YXJ0Iix4aWUpLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImFmdGVyIil9KX1uZ0FmdGVyQ29udGVudEluaXQoKXtsZXQgZT10aGlzLl9kaXI/dGhpcy5fZGlyLmNoYW5nZTpYdCgibHRyIiksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgxNTApLHI9KCk9Pnt0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKX07dGhpcy5fa2V5TWFuYWdlcj1uZXcgU2godGhpcy5faXRlbXMpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkpLndpdGhIb21lQW5kRW5kKCkud2l0aFdyYXAoKSx0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0odGhpcy5fc2VsZWN0ZWRJbmRleCksdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoUXQoMSkpLnN1YnNjcmliZShyKSxKdChlLGksdGhpcy5faXRlbXMuY2hhbmdlcyx0aGlzLl9pdGVtc1Jlc2l6ZWQoKSkucGlwZShzdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9uZ1pvbmUucnVuKCgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX3Njcm9sbERpc3RhbmNlPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKSx0aGlzLl9zY3JvbGxEaXN0YW5jZSkpLHIoKX0pfSksdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2dldExheW91dERpcmVjdGlvbigpKX0pLHRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKG89Pnt0aGlzLmluZGV4Rm9jdXNlZC5lbWl0KG8pLHRoaXMuX3NldFRhYkZvY3VzKG8pfSl9X2l0ZW1zUmVzaXplZCgpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBSZXNpemVPYnNlcnZlcj9lbzp0aGlzLl9pdGVtcy5jaGFuZ2VzLnBpcGUoem4odGhpcy5faXRlbXMpLHVpKGU9Pm5ldyB1bihpPT50aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgcj1uZXcgUmVzaXplT2JzZXJ2ZXIobz0+aS5uZXh0KG8pKTtyZXR1cm4gZS5mb3JFYWNoKG89PnIub2JzZXJ2ZShvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpLCgpPT57ci5kaXNjb25uZWN0KCl9fSkpKSxaYSgxKSxZZShlPT5lLnNvbWUoaT0+aS5jb250ZW50UmVjdC53aWR0aD4wJiZpLmNvbnRlbnRSZWN0LmhlaWdodD4wKSkpfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuX3RhYkxhYmVsQ291bnQhPXRoaXMuX2l0ZW1zLmxlbmd0aCYmKHRoaXMudXBkYXRlUGFnaW5hdGlvbigpLHRoaXMuX3RhYkxhYmVsQ291bnQ9dGhpcy5faXRlbXMubGVuZ3RoLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSx0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZCYmKHRoaXMuX3Njcm9sbFRvTGFiZWwodGhpcy5fc2VsZWN0ZWRJbmRleCksdGhpcy5fY2hlY2tTY3JvbGxpbmdDb250cm9scygpLHRoaXMuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpLHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQmJih0aGlzLl91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpLHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3N0b3BTY3JvbGxpbmcuY29tcGxldGUoKX1faGFuZGxlS2V5ZG93bihlKXtpZigha3IoZSkpc3dpdGNoKGUua2V5Q29kZSl7Y2FzZSAxMzpjYXNlIDMyOnRoaXMuZm9jdXNJbmRleCE9PXRoaXMuc2VsZWN0ZWRJbmRleCYmKHRoaXMuc2VsZWN0Rm9jdXNlZEluZGV4LmVtaXQodGhpcy5mb2N1c0luZGV4KSx0aGlzLl9pdGVtU2VsZWN0ZWQoZSkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fa2V5TWFuYWdlci5vbktleWRvd24oZSl9fV9vbkNvbnRlbnRDaGFuZ2VzKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50O2UhPT10aGlzLl9jdXJyZW50VGV4dENvbnRlbnQmJih0aGlzLl9jdXJyZW50VGV4dENvbnRlbnQ9ZXx8IiIsdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMudXBkYXRlUGFnaW5hdGlvbigpLHRoaXMuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpfXVwZGF0ZVBhZ2luYXRpb24oKXt0aGlzLl9jaGVja1BhZ2luYXRpb25FbmFibGVkKCksdGhpcy5fY2hlY2tTY3JvbGxpbmdDb250cm9scygpLHRoaXMuX3VwZGF0ZVRhYlNjcm9sbFBvc2l0aW9uKCl9Z2V0IGZvY3VzSW5kZXgoKXtyZXR1cm4gdGhpcy5fa2V5TWFuYWdlcj90aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDowfXNldCBmb2N1c0luZGV4KGUpeyF0aGlzLl9pc1ZhbGlkSW5kZXgoZSl8fHRoaXMuZm9jdXNJbmRleD09PWV8fCF0aGlzLl9rZXlNYW5hZ2VyfHx0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oZSl9X2lzVmFsaWRJbmRleChlKXtpZighdGhpcy5faXRlbXMpcmV0dXJuITA7bGV0IGk9dGhpcy5faXRlbXM/dGhpcy5faXRlbXMudG9BcnJheSgpW2VdOm51bGw7cmV0dXJuISFpJiYhaS5kaXNhYmxlZH1fc2V0VGFiRm9jdXMoZSl7aWYodGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scyYmdGhpcy5fc2Nyb2xsVG9MYWJlbChlKSx0aGlzLl9pdGVtcyYmdGhpcy5faXRlbXMubGVuZ3RoKXt0aGlzLl9pdGVtcy50b0FycmF5KClbZV0uZm9jdXMoKTtsZXQgaT10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7aS5zY3JvbGxMZWZ0PSJsdHIiPT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKT8wOmkuc2Nyb2xsV2lkdGgtaS5vZmZzZXRXaWR0aH19X2dldExheW91dERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifV91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pcmV0dXJuO2xldCBlPXRoaXMuc2Nyb2xsRGlzdGFuY2UsaT0ibHRyIj09PXRoaXMuX2dldExheW91dERpcmVjdGlvbigpPy1lOmU7dGhpcy5fdGFiTGlzdC5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWCgke01hdGgucm91bmQoaSl9cHgpYCwodGhpcy5fcGxhdGZvcm0uVFJJREVOVHx8dGhpcy5fcGxhdGZvcm0uRURHRSkmJih0aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdD0wKX1nZXQgc2Nyb2xsRGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2V9c2V0IHNjcm9sbERpc3RhbmNlKGUpe3RoaXMuX3Njcm9sbFRvKGUpfV9zY3JvbGxIZWFkZXIoZSl7cmV0dXJuIHRoaXMuX3Njcm9sbFRvKHRoaXMuX3Njcm9sbERpc3RhbmNlKygiYmVmb3JlIj09ZT8tMToxKSp0aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgvMyl9X2hhbmRsZVBhZ2luYXRvckNsaWNrKGUpe3RoaXMuX3N0b3BJbnRlcnZhbCgpLHRoaXMuX3Njcm9sbEhlYWRlcihlKX1fc2Nyb2xsVG9MYWJlbChlKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybjtsZXQgaT10aGlzLl9pdGVtcz90aGlzLl9pdGVtcy50b0FycmF5KClbZV06bnVsbDtpZighaSlyZXR1cm47bGV0IGEsbCxyPXRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCx7b2Zmc2V0TGVmdDpvLG9mZnNldFdpZHRoOnN9PWkuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50OyJsdHIiPT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKT8oYT1vLGw9YStzKToobD10aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aC1vLGE9bC1zKTtsZXQgYz10aGlzLnNjcm9sbERpc3RhbmNlLHU9dGhpcy5zY3JvbGxEaXN0YW5jZStyO2E8Yz90aGlzLnNjcm9sbERpc3RhbmNlLT1jLWErNjA6bD51JiYodGhpcy5zY3JvbGxEaXN0YW5jZSs9bC11KzYwKX1fY2hlY2tQYWdpbmF0aW9uRW5hYmxlZCgpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pdGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scz0hMTtlbHNle2xldCBlPXRoaXMuX3RhYkxpc3RJbm5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoPnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtlfHwodGhpcy5zY3JvbGxEaXN0YW5jZT0wKSxlIT09dGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scyYmdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scz1lfX1fY2hlY2tTY3JvbGxpbmdDb250cm9scygpe3RoaXMuZGlzYWJsZVBhZ2luYXRpb24/dGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPXRoaXMuX2Rpc2FibGVTY3JvbGxCZWZvcmU9ITA6KHRoaXMuX2Rpc2FibGVTY3JvbGxCZWZvcmU9MD09dGhpcy5zY3JvbGxEaXN0YW5jZSx0aGlzLl9kaXNhYmxlU2Nyb2xsQWZ0ZXI9dGhpcy5zY3JvbGxEaXN0YW5jZT09dGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X2dldE1heFNjcm9sbERpc3RhbmNlKCl7cmV0dXJuIHRoaXMuX3RhYkxpc3RJbm5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoLXRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MH1fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCl7bGV0IGU9dGhpcy5faXRlbXMmJnRoaXMuX2l0ZW1zLmxlbmd0aD90aGlzLl9pdGVtcy50b0FycmF5KClbdGhpcy5zZWxlY3RlZEluZGV4XTpudWxsLGk9ZT9lLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDpudWxsO2k/dGhpcy5faW5rQmFyLmFsaWduVG9FbGVtZW50KGkpOnRoaXMuX2lua0Jhci5oaWRlKCl9X3N0b3BJbnRlcnZhbCgpe3RoaXMuX3N0b3BTY3JvbGxpbmcubmV4dCgpfV9oYW5kbGVQYWdpbmF0b3JQcmVzcyhlLGkpe2kmJm51bGwhPWkuYnV0dG9uJiYwIT09aS5idXR0b258fCh0aGlzLl9zdG9wSW50ZXJ2YWwoKSxLYSg2NTAsMTAwKS5waXBlKHN0KEp0KHRoaXMuX3N0b3BTY3JvbGxpbmcsdGhpcy5fZGVzdHJveWVkKSkpLnN1YnNjcmliZSgoKT0+e2xldHttYXhTY3JvbGxEaXN0YW5jZTpyLGRpc3RhbmNlOm99PXRoaXMuX3Njcm9sbEhlYWRlcihlKTsoMD09PW98fG8+PXIpJiZ0aGlzLl9zdG9wSW50ZXJ2YWwoKX0pKX1fc2Nyb2xsVG8oZSl7aWYodGhpcy5kaXNhYmxlUGFnaW5hdGlvbilyZXR1cm57bWF4U2Nyb2xsRGlzdGFuY2U6MCxkaXN0YW5jZTowfTtsZXQgaT10aGlzLl9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpO3JldHVybiB0aGlzLl9zY3JvbGxEaXN0YW5jZT1NYXRoLm1heCgwLE1hdGgubWluKGksZSkpLHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZD0hMCx0aGlzLl9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCkse21heFNjcm9sbERpc3RhbmNlOmksZGlzdGFuY2U6dGhpcy5fc2Nyb2xsRGlzdGFuY2V9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKG5uKSxNKFZhKSxNKCRpLDgpLE0oX3QpLE0ob2kpLE0oUGksOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLGlucHV0czp7ZGlzYWJsZVBhZ2luYXRpb246ImRpc2FibGVQYWdpbmF0aW9uIn19KSxufSkoKSxxTGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFdMZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihlLGkscixvLHMsYSxsKSx0aGlzLl9kaXNhYmxlUmlwcGxlPSExfWdldCBkaXNhYmxlUmlwcGxlKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVSaXBwbGV9c2V0IGRpc2FibGVSaXBwbGUoZSl7dGhpcy5fZGlzYWJsZVJpcHBsZT1SdChlKX1faXRlbVNlbGVjdGVkKGUpe2UucHJldmVudERlZmF1bHQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSksTShubiksTShWYSksTSgkaSw4KSxNKF90KSxNKG9pKSxNKFBpLDgpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxmZWF0dXJlczpbdHRdfSksbn0pKCksWUxlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBxTGV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCl7c3VwZXIoZSxpLHIsbyxzLGEsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0obm4pLE0oVmEpLE0oJGksOCksTShfdCksTShvaSksTShQaSw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRhYi1oZWFkZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmRWkocixJaWUsNCksMiZlKXtsZXQgbztOZShvPUxlKCkpJiYoaS5faXRlbXM9byl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihvdChiaWUsNyksb3QoTUxlLDcpLG90KHdMZSw3KSxvdChTTGUsNyksb3QoRUxlLDUpLG90KFRMZSw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5faW5rQmFyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl90YWJMaXN0Q29udGFpbmVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl90YWJMaXN0PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl90YWJMaXN0SW5uZXI9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuX25leHRQYWdpbmF0b3I9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuX3ByZXZpb3VzUGFnaW5hdG9yPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtdGFiLWhlYWRlciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZldCgibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jb250cm9scy1lbmFibGVkIixpLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzKSgibWF0LXRhYi1oZWFkZXItcnRsIiwicnRsIj09aS5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkpfSxpbnB1dHM6e3NlbGVjdGVkSW5kZXg6InNlbGVjdGVkSW5kZXgifSxvdXRwdXRzOntzZWxlY3RGb2N1c2VkSW5kZXg6InNlbGVjdEZvY3VzZWRJbmRleCIsaW5kZXhGb2N1c2VkOiJpbmRleEZvY3VzZWQifSxmZWF0dXJlczpbdHRdLG5nQ29udGVudFNlbGVjdG9yczpNaWUsZGVjbHM6MTQsdmFyczoxMCxjb25zdHM6W1siYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsIm1hdC1yaXBwbGUiLCIiLCJ0YWJpbmRleCIsIi0xIiwxLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIiwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUiLCJtYXQtZWxldmF0aW9uLXo0IiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsImRpc2FibGVkIiwiY2xpY2siLCJtb3VzZWRvd24iLCJ0b3VjaGVuZCJdLFsicHJldmlvdXNQYWdpbmF0b3IiLCIiXSxbMSwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIl0sWzEsIm1hdC10YWItbGFiZWwtY29udGFpbmVyIiwzLCJrZXlkb3duIl0sWyJ0YWJMaXN0Q29udGFpbmVyIiwiIl0sWyJyb2xlIiwidGFibGlzdCIsMSwibWF0LXRhYi1saXN0IiwzLCJjZGtPYnNlcnZlQ29udGVudCJdLFsidGFiTGlzdCIsIiJdLFsxLCJtYXQtdGFiLWxhYmVscyJdLFsidGFiTGlzdElubmVyIiwiIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiYnV0dG9uIiwibWF0LXJpcHBsZSIsIiIsInRhYmluZGV4IiwiLTEiLDEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24iLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIiwibWF0LWVsZXZhdGlvbi16NCIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJkaXNhYmxlZCIsIm1vdXNlZG93biIsImNsaWNrIiwidG91Y2hlbmQiXSxbIm5leHRQYWdpbmF0b3IiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih4aSgpLF8oMCwiYnV0dG9uIiwwLDEpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVQYWdpbmF0b3JDbGljaygiYmVmb3JlIil9KSgibW91c2Vkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImJlZm9yZSIsbyl9KSgidG91Y2hlbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3N0b3BJbnRlcnZhbCgpfSksTygyLCJkaXYiLDIpLHYoKSxfKDMsImRpdiIsMyw0KSxQKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pLF8oNSwiZGl2Iiw1LDYpLFAoImNka09ic2VydmVDb250ZW50IixmdW5jdGlvbigpe3JldHVybiBpLl9vbkNvbnRlbnRDaGFuZ2VzKCl9KSxfKDcsImRpdiIsNyw4KSxWbig5KSx2KCksTygxMCwibWF0LWluay1iYXIiKSx2KCkoKSxfKDExLCJidXR0b24iLDksMTApLFAoIm1vdXNlZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJhZnRlciIsbyl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvckNsaWNrKCJhZnRlciIpfSkoInRvdWNoZW5kIixmdW5jdGlvbigpe3JldHVybiBpLl9zdG9wSW50ZXJ2YWwoKX0pLE8oMTMsImRpdiIsMiksdigpKSwyJmUmJihldCgibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEJlZm9yZSkseSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxCZWZvcmV8fGkuZGlzYWJsZVJpcHBsZSkoImRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQmVmb3JlfHxudWxsKSxDKDUpLGV0KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpLEMoNiksZXQoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxBZnRlcikseSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxBZnRlcnx8aS5kaXNhYmxlUmlwcGxlKSgiZGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxBZnRlcnx8bnVsbCkpfSxkZXBlbmRlbmNpZXM6W1lvLHdoLGJpZV0sc3R5bGVzOlsiLm1hdC10YWItaGVhZGVye2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOjMycHg7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RvdWNoLWFjdGlvbjpub25lO2JveC1zaXppbmc6Y29udGVudC1ib3g7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO291dGxpbmU6MDtwYWRkaW5nOjB9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntkaXNwbGF5OmZsZXh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlLC5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1sZWZ0OjRweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSgtMTM1ZGVnKX0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlcntwYWRkaW5nLXJpZ2h0OjRweH0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjJweCAycHggMCAwO2hlaWdodDo4cHg7d2lkdGg6OHB4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVke2JveC1zaGFkb3c6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LXRhYi1saXN0e2ZsZXgtZ3JvdzoxO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246dHJhbnNmb3JtIDUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LWluay1iYXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7aGVpZ2h0OjJweDt0cmFuc2l0aW9uOjUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LWluay1iYXIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC1pbmstYmFye2JvdHRvbTphdXRvO3RvcDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1pbmstYmFye291dGxpbmU6c29saWQgMnB4O2hlaWdodDowfS5tYXQtdGFiLWxhYmVsc3tkaXNwbGF5OmZsZXh9W21hdC1hbGlnbi10YWJzPWNlbnRlcl0+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsc3tqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVttYXQtYWxpZ24tdGFicz1lbmRdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtdGFiLWxhYmVsLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MX0ubWF0LXRhYi1saXN0Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC10YWItbGFiZWx7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1sYWJlbDpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxhYmVsIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbHtvcGFjaXR5OjF9Lm1hdC10YWItbGFiZWw6OmJlZm9yZXttYXJnaW46NXB4fUBtZWRpYShtYXgtd2lkdGg6IDU5OXB4KXsubWF0LXRhYi1sYWJlbHttaW4td2lkdGg6NzJweH19Il0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksWExlPTAsUUxlPWtvKHFvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSwicHJpbWFyeSIpLEtMZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgUUxle2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fYW5pbWF0aW9uTW9kZT1vLHRoaXMuX3RhYnM9bmV3IEhsLHRoaXMuX2luZGV4VG9TZWxlY3Q9MCx0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PW51bGwsdGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9MCx0aGlzLl90YWJzU3Vic2NyaXB0aW9uPVNuLkVNUFRZLHRoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uPVNuLkVNUFRZLHRoaXMuX2R5bmFtaWNIZWlnaHQ9ITEsdGhpcy5fc2VsZWN0ZWRJbmRleD1udWxsLHRoaXMuaGVhZGVyUG9zaXRpb249ImFib3ZlIix0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLl9wcmVzZXJ2ZUNvbnRlbnQ9ITEsdGhpcy5zZWxlY3RlZEluZGV4Q2hhbmdlPW5ldyBHLHRoaXMuZm9jdXNDaGFuZ2U9bmV3IEcsdGhpcy5hbmltYXRpb25Eb25lPW5ldyBHLHRoaXMuc2VsZWN0ZWRUYWJDaGFuZ2U9bmV3IEcoITApLHRoaXMuX2dyb3VwSWQ9WExlKyssdGhpcy5hbmltYXRpb25EdXJhdGlvbj1yJiZyLmFuaW1hdGlvbkR1cmF0aW9uP3IuYW5pbWF0aW9uRHVyYXRpb246IjUwMG1zIix0aGlzLmRpc2FibGVQYWdpbmF0aW9uPSEoIXJ8fG51bGw9PXIuZGlzYWJsZVBhZ2luYXRpb24pJiZyLmRpc2FibGVQYWdpbmF0aW9uLHRoaXMuZHluYW1pY0hlaWdodD0hKCFyfHxudWxsPT1yLmR5bmFtaWNIZWlnaHQpJiZyLmR5bmFtaWNIZWlnaHQsdGhpcy5jb250ZW50VGFiSW5kZXg9cj8uY29udGVudFRhYkluZGV4Pz9udWxsLHRoaXMucHJlc2VydmVDb250ZW50PSEhcj8ucHJlc2VydmVDb250ZW50fWdldCBkeW5hbWljSGVpZ2h0KCl7cmV0dXJuIHRoaXMuX2R5bmFtaWNIZWlnaHR9c2V0IGR5bmFtaWNIZWlnaHQoZSl7dGhpcy5fZHluYW1pY0hlaWdodD1SdChlKX1nZXQgc2VsZWN0ZWRJbmRleCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZEluZGV4fXNldCBzZWxlY3RlZEluZGV4KGUpe3RoaXMuX2luZGV4VG9TZWxlY3Q9QmkoZSxudWxsKX1nZXQgYW5pbWF0aW9uRHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uRHVyYXRpb259c2V0IGFuaW1hdGlvbkR1cmF0aW9uKGUpe3RoaXMuX2FuaW1hdGlvbkR1cmF0aW9uPS9eXGQrJC8udGVzdChlKyIiKT9lKyJtcyI6ZX1nZXQgY29udGVudFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuX2NvbnRlbnRUYWJJbmRleH1zZXQgY29udGVudFRhYkluZGV4KGUpe3RoaXMuX2NvbnRlbnRUYWJJbmRleD1CaShlLG51bGwpfWdldCBkaXNhYmxlUGFnaW5hdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbn1zZXQgZGlzYWJsZVBhZ2luYXRpb24oZSl7dGhpcy5fZGlzYWJsZVBhZ2luYXRpb249UnQoZSl9Z2V0IHByZXNlcnZlQ29udGVudCgpe3JldHVybiB0aGlzLl9wcmVzZXJ2ZUNvbnRlbnR9c2V0IHByZXNlcnZlQ29udGVudChlKXt0aGlzLl9wcmVzZXJ2ZUNvbnRlbnQ9UnQoZSl9Z2V0IGJhY2tncm91bmRDb2xvcigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29sb3J9c2V0IGJhY2tncm91bmRDb2xvcihlKXtsZXQgaT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aS5jbGFzc0xpc3QucmVtb3ZlKGBtYXQtYmFja2dyb3VuZC0ke3RoaXMuYmFja2dyb3VuZENvbG9yfWApLGUmJmkuY2xhc3NMaXN0LmFkZChgbWF0LWJhY2tncm91bmQtJHtlfWApLHRoaXMuX2JhY2tncm91bmRDb2xvcj1lfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe2xldCBlPXRoaXMuX2luZGV4VG9TZWxlY3Q9dGhpcy5fY2xhbXBUYWJJbmRleCh0aGlzLl9pbmRleFRvU2VsZWN0KTtpZih0aGlzLl9zZWxlY3RlZEluZGV4IT1lKXtsZXQgaT1udWxsPT10aGlzLl9zZWxlY3RlZEluZGV4O2lmKCFpKXt0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoZSkpO2xldCByPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7ci5zdHlsZS5taW5IZWlnaHQ9ci5jbGllbnRIZWlnaHQrInB4In1Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fdGFicy5mb3JFYWNoKChyLG8pPT5yLmlzQWN0aXZlPW89PT1lKSxpfHwodGhpcy5zZWxlY3RlZEluZGV4Q2hhbmdlLmVtaXQoZSksdGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS5taW5IZWlnaHQ9IiIpfSl9dGhpcy5fdGFicy5mb3JFYWNoKChpLHIpPT57aS5wb3NpdGlvbj1yLWUsbnVsbCE9dGhpcy5fc2VsZWN0ZWRJbmRleCYmMD09aS5wb3NpdGlvbiYmIWkub3JpZ2luJiYoaS5vcmlnaW49ZS10aGlzLl9zZWxlY3RlZEluZGV4KX0pLHRoaXMuX3NlbGVjdGVkSW5kZXghPT1lJiYodGhpcy5fc2VsZWN0ZWRJbmRleD1lLHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg9bnVsbCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fc3Vic2NyaWJlVG9BbGxUYWJDaGFuZ2VzKCksdGhpcy5fc3Vic2NyaWJlVG9UYWJMYWJlbHMoKSx0aGlzLl90YWJzU3Vic2NyaXB0aW9uPXRoaXMuX3RhYnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PntsZXQgZT10aGlzLl9jbGFtcFRhYkluZGV4KHRoaXMuX2luZGV4VG9TZWxlY3QpO2lmKGU9PT10aGlzLl9zZWxlY3RlZEluZGV4KXtsZXQgcixpPXRoaXMuX3RhYnMudG9BcnJheSgpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKWlmKGlbb10uaXNBY3RpdmUpe3RoaXMuX2luZGV4VG9TZWxlY3Q9dGhpcy5fc2VsZWN0ZWRJbmRleD1vLHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg9bnVsbCxyPWlbb107YnJlYWt9IXImJmlbZV0mJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntpW2VdLmlzQWN0aXZlPSEwLHRoaXMuc2VsZWN0ZWRUYWJDaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudChlKSl9KX10aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfV9zdWJzY3JpYmVUb0FsbFRhYkNoYW5nZXMoKXt0aGlzLl9hbGxUYWJzLmNoYW5nZXMucGlwZSh6bih0aGlzLl9hbGxUYWJzKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLl90YWJzLnJlc2V0KGUuZmlsdGVyKGk9PmkuX2Nsb3Nlc3RUYWJHcm91cD09PXRoaXN8fCFpLl9jbG9zZXN0VGFiR3JvdXApKSx0aGlzLl90YWJzLm5vdGlmeU9uQ2hhbmdlcygpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl90YWJzLmRlc3Ryb3koKSx0aGlzLl90YWJzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1yZWFsaWduSW5rQmFyKCl7dGhpcy5fdGFiSGVhZGVyJiZ0aGlzLl90YWJIZWFkZXIuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpfXVwZGF0ZVBhZ2luYXRpb24oKXt0aGlzLl90YWJIZWFkZXImJnRoaXMuX3RhYkhlYWRlci51cGRhdGVQYWdpbmF0aW9uKCl9Zm9jdXNUYWIoZSl7bGV0IGk9dGhpcy5fdGFiSGVhZGVyO2kmJihpLmZvY3VzSW5kZXg9ZSl9X2ZvY3VzQ2hhbmdlZChlKXt0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PWUsdGhpcy5mb2N1c0NoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KGUpKX1fY3JlYXRlQ2hhbmdlRXZlbnQoZSl7bGV0IGk9bmV3IGNsYXNze307cmV0dXJuIGkuaW5kZXg9ZSx0aGlzLl90YWJzJiZ0aGlzLl90YWJzLmxlbmd0aCYmKGkudGFiPXRoaXMuX3RhYnMudG9BcnJheSgpW2VdKSxpfV9zdWJzY3JpYmVUb1RhYkxhYmVscygpe3RoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uJiZ0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uPUp0KC4uLnRoaXMuX3RhYnMubWFwKGU9PmUuX3N0YXRlQ2hhbmdlcykpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9jbGFtcFRhYkluZGV4KGUpe3JldHVybiBNYXRoLm1pbih0aGlzLl90YWJzLmxlbmd0aC0xLE1hdGgubWF4KGV8fDAsMCkpfV9nZXRUYWJMYWJlbElkKGUpe3JldHVybmBtYXQtdGFiLWxhYmVsLSR7dGhpcy5fZ3JvdXBJZH0tJHtlfWB9X2dldFRhYkNvbnRlbnRJZChlKXtyZXR1cm5gbWF0LXRhYi1jb250ZW50LSR7dGhpcy5fZ3JvdXBJZH0tJHtlfWB9X3NldFRhYkJvZHlXcmFwcGVySGVpZ2h0KGUpe2lmKCF0aGlzLl9keW5hbWljSGVpZ2h0fHwhdGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQpcmV0dXJuO2xldCBpPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7aS5zdHlsZS5oZWlnaHQ9dGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQrInB4Iix0aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCYmKGkuc3R5bGUuaGVpZ2h0PWUrInB4Iil9X3JlbW92ZVRhYkJvZHlXcmFwcGVySGVpZ2h0KCl7bGV0IGU9dGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudDt0aGlzLl90YWJCb2R5V3JhcHBlckhlaWdodD1lLmNsaWVudEhlaWdodCxlLnN0eWxlLmhlaWdodD0iIix0aGlzLmFuaW1hdGlvbkRvbmUuZW1pdCgpfV9oYW5kbGVDbGljayhlLGkscil7ZS5kaXNhYmxlZHx8KHRoaXMuc2VsZWN0ZWRJbmRleD1pLmZvY3VzSW5kZXg9cil9X2dldFRhYkluZGV4KGUsaSl7cmV0dXJuIGUuZGlzYWJsZWQ/bnVsbDppPT09KHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg/P3RoaXMuc2VsZWN0ZWRJbmRleCk/MDotMX1fdGFiRm9jdXNDaGFuZ2VkKGUsaSl7ZSYmIm1vdXNlIiE9PWUmJiJ0b3VjaCIhPT1lJiYodGhpcy5fdGFiSGVhZGVyLmZvY3VzSW5kZXg9aSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0obm4pLE0oQWllLDgpLE0oUGksOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLGlucHV0czp7ZHluYW1pY0hlaWdodDoiZHluYW1pY0hlaWdodCIsc2VsZWN0ZWRJbmRleDoic2VsZWN0ZWRJbmRleCIsaGVhZGVyUG9zaXRpb246ImhlYWRlclBvc2l0aW9uIixhbmltYXRpb25EdXJhdGlvbjoiYW5pbWF0aW9uRHVyYXRpb24iLGNvbnRlbnRUYWJJbmRleDoiY29udGVudFRhYkluZGV4IixkaXNhYmxlUGFnaW5hdGlvbjoiZGlzYWJsZVBhZ2luYXRpb24iLHByZXNlcnZlQ29udGVudDoicHJlc2VydmVDb250ZW50IixiYWNrZ3JvdW5kQ29sb3I6ImJhY2tncm91bmRDb2xvciJ9LG91dHB1dHM6e3NlbGVjdGVkSW5kZXhDaGFuZ2U6InNlbGVjdGVkSW5kZXhDaGFuZ2UiLGZvY3VzQ2hhbmdlOiJmb2N1c0NoYW5nZSIsYW5pbWF0aW9uRG9uZToiYW5pbWF0aW9uRG9uZSIsc2VsZWN0ZWRUYWJDaGFuZ2U6InNlbGVjdGVkVGFiQ2hhbmdlIn0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLFoyPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBLTGV7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0obm4pLE0oQWllLDgpLE0oUGksOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWItZ3JvdXAiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmRWkocix4dyw1KSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLl9hbGxUYWJzPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoRExlLDUpLG90KEFMZSw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5fdGFiQm9keVdyYXBwZXI9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuX3RhYkhlYWRlcj1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LXRhYi1ncm91cCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZldCgibWF0LXRhYi1ncm91cC1keW5hbWljLWhlaWdodCIsaS5keW5hbWljSGVpZ2h0KSgibWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIiLCJiZWxvdyI9PT1pLmhlYWRlclBvc2l0aW9uKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpUaWUsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sZGVjbHM6Nix2YXJzOjcsY29uc3RzOltbMywic2VsZWN0ZWRJbmRleCIsImRpc2FibGVSaXBwbGUiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImluZGV4Rm9jdXNlZCIsInNlbGVjdEZvY3VzZWRJbmRleCJdLFsidGFiSGVhZGVyIiwiIl0sWyJjbGFzcyIsIm1hdC10YWItbGFiZWwgbWF0LWZvY3VzLWluZGljYXRvciIsInJvbGUiLCJ0YWIiLCJtYXRUYWJMYWJlbFdyYXBwZXIiLCIiLCJtYXQtcmlwcGxlIiwiIiwiY2RrTW9uaXRvckVsZW1lbnRGb2N1cyIsIiIsMywiaWQiLCJtYXQtdGFiLWxhYmVsLWFjdGl2ZSIsIm5nQ2xhc3MiLCJkaXNhYmxlZCIsIm1hdFJpcHBsZURpc2FibGVkIiwiY2xpY2siLCJjZGtGb2N1c0NoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1hdC10YWItYm9keS13cmFwcGVyIl0sWyJ0YWJCb2R5V3JhcHBlciIsIiJdLFsicm9sZSIsInRhYnBhbmVsIiwzLCJpZCIsIm1hdC10YWItYm9keS1hY3RpdmUiLCJuZ0NsYXNzIiwiY29udGVudCIsInBvc2l0aW9uIiwib3JpZ2luIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJwcmVzZXJ2ZUNvbnRlbnQiLCJfb25DZW50ZXJlZCIsIl9vbkNlbnRlcmluZyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwidGFiIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIiwibWF0LXJpcHBsZSIsIiIsImNka01vbml0b3JFbGVtZW50Rm9jdXMiLCIiLDEsIm1hdC10YWItbGFiZWwiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIiwzLCJpZCIsIm5nQ2xhc3MiLCJkaXNhYmxlZCIsIm1hdFJpcHBsZURpc2FibGVkIiwiY2xpY2siLCJjZGtGb2N1c0NoYW5nZSJdLFsxLCJtYXQtdGFiLWxhYmVsLWNvbnRlbnQiXSxbMywibmdJZiIsIm5nSWZFbHNlIl0sWyJ0YWJUZXh0TGFiZWwiLCIiXSxbMywiY2RrUG9ydGFsT3V0bGV0Il0sWyJyb2xlIiwidGFicGFuZWwiLDMsImlkIiwibmdDbGFzcyIsImNvbnRlbnQiLCJwb3NpdGlvbiIsIm9yaWdpbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwicHJlc2VydmVDb250ZW50IiwiX29uQ2VudGVyZWQiLCJfb25DZW50ZXJpbmciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1hdC10YWItaGVhZGVyIiwwLDEpLFAoImluZGV4Rm9jdXNlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2ZvY3VzQ2hhbmdlZChvKX0pKCJzZWxlY3RGb2N1c2VkSW5kZXgiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNlbGVjdGVkSW5kZXg9b30pLEUoMixPTGUsNSwxNSwiZGl2IiwyKSx2KCksXygzLCJkaXYiLDMsNCksRSg1LGtMZSwxLDExLCJtYXQtdGFiLWJvZHkiLDUpLHYoKSksMiZlJiYoeSgic2VsZWN0ZWRJbmRleCIsaS5zZWxlY3RlZEluZGV4fHwwKSgiZGlzYWJsZVJpcHBsZSIsaS5kaXNhYmxlUmlwcGxlKSgiZGlzYWJsZVBhZ2luYXRpb24iLGkuZGlzYWJsZVBhZ2luYXRpb24pLEMoMikseSgibmdGb3JPZiIsaS5fdGFicyksQygxKSxldCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSxDKDIpLHkoIm5nRm9yT2YiLGkuX3RhYnMpKX0sZGVwZW5kZW5jaWVzOltGbixkbixCZSxkYSxZbyxudGUsSWllLERpZSxZTGVdLHN0eWxlczpbIi5tYXQtdGFiLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWF4LXdpZHRoOjEwMCV9Lm1hdC10YWItZ3JvdXAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9Lm1hdC10YWItbGFiZWx7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1sYWJlbDpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxhYmVsIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbHtvcGFjaXR5OjF9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdGFiLWxhYmVse3BhZGRpbmc6MCAxMnB4fX1AbWVkaWEobWF4LXdpZHRoOiA5NTlweCl7Lm1hdC10YWItbGFiZWx7cGFkZGluZzowIDEycHh9fS5tYXQtdGFiLWdyb3VwW21hdC1zdHJldGNoLXRhYnNdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjF9Lm1hdC10YWItYm9keS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmZsZXg7dHJhbnNpdGlvbjpoZWlnaHQgNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5tYXQtdGFiLWJvZHktd3JhcHBlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtdGFiLWJvZHl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47b3V0bGluZTowO2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXRhYi1ib2R5Lm1hdC10YWItYm9keS1hY3RpdmV7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3otaW5kZXg6MTtmbGV4LWdyb3c6MX0ubWF0LXRhYi1ncm91cC5tYXQtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtdGFiLWJvZHkubWF0LXRhYi1ib2R5LWFjdGl2ZXtvdmVyZmxvdy15OmhpZGRlbn0iXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxKMj0ob2MocW8oc28oY2xhc3N7fSkpKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsbG4sZXUsX2wsb2QsRXYsbG5dfSksbn0pKCkpO2Z1bmN0aW9uIFpMZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsInNwYW4iLDUpLFAoImNsaWNrIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKCkuJGltcGxpY2l0O3JldHVybiBzZShTKCkub25BY3RpdmVQbHVnaW5TZWxlY3Rpb24ocixvLmlkKSl9KSxBKDEpLHYoKX1pZigyJm4pe2xldCBlPVMoKS4kaW1wbGljaXQ7emUoImRhdGEtcGx1Z2luLWlkIixlLmlkKSxDKDEpLGplKCIgIixlLnRhYl9uYW1lLCIgIil9fWZ1bmN0aW9uIEpMZShuLHQpezEmbiYmKF8oMCwibWF0LXRhYiIsMyksRSgxLFpMZSwyLDIsIm5nLXRlbXBsYXRlIiw0KSx2KCkpLDImbiYmeSgiZGlzYWJsZWQiLCF0LiRpbXBsaWNpdC5lbmFibGVkKX1mdW5jdGlvbiAkTGUobix0KXtpZigxJm4mJihfKDAsIm1hdC1vcHRpb24iLDkpLEEoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O3koInZhbHVlIixlLmlkKSx6ZSgiZGF0YS1wbHVnaW4taWQiLGUuaWQpLEMoMSksamUoIiAiLGUudGFiX25hbWUsIiAiKX19ZnVuY3Rpb24gZTNlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwibWF0LWZvcm0tZmllbGQiLDYpKDEsIm1hdC1sYWJlbCIpLEEoMiwiSW5hY3RpdmUiKSx2KCksXygzLCJtYXQtc2VsZWN0Iiw3KSxQKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQocikpfSksRSg0LCRMZSwyLDMsIm1hdC1vcHRpb24iLDgpLHYoKSgpfWlmKDImbil7bGV0IGU9UygpO0MoMykseSgidmFsdWUiLGUuc2VsZWN0ZWRQbHVnaW4pLEMoMSkseSgibmdGb3JPZiIsZS5kaXNhYmxlZFBsdWdpbnMpfX12YXIgUmllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZD1uZXcgR31nZXRBY3RpdmVQbHVnaW5JbmRleCgpe3JldHVybiB0aGlzLmFjdGl2ZVBsdWdpbnMuZmluZEluZGV4KCh7aWQ6ZX0pPT5lPT09dGhpcy5zZWxlY3RlZFBsdWdpbil9b25BY3RpdmVQbHVnaW5TZWxlY3Rpb24oZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoaSl9b25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5vblBsdWdpblNlbGVjdGlvbkNoYW5nZWQuZW1pdChlLnZhbHVlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbnM6ImFjdGl2ZVBsdWdpbnMiLGRpc2FibGVkUGx1Z2luczoiZGlzYWJsZWRQbHVnaW5zIixzZWxlY3RlZFBsdWdpbjoic2VsZWN0ZWRQbHVnaW4ifSxvdXRwdXRzOntvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQ6Im9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJ9LGRlY2xzOjMsdmFyczozLGNvbnN0czpbWyJhbmltYXRpb25EdXJhdGlvbiIsIjEwMG1zIiwxLCJhY3RpdmUtcGx1Z2luLWxpc3QiLDMsInNlbGVjdGVkSW5kZXgiXSxbMywiZGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIiw0LCJuZ0lmIl0sWzMsImRpc2FibGVkIl0sWyJtYXQtdGFiLWxhYmVsIiwiIl0sWzEsInBsdWdpbi1uYW1lIiwzLCJjbGljayJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIl0sWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1hdC10YWItZ3JvdXAiLDApLEUoMSxKTGUsMiwxLCJtYXQtdGFiIiwxKSx2KCksRSgyLGUzZSw1LDIsIm1hdC1mb3JtLWZpZWxkIiwyKSksMiZlJiYoeSgic2VsZWN0ZWRJbmRleCIsaS5nZXRBY3RpdmVQbHVnaW5JbmRleCgpKSxDKDEpLHkoIm5nRm9yT2YiLGkuYWN0aXZlUGx1Z2lucyksQygxKSx5KCJuZ0lmIixpLmRpc2FibGVkUGx1Z2lucy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W1oyLEVpZSx4dyxwZCxOdixIaCxPcyxkbixCZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Zm9udC1zaXplOjE0cHg7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVufW1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjAgMDttYXJnaW4tdG9wOjVweDt3aWR0aDoxMzBweH1tYXQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCBtYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSwgbWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uYWN0aXZlLXBsdWdpbi1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1zZWxmOnN0cmV0Y2g7ZmxleDoxIDEgYXV0bztvdmVyZmxvdzpoaWRkZW59LnBsdWdpbi1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MCAxMnB4O3dpZHRoOjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saXN0IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxpbmt7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi43fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWwubWF0LXRhYi1sYWJlbC1hY3RpdmUsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGluay5tYXQtdGFiLWxhYmVsLWFjdGl2ZXtvcGFjaXR5OjF9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3J9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHt2aXNpYmlsaXR5OmhpZGRlbn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWRpc2FibGVke2Rpc3BsYXk6bm9uZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItbGlzdCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXIsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWxzLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVse2hlaWdodDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjQ4cHg7cGFkZGluZzowO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7aGVpZ2h0OjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlciAubWF0LXRhYi1saXN0e3BhZGRpbmc6MCAzNnB4fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+OmZpcnN0LWNoaWxkLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWxhYmVsLWNvbnRhaW5lciwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46bGFzdC1jaGlsZHtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpmaXJzdC1jaGlsZCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7bGVmdDowfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Omxhc3QtY2hpbGQsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Lm1hdC10YWItbGFiZWwtY29udGFpbmVye3JpZ2h0OjB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH0iXX0pLG59KSgpLE9pZT1KKHJ2LG49Pk9iamVjdC5rZXlzKG4pLm1hcCh0PT5PYmplY3QuYXNzaWduKHt9LHtpZDp0fSxuW3RdKSkpLG4zZT1KKE9pZSxuPT5uLmZpbHRlcih0PT4hdC5lbmFibGVkKSksa2llPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUGx1Z2luJD10aGlzLnN0b3JlLnBpcGUodnQoUnMpKSx0aGlzLnBsdWdpbnMkPXRoaXMuc3RvcmUucGlwZSh2dChPaWUpKSx0aGlzLmRpc2FibGVkUGx1Z2lucyQ9dGhpcy5zdG9yZS5waXBlKHZ0KG4zZSkpfW9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goWnUoe3BsdWdpbjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsImFjdGl2ZVBsdWdpbnMiLCJkaXNhYmxlZFBsdWdpbnMiLCJzZWxlY3RlZFBsdWdpbiIsIm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCIsMCksUCgib25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBsdWdpblNlbGVjdGlvbkNoYW5nZShvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJhY3RpdmVQbHVnaW5zIixVKDEsMyxpLnBsdWdpbnMkKSkoImRpc2FibGVkUGx1Z2lucyIsVSgyLDUsaS5kaXNhYmxlZFBsdWdpbnMkKSkoInNlbGVjdGVkUGx1Z2luIixVKDMsNyxpLmFjdGl2ZVBsdWdpbiQpKX0sZGVwZW5kZW5jaWVzOltSaWUsR2VdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHIzZT1KKHJ2LFJzLChuLHQpPT4hKCF0fHwhblt0XSkmJm5bdF0uZGlzYWJsZV9yZWxvYWQpLEZpZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnJlbG9hZERpc2FibGVkJD10aGlzLnN0b3JlLnNlbGVjdChyM2UpLHRoaXMuaXNSZWxvYWRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KEwkKS5waXBlKGZyKHRoaXMucmVsb2FkRGlzYWJsZWQkKSxMKChbaSxyXSk9PiFyJiZpPT09T2UuTE9BRElORykpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChpdil9dHJpZ2dlclJlbG9hZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRmEoKSl9Z2V0UmVsb2FkVGl0bGUoZSl7cmV0dXJuIGU/YExhc3QgVXBkYXRlZDogJHtlfWA6IkxvYWRpbmcuLi4ifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlci1yZWxvYWQiXV0sZGVjbHM6Nix2YXJzOjEzLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDEsInJlbG9hZC1idXR0b24iLDMsInRpdGxlIiwiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsInJlZnJlc2hfMjRweCIsMSwicmVmcmVzaC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJidXR0b24iLDApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRyaWdnZXJSZWxvYWQoKX0pLEIoMSwiYXN5bmMiKSxCKDIsImRhdGUiKSxCKDMsImFzeW5jIiksQig0LCJhc3luYyIpLE8oNSwibWF0LWljb24iLDEpLHYoKSksMiZlJiYoZXQoImxvYWRpbmciLFUoMSw0LGkuaXNSZWxvYWRpbmckKSkseSgidGl0bGUiLGkuZ2V0UmVsb2FkVGl0bGUoSmYoMiw2LFUoMyw5LGkubGFzdExvYWRlZFRpbWVJbk1zJCksIm1lZGl1bSIpKSkoImRpc2FibGVkIixVKDQsMTEsaS5yZWxvYWREaXNhYmxlZCQpKSl9LGRlcGVuZGVuY2llczpbX24sR3QsR2UsVV9dLHN0eWxlczpbIi5yZWxvYWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJlZnJlc2gtaWNvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLnJlbG9hZC1idXR0b24ubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBhbmltYXRpb246IHJvdGF0ZSAycyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgcm90YXRlIHtcbiAgICAgICAgMCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgICAgICB9XG4gICAgICB9Il19KSxufSkoKSxOaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlciJdXSxkZWNsczoxMCx2YXJzOjAsY29uc3RzOltbMSwiYnJhbmQiXSxbMSwicGx1Z2lucyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIsInJlbCIsIm5vb3BlbmVyIG5vcmVmZXJyZXIiLCJ0YXJnZXQiLCJfYmxhbmsiLCJhcmlhLWxhYmVsIiwiSGVscCIsMSwicmVhZG1lIl0sWyJzdmdJY29uIiwiaGVscF9vdXRsaW5lXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1hdC10b29sYmFyIikoMSwic3BhbiIsMCksQSgyLCJUZW5zb3JCb2FyZCIpLHYoKSxPKDMsInBsdWdpbi1zZWxlY3RvciIsMSkoNCwidGJkZXYtdXBsb2FkLWJ1dHRvbiIpKDUsImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZSIpKDYsImFwcC1oZWFkZXItcmVsb2FkIikoNywic2V0dGluZ3MtYnV0dG9uIiksXyg4LCJhIiwyKSxPKDksIm1hdC1pY29uIiwzKSx2KCkoKSl9LGRlcGVuZGVuY2llczpbSXYsR3QsWm5lLGxpZSxoaWUseWllLGtpZSxGaWVdLHN0eWxlczpbIm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjY0cHg7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9dGJkZXYtdXBsb2FkLWJ1dHRvbi5zaG93bltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgOHB4IDAgMTZweH0uYnJhbmRbX25nY29udGVudC0lQ09NUCVdLCAucmVhZG1lW19uZ2NvbnRlbnQtJUNPTVAlXSwgYXBwLWhlYWRlci1yZWxvYWRbX25nY29udGVudC0lQ09NUCVdLCBzZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZsZXg6MCAwIGF1dG99LmJyYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtsZXR0ZXItc3BhY2luZzotMC4wMjVlbTttYXJnaW4tbGVmdDoxMHB4O3RleHQtcmVuZGVyaW5nOm9wdGltaXplTGVnaWJpbGl0eX0ucGx1Z2luc1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2ZvbnQtc2l6ZToxNHB4O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0iXX0pLG59KSgpLGwzZV9zZXREb2N1bWVudFRpdGxlPWZ1bmN0aW9uKG4pe2RvY3VtZW50LnRpdGxlPW59LExpZT0oKCk9PntjbGFzcyBue25nT25DaGFuZ2VzKGUpe2UudGl0bGUmJmwzZV9zZXREb2N1bWVudFRpdGxlKGUudGl0bGUuY3VycmVudFZhbHVlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicGFnZS10aXRsZS1jb21wb25lbnQiXV0saW5wdXRzOnt0aXRsZToidGl0bGUifSxmZWF0dXJlczpbRnRdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxCaWU9IlRlbnNvckJvYXJkIixWaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLmN1c3RvbUJyYW5kTmFtZT1pLHRoaXMuZ2V0RXhwZXJpbWVudElkJD10aGlzLnN0b3JlLnNlbGVjdChXbykucGlwZShMKHI9PnI/LlswXSkpLHRoaXMuZXhwZXJpbWVudE5hbWUkPXRoaXMuZ2V0RXhwZXJpbWVudElkJC5waXBlKFllKEJvb2xlYW4pLHhuKHI9PnRoaXMuc3RvcmUuc2VsZWN0KHZJLHtleHBlcmltZW50SWQ6cn0pKSxMKHI9PnI/ci5uYW1lOm51bGwpKSx0aGlzLnRpdGxlJD10aGlzLnN0b3JlLnNlbGVjdChvdikucGlwZShmcih0aGlzLnN0b3JlLnNlbGVjdChxdSksdGhpcy5leHBlcmltZW50TmFtZSQpLEwoKFtyLG8sc10pPT57bGV0IGE9dGhpcy5jdXN0b21CcmFuZE5hbWV8fEJpZTtyZXR1cm4gci53aW5kb3dfdGl0bGU/ci53aW5kb3dfdGl0bGU6bz09PWhpLkVYUEVSSU1FTlQmJnM/YCR7c30gLSAke2F9YDphfSksem4odGhpcy5jdXN0b21CcmFuZE5hbWV8fEJpZSkseWkoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpLE0oQSQsOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInBhZ2UtdGl0bGUiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywidGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsInBhZ2UtdGl0bGUtY29tcG9uZW50IiwwKSxCKDEsImFzeW5jIikpLDImZSYmeSgidGl0bGUiLFUoMSwxLGkudGl0bGUkKSl9LGRlcGVuZGVuY2llczpbTGllLEdlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEhpZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IGtlLHRoaXMuZ2V0UGFnZVNpemUkPXRoaXMuc3RvcmUucGlwZSh2dChLbSkpLHRoaXMucGFnaW5hdGVkVmlld1N0b3JlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXBhZ2luYXRlZC12aWV3LXN0b3JlIikudGZfcGFnaW5hdGVkX3ZpZXd9bmdPbkluaXQoKXt0aGlzLmdldFBhZ2VTaXplJC5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSkseWkoKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLnBhZ2luYXRlZFZpZXdTdG9yZS5zZXRMaW1pdChlKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInNldHRpbmdzLXBvbHltZXItaW50ZXJvcCJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVWllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy52Y1JlZj1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKE9pKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItd2ViYXBwIl1dLGRlY2xzOjksdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJhcHAtaGVhZGVyIiksXygxLCJtYWluIiksTygyLCJyb3V0ZXItb3V0bGV0IiksdigpLE8oMywiYWxlcnQtc25hY2tiYXIiKSg0LCJoYXNoLXN0b3JhZ2UiKSg1LCJwYWdlLXRpdGxlIikoNiwic2V0dGluZ3MtcG9seW1lci1pbnRlcm9wIikoNywiZGFyay1tb2RlLXN1cHBvcnRlciIpKDgsImZlYXR1cmUtZmxhZy1tb2RhbC10cmlnZ2VyIikpfSxkZXBlbmRlbmNpZXM6W0huZSx6bmUsSXRlLGpuZSxXbmUsTmllLFZpZSxIaWVdLHN0eWxlczpbImh0bWxbX25nY29udGVudC0lQ09NUCVdLCBib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sc2Fucy1zZXJpZjtoZWlnaHQ6MTAwJTttYXJnaW46MDtwYWRkaW5nOjB9W19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmNWY1ZjU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJX1hcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgMXB4IDNweCAzcHggcmdiYSgwLDAsMCwuMjUpO2ZsZXg6MCAwO3otaW5kZXg6MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBhcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYXBwLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDFweCAzcHggM3B4IHJnYmEoMjU1LDI1NSwyNTUsLjEpfW1haW5bX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO292ZXJmbG93OmF1dG99Il19KSxufSkoKSx6aWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLFFfLFhfLHFjXX0pLG59KSgpLGppZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksR2llPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W3twcm92aWRlOmZoLHVzZUNsYXNzOnIkfV19KSxufSkoKSxXaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLEdpZV19KSxufSkoKSxxaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lXX0pLG59KSgpLFlpZT17aWQ6VEEsbmFtZToiIixzdGFydF90aW1lOjB9LGgzZT12cih7ZXhwZXJpbWVudE1hcDp7W1lpZS5pZF06WWllfX0pO2Z1bmN0aW9uIFhpZShuLHQpe3JldHVybiBGbSh7ZGF0YTpoM2V9KShuLHQpfXZhciBRaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W3dyLmZvckZlYXR1cmUoX0ksWGllKV19KSxufSkoKSxLaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLFBuLGxjXX0pLG59KSgpLFppZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsS2llXX0pLG59KSgpLEppZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsanIsejIsUG4sTHMsT2gscG4sSGFdfSksbn0pKCk7ZnVuY3Rpb24gZjNlKCl7cmV0dXJuIEooWU0sbj0+KHthdXRvUmVsb2FkOm59KSl9ZnVuY3Rpb24gbTNlKCl7cmV0dXJuIEooWE0sbj0+KHthdXRvUmVsb2FkUGVyaW9kSW5NczpufSkpfWZ1bmN0aW9uIGczZSgpe3JldHVybiBKKEttLG49Pih7cGFnZVNpemU6bn0pKX12YXIgJDI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W3dyLmZvckZlYXR1cmUoWkksJG5lKSxTci5kZWZpbmVHbG9iYWxTZXR0aW5nKGYzZSksU3IuZGVmaW5lR2xvYmFsU2V0dGluZyhtM2UpLFNyLmRlZmluZUdsb2JhbFNldHRpbmcoZzNlKSxKaWVdfSksbn0pKCksJGllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W3twcm92aWRlOiJ3aW5kb3ciLHVzZVZhbHVlOndpbmRvd31dLGltcG9ydHM6W3VpZSxNZSxQbixPaCxwbl19KSxufSkoKSxlcmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W1BuLHBuLEoyLEpuZSxsYyx6aCxNZSxlYywkMiwkaWVdfSksbn0pKCksdHJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXtsZXQgcj1lLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCgiLi9pY29uX2J1bmRsZS5zdmciKTtpLmFkZFN2Z0ljb25TZXQocil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooVG0pLGooenYpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbcG5dfSksbn0pKCksdFU9bmV3IHBlKCJbcGx1Z2luc10gUGx1Z2luIHJlZ2lzdHJ5IGNvbmZpZyIpLG5yZT1uZXcgTWFwLEJzPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7aWYoIWUpcmV0dXJuO2xldCBpPW5ldyBTZXQoZS5tYXAocj0+ci5wbHVnaW5OYW1lKSk7Y29uc29sZS5hc3NlcnQoaS5zaXplPT09ZS5sZW5ndGgsIkNhbm5vdCByZWdpc3RlciB0aGUgc2FtZSBwbHVnaW4gbXVsdGlwbGUgdGltZXMuIik7Zm9yKGxldCByIG9mIGUpe2xldHtwbHVnaW5OYW1lOm8sY29tcG9uZW50Q2xhc3M6c309cjtucmUuc2V0KG8scyl9fXN0YXRpYyBmb3JQbHVnaW4oZSxpKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOnRVLG11bHRpOiEwLHVzZVZhbHVlOntwbHVnaW5OYW1lOmUsY29tcG9uZW50Q2xhc3M6aX19XX19Z2V0Q29tcG9uZW50KGUpe3JldHVybiBucmUuZ2V0KGUpfHxudWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKHRVLDgpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksZVA9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmh0dHA9ZSx0aGlzLmh0dHBQYXRoUHJlZml4PSJkYXRhL3BsdWdpbi9kZWJ1Z2dlci12MiJ9ZmV0Y2hSdW5zKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3J1bnMiKX1mZXRjaEV4ZWN1dGlvbkRpZ2VzdHMoZSxpLHIpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9leGVjdXRpb24vZGlnZXN0cyIse3BhcmFtczp7cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9fSl9ZmV0Y2hFeGVjdXRpb25EYXRhKGUsaSxyKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZXhlY3V0aW9uL2RhdGEiLHtwYXJhbXM6e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfX0pfWZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKGUsaSxyLG8pe2lmKHZvaWQgMCE9PW8pdGhyb3cgbmV3IEVycm9yKCJ0cmFjZV9pZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIGZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKCkgeWV0Iik7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBoX2V4ZWN1dGlvbi9kaWdlc3RzIix7cGFyYW1zOntydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX19KX1mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YShlLGkscixvKXtpZih2b2lkIDAhPT1vKXRocm93IG5ldyBFcnJvcigidHJhY2VfaWQgaXMgbm90IGltcGxlbWVudGVkIGZvciBmZXRjaEdyYXBoRXhlY3V0aW9uRGF0YSgpIHlldCIpO3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ncmFwaF9leGVjdXRpb24vZGF0YSIse3BhcmFtczp7cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9fSl9ZmV0Y2hHcmFwaE9wSW5mbyhlLGkscil7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBocy9vcF9pbmZvIix7cGFyYW1zOntydW46ZSxncmFwaF9pZDppLG9wX25hbWU6cn19KX1mZXRjaFNvdXJjZUZpbGVMaXN0KGUpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zb3VyY2VfZmlsZXMvbGlzdCIse3BhcmFtczp7cnVuOmV9fSl9ZmV0Y2hTb3VyY2VGaWxlKGUsaSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3NvdXJjZV9maWxlcy9maWxlIix7cGFyYW1zOntydW46ZSxpbmRleDpTdHJpbmcoaSl9fSl9ZmV0Y2hTdGFja0ZyYW1lcyhlLGkpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zdGFja19mcmFtZXMvc3RhY2tfZnJhbWVzIix7cGFyYW1zOntydW46ZSxzdGFja19mcmFtZV9pZHM6aS5qb2luKCIsIil9fSkucGlwZShMKHI9Pih7c3RhY2tfZnJhbWVzOnIuc3RhY2tfZnJhbWVzLm1hcChvPT5mdW5jdGlvbihuKXtyZXR1cm57aG9zdF9uYW1lOm5bMF0sZmlsZV9wYXRoOm5bMV0sbGluZW5vOm5bMl0sZnVuY3Rpb25fbmFtZTpuWzNdfX0obykpfSkpKX1mZXRjaEFsZXJ0cyhlLGkscixvKXtsZXQgcz17cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9O3JldHVybiB2b2lkIDAhPT1vJiYocy5hbGVydF90eXBlPW8pLHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2FsZXJ0cyIse3BhcmFtczpzfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooa2EpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxpcmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbZVBdLGltcG9ydHM6W0t1XX0pLG59KSgpLHRQPWJlKCJbRGVidWdnZXJdIERlYnVnZ2VyIExvYWRlZCIpLG5QPWJlKCJbRGVidWdnZXJdIERlYnVnZ2VyIFVubG9hZGVkIiksTXc9YmUoIltEZWJ1Z2dlcl0gQSBOZXcgRGVidWdnZXIgRGF0YSBQb2xsaW5nIEV2ZW50IEJlZ2lucyIpLGlQPWJlKCJbRGVidWdnZXJdIERlYnVnZ2VyIFJ1bnMgUmVxdWVzdGVkIiksclA9YmUoIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxycmU9YmUoIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBSZXF1ZXN0IEZhaWxlZCIpLHd3PWJlKCJbRGVidWdnZXJdIE51bWJlciBhbmQgQnJlYWtkb3duIG9mIEFsZXJ0cyBSZXF1ZXN0ZWQiKSxvUD1iZSgiW0RlYnVnZ2VyXSBOdW1iZXIgYW5kIEJyZWFrZG93biBvZiBBbGVydHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksc1A9YmUoIltEZWJ1Z2dlcl0gQWxlcnRzIERhdGEgb2YgYW4gQWxlcnRUeXBlIElzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEd2PWJlKCJbRGVidWdnZXJdIEFsZXJ0IFR5cGUgRm9jdXMgVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGFQPWJlKCJbRGVidWdnZXJdIE51bWJlciBvZiBUb3AtTGV2ZWwgRXhlY3V0aW9ucyBSZXF1ZXN0ZWQiKSxsUD1iZSgiW0RlYnVnZ2VyXSBOdW1iZXIgb2YgVG9wLUxldmVsIEV4ZWN1dGlvbnMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksY1A9YmUoIltEZWJ1Z2dlcl0gRXhlY3V0aW9uRGlnZXN0cyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx1UD1iZSgiW0RlYnVnZ2VyXSBFeGVjdXRpb25EaWdlc3RzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFd2PWJlKCJbRGVidWdnZXJdIFNjcm9sbCBMZWZ0d2FyZCBvbiB0aGUgRXhlY3V0aW9uIFRpbWVsaW5lIikscXY9YmUoIltEZWJ1Z2dlcl0gU2Nyb2xsIFJpZ2h0d2FyZCBvbiB0aGUgRXhlY3V0aW9uIFRpbWVsaW5lIiksWXY9YmUoIltEZWJ1Z2dlcl0gU2Nyb2xsIHRoZSBFeGVjdXRpb24gVGltZWxpbmUgdG8gR2l2ZW4gSW5kZXgiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxYdj1iZSgiW0RlYnVnZ2VyXSBFeGVjdXRpb24gRGF0YSBPYmplY3RzIEJlaW5nIEZvY3VzZWQgT24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkUD1iZSgiW0RlYnVnZ2VyXSBFeGVjdXRpb24gRGF0YSBPYmplY3RzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHBQPWJlKCJbRGVidWdnZXJdIE51bWJlciBvZiBJbnRyYS1HcmFwaCBFeGVjdXRpb25zIFJlcXVlc3RlZCIpLGhQPWJlKCJbRGVidWdnZXJdIE51bWJlciBvZiBJbnRyYS1HcmFwaCBFeGVjdXRpb25zIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGZQPWJlKCJbRGVidWdnZXJdIEludHJhLUdyYXBoIEV4ZWN1dGlvbiBEYXRhIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG1QPWJlKCJbRGVidWdnZXJdIEludHJhLUdyYXBoIEV4ZWN1dGlvbiBEYXRhIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFF2PWJlKCJbRGVidWdnZXJdIFNjcm9sbCBJbnRyYS1HcmFwaCBFeGVjdXRpb24gTGlzdCB0byBHaXZlbiBJbmRleCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEt2PWJlKCJbRGVidWdnZXJdIEdyYXBoIEV4ZWN1dGlvbiBpcyBGb2N1c2VkIE9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWnY9YmUoIltEZWJ1Z2dlcl0gR3JhcGggT3AgSXMgRm9jdXNlZCBPbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGdQPWJlKCJbRGVidWdnZXJdIEdyYXBoIE9wIEluZm8gUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksX1A9YmUoIltEZWJ1Z2dlcl0gR3JhcGggT3AgSW5mbyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx2UD1iZSgiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBMaXN0IFJlcXVlc3RlZC4iKSx5UD1iZSgiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBMaXN0IExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEp2PWJlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpbmUgSXMgRm9jdXNlZCBvbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGJQPWJlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHhQPWJlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFN3PWJlKCJbRGVidWdnZXJdIEEgU2V0IG9mIFN0YWNrIEZyYW1lcyBIYXZlIEJlZW4gTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksRXc9ImRlYnVnZ2VyIixhcz0oKCk9PihmdW5jdGlvbihuKXtuW24uVU5TUEVDSUZJRUQ9MF09IlVOU1BFQ0lGSUVEIixuW24uTk9fVEVOU09SPTFdPSJOT19URU5TT1IiLG5bbi5DVVJUX0hFQUxUSD0yXT0iQ1VSVF9IRUFMVEgiLG5bbi5DT05DSVNFX0hFQUxUSD0zXT0iQ09OQ0lTRV9IRUFMVEgiLG5bbi5GVUxMX0hFQUxUSD00XT0iRlVMTF9IRUFMVEgiLG5bbi5TSEFQRT01XT0iU0hBUEUiLG5bbi5GVUxMX05VTUVSSUNTPTZdPSJGVUxMX05VTUVSSUNTIixuW24uRlVMTF9URU5TT1I9N109IkZVTExfVEVOU09SIixuW24uUkVEVUNFX0lORl9OQU5fVEhSRUVfU0xPVFM9OF09IlJFRFVDRV9JTkZfTkFOX1RIUkVFX1NMT1RTIn0oYXN8fChhcz17fSkpLGFzKSkoKSxtZD0oKCk9PihmdW5jdGlvbihuKXtuLkZVTkNUSU9OX1JFQ09NUElMRV9BTEVSVD0iRnVuY3Rpb25SZWNvbXBpbGVzQWxlcnQiLG4uSU5GX05BTl9BTEVSVD0iSW5mTmFuQWxlcnQiLG4uVEVOU09SX1NIQVBFX0FMRVJUPSJUZW5zb3JTaGFwZUFsZXJ0In0obWR8fChtZD17fSkpLG1kKSkoKSx4cz0oKCk9PihmdW5jdGlvbihuKXtuW24uRVhFQ1VUSU9OPTBdPSJFWEVDVVRJT04iLG5bbi5HUkFQSF9PUF9DUkVBVElPTj0xXT0iR1JBUEhfT1BfQ1JFQVRJT04ifSh4c3x8KHhzPXt9KSkseHMpKSgpO2Z1bmN0aW9uICR2KG4pe2lmKG51bGw9PT1uLmNvZGVMb2NhdGlvbkZvY3VzVHlwZSlyZXR1cm4gbnVsbDtsZXQgdD1bXTtpZihuLmNvZGVMb2NhdGlvbkZvY3VzVHlwZT09PXhzLkVYRUNVVElPTil7bGV0e2ZvY3VzSW5kZXg6aSxleGVjdXRpb25EYXRhOnJ9PW4uZXhlY3V0aW9ucztpZihudWxsPT09aXx8dm9pZCAwPT09cltpXSlyZXR1cm4gbnVsbDt0PXJbaV0uc3RhY2tfZnJhbWVfaWRzfWVsc2V7aWYobnVsbD09PW4uZ3JhcGhzLmZvY3VzZWRPcClyZXR1cm4gbnVsbDtsZXR7Z3JhcGhJZDppLG9wTmFtZTpyfT1uLmdyYXBocy5mb2N1c2VkT3A7aWYodm9pZCAwPT09bi5ncmFwaHMub3BzW2ldfHwhbi5ncmFwaHMub3BzW2ldLmhhcyhyKSlyZXR1cm4gbnVsbDt0PW4uZ3JhcGhzLm9wc1tpXS5nZXQocikuc3RhY2tfZnJhbWVfaWRzfWxldCBlPVtdO2ZvcihsZXQgaSBvZiB0KXtpZihudWxsPT1uLnN0YWNrRnJhbWVzW2ldKXJldHVybiBudWxsO2UucHVzaChuLnN0YWNrRnJhbWVzW2ldKX1yZXR1cm4gZX1mdW5jdGlvbiBUdyhuLHQpe3JldHVybiBuLmZpbmRJbmRleChlPT5lLmhvc3RfbmFtZT09PXQuaG9zdF9uYW1lJiZlLmZpbGVfcGF0aD09PXQuZmlsZV9wYXRoKX1mdW5jdGlvbiBuVShuLHQsZSl7aWYodD49ZSl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJlZ2luIHRvIGJlIGxlc3MgdGhhbiBlbmQsIGJ1dCBnb3QgYmVnaW49JHt0fSwgZW5kPSR7ZX1gKTtyZXR1cm4gbi5maW5kSW5kZXgoaT0+aS5iZWdpbj09PXQmJmkuZW5kPT09ZSl9ZnVuY3Rpb24gQ1Aobil7bGV0IHQ9bi5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM7aWYoIW4uc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUpcmV0dXJuIHQ7bGV0IGU9JHYobik7aWYobnVsbD09PWUpcmV0dXJuIHQ7bGV0IGk9ZnVuY3Rpb24obix0KXtpZihudWxsPT09dClyZXR1cm4gbnVsbDtmb3IobGV0IGU9bi5sZW5ndGgtMTtlPj0wOy0tZSl7bGV0IGk9bltlXSx7aG9zdF9uYW1lOnIsZmlsZV9wYXRoOm99PWk7aWYocj09PXQuaG9zdF9uYW1lJiZvPT09dC5maWxlX3BhdGgpcmV0dXJuIGl9cmV0dXJuIG51bGx9KGUsdCk7cmV0dXJuIG51bGw9PT1pP3Q6aX12YXIgRDNlPXZyKHtydW5zOnt9LHJ1bnNMb2FkZWQ6e3N0YXRlOk9lLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LGFjdGl2ZVJ1bklkOm51bGwsbGFzdERhdGFQb2xsT25zZXRUaW1lTXM6LTEsbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6MSxhbGVydHM6e2FsZXJ0c0xvYWRlZDp7c3RhdGU6T2UuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sbnVtQWxlcnRzOjAsYWxlcnRzQnJlYWtkb3duOnt9LGFsZXJ0czp7fSxleGVjdXRpb25JbmRpY2VzOnt9LGdyYXBoRXhlY3V0aW9uSW5kaWNlczp7fSxmb2N1c1R5cGU6bnVsbH0sZXhlY3V0aW9uczp7bnVtRXhlY3V0aW9uc0xvYWRlZDp7c3RhdGU6T2UuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7bG9hZGluZ1JhbmdlczpbXSxudW1FeGVjdXRpb25zOjAscGFnZUxvYWRlZFNpemVzOnt9fSxkaXNwbGF5Q291bnQ6NTAscGFnZVNpemU6MTAwLHNjcm9sbEJlZ2luSW5kZXg6MCxmb2N1c0luZGV4Om51bGwsZXhlY3V0aW9uRGlnZXN0czp7fSxleGVjdXRpb25EYXRhOnt9fSxncmFwaEV4ZWN1dGlvbnM6e251bUV4ZWN1dGlvbnNMb2FkZWQ6e3N0YXRlOk9lLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6e2xvYWRpbmdSYW5nZXM6W10sbnVtRXhlY3V0aW9uczowLHBhZ2VMb2FkZWRTaXplczp7fX0sZGlzcGxheUNvdW50OjEwMCxwYWdlU2l6ZToyMDAsc2Nyb2xsQmVnaW5JbmRleDowLGZvY3VzSW5kZXg6bnVsbCxncmFwaEV4ZWN1dGlvbkRpZ2VzdHM6e30sZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzOltdLGdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplczp7fSxncmFwaEV4ZWN1dGlvbkRhdGE6e319LGdyYXBoczp7b3BzOnt9LGxvYWRpbmdPcHM6e30sZm9jdXNlZE9wOm51bGx9LHN0YWNrRnJhbWVzOnt9LGNvZGVMb2NhdGlvbkZvY3VzVHlwZTpudWxsLHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlOiExLHNvdXJjZUNvZGU6e3NvdXJjZUZpbGVMaXN0TG9hZGVkOntzdGF0ZTpPZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxzb3VyY2VGaWxlTGlzdDpbXSxmaWxlQ29udGVudHM6W10sZm9jdXNMaW5lU3BlYzpudWxsfX0sU2UoaVAsbj0+KHsuLi5uLHJ1bnNMb2FkZWQ6ey4uLm4ucnVuc0xvYWRlZCxzdGF0ZTpPZS5MT0FESU5HfX0pKSxTZShycmUsbj0+KHsuLi5uLHJ1bnNMb2FkZWQ6ey4uLm4ucnVuc0xvYWRlZCxzdGF0ZTpPZS5GQUlMRUR9fSkpLFNlKHJQLChuLHtydW5zOnR9KT0+e2xldCBlPU9iamVjdC5rZXlzKHQpLGk9ZS5sZW5ndGg+MCYmbnVsbD09PW4uYWN0aXZlUnVuSWQ7cmV0dXJuey4uLm4sbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6aT9EYXRlLm5vdygpOm4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMscnVuczp0LHJ1bnNMb2FkZWQ6e3N0YXRlOk9lLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sYWN0aXZlUnVuSWQ6ZS5sZW5ndGg+MD9lWzBdOm51bGx9fSksU2UoTXcsbj0+KHsuLi5uLGxhc3REYXRhUG9sbE9uc2V0VGltZU1zOkRhdGUubm93KCl9KSksU2Uod3csbj0+bnVsbD09PW4uYWN0aXZlUnVuSWQ/bjp7Li4ubixhbGVydHM6ey4uLm4uYWxlcnRzLGFsZXJ0c0xvYWRlZDp7Li4ubi5hbGVydHMuYWxlcnRzTG9hZGVkLHN0YXRlOk9lLkxPQURJTkd9fX0pLFNlKG9QLChuLHtudW1BbGVydHM6dCxhbGVydHNCcmVha2Rvd246ZX0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IHI9dD5uLmFsZXJ0cy5udW1BbGVydHM7cmV0dXJuey4uLm4sbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6cj9EYXRlLm5vdygpOm4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsYWxlcnRzOnsuLi5uLmFsZXJ0cyxhbGVydHNMb2FkZWQ6ey4uLm4uYWxlcnRzLmFsZXJ0c0xvYWRlZCxzdGF0ZTpPZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LG51bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplfX19KSxTZShzUCwobix7bnVtQWxlcnRzOnQsYWxlcnRzQnJlYWtkb3duOmUsYWxlcnRUeXBlOmksYmVnaW46cixhbGVydHM6b30pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGE9e30sbD1uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzW2ldP24uYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbaV0uc2xpY2UoKTpbXSxjPW4uYWxlcnRzLmdyYXBoRXhlY3V0aW9uSW5kaWNlc1tpXT9uLmFsZXJ0cy5ncmFwaEV4ZWN1dGlvbkluZGljZXNbaV0uc2xpY2UoKTpbXTtmb3IobGV0IHA9MDtwPG8ubGVuZ3RoOysrcCl7bGV0IGg9citwLGY9b1twXTtpZihhW2hdPWYsZi5hbGVydF90eXBlPT09bWQuSU5GX05BTl9BTEVSVCl7bGV0IG09ZjtsW2hdPW0uZXhlY3V0aW9uX2luZGV4LG51bGwhPT1tLmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCYmKGNbaF09bS5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgpfX12b2lkIDAhPT1uLmFsZXJ0cy5hbGVydHNbaV0mJk9iamVjdC5hc3NpZ24oYSxuLmFsZXJ0cy5hbGVydHNbaV0pO2xldCB1PW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4LGQ9bi5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleDtpZihpPT09bWQuSU5GX05BTl9BTEVSVCYmMD09PXIpe2xldCBwPW9bMF07dT1NYXRoLm1heCgwLHAuZXhlY3V0aW9uX2luZGV4LU1hdGguZmxvb3Iobi5leGVjdXRpb25zLmRpc3BsYXlDb3VudC8yKSksbnVsbCE9PXAuZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4JiYoZD1wLmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCl9cmV0dXJuey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6dX0sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxmb2N1c0luZGV4OmR9LGFsZXJ0czp7Li4ubi5hbGVydHMsYWxlcnRzTG9hZGVkOnsuLi5uLmFsZXJ0cy5hbGVydHNMb2FkZWQsc3RhdGU6T2UuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxudW1BbGVydHM6dCxhbGVydHNCcmVha2Rvd246ZSxhbGVydHM6ey4uLm4uYWxlcnRzLmFsZXJ0cyxbaV06YX0sZXhlY3V0aW9uSW5kaWNlczp7Li4ubi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlcyxbaV06bH0sZ3JhcGhFeGVjdXRpb25JbmRpY2VzOnsuLi5uLmFsZXJ0cy5ncmFwaEV4ZWN1dGlvbkluZGljZXMsW2ldOmN9fX19KSxTZShHdiwobix7YWxlcnRUeXBlOnR9KT0+e2xldCBlPXsuLi5uLGFsZXJ0czp7Li4ubi5hbGVydHMsZm9jdXNUeXBlOm4uYWxlcnRzLmZvY3VzVHlwZT09PXQ/bnVsbDp0fX0saT1lLmFsZXJ0cy5mb2N1c1R5cGU7aWYobnVsbCE9PWkpe2xldCByPWUuYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbaV18fFtdO3ZvaWQgMCE9PXJbMF0mJihlLmV4ZWN1dGlvbnM9ey4uLmUuZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4Ok1hdGgubWF4KDAsTnVtYmVyKHJbMF0pLU1hdGguZmxvb3IoZS5leGVjdXRpb25zLmRpc3BsYXlDb3VudC8yKSl9KX1yZXR1cm4gZX0pLFNlKGFQLG49Pm51bGw9PT1uLmFjdGl2ZVJ1bklkP246ey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLG51bUV4ZWN1dGlvbnNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkLHN0YXRlOk9lLkxPQURJTkd9fX0pLFNlKGxQLChuLHtudW1FeGVjdXRpb25zOnR9KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPXQ+bi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyxyPXsuLi5uLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOmk/RGF0ZS5ub3coKTpuLmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxudW1FeGVjdXRpb25zTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMubnVtRXhlY3V0aW9uc0xvYWRlZCxzdGF0ZTpPZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLG51bUV4ZWN1dGlvbnM6dH19fTtyZXR1cm4gdD4wJiZudWxsPT09bi5leGVjdXRpb25zLmZvY3VzSW5kZXgmJihyLmV4ZWN1dGlvbnMuZm9jdXNJbmRleD0wKSxyfSksU2UoY1AsKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT1bLi4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubG9hZGluZ1Jhbmdlc107cmV0dXJuLTE9PT1uVShpLHQuYmVnaW4sdC5lbmQpJiZpLnB1c2goe2JlZ2luOnQuYmVnaW4sZW5kOnQuZW5kfSksey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLGxvYWRpbmdSYW5nZXM6aX19fX0pLFNlKHVQLChuLHQpPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9Wy4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLmxvYWRpbmdSYW5nZXNdLHI9blUoaSx0LmJlZ2luLHQuZW5kKTstMSE9PXImJmkuc3BsaWNlKHIsMSk7bGV0IG89ey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLG51bUV4ZWN1dGlvbnM6dC5udW1fZGlnZXN0cyxsb2FkaW5nUmFuZ2VzOml9LGV4ZWN1dGlvbkRpZ2VzdHM6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzfX19O2ZvcihsZXQgcz10LmJlZ2luO3M8dC5lbmQ7KytzKW8uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzW3NdPXQuZXhlY3V0aW9uX2RpZ2VzdHNbcy10LmJlZ2luXTtyZXR1cm4gdC5lbmQ+dC5iZWdpbiYmKG8uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLnBhZ2VMb2FkZWRTaXplcz17Li4uby5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQucGFnZUxvYWRlZFNpemVzLFt0LmJlZ2luL24uZXhlY3V0aW9ucy5wYWdlU2l6ZV06dC5lbmQtdC5iZWdpbn0pLG99KSxTZShXdixuPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXg7cmV0dXJuIGU+MCYmZS0tLHsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OmV9fX0pLFNlKHF2LG49PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgZT1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleDtyZXR1cm4gZStuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50KzE8PW4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMmJmUrKyx7Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDplfX19KSxTZShZdiwobix0KT0+e2lmKHQuaW5kZXg8MHx8IU51bWJlci5pc0ludGVnZXIodC5pbmRleCkpdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0IHRvIHNjcm9sbCB0byBuZWdhdGl2ZSBvciBub24taW50ZWdlciBleGVjdXRpb24gaW5kZXggKCR7dC5pbmRleH0pYCk7bGV0e2Rpc3BsYXlDb3VudDplfT1uLmV4ZWN1dGlvbnMse251bUV4ZWN1dGlvbnM6aX09bi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ7aWYodC5pbmRleD5NYXRoLm1heCgwLGktZSkpdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0IHRvIHNjcm9sbCB0byBleGVjdXRpb24gaW5kZXggKCR7dC5pbmRleH0pLCB3aGljaCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBpbmRleCAobnVtRXhlY3V0aW9ucz0ke2l9OyBkaXNwbGF5Q291bnQ9JHtlfSlgKTtyZXR1cm57Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDp0LmluZGV4fX19KSxTZShYdiwobix0KT0+e2xldCBlPXsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxmb2N1c0luZGV4Om4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4K3QuZGlzcGxheUluZGV4fSxjb2RlTG9jYXRpb25Gb2N1c1R5cGU6eHMuRVhFQ1VUSU9OLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZX19O3JldHVybiBlLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYz1DUChlKSxlfSksU2UoZFAsKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT17Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsZXhlY3V0aW9uRGF0YTp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRhdGF9fX07Zm9yKGxldCByPXQuYmVnaW47cjx0LmVuZDsrK3IpaS5leGVjdXRpb25zLmV4ZWN1dGlvbkRhdGFbcl09dC5leGVjdXRpb25zW3ItdC5iZWdpbl07cmV0dXJuIGl9KSxTZShwUCxuPT5udWxsPT09bi5hY3RpdmVSdW5JZD9uOnsuLi5uLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsbnVtRXhlY3V0aW9uc0xvYWRlZDp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMubnVtRXhlY3V0aW9uc0xvYWRlZCxzdGF0ZTpPZS5MT0FESU5HfX19KSxTZShoUCwobix7bnVtR3JhcGhFeGVjdXRpb25zOnR9KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBlPXQ+bi5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zLGk9ey4uLm4sbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6ZT9EYXRlLm5vdygpOm4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxudW1FeGVjdXRpb25zTG9hZGVkOnsuLi5uLmdyYXBoRXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkLHN0YXRlOk9lLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCxudW1FeGVjdXRpb25zOnR9fX07cmV0dXJuIHQ+MCYmbnVsbD09PW4uZ3JhcGhFeGVjdXRpb25zLmZvY3VzSW5kZXgmJihpLmdyYXBoRXhlY3V0aW9ucy5mb2N1c0luZGV4PTApLGl9KSxTZShmUCwobix7cGFnZUluZGV4OnR9KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBlPW4uZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlcy5zbGljZSgpO3JldHVybi0xPT09ZS5pbmRleE9mKHQpJiZlLnB1c2godCksey4uLm4sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6ZX19fSksU2UobVAsKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXR7cGFnZVNpemU6ZX09bi5ncmFwaEV4ZWN1dGlvbnMsaT1uLmdyYXBoRXhlY3V0aW9ucy5ncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXMuc2xpY2UoKSxyPXsuLi5uLmdyYXBoRXhlY3V0aW9ucy5ncmFwaEV4ZWN1dGlvbkRhdGFQYWdlTG9hZGVkU2l6ZXN9LG89ey4uLm4uZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YX07Zm9yKGxldCBzPXQuYmVnaW47czx0LmVuZDsrK3Mpe2xldCBhPU1hdGguZmxvb3Iocy9lKTstMSE9PWkuaW5kZXhPZihhKSYmaS5zcGxpY2UoaS5pbmRleE9mKGEpLDEpLHZvaWQgMD09PXJbYV0mJihyW2FdPTApLHZvaWQgMD09PW9bc10mJnJbYV0rKyxvW3NdPXQuZ3JhcGhfZXhlY3V0aW9uc1tzLXQuYmVnaW5dfXJldHVybnsuLi5uLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzOmksZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzOnIsZ3JhcGhFeGVjdXRpb25EYXRhOm99fX0pLFNlKFF2LChuLHQpPT57aWYodC5pbmRleDwwfHwhTnVtYmVyLmlzSW50ZWdlcih0LmluZGV4KSl0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHQgdG8gc2Nyb2xsIHRvIG5lZ2F0aXZlIG9yIG5vbi1pbnRlZ2VyIGdyYXBoLWV4ZWN1dGlvbiBpbmRleCAoJHt0LmluZGV4fSlgKTtyZXR1cm57Li4ubixncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6dC5pbmRleH19fSksU2UoS3YsKG4sdCk9PmFyZShuLHQuZ3JhcGhfaWQsdC5vcF9uYW1lLHQuaW5kZXgpKSxTZShadiwobix0KT0+YXJlKG4sdC5ncmFwaF9pZCx0Lm9wX25hbWUpKSxTZShnUCwobix0KT0+e2xldHtncmFwaF9pZDplLG9wX25hbWU6aX09dCxyPXsuLi5uLGdyYXBoczp7Li4ubi5ncmFwaHMsbG9hZGluZ09wczp7Li4ubi5ncmFwaHMubG9hZGluZ09wc319fTtyZXR1cm4gdm9pZCAwPT09ci5ncmFwaHMubG9hZGluZ09wc1tlXSYmKHIuZ3JhcGhzLmxvYWRpbmdPcHNbZV09bmV3IE1hcCksci5ncmFwaHMubG9hZGluZ09wc1tlXS5oYXMoaSl8fHIuZ3JhcGhzLmxvYWRpbmdPcHNbZV0uc2V0KGksT2UuTE9BRElORykscn0pLFNlKF9QLChuLHQpPT57bGV0e2dyYXBoT3BJbmZvUmVzcG9uc2U6ZX09dCx7Z3JhcGhfaWRzOml9PWUscj1pW2kubGVuZ3RoLTFdLG89ey4uLm4sZ3JhcGhzOnsuLi5uLmdyYXBocyxvcHM6ey4uLm4uZ3JhcGhzLm9wcyxbcl06bmV3IE1hcChuLmdyYXBocy5vcHNbcl0pfSxsb2FkaW5nT3BzOnsuLi5uLmdyYXBocy5sb2FkaW5nT3BzLFtyXTpuZXcgTWFwKG4uZ3JhcGhzLmxvYWRpbmdPcHNbcl0pfX19O2ZvcihsZXQgcyBvZiBlLmlucHV0cykhcy5kYXRhfHxvLmdyYXBocy5vcHNbcl0uc2V0KHMub3BfbmFtZSxzLmRhdGEpO2ZvcihsZXQgcz0wO3M8ZS5jb25zdW1lcnMubGVuZ3RoOysrcylmb3IobGV0IGEgb2YgZS5jb25zdW1lcnNbc10pIWEuZGF0YXx8by5ncmFwaHMub3BzW3JdLnNldChhLm9wX25hbWUsYS5kYXRhKTtyZXR1cm4gby5ncmFwaHMub3BzW3JdLnNldChlLm9wX25hbWUsey4uLmUsaW5wdXRzOmUuaW5wdXRzLm1hcChzPT4oe29wX25hbWU6cy5vcF9uYW1lLG91dHB1dF9zbG90OnMub3V0cHV0X3Nsb3R9KSksY29uc3VtZXJzOmUuY29uc3VtZXJzLm1hcChzPT5zLm1hcChhPT4oe29wX25hbWU6YS5vcF9uYW1lLGlucHV0X3Nsb3Q6YS5pbnB1dF9zbG90fSkpKX0pLG8uZ3JhcGhzLmxvYWRpbmdPcHNbcl0uc2V0KGUub3BfbmFtZSxPZS5MT0FERUQpLG99KSxTZSh2UCxuPT4oey4uLm4sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlLHNvdXJjZUZpbGVMaXN0TG9hZGVkOnsuLi5uLnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3RMb2FkZWQsc3RhdGU6T2UuTE9BRElOR319fSkpLFNlKHlQLChuLHQpPT57bGV0IGU9ey4uLm4sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlLHNvdXJjZUZpbGVMaXN0TG9hZGVkOnsuLi5uLnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3RMb2FkZWQsc3RhdGU6T2UuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxzb3VyY2VGaWxlTGlzdDp0LnNvdXJjZUZpbGVzLGZpbGVDb250ZW50czpuLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNsaWNlKCl9fSxpPXQuc291cmNlRmlsZXMubGVuZ3RoLHtmaWxlQ29udGVudHM6cn09ZS5zb3VyY2VDb2RlO2ZvcihsZXQgbz0wO288aTsrK28pcltvXT1uLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzW29dPz97bG9hZFN0YXRlOk9lLk5PVF9MT0FERUQsbGluZXM6bnVsbH07cmV0dXJuIGV9KSxTZShKdiwobix0KT0+e2xldCBlPSR2KG4pLGk9ey4uLm4sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlLGZvY3VzTGluZVNwZWM6dC5zdGFja0ZyYW1lfX07cmV0dXJuIG51bGwhPT1lJiYoaS5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZT1mdW5jdGlvbihuLHQpe2xldCBlPS0xLGk9LTE7aWYobi5mb3JFYWNoKCh7ZmlsZV9wYXRoOnIsbGluZW5vOm99LHMpPT57cj09PXQuZmlsZV9wYXRoJiYoaT1zLG89PT10LmxpbmVubyYmKGU9cykpfSksLTE9PT1lKXRocm93IG5ldyBFcnJvcihgU3RhY2sgZnJhbWUgJHtKU09OLnN0cmluZ2lmeSh0KX0gaXMgbm90IGZvdW5kLmApO3JldHVybiBlPT09aX0oZSx0LnN0YWNrRnJhbWUpKSxpfSksU2UoYlAsKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9VHcoZS5zb3VyY2VDb2RlLnNvdXJjZUZpbGVMaXN0LHQpO2lmKCEoaT49MCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgZm9sbG93aW5nIGZpbGUgaW4gZmlsZSBsaXN0OiBob3N0X25hbWU9IiR7dC5ob3N0X25hbWV9IiwgZmlsZV9wYXRoPSIke3QuZmlsZV9wYXRofSJgKTtyZXR1cm4gZS5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zcGxpY2UoaSwxLHsuLi5lLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzW2ldLGxvYWRTdGF0ZTpPZS5MT0FESU5HfSksZX0pLFNlKHhQLChuLHQpPT57bGV0IGU9ey4uLm4sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlLGZpbGVDb250ZW50czpuLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNsaWNlKCl9fSxpPVR3KGUuc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdCx0KTtpZighKGk+PTApKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgdGhlIGZvbGxvd2luZyBmaWxlIGluIGZpbGUgbGlzdDogaG9zdF9uYW1lPSIke3QuaG9zdF9uYW1lfSIsIGZpbGVfcGF0aD0iJHt0LmZpbGVfcGF0aH0iYCk7cmV0dXJuIGUuc291cmNlQ29kZS5maWxlQ29udGVudHMuc3BsaWNlKGksMSx7bG9hZFN0YXRlOk9lLkxPQURFRCxsaW5lczp0LmxpbmVzfSksZX0pLFNlKFN3LChuLHQpPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9ey4uLm4sc3RhY2tGcmFtZXM6ey4uLm4uc3RhY2tGcmFtZXMsLi4udC5zdGFja0ZyYW1lc30sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlfX07cmV0dXJuIGkuc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjPUNQKGkpLGl9KSk7ZnVuY3Rpb24gYXJlKG4sdCxlLGkpe2xldCByPXsuLi5uLGdyYXBoczp7Li4ubi5ncmFwaHMsZm9jdXNlZE9wOntncmFwaElkOnQsb3BOYW1lOmV9fSxjb2RlTG9jYXRpb25Gb2N1c1R5cGU6eHMuR1JBUEhfT1BfQ1JFQVRJT04sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlfX07cmV0dXJuIHIuc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjPUNQKHIpLHZvaWQgMCE9PWkmJihyLmdyYXBoRXhlY3V0aW9ucz17Li4ubi5ncmFwaEV4ZWN1dGlvbnMsZm9jdXNJbmRleDppfSkscn1mdW5jdGlvbiBscmUobix0KXtyZXR1cm4gRDNlKG4sdCl9dmFyIGxzPU1yKEV3KSx1Zz1KKGxzLG49Pm4ucnVucyksaVU9SihscyxuPT5uLnJ1bnNMb2FkZWQpLFZzPUoobHMsbj0+bi5hY3RpdmVSdW5JZCksY3JlPUoobHMsbj0+bi5sYXN0RGF0YVBvbGxPbnNldFRpbWVNcy1uLmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zKSxleT1KKGxzLG49Pm4uYWxlcnRzKSxyVT1KKGV5LG49Pm4uYWxlcnRzTG9hZGVkKSx1cmU9SihleSxuPT5uLm51bUFsZXJ0cyksTVA9SihleSxuPT5uLmZvY3VzVHlwZSksZHJlPUooZXksbj0+bnVsbD09PW4uZm9jdXNUeXBlPzA6bi5hbGVydHNCcmVha2Rvd25bbi5mb2N1c1R5cGVdfHwwKSxwcmU9SihleSxuPT5udWxsPT09bi5mb2N1c1R5cGV8fHZvaWQgMD09PW4uYWxlcnRzW24uZm9jdXNUeXBlXT9udWxsOm4uYWxlcnRzW24uZm9jdXNUeXBlXSksaHJlPUooZXksbj0+bi5hbGVydHNCcmVha2Rvd24pLGRnPUoobHMsbj0+bi5leGVjdXRpb25zKSx3UD1KKGRnLG49Pm4ubnVtRXhlY3V0aW9uc0xvYWRlZCksRHc9SihkZyxuPT5uLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQpLGpoPUooZGcsbj0+bi5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMpLEF3PUooZGcsbj0+bi5zY3JvbGxCZWdpbkluZGV4KSx0eT1KKGRnLG49Pm4ucGFnZVNpemUpLG55PUooZGcsbj0+bi5kaXNwbGF5Q291bnQpLGZyZT1KKGRnLG49PntsZXQgdD1bXTtmb3IobGV0IGU9bi5zY3JvbGxCZWdpbkluZGV4O2U8bi5zY3JvbGxCZWdpbkluZGV4K24uZGlzcGxheUNvdW50OysrZSl0LnB1c2goZSBpbiBuLmV4ZWN1dGlvbkRpZ2VzdHM/bi5leGVjdXRpb25EaWdlc3RzW2VdOm51bGwpO3JldHVybiB0fSksR2g9SihscyxuPT5uLmdyYXBoRXhlY3V0aW9ucyksbXJlPUooR2gsbj0+bi5udW1FeGVjdXRpb25zTG9hZGVkKSxJdz1KKGxzLG49Pm4uZ3JhcGhFeGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyksZ3JlPUooR2gsbj0+bi5zY3JvbGxCZWdpbkluZGV4KSxfcmU9SihHaCxuPT5uLmRpc3BsYXlDb3VudCksdnJlPUooR2gsbj0+bi5wYWdlU2l6ZSkseXJlPUooR2gsbj0+bi5ncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXMpLGJyZT1KKEdoLG49Pm4uZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzKSxvVT1KKEdoLG49Pm4uZ3JhcGhFeGVjdXRpb25EYXRhKSxzVT1KKEdoLG49Pm4uZm9jdXNJbmRleCksYVU9SihscyxuPT5uLmdyYXBocyksbFU9SihhVSxuPT57bGV0e2ZvY3VzZWRPcDp0LG9wczplfT1uO3JldHVybiBudWxsPT09dHx8dm9pZCAwPT09ZVt0LmdyYXBoSWRdP251bGw6ZVt0LmdyYXBoSWRdLmdldCh0Lm9wTmFtZSl8fG51bGx9KSxjVT1KKGFVLG49PntsZXR7Zm9jdXNlZE9wOnQsb3BzOmV9PW47aWYobnVsbD09PXR8fHZvaWQgMD09PWVbdC5ncmFwaElkXXx8IWVbdC5ncmFwaElkXS5oYXModC5vcE5hbWUpKXJldHVybiBudWxsO3tsZXQgaT1lW3QuZ3JhcGhJZF0se2lucHV0czpyfT1pLmdldCh0Lm9wTmFtZSk7cmV0dXJuIHIubWFwKG89PntsZXQgcz17Li4ub307cmV0dXJuIGkuaGFzKG8ub3BfbmFtZSkmJihzLmRhdGE9aS5nZXQoby5vcF9uYW1lKSksc30pfX0pLHhyZT1KKHNVLG9VLGNVLChuLHQsZSk9PntpZihudWxsPT09bnx8bnVsbD09PWUpcmV0dXJuIG51bGw7bGV0IGk9ZS5tYXAoYT0+ITEpLHI9W107aWYoMD09PWUubGVuZ3RoKXJldHVybiByO2xldCBvPXRbbl0uZ3JhcGhfaWQscz1NYXRoLm1heCgwLG4tMjAwKTtmb3IobGV0IGE9bi0xO2E+PXM7LS1hKWlmKHZvaWQgMCE9PXRbYV0pZm9yKGxldCBsPTA7bDxlLmxlbmd0aCYmKGlbbF18fHRbYV0uZ3JhcGhfaWQhPT1vfHx0W2FdLm9wX25hbWUhPT1lW2xdLm9wX25hbWV8fHRbYV0ub3V0cHV0X3Nsb3QhPT1lW2xdLm91dHB1dF9zbG90fHwoci5wdXNoKGEpLGlbbF09ITAsci5sZW5ndGghPT1lLmxlbmd0aCkpOysrbCk7cmV0dXJuIHJ9KSxDcmU9SihhVSxuPT57bGV0e2ZvY3VzZWRPcDp0LG9wczplfT1uO2lmKG51bGw9PT10fHx2b2lkIDA9PT1lW3QuZ3JhcGhJZF18fCFlW3QuZ3JhcGhJZF0uaGFzKHQub3BOYW1lKSlyZXR1cm4gbnVsbDt7bGV0IGk9ZVt0LmdyYXBoSWRdLHtjb25zdW1lcnM6cn09aS5nZXQodC5vcE5hbWUpO3JldHVybiByLm1hcChvPT5vLm1hcChzPT57bGV0IGE9ey4uLnN9O3JldHVybiBpLmhhcyhzLm9wX25hbWUpJiYoYS5kYXRhPWkuZ2V0KHMub3BfbmFtZSkpLGF9KSl9fSksTXJlPUoobHMsbj0+e2xldCB0PW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4LGU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgrbi5leGVjdXRpb25zLmRpc3BsYXlDb3VudCxpPW5ldyBBcnJheShlLXQpLmZpbGwobnVsbCkscj1uLmFsZXJ0cy5mb2N1c1R5cGU7aWYobnVsbD09PXIpcmV0dXJuIGk7bGV0IG89bi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tyXTtpZih2b2lkIDA9PT1vKXJldHVybiBpO2ZvcihsZXQgcz10O3M8ZTsrK3Mpby5pbmNsdWRlcyhzKSYmKGlbcy10XT1uLmFsZXJ0cy5mb2N1c1R5cGUpO3JldHVybiBpfSksU1A9SihscyxuPT5uLmV4ZWN1dGlvbnMpLHVVPUooU1Asbj0+bi5mb2N1c0luZGV4KSx3cmU9SihTUCxuPT57aWYobnVsbD09PW4uZm9jdXNJbmRleClyZXR1cm4gbnVsbDtsZXR7Zm9jdXNJbmRleDp0LHNjcm9sbEJlZ2luSW5kZXg6ZSxkaXNwbGF5Q291bnQ6aX09bjtyZXR1cm4gdDxlfHx0Pj1lK2k/bnVsbDp0LWV9KSxkVT1KKFNQLG49Pm4uZXhlY3V0aW9uRGF0YSksU3JlPUoobHMsbj0+bi5ncmFwaHMubG9hZGluZ09wcykscFU9SihscyxuPT5uLnN0YWNrRnJhbWVzKSxwZz1KKFNQLG49PntsZXR7Zm9jdXNJbmRleDp0LGV4ZWN1dGlvbkRhdGE6ZX09bjtyZXR1cm4gbnVsbD09PXR8fHZvaWQgMD09PWVbdF0/bnVsbDplW3RdfSksUHc9Sihscyx1VSxwZyxsVSwobix0LGUsaSk9PntsZXR7Y29kZUxvY2F0aW9uRm9jdXNUeXBlOnJ9PW47cmV0dXJuIG51bGw9PT1yP251bGw6cj09PXhzLkVYRUNVVElPTj9udWxsPT09dHx8bnVsbD09PWU/bnVsbDp7Y29kZUxvY2F0aW9uVHlwZTp4cy5FWEVDVVRJT04sb3BUeXBlOmUub3BfdHlwZSxleGVjdXRpb25JbmRleDp0fTpudWxsPT09aT9udWxsOntjb2RlTG9jYXRpb25UeXBlOnhzLkdSQVBIX09QX0NSRUFUSU9OLG9wVHlwZTppLm9wX3R5cGUsb3BOYW1lOmkub3BfbmFtZX19KSxFcmU9SihscywkdiksRVA9SihscyxuPT5uLnNvdXJjZUNvZGUpLFRyZT1KKEVQLG49Pm4uc291cmNlRmlsZUxpc3RMb2FkZWQpLGhVPShKKEVQLG49Pm4uc291cmNlRmlsZUxpc3QpLEooRVAsbj0+e2xldHtzb3VyY2VGaWxlTGlzdDp0LGZvY3VzTGluZVNwZWM6ZX09bjtyZXR1cm4gbnVsbD09PWU/LTE6VHcodCxlKX0pKSxUUD1KKEVQLGhVLChuLHQpPT4tMT09PXQ/bnVsbDpuLmZpbGVDb250ZW50c1t0XXx8bnVsbCksRFA9SihscyxuPT5uLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYyksRHJlPUoobHMsbj0+bi5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSksQXJlPWZ1bmN0aW9uKG4pe3JldHVybltuXX07ZnVuY3Rpb24gSTNlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2Iiw3KSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1vZShlKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoKS5vblRvZ2dsZUZvY3VzVHlwZS5lbWl0KG8udHlwZSkpfSksXygxLCJkaXYiLDgpLEEoMiksdigpLF8oMywiZGl2Iiw5KSxBKDQpLHYoKSxPKDUsImRpdiIpLHYoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9UygpO3koIm5nQ2xhc3MiLE9uKDQsQXJlLGUudHlwZT09PWkuZm9jdXNUeXBlPyJmb2N1cyI6IiIpKSxDKDIpLHl0KGUuZGlzcGxheU5hbWUpLEMoMiksWHAoIiAiLGUuZGlzcGxheVN5bWJvbCwiOiAiLGUuY291bnQsIiAiKX19dmFyIElyZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5udW1BbGVydHM9MCx0aGlzLmFsZXJ0c0JyZWFrZG93bj1bXSx0aGlzLmZvY3VzVHlwZT1udWxsLHRoaXMub25Ub2dnbGVGb2N1c1R5cGU9bmV3IEd9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImFsZXJ0cy1jb21wb25lbnQiXV0saW5wdXRzOntudW1BbGVydHM6Im51bUFsZXJ0cyIsYWxlcnRzQnJlYWtkb3duOiJhbGVydHNCcmVha2Rvd24iLGZvY3VzVHlwZToiZm9jdXNUeXBlIn0sb3V0cHV0czp7b25Ub2dnbGVGb2N1c1R5cGU6Im9uVG9nZ2xlRm9jdXNUeXBlIn0sZGVjbHM6MTAsdmFyczo1LGNvbnN0czpbWzEsImFsZXJ0cy1jb250YWluZXIiXSxbMSwiZGVidWdnaW5nLXRpdGxlIl0sWzEsIm51bS1hbGVydHMtY29udGFpbmVyIl0sWzEsIm51bS1hbGVydHMtbGFiZWwiXSxbMSwibnVtLWFsZXJ0cy12YWx1ZSIsMywibmdDbGFzcyJdLFsxLCJhbGVydHMtYnJlYWtkb3duLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJhbGVydHMtYnJlYWtkb3duLXR5cGUiLDMsIm5nQ2xhc3MiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImFsZXJ0cy1icmVha2Rvd24tdHlwZSIsMywibmdDbGFzcyIsImNsaWNrIl0sWzEsImFsZXJ0LXR5cGUtbmFtZSJdLFsxLCJhbGVydC10eXBlLWNvdW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDApKDEsImRpdiIsMSksQSgyLCJEZWJ1Z2dpbmciKSx2KCksXygzLCJkaXYiLDIpKDQsImRpdiIsMyksQSg1LCJBbGVydHMiKSx2KCksXyg2LCJkaXYiLDQpLEEoNyksdigpKCksXyg4LCJkaXYiLDUpLEUoOSxJM2UsNiw2LCJkaXYiLDYpLHYoKSgpKSwyJmUmJihDKDYpLHkoIm5nQ2xhc3MiLE9uKDMsQXJlLGkubnVtQWxlcnRzPjA/Im5vbi16ZXJvIjoiIikpLEMoMSksamUoIiAiLGkubnVtQWxlcnRzLCIgIiksQygyKSx5KCJuZ0Zvck9mIixpLmFsZXJ0c0JyZWFrZG93bikpfSxkZXBlbmRlbmNpZXM6W0ZuLGRuXSxzdHlsZXM6WyIuYWxlcnRzLWJyZWFrZG93bi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBwYWRkaW5nOiAxMHB4IDEwcHggMTBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uYWxlcnRzLWJyZWFrZG93bi10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJvcmRlci1yYWRpdXM6IDAgMTBweCAxMHB4IDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZzogNnB4IDAgNnB4IDUwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5hbGVydHMtYnJlYWtkb3duLXR5cGUuZm9jdXNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWVlMDtcbn1cblxuLmFsZXJ0cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xufVxuXG4uYWxlcnQtdHlwZS1jb3VudFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBjb2xvcjogI2ZmZjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAzcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDIwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5hbGVydC10eXBlLW5hbWVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAzcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5kZWJ1Z2dpbmctdGl0bGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxOHB4O1xufVxuXG4ubnVtLWFsZXJ0cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHBhZGRpbmc6IDEwcHggMTBweCAxMHB4IDMwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm51bS1hbGVydHMtbGFiZWxbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IDEzcHg7XG59XG5cbi5udW0tYWxlcnRzLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxM3B4O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMjBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMjRweDtcbn1cblxuLm51bS1hbGVydHMtdmFsdWUubm9uLXplcm9bX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYjc4MDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59Il19KSxufSkoKSxSM2U9e1ttZC5GVU5DVElPTl9SRUNPTVBJTEVfQUxFUlRdOntkaXNwbGF5TmFtZToiRnVuY3Rpb24gcmVjb21waWxlcyIsZGlzcGxheVN5bWJvbDoiQyJ9LFttZC5JTkZfTkFOX0FMRVJUXTp7ZGlzcGxheU5hbWU6Ik5hTi9cdTIyMWUiLGRpc3BsYXlTeW1ib2w6Ilx1MjIxZSJ9LFttZC5URU5TT1JfU0hBUEVfQUxFUlRdOntkaXNwbGF5TmFtZToiVGVuc29yIHNoYXBlIixkaXNwbGF5U3ltYm9sOiJcdTI1YTAifX0sUHJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMubnVtQWxlcnRzJD10aGlzLnN0b3JlLnBpcGUodnQodXJlKSksdGhpcy5hbGVydHNCcmVha2Rvd24kPXRoaXMuc3RvcmUucGlwZSh2dChKKGhyZSxpPT57bGV0IHI9T2JqZWN0LmtleXMoaSk7cmV0dXJuIHIuc29ydCgpLHIubWFwKG89Pih7dHlwZTpvLC4uLlIzZVtvXSxjb3VudDppW29dfSkpfSkpKSx0aGlzLmZvY3VzVHlwZSQ9dGhpcy5zdG9yZS5waXBlKHZ0KE1QKSl9b25Ub2dnbGVGb2N1c1R5cGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChHdih7YWxlcnRUeXBlOmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1hbGVydHMiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywibnVtQWxlcnRzIiwiYWxlcnRzQnJlYWtkb3duIiwiZm9jdXNUeXBlIiwib25Ub2dnbGVGb2N1c1R5cGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImFsZXJ0cy1jb21wb25lbnQiLDApLFAoIm9uVG9nZ2xlRm9jdXNUeXBlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRvZ2dsZUZvY3VzVHlwZShvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJudW1BbGVydHMiLFUoMSwzLGkubnVtQWxlcnRzJCkpKCJhbGVydHNCcmVha2Rvd24iLFUoMiw1LGkuYWxlcnRzQnJlYWtkb3duJCkpKCJmb2N1c1R5cGUiLFUoMyw3LGkuZm9jdXNUeXBlJCkpfSxkZXBlbmRlbmNpZXM6W0lyZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUnc9ezE5OiJmbG9hdDE2IiwxOiJmbG9hdDMyIiwyOiJmbG9hdDY0IiwzOiJpbnQzMiIsNDoidWludDgiLDE3OiJ1aW50MTYiLDIyOiJ1aW50MzIiLDIzOiJ1aW50NjQiLDU6ImludDE2Iiw2OiJpbnQ4Iiw3OiJzdHJpbmciLDg6ImNvbXBsZXg2NCIsMTg6ImNvbXBsZXgxMjgiLDk6ImludDY0IiwxMDoiYm9vbCIsMTE6InFpbnQ4IiwxMjoicXVpbnQ4IiwxNToicWludDE2IiwxNjoicXVpbnQxNiIsMTM6InFpbnQzMiIsMTQ6ImJmbG9hdDE2IiwyMDoicmVzb3VyY2UiLDIxOiJ2YXJpYW50IiwxMTk6ImZsb2F0MTZfcmVmIiwxMDE6ImZsb2F0MzJfcmVmIiwxMDI6ImZsb2F0NjRfcmVmIiwxMDM6ImludDMyX3JlZiIsMTIyOiJ1aW50MzJfcmVmIiwxMDQ6InVpbnQ4X3JlZiIsMTE3OiJ1aW50MTZfcmVmIiwxMDU6ImludDE2X3JlZiIsMTA2OiJpbnQ4X3JlZiIsMTA3OiJzdHJpbmdfcmVmIiwxMDg6ImNvbXBsZXg2NF9yZWYiLDExODoiY29tcGxleDEyOF9yZWYiLDEwOToiaW50NjRfcmVmIiwxMjM6InVpbnQ2NF9yZWYiLDExMDoiYm9vbF9yZWYiLDExMToicWludDhfcmVmIiwxMTI6InF1aW50OF9yZWYiLDExNToicWludDE2X3JlZiIsMTE2OiJxdWludDE2X3JlZiIsMTEzOiJxaW50MzJfcmVmIiwxMTQ6ImJmbG9hdDE2X3JlZiIsMTIwOiJyZXNvdXJjZV9yZWYiLDEyMToidmFyaWFudF9yZWYifTtmdW5jdGlvbiBBUChuKXtsZXR7dGVuc29yRGVidWdNb2RlOnQsYXJyYXk6ZX09bjtzd2l0Y2godCl7Y2FzZSBhcy5OT19URU5TT1I6aWYobnVsbCE9PWUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkbHkgcmVjZWl2ZWQgbm9uLW51bGwgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHVuZGVyIE5PX1RFTlNPUiBtb2RlIik7cmV0dXJue307Y2FzZSBhcy5DVVJUX0hFQUxUSDppZihudWxsPT09ZXx8MiE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgQ1VSVF9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDIsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtyZXR1cm57aGFzSW5mT3JOYU46Qm9vbGVhbihlWzFdKX07Y2FzZSBhcy5DT05DSVNFX0hFQUxUSDp7aWYobnVsbD09PWV8fDUhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuZGVyIENPTkNJU0VfSEVBTFRIIG1vZGUsIGV4cGVjdGVkIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB0byBoYXZlIGxlbmd0aCA1LCBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7bGV0IGk9e3NpemU6ZVsxXX07cmV0dXJuIGVbMl0+MCYmKGkubnVtTmVnYXRpdmVJbmZzPWVbMl0pLGVbM10+MCYmKGkubnVtUG9zaXRpdmVJbmZzPWVbM10pLGVbNF0+MCYmKGkubnVtTmFOcz1lWzRdKSxpfWNhc2UgYXMuU0hBUEU6e2lmKG51bGw9PT1lfHwxMCE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgU0hBUEUgbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDEwLCBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7bGV0IGk9ZVsyXSxyPWUuc2xpY2UoNCxNYXRoLm1pbig0K2ksZS5sZW5ndGgpKTtyZXR1cm4gci5sZW5ndGg8aSYmKHI9bmV3IEFycmF5KGktci5sZW5ndGgpLmNvbmNhdChyKSkse2R0eXBlOlJ3W2VbMV1dLHJhbms6aSxzaXplOmVbM10sc2hhcGU6cn19Y2FzZSBhcy5GVUxMX0hFQUxUSDp7aWYobnVsbD09PWV8fDExIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBGVUxMX0hFQUxUSCBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMTEsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgcj17ZHR5cGU6UndbZVsyXV0scmFuazplWzNdLHNpemU6ZVs0XX07cmV0dXJuIGVbNV0+MCYmKHIubnVtTmVnYXRpdmVJbmZzPWVbNV0pLGVbNl0+MCYmKHIubnVtUG9zaXRpdmVJbmZzPWVbNl0pLGVbN10+MCYmKHIubnVtTmFOcz1lWzddKSxlWzhdPjAmJihyLm51bU5lZ2F0aXZlRmluaXRlcz1lWzhdKSxlWzldPjAmJihyLm51bVplcm9zPWVbOV0pLGVbMTBdPjAmJihyLm51bVBvc2l0aXZlRmluaXRlcz1lWzEwXSkscn1jYXNlIGFzLkZVTExfVEVOU09SOmlmKG51bGwhPT1lKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZGx5IHJlY2VpdmVkIG5vbi1udWxsIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB1bmRlciBGVUxMX1RFTlNPUiBtb2RlIik7cmV0dXJue307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCB0ZW5zb3JEZWJ1Z01vZGU6ICR7dH1gKX19dmFyIGZVPSJbX25naG9zdC0lQ09NUCVdIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gICAgaGVpZ2h0OiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xuICAgIG1hcmdpbjogMCAycHg7XG4gICAgcGFkZGluZzogMXB4IDNweDtcbiAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gIH0iO2Z1bmN0aW9uIGszZShuLHQpezEmbiYmTygwLCJkaXYiLDQpfWZ1bmN0aW9uIEYzZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2Iiw3KSgxLCJzcGFuIiw4KSxBKDIsIk5hTiIpLHYoKSxfKDMsInNwYW4iLDkpLEEoNCksdigpKCkpLDImbil7bGV0IGU9UygyKTtDKDQpLGplKCJceGQ3IixlLm51bU5hTnMsIiIpfX1mdW5jdGlvbiBOM2Uobix0KXtpZigxJm4mJihfKDAsImRpdiIsNykoMSwic3BhbiIsOCksQSgyLCItXHUyMjFlIiksdigpLF8oMywic3BhbiIsOSksQSg0KSx2KCkoKSksMiZuKXtsZXQgZT1TKDIpO0MoNCksamUoIlx4ZDciLGUubnVtTmVnYXRpdmVJbmZzLCIiKX19ZnVuY3Rpb24gTDNlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDcpKDEsInNwYW4iLDgpLEEoMiwiK1x1MjIxZSIpLHYoKSxfKDMsInNwYW4iLDkpLEEoNCksdigpKCkpLDImbil7bGV0IGU9UygyKTtDKDQpLGplKCJceGQ3IixlLm51bVBvc2l0aXZlSW5mcywiIil9fWZ1bmN0aW9uIEIzZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2Iiw3KSgxLCJzcGFuIiwxMCksQSgyLCItIiksdigpLF8oMywic3BhbiIsOSksQSg0KSx2KCkoKSksMiZuKXtsZXQgZT1TKDIpO0MoNCksamUoIlx4ZDciLGUubnVtTmVnYXRpdmVGaW5pdGVzLCIiKX19ZnVuY3Rpb24gVjNlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxBKDIsIjAiKSx2KCksXygzLCJzcGFuIiw5KSxBKDQpLHYoKSgpKSwyJm4pe2xldCBlPVMoMik7Qyg0KSxqZSgiXHhkNyIsZS5udW1aZXJvcywiIil9fWZ1bmN0aW9uIEgzZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2Iiw3KSgxLCJzcGFuIiwxMCksQSgyLCIrIiksdigpLF8oMywic3BhbiIsOSksQSg0KSx2KCkoKSksMiZuKXtsZXQgZT1TKDIpO0MoNCksamUoIlx4ZDciLGUubnVtUG9zaXRpdmVGaW5pdGVzLCIiKX19ZnVuY3Rpb24gVTNlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDUpLEUoMSxGM2UsNSwxLCJkaXYiLDYpLEUoMixOM2UsNSwxLCJkaXYiLDYpLEUoMyxMM2UsNSwxLCJkaXYiLDYpLEUoNCxCM2UsNSwxLCJkaXYiLDYpLEUoNSxWM2UsNSwxLCJkaXYiLDYpLEUoNixIM2UsNSwxLCJkaXYiLDYpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSx5KCJuZ0lmIix2b2lkIDAhPT1lLm51bU5hTnMmJmUubnVtTmFOcz4wKSxDKDEpLHkoIm5nSWYiLHZvaWQgMCE9PWUubnVtTmVnYXRpdmVJbmZzJiZlLm51bU5lZ2F0aXZlSW5mcz4wKSxDKDEpLHkoIm5nSWYiLHZvaWQgMCE9PWUubnVtUG9zaXRpdmVJbmZzJiZlLm51bVBvc2l0aXZlSW5mcz4wKSxDKDEpLHkoIm5nSWYiLHZvaWQgMCE9PWUubnVtTmVnYXRpdmVGaW5pdGVzJiZlLm51bU5lZ2F0aXZlRmluaXRlcz4wKSxDKDEpLHkoIm5nSWYiLHZvaWQgMCE9PWUubnVtWmVyb3MmJmUubnVtWmVyb3M+MCksQygxKSx5KCJuZ0lmIix2b2lkIDAhPT1lLm51bVBvc2l0aXZlRmluaXRlcyYmZS5udW1Qb3NpdGl2ZUZpbml0ZXM+MCl9fXZhciB6M2U9ZnVuY3Rpb24obil7cmV0dXJuWyJjb250YWluZXIiLG5dfTtmdW5jdGlvbiBqM2Uobix0KXsxJm4mJk8oMCwiZGVidWctdGVuc29yLWR0eXBlIiw1KSwyJm4mJnkoImR0eXBlIixTKCkuZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSl9ZnVuY3Rpb24gRzNlKG4sdCl7MSZuJiZPKDAsImRlYnVnLXRlbnNvci1yYW5rIiw2KSwyJm4mJnkoInJhbmsiLFMoKS5kZWJ1Z1RlbnNvclZhbHVlLnJhbmspfWZ1bmN0aW9uIFczZShuLHQpezEmbiYmTygwLCJkZWJ1Zy10ZW5zb3Itc2hhcGUiLDcpLDImbiYmeSgic2hhcGUiLFMoKS5kZWJ1Z1RlbnNvclZhbHVlLnNoYXBlKX1mdW5jdGlvbiBxM2Uobix0KXsxJm4mJk8oMCwiZGVidWctdGVuc29yLWhhcy1pbmYtb3ItbmFuIiw4KSwyJm4mJnkoImhhc0luZk9yTmFOIixTKCkuZGVidWdUZW5zb3JWYWx1ZS5oYXNJbmZPck5hTil9ZnVuY3Rpb24gWTNlKG4sdCl7aWYoMSZuJiZPKDAsImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biIsOSksMiZuKXtsZXQgZT1TKCk7WmkoInNpemUiLGUuZGVidWdUZW5zb3JWYWx1ZS5zaXplKSx5KCJudW1OZWdhdGl2ZUluZnMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1OZWdhdGl2ZUluZnMpKCJudW1Qb3NpdGl2ZUluZnMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1Qb3NpdGl2ZUluZnMpKCJudW1OYU5zIixlLmRlYnVnVGVuc29yVmFsdWUubnVtTmFOcykoIm51bU5lZ2F0aXZlRmluaXRlcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bU5lZ2F0aXZlRmluaXRlcykoIm51bVplcm9zIixlLmRlYnVnVGVuc29yVmFsdWUubnVtWmVyb3MpKCJudW1Qb3NpdGl2ZUZpbml0ZXMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1Qb3NpdGl2ZUZpbml0ZXMpfX12YXIgWDNlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1kdHlwZSJdXSxpbnB1dHM6e2R0eXBlOiJkdHlwZSJ9LGRlY2xzOjEsdmFyczoxLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZBKDApLDImZSYmamUoIiAiLGkuZHR5cGUsIiAiKX0sc3R5bGVzOltmVV19KSxufSkoKSxRM2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXJhbmsiXV0saW5wdXRzOntyYW5rOiJyYW5rIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkEoMCksMiZlJiZqZSgiICIsaS5yYW5rLCJEICIpfSxzdHlsZXM6W2ZVXX0pLG59KSgpLEszZT0oKCk9PntjbGFzcyBue2dldCBzaGFwZVN0cmluZygpe3JldHVybiJbIit0aGlzLnNoYXBlLm1hcChlPT52b2lkIDA9PT1lPyI/IjpTdHJpbmcoZSkpLmpvaW4oIiwiKSsiXSJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1zaGFwZSJdXSxpbnB1dHM6e3NoYXBlOiJzaGFwZSJ9LGRlY2xzOjEsdmFyczoxLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZBKDApLDImZSYmamUoIiBzaGFwZToiLGkuc2hhcGVTdHJpbmcsIiAiKX0sc3R5bGVzOltmVV19KSxufSkoKSxaM2U9KCgpPT57Y2xhc3MgbntnZXQgYnJlYWtkb3duRXhpc3RzKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMubnVtTmFOc3x8dm9pZCAwIT09dGhpcy5udW1OZWdhdGl2ZUluZnN8fHZvaWQgMCE9PXRoaXMubnVtUG9zaXRpdmVJbmZzfHx2b2lkIDAhPT10aGlzLm51bU5lZ2F0aXZlRmluaXRlc3x8dm9pZCAwIT09dGhpcy5udW1aZXJvc3x8dm9pZCAwIT09dGhpcy5udW1Qb3NpdGl2ZUZpbml0ZXN9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biJdXSxpbnB1dHM6e3NpemU6InNpemUiLG51bU5hTnM6Im51bU5hTnMiLG51bU5lZ2F0aXZlSW5mczoibnVtTmVnYXRpdmVJbmZzIixudW1Qb3NpdGl2ZUluZnM6Im51bVBvc2l0aXZlSW5mcyIsbnVtTmVnYXRpdmVGaW5pdGVzOiJudW1OZWdhdGl2ZUZpbml0ZXMiLG51bVplcm9zOiJudW1aZXJvcyIsbnVtUG9zaXRpdmVGaW5pdGVzOiJudW1Qb3NpdGl2ZUZpbml0ZXMifSxkZWNsczo3LHZhcnM6Myxjb25zdHM6W1sxLCJzaXplIl0sWzEsInNpemUtdmFsdWUiXSxbImNsYXNzIiwiYnJlYWsiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnJlYWtkb3duIiw0LCJuZ0lmIl0sWzEsImJyZWFrIl0sWzEsImJyZWFrZG93biJdLFsiY2xhc3MiLCJjYXRlZ29yeSIsNCwibmdJZiJdLFsxLCJjYXRlZ29yeSJdLFsxLCJjYXRlZ29yeS10YWciLCJpbmZpbml0ZSJdLFsxLCJjYXRlZ29yeS1jb3VudCJdLFsxLCJjYXRlZ29yeS10YWciLCJmaW5pdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCkoMSwic3BhbiIpLEEoMiwic2l6ZToiKSx2KCksXygzLCJzcGFuIiwxKSxBKDQpLHYoKSgpLEUoNSxrM2UsMSwwLCJkaXYiLDIpLEUoNixVM2UsNyw2LCJkaXYiLDMpKSwyJmUmJihDKDQpLHl0KGkuc2l6ZSksQygxKSx5KCJuZ0lmIixpLmJyZWFrZG93bkV4aXN0cyksQygxKSx5KCJuZ0lmIixpLmJyZWFrZG93bkV4aXN0cykpfSxkZXBlbmRlbmNpZXM6W0JlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICAgIG1hcmdpbjogMCAycHg7XG4gICAgICAgIHBhZGRpbmc6IDFweDtcbiAgICAgIH1cbiAgICAgIC5icmVha1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgICAgICB3aWR0aDogMDtcbiAgICAgIH1cbiAgICAgIC5zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBtYXJnaW46IDAgM3B4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgICAgLmJyZWFrZG93bltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgaGVpZ2h0OiAxMXB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTFweDtcbiAgICAgICAgcGFkZGluZzogMnB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgICAgLmNhdGVnb3J5W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDJweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgICBoZWlndGg6IDEwMCU7XG4gICAgICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgICAgIH1cbiAgICAgIC5jYXRlZ29yeS10YWdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAgICBwYWRkaW5nOiAwIDJweDtcbiAgICAgIH1cbiAgICAgIC5maW5pdGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2FhYTtcbiAgICAgICAgY29sb3I6ICNmZWZlZmU7XG4gICAgICB9XG4gICAgICAuaW5maW5pdGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9Il19KSxufSkoKSxKM2U9KCgpPT57Y2xhc3MgbntnZXQgaW5mb1N0cmluZygpe3JldHVybiB0aGlzLmhhc0luZk9yTmFOPyJIYXMgXHUyMjFlL05hTiI6Ik5vIFx1MjIxZS9OYU4ifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iXV0saW5wdXRzOntoYXNJbmZPck5hTjoiaGFzSW5mT3JOYU4ifSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1szLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDApLEEoMSksdigpKSwyJmUmJih5KCJuZ0NsYXNzIixPbigyLHozZSxpLmhhc0luZk9yTmFOPyJoYXMtaW5mLW9yLW5hbiI6IiIpKSxDKDEpLGplKCIgIixpLmluZm9TdHJpbmcsIiAiKSl9LGRlcGVuZGVuY2llczpbRm5dLHN0eWxlczpbIi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjb2xvcjogIzY2NjY2NjtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTRweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4IDNweDtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmhhcy1pbmYtb3ItbmFuW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfSJdfSksbn0pKCksSVA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXZhbHVlIl1dLGlucHV0czp7ZGVidWdUZW5zb3JWYWx1ZToiZGVidWdUZW5zb3JWYWx1ZSJ9LGRlY2xzOjUsdmFyczo1LGNvbnN0czpbWzMsImR0eXBlIiw0LCJuZ0lmIl0sWzMsInJhbmsiLDQsIm5nSWYiXSxbMywic2hhcGUiLDQsIm5nSWYiXSxbMywiaGFzSW5mT3JOYU4iLDQsIm5nSWYiXSxbMywic2l6ZSIsIm51bU5lZ2F0aXZlSW5mcyIsIm51bVBvc2l0aXZlSW5mcyIsIm51bU5hTnMiLCJudW1OZWdhdGl2ZUZpbml0ZXMiLCJudW1aZXJvcyIsIm51bVBvc2l0aXZlRmluaXRlcyIsNCwibmdJZiJdLFszLCJkdHlwZSJdLFszLCJyYW5rIl0sWzMsInNoYXBlIl0sWzMsImhhc0luZk9yTmFOIl0sWzMsInNpemUiLCJudW1OZWdhdGl2ZUluZnMiLCJudW1Qb3NpdGl2ZUluZnMiLCJudW1OYU5zIiwibnVtTmVnYXRpdmVGaW5pdGVzIiwibnVtWmVyb3MiLCJudW1Qb3NpdGl2ZUZpbml0ZXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihFKDAsajNlLDEsMSwiZGVidWctdGVuc29yLWR0eXBlIiwwKSxFKDEsRzNlLDEsMSwiZGVidWctdGVuc29yLXJhbmsiLDEpLEUoMixXM2UsMSwxLCJkZWJ1Zy10ZW5zb3Itc2hhcGUiLDIpLEUoMyxxM2UsMSwxLCJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iLDMpLEUoNCxZM2UsMSw3LCJkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd24iLDQpKSwyJmUmJih5KCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUuZHR5cGUpLEMoMSkseSgibmdJZiIsdm9pZCAwIT09aS5kZWJ1Z1RlbnNvclZhbHVlLnJhbmspLEMoMSkseSgibmdJZiIsdm9pZCAwIT09aS5kZWJ1Z1RlbnNvclZhbHVlLnNoYXBlKSxDKDEpLHkoIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5oYXNJbmZPck5hTiksQygxKSx5KCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUuc2l6ZSkpfSxkZXBlbmRlbmNpZXM6W0JlLFgzZSxKM2UsWjNlLFEzZSxLM2VdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICB9XG4gICAgICBkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgfSJdfSksbn0pKCk7ZnVuY3Rpb24gJDNlKG4sdCl7MSZuJiYoXygwLCJkaXYiLDEyKSxBKDEsIlx1MjViNiIpLHYoKSl9dmFyIGVCZT1mdW5jdGlvbihuLHQpe3JldHVybnt0ZW5zb3JEZWJ1Z01vZGU6bixhcnJheTp0fX07ZnVuY3Rpb24gdEJlKG4sdCl7aWYoMSZuJiZPKDAsImRlYnVnLXRlbnNvci12YWx1ZSIsMTcpLDImbil7bGV0IGU9UygyKS4kaW1wbGljaXQsaT1TKDIpO3koImRlYnVnVGVuc29yVmFsdWUiLGkucGFyc2VEZWJ1Z1RlbnNvclZhbHVlKFFyKDEsZUJlLGkuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLnRlbnNvcl9kZWJ1Z19tb2RlLGkuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLmRlYnVnX3RlbnNvcl92YWx1ZSkpKX19ZnVuY3Rpb24gbkJlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IikoMSwiZGl2IiwxMykoMiwiYnV0dG9uIiwxNCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7b2UoZSk7bGV0IHI9UygpLiRpbXBsaWNpdCxvPVMoMik7cmV0dXJuIHNlKG8ub25UZW5zb3JOYW1lQ2xpY2suZW1pdCh7aW5kZXg6cixncmFwaF9pZDpvLmdyYXBoRXhlY3V0aW9uRGF0YVtyXS5ncmFwaF9pZCxvcF9uYW1lOm8uZ3JhcGhFeGVjdXRpb25EYXRhW3JdLm9wX25hbWV9KSl9KSxBKDMpLHYoKSxfKDQsImRpdiIsMTUpLEEoNSksdigpKCksRSg2LHRCZSwxLDQsImRlYnVnLXRlbnNvci12YWx1ZSIsMTYpLHYoKX1pZigyJm4pe2xldCBlPVMoKS4kaW1wbGljaXQsaT1TKDIpO0MoMiksWmkoInRpdGxlIixpLmdldFRlbnNvck5hbWUoZSkpLEMoMSksamUoIiAiLGkuZ2V0VGVuc29yTmFtZShlKSwiICIpLEMoMikseXQoaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0ub3BfdHlwZSksQygxKSx5KCJuZ0lmIixudWxsIT09aS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0uZGVidWdfdGVuc29yX3ZhbHVlKX19ZnVuY3Rpb24gaUJlKG4sdCl7MSZuJiYoXygwLCJkaXYiLDE4KSxBKDEsIiBMb2FkaW5nLi4uICIpLHYoKSl9dmFyIHJCZT1mdW5jdGlvbihuKXtyZXR1cm57ImlucHV0LW9mLWZvY3VzIjpufX07ZnVuY3Rpb24gb0JlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDUpKDEsImRpdiIsNikoMiwiZGl2Iiw3KSxFKDMsJDNlLDIsMCwiZGl2Iiw4KSxBKDQpLHYoKSxFKDUsbkJlLDcsNCwiZGl2Iiw5KSxFKDYsaUJlLDIsMCwibmctdGVtcGxhdGUiLDEwLDExLHF0KSx2KCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPSRlKDcpLHI9UygyKTtDKDEpLHkoIm5nQ2xhc3MiLE9uKDUsckJlLHIuaXNJbnB1dE9mRm9jdXMoZSkpKSxDKDIpLHkoIm5nSWYiLGU9PT1yLmZvY3VzSW5kZXgpLEMoMSksamUoIiAiLGUsIiAiKSxDKDEpLHkoIm5nSWYiLHIuZ3JhcGhFeGVjdXRpb25EYXRhW2VdKSgibmdJZkVsc2UiLGkpfX1mdW5jdGlvbiBzQmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLDMpLFAoInNjcm9sbGVkSW5kZXhDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25TY3JvbGxlZEluZGV4Q2hhbmdlLmVtaXQocikpfSksRSgxLG9CZSw4LDcsImRpdiIsNCksdigpfWlmKDImbil7bGV0IGU9UygpO0MoMSkseSgiY2RrVmlydHVhbEZvck9mIixlLmdyYXBoRXhlY3V0aW9uSW5kaWNlcyl9fXZhciBPcmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25TY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBHLHRoaXMub25UZW5zb3JOYW1lQ2xpY2s9bmV3IEcsdGhpcy5wYXJzZURlYnVnVGVuc29yVmFsdWU9QVAsdGhpcy5URVNUX09OTFk9e2dldFZpZXdQb3J0OigpPT50aGlzLnZpZXdQb3J0fX1uZ09uQ2hhbmdlcyhlKXtpZih0aGlzLnZpZXdQb3J0JiZlLmZvY3VzSW5kZXgmJm51bGwhPT1lLmZvY3VzSW5kZXguY3VycmVudFZhbHVlKXtsZXQgaT10aGlzLnZpZXdQb3J0LmdldFJlbmRlcmVkUmFuZ2UoKSxyPWUuZm9jdXNJbmRleC5jdXJyZW50VmFsdWUsbz1NYXRoLnJvdW5kKChpLmVuZC1pLnN0YXJ0KS8zKSxzPU1hdGgubWF4KHItbywwKTt0aGlzLnZpZXdQb3J0LnNjcm9sbFRvSW5kZXgocyxyPj1pLnN0YXJ0JiZyPGkuZW5kPyJzbW9vdGgiOnZvaWQgMCl9fWdldFRlbnNvck5hbWUoZSl7cmV0dXJuYCR7dGhpcy5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0ub3BfbmFtZX06JHt0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5vdXRwdXRfc2xvdH1gfWlzSW5wdXRPZkZvY3VzKGUpe3JldHVybiBudWxsIT09dGhpcy5mb2N1c0lucHV0SW5kaWNlcyYmdGhpcy5mb2N1c0lucHV0SW5kaWNlcy5pbmNsdWRlcyhlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZ3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChlZyw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnZpZXdQb3J0PXIuZmlyc3QpfX0saW5wdXRzOntudW1HcmFwaEV4ZWN1dGlvbnM6Im51bUdyYXBoRXhlY3V0aW9ucyIsZ3JhcGhFeGVjdXRpb25EYXRhOiJncmFwaEV4ZWN1dGlvbkRhdGEiLGdyYXBoRXhlY3V0aW9uSW5kaWNlczoiZ3JhcGhFeGVjdXRpb25JbmRpY2VzIixmb2N1c0luZGV4OiJmb2N1c0luZGV4Iixmb2N1c0lucHV0SW5kaWNlczoiZm9jdXNJbnB1dEluZGljZXMifSxvdXRwdXRzOntvblNjcm9sbGVkSW5kZXhDaGFuZ2U6Im9uU2Nyb2xsZWRJbmRleENoYW5nZSIsb25UZW5zb3JOYW1lQ2xpY2s6Im9uVGVuc29yTmFtZUNsaWNrIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lciJdLFsxLCJncmFwaC1leGVjdXRpb25zLXRpdGxlIl0sWyJpdGVtU2l6ZSIsIjM4IiwiY2xhc3MiLCJncmFwaC1leGVjdXRpb25zLXZpZXdwb3J0IiwzLCJzY3JvbGxlZEluZGV4Q2hhbmdlIiw0LCJuZ0lmIl0sWyJpdGVtU2l6ZSIsIjM4IiwxLCJncmFwaC1leGVjdXRpb25zLXZpZXdwb3J0IiwzLCJzY3JvbGxlZEluZGV4Q2hhbmdlIl0sWyJjbGFzcyIsInRlbnNvci1jb250YWluZXIiLDQsImNka1ZpcnR1YWxGb3IiLCJjZGtWaXJ0dWFsRm9yT2YiXSxbMSwidGVuc29yLWNvbnRhaW5lciJdLFsxLCJ0ZW5zb3ItaXRlbSIsMywibmdDbGFzcyJdLFsxLCJncmFwaC1leGVjdXRpb24taW5kZXgiXSxbImNsYXNzIiwiZ3JhcGgtZXhlY3V0aW9uLWZvY3VzIiw0LCJuZ0lmIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiY2xhc3MiLCJ0ZW5zb3ItaXRlbSJdLFsiZGF0YUxvYWRpbmciLCIiXSxbMSwiZ3JhcGgtZXhlY3V0aW9uLWZvY3VzIl0sWzEsInRlbnNvci1uYW1lLWFuZC1vcC10eXBlIl0sWzEsInRlbnNvci1uYW1lIiwzLCJ0aXRsZSIsImNsaWNrIl0sWzEsIm9wLXR5cGUiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSIsNCwibmdJZiJdLFszLCJkZWJ1Z1RlbnNvclZhbHVlIl0sWzEsImxvYWRpbmctc3Bpbm5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwKSgxLCJkaXYiLDEpLEEoMiksdigpLEUoMyxzQmUsMiwxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLDIpLHYoKSksMiZlJiYoQygyKSxqZSgiIEdyYXBoIEV4ZWN1dGlvbnMgKCIsaS5udW1HcmFwaEV4ZWN1dGlvbnMsIikgIiksQygxKSx5KCJuZ0lmIixudWxsIT09aS5udW1HcmFwaEV4ZWN1dGlvbnMmJmkubnVtR3JhcGhFeGVjdXRpb25zPjApKX0sZGVwZW5kZW5jaWVzOltGbixCZSxJUCxiMix4MixlZ10sc3R5bGVzOlsnLmdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjhweDtwYWRkaW5nLWxlZnQ6MTBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5ncmFwaC1leGVjdXRpb24tZm9jdXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmFwaC1leGVjdXRpb24taW5kZXhbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1yaWdodDo0cHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo0MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb24taW5kZXhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9uLWluZGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JhcGgtZXhlY3V0aW9ucy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDVweCAzcHggLTNweCAjY2NjO3BhZGRpbmctYm90dG9tOjVweH0uZ3JhcGgtZXhlY3V0aW9ucy12aWV3cG9ydFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7Zm9udC1zaXplOjEycHg7d2lkdGg6MTAwJTtvdmVyZmxvdy14OmhpZGRlbn0uaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjA5OX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2U2NTEwMH0ubG9hZGluZy1zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudDtkaXJlY3Rpb246cnRsO2Rpc3BsYXk6YmxvY2t9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0udGVuc29yLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0udGVuc29yLWl0ZW1bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7aGVpZ2h0OjM4cHg7bGluZS1oZWlnaHQ6MzhweDt0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50ZW5zb3ItaXRlbVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50ZW5zb3ItaXRlbVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0udGVuc29yLW5hbWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtib3JkZXI6bm9uZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjtkaXJlY3Rpb246cnRsO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjE2cHg7bGluZS1oZWlnaHQ6MTZweDttYXJnaW46MnB4IDAgMXB4O21heC13aWR0aDpjYWxjKDEwMCUgLSAycHgpO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjAgMnB4O3RleHQtYWxpZ246cmlnaHQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0udGVuc29yLW5hbWVbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MXB4IHNvbGlkICNjNmNhZDF9LnRlbnNvci1uYW1lLWFuZC1vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXJlY3Rpb246cnRsO2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLXJpZ2h0OjhweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjI0MHB4fWRlYnVnLXRlbnNvci12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCAwfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksa3JlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMubnVtR3JhcGhFeGVjdXRpb25zJD10aGlzLnN0b3JlLnBpcGUodnQoSXcpKSx0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YSQ9dGhpcy5zdG9yZS5waXBlKHZ0KG9VKSksdGhpcy5ncmFwaEV4ZWN1dGlvbkluZGljZXMkPXRoaXMuc3RvcmUucGlwZSh2dChKKEl3LGk9PjA9PT1pP251bGw6QXJyYXkuZnJvbSh7bGVuZ3RoOml9KS5tYXAoKHIsbyk9Pm8pKSkpLHRoaXMuZm9jdXNJbmRleCQ9dGhpcy5zdG9yZS5waXBlKHZ0KHNVKSksdGhpcy5mb2N1c0lucHV0SW5kaWNlcyQ9dGhpcy5zdG9yZS5waXBlKHZ0KHhyZSkpfW9uU2Nyb2xsZWRJbmRleENoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFF2KHtpbmRleDplfSkpfW9uVGVuc29yTmFtZUNsaWNrKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goS3YoZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItZ3JhcGgtZXhlY3V0aW9ucyJdXSxkZWNsczo2LHZhcnM6MTUsY29uc3RzOltbMywibnVtR3JhcGhFeGVjdXRpb25zIiwiZ3JhcGhFeGVjdXRpb25EYXRhIiwiZ3JhcGhFeGVjdXRpb25JbmRpY2VzIiwiZm9jdXNJbmRleCIsImZvY3VzSW5wdXRJbmRpY2VzIiwib25TY3JvbGxlZEluZGV4Q2hhbmdlIiwib25UZW5zb3JOYW1lQ2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImdyYXBoLWV4ZWN1dGlvbnMtY29tcG9uZW50IiwwKSxQKCJvblNjcm9sbGVkSW5kZXhDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2Nyb2xsZWRJbmRleENoYW5nZShvKX0pKCJvblRlbnNvck5hbWVDbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UZW5zb3JOYW1lQ2xpY2sobyl9KSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLEIoMywiYXN5bmMiKSxCKDQsImFzeW5jIiksQig1LCJhc3luYyIpLHYoKSksMiZlJiZ5KCJudW1HcmFwaEV4ZWN1dGlvbnMiLFUoMSw1LGkubnVtR3JhcGhFeGVjdXRpb25zJCkpKCJncmFwaEV4ZWN1dGlvbkRhdGEiLFUoMiw3LGkuZ3JhcGhFeGVjdXRpb25EYXRhJCkpKCJncmFwaEV4ZWN1dGlvbkluZGljZXMiLFUoMyw5LGkuZ3JhcGhFeGVjdXRpb25JbmRpY2VzJCkpKCJmb2N1c0luZGV4IixVKDQsMTEsaS5mb2N1c0luZGV4JCkpKCJmb2N1c0lucHV0SW5kaWNlcyIsVSg1LDEzLGkuZm9jdXNJbnB1dEluZGljZXMkKSl9LGRlcGVuZGVuY2llczpbT3JlLEdlXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtmdW5jdGlvbiBjQmUobix0KXsxJm4mJihfKDAsInNwYW4iKSxBKDEsIiBPdXRwdXQgIiksdigpKX1mdW5jdGlvbiB1QmUobix0KXsxJm4mJihfKDAsInNwYW4iKSxBKDEsIiBJbnB1dCAiKSx2KCkpfWZ1bmN0aW9uIGRCZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2Iiw2KSgxLCJzcGFuIiw3KSxFKDIsY0JlLDIsMCwic3BhbiIsOCksRSgzLHVCZSwyLDAsInNwYW4iLDgpLHYoKSxBKDQpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSx5KCJuZ1N3aXRjaCIsZS5raW5kKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsImlucHV0IiksQygxKSx5KCJuZ1N3aXRjaENhc2UiLCJjb25zdW1lciIpLEMoMSksamUoIiBzbG90OiAiLGUuc2xvdCwiICIpfX1mdW5jdGlvbiBwQmUobix0KXtpZigxJm4mJihfKDAsImRpdiIsOSksQSgxKSx2KCkpLDImbil7bGV0IGU9UygpO0MoMSksamUoIiAiLGUub3BEYXRhLm9wX3R5cGUsIiAiKX19ZnVuY3Rpb24gaEJlKG4sdCl7MSZuJiYoXygwLCJzcGFuIiwxMCksQSgxLCIgKE9wIGluZm8gdW5hdmFpbGFibGUuKSAiKSx2KCkpfXZhciBmQmU9ZnVuY3Rpb24obil7cmV0dXJuW25dfSxGcmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25PcE5hbWVDbGljaz1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZ3JhcGgtb3AiXV0saW5wdXRzOntraW5kOiJraW5kIixvcE5hbWU6Im9wTmFtZSIsc2xvdDoic2xvdCIsb3BEYXRhOiJvcERhdGEifSxvdXRwdXRzOntvbk9wTmFtZUNsaWNrOiJvbk9wTmFtZUNsaWNrIn0sZGVjbHM6OSx2YXJzOjcsY29uc3RzOltbMSwib3AtY29udGFpbmVyIl0sWzEsImlucHV0LXRlbnNvci1uYW1lIl0sWzEsIm9wLW5hbWUiLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsiY2xhc3MiLCJzbG90Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9wLXR5cGUiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsib3BJbmZvTWlzc2luZyIsIiJdLFsxLCJzbG90Il0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJvcC10eXBlIl0sWzEsIm9wLWluZm8tbWlzc2luZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKF8oMCwiYnV0dG9uIiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PcE5hbWVDbGljay5lbWl0KHtvcF9uYW1lOmkub3BOYW1lfSl9KSxfKDMsInNwYW4iKSxBKDQpLHYoKSgpLEUoNSxkQmUsNSw0LCJkaXYiLDMpLHYoKSxFKDYscEJlLDIsMSwiZGl2Iiw0KSxFKDcsaEJlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNSxxdCksdigpKSwyJmUpe2xldCByPSRlKDgpO0MoMikseSgibmdDbGFzcyIsT24oNSxmQmUsInNlbGYiPT09aS5raW5kPyJzZWxmLW9wLW5hbWUiOiIiKSksQygyKSx5dChpLm9wTmFtZSksQygxKSx5KCJuZ0lmIiwic2VsZiIhPT1pLmtpbmQpLEMoMSkseSgibmdJZiIsdm9pZCAwIT09aS5vcERhdGEpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W0ZuLEJlLENyLFVyXSxzdHlsZXM6Wycub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0fS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoycHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjFweCAzcHggI2VlZTtjdXJzb3I6cG9pbnRlcjttYXJnaW46MCA1cHggMCAwO3BhZGRpbmc6MnB4IDZweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjIwMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MnB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MXB4IDNweCAjNzU3NTc1fS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MH0ub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3JkZXI6MnB4IHNvbGlkICNmZmQzYjJ9Lm9wLWluZm8tbWlzc2luZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheX0ub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtwYWRkaW5nOjA7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3doaXRlLXNwYWNlOnByZS13cmFwfS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOjB9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDozcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0uc2VsZi1vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkO3RleHQtZGVjb3JhdGlvbjpub25lfS5zbG90W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbG90W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsb3RbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSddfSksbn0pKCk7ZnVuY3Rpb24gZ0JlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwxMykoMSwiZGl2IiwxNCksQSgyKSx2KCksXygzLCJncmFwaC1vcCIsMTUpLFAoIm9uT3BOYW1lQ2xpY2siLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoMyk7cmV0dXJuIHNlKG8ub25HcmFwaE9wTmF2aWdhdGUuZW1pdCh7b3BfbmFtZTpyLm9wX25hbWUsZ3JhcGhfaWQ6by5ncmFwaElkfSkpfSksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXg7QygyKSxqZSgiSW5wdXQgc2xvdCAiLGksIjoiKSxDKDEpLHkoImtpbmQiLCJpbnB1dCIpKCJvcE5hbWUiLGUub3BfbmFtZSkoInNsb3QiLGUub3V0cHV0X3Nsb3QpKCJvcERhdGEiLGUuZGF0YSl9fWZ1bmN0aW9uIF9CZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwxMSkoMSwiZGl2IiksRSgyLGdCZSw0LDUsImRpdiIsMTIpLHYoKSgpKSwyJm4pe2xldCBlPVMoMik7QygyKSx5KCJuZ0Zvck9mIixlLmlucHV0T3BzKX19ZnVuY3Rpb24gdkJlKG4sdCl7MSZuJiYoXygwLCJkaXYiLDE2KSxBKDEsIiAoVGhpcyBvcCBoYXMgbm8gaW5wdXQgdGVuc29yLikgIiksdigpKX1mdW5jdGlvbiB5QmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDIzKSgxLCJncmFwaC1vcCIsMTUpLFAoIm9uT3BOYW1lQ2xpY2siLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoNCk7cmV0dXJuIHNlKG8ub25HcmFwaE9wTmF2aWdhdGUuZW1pdCh7b3BfbmFtZTpyLm9wX25hbWUsZ3JhcGhfaWQ6by5ncmFwaElkfSkpfSksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtDKDEpLHkoImtpbmQiLCJjb25zdW1lciIpKCJvcE5hbWUiLGUub3BfbmFtZSkoInNsb3QiLGUuaW5wdXRfc2xvdCkoIm9wRGF0YSIsZS5kYXRhKX19ZnVuY3Rpb24gYkJlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDE5KSgxLCJkaXYiLDIwKSxBKDIpLF8oMywic3BhbiIpLEFUKDQsMjEpLHYoKSxBKDUsIikgIiksdigpLEUoNix5QmUsMiw0LCJkaXYiLDIyKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4O0MoMiksWHAoIiBPdXRwdXQgc2xvdCAiLGksIjogKCIsZS5sZW5ndGgsIiAiKSxDKDIpLEt4KGUubGVuZ3RoKSxJVCg0KSxDKDIpLHkoIm5nRm9yT2YiLGUpfX1mdW5jdGlvbiB4QmUobix0KXtpZigxJm4mJihfKDAsImRpdiIsMTcpKDEsImRpdiIpLEUoMixiQmUsNyw0LCJkaXYiLDE4KSx2KCkoKSksMiZuKXtsZXQgZT1TKDIpO0MoMikseSgibmdGb3JPZiIsZS5jb25zdW1lck9wcyl9fWZ1bmN0aW9uIENCZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwyNCksQSgxKSxfKDIsInNwYW4iKSxBVCgzLDI1KSx2KCksQSg0LCIgYW5kIG5vIGNvbnN1bWVyLikgIiksdigpKSwyJm4pe2xldCBlPVMoMik7QygxKSxqZSgiIChUaGlzIG9wIGhhcyAiLGUub3BJbmZvLmNvbnN1bWVycy5sZW5ndGgsIiBvdXRwdXQgIiksQygyKSxLeChlLm9wSW5mby5jb25zdW1lcnMubGVuZ3RoKSxJVCgzKX19ZnVuY3Rpb24gTUJlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiksRSgxLF9CZSwzLDEsImRpdiIsNCksRSgyLHZCZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDUscXQpLF8oNCwiZGl2Iiw2KSg1LCJkaXYiLDcpLEEoNiwiT3A6IiksdigpLF8oNywiZ3JhcGgtb3AiLDgpLFAoIm9uT3BOYW1lQ2xpY2siLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoKTtyZXR1cm4gc2Uoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSx2KCkoKSxFKDgseEJlLDMsMSwiZGl2Iiw5KSxFKDksQ0JlLDUsMiwibmctdGVtcGxhdGUiLG51bGwsMTAscXQpLHYoKX1pZigyJm4pe2xldCBlPSRlKDMpLGk9JGUoMTApLHI9UygpO0MoMSkseSgibmdJZiIsci5pbnB1dE9wcy5sZW5ndGg+MCkoIm5nSWZFbHNlIixlKSxDKDYpLHkoImtpbmQiLCJzZWxmIikoIm9wTmFtZSIsci5vcEluZm8ub3BfbmFtZSkoIm9wRGF0YSIsci5vcEluZm8pLEMoMSkseSgibmdJZiIsci50b3RhbE51bUNvbnN1bWVycz4wKSgibmdJZkVsc2UiLGkpfX1mdW5jdGlvbiB3QmUobix0KXsxJm4mJihfKDAsInNwYW4iLDI2KSxBKDEsIiAoT3AgaW5mbyB1bmF2YWlsYWJsZS4pICIpLHYoKSl9ZnVuY3Rpb24gU0JlKG4sdCl7MSZuJiYoXygwLCJkaXYiLDI3KSxBKDEsIiBObyBncmFwaCBvcCBzZWxlY3RlZC4gQ2xpY2sgYSB0ZW5zb3IgbmFtZSBpbiB0aGUgR3JhcGggRXhlY3V0aW9ucyB0YWJsZSB0byB2aWV3IHRoZSBuZWlnaGJvcmhvb2Qgb2YgdGhlIHRlbnNvcidzIG9wIGluIGl0cyBncmFwaC4gIiksdigpKX12YXIgTnJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uR3JhcGhPcE5hdmlnYXRlPW5ldyBHfWdldCBncmFwaElkKCl7cmV0dXJuIHRoaXMub3BJbmZvLmdyYXBoX2lkc1t0aGlzLm9wSW5mby5ncmFwaF9pZHMubGVuZ3RoLTFdfWdldCB0b3RhbE51bUNvbnN1bWVycygpe3JldHVybiB0aGlzLmNvbnN1bWVyT3BzLnJlZHVjZSgoZSxpKT0+ZStpLmxlbmd0aCwwKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZ3JhcGgtY29tcG9uZW50Il1dLGlucHV0czp7b3BJbmZvOiJvcEluZm8iLGlucHV0T3BzOiJpbnB1dE9wcyIsY29uc3VtZXJPcHM6ImNvbnN1bWVyT3BzIn0sb3V0cHV0czp7b25HcmFwaE9wTmF2aWdhdGU6Im9uR3JhcGhPcE5hdmlnYXRlIn0sZGVjbHM6OSx2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZSxpLHI7cmV0dXJuIHQ9JGxvY2FsaXplYDrikJ9mZTU1ZjliMTkzZWEyMGFhZTViNTYzNWU2OGQ5Mzg2NTAzODQ3NzQ24pCfNDk1NTEzMzc0MDg0MTI5OTg1MTp7VkFSX1BMVVJBTCwgcGx1cmFsLCA9MCB7Y29uc3VtZXJ9ID0xIHtjb25zdW1lcn0gb3RoZXIge2NvbnN1bWVyc319YCx0PVBUKHQse1ZBUl9QTFVSQUw6Ilx1ZmZmZDBcdWZmZmQifSksZT0kbG9jYWxpemVgOuKQn2JhYTQ2MGUyZjJiODU3ZTI2MjkyYjI0NmZjMThhZTBlYTliNWU1MzfikJ81NTU2MzQwMzQzODUwMTY1NTE2OiAke3R9OklDVTpgLGk9JGxvY2FsaXplYDrikJ82YWE3NWY2MjdlMGRjMTYxNTBlZjQ0ODQ2NGUwYzg1N2FhYTBkYzE44pCfNTE1NjcxMjkzNTE1MDU4Njg3ODp7VkFSX1BMVVJBTCwgcGx1cmFsLCA9MCB7dGVuc29yfSA9MSB7dGVuc29yfSBvdGhlciB7dGVuc29yc319YCxpPVBUKGkse1ZBUl9QTFVSQUw6Ilx1ZmZmZDBcdWZmZmQifSkscj0kbG9jYWxpemVgOuKQnzg5MzQ3NmMyYzQyMWNlZTQ3NjYzYzk3MzJmYTQxYTc1MGQzYTczZGbikJ8yNDYwNjcwNTM3MzUxNjI2MzQ6ICR7aX06SUNVOmAsW1sxLCJncmFwaC1zdHJ1Y3R1cmUtY29udGFpbmVyIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsib3BJbmZvTWlzc2luZyIsIiJdLFsibm9PcEZvY3VzZWQiLCIiXSxbImNsYXNzIiwiaW5wdXRzLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0lucHV0cyIsIiJdLFsxLCJzZWxmLW9wLWNvbnRhaW5lciJdLFsxLCJzZWxmLW9wLWhlYWRlciJdLFszLCJraW5kIiwib3BOYW1lIiwib3BEYXRhIiwib25PcE5hbWVDbGljayJdLFsiY2xhc3MiLCJjb25zdW1lcnMtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vQ29uc3VtZXJzIiwiIl0sWzEsImlucHV0cy1jb250YWluZXIiXSxbImNsYXNzIiwiaW5wdXQtb3Atc2VjdGlvbiIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImlucHV0LW9wLXNlY3Rpb24iXSxbMSwiaW5wdXQtc2xvdC1oZWFkZXIiXSxbMywia2luZCIsIm9wTmFtZSIsInNsb3QiLCJvcERhdGEiLCJvbk9wTmFtZUNsaWNrIl0sWzEsImlucHV0cy1jb250YWluZXIiLCJuby1pbnB1dHMtaW5kaWNhdG9yIl0sWzEsImNvbnN1bWVycy1jb250YWluZXIiXSxbImNsYXNzIiwic2xvdC1jb25zdW1lcnMtY29udGFpbmVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwic2xvdC1jb25zdW1lcnMtY29udGFpbmVyIl0sWzEsInNsb3QtY29uc3VtZXJzLWhlYWRlciJdLGUsWyJjbGFzcyIsImNvbnN1bWVyLXNlY3Rpb24iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb25zdW1lci1zZWN0aW9uIl0sWzEsIm9wLWNvbnN1bWVycy1jb250YWluZXIiXSxyLFsxLCJvcC1pbmZvLW1pc3NpbmciXSxbMSwibm8tb3AtZm9jdXNlZCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihfKDAsImRpdiIpKDEsImRpdiIpLEEoMiwiR3JhcGggU3RydWN0dXJlIiksdigpLF8oMywiZGl2IiwwKSxFKDQsTUJlLDExLDcsImRpdiIsMSksdigpLEUoNSx3QmUsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLHF0KSxFKDcsU0JlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsMyxxdCksdigpKSwyJmUpe2xldCByPSRlKDgpO0MoNCkseSgibmdJZiIsbnVsbCE9aS5vcEluZm8pKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W2RuLEJlLEZyZV0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtvdmVyZmxvdy15OmF1dG99LmNvbnN1bWVycy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjVweDtvdmVyZmxvdy14OmF1dG87d2hpdGUtc3BhY2U6bm93cmFwfS5jb25zdW1lci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMH0uZ3JhcGgtc3RydWN0dXJlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7b3ZlcmZsb3cteTphdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uaW5wdXRzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO21hcmdpbi10b3A6NXB4O292ZXJmbG93LXg6YXV0bztwYWRkaW5nLWJvdHRvbTowO3doaXRlLXNwYWNlOm5vd3JhcH0uaW5wdXQtb3Atc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjVweDtwYWRkaW5nLWJvdHRvbTo1cHh9LmlucHV0LXNsb3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYwOTk7bWFyZ2luLWJvdHRvbTo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmlucHV0LXNsb3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmlucHV0LXNsb3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlNjUxMDB9LmlucHV0LXRlbnNvci1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcH0ubm8tb3AtZm9jdXNlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheTtmb250LWZhbWlseToiUm9ib3RvIixBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtmb250LXNpemU6MTNweDt3aGl0ZS1zcGFjZTpub3JtYWx9LnNlbGYtb3AtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkO21hcmdpbi1ib3R0b206NXB4fS5zZWxmLW9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO3BhZGRpbmctYm90dG9tOjVweH0uc2xvdC1jb25zdW1lcnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6NXB4O3BhZGRpbmctdG9wOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnNsb3QtY29uc3VtZXJzLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTHJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMub3BJbmZvJD10aGlzLnN0b3JlLnBpcGUodnQobFUpKSx0aGlzLmlucHV0T3BzJD10aGlzLnN0b3JlLnBpcGUodnQoY1UpKSx0aGlzLmNvbnN1bWVyT3BzJD10aGlzLnN0b3JlLnBpcGUodnQoQ3JlKSl9b25HcmFwaE9wTmF2aWdhdGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChadihlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaCJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJvcEluZm8iLCJpbnB1dE9wcyIsImNvbnN1bWVyT3BzIiwib25HcmFwaE9wTmF2aWdhdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImdyYXBoLWNvbXBvbmVudCIsMCksUCgib25HcmFwaE9wTmF2aWdhdGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uR3JhcGhPcE5hdmlnYXRlKG8pfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksdigpKSwyJmUmJnkoIm9wSW5mbyIsVSgxLDMsaS5vcEluZm8kKSkoImlucHV0T3BzIixVKDIsNSxpLmlucHV0T3BzJCkpKCJjb25zdW1lck9wcyIsVSgzLDcsaS5jb25zdW1lck9wcyQpKX0sZGVwZW5kZW5jaWVzOltOcmUsR2VdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLEJyZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJpbmFjdGl2ZS1jb21wb25lbnQiXV0sZGVjbHM6NTQsdmFyczowLGNvbnN0czpbWzEsImNvbnRhaW5lciJdLFsxLCJ0aXRsZSJdLFsxLCJjb2RlIl0sWzEsImFyZyJdLFsxLCJleGhpYml0cy1jb250YWluZXIiXSxbMSwiZXhoaWJpdCJdLFsxLCJzY3JlZW5zaG90Il0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUFveUhwVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJaeHBkaHk1Y29YL1l4VmVBdVpoT1JnQzUzZ0hYcjYvaTJKcmVtcXJuKzFXaTZTS3hVd2tFSEdIUUlETy91cy9yL3NQL2h1dFpaZEw2M1hVNnZrdmp6emk1SXZ1UC8rTjl6SDQvRDYrLzFMOStpcjgvTHI3OW8zSTU2UjNmcjdSNXVkem1MeGV2di9BWC9jSTYrZlhYZi82VHV4ZkYvcjZCaGYrakVCMzF0Zm54MEh5ZXZ5OEh2TFhoWVo5dnFpanR4K0h1cjR1dEwvZStJYnk5VGQvRzlibmsvN3RmbnFoTVV1bmNLTVVvNldRL1B1WVB5TkluNytUdisxOWpMd3Y4TnBNS1FYMytmUjFNU2JrcDhmNzY3UDNQMDdRVDVQODExZnUxOW4vOXRVdmt4L24xK3ZwbDdtc1gzUGs2KysvRWNvdnI2ZHZ0NGsvaGNPM0VjV2Z2M0Y3elAveU9GOS83ejM5WHZzODNjeVZHYTFmRWZVbSs2OFowaHNYVTU3ZWoxWCtOUDRXdm03dnorQlA5OU52bHZ6NDdSZC9kaGdoc2lyWGhSeE9tT0VHZTU5MzJBd3hSNHVOenpIdW1ONXJQYlU0NGs1YXA2dy80Y2FXUmpxcHMyNDdtbVBOY29yZnhoTGVmY2U3M3c2ZE81L0FXMlBnWWxycXYvM2ovcWR2L2p0LzNMMWJVeFI4L3paWGpDc3FyaG1HVms0ZmVSZExFTzdYdXBVM3dYLzkrVnArLzBQOEVLcXNZSG5UM0huQTZkZm5FcXVFNzdHVjNqb24zbGY0L0ZuajROcjV1Z0JUeEwwTGd3bUpGZkExcEJKcThDM0dGZ0x6MkZtZ3ljaGp5bkd4QXFHVWVCaGt6Q25WNkZyc1VmZm1aMXA0NzQwbDFxaVh3U1lXb3FSS2JuVldhTEpZT1JmaXArVk9ETTJTU2k2bDFOSktkMldVV1ZQTnRkUmFXeFhJelpaYWJxWFYxbHB2bzgyZWV1NmwxOTU2NzZQUEVVY0NBOHVvbzQwK3hwZ3p1c21OSnRlYXZIL3l5b29ycmJ6S3FxdXR2c2FhbS9EWmVaZGRkOXQ5anoxUFBPa0FFNmVlZHZvWloxcHdCbEpZdG1MVm1uVWJOaSt4ZHRQTnQ5eDYyKzEzM1BsdDFiNVc5Vi8rL0J1ckZyNVdMYjZWMHZ2YXQxWGpWZGZhWDVjSWdwT2lOV1BGWWc2c2VOTUtFTkJSYStaN3lEbHE1YlJtZmtTU29rUUdXYlEyN2dTdEdFdVlMY1J5dzdlMSs3NXkvMmpkWE9uL2FOM2luMWJPYWVuK1AxYk9zWFQvdW02L1diVWpudHR2eFQ1WnFEbjFpZXk3Wlp5NDNJNXgxVExudEpsYVMyWHVGWE1MYVplUVd6MjFybnFCazl2UEx0M0h4cmU2WjVZUG5NTWtITDl5UGFIb1FyMm1mT1B4RTNoZnBkMDEwMkZwazU2eU00NjlUcjY1MzFVWUxaY0cvODQ4TzdSajNMU3N1RmRZNXRvMG5pdWxmWG5rbHZJK25xUXNCd0JkZlc4bWRkOFdvbStzWk9vOTU1Nys0b1lrS0w5bG5qWmpKeUQ1T0hWem02V3VXYzVjWlplVEp5bnZ6Zk80MlljNlJvOFJyU0dTUG5sTVMyM25jUW0xZkkvQ3hhVWVUaTN3ZGRzZ3d0cDM3YnB1eU1YYVliSnJ2MVlBN3VYVGFjYlQ1ZERhM0t6RENtMHlmNVV4TTMzYjVRazloRjFuNGFaM1NSU0VzMjhmeldJNlZtZUl5V3hzNDFxK3JoN1dPQzBhVnpEaXVLL0dQQkVRd1NtSkNPbit4RVJhWTk3TTBFYmJ2aHppdG5heW9MR0VQTUpzdTFwaWtRZmdOY3RsNlhzSTF0Zk5saDF6M0c4b2RwS0Z3Y01odXk2UDRsRVRRT0h1TTQyeTdCN05TQ0lPVDdwOVh5WS9IT1gyUWlLMWZSWnoxSFlFT1hpWWZrck4rYVJsdS9oVmZSK1JtR1J0eVRJN25abW9pY2c3L3VaeUQ4RzlEems2RW9Ob3NhR1BhZ3g1WlJLTmNZWjhXem43aUF2UDliUFpLR1lrSnZjTlBORDFuWWMrUENSd1BZMVF5SER0YXRYYzZyWEN4SmRKYlpPUk1oZVZkTEIrYTB1Um14SVJoY2xrMk9lMGJvY3c3aXlFSitaelZNRHlnZitkeE4yWWVzcnJyL1hUeU5pOVdwbjU5TTAwM1dPTkJTWVZFdmRWNkJhdUhQWktERE5XR3hWWUtiZTRXRWNTY0d3K0U2RWt4c25KMEJNOXRCS1l0NkFiVnoxT0dndWdJZmZ2SEVUNkpGb0w0d1Fjem1DeUs4eldTS01haHdmSHlHR0drcVlHRU5ZQlRuT0RqTXRjWnhGWTJiWVZjQU9RSTJJaHQ3dU5wU1JGOWtSQ2RDWVlQT1RyR3lBL1ZyY3VZbUhjWGErRm5SbHlPWW5adFZEUzNqd09vZHB0U2ZBa3dVOHlOeTZaMVhqQUthQll1Wit3aGJVa0ZBaGFBL1JKRnZvK1FRVmJBekN1YlNjRm95ZGtKcE4vYmlIbUhJSE90d3VodG5kT2UwbUV3UWZMRzhoUjB3Z2xLeFJKMjJKeEUxQ0RmTjRUZXJkYndFREd5UFZXZERzdEFHTzJDOExiNkMvbVJnUExtSmg0Z0tyV3p5U21nZjRGRmxmd2o1Y0pVRkRrS2t3T2tYUG5jWTFaSmdLUEVWYWdHNm5Rb0pTSWRrc3hkOFZRTzFteStTNGttUzJGeEJZRVZOWXVseVFrWTVGUS9pRU1iNmNRanVPc2t4SmlsRmdETW96dzhLWUJHVkU2UmhpeDFoSTl0MjlrWHlkS1lqeXpMbFloSTJ1WXlwR0NnZU0xQVhmZUd5QTA4OU9rcUp0TWVtZjBpMXdITUY2K2YyNGtKTWhGaEVYUWlqZ0NIYkVPNUJ2OHVDLzVJbUlsQmdPTUNtb0NnMlA3VGFpQjNBRUFCVnRSbUpNRkppU3pxR0hBS2E3dUFVT1BCcHAwQm1TUTRnVU5JUk5mWVAxRlZOemMvRDRBZDBHZW9vMHJVdTBDWVJBQlR5cVd1Mms0VUJUdHRYaFdJd1JOckFzeERqSjNyZDFYN2NJS2hXdVRLU0FTZVNCbUgwaVl5dFdOc0FhaGhybWpsU1dWV0NMejJ6SkVPc1k5RlE2cnd2YmViVjhpa0V1a3NsbHlMTkNOc3phQTZLWUozeTJMQWN5MnVSZzB5WmhXbXVpVXhoVUVBTFZaSWxRUGNNVFZHelJQc3ZMb214Q2NGeEFhcldSQ3d0YTFDRW02VFBnUXV4aS9qYTZ2K0FBZUdzUWlxdzE4SXRwWVIwSmVPQ3dXQVVsTFl1cjJLc01JMG80bklOWE41VFNZK2h4WjlYUDVGcGRjQ2xlZ3NFUEhZR0poNFVqMlVsWWcvTnJsR25Nc0ptTWpWTGhaWUVYVGxtSURGVm1XeEpTam96QU94QmNxMllQbFVVNDNONUhVL1lhRnYvL3M5RVVHdGtzbWFyb0FkTzhMQlpFRVp5SWxka0pROVRCclJSOGNVcmJJWG9NUE1rM01TZ096Wm9GRjdCSVhGekZZR3FOWnJCeDZ5TE5lZ0VzaW4vcUd1SUt1amh6UEhUbXlSSENFQnJsbUVqUjhlOVRsa09kbmxhdFpQYXVud3dmam5kdzhJMW9XZEFiN295TWs0OUJlcVhIUEdNbGxFbU9VUnNBTU5FdzM1cWhBbndCeU9jZzhrRE9UbTJ2NFl3VWhnS0hJQktVRnBDRFBDL3F4dFA1NlVHUnNZTDhGQ1E4Z0xUbUlucDh4S1pBdWRNQ0k4c09YZkFPb0FMazhEZytWemphV3AwcEhuQWVSNkNsbTVhVFppNVhURjltL3oxN0VKMW1NY29sNUF4MU1KZUFPd2NxOTRCMlJQUWdKUWhqVUh1Z1ZwQnlNZEFXNEFHV1VPSFB0amdJOC8vS3lYbTNLQXd4dzJRTlFRaHFRTjhGU1gvbm9FYkdXNVdBOTBhN01yWGNMVzJWb1NpSXlDZWt2ckgrVHhLb0V6ZzFpMTBaVzJEcEc4Z3pZZDNkNEkyOG1nWFVoY3FSZGowTmlpWGVRQm1RK1M1b0JxMVNRQ1BQRnZNSUV6RzVGb3JTUitJaEc1QndpT3l0bUU3Q0FySjg3T1RpSU5ZUmx4Szl6MzVtWTk3b1dJZ2ZvWmthZ01TN000SUFKY0M0ZG5wbUJjb3VMNllkSHR0ZWt1Q0JzcXVlQUpPUTJxeW54REhzc3pBRFlUSERCQndobkhwVXZDSWNObVBZSjgyRUlnaEl6U053dmg2Mi9xRnN3aGFlVGtDSTBZQ3hTSFd5WCtyOURUbUtCVGowYjhFQTRzKzRzQ3graGM1K1JhWHZESW9oaFk3cTE1SHhqNEpwS1lXYUd5VUVVeURxc1JreDE2NTNGdU1JV3hYVkZ6RUdaQ0kyVEpYaGRRaHpBVzRDcHVBSHlaUlJvTkFZTC9SZ1AyNUVSZ1hrbzhHZmVpbStVUTBmQUxjS1NqT0NCUWJMdDluN2dhdkNUc2ZEY25qUzE5QVpWaUhuTUZvTWY4eFJCR3FnNUdCRGZnK2w2dzAxSndtNzB1MXRnV0ZXZ1hDUnpKdjJSTlEyR0o5WW5pTG13NTBSckpraU15UVZwMG9KS2tUUXFzczBuSm9ZbTNCVUYvRUM5Nk1ZRVNVTkc4MHp4elJEQWpHdG9PTHVxZFYrRTJFbGQ2b0g1S0tyVGxmRDEyWVZmWHZqMU04OEJrWnNuQ2xqeXhtSXlVRkszeXRvTkxROHFzVStFMXNCNElGZzJ1aDgrUkJJaEQ4a2VSRGh2d1MwdUZBVDJVK2FwaXE4Tm8xZ0RWZ1hycGVVRE0yRkljMENleDlDMHArUEJMNklSVGE0TStkMnJLeWRFeW54Z2pSMENia0VhTUFkVnl3dUpyTHhkczQ3c3hYemlVZ2xtRm40bHdCazdBZEhqYUpzUGJTMnV3R0FOeG9CZTBhR1FGN0JHSEhrVW9pY3hUd2ZSVkVFQkFJb2l2NHBGaWZEdEt3NG40UzBHRTl3SmRWZ1JiRHRuczhCNGlhVEtRSE1YSllJVzZ2SXNUSzdoaXVEQ25RRkpKZ3k5aDdjR1MwRzV4RnZKdnFhRWgzSW1TYmRJbWFxVWFNMXgzNHJjUVBmaUk5Q0h2VWFGanczbXNoS0FneGhINXNIT0FEazBFRlBBcVI1VmhkZlgwdkp4WmdlTUVpNmJxU01mRVM5ZHc3RWI1Q01sUjdrZDdEUElWN0lCRzd0RUNaZndHZzBGSEFjVGZnakE3YkErdDZKTUk0eHRrK25FVGx5L0lJMkRsMDFaTXIwVTRuVURuU2o5UFVIOUtqa1A5VndFSmk1aGdHK090NkFZS3ZpQmJDRE1NdFFtZHN6a3V5b3RkK0V2c1g1UU1JbVA2aVg0V1pLTzlRZWxPMkFaOFR1NU9HdzVVQXloK1FaUmpndVhiaUJOZEVsK0d3NktDNDFFa205aU9aQTgxYTlSMFp5NExpaEFoVzFXRm9Ja3NSdkUreWkxd1Zrek4yUmpCdCt3dGdTU0tndTZHM0d5QWVPN2hDbEhWb2hib1lhaWJKQk5Sd0EyNW83Y1JsZVN1MWMyaGNWbFpnRmcxcDB4bU9TMm5ad05hZ0dJV0JYUUVpV0ZZNjdnc0RMWlRUQzhOVlZCeUg5dUxXRjN5SHdNZlZSZDEwZklsREJEQmFhUzVsQlEvZTdtempRMndMWkMxNzhaMnovK3J2c2Z2bzNnSFppM3lkUlVLTHMyU1JDTWpPRkV2Q3BEeU1rNFR3RHplblRvNEh0NXRCVjVOdWdhVE45OFo0bTI4WWZwQ1dKc2Y4OGtmU2pJNmdUK0lrVENTSUF5dXJic0J0ZzVlRE5sL0dWdHdXcTFEWlYxZ2crZGpoQ3p3enlwTm9OMFFiNStnTFhVdnZRVjJnWDJSVmt0ZVV5RVZwbXFRbnZCSjgrR2ljZCs0VHdidW5RVDJ3RDVCV3R5UkE4TlZCdlBReURqSTlBYXI4YUFSV0FzanR4dkNFVjRFRy9qc1JGSFFrUUNFK2VoMFYvQktrbERYQlhRTU9GWFVWcGdGbVNuWWtadnFtNzhia1NBZEVTbkk2VEp4YmhOUG5ManBnMnNCSmNiTW1nOU0wOWlOenkyN2NCRkhYWlU4Z1I5eDNTcmFzRWlCbGJ3eFNYNEpXMFhrQ25rZUltSXhiTEZIK1RFNUNtWktXVkZHc2NqajNFdTRBZ0RJWUxSMkNVT3BBL0tESzJMWXVZOWV5cXVxeTM0NEY1TEI4T2xTN3lQY1dMSTdpMUVkZ0cxZmxWck9LbUdqTzhwUVdtdjJuaUlOeGd4NDdUUVF3dnpYUHd3SDZKUWlvczQzQis0K0Q3Z0JQQkk2WE5Scm9DSUdmS29xUkljaEVnNGlRQmgvWUpsblBUS0VCbFNDSFlES2h4a2tvVEdqM2hPd1d5UlN3Z3ozbTg1U0JrZkNGQWVoVnMycG9tWHFrejlRRUExK0FJS0Jmek5YY2djalRraE1xOEtDbjRra2hoQVJwWHJEUEM4eUJ5OHhBRk1aQmJPWkpjcWY0ZHd3NWloQ3RFaEpDM3hDUVpQUm92YjUyYUFPdmZuN2ZCSzBWY0JqVkZ3UEoybkl3NXNWN1FYREVKQUVFRW92Z2h5NG1tTk1iSlM0YXJZU3JxcS9uc21TNFg1Z3g4TGVuNkFIN3RNQldiZ3NmZFc5UlBraHNrTmtMdzVZdGNCSmN5MmFxd05UMEd1SGRZRHBUVnhtc3dmQUZRQitva3hJUUx3NDdWMjhKTTF4REdlY0ZGM0dlck95Y1dBQk9NdWlHZ0VFS3BxeUptUWF3Tks2VU9LR21JakVyYVBlRTlHdmJoQ1hUbDNNcEoxTkluZmlvaEEyeTFrUEs0UitZSU00NTFRVHVYZkNIT1ZFWkprUEpQVVdkSUxNR1JCckh5cjdBVjZIVTY0clRwWkttd3ZWSE1TYkhleGVndWJuVU92U09uRXh6RVFZeXQ2OFpMSENTQUxpVytDQkFWTWpzWVpuczZXamJ2SUFVTVdjR015cXdrSGtRZ2VFaXFxdmZDb3dQaVJlY0pUZGVVYmdnTGlPb1FJeVMzVFZGM1FzN0FpdmpPZnM5L1NvbTI0QzBzYUlZZUxvbXpuVlVISEVEa3o1cXg2K2V4NUF4ZXFRL2haZ1pGd3ROa2grY2c2VEdOdFRTVmY4TnkvRWgyb2craERQYitxSnZZblFNdkdjckVFUTdWNEx5ZTl0aHU0YnB4RHdBMmdWVkJCWHBWbk12L2pKMVhyQjgyRFp5RklYaS9CZUJMdUJUV0hZcS9JZWlRVW93TDh4ZGpucUp5QWRBdEYrUUZRc2taalNDVkRyVWkzaEhLekRJRmdzanpDbzhyd2t6M2pxdFRIdUYzRGlXT0U4YXhZSHV5b1NJSlVWSFg1N3JWQVE2MzlVQjFzVE92b1NEakdCazcrNjR2TnRVODBnSTJIR3VoQXhOclZac0VKMG1QTUlCR0tDR3h5cGZkZ0xTN1B0VU9kcWdocHg4WmpvVlIzTjJUaHJLNUNZK09CQ0xvMXZ5LzFSU0V5RGNrVytEZmpCKzlJamZqQWxTOUJ1bDRFbmJ4aTVTR1lReGVHOTdXK3FDeVc5dmFFa3IrOStFOC8vZTFIQmJ2dTY2ZGJUS28rQkZSeHJkdHZaQkI4cHZJTU1ZazZSR2FHcSsyZEZqc3FUb1Zuckkrc1hSZlYxNGlGR0JGenF0MGU2ZE5LbHRqV3JvQkM4RXJOR1FCenVEczBiM0QwMWc1RU9wWHBxcXJONExRclYzZmlDb0tpbzN1Z1JrZ1UwVG9BYzlJclJCRlpzaXpQZ3pNVzh4VFZLckEya0k1OEhzYTZFNWtXcjBzSnNBaHJxQm9DdjBraEpIU1dhb20vRzFsNFN2UG9WY1VKV1h1RkpnRVlHZkJVeE1aZmtoK2ZtOFl6MG9oNExBaGNva0pKUFdtVEVQQ3oxMjZxYW8zWmd5YUVRQnl3ekNJRW5mYTJ0MHBSOEF5YVBMM1NrWFF5Y3JxWG15S1lseU93d3Bmb1k3NUdPYUpBbURFWXZnRmRMeVN1dzk1RldFRlZ0Z3lLeGF6QkxQVDhsbWJFNlNIclMwaGVWWFNnSFltZXNRWXJJYWpKNXZGWVZzYkwvWTZFWVpwNHh1YUtlUkVtYUNaQm55bDg4R2FrWXpEdWM4Nkk4UENBWEJHVmJuaG1LaWc5cXh5em5CbUFQQkhqcUZrVG1zQjVWc2lKMXlReVpjWmhPU2dURUlBV3lIUVZmeG93d2t3RFdFQTBzdTRtd0lYVVRIUENtb0N0cXJSa2tyZ0tMREk1R1dBVHhzdFBocU9YVlpCQzdUaXNRWUIrTjZrRVpSdExLaFJFUnFPL0ZvTWxnUUU4bnBYd3cvc3hOaWdROXE0cXl1d2xtRVltWm5tUkhzbDlNa2RDUytVVnhMMzJFdTYrTUNMM2JDUUhJUWoxUWFYNGhBNXVwSkx4VUVIaUY0YXV6SzAyNmd4RnpqS0RnN1djakRNbjQ3UlpodHNrK3ZGM0NQMkw1Z0NwNFoybG5RazBIaUZmTVREY3E0b3FYY1owcXV3bnZRSTlWTmdYbGtsaHk2RmNaRE9HK3c2YnB5RC9zTHBIbXcvWXlDQ3IyN1kyK0haUCt5TFlJME1IdUNkaWhBdGdFd25aQ1Y1V3hBaEJLS09YQ3BGYVlvRmlYM0tRaXVRL09ZS2VaUVdRUE9wQVdOeDg1WXZiM3VvNVdOSVRnMEY2bVpJd2lxbzFoUWdKU3htTnQwSldGdEV2Y2hUV2tyUHlpMXdEMUhlOGVtTkVSblZ0MjE3cHE0a01aaDRZRXJvZmhCeWw5NlpLVmRjbU1oSUk1UTBxSTV6OHdXQTRlVjYwQzdPWjRNb3J6VVRLemp1Snk1MmFzT1lFN1J3aVJyVEZGQUxFS0psZVZVeU9qY1dmUkNaTVN3NlNNUVBnREYrN2NtSFBYM2NjL3Z6Wi9jMDNYbUhTRTV3L1NOMnZjdVV2cjZwSGpDZHlxa3lrbExDV2MyenNYY0tHSTduZ1FwQURhM0VhR05xVGdsSklBcC9Bc1FOTlVtUFR0cit4Rmp3Kzh2Z1FGUjFRZ05HeTdHWUNRbFJneTB3U3JwKzhnZUlJRER5c29UcDIyRThjVzBmanNjNE5FRzU0ZlRmbFdyVm5KamRWdER0ZEQ3SkxHYWlFdmQ2eWpKc0I3Smloc0hidkdkT2pLaG1rc3lDVEtOVStISFN2NG1Rd3dHbStUWCt5dFdFak5obUpvb0Z4MWdzMWZGR1Q3dUhua05mSnczS2RJR1ZjbUQwdWhNYmNJaWhNaUJuV2E4bUtTcVdOeXVPQm1WZktIQjJETnNaVHR6V0lrUnJYMVA0S3VLeFNMZmVPcmszeUdXbU8zMVB4a2ZqUk5oekQ1ejRCTHdwbUl6dTFWY2ZQQUgycURRTkhRTmxSdXd4UWMzS0pIcWdGY2VHbHF0MlUzaGx3V0RGQmZIaEcxSWdLOXlTanRPd2JBZ21PaDJNMlVMc2tMRlFKaUYvRk9ibDJtVlRVSVl6Ynh1RXlUTE5YcHFQRlZKQVBTdTVXNE9CbHFwS1JGZHJTYWRwSkNVYzRnaWk3M1NuQU1NQ0d4c0dPNTFLODRhb1hEOGZ6NTNhczdQSElTRnhZVkZCU0ZXaEZuaHRHeFpCbU1nVzhkK2lKZ1UwR0I0SGF1ckZmQUFQTXBuSWZRczJQaVhzYVVBYlVyRktBcWNoVWJ4bDNlaFUzVkF3MWRMc2pFTXRaU0VVaUorTVN4emI4T2pQVUNJUEpkR093eXArS2xYeDJmM3JEKzV6YlUwRS9FVno4K1ZYM2VUbXJDd0UxTE13SFNHUzNlVms4OHNjODQvTWJFZHIwZEw1b2llQWVpSm5iU1pwVG1TQkFpSHlwUS9VbVZvMmxlYzBPc29tZ2N1U3hRUzRpdmlnVUhTcS9Cay9VUnVJWkE4Q2l3UUdtYlpFSWhWbzVvbHl1dDBsc0VCQlhTSlRXeVcwcnQ4UWNUZlN6YmFmUzFsRlR5V2lWY0ZSUkNXN1dQdWtjUWxHWWtyUVA1RXdJNlBrQkFJajE0R21HaGp4QVNFT3VDekVLd2o1ZmpRcktoUWtpNmswYmhUdy9kQTZwUUp2RWc5NVRDVDZVTk0rTFdVcnlIS2ovaGhRblRSekFqT0pDWkdRWWE2bUtmREdKQUJONmZXdFBFZk84a3UyQ0xrRTlNT2NnUTVCcFNWUGtXREVMclk2dHpRT3k1THlaNTVIOXY0L1duOC91LzRyV24ralFoVjZBSU41ZWlCRDd2NG1tRGZlZUViQnYyQlkrYS9EYUdwb3p2NjRlZEs1MzBoandONFltTE1nV2FZcHJrTy9ydUpWVSt1enBaSytleWJtOGR1bXk5aENLWkRvNm5pa2g1VHI2d3FuSkROZ1p1QlQxVFhqVjdHQVhkV0FZd3Z1bzFZREFBeW40dVlsbkRiMUwzbFFWWVZHQy9hSWJOeFlDMkxQWCtZQXhSS1BhUmUwbGhMbEt2OU1EUmg2VTJFVzlVb0FBeHV5cWsyR3MwaHUyWjlaU0ZwTlIwVWNzT0pNV3NXVEF3bGpNUUZON0JSSitxV21reTZXaUFmak9QZ1Q0eEFWbStCb0l4b2JoNDlDVENQdnV3QmNHcHgzcUhMc3VMcS9aMVFnSm10WE5jc0ZhRFh2S2FuQVhWUlhVMHptMVNkQlU1c1hUSTBtU3d6S2poMC90WGIwNm5WREV0dkxvVU1aUkZZaEhyMWVsdmZESzR2QnZVTCtOak93Wmw4bEVBNnBMeG1ISTc5dTJld1Z4K2JKanIzcXZIV3ZFSWFsTDhpQjlHMUJ2dGNicFZRZGZvQUorQWZyN0NrRDN2dzdsbnlOWVl2UTNJZnhMeGUySEVQNFI0SWdUTUxJaFhtdFJpMTZPK0dQOGVDeUw5Y1pLVjVRdkQ0OVZxN2FySERpQzBCUEJYcVVjbkVCQ0E3SUEwRm1NV0FodGwzT2hzMnRsUFZ2SGZLcFhFZ0VhdWpvc0pyb1kwdUUyUFZlVlptQk5FQWpFUzB1WFpBV1hDaHNwNVJyVU10eng5QW9kbUNoT1JPWUdhSTh3Vjl4VlFHQitKRGVwL0ppdmpGaHFUTUNEZlJ6SDNSSVdNejJDSEtnWVRRVzhoVGhPRlFXMHNHVG9Eeit4eWwwTmZhQmNVaytiL2k0UURuN1Vaa2RoTlJIU1l6Z1ZHRGZ6K3ZiYTBVZmhVNlhFREJiKzc5cHpqM0hYcmRSVnFWY0RrTFNlNGg2aUdyRXd3SURBWk1QUFVIcDdaU3A4UllqU1hnSmw4bE43bnR5bG81SDBzNEM4dXFud2ZKZ1dGYXR0cVAyTlZHcGdkbjZkWXZBeXdrcjlrdHEzU3lKbmlBT1JvSjJEQTkxalFmRVRKS1J5UXJZOVk3MTRYbEQ0WXAzZFpMVm11bjZwbFEybHN4VHoxWU1HNnJVaXNDN1NYcDE3dnF1dmkxRUFhVW5tVUFvR3hjNlRzL0xaZVF6SzNsUGNienEzRUNmbUZPL2VGay96UXdyOEtjTGRQMDJCUDJXQSs2NjVKekZBa0JiMWRCZ3FHWGFDdHZkRDlMWXdITkFpR01lSG91YlZYNkRkL1F1MkEzU1laZ1QweHVnRm1lMEE2azBZTDJybkhpU0RIOHBTR0dzbi9WV2RtV1duTWlnc2dEZ3ZTZDJDVzVvV1RReG9FdnBGRUJkR1pPSDUzMlFFTW9EZlZIb2xKcXdrTlZXbjFZZER6a0VwRXYvMXFwemVFWUpqYWRkaEVwblZ0NkZPeTJxM1JJWGNBUm1uOW82STJ5RXNaOXl2NThnVmJRL2tHbGxwaG5ZelNaS2x1NWNoR2dyM0s0WG5BUno1Qm1HNk10azJjTll3aVhaUXlBaThPQ0RndUFwRVB0Uk9jTkRPZlRMUlJPQmMrTHJJRFhpQ0pIMGFkSExnempDWmFyQy9nOHIxWEJnc1pneGpQbTVuOWZpTk96TGVEOEhEaTY5ZlM1VkV5R0U4ejRwMXFRbkIzOVh3ZVJQTElRSFA4aFhiMEoxNk5Sd2pWL0Z0bWtwcGlIMVNLbDMxY1FIdnh5Y216QWg0RldiZzRueW55ZzdFK1ZCaGJEUVB3aStHYjhBSXBrZm9yaklENlExV29heUREaFBjWHRSQWhzSTI2V3Z0cDVkWkEwNFZGY2VqcVg5cGtDcHEwNTdOWmRidTlsZnh2cjNKREtzWGlKd3BhZ0dNMmlWSTJrSks1b1dRaDRmMDhBNW9CYVdwQ1dQQzZBQ25xd2hUVm8vcGhtTUJ3U1VkcGRNMVVUdmNYZlg2Qm9ZdmhDU2VBb1NlYzN6MjNIdFZuWFIxdENwcjRuRDBtRFVjRUVhNzR0WEIxalQ3dDQzNGYvelovYzAzL25FSFFQY1JWUkVXVEt1ZThDSExrclNCMVpCQlZhVWlnSzBBS09SNCtvV2hnRHJkOExGSjdFeGZxQU5abzIvcWNBbkN5cXVpRnIyYWtoSEtSSEx5YWlsUjQycEdqZUZhTUhkb0tCd2RZbDRkSE9GRDdUZ3RKKzljQitIaXRWbU85OFIydC9xcVZNZ1BOV3pPOWJ4OFhnZ1J3Y0x4T0RiQUNwOS9rQ0E0Y2lJNTRpQ3pmLzRZZUpycUF0N0k0bDdVMXhZeUQ2ditYM2dMZ3RLbXFUUUxrU28ySlpFSjhTNjZ6a3daNWxpbm4xajhya000TllsUWg3WWxWaW5pKzVxMzZwMktmdlNhUWZiaHFLcll5SjVkeTJjWElkZmt1RW1CVVB2Q2VNdktYVzNZc0JMWWZ1WTlJSGFPT3V5Z0FqWExRWmx4bjAvSEYzQ0djaWQvOFR6WnUyenc1Rm95SityZ1hjMTRaMVE1d1I2cDZGaktWSXNoZHA4MVNETENaS0dGdlhielF5MXorRXVmbkh5a1IvaDkrcjlSV2xtTjhpZ09pMVBaUnFaM2JhdFVCYzRlTEtpNkwwRTFra0FkTzlBWkNCdTNrOUtOeld0N3E2azNsOHhnbXRXbEhkUXVodU80QVdTOEltSXNqcW0rRGtIa3JGdWdUQmVhMHplYnp2ZlhMWEswY3VvTnEvOVdZbnovN1A1dmlmRTlMOXkzeEFqNFJPUS9EaW1EbUFpVEVWNERJbDYzditSSW1ESDVaZE9STWVTWnJuZWUxOU0vbklEQU5yNERhUUw5cTF1TURBdEw0cWwrZGhqZVA4UnJCbkkyWENDejFpUUxwdHBNa0NERWZuTmVMZXNJeXNKdE85eDJjWXhSTzlITWNvM3F0Y2NxNDM0YWNZUGdZbUlEWkJRR0xNRmRXU2h0ditDRUFUWjdIZW5ZR3BCZDUxOUFhUlI4S3dqRFlRdUZBZmJtZ2xHRzc1TzBxMDQ4cU85eXFYWUdHdXN3eVhSWHgwUkl1NkJHV2ZqYkFxRjhjTVFXa0FUcTQ5ZXVkb1pCc1RQY1BodnVOSlBVR1YrN3RXSHBwemIrSGU3RTk1bmdPU1FEbzJ3cjk3NTBLSVhvUWRkbEZVUmlid2ZrM1dCcHFxcVdvVWt3TUJOWXpVR2xpTkljendCckFNdWdNemxOdEFMUzZwRDFLdVlhMU5KS1VISjViTlpONEQ1S051eXRYc1FiTXBPZzB4K1ltbWllYWI3dnVDVDJwVEl6NEdNSm1HM0U0dFgyUE10NVh1OHpDU2lOaHNyME9nVDBObnZGRVVnQTVzaFVwQjNxMG93YTU2dmlxdlZsRjUzQ1BGc05TaVRNK25ESFVDRXJWSlJuSndxekN1cisxVjJjSGV0b2cvMTZDWm9rbXRxcjBpei9xSXp6L2JQN1RYM25kOVdkSDE5N3BSM01KZGF1N3BYUmFZQUp5NytCWGlrVk1tZnNqQWkxUWZ3VXNtWm9uOWxPUUhHb0tGaTBwM0xRWUhWNFNlM1MxQmFyblhmc3RBdnF3a2YvcWxxcFhpL2tJZFpheHVZTXNTYlhCeDVtMGVHS2lVQUNKa2tVUUZ6MVEzQk9MWk9xL2pnU3BXbi9ITnFXSkF2aUFMUlVsWmtZYW1RRi9kV29SRmpoUEdUUjFMYWhSbGtOSFRXRlpqanpIQWNUbFk1R3JWanBScENDbStSNG03ZTkwdzdWSnh6Rzk5RWtaUTlzRlkvQ3BOU21QV2xaQkxkaGtLcnhvUDM5OEFkaXFub1dLN3laWVBIYW53c0pWT0hIZEJmMUl2WWdad3VuUWEyRC9LMUhVSnZVMjV2R2F5bC9iYnhEWGJoN2FZY1F5RmlZa0tGMk9nRldyWEpqVENOY3E2M1JxdGFuVHZRV1p3dzhvcURtNitEUjlnU3U0U0o4SG1UaG9kWU5RV1lvUGRqR0NaWUxDSUpBb2FreVRTWkttM3FuYlUwVWRtWkE2dEFONmo1ZytSRVFHUk5ISE1VK0lDcG1UNzN0aUdxenRxTzJOOW9wVVhLUFVJYWVkWDR0cVdXOWRaOWY0eDNxS2VyZkNaeVE3MEZnQ0MzUm1GeEN4NFZXLzV5cDFsRndTVWhzSS9iV1NTWWpudFhwaSt5ZGIrV205bTZVekZXVlZSd0xNaG5RanhrL2dISlhHeXlwT3UvQ0hFSklrdS9kYVk4TFRZR3Mxb2JLN0MzcXpKdHdqMXpndmUwbEs1NG5nUVU2bVljVzZ0bFhuU3dkUElmT2tMRnNIdTQvRnpPb0dySk93T21JVTFFTDY2aEs0NlBqQmR0UVFIVVAxTTNTeHVMcm4rU0Jub0VJa2xUQWlzc3FIazAxUFlNVzB1T01DUU9wcG5VZ25vakJZQ05tb1QzZXBmWHNDN0JjRzVWbXpCNzRDQUNHRnB3S3BkeWZod3JhMmxISkM4R0U2bFZqdjQ1WVJwRDFuUmxwMGtvdzNJcnFRZHdxTVBTa1l6WHZvSTVMQkRyV2cyQUdqRFRRRmRXc2lZd2p1M2xzeFdzaUtGRitoYlFoanordG5CZVYzbEVRMjdUcGhSVmRxYXRCd1ZUb2dqMks5aUIxK28vazA2bXlyaGFjUHh3NmVKL2RyeS9NOUx1ZDIvRTNyN09lcUp1R2wzT2Vod0dzVklaWXRoSWNxYk5ocFl5a1V3RkVYSzVxR0F5cWRNRTNwaU5qcUZCN3UvTnFNRGJaQnZ4YThOTkQxN3ZML2NrNk1qajFPRWlCYmpWb1Mrc09uWTlVcElXRzZEMUZpS0IrVkFsRXdwcC9kS2Q4SldZai9PRUpMa2xUbmVuRDBsaW9SM1pKdlcxQkZxK1Qvd0ZLVTZwbGpCanlCQnRFN3N2dnVsV0lhL1JwbThBTllVRld2Z1hkRXBrWjhFQzhJZ2ttNHBVTVc4R3Zyak9NWWFzckNBRFEwU0FBRDMyRWJoektwbDVRUUtBbmowMEVHR014OVZ1eTZPcjF3SGxsSFd1OXdONlZLdTlsSUtYcWErVU53SlJqUGRTVHJ6Nm5yYTBTMVVFS1FPVjVaNS9vUkJEUWdwN2d5Tm9pT1dXbHBvUzJwV2hiSllzT1FqdThicWhkbG5PaFg4dFdSN2pzdkZ3N3M2eno2SVMyQ0Z3MUFlZ3ZxV2FUWDZkUndCS2kwT2ZyaVloWnZmbEpoakF4djFxMk9zTE1WODNtcjlPQ3BBUW1jdG9kSlVUZWJSMW5KS202am5Rd3o2Qld5dWJVZHJpbkFxZG1nSHJ4K0pNbEJac2dWL1dBNExxM2ZQeGxGQ1NjZW9KN2YzUUVaL0tkcWpPWEl6cENVNms2bmdwcmFqU0trbjJXZGZvTDJwaXZzcTVOZzJaYkFnejNQSnBrcStxRkVhUWw2ZFVQU1U0djlVbGovT1BWNFF4Ri9sVGZvamI4MEh1R3hvTVRab1NwSjIrcFlIbDhqV0ZMVFdiYzhiVUVPZkpiSjE2QUVTT0psMXBJY0FaM0UwWGExenFmUWo1Q093ZVVLZ1lwTTljWHM0eGVyVkREVmVFZWduTEk2bGRxMGpHZjVGK1BPZ0NLd1BDQVRYenQxOGhLS09rZFNuMEhVT01lQ1JmZVdOS3dKWkZMeGZmUHRIR0lVZTcwQzBPSEhnS0ZyT09IT29YeHJpbTJBTE5ST0dyM1VSZE1mbTM3T2dCVU00YlBmVzdac0RzNmpEdDFJclBLUG8xSU1uRDV3NHJzcWUwcklwMjViNm8ydk9PLytNMnJmakVHaXZTQSs2K09oYkdzQ3l0d0dmUmdEVUdKRmdPR0xSbDhBSGV5M01qdHc4K2xGMXM2andscDQ0YUlhbFhRM0swNkpzUFVraUo4NUp1SFJBT1BqeDZvaXpNQkh5RzJPb1M5UEF5V3NHdlZwODRuSWFnUU5iNDZqM01rK0hCcnlFMUNmYXB3eTlCRXQ0eFlQUVY0a0lKT1B5cFFGQjBQMVc3VGh2a0JabFI4RWxjV0xvUjlrbGJEcWYwQmxuOUNZMzdpZzd0Q1hiQ1l5SmF0VmxsaEU2RkJKNGVaRXgzekcyQUd5eiswVjJJZW9GMEJrVTB1QnpLQW4yTHdPcGFtazNoNFN2RG82S3duWVkyaFZJT0tnRTBLdEttQVhWdFc2VGNEc1dTY2prc09uaHBKb1VLampvUyt2Z2ZVU0hKRUFoNTZYdlZuRDBDMzZWaWdOSXlLRnNBcXJub2RuUmJzNnRYSTFscUdKMGFYekh0T1NzZVhSeWx1dmhNREtlb2FnVlU2NzhqTXVrWG5VTFlSRXNnaXVKajV5Zm1kazlGT1RJMDR5cXN5czdxeHRSUHNKSlNoQXJWU1YwbUZoZVBXcjYyNTZ0N1BxaG52WkUrYkEvdzFxYnRLblNpaUpwQWN5T2tnSXVIdFZEY0pSeWM1TXNHVG1ZWnlGRTl4RERXdUVRb290S1E2ZGJpdlpmTXBiVlRHOFRyWXIrbzFkSnltVytDbEt2UEFIZ1kwSmprcTRMRXVkVTJUcm9yNU9Lc2lWaHlLZXJEUGZuWldSNHlCUk9LQ3Q4SFMxRlErOVFzSU1objhkajlWcWlQUloxQ0h0YW9YcUFVSlQ5UHZxQ0RSZ0hOV2k0VFNyMkpJNnFFRWFoa2RXVlJQMmEveUErOWNEV1FPN2ZITHZwTzRCRS9TTWJzZG1lV1Z0QnNjTUpVSFlhMFRJLzZDMlZPSFgvRHN3T1c0YjRjQk80bzhOa25RcTlOR05wTmEzbC9mS05tZ00yTUExd0Y4VlZLeExBUnRGYWJGZUNQQkNrK1BMMG1LM3U1ZitYNnQxNE5DV0h5MEI2UnFxUHJ4ZFY5MTNNMm54blh2dDhIeTYrM1Y0TVlBanJReW5LL0RqSkx3RVJ0UTYrZjRxOXJpd05KZnk0ZHBaS1VaTVlYMXRUN0dVY3k4WlZXaGEwb0pCcEFrTGNHaXVnNjVERzhJK3QwTkRFdktmK24zVkRTMTM2b1NFZ1JOYllYUCtUNGNIY2dUMWRHaVhzSlFsQmZJM1hjbTBkVE9OUHgrSGNVNlRuM2Vob3JZcHg2TmlTVGYydWtETUp2T1Ztb2ZVSUN2WDdZQlpWYnBWY0VPVWU2MUo0NEN1TXl4bTE3dE9QaHM5QmI2QkFwODlJT0thV3JDMFdaUGwzZ0YxOEE0Uk5kYThCS282MGRQSFMrTjZBRWxzdE8yVndPeldhRFh1UXR2WDIvSTBVU0dLTlBpaWpvQkgxR0VvS0VlR1E4RThSSHhhcVdhUkJqTGtWd1JQTC9xQmE1Tk94dzRmLzArRFpWMmVsRWxBUmFFRW9QTVU5cFBoT0ZkdVYvZlg3VUEyVDBCVzNqOUppaFNMRTFDRjl1dU9xK2wzeFFROUJ0KzV0YXZwakFVMzJnNkUzdWZMNzBIVWJrTVMwVjB4Szcrby9kVHI1Nm9JOWY4R3hSbFRoRStUUzVTcGU4aFFZcHE0T25SdlYzU1FEMC9yRVpRWHd4eGFnN3VuSW9RSkNwZnFLWDY4N3Nmam42ekNXOWE4QXNvZFpkeUdyUWg5WEVkVytjS2NsVGJzazRHQWE2T1dmU01ZdWhYNmFoelg0cDFmQjBnSU1hQUNJdVNuVG1yWkJySGZNejcyVmZsV2RSdnRJd25kWDNqaWZEcWFtTnFLTUFJVE90d0lpS1ZtTitXL1k2Q2ZHZ3ZhZzk2cFBTTTRINlNGeXlEd05VMDUvQ0NBZERXV1pDc0xkd3VjYUhmemhXQ1RxcW9rNlFoTVZqOGhiaEMrcGFqWHlLaEJoQjFXT2diMkxnVm5Gd3E0azZUcXM0dHBuYXRYWlorcFljNjUvVmRzYTVPQzZKbG1PaGNsVWdyYWFjQ2tHbytlVDJqQXhLMzJzOVgwTG1OZEZqTmdSTm5wcHJ5UThkdzFTeWNWQ01zUERKSmtMWEZxWk54T2pMejE2L01jZ2lFOWZlVklSd2o1dFQ5TjlDdXRoamc2dDE0QUFBQmcybERRMUJKUTBNZ2NISnZabWxzWlFBQWVKeDlrVDFJdzBBY3hWOVRwYUlWQlR1SU9HU29UaFpFUlJ5MUNrV29FR3FGVmgxTUx2MkNKZzFKaW91ajRGcHc4R094NnVEaXJLdURxeUFJZm9BNE9Ub3B1a2lKLzBzS0xXSThPTzdIdTN1UHUzZUFVQzh6emVvWUJ6VGRObE9KdUpqSnJvcWhWNFFnb0I4OUNNak1NdVlrS1FuZjhYV1BBRi92WWp6TC85eWZvMWZOV1F3SWlNU3p6REJ0NGczaTZVM2I0THhQSEdGRldTVStKeDR6NllMRWoxeFhQSDdqWEhCWjRKa1JNNTJhSjQ0UWk0VTJWdHFZRlUyTmVJbzRxbW82NVFzWmoxWE9XNXkxY3BVMTc4bGZHTTdwSzh0Y3B6bU1CQmF4QkFraUZGUlJRaGsyWXJUcXBGaEkwWDdjeHovaytpVnlLZVFxZ1pGakFSVm9rRjAvK0IvODd0YktUMDU0U2VFNDBQbmlPQjhqUUdnWGFOUWM1L3ZZY1JvblFQQVp1TkpiL2tvZG1Qa2t2ZGJTb2tkQTN6WndjZDNTbEQzZ2NnY1lmREprVTNhbElFMGhud2ZleitpYnNzREFMZEM5NXZYVzNNZnBBNUNtcnBJM3dNRWhNRnFnN0hXZmQzZTE5L2J2bVdaL1A4YTdjbUx3MFh4dkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg1QWNDRUI4ZkJWeEh0QUFBSUFCSlJFRlVlTnJzblhsOFZPVzkvOS9QbVMwN2tJV3doTVVFQVJFRXBBVzBJbW9ScFlxMWlGV3cva1RGdXJTaVhjQzYwTnFDWGJEMXV0d3FXbXF4cmREMklyZFhzYlRJOVlwTEN5aWlVdGtERVJJZ2V6S1RXYytjOC96K21ITW1KNU1KaXlJazhMeGZyL01LWkNZemt6Tm5Qdm51WC9IOXIxM0FtcTFWUkgxOUdUYnhadVpkK0FHM3oxdEYwUjJyV0R0dkdGRExpaG5qbUxkaEhJcytXTTcwUEtEOEdhNjQ5RkhLTDEzTTltY24wNHFmRmJQR011L04wU3pZc0p3Yml1enZSeWxmc1lDSEZyL0M1ajBCZklWbk1mN21lN2ltYmdGMy9DN0t6R1ViV1RpZUxrazRIT2JBZ1FQVTFOUlFWMWRIWTJNalRVMU5CQUlCV2xwYUNBYURoTU5od3VFdzBXaVVhRFJLTEJZakZvdWg2enE2cmhPUHg1T0hZUmpKcjRaaFlKcW04OS9DTkUyY2g1VFMvaXFrbE5nSElGSy9Ba2dwaGZYU2sxOVR2aWQyN2RwVlhGQlEwTnZuOHhXN1hLNWlUZE9LTkUwckVFTGtBejJBUENGRUhwQU5aQUdaZ05jNlhJQm1QWjRKR0VETU9zSkFDQWhLS2YyQVgwclpKS1Zza0ZMV0c0WlJwK3Q2ZFNRU3FUbDQ4T0RCa1NOSDFsaVBJeDFIdS84TElWSnZzNzhISUlVUTdiNDZEcWxwR2tJSU5FMUxQYVRMNWNMbGNxRnBHdmEvM1c1MzhxdDllRHdlM0c0M2htSFF2WHQzZkQ0ZlBwK1B6TXhNTWpNenljN09KaWNuaDl6Y1hMcDM3MDZQSGowb0xDeWtaOCtlOU9uVGg4ek16R080NnZ5c216dUptemRQWmRYYStReERrWXA5MGJlZXNoV3pHRHZ2VFVZdjJNRHlWbVg2SElpeWJzNVlibDVWeEIycjFqS3ZpNzA3c1ZpTUF3Y09jT2pRSWVycTZtaG9hS0NwcVFtLzM1OFV0RkFvUkNRU0lSS0pIRkhRbkdMbVBFelRGTGJBcFloWkd5R3p4Y2twVXFtQzVmeC9UVTNONEp5Y25FRnV0N3RNMDdSU0ljUkFJY1FBWUFDUTBVbE9jd1RZSjZYOHhEVE5Dc013OXNaaXNUMk5qWTNsQXdZTTJKMGljUEl3Z3RkT0FHM2hFMEswRVRwTjAyU3F5Rm5DbGhRNTUrRVVONWZMaFdFWTVPWGw0ZlY2OFhxOStIdytNakl5eU1qSUlDc3JLeWx3ZVhsNWRPL2VuZno4ZkFvTEMrblZxeGQ5K3ZUQjYvVWVWdEMycm5pUmw5NWN4WXBWbFF4YjhDckxieWhSS3BZR2R5M1FhbGh0WmZIdjFoUGpMQzRjWDNUY0JHenJNM05aVmpLUCtWTkw4Tm5mTFYvQjRuVUI2RHVWUzd1WXFPM2Z2NTlEaHc1UlcxdExmWDA5alkyTitQMStBb0ZBVXREQzRmQmhCVTNYOWFSMWxpcHE2Y1RNdHNwc1liUC9LS1VSc2piLzM3VnJWODgrZmZxTThIZzhJMXd1MTlsQ2lMT0JzeUQ1Vm5SbU1vREJRb2pCdHBCNHZWNXljbkl3VFRNS2JETk5jMnM4SHQ4YURvYy8zcmx6NThmanhvMnJzeXhGS1JNblN0ci9kNHFjbEZJS0llejdKQVhPTUl5azlXWmJjOVloT2hJNXA3Q1pwb21tYVhnOEhqd2VEMTZ2bDNBNGpNL25JeFFLRVF3R2FXbHBJUkFJNFBmN2FXcHFvckd4a1lhR0JtcHJhK25WcXhmOSt2WHIrTE8wNmdsK3Q3NkljVGMveVpOSzFEcTIySVpjY0QyVEp3NmppRm8ycjF2REIxVlFldk5TVnM0ZlQ5NXhlWXBLVnN5YXhydzMvZlFkTlpHSm8wdkF2NVgxcjJ4Z1Q2d3ZWeTVleVpPVGk3ckV5YXF1cm03bmRqWTNOeWZkVHFlZ1JTS1Jkb0oyQkN0TjJHNW5pcUNKRHF5eWRoYlp0ZGRlNjFxeVpNa1hNekl5dnVCeXVjWUlJYzRGQnA5bTEvUXUwelRmMTNWOXM5L3ZmLy9yWC8vNisrdldyVE1kNHBZVU9TR0VtYzZpUzJmTmFab20wMWh4dUZ5dU5pSW5wU1FyS3l2cG5qb0Z6dXYxSnEyM3pNeE1zckt5a3U1cHQyN2Qycm1ueGNYRlNxRStyYkI5LzZhdnNHNzlOdXJJcGJCc05GTnZuc2M5MDRjZEoxR3pxV1g5aTArd2VOazZOcGRYRWFDUTB2R1R1Zm1lZTdoaGRPY1h0ZWJtWnFxcXFwSldXanEzTTEwY1RkZDFZckZZMGtKTEUwY1R6amhhR3N0TXBJbVgyVmFaK043M3Z1ZDYrT0dITC9ENWZPZHBtbmErRU9JOElFZGQxbTFva1ZLdWo4Zmo2d09Cd01hNzdycHIvVi8rOHBkNEdxRXpuYTZyUStTY2NUbVphc21seE4ra2xKS01qSXgyc1RldjE1c1V1STdpYjA3M3RLaW9pRjY5ZXRHM2IxKzZkZXVtM3NYUEdtTlR0S0xyT3Z2MzcyOWpwVFUxTlNXdHRLT0pvNlZMRHRpQ2xtS2RKZDFNaDBXR1U4aWtsRnBEUThPd25KeWNpMXd1MTRWQ2lJbUF1dXFQOGUrVWFacHY2YnIrZG5WMTlkc0RCdzdjYm9sYk82dk9hZEhaMXB2ejMzYUN3U2x5VWtwOFBwOU1sMXhJdGQ3U3hkOXM2NjE3OSs1dHJMZCsvZnJoOFhqVXU2ZUU3Yk54Nk5BaEtpc3IyeVVIbkc2bkxXcTJsV1piYUVjcmFJWmhKTjFNMHpRN0ZMTlFLSFN4MSt1ZHBHbmFKR0NFZW5lT0svK094K092Ky8zK053b0xDOThta2NVMVU4V3VJNUd6a3cyMnV3cmc5WHFURmx4SEFtZGJjTGIxWm91YjB6MU5UUzZVbEpUUXExY3Y5WTRwWVR0MmdzRWcrL2J0NDhDQkExUlhWNmRORGh5cGZDUEY3UlFwaVFHbmRTWlNMTFNrbUlYRDRTbGVyM2VLRUdJSzBGZTlNeWVFS3NNdy9oRUlCTmJtNStldnBiVmNKYTNJT1dOeXRxc0s0SGE3cGJNOHhCYTVJMWx2cWU1cGJtNHVlWGw1OU9qUmc0S0NBb3FMaStuVHB3LzkrL2NuT3p0YnZWdEsySTZPL2Z2M0o2MDBaeXd0WFhJZ05aYVd4a283a3FDSjFKaFpNQmk4eE9melhTV0V1RktKV2FjUXVkVk5UVTJyaTRxS2JFdXVqY2lsV25IMnZ4M3VhVHVCYzd2ZEhRcWMwM3BMVFM2a3h0NUtTa29Pa3oxVktHRURBb0VBbjN6eUNWVlZWVzJzdE9ibTVqWTFhVWRaWkN0czE5TjJOdzlqbldtTmpZM0RjM0p5dnFacDJ0V2dhaTA3S2R0aXNkZ3JCdzRjK0Z0cGFlbFdoOEFaRHBGenh1YmFXSEYyOXRRV09VdllaRHIzTk5WNmM5YSsyWmxUMjNycjI3Y3ZBd1lNSURjM1Y3MURTdGphVzJsMmdpQmR4ck9qRWc1YjFOSUptck5Md0Nsb3RwaXRXclVxWTlLa1NkZTYzZTdwUW9qTDFHWFlkVEJOYzAwb0ZIcjVxYWVlZXVYQkJ4OE1BL0dPUkM2ZHdEbHI0TklKbkMxdUhaV0dwR1pPN2NTQ3N0NlVzQUVRQ29YWXUzZHZ1d1NCYmFXMXRMUWtZMmxINkJ3NG5LQUpwOXZaMU5RMElqczcrenBOMDY0RDFKWFl4ZjhtNnJyKzB2NzkrLzg2YU5DZ2JRNVgxVWgxVlIwQ0o0OGtjQjFsVHUzWVcwNU9UdEo2UzAwc25ISEdHV1JsWmFsMzVuUVZ0b01IRHlaZHo1cWFtallKZ2lQVnBUbEVMYTJnV1FXMWJkek5VQ2cweGV2MXpoQkNYS3N1dVZQU2lsdloxTlQwVW1GaDRldFN5cmdRd2lsd2h0T0NzNFhPR1lkTEZiaU9ZbS9wNnQ1czE3Um56NTVKMTdSMzc5Nm4vWHZpUHAxK1djTXdLQzh2WjkrK2ZSdzhlRERaRXRYYzNJemY3eWNZRENaRkxScU5wdTBlc0FYTkVVZExLMmczM25pamE4bVNKVGU2M2U0YmdRdlV4Ly9VUmRPMGFmbjUrZE5pc2RnN08zZnUvUE10dDl6eTBzYU5HK09XbTJwSUtkdGxWZzNEa0tacFNrM1Q3RmlzZEpZRXhlTng2U3dYc2owRVp5akUvcU5yL3hFT2hVTEpkcTJ5c2pKY0xwY1N0bE9kcHFZbTl1eloweWJyNld5Sk9sS3hiUnEzVXppNkJKS0N0bW5UcHR3UkkwYk1jcmxjTjZGcXprNHY5MGVJTDJWblozL3BYLy82MXpjamtjanlaY3VXL2VXMjIyN3pXOVpidkNPQmsxSktSNkcyVStCa2FndWVzOWY0U0FKWFdscEs5KzdkbFN0NnFsSlpXVWxGUlFXVmxaVnBhOVBTRmRzZXhrcExHMFBidG0xYmo3S3lzbHRjTHRjdHdDRDFNVC85TUF5RHlzcEtCZ3dZWUgrclBCS0ovT0dWVjE3NTgzWFhYZGRvVzNEMlljWGd6SFF4T0dmZG05TTlUUzBMc1l0NjA5VzhsWlNVTUhEZ1FFcEtTcFN3blVwSUtkbTVjeWVmZlBKSnN1RDJjRm5QMUE2Q0R0eE9POHVwU1NuRmh4OSttSGZXV1dmTmRybGNzNEV5OWZGV3d1WVFOcHM5NFhENDkzLzYwNStXMzNycnJjMUhFRGpUMFhTZjJya2cwM1VzZEpRMXRRdDZCd3dZd09EQmc3RzZKWlN3ZFdVQ2dRQzdkKzlPeHROcWFtcVNXVTlud1cwSHJxZEliWVZLc2RLMCtmUG51K2JQbi85Tmw4djFUVlQ5MlFsOFl3OUI5UTVvcUlCd1UrSUF5T3llT1BJSFF2RVF5TzNWbVlUTi9rTzdMUlFLdmZEMXIzOTkyZXJWcTJPV3dOa2laem9Femt5MTNwd0M1L0Y0WkVmOXBzNXBJZm41K2ZUczJaUGV2WHZUdjM5L0JnMGFkTnJVdkoyU3dsWmRYVTE1ZVRuNzkrL240TUdEN1VvNVV1TnB6b0JzT3JmVFRnellXYzVJSkhLOXgrTzVFeGlubE9ZRTBWQUJ1OWNsdmg0TitRTmgwTVRFMTA0aWJBNkIyK2ozKzVkMjc5NzlGU0dFbmlKdzdWeFVSd2VEVExYZVVtdmVVZ3Q2N1pLUTNyMTcwNjlmUDhyS3lrNkxjVWluWFBLZ29xS2lUWkxBbnB2V1VUek5hYVhaZ1ZtbjIrbElER2loVU9nU3I5ZDdsOVh5cERoUmJQa3JWSDE0N0VLNHNRTDZqb0lSWCsxYzFvUVFZN3QxNnpiV01Jd3JhMnBxbHZidTNmdWZUb0ZMVFRMWUNRWnJXSUpNbWQ5bi8vK29rZ3lSU0lSd09NekFnUU9Wc0hXVmVOcU9IVHZZczJkUHNqWEtIalBVVVR5dEE5ZXpuZHZaME5Bd09DOHY3MXRDaUR1VXlweEE0aEhZOEVMQy9meTBWSDJRY0ZmUHZRN2NHWjNxMTlNMDdTdTlldlg2U2l3V1cvTHh4eC8vZnZUbzBlVU9nYlBMUkF6QU5FM1R0UGRiMk5sVHUyWFBLVzZwSW1jbndGTEZMUktKTUdUSWtGTTI3blpLQ0ZzNEhHYkhqaDFVVkZTMDZmZTA2OU02aXFlbFdtbVdxQ1hkemxtelpybWVlKzY1dTEwdTF4eEF6V0UrMFd4WUNvSHE0K1BHdnY5bkdIdFRwL3cxUFI3UDdGR2pSazBKQm9QUFRwZ3c0ZmViTjIrT0FicGx2V20yaXlxbE5PMXg1bFlDU3pxSEs2UUtYTHBTRVdmWXhSYTNZMXNrbzRUdGhORFkyTWpPblR1cHFLaElEb1IwVHVWSVY1OW0vUlZ6aXByVFN0T2tsQ0lVQ2szMitYejNBbDlXQ25PUzNNL2pJV3BPY2R2eVA1M09MWFhRTnlzcjZ5ZnZ2dnZ1eFRVMU5VdDY5Kzc5bGhBaTVuQlBCYTA5cVRMRmduTUtuRXkzRkNpZGUycFhBUXdlUEpnZVBYcWNZc0xtWDhHTVVmUFlrSHNOdi92d1VTWjJvUmRmWFYzZHBwekRibUpQVjNUcktPVVF0bm1leGtyVEtpc3JleFVYRjkrcmFkcDNsTHFjSkJvcWpqMm1kclJ1YWQrUkp6U2g4Q25jMDR0NzllcDFjVFFhL2ZYcnI3Lyt1eWxUcGh5eTNGUE5LWENKWFRUQzdNaDZjN2lxSEkyYk9uanc0Rk1xcWRCbExiYjkrL2V6YTljdVB2bmtrMlE1aDdPVElGMlNJTlZLTXd6RGFhVnBrVWhrdXNmaitRNHdScW5MU1dUWEc2My8xZy94MEkvL3diSUdHRGZqNnl5ZmtBa1lWSDY0aVlkZTNjdjZ5Z2hrWmpONjVBam1UUi9DYUtzSFBMcC9Od3RXYk9HVnZYNENaRkE2dUQ5M1RCL0w5TjNyWU96QVRuOEt2Rjd2dHk2NzdMTHo2K3Zybnkwb0tGZ3RoSEJaN3FudWlMMEpaL3d0amNCMUdIdEx0ZUJzZ2V2eVUwTDg1YXg3WlJudVNhUG1zUWNnOEJJM2w2NWo1a3NiV1ZpMmxSY1hQTVRpTlZ1cGl2cm9PMndpTjg5ZnlDMmo4enJGYXk4dkwyZjM3dDFKVWJQTE9WS2IyRHNTTldmR1UwcXBWVmRYOXlzb0tQaXVFT0l1cFNvbm1jQWhhUHdrK2QrdHIyOWtSVVBLdGZ2eHY1anhiRGxWZUNnZFdJeXZvWllONjljem94N1dmbWNJSmMxN21mUDRPN3dXaHNMaVlvYlJ6SWF0TzVuM2VJeThIN3FZZk5haGsxTG5kcXdJSVVibjUrY3Zqc1ZpdjNubm5YZWV2L2ppaXl1RkVKckRQWTFqdGZMWmswVHN6S2xUM0p4Yno1ekxnK3pZc25PNFF5d1dvNnlzSzlhWmw3Tml6aHdXcmRtRzM1ZUxlK2JNQy9uZHNqZXA4cFp5NlEzWGNHbVJuM1VQeldMK0tqOTlMNXpPSFNYbHZMSnNGUXRuK2NsYnU1VHBKM21wMVBidDI1T0Z0ODZlejhOa1BvV3oxOU5SbDZaSktVVWtFcG5tOFhpK0IzeEJxVXBuaUM5c2IvMTMvUTRXdk5wSUxPVXVXN2ZXRXMzTDVzSXJMbWZwaEJ3STdXYldEOTdoemIzN1dCOGF3dVNLZld6MVpOQjMyRmhXM25vR1JiVHcvS0tYV0ZoUnhhcTlNTG0rb2tzSW00M0g0N2x0NHNTSlkycHJheGNYRlJXdHNXSnZtaVZxdHZWR3duQ1RxZGFiU0luRGtlcWlPamVuMlFJM2RPalFMbmJoUktIb0d1WXZuOHJrdkJXNGI1bDNKYTh0ZTVNcTMyaG16citUaVpUelRIa2RVTXJVZWZPWk55ektwV2N0WnRXZVhQTDhPTFlybjFpa2xIejg4Y2ZzM3IyN3pjSmllMnVVUFprakpVbVFLbXJKZU5yMjdkdTdsNVdWZlYvVHRIbEtUVG9SOVJYV1AyS3MrZXNIYktBSDR3YTJzS0ZDVDk1bC9MVmZZMk82QVZBZUwza2V5QnM1a2JkR3BudHdGM2tlU3p3SGp1OVNwMFVJY1c1aFllRnprVWpraVQvKzhZKy9uVDE3ZHFObHZlbTBqc2d5YkVGenh0N3NRYWRPY1V0ZCs1Z1F1U2hORmUveTV5ZjJVampyUDNsczV0bGRxQnhrR05QbkQ3T050M1F4dGpJbVhqbUtKN1o5d09Jcng3Sm0xSGpHWDNvTk0rK1p6TENUNUlucXVzN0hIMytjN0NaSUxieE5MZWV3MHRtcFdjOWtnaUFZREY3bzgvbm1DaUVtS3lYcFpGZ3RVdEc5bTFpd0tVTGZDeVp5YzN4ZEcyR3pxZjF3RXd2ZWE2WjJieFViNGhsY2VPMG9KanMzMUIzYXpVT3ZWbEZaZjRqMUZScDl4NHpsanNGQVBOcGxUNC9QNTd2bjVwdHZQbnZTcEVuUERodzQ4RjByOWhhelhGTWhoREFTaGxwcjNNM3BtcVpNRWtrSVd6eEMzZDR0dkw1L1B3ZjhKdTZNWGt5ZHZJTVBQNHh6OXRsbmQ4bTFmMm1UQjhQdVhNN2EwU3RZdHV3MTFxMWZ4N0pIWDJQWjc2NWs4ZG9ubVh5Q3hTMFNpYVFWTmJ2d050MCtBb2VsbHVwNmFyRlk3SGFYeTNVZjBFZXBTQ2NrMGd3MDgvenkzVlJsOXVPSnEzdVJ0eUw5WGYxNzk3RnFrei94bjd4dURDdE9xY2Z5MTdKbVV3VjFBTzVzaHAzUkxiRUkvTE1VL0hZQ05FMmJOR0RBZ0dGK3YvOC84L0x5L2d4b2xudWF0Tnh3SkJac2o4ZXkzb1Rsc21LYVVScXJ5cWx0Q3FPajRjM3J5YUJ6aHpQMjNITTRTNnRnNTg2RXEzcjIyV2VUa1pIUnRjNFJnTS95VWFOUndMK2VaK2JNWmRGcmVjeDhjaW12Ymx6TFE2T0F1bldzMm54aVgxd3dHT1Nqano0NmJKMWFTbHhOeEdJeFlmZDhXbWEyWnBxbVZsVlYxU2NlanovbWNybWVVS0xXdWFuOTEwWVdWOEs0cThjeTlUQ1Ryc3V1L2hwN252NEdHKzQ5aTdOQzFTeCs5bCtzQ1RudU1QZzhOajU5RTlzV1hNdzFCVUZlVy9FNmkvWWFwOHBwNnBPYm0vdlRhRFI2LzZwVnEwcWtsQm5XUjlrTGVLU1VMaW1sWmwvL1ZneE4yTjVNSkJJUjRXQXoxUTBob3FZZ28rZ01SbzRZekJrRkdlak5OUnc0Y0lDS2lncDI3dHpKUng5OVJEQVk3R0lXbTYrSXZGd2dzSVlGMDJaUnZuQWhlYlZyV0xWcUhWc3JQMkJ5U1MzcnlnRnZHYU5PWUxJa0VBaTBzZFNjTFZLMm9EbkhkOXV1cDFXZjFpYnJHUXdHSi9oOHZ2dUVFSmNxMmVqa1pCaXMrTDhEQklBTnkxK2lkSG5yVFJ1Vy80VUorNy9DcTVkNXFkVmQ1QlhrVU9SeFVUUjRHTmVVYkdOaFJTMGJxbUZpZmd1VllRTmZYamRLc3NCWDBKK1p3N0o1cVRySTVwMHRjTTdnVStaMGViM2UyVk9tVENuZHUzZnZNMmVjY2NaN1Z0ek5UaXdJSVlSaG1xWnBMM2h1RzNkemlXN2RNbVZMTUVLNGVqY2JhejhodDdBdlpXY09ZcWpEWGJXUHM4OCt1OHRNQjNIam04Zzk4NjlrNjRJMTdDa3ZweXBhd3AxUExzWC8wQUordCs1M0xJNTVLVHpyVXU2WXQ1QmJUbEJUVVhOemMxTFU3R2IyK3ZyNmR1N25ZVEtmeVhoYU5CcjlodHZ0dmg4MS9MRnJrTm1Uc2pQN2NLRWo1RkZiZVlodGZwUGM0bUxHbnlGWXMveGw1bTJGY1RPK3h2SUpPUkJxNElNR0FDK0ZtVkM1L25VdS9aOUdjc2RjekZ1MzlpZVBNT1hWWVVBakw4L2I2WHBHajROcmVzbUFBUU1HTkRRMFBKV2ZuLytLNVpxS0ZOY1VaOXpORmptUEoxTjBMK3dtUGVnRUEzNmFhei9oZzlvcWF1T1hjcUhWMmVEc1VUMzc3TFBwMXExYjE0aXhsVTEva3JYVG5kOGV6NTNQdnNxZEorRUZOVFUxZldwUmN5UUp0RnR1dWNXMWVQSGlIMmlhOWlDbjJXNkhMazNCY0NaZmV5bk9yTTc2My8rWm1lc2pETHRrSW8rZWwwbXRweStGVy9lellmbkxUSG92SDE5MUxkdjhrSHZtRUtiMmdoTFBFTWF0V2MrR1RldVlWRjFFbWQ3TWhtb1Q4dm94YzFnbUZBODk1VTZiRUtLc1I0OGV2d3lGUW4zR2p4Ky81S09QUHRJYzFwdHVpVmt5N2hhUHg5dGtUS1hYSzNNS2VsUFlHMkxCSU81b000Mk55YktSTnNmWlo1L2Q2VWVPZDZvUGZHTmo0eEZGTFozN21ab2tPSFRvVUwrQ2dvTDdoUkN6bFZKME1ZcUhKdWF1SFlhaUwweGtPWnRZc0dZdjYzZFZRMlllNHk0WXdmeXJCeVVtRlJRTTRkbDdYU3hhc1lVMWU2dlpRQVpuRFR1TE82YVBZV28zb0dEZ3FYcjIzSm1abWZQZWUrKzk0dGRmZi8wM2wxOStlYVZ0dVZuV1c5eStZN3FrUXVLTGo4emNBakpsQzgzTjZZWE5GcmZPM0YvYWFRWk5Pa1hOem43YW91YU1xYVd4MU96V0tNMDBUUkVJQkw2UW1abjVnSnFaMW9YWnNMUk45OEZ4cGNjQUdEZnJjM25vb3gwMGVTSXdER1AxenAwN0Z3OGJObXdMRUxXeXBqcVFYQStvYVpvVVFwaldkRjVwN1ZTUXpwSGo5a1RlN3QyN1UxQlFRSzlldlpJREt6dXp1SFVLaTgzcGZxYUsydUhjVDZ2Zk0rbCtoc1BoeTd4ZTc0T295YlpkbXpNdmdvMHZmSDZQZlJyZ2NybW1EQjA2dEtDeXN2THBrcEtTdDZ4RWdtMjVJWVRBbVZTd2cyNnRsbHN5RnNmaGpKL2h3NGQzU3JmMHBBdWJNMUhnRkxYR3hzYTBFenBTM00ra3FFV2owUmx1dC90QjRFeWxERjJjL0lHSktSekhlOEpISjUvczhUbkUzY2IyNmRNbnY2NnU3cW5Dd3NLL1NTbWRTUVVkUjFMQklXRFNjbDNicVZrNmdSTkNNSHo0OEU2WFVEaXB3dVlzNlhERzFHeFJPNXo3NlJTMVdDeDJoOHZsZW9pVDF2Q2xPTzZNdUJyOGg0N2ZUTFllQXhLUGVab2hoQmhVVUZEd1VGTlRVMDczN3QzL3kyRzV0UWxGMmVJV2o4ZlRpbHRIb21ZZkkwYU02RlNsSUNkTjJJTEJZSWVKZ2pSMWFzSzU0OU1wYXJxdXo5VTA3U0VnUTZuQktjYTRXY2RuaW02UEFURG0rdFA1VEJaMTY5WnRma3RMUzNaT1RzN3ZuVzZwVTdUU2ladWRYRWdWdEZSaDB6U05FU05Ha0oyZDNTbCtZZTFrUEttelRlb29zcC9DdVVIS2pxazkvZlRUSGwzWGY2aHAya0lsYXFjbzdnejQwaDBKRi9LenVKL2pacDF5dFd1ZmdvenM3T3dIUXFIUTdWZGVlV1cybzFQQkE3aXRUZ1dYYVpyQ01Bemg2RklnR28wSysvTVlEQWJ4Ky8wME5UVlJYMS9Qb1VPSHFLeXNwTHk4bkk4Ly9waElKTklwZmxuWHd3OC9mRUtmVU5kMS92M3ZmN2NaUGVTMDFGSmlhc0xleUc0bkNxU1U0dDEzMzgzNXlsZSs4aU5OMDM2Z1B2Mm5BY1ZERTdHeFVKUFZTM3FVVnRvNVY1L1FLUjVTU3Z4K2Y2ZXU4Zko0UE9kTm16WU5sOHUxZGQyNmRmRU9wbmZJTklrRGtlcVNPcHJzMnh4RlJVVzRYSzdUUjlpa2xHelpzcVdOcUtYYkpKVTZkc2dwYWp0MjdPZ3hkT2pRSDJxYTlsMzFpVCtOeU93T0phTVNJdWZMU1RoS25neUlXVDJNdWNXUVhaZ1FzaUdUb1BTQ3hNK2NRTHFDc0FHNDNlNng1NTkvdmlndUx0Nyt0Ny85VFhkbVJqc1NONmNBT3V2WlVnWE8vbHBjWEh4U1J4NmQwQmhiUjcyZlR2ZXpvNUlPS2FVb0x5OHY2TisvLzROQ2lMdlZKLzAwSmJkWDRsQU5jcDhKbjg5MysyMjMzYVo1dmQ0bHQ5OStleTIweHM0Y1ZwbGhHSWJ0YWJWSktEamphODQ0bTh2bHd0NWFQM3o0OEZOZjJPekp0eDJOSGpwTThXM1NVbE9pcGxBY1YzRzc3YWFiYmlJYWpUNDNaODZjQnFkbGxrN2NjR1JMT3hLMlZIRTdXWk40VDRncldsNWVudHdtZGZEZ3dRN0hlYWNyNmJCamFwYjdPVWRkam9yT1NsZHhSVlBjMGpFalI0NlVRb2gvdi9ubW00WmxqYlZ6UzFQRXJsMjh6WGtPbk82cHkrVWlQei8vMUxQWTl1L2ZmOVF4dFhSMWFrOC8vYlJuNU1pUkQycWFkby82NkNnVXg1K01qSXpiSDNqZ2dmaW1UWnVlWGIxNk5la3NOOU0wRFdndEJiSEtSZVRoM0ZHWHk0WFZwblhDdDE5OXJzSldYVjJkWEpHWHVuamxjREUxWjUzYTdObXpIOVEwN2Z2cThsTW9Qajh5TXpPL3RXTEZpbGgyZHZadmJVRnppSnZFV3RKcythYkptSnNRUWpyZFVPZGh1Nk8ydUozSXZhV2ZtN0RaRzlxZDdtZEg0N3hUWTJvcHhiY1Bxc3RPb2ZqOHljcksrazRnRUlqazV1YitrYlpaVXBsYXhHdC9YeVNRSGNYWmJLdk5GcmNUMVRUL3VRaGJPQnh1STJyMjRwWG01dWJEdXAvV0tPOWttNVRWVWFCUUtFNFFPVGs1MzJsc2JBejE2TkZqcFdXMVNWSmliSmE0T1MwMklZU1F0cWc1QmM2MjJHeGhPK2VjYzhqTXpPeDZ3aWFsWk1lT0hlMTJGS1JhYXRZMktlY1NZK3lGSzlGb2RJYlYrNms2Q2hTS0UwdEc5KzdkNTFSWFZ3ZUxpNHYvTGhQOVYyMCszL1pYZTJDbFphMjFzZHljRnB2VEpmWDVmSXdjT2ZKenIzRTc3c0xtRkxYVTdLZTk5N09qeWJlbWFZcHdPSHlaTmFWRE5iUXJGQ2VIb3FLaW9ydjI3dDNyUCtPTU0vNlpZcm5aOFRhNzlBT0hvQWxOMDJSSGNUWmIyREl5TWo3M01wRGpLbXdWRlJYczJiT0hxcXFxcEtXVzZuNDZ1Z3BJS2V2UUFvSEFGNng1YW1yMGtFSnhFaEZDRE9yZnYvL3RtemR2YmhvOWV2VEhsdVdXbk5zbWhHaGp0WkdTSVUyTnM3bmRidHh1TjE2dkY2L1hTMFpHQmdNSER1ejh3bFpkWFowVXRlcnE2cVNvMmYyZkR2ZXpUYXVVYzV4M1ptYm1BNmdoa1FwRnAwRFR0QytPR0RGaTlzcVZLeCtkTm0xYWxVUGNwR04yRzZacG1uYW1OSjNWWnNmYW5CbFNlMEx2NTVVcFBTN0NGZ2dFa3BNNnFxdXIyelMxTzJOcTZjbzZwSlRpbGx0dWNWazdDdFE0YjRXaUUrRnl1UzYvNG9vcmFvY09IZnJZOXUzYnpSUnhzek9uMHQ0cWI0dWJNNWxnVzJ6MlY2L1htM1JKczdLeVBwYzVicDlaMktTVTdWcWxuSlphdXFiMjFBem80c1dMZjZBV3J5Z1VuUk92MTN2anUrKytXNU9ibS90N1M5RE1GSEdUcVpsU1RkUGFXRzdwU2o5OFBoK1ptWm1NR2pYcXVDY1RQck93N2R5NWszMzc5aVhMT281bVRWNUtCdlFicWxaTm9lamM1T1RrM0ZOZFhYMm91TGo0NzRDWnhpMXRFM096eWo2UzRuYTRXRnRXVmhaRGhnenBQTUpXV1ZuWnJsYXRnMVlwMG1WQWc4SGdCR3Vac2RyN3FWQjBidHhGUlVWM2JOMjY5ZEN3WWNQZXQ2d3oyMHBybHltTngrT3lvNExkZExHMjdPeHNTa3FPMzBiMlR5MG9UVTFOYVd2Vk9oQTFrYktsWFR0dzRFQWZuODkzSDJvQWpVTFJKUkJDbEEwZVBQaVdGMTk4OGNBTk45eHd3T0dTSmkyNGxQcTJwRXVhVHRpYzRwYVZsVVZPVHM1eEd5RGcvalQ3R3czVFpNKy90MUs1ZXcvVis2dG9PRlJEYzMwOWdhWm1RdjRBa1dDSVNDaEVOQkpCajhTRXJzZUk2M0ZoR3FhUU1pRnNQVDNoZWFKcDM2WHFjbEdjbkUrcEJpNFBhSjdFd0VwdnRqb25SNEhMNWJwNDJyUnBGY0JUdE1iYlROSWtFMUxGelpsSWNMcWt6a1RDeUpFamo4djAzVTlsc1pYdi9ZVEtxb05VMTlUUjBOQklzOTlQUzB1UVVDaE1PQkloRW8wU2pjWFFZN3JRNDNIaWNTTXhObGhLSVNWYXJIcjM3VUtJdTlSbG9qaHBTQlBpVVNBS3NSWUlOVUpHTG1UazJkNlVvZ015TWpKdXJxK3ZyeWdvS1BncllIU1VUQkJDU0R2ZWxtcTVPZDFScDdEbDVPUXdlUERnRXk5c0I2dHIyRmRaeGFIcVd1b2JHbWxxOWhNSXRCQU1oUWlGSTBRaVVhTFJHSHBNSnlGcWNSSXhOU21rbENKWXRlMUNsOHQxbjdvOEZKMUw2QXdJTjRFZWhweWVDWXRPMFNINStmbDNiTjI2dGNLS3Q1a3BoNVJTeW9TMkNlTHhlREk3R28xRzZVamNNak16aytVZnZYdjNQbkhDRmdxRitXUi9KUWNQMVZCYlgwOWpVek1vTWpJQkFBQWdBRWxFUVZUK1FBc3RTVkdMRUkzRmlPa3g5SGhjNlBFNGh0RTZnbWo3aHYvdDd2UDU1Z0o5MUtXaDZKVEVvK0EvbUJBM2wrZHpmN3AxNjlaMW1sLzlvb3N1T3BhNzl3WnVBdmFTaUxHMUVUWkFXaVZkcG1FWXhPTnhHWXZGUkRRYWxmYTJxNWFXbHVTMnErcnFhcXFxcXFpb3FHRG56cDJVbFpXUmtmSHBXOFdQU2RqMjd0dFAxY0ZxYXV0c1VRdlFFblJZYXJFWXNaaU9yc2VGcnNjeERCTkRXaTRvaUxJekJueGZ3R1QxNlZGMGFzdzRoT29UdXhWT0FHVm5mcmEreWZKZDJ3SHc5ZjNpcDM2TWFOVzdBRlNkK2VTeC9OZ2xZVE8yYlZENTkzOUxZcXU4Z1oxSUFDa1FVa2dwTUUxSlhFTFVnR0JjYUNJbU5XSm9Jb0pMaEhDSklHNlhIN2VyQ1krbkRvLzNFQWNYWlhIR0dXZHc1bTBmZmFyZjU2anQ3ZjFWQjZpc09raE5iUjMxalUwMCt3TUVXb0tFd21FaTRVUmNMUmFMRWROMWREMU8zREF3REZOSU14RlhpeHpjT1UzVHRIbnFVNlBvTXBiYjBhNzZPNDNKMUx6ZmVuZmdqeWVRbU1UakE3eVd3ZVNTU0pjRVRTS0ZpUlFHa2pnbU9nWXg0a1JsbklqVUNjc29RVE5Ld0F6VGFBU3BpL3VwcmEybHBxYm1VNyt1b3hLMlFFc0wreXNQY0tpbWx2cjZScHFiL1FSYVdoTEpBcWVvV2RaYXNsN055b0JXNzNpdm44ZmovcDY2REJSZGluQnpJc21nT0x4UDZ1ays2OW1pV2IwN0VEZE5nbVk2eEUyWHBraUtHem9ScVJPU1VWck1DSDRqVEdNOG1IUlBXNHhQdDRENXFGelJUL1pWY2FDNmhycjZCaHFiRTNHMVlEQk15SkVCalNXU0JiYW9ZWm9TS2FXUVNLMGd2OGQzZ1Mrb1MrQVU4dGFhWXdTZTIwSGtYOVVZVmFFdThacGRmYlBKT0s4bnVkOGNndGJOZXhRL0lSTjdTMzI1SiswMWYvTFhKM21HYS9uNTFiMVA5dG5EOS9PYktMaWlqc1l4THhPT3RkNGlFS012elJ2eGRXcjV0ZTJTU2pDRU01a0Ewa1JLQXhNQmFOSVFMaUdrUzJxNGhZWmJ1dkNZVWJ6Q2pjOXdvelUzazVtWlNhVWVZYWpyMkVQeVI3VFk5bGNkcE9yZ0lXcnI2bW13a2dXSkRLaXpzVjF2NjRKYUdkQ0VDN3BydWlydE9QWHdQL0V4d1JWN3U0eW9BUmhWUVlJcjl1Si80dU9qL3lFOXJON3NvOENuZVc1K2IrQlBKamdzTmkvZ0Fkd1NxUUdhQkdGQ1dwYzBLblhDVXJkYzBnaCt2NSttcGlZTzZVMGMwQnVQcjhVV0RJYW9QSENRNnRvNkdocWFrdlZxd1pBdGFqR2lscWpGNDNFUk42d3NxT1dDVm42OHZwZkg0LzZPZXR0UFBTTC9xdW15cnoyNnFmN283eHlQZHNuZnNmb2ZqL0RTM21JSzNINWFHZ080aDAxa2NHQUxlNXI4TkllTEdmK05temkzNlBobWZYdDV1dDBFZkp6T2FwTklDVUthU0ZNQUJsTEdwU2swWVVnM2NhSm91SEVSbGk2OHBoc1JETkxjM0V5dEhpVkh5NkM3SzRzc3pYZDhMTFpFdlZwTnNsN05GclZFRVc0c1VZU2JHQmhwdWFBbXBqUnRGMVFVRnhYZEM0eFJNbkJxSVFNNlprTzB5NzUrb3phTUdkQ1A4cGZ0dWpHMmVPR1grT3JzNzNMcnR5OG5ZK05hNnMrOWd4dnVlSkNaWS8yOHZhN2l1RCtmUUl3Q3BsdFdtdy93U2l2V1ptbU5JR0cxWVZ0dGNXbUlHQVl4YVJDVk9oRVpJeVNqaEVJaFdscGFhSXdIcVkzN3FZbzFIQjlYOUZCMUxRY09WVk5iMTVBbzdXaHBvU1VZSWh3SkU3V0tjR05KYTgyd3V3dnNMS2dJSGRneFdkT0VzdFpPUVVTdXAydi9Bb1pFNitxL3d4SHhrSjJibTFnYWtwbFBkazR4L2ZzbGZ1ZWMzRXppa2MvTnhmN21ILy80eDNQVHVLUjJsbFNrWmtuakdPakVpVWtyVTJycVJDSVJRcUVRVFVhSStuaUFRM296TmJyL3N3bWJIbzliTG1nOURWWnB4eWZ2ck9LdmY5L0EzdVlva1ZnMFVZU3I2OFNqQWRIVTdDZXN0M1lYekpweGpjdm45ZDZiN3JFMy8vUjZTcys3bHhjUHBOeFE5ekl6enB2R1ErK2xjUjMrN3llTXZXa1o1VXBUVGlPeXlQajFMZlRaK1RXeUN4MFg3SVR6eUY5OUM3MTMzazN2ZDY2bnh6Zjd0N21JajNTNzR2T25UNTgrTXdlSTdoa09xODFqaGIwMGFjWGFaRUxZRXVMV0prc2FKMEpDMk1MaGNLSUVKQjZpTGg3Z29ONUlYQnFmWHRpU3BSME5qVFQ1L2JRRWcwUjBBMHcvRmVYVmhHSzZuUVVsYmlSTWRkbGFpS3M5OS9qUDd3YSszT0d6eGo1azBhOWVwL2FvWG1JTGExWjlRTW5VU3loVDE4enBZeFZPbWtDM1MxTWEwMHZIa1AvMENGd2IvMG45VlgrazdwZDF1Tysrbk81Znl6cTYyeFVuQkUzVEpxNCs0d2RUSFZhYnAxWGNwSXVrdUxXNnBEcEc0cEJ4WWxJbkdvMFNpVVFJR2hIOFJvakdlSXZsa2paK09tRnI5Z2M0Y0tnNlVkclIxSnpvQXcyR2lNUk5wQURaY3BDcXhvamRCeXJpaGt5NDExSUtwQlFONVI4TWRybGNjdzc3ckRuWjhNWi9zdWlmTFVkK2hYVnY4OUo3ZzVoNVVTOTF4Wnd1NVBZbjc0RUJHSzlWWWpwQ2VlNUpaK0twM1Vuekk5dUpiVzlFLys4M2Fkbmd3amVwNzFIZHJqaHhkSE5sM2ZUSDR0djdPY1dOdHJWdHdsbmI1clRhWXNTSnhXSkVvMUZDTWthTEdhSFpDRkVmYjZFNjNrVEFDQis3c0ZVZFNIUVhORFEyT1ZxbXdzVGlKcmk3a1o4aENkZlhFZFRqMXVESTVLUVNJWkZhWHA3NDF1WmxQeW1aTm5reXBXTW1NL2FhZVN6Nlo5dkFuM2ZnVmR3ekdWNzY2WE5zUGtJTXV2YU52N1A1QzVjenVmQnc0cmVQelZ2MjRWZlhVeWNUcUI1NEovVEY3U3dERzNzUlJlL2RRTjdZamtiVHVQRGNQWUhNdWswMC8zZmJVcEw0MHYvaTBPVnZFWXVsL0lqUGRWUzNkMFVHWEQzblU5V3dGVjgyajFzdnN3YzNuc21WYysvbUhHdFBzZnVjTy9udU44NDV4a2MwaVA3Z2VRNk1hRnZEZGhqNm5wOHorR3BTRXdsQ3VLeERReE5KcTgxSUpCS0lXNGtFWGRlSnhXS0VaWXlRR1NWZ1JHaUtCNms3b3kvaDMxeEV6OWR2U2g1Ri8zRm11M2tzYmNvOXFtdnJPRlJUUzUwOXRjTnFtUXBIb3NUaUVreEJabEUzWEFlYThEZTdSSmEzdFE4VWlRZ2YySDVKM2FyNWQ4eDZOc1lOUDF2Q3M0Tmg2L0tmTStmK3h6aHIxVUttSmkvd2ZDWi83OXRzdU9iblBQVGNWYng2ZDBlekpnL3h5aXY3R0Q5ckxIbjJ0dzY4ellLZkxtTnpyRC9YM1AxdEpnZWVZODdTRnNwNnQ3RDVxVkU4K3RSTWh2bVVwcHh3dklWay9lSmlza3ZqeEZmK2srWU5SWFQ3eVptd0o0cnJnYkZFdnZNeUxkc05xTnBINU5VbytwNE9ZaVZEeDlKOUdvUnUvUUM5YUZKS0NNTkFPZ1RRTldFY09lT2lSTzdiZDNTM255WWMyRmZCQzgvK3h4SHZOK21Lci9IRjh5ODZxc2YwWFRTUWd1ZW1BaEJhdVkybUg2dzk4czlvbnB2ZTZQZkFPeGZ0LytrbUlHNGRpWDVTcEFuQ05FR0F4QUJwSUlXT0lWM0VFWmF3UldTY2tCbkRKeUprR2w2YW0zYlF3QmVvOTRTVEc2NWlkYU9RN09wWTJBNGNUR1JCbTVxYUNiUWtDbkhEWWFzSTE1QklhYURMREhKOVFqUkd3a1EwajlCTUtVaThPTTNyOWQ2VmQ5NjNXYms4bjdJK09RQk1uSEU1dzVZdDQ0TUttRHJDOFdTRmx6RC83cGVaOUt2SGVQNmFwN2tsWFNINDN0ZDU2ZUFvNXAyZmsvelcrcVhMNFBiSFdkbDdLNHNldUlzWnVkTjU5cm1yS0FQVy8vUmVYdG81azJFamxNNmM4TGpLdFBQSnFuMlQydnRpWlB6aU1vcXU5K1AvMW44VDNnUGlhMWRSY0VVUFdyYlhRZFVlQWovYTA4R2o5Q0Q3SnlNUXIvNmR3SWNHVE9yQW9udmdlZ3BuNUNOOGNlSXIvMEh6MzBMSGNQdXBUNS8rQTduL2tTZU82Mk5HMzZqZ3dPQ25qdm5uU24wOXJ3SCtEZWlBTHFXTUM3dk9UYUtSNkVyQUJPS1lVcE5DeElVaFJUeWVzTnBrbkFodVFtYkNKVzJvckdISGRTOFF6eWhtZUdhL0k3dWkrNnRhWGRCbWY4SUZUZlNCSmtZUjZZWUVhUkNQeDhIbnd5VWtoaDdIcXZMUjd2L2JydXVGRUZmNkNuT28vY2RqVEx2eVNvYWVONW5TeS82RERiRVk2VHpPa3VuZjVwNkJ1M25pcDMrbk1zM3RXMWY5SGY5RlZ6SGVZWUg1dkZDNVl4OWJkKzZtUE9vbEw3Q1B5Z0JBQy81QTRuYkZpVWY2NDRpaUhuaEhGZVByQzJiTWg2Y3c4V1pvZVM1azRNalpMTmYxRThqdCt3bitYKzV6V0Y3dFhTTDl1YjlSZSsxZmFQamhMdVNrU2ZTNHFjY3gzSzQ0a2JpRWR0bW1nVCs1d09HU2VscHIyNUlkQ1poT2w1VEU5RjFkMTVOZENSRVpTM1FsR0dHYWpDQjFldUN3SFFsdWdKaXVjNmk2cHRVRkRiWk93N1hyMWVKbVF0aU1lRnpFRFlISEpZUVJONFZoQ20xb1hxRkxjN252QkNoZjloQ3pYdXJGd2wvOW5xbEQ4dkVGL3M2TXljOTE4UFNEdU9XQnEzaHAxbk1zZW1ONnFxeXg3Qjh4SnY5c0ZFN1BjdlRkUCtESzU1Ynh1NHBCM1B5ckpZeXVmNW01Mzc2THhiUVFIVGlMSjRlb2krbWtDTnZmM3NCZmREN1pNK0xFbm5xVjVtMDl5UHVQYVJUbHVZQnFBbmNkSVp2bExTYjdtd1BRaXFESFAwdXR2Mkp1Qk5EdC8rNGthK2wvVWZ1ck9pdW0ya2k4RHVMYjZ6RFA2a3ZCdEtHNFgvZ1g4V1RNOVFpM0swNG9QVDNkcmgyaDlmN1hGdk9nYmxsdVRwZFVncEFTYVZyaUp1UFNGQ0llbHk2WEN4MHpVUUlpZGNKbWpCWWpRck1XcHNGb29VWnZwc2lkaDBlNDBndmJBYXNYdExHcHlXcHdUOHhZaTlvTjdycE8zQUNrYVk4andoUXVOQkVYcHBUQ2s5L3ZtOEE0YUdIelAzZVROK2FiVEIrU24zaUdRQXVIeXcvNFJzeGkvcFd2Yy9OVHk4aU5lWk1sSGRIM1htYU43eEtXcHJxVnZ2NU12ZnNIVEUyNnRGZng1QXRYRVkyQ1Q4WFdUaUlob2krc0pmcUMvZjhBL2h2M2dkY0ZzYU9vUFlyVjBUSjdPU0dueFQzcWZBcC9ra1h3MXJXRTkvanhQbkE5M1V1MzBURDd3NlJJeVNpSm5Cc3V2QTljZTVqYkZTY3RUSUg0NHJJQmQwOGVzZmVCVlVtWEZHeVgxR3E1UWlSTXAwVDVoNVlZVG9rdVRYUmNSTkVKeXhnKzAwT0xFYkVLZDFzNHBEZlJ6MXZRL2puRGtRaUhhbHBuckxVRWc0bkJrZEZXYTAzWGRlSlNJakdGRVU4dU9oWkNDSEZOV2UrOEZpRyttWGk0SE1vRzVsUDNyMlU4LzgvZGJIM3Y3engwLzFJK2lFRzBRM1hMWWVMZDMrWlNnZ1JhcjNMV3ZiU1JvaXN2WjloUm5qd2xhcDJVVkZIclcwcnV6OC9EVjlqZXhUVDMxQkhmN2pqcW9oQ05KcjVmRjBQZldJY1lONGE4YjViaUx1MkJaOUpZOHE3SUl2N1dua1QxK21GdlY1eE1lcml6cjcwNzU4dTVwRFRJSjF4UnFhVjJKQmlHSVF6RHdGa0NrbWlVanhFMEl3U3M4VWExdXArSTJiNDlUbXRYczVaY25kY3Fhcm9leDdDR2o1aW1hUzFtUVVpRWVHenUyTmxlV3ZWbjlPMC81S0VSaDNqaWU3Y3g3WUVWK0MrYnhjemhPVVRyRDFPelZuZ0o4KzhlMmZxSE5mQTJMLzJ6RjlkYzFsOWRFYWNhZmZ1VE9ha1VYOTlqTDhHUWEvK1AraC91UVh4dEVrVi8vd2FGUHk1RnZycVd4bDlXSDlYdGlwT0hRQXk5cytlbGw5SzJhTGROSDZsZHRHc21oQTNEU0pSLzZOTHVKVTJJVzhoMlNZMFE5VVlMMVhwVCsrZjc1ejllWWxkNVJic0ZMZjRXeXlWdDNUd2xvdEhFTG9PNFlRaHBTbTNyaHYvTkgxeDJ4anR3bkpzQ0Ryek44Ly9NWWVyMFVSU3BhNkpUY21EY3kxMzY5ZmZaY05VeG1Cc0RqdXB1aG1GUVdWbkpnQUVEanZxaHUvRE9ndzU1NDQwMzB2OWhrbkxQSC83d2h6dWVmLzc1T2lBSWhJQ3dFQ0ptdWFpR0VNSzB0bGxKYTlHTHRMZFkyY3RlY25KeTZOYXRHL241K1JRWEYxTlNVc0tnUVlQYTdFaHcxOVczcjFtelZ1Y2xyRFZyMDFROGJtQlkxcHFVQ1hVdEd6amdsdU11YWdCOUx1Q1c2VW84RktjK0V5ZE83RFN2cFhVdDZPZEc2YWhSb3lZOS8venpLKzFZbXhCQ3h5ci9FRUtZUW9qa21qN24zbEY3VzN4T1RnNTVlWG5rNStkVFZGUkU3OTY5NmQrL1A0TUdEYUtzckZXS05Ic3BTekRvcUZtemR4ZllvbWI1dTZacEN0TnFuZHIwZjZ0eVhTN3RGblZwS2hTS282VmJ0MjdYekowN056ZnBqa3Jwc2R6UnBFdWFXTmRwQ211N2xiQkxQeExyQnhLdFZ2YW1LNy9mVDJOakl6VTFOWVJDcmZXS21qMW5MUlFPdDQ3NXR1SnF1cDRVdG5iVzJvaGhRMllCZzlSYmRYcmk2cFYxZXJ4MnphWGU3T09JRUtMc3Z2dnV1NWoyU1FTWGxGSkxUTjZXd2pSTkxHRkwxclRaNG1ZM3lOc3oyK3dWZm9jT0hXcDkyeElkQmdrWE5HS04rVTY0b0RweG82MjFKaTFyN2NhdlgrMXl1VnczcWJmcDlNVTNwcURydnZZdkZCNkRDcXBha2VOTmZuNytWMHRMUzcxcHJEYk50dG9zY1d0bnRkbmlabzgxQ2dhREJBSUJHaHNicWEydEpSSkpMSC9Sbk5hYU13dHFENDgwREFQVE1LM2xMQWxyYmNtVGkyNEVWT1BTYVV6ZVBXZVRkWFYvWEgyenU0NmwxamVMN09sbmtEZG4yTkgva0NkVHZkbkgzMm83KysyMzM1NXdORmJiNFN3M3A5WFczTnpjeG1wekovWVhSTlBHMWhLMUpDYUdaYTFaRnB2bWRydHZWRy9QNlkzV3pVdjMrMGVkNHA5QURidzU2czMrSENndUxyNENlTk1TdHBpVTBpMkVjSk5JSkdneWdiREtQcVJoR0NJZWo4dlVXRnNrRW1sanRkWFYxVkZTVW9MYkt1V3dkNEltbFRGdTFaRVlwb0VwSlZKS0pJalF3UjFUZ0F2VVc2TTQ1Y25zQmtKOC9zOWpHbkJvSzdUVW5EWmJzVFE0YitlcmkwY052dUtPalpiRjVrRktIWUZMU2d3U2hoU21OREdrZ1NGMTRtYVV1QkVtSGcraXh3UEVZazFFb2cyRUl6VzBoQS9RSFB5RStwYmRIUEwvT3lGc3lXTGN1RzJ0R1JpMkcycEtwSmxZemdKU2VEMmVHZXFLVjV6eXVIM2d5L3Y4bnlmVUNKV2JRUStkZHFkNFlOL2lTY0FIU2FzTlBFSVNSMGdYQ0ZNaWhaUmdTaWtOdzhRd1RPS0dpVzRZNkxwQlRJOFQxWFhDa1NqQmNKUkFNRXhUb0lXNnhtYTBhQ1RoZ3VweHZXMFcxSEpEcmFRQlVpS2E5bTRaSVlTNFZsMzFpbFBibkhCQlRzOFQ4MXd0TmFlbHFBRjQzTzZyL3ZlM0Mvc2xMYlpFbkMxbE53S1lVZ29qRVdzVGNTTVIrOWVOT0hvOFRpeW1FNDFaNGhZSzB4d0kwZEFVUUhPV2R5UUxjVzBYMURRVGJtakNXdE95czdPdVUxZTk0cFMzMVBKNkorSnJKNExtQTZmMTZSNDdZc2lGcEd5elFsb1pVb2ttcFJTbWxKaW14TEFUQ2JhNHhRMWk4VGpSbUU0a0dpTVlpUklJaG1nTUJOR1NUZTVPVVV0YWEzYkNBTEhxVDcvTDBEUk5DWnZpMUVTNHdKc051YjBTL3o1Um5PYWI1bk95TXE2WU9XVkNobTIxU1Z2Y0VyUGFCSW1aUmlKaHRVa013eFFKbDlTYS9xSEhpZWx4SXBiVjFoS080QThFMGV3c3FHNjVvSGJTSUdtdFdTVWVreTY2NEZxZ24vb0VLRTROSWRNUzFwazNCN0lMb1hzSmJmYjhuU2k2OEVMbTQwVEpvM052SFpmR0hYVkowS1MwaFkyazFSWTNUT0p4RTkyMjJ2UldxeTBVamhJSWhYSHJ1SW5qeHNCRlhBb01LWVFoQllZbGFKWnFhdTdDMHVrbkpFT2tVQ2hPSzNvV2RMOEVlTnRodGJtRnhJV1FXdUl2a0pSU0lnd3BNVXdwRGRNUWNjT1F0dVdteDFPc3RsQUVyZFVOalNkSGhTUmFwNlI5aU1iR3h1RkNpTXZVVzZCUWREMmliLzZHb1hlOHpOWk8rdnJjTHRjbGE1Y3NTRTBpdUN5ckxUbk9TSnJTS3RnMUxjdXROZFptSnhJU1Zsc0VkN0p1elJJMk05a1RtaEExUU9UazVIeE5YUjRLeFFtazhqV3V1UE1WdHJWKy9NbnRPWkRKMDZjeGYwb0poeTFFYWR6RmkvL3JaL3owTVNkd3lmZ3VIcnJ4S1phbGprYnpuTXZpbGJPWWZJU2YvdUx3d2VPQVQxS3NOaDJCaGlSUitpR1FwbWtsRXF6U0R6dDgxamJXRm1zVnR0YWtnVFhGd3pSdE4xUm9tbmExdXRJVWloT01aeEFMZmp1SEczb0E2RlJ1V3MyY1I1OWlidmFQZVBiQ3d6VHlOMjdqZDh1cXlMdDhER1VudEhIQ3phVVBQc2F6NDQvOUozT3pNeWNCLzAzYk9Kc2JaTnlxa2hhbUZXc3pURk1haVQ1U21ZaTNHZWhHYTZ3dEhJMmhwYnFnOW9IVmlCb01CaThCaHFtclRLRTRxU3BIeVpncDNEeEVaL09XR2lyLzUxZHQzY3ZxTjVnMjdSZjg4citlWWV3RGI3QkgzOFhjMlE4emQ1TjF1MTdOUzQvL2lnblQ1akQwK29YTVdWdWQzRVVTcmR6RVEvYy96TWhwMzJYb2piL2c5aFc3cUxWdVcvLzRnNHo5MForWmUvOHZtSFRqZll5ODR4bWUzMzZNZFhleFNwNlo4MTJ1V0ZxWmVNN0dUZHgrL1lQYy9xYTE0cno2SXhZKzhNalFRZjM2RGJVRXJkVWRsYmhNS1RYRGxDSnVtQ0pxbUJpbXhOUWpIS3p6VXgrenl6L0M3UDd3Mzd5NVA4VHVEVytoMmFLV0xyNEdDSi9QZDVXNnFCU0trNDFPN2ZaM1dMYkR3N0FoK1pSY09JN1JOUit4eWxyUld2ditSMnd0T1pldlhYc25HMzk2RWFXZU0zbDB5Y004T3NiNjhab3Fhb2QvZzFkWC9vcTFzNHRaditSbDFyUUFzUW9XTGZ3TFc0ZmN3TnFWai9IaHp5YmhXNzJFT2F2cms4OWNWeG5tMG52dlkrMGZGckowVEQyTFhuZy9LWHhIaGJlRVcrNjlDUDcrWjE2czlMUHVOeXZaUFB3cUZsNllCN0VLRnZ6b1JUWVB1WTdYLy9yNGVjNDRtN1F5bzRDbUNTRmNBakJOSW9iRU1FRkNNdWFXR0swR3BtSFM4K3h6RTY2b3cvM0VibmEzRGswSWNhVzZxQlNLazZGbHU1bi8vK1l3UHhsajY4dkU2Yk9aUHlrUE9JZHJocXhrOFp1VnpDdk5aOTM2S3NvdXZLN2ptRnJmYzdsalVqRjVRTjZZY3loNytnMXFneERkOFRZcmdpTjRkdWFaaVRIOEpXT1lQLzBkSnF4K24vSXBsd0pRT09KTFRDNU9XSTJqUjVUQSttb3FJYzNZL2ppdlBUS0hVc2QzTHJ6bjV5eWRsSVd2ZEFxUFhyNk5HUXVmSkM5WXdyd254MUVFUkxlOHdZcmdDSjZjZVNiOXZGd0NMRTIxMm9SSWRDSWdoS21CUUVyTWhQVWxUTU9VaVRpYmhpSEJ0RnhTZDZxMVpydWhnQWlIdzFPQXZ1b0tVeWhPZG93dGxUd21mdmxNRnJ5OGpmTHArYnkySTU4cmJ5cytXcTgyNFlMcUVHME1FQzAraXhMSDJMbWludm40R3FzN3RNcDhueXJHNW1IWVZ5OWk5TXN2VXY3bDY1aHUvVTdSUmorQnBncHV2LzU5Z0Q0REJ2UWY4Y2tuKzk1ckcyZERCd1FTSVlRUW1rQ2ExaFJ6MHpTdGpnUXdwVXdLbTVZcWFwYWxCaUM4WHU4VWRYVXBGSjJUb3ZGakdWM3pQc3Yrdm9YTkplT1lXbkxzaitIcmtZbXZ1cHJLV092M2Ftc2FpUFlvUHM2TGxFS3NYN2FhelNVRDhMMjFtaGV0eFdHK25EeHllMzZKNVNzZlkvdkt4OWkrOGorK21HcXhTZG5haVdCS2lTR2xNR1dxSzJvbUZwU2FpZElQelJJMGU2aWJzTXM4TERkVUNadEMwVm5KT1l0cmhqZnc0cktQS0prd2dxU3VlVFB4RWFLeTZjaEJmdCtJaTVqdWZaOUZ5eXFvQmFMVm0xaXdvb3JSVTg0OXJxVWkwUzJ2TVBldGZPWTlPSWRIdit4bjBlTnZVd240aG85bE1odFp0S0lDUDVDaE4xNlVZcTBsVi9SSnBHWmFvbWFDRUVpaUVWM29ScHh3d0U5ZEhLU1pxR3R6cHlZTmJEYzBGQXBkck54UWhhSXprOFhFU1lQd2JmQno1WGpIcVBhU2M3ajUzSGQ0Nk00ZnMrM0JoVHg2dUlmd0RtVGVqNy9PZ2w4dlpkSTBQOUhzZkNaK2RUWlBUdmswbzkvYng5amdMQmE5TUlrUGZyMkJvaG4zY1VPeEIyWk1ZL0k5THpCMzlWa3NuektNaFQrZXhvSmZMMlhDTWo5UmIxNmZ5MlorZThnL2x2M25oeVQ3Um5GSm1SZ1pqaEJDQXlHbGtGNlhJS3BIT1ZnZncrVnk0OU1rcGxYK0lYcjI3RWswR2hXeFdJeDRQQzVNMDlTa2xDNWQxMyttYWRwMzFNV2pVQndkbjJhdktCK3YrbXlXMEtZL01tbDVDY3QvZVJFbHA4aDVESVlpUzNMR1h2c2kwQUlFZ0tDQU1JS29RT2hDWUdoQ21HNlhKcjBlRno2dlIyYjZ2R1Q2ZkdSbCtzak96RUJMellhU3FGL1RORTJicEM1VmhhTHpFbTJzNFBrVjJ5ajU4cm1uaktnQlpHWDZ6a3ZuaW1MTmFjTnVzNUpTSkRvUlRHdUZnWkhzUk5CU2luS1JVb3FHaG9aaHFHVXRDa1huWmMvTFhISHJNN3pVNHlvV1RzazdwWDQxSWNUWnE1LzVVZThPeEUxSWlVQ0NLYTFNcUxPSDFEcmNxUTN2SkhwREwxSlhqa0xSaVNtOWlyVXJUOTNhK1RGbm56a00yRzhMbXdTWGtHZ0kyMktUUW9LVWR1K29kZGhiclpKWlVWcEhGQW1YeTNXaHVuSVVDc1hKb250ZXppakxTa3RPK2tnY3NsV3JwTjAvS3BPVkhZWjFhS2tXMi9lKzl6MlhFR0tpT3JVS2hlSms0WEc3emh0NVpyK1VodmhrbksxMWxCR1dLeXJidXFOYWlodkt3dzgvZkFIUVRaMWFoVUp4RXVuMi9DUGZMWFZhYlRMUkZKL1lGaS9CbXE2THRFUXRPZExJYWJGWkNKL1BkNTQ2cHdxRjRtUlRXdEpyU0h0WEZLM1ZIVTBZWmFaMUdMSTFFYW81eXp4SXpGNDdYNTFTaFVKeHNzbkp6anpIWWJHMUtmdXc5VXBhV1ZKcDdUODJaR0tza1daYmExSktjZTIxMTdxRUVNcGlVeWdVSngyM3kvV0ZBYjN5WFNrV204c1NORTFLQkZoeHRqYnVhR3VNVFFCaXlaSWxYd1J5MUNsVktCU2R3V2hiOXVoOS9aMmlKcTE5b3poVzh5WGliTTZhTm9mRkJwQ1JrZkVGZFM0VkNrVm40Y3dCZmRza0VHZ2JaeU0xemlhbGlTbk5WdVVqVWI4MlJwMUtoVUxSV2VpV216V0Vkc21EdG5FMkhIRTIwMHkwV2JrZFk0cUVFT0pjZFNvVkNrVm53ZU4yRDZkOWpDM1pMNHF6bmkzcGpyWmFiT3phdGFzbk1GaWRTb1ZDMFZrUVFnejY1ZmRtNVhRa2JpUlVMVm5QWnJ1bGRveE45T25UUnpXOUt4U0tUc2VsNTUvYnh4SXlhK0FrR2hKaFQ5V1ZXSlVkVmhlQ2xJN3Nnc2ZqVWNLbVVDZzZIWDJMQy9vN3JMUjJ0V3hZSTR4YXV4QVN3b2FVVXJoY3JyUFZLVlFvRkoyTm5Lek1NeHlpMWtiWXJEaGJ3aU9WQ01zVkZacmRJeXFFVU1LbVVDZzZIUjZQZTFDS3FMa2NGaHV0NHBaSUlOaXVLTllkemxLblVLRlFkRFkwSVlZNHJMVDJKUjlwRWdnYUlHcHFhZ1p6dUhXQkNvVkNjU1NxTnpGM3pvTU1uWG9mYzlicngvT1JmU3NmdjcvUUtXalNtc2RHc3VURFRpQTRMTGFjbkp4QjZsMVJLRTVYL0x4NC95OVlWQWxVdjhHMDc3OUI1VEUvaHM2YUYvN0N1cDVYc2ZhbFgvRGtlRS9ibTdlL3hJUWJsN0ltOXVsZTRkRFNma1drTGRLMU94QVNncWJyQnVHNFpiRzUzZTR5OWVZcUZLY3BMYnQ0czNFZ0Y1WkE3Wlp0UkljUCtoVExZY0xVTnVxVWpCalVacXQ4a3RLTGVITGVGTVo3UDkxTExPeVJWNXpHSFJWdER5a00weFM2QVc0cHBkQTByVlM5dXdyRjZjWlc1dDc2SXV1Q1llcGlIamJmK0JIUllJQ290NUlKTmRleGR0NDViZU5Uc1VwZWZQclBMRjVmUlMyWkREdDNDZ3Z2dW9CaE9aVTg4LzFuZUdKSG5OaU9SWXhkUFpabkYxL0RhT2ZQN2xqTDdZL29QUHFuYnpEK3pkOHdjaG5jVUJwbTNZNXFhbU9aVEx6cE5oNmRWSXl2OFcxbTNQb09lUmRtVXJtOWdkb21LUHZ5TkJiY09LUlBXMHN0R1Y4VEpsSm9nRzdheG1NMDRZb0tJUWFxTjFtaE9OMFl4cU8vZllTVk0vb3lhdVozMmZpSE9keFJNb2o1enp6Q1c2bWlSb2cxanovREU0MWplSGJKWTJ4ZmNpZlhCRmN6Ni9GTjFGTENuYis4ai9uRDNZeTZhUjRiVTBVdEhUVU5NR1VXYTMvN0NHL2RPNUQxUzE1bVRVdXJhOHp3RzFpNStHRTJQak9Ob3ZVdjhwTTNRNzB0eTZ5OXVBRlNDT0YyaWNRZDNON0VEVUtJQWVwTlZpaE9SM1MyN2doUWRrWXh0RlR5UWF3dnczcWtjMWUzc0d4OUp0TnZ1b2hoT1VCT0NUZmNObzY4OTk5aFhlT25lTnFlWjNITmlNVGF3THpTTXltTE5WQWJ0RzhzNXNJeEJRbGg3WEVPZDB6SVplTTdPMG82RURWN3NRc2tCeFZKM05ZTlN0Z1VpdE9NeXRYUE1HTlpKZjZtTUd4NWtIV0VxUXQ2Mkh4ckJUYy8rRDN1ZEFhb212elVVa0JwVDZjNDlhV0VqOWpUQ1BUNERDL0V5ak5FZFNCTkRLNm9PQS8rSGVtWFlyRUpDWnBJbWFacnk1dTJhOWV1WWlCRHZjMEt4ZWxGeVpRN2VldVphWXp2K3lXVy91RVJYcDE1Sm1kZGRUY2JmNXNpYWdEZDh5aWluajAxYmQzSld2SW83Zkg1dnM3S3lnYkl6czM0MmJ4YmNqcTAyRkxRQ2dvS2VxdTNXS0U0VGFtcG9Ka3ZCcUFBQUNBQVNVUkJWTHk0aERLZ2ZFODlKYVhGNmUrWE00S1o0OE9zZU9GdHRyWUFMWlc4dVBRTmFzLzlFaE9QdTdCVnNlcC9LL0FEMGNxM2VlTE5NT01ubk1rWEI1K1I1eEN5MW5xMkZLUnA0dmI1Zk1YcTNWVW9Uay84bFExUU1vWTgvSlJYZWlpYjR1bmdubGxNdnZkT2FwLytNN05tcjhRZnk2UnMvQlNldldzTVJjZjlWZVdTVjdtYWFkZnZvaktXeCtncE4vRG9wRHlhZC9mSTY4QmFhMTFHSlJDR2FVZ1JqVWJ2OUhxOVQ2dTNXS0g0YkJpR1FXVmxKUU1HSEVQSSt1TlY2c1E1YVh5YkdiZSt6NVcvbmNNTktaWmdaWFhkZ241ZnZ2a2RJR0FmQWtJSUlnSVJFd0pERThKMGFacDBhNXBXcE02bVFxSG83R1JsK1BJY2JtZ2JTODA1NVFNa21xWnBCZXFVS1JTS3pvN1g0MjRYWXlOZGpBMXdDeUh5MVNsVEtCU2RnaDRYc0h6bEJXbHZjcnZiQ0Z2N1F5SnNtZFA0YkJVb0NvVkNjVUp3YVZvNlY1UTJWcHRWcUtzQmVlcVVLUlNLem82bWlSelN4ZFprRzNFVEV0Q0VFRXJZRkFwRnAwZUk5c0tXYXJuWlhWVWFrSzFPbVVLaDZQVENsdEFxcC91WnB1dEFKb1V0UzUweWhVTFJCU3kyekJSUmMyaWViQ053R3BDcFRwbENvZWdDWkJ6R0RXMWp0V21rN2FkWEtCU0tUb2UzdlhlYVR0WlF3cVpRS0k2R0VKdFhQTU9FNjcvTDBPKy9Sdm5KRTdaMkNZTjJBaWRiNTRjckZJcFRsUzEvWnRMQ2o0aWlzMjdSUXVadStoUWJwQ3JmNGFGbGZpWS92SkR0djd5VTQ3Y2twWjUxLy9NR2E2cVA2czZ1dzFoczFrWjRNR2x0UzFBb0ZLY29XemRWVURSbUlENnFlRzFQTVJjTzhSejdnelEyVUp2ZGx3dUhIdTljWXdPdnJWak5hMGUzRmt2cjBFcXpUTFhFSm5nUVVrcXAzbnFGNHJQVDJhWjdsUC9Qazh4WVVZVy9TY2ZYUFJPZm5samFVcGpkazV0LzNINllaTzJtbDVuN20zZFlYNlBqNjNrbTAyZDluZm5qQzRpdVg4cUV4eitpTGdpNTJabU1uMzBmejA1cVcvNGFyZHpFZ2wrL3dpczcvRVN6aTVuNDFXa3NuSDRtUmNDNlJmY3hOM3MyRzc5MVp1TE82My9EME4va3MvekhlU3k0ZnkxYm04S1FuVXZaNWJmeDZsY3IweTV6ZWZTMmN5Z0J4UENwMDRBZ2lla2VmcUFGQ0FxSVN0Q0JPQ0ExRXBhYlFxRTR4U2o3Nmh3Mi92WW1wdlk4aDBkLyt3aHYzWHNPZlMrY3pjWS9wSm1RVy9rYXN4NzlpSkpaOC9odzVTOVllMXMrNng1ZndxSTk0QnMvaTQwUGpxT3crN2s4K2FkSDJva2FzUW9XTGZ3TFc0ZmN3TnFWai9IaHp5YmhXNzJFT2F2ckQvOENTeTVsNVI5bU03MTdKbFBuUHNLcnN3WmFON1JmNXZMUVdqK0gxU3FSbUJPZUdNcW1vUUdHdWdRVWlsT1VtaXJLZXc1aW1CZkt0MWRUTnJ4djJydHRYdjBPbGNPbk1HOThBVDQ4RkkyWnlyemhEYXhZWFhIRXA0aHVlWnNWd1JITW01bXcwSHdsWTVnL3ZTK2JWNy8vS1pNTTdaZTVySDlyRy83Mld0VytWOVRDRGNSSXJsTlFLQlNuQmx0NTZJNi9zS2JKVDEwc2syazNyazdzRE0xK2hBbnZUK1BWZVdQYU5JblhOb2JKS3k1d2ZDK0xrcEpjL0pYMVJCbVlzb292UmRnYUEwU0x6MnF6S0xtb1p6Nit4bXBxajhOdmtsam1Fc2FmMEtxalF1TVk3cXhRS0xvS3cxaTQrR0dXZmptZkMrOTZrSTEvbU1YVW5pTVNMbW1LcUFFVTljakVYMTJQUC9rZG5jcWFBSGs5Q2c0cmFnQytIcG40cXF1cGRDaEpiVTBEMFI3RmliSGhuN0dnekZybVFsNTdyWklwWDlzSVcxaGRCQXJGcVVpSThtb29LOG1DeG1yS3ZjV1VkU0F5bzZkOGlaSi9yMlhSSmo5UkVvbUVKOTdQWi9xVWdVZDhGdCtJaTVqdWZaOUZ5eXFvQmFMVm0xaXdvb3JSVTg2bERDZ3B5Y2UvNVNQV04rcEVHeXQ0Zm5XRlE2RTgrTHc2dFRYMVJKUGZTNy9NSlE4aVIvVnJ5NFFyR2xJWGdFSnhLdExBQjVVRm5GVUM3SzJpdHVlZ2p1dlBTaTVsNmR3d2MzL3pDQ01mc2JLaTk4NW1YdWxSUEkxM0lQTisvSFVXL0hvcGs2YjVpV2JuTS9HcnMzbHlTbUk0ZDlubDEzSFBscVhjL3YvV0VlMCtnS2tqOHNsTi9uQmZycGt5a0ZtL2VZUkplKzdrclpuUTBUSVhLV1U0alhYbStMOUFDSWtwVFNta2xCOEFJOVZGb0ZCOE50UXlsK1BBWVphNW1GSnVjWTI0Nm9lMGxuczRGN3BFQlVJWGdyZ21oS2xKS2YzcWJDb1VpczZPbExLbFkydk5ucDJiUUFPVXNDa1VpazZQYWNvV2g0REpkSUptZWFTNHBaUk5RZ2gxMWhRS3hjbm5NTXRjRE1NSUhNWmljK29hbXBTeVFaMU5oVUxSMllrYmhqL0ZZcFBweFUyZ1NTbnIxU2xUS0JTZG5XaE05M2ZnZmtySHVnTUFOTU13NnRRcFV5Z1VuWjFRSkJxZ2ZXeE50bmRFUWROMXZWcWRNb1ZDMGRscDhnYzdja1dUWW1kbkM5eVJTS1FtSnlkSG5UV0ZvaFB4eVlFYWRSSlMrR0Q3bmtESG9pYXRGYU9KUVd6dWd3Y1BIaXdzTEZSblRhSG9SQXpvMDFPZGhCU3E2eHZ0Y2cvVEZqV1I4RDZsN1lJS0lkQTBnVFp5NU1nYWpyWUhTNkZRS0U0T2tibS9XaG82akN2Ni85dDc4L2lvNm52Ly8vVTUyK3hMbHNrZUVoS1dFRVJBSytEdmlsaC82TldxYlM5WVdyUzlTbHUrYVB1cjFHOEwxUXE5dHFCdG9jdEZieXRXcjFoYnNGcWdWV3BSUkJUVUZsY1VOU3lhUkNBUVFzakN6R1NabVhQTzUvZkhuSFB5bVpNelNiQnN3dWYxZUJ3VEFtYVpNL1BNNjcxOTN0VGFDWSsrbzNiMzg4ZU5pNHZyVEJXbDlJQU5aRHJqM0RKRURMQlJTdWsrL3RCeGNYR2RxZEowL2FBTmFobHV6ZHlZYkFTa2FiRHB1djR4ZitpNHVMak9WQ1dUYXJPRFkzTnMrU0FrdmZPQWFwcld5Qjg2TGk2dU0xWHg3cDVtaHhBMGErdUhsS1poc2tGUitONWtMaTZ1TTBFcGJGajZBOHgvVFUzL3NXQWFmbjdIWjFveGhCd2JJU1JkR1FWQU96bzY2dm1EeWNWMVppblI5QllXM1hrM3hsOTNHMnErOWtzczJOekVuREk3TkVEVWJYNGVhM2VmckxOa1c3QnA3U3ZZM25HaVA2K002eGI5Q3J2Vy9STHZMQmdIQlVCRC9iNDJCbVkyMTJhT1V4SHJ2d0lBV2xGUjhSRnduSThaRnhmWHlWUHlReXhaK2lSMlZNM0Erc2QvaHMwTHowZlR3dzlnd2ZiamdWUVBkcnl3RVd2Mm5LelQvMXV3YnMxTDJOWnhjajY3UzVFUlRBZVNpVHUrdjd6RDd0UUlvSU5rOUxTbEN3Z2tIWXFhMW00WGdBbjhHY1hGZGZvVjNmNFNObUFTSHAxN2Z2bzQ3M0ZYWU9uMWIrT2FwOTVENjVUSmlEaWNOTHRwNmYvRmtzTGI4UExjU3V4NDlPZVk5Mnc3b2wwcWtudVdZZnpqQU9RUldIemZYRnlmQTBRM1A0QkpheVZjVjlpT0hRM3RhRlZLY2YzY0c3RjRTdm80NzhTMmh6QitUU0hXci93OGFnRUFIMkxSMXg1RzlMcy94MzBYdHVDUk8rL0Rpa1lWaVZRUHR2N3dCMWdOd0RYOGFqeiswOHV5SHorZW9XNXNYN3NhUzU3YWhmb3VJRmcyQm5QbWZobTNqZ3M2L0Z1Nnh3WTFIWUJPQVFvS0NxUzN2aE5pTEJhbGVqckhoblJsdEU0UUJBNDJMcTR6UUUwTkxVRFZaQU1xYVZXUHJrVHdxUTlSajhucDdVOERhT0xOUDhEck4wZXgrczY3c1c3S1Fxei9RbDcvZjlTcFlzS2kvNHZsWlRKYXR6K0tHZis5R2xVcmJzT05oWU45ZDRYNCtrL3Z3ZGV4RS9ObVBJM3FleGNOYlRjQ0cyYS90UjYzUFFVcy9PblBjWDFaQ25VYmY0K2I3MW1QNm9kdnhwVzJDVTlkMSt2UlA3ZW1BOUNKMlpSTFFUVktJWUdBQ0NJRVFnZ0ZRRlZWcmVOUEp5NnVNME9KTGhVdVJjcGNmZWVUNEVxcEp5NW5WREFDVThyU0s0VWpVNjdHRFFVZjQyL3ZuYUlEdFJVWnJsUVBXanVpaU1LTDJxdS9pYzBQek1JMGg3RjFYVXZ1US8vOEdoT0NFaW9RQUpSQ0ExTThBRUI3ZW5vKzRFOG5McTR6UXk2ZmhFVFNCckV1RlFsWkduVFA1eWRUQUdVNVFMVHoxR3pqZEkyYmdjZS9Pd2E3MWp5QTZWKzVDOVAvYXowMnRLaU9QMXV5TjM3UUJqUU45cFlQUWloSlQ4SlRRdnBHcXVqZXZYczUyTGk0emhCVjF4UUNlejVFWFVaNDJvUm8yVWdqaHlVRFNDRnh3dGFkeDlEVUFnVERualI0RkJtdVZPcWtWUlFUTFMxSWpMNE05LzEwRVY3LzAxMjRiMm9QVnQ2OUdtc2RDaEhSOWdNdEJzQTBCbXJHWlZSRUtRVUZJQkNTdmt6aVRaNDgrU2lBRC9sVGlvdnJESEJzRjF5QjYrWFhzZVNoT3RUSHU5RzYreVVzV051T0s3OHdMcDFmeXlsRmJjRkIvTzNsSmtTUlF1dnU1N0hxZmRYMldUd295NUZSLy9ZdTFDZUJSRHlLS0F2Q0l6dXhhWGMzZ0JUcU56K05WVWNxY2EyWnZCOWVpZXFPWGZqYmU5MEF1bEczK1NWczZyUi9sMEdVNWJSais5dE5pQUtJZG5RUEdZU3QyNS9BTlhjK2dVMHRLUUJlUkFvRGNDWDdnN1EzZ1krT0hkN1pnNnl0SHVsTHB3Q0lBSm1raXdoVzhRQ0FydXY2MjRJZ2pPUlBLeTZ1MHl5bEVnc1h6Y0tTM3p5SmEyYTNBK0ZTWEhuRHJWZyt4V3Y4Z3pMTS8vWmxtUGZmdjhLRTM4c29QZThDWEhsZUFFMFpuMFRHdEp0bTRNcDduc1kxTTU4RXdoV1lmOWYzY0d1TjhkYytMM1k5L2l0TWVxOGQwWnhLWEwvd3hyN0NRZUcvWWVsTkgrSzJleFpoVmRLRENaZGVnQ21sOW0reUVyZk1uWXg1di9rVkp2d2VDSlQrRys2N2J5YW1EYUhYdit3TE4rUEJqdlZZOXYwZjRMWXV3RlZRaWV1L2U2TlI0ZTFyMEtXVWZ1QVVocEowVlZTbjZlUFhBRUtvTEtiZEdpRUVSQlJGV2RkMUNZRGMwOU56cTh2bCtobC9WbkZ4SGI4K1RRdVRvNXNmd0tTblIrQ1orNjRZWW52RzZkSGhveDIvTEw3c1AxOUZla2x5SEpsTGtuc0JraElJVkVLSUxna0NWU1NCS29xY3pyR1psZEZvTlBvMmYzcHljWEdkS2RyZGNHQ2Z6YTJ4T1RaS2pKRXFvekdYa25TT2pRcHNuRHByMXF5M0RTcHljWEZ4blc3RnYvYUQ1UzNJcklSbWdNMjhDQ0dVa0w0VGRDVkNpSEZLT1BTdFc3ZnFsTkx0aEpEcC9ESGw0anA3Rlp4K0szYWY0YTl5VmRQZWFtcnQ3QWMxWTVTS0FzUndiZWFNYUJwcWJCOGJqTGU2cXFyYitXM240dUk2M1lyR3U5OTNDRVBaY0pTbVkxQllibzJZN1I3R0g2aVpaNHZGWXEvemg1U0xpK3QwYSsvSEJ4c0dnaHJKT0RtWFFDQkdINXNnSUNQSEJrRC8xcmUrdFIzQU1mNndjbkZ4blVZZCs4YWlYemRsZ1pwRGpnMlVDQVNDUUtnZ0dJNk5FWDN5eVNkVlhkZGY1bzhyRnhlWGt5ZzkrVjhqcGFxdjFUVWVZc05RTlJOdWZXZXdNZUVuQ0JFZ0VDRmRQQ0NFbUgxdUZJQ2VTcVZlY2JsYzEvSmJ5TVhGQmFTN1lRK25QRGlTVUtDQklKN1FUdXJYYTJ0cjI1a3RES1hwQWdLbDV0UUJDRktVQUZRRXFBaXFpMm13QVZZdm0wNHBwUzB0TGE4TUd6YU0zMDB1TGk3b0ZOZ1JDd0t1QVB4NVFmaDhmaFNlNUsvNTRVZC9yM2VBbWdaQU0xbEZDS0ZFRUNBSUFtUlpocUs0NEhLNTRIYTcwOGNXbVlVRDA3RlZWbGJ1QnZBK3Y2VmNYRnlIVTI3QUZVQmhVUWw4UHY4cENIVnAzZHh2ZnIzTkZvYXFCdFJzUnhhWlBXeUNrVjlMZzA0UUJBRk1uczJDbTZxcVcvZ3Q1ZUxpT3BKUTRBOEVUOW5YNitycWVnM091YlcraW1qYWtCa3RIZ0lFZ2NDQ21paFk3UjVtS0FyamY5U2owZWhML0paeWNaM2JvaFRRcUpEZHFiVnR4OHJ2ZlFXZnUveGlUTC9xUC9ERHZ6Y0RBSnFmL0NZdXZlUmk0L29tL3R3ODlLOVpYLzlSSFRMemE3YkNBWFRMaUJtVEJvSWdnQmhRRXdVUmt1bllHTGhSU3FtZW41Ly9pcDdldmx6S2J5OFgxN2twUW9CNFVzdVNVNHZoNWZzVzQxbDhDeXVlK2crTVZHS0lJUUFBS0o3MU1MWjlJWUZFKzkreDRNWm5qdWRMSHJyMmMxZnR0NFdneG1VUFF5azBWWWNrcDZFbXNvN05zRzlPUzBjMVRkT2U0N2VXaTR2TFdjMzQ0TU1rYXEvK0hFWUdBTGdDQ0xCSDRMcGNjQjNudXVLZW5wNXQyZHdhSWRDUXNYS1BVbDNYcUo1MmJGUVFSSWlDQ0ZIdjdPL1l6TGxSQUhvc0Z0c2NEb2Uvem04Z0Z4Y1hFMzlpNDUzL2lmdDNKSkdNSjRGZlhJdlAvUUtBTWdWMy9ua0pwcnFHOWpsZSsrTXlQUGprZHV5UEt5aWFlQTNtZmYrN3lPOXNmTmNHTmF0d1lMUjU2QVJJQTgzNFRNbDRITzN4T0FSUEJGVmxQb2pFblFhYmVlbTZuZ0czM056Y3pUd2M1ZUxpeWxRZXJ2N3BNN2dhZTdIeWhyblkvL1cvNGQ3cHg3ZUpZZCtUUDhDUC8xNkJPeC9jaEttNWNieTI4bmI4K0h1L1BmVGUxcDgwR3NaS3RZTU5sT29naElJUUtnb2lSS0locVJKNHdpRUVqVFlQVVJRZ2VuSWdwQzJja0RFdnlwUlVkVTNUTnZJYnljWEZkZUswRnh2LytpRnF2L3BkVEMxMkFhNDhUTDdsRzVoNDlPbVg0SmhiNno5S1JVaDZPeFVoQURIQ1VFRVVJWW9pUkVtQ0lJcWk1ZGpNa0JSOSsvdTB6czVPRGpZdUxxNFRxSGEwdC90UlZCem8rNUNyQWdGdjI0NXNZYWdGdDR3MkR3QWdTRU10WFEwVlJSR1NLS2JCWnNLTmdaclZ6eGFKUkY1QmVrczhGeGNYMXdsUUxuSno0empjRnJNK1FudWI5L3ptalFQMmFtaktoQnJKUERIWE9DazMvZit5VUJORkNaSVc2NnVLbW0rWlk0eXNBZFJrTXJtQjN3d3VMcTVQckl3MWdhTnc5UmRIb3U2UjMrTGw1Z1NBTnJ6eTJ3ZGVRdjlKZzR6Q2dYV3dwTUVvUVJSQW9OTkVra0lVQ1hRS1NKSUlpY1lnc1k2TnliVVJwanFxSFRwMDZPK1ZsWlVMK2QzaDR1SWFpcHFmL0NhK2ZGL2ZxdUozYnJ3WTl3T1k5TU5OK01YbkFxaVk5WFA4VjlzUzNEL3ZTdnc0cmtBTGpYalh3YTNaRzNNcFRPTWxDQkJrQlg2dEcvR09JMmpzSkpEOVpSaVhtd001TUJKa3hJZ1I2TzN0Ulc5dkwwa2tFa2lsVWtSVlZhTHJ1a0FwbFpEZXpPcFNWZldQZ2lCY3lXOFpGNWV6UGsxYnFvWXFTb0czWTJFVVZweThyWnlxcXI0NHZLSnNKWUJlOUcyak1xOXVRa2dDUUlvUW9oSkNkRkVVcVNUSlZGRVV1Tnd1Nm5hNzRYRjc0UFY2NGZQN0VRd0VJRWlTWkRxMmpPcW9QUnp0N3U1K21qOTF1YmpPTFJFQ1NFUkhWOWZKMi9IVTNIem9WWWNRTkFWQUpZUmticVV5MkNRSUFrUlJvRlp1VFJJaFNSSmtTWUtzS0gzRkEzc1J3VllkMWUrLy8vNE5BQTd3VzgzRmRXNnBRRW1nSzNaeUR0V21sRGI5MTQ4VzcyTEFscktGb1RyTUk0ck1uUWJXMkZRZnR5UlJTb05ObHFFb1NwOWpZL05zZ2lDQW9hTU9RTHZycnJ0NlVxblVPbjZidWJqT0xSVXBDZEJFSEVlYW0wNjRjNHZINDg4OXYrbTVsSk5iQTRnOXY1YUdtekVYYW9lYUpNdVFGUVV1bHd1U0pLVS9hUHdqS29vaTBUU05Db0lBVGRNbzQ5clVBd2NPL0xXcXF1cTcvRlp6Y1oxYjRlZ0ZnU2lPSkxweHVDMk8yRkVSWGNrVGM0THVLNis4OG5ZV3Q2WUMxQng4VDNPSUd0SjFhSnBHTlUyRnFxYVFTb2xJSmtWSXZTSjZaUWs5THFVUGJFeXVqUTFITTJaSFI0d1lzVXRWMWZXQ0lNemd0NXVMNjl5Q1c2RmJSYUU3QmtxQnpGVXBuMHlKWk9wdmx5MWFkTlRtMUZJQVVnUlFRY3d3RkZRZ29DSUJaQkZRSk1DdEVIZ1V3T3NDdkc0ZzRBVkNmaUEzQ0JUa0FJSXN5N0M1TnRnSDQ0MVJLdzNwU1FRZWpuSnhuZU9RT3hIYTNYamdWUWUzbHRIbWtiRml6emgzVFJUVG9hZ2tpcEFrRWJJa1FwWWtLSW9NdDB1QjErUHVBNXNvaXVaYmFvYWx6SkhoVm5VMFB6OS9DNlgwVlg1N3ViaTRQcWswVGQ4K1llYjh4Z0hjbXRaMy9scmFYSW1FVUZFZ0VBV1JTcUlJVVV6RFRaWWtLTElFdHlMRDQzYkI3M1ZEVUJRRnNpekQ3dHhzRGJ0V0VRR0EydFhWOVFTL05WeGNYSjlVQnc2M3ZqQ0FXMU1OdDZhVDlKWjNLaEJBRUlqaDFBUklrbUE0TlJHS0xNRmx1VFVYQWw1UEg5Z2NpZ2ptaUZYRzdDZ0FiZnIwNmVzb3BYelpDeGNYMTNGTHA3UnU2bGUvLzM0V3QyYk1oL1lWRGRKZ005eWFLRkRUcWFYYk8yeHV6ZU5HTU9DRDRISzVrQVZ1R2E2TkRVZGZmLzExdGJlMzkzRitpN2k0dUk1WFI5bzZuMjFxN1dTaGxqU3VOTlNJZVpKSHVuOU5NUFlhbUMwZWJHNU5rZnJjbXMvdFFzRG5SWTRkYkRhNHNhN05QaGl2cmxtejVra0E5ZncyY1hGeERWV1Uwb1lmM2YrSEhZT0VvZFpKdVFSQTJxMEpFTVYwYmsyU1JNaWlaQlVNWElaYjgzazlDQVc4eUEwSElIZzhIampCelZZaFpVTlNEWUEyZCs3Y2FHOXY3eC80cmVMaTRocXFXanVpR3g1YTkzekN5YTBSSUdVVURUVEFQRWd5N2RoRVVUQ0tCUUprVVlRc0c3azEyWUNheDRXQXo0Tnd3SS84bkZBYWJHNjN1MTg0bXFYOUk2UDFZOE9HRFU4QWFPQzNpNHVMYXdodXJYSFp3MCsrWllNYTY5ajZXanpTUlFNSWhFQzBpZ1pwdDJiT2hDcXlETGRMaHNlbHdPLzFJQlR3SVM4Y1FGRmVEZ1NmendlMzIyMjVOaFp3OXRZUFc2NU4vZktYdjl6UjA5UHpHTDlsWEZ4Y2c3cTE5bU5QLy9LeHAzdHRJYWpwMWxTUXZoVjdwbHNUQlVMVGJpMGRocWFCbGxrSjlYbmNDUGc4eUFtbTNab2tpUkQ4ZmorOFhtK0dhenVlMW84Ly9lbFBqMU5LK1FtN1hGeGNBN20xUFhmLzVvOXZPa0ROZEcwT0xSNUcwVUFValJZUGV6T3VESy9iQmIvUGNHdWhBSXJ5Y3dBQVFpQVFnTS9uZ3owa1plRG0xUHBoVlVpLzhZMXZIT3Z1N3Y0OXYzVmNYRnpaMU56YS92UURUejQzV0c0dG95RlhNTnlhSkFxMEg5UVVHUjZYSzhPdFJYSkRjQnVMVElWd09Beld0UTFRSmMzcTJtYk5tcldHVXZvNnYzMWNYRngyNmJyKzV2UnYvSENIQTlRR2NHdUFLQkJJZ2psZDBEZGg0SkpsdUpWME02N2Y1MEU0NEVOZU9JaWkvRnpyYXdvNU9Ua0lCb09XYTNQS3RiR3VqZGthYjIxcjNyaHhZeklhalQ3S2J5RVhGNWRkRFUySG45blZlRWpGNEpWUUhTQlVTQjhrU1VWQmdDU0pobHRMUTAyUm1mWU9qeHRCbnhjNXdRQUtjc1B3ZXZwMm13cjUrZmtJaDhNSUJBTHdlcjBXM0V6SE5sVFhGZzZITitpNi9uZCtHN200dUV5bFZQWDVrWitidDh2QnFRM3Uxc1JNdHlZYkJRT1AyeGlkOG5rUUR2cVFueE5FVVNRbjQrc0tCUVVGeU0zTlJUQVloTi92dDNKdERoTUpBN2sybFJDU09uTGtDSGR0WEZ4Y2xuYnNxdCtFekdaY0MyeUdXMU9INnRaY1ZudUhNVHJsOXlJM0ZFQkJYaGcranpzVGJDVWxKY2pQejBkT1RnN01Rc0pRY20xbU1ZRjFiY1hGeGY5SXBWSVA4OXZKeGNYVjFkTzdadkxzN3grd1FTMlJ6YTBKUmlYVXlhMHBzZ1NYeTJ6dmNDSGc5MXJ0SFNXUnZINWZXL0I0UENncUtrSmVYaDVDb1ZEV1FvSlRoZFRlMTBZSVNYM3d3UWVQQVRqSWJ5c1gxN2tyQ2h6ODYrWi9ib056d1lCMWF4bDlhMVlsMU83V0ZLTmc0SGFuMnp2OFh1U0ZnaWpLejRISHJmUUhHd0NVbEpRZ0VvbUFMU1I0dlY2NFhDNWtHNUxQbG11Yk9IRmlmWGQzOTRQODFuSnhuYnM2Y3JUanlhL2UrYXNPbTFQTDZ0WklobHNUTTg1WmN5a3lYSW9DcjF1Qnoyc1VERUlCUkhKREtDbkljL3o2QWdBb2lvS2lvaUprS3lUWXFxVFVuRXF3citnelhkdlVxVk1mMDNYOVJYNTd1YmdHa2VJNzYzNGtWZE5lL3N5WGJudGpDRzVOTTl5YWJrNFpTRWJmV3I4cXFIRXlic0NiYnUvSUR3ZFJGTW1GSWt2WndRWUE1ZVhsTUFzSlpranFWRWhnaCtTWkdWS2RkVzA3ZHV4SUhqbHloT2ZhdUxnR1U2amtyUHVSZHU1cGZLYXB0ZE0rWFpBQWtDRE1CaXJEcmVuRU9rU1NXRTVOdG8xTmVUenBrM0hOMHpzSzhzSW9MOHJQK2owSTdCL01rTlIwYlFQMHRsbXVqWmxJWUoxYnFyaTQrT1ZrTXZrYi9zemw0aHBBa1pGbmxXdUx4cnNmdlhEVzdSOGJibzJGV3QvQWUvL3oxcWhJQ0UwUHVJczBmU3F1bk9IVzBoTUdYb1NEZmtSeXNvZWdqbUFyTEN6TUdwSTZqRnRSU1pJeUNnbXNheU9FSkxkczJiS0tVcnFEUDN1NXVMS0lDRUQxcFVCT0JTQjdQdFUvaXE3VGR4LzQwelAyZ29HVld5TkEwZ3hCbWZQV3FHQ0ZvR21vWlp5SzZ4U0M1dWVpTUM4ODRQZlNMMEF0TFMxRmUzczdvdEVvNHZFNGVucDZrRWdra0V3bWtVd21rVXFsb0tvcVZGV0ZwbW5RTkEyNnJvTlowNmRSU2dVQTZ0VlhYMzI0cmEzdHdkemMzSlg4R2N6RmxjMWVpRURKdUUvOWovSGhuajNyNy9qdngrSU9VRXM3TmtMU0JRTkNOQ045UlFWUmhDakxrRnd1U0M0WFpJOEhpdGNMbDk4UGR6QUliemdNZjE0ZWdvV0Z5QjAyREFValJxQjAzRGdnRkJxNll3T0FVQ2dFcDk2MkxJMjdHU0VwSEpwMjgvTHlOcVpTcVlmNHM1ZUw2K3hWUEI1ZlhWTlRzNGNKUVRPZ1JnaGgxK3JwQU5LTnVLSkl6Vll5V1phaEdKdmMzVzQzUEI0UGZENGZBb0VBY25KeWtKK2ZqNUtTRW9RR2dab2oySUIwSWNIc2JXT0g1TFBOa3RxYWRuVkNpTlZwVEFoSnZmcnFxNDlRU3QvbXQ1K0w2K3lUcnV2dlBQcm9veStpZjE2TmhWcktNRHNhSVVRM0pwaXN0WjhtMUV5d2VUd2VlTDFlK1AxK2hNTmg1T1hsb2Fpb0NPWGw1VU16d1U0ZmxHVVpaV1ZsS0N3czdGY2xkVGh4ZDZCQ2dnb2c5ZG5QZnJhcHJhMk5oNk5jWEdlaDl1elpzLzQ3My9sT05Hc0kydGUzWm14MkoxbmRtdW5VUEI0UC9INC9RcUVRY25OelVWaFlpTEt5TXNpeVBLVHZTY3IyRjBWRlJlam82RUEwR2tWWFYxZldYQnViWjlOMW5lcTZibTYxMGlpbHhIQnRRaVFTMmRUYjI3dkM1WExONTA4RkxxNnpROGVPSFh1NHRyWjI3d0J1emRvK1piZzFhb0xOYlBobm5acnAxdngrUDRMQklISnljaENKUkZCU1VvS2lvcUloZjEvU1FIODViTmd3ZEhaMkloYUxvYnU3T3dOdVpnSEJ1S2l1NjhSV1NLQUFkRXFwVlNYOTR4Ly8rTDl6NXN3Wkt3akNkUDZVNE9JQzl1M2I5Nm45M2xWVmZlbWVlKzU1MlFhMVhwdGJ5OGlyQWFDRUVPdHpHQ1lJQUpER1J2cXR3UkhyWThmN1dBMElOcC9QaDdLeU1zdTFkWGQzVzJCTHBWSjIxMFkxVFNPNnJsUGpHOU1OeDJibTI0UnZmdk9iSGRPblQzK3dvcUtpRmtBSmYxcHpuZXVxcUtqNHRIN3J6YSsrK3VxR1ZhdFc5VGlFb0wyd0ZReU12SnB1T0RWcU9EUnE1dExNSWtFNEhFWnViaTRLQ2dwUVZsYUdxcW9xMU5iV0RqbTNOaVN3QWVsQ3dyRmp4eXpYMXR2Ym13RTN0dlhEQ0VkQjA0TFIxMFlvcFdvYXprU29yS3g4SXhxTi9rOGdFTGlYUDYyNXVENmRPbmp3NEI4dnVlU1NKZ05xTE5Ec0lhaHFUaVlSUXF5OG1yMVk0SGE3TGNBRmcwSGs1dVlpRW9tZ3RMVDB1S0VHWkNrZU9QMVdZVnRBMkVGNVd3c0lkUmlTWjhldFVvU1FaREFZZkNLWlRQS1JLeTZ1TTFSMVM2YWlxdXBtckkzMi83dDRQTDY2ckt6c2JXUzJkbGdocUMydlprSE5WZ1dsMmFER3RuWjhVa2M3SkxBRkFvR01GcEJRS09RNGxXQ0RtMWtselJpU054K0k1NTkvL21GZDE3ZndweEFYVjFyUnVyVllNdThhVEIxZmc2cXFHb3lmTkIyekZ6eUNyYTFuenZlb3F1cldsU3RYYm9GekJkU0FHMDFTU2xWS3FhYnJ1cTVwbXE1cE90Vmh1VFdxS0FwRXRRdnQ3VEVrNVhRNEdnZ0VFQXFGTWxvN0FvSEFKL28rcGFIK3cvTHljc2RwQklkY1c3YVFGRWJPVFNXRUpLKzk5dHBEalkyTkQxUlVWRlFRUXFyNTA1cnJYRmJyMWdXWVBXOGRHb0lUY08zMTgzRkRLUkRidFEwYk5pekZuSzJ2WWNVekQrSzZ5T245SGltbERkdTNiMzk2d1lJRk1ZY1F0QmZwSWZja3BXYkJnR2lFcEVlbktOVnBLdEdEaE1lSGdHR0N4R2d6bW84b0NOZWNsd0UxTTcvMlNVTFE0d1liQUF3ZlB0eXhRdW93WmtWMVhTZG1aUU1BMVhXZGJRRWhoQkJoK1BEaGI3YTN0OStmazVQemkrUDlYcmk0emg2cnRoWExGcXhEUTJRbVZxMWZqbWtXd0c3RkxUY3N3WXlacTdCazJWWmN1WHdhWEtmUnJEVTJOcTZaT25WcWs4MnRaWWFnbEtZTEJrVFFSTUhxVjRNa2FPanVTYUUzbnFCQ1hoQXVsd3VpTElBUUVXNXZabXRIYVdrcGhnOGYvaTk5czhMeC9HT3YxNHVLaWdvVUZ4ZG5IRXlaNWRSZEtzdHl2NURVTnBXUXlNM04zZERUMC9Nci91em1PbmU1dGdZYmppcTRkUDVDMFNBeHNnQUFJQUJKUkVGVUJtcHBCU2ZlZ3NVTGJzQ1ZrUVJhYmZtdlphc1hZTWJVR2xTTlg0Q3RhZCtIclEvY2hobFR4Nk9tcWdvMWs2N0J6VXMyb1NuQmZNS3R0MkY4MVhRc1dyc2FpMlpQeC9pYUt0U01uNG9aQzlhaXppR2ZscWpmZ0VXenAyUHNpSXFIcXF1cjMyZWNXaTk3RVVJU1lBK1FUSi9jb1p1TnVMTExCNzhrVUlIcUlIbzc5bjd3QWQ0N2xBUWhjYnkvNlM5NDVLL3ZJeFdKb1BqSVU1Z3phdzV1Ly8yZmNOczFrMUJUTlJWTDZnQnNtb2VhcWtsWXNEM3orOXU2WUR5cWF1WmhFL3ZCcHEzSDc1S0tpNHNIZEcxbU9NcUdwR1lMaUJHYXN2azJBWUF3WmNxVWg5OTg4ODFDV1padjRrOXpybk5OZGEvdFFCSzF1R0tLVTZ3WndiUmJsMkphdjQ5dnc4cGxWYmppK3ZsWVZGV0xha1N4ZGRFTXpGbVR3T1FiNW1QcEJCZGFYMXVIbGF0dXdlem9LbXpPY0hzTldMTm9GYTZkUHgvM3pROGl1bTBWbHExY2lObFJGelkvZUIzNnZvdnRXSFp6SFNvKysva245cmY4ZysxWDZ4ZUNzbEFEb0ZNS1NvekZUK204bWdKL1VTbUt2Vjc0UEJKeXhwWUJ4eHJ3d1dFM3hsNHhIUmVQSG9OeFJVVVk1ZzFCa1JKNGZ2a0tqTG4yUnN5ZldZV0pFUUJOUTNlL0MyYlArV1RoWDNWMU5lTHhlTmIyRHdac0dTRXBwWlRxdW01dkFTRTdkKzRVdG16Wjh0RDA2ZE1MUkZHOG1qL1Z1YzRkSmREYUdnV1VDQ0lzMTZLdGFHV2RGbHdJUm9JTW5Fb3g4NzcxV0Q0dGFQejdUVml4SFpod3k0TjRkT0hFOUwrNy9qcEVXaWRoNGFhL1lmdnlhUXdjRlV4ZS9EanV1OUg0Z2xPbW9Dd3hIVE5YcmNDcXV1dXdzTGJ2YTQ2Lzg0bk5uem15NGZrTjhSNm5YalY3RlZRbEF0R2hVNTFTbmFaU0tWQUlVRVFac2l4VGE3amRsdzQ5SmJrWnU0NTRVVGx1SWk0NXZ3TER5OHBRZlN5OVJxL3Fsc2V4Zm1IdGNZZmVkU3VYWU4zQnFrOEdObEVVVVZWVjFROXM3RFNDYmN5S21JVUVJK2ZHRmhNSUlVUzQ2cXFybXVycTZsYlcxTlRrRVVJbThTYzgxN2tDdGtRaURSRVg4eXJldnVRYTNMRHVhTjhIQWpPeDZ0M2xESnlxTVhsaWtJbFpyOFR5elZmYVBuY1ExV1VSWUhzcm9nbWdqeEl1Uk1vaUdkQ2NPUE02VksxYWllMDdXb0ZhOCs4bXZGV3U3SDE2L3Z6NVVWdE9yY2U0ZW0zOWF1bEdYSWxRVUoxcXVrN1ZaQytPdFNkbzNPVkhVWGtJZVVaclJ5QVFnQlNWSVlvdUJQTUxyV1pjOFYwQ0lJRGF5YldmSUo5WWo2MWJHNEF4Q3o1NXdqNGNEcU95c3RLQ1c3WUtLZXZjVExnWlV3a2doSmpGQklFUVFtcHJhOTlyYW1yNmJVbEpTUzRoWkFSLzBuT2QvVEtCWmdET2VEWFgzbklmVmwyYkFCREZ0bVh6c1dvb29WaTBEbXRYck1DYVRkdFJkekNHcEdYUXF0TklHb2dVWlZVb0ExRGYwQVFnQWtwUjM5UFQ5dWQ3WjE3VllvTmFYd1dVeWFzWnVYTXJyeWJMTGlyTE1tUkJwMnFpRi9HZU9Kb2JQZ0wxVGNia2tyUmprenNVU0pJTDRjSVNWRlpXSWh3Ty80dVBaU3NhV2dGbFl2Vy9Wb2tzS3l1ekJ1Ulp1R1hMdFJsUU00ZS96TEJVTXg0Y0FrQW9LeXQ3K2VqUm8vZm41ZVV0QWhEaFQzeXVzeDFza1VnUVNEYWhxUlZBbWVHMXFxZGdXalVBUk5HNlNobENqcWtPRDh5ZWdlV3RFekZuNFhJc3JDNUQwQVhVcmJ3WkN6Y04xVHRhT25xZ3ZYdjE0Y092TkNKenNMM1hJYStXTXZOcTVqSjFkcnJBN1hiRGsxK0VTaVdGcHIzN2NLVGhNRENoQ2prNU9WRGFYWkFrRC9MTEtsQldWblpDSDlWL3VjVmkxS2hSR2E2TkRVbnRKMzlRU3RsOG0yNE93eHJoS1NHRUVFb3B5Yy9QLzN0blo2Yy9GQW90QnVEbVQzNnVzMW0xbDA1RVlNMVcvRzFURTc3KzlVLzRBdCt4Qm10MkFaZXVlQkNMcitzTFVSUEJJUVowOWUrZ0NVQ2txcXozNE1HRHE2NWU4WFlkK3RvNnpQQ1RkV3Y5UWxCQ3FLNG1rMGlKTG5oOU1oUkZzZkpxM2tBZXl2TVBvTE10aVZRZ2pQejhmTGlPdXFFb1BoUlZqUnJTTHdBZ2tVSGYvb3FnS2dJa201cU9yOTNEU1lRUWpCZ3h3cHBNeU0vUHR5WVQ3R05YWmd1SWJmR3lPWEpsdG9Ba0FTVEM0ZkNmdTdxNmVCc0kxMW12NExSYmNIMXBFdStzV0lCSDZoTDl3cXZXMXVRUTdGWUNVUUNKS1BQL0orcncvSTVXdXhzREVFTjlYVDBidzJMVHFrMDRpREdZTWdvUEdlTlNMTlI2R2JobG5MRm12bjdOZmpXQmdGSTloU1RwS3haNHZWNzRQQ25FNGdTQ1B3OWxoZmtvS2lwQ1JXRUlpcUlnbVNTRC8zeVJDQ0tJb2I2K0tlUG5lNjB1eHZ5amFreWJWZ1hzV25OaW1tSURnUUNxcTZ2N0ZSSTBUY3MySUQ5WU1ZRlFTb25mNzMrc3U3dmI0L0Y0YnVkUGY2NnpOeHFkaUlVUExrTGQ3S1ZZT21NNm5yL3VTbHc2cGhRNDJvRFhObTNBdG9ZQUp0d3lFeE1IdEgzWDRzcjhkVmkzWkRibU5WeUphclJpeDZZTjJIRXdDU0NLUkJRQVUydll0WHcyWmpSY2oyc241T1BvYTJ1dyttOUhFYjcwOWdkL01LbmdIdzZoWnc4eWp5T3lPVFd6RVZlaWJoOFE2MHJTK05FV0pMdUR5QW1uMEJOcnc3NzJOclFuWGFpZVBoVVhHSWRHam5TTlF1aUpMVml6WkFsd3hhVzQ3c1pwS0J2bzV5dGRoVlhMYnNhOGd6TXh3WFVRNzJ6YWdPY2JBRENMNEd0dldZeVpHK2FjdUc3L3dzSkN4MXlicXFwc1AxdEdXTW9XRTR4UG85bkQwbG16WmozODV6Ly9XWEc3M2QvbXJ3Q3VzNVp0dFYvSDQ1dHI4Y2l5RlZpemRTMVdySXNocWVTanFuWWFibGs1SC9PdnJCNjRTaGljaHFXUEw0TnIwUXBzV0wwU1cxMVZtSEw5ZlhoOHd2Tll0TElKQjVuOEhSREFGWXNXbzJ6YkNxeGMwb0NvcXhRanI3MzdrZnBYZjdrVi9hY0tyQkNVRUNRb05WZm9XVkRyYThLVlpTaUtqNWFHS0hxaWNjUjdZMmc5SE1OUlFVRzRzQXBUcDE2T2EvOXRKRXBMUzFGVlZZWHl5Ky9FNGplYnNXekRLcXhvemNlMEc2Y05EUDlIbHlHNllBVTJyVnFPcllFcVRMeHVNWlpOWElHRkd6SWZoK1dQcndSaEQzSTdFZHE5ZXpkMjc5Nk54c1pHSERwMENFZU9IRUY3ZTN2RzBVY0dBQWtEUUdMMHV3a0FSRXFwQkVBRzRLS1V1bi8wb3grRmYvakRIOTdpY3JubThaY0ExNWtxVGRQUTFOUjBacCt4dHZVMmpKK3pGZE5Xdll2N0RJN0VZckhmZi92YjM5Nzhoei84b1lkeFpUMEF1bzIzUFlRUXEyQkFqRzFUN1BscXpOSGUxaGxyNXZ5bmViNWFTVWtKaGc4ZmpwcWFHdFRVMUp6VUgvT0V6MmVPSGozYUNrbnQ3UjlaWEp0NTRpNlFXU20xd3RLZi9PUW5uWkZJNU9HNWMrY0tMcGRyTG44SmNYR2RHTVZpc1Q4c1hyeDRpd0cxSkFPMUhnWnEvVTdEZGFxQXNzVUNuOC9uZUx4M1pXVWxSbzhlZmRKL3JoTU9Oa0lJUm84ZWJZSE4zdnFoYVpwMTVDK1RiOHRXS2JVKzUzZSs4NTAyUlZFZXZ1bW1tOERoeHNWMVlxQzJkT25TelN0V3JPaENacUdBYmNETmxsZlRCVUZnTjB4UmN4R0wvY0JJMDYyWlVHT1BCdi9VZ0EwQVBCNFBSbzBhMWE5cDE5YlAxcStZWUxnMDA3V3hjQ09FRURKdjNyeldSQ0x4dTdsejUrcHV0NXVIcFZ4Y24xREo3dGp2Rnk5ZXZHVUFxTEZPcmQvcVBPUEFTR3AzYXViS3ZGQW9aQjBZV1Z4Y2pJcUtDb3dhTlFvZXo2blpkaS9lZmZmZEorVVRtd2RRbW5Beks2UXMzR3pYWUJpbkFMQng0OFlVSWVUOWl5KytXSlZsbVk5ZWNaMHhvcFFpR28yZWdBNzZrNmpLcTNIRHpUYzg4dlN5LzIvTDczNzN1KzVzVGcwT2t3VnNvY0NFbXN2bG91d0p1UGFWZVdhaFlNeVlNY2pQeno5bFArWkpQUU90c0xDdzN6U0NRNFVVVEo3TnFwUUNnRzFnSG9RUVVFcXhkT2xTdlBYV1d3K3VYYnMyNmZWNmVTc0lGOWNRMWRIUjhlQVZWMXl4OWEyMzNrcG1jMnF3SFVQRVZqOHpLNkI5VHMzYzJzN20xSXFLaWxCUlVZR1JJMGVpc0xEd2xQNmNKLzF3eC9MeThnelh4azRqMkYxYitwY2VKUUNvcXFvbTNEUTJMRFhodG5IalJ2aDh2ditOeFdLOWZyLy9kdkFKQlM2dWdkVGIydHI2VUVGQndUL1EvL1RiZ2FDbUVVSTBvZThJb3F6aFp6QVlSRGljbmlvb0tpckNzR0hEck9iOVU2MVRjbXB0ZFhWMTF1UERtVk4yVFR0djVkcFVWVFgvemhGdUFCQUlCUDdZMGRIUkhRNkhid09mTGVYaWN0TFJnd2NQcmpJbUN0alp6eDViK09rSU5XYkJjUWJVbkZibm1WQXJMeS9IaUJFalVGMTllazc5UDJYSGNkZlUxR1RiaStEbzNFeTRBZW4rb0FIZ1JuTnljdGEzdExSMFJTS1JiL0ZUUWJpNHdCcUYrdnI2K3RValI0NnNHOFNwSmJKQmpjMnBaUXMvbmFCMnNudlZ6Z2l3QWNEWXNXUDd3UzBMMkN5NG1RbTNiSEF6LzF4WVdQaHNZMk5qZE5pd1lmTUVRYmlJUDZXNXpuVnBtdmJXdSsrKysrY0xMN3l3RWYxblB3ZHI2YkNnTmxoT3pZUmFZV0VoeXN2TFVWMWRqYkZqeDU3V24vMlVnbzBRZ3JGangyWjFiUTYvYlZnSDV3ZzM0L05TU2lrZFBuejRQM2JzMk5FNWJ0eTRiNHFpZUJWL2FuT2Q4VHIydTVQeWFWTXBiZk9XYmJ1ZXZtcm0vUzFNK0dtZi9ld2h4cnE4VEtoUmpSQktSWUZRVWFCVWxuVElvZzZYcE1JdHEvQXFLZmpkU1FROUNZUzlQY2p6ZDZFd0ZFZDVYaFRWaFowWVc5NEdFbjM5M0FFYkFNaXliTUZ0RU1mRzV0dXl3WTBhSDZkbWFEcHg0c1FQMXE5ZnYveWFhNjVwVlJUbGEveVZ3M1d1cWJzNytjVERqMjE3ZnY0ZGY0NE9BTFZlQWlSQVlLdCtRaU1FYWFpSmhNcXlBRVVXNFhKSjFPMlc0ZlVvOFBsY0NQamRDSWU4eU12MW82Z3doUExTWEZRUEw4RFltbExJa25qYUg0UFRzdkxPN1haajdOaXhqbmsyMXEyeElTa2hCS2xVS24wVVNQci8wL3JZbHVuY1pzeVljYkNtcHVaWGI3enh4aEcvM3o4ZmZMVWYxN2todGEwOS90RDRmL3V2bHc4MngrMDdDdGp6MUV5bzJad2FkSUdBQ2dLaGtnRTFXUmFRNkV6UXpxQUxZM0xTVUFzR0dLZ1ZoRkJXbW92cTRSR01IVk1DdDFzK0l4NkkwL2FDOS9sOEZ0enNZTE9IcFlRUWF1VFQ3SzBnOWdrRmFzSnQ5KzdkZWlBUWVLeWxwZVZ3SkJLNWhTOWw1anBUdGYyZSszSHowZjhYNy82NjloUHZEYVdVTmpUdU83cW1lc0tpOTVHNVRhcmZlV29NMU5TQm9LWW9JblVwSXFpUVJGS1I0ZmU1RVRDaGx1ZEhVVUd3RDJvMXBmQjVYYWgvOXAvWW5qOE9OMzdHNy9CZHhySDF2bWV3NU9uOWFJcEppSXdiaDhVL21ZNHJTODRpc0FIcGM5ekdqaDNyNk5qWXZCeDcvd2FCRzJXZEd3QmFXRmo0YkYxZDNlRlJvMFo5WFJURnovS1hFZGRaWjlOVWJldjJOeHFlbm5yMUw1eVdHZHVQODA2QTlCM3AzUWMxUWdVQlZKSUVLa3ZFZ0pvTXQxdUFKaEtJTGhjQ0FUZHlXS2RXMWdlMVFNQU5RRVhkYzY5Z1pVbVZJOWhhbjMwR3R6MHRZZWxqdCtPNmtsNXMvZEVhekx2akRXeCs3Q0tVblUxZ0E0QlFLR1RCYlJDbzlZT2JrVzlqejNPemdHYkFUUWVnMTliV3ZyMTY5ZXBETTJiTStOanRkcy9oTHdXdU0xV0paOWRoL0lQQWphTVQyTHF6RGExSkY2YmROaFBMUDU4SEYxcXc3RC9XWVB2b0tyajJ0S0FwbG9CWU5XYjFlU1BWTGIrNTV5OHhaTFp6Mk1OUGErNlRVcVFFUWpRUTZDYlVSQUZVVGVrMG1kUUJRcWdnRTVTVnl2QjZSR2dTME8xMkdWRHpRRHUwSDM5NkxvWk8zWXZ5Qzhmamh6OGVqdXVDKzdIa1A1N0Mya01hWWxpRFNYc3V3ZU1QWDRTK01FbkZqdWNPSWZqdnMzQmRpUVRBajJsenhxSDZLeDlpZSt3aVhKK293N3l2YkVYa1o3ZGk2V2ZPQXJBQjZZMVhBNVdIVGNBUlFzeUxFa0tJbVhNemMyMjZybE8ydjQxMWJqZmVlT01oQVBlM3RiVjluSnViZXd1QVl2NHk0am9qZGVnWWNOY3NiUDZaSDlGWG44SDBPMTdDcHMvT3hIVUJBRWlnVlJtRDlYLzVRblB5NC8xL0xKdHd6OXRiKzVhcUpCbUlzVWQ1SndoQmtsS2tRS0FLSUJvSU5JR0FFb0hvb2tCQVV4clZpSUNjUEJmMVN4VHRyUW0wZElzb0szQkJsUVVvM25UNDZUbjZNVmJ2Q3VLMkg4L0F2TXR6OGZGanorTG1iMjlHNUM5WFlmRmZic1dFMjMrTlpTVTM0T1VGOWhHcVhyVEdWRVJLR0NlWDcwY0V2V2c5Q21ENE1OeHkxNzhqT080c2NXeW1jbkp5TXVER1FLd2YyT3pPRFFCaDVrcjdPVGNBdXVIZWFGNWUzbC9yNnVvK0hqVnExRTJpS0Y3T1gwVmNaNXhLcWpEVENPV0NvNGVoT3ZrR1dtTUFBZ0Fnb21aeXhVdDd0Mys0NFpLcmZ0R0VnYmV6OTlwQ1R4VkloNTZFUUJjRVFnV0JRSklJSlJwQlVnY2xnZ2lYMzRVUnVVRW9YaStDQVFrcFJVRFU3ME54Z1F2MXIzV2gra3VmeDd6TGh5RW43RVhPYlpmaHVxZlhZYzAvcG1QS1lJbWVmcXNiUkFBcVlra0E4R1BpWi8xblR5aHFoOXQ1NTUzWEQyb0RRSTZTdFBybDNDd2IxOWNPWW9hbVdtMXQ3ZHMvKzluUEdyL3puZS9zOG5xOS9NaHhyak5YUmpVaFlXeGo2VWxwRDcveTJOcVhIMzV1VzQ4dG45Wi83eWVRcEVDS1dGQ0REdlJCVFJRSmxTUUNXUktnZUNYcTdra2gydDZOenJZZUJDSzVPTC9Zalp5d2dxUmJSR2NvaVBJeU54cFVMMm92SElHY3NOZE1KcUdxUk1YelIzc3g2TGkyWXYrQUJrQkNRRG54RDlzWjF3WVJEb2VIQkRkN1dHcStieHlOcEp0QVk0b0tPaUhFZEc3NkhYZmNvZDl4eHgzL2UrREFnYjJscGFVM0UwSW04bGNSMTVrcXF0TjNkdTA1c3Y3dVZ4cjNBbzJxUXo0dHc2VVJnaVNvQlRTTkVHaWcwRUZBQlpGUVNTQlVrdEx0SElvaVVna0V2a0kveXYwS2ZMS081bytPNHQybWZFd1k0VWZTSTZFdE53Y2pxdk1RclhnZnIwWjE1anVMbytHb2hFaitZR2RRdUJISmw5QjZLQTRnbFA3UTBUaGE0VVBrSkp4bUpKeUpOekVVQ21IY3VIRVlPWElraGcwYmh1TGlZa1FpRWVUazVHUmI3VWNWUlFHejJvOHlxLzAwNDR6MkZJQWtJU1JCQ0RIUGMrOHVMeS9mdW03ZHVoLzI5dmF1NGk4ZnJqTlJxcTZ0ZnZHSkxmOVRPL2wvZGlOeno2ZjFQR1l1YTBVZU5aMmFjWlphK2hjODI4NGhHSTIzSWxMSGVyQy9UWVhzZFNPVTQwZStYNExpODZHNEtJaDhuNEpBUVQ3R2phbkJGMmNQUjkycUY3RGhrQXFnRnpzZTJZb05HSU1iL2g4SmdBU1hTMEtpN1JoYUUvMDkxSlRMaGlINjNIYXNiVlNCeERGc1d2VU82c2VOd3BSQUdwQTdYbXhBZmVJc2RXeW1Bb0VBeG8wYkIwRVFIQzlDaVAydDVkeFNxWlJaTVdXTENwUUpUVTMzcGdIUXZ2U2xMelVCK0UxVFU5UE9rcEtTbXdnaEUvakxpZXQwUzlmcHV4L1d0NjlmKytHYmU3RHNUWlVKUFpPT0xvMkJHYVY5K3dsSXVqOU5GeWhGU3RkcFQxS0V6eXRDVVNUcWRrbHd1MlhrajFDZ0hJemhuVGZqb0tLTWdvcGhtSDFWR1NyS3ZVZ0VYRGhZV29KQXdJM0E1NytBQjQ4K2d5WC8rV3NzaUVtSWpCNkR4YitaamlsR3lEemwrbkVvdStNcFRQM1BTL0RNRXhlRGJSNE5Ydlh2ZVBEUWMxZzA5OWRZWlBTeDNmZVRpZWxXajZQN3NmSkhXMUgybTF1eCtQeC8vYkU3NFZ1cVRyUjZlM3Z4d1FjZm9MNitIZ2NPSE1EaHc0ZHg5T2hSZEhaMklocU5vcXVyeTlwOGxVZ2t6RjBMaE5sK0JWM1hDYVZVTUM4amF5a0JrQ21saXBISmNBRndyVnExS2pKcjFxenJ2Vjd2LytFdkxhN2owU2ZhVXBWbFZqUWE2M24wZ2Y5OWNkc2RkejhWUjErQmdCMlBZc1BRZE9nSk52UWtPa0gvSW9Fc0NaQmxrYnFVdEx2eXVHVjR2YTZNaVlMOHZBQ0tDa0lvTDh1eHhxVE9sSW1DVDcxanN5Snp0eHZubjM4K1JGSHNkN0h1emViZ3NoVVZLSk43TTRzS090SlZVdzJBT21mT0hHM09uRGtQN2QyNzk2MnFxcW9iUkZHY3hsK3lYS2NzN0ZUMWwzZStmK0NaQ3krNzkyTURVbmFYeHViVWtnUklaa3dSb0s4L3pYQnFWQlNZSW9FaVVrV1I0SGJKY0J0UTgvdGNDQVk4eUFsNWtaL0h6SDVXRldEc21ETmo5dk9zQXh1UUhwd2ZQMzQ4SkVucUJ6YjdXd1oyVkJBRUlnZ0NWRldsekw2RjlONi92dERVcUJRUnpReE5BYWlqUm8xNmZjU0lFVHRmZi8zMTYzSnljbTRDVU1wZmRsd25TNVRpNEpIV1kwOStadHBQM21oS3ozbXlVRXM0WEVrSGw5WVhlcHFUQkdKZmtTRHQxR1M0M1JMY2JnVStiM3IyTXhUd0lCejJJV0pDclN3WEk0WVhZdXlZVXB5Q2hWTG5MdGlBZEh2SGVlZWRCMG1Tamdkdy9TcW1oQkJxaEtaZ25adVpkME42RzcwR1FQM29vNC9VM056YzlSczNibnpqc3NzdSs2TGI3YjZKdndTNVRxaEMvd2RkWFYxci92clh2Mjc3NmxmbmRRemkwZ3lnRVJOb0tlTVhzWFYrR3JPYkFKSWtPZTc4TkUrK3RlLzlaSS96UHAySFJKNVRZRE5WVTFNRFdaYk5DaWlNTldDT0lhb0pOK010WWVBR1BTM3JTQ1N6Z2RmSnZWMTk5ZFdOQUg1YlYxZjM2c2lSSTJkS2t2VHYvQlhKOWE4cWxVbzl2MlBIamsyVEowOCt3QUF0RzlTU0ROUlU5QTJ3bXhHSHRXekZPTWJiZkoxUVJWRmdQeURTaEZwdWJtN0dpcnpUZVp6M09RMDJJTDFEd1d6dk1DOFdjRTZocVhIRHJkQ1VxWnBhcm8wSlRUWEd2VmxQb3RyYTJyY0F2Ti9VMVBSQ2NYSHhsL2hKdlZ5ZlJMcXV2OW5RMFBETXlKRWpkNW0vUEcxQVN6cTR0SlNEUzlPWml4cS8yTE5DemV2MXd1djFJaEFJV0hzL0N3b0tMS2lOSERueXRDeGU0V0JqVkY1ZW5nRTM4MmFhb2FyZHhSbWdzK0NXU3FVb0ljUTg4TkplV05BWndHVzROd0Nwc3JLeUZ5Kzg4TUovUHZ2c3MxZm01ZVY5aVJCU3cxK3VYSVBuMGVpZTV1Ym1wNmRQbjc1ajE2NWRLcE1mWTNOcDdOdWtEV29xODB2WEFwcTVFazhVUmZhWFBYVzVYQmxRTTVldW1Icy9JNUVJU2twS3JHWEdwM3BGM3NuVVNWdVlmQ3BrMm1tbmZKejVkb0J4TEh0YTFKd3JoUUU0R0hDekduMU4yQUhRbTV1YnRlWExsemVrVXFrWExyamdnbWEzMjExQ0NNbmhMOTl6R2x5T0M1TXBwWTJ0cmEyUExWeTQ4RSt6WjgvZWYvVG9VYnNyNjNka045TExWWHJ0K1RSbWNiSFRSbllvaWtJVlJlbVhTMk9CeGk1ZHFhNnVQdVhMakxsakc0Snljbkp3L3ZubncvenR4RXdnWk9UaDJDdVJTRGlHcG94N000ZnJCVnQ0cWdGUWpmQTBCU0IxNzczM0p1Kzk5OTYvTEYyNjlJVnZmL3ZiMDBPaDBFeCtxQ1dYQWJTRzF0YldEY3VXTFh2cmw3LzhaUytURzNQS3BiRmhhQXJwNDRWVVFtQkdDeHBBK2tZRkFVcEFhUHFwU2tCQlFDbW9UZ0ZLQ1hRS2FEcUZwZ09xUnBIU2dKUUdKRldLaEFva1VrQnZpcUFuUmJEN293TUFEcHhWai8ybjJyR1prbVVaaFlXRmpxZUFESEhlMUc3Z3pCTjcyUk5DN05WVHk3MEIwTFpzMlpMNCtjOS92cmU3dS92NUN5NjRvTW5qOGVRU1FncjR5L3ZjYzJ6QllMQ3VwYVhsRDkvNzN2Y2VuejE3ZHVNLy8vblBYZ2VIMW0rbnB5Mm5waEppZ2RESXA2V2ZpNFFJRUFXUmlwSUlTVEp5YWJJTVJVbi9jbmU1M1hDN1BmQjZmZkQ1L0FnRUF3aUZ3c2pKeVVWK3BBREZ4U1VvSHpZTVZkVWpJRW55V1hrdnp2akpnK1BWeHg5L2pJYUdCalExTlZsVENoMGRIWWhHbzRqRll1anU3a1ozZHpkNmUzdVJTQ1NRVENiTlRmV0VYZXFzNnpveEwrTnhNcWNXMk1rRmlWSXFBNUNSUHJ2QXVxcXFxcFJYWG5sbGFtRmg0VFdDSUZ6TVgvWm52NUxKNVBZMzNuampoYTk4NVN2dk56VTFtU05OckVPekZ3Z3lISm94MDh5TVFoSHpseWhsSzU1bW9Zd3RFR1FyRXBqdEhHYjRXVlpXaHFxcUtsUldWcDdWOStLc1czSlNXVmtKajhkakRzZWJlWWVoRkJpb1VVMGxxcXBhNGFuWjkyYTZOU004MVFjSVQ1TUFsSWFHQnFXa3BPUUZBTnYyN3QwN29iS3ljcm9zeTUvbkwvK3pUNGxFNG0rN2QrOStkY0tFQ1kwTXpOaXdNK2tBTlJaMnFnRTFxOXBwZ0kyYXhRSGp1VW1aNTY0Rk5ET254aFlKL0g1L1JrNnR1TGpZeXFtZFRVV0Njd1pzQUZCWVdBaXYxMnNCenUxMmczMFMyT0hXMjl0ckFTNlpUR2JMdlZGS0tXSFBlRFBQZDJPZW1DbkR3Vm1BQTZDTUdqWHFkUUR2dlBEQ0MwOU1talRwVXIvZmZ3MXd3bzk1NXpxMVlXZFRMQlo3N3NVWFgzejdpMS84NHRFc1FIT0NtdW5PckdGMUk0K20yNnVkQnRSZ1Zqek41NnVUU3pPaFppOFVtTzBjWnVOdElCQTRKKzdQV1JlSzJuTWVlL2Z1eGI1OSszRG8wQ0cwdExTZ3ZiM2RHcUNQeCtQV0FMMFptaHBEOUVnbWsxQlYxWFJ2R2VHcHNYaEdvSlFTdzhHWjRhbDVzU0VxRzZyS0FKUWJicmpCdlh6NThza0ZCUVdYUzVMRVQvSDlGRWxWMVJjUEhEanc2dTIzMzc3cnFhZWVTZzBSYUNrNzBBQzJLSkFCTTkyY2QyYkRUdGFseWJJTXRwWERQa2tRRG9lUm01dUx3c0xDakhZTzhtbWRqK0pnYzFaVFV4TSsvdmhqTkRVMW9hV2xCVzF0YlFQbTNjemNXeXFWZ25sS0NBTTRZcXdNSk93MUFPQ2tMSUNUQWNpYk4yOHV2K2lpaXlZSEFvSHB2Qi91alAwRnVhZXpzL09sYmR1MnZmdkZMMzZ4alFHU0U5QlNXWUNtMm9GbUhueHFocHQybDhZQ3pleFBNMTNhUVBtMHZMdzhGQllXb3F5c0RKV1ZsU2dyTy9lQ2czTUNiQURRMmRtWlVWUm9iVzFGUjBjSGpoMDdobGdzWmgxLzFOdmI2MVJZZ0FFMllybzNGbkJNZ1lFRkhGdGtFQTBIWjRkY3h2WGVlKy9WVkZkWFgrenhlQzRIVU1LUmNscGhkcWk3dS91bHVycTZIWk1tVGRxUHZpcjRZRUN6NTg1WVYyY1BPYWw1SUFPVDQyVmRHanZyNlJoNnNrMjM3TXluV1NTdzk5UnhzSjJGMGpRTjlmWDEyTDkvUDVxYm05SGEyb3EydGpZY08zYk1PdHV0cTZ2TE90dXR0N2MzQTI0TzdzME1UODB6M3dZQzNGQWdaMzVNMnIxNzk3aUtpb3FMM0c3M1pSeHlwdzVtUFQwOTJ6NzY2S04zeDQ4ZjMyZ0xGNTJBcGc0Ulp2MkFCbXNQQnlnUkNCUlo3aGQyc2k3TkxCQzRYQzVyM3RQbjh5RVlEQ0lVQ2lFdkx3K1JTTVRLcDFWWFYwTVV4WFAyWHA1VFlEUFYzTnlNZmZ2MjRlREJnemh5NUVoR2FCcVB4eTI0c1lkWHNuQmpBY2NVRndZQ0hESEFKamlFcVpJTmFyTHRZOUxPblR0SFYxVlZUZkI2dlJjVFFzWnlCSjA0NmJwZTE5WFY5ZHFlUFh2cUxycm9JdGFaNlF5WUJnS2F5Z0JOcFpTcVJxWGM2bkUwTjZXeFFETXJuYnF1VTBFUTRYYTcrZ0hOSG5wNlBKNStRK3htNkZsUVVJRFMwbEpVVkZTZ3VKaHZsandud1FZQTNkM2RhR3hzek9oM2EyOXZ4N0ZqeHhDUHh4R1B4eTI0T1lXbVdjSlRDM0FPT1RqQ09MaU1YQndET0NmUVpmemR4bzBiaXkrODhNTGFjRGc4UVpibGkyRnR4dUFhb282bFVxblgydHJhZHY3em4vK3NuekZqUnBzQklIMEFkK1lFTmZhRWpYN0ZBTWFoV2Jrek5vZG1GZ1kwVFljb2l2RDV2T3p3ZXIvUTA0U2EzKy92MThwaGhwN0RodytIMSt2bGQvaGNCcHVwQXdjTzRNQ0JBemgwNkJCYVcxc0hySnF5b2FrdDl6WVk0TUFXR1d5UU01MmNHYWFLZHBnNUFRNkFPSDc4ZVBtUlJ4NnBxcXFxR3UzMys4K1hKT2t6QVB6OGFaMmh1S3FxYjBXajBmZjM3dDNiOEkxdmZLT3BycTZ1MytTSUxYVE1CalFXWnV6L285dUFaamswNDRJZGFHYllxYW9hRlNVSkFiOHZBMmhzYjFxMnFxYzV4RjVlWG43V25NckJ3WFlDRll2RnJOQ1VyWnFhN3MxcHIwSVc5NVlCT0YzWDdWVlVaQWxUN1pBelExVXJMK2NBTnNuMmQySkZSWVc0WnMyYVlTTkhqcXdLaFVLalpWaytqeEF5NGh6TGszMlVUQ1kvNk9qbytHajM3dDM3dnZhMXI3VTBOVFhwTmxmbTVNNnl1VFRyNzh4bWJOdm55SUNaemFHQnJYS2F4Mm14aFlGa1NvVWtTUWlIZ2hrdXpRdzk3UTIzYk5YVEREM1BsZDQwRHJaL3diMnhWVlBUdmNWaXNhdzlidzY1Tnd0d3Buc3pJV2NQVXhuQU9ZV3E5bkJWdEFITzZYM1JmdjNpRjcvd1gzSEZGU1dscGFYRC9INy9jRm1XUndpQ01CcldLdDVQclJLNnJ1OUpKcFAxc1ZoczMvNzkrdzgrOTl4ekxYZmRkVmVQQ1poQllKWU5haG52TTg0c0k4eGtRMDNZNW9tWncwMklwUWlYQUFBR0dVbEVRVlF0bURFdWpUS050a2drVTVBa0dYbTU0YXk5YVlGQUlNT2xtYUVuZDJrY2JFTldWMWNYOXUvZmJ6WDAybnZlc2hVV3NnRk8wN1RCQUdkM2NTYmdpQVBrQkFmSURmYSs2T0FHaGZYcjErZlgxTlJFOHZQekMvMStmNGtzeThXaUtKWVJRc294NkVydlU2WmVTdWtCVGRNT0pwUEo1bmc4M256a3lKSFd1cnE2dGk5Lytjc2RZQTRtR0FSbTJSeWE0L3YyNUQ4TE0vUXRBS0pzTWNCMFp3QWdTVkkvb0xGOWFXeHhvS2MzbVQ3RW9TQy9YNEhBcVRldHBLUUV3NFlOZzgvbjR5OVdEcmJqMStIRGgvc1ZGdXp1emQ3VWEwNHNPTGczcS9lTkJaeW1hU2JZd1BUQ3djSEYyU0ZuQVlxQjNHQ1hZSHRmc0wxdjVmOSsvZXRmKzhlTkd4Y3NLaW9LaGtLaG9OZnJEU3FLRXBRa0tTaUtZbEFRQkQ4aHhFOEk4UkZDUEFZSXpRTUF6TThKQmd6VzJqaEthUStsdEl0U0d0ZDFQYTVwV2t4VjFXZ2lrWWgyZDNmSE9qczdvODNOemJHZE8zZkdGeXhZME0zQWk5cEFSZ2VBbVc1eldOcGdsLzI4dld3d1kwRm11ak5tU3hvRkFFVlJMSmpaV2pneWlnT3lMS083SndsRlVWQlNYR0ExMjlwZEdsc2dLQ29xNGk5T0RyWi9UYWxVeWlvc0hEbHl4TnBuT3RTbTNxRUN6dWJpV0FjM0VPUWNZY2RNUHdnRFFFMTBBSnY5WXIvT1FCY2MzdHJmejBpRE9ielB2aDNvc29QTWZtVnphZjNlTjQ5K2Q0TFlZREF6MzdmdDFJQW9pcUNVd3VWeVpRV2F2ZUlaNytxRnkrVkN4YkRTakdiYmNEaU0vUHg4RkJRVVdBVUNXWmI1aTVLRDdjVHAyTEZqT0hqd1lML2MyMUQ2M295WlUzdDRtaEdtR3U3Tmdwd3h6V0NGcXN4OXN1ZmtpQU9Fc3NGT3lBSXpjUWhnWXdFbk9FQnRJTUFOQkRjNzBPQUFzWUVjbXA3RnJka1QrNE5DakNrQVVGdVlhY0xNS2dRd0ZjNk1IUnVpS0ZKS0tkeHVkd2JRSkVteUhKcTlPQkNOZGNQdDhXRFVpT0g5S3A1RlJVVW9MUzFGS01RN2VqallUcUphV2xveTNCczdralZRYTBnMjk4YTJoNWpWVTV1TEF6TjBiN28zZTA0T0RvNXVVT0RacXJGT1FCc0lic2ZqM0k0SGJNY1Rkam9DanFsT1pnVVlBeThXbm1Celp1YWYyVENUWFE3RUFJMnl1VFJLS2J4ZWIxYVhabS9oNkl4MndldjE0Znp6YXF4ejAweVhkaTRjTDhUQmRnYnB3SUVEbG50ektpN1lxNmRPclNHcFZNcHliamJBUWRkMTRnQTQxc25CRnFyYTNaejl6M1lvWlhWaUR1RXVHUVJzMlZ5YlBTU2xBOEJ0SU1EcFRuOW1vRFNRczdQL1B4bGZpLzJ6TGRTRTNablpnRVp0bFU3cmJEOWQxK0h6K1Fac3RHVm5QTnM2WWdnRWdwZ3lhYUxsMG5pMWs0UHR0Q21aVE9MUW9VUDlpZ3RzZURwWS9tMEE5ellnNU14aUErUGs3RzRPV1J5ZEhVUk8xNkRPakEySFQwYU96YlpVaHc0UmVQWUx0aVBkWVFlWjNaV1p6b3pKbjJXRm1SMXFKdGcwVFVNd0dCeHdhSjF0dEcwNWVnemhjQTZ1dVB3U2xKU1VRRkVVL3VMaVlEdjk2dW5wNlJlZXN0WFRvYlNIMk9GbW0yQndta2UxUTQ1dEhZRkRYZzQyS01IQjJXRUFKemJVZkpvVHpMSTV0cUVXRXV5QXd3QUFneDFjOWp3Wmt5K0RMVzltMzBPYkFUTzJmWU5kMUczUHBXbWFobkE0bkhXKzA2eDJtbUhud2NQdHlJOFU0TEpMK0lyYUV5bUpQd1QvbWp3ZUQ2cXJxMUZVVklURGh3OW5ETld6K1RjVGNIWUhOMUQxMUFGd2xNbkRFUnZncUExMDVrVk5vRkZLemNNRzJWOW9nNExLQ1lZRHdHeW9weG5Tb1VMT1lTMGliQ0VsKzI4ejNtZWNtU1BJSElCRzdVdTNCd01hZTJtYWhweWNuSDViMTltamhjeWg5YUtpSWtDcTV5OGlEcll6Vno2ZkQ5WFYxU2d1THU2WGYyUGJRK3lBczgrZVpta1BjUXBScVFrMVRkT3MvSnNUNkV6QU1hN09oRjAvMTg1QWJEQm9aUVBZSndWYlZzQXhKNy8yMGJnUGRyQTVzZ3lJMmNMTWZpQXpONmpiUTgvQndrNTdEczI4VkZWRmZuNitkYXlRSFdobUhvMFBxM093ZmFyazlYcFJWVldGa3BJU0svL1cxdGFXMGYvbVZFRTlIZ2RuQzA4ejNCeWJnM053Y0hiWW1YQmozMlpBai8yN1U1SENZQjJYN1dQOTRHVjc2d2d4QjZCbDVOQllxTm5EenNFY21qMkg1bmE3a1VxbFVGSlNrdEdQbHBlWFp6WFp1dDF1L2lMaFlQdjB5dTEyVzhjeXN3VUd0b0xLQXU1NGNuQU83czJwVGNRT3VuNEZCOVBaMlFISC9Ka3lSUW5XMWZXam1oUDhodUxVbk03aFp6L0dnc3ZteHV6dUxBTm1iSXRHbHZ5Wlk3ZzVWSWRtejZHWlV3T3BWQXFWbFpYSXljbkptQnFRSlA1U081WDYvd0hGMUZuWjhqMWl4d0FBQUFCSlJVNUVya0pnZ2c9PSJdLFsxLCJkZXNjcmlwdGlvbiJdLFsic3JjIiwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFUWUFBQUUyQ0FZQUFBRHJ2TDZwQUFCTUMzcFVXSFJTWVhjZ2NISnZabWxzWlNCMGVYQmxJR1Y0YVdZQUFIamFyZjFadGlXNWxXVUwva3Nyb2draXFBUm9EaW9aNC9VZ201OXo0aWlOUnRJOUl2eGxtbElMM251dUZNQXUxdG9WcnYzLytYKys2My85ci8vMXZLbWtLK1czbGxiS3pYK3BwUlk2LzZqMzc3OTIvbnp1ZFA0OC84WHk1MS9QdjM3OSt1c2JnYitqbi94OTQrMi92NS9PMS9NL2YrQWY5M2pHdjM3OXFuKytFK3FmQy8zNUJoZitQWUYzOXQvcjd3L0oxOFB2NjAvNmM2RzJmLzhvcmI1L2Y5VHg1MEx6endmUG8vejVuZjU2ck45Zi92L3JYNzd3c2tvcmM2TVl3bzVQdk0rZjZmY0U4ZmU3OC9zOWZ3WSs5L0MxSG1Nc0YzODk4ZjF6TVJia1gxN3ZIMy9mOTk4WDZGOFcrUi8vdXY1OTlmLzYxNzh0ZnVoL3ZoNy9iUzNMbnpXNnkzLzlqU2YvMjlmalg3Y0oveUlPZnoxUitOZHYzQ0hGLzNpZFA3Ky9iOVh2MjcrMzYwaGhTK1dQUkozRmZ2NXhHVDQ0V1BKNGZxenc2K1YzNXQvditkWDRWZTkrVDdaODNmTWUvSnBQZXdLNzhsMVBldGJUbisvWjUrLzVUQjR4aFIxZS9nNWhobmkrVnVNYldwalJmVXIrZXI3d3hoWlhyT3piRFB0aTYxSU1mejNMYys3Ynp2M21VN256ZXZob2VMaVlXLzNmL3JyK2Q5LzhuL3k2dm0rNlJNOWQvMW9ybmlzbzF6eUdPK2VmZklvTmViNC8rNWJQQXYvajE1L3R2LzhtUDRncU81alBNbGRlc04vamQ0bVJuMy9LVmp6N0hQbGM1dStmQ2ozWHUvNWNnQ1hpM3BtSGVTSTdjSmNuNXFjODl4dkMrenlzWTJXRE9rOGVZZ3FESFhoeURvdUhSRjVpQ2RjYmF2RGUvTXo3bk0rR0hFcnd5OWdtTmlMSGdtNVZkcWl6V1NsbDVPZE5GUm5xT2VhVWN5NzV6ZlhLTGZjU1N5cTVsUElXalZ4LzQ1dmUvSmIzZmV2YjNsNWpUVFhYVXQ5YWE2dTloUmF4Z2JtVjlyYmFXdXM5WEowYmRhN1YrWHpuS3lPTU9OTElvNHgzMU5GR240alBURFBQTXQ5Wlo1dDloUlVYWm1LVjlhNjYydXI3dVRhV1lxZWRkOW52cnJ2dC9pRnJYL3pTbDcveXZWLzkydGYvMnJVL3Uvb2Z2LzRIdS9iODJiVndkc3JQdlgvdEdsKzkzdmNmbDNnMEo5azlZOGRDZXRqeDF4MUFvSU43ZHRjbnBlRE91V2QzQ3loRkRqeGtkbSt1OWJoamJHSGFUOGpmODlmZS9YUG4vcS8yN2NyMS8ycmZ3djlwNXk2Mzd2OGZPM2V4ZGYrNWIvL0ZyaTM5M0R3Nzl0TkMxL1NPYUIrZjZhRmUvTDV2L3ZqcmJ4NnA3cDdMNkhuMWtXZGVxYU1pOTc3ZkY0ZnljTm1aWW45M3YxTllPNlV2aHBUZUs5YlFhOFpPNWErTnNkNTdiTmM4c0Radit1cFQ4RnJQZHFuaXpwVTFybjIrYlkvNjFMN2pPOHZIaDNkdVY0bTR5QkV3WllWbHIyRnpFNHhmLzdob1N5ekJ5Ty9xZmMzMDNqUHcxbndYYnh2WTBkeGEvWW8rT283N1lzTy9Pbm1aK0w1ZnFXekQyaG1mSHNZSXZleU1Sd1FJUEx4bG5hT3R0Tk5ZTGZPY3VZWE1wbjdJRXdKVXI0RVJYcFhuQ3FuMVBWL2V1ZWIxZm04cjlldTFqUFkrWDBFb0lxKzVXMThkTzlNeisvSHVaM0NoTjIwOHdYczk3QjR1b3ZZdjU0OHYxUHlsOGQxblQvSGdkY2U2MlUvMnJxZUVvSTVVU3docnR2ZkZ3MVJXWkIzZHVjbzdubDE0elZsSGlqek5ZQWsvMUFJZHdINDlwYWtNbjFMNTdmemwrWlhKbzhWbnQ3ejJxdStlSDF0Y1VKRjVmMzN0d2Q1K01kWTc5ekJTdXRtZDk1bDF6YVVYV3QvZGVjYjhEbDV2ZlVoUFdPTmIrL2xtcnl1OSs3dDRpcXg0N1BjcDczZHZmTUhMejh4UjJteFl5UGQ5NHNhdnpwQnY5Z3VkRDNmSmRhUHJHNmYyN0luRVBTdGNJMDFla2o4aXQrbys5aGZualpjYjNyT2xYZGt5ZGk2dSs5c2pvVm85OFlnN3NJTVlsekpDclNHeC9ST1JhQ24wdlZXbnVUN1dsbHVQK2IwbzNVNEZ1WWozN3JQaWRYZGdDOUM1d2M2OUxoMVh3L1lnRi9uQ1BvVGt4U3BxRm5meC9kdHV3Yi9YTjgvL2YzcGhzNTZuWlRTNzNURTJmWGdZYjNpLzJIZGVJNjFyTEY0bTNQVkxyR0ZpRHpzT0tiY1JlL3RRY09CdVcyTmdtQ2Jid2Y4d1ZteFRiL0Vib1dDcGtLblUzdHd2Zk5OQ013YzdIVkpCcWdlR0I3QUFzcHZJRnpadWJZVGpyZXZMQTJVWmUvS1lOeS9sRFNKcjIrWm10NitOVGoxekZVeGJRMWI3eWx2ZGY3Rkk5K0JSRUtHMVFJeHo4ckUzSEQwc1dJK2V4aHorYnF2MDlhQzAyaWJjNTQ1ZUxjekdNOTJycHJLUnI0YXRpYngxZjduTGcwenNqcWxhcTdRV01GQXBsZHJ2dkxnT3lMOWl4UFljRHlZWlJOWEJWeEdiSWk1ZTZkdFAvbGhXVmd2SlNia2lNYTN4a2JYcUxPbDdFTlFYRlUxeFFpRSszalJyVEJIVittSXdzQVgrTDhUQjVzNCtaOFFmb0x4M1RoZ2w5QmdsMzl3OUxwVDNld0Y2b1E5c2RydmRZdlFUK01YYjgrK1krMTJ3emJIM3Q5NWpZaGZpM2RvM0s0dkNVOTI1WVUxNGhUbEIvckVzbHZ2Q3pNWE5qc3hjbnBSN1RSanE4S1EzSUlNZExxQ0h1d3VMZ3lmSWc0MGFoZWNjdXdGV3h1eGxsWVNIQUVUVW1QSjRja1RVSjJwWHNPOFQzTHJiZk4rdU1MSDNyT1BEc2lEc3ZQbHVHQTNXMFYzRXA3RWsvVVl2THBhNXBNRExEMjFMNHNWUUlDNTJmLzU0WGl4ZndnRU5SR1cvMk4rTVNxTDBmSzQyYm82d2g4MEY5dFc0WTR0NXJyY08xQnpuc0hCeXVES0VEdS9WMGZmWTU1MUtLTS9IdjJ2NVVGOU1PVDh4UDl4RjNEdmp4YUZaRzV1WEU1L0FBS1krc0U2OGJ1VXZURDVlQXVGOGU2cWozQk9GQm1VRE5qRnhlWHdGYlVZaU16N2p3V1d2aFJ0cFhoOW5tOTdhZW1aVjBRaFdGdkhINm1LR2ZlZkJNeU5ocjVMeGZJTW5hL1Y0M3ZXMVdhOUhDeUt3NXhuUkZzeDVMd0ZCd0k2Ni9BOCtHeWVSdElqTlZlVGJCYkRQVzdEUzdGaFQwbDRacEZ1TVVRTktZSGtqdHBSWHkxaFJWaWEvNkQrQ1dWckdrQ00rK0dGMHJRcW52N2xiU1lEUmtqdk9aVnpTZ3c5RzhJWVJac1VBeVZYQzl1SWRtVUpsa0o1VVBrREtoaXYwZ1lnakgwWFA5V0hNY1loTGEzMDlxT1VScFhYano5YUgycmR2K1lIN1F4S2hFQVVRa0dDbUxDYnl4WThoQTdtaU5COHJ6UjgzOXZZdDExc25GMGNKVndlODdiZXlJd3JkTXhZdTgxYmVzTjVUd0lBdmpCcTJyMmM4MkF4NHh3OVIrZmIrOENLOEsrZ0E0SUlSd29oajhZQmxqMjZkN1d2N2d4ME5FTTlDS0VGQktDNkM4RzBXUDdKNkg3NEJ4OUFSaHV2R0NvUjNERnowRER6ajNXTlJGVmtzU0FLUDJwQ0QyWW9jV0JQelljQUJPRHdTOThhVllranc3UkhqdjNqWmpkRkp3Q1ZZSVRkYWVPMWo5TWVHWlAzOUp4ckt6YnAvNzVHZmtBdTdnWVpYRFBlRjdlVWlEU2d4cEVUbFJWdEJGRzk5WE5WYnhlZEdQQ3U3RVNhZVQwY0xhdnhhamdwT3hnMWkwRjhBT3lZVUJYdWZVUEFLZUErMGxnc0F5OUJaeEhoL2d4WExHS0Rlbm5leStxazhENWduZ1RoNUlsWlFnM2E5RS9QTE9wWlBVK2xLN2FjQ0gwWmw2M3NyZWJUMEZxQVcwb2lmSGpqeStRRFlwakdDcXJpaTNUd1hRR3ZQOXVFQUZld0Y2c0dsY0dIVUZDZVBpUk01Z3Qyd1QwL0hGVWo5VURwc1ZQdHV0dkVEZk1PTm5uSTFuQVlxZzNIWkJiREY1b0Fmc1ZxWmpYM0FPTTEzNTJZVmc4NC84WDJRWGN3bC9qR093aWJqYVJIQWRDSHRTRmxjUVVNT21uL1RnaUVDVnNRNG9VQXFjb0JLbEl4anVKVnRkQWlaUDhnRE5BRXVMMkhnbGE1Ym1JTm9LWk1ReDNHV0hoZFhnYVlvOVlPdkJnSytHR04rUEpTV2xueVMxd3NaZ2NYL0ljWjNuZW1hRlRPMVZlOG13Y2REeC91TjBGWFdUY1NSMFV6RUhTL09Wb05YY3BoekF3cnhpWUhMM0N3N05xaVZLN0lIV0xnRy9BTTdJNzFvT1N2MXZLN3lnNTZIaGcvRCtBWXdOZ1FQdVBzaGVlS3Rtcms1cXBVZ1RQdnE2QlF3SVJlY1dBSXpJQWdvUHE4Rk9ZWWFKWWdIZDBIeUoyQ1ZIWi9JRlpqMXczTnZ2QUhmT1Z4K1hWaW14OGpKQ3lYNXg5ZVB2eTUxUFRLRzlmc0FGdVR2SDVuSHB2M3RKNi8vOXovNnJ6OTVuUi9kbytTN1lneDdhdGllQ0pxY1kySk9ZU21JNklQUmhaYUM5TERmQ0duTEVJQ1hIU3Fpa2QvYlh2TklLOWJoeGUyLzgrQUFkTFQrWXlWKzM0QkYrQzJWOTBBWlRORE56YUthenkzblRoY0NPUEZ5b0wrQUhtRnRYaUFyNm9PNkh1VEhQa0prOGdzZDJGMkhrekh1N0tDNEhVQlgvZlBETTErTDdVRzczeFVFZGcvTUFNVU9NczhjdlRXa1plRG1jVzk0dXcrdkpFNkxnTVEzZGpqMERSQWZSam91Y0hEQkdXT0JzWnNOZ2NHQWh4ZTRDS1ptS2JnbmRtMEFjZ0diUEdwTWNXZ1RFcWgxcEx1QmFoTnkzT04xYnk0RnFjR1BiUlpub0Myc0JPYVBqd1RKSUs0K1JGd1lWb2xIR2JBanJMRFJUNGhqYjN1UHZkYW8zMlhvQ3VBcW9GTFAwU3pVRFo0Y1dCQVlOWnRiRW1hdnMvME5HWjA0cHBtZk1NU243RFBVRzJOMGYvbXFjR3VBSmRDZ3ZrcEppaG4zQlB2NEtwNDVENXgrcnR4emRoRllTVktNaENHYSttN3Mwb0kyTDY1OVRUUVNTbGpmSVRwaWpYQ1djVHpwRzlEL1BsZzFlUDZIek1DU3gxZnhkanNISEJaaTFXU1JEMjYrclBGZzJManpCK3dBamVCRElBanZtNTk4S0FSK0FsU0dDUFhDWXQwaS9UZE05TDY5QVY1UVJTSnc2d1JrWHhlcUhmUlVCYnVCdEgxZis0UEhBTzl4WTVqYUVWaGdJZFlzd25nL1hOUDg4RHZvaUJ5eEF0VFp6eXRqL1Jxd0g2eitwTUJ0NWVMbmgxR0tHL3pBNCtYSTNtTjdlQzNlbjMxbmxaOE1Gb3BBOFk0RkRlMEZzYkVmUUUyZUExb0IyVUtxTm9SaXB3UjVZVWVDekF1VThvQ2NNSjZZeEFnOXd0bWh1Q3pYRGVTU29sekZYY2ZEQVhSMW5CbW1KYm8zcGlnd0xlZ2ZzQUdVenU0ME9JQXNtcC9sSGJZdWFjSjlNV1BodVg3OHJPTHRvSmE3djJ3VG9wQjVkNVQxWmxWdVREdTIxVEFHREI2ekNaaUxPTUNobjAyOFhrcW83cnc2SUJ0RWhrNFViUytPQ0hqVFdVejhDWTVCem9Ub1llamhNeDFFQ0JPRlRraTIyTTRIYUFYa2ZEUnNDVDNvN3g0c1BSc3k4S3FHSDlDV0RQRERjMkVuQk1NM2tPY2IyQUJzVHhBbmVqMGVMMkRNV2IzeVhtVWplOXNjQXpDczMreFN5ZTlCaDIvR3Y3RkVPTlpWV1JMamJzOExUT2tiRzdMd2RMT0FqaHJFbW5XL1FOWllpaUJaS3ZuQmlSbzFBYWJBMk8rV0gzWHpoTUxFdkRqWXdyTzNGY01xQUZ4NENlanZaUTN2Y3EzcUhtU2xjSFRNUm9YaUpMNElCSTJTWXZBTnNHM2hqWWFTQXR5SWlnV2k5T29IMVFud3o0MktIQ1lQbU1KVThTQnJ2U0I2bEIvaDRMNmJWY0tKWWM0Q0NpMFpHNVdOQmNITlc3Vzkzd0VoaEc3c0M0SUw5a0hVd2RmNS9NdWRnK096WXBDcWdJMUdZUGtTV05lUTR0d3ZPQmVibnNFdWhpUlFYQVM4WDRDWWdGL0FDNWFOUE9DS3RWdFRtTUR5dWV5b1RsOEdDbUtvYnc0cWNwZTJzbTRMRVF5VkZ3UDZzVGdZRFVRTXRVUmN1VGV5RVJxTUhNd0dhaENsVkd3OEhrcXZpejFselpDTXpUYm1nVEhSaE9QYnI1TTZBYUF2c1JXd0JtejVIU2dkY0NEZjIzSHVyQ0c2L0FFT2NKT2Y0ZllYSEtrQ0FYNDJjdUsvVFVKcEVNYnhaNE5iSWZwWWZvQldRTDVxeU8rRUxYVzhEbDRJSzQyZGwra0JHUGs4SkFLV2lWSzl6NVZnK1RqYXR1N2RxNnJBTnFJRHJHTElJampNYnJtQkt3TmV0OW5ISlAyR29mN2pTZjd4SU5lZkowRVArckdLQm4wRTFYeUszVUZJdjd4T2ZKZTFoZzBYU0RQWUM4VmlkZUpkTko2M0R2M0tNRmRNcnM1QUV0MVFiWDZnMUlKQVk3WmhjNGpBZzZiZmZjbFp2dkxuMW5qeDlQM3o5dGZmN3g4L3dLMW9BeUxLQXAwRjdTdmowZ0c2Qmxta1FjM29tTkUvQmJQSDUydVl0Tnd2VEZxU2loYklmeE5BZzhGYmRERmxzQzhNRFBuK2pPZ202YUN4SUpnanRwVXROY1I5Rm4yMGNDVThVT0N4ZkRmTU5xQVYvd2FpRHMrSVFPSUFqMVJtY2FiNU9TTHpZc1doVk1PYzROL0NHcGR4amRZYm5nSGZjb1JnSEpBbHNQMER0LzV0Zi83cjdibisyaDh0L3dDQjRDenlnLytGMytCWkY2UUhHd2JzeUxWZ09sSTRVY1VicExEbjBVOGo2U2pMdGJDUWErYktDMHpEQmdIbFlkTWIyc2MyYnJ4VWxGc2NvTDZtaUF0K05uQjc2QUFQeHhhRFRGaFlMT1MrSHlEOTB6b3ZLTTNMRTNzNDBFeU1iTkRIdzBsNTZnZUs2MTdpWTkvenFvL3g4cjM3VDFtdXU1UTc3cXJGRXhndnZQdEVHeUcxa3E0VEU0T1h5UnJZdXhPZFRudUFPejVzekY1VjVvOENsSHBOSENIS1hUTHdwd0NURUlRM3duTkJxQkFVS0hkZlQzQnRCMTZONi9POVZRV3VmQ0x5VE93cnVyazBJNGp5UFdEQUtCUm1tTFhwRVNLTW0wd1JVSUhsdUNWYXNtRGVIeXVFMVFVbFNZQ2VWZUhLRzNmMGpBdUVOd3dhR04xSFpoZHFKTlY4eDJkOEdCUU1iT25Rd2hoaVVka05XQS9qOEs5QmxLWHhiNnVFZFNITk1HbURuRHdqa2cxZGdLYU9iMlljN2FOWjZCV3lnS3hsS01xZTBxR3lzWlBHcGtQU25pSlZJMTFHemxwbmxYNTdXeHRPUUFnSHFtaFFkN09yckNFL3paZWtweGhoUStuaXVzREZjWlRnSy9qS1ZSc1cyRFQzL2FwTG9yeHZGMFhZVEFSTXNxT0NPSXFWMnNid3N6TkEwNjVTM0ZCbHZEclBpbndZUUtoNGlucmpiaXJVcU9ua2hpUUtSSSszaVJNVUE3UDdNc3VDZ1kzekI3d2dlUkdva21ZQThFTW82aFZFUWhEdWxjRlArMkExNE92M2JpUWFVaXdJM3puaTh5Rm5IMXF3OGJudkI1VGhKaCtXSEpOVDhKaFR4SmJCSCtyc1BPcTRqUzBYVmcyOE9TZTBjK0FqakFGRFFuR3ZZR040eHNkRmNlR1l6RlpyaWREUUMxNzhMcGRkMGEwNERmZ1JxMmlBazRWUE9HV2VGdyt3WWg5cjUyV0F3NDFQT3JPR0VKaW94dDVmNEp4dDNDRTBicmhrTDNsVTBFMHlBWUFUTytJWFBud3NXbmlYYjZQYUtUem9mdFhuelRkV2dOS2FWOTI0YjFEWWwydENzY0RNQ084TjhYMWdOaXR4dTdxQk94RHUvRDdnSDVNbmNEVXcyTTF0QUF0RDNXbnhNalEwWmNjUTZvQ3R3RHdsdFJpU2dHRCtJM1Jmc1UxUGh0aSswRWgwYmpYRVJ3ZVFWb3NnalNkZkFTMXlZVGRlZUVpbTk2dDEyNWlDRERLK083Z1Vmd3J2aTBhMFFMSWJDM2hYY3pHRkpmcCswUDdrUlpCZ28vT1BJZTBuSmFBekFzVStCaDB5MGczTzNkS0NSemRsNG43TTlRQkpjVk8vbkJKTG5LOGhHRExrZ1JGcGlCdmFiakR4UkkrQkpWSllFRll2RXBrUVVTSGVENUhGdGNNenRMcFFYNlNxWHhpVWtSQUVWZ0YvTnZQaHIxdG5BTGlJUXJXRkhHSjNzUmNMODhicnc5SVN1QWlmZVpzNGVCYVVhRis2U3p3SDJ3U0hob2EycDBZQVBDSnlnMC95RVhiSUw2enc0NEZmU0NBZlFHSzViMGJ1UWY1Z1JSelpCWHBjYnlxRGI0MEoveDc4UmpXNWhLSG5BcW9FUnhqL3VMR3p3TWNuTCtINC9WdmlweHFnV3l3NCtLaWF0OWVjaVhNTnYyaDBxa2JKYndCeG50dWcyOTExeVlhbDBINVkybTV4UFhsR0pRSGx1TVNNWUtLTjBVUldPaEJxcGkrRWJuWE4xcDFydCthU0dneUpBUGlVWmNOaGNTK01jWWpCakVvR1JGU3daUDhQNFJQbi8yM2RNQWg4TUdPckkvQWhvb1daLzk3WGVQYWRKMCtLOFc4bXBkQ3hKZG15eENlYkpHV2ZEVEZoRmZjRzYwTVBCQ2IvZmpzRThzY0Q0NlU0eG4vZS9jRlRZQ25yTUkya1NKdHJTeWNxQWorQmRNU1RoR0xYYTgreFIvTityWWZ4WHArRkxiVmpQMUhSMjlnMVJPTUYvSmYrejl1ZHUwMkRBRnQ0T3V1QkVEd1EzblBodXdCUEY4SmZFM2dmNElRNXg4c1VBd0o0RDN3cWZ0TjBYNnlZaDErdUQ3TVprczh3Ti9LQlFnQlZ4dERXWFB6YlQ2WXZZaWkzQWZ6dlpBbDkxN01nZnkwSCtKZ0hpVGR3UE9DQ3NXMjQxbFp4MVhEaysyS0h4ejNodXJqenJhaUJOYld2a28xK3RoNDhoZGxyLzRlYlhQKzRTejRTQVVqbTNZRUdhTFVMRDhaRDRUQ1l1THNPVDhubjhWL0EvTXQyQUE3bXlmTGhmQzdnYlJ6WTU0eHZlajRVR292c21zNlRqZjNYQi9qYnR2L0xlOFlhUVA0c0RSd0RJd0Zpd29Wa1RmR0o2V0F5Rzl1Q0RVSFpRWmRHa2JxazVlKzdoL1hDK3ZTeEwwZzZXb2xVeXRBTk9PS1hJMllWTVpic2pDZEM1TkZGN0RHODUzMkJ2K0E1SktkWDVDL3F2a3p4S1pENGJ6WUFJaVNNemxXYU5xdUd6amlDRkJGWUJyb3FYOUVHaFpueFJEanc5eTlRV2lhUThTckN1ZkVIbXFPVkU0cUxQOFVsUTVBYjJnUVZLQytXYlV2L2JwT0Z6MUdDWm1Ka1A5aFJkSGMrMTVCY0dNcUJ3dHp4WHVqbU1NOEsxb1RObWh6QmhKWjNjOUc4endhQVJUNHp0WkFoUDMxalBMQW9sejV2bU9tWStJTjlJaERjajJYR3g2ZjY0VzR4bFNiSndDYU5ad1E1cmNMeXN1S3NuUVZsR2FUUjkyWEFjbjBtYmtydlhBVm5oSWlNZW1kWkZUdUM2WjlvMEsvS1pmTHEyMWdZUGphelFkVTh2a1lTdXI0VHhpUHdYaWJSWCtPZDRQUnBUZGtUUGpOVThvcmVzWlhiSUJ2ODMyalpTUVVhNkNycmFld1BxTFlCOGg4MGZ4ZzlqLzBCRUxHemNuMWNTR2RqSnFaa2pDUFNWVUloaURBU3pjcnZZT1k0aHE4SHZFZzc5WWx3dTBNbFByamxoTHNWVEdRR3BVV3I2ZmdaWkMwcktWUEpSNlp3YTl6K1M1Z1NydjJZemxBNFRUVkhscDFWZ1N4Ymh2Q0xhWUg3dTVVajNEc05nQjU3MkxEeUw4eFJQd2hnQnRVQ0xaNTlSZUFsWkNHRHhPUjRvdDIzSVhsSlpJaHZMU3ZEcTFxWTZRU24yRXlBQyt5RE5UUytYdlBKNUQybTZSdDBMQlhUR2NhbzhTMWNURXR1dllOMFZTeXMrY1BIckVPVllJTmdqdlFrQkozNzQyMnhrZGZ6bUhTb2t4M0FXSXhqVzhQUCs4S2p1T01iNElNTGhJQ0lBSEJSYU1UcnRXZ21mZ0F6QUFudkhQY0ZSdkJicUpOcXcrc2hqTE4zSkI4b0JsK3RlTFp2UWVHV2dZNzhHTEpTLy8rNjQ3bWZ5VXo5MHhEaW95VG9kY1R4NExBZy9qSGhic1ZoaVYyREdDQkgrSFNUZ1BuRlU2TUJqOThQeGt1K2ZqWDhOTjVuQW5YYSs1ajZCQ1dDOFhBMlFxQlFqQUx4TGxDV3VGR2tsdkJYSjlsZEFRK2d5WkdLTU9yaVVZQndBNHVERHQ1WVU4Z0NOR3FEQVNyWU8rWDRZTGFRLzJjTjlxMGNIZ2JLUVluQjRQNjVFSmlKUGZwYmprSGNEMEJLdDRub1g4YnZ4eFVqeXB6TDRZcVlHZmpSQi9RQjVKZ2tTKzhEd1MvWDF3Y1lLaTFlQ1NrQ0lnTFNwN2J6T1lrSHhkbTZvQnVqbXcweWd6a3hqM2xqSncycjhQd1krcm9uaGkza29aNXVNVzB5Vjd0TXUzZkxPVUNDU0dRVXRMZWw3UlJuTHdQMzNTRGhTVXpHWDhyKzB2RkhqT1VIdU0zbHBEUitiUDdCdWU0SEJNYjN2NmFSK3IyTTBveHd2TG9CTVRSZUEvcU8wbGFVSE4rYklTbld2U0NrQmk3eGlUeC9SeXl5dFV5Z0YvQkJyZ0NodWs0Qk5VQ0xyNERoNGE1Sk5OSk1la1JVSlBWWFR6ZU56Z0ZhVTQ5dndpSWlnWVloZVN1VXZjUmtyQTV2UFlCSTBiRGNZeFlSUW54Rjg1UHNUckJLUmNxS2pWWU54aGkraDdSQnJ4S0xzVldjU01YWlltQ3hMamk3Y3E5ZkRLQ1VDd3NDclRnTEZrbytQNFFSZ09nQi9qQy9yQStBQTV1QmFPd0Y4QWNDQXFFbUdqYXdKcGdTN2h0R1hTQi9mS0pKQU5sTlJSUld4NkVaTitEZGJqbENONGpCYnFIWFZvcHh6d1MrRW02TXY3MzRCVStIR0ZtT3R3WXc0c0ZPZk1IYUZUZ2pNbTRsandnSm0rM1dtOUVBcXlRZ0dPNFl1Q2hlaEszZDIwcmZ1QUFGdFI1QjRQZFNIN0g0SCtnUEFHN3FxOFBsQSt4cmpNNGlsY3o2V0R0aTZWRzBYTUQ4MmdjdWhHdyt4Z0EvOXVYQnFQUEtyR1JzUTBXQ2txTmd3TEp5RnEyZTlRUFFtenFmM0lScllSTHExYUFQa0lNYmpXOHc5bkxTb3g5V0VYT0g4K0wzeHA0TWpIOTlUZm52Q21mbGZnS2MyMFRXOGI0alh0RVExWG1YOFA2V01Cc1Z3SFpCM1c1ajdvQXRrQ01vQkVTVWdobEJTQkdjVzUveUd2WitrSjU4SVphM0YwTGVZRHdzVUxvYmo5alI3bmJDRWptZnRCYTBJcUI3Vml4aWt0a0xzYWpKVXZQRk9OZXoySlhMNUhkRGk0ZWxBWWNWUVNCQUVhd0t5RzV1RUlxQVFiTEFYbUFMY0I1SXNNVlNaUm85bVplUlFaWnMrZDdvMVJyc2NEUXl0QXllNlRtMm1RYzRvNlYvb28vN00wc3hBYXQ4MFlvanIvZGRNSVdlcmVFU01vZGFjSW8zMXMyeWh3U0EyUEdZaVJ0bkF4UGNsdjRCQ252ZERVOENXTTBJR0VSdHRnc0xiRVJHZUpoN05RK0ZQcUxuR0xaNlNtMEF5dFdFTkkrWFlzWjZBL0JBaFZDajlWaFNjR1B1TUFpQUNKOEg2R0RXTFpyYlJ3YnFRaGJCVCtVK0pka1pzajF3MmhiSVk3QU53QUQ4ZFVZYkZ5M2d5ZU9hV0llTkIvOHNtUUpVMTJyQVFiMk0zQ0lYZ3pIZklSR3N0ZWw2MWpkWG8vaW13WkRxVkpHNE5pK3pmNXQ3ZjRESzl2Wmk2R3MrSUR1WEdBNkFJTnpCTU9YOWpmR3IzTDkzSEpZVkNzbk52N0pxTDA4VTc3UlByU0VnaDBldHByY00yUXdsUE9DZE1LVUdpM0FjaWJWOW1xVU14Z2kzVmVnQXNYNXFReStzTXBUS3pFMHlDbWxwT2xEQVNnWXhpTGNIWW1SRXorb0I2M2JBUVIwRWpzMTdFM0kxdW5VWEQ3dFdVVDBNTURmTTJ6SXpYdTNSam4yOFBqQ2hXU2RvY0EydjBMUmRZTDNCVHNPVmxjTlZlWGJBTjdxMnQ2VVZKb1lBWTcva1BNU2VhL28rMExkREE1QmtOQmMvaEhETEJMSjU3MkpRTm9ZVHVWMnNrZmdJZVFZbnZCVlFQakpFSkJqRGZEQWd3TE0raDZXVEZlakc2a0lGKzR1QUZ4WVpFemI3QXlEdWI3bjJDeFJGYmdBMlpyUmEzTk0wbXBVdmdCM2pJZCswd0hFYWNEdjUwUlBiVDM1NUxHUXhId1Qyb0d0VEo0MU83b3h0NFhkU3JqVjhlS1lFZThDVzNNZ2lXeFdNVnRZcFNlYUtBbDNRNjdRY05nZnJJUTNNNVhJL2tCWldoRXZpK3BOT2FvZk92ckFYdDRXbDc3REt3Mnp1bER1ZWNIczNqSmhlRU9GbE5lU2ZyRVBWMWticlJmamlMMWVMMFRTQ3pKZWc1Y215YWF0VzFBUjVpNldlKzBNSmNEd2cvd2NFQlMvTzJZdjF0bkdNT00vM1JhK240UktUWkR3UVdBQUQyd3pqcjJneGdMVmpTaVZNakFXODB2cnZIdmJmbjFWVGJURHpWeU1SYmhaQzd3d1Faei9EWlpoTGFUeDFtS2c5R0tDbmtLQiswRFEwS1dDWnBneWw1MU8rMEdSQlZqSk5YQWRtQmtJRkE0L3BDbXdDZ0FoUTllaXF6QkFhMWVhbnZ2L3FxZjQ4L2wvSmpUOHZNUEpsMGZ3NjN3SXBIQnVGbUJSYzZZa0NoY090Y3pzeDNtQ1VFb3FibW9GMUhPRDNFekxqd2ZsNjFYZDBQSXJIa1RFQXlkeDhTc2dLbEh0MTAxMnNncnk5N01NTjExcXYrQldvQi9NR0I3TW9zS09xMllQOFQ0dnFCQ2pWTkhJQy9tSnU4c2xnSitTdlllc0FRQmF2SlBQcWtOTU1HSmxZK0c0Y0IzZGtPMEQ2NlViNGZrcFFmbFZzdWs2QW5SVTFyN3NhVHpYYjhhemI2a0U0TEYrWURTZFo4Z1VCWU45Z1Jld1l6bUhqQW5selhIRUN5R1BaNTB3Z25oTVJXc2FlSDJzNWdSMUFWWmJtdzcreGF2bGIxMGtQUUZ4dXFIVGJKdE9NaFVBc3NIK1B4WkxoRzJKOG5xNzhJeG4xMTZNZDBqUk9VOG1GaEV0dVQyejlzMEpsR1Fsby9yaVAwSG8wdjZJMUh2aE1zem01emlBVlV2ajVzMDQ4NHVxWEZ1akd3VGF3dXVXazFZTGxWWGhOaUF0MkJjNkVId1pTbHB3TkNja09BaTRpVy9CejNoSE9CQWErREE3TWYrVEpYT1h4eTZEOWM1WC84MlYrVU9iRm9ZbHNva2I1UVk0TzI4REVBNkJTTU16eXp2SExWb20vaENtd2hwRlp4VkJ1dThRQzY4MWFuQ1JDQXdGalB0RTF5eDRFSVZDYisxZXZMdWRGc3dMTUJpY2ZzUnd3Q0FBbFFCUDZBdmNNbWxhV2gxZEQ5TEZhc29NcktYUTRuQWRFaUlnaWlqQ0EvUDVhZlY1REVjMUE4bmRhWnJDUzJ0d2hmWWJ5QjFDcFRQd0dGMTVHT0lOTzA0UUZhTjVtay8vcHFvME9wLzFMT05QM1d6WVliSTUySnlUUS9ZaWpiTE5rSnBmU3RKUUJTMk1kdnVXeWVSb2RLbTFqOFZ6c21HNWdXTU5Dc2tEdVBXYVMyeHNQQTMwWGlHckcvWElSL0FPWW9nUE4rdUVXMW9WRDdFTGdCYTluOU9lblljdFdqR0tjZy9VVnJVMDQ5ck9hL252SE8xY3ZPMFVQK0RhY0w1UVhzSG4vOUhPZnBIZy9KRk5qbXVJdjRHMkoySEcxL1RVektUVjNEZkNNWnBQWTViYnVDZWUwMUh4dUNDTzZGcXJkVmNiT2NVQzJKSmczZTFtd1pZa01vQjFFamd1d2pCbWtpZ0JhWUdZMDV6SHJmVVJUdjNFcE9YSFczMTU4M0JVZVBPMkNZVDErWDdQa2hGZEFoSThYeFVqaVFuaDNOZ0x6aUVPMi9tRmVGcjd4cWhYa3I3NDl1TTBPb1FRdnNWN0xORW5aQTlxQ0ZiRWFjejFtSGl4bWZNeStWZVB0N09vRE9ZNDYwUEVmcXdNcXYzK3loR0Z3RWJYOCtRQ1crQXZhd2FqdjM0TFpPSEJOMnpVUnUzdExhUkF2WkJiTWhLbXd6Y3NhSThqRGpqZ1JDMTk3ZldmOFFJL3NLeXhDWHZ2bFltejcrbGp4YWkyTHpTUlpQcHZ4MGJmdExpL09BZS8xOXZzRVZYMnVCM0tOMjJ0WW0xMnRBVUhGMFRzd01KNjJ3dzNSUlY1OFdjOWtqdVpUcG1JcGtDNEJTWVRnUG5pYWlkbUwyQ2pRSzFiaUJHYW14ZDVBTHhOMTJpejhlUW1nSk1OS3BsVHZhbTBBVUxzQVk0Vll0aHhabXdKSSs3Uis0S3p2VDVMbHQ3c1hMdFEwbVo0bnZQQlBsaG1iejJaSStBTXJLVjZEWnJIaEZ2MUkwb0hLbVBRblZ3dGo3dGZpL3oydXpEZmJOb0FjNWcrVHZVYXhPa2haSkFBVENMWWx4WHh5V2ZpVytreklyRVZRQWZyYmpCNWFvSDh0Z0FVZ0lTQmQxZVI5WVhkbkxUd0ZHUFMyNThzVldKWUpnaktMSllvNFh3MFZWaFhBL2hwVmczZGNyOTBYY2dKMHFoaVJoOEUrV2lwVExqT0NTTmVvZHhzTmlkZ2JXOGxxdjhaaW80MFZwV05TeG9Qc1h0azZCSHpkKzJCeWdsSEIrU3ZBUWJhQkc0LzEzVWpUOUFYWmQ1TUlzQm1yZE5rSGJIaGtiOENiejlYTVZHMW94eW0zaHNzK1ZtakRDa0I3b0hNd0dyVGlmbm5CdDUzL2krdzh3SWZDNDViN3k4K28ySlFKWXB0MlBVQnFqb3ZFZmlFcTdDbklOdkNEdkFiOGkzMS9DZ3dNZW12NTB3T2hneXNBdm5KRzBBT1lMZDZYajJ6amo3bE1rTmpIbTFkYlFsbExrVjB4RG40YmRoa25tbytrdG1iZUZJbDVQb3NXUkM2UER2SlRFYzQyY21md0Q0N05xc010UjlTc3haUFh0MFVMRk5qRWZiTmFVTUlMNTlNajh1d0tvN3V5clhRRHkxL3lDQ2dTNWl6ZktRMWZCMGJBUTJiYzkyTXMwdG9STTFSdno2ZTFDZE01Z0ZMUnlxcjdtaWhOQXF3SGlTRDJOT09hMGk4M2FtcmY2a28wNTlsTnltUmVmcFpmZFZjQ2MzMExXd2tsK3VVZ3NVVS9hMU9zOVVrblBXbjlaWVQ5M3ljNkZOLy92TmpmN25udWVFd3R5QlpJYWNFdmxvVmRlTEhSb1QvNCtSZjhCYUtHdFJnTkJNdklDYnNCOTlmb2lJbVJiMDZVTlYvdC8vS08vN3doK0FZVHZpeERyU2E4N2M1RmFhM3dTUkhQZ0RCMnVHY0hmZXlvODdyeEF5Y2E5Vm9oZ2FuVXVvU1RQWkFnblNJQ0VZTmVDUVpaUUhsOU5hNlAvN1Q3ZzBjMjNSbGhzUkRmb1Z0S0VkeHhlajh3VWJOWUpJV2hSeWNCZUJsa2JSRXR2aDlZeDdYYy9JQjFRMjNSVjlRT21kUDZOdDhEMHArUi8yVTdGcCtIcEUxNDVFSmI4WkpjRzhaeHdTV1RLZGhmSzlRR1hxSHBGdjFtU0dEaFNzc01NcFNZeDBCaGgybmJVWERMQlhNd1poNEdjUVVSenpCbmNXQkxzWENubVRwLzBVVThjTGF3RDNpQzhEM1JjdGJiTFBSdG4yTlBhTGloU2pRUnFsV1E3RlFiNzl2U25aR3pkMWx6Y292M09oOWZGVUthdHZWNUNSTm5NTXhrcXNFRzY5Z0NYc1VPVHZ2UHJyc2dIYmErbnh3UC95NHo3TzNEQVdYUVFuMHBXNGJjL09xUnBVNTRsOVBSQ3I4d0F3ZW51TnNWMEF0cnVOS2pKNzRQVG40Vm9iRU1BVUV0OGY0YlJKT2ZKNzBXTDVyQXd5aEFLdXZkclptNWJYaTVMTU14N1dyNDlIUGJySHVaM1M1bGlMaXRvV1lkei8vazgzN0JVaGFrSURaQVZsdDgrRUVxTDcwa3pnR2lqVk5ESG4rVVpaMllDczlYc2wwMXRzVzgyVTZ3Yjk4TDY0NzgzZ2FRUm9tb1ZOaXhBOWduYmdtaWd4ZXZ2QnlHTmR2THRhejdlNUM5TzdZS2xGNkdUU2ZTMUsxdVpHdGhNdWltVlhPM3paR1h3QUF0T0cwNDNTNDRXSWkxNEFhQXkraEpUbWlqZGJVTlZGekhmbzdHU3hhOEdnYUNTL0V5a0pwcVlVZTBUdGdRTldzSGVPa2Qzd3FCdzQzVjlySkpBM0UwaEhvSGJQbTh4UXNadHJwdk9TenZrMmE2VUtNeHVqS0FZMEVpWUpCV0JrUGp6SzJjZXBLVkxLQkI4SzFyUU1wQ01kVS9iQi9iL3VCbnc5WUZ2M2hhdEpuRnNva0F4YzNCZVJmM3I5YnVSbmZ0ZHNhaVBuYmRCUXRSY284OEtMeDJRcE10dE9FUnJsb3dYSmFMNWZJcjRsdFc0Q2Y0S3lzUUJGYlR3dlZ4K200TlAwQWZaaEozUkIvSmZvbnRGNjVwRUN5Q1BBTTd5UTZkdklVSklkdU9yZGhXdUc4YlhvNCtkb2pIaVowbGJESTA2WlVUQUNjYWlDM2JDWVVrQTljQUN2TUdsL0pjR0tiSFFrVCtGeUhaRTJDTGJ6c1hodUdoU0o5MXBza2NCdVFlTVBxOXk0NkJ2WmVGRVR4dzA2SGp2TEIrRTdlUXdwa2ZnM0pHYXhYU3hEODZvY01ucVZDYys3SExPZDBYVEhQcVI1TEpLdllIRHhQMTB5Q0dZWUh6S29hZzVBKzFZUVVlcDhkZ1RCMytZZXZHTjdYSTczZGZ0amxBNmNxSk0wRlU2N0JLcDM1cjFldzYxYzhNdnNoNC9ZQ0JxTWxzQUNEbEVXQUF3dTQwODFWOW0ydzduOTcwcy9lMS9Cclg1bTZHbFJxTGdLMnA1b3dlK00zYVVsTkpGTFNhMVlEZUcrd0crVnZHWTc3SDNtQTBrS2Q1Z0ZWZml2WU1Uc3VFT3lLMW95M2hGUU9hZGZqVzJlM2JKQjZvZHdQSnJtSlZTbU9EYjZYUnZjQm5yYkNiblpYdzNXN1ZrQkdLN053STY3UUZvdEUxSzlBZElPTEhOaFY4L3pUaWpFMThiUEpIeUhsKzhET1NadmtiM3FUWitYQnF0WUJHcHcvOE5aN1AweGtIMlhrL0wxaDNYdzZqRU5OKzA1N0pOblFreFlnNkdCblFBWTQzYTJmYStiMTF4VUYyRFhZQVVOcDUzcExWOTNkZjF0V2VkdDFoVzREeFk3NE5Pc01OSUl3ZmJubldoQldQQmdRUWVBUG9GZFpSbXBqelRTa09uU2xVMU5nc1A1QUE2MWd0SzhiSE5FbHJWcGVsL3pCaFJuZHIwaDU4QU5wbldYbC85L1pLWEhqWWVLb1ZyeFd0SVFpMXNCZWdZNmc3b29BT2dUZGZkTk91Tml6OWFjUTlsQjFVYlR2TEJ6RUFoMkM1WHl2VjU3N2ErQldaRG1zUGRidG14Z1BtdHFBWjdaOEJqMTlWOG10MUNBb2dvOXNGMnJibWE2UTVQMTRJMGJqejA0Q2N2Ryt5cHZnQnRYOEZEV1Q1Z0w0MW9HR1ByL3VZcWJxdFM3N05lZWRXT2c3SWZQbjEvcXJ4aDROYzhEbFBISVlEcG9Ib3ozUURLc0pxdXRSZ2pNZUluVld0cHBRTmt0aGlubm41K1Z3NEJUdVJXQXVjckNKcXRCTjErVTVoRW00Y0IyQVBMTjZtM0tnQ3FMNHFVN2NGNFNpSVVVQnpubGUyNnY3cmpyVndwdE92SWp0dXlmZzdzWGpnZURBR3VHM2g2N0NqdU9SaU5RTzBZdXNaMDM3N2hqZGNXQ0tNMU1RczdSYTRLL2NGYUNHYmdxS1RHTFRVWWJGSTlRYkZma2lWN1BDSm9DTkVyL0ZKZk1LS0Y1YWRsMElKMlV0Y29ETkxPbStLYWk1ejZhY0ZIWHNOOWJlYnhYak10T01DOGNMNTdkSHQ5V1Ezd29VVHNjcGpXZXNJVzJQdlFPb0wwN1ZNY3RwbWpwRzBmQVQrRDdSZldlVXdpWUFYZWh4SzBGS0hKdGNMa05tcWVTcXc5djFBbEY0N3lScXV4a2hOTjR4Z2Vid3NPZWlYK05mRFVxNVRwZXRiUGpaajNlV3lsZWt0UDZsRmdzSEh4aExpOXhPMkJVbi9KckxQQXd3aityb0txQjV1R1JkbW5oUjBoSDNvOTRWZi9MYWp2bmdBMXRlNU5tOUplaUpNdC9sSWEvVlEvZmJXZFR1TUJ2Q1Y5T1dnTUVRdWI5dGcrOGJUc3N2UnhnUXc5T24vS0Z6RGZIMDJ3anpzdHVrbnM1cXNYeEJrOFg3N0FQb053WjRpZzQxRHY5QWZxNHJpWmx0ZkVISkkzRGo1aW1aaldEU2d4Wk5QQjhrN2VVd2I2TjVrODNFQzlKN1lKdGJpVGxjMXhMYmpFY1RYQ29ieUxITjJtelY1T3VUT01sSjlYNXoyR0pRVDI0aEFBV01rQ2JMQ0RvQVp0aW9DSm0wMjRRRnZsMk5xRElhRlU0c01qZ2Nvd21aVjkzVXlOTHhVc0RTam4vQTlnTkVlUno1eC9SOCtNalY0amhWd0JFMjI5UWw2SElUUHVRZ1RtdlNnN1RFdWx1T0VrdW9uQUQ1WUhQL1FyVjV6aEF2Q2JEdytBVHhaN2k3RXdqd0NjREFlZWw1bk5mUU9sNzJXTlZ2TEhuVzIzampqNTVRU1NERG1OcGlLcktlNjZnUjBiTGxCK09FcUJnaDVKSk42RTlNQTZkYXdMV014V0ZjZ0JzWTgzRmErTjF3K1pBYmJOTHVXNmJOQ0xDNThWYlpRcWpxSkI1Y0hBZ0syaHcxZ3R5WWt1Z3Y1c1pxa1Q4RU1PajA2U0F5aTRKZ05pOWJnUXhubEFrbkFOQkNMRzFBdjl1aklHUkR4dXdMaS9xSHp4K1kxYVIwUGorMHpQbFVuMnc2a1FPb1RwdlBESkp0WTBYMXR5eGZnbmNYQ09FenRnSXNBSzlIM2ZxclJDN29oY1IvVituNThiTWFCUUwrZUlGbllwMjhyYXdzNkFHb0xxNDhWQW9kZldscjlFdExIUzFoNitKMUY1Z2J2djRpRGRERGJBUzl6U0hZeXNrN29BQkFIckFBVnhjOXo5UkhOSzRNVnl3dHdHTUVVQjI0ZkszU2Z5VWgvWFZONmJ6RDJ4NVhHTDBMQUNseG4ySkpWYTVoYXMwcnJWM1J6NmwzLzdjdkcwSEw5Ynk1NS9mT2EvNzlkOHZxdkh2UC96U1d2Ly8yYnM3eW9JaVEwWUc1dmErS0UwaWY2a0g0TGVUY2NuM0ZJSno4c2crejMrSS9ML0N5SGN4Qit0c01zcGUyK01QZWdudmZmNElCVHUzejkrOWNOSHYwWEwydWRKT1lGTmQ2SW81MVV1ZjFvMTdMTTlBdVhRMXVnWkpnaWZDZFcwTUxuUGord0lod3BoMm84aEhXd1pPOVRGRzFtMUNUb2gwUVR1RFdyTnN2VjNtMFBLZmJ3WE4rK0tCenhySzRab0daVnNEVWVEN3V3d3B3T3ZVR1o0SkhMa25qMFJraHM2T2I2Yk9iN3JIVUdXNVNCWmRoV2d6Vjc5RHNlYXhzVS9PSXgzVlp5Ykl0aGI5dUJIUDBSc0RtZkk1UXNxMzd0K2Zxd3pSbHNpRU5FeFpKOWF2MTVMSVFBRGZNMVRNb0NobXJQN0NmQUFuNkdtZGpFNmJTRDFDOHNhSWZEdEZRQ2pPMFdqanREN3hqT043ekxyakhML1lKeE5TY2c3UURnZHZyTTUydzE1MDdBQ1pwZ0ZPV0hDc091b2cycmVPelA4SDg1MVpyUkJ1cGttZlZuZGFMZjFDZERPNUZLeUkzSjB1L2t0aTRXQzRNSjd0cXdTQ2lDcHNkd2RMRjB5ZGk1ZnZmT1Bwd3pZWkJBOFFrSXlDNGwyeUFDSGlHWXA1MW45bHEzbFg3Y0VrTXB4YlFxeGdkN1RxT0ZKWHF1ejBrZm1kR0VBZHoxY01ySG1Ed3NITjZQaXVUdTlwOUNXTVR4dzJWRDdTUEdaanl1WlJVR0Z5aXAyYXcxOEFNQnAxS0JSMUJFeGZDYlZpQTQ2ME1PdFV3YWhWT2ZHNXpmeGc0bm96YVc0UzRuN1NRTEd1eFVqK0FzYlBOdFJRcStyRDN3NHl2Y2dvcVN3UWE4VGNUeDV6OFZvM3NzaWRadFlNT3hwSC85emZPNkc5WEpmQUJyS09kNisyazZaWXNGS2pmN0J2QzBWdWl6TXNRYVZZQThrRWFpMUUrdi95ZmEzV0JPbU9TTFR6eTdDRS84ZURVVGRJb2pxTW5tODQ0b2djNWliYUJCNXlYc2FmOEZQZ1hRQjVKdXhyVGdDcEs3NUx5T2poOWErOHJZb3duS2YvS3AxRWdXUHljdUVSMWpneHFuV0V5ekJPZENEV3ZZY1U3ZzlUd2gzUlUrTEZWMlROYUZsQ2MyNjh1SHFZSWRkRitESFoyK0g4QUdqSlljdW1tRkRSNThkaE9pZmhWRDRyZ1pOSW1kWEpkUkloTVFvSmlOWEgydnBEbmV6cjU2NFg0cVYwOGpBNmFkV2NXK3JGU2NGS2dERFk1WG04NDhLdG1vMzlkT0k5ZDJMZyt5REw4UW0yMk1VMWI5VDIydGc1ekEzTnpsRG1YUDArQTJzSm1RS0d1ODlycDBxOUFqT09aR0pleTdHTUFnZUpEQk1yRzNSb0RYV2M2RjNmT2t1azl4Mk5yUG1UbGtyUkZZNW5MU2hma3RMckRoZjFnaVVLdzlybzRjYWxoRzdNOHdDZ1FZU2grNkQyMWgvZXhiQ2ZZSll0Yy9jeUFYYUJMLzBFOVMxcENWTHNGYXRXTE96NVJEd1ZhY1VZZjlPZldkSWc2elFRc0FyN2tyZ0lRU3gzVmluTEZZQ2RydlZjbzlmRzNjdUhNRTZzTVhpZ0d0WkFWQWZENlFyejBzNjdTUGFLakdyOVF6WFRhclpYWUJPOEp0UnNDMmQyZmcyYTE4UTFidGVVZ2RDV2RKNFZDQWJYOFkyeGttcnFaTjJQWTBUMlMveUJtN0J1RjdEeDU2TjRza1E4NmlWTVN1MktqRm4vZG9MTEp4TmlObnA2TXBuNVNNYzBDUWJKaHFzTGJ2a043cWFLVDFhODBGOVpuWVBKTTVXalZkbWlIaG5aOXZNZVBud2xNYmlNYlpjbjJQeXdRZTc0a3ZOblE1MnNuK081M1FjVnRZQXNjRWFwNHNjajJ6dzZ4emN6aUYweGpPYXcvUktkQVA5SjZqeXBOWTUyVTMxUWpsUWNTeFRyRWt5M3B1NzIrRjZQUHNXakQ4VHJsN0xTWnJ0eE4ySHJqdGRhZmpEOHcvcnoyanRWSGR5SEoyaGw5dXpuY0tSVUxmVDVrOWhuangyZnV4YlBpWmhnNmM2d1ZkLy9uWGVpcWJIY1ZoNGVkbi93WDZvYklIKytiTFk1UHhkNHZwSFhoMWhpZ2FIclZjMDBMQ25pOVhKbUVMTS90dWJMTGJPM1Izakk4aW5aNitrbk95N3V4a3BGaDRHMkFKQmlvNGQrcEdxODZPTDltUlBkWTJDWmNQVUFwc3hySWo3TkRLWUVrR1BoZGJiVkhyTklyOXZwRnJwdllhY3NDbFlBWlJaQnplWllrUUpwZGZ4dGp3NmdnWHBEU2JjSXhBR2tHV3lRTWNFMGJXR1VkTGlldDJMeUsvcVpyRFIvaXZIdDlqZDRXRGVWdkNzaHl5ZGhlbkZqcVdZdHNEOENDMkdhWTc3YWVQMGJHTUZpZmFBWXh3d0huMjlTVEZ5akkyUXpTdlJhWld0Rm5aQ1dNNENWVWJIeHpYTi9NTkkzMnpOWHhzMVQ0ekcvakJidW5tbGM0d1A3dVRMYUZ3N2hsTDU1N2ozblNNZkF0RFllVXNpejgveTU5NTlPZU1UMFRScTJsQVRFbTRGbzZuSTF5aE8yL3FQVW1KOVN3c216MkdUa2VDN1V3c05zNGpXcnlhTFVhU3o4Q0Y3REdjSnJYTGQ3R3BBZEVjZkJpY0JTYkFlN0NyOTJtQmdKRGd6c3prRE16WXNsckRNa3pZQ2lKdWxHd1lZYWpXS0Y3UjhaTnZTaE5ZWkRML054Y3lzcW42S0EwbHBGdWRuZlo4bmdHZ2IzUk9TdnVnYXhqak1IckFGa0pGNFd1MzAvdk1pZ0tnSDZqcVowc00ybXdyOEdPc3pDNzFZVkwyc2ZZcjVJN1cyNVhpNEZvTWZKLzlzby9Ib1c3UStmS2NXQUsySG5nRkZIbzZjbXJMUzNSaURBYnZVRFU4OEl2QnNzRFRFR2VWUXUvMlh2OSsxNmM1akxLT3YvYzhmWWJtWS95WGovNzZzdjc2OEh1dDk5ZFcvMTkrMm9vMm0yWWNzMkUyMFhtOHVNOTlPOVJnUkl4TGV4elhZbkVGRmc4bnNqNGhweVhiKzFFTllBc1pmeUJCZk1kVXV2bGpPa3V0bWpVQnlpS214Y0ZmcjlXYVZlTDMzZFZxSmRDUVBQcUhqZUtmUk1GcGRCSENHN2RhemFoc01xQUVORWgvbWltNjRjaHBFZ29keHVVMWg4bzR0Z3RiYXhjTUxtVmJ4QnJBUnN2ZWRXY1VtVmQwMUlkd3pFbHNnRmZuV1h3dmJKZzFTaFp4T25vRFZjZHZPNW5GMnVRSFk1ZjRGNVE0ZEllMTJnem5GSVc3Q2cyUkhUNnpiS2kzY3ZlN09tNmt4dGpkVkV3Rk5sYWh0b1J4Vmt5aXFmZmRINU5od0JVd3kwUUhUdkI0MkMyQnA4cjJaMktQQnR1R0dSeU90SUx5eDlNeVBIL1ZNL3V6RUZLSkY5Q2VOdlAzaHkvdE1NZ3NPOHNhdXBQYS9vemsrWDNpei9lZnZ5N1gvMzQ1bkVMOTE3djU3Yi91ZGYxdTl1OFgrM096WVp2Nys0QTV3Vm80R0lDNWZ0WUpldXUwQUpuUVFjRGJudGVmQldubHY3amQvKzNMT1hYcE1tZ0pLbUdsTFRIRkJtbGZJVWFmVW9WWGhoWENYOTd6OWRhSHhjdERhaGxQL05GUkRUZ3QwL1NuZytZM1hYU1YrMDlsSms5d2lza1EwMU95akhNM0R2NENjRWM2VVQ0SDU1bjNodUZhSHhGUTJwRk8yV2h6dUZKQ21VQjNUbHZxanJMVTRSekFQN3M1cVpNTWdQMCsvVFBiWnJldmRSdzM4RHBldTZYdHVCSHMyRDZyMCtkWmZOdEsvenpzNzFGdDFYUFNiOVJsT2k4UWQvUmFaZmZZZkYydVV1dVlaM3pVdkUrelROb0NNajAyUy9Ic3JrNTd5QU5vQlB5NW5hV0tBWWRBUk4xVy9jZmNFNUQvZno0SnBOc2hLZEVaK2RCdWEzdUxJZG9jMFhWbllCUTBKRm4zWkozS1owOTV1OEJMdnF3ZUlyNGlIaTlvbThuRWJ5WlRKM3pNTmlWOFcwTmc3RVpYZEVhTXpaejN3Tm9Laks1b2JNRkptTmIrUCtBU3A1YzBwMDNNRklVV2svZm9qNjIxMVhHNElRR1FNVEh4VkduZzI0ZTlmV1ZjajhQRUJ0cGxGQmlvYU9VOGZqOWhrbk1GYTRyTnkraHloZDEyY1p6U0ZCa2tFQjdvdEk2WXVnMjBsNjFWM1NZQ1BuMU0xWTBuZXV4bTQ0a2l2aWZ3b25EMTNjTnJ0UGdkQ2JyanF0NE9jVmI2TUV0ZnZZenpucTZ6eHlwSFVLajFuZWNnQ2V4S2tIL2IwZFFCR2RaSlllMTRUSStYZURCM0Q4NFhSODRTTFZURWRBQU95RWpseDRJRGNhM3NjOXpGc24rVEpjTTNkU0hDVmdhMHo4dVNRRzdzU0lSL3pDZkhIVG1rQ2NDNUNqemV3WWZnRjRVa0d2QTNiZUhJamZBNndoaDhVUjF1QnIyMFFMSTFnS1V6WCsxcnR1M00rbDdBbzUxcnhyMlg0UkNibzFhUmtiWHhxNlJ3dHgzZmhDMVpqcmJzTnQwNm1yVFpKaDB1eHgrRWhIOEZJSUlDYjhlNkdNazRKWW94T3hrSE1IVWI0clJyYWN2R3JCaDZQV2pEZ24wVERFajhoWVlYNmJNSldyTVlDM0wxOEdKcERJY0JZYmQvTTZET2ZJL2JRVnBPWWdOUVNIWVY3d2VaMzIxZGRhK1RSbmVrS3B3ak8vZDFPRVlrdm80RGRoaitHY0UwbnJ1eXVHYzJGb0RTc3JFNzlacWxXT1djd3ZEdW5PWTRNeXV6Zy9HQmF3cmk0OXptTTRoa2xGL2hub2JVbUlVc0h3UGd6Q3pUU2hpQ0JkRy8wRWhRSE5UVnVUWkNuTGFQVmV2NnVYUTdadjZNZVYrMnpmSVNvaGRyWVZ0M0lJS2xhckJLUU9qRjdqZHNlL0pKSC9reDkrbmpjZHpjdG9LRjFUZVNid0dVbHNpQUZBcjhtQ09icG9ZN3RBY29FQzZQNG5BNmh1VU1wMVJTWkF1MS9aVk12R2N5N2VucmQ5YVZPZW5sK1EvUVFoN3RwSHM2M2hZNVlkZnMzT2UvWmJNaVVtU2dXQzREL012Um1qaUhYNkQzMzRrcjZWSk1YclpTTEZnSzFpc2lzN2tEajQwN09rd2hPQml1UUh2Q3llTTVvVUxzYW5IYVlndWRGdkJ0M1FKN0trVnZUdGlTK0ZsMnM2NWRtMDAxd1JqUDVIbWR2TXVsM3BNYmcwQTUzVzdBT0RxSVk5b0xFZ3pXTEh2Y3NqSzZNekFBOGJvOHJXR2lYc1ZoUGdrRWJsMHdHSUdmZXUzOUErdEg1MjFpRHI1cDgyTXBnaEVicE8xU2JiYVBhZ0l1UHBIbk5LWGNuUC8rQXZkWlVaT1EyUTU5RkhhaDNFdTM3YnlRVkxjUTBLNEpHTnhmWTZzUXlQYzR4WDhiWFNVN05nQjVCOGRRMkJ6Q2wxOVgzY3dvUHRFQ0IxOCtRVTIzU1piM1FsOHcrc1d1SjI5bkhhd1RtQ3Mrb1RrWTM5Nlphbitla1JoZHExMzlheGd5ZlMzeVAyVk1kN292MFZabDI1MjZaZ3NORXE4WXY2ZmRhVGszeHZPRndxL0JIcVlFN0YvUm1oU25POTlHZmZjSm4xeG85d2VOK0R5eUJXenMzTXR6cHNpWG5taVJxWjBrMlJkeXRONi9KSU50NFBubjlLcnJIK09yVEtEQ0dUTmNaN0c1RGljMC9HWHp0T2MxRkN2MStNNjJKZ1pQd1FaOFR0UnhJalFPTWJXckJBczZZTVBmVi9LMFlRN1NaOVExc3owUTRyVTEzcGJPSWsvd1hTRVFLMnByRXR1S3ltcEUwYXpMbWNlbWltNk1xSFBRVVN4Vzg4WHJZYXUxTmRHT3U1NHpNb0IyczhBc1ZySGJHR3hnLy9oSTR3TTJYL3pFYmdXS2R1YnpXbklML3d3NHJYTEdMNy9Bc0FhWUZacGhvOGF0TU5ZRFpYRzJSbEVRUGxCTHV4eTFaVzh5WkhwYlhWeFEvU0JjeXBhL3MvK3NpaTBzRStWenFJbmlzazlTeldCeGMyZzRPajQzMEs4dHkrbnRHSnlXN3o3T3VMVHpGbEtDSlBkamRyR1k4ajBFRmtwNFc4Z1c3UzB2ZGpWYTd2YU9LNVpzbDUvbGx1WmJMVnBIc09wdnN1RnRkR0hnWXZDZEd2Y1puWmRUbkl5UTYzSTlUd0pOWUFpbi9aTzZPeGxkMFVOVU1SMGE0dWtWUnRxR0V3YWhxb2diemdRRDVLRHc0V3d4NEpLalZEd201REswLzFpdENUTTFodWY4VjR3R3JBVHFZRDdFNmdOKzJxa2dIbjZ3OW01TlAyREdIblZQSXpqTE9WOUdjd1ZheGM0c1h1ak1WaXlDWVhTV2wxL09tNjFPbHd6bU1UM0lZMkp0YnE0TWppcFlhUnM3Vzd5U0pjd1dlM2dTVDdkZHhxNlp6d0pCNTc4NzJEZWx6MktVN3FCb1c1Ujl3QVlROFpBSmpicnp2TDdMN3A3SE1qOXIvZTFZemM1dEJrTHdBamR3eEc1ZTRLVGRjZmZuREJSNzI3TnMxK2trZ0tsbEZ0U29INUxvZEhlWVBVNDBPZXI2WG83ZDRvR3FJNVFNNnpsVnhsWk9BRldRaGo5dnFnNmpBc0tNQVo1QkNLOGNxMVdqeDhyWkxmSXRwL0tpQU9PTWREemFuZnA2MGpUZ21BcVFvempVeXFiRktEY280NFRqcjdnZE5aUkFqc2FoOENHYU5SdjM3UFczMHZhY0t1QUV5Uks1UGU4ZUhndlBEWE8vNGJSNG5ua1dGMGlNYStOYnk0QjB6MTJ0ck5tMm56c2tKWmorQjNJNXU5NmhQOWlNZGlZdUE4R3JVME9BQVRycVdmQnI0Y25HK2ZjNlJYK2FmRmJsekFGd2hEbDY1VVNvOGZvc3phbGMxZW5IajUyY0Uvdm5SdkNDa0pyUFNhTGRDYjIydy9NR3dlZ2g3QmRXL3N5RkZZcVpKV3ZsMXJ3NnRON0RFU0FhcUtiOXBJK1R0dU80VGtsalBpTnRlWFVIRVJTN2tzNEc4TXI5eklYVVRPOVR5K0dFdDJLMytQSzRCWUJJZXZGdjBJUExlcGQ1NnRpc3BrQUZzeGwyRzNpVDRjVjB5cDFCeUtjMXJoZWJHQjlyMkVHK2lBWXdydDVuY1AzRmF0ZzZjc1RaZXEwajBGYk1taWRxdi9USmc1Zi9qWjArRVlwZEJ5YkMzcHUvNmNBRk5NaE9ybkFvTzk4WTlVRnA1Nit0KyszaHN4MzgzeTU1M01XLy9CVDdmdjFUcUo3M0RoV2M4WnRmWXJGci8vZEw1cDlYL3R2UDhQUU94NTdyT20yVCswYWRzUnRTYXRERnVqMW1BU2NkMituelg4dEoxckZnWHUvOHBqUE80SFpHbmJPajJqaHZlUDF6WFg3dktFUDlQZS8vN1BtdWYzM0FmenhmQkF5MVZSeW0rOEFUKzJ0YWJqdkl5bXJoUTF5emhXVDNoSGdIZSs4dkovYWw5MCtiMTlFV0RHaG9XSC9rZStVemdqd0Fkb0tSR25iOUhJanpyQytmU2pxTGFDTlE5SmtYWnFaRkIvc3VvOVZuTXZqNDRFZXh2dG5vZkxVa3NaME9pZ2VOeEZuRFJEeTJCMzY2ZktMNkZ1Ti9PTWh6Um9VejFWeWFOTmc3UU8vZVRwNWo5ZTFYckxhaW53cHBpRVVEbmo4TldqcjBmYzE0Q2N2M1hhdlZYNXYwOTF0SUNhN3pVREl3ZHd0T1FBZ1RrUWQvWVdxRFhadllrOWNSQm1VN1IvZ0k2YzBhbVd0NURFenY0VFN6d0NxaXN0WWJCdE4vTm9FTmNVWFZ2d1duckdFZnYzNDdGTlFSY0o0MDhhNXdkWTg2K3V4ZjhBWE9tRnZMVm5mdytKM3Q2ejZPdkhNMmNYVjJKWllFWUx1YUNuZU9IOWluRmlWZmxxUGFUSHhPZkxOMUlOakNid0lFUGJmMGZ2eDY1K0IybUNzc2tvWFJ4ZXBRNCsxR3c5S1JLL3Y3djl1aEl5ZmJ5czlaQldqZm9xTVpyQzJ3V1QyZlV5YUgxWFZPLy84emF1V2NKWlp4cGUwdDhiSVl4a2s1M1FtNU5pVG96VjRqTTdnQThlOVg4Ni95b1FBcU1xK0Rld0wwSlBzRXVBTmMrbkd3OThVS2VKbHQ3UUUzUDRPeHN6ZCtrNGVzeE40aG1DRjNZenJkb3NqOGNadnhXRnp1WEliang1RDBxenZHY3o4bmlLSHZyVGJtWkxQaWJNd1pNbXF6VGdkYW9uUUJSdW5vM2Y0NlhkSnVtbkRuQ2NWdFRxdCt6VkRKSGVNYWhqeUJkZmFtT0VqUUdDOEtnVm0rMjdiY2FscUNPVTVlRURmYThSUEd3aGNvK0tyMXpJYVlRcVRtQ0lPMnh1TkpLZklLbTVReEl1MWRIdGpscVZGRzBJeS9BL0tjTXhWQ2RneUVzUkdXWVkxaUF5dEs0OFFBNTQyYkM3WUxZTnRKNkltWXpkUFdLamltQzEwZGlyZXNLM0RlM2tuSXdXblptTmRZemF0QnhzRkJHQjE5WlFlM2pYek9Gc1dGaFhQZ21BSFdSekRrbE9wcS80NVRCVjdJU2djZTR6bFhPeHJ5Wi9TdXAydkFkeE9BRU40SWJ1RkMvT2NjRFFkY1BMMm1hdU5wSHBaUVlRWHFQblgrc05nejZXZTlEalRCdkw0T0VKbFEvV1dCOTdaSFBEbnUxUW1tQTlLUDZRQUNkdFlEYWNKcHJRZXBnRUpnOUFLSUpUc1haTThITjdsZ0pVOWU2RFk0eTVZK2JMVEhVRFJQV3pLR0hIakd4M0pwUWZaMndCaWtKanRFYm4zT3piYkg3QTdiNEpQUkZkVFc3cmxselpxSnc1RnN0RHZiOThEWlBCT3c1V2p5MzlOVjJEVTczTGVueGxodzRpR3NPem56RnZBeUVCM256TmdEYzN1Y1hDLy9NZ3Zid3FZeS92VFRycitaczV6Ly9xMS8vYzRabW1uYTBJSFl3K0Y0UzlTUXpubHNGakpWcURrZ3k1NDlKMzRqMS9FYzFWTnRRUnVucmdZaFRzbngwSmJjSUFqYjNyTFZGcDdmOGV6RGFjVDFnajBEOG5KMElNWXBiYkpMNVQwWmlQa2pkdUNrLys3ckczUUtDYXM5Tm9jcHNKbzVRSjZxYzJaYXNNRTZ6M040MFd0SU5XRzduajRkNjNwbVROczBkUXBJbXhYL0FHOGUrWWtYRnN5dzhUWTFmbHNOOWo5OHBtS2ZmQndEbXJXT3EwcTFTcThmRUplZUZ4S0FaUTZ2aFl5ZkI5dkJBWmI3MW9LVkFsOHpjT3RKVFhaNVBFNFp4b1JYNnlLQTBtMUQwVzB5ZDZiU2lTTFhYMlRZczI0TVVuaTRubU1oNDVsWWdwTjBydkNKdStWd3JZVjdtVmJvTzlvUjhaaXY0WVBxcUJjd045dDRuai8vNmEvL0RRYTNtZXNjOTJVbTZNaEx2STY0SEdGaDFmNHBTUEhmdmk1OTNicXFmQkQvYTBHRFZZdFdtc0FFZXJ5SzNTZ0E4d3E3M3NYSTJGcWVCd0J5SEE3L2RDWXpiTTA1ZG5Za3hOcUNuaU9ZK1JlZFA1S2hDSVc0TmRyc1dMSVlmOGsxazNOajJWL0RpY01tdkEvVzBJMktuS21yd1ZybjRyRmNGbEk0SWVXazFhLy9OcS91bVhiMllldTRVWWN6a0FvRzRsUVV5UFAwRUtVQldoU000OFB5SmZDK25VeGdCYmZSUUtlZ3JlbjhTNk9aZzgxM3FMZVZMdnM5YzZzdDA5SmFhRS9EbTlGOVF3WVhNS01EVENRUWNMSnVJSEtoaFBtdVRsVi9uQ051QjJIOW5ML0V6MGhMMGpuQXprSG9BLzU5ZzRiZ0ltd2hPM1huQXVwbzVuMC9SMTZCTlp3VU5rMEdkU25lNjd3TFJKQTEzQVpyc0VpR3J6M2lZSUFzYzRjYzgzT21ML3M5U21HM3BtY3VuQnBtMkxWSUJhdmxxWmlJUEk2U0hmSGNTS2crVHN5bXJWR0h1WWpud29BQmNZemRMTlNnVFV3OHJnL28rUzRMOFo3SHR1bmkzTnhzTyszbm9CZ2I3eXdaYm5mQlRCZWpwL0IrVEthbkFWVHJoTE4xRS9HYzNnT2d2SGZGY0g5R0hFQmlXRldMV0lZRDQ3ZERNTG4xNjdsTnNFN2VCRjJ6dkIrSGV0Y0tCbkcwZVA4OHhJN25OR2NUbjJkWVovZm55Q3VQd29IUy9zN0lhcmdvdytYaEhKeUVxN0gvKzNNTXR1ZXdObWUwNEM3UllLUm9mUlVid1NXZFUrUVl6SEp5TGE5aHlBekJCZTE0RWtPdWwzUEhXN1dYd25sdHJPOEh0a2FlbllrbGxQdHpHaU9nRVE3eDA3eFBMTzNRaG5lZHpqbFk1MFQ3YjRQbU94NmxnZi85YjM3VW9IWTk4WVRxSkpYaWFXZkJUbmRXMU1DNFUrNnNuSmJtZTlBZGd2NzhBTldOdEpuZ0c4bE1DVnpkbXdIdEhBRXp6bEdScTZEWW9ER25ERGY3MHhNd3FZS1FuRFg3SENMdHlOSzdmZFhUT3owNTljeDNRZnJyY0R5RGRyTEFMSUQ3RGxENUtydW14SnlJaVpUSHMxODhaUS9rN2FHNHcrSCt3U0ZMOFQ3Qmxwb2R2Z2VLVjU1UGR2QnJUcXF6VzB4bzRQUzY0Y1JGRDBldFFLSzZQQ1BTOFN4ZHN1eXI4azlBaFZVL3ozMGFBVHlmMDdwNGJFbnY3VHFKRjlDbGcyYVZpZWloNVpDOVIrb3ZCN0RCQW9kUTdIQW8vVlFhMjBKbDFROG0wSEdKU04xYkFLTnJuek1ub0dCQi9adU8vQm92YkJzRGFrMmRaNTNZbG92aVBBR2kxUDNCZGViVm9qT2V3NGJKYTVmcC9qcks0MFFLWE16ekxEM2RFZ2tKMnUzYVQvWXpkclBsWUdnd0ZKL0pmNTEzV3IrVCsyK1hkWUgzT2RySEJLNVJUTXUxcW9uaVlEdExZVjJBTnBESUkySi9CQXhrekZZYmN3ZGwyaUNZRWNoVHNXODk4ZkFvd0hsS1psNm5IamhRRTJWemlwNTl5UkNkZld1dHYyakY3ajZObk5PQmRaQ3Zqb1hzdjRraHk5RVA2VitWd29nL01CYnoyNm9IbW9KYVdjRURuVzE1bFgwWDV6eDdDb01UYjA2eDJZdXVCeVVWTTJ3MHhWTnVZckFGclZycDQ2a3RrQWZyR2YvMmlrZUhqZ1pkOXpsQ3B0V0Q2SXNUS29LWml2dmJ4VGtZY1hoZ0FZVFVIdXZYOGRlNWVBNFpodFVVK3R4V2lHREIzOHVXQkNkdzJXdDc2di96TDBiQzR0WlFmMlhwMzUvM3p2aVArRHBrT0dJYllybmxaZjEwSHEvTGcyWFFWQ2ZRVEg0WXhGcXNUNDIvbmhZYzFmcmZYZnJrcllLRDA2OGwrTFp0QVJpTU9GcmRoam1ZeDQ5NTJOQTU2UTYvRmZSWDVvdXR6RVB6RFZ4Q0FZUHRPaWJBTDMyQ2dTZURqWTZiRHg0UGdHTENjczdad0k3QWZEenBHTFY1MDFoMnVLZmJ3ZmJ2OGEzZ1c2aFdIRmM5N1dhbWRPWHlSVnhjelMzb2Y3Y1ZFY09od0NhMUM0N0trNUE5Wm1NYmdCcWVWWHNMdWt5d09ISVhMQ243aTZiY1BxY3RHdE1zUVVwMFRpbHFKNmQ1bzMybUl4OG5WNWFENWhIK2FJTnptUFA2cFNvRmFzSDB0Tk9mMDJEOWxxTjNuZEViNHpyVG1jMnN0VE9ZelVEZjQ0bW96aDdwSnkzem9tdmpOdDFqcVdKeGlxT2xNL3lZODFNcUsvVUFwUjJtV1crUHV3UkhGRHRjQUJrdGdmZGU1eUszUC9OcWVVaVk4TW5Rek5TZEMyU2UrSDR3QUx1ZVNQR011OGJrTWI3WkRCZU91bnFlRk16UU10MTRDbUcrQ3dkV0grY0N2bVUxc0E5NDJuNWJ6MzUxdk1BNlkxdzgwZXh4TGsvK2RWTThmODdWd3NCdFQ2NEJkRjFXVE51UTcvR0FyTE9UL2ZjNUhPWjh0QjYzUEpvbm9Kd0lUc0M3cjRvcmk1NTYrcDFScXg3TW1PRDlWckZBUUowWGpiZXlpTC84VFMwOS8vdUZCTWZtYVFwT2RUUUVacU9EU2Z1VEVUeERVQzlNakdiWmVRZkl5RzBGblFPbUhIYTBUenF0NU44NVB0WmRGYWVzMjBING4vcC82VUtkby9DZHZQM2ZLODNmWnZBV1JITGFCVDNsN1UzNHhWb2RURkE4M3ZKek9Qbjc0ZyszWi9ud285cEtlSWhkM2s2VUN3NTl5MGlRMjQzOFZLTXIwMk5Wc0g4blR2U2UwN1doQ2oxWURjb25ybmhxVFpEa1UzblRuWjU0c3lMb3dMelBJUU9qMlc2SkVFOG5LTnA4YjNHeUliYnlPRGtaaGdEb1NKY05MdGFQV1RtMmh2UGhrc2ZrZ2FFZmg4TUhKNWEvbmdyNjJnemRuTzJwTDNMNnFSV1lucldCdkVIWDM5Zmp3OFR4ai9OOCtSbW5PK0NJZGFaVzdLN29zTTl1L1E0Tyt3WjJPM3I4T2NWeWVBQjJhRHBNNERvaEZBQzUrR1U2MmdGZzViQWdnOVBSVThLRHh4RTUvTXpEVDZ5dGhPeDc4dDN5YURsSWhBS1M4UDAvMG9LY04xTmlnR1pEMTJFNnJjYUoycStORGluODh0SDJiaWZVOFBXY0tTdXRjZVhKUXVkUTdzdGNkUXdaMW0rZWR6aXVZdDNDUWp2UkRldWJLNUl4enhPVHczMldPVEFsb3g4azBldUlLRE9vMXJNU2tXWGRUSUZJMktsUkRKbitDaXcxVE02ZTN0RkRmSzN4N1JhRWJ1TUwyR0hrZFR2MHNUblo2ODlrMDduUElYTWUwcERGYUd4ckd5ZlZoS2tmMjlsbUVtalBTMHltZjh6ai84NDdBdXI5WnJLOEMxT0JlUzJlK1B4cmdiUW1wSjRobmtYRzZRR04xVm5pRmlaaDRxMW1mbXgxeEtmYmpIUTZXS1pudnp6YndWTzRqVGVlZkIydjNlOXdzdWFPbnJSb3pCU1Z3NXo1VEE3QWh2cjFnOWJ2RHlYRHRYbTJXSmFZcHRrU0Fvem1PdEhmRTZsTjRRR2x6cEZHTnBRQTh5d0xIUjYxM2gyaTNKNXFzNEg5V002cmxXQTg1dDNSeXhoMlFHTU1uajJtRHgzUVVCMmNXeXllbHVadExIZ3pjZUV1TzVEV0pDT3N0bDFud2l3MjIvTy95K2U1Z3ZhTlRKZGx0R001a2NQbjlJMDZDT0oyQm9PRFloVE5aRnZyT1FzbExZOXlhaWY1eDI0YVhiSHhxV25lVHZyT1pKd3pSdFhZN1duQVZreGdFdUgxL3RqZGpWTGpBNnRERkpNQmJxOS9oMk1oRHBIU1hFSGVsdG45bU01Uld4N0F4TDdaRzh1NzJyaWhxelljdWJIMmw5VWVyem56Y3pTOURHZW5NN2FwV2ZOd0NsZFc1elhmOTNSOFk1RndtZG5HRzZPQW52c1R6N0hmRitUTmdqVkxTNXI4SXVPNTd6dzhkQ0pqNlJaYllDVkZFaDA2K1EwM2pYM1RJWGd2K1pCZHA5YXd2eDdlaWcyd0VNYUtKcnc2VDJYMGRGcDMrbVhyWVQ4dUNNSEN1WmZsb1IzWXg5SU5aVDN1Z01uVHkwMVlaOTc5NE1udTVaRVlDSUJ6Um9Ta0ZtK0pvTGZGM0dkbTFobG83UkN3dXM4QjMxYTdsUFpkQVMvWjdNMEtUdHdkOXpuc09WblR0RHpCUWpWOXpDdWJFblM0UFBhZWIyZUh3bGI3MTdPbkZmZStMOXVqSFQrRjNtVlAzK3JPQnZEY1AvdFh3bk1PVlBMUUdBOXhxaWJnMkYvSlp2ZkllZyt0d2F6cGY2NXpMQ3JJNWZyL0FwWVRxQThhSmVyWUFBQUJnMmxEUTFCSlEwTWdjSEp2Wm1sc1pRQUFlSng5a1QxSXcwQWN4VjlUcGFJVkJUdUlPR1NvVGhaRVJSeTFDa1dvRUdxRlZoMU1MdjJDSmcxSmlvdWo0RnB3OEdPeDZ1RGlyS3VEcXlBSWZvQTRPVG9wdWtpSi8wc0tMV0k4T083SHUzdVB1M2VBVUM4enplb1lCelRkTmxPSnVKakpyb3FoVjRRZ29CODlDTWpNTXVZa0tRbmY4WFdQQUYvdllqekwvOXlmbzFmTldRd0lpTVN6ekRCdDRnM2k2VTNiNEx4UEhHRkZXU1UrSng0ejZZTEVqMXhYUEg3alhIQlo0SmtSTTUyYUo0NFFpNFUyVnRxWUZVMk5lSW80cW1vNjVRc1pqMVhPVzV5MWNwVTE3OGxmR003cEs4dGNwem1NQkJheEJBa2lGRlJSUWhrMllyVHFwRmhJMFg3Y3h6L2sraVZ5S2VRcWdaRmpBUlZva0YwLytCLzg3dGJLVDA1NFNlRTQwUG5pT0I4alFHZ1hhTlFjNS92WWNSb25RUEFadU5KYi9rb2RtUGtrdmRiU29rZEEzelp3Y2QzU2xEM2djZ2NZZkRKa1UzYWxJRTBobndmZXoraWJzc0RBTGRDOTV2WFczTWZwQTVDbXJwSTN3TUVoTUZxZzdIV2ZkM2UxOS9idm1XWi9QOGE3Y21MdzBYeHZBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINUFjQ0VDUVNSMS9VTVFBQUlBQkpSRUZVZU5yc1hXZDRGRlhidnMvTTFuVFNFd0pKcUVLb1NxK0NTRkVzS0tKK29vQ2dpSXJTdXdndnZTZ2RRU2tXUkgxRlJJb0ZDL0tDZ0NDQ1FpQzBrSkMydThsdXl2YWRjcjRmT3pOc0dvWVNpdXh6WFhOdHNqdTdNM1Btbkh1ZWVqK0VVb3E3VmY3ODgwK01HREVDZi8vOU44TER3OUd6WjAvRXhzYmlxNisrd3Rtelp3RUFHemR1eE96WnM1R2JtNHRISDMwVUxNc2lKQ1FFYTlhc0FRRHMzYnNYSTBlT3hPblRwNUdZbUloR2pScmh0OTkrdzlpeFkyR3oyYkI1ODJZVUZoYmkwVWNmaGR2dGhzUGh3TkdqUjJFeW1RQUFvYUdoU0U1T2hpaUs0SGtlZ2lBb3I0SWdRQlJGMzcrSktJcnczU2lsOGl1aGxFTGVBSkN5cndCQUtTWFM1U3V2WmQ0ajU4NmRpNG1JaUlqVGFyVXhMTXZHTUF3VHhUQk1CQ0VrSEVBTkFDR0VrQkFBZ1FBQ0FPZ0JhS1NOQmNCSXZ5Y0NFQUI0cE0wSndBSEFUaWt0QVZCQ0tTMmlsRm9vcFdaQkVBbzRqak82WEM1VFhsNWVYdlBtelUzUzcxQ2ZyZHovaEpDeW44bnZBUUFsaEpSNzlka293ekFnaElCaG1MSWJaVmtXTE11Q1lSaklmNnRVS3VWVjN0UnFOZFJxTlRRYURUUWFEYlJhTGJSYUxmUjZQZlI2UFFJREF4RVVGSVRnNEdDRWhZV2hSbzBhaUl5TVJIUjBOT0xqNDNINDhHSFVyWDhQL0hKamhOek53SFk5NHZGNGtKdWJDNFBCZ0lLQ0FsZ3NGaFFWRmFHa3BBUTJtdzEydXgwT2h3TXVsd3N1bHd0dXR4c2Vqd2NlandjY3g0SGpPUEE4WDJxVEFjeDNFMFdSeUFCWEJzeEtBWm44ZnhrQUt3Vll2djl2MjdhdGdWNnZyOGV5YkYyR1llb0FTQ0tFSkFKSUJLQzdUWWJaQmVBU3BUU1RVcG9oaXVKRmp1UFNyVmJyaFFFREJweVh3YzBIMkNvRHZISUFTQWloMG5oUkVISjVZQWdwQlh5K0lPY0xlbVhCemhmMGZNRk9wOWREcDlVaU5EUVVNVEV4Q3NDRmhJUWdMQ3dNNGVIaGlJeU1SRVpHQnRxMjd3UzFXdTFmWEg1Z3UzWVpPWElrVnE1Y2VWdWRVM1IwdEZmTnFRRE1aSzFNQmpiNTNzbWFtaTk0K2Y2L2IvL0I2SmpZMktacXRib3B3ekFwaEpBVUFJMEFhTy93VytnR2NGb1V4Vk9DSUp4eXVaeXA2UmZTVXgvcDI2ZEEwaFI5UVUwc0E0Q2dsQ3IvWDBHam80Umh3QkFHREVQQU1ES1lNWlJoMkFwQmpWV3hVS25VVUt0VVVLblYwS2pWRWhnU3FEVWExRXBJUUVCQUFBSURBeEVjSEl5UWtCRFVxRkVET1RrNWFOcXNKUVJCUUV4TWpCK1ovTUIyODhSb05DSTNOeGNta3drRkJRVW9MQ3hFY1hFeHJGWXJiRFliSEE0SG5FNm5vcVdWMWREK1FVc2pzdGxaQnRCOE5iTlMybGhaVUh1NDd5UHM0bmVXdE5icGRLMFlocm1QRUhJdmdBWjMyVzA2SjRyaW43azVXY2MwR3ZXZlk4ZU0rWFB2M3IyaUQ5aUpsUUNlWk1ZU1NnZ29RRUJJWlNESGdHRVpzQXdEaG1GcEtZQlRzVkN4bDdVMmxXeWlxdFVRUlJIQndVR0lpSWlBWHE5SFFFQ0FZcDRhalViVWIzQVBha2dhWEd4TUxDS2pvdnlMemc5czFTZkZ4Y1hJeWNtQndXQkFmbjUraFdhbjArbUUwK21FMisxV3pFNk80K0R4ZU1EemZDbFE4L0dqRVY4L1dnV2FHYW5BWDZab1ptUEhqbVVmZSt6eFR1R1JVZTJEZ29JN0VFTGFBd2p5M3pIQWJyZkJXbEtNVnZmZGE2T1VIdUo1L3BEVmFqMzg2cXV2SHZyaWl5OTRRa2hab0JNck1tM0xhSEcwbEYrT1VjQU5MTXVBWWIwZ3AySlpzTDdnSmdFY3d6QmdpRmN6TCt0L001dk5xRlU3Q2FHaG9WNFROU0lDMGRIUmlJdUxRM0J3aVArRytvSHR4Z25IY2NqS3lpcWxwUlVWRlNsYVdsWDhhR1cxTkZrNzh3ME95SnFaYkdiNmFHUyt2akpDS1dVc0ZrdmpvS0NnKzFtVzdRS1Fya2VPSEFtTlQ2anR2MWtWU0c3T0piUnAzYnJjYytyUTc0ZjNSVVhIN2k4b3lOL2Z2bTNyTkFuVUt0THF4RXBBN3JJbXh6Q1VJVDRhSE11Q2xiVzRjdHFiQ3FJZ0lqSXlRZ2t3NkhRNjZIUTZGQlVWSVM2dUpnS0RBaEVjSElMUTBGQkZlNHVKaVVWd1VCQ3lzekpodDlzcXZkN0F3Q0FrSmRkRlNHam9MUnZ6a3VKaVpGeThjTXZQVTNXM1RYWktLUXdHQTB3bUUzaEJnTTFxclhBL2k4VUNrOGxVU2p1ejIrMktkdVlMWlA4QVloVkdOV1dIdjJUL2dQajR4OHFDbWNQaDZLYlJhSG93RE5NRFFGUGY4M1E2SFg0RXEwU2NqZ3JISnRUdGN2YlZhclY5YTlaTXdLWHN2Sk04ei85aXM5bCtiWnJTYUQ4aEVIeUJqbEphVHFPVC9ITUFJWlNJSWtSQ3dJZ01CTUpRaGhIQXNneGhHQllzejFLZTVhRlNTUm9jcDRJZzhMRFp0TkJvTklwMjczSzVVRkpTQXExT0Q2ZkxxL2s3SE42NVpyTmFVVkpTZ2lKTEFRSURBeEVXRm5aRkxUWGo0Z1UwYTNIdkxSdnppK25uNFhEWS8xR2JydTd6Vk4xdG9IYnMyREdBTUFnTUNrWmdZQkJpWWt2djQzQTRrSk9URGJlSEI4ZUw0QVFSZ2tnaFVpaXZGS1QwUmxGbW82QVVFQ21GS0ZJaUtwRkw3MWJXeEtTVUVpcVptY1Ficm1PY1RtY2ZqVWJUaHhEU0IwRE5hNzNtSDNmL2dJMGIxc05rTWlJK1BoNGZiL29NNTg2ZHhkQWhnNVI5SmsyWmhvY2Vldmh1eGI4bUtwV3FTVmhZMkJ0Wk9YazVnaUQ4WUxmYmYwcHAxT0FueVZ3VktnVTVTaWtGb2Q0QUt3VWhJa1NSUUJCOEFJNWx3Zk1zV0JWUFZid0tvaWpBNFhDQTR6aW8xV3JGWFdHMzI2RXBMbGFBVG5adE9CeDIyT3cyRkppTUNBME5oYzFtUTJSa0pIUTZYYVdnY1N2bG4wRHRacDNuWFFWc0JvTUJJQXlpWStJcU5sMXljNUdYbXd0VHZnbG1zeGxGaFlXS0g4M2hzTU1wbTUxdU56eHVOenljQjV4SDB0WjRIeDhhTDBBUWVNbmNGQ0dLc3NsSkNhVWlLQVVCS0xsc2Nuci8vKzIzQTkwVEUycy9HaDhmMy9kNndNejNlaGJNbjR1WnMrYWdkZXMyS0NrcEFRRFVxMWNmUC83OEt3RGdwYUdEcTIyOE42eGZoOGNlNzRlSWlJaHk1N1ZzeVRzNGNlSnZhRFFhOUhpd0YwYTgraHBZbGdVQVpHZG5ZOFd5SlRoeDhnUzBXaTE2OXV5Rmw0ZVBVRDZ2RHBHT1dmUEV5Uk12YXJYYUY2ZE1uWll6ZE5qTDM5bnQ5dSthTldtMFh3STRvWXpaV2xhTGs0SVBJa1NSZ1NnU3lnZ0NCSVlGS3pCRVlIbUlva2lkVG1jNVlITTRIRkNyTlY1WGhqUy8zRzQzbkU0WEhBNG5DaTBGRXRBNVlMZmJFUkVSZ2NqSVNMOWE3Z2Myd0dUS1IyQlFjTG4zYlRZYnNyT3p2RGxwK2Ztd0ZGcFFYQ1Q3MFM1SE85MHVGOXdlTnp4dWp4ZlVPQTQ4eDRGVEFJMEhMd2NFRkZBVEpUQ1RFMmk5SUNhYm1hZE9uMjBTRUJqWWoyR1l4KzEyVytQOC9IekV4OGZma09zOWszWWFrWkdSNk5peEV3QW9DNEVRQXExV3EveGRYZkxoeHZYbzNLVkxPV0NiOGZZME5HblNGUCtaUFJmRlJVVVlNL3BOMUV5b2lYNzlub1FvaXBnMFlSeTZkWDhBcytiTWc4bG94TGl4b3hBVkZZMytUdzJvbHZPczVKZzFvNktpaC9WL2FzQ3dyQnpENmM0ZDIrMzR6K3k1Mzc0dzhQOU9BUkFrN1UwZ3hLdVlYOWJrS0tXVVVFSUVTaWtob2loU1FrUUlBa05aMXV1T2NMbGNVS2xVVkE0cXFkVnF1Rnd1cU5SMnlhWGg5ZE82UFI3SlhIV2h1S2hRMGVaY0xoY2NEZ2NjRGdlaW9xS2cxK3V2NmJxLzJ2SWwzbHU5RWovOXNoY0E4TXJMdzJDeFdFcTVZeVpObm9JZUQvWUVBSncrZlFxN2R1NUE4K1l0OEdEUFh0VytYaGZNbjR0dmQrMVU1dWpySTk5RS82Y0dJRDA5SFV2ZVhZeVM0aUlFaDRSaTRxVEpxRlhMNjJjK2VPQTNyRm16K3U0Q05sN2dFUmdZVkVaN3lFRnVUaTZNUmlQTVptOEtoMWRMczE3MnA4blJUby9rVS9QSS9qUXZxQWs4RDU3M0RRZ0l2bWthcEhSQUFNeEhIMytpNjl5bDYxTXN5L1luaFBUeWRhcmFTb3F1K3pxUEh6K0dHZE9uS1pyQTQ0OTZ6Y3grVC9USG9NRkRxdlFiaHc0ZXdNb1Z5MkV3NUNFeE1RbGp4bzVIU3BNbXl1ZDdmOTJERFJ2V0lkOWtRa3hzTElZUEg0RjI3VHNBQUVhKy9pcXlMbVVDQUVhLytRWlVLaFlKQ2JXd2N2VWFpS0tJcmwyNzRlRytmYUhWYWhFZEU0TldyVnZqN0prenltS3FFUjZPNXdZT2hFYWpRVUt0V3VqWXFUUFMwazVYMjd5b3dqRWJFVUlheGNiR1RyaVVuYmZiNlhSc256SDlyUjJmZmJiWkNZQ1hORGNaN0JTUWszMXhoRkJRNmpWVEthWFU3WGFENTNraUJSVW96L053dTkxZ1dSVjROUStPdit5ejVhUmdsTFdrUkFsTWVUeWVVZ0FYR1JsWm9mWW1paUlZaGluM053RGs1ZVhoMjEwN1MrMi81djExeXQ5dWx3dERCcitBanAwNkF3QldyMXFKOVBRTGNOanRxRmV2L3RYWitrMmFLSW5zVnpySHN2OWJ6R2E4dCtZRE5FNUpLZldkV2Y5NUc2TkdqVUh6RmkyeGErY09MRisyRklzV3Z3dVh5NG1GQytaaDVlcTFZTzRtWVBNTkZEaWRUcHc1Y3dabno1N0Z4WXZweU03T1FsNWVIdkx6VFFyQUZSY1h3eXFab2phN0hRNjdBMDZIMHlkWHpRMjMyMDNjYmcveEJoRTg0SG1PU0RscFJCUkZSaFJGaGxMS1VrcloxTk5ubTJkY3lwN2RyZnNESjFRcTFRZStvT2FyUFY2dnRHalJFdHUyNzhLYm84YWdaczBFYk51K0M5dTI3Nm95cUYwNGZ4NXZUWnVDRWErOWpsM2Y3Y1pUQTU3R21ORnZ3R1EwQWdBeU16TXdlOVpNVEp3NEJUdS8vUUdQUFBJWXBrNmRESWZrckYreGNqVzJiZDhGQUZpeWJEbTJiZCtGbGF1OUpXZ013K0M1Z2M4akxLeUcxOWw4TVIwSGZ2c05iZHUyVTdUS0ZTdFhRNmZUS3hQOStMRmphTmFzZWJYTmk2czVKaUdrWjBCQTRNb0ZpOTdaWDc5Qmd5bHIzMS9YakZLcWhUZmhXUU5BRFZBVnBWUWwzM2Q1SGtoemduQWNSenlTTnVaeXVZakw1U0l5V0RtZFRqZ2RUampzRHRqc2R0aHNObGlsd0pYTlprTnhjVEVLQ3d0aE5wdGhNcG1RbDVlSHJLd3NYTHAwQ1c2M1d6blBJMGNPWStya2llQTREaGFMQlM4TkhWSktHMXUwY0Q1R3Z2Rm1wV1B5M1hmZm9sUG5Mb28yT095bGw3SDRuU1dvVTdmdVZZOXZTRWdJTkJwTmhaK3RYL2MrTm4rNkNRQnc0c1RmZVBPTjE4czljTXI2eVI5OTdIRTBiOUVTQUhEUFBZMWdsZ0F6THk4UFlXRTFVTE5temJzdkt1bzFTWTNJenNxV25pTDVLQ3kwNE1LRkM5ajl3L2ZvMXUwQnVGeE9PRjJ1eTZhbnBLVmxabVlnckVZTkVFSWc4RHpoZWErRzV2RzRJUWdDWVZVcThCeEhaSkhOemQ2OSsvUlorOEg2Wi9mOWIrOVRIMjdjQUk3alVMZGVQVXlhUEVWWlRMZVQ3Tnk1SFYzdjc2YVlzTDM3UElUdnZ0dUYzYnQvd01EblgwQkVSQ1EyYlB3WXRXcDcxZjlISG4wTVM1ZThnNnlzUzJqWXNHcjFqcWtuVDJMMHFKRnd1Vnk0djF0M2RPbDZmNFg3clhsdkZmUUJBWGpvNGI0MzdmcXJja3hDU0sySThJaFJRY0hCb3pLemNyZVdsQlIvMVRTbDBTOEE0YVhJcWlCcGJZS3ZCZ2VBOGp4UEdZYVI4eGVwbE5kSUdJWUJMNmdvTC9nbWNYdjl0MDZIbzFRK3BLelJlUlJ6MVd1bVJrbEp2YTFhdGNhdmUzN0J6Qm5Ua1pPVGpTZWZmQXJoRWtocy8yWWI2dGF0aDBhTlV5bzF6YmQrOVNVV0xuNVhlYTh5WUxwZWVmYi9CbUwwcURkZ05oZGczLy8raDFsejVpcWZtUzFtVEo4MkJXYUxHVzNhdE1Yb01lT2cxV3JScjkrVHlqNWZmUDRaZXZidURRQ0lqWTJEeFdKR2VucjYzYVd4aWFLSTlQUUxPSFBtaktTbFhVSmVYaDVNSmhQT3BLV0I1M2xjeXJxa1ZCTEllV3BPaHhOT2x4T1VVbmpjSHVKeHUwdHBhRkxhQnFHaXlCQkNHRW9wMCsrSkoxVVhMbDRhUEc3OGhCKzdkTDEvcTlsc2ZtckY4bVY0ZCtreWZQTHBaMUNyMU5qNjFWZTNiWkFsTHE2MG42OTI3U1FZREhrQWdLQ2dJQnc5K2dlR3Z6d1V6ejM3TkFhL01GQVozNnBLU3BNbTJQM1RIbnp4NVZiazVlVmh3L3AxNWZiNStLTVA4ZnZ2aHpCMzdueW9WRGZuR1Z6VlkxSktZU20wSUNnd0NBekRQQkVXVnVQVFM5bDVXOUxPbm4rMmVmTVdla3FwRHBlSkFYdzFPSVpTeWdpQ3dQQThUM2llSnh6SEVaN241Y0FCY2J2Y3hPVnllVk0vSEU0bFYxSU9IdkE4cjFRc2hJYUdRcS9YdzJReUlUYzNGMWxaV1VoUHZ3QktLWVlQSDRFL2ovNEJyVWFyZ0xUUmFNQ083ZDlnMkxDWEtyMjIzL2J2UTFKeUhjVEd4bDNYV1BidTNSdjkrL2RIZkh3OE9uVG9nUDc5KzZOeDQ4YWw5Z2tLQ3NJcnI3eUtMLy83QmJwMTcxN3F3VGgrL0VTODgrNVNiUHIwYzVqTlpueTlkVXVwNzI3NThyOG9NQmZncWFlZUJnRG85WHBNbmpJTjgrZk52bnMwdHFLaUlwdy9meDZzU2d0VHZoRVdzemMveldyMW1wcFpXWmNRR3hlSDNOd2N4TVRFS0U5Q1ExNGVPSTRESVFTVVVzSnhIZ0FFSE1jUlFlQ0IwaldhWlBOblh3UXZXamgvOEpLbHl3Y1JRcG9lUEhnQTgrWXZCQlZGdkRGcXRHS0NOYnpuSHVUbDVkNldZeFVURXdORFhsNnA5M0p5c3RHeXBUZnZhTi8vOXVMVFRaOWd5ZExsU0toVkN3RFFwVlA3aXJTYWNtRG5kcm53M1hmZm9rK2ZoNkRWNlJBWEY0Y2VQUjdFL3YzN3lrM2FIM2YvZ0dVclZ0MjBoTk9yT2VhUkk0ZWhVYXZSb0dGRDMrdnRHQmdZMkhIN3ptOWZkcnZkbjMzOTlWZi9uVEJ1YkFraFJKQjhjYklXcC9qaUJFR2dsRklxaWlJNGpvTWdpSlJsUlFpaVFBUkJvSUpLZ0NCNFFjODNKOUp1dDBPajBVQ24weW5sV2JMLzdmeTU4eWpJTDhDYU5hc3c4UGxCT0hzbURRdm16OFdreVZPeGM4Y09XRzFXdkRMOEpZQjR5UnlHREhvZWE5WitBSzJVUXZMRjU1L2g1VmRHWFBkNGZ2Lzk5d0NBRGgwNklDTWpBN201NWVmN2hRc1hNSC9lSFB4bjFoeHMzTEFPdFJPVDhQRERmU0VJQWxxMHZGY3hoWHYyN0lYRHYvK3VmTy9YUGIvZ3h4OS93THRMbHBlS2xyZHIzd0h0Mm5lNE96UzI3T3hzbkR4NUVsbFpXY2pLdW9TODNEeVlUSmVEQlVhREFZSWdJaWd3Q0VXRmhZb2ZyU0EvSDRJZ0lDUWtsR2kxT2tJcGhTQUloQmQ0SWdnOFlTUUJ3RHo1WlAvd2k1blpZenQxN25Jb0pqWjJjZHJwVTAyenNpNEJBSktTa2hFVkhZM09uYnNvaTN2SGptL1FvOGVEdHk2UUlwazZBRUFseWlRWmhCN3Urd2oyN3QyRHc0ZC9COC96K09XWG41RjY4Z1I2OXZLNkJNMW1Nd2dCR0paRmNYR1I0aU9oWXVrcWxyajRlQnc2ZUJBY3h5RmZvbW5TYUxYNDVPT1A4UG5ubThGeEhJcUtDckZ2My8vUXJGbXp5NmJ3anUzWTl2VldMRjIrVWpHZnF0MzhydUl4M1c0M2ZqOTBFUFBuemNId1YxNUZZR0JnUllEZVJLZlR6WG4yMmVlK1AzOGhZOFRxOTlaR1NScWNsbEtxb1pTcWZUVTR5US9MZU1rUGVNTHhIUEVHRGR6RTdYWVRsOHNOSDU5Y0tlM05icmZES2lYeHlyNjNyS3hMT0hUb0FPclVxWXR1M1IvQXRPa3pvTkZvWWJGWU1IVFlTL2o4aXkzWStORW5XTE4ySFRRYURUWis5SWtDYXFkUG5ZTGI0NmxXbjZhdkhQM2pDQ1pObm9yN3UzWEh1MHRYNEZUcVNWQktVVnhjakJjRy9wK1NvblQ4K0RFa0pTY3JmMy8wNFViTVg3Q293dkVIL3VYcEhwUlNuRDE3RnBtWm1RckZFS3RTbzZTNEJGYWJGUTY3SFE2bkU5azUyUWdJMEV2T1Y0TGk0bUlRaHNEbGNoTzFXZ1VQNTRFb0NnQkFmT2lCR0FEa2h4OS9DYmwwS1hQWWdmMzdoakVNVXhjQU9uYnNqSU1IRHlJd01CQ2RPM2N0Wnc3UG1UTUxEenpRbzFJZlIzVkwyUVRkQmZQbllzSDh1WGl3WnkrOE5YMEc2dGR2Z0xkbnpzSjdxMWZDa0plSDJvbUpXTGo0WGNSSTJjeDlIbm9ZSjArZXdOQWhMNEJsVlhqczhYNm9YNzhCTElXV1VzY1pNMlljRmk5YTZIMFMxNjZOZFJzK2drYWp3WUtGaTdGeXhUSjg4ZmxuVUt2VjZIcC9Od3dhL0NJQVFCQUVMRnJvTlFPZmZicC9hVE54MCtick5vOHFrcW9lYytScnI0SVFJREV4Q1dQSFRWQjhrRmVRdWxxZGJrYmZSeDU5b2NlRFBULytadHZYbjQwYk83cFkxdDRrLzV1aXhYbFRRNGhJS0FYMVZxaFFRUlFoaWdMaGVSNHN5MUs1Y3FVaWlpdjVZV1V3NUtGR2pYQTBhTkFRWjgrZWdjUGh3Sml4NDZxVTJ2UDVaNS9pcVJ1Y1ZuUGd3SUZLUHh2dzlEUEszeEVSRVJnL1lSSUFJRHc4SEM4T0c0YlhYeDBPU29Ia09uWFE3d212YjIzK3ZEbHd1OTBZNVJOb21QclcyMmpRb0NFS0N5MTRlZGpRZjIrdHFOVnF4Zm56NTNIcDBtVS8ybDkvL1FXR1ZjRnVzOEh1azV1V2xuYjZzdlpDS2RScU5kSHBkTEJhclRMdkZwR0lJQW5ETUlSU3lpUWxKYkY3OXU1L21XWFpsMy82NmNmRysvKzNGelArTXhzQWtKNmVqbmx6WnlNb01CQ0RYeHlLNXMxYktPZTFiT203NERnTzQ4WlByRGdpZVM0TlhidDJyZkoxN3QyNzEwOVFXSWxVTnBhM2NNeE9wNTQ0L3RIeTVjczNmL2ZkZHg0SjRCUVRGZDdhVlBtVnlzWDJETU5RUVJBVS9qZVZTa1ZabG9WYXJZWktwVkxJTFdYVE5DbTVqc1QzSnBGWnhzU2daczBFSkNjbmxVdDN1dEZ5OExmL1ZYbmY5aDI3Vk50NS9DczFOcVBSaUFzWExpQXJ5NXZDNFVzRXliQXFyelBXNllUTDdZTGRiZ2ZQODRpT2lRSFBjWEM2WE1SaHQ0TmhXUkJDaUNBSWNpNmFFdVU4ZmViOE15OE0vTDhSUnFPeGJYeDhQUExLK0E3cTFLa0R1ODJHZ29KOE5HMTYyY1RhL09rbW1NMW16Smc1NjRaZHExNGY0RWV3cXh5Yld6aG1qV3JVQ0orL2MrZk9KMHBLU2o0TUN3dmJRUWpoZkFGTzB1S0lWNHNEcFZTZ29sU3JKL25qSUlvaVVhbFUxSmNWUnRiYUFJS2lvaUx3SEs4ays3cmRicmhkTHJoY1RpUWxKbFVySFZKQVFHQ1Z5cW9DQWdLcmRhRC9kY0NXa1pHQjlQUjBaR2RuSzBtQmN0S3QxV29GdzdCS0tvZkg0NEhGYklGS3BZTGI1U1k4ejROS0JlcmV0QTJHaUNKUEJFRWdBSmcyYmRwMmYyZkowbGNEQXdQN1Rwb3lGVk1uVDBTTjhIQ29WQ3dDeWl5V2pwMDZvNlM0U0VrMk5Cb05XUFBlS2lRazFNS1FRZDRvSXNPdzJQalJKOWQxdlN6THdtNjNWZnVUK0U0VHU4MWFhUWtXYzR2R3pHNnpnbFdwUUFocEV4b2Eya1lRaEw0bWsrbkR1TGk0QTRRUWpsTEtFMEprZ0JOQklJSkNoQ2dxQkptaTZNMGFrYW10UkZGVXpGTUEwT24wc0phVWVGTkNlRGtsaEx0Y3llQnl3K2x5b1pZVTlMblJrbHluM2o4V3dnY0VCQ0s1VHIxcUhldC9qU2xLS2NXWk0yZVFucDZPbkp3Y0dJMUdoV1pJcnZmTXlja0JZUmd2SzBlcHNpaWVlTms0ZUYvNklGbExZMDZrcGpVSURnNStqUkR5eXEweW55b0g4a3lZTFJiRXhNYjcwY3hYYXpma0lqSXlBb20xeTFNNlpXUm13bXkrK1dObU5PUWlJaUlDU1ltbHo0bmp1SFdwcWFrZnQyelo4Z0lBRGdBdlJWSVZINXpNSCtmTENlZERjRW5MbXFVeUpaSWNNWlZUUThMRHd4RVZGWVc0dURqVXJsMjdXa3ZxYnFYOEt6UTJ1WW9nSXlOREFUV3oyWXppNG1LZkluWUgzRzQzUkVwOXk2SUl6L1BnQlI2aVFpdEVDUVVsb0pUMGYyb0F1M0RST3lOWmxuMERRTUxOdUphZzRPQ3Iyajh4c1RieTgwMHdHbklSRkJ4eTEydHVkcHNWTnBzVkFzOVhDR29Ba0pTWUNKUHA1bzJaZkU2aUlKUUROUUJRcTlYRFdyUm8wY2R1dDYvdDNMbnp4OGVPSGZQSUFBZHZrTXEzQUYvaGhwTkJqbUVZSXZuZnFFeFI3dHRjUmdZNFg5WmV1ZWRDdzRZTnI3blc5SGFXTzE1akt5d3N4Tm16WjVVOEdWOE90Ykpra0lXRmhmQldDL0RnS3RmU0dBRGszSVdNbmhxTlpoU0FCMjdtb25TN25Xald0T2xWYTZzWE16SmhzWmdoOENKY3JydVRvMDJ2RHdERHNvaU1pRVJpWXExLzFFWXlNeThodjZBQUFpOVUyNWpwOVFGZ1Zhb0tOYldLUkJURlBTYVRhVjFjWE53K1FvaHZnSUdYTkRkQkFqUlJEaTZ3TEV0OXdJeXExZXBTSkphK1BSYmtCakp5ZDZ5a3BDUTBhTkFBTldyVThBUGJiV051R0kybDBqbGsydTZLR0c3ZGJqZnNkanRjTGhjUktZVWdFVUVxV2hxbEJLRE1rYVBIWXFPaW9rY1JRa2JmN09zeEdmTVFGeHVEdUxnNCtPWHVGby9IcytxWFgzN1oyS2RQSDRNVVlKQTFPTUVuY2lxREc1VzFOVmxUVTZ2VlZHNEJXQmJjZkUzUytQaDRKQ1ltb2tHREJ2K3FKakozckNtYWxaV0ZjK2ZPSVRNelUwbm44RzJ1SXRPNitETGRDb0pBUEI2dUl2WU5CZ0J6NGVLbC9pcVZhalNBKzI3bXRUanNOdGlzSlFDb0g5VDhBZ0RRYURTdjllclZxNFBaYkY0YkVSSHhIU0dFbGNDTjg4bC9JMTRsVHhSOUd2NVFINnA1V2xtdVcyVjFwOVVWVlBBRFd4WGt3b1VMT0gvK3ZBSnFjanBIMmVZcVplaTdDY2R4QUtoODArVXVUOHkyYmR0cWhZU0VqTW04ZVA3Vm0zMHR3Y0hCVUtsVWlJK1BRMnhzckg5RisrV3lPVVZJeS9EdzhEVWVqK2VEMzM3N2JVTzNidDJ5Q1NHTWJKcFNTbmxjWmw0V3ZWNEo2aHNwSmI1UjA3THBJVEo5dlMrMXZjZmpRZDFyWVBEd0E5dDFTbHBhbXBKNEszZU5LaXpGZE9zb0MyckVweGVCNGt1RFZEbmdkcnVmVUt2Vll3RzA4aThsdjl5T29sYXJYK3JhdGV0OStmbjVhNktpb25aTHZqZEdBalZaZTVOVFFjcHFiK1hTUXNwV0x2aDJUcE1CN3A1Nzd1eWtiNUtSa1hGSG5LaGNIaVVIQ1h6OWFXVzFOSjlPVWNSYldPenREQ1duY0ZCS3ljOC8veHlXbUpnNGptR1lDZjZsNDVjN3lQZTJiT3ZXcmVzblRacFVDTURqaytBcnlQNDN1V3BCU2dueDliMVIzd29GdWZWZlVGQlFPYitiSEZTNFU5TkJWSW1KaWJmOVNYSWNoOVRVVk1WM1ZsR0hxQXE2UXZsMlUvY0ZOY1p1dDNmUmFyWGpDU0U5L1V2RkwzZVl2RGwrL1BpVVo1NTVabTFTVXRJUkFDd0FPWHBLVUpySkY2SW9naEFpbDJRUm1mK3RySWJtVzJUdmNEaGd0VnBSVkZTRWxKUVVxTlZxdnlsNm84WGxjaUUxTlZVcGtaS3JDWHhiNGlrOUNTVENQVmxUazAxUENkZ1lTaW5qOFhpR3N5dzdFWUEvbzlVdmQ2UXdETk1qTVRHeGNVbEp5Y3FRa0pBdkFEQ1NlU29ubFpjS0xNZ1dEL1VLa2FzWGZQclk0a3JGOVNrcEtaVjJ4YnB0VGRIYk9kM0RicmVYQXJXeTFRUmxHeGJML2pUSi9KVHJQQmxSRkVsdWJtNThkSFQwQkVMSXEvNmw0WmZiMWQxaU1CaGdOSm9nQ0FKc051cy9mb2ZuK1hWSGpoeFpOM255NUZ4SmM1TXJGNVRpZXArOE4waXBJWElTcjVMekpuZW1MMXVsRUIwZGpabzFheUk1T2ZtMkFMZmc0QkN3TElQbzZPZ3JaaERjdGhxYjFXcXRGTlJraGx1NTk2SnZrRUFHTlovSUoyTzMyenRydGRxSmhKQUgvY3ZITDdjcnFCMDdkZ3dVUkttR3FHSlcyYkQ2RFJ2WDZkcnRnZmM2dEd2ekJ3QUczc2lwVElEcXBVWHkva09sdnJkZWpZMVNMME9TMUFkWDN1UWV1b0pJd1FzVUhDL0M3UkdRbUp5QW9LQmJYOWxpdDl1UW0yZEFibDRlN3J2MzNqc0gySXFMaXhWUWs0dlp6V1p6aFpwYUpaRlB4Wi9tZHJzSHFsU3F5UURxK1plUFgyNVhNUmdNb0NEWFZML0tNRXozV3JWcUo1NU1UVnZSSk9XZUhhQ1VvWUJ2M3cxQm9nc1J2YkVBQ3NrQ0JienJoQ29tcVJ4UmxjeFVVYVFRcVJSTnBTSWFObWlJNEpDUVd6cFdnWUZCQ0F3TWdzbVlCNFBCVUdHYTFHM0ZvUHZERHorZ2ZmdjJpSW1KUWRldVhURmh3Z1RzMmJOSFllaW9LQUxxVnZvUGVIMXEwc2FJb3FpYVAzLytsUFQwOUxYZmYvLzliUU5xUE05ajFLaFJpSTZPUm1ob0tJWVBINjUwZC9MTDNTc21VejZDZ3E4TE1PcUdob1V0UG5mKzR2Q0c5elFLQUtDVHVtZkpQUmRZU3NGU0tuZkxFZ2pQYy9Cd25KZXAxK1dXZWl4NHUyTlpyVllVRnhYQllqSERaRFFoSnljSEdSY3ZJdTFNR2txS2kyK0xNUXNNQ29aUjZweFdWdGdaTTJiY0ZpZTVkKzllOU96WkV5a3BLWGpnZ1FlUWxKU0VvcUlpSEQ1OFdJN3NLSUJXMXZ5VXRUUXZ0YkxBcEtTazFQcjg4OC9uZHUzYWRjeUFBUU9Za0pBUWRPblM1YmE0em9rVEoyTGJ0bTM0OU5OUDhleXp6MkxwMHFVNGRlb1VIbnZzTWYvcXZvc2xOemNYTmNJanJ2cDdwMCtsWXQ1VTdNZUhBQUFnQUVsRVFWU2MyZWpWdXc4QU1DcTF1dU96Ly9kY1NLdldiUzU4dmZVckIrQlYzU296ZnlsQWNMbVJ0MlNPMHN1YnBLa1ZGT1RqME1HREtDd3NSRVJFQklLQ2dxSFQ2ZkQxMTE5aC90eloyTFp0S3dvdGhXZ3BtWWI1K2ZsNGE5b1ViTjY4Q1QvLzlCT2FORzJLME5Bd0FNQmZmeDNIdENtVHNIWHJGaHcvOWlkYXQybDdUVjJ3TkJvTnJOWml4RmZnYTd0dFRORzFhOWVpYWRPbWVPYVpaNUNWbFFWQ0NGcTJiSW1DZ2dLY09YTUdLU2twbFNYZWxnb1NQUGpnZzYwYU5XbzBwVnUzYm4zbG0zZTdpTjF1eDZwVnE3QnAweWFGbXVqOTk5OUh6NTQ5c1dEQmdncWIzdnJsN2hDcnRRVFIxMkNHTnJ5bkVkNmUrWjlTNzZuVjZrRmR1blNKL3VYWC82M3BmbitYRTVSU1JrSTN4VFNWc1UwVUJKR1hmRzJBOTlVTGVCS3dnZUpDK2dWd0hBZVdZUkVSRVlHTWpBeFFBSUdCZ2RpNlpRdldmckFlR28wR1k4ZThpU05IRHFOMTZ6Wll2V29GdW5kL0FIMGZlUlIvL0hFRUMrYk54YXIzMW9MbmVjeWJNd3Z6Rnk1R1VsSXkxbjNnN1N2NjBzdkRyMm5jZkhzRjMzYW1hRkZSRWV4Mk8zSnljbkRod29WU1ByWEV4RVFrSmlZcUtSMTJ1eDM1K2Zta3NMQVFOcHVOdUZ3dUlnZ0NJNG9pazVTVTFQdkhIMzljc256NThyNkVFSFRwMGdWSGp4N0ZXMis5aFhidHZBMTUyN1ZyaDltelo2Tjc5KzRJQ0FoQXZYcjE4UDMzMzJQWnNtVklTRWhBYUdnb2hnMGJwaEQzVVVveGI5NDgxSzlmSHhxTkJoRVJFUmcwYUJEc2RqczhIZythTm0yS0J4KzhISlBZdEdrVHRGb3RqaDgvRGdEbzM3OC9Xclh5RmpVY08zWU1UcWV6Rk45YTU4N2VUdHNIRHg3MHIyNi9sQk96Mll5eFkwWmgwUFAvaDhHREJ1TDNROTU1a3AyZGpRSDluOENUL1I3RnFEZEdsdnJPNUluak1XVFE4MzFtLzJmRzFKU1VsQzRBZEtEVXQ1RU1LNG9pSzY4YnBZa014NkdrcEpnWURIbGVRa3FudDNGelpHUWtHalpvQ0kxV2c1S1NFdVRtNWlBekl3TzdmL2dCS1UyYUlDREFTN0phSTZ3Ry9wTG0vVjkvSFVlWEx0NTVIaG9haXJTMDAvQjRQRERrNVVHbjF5TXB5ZHVZSlR3OEhIOGRQM2JEeCsyV2EyeHlvS0JkdTNiNDl0dHZNWGZ1WE1URnhTRWtKQVI2dlI0eTE3dWMwbUUybXdrQXFGUXFRaW1WdTY0elZxdjFXWTFHTTdWdjM3NzFHelpzaUVXTEZvRmhHTFJ2M3g2UFBQSUlwa3lab2h4ei92ejUyTEZqQnpwMTZvUlhYbmtGL2ZyMXcrT1BQNDdUcDAvajFLbFQ2TmF0R3g1NjZDRTg4Y1FUV0xWcUZSWXVYSWpObXplamNlUEdPSDc4T0FZT0hJam16WnRqekpneCtQREREOUd1WFR0ODhza242TjY5TzBhT0hJbVpNMmVpUllzV0NyQVZGaFlDQUhKeWNoUnc5SG02SWlJaUF0bloyZjVWN0pkeThzWG5tOUdzV1RNTUd2d2kwdFBUc1hyVkNyUnQxeDRKQ1FuNDc1YXRPSGZ1TE9iT0xrMDFQMi9CSW1sdEZiVVovdExROEE4LyttVEY0RUhQZnlzcE1rU3lUamtLQ040SE9CR2xmRjRRUXFoS3BTSnV0OXVyeEFHZ29DQ0VnZHZsZ3MxbVE3NHBId0JCWm1ZR0FnSUNjUEZpT2xZc1d3cEJGQkFzK1FtTGk0dWgxZW13WS9zMytPbW4zZEJvTkxEWmJDZ3BLWUZXcTRYSDQ4SEtGY3VRbTV1TG9xS2lHejV1dDFSajgwM3BFRVVSQXdjT1JOMjZkV0V5bVhEcTFDa2NQWG9VcWFtcEtDa3BnZHZ0UmtsSkNaSEFRSW40TUF6REJBY0h2L0xsbDE4dTBtZzA5ZVdHRnpxZERocU5Cb1FRaFZsVWxuNzkrcUZidDI1UXE5VjQ0b2tuNEhLNU1IZnVYQVFIQjZOdDI3Wm8wcVFKVWxOVEFRQkpTVWxZdjM0OSt2VHBnOFRFUkR6MjJHUG8ycldyOHZsOTk5MkhTWk1tWWZ6NDhSZ3laQWlhTkdtQ0NSTXVWMms5ODh3ekdESEMyNlBSNFhCVW1BdWsxV3FsRGxsKzhVdHBhZDJtTFg3KzZVZDg5T0ZHdUYwdUxINW5TWlcrSjRvaVpzNTRHdy8zZmJUZUF6MGVuSFlxN2R3QUFEcHAwMUJLMWFCVUJZQUZLS09rUndHRVpWWGdPQS94dUQwK3JmN3NjSHM4Y0RnY3NCUmFrSjl2UWxGUkVVNzgvUmZHanh1RDU1NS9BZDI2bGFZdW5EZG5Gakl5TG1MeE8wdWgxV3BMS1ROalJyK0p4bzFUTVBLTk42dGwzRzRac1BrbTM4b3BIUzZYQzNYcTFFR3JWcTNRdUhGalJFUkVRQkFFR0kxRzRuYTdKWFlPN3hOSHpsSGpPRzU4U2tyS2d0VFUxQ3AzcVBBdEk1TUhQQ0Vob1pSVFVnYWF2bjM3b25idDJwZzVjeWFlZSs0NXRHalJBdDk5OTUzVU9NTXIwNmRQUjBSRUJQYnMyWU9QUC81WTZYTlFWdlI2UFR3ZVQ3bjMzVzUzcGYwUi9YS1hBMXZyTmxpNWFnMXFKaVRnNDQ4MjR1MjNwbGJwZSt2WHZRK2RUb2VCejc4QUFGSEJ3Y0Z2ZmYzTjlzRUE5Qks0YVFraGFrS0lpbExLQW1COEFuQ0U0M2g0T0E5UklxWk9KemlQRitoS2lvdGhzVmpnY2J0UlhGS0N4eDkvQWdRRUpkWVNoSWFGS2Vabmg0NmRNUEtOVVZDcjFmQjRQQXB6YjBseE1VYVBHWWZlZlI2Q3krVkNtUFNkT3g3WWZNdWtzck96a1pPVGd5MWJ0dURpeFl0S25ockhjZERyOVFnSkNTR0FsLzdiRjlSV3IxNnQ1amh1T3NNd3MwVlIxSlh0T0g1RisxdFYzZ0t2ck5oM3laSWw2TkNoQXpJek05R2hRd2VzWGJzV3ZYdjNMcldQMFdoRVRrNE9LS1g0OWRkZkt6MXVRa0lDWEM1WEtkV2I0emlZeldiVXJGblR2NHI5VWs3bXpaMk53MGNPbzBlUEJ6RjV5alFjT25RUS96VFg5Ky9maDcyLy9vb3BVOS95bmRlNkprMmFUcm4zM251SE4ydldQQkJTT2dpbFZBMHBIUVFBUzBXUjhEeEhCSUVuUEZjNkhZVG5lYmpkYnNXa1ZHczBjRGdjS0NqSXg4V0w2ZGo5dy9kbzFMZ3hBS0JGaTViS2VmNTU5Q2lTa3BLaDBXZ1FHeGVIMExBd2FDVUxhdisrZldqZW9zV2Q3Mk9UQzlwOWF6K0xpb3FRbjU4UGg4T0I1T1JrMytSYkltczRjdnM3QUdUbnpwMUJQWHYybk1vd3pMaWlvaUtjT25VS1E0Y09yZkI0MTh0T3NHVEpFa3llUEJrelo4NVUzc3ZJeUNnVndYenBwWmZRb2tVTDlPdlhENk5IajBiUG5qMHJCS3FXTFZ0Q3I5ZGozNzU5ZU9TUlI2Ukp1QjhNd3lqQkRiLzR4VmNHRG53Qml4Y3Z3T2ViUDRVb2loZ3pkandZaGtGMmRqYkdqSG9ESE9kQmNYRXhCdlIvQXZmZWR4OG1UWjZLbGN1WHd1Vnk0YlVSTHl1L3MzTDFXZ1FIQjJQQm9uZEd2N05vb2FhZ0lIOWRibTZ1L0lTVm82Vzh0TllFYjJNc3dldGlrL2JoZVlGNk9LODVDZ0lFQndVakxpNGVuMjd5ZHBLLzk5NzdFQndjREo3bjhlcHJJekYvM2h4OCtkOHZvTmZyTVhIeUZFV3BtREwxTGN5YU5RT2NoME90V3JVd1lkS1VPeHZZS0tYbHlxVGs2R2R5Y2pMT256K1AxTlJVQkFRRVFCQUV1TjNlcHdRaFJDYlRJeWtwS1RWbXo1NDlOU0lpNGsyMVdvMHBVNllnSkNRRUF3WlUzTDA2S0NnSUJ3OGV4S0ZEaDY0SlBNTER3M0hnd0FIazV1WkNFQVFzWExnUXAwNmRRbE9wTDhINjlldXhaODhlL1AzMzM2aFhyeDQyYmRxRWwxNTZDZDkrK3kwQTRQUFBQMGRoWVNGR2pCaUJ3TUJBREIwNkZLKy8vanFDZzRPaDBXZ3dmUGh3REJreUJPSGg0ZjVWN0pkeVVxdDJiU3hidnFwQzdmKy9XN1pXK0ozUC8vdFZwYjkzenoyTjhNSDZqYSs1M1c3VjVrODNyWnYrMWxTenRMWjhsQUVHbElxQ0tES2x3QzBvS0FnYXJVYTJua0JBVUNNc0RFbEpTWWlJaUVCTVRDd3lNekxBc2l3YU4wNnAxQi9ZdEdrenJIMS9mYldPMjAwMVJhOVUwQjRVRklUWTJGaUlvaWlibzBRR05aWmxDYVdVWExod0llTDc3NzkvS3k0dTdzMEhIbmdBWGJwMGdWYXJ4Zjc5K3l1MTAxOTc3VFVjT0hBQWd3Y1B2cVp6M3JCaEEwcEtTbEMzYmwyMGE5Y09OcHNOa3laTndwOS8vb21zckN5TUdUTUdVNmRPUllNR0RjQXdERDc0NEFQOCtPT1AyTEJoQXdCZ3k1WXRXTC8rOGsxY3ZIZ3hIbnJvSVR6KytPUG8yN2N2N3IvL2ZpeGJ0c3kvZ3YxeVUwV3IxUTUvYnVEQWwrY3RXQlFGUUN0VkthaTl5bzVTcFVCRTBadDU0RzNBN0Ewb3VOM2VLZ1dIdytFMVN5V2ZtOGxrUW01dUxqSXlNbkQyekpsYmVuMDNqZDBqTFMwTmFXbHBTb3M4dVp1VVhDYmx5M3hiSnZtV1VFckptVE5uYXRTcFUrY3RRc2hJLzdRc0xhSW9JaVB6RWl3V0N3UkJnTXQ1ZDVabzZmUjZzQ3lMOEJvUlNFcXFYV2tRUjdZZXZHTm1CczlYMzVqcDlIcW9WQ3BFaEVjZ0thbHk3c085ZS9laWJ2MmJ6MXJyY2JzLzJMVHBrL2Zmbmo3TkFzQkZDSEZEYVJ4REJFSWdFTUlvRFdQVWFoWFVHZzNWYXFTK3BRRUJDQW9NUkxEVXppOGlJaEt4c2JHb1hiczI2dGFyajNyMXFyZWFzYkkrdkRmRkZKVjdGSlRsVTVNN1NSMC9mdHkzUW9ENDJ2M1NGbFN2WHIycEFQN1ZvR1l3R0s2NlU1RGI3Y0ZmZi8wRlZxVkNjRWlvdjYrbzNZYkNva0lVSE0xSGkrWXRvTkdvS3dTMVAvNDRDb1psRVJSYy9XTm10OXRndGxpUVg1Q1AxcTJ1ekVDZmMvUHpHVi9xMXEyN2VISElpMnMvM0xoQldZZGUwOVJiWWdXSWdpaFNVRzh4UEJVRWtRaThRSlZ1OHo0a2xVNkhBM2E3RFZackNZb0tpMkF1S0NpVmNYQWpwZVlWZnJmYWdTMHJLNnRVajRLeTNka2REZ2RxMTY2dGFHb2VqNmRVN2VmcTFhdlZ3NFlObThvd3pKdndTem5KTStTQlZhbjhuZUFsa1prZmpJWmM1T2JsSXFrQ2h1aUxHWmxnV1BhbWpabnZPV1ZtWGtMaUZmcUwxa3hJdUJYRE5uenF0T2w4UmtiRzJsLzMvRktaaGl0Y0JqdVJVaW9TU3N2M1VlQWxabDZQaDRQTDQ4MkJJNFFnL2laSC9hc1YySXhHbzlJaXIyempsUW82U1pHS3VOUWtVQnZuWDdJVmk3bkFqS0NRVVA5QWxKR2c0QkFVRkpnckJEYUx4WUxnV3pCbVFjRWhLREFYWEJIWWJwa1pyOU85OXY0SDZ6ME42aVd2bDdWYU9hQkF2ZEVGS3BiS015RVVJQVFnY2xkNkVFTEFlTWtzd1RBc1dKYUZpbFZCNVRWZkVSVVZkZWNEbTl5aFhXNlJsNStmWHltZGQxbWZtbS95TGNNd1UvM0x0REkvRVNBSXdsMXZmbGFtSlJVWFdTcjg3RmFOV1dCZ0VJb0xMZGYwM1pMaVltUmN2QUM3M1hiRjMwOUtyb3VRMEdzRGJiMWVQenJ0N0FYWFBRM3FicEx3VEpscVBtTW5YbTdmeDFHTzh4QUorRUFZQXNJd0VyQXhZRmtHS3BYQzFndU5Sb1BRME5BN0Y5aWNUbWNwVUN2THAxWUpTYVRjZklWSXZRbGVZUmhtMnBVWDl0VlRLZDl1VWxXcTQ0cUVFTURwOUhPNVZUb1BLK0c1dTVYQmxXdTlYeGZUejhQaHNGOXhIN3ZkaG95TEY5Q3N4YjNYQWI2Qm8wK2VPdU5vMHJqaFZoOVFvMlUwT0JFQUZVV1I4RHhQblU0SFlWbVdNb1NBRUFZTVF5Q1hObm8zRlZScU5UUnFEUm8xYm54VEtNWnZPTEJSU25IbXpCbWxUWjRjL1N5cnFaV0pmc3FOSlJpSjlmWlpsbVdud1Z2NlVlbHhycEZLK2JhVHFsQWRYNnY4dVBzSGJOeXdIaWFURWZIeDhmaDQwMmM0ZCs0c2hnNFpwT3d6YWNvMFBQVFF3MzRrdkkzbG4wRE5keTVkcjFVYUdocjZ4ckcvVHRwYk5tL3l2YSsyVmdiY0FFQ2tsSHA5YXB5SGVIc3JYQVkyaG1YQk1oS3d5VnFiVm9QR2pWT3F2YTNmRFFjMlgxQXIyOHpZYnJkWFNPZnQ2MWR6T3AyOVZDclZWQUJYTk1pdmgwcjVkalNiL29ucStGb2tOemNYQytiUHhjeFpjOUM2ZFJ1VWxKUUFBT3JWcTQ4ZmYvNFZBUERTME1IVmRsMGIxcS9EWTQvM0s4Vm1JcC9Yc2lYdjRNU0p2NkhSYU5EandWNFk4ZXByWUZrV2dKZVNaOFd5SlRoeDhnUzBXaTE2OXV5Rmw0ZVBVRDZ2RHZtblkzYnAxQjVxdFJxRU1FaEtTc0tRb2NQUXNXT25meXVPUmtWRVJMeTZjdVhLa3RkZmYvMUFHYzJORWtLbzlEK1JtMkR4SE9mbEltY0lKUXdCUXlRL202UzVLY0NtMWtDcjBhSmUvZnJWZWdFM05FRTNJeU1ENmVucGxlYXB5ZFJEVW9zOCtMTGZVa29acTlYYVNxUFJUQVh3ajFkOUE2aVVieitBdXdMVjhUVTlaTkpPSXpJeUVoMDdkb0pHbzFIS3dBZ2hTbWVpNm54eWZyaHhQU3dXYzduM1o3dzlEVFVURXZEMU56dngvZ2NiY09qZ0FXemZ2ZzJBTnlkdjBvUnhhTkR3SG16N1ppZFdyRmlOdmIvdXdkZGJ2NnEyODZ6cU1WZXVYb01kdTc3RGtLSERzSGpoZkd6OWFzc3RtU2VFRU54Nzc3M28yYk1uZXZUb2dmajRxM3U0QzRLQTMzN2JqOGtUeHlNN0s2dXlZOVNMaW9vYXZtREJnc2FTNVNUVGpLdVZ1bEpLNVc3MGhPZDU4SnczOWNOVEt2WERqc0tpUXZ6MDQyNnNYZk1lNXMrZmcvMzc5eUZMT203V3BVc1krZnFyZVBhWnB6Qm0xQnNvS2lwVXp1R2pEemZpdVdlZnhqTlA5OGV1blR0dWpjWm1OQm9WVURNYWpRcW95YmxxdmwzYWZUcTBLNkJtTUJocTZmWDZLUURhVnZYbS9OdWM1b0dCUWJCWnI1OVAvdmp4WTVneGZSbzhFczNNNDQ5NnpjeCtUL1RIb01GRHF2UWJodzRld01vVnkyRXc1Q0V4TVFsanhvNUhTcE1teXVkN2Y5MkREUnZXSWQ5a1FreHNMSVlQSDRGMjdUc0FBRWErL2lxeUxtVUNBRWEvK1FaVUtoWUpDYld3Y3ZVYWlLS0lybDI3NGVHK2ZhSFZhaEVkRTROV3JWc3JtZW9XaXdVMXdzUHgzTUNCMEdnMFNLaFZDeDA3ZFVaYTJ1bHFHL2VyT2FaZXIwZkhqcDJnbmpJTmIwK2ZobDY5Kzl4MFpwYms1R1N3TEl2ZHUzZERxOVdpZS9mdXlNL1BoOFIrVXdxdzVTUmwzNy9mZk9OMTFLeFpFNmRQbjRJZ0NsY0MwTmFKaVluRHhvNGR1K2lkZDk3SmtiVTJINStiSEdBUUJVRUVJYnkzN3BFd2xEQU1DRVBBc0F4eWMzTkJDTUVEUFhvQWxHTEQrbldvVjc4KzlEb2RsaTU1QjQ4OTNnODllanlJTHo3L0RPK3RYb1hKVTZiaHhJbS92WE5zNDBkd3U5MFlQbndZV3Q1N1g1VkIvSVpvYkZhclZXSHE4SzMvbER1M1h5bXRnMUpLWG56eFJUWWlJbUl5SWFSdjFZOVpja01uaTlsc3h1UkpFL0RjczA5ajN0elp0d3pjS3FNNnZocHAwYUlsdG0zZmhUZEhqVUhObWduWXRuMFh0bTNmVldWUXUzRCtQTjZhTmdValhuc2R1NzdiamFjR1BJMHhvOStBU2RJbU16TXpNSHZXVEV5Y09BVTd2LzBCanp6eUdLWk9uYXcwcFZteGNqVzJiZDhGQUZpeWJEbTJiZCtGbGF2WGVDY2N3K0M1Z2M4akxLeUcxeWwrTVIwSGZ2c05iZHQ2NjNnakl5T3hZdVZxNkhSNlpVRWVQM1lNelpvMXI3WXh2NVpqdG03VEZoNk91eVdsUTVHUmtjak56VlY4WGFJb29rYU5HcVgyT1hMa01LWk9uZ2lPNDJDeFdQRFMwQ0d3V0x3UjJYZVhMTVBrS2RPcXBCZ3dETlA3dnZ2dUd4d1RFNk9YdERhZjBpdXdBQmh2UnppUnVGd3U0bks1d0hFZVlqR2JrWmViQzVmVGhlTGlJZ1FHQnFLa3BBUXF0UnFDSUNEMTVBbGtaR1lnTGUyMGN1OGZlcmd2RHY5K0NBQncvdHhadEdqWkVscWREaUdob1dqZnZnUCtPSEw0NXBtaWxOSnlWUVcrbXBwdkJOUzNRN3R2QkhUTm1qV1RDQ0hEYnNSTi8yckxsM2p1MmFmeDdETlBZZjY4T1hDN1hGWDYzdnRyMzhNOTl6VENwNTk5Z2JIakxoTkZtb3hHN055eC9hNXlWTy9jdVIxZDcrK0dqaDA3UWF2Vm9uZWZoM0JQbzBiWXZmc0hBRUJFUkNRMmJQd1lqVk5Td0RBTUhubjBNWEFlRDdLeUxsWDVHS2tuVDZKbmoyNFk5UHh6dUtkUkkzVHBlbitGKzYxNWJ4WDBBUUY0Nk9HK04rMzZxM0pNUWdqQ2E0VERkdjNPK3FzV2pVWURRUkFRRVJHQlRwMDZRUlRGVWtTT0FOQ3FWV3VFUjBSZzVvenBHRHZtVGZSNzRrbUZhT0ZxRzZlb1ZLcm5GeTFhTkJCZUxqZGZrMVFsWVFnalVrb1lob0hINHlFMm13MHVsNHNFQmdiQzdYWkRwVkxCWU1pRDFXcEZkblkyQ2dzdHlNM05SVzVPRGlJam95QW5CUjg2ZUFCV3EzYzg2OVN0aDZOL0hGRW9rbEpUVDhKbXM5MDhZRHQ3OWl3dVhicWtwSFZVcGZkbm1Ram93QnVWcTNiaXhOL1lzdVcvV1B2QmVueTYrUXN3RElQMTY5ZFY2YnZuejUxRGg0NGR5OTM0L1B4ODdOanh6VjBGYkFhREFYRnhwVlgrMnJXVFlERGtBZkN5UEJ3OStnZUd2endVenozN05BYS9NRkRSZEtvcUtVMmFZUGRQZS9ERmwxdVJsNWVIRFJYY3A0OC8raEMvLzM0SWMrZk9yNUJEcnpxa3FzZWtsTUpTYUVIUUxYS0hKQ2NubzFHalJ2anR0OStVb0ZCWjRCMCtmQVQrUFBvSHRCcnRkVDBZOUhvOUJnNGMrS2JCWU9oWmdiL05xN2w1L1cwTUlRU0NJRUN0MWtBUUJPTHh1QkVVRkF4ZUVIRDQ5ME00ZlNvVkRNUEE0WERBWkRLaFY2L2UrT2FicnpGazhQTklUVDJKd0VCdi80VG16VnVnWjY4K0dQbjZDRXlmTmdVQitnRG9BL1EzeDhlV25aMWRMbGZOdDFUS0I5UlFVUVRVYnJkM2xwb1ozNUJaYTdOYUVSUVVqSUNBQURBTWd4ZUh2b1NMRjlPbHhacUhSUXNYSU45a1JHaFlEWXdiUHdHSmlVbjQrZWVmOE44dlBrTm1aaWJtenBrRmpVYUQ1NTU3SGwyNjNvK2xTOTdCc1QrUHdtQXdZUGpMWHI2M3RlK3Z4NGIxNi9Ebm4wZGhOQmlRMHFRSkxxWmZRR1JVTk41NWR5a29wVmk5YWlYKytPTXdPQStIOWgwNjRyWFhSNEpTaW5GalJ1SCtidDN4eUtPUDRjU0p2ekZuOW4rd2J2Mkh0MFYzYlYrSmlZbUJJUyt2MUhzNU9kbG8yZEtiaXJMdmYzdng2YVpQc0dUcGNpVFVxZ1hBR3pXc2FIR1ZCVHUzeTRYdnZ2c1dmZm84QksxT2g3aTRPUFRvOFNEMjc5OVhhcjh0WC80WFArNytBY3RXckxybWhOT3JsYXM1NXBFamg2RlJxOUdnWWNPYmZuK2tza1A4K2VlZkFBQ1daY3RSeTl0c05vd2ZQd1lEbngrRXMyZlNzR0QrWEV5YVBQV2Fna1ZPcHhOYnRteFJBWGpscjcvK01qUnYzdnhQeWRjbVN2NDJKV0pLS1NVTXc4TGpjVk9uMDl1VW5qQU1vcUtpRUJBUUFKMU9oNy8vK2d1aUlNSmlNVU1iRjQvblh4aU1CZzBhNG1KNk9pNWxaaXJIZlc3ZzgzaHU0UE1BZ0plR3ZZaTZkYXRlVUgvTkdsdFJVVkdGdVdxVmdCb3AwNldkeWMzTmpkZHF0Uk54QXp1MHQyN1RGalZyMXNUTHcxN0UxMXUzUUtmVG9YWHJOZ0NBT2JObm9XZlBYdmg0MDJkNC9vVkJtQzVSTEQvd1FBK3NmWDg5YXRhTXg3UzNabUR0KytzVnMyalU2TEdZTUhFS2twS1RzZmI5OWFVNHBOcTJiWWNaTTJjaE16TURIMzJ5R1pjeU0yR3hXR0EwR2hBWUdJQU5Hei9HeDVzMkkvWGtDUncvZmd5RUVFeVpOaDJmYnZvWWFXbW5NWGZPTEV4NzYrMWJCbXJTL2ZCcUg2S29hTklBOEhEZlI3QjM3eDRjUHZ3N2VKN0hMNy84ak5TVEo5Q3pWeS9GSDBrSXdMQXNpb3VMc1BuVFRkTHZsR2FLaVl1UHg2R0RCOEZ4SFBKTkpxODJyTlhpazQ4L3d1ZWZid2JIY1NncUtzUytmZjlEczJiTkxwdkNPN1pqMjlkYnNYVDV5cHZHVTFmVlk3cmRidngrNkNEbXo1dUQ0YSs4ZWtzbzNmUHo4eFdBMG1nMENBc0xLOWNRNWNLRjgramF0UnYrNzdtQm1EWjlCalFhcmVKanV3NnBXNzkrL1JkSGpSb1ZXNUcvalZMS01BekR5RlJqSG84SEhNOFJ6c1BCNDNiRFlYZmd6Smt6aUlxS2d0MWhSMUZSRVFvS0NtQTBHUERISDBld2ZOa1NQUGxVYVY1Rmp1T3c2Wk9QUVlpWHg2MWFOVFpCRUpDZW5xNEVDM3dqb0JXa2RaQXlhUjJFVXNwRVIwZFBJSVE4ZUNOdnVFcWx3b3laczNENlZDcSsvZlpiREg1aElHYk5ub3M2ZGV2aTdKazA5RnpoSmV4cjA2WXQzblc1WURJYUVSMXpiV205V3EwV09yMWVNVnNEQXZUZ09RNnhzWEdJakl6Q3hBbGp3VElzREVhdjM5SHJtNHJBNkRIajhQcXJyK0Q1RndhalNaT210d1RVeWlib0xwZy9Gd3ZtejhXRFBYdmhyZWt6VUw5K0E3dzljeGJlVzcwU2hydzgxRTVNeE1MRjd5SW14cHRmMStlaGgzSHk1QWtNSGZJQ1dGYUZ4eDd2aC9yMUc4QlNwbHhvekpoeFdMeG9JVFp1V0lmYXRXdGozWWFQb05Gb3NHRGhZcXhjc1F4ZmZQNFoxR28xdXQ3ZkRZTUd2NmpNclVVTHZXYmdzMC8zTDIwbWJ0cU0yTmk0R3o0ZVZUM215TmRlQlNGQVltSVN4bzZiY0VQejJJS0RnNnU4YjBaR0JzTEN3dENqUnc4QXdQSGp4OHYxMG1qZXZBV2FOMitockl1eDQ4YmZJUC9yem02dFc3Zk9BTERDUjJzVEFWQkNpRGRHU2tVcTE0dnlQRThad3BBU2F3bmxPUTZob1dHSWpvbUYzVzZIV3FXR1dxM0dybDA3d0RJc25ucjZhYlNYSXV1QWwrSjgrZEozMGJ4NVM4eGZzTGhDYmJPeWNic21ZUE9OZ0ZiR3FWWUcxR1FHQUxsY2FqZ2g1TlViUFVGUG56NEZuVTZIUm8xVDBLaHhDcjc5dGpFKytHQXQ1czFib0poR2lwbkVNS0M0OFZ4MGYvMTFITHQyN3NEU1pTdWcxZWt3WTNycHFqQ0h3d0cxV2cyWHkxbnRBTmFyZHgrNVEzZ3BxVisvQWY2My84cDlURHQyN0ZUcHd0VnF0WmoyMXR1bDNxdW80VzJidHUwcVpIbXRWNzgrbGk1ZldlRnZzeXlMdmZzTzNGU2dyOG94LzJtOGJzUTUyTzIyS2tVcTVhcWI2NVZQUC92aW1yNm5WcXVIYk5pd0llUEZGMS9jQmkvRnJrZ0JLcldTcC9DbWdZaWlLRktCRjhBVERvRUJBVVNyMVZHZFhnZTMyd1dudzF1Tm9GS3IwSzFiZDhUR3hxRldyZHJJeUxpSU9uWHFBZ0E2ZGVxTVRwMDZWM29lZHB1MVVqL29WWnVpZVhsNUNnV1JiMXBIQlJGUStJQ2FvcTNaN2ZZdUxNdE9ySTdKa1hYcEVoYk9ud2U3M1Z0K1lpNG9RR2hvS0xRNkhlbzNhSWdmcGFqZUgzOGNnVnFsUW5UMFAydHJvYUdoS01ndnFMQzdWRVZpTnB1aDErdWgxbWlRbjUvdnpZV1Npb2tOaGp5OHQzb2wzdjlnQXc3Ly9qdU9YRVg0dW5MSGJnRDhjblZqY3l2SHJMSmpSMGRIdzNHRld1ZUFnS3FadkZYZDczcC9LeWdvNkpWMzMzMjNoUkpNa0pyQ3lDYXBuQUlpaWdMaGVRRWN6NFBqUFBCNFpBWmVGeHdPQit3MkcwcUtTN3dNdlBsR0tibS9ha25xZHBzVjBkSFIxdzlzRG9lakZGdkhQd1FMeWlYaHBxV2xoV20xMnZFQXFxVU9xbWV2M3VqY3BTdGVIdllpbm4zbUthU2VQSUhYUjNwcDNLWk9tNDV2ZCszRTRFRURzWEg5T3N6NHo1d3FPVklUYXRWQzIzYnQ4UFNBSi9IQ3dHZGhOQnF1dUgrblRwMmgwK3Z4MUpQOU1IM2FGTlN0Vng5MnV4MDh6MlBtMjlQeDBzdXZvRmJ0MnBqNjF0dFl2SEQrZGZzOTVDZTlYOHBQK3NwS3NKaGJOR1oybXhWc0pScEdYRndjS0JXUmI4eXI4TnlTNjlUN1I5QUtDQWhFY3AwYngxajdEOGVNaTQrUEgvVENDNE5xeU9CR3k0TWJReWtsb2lnUWdlZkJjYnprYi9QQTdYTEI1WFRDN25EQWFyT2l1TGdJRnJNRkpxTVIyVm5aU2wrRnlzYlJaTWdGQ0NvdFA3d3FhdkRVMUZTa3BhVWhNek5UcVFYMU5VVjlLZ3lJckxWSnZqVkdvaUdheFRETWhCc3g2TGVLU3JtNnBUS3E0OHI5TFprd1d5eCtvc2t5WWpUa0lqSXlBb20xeTNPZlpXUm13bXkrK1dObU5PUWlJaUlDU1ZmZ1l6T1pUREFZRE9CNUhsYnI3YzlXNDNLNVZ2WHUzWHM5QUllMHVRQjRDQ0VjQUo0UUloSkNSSWxhWEtZdm9scXRsMW84SUNBQWdZR0JDQTRPUm8wYU5SQVJFWUc0dURqVXJsMGJ5Y25KNVRYRjRHQ29WU3JFeHNaV3FxMWRsWTh0S3lzTDJkblpNSmxNTUp2TkZRWUxQQjVQdWRRT09Wamdjcm1ldUZHZ2RyWE8xanRKcnZhNkVoTnJJei9mQktNaFYyRTV1ZHMxTlp2TkNvSG5Ld1ExQUVoS1RJVEpkUFBHVEQ0blVSQ3VDR3F5U1hxbEJYc2J5bXRaV1ZsbmE5V3F0VmYydHhGQ2xJQUNBSGhaUHdoa2NGT3BWTkJvTk5CcXRkRHI5UXF3aFlhR0lqdzhIRkZSVVlpTGkwT2RPblZRUzBvbnVscXBFckJaclZhbHNxQXNxUG5XZ1BxbWR2aWFvRWFqc1paYXJSNTdxNXl0ZDlLaXZOcEVWRUlJV3JWcWhZc1ptYkJZekNpeVdPQnkzWjBjYlhwOUFCaVdSV1JFSkJJVHI3d2cyclJ1amN6TVM4Z3ZLS2pXTWRQckE4Q3FWUCtvcWQzSlVyTm16Y0ZmZnZubDJhZWVlaW9ibDZPa01yQlJPWkxnSmFma0tjTXdoR1ZaeXJJc1hDNVhLU0pLR2V3Q0FnSVFISnRnME53QUFDQUFTVVJCVkJ5TXNMQ3dhMUppcXJTS1pOUFROd20zZ3NvQ1gxQ1Rxd3NJcFpTSmlJZ1lBNkRWalJ6TTZPaG9HQXpHZngyd3hjZGZmVG9ESVFSMWtwTlFKem5KYjROZXBiYWIrQzhGbTVzcGhKQ1dmZnYySFFCZ0ZRQkI2by9nalpaS3BKVHdFbE5TQ2R6QWNad0NiaXFWcWtKd0N3d01SRWhJQ0pyNGtDOVVWZjR4ZUpDVmxZV2NuQnpGbjFZWnFGM0JCTzFmSGFrZGlyUFZaSURqRG5lZU8rdzJyek1VOUlaeHNmbkZMemRUZERyZGtPenM3TTZReXEwb3BScEl5YnUrZ1FSQkVJZ0ViQXB1eUIydUhCTE5VVW1KTjBxYW41K1BuSndjaGVMb2htbHNkcnU5d253MVg4SklHZGg0bmk5bmdtWm5aOGVxMWVyUjFUV1k5OTU3TDR4R0k0d21FNndseFhja05ianNERTFJcUhtbitWYjg0cGRTRWg4ZlAyamp4bzJwUTRZTUVTUi9tK0JybHBZMVNhWHFCT3BMUkdtMzJ4V3RUUTRzaElTRUlEdzgvS3FxUEs0SWJHWHoxY3BFUG4zejFTb3lRVWxNVE13b0FQZFY1MkRHeE1SY2RTOU92L2pGTDlWaWtyWVlNR0JBL3lGRGhud0FnUGN4U1FYSkpCWGhaZDFWVEZLR1lZaEtwYUl5QzRodllLR29xS2lVcjYxUm8wWlZCN1pNbjZKVFg4blB6OGVaTTJkS01YZVU5YStWRFJ6NGNxeWxwYVgxek1yS0d1Mi8zWDd4eTEwbEwrL1pzK2RvdDI3ZERzdmdCaWxTS2hmTFMwMWc1S3A1aFZQdWN2ZXJ5NlpxV1RPMXFpMzhWSWxoUDVSN2srTUY1Ri9NQW5FYVFOeG1FRTh4Q0djREk5aEJCQmNndUFEQjQ5MUVqbEJSQUNnbDhqYjQvOXF3OWFQM2pQTGZZNy80NWU2VGhHYmkvOVZMcnZIMytZdUZQQUNCQUFKQVpiT1VnUmZOQUNxQ2lqeUY2Q1lRWEJTQ0F4Q3NJSUlPakdBQjRmSkJQTGtnN2t3UTV6bkFsb3I0NUZwUXEvNjU5MFdGd1lPc2JBc01wbUtZTFRZVUZUdGhzN25nY0xyaGRISnd1emw0UER3OEhBK09GOER6SWdTQlFoUXBSRW9KQlpqM2x3MGVDZUFCL3kzMmkxK3VUU2k5YzgrZFpabXVoL2RNZndSeUlNRWJSSkFEQ1N5VmlDbEZrVUlRS0hoZUJNY0w4SEE4UEI0ZWJqY0hwNU9EdyttR3plWkNVYkVUWm9zTkJsTXhMbVZWclZLbm5JK3R1TVNKM0x3aUZCUllVVmprZ05YcWhOM2hCVFdYbTRQYnc4UGpFY0J4QW5oZUpMeEFJUWlVaUpRU1VCREx4WGNic0N6emhuOXErc1V2VnljaUJReVdTSmdLd3lDSUxHeDNkanJpb0FVTEZoeVpPSEhpUmE5SjZnMG1lRTFTaUpJRlNrUkt3QXVFY2dKRFBEeEwzWndLVG84YU5wY2FKVTR0Q20wNkZGajFNQllGSXRzY0JFTnhDUEpLNGxBbmdVTmNlQUVxcTRvc0IydzV1WVV3NVpmQVVtaEhpZFVKbTkwTmg5TURsOHNqZ1JvUGp1UEIrMnByRktBVWhBSk1TSWorTlFBSi9tbnFGNzljSGFnZE8xY2ZZTU1RRkhKbjk4bVZwR1pDN2VUSEowNmN1Qm9BRDIrRVZINFZRUWdGdkczOENDRWdVck5sSXRFZHNTbzFWQ28xVkdvTjFCb3RORm9kdExvQWlDUVF4VFkxOG9vU2tHY093NzMxejFjSWJxVk1VV04rQ1F6R1loUlliQ2dxZHNCcWM4SGg4TURwNHVCeXk2QW15Q1lvNGIwbUtLRWlKWlNDT1BKV2RDZUV2UEp2bW5EanBtM0IvWDNmdVdHL3gvTUNSazMrQXRIMXhpRzA5cHNZUG1vVEhBNlBmMlhmNVdJb2pBVFlNTVRFeHY5cmtzNjFXdTJnUGIvdWE0N0xWT0lhU3VGREplN05uaEJGa1FpQ0FGN2dDYzk1QXdlYzUvL1pPKy93S0tvMml2OW10bVZUSUUxNkNVaEhhVkpFMEFBZlVrUkJCQ3NsSUFncUxZTFNsZDZEOU41RXBTZ0lpaUJLRVpBZWxDSUlVZ1VFRXRKN3NtVm12ajltZDVKTkl5Qk4yZk04KzBCMlpuYnUzcDE1NTIzM0hDc1dxd1dMUThaUDFUNUlKRDR1anVTVUZIUTZBK2dLY3pQZUw5ZHp1eGkyR3hFSlJNY21rNUNnR3JYVU5BdnBHZGJNdkpyRHNObnRzbUMzTzBKUUdVRUJBUkNOUnNQNzdrczBmd3diczVGTlAvek91czk2c1dsMUgzYnUrWk4rZzllNkorWVJSMVI4b2YrY1RpNUF1ZkxsTzJReGJBWlFER1NxVzRuTzFqQkpsZ1hKTG1HMzJ3V2IzWlpaRmJWbVZrVlRVbEpJVEV3a0xqYVd5SnVSZVB2NDN0cXcvWDA5VGcxQjQxSkpURW9qSmRWQ2VwcVZqQXdiRm91aldKRHByU0ZKTXJLc09Bc2NZa2JVdkRjRWdSZmRsMmplU0UyMU1HL3Bic0xHZHlDNGNTV0NHMWRpOGF6T3JGeHprSmhZTi9YUW93cEZBVW5TMzVHbmR1YjBId3dNdmZjcDdUTm5UaE0yYllyR2FlakV4bzNmRU5MbExVSzZkbklSNUltT2ptYmdCd040dTN2WGxpMWF0bXBNRmlweFJWSFVJb0tpaUE3bUh4UkhxNGNrMmJWMkR5ZkZVWWFqNVNNMU5aWGs1Q1NOVWp3eE1RbTdyTSsxMENJQ1dHMTJOUVNOVFNFaEtZM2tGQXRwYVJiU25VYk5XVEN3UzlqdGttQ1haQ1FaeDdJcHhJOC9hcTB6NkhYdlBlZ0w1T25ta3drZDloWEJiY0lJcWpHY0p4cU80ZnV0SjdUdGRadE1aUGpZalZTdFA0cmlsVC9pN1BsSUxCWWJZeVp2cG56TkVYZ1U3VU85cGhQWnNkdFZLTmRtaytnZCtpWGVKZnRUdlBKSGZEcHZlK1lQR0pQTUs1MFg0bGYyQTd4TDl1ZUZWK2R3NFZLVXRyMWoxMFhVYlRJUmdHTy8vMDE2dW8zZ1JwVzA3YzgyVkVYdkQ0WmZkTi9oanlnRUFWTFNoRHM2dG5LVnFvd2FNL2Flam0vK3ZMa3NXN3FFU3hjdmFpU3VBRmV2WG1IRCt2VXNXTFNVWmN0WGN1TEVNWTA4ZGY2OE9UUnI5ajlXZnI2S2Q5OTcvMVVQRDdPSE14ekZVU0VWQkVFSE9JMmJ5dHNtU1VpT1ZVdzJtdzJyTFl1eWZIbzZxU21wSkNhcUlXbDBWQlFKaVZLdU9UWTl3STBiQ1VUSEpCT2ZrRXBTa2xvRlRYTzBkbGlzZHF5YXB5YmhxSUk2dkRVMURQMTQ4RXU5S0tDQys3M0dnbVcvc0hWOVA1bzlWNFhOUC83T0sxMFdjbmpuVUdyWFVCYzd6NWkvazVVTHVtRXk2cWxVb1NnOSszM0JqenYvWU9HbmIxR3BRbEdXZnI2UEYxNmR3L0c5STZsV1JlWHJPbkQ0SXVYS0JuQjB6d2lPbnJoS2ozNmZVOGpIVE0rdWpRa2Q5alVXcTQzd240Y0MwRy93VjRTODl4bjdmMUlabWpxMnEwTjhnbHJldWg2UmdOR29KOEEvODhsc01PZ0k4UGZpMm8wRTl4M3VSZzdFeHNZeWNjSTRZcUtqRUVTUjk5N3JRNE9uRzNMdDJqVUdodmJIWnJQaTYrdkhpcFZmWktZN2huekVqUnZYQVZWMHlkUExpelZyMXdFcXJmK2NXVE5JVEVyRTM4K2Z3VU9IYVZvV0FPdSsvb29ORzlacit3UDBmS2NYUnFPUnNHbFRYTWIyKzRrVFBGVzNMcDZlbnRqdGR2eDgvVGh4L0RqMTZ0WG54SW5qZlBDQlN1amo2K3RicjBTSjRpMHVYYnEwR2JBNVhsb2hRVkVVMlJHU09sWWtTT2gwZHV4Mkd6YWJIcXZOMGFpYm5rNmFTUTFKRXhJU2lJbU53V1RJdmFkTm41NXUxWHJXRXBPeVZFRTFvK2JJcXpseWE0NFExT210Q1NmMmZWeElweE43UFN3WHdsc2Q2OUhzT1pXQThzVldOV2plcENvTGwvL0NvcG1xOW1XYkZrL3lXbnVWYUNRdVBwWFBWaDlnMVpJZXZOUmFWZjJlTnE0amgzNzlpeW16Zm1MbEFsVTV2VmpSUWl5YjB4V1R5VUNsQ2tYNTdmZ1Y1aXplUmMrdWpibDhOWmJTSmYwb1dkd1BUMDhqeStkMjVkcU5lRzA4YjNTb3AvMC9MZDJLaDRjK2x5U3JIb3ZWN3I2TDNjaUJyOWF1cGthTkdvUjBlNXRMbHk0eGY5NGNHanpka0ZLbFN2SDErZzJjUDMrT2llUEh1Und6YWNvMEFCSVRFK2o5VGc4K0dQZ2hvTXIyVFJ3L2x2RVRKMU84ZUhGKytuRXJDK2JQWS9TWXpPTnIxcXFWZzNrNEw0SGx4TVJFUER3OGlJNk9adEtFY1VpeWhJOGpUNWlZbUlqSnc0UHZOMzNIamgzYjhQVDBmTFZIejNmMkxGdTZ4T28wYkk1VkNaSWozNmJJaWlJSWFraXEyQ1c3WUxQckZMMHpKRFdvSVdsNmVqcXBxU2xxU0JvZmowRXZrcDR1WXphN2psRzhFYW1Hb1BHSm1UMXJHZW1aQlFPYnpkbXpsdFZiQTluaHJWV3RYTHduVU8xaHVSRHExSFNsb2FsZXBUaW56dHpRL3E3NGVPWkM4ek5uSTVCbGhZYjF5cnNjMC9qcEN2eHhKbE5YczI3dElFd21nL1ozL2FmSzhlZTVTR1JaWnNpQWxuei80KzhFUGo2UU5xL040YnNmVGxDOVN1N01yR1lQQTFhcmxPTjlpOFdPbDZmUmZSZTdrUVAxNmpkZzU0N3RyUHhzQlphTURNS216eWpRY2JJc00yYjBLTnE4MkpiNjlkVmc2cSsvTG5IdDJ0OE1IenFZN2lGZFdMMzZTNkp1dXVvTFZLcFVtVmM2ZEN6dytFNmYvb09SSTRieVR1OTNhZHJVdFNkLzBvUnhYTDc4RjJIVFoySXltYXAwNjk3amVWd0tDWTRLcVpvU0UxQzlObVJaUXJKTFNIYTdReXRCclpKYUxSWXlMQm1rcDZWcmhZVEV4RVJ1UkNibTlOalVuclVVa2h6ZVdyclRXN000UWxCbno1b2tDNUpkOWRhY3piaG53c2Y0NlhSaXo0ZnBRcEN6YVZ0bVdPem9kSm5GMzZ3R0pMdVZ6L29aV1lWK2pkbmNYYjFlUks4WEVVV1J0aS9VNVBxWktYeS85WGQrM1BrSHc4ZCt5L3hsdXptOFl4aWUyWXhWcVJKK1pHVFlTRWhNdzdld3A1YS9pNDFMcFdSeFgvZGQ3RVpPdzFhdlBuUG5MU1Q4U0RpZnIxeUIwV2hrekxnSnR6eHUyZExGZUhoNDBMbEwxeXk1WWh2RmloVnpDVnYvQ1FvWExreEdSZ1poMDJkU3FGQWhUcHc0VG1GZlgyM2JNNDBhMDZKbEs4MWJMRjY4K0t1OWVyMjdjL0hpaGRZczRhaWRMTHh0TGw2YlhSSjBkcnZpVWlXMVdFalBTQ2MxTlkzazVHVDBPb0dvYUpsaVJRdmg1V25LOU5oaVlwTkpTRXhYZTliU3JWckJ3S1pWUWVWTWIwMVd2VFZuYnUzeGNvKzlEVHorTUYwSTRVY3Z1L3g5Nk1nbGF0ZkluVTIxWXZraTZQVWlCNDljY25uL1FQaEZxbFRLekR1Y3ZlRDZWRHQrOG0rcVZWWUpJWWVNMnNENWkxRjBlZU5wVmkzcHdmNmZQdUxVNlJzY1A1bVRRNnAyamRLWXpRYjJIaml2dmJmdjBBVkVVZURwYkY2akcyNEFUSm80bnZBajRUUnYvanpEaG8vazBLR0RMZy9kM0xCdjMxNzI3TjdOOEJFZnV3Z1dWYWhRZ2FTa0pIN1pzMXZMdDMyLzZUdVhZOCtmUDhmR2pkOFVhR3hQMXFpQjFXckZaREloU1JJSEQreW5aaTFWeTdSV3JkcmFPSS8rOWh0QlFlVXdtVXpsKy9UdDE1eHNSWVRzWHB2czlOclVRa0ptbGRTbUNpOWJNakpJVDFkemJTa3BLY1RFSmhONTA5VnIwOGNucUNzTVVoM2Vtc1ZpVTlkc09VTlFtOE5iazF5OXRkLzJEUGZSNmNTM0g3cWN4SVpmZWFiKzR6emZ0Q29yVmgzZzVPbnJyRnJTSTlkOWZYdzg2TmVyR1lOR3JzZmJ5MFNsQ2tWWi91VitEb1pmWXVyV0Q3WDkvamh6ZzRYTDkvRHUyOEVjL3ZVdjVpemF4ZEk1WFJ4R0w1SStINjVoWHRpYkJQaDdzV0xWQWJ5OVRacGhYUHZORWVJVDBuaXZSekJlWGlaNmRHbE0zOEZyOGZIeHdHalEwenYwUzdwM2VnWi9QeS8zWGV4R0RuVHUzSld3c0Ntc1hiMEtXWllaT09nalJGRjBLUjRrSmlieVdzZFhxUFBVVXd3ZE5vSzVzMmVTa1pGQm4vY3lVOTl6NXkvQ3g4ZUhTVk9tTWZQVDZTeGF1QUJQVDA4R1poTlNQbmIwS0JzMnJLZDkrdzYzSEZ2WnNrRzBiOStCZDN2MVJFSGgyV2VEcVZldlBnRHY5K25INUVrVFdQZjFWNWpOWm9ZTUd3NkFuNzkvaC9hdmROaStjY00zTnNEcU1HNTJWR1VybFcxWGJkcDE1TnBVcnkxcmxkUml0V3E5YlRvUjRoTWtvcUtUS1Y3VVY0dVNoRm1UWCtWR1JEeFJNY25FeDZlU21Ld3VlazlOczJwTHFUSXNrbUMxU3RqdGlpREppcWdvaU5ibytmMTBPakhzWWJvSW5tNCttU2VxbHVEQ1g5RWNPbktKR3RWTE1YMThSNTU5Um0ycHFOdGtJaSszcWNuSWo5cG94MWl0ZGthTy80NHZ2anBFUW1JNnRaNHN6ZmlSYmZsZnNNcjk5T0hJOVp3NUY0R2ZyeWMvLzNJV25VNWthR2dyK3J6VEJGRGJQUVlNL1lydHU4NlFuSkpCblpwbG1EYTJBNDJlVm1YUU9uWmR4T1dyc2Z5NmU3Z2puMllqZE5qWHJQbm1DS0lnMExGZEhXWlBlUU1QRDRQN0xuNkVzZWQ0NWYrazZscHVpSStQbjFqamlhcmZBeWxBS3BBbUNJSUZWZDNLN2xDMWtuVTZuV0l3R2pFWlRZcUhod2tQc3hsUHN5ZGUzbDc0K0JUQ3Q3QXZvZ2dOYTBtVUQzcU1hbFZLVUQ1SXBUVVN4bzk4eVhVWmxjTjdTMDJ6a3A1aEpTUERKbGlzRWphYklraVNMTWd5WXVmWDYray9XOURqTVBEa3cyYllXald2enVpaEx6MnlONGlpZ0NDNHYvdkRNbWNGL2V4SHliQXBpdkpIbzRZTjN2Lzc3NnNwRHVPV0pnaENPbUJCbGV5VFJGR1VSVkZVREFhRG9oSlBlaWdlSGg2WVBjMTRlbnJoN2UxTjRVS0ZFUVNGZWsvS2xDbmxUNlVLeGFqNVJHazhQQXpvVXh5NXRZd01HMVpMMXRVRldSYTVaK3RiV3pxblc1ZUh6YWhsaCtEYisxLzNnMGVlbTBiUklyZS9yRVpTOUZ5T3FreDhraDVKRnNsSWZ6UlZxanpNWm5TaWduOGhPMEZGemlJS2ViZlF5QXBjaWFsTWJJSUpTZGJkc3psVHh5UVRXTmhDMmNmTzN0TElYYjkyN1ZINHFhb3ZXTGo0MlJmYnROcnB5TFhaRkVXeGdXQVhCTFdRSU11eUFDZzJteTNUSU9KWTZTU3JLeFU4VENhMXVUbEZJakVwazlvb3FFd2crdFEwaTRPNUkxdHVUWktSSkZtUUpNV3h5a0I5b1NEcTlib3VELzFUSVdIUkkzRXpwOXY5K1AxQ0tmUUdEM3dLdTNWRlUxTlRpRTlPSWlhaEtqVWZ2NHBKbjVpclVmdjEzQlBvOU9iN01tZXBxU25FSmljUkZmOEU5U3FkeXRlNGxTejFhQkRqRkM5Um9nM3dpOE93V1FHOUlLREgwZGVHcW13bHFNdlFCUVVFUVJRRVJSVFZiZ1JScDhOaXRTS2drSm9ta1p5Y1FYeENHakV4eVpRcTRZZVlubTVUdlRXclN5TXVkcnVFSk1scUpkUkJucVNBa0haemJtdWc4Y000V1lkMkRIM2t3dERJdUNMb0RSNy9LVmFJZndJdkwyK0tGaXVCVHU5QlJGenVpbCtYbzZ1aDA1dnYyNXhsanNuTWxaakt1QUdpS0RiY3MvZEFMVEpKS0EyS291aFFLNlNxTlZNVUZFVldLNlN5TTRyTXVwWlVsU1JJVDdlUmtwcEJZbElhc2ZHcFJFWWxJYVpyUEd0cXo1ck5MbUdYSEViTkdZSm1NbmdJUm9QdVRmZlA4dkFnTnRIMG4yU0YrS2Z3OWlsRVRLSXAxMjF4aWZvSE1tZmVQb1dJU1RDNWZ4d0hTcGN1bmIzMXc4bjhvWE95Zmpob2paQWx0ZjNEN2xna2I3ZlpzRHBhUU5JenJLU21XVWxPeVNBaElZMlkyR1QwRmtzbWVhVFdzNmJtMWdTMWIwMXhXRTZFaENzem54UUU0ZFhiQ2drZjRXVDJ2WjRmU2RZaHlUcTNwNWFIbDVRWUg0c3NneWk2enZlRG1qTjFUSEYzOUpzbkpTWnkrYStMcE9ham9ldmw1VTFRdWNjcFZMandYUm52dlQ2bndXQm91L2FyOVYrOThYckhDMlJTaCtzRlFiQTd3bEZabGV4VEJFbVNGVW1TQk1rdUtVNnZ6VzZ6QVFvV2kweDZ1cFhVVkF1SnllbkV4YVdpVjNOcldaZE55UTV2VFZhTEJnbzQrZGE4dkV5dkYyVEEvekdLNDN2N0ZQY0VuVTZpaUc5Q3ZsVEh1VUVuU285c29hQWdTRTlQZHpGcW9CcVVCemxuNmVscGQvUWcrK3ZTQmRMU1V2UGRKelUxaGN0L1hhUkdyVHAzWmF6MzQ1eTE2OVIrRHJpYUpkZG1kWGh0a3FLb3VUWkZrUlZWeFVweXBUYXkyeEZRc0ZnbE1pdzIxV3RMemlBK01RMTlGdjBDTmE5bXp5d2F5QTVYRUFWaDgxZDlQRVJSZUwwZ1J1MC9SbkY4ejVHYW1rSkVnbCsrVk1kM2l1M2JmbUxGOG1WRVJkMmtSSWtTZlA3bEdzNmZQMGVQN2lIYVBrT0hqK1NGRjlxNGY0aUhHTGN5TUZtdnBYL1RPVDA5dmRxMGU3bjkrdSsrM1dqSnpMVmhFd1JFVUJ5NU5rRlFGQmxKa2hWSmxnUzd1a2dldTkyR0FGaXRNaGtXRytucFZsSlNNMGhLU2tlZm5VRFNuaVczbG5YNVZQT20xVjRGU3Q5cW9Ga3BqdDBvZUlqaTVlWE56VWlabS9GK0ZQT1B2eXVmZStQR0RhWk1uc2lZY1JPb1Y2OCtTVWxKQUZTb1VKSHRPM2NEOEU2UGJ2ZnNleTFmdHBSMkw3Y25JQ0FneDdobXpaak95Wk8vWXpRYWFmNThTOTU3djQvR0tuSHQyalhtekpyQnlWTW5NWmxNdEdqUmtsNjkzOHZCT25FM2NhdHpQdGU0SVFhREFVRVFDUW9Lb251UG5qUnExTmg5OGY1emxCcjU4YWdHMzMyN2NSZmFFaXRGRDBLbVBvSktJYTVremJXcGkrUWxRTUZxazdGWTdHUlliS1NscTdrMjBSbUNTcEtjMmVJaFo3WjQ0R3p4ME9rS3RPVC92MHB4ZkYvQzBueW9qdThFWi84OFEyQmdJSTBhTmNab05CSVlHT2dJeHdSTUpoTW1rOGxsTGVIZHhtY3JsaEVYRjV2ai9kR2pSbEt5VkNrMmZyZVp4VXVXYytqZ0FUWnQrbGIxK0dXWm9ZTS9wRkxsS256NzNXYm16Sm5QbnQyNzJMamhtM3Myem9LZWMrNzhoWHkvWlN2ZGUvUWtiT3BrTm55ei9vRmNKNElnVUtkT0hWcTBhRUh6NXMwcFVlTDJuQWhKa3RpL2Z4L0RobnpFdGIvL3ZpOHBnYkZqUnZIV0c2L1J2VnNYenB3K3JXMzcrK3BWeG84YjA0d3MxVkVjNjBlZERMdVNKQW1TSkFtS0lndVNhdHdFcDdDeUpLa1JwOVZxZC9IYU5NUG0wdDRoT1NtLzFSYVArS3N6bmhBRVd0N3FDL3dUaW1NM1ZNOHRMNnJqMjhIeDQ4ZDR1VzBicGsyZFRHUmtKQyszYmNQTGJkdXc4ck1WQmY2TVF3Y1AwUG10TjJqZUxKZ2UzVVA0NDlRcGwrMTdkdThpcEdzblhtajFQTjI3ZGVIUXdRUGF0bjU5MytmbHRtcG8rOEdBL3J6Y3RnMTkzMzlYTXlMQndVM3BHdElOazhsRWthSkZxVnV2SHVmT25nVWdMaTRPUDM5L09uWHVqTkZvcEZUcDBqUnEvQ3gvL25ubW5zMzc3WnpUYkRiVHFGRmpoZzBmeVpMRkMxMFlaZThYeXBVcmgwNm5ZOXUyYmV6ZHU1ZWFOV3RpTUJoeU5kaTUvWDlBLzc3OHNtYzNaODZjUnBLbDJ6cDM0OGFOMGV2MWVUNGdjdnQ3M2RkZjRlbnB5ZXExWHpONDhGREdqeHVENHJqSVo4Nll6c3Z0WDJtMlp1MjYwbVRUSHdWMGdpQUlvaWc2MTQ0aWF6VUFTWHM1cWRXc0Zqc1pHVGJTMHF5SXpvS0JYU3NZT0xVTXRLS0I0TzNsMGI1Z1Q1STdwemgyUTBWS3F2Q1BjMnkxYXRYbTIwMWJHQkE2a0pJbFMvSHRwaTE4dTJrTElkMjZGK2o0aXhjdThQSEk0YnpYcHk5YnRtN2oxZGRlWitBSC9UWHVyaXRYTGpOKzNCaUdEQm5PNWg5KzRxV1gyakZpeEREUzB0U2svSnk1OC9sMjB4WUFac3lhemJlYnRqQjMva0lBUkZHa1UrY3UrUHFxbnVsZmYxM2l3UDc5Tkdqd05BQ0JnWUhNbVRzZkR3K3pkbk1jUDNhTUdqVnEzck01djVOejFxdmZBS3ZOcGhuays0bkF3RUJ1M0xqaGNDWlVpaTAvUDFkUC84aVJjRVlNRzRMTlppTXVMbzUzZW5RbkxrNFZHLzUweGl5R0RSOTVSdzVJUUVCQW5sNytod05ET1g3c3FHYk1Gc3lmNTdpZXptdS9iOVZxMVRFYWpWeTdwbnFLNTgrZm8wR0RwNmxWdTFhRFhMdzJFUkFWQlVFUUJMWHRROGxhUkhDMGdOaXplbTEyMGpPc2lIWkoxc1JabkdHb3JHU3llS0FvZ2lnS0wvK1RIMkxRd0ZCZTY5aWVrQzV2MGJYem0yelovTDJXMTNpdDR5dTBiL2NpM1VQdTdXS0c3aUZkdUhqeDluUUZ0djMwSTY5MWZJVVhXcmRnOXF5OENmNTI3TmpPNkU5Ry9tZU02K2JObXdodTBwUkdqUnBqTXBsbzFmb0ZxbFN0eWphSGtFZEFRQ0RMVjN4T3RlclZFVVdSbDlxMncyYTE4dmZmVnd0OGpqOU9uYUpGODZhRWRPbEVsYXBWZVM2NFNhNzdMVnd3RDdPbkp5KzB1WDg2UVFVNXB5QUkrUHY1azVKNi8wVjRqRVlqa2lRUkVCQkE0OGFOa1dVWms4bTFQNjV1M1hyNEJ3UXdadlFuREJvNGdQYXZkTURmMzE4Ny9sNmdUOS8rVEp3d25ybHpaclAxaHkxMDZhb1dxQjZ2VUlGZjl1eEJsbVV1WGJyRXpadVJwQ1NyOC9iNDR4WFlzM3NYWGw3ZXpiTVpOWDJtY2N2c2FWTmtSempxMUVlUVZNZE1WWktYc0ZodHBHZllFTE1ZTmExZ0lDdUFvMmlRR2pHM0dYZUJJZmVqSWNOWStjVnE1c3hid09jclYzRHAwaVdOM25ocTJLY1A1UTNlb21VcnZsNi9nVzdkM3VaUlFtUmtKTVdMdStadHlwUUpJakpTWlJYMjl2Ym10OTkrcFhldkhuUjY4M1c2ZGUyY2F5aVNINm8vOFFUYmR1emlxM1ViaUlpSWNGRTRjdUx6bFo5eCtQQWhKazZjbkdmNGM3ZFIwSE1xaWtKY2ZCemVEeWp0VXE1Y09hcFdyY3IrL2Z1MW9sQjJ3OXU3OTNzYy9lMVhURWJUUDNvd21NMW1PbmJzU01lT0hURVlETFJyMTQ2T0hUdnkyR09QdWV6M2VJVUs2ajN6MVJwNjlYNlhRb1hVWFB1cnI3MkJUcStqZTdjdWZQSDVaM2g3ZTJQMlZMM2pRUjhPNXVlZmQvSjI5NjVWdW9hRVZIRVlzNng1TnAyaUtDcFhtM00xZ2l3ak9VTlRXZFk2T2xTdlRjSmlzYUdYc3F3eWNEVGtPc05RQU1GazByZTltejlJNGNLK1BQRmtEUzVlT0UvNThubVRLeVltSmpCNTRnU2lvcUt3MjIxMDZ0eFZZK004YytZME0yZE1KejB0alNKRml6RjAyQWd0TWI1NzE4K3NYdjBsbG93TXFqL3hKQjhNL0ZETFArejZlU2RqUjM5TWVub0dmZnYxMTd5RWI5YXZVNVBYaWtMVFp2K2pXL2NldC93ZVI0NkU4K24wYVlpQ1NNbFNKZkUwZTJyYjhodEQ4MmJCOUIvd0FVdVhMRUpSNFBzdFd4ODZ3MWEwYUZFaUl5SmMzcnQrL1JxMWE2dTlTbnQvMmNPcUw3OWd4c3pabENxdEZzcWZhOXd3MTVzcnU3R3paR1N3ZGVzUHRHNzlBaVlQRDRvWEwwN3o1cyt6Yjk5ZWwvM1dyL3VhN2R0K1l0YWNlWGV0NGZSV3VKMXpIamtTanRGZ29GTGwrNzlFeW1xMVlyZmJPWHBVRGZ0ME9oMFdpOFUxcFpHU3drY2ZEYVJ6bHhET25mMlRLWk1uTW5UWWlEc3FGcVducDdOK3ZWb29hZGV1SFQvODhBTlpGNmRualhCMjcvcVo4Uk1tTVQxc0doTW1UYVpTcGNxWXpXYUdEaHNCUUZKU0VtKzgxb0VTSlVvQ1VLcDBhVDZkTWN0eDMreHErUG5LbFg5a05XeUNJRGpDVVVYSUducXJLVE1KUlJHUUpBVzdYZlhhYkRZN0ZvdGREVVZWYjAwV0hFVURUYWhGVVJSUkVJUzdHZ05FUjBWeDZ1VHZWS2xTTmQvOXpwMDd4LythUDgreUZTdVpNM2NCczJiT3dPcFlHemJxNHhHRWhnN2s4eS9YOE13empWaXlhSUdXcjFtL2ZoMXo1c3huNVJlckFmaGh5MmJ0TTMxOGZGajV4V3BHanhuSC9QbHpBWlZZYi9QbVRTeGN0SlFseXo3anQ5OStZOWZQTy9NZG04VmlZY0s0TVl3YVBaWXZWNitsVE9teTJyWmJqY0Z1dHhNVkZjVzZiNzVsL1RjYkg1anhjblp2QXlpeWpOMXUxNHhRbXhkZllzK2VYWVNISDhadXQvUHp6enY1NDlSSldyUlU2MGV4c2JFSUFvZzZIWW1KQ2F4ZTlhWGpjMXlySHNWTGxPRFF3WVBZYkRhaW8xUkpRcVBKeEJlZnIyVHQydFhZYkRZU0V1TFp1L2NYYXRTb2tSa0tmNytKYnpkdVlPYnN1VnI0ZE0vRDd3S2UwMkt4Y1BqUVFTWlBta0R2ZDkvSHkrditFNFJHUjBkckJzcG9OT0xyNjB0Q2dxdksyY1dMRndnT2JzcGJuVG96OHBQUkdJMG1MY2QycjNEeTVFaytuVEdMNTRLYk1PTGpUL2p0MXlNdTI1T1NrcGcyZFRJdnZ0UTJSemo4OTk5WFdiWjBjYk1zSWFoV1JIQjRiS0lnQ0M3THJGUWFOZGxSSTNETnRlblZTcWlzZVd1eXltRXBBRUo2NUx6V1FNbTc4YVduaDAzRjdHSEdhRExTcDI5L1NwY3BrKy8rTld2V1l2bXlKV3piOWlNNm5SNkxKWVBrNUdRUzR1UHg5dmFoYXJYcUFMelV0aDFObXpVRDRQRGhRMXo3K3lydjluNUhlN0o1ZS90azVoMGM3SjVWcTFYVEV1SGg0WWQ0L3ZtV21NMnFhL3ppaXk4UkhuNllwczMrbCtmWXJsNjl3bU9QRmRHTWM1VnExZGozeTU0Q2pRR2dhMGkzZTVibktBaXlOK2hPbVR5UktaTW44bnlMbG56OHlXZ3FWcXpFcURIaldEQi9McEVSRVpRcFc1YXBZWjlxTW0ydFgyakRxVk1uNmRHOUt6cWRubll2dDZkaXhVckV4YnZlT0FNSGZrall0S21zV0w2VU1tWEtzSFQ1U294R0kxT21oakYzeml5K1dyc0dnOEZBY0pPbWhEakNmVW1TbURaVkRRUGZmTjIxdytqekwxZFRyRmp4dXo0ZkJUMW52ejd2SXdncWMreWdEd2ZmdFQ0MlJRRnZ6NEtYd2k5ZnZveXZyeS9ObXpjSDRQang0MWl0MWh6M3c2MkF1UUFBSUFCSlJFRlVUODJhS2syM1hxOW5VRGFtM0R2RmQ5OTlsM2N1UGNzNWF0V3FUYTFhdGJXL0Z5OWF3TzVkdS9oZjgrZHpGTEg2OTN1ZmxPUVVRcnEvWFdMMDJQRlBObm11MGEvWjhtdzJRYlhrem5CVVVZc0lNb0tnZW15U28xYmd6TFhwSmFmeWxIUDVsSnBiQXhDTVJsM3J1M1h4RFBwd3NFWWJYQkNzWGJNS3U4M09sS25URVFSQmF4OXdoamhPR0F3Ry9QelVKNnpOYWlPNFNWTk5iaXkveEcvV0VDbXJkeTRJZ2xhS3ppKy9rbGV6YUVIR0lHWmY1M09QMExKVmExcTJ5dmtUVnF4WWlWLzJIY3ozMkVhTkd1ZDU0NXBNSmtaK1BNcmx2WGQ2NWVTL3E5L2dhYjVldnlISCt4VXFWbVRtN0xtNWZyWk9wMlBQM2dQMzFkQVg1SnkzbXE5L0FrRUF2YzVPYW1wS2dTcVZpcUp3N05peGYzemVWV3UrdW05ejNLdjNlL1RxbmJ1bSt1dzU4N09tS3VvQng3T0ZvN3BzNGFpZ3lMSWlTWFpFUVVTU0JNZmlna3l2VFpTZFlhaWpHcXFTdVdsaGFHc2VFS0tqWS9EMjhVWVFCSTRmUDBaU1VoS0tvbEM2VEJtU2s1TTVmLzRjQUQvOXVGVVRjcTFYdno0Lzc5eko5ZXVxV096T25UczRlZkwzZk05VHQyNTl0bS9iUm5wNk9qYWJqUisyYkthK296U2RGOHFXRFNJNk9sb3J1VWZjeUpUM3U1TXgvSk1udlRsTGJzK043RWx2enh3OWdROTZ6bkliRTBBUjN3UlNrL01XemZiMExGaklXOUQ5N3VabjNjMXptanc4bW1UejFwdzliYUxqNVNEbFVBUkpraEFFdXlBN284NHNYcHRlQzBNVkJTVkxHSm9XTWJmcDNRcEQ4MEorZ2hTdnZmWTZZOGVNNG9jdFc2aGNwUW9WS2xZa01TR0J3TUJBeG93Yno2ZGgwN0JZTEFRK0ZzaVFvV3Bpc2txVnF2VHJQNENoZ3ovRVpyZFJMcWdjZzRjT3kzY01UOVd0Uzh0V3JYbTNsMW93ZVBhNUpqUnQya3hMaGk1ZHNwaVUxQlJrU1dMZjNyMTA2UnJDUzIzYk1YVDRDRVlNRzRLZnZ6OTZ2VTRySHR6SkdQN0prMTRVNVFJLzZSOGxwS1lrSTRweWpwNUFkYzZrQnpKbnFTbko2RVFwMXo3Rll2NXgzSWoxSnlwU3djdkhMOGZZeXBXdmNNdEY2WjZlWHBRclgrR3VqZmRCbkJNb3NYM0hyc3JQTjI5NmdpdzBSazZqcGhvMkJGbVdIZTRiU0xLZ2RYWTRLNlJDa1VBekZxdGRzRnBsN0pJaXlLcFlpODRXczJDU0tBb2YzTzZvSGlYdTludUJpK2YvSkxoV3dacytMMGRWSmphNWtIdHRiamJjakx4QlFLRWtnaDdMT1plWG95c1RtM1QvNXl5L01UbTl5YWo0UWtUR0IyQ1RqS1Erb3NRdDZlbnBTMXUzYnIwS1ZROGhHVlh3SmQwaCtHSVRCQ1JSRkdTRFhsQ01SaEdUVWErWVBReVl6UVk4elNhOHZFem9uV0dva29YSlExRVVVUlNGNXZjNkNlcEdUbmg3S3JmRjExVW04RHhSOGRXNUdYa0RieDgzTlhocVNqSXBLY25ZYlJtVUNUaVhleW9oOEN4UmNVL2V0emx6amtteXAxTTI4R3krSG5oUi95U0sraWM5NHFJOFNrUGdxeXpocU03QjlxRldSeEVjQytOQmxoVkZWcHQyRlVsUzFBcXBYVUtmclNrWEJZUzR5ek9xY1FkaUxiZWJCSFVqNXcyZzE5bHY2NElXUlptNmxjNXdPYm95Y1lsV0V1TGl5TWg0TkIvMVpyTW5vaWdUVU5oRzJjZk9JUXBLbnRkcHZVb251UkpUbVpnRXl6MmRNN1BaRTUwb0VlQnJvV3pnMlFML3RvOHlPYXNnQ05XM3J1OWJ2SFhIdVg5cHhrMUJoK0RJc1lFZ0tLck5rbVhVYmc1SFpkVDUwcXZVMzluV2hucDdOTG5UUVJYeFRTQWlJY0Z0Mk80QUtTbUpsUFM3ZmNvaVViQlR2c2dmbEMvaWx0KzdIY01SOU5oWmdoNTdPT1QzM0hERlU3V0NxZ0YvT3cyYkFqb2hhd0ZCemJVcGlxTk5UWEtzUm5EMHR5RTZ2RFVCYlcwb2drNFVuN3ZUQVJYemowT1JFb2k2ZVkyMEI3Q083dCtJdE5RVW9pS3VncFJJVWI5L3hzWDJhRC9wSDc0NWN4dTFPNE92cjJjdDFLS0Juc3dDZ2lyMG90R3BLWUtzSURpOE5rR1dsU3dlbTVPZXlPR3hEZXJYVENjSUJQK1RIL0twU3BlNEdlL0R6ZmdBa2hPTnBLUzZmNmk4NE8wRkJwMlZVb0Z4RlBGTmNrK0lHMjRBQnIydVljM3F4UXduL29qVVp3bEhSUVJFQlVVQVFWQVV4eElyeGJHNHdFRzdKc2t5Z3BkWko5anNpaUNwMVZBeCtmcnNwcDVtNDQvdXFYWEREVGNlSkk2ZXVOTG5xZUNKcDhoU0hSVUUwZ0dySUFnMlFVRFdhZFZSSFI0bXZlTGhZY0JzTnFLM1Mxa1d2aXVLY0RNcXNlSDk2b3gzd3cwMzNNalRhelBvS2dOL1pnMUZGUVZSRUZBN09CQ1FaUVc3QklKTlJoRHNhc2dvZ09EaDRTSGE3WFpCVVJSUlVSU2QzVzdmSkFqQzgrNXBkY01OTng0azdIYjdib1BCTURHTHg1WWlDRUlxWUJFRXdTb0lnaVFJZ3F6WDZ4V2owYWc0Nk80VnM5bU02RndYcVNpSzhPcXJyK29FUVdqb25sSTMzSERqUVVPdjE5Y3RXN1pzMXNLQlZrQndPR0t1VkVaWlhvTFJhQlFsU1JJVlJkRWxKaVkyOVBiMjN1V2VVamZjdVA5UUZJWEl5RWh1M294Q2tpUlNVcElmK1RrNWRlcFU3NzU5KzU1MWVteU9WN29nQ0ZiQTd2VGFkRHFkb3Rmck1SZ01pc2xrUXArVnljTER3Nk91Ky9KeXc0MEhZOVNPSFR1R2dxQ3RobkRyOFlLdi8yUGxnUXRrYWZ0d2tFOXFqVFNDSUNBSUFxS29RNi9YbzljYk1oZVdBb0pPcDN2cTMvamxRME5EYWRXcVZZSDJUVWxKUVJBRWR1L2VmY2ZucTFXckZwTW5UNzdUdkFHaG9hRVVLVktFd29VTDA3dDNiMDBFeFkxSEY1R1JrU2dJRkMxV3d0M2NuZ1UrUGo2VnM0V2hvcE40TXF2dFVobUpaTFdmVFpIVkhKdHpuYWdnQ0hYY1UzbHZNV3pZTURadDJzUzZkZXZZdEdrVE8zZnVwRisvZnU2SmVjUVJGUlh0MXVQTkJRYUQ0UWx5NXRpeUdUVUZsVzVOUVZGa0ZGbldkdUQ4K2ZORmdFcnVxYngzU0UxTlpkNjhlWVNGaFJFY0hFeHdjRENMRnk5bTVjcVZ4TVRFdUNmb0VZWWtTWGZrcVowNS9RY0RRL3ZmOC9HZE9YT2FzR2xUMk81UUtuTmk0OFp2Q09ueUZpRmRPN2tJOGtSSFJ6UHdnd0dFZE8xRTN6N3ZjZlhxRlczYmlSUEg2ZmwyTjdxRmRHYjBKeVB6MVdZVkJLSEN5STlIZWVkajNBQUVIQXNObk0yNnpxcW9VS0pFaVNmL0t4ZkpkOTk5Ui8zNjlUR2J6WGg1ZWRHOGVYUE9uWE5sZXZqbGwxK29WcTBhSGg0ZU5HdldqTC8rK2t2Ykpzc3lZOGVPcFhUcDBuaDdlOU9vVVNQMjc5K2Y2N21pbzZONTVaVlg4UFB6dzl2Ym14ZGVlSUVMRnk1bzJ3TURBL253UTVWTjk5aXhZNlNucHhNY25MbXc0OWxubndYZzRNR0Q3cnY3RVVaeThwMnRPcWxjcFNxanhveTlwMk9iUDI4dXk1WXU0ZExGaXk1RzZPclZLMnhZdjU0Rmk1YXliUGxLVHB3NHhwRWo0WTVqNXRDczJmOVkrZmtxdW5WL215bVRKbXFwbUVrVHhqSHlrMUY4dHZKTFNwVXVvMmxtNUlWbm53c3U0VEJrTG9TVGpyQlVXNEdnS2xpcFhwdm0waGtNaHYrRVlmdjk5OTk1NVpWWDZOeTVNMmZPbkdISGpoM2N2SGxUTXk1T3pKbzFpMG1USm5IOCtIRzh2YjFwMXF5WnByd3pjZUpFbGl4WndwSWxTemg1OGlRZE9uU2dlZlBtbk0xRkhEYzBOQlNMeFVKNGVEakhqaDFEbG1WQ1FqTDFCQVlOR3FSeDAxKy9maDJqMFVoQVFFQldWNXVBZ0FDdVhidm12cnZkeUlIWTJGZ0dEUXdscE10YmRBdnB6T0ZENmdQUXFjbmJvWDFiUXZ1N3BqS0dEZmxJOWFLNnZFVzdsMTdnelRkZTFiWmR2SGlSMFA1OTZkNnRDNE0rR01ETm01RXV4Njc3K2l1WC9RRjZ2dE9Mc09rektQLzQ0NjczMm9rVFBGVzNMcDZlS3NtcW42OGZKNDRmMTd5eTU1NVRIK0NGQ3hmbXp6L1BZTFZhaVl5SXdNTnNKaWlvSEFEKy92NmNPSjQvelhueFlzWEtaREZxamp4YjFuQlV5UXhKMVR3YmVsQjcySFE2WGZYL3dvV2dLQXFmZnZvcC9mdXI3bmxRVUJBaElTRXNXTERBWmI5UFB2bUVkdTNhQWJCaXhRcEtsU3JGNXMyYmVlbWxsNWc4ZVRMTGx5L1hDaElEQnc1azE2NWR6Snc1TThmblhMNThtZEtsUzFPeVpFazhQVDFadm55NWk1RWFOaXlUUFRjdExRMFBENDhjWXphWlREbmswOXh3QStDcnRhdXBVYU1HSWQzZTV0S2xTOHlmTjRjR1R6ZlVOSG5QbnovSHhQSGpYSTZaTkdVYW9FcFk5bjZuaDZhL1liVmFtVGgrTE9NblRxWjQ4ZUw4OU9OV0ZzeWZ4K2d4bWNmWHJGVXJoNTVIWHNKRGlZbUplSGg0RUIwZHphUUo0NUJrQ1I5SG5qQXhNUkdUaHdmZmIvcU9IVHUyWVRRYVNVbEpJU2twQ1pQSmhOVnFaZTZjV2R5NGNTT0h3bFoyZUhsN2w4dGkxQndHVGhFZEZBT09YamFjdFFKRlVSUkI3Mnh5RXdUaFAySFlhdGFzU1VCQUFOT25UK2ZNbVRPY1BYdVdYMy85bGFKRlhZdm5qUnRuQ3BVRUJBUlF2bng1L3ZqakQ1NTg4a2xTVTFQcDFxMGJiNytkS1pSc3RWcGRqbkZpeUpBaHZQbm1td1FHQnRLMGFWTmVmUEZGdW5idG11dll6R1p6RGpVaFVDWGRIb1NNbXhzUFArclZiOENjV1RNQWdmcjFHeEEyZlVhQmpwTmxtVEdqUjlIbXhiYlVyOThBVUtVaHIxMzdtK0ZEQjZ2N0tESmUyZlFLS2xXcVRLVktCZGRLUFgzNkQ0Nk5HRXJvQjRNNCsrZWZYTXlTaHBrMFlSd0JnWUdFVFovSnF4MWVkakdJQXo4WXdJc3Z2a1NIanE4eVl0alFmTTloTUJncVpNdXQ1Y3l4b2FDQVZrRFFaMjZnNm4vaFFqaDQ4Q0RObWpXalNaTW1ORzNhbE5kZWU0M3c4SENXTGwyYTcxTklyOWRqTkJvMXJjMDFhOVpRdmJxcnJjL04yMnJidGkzWHIxL24rKysvNThjZmYyVDQ4T0hNbnorZnc0Y1BheTY2RTZWS2xTSWpJNE9FaEFSOGZYMEJzTmxzeE1iR1VySmtTZmRkN0VaT3cxYXZQblBuTFNUOFNEaWZyMXlCMFdoa3pMZ0p0enh1MmRMRmVIaDQwTGxMNWtQV1pyTlJyRmd4VnF6ODRxNk1yWERod21Sa1pCQTJmU2FGQ2hYaXhJbmpGSFpjMTRVTEYrYVpSbzAxa1hOVmh0S2JRb1VLa1pTWXlJU0pVM2o4OGNjNWUvWlA3VjdJQzRJZ1ZNNlNXOHVhWjh0ZVFGQ2NCUVFSRUtLaW9pb0Jwdi9DaGJCZ3dRTHExNi9QMXExYkdUeDRNQzFhdE9ER2pSczVKUFd5NXN1U2s1TzVlUEVpMWF0WHAzejU4cGhNSmk1Y3VFQ0ZDaFcwMTZKRmk5aXlaVXV1SHR2NTgrZnAwcVVMcTFhdFl2LysvWnc2ZFlyampseERWdFN1WFJ1ejJjemV2Wm1xNS92MjdVTVVSWjUrK21uM1hleEdEa3lhT0o3d0krRTBiLzQ4dzRhUDVOQ2hneTdTa2JsaDM3Njk3Tm05bStFalBuYVJxcXhRb1FKSlNVbjhzbWUzbG0vN2ZwT3JUdWo1OCtmWXVQR2JBbzN0eVJvMXNGcXRtRXdtSkVuaTRJSDkxS3lsYXBuV3FsVmJHK2ZSMzM0aktLZ2NScU9SWXNXTFU5alhGNVBEc2RpM2Q2OTJURDR3TFY2NlBEQVhnNmIxc0FGWlBEWkhqczNiMjd2Q2YrVkM4UGYzWitmT25adzhlWktTSlV1eWJ0MDZsaTFiaHArZm44dCs0OGVQcDNIanh2ajYraElhR2tyRmloVnAzYm8xb2lneWNPQkF4bzRkUzdGaXhXallzQ0hyMTY5bnhvd1piTisrUGNmNXpwNDlTNTgrZlpnM2J4NEJBUUdzV0xFQ2IyOXZxbFJSQlcwbVRacEU3ZHExYWRXcUZWNWVYdlRvMFlPK2Zmdmk0K09EMFdpa2QrL2VkTy9lL2I0cG5ydng3MExuemwwSkM1dkMydFdya0dXWmdZTStRaFRGZkJYZTVzNmVTVVpHQm4zZTY2Vjl6dHo1aS9EeDhXSFNsR25NL0hRNml4WXV3TlBUazRIWmhKU1BIVDNLaGczcmFkKyt3eTNIVnJac0VPM2JkK0RkWGoxUlVIajIyV0JOTy9qOVB2MllQR2tDNjc3K0NyUFp6SkJodzdYSWFQaUlqeGszYmpRMnE0M1NwVXN6ZU9qd1c1NnJRb1dLandIWGMvZllIRG9oR3Jla2dpQ0tvb2ZGWWhtZzErc24vMXQvL05EUVVQNzg4MDkrL1BGSFltTmo2ZG16Snp0MzdzUmdNUERVVTAveHhodHYwTE5uVDY1ZXZZcXZyeTgrUGo1TW5UcVZsU3RYOHZmZmY5T29VU01XTGx4SUdZYzZ2YzFtWTh5WU1YejIyV2ZFeE1SUXVYSmxQdm5rRXpwMDZPQjRHdFhpalRmZVlPalFvVVJIUnpOZ3dBQzJiOTlPY25JeWRlclVZZHEwYVRScTFBaFEyejI2ZGV0R1dGaVlsazhMRFExbHpabzFpS0pJeDQ0ZG1UMTdkcTVocmh1UER2YnMyZU5XZDhzSGNiR3hZVFZyVk4rT3VtYlUrVW9UQkNFRFZTbGVFa1ZSWFROcU1DaUNJQWhtdTkwK1V4VEZYdTdwYzhNTnQyRjdHSkdSbnI2NllvVnlYMlF6YktsWkRKdGRFRVJacHhNVnZjR2c2QjNKdWFCLzZ4ZWVOMjhlZmZ2Mi9VLzhlSkdSa1RtcXR3V0JMTXRjdm5LVnVMZzRKRWtpSS8zUlhIdnFZVGFqMCtudzl3c2dLS2dNK1JHbUtvcmltTE5ZN1BaN04yY2Vaak42dlo0QS93Q0Nnc3JlY3YvcjduN0dYQ0ZKVW5FY1RibFpYNHFpcGhIVjdnNFpXUWJKTGlFSWd1QXB5L0pSb0xKNyt2NTlzRmlzbkRoeEFwMWU3OVlWQlZKVFUwaEpUa0tTN05TcVdRdWowWkNyVWZ2MTE5OFFkYnI3b3l2cUdKTXNTOVNyVzlmdHNkMEJGRVU1WDZaVThRL0lKSjEwRWs4NnFjTHRqbkJVMGV2MWlyTzZVTlk5ZGY5T1JFUkdvTlByM2F3UURuaDVlVk8wV0FsME9qMDNJbTdrdXM5Zmw2OGc2blQzYmM2Y1l4SkZIVmV1WEhWZnRIY0FRUkJLWi9QWXN2L2ZwVmxYUEgvK2ZGSEFuYm4rbHlJMkp0Yk5DcEVMdkgwS0VSTVRtK3UydUxpNEJ6Sm4zajZGaUlsMWt4M2NhVlQveWVneDN1VFo4dUhVYlFGUTBBY0VCQlIzejltLzFUMi9jMWFJUjhGelMweUl5M1hiZzVvekx5OXZFdVBqN3VqWXBNUkVMdjkxa2RSOHRIcTl2THdKS3ZjNGhRb1hmbUR6ZmkvSFdiVkt0VUpBVEM3ZW12T093Tm42b1RlWlRFWHYvZzNucGpndUtIeDhDcUhUaVJRcFVvVGl4Vy92R1NNSWtKN3VKcW5NQytsNUVIZyt5T0xLbmY1ZWYxMjZRRnBhL2dLOXFha3BYUDdySWpWcVBUaGF4WHM1enNlS0ZDbVUzVnR6RkE4RTEzQlVVZlE2bmU2dUdqWTN4Zkh0SXpVMWhSc1JrZHlJaU9DcE9uZjNvdHkrN1NkV0xGOUdWTlJOU3BRb3dlZGZydUg4K1hQMDZKN0pRREowK0VoZWVLR04rNGQ0aUhFclk1SDFXdnF2anJOUW9VS0ZzaGd3WjNPdTRGZ01ueldTRWZTaUtENTJONzlZVm9wak53b2Vvbmg1ZVJOMU00TEl5RWlLRlN0MlZ6NzN4bzBiVEprOGtUSGpKbEN2WG4yU2tsVE9yd29WS3JKOTUyNEEzdW5SN1o1OXIrWExsdEx1NWZZdU5FM09jYzJhTVoyVEozL0hhRFRTL1BtV3ZQZCtINDFWNHRxMWE4eVpOWU9UcDA1aU1wbG8wYUlsdlhxL2w0TjE0bTdpVnVkOHJuRkREQVlEZ2lBU0ZCUkU5eDQ5YWRTb3Nmdml2WTh3bXowS3VScTFIQy9IMGtrRlVSVEZnTHQ1Y2pmRjhUOHdjTjQrM0x4NTg2NTkzdGsvenhBWUdFaWpSbzB4R28wRUJnWTZRbGdCaHdhankxckN1NDNQVml3akxpNW5Bbi8wcUpHVUxGV0tqZDl0WnZHUzVSdzZlSUJObTc0RjFKNjhvWU0vcEZMbEtuejczV2JtekpuUG50MjcyTGpobTNzMnpvS2VjKzc4aFh5L1pTdmRlL1FrYk9wa05ueXovb0ZjSjRJZ1VLZE9IVnEwYUVIejVzMHBVZUwybklpREIvWVQwclVUcjcvNkNqTStEZFBXZE5wc05zS21UU0dreTF0MEQrbkN2bjJaYTVyelk4UzlkNUZNS3B1Kys1YWhnMVhhSllQQm1OMWpFM0VVRHJKR2pGYXJGVkVRaEx1NlNOR2R6UDVubnB0ZGt2N3g1eHcvZm95WDI3WmgydFRKUkVaRzhuTGJOcnpjdGcwclAxdFI0TTg0ZFBBQW5kOTZnK2JOZ3VuUlBZUS9UcDF5MmI1bjl5NUN1bmJpaFZiUDA3MWJGdzRkUEtCdDY5ZjNmVjV1cTRhMkh3em96OHR0MjlEMy9YYzFJeEljM0pTdUlkMHdtVXdVS1ZxVXV2WHFjYzVCU2hBWEY0ZWZ2eitkT25mR2FEUlNxblJwR2pWK2xqLy9QSFBQNXYxMnptazJtMm5VcURIRGhvOWt5ZUtGK2RKYTN5dVVLMWNPblU3SHRtM2IyTHQzTHpWcjFzUmdNT1Jxc0xQL1B5TWpuYWxUSmpGeDBsUldyMTFIVEV3TTIzNzZFWUN0UDJ3aEl5T0RsVitzWnZxTVdjeWUrYW5tNWVmRmlGc1FQUEhFRTlwRE5iOHhadjA3SmlhR2QzcDA1OEtGODlydm9OZnJDK1hocVdrdldaYlI2L1dJZ04vZG5QUTdwVGgyUTBWSzhqOHZ0TlNxVlp0dk4yMWhRT2hBU3BZc3hiZWJ0dkR0cGkyRWRPdGVvT012WHJqQXh5T0g4MTZmdm16WnVvMVhYM3VkZ1IvMEo4cmhUVjY1Y3BueDQ4WXdaTWh3TnYvd0V5KzkxSTRSSTRacGFsdHo1czduMjAwcUU4cU1XYlA1ZHRNVzVzNWZDSUFvaW5UcTNBVmZYL1d5Kyt1dlN4ell2NThHRFZSMms4REFRT2JNblkrSGgxbTcwSThmTzBhTkdqWHYyWnpmeVRucjFXK0ExV2JURFBMOVJHQmdJRGR1M05BOEZGbVdjNUE4SERrU3pvaGhRN0RaYk1URnhmRk9qKzdFeGNVUkVSR0JyNjhmSlV1V1JLZlQwYXBWYXc0ZlBnU29yTGZQUHZ1YzQzY1NNQmlNbkR0M1Z0dVdHeU51QVhOamVaSlZMbHU2V0tNR1Azbnlkd2IwVjFjUitmcjY4c1dxTllSMHkrUkUxT2wwdVlXaXVJYWhxa2NyQXZjOGJodzBNSlRYT3JZbnBNdGJkTzM4SmxzMmY2L2xOVjdyK0FydDI3MUk5NUF1OTNRTTNVTzZjUEhpeGRzNlp0dFBQL0pheDFkNG9YVUxacy9LbStCdng0N3RqUDVrNUgvR3VHN2V2SW5nSmsxcDFLZ3hKcE9KVnExZm9FclZxbXh6Q0hrRUJBU3lmTVhuVkt0ZUhWRVVlYWx0TzJ4V0szLy9YZkRtMHo5T25hSkY4NmFFZE9sRWxhcFZlUzY0U2E3N0xWd3dEN09uSnkrMGVmRytmZitDbkZNUUJQejkvRWw1QU1sNm85R0lKRWtFQkFUUXVIRmpaRm5HWkhKbEhhdGJ0eDcrQVFHTUdmMEpnd1lPb1AwckhmRDM5NmRZc2VMRXhjVnk2ZElsN0hZNzRlSGhwS1NvMzhISmlIdnExRW1HRFA0UW84bElZbUtpdHMzSmlEdDN6aXlORWZlZjRzMjNPck5yMTgvTW1UMlRjV05HMDdkZmY2ZDNsaU9uS2dpQ2R6NjVOUmNqcHhjRTRiNGt4RDRhTW94NjllcVRtSmhBcjU1dlU3V2F5bjJXRjczeHc0QVdMVnZSb21VcnZ2NXFMWkdSRVkrTTF4Z1pHVW1GQ2hWZDNpdFRKa2liQTI5dmIzWnMzOGI0OFdOSVNVN0pNNnpJRDlXZmVJSnRPM1lSRVJIQkp4K1BZUG15cGZSOHg1V0g0Zk9WbjNINDhDSG16Sm1QWHErL0w5KzlvT2RVRklXNCtEaThIMURheFJtTzd0Ky9uMXE1OEprSmdrRHYzdS94eHVzZEtWT21yR2FreldZenc0YVBaUEtrOFk3ZnRTeWVack4yM1BmZmJ5STlQWjFKazZjeGUrYW5McCtaRnlOdVhtalZxaFhlM3VyOE9QT0FwMCtmNXZUcDA5byszdDdldlB2dSszd1EybzgzMytwRTVjcDVMeXNUUmRFN256QlVNMm8ybXcwOWNGODVxUXNYOXVXSkoydHc4Y0o1eXBjdm4rZCtpWWtKVEo0NGdhaW9LT3gyRzUwNmQ5WFlPTStjT2MzTUdkTkpUMHVqU05GaURCMDJRb3ZoZCsvNm1kV3J2OFNTa1VIMUo1N2tnNEVmYXZtSFhUL3ZaT3pvajBsUHo2QnZ2LzZhbC9ETituVnE4bHBSYU5yc2YzVHIzdU9XMytQSWtYQStuVDROVVJBcFdhb2tudVpNdHR6OHh0QzhXVEQ5QjN6QTBpV0xVQlQ0ZnN2V2g4NndGUzFhbE1nSVYwTisvZm8xYXRkV1cxSDIvcktIVlY5K3dZeVpzeWxWdWpTZ1ZnMXp1N215R3p0TFJnWmJ0LzVBNjlZdllQTHdvSGp4NGpSdi9yeExvaHBnL2JxdjJiN3RKMmJObVhmZkdrNXY1NXhIam9Sak5CaW9WUG4rTDdHMldxM1k3WGFPSGozcURORnlhR2FrcEtUdzBVY0Q2ZHdsaEhObi8yVEs1SWtNSFRZQ1FSQjR1dUV6UE4zd0dVZnViSzVHUzErNGNHSE1aak5qeDAxQUZFVXNGZ3VGSGZPUUZ5TnVmdmp4UnpWMzk4d3p6M0Q1OG1VdGZIWkplMXk4eU9SSkV4ZzdiZ0lybGkrbFROa2cydVR0S1h0bE0ySlpqSnFRTldSRkJEenY1NDhTSFJYRnFaTy9VNlZLL2t6azU4NmQ0My9ObjJmWmlwWE1tYnVBV1RObllMVmFzVnF0alBwNEJLR2hBL244eXpVODgwd2psaXhhb09WcjFxOWZ4NXc1ODFuNXhXb0FmdGl5V2Z0TUh4OGZWbjZ4bXRGanhqRi8vbHhBSmRiYnZIa1RDeGN0WmNteXovanR0OS9ZOWZQT2ZNZG1zVmlZTUc0TW8wYVA1Y3ZWYXlsVE9uT3A3YTNHWUxmYmlZcUtZdDAzMzdMK200MFB6SGpaN1hhTkJsMlJaZXgydTJhRTJyejRFbnYyN0NJOC9EQjJ1NTJmZjk3Skg2ZE8wcUpsUzBCVlRoSUVFSFU2RWhNVHRCeUpJcnV5RkJjdlVZSkRCdzlpczltSWpvcFN3eWlUaVM4K1g4bmF0YXV4Mld3a0pNU3pkKzh2MUtoUkl6TVUvbjRUMzI3Y3dNelpjKzhiQVdkQnoybXhXRGg4NkNDVEowMmc5N3Z2UHhDdGl1am9hSzJhYlRRYThmWDF6U0dJY3ZIaUJZS0RtL0pXcDg2TS9HUTBScU9KdURqWFZRK0hEeDFreDQ1dFdnOWpyVnExc2R2dGlLSklRa0k4Rnk5ZXBGTEZTdHEyM0JoeC95bCsrL1VJUTRlTm9FblRabnc2Y3c2bi96aVZnKzA2eTRQU25NMm9aWDJHdXBUMzlZRDVmdndZMDhPbVl2WXdZelFaNmRPM1A2VWRwSTU1b1diTldpeGZ0b1J0MjM1RXA5TmpzV1NRbkp4TVFudzgzdDQrVksybTZoRzgxTFlkVFpzMVUzK293NGU0OXZkVjN1MzlUcGFuaWs5bTNzSEI3bG0xV2pVdEVSNGVmb2pubjIrSjJlR092L2ppUzRTSEg2WnBzLy9sT2JhclY2L3cyR05GTk9OY3BWbzE5djJ5cDBCakFPZ2EwdTJ1WEJSM2l1d051bE1tVDJUSzVJazgzNklsSDM4eW1vb1ZLekZxekRnV3pKOUxaRVFFWmNxV1pXcllweFF0cXZiWHRYNmhEYWRPbmFSSDk2N29kSHJhdmR5ZWloVXJFWmR0dWREQWdSOFNObTJxK2lRdVU0YWx5MWRpTkJxWk1qV011WE5tOGRYYU5SZ01Cb0tiTk5XU3hKSWtNVzNxWlBSNlBXKyszdEUxVFB4eU5jV0szZjBWZ0FVOVo3OCs3eU1JS25Qc29BOEgzOVUrTmg4Zm53THZlL255Wlh4OWZUVlp4K1BIaitkSTVOZXNXWXVhTld0cCthcEJXWmh5NCtQajZOV3pCNlZMbDJiaXBDazhWcVNJOXJ1ZU8zZE95M2YzR3hDcWVhNTVNZUlXQkFjT0hNaHoyMnV2djZIOVB5QWdnSThHNXl2czRwRlBHT3F3Y0NLU0pLRUg3c3NkTnVqRHdScHRjRUd3ZHMwcTdEWTdVNlpPUnhBRXJYM0FhWjZkTUJnTStQbXBUMWliMVVad2s2YWEzRmgraWQrc0lWTFdWaTVCRVBKOFltVE5yK1RWTEZxUU1lVEhFM1kzMGJKVmExcTJhcDNqL1lvVksvSEx2dndGbWhzMWFwem5qV3N5bVJqNThTaVg5OTdwMVR2SGZ2VWJQTTNYNnpma2VMOUN4WXJNbkQwMzE4L1c2WFRzMlh2Z3ZocjZncHp6VnZOMU44YVFtcHBTb0ZZcDUrcWVPNFdmbnovcmNva1dzaHZBckFnTURDeXdRdGJkUkVCQWdGWmh6OFZXQ2RudGdTQ0FUcWUyZXp3NDF5RmZkenNHYng5dkJFSGcrUEZqSkNVbG9TZ0twY3VVSVRrNW1mUG5WV1gzbjM3Y1N0aTBLUURVcTErZm4zZnU1UHIxNndEczNMbURreWQvei9jOGRldldaL3UyYmFTbnAyT3oyZmhoeTJicU44aGZXS1ZzMlNDaW82TzFuRUZFbHR6Qm5ZemhuOEJzOXNTTjI1dWJCemxuZVoyN1NKRWlwT1d6cHRyVHMyQWhiMEgzdTFlNHgrTTA1dUtwQ1VvMnI4MFppdW9lMUNUa0owangybXV2TTNiTUtIN1lzb1hLVmFwUW9XSkZFaE1TQ0F3TVpNeTQ4WHdhTmcyTHhVTGdZNEVNR1RwQ0RRbXJWS1ZmL3dFTUhmd2hOcnVOY2tIbEdEeDBXTDVqZUtwdVhWcTJhczI3dmRTQ3diUFBOYUZwVXpXMDNmYlRqeXhkc3BpVTFCUmtTV0xmM3IxMDZSckNTMjNiTVhUNENFWU1HNEtmdno5NnZVNHJIdHpKR083WGsvNVJRbXBLY3A1ZXRmaUE1aXcxSlJsZEhwWFc0c1dMRXhFUlFmVE5DRHk5ZlhLTXJWejVDcmRjWU83cDZVVzU4ZzlXbCtrZWoxT1htOGVXVzk1TlVHNFZkOTBtamg0OVNwRmlibzNNTzBWVTVIWHEzTVpDK011WHJ4QWJGK2RlbTVzTk55TnZFQmdZUU5sY2NybVhyMXdoTnZiK3o5bk55QnNFQkFRUVZEYnYvSEpVVkJTUmtaSFk3WGFTazkyc09OblJwRW1UOWtBYUtvTnVFcG1pTGhZMDdRTkJ2dXZOUVc0UDRwODkwVyszWDZ0czJUSkVSMGNqbnRxUEFBQWdBRWxFUVZSeE0vS0dteHJjTVljcEtjbElkbnV1UmcwZ3FHeFpvcUx1MzV3NXh5UkxVcjVHelJtU0ZuRWs4OTNJRmRuRFRzR1pZeE1FUVYxMUlJcUNvQ2lLaExwRTRhNGdJaUtDeU1pYlBGYlV6Vjk1Kzk3YURVcVVLSDdiN0I2S292RFg1U3ZFeGNVaTJXVXlNaDVOamphejJSTlJweU13SUpDeVpVdmZjb0gvbFN0WGlZNkpRYkpMOTJ6T3pHWlBkSHI5TFQwMU53b0VXUkNFamtCcUZvOHRSUkNFVk1BaUNJSk5FQVM3S0lxS29DaUtGVERjN1hCVUVIVjRlWG5qNmZiY2JvazBoOWdIS0xjVmhycmh4aU1HbXlBSXIyY3hiTWxBc2lBSWFVQkdWc09tQis2NllhdFRwdzQzYjk3a1psUVV5VW1KYmdiZGZPRHQ0NE5CcjZkVXFaTHVFTVFOTi9LSHRhQTdPZzNiWGE4UkZ5MWE5STQwTXQxd3d3MDNDbWpZbEd6L2FoQ0JkUGQ4dWVHR0cvOENaQlRZWTd0eTVZcGJEY1FOTjl4NDZLRW9Tbm91M3BtaU9CUmRuSjFyaXFJbytySmx5NmE2cDh3Tk45eDQyQ0hMY21xVzBGTXpjTm5iUFFSQlFGUVV4VTE1NjRZYmJ2d2JQTGJzekpaS3R2OXJmK3RSZTBIY2NNT05CMy9qdXZWNDg0SGRiay9KWXNDVUxLR29ralVVbFdVWnZhSW9DZmRTcWNnTk45d29tRkZ6Ni9IbUQ0dkZrcHlieCtacXZ6SkQwYmhIYllKS2xTcEZ0V3JWY2hXajhQYjI1clBQUHJ1WFR4MUNRME1wVXFRSWhRc1hwbmZ2M3BvSWlodVBMckxxOGJxWEkrWjU3eVJsODlnVWNtbjFBTld3eFQ2S2szVG16QmttVFpwMDM4ODdiTmd3Tm0zYXhMcDE2OWkwYVJNN2QrNmtYNzkrN3F2MkVZZGJqL2ZXc0ZxdFNWazh0Vnp5YTRMS3JTaUFLRWxTektNNFNlWEtsV1BpeEltY09YUG12cDB6TlRXVmVmUG1FUllXUm5Cd01NSEJ3U3hldkppVksxY1NFeFBqdm5JZllkeXBIdStaMDM4d01MVC9mWEFFVGhNMmJRcmJIVXBsVG16YytBMGhYZDRpcEdzbmxpOWJxcjJmbjhEeWlSUEg2ZmwyTjdxRmRHYjBKeU1Mck0yYW5wNldqR3RUYnJicXFOTmZBOUZtczkxOEZDK2szcjE3VTcxNmRkNTU1NTE4R1hQWHIxL1BrMDgraWRsc3BucjE2aXhkdXRSbCs4OC8vMHlkT25Vd204M1VxMWVQc0xBd0YzSFl3TUJBUHZ4UVpkTTlkdXdZNmVucEJBY0hhOXVmZmZaWkFBNGVQT2krdXg5aDNLa2ViK1VxVlJrMVp1dzlIZHY4ZVhOWnRuUUpseTVlZERGQ1Y2OWVZY1A2OVN4WXRKUmx5MWR5NHNReGpod0pkeHlUdThDeTNXNW4wb1J4alB4a0ZKK3QvSkpTcGN0b21obTNRbEppVWw2aGFJNFZDUHFNakl5b1c2bk4vQmVoMCtsWXNtUUpEUm8wWU5HaVJiejc3cnM1OXRtN2R5K2RPblZpOXV6WnRHclZpcU5IajlLN2QyOTBPaDNkdTNmbjRzV0x0R25UaHI1OSs3Sm16UnArK2VVWCt2ZnY3eUx3TVdqUUlHclhyZzNBOWV2WE1ScU5CQVFFYU5zTkJnTUJBUUZjdTNiTmZYZTdrUU94c2JGTW5EQ09tT2dvQkZIa3ZmZjYwT0RwaGk0a3JiNitmcXhZK1VWbXVtUElSOXk0b1RJNEp5UWs0T25seFpxMTZ3QlZGV3JPckJra0ppWGk3K2ZQNEtIRE5DMExnSFZmZjhXR0RldTEvUUY2dnRNTG85R29NVlU3OGZ1SkV6eFZ0eTZlbnA3WTdYYjhmUDA0Y2Z3NDllclY1OFNKNDN6d3dTREFWV0E1NnVaTlBNeG1nb0xLQWVEdjc4L1BPM2NVYUM1dVJ0MU1Mb0JSVXdEMEVSRVJFWG5Kei8vWDhkUlRUeEVhR3NxUUlVTm8yN2F0cG4zb3hJUUpFK2pSb3dlOWU2dDgvbVhMbHVYU3BVdE1uVHFWN3QyN3MzRGhRcXBVcWNLMGFkUFVwMmZseXB3OGVaTFZxMWU3NU5TY1NFdEx3OFBESThjNFRDWlREdmswTjl3QStHcnRhbXJVcUVGSXQ3ZTVkT2tTOCtmTm9jSFREU2xWcWxTZW1yeVRwcWpYWTJKaUFyM2Y2YUhwYjFpdFZpYU9IOHY0aVpNcFhydzRQLzI0bFFYejV6RjZUT2J4Tld2VnlzRThuSmZ3a0ZOZ09UbzZta2tUeGlISkVqNk9QR0ZXZ2VVZE83WnBBc3RKU1VtWVRDYXNWaXR6NTh6aXhvMGJPUlMyOGc2N1R6dmJQZVM4UERWbk1DcldyRmt6aXR0WWcvVmZ3OWl4WXdrSUNLQnYzNzQ1dHAwNmRZcGx5NWJoN2UydHZVYU9ITW1GQ3hlUUpJbmp4NDlUdjc2clFFMmpSbzN5UEpmWmJNNjFFbXV4V0I2SWpKc2JEei9xMVcvQXpoM2JXZm5aQ2l3WkdRVVdWSkZsbVRHalI5SG14YmJVcjk4QVVLVWhyMTM3bStGREI5TTlwQXVyVjMrcHFiVTVVYWxTWlY3cDBMSEE0enQ5K2c5R2poaktPNzNmcFdsVFYyVzNTUlBHY2ZueVg0Uk5uK21pVkorWW1NakFEd1pRclZwMSt2VWZVTkJUWlV3WVB6WXRuMUJVTTNTQ29EYm9BbHdGS2oyS0Y0Nm5weWNMRnk2a1pjdVdiTnpvcXR4anQ5c1pOR2dRYjcvOWRvN2pSRkZFcjlmbkVBVE9MMTlYcWxRcE1qSXlTRWhJd05mWEYxQlZxMk5qWXlsWjBrMm43a1l1aHExZWZlYk9XMGo0a1hBK1g3a0NvOUhJbUhFVGJubmNzcVdMOGZEd29IT1hydHA3TnB1TllzV0t1WVN0L3dTRkN4Y21JeU9Ec09rektWU29FQ2RPSEtldzQ3ck9TMkM1VUtGQ0pDVW1NbUhpRkI1Ly9ISE9udjFUdXhmeWc2SW9mMmN6WUhJV3p5M24vYWtlbzF4NWxDK2VGaTFhMExselovcjI3YXVKQ0FOVXExYU5reWRQVXFGQ0JlMTE0TUFCWnMyYWhTQUlQUG5ra3h3NWNzVGxzN0wvblJXMWE5ZkdiRGF6ZDIrbTZ2bStmZnNRUlpHbm4zN2FmUmU3a1FPVEpvNG4vRWc0elpzL3o3RGhJemwwNkdDT2gybDI3TnUzbHoyN2R6Tjh4TWN1emFzVktsUWdLU21KWC9iczF2SnQzMi82enVYWTgrZlBzWEhqTndVYTI1TTFhbUMxV2pHWlRFaVN4TUVEKzZsWlM5VXl6VXRndVZqeDRoVDI5Y1hrQ0cvMzdkMnJIWk1mSkVtNm5zMm81ZUd0cWYwZWVrQ1JaZmx5WG9vK2p3cG16SmhCMWFwVlhYSmRRNFlNb1ZXclZvd2VQWnBPblRweCt2UnArdmZ2ejhDQkF3SG8yN2N2czJmUFp1alFvYno5OXRzY09uU0lCUXNXdUlTVmt5Wk5vbmJ0MnJScTFRb3ZMeTk2OU9oQjM3NTk4Zkh4d1dnMDBydDNiN3AzNzM3ZkZNL2QrSGVoYytldWhJVk5ZZTNxVmNpeXpNQkJIeUdLWXI0S2IzTm56eVFqSTRNKzcvWFNQbWZ1L0VYNCtQZ3dhY28wWm40Nm5VVUxGK0RwNmNuQWJEcWl4NDRlWmNPRzliUnYzK0dXWXl0Yk5vajI3VHZ3YnErZUtDZzgrMnl3cGgyY2w4Q3lYcTluK0lpUEdUZHVORGFyamRLbFN6TjQ2SzNGbDIwMlcwUXVIcHVpcXUrNWVtMkNnQ0lJZ3VDZGtaSFJ6MmcwVG54VUxwWlNwVW9SR2hxcXRXRTQ4Y1VYWDlDMWExZFdyRmhCdDI3ZEFGaTFhaFVUSjA3a3dvVUxGQ3RXako0OWV6Snk1RWp0U2ZqVFR6OHhjT0JBTGx5NFFPM2F0V25Rb0FIcjE2L1hkRVVEQXdQcDFxMGJZV0ZoV2o0dE5EU1VOV3ZXSUlvaUhUdDJaUGJzMmJrV0ZkeDRkTEJueng0ZXIxakZQUkY1SUNZbTV0UGFOWi80QlZkYThCUW5MVGdxYmJna2lxS3MwK2xWdzVhVWxOVEcyOXQ3clh2NmJnOG5UNTRrTFMyTkJnMGFhTytOSGoyYUgzNzRnZkR3OFBzMkRsbVd1WHpsS25GeGNVaVNSRWI2bzdsRXk4TnNScWZUNGU4WFFGQlFHVVJSekM5bjQ1aXpXT3oyZXpkbkhtWXplcjJlQVA4QWdvTEt1ZzNiSGVMc24zOE9hLzYvSnFmSktlU1NEamlrOTBSSkZFVlpyOWNwZWtDSmo0Ky8rQ2owc2ttU2ROdnlkdm5kR0JjdVhLQkxseTZzV3JXS1dyVnFjZkxrU2ViTm04Znc0Y1BKalBjTGpzakl5TnVtVTdkWXJKdzRjUUtkWG85UG9jSnUrYjNVRk9JVDRvbjVMWnBhTld0aE5CcHkvZTErL2ZVM1JKME9iNTk3UDJlcHFTbkV4c1VSSFJOTnZicDE4OTMzdXJ1Zk1WY2NPbmdnbHN5Q2dWWTRjREI3T0VKUkJRVUZXWllSQkVId0JJei9aKys3NDV1by8vK2ZkNWRjZHZlbXBZVzJERkdnU0FFL0ZCRi9iQnpnRjBVRlJDeFlrQ0VnSWhRVUZHUXJRZ3NpVTVDbElHSlpBckpreWlwWWhteVEwcWJwYnRPUmNYZS9QMjQwU2ROU29HWG05WGhFYWRaZDNuZjN2TmQ4UGxtVzFRTlF1SmJ3N216cTFLbFl2SGd4MHRMU0VCd2NqTGk0T0l3ZVBicFNiNkU2N1dHSi96N3F4b3NUZXlFc3RMeVhkTzM2RGVUbTVqNFV3V1FmYjIrRU9wSGhjM2xzbGQrL1Eyb0Y5QUV2WTJCMENFVkxBSmdGb1dTR0pFbE9KcE54Sk1xU2NSZGM2M2YzRmg4ZmordlhyOE5rTXVIcTFhc1lNMmJNQXdNMUFNak95bllOVHpzeHJjNE5XVm5PK1IxeWNuSWV5cHBwZFc3SXluYk5CTjlEcXVVaTdGczhiRnM5N0lzSElvT3U2SjJ6TEh2ZXRZU1BsM0hjdlE5UFArbW0wV2pCc2t5RktZbUhzV1lhalJhTWxYRWRuTHMwaThWeUZlWDcxeHo3MkhoMkR3SGNaQVJCY0J6SGNWYXI5WHhGb3hNdWV6U05JSUNTRWhlWFcwVldVZ0hQM2NNc3J0enI4U3JJejhlTjYxZFJWR1NzRkRqRDZvVER6ZDM5b2YyK210aFBvN0h3cGhOQUsrZXhFVVNaN29GTWZLR2twT1NjQzlncTg0NTQybWFEd1FBcnc4QllXRDIwelZxdERqSzVESDYrdmdnTURLejIvZDYxY3dlV0wxc0tneUVEUVVGQldMbHFMUzVmdm9UWS92Mms5NHlObjRDdVhidTVEdklqYk5ldlhVRnhjZVgwUGtWRlJ0eTRmaFdObXpaN292Yno5dTIwMnc2QXhnQmdoYUpCdVljSWJBREFYYnAwNlZ4MGRMVHJES29BMUpLVGt3R0NoRWFyNDJtYkE2cnYrNHVLakVqWFp5QTlQUjNObWxYZlNabVdsb1laMDZmaXk4bGZJenE2QlFvS2VHcWNpSWhJN05xOUR3QXdNUGI5R2x1M1pVdVg0UFh1UGV6WVRNVDltanZuRzZTay9BT2FwdEcrUXljTS9taUlOSHlkbXBxS2hMbHprSEkyQlFxRkFoMDdkc0tIY1lOUmswM2tkOXJtaXpFdlFDNlhneUJJaElXRm9YL3NBTFJ1SGZQQXpzRTdnWVh0dWZRd3JTYjJjLysrdlJrQ2FERWlxTmw3YmJ5WEJsdVZLaEhsV3Jac21RWGdzZ3ZHeXB0ZXJ3Y0lFbjcrZ1RXU205Rm90UER6RHdSQUlEMDl2ZHErOStLL0YrRGo0NFBXcldOQTA3VEVFMGNRQkJRS0JSUUtCV3BTNytMSDVVdVJrMU0rZ1Q5cDRnVFVDZzdHYjc5dndhTEZ5M0QweUdFa0pXMEN3UGZralIwekd2WHFOOENtMzdjZ0lXRUI5dS9iaTk4Mi9scGorMW5WYlNZdVdJak5XN2VqZit3QXpKNDVIUnQvM2VDNk9HcmVxYmd5YzhhMGtzckNVSUlRUWxIWWg2SVEzc0N5TEh1S0pNbEkxM0xhbThHUUNZMVdWK1BiMGVqY1lEQVk3anNrUFgwNkdaTyttQUN6Mll6aTRtSjBmNDBQTTN1ODBSUDkzdTlmcGU4NGV1UXdFaFBtUWE5UFIyaG9HRVo5OGlrYVBmdXM3VjBVeTVZdFFhYkJBUCtBQU1URkRVYXJGLzRIQUJnMjlDUGNFaGhUUjM0OEhESVpoZURnRUNRdVdBaVdaZEcyYlR0MGUrVVZLQlFLK1BuN28zbDBOQzVkdkFpQXIxaDZlbm1oZDU4K29Ha2F3U0VoYUIzVEJ2LytXM05GKzd2WnBrcWxRdXZXTVpESFQ4REVMeWFnVStjdWp4MHpDOE13T0hyMENMWWsvWTRoUTRjak9DUUVBRDhrUC9lN2I1SHl6eG1RSklYWWdSOGlKb1luUXMzTXpNUzBxVk9RblowRm5jNE5ZejRiaTlxMVF5dmREa0VRaUlxS2dvK1BEMWlXeGZuejU1R1dsbGJsL1Z6eDQzTDhzWDNiT1dkaEtBQ1c0emkyTEw5R2NDQUl2a0c5b0VBcUhnQUFaN0ZZa2hVS1JTOFhsTm1ibGJFK2tDcWFScU9Gc1NEdnZyK25hZE1vYkVyYWloMS9iTWZLRlQ5aTlkcWY3K3J6VjY5Y3dlY1Q0akhwcXlsbzNqd2FlL2ZzeHFpUncvSFRxclh3OC9mSHpaczNNR1h5bDVnN2J6NGFOR3lJVGI5dHhQang0N0I1eTNhbzFXb2tKQzZRd3JjNWMrY2hNcktNT0lZa1NmVHUwN2NzSjNQOUdnNGZPb1NQaHZDMFVUNCtQdExuUlcvcWRISXlYdS9lbzhiVy9WNjJHZDJpSmN3V0N5NWR2SWlvWnMwZXlmT1daVm1wOWNqMjN4OFBINHBhdFdyaHdvWHpZR3dxeDl1M2JVVnBhU2xXL0xRR09UazVHUFJoTEJvM2JnSTNOemVKRWZlVlYxL0RpUlBITVdQYVZNei8vb2RLdDErblRoMVFGSVdkTzNkQ29WRGc1WmRmUm1abUppd1dpOU45dFAwN0plVWY3TiszRjdObWYzdmxoVmJSam1Hb2JZNE5Jb0FSQWpocnRWcSszVU5Nd2hVVUZKeHl3Vmg1cTY1Q1FaVzJaVFErOU4rN1pVc1MycjdVRHExYngwQ2hVS0J6bDY1bzBMQWhkZ3A4OTk3ZVBsaTJmQ1dlYWRRSUpFbmkxZGRlaDhWc3hxMWIvMVY1RytmT25rWEg5dTNRcjI5dk5HallFQysyZmNucCt4WitQeDhxdFJwZHU3M3l3SDUvVmJaSkVBUzhQTDFnTERJK2t1ZnM4ZVBITUg3Y1o3QllMTWpKeWNIQTJQN0l5ZUVGNmI2ZE14Zmo0aWVVdTFtZk9YTWFiZHE4S055QUNNamxOQzVkdWlpOTl1S0xQS1c5TFNQdW5XNFlvb2ZHY2Z4RWdLZW5wOTE3bGk1WkpGR0RwNlQ4ZzQrSDh6ZTRLNWN2b1dsVUZHN3hycit0dDhZNENVZkJjWndFY0hJNWJkZWd5NzMxMWx1bndIZjJ1cXdTTzNQbU5EcDFlQmw1ZWJtU2g5T3Y3N3RQVkU0eE1OQytLNzkyN1REbzlYeitUNnZWNHVUSkU0ajdNQmE5MyttRjk5L3JJOTF0cTJxTm5uMFdPLy9jaTUvWGIwUjZlcnFkRUlob0sxZjhpTC8vUG9xcFU2ZFgyeWpjbmF5cTIrUTREam01T2RBK29qMkV6WnRIdzh2YkcxOU8rZ0tmalBvWVBkNzRQNGxCNWs2TXVHZlBwdUN6TWFOQksyams1K2RMcjRtTXVJa0pjeVZHM01xTXBta3dEQU52YjIvRXhNU0FaVms3d2trQWVPZmRQdGk3ZHc4UzVuMkh5VjlPd3RCaHZEQk4zZkFJbkR4eDNEaDB5RWNaRGlHb0hiQUpZRlpPMUlVVWtzY2NBSGIvL3Ywc3gzRkhYZEIxWnlzcEtjR2ExYXVmeU4vbTcrOFB2VU1SNC9idFZJa2IvOEJmKzdGNjFVLzQvUE5KV0wzMjV3cERYWUlneW9HZHFiUVVtMzdiQ0ZNcFQ5b2NHQmlJOXUwNzRNeVowM2J2MjdEK0YremF1UU56dmt0NFlIMVpkN1BONDhlUGdaYkxVYTkrL1lkeWZEcDI3Q2c5SEZtY3hiV1BpeHVNVXlkUFFFRXJxdXp4YnQ2Y2hPWExsbUxhOUZrSWRjaWhWY1NJZTZkd3RHSERoamgwNkpCVWxiYzFyVmFMUVlNK3d2cGZma2E3bDE5Ry9mcjhXRm1USmszUnZrT25rd1pEUm1XZ3hwYk5pWXJCS0svelFNS2VONXkxV3EwdVlLdmlBZHU3WjdmazN0dmF2cjE3OE9IQUQ5Q3Y3N3VZT1dPYWxGTklTMHZEb0E4SG9QYzd2VEJyNW5RcHFmOVE4b1pXcTBTcXliRXNyRmFyQkVMZFhua1YrL2Z2eGJGamY4TnF0V0xQbnQwNGR6WUZIVHQxQXNBTGpCQUVRRklVOHZQenBGQ0NZKzNKVEFPRGduRDB5QkZZTEJaa0dnejhYVnlod0U4clYyRGR1ald3V0N6SXk4dkZnUU4vb1hIanhtV2g4T1lrYlBwdEk3NmJsL2pBZU9xcXVrMlR5WVMvang3QjlHbGZJMjdRUncrbGNKQ1JrWUdkTzNkS0QyZE1Na2FqRVo5K09ncDkrdlpEUUVBQVpreWZXaW03c3hoaWVuaDRZTmJzYitIbDVRV1R5UVIzQWVCRlJ0eGh3MGRBTHBkTGpMaVZtZGxzaHNsa3dzR0RCMkV5bVVCUlZEbHRqNnRYcjJMNnRLL3gxZVN2Y2ZUSVlXemR1a1Y2N2RWWFh6dnJKQXhsYkhOc29tTkdFSVNVcTNOemQ0ZE1LSTl5b2x0WFdGaDR6RVY2ZUdkVHF6WG8yS2tMVnE5YWlTNWR5Z0RxK3ZWcjJMQmhQUklTRmtDaFZHTG1qR25ZdG5VTFh1L2VBM1BuZklQMkhUcWk1NXR2NGRqZlIzSG80SUdIc3UrT0Rib3pway9Gak9sVDBhRmpKM3oreFNSRVJ0YkR4QzhuNC9zRmlkQ25wNk4yYUNobXp2NVc4dGk2ZE8yR3MyZFRFTnYvUFZDVURLOTM3NEhJeUhySXliVUgrVkdqUm1QMnJKbFl2bXdKYXRldWpTWExWb0NtYWN5WU9SdUpDWFB4ODdxMWtNdmxhUHRTTy9SN242ZGZaeGdHczJieVllQTd2ZXk1OTFldVdvT0FnT3B2WXE3cU5vY04rUWdFd1JNc2ZqSjZ6QVB0WTd0YnUzcjFDdHEyYllkM2UvZUIxV3JGM08vbUlDY25wMXhQb2EwMWJScUZjK2ZPZ2lSSjVPWGw0dXJWcTZnbkZINHFZc1N0ekRJek0rM0NYdzhQajNMQ0xTZFBITWZZY2VQeGZQUG1lSzV4RXl4YnVoaGR1M1lEUVJDNGR2M2F0WXBBRFE1VEJ5UkpRU2FqWURZREZFbVZUUjZJSHR0SEgzMTBkTjI2ZGZrQTNGM3dWYm05OFg4OTBhOXZiNGsxRkFEKy92c29VbS85aDBGeEE2VzdsbFpvRlVsSitRY1RCVVdnOElpYTc2cnAxTGtMT25YdVV1NzV5TWg2K090ZzVUcW1yVnZIVkhqaEtoUUtUUGg4b3QxekF6K01LL2UrRmkxYjRaY05HOHM5SHhFWmllL21KVHI5Ym9xaXNQL0E0UWQ2SEt1eXpUdXQxLzJhVGxlOTdVUk5talJGa3lZODViWk1Kc01uRGt5NXpxeEwxMjY0ZE9rUyt2ZmpxOWJEUGg0aGhlUVZNZUpXWmpkdTNJQ0hod2ZhdDI4UEFEaDkrblM1Z3NOYnZkNlcvdTN0N1kxUHg0eVZVbjV4QTJOVG5ZSWFRYkRnT0pZVGpDUkpqaVFKamlCSWFMVmFMamMzaC9mWWJIT2l2L3p5aTNYTm1qVUhTSko4eFFWZEZSdEJFRkNwVkhpalowK3NXbFVtam1FeFc5RDJwWGFTNUpsandya21HMkpkOXZnYVJWRW9LakkrME9GOHg5eG9aUURvNCtOVFpZVXMyL005T1RuNW52Yk5Zckg4cmRmcmJjTlFxd2h1QkE5dW5EUmxRSklnQ0JJa1NZQldLT0R1N3NFWER4eG1ybGlMeFhMUWRhcmRHZGdBb0VmM04zQTc5WmIwZkhTTEZ0aXplN2RFRGI1Nzk1OUlTZmxIY3VlM2I5dktoNE5DR2YxK1RhVlN1dzdHWGE3TncxeXppcmJ0NStlSFltTmhwYW1QcXFaSUhuYUtwanJlbDV1YiswOGxZYWhES0NxTVVwRWtTSUlFU1pKU1ZSUkNJbzRGd0dWa1pMaUFyWXFtVUNyUnAyOVp2cXBCZzRZWU52eGpqQjB6R20vMzZvay9kKzVBY0hBd0FHRDRpRkhZdWVNUDlINm5GN1p0MndxeUdtWWZ4VHU5eSt5dHlGaFk0V3dwK1pEV3JNaFlDS3FDRnBMQXdFQndISXZNakhTbisxYW5ic1Fkd1VDdDFxQk8zWWlIdXU3VnRaK25UcDY0NmdUVXhFZVptQXRCOElVc2tpZ0ROWklFb1ZLcENLdlZTckFzUzNJY1IzRWNKd2VnWUZsMkg0Qm5YWmNJY1BMVUtmZ0gzTC91NTRVTDUxR3JWakRjM055d1o4OXViTisyRmJObWYydjNuZ3o5YlR4L0Y1M3NOMjdjUkhhT2kwSFgwVEwwYWZEeDhVWm83ZkpzdFErTGRaaG45ZlZHbUJNR1hkRU1CZ1AwZWoyc1Zpc0tIMkJqK0tOa0hNZWRiOWV1M1NUd0lpMjI0aTFGQUlvSmdoQTBEZ2lHSUFpV0pFbU9vaWpRTk0zUk5BMkZRZ0VaSDU5S2VSOHBITFZhclh0a01wa0wyQURJcWluL1VWcFNpakdqUi9ISzcxb3RQaHM3cnR3ZFhTNlgzOVYzaG9iV1JtYW1BUm42TkdoMWJpN05BMk1oak1aQ01GYXJVMUFEZ0xEUVVCZ01EMjdOeEgxaUdhWlNVQk5EVWo4L3Y2ZjZHQllXRnY0Tko3azFBSXdZVllxdEhoUkZRUzZYZzZacEtKVktLSlZLcUZRcUVGcXRsckJZTEFURE1BVExzaFRIY1JRQU9pc3I2MlV2TDYrTkxsZ0QwdFBUa2E3UEVCZzRhczRNR2VrSURQQy82eUY0anVOdy9jWk41T1JrZzdHeUtDMTlPc2tuVlNvMVNJcUNqN2NQUWtORDdsaW91WG56UDJSbVpZR3hNalcyWmlxVkdwUk1ka2RQeldWbGR1TEVpVStqbzZPdkFpaEdtY2FCa1NDSUlzR0xNd3Y2Qmd4RlVaeGNMdWNVQ2dXVVNpV25WQ3FoVnF0QnVMbTVFV2F6V1FRMjIzQlV5YkpzTW9CYXJxVUdUcDFLQmtFUTBHaDFVRmZ6SGI2NHlBaGpZUUVBcmxyNTJGem1zc2N3REUwalNYS2tUUmhxQzJ3bEFFb0pnckRSRUtVNG1xWWxZRk9wVkZDcjFYd29TcElreHpDTWJTaktBV0FZaHRsQlVkUUhydVVHbWpXTFFucDZPZ3lHVEJRVzVGWGJzTHBPcDROTUprTlFVQ0FDQWdKY0MrMnlwOXBLU2tyK2duMDExQzRVZGNBb29ZZU54ekNTSkVGUkZDaUtLc3V4aVcwZndsQXBDNEF0TEN6ODA4UER3d1ZzZ2dVR0J0WUlmYmZMWE9ZeTNxNWN1WExHQWRTc0FLd0VRZGkxZWhBT2ZXd2lvSW4vSnNYeXFEaG5aZFBUeG5wNWVmMEo0TFpydVYzbU1wYzlpREMwU1pNbTF3WHdzam84R0Z0UUF3QmI3TElGTjRxaUlHTlpsdU00cm94dDBzWmpBOEJldTNadE8wVlJBMXpMN2pLWHVheUd3OUI5anA2YUE2aUp6TG1jR0YwS1BHOGN3ekJnR0FaV3F4VVdpd1V5aFVJaGtyUkowLzhDMkxFQUdIZDM5KzNlM3Q0dVlIT1p5MXhXbzNiOCtQSGtTc0pRaWRGRDlOQmtNaG5rY2ptRXdnSEV3b0ZXcXdWcEc1dmFjTE5KNGFpdnIrOUJ1RlRpWGVZeWw5VnNHSHF4UllzVy96bUFtZ1VWTUhvNDV0YWtFRlFtNHg4MkZRV0NKRW1PWlZsQ2lHRkZzUVRHYkRadnBtbTZvV3Y1WGVheUdyMjRvZGZya1pGaEFNTXdNQnFmbnNtRHdzTENmYkJ2eXBVZUhNZUpqYmtpd1NSWWx1VXNGZ3RzZEEvQWNad1Vqc3BzUFRiQmErT0lNb1VYRmdDVGxwYTJMU3dzYkl6cjFIT1p5Mm9PMUpLVGs4R0JrS1loL0oraTM3OXp4eDlubkhoclZ2RFRCbmJFa2lSSmNwUk1CbHBPUTZHZ29WQXFvVktxb0ZLcm9GRnJvTlBweWtKUlczQnpERWZyMXExN25tWFpuVS9hWWlZbUprS3BWRDdRYlZxdFZvd1lNUUorZm41d2QzZEhYRndjaW91TFhWZjJVMjU2dlI0Y0NQZ0hCRDExWTNGV3EzVnY3QWZ2WjlzQW04WEJheXNmaG9vRDc3WmhLQ1dEVEM2SFhDNEhLWlBKUkZEamJEdzJ6b2J0Z3dYQUZCY1hKN2xPdi91M2NlUEdJU2twQ2V2WHIwZFNVaEoyNzk2TlljT0d1UmJtS1RlRElSTmFuZHRUK2R2VDA5TU9PUWxCTGFpNGYwMW94aVU1aWhTQVRjYm4xK1F5R2VRMFhSYUtPaFlSQ0lLd2EvMUlTRWpZUEc3Y3VNOEFoTGhPdzN1em9xSWl6SjgvSDZ0V3JVTGJ0cnlVMmFKRmk5Q3hZMGZNbURGRFVtcDMyZE5uRE1QY2s2ZDI0Znc1TEY3MEE3NzlibDZON3QrRkMrZXhkY3RtTkduU0ZCMDZkcEtlLysyM1g3RnA0NjhBUWFCdDIzYjRJSlp2b0toTVlQbk1tZE5JbVBzZHJJd1ZZYUZocWRldVg3L2c0SzFKWWFpSVA0NE51U1JGZ2lRZHZEV2hTa3JUZEpuSFpodUtpdUdvamRmR2pCOC92c1Jpc2Z6NnRKMXdhOWV1UlpNbVRhQlNxVkMzYmwzTW0yZC9BdTNac3dmTm1qV0RTcVZDZEhRMFpzK2ViUWRRUFh2MlJQUG16UUVBeWNuSktDa3BrVUFOQU5xMDRaVzJqeHc1NHJxNm4ySXJMQ3k0cDgvVmI5QVFFNy84cWtiM2JjSDhSQ3hkc2hqWHJsNUZVVkdSOVB4Ly85M0V4ZzBiOFAwUFM3QjAyUXFjT1pPTTQ4ZVBDWi9oQlpaWHJGeU45L3QvZ0JuVHBrcXBtR2xmVDhhRUx5Yml4eFdyNE9QcnQyUHZudDBXWjk0YVFOaFhSRVZ3STBsUXR1TlRBcWpKNUhMSVJkb2lzVHdxdkltaktJcGdHSVlqU1JJTXcwaDVOZ0RXVzdkdWJhcGJ0KzZJcCtWaysrbW5ueEFiRzR0dnZ2a0duVHQzeGw5Ly9ZWGh3NGREclZaandJQUJ1SHIxS3JwMTY0YWhRNGRpN2RxMTB1dTJ5a1U5ZS9aRWJpNnZQM3I3OW0zUU5HMG5xQ0dYeStIdDdZM1UxRlRYMWUyeWNwYWRuWTJwWDA5R1ZxWUJCRWxpOE9BaGFObnFCYVNtcG1MVWlPR3dXTXp3OFBERThoVmw5UFRqUHZzVWFXbjh3RkJlWGg3VUdnM1dybHNQZ0ZlRlNwZzdCL2tGK2ZEeTlNS1lzZU1ra1I0QVdQL0x6OWk0Y1lQMGZnQVlNUEJEMERTTjJiTm0yTzNiUDJmTzRQbm16YUZXcTJHMVd1SHA0WWt6cDA4ak9yb0Z6cHc1alpFalB3RmdMN0JzeU1pQVVxVkNXRmdkMGJNN1ZZRzNaaVVJTWI5R2NBREJFUUJIa0NSSGtTUklrdUtrU0ZNTVF3VnZUYUZRbGdHYlRhN05OaHkxbXgyTmlJaTRZTFZhTjVJaytjYlRjRko5ODgwMytPQ0RENlFjV0dSa0pHN2N1SUhKa3lkandJQUJXTGh3SVJvMGFJQlpzMmJ4ZDgvNjlaR1Nrb0kxYTlaSTMvSDIyMlZpRmNYRnhVNkxGUXFGb3B3c21jdGNCZ0EvcjF1RHhvMGJvOS83SCtEYXRXdFlNRDhCTFZ1OWdPRGdZUHl5WVNNdVg3NkVxVk1tMjMxbTJneitmTXpQejBQY3dGaEpmOE5zTm1QcWxLOHdaZXAwQkFZR1lzY2YyL0g5Z3ZtWTlQak83clFBQUNBQVNVUkJWR1haNTVzMGJWcU9lZmhPQXN1Wm1abVk5dlZrTUN3RG5aQW50QlZZL3ZQUG5aTEFja0ZCQVJRS0JjeG1NK1orOSsyV1pVc1haemw0YXJiZ0pvU2g0UGlIV0RTd1NaL0p5cncxV21qV1ZhbVVJT1Z5T1J5OE5qZ094Z3U5SWd3QUppOHY3NmtKUjgrZlA0OFhYbmpCN3JtWW1Cajg5OTkvTUJxTk9IMzZkRG14MnRhdFcxZjRmU3FWcXB4S0Q4QnJWVDRNZlVxWFBmb1czYUlsZHYrNUN5dCtYQTVUYVdtVkJWVllsc1dYa3lhaTJ5dXZvVVdMbGdCNGFjalUxRnVJSHpzRy9mdjF4Wm8xcTJESXlMRDdYTDE2OWZIRy8vVzhpMnZrSENhTUg0dUJjWVBRcnQzL3N3ZllDZ1NXOC9Qek1Xcmt4L0J3OXpqa3hGdXpMUnBJYkI2MnVUV0tzZ2xEWlJSa01ybU50NmFBU3FXR1RBUTJzV3RYREVjcGl1SUVIVUhiMlZIR3g4ZG5EOE13aHdpQ2FQMmtuMVFxbGNycENTUCtYeWFUbFZNNnIweVVOamc0R0tXbHBjakx5NE9IaHdjQXdHS3hJRHM3RzdWcXVXanZYT1lFMktKYklISCtRaHc3Zmd3clZ5d0hUZFA0Y3ZMWGQvemMwaVdMb0ZRcTBhZnZlOUp6Rm9zRkFRRUJkbUhyL1ppN3V6dEtTMHN4KzV2djRPYm1oak5uVHNOZE9LOUZnZVdPblRwTDNxSldxNFdibXhzSzh2TXhlY3Ewb3krLzFPWjZKZDZhMkx2R2xuVnBDR0VvajFHU1F5YVh5VURMNWFBVkNpaVZLcWcxYXBBMFRVTXU5SDVVRUpMYUZSRUFXSXVLaW41K0drNnFoZzBibGt2cUh6NThHSUdCZ1hCemM4Tnp6ejJINDhlUDI3M3UrTGV0UlVWRlFhVlM0Y0NCTXFIa2d3Y1BnaVJKdEdyVnluVVZ1NnljVFpzNkJjZU9IMFA3OWgwd0xuNENqaDQ5VXU1bTZtZ0hEeDdBL24zN0VELytjenNXNFlpSUNCUVVGT0N2L2Z1a2ZOdm1wTi90UG52NThpWDg5bHZWZ3JMbkdqZUcyV3lHUXFFQXd6QTRjdmdRbWpUbHRVd3JFbGdPQ0F5RXU0Y0g4bkp6ZDFma3JRR0VIWnNIUU5oNGJHVjVOY3JPVzFOQXFWQkNyVlpCcTlGQ0pnSmJSVVVFbTdZUGFSS2hmZnYydng0NWN1UkRnaUFlZTAwRWxtWHh4eDkvbEh1K2JkdTJpSStQUjgrZVBmSHNzOCtpYytmT09IandJT2JNbVlPSkUzbXg0S0ZEaDJMZXZIa1lPM1lzUHZqZ0F4dzllaFRmZi8rOVhWaTVidDA2NU9ibVl2RGd3ZEJvTklpTmpjWFFvVU9oMCtsQTB6VGk0dUxRdjM5L1NUSGJaUzZ6dFQ1OTNzUHMyVE93YnMxcXNDeUxVWjk4Q3BJazdZb0grZm41ZUt2bkcyajIvUE1ZTzI0OEV1ZDloOUxTVWd3Wi9LSDBQWWtMZm9CT3A4TzBHYlB3M2JmZjRJZUYzME90Vm1PVWc0NW84cWxUMkxoeEEzcjArTDg3N2x0b2FCaDY5UGcvRFBwd0FEaHdhTk9tclNRZVhwSEFza3dtdzdqNENlZGZlNlhyMlFxOE5RdEJpS0FtRkEwSThONGFSWUlpS1U0bVZVTGxVdDhhcmFDaFZDbWhGaVlQaUo0OWV5SS9QeCtGaFlVb0tpcENjWEV4U2twS1lES1pDSlBKQkJzOUJKTGpPQmtBT1FCbFVWSFJBSlZLOWZYamZOSWtKaVpXMkJ4Ny9mcDFoSVdGWWRteVpaZ3hZd1p1M0xpQnNMQXdEQjgrSEVPR0RKSGV0MlBIRG93YU5RcFhybHhCVkZRVVdyWnNpUTBiTmtpNm9qMTc5c1NOR3pkdzRzUUpLWjgyWXNRSXJGMjdGaVJKb21mUG5wZzNiOTREbjRCdzJhTmwrL2Z2UjNoa2c2Zml0eG9NaG0rZmoycDhCRHo5dDZocllBUlBCVjVDRUVRcEQzQ0VsVmVob2ppWlRDWXFVSEcyVEI0YXJSWTZuUTZlbnA3dzhmRkZVRkFRd3NMQ1FQVHUzUnQ1ZVhrb0tDaEFVVkVSaW9xS1VGSlNndExTVXBoTUpzSnNOc05xdFpJc3l4STJlZ2owNHNXTHZXSmpZLzhBRVA2MG5vd3BLU2tvTGk1R3k1WXRwZWNtVFpxRWJkdTI0ZGl4WXcvVTY3eHg4ei9rNU9TQVlSaVVsanlkSTFwS2xRb1VSY0hMMHh0aFliVWw4bFJueG5HY3NHYlpzRnByYnMyVUtoVmtNaG04dmJ3UkZoYjYxQU1ieDNIWFBoc3pldUxhTmF1TEFKU2dUTmZBQ0Y1YXJ3U0FXUUEyUnBEV1k0VndrMU1vRmZ4Y3FFb0Z0VVlEblZZTE4zZDNlSGw1dzkvZkQ4SEJJUWlQaUlCTXBWS2hwS1FFTkUzRGJEWkRMcGZEWXJFNFZraHRRMUlHQUROdzRNQ0MzcjE3LzZSVUtpYzlqZ3M4Yk5nd0pDWW0zczhCd3BVclY5QzNiMStzWHIwYVRaczJSVXBLQ3ViUG40LzRlTjd0dnBOS2txUHA5WHI0KzkvZDZMUEpaTWFaTTJkQXlXVFF1Ym03NVBlS2pNak55MFhXeVV3MGJkSVVOQzEzZXV4T25EZ0prcUtnMWRYOG1oVVZHWkdkazRQTXJFeEVDODNhRmRudEo3eWZNVGMzZC9QYU5hdE5OaUdvV1FReUFCWU9ZQWdIYlFQeFB4ekhnV001c0N3TGxtVjVKZytCemNOcXRjQmlzY0JpTnNOc012UEFwbFFxVVZKU1lwZHJrOGxrc0ZxdG9DZ0tETU9BNHppSk5wempPQVlBczNuejVwL2ZmUFBOOXdEVWZkd1dPQ0VoQVFrSkNmZjFIVDE2OUVCOGZEeEdqQmlCdExRMEJBY0g0OU5QUDhYSEgzOHNYVUExYmVuNmRGQXltVXN3V1RDTlJndU5Sb3NNZlJyUzB0TVFGbHJlUzdwKzR5WklpbnBnYTJhN1R6ZHYvb2ZRU21UNGFnVUhQOG5lMnZXbFM1ZWNkQUExbTl4YVdZdEhHYUVrQmJsTTFBM2xxNTZpdDZiVmF1SHU3ZzVQVHkvNCtma2hPRGdZZGNQRDBhalJzeUExR2cyVVNpVVVDZ1ZvbW9adE1VRW9Jb0NpS002bW4wMXMvYkQyNnRVcnQ2U2taT1hUZkNIRng4ZmordlhyTUpsTXVIcjFLc2FNR1ZOcENGVGRscDJWL2RRT1QxZG1XcDBic3JLeW5iNldrNVB6VU5aTXEzTkRWbmJXVTN0TXNyT3preFl2V2xnSys0S0JDRzRTazRkdGl3Y2ZpcEtnWkJSSFVRN051TUtVZ1ZxdGtrRE8yOHNiTXBrTXBGYXJoVnF0aGxLcHhMMjBmcXhidDI0dHgzRXVodDJIY2dlODkrSHBwOEZ6WTFuRzZXc1BhODAwR2kwWUsvT1VucXZjeFc5bXp6cmhCTlRFZkZvNXdSWmU2WjEwbUFmbFI2ZmtBcWlwVkVwb05CcTR1Ym5CdzlNVHZuNitBQUNaVHFlVEtxSkN3Y0F1MXlhVHlUaXIxVW93RE9PMFlUYzJOamIvcmJmZVdxSFJhS1kvNFFjR2VyMGVCb01CVm9hQnNiQjYyRTIxV2gxa2NobjhmSDN2V3RxUElJQ1NFaGVYVzBWV1VnSFAzY01zcnR6cjhTS1NNMEhNVHdhdTVOM2JoaU04d0EySkFoZmxXeTIvb3lBL0h6ZXVYMFZSa2JGU0lBK3JFdzQzZDNka1pHUWtyZnBwUllXNU5UaHB5Q1ZKa3VQNzFtU2NURWJ4b0NhVGc2YkxkQTU0alFNZDc2MTUrMENoNExzTFpCNGVIaWdvS0lEUmFKU3FvV2F6V1FJM3E5VUttVXdHaG1IRXBKM1UweWJrMnF4dnZmWFdtaTFidHJ4QkVFU0xKeFhVa3BPVEFZS0VScXZqMlUyclVkdTRxTWlJZEgwRzB0UFRxMTBKZnRmT0hWaStiQ2tNaGd3RUJRVmg1YXExdUh6NUVtTDc5NVBlTXpaK0FycDI3ZVpDd2tmWkVwT0JxM24zL3ZrcmVTRG1KNE5iMHJGYWR1ZjZ0U3NvTGk2NjQzbDk0L3BWUE51NDZZbDNlcjJaN0FUVW5IcHJrSmh5YllmYzVaREw1SkRUZkRPdVFxR0FVcVdDUnNOUE0zaDY4WGsyMFdTZW5wN0l5OHREWVdHaGJROGJhSnJtcXd3T1hwc042NGVrMXJ4OSszWnpRVUhCais3dTdrOGtzT24xZW9BZzRlZGZNMkxKWW5MWm9FOURlbnA2dFlreXA2V2xZY2IwcWZoeTh0ZUlqbTZCZ2dLZUdpY2lJaEs3ZHU4REFBeU1mYi9HMW0zWjBpVjR2WHNQT3pZVGNiL216dmtHS1NuL2dLWnB0Ty9RQ1lNL0dpSU5YNmVtcGlKaDdoeWtuRTJCUXFGQXg0NmQ4R0hjNEhMRDJkVnBkOXJtaXpFdlFDNlhneUJJaElXRm9YL3NBTFJ1SGZQQXprSGlma0ROQnR5cXkrNEVhcmJnOXQvTm0xdXZYTGxzdllPM3hwVFByVkdRVVJRbmpVN0o1VHdkT0UyWGVXczZMZHc5UE9EdDdXTTNBa242K1BqQXc4TURPcDBPYXJVYUtwVUtDb1ZDeXJVNXk3YzV5N1Y1ZUhoc1psbDIyNU1JYkFaREpqUmFYYzNuWUhSdU1CZ00xZlo5Ri8rOUFCOGZIN1J1SFFPYXBpV2VPSUlnb0ZEd2Q3MjdiVW01Ry90eCtWTGs1SlJQNEUrYU9BRzFnb1B4Mis5YnNHanhNaHc5Y2hoSlNac0E4RDE1WThlTVJyMzZEYkRwOXkxSVNGaUEvZnYyNHJlTk5jZTlVTlZ0Smk1WWlNMWJ0Nk4vN0FETW5qa2RHMy9kNFBJazcyQldxM1ZYbTVnWExqangxQ3IwMWtnN2I2ME0xT1RDUEtoQ3FZUkt4Y3ZzdWJ1NXc4dlRDLzQyM2hvQWtINStmdkR5OG9LYm14dTBXaTNFOWcreFNtb0RiSndOaGJqZGlCWDRhWHlMd1dENDhZazhPSXoxZ1NTYk5Sb3RyRmJyZlgvUDZkUEo2UDVhTjh5YU9SMTZ2UjdkWCt1RzdxOTF3NG9mbDFmNU80NGVPWXcrNzc2TjlpKzNSV3ovZmpoMzlxemQ2L3YzN1VXLzkzcWphK2NPNlA5K1h4dzljbGg2YmRqUWo5RDlOVDYwSGZueGNIUi9yUnVHZmpSSUFwRzJiZHZodlg3dlE2RlF3TS9mSDgyam8zSHA0a1VBZk1YUzA4c0x2ZnYwQVUzVENBNEpRZXVZTnZqMzM1cXJUOTNOTmxVcUZWcTNqc0c0K0FsWXZHaWhIZkhpazJCRlJVVkkrbjBUeG80WlhUMGg2L1hyTzJFL0Uyb0hiQnpIV1RtT1l6aU9ZMW1XNVFoQTh0WktTb3E1VElNQnFiZHVvYUNnb0l5OVE2bUNScU9HUXFIQWd2bUpPSGp3TDZqVWFudGdDd29LZ28rUER6dzlQYUhUNmVEWS9sRkpsYlNjMXhZWUdIallZckVzZWRLQXJib0tCVlhhbHRGNDM5L1J0R2tVTmlWdHhjY2pScUZXcldCc1N0cUtUVWxiMGUvOS9sWDYvTlVyVi9ENWhIZ01IaklVVzdmdnhKdHY5Y0tva2NNbGlwdWJOMjlneXVRdjhkbG44ZGl5YlFkZWZmVjFqQjgvVGhLbFNVaGNnRTFKV3dFQWMrYk93NmFrclVoY3NKQS80VWdTdmZ2MGhZZUhwM0RpWDhQaFE0ZlFzaVZQQXVEajQ0T0V4QVZRS2xVU0VKNU9Ua2JqeGsxcWJNM3ZaWnZSTFZyQ2JMRklnUHc0bWVNUXZmaDNWbFlXQnNiMng1VXJsNnZsUmxKYVdycG0vUGp4dHh4QXplVG9yZkZqVXp5ZU1Bd0RrcVRBc2d3c0Zncy9TUkFlanN5c1RMQWNCNlZDQ1pYUTNuSHMyRkVvbFVxNHVibVgyemFwVXFrUUVCQUFiMjl2dUx1N3c3Yjlvekt2elZsZkcwRVFsblBuenEwRWNOdmxoRCsrdG1WTEV0cSsxQTZ0VzhkQW9WQ2djNWV1YU5Dd0lYYnUzQUVBOFBiMndiTGxLL0ZNbzBZZ1NSS3Z2dlk2TEdZemJ0MzZyOHJiT0hmMkxEcTJiNGQrZlh1alFjT0dlTEh0UzA3ZnQvRDcrVkNwMWVqYTdaVUg5dnVyc2syQ0lPRGw2UVZqa2ZIUk9YQUVvUDBnQ202ai93ZENLWVBxdGZwd0c5Y0doSnZDN20yalI0M0E2ZVJUQUhqRzNPOFh6QWNBZUhoNDRLZlZhOUh2L1ErcVkyOXVIenQyN0s4S1BEWGIzalVXNEhOckZFVnhITWR4RkVXQlpWbE9vVkFJdyswcWVIdDV3V2dzaEVvb0dPVGw1Y0ZzTXVIRkYxK0VYRjUrdW9RRWdLQ2dJUGo2K3NMVDB4TnVibTdRYURSUXE5VlNIc1laQTBoRnViYW9xS2lyeGNYRlB6enBGMy9YemgxUVdQaGtDdHJxOVhvRUJ0cDM1ZGV1SFFhOVBoMEFvTlZxY2ZMa0NjUjlHSXZlNy9UQysrLzFjZW9KVkdhTm5uMFdPLy9jaTUvWGIwUjZlanFXTFMzdjZLOWM4U1ArL3Zzb3BrNmREcGxNOWtCK2UxVzN5WEVjY25Kem9IMkVlZ2lWSFNOQXFPUmdjMHJndmZRMXFOOW9pTkkvcjhMOVUzdnF4Q0ZEaDJQcTExT1FtREFQMjdkdFJkLzMrQXE1ZUcxWGgrWGw1ZjJTbUppWTYrQ3BtWnpuMWppdVRNb1lrTWtvS0pSS21NMW1VQ1NQTmNYRnhTQUlRbkM2RkRoODZCQUdESWlEenMxNW83VU00S2wvQXdJQ2tKT1RVMkhyaDhWaUVXYXlySnpBOXNHeExBdUNJRmlPNHdqYlhGdWJObTFXSGo5K3ZCMUprdTFjL3MvalovNysvdENucDl2ZmZtK25JaXFLYjBVNThOZCtyRjcxRStaOE53L0JJYnhvMllzeEx6ajFhaHpCemxSYWl1M2J0NkZMbDY1UUtKVUlEQXhFKy9ZZGNQRGdBYnYzYlZqL0MzYnQzSUc1Q2ZQaDV1NytRSDczM1d6eitQRmpvT1Z5MUt0Zi80RWZIMFhyRUxqSHZ5ajliZmszRTdtZjdJUzhuamRLdGwyRzlYb3VkTU5iSW5ma0RwaVBwMEg3Z1gwTFVYaEVCRHAyNm95Vks1Wmo1cXh2NE9aMjcxTVljcmtjN2RyWlgrWTdkdXc0TUhyMDZPTlY4TllZQVQ5WXE5WEtDWkVnS0ptTVV5cVVJQWtDTjI1Y2w0WUhlRFlQRFU2ZlRzWkw3VjVHdlFZTjhPL0ZDeFVER3dDRWhJUWdLeXZMYWV1SENHd2l1REVNSXoyRUdWSVdBQ0gydFNVbko1c05Cc09TZ0lDQXB4TFlmdDJ3bnEveWNSemF2ZnovOEg3L1dBQjhtOE5Yazc1QVlXRWhta1pGNGREQkExSXU2a0diYlpHQ1kxbFlyVlpwd3FUYks2OWl5T0E0ZE9qVUNjMmFQWSsvL3RxUGMyZFQ4Tm5ZY1FCNGdSR0NBRWlLUW41K0hyWnUyU0o4ai8xc2JHQlFFSTRlT1lLNmRjT1JsNXNMWHo4LzBBb0ZmbHE1QXZuNWVYaTNkMThVRlJseDRNQmZhTktrTEorMVpYTVNOdjIyRVhNVDVqOHducnFxYnROa011RjA4aW5NbURFTmNZTStlaWlVN3FaRHQyRG90cnI4TWIyZUM3cUpQK1RQK2NGNk13K3FWK3ZCY2prYmNEZ3VPM2Y4Z1gxNzkyREsxOVB3emV4WitIcmFkTlNyZDI4QWJiRllzSE9udlpiNnRXdlh0aFlVRkRoT0Y0Z2VXem1HWElxaVFGSVV3SEZTMzZ4Y0xrZEFZQ0EwR2cxMFdoMysrZWNNL1AwRFFOTUtYTDF5QllVRmhiajQ3d1hrNUdTREpFbkk1WEwwZXZ1ZDhzQW1ocVM1dWJuSXo4K0gwV2hFY1hFeFRDYVRIYmpaZW0wTXczQWN4MEY0U05NSUFDeUJnWUVIVENiVGZKcW1oenhOb0paODZoUzJiRW5Dd2grV2dLSW9mREpxQkVKRHc5RHU1ZitIdVhPK1Fmc09IZEh6emJkdzdPK2pPT1RncFR3b2MyelFuVEY5S21aTW40b09IVHZoOHk4bUlUS3lIaVorT1JuZkwwaUVQajBkdFVORE1YUDJ0NUthVVpldTNYRDJiQXBpKzc4SGlwTGg5ZTQ5RUJsWkR6bTVPWGJiR1RWcU5HYlBtb25seTVhZ2R1M2FXTEpzQldpYXhveVpzNUdZTUJjL3Ixc0x1VnlPdGkrMWsvSTZETU5nMWt3K0RIeW5sejMzL3NwVmF4QVFVUDI5aEZYZDVyQWhINEVnZUlMRlQwYVBlYUI5YkZXeGt1Mlg0ZmJKLzBENXFKSFZleU0wYno0RDk4OWlrRC9qb04zN1VsSlM4TzJjdWZEejk0ZWJ1enRPbmpoK3o4QldiaDlLU240Y04yN2NEUUc4ekk0RkExUXdaUUNBczFnczBHaTFuTnhHdzBBdXA1R1duZ2FaVElZNmRlckN6ODhQMDJmT1JvUDZEZURqNjR1RjM4K0hWcXV6QTdWeXdPYnY3NC9zN0d6azVlVkp3Q2FPV1lrZW00M1g1aGlTMmswakVBUmgzck5uei9KT25UcjlqeUNJcUtjRjJJNGRPNG9PSFRwSnpZS3Z2UElxamgzN0crMWUvbjlJU2ZrSEV3VkZvUENJeUJyZmwwNmR1NkJUNXk3bG5vK01ySWUvRGxhdVk5cTZkVXlGRjY1Q29jQ0V6eWZhUFRmd3c3aHk3MnZSc2hWKzJiQ3gzUE1Sa1pINGJwNXp5aWlLb3JEL3dPRUhlc3lxc3MwN3JkZjltazVYRFgyU0RJZUNtWWVrUDQzTFR3UExUNWQ3MnljMnJMbE5tMGFoYWRQcXVUdzVqanZ6eHg5L09CWU1iSE5yWmltM1JoQ3NRUG5OV2ExV0RnQ1VTaVduMCtta1dkQ2lvbUpjdW5nUi92NEI2TkN4RTgva0lVd1krUGhXUGhwV0xqdGFxMWF0Y3JrMjBXTno4TnFrY0pSbFdWdlZlSWJqT0JLQXRVdVhMdnJzN093ZnZMeThGajVOWHB0dHo2dkFZeWNsbkd1eUlkWmxqNjlSRklXaUl1TWpRV2pnN2UxOVR5bVN0TFMwald2WHJqVTZBVFdUSGFqeG5Hc3NRWUFqU1pLbjlwYnpQV3JpMkpTQ3B1SHQ1WVg2OWVzTHRFUys4UER3Z0krUGo5MWt6cURCemdQQ2N2dzY3dTd1Y05iYlZrSGpMaWZTRzFYVXRPdnQ3YjNkWXJFc2ZscE8wT2JOVzJEWHpwMG9LU21CeFdMQnRxMWIwRUxvMFdyYU5BcmJ0L0Vuek9WTDFkUC9wRktwWGFod2wydnpNTmVzb20zNytmbWgyRmh4bFowTDk3aC9qNm9hdmtNMHRkbyt0MWhhV3JwNjVNaVJGMjFDVUpPRHQyWlhNQ0FJZ2lPRVpuOFpyempGeWVVeVlSYVVsbVpCK1NGM2dTWFgyeHYrL2dHU2R1bGRlV3dBWDBnUXZUWmJxbkJIcjgyMmlDQjZiU3hmQm1PRVNpbEpFQVIxNk5DaFpXM2J0bjJlSUlobVQ5S0ZNK0NEZmlBRTdqVmZYejhrSkM3QTg4MmJvMVBuTGhqMElWOHdhUFBpUzJqWDdtVUF3UEFSby9EbHhNL3g2NGIxQ0krSTRCT21UOUNkL2xHeUltTmhoYTBMNUVOYXN5SmpJYWdLV2tnQ0F3T1JucDZPekl4MHFBV2lCVHNiR2dVdU1mbWVaMGE1Y0E5Z2FQVmxoT3JValpBRzRUbU9PNzFuejU2OVR2SnF0dTBkamtVRGZuUktISnVTeXlDWEM1NGJMWTVObFEyNWUzbDZ3Yy9YcjhveWxVNVhXUzZYSXpnNDJLNklZRXRwSklhaWp1MGZUZ29KVmdDV2R1M2FwV1ptWmk3MDhmRlo5RGhlSkZvbitZOXRmK3lxOFAyOTNuNm5YRElUQVBMeWNqRno5cmR3YzNQRG5qMjdVVkpTVXFWdDNTbHN5TTdKY1FHYmd4bU5oZkR4OVhINm1vK1BON0t6SC95YUdZMkY1UWdCYksxWnMyWXdHQXpRNi9Vb0tzeTM3NVBVQWhoYkcwRHQrOWlEYk9CeWR2VmRGMW9OdEZvTmJ0Njh1ZkhISDM4c3FDZ0VoWU95TzUrVkVaVHZPQTRjeTNJY3k0SmxHVENNbFg5WUxiQmF6TENZUzJFeGw4SlVXZ3hUYVJGdVhyOXk3OEFHQUFFQkFjak56Ylh6MnB6bDJtdzlOb2RDZ3VpMVdRaUNJSDE5ZlhlV2xwYk9WU2dVSHo5dUY0bXNtdTd3cFNXbEdETjZGSy84cnRWSzdSTzJkM1JuWGRTVldXaG9iV1JtR3BDaFQ0Tlc1K2JTUERBV3dtZ3NCR08xSXJTMmN4QUlDdzJGd2ZEZzFremNKNVpoRUJaYU9URDUrZm5aMGU4ODZwYWZuNy9rcFpkZXVsU1J0MFlRaEFoc0RFRVFqTWpjSWFwTzBUUU5sVW9sZUdkbGROOWVYbDd3OVMxVG5XclFvQUVhTm14WTlXdTJzaGRyMTY1ZFlWK2JvOWZHc2l6aFVFZ29WeVZkdFdyVjB2NzkremNpU2JMOTQzU3grUG41SVYyZmNkOFhRRlN6WmxpNHFPSlIycUlpSXdJRDdrN01oU0FJTkcvZUhOZHYzRVJPVGpieWNuSlFXdnAwa2srcVZHcVFGQVVmYngrRWhvWlUrdDRXMGRHNGVmTS9aR1psMWVpYXFWUnFVREladkwyOTd3aHFqNXRacmRaOUV5ZE9QT0FBYXFVaXNBbWdacDlYRTdRTVJDVjN1VnpPeWVWbHhKRzJBT2ZoNFFGdmIyOEVCQVNnZHUyN1d6dmlUb0lqdDI3ZHd2bno1M0h0MmpXa3BxYkNZREFnSnlkSEFqeEhMVklCOUFpV1pRbVdaU21PNHlqd1dxUTB4M0hLR3pkdXRBb05EWjBMNExGU0h6bDFLaGtFUVVDajFVRmR6WGY0NGlJampJVUZBTGhxSjVwMG1jdHF5TklQSFRvME95WW01cFlBWkNYZ05VS0xZSzhQYWl1bHg5aDZhd3FGZ3BQMFFUVzgwTEdIaHdlOHZHekVXZXJXeFRQUFBJT1FrSkM3aTdMdTlJYVFrQkJKVU5reDErYlkraUhLWW5HODJVNGtXSG5uZ2lERHdzS09GeFFVSk9wMHVxbVAwMUZzMWl3SzZlbnBNQmd5VVZpUVZ5MHNIQURmdnlTVHlSQVVGSWlBZ0FEWDVlS3l4OEp1Mzc2OUtpWW1KbFVJTThYUXM5UkpDR29WdkRWcDBGMGlqUlJDVVZ1YWIxRy9RQXhGYTlXcWRkZWdWaVZnNC9NNG9VNXpiVTU2MnNSQ2dtTnZtemh1WlNFSWduSnpjL3ZaWkRMVnBXbDZ3T04wTUFNREE2dU4zZFpsTG50Y3pXZzByZzRPRGo0Ris5WU94eERVWWhPQ3NzNUMwSXBBalZkMTkwRlFVQkJDUTBQdmFSK3JwQk9uMCtrUUVoSmlSMjlreTdnckRxa0svVzEydlcyQzF5YjF0b2tMc1d2WHJpVXN5KzV4blNZdWM5bGpsVmZidjNEaHdqMXdYZ0dWUERZNHpJTUs1SkdjTGFqUkFzVzNHSTdxZEtJb0M1OVhDd2tKdWVlSkRObk5temVyam9JOFZaSFQ3bm54T2ZGMTRTRW04RmloQTU4UXdlMlZWMTVKTzNEZ3dQY2hJU0doQU1KZHA0ekxYUFpvRzhkeDEwNmNPSkgwNmFlZkZqb0pRY3VCbWlDQWJDZW5aNHNmRmVFSUwrUkNnbVZaM0EwKzJRSGIzYmg2dnI2K1RpY1JiQVNXWVVNZlRwaE1KaEFFQVVHNlQyb0JJZmhmUkxacDArWkVUazVPZ3FlbjUreXFoc1V1YzVuTEhvNnpkdTNhdFRWdnZ2bG1xb08zNWl3RXRkcTJkb2pocDhEdktCVU10RnF0WGVncFZqOGpJeVBSdUhGanFOWDNQaUZ5VjJDaVZxc1JHaHBhYm9hMGd2bFJqbVZaUWl3a2NCekhDZ1VGMjZrRTBzdkxhM054Y1hHUVNxVWE0enAzWE9heVI5T3lzN01YaDRlSG43WHgxRXB0SHdSQm1HeEJ6VEVFRlNRR3l1WFZiTUhOVjlEV0RRME52UzlRdTJ0Z0EvZ0Vla1Y4YmM3R3JNVEdYUUhjT0dFcVFjeTNrUURJVnExYUxUbHg0b1MvWEM3djV6cUZYUFlVaDNyUTYvWEl5RENBWVJnWWpZOEdRM05wYWVuUDc3NzdybTIvV3JrUWxPTTRDZFE0am1NRlJseU9aVm1PWVJnN3ZqOHhzaE1mWXBWVW9WQkFyVlpETHBmajBxVkxEeGJZQUNBOFBOenBxSldUYVFSTzZHY1RSNjNFV1ZMYkZoRGluMy8rSWZmczJiTzRmZnYyZmhSRmRYR2Q0aTU3R2tFdE9Ua1pIQWhwR3NML0VkZ3ZpOFh5NTA4clYrekt5Y214T0FFMTJ3a0RmbXlLSUZnQ1lQbDBGSy9lTGpCM2NFb2xMOFNpMFdqNW5qVjNEM2g1ZThIZlB3QzFnb01SWGpkYzB0RzRYN3VuYjZBb0NuWHIxa1Z3Y0REOC9mM2g1ZVZsVnlsVktwVzIrVGRPWkFLeFZiWVMzRlVyK0JZUWMrZk9uVk12WGJxMGtPTzRZNC96Q2JwcDB5WW9sY3FLRXhWV0swYU1HQUUvUHorNHU3c2pMaTVPVW5keTJkTnJlcjBlSEFqNEJ3UTlNbU54TE11ZVBIVHdZTkxFTHlZVU9PVFVTb1JIcVIyb1NYUkVKRmUrQ2xwK3VrRG5wb09IaDZkRVJWUTdOTFJhUU8yZWdRM2dGVzNDd3NJUUZCUUVSMjFTSnlwWG9wcXpYUXVJQTdpWm5ubm1tWlMwdExRRkhNZGRlVkpQNEhIanhpRXBLUW5yMTY5SFVsSVNkdS9laldIRGhybXU3S2ZjRElaTWFIVnVqOHorY0J4MzlkeTVjK3Y3OW5rbnd3SFViQ3VnSmp0UUUzcldTRkthQjRWY0p1Zmt0Q2gwcklCS1pUOWw0T1BqQS8rQUFJU0UxTDR2N1lWcUF6WUFDQTRPUm1ob0tBSURBeVgrdGtyQURiYjliUUovbTBRbExqeE13Y0hCQjNKeWNoSUFaRDVwSjI5UlVSSG16NStQMmJObm8yM2J0bWpidGkwV0xWcUVGU3RXSUNzcnkzVjFQOFhHTU13OWVXb1h6cC9EcUJIRHEzdDNzbTdldkxtNmErY08xMkUvMkc0SGJBUkJXRGlPczRpQ3h4ekhDUnhyRkVlUUpJcUtqTWpOelVHbXdRQUN2TmkwUnEyRzJXVENnYi8rd3BZdG0vSG5ycDN3OXZhdTlzYjMrL2I3NnRXcmg5cTFhMHZnNXVIaFlTZmhad051WWtncTlzT3h6a0pTQUNZZkg1OXQrZm41M3drTFdLUFdxbFVyVEpreUJTKy8vRExVYWpVaUlpTHd4eDkvWU83Y3VRZ09Eb2E3dXpzR0RCZ2dxUzJOR0RFQ25UdDN0dnVPN3QyN1k5Q2dRVTYvdjJmUG5tamV2RGtBSURrNUdTVWxKV2pidHEzMGVwczJiUUFBUjQ0Y2NWM2RUN0VWRmhiYzArZnFOMmlJaVY5K1ZaMjdVcXJYcHk5djA3clZlWlMxZFpUYWhKNjh0MmJYMmtFeUpFbXhITWV4NERqSVpCVE1KaE5VS2pVWEVsSWIvZ0VCU0U5UGgxcXRnVnFqUVVyS1AzamwxVmN4ZXZRWVJFUkU0dkNoUTlXK252ZmRPMFlRQkNJaUlwd3FXam1yam9vdElBQUlBRTZMQ1J6SGtSNGVIdXVOUnFOR285SEUxL1JKTlgzNmRHemV2Qmt4TVRFWU5HZ1FldlRvZ2U3ZHUrUENoUXM0Zi80ODJyVnJoNjVkdStLTk45NjQ2Ky91MmJNbmNuTnpBUUMzYjk4R1RkTjJuRnh5dVJ6ZTN0NUlUVTExWGQwdUsyZloyZG1ZK3ZWa1pHVWFRSkFrQmc4ZWdwYXRYa0JxYWlwR2pSZ09pOFVNRHc5UExGL3hVMW02NDdOUGtaYkdhNWJuNWVWQnJkRmc3YnIxQUlDclY2OGlZZTRjNUJma3c4dlRDMlBHanBORWVnQmcrYktsaTcvNGZQd3BCMUFydFFFM3ZsZ0FXSVJybGlVSXNBUkpjQVJIZ09NNFRpYVRnV1ZaenQzREhRcUZBZ1JCUUorZURyVktEWXFpb0ZhclViOUJRd1RWcW9XaUlpTU9IVHo0TXJuRXdBQUFJQUJKUkVGVTZBRWJ3STljaFllSGx5T2pGTXU4VGdia2JmdmJJSVNrNG1TQ0NHNkVWcXRkV1Z4Y3JGS3BWQ05yOHVUcDBhT0hwSTM0eGh0dllObXlaWmc2ZFNwME9oMWF0bXlKWjU5OUZ1Zk9uYnNuWUh2NzdiZWxmeGNYRnpzdExDZ1VDcGhNSnRkVjdMSnk5dk82TldqY3VESDZ2ZjhCcmwyN2hnWHpFOUN5MVFzSURnN0dMeHMyNHZMbFM1ZzZaYkxkWjZiTm1BVUF5TS9QUTl6QVdJd2NOUm9BWURhYk1YWEtWNWd5ZFRvQ0F3T3g0NC90K0g3QmZFd1NCSWJ5OC9OKytPTHo4WWVkaEo0bGQ4aXJjU3pEaUZSbGtNdHBVWndGUlVWRk1BcHN4a29WSDcxcHRGcjQrdnBpKzdhdHlNL1BSMTVlM3FNSmJBQ3ZjR1ZMSVc3YnRHdmpzZG4ydFVuZ3hwYXA2aklDMEVuZzl0WmJieTFadjM0OXJWUXFhMHpHejNiNlFxRlFTUGxEMFdpYXJoYmdVYWxVTUp2TjVaNDNtVXdQUlovU1pZKytSYmRvaVlTNWN3QVFhTkdpSldaL002ZEtuMk5aRmw5T21vaHVyN3lHRmkxYUFnQ3VYNytHMU5SYmlCL0w5OEt6SEF1Tm9GMVFXRmk0N0oxZWIrMUgrYWtDK3hEVVJrSlBGRHRtR0lhVHkrVWM3NXlBbzJtZUxEWFRZSUJHbzBWMGRBdjgvZmRSdUx0N1FLVlVnbVZaclBoeE9YcjFlaHNObjNrRzQ4ZU5mWFNCRFFEQ3dzTHN0QkVjcHhGc2lDaGg0NjF4QXZpSmt3a1FtdjFBRUFTeFpjc1dZdHEwYVV2aTQrTmxDb1VpcmlaT0hwa1RIdnFLMUtTY1BXK3hXS3EwbmVEZ1lKU1dsaUl2THc4ZUhoN1NaN096czZ2TTVlNnlwd3pZb2xzZ2NmNUNIRHQrREN0WExBZE4wL2h5OHRkMy9OelNKWXVnVkNyUnArOTdkdWRwUUVDQVhkZ0tBRWFqY2NXRStIRjdVMUwrY2V4VGN3UTFPelpjb2RtZW94VUtqcGJMWWJaWVFKRWthSVVDRkVYQjE5Y1hkZXJVaGJ1N0J3aUNRR0JRSUhSYUhSaXJGUk0rbjRqdzhIQmN2UGl2ZEMwOHNzQUdBUFhyMXkrblJlb1lqanA0YlNLOUVXeHlib3lRZ3lNSWdpQysrdXFyUEY5ZjN5VURCdzRrRlFyRndJZDVvdEUwWGM1MXZuVHBVcFU0bzZLaW9xQlNxWERnd0FHOCt1cXJBSUNEQncrQ0pFbTBhdFhLZFJXN3JKeE5tem9GMFMxYW9uMzdEbWdSM1FKdjl1d0JsbVVyN2ZjNmVQQUE5dS9iaDRXTGx0amRpQ01pSWxCUVVJQy85dS9EaTIxZnd0V3JWM0hxNUltZnpwNDl1MmZqeGcwbE5wNWFpY1BEUkJDRVdjaXAyYkhoTWl6THlTZ1paREk1U2twS09IY3ZieWlWU3VoMGJsQW8rUCtYbWtyNUp0eGF3UWdMRFVOQVlDQVVOTTN2NjRFRGFOSzA2YU1QYkFSQm9INzkraEt3T1hwc0RNUFllbXkyNEFaaEZBTkN2czN1TzRjTkc1Wk4wL1NTZnYzNjRXR0NXOHVXTFRGNzltd3NXN1lNelpzM3g2SkZpNUNlbmw3aCs5ZXRXNGZjM0Z3TUhqd1lHbzBHc2JHeEdEcDBLSFE2SFdpYVJseGNIUHIzN3c4dkx5L1hWZXl5Y3RhbnozdVlQWHNHMXExWkRaWmxNZXFUVDBHU3BGM3hJRDgvSDIvMWZBUE5ubjhlWThlTlIrSzg3MUJhV29vaGd6K1V2aWR4d1EvUTZYU1lObU1XdnZ2MkcveXc4SHZRTlAyVGg2Zm5ueHZXLzFJRSswS0JiUU91eVhFT1ZPcFhveWdRRElPU2ttS1VscFp3YXJVYW5sNWVVS2xVcUZlL1BtN2V1SUdqUnc5RHA5T2gxOXZ2SWlRNEJQWHExMGY4K004eGVmSWtXTXdXaElTRVlNelkrRWNmMk1SY1VyMTY5ZXdxcExhNU5pR3ZWcTZZQVB0S3FTMjRFUVJCRUhGeGNaa21rMm5Sd0lFRFdhVlNHZmN3VHJUWFgzOGRJMGVPeE9qUm84R3lMUHIxNjRjQkF3YWd0TlI1WjhxR0RSdHc0OFlOREI0OEdBQXdlL1pzV0sxV2RPL2VIU1JKb21mUG5wZzdkNjdyQ25hWlV3dXBYUnR6NTgxM210YjRaY05HNXpmVFgzNnQ4UHNhTkdpSWhZdVd3R2cwcnBnMWM4YWVaVXNYVndScWtxY21naHBKa2d4UVJob3BveWhPcmxTQ3BoVWMzM3dyaUxLb05YQnpkMGRrWkNUOC9Qd1FGRlFMWVhYcW9HNTRPSlJLSlo1N3JqRitXTFMwUnRmdGpwb0g5Mk1aR1JrNGQrNGNybHk1Z3RUVVZPajFlbVJuWjVmVFN4QkNWMElBUUVKZzRTVTRqaU50TkJQa0hNY3BBQ2duVEpqZ0hoOGZINnRTcVlhNFRuMCtVWHpqNW4vSXlja0J3ekFvTFhrNlI3U1VLaFVvaW9LWHB6ZkN3bXBYR3E1eEhDZXNXVGFzMXBwYk02VktCWmxNQm04dmI0U0ZWVXdSdG4vL2ZvUkhObmdnNjFSWVdMaHNRdnk0dlRiaHB6TlFzMlhzc0lpTUhXSnpQVVhKT0lIZW13YzFwYjI0c2Fkbm1jcFVhRmdZNnRkdkFGOWYzd2QyTHRRb0I1cS92Mys1NFhnbkZWTFk1Tm1rU3Fsd3dkcjJ1SW1GQlV5Wk1nVW5UNTc4WWNPR0RXYTFXbjNQclNBZE9uVEFuMy8rK2NoY21IcTlIdjcrZHpmNmJES1pjZWJNR1ZBeUdYUnU3aTc1dlNJamN2TnlrWFV5RTAyYk5JVllvWE1FdFJNblRvS2tLR2gxTmI5bVJVVkdaT2ZrSURNckU5RkNzM1pGZHJ1Ryt4a0xDZ3ArR0RwazhQNUxseTZhS3dNMWxGVkFKVDFRZ1RoV1VKb2lJSXhPU2F3ZEpDVlFmMU1VNURJWnhQbFF0VklGczhsVTQ3L3RnUUVid0l2QmlPQldXWFZVckpBS3ZXeWMxV29Wd1kyeERVdEZjTnUrZlRzMEdzM1N3c0xDVXExV094S0E4bTczYmRldVhZLzloWnl1VHdjbGs4RS9JQWd1QXpRYUxUUWFMVEwwYVVoTFQwT1lFeUxWNnpkdWdxU29CN1ptdHZ0MDgrWi9DSzFFaHErV1RadFJOVnRwZG5iMjRsWXRteDlHZWZiYmlqdzFLd2lDSVFDR0VEdzFHVVZ4TXBuZ3FZbEQ3V28xdEJvTmRIYWtrWUdvWFRzVWtaR1JDQTBMZStEbndRTmhyUTBQRDY5SVlGa0NPSnU3cVpScnMxcXQ0bXRPd1EwQWREcmRxdHpjM0dJUEQ0L2hBSHlmdGdzNU95c2JXamQzRjZJNW1GYm5ocXlzYktmQWxwT1RBOTFEV0RPdHpnMVoyVm1WQWxzTldaWmVuNzQ4K3Ztb1U3Q2YvWFQwMHV4QkRRS29FU1JIRWlSSGtRSmJCMjFER0NuTWYyb0Z2UUkrQlBWRHJWcDhYdTFoZ05vREF6WSthZG5BS2JBNWVtMmk1eWFDRzhBUENGY0NicHlucCtmR2pJeU1JbDlmMzQ4SWdvaDRXaTVlanJ2MzRlbW53WFBMejh0eCt0ckRXak9OUm92ODNKeDcraXlSbkFsaWZqSnc1ZTY2OURsd1YyK2FzbGEzL20veStUdDRhcVp5b0VZSW9FWVNBZ3V1REhJNXpTbG9rYWxEQURXSkJkY0xiam9kTE9aUzVPVm1Jek5EZzh5TU5LZnJFRlluSEc3dTdvOC9zQUZBbzBhTnlvRmJCY0FtZ1p1WWNLc0kzTVMvL2YzOS83aCsvWHBCN2RxMTQwaVNqSzUrRU9IWlRRMEdBNndNQTJOaDliQ2JhclU2eU9ReStBbTB5SGQxc2hOQVNZbUx5NjBpSzZtQTUrNWhGbGZ1K1hnbEpnTlg3dzdVV0hBbno1WGNXdDg1ZGZaMWxKLzl0Ry9wc011cGxRYzFtUUJxdElMMzFCeUxCYUxJc2RWaWdvZUhSNlhLN1VWRlJ0eTRmaFdObXpaN01vQ05JQWcwYXRTb1FxL05HWmpZZUhCT3dVMzRYbzdqT0s1T25UcUhrNU9UODU1Nzdya0JGRVYxcms1UVMwNU9CZ2dTR3EyT1p6ZXRSbTNqb2lJajB2VVpTRTlQcjNZbCtGMDdkMkQ1c3FVd0dESVFGQlNFbGF2VzR2TGxTNGp0WDhiQ1BqWitBcnAyN2VaQ3drZllpTHNFTlF2SC9IbXc4R0pTbjR5RkdUYmhwK1BzWjRrQWF1WnlPVFU3VUpPREZnU09sUXBCTGsvaldBSDFRMkJRRUl3RmVaV0NtdTA1LzBTRW9xTEo1WElKM083Z3Nkbm0yeW9DTjNId2xoTkQwNmlvcUhNYk4yNmMxYTFidDB5YXB2dFd4ejdyOVhxQUlPSG5Yek5peVdKeTJhQlBRM3A2ZXJWeFU2V2xwV0hHOUtuNGN2TFhpSTV1Z1lJQ25ob25JaUlTdTNidkF3QU1qSDIveG83MXNxVkw4SHIzSG5ac0p1Sit6WjN6RFZKUy9nRk4wMmpmb1JNR2Z6UUVGRVVCQUZKVFU1RXdkdzVTenFaQW9WQ2dZOGRPK0RCdXNQUjZUZGlkdHZsaXpBdVF5K1VnQ0JKaFlXSG9IenNBclZ2SFBKcWVLbXYrZVUzMm9WMWY1UDFXVUFtb2xmUFVCQUxZQ2tDTjcxVlRxa1FSRmwwWnFQbnhiUjFob1dISXo4dXUwZU5VVlNNZnhrYVZTaVVhTldxRThQQndCQWNIUzBMTXRseHVZck9mUXFHUXhGVmxNaGxuSThUTTJISzVDVG1DVWdBbGI3enh4dTBtVFpwOGF6UWF2eEZldnk4ekdES2gwZXBxZkYwME9qY1lESVpxKzc2TC8xNkFqNDhQV3JlT0FVM1Q4UEh4a1R4blFRcXR3cG5ZNnJBZmx5OUZUazUydWVjblRaeUFXc0hCK08zM0xWaTBlQm1PSGptTXBLUk5mUGpFc2hnN1pqVHExVytBVGI5dlFVTENBdXpmdHhlL2JmeTF4dmF6cXR0TVhMQVFtN2R1Ui8vWUFaZzljem8yL3JyaG9WeTAzajkyaDl2by8wbC9leVYwaGJKVEJBQlljNjFGMzdlK052SDNML0oreTNmSXBSVUxqN0xxcHkyb2dXQmdVLzJrS0ZrNVVBTUhaR1ptb3JpNFdNcXArZnI2SWlnd0NLR2hZYWhYdno1b1lWUktQTSthTld1R2poMDdvbjM3OWdnS3Vyc3E5SW9mbDZQM083M3dkcStlMkxwbGM1azNhckZnOXF3WjZOZjNYZlR2MXhjSER4NTQrQjVibVplaVFhTkdqWndOeFpjTFMwV3hWZGhVUzRVVDBuRkNnUlBEMG4vLy9aZlY2WFFyTXpJeTlMNit2b01JZ3JoblVXWXJZMzBneVdhTlJndGp3ZjFUdUp3K25ZeEpYMHlBMld4R2NYRXh1ci9HaDVrOTN1aUpmdS8zcjlKM0hEMXlHSWtKODZEWHB5TTBOQXlqUHZrVWpaNTlWbnA5Lzc2OVdMWnNDVElOQnZnSEJDQXViakJhdmNCZmJNT0dmb1JiLy9GQ3R5TS9IZzZaakVKd2NBZ1NGeXdFeTdKbzI3WWR1cjN5Q2hRS0JmejgvZEU4T2hxWExsNEV3RmNzUGIyODBMdFBIOUEwamVDUUVMU09hWU4vLzcxUVkrdCtOOXRVcVZSbzNUb0c4dmdKbVBqRkJIVHEzT1doTUxObytqU0djVmt5Mkp3U0laemhydjFuemxyendzMnZ6c0plVGNvWm41b1FmaEpXZ0JOQmplVWRCdEttVUNEbmFLRlFrSitmRDBaUW1xSnBHbDVlWlo1YWFCZ1BhbzZTZVhYcTFBRkZVZGk1Y3ljVUNnVmVmdmxsWkdabTJwRkdPTTY5aW4rbnBQekRuMlBMVjhCa01pRXViZ0NpbWoyUG9LQWdiTisyRmFXbHBWangweHJrNU9SZzBJZXhhTnk0aVVRdG5wNmUvbkE4TnRGME9wMVR6ODNUMHhNNm5jNFp4YmlkTUl5b24rRGd1WmtGejYwVVFMRy92LzhmLy83Nzd5U0dZZmJlNjM1V1Y2R2dTdHN5M24vdW9XblRLR3hLMm9xUFI0eENyVnJCMkpTMEZadVN0bFlaMUs1ZXVZTFBKOFJqOEpDaDJMcDlKOTU4cXhkR2pSd09RMFlHQU9EbXpSdVlNdmxMZlBaWlBMWnMyNEZYWDMwZDQ4ZVBrMFJwRWhJWFlGUFNWZ0RBbkxuenNDbHBLeElYTE9SREJKSkU3ejU5NGVIaENZQ24wamw4NkJCYXR1UkpBSHg4ZkpDUXVBQktwVW82MFU4bko2Tng0eVkxdHViM3NzM29GaTFodGxna1FIN1FaamxyZ1BiRDUva2JMMnZkLy9mdGMvTmZ1UGxWQ3V3WmI0c2RIcVVFL3pBRGhBVUV5a0NOeit4d1ZxdUZrOGw1Q3YrOHZIekk1REtvVkNyVUNhdURxR2JQdzh2YkcxcXRGcjYrZnJ5bkZoYUcrdlhxUTZ2Vk9sM1h0TFEweVZsaFdSYWVucDUyNzFtNlpCSFdyRjRGQUVoSitRY2ZEeDhLQUxoeStSS2FSa1ZCb1ZUQ3pkMGRMN3p3UDV3NHp1czhuVGx6R20zYXZDaWNUd1RrY2hxWExwVWRoMWt6cHo5Y1lBTUFkM2QzQ2R4Q1FrTHN3TzBPRk9PMllTa3JoS2JpblVvRXR4SUF4Yzg4ODh5cG4zLytlVXBwYWVseVZ4cjZ6clpsU3hMYXZ0UU9yVnZIUUtGUW9IT1hybWpRc0NGMjd0ekJoMExlUGxpMmZLVWtsZmJxYTYvRFlqYmoxcTMvcXJ5TmMyZlBvbVA3ZHVqWHR6Y2FOR3lJRjl1KzVQUjlDNytmRDVWYWphN2RYbmxndjc4cTJ5UUlBbDZlWGpEV2NCSzh3aHZneWpOUWRZNUFpU2UxT3VIWDVTdTcvVGJtbGdPb09RSmJDUUdVQW9TWmY4QktDS3BTSk1DUklEaWFwam1TSkZGU1hNd1ZGQlRBM2NNZE9xMk9uLzEwYzRPN3V6dFVLaFhjM056NG5Kb0Fhcm9LUkZob21nYkRNUEQyOWtaTVRBeFlscFg0RGtWNzU5MCsyTHQzRHhMbWZZZkpYMDdDMEdHOGZrUGQ4QWljUEhFY1JxTVJCUVVGT0hmdXJIVFR6OC9QaDFLcHhObXpLZmhzekdqUUNocjUrZmtBZ0tUZk55RThQT0xoaGFLMjV1SGhnVWFOR2xWNkVvbi9GeDRjUVJDRXhXTGhiT3NNTE10eXR2MXRZbGdLZ092ZHUzY2FnSVRzN093YlhsNWVnd0RjYzRiK3dvWHppQnNZaTJYTFZ5SWlNaEpMbHl6RzVxUk5rcGRTa1gwMzV4c2NQblFJT1RrNW1EanBTN1I1c2UwakNXeDZ2UjRSRVpGMno5V3VIUWE5bm1jeDBXcTErSFBYVGt5WjhpV01oVWE3TUtLcTF1alpaN0h6ejcxSVQwL0hGNStQeDdLbFN6Qmc0SWQyNzFtNTRrZjgvZmRSSkNRc2NNcVpWeE5XMVcxeUhJZWMzQnhvSDFJUElWZGtTYjg4Zi9lcWhzZUduTUl4aWZ4UkJEWlRCYUduQmVCRXBYYUdBTUVKd0FZS0JDZVh5NkZVcXJpOHZGeFFsQXdCL2dGQzlWTUhOemMzZUhsNVFhL1h3TlBMU3dnL0c5eXhGMDBNUnc4ZE9vU21UdWlKdEZvdEJnMzZDQ05IRE1NNzcvWkcvZnI4dkd5VEprM1JzVk1YREJzNkdPNXU3bENyMUZDcFZkTG5ObTlPUWtsSkNhWk5uNFY1MzMwTEFNakkwR056MHU5SW5QLzlvd0ZzQU9EcDZXa0hiallnVmc3WXhHT0xzaVpld21hdVZBUTZhYTROQUN1UzRubDdlMjg2Zi83OGpYcjE2dldqS09ybGU5MWZ1VnlPdi83YWo0aklTQncrVkRYTzloRWpQOEdJa1o5Z25NQmcrcWlhdjc4LzlBNVVUTGR2cHlJcWltOUZPZkRYZnF4ZTlSUG1mRGNQd1FJUDNZc3hMemk5SVRtQ25hbTBGTnUzYjBPWExsMmhVQ29SR0JpSTl1MDdsRXNBYjFqL0MzYnQzSUc1Q2ZOcnRKSHpYcmQ1L1BneDBISTU2dFd2LzhDUGo1V3g3dnRiZjM1enR4L2pVMUdKT3J0OWdZQ1FldFFBZ2lVSmdpVkFjQ1RIZ2dMSnlVQkNKcE56K2ZsNWNITjNCMk8xd21ESXdMUFBOUzZiS1BEemhWdnFMZmo2K3FGKy9mL2YzcG5IUjFYZSsvL3puR1gyeWI0TXlZU0VrSVJjdHVDbHdyVmlYUzR1VkZzcHVLK1hxcTAvL2ZXNklsYTlyYlYxQlpjcXlxMTZSYXUxZXVVVmJkVWY5ZDY2d3IwZ29sR0pDWVFrSkNRa0lTR1FaU2FabWJNOHZ6L09lVTZlT1psSlFBRkp6UE42SGVaa01wTVp6cHg1bjg5M0wwZnFLTWVJTlp2OTdMUFBBQmp6aU8yZHFCc2FHdkRBL2ZmaW50L2VpN1hQUFl2SmhVVTQyMVRLbDE1Mk9TNjl6RWhzdU9icW4yTHExQkxMeW5PNzNiam50L2RDRUFSRW8xR2twcWJpclRmZlJIK29IOWYrL0pwdjN4UzF3MjNtekprb0tTbEJRVUZCM0ZpLzFOUlV5K2ZtZHJ1WmFVclozRktiV2NyOGJvck5OQjFncHVtcVZhdnVIaGdZZVBMcnZ0ZC9tRDRESDMrOENYVjFPeERnMGpNKzNyd0pLNWJmWXYzODZDT3J2clhvMlloZkRyTzdNUUJRWGJmYVNnSEEyZWY4Q0I5KytENjJiUGtZcXFyaXZmZmV4VmZWMjNER21XY0NNQWFNRUFJSW9vamUzaDdMUjBMMStLRFBwTHc4Yk42MENZcWlvTXVNOWpxY1RyejR4eGZ3eWlzdlExRVU5UFFjd0lZTkgySDI3TmxEcHZDYmY4VWJyMWZpc2NkWEg3VStkUWY3bXRGb0ZCOXYzb1FIN3I4WFA3LzJ1cU1lT09qVEJwKzkvZkhmclQzN2IzZU1abm9PQUlpWTA2UmlBQlJDeklIR0ZMb2dpVlFrQXBVZ1VCa0NIRVNraEFCK2Z3cnk4NE9ZVnY0UGNMbmNjTHZjeU1qSVJFNU9Edkx6OHBHZWxvNjh2THhSb1FZWUVWUW1SQndPQjlMUzBvWTFhZjEwNnllNC9aZDM0cFJUVDhNamp6MkJtcStxNDRLSGlxTGdwUmYvQ0VLQVdiTm1XejVrMVF4azlQUWNRRU5EQThwS3kzRFYxZGZnbFZmWFllMExMeDQ3aW8wM1MyZk9uRGxNc1kyd1VXSXNFRUtzTnVPbWtxTmNncS9PZXJRRDBHKy8vWGI5OXR0di80K1dscGE2L1B6OGZ5R0VISGNvNzlNaHkvQjZQSGp4ank5Z3dVa240YXZxYldQR2gyWlAwSDN3Z2Z2dzRBUDM0ZlF6enNTLy9lcHVsSmFXNGRlLytTM1dQTFVhSGUzdG1GeFlpSWRXUFdKTk0xcjB3N05SWGIwTlZ5MjdBcUlvNGR6RlAwRnBhUm4yMjhxRmJyNzVWcXhhK1pCeEpaNDhHYzgrOXdJY0RnY2VmR2dWVmoveGU3ejZ5cDhoeXpKT1B1VlVYUGt2UHdWZzVDbXVmT2dCU0pLRWl5ODhMOTVNZk9sbEJBS0hQNWZ3WUYvekY5ZGZCMEtBd3NJaTNITHJiVWMxajAwSC9id2hzcmZ5bEpiNzZ0QTRsT0prVTJyV0xjRlFIelVBUmlVQmlBNVFLZ0JVcElSS2dnQlJBMlFpVWlja09OUFNoMm8vZlQ0VUZCUU01YW1aZ1lJZE83WVBpMzRtVzAxTlRVaExTOFBDaFFzQkFKOS8vdm13bVI4WFhEZzA3Q2d6TXhQTGJ4dWFmN0J4NHdZOC90Z2pxS2c0RGc4OHVNcUM1S0lmbm8yNnVqb3N1OUpRYzcrNDRjWmhDbHM2RnI5NHFhbXBtRFZybHRVT2hSQmkzZkw3M0gwVzNBQlFycXBCNTN4d2lVeFRyYUNnNE1QWFhudXQ3cHh6enJuQTVYSXRPOWozcUtncVR2dm5oZmo5WTQvZ2hodHZ4aC9XUEhYTUhjY3p6MXFFTTg5YU5PeiswdEl5ZkxSeDVEbW1KNTY0SU9rWDErbDA0cTUvKzNYY2ZkZjhiSGpmejNuei95bGhNOFNTMGxJODl2anFoSDliRkVWOHVPRi9qK3B4T3BqWEhPMTRmZFBsOXlmUGt4d0loLy8wMnI0UDM3L3JRR1VmWjNyR0VnSE45S2NwQURXZ1JnMmdFUXFkZ0ZJQ1FrVVFLaW9hSkFBeWtReW9RWWJiNHpHU2IvMURQclhzN0J3anBjUE1VL3ZlOXc2K1d0R3EyUG1hYThHQ2s3Qmd3VW5EN3Bja0NiZmN1bnpFNXg2VFlHTWZOQTgzKzVZQWNCYmNGRVdoWm9VQ0gxU2dYS1VDVTI4YUFPMzg4ODl2QmZCa2EydnJsM2w1ZVZjU1FrWnR3cTVyR3I1LzRnSTBOVFhGUlhvRVVZUitCSnQzVHF6eHVVUlJSRGdjaXN1WDFIWDlpMTI3ZGxXZThvTVRkNEJMWnhvQmFqRXlwTkpZZHc2ZEFHYVFnRUFFb1JJRXlCQXNxTGtndytYMHdPUHp3ZWZ6V1Q2MW5CeWpUS3FvTUhHZVdxTGw4WGd4TUJBK3FNY2R5U1VkeXgrMjErdkY3Tm16SVlxaXRZMENPbW9xT0JZeHRRY1ZtRzJxMjAxVEFGb3dHUHhnN2RxMVgxMXd3UVhuZVR5ZW40MzIvakl5TXZCL2YvR3Y2T2Z5M1BMemc5amQzSVJZTEFhcTY2aXRyVUZoWWRFUk8wWnV0MmVDQ29kNGJMN05ZNWJzdFhOeWN0RFJzZGNDV3lqVS8vd2ZYM2orby92dnV6ZGtVMmw4NUpQZmVLaVpaaWQwRTJqVWlId0tWQUtCVEVUcWdBZ0haTGlJRExmREEwOUpEbnhtU2dlREd0LzkxcDZta1d4TktTN0Jyc2I2RWVIbThYZ3hwYmprdXdzMndDaS9zc1BORHJrRUppcFRiL1lxQmNyNTNwaHBxcHVtcVFaQVhiWnNtYlpzMmJKbjZ1cnFQaTB1THI1RUZNVkR5c25JeTh2RHFhZjlNeTYvOUNLa3BLUmFaVXhBZkxySFY5WGI4TVRqdjhmOUR6eUVxU1ZmLzBOT2RLV2ZXRURZSE5LYmFBbmYwakVMaC9vaEpra2htVFJwRXRyYjI5SFIxcnBoZDB2cjIwdVhMRzVLb3RKNG54b0xqTVdHVkpveFJjcTRjQnMxbjRJZ1Vra1NJVWxtaHc2SERBZHJFbW5PS0dEOTFDenpNei9meUZPYlZuNUlxVFlwcWFtb09HN3V0Lzc1SDlHWkI0ZHpVVXF0K1FrdExTM282T2hBVjFjWGVucDYwTnZiaTNBNGpIQTRqRWdrd28vL0k5emdacUxyT3B1bFFBQ3dlUXFpQ1hpWlV1b0E0QURnQk9Bc0tTbHhiZG15NVVlTnUzWmRtUnM0T29NLzkzYnN3ZHhENlBEUjFOU003djM3Snpyb0RqdU9iY2pLeWtSaGdrNFRUYzNONk80KytzZHNiMGNiTWpNelVaU2cwU1NsZEU5blorZC96cGt6NTVPT2pnN0ZCclZvSW9VR0s5cEpWQmlOSVRUVEVxRnNNeXQwSUVrU0pNbWFVd0FuQnphUHh3Ty8zNCswdERSa1pHUWdOemNYK2ZuNW1ESmx5aEd0SmY1T0t6YUx3SVJnNXN5WjdBTWFwdHpzdCtZMkxHSktDS0VtM01Bck4yYWF3cGhHcndGUTYrdnIxWXlNak1vbm4zenlrd1UvT0dWeFJrYm1sVWY2aWk3TDhpRTlwN0J3TXJxNk9yRzNvdzArZjhyRXpJTlFQMEtoZm1pcW1oQnFBRkJVV0lqT3pxTjN6Tmg3MGpVdElkVEM0ZkRMYjd6eHhrZVhYWGJaZ1ZGVVdwUlRhTlpFZGxPbGFTYk1kQTVtUnNkYjJkYksyODMxVWpQYmVXZG5aeU1RQ0dEeTVNa29LU2xCZVhuNW1ENFB4b3hpNDFkRFF3UHE2K3ZSM055TTl2WjI3TnUzRC92MzcwZGZYeDlDb1JEQzRUQUdCd2N0NVdiT1hDRGNHRUJldlFtbWVoTk0wRXNBSkU2OVdRcnUvUTgyVkV3cExsNHFpdUtaUitMLzFibTNIWk1DdVlmY3RvaFNpbDFOemRpL3Z4dWFxaU1TK1c0Mm4zUzdQUkJFRVZtWldTZ3NMQmhWYlRRMzcwYlh2bjNRVk8ySUhUTzMyd05Sa2hJcU5VVlIvcnVxcXVxLzVzK2YzOElCTFJuVUVwbWQ2cERaYVFITm1FMWdBczBvWkk5WGFGNnYxNEphUmtZR3NyS3lNR25TSkJRV0ZxS2twQVJUcDA0ZDgrZkNtQVFiQUxTMHRHRG56cDBXM0RvN08zSGd3QUgwOXZhaXY3OGZBd01EL0dpL1lYRFROSTJZdzV2Wm1EOEdOMmFlc3BGL01nODNBTTVQUHExYWtKT1RlLzdoNnRRN0VBNGgxTjhIZ0I3MlJwTVQ2OWhidXE1dmJXeHNmTHUwdExUV1ZGeDJsUlpMb05LVUJDcE41elpxV2pCSm9lWXgwem44MW55Q2RDUHlhVUt0dExRVUJXWWx5VmhmMGxoOTR3VUZCVENyRG1BV3hWdTNpY3hWMDBTbGdpQVFRUkNnS0FvbGhMQ0dsL2JBZ2hVcEpZUXcwOVE2QVkrZmU5ejdKU1VsbXg1KytPRXpVbEpTemllRWZHM2Q3dmY3SVVrUzh2SW1JUkFJVEh6cngvR2lsTzVvYjIvLzY4S0ZDNnRxYTJzWnpPeSt0SmpOaDhaRHpSWWNzSVlYVTFFVXFTaUsxdmRCbG1YS2V1NHhxSG05WGd0cVJwREFiRHRVV0lpeXNySkRIdjA0QWJZanRISnpjOEdhVVBLQVN3UTF6dmZHWmlFU1JWRkFDR0VKdlpRT0RUWFZiV2toR2dEVm5HK3FtUDQzNWR4enozM3JqanZ1K1BEV1cyODlQUzB0N1h4Q1NQSEUxM2RpSlFEYXJxNnVyci9lZmZmZFc5ZXNXUlBsVE1sWUF0T1QzU3AyczVPZGk4eVh4aWF5MjFXYUxNc1cwT3hRWXdFQ2xzNVJWRlNFc3JLeVllMkV4cndwMnRUVU5PYi9FNUZJQkkyTmpWYTBkTisrZlZhME5CUUtZV0JnQUlPRGc0aEdvNVpaYWhib0VsWXp5Y3hTTG1wS2JLYXBTQ21WbUluSytkOGNBSnkzM0hKTHloVlhYTEV3SlNWbDZUZHBham14eGhYUUd2ZnYzLy9tbWpWclBuMzIyV2NqSEtDVUpFQ0xjYkN6Unp1WlVyT2luY3o4NUt3VXE5czBVMnQ4b0NBMU5SVnBhV25tM004QUNnb0tVRnhjREpmTE5lNk8vWmoxc1NVNGliQmp4dzQwTmpaaXo1NDkyTHQzcndVNEZsUmdnT1A5YnN6M3hnR09tRjE5Q2ZPL0lUNDFSSVFSWEVnRU9NZnk1Y3Y5SzFhc09EVWpJK05jUXNpTWlhLzNkOUtIVnRQWjJmbTNYLzNxVjFYUFBQTk1kQVNnMlRmRk5EdFZEbVlhYjNiYVZacXAxT0tBbGlqeXlZREdVam1LaTRzeGJkcTBNWnZPOFowQkcxdE5UVTFvYkd4RWEydXJwZDRPSERpQXZyNitwRUdGQklHRnVNZ3BVMjhNY2hqS2ZVc0t1T0xpWXNmR2pSdFB5czNOUFZzUWhCTW12dTdqZjJtYXRybWxwZVhkazA0NnFicTF0WlhCaVFlYWNoQkFZOCt6QWdNQUtCL3haQ3FORHhBa0N4S2t4RTFuRHlBWURLSzR1QmhGMzlJZzR3a2YyOWRjUlVWRmZGdWpPQi9jS0FFR2RpVms2bzFxbW1ibHZjSE1kVFBWVzF4d3dlWi9pd0Z3TkRZMk92THk4dDRGOEZGZFhkMmNvcUtpaGJJcy8zamk2ei8rVmpRYWZXdjc5dTMvTTJmT25GMGN6SGlWRmtzQU5TVUowUGpnUUZ5U0xhL1NlTFBUNFhBTTg2Y3gwNU5QNXlnb0tNRFVxVlBIVlpEZ093TTJ3QWdxOEgzYlhDNFgrSlBBRHJkSUpHSUJMaGFMV1pGVEJqY3V1RUQ0a1grc1F3aU1mQ0lWZ0dJcU9BdHdBQnhsWldWYkFIeis3cnZ2dmpwdjNyd2YrSHkrc3dFRUo1QXdwbDBmcmYzOS9lKzgvLzc3bnkxZXZIaGZFcUFsZ3BveWtrSXpMNWg4bEI0c3BzV3RrSlR5QUFBVFRrbEVRVlRtQnVpNlRuVmRoNlpwVmw4eVJWR3NCSFdtNkJ3T0I4TGhNTnh1Ti9yNys5SGIyNHZ0MjdkaisvYnRoK1VZK1AwcEVFWEJTaG1aTUVXUG90K3RycTRPemMzTmFHdHJ3OTY5ZTdGLy8vNFIvVzVtS1ZiQzRBS1gxQXZUTkdXbFdYRkJCcHVKeXB1cU1nREhKWmRjNGxxNWN1WDhuSnljMHlSSk9tMENFMk5ucWFyNmZrdEx5Ly9jZE5OTnRYLzV5MStVZ3dTYWtnQm85cUFBZzVsT2lBQ2p4bE9nZ2loQ0VrV0lyQ1JLa2lFN1pEaGtCNHlwN0taU2M3dmg4WHJoOS9tUmttcU14c3ZLeWtKdUlJQmcwQWdTSEFsL1dwakx3Wng3RE9WZ2ppdXdYWFRSUlhqMTFWZHgvZlhYWS9YcW9YNWZyYTJ0YUdwcXdnMDMzSURQUHZzTTU1NTdMZ29LQ3BMNjNiaUVYcGgrdDVHQ0MyUVV3RWxKQUNjRGtCY3RXbFN3ZHUzYStUazVPUXUvU1Q3Y3hEcWlGOGdkUFQwOUgzejAwVWRmTEY2OHVKdURVaUtnS1VtQXBpWURtdGtqa0RKZkdoRUVpS1l2VFJRTm9FbXlXUm9sT3lBN0hIQ2FVSE83WEhESDVhZ1o2UnhaMmRtbStUbjVxS2lwenIzdHlKc1VPR1p5TWNlZEtTckxNdDU0NHcwODhjUVQxaFVxR0F4Q0VBUlVWMWNETURwMUJnS0JZVDQ0ZXk1Y0xCYURLSXBRRklWbGRaTkU1cW5OQjhjNmhRaW1pU3B4SnFwa252QVcyTmF2WDE4ZkNBU2FBYnkrYmR1MjhxbFRwNTdnZHJ0UEF6QlIxZjd0d3F4dFlHRGdnNXFhbXFwNTgrYnRaajdWZ3dBYXY2bW1RdE1TbVp3TWFJSWdVRXFwbVY5cEpOcUtrZ2hKWkxXZUVtVFpZU2cxRmlSd0dwRlB0eG41OVB1TnlHZEdaZ1p5c25PUmw1ZUh5WVdGMXF6Tkk3MjhQai8yN3QwN0FiWWp0UllzV0lBTkd6Wmd5NVl0bUQ5L3ZuWC94bzBiTVdmT0hHemR1dFVxOWpVbnpjY0JMaHdPVzBHR1NDUmlBYzVVYjlRZVhOQjFuUTh3SkFveWFBQkU4NG90VVVvWjJPeEtUcDQxYTlibkFMNEM4UHoyN2R0bkZSWVdIdTl5dVU2WmdOelJnOW5nNE9CSDlmWDFYMVJVVk96aTFWVVNvS2tIQ2JPRVFPTURBN3F1VTFtV01VeWx4Wm1lVHJqNGRBNnZGN0ZvRkZzLytRUVhYM0lKTWpPemtHT21jeFFWVFlrYlJQeE5WMjF0RGQ1KzYwMVVWTXpCNldjTUw1WDJlbjBJOWZjZU01L2x1QU5iUmtZR1RqMzFWRlJXVnNhQmJkMjZkYmpnZ2d2dzZhZWZJaGdNb3JTMEZCNlBCelUxTmFpc3JFUlBUdy9jYmpmS3k4dVJuNStQd2NGQlNKS0VuVHQzWXQrK2ZkYWdFMG1TYUdabUprUlJKS0ZRQ0pGSWhJcWlDTmF4RndBUlJkRUNuSzdyZ21sMmlHYmtWRFJQZkdhbVNnbEFKNVdYbDI4RjhEbUF0VjkrK2VXMDR1TGlPUjZQNTRTSjNMakR1M1JkcndtSHd4L3YyTEdqNXZqamorZVZtYzZCYVNTZ3FSelE3T1ltaTV6VFpFQmo2UnVxcXNMaGNFQmtIVGtrMDRKZ0tzM2hoTk0xM1BUMHA2Umd6bkhISVJpY2JLUnpGQVNSazNONG81NVBQYmthalkwTkdBaUhoNDFsNU5mUkhDeituUU1iQUN4ZHVoUVBQL3d3SG56d1FRREE0T0FnMXE5Zmo1VXJWMkxGaWhWSVQwL0g3Tm16VVZkWGgrZWZmeDZYWEhJSkNnb0tVRnRiaXpmZmZCT3lMQ01ZREdMMzd0M282dXBDYVdrcFpGbEdUMDhQOXV6Wmc0R0JBYVNtcHRKWUxJWklKRUowWFlmWDY2V2FwaUVTaVVEWGRTcEpFdUdpcU1TOFdnczJNNVd2YU9BM0huVFM3Tm16dnpDVjNLdnIxNitmTkhmdTNPbHBhV2x6WkZrK0FVRHFCSjRPYWZVcWl2SnhkM2YzbDVzMmJXcFlzbVJKTjRZaWtjblVXU0tvOFIwMlZOdHpkVTZoVWI0L0drdXdGU3dmbWhIQkZBU0JPcDB1UGo4TnNzTUJnUkRzM3IwYm1xcENsQ1RNbmpVYitjRWdLQVgrMzl0dlFSQUVwS2RuNEpISEhyZXNrRit1V0k2MnRqMEFnSjZlSG5pOFh2ejVsZGNBR0oxeG52ajlvK2p0NjBWR2VnWnV1LzJYMXBBZUFIanRQMTlGWmVVNjYvRUFjUFUxUDRQRDRjQ3FsUStPbVE5NVhJSnQ4ZUxGdU82NjYxQmRYWTJaTTJkaS9mcjFtRDU5T2dvTEM2M0hlRHdldlB6eXk3ajQ0b3R4N2JYWG9xMnREY0ZnRUtGUUNKczJiVUpGUlFWeWMzUGg5L3VSbFpXRlNDUUNuOCtIZmZ2MlFkTTB1TjF1UkNJUkFLRHA2ZWtRQk1FeVVWVlZoU2lLYk5ZQ2k2SVMwelFWelBzWTRFVHppeUtacWs2MFFZNEhuYlJvMGFKZEFGb0EvTDJpb2tKKzdybm5pb3VMaTZmNWZMN1praVI5RDhCRUsxMmJrRkJWOWRPK3ZyN3F1cnE2eHF1dXVxcTFwcVpHdHlrenpXWTZKZ01hRHpQK09ick4zTFFVbXJraEdkQll6elJDQ0Z3dTF6Q1Z0cWR0RDNLeWN6Qjl4Z3lvcW9ydHRiV1kvMDhuSUQwOUhkLy8vb21JeGFKNDlaVS9ZeG8zMy9UK0IxY2FCTy90d2MrdnVRbzMzWHdyQUdQTzUzMi91d2UvdSs4QlRKbzBDZS84YlQzV1BQVWs3djdOYjYzblZzeVpNNnp6c01QaEdITWYrcmpOWTF1d1lBRmVmLzExekp3NUUrdldyY041NTUwMzdISFYxZFhvNnVwQ1pXVWx1TWxXMEhVZDJkblpjTGxjYUd4c3hNNmRPNjAwRVVWUmtKS1NBcS9YaTRFQm80ZVgzKytIcG1sVVZWVU1EZzRTVlZVaHk3S1ZhMlJHVVZrK0VqWEhhUTFUY0thWmFsVTJjSkJMQkR2cGl5KytrT2JPblZzTllEdUF0d29MQzhXWFgzNTVjbWxwYVhGcWF1bzBXWlpuRWtKS3Zrc1VvNVRXeDJLeHJ3NGNPRkMvZmZ2MjVzc3Z2M3h2YTJ1cmJsTmxpZFJaTXBWbS9ZNGxZOXYrQnU4M2l6TTNlYUJ4Q2VCeFFHTUtqUkFDdDhjOWxNWmhtcDdCWUFGMjF1MUFXMXNiU2twS2NNbGxseUVqM1loNkJnSUJSS05SdU4zdVJDWTJmblAzcjNIMk9UL0d2SG1HUzJiWHJrYTB0cmJnRG5OZ3QwNTFlRzFEVmNyS3BxR3NiTnFZUHcrazhYcUNMMTI2Rkd2WHJzVnR0OTJHdDk5K0cvZmVlKyt3eDZpcWlsdHV1UVUvL2FreDA3Szl2ZDFxT1M2S0l0NTQ0dzI4ODg0N0tDNHV4dVRKa3pGanhneFVWVlZCa2lUNGZENXJpSXZYNjdWU1EyUlpwdEZvRkU2bms1alJVMnFMb0RLd1dWUHNLYVc2ZVIrRG5BQWpSWUF2d0JkdGdCdTIzOXpjTEo1NDRvazdBTlFEZUJlQXVHclZLdC9wcDUrZWw1K2ZQOW5uODAyUlpibEVFSVJwTUhyTGplVVYxWFY5Unl3V2EranY3Mi9ldlh2M25uZmVlV2Z2blhmZU9RZ3VKMndFbUNXRFd0dytwOHppekV5Yk9xTTJvRkcra3d6ZlljWU9OTFlCZ05mampROFFlRHpJeTh2SGpPblRjYUNuQnp2cmRxQzlyUTAzM25RTEp1WGxJUzh2RHp0MzFpVThPUC94N05Od3VWeTQ3UElyclBzVVJVRWdFTURhRjE0Yzl4ZTRjUXUySlV1VzRNWWJiOFRUVHorTnNySXlUSmt5WmRoanBrK2ZqbTNidHFIRUhLWlNVbEtDWjU1NUJoczNic1JWVjEyRlRaczJZZUhDaFZpd1lJR1Y4N1o1ODJhNDNXNzQvWDVycXJYWDY3VWlwdzZIZzVrVmxHOW9xV2thQkVHZ3FxcUNVZ3BSRkNtbGxKaEJCOEtwT0ZaNFR6aklDU2JraEFTUUczSC8xbHR2SFFUUURhQ0dNMzJGeXNyS3JQTHk4dXlzckt4Y244K1hKOHZ5SkZFVWc0U1FBZ0RIU3J1SENLVzBSZE8wUGJGWXJEMFVDclYzZG5aMjFkVFVkRjk0NFlVSE1KU2RyNDhDczJRS0xlRStCelBkRGpNTURRQ2l5ZFJaSXFEWml0YXRqVVhqQWNEbjk4ZVZSdmw4UG16ZCtnbW1UU3ZIcWFlZUJyZmJqWHQvZHcrbWxaZkQ1MHZ1Y2RpNGNRTSsvT0FEL1B2VHo4WWw1WmFVbEtDdnJ3OGZmZmdCZm5EeUtXaG9hRUROVjlYNDBZL1B0UjZ6YzJjZHFxdTM0U2MvV1RvQnRtTnhCWU5CekpzM0QzZmRkUmZ1dlBQT2hJOVpzV0lGempyckxOeDk5OTI0OU5KTFVWTlRnK1hMbCtQbW0yL0dqQmt6a0pXVmhZNk9Edmo5ZmlpS2d2ZmVldytSU0FTeUxDTTlQUjM3OXh1VHozMCtuMVd4d0U1U3Q5c05WVld4Zi85K3FpZ0tmRDRmSkVraWc0T0QwRFNOTWo4R1N4Y1JCSUVWMjRNQmJnVElXWUN5ZFIwWmFlT1RoNFVsUzVZTUFOakQvVjMyR3VUUlJ4LzF6Wm8xS3lVUUNLU2twcWFtZUR5ZUZJZkRrU0pKVW9vb2lpbUNJUGdJSVQ1Q2lKY1E0alpCeUJvQXNOY0NCd1pyYkJ5bGRKQlNHcWFVaG5SZEQybWExcStxYWw4MEd1MGJHQmpvNytucDZXdHZiKy8vOHNzdlE4dVhMeC9nNEVWdElLTWp3RXkzS1N4dHRJMTEwVWdBc2ppWThTQURTNmcxcDZUeDVpYURtYTJ0VUJ6UVdOODBwOU1KU2lsU1UxTnRyYnRUY2RaWlA4Uzc3LzQzR2h2cTRYUTZjZWRkdjRMUDUwTnJheXR1dnZGZm9TZ3g5UGIyNG9Memx1QWY1ODdGN2IrOEU2c2Zmd3lSU0FUWC81K2hDWktybi9vRC9INC83bjl3SlI1NzVHSDg0ZC9Yd09QeDRHYmI0T0dxeno1RFplVzZNUSsyY1ZkNW9Lb3ExcTFiQndCWXVYSWxicnZ0TmpRME5LQzQyT2dCS1VrU1hucnBKVngwMFVVQWdELzk2VSs0Nzc3N1VGOWZqMEFnZ0t1dnZocDMzWFVYQ0NIWXNtVUxycjc2YXRUVzFzTGo4YUM4M0ppdldGVlZoV1hMbHFHMnRoWi8vL3Zmc1hqeFlxdHFZZGV1WFdodWJrWkZSUVVVUmNIT25UdWhxaXFDd1NDYmxvWHU3bTZtMUNBSUFqdXhDZWVMc3lESDloTkFMZzUybkpvVEVvRXN3VDUvbTJqalgyZWtEUWx1N2Z0eGJyQUUrL3p0U0pzZFpQWXRtVW9idHM4Rzl5U0MyR2d3WS91MnhxVUhCVFJlcGZITklIdDZlakJwVWo2OFBpLzhmbk8rcDFuQW5wc2JRSDUrL2lHTndmczJWc1BPN1RqNTVKTW53RFpXVm05dkwvYnMyV1A1Myt6MXBteDRqTDJaSlZkekNtNE1vRlc4ek14VVBzakF5clc0c2kzK2N5STIwTVZCamxJUWdBNkQzU0grbkFoc1BPQ0VCRkFiQ1hBandjME9OQ1NBMkVnS1RVK2kxdXlPL1ZFaFpuczkzbS9HWUdiZGNxYW5mWEEzdFhkdFpqQnp1ZHhJU2ZFUGF3TEpGRnAzZHpjS0poZFp6U0F6TWpPdDRuSy9QMlZNZkUrT0piQ05HMVAwaEJOT3dPYk5tOGRjRUkrL3lLU21wakx6bEhKZEhBalgzWUVRUXVKVUhJeHhnY1R3MDBFQUNFa0VKVW9oMktCSFJnSGFTSEE3Rk9WMktHQTdGTE16R2VDb0RXZ2pBVXkzQXd3Z2xCQlFnSUFRQzJRR3pBUUJBakVoSmdvUStSSW90aG1sVUVOcVRaWWhDQVFDSVZBMURkbXBxY01hUWZyOWZoQkNFQXdHb1drYWZENC9VbE5TNGZWNDBkZmJoNzdldm1QK1JNNFBIbHZOYXNZTjJEWnQyblRVWG9zZjJOemQzUjNYeURJY0RvL1VxZGRTYm9xaVdNck5WRzk4RFNyaEZCemxsQnk3cFRaVGxjRkU1OVVkcjdJSUFVa0VQUTZTbzRGTUdBVm95YUJHRWtCOE5MVkdreWkzWktCamNOSkhlZzV6OXJPWnNwenpQNUVxczhHTVFCRFk3RnFCQ3NMd21ScVNKQmxnazJUSUp0UWNacUt0MCtHQXJ1dVFKQm1abVpsVzVRQnJCQ21LSW9xTHB5TGJuRVV3c1NiQWR0UlhRVUVCY25OejBkYldablhwVFdTZXNvNGhJd0dPM3hqWVJvTWNCemhvbWtZSmt4aERRSXVEalUzaHhVR1BTejBaQmpEVHRCMEpaRWZTeDJiN21TbXBwTUNqaVo3UGRjN0FzSDJEOWdiUUNBRUJBUkVJRlFoQm5Eb3pGQm9WQlFHQ0tFSzBRMDJTSUVuTXAyWkFUWFk0NEpCbE9FeXowNmdxRUNHS0FnS0JnTld1bXpXQ2xHVVowMmZNT09TQjJSTnJBbXlIZFRrY0RoUVZGVm1BNit6c3ROcVE5L1Qwb0wrL2YwVC9XekxBY2Y0M3E0TUlEemt1aWRpQ25HbWVJbjY0UGEvY0NFeEFZUWgySU93N25neFlOcFUzcWorTnNuMDZpbUlqMXMzQlFHNFU0UEUvRytZai8zZHNUbjhBb0xwT0lRZ0NESjRSYXZZL0E3R1VtY0FGQmtUVDdEUnZlWVVtTW9YR0FjMVVhUEhCQVRjOEhzT1hwaW9LSmsrZWJMWHJadE9pb3RIb2lGQWpWVjBnVDFZQjlUMkgvMlF1U1FPOS9qalE0N0lud0RZZUY2VVVIUjBkNk96c2hLcHBoMVRVRzRsRTBOL2ZiNW1qYkV2V3lKSnRsQUk2cFpBa0NVNm5jeVRBUWRNMHZwckJncHdnaUtCVXA3cE9UY0Rwb0JTZ29LejlLZ0JDVFBDWjMzZVlJQndPS2k2Z1JFYTVqZHUzZUhWdy9RenBJU3E1K0RlZjRIZGN6aFpsK2MraUtGclBZZWFscG1rUVJXa1l6QWlmZzJiNHp5eW9qZVpIazAyejArRnd3dUYweEFITjR4bWF2RDRRN2tkcGFTbHljbklRQ0FUZzlYb1A3Z1JiWFFVMDlCeVpFNysrQitUSkt0Qm56NWdBMjNpRVdsVlZGVUFFZUgxK2VMMCs1SDZOMWxLRGc0UG83T3hFZC9jKzlKaVQ2ZnY2K3hBT2hSQU9EMkJ3Y0FDUndRZ2kwUWhpcG5vYkdCeEVKRElJVlZHTXEzcGk4elJ1WTRwTlZWVklrZ1JkcDBTbk9xaXV3d0NjTVJxVlJXVk5BQkRaNFlCdW1ycU1SeXk2TjhRbkFrN05JWWw1eVlNU0IyR0NqZ0kyQWtLU0FpNE9XUEdQNDM0bWhKZWFvSlJhZFpqcy8wZ0lNU3BFSEE3bU82TU1haGJNREQvYWNMTnpSS0N4dGtJdXVOd3V1TjBlZUwwZWVIMCtwSmpwRzJucDZRajM5Nktpb2dJZWorZVF6aXR5cEtER3dXM0NGQjJIcTZPakF5QUNjbksvV2JkUnQ5dU53c0pDQkFLNTZPcnNRdmQrTTdqUTIydVpwd01EWVF3TUdEQ0xScU53ZXp5SXhXTG83K3VGSkVsd3U5MGptcWhNdFdtYUJrVlJJRW55VUpCaENHNUVWWTIvNFhRNnpjZVkvamhSaEs0YjFsczBHaldVaWloaXlKWkZITmdTcEFReGZtQW9ka0VUWGl5U3RhTm1iYURpMVpUMVBHci92Wm5ReklQTkFsZ0NwejhJSWRBMERRNkh3d0lhTXk4QndPbHd4cWRxaUlMMUdWRks0VExyTkYxdUYwUlJ3aGVmVjFsLzErUHhvS1MwRkhtWm1YSHBHM2FGNXZmN2taS2FpdlQwZEdSbVpDSTdKeHV0dTVzT0dXb1Rhd0pzWDN0MWRuYkI2L01mdHIvbmRMb1FMQ2hBWU5Ja00vZXQyMUp3L2YzOUNJVkRHREFWM09CZ0JORm9CQTVaeHVEZ0FIdyszNGcrT0g2THhXS1FaVWRjQWI4Sk9LcUdGQkJDNFBmN1RSVkhDYVU2ZE1wTVZtb01yeUVDWkVuaS9YU2N2MjdJRmNZQnovcUhETzBOZ3g4Yk5HS0RHMVZWMVlJVnBZQ21xU0NFUWhDTWFneEZVVUFFQVpKb3ZDZFZWYURybEJyRjRrTXF6WEw2MnphQkdDYW1wcW5VNVhJTnl6ZGo0T0toRmdxRkVBcUZVRnc4RlM2M0czczdPdERXdGdlelpzMEdVMzNmTzM0ZTB0TFMwTmZYaCtwdFg4THBjR0xHekZsd213ck40L1hBNS9XWkxib05oWmFSa1luczdPekRtbHliK2Z4aUtOV2Q2RnYxdndDQWpDZCtpSUczNmhCNXB6N3BjL3pYSFEvbktVWFlkNEhSanNoNytXeElVOUxSZTgrSEIvMjZveldiUEpiVy93Y2FMdGJ3dU9MVHF3QUFBQUJKUlU1RXJrSmdnZz09Il0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUJLb25wVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJaMXRsdVc0cldYL2F4UnZDQksvT1J6eFEydjFESHI0dlRjanMxeFZ0bC83clc2WHF5SXo0c2E5RWdrY25BTUMwTFgvOS8vNnJ2LzZyLzk2U212aFNybTIwa3U1K1YvcXFZZVhQN1Q3NTMvOS9QZTUwL252K1Y4c3YvNzAvUFg3MXg4L0NIeU52dkxuQi9YOStmcThmRC8vNHhkK2Y4WXovdnI5cS8zNlNXaS8zdWpYRDNqam55dndrLzN6K3ZORjh2M3c4LzBuL1hxanZuLytVSHFyZjc3VThldU41cThYbmt2NTlXLzY0N0ordnZqMzZ5L2ZxS3pTeW54UURHSEhKOTduditubkN1TFB2eS8vMXZQZndPdWVHUG56RTl0MXZ2eStKUmJrTDdmMysrdDkvM21CL3JMSXYvOTAvWDMxLy9qVDN4WS92TCsrSC8rMmx1WFhHdDNsWC8vZ3lYLzdmdnpqWThKZnpPR1BLd3AvL2NFWTZaOXY1OWUvMzdmYTkrMmZ1M3RUWVVYTEw0czZpLzM4Zmh0ZU9GanllSDZ0OEUvbDM4eWY2L21uODArNzMzdXk1ZXVlOStDZitmUW5zQ3ZmOWFSblBlL3pQZnQ4bmMva0VsUFlvZkkxaEJuaStWNkxOZlF3by91VS9PZjVRbzA5cnRqWXl4bjJ4ZmFsR1A2NGx1ZDhiaitmTjUvR0o2K0hsNGFITjN2NGxYLzd6L1hmL2ZCLzhzLzFmZE1sZXU3MngxcHhYVUc3NWpMY09mL0xxOWlENS91MWIva3M4TzkvZm0zLy9TZjd3VlRad1h5V3VYR0Q3ejErM21MazV4KzJGYzgrUjE2WCtmcXp5YzlWMTY4M1lJbjQ3TXpGUEpFZHVNc1Q4MU9ldTRaUW40ZDFiR3pReTVXSG1NSmdCNTZjdytJaVE0cXhoS3VHRnZ4c2ZxYys1N1VoaHhMOE50akVSdVJZOEszR0RyMXNWa29aKzZtcFlVTnZqam5sbkV1dXVWMjU1N2ZFa2tvdXBkUWl5TDAxMWxSekxiWFdWbnQ5VzJ5cDVWWmFiYTMxOXZiUUl4aVllK20xdDk3Nys0YnI1WU5lM3V2bDlTL2ZHV0hFa1VZZVpkVFJSaC92eEh4bW1ubVdXV2ViZmI0cnJMaUFpVlZXWFczMTllN24yaURGVGp2dnN1dHV1Ky8zdzlhKytLVXZmK1dyWC92NjkvNnhhNzkyOVovKytSL3Mydk5yMThMWktWOVgvOWcxdm52Vit2c3RIdUVrdTJmc1dFZ1BPMTdkQVF3NnVHZDNlMUlLN3B4N2R2ZUFVK1RBUldiMzVscVBPOFlXcHYyRS9EMS83TjAvZHU0LzJyY3J0LzlvMzhML2JlY3V0KzcveDg1ZGJOMC83OXUvMkxWbG5KdG54MzY4MERXOUk5N0hhOTdBRlgxamZmeTF4QysvOGF2ajI3TnVZZElmLytjL3ZWN3ZaNy8xNFY3THUrcFRjMGlsdld4dUhKM0xHSFBpVjJsRUwyVy9pWmVNSGRMWFdueTVnOW5XTSs4OXJqQm5ITHUySis4NmRzeGZlNEc2Yit5MVY1NEplOXFUejFxMTMydnQ4WEFmTSs5M2pUVkNHbnp1RS9vTXFWNVA0NjBtNjRYMTNYdlhtUVkyc0wrWTcvNThOZTM2OExPWTU3M21IcDN0SFBVZVQ4cGpzMk9BLzhzdVlsVFhUS0xWcythcUw4UWt4MDE0ZmRmTE9uUXVNZVRCbmxiV0o0elNBZlkzei9xTlZOL3dMU3hyZmlYT1hFZTZJRFYxM2l4R2JRbUQ3a1NaM3N2M3NNRmYzU3pHSFB4eHhhL05MOXhjbnY0em9DRjE4cTZ4em9CenpxOWRiZVdTMG1LZFpyNUh1VnNQN1BzY1FIN2ZxNFUxUzF4aHJQdEwrVnNZMEZ6NFFZOTVyeHBxM3lXd0VTbVhxN1NIUGZscTV1YU1OK3U3Mll6TzY5ellmN1A1ejh5cmNUSEFRU3o5dTBjcTF6RGd4YnVVdFFhd3dxMkZ1UEVqREJPempXc1V0amx5S1hQRS9QSUpCY2QvQjUrODQ2aGN5b01oOEd2WEdNZXEvanVMK3hjL202V01XUGFZOGNPcDkyemZGZFlxSGZlT2liRE9QV01iS1V4WHBzYzJWL2JXMWo2MytYd3ZZUC9IVzJNdEliQWhSUHIyZkJlaC9RRjlGbUNDS2ZXNXVjZit4bEF4NG1lWHdYS1g4UlUrdlJSODh5UENZeWZ0VGZlYldudDVUOHg5cm5XMTh1VUppSDNIbk1xTERYNy83Z3ErZnZQaXI2VnZ4L3B4UVRHTnNIdGJvT1Axc29QOHRYd1JBTUs3dVVwUUROOEhGVWJuZm5NQVNjU3MyT1YrNzdOZWJDQWFCUmYvNW85WDc2OWVVaDR1dnRmdmlkL1ovZjAxWGVGbGkyckJXcDVaZ3VheTg0UW1ManhrOC82c0lleUdUMzIwbFRCaHRZU1R4SWNrUFF4My9QYWo1dzVzYW9SbnZQVmpLN2orWTVjZE1LNndCUmN1MWRiZkwvTGhrWGU0TmxHNmw4YU9EdWdTSzFSVCtiQmpYamxITDl0N1h2eWhGWmFraDZmbkcyc0xLUWZ1YjcvUzc3ckc4MTZwakZXZWQvSXBnR3R2QkFLd0dPTi84bHZ6UitCdk5VN3dsTC9PQXo0enB4YjN5Q3pNZmpUSGNXTlUxOE05Vlp6MFRiTTI3aDVIZTlkUkVKbTlsSTdKTGxMQTEwSmdKZitkeVY3L3VUMC9YdkhLR3c0WEpqZk5CUmNpVCtjZXBEVTN4amVCVlR4YU9scER3VEtKcnZVdEd5TnM3eTdsRzREQWdwRGxjdmZSaW12RVJZOUtHSjFWVEhvSFY5UXpWREVCcHBPUXBya1dQclR6eWcxdXdubjQvL2V5aXJFTllKS1Y0cDc1MHpEMkFUdnN5VnBQdjhyVGRMV09OUUpRZk9KdThkQ3V6WHM5aEM4Q1lreEV4TWRQR1J1OGlnUlZJbWtwc2QwRTgvUmlHdnRhL1U0NWdvK2RuY2VuUzhaUUhseXJQeDE4WUo5bTVCY3FjY1pQV3FXK1h3dDdFakluL3NSdmJhSUFjWTM3d0ZyWjVrQkVYdW5leE0vK2VOc3ZpQU95RGRCMTE0Sm9Xa0REQTBaaE1jL2dkMGRxL1Q3c0crKzVRT0ZrVkRXQ0RZSmMyMVhreGVpK0F0QmtRaFBvY0UrQy9pRCtzN0oxUGp2aTl4M0dVeDlEenE0NVhXUGk3dkVSRU1EWXhrSnkrYnpsbkFUK0dybWlNY3F6dU0zYjBBUVJnT2g4SFN3Qi9pTitHU0FyZk85SzhTVThjaHY4elNVaHFtQzY1ZGtwRzhiQUpWWi84NHRuOFRHTGxnRnJJeFcvanprbHNBRXlFYStSRm9zT1FJNmF4U2hvRlB6cS9uYUFPc0MyOW9kWUxRTkNSZFFqWG96QUhjQWlxbWphMGlJY2Y1TjF1elpPQ0laRlNFZXF3RDZVWTBsQ3B0WURqRVNRc1M4aVRTRzRWakNzTkw2dXZaOEpmTVNWaGJFdnZWZEphOThnd2Q3M093aTNrV0NlWHV3OEF5OGY3L0h0WXBDNVUyRWxaOXZJY2JBSy8wT0xzVnZZUHB6dEprQytoT1FidXBkMHB6dXZ0VUltM0w3YkN3VUVTc3o1V2JsQkhPdUhTM1BSbU1LUUpSTFNZREVmc0JIWU5SeStsd3gyOWxzdEJiemlRUnZDeHdkamZkQVVHQ0F4elVXRnhMVmFDT0ZqQTlEZ3hRZmRaSE1KSlJlNnpIQ0N6UlBlSVVoNE41ZlA0c1AxUUhaNDNzME5zVTRwRGFJbWRuQUxCaktuL3Y1Y0ZqZVc0eFV5UkdpK0hYTFlDLzZDeEFLVmNDUDhqaHNocU9abnZ3VG1zRGIybkVEVmlUTVFaZS9haVg3WUtKYXY4SXZReGc1bTk0RjVZRXozQjlvQUc0bUw3OEF3OUtqZzNVUjBkaDRFWjNYZW5OaFozcGRieFdUNzNudGRTMzVCTkFvWWQ0c0R6M2c3THZwSkEvQWFLQlp2Z0JNWDFuMjlXTW1jSGRiUmN5Q1lKU1ZXNVhkNnZmU2VSUGdJOEJ0QzlhdWR3Q2dtdUE2bEkvN2NCL1dRQmtBTVpCSytXTjVRRndxaDVBRlkxYzZQQm0vVWVQbHMzblhpVnJFTXBDQjBubzFEWDFlTUl4dm5lb05KZ2dFTHJjNmFha3ViVlhsWWw0VmxCUUlrYk1yTlRjMGRSY2VrR2dob3FJYzJjK3Q1NG9rVE13QXVRQWJlZTJFMWkxRDZRTVlDMGdDcVNlUllGOHl1bVNLQWpxVXFIaUJJY0E1NUdWRXdzWlJRcERrL3NHK3hJWVNyQ1UwQlIzWnVXZ3BzWWNMNTJEWEF2R3ZLUFVhaUF3SUtsd1dwV0hQelBmd1dWQk5ranRBd1RDT1diNzVnbm90K1FoV3Z3S25ydm5yQ205WUwyelR5UFRVQXpJUUw0REprZEFXWERncWhQa0NZWjIzZUhSd0JhTnhxMkdycU9BZzdlb1BaZ0FoNER1SnFodmRUalROcXNCY0pYVERDUkhSOTJNRHBad2dPTjJFN3c4cEJhd0l6RGxvRDRIb0I1SENMVURKNDlRYldDeFRpQW9uK3lBRHM1ZTJ3aS9LQ25FUVhqSGIzNXg0dkN4ekJVb0lJVzhyV29VV2dyMFFiL0hPTnBCV2ovMWl4VHVCaFkrK3B6NTUwR3lzRVJ0eHc1cDRqSVRkT0loaVVBRUo4QS9JUXJTZVZoWVlKUWpzNzdIMitjQ1F1R1g4a0hCQzhPemlGSEcwaEpjSXNZVk1nTHRndlVxVVNQOVVNRjBRcGp1OHVIeDZzV2duell6SG5VOEhrcitjS3h6ZFNBVHlURFlJa1RyYnVnVEFDUEJXVGZyR3JoRzllTDlIS1A2Sk0rUk5HVUpQKzZ5OTFiaVhCczdpcWdKNEMxQUhMaFFSQ1ZnU2tUSlE5WWtlNExOUVB2SWtkSm9DT2lsSTVDZEdBazlVWGhJNEVLWng4KzhHR090OFhxcGJDeTlvRFU1Q0t5cEsxV2NlRmZVd1l3cmNDb2hYOTNSTXNFSDdvVHNBRTBibThBUWd3Q01QcFViUkIwSTNGTDZRRW5JYTBzTXQzdmRBazMwTmNoS0d5cEhEYUpqWGV0MUliVStxVGk5azlaSmdmOVBnMWpIa0ZFektHRzZLRjc3SWgxd25oUjZqMXBpRGpqU1VPb05JTkZCcHJCeUdPLytCWmVzejc1YzUxRlJUbEJvbGJJT0psL0JwSngxWmVFY3YrakkxM2w0K0N3b0VZOUxLMlJFVmV5SjB2VE4wUFlWTUpGeDJUYXdneGdqT1lpeEh0UElDa0M3Y1lIKzhQNG4xTFRmNjlOMDZ2amdUbVVtaGdDNHVIdzRFbzJDVE9BZ0VENmlCVm53dUdSWS84dGdzMGpIc2hCRkFGRGZjTm1FcjJjeEM0aStCdUtxeXo2Z01uN3FBUXdaTm9qbmMxMVN2bUdIQzh1SEVSWGdrTWJzeEc1TWlHWVFKUWZrdDZBTmUzNFZITm5XY05EaUQxazFaRTQzNXZPekZwNGpBRDRjZkhzaE1Kd2hKZzVUQUZGdWY4MWdBOE1DZURVZHNHSWx5NUp4T2FJeExwMkRzd0Nza01uc0I4THZnQWZKeDlOd29Nd1ByZUlOM052UkM3TWVNWE80YkVUcFlmUHY2Q2cxd0ZpOFYxMXdUcmVnc2IyVWE0WkhNZ0Jhb2VpV3N1RmFOSlhMTThwQk5wOXRFb21NZUlDZUQ3eXJHemw2VmxLVEUvU0RaTFA1RVFnQXZrK05YamwyWkc0QWRsb0JPNFNDVlN3ZmlJSVpWL3YvNUVNelJJaVVlWEptcE9CZDRJWTh6clRSZzhrUVcrelc5WFdHRTBSVEpDeDRlSkVnQWdkd0h5ZkZONVh6RVMxUDQ5c0Z6bzMzb0VRWllsWHkwWjdER0w3M083SWpJY1RjbDZ2UUNJdjA0VWJrWm9maVdQRDFJK0V5U0JlQVBIYmZ6cFhRaUpIUzUwWU02OXcydkwvZ3k2QlBQS1Z2eGFEaGNqRVloUWliMmJnSUFDc3poUFRUZFJxYkcxeUFRV3RKbGhmL2c3M3hYSFM1QUJiS1FzMW82akNPeUFVaW96ZWJBd0VUVmZSZzM2U1lnM0tHM0pOK3ZORzdYd0JOamQ0SEtJK01BUGNha2k1SEJ0RERlais5Z3pqR0tZTU1USmlBQWcyNTM0WEZrTi9DR0doY1ZkRTB2ZUNrNms1YmNpSy8xelFkeUVseVRxSGE3MjVVR1lRREh6dVpHL29ucEI1WXJTZlJDVGZVTkdZZFkzbkhQSVpBSnlELzZjWHp3S0JvblBjU1BBRlpyUGU0WlZ3ampHcU1Yd1NpUjhOUERPeFNDenF2RDVyNWFWZ0lpWVJKTVVSRDVlOGI0cVB2aTdGNU1DNzBjb2J4Z3BrcEFyWWkraEtZcUxwZDhrNGlOMyttSHBrS3FnWnNtNWhIUGtsWGx2K0lxWnRJNDc4VDJFMjI5YnYvN3BRaEFlS1BCekpnRlNZWTZzQ094dEMzaDNBS0lEMmlqZVJsbFcrOEdMSGlSUnV2aGw2VHVjSytKVmhJWU1PVUlPUURVS1pQOExMTWhtbFhCc3lEQWh5andtbDcvK3Rqdlg5M3R6Y05FY0Rqdm1EYmloblJPT2ovYVJma2MyQ3laMUNHRGJrREZ3RnhTcUs1dlVLMTlaRi9ybUlSd1Q3THhUajJaTUZXZjJGaWIvblpNNUtCd29RSGpkM0JaczlnOXovY2RGc1ViYks2OFpLL2x1MUU4d3pPK2g2MEs4d0d6OERWblJlSzhscjBWYXhOZE1MNlJ1OTNHYjZVV1dobmpCZkZPcnBzclVaVmtVaFhHRW9mMzlxMDhtWmtpMVRYK2lMWUFhK1hKOXVLSjltOXRtSFdDRkhicXlaaURXb0xpQWZDekhDQWRZWXFjbXZCRlFEMytEdDJic0dWNEhxUWFuMEtrUTlnNFRPNG1udHlKQ1MvdzNWOElLNkxHeHdqaFlyRkFOZjhwK0lCVXllUkd1Q3RFVE1ZVkE4SlIybTBNQzg5K0IvWDUxdythZ0tPd09rZmRPNXVLV3ltaWdCQXZxTEdnSzRNNTFuOHY0L3V5b2Y3NlFqejBHOXBDeGpTaEM3TVlQd1IrMkZPV05yL0QrY1BUU0c4Q0dWbWdOSlh0L0JWWUcrMFBCaHlHaEJOdzdJVFBCQUdXcVJQL3hxbzBnYVpnWTRQN2VBRGlrQVRWeTdlZUZ0dTZ0OW9KT1FjNEZGUmc2dlByRjFNR2VYVC9FK2dQcXBnOVdodFNGZ0FPK0NJZVozSXNLeEY3UVFlTDFjendqbTNzc0NNaUNlcXZUbzVTNGh6a24yUTF2bkRvNkhWb2tocXNMd1RUQzJBTUQyUmVobnNXQU0zU28yd2Z0aHlaQUdENTM1WG41VmFRbHdtdW13bTBRTk1DRkNEM0NOY3Z1N0RNZURVeU9aajc3aHg3aDVOZ0hVdElzMkRzVmlJYktiQ29hVnAwQ01haDVqQVAzZlRGTGVCVUVsaWdIUCtTU0wvVXVsa3pRM3JmSEhKQU9VQ3g2cXR5MGN5a0FlcnNYa3lVVEdCei9HZ2F2aEdRK1p3UGxIRmluUS8vUU8vREJWL2tIY0dXY0FkblU0RzRnYXpEQjRRN3lsakJicmpkci8zZy9QMkwxa1c5bXNCQVNZNkZZUk0xMzRaS1lEZnNpQVFFdkNTZDhDanNQaTNpZjIwVElSR3M4eE96cmcvM2locUJQV0RDTFlXb01BTnZiN0JiTFNweUcxU0NRUUY1QUdDZHBHeWYvekxtaVRKLzJGYyt1SUZxL1R2bUZyTWRmT0JueHlXVkxXN0R2aVZFaWtlRHhBMVdGbTBYc2hIVUI1ekJyTk1HRTFtNlBNd2hSWUUwenc1blFIZXphRFZqZUlCTnZqQTc1N3A4VTc0UmpMUE9rM1BkNGJ1K2ZVQlJaK3ZUR2N2a2x2OG85SW5CUDZBK3BKSnZoa1ZoQkl4ZFRoQkRlZ3hCUU5xSmtJQWlHai8vNG5UdGo4TisrVkxyZkNiWHc1NFZCQlJPaUd3R0E1Yk5sdkMxdlRPQUpDaXpUY1laMG9nSUI3bU5sWlE0dnRnOGVnWVZRUVM0K2VLYk5kaURjQ2FzREJ6Uk41QkY5TitXSlZ1bUhQUlYrQk1pOFQvbU1mcWw1MUMwYmVmZEVXdyt3cm5rd0F5MEU0d2xoRHh3VGkwRFRXSDR3M0V2b1l6L1pIUlYyQjd3emVJMndOK25yWWtUUHI1UTlpcFhGL3pLTWluai9JZ01CWFd4cHRpWnY3M2pqby9HQ2FXeWZLUUsyYzBFVEw2d05JYm9udXhYREFKbU8zR2tSaHRGdWRyaWFha1ZKODVZMzhTU1pSTWRBdUZ6SVUzeHVYbStlWjE0bWFqMEJ3eWFBL2N3T3NzcW1HRUJTTG4xZ0diZUhtaE5HVVFNQkNVYkt5N2lVMFJWak5jQ1NBbmdFYXJrc21kWEFJVmozQ25TakRKSS94Y3lCVEdRek82SThCNTJSMWR5NGFHZ3VLM2RBR2tCby9XTFZva2Vxc3M5c0R1NHhWeUFQVUdXK3o4UitzZlIxa3NFcG4zT3VBRkEwejRWMGpxbVNlK0tCRWFpLzBvVjFZRmZMQitlRFBZTVd3NlFGd1FkMmpJd2JnTnMzNEZxTEhZTUlSWVR2czhka2orSFIxNEtOTmMyZFQ5Q2JIOHdvOUM5NDZOV00vK0lzc2NuckpLQkRMd0xYTkY1b25tZUJoSVpCbk9ySnpPaVJ6Z002UmhEazM5aUpjMGhvRXgxM3JIQzhXYWJXdlcrY0JUaDdNaVRaL0RyeElSSEtzRGRDZG9OWThSVkhLQUR6OXF6UVE4ZTVJQU5RL08rY2xqNEJHWUI4Ukk0OEFSVG5nckVuM0J5RmpSRGJyUGlGcStVWUFXaENUWmxkb3d3djhjak0yRjQzbDJDKytiNkp0ODFjWHM5bmZZZ29BMFlJUGdMc1FOcDNlZnp0U1RCRzBIQ2I2YUhXTEo1d3VraTdScys4QWJTSFQ0V0RaVVRwalNjWGVZZnBYVDRjV0N4Z05wdTFjNFFWRXNDNWE2eWRwUnY2Z2pvd1BtcThrbkVKTkFEZzRubkJCMU9RcWQwSW5JRFlBc20vcTU4ak1OZzBQZ2pId084OHFuampTK3dKVUI4d0NnN1hJSlZRSFVEUU9MbDJuaDBIbmF6Zm5IeGE3ZFpFK0tYaVpNRWNqd29jM3Y2a0trWDZDQkFMRmgxTXNXV3VBbFQ5OW92cDRBYmZJcFJnMjFnWDZIdmwwbk5KcllzQkgveCttVWd6NW54b0hvZ1ZMR3NTM3lzd2hneGhkU3FMRkU1MGNrc3NCWUJBMStmaU0vT1RRQ1RJRFBqSmRYc1lpRDI5dGIxY1VvUWJ3dVhQZ2NPUXk2QUZjeXRtZzdjbnVSOVdoNnlMdkJHOENSYWJNcEg5UFd3SE81ZFFCNVQ5RjVJNkttTWRreGcvQ1p1WUhhdkpIc043MExZWW82eG1zbXZmbmMwOFlLRnBIQVQ0SUxFc0ZSL1ZOdkVQcy85a2g2d0tPck9oUHpQVzRXRkRmV0R4ZURuc2s4Vk83Z1g2RXdhU1lXYStjVWxSOFh0elNXQXFYQTRYR2NyZXdkM2s3bkVRNzdtUTBPOTNrdCtzL2NWR0pwT2trZjgwMWhhVlFjU0lyaUVPeko1aXhDdzh6R01jZGM3bUJ2VlN2TkVMajlpTkMvTXAyTkVEUzlrZllRTFcwSUVtTkllcUhsNFVqS1Ric3liUXROMTRXSXRZSzM4RHFUSWJXR2NrSm1Rek9KYzZlbnE0YlYxVHpQTGlEalJYN053RVRVb0pPMExhY2htSWZGbkZrcUZHa3dPdHN4ejNTb1VQdmdqZGNBc1V5a2xEd1RBd055N1ZFMCtXTUo2REcrSnNndzF6ZjZzUXVzZk45ZCtmbXNManpHektmbHpLUWNCL1F5OWdKN0QzaWVhMmtxWUFjdUZRQWh6M3k2WW9QMDljZjMwbDNEZUxUMjdZeWd0M3ZvSk9uWTM5aEk1VWdwOEZ5dVFQNnM3N3dpTHhCNEgrZVZqb2dvL2liM3cxaUp1UEJMT0pWMWgyOEl2NVd5STdzYWl1VHJBK0JSaXl2bWF4Z1d5V1dJYlFSZ2doemw1cDVWZ1FtbVhVQXNzaGlWZlBwcG90WnlqejNtYjVaR0t5Z1FRL0FoTUFYMFNlL3M1dFRFSUhFV2NyTldHUE9XMDBIMEhyQzlmSHZXWWlEQmJ2TVhEN3pWbHVTNDkrY1JZczhKQVd2LzZtTFloNS9JemwvMzRZME9WNUVKZHJqVXpHVnEyQXlJcVFMbkZxUDVVUjZCemUzK05wZkFVNCsvV0RYOTltTy9qQlpkVnFPblVHZUVvM2tmZXd5Y1NqWUtrU3pySlkwWURkQU9sdzVLVlQreFBqblp3NlFRdVEzT2tDUWFMUms5am1BY05NMlhJbHdqWVV0djJjU1NTREF6SDhzVzRsK2RvSm5udnVGc3Q0VDZWSnd0ZWdUU1ZzWHEyY1l5OE5SZHdmRjIvUVFnZG1lQWd1bU0zOFJlakpoS1ZIVndsNys5UXBpQWJ6a0lzWUlPaEVNL3RhRXVvR1NNRTlWT3NlcDdMTmc0MElyQVhoWG00RmtySHFucXh0REJ6OUJCNmg5RUhDNEFuSVVqMTlvU1ZqR3dvQ3ZHaWV0ZDBWcnVqQjdDczMwRS9lZkZzVGdUNUNUOFl4UFlMdVVHYmM0Z1Z5SStvdi9OYjZaaXdKWjRNWVdjdzR4V2FWSWp3aG4rTndaQ2ZpbDBqYlFYWW85N3BZZmdnazVBblVKdUtCRG9WWUFIc1lhZ3Jlc0hsK0RpeVc1c2NCZUZod1NhalRHM09GRTh3UDB2YXVhOTFjRWlJZGNLNHB2cWFNTVlMQ0JzQ1gyUDNqSkFETDEwWG1BTWdSQ0RjUmdzdUhmU1dKMmdJdUxndDdJS2UzQ0pDZTEzd2p2amJVQ3A0YXFoTFp5anBaSmpZZVFOTWV1MGtFendxNGR6WjFMZXdJNFpWYmdvUllWUWJQM2RDVzVmMmdRUmNYa3p5SUF3ZHhWL1FNMU1sVVRBZ25TbmJQa3ZCc0REeGN4SWx1THVnRy9rQ05lSkxqcnlJL0lCcFp2VmNqbU0zZ2dreVRJNFZ6TnZteWJjQ0ZyS1N5SU5mUmQ2ZzFCRkVxVDBxWXg0Q2RtM2oxdkJ5dVpDR0psSGF0RHdHUmNGSHJiS1pWWE5HalFleUp2MThlRk03aWdmWExDeXVZZzU1ODJGd1FGdmtMdVRXQmcwSXBhWEovY0l0OHZ4NjBiajB6RzlPN1NkZnJ1U1hqYUU5TTcrM3FjR1Q5bm50Q0xLelZZZzhDYnhQdVVhZmxZMDByR3BpQUZSZ0VCVGdnYWk3QWo1VENWaVgyNTJZOURTWEU3SVp5NUJmaEo1NHhFbTJJMU5FMWg3RUhhd0x3akFJcCtGN3ZCdjVhTGphUHhTZEFoNmN2ck1ManVWODZ6MlJwUmV0OGVnOE1EUGE4Q0hDc0FSalNJQTR4bnRTaFpTUHpNdGV3UGxRQ1dEZ3RsVWlzTWs2VndaTlFMQytCdVJQQThwczhJd0NOUjNyaTF1ZzlvMEp5ZTJ5ZCsyWFZtalU3MENQSVFtRmhrWGd4d20xYUxPN0lQT1ZSckR1OEZESzRnckMwNWI3OGc2UzIvcUwxNzFJWm5tejZ0S3BrZWtxSENzRWlzUGJhTWlDRDd4S1Q4V29ZMEloR0dTTCtZelVSVElSVmc0dncyOWZEajZBczBORUd1MStvOUtQOVB6eVl5M3lRYzMxN3dLV2ROZVFUc29kSUlpTVIxM0YvbENvV3ZLOHlkcnZOYVlFR1hQQ0cwelpQWDk2QXAyWXIxbUJtV0JwMHlsTW1naVp1aXNRR0t3WjMrcDFqUG13Y3FJV0FGQ0JuNERTU0sxSFpQSVduYVEraDRVUHlXVTdTTVAvazBXZ2xkT0h1T3hkVUIzdC9kMGpBdkU0MkIvZlM0TURaTHhENEpscHllN0tOOFdZZ2s0aUFtdjN3S0lncjhkd0NDZllpVzUxMUV6b2VOTnBGOEo0UFNKSFEwRjVreEtQakI4NWpEQW5SQXVONTljSkRZMTVQZ1hCOWhNczg1WUhFR2VCQzJMaHFoZm1EK096N1Nxd3ZoSlQxakUrYzM3MDhXdWU5RWFkVnM0SmhHZEMrVTFoMWt0eTlLT3gxOUN0Q01WWEVwWnRpeWRZMkE0Z20xdnNBN1ZvYXQvazI0ZXpUeGh2RzNpeFh3aThKWk1OeU8yNG5YRVFmMUw1SEwrWWZlVnQ4SW5ETkNPZlFCdXVaVlNqZDAraVp3azhkMnd4QXlNTzJ6NGdmSFpIYk1FaENDdHpIWWdGWVRGdk4wbU5DMVNMMlZpVU91TElIak5yaWt3MWZTd1ppWXQwSDBDb3d1WUhBclJHd1lCRUJzbnZ5bGVhTXVaekhjbDlXZWxxSVN4eXR3MHpIbnJuLzhKWmthWUZISU9NN29zakRUSEQ1WkVSWTBmTVZEdjJOTUhJQTJZaU1oMjE4WUQ1czYyUm5XTW56dGNKMzRLMlE1R0RSSGVybzV3MmFxdnB3RVdJRkhDVDgvT0RQMzRaWEV3d2VaRGkwTENORkUydzdBZWczV0VhQUJQSUkrK2lYQjlDS3lZTktYTnlUU2NpSnVSVEVaeGp3Tll2WmlaWkViaUJabzBrL25DbXozNTk1U0ZQWFZ1QVRZcUVERU1nVzhROHp3NUQvdUFpWTRaWDVWaWdUZG1vUlQ4QWlwYjJnS3k0NFp1YUtDSE1BNml1ZkgwYjdZdkVPWWU5RnoyR2NnTUhPbGlud1RsQ0E1ZDRRYzlOWDNsMDkrUVZEQ1FEeGFyQ29oazVBN3ZLR2ozbUtsdy9IZU9EbG5rOStmZ3B5NXowVjNIQzlZZ1VNdUJXaExWa2pCQmdHZUlRTlY5QURVV1BKaVE1SCtNeFEwVVdjL3p3bmhQZGdIY1hjUlJFQ2lURnJZWGdFcVJ1SFJ2UGl4bGNObmpLaEJJZ3pzbUlRR0p3d2M1Z3N2SHpoaU1QMWdMdjRaWjM4QlRjMzkvWkk1eVJIYWx3VzZHWk1IT1d3TW5hREdPSnRsZnlZSmg2STU0bHJubTlrczFjMUhjazdYMTVpRWFISjNMNFRGMzZ4bXl4a3kzQjdBSld3VjRDUURNK3pCbzhRb0ZLS0NDSVA4cjlkejJrNm9paFpNb3RWZ0ZHdlJSbnpRcDY0NzVtd2xqYU1vaWduUGR2NHV2S2RMUUhLU3VjalVyZjIwdnFTR3kzQWxRSGpBNXBrenVaTk9HMzBIVitQZWpldVQzVHl5Sjd3MDBNRm8yQWNqVTFtLy9rS0FwdjNCZFM5S1N0VkxKZjBpQ0JmK1NsV1Z1TFZaaEN4NTNtRHFBVS9nWWRiUVc3ZWZwdE9XTlhhTTZ2MlRmNHMrU3JVQ21xUWlJRHpncFdXYlhFWnNTeUtEcDJWRzN3R1lUNlpqSzlmNWRWZGhXTnR3Y1pNMFNLb2JuaHZEQjRBd3BGRHZONUgvNEdlSSt6RlNVOTBYV2dnVFNwSGVBa2g1QnQwNWgxZG9tcWxGdHdVaUVQM1lhSHFqVlF2MHlMRm5wVXZlb1pyd2hodisxREI4T3dNc0M1N2l4RHEzMnVsZGl0NGJKRm9LVEZteThTSU9VMnllT3BjTFJ4SjFveXFXWkRWcWtaVzYzM01vaXJkY09CczBjQmp3a09yVDUvdERueUc5U29RalhoSmFWKzJXZThDbUZzM3RYQmJWMmR4aHBXUGVMRjVTbk1ZMVZESGRxTk1zYUY5SjZRSkVoZVhiTmpSU2JobU9OdFU3cko1c0RyaTQvUWtaWGxZaGZoQTVRSDl3M3dWb3ZTekZTRjhDdmxxUW9kWGpNczZsVFpPcTQ4eDFDby9VTTZLR3FUd3ViL05sWE9EeTJhZ1JCaHY1aTNSL2phTlFGYk9yNWQySFVqcjFzVDA5L0VNL3hSWG5hUWpNUkQrMVFqZ1hIQUxudS9Cc09SdHVCRHJWNnltenljZmNwZEwveURHNFpWSmJjL1ZFQ3A5TzI0MlpRRmc1SWRkc1I2TU9JZUVZWWt3NkJpeXJvUXZoSk1ydWp5d3hnQzJ4NlpGYVpVczlrVitjdUdiV0JIYjl5YlB1b3E4VzhlNzdaUkJFY0pFVk9vQ0FKZDAzZDlKOUFLRUhsd1BQMVZGQ0tTK1pnSmhhVUhMdDNqNHNXMXYyd0JSb0pIWVA0dUJ1WG0rL3F6TEUxbDNpazBCdkRwbzEwek5RRFJ2NnljYVBOYVR3R0xoSGdTWVNNYS9DRE5vMlhyVmNZWDNnbmRkRFo1UElNU0lYdXZoZXo1SDB1aG5xSENzeXp3dkp2d04zclBld1NLZjIxUkVWa2Zla0g2Qy8zb0F1d3N6MmdWQ1lTOEVpd3JxWUFMWkpQTzR0MWsyY0JNMWlId0hZUzFYOXpUMTIxQlkxbVkvSGtTdEZ5ZStibXpodGxwMnZlVldiNGIyZVVMd0pRdFE5b3NVakI5ZUNHVUtjQUNiSDlnUWM0YW5JTW5jYUpTbFhBdDIrTHpRR21FeVd2RUhrUFlPVnlFU1k0OUpOZnhwQnpBVzVUQjZoTHZDVVY4RW5Ha3NwR1NEUkp5NEQ3OUZCSlU1VWVJc3R2bWJFdUFlamIydnB1cE5NbHFUWEMxM3h6cWdVNFFGbHZRSjFkT1N1Uy9MSkluRm1FVWxESUFVY0h2VFczVnd6N24zV2xnc2tOZ2lENklmRWV5OVR4VXpxcXRZM3lZdmhBWmNpTitmYmt3cmVURW44UUV3ZUhzd28zTWJnTGNGbWhtaVRnUkFzWUJuQTE1azlBRmZYR253WlZsV2JVa1o4ZnRVOHlLNENXa0txU2V0VTNlQUlJSFFzakFUMVEySjhLZ2pEZlJNaDUyNzUyd3lDQWpQUHRYMGxpVGVOeG9kYWRWM3R0aWhEbzNOSXVtMGpESzVTbmVGSlZ1ODJ0OHlUZGQvbm1yNnQ1a21JREtuQytQSXA0cCszaDdZV2M1YTJvMC9QMmh1di9IYWoveC8vM3I5SnkvRVFMK210QTY3Ym9zM1FkeDQ5aGVzY3VObWV5L3VENldQQ2xEMGdSSTVxcTRKWmNHTXdla0hHcXZVbzFaUHFScEVRK2gzajFIdnRxZnM1ME5Dd0p5elo5K1F6V2w1L3BRMDIrRlFvUmtWL1BNd2JzM1h1a0VMT09wOWloeU4xN0NRNUZudWE4ZldaU21lYUZ0dEFTbFRrWVlyUlE4MUtzSWh2eFdxQVNFQWcxQmRIZ2lpa3BEV3VHRERYd2xoZnJ1bmkvaGI5eWxRdEdUV2c3bnlVMWFSMEt3Wk5nMHJUczAybXZzaFVCREZUTzVhOEUrNEdxajV0TzI3YVZmZjJnb3N0N0hwUzRLMVFaNkE1eHhiaDhwQ1BzeC9WR0xQVDBaNWVraHlqcmI1VUpRbVNpYy9Wd2Fsckx0NnJGSURBUDVoUE5qVUwvT0JtbWxBZnRXQU5KLzhWd0h4cE92ZkNBaDhiMkhmNEF1SVpHRkVCbER1Y3p4dWt5QStyRUo4Z2tTbVRValJ4WTVpNXg1OTI3a1FaQ1d0ZXlqWElFVUd6bXJZR3paL2VmQitFMnFJdy8zZTdHdTBIK1d6eWFMZTE0Wnp4ZUdoMnB1aDV6Z3M0ZDNERDVzN29oMWdGamExSWlHQzBzTDR0Z2JJVXNJVUlWaUp1d2R3N2N5MHpoRG1tS3hsSnd4b1JlalZJeElNVHkva2lJVjh2bUw4QWs2Z1Z3YUZkSCtJWmhEcjUvU1hYY3ZhRHNETGlvSTc5b0ZIR1p0Wkh5dHhOaHdFaklKQzh0YmJWdU8xTEgzOGlvTUtDT0xwTmFWKzNlZDArZzc0UXJUTzlBVW91V1VUR1BhQ1RJdE5pOGVHcTRHSDJLYmNGUEhvWWVoTGtMREpHMVZhTDh1OHh2c2huVHo1Tm1jYTMzZGFTNVROaXNyZ3A4MUxyTU93MkMxNlY0UUxuRGQ1L3RlbkRSbHBYajhWNTZsbXk3clk3aDFnQ2NOT0VINFgvNFFVUGZPd0phOE05dmphSE9SWlNOVk83WlBPL0hoZC9JZHR2S3NubnVGV0FWYjd2NExudERKY1hCbXc5dWhWQ1JjOHJiZlhnTUF5OGVVTXNGdXFrUE1GdFZYekFyQ3NkN0UwSXdSNzFCSVh4TW9qUVNlL3h0dmk0ekRMNTYwUWlJNXJOdTBoeGc5OXdFYU5xMmNDdWNLNW40NkIvbXBBbzJXUEttN2RLVTU3NWxGQkg0VC9GVmMyRnUwcGVid0pvcWVXRlpwRDdFZXRRQnJTWTQzeDZmK0ltQ0NLRnA1dlRZMG81WGtYdkxvcHFnRHp6MnBLWWpNcVMxVUgyTXVQaExwdm5Qd290OUh3b3Bvd0R1TGFPWjE0QlNDMkZLS0JheXhnRFM0TUg4TStKV0ZRb0tkQjV1QkhaWjV5U21KOFptTThYbUxGWUx4c09wb2p0UEhlZk1jUURrTGNMZzlBY1h1bUltU28yYzVYU3oybmFZRmxVU01CQmFPVFFXZXIwRUdLMFdYbnFYK2IrOTVvd3pzRTlia2xKRE1haDh4YzR5YlhTZ1JsN2czZWJEa2FabFRhNXc1UHUwN1pPS1Q2ZDV2d1hhYU5NRDNDT1lyZlBqVStQZFNmdkZIeFhNUVNHc25wdGxMSFhNMnJYbjR0bkVSNm9HbWU2bkV4R3RPYVlEU054VmJ2dW9uWFlOd2dTQUl5MTJONVZMUmFQeE4xWUd4UUxTd3J2S2I0UFFjMXRJMTRUcWZrNzJBR0xtOURIMjZDcVZpWTVwbkNsYy9Gd3NwdjAwZUJOVWZjTi9qelkrRHhYSkxiUW1UWTl4VFBlZGZja0duclR0R1pZRHgwejJrQ2w2bWRuUTZQTU50ZFQ0S25tT0Y1ZjUxTS9TWEQ4NTNXUWZINUI1MFBOanNMNVBwVGZ1Y0h0WC95T3ovWm5aUGJzVFRuait6Tzd4d09RZWVQMUk3aUQ2ZVZldUlVaXhWNWJabi9VTGpJN1owbHFGOExsbUVaaWROdForWXRzd2tTU01XN1p3TEVQSkhoUXVoN0JJQTJ0d1NBblFzbXczTUZ5bTBraVd6VEdzQkdQTjNGTWwzN2tpcnhMUk1JOGJUYVBXMGNGNVFMWHFYWVJ6Qit0cC9jTXRENTN0WTZ2VGF2SXBKWlB4UW9Rb1lyZ0NsN09wV0c0aUtBcmEwQzhkZDBaVTk5aUYwNHQ1b1Vyd2hXTHRoc0FEWVFFb3FkTFEyWmMwL3pSVnRUV3F6YThPQXBZTG9RZGhRdUpOYWdnZ3lHbzRTSWlKNmpIV21CVVBQVXN5VEJSQ1FoWkVHMVY4UkQ4ZnJjVDgrL2ZUTDFnc21pWXZDM2srTWlpbVdQZGowSUZWQ3Q5YTBiMzM4TGdzUHVyV0hSSENyVkUrL2JPSEFUaXI4WGNkeE5UcktpcUlhQVp4ZTQ5bGRxQnBHNWVKajFNbjlJckd1djlTUGRjb0EycmZDeVJXVW9YYjZSRzZMR1BsTFA4MGFCNlZ0RGxpd3YrT2J0TVJxK3ZPUkNhT0ZUSXptOVpYNktyTWRhb0tFMjFCR2hRcjdRclVSaU9EaExFazl1R0NRWWQ3WVJGQ1RCWWZrUUMvUTlzN01TaUFWOThWYTRHTGFFVVd6YnFFdTkyR0hvVTdjWUhDSCtKcWpFQXFxRVpweVl6NUFzKzJud2VqUGFiM0RLUWlKWVJ6MHhQdVZVYnJGclg3YWREU25XTFVmRk5ZajJwZHNsQUpzd2hyTVJIbXMwZWN5Sy9MRDVTUzM5MnBEbmxYUkZ0MzloazhtU0htU01LUU03Wksxb2JUYnAzZ2RKOC8zSFY2ejZCcDBoTC9qZUhaNW9EY0c4TDNZY2k5ejM5NHkxSVQ1clE3Rnd0aU9DV1V5VEpKV0wrQ3lOZUg0VDRtQ2JTRHQwZUthdjhXYW9JL2ozcDBES0pzak1aU1E0aGIyK21DcEFzQ3d6Nm05VloyNURWSnZXWFpzVnJlRXpiTVVQTG5EWjE3MzZHQ1lJaHF6TlhtWVlMM3paeXRMa29ZS3RGWHFTTGMzRUNBREhtbHhya2pDM3VMbEpGcnVzWlU5TExCa1Z1b3NGQjdqU3lXNkNqZlp6ZG9oVndlL3RCT3I3SHRhd294SWVLN1pDTG1ZUGlPNFhxMk11MUtSSzlqaUdUY1BDaDBtZmFvYlpUblhMMTZFTnhmUTkvQW9EWVhmaE5YZzBHL1ZZOGRpdTAvcVMyVHY3cDlFcVdCQzNaWGRWdUFmRXhXS3RHTjdxK1pMdWE5ZWJkUytJYk1pa1djcWtwb1dON09VcGFEU2hTNHo3cWZnYjBOT0QyS1BHTzNRcDQyTjNwb1k5MmRGcENqUUNzTW1aUzhEK3dQdC91aVRadTA2MFlDOVllVnVINFBPKzJ0QkRsQVBXUTdlbm9FTzNoaVg3RzU1cmRGSDFFMWI3WlFVYzNnV3U0b2dmOE5YdHRRbjJDT0duWUljamE5Z1JaUHV3OVJWN3dGQWtsaWVLejljR2VSaWgzYXZJYUhTMDRhaENNaGJhTjMwZVM4Y0JWVHA1TEh2T2lCZ0lMV0xHd0JwcXEvQ2NpWTl3a1o4V2Y5bVhoN01EYjhxTGhCb0haanhWdEQwWkFuamJCbzBDWnhzQXhtRTVDbFNIQmJ1ZisvVG9SR000bHAxaHVCcU44MEZLdHVFQURkUis4bytMcUlxb1FGbmNsa3gzeFY1MlJzckNQdGlqVTZac1VlNVQ5bVVoWlRSeGl5blhFK3kzOHJ6MjArS0VXME5qMlZqQ1l2WThzdjM1TDhOaFdaK0NhNlhMR2trTERnUEIxSnplYlNWMGhSdHZEekdzRWJUdlBpZVBGay9ONHVuUnQrM0pVc3N4d3k0MiswQkdvY292c1k4b0JMQ2RzL0liem1FbnlOTDJ1RWVXMDhraGhWVTNFZnR1QUFUL3RrZXZ5dUVRd2QweXh1SEJJdllSN3R3cUJNQ1QrZmdrRzNyczVnLzhQeEZZSFAwd2pWZVlTekxwOVVYQUF1amo5M0R5QzVyT2o5d0FTRlA3d0M5aVJNSTR0K1ZYSFhPMzhPSjk3alFWaXZLd2MrQ0RMVGxPQVdNMHk5SFdoU0xISmducG5wdDlOdDIyRXU3WEkyZy8yS0pwMnhVZ0pYYXFDcVNQUjdwMk9DZG9LVktqZ2FYaHVleUd4NWt4bnVlcmc3ajN2ZCtwb3cwVFViQjRqeVNCSk9TalpaK2JBTHZNUFVIb2dLSjVpdlB4NzRid2UvTnlIbGg3ZmlaNWdLckE2WUF3blRhZGFwVTJ2NFZmUHhqdVJKVEEzKzBwT3QyMzdOeHA0QnJqOGlJZEpXRWRRbjZJWWc0bXdSNzV0SURXQTY3aStvemNJTnhJN0NKWElBbTBzdkJVb1RtOEFLTzZUbFVRSC9DNlN0MzBwYk5pR2l5RGhaWC9lbFpoSlRHTHg0SUU1eDZ3VTU1VzVSdjVaK21hSnlLWGZUQUJMT3RXY01HUzBaM29Qa1NneFJpd1RsUTNEREU2MWFNTjk2aDZoQVBnajJkcFFEWTFRZGpDRlp1Tlk4bDQ1a2duR2FDREpyVGNSd1ZhVDY0UjQ4Y2tyU3o3ODEvazNHQXpwdkxXQ3dJOVpSdFFaRHpnQmtBZ3I3WVhZNk5Xd1V2bU16cEcxcCtUMVEvTkE3SEhSb0RhUkpMR25nV0gzL0ZEYTN1SkhzUktMVEJDbjVOZHNzOFAzcXpibmd5TDRJSVZBWVh3THNPeHB3bWVPZzBjL2J2K2pJNVFTR1RKemJKTUEycXlOQUR1OUowZ2w4NVFnNXV0dWdXMmZXYUFDRld2UndIOVVoUjhBV0Z6R3IvNkdnUmRDOW1pWjMyWWRTSzhZVURJVTNQRkpwV3dRYnVCVG5FeGZ0UTJUbUJmOXNPcU9CcmtDTU0vcmFPSlJyUEdPSnBGMWcrMDNlSmVHRlN4emhJejhLd2V2NnhIa1RsS0pVbGtVZlZuSjRkNTNna3p0MTdIQXp4RXNIMlF4VjVjYXdxM0tOSWVSOGw0b0FKRkErZ2ZNTHUrWjRvSTRHTEhiTFJwMXJpWVBWRzZrNDVzaWYrZmNiSHg0Mlh6cjRITlFtVHM4YnNpVUptc2wrSDZvWWpkZFBTUmNwWWQzd0xuUG9UY1psSkxtOTMvWllWcnFuek95MVhhWWJiamhiREcrc1luZ09wSm5uK3JpdGYzVEJNcnNJM0hEbm1FWUJxblpVaUNONUVoajdLbndLQjdobXBlcktBelpqN0xXdUFjeDVCZW0wbXNqMEFXbFFwVzIyR1Rta0l5VFp0bFRwRTBETnVLWG10UFUzTmtJV3lneVZOMW8zcWEwN0lDZ0t0c1o1NE9RSUVrS0Zicm1LdDBsazB3ako0cFFoRm90VDIrWGl6RytPeGJyUXRVWURYc3JWbXdobURiTzl1MWdhVnFqU25mWEJHR1V4M1kwckZSOEc4NUVNVlZUUkN0YVNyeWpPcXhoT05NQWJxamZjb2Y5TDNaUmJPa3lZMUxnL1RCcVc3TGZ4OWwxeW5ZdTYwT09ydG05U3Fhbkh1MWRyVlZtMktSWG9udklUdG1iNmNmRkpiU05yR0lxM2pYVDY2d251RWhwcER1ZFlId2Q3WUI5a1c5dHBvSk85dTVRc1BYZUw2dUJJSTlJSW9lak55aEFNc1VFT3diRnNIVzN2ZEpaZUVpUDZNVnVHdFVpQVhNZHpJbkFtZHA0NGRheDcvWFAveXI4b2ZyZjF6L0FINWFPR1FaTzNiTnhSSWRINXVYblJBVFBVaTlaVFhiaW1yekRjc1RkL1RkQWhKcXNsRVhNL0ZrRG5jaGRqdkt4c2s1WVo1RTAvMWM1L1RhT3N6dVNKTFFHc1E3R3kvNTNHM2xhbkR3VGJXSEFsY2ZpdTlSRnBiWmk1MHQzU2lCV0E1WHNFbGFpWlEvSEx5YUVpY1FJL0JPU01iVmI0OVJrdFZRTnNlY21UNUlaTStKYW0rWUp5TFdaTmlGZ1dCaXUzNGQ0N0pjblRBU1RkM09CVlhEVnp4Q2hwSlZodzBzUHFObkM4blBJRkQ5K0g1c25yTjdGU1QyWW9aVk90Z3pyM0pZeHkwbGRCcEI5OERaUVRoSHZZUDFFVjNMZFJNWitLa2R5ZG1FU0xtS3N6WGdudWd4akRvSGxGK0hlRUdRdWhNdWNMc1Z6L1REMTBXcVQ3SlBNSHVBd0d1czVqd2RpUytXalVxcjR5SGFGUFNEMVJCMjRYeTFJZ2tzY0pxMlh6dThJSnlZK2swLzFjbC8wcDZSY2VRNjJBVkx6d0YreTd5SmNud2lXOUJ0V1B5UURPcStBQ0V5dFczOTFqUUxqWm1Bdml4aWtsOU5XN1pzSDBDdVY4ZC9uZUZVTDFqK1RSdTkyTndQN28wOW1SMDdkYmIzWjR0MlJCU2pNNHZWWmMrWlJRRGxSZnpOY2RtUkJiV3hsZk8wUXJXZndYTklXZDRndnV4Y0VqRyszRVU5SkoxQzJ1enB0SEpLUWhTVkNNM2hkNkROdUtYWFp1ZkFBVnN1QUJUZTN4NU9JZ25zZGxxeGx4emdZRjFCMWJXSnhPYVZJYlUyQUYxbDhPbGNtMlVhSlhKOWRiUC83SDdDMEx1cEM5TU5UN2NzaE5XcDlzODlGZzRvS3IvS2ZnQ29oUGlyRVhtYkxkNG11clZpR3llZGFUbzlSYkpQZmZ3YTdtSDdEUEFNUzdGRVhyRTB6c2dSMU5NNE0xbGd5cmVqUkNwNFI2Z3dHV0hWeHZUOHVoTFdxaTJINkJ0SDNqaUpZbHJuaVpzY29wZ3l3WUtZTTYvMzdyemFnUWhPYXVHdXNQZXE4czltdys2MVNpVW8xUVFkdDN2ZW5HTWh5R0tVNFpFbWhBZmsrM0s0Ymt2ZExJalowYWJLOTV5THoyN3dOWXNMKy9QWURrRkRPUE8wOGxTZ2NrZlZSWWQ1UnV2ZFVLU1hjNGxRbEl1QWczaUFONXhDY1NzK1grZ0FTaGpMNmw0SktBcGZmNVRYd1lLakttM3kzRjloTmVQRk84Tzc3R3gweW9WRE5NdkhoVUFBOFBYRng4RW5wMk9BeW50UzhDd2lhMmRGcnlQdkhOWEczMUFUNE5GVzRrRHpsN3lPRURYVWsrYWtBdTV6NmhFOU1Oc3F5WTI2c3lpMXY5MGpWL3piN2hkRTJrM3NQKzJ1TmRtejIyNHo1T0tNS1FHUDZpMFFLa1E0TzBLU3M4S1NVeXpEWitIRU16ZEUxYXBTL2VWYWV6bXZBQ09Id3J5WkMyNFFFSEFBMTEyVzZlSmRrSEE3V2VQNEdYbGtTWHl3NnJiYUFFdVlRenNML2s0SkdTdHN4elFndm14UHNGdDYyV0J1M1M1MFZjaXFHeXJ3Z1diTjJYNndnZDR0Y1dCWDRCYjdKbVFEc0RkeDhTeHNzMTRkVS9DdU1GdVluSzNlanZjc3paWXZRTE56ZzQ3VU8zVWgraHdxRTdlRFo3OW5kcW1kL2JBdnErbXhISlFYL28vTG9wbzduMkZuZkpsSXMxak9YTFBJV3c1Mk5tK2gwcGxlbDFQZ0xJaCtvWUp3QXhUeCtJZ2NMd3AxT2F2RmdHRnl4aFBtWXBSNGkzWEphYU5seDVrMFo0Rlh5cGMrbWV4YWFTZFh4MzVVczNaYXA2TXlXOVdobG1uS2RVWUlXdEQ3aE0rSVlTUDQ4dEFjNVFIUHRuOG1CaWVEZkI2Nm5vNk1XdzZKcUYzT25IM3N4YzI0REI1cDNReU1aellIWGtBOVV3SVI3Wi90RjlxMm01NG1hbitDbG5xMk9tdm1sTTUwQndRa1N3Tk5SVzVIWGpvRXhnaEpSTEpSSFJvL2xhUTRMU1F4ZXJwUjdKREVlKzZHZkhxSks4RWFXT2szTjNSN0taOTlScWZrdnBqZnhEYlE1Tnk4UXordUZ1L3RkSmRLR0Z6TzdKQ2tUWWZ1ZVlScDI4YzBMWHlmWXR5SzJPR05xL09Nbks0UVBUNjR0ekhnc2dFU0lac3dZdFRnYTYvNXM3bVp5bkkwUy9VZEhRc1lzQkhUdVRTZEtCUk12endxRFhDVWlPSTBwR3RHdTBZdE9CMjNnOExFSFlkUnNNVU9RYW04dS9sS0xPekdnWkZLRUtCb0Nna0ttS0VoZXFIb2NGazhiTCtVZmdOTG05dEdNa2RMd1I2eGs5NnpoY05lUjdmdTB4NDVaeGpsSkRzQnUwUitzMmpYLzFOTHpvWml6MWZ6Y2hKejlBRGp6T09ESFNFRDBpTXZ6V001R2NCMlFQZ3UyNGNtNmhrYkNlZEllZGxsazA4K3RTY2tyWE8wVmhOQmJYOTcwVTdKWnY5eldvOGF2SlhOQmFBQ1g5N1hZaVNyZG8xVnRzVkFkWHJOWitvQUxrSkljbTdIZXJJdDdjWFpRZXhOaSt1endSQVBGbVd5bEE1Y2w5ZVpzTEFTZXdEZmdKazdiVGZFdFZuMU90NW8rbEl5dHZkalVmM0tZSUIxNVJDRmJuY0xoS2ZwMlVvRWk1blNpelZsdDZKeC93RmdLOUJuaTlqNE83SEtvKy9IVXZWNmNxM0JvY3IyY3hTMFBJamk0QmF1Nkp3cW9BR2l1ZE83bThxemhwMGRkdzRlRE14QlkzZzhrWStZMXEzT01qdG4vcWZIYzJGZVJETjk3L0RJTVRNaDBQbDR0ZmJyY2ZJSThxemVWZ0RjUVBISjg1ZzVLSTREYWY5aE1jdjErdzk4Tkc3MlJhVU9YQkRUN3k5YWg4dmJyUGVZYUhQSEI1VXpWVE9ZMzNRalVDL3d4TTlCQWFkZS91NE9oU1ZzT2hIcjZVNjdPK2RXMkFvQjFTUEhJeVN5d3dDeXJqZi9paTBKNW0vYkNRUmludkdvZTZ4cGV0S3FlWlRXWjh1djlBWEZEbE5BSEhZMWlEM3M5cHVBQ2ZsTTVRWHg2dVhzOGVkTU1ZQ1BEWUpSc2UrMW5sRTNkczF1YUY2QWtpVG5OY0JpYmlkeHZhNy9HYk5pbHNmeDErMUNONFRUQVdEblViUTljL3ZCWGd4Ym83ME5KMSt6U084dzdXTHhiSGV3WGlldW51b2FYQmYvMWZ1M3ZZZ09vYjJuazRzYzZmWFp4SXc5Z09kRmVFTXhES0NzT1JqcU0xTGIvUDBSOXdoNmpyN3plTFdqOHNxcEt0NzJvaUNXbkxsY0ZZTmdWbWdlVEZoYXRNNkFyaGJ3cCtic1EydUtBSURQQ3Z6KzFNdm84anFIcFhvVjFxSVVELzF3TmNjZGpYYkt5MkVPQ1lXeFBmTW1KaUFycHNXTm52VGZaN3ozR3k2bzJEK2hVUnBLMEw5cXloY3pRNzZKMEt6aEdXN1dYWW9KTzMzeDVzdUZjd1RWNC9nak8ybUtReVQzR1ZudC9Ebkl2UFV6VXVaaHZhUGRPWksvZ2JkT3EvOFFSUTV5UVdVVGw5MmtaZThFYTJuQ0RTOThBWExIMkVYVnBTMTA0VFF2VFJPYk1DTUgrVTVGcDNsNHEyYXV0d0hKQVd0SURyUkdGaGFiUkFoNnpsb3RIbHR1aHdFNHdvYVZjemoyN3pxVnc4WEJEbFByQldCRGRBMUZhUFNReWZxUUdSeU1MUTVYdU4xWURqRXVqb1NkaWRkdDFwUGRXNlp4UDVEVzUzYVk1cjZjRTF5Y2grYzBSTXpaMDVwd0wyQVNvcy9scERNdmRZR2Y2UnlSOGdjNCtUSU56bWRtUzdrSjdjOWp5YkNlYUhjcksycWdzcmtQaWNqMmVOdjhCSm9CQndubTlqd3VjSlpvNmRHUkhpd2dsTVVzdUk4RldaYW5lSTU2MHJ1WmJ6ZzFCRHEwQ3JSdFdwandPcGpOL0M0WEhkd1NJT1d4TkdRNjQ4R3BWK3VLRURJZnJZRzJRcEJPT3gybUpUdk5VWUxXdTZPM3krZVBjTUNpdUwyZCtDQWtMK2lDclVNRURKaC8rZGdrRHhDY3pTQmIzUGxSdkZzREFYME85WlNpT3NuNjdiY25xdG54VkIydVBaSmptMEdiWlkzeGhkcy9zMlFrcTdNV0ljVDNHZU5iWWNoNWIvbVBPMlcxbG1lUFZnN2REaE1KMDJFYmM4cDZJUmJsdVR3MmkwN0E0ejRyZk5SQmprR1ZINTB6YjlZZ3JRN3ZNVlVNdDBKRUo4aEY2aUNiOVNLSVRXaGJTZW1hTHAxSGRwQUt6emlxaCtqQkk4eHp5YnhOVWc0N1RNMlRkV3hFUGh5TXZnN1pjZFpuWEpDOWl3WE1HWDcwZHNmdG9UNlJNdWhhaDdvNUUrQUk0dGN5V0JhRG41bUpQS1YxRG5xNVh5c0VpcjBGblN1S1o3NEhSTFBZclUwZzlzaFhkK08zKzR5Q3c3SWtKd2NmNDJFcTB0TDBQVEUvYk9IQjJlWit5M1ZzYnVPMGh6SHg0YTNacnV4Z09FemJUbTNyNW0rVmRiS3MzK0lsNXpUQ1ZJN3NhTTdObm5uWndmSjVFalJPOWlLQVF3VFpEV0t4V2w5M3d1RmcvNGFkNWNGYXhETzQ3TU9PaWhWd3pzZzhSKy96cWkzcmp6Yk5nZFhSbW1SRWFZMm42UHVGU2pnblNmWVF6b21PZmVRWUJLTE1ydmt6d2M3Tzhad3Z4KzZmNGZZUEJFbmNlQ1ZLejZsV1RhWXJtMjJwY1RSTEVkQTkycXYxTWM1VXVDSGEyLzcyQlJzQkxCMTJBSzZJSHBQTHhyUGY1QnhjQjBiWmVCZnRGTEdVekVjQjVGZGV0VTMyRUJmTDNSeGZpYnE2QVBJVXJiNjAyVDZmS2RLUXZBQXZZNDN0NXEwMnljVjVZT3FnWFB1c0REV3I5VnFOOEpYOTYva2kySVRWVUQ3VVlWb1hvUFRuc2ozL2J0eUNqY1lqK1JxY3l6cU54eTRiZWVYam1NbmJVMldnNHhxS3Ivc2RVWDJLUUswMnJzZXlwN3gzRUorUkNDOWZRS3ZsNUIrUmZHM0huZHNSbEFhM1F3QUltVjFMSnZlZTR1aGxRa1JHNzd3SktaZnNDSzN6T1FmVVp5cW13ekJ0VjBxRU5MWVd1RnltZHFxalZzRHN3ajNzRXV3dE5sbm90Q0t6L1U2ZkhVc21ET2RlR29menMzZWQ1czZuZGFyN0RHUU1XMGxlaUxRK2djTlIyRnhvSFIwQWUrQ0lRTDZIU2NWNER4K1lFMlpla2FrWUZySUtzaWNMYkFaZ0c3VHRSTDdPSTRHc0JIcFEwUTZpOWpFUm5VaDRTbWxOOWNWZnFmeDdRdWVRRGk5NFZRbkVEb29NVHRYYWxTRERHdG5QQ29JUTBWbHNBN1dILzI4OVk1d3M0ZmxyNkhZaWMydFNBS0R3VEh6R0E5QXMxeW51dENvcCtjd0lUL0JSYmF1ZTJSWk9Jbko4cVZ4UG1udE9XSnhKamlKYkJWVnhqdUNRWnFpQ3k3WnJaMCtZUFlsT1JBeUVZUFNpRkx0MS9nVmN4emwzc1RYa09aTzRuTTFvbC9RWkxzUnJQTSsvd25RdUhJRENJanB1Ymx1SnZ6NUJ6Sjc2aEI2M05OS1pYTzhyNnh2ZFk0SmtkNUJKcStLMGJydDh0bU0vU25Xb3NNT0RNREUwNEhKaTNGMkR4NFhQOHJFdjV1OGR3dU5RTHRNUDNUNituS3hiQ2NOK2hpdkRiL09aaWV1QUdRZE9aUDJJRzk1bzFmYzhwTXFTcHRQYnJmSlRnQVlmS0dOdmt2T1J0MDhibVJmMjBXMXRzTFR5UytFcDQzYWM0bk82L1oxSXZ1MHdSN1hFNnV4aS9ObVNhZjYrN1FKODdHaVM1VGl1R0pia2RVckhpcE8yVGpzaFB0dXp0VTFXUEVWa3htc2prR2NzSHRhNHpLOWpwR0F4WERraFpWOVdoTFBRWTBoQ1FmWlluQzl2bnNsR0QwZW5UbzhOTFNzMmVMQ2d0aUVMRmtRUE1CcS9RazNFZEtFU0I5eDNPR0cvT3F6YmMrVTdPL1FNRW1wOW96TTVZWFZPN1FrZTNUa3NJVTRmSXdNOVpJTlptekhxWlJkZXQzNFpXVVUwSFFTYXgwSUFFQjFPakhrUjhmRkMzT1huK1ZVek5iT3dUbk0yZ2VUSTdHWGRuTlBQVnRXajkrMUo4bm1FVHNzZTFUVHNPWW1pcVp6Snp0MUNVamJFa2xsSWdoSnJubWRiRlFkTFhlTThtQ0crQ0NzNzNWczhQVTU5bnRIMEhpd0ZqKzNudVQwck42MkVocWNpcU9lcHNiRlhRV1JDaXd5dTNjZFZDSVBnekhTS2w5VVZoQS83alh5YUZWeDNueUZ4enVjYkV1RkRhZ2VDRWZScHhyS0xHTWNHMWVjOHhvVkZDNVpNcnMvMlVnTEhaOE5kUHNPYXNzWS9IT0FTcEp5OXJRY2RoYy9zY3hoNVdSVDlBbGtlakJJQzJGckhyZkxTUmNDUDh1VVd3bWtuVEU2T1YyRFk0Rk9ySmc2ZHJhZEg4Q3ZYcXhjL25nd0F6TTJuWFpTTnBHdnloR2FDZ3FCS1dKNHdsQk1VWHJNYVBsZkRNOTA1TGJua1hVdTVIQnkxYnQ0aG9JbWNRL1FZbWp4ckg1QWRic1daeUNVNUJzNEhqSG1VTzgvTWhtenJ1TWhrdytBTGh3VG1wSnJyZzFUcEgxODFUTE55TVNBZklZVHJObitFSllSMENvbzl3Zkt3YTV4blJ0Z3dOQ3FSRm5yaTBIbUhQVXJoY3YyaVUxb2NnMi9lSHZObiszQmNaektrZFVveFhnTGtaaGNNbE9xNE0wejc0azFaTTBjcVA3YUdtdlpYZ0htNHBFTngwMzA1VGVGaytlNHpzdlI5YlNnYlUvVk9qRWRzRnd3eTN6YTJuMmVaZk9ZWjRKdXc1bUJ2RzA3eFJNZjdRMnhZUkNkZVdwd1JnOGZqenVEMEVTTFRtOE1qcndvdGRFaGxRK1pEZjE1UFU2RWh6WW5oMzJtRWRjS01GZDNiaWdVbnA4WDcxTkYvdGpsTE0xZ09wQ2pVYUp1SFJIUi9aMDQzR0dDM3lMZjluOG5RblJFTUhpNmZLdjc5eVVCQXRNVUYzMWE0cWJxTGJJUzFVN3R2SE1YaVYrZE9PdExENmhOWUtpRS96dURKT0QrTk1qWjdQczlQMTgvSUgyd0VzTCtjWWdTWHh0aWpFOEVzTlR3dHpxOEEvZDIyeHovMkNIVDJ4T1lXSkNPT0MyRUdYKzQvcXNhSi9RN2JRUUJab1ljR3VsV3UxZW92ck5FNXJ0c3BSNThZYk1VTDdLQTZvL2g5NjVscnVUQk0xTllHTjg4QW5EdGdBOEZobVFqTjZTRG9CZVpEQkxPUEJiRGpIRUx3VmQ1Y2ZZbU90cFVDVFFJMzJtZEkwaGZTWlcxdlA0L1ZJYXBEeGw2azludkxBQk9vS2ZLdU03TkNQTENqdnlLMVJPcWViYzk0N0FoU3Q5L1h1TzJVS0krak1ud0NEalF1Mis0RVBLbFdOTnRuMnZJeXZFa3ZkcVRFcFE0Tmp0MDd6LzBnNE5qQ01CMitEblREbUJEMFRzZjNJVkJ6Z052UTYvWXpobE5hcnJwU2xVR2Z1K2ZGelFIRjg4VWc0OGV0b1dBOGdCL3dNenZNYXpuVi9BN3d0cXJxN3M2VWVuMTJoRjFRdk5kdElWcFlCTWtKMDZzRlRNUlJMN080bGhVMnM4Q0IySFlHYUVxd1QvWGZhWUh5Y01peCtYMzRrTUpNSkIwT25MYzQwclpyS2ZnSHJYRldnNmpOKy91NEhNVDY0Yy9iS0dlV0RRSmpnWXhqNzUwNmhpZ2tERm5GQTRLbWVWdDVERmU4UUJZWTlMZDZJTTVqOEhiVHpQRU4wNjBkOHdVb1BYRWtmaTBQUFFpa1FQN3kyUWpzMm16Qi9GVktsbnZZSHg1OE9BOXMzUHlTVFVmdVI4RjFMQTgzQ1ZpNE13ZEwzMjl3WXBXeDNqNituL0tvYXVNcHJOYnVzbjZlOFRNT2hYWFdQUXI5Y1FkOUxCRHMwVWtuWnBudDA0QTlxS3pZNG9uYThhelRxZGQ1WHM0dzdhYXpRSXdrRkNEcEFCQWd3cm1jcitjMHNwWFp6SXRtdUJzUm9Eb1VHZzJmNURhbllkRTVFZEZJTG1xZGd2Qm1kdER4ZE1OWDFXb052UTl1RVFpYmRhREpQRFhyTFVMYi9EREhlU2JhZXcxand1TmtmdmppeWF0YnRHZEJ1UFhEeU5IN1Y1bmM1OEQrNFBTMUJ3TDVGb2poNlpFNVU3UXh5TjVmSDVQblU4aFlUWjhRVWN5ckJ5S29UZFlCSCs0UHdZbkk1cU1lc3pPeWJTYTFOc3BzTVNDVG5NZCtmVUt5VTM1OElwVVBFd2lPa3JXYi9OVGhZMUNGTlZiazJGUHNPQjNFckpWcWIvSTVLcGFQeUt6TE5aMUFjMG9kbzQ5dXlFRlF4cThRQ2ZlWnhEekVUWjlUMXFXekRuVGNIcUM5ZkZyMGpNMG42T3dGclFsT0RTdjJmU1ZyVnNycGhNVkpVTmRueUNDWTBJRk1JOTZRMkp3ODNqN1BsNHlPV0s4UmVmTEJJWi93dFh4U0hqYVVtK29aNzdRckpXUHhYRTV4VUN3SzFBZXNiS09TVGZHT2ZQbTZSUG5NZ2NWNnpOVVN3eTJzSGlYYU8wdjRTSU1YT2VRU05EeEowdFA0ZmFiYXFmRmgvc3RhSkFJQ3YvWTRienQ5VnhZcEpGVU8wWFl1VHpxNS9ua291L0hBMU94SkxIdjJ2SjIwQjdOcDVyUEdNdkJ4WHl4Rmd2b3REdzZYQitqRmJzKzUrbGlPM0xmUUdlZElwK3Jlc3JHNTd1amMzWTNkT3NZZlkrL2V2b08xNzh2QkVuZXlCQU1pNUVBUjliUWRMdU8wY3ltOXp6UlZyTXNEVHNOZ1JtNTZHL2JRbUNZN1FZUEZ2c0VXM3B3TEpGWjlUa2FXSWpoenhFZnZRV0tjQXUvNGNYalZOZ2ZwV1NGclhXZEJxdnVBaDRvZFh3ZzZmb1hQNVBxd0creG9Cbno2dElSYnRNOGlPYVNwT2ZmVXNibU9rbmpPdUl6cHVmQWN5cmZ3NXNzUnJ5eUpGUFBYczlNd3lHa1R1TTg2ZVRFK1lOYjV6NDRyOGZ6RWRvVFB5QXY0UFU1WG1WMTI0T2dDcTNkdU1MbkliQ3RvKzhnRkFGbWsxRHF6bzN6b25PeUxCZVJtcGFNZVJjRkp6VDZaUHZ1ZWk0MW5TNTdYR3UzZ3VZL1RXUUJUS0hlRlY2OXRUWmtIK3lvbWkyek9jOXVlSGNiblF4LzBGeCtPMWEvM1RDaTExTWhPWUdJSHJMSDdiQ2Vyc3RsREo4ZFZKK2g2ek9mRFBSd2xrcDA1V253S1RQSXVUZDFjSTdwWHp6UHlUNWxlTmx3NjNnSkc5cUFDbEhDUExmdFFpczhDaGpQUHp3NDU2MUVjVnBsZlIvWmUySWxQbllPYXhBd244M2daY0lnb0MvVDZ5VnFEYlBZOG5LZGR6V292K3NOS0I0UFI4L2o0Rnk1cytyQTdhM0Y4b3BaMW15bWNaRngwM051cHQvWXhkUDB0VUg2ODlSMW5XcFdITnV3S011V1IwUU1ITTY3cnUwLzVLZnZ6aFZWT1Z0L1NONURVSjhRNVVNYUhQVmhxTk15VW1PcUx4QitXbVkvM3NZY0llN2EyWFk2WGRpaWliVzQ0Njg5TVpHd2F4dnU1SnlPY3h6anNiZi9UWTE3Zk1qdWJDeUNiem1tNG13ZWI0enFSTy9sWVllaHc4ckdQeTlRdzZINnlzZHNIMStLMjU3QTIyaFpqaDJVeGt4TjloQThNRVplRStEcHJiTmtza2FNUDgrMCtvYzdSVEVmd0xpdkdpSVJlQ25iaDhZSHN2cHN5Y0p3NkVJc2Y1VlBTYzVsV1VMZjZZTHZuSEdEWWVLMGNSSjdBVHg3aUJjeUwzZlJKSXc0L3hQTTlLWDBqN2xyc3V6bG5sbGREeXZpSWhlYzJMWTI1ZlBGTUJ3L0xUcjVnZllSVGh3ZzJ4QWUyMnRrRTZPemhVK0hXY3Y2NG8rUzBvMjFmb01tamU1eEhlNWJ3Rkorck1RRmx4MWg5QkhNZit1UmpIR0JSK2Rlb3FmdjB6NWlZUFg0TUhqa1N4L05xV0dVajJHMkhERHJnS3hOcFlYSGRacFhpUTVrTHVPQ2NzbWJ3UlFJYVh5eXo4RFBmZW9tODZWYy9JNHJxdGF3Zk5lcTBVajJBM2JJNHgwYzMyYm5zUTE3c1FEMVB1YktwR05zdzd6ejJSYlNZUmhXSG5wcXQ0cmN0bXlaOEVvQW14QmI1WnJxYmtCM25NeDViYVh3aXhPY2pIaDNEaVRwc0Z1Z0NsczJ1TXF0d3k3YlNCRG4zc0RoOEVnQlB3UGhUVHlQQjVQbmRuVjdGRXZ2L2VaOHhoN045N0NLTVNDR2ZBRnNKUmg2Ym5UR3JZenE1UFh1c1daMkNHSWZQZDRJRi9yM2hrZFc0dGtkNFBuN3JrWUdicUhMZUVPOEM2ekJZRTJuRVRaT2dUanFSUVRzSUNYZUsyZWVjZHNjNnhMYXVVMVdyQlppdE9nUGJhMjFPRi9TUXp2RzNWa3hndVh0R0I1V2RweUNkVnY3dVdDWVRVeUxzZUM0SFdGcnRZTXRLZEFvUWlzUUo2K056TkN2WThaeVJLdzQ4eFFDaGE4Z2NPS05aVkN1S2drOHBmWHpDUUZYS3J2QTVFOThPMmV6akI2cjl2aWpmNVROL0crSzFPUHk2TzhvU1VuSTdHcjlEZTdGOEkrRHNubVdqOVQyZnh5aUxISW9GZ0krNjhKNTc0U3hPM2E3TDU4UDRiSjBBL3IzcXBTUkIvRXp4ZVJxUmZRSVR4aGlBVnBqRm1EN2NiSnUyOVJqZmt2MHpYdTA3QngrTzV4QytmVzVXUHVtb2Vjb1lFVjhBY3J2MlBMTk1rR2Z3UlZaS1VNU0pzeVVpSGpIRzE5bUhxVHUrM3g2VEhzNnpTYUJld0lmRCtvb1BkQTcySEgrVnV4eldKOW1wQnV0M2pIeTJyUXpGM0Nyb2FtSWZtTHVkTU1DTlFkUnNyL0E1ajVzM3cyQlp2ZXZNQVNrL2xjU09MRHpQSjRXT0wrTkdzUmx5cUR6ZlhqMjFEejQyT1B0b2ljZmtjYlNtZkoyejI0dWxIbzdFNWlxUWloYWtUeCtUR3BEZU16MUMyVWY0ekIzMTVmTlVMUFc1MitOanFaOTcrMXluWUJIVTR5TlRuVFJ6cGplaWMzMEdlZmw1eHRncEgvTEpBc1FZNDd3ZGFXQ1ZBNEpXY1RUcE1OM3R3VFQvc211N1Y4KysrQzdyQURrRTl4N0hDVmh3OG5wZzdJT3BIWFhvOHhwOXFPT3AvdkZoeUw0WWszN1UwOUZCa3piSDNhZ0RCeHV3V3QyNE9rYTFOV0FsajBJUkZENnphWllHZVhyaU9jQzNXSi9scmN1V3UrODg3YXlmcnY3aGdhWGo4cHkrVnlKbWQ1cUhJYzJXcmpqTXdHTWdLQmZVMk5vOHkrVXIwdmkrY1Z1ajgrVjRnMjBCazArc3c0WTlodVhDaVVHT1RYZnFHcFRaSnlGNStqNWZuN3NtZjl2MjR6cXgvd1Q0dXVwVlBISWdOSGdXNUlGdVA3TTl2b1JMZmRWSEQ4R0lBZmZzQWNSOUd2ZVREMEFiQmRtSEEzeVBlZUVYTGRLR200cjdvWjdQWEVmOEJDSnZuUnF2OXhtTlZ0MUdIdzU5aHAxakg4UnRLMVVzaTJGbGZZYnRERDZwd256N3poSEVjNXp6cnFkUURCYW1oU3pwNTVuelphc1p2b0U1TGduazRaVEpzMXZsZkVuVGNYenoxSmRFSDV4bWtpRHlCcTlEOHJGamJJY0ZsL0xPeGZXYmc3UW15aEhXRHdTQno3NC9icWY3bkdPczZ2VTB3UWZOQVJuT3JMdHQ1YWhxNi9jOHhXUGVPVG5jczBXVGZGWXIzUjRwcHpPZ1R6ekJSeTZybkFDRTg4eTBKdzJXTXFtbmkrTjliYWF4ZThDR2ZvbUN3d0xzL2ZnOGV6WVZQQnhrcml0YWdXQ1RnZ2N6UFR2RTM0ZHVKcCtpbUIyd2RTcjFYMnZaQUVGajZEZUF6V0theElkd1B6QTN1M2tpb3VNNkQxSktYNXFlZk10S3VkSmxocHRvMkgxTXdadWR0d1hFcXVlYzh3dWFzV09BckdPKzY3UWppK1crUGg5Lys0cVRGaVcwRGlCNlNOS0cwL2h0ejBXNHdwaTJSbDgzdTVFUzhnUGR5Zlo0UG9pUkdidmlaYm1sTllhV2ZGb2xpTEJZcGpTZmQzWUY0T3VFRkx1WDF2REp1MnZZOHUyRDZ0LzJaV1FJZHU1VW0zd1ZDOVc2YytSdDhiUFpHbWRqeVozWXhCcmJNWHRiN3ZuNkNIRWN3L1A1NnBBVmJLbFpPa0M0NUlyUzlWa01kZHVVWjhORXNOM2t0a04zd2JibDdHQnBRd0MybmcwK25vbzQ4amlhcjhkajdMVUFadjhQUFBmdkVhNk8wVTRBQUFHRGFVTkRVRWxEUXlCd2NtOW1hV3hsQUFCNG5IMlJQVWpEUUJ6RlgxT2xvaFVGTzRnNFpLaE9Ga1JGSExVS1JhZ1Fhb1ZXSFV3dS9ZSW1EVW1LaTZQZ1duRHdZN0hxNE9Lc3E0T3JJQWgrZ0RnNU9pbTZTSW4vU3dvdFlqdzQ3c2U3ZTQrN2Q0QlFMelBONmhnSE5OMDJVNG00bU1tdWlxRlhoQ0NnSHowSXlNd3k1aVFwQ2QveGRZOEFYKzlpUE12LzNKK2pWODFaREFpSXhMUE1NRzNpRGVMcFRkdmd2RThjWVVWWkpUNG5IalBwZ3NTUFhGYzhmdU5jY0ZuZ21SRXpuWm9uamhDTGhUWlcycGdWVFkxNGlqaXFhanJsQ3htUFZjNWJuTFZ5bFRYdnlWOFl6dWtyeTF5bk9Zd0VGckVFQ1NJVVZGRkNHVFppdE9xa1dFalJmdHpIUCtUNkpYSXA1Q3FCa1dNQkZXaVFYVC80SC96dTFzcFBUbmhKNFRqUStlSTRIeU5BYUJkbzFCem4rOWh4R2lkQThCbTQwbHYrU2gyWStTUzkxdEtpUjBEZk5uQngzZEtVUGVCeUJ4aDhNbVJUZHFVZ1RTR2ZCOTdQNkp1eXdNQXQwTDNtOWRiY3gra0RrS2F1a2pmQXdTRXdXcURzZFo5M2Q3WDM5dStaWm44L3hydHlZdkRSZkc4QUFBQUdZa3RIUkFEL0FQOEEvNkM5cDVNQUFBQUpjRWhaY3dBQUN4TUFBQXNUQVFDYW5CZ0FBQUFIZEVsTlJRZmtCd0lSRWcrc2gwT3FBQUFnQUVsRVFWUjQydXhkZDNnVTFkNSt6MnpMcHZlRWtJUmlDQzBRYWdoZE9xR0lOQkZFVWNFR0lvSUZwUGhodVY3QWNtM1gzcEFyS2dvaUlDQWl2WWwwRWtwQ1NPOWxlNXZabWZQOXNUdkQ3R1pEVVVUVS9UM1BQSnZkemN5ZU9YUG1uZmZYQ2FVVWZ2bnRZclBaVUY1ZWp1cnFhdFRXMWtLbjAwR3YxOE5rTXNGc05zTmlzY0JtczhGbXM4SGhjTURoY0lCbFdiQXNDNDdqd0hFY25FNm50UEU4TDczeVBBOUJFT1IvRTBFUUlOOG9wZUlyb1pSQzNBQVE3MWNBb0pRUzk5Q2xWNi9QU0Y1ZVhseFVWRlFUalVZVHAxQW80aGlHaVdFWUpvb1FFZ2tnQWtBb0lTUVVRQkNBUUFCYUFHcjNwZ0RBdUk4bkFPQUJzTzdOQnNBS3dFSXBOUUl3VWtyMWxOSjZTbWtkei9PMUhNZFYyZTMyNm9xS2lvcjA5UFJxOTNHb2JHdnduaERpL1ozNEdRQlFRa2lEVjlsR0dZWUJJUVFNdzBBUUJLalZhakFNQTRaaHFFS2hnRUtoQU1Nd0VQOVdLcFhTcTdpcFZDcW9WQ3FvMVdxbzFXcG9OQnBvTkJwb3RWcG90Vm9FQlFVaE9EZ1lJU0VoQ0E4UFIwUkVCS0tqb3hFYkc0dUVoQVJvdFZyL3pYUWRoZmlCN2JjSnk3SW9MeTlIWldVbGFtdHJVVjlmRDcxZUQ2UFJLQUdhMVdxRjNXNkgzVzYvSXFESndVeStDWUpBUklEekFqTVBJQlBCU1E1UzNvQWxmMTlkWFowYUhCeWNvbFFxYjJFWXBpVWhwRGtocEJtQVpnQUNicEpwdGdNb3BwUVdDWUpReVBOOEFjdXlGM1U2WFg2elpzMHVlQUVjdlF6Z05RQkFFZmdJSVI1QVJ5bWxTcVZTQkRZSjBPUWdKOS9rNE5ZWXdBVUVCQ0FnSUFDQmdZRVN3SVdHaGlJOFBCeVJrWkdJam81R2ZIdzhFaElTb0Zhci9UZVhIOWorSENrcEtVRmxaU1ZxYW1wUVYxY0huVTRIbzlFSWs4a2tBWnJOWnJzc29IRWNKN0V6YjFEekJXWWlLeE9CVGJ4MlBvRE00MzFlWGw1c1FrSkNCNVZLMVVHaFVMUW5oTFFIMEJhQTVxOThEWGllZDVTV2xwNU5Ta282NDNRNno5aHN0cHpjM055Y0hqMTYxTHFab2h6VUJEZFQ4MkIyM2tBbkFwc0lhQ0tidXhMSWlhQ21VQ2lnVXFrdUMzQmFyVllDdUpDUUVJU0doaUlpSWdKUlVWR0lpWWxCZkh3OGtwS1MvRGVaSDlodW5GUlZWVFZRT3cwR2c2UjJ5Z0hOYnJjM0FMUXJzRFFpcXAxZWdFWWFZV1VOR05uRWlSTVZIMzMwVWZlQWdJQnVDb1dpS3lHa0M0RFV2K08xNEhrZXBhV2xhTmFzbWZkWGVZSWdIT000N3JqUmFEeDJ4eDEzSE51OWU3Y2dBenNKOUFnaGdqZWpjd05iQXpiSE1BejFBWEJRS0JUMFN1eE5EbkFpZXhNQlRsUlB3OExDR3FpbmNYRngvcHZPRDJ4L25CZ01CcFNWbFVrc3paZmE2Y3VPeG5FY1dKYVZHSm9QT3hxUjI5RjhNRFBpdzE0bXNqTHl4Qk5QS0pZdVhkcEhvOUgwWkJpbUZ5R2tKNERnZjhJMXVReXdlWXVaVW5ySTZYUWVNcGxNaDJmT25IbG96Wm8xVGg5QUo0akE1Z1kwNnNNdVI3MlpuSmY5alhyYjMwUUdwMWFySllCcnpQNG1WMDlGOXRhMGFWT0VoWVg1YjBJL3NGMC80VGdPSlNVbEhpeE5yOWRMTE8xcTdHaStuQU1pb0hteE0wbk5sREV5eUlHTVVzclUxOWUzQ3c0T3ZsV2hVUFFqaFBRSDhJOWM5ZGNBYkEyZVU0SWc3T1U0Ymw5VlZkVys1czJibjNPRFd3TldKMmQwSW51VC95MDZHT1FnSndKY1k4NkZLOW5mUlBZV0hoN3V3ZDZTa3BLZ1VxbjhONlVmMkg2ZlZGWldvclMwdElGelFLNTJpcUFtc2pTUm9WMHRvUEU4TDZtWmdpQTBDbVpXcTNXQVdxMGV6RERNWUFBZC9GZm5kd0didDJRN25jNGRScU54VjNSMDlENjR2TGlDTjlnMUJuSU13MGpxcWtLaG9GY0xjQ0tERTltYkNHNXk5ZFRidVpDWW1JajQrSGoveGZjRDI3V0x4V0pCY1hFeHlzdkxVVlZWNWRNNWNLWHdEUysxazNnNUJ1VHNqSGd4TkFuTWJEWmJsbHF0emlLRVpBRm82cjh5TjBUS2VKNy8wV1F5YlkrTWpOeU9TK0VxUGtGT3BxNTZxS29paS9QeW9OSXJzVGR2OWRUYnVSQVhGNGVFaEFRa0p5Y2pLQ2pJZjdYOHdIWjFVbEpTSXJFMHVTM05sM1BBMjVibWc2VmRDZENJdDgzTVlyRU0xR2cwdHhGQ1J2bkI3S1lBdVMxNnZYNUxURXlNeU9ROFFNNmJ4Y2xBcmxHQVV5cVZqUUtjbkwxNU94ZThiVytKaVlsKzc2a2YyQzR2SnBNSlJVVkZLQ3NyODJCcEJvUEJJeWJ0S29Oc2lhaDZpdXJtWmRnWm85UHAwb0tEZzhjeURITTdnSGIrSlhsVHlsbVdaVGVXbDVkdmJ0bXk1Umtad1BFeWtLT3kxd1lzVHE2bXVvR05YazF3cnp6MlRmU2NpdXl0YWRPbWFOYXNHVUpDUXZ4WHlBOXNEVm1hNkNEdzVmRnNMSVJEQkRWZmdDYlBFcEFEbWdobW16WnRDaGc4ZVBCRXBWSTVnUkF5ekw4TS96b2lDTUkycTlXNjRhMjMzdHE0YU5FaUd3Q25IT1JrTEU0UTJadTNtdW9WSHVJQmNDSzROUllhNHUwNUZSMExmdmJtQnpZQWdOVnFSVUZCUVFNSGdjalN6R2F6WkV1N1F1YkE1UUNOeU5WT3ZWN2ZJU2dvYUJMRE1KTUErRmZpWC95WnlISGMycEtTa3ZVcEtTbG5aYW9xNzYycXlnQ09YZ25nTGhmWXE5VnFFUndjTExFM2I4ZENpeFl0RUJnWTZMOHkvMVJncTZpb2tGVFA2dXBxRHdmQmxlTFNaS0RtRTlEY0FiVWU2cWJWYXMxU3E5V1RDU0VUL1V2dWI4bmkxdW4xK3JYUjBkRTczQXhPRG5DOEx6VlZGaWJTQU9BYXM3MzVpbnNUVmRQWTJGaEpOVzNTcE1rLy9wb28vMGtueS9NODh2UHpVVnhjaklxS0Npa2x5bUF3d0dnMHdtS3hTS0RtY0RoOFpnK0lnQ2F6by9rRXRMdnZ2bHZ4MFVjZjNhMVVLdThHME1kLysvOTloV0dZY1pHUmtlTjRudDl2c1ZpK0hqeDQ4TnJEaHc4N1JaQ2psRGJ3clBJOFR3VkJvR0xpUGMvelZCNFM1SFE2cVR4Y1NOUVE1S1lROGFFclBvU3RWaXZNWmpOTUpoTnV1ZVVXS0JTS2Z5NWpLeXdzL0VlY3FORm85QWxvb3NkVHJuWmV6bzdtUytXVXNUT3lhZE9ta05hdFc5K3JVQ2ltd1I5ejlvOFVTbW0ydytINGN2MzY5V3NXTEZoZ0pJVHdNaWJYUUUyVnNUaHZCbmRaKzV0Y1BSVURlOFdjMHlaTm1pQTVPUm1ob2FIL1RHRGpPTzV2ZjVKbFpXVW9MQ3lVdko1aUJvRzM2dGxZR0llWDJrbGthVThTcUdWblowZTBiTm55Zm9WQ2NUK0FGUC90N1JjQStYYTdmZFdtVFp1K25qSmxpczVMVGVYZDRDYXBxTzVnWHlyUFFmVldUMzJGaFhpblpFVkhSMHRlMCtiTm02TnAwMzllNU5EZjJzWkdLVVZ1Ymk2S2lvcWtnTnZMZVQyOU13Z2FVVHRGTHlkREtTVW5UNTRNYmR1MjdReUZRakVEd0MzK2U5a3ZQdVNpeldiNy9LdXZ2dnB5K3ZUcGhzc0JIQ0ZFa0NYZGUyY3VVRjhaQzQxNVRjV0EzbWJObWlFMU5SWHViQWsvc1AyVnhXUXk0Y0tGQzVMNldWMWRMWGs5NVFHM2plUjVFdTlVS0M5UEo3Tmt5UkxGa2lWTEhsUW9GQS9DSDMvbWw2dDcwSjYxV3Ewcjc3ampqdFZidG14aDNRQW5xYWd5Z0JQa0hsVHYxQ3lWU2tVYnl6ZVZxNldSa1pHSWpZMlYxTktVbEpSL1RNemIzeExZcXFxcWtKK2ZqNUtTRWxSVVZEUUk1ZkJPWHBmYjFMeFltb2RqUVBSeTJ1MzJPMVVxMVNNQWV2aHZWNy84Qm9BN2JEUWFQd3NQRDk5SUNPRzhBTTZid1ZGWkJnUDFabS9lTVcvZUFiMWlTRWlUSmsyUWxKU0VXMjY1NVI5UkR1bHY1eFV0TEN6RXhZc1hQZUxUNUxtZTNzbnJjcFltT2dya2FxZk1qc1pZcmRhQmFyVjZwanZseVM5KytXMXNncENNc0xDd0RKN25SMVZYVjMvV3BFbVRBM0tBOC9haThqeFAzUUpCRUtoWC9UN3hQWHg1VVVXeml1aEZ0ZHZ0c05sc2FONjh1Ui9ZL2lyMnRQUG56K1BpeFl1Tk9na3VVOW0yQVV1VHE1MzE5Zldwb2FHaHN3Z2hEL3R2Uzc5Y0wyRVlaa1I4ZlB3SWxtVS95c25KK2J4ejU4NzVNb0FUdzBSNEFJSWdDSUxZMzhLOVVURmxUdzV1M2lBbk9zQzh3YzF1dDZOMTY5Wi9XN3ZiM3dMWWJEWWJ6cDgvNytINWxNZW5OV1pQODJacGJsQ1QxTTU3NzcxWDhjRUhIOHhXS0JTUEFVajAzNHArK1NORXBWTE42TlNwVTViRllubS9iOSsrbng4L2Zwd0Z3TG5aR3lPcXFKUlNxUmltMjRGRjVjVVZ2QUhPdTFxekhPQllscFhBN2UvWVNPWXZEMnc2blE2NXVia29MQ3lVQ2tMS3EzTDRLZ2JwZm9ySlFVM08waGhLS2JGYXJVTTFHczNqQUFiNWJ6Mi8zQUJwR2hnWStQeXZ2LzQ2b0xxNitxTW1UWnJzSllTd012V1U0RkpPS3ZWaWNIS0FvNzZhQXZsU1Q4VW9nTlRVVkVSRVJQaUI3V2FScXFvcWozQU9NWW5kVjRWYldTZ0hFZW01RDViR2xKYVd4c2ZGeFQzT01NeGMvNzNtbHo5QlBSMFFIeDgvd09Gdy9IZkhqaDJmWm1WbFZiclZVMFlPY0s0SzVrUm9qTDNKVkZWY2pacWFtcHI2dDNJcS9HV0JyYVNrQkhsNWVTZ3FLcExDT2VUTlZYdzVDYnhaR3MvemNwYkcyTzMyQ1NxVmFtN3B1ZU5keXgzQnlFaHZkVk9kYzMxOVBXcHJhNUdhbXVwSGdMK0E2UFY2Yk5xMENRNkhBNE1HRGJvbWc3MWFyWjQxYk5pd1huVjFkZTlIUlVWdElZUW8zT29wSjdPOUVibjlUUTV3TE1zU2xtVWJ0YjE1TXppTzQxQlRVd096MlF3QWlJaUlRT3ZXclg4MzhTZ29LQUFBeE1mSFg5WDVWMVJVd09Gdy9HN25CdFBvTjZ3ZW55eDdFb1A3WnlJanN6OGVXZmdxeWt6T20yTEI1T2ZuNDh5Wk14NXhhcGZZbWc3RkY4N2cySkZma1oyZGc4TGlNbGhzZGpnY0RpSUNuRHMxaWdpQ3dBaUNvS2lzckV4Mk9wMnZxVlNxL3dIb3V2by84M0RQd25kdWluTTlmUGd3M256elRRREFrU05IOE5wcnIvMnBZL2c5d25FY0JnMGFCSVBCOEtlTjRYckwyYk5uWWJmYkczenVkRG94WWNJRUZCVVZJVEF3RUZhcjlacVBUUWpwSEJrWitSN0xzb3QzN05qUmpGSWFRQ25Wd05XWVdrVXBWVkJLRllJZ0tBUkJZSGllSjA2bms3QXNDNVBKQktQUlNFUXZxRHlQMUdBd1NGV2lLeW9xVUZ4Y2pBc1hMdURRb1VQNCtPT1A4ZmJiYi8vbWRmYlNTeS9oekprekFJQ0NnZ0tzVzdjT0sxYXN3S3BWcTY1cVBXelpzc1huLzE3cmVtZ1UyTFo5OEN4ZS9IUTNSazUvQnYrMzREN2svZmdlSG5uMjR6OTlJWjA3ZHc1bno1NUZmbjYrUjdWYmthMVZGZWNodjZRYXlzQlFoQVFIZ0hOWVNIMjlub2lNemMzVWlDQUlJa3NiRngwZC9SVWhaT2JOK05ULzhzc3ZrWkdSOGJjWWcwcWx3dnZ2di8rYnVpN2REUFBnUytiTW1ZT1NrcElHbitmbDVZRVFna1dMRm1IeTVNbG8xNjdkNzVtM0IvcjM3Ly9mRXlkT1pBSFF3dFVUVmdRM3BSdmdHQkhjM0wwMENNL3pjRGdjeEc2M0V4SGNMQllMVENZVFRwNDhpWUtDQXRUVTFFajlQVmlXeFpneFl6Qnc0TURmTkU2VHlZVGR1M2VqVFpzMkFJRE16RXlzV0xFQ3Q5MTIydzFmRDQwQ1cxRlJFVWhFYzB5Wk5BWWpiNzhYTHk5L0VjTzZKTUVKUUY5NEZIUHZuNENNakV6Y052a2g3RDVYQlFBNHV2NU5ETSs2RjNrMkFIRGl4WWRHNHVGbFg3cDUrVWxNeWhxT2Q3L1lpRGxUYjBkbVJpWSsyMTNvWW1DSHZzYzk0NFlpSTZNWHBqNzZIUEpySFNKdHhOWlBsbVAwZ0w3STdEc1lEeTU0QmFmUG5VTkJRWUhVRHMrN0owRkZlVFhBcUJBYUZBQ1ZXa3ZVU2dXbzRIU0JtdE5KT0k1bG5FNG4wMlBBaVBCdjlwMTVRYVZTZlFtZzI0RnYzOFR3L3IwdzhMWjdjTGpRSktldUhtTlk4dVlhT0c3UVRXTTBHbkgyN0ZuMDZIRXBEdGhxdFdMZXZIbm8zNzgvSG52c01UZ2NydEdZeldZODlkUlRHRHAwS0NaTm1vUlRwMDRCQUw3NDRnczgrdWlqR0RCZ0FCWXZYb3lzckN6TW1UTkhiTHFNdFd2WFl1VElrY2pLeXZMNXBQUTFobDkrK1FYang0L0g0TUdEc1dUSkV0aHNOZ0JBYlcwdFpzK2VqYXlzTEl3ZlB4Ni8vUEtMdE05ZGQ5MkZrU05IWXM2Y09aSzZJOHFubjM2SzRjT0hZOGlRSVhqdHRkZmdIVFR1UFlidnYvOGU3NzMzbnZUOTZkT25zV0RCQW9rcExWdTJERU9IRHNYWXNXT2xNWmpOWmt5ZlBoMnZ2LzQ2aGd3Wmdva1RKNktvcUFnQThNSUxMMkQvL3YzUzhWYXZYbzNWcTFkZjl0cnMyYk1IRXlkT1JHbHBLZWJPbll1SkV5ZGk1ODZkQUlDbm4zNGFUenp4QkNvcUtqQng0a1JNbkRnUkxNdGU5bmpyMTYvSDY2Ky9qaGt6WnFCZnYzNVl1blNwTkEvTGx5L0hxRkdqdWl4Y3VQQ0RYYnQyemYzd3d3K2pLYVVCQURTVVVoV2xWQ2tJZ3BMbmVVYmMzTUJHREFZRGFtdHJVVnRiUzJ3MkczUTZIVTZmUGcyajBZanM3R3hzMjdZTlI0OGVSV1ZsSmNyS3lsQlFVSURpNG1MVTFkVkp2NStYbDRkNzdya0hnaUJJNDUwOWV6YU9IajNxY1E0Yk4yN0VxRkdqd0RETUZkZjI1ZGJEdVhQbk1HSENCQXdZTUFDZmZ2cnBGZGZraFFzWE1IUG1URHp3d0FQbzM3OC9GaTVjQ01oMGM0K3Q4c1FHOUdqZkVwMTZqY0RTVjk3QjZSTFhpVkxlZ0Zrak9xSDdzR240YnRONnpKcHdLMXIzbUlBU084V3VqK2VqUllzK09HbW1vSlRESTROU01HejJXNjc5cXZlaFM0c1dhTm02RTJiTW00OUY4NS9FM253eitMb1RHTkMrSlVZLytDdzJyRitOMFQzYll0VGpybjFPckZ1R2xpM2FZdjdySy9ISzBqbElpb2xDMXJRbk1ILytmRXlmUGgzanhvM0Q0TUdEa1ptWmlZNGRPeUkxTlJVYUJRRlJhaEFaR1VsQ1FrS0lWcXNsYXJXYVVTcVZDdUt5S2FwWHJmbDI4T0lIUi8vWXNtMGZlcXlhbzQ3U1BiUnJTZ3M2OXFHbGRQM2FsWFJZdDFUYWVzVGpsRkpLVDZ4YlJsdTJhRXVmZWV0L2RPMm5LMmlubEpaMDJib1Q5RWJJcWxXcjZOdHZ2eTI5Ly9ISEgybi8vdjFwV1ZrWmRUZ2M5TTQ3NzZScjE2NmxsRks2WU1FQytxOS8vWXNLZ2tBUEh6NU1lL1RvUWExV0szMzk5ZGZwZi83ekgzcmt5QkU2ZE9oUXluRWM3ZFdyRjYydHJhVUhEeDZrSTBlT3BIcTludXIxZWpwa3lCQjY4dVRKeTQ1QnA5UFI3dDI3MDdObnoxS2U1K25DaFF2cEcyKzhRU21sOVAzMzM2ZWZmLzQ1cFpUU1E0Y08wWDc5K2tuN21Vd21halFhYVhwNk9qVVlETkxuNTgrZnAvMzY5YU1XaTRWYUxCWTZaY29VK3NzdnYxeDJERFUxTmJSMzc5NlU0emhLS2FWTGxpeWhhOWFzb1pSUyt2cnJyOU9ubjM2YU9wMU9ldmJzV1pxWm1VbnRkanMxR0F3MEpTV0ZIamh3Z0ZKSzZZb1ZLK2o4K2ZPbGVaMDVjNlowL0dIRGh0SEN3c0tydWtaRGhneWh1Ym01RFQ0L2NlSUVIVE5tekZWZjY0OC8vcGplZHR0dFZLZlRVYlBaVEFjT0hFaC8vZlZYU2ltbE5wdU5HbzFHT21QR0RQcmpqejlTbnVkL0tpd3NuQUNnR1lBbUFLSUlJV0VBZ2dBRU1BeWpKb1FvQ1NFS3RWck5CQVFFRUFBa0xDeU14TWZISXprNUdRRUJBV2pldkRreU16TXhlUEJnakJzM0R0T25UOGY4K2ZQeDBFTVBZZURBZ1RoKy9EaFlsZ1dsRkdQR2pNSE9uVHRCS2NXNWMrZlF0MjlmT0oxT0Q4d1lOMjRjeXNyS0dtREpwNTkraXVlZmY5N2pNN2VxalBUMGRCZ01CdW56anovK0dHUEhqb1haYkVaVlZSVXlNek9SblozdHNlK3FWYXZ3OXR0dlMrOVBuejZOcmwyN29xeXNERmFyRlJNblRteWNzY1dsajhiV3JkL2p2cXdPMlAvTmV4Z3plQWcrK2ZrY2hPSUQySEhXZ0lrUFBvM2JSNDdCb3NmdUJsdDlGTHRQMWw4VkN4bjE2SEo4K09veXZManNaZlJwR1lTQ2c3dFJhR1V3ZmQ0aWpCNHpHVys4K3dGbWp1dnRlZ0o4dndFMExBRjh4Um5rRkJrUW9IRGk5UEdqVXB5YWQwaUh6V1lEVHlrZzhCNnFwOHZyS1RBVVVNeCtZOVBEVXllT1g3bGsvc3loR25zWnR1M09SZjZ2aDFEUEIrREJwNS9CbUhIM1lHQ1hoRXRQb2U4M0FCRkpTRkFZVVdVTFJHSUVnMTI3OXQwUXhyWjI3VnFNR3pmTzQ3TTJiZG9nSVNFQmFyVWEzYnAxUTBWRkJRRGdwNTkrd293Wk0wQUlRZmZ1M1pHY25Jd1RKMDRBZ0ZSMU5TUWtCRXFsRWtGQlFXQlpGcHMzYjBhVEprMndkdTFhckYyN0ZqRXhNVGgwNk5CbHgzRDQ4R0YwNk5BQmJkcTBBY013V0xCZ0FjYVBIdzhBbURGakJoSVNFdkQyMjI5ajU4NmRxS21wa2ZZVGY5ODdJRFF1TGc0cWxRcnZ2UE1PVHA4K2paVXJWelpRTWJ6SEVCMGRqUzVkdW1EMzd0MWdXUmE3ZCsvR3FGR3VaSkFmZnZnQklTRWhXTGx5SlE0Y09BQ0dZWEQrL0hscEREMTc5Z1FBWkdSa29LcktwV2tNSERnUU9UazUwT2wwT0hueUpPTGk0cTVIVzc5cmx1N2R1eU04UEJ4QlFVRm8zNzQ5S2lzckFRQUJBUUVJQ1FtUjZxc3hERE80V2JObWIzenp6VGRUM0twcGdLaWFBaEJWVXdVQVJzeWVJWVFRdHlPTjJPMTI4RHdQdTkwdXFhWjZ2UjUxZFhWU1lMdlJhRVJ1Ymk1T25Ub0Z1OTJPR1RObTRQUFBQd2NBZlBYVlY3am5ubnM4NnIzbDV1WWlKQ1FFQ1FrSlYzV3VqYTBIQU9qY3VUT0Nnb0lRR3h1TFljT0dlVEQveHU2TGhJUUVKQ1FrUUt2VjRxNjc3bW9NMkZoc1cvTVo5aGN5ZUd6eE1temJzeGUzZDFEaGxkZmVkM2xRQUdnMHJ1YXRLdmNyeC9MdWZRWElHR3NEQ2ZlS2wyRTVCd0FGTkJxWGc3WkZlaDlrOWUzc29wd21DemliSGhmT24wZGhZUkhDazFJUkc2SzhYUGNvUWtFSXBZSlVPODNwNUJpZTU1bml2TzBKdlZxMmVDMUFxMzBEUUlKU280WUNBTWV6NEp3OEFBV1Vtb1pPWXJ2TkRpWERvNmF5RXBXVjFlaVNOUVZadmRyZUVGdGllSGo0WmF1aE1nd2pxUXNjeDBHajBVamZhYlhhSzZvL05wc05vYUdoMGpaMjdGajA2ZFBuc21QZ09BNXF0VnA2SHhJU0lwWEZlZTIxMTdCKy9YcjA2TkVESTBhTXVLcnpEQXNMdzhhTkc1R2Ftb3B2dnZrR3c0WU5RMWxaMlJYblllclVxZmoyMjIreGZmdDJEQm8wU0FveXRkbHNpSXlNbE01cDd0eTVQdWRRUG5kS3BSTGp4NC9IOTk5L2ozWHIxdUd1dSs3NjAyMTNoQkJjSVk4N1FhMVd2elJ6NXN4bk5tM2FsQ2lxcGpLQUU0R05jZHVUSVFnQ2NRZm5Fa0VRaU1QaDhIQXE2UFY2NmQ2eVdDd29MQ3lVd0sxdjM3N0l6OC9IdVhQbnNHM2JOa3lhTk1sak1HdldyTUdFQ1JPdSt6eW8xV3JJUzZ0ZHpYMmgwV2dhQXpZbGp2KzRFazh0ZUJaN1QrYWp0TFFRZXJQcnhsRTA2NFpPMFNyOHNPNS9LQ3d0eGFvdk53Q0JMZEd0WXd6aVkrSUExT0dYZzluSVA3a0xGNnI1S3c2OFpaY01SQ2hZYlBwbUhjcEs4L0RZdUV6MHZ1ZEZtRXdtTkVtK0JaYmFLZ2loOGJpbFpUTW9CUllCYWtXRE9EVjN4VnZDc2l3VWhBQlVJQ3pMRVo3bkdVR2d6TkNIWCszWHBIbm1oNW50dzJidTJyZ0c1NHBMOGUycU5iQ1FFR1IwYVkxYk9uUkVJQ3hZdjJvZENzOGZ4Y204T21sOGZYcjNCS2ZYSVNFakN3OC9PQTF0NHNPUWtkSGxEMS9ZYTlhc3dSMTMzSEZOVC9zdFc3WklidmJzN0d4MDdOanhpdnRVVlZWaHpKZ3htREJoQWxxM2J1MnhZSHlOb1hQbnpqaDY5Q2owZXIzMFB4OTg4SUhrdFIwM2JoeTZkKzh1cVFsWGtsMjdkdUhsbDEvR2JiZmRobGRlZVFWdDI3YkZ3WU1IcnpnUDNidDNSMmxwS1ZhdVhJa3BVNlpJbjJka1pJQmxXVXlZTUFFVEpreEFRa0xDVlFXZlRwbzBDZXZYcjhmaHc0ZXZ5WGl1MVdwUlYxZjNwNEJmZW5vNmpoNDlPcU5YcjE0dkZSUVU5UERsV0FDZ0VBU0JFZG1iNkRXbGxNS1hVMEhNMXJIWmJGSUovYnk4UEp3OWV4YVRKazNDbzQ4K2lxRkRoM3BVQ2VFNERydDI3Y0xRb1VPdnkza1ZGaGFDVWdxSHc0SGR1M2VqUTRjT1Yxd1BPcDFPc2pmLzlOTlBqY1d4TVhqc3BmK2lldjVDekJnM0JCd0ZvbHQyd2Nzdno0RlMzUVRMWHY4WFpzNTdIZ1A3cllJNnJDbWVlZVZ0cElVQ0dId25ScVY5ZytVUDM0WlBXL2REaTZaaDBGM2hKRFRKL2ZISzBnZngxTDhYb2UrN0hLS2FkOFZ6QzZmZzlPblRpTzQ0QkptdEwrRG5iejRENitTaDBJYWdaWW9HQVhCNng2aEo4V2xRS0FnUkJDSUlQQUhBREo3NHlOVFgvKy9oWndqUnBpeDQrWFVVUFRJUEkyN3RCMFZBQk81YitocUd0dElDR0lvbER3N0JzeDgralI5WHg2Sjl3cVdxbzhNZmZoNlBsejZCTng2Zmd1VThFTjJxSzE3cVB4bEErQisyWUZtV3haNDlleVNEK05YSTBxVkxNWFBtVEd6YXRBa1ZGUlZZdW5UcEZXL284ZVBINC9UcDA4akt5a0pNVEF3VUNvWGs1bTlzREFrSkNaZzdkeTRtVEppQW1KZ1lBSkRjN2pObXpNRENoUXNSR3h1TDJOaFlDSUlBZzhHQXNMQXdqQnMzRHZYMTlUQ1pUQmcxYWhTQ2dvS3daY3NXWkdabVl2WHExUmd6Wm96cndhbFFTRGZJNWVhQkVJS0pFeWRpeTVZdFNFbTVWTmR6NGNLRmVQVFJSekYyN0ZoUVN0R3VYYnVyOHFhS1BRTmF0V29GcGZMcXd6dW5UcDJLT1hQbW9Ibno1aGc5ZWpTbVRwMTYzZGZEODg4L2p4MDdkcUMydGhiSGpoM0RTeSs5aFBmZmZ4K3RXN2ZHMUtsVE1XclVxSUZ4Y1hITkJnMGE5TmJQUC8rODBaMkdKYS9zekFNQXBWUnd4MjVDb1ZCUWtSQ28xV29hSHg4UHM5bU1VNmRPU1d6eHM4OCtRL3YyN1RGeTVFZ0lnb0EyYmRxZ3VMZ1k5OTU3cjhmNGZ2NzVaL1R0MjllRHlRUEFoZzBiOE5wcnI4RmtNc0hwZE9Mbm4zL0dJNDg4Z2ttVEpqVzZIa1NRR2p0MkxQUjZQWHIwNkNHWkR5NjNIaHdPQis2OTkxNHA5T2FLWll0WWh3bFdCNFB3VUsvTzA0SVQ5WG85Z2tPam9mWllCd0wwOVhvRVIwWmVVL1N2d0RxZ045c0FCamliaytNUnpsRmRYWVhhZWgwY05sdURiQUk1cU1teUNKaHBkMDlWTFAvUGZ4ZEVod2N0Z2tjZ3NtdDgydUJ3YU5TZWhOVm0wUVBLWUdoOXFLU3N3d0tqalVkMCtCOWZhdm5zMmJNNGN1UUk3cjc3N212ZXQ2NnVEcUdob1ZDcFZGZTlqODFtQThkeEhtV2tyelFHbG1WaE5wc1JHUm5aWUlIWmJEYUVoMThiOEp0TUpoQkNFQndjZkYzbXdXQXdRSzFXLys0OHlDbFRwalNJdTl1NGNhT0g1MC9za1hHbGN5NHVMc1lqanp6aThWbjc5dTJ4WXNXSzN6eSttcG9hYUxWYU1BeURmLzNyWDg3RXhNVFgzbnZ2dlk5T25UcGxkNmRrY2U3TjZhN3pKaEJDQkhraFM0MUdBN1ZhVGNYYWJtTHBJN0ZvWlZSVUZPTGo0MkUwR3BHVGs0TlZxMVo1bk91bm4zNktQbjM2b0ZXcjZ4ZlFMaWJyeTBOQkdsc1AyZG5aV0xod0liNzc3anZvOVhwRVJrYmVYUFhZZERvZGNyeEFUWFFTaU0xVzVOMmpaS0FtcjV2R1ZGWldKa1ZGUlQxRENKa0J2L2psYnlxQ0lPRHV1KzlHMDZaTndmTThUcDA2aGErLy9ob2hJU0VyZCt6WThlSHc0Y05MQ1NFT0wzRGp2Y0JOS2owdWdwdThHNVlJYnFXbHBTZ29LTUNzV2JQUXAwOGZ0Ry9mL3FiSkx4V0JiY09HRFpjWS9jMENiSEpRS3lrcDhRQTFlY01WSDB4TlRJMWlCRUVnSnBPcG0xYXJYZWl2bWVhWGZ3cTRaV2RudzI2M0l6MDlYWElnOFR5L0pUYzM5NzEyN2RxZEJ1Q1FzVGVudTdrTTcrNnhJSWlOWStUZ0pwWWNGNzJYWWcyM2xKUVVxV0RselFKdVZxc1ZoWVdGSGtIUU53V3c2ZlY2Wkdkbit3UTFrYW41VWo5bFdRU0VVc3JZYkxaaGFyVjZFZnlWYmYzaUYxQktENWVYbDcrVG1KaTQxd3ZjT0RlNFNjek5YWDY4QWJnMXBwYUs0SmFXbG5iTlpvY2JJWDk2RXJ6QllQREoxSFE2bmM4S0hWN3Fwd1JxRG9kanNsS3BYQVNnbFg5Sis4VXZya3E5Q1FrSmtiVzF0VzlGUjBkdnBwUXl4QlU0UmlpbEhOeE9CY0dkVXVBbU9SUXV4d1AxQVpTK2ZnTnBhV20vS1MzcWJ3dHNKcFBKcDAxTkJMWExxWjl5VUdOWjltR0ZRckVZUUl4L09mdkZMeDdBa3hJVkZiVllyOWNIaDRlSGYrTXVkMFM4TlRZUjNKeE9wMDl3YXd6VXhLMURodzQzVmFNWTVzLzZZWXZGMHFpandFY1RZOUlZcUhFYzk1UkNvVmp1QjdYRzdRLzMzWGZmVFRXbXdzSkMvTlVhZGIvODhzdm8zYnMzaGc0ZEtxVWFUWjQ4R1pNblQ4YjA2ZE92KysvdDM3OGYxN0huYjB4WVdOZ1NzOWw4THdDdExKaFhucWtnWlNrNG5VN2lybHBKUjdRQUFDQUFTVVJCVk5NbUpkRGJiRGFQUU42NnVqb3BlVDQvUHg4NU9UbXdXQ3c0ZS9hc2xOSGhMZlBtelpNeVpScVR6WnMzU3hrT2Z6bGdzOXZ0MStMOUpQSU9VcUpON1oxMzNsRnhIUGNzd3pBdndwVlM0aGNmd3ZNOGpodzVjbE9ONmNVWFg0VEZZcEhlRzQxR3pKNDkrNmFkdzVNblQyTExsaTM0NmFlZnNHM2JOblRxMUFrcWxRcXZ2UElLbm52dXVlcyt2elUxTlZpK2ZQazFoZXo0a29zWEwrSzU1NTRUM3dZRUJRVXRyS3lzZkVpajBRUTFBbTRLUVJDSXZQeVJ1OUt1Qkc0V2l3VkdvN0ZSY0h2aWlTYzhVcTNrY3VyVUthbGdRbU5TV1ZrcEZTZjRTNm1pSE1kZDF2dnBaVk1UY3o0aEw4Znk2NisvQnFlbnB5OWlHT2JKdnlNWUhUaHdBTTJiTjhmKy9mc1JGeGVIdm4zN1NqbDFack1aMjdkdkJ3RDA2ZE1IMGRIUjBuN2w1ZVhZdDI4ZklpTWpNWERnUUo5VkZrNmRPZ1dOUmlNVkVheXRyY1hPblRzUkdCaUlmdjM2ZWFnVFI0OGVSVjVlSHZyMTY0ZmMzRnpjZXV1dGtscXliOTgrbEplWG8zZnYza2hNdk5RT29xeXNEUHYyN1VOb2FDZ0dEaHpva2VZRnVMSWlhbXBxMEw1OWV3QkFUazRPenA0OWk5MjdkMlBidG0wQWdMNTkrMHJ4WjhYRnhUaHc0QUNTazVQUnExY3ZDUWd2WExpQW1KZ1k3TisvSDZtcHFlalNwY3NWeDBBcHhkNjllMUZSVVlHZVBYc2lPVGxaMmljbkp3ZFJVVkVvTFMxRmJtNHUrdlhyaDhURVJPemN1Uk9IRGgxQ1JFUUU5dTNiQjdWYUxjMUQwNlpOWVRLWkdtV2xodzRkUWxKU0VucjE2Z1ZDQ0k0ZE80YlUxRlJvdFZxY1BuMGFuVHAxd29VTEZ4QVlHT2lSWTdsdTNUcU1IVHYyaXV2aCtQSGppSTZPUmxKU0VnQkllYk9EQmczQ3NXUEhjUFRvVWV6YXRVc0tjQjA2ZENpMFd1M2MxcTFicTRjTkcvYlJ5eSsvckhlcmxLTGR6ZWxXUzNsM3FYeFJMWVhENFNDQ0lGQ2owUWkxV28zRXhFUVBWWlFRZ3BLU0VnUUVCSGpZMjhUcjU2dHMwOUdqUjVHYm00dHUzYnA1eE1BSmdvQWRPM2FndnI0ZVE0WU1rWTczeXkrL29FMmJOZ2dMQ3dQTHNqaHc0SUIwTGV4Mk83WnQyd2FsVW9sMjdkcmRXTVpHS2ZVQU5Ya3l1M2ZURlZsdkFnOVFPMy8rZkVSNmV2clN2eXVvQWE0eU9rOCsrU1QwZWoyV0xWc21aUVBvZERyY2R0dHRLQzB0UldGaElVYVBIbzNhMmxvQXdMRmp4ekJwMGlUbzlYcHMzcndaRHp6d1FJUGpidG15QmZQbno1ZkE4T0xGaTVnNGNhS1UvRDFtekJncExXWDE2dFY0K3VtbllUUWFzV2pSSWp6OTlOTWVLc1hYWDM4Tm85R0lLVk9tSURzN0d3QncvUGh4M0gzMzNUQWFqZGk1Y3ljbVQ1N2N3RGF6YnQwNmp3VG11cm82bEphV1FoQUVGQlVWb2Fpb1NMVHpZT2ZPblhqZ2dRZGdzVmp3N3J2dlNvR3NwYVdsbURWckZ0NTQ0dzNvZERyTW1qVUx1M2J0dXVJWTVzMmJoeSsrK0FJbWt3bFRwMDcxS0ZXMGF0VXFUSjgrSGUrKyt5NXljbkpRWCs4cTZsQlNVb0thbWhyWWJEWVVGUldodExUMGl0ZHY1ODZkdU8rKysyQ3hXUERSUng5SmtmSWJOMjdFa1NOSGNQYnNXVHp4eEJNQWdQZmZmOTlEUGFPVTR2dnZ2OGZ0dDk5K3hmVncvdng1UFAvODg5TC9iZDI2Rlo5Ly9qa1loa0YxZFRVcUt5dkJzcXcwcjZLd0xEdkw0WEE4UEhIaXhHZ0FZdkZLRlFDbElBZ0tBQXBLS1dGWlZsSkxUU1lUcXFxcVlMRllVRjFkalp5Y0hBL21WbFZWaGExYnQ2SmR1M2JJeWNrQnBSUm56cHpCK1BIalVWMWRqYzgvLzl4ajdsNTk5Vlc4L3ZycnNGcXRlT1NSUjdCanh3N3B1dzBiTnVEbzBhTTRmZm8weG93Wkk3SDc1Y3VYU3lZTW85R0lKNTk4VWdMQ3FWT25ZdnYyN2NqUHozZGxmelJXdHVpUDJFNmZQbzF2di8wV3I3enlDdWJObTRlcFU2ZGk1TWlSNk5PbkR6cDE2b1RVMUZRa0pTVWhOallXNGVIaEpDZ29pR2cwR2thcFZDb1VDb1d5c0xBd1RoQ0VOK25mWElZUEgwNnpzN01wcFpTV2xwYlNEaDA2VUtmVFNXdHJhK214WThjb3BaU3lMRXRuekpoQnQyelpRaW1sOVA3Nzc2ZWJObTJpN3RMUWRNR0NCVlNuMDFHajBValQwdExvMXExYjZaQWhRMmhWVlpYME82V2xwZlRNbVRQUzhiS3lzdWpwMDZjcHBaVDI3OTlmR2tONWVUbnQzcjA3cFpUUzQ4ZVAweEVqUmxCWE5XcEt2L25tRy9yVVUwOVJTaW45OU5OUDZlelpzNm5UNlpTK3M5bHMwdThKZ2tDenNyS29UcWZ6T04rYW1ocmF0V3ZYQnZNd2VQQmdhUXdXaTRWMjd0eVpPaHdPbXBPVFF3Y05HaVNONFlNUFBxRFBQZmZjWmNkdzVzd1pldXV0dDFLeFIrZXVYYnZvK1BIanBkK2FQMzgrZmY3NTUzMWVqMDJiTnRGWnMyYjUvTTVvTk5LT0hUdDZmRFpxMUNoNitQQmhTaW1sSE1mUm5qMTcwdno4ZlByZGQ5L1JkOTU1aDM3NDRZZDA0TUNCdExLeWtvNGRPOVpqam80Y09kTGd0eHBiRDNhN25XWmtaTkRpNG1KS0thVjMzbmtuM2JGangyVkxKeGtNQnBxV2xrWTVqcU4ydS8yRDJiTm5ad0JvQVNBQlFCU0FVRUpJSU1Nd0dnQktobUVVR28yR0lZU1F3TUJBRWhzYmk0U0VCREFNZzA2ZE9xRlBuejRZT1hJa0prK2VqQ1pObW1ERmloWDQ5dHR2cFJwNUgzLzhzWFQvOSt2WEQvbjUrYWlzckVSR1JnYnNkanNvcFRoNDhDQ21USmtpbFMxYXRHaVJ0TS8wNmRPeGZ2MTZVRW94ZHV4WW5EaHhBcFJTMU5UVW9HdlhycUNVNHBkZmZzR0lFU01nc3N5MzNucnJ4cW1pNTg2ZHc0VUxGeVQxVTk3elU3U3BOUko4S3pHMTVPVGtSWVNRMmZnSGlKaXYyTFJwVXpBTUE2UFJpSkNRRUt4ZXZSb3JWcXhBYUdnb2NuSnlwQ2Q3WVdHaHBGNFNRdkR2Zi84YmdNdnpiTGZiTVgvK2ZQVHMyVlBLN3dSY3BXT2VmLzU1V0N3V0JBY0hvNktpQWp6UFM2eElQSjdjMXBPYm00dnk4bktNSERsU3N1RzFiZXVxZGpKNThtUVVGUlZoMkxCaFNFMU54YlJwMHhBUWNNbjhlZVRJRWFTa3BGeFYzQlBQODhqUHo4ZFRUejNsTVY0eCtWNnIxVXJxZVhCd3NGVEpwTEV4RkJRVW9HM2J0cEo2bnBhV0p0WGpGK1Y2cFFSZHZIaFJVcjJVU2lYYXRHbUR3c0pDcEtlblkrZk9uWEE0SEpnNmRTb09IandJcFZMcE1VZU5KWG43V2c4UkVSR1lPblVxVnExYWhjbVRKNk9tcGdiOSsvZS9xclhsM2g0WU4yNGM5dTdkKzhHSkV5ZnF2YlVyZDg0b0wrYVg4anhQV1pZVisvL0Jack5KYW1oNWVUbGlZMk5SWFYwTmxVb0ZoVUtCMDZkUFMrV2s1T3NvUHo4ZkZvdEZVcmNGUWZCWUUzTHpSV3BxcWtlMUYxOVNWbGJtMFNOVnBWTGRHR0RMejgvM0NXbytLblEwQ09rUWJXb3RXclQ0eDRDYVhJeEdJMWlXUlhCd01MWnMyUUtqMFlndnYzUlZKWDcwMFVlbC80dU9qa1pGUllXVUVMNW56eDUwNzk3ZDVTRmlHR3pldkJuejVzM0RlKys5SitVcnJsNjlHb21KaVZpeVpBa0FlS2cvVVZGUnFLeXM5TENmaVorM2JkdldaNFhadkx3OFBQend3M2oyMldkeDdOZ3hQUGpnZzlpMmJSdWlvcUl1ZTlNU1FqeXFzd0tBUXFGQWVIZzRQdnp3UTZrc2tpaWkrdTFMR2h0RFRFeU14dzFTVmxibUFmTFhVOFRmRXB2dWlML1Z2SGx6VkZaV0lqQXdFSU1HRGNMaXhZczlHcVpZTEJZY1AzNWNlaWhkYVQwQXJpVDhFU05HZ0dWWlRKczJ6Y091Nm10ZXZVV3RWai9RcGswYllkU29VZSsvK09LTGFBemNSQURpT0U0S0JSRWRBWVFRWEx4NEVkMjZkVU50YlMwVUNvWGtRRGgrL0RoNjkrNHRIVTljUTlIUjBkaTBhWk5QTzdCOHpPWGw1Y2pNekJUSEtqM0E1Q2FPcUtpb0J1cjhIdzVzSlNVbFV0TVZiNmJtYlZQekZkTHh6anZ2cU55T2dqbi9KRUI3NzczM01HWEtGS3hhdFFvalJveUFTcVZDYkd5c1ZBK3J1TGdZdTNidGtrcnNUSnMyVGZLazVlYm00cXV2dnNLR0RSdmdkRHFoVnF1UmtKQ0F0OTU2QzdmZmZqdmF0V3VIL3YzN0l5WW1CbHUzYnNXT0hUdHc0c1FKbkRselJyS3hUWm8wQ1FzWExzU0REejdva1lQWHQyOWZ2UExLSzNqMTFWZlJ2MzkvN05peEEwbEpTWmc4ZVRLT0hEbUNiZHUyWWM2Y09haXBxWUZhclphZXZtTGxpT1hMbHpjNDEvRHdjQ2dVQ256MTFWZG8wcVFKMnJWcmg1aVlHRHp3d0FPWU0yY081czJiaDdxNk9telpzZ1gvL2U5L0x6dHZqWTJoYTlldUlJVGc3YmZmUmtaR0JwWXRXOWFnU3NXMWVwczNiTmdBdTkwT2p1UHczWGZmSVRRMEZJTUdEY0w5OTkrUEpVdVc0TWtubjhUZXZYc1JGaGFHdExRMEVFSVFHQmlJdG0zYklqazVHVVZGUlI3OUFEWnYzb3podzRmN3ZObDlyUWZBMVUxcThPREIyTEJoQS9idDh5eUFtcFNVaE9MaVl2end3dzhJQ0FpUUFNSmJGQXJGUXdzWExuVHUzTG56L2YzNzl6ZXdpN3JmODRJZ1NIRnVsRkxpY0Rnb0lRVHlwdU42dlY0Q3R0VFVWTHo3N3J1SWpJeUV6V1pEY1hFeEFLQjE2OVpvM3J3NUZpMWFoUEhqeCtQWXNXT3dXQ3lZTzNldU5BOWR1M2FGeVdUQy92MzdzWGp4WWdCQTE2NWQ4Zm5ubjhQaGNPQ0hIMzZReHBlWm1Zbi8rNy8vdzN2dnZZZFdyVnBoelpvMVVDeGR1dlFQdXptcnFxcHd6dDJqUU43TTJHQXdlQlNJOUU2VGtzZXByVisvZmduRE1BditTYUQyeFJkZllOU29VVGg0OENCYXRHaUJ1WFBuUXFWU0lURXhFWW1KaWRpM2J4L2k0K014WWNJRVJFVkZJVEV4RWExYXRVSlNVcEtyRnBWU2lSZGVlRUh5TENvVUNuVHYzaDFCUVVIbzBhTUh6cHc1Zy9UMGRMUnIxdzRxbFFxSERoMUNXbG9haGc0ZGlvU0VCTVRFeENBakl3TldxeFZIamh4QnQyN2RjT2pRSVV5ZlBoMEtoUUszM1hZYmNuTnpjZlRvVWJScDB3WVRKa3dBd3pCSVQwOUhVRkFRZHU3Y0NZdkZnc1dMRjB1OUt0ZXRXNGNtVFpwSUhqcTVNQXlEWHIxNllkKytmYWlvcUVCYVdocENRME9saXJLaStqWnIxaXlKcVFRR0JuclU2WXFMaTBPTEZpMGFIUU1oQkNOSGprUjJkamFPSHorT2lSTW5ObWd5MHJKbFM4VEd4dnE4SmxGUlVRMDhkOXUzYjRmRllrRzNidDFnTUJqZ2REcVJucDZPOVBSMGhJV0ZZZnYyN1lpS2lzS3p6ejRybGZTSmlJaEF0MjdkRUIwZGplam9hR1JtWmtxZTZPZWVldzZQUC81NGd5ait4dGFEbkR3MGI5NGNBd1lNOE5oUHE5V2lZOGVPMkxObkQzUTZIVHAxNm9TQWdBQW9GQXAwNjlaTityK3dzREIwN05neDQ4NDc3N1MvOU5KTHAyV01UMFE0S3FxY2NpYW5WQ3FKNk5RS0NRbnhxS1JDS1VWa1pDU2FOV3VHRXlkT0lDa3BDVmxaV1VoTFM0TldxMFZXVmhhcXE2dHg4T0JCeE1iRzR0NTc3NVhVN2Q2OWV5TXZMdzlsWldWNDl0bG5KZTkxdDI3ZFVGcGFpcHljSEV5YU5BbXhzYkhvMnJXclZPcnE4T0hEcUtxcVFueDgvQitYSzZyVDZaQ2RuZTNCMXJ5ekNyekRPdVJ4YW1Md3JUdE96UzkrOGNzTkVMUFovTytRa0pEL0FiQzVLNE00QUxDUVZRWVJjMHVWU2lWMU0ySXE1cFdLU2ZNUkVSRlNYbWx5Y2pKU1VsS1FscFoydzVMbS94QlYxR2F6U1IzYUt5b3FVRnRiSzdYSHU1ejZ5Zk04NUdsU0RNTXM5aTgxdi9qbHhrbHdjUEJjblU1bmpZaUlXT2RtWmhUdVdEYXY5Q3ZxSW5YRWxhTkZDR1VZQmd6RGdCQUM4VytsVWdtVlNnVjNjajA2ZHV6NHUydmsvU25BUmluRitmUG5VVmhZNktGK3lxdDBpQjVRZVpGSXQ2dVdFUlBhM2JtZi9vd0N2L2pseGtwQWVIajRZMVZWVlphNHVMaXQxSlZjNm0xdmc3dUhndUIwT2tYUHFBaHlJSVJJZGpaeEV3Rk9vOUVnUFQzZFp4T1hteHJZNUtBbU5qSVdIUVVXaStXeWxXOEZRU0EybTIyWXUwcUhQL2ZUTDM3NWN5UW1KaVptWmtGQmdiRkZpeFlIdkpnYkJVQUZRUkM5bzVBQkdoR0xWNHFiSE5SRVlBc0lDSkNhS3Y4bGdLMndzQkFYTDE1RVdWbVpUMGVCM1c1dmtGVWdDK3RnVENaVE4zYzlOWC9wSWIvNDVVOFVRa2hLY25MeVE4ZVBIOWQzN3R3NXg4M2NSSldVaW4wUlJOWUdtWU5CVkVXOUdadFNxWVJhcllaYXJaYjZtdjVSY3QyOG9sVlZWWkpkcmJ5ODNLZGRyVEVQcUZqT096UTA5Q1ZDeUVEL3N2S0xYMjRLY0dzYUV4TVQycWxUcDlOZmYvMjF6UTFla3FjVVBtcTJ1VlZTOFcvNTU1Qi9Mb2EreUh0Y1hGZkdkajFhaDVuTlpwdzVjMFppYTJJT3FIZWJQSWZENGVFQkZkWFB1KzY2U3dIZ21mcjZlbjg1YjcvNDVlYVM0Wm1abVRVcEtTbXZYYmh3UVpBeE4xZjZnZnNQOXl2Y1dRbkVuVUlIK2VaME9xWE5YVFVFN2RxMSswUEFUZmw3YXo1UlNwR1hsNGZpNG1KVVZGUTBzS3MxVnRMYjdTd2dBSmhseTVZdGNEcWRONlR4aXRoVDBidnF4SlhFWXJFZ01GQUxRaGovVXZmTFA0MjUzYjExNjlicWxKU1V6OTA0SnNqQmpSQVJ4d1RLOHp6aE9JNjZhUnNWdmFSeUZkWGJZOXErZmZ2cjdreFFCZ1VGL3E0RDVPWGxvYmEyQm5xOURtYXpDVmFyQlhhN3BITEtLblE0aVJpZExQZUExdGJXVEhVN0MyNkk4THdUVGllUGF6MXZuVTZIeU1pSWErbzVhVEFZRVJJUzdET1MzQzkrK1N0SlVGRGduUHo4QzVXMzNKS3lGWUEzYzVQK1R4QUVnZWQ1T0oxT0tCUU00VGlPS3BWS2lhSFo3VFpZclJhWXpTYm85VHJVMXRhZ29xTDh1cmJ1QXdEbHRkeW8zbEpXVm9heXNuSlVWOWVndmw0SGc4RUlzN2xCandJM3VFbWdSdHhVbGRUVzF2UU5DQWg0Qmpld0xwenJhU0hndDV5M2FBQzlXakdaVEFnTEM4WHZtV08vK09VbUVXVjhmUHpEeDQ4ZnEremN1Y3N4WDh6Ti9Vb0VRUURQODVUam5HQVl6aXZrUXdtVlNnMjFXZ09OSmdCYWJTQ0Nnb0lSR2hyYUlDZjRkdzIyc1dxWFY1TFM4akljUDNzQk9uZEdnY0Z3S2FuZGJMYkFiTFdCdlFSc0lsc2p2Q0FRS2xDbXFLZ3dJU2dvYUQ2QWxCdExxeGtwenVaYVZXNTVjdThmdGM4ZklmcGplNkJvbG9HUXFCc1RGa2c1TzZ3MTlWQkdSRU9qVlFOd29tTHJKdGhzZ0twcEd5Umx0UGxiM09tL1pWNXRoVG13T0tNUm5STFh5SC9ZVWJYak1DSnY3UWVWbStnN2lrNmo3RmcrQUlMWVFhTVJITXBjeDdGRUlEb2w0V3AzdWFWMTY5YjNyMXk1c256YXRHbmxBTVJBWGZHVmlwNVNudWZoRHRxVlFrQXVlVWN0N3RBUHRic1RsaGJCd1VFSUN3dTdwcVl3anRKY0dJeGF4TFpMYW5CT3ltdFdrNmdWaXo3WWdQMUY1U0IxWlNpdnFVZlh1RkFvTFNaWUxHYVVsSldoc040TXd0a2dDRUNJRXNUcGRNTEpjY1RCT1FuZ3NxdTlrMnQrK3JuNCtDSGtUMWlRbE9LYTFVTXhQKzVhOXZzdCsvd1JVdkxaY2dSTi9neGh2UVAvOE4rcTIvWVpEci95SmJUTldzQlJWb0JtODk5Rm0vNUpVQVVFd25KdU44NGRxRUt6ekhaL0MyRDdMZk5xT0xBR2hmcE14S2FPYkl6bkkvKzl6eERZOTFabzNFU2ZVV3FnMWdiZzR0c3ZRSjErRzBMREc2Nm55dTgvUnNEdGFRaUw4UnhMd2Z0TG9lejFHSkk2UkRiWXgzemlSNVFZT2lNMk5mRmFOSjRCNDhhTks1dzJiZHBiTXRZbXlGZ2I0SXB6ZzFzbHBRekRFSVdDb1E2SEFrcWxheE16RWRUcVMyMytnb09EMGJGang2c21BcGJqbTNIMlZCTGkwNW8xT0tkckJ6YW8wVCt0RFhvMkRVRmhvUnE3OXBaaTd6a2R1a2NvWU5iWDRXS2RGWW5oZ2VEdFFFVjFIVEVybFZBSVRuQ3VDR1ZDQU1aU20vL1F5RGYyek16SlRFWEhHNXhiSURkaS9qWTFsdm5EOXdFRVVEQnc2cXZBMFNBRVJuaDZqU2dFRURDd1Y1VkQwSVFqTVB6U1lyWlhsWUpYaGlJb0t2VFNEcXdkb0FUT3Vtb0ltakFFaEhxbXREaU5kYkFaSFFpTWk0ZEM5ZHRCbUMvZGovMkxWNkxIMm8xbzBpd1VFR3l3MW5OZ0dBM2lCNDlBTUZPTy9BS0xqL2tRNEtpcEJzY3BFSlFRQTgrSEhROWJlUVVFVlRBQ1k4STl2cU1PSzh4VnRkREV4RUd0MWR4azgrcjduQWpQZ1RvRlVLc0JOZ3NRSEJmaE9UNW5EUHArK3htSWJJNjB6ZHFoZWJOMnFQeG9DWUNHYTVjNm5Xai8zQ29RWmNQUHphY09RTmxxT29nUURpaVYwamlvNEVUODdmTVFML3ZzMGpBNFdNc3J3RVRHSVNCUTAyQ3Q4RWJIZlZVVlZZVnhUZUxXQStCOXFhU0NJQWlFRU9wME9zRXdCQTRiSllRdzFLWEJLS0ZVdXRPc1ZHb0VhTlJRT096UUtMVUlEUTExMjlzRTJDckxRUU1pUGE0REFIQzZLbkFrQkVUZ1FKMjhOQi95YzFKZXF6ZWlvcUllYWs2UGtxcEsxTlhWZ3poWjJNd21XTlFxMU9vTUlBb0NjQzY3bW9KUWNDd0xFRXFvcTZZNnNWaE0vWlRPdXZrY28wU3drb0NRR3cxc2x3RHV0ekMyYTludnQrd0RBT2VmbVlpTHVTb3dTaVdFeW9zSXZuMGgrczRkN2ZyU2VBcnIreitEcEdFeHFEeWxBOHc2ZFBqa0p6UkxNdUxRZlZOUlo0MkV5bElHa2pZUnQ3NDZHeW9Hb0U0T2hXL05SN0ZLQVh2QkdjVFBYb0h1ZDdrS0VoYis1MUdjM0ZTQ2lPWVJNRjZvUThaM0d4RXJQZHdkT1Bua1RLZ0d6VUs3ckM1WFhocy9ySWVxK3dRa05IZXJFNHBBQk1ueVJ3Z1ZRSG5CYXo2cXNYUHdlTEF4TGFHQ0FTWmRLUHF1K2hDUk1ScFFVekgyVExrSDl0Q1dVQXM2MkJNR0l1dFZWMGsrL2U3UHNXZlJKd2h0bXdKNzJVVWtQL2tKMmcxc2ZwUE1hK1BuQklHSDhlZVYySDdnS3pDV01xRDFuUmo0eGl3b0FWU3UreTlPZmJrRCttTjFHSHhtTHlLOXNacmpBSGl1Si9ic3o5ajkvRWV3blA0VnJkL2VpN2EzTm5HcFpNYzJZZC9MWDhDU1V3SlM4RGpLUDlFaStyWkgwR1Z5UHdCbE9IRDNrOUFWbmtmSTdZdlIvK2xMcGRydHVYdXdlOVlpTUUxYWdTM01ROXhETDZIYlhYMTlyWldIOXh6SUx1elhLKzJZU3hXbEFrQUVVUzExdTBrSno3SncydTFVU1Fqc09oMzQ2SGczYTFPQzZNdFE5UXVMV3BVZFFlcGdYRlQraUlCM1hrQ2d2UXg1enp3SE5yUVpVSDhSUVVQbm92Y1Q0MEFnNE9KcnMzRnlZeUhDWWpYZ1dBZEltMlQzZkhpZTB6VUJtOVZxbGNJNmFtdnJvSyt2eHZIQ1NzUUZoN3JhYzluc0lMd0FvOUVHbzhOSkZGUUFGU2loREFoRHdJeGJzaUw4a1RVN242cXYweWRNR3o4WUtlby9ReEg5YmNEMmUvYTdaaERsblhCRzlzS29qNTRDTWVYaGg4enhxSmd5QWdueFNoZXZxRGtGUmVabWpGN2VFUUFMSjZ0RTFlbzNVYVhxaDlIZkw0YkNhY0N1SVpuSTJ6TU83UWNrQXJ3VHlyUXNESDV1Q3B6bGU3Rit3QkswR3JjTEVZSFZPUGZoWG1Uc09vV0VPQUJPRmp3amY5Z0lNSnc2QWsxNzNWV2RnK1hDQlFRbjkyejhmNmtBd2VrTmJCSG9zMzQ3MUNFdTZwNzN3aFNjK1dvWCtqNDJIT1lEUDZBK2JEREdmZUVxaE1tenJMUnY0ZWNmb05uVG42SFRHTmZUbldlRks0N3h4czFyNCtjRWdZY1Z5Umo3N1p0UUN3YnNITlFEK1lmdVFKdWVzV2d5Zmc2YWpCK0xIOXBNZEFPWTEvaWRIRUE5Z1UzVGJqQ0dmalVZUis3cUJ0QkxheTJ3NjJnTS9XbzBqdC9mRzZvNzMwTGEwR1Raa1JMUjU4dXZVUEwrWTdoUVQyWEhzK0xJWTNPUXNPQnJkQnpjR29McFBEYjNtNEg2TVhzUkZkSmdyVFJocVdMYXNtWC9MbGl3NEJtQlVnaUVRSURNWTBvcEJRVUV5aWlnMEFaUUZaekVYRnREdGFHQlVDanNJQ3dMYzEwMTRvZVBSR3lMSm9pTGprWnRSUVYyL3VkVkpJMThHY05uRFFHY091d1lPQUNsNDBhaXFmb1FqbjV5QVVNUGIwVjRrSURqOXc5R2xmU2c5RHluYTNMWEZSUVVvS3pNblFOYVg0dURKODdBb1FwQ3NzSUpzOWtPam1VaGNBS2MxRW5BUzRudEVBUVFRYURFa2R6cHlibjkydzJ0THptUFY3Y2Z3YWpVRVloVHdTOCtKTFpQTDFlbm5aQldpR2tEMUo4cVIwSzhlM0ZxVW5ITDZJNlNhVUNwQm5RblR5S3U3NU5RQUlBeURFMTZ0MGYxNmRQQUFKZjlKSzZucTRxcE1xRTdvcUl1b2o3ZmpvZ09rWWp2R1lrakQweEQ4cEIraUI4NERQSHQ1ZmFXUVBULzZkUWZmS1lNcWplK2c5enZkc05tdG9PdExrS0l1NXkwTnEwcm1GTVBZTmNjQitKNmRFWHl5SkVJVXJ2bnAyY3ZIUGpYTERqUGprQlVqMzVJSHREbEpwcFhaYVBuQkFCUm1abFFNd0NZTU1SM2I0WDY3R3lnNTAyUWNHUEtSWFcyRFlxOTMrRFlRWmRxVHAybDBCV1lFZFhSNTFvWk9IdjI3TE1MRmp6enNWc2w1YjNzYmRTTjBKVG5lVEFxQmdMbGljM09VcVZDQWNKeWNBWkdRQ0FzakVZak5Cb05BbXNLVUgrc0NIejBlaHlyL3dVVUFPdDBvRDZuQkJHcU0yRFNNaEFleEFCZ0VOKzNKNnJPTkxhcXJ0WlFXbEtDMHRKU1ZGZFhvYTZ1RmtkT25FS0pRNEhXb1VyWTdhNXFIVlFRSUhBY0dNSkF6UUM4UUFsQUNhV1VtZmI4ZjhaTkhkcm42WjdONHpHeWJ4KzA1d3F4cmREaVI3Qkc2Y1ZsdnRNRzRmZEZrQkQzbFZlaTgwZmIwSHZ4ZEtpNU11d2ZQeFI1eDJwKzgxR0RXamFIc2FENG12YXg3RitKZ3grZlJKZDMvb2VSVzdhZzYvMUQzZG9Nb0V6c2dkSDdma0xLa0U0dzdWcUZIMjUvREt4N3Y2WVB2SXdSWDY1QWVId0F6aSs1QjRmZTMzSFR6T3ZsenNublhvemlKbGwwQXFDS1JQeklMQ1JtWlNFcGF5UjZmTG9XVFc4SmJIU3RCQVlHemlvcEtlNExWeVVlRGFWVURWZjRsb0pTcXFBQVF5bDE5eXJsd1FQZ09CWXM2NENENDhCQmdOVnFoY2xraHNGZ1FGMmREanFPQWR1cUxVaVhMa2pLeWtLWE4vK0hsRjdYRmdweVZjQm1NcGs4ZW9BZVAzVUtaNHdVSGFJMFlPMDIyTzBPc0t3RENnQ1V0Uk9ISzJhTlVFRWdCR0NxcWtxVFFnUFZUeFRWR2x6VFp6ZWd4RUlRSE9DUDcycE1xdmNlY0JrclRIbW9PUWRFZHJ5OFN6NGl2UU9xOXU0RkR3Qk9BeXIyNXlCU1ZtRzI2dUJlbC9HMy9GZlU2Vm9ocWtVQUFCYXNSVUJVUmorMG0vY3NVdnJGd3BndjcrTE5JdWYvNXVEODlxdGpiUW1qeDRIZHR4cGxCUWIzZldLRnBkcHd5ZTBVR1FtMnJBUk91WG1qckF3QnJkSVJIaE1FQ0JhVS9iVDNrcUhhWkFMQzRwQTRhZ0s2djdZVXlwSnpzTHAzWmswbUJOM1NDU24zUG94T0Q5NEcvYm04bTJaZUwzZE9BRkMzYng5WXdYVzh5bC96RU5raDdlcmNkcEhoc0Z5aHNZbTNLRFVhc0hYMVYvZlBJVzBRMjlvR3F5a2NzZDI2SXJaYlY0UzNhQVpWRUhQWnRkSzBhZE43di9sbVRSTVIzQUJJNEFhQW9RTFB1T3h0VHNJVFFIQnloR1U1T0RnbldONEptODBWdE9zQ053NjBhU0RLQ3F0Z2l3aUh0blVxb2xxM2hEb2tFRUdkT29CbUg0YmVJZ0J3b25MdndjYlArMnJPMTVYWTdpNFlXVk9LQTNtVnNMRjI3Q20zUVdEdGdBQWtCQ25ocENBcXh0VzlCdFJWaDQ0Qm1LaW91SG1QanV6ZDdZRnZOK0xva1Jqb2EydVIwTEVuUmlScC9BaldpQ2hxRCtMSGNYZUFyNzZJMEFkZWNOdUJHcGY0T3g5SDNBOTM0b2NSSjZDeWxZR2tQWVJXL1MrcGxkekpMZGc2Y1N2c0JXZlFmTWxiY0RtYXFyRnIyRmp3Q2FsUW94NUc4eTBZT0ZRZWlzR2hjdE0zVU1jT1IrdkJIYTk4RXlYM1I3OS9UOEgrMi9zam9FVUxPRXFMa2ZMU2FuUVk2bkltYUxxTVJLdVdYMkY5dDk3UWRCbUIwUjhzUXRTZ1NWQy9kUmUyVER3S3hsYVBnT2hMRGdEendmL2g1OFZmSXFKTkM5Z0t6aUI2NWdLRXVhZmg3SUk3VUhSUmk1QVlOWFM1MWVqNndlTTN6YndLbHprbkFOQXF5dkhUN2VQQVdNckFkSG9NdDJSRUFkRGg0RDMzUUZmdmdORlFnUVBqUmtPcGJZRSthOStFMk1LNjlkejUyUG5ZT09RdkRVYjdsNzlFcTU0SnlGdnhLUEwyRk1HYVd3MVNjaThLWDlNaWJmbi9rTnpldFZmeVBROWoxeE9Qb095VEVNVGQrVFF5cGc5RzdkWjNjUGp0TFdBckw4TEIvWXJOKzFlaXlYMEwwWGw4VDNSNzgzWHNmbkFxU3Q1TGdaS3JoZG1TZ0NFL2ZZemd5NndWUWtqblVhTkczUUhndnpLVmxIZlRWSUZTU2dXbmt3b0FWU3JWY0RxZDREaU9FSjZubkVCaHQ5dmR3YnV1eWg5UlBRZWdhdnRLYkR6K0UzSWlBeEJsRFVQZkRkOGpKcjR2dWo3UUVqOFBHNDdRV0MxNHFuRTFEQVFhbkJPaEdtblFnUUFBSUFCSlJFRlVWTGlpQ2lvbXVKZVdpdVdJNnFEWEczeDFtWEludUhPRTV3VkNLVlhZN2JhSktwWHFmeTdyTDRkeWd3VWFiUkNpdEgrT2NhMjZ1aG9zeXlFeDhkcW9iWFoyRGxKVFcwbTE2LytvZlFEZzdGT2pZZW02RkIySEpZSVRnaEVVRlhUVis3ckNFa0lRRk5VdzBORlJVd2toSUJUYWtFQVA5Y05XV1FrblZBaU9qOEgxY09kUTFncHplVFZVTWZFSUNMcUtlQjZCaGFtNEV1cllCR2dDbFY1ZldXR3BySVVxSWhZQklaN0hZZzAxY0JnY0NFeEloRUo1azgzclpjNEpBSGhMSFd4bXhpdmM0MllSQWRieVVsQk5CSUtpUXE1NnJaU1ZsYzFOVEV6YUJjQUNWMmx4TzZXVUpZUnc3ckxpdkhkSmNhMVdpOERBUUFRRkJTRWtKQVRoNFdHSWpJeENiR3dzNGtJRDBheFpLM1R1bllua3BFdEJ1R3hkRlp4TU1BSWpnbjRiWTdOWUxDZ3RMVVZWbGJ5Mm1na1dpOVdkRDNvcGJjcnBsSEpCaVNDNGduQkxTMHZpVlNyVjNFdVBTeFVTSXNQaGw2c1RkVVFjMU5lNFQwQmM0OEdXbXBoNG45WUliWHpDZFIwM1VRY2k1RnBxYlRGcWhEUlBidVNyUUlRaysvNU9IUllEZGRoTk9xK1hPU2NBVUFSRklUam9abDE1REFJVGtxOTVyU1FrSkV6NzlOTlBjdTY3NzM0ZUFBOVFpYlhoVW9GS01aZVVLaFFLd3JJc2RXVWtLS0JTS1dHeHFLVE9Zb0dCV2hoWU84cEtTeEVWR1ltZ0lOZUVxYU91ZlAwdWEyTzcxSVRGMVRKUEJEVlhhVzhISEE0V0hPZVJNaVY2UWdtbGxNVEZ4VDBPb0tzZm9xNU5FbWY4SDFKdVRmRlBoSDllLzFKQ0NPbDB4eDEzVEhEYjJUU1VRdTVJWUVSY2tHVWxnT000d25Fc0hBNFdkcnNETnBzTkZvdlZuU1N2UjExZExTb3JLNlhXZlZkdFcyenNpOHJLU3EveTNpYVl6UmJZYkZZUHBzYXluRlJqU1JCNEtjSGRhclVNWlJobXJ2OXlYN3VFdE83bW53VC92UDRsSlRBdzhNSGMzUE5IVTFOYkh3YmdkREczUzdZMlNJbnlVcm9WV0phRFFzRktTZkkybXdwbXM5cWRKSzlEVUZBUVFrTkRFUkVSZ2ZqNCtLdmtuRDZFNHpndkZkUlZXODFtczhKbXM3dTlvS3hVMmx1dWdsSkt5YjMzVGxOb05KckgvWmZaTDM3NTUwbkxsaTJucEtTa3lEMmtLamVKWXVBTy94QUVNUVRFQ2FmVFNUaU9BOHVLck0wT204MEtzOWtNZzhHSSt2cDZWRlZWbzdTMEZGZGJQOUluc0xsQ082cmNLcWhCcXJObXM4bVpHdXZSQWRwZEpaTlFTcGtQUHZoZ05vQkIva3Q4N1ZKZFhZM1MwakwvUlBqbEx5c0toYUwvNGNPL2pCYUJqVktxRXNHTlVxcWdsREx1NnRseWxWVENGWWZEQlc2WDZyWVozQ3BwRlVwS1NuNGJzQmtNQm5mUGdocm9kSHFZVEs2MmVXTExQSG1OTmFlVEkvSXVVd0JJZlgxZHFrS2hlTXgvZWYzaWwzK3VSRVJFVE51eVpYT1NGN2hKc1cwQWlDQUlNdGJHU2F6TlZaRFM3cmEzV1dBeUdhSFQ2VkZiVzRQeThuSVlESVpyQnpaNWh5bFhlVzhMckZaUFVET2F6S2cxbUtBM1dXRmpPYm5EZ0JFNDY2eFhOdXhNWExCdUwvYVdtUzRkMkduSE43c1A0Y212dHVIZjIwK2d5a0g5Vi85Nmk5T0MydFBuWGNHa3YxTXFWcitBZys5dnUrNUQ1Q3QveFk3Wnl6M0dhRGkySGNlV3pNZSsyWE54NXJ1OUVIN1hMd2pRbjlpUDh4KytneE52cm9URDY3dXFyU3R4Y1Baak9QTEtoN0JhWmIva3JNTysrMmZDNUUrR3VWN1M5TlpiYjczZERXd2VRYnNpYS9OMEpIZ3lOeEhjckZZYnpHWUxqRWFYU2xwZFhZMnlxd2hTOWdDMnFxb3FWRlpXdWhMYzNYRnFMaFhVSnJPcjJXR3cyTUVRVnlFUHdja1JweXRtalZnTkZRTm5mN1Q1WVM0cUVTTmIvajk3NXgwZlJaMy8vK2ZNbHV4bTAzczJnU1FraEJZZ0dDRFNJUUtDb0tBQ0l2WUduT1c4czVldkRVODV6M0xxejNZcWxrTlJFYkZncEJjRlJLUUhDTTJRaFBSZU45dG5mbi9zSnRrVVVoQ1UwM2s5ekFPem01bjV6T2Z6bWZlODYrdHQ0S0gzdnVGQXZXc0xmNVQrSFV0emJNd2RNWWpnMmp4dVh2SHpyOXpBQ3RyQWRKUXQxejdhVkhiMHEyUmtYUm1XeXRxelBzVGpMejFMOE1VejhTd2l5dmxpSlg3REp4RTNZeFRaajk5TTVvYmNYM0dGS2pKZmVJWHF6RDFrdnZweGk3bW8zdncyUC96amE2TG5Yb2UyYUNPYjdudTF1Y0pLSFV6TUVDMEgzdCtnN0tPekJKMU9kME5tNXVIQkhscmI2YUtrTGJTMmx2NjJ4cW9FbDBsYVhsNUJjWEV4SlNVbFhSZHNoWVd1Wml6VjFWVXRURkNyMVlMTjFpallKUHk5dFlKV0ZCQUZCTkZWeGk4QVl1SEo3TnVQK01WeS82amVqRW0rZ0xrSkFpdjJGd0JXTmh3dTRkWkpJeGthRThIOFMwZGdQM2FVZzJabDhjOFdpcjVld3Y2WGx1S29POG5oeFl2WnYvaDVxaXFrUmlsRjFwdlBzLzJPTzluNzhoSWFURjE3cGNoMWhSeGEvQWpiNzMyRWdveDhUNmxIOWpzdnNmMk9POW45MHBLV21rK0hndmNJeDlhYWlKdmNwOFhIZzU5NWc0UkxKeEkxY1JhUktTR1lDb3QveFV3RU0vS2o1YVRlZncydEt6Q3pQMXhLN01LSDZURnFHSU1XUFlMOXUvOVM1bUhWUk0yK25PTC92b2RGZWVPZU5mVHUzZnRLV2dZUk5CN21hS1BXMWxSTDZobElzTm1zV0swdFRkTHE2aXJLeXNvb0xDenFtbURMeTNNVnVMZU9ncnBNVUZkYWgwZVQ0K2FBZ1N1Q0sxb3M1cm5IeTZ1bkowU0U0R3lvNTFTZGxjU0lFSTZYVmdGT0hKS01TdVcrbktoQ0pkZHpzdEt1clB4WmdrLy9ZWVNOR1lLb0NTSTRMWTJ3dExIbzlhNzVQdkgwQW83dXFTSCt0bHZSNUc5a3c5MHZka2xiTGxyeEdlb2gwNGlkRU1kUDE4eWp2TUlCT01pNGV3Ni9aRHBKV0RBZkgvTWVOdjcxMzEwNlg5M1BQMkJQSEk3ZmFiSXJpNWN0SWp1M0YvMHVIM1lPWnNoQzlkRTgvUHNuVW4veUdEYXZSQUlpeXFuSmFuYVhpQkVwQklsN0tjNnlLUnZxTEVHdFZsK2NuNTgzbXFiY3RtWmZXMk5ESnplZGVJdEFna3U0MmQzNWJXMmpwS1dsSmVUbDVYY3MyR3cyRzhYRnJsclE2dXBxdHduYTRCRUZQVTE2aDlNcHlMSXMzdkhRWXlxTlJ2TVhzODJHdDFiRnAydldjczJLbjlGcjFOVGFIWUEzSStLRFdQRmpCbVgxRGF6ZHVvOWNXY0JzZFNncmY1YmcyM3NReG1GSmlMb0FJbEpUTWFhbW92TUdLQ043NVM2U0huMmNpT1JrQmk1NkZPZTY1VlRVZDM1Ty82bFgwM2ZLS0tLbTMwYjhNQ2M1R3pLUVMzZHliS09Ub1l2dUlpZ3hrZmk3NzBYY3NZS3FoczdQVjN2eUpJYm9tSGEvYTlpL2dtMnY3U050K1JMOGZNOEZsYm9KbXhsVW1tSzJUQnhMWm5vdWFqMDQ2anpOQmg5OFluVFVaUlVyRytvc0lqSXljblpLU29yT3JiVzFDU1EwbXFYdHBYKzR0TGJHS0dtRDJ5U3Rwcnk4bk9MaUlteTI5bDlDYXBjSld0aWlINmlyL3JPeFpLcFpXMnRNeEhVNm5hNDJkcElrQ0lJZ3ZQTDBZL09CVkwxV1M0UEp5ZFhUTCtFU3A1cTlPemZqcDNIVmhONDJZd3JXdFR1NWZXa1dBL3YwWlh6UUNid1Zkbzl6RDBjMURkWCtlSWU1MVNUdlVQUysxVmdxZ1U3NjFCbzhraUgxeGtqS0s4dHhsTlppdFJTeTY5WWJtOVI5cjZRa3NBS2RVUC9MT09BME5Pa1ZPN1lSY1BGc0FrUFBGVmU4QWEwZW5QWUlKdjYwRDAxSUVEOHNCcld2dnUyZlNrNWwzNXhGaUtJNGJNMmExWk5EUThPK0JlenVId2R1V25GY3lidUN1eTlwazV6eDFOcTBXbGNnUWFkekJSS3FxaHBOMGtKaTJ5bmZVNXZONWlZNklsY3RxR2VUNDViNWFnNkhRM0FMTmNIdWNBbTFqQVA3L1ZRcTFYeUFQcUdCL0hLMEhORnJNS0hBOGVKeUVudTRPaEpwdlFPNDUvS0wzUzZhUWlaczgrWCtVSVZsOHV6dUlBRkJjcmFrSEZNSDRCMVFRME9wRGVLMFlDckRYQmVBTHFnTE9vNkhyOHRjV0lSK3NCRjFtQUV2UXp5alB2NFVRemZmUzM2UmNaZzN0SitIRkRUeFdwSnNvZTBia1NYNTRCMkl6dmZYRkZmcUNPamZnNXJNNCtndUdBYW1ES3BMd3hnUTc5dkNYRzBvTUJFU0Y5bnVHSnhhZnd5QnZzbytPeFBQWjNEdzdFY2VlZmo3WjU5ZGJBUHNzaXc3M0F3Z1RyZlcxcUoxbjlzeWxKdWpwRFozbExUUkpLMmhvc0lWU0FnUEQwZXZiL21DRXB2b2lLb2EyK2MxZURROHRqYldndUp3TlByV0hOaHNEZ0FCV1JiMjFEaHVYYmIvVkgrQTJMNTk2VmVidy9QYlQ3QmwvMTQrelpLWmxld3FIaTQ2bGN0SGUwNnc2ZUF4L3I1MEU0TXVIRXFjSXRmT3NsSVNnNi82QkpudmZVSGV1ZzAwbUFCQ2liMWlHSWVlK1FmRkdmczUrTVJpVkpQbkVPelQrZWxxMW43TTBUWGJLZmoySGJMMmFPZzVzVDlDV0NwOXh0cjQ4ZjduS2Q2ZlFkSG1OZXgrNFowdXBaajRqUmlKa0xrSFV6c2VpTXBOS3ptK2VuZTd4KzI1ZGd6YlgxN1Y1V2tvK3ZZampueStBYWU5bkt3UFBpUjcreUVBZWwxM1BUbHZQRVB1OXpzNThQaXphS1pjUzZoSEViMWNjWUJ5MHlBaStyVFZHZy9jTVlYdm4xMnU3TEV6aENBSWZlKzc3NzVKdEsxRzhFejlhSkcwNjNBMCt2V2JUVktMeFZWTFdsZFg1ODV0SzI4M2tLQ2FPL2Nxajl5MUttcHJhOXBwZW16RlpuT0ZZcDBPUnhON3h5UHZmUmFrOXZaNTNTcHFnNFpIQjRIS2k3UitVUnc0bGtWR3BaTTdMeDNITUhlZlE2Zk53cGJNYlBhWDFESXdhVEFQaklubjkrQU5OWmxNT0owU2ZuNSszVHF1dExTTTRPRGdidlVJUFpOanpuUjhydDNqalhIU2haaU9IcVFodndqRHdBdlJld3NFajVtTXF1d3dlYXUzSU1hT1pQaWpmMEhiaFg0VHdlTW1ZenV3bHBMTVdnWSsvVS9DWS93QWtmQXBNMUNWSGlRdmZRTzFoYlVFanh4TFVGeGs1NVJIK2tqc0dVdXA4UjVEV0srV0xDK1N0UUYxV0N4QmNhMXFBYVZpRHYvemJZeDNQRVpZYk5lWVlhcCsya1JEclphdzRRTVJHa3lJZmowSjdtMUVGM2NCSVZGMlRxV3ZSWWdlemZCSEZxRFZOSSs2NkpQWGFPZzFuY1F4N2ZjOTlSc3dqT0Q0U0VWS25hbk9yTk1aTlJyTitrMmJObHR4MTQ4MlVva0xndERZV2Q2ems1d2dpZ0tpcUhML2lPNE9WeXAzbHlzMVdxMFduYzZMb0tDZ0Z2Umd3amZmZk8zUnk2QlJ1Tlc2bVR3YWszUE5XQ3lOWEdzT3dlbDBpcklzaXphYjlWNlZTdlhzLzlMa251OThiR2M2dnY4VjJMSTJzUEhwSDVuOHdlTmRlckhaTXI1ZzFTTS9NK1BiNXppbkhsbEhCVnV1K0F1RFB2eVVvRUJSa1VMbkNOWFYxZjhLREF4YWlZdXp6U1FJUWdNdUQ2MU5FQVNISUFpU1NxV1NHam5iZERvdldhZlQ0KzJ0eDJBdzRPUGppNStmSDBGQmdZU0doaEVWWlNRdUxvNysvZnNUSHgvZmJJcDZCZ3pjWkpHTkdocDJ1OE90RWpvRmQzcEhVK25VbmoyN2ZWVXExYzNLVWlub0RyVHhFNW5hUmFFR29FMmF3ZVZmTGVhY2g1blV3WXovWnJraTFNNHgvUDM5cjd6Ly92dDhHODFSZDRSVVJhdFNLM2R1R3c2SEsxSnF0enV3MmV3ZVVWSlhibHRqSUtHMHRKU0dodWJRdk9ncWNxOXZaWHEyekZscmoydHQ0TUNCTndJS3VaV0Njd3RSamFoV2hNMGZ5TmNXLytDREQwNXdDN1oyZlcydE9kdmE1clpaV3dRU1hFWHlya0JDMDdacFdlVGVtSy9XTmhMcVp1NFFBT0c2NjY1VnFWU3FHNVJsVXFCQVFYY1JGQlEwbzFldlh0cDJ0RGF4VVd2enFFaG95cDF0RGlSNGtsSTJGc203MGo4c0ZvdExzTG0wTlZlUmV6dEN6Wk9TcUVsYmUvZmRkNjhEQmlwTGRQYmhJdFZUVWdvVS9LRzF0Z0hidG0wZDB4V3RyWDNOclZHNE5SYkp0MHovQUJCYnBuZllXdmpXbkU2bk8yK3RtUmtYRU5WcTlYWEs4cHhMd2VhblRJU0NQelRDdzhPbnVRVmFvOWFtcGhVWlpXTTFRcU1NYXVscnM1MDIvY1BoY0tCdXJBZHQxTllhODlXYUt3eWFmR3U0S2IrbkFxT3JhMnVwc1l0RUJmclFyZ3ZFS1lPcWRRS0FrNktxT2d6ZXZ2aDVxWlRWUFEySzEzeEtWYkVWTWFRWGZhYVA2ZEl4dHZ3amxCU0s5QmplcDh2WHNSY2ZJV3ZOejhoQStNUXJDSW8rVjVxaWhPUm9XMDBxcU5WbnBTdFdpeXRWNVpLenQ0eGVGM1dEQnJ3dW4yTmZiRVFDQWxNdkpxSmYxK2luSzdhdlJ0VjdIQUZoM2wyK1ZNWFdkRXF6eWhGMDRjVFBuY0xaU3VXVUdpb28zTElOcTBuRWVPbWw2SFcvM1g0MW5kaE5yVFdVeUtTWUxoOGppdUtJNDhlUEpic3B4QnVMNCsxdXJjM3BOa2ViTkRhbjA0bkRac0ZVWDQ5VHE0WFFTTHk4dkZyVmtUWnFiU1dJcm5yUTVnb0REMjJ0VGNBQUVMUnEyOVYzL2ZzRHByMzFMWC8vNkV0R3Y3U0NIYVdOOVhaV252dm9DMFkrOVI4U0ZpM0hzMFRWWWFwZy9pc2ZzZUN6elZ6NjRsSStQRkttU0xEVFFPVmxRRk56aEQydmZON2xZeHIyZmN1K0Q5WjJ6eVFRdFdnTUJvby9lWkhDektwemRqK24zbm1ZbFNsRFdabVN6Q2ZHYUQ0Zk1wU1ZLVVBaK01SSHYrcTgrUjh0NXNpR0l5MWZuUVc3K1BtRi8zYnZSS0lhamNGQTVkb1B5Zjd4ZUpjUHkzN2pNWW9PVlhmdlVsNTZ0R0k1KzU5Nm5iTlhhdTlnOTAyWDhNdW1RNWhMeTVIT0lUdkp3WWR1b3JpdzVRVXFOeTBqODh0ZDNUNVhiR3pzUkU5enRGV0VWR2dkU0hBNm5UaGxHV3QxT2ZXVmRVMFZDV2F6cFVscmM5V1JsaUUyVWhKNUNqVjNoWUZuMEFCWmxvWHE2cXFCZ2tvN2U4R3NtV3gvWUI0cjc3Nk9CL3A3c1dqRHdjWkhrc2tqTDJUVmdvdG8vZTVmOWYyUDFQVWN6RGNMTDJmbE5VTjUrYXZ0VkNqME1PMGlkTUtsOUpxY2VucnRyS0tFMmxPRk9OdVpQMmRESFhYNXBiU2g4WlJzbUU3bFlERlptajVTaDhVVFAzc1dnVkcrcDMxZ0d2SlBVVjlTeGEraEJlMTUyM1BNT3JDZldRZFc0ZWNkeUtpMSs1bDFZRDhUbjdxMmVYaVNTN016NWVkZ3FiTjBycUU0SEppT0hhRG1WRG1TdzBHYjlyaVNqYnFjZk95Mkxtd3lRd1M5WnM4aU5QRTByZVVjTmt6NXB6QlZ0TS9jYWkwdHhGelQwTTVhMUZDYms5OWluUUtIcHhFLzR5Sk9GK2lWTENacWMzS3dObGk2T0xzU2tpT2ZzbjBpU1lzZXBQOWZic0Rnb1VBNlRSWFVuY3B2ZDYvSUFBNExkVGs1WFpvbnllR2dldWNXVERVMjE1eTN1L2VLMnpLOXVLOWhiV2haY3FMUmFDN2J1SEZERHcrTnJja2NiZksxdVZzT3VJUWFndWp0RFJvVkRtZGpMYWtIdFZGZERhVTUyUlJrNTZIMlRPOW9McHR5NG5SS1NGS3p4Z2FJQm9QaEtoQko4dWpnM2pQSUgwdEpJLzJRbWlHOW9xQW1wODBVN3NncVpNSkZZd0VJanVsRlA4ZFdkcFk1dVNSY01VbTdZOUx0dkdvTVplWkl2SDBscXJNYlNIMy9FNkw2dUpydTJnNnZaczJzeldpb3dxd2Z4dVJQbmtldkJmT3hMV3llL3lBcVl5TFc3T05FM1A0dmhsOC9yc01yeVhXNWJKazlENHR2TDdSeUpaYW9TVXg3cGJrL2orM1lKcll1V2s3eUcyOFI3UDhyNytySWwzeXk0SE1TZXRWUlZpUmhyM0l3ZXYxYUxKL2V3L0hTa1Z6MDJDekF3cGFSL1lqOU9Kc1l6UTdXL2UxRkxDY09ZamM4UmZWM0FSaEd6bUhNUFhQYzVtZ1dXNjZiaTYydW51cFNQeWF2WDBIQUdWclo5aFByV0hYTjAvajI3b1ZVZmhJcGJqb1h2ZkVnV3JkZ3luNzFYbkxWS2l6Wm1VVGUvUktwMTQ4SEpFNjk4d2k3bC95RWYzd1F0ZmwyUm42NGpQRFlqZ2RSdmZsOU5qLzRMdjc5RTdBVVpCSHo0RklHVEl6cjhKaTg5LzdCNFc5MlVsdFR4RS96NXFKV0J6RHMvWGNKOW9XQzl4N2hwemUyRVJBWFNIV3VqWkdmZlVwa25HdXhDcGZjejRHZEVtTDJMcHdhYjZ6K3ljejg1SituZFEyVXIvc1B1OTllUTEyMm1ZcDdydWFFUVVYUCtVL1JmL0lBQU16N3ZtYjl0Y3VSS241QjZuTU5VOSsrRnhWUXZXTTVQOXo5UFBvK2ZURWQrNFhFZjd6YmRBekE4T0dwWTRGVGJxM05CcklOQkJXeTdKUmxXWlJBbHB4T1dSQkUxR3FYNWlaTE1vTGtiSkgrMFZCeWdyMHJ2aVF5MmtpSjFJQzZ0Vyt0MFZIbjB0YWFUZEJ2di8xV0o0cmlWUzFYM2NSN083T1lNK215VHJhSGxiSTZCeVA4UkY3NGJBM0pvMGNSN2dObHRXWUk5MUhrVmRjTkdZYTh1d2F0citzQktmcmdFZmEvczVLb0YyNXh6WEsxbHFscnY4U2dzN0g3cWxGa2ZyMmZsTm1KN1A3cjM0aCs3RE1HVGV5RFZIZU03OGJlU3NYbFd3bnU0RG1yMzU1T1ZmQVVydmo0TWRmYnVCVTlqTE91bElyOWg3Q2RKWHRLUHJHSHdCYzJrenJjQ0E0TFRxRHdkQ1owOUFpbXJGakI4U2ZtVWhYM2QxSnZiS25kU3FVbUJxNzltbUIva2QxWERTZjMreXdDcHNlZm1Wc2dhZ1NYL3JnVmpSckF3cllwUThuZFBaL2V3MTB2RSszZ1M1bjQxRHdjaFZ2NWFzSmpKTTdhZ2lGN05Udi9jNHlMTjIvQ3oxZWsvSXRuK09uNTk1bitlc2V0UUxLWHZrdmNveCtRUEtNM0lPSHNnaGJWNCtiSDZYSHpLVllsWE0zSUZTc0lhc3hrcnN2ZzUzK3VaL1MycllTSDZjaC8vVzUyUGZjK2w3M1YvSEtxMm5tVVN6YXRJeUJZaDlOaTZkRGZHVEo1QVZNbUwyRHJoRGlpWHYyY1hyMWJwa3liSFVZdS8rWTUxSlljMGdmTnBLemlYaUo4QzlsNSt6OUlXcnFSWGttaDJQTzM4UFhNcDRpYnVCdzNWU0ErUG9acDgrYk5XN0ZzMlRLcnl4eEZJeURiWlJBRndmV2Y0Q0t6eGVsMHlrNm5VNUFsV1JhY1RuY3RxYnNCakNHQTZObXppSXdNcDJmUENOU05VVkNYR2VyMFNQRm82VitiT0hIaWJLQzV6N3hrNS9VdlZ1TklTR1ZCLytDdWVuVXc2RFJvUkVHUlVXZUltdTByeWZ3NEhWTkZIWTdxRXFTK3plOGFROHBvRERvQUxTR2poM0g4d0NHWUFxV0h6S2kyZnM3ZUhTQWpJVHZ5cWNxdUozalE2VjhxK3FRVXhJemIySEszbGZEVUZIcE9tNGJCb3pKTVAzUXVjdzdQUFhzM0ZuTWh2WWE3VFVHMTdsZlZFYXZpa3dqMmR6MTRodWhJNnFxcnovaGNnbWpoeFBPTHlkOTVBTHRWd3B4VFMwQmxEZUFTYk9FalJybUdiQnhHY1BCSktyTXNtSGR2QTIvSWV2bFpWd3YweWhQVUhQVEM2WFllblE1aEkwYnk0ek4zNERoeUNjR3BZK2s1NFlJekhyZmxXQWJtcUdHRWhibWlDQkZqeDFDN05MM0ZHQUltemlUQVhjdXQwdjI2YUVOZ3loQlhkWWd1QWtOSURaWmFjSmJ2b3J6R2k2QXYvMFBWbDRCa1Jxek1wS1lLOU0waUkvcjU1LytWdW16WnNzMk41cWpzTWtjZElEdGxHY25sYjVOa1NYSzIwdGc4b3FSYU04VS9iYUdpcHA0Q2pSZnFSaFBVNld5ZDR0R2NrQXVJYXJWcWxzZjdtazlYcldhckdNZjdVL3ZUZVY2NEY2Rythc3BxbmZ4bHhrVkFBLytwaDFBL3ZTS3BPclk4VzdvcVRxNWp5NlBMR2ZmRmZ3bUxEYWJxNnhmWjhyV3RJd1hQZFJKTkVCSFRwdUxqWHFnZVU2ZmpHKy9kNGJYVTBhbGN1bTA5UlZ1M1V2ak5VdExmV2N2TXpXK2hQVWUzS3VvTnA5bEhVdE8vY2hkNVNRVlBCMVkzaWhiYWU5MW12L29RK2FVcGpGMjJDSjIzbXQzWERVT1c1Tk9md1gwOXI1akJSRTJkNnY1OEtqMXZEbWd4bFBhdUZYWGI4MXlTdHAraXJUOXg3TEhyS2J6dVZVWXRTRHRuMjB2cmMvYWVQMEU4VGRHYmZ6UlJVNmMybGNUMW1EYTdqVnNnTEN3c0Rkald5dGZtbWJBcnUxSS9YSlJHc293Z09KMnlTMmE1M0doVm1ZZEJOakpnU2hyUlBZeUl6Y200enZiU081QmxXYWlxcWt3U0JPSGlSbjlaK3ZyMWZGWVh3anRYcGpTcGxKMXRtWkdKUmpZZnl3YWdMUGNreDlTUnBJWXEvclhUemxod0NPcnlYRXdlY3N0ZVZJUWMyWmZnMkdEQVFkNjZsbzFIVEh1MlVXOEJzRkcrYlJlaEF3ZUJiMS9DK3BocHFBc2diR2dLWVVOVENJaUxRV05vWGpodFNBaDFCUzBicURqcTZzQS9uT2pwc3hqMjBwT284NDdpNmZ1MVpXMWwrMTBQVTFsMzd1YkFLeUNBQmpmOXM3UDRBSlZGTGNtUjFIb0Rsc3J5cy9lZ2h3UmhPdFdTYnJxaG9JQ0FJY1BRZWF0eFZoeWlhR2RMUHJtU0hWdGQ4MVc0aTRxcTNnVEg2UWdaUGhwcjFpSDAvWVkwemJtZk1haFptQm1DMERxS01WVzFsTlMydWpvTThja2szTGlRNVBtWFVYMzB4Qm5maTY3UElIUUZ1eWd0ZFFVaGluL1lpbC95NEYvTnFLUDIxV01yNzFvRVhSVTNqQkJ5c1JwaW0rY2hMZ3BOcTdlaldxMU8yN0JoZlk5MkJKdXEwV0pzbEVlU0pDRUw0TERaV25TMnNwZ2FFUHo5Y1RpdDFKZG5vMjRVYW0yckRKcUNCb0tQajgvbHpjWjBDWXMzWlZHcjh5THRXVmVvWFJ2YWkrMExKd0R3NU5zZmtGNXNvODdtWU1haUpTUU5Ic2FITXdZeGZjd292bnRuRlplOWVaS2FxbHIrZXZrMGdwVVN3Tk1MdHJBUkRKNFp3dW9MUjZBMnBuRHh0NitoSHpZVkkyK3pldVpjdEdJZHVxQ1Fsb0lnU09LSFdaZWpwZ3FMNzBRbXp4Z0V3TkJYWCtiNytkZVM5MVlDYW5zNTlTWWprOVl2YVNMUTdYWExQV3k2K1Q2K2ZGOUgzTjlmSlBuS29kVHYrSWlOLy9jSmdYM2pNR2RuRW5MN1EvaDd2SlNkNVNmSi91d3JZaDViVE5BNVNuOExtWGdGcW4vT0lYM21UNmo5SXRHRnROUnpqSmRmejlGYkgrS2IxYS9nTi81NnhqOTY3YSs2WHZUY0JaeVlONStWSTk4azRwcUhHSG5ITkdLdXVaWDFDeFpRdDNFZ2xoclFKN1JrWGJFZldNMmEyV3V3WkdjUys5ai9JOEFiR0RDVjFKdTJzMzdDT1B6N3hXSStsWTNmcFE4eTlwNUwzVTl5VHdiZmR4RmIwMGFnOG90aFRQb0tnbjNneUVOenlEMnB4emRVUzlYeFVsTGUvdHVaMzR6dklGSWZ1cGp0MHlmakh4OU1kYmFOa1o4cyt0VnJrbkRUUXJiZlBaTmYvQTNFM1AwU0E2Y25kZkNtTUpMNjJrTnN2V2tLSitMN0lsZVZZZ2xLWmZwSGk5b0kyR0hEaHFVQ3VaN0NUWlpsdStDS2tFcXlJTGpOVVFtVmx3N0pWRTlWdGdsYllEamFXQzkwNFVacU0zOGlxL3drSllJT1lmRGd3ZTcrQm1Zc0ZvdGd0VnF4MisyQ3crRVEzQ0ZYbGRQcDJBUDBQeHUyVlVsVlBYcURBVC90NzZPdG5lKzBSWjNEZ1NrL0gxVmdCRHBEVzcrSXM2R09obG9MUGhHaHJjd2RpWWJDZkdTdlFBekJYWk5Fa3EwQlUzRTVtc0F3ZEw2NjMyVzlaSnVKK3RJNnZLTWorTDMwZTJkREhRMmxOWGozakViVnpzdllXbGFNcFBORDc5dlN2SmNzSmt5bEZYaUZSYURWZFcwUDJHcktzTlpZOFRaR296b0xsQ1pPVXcwTkZTYThvNDN0anYyM2NhbllNT1VYSS9xSG9QZHZQNWxabHVXam9xaTZBNmdINm5CUkdwa0JpNEJnRjBUQktRaUNwRmFyWlkxR0kzdDVlYUhUNldTOVhvKzN0N2VMMHNoYmo0OVdUMWpQSGk2TnJka0ViZGJZY0NmSW1VejFhV2RIcUxrY0h1R0JTcm5RcnpRR01FVEhubDc5OS9iRjE5dTMzYm4zTnZiczNtcHB2Zkh0MmZOM3ZWdEJhOEEzMnZDN2prSGw3WXR2QjZrYVhxSHRWeXFJT2dPK1BiczNkcTEvS0ZyL3N6aDJneisrQnYvZmQ4dUtXZ3lkN0NOQkVQb2VQSmpSZCtEQVFmdmJtS1BJVG1Ra1FSQUVTWEpwYlkyQkJNODZVb2NrSTJuVjJHd1d4TWJHTE0yNWE4MytOVUR3OHZLNlRCRW1DaFFvT05lSWo0OGYwY29VYmMzNFFYT1psWVNuN1BJc2tMZGFiWWdldmpYQjdWc1RQQngyb2lBSTA1VXBWNkJBd2JtR1hxOVBvN242b04wV2ZhNGZxWkg1UTJpaHNUVjF0ckkxYW15U1IrREFwYWtCZ3RuY01CV0lVcVpjZ1FJRnZ3R01SNDhlR1VqTDhxcEd4by9HMUROQmtqeUw0NXMxdDJiMmp5YkIxb1p6emVYZTBHcW5LblA5MjZLMHRKVDgvQUpsSWhUOEtSRVRFelBNVTJOem02T3FWdVpvQzY0Mk40VjRDNjFOZEFjTW1sUzd4Z1BkWnFnaTJCUW9VUENiUWFmVGpXK2xyYlZuanJhUVdhMERDWGE3SGRIVERHM1UxQUNob2NFMG9YMHoxTW5Pak1Nc1dybUJlNWR2NHYxOXVSNzBLekpaZVhsOHVtMHZyMjQ4U0szSFVRNXJBOXNQSGVldGpUdFpubG1pck9CdmlFUDNYY0dKSGNYbndVZ2tmcjU2UEFXbi9qaHpheXZOcGJxdzRneVBybVBiWlpkUzJxWERiVlJsSE1KK0ZoaHhhamN0WWNNVFM4L3FQTWdORlpRZXlXM3orYy9YakNVdnAzdm1hRWJHZ1Q0ZVdsc0xqYTN4cHlWWG05UW1RaXEyTWtQeE1FTW50cjgzNi9ocWJ5RjlZbVBFelJLVUFBQWdBRWxFUVZTNHRIOFVtN2RzNFBFZkdrZHU1cjMxZXpoU1hNSmJQMlMyRUd5bGVUbThzemViL2IrYzVJdGppbUQ3TFdFdEs4QnV0cDBISXhHSm5yY1F2OEEva090ZzFTdnNXYkwrakFXOXBTQVBSMWU2VFZQT2pxdHZwTnA4Rmw0dnBrb2F5czR1LzU2VSt3TWIvdnBpbTg4dGVUblk3ZDA3VjY5ZXZaSTlOYmJUbUtONG1xUE5XcHRMc0ttYm82R05UQjR1TTFRVXhmWUZteGpBNGhzbk5mMGEyRkRHWC9ibnd0aFl3SnRuYnA0Sk5UbDhjM0JuU3pHYzBKOFBFdnF6ZXNOYVBxaFRoTTI1UVBYT2RJNHZYNDhkRFFFanA5SC95dkZOU2JxMjRxUHNlK3gxekZaZkV2OTJOeUZHWDhCQzNySVBLZHA3Rkx0ZFRmQ2tXZlNabm9vQVZQK2NUbVdsbm9ZOUc2aXBGSW03NlhhTVNlNGlkVWNkMmUrL1ErSCtrM2pGRDZIL3dwdnc5dTQ0KzlOMDZBZE9yTm9Pb2hidjBhMEViODUrTXBkOGdxbmFpaUYrQ0gwWDN0QTVBK3hweGxDemR3MUZCZjcwdlhRRUFKV2JWMUlsSlJKL1VSSmw2ejZpUVcya2NuTTZGbWN3Q2ZQdklEVFczLzJ3bDNMOG5YZW95Q3JCa0RTTy9yZGNpVmJkcUkyVWNlSzk5eWc3VW9CWHowUVNicjZWQVA5cU1sOStuNG85R2RUVmxiRi9jVFpDWkRLRGIzUjVieHdWV1J4OTkwT3FUOVVTTVBZeStsMlY1azR3dHBIMzBWdWMybm1TZ0xUSmRFVUJxL3grQmFkKzNJL1pWTU9KRnhaVG9CV0puTE9ROEhoLzEvbVd2VXZlanFPb2pRa2t6cC9mVk5qZXNRSll6YkdYbjZVOHU0cklXVGZUYTB5L0pzMHcvL1AzeVB2aEVLcUlSQklYZG42KzNBOWVvdkxnQWVUaVhQWXRYb3lnQ3FUMzN4WTJrU2FZVCt4azk1SlBzWHRGTStDZXUvRnpsN0JZOGpNNDlzN0gxRlU3Q0oxNk5ZbFRoaUlBM3Q3ZUk0RFBXcHVpamVZb3NpUTVKVW5BNlVRbHFtVkpJd2xPdTAwMjFkUmdreVFzWHQ2SWpWTFBuWlNMTENOVVZsYjBwNHZOV282VWxwTm9ERkdreXU4TXVXUW5HK1kvVCtqTWErbHozUlVJNXBvV1JJQW5sMzlGNkNXekNkQmxzL1hCMTVwTW9acENPMUd6cjZQM3ZHa1V2WEk3QjljY0E2Qm1Wem83L3ZZNG1wUnB4RTdvd1k2cnI2V2lSZ0ljWk53OWgxOHluU1FzbUkrUGVROGIvL3J2VGg5UVRYZ3NZV21qS2ZuOFZWcVNiVFN3ODZicmNmYTVtSDd6YjhRL1FNTGE2UnYrOUdQdzZ6dUl3bGZ2NDhUdVFteFpXL25oNGY4UU1DalJwZk9zLzR3ZEQ3eEk0T1M1R0JNZGJMbjJUc3dPbHhXeTg1b1psSm1NSk41Mkl4ejlqQitlVzk1a29mdzA3eklLQ24xSnVHMCs0YjI4cU0ydEJMVXZ3ZVBTOEU4TVF4dmRsN0MwTk1LSEpycHZLWjh0TStmUUVKQkNuOXV1b3Y3Ylo5bjl3WFlBU2o1OWxsMmZIaUx1cGhzUjlxMmtyTER6eW41ZDNFREMwbEpSYTcwSUhKTkdXTnA0ZklKY25JaUZTeDVqMTZjWnhONTBNd0dhazZ5ZmQxK1htSG5yMW4xS1ErU0Z4TThjeWFFN3J5TDNtSXRFTSt1NXY3Qi9WVGF4Tjgwbk5LeVV6ZGM5MU9uNS9JZU9JV1JZRXZoR0VKNldSdGk0QzkwMFR5NnROR2RGT3NaWjE2QXQzY0pQenk5ek9iUks5N051NWkySWd5YlJaOTVsRkw1OEI0YzNaUUd1WmkrclYzOFgyWjZmRFZrV1pBUkJFQVFRYUhLak9lMVduS2pSQkllaURkQ2hibDN3anFzMmRIeFhIcVpUMllkNTg3Q1RkKzdzcDBpVzM5dDcxVkNKdzZGSGI0d21KRDZDa09TVzM4ZGRkeWZSSS9valIxMU54dVVmWUFPMGhETGdyemRSc1g4LzVtb2Ivb1BpS045MUVLYTQraVlFWEh3TmZhYU1Ba1lSdCtJOWNqY2RJMmhVSmNjMk9wbTQ2eTU4TkJCMDk3MWtwVjVMVmNPOUJIZEEvYThON1lreDFNZ3ZiVFE3SzVacUs0RmhZUVFNU0NKNFlITG5RcngwWndkak1ETHl0YWRaYzh0dDVCaHE2ZnZpUndTSE5wY3pSYzViU095WVlUQm1NTGtmRGlCL2J4VXg2dlhrbHZkbjVyMVhvd0w4NzcyRHIyZThqdVhST1lnWnE4a3BUdURLcjI1M01ac2tOOWRHaHFlbVlqOFVRWmsySG1OcU15ZGMxZnJsMUJpbk1mNkdpNUdCUVhmZHlLcEZYekg4eGxIa3JsaEo3NzkramZHQ09Jejk3K2ZFaDFkMmVyL2VQZnZnM2RNWGpVWkhTR29xb1labW9aRzk0aXY2UHZROXhnc2lJUGtKY3BaZVFNR0psNGpyM1hFSmwrYUNTMG0rS2cwQjZEZnpNM0xUZnlBbWZqQkhsdXdpZWRPUGhJYW9rZnZmVCs3U0VSUmxPWWlKUDMxOVYwRFNNSHhWK1FpR3ZCYnowSWplQy8rT2NXZ2dnZlpackhyT1ZWOWU4UG43YU1iZlN2OXBvNUdBZ1F1dVlNZnlkSkxTWEp4MUtTa3AvWUU4VDNOVUVJU21aRjBFUVVBVVpVSEVwWmhwdk5ENWFuQTZyTmdGTDVkZ2ErenUzdmlqVXFuR2RqYlpGVVU1TFBqOEFJdHVtRW1pUWFsbS83MmhpcHZFeUhzeU9IRG5ISDRvdEdLODV1K01lR0J1VTMybFY2Q3I1RjNRYVJFY0RpVEFXWkhKK2hrMzRUMXlLZ0VSL2pRVTF5UDVORk5TZTBlRU52Mi9QalNNNnNvU0hLWGxXQzJGN0xyMXhpWWFIcStrSkxBQzNtY3k4a0NHdmZvTSsxOTltQy8rbmtmQWlNc1k4Y3FUK0hhd3B4eWxSUjJPUWRkblBER0ppemhlTUpqeG8xbzJHTkdITmRKL2EvRTIrdE5RWGsyRHN4aXBNb050Tjl6WVBLb0I4VWlBdGJBWVRVeDh0K2lhNm92emNSemR3NVlibXZzbkJQY2U3anBmYVIxQllXRnVWU3dDUThDdktRZzFZeWsxbzJ1MG1NUkFER0ZncTZ3RE91WkkxSVZGTmJrcGRNWXdHcklxb2FZSXM5bk1vWHR2NVdqVG0rQUNWTmpjOHVYTS9LcnFRSmRUVmFWUklWdXRycEVYRldENjhRaWJiOWpjclBrTmFTNXlDZ2dJU0FZMmVHaHJyaDhCQVZrV0pLZFRrSjJTSUlvcUpFbVNIZVphb2FiVUtodDhmQkYwdHJZYTI3MzMzcXNTQktGRDN1aTZpZ0p1K1dnYmQ4NmR3YmdJYjBXcW5CZFEwL09XQitsNXk0UFlTak5ZTjI0MlJkZk9KZHJZZ2U5bTR3b2NRMjVnN0w5dUIrRDRFN3Z3REZnMkZEYzMzREdYbGVKMVlUanFNQTFlaG5oR2Zmd3BCdlhaR1huZ21GbE1HRE1MMlZMRmpubVRPZjdkSEZKbW41NDFRaDBXMmVFWXlyOTVrZHpxSWNUMytvV2ZYOS9BcUR1YTNjWG00a0lnQmJEUlVGaERaRWdBM3VvSVZKR3BUUGpzdFRhRjlqWmpCUGJjbmRna211akFQU0VJQW5LcjdpaytFZEY0cFlReThiMkgyd3FVY0gvTXBhVkFIRmlLTVZVN3Vpd2dCRkZxMWR0Qmp5NU1qNld3SEhwSGdGU0ZxUlNNWGFCYnNaUVdJTHMxR1V0aEtkNFJRZUFmanQ3Z3o1QzNsaEVlZUFiS1NqZTZ5T2dqamZoZk5KT0pUN2ZQeUtMUmFFWU1IanhJYytCQVJxdEVYVUYwNld1Q2dDemh0TnVSTkdyc1pnc2FuMkIwWWY3b3ZIV29XNW1oUFBua0U2T0IwMWZOMnV1NGMwazZ1dWcrVkJaa3M3UUFWUG9BNWlXN2lseTNIempFeVlweXJFNHpYMjdQSUNFOGtxa0pvVWdOMVN3N2NJckRwNm9wdFVrczNRR3BBL3FSNktkUlpOSlpnQzFyTzBjMkZSQ1pPZ0JIL2s2czJoaDhBam94Y2FKNjBMQW5uWUtmUjBQeExvNTl1dy85OUV1YWd4RnJQK2JvbWtINE9nNlJ2Yy9BK0ZmNklQaEw5QmxyNDhmN24yZmdEUmNqVnhWU3NDZVBJZmZkMWlIN1J0WCs3WmhxckpoTlRpcDNia0Y5eW91UTFCSG9kS1VjL05jS2dzYU5SRXNsOWFWMmdtUENPeHkzRUpaNjJqRTRzN2F6N1I5ckdmWE5ONFQ0bHJGK3loeE9wUGFuOTFDWGhDLzY1QzF5VWlNUXNsZFRZcitRWVJjRW9oV24wdFAzUmJZL3M0UStsNmJpS0R4R1NiYkVCWCtaalhiUVZHSWovczMyLzN1RC9uUEhZc3ZkZ3h3NWlaN3U4L25IOTZYcWc2ODRPVFFJYldnTTBjUDdFVGhwRGo0dlhNN1BiL1ltYmt3aTVxeERWSnZDR0RSdklqRnpybVRicTRzSkNibWRxcS9lb0w2cmNvMFFBbUljbkhoektkYmtTQUpTUnVNYnJDTnUxa3grZXZGSkFud1hVci9wQTJvaXBoSFZ1M1A5MHI0M25YMmZYWXd4b29ZajN4eGx5S2ZqUWUxTHY1c0dzdnV1aDBuKzZ6V283ZVVVYmRwUHdtUDMwQm1CdnlvNkhuM0JNeHo2ZkJYK2dVR0VqeC9WRkh4cEQxR3piK1RBSlg4aG8zOEl4Z0ZHNm83dXhPcVRUTjlMaGpVcGNPKzk5MzZ2bEpTVVF6UTNVMVlKSUNJSUlyTHNSRVpBRkdSWmxwRkZBYnU1Rmx1REJybTZGSlZhclJiY2lia0NJRDcxMUpOWGk2SjRlaCtiWktmS3BpTGNvTUZpZDJDeE83Q0tXb1pIQndGd0xQY1VlVlkxUTJORHdlRkFyZmNsS2N3WDJWclBEOWxsK1BnSDBpL0lHNHZkUVZSNEJCSDYzNWFNeG1ReTRYUkszVzVLWEZwYVJuQndNQ3FWNnB3ZWM2YmpRM0JTdFdzN1JaczJVMXNxTUhEUjA0UWFtN2VqYjc4VURJSHU2SlltZ0xCaC9kSDFIRXhnVUEwNVg2N0JqSkdrMjJaajZKRkFZRnc0TmJ2U2NjUmNoTDVzRDZYSFRReDgrcCtFOS9BRlJNS256RUJWZXBDODlBM1VGdFlTUEhJc1FYR1JIWExtbDYxYlNkWHhmSHlUVWhGckN6RVhsT0J6UVNvNkx6Qm5IYUJvMHliS0R1Y1FmY3VqSkk1TjZGUjdPZDBZeXJkdkpuVDJYekQyalVEUUJoQTVvaThWaHdzSkdSaFB4ZnBQMEkyZGkrUGdKcXJLZkVoNTdnbjhBM1FnZUJGMTJVeHNSN2VUdis0SFRGVjJ3c2FPd3o4cUJBUXZvaStiZ1QxN0ovbHJmOERxQ01BNFlRUTZiOWRUcTQwZFRFaVVRUFhoNDFqTVdzSUg5d2FOSHoxblRLTHU1ODBVYk55SzFhb2xZdXg0Zk1OOE1Rd1lnYStZVCs0M205R05tVTFNU2krQ2hnN0ZxMU5aSkJJK01RMWIxaUhxOC9MUnhTVmpDTkxoZThFNGZPUUNUcTFhajgwUXovQm5IOGJnM2JrcWJSaWVobGZCeitUL25FWEMvYzhTayt3UzFFR2pMOEZIS0NJdi9UdXFzb3J4dTJBMFlmMWlPaWNpOWdvbmFtdy9haklPWVM2c3huOTRDbzNNWkFISkk5QzdEVHZCTjV5d1FRbUloa2hpTHhsQnhaWTFGRzc3Q1ljWVRPVFkwWGdITkZ1QWVyMCs2N25ubmp1QnE5K29IWEFJNEFDY2dDUUlvaXlxUkZrUUJOUmVPbFNTRTZuQmd0b1FpS0RUNlVSUDdqV0h3LzZOSUFpVC9xaWF6Zm5PeDNhbTR6dmJ5SDM5ZHJKTmt4ai93T1YvbUxVL2N2K2xtRktlWk9qY0ZFWEYveCtBdytIWW90Rm9uNldabzYxZUVBUVRZQlVFd1NZSXpSeHRXcTJMbzgzTHk4WFJKcm9UY3BGbFdaZzllNVpLRUlRUnlwUXE4QXFMd3ljaTZBOTFUN3FZUkx4REZKL3cvNHpYV0swZUdoTVQweHc0YU5sTVdXeDBuN21TZFJ0L1hLbHJhczgwajNmZmZYY1lvUFREVTBERTdQdUorSVBkVTl5ZEx5b0wrNzhGbjJYTFB1NDVhdFRvWXpUM1FCRGRhUitOcFZXQ0xNdXlMRGZuNDBxUzFLeXhBZWgwdXFIS1hDcFFvT0I4UWUvZXZYdTVoWnBuMmtlallLT2x4dWJxMVNKSlVzdkNVcFZLcFRnZnppTEN3a0s3RlRnQU1CZ00rUG41S3BPblFBSGc3Ky9mcDVVWktucjhDSzAwTnlUSlJXbWs5cUFwRWdSQnVFQ1p5ck1wMk1LNmZZekJZRkFtVG9FQ056UWFUUkp0Zld5TnhmQk5UQitlUmZHZUdoc25UaHdQQXhLN2VzSHEybHB5SytweG5DNG56OW0ycWF6VmJDYTNyQnF6UTFaV1RJRUNCWjFDRUlTRUYxNTQzcWVsWUpOYm02TkNjejZ1Ui9BQUVJeEdZNWVLM3BIcXVldVZGZXkxYXduM2NsSm8xL1B2NjZjeElrd1BXSG51bzIvNU9xdWNVaW1BTFU5ZFJiVDdzUGRYcnVTTnpEcDZCSGlSVjJWaHdSV1hjT3VBTUdYbEZDaFEwQ0VtVFpwa0JDcG9JcHhFRkFRRUQ4ME5hUGExeWJLRXV0RkcxV2kwWFJOc29vWUZzMmFTMU1PVjFyN3l1MVVzMm5DUTFmT0dBeW9tajd5UVd5ZWFtZmptbmhhSGpVZ2R4VFV6dzlHS2tIOTBENU5YYk9QeUFWZDBVdEdtUUlHQ1B6dWlvcUo2QXBsdVFkYWljeFZ0b3FNdTRTYTZKWjJnVW9rRHVuWVpyeWFoQnRBenlCOUxFOCtNbWlHOW9nald0ODE4N2hzVjNsUnJGeGJraCtpd1k1V1VSVk9nUUVISDhQSHhpZk1RYXExYjhqWGxzcms3V0NGSmt0Q1U1Q1lJd29CdVg5RnU0cjJkV2N4SjdkdU5nMlErMlhxUVljT1RNQ3FrSUFvVUtPZ0VHbzBtb1pWUWErRmphNTJvSzh0eVV3bVlBSFNQVkUyeTgvb1hxM0VrcExLZ2Y5Y055aDAvYitYamNqOWVtRFJBV1RFRkNoUjBDbEVVKzNob2FXNmhKbnVhbzlBaWdPQVNiRUpwYVVraTROWDFTem41ZE5WcXRvcHh2REsxUDExVnZBNW03T0t4bjJwNTU3bzBnaFZTRHdVS0ZIUU5YaXRYZmhIaUlkeEVXYVlGaDZSbkFFR1dYZWtlK1BqNEpIVDlHakxwNjlmeldWMEk3MXlaZ3I2TFV1M0U4UVA4ZlZNQmI5dzBoUmh2eFFaVm9FQkIxOUczYjk5UVRwK2s2eUhVWE9hb0doRFVhblY4bDY5Z0xtSHhwaXhxZFY2a1BldWkrZFdHOW1MN3dna0FQUG4yQjZRWDI2aXpPWml4YUFsSmc0Zng0WXhCL0dmMURnb3JSYTU1K1VQM2lmUzhkOTg4QnVxVlJWT2dRRUhIQ0FrSkRXOXJqcmJVMmp6TVVWa1FCRUh2Y05oZkZrVngvcDloZ241TDJpSUZDaFNjSFpqTjVtWGUzb2FsdU9pTDZvQTZONFdSQmJBTGd1QVFSVkZTcTlXeVJxT1JSUUJCRUdLVnFWT2dRTUg1Q28xR0Urbld5c1RUbUtLZWFSK3VMd1JCaUZHbVRvRUNCZWNyVkNwVjlHbUVtdUFoM0FBWmtKdStWQVNiQWdVS3psc0lndENqbGNZbXlIS0xsQTkzOVFISU1vZ25UaHdQQjNUSzFDbFFvT0E4aHU3Zi8zN0pwM09OeldXT2lzSEJ3WkhLbkNsUW9PQjh4OENCQS8wOEJGbWJkSTlHb1NiTE1xS1hsMWY0bVZ6a1RHaUx6T1lHY3N1cU1kbi9QTFJGc3VSQWtwU2lXQVVLZmkwaUlpTDhUcU90dGY1QnJWS3B1aWZZenBDMjZLT3ZWdkxtVVJQaHZsb0tLMDNjT0dNcUN3Zjl3WlhGd2swc1Q3NGVWWThJWkpzRnI3Z1Voci80RWhHOU95OUJNKzMrbWdQYkhZeTgrMHBsUnl0UUFQajcrN2ZXMkU1bmlncWlLSXFoM1RxN203Wm8rd1B6V0huM2RUelEzNHRGR3c2NnYzVFJGcTFhY0JHdHlhMnZuRHFkN1E5ZHg4bzdyaUw5MnFHOCtzMVBWUHdaVnNNcmtVbDdkalA3NEg3NkRuR3cvZi8rWDR1dkhUVmwxT1lYSTdYUThpVHN4ZG1VSHZ3RnlkRTlqVThHY0Zpb3k4bkJicFBjNTNOOVo2c3FvNzYwcHMweDlwb3lhay9sNDdBcG1xV0M4eGZlM3Q1K3B4RnFUZFRnamFWVmFsRVV1MG1KNWtWU2orYXkwcDVCL2xoS1d0SVdVWlBUNWlpOVIwZFlDVkNyeEE0YjdQN3hvQ1pzZUFxV3pVZHhBaW9zSEh2NkxnNXZ5TU0vVkVOdGJSQVRQbHRDUUdBZE8rZmZSc1dKSEJyS0pOYk4zUVVCU1V4NDkwbThLQ1M5NytVTTM3T1RVQU5VZnJtWWJlc05YUGJHWDEwSzRwTDdPYkJUUXN6ZWhWUGpqZFUvbVptZi9KTzlONlZTSVF4Qk5sWFRjRFNEaUwrL3hZaWJ4d0tRL2NKQzluMlRTMkJzRUxXL2xIUGhxcldFTiswSUMvdi92Z0QxUlhlUk5GM3A4NlBnOTRWV3ErM1V4K2JXMkZBTGduRG16U01iYVlzbVhkYWxQLzlwenk1ZTNaWE55UW9yLzVoM0tVRi9odFdRNmlqZXRJbHFTdzBuWC91Q3VHdWVRZ1ZVYjNpUGpCMGFMdHU0Qmk4MTVMdzhuMzF2cldMQ3c1ZHo0YnNycVBudVZUWi9aV1hLMi9kMzYzSlZPNDl5eWFaMUJBVHJjRm9zVGF1dTZUZVZDUS9Pd0xKN0dWL2V1NHpoTjQ5RlJTbEhsL3pJaFZzeU1JWUREaHZPRm1XOEVqV0g5dUUxc0ZwNXFoVDgvcXFCV3UxSHg3NDFvVm1OZ01BemUyQzdUMXMwc0c4L25qTEdzRzN2SGw3ZHVKK0xiaDNQSDc1MWlWUkw4YXB2RVlxUFVhTWZ5dVFiSmdKUXRuMDdHa1F5Ri84RENiRG5WbEJsUFFUOHVzN3JBUk5uRWhEc3l0NVI2WnF6ZU1LR0RBWkFGeDJOV0YyTkhWQVJSTVNJSUhiZmRnTTlKNDBsSXUxaUlnWkVleXIvakZ1Zm9UeFJDczRMcUZTcWRreFJHUkNFMWc0WkVmRHIvaVhPakxiSVlQQ2hkMlFZTjAwZGpWLytNWDZzK0JORVI5VlJKUC83SmNaK3NvcGVrY2ZZOVZwNjArUWJrbEtKbWpxVkhsT24wbXZoSTR4OS9KYXVTTXJtNVdzbkpLMzFhWjlWUUZDN1YwbHNhUjRQZVhjZG8vN3ZGclQyQXJaZk9aa1RlOHVVSjBqQmVRbFJGSDFvNDF0cldWTGwvZ3hSRUlSdUNyWXpvUzJTS0tveE5mMVdXVnBNbmtOTG9PN1A1R1VUNlhmL0E1UXNlWjdLR29uUVVTT3B6VHlCZjNJS1lVTlRDQnM2R0VOUXMvNnE5alZnTDYra3Blanl4Y3VubG9iQ0JwZld0Mi9Qcnh5VERadEpJbmo0V1ByZjh6Z0pZOE9velNwcDhmM2hKKzdtMkFaRmExUHcrME1RQko5T1ROQW1YalkxZE5NYVBDUGFvcjY4c3ZRenRwdDFoT3BGY2l0TXpKbCtFVVAvWkMwME5iRnA5QjMvTEFmL2s4NjRCMjRsYWNmZHBJK2JURUN2Y09wemZ5SHFqcGRJdVdxRVM3dE5tVW9rTi9MTnVJbG9JbEs0NkxQbjBPRkw3K3Nuc1hQV3hSeExDRWRyRU1IbjE0eW9sQzBYWDQ3VG1JaVdTbXJyNDBtYjNOL2plenZGMzM2T05td0tmU1lPVXA0c0JiKzNZRFBRc3VpOVRhb0h6UkpPS2dDTXY4WEFUQTBtS2l3T2duMTlNV2grSDdMSjg0MjJ5R21xb2FHcURuMllFYlcyYTNOaUxTdEUwZ1dnOS9VK0N5T1FNQmNYNDBDRFQwVG9ueXhTcmVCL0RFV0NJQzRFVExpb2kycUJla0VReklCVkVBUzdJQWhPbFVvbHFZSGZqT3JSNEczQTRLMnNqaWRVQm45OERmN2RPc1lyOUd5K2gwVDBFVVpsSVJUOEwwRFhnUm5xQVZmd1FHRk9WS0JBd2Y4Q1dzdXFkZzBNV1VZUmJBb1VLUGlmRW14dEFnYnRDYmhHL25BRkNoUW9PTitoNmtCamF5SGdHc3NTRkp3REhEcDBHSnZOcGt5RUFnVm5CMkpIV2xwN2Y2aEFnUUlGL3dzUU92a2RRQkNCYmxJNk9ObVpjWmhGS3pkdzcvSk52TDh2bDJhZFJDWXJMNDlQdCszbDFZMEhxVzN2Y0llSjl6Zit4SmI4R21XSk9vS3RtTXgvUFVmZS90emY1ZksvdkhRdjZaZE1Zdm5vRzJnNGg5Y3haNlNUUHYxU1ZnNGZ3dEh2ODMvWEthL1BPb1NwUnRHd3oyTjBXVmFKZ0xON3A2N2pxNzJGOUltTjRkTCtVV3plc29ISGY4aHAzS2E4dDM0UFI0cExlT3VIekhZRjIrb3QyM2pqeHd5MkZOUXF5OVRSUTdiamF3NTlzSlQ5Ly9ueWQ3bCt3ajB2TXUyVDV4R3JLam1YaFcvNlFkT1k5dTBxZWlWNTQ3RCt2clJKSjU1WlFQYk9ZbVh6bmI5d25rWmJhNk8xcVFFYm9PbTZsUnZBNGhzbk5mMGEyRkRHWC9ibnd0aFl3SnRuYnA0Sk5UbDhjM0JubTBOcmk3TlpXdWpEN0RqdmM2b0YvQkdRdDNvTnZlNTlpUHlYUDZiVzlqZjh1aEM3cnQ2Wnp2SGw2N0dqSVdEa05QcGZPYjVweFUxSHRuTnMyVGVZYXlYOEw3eVlmbGRQUklXRnZHVWZVclQzS0hhN211QkpzK2d6UGJYVEpOMks3YXZJWGYwakRWVW1mQWVOb2U5TnMybGtwYXJidTQ3U21pQzhTbjRpZCt0UmZNWmN3ZUM1YVdmOGdpNzViaW5aYTNlQlh4VHh0eXdrTk5iRjJTQTNsSExzN1hjb1AxR0VsekdHWGpjc0pEamF4UUpvT3J5Vkl4K3V4R29WOFJrMGx2NjN6T2h3ZzF1emRuRmsrUVpLanBZanJuZ1R4eDQvL0VaZVNxOXhTVTNuTzdiMEs4eFdMVkZ6YnlRMnRROEFoVis4ZzJ3Y1JPbDNLekZiZlVuODI5MkVHRjFqc09ic0ozUEpKNWlxclJqaWg5QjM0UTNvZFIzZkU1ZzQ4ZnBTZ3FkY1NNNlNwVmdjdnZUNTIvMEVHdzNLQStHMlk3cWpzZjBxM2Z0SWFUbUp4cEF1N0ZFYnozMzdNd3VuRHNOTFNXL3ZaSzZxeUYrWFRlVFVPVVFtbHBEZkJTMUNMdG5KaHZuUEV6cnpXdnBjZHdXQ3VhWkowN0ljV2NPYWVRK2dHM294Zlc2YWcxRFc2RDZvbzZiUVR0VHM2K2c5YnhwRnI5ek93VFhIT3IxV1hWWXVnV25UNmJmZ2VxVE16L2pobVkrYXY5dTNucjMzL1kxVDJWN0V6SnFKMmxGM3hocGY5WWJYK09IWmRLTG0za3hrbkpNdFY5NUVyZnVOZVB6WjI4a3ZES1R2N1F1SkhOSURTNlc3RnRtV3ovZno3c0k3YlE1OWI1bUxIaE9PVHE2akRvb2lMQzBON3hBRFBvTXVKQ3d0RGYrNDhPYTV1LzVSZk5KbWtuREZPSTdlZXozWkI2c0FLUHJtWFhZKzl5R2hsOHdtUUpmTjFnZGZjNSt4Z1owM1hZK3p6OFgwbTM4ai9nRVNWbnZuOXdRbXNsNTdrUi8vN3pYOFIxNU05S2dFTE9WMXl2Tndlc0VtdC9xM2hjWm01Z3lwaTA1bEgrYk53MDdldWJOZnAzLzc4ODRkVlBkSVpteW9sbjNLQW5VSWE4WkdLbnhTQ1RkcWtkTEdjR1R0T3ZxUHViNWpXZGhRaWNPaFIyK01KaVErZ3BEazV1OXlscjVONkhXUDBuK0dTM01LU1I3bS9pYVVBWCs5aVlyOSt6RlgyL0FmRkVmNXJvTXdwVStIMTRxOS9uWnFqK3lucHFBYy82VCtIRnV4RzdpMitXMlprTWFJaDI5REFLSi94VHprTGw5QjNPMHYwV1BFQlRCaUVJVXJCNUgzVXo0RDBxS3hWbGFpaVFyQkw3NHZJUU9TUExaK05WYVRDbDFZQklHRDRnZ2VOS3pUNjZnQ2pSaFRqWlNFNk5Fa0RzR1kyck41N3Q3L0QyRTNQRVN2c2NPUWdiNnpoNUdkdm9tNGdTN0s5cmpyN2lSNlJIL2txS3ZKdVB3RGJJQVdLNVpxSzRGaFlRUU1TQ0o0WUhLWDdzbjFpSnJwYys5enhBOE5WaDZFdHJCMFIyTTdJNnV3b2lpSEJaOGZZTkVOVTBrMGRCSmN0Vlh3ajQzWkRBM1hzUDd3U1U3VzJNa3JMT1pRaFVsWnFuWlF1RzR0R3IyRm82Ky9RVVZlUFdWcjEyTHQ3T0dNbThUSWU4Wno0TTQ1TEIrY3lyWi9mZHJra0RBWEZPQWJGOWZXWVZHUnlkcTBOREpYcktmcTBHRWFpdXVSSEozdEhSTzdyNytZSDUvOUw1WDdEMU9YWFlSa3M3VjRaZm9tSnA2Vm1sTkxaU1hlSVdGTjcyQjlXQ0NXMG5JQStqendBbDU1WC9QdGlLRjhmY20xRko1d0U4MzdKREh5cGRzNCtlUUN2aGlRektZSFhzYnFPUE14bUVvS0tmdnlUYmJjY0NQZjMzQWp2L3hZams5d3Mybm9GZWhpSVJCMFdnU0h3KzNkRG1UWXE4OVEvczdEZkRFd21YVzNQazZkU2VyMG5sd0xHWUp2dkNMVTJyVktaTm5jam5iV25rRWdxM0VWbEhZTGRSVUYzUExSTnU2Y080TnhFVjBvL3BSVmpCMFlTMjd1S1hLQjdIbzc5dEpTVGxURWtoU3MrQTlhdjVUeTEyOGxmTUs5cUF4YVZIMUhFcEQrVHdvT211ZzFzS081VXRQemxnZnBlY3VEMkVveldEZHVOa1hYemlYYUNQb2VVWlJrWndNdE5ldktqU3R3RExtQnNmKzYzV1hlUGJHTFV5MmtwUnJSNFdpeGMrVDhIWnc0SE1HVmUxNUdDOVJ1ZUkzRE96SmRkSCtOYjhzelNDSVMxQ3FrUm52TkRWMVFFQTNscFVCUHdJRzV0QXEvTUpmYnd5djJBaTU4NjJQQVFkYmlCZXgvYXdYR0Z4Y0FFSDdaUXNJdlc0aXpKcDh0MHlhUXMvY0crZ3p2b2xIU3FyK0VJZHhJNU9oN0dISGJtRzdkVCtDWVdVd1lNd3ZaVXNXT2VaTTUvdDBjVW1ZbmRYaFBkREovdG9waWJBNHZmTUlELzZ5Q3plUWh6RHIwY0tobFdhNFZoRzY4WCsxMTNMa2tIVjEwSHlvTHNsbGFBQ3A5QVBPU1hlcjc5Z09IT0ZsUmp0VnA1c3Z0R1NTRVJ6STFJWlQ3Wm94dk9zVXJIK2RUbFRDSXl4TkRGVG5XV292Sy81SEMzSjVNdmUrMnBvQ0JmUEFyOGpkK1Q2K0JsNXhlS2M3YXpwRk5CVVNtRHNDUnZ4T3JOZ2FmQUxmcGVNMThEczk3aXN4NEhXRnh2cFIrbjBIY1hiZmdIZFdEaGozcEZQdzhHb3AzY2V6YmZlaW5lMXpEcHhlaHNVVmt2UEFoRVgwaU1VNmRqQzR3Q20velFiTFc3U0RZWU9Md3F4OERRMzcxZlllbWptRFhmMS9CSUUzQ2Y5Q0ZoTVNGMG5QT0xEWTgrUy9DNHg1Q3lscE5mbEVpRjEvb010bXlQM2dWb2Vjd2ZFTTFWSnpJd3lmNUtyY3BjWWdEeS9ZUVBpWUZvU2FMQnBNdnZsMTB2dnYxVHVEWThuZnhGY2ZpSFRlSTBONFJ4TjZ3Z01NM1BNYlJ5Q2NKNmVsSDlkNGZFSHZQb05lb3VBN09WTXJCZjYwZ2FOeEl0RlJTWDJvbk9NYmxzK3ZvbmpyREwwOWVUMmJwU0daOTl1U2ZWYkRWZDZDdHRSQjJxaWVlZU9KS1FSQVN1KzdZdGxObFV4RnUwR0N4TzdEWUhWaEZMY09qWFIwTWp1V2VJcytxWm1oc0tEZ2NxUFcrSklYNXRqbE5kSGc0c1g2L2ZiY09zaXdBQUNBQVNVUkJWQU42azhtRTB5bmg1OWM5ZnMzUzBqS0NnNE5ScVZUbjlCaHJRU0hxdnNQb2tSemY5SmwzbEJHSFhVTm8vOWdPVkI0blZidTJVN1JwTTdXbEFnTVhQVTJvMFdVbXFVTVRpQmszZ0pLMTZSVC9mQWg5NzFUQ0I4YmkxWE13Z1VFMTVIeTVCak5Ha202YmphRkhBb0Z4alIwWk5SZ3Z2Z2p6c1F3c0pTWUNocWFnOVE3Rm1CcEx3Y292cWNxdHA5OWR0K01kSGtWNGNyUDU2UlVaNzNHT3JzRTNlUXcrWWlXMVdibW9JeFB4and4QTMyc1lvVVlicDc1S3gxUWZ4SkIvTGlJbzFFVkc0NmpNcFdqVFprcCszSWNoZFM3SnQxNkNTZ1JFZ2RxTUhSUnQyVVRsTDFVa1B2ZzAwZjNDdXFabERSdVAybHhNM1M4NTRCZEZZR3dZNnJBRVlzYjBwbmhOT3NVL0hVRHdqY1U0YmpnNmd5dk82dHN2QlVPZ2V4OXJBZ2diNW1LVU5tY2RvR2pUSnNvTzV4Qjl5Nk1ramswQTZQQ2VYTkFTTkd3b1duWDdZelQwSGt6b2dOZy81MHZmNlR6NjlOUC8rQmxYRU1IYStLOGdDSGJBS1FpQ0pBaUNMQWlDTERpZGpvOUVVYnptenpJNXZ5VWYyN25pY0ZPZzRFL3BwTEZZVnVyMTN2K2xMUjliQXkzNDJFUkpsR1c1VXBreUJRb1VuTzl3T0J5MUhpYW5mSHBmbTRBb3kzS0ZNbVVLRkNnNDMyRzFXaHZMbFZvTHREWUNUblE2bmVYS2xDbFFvT0I4UjBORFF4MHRrM0pQR3gwVjdYWjdpVEpsNXdaaFlhSGRDaHdvVUtEZzlLaXVyajZkS2RvazdCb3pQRVNMeFZLcVRObTVFbXhoaW1CVG9PQXNvYWlvcUs2MVFCT0VObVZWc2lDQVdGUlVYSFJHMHJPMmx0eUtlaHluSTJSd3R0SVFKUm1IVTJyNmthUS96NExJN254MHVSM1dsZE1WdXpWOUxpa2JXb0VDZ0l5TWcvWHVSME5xRm01Q080K1BnSHJ3NE1HbGt1UzA0T29BMHpta2V1NTZaUVY3N1ZyQ3Zad1Uydlg4Ky9wcGpBalRBMWFlKytoYnZzNHFwMVFLWU10VFZ6WFZDbjYxYmpXUDdDakF6NTJnTS9yQ1VieHdVZUlmZnpWcTl2REZwSDh6NCtjblNCOXdENU1PcjJwcTVKcS81QjVPMWt5Z24vRUFCNDRrTVBHcHVVMkhiWnVRUk95SGh5aThKNW5RcDNmVHE1OWEyZGtLL3N5dzNILy8vUTBkbUtJdC9HMk5UOHNwb0d0U1J0U3dZTlpNa25xNDB0cFhmcmVLUlJzT3NucmVjRURGNUpFWGN1dEVNeFBmYk51bGZPcUVDYnc0UGtGWklnVUtGSFRQNnBIbHZGWUNUUExRM0ZycWE0S0E2RHBHN2daTnExZVRVQVBvR2VTUHBhbkdUODJRWGxFRTY5dlhMcXFycTloeUpJZnNHc3VmYUVrRVZGNWVnSWhLcjI5UkhDNnF2QkMxSW9KS2hkZ3ExVnpVNjBFRTBVdnY0amxXb09CUERLZlRXZEJLcUxYeXRRbXlJQWcwQmcvVWdDeEpVczRaT2JudEp0N2JtY1djU1pkMStxY2FMeDMya25KVzdTOWg2L0oxVEo4eWhjYzk2R0grc1BDL2dNdTNMZ0hnMHQzTFczeGx2SEV4cmxiRjAyaE54VGpxdTEwQTlQaDRoN0tyRmZ6cFliUFppdHJSMk5wTitSQUVRVllEc3RQcHpPNjJZSlBzdlA3RmFod0pxU3pvM3puTnlyUUphVXh6LzM5WjdtRW12TGVkNnkvb1NheEdXVFFGQ2hSMGpQcjYrcUoyVE5EVCt0bEV0elE4MlUzRmtFOVhyV2FyR01jclUvdDN1OVZWYUhRa1VZNTZUaW44NEFvVUtPZ0NTa3RMeStpQ2o2M1JIQlVCdWFxcUtxdnJsNUJKWDcrZXorcENlT2ZLRlBSaTE0NnByRGMzL1paMTdDUUYrbUQ2K0NnTHBrQ0JnczZSbVpsWjRTSE1wRTVNVVFSQkVMd0JyU1E1aXdHdlRxOWdMbWIwb2krbzFYbmhKYm9jZGRyUVhteGZPQUdBSjkvK2dQUmlHMVZtQi81Nkw1SUdEK1BER1FPNDc1WDMyT1B3d1Y4amtWY3JjZS9zcWN6ckUvS2JUOUJ2eWU2aFFJR0Nzd0tySUlqWDRtcGpVSStMMmFOT0VJUjY5MmMyUVJBY29pZzZWU3BSMW1nMHNpQUlndDR0MkxZQXllZHViQkpsMWZXWW5RTGhBYjU0L1U0SitZcGdVNkRnZnd1U0pHV29WT3BGdU5vWWVBbzJrNGRnYzdvRW0wcldhRFJ5WTQ2QkxFbFNwaWlLNTFDd2lZUUcrQ21ycEVDQmdtN0Jack5sMGRhMzF0ckhKbnVZb1lpQ0lNaUE3SEE0TXBVcFZLQkF3Zm1HdXJxNjNIWUVXcE9QclhVT1cxUHdBSkROWnZOaFpRb1ZLRkJ3dnVIVXFWTUZyUVNhazlPa2ZEUUt1Y2FZcG56OCtBbEZzQ2xRb09DOHc5cTE2MHJjZ3N2cElkVGFwSHMwbWFHaTRLbzhBT1RVMU5SeVNYS2VBSHIvcHFOKzU5SzJuMTF3TmFUTVUxWlVnWUkvT1dSWi91WFJSeDgxdHpaRDNYUkZucHFhaDNBVG00cmdaVUNTSkdtdktJcTkvOGdUNVZXVGk2b3dFNnE3MTVUVzc5UXBSTWNKVUNzc0d3b1UvRmF3MmV5SDJ6VkRaU1FFV1FKQlJwWkJsbVJCbGhHY0lEamtwdUFCZ0d5MzIvZDFmaWtuT3pNT3MyamxCdTVkdm9uMzkrVmlhNWF2Wk9YbDhlbTJ2Ynk2OFNDMXJXM2wvQnllK1hJajk2M1l6RWVaaFgrNlJTcmZ0NW14VDM3UjRyT1QyNzVsK3I5V3QvdjNQNjVad2VqWmQ1RTg2MUgyMW5oODRhaGwwWlAvWU5BVmQzUEo0cTkvMjV0d0ZIUHRUUTh5OUlxRlhQdkdEMTArN0lVbkgrRy9lNnU2ZGFsbC8zbU4wZGYrbmVnWnozQTIyVkMvVzduNi83TjM3bkZSMWZuL2Y1NHpGNFpoR0VZWVlFUkVSRkpEUkVNeUpEVXpjODNNekZ4enk4eTFzakl6MTNWYmExMXovZlUxdDIyN21HdG1kak16MTh6TVRNMVlORFBYeXN6SUM1a1JJUklpSWd6RE1NemxmSDUveklVWndHdnFWczc3OFRnUFpjN2w4em5uOHptdjg3NitQcHpSN0hNM3NLdW9sQk10S0wvbWpaZkpHVFdabm1QL1NjVjVlL0F1OXUwcnh0YU1uMi81aTA4ejUvMXZ6K2hLQmF0ZnArKzQ2YVJkK3dkMjI4NWhGeFViVTZiUDQ0RDkzSkVJSHJmYURyWmloZ2I3MlBDVFRVcEl5RkpUOEFCL1pOUnF0ZTQ2ZGVmcldMT3JuQzZwSGJnaG94MmJ0K1F6YTJ1SmIyY0RMMy80QmZzcmpyQm82NzRRWUR0V2RvRGZ2YnFOdUxiSkRMMDBHZG5sdnVpQXplMm9wL1JvYmNodnNSMHl1T3ZxTHEwY1hjZnNmNzdIelBsUHNudlYvNUVkMDdTbi9MT1BlTGs4Z1oycm4yWDl3emRlMkp0UVcxajJ5dCtaTnlxTEdydnI5RUg5YUNWV3UrZU1tcnIxbnNsc1d6Z0pkYTJWYy9HcTVHOTRqNElEeHppdzV4dXE3Y2VaLy9KYXFrNW5HdHBMR1g3L2k3UzZPSWk5bUJrdkZySnM2YlBzWHZaSExPZnR3ZGN5Y2RKY2lwb1I0MWlycTZtdWQ1M1JsUWFPdkoxdFMvOUNrcXZ1eEVTeFp5R0ZtOWF5cjAwV25mWG5qbzZtcVBqUUQ4MjB0V0FmbTVEODRPWURPRitxaDFBSDI2bWpSOSt5YS9QbUFodHc0bUluMmNUajQ2OE4vTm5HZnBUN2R2OEEvVk1CUGY4M1lRVFVsckQyNjA5RFRsdXhiUmZYRFJySXZibEpGeFdZT1k0ZjVzbVgxMUpjcjJWb3VpN2tDN3pzdGJjb3NpcFlMczBPT1dmbnR2K3c1c3R2S2F4MnMzcmxXMnhUUlRMeHpwdEppYlN6K01WMzJMWDNheHhWR3VZOHQ0ellqcGxNRzlielozR3ZibHNWaTFmbXMvdjdDaFNka2RFMzNjRGdqUGdtY0N2OWhvZm12SWxObjhDVTM0K2dhNXkzME1WKy9EQUwzdGpJbm5JYm1ibDltVHE4RjZkS2cxWWFqck5vMlh2cytQNFlzWW1KakJzOWd1eTIrcE8vMEFPdVl0bkt0Yno4U1NGYmxEVThOUDRtektmd0xHejVZQjM1WHhkanJUL01FODh0UTQvTXJXUEhrTkZHSnYvOXRXelo4eTFsamdhV3ZQUW1lbDBjMCs2K0R0TUpyOWJJMHRjM1VlT3E1cUE5Z2FHZG5LejgvQmpUNzcrZGpEZ051ei8vaEJVRmV5aXZiU0R0MGg1TUhYTTFKZzNzL3U5bVZ1MDhTSW05bmtXTGxtSFJTQXk5NFVieVVnMCtCYjZLSnhjc1pzOVJHRC8ydHd5NHBNMVBHRVE3eTk5WXc2WnZqbURwZUFsVGJ4dUt4UWRVWlVXN2VXTEZSeWh0a2htZUZZOGp0aFBEZTdRTFdIS0wvbDNBclZPZkRySHVWaXgvQjJOcWU5Wi84Q202eEk1TS8vMzFXSHgxbURVbCsxbTIzMG1POWtlV0ZCU1IwT2t5Wms2NENqMHUxcTlleDZvdmZyQzlzV0hya1daYW1nZFFoTmNjOVZPREMwbENLSXFDcmNHRHJkR0Y3SE82Q1VENTZLT1BGQ0hFampONUR2c3JxK2ljZEtyU0tCZDdTMnVKRWNlNWMvRmIzUHJ5Qmo3NG9lWmk4QkF3ZmRwc0R1cTdNR2xZTnN2ZXlRL2FweUk3cHlkZHRVZFpsQithUXBqY0laMGh1ZDB3U1JIazVXWXpKSzg3UmcyQWh0NjlMeU92Y3lJR2N5SkRyc3ltLzZWdFQ5b0Q2NkVEekZuNEpyT2JiWnVLenYzaVpNN3FDcXExQ1l5L1pUaGorN1ZuNm9OL1lYdFZrNWEyNUowdERCbzJoTnlvSHhueWh4ZXhBelFjWmRTRVI2bU02Y3lVVzYraFpOUHJUUC8zMTZkc2E4bjhwMWgvSkpwcGQ5ekkwTzRKVkIxdk9PVTV4UWYycytPSE9wTGo0MG5RT2RqMHlkNFdwbDF6U2V0OEtVTjZYNEpPWTZUL2xka011YkluQ1Rydmk1bmU5VktHNUtTajB4a1llR1UyZ3kvdmNnb2E2a2FXdnZJbWNxZmVsSCs4bk1WN3RlUkdWZkRFdTE4QmNMQ2tncHdyODVnMmRnZ2NLR0RNczVzQVNFcnB4SkFyTTRqVmFPamRPNXNoVjE1R1Nwc202Ris5N2orazllckxzSTZDMFg5NWlaL0NMZkhxTS85Z2ZtRTlFMjhkUnV5UFh6RDRyeXU4NmxGdE1VTW56U2NsOXlwRzl6SXliZlo4Vm44WlpORGJmbURUZ1NqNmRvc09BYlpWYjc3QmpOYy9aL1NvNjRpdDNNbkl1VTJ1azVvZmlwajk1SFBNLzI4Tkk2Ky9pbFNkQ3dkUXNId0pVOTc5anR0K2U5MFhUcGRiYWNVRTladWhpaUtFa1BEcWJZMXVCWTFHVFl4ZUc0aUtCc0RON1hidjBHZzBnMDduSVpSK3Y1Zm45M3A0Y2ZLbHAvb01ZSE81V2IvdkNNK1BHWWF0L0JzbXZMYVJqZytONGRkTURxNVU3R1hGOTNIc2VXa2dGaGxtM3Q2ZlVSLzRIN2RNUnJjTTVNTzc0ZnZROHl6dE8yQnByOE9naVNDblZ3YVpBYTFDUTg4ZUdhakxkMk1vajZSdmRzYXBMVWVObGdSelN4M0NvRG4zTlczNmxFeW1ENi9oczIrK3d5Wk1aQ1E0K0d4Zk5Ybjl2VnJibU50K3krRHNTNkRuSGJ6ODFuMXNPVHlKMUQwRjdFdnN3NnJSVnlBRGMrNGNTc2JUVzVsL1MvZVR0bFY5M0lxK2JReHBxUjNvMlNYdHRQb25HeXpNZStRK1hwNzdERU5tM0FkRjN5T2Z3bXBLNmRpSmxEZzNXbTAwdWRrWklhWm1hcWRMU0kycFJ4Y1JUVjUyeGtrMHRlRHZXUnlEK2wySzgwTXpTcS9MR09DcFo5VVgzby9NcU4vZVJQRzNCeW42c1piTXJxbk1YMWNFRENhaFhRb0o3ZlFZTlZxeXN6UElhYWFZRGh4MkhTUDdaTURsMGN4ZU9JOFNKMlNjVmVWZkRVdlg3MmZtcTQrUWw2SWhyOU00bHZTZnkyNzdyY2dmZjRJemF4RFRoM2l0Z3dsWGYwaGg4RWZ0eHpMS1l4SklhVVVEdnZmTzIrbmZQWWIrS1dOWStKdEZGRDk2RTJtKzQreUdOQmJQSE9NMUVmTUFGSmEvL3pGVEpqL0haUjIxZTFveFF6MkFSNUs4NENZRUlDSDhhN3FvMVNvaUl5SlErM0kvaFBjZ0llcnE2ajZMalkwOTVTTTQ5bU1KOTd6MUZYUHVHRUhucUZQWjFHcjBhaGpXK3pKU2paRmd6S0pQMUhZK0s3Zi9xb0hOV1ZPTHJVMGNadC9qc2NUR0F4ZDJVVEE1UW9mRjNOSTBNZXBQSGQxZHR1QkpacTdkRDhnODhkeDhSbmVKUFBtSGJsYytnMmEreTVCQnVTUkVxYW15ZTNDNG0vdy95V2JmdkpLTldHSmNWTlkwSWxkV1lqMzREU01mUEJRNHJuZkhTMUhncEhSWTk5NS9QNDhzV0VIMnNOZlJKWFprL3YrYnlzQ09KeS9aUyt2VUFZQWhOMTlQRW1EczJ2SENUd3BaalZvR1dhVkMxa2hvWlJYMlJnRTBNSFBLSTJ3UnFRenFab0hqVlRoY3B4ZUJOeHQ5OTYxV29WYTVVY1JaK3hLb3JEVmdNZnRJRWlOTkpFVFpLRDhPNnRvYUxPWW1XditFMkpqUWp6aWd5RklyRjlXUWxPQTdOaWFXQk1sS3BSM1NmRjFPN3BqY3pPL1ZTRVZWSTBNc0pnNlVmRnZjR3FnRis5ZUVkME9TWmJRbzFEYzRzTmtkaFBqWUFHWFNwUHQzckZqeFppMFFjNkw3cnp0Mm1EdVhiV1B5bUJ1NXlxSS9qU2Vtb1dPaUFaZmJIWGdNTG8rRVJ2NTFMMDJualRWaFBINk1LZ1VzTWxSVUhiM3dQcjdxbzZ6LzZQTVd6dmNocGxReTIwYWY5Tnl4azZjemR2SUo3azJqeHVFS0RRYXNlbWNESXlkT1pkNklUb0NMNGkzdmhPd3ZxNm9DektCWXFhalZrUlFiUVhKQ0FnbFpiZGo0MU5nVGFEZ3FaTGVuUlVUUzFMNHpDLzgrQy9Dd2JQNC9tUG5hRnJiUEhuNWF6NlJydHpQTWFKSWxaTVZ6eGdFTW03V1dLcnNnMVhJYXV0eVBlMW40VFJ5bEh6eUlBU2paK2paUGZGRVNkSUFFMHBtdjd1YTAyeWcvM2toeXV6aWFrYytqVlNrNGdvZFFiU0FoeGtaRmxRdFNOR0N2b2JMZVFGSWIwSm5qS2QzV0ZQTXRxemdLUWQ4UlhXSThDY2NyS1ZjZ1RRNTFRNVVmcVlFVUU5UldVeW1NbUlNZ1EyNEJoaEZZekJHVVY5VFVQdnI0TTJVbkFMV1FraXJaVjNFUXFkUFNScXNSR2hWZWpTMUl4TXFWSzkzTGw3L3hzU3pMdzFwM2w5VXgrYVgzMFNWM29mcnc5N3grR0ZTUkptN3Q2YVg1L3VTclBSUWZxNkxSMDhBN254U1NudGlXNjlManViSFhwVXdvK0M4OWpUblVIejdJNTRxRnY3YUwrRlVEbTV5UXdhM3B4NWp4d21ZbVgySGlzVGMraG9TK1hzQ3BQY3EyZlljcFBmQWo5cU5xOHYrN0cxTkNNam1kemkyVms2bFRkeGIvcmZzNXY3ZXM3dDBvZXVrZEZtZnBTVTF1eitBZUhVaHBsOENLclZ2WTJWVmkzOGNmc1A0SEpVUWpYL25HMnd4T0dVM2xwKzlUMnFFZmZkdks2RTBEU1Z2MENOTmVhOGV0VjZSUVdWTE1IbnNiSGhxWjR6MHBxaDBEMmg5anp2TWJHTnpKek1DQmx4T3JobFgvWGdYdHV0TFpyR2JuOTVXa1oxNXovZ1pTbjBoWGRSa0xWbnhFWHRzb2NpN1A0WFMrNXh2ZlhNeVlkUjVzNzgwNDlSSndNZkVrT2I1ajJVZDd5TkU3ZU9LbER3bk5sVGVSMGQ3RG9xVWJxZXhtSmlNcmk3UTJwN1kzQ3plOXplVnpkL0h0Wjg4U3VveFNEUDE3UlBIVW9yY3A3MlVoTDY4UHlRWVQ0NFpleW1QUExpWDJ6djVzVy9VbXV2NVgwMU1QY3I5K0pEODlrK212cFpBVFdjV3JueDRoTjNod2pla003bGpMOXFJRzBqSkNOZnRGTHk4ak0vSTNiRisxa3VSckI1QitVa1ZVNXRiciszSFA4eTk5ZXZENzhtQXoxQjBDYnNLL01xV3ZSbFFvMURzRWtpU2p1RDJvMUdxMUpJUkFDQ0g1dEgvNTRZY2ZUbENyMWEzNzJSUVh4NTBxRXFNME9GeHVIQzQzamJLVzNzbGVNK09iSDBvNTFLZ21KelVlM0c3VWtkRmtKa1JqVGt5aW03NlJEVi8vd0k5S0pBK1A2RWNuZ3hwMnZkbXlqYmJkSWFuN2VabWpqZFhsS0hWSDBldjFaM1JlYlcwdDBkSFJ5UEtaaExKVkRPaVh3NEdkTy9qUC9xUGNjY3N3T3FVa2tkdTVMYmFLVWxaK3ZJZGFLWm9lU1ZHVVZsUmgxNXJJN2hnTWJGcDZaWGNtcWhVTlB5b3VnWnlPOGY4ejBOYVpVeGpjMWNnWFJUOVFyNG1oZDNvaUdkMnpFT1VIZVB1alFxSXU3Y3U5MTNTa1UzcG5VdHA0UDJEWFgzVTUvOG5mekE5U0lnditmQ3VKa1NyUVJISHpiM0w0OXNzdldmZkpWMVE2dFF6c2N4a2Q0dlFCTjhZMUEzTDQ4YnRpU3FvYTZOR2pDOUZxc05kVXNPbVRYZVIvZm9DVTdFSE12aldYaVBPMTZJMms0emY5dTFGOHNKamk4bU9rWFpwQmZHVFFvR2dNOU9tUlNtdnZhM3hTQ2xkMVR3a3lxMVgwNkpGT0pKRGNzUlBKTVZwMEpqT1hYWkxHNE95MnJGdS9sYy9MR25oZ3drMjBpemZUcjF2N3dBdC9WYjllVkpWOHo3ZUhqNUtZa2s1N2s5WVhYT2hJZWtKVVlNN2taSGNoMkRzVWJiWXdvTmNsTkhjazlMM3lDdW9yU3ZqdXgrT2tkZTFHZ2w2aVorL2U2S3UvWitYbUw5RWtaN0xnd1p1STFraWdNWExUb0N3T2ZGMUVqYjQ5L1JJYU9HcnF5ZzNkTFlIN1NoQlZMTmhWejIxOU9nYUNCeXZmZkk4YnhvNWllLzRXR2kwWkxIamdCcUkwVGM5T1p6TFRPejAwU2Faajk1N0VXZys5ODg3MnZZY0FKOUFJT0h6L09nR1hIK0JVc3F5b0pBbTFTa1pSQkU2M0I2Y2lJZWwwT3RudGRrdENDRmtJb1JKQ2FFdEt2dStla3BLeTdZSzhJUmU0cEtyMjI4OXhsKzhqTHU3TUtnOUtTMHRKU2twQ0hhNDhDTXRGS2tYZmZFZHFwMDZvbmNlNTlmZC9aT2pNcHhuZlBjaGo1YXBoMUwxUE1lZloyV1FZWk1ESnFCdkdNWGJSQ2thY0dmMGg3K1J2djIva0grYjlTQ2dIbTAyQ2VpUWFKU1NuSk9HUkpFbFJ5N0xRcW1VUm9kVVFFYUVSL3VDQmtDUUo0WTB2Q0VCSlRlMVlwQ2llUFVCbWVEakRFcGF3QUd6OWNBM2pacGVoU0pFTUhUV0pjZDJidWVFMUpsYTlOQ2ZFTDVqZXRST3haN2hna3lMRXZwRi9tSGVzbVJucXBtVzZoNUI4T1d6K0lLaEtrbEhKRW1wWmxnbnlzd1hBemUxMkY2alY2bDhkc0xralluREhwa0ZDNHBtWnNMVVNJajRWTk9GbHRjSnljY3JFT1M4dzhRelBtZmZhVzJmY1RyMnQvdE1UK05ZOFNKSVgxQ1FFa29Ra3k5NElzMXFMU3FORjFrWWdSK2dDNlI1SWt1UlQycnlJYUxWYXQ4VEd4azc1dFEyT1IyZkNKVWRCd3BucHhvMlZMa1Q4SlJDbUJnOUxXTTZyZkZPNmN4K2hhUjV1d0NOSlVwREdKaUZKc3BCa0ZaSktnNnpSSW10MXlGb2RxZ2g5azhiV0xKOU5NWnZqdHltSzV6RFE3cnplUmZidld2N1d0bnQ0ZE1NU2xvdFFoQkRsbDEvZXU3U1pDZXJmZkpSRlVnaHJyaXpMZ1UybFVxRlN5VjVnazJWWmVEeWVZRk5VQUI2UHgvT0JTcVdhY0Y3dkpNeTdGcGF3aE1VbkRRME5XMXZUMW9LMkVCNDJXWmFGSDhPOHdPWUZON2sxamMyUGpIVjF0dndUZGFER2F1V0hZN1lUc3dONFF0T2ZGVVhCN1FuZGZ2V2lWTE5pOFNJV0xWckUrdTFGdjdyYnF5a3ZZdldLNVN4ZmR5RUM2RTRLVnErbTBuRVJ2TjJPS3RibmYzYkMzZnUyYjZTd05MVFdldmVXTlJSVnRGNGxXbG04azVYTGw3Tm15KzVtODlQSlp3VnJXYjVzR1h0S203aDRQaXRZVDVYemYzUHJCdzkrOTFVelVITUQ3bEF6bEJZYVd4T2dxVkNwMUY1ZzgyOFE0RFlTZ0JJYkc1c1BIQTU5R0RZZWVQcFZybCswamo4c2U0ZStUNjNpdjVYK0F1UkcvcjdzYmZMKzlnTHBjMVpTRmpqSnhVUC9lbzIrODN6YjR5OXo2Y3dsZkZRamZ1VXpWTVpnTUZDNjR5MFdydDd4aSt1OXUyUUxvNmM4MWZwTzZ4NEc1VjNQOXFKU0tpcHJPUCtmS1R0UFRIdVF3b3VBTzJIZE0zOWkvYjRURTZXdFgvd3dxN2VYaGZ5MjhkVy9zKzJBdFNWR2xtd2lkK0NkN0NrdG83STY5T0d0bmZkNzduM2liY3JLSzdEYW0ybzdiSHZXTUgzK3h2K0pHZHFqUjQvdmZlRFYzQXh0S3FYeUZZWUdZNWNYMEpvMnRVK0ZrNXJTUGlRaFNTaENDQVZRUEI3UEJwVktkVmZUdTZyaG5sRWp5R3p2TFJOWnZmNDk1dVIvellaYmV3TXFCdWZsY3RlZ0JnWTkvMFZRbHpVOCtjRHZBMytWRjMzSnlNM0g2V09TZnVXNFptTFlyV1BSVlg5Q1lja0p0SjdLTW1yY09sS2JNNlFvVHNwS3k1QU5acExNb1RXUURsczE1WlZXekVuSkdIWG5LYTlPVVhEVWxMRnArMWU0M1c2UVpkVCs1R1JGd1ZxMGsxTExRT2JObk82ZFdLZDFUVUFHZTAwVmxUWklUVzY2WjZlOWhySUtLMG1wS2VpQ0wrWjJVRkpXaVNYbERKZHVWSnlVbFphamo3VVFhOVNGZEtLeXJCUzMza3hTck9IMEFONWhwY29HbGxndFplVTFKQ1ZibXU3WE4wNDZjeEptUTJnNzFSWGxXSjFxVWxJc0ljOUhBUlM3bGJJcUc4a3BTYUdKdmM1UzVpM1p5Y0xkcjdSNGVCV2xwZWpNTFdtL0ZMZWI2VXMrUWEyV1cxaEp4VHQyWU9oN0M3T21UME9XMVNIbmJOKytnM0ZUTmpONWNHaCs1c0R4azVpYS9RQ2xVNGFRY2dGalpYYTdmY3NKZkd1ZUlQK2FBZ0VmVzhBTTlXdHNhclVLdFZxTjJtZVBFbXlTK3NLakN1Q3BxYW5aRUJjWDF3UnNSSkRadnFrVUtpVTJCc2NSZjZHem1zdlMya0Z0eVVsdjRLMmRleG1XZlRVWGRYeFJzVEYzL0EyOFd1Z21SVjlEbGJFdkc5YzhqMFVIOXJJZERCNTBHN3IwbnNqV01tTDczOCtLeDhZQnNPWFZ2M0RYM1BWa1phWlFldUFBTTVaL3pxZ3N3em52M2hPVGg3Tis1dy9ZRGxReGFNaDFxT1ZFRnE1ZFJtY2RQRFp4Q0p0Mkg2Ym1ZQTFEaGx5SG5Ib1ZHNWZNUENXNGplL2RCbjMvQ1d6TjM0SmVkakJneWdzOE1TR1B0Zk1mWk9xQ3JXUjBObE5VMnNpcmE5YlROODJJclhRN2d3YjlEbDE2Rmc2SGk1b2dqcUV4bVpHTVd0WEFxSzVRczJNSlhhZCtTc1dPRndFNHNHMHBvOGMvU216bkxKeFZKUXlhOWlLengvVEdYcjZMMFNOdW84cVlCbFVIU0IzeEtNdG5qejFwdjhmbnRxWEVuRXZwcnMvb210c0hhL0ZYOUp6NEFnc21EYVJ5M3laR2pya2ZiWElHTlFmM01YRDY4enc1Y1JCUXdjaXNmbFFtZENhV0dnNVVtMWk1L20yeUxEbzJQbk0zajZ3OVFpeU4yS3VLY0diY3lmWVZzd0x2UWtuQktpbzYvNGFRSVhWV01XbkVOV3lyU2NDRUE3ZXRtc0ZEZklwejRUcEdUbnVXb2wzYm1MNzhXNllPU2ZhZFZNV1VrYjlqNThFREZGZktEQm15R1V2dUxTeDc3QzVLdHk1andwelhLTnBWanFIOE50WTlwV1BjckpjWTE5OWJGb214SjRNN2w3T3FvSVJwUTFJdjJDdXhiOS8rTDA5aWhnWnBiS0ZCZ3lZVDFHdUdxdFZxU0U1dWg5bHNscUtqbzZXSWlBaFpyVmFyWkZuV1NKSVVLVW1TVVpLa0JDR1VmVUlvb3NYbXJCUDNQZk9TV0xqM2FPanZOY1dpNTZ3M3hhRld6bkhWSFJKNXM1ZUsvUTJ0WE84Q2JFZU9WSWhEaHc2ZDhYbGZmLzIxYUd4MG5GV2JIejUzajdqK2p5K0gvUGJEQjArS3hGNjNpRnFQSW9Sd2lEOWZmNmw0OElXdFFnaEYvT2U1ZThYVjl5ME1IQnZjN3UyWHhZaFhQcmY2L25hS3hrYjNTZHYrOGFQRm9tMWlva2hzdGozNnhtZW43SGZEMTh0RlRLODdXdDEzL1BPWFJlS1Y5NXpSYzdpalY1UzQ1cjVuaE10Ly9RYTdxUDFxbFVqc2VKWDR2dFo3SDErOE1VUDB1bjJ1RUVJUno5N2RSL3p1OFRYZTlyNWFJV0trUlBIaGo5NXpiK2tXSWQ3YTcrdkxmeGVMeEN2dTlMYmpLaE5YdDQ4WHIzeFM1bXZYTFk0ZHJ4RkNLT0xSbTd1TCs1N045eDFYSlc3czFrNjgrNjM5NUgyK0lsRzh0ZDhwWHZ2ejllTDJmNndSeHo1WklycjlkbzRRd2laK2Yzazc4ZmYzOXdnaEZPR3AzU042dGI5VWZGSHJIYy9hMnFicnZ2Ym42OFR0dnZ2WThQU2RvbDIvZTBXOVVJUm9PQ2g2dFdrblBqN2ExTjViZjd0RjNQancwcEErZlBIR0k2TGp0ZE5FbzFDRWFDZ1ZWN1hUaUVmZkxBdzU1cy9YZHhCUGJ5aHRPVy9mbkNWNjNQRkVxL2YyeCtzN2lPYytMRzkxMytzUDN5aHUrZHZLQy9aZUtvcW5DQmdOREFjR0FibEFOeUJWa3FRRUh4WkZ5cktzVWF2VnFvaUlDRGs2T2xveW04MVNjbkk3MHRQVHljcktvaytmUGx4NzdiV29aVm5sanloSXNpd0xSVkVrWHhEQmI0NTZuRTduZTFxdE5wUjBUWEh4cjdjMzRFNi9nbnN5VHI4OGFkdk8vY1JmMnBXdU9pNXEyYlhyUzNyMnZRYWpES0Jsd09BOEh0dTVHeWIySmJOM2Z3N00vVFBqNVJMNjV2Vmw1TWloK0lta0JnenN5NXk3YnVUQXlPdm9PMmdvUS9OT3pzbG02WDhYNVJWMy9XeDhqbVBHamcyWVhqcWRqaDNiQ2xEMHNHanVYN3pUcXFxSVBidDBLTUN1blhzWU9NRkxHbURLR2tCUDg2a05YdmVCYlh3bTkyWnRYbEtnelZpVEVhaGt5OVlEeEpvL1lNYU1ENzA2amR0QjRlNFNocWQzUGNrVjlSZ01hakFhTUJsaU1SanRPT3cyc081ankyNDdjc0hyek5qcU5SV2Q3bEwySExTUm5hMWp4Nm9uV2JqaVF5cXREbW9xaWtrZGRYUGdpajF6ZTZNSDBDV1JtbEJEVlEzZ3M4cXJxNnN3SllleWdSVHUvcEs4QVhkNnRUcGRNZ1B6MHMrN1Q5TVlhNktxN01JNU5HdHFhcmJRc3RJZ3hCU1ZKRWtKckJzYUVnME44cTJwMVdnMEdxOHAyc3djRlZKVHRxNENlTXJMeTllbnBxWStGQlR5Wk1WN0cvaFk3c2dyMTJWdzJyWEhTaU1yc1NPZ3BBQUFJQUJKUkVGVWR4WXpjc1JGbHVKeGhzWFpDYjNIc0c5M0xnWDVCYXhlK2plZVhMR2RmV3ZuSWdNVG5ueVgvcnUyVWJCbEN6Tkc5V1Azd285NFpNU0pDMFFxZDZ4ZzhMMS9iL0g3dU5tdk1XMUUxb1VQcGhoYmtnOVkwbm94WW9SLzdZWWJHVFU1OXBTUHpPdlY4enJ0RkVWcGV0RlBlcUtlQVVOdm9uZUM5NjhSSTI0a0pUM2w5QVpQOWpGRWVPRVRVRkMwWmdhUHZKRVUyWCs5bTBucnJLZDh5MEltTFBpQy9JM3YwVFhCd1BvbjcyUitSUk1VcWVVVCswV05KaE5XcTdXVlBzZ1hkS1JzVmlzbWsrR0N0YmQxNjhkZk5RTTExMG5NVUJHYXR4YmtXL01CbSt4UGFHc0N0d0JWZUNBNm1wYldhWitpS0p0OHNRdmUvL0JEL2wxbjVzV2JleEY1QnMvNzZBL2Y4SW1uTGNQVERCY1ZybGxpMjFKY1hCTHlsYzNPdm96ZDIvNkRWUUZ3c21YamRuSnllZ1ltbFNFaGxSRzNUbUR4TXc5VHNXOC9EcDhEMldxMWs1N2RuNG5UWnZIUStMN3MyWGZncEcyYnM0ZXpmdDE3ckd1MjNUVzQ2eW43cmRYcFVLcXJmSDA4ZlZuMnhCVG1MczAvcldPeit3Nms2c0JYSkdYMkpqYzNsOXpjWE5KOFFZWHMzSjRVYlBHbWt0UVVibUZYVlZOSFlzMUdTa3U4a2NFZDIzWUVucTA2dlMrOWxjOVlHWWdhS3RUVVdJRUVCdlJQNW1DRk05Qk9ka2JuVm9IMjlGU2FUQVptMkNtMXhnYXVsNW1laHRFZ1UxRmFTa0xYWG5STk1JQmlZKzI2Z3RPK2JFNTJML2J0Q2FXS3o4NitqTzFidG5sWGczT1VrYi85NFBuM2QrM1pRMDUyemdWNVA5eHU5K1lSSTBZY0N3STJGeTBUYzROeTE2U1FaTnhnMzVwR28wYXIxYUpXcTlWK1VQTkZSMlVoU1FyTnpWRzd2V0d0d1JBMW1JWWpQRjd3SFZaZEJBUG43dmUrQVBGcGZITHYxUURNWHZ3cTcxYzRxWE82dVhIT1MyVDJ1SnpYYnZScUJtOS92cDkrdlhwaGtpOHFYQ056K0FUeVhyNkp0SzV2a1RYMFB0WStOWm1VUVJPWnN2eDljbkt1SWtWbnBjclluNDNqdkdiWFp5dG1NL0daajhuc21rSng0VzRtUGZLUzEzVEJ6VVBEZTdCTFNTZko2S1N3eE0zeTlZTlBybTlvOVNRbG45M0xLNmNQWkdydlo4bkp1Z3lqSVpWbEJlL1E5VFF1dFdQVFcreE83OHdqNDA3Tk1HL01Hc0hpU1I4eHNHZDN1bWFtVTFWeWtLNmovc2FyTTBkeDF5Ti9aK1hnM3pGZzY0czQzWUxrSUZOMDNNUzdHVHErSDV1eU9tTXhSeURqVy90Qm5jU2k1ZjlnekxpcldOWTFFNldxakVGVG4yZm1tTjQ4TlA4VnhvNjhuWnpseVZpMERnNldDWlp0M1VyT1dWSGc2Wm4zNmt1TUhuTURhNS9xaXM1WlNhbXRIZms3VjVFMWREem1KNjRuYi9DbjZPeFZXQkxTVHZ1cTZZTkdZcGgyR3djZGorRmYreWRyMUJTR0xiMkduTHhyaVpWZEtPWW1tcCtYWjkvQnkvbkZGTytyUUZkeUU2c2Uwek5qNFhzTXl6S2UvWVMxSDJEakxpUExsNlZma1BmajBLR3lUMW94UVYwbk1FT0ZKTWxCMGRBbVRjMnZyV20xV3FSdTNiclIwTkJBUTBNRGpZME9xYkhSaWN2bGtoUkZrUlZGa1lVUWFrRDdmLy8zbVBIaGh4L2VCclQvSllOTVpXVWxUcWVMNU9RenF4VGJzMmN2blR0Zmd2WWMxNHJXVkpWamRXdEpzWVMrWFU2N2xmTEtha3dKU1pqMDJoYm5WTnRsVXBJdHFIOGxId20zdzBaNVJSV3hsaVFNT20zd0Rzcktxa2hJU1ViYjdGNXRWZVhZTUdJeHQySUJLRTdLUzh2Um1TM0VHa0lkdXRVVnBUalFZN0dZejRHQnAxQlJWZ3E2V0N6QmFUbUtrOUtTY295V1pFejZNMHZKV1Q3ckpuYW5QY3dUNDN1SHRGTlpYb2JPbEhSYXRPNC9SYll2bWNhVHBUbXNublArWFVaQ2lMS2JiaHI1NTNmZmZkZE9FMFdSRGJCSmttVEh5OFBtbENUSkxjdXlJc3V5b3RGb1JFU0Vsb2dJbllpTWpDUXlNcEtvcUNnTUJnTkdvNUhZMkRaSVBYcjB3RzYzMDlEUWdNUGhrQm9iRzNHNVhGSXpqallOb0d0c2REeWkwV2ltaG9FdExHRTVmNkpZaTFtNnFZVHhvd2IrVDlvdldQVXE2VVBHa1dJNC8xOU5xOVg2VWt5TTZRT2dnVkR1dFhwSmtob0FoeVJKTGttU3ZOeHJhclh3QWxzRU9wMFgyUFI2UFZGUlVVUkhSeE1URTBOY1hKelhGUFdib3lxVlNxaFVLc25qOFFoWmx2QjRSSENKbGZ2UW9VTnIwdExTcG9hblhsaCtQVkxEOG9YTHFHN0ZqMmpKN011b0FSZCt6VmJabU1iNFVXbi9zeWN5Y05UNEM5Ylc1czFiZGpYenJaM1F2eWJMa3ZDYm56NnNDakpCMVdpMUdpSWlJb2lNMVBtQlRVV1FyODBYSFpYeHhrWUQwVkVsUGYyUy9XNjNhN1VzeXlQREwwUllmaDFpNHRaSms4T1A0WDhnalkyTjYwYU1HRkZGcUYvTkJiZ2tTUXF3ZVJDb0RRMWw4UWpHTHI5dlRhZUxJREpTajZ6UmFBSUhCS2QrQkJmRyt3SUpIcnlWQ0crSGh5UXNZUW5MVDVXaW9xSlBXdEhXZ29NR250WW9pcHFuZUdnMEdqUWFMVnB0QkRxZERyMCtBR3lhUUxqVXIrS3BWTEpvenZZQmVNem0rQUloeENmaFlRbExXTUp5dHVMeGVIYjA3SG5aOXlmUjFscXdlYWhVVFdhb0Y2dlVxTldhRnRxYXdSQ0ZXcXZWb05GNGJWU1h5NHVBYnJjYmIwV0NncUlvQVhBVFFuZ0FkMzE5L2IvZGluSmxyVXVtWFJ0RDY1RTVqd0JWc3lKM2o0dnk0ellpb2d6RVJZWXB0bi9Pc3J0Z05Uc09WSUl1aVhIamg2TVBQNUt3bkVNNWRLanNQeWZSMXZ5TXVVcG9zYnNxeEFUMTQ1YmZ0NmJUZVFNSjBkSFJxTFZhTFJxTkZyWGEyVW9Rd2QxaW9SZkFrOUlsOCsxTEg1dzdNVEhDazFudWl1VHBjZGZUSnlFU0wyM1JPdDc5cm9wS3hjU1d2OTJDdnlUM3lLRnZHYjlzRzNHV2VJNVhIcVZ6cnp6K09hZ0xjbmlNVzVYeUhUQm5DeXlhOGI5cFg2dlRZNUFybWZyUUc0d0lBMXRZenFFb2lyS3ZYNysrZTFyWDFwcVcxc08vWUlza0NWbVdXZ2thK0UxUXY3WVdpY0VRaGRFWWd4d1JFWUZYYS9PYXBFM2dKdnUwTmptUXJPc0h0dVBsaDl6NUQ5ejA1dW9IYitlaGpBam01SC90NjdLWHR1aTllNjZoK1JyamIyejlsTzU1VjdQczk4TjRkOUsxZkxwNU8xODFYQ1FENmZ2WFdnVmxGYUg3N0RWUVhFcklTdWVLQXJaeTJMb0wzRzdPYVBWdkJlOVVLU2tHdXpPMEE3YnFsdTJmU0RMeWhqQjI5RkJPRlBGM082d1VGNWRnZDdic1hFMWxHU1dsNWJUWXBUZ3BLeW1tdk1vYWZyc3ZZcW1zck54WVZuWTRHTlNjQk5ZTERTbWhVa0sxdGVDZ2dkOEViZExXb3FLODJscWJOaWJraUFnZFdtMkV6d0hYbE1HclVxbUZ2eUloS0lqZ2F3ejM4dVhMVndMZnBjVEc0R2dNcFMyS2kyeVpRR2pRYWxINWw3T1hBTFVXZytyaUdNaitGcGoyRU9RTmd1R0RZSUd2T0czeERPalpINlpNZ0t6ZVVGVHQvZjJoTVRCdU5wUnNnU0ZEWVBBWThPMGkxd3k3ZlJ5RWUxWkF6N0ZON2VRdmdBRmpZSEF1akJrTDJTTzh2ODhZQ1VOR3dzZ3hNQ2diSmkvOGlXYnEybWZvM0xrWFU2YmNROWZPUFZpNW85UzN4OG1URTYraDc5QTdtRHI1OS9UTUhvNS9qNzFzQjMwekxtWDg1RDh4ZnVTMWpKbTVOUHlHWDRRaWhDaWVOZXZSTDA5aGhyWW9lUGVWVFluZzlBNHZzRVVRRWFIekpla2FpSW1KSVRZMkZuVmtwSTZHQnE4NjUzUnFmTDQyZGZNSWFiQko2Z0U4ZDk4OTBYcmI2Qkd2di96cGQ3TkhYenY4bERkMHgzWFg4TURybXhoZnZKZnFZelhjT2ZwYUxybFljbDNkRXRXeGdqMCtabWFIQTRyWHcyTmJvWEFYbU5Td2RpNDg5QlNzZlF5ZVhBa0gxOENJRlpDLzRzeWEycmtOZHU2R0RMTzNuY0NISlJOV3pZR2FIWkE2RVo2WkJHZVZ2NjVVTW0zUy8rT3h0ZDl3YTdhWmZhdG1NMkRhWTR6WXZoaHR6VzRXckxLeXBlcHpVbVZRbk02QXRycGp6VkswQS85RS9zSjd2UkRvZEliZjhvdFFqaDQ5K3Q2TEw3N1kySnEySmttUzN3ejEwRVQvTFVJam9jR2dwaVVpUWt0a3BDNmdyWmxNSnN6bWVPVElTRDA2blk0bVg1dUdaa203d2VrZklha2ZrMmIrMzcvZDZWY1VudzV0MFpiUHZxQlNaK0dlcTdLNTUvSjJ2Skcva3dBLzVhOWRaTUd0UVpxVlRnZmJ0b0FlbURjVFpzeUFqYnRoVCtGUGI2cm5VQytvK2R2eFM1NnZPc2VVQXJwcWIzcjMyVG4vQ2ltMFp6QWcyOXRJeHNCQnFBcy9wMVFCak9uMFQ2OWt6TERibWZ2TUluYVgxUVRBTTdOM2Z3NnNlWnp4azJld1pQazZiSW82L0paZmZOcmE5MDg4OGNRWHpVQXRXR05ya2VMUkhOUmErdFowdmtpb0lWQjFZTEVrSWtkRjZkSHBJdkg2MnJUNG82U2hxUjhxRVFScUN0NElxZnVWK2M4Yy8vdUFqa3RQSFFCb1pPV24zM0xidFZmU0o5WEM5ZjM2MHMxVndxYVMrb3NFMk1Cb2FPa0xTK2tKSTBaNHQzSFRZTlVUWithelU5d3Q5eGxQVVBzY1lNbzVuOUVhT1phbDIvY3lmL290eUJXN0dOejdjcmFXZVRVekx4WFRSNHpJNjh6V3BYOGpiL1JNbFBDN2ZyRnBhMnYvK2MrbkhNMU1VTCsyMXVvU2U4RVlGRnhoNE5YV1d2cld6R1l6YXJVYTJXQXdvTmRIaG1odFRVbTc2dGE0Mm56Z0pua2tTWEt2V2JuaVRTSEUvcFBma2dwRGhJb2ZxbXE5TDZTamxrUDFFZ2JkeGZ2VjdqOEFEaFJDMXh6SXpmVnVLVUYxOEhvaldDdERnd29BQ1VZbzlUSHliUHZzUEhmU1lNYnNMcWVrT3FnWFNabGs2ZmV4WlZjVkFQc0s4bkZuWGU3bEpIUGFzTHIxOUI0NGpCbnpGaklpM1VGUmlWYzNQREVWVTFndUVtM3RtOW16Wis5c0JkU2NRZjYxVmxJOFpFSkxwMEsxTmIwK3NwbTI1bVUrVVVkSEc2bXJxNk8rM283RDBVQmpZeU5PcHhhTnhvWEw1VUt0Vmd1MzJ5MTVQQjZoZU1OelFnZ1VFSW9RZUNaTXVMUDJoVHJMYXp1bVhEY1BUa3hiTlBuNks3bDcxWHQ4c1RPZW1xb3Frckw2TURSbzdZU0xUZEtHd3N5dGtKTUZtZW5lS09iUWgyRHVPQjkrNUhyNWtiT3l3SkFFR3pkQ0xEQmhJdHcxQ0JaMkJiTUJPSi9VZHVwVVpzOGF5cTA5dTZBM3BiRmkrNGRrR2l3OHRlQ3ZqQnJaaCtXWmFlelpWODZDNWU5NzJWMXJDdW1mZXp2bWpDemttaEpxRXNZd0w5ZkwvWHRpS3Fhd1hBenk0NDgvcm4zKytVV244cTJGSk9RRzBSS0pscUFXRVdEMWlJNDIwcVpORytMajQ5SDUvQy9TYTYrOVNtbHBLUlVWUnpoMnJJcWFtbHJxNnF6WWJQV255L3FodmU2NklmcDE2OWF0a2lTcDkwbnZ6dU9pdkxhZWlNaW8vMW1DN3MrTjNjTmhnNHBxc0ZoQWQ1cVhycTRFUlFkbTQvOXVvcm9kTnNvcXFraElUa0VmbktHdE9LbW9LTWV0TnBHY0VFcHhmVElxcHJEOGVrVlJsSjJabWQyZjJyOS92d012aTBlOWI3TUJkaCtMaC9OMFdEd01CaStRbVV3eHhNV1pzVmdTU1VsSjRaSkxMcUZIang3bzlkN1BwYnBObXpiVTFOUlFWMmZEYnErbm9jRkJZMk1FV3EwVGw4c2JJVldyVmNMdDlyTit5SGc4bmtDeUx1RFpzR0dqMDJxMXZob1RFM055WUZOcFNJbzFoVWM2U0hRR1NEMURyU3MyNFgvZmI3WE9RR3BySFplMVdKSlNXejFIcXplU21tb01EL3BGSnNYRnhlL3YzNy9memFram9RcE5xN3Y3dExYbXZyVUlINE9IVjFzekdyM2FXa0pDUWdEVUFHU3oyWXpKWkNJNjJvQmVIMFZrcEk2SWlBaWZyNjExZjF0UTFDS3crSUxKMU9ZOVJWSFdoNGN4TEdFSmkxOWNMdGVIbDF6U2VYOHpRRHVsYjYwMXY1cEdvdzNRRXVuMVVVUkhHM3pwSGVhQWJ5MEFiQWtKaWNUR3htSTB4bUF3Uk9GTi80aWdxU0pCN1VzQlVZa2dDdkdRRWl1OGl5NjRLaXNyWHcwUFpWakNFaGEvZlBubGw1c0lUY1lOQUp0UFczT2ZYRnZUTktzSGJTcDBOeHE5eWJnSkNZbEVSVVdGQWx0U1Vsdk1aak50MnBpSWpvNG1OUDBqSWtocjB6U1BrcmJRMnRxMlRkcnVjcm1XaEljekxHRUpTMzE5L2ZJcnJzZzkxQXpVR2sra3JmbVgxR3RlTnVXbkpEcFJla2RTVXR1V0hwSEl5RWdzRmd0eGNYSEV4TVRnVGYvd0p1MUdSR2g5S1NBQmN6UzR6RW8wcXlGMVM1TGsycnQzNzFMZzhLOXRrREl6dTRWcHdjTVNsdE1VSWNUaE5XdldiRzFOVTJ1bXJZWGtyYlVXQ2ZWWEdQaTUxcHFuZDBSR1JyWUVOb0NrcENUaTQrTnAwNllOUnFPUnFLZ285UHBJSWlMODRLWTViVi9iWlpkbGYyZTMyMThJRDIxWXduTHhTbVZsNWNxeFkyOC8za3hUTzZHMmRpTGZtdGNFMVJJUjRjMVpDdzRZeE1mSGs1U1UxR3I3M25YSXRWb3NGcTlKNmcwa1JLUFg2d09CQkswMklsaHpFNG9RT04wZTRmWW9RaEZOckI5K2RPN2FJM3Zwcy9tRm0wTTRITndPM3Zwb0I5TlhiT0x4L04wY2FSVGgwUTlMV0g2RjRuYTdQODdKeWZuOE5MUzFrS1gxL05VRnZsUVBYeVZVUkZEQUlMZ2UxSXpGMHZhRVZsUWdBYWw5KzJUOGdZU1lHQ01HZ3dGL0hXbXcxcWJSeURqZG9OWm9VS2xVSUFUQzF6ay91QjA2ZU1DNVlNTi9sd1FEMjdMMzEvTjZpWk14ZmJLSXN4NWl3cXJQd2lVMVlRbkxyMUFLQ3d2Zkx5czczTHk2b0JGb0RBWTFINkFwd1RXaFRWSFFKbTB0dEI3VUdBZ1l0RytmZk1JK2hGUU9KaVcxSlQ0K0hwT3BEZEhSWHBNME10SnJralpwYlRyTWJhS0ZJVEtDQ0sxR3FGU3k4R0pid0ZiMlNCS3VnMC9kOTdITDZmeVg5OHFONU84OXdsM1g1cEhUd2NMRUcvcmcrcWFJcnh2Q2t5QXNZZmsxaWRWcWZiVlhyNXdTSDNnRmcxcHd3WHR6dmpXZnRxWnFSVnZUaFZRWW1FeCtFN1R0U2ZzUkFteUppWWxZTEJiTTVqaE1waGlmU2VvRk41MnV5UnoxUlVtRldxMUdCTkdMTkdsdGtodHdiaXNvZUVVSThTVjRjQ3NDbGNyWG5LeENKV3dVVjd2Q015RXNZZm1WaUtJb1h6My8vS0xtQVlPQWIwMlNKQ2V0KzlaOEpxaEdOR2xyVFdWVDNweTFhRXltR014bWI4QWdNVEh4OUlFTm9GMjdkaVFrSlBoeTI0d1lERkdCSW5rL0E0Zy9rQUFLaXBCUWE5UUJJa3BKQ2pCZ3VzZGRON1RpK1BIakw0Q2VQcDFpV2JXOWtLTTJPeDk4L0NVL0NJbUdSbmQ0Tm9RbExMOFMrZmJiYjFmUG1ESEQxZ3FvK1RVMlA2Z0ZwM2kwV0hHcWlibkRYK1FlNVZ2aFBaYUVoQVRhdFR0MU9XUUxZSXVKaVNFcEtRbXpPZDZYMjlaa2tnYURteXhCbmNNamRIbzlHcFdxMWFSZEpNa1ZGMmZlNEhLNVhyejd4aUYwNXdpVFh0L0FwMG9pQTJKVjZIVmhUcTZ3aE9YWElEYWI3WTJ1WFMvOUpzZ0ViV3ltcmJXYWpOc1VNTkNJNXFBV1d1VHVKWkJNU2tvaUppYm1sUDFwRlZuYXQyOVBkWFUxVnF1Vit2cDZYeUY4STA2bkU2ZlRpYU9obmlPMlJvd21FMnFQazhaR0JVVlJFRUlJUlZFVUVCNGhrQ1NRa1NUVko1OTg4dkpWVjEzVmE5cE52OGtHY05lVmMvVzJhUDRVSDE2cEtpeGgrUldZb0x0ZmZmVzF6YTM0MVlKQnpZVTMxOVVqU1pMU1BCbTN5YThXV2pabE1FU0hGTHkzYjkvK3RQclVLckJwTkJxU2s1T3ByYTNGWnF2RGJyZmpjRGk4bEVhT0JyNCtWb2NxTWdwSnVHaHdLOEl0SkVtdFVna2hGRHdlOE5JYVNZb0FOd0xYMVZjUExOdno1YTVGWDNxaUZpZHBGZDc1K0hPeWNudlRNWXhyWVFuTEwxNisrZWFiMVE4ODhJRDFKQ1pvaTJSYzM2cFRMZEk3dkg2MWxsSFF4TVFFa3BPVDBXaE9EelJPeUtkcXNWaWFKZTVHKzJwSkk0bVBpOE9randDVkNrbWxRcEs5cUN2TEtpRkpDQ1JKU0pLdllsL0NKVW1TTS9PeTdFMmxKU1hQcmk4NlRNL2VmWGw2Y09md2pBaExXSDdoVWx0YnV5UWpvOXVCazJocmZtRHorOVo4QVlNQXFJVXc0bnFqb1A1YTBPaVFSTnptaGU1bnJMSDVKU1VsSllqU3lPNmpOR29rUFZueGNiYlpxSyszMDlEUUlCb2JHeVdQeDROYXJjYmo4UWlmQkJaWmxpVEptVmhUK3RLTTMvKytteXpMZzhKVElpeGgrV1dMMiszZTh1aWpzejl1Qm1vT21uTFdUaFFGRFRaQmhaZTFJNWc4VXU4elFVMCtFOVJDU2tyS0dmWHRwQXo0VVZGUkpDY25rNWlZNEV2Y2pjRmdDQzZVYndvbStHdTdWTDVBZ24rcFBvSXFFdTY2Nis3amh3NGRlZ0VvRDArTHNJVGxGeTAvZnZycHArODkrK3l6RGEyWW9JNW1KbWlnd2lBMFlLQVd3WnFhdjhEZFlJZ09MS1BuTjBHYnMzZjhKSTBOdklHRTJ0cmFnTllXOExVNXZkVGhicmNidDl1TngrTkJVWnFDQ0VJSWZPQW1DU0hjZ0NSSmtweWEydkZ6cTdWMlFYUjA5Tnp3M0FoTFdINlpjdmp3NFdWOSsvWXI4NEZYTUtBMU4wSGRRUlVHb21sUmx0QmdnYi9BUFNySzRFdnRhRU44dkRlMTQzUURCbWNFYkFBZE9uVHdSVWh0TkRRMDBOam93T2wwNG5JNWc0RE5qY2ZqRVI2UFJ3b0dPSi9XSnZsTVVwY2tTU3FqTWViZmpZMk9OSzFXZTFkNGlvUWxMTDhzc2Rsc2J5UW50OTlGYUdwSGN4UFVSV2paVkFzVHRJbGpMYmpBUFpTT3FFT0hEbWZWeDlOYWpDMDZPcHIyN2RzSDBSc0ZNKzc2cXhMOHhKU2FVNW1rVHFEeHd3L3pseWlLVWhDZUptRUp5eTlIM0c3M1I0c1dMU3FnOVFob1FHTTdtUW5xQnpXdE5xSlpkWUdCbUJoVGdJNm9mZnYyUkVkSG4xVS9UenREdG4zNzlsaXQza1ZlUXJVMnYwbnF3ZVB4NFBFb0p6SkpFVUpJUHRYVU9XellzUEx2dnk5K3ZrT0gxQTZTUktmd2xBbExXSDdlSW9RbzNyRmp4OW8vL2VtaHVsWk1VQWN0QXdhZUU1dWdYazFOcDR2MHNYYjRPZGE4QmU3SnljbG5aWUtla2NibWw0NGRPOUt1blRjRkpGS3ZCMDBrK3Fpb0lHTEtDTFFhRFpJc0MxbmxYMGsraEcwM0VFaVFKTW5ac1dQYXpwcWE0OC9SY3ZuTWkwYXNwWHRZdjIzUHVibk85bjBYcE0vYjFxK2d6UHB6ZjY2d2Z0dUZhczFPd2ZvdE9IOGhjNlc1ZkxacE5RZXJUL2tLdW91Ly91L3lmdjM2bHpYVDFsb3pRZjJKdUw3cUFxOEpxdEg0dGJWUXY1cS9aS3BObTFqaTQrTnAxeTZKamgwNy9xUjdPaU5nMCt2MWRHaHY1cTFQQ25uOTZ6SStLU2xuMDNlVk5LaTlOcklrUEpSVTEzSE03c1JxZHdpN1MwRldxWVVzUzBLU1VCVGhYWXRVQ09FV0FwY2tTWTJ4c1hIdk5UUTBQUFZMQWFJbkpvOWtXOW01STF5cUxNem5tWlZiZnZKMXlqOWJ4U01MMTE2UWUxcncwTy9aOFRPUGExY1d3ak1yVzNsT08rRGVlZWUycmQwcjUvRmt3VUcwdjVDNTBseGVubk0vMjRwdEp6M20yTEhxRjlONzlOMFRwS2s1Z2pkSmtocURRYTNKQkpXRVNxVVdYbERUaWhQVmdYcnoxY3kwYlp0RWh3NGRRbGFjT3UvQUJ0QzJYWHNtL200TTgzOC9nZ2R1R0VTLzlrYjIxemlKaW9yQ0VCM0RwUjNha1o2VVFMdUVOa2hDd1lXTUxLdUVJb1FBU2NpeXYxQmUrQmtBR25OemM1ZTRYSzdYZmdIK0JRcTNmVWhaalRkb0VpcmVDYXc0YkJRWGwrSU1tcy8ybWlxS2kwdXd1ME1udWFJb3BBNlp6TWI1azF1OWxzTldSVWxaMVpuMTBXNmxwTFNpQmRlZHcxWkRTWEV4Tm9mN0RPN0p1MzVvY1VrcGRtZkxGN1Ntc295SzZwWXZoSzJxdk5WK0swNDdKY1hGVkZudDUzV2NGQVZTaDhERytTMS90NVhEMWwzZ2Rudi9EdG52Z0pJU3NMZWllaWw0N1lxUzR1Yjc3VHo1eEJ0TW1qVDJselZYRkNkbEpTWFlXaG5YNXVOa3Q5di8zYU5IaitCOHRSWW1LQzFUTzN4ckdLaEVNTWRhODJDQm56aXlLVit0UFczYnR2M0pjK0FzcXRBanVLNXZUNzc2U3NadWJ5REZrc0NudGRVWURCRzRYRzRrV2NhR2dzZmpRYTFSQzZGU1Myb1pISTFPWkZrU0VpS1FBaUs4S1NCU1llSFhja0ZCd1l1REJnMUtVS2xVMS8wY1FhMXczVE5NZStaZENnL2EyWDNYZFN3eHFCazI5WjlNSFpZRndLdlRiMlIxVFVjcVA5c01laDNxekp2WnRtUUdUOXc3aUdXN1BhUWw2Tml6cjV6WnI3N04yTDdwZ0lOWjQ0YVRYL2dOdHF6NzJMTnNScUN0UlZOL3c0b0RjYWpkeDZrNldFaks2TWRaTzIvOEtmdFlYYmlHQVlNK1FFYzFGZm84Q3RZL1Q0SVdWczRaeTZ6VjM5TTUxY3pCd2lMR1AvRUdENDNLT2VVOXJWdndJRk9lMmtSR1ZtZktEeFF6ZCswWERFbjM2aVhMWm85bnNmVUkrM2J1WXVyTC8ySDZzRXh3VnpOci9NMnNMRkpJMGR1cE52Um0zZXAvWWRGQnhlNDFEQjcxSjFJeXM3QlZIaVI3L05NOE5YSGdlUm1yV2VNZ3Z4QnNXYkJuV2RQdkQ0MkJiVVZRVWdGRGhnQ3hzSElseEFJN1ZzTDRHWkNlQ1FlS1lPNXlHSlhqUFM5L0FjelpCcnFEWU5WQ2pRbUtmQXROT29yV1UyRFBZVW1hN2hjelY1U2FnNHdjL0JzcURGMlI3UTA0S3Azayt2WTFINmVldC84alA4MzF6WWVIRHg5dUxWZXROUk5VQ2E0RjlhOEpxdEZvUmRNcVU1R0JPdENZR0JPeHNYRWtKaWFTbk55ZVRwM09rYnRkQ09Xc3R1UEhxL2w0OHdmMHYyVTgxOTMvWis2Nzd6NUdqLzR0MTE1N0xWZGNjUVdkTDBsRE5zUVJiMmxMYkd3YlNWS3BKSlZXSzB1eXJKSmtXUU5TQkpJVUpVbVNTWktrUktERHZuMTdoeXVLNTFOdndjTDUyWTRjcVJDSERoMDY2L052NnhFbDN0cnZiUEg3SzMrOFhzVDNHaVYrckhjTElSVFIwR2dYUWlpaXRyWW1jTXozRzU0UUhhNmRHbkxlL3JkbWlXNjN6UTM1N2ZrSHJ4R1gzelpYZUlRaVhJY0xSTHU0SzhRUG5wUDNhLzliczRTbVhUOXhxRUVSUWpqRUgzL1RVZnpwOWM5YTlLRnUveW9SMytWbVVYK0tlNnI5YXBXSWEzZUYySC9NNGYydHNVWWNyL1BlMnkzZFZPS1BMMjRYUWloaTc3OW5pazQzekJCQ0tHTHpjNU5FajVzZkVZMUNFVUs0eGROM1h5bis4T0kyMy9PNVR0enhqN1dCNnpjMk9rNytyQnYzaVQ1dEUwVmlZdWgyOWYzelQydWM5citsaUc2M3RmejkyM2NVMGUyVzBOODhSeFhSS1ZFUm54ejIvdjNqeDRwbzMwOFJMdC8rRDU5VFJHUTdSZXc5NnYyN29hSHAzQzllbXlHNi8rNnhYOVJjZWZmeHNhTGZmZDduMkhoa2grZ1VxUkt2ZkY3ZFlwemNidGZPOTk1Yit3RHdXMkE0TUJqb0MyUURYWUVPa2lRbCt0N2hLRm1XSTFRcWxVYXRWcXNpSWlKa2c4RWd4Y2JHU20zYnRpVXRyU09abWQyNDRvb3J1UGJhYXhrOStyZmNkOTk5L08xdmYrT1ZWMTdtNDQrM2N2eDQ5Vm5qVWZQdHJIbURUTVlvdHV3dEpySmJINGJGZXlndksvTkZTTjAwTnRSenlPckNraGlIeHQySVEzaUVKTW1TSkt1RTEveVdGQ0Y1a0x4cXF3VElraVJKR1JuZHZpNHJPN1F3S1NrcFZwS2s5RjlhSUdEd3lGdXg2TDNXdlU3ci9ZSlhGRzVpOGpPdmNLQ3NHc1ZSUmFXY2Qxclg2cDJYaXd6SVNjbVluZFZZbllEdTVPZWs1VjVOc2c1QVMvK0JlU3pjdVJ2RzVtQXIzY21NZWY5aTk4RUtGTGVObW1valZ1QmtYb3hkT3dwSUhYUXpYV045bmlPdEVaTzJTZEh2bmVkVlo1SlNVckJWZlE3QTFxMmIwZHB6bURYallRQktTK3hVNkFxQlBMTDc5bVBHNUQ5eGI4Vm41UFh0ejZoaGd6anBtbC9hcm13di8vR0NqRnZKZGloWHc1cjVzTlpycFdIZDR5MlA4UmZ5OUJ3S0dXYnYvM1ZCNDFCWmZSU2pNZmtYTlZkMjdmeWMvaU9uZXg5elFnNTlNNHlCZlUzajlPbDNTVzJUM25wMCt2MUhtZ1VLZ2lPZ0ovQ3J5YUpwQlhkL3NLQXBBbW93R0h4cmdyWWhJY0ZiQjVxYW1vckpaRHBuWTNxV3dPWmh4WHNiMkJPZnd4UFhHUGorbXlLY1Bsb2poNzJPVDQ3VzBTNDVtV2pGUVgyOTF6OGdxMVJJc3BvSUxjTGpjZU5VRUVpU2dpOXgxdzl3eWNudFA2NnFPdnBjWEZ6Y1RDRCtsd1JzT3FPaG1iT3BrRkdqL3NwajZ6OWdXSFlLOWwxTHNVejQ4UFFHUmc0YUd2bk1IZENLMzRPcVZERmgrRzBNVy9RaDh3ZG5vcTdjZ2lYenJ6ODVEQzBIOTgvbnJGS0FyTnhyR1RIWTkwMGFjU1BHaEZRQXNrYk1ZRi9PY1BJM0ZiQjAzbjBzM2ZKSDhwKzU5OFFOT0E4eUl1KzNsRFRyYU5kaEQ3RGlzUW5uZk95TXlUQnlSTlBmSThkQVF2QitZK3ZubVkzUjJPeldYOVpja2VYVzNIVEI0MVMxN1BWL3YvSGc5UHUvSjdTdzNkR0tYeTFBOVIyMDJMSHdyd25hTWdKcThBVUx2UHhxYmR0NmszQ1RrNVBQNlhpZUJiQUozdi93US81ZFoyYnA3M3Boa0FXZWhnWWNEZ2NPV3czcmRod2pPUzJkUkJ4WXJiVjR6Rk5pQUFBZ0FFbEVRVlNCVXF1b3lBaFI1eFNTVHExRzhiZ0JTWkVsQ1FGNEN4UzgvalloaEdRMng2K3ZxVGx1aUltSitldXA5WlFMS3dham5xckthdWlhY09xRHE4c29WYWZRdDJjS01yQit6YnU0MForM3ZoWHYyRXlaWXpiSk9pZmJDcmFUTS9ZUDRLNmt0TnBJLzd4TTFNQ085ZXVwVkU1OVQ5bTVBeW1aOHcrS3FxZDR0VGEzbFJxSEFaUGh4UEdtQWYydjVxRnR4V1RQR3V2VnhoUTdWVFhleHF4V0s3SEpHWXlla0VGdWtwdThKNHRPZmpQYVZCYXZmWS9tdm0ydDRhZDkxZlZHc0ZaNnZkeit5WithQjRaU2tGT2h0NDlBb3FycTlDWmUxNTQ1bEQrekFTZTAwRUIvcm5PbGQwNHY1bTNiQ3JkbTRhemN5YllpS3dOOCs2eFdxNk5CaW5ubHdVZiszejZhMGpvY1FFTUlxTFZNN2ZCcmE4SDhhcUsxeWdML0tsTnQyMXBJU2VsQTU4N25udW5ueklHdDRRaVBGM3lIVlJmQndMbjdBVkJGVzNpcWR3cUZoVjl5U05HaVBuS01iK3gxdUJ2c3RORkhZdGJwaURYRlVIL2ttS2h2OUVqQ0k0UktyWlprL01TVUlmV2traEJDTnBuYXZHV3oxVVZGUlVVOThuTUN0Z21UL3NENENWZXgyR1JnekNNdjh0REluaWMrT0dVQVUvSWVwVy91TmFRWkZNd3A4WUVIWHJGakJhT20vd3Q3VlFrbFZUSjkrNzVQNXJBSFdUUmoxRm4zeldMMk1IYlExYWlwcHRJNGxJTFIyYUJWbUQ2aE04TnorOUF6V1krYzFCNkxmT3A3TW1hTjROVVpIekUwcHdjWldaMnBMQzNsc1pXZk1qajl4QWJrZ0lsekdQclpiOG5zZVNVWktTWU9IaWhtOG9MM3VYZVFnYlZQak9leDlVZkpTSTFsWDJFUmp5eDgrNVJUTXlIcHpML2lGVHRnMUhTd1YwRkpGZlR0QzVuRFlKSFAzNTZVQzRPQXJDd3dKTUhHalJCcmh1WHpZVnllTjNoZ0xRZHREdVF2T28wUFhjK2g1TGtmWld1WmswSEoybC9FWEJseTd5eGVIblE5dVFNL1FPMTBZYlEwcWFQTEh2M2RpL2MvczJGWE0xQnpCSUdidHhhMGxXQ0JmNkZqWHdSVXRCWUJqWWt4QmRZdGFOOCtoZlQwVGtpU2RNN2ZVMG1JYzVObmMrVElFZmJ1M2N0MzMzM0hvVU5sSERsU3diRmp4emgrdklhNnVqcnE2NzFGOVBYMURUaGRUc250TGFDWFBCNlBKSVNRZlpzYTBBQmFJWVFPaUxUYjYrK0pqSXo4dzdtNjRjcktTcHhPRjhuSjdTNFlHRmFWbGVEV203SEVHczU3VzI2N2xmSWFCOGxKQ1NHNVBEV1ZaZGd3a0p4d1pocVAyMkdqdkxJYXN5VVp2ZmIwc29Qc05aVlVXZDFZa3BMUUJuMDZIYllxeXF0c1dKSlNUdnRhRjFJVU41U1ZnZEVNcGpNWXFtMUxwaksvTkkrVmMwYi9ndWFLbS9MU2NreEI0M3I4K1BFWFltUGp0alF6UFJzQXUrOWZyOVltU1U3Sm0yUWZBRFpmWllFL1QwMDBBWnFCNkdodi9XZGNYQnlKaVJiYXQwK21VNmRPZE92VzdaU0xzcHl0cUdiUGZ2VGNtR2dHQTVJazBkam9MWTUzdWZ5RjhRcUs0dkdYV1BsRHNUNVFGVTIvQmR1NlhzME5nSysrK21yUHlKRWpVYXZWdmM5RlArdnI2L0Y0Rkl3bmNwcWNCOUViVFJnaXRSZWtMVmtUUVV4MEZNMi9nYm9vSThhb003ZnFaYldXbUpnWU5LclQvNnBxZEZIRXhFU2phb1pkYXEyZU5pYlRHVjNyUW9va1E0d0pkR2M0VkNsWnZXazhYRWJYSGwxUi9XTG1pa3gwMExqVzF0YStQR2pRdFp0Ly9QRkhWeXZBNWszQzlmblZKRWx5TlRNL0E2RG1Oei85Q3h6N0F3VnQyclR4clZuUU5tQitubXUvMmprSUhyUXVxYW1wT0J3T25FNHZyWkhiN1FwUUduazhpZy9rdkdEV0JHcENlSk1sRmNWWFY0b1F3dVYzdXExYjk3NzArT1B6bGp6eXlNUHFpSWlJZTdob3BZYmxDNWRSM1lxQ2JjbnN5NmdCUFFuTC8walVzWXdkTitJWE8xZnE2dXBlZStDQkJ6Wi84Y1VYemZQVW1rRE5Hd0gxYTJvZWZNd2QvZ2hvOHdSY2J3VFVuNnNXdXNKVVdscEhVbE5UeisrUW5Pc0xkdW5TeGNmWjVneWtmL2dMNVAyYW0yOFRRZ2lmMWtaQWxWTVU0V2NDa2Z3K3R6bHo1dFRFeDV1WDNIMzMzWEpFUk1UZEYrZmJZK0xXU1pQRElCS1djenBYNnVycVh2L3JYMmNWdlA3NnNvWWdUYTBoZVBPREdrR1ZCYklzdFJZQkRmalZ2SVNSaHFBYTBJUkFXa2VYTGwzTy83Zm1uS3Z6a2tTWExsMW9iR3owOGJXNS9GeHRBYzJ0S1pGT0JJR2JRQWloK0loQVFreFVTWko0NElFcHg3UmE3Wkk3N3JpRGl4ZmN3aEtXY3lkMWRYV3ZQL2JZWS9uUFB2dHNQYUdCZ29BL3pRZHFJZmxxWGhOVWJoRUI5Uy9FMHB3dzBwdXIxcGJVMUE1MDZkTGx2QVFMemp1d0FVUkdSdEs1YytjZ1dpT3YxdGJrYS9PYXBENnoxQTl1d3FlbCtTT2x3ZUFtU1JMU1BmZmNlN1N4c1hIeDNYZmZyZWgwdW52Q1V6TXNZVGxyVUh2dHIzK2RWWEFTVUd1UXBOQlZwb0tYemd1T2dEWnBhazBKdURFeHhvQmZ6WityMXJselp5SWpJeS9JL1oyejRFRnI0S2JUNlFMZzV2SDR3UzNBMWViWDJ2eWJEOGJGaVhSQkFiQmh3MGFYSkVsNyt2VEpkV3MwbWpNT0tQd3ZnZ2RoQ2N2UFNXcHJhMStlUEhseXdlTEZMOXBQcEtuUlNtVkJFNmpKd3IvQWNXZ0VOS3JGZWdWK245cWxsMTZLMld5K1lQZDRGakYzRDU4VzdtWE82bnordUxLQVY3NzhJY0JEMVZoZncvS1BQbVhHdnpmeGwzZTNVNnhFY2NrbGw5Q2hRd29KNWpnYUZJbkQ5WTNVQ0sxdmRYbDk4T3J5UXFQUm9GS3BoVCtEMlI5MW9ZbkRyUkZ3UFBiWVk3VTMzenpxQmJ2ZC92U0ZuaFFIOSt5azJuR3VydVprMzY3ZDJFNDc0NmFja1RtLzRjQlpFSDlaSzRvcE9nUDJoMjJ2UHNLOVQ2NzUyYitrSTNPZ3FKWG5zVzhYWi9CY1QwZmN6THRyTkZ0SzdEL3B1WjVLS2t1TEtLazhTN0k3OXdHR1pOOU0yVWtPT1g3OCtBdlhYRE1vUDhpbjFrSlRveVVOVVhCaHU0K0dLTlNuRmhtcDl5WGdlcXNLNHVQTldDeHQ2ZEFoaFVzdXVlUzhwWFdjTzJCVDZsaXpxNXd1cVIyNElhTWRtN2ZrTTJ0ckNRQS9GSmZ3ZGIzTTFkMDdreDByZU9DRlZSdzJ0Q1U5UFoxb25ZYjlEUkwxSHNFUlJZUFJhTVJnYUVaUzZRTTN0ZG9QYmw1eXltWUVsWTJBWThPR0RmVlJVWWFYYkRiYjQ3NkJ1U0F5ZSt6VkZKU2NLMTdNU2lZT3ZZa2krK2tEWVdsSk1jNnplR0UvVy9VNDB4ZXNPKzNqYlRWSHFhaXkvZXlCYmZ4VVNHaGxGazhjeWhrODE5TVlxUjFMV1ZHUlJ2OVUvVTk2cnFlU3RmUC93THpWaFdmOW9Td3BMajFSdVp6ajZOR2p6OFhHeG0wSmluNmVEcWg1SkVueStJTUZMYzNQVUxKSWYxV0JuNElvUFQzOUp6SGhYamdmbTJ6aThmSFhCdjVzWXovS2ZidC9nUDZwZE83ZWs4ZTcrL2Vrc212dmZyWitYODFEMloxd3VRWVNrOUNPOXpldXA2RGNnY2trK2N6U1FOb0hQcjlhd05mbWR1TXJKY1VUN0hQenBZUUFFQjF0WEhiOGVMWGRaREpONFR6V2xwYnVYTWZpTlo5U1dPSEUvc3lqN0RiTDVJNjRtMkU1M2pMcGZWdFhzMlQ1KzFqbE5veTVkeXFEc3J3NU9vcTlna1hQekdkSDBXRmlrenN5N3Q1cFpLY1kyWjIvakZWYnZxREVWc09pT1gvRm9wVVpPdTRQNUhVK2RRTHQ3dnlsekYrMW1ZU01xNWcrYlR3bU5iaXRaU3hlOURLN2k3NUgwY2N4ZXNJVUJtZW5nTE9jcCtZK3o4NGR1emhncldUbXpPL1FKZmRpNXIwakFpOUQvc3JGck5yNEJSamFNbXJDSkFiMTlQWGRXYzJTdVkrdzdlQXhoazM0STZQNitrcGYzRlpXTEp6UHBwM2ZrdEQ1Y3FaT214UW82TjYzYlRXTGxyNlBEUzBaQTI1aTJxMkRPUitwdVB1Mnd2Sk4zaG5jTytUWndLb3RVR0tEUlhQQW9vV2g0eURQMS9YdDYyRFpHbkFiWU9JMHlQRlh1VHZnbVFVd1pEQXNYZ0IyQTB5ZkJlbSs0WGgxOFFzTUgvdEMwNzJjNHJuYXF3NndZUDRpOXBUVWtqbm90MHdkTnlSUWNyVmozV0plWGYxZm5Gb2plY052NDY2aHZWR3E5akhuLzdkMzd1RlJsSGY3Lzh6c0ladk5ack1zSVFraGlURmdpQ0hFaUJnUkl5SWlJbEpFUktTSWlKUWlXcXJXb3JWS0tTOHZQenpVSXFVVXJWSThJWjRRRVJFcElxVVVFUkFSTVVhTU1jUVFZZ2doaEdXejJlek96dlA3WS9Zd3V6bUFlS0srUHRjMTE1NW5abWVldWVmK251N3Z3aGZZdGJXQ3VySy9NNnZtbjZRVlhzYU1jWU5Qd05KY0xGLzRDQnRMdjJMSTJJdWprYXloZ29VTEYxTldmYXdoUGpuOXFTY2VmV0EzMGJXZkxUSG1aN3VncG10d0hBVnFrVUJCQW9tSjBhQ21WUlgwK3Zaa2lMNXpZSXNabjlZM2tKdCtWdHNQL01lcE9LSXlLVFVKZ0x5OFBCUkZvVnRLTitKYldraE9SdWRyQ3kxaDhBcURHMEFnMENtNGlTNWRuS3NPSGFwcjd0YXQyMjNmbFNxSVBTT1A0Y050YkgveEVZcEtMbU5JdHBtMERNMVBWNzVoRVNQdWZJMEZpLzZYWkY4bE04WmN4ZEp0NzFPY1ltYnBmVGV5em5jRjgyYU9vNzV5RHcwTmJzaXlrOTZySDhNdEZ0WXNlWkhpSVZlUWI0T3M1Sk5Jb0ZXcVdQWnlPUS9lL2t0V3pMK0R5WE1zcko0M0hsOTlKWTJXYkNiZk5ncGYvVzV1RzMwWlMzZCt5c0FVTzRPR1hvSHMyazFsYlIrR0Q3OEMyUmFwWFh4eDlnM00yMlpud1p4YnNYcHFLTjFYSGdhMkxTOC94OGdsRHpFaGV4c1R4dDVNY2ZXN1pKa1ZIcHh5Qlp2TlZ6RDd6anNvWGZrb0l5WTNzdXZsMlZDM2xSSGovNGNGei82ZGJMdVBiWHMwd2N2T2dHM2Jxc2Zac1BkUXpNMnpLN2ZkTjRPVVRtWm5TallNSHdwVFI4UFlleUV0K04zMFhqRGNBbXVXUVBFUWdzYzFhRjR2ZzZsUHdNSkhnRm9ZUHd3MjdZRXNTeERZNXNHNjdUQjFNdEFJalM3QUFkREErdldWM0RldlVIZmxkSEpjUGRXTUhYd0YrVk1mNHZaUmFTeWIreHRtZWl3c21qNll4dDByR0QzekZaWXZld2lIMnNEdWFzMk1sYTBwREIxK0JkN3lEY2haRnpCOGVCSFc1Qk0zQ1Y0NTd4Y3MzSnZCb3Z0K3licEY5MUtobzJ0enB2Nk0rbk5uZlhIOTliYm5SNDY4SmxUN0dadW5GbHBhT3dLMVVGVkJaK2FuQm1wZFNVdExKVE16azE2OWVwS1hsL2VETWZsdkJHelYrei9oc1U4Q1BEbmo3Rmg3bFdmV2JDVHU3QUZjMlNNdS9HNmZQbjFJVDA4bm9ibVoxRlE2Q2lJRXZ5MEVoS09sSFlJYmFJQ1ltcHEyZnYvKy9hNnNyTXhiWkZrKy85cytVSTYwWHBTazlTTE5aaVMvL3lCSzhpS0hidW5DdnpCeDFxdU1LTWtEK2pOMTZGT3NXTHVMNGlrRGFXeG93SnFWUWs1dUFVV0ZSYm9MTTUrVWJEdDJzNFYrSlNYMFA5a0tHdG5LekxsektNNDJVamozdDZTTWVnN1h2UEhZZXcxaTVxUThkdTdaalZ0TklUL2R6YzdkdFF3Y2tVWC9raEthOXFTVGJNNmxwS1JFQjVMVkxGeThsUVY3dm1SWWxoa29SdmNwQlNOdlpOcW9JVUF4QTJmOW1iMjFrR1haeXNKMUNwc3I3eVhiRFAzdSt3TlA5UG9acFo3WjVMc2JhRktzcEdSazBTODNuWDc5VC94M0xBNG5hV2x0YmlNWVQwRHprck9nSkF0c3hyYUFsNUlOZGpQMEt5SHF1QzU2Qk81NkFnWUg5MnYwMDdCNks5dytOUGdGRDl5N0NJYWt4MnlzcVpKS1Z3YloraUpiMmRiaGNTMWIreXhsR2Rld2N2b29aR0R1dmJlU2Y4K0xMSm8rR0c5REk2ckZSbHBHTmdWWi9RZ2ZJbXN5SlNVbDdGdnRwS2xYVWZSNTZ0aGh3UElWRzVtNTZpQURDNndVejcySEphdi9FUEduSFdyOG9MWFYvY3JJa1RmdXAyM3RwNjVFaWxhSmprSE5ZREFJazhtSTJXelNnVnBzVVh1b1hDb3pYQzcxUTQ1VEJyWWpYMVZ4eXlzZk1mZW0wZVFtNkdlaFlNT21qYng2UEpubE54WkczYTBsU1NJN081dkU0eTR5TTlDWm9tcVVPUnBhajhiZ29EUG1CaElhZVJQaXpEUFAzUGJoaDd1Yit2YnRPOVZnTUF6L3ZnNWlkWFV0Wll0L3g2NW5RLy9Xd3RDaDJ2UHBjLy9PZmJQK2wzNjU5MlBKS0dMUnNxY1lrdmNOb2tOeUN1bEJlbUpKeThEYVZFOGowTFQxYVlaT2ZwVGhZNjRteFc2bXdhM2c5WjBneXVDdXBVWk5JeWVyL1JLZVpJY3pQRTNNWmdWRkFXOWREWTNlR3U0Y2QwM2tlMFhub0hyQjJHc2t6ODdhemF4SlYxQmU0Mlg0MVB0NWZNN2tUblhYYkk0VTB0Sml2aUhidjVNOHBPcGFXRG9MVnVtSWNULzloaHlRbTk2dVl4bEYvanJiK1JKWDZYYkdqUDQwL0Y1eDNrV29RUHJReVR3NHBvS3BJeStrMmlVeitkNUhtVC85VktkcUUzWDFGaktTTmIrZk1TME5aM0EvL1g3L3hvc24zcjdteGhtM0h0S1puM3BRQ3hlMVM3UlI2b2dCTlJNbVUzc05XRUt5M20xQjdmdklWZnZXZ2UzNGtZUDhZdmxXWm95L21rdlNvcDJwNzc3M0gvN3l1Y3pUTjErTXZaM0NPWVBSZ0NPckp6M1BGS2hxSUlhdGhZQXM1RzhMbTZRZGdWc0lEVVhJTkQzMzNINmZyRnIxNnArdXV1cXF3MmF6K2NadlBkb2l5Nmd4WXZsWldSa1VUZjhiOTQ1cWF3VTdjb3Bac3VJTlFHSDVySjh6YThGeXRqMXhaeVIySTZ0dHRQYzdEOTdVVTFPclVKUmp4RnRYZzhlWlFUTHd4TExIR0RQcktSNmMzQS93VWJubXo3RTczbWEvc2FXVElkZFJXZTJqVjliSjFTZWEwekp3Mm5KNWV1MWJZZk5QUDUxR3paakxxQmx6Y2RYdFpuRGg1V3llT3BsaG5aUUVWdTdad3RwdEIySldrMHJ4aUNIWXY0bHpUbTdiMHlBckhjWXNodkVGWHpPVTVzZ214MUpIVFFQMFN1R0V4elVyL1F4U0JxU3lmdVc4ZHJaaFk4cnNoVXladlpENjBsVVVEZnc5VTZZT3A1ZFJQNzlPTmpqbElEM0ZTMDJEQjlLc0tIVjFOS3JRNHZHODlOalNmN3g5eHgxL2NIVUNhbDZkV2FxUGZyWUJ0VWhoZTd4T3FjT3U2MVdRR2l4c3o2RlBuejZZVEtZZlBLajA5WUhOZjV3Wi8zZ1RTMFp2R2cvdTU3bURZSWgzTUtFb2kvM2xlN2oxcmMrNTRkTCtyUDlBaSt5Y2RjYVpERWhQUlBVMHNlS2phajZwYnVLSVQyVnZOeWYydERQSVVLTjliRHBRQ3owWElhdlQ3OWR5MmJSRVh3SVJiQXN6UWlHRUVHUEdYSHN3THk5dndmdnY3NnkzMld4MzhDMG1JdWZuOTJMNW9nVllSaGJRcTNBZytWbE9wdDc1SzRiZjlVdHl6UDlEcmxObTU2YjE1SXk2aDZINWRsWSsvaUJrRHlRM3pjeXVmVlgwNm4rVDNuQWlQMGZoOFFWUFVOOC9nL3dCUThnNWtaOU45Ykpneml4U2JoL0ZpdmwvWnRqRTMyRURzckt6ZVhIdDgrd3FraWxiOXdUcnloWDBLbGU1dVgzWXZlUWxYaHlRakNNdGgrRURDOENZeFowelNyaHJ5cTBzbVBNcnJONGE5alhhbURxdTQxNEVjbG9KZHc3MU1YbjZIR1pOSHdXTk5hemRYc1hjMmJmaks5L01vdlhWRENrcHdsTzlsUVp6RHRuT3p2L084Q216R1g0S3VwRzd0MEtqRjF3KzJMNEpHcXd3Y0hCRUZUZy9CeDVmQVBYOUlYOEE1Q1REN1ROaDZqU3d6ZGVDQ2x2V3crRGJvZDhKQ1hRYXc0YW1zRzE3T1lOSFJXdUh0WGRjODBkT0ltZnVwZHkxSUk4SlEvS3BMOTlEcVR1TmU2YU1vR3JyYWxhVit4amNMNWZhM2J1UXM3SkoxczNPdkY1bjgrQ0tmN0FxdzAxeVJoNkQrblhtTXJZeGNlSnc1cysrbjZ6N2ZzNmFSWThveHhYbHlVdHplLy9uVU5zZUJYcEE4MHFTMUNxRWFDZjVWaDhvTUlhWW1vaVBENW1mTmgxVDAwQXQxS3VnVDU4K1dDeW5oM3ppMTAvUVZmMGM5UmxJVFREaDlTdDQvUXF0c3BuaURDZkhtMXV3Mm15WVJDRDhXVklYSnpsSkZrU3JteTM3RDJOTDZzTFpUaXQrSVpHWG00dlRLRkFVQlZXTmxGdXBxZ2lib2pxeVJvaTlDZEhoM2dsSmtnUWdHaG9hMUFjZWVLRHN0dHR1cmJKYXJUMGxTWExDTjAvUUxSNXlGVXJkUGo2dHFDSytSeDl5MDVQbzJuTUFWeFk1V2ZQcXEyeCt2d3hyWmwrR1hud2VpWEV5bm9aS05xei9KeHMzN3lTclpESnpmajJhT0RsQ0VTNFpjU1VONVh2NGZIODFxYjM2azluMUJCTkRUbVhVc0RONC9wbVZPTS85T1EvZE01NDRHZkl2dUJSUnRZTlgzL2dYQ2YzR01YMTBFVDM3RkpPVnJHVjZKK1djeDRBc2lkMGZmVXFkeDh6RjUybU8zWUpMUjVOcnFlTzFWMS9uNDJvWEZ3KzlndXhVN2RnNE0zcFRrSk1hM3RjK3hSZVRIQzlUTW1vY2xyb1BXYlZxSFo4ZU9FYS9TNFp5VHE4ZUdDU0ZEN2Y5aXczci8wblpWeEovV1BBbzUvVkkvRTRtN3RzdncwY1YwUGRDY0IrRTZobzRkMUFFMkM0WkFRM2w4UGwrU08wRm1WMGg2MXdZMEIxV3ZRbzdQb0swUGpENGZMQVlJcmY1QVFNaHJwM3RaWGZ4TStmcFhVd2JlMG5VKyswZVYxTVMxNDY3aXMvZlhjL2F0elpSM3hySGtLSERPQ1BWam95WDdadmY1cTMxNy9CbFN6Y2Uvc3NEbkprVU9lZVo1NVp3VnR3eFBpd3J4MjEwY241K2RxZkg0ZXlMaG1FLzlBRXZyWHUzTW1mdzFZK3RYL25ZKzgzSGozZWswS0ZQNS9BRkFTMHErVFkyK2hscXZoSWZyNW1maVluMm9BU1JKaFNwQlFwNlVWQlFnTTFtNDNRWjM1b2UyNm1PWThlT1VWcGFTa1hGRnh3NGNJQzZ1anFPSEdtSTBYRnJDUmJXdCtMeitTUi9VTXROVlZWSlZkV1FucHNCTUtEcHVabUVFSEZvYzlSU1Z2WkpVVzV1N2hTRHdYRHBENkhIOXRQNE1Rd1BkNDYra2xFTDMySkl0dlcwMmpORlVmNjlmZnYyTlIwME0rNmdUNEh3QzBGQWx1V0FQdm0yL1R5MVdGMjFVRXFIRnYwc0tDZ2dLU25wdERvbXhoOTZCNUtTa3VqVHA0L085TlNibGxGRVRVL2ZKTkI2SjJpbWFkakpJVUordDZCWnFnSnFmbjZmM2M4Ly8zenRtREhYVkFFM244NlhUL211VGV5dGFtem5FenZEeGc3anAwS3dIMnBZV2JqNjM5LzdWbjBORmF6WnZLZmR6M0tMaDVMak5ENy8rT09QYjdyNzdudU9FNTNPRVd0KzZ0dmsrU1ZKRGtnU3FyNU1xcjJLZ2xDZVdxejVxUmVMUE4xQTdiUUFOZ0NIdzBHZlB2azZVSk4wajFJWTRDUkpDaTFDa2lSSjg3a3BRVUJUVVZVaDlQbHRJWjhiSUc2NDRZWmE0SytmZmJhdnltcE5tQTUwUHgwdm40eThJdXdaN1VRelpTTzJuOURsLzl3dzJqTVlWR0tqSGJ2cUs3Zkh0VHd4TVRzazQ2MVA1OUNib08zMS9nd0FBYTJ5UjFiYkwyalhmR29oOHpNVS9kU1lXZ2pVOHIvVnpsSS9PbUFENk5LbFN6RDNKUUptR29pRm1Kc1VmaDNMM0FCSlZTVVZWQ2tFYW5ybUJxaEI5aVo2OTg1YnZXblRwcXJ1M2ROdU1oZ01RMDYzRTJLMU9iSCtoR0EvamREOXpHd2hKU2JSVDFHVXpUdDI3SGlqcE9UaUdqcnZ6cTZ2SkdpdjhVcW9xWEdiaW9KSThtMUhnWUo4dW5UcGN0b2V0KzlNM2VOVVJueDhQSGE3UGF6ZkZnb2toTEk2T2dnYWRKWXdFN1p0UXdBSGlHZWVlZWF3MVdyZDBhOWZQOCtwS0lUOE5INGFQOVE0ZHV6WTB2dnV1Ly8xVzI2NTVZak85RHhSeldkVU1idE9laWdtbmNPaTY5SWVLejJrOTZuMU9hMUJEVTZENEVFSEo0OVBQaW5qaXkrK29LYm1BSFYxaHpoeTVBaE5UVTI0WEM2YW01dnhlRHp0QkJUOEtFb2dGRkNJRFNvWTBZSUtab0pCQlNEdXdJSHFpM3YwNkRGWmtxUnpmN3BzZmhxbjYxQlZkYzlubjMyMktqKy9UM21RcGNYNjAvUW1hSlRwaVNiakhXSnFJdExRMkVUSFBqVzkrUm5OMUU1SG45cTN4dGlhWEM0T3VmM1lMR1prUFdjS0tOUTJIc01qRE5qTTBSbTZyUzB0SEd4cUppNHVEcFBjTWRHeVdDdzRISTV3VDlMbzZnVEN2cmlZNUdhcEkvSVdTZ0hSbTZhaDE0OCsrdWpCZ29LQ25UazVPWDZqMGZpOWc1dXJ1cFIzUHE3bnJLeVVrLytSdDU1VmEzYlE4K3d6djNIemtOTnBWTzNkeXZwM3RsRFhZaUduUjlmdmZ3ZE84Ymh1WGZzaWNsb0I5cmp2WnJmY2J2ZnpUejY1OU9XUkkwY2VwUDE2VDMwcWgxZnF1T2VucnU3VEhHWnFRdkZodGptdzJ4SklUSXcwWHdsSkQ0VlVPZ29LQ2s2WUpyVjN5em9DWFh1U2FKWkFiZVRGSjU5aDYvdTdxUGZaT0N2eis5TmorL28rTnRYTnIvK3lrdDErTTZseEFXcjk4VHc2NlNvdVRJbW41dk9QdWU3RkhUZ2Rkanl1NDNUdjFaZS9YMWRNb2d4UHJWckZrckxqWkRyaU9IRFV5eTFqUmpDMVQ4Y1hjMkppSW4zNzlrV1daV1RaRUh5TUxKS2tmNHdFRkNSSnd1LzNpMkNGZ2hCQ29LcHFWQ0FocVBHbUNrMDZKSERkZGVOcWdML1YxQnpZbTU2ZWZwTWtTZDlxWjVUMVMyZFJrVDZlR1NQYXByelg3OTNJd2cxR1JwUVVuUHdLUFZYTWYzQXBnOGNNd2ZsZkJGeDcxaXhrVldNQmN5Y1BiZk5aM2JZbkdEVGxPYVpQL2hseWl1YzcyNGZhN1M4emQ3UEM0L2RPK0phT3E4cUtCWDlrVk1GNE1yN2xrTFdxcWg5OS92bm5xL0x5enY1TXg5SmlPN04zeE5JVVNaSUNRcWlxRUFqWmFGSU5CZ09SRXFsSW5scmRvYTh3ZGMwaU1URXhxcUE5VWlhbFZSUWtKQ1IwZmwrbzNzemtXUyt3WmN1SWtJY1FtODNHM2cxUHNiYkN3b2lCZWFjeHNNa21iaGs3bW9KTUxScXlhdDBiek4zNE1XOU5LTWJxVE9mVjM5NUV1dFdFNm5NemFjRnp2RlNleDlROE94ZGVjQkUzakU3RkxFUE52ZzhZdG5JcjEvUVpRMmYzNVlTRUJBb0xDOUZPaUl6QjBCN0lTVUZna3dtS1U2SkZUUDNCb0VLNElUTmhwTk1ZbXlwSlVpaW9vQUtCakl6TXpVODl0ZXlUY2VQR2piVmFyZFBhdlhzMjFWUHZVc25LU29zNmVDcmdkVFhRNEpiSlNvOWNGcXFpVUYzMkFhVytJU2lLZ2l3YmtlWHd4Q1Y3K0F6V2p6UzJ1VmpjamZYNHpFN3Nzb2M2dDB4R2lqMzhtV0x2eDg3dHk5dFVBQ2xLZENtT2JEUkd2cVA2cUttdXdaS2NUckxORXJzNWtGWHFxcXN3T3RKSnRuLzcyZU9xcWxCWDlRbTdhK3p0SEFlRm5kdmVvOS9ZVzdobjVuaGs0OGxOUzhYcm9ycTJrYlNNbUQ2bEtxaUttK3JhSnRLek04SzFxcXFxNHE2dFlNdHViM0FmdERsMHd1UHFkZEhnaGpTbm1acmFKdEl6MHNMZlVSU1ZSUnMvYlZPMHJ5cEtWQ1JULzM4Qm11cXFjY3YyTm4xZVEyb29CL2VYUC8yM2Y2elk4c0QvbStzbUVpRFFsMGZwemREMlRFOVZraVJWVlRYclJLZ2l1cG14Mll3c3k4UlpySmhraUUrdzRYQTR0TVZ1dzJLT0l5MDlnOXpjczRJVkJXWnREdFUya3A2UlJrTk5OYmEwTEt5NlUvWHN3Z2NZTXZsL0l0RjcyY0hJQ1JPeE5MN0wzcW9PN3RGTjlkUzVGTEt5MHFPdUo4WHJwcWEySGtkS09vN1krUm84U28yMTFmZ3N6cWdlcktyUFEzVnR3NmxFUmVNb3lJeHc3aXhuRXQ1RGZnQ2NYU013SlpzVHlMQWJhZkZwRjF0ZWo0aUNab3JUanF6NGFUMlJwazNRTEkyQW15RUc1Q0tzTGNMZ3BCREFTWklraWRERkhnUTRnUzVpMmc1N1UyNitlVXJnNXB1blBGbGUvdGtIT1RrNUV3d0d3eVdoZy9uMGZUOW56dXBLOHROa0t0enByRjczRXZuSlpsWS9jaU96Vmg3QWJqUWdlNm94RjkzQ3VtVXpNVmR2WWZpVS82Vm0zMjZhYkhkVHNjcEo5dUFiV1RwckV1Qmw5cVJSYk56N0dlN0NXeWxkSG14Vjd0NURidGJQS0NqSlkvdmVSZ2IwUzJQZjdyM01XLzB4WTRvY3JIeDRCbyt2MmNHMktpZlZOVzhUSnZjMVd4ZysvdjZnNHFhUDBwMjdXYlQ5S0pQNjJhZ3YyOENZOGIvQ25KRlBVMFVaUTJZK3hpUFROTmFrbEw2SVkveHpUTWs5eHRZYWdhZFJZY1d1SGZUN05xUDQzbkltamZvVlpkV2xWTG0zTVh6M0MxaHlMMmZ0a252QVZjcjRzYitodkx5VUduVVh3N2MvUTlIb08zaGt4c2dUc3I4eE0vNUdmbUVPZTB0cmVlVEZOeGszSUl1bTdVdkptZkFZUlNsV0xGYUZmZTUwTm14OGhWNzJKdTRaZnoxYjkxVlFWYWN5ZlBoNzREeUhsMTkrQkNkMGVGd25EK2hPVmZJQXFuZnZKRy9BaGJncVA2Sm8ydDlaZk5zUXlqY3M1YmFIbjJmdjl1MHMyZFBDMkhEMWs0dTd4djJNWGZVYXRGWHYyODNRV2ErdzdNNFJxSzVLcG8yOWp0MGVKdzVmUFJUOG5MWEw3ZzFXVE5SeGNXci8vNXd4ck9qTkY1YXZxK3FBcGVuTlVGOFEwSHg2bGhhNmFVdGF1RTNFbVF5aVZWRUo5ZjAwRytHcjJvT29CaFB5VjRlUVZMQW1KdEcxcTVORG4veUgxeXM5WkdlazhQd3p5N25sMFpjNTd6d0x5Kys5aHZtYm1yRzdQOFdZY1I0MjVTdnFrNjlrOTh0emdwZEhQUysrWE1ic2UwODJGdWZsaWFjeHZEZ0FBQ0FBU1VSQlZIdHY0cEYxVmVTbW1LbDBKYk5xL1N2a09ZMXNmZm8rSmovOE5nVzU2VlNYbFRMd3RyK3crTTdnZkdqYVJYYmVyWXdkbmNxR1hVZFFYSTNNVy9NUithV1BNUHpoTFJRNUJFMU50ZWc2UnAzQzRqdk9yUXYvd1pKUERyZjVySFovS1JmT2Y0VUQzdGpmQlhoNjVVb212L254MTlxV3FnYjQrT085dlBiYWF5eGE5QmZ1dSsvMy9QS1h2K1M2NjhZeWJOZ3dMcnBvSUVWRlJlVGw5U1k3TzV2dTNidVRuSndzSlNVbFNRa0pWaWt1TGs0Mm1Vd0dnOEZnbEdYWkpNdHluQ1JKVmttU0VpVko2aUpKVWdxUUFlUUFad05GdlhyMUd0RFllT1QvQ2FIV05IKzZTblR0ZnFIWTM2d0lJVlR4dDE5ZEtuNTIvN05DQ0ZXODlxY2JSTGNMSm92akFWVUlmNE80K3V5dTRxa2REVUlJVlFpaGlpZC9lNFc0NWJFdDRkZjY1ZE5YWm9zK044eVB2SGQ4dHppcng2WGlzRkRFemVjbGlYKzgzeWhlZStBRzhhdkhOa1crYzNpTDZOSGpNbkc0bmZVSm9ZcDNIdnUxT1BmcWU3VDlFVzV4OC9rOXhFTnZsZ29oVkJFNFZpck95enhiZkhCTSs2Ny80eFhDWU9naW5ucTNXdnU5M3lOYS9PMnZWd2hWdlAvOGJKR2FtaHF6ZEJkUC9ydTJ3OStFbHJmLytndHgxZStXdGZ2WkczKzZTVno3eHhVblhJY1FxaENCT25GcGp5N2krUS9xaFJDcStPU1YyYUxiaFZORnExREYwZmVlRUliNHM4U093MTRoaENyKy9NdUx4RTBQclEzLzl2UFg1b3MrMTg5dWY3M3RITmViTGtnVnIzenFFOC84N2lweDQ1OVdpeVB2TGhWOXJwdXIrNTFQWE44blFienllZnY3K3RXSEswWHYzaVhpNCtEK1BIWDNWZUxLM3k0VEFhRUtJVHppanN2T0VuOTVwMXFvYXFDbXJ1NmpCVEw4SEJnTGpBYXVBaTRIQmdFWEFFWEJ1WmtEWkVpU2xCS2N1NG1TSkZsbFdZNlRaZGxrTUJpTUpwUEpZSlFsR2NrZ0pka1RKQWtrWjJwM3NyT3pTWFBFWWJLbmN0RkZBN2w4OFBtWUpDaTVlaEwzM2ZkN0hucm9JVjU3N1RVKy9uZ3ZycktWZE90OUxjMUM1Ym5mWGMydkg5dk1sMjg4VE9aVmR5SUM1Wng3NWlVY0NsNmZnZjNyNk5MOU1nNjNjKzIrL2RkYnVPcTN5NkxlKytMTmg4bTg4QWFPK3JYWHIvKy82L25aL1NzUVF1WDRzU1lDb2ZVZTNVN1BydWZ5UmZCNzR1aE96akNaK01NTHU0THI4dExTcXZEcEszT0pQL01LRHJXcUNPSDZCbmxzcXArL3Zmb1dTcThMdUNVLzJxQnNidnlLVzEvK2dQdHZ1SWFNR0lmcWV6di93L01OZGw2WTh2WDBtaVJKb3FDZ0FLUFJpTkZvd0dBd2hobWNMT3NmbzN4eFliK2JKQ2toOWlaVVZRMHJodWpZVzZpL1FpREUzaW9xS2hTbnMrdXF0OTVhOTM3WFE5dEhPd2RjZWxOMlVDbDI2SkRMbVAvRWJtQWlBTVdEQm1HVEFkbko0SUU1N05wZHl1VGlRYWQwYUdXYkhSc3lkb2NkdTgyT3pXYkQ3VGs1bWU3cXJjOHlmVWs1NjdhOG9lMlBxNHpOZXp6SW01N2ozaTBhOC9RcDFaUld1T25YVDZQdzVweEJqQjhZbE9Bd1d1ak1FTzAvWVE1MUUrYjhzTTY2MnIzczllUXpPRmk5bmo5a0tNYkp2NlphaFdUQW5qK1Evc21hQVRwazBNVXNXN3NMR0hHS0c3TmlzeG5CYnNOaGMyS3plL0NlNUxud05aUXlidno5ekgveFh4UUU5MmZUeGkzNGNyTzU3OTdQQUNoM3F4eDVmL3VLRlYrMWJwazQ4Y2FqSjJCcG9ScFBueVJKb1RTT2dDN3FLZlQ1YVQ3Rkw0eHg4WmpqNGpFYlBLTFZEOWF1OGJnUCtlbmFvenQyZXhKMmV5S1o5dDBrZFUyaFI0OE1Fa1FqTHk1ZFRIV0RCMVZ4MDlSb0o5U0J3VzZ6WTNYWWNkbzhJTnV3NGlia0RmVTJOZUN4T3poWm9yOTE4Nyt4SXZQZ3JOOXJITGV5bmxMdkhtQThhbE1GOTk3MUozYVdWZUZWZmRTN0cyaHdRMDVvNVpaOEpvM3RGM3hoeGhMME5XVDN2NEFVTTREdFZJRXR3SXR2dk1WLzVETjU2c3I4S0d1eTFkM0FyYzl1NU5xcnIrS3FyT2hNMDQvM3ZzOGZ0cnY0eDlRUmREMUZaWk84dkR4Q3prK2owWWpCRUFLNmlKbXErZUhDdmpnUmZKU0NFVkdkYnpZSzRGUWR3SVhBTFFBb1YxNDVZait3SlBPeVg3NnJLTXExUnFQeGlwTnhLbi96SVVkczlaTlluYWQyTitPbi9KbkZxLzlGTDRjeHZCK3FPWmxoWTY0bUs3aXEwYU92SlNjM1V1OG9XMjJjckZkdDcrb0ZUSnJ6WEp2MzczMzhuNHdma01LUGI4amhoOGpaT0FsWklhV0oyOGZmUU1uc3B4aFRsQmExdmdGRHIyWmtnUTFGVWQ0KzY2eGVHNlpPSFhkZ2VRVFFPZ0kxdlk5TjBabWVZWDl4cUUrSUxCdUUwU0R3ZWtIMXVrVkRhek1JZ2IvRlMwS0NqVGl6ak1scW8wdVhMamlkRHF4R2lhNnBQZWg1WmxmbS9mSVBYTDlzTTlPSEZXQ3MzMHhhd1I5aS9tMzdjOUppdDJQMnVIQkIyOENMM043Vm9aSlZkREdqUjRkdS9sY3oxWkVCS053MzZXb3NrNTVud3hPRE1GTk5jZkpGMGRQZmFzUFNEbkxKc3ZFYkJBOFF2UG4yMjd4MFBKbG5mMzRlOGJxZFZqeE4zUEhVZWdZT0djYU52YVAvM3VmbEgvR2JUUWRaOG91Um5HSDlaaXI0UFh2MnhHdzJCd0hPaU1rVURYRHRNTGNnd0VsU1JIbzhVcUVRWW0yNndFSkF4OTdDaytqQU8wOStZREk5V1ZwVGMrQ2R0OS9aZUYyLy9sUENTcjA3dDJ6QnJVN0dwamF5ZVZzbG82WkdaS1J0Vmh1TkRmWGY3ZlhucTJmNnVCc1krZUFMRE12WEhYdDdBVVB5UFZTN25Jd2Jya251dUJzYU1OcE83UnprRFp2SzJ2N2oyc3hjWjhxSlEvbFdheUlORFYrM281T1BoVE9uWXgweWcya2pnbmZwOUFJS3JXVnMzdDNBaEg3SmxHM2FpRko0UGxreWVBQlgyVloyTmZnb1RqYXphY3QvNk4vdjk1RjlzTnR3MWRlZzhGMlczYWdzdmVkR2FncC96WklKQTZJK0dUSjBJSzkrWHJOcjB1Q1NOM3VmbGZ0cDZPWVpBMmp0Z0pya2x5UU4rSVFRQVFFQk9aeHdpeG9JcUFMSmdObG9Fa2FqRWVGckJ0a2t6c2hNMXdRaVpTOGZmL1lWUmxzaTZhbGQrZHp0b1Z1M2JqaXRYZzQyQlJpZWNTYjV1UWtjY1hkbDBNQUNqTUQyZGV1b1A4bjdzNXpkajBMZlBzb2FvU1FHMmRLYzNhbmNXQlVsRXo5bzhDWE1tZjhaZWYzdlFic0hLNXBzUGg2cXF6MU1MU25HTEVQVnBqWHNQWVdtWFYvLzNMWWM0b0ZOWCtDeXhERmt2cVlRYXU2V3c3dlRMMlhIaHgreXNlNDRIN3krbG4rOEhtUUhsdy9qL2dHWi9QMnQ5Nmh0bExsaDRUUEJGY1d6Yk9ZRStwNWkvOVRNekV3ZHVKblFrZzJOWVZNMW1zV0ZnVTRJSWFSZ1BhbVFwRUFvVnk0Y1dOQ3h0eERBUmJFM3dKK1JrZmt2MlJqLzNyOC9lWDZZRU9JNklDK0ZTb1lOdWd5anB3Wnp5ZStaTUNCeWRvZU52NFZGNDM1RjBlb0h5QnQyQ3kvT24wcmQ5aGNaTy9OdmVCcXFxR3FRS1NsNWs0S1JkL0Q0akU3MHQ3ejdHRGZzbDlSNlhkVFhWek95NUdMTUdSZXo4Y1g1MUc5NmtlVzc2aWljZXpNdno5Vk83YndWLzJaa3ZwVUhuLzRINDhiL2pEVUw4ckQ0NnFsMjkyRGpycFZrbk1KeE4xdnRaRmhQTGEraC84aEpPQjYvZ1lLaUYzQVdYY09XcDJlZEZMQnRYUGtjanJSUkVXQ1QwMWl3K0ErTUhYTWhLd3B5S0MyclpmR0tOekdqQVpzOXpjNjlJeS9GYWxVcGQyZXc3cEdJUW0zNmdORU01Um9LQzgvRGxuNEI2OWN2d2RuSmNlMXN6SjkyQmV2SzNPeXI5TEIzM0VVc3REcFlzT3BOaXUxN2VYRFJlc2lyb1YvUjM3VHJZT1pmK2VNTkYzMDI5QmV6MXZ5cTc2QVBlejhjVUhSUlRMMGloeStXb1VuZ0Y1b2FoeEtjaDJvRTFDUWh5d2hGRVVKSU1tYXpkajBjYjNZSmMwSnl1QXVjMWVyRVlUeUFxeldPNHVLTGFGajNUMTUrelVXODBZU3phendaUGZQSTdObUxtVk55R1RYZ1Fvb3lyTWpwbWFTZDdQMVB6bURjNkN6V2I5aER5ZmpvYkttQ1VWTVl1T3dhY3ZKZW9YREVyYXhaTUlPY0ViY3phOHZOOUM4OG40SmU2VlJWN21QRVBVOHlmOUlnYnJ0ekFsT0hYOEN5Z2pTODF1NzBPb1djcHRPeTh1RHJqS05IajFKZVhrNVYxWmZVMXRaU1gxOVBZK01SbXBxT0JXV1BRbFVLTFhpOXJYZzhIbncrSDBLb2t0YWhYaUVRQ0VqQi9ndWhhZ1VwV0xFZ0I4SGZDQmlEVlFzbXRNb0ZNeEIzMzMyL1R6emJVbkg1NnNBMTF5Mi9hMmhPZzFjbUkrVjB6QzVUcWF1cEJvdVR0T1FmaDBhSTRuVlRVOWRBU2tZVzFtQytSZFAycGVUTi9JRGFUWCtpcHM1RmVrd2F3UTh4aEJEN0R4OCt2R2JPbkRtN0hudnM4VmFkS2VscngvUU1QZnFERVU5RnQ2aDZYMXF3aW9CZzBtM1FlakdIR2hsanNVUzZzMnVxdDRrNEhFazRuVjFKU2VsS3ZObkMyZWVjUjJHZjNsRWxVazMxTmJpeHRVbEZPZEZ3bGEyaFpNWUdkbTVhZk5LdURhKzdpYnBHRjJscEdWaDBLVHZ1eG5vYVBESlpHY21uMU9YTStOOCt1YnQwNlVKaFlTRnhjWEhFeFpuRGR5dzlnOU16TnlIVVVJY3JJY3QrU1pabEZFVVJnVUFVZXdzVjE4c3g1bWtBVUlMbXFSL3d6NS8vZ0E5NHJmY2c4WTczenVGRGUzUkx1aGJvZWZvZEtabTBqT3dmbGZmTGFMR1JuZDIrWW9Cc3RwR1ZaZnVoQWEzeThPSERieno4OE1NZi9QblBDN3c2Z1BKM0FHaXhnUUZGSHh3SUFwc0lsVVVGNWJ2UlFFM0xUd3RXRTBTQm1zMm1xZDRtSllYNkUyZ2Qyck96cytuZHV6Zng4ZEZta3lNbGcxUEo5ckhuajJMaGpFWnFYU281SjZucmJyRTV5TGExM1pyTm1ZTHRHL0NELzNyR3BwdEVmUGJaWjFSVzd1Zmd3Um9PSFRwRVEwT2t2dFR0ZHVQeGVIQzVqdEhTNGtVSWdjL253K2Z6NGZmN0pVVnBsNzFKUWdnNUNIQ2htbE5Ea0wyWmd1ek5yRi91dm50bTR1OSs5N3RMblU3bjFaSWs5ZUduOGYyeXVLWWF0dXh6TVdSQS9nL0hqVlcxckw2K2Z2M3MyWC84OE1rbm4yenRCTkJpRjM4UTFOb0RORDJvaFZsYUVOUkVNRWNOdmVSUUJOVDAxUVNwOU9pUlFVN09tZlR1M2ZzSGI3cnlYWTBmRGJDRlJsVlZGWldWbGRUVTFGQlhWMGREZzZiRzYzSWQ0L2h4TjBlUEhzWGo4U0NFQ0JiUXQrTHorZkg3L1NGbDNpQnpDMGlxS3FSZzVEUmtvb1pDUWdhZGVkb3V3T1hrNUppM2J2M1B4YW1wcVZmSnNuemhUNUR6NHgrQlFHRDdnUU0xNzF4OGNVbHBUYzFCSlNZdzBCbW82UUV0N0VjTFZROEFRaC94Yk12U1RKak5jZWdWYjYxV2ZkMW5wSkZ4UmtZR09UazVaR2RuLzZqUGhmSEg5b2V5czdPSmo0L0hZb2tuTGk0T3N6a3VIR1F3R2swRUFnRmtXVVlJb1ROVFd6RVlES0U3WVlpOWlVQWdnQ1JKb2J5M2tFa3F4d1lYWXN4VEgyQ3VyS3cwcDZmM2VBZllVbDcrV1ZGMmR2WlFrOGswNnFmTC84YzNXbHRiMSs3YnQrL2RvcUp6OSt2QVRNL1NmTzJBbXI4RFFBdm9VampDWm1jc1N6TWFqVUdXcG9HYXhXTFJ5WGduWUxNbGtwU1VoTk9wbHgzS29tZlBIRkpUVTMvMDU4VDRZL3hUcWFtcFdLM1dJTUJac0ZnaUFCY0lLQmdNQmxSVkRVZFF2VjVqQ056dytYeENsdVgyZkc4aWFKckdSazhEQkp0aW9JWGlUWHFBQTh5NXViMTNBbnZlZVdmalM4WEZGd3l5MlJLdWdsTUtTdjQwVGgvWFI4M3g0OGYvK2E5L2JkNDlldlRvaGc0QXJUMVE4M2ZHMERveU8wTXNyWDNUVSs5UDA0SUVTVWtPbkU0bktTbmQ2TjY5TzFsWlo5Q3JWMDhTRXhQL1Q1eWZVelpGbTF3dWp2bGxlblN4UlJjQUJ4UnFqeDdIRUo5QWFrSjByOHFXRmcvMWJoL0pqaVFTVE5MM01ma29MeS9ueXkrMWlPbWhRL1VjT0ZETjBhTk5xR29BdDF1TG1MYTBSSnJGdExhMjR2Zjc4UG0waGpFNjN4dWg1akZxUUtBS0lRZmJtWVpNMUk1OGNIcFQxUVNZSjB5WVlQblRueDYrSUNVbFpZalJhT3hReFhmUDV0Vlk4b2FSbDNieXpVTnF5NkJDZ1VHRlA2NkpXckZyTTJwR01ibmhZNkdpS0ZGbDVoaURFL0ZFSmNpcXF1cUszNk0rb2I2bUdwL1owU1lpMk5SUVE2TWIwdExUL25Yb1lNMjd2L25OYno1OS9mWFgvU2NKYVA1MkFDM1FBVU5UUS9YT3dRQUIwU3d0MHJ5NHJUOHRvcVBtZEdwQmd2VDBkTTQ0NHd4eWMzTy9VMzlhOWQ2dHVKMkY1R2VjSGhIMzcwMjJhUG5xVlR5MnI1blVSRE8xamMxTXZ2cEtwaGQrdDIwSEpFbWlkKy9lSkNRa0JQTjU0dkg3L1JnTVJsUTFFSlhrRzVrOEJscGJqUmdNUHZ4K3Y5QytMMHVLRWtCUkZLSDRBdmhWRlVrU0t0cE5OYXdXRXN4M013UW5hNGpCR1lPQTVnc0IyNG9WSzFwWHJGanhMMkRyeG8xdlAzWCsrZWRma0ppWU9GU1NwQ2hkbC9WUFAwVHlsQUZmQzlqMmJZTVZqVDh1WUZOZDVVeVordjlZc2YzdDhIc3I1OTNBeEFmWGsreXdoYWZ5STJzK1lueS9Sb3B0NXpKdjMxR0d0OGVKUFdVVXBCVmdIL2N3MjVmT2pBQlh4VmJHamJ1SldtTUdkcVVldWZCbXRqNTlEM2pydVdQQzFaK3Qvc1MzT2NuUS9OSEhuNVlmMFlGU2U0RG03d0RRbEJNQW1tZy9PR0RBYURUcHBZYUlpek1URjJkcHg1K21LZDUyN1pwTWFtb3FHUms5MlAzNll0elhMYUwzZHh3a3NDazFqSm0rbG0xckg4UjhHc3laVTJCc3JaUWVhSW1TTFhxeUtaVzNKaFRUZU9RSTNuaDdsR3pSNE5FM01EWFBUa3Vyai9nNDdTOGYyYitYaTUvL2d2L011b2J2UzA2d3FhbUp5c3I5bEphV1VsdGJTeUFRNE9qUlJvNGQwNElLc2ZsdVFXWGVVTlFVUlZIdysvMVM4L0VBZmpWQW5Ea1NQZFVGR0NRaGtLRk5rTUVRWkhER0dCWVh0WHo4OGQ2OG5qMTdYaGdmSHo5RVZaUjBWY2RDVGdvQVZHMlJqVEdNSlVoaDNJM1E1SU9NdEs4SkxGNm9xb1dNYkFpbEdubWFvSzRSMHJLSWtxNEoxYjVVVjBGeUJsaDFzMXp4UW5VZFpHVzN2YU9xd2M5UzBxTi9BN0J4MFRTV05BNWgxWnp4T21EN09RdHJMbUhyNDlOajFsUkYvMDZBclhMdGc0eGRzZ3QzMldFMlYveWJkQ09BbTBuOWUyS2Y5aEtMcHcwR29MUzByUGJNTTgvWS9OSkQwejc4eGYrK1VCM3lxWjRFb09rWEpjalFBdTJabkFTRlQ0TTF6VEZtcHdHRHdSUnNXbXlpSTlNeklTR0JSSnNWQ1lrdUtlbjB6TTRJQmdreXljN0s0cEZwQTNGTWZwTzdSbVJIeTFnQjdvWmFHcnhtc2pPUzI4eVZ4cnBxRkdzeUtmYm9tNnFucVo2NkppOXA2Um5SVWxING1ENm9ENE1YdnMvNGZqOThnNWZ2VGJZb0JHcWhZMmMweUh5ZmdXYUh3OEU1NXhUUzJ1ckZaREtoS0g3aTR5M0V4Vm1DUVFiTkVkdmNiTUpvYk1Ga011TDFhaXpPNS9QaGIvVnpwTUVnVkZXUkJBcXRyWXFRNUFCbWs0cUVKSHgrRGR4Q1FRWlpEZ2NaQWtKZ0FDbFl4U05DekswTnlQWHRXN2dIK0FSNCtvSUxMdWg3NExNUHo3LzdoWXJCZHc3UFNEK1ovemh0T095cWdPd0pzSHBlNVAxN3g4QWVHVlEzVkpmQzBGbXcrTFlUcisvcG1iQ3FDZXAzQWxZd0ZzRFdwZkR3ZEZpK0IzSlNvTFFNNWp3TkUwdkF2UWN5eHNISVhHaHd3WjQ2MkxJTGN1MVF0eHNHajRhTVF1MmY3OXNNVzVzZ0c5aitNa3krRjNvVlFQayttTDhDeHZZUHd5RXJWcnpPNkVVUGZ5dnpZTTNxTnhnNjRWRzhTNjlsN2ZZR3BwVWs0OTIzbnRVVldleVpmRW10eCtQWlVsSHh4VWZubkhQT2ZqMjc2Z0RRMmdPMjBIdWhvRklnREdpeXJFcENxR3FvSXpnSUpFa1lUU1lNc2lTOExTM0k1Z1M2V09QQTN5d2FqcnJJek03R2F0RkF6V0tKSXk0dTFKSGRTa0tDalhqSnplc3Z2NEUxN1F6aTFHWlNpc2Z4NUp6QjJCcDJNMjc4UFpUdnFjRlllUk1iRmxrWk1QNXU1azBkQmtvanN5ZGZ5OHY3VkxLc0hocHR4YXhkOVRmU0xEQnpSQ2JiUEgweG1nM1VWKzVsOU96bmVIQ3lWcy81NHR3Ym1QVnlKWVc5a3FuWVY4OFRXM2N3SUl5SlprYU51b2dsTDY5bGZMK0pVY2ZjVmJhZUNmYzh5N3psS3loeW5MYkFwaHYrWnBidCtJSnhsN2NOOW4xVjlTbGJqamw1V1ZjenV2MkQ5MW4wL240cWo3UXliOExQdm5mMVY0UEJRTStlUFltTHMrRHp0V0sxSmdTN1hNY0NuSm1XRmkySzJ0cmFxb0diMGNjWjJVYU8xdm1GSytDblM2SVdQUTBFQXFMRkZ3Qkp4V3hTaGFxcWtxSWdDUkNTRkk2aUJnQ0RKS0dBWkFoT2ZHUFFURFcyQTNUR0hUdDI3QUwyL09iS3JLY3UyL3RSNzV5Y25DS3IxWHBoWjdseFN6ZkEyb1d3dEoxeVRGc0JySndMVGRzaGV4b3N2TzNrVHY3MlBiQjNPNlJad1J2c0NqajlZYmduNkVxcFdnK0Q1OExFRGNFN2VoM2NzeE1LSFhEUGNGaTVFZTRiQXcvZkMyTWZoSGtUb0dvRDlOb1l2TWsxd01UYjRkbmRNREFkNnJaQzhWMHdla3R3LzN3VjdDeTFjM3RCMnl1aWRNMWZHRnJ4cWphUjB5NWc5Zko1bldlOHEzV3NYbGZGN0huOThkUmV5dU5yMXpGMTRNU3k4Zy8zN2ZCMGNaVDFqRFBvbVptcVkxbWRBWnFpWTJlS0hzd2tDVFhZbEZob2lndVNrR1JKR01PUlRvbFdiNnRRaFlGNHM0bjRPQk9OVGNkRmdIaU9IV3NoTGFzblNiYjRzRDh0MGozS2lzMm1xZDBlK2JTVWhMNGplZml1Y2ZUb2tVNTZlanBaV1ZtUW04dkdqZU9aTmZac0hKT2ZaK2JJN1BCaDJQejRiTlo0TDJMdnJubVlVVms0N1JJZVhyNk5CVk1IYWlSZ3dEaldQVHdaVC9WR2V2Vy9tMm5qZDVCanFXUEo0czBzMjN1UVFXbUE0c01YWTB3VUZoYXg2OEdkaEJSdndyY21WeDI3ZG4yRTIvZmZFQlU5QmRtaXZubG44ei9wWjdCMTl3Y3NlbWNQbDAwZFRNSVBRRk5UVWxKd09ydVFtSmlJelpZUUZVSFZKdEZ4M0c0elpyT0hsaGFONFlWTTAyYXpEOGx2eEdMeGkyQmdRZks0RlF5bWdEQWF0UjROQVVVVklDUlpEa2RSSlEza2hCeThVT1RnaFdBSW1xbmhzcTEyZ001WVdIak9SMEVtOTlKYmI2M3JmdDU1NStVN0hJNGlrOGwwSVhCU25UVUdCdlgvSEZsZ2FRUTNuRlIyK2JBeEdxZ0JZWG1ZdXIwd1l5R1UxMmdtWkwxdWd0dHlOVkFEeU1xQ1VPL25YYnRoOXRQYTgreUJrQkdjZVZYYm9OWUlxeGZCR2tEMWdhc1Vhb0VzQUZjRGpVWUhqbmJjakRtRHJtUHhuS0RFdDlGMlF0OU80L2ExbEtaZGR1ejhyb0VkOVVYRmU5K1o5TmN2REE5TlBoTHlrWGJDenRvRE5iM0NSclR2REZTQnBHcVBRb1I3YnNpeU1NZ0k3WWFvQ0pDMDNwRUdJeGFMUlJpTlJ0S05jUEJ3QS9iVWJMcDN0ZXNDQkJxbzJXelJxUnpaQ2VmeitxS1ZQTHN5Z1dIRFJwQmJkR0toeHkxYi9vWFowNS9aOS80KzZEYndVR2ZaQzJqQU5tU1FabzVic3daU2JDOWxkNVZDVGw0eVF3WWxjOXU0YXhnMzhqSUdEeC9Gb01Lc3FQWGFuUTVjOVVmYWJNODVZREoxZFpOUGQxTVVUbFcyS0NIQnhsa0pOczY2c29RMzVxNWcyNUZMdUx6ckQ1UDViTFZhNmRPbkQzYTduY1RFUkJJU2JGaXRWcXpXZUpxYU5BYm5kc2RoTmpkak5wdndlazE0dmEwY054c3g0Q2MrUHV4N0U3TGtCMk5BTXBzMUJ1ZHIxUmljTEdzcElvR0FRSktGaEFnSDdLVGdYVjNXbUp6azEvbmlEREVncHdjNlkxQkM2UUN3OFp4ekNrM0xsajJWazVOelptK2J6VlpvTkJyN1EvdDlsY09LTGwrejhNNFNHK1J5dzlpeE1HOGRqT3dIbnQyUU5xV2Q3Y1JzU3phQ1Q0bjRJdlNlWFhzR2pCa2RlVDFtUElRRmtPd083SW9MbHhkaTZaalZrVTVlM2dsMTlOMktvbnpnY3JsS0Z6NytWT1dSRDdmWDJNM0wxUmhtRm9qeGczVUVhSG93MC85RzFmdlBnbzBpVlVsQ0lCQ3lMS01HQWtLV0RhaEtxeERJSk5vVE1adU1IR3RzRUFhVEJsNG1rd21QNXdpeUxPSHpLOWdTYmNUSHRNUUw5ZmwwT3AxMDY1WkNldnFGYkx2bUpqNzc5Rk5XUGZzZ2YzM3RBOHJXek84OEtnd1VEcmljMGNPQ2dndWpyOGFla24xQ3FKano4dnVNM3I2RkxaczJNSEhJK1R5NDdtTW1GRWVrcXR4Tkxtek8wNk9EMWZja1c2VHkxYkVXdWlkcC9LeXh2bzREaXBrdWxoKytuQ016TXhPSHd4RUVPRnNZNE9MamoyS3hhT0NtQlJaYU1KbGFPQlpud29DUGhBUmpxR0tCaERnakxzVXZMSFlEaWk4Z3VZV0N5UndRSmxrbEVBamc5NnRJa2lEWVR5YlU2Rmx2cHNyQkM4UWdTVkk0NktBRHVmYkF6dmpSUjN1TjU1MTNYaW13RDFoN3hobG5HRzRiOVh4V3ErR3NISjh2cWJmSlpDcVFKS25YdDNyQUdxSGFDQ1ZGMms2dlczMVM2bVFNR2dqcjE4Q0lHYkIzUGRRb0VmWm1xd1k1RzRxRFFZMkdCaDJHbVhNcHptMmt0TnhEWWVHSm84TkNpQXBWaUUrT0hxNnIyRnl4NzhzYmI1eDBxS2FtUm8xaFplMnhzNDVZV3Zpem9OS0xFck1PVlFpaFQ5VVFXZ3RjU2NneUJGU0V3V0JBOGZ1RndXUkNWVm94bU9LeHhzY0pneFJBVVNFK1RtdDdKN3hOZkhWTTBLKzRtT3E5SDFEanl1YjhOSWN1NFZZZjlkVHFQYnQyNlVKcWp4NmNmZTZGRE8vbklHM2tjM2cxbDZqR29DMFc2aHNhMEx5WjJoZzg2Rkx1MlZwSnY5a1ROWmFyZW1ob2l0eHFObTNaeE15UlUvQlViMk9ucTRBRjJVYkFoOHV0VWpSd0tFVURoOUpVK2svS3ltdEJCMnhsWmFVVTlXL0xHTjNsbTVneGZ4WDNMRnBNdnYxMEJiWlRraTFLNVMvUHZjUzdMUmE2eGN0OGVhU1pjU012bzMvQ2FRSHVKQ1ltVWxCUVFGSlNrZzdnRXJCYUcybHFpc2RpY1JFWDEweGNuSm5HT0RNbTRjVm1NOUhhcWtWTjB6Sjl1Q3RNMUIvMkkxUkZ5R1lGZTRJaUJaTjdoZGNiUURhcVFoYXFGRXIwMVFVYVFpQVhabkhCdkRnLzBibHhoaGlBYS9QOHl5Ky9OUHp1cnlXZkFSVnhDM2tITUR6eXlKOXNoNW91VDA5MDljaHFiYldkYVJLbVhpRDNSbE1vK2ZvakMyNGZDQ1VESU1jR3lWa25ONG51ZWhoR2o0SDhwWkRiSDdLQ2RxT2NEQ3NXd2FTQld2REFWUXZtL3JEeDhZaFRldXk0SzFpNWZpTVRDa2RGaCtlRitNenI5WDV4L1BqeEw2dXJxdy8rODU4YkR0MS8vLzB0Z0RxaFg3bzRBWmgxQkdxeHo4Tkw4UHhFSmRJRzJ3TUppS1JySUVsQ1FzSm9rSVJmMGRLS2ZLMWVUT1k0TENaVkhHbHljN2pCQzBMQ2FKQXd4OFZqTmNQZWZYWGs5UnRJYWxjN0dZTXY0dTJOTy9Iazl5YTdXM0pRbGNOSnQyN2R3cVZSbVptWmJIcmlMaTVlK0I4SzhyS28zTHVIMis3N0IzcjRIenZ0TjR5ZGRnTWJGOXNaUFBsL1dEQmpCSU9ueldYRXp1c29LTHFJL0N3SEZlV1Z6Rmo4SnRPSGFtUy9hZnZMREJyNkdrMlZwVXg2K0JseUxBQjFqQysrRkhkR1BuWWFxSFRuc21aa1lSUjVXYnZtMzR5ZE82L051ZmZXbC9QTU15OHg4Y0h2RDlpKzExclJaazh6Ujd3S1hSTVRTVERKUHdpSTFkZlg0L1A1eWNqbzBmNCtOamRUWFYwZFR1ZzljaVJVYStvS3l5QzF0R2krdDlaV2J4RGN0SHBUajl1SEloU0VxcVdIaElycVE5VUx3UnBVZ2pXb29VSjdRa0NuZTVTRGdDZnJscENNa2lHbUNmU0puaHRpZncvSXExYTltcHlYbDljdE9ibGJxczJXa0c0eW1ib2JESVlNU1pJeTJ4cDliVWRERFNoV1NQdWFFU0JGQVdvaGF5aVVsMGZzWmxXQm1ocXdKNE1qWWt4N2hSQUhXZy92T2podytCKy9XckgyNmErVXh2ckRaV1ZsUjY2L2Z2eFJJaHA2NGZTSkRzQ3NJNGJXNGZOUThibnU5L29ValhDcVJ1Z3gyQjB0cU5Zc2laQmN2VzZKbEVNWlpBUVMxZ1FibHJoUW5hYzVHUEVNQlFnU3d1M3d1blJ4aEZsYUtEaWdiNFhuODdpb3JXL1VPanBaVHo2THpOTlVUNE5MSVMwOUhYUHc3alJ6ZUNiWk05OW5ZcUdDWW5HU0hKWHVvZEpRVzRzYk0xbnBLZEdwSS92V01uRDZPclp2WG9MMU5DQXJQN29pK0c4S2JLRlJWMWNYTEtRL1JFUERZUm9iRzRNYWJ4R2xFSStuL1lvRnY5OGZ6bjNUVnk0RUFvb1VDS2hoZ0FzRTFDQ3dxYWhxR05UUU1icU9RQzRNVURHcUk1MHRjc3h6T2VaNWFCdlNvNDh1c1BYdDI5ZWVscFptVDBwS3NsdXRWcnZaYkxZYmpVYTd3V0N3eTdKc2t5VEpKa2xTZ2lSSjhVRWdEQWtBR0hUZXRSQXcrR3EzNHB2NUxONXplNHVXYmErSjV2UUp3cjN3bDZvN0VBZ2NWeFRGMWRyYTZ2SjRQTWVibXBwY1gzMzExZkc5ZXo5MjMzMzMzUjRkZUlrWUlCT2RiKy8wNGdBQUM4eEpSRUZVZ0prZXlEcGlhbEZMSjBBV0JXWjZJQU9FTEV0QzY1SW1ZVERJT2tDVE1SaU1zWlVEUkJKdDIxWVFhTW0ybWlKSFlxSTl6TktTazdzRnU3RnJPV3JmNVFnQjI0eWhYMjg3KzdhdHBjRlJURW4rNlNFUC94T3dkWmJONHZkejRNQ0JzSUNsSm9OMGxHUEhYTzJLV0VhcmhmaUNBS2UwQTNBUkZxZDF1bGRENVZyRU1Mak9RSzVkc05PVmQ4bWRnSnFoSFdDTFhmVGI2V3lobmNmWTU5Rk8ycmJQOVkrZExiRkFGcnQweE5MYVBBOUp2N2NIWWljQ3M5RHptSjRhVWV5c0xhQ0ZRQzFTdU42UkdHUlNraDJIb3d2SnlWMXh5RzcrODJFbERtY1hESWJvL3ZUOWg0MW5RTzYzMjExOTM4N05XSHNOSk10cC9xKyt6bjhDdHBNWXg0NGQ0K0RCZzlUVjFYSDRjSWk5UlhUZW1wczlPdk0wVXJVUXFUbU5CcmhBSUJCbHBxcXFHZ1Z5UXFpU3FvcXdxVXE0NGJPUWhFQVBkRkk3SUJRRFVNS2dWVU8weTlJNkF6ZXBBNENUMndHMXpnQ3VNM0NMQlRUYUFiSE9HSnJhQVZ1TGVxMmwya2lkZ2xqUVo2YnJOeHYybTRYQUxHaHFTa2hTTkpqcFFFMkVGR1AwZ0dZMFJoaGFxSHFnYlY2YVRWZm5HZkdsOWVqUmc2U2tKSDRhMzNsVTlQL2VTRXBLSWlrcGlhNWR1MUpiK3hYMTlZZUNPbTlIZ3lWWng0TUY5YzNoZ25xdlYxK1NwV2R2SVJNMUVLVWVvZ2xjQmdnRVZGUlZGVUdRRTZxcVNxRitNMXEvQnFKWVhQQUNqbVYwT2dDU1pFbUtCVHdoQndHeU0wRHJETnkrRG5QN09zRDJkY3pPZGdFdUNFaWRBaGpSemJMRG9LcjNtWVZlQndFdGlwbHBRQ2FIMmo2S0VGT0wxSFlhd3dyT0VaWVdxUjZ3UktWd2hGaGFFbDI2ZENFNU9abVVsRlRTMDd2L241QVgrZ25ZZnVCUld2b0p1Ymxua1pxYXlvRUROZFRWZmNYaHc0YzVjdVJJbEpCbHlEelZLNGJvYTA0MTM1c0djb0ZBR09BSUJBSjZpU1JKeCtCRWhNbUowS09JTVZYUlIxY2piRnhJN1lOU0ZOaEZmYWNkYzFjNkFiQjF4TnBpVFZMUkNiaDFCbkJxZTY5MW9OUVpzNHY5VGRTMjlLOWpURTFrV2RZRkEvU0FaaUNrdWhFTGFBWkRoS0hwaTliYlU3YlZ6TTZJRUdUWHJsMkRMSzA3bVprL0tWcjlCR3cvd01qTXpDQTFOWVhhMnRxd1NtOWI4N1E1R0Z3SUFad3Z4di9XaHIyRkFneEJrRk03QkRrZHdCSE41cVJZb0l0NjNzNW5iWlpnSGwwbnpFeEwwdm91Zld4QjFuV3lUSzZqQmIxcEdmT2E5bGhaaUpucC9HZnRnRm5JN0RSMnd0TDBmalJ6VUJNd1hpY0NHVzEyaHRSdDA5UFRNWnZOUDExZ1B3eXdCZGl4ZHgvL3JQaUtZNHBNd1ZrOXVlSGNNekFEcmMxTnZMcnJNL2JXSGNOZ3NUR3l1SkFMdThja3dpdk5QUFh2anptejk5a016dmp2OVIyWXpXYXlzN05KVFUxdFk1N3FvNmZSL2pjOWcrczRlcW9vQ29xL2xaWldDWXRaaWdJNVhiQ2hQWkFqMGlZVktmWlJWVlVrV1E0SjJNUXlPenBoWXJyWFVralc2MlRCckNQR0Z2V2VDTm5aSjJaeWRBSmdrZDhMSVZSVllERElVVXhNNXk5RG42SVJDMmFod0lDK0NiZWVvWFVXN1l6NDBTeHQvR2loYUdlczJSbmJVS1c5VWJZYnNvcWczWmF3N2lvbVRIbVl4U3VXNE5SZDFiWGxlNUJUOGtsemZEdUE2U2xkeGVDNXU5ajU4dnh2dko0aGMzZXgvUlRXY3pMLzZSVDAySTZ6ZW5jdFJZWFpwSnBWbHIyOWtjK09YOGFEZzdMNXNyS0tqNXRsTHUyYmkvdklRWDc5OTVVc3ZtTWlBN3BFTnZQVzVxMHNlZTlMcnJMMStLOEd0dENJajQrblo4OGMwdEpTcWF1cm83NitQbWllNnYxdklZQnJhU09MMUZIMHRMbmhDSWNiQStSa3BlalRRNFRPRDZjSE9ZUlFoUlp3VUFrR0hzSkFGN3pPSlNFRWtpd2pSY0NPazJGZE1jQjNJakE3MlhLU05xYXBpUHc0Q3FSQzdLb2p0cWNIeFBEejRQOHpHQXpoOTJNQ0FFUWVZOEZNMWpYZDFnT2FJZGlZdTZOb1o3U3NVRWlGUXdPMGlCK3RhOWV1cEtTa2tKYVdGcFdQZHFJeGJRUXNySUQrN1JUTnJWc3lCOHVBOFZHZ0JyRGt2cC9qbVB4V1ZCSDhON3FocHhWdys2UnZudEtoZWwxVVZSOCtwZCtlekgvNitzQW1PM2hnOHVYaGwxMDhoN2wxejVjd0tKdmN2a1U4MERmMFNUYTdQL21VTGZzYkdkQkZPeEN1dXYwOFYydmp1ak90ZUg1azFEY2hJWUdlUFh2U3ZYdjNjUFQwU08xblBQL0NlL1F0S2NIZWNoelhvVW8yZlZKTG43NjVKTFMyQkFNTXNRek95NEV2dnFEcFdETkNFUnc1Y2dSVk1wR1M0b1JBZ0lEaTVmRGhZMWl0Um5ITTVVSkZ4cDdrUUJaK3llVnlvd1MwV0lJcHppSk1SZ2toQkFHL0QxOGdJQUJKbGcxSWhNQk9SVkZVTFNDaHFxQ3hscE1GclRZQXBrWFlwVENsQzZia0k3Y3ZjaWpDM3dtQnJQYjlZRjRZWVlBSzdtMlExV21BSklRcWhOQitMMGt5UnFNaEJIQUVGRDhDQ1VuV29wUWhVQXY0VzFFeG9yUzJFaEJndGRteHhwbkNRTlpPMmdadGZXbnRNelN0NzBBUTBJeng3UG5FU3U0Wk5uWnNTNlJiVGhJM1QzU1EzazN6b3gydFNPTnZ6MWh4eVRCK09nd3RCRHl3Y0JHTXZ4UFNMT0NyaDBlZWhSbDNRZVVtV0xrWnF0encrRnhJTThPSVNUQXdONFFTalN4KzRsL2N0V1ZwK09BMmxXOWp3Yk52c2JtMEhzdnlQOU8wM1VIZTRHdVpPRlJyWmx5NWN5MWJtNUpKcWQzQ2k1cytJWGZJejdsdjhuQXFkMjNnNlpmZm9ycXVrZlRjODVseCszVFM3UnBNckh2NlliWlZITWVhZFg3VWlhell2b2J0alhhOGV6YXd0ZUlJSTZmOGxyRWx1U2R4MWZoWXZXUWVhM1orU2IrUk4zSGIyQkprb0w1OE8wdWZYVVY1OVNHY0diMlpkdnVkNUtWWlQvaWZWRTg5eXhZdlptdnBBYjV4K3YrbjlRM2twcmVUUytNL1RzVVJsVDZwUVZhbStuaG83VTZtWDNrK2NUL09qbCtBVmx5Zms1UERPZWVjUS82NWd6akgwY0NMRzh2SXlrcGp4L28xbURQeXlVeExwVnUzRkpLVHUrSjBPbkU0dW9UTHVleDJPNms5TWtoMUppS1pFMGhMU3lNMXBTc0pWbzBCeE1jWmNMdVBjK1JvTTNhSEU3dk5ndEVjUjV4UkZySXBUdGlUa29RdHdTeDhMYzFnREdhMFd6UTVKczAyTXdtVHlTU01ScU13R2lRUkJBaGhNQnFFMXNSQlVnMEdneXJMY250TElMaUVHdmRHTDVyMm5DSkprcVo0b2RWVmhsL0hMQUZKa2dLeUpBVmtXUTRteVdycmxtVXB2QjJCVUlXR3VtcHd1NnJCWUZBbHRJNU5KcE5SU0toQ0NhakNhRFFLazhra1RDYXpNRWlJZ0NwMGlyTnhpSUJDYTJ1cnNDUWtDcHRaRm03WGNSRVhyL20vSW83OTRIR09qOGRxdFhDOHNaNURodzVSVjFkSGJXMHRCdzhlNUtzamJ1eDJPMGxKU1RnY1hZSitzcTUwNjVaQ2Ftb3E2Y25kZVc5TEJtVU5aM0Q5OVRrMDdzeGxXMTArNTV4ekRrcEZEdGZlYWFWa0xFd2FDWGVOZ1ozMWdCV3lmRERwSGswc2ROWVVjS1dCWFliMFhqQjhPRGpOVUR4RWU1Nmx1K1I4NVp2WUtmZG5RSHFFcDFpU3N4ZzIvQXF5VTJ6MDZuY3h3NGRmUWI5ZUVWbS95cDF2Y3QrMFg3Q3F3c0w0aWRkalZWd0FWRldVMDJ2QWxkeCsxeDFrdWQ5ajJKUjVZY0dDdkg2REtja0s4TWl5TjJLQTdRMW1UTHNidFdBb0U0Wm1NbjNzelZTZmhFUlIwKzVWYkhEMVl2cVVhMWs5K3pvV2I2Z0VvS2F5QW1kK0NYZmVkUWNsS1ljWU51SVczQ2Y2VDZxTEdTTXVabDJObldtMzMvSE5nZ2ZWK3ovaHNVOENQRG5qN0ZpaXlUTnJOaEozOWdDdTdLR1ZKTzdjOFI1Tm1VVU02bWJtdy84RHprdUx4VUoyZGpaM0xYNkJUeSsvbU1jZi80REd6SkhNdnU0UzNDNTlpb2luVFltVzFacUlUYmlvOVBqSnlNaUk5c0VadFJtVGNWWnZFZzFDWjZaYU1NZjdhUFkwbzBqeHlIS0xVREVRRjJkR21NM0VXVlFhV3IyUzBSeEhuQ0Zvc2lxQ0ZxOWZ4TnNTa0lXZ3RhVVpSWURSYUNSaXdZcVFPUm9tV2tFaUZrVytoTkRpcHFvL0FMS01qQ29GQW1Bd0dKR2xqazFRaldSSitIMCtKSU1Sb3h4NUQwQUVBZ1FrQ1lzbExzcWtOSnROQkJTRmdDb3dHbVI4QVVGY25CbEprcEVzRnBRV0Y2NVdTVmdzY1dGenMvVzRoQ2t1aVdTbkExbEs0SGhsTFhKY1BQRkdmYldBUGpBZzAycExKSTVvYzlTYzJBV25zMHVVRDAzZlNNVk9FaWFqZzkvKzBVbS8xRzUwUDU3S3F6VkdMQlpZdWhBbXpvSVJKZHIvbnpvVVZxeUY0aWt3Wmhac0hnRmp4a0JUQ213TXlwcWxaR3VMM1F6OVN0cWFvclhsVlZoeU1xTmtYU3pPREVwS01saWZZc1dSWDB4SlNWdXp6WmgzQlkvUHV4MFpHQjU4YjhqNEdkUlc3R1Z2ZVEwWmhlZFM5K3hiTkFMSlFFNWhNU20rTXVSbGJVM0lncEUzTW0zVUVLQ1lnYlArek41YVRTbTUwNUUraVBuM2pzY0J6SnB4RGZlOHVJcmJoODJrMy9DSlpGZnZZMDlaSmVaZTUyQ3BmSUFLTnhSMThwOWN1MWV6dkRhUG1zMHpzUVAvSDNpeGdKbVFPNXd1QUFBQUFFbEZUa1N1UW1DQyJdLFsxLCJkZXRhaWxzLWNvbnRhaW5lciJdLFsxLCJkZXRhaWxzIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2RlYnVnZ2luZy9leHBlcmltZW50YWwvZW5hYmxlX2R1bXBfZGVidWdfaW5mbyIsInRhcmdldCIsImJsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciJdLFsiaHJlZiIsImh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9kZWJ1Z2dpbmciLCJ0YXJnZXQiLCJibGFuayIsInJlbCIsIm5vcmVmZXJyZXIgbm9vcGVuZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxBKDIsIkRlYnVnZ2VyIFYyIGlzIGluYWN0aXZlIGJlY2F1c2Ugbm8gZGF0YSBpcyBhdmFpbGFibGUuIiksdigpLF8oMywiZGl2IiksQSg0LCJUbyB1c2UgdGhlIGRlYnVnZ2VyLCIpLHYoKSxfKDUsImRpdiIpKDYsIm9sIikoNywibGkiKSxBKDgsIiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHRoZSBiZWdpbm5pbmcgb2YgeW91ciBwcm9ncmFtOiAiKSxfKDksImRpdiIsMikoMTAsInNwYW4iKSxBKDExLCJ0Zi5kZWJ1Z2dpbmcuZXhwZXJpbWVudGFsLmVuYWJsZV9kdW1wX2RlYnVnX2luZm8oIiksdigpLF8oMTIsInNwYW4iLDMpLEEoMTMsImxvZ2RpciIpLHYoKSxBKDE0LCIsICIpLF8oMTUsInNwYW4iLDMpLEEoMTYsJ3RlbnNvcl9kZWJ1Z19tb2RlPSJGVUxMX0hFQUxUSCInKSx2KCksQSgxNywiLCAiKSxfKDE4LCJzcGFuIiwzKSxBKDE5LCJjaXJjdWxhcl9idWZmZXJfc2l6ZT0tMSIpLHYoKSxfKDIwLCJzcGFuIiksQSgyMSwiKSIpLHYoKSgpKCksXygyMiwibGkiKSxBKDIzLCJSZS1ydW4gdGhlIHByb2dyYW0uIiksdigpKCkoKSxfKDI0LCJkaXYiLDQpKDI1LCJkaXYiLDUpKDI2LCJkaXYiLDYpLE8oMjcsImltZyIsNyksdigpLF8oMjgsImRpdiIsOCksQSgyOSwiQXV0by1hbGVydHMgZm9yIHByb2JsZW1zIGZvdW5kIiksdigpKCksXygzMCwiZGl2Iiw1KSgzMSwiZGl2Iiw2KSxPKDMyLCJpbWciLDkpLHYoKSxfKDMzLCJkaXYiLDgpLEEoMzQsIiBJbnRlZ3JhdGVkIGRlYnVnZ2luZyB0byB0cmFjZSBwcm9ibGVtcyB0byB0aGVpciBjYXVzZXMgIiksdigpKCksXygzNSwiZGl2Iiw1KSgzNiwiZGl2Iiw2KSxPKDM3LCJpbWciLDEwKSx2KCksXygzOCwiZGl2Iiw4KSxBKDM5LCJMaW5rIGxvZyB0byBjb2RlIiksdigpKCkoKSxfKDQwLCJkaXYiLDExKSg0MSwiZGl2IiwxMiksQSg0MiwiIFRoZSBsb2cgZGlyZWN0b3J5IG11c3QgY29udGFpbiBUZW5zb3JGbG93IERlYnVnZ2VyIChWMikgZGF0YS4gdGYuZGVidWdnaW5nLmV4cGVyaW1lbnRhbC5lbmFibGVfZHVtcF9kZWJ1Z19pbmZvKCkgd2lsbCBjb2xsZWN0IHRlbnNvciBkYXRhLCBncmFwaCBzdHJ1Y3R1cmVzLCB0aGUgYXNzb2NpYXRlZCBzdGFjayB0cmFjZXMsIGFuZCBzb3VyY2UgY29kZSB0byB0aGUgc3BlY2lmaWNlZCBkaXJlY3RvcnkgbG9nZGlyIGFzIHRoZSBpbnN0cnVtZW50ZWQgVGVuc29yRmxvdyBwcm9ncmFtIGV4ZWN1dGVzLiAiKSx2KCksXyg0MywiZGl2IiwxMikoNDQsImRpdiIpLEEoNDUsIiBTZWUgIiksXyg0NiwiYSIsMTMpLEEoNDcsIiBkb2N1bWVudGF0aW9uICIpLHYoKSxBKDQ4LCIgb2YgdGhlIFB5dGhvbiBBUEkgb2YgRGVidWdnZXIgVjIuICIpLHYoKSxfKDQ5LCJkaXYiKSxBKDUwLCIgU2VlICIpLF8oNTEsImEiLDE0KSxBKDUyLCIgaGVyZSAiKSx2KCksQSg1MywiIGZvciBvdGhlciBUZW5zb3JGbG93IGRlYnVnZ2luZyBBUElzLiAiKSx2KCkoKSgpKCkpfSxzdHlsZXM6WyIuYXJnW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGNvbG9yOiBsaWdodGJsdWU7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgbWFyZ2luOiAycHg7XG59XG5cbi5jb2RlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gIG1hcmdpbjogMTBweDtcbn1cblxuLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBSb2JvdG87XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgcGFkZGluZzogNTBweDtcbn1cblxuLmRldGFpbHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmRldGFpbHNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDEwcHggNjBweDtcbiAgd2lkdGg6IDUwJTtcbn1cblxuLmV4aGliaXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luOiAxMHB4IDYwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdpZHRoOiAzMTBweDtcbn1cblxuLmV4aGliaXRbX25nY29udGVudC0lQ09NUCVdICAgLmRlc2NyaXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdpZHRoOiAzMTBweDtcbn1cblxuLmV4aGliaXRbX25nY29udGVudC0lQ09NUCVdICAgLnNjcmVlbnNob3RbX25nY29udGVudC0lQ09NUCVdICAgY2FudmFzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGhlaWdodDogMjAwcHg7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4udGl0bGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxMzUlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbWFyZ2luLWJvdHRvbTogMjVweDtcbn0iXX0pLG59KSgpLFZyZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWluYWN0aXZlIl1dLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZPKDAsImluYWN0aXZlLWNvbXBvbmVudCIpfSxkZXBlbmRlbmNpZXM6W0JyZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksVXJlX2dldFdpbmRvdz1mdW5jdGlvbigpe3JldHVybiB3aW5kb3d9O2Z1bmN0aW9uIEhyZShuKXtsZXQgdD1VcmVfZ2V0V2luZG93KCkucmVxdWlyZTtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3QobixlKX0pfXZhciBnVV9sb2FkTW9uYWNvPWFzeW5jIGZ1bmN0aW9uKCl7bGV0IG49VXJlX2dldFdpbmRvdygpO2lmKHZvaWQgMD09PW4ubW9uYWNvKXtpZighbi5yZXF1aXJlKXRocm93IG5ldyBFcnJvcigibG9hZE1vbmFjbygpIGZhaWxlZCBiZWNhdXNlIGZ1bmN0aW9uIHJlcXVpcmUoKSBpcyB1bmF2YWlsYWJsZSIpO24ucmVxdWlyZS5jb25maWcoe3BhdGhzOnt2czoiL3RmLWltcG9ydHMvdnMifX0pLGF3YWl0IEhyZShbInZzL2VkaXRvci9lZGl0b3IubWFpbiJdKSxhd2FpdCBIcmUoWyJ2cy9weXRob24vcHl0aG9uLmNvbnRyaWJ1dGlvbiJdKX19O2Z1bmN0aW9uIFBQKG4pe3JldHVybiBuPyJ2cy1kYXJrIjoidnMifXZhciBoZz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXM9MTAwLHRoaXMub25SZXNpemU9bmV3IEcsdGhpcy5uZ1Vuc3Vic2NyaWJlJD1uZXcga2UsdGhpcy5vblJlc2l6ZSQ9bmV3IGtlO2xldCBpPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+e3RoaXMub25SZXNpemUkLm5leHQoKX0pO2kub2JzZXJ2ZShlLm5hdGl2ZUVsZW1lbnQpLHRoaXMubmdVbnN1YnNjcmliZSQuc3Vic2NyaWJlKCgpPT57aS51bm9ic2VydmUoZS5uYXRpdmVFbGVtZW50KX0pfW5nT25Jbml0KCl7dGhpcy5vblJlc2l6ZSQucGlwZShaYSgxKSxIcih0aGlzLnJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zKSxzdCh0aGlzLm5nVW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5vblJlc2l6ZS5lbWl0KCl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZSQubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZSQuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJkZXRlY3RSZXNpemUiLCIiXV0saW5wdXRzOntyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NczoicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMifSxvdXRwdXRzOntvblJlc2l6ZToib25SZXNpemUifX0pLG59KSgpLE9CZT1bImNvZGVWaWV3ZXJDb250YWluZXIiXSxXcmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubGluZXM9bnVsbCx0aGlzLmZvY3VzZWRMaW5lbm89bnVsbCx0aGlzLm1vbmFjbz1udWxsLHRoaXMuZWRpdG9yPW51bGwsdGhpcy5kZWNvcmF0aW9ucz1bXSx0aGlzLlJFU0laRV9ERUJPVU5DRV9JTlRFUlZBTF9NUz01MH1vblJlc2l6ZSgpe3RoaXMuZWRpdG9yJiZ0aGlzLmVkaXRvci5sYXlvdXQoKX1uZ09uQ2hhbmdlcyhlKXtpZihudWxsPT09dGhpcy5tb25hY28pcmV0dXJuO2xldCBpPWUubW9uYWNvJiZudWxsPT09dGhpcy5lZGl0b3I7bnVsbD09PXRoaXMuZWRpdG9yJiYodGhpcy5lZGl0b3I9dGhpcy5tb25hY28uZWRpdG9yLmNyZWF0ZSh0aGlzLmNvZGVWaWV3ZXJDb250YWluZXIubmF0aXZlRWxlbWVudCx7dmFsdWU6KHRoaXMubGluZXM/P1tdKS5qb2luKCJcbiIpLGxhbmd1YWdlOiJweXRob24iLHJlYWRPbmx5OiEwLGZvbnRTaXplOjEwLG1pbmltYXA6e2VuYWJsZWQ6ITB9LHRoZW1lOlBQKHRoaXMudXNlRGFya01vZGUpfSkpLGUubGluZXMmJnRoaXMubGluZXMmJnRoaXMuZWRpdG9yLnNldFZhbHVlKHRoaXMubGluZXMuam9pbigiXG4iKSk7bGV0IHI9aXx8ZS5mb2N1c2VkTGluZW5vP3RoaXMuZm9jdXNlZExpbmVubzpudWxsO2lmKHImJnRoaXMubGluZXMpe3RoaXMuZWRpdG9yLnJldmVhbExpbmVJbkNlbnRlcihyLHRoaXMubW9uYWNvLmVkaXRvci5TY3JvbGxUeXBlLlNtb290aCk7bGV0IG89dGhpcy5saW5lc1tyLTFdLmxlbmd0aDt0aGlzLmRlY29yYXRpb25zPXRoaXMuZWRpdG9yLmRlbHRhRGVjb3JhdGlvbnModGhpcy5kZWNvcmF0aW9ucyxbe3JhbmdlOm5ldyB0aGlzLm1vbmFjby5SYW5nZShyLDEsciwxKSxvcHRpb25zOntpc1dob2xlTGluZTohMCxsaW5lc0RlY29yYXRpb25zQ2xhc3NOYW1lOiJoaWdobGlnaHQtZ3V0dGVyIn19LHtyYW5nZTpuZXcgdGhpcy5tb25hY28uUmFuZ2UociwxLHIsbysxKSxvcHRpb25zOntpbmxpbmVDbGFzc05hbWU6ImhpZ2hsaWdodC1saW5lIn19XSl9ZS51c2VEYXJrTW9kZSYmdGhpcy5tb25hY28uZWRpdG9yLnNldFRoZW1lKFBQKHRoaXMudXNlRGFya01vZGUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sic291cmNlLWNvZGUtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmb3QoT0JlLDcsUmUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuY29kZVZpZXdlckNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7bGluZXM6ImxpbmVzIixmb2N1c2VkTGluZW5vOiJmb2N1c2VkTGluZW5vIixtb25hY286Im1vbmFjbyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwxLCJjb2RlLXZpZXdlci1jb250YWluZXIiLDMsInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwib25SZXNpemUiXSxbImNvZGVWaWV3ZXJDb250YWluZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCwxKSxQKCJvblJlc2l6ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlc2l6ZSgpfSksdigpKSwyJmUmJnkoInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIixpLlJFU0laRV9ERUJPVU5DRV9JTlRFUlZBTF9NUyl9LGRlcGVuZGVuY2llczpbaGddLHN0eWxlczpbIi5jb2RlLXZpZXdlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgICAuaGlnaGxpZ2h0LWd1dHRlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxMTEsIDAsIDAuNyk7XG4gIHdpZHRoOiA1cHggIWltcG9ydGFudDtcbn1cblxuW19uZ2hvc3QtJUNPTVAlXSAgICAgLmhpZ2hsaWdodC1saW5lIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDExMSwgMCwgMC4zKTtcbn0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHFyZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5tb25hY28kPW51bGx9bmdPbkluaXQoKXt0aGlzLm1vbmFjbyQ9RW8oZ1VfbG9hZE1vbmFjbygpKS5waXBlKEwoKCk9PndpbmRvdy5tb25hY28pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sic291cmNlLWNvZGUiXV0saW5wdXRzOntsaW5lczoibGluZXMiLGZvY3VzZWRMaW5lbm86ImZvY3VzZWRMaW5lbm8iLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LGRlY2xzOjIsdmFyczo2LGNvbnN0czpbWzMsImxpbmVzIiwiZm9jdXNlZExpbmVubyIsIm1vbmFjbyIsInVzZURhcmtNb2RlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJzb3VyY2UtY29kZS1jb21wb25lbnQiLDApLEIoMSwiYXN5bmMiKSksMiZlJiZ5KCJsaW5lcyIsaS5saW5lcykoImZvY3VzZWRMaW5lbm8iLGkuZm9jdXNlZExpbmVubykoIm1vbmFjbyIsVSgxLDQsaS5tb25hY28kKSkoInVzZURhcmtNb2RlIixpLnVzZURhcmtNb2RlKX0sZGVwZW5kZW5jaWVzOltXcmUsR2VdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2Z1bmN0aW9uIE5CZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2Iiw2KSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSxqZSgiICIsZS5mb2N1c2VkU291cmNlTGluZVNwZWMuZmlsZV9wYXRoLCIgIil9fWZ1bmN0aW9uIExCZShuLHQpezEmbiYmKF8oMCwiZGl2Iiw3KSxBKDEsIiBObyBmaWxlIHNlbGVjdGVkLiBDbGljayBhIGxpbmUgbnVtYmVyIGluIHRoZSBTdGFjayBUcmFjZSBzZWN0aW9uIHRvIHNob3cgdGhlIHNvdXJjZSBjb2RlLiAiKSx2KCkpfWZ1bmN0aW9uIEJCZShuLHQpe2lmKDEmbiYmTygwLCJzb3VyY2UtY29kZSIsOCksMiZuKXtsZXQgZT1TKCk7eSgibGluZXMiLGUuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50LmxpbmVzKSgiZm9jdXNlZExpbmVubyIsZS5mb2N1c2VkU291cmNlTGluZVNwZWMubGluZW5vKSgidXNlRGFya01vZGUiLGUudXNlRGFya01vZGUpfX12YXIgWXJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudD1udWxsLHRoaXMuZm9jdXNlZFNvdXJjZUxpbmVTcGVjPW51bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInNvdXJjZS1maWxlcy1jb21wb25lbnQiXV0saW5wdXRzOntmb2N1c2VkU291cmNlRmlsZUNvbnRlbnQ6ImZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCIsZm9jdXNlZFNvdXJjZUxpbmVTcGVjOiJmb2N1c2VkU291cmNlTGluZVNwZWMiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LGRlY2xzOjgsdmFyczozLGNvbnN0czpbWzEsInNvdXJjZS1maWxlcy1jb250YWluZXIiXSxbMSwiaGVhZGVyLXNlY3Rpb24iXSxbMSwidGl0bGUtdGFnIl0sWyJjbGFzcyIsImZpbGUtbGFiZWwiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9GaWxlU2VsZWN0ZWQiLCIiXSxbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwidXNlRGFya01vZGUiLDQsIm5nSWYiXSxbMSwiZmlsZS1sYWJlbCJdLFsxLCJuby1maWxlLXNlbGVjdGVkIl0sWzMsImxpbmVzIiwiZm9jdXNlZExpbmVubyIsInVzZURhcmtNb2RlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiZGl2IiwyKSxBKDMsIlNvdXJjZSBDb2RlIiksdigpLEUoNCxOQmUsMiwxLCJkaXYiLDMpLEUoNSxMQmUsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LHF0KSx2KCksRSg3LEJCZSwxLDMsInNvdXJjZS1jb2RlIiw1KSx2KCkpLDImZSl7bGV0IHI9JGUoNik7Qyg0KSx5KCJuZ0lmIixudWxsIT09aS5mb2N1c2VkU291cmNlTGluZVNwZWMpKCJuZ0lmRWxzZSIsciksQygzKSx5KCJuZ0lmIixudWxsIT09aS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQmJm51bGwhPT1pLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyYmbnVsbCE9PWkuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50LmxpbmVzKX19LGRlcGVuZGVuY2llczpbQmUscXJlXSxzdHlsZXM6WycuaGVhZGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDoyNHB4O3BhZGRpbmctYm90dG9tOjZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmhlYWRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmhlYWRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5maWxlLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpub3JtYWw7d2hpdGUtc3BhY2U6bm9ybWFsO292ZXJmbG93LXdyYXA6YW55d2hlcmU7b3ZlcmZsb3cteTphdXRvO3BhZGRpbmc6MCAyMHB4fS5uby1maWxlLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjojNjY2O3BhZGRpbmc6MCAyMHB4O3doaXRlLXNwYWNlOm5vcm1hbH0uc291cmNlLWZpbGVzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTAwJX0udGl0bGUtdGFnW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpib2xkO2hlaWdodDoxMDAlO3BhZGRpbmctbGVmdDo2cHg7dmVydGljYWwtYWxpZ246dG9wfXNvdXJjZS1jb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTt3aWR0aDoxMDAlfSddfSksbn0pKCksWHJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50JD10aGlzLnN0b3JlLnNlbGVjdChUUCksdGhpcy5mb2N1c2VkU291cmNlTGluZVNwZWMkPXRoaXMuc3RvcmUuc2VsZWN0KERQKSx0aGlzLnVzZURhcmtNb2RlJD10aGlzLnN0b3JlLnNlbGVjdChRdSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXMiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50IiwiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsInNvdXJjZS1maWxlcy1jb21wb25lbnQiLDApLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpKSwyJmUmJnkoImZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCIsVSgxLDMsaS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQkKSkoImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsVSgyLDUsaS5mb2N1c2VkU291cmNlTGluZVNwZWMkKSkoInVzZURhcmtNb2RlIixVKDMsNyxpLnVzZURhcmtNb2RlJCkpfSxkZXBlbmRlbmNpZXM6W1lyZSxHZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksVUJlPVsic3RhY2tGcmFtZUFycmF5Il07ZnVuY3Rpb24gekJlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwxMyksQSgxKSx2KCkpLDImbil7bGV0IGU9UygzKTtDKDEpLGplKCIgIyIsZS5leGVjdXRpb25JbmRleCwiOiAiKX19ZnVuY3Rpb24gakJlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwxNCksQSgxKSx2KCkpLDImbil7bGV0IGU9UygzKTtDKDEpLGplKCIgIixlLm9wVHlwZSwiICIpfX1mdW5jdGlvbiBHQmUobix0KXtpZigxJm4mJihfKDAsImRpdiIpLEEoMSwiIEVhZ2VyIGV4ZWN1dGlvbiAiKSxFKDIsekJlLDIsMSwic3BhbiIsMTEpLEUoMyxqQmUsMiwxLCJzcGFuIiwxMiksdigpKSwyJm4pe2xldCBlPVMoMik7QygyKSx5KCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpLEMoMSkseSgibmdJZiIsbnVsbCE9PWUub3BUeXBlKX19ZnVuY3Rpb24gV0JlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwxNiksQSgxKSx2KCkpLDImbil7bGV0IGU9UygzKTtDKDEpLGplKCcgIicsZS5vcE5hbWUsJyIgJyl9fWZ1bmN0aW9uIHFCZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsMTQpLEEoMSksdigpKSwyJm4pe2xldCBlPVMoMyk7QygxKSxqZSgiICIsZS5vcFR5cGUsIiAiKX19ZnVuY3Rpb24gWUJlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiKSxBKDEsIiBDcmVhdGlvbiBvZiBncmFwaCBvcCAiKSxFKDIsV0JlLDIsMSwic3BhbiIsMTUpLEUoMyxxQmUsMiwxLCJzcGFuIiwxMiksdigpKSwyJm4pe2xldCBlPVMoMik7QygyKSx5KCJuZ0lmIixudWxsIT09ZS5vcE5hbWUpLEMoMSkseSgibmdJZiIsbnVsbCE9PWUub3BUeXBlKX19ZnVuY3Rpb24gWEJlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwxNyksQSgxKSx2KCkpLDImbil7bGV0IGU9UygyKTtDKDEpLGplKCIgKEhvc3QgbmFtZTogIixlLnN0YWNrRnJhbWVzRm9yRGlzcGxheVswXS5ob3N0X25hbWUsIikgIil9fWZ1bmN0aW9uIFFCZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2Iiw3KSgxLCJzcGFuIikoMiwic3BhbiIsOCksRSgzLEdCZSw0LDIsImRpdiIsOSksRSg0LFlCZSw0LDIsImRpdiIsOSksdigpKCksXyg1LCJkaXYiKSxFKDYsWEJlLDIsMSwic3BhbiIsMTApLHYoKSgpKSwyJm4pe2xldCBlPVMoKTtDKDIpLHkoIm5nU3dpdGNoIixlLmNvZGVMb2NhdGlvblR5cGUpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixlLkNvZGVMb2NhdGlvblR5cGUuRVhFQ1VUSU9OKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsZS5Db2RlTG9jYXRpb25UeXBlLkdSQVBIX09QX0NSRUFUSU9OKSxDKDIpLHkoIm5nSWYiLG51bGwhPT1lLnN0YWNrRnJhbWVzRm9yRGlzcGxheSYmZS5zdGFja0ZyYW1lc0ZvckRpc3BsYXkubGVuZ3RoPjApfX1mdW5jdGlvbiBLQmUobix0KXsxJm4mJihfKDAsImRpdiIsMTgpLEEoMSwiIENsaWNrIGFuIGVhZ2VyIGV4ZWN1dGlvbiBvciBncmFwaCBvcCB0byBzaG93IGl0cyBvcmlnaW5hbCBzdGFjayB0cmFjZS4gIiksdigpKX1mdW5jdGlvbiBaQmUobix0KXsxJm4mJihfKDAsImRpdiIsMjgpLEEoMSwiIFx1MjkxMyAiKSx2KCkpfXZhciBKQmU9ZnVuY3Rpb24obix0KXtyZXR1cm5bbix0XX07ZnVuY3Rpb24gJEJlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwyMikoMSwiZGl2IiwyMyksQSgyKSx2KCksXygzLCJkaXYiLDI0KSxFKDQsWkJlLDIsMCwiZGl2IiwyNSksXyg1LCJkaXYiLDI2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1vZShlKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoMikub25Tb3VyY2VMaW5lQ2xpY2tlZC5lbWl0KG8pKX0pLEEoNiksdigpLF8oNywiZGl2IiwyNyksQSg4KSx2KCkoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKDIpO3koIm5nQ2xhc3MiLFFyKDYsSkJlLGUuYmVsb25nc1RvRm9jdXNlZEZpbGU/ImZvY3VzZWQtZmlsZSI6IiIsZS5mb2N1c2VkPyJmb2N1c2VkLXN0YWNrLWZyYW1lIjoiIikpLEMoMSksWmkoInRpdGxlIixlLmZpbGVfcGF0aCksQygxKSxqZSgiICIsZS5jb25jaXNlX2ZpbGVfcGF0aCwiICIpLEMoMikseSgibmdJZiIsaS5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSYmZS5mb2N1c2VkKSxDKDIpLGplKCIgTGluZSAiLGUubGluZW5vLCIgIiksQygyKSxqZSgiICIsZS5mdW5jdGlvbl9uYW1lLCIgIil9fWZ1bmN0aW9uIGVWZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwxOSwyMCksRSgyLCRCZSw5LDksImRpdiIsMjEpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygyKSx5KCJuZ0Zvck9mIixlLnN0YWNrRnJhbWVzRm9yRGlzcGxheSl9fWZ1bmN0aW9uIHRWZShuLHQpe312YXIgUXJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnN0YWNrRnJhbWVzRm9yRGlzcGxheT1udWxsLHRoaXMub25Tb3VyY2VMaW5lQ2xpY2tlZD1uZXcgRyx0aGlzLkNvZGVMb2NhdGlvblR5cGU9eHN9bmdBZnRlclZpZXdDaGVja2VkKCl7aWYodm9pZCAwPT09dGhpcy5zdGFja0ZyYW1lQXJyYXkpcmV0dXJuO2xldCBlPXRoaXMuc3RhY2tGcmFtZUFycmF5Lm5hdGl2ZUVsZW1lbnQsaT1lLnF1ZXJ5U2VsZWN0b3IoIi5mb2N1c2VkLXN0YWNrLWZyYW1lIik7aWYobnVsbCE9PWkpcmV0dXJuIHZvaWQgdGhpcy5zY3JvbGxUb0VsZW1lbnQoZSxpKTtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5zdGFjay1mcmFtZS1jb250YWluZXI6bGFzdC1jaGlsZCIpO251bGwhPT1yJiZ0aGlzLnNjcm9sbFRvRWxlbWVudChlLHIpfXNjcm9sbFRvRWxlbWVudChlLGkpe2Uuc2Nyb2xsVG9wPWkub2Zmc2V0VG9wfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJzdGFjay10cmFjZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChVQmUsNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5zdGFja0ZyYW1lQXJyYXk9ci5maXJzdCl9fSxpbnB1dHM6e2NvZGVMb2NhdGlvblR5cGU6ImNvZGVMb2NhdGlvblR5cGUiLG9wVHlwZToib3BUeXBlIixvcE5hbWU6Im9wTmFtZSIsZXhlY3V0aW9uSW5kZXg6ImV4ZWN1dGlvbkluZGV4IixzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZToic3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUiLHN0YWNrRnJhbWVzRm9yRGlzcGxheToic3RhY2tGcmFtZXNGb3JEaXNwbGF5In0sb3V0cHV0czp7b25Tb3VyY2VMaW5lQ2xpY2tlZDoib25Tb3VyY2VMaW5lQ2xpY2tlZCJ9LGRlY2xzOjEwLHZhcnM6NCxjb25zdHM6W1sxLCJzdGFjay10cmFjZS1jb250YWluZXIiXSxbMSwic3RhY2stdHJhY2UtaGVhZGVyIl0sWzEsInN0YWNrLXRyYWNlLXRpdGxlIl0sWyJjbGFzcyIsInN0YWNrLXRyYWNlLWF1eC1pbmZvIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vU3RhY2tUcmFjZSIsIiJdLFsiY2xhc3MiLCJzdGFjay1mcmFtZS1hcnJheSIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJsb2FkaW5nU2VjdGlvbiIsIiJdLFsxLCJzdGFjay10cmFjZS1hdXgtaW5mbyJdLFsxLCJjb2RlLWxvY2F0aW9uLW9yaWdpbiIsMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsInN0YWNrLXRyYWNlLWhvc3QtbmFtZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJlYWdlci1leGVjdXRpb24taW5kZXgiLDQsIm5nSWYiXSxbImNsYXNzIiwib3AtdHlwZSIsNCwibmdJZiJdLFsxLCJlYWdlci1leGVjdXRpb24taW5kZXgiXSxbMSwib3AtdHlwZSJdLFsiY2xhc3MiLCJvcC1uYW1lIiw0LCJuZ0lmIl0sWzEsIm9wLW5hbWUiXSxbMSwic3RhY2stdHJhY2UtaG9zdC1uYW1lIl0sWzEsInN0YWNrLXRyYWNlLWF1eC1pbmZvIiwibm8tc3RhY2stdHJhY2UiXSxbMSwic3RhY2stZnJhbWUtYXJyYXkiXSxbInN0YWNrRnJhbWVBcnJheSIsIiJdLFsiY2xhc3MiLCJzdGFjay1mcmFtZS1jb250YWluZXIiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJzdGFjay1mcmFtZS1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwic3RhY2stZnJhbWUtZmlsZS1wYXRoIiwzLCJ0aXRsZSJdLFsxLCJzdGFjay1mcmFtZS1saW5lbm8tZnVuY3Rpb24iXSxbImNsYXNzIiwic3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3IiLCJ0aXRsZSIsIlN0aWNraW5nIHRvIHRoZSBib3R0b21tb3N0IGZyYW1lIGluIHRoZSBjdXJyZW50IHNvdXJjZSBmaWxlIHdoZW4gbmF2aWdhdGluZyBleGVjdXRpb25zIGFuZCBncmFwaCBvcHMuIFRvIHJlbW92ZSB0aGlzIHN0aWNraW5nLCBjbGljayBhbnkgbm9uLWJvdHRvbW1vc3Qgc3RhY2sgZnJhbWUuIiw0LCJuZ0lmIl0sWzEsInN0YWNrLWZyYW1lLWxpbmVubyIsMywiY2xpY2siXSxbMSwic3RhY2stZnJhbWUtZnVuY3Rpb24iXSxbInRpdGxlIiwiU3RpY2tpbmcgdG8gdGhlIGJvdHRvbW1vc3QgZnJhbWUgaW4gdGhlIGN1cnJlbnQgc291cmNlIGZpbGUgd2hlbiBuYXZpZ2F0aW5nIGV4ZWN1dGlvbnMgYW5kIGdyYXBoIG9wcy4gVG8gcmVtb3ZlIHRoaXMgc3RpY2tpbmcsIGNsaWNrIGFueSBub24tYm90dG9tbW9zdCBzdGFjayBmcmFtZS4iLDEsInN0aWNrLXRvLWJvdHRvbW1vc3QtaW5kaWNhdG9yIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwic3BhbiIsMiksQSgzLCIgU3RhY2sgVHJhY2UgIiksdigpLEUoNCxRQmUsNyw0LCJkaXYiLDMpLEUoNSxLQmUsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LHF0KSx2KCksRSg3LGVWZSwzLDEsImRpdiIsNSksRSg4LHRWZSwwLDAsIm5nLXRlbXBsYXRlIixudWxsLDYscXQpLHYoKSksMiZlKXtsZXQgcj0kZSg2KSxvPSRlKDkpO0MoNCkseSgibmdJZiIsbnVsbCE9PWkuY29kZUxvY2F0aW9uVHlwZSkoIm5nSWZFbHNlIixyKSxDKDMpLHkoIm5nSWYiLG51bGwhPT1pLnN0YWNrRnJhbWVzRm9yRGlzcGxheSkoIm5nSWZFbHNlIixvKX19LGRlcGVuZGVuY2llczpbRm4sZG4sQmUsQ3IsVXJdLHN0eWxlczpbJy5mb2N1c2VkLWZpbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGR9LmZvY3VzZWQtc3RhY2stZnJhbWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTExLDAsLjMpfS5uby1zdGFjay10cmFjZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheX0ub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17d29yZC13cmFwOmFueXdoZXJlfS5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlY2VmZjE7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMHB4O2hlaWdodDoxNHB4O2xpbmUtaGVpZ2h0OjE0cHg7cGFkZGluZzoxcHggM3B4O3dpZHRoOm1heC1jb250ZW50fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiM0NTVhNjR9LnN0YWNrLWZyYW1lLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmF1dG87d2lkdGg6Y2FsYygxMDAlIC0gOHB4KX0uc3RhY2stZnJhbWUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYTBhMGEwfS5zdGFjay1mcmFtZS1maWxlLXBhdGhbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxODBweDt3aWR0aDoxODBweH0uc3RhY2stZnJhbWUtbGluZW5vLWZ1bmN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOnJpZ2h0O3doaXRlLXNwYWNlOm5vd3JhcH0uc3RhY2stZnJhbWUtZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21heC13aWR0aDoyMDBweDtwYWRkaW5nLWxlZnQ6MTBweDt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6bm9ybWFsO3dpZHRoOjIwMHB4O3dvcmQtd3JhcDphbnl3aGVyZX0uc3RhY2stZnJhbWUtbGluZW5vW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6ODBweDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt3aWR0aDo4MHB4fS5zdGFjay10cmFjZS1hdXgtaW5mb1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxNXB4O3BhZGRpbmctbGVmdDoyNHB4fS5zdGFjay10cmFjZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbjtmb250LXNpemU6MTBweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtoZWlnaHQ6MTAwJTttYXJnaW4tbGVmdDo4cHg7bWF4LWhlaWdodDozNjBweDtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmhpZGRlbjtwYWRkaW5nLWxlZnQ6OHB4O3dpZHRoOjEwMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGFjay10cmFjZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5zdGFjay10cmFjZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCA1cHggM3B4IC0zcHggI2NjYztwYWRkaW5nLWJvdHRvbTozcHh9LnN0YWNrLXRyYWNlLWhvc3QtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheX0uc3RhY2stdHJhY2UtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGR9LnN0aWNrLXRvLWJvdHRvbW1vc3QtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmctcmlnaHQ6M3B4fSddfSksbn0pKCksS3JlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuY29kZUxvY2F0aW9uVHlwZSQ9dGhpcy5zdG9yZS5waXBlKHZ0KEooUHcsaT0+bnVsbD09PWk/bnVsbDppLmNvZGVMb2NhdGlvblR5cGUpKSksdGhpcy5vcFR5cGUkPXRoaXMuc3RvcmUucGlwZSh2dChKKFB3LGk9Pm51bGw9PT1pP251bGw6aS5vcFR5cGUpKSksdGhpcy5vcE5hbWUkPXRoaXMuc3RvcmUucGlwZSh2dChKKFB3LGk9Pm51bGw9PT1pfHxpLmNvZGVMb2NhdGlvblR5cGUhPT14cy5HUkFQSF9PUF9DUkVBVElPTj9udWxsOmkub3BOYW1lKSkpLHRoaXMuZXhlY3V0aW9uSW5kZXgkPXRoaXMuc3RvcmUucGlwZSh2dChKKFB3LGk9Pm51bGw9PT1pfHxpLmNvZGVMb2NhdGlvblR5cGUhPT14cy5FWEVDVVRJT04/bnVsbDppLmV4ZWN1dGlvbkluZGV4KSkpLHRoaXMuc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUkPXRoaXMuc3RvcmUucGlwZSh2dChEcmUpKSx0aGlzLnN0YWNrRnJhbWVzRm9yRGlzcGxheSQ9dGhpcy5zdG9yZS5waXBlKHZ0KEooRXJlLERQLChpLHIpPT57aWYobnVsbD09PWkpcmV0dXJuIG51bGw7bGV0IG89W107Zm9yKGxldCBzIG9mIGkpe2xldHtob3N0X25hbWU6YSxmaWxlX3BhdGg6bCxsaW5lbm86YyxmdW5jdGlvbl9uYW1lOnV9PXMsZD1sLnNwbGl0KCIvIiksaD1udWxsIT09ciYmYT09PXIuaG9zdF9uYW1lJiZsPT09ci5maWxlX3BhdGg7by5wdXNoKHtob3N0X25hbWU6YSxmaWxlX3BhdGg6bCxjb25jaXNlX2ZpbGVfcGF0aDpkW2QubGVuZ3RoLTFdLGxpbmVubzpjLGZ1bmN0aW9uX25hbWU6dSxiZWxvbmdzVG9Gb2N1c2VkRmlsZTpoLGZvY3VzZWQ6aCYmYz09PXIubGluZW5vfSl9cmV0dXJuIG99KSkpfW9uU291cmNlTGluZUNsaWNrZWQoZSl7bGV0e2hvc3RfbmFtZTppLGZpbGVfcGF0aDpyLGxpbmVubzpvLGZ1bmN0aW9uX25hbWU6c309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKEp2KHtzdGFja0ZyYW1lOntob3N0X25hbWU6aSxmaWxlX3BhdGg6cixsaW5lbm86byxmdW5jdGlvbl9uYW1lOnN9fSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItc3RhY2stdHJhY2UiXV0sZGVjbHM6Nyx2YXJzOjE4LGNvbnN0czpbWzMsImNvZGVMb2NhdGlvblR5cGUiLCJvcFR5cGUiLCJvcE5hbWUiLCJleGVjdXRpb25JbmRleCIsInN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlIiwic3RhY2tGcmFtZXNGb3JEaXNwbGF5Iiwib25Tb3VyY2VMaW5lQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwic3RhY2stdHJhY2UtY29tcG9uZW50IiwwKSxQKCJvblNvdXJjZUxpbmVDbGlja2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNvdXJjZUxpbmVDbGlja2VkKG8pfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksQig0LCJhc3luYyIpLEIoNSwiYXN5bmMiKSxCKDYsImFzeW5jIiksdigpKSwyJmUmJnkoImNvZGVMb2NhdGlvblR5cGUiLFUoMSw2LGkuY29kZUxvY2F0aW9uVHlwZSQpKSgib3BUeXBlIixVKDIsOCxpLm9wVHlwZSQpKSgib3BOYW1lIixVKDMsMTAsaS5vcE5hbWUkKSkoImV4ZWN1dGlvbkluZGV4IixVKDQsMTIsaS5leGVjdXRpb25JbmRleCQpKSgic3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUiLFUoNSwxNCxpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlJCkpKCJzdGFja0ZyYW1lc0ZvckRpc3BsYXkiLFUoNiwxNixpLnN0YWNrRnJhbWVzRm9yRGlzcGxheSQpKX0sZGVwZW5kZW5jaWVzOltRcmUsR2VdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHJWZT1mdW5jdGlvbihuLHQpe3JldHVybnt0ZW5zb3JEZWJ1Z01vZGU6bixhcnJheTp0fX07ZnVuY3Rpb24gb1ZlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDEyKSgxLCJkaXYiLDEzKSxBKDIpLHYoKSxfKDMsImRpdiIsMTQpLE8oNCwiZGVidWctdGVuc29yLXZhbHVlIiwxNSksdigpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9UygzKTtDKDIpLGplKCJPdXRwdXQgc2xvdCAiLGksIjoiKSxDKDIpLHkoImRlYnVnVGVuc29yVmFsdWUiLHIucGFyc2VEZWJ1Z1RlbnNvclZhbHVlKFFyKDIsclZlLHIudGVuc29yRGVidWdNb2RlLGUpKSl9fWZ1bmN0aW9uIHNWZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwxMCksRSgxLG9WZSw1LDUsImRpdiIsMTEpLHYoKSksMiZuKXtsZXQgZT1TKDIpO0MoMSkseSgibmdGb3JPZiIsZS5kZWJ1Z1RlbnNvclZhbHVlcyl9fWZ1bmN0aW9uIGFWZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IikoMSwiZGl2IikoMiwiZGl2IiwzKSgzLCJzcGFuIiw0KSxBKDQsIiBPcDogIiksdigpLF8oNSwic3BhbiIsNSksQSg2KSx2KCkoKSxfKDcsImRpdiIsMykoOCwic3BhbiIsNCksQSg5LCIgIyBvZiBpbnB1dCB0ZW5zb3JzOiAiKSx2KCksXygxMCwic3BhbiIsNiksQSgxMSksdigpKCksXygxMiwiZGl2IiwzKSgxMywic3BhbiIsNCksQSgxNCwiICMgb2Ygb3V0cHV0IHRlbnNvcnM6ICIpLHYoKSxfKDE1LCJzcGFuIiw3KSxBKDE2KSx2KCksXygxNywic3BhbiIsOCksQSgxOCksdigpKCksRSgxOSxzVmUsMiwxLCJkaXYiLDkpLHYoKSgpKSwyJm4pe2xldCBlPVMoKTtDKDYpLGplKCIgIixlLmZvY3VzZWRFeGVjdXRpb25EYXRhLm9wX3R5cGUsIiAiKSxDKDUpLGplKCIgIixudWxsPT1lLmZvY3VzZWRFeGVjdXRpb25EYXRhLmlucHV0X3RlbnNvcl9pZHM/MDplLmZvY3VzZWRFeGVjdXRpb25EYXRhLmlucHV0X3RlbnNvcl9pZHMubGVuZ3RoLCIgIiksQyg1KSxqZSgiICIsbnVsbD09ZS5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vdXRwdXRfdGVuc29yX2lkcz8wOmUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEub3V0cHV0X3RlbnNvcl9pZHMubGVuZ3RoLCIgIiksQygyKSxqZSgiIChkZWJ1ZyBtb2RlOiAiLGUuVGVuc29yRGVidWdNb2RlW2UudGVuc29yRGVidWdNb2RlXSwiKSAiKSxDKDEpLHkoIm5nSWYiLGUuaGFzRGVidWdUZW5zb3JWYWx1ZXMpfX1mdW5jdGlvbiBsVmUobix0KXt9dmFyIFpyZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy50ZW5zb3JEZWJ1Z01vZGU9YXMuVU5TUEVDSUZJRUQsdGhpcy5oYXNEZWJ1Z1RlbnNvclZhbHVlcz0hMSx0aGlzLmRlYnVnVGVuc29yVmFsdWVzPW51bGwsdGhpcy5kZWJ1Z1RlbnNvckR0eXBlcz1udWxsLHRoaXMuVGVuc29yRGVidWdNb2RlPWFzLHRoaXMucGFyc2VEZWJ1Z1RlbnNvclZhbHVlPUFQfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJleGVjdXRpb24tZGF0YS1jb21wb25lbnQiXV0saW5wdXRzOntmb2N1c2VkRXhlY3V0aW9uSW5kZXg6ImZvY3VzZWRFeGVjdXRpb25JbmRleCIsZm9jdXNlZEV4ZWN1dGlvbkRhdGE6ImZvY3VzZWRFeGVjdXRpb25EYXRhIix0ZW5zb3JEZWJ1Z01vZGU6InRlbnNvckRlYnVnTW9kZSIsaGFzRGVidWdUZW5zb3JWYWx1ZXM6Imhhc0RlYnVnVGVuc29yVmFsdWVzIixkZWJ1Z1RlbnNvclZhbHVlczoiZGVidWdUZW5zb3JWYWx1ZXMiLGRlYnVnVGVuc29yRHR5cGVzOiJkZWJ1Z1RlbnNvckR0eXBlcyJ9LGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsImZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJsb2FkaW5nX3NlY3Rpb24iLCIiXSxbMSwiZXhlY3V0aW9uLWRhdGEtZmllbGQiXSxbMSwiZXhlY3V0aW9uLWRhdGEta2V5Il0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIiwib3AtdHlwZSJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSIsImlucHV0LXRlbnNvcnMiXSxbMSwiZXhlY3V0aW9uLWRhdGEtdmFsdWUiLCJvdXRwdXQtdGVuc29ycyJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSJdLFsiY2xhc3MiLCJvdXRwdXQtc2xvdHMiLDQsIm5nSWYiXSxbMSwib3V0cHV0LXNsb3RzIl0sWyJjbGFzcyIsIm91dHB1dC1zbG90LWNvbnRhaW5lciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm91dHB1dC1zbG90LWNvbnRhaW5lciJdLFsxLCJvdXRwdXQtc2xvdC1udW1iZXIiXSxbMSwib3V0cHV0LXNsb3QtZGVidWctdGVuc29yLXZhbHVlIl0sWzMsImRlYnVnVGVuc29yVmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihfKDAsImRpdiIsMCkoMSwiZGl2IikoMiwic3BhbiIpLEEoMyksdigpKCksRSg0LGFWZSwyMCw1LCJkaXYiLDEpLEUoNSxsVmUsMCwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLHF0KSx2KCkpLDImZSl7bGV0IHI9JGUoNik7QygzKSxqZSgiIFB5dGhvbiBFeGVjdXRpb24gIyIsaS5mb2N1c2VkRXhlY3V0aW9uSW5kZXgsIiAiKSxDKDEpLHkoIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRFeGVjdXRpb25EYXRhKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltkbixCZSxJUF0sc3R5bGVzOlsnLmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICMwMDA7dGV4dC1hbGlnbjpsZWZ0fS5kZWJ1Zy10ZW5zb3ItdmFsdWVzLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmV4ZWN1dGlvbi1kYXRhLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LmV4ZWN1dGlvbi1kYXRhLWtleVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjEyMHB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MTIwcHh9LmV4ZWN1dGlvbi1kYXRhLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDoxMHB4fS5mb2N1cy1leGVjdXRpb24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmNjODA7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjEycHg7aGVpZ2h0OjEyMHB4O3BhZGRpbmc6NXB4O3dpZHRoOjM2MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5mb2N1cy1leGVjdXRpb24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2U2NTEwMH0ub3V0cHV0LXNsb3RzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NjBweDtvdmVyZmxvdy14OmF1dG87b3ZlcmZsb3cteTphdXRvfS5vdXRwdXQtc2xvdC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWI7bWFyZ2luLXRvcDo1cHg7cGFkZGluZzoycHggMDt2ZXJ0aWNhbC1hbGlnbjp0b3B9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vdXRwdXQtc2xvdC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9Lm91dHB1dC1zbG90LW51bWJlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jaztmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZX0ub3V0cHV0LXNsb3QtZGVidWctdGVuc29yLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO21hcmdpbjozcHggMCAzcHggMzBweH0ub3V0cHV0LXRlbnNvcnNbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6NXB4fSddfSksbn0pKCksSnJlPSJVbmtub3duIGR0eXBlIiwkcmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5mb2N1c2VkRXhlY3V0aW9uRGF0YSQ9dGhpcy5zdG9yZS5waXBlKHZ0KHBnKSksdGhpcy50ZW5zb3JEZWJ1Z01vZGUkPXRoaXMuc3RvcmUucGlwZSh2dChKKHBnLGk9Pm51bGw9PT1pP2FzLlVOU1BFQ0lGSUVEOmkudGVuc29yX2RlYnVnX21vZGUpKSksdGhpcy5oYXNEZWJ1Z1RlbnNvclZhbHVlcyQ9dGhpcy5zdG9yZS5waXBlKHZ0KEoocGcsaT0+e2lmKG51bGw9PT1pfHxudWxsPT09aS5kZWJ1Z190ZW5zb3JfdmFsdWVzKXJldHVybiExO2ZvcihsZXQgciBvZiBpLmRlYnVnX3RlbnNvcl92YWx1ZXMpaWYobnVsbCE9PXImJnIubGVuZ3RoPjApcmV0dXJuITA7cmV0dXJuITF9KSkpLHRoaXMuZGVidWdUZW5zb3JWYWx1ZXMkPXRoaXMuc3RvcmUucGlwZSh2dChKKHBnLGk9Pm51bGw9PT1pP251bGw6aS5kZWJ1Z190ZW5zb3JfdmFsdWVzKSkpLHRoaXMuZGVidWdUZW5zb3JEdHlwZXMkPXRoaXMuc3RvcmUucGlwZSh2dChKKHBnLGk9PntpZihudWxsPT09aXx8bnVsbD09PWkuZGVidWdfdGVuc29yX3ZhbHVlc3x8aS50ZW5zb3JfZGVidWdfbW9kZSE9PWFzLkZVTExfSEVBTFRIJiZpLnRlbnNvcl9kZWJ1Z19tb2RlIT09YXMuU0hBUEUpcmV0dXJuIG51bGw7bGV0IHI9W107Zm9yKGxldCBvIG9mIGkuZGVidWdfdGVuc29yX3ZhbHVlcylpZihudWxsPT09bylyLnB1c2goSnJlKTtlbHNle2xldCBzPVN0cmluZyhpLnRlbnNvcl9kZWJ1Z19tb2RlPT09YXMuRlVMTF9IRUFMVEg/b1syXTpvWzFdKTtyLnB1c2goUndbc118fEpyZSl9cmV0dXJuIHJ9KSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItZXhlY3V0aW9uLWRhdGEiXV0saW5wdXRzOntmb2N1c2VkRXhlY3V0aW9uSW5kZXg6ImZvY3VzZWRFeGVjdXRpb25JbmRleCJ9LGRlY2xzOjYsdmFyczoxNixjb25zdHM6W1szLCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLCJmb2N1c2VkRXhlY3V0aW9uRGF0YSIsInRlbnNvckRlYnVnTW9kZSIsImhhc0RlYnVnVGVuc29yVmFsdWVzIiwiZGVidWdUZW5zb3JWYWx1ZXMiLCJkZWJ1Z1RlbnNvckR0eXBlcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE8oMCwiZXhlY3V0aW9uLWRhdGEtY29tcG9uZW50IiwwKSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLEIoMywiYXN5bmMiKSxCKDQsImFzeW5jIiksQig1LCJhc3luYyIpKSwyJmUmJnkoImZvY3VzZWRFeGVjdXRpb25JbmRleCIsaS5mb2N1c2VkRXhlY3V0aW9uSW5kZXgpKCJmb2N1c2VkRXhlY3V0aW9uRGF0YSIsVSgxLDYsaS5mb2N1c2VkRXhlY3V0aW9uRGF0YSQpKSgidGVuc29yRGVidWdNb2RlIixVKDIsOCxpLnRlbnNvckRlYnVnTW9kZSQpKSgiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLFUoMywxMCxpLmhhc0RlYnVnVGVuc29yVmFsdWVzJCkpKCJkZWJ1Z1RlbnNvclZhbHVlcyIsVSg0LDEyLGkuZGVidWdUZW5zb3JWYWx1ZXMkKSkoImRlYnVnVGVuc29yRHR5cGVzIixVKDUsMTQsaS5kZWJ1Z1RlbnNvckR0eXBlcyQpKX0sZGVwZW5kZW5jaWVzOltacmUsR2VdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGhWZT1bInNsaWRlcldyYXBwZXIiXSxjYz1sYSh7cGFzc2l2ZTohMX0pLHZWZT17cHJvdmlkZTpObyx1c2VFeGlzdGluZzpKbigoKT0+dXApLG11bHRpOiEwfSx5VmU9b2Moa28oc28oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pLCJhY2NlbnQiKSksdXA9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHlWZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKGUpLHRoaXMuX2ZvY3VzTW9uaXRvcj1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXIsdGhpcy5fZGlyPW8sdGhpcy5fbmdab25lPWEsdGhpcy5fYW5pbWF0aW9uTW9kZT1jLHRoaXMuX2ludmVydD0hMSx0aGlzLl9tYXg9MTAwLHRoaXMuX21pbj0wLHRoaXMuX3N0ZXA9MSx0aGlzLl90aHVtYkxhYmVsPSExLHRoaXMuX3RpY2tJbnRlcnZhbD0wLHRoaXMuX3ZhbHVlPW51bGwsdGhpcy5fdmVydGljYWw9ITEsdGhpcy5jaGFuZ2U9bmV3IEcsdGhpcy5pbnB1dD1uZXcgRyx0aGlzLnZhbHVlQ2hhbmdlPW5ldyBHLHRoaXMub25Ub3VjaGVkPSgpPT57fSx0aGlzLl9wZXJjZW50PTAsdGhpcy5faXNTbGlkaW5nPW51bGwsdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5fdGlja0ludGVydmFsUGVyY2VudD0wLHRoaXMuX3NsaWRlckRpbWVuc2lvbnM9bnVsbCx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPSgpPT57fSx0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249U24uRU1QVFksdGhpcy5fcG9pbnRlckRvd249dT0+e3RoaXMuZGlzYWJsZWR8fHRoaXMuX2lzU2xpZGluZ3x8IU93KHUpJiYwIT09dS5idXR0b258fHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl90b3VjaElkPU93KHUpP2Z1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTA7ZTxuLnRvdWNoZXMubGVuZ3RoO2UrKyl7bGV0IGk9bi50b3VjaGVzW2VdLnRhcmdldDtpZih0PT09aXx8dC5jb250YWlucyhpKSlyZXR1cm4gbi50b3VjaGVzW2VdLmlkZW50aWZpZXJ9fSh1LHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk6dm9pZCAwO2xldCBkPXRvZSh1LHRoaXMuX3RvdWNoSWQpO2lmKGQpe2xldCBwPXRoaXMudmFsdWU7dGhpcy5faXNTbGlkaW5nPSJwb2ludGVyIix0aGlzLl9sYXN0UG9pbnRlckV2ZW50PXUsdGhpcy5fZm9jdXNIb3N0RWxlbWVudCgpLHRoaXMuX29uTW91c2VlbnRlcigpLHRoaXMuX2JpbmRHbG9iYWxFdmVudHModSksdGhpcy5fZm9jdXNIb3N0RWxlbWVudCgpLHRoaXMuX3VwZGF0ZVZhbHVlRnJvbVBvc2l0aW9uKGQpLHRoaXMuX3ZhbHVlT25TbGlkZVN0YXJ0PXAsdS5jYW5jZWxhYmxlJiZ1LnByZXZlbnREZWZhdWx0KCkscCE9dGhpcy52YWx1ZSYmdGhpcy5fZW1pdElucHV0RXZlbnQoKX19KX0sdGhpcy5fcG9pbnRlck1vdmU9dT0+e2lmKCJwb2ludGVyIj09PXRoaXMuX2lzU2xpZGluZyl7bGV0IGQ9dG9lKHUsdGhpcy5fdG91Y2hJZCk7aWYoZCl7dS5jYW5jZWxhYmxlJiZ1LnByZXZlbnREZWZhdWx0KCk7bGV0IHA9dGhpcy52YWx1ZTt0aGlzLl9sYXN0UG9pbnRlckV2ZW50PXUsdGhpcy5fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24oZCkscCE9dGhpcy52YWx1ZSYmdGhpcy5fZW1pdElucHV0RXZlbnQoKX19fSx0aGlzLl9wb2ludGVyVXA9dT0+eyJwb2ludGVyIj09PXRoaXMuX2lzU2xpZGluZyYmKCFPdyh1KXx8Im51bWJlciIhPXR5cGVvZiB0aGlzLl90b3VjaElkfHx2VSh1LmNoYW5nZWRUb3VjaGVzLHRoaXMuX3RvdWNoSWQpKSYmKHUuY2FuY2VsYWJsZSYmdS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3JlbW92ZUdsb2JhbEV2ZW50cygpLHRoaXMuX2lzU2xpZGluZz1udWxsLHRoaXMuX3RvdWNoSWQ9dm9pZCAwLHRoaXMuX3ZhbHVlT25TbGlkZVN0YXJ0IT10aGlzLnZhbHVlJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksdGhpcy5fdmFsdWVPblNsaWRlU3RhcnQ9dGhpcy5fbGFzdFBvaW50ZXJFdmVudD1udWxsKX0sdGhpcy5fd2luZG93Qmx1cj0oKT0+e3RoaXMuX2xhc3RQb2ludGVyRXZlbnQmJnRoaXMuX3BvaW50ZXJVcCh0aGlzLl9sYXN0UG9pbnRlckV2ZW50KX0sdGhpcy5fZG9jdW1lbnQ9bCx0aGlzLnRhYkluZGV4PXBhcnNlSW50KHMpfHwwLGEucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgdT1lLm5hdGl2ZUVsZW1lbnQ7dS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLGNjKSx1LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLGNjKX0pfWdldCBpbnZlcnQoKXtyZXR1cm4gdGhpcy5faW52ZXJ0fXNldCBpbnZlcnQoZSl7dGhpcy5faW52ZXJ0PVJ0KGUpfWdldCBtYXgoKXtyZXR1cm4gdGhpcy5fbWF4fXNldCBtYXgoZSl7dGhpcy5fbWF4PUJpKGUsdGhpcy5fbWF4KSx0aGlzLl9wZXJjZW50PXRoaXMuX2NhbGN1bGF0ZVBlcmNlbnRhZ2UodGhpcy5fdmFsdWUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBtaW4oKXtyZXR1cm4gdGhpcy5fbWlufXNldCBtaW4oZSl7dGhpcy5fbWluPUJpKGUsdGhpcy5fbWluKSx0aGlzLl9wZXJjZW50PXRoaXMuX2NhbGN1bGF0ZVBlcmNlbnRhZ2UodGhpcy5fdmFsdWUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBzdGVwKCl7cmV0dXJuIHRoaXMuX3N0ZXB9c2V0IHN0ZXAoZSl7dGhpcy5fc3RlcD1CaShlLHRoaXMuX3N0ZXApLHRoaXMuX3N0ZXAlMSE9MCYmKHRoaXMuX3JvdW5kVG9EZWNpbWFsPXRoaXMuX3N0ZXAudG9TdHJpbmcoKS5zcGxpdCgiLiIpLnBvcCgpLmxlbmd0aCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHRodW1iTGFiZWwoKXtyZXR1cm4gdGhpcy5fdGh1bWJMYWJlbH1zZXQgdGh1bWJMYWJlbChlKXt0aGlzLl90aHVtYkxhYmVsPVJ0KGUpfWdldCB0aWNrSW50ZXJ2YWwoKXtyZXR1cm4gdGhpcy5fdGlja0ludGVydmFsfXNldCB0aWNrSW50ZXJ2YWwoZSl7dGhpcy5fdGlja0ludGVydmFsPSJhdXRvIj09PWU/ImF1dG8iOiJudW1iZXIiPT10eXBlb2YgZXx8InN0cmluZyI9PXR5cGVvZiBlP0JpKGUsdGhpcy5fdGlja0ludGVydmFsKTowfWdldCB2YWx1ZSgpe3JldHVybiBudWxsPT09dGhpcy5fdmFsdWUmJih0aGlzLnZhbHVlPXRoaXMuX21pbiksdGhpcy5fdmFsdWV9c2V0IHZhbHVlKGUpe2lmKGUhPT10aGlzLl92YWx1ZSl7bGV0IGk9QmkoZSwwKTt0aGlzLl9yb3VuZFRvRGVjaW1hbCYmaSE9PXRoaXMubWluJiZpIT09dGhpcy5tYXgmJihpPXBhcnNlRmxvYXQoaS50b0ZpeGVkKHRoaXMuX3JvdW5kVG9EZWNpbWFsKSkpLHRoaXMuX3ZhbHVlPWksdGhpcy5fcGVyY2VudD10aGlzLl9jYWxjdWxhdGVQZXJjZW50YWdlKHRoaXMuX3ZhbHVlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX19Z2V0IHZlcnRpY2FsKCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2FsfXNldCB2ZXJ0aWNhbChlKXt0aGlzLl92ZXJ0aWNhbD1SdChlKX1nZXQgZGlzcGxheVZhbHVlKCl7cmV0dXJuIHRoaXMuZGlzcGxheVdpdGg/dGhpcy5kaXNwbGF5V2l0aCh0aGlzLnZhbHVlKTp0aGlzLl9yb3VuZFRvRGVjaW1hbCYmdGhpcy52YWx1ZSYmdGhpcy52YWx1ZSUxIT0wP3RoaXMudmFsdWUudG9GaXhlZCh0aGlzLl9yb3VuZFRvRGVjaW1hbCk6dGhpcy52YWx1ZXx8MH1mb2N1cyhlKXt0aGlzLl9mb2N1c0hvc3RFbGVtZW50KGUpfWJsdXIoKXt0aGlzLl9ibHVySG9zdEVsZW1lbnQoKX1nZXQgcGVyY2VudCgpe3JldHVybiB0aGlzLl9jbGFtcCh0aGlzLl9wZXJjZW50KX1fc2hvdWxkSW52ZXJ0QXhpcygpe3JldHVybiB0aGlzLnZlcnRpY2FsPyF0aGlzLmludmVydDp0aGlzLmludmVydH1faXNNaW5WYWx1ZSgpe3JldHVybiAwPT09dGhpcy5wZXJjZW50fV9nZXRUaHVtYkdhcCgpe3JldHVybiB0aGlzLmRpc2FibGVkPzc6dGhpcy5faXNNaW5WYWx1ZSgpJiYhdGhpcy50aHVtYkxhYmVsP3RoaXMuX2lzQWN0aXZlPzEwOjc6MH1fZ2V0VHJhY2tCYWNrZ3JvdW5kU3R5bGVzKCl7bGV0IGk9dGhpcy52ZXJ0aWNhbD9gMSwgJHsxLXRoaXMucGVyY2VudH0sIDFgOjEtdGhpcy5wZXJjZW50KyIsIDEsIDEiO3JldHVybnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSR7dGhpcy52ZXJ0aWNhbD8iWSI6IlgifSgke3RoaXMuX3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCk/Ii0iOiIifSR7dGhpcy5fZ2V0VGh1bWJHYXAoKX1weCkgc2NhbGUzZCgke2l9KWB9fV9nZXRUcmFja0ZpbGxTdHlsZXMoKXtsZXQgZT10aGlzLnBlcmNlbnQscj10aGlzLnZlcnRpY2FsP2AxLCAke2V9LCAxYDpgJHtlfSwgMSwgMWA7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKT8iIjoiLSJ9JHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4KSBzY2FsZTNkKCR7cn0pYCxkaXNwbGF5OjA9PT1lPyJub25lIjoiIn19X2dldFRpY2tzQ29udGFpbmVyU3R5bGVzKCl7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy52ZXJ0aWNhbHx8InJ0bCIhPXRoaXMuX2dldERpcmVjdGlvbigpPyItIjoiIn0ke3RoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQvMioxMDB9JSlgfX1fZ2V0VGlja3NTdHlsZXMoKXtsZXQgZT0xMDAqdGhpcy5fdGlja0ludGVydmFsUGVyY2VudCxhPXtiYWNrZ3JvdW5kU2l6ZTp0aGlzLnZlcnRpY2FsP2AycHggJHtlfSVgOmAke2V9JSAycHhgLHRyYW5zZm9ybTpgdHJhbnNsYXRlWigwKSB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/IiI6Ii0ifSR7ZS8yfSUpJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/IiI6IiByb3RhdGUoMTgwZGVnKSJ9YH07aWYodGhpcy5faXNNaW5WYWx1ZSgpJiZ0aGlzLl9nZXRUaHVtYkdhcCgpKXtsZXQgYyxsPXRoaXMuX3Nob3VsZEludmVydEF4aXMoKTtjPXRoaXMudmVydGljYWw/bD8iQm90dG9tIjoiVG9wIjpsPyJSaWdodCI6IkxlZnQiLGFbYHBhZGRpbmcke2N9YF09YCR7dGhpcy5fZ2V0VGh1bWJHYXAoKX1weGB9cmV0dXJuIGF9X2dldFRodW1iQ29udGFpbmVyU3R5bGVzKCl7bGV0IGU9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO3JldHVybnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSR7dGhpcy52ZXJ0aWNhbD8iWSI6IlgifSgtJHsxMDAqKCgicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCl8fHRoaXMudmVydGljYWw/ZTohZSk/dGhpcy5wZXJjZW50OjEtdGhpcy5wZXJjZW50KX0lKWB9fV9zaG91bGRJbnZlcnRNb3VzZUNvb3Jkcygpe2xldCBlPXRoaXMuX3Nob3VsZEludmVydEF4aXMoKTtyZXR1cm4icnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCl8fHRoaXMudmVydGljYWw/ZTohZX1fZ2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PXRoaXMuX2Rpci52YWx1ZT8icnRsIjoibHRyIn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCEwKS5zdWJzY3JpYmUoZT0+e3RoaXMuX2lzQWN0aXZlPSEhZSYmImtleWJvYXJkIiE9PWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfSksdGhpcy5fZGlyJiYodGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uPXRoaXMuX2Rpci5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLGNjKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLGNjKSx0aGlzLl9sYXN0UG9pbnRlckV2ZW50PW51bGwsdGhpcy5fcmVtb3ZlR2xvYmFsRXZlbnRzKCksdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfV9vbk1vdXNlZW50ZXIoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5fc2xpZGVyRGltZW5zaW9ucz10aGlzLl9nZXRTbGlkZXJEaW1lbnNpb25zKCksdGhpcy5fdXBkYXRlVGlja0ludGVydmFsUGVyY2VudCgpKX1fb25Gb2N1cygpe3RoaXMuX3NsaWRlckRpbWVuc2lvbnM9dGhpcy5fZ2V0U2xpZGVyRGltZW5zaW9ucygpLHRoaXMuX3VwZGF0ZVRpY2tJbnRlcnZhbFBlcmNlbnQoKX1fb25CbHVyKCl7dGhpcy5vblRvdWNoZWQoKX1fb25LZXlkb3duKGUpe2lmKHRoaXMuZGlzYWJsZWR8fGtyKGUpfHx0aGlzLl9pc1NsaWRpbmcmJiJrZXlib2FyZCIhPT10aGlzLl9pc1NsaWRpbmcpcmV0dXJuO2xldCBpPXRoaXMudmFsdWU7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSAzMzp0aGlzLl9pbmNyZW1lbnQoMTApO2JyZWFrO2Nhc2UgMzQ6dGhpcy5faW5jcmVtZW50KC0xMCk7YnJlYWs7Y2FzZSAzNTp0aGlzLnZhbHVlPXRoaXMubWF4O2JyZWFrO2Nhc2UgMzY6dGhpcy52YWx1ZT10aGlzLm1pbjticmVhaztjYXNlIDM3OnRoaXMuX2luY3JlbWVudCgicnRsIj09dGhpcy5fZ2V0RGlyZWN0aW9uKCk/MTotMSk7YnJlYWs7Y2FzZSAzODp0aGlzLl9pbmNyZW1lbnQoMSk7YnJlYWs7Y2FzZSAzOTp0aGlzLl9pbmNyZW1lbnQoInJ0bCI9PXRoaXMuX2dldERpcmVjdGlvbigpPy0xOjEpO2JyZWFrO2Nhc2UgNDA6dGhpcy5faW5jcmVtZW50KC0xKTticmVhaztkZWZhdWx0OnJldHVybn1pIT10aGlzLnZhbHVlJiYodGhpcy5fZW1pdElucHV0RXZlbnQoKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSksdGhpcy5faXNTbGlkaW5nPSJrZXlib2FyZCIsZS5wcmV2ZW50RGVmYXVsdCgpfV9vbktleXVwKCl7ImtleWJvYXJkIj09PXRoaXMuX2lzU2xpZGluZyYmKHRoaXMuX2lzU2xpZGluZz1udWxsKX1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X2JpbmRHbG9iYWxFdmVudHMoZSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQscj1PdyhlKSxzPXI/InRvdWNoZW5kIjoibW91c2V1cCI7aS5hZGRFdmVudExpc3RlbmVyKHI/InRvdWNobW92ZSI6Im1vdXNlbW92ZSIsdGhpcy5fcG9pbnRlck1vdmUsY2MpLGkuYWRkRXZlbnRMaXN0ZW5lcihzLHRoaXMuX3BvaW50ZXJVcCxjYyksciYmaS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGNhbmNlbCIsdGhpcy5fcG9pbnRlclVwLGNjKTtsZXQgYT10aGlzLl9nZXRXaW5kb3coKTt0eXBlb2YgYTwidSImJmEmJmEuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fd2luZG93Qmx1cil9X3JlbW92ZUdsb2JhbEV2ZW50cygpe2xldCBlPXRoaXMuX2RvY3VtZW50O2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9wb2ludGVyTW92ZSxjYyksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9wb2ludGVyVXAsY2MpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9wb2ludGVyTW92ZSxjYyksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fcG9pbnRlclVwLGNjKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoY2FuY2VsIix0aGlzLl9wb2ludGVyVXAsY2MpO2xldCBpPXRoaXMuX2dldFdpbmRvdygpO3R5cGVvZiBpPCJ1IiYmaSYmaS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl93aW5kb3dCbHVyKX1faW5jcmVtZW50KGUpe2xldCBpPXRoaXMuX2NsYW1wKHRoaXMudmFsdWV8fDAsdGhpcy5taW4sdGhpcy5tYXgpO3RoaXMudmFsdWU9dGhpcy5fY2xhbXAoaSt0aGlzLnN0ZXAqZSx0aGlzLm1pbix0aGlzLm1heCl9X3VwZGF0ZVZhbHVlRnJvbVBvc2l0aW9uKGUpe2lmKCF0aGlzLl9zbGlkZXJEaW1lbnNpb25zKXJldHVybjtsZXQgcz10aGlzLl9jbGFtcCgoKHRoaXMudmVydGljYWw/ZS55OmUueCktKHRoaXMudmVydGljYWw/dGhpcy5fc2xpZGVyRGltZW5zaW9ucy50b3A6dGhpcy5fc2xpZGVyRGltZW5zaW9ucy5sZWZ0KSkvKHRoaXMudmVydGljYWw/dGhpcy5fc2xpZGVyRGltZW5zaW9ucy5oZWlnaHQ6dGhpcy5fc2xpZGVyRGltZW5zaW9ucy53aWR0aCkpO2lmKHRoaXMuX3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCkmJihzPTEtcyksMD09PXMpdGhpcy52YWx1ZT10aGlzLm1pbjtlbHNlIGlmKDE9PT1zKXRoaXMudmFsdWU9dGhpcy5tYXg7ZWxzZXtsZXQgYT10aGlzLl9jYWxjdWxhdGVWYWx1ZShzKSxsPU1hdGgucm91bmQoKGEtdGhpcy5taW4pL3RoaXMuc3RlcCkqdGhpcy5zdGVwK3RoaXMubWluO3RoaXMudmFsdWU9dGhpcy5fY2xhbXAobCx0aGlzLm1pbix0aGlzLm1heCl9fV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMudmFsdWUpLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KCkpfV9lbWl0SW5wdXRFdmVudCgpe3RoaXMuaW5wdXQuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCgpKX1fdXBkYXRlVGlja0ludGVydmFsUGVyY2VudCgpe2lmKCF0aGlzLnRpY2tJbnRlcnZhbHx8IXRoaXMuX3NsaWRlckRpbWVuc2lvbnMpcmV0dXJuO2xldCBlO2lmKCJhdXRvIj09dGhpcy50aWNrSW50ZXJ2YWwpe2xldCBpPXRoaXMudmVydGljYWw/dGhpcy5fc2xpZGVyRGltZW5zaW9ucy5oZWlnaHQ6dGhpcy5fc2xpZGVyRGltZW5zaW9ucy53aWR0aDtlPU1hdGguY2VpbCgzMC8oaSp0aGlzLnN0ZXAvKHRoaXMubWF4LXRoaXMubWluKSkpKnRoaXMuc3RlcC9pfWVsc2UgZT10aGlzLnRpY2tJbnRlcnZhbCp0aGlzLnN0ZXAvKHRoaXMubWF4LXRoaXMubWluKTt0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50PWVvZShlKT9lOjB9X2NyZWF0ZUNoYW5nZUV2ZW50KGU9dGhpcy52YWx1ZSl7bGV0IGk9bmV3IGNsYXNze307cmV0dXJuIGkuc291cmNlPXRoaXMsaS52YWx1ZT1lLGl9X2NhbGN1bGF0ZVBlcmNlbnRhZ2UoZSl7bGV0IGk9KChlfHwwKS10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKTtyZXR1cm4gZW9lKGkpP2k6MH1fY2FsY3VsYXRlVmFsdWUoZSl7cmV0dXJuIHRoaXMubWluK2UqKHRoaXMubWF4LXRoaXMubWluKX1fY2xhbXAoZSxpPTAscj0xKXtyZXR1cm4gTWF0aC5tYXgoaSxNYXRoLm1pbihlLHIpKX1fZ2V0U2xpZGVyRGltZW5zaW9ucygpe3JldHVybiB0aGlzLl9zbGlkZXJXcmFwcGVyP3RoaXMuX3NsaWRlcldyYXBwZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTpudWxsfV9mb2N1c0hvc3RFbGVtZW50KGUpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyhlKX1fYmx1ckhvc3RFbGVtZW50KCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmJsdXIoKX13cml0ZVZhbHVlKGUpe3RoaXMudmFsdWU9ZX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKEZyKSxNKG5uKSxNKCRpLDgpLHZvKCJ0YWJpbmRleCIpLE0oX3QpLE0oSHQpLE0oUGksOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1zbGlkZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChoVmUsNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5fc2xpZGVyV3JhcHBlcj1yLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJzbGlkZXIiLDEsIm1hdC1zbGlkZXIiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MjksaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25Gb2N1cygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQmx1cigpfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbktleWRvd24obyl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uS2V5dXAoKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLl9vbk1vdXNlZW50ZXIoKX0pKCJzZWxlY3RzdGFydCIsZnVuY3Rpb24obyl7cmV0dXJuIG8ucHJldmVudERlZmF1bHQoKX0pLDImZSYmKF9zKCJ0YWJJbmRleCIsaS50YWJJbmRleCksemUoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJhcmlhLXZhbHVlbWF4IixpLm1heCkoImFyaWEtdmFsdWVtaW4iLGkubWluKSgiYXJpYS12YWx1ZW5vdyIsaS52YWx1ZSkoImFyaWEtdmFsdWV0ZXh0IixudWxsPT1pLnZhbHVlVGV4dD9pLmRpc3BsYXlWYWx1ZTppLnZhbHVlVGV4dCkoImFyaWEtb3JpZW50YXRpb24iLGkudmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIpLGV0KCJtYXQtc2xpZGVyLWRpc2FibGVkIixpLmRpc2FibGVkKSgibWF0LXNsaWRlci1oYXMtdGlja3MiLGkudGlja0ludGVydmFsKSgibWF0LXNsaWRlci1ob3Jpem9udGFsIiwhaS52ZXJ0aWNhbCkoIm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCIsaS5fc2hvdWxkSW52ZXJ0QXhpcygpKSgibWF0LXNsaWRlci1pbnZlcnQtbW91c2UtY29vcmRzIixpLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpKSgibWF0LXNsaWRlci1zbGlkaW5nIixpLl9pc1NsaWRpbmcpKCJtYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmciLGkudGh1bWJMYWJlbCkoIm1hdC1zbGlkZXItdmVydGljYWwiLGkudmVydGljYWwpKCJtYXQtc2xpZGVyLW1pbi12YWx1ZSIsaS5faXNNaW5WYWx1ZSgpKSgibWF0LXNsaWRlci1oaWRlLWxhc3QtdGljayIsaS5kaXNhYmxlZHx8aS5faXNNaW5WYWx1ZSgpJiZpLl9nZXRUaHVtYkdhcCgpJiZpLl9zaG91bGRJbnZlcnRBeGlzKCkpKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGNvbG9yOiJjb2xvciIsdGFiSW5kZXg6InRhYkluZGV4IixpbnZlcnQ6ImludmVydCIsbWF4OiJtYXgiLG1pbjoibWluIixzdGVwOiJzdGVwIix0aHVtYkxhYmVsOiJ0aHVtYkxhYmVsIix0aWNrSW50ZXJ2YWw6InRpY2tJbnRlcnZhbCIsdmFsdWU6InZhbHVlIixkaXNwbGF5V2l0aDoiZGlzcGxheVdpdGgiLHZhbHVlVGV4dDoidmFsdWVUZXh0Iix2ZXJ0aWNhbDoidmVydGljYWwifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsaW5wdXQ6ImlucHV0Iix2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UifSxleHBvcnRBczpbIm1hdFNsaWRlciJdLGZlYXR1cmVzOlskdChbdlZlXSksdHRdLGRlY2xzOjEzLHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtc2xpZGVyLXdyYXBwZXIiXSxbInNsaWRlcldyYXBwZXIiLCIiXSxbMSwibWF0LXNsaWRlci10cmFjay13cmFwcGVyIl0sWzEsIm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRyYWNrLWZpbGwiLDMsIm5nU3R5bGUiXSxbMSwibWF0LXNsaWRlci10aWNrcy1jb250YWluZXIiLDMsIm5nU3R5bGUiXSxbMSwibWF0LXNsaWRlci10aWNrcyIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lciIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLWZvY3VzLXJpbmciXSxbMSwibWF0LXNsaWRlci10aHVtYiJdLFsxLCJtYXQtc2xpZGVyLXRodW1iLWxhYmVsIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwLDEpKDIsImRpdiIsMiksTygzLCJkaXYiLDMpKDQsImRpdiIsNCksdigpLF8oNSwiZGl2Iiw1KSxPKDYsImRpdiIsNiksdigpLF8oNywiZGl2Iiw3KSxPKDgsImRpdiIsOCkoOSwiZGl2Iiw5KSxfKDEwLCJkaXYiLDEwKSgxMSwic3BhbiIsMTEpLEEoMTIpLHYoKSgpKCkoKSksMiZlJiYoQygzKSx5KCJuZ1N0eWxlIixpLl9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKSksQygxKSx5KCJuZ1N0eWxlIixpLl9nZXRUcmFja0ZpbGxTdHlsZXMoKSksQygxKSx5KCJuZ1N0eWxlIixpLl9nZXRUaWNrc0NvbnRhaW5lclN0eWxlcygpKSxDKDEpLHkoIm5nU3R5bGUiLGkuX2dldFRpY2tzU3R5bGVzKCkpLEMoMSkseSgibmdTdHlsZSIsaS5fZ2V0VGh1bWJDb250YWluZXJTdHlsZXMoKSksQyg1KSx5dChpLmRpc3BsYXlWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W3p1XSxzdHlsZXM6WycubWF0LXNsaWRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo4cHg7b3V0bGluZTpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpOmFjdGl2ZSwubWF0LXNsaWRlci5tYXQtc2xpZGVyLXNsaWRpbmc6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKXtjdXJzb3I6Z3JhYmJpbmd9Lm1hdC1zbGlkZXItd3JhcHBlcnstd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDpleGFjdDtjb2xvci1hZGp1c3Q6ZXhhY3Q7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVufS5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1zbGlkZXItdGlja3N7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3g7YmFja2dyb3VuZC1jbGlwOmNvbnRlbnQtYm94O2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2Zvcm06c2NhbGUoMCk7b3BhY2l0eTowO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksb3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5nLC5tYXQtc2xpZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3t0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6bm90KC5tYXQtc2xpZGVyLXNsaWRpbmcpIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6bm90KC5tYXQtc2xpZGVyLXNsaWRpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2N1cnNvcjpncmFifS5tYXQtc2xpZGVyLXRodW1ie3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xMHB4O2JvdHRvbTotMTBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtib3JkZXI6M3B4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNmb3JtOnNjYWxlKDAuNyk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3JkZXItY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpub25lO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm9yZGVyLXJhZGl1cyA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt6LWluZGV4OjE7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3RyYW5zaXRpb24tZHVyYXRpb246MG1zfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci13aWR0aDowO2JvcmRlci1zdHlsZTpzb2xpZDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLWhhcy10aWNrcy5jZGstZm9jdXNlZDpub3QoLm1hdC1zbGlkZXItaGlkZS1sYXN0LXRpY2spIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVyLC5tYXQtc2xpZGVyLWhhcy10aWNrczpob3Zlcjpub3QoLm1hdC1zbGlkZXItaGlkZS1sYXN0LXRpY2spIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye29wYWNpdHk6MX0ubWF0LXNsaWRlci1oYXMtdGlja3MuY2RrLWZvY3VzZWQ6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKSAubWF0LXNsaWRlci10aWNrcywubWF0LXNsaWRlci1oYXMtdGlja3M6aG92ZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKSAubWF0LXNsaWRlci10aWNrc3tvcGFjaXR5OjF9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2Rpc3BsYXk6bm9uZX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6ZmxleH0ubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9Lm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MCAwfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1ie3RyYW5zZm9ybTpzY2FsZSgwKX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JvcmRlci1yYWRpdXM6NTAlIDUwJSAwfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtvcGFjaXR5OjF9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstbW91c2UtZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay10b3VjaC1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItd2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZSgxKX0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RyYW5zZm9ybTpzY2FsZSgwKTtvcGFjaXR5OjB9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLXdpZHRoOjRweDt0cmFuc2Zvcm06c2NhbGUoMC41KX0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbHtoZWlnaHQ6NDhweDttaW4td2lkdGg6MTI4cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci13cmFwcGVye2hlaWdodDoycHg7dG9wOjIzcHg7bGVmdDo4cHg7cmlnaHQ6OHB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7aGVpZ2h0OjJweDtib3JkZXItbGVmdC13aWR0aDoycHg7cmlnaHQ6MDt0b3A6MH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7dHJhbnNmb3JtOnNjYWxlWCgwKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7aGVpZ2h0OjJweDt3aWR0aDoxMDAlO3RyYW5zZm9ybTpzY2FsZVgoMSl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7aGVpZ2h0OjA7b3V0bGluZTpzb2xpZCAycHg7dG9wOjFweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2hlaWdodDoycHg7d2lkdGg6MTAwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcnt3aWR0aDoxMDAlO2hlaWdodDowO3RvcDo1MCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RvcDotMTVweDtyaWdodDotMTVweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3JpZ2h0Oi0xNHB4O3RvcDotNDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgyNnB4KSBzY2FsZSgwLjAxKSByb3RhdGUoNDVkZWcpfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7dHJhbnNmb3JtOm5vbmV9Lm1hdC1zbGlkZXItdmVydGljYWx7d2lkdGg6NDhweDttaW4taGVpZ2h0OjEyOHB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXdyYXBwZXJ7d2lkdGg6MnB4O3RvcDo4cHg7Ym90dG9tOjhweDtsZWZ0OjIzcHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7d2lkdGg6MnB4O2JvcmRlci10b3Atd2lkdGg6MnB4O2JvdHRvbTowO2xlZnQ6MH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10cmFjay13cmFwcGVye2hlaWdodDoxMDAlO3dpZHRoOjJweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10cmFjay1maWxse2hlaWdodDoxMDAlO3dpZHRoOjJweDt0cmFuc2Zvcm06c2NhbGVZKDApfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZVkoMSl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3dpZHRoOjJweDtoZWlnaHQ6MTAwJX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcnt3aWR0aDowO291dGxpbmU6c29saWQgMnB4O2xlZnQ6MXB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7Ym90dG9tOi0xNXB4O2xlZnQ6LTE1cHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3N7d2lkdGg6MnB4O2hlaWdodDoxMDAlfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDowO2xlZnQ6NTAlfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRodW1iey13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7Ym90dG9tOi0xNHB4O2xlZnQ6LTQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMjZweCkgc2NhbGUoMC4wMSkgcm90YXRlKC00NWRlZyl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWF0LXNsaWRlci12ZXJ0aWNhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2xlZnQ6MDtyaWdodDphdXRvfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHt0cmFuc2Zvcm0tb3JpZ2luOjAgMH1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjAgMH1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX0ubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGlja3MsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVyLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7dHJhbnNpdGlvbjpub25lfSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGVvZShuKXtyZXR1cm4haXNOYU4obikmJmlzRmluaXRlKG4pfWZ1bmN0aW9uIE93KG4pe3JldHVybiJ0Ij09PW4udHlwZVswXX1mdW5jdGlvbiB0b2Uobix0KXtsZXQgZTtyZXR1cm4gZT1PdyhuKT8ibnVtYmVyIj09dHlwZW9mIHQ/dlUobi50b3VjaGVzLHQpfHx2VShuLmNoYW5nZWRUb3VjaGVzLHQpOm4udG91Y2hlc1swXXx8bi5jaGFuZ2VkVG91Y2hlc1swXTpuLGU/e3g6ZS5jbGllbnRYLHk6ZS5jbGllbnRZfTp2b2lkIDB9ZnVuY3Rpb24gdlUobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKylpZihuW2VdLmlkZW50aWZpZXI9PT10KXJldHVybiBuW2VdfXZhciBXaD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsbG4sbG5dfSksbn0pKCk7ZnVuY3Rpb24geFZlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwibWF0LXNsaWRlciIsMTEpLFAoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygyKS5vblNsaWRlckNoYW5nZS5lbWl0KHIudmFsdWUpKX0pLHYoKX1pZigyJm4pe2xldCBlPVMoMik7eSgibWluIiwwKSgibWF4IixlLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0KSgidmFsdWUiLGUuc2Nyb2xsQmVnaW5JbmRleCl9fWZ1bmN0aW9uIENWZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsNikoMSwiYnV0dG9uIiw3KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uTmF2aWdhdGVMZWZ0LmVtaXQoKSl9KSxBKDIsIiA8ICIpLHYoKSxfKDMsImRpdiIsOCksQSg0KSx2KCksXyg1LCJidXR0b24iLDkpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub25OYXZpZ2F0ZVJpZ2h0LmVtaXQoKSl9KSxBKDYsIiA+ICIpLHYoKSxFKDcseFZlLDEsMywibWF0LXNsaWRlciIsMTApLHYoKX1pZigyJm4pe2xldCBlPVMoKTtDKDQpLFRUKCIgIixlLnNjcm9sbEJlZ2luSW5kZXgsIiB+ICIsZS5zY3JvbGxCZWdpbkluZGV4K2UuZGlzcGxheUNvdW50LTEsIiBvZiAiLGUubnVtRXhlY3V0aW9ucywiICIpLEMoMykseSgibmdJZiIsZS5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdD4wKX19dmFyIE1WZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuW24sdCxlXX07ZnVuY3Rpb24gd1ZlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwxNCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89b2UoZSkuaW5kZXg7cmV0dXJuIHNlKFMoMikub25FeGVjdXRpb25EaWdlc3RDbGlja2VkLmVtaXQobykpfSksXygxLCJkaXYiLDE1KSxBKDIpLHYoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9UygyKTtDKDEpLFppKCJ0aXRsZSIsZS5vcF90eXBlKSx5KCJuZ0NsYXNzIixaeCgzLE1WZSxlLmlzX2dyYXBoPyJmdW5jLWdyYXBoLWV4ZWN1dGlvbiI6IiIsaT09PXIuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleD8iZm9jdXNlZCI6IiIsci5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXNbaV18fCIiKSksQygxKSxqZSgiICIsZS5zaG9ydF9vcF90eXBlLCIgIil9fWZ1bmN0aW9uIFNWZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwxMiksRSgxLHdWZSwzLDcsImRpdiIsMTMpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSx5KCJuZ0Zvck9mIixlLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzKX19ZnVuY3Rpb24gRVZlKG4sdCl7aWYoMSZuJiYoc24oMCksTygxLCJ0Zi1kZWJ1Z2dlci12Mi1leGVjdXRpb24tZGF0YSIsMTYpLGFuKCkpLDImbil7bGV0IGU9UygpO0MoMSkseSgiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixlLmZvY3VzZWRFeGVjdXRpb25JbmRleCl9fXZhciBub2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aXZlUnVuSWQ9bnVsbCx0aGlzLmxvYWRpbmdOdW1FeGVjdXRpb25zPSExLHRoaXMubnVtRXhlY3V0aW9ucz0wLHRoaXMuc2Nyb2xsQmVnaW5JbmRleD0wLHRoaXMuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQ9MCx0aGlzLnBhZ2VTaXplPTAsdGhpcy5kaXNwbGF5Q291bnQ9MCx0aGlzLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzPVtdLHRoaXMuZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzPVtdLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkluZGV4PW51bGwsdGhpcy5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4PW51bGwsdGhpcy5mb2N1c2VkRXhlY3V0aW9uRGF0YT1udWxsLHRoaXMub25OYXZpZ2F0ZUxlZnQ9bmV3IEcsdGhpcy5vbk5hdmlnYXRlUmlnaHQ9bmV3IEcsdGhpcy5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQ9bmV3IEcsdGhpcy5vblNsaWRlckNoYW5nZT1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGltZWxpbmUtY29tcG9uZW50Il1dLGlucHV0czp7YWN0aXZlUnVuSWQ6ImFjdGl2ZVJ1bklkIixsb2FkaW5nTnVtRXhlY3V0aW9uczoibG9hZGluZ051bUV4ZWN1dGlvbnMiLG51bUV4ZWN1dGlvbnM6Im51bUV4ZWN1dGlvbnMiLHNjcm9sbEJlZ2luSW5kZXg6InNjcm9sbEJlZ2luSW5kZXgiLHNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0OiJzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCIscGFnZVNpemU6InBhZ2VTaXplIixkaXNwbGF5Q291bnQ6ImRpc3BsYXlDb3VudCIsZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHM6ImRpc3BsYXlFeGVjdXRpb25EaWdlc3RzIixkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXM6ImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsZm9jdXNlZEV4ZWN1dGlvbkluZGV4OiJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLGZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXg6ImZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgiLGZvY3VzZWRFeGVjdXRpb25EYXRhOiJmb2N1c2VkRXhlY3V0aW9uRGF0YSJ9LG91dHB1dHM6e29uTmF2aWdhdGVMZWZ0OiJvbk5hdmlnYXRlTGVmdCIsb25OYXZpZ2F0ZVJpZ2h0OiJvbk5hdmlnYXRlUmlnaHQiLG9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZDoib25FeGVjdXRpb25EaWdlc3RDbGlja2VkIixvblNsaWRlckNoYW5nZToib25TbGlkZXJDaGFuZ2UifSxkZWNsczo5LHZhcnM6NCxjb25zdHM6W1sxLCJ0aW1lbGluZS10aXRsZSJdLFsxLCJleGVjdXRpb24tY291bnQiXSxbMSwidG9wLWxldmVsLWV4ZWN1dGlvbnMiXSxbImNsYXNzIiwibmF2aWdhdGlvbi1zZWN0aW9uIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4ZWN1dGlvbi10aW1lbGluZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsIm5hdmlnYXRpb24tc2VjdGlvbiJdLFsibWF0LWJ1dHRvbiIsIiIsMSwibmF2aWdhdGlvbi1idXR0b24tbGVmdCIsMywiY2xpY2siXSxbMSwibmF2aWdhdGlvbi1wb3NpdGlvbi1pbmZvIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJuYXZpZ2F0aW9uLWJ1dHRvbi1yaWdodCIsMywiY2xpY2siXSxbImNsYXNzIiwidGltZWxpbmUtc2xpZGVyIiwic3RlcCIsIjEiLDMsIm1pbiIsIm1heCIsInZhbHVlIiwiaW5wdXQiLDQsIm5nSWYiXSxbInN0ZXAiLCIxIiwxLCJ0aW1lbGluZS1zbGlkZXIiLDMsIm1pbiIsIm1heCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiZXhlY3V0aW9uLXRpbWVsaW5lIl0sWzMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xpY2siXSxbMSwiZXhlY3V0aW9uLWRpZ2VzdCIsMywibmdDbGFzcyIsInRpdGxlIl0sWzMsImZvY3VzZWRFeGVjdXRpb25JbmRleCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IikoMSwiZGl2IiwwKSxBKDIsIiBQeXRob24gRXhlY3V0aW9uIFRpbWVsaW5lICIpLF8oMywic3BhbiIsMSksQSg0KSx2KCkoKSxfKDUsImRpdiIsMiksRSg2LENWZSw4LDQsImRpdiIsMyksRSg3LFNWZSwyLDEsImRpdiIsNCksRSg4LEVWZSwyLDEsIm5nLWNvbnRhaW5lciIsNSksdigpKCkpLDImZSYmKEMoNCksamUoIiAoIixpLm51bUV4ZWN1dGlvbnMsIikgIiksQygyKSx5KCJuZ0lmIixpLm51bUV4ZWN1dGlvbnMpLEMoMSkseSgibmdJZiIsaS5udW1FeGVjdXRpb25zKSxDKDEpLHkoIm5nSWYiLG51bGwhPT1pLmFjdGl2ZVJ1bklkJiZudWxsIT09aS5mb2N1c2VkRXhlY3V0aW9uSW5kZXgpKX0sZGVwZW5kZW5jaWVzOltGbixkbixCZSwkcmUsX24sdXBdLHN0eWxlczpbIi5leGVjdXRpb24tZGlnZXN0W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gIGNvbG9yOiAjNDI1MDY2O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgaGVpZ2h0OiAxNXB4O1xuICBwYWRkaW5nOiAxcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDEycHg7XG59XG5cbi5leGVjdXRpb24tZGlnZXN0LmZ1bmMtZ3JhcGgtZXhlY3V0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjN2RiZjU7XG4gIGNvbG9yOiAjNGU1NjY0O1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuZm9jdXNlZFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkNGIzO1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuSW5mTmFuQWxlcnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgY29sb3I6ICNmZmY7XG59XG5cblxuLmV4ZWN1dGlvbi1kaWdlc3RbX25nY29udGVudC0lQ09NUCVdOmhvdmVyIHtcbiAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5leGVjdXRpb24tdGltZWxpbmVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogZmxleDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLXRvcDogNXB4O1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG5cbi50aW1lbGluZS1zbGlkZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGxlZnQ6IDM0MHB4OyBcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogNDBweDtcbn1cblxuICAudGltZWxpbmUtc2xpZGVyIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICByaWdodDogLTQwcHg7XG4gIHdpZHRoOiA4MHB4O1xufVxuXG5cbi5uYXZpZ2F0aW9uLXBvc2l0aW9uLWluZm9bX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgbWF4LXdpZHRoOiAyMDBweDtcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5uYXZpZ2F0aW9uLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiA0OHB4O1xuICBsaW5lLWhlaWdodDogNDhweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTAwJTtcbn0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLERWZT1bIl9fZm9yd2FyZF8iLCJfX2JhY2t3YXJkXyIsIl9faW5mZXJlbmNlXyJdLGlvZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFjdGl2ZVJ1bklkJD10aGlzLnN0b3JlLnBpcGUodnQoVnMpKSx0aGlzLmxvYWRpbmdOdW1FeGVjdXRpb25zJD10aGlzLnN0b3JlLnBpcGUodnQoSih3UCxpPT5pLnN0YXRlPT1PZS5MT0FESU5HKSkpLHRoaXMuc2Nyb2xsQmVnaW5JbmRleCQ9dGhpcy5zdG9yZS5waXBlKHZ0KEF3KSksdGhpcy5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCQ9dGhpcy5zdG9yZS5waXBlKHZ0KEooamgsbnksKGkscik9Pk1hdGgubWF4KDAsaS1yKSkpKSx0aGlzLnBhZ2VTaXplJD10aGlzLnN0b3JlLnBpcGUodnQodHkpKSx0aGlzLmRpc3BsYXlDb3VudCQ9dGhpcy5zdG9yZS5waXBlKHZ0KG55KSksdGhpcy5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyQ9dGhpcy5zdG9yZS5waXBlKHZ0KEooZnJlLGk9PmkubWFwKHI9PmZ1bmN0aW9uKG4sdD0xKXtpZighbilyZXR1cm57b3BfdHlwZToiKE4vQSkiLHNob3J0X29wX3R5cGU6Ii4uIixpc19ncmFwaDohMX07bGV0IGU9RFZlLmZpbHRlcihpPT5uLm9wX3R5cGUuc3RhcnRzV2l0aChpKSk7aWYoZS5sZW5ndGgpe2xldCBpPW4ub3BfdHlwZS5zbGljZShlWzBdLmxlbmd0aCk7cmV0dXJue29wX3R5cGU6bi5vcF90eXBlLHNob3J0X29wX3R5cGU6aS5zbGljZSgwLHQpLGlzX2dyYXBoOiEwfX1yZXR1cm57b3BfdHlwZTpuLm9wX3R5cGUsc2hvcnRfb3BfdHlwZTpuLm9wX3R5cGUuc2xpY2UoMCx0KSxpc19ncmFwaDohMX19KHIpKSkpKSx0aGlzLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyQ9dGhpcy5zdG9yZS5waXBlKHZ0KE1yZSkpLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkluZGV4JD10aGlzLnN0b3JlLnBpcGUodnQodVUpKSx0aGlzLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgkPXRoaXMuc3RvcmUucGlwZSh2dCh3cmUpKSx0aGlzLm51bUV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZSh2dChqaCkpfW9uTmF2aWdhdGVMZWZ0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaChXdigpKX1vbk5hdmlnYXRlUmlnaHQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHF2KCkpfW9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFh2KHtkaXNwbGF5SW5kZXg6ZX0pKX1vblNsaWRlckNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFl2KHtpbmRleDplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItdGltZWxpbmUiXV0sZGVjbHM6MTIsdmFyczozMyxjb25zdHM6W1szLCJhY3RpdmVSdW5JZCIsImxvYWRpbmdOdW1FeGVjdXRpb25zIiwibnVtRXhlY3V0aW9ucyIsInNjcm9sbEJlZ2luSW5kZXgiLCJzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCIsInBhZ2VTaXplIiwiZGlzcGxheUNvdW50IiwiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLCJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMiLCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLCJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4Iiwib25OYXZpZ2F0ZUxlZnQiLCJvbk5hdmlnYXRlUmlnaHQiLCJvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQiLCJvblNsaWRlckNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwidGltZWxpbmUtY29tcG9uZW50IiwwKSxQKCJvbk5hdmlnYXRlTGVmdCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk5hdmlnYXRlTGVmdCgpfSkoIm9uTmF2aWdhdGVSaWdodCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk5hdmlnYXRlUmlnaHQoKX0pKCJvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZChvKX0pKCJvblNsaWRlckNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TbGlkZXJDaGFuZ2Uobyl9KSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLEIoMywiYXN5bmMiKSxCKDQsImFzeW5jIiksQig1LCJhc3luYyIpLEIoNiwiYXN5bmMiKSxCKDcsImFzeW5jIiksQig4LCJhc3luYyIpLEIoOSwiYXN5bmMiKSxCKDEwLCJhc3luYyIpLEIoMTEsImFzeW5jIiksdigpKSwyJmUmJnkoImFjdGl2ZVJ1bklkIixVKDEsMTEsaS5hY3RpdmVSdW5JZCQpKSgibG9hZGluZ051bUV4ZWN1dGlvbnMiLFUoMiwxMyxpLmxvYWRpbmdOdW1FeGVjdXRpb25zJCkpKCJudW1FeGVjdXRpb25zIixVKDMsMTUsaS5udW1FeGVjdXRpb25zJCkpKCJzY3JvbGxCZWdpbkluZGV4IixVKDQsMTcsaS5zY3JvbGxCZWdpbkluZGV4JCkpKCJzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCIsVSg1LDE5LGkuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQkKSkoInBhZ2VTaXplIixVKDYsMjEsaS5wYWdlU2l6ZSQpKSgiZGlzcGxheUNvdW50IixVKDcsMjMsaS5kaXNwbGF5Q291bnQkKSkoImRpc3BsYXlFeGVjdXRpb25EaWdlc3RzIixVKDgsMjUsaS5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyQpKSgiZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzIixVKDksMjcsaS5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMkKSkoImZvY3VzZWRFeGVjdXRpb25JbmRleCIsVSgxMCwyOSxpLmZvY3VzZWRFeGVjdXRpb25JbmRleCQpKSgiZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCIsVSgxMSwzMSxpLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgkKSl9LGRlcGVuZGVuY2llczpbbm9lLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBQVmUobix0KXsxJm4mJk8oMCwidGYtZGVidWdnZXItdjItaW5hY3RpdmUiKX1mdW5jdGlvbiBSVmUobix0KXsxJm4mJihfKDAsImRpdiIsMyksTygxLCJ0Zi1kZWJ1Z2dlci12Mi1hbGVydHMiKSxfKDIsImRpdiIsNCksTygzLCJ0Zi1kZWJ1Z2dlci12Mi10aW1lbGluZSIpKDQsInRmLWRlYnVnZ2VyLXYyLWdyYXBoIiksdigpLE8oNSwidGYtZGVidWdnZXItdjItZ3JhcGgtZXhlY3V0aW9ucyIpLHYoKSxfKDYsImRpdiIsNSksTyg3LCJ0Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXMiKSg4LCJ0Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZSIpLHYoKSl9dmFyIHJvZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5ydW5zPXt9LHRoaXMucnVuSWRzPVtdLHRoaXMuYWN0aXZlUnVuSWQ9bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWdnZXItY29tcG9uZW50Il1dLGlucHV0czp7cnVuczoicnVucyIscnVuSWRzOiJydW5JZHMiLGFjdGl2ZVJ1bklkOiJhY3RpdmVSdW5JZCJ9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImRlYnVnZ2VyLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImRhdGFBdmFpbGFibGUiLCIiXSxbMSwidG9wLXNlY3Rpb24iXSxbMSwidG9wLWNlbnRlci1zZWN0aW9uIl0sWzEsImJvdHRvbS1zZWN0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJkaXYiLDApLEUoMSxQVmUsMSwwLCJ0Zi1kZWJ1Z2dlci12Mi1pbmFjdGl2ZSIsMSksRSgyLFJWZSw5LDAsIm5nLXRlbXBsYXRlIixudWxsLDIscXQpLHYoKSksMiZlKXtsZXQgcj0kZSgzKTtDKDEpLHkoIm5nSWYiLDA9PT1pLnJ1bklkcy5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W1ByZSxCZSxrcmUsTHJlLFZyZSxYcmUsS3JlLGlvZV0sc3R5bGVzOlsiLmJvdHRvbS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7aGVpZ2h0OjM0JTtwYWRkaW5nLXRvcDo2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjNTU1fS5kZWJ1Z2dlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59LnRvcC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO2hlaWdodDo2NiU7cGFkZGluZzo2cHggMH10Zi1kZWJ1Z2dlci12Mi1hbGVydHNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTBweDttaW4td2lkdGg6MTYwcHg7d2lkdGg6Y2FsYygxNSUgLSAxMXB4KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1hbGVydHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1hbGVydHNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgIzU1NX10Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4LWdyb3c6MTttaW4td2lkdGg6NTQwcHg7d2lkdGg6NTQwcHh9dGYtZGVidWdnZXItdjItc291cmNlLWZpbGVzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDo3MCV9dGYtZGVidWdnZXItdjItc3RhY2stdHJhY2VbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO21pbi13aWR0aDo1NDBweDt3aWR0aDo1NDBweH0udG9wLWNlbnRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzphdXRvO3dpZHRoOjU1JX10Zi1kZWJ1Z2dlci12Mi10aW1lbGluZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja310Zi1kZWJ1Z2dlci12Mi1ncmFwaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWdyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgdGYtZGVidWdnZXItdjItZ3JhcGhbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxvb2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ydW5zJD10aGlzLnN0b3JlLnBpcGUodnQodWcpKSx0aGlzLnJ1bnNJZHMkPXRoaXMuc3RvcmUucGlwZSh2dChKKHVnLGk9Pk9iamVjdC5rZXlzKGkpKSkpLHRoaXMuYWN0aXZlUnVuSWQkPXRoaXMuc3RvcmUucGlwZSh2dChWcykpfW5nT25Jbml0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh0UCgpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goblAoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12MiJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJydW5zIiwicnVuSWRzIiwiYWN0aXZlUnVuSWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsImRlYnVnZ2VyLWNvbXBvbmVudCIsMCksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIikpLDImZSYmeSgicnVucyIsVSgxLDMsaS5ydW5zJCkpKCJydW5JZHMiLFUoMiw1LGkucnVuc0lkcyQpKSgiYWN0aXZlUnVuSWQiLFUoMyw3LGkuYWN0aXZlUnVuSWQkKSl9LGRlcGVuZGVuY2llczpbcm9lLEdlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXX0pLG59KSgpLGtQPSJkZWJ1Z2dlci12MiI7ZnVuY3Rpb24geVUobix0LGUsaSxyKXtpZihlPD0wfHwhTnVtYmVyLmlzSW50ZWdlcihlKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFnZVNpemU6ICR7ZX1gKTtpZih0PmkpdGhyb3cgbmV3IEVycm9yKGBlbmQgaW5kZXggKCR7dH0pIGV4Y2VlZHMgdG90YWwgbnVtYmVyIG9mIGl0ZW1zICgke2l9KWApO2lmKHQtbj5lKXRocm93IG5ldyBFcnJvcigiYmVnaW4tZW5kIHNwYW4gZXhjZWVkcyBwYWdlIHNpemUsIHdoaWNoIGlzIG5vdCBhbGxvd2VkIik7bGV0IG89W10scz1NYXRoLmZsb29yKG4vZSk7KCEocyBpbiByKXx8cltzXTxlJiZzKmUrcltzXTxpKSYmby5wdXNoKHMpO2xldCBhPU1hdGguZmxvb3IoKHQtMSkvZSk7cmV0dXJuIGEhPT1zJiYoIShhIGluIHIpfHxhKmUrclthXTx0JiZ0PGkpJiZvLnB1c2goYSksb312YXIgbG9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5kYXRhU291cmNlPXIsdGhpcy5sb2FkRGF0YSQ9Y3IoKCk9PntsZXQgbz10aGlzLmxvYWREZWJ1Z2dlclJ1bnMoSnQodGhpcy5vbkRlYnVnZ2VyRGF0YVBvbGwoKSx0aGlzLm9uQ29yZVJlbG9hZCgpKSkucGlwZShUcygpKSxzPXRoaXMubG9hZFNvdXJjZUZpbGVMaXN0KG8pLGE9dGhpcy5jcmVhdGVOdW1FeGVjdXRpb25Mb2FkZXIobyksbD10aGlzLmNyZWF0ZU51bUFsZXJ0c0FuZEJyZWFrZG93bkxvYWRlcihvKSxjPXRoaXMub25BbGVydFR5cGVGb2N1c2VkKCksdT10aGlzLmZldGNoRXhlY3V0aW9uRGlnZXN0c0ZvckFsZXJ0VHlwZUZvY3VzKGMpLGQ9dGhpcy5jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGV0ZWN0b3IoYSkucGlwZShUcygpKSxwPXRoaXMuY3JlYXRlRXhlY3V0aW9uRGlnZXN0TG9hZGVyKEp0KHRoaXMub25FeGVjdXRpb25TY3JvbGwoKSx0aGlzLmNyZWF0ZUluaXRpYWxFeGVjdXRpb25EaWdlc3QoZCksdSkpLGg9dGhpcy5jcmVhdGVFeGVjdXRpb25EYXRhQW5kU3RhY2tGcmFtZXNMb2FkZXIoSnQodGhpcy5vbkV4ZWN1dGlvbkRpZ2VzdEZvY3VzZWQoKSxkLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoVnMpLHRoaXMuc3RvcmUuc2VsZWN0KGRVKSksTCgoWyxiLERdKT0+KHthY3RpdmVSdW5JZDpiLGxvYWRlZEV4ZWN1dGlvbkRhdGE6RCxmb2N1c0luZGV4OjB9KSkpKSk7cmV0dXJuIEp0KGwscCxoLHRoaXMuY3JlYXRlTnVtR3JhcGhFeGVjdXRpb25Mb2FkZXIobykscyx0aGlzLm9uU291cmNlRmlsZUZvY3VzZWQoKSx0aGlzLmxvYWRHcmFwaEV4ZWN1dGlvblBhZ2VzKHRoaXMub25HcmFwaEV4ZWN1dGlvblNjcm9sbCgpKSx0aGlzLmxvYWRHcmFwaE9wU3RhY2tGcmFtZXModGhpcy5sb2FkR3JhcGhPcEluZm8oKSkpLnBpcGUoTCgoKT0+KHt9KSkpfSx7ZGlzcGF0Y2g6ITF9KX1vbkRlYnVnZ2VyRGF0YVBvbGwoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGlpKHRQKSx1aShlPT5mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG4ucGlwZShmdW5jdGlvbihuKXtyZXR1cm4gZW4oKHQsZSk9PntsZXQgaSxvLHI9ITEscz0hMSxhPSExLGw9KCk9PmEmJnMmJihlLmNvbXBsZXRlKCksITApLHU9KCk9PnthPSExLGk9dC5zdWJzY3JpYmUoanQoZSx2b2lkIDAsKCk9PnthPSEwLCFsKCkmJihvfHwobz1uZXcga2UsbihvKS5zdWJzY3JpYmUoanQoZSwoKT0+e2k/dSgpOnI9ITB9LCgpPT57cz0hMCxsKCl9KSkpLG8pLm5leHQoKX0pKSxyJiYoaS51bnN1YnNjcmliZSgpLGk9bnVsbCxyPSExLHUoKSl9O3UoKX0pfShpPT5pLnBpcGUoV3QodCksdjAoKFsscl0pPT5LYShyKSkpKSxzdChlKSxMKCgpPT57fSkpfShYdChlKSx0aGlzLnN0b3JlLnNlbGVjdChjcmUpLnBpcGUoTChpPT5mdW5jdGlvbihuKXtyZXR1cm4gbj42ZTQ/NmU0Om4+NGUzP246MmUzfShpKSkpLHRoaXMuYWN0aW9ucyQucGlwZShpaShuUCkpKSksa3QoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goTXcoKSkpLEwoKCk9Pnt9KSl9b25Db3JlUmVsb2FkKCl7cmV0dXJuIEp0KHRoaXMuYWN0aW9ucyQucGlwZShpaShGYSxhYSkpLHRoaXMuYWN0aW9ucyQucGlwZShpaShadSkpLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoaVUpKSxZZSgoWyxlXSk9PmUuc3RhdGU9PT1PZS5OT1RfTE9BREVEfHxlLnN0YXRlPT09T2UuRkFJTEVEJiZudWxsPT09ZS5sYXN0TG9hZGVkVGltZUluTXMpKSkucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdChScykpLFllKChbLGVdKT0+ZT09PWtQKSxrdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChNdygpKSksTCgoKT0+e30pKX1sb2FkRGVidWdnZXJSdW5zKGUpe3JldHVybiBlLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoaVUpKSxZZSgoWyx7c3RhdGU6aX1dKT0+aSE9PU9lLkxPQURJTkcpLGt0KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGlQKCkpKSx4bigoKT0+dGhpcy5kYXRhU291cmNlLmZldGNoUnVucygpLnBpcGUoa3QoaT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goclAoe3J1bnM6aX0pKX0pLEwoKCk9Pnt9KSkpKX1jcmVhdGVOdW1FeGVjdXRpb25Mb2FkZXIoZSl7cmV0dXJuIGUucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdCh1ZyksdGhpcy5zdG9yZS5zZWxlY3Qod1ApKSxZZSgoWyxpLHJdKT0+T2JqZWN0LmtleXMoaSkubGVuZ3RoPjAmJnIuc3RhdGUhPT1PZS5MT0FESU5HKSxrdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChhUCgpKSkseG4oKFssaV0pPT57bGV0IHI9T2JqZWN0LmtleXMoaSlbMF07cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEV4ZWN1dGlvbkRpZ2VzdHMociwwLDApLnBpcGUoa3QoYT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2gobFAoe251bUV4ZWN1dGlvbnM6YS5udW1fZGlnZXN0c30pKX0pLEwoKCk9Pnt9KSl9KSl9Y3JlYXRlTnVtR3JhcGhFeGVjdXRpb25Mb2FkZXIoZSl7cmV0dXJuIGUucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdCh1ZyksdGhpcy5zdG9yZS5zZWxlY3QobXJlKSksWWUoKFssaSxyXSk9Pk9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiZyLnN0YXRlIT09T2UuTE9BRElORyksa3QoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2gocFAoKSkpLHhuKChbLGldKT0+e2xldCByPU9iamVjdC5rZXlzKGkpWzBdO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hHcmFwaEV4ZWN1dGlvbkRpZ2VzdHMociwwLDApLnBpcGUoa3QoYT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goaFAoe251bUdyYXBoRXhlY3V0aW9uczphLm51bV9kaWdlc3RzfSkpfSksTCgoKT0+e30pKX0pKX1jcmVhdGVOdW1BbGVydHNBbmRCcmVha2Rvd25Mb2FkZXIoZSl7cmV0dXJuIGUucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdCh1ZyksdGhpcy5zdG9yZS5zZWxlY3QoclUpKSxZZSgoWyxpLHJdKT0+T2JqZWN0LmtleXMoaSkubGVuZ3RoPjAmJnIuc3RhdGUhPT1PZS5MT0FESU5HKSxrdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaCh3dygpKSkseG4oKFssaV0pPT57bGV0IHI9T2JqZWN0LmtleXMoaSlbMF07cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEFsZXJ0cyhyLDAsMCkucGlwZShrdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChvUCh7bnVtQWxlcnRzOmEubnVtX2FsZXJ0cyxhbGVydHNCcmVha2Rvd246YS5hbGVydHNfYnJlYWtkb3dufSkpfSksTCgoKT0+e30pKX0pKX1jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGV0ZWN0b3IoZSl7cmV0dXJuIGUucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdChqaCksdGhpcy5zdG9yZS5zZWxlY3QoRHcpKSxZZSgoWyxpLHJdKT0+aT4wJiYwPT09T2JqZWN0LmtleXMoci5wYWdlTG9hZGVkU2l6ZXMpLmxlbmd0aCksTCgoKT0+e30pKX1jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGlnZXN0KGUpe3JldHVybiBlLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoamgpLHRoaXMuc3RvcmUuc2VsZWN0KFZzKSx0aGlzLnN0b3JlLnNlbGVjdCh0eSkpLFllKChbLCxpXSk9Pm51bGwhPT1pKSxMKChbLGkscixvXSk9Pih7YmVnaW46MCxlbmQ6TWF0aC5taW4oaSxvKSxydW5JZDpyfSkpKX1vbkV4ZWN1dGlvblNjcm9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoaWkoV3YscXYsWXYpLFd0KHRoaXMuc3RvcmUuc2VsZWN0KFZzKSx0aGlzLnN0b3JlLnNlbGVjdChBdyksdGhpcy5zdG9yZS5zZWxlY3QoamgpLHRoaXMuc3RvcmUuc2VsZWN0KG55KSx0aGlzLnN0b3JlLnNlbGVjdCh0eSkpLFllKChbZV0pPT5udWxsIT09ZSksTCgoWyxlLGkscixvLHNdKT0+KHtydW5JZDplLGJlZ2luOmksZW5kOk1hdGgubWluKHIsaStvKSxwYWdlU2l6ZTpzfSkpLFd0KHRoaXMuc3RvcmUuc2VsZWN0KER3KSksTCgoW2UsaV0pPT4oe3Byb3BzOmUsbG9hZGVkOmksbWlzc2luZ1BhZ2VzOnlVKGUuYmVnaW4sZS5lbmQsZS5wYWdlU2l6ZSxpLm51bUV4ZWN1dGlvbnMsaS5wYWdlTG9hZGVkU2l6ZXMpfSkpLFllKCh7bWlzc2luZ1BhZ2VzOmV9KT0+ZS5sZW5ndGg+MCksTCgoe3Byb3BzOmUsbG9hZGVkOmksbWlzc2luZ1BhZ2VzOnJ9KT0+e2xldHtydW5JZDpvLHBhZ2VTaXplOnN9PWU7cmV0dXJue2JlZ2luOnJbMF0qcyxlbmQ6TWF0aC5taW4oaS5udW1FeGVjdXRpb25zLChyW3IubGVuZ3RoLTFdKzEpKnMpLHJ1bklkOm99fSkpfWNyZWF0ZUV4ZWN1dGlvbkRpZ2VzdExvYWRlcihlKXtyZXR1cm4gZS5waXBlKFd0KHRoaXMuc3RvcmUuc2VsZWN0KER3KSksWWUoKFt7YmVnaW46aSxlbmQ6cn0sb10pPT5yPmkmJiFmdW5jdGlvbihuLHQsZSl7aWYodD49ZSl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJlZ2luIHRvIGJlIGxlc3MgdGhhbiBlbmQsIGJ1dCBnb3QgYmVnaW49JHt0fSwgZW5kPSR7ZX1gKTtyZXR1cm4tMSE9PW4uZmluZEluZGV4KGk9PmkuYmVnaW4+PXQmJmkuZW5kPD1lKX0oby5sb2FkaW5nUmFuZ2VzLGkscikpLGt0KChbe2JlZ2luOmksZW5kOnJ9XSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGNQKHtiZWdpbjppLGVuZDpyfSkpfSkseG4oKFt7cnVuSWQ6aSxiZWdpbjpyLGVuZDpvfV0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hFeGVjdXRpb25EaWdlc3RzKGkscixvKS5waXBlKGt0KHM9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHVQKHMpKX0pLEwoKCk9Pnt9KSkpKX1vbkV4ZWN1dGlvbkRpZ2VzdEZvY3VzZWQoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGlpKFh2KSxXdCh0aGlzLnN0b3JlLnNlbGVjdChWcyksdGhpcy5zdG9yZS5zZWxlY3QoZFUpLHRoaXMuc3RvcmUuc2VsZWN0KEF3KSksTCgoW2UsaSxyLG9dKT0+KHthY3RpdmVSdW5JZDppLGxvYWRlZEV4ZWN1dGlvbkRhdGE6cixmb2N1c0luZGV4Om8rZS5kaXNwbGF5SW5kZXh9KSkpfWNyZWF0ZUV4ZWN1dGlvbkRhdGFBbmRTdGFja0ZyYW1lc0xvYWRlcihlKXtyZXR1cm4gZS5waXBlKFllKCh7YWN0aXZlUnVuSWQ6aSxsb2FkZWRFeGVjdXRpb25EYXRhOnIsZm9jdXNJbmRleDpvfSk9Pm51bGwhPT1pJiZudWxsIT09byYmdm9pZCAwPT09cltvXSkseG4oKHthY3RpdmVSdW5JZDppLGZvY3VzSW5kZXg6cn0pPT57bGV0IG89cixzPW8rMTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGF0YShpLG8scykucGlwZShrdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChkUChhKSl9KSxMKGE9Pih7ZXhlY3V0aW9uRGF0YTphLGJlZ2luOm8sZW5kOnN9KSkpfSksTCgoe2V4ZWN1dGlvbkRhdGE6aX0pPT5pLmV4ZWN1dGlvbnNbMF0pLFd0KHRoaXMuc3RvcmUuc2VsZWN0KFZzKSx0aGlzLnN0b3JlLnNlbGVjdChwVSkpLFllKChbaSxyLG9dKT0+e2lmKG51bGw9PT1yKXJldHVybiExO2ZvcihsZXQgcyBvZiBpLnN0YWNrX2ZyYW1lX2lkcylpZih2b2lkIDA9PT1vW3NdKXJldHVybiEwO3JldHVybiExfSkseG4oKFtpLHJdKT0+e2xldCBvPWkuc3RhY2tfZnJhbWVfaWRzO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hTdGFja0ZyYW1lcyhyLG8pLnBpcGUoa3Qocz0+e2xldCBhPXt9O2ZvcihsZXQgbD0wO2w8by5sZW5ndGg7KytsKWFbb1tsXV09cy5zdGFja19mcmFtZXNbbF07dGhpcy5zdG9yZS5kaXNwYXRjaChTdyh7c3RhY2tGcmFtZXM6YX0pKX0pLEwoKCk9Pnt9KSl9KSl9b25HcmFwaEV4ZWN1dGlvblNjcm9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoaWkoUXYpLEhyKDEwMCksV3QodGhpcy5zdG9yZS5zZWxlY3QoVnMpLHRoaXMuc3RvcmUuc2VsZWN0KEl3KSx0aGlzLnN0b3JlLnNlbGVjdChncmUpKSxZZSgoWyxlLGldKT0+bnVsbCE9PWUmJmk+MCksTCgoWyxlLGkscl0pPT4oe3J1bklkOmUsbnVtR3JhcGhFeGVjdXRpb25zOmksc2Nyb2xsQmVnaW5JbmRleDpyfSkpLFd0KHRoaXMuc3RvcmUuc2VsZWN0KHZyZSksdGhpcy5zdG9yZS5zZWxlY3QoX3JlKSx0aGlzLnN0b3JlLnNlbGVjdCh5cmUpLHRoaXMuc3RvcmUuc2VsZWN0KGJyZSkpLEwoKFt7cnVuSWQ6ZSxudW1HcmFwaEV4ZWN1dGlvbnM6aSxzY3JvbGxCZWdpbkluZGV4OnJ9LG8scyxhLGxdKT0+e2xldCBjPXlVKHIsTWF0aC5taW4ocitzLGkpLG8saSxsKTtyZXR1cm4gYz1jLmZpbHRlcih1PT4tMT09PWEuaW5kZXhPZih1KSkse3J1bklkOmUsbWlzc2luZ1BhZ2VzOmMscGFnZVNpemU6byxudW1HcmFwaEV4ZWN1dGlvbnM6aX19KSl9bG9hZEdyYXBoRXhlY3V0aW9uUGFnZXMoZSl7cmV0dXJuIGUucGlwZShZZSgoe21pc3NpbmdQYWdlczppfSk9PmkubGVuZ3RoPjApLGt0KCh7bWlzc2luZ1BhZ2VzOml9KT0+e2kuZm9yRWFjaChyPT57dGhpcy5zdG9yZS5kaXNwYXRjaChmUCh7cGFnZUluZGV4OnJ9KSl9KX0pLHhuKCh7cnVuSWQ6aSxtaXNzaW5nUGFnZXM6cixwYWdlU2l6ZTpvLG51bUdyYXBoRXhlY3V0aW9uczpzfSk9PntsZXQgYT1yWzBdKm8sbD1NYXRoLm1pbigocltyLmxlbmd0aC0xXSsxKSpvLHMpO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hHcmFwaEV4ZWN1dGlvbkRhdGEoaSxhLGwpLnBpcGUoa3QoYz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2gobVAoYykpfSksTCgoKT0+e30pKX0pKX1sb2FkR3JhcGhPcEluZm8oKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGlpKFp2LEt2KSxXdCh0aGlzLnN0b3JlLnNlbGVjdChWcyksdGhpcy5zdG9yZS5zZWxlY3QoU3JlKSksWWUoKFtlLGkscl0pPT57bGV0e2dyYXBoX2lkOm8sb3BfbmFtZTpzfT1lO3JldHVybiEobnVsbD09PWl8fHZvaWQgMCE9PXJbb10mJnJbb10uaGFzKHMpJiYocltvXS5nZXQocyk9PT1PZS5MT0FESU5HfHxyW29dLmdldChzKT09PU9lLkxPQURFRCkpfSksa3QoKFt7Z3JhcGhfaWQ6ZSxvcF9uYW1lOml9XSk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goZ1Aoe2dyYXBoX2lkOmUsb3BfbmFtZTppfSkpKSx4bigoW2UsaV0pPT57bGV0e2dyYXBoX2lkOnIsb3BfbmFtZTpvfT1lO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hHcmFwaE9wSW5mbyhpLHIsbykucGlwZShrdChzPT50aGlzLnN0b3JlLmRpc3BhdGNoKF9QKHtncmFwaE9wSW5mb1Jlc3BvbnNlOnN9KSkpLEwocz0+KHtydW5JZDppLHN0YWNrRnJhbWVJZHM6cy5zdGFja19mcmFtZV9pZHN9KSkpfSkpfWxvYWRHcmFwaE9wU3RhY2tGcmFtZXMoZSl7cmV0dXJuIGUucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdChwVSkpLEwoKFt7cnVuSWQ6aSxzdGFja0ZyYW1lSWRzOnJ9LG9dKT0+KHtydW5JZDppLG1pc3NpbmdTdGFja0ZyYW1lSWRzOnIuZmlsdGVyKGE9PnZvaWQgMD09PW9bYV0pfSkpLFllKCh7cnVuSWQ6aSxtaXNzaW5nU3RhY2tGcmFtZUlkczpyfSk9Pm51bGwhPT1pJiZyLmxlbmd0aD4wKSx4bigoe3J1bklkOmksbWlzc2luZ1N0YWNrRnJhbWVJZHM6cn0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hTdGFja0ZyYW1lcyhpLHIpLnBpcGUoa3Qobz0+e2xldCBzPXt9O2ZvcihsZXQgYT0wO2E8ci5sZW5ndGg7KythKXNbclthXV09by5zdGFja19mcmFtZXNbYV07dGhpcy5zdG9yZS5kaXNwYXRjaChTdyh7c3RhY2tGcmFtZXM6c30pKX0pLEwoKCk9Pnt9KSkpKX1vbkFsZXJ0VHlwZUZvY3VzZWQoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGlpKEd2KSxXdCh0aGlzLnN0b3JlLnNlbGVjdChWcyksdGhpcy5zdG9yZS5zZWxlY3QoTVApLHRoaXMuc3RvcmUuc2VsZWN0KGRyZSksdGhpcy5zdG9yZS5zZWxlY3QocHJlKSx0aGlzLnN0b3JlLnNlbGVjdChyVSkpLFllKChbLGUsaSxyLG8sc10pPT5udWxsIT09ZSYmbnVsbCE9PWkmJnI+MCYmKG51bGw9PT1vfHxPYmplY3Qua2V5cyhvKS5sZW5ndGg8cikmJnMuc3RhdGUhPT1PZS5MT0FESU5HKSxrdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaCh3dygpKSkseG4oKFssZSxpXSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaEFsZXJ0cyhlLDAsLTEsaSkpLGt0KCh7bnVtX2FsZXJ0czplLGFsZXJ0c19icmVha2Rvd246aSxhbGVydF90eXBlOnIsYmVnaW46byxlbmQ6cyxhbGVydHM6YX0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChzUCh7bnVtQWxlcnRzOmUsYWxlcnRzQnJlYWtkb3duOmksYWxlcnRUeXBlOnIsYmVnaW46byxlbmQ6cyxhbGVydHM6YX0pKX0pKX1mZXRjaEV4ZWN1dGlvbkRpZ2VzdHNGb3JBbGVydFR5cGVGb2N1cyhlKXtyZXR1cm4gZS5waXBlKFd0KHRoaXMuc3RvcmUuc2VsZWN0KHR5KSx0aGlzLnN0b3JlLnNlbGVjdChueSksdGhpcy5zdG9yZS5zZWxlY3QoamgpLHRoaXMuc3RvcmUuc2VsZWN0KER3KSx0aGlzLnN0b3JlLnNlbGVjdChWcykpLEwoKFtpLHIsbyxzLGEsbF0pPT57bGV0IHU9aS5hbGVydHNbMF0uZXhlY3V0aW9uX2luZGV4LGQ9eVUoTWF0aC5tYXgoMCx1LU1hdGguZmxvb3Ioby8yKSksTWF0aC5taW4odStNYXRoLmZsb29yKG8vMikscykscixzLGEucGFnZUxvYWRlZFNpemVzKTtyZXR1cm4gMD09PWQubGVuZ3RoP3tydW5JZDpsLGJlZ2luOjAsZW5kOjB9OntydW5JZDpsLGJlZ2luOmRbMF0qcixlbmQ6TWF0aC5taW4oYS5udW1FeGVjdXRpb25zLChkW2QubGVuZ3RoLTFdKzEpKnIpfX0pKX1sb2FkU291cmNlRmlsZUxpc3QoZSl7cmV0dXJuIGUucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdChWcyksdGhpcy5zdG9yZS5zZWxlY3QoVHJlKSksWWUoKFssaSxyXSk9Pm51bGwhPT1pJiZyLnN0YXRlIT09T2UuTE9BRElORyksa3QoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2godlAoKSkpLHhuKChbLGldKT0+dGhpcy5kYXRhU291cmNlLmZldGNoU291cmNlRmlsZUxpc3QoaSkucGlwZShrdChyPT57bGV0IG89W107ci5mb3JFYWNoKChbcyxhXSk9PntvLnB1c2goe2hvc3RfbmFtZTpzLGZpbGVfcGF0aDphfSl9KSx0aGlzLnN0b3JlLmRpc3BhdGNoKHlQKHtzb3VyY2VGaWxlczpvfSkpfSksTCgoKT0+e30pKSkpfW9uU291cmNlRmlsZUZvY3VzZWQoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGlpKEp2KSxXdCh0aGlzLnN0b3JlLnNlbGVjdChWcyksdGhpcy5zdG9yZS5zZWxlY3QoaFUpLHRoaXMuc3RvcmUuc2VsZWN0KFRQKSksTCgoW2UsaSxyLG9dKT0+KHtydW5JZDppLHN0YWNrRnJhbWU6ZS5zdGFja0ZyYW1lLGZpbGVJbmRleDpyLGZpbGVDb250ZW50Om99KSksWWUoKHtydW5JZDplLGZpbGVDb250ZW50Oml9KT0+bnVsbCE9PWUmJm51bGwhPT1pJiZpLmxvYWRTdGF0ZT09PU9lLk5PVF9MT0FERUQpLGt0KCh7c3RhY2tGcmFtZTplfSk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goYlAoe2hvc3RfbmFtZTplLmhvc3RfbmFtZSxmaWxlX3BhdGg6ZS5maWxlX3BhdGh9KSkpLHhuKCh7ZmlsZUluZGV4OmUscnVuSWQ6aX0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hTb3VyY2VGaWxlKGksZSkucGlwZShrdChyPT57dGhpcy5zdG9yZS5kaXNwYXRjaCh4UChyKSl9KSxMKCgpPT57fSkpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooUG8pLGooQ2UpLGooZVApKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxjb2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lXX0pLG59KSgpLHVvZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWVdfSksbn0pKCksRlA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lXX0pLG59KSgpLGRvZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsRlAsWmNdfSksbn0pKCkscG9lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHt9KSxufSkoKSxxaD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksTlA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLHFoXX0pLG59KSgpLGhvZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsTlBdfSksbn0pKCksZm9lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxOUF19KSxufSkoKSxtb2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLEZQXX0pLG59KSgpLGdvZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsbW9lLFBuLFdoXX0pLG59KSgpLF9vZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbY29lLE1lLGVjLGRvZSx1b2UscG9lLGhvZSxmb2UsaXJlLGdvZSx3ci5mb3JGZWF0dXJlKEV3LGxyZSkscm8uZm9yRmVhdHVyZShbbG9lXSksQnMuZm9yUGx1Z2luKGtQLG9vZSldfSksbn0pKCksTFA9YmUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIFBhbmUgQ2xvc2VkIiksQlA9YmUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIFBhbmUgVG9nZ2xlZCIpLFZQPWJlKCJbTWV0cmljc10gU2xpZGUgb3V0IHNldHRpbmdzIG1lbnUgdG9nZ2xlZCIpLEhQPWJlKCJbTWV0cmljc10gTWV0cmljcyBUYWcgTWV0YWRhdGEgUmVxdWVzdGVkIiksVVA9YmUoIltNZXRyaWNzXSBNZXRyaWNzIFRhZyBNZXRhZGF0YSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx6UD1iZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIE1ldGFkYXRhIEZhaWxlZCIpLGpQPWJlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5ncyBDaGFuZ2UgVG9vbHRpcCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEdQPShiZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgVG9nZ2xlIFNob3cgRGF0YSBEb3dubG9hZCIpLGJlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJZ25vcmUgT3V0bGllciIpKSxXUD1iZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgWCBBeGlzIFR5cGUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxxUD1iZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgQ2FyZCBXaWR0aCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFlQPWJlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFJlc2V0IENhcmQgV2lkdGgiKSxYUD1iZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgU2NhbGFyIFNtb290aGluZyIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFFQPWJlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFBhcnRpdGlvbiBOb24gTW9ub3RvbmljIFggVG9nZ2xlZCIpLEtQPWJlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBJbWFnZSBCcmlnaHRuZXNzIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWlA9YmUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEltYWdlIENvbnRyYXN0Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSlA9YmUoIltNZXRyaWNzXSBJbWFnZSBCcmlnaHRuZXNzIFNldHRpbmcgUmVzZXQiKSwkUD1iZSgiW01ldHJpY3NdIEltYWdlIENvbnRyYXN0IFNldHRpbmcgUmVzZXQiKSxlUj1iZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBUb2dnbGUgSW1hZ2UgU2hvdyBBY3R1YWwgU2l6ZSIpLHRSPWJlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBIaXN0b2dyYW0gTW9kZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG5SPWJlKCJbTWV0cmljc10gTXVsdGlwbGUgVGltZSBTZXJpZXMgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksaVI9YmUoIltNZXRyaWNzXSBGZXRjaCBUaW1lIFNlcmllcyBSZXF1ZXN0IEZhaWxlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHJSPWJlKCJbTWV0cmljc10gRmV0Y2ggVGltZSBTZXJpZXMgUmVzcG9uc2UgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksaXk9YmUoIltNZXRyaWNzXSBDYXJkIFZpc2liaWxpdHkgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG9SPWJlKCJbTWV0cmljc10gQ2FyZCBTdGVwIFNsaWRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksc1I9YmUoIltNZXRyaWNzXSBUYWcgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxhUj1iZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIEdyb3VwIEV4cGFuc2lvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkscnk9YmUoIltNZXRyaWNzXSBDYXJkIFBpbiBTdGF0ZSBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbFI9YmUoIltNZXRyaWNzXSBUb2dnbGUgVmlzaWJsZSBQbHVnaW4iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxjUj1iZSgiW01ldHJpY3NdIFRvZ2dsZSBTaG93IEFsbCBQbHVnaW5zIiksWWg9YmUoIltNZXRyaWNzXSBUaW1lIFNlbGVjdGlvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdm9lPWJlKCJbTWV0cmljc10gTGlua2VkIFRpbWUgU2VsZWN0aW9uIENsZWFyZWQiKSx1Uj1iZSgiW01ldHJpY3NdIExpbmtlZCBUaW1lIEVuYWJsZSBUb2dnbGUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx5b2U9YmUoIltNZXRyaWNzXSBTb3J0aW5nIERhdGEgVGFibGUgQnkgSGVhZGVyIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZFI9YmUoIltNZXRyaWNzXSBEYXRhIHRhYmxlIGNvbHVtbiBkcmFnZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksYm9lPWJlKCJbTWV0cmljc10gRGF0YSB0YWJsZSBjb2x1bW5zIGVkaXRlZCBpbiBlZGl0IG1lbnUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxwUj1iZSgiW01ldHJpY3NdIERhdGEgdGFibGUgY29sdW1uIHRvZ2dsZWQgaW4gZWRpdCBtZW51Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWGg9YmUoIltNZXRyaWNzXSBUaW1lIFNlbGVjdG9yIEVuYWJsZSBUb2dnbGUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxoUj1iZSgiW01ldHJpY3NdIFJhbmdlIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSk7ZnVuY3Rpb24ga3cobix0KXtsZXQgZT17fTtmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMobikpZVtpXT10KG5baV0saSk7cmV0dXJuIGV9dmFyIGNzPSgoKT0+KGZ1bmN0aW9uKG4pe24uTk9ORT0ibm8gYWZmb3JkYW5jZSIsbi5FWFRFTkRFRF9MSU5FPSJleHRlbmRlZExpbmUiLG4uRk9CPSJmb2IiLG4uRk9CX1JFTU9WRUQ9ImZvYlJlbW92ZWQiLG4uRk9CX1RFWFQ9ImZvYlRleHQiLG4uU0VUVElOR1NfVEVYVD0ic2V0dGluZ3NUZXh0IixuLlNFVFRJTkdTX1NMSURFUj0ic2V0dGluZ3NTbGlkZXIiLG4uQ0hBTkdFX1RPX1NJTkdMRT0iY2hhbmdlVG9TaW5nbGUiLG4uSElTVE9HUkFNX0NMSUNLX1RPX1JBTkdFPSJoaXN0b2dyYW1DbGlja1RvUmFuZ2UiLG4uRk9CX0FEREVEPSJmb2JBZGRlZCJ9KGNzfHwoY3M9e30pKSxjcykpKCksYmw9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJubyB0b2dnbGUgYWZmb3JkYW5jZSIsbi5GT0JfREVTRUxFQ1Q9ImZvYkRlc2VsZWN0IixuLkNIRUNLX0JPWD0iY2hlY2tCb3gifShibHx8KGJsPXt9KSksYmwpKSgpLHBhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5IT1JJWk9OVEFMPTBdPSJIT1JJWk9OVEFMIixuW24uVkVSVElDQUw9MV09IlZFUlRJQ0FMIn0ocGF8fChwYT17fSkpLHBhKSkoKTtmdW5jdGlvbiBmUihuKXtsZXQgdD1uZXcgTWFwLGU9bi5zbGljZSgpLnNvcnQoKGkscik9PkZ3KGkudGFnLHIudGFnKSk7Zm9yKGxldCBpIG9mIGUpe2xldCByPUJWZShpLnRhZyk7dC5oYXMocil8fHQuc2V0KHIse2dyb3VwTmFtZTpyLGl0ZW1zOltdfSksdC5nZXQocikuaXRlbXMucHVzaChpKX1yZXR1cm5bLi4udC52YWx1ZXMoKV19ZnVuY3Rpb24gQlZlKG4pe3JldHVybiBuLnNwbGl0KCIvIiwxKVswXX1mdW5jdGlvbiBGdyhuLHQpe2xldCBlPTAsaT0wO2Zvcig7Oyl7aWYoZT09PW4ubGVuZ3RoKXJldHVybiBpPT09dC5sZW5ndGg/MDotMTtpZihpPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYoZmcobltlXSkmJmZnKHRbaV0pKXtsZXQgcj1lLG89aTtlPXhvZShuLGUrMSksaT14b2UodCxpKzEpO2xldCBzPU51bWJlcihuLnNsaWNlKHIsZSkpLGE9TnVtYmVyKHQuc2xpY2UobyxpKSk7aWYoczxhKXJldHVybi0xO2lmKHM+YSlyZXR1cm4gMX1lbHNle2lmKGJVKG5bZV0pKXtpZighYlUodFtpXSkpcmV0dXJuLTF9ZWxzZXtpZihiVSh0W2ldKSlyZXR1cm4gMTtpZihuW2VdPHRbaV0pcmV0dXJuLTE7aWYobltlXT50W2ldKXJldHVybiAxfWUrKyxpKyt9fX1mdW5jdGlvbiB4b2Uobix0KXtsZXQgZTt2YXIgbzsobz1lfHwoZT17fSkpW28uTkFUVVJBTD0wXT0iTkFUVVJBTCIsb1tvLlJFQUw9MV09IlJFQUwiLG9bby5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixvW28uRVhQT05FTlQ9M109IkVYUE9ORU5UIjtsZXQgaT1lLk5BVFVSQUwscj10O2Zvcig7cjxuLmxlbmd0aDtyKyspaWYoaT09PWUuTkFUVVJBTCl7aWYoIi4iPT09bltyXSlpPWUuUkVBTDtlbHNlIGlmKCJlIj09PW5bcl18fCJFIj09PW5bcl0paT1lLkVYUE9ORU5UX1NJR047ZWxzZSBpZighZmcobltyXSkpYnJlYWt9ZWxzZSBpZihpPT09ZS5SRUFMKXtpZigiZSI9PT1uW3JdfHwiRSI9PT1uW3JdKWk9ZS5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIWZnKG5bcl0pKWJyZWFrfWVsc2UgaWYoaT09PWUuRVhQT05FTlRfU0lHTil7aWYoIWZnKG5bcl0pJiYiKyIhPT1uW3JdJiYiLSIhPT1uW3JdKWJyZWFrO2k9ZS5FWFBPTkVOVH1lbHNlIGlmKGk9PT1lLkVYUE9ORU5UJiYhZmcobltyXSkpYnJlYWs7cmV0dXJuIHJ9ZnVuY3Rpb24gZmcobil7cmV0dXJuIjAiPD1uJiZuPD0iOSJ9ZnVuY3Rpb24gYlUobil7cmV0dXJuIi8iPT09bnx8Zmcobil9dmFyIHN5PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5PUklHSU5BTD0wXT0iT1JJR0lOQUwiLG5bbi5ERVJJVkVEPTFdPSJERVJJVkVEIn0oc3l8fChzeT17fSkpLHN5KSkoKSxLdD0oKCk9PihmdW5jdGlvbihuKXtuLkNPTE9SPSJDT0xPUiIsbi5SRUxBVElWRV9USU1FPSJSRUxBVElWRV9USU1FIixuLlJVTj0iUlVOIixuLlNURVA9IlNURVAiLG4uVElNRT0iVElNRSIsbi5WQUxVRT0iVkFMVUUiLG4uU01PT1RIRUQ9IlNNT09USEVEIixuLlZBTFVFX0NIQU5HRT0iVkFMVUVfQ0hBTkdFIixuLlNUQVJUX1NURVA9IlNUQVJUX1NURVAiLG4uRU5EX1NURVA9IkVORF9TVEVQIixuLlNUQVJUX1ZBTFVFPSJTVEFSVF9WQUxVRSIsbi5FTkRfVkFMVUU9IkVORF9WQUxVRSIsbi5NSU5fVkFMVUU9Ik1JTl9WQUxVRSIsbi5NQVhfVkFMVUU9Ik1BWF9WQUxVRSIsbi5QRVJDRU5UQUdFX0NIQU5HRT0iUEVSQ0VOVEFHRV9DSEFOR0UifShLdHx8KEt0PXt9KSksS3QpKSgpLGdkPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TSU5HTEU9MF09IlNJTkdMRSIsbltuLlJBTkdFPTFdPSJSQU5HRSJ9KGdkfHwoZ2Q9e30pKSxnZCkpKCkseGw9KCgpPT4oZnVuY3Rpb24obil7bltuLkFTQ0VORElORz0wXT0iQVNDRU5ESU5HIixuW24uREVTQ0VORElORz0xXT0iREVTQ0VORElORyJ9KHhsfHwoeGw9e30pKSx4bCkpKCk7ZnVuY3Rpb24geFUobix0LGUpe2xldHtwbHVnaW46aSx0YWc6cixydW5JZDpvLHNhbXBsZTpzfT10W25dLGE9cnAoZSxpLHIscyk7aWYoYSl7aWYobnVsbCE9PW8mJmEucnVuVG9TZXJpZXMuaGFzT3duUHJvcGVydHkobykpe2xldCBjPWEucnVuVG9TZXJpZXNbb10ubGVuZ3RoO3JldHVybiBjPjA/Yy0xOm51bGx9bGV0IGw9T2JqZWN0LnZhbHVlcyhhLnJ1blRvU2VyaWVzKS5tYXAoYz0+Yy5sZW5ndGgpO2lmKGwubGVuZ3RoKXJldHVybiBNYXRoLm1heCguLi5sKS0xfXJldHVybiBudWxsfWZ1bmN0aW9uIEhWZShuLHQsZSxpKXtsZXQgcj17Li4udH07Zm9yKGxldCBvIGluIG4pe2lmKCFuLmhhc093blByb3BlcnR5KG8pKWNvbnRpbnVlO2xldCBzPXhVKG8sbixlKTtpZihudWxsPT09cyl7dC5oYXNPd25Qcm9wZXJ0eShvKSYmKHJbb109bnVsbCk7Y29udGludWV9bGV0IGE9dC5oYXNPd25Qcm9wZXJ0eShvKT90W29dLmluZGV4Om51bGwsbD14VShvLG4saSksYz1udWxsIT09YSYmYT09PWw7KG51bGwhPT1hJiZhPnN8fG51bGw9PT1hfHxjKSYmKHJbb109e2luZGV4OnMsaXNDbG9zZXN0OiExfSl9cmV0dXJuIHJ9ZnVuY3Rpb24gQ29lKG4pe2xldCB0PWt3KG4ucnVuVG9Mb2FkU3RhdGUsZT0+ZT09PU9lLkxPQURJTkc/T2UuTE9BRElORzpPZS5OT1RfTE9BREVEKTtyZXR1cm57Li4ubixydW5Ub0xvYWRTdGF0ZTp0fX1mdW5jdGlvbiBNb2Uobix0LGUsaSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFtuLHQsZXx8IiIsaV0pfXZhcntpbml0aWFsU3RhdGU6U29lLHJlZHVjZXJzOlVWZX09em0oe3RhZ01ldGFkYXRhTG9hZFN0YXRlOntzdGF0ZTpPZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSx0YWdNZXRhZGF0YTp7c2NhbGFyczp7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1RvUnVuczp7fX0saGlzdG9ncmFtczp7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1RvUnVuczp7fX0saW1hZ2VzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnUnVuU2FtcGxlZEluZm86e319fSxjYXJkTGlzdDpbXSxjYXJkVG9QaW5uZWRDb3B5Om5ldyBNYXAsY2FyZFRvUGlubmVkQ29weUNhY2hlOm5ldyBNYXAscGlubmVkQ2FyZFRvT3JpZ2luYWw6bmV3IE1hcCx1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpbXSxjYXJkTWV0YWRhdGFNYXA6e30sY2FyZFN0ZXBJbmRleDp7fSx0YWdGaWx0ZXI6IiIsdGFnR3JvdXBFeHBhbmRlZDpuZXcgTWFwLGxpbmtlZFRpbWVTZWxlY3Rpb246bnVsbCxsaW5rZWRUaW1lRW5hYmxlZDohMSxzdGVwU2VsZWN0b3JFbmFibGVkOiExLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDohMSxzaW5nbGVTZWxlY3Rpb25IZWFkZXJzOlt7dHlwZTpLdC5SVU4sZW5hYmxlZDohMH0se3R5cGU6S3QuU01PT1RIRUQsZW5hYmxlZDohMH0se3R5cGU6S3QuVkFMVUUsZW5hYmxlZDohMH0se3R5cGU6S3QuU1RFUCxlbmFibGVkOiEwfSx7dHlwZTpLdC5SRUxBVElWRV9USU1FLGVuYWJsZWQ6ITB9XSxyYW5nZVNlbGVjdGlvbkhlYWRlcnM6W3t0eXBlOkt0LlJVTixlbmFibGVkOiEwfSx7dHlwZTpLdC5NSU5fVkFMVUUsZW5hYmxlZDohMH0se3R5cGU6S3QuTUFYX1ZBTFVFLGVuYWJsZWQ6ITB9LHt0eXBlOkt0LlNUQVJUX1ZBTFVFLGVuYWJsZWQ6ITB9LHt0eXBlOkt0LkVORF9WQUxVRSxlbmFibGVkOiEwfSx7dHlwZTpLdC5WQUxVRV9DSEFOR0UsZW5hYmxlZDohMH0se3R5cGU6S3QuUEVSQ0VOVEFHRV9DSEFOR0UsZW5hYmxlZDohMH0se3R5cGU6S3QuU1RBUlRfU1RFUCxlbmFibGVkOiEwfSx7dHlwZTpLdC5FTkRfU1RFUCxlbmFibGVkOiEwfV0sZmlsdGVyZWRQbHVnaW5UeXBlczpuZXcgU2V0LHN0ZXBNaW5NYXg6e21pbjoxLzAsbWF4Oi0xLzB9fSx7aXNTZXR0aW5nc1BhbmVPcGVuOiEwLGlzU2xpZGVvdXRNZW51T3BlbjohMSx0aW1lU2VyaWVzRGF0YTp7c2NhbGFyczp7fSxoaXN0b2dyYW1zOnt9LGltYWdlczp7fX0sc2V0dGluZ3M6SUksc2V0dGluZ092ZXJyaWRlczp7fSx2aXNpYmxlQ2FyZE1hcDpuZXcgTWFwfSwobix0LGUpPT5Qcyh0LGUpP246ey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6e3N0YXRlOk9lLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHRhZ01ldGFkYXRhOntzY2FsYXJzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxoaXN0b2dyYW1zOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxpbWFnZXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX19LGNhcmRMaXN0OltdLGNhcmRNZXRhZGF0YU1hcDp7fSx2aXNpYmxlQ2FyZE1hcDpuZXcgTWFwfSksQ1U9U29lLHpWZT12cihTb2UsU2UoS18sKG4se3JvdXRlS2luZDp0LHBhcnRpYWxTdGF0ZTplfSk9PntpZih0IT09aGkuRVhQRVJJTUVOVCYmdCE9PWhpLkNPTVBBUkVfRVhQRVJJTUVOVClyZXR1cm4gbjtsZXQgaT1uZXcgU2V0O2ZvcihsZXQgdSBvZiBuLnBpbm5lZENhcmRUb09yaWdpbmFsLmtleXMoKSl7bGV0e3BsdWdpbjpkLHRhZzpwLHJ1bklkOmgsc2FtcGxlOmZ9PW4uY2FyZE1ldGFkYXRhTWFwW3VdO2kuYWRkKE1vZShkLHAsaCxmKSl9bGV0IHI9ZSxvPVtdO2ZvcihsZXQgdSBvZlsuLi5uLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzLC4uLnIubWV0cmljcy5waW5uZWRDYXJkc10pe2xldCBkPU1vZSh1LnBsdWdpbix1LnRhZyx1LnJ1bklkLHUuc2FtcGxlKTtpLmhhcyhkKXx8KGkuYWRkKGQpLG8ucHVzaCh1KSl9bGV0IHM9SzQobyxuLmNhcmRMaXN0LG4uY2FyZE1ldGFkYXRhTWFwLG4uY2FyZFRvUGlubmVkQ29weSxuLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxuLnBpbm5lZENhcmRUb09yaWdpbmFsLG4uY2FyZFN0ZXBJbmRleCksYT1yLm1ldHJpY3Muc21vb3RoaW5nLGw9bi5zZXR0aW5nT3ZlcnJpZGVzO2lmKE51bWJlci5pc0Zpbml0ZShhKSYmbnVsbCE9PWEpe2xldCB1PU1hdGgubWF4KDAsTWF0aC5taW4oLjk5OSxOdW1iZXIoYS50b1ByZWNpc2lvbigzKSkpKTtsPXsuLi5uLnNldHRpbmdPdmVycmlkZXMsc2NhbGFyU21vb3RoaW5nOnV9fWxldCBjPXsuLi5uLC4uLnMsc2V0dGluZ092ZXJyaWRlczpsfTtyZXR1cm4gbnVsbCE9PXIubWV0cmljcy50YWdGaWx0ZXImJihjLnRhZ0ZpbHRlcj1yLm1ldHJpY3MudGFnRmlsdGVyKSxjfSksU2UoWWMsKG4se3BhcnRpYWxTZXR0aW5nczp0fSk9PntsZXQgZT17fTt0LnRvb2x0aXBTb3J0JiZPYmplY3QudmFsdWVzKE9vKS5pbmNsdWRlcyh0LnRvb2x0aXBTb3J0KSYmKGUudG9vbHRpcFNvcnQ9dC50b29sdGlwU29ydCksIm51bWJlciI9PXR5cGVvZiB0LnRpbWVTZXJpZXNDYXJkTWluV2lkdGgmJihlLmNhcmRNaW5XaWR0aD10LnRpbWVTZXJpZXNDYXJkTWluV2lkdGgpLCJib29sZWFuIj09dHlwZW9mIHQuaWdub3JlT3V0bGllcnMmJihlLmlnbm9yZU91dGxpZXJzPXQuaWdub3JlT3V0bGllcnMpLCJudW1iZXIiPT10eXBlb2YgdC5zY2FsYXJTbW9vdGhpbmcmJihlLnNjYWxhclNtb290aGluZz10LnNjYWxhclNtb290aGluZyk7bGV0IGk9dC50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkPz9uLmlzU2V0dGluZ3NQYW5lT3BlbixyPXQuc3RlcFNlbGVjdG9yRW5hYmxlZD8/bi5zdGVwU2VsZWN0b3JFbmFibGVkLG89dC5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ/P24ucmFuZ2VTZWxlY3Rpb25FbmFibGVkLHM9dC5saW5rZWRUaW1lRW5hYmxlZD8/bi5saW5rZWRUaW1lRW5hYmxlZDtyZXR1cm57Li4ubixpc1NldHRpbmdzUGFuZU9wZW46aSxzdGVwU2VsZWN0b3JFbmFibGVkOnIscmFuZ2VTZWxlY3Rpb25FbmFibGVkOm8sbGlua2VkVGltZUVuYWJsZWQ6cyxzZXR0aW5nczp7Li4ubi5zZXR0aW5ncywuLi5lfX19KSxTZShhYSxGYSxuPT57bGV0IHQ9bi50YWdNZXRhZGF0YUxvYWRTdGF0ZS5zdGF0ZT09PU9lLkxPQURJTkc/T2UuTE9BRElORzpPZS5OT1RfTE9BREVELGU9a3cobi50aW1lU2VyaWVzRGF0YSwoaSxyKT0+a3coaSxvPT5mbChyKT9rdyhvLHM9PkNvZShzKSk6Q29lKG8pKSk7cmV0dXJuey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6dH0sdGltZVNlcmllc0RhdGE6ZX19KSxTZShIUCxuPT4oey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6T2UuTE9BRElOR319KSksU2UoelAsbj0+KHsuLi5uLHRhZ01ldGFkYXRhTG9hZFN0YXRlOnsuLi5uLnRhZ01ldGFkYXRhTG9hZFN0YXRlLHN0YXRlOk9lLkZBSUxFRH19KSksU2UoVVAsKG4se3RhZ01ldGFkYXRhOnR9KT0+e2xldCBlPXtzY2FsYXJzOndvZSh0LHJpLlNDQUxBUlMpLGhpc3RvZ3JhbXM6d29lKHQscmkuSElTVE9HUkFNUyksaW1hZ2VzOnRbcmkuSU1BR0VTXX0saT17fSxyPWZ1bmN0aW9uKG4pe2xldCB0PVtdO2ZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyhuKSl7bGV0IHIsaT1lO2lmKGZsKGkpKXtpZighbWwoaSkpdGhyb3cgbmV3IEVycm9yKCJNdWx0aS1ydW4sIHNhbXBsZWQgcGx1Z2luIHN1cHBvcnQgbm90IHlldCBpbXBsZW1lbnRlZCIpO3tsZXQgbz1uW2ldLnRhZ1J1blNhbXBsZWRJbmZvO2ZvcihsZXQgcyBvZiBPYmplY3Qua2V5cyhvKSlmb3IobGV0IGEgb2YgT2JqZWN0LmtleXMob1tzXSkpe2xldHttYXhTYW1wbGVzUGVyU3RlcDpsfT1vW3NdW2FdO2ZvcihsZXQgYz0wO2M8bDtjKyspdC5wdXNoKHtwbHVnaW46aSx0YWc6cyxydW5JZDphLHNhbXBsZTpjLG51bVNhbXBsZTpsfSl9fX1lbHNlIGlmKG1sKGkpKXtyPW5baV0udGFnVG9SdW5zO2ZvcihsZXQgbyBvZiBPYmplY3Qua2V5cyhyKSlmb3IobGV0IHMgb2YgcltvXSl0LnB1c2goe3BsdWdpbjppLHRhZzpvLHJ1bklkOnN9KX1lbHNle3I9bltpXS50YWdUb1J1bnM7Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKHIpKXQucHVzaCh7cGx1Z2luOmksdGFnOm8scnVuSWQ6bnVsbH0pfX1yZXR1cm4gdH0oZSksbz1bXTtmb3IobGV0IGggb2Ygcil7bGV0IGY9cGVlKGgpO2lbZl09aCxvLnB1c2goZil9bGV0IHM9bi50YWdHcm91cEV4cGFuZGVkO2lmKDA9PT1uLnRhZ0dyb3VwRXhwYW5kZWQuc2l6ZSl7bGV0IGY9ZlIoby5tYXAobT0+KHsuLi5pW21dLGNhcmRJZDptfSkpLmZpbHRlcihCb29sZWFuKSk7cz1uZXcgTWFwKG4udGFnR3JvdXBFeHBhbmRlZCk7Zm9yKGxldCBtIG9mIGYuc2xpY2UoMCwyKSlzLnNldChtLmdyb3VwTmFtZSwhMCl9bGV0e25leHRDYXJkVG9QaW5uZWRDb3B5OmEsbmV4dFBpbm5lZENhcmRUb09yaWdpbmFsOmwscGlubmVkQ2FyZE1ldGFkYXRhTWFwOmN9PWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uZXcgTWFwLHI9bmV3IE1hcCxvPXt9O3JldHVybiBuLmZvckVhY2goKHMsYSk9PnstMSE9PWUuaW5kZXhPZihhKSYmKGkuc2V0KGEscyksci5zZXQocyxhKSxvW3NdPXRbYV0pfSkse25leHRDYXJkVG9QaW5uZWRDb3B5OmksbmV4dFBpbm5lZENhcmRUb09yaWdpbmFsOnIscGlubmVkQ2FyZE1ldGFkYXRhTWFwOm99fShuLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxpLG8pLHU9ey4uLmksLi4uY30sZD1mdW5jdGlvbihuLHQpe2xldCBlPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKChbaSxyXSk9Pnt0W2ldJiYoZVtpXT1yKX0pLGV9KG4uY2FyZFN0ZXBJbmRleCx1KSxwPUs0KG4udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMsbyx1LGEsbi5jYXJkVG9QaW5uZWRDb3B5Q2FjaGUsbCxkKTtyZXR1cm57Li4ubiwuLi5wLHRhZ0dyb3VwRXhwYW5kZWQ6cyx0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7c3RhdGU6T2UuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSx0YWdNZXRhZGF0YTplLGNhcmRMaXN0Om99fSksU2Uoc1IsKG4se3RhZ0ZpbHRlcjp0fSk9Pih7Li4ubix0YWdGaWx0ZXI6dH0pKSxTZShqUCwobix7c29ydDp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsdG9vbHRpcFNvcnQ6dH19KSksU2UoR1Asbj0+e2xldCB0PSEobi5zZXR0aW5nT3ZlcnJpZGVzLmlnbm9yZU91dGxpZXJzPz9uLnNldHRpbmdzLmlnbm9yZU91dGxpZXJzKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaWdub3JlT3V0bGllcnM6dH19fSksU2UoV1AsKG4se3hBeGlzVHlwZTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMseEF4aXNUeXBlOnR9fSkpLFNlKFhQLChuLHtzbW9vdGhpbmc6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHNjYWxhclNtb290aGluZzp0fX0pKSxTZShRUCxuPT57bGV0IHQ9IShuLnNldHRpbmdPdmVycmlkZXMuc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWD8/bi5zZXR0aW5ncy5zY2FsYXJQYXJ0aXRpb25Ob25Nb25vdG9uaWNYKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWDp0fX19KSxTZShLUCwobix7YnJpZ2h0bmVzc0luTWlsbGk6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGltYWdlQnJpZ2h0bmVzc0luTWlsbGk6dH19KSksU2UoWlAsKG4se2NvbnRyYXN0SW5NaWxsaTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaW1hZ2VDb250cmFzdEluTWlsbGk6dH19KSksU2UoSlAsbj0+e2xldHtpbWFnZUJyaWdodG5lc3NJbk1pbGxpOnQsLi4uZX09bi5zZXR0aW5nT3ZlcnJpZGVzO3JldHVybnsuLi5uLHNldHRpbmdPdmVycmlkZXM6ZX19KSxTZSgkUCxuPT57bGV0e2ltYWdlQ29udHJhc3RJbk1pbGxpOnQsLi4uZX09bi5zZXR0aW5nT3ZlcnJpZGVzO3JldHVybnsuLi5uLHNldHRpbmdPdmVycmlkZXM6ZX19KSxTZShlUixuPT57bGV0IHQ9IShuLnNldHRpbmdPdmVycmlkZXMuaW1hZ2VTaG93QWN0dWFsU2l6ZT8/bi5zZXR0aW5ncy5pbWFnZVNob3dBY3R1YWxTaXplKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaW1hZ2VTaG93QWN0dWFsU2l6ZTp0fX19KSxTZSh0Uiwobix7aGlzdG9ncmFtTW9kZTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaGlzdG9ncmFtTW9kZTp0fX0pKSxTZShxUCwobix7Y2FyZE1pbldpZHRoOnR9KT0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxjYXJkTWluV2lkdGg6dH19KSksU2UoWVAsbj0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxjYXJkTWluV2lkdGg6bnVsbH19KSksU2UoblIsKG4se3JlcXVlc3RzOnR9KT0+e2lmKCF0Lmxlbmd0aClyZXR1cm4gbjtsZXQgZT17Li4ubi50aW1lU2VyaWVzRGF0YX07Zm9yKGxldCBpIG9mIHQpe2xldHtwbHVnaW46cix0YWc6byxzYW1wbGU6c309aTtlW3JdPUVJKGUscixvLHMpO2xldCBhPXJwKGUscixvLHMpLGw9ejQoaSk/W2kucnVuSWRdOnV2KG4udGFnTWV0YWRhdGEscixvLHMpO2EucnVuVG9Mb2FkU3RhdGU9VEkoT2UuTE9BRElORyxsLGEucnVuVG9Mb2FkU3RhdGUpfXJldHVybnsuLi5uLHRpbWVTZXJpZXNEYXRhOmV9fSksU2UoaVIsKG4se3JlcXVlc3Q6dH0pPT57bGV0IGU9ey4uLm4udGltZVNlcmllc0RhdGF9LHtwbHVnaW46aSx0YWc6cixzYW1wbGU6b309dDtlW2ldPUVJKGUsaSxyLG8pO2xldCBzPXJwKGUsaSxyLG8pLGE9ejQodCk/W3QucnVuSWRdOnV2KG4udGFnTWV0YWRhdGEsaSxyLG8pO3JldHVybiBzLnJ1blRvTG9hZFN0YXRlPVRJKE9lLkZBSUxFRCxhLHMucnVuVG9Mb2FkU3RhdGUpLHsuLi5uLHRpbWVTZXJpZXNEYXRhOmV9fSksU2UoclIsKG4se3Jlc3BvbnNlOnR9KT0+e2xldCBlPXsuLi5uLnN0ZXBNaW5NYXh9LGk9ey4uLm4udGltZVNlcmllc0RhdGF9LHtwbHVnaW46cix0YWc6byxydW5JZDpzLHNhbXBsZTphfT10O2lbcl09RUkoaSxyLG8sYSk7bGV0IGw9cnAoaSxyLG8sYSk7aWYoYkkodCkpe2xldCB1PXM/W3NdOnV2KG4udGFnTWV0YWRhdGEscixvLGEpO2wucnVuVG9Mb2FkU3RhdGU9VEkoT2UuRkFJTEVELHUsbC5ydW5Ub0xvYWRTdGF0ZSl9ZWxzZXtsZXQgdT10LnJ1blRvU2VyaWVzO2wucnVuVG9TZXJpZXM9ey4uLmwucnVuVG9TZXJpZXN9LGwucnVuVG9Mb2FkU3RhdGU9ey4uLmwucnVuVG9Mb2FkU3RhdGV9O2ZvcihsZXQgZCBpbiB1KWlmKHUuaGFzT3duUHJvcGVydHkoZCkpe2wucnVuVG9TZXJpZXNbZF09dVtkXSxsLnJ1blRvTG9hZFN0YXRlW2RdPU9lLkxPQURFRDtmb3IobGV0IHAgb2YgdVtkXSllLm1pbj1NYXRoLm1pbihlLm1pbixwLnN0ZXApLGUubWF4PU1hdGgubWF4KGUubWF4LHAuc3RlcCl9fXJldHVybnsuLi5uLHRpbWVTZXJpZXNEYXRhOmksY2FyZFN0ZXBJbmRleDpIVmUobi5jYXJkTWV0YWRhdGFNYXAsbi5jYXJkU3RlcEluZGV4LGksbi50aW1lU2VyaWVzRGF0YSksc3RlcE1pbk1heDplfX0pLFNlKG9SLChuLHtjYXJkSWQ6dCxzdGVwSW5kZXg6ZX0pPT57bGV0IGk9eFUodCxuLmNhcmRNZXRhZGF0YU1hcCxuLnRpbWVTZXJpZXNEYXRhKSxyPWU7cmV0dXJuIG51bGw9PT1pP3I9bnVsbDplPmkmJihyPWkpLHsuLi5uLGNhcmRTdGVwSW5kZXg6ey4uLm4uY2FyZFN0ZXBJbmRleCxbdF06e2luZGV4OnIsaXNDbG9zZXN0OiExfX19fSksU2UoYVIsKG4se3RhZ0dyb3VwOnR9KT0+e2xldCBlPW5ldyBNYXAobi50YWdHcm91cEV4cGFuZGVkKTtyZXR1cm4gZS5zZXQodCwhZS5nZXQodCkpLHsuLi5uLHRhZ0dyb3VwRXhwYW5kZWQ6ZX19KSxTZShpeSwobix7ZW50ZXJlZENhcmRzOnQsZXhpdGVkQ2FyZHM6ZX0pPT57aWYoIXQubGVuZ3RoJiYhZS5sZW5ndGgpcmV0dXJuIG47bGV0IGk9bmV3IE1hcChuLnZpc2libGVDYXJkTWFwKTtyZXR1cm4gdC5mb3JFYWNoKCh7ZWxlbWVudElkOnIsY2FyZElkOm99KT0+e2xldCBzPWkuZ2V0KHIpPz9udWxsO2lmKG51bGwhPT1zJiZzIT09byl0aHJvdyBuZXcgRXJyb3IoIkEgRE9NIGVsZW1lbnQgY2Fubm90IGJlIHJldXNlZCBmb3IgbW9yZSB0aGFuIDEgdW5pcXVlIGNhcmQgbWV0YWRhdGEiKTtpLnNldChyLG8pfSksZS5mb3JFYWNoKCh7ZWxlbWVudElkOnJ9KT0+e2kuZGVsZXRlKHIpfSksey4uLm4sdmlzaWJsZUNhcmRNYXA6aX19KSxTZShyeSwobix7Y2FyZElkOnR9KT0+e2xldCBlPW4ucGlubmVkQ2FyZFRvT3JpZ2luYWwuaGFzKHQpLGk9IWUmJiFuLmNhcmRUb1Bpbm5lZENvcHkuaGFzKHQpO2lmKGkmJiFESShuKSlyZXR1cm4gbjtsZXQgcj1uZXcgTWFwKG4uY2FyZFRvUGlubmVkQ29weSksbz1uZXcgTWFwKG4uY2FyZFRvUGlubmVkQ29weUNhY2hlKSxzPW5ldyBNYXAobi5waW5uZWRDYXJkVG9PcmlnaW5hbCksYT17Li4ubi5jYXJkTWV0YWRhdGFNYXB9LGw9ey4uLm4uY2FyZFN0ZXBJbmRleH07aWYoZSl7bGV0IGM9bi5waW5uZWRDYXJkVG9PcmlnaW5hbC5nZXQodCk7ci5kZWxldGUoYyksby5kZWxldGUoYykscy5kZWxldGUodCksZGVsZXRlIGFbdF0sZGVsZXRlIGxbdF19ZWxzZSBpZihpKXtsZXQgYz1aNCh0LHIsbyxzLGwsYSk7cj1jLmNhcmRUb1Bpbm5lZENvcHksbz1jLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxzPWMucGlubmVkQ2FyZFRvT3JpZ2luYWwsYT1jLmNhcmRNZXRhZGF0YU1hcCxsPWMuY2FyZFN0ZXBJbmRleH1lbHNle2xldCBjPW4uY2FyZFRvUGlubmVkQ29weS5nZXQodCk7ci5kZWxldGUodCksby5kZWxldGUodCkscy5kZWxldGUoYyksZGVsZXRlIGFbY10sZGVsZXRlIGxbY119cmV0dXJuey4uLm4sY2FyZE1ldGFkYXRhTWFwOmEsY2FyZFN0ZXBJbmRleDpsLGNhcmRUb1Bpbm5lZENvcHk6cixjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6byxwaW5uZWRDYXJkVG9PcmlnaW5hbDpzfX0pLFNlKHVSLG49PntsZXQgdD0hbi5saW5rZWRUaW1lRW5hYmxlZCxlPXsuLi5uLmNhcmRTdGVwSW5kZXh9LGk9bi5saW5rZWRUaW1lU2VsZWN0aW9uLHI9bi5zdGVwU2VsZWN0b3JFbmFibGVkO2lmKHQpe2xldHttaW46b309bi5zdGVwTWluTWF4LHM9bz09PTEvMD8wOm87aT1uLmxpbmtlZFRpbWVTZWxlY3Rpb24/P3tzdGFydDp7c3RlcDpzfSxlbmQ6bnVsbH0sZT1KNChuLmNhcmRTdGVwSW5kZXgsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSxpKSxyPXR9cmV0dXJuey4uLm4sY2FyZFN0ZXBJbmRleDplLGxpbmtlZFRpbWVFbmFibGVkOnQsbGlua2VkVGltZVNlbGVjdGlvbjppLHN0ZXBTZWxlY3RvckVuYWJsZWQ6cn19KSxTZShoUixuPT57bGV0IHQ9IW4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkLGU9bi5zdGVwU2VsZWN0b3JFbmFibGVkLGk9bi5saW5rZWRUaW1lU2VsZWN0aW9uO3JldHVybiB0PyhlPXQsaXx8KGk9e3N0YXJ0OntzdGVwOm4uc3RlcE1pbk1heC5taW59LGVuZDp7c3RlcDpuLnN0ZXBNaW5NYXgubWF4fX0pLGkuZW5kfHwoaT17Li4uaSxlbmQ6e3N0ZXA6bi5zdGVwTWluTWF4Lm1heH19KSk6aSYmKGk9ey4uLmksZW5kOm51bGx9KSx7Li4ubixzdGVwU2VsZWN0b3JFbmFibGVkOmUscmFuZ2VTZWxlY3Rpb25FbmFibGVkOnQsbGlua2VkVGltZVNlbGVjdGlvbjppfX0pLFNlKFloLChuLHQpPT57bGV0e3RpbWVTZWxlY3Rpb246ZX09dCxpPWUuc3RhcnQuc3RlcCxyPWUuZW5kPy5zdGVwLHM9bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ7bi5saW5rZWRUaW1lRW5hYmxlZCYmKHM9dm9pZCAwIT09cik7bGV0IGE9e3N0YXJ0OntzdGVwOml9LGVuZDp2b2lkIDA9PT1yP251bGw6e3N0ZXA6aT5yP2k6cn19LGw9SjQobi5jYXJkU3RlcEluZGV4LG4uY2FyZE1ldGFkYXRhTWFwLG4udGltZVNlcmllc0RhdGEsYSk7cmV0dXJuey4uLm4sbGlua2VkVGltZVNlbGVjdGlvbjphLGNhcmRTdGVwSW5kZXg6bCxyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6c319KSxTZShYaCwobix7YWZmb3JkYW5jZTp0fSk9PntpZighbi5saW5rZWRUaW1lRW5hYmxlZCYmdCE9PWJsLkNIRUNLX0JPWClyZXR1cm57Li4ubn07bGV0IGU9IW4uc3RlcFNlbGVjdG9yRW5hYmxlZCxpPWUmJm4ubGlua2VkVGltZUVuYWJsZWQscj1lJiZuLnJhbmdlU2VsZWN0aW9uRW5hYmxlZDtyZXR1cm57Li4ubixsaW5rZWRUaW1lRW5hYmxlZDppLHN0ZXBTZWxlY3RvckVuYWJsZWQ6ZSxyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6cn19KSxTZSh2b2Usbj0+KHsuLi5uLGxpbmtlZFRpbWVTZWxlY3Rpb246bnVsbH0pKSxTZShkUiwobix7bmV3T3JkZXI6dH0pPT5uLnJhbmdlU2VsZWN0aW9uRW5hYmxlZD97Li4ubixyYW5nZVNlbGVjdGlvbkhlYWRlcnM6dH06ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczp0fSksU2UoYm9lLChuLHtkYXRhVGFibGVNb2RlOnQsaGVhZGVyczplfSk9PntsZXQgaT1bXSxyPVtdO3JldHVybiBlLmZvckVhY2gobz0+e28uZW5hYmxlZD9pLnB1c2gobyk6ci5wdXNoKG8pfSksdD09PWdkLlJBTkdFP3suLi5uLHJhbmdlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX06ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX19KSxTZShwUiwobix7ZGF0YVRhYmxlTW9kZTp0LGhlYWRlclR5cGU6ZX0pPT57bGV0IGk9dD09PWdkLlJBTkdFP24ucmFuZ2VTZWxlY3Rpb25IZWFkZXJzOm4uc2luZ2xlU2VsZWN0aW9uSGVhZGVycyxyPWkuZmluZEluZGV4KGE9PmEudHlwZT09PWUpLG89ZnVuY3Rpb24obil7bGV0IHQ9MDtyZXR1cm4gbi5mb3JFYWNoKGU9PntlLmVuYWJsZWQmJnQrK30pLHR9KGkpO2lbcl0uZW5hYmxlZCYmby0tO2xldCBzPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1bLi4uZV07cmV0dXJuIGkuc3BsaWNlKG4sMSksaS5zcGxpY2UodCwwLGVbbl0pLGl9KHIsbyxpKTtyZXR1cm4gc1tvXT17dHlwZTpzW29dLnR5cGUsZW5hYmxlZDohc1tvXS5lbmFibGVkfSx0PT09Z2QuUkFOR0U/ey4uLm4scmFuZ2VTZWxlY3Rpb25IZWFkZXJzOnN9OnsuLi5uLHNpbmdsZVNlbGVjdGlvbkhlYWRlcnM6c319KSxTZShsUiwobix7cGx1Z2luOnR9KT0+e2xldCBlPW5ldyBTZXQobi5maWx0ZXJlZFBsdWdpblR5cGVzKTtyZXR1cm4gZS5oYXModCk/ZS5kZWxldGUodCk6ZS5hZGQodCksT2JqZWN0LnZhbHVlcyhyaSkuZXZlcnkoaT0+ZS5oYXMoaSkpJiYoZT1uZXcgU2V0KSx7Li4ubixmaWx0ZXJlZFBsdWdpblR5cGVzOmV9fSksU2UoY1Isbj0+KHsuLi5uLGZpbHRlcmVkUGx1Z2luVHlwZXM6bmV3IFNldH0pKSxTZShCUCxuPT4oey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOiFuLmlzU2V0dGluZ3NQYW5lT3Blbn0pKSxTZShMUCxuPT4oey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOiExfSkpLFNlKFZQLG49Pih7Li4ubixpc1NsaWRlb3V0TWVudU9wZW46IW4uaXNTbGlkZW91dE1lbnVPcGVufSkpKTtmdW5jdGlvbiBFb2Uobix0KXtyZXR1cm4gam0oelZlLFVWZSkobix0KX1mdW5jdGlvbiB3b2Uobix0KXtyZXR1cm57dGFnRGVzY3JpcHRpb25zOm5bdF0udGFnRGVzY3JpcHRpb25zLHRhZ1RvUnVuczpqVmUoblt0XS5ydW5UYWdJbmZvKX19ZnVuY3Rpb24galZlKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBpbiBuKWZvcihsZXQgaSBvZiBuW2VdKXRbaV09Wy4uLnRbaV18fFtdLGVdO3JldHVybiB0fXZhciBxVmU9SihiaCx0Yywobix0LGUpPT50P3suLi50LGxvYWRTdGF0ZTpuLGlkOmV9Om51bGwpLFRvZT1iZSgiW01ldHJpY3MgRWZmZWN0c10gSW5pdCIpLERvZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuZGF0YVNvdXJjZT1yLHRoaXMuZGFzaGJvYXJkU2hvd25XaXRob3V0RGF0YSQ9dGhpcy5hY3Rpb25zJC5waXBlKGlpKFRvZSxadSxVbSxKbCksV3QodGhpcy5zdG9yZS5zZWxlY3QoUnMpLHRoaXMuc3RvcmUuc2VsZWN0KFVNKSksWWUoKFssbyxzXSk9Pm89PT1CTSYmcy5zdGF0ZT09PU9lLk5PVF9MT0FERUQpKSx0aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kPXRoaXMuYWN0aW9ucyQucGlwZShpaShhYSxGYSksV3QodGhpcy5zdG9yZS5zZWxlY3QoUnMpKSxZZSgoWyxvXSk9Pm89PT1CTSkpLHRoaXMubG9hZFRhZ01ldGFkYXRhJD1KdCh0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkLHRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQpLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoVU0pLHRoaXMuc3RvcmUuc2VsZWN0KFdvKSksWWUoKFssbyxzXSk9Pm8uc3RhdGUhPT1PZS5MT0FESU5HJiZudWxsIT09cyksa3QoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEhQKCkpfSksdWkoKFssLG9dKT0+dGhpcy5kYXRhU291cmNlLmZldGNoVGFnTWV0YWRhdGEobykucGlwZShrdChzPT57dGhpcy5zdG9yZS5kaXNwYXRjaChVUCh7dGFnTWV0YWRhdGE6c30pKX0pLGZvKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaCh6UCgpKSxYdChudWxsKSkpKSkpLHRoaXMudmlzaWJsZUNhcmRzV2l0aG91dERhdGFDaGFuZ2VkJD10aGlzLmFjdGlvbnMkLnBpcGUoaWkoaXkpLFd0KHRoaXMuZ2V0VmlzaWJsZUNhcmRGZXRjaEluZm9zKCkpLEwoKFssb10pPT5vLmZpbHRlcihzPT5zLmxvYWRTdGF0ZT09PU9lLk5PVF9MT0FERUQpKSksdGhpcy52aXNpYmxlQ2FyZHNSZWxvYWRlZCQ9dGhpcy5yZWxvYWRSZXF1ZXN0ZWRXaGlsZVNob3duJC5waXBlKFd0KHRoaXMuZ2V0VmlzaWJsZUNhcmRGZXRjaEluZm9zKCkpLEwoKFssb10pPT5vLmZpbHRlcihzPT5zLmxvYWRTdGF0ZSE9PU9lLkxPQURJTkcpKSksdGhpcy5sb2FkVGltZVNlcmllcyQ9SnQodGhpcy52aXNpYmxlQ2FyZHNXaXRob3V0RGF0YUNoYW5nZWQkLHRoaXMudmlzaWJsZUNhcmRzUmVsb2FkZWQkKS5waXBlKFllKG89Pm8ubGVuZ3RoPjApLFd0KHRoaXMuc3RvcmUuc2VsZWN0KFdvKS5waXBlKFllKG89Pm51bGwhPT1vKSkpLHhuKChbbyxzXSk9PnRoaXMuZmV0Y2hUaW1lU2VyaWVzRm9yQ2FyZHMobyxzKSkpLHRoaXMuZGF0YUVmZmVjdHMkPWNyKCgpPT5KdCh0aGlzLmxvYWRUYWdNZXRhZGF0YSQsdGhpcy5sb2FkVGltZVNlcmllcyQpLHtkaXNwYXRjaDohMX0pfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIFRvZSgpfWdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChtZWUpLnBpcGUodWkoaT0+aS5zaXplP2xyKFsuLi5pXS5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3QocVZlLG8pLnBpcGUoUXQoMSkpKSk6WHQoW10pKSxMKGk9PmkuZmlsdGVyKEJvb2xlYW4pKSl9ZmV0Y2hUaW1lU2VyaWVzKGUpe3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hUaW1lU2VyaWVzKFtlXSkucGlwZShrdChpPT57bGV0IHI9aS5maWx0ZXIoYkkpO3IubGVuZ3RoJiZjb25zb2xlLmVycm9yKCJUaW1lIHNlcmllcyByZXNwb25zZSBjb250YWluZWQgZXJyb3JzOiIsciksdGhpcy5zdG9yZS5kaXNwYXRjaChyUih7cmVzcG9uc2U6aVswXX0pKX0pLGZvKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaChpUih7cmVxdWVzdDplfSkpLFh0KG51bGwpKSkpfWZldGNoVGltZVNlcmllc0ZvckNhcmRzKGUsaSl7cmV0dXJuIFh0KGUubWFwKG89PntsZXR7cGx1Z2luOnMsdGFnOmEscnVuSWQ6bCxzYW1wbGU6Y309byx1PW1sKHMpP3twbHVnaW46cyx0YWc6YSxydW5JZDpsfTp7cGx1Z2luOnMsdGFnOmEsZXhwZXJpbWVudElkczppfTtyZXR1cm4gdm9pZCAwIT09YyYmKHUuc2FtcGxlPWMpLHV9KSkucGlwZShrdChvPT57dGhpcy5zdG9yZS5kaXNwYXRjaChuUih7cmVxdWVzdHM6b30pKX0pLHhuKG89Pkp0KC4uLm8ubWFwKGE9PnRoaXMuZmV0Y2hUaW1lU2VyaWVzKGEpKSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihQbyksaihDZSksaigkdSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLE1VPW5ldyBwZSgiTWV0cmljcyBTdG9yZSBDb25maWciKSx3VT1uZXcgcGUoIk1ldHJpY3MgSW5pdGlhbCBTZXR0aW5ncyBDb25maWciKTtmdW5jdGlvbiBBb2Uobil7cmV0dXJuIG4/e2luaXRpYWxTdGF0ZTp7Li4uQ1Usc2V0dGluZ3M6bn19Ontpbml0aWFsU3RhdGU6Q1V9fXZhciBDbD0oKCk9PihmdW5jdGlvbihuKXtuW24uTEVGVD0xXT0iTEVGVCIsbltuLlJJR0hUPTJdPSJSSUdIVCIsbltuLk1JRERMRT00XT0iTUlERExFIixuW24uRk9VUlRIPThdPSJGT1VSVEgiLG5bbi5GSUZUSD0zMl09IkZJRlRIIn0oQ2x8fChDbD17fSkpLENsKSkoKSxJb2U9MDtmdW5jdGlvbiBZVmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJidXR0b24iLDMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkuZXhwYW5kU2lkZWJhcigpKX0pLE8oMSwibWF0LWljb24iLDQpLHYoKX19ZnVuY3Rpb24gWFZlKG4sdCl7aWYoMSZuJiYoXygwLCJuYXYiLDUpLEIoMSwiYXN5bmMiKSxWbigyLDEpLHYoKSksMiZuKXtsZXQgZT1TKCk7UHQoIndpZHRoIixVKDEsNCxlLndpZHRoJCksIiUiKSgibWluLXdpZHRoIixlLk1JTklNVU1fU0lERUJBUl9XSURUSF9JTl9QWCwicHgiKX19ZnVuY3Rpb24gUVZlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2Iiw2KSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5yZXNpemVHcmFiYmVkKCkpfSksdigpfX12YXIgS1ZlPVtbWyIiLCJtYWluIiwiIl1dLFtbIiIsInNpZGViYXIiLCIiXV1dLFpWZT1bIlttYWluXSIsIltzaWRlYmFyXSJdLFJvZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMud2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KGlJKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IGtlLHRoaXMucmVzaXppbmc9ITEsdGhpcy5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFg9NzUsX2koaS5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiKS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSksWWUoKCk9PnRoaXMucmVzaXppbmcpKS5zdWJzY3JpYmUocj0+e2lmKChyLmJ1dHRvbnMmQ2wuTEVGVCkhPT1DbC5MRUZUKXJldHVybiB2b2lkKHRoaXMucmVzaXppbmc9ITEpO3IucHJldmVudERlZmF1bHQoKTtsZXR7d2lkdGg6b309aS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc3RvcmUuZGlzcGF0Y2gobnYoe3dpZHRoSW5QZXJjZW50OnIuY2xpZW50WDw9dGhpcy5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFg/MDpyLmNsaWVudFgvbyoxMDB9KSl9KSxfaShpLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlc2l6aW5nPSExfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfXJlc2l6ZUdyYWJiZWQoKXt0aGlzLnJlc2l6aW5nPSEwfWV4cGFuZFNpZGViYXIoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKG52KHt3aWR0aEluUGVyY2VudDoyMH0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSksTShSZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhc2hib2FyZC1sYXlvdXQiXV0sbmdDb250ZW50U2VsZWN0b3JzOlpWZSxkZWNsczo3LHZhcnM6OSxjb25zdHM6W1siY2xhc3MiLCJleHBhbmQiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNpZGViYXIiLDMsIndpZHRoIiwibWluV2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwicmVzaXplciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWzEsImV4cGFuZCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJleHBhbmRfbW9yZV8yNHB4Il0sWzEsInNpZGViYXIiXSxbMSwicmVzaXplciIsMywibW91c2Vkb3duIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoS1ZlKSxFKDAsWVZlLDIsMCwiYnV0dG9uIiwwKSxCKDEsImFzeW5jIiksRSgyLFhWZSwzLDYsIm5hdiIsMSksQigzLCJhc3luYyIpLEUoNCxRVmUsMSwwLCJkaXYiLDIpLEIoNSwiYXN5bmMiKSxWbig2KSksMiZlJiYoeSgibmdJZiIsMD09PVUoMSwzLGkud2lkdGgkKSksQygyKSx5KCJuZ0lmIixVKDMsNSxpLndpZHRoJCk+MCksQygyKSx5KCJuZ0lmIixVKDUsNyxpLndpZHRoJCk+MCkpfSxkZXBlbmRlbmNpZXM6W0JlLEd0LEdlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjgwdnd9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdLCAuZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ViZWJlYjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleDowIDA7anVzdGlmeS1zZWxmOnN0cmV0Y2h9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucmVzaXplcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fS5leHBhbmRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIwcHh9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjAgMnB4O2N1cnNvcjpldy1yZXNpemU7Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNofS5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0ucmVzaXplcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNjY2M7b3V0bGluZTozcHggc29saWQgI2NjYzt6LWluZGV4OjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVyLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucmVzaXplcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7b3V0bGluZS1jb2xvcjojNzc3O2JvcmRlci1jb2xvcjojNzc3fS5leHBhbmRbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDFweCAwIDA7Y29sb3I6aW5oZXJpdDtjb250YWluOmNvbnRlbnQ7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNoO3BhZGRpbmc6MH0uZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxTVT1uZXcgV2Vha01hcCxOdz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucm9vdD10LHRoaXMuYnVmZmVyPWUsdGhpcy5kZXN0cm95ZWRUYXJnZXRzPW5ldyBXZWFrU2V0fWluaXRpYWxpemUodCl7aWYodGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcilyZXR1cm47dGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjaz10O2xldCBlPXt0aHJlc2hvbGQ6MCxyb290OnRoaXMucm9vdD8/bnVsbH07dGhpcy5idWZmZXImJihlLnJvb3RNYXJnaW49dGhpcy5idWZmZXIpLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRoaXMub25DYXJkSW50ZXJzZWN0aW9uLmJpbmQodGhpcyksZSl9YWRkKHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHQpfXdpbGxEZXN0cm95KHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5kZXN0cm95ZWRUYXJnZXRzLmFkZCh0KX1lbnN1cmVJbml0aWFsaXplZCgpe2lmKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKXRocm93IG5ldyBFcnJvcigiQ2FyZE9ic2VydmVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSIpO3JldHVybiEwfW9uQ2FyZEludGVyc2VjdGlvbih0KXt0LnNvcnQoKHIsbyk9PnIudGltZS1vLnRpbWUpO2xldCBlPW5ldyBTZXQsaT1uZXcgU2V0O2ZvcihsZXR7aXNJbnRlcnNlY3Rpbmc6cix0YXJnZXQ6b31vZiB0KXI/KGUuYWRkKG8pLGkuZGVsZXRlKG8pKTooZS5kZWxldGUobyksaS5hZGQobykpLHRoaXMuZGVzdHJveWVkVGFyZ2V0cy5oYXMobykmJiFyJiYodGhpcy5kZXN0cm95ZWRUYXJnZXRzLmRlbGV0ZShvKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLnVub2JzZXJ2ZShvKSk7dGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjayhlLGkpfW9uQ2FyZEludGVyc2VjdGlvbkZvclRlc3QodCl7dGhpcy5vbkNhcmRJbnRlcnNlY3Rpb24odCl9fSxPb2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuc3RvcmU9aX1vbkNhcmRJbnRlcnNlY3Rpb24oZSxpKXtsZXQgcj1bLi4uZV0ubWFwKHM9PntsZXQgYT1TVS5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSksbz1bLi4uaV0ubWFwKHM9PntsZXQgYT1TVS5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSk7dGhpcy5zdG9yZS5kaXNwYXRjaChpeSh7ZW50ZXJlZENhcmRzOnIsZXhpdGVkQ2FyZHM6b30pKX1uZ09uSW5pdCgpe2xldCBlPXRoaXMuaG9zdC5uYXRpdmVFbGVtZW50O1NVLnNldChlLHtlbGVtZW50SWQ6KElvZSsrLFN5bWJvbChJb2UpKSxjYXJkSWQ6dGhpcy5jYXJkSWR9KSx0aGlzLmNhcmRPYnNlcnZlcnx8KHRoaXMuY2FyZE9ic2VydmVyPW5ldyBOdyksdGhpcy5jYXJkT2JzZXJ2ZXIuaW5pdGlhbGl6ZSh0aGlzLm9uQ2FyZEludGVyc2VjdGlvbi5iaW5kKHRoaXMpKSx0aGlzLmNhcmRPYnNlcnZlci5hZGQoZSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNhcmRPYnNlcnZlciYmdGhpcy5jYXJkT2JzZXJ2ZXIud2lsbERlc3Ryb3kodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQpfWhvc3RGb3JUZXN0KCl7cmV0dXJuIHRoaXMuaG9zdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSksTShDZSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjYXJkTGF6eUxvYWRlciIsIiJdXSxpbnB1dHM6e2NhcmRJZDpbImNhcmRMYXp5TG9hZGVyIiwiY2FyZElkIl0sY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifX0pLG59KSgpLGU1ZT1bImJ1dHRvbiJdLHQ1ZT1bIioiXSxrb2U9bmV3IHBlKCJNQVRfQlVUVE9OX1RPR0dMRV9ERUZBVUxUX09QVElPTlMiKSxGb2U9bmV3IHBlKCJNYXRCdXR0b25Ub2dnbGVHcm91cCIpLG41ZT17cHJvdmlkZTpObyx1c2VFeGlzdGluZzpKbigoKT0+RVUpLG11bHRpOiEwfSxOb2U9MCxtUj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc291cmNlPXQsdGhpcy52YWx1ZT1lfX0sRVU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX2NoYW5nZURldGVjdG9yPWUsdGhpcy5fdmVydGljYWw9ITEsdGhpcy5fbXVsdGlwbGU9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl9uYW1lPSJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC0iK05vZSsrLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEcsdGhpcy5jaGFuZ2U9bmV3IEcsdGhpcy5hcHBlYXJhbmNlPWkmJmkuYXBwZWFyYW5jZT9pLmFwcGVhcmFuY2U6InN0YW5kYXJkIn1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfXNldCBuYW1lKGUpe3RoaXMuX25hbWU9ZSx0aGlzLl9tYXJrQnV0dG9uc0ZvckNoZWNrKCl9Z2V0IHZlcnRpY2FsKCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2FsfXNldCB2ZXJ0aWNhbChlKXt0aGlzLl92ZXJ0aWNhbD1SdChlKX1nZXQgdmFsdWUoKXtsZXQgZT10aGlzLl9zZWxlY3Rpb25Nb2RlbD90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDpbXTtyZXR1cm4gdGhpcy5tdWx0aXBsZT9lLm1hcChpPT5pLnZhbHVlKTplWzBdP2VbMF0udmFsdWU6dm9pZCAwfXNldCB2YWx1ZShlKXt0aGlzLl9zZXRTZWxlY3Rpb25CeVZhbHVlKGUpLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKX1nZXQgc2VsZWN0ZWQoKXtsZXQgZT10aGlzLl9zZWxlY3Rpb25Nb2RlbD90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDpbXTtyZXR1cm4gdGhpcy5tdWx0aXBsZT9lOmVbMF18fG51bGx9Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfXNldCBtdWx0aXBsZShlKXt0aGlzLl9tdWx0aXBsZT1SdChlKSx0aGlzLl9tYXJrQnV0dG9uc0ZvckNoZWNrKCl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD1SdChlKSx0aGlzLl9tYXJrQnV0dG9uc0ZvckNoZWNrKCl9bmdPbkluaXQoKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbD1uZXcgQWgodGhpcy5tdWx0aXBsZSx2b2lkIDAsITEpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdCguLi50aGlzLl9idXR0b25Ub2dnbGVzLmZpbHRlcihlPT5lLmNoZWNrZWQpKX13cml0ZVZhbHVlKGUpe3RoaXMudmFsdWU9ZSx0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZX1fZW1pdENoYW5nZUV2ZW50KGUpe2xldCBpPW5ldyBtUihlLHRoaXMudmFsdWUpO3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4oaS52YWx1ZSksdGhpcy5jaGFuZ2UuZW1pdChpKX1fc3luY0J1dHRvblRvZ2dsZShlLGkscj0hMSxvPSExKXshdGhpcy5tdWx0aXBsZSYmdGhpcy5zZWxlY3RlZCYmIWUuY2hlY2tlZCYmKHRoaXMuc2VsZWN0ZWQuY2hlY2tlZD0hMSksdGhpcy5fc2VsZWN0aW9uTW9kZWw/aT90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoZSk6dGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoZSk6bz0hMCxvP1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnRoaXMuX3VwZGF0ZU1vZGVsVmFsdWUoZSxyKSk6dGhpcy5fdXBkYXRlTW9kZWxWYWx1ZShlLHIpfV9pc1NlbGVjdGVkKGUpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbCYmdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChlKX1faXNQcmVjaGVja2VkKGUpe3JldHVybiEodHlwZW9mIHRoaXMuX3Jhd1ZhbHVlPiJ1IikmJih0aGlzLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHRoaXMuX3Jhd1ZhbHVlKT90aGlzLl9yYXdWYWx1ZS5zb21lKGk9Pm51bGwhPWUudmFsdWUmJmk9PT1lLnZhbHVlKTplLnZhbHVlPT09dGhpcy5fcmF3VmFsdWUpfV9zZXRTZWxlY3Rpb25CeVZhbHVlKGUpe3RoaXMuX3Jhd1ZhbHVlPWUsdGhpcy5fYnV0dG9uVG9nZ2xlcyYmKHRoaXMubXVsdGlwbGUmJmU/KEFycmF5LmlzQXJyYXkoZSksdGhpcy5fY2xlYXJTZWxlY3Rpb24oKSxlLmZvckVhY2goaT0+dGhpcy5fc2VsZWN0VmFsdWUoaSkpKToodGhpcy5fY2xlYXJTZWxlY3Rpb24oKSx0aGlzLl9zZWxlY3RWYWx1ZShlKSkpfV9jbGVhclNlbGVjdGlvbigpe3RoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCksdGhpcy5fYnV0dG9uVG9nZ2xlcy5mb3JFYWNoKGU9PmUuY2hlY2tlZD0hMSl9X3NlbGVjdFZhbHVlKGUpe2xldCBpPXRoaXMuX2J1dHRvblRvZ2dsZXMuZmluZChyPT5udWxsIT1yLnZhbHVlJiZyLnZhbHVlPT09ZSk7aSYmKGkuY2hlY2tlZD0hMCx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaSkpfV91cGRhdGVNb2RlbFZhbHVlKGUsaSl7aSYmdGhpcy5fZW1pdENoYW5nZUV2ZW50KGUpLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKX1fbWFya0J1dHRvbnNGb3JDaGVjaygpe3RoaXMuX2J1dHRvblRvZ2dsZXM/LmZvckVhY2goZT0+ZS5fbWFya0ZvckNoZWNrKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKG5uKSxNKGtvZSw4KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJkVpKHIscjVlLDUpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX2J1dHRvblRvZ2dsZXM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JvdXAiLDEsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJih6ZSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZCksZXQoIm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIixpLnZlcnRpY2FsKSgibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCIsInN0YW5kYXJkIj09PWkuYXBwZWFyYW5jZSkpfSxpbnB1dHM6e2FwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLG5hbWU6Im5hbWUiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCIsdmFsdWU6InZhbHVlIixtdWx0aXBsZToibXVsdGlwbGUiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e3ZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsY2hhbmdlOiJjaGFuZ2UifSxleHBvcnRBczpbIm1hdEJ1dHRvblRvZ2dsZUdyb3VwIl0sZmVhdHVyZXM6WyR0KFtuNWUse3Byb3ZpZGU6Rm9lLHVzZUV4aXN0aW5nOm59XSldfSksbn0pKCksaTVlPXFvKGNsYXNze30pLHI1ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgaTVle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fZWxlbWVudFJlZj1yLHRoaXMuX2ZvY3VzTW9uaXRvcj1vLHRoaXMuX2NoZWNrZWQ9ITEsdGhpcy5hcmlhTGFiZWxsZWRieT1udWxsLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuY2hhbmdlPW5ldyBHO2xldCBsPU51bWJlcihzKTt0aGlzLnRhYkluZGV4PWx8fDA9PT1sP2w6bnVsbCx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwPWUsdGhpcy5hcHBlYXJhbmNlPWEmJmEuYXBwZWFyYW5jZT9hLmFwcGVhcmFuY2U6InN0YW5kYXJkIn1nZXQgYnV0dG9uSWQoKXtyZXR1cm5gJHt0aGlzLmlkfS1idXR0b25gfWdldCBhcHBlYXJhbmNlKCl7cmV0dXJuIHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA/dGhpcy5idXR0b25Ub2dnbGVHcm91cC5hcHBlYXJhbmNlOnRoaXMuX2FwcGVhcmFuY2V9c2V0IGFwcGVhcmFuY2UoZSl7dGhpcy5fYXBwZWFyYW5jZT1lfWdldCBjaGVja2VkKCl7cmV0dXJuIHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA/dGhpcy5idXR0b25Ub2dnbGVHcm91cC5faXNTZWxlY3RlZCh0aGlzKTp0aGlzLl9jaGVja2VkfXNldCBjaGVja2VkKGUpe2xldCBpPVJ0KGUpO2khPT10aGlzLl9jaGVja2VkJiYodGhpcy5fY2hlY2tlZD1pLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJnRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX3N5bmNCdXR0b25Ub2dnbGUodGhpcyx0aGlzLl9jaGVja2VkKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiZ0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLmRpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD1SdChlKX1uZ09uSW5pdCgpe2xldCBlPXRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA7dGhpcy5pZD10aGlzLmlkfHwibWF0LWJ1dHRvbi10b2dnbGUtIitOb2UrKyxlJiYoZS5faXNQcmVjaGVja2VkKHRoaXMpP3RoaXMuY2hlY2tlZD0hMDplLl9pc1NlbGVjdGVkKHRoaXMpIT09dGhpcy5fY2hlY2tlZCYmZS5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLHRoaXMuX2NoZWNrZWQpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCEwKX1uZ09uRGVzdHJveSgpe2xldCBlPXRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLGUmJmUuX2lzU2VsZWN0ZWQodGhpcykmJmUuX3N5bmNCdXR0b25Ub2dnbGUodGhpcywhMSwhMSwhMCl9Zm9jdXMoZSl7dGhpcy5fYnV0dG9uRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9vbkJ1dHRvbkNsaWNrKCl7bGV0IGU9ISF0aGlzLl9pc1NpbmdsZVNlbGVjdG9yKCl8fCF0aGlzLl9jaGVja2VkO2UhPT10aGlzLl9jaGVja2VkJiYodGhpcy5fY2hlY2tlZD1lLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJih0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsdGhpcy5fY2hlY2tlZCwhMCksdGhpcy5idXR0b25Ub2dnbGVHcm91cC5fb25Ub3VjaGVkKCkpKSx0aGlzLmNoYW5nZS5lbWl0KG5ldyBtUih0aGlzLHRoaXMudmFsdWUpKX1fbWFya0ZvckNoZWNrKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2dldEJ1dHRvbk5hbWUoKXtyZXR1cm4gdGhpcy5faXNTaW5nbGVTZWxlY3RvcigpP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAubmFtZTp0aGlzLm5hbWV8fG51bGx9X2lzU2luZ2xlU2VsZWN0b3IoKXtyZXR1cm4gdGhpcy5idXR0b25Ub2dnbGVHcm91cCYmIXRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAubXVsdGlwbGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oRm9lLDgpLE0obm4pLE0oUmUpLE0oRnIpLHZvKCJ0YWJpbmRleCIpLE0oa29lLDgpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtYnV0dG9uLXRvZ2dsZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KGU1ZSw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9idXR0b25FbGVtZW50PXIuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwibWF0LWJ1dHRvbi10b2dnbGUiXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLmZvY3VzKCl9KSwyJmUmJih6ZSgiYXJpYS1sYWJlbCIsbnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbnVsbCkoImlkIixpLmlkKSgibmFtZSIsbnVsbCksZXQoIm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUiLCFpLmJ1dHRvblRvZ2dsZUdyb3VwKSgibWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCIsaS5jaGVja2VkKSgibWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT09aS5hcHBlYXJhbmNlKSl9LGlucHV0czp7ZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxpZDoiaWQiLG5hbWU6Im5hbWUiLHZhbHVlOiJ2YWx1ZSIsdGFiSW5kZXg6InRhYkluZGV4IixhcHBlYXJhbmNlOiJhcHBlYXJhbmNlIixjaGVja2VkOiJjaGVja2VkIixkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uVG9nZ2xlIl0sZmVhdHVyZXM6W3R0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6dDVlLGRlY2xzOjYsdmFyczo5LGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZS1idXR0b24iLCJtYXQtZm9jdXMtaW5kaWNhdG9yIiwzLCJpZCIsImRpc2FibGVkIiwiY2xpY2siXSxbImJ1dHRvbiIsIiJdLFsxLCJtYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50Il0sWzEsIm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXkiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LWJ1dHRvbi10b2dnbGUtcmlwcGxlIiwzLCJtYXRSaXBwbGVUcmlnZ2VyIiwibWF0UmlwcGxlRGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJih4aSgpLF8oMCwiYnV0dG9uIiwwLDEpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkJ1dHRvbkNsaWNrKCl9KSxfKDIsInNwYW4iLDIpLFZuKDMpLHYoKSgpLE8oNCwic3BhbiIsMykoNSwic3BhbiIsNCkpLDImZSl7bGV0IHI9JGUoMSk7eSgiaWQiLGkuYnV0dG9uSWQpKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksemUoInRhYmluZGV4IixpLmRpc2FibGVkPy0xOmkudGFiSW5kZXgpKCJhcmlhLXByZXNzZWQiLGkuY2hlY2tlZCkoIm5hbWUiLGkuX2dldEJ1dHRvbk5hbWUoKSkoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLmFyaWFMYWJlbGxlZGJ5KSxDKDUpLHkoIm1hdFJpcHBsZVRyaWdnZXIiLHIpKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5kaXNhYmxlUmlwcGxlfHxpLmRpc2FibGVkKX19LGRlcGVuZGVuY2llczpbWW9dLHN0eWxlczpbIi5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1mbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXB7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXItcmFkaXVzOjRweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtvdXRsaW5lOjB9Lm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2Fse2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0ubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTpibG9ja30ubWF0LWJ1dHRvbi10b2dnbGV7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWljb24gc3Zne3ZlcnRpY2FsLWFsaWduOnRvcH0ubWF0LWJ1dHRvbi10b2dnbGUuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpOmhvdmVyIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCk6aG92ZXIgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7ZGlzcGxheTpub25lfX0ubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e3BhZGRpbmc6MCAxMnB4fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50Pip7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JvcmRlci1ib3R0b206c29saWQgMzZweDtvcGFjaXR5Oi41O2hlaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQ6aG92ZXIgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouNn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7Ym9yZGVyLWJvdHRvbTpzb2xpZCA1MDBweH0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b257Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO2NvbG9yOmluaGVyaXQ7cGFkZGluZzowO21hcmdpbjowO2ZvbnQ6aW5oZXJpdDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJTtjdXJzb3I6cG9pbnRlcn0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQgLm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbntjdXJzb3I6ZGVmYXVsdH0ubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGdSPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltsbixfbCxsbl19KSxufSkoKTtmdW5jdGlvbiBzNWUobix0KXtpZigxJm4mJihJbigpLE8oMCwiY2lyY2xlIiw0KSksMiZuKXtsZXQgZT1TKCksaT0kZSgxKTtQdCgiYW5pbWF0aW9uLW5hbWUiLCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLSIrZS5fc3Bpbm5lckFuaW1hdGlvbkxhYmVsKSgic3Ryb2tlLWRhc2hvZmZzZXQiLGUuX2dldFN0cm9rZURhc2hPZmZzZXQoKSwicHgiKSgic3Ryb2tlLWRhc2hhcnJheSIsZS5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpLCJweCIpKCJzdHJva2Utd2lkdGgiLGUuX2dldENpcmNsZVN0cm9rZVdpZHRoKCksIiUiKSgidHJhbnNmb3JtLW9yaWdpbiIsZS5fZ2V0Q2lyY2xlVHJhbnNmb3JtT3JpZ2luKGkpKSx6ZSgiciIsZS5fZ2V0Q2lyY2xlUmFkaXVzKCkpfX1mdW5jdGlvbiBhNWUobix0KXtpZigxJm4mJihJbigpLE8oMCwiY2lyY2xlIiw0KSksMiZuKXtsZXQgZT1TKCksaT0kZSgxKTtQdCgic3Ryb2tlLWRhc2hvZmZzZXQiLGUuX2dldFN0cm9rZURhc2hPZmZzZXQoKSwicHgiKSgic3Ryb2tlLWRhc2hhcnJheSIsZS5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpLCJweCIpKCJzdHJva2Utd2lkdGgiLGUuX2dldENpcmNsZVN0cm9rZVdpZHRoKCksIiUiKSgidHJhbnNmb3JtLW9yaWdpbiIsZS5fZ2V0Q2lyY2xlVHJhbnNmb3JtT3JpZ2luKGkpKSx6ZSgiciIsZS5fZ2V0Q2lyY2xlUmFkaXVzKCkpfX12YXIgYzVlPWtvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19LCJwcmltYXJ5IiksdTVlPW5ldyBwZSgibWF0LXByb2dyZXNzLXNwaW5uZXItZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybntkaWFtZXRlcjoxMDB9fX0pLEJvPWNsYXNzIGV4dGVuZHMgYzVle2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCl7c3VwZXIodCksdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9kaWFtZXRlcj0xMDAsdGhpcy5fdmFsdWU9MCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249U24uRU1QVFksdGhpcy5tb2RlPSJkZXRlcm1pbmF0ZSI7bGV0IGM9Qm8uX2RpYW1ldGVyczt0aGlzLl9zcGlubmVyQW5pbWF0aW9uTGFiZWw9dGhpcy5fZ2V0U3Bpbm5lckFuaW1hdGlvbkxhYmVsKCksYy5oYXMoaS5oZWFkKXx8Yy5zZXQoaS5oZWFkLG5ldyBTZXQoWzEwMF0pKSx0aGlzLl9ub29wQW5pbWF0aW9ucz0iTm9vcEFuaW1hdGlvbnMiPT09ciYmISFvJiYhby5fZm9yY2VBbmltYXRpb25zLCJtYXQtc3Bpbm5lciI9PT10Lm5hdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKHRoaXMubW9kZT0iaW5kZXRlcm1pbmF0ZSIpLG8mJihvLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1vLmNvbG9yKSxvLmRpYW1ldGVyJiYodGhpcy5kaWFtZXRlcj1vLmRpYW1ldGVyKSxvLnN0cm9rZVdpZHRoJiYodGhpcy5zdHJva2VXaWR0aD1vLnN0cm9rZVdpZHRoKSksZS5pc0Jyb3dzZXImJmUuU0FGQVJJJiZhJiZzJiZsJiYodGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPWEuY2hhbmdlKDE1MCkuc3Vic2NyaWJlKCgpPT57ImluZGV0ZXJtaW5hdGUiPT09dGhpcy5tb2RlJiZsLnJ1bigoKT0+cy5tYXJrRm9yQ2hlY2soKSl9KSl9Z2V0IGRpYW1ldGVyKCl7cmV0dXJuIHRoaXMuX2RpYW1ldGVyfXNldCBkaWFtZXRlcih0KXt0aGlzLl9kaWFtZXRlcj1CaSh0KSx0aGlzLl9zcGlubmVyQW5pbWF0aW9uTGFiZWw9dGhpcy5fZ2V0U3Bpbm5lckFuaW1hdGlvbkxhYmVsKCksdGhpcy5fc3R5bGVSb290JiZ0aGlzLl9hdHRhY2hTdHlsZU5vZGUoKX1nZXQgc3Ryb2tlV2lkdGgoKXtyZXR1cm4gdGhpcy5fc3Ryb2tlV2lkdGh8fHRoaXMuZGlhbWV0ZXIvMTB9c2V0IHN0cm9rZVdpZHRoKHQpe3RoaXMuX3N0cm9rZVdpZHRoPUJpKHQpfWdldCB2YWx1ZSgpe3JldHVybiJkZXRlcm1pbmF0ZSI9PT10aGlzLm1vZGU/dGhpcy5fdmFsdWU6MH1zZXQgdmFsdWUodCl7dGhpcy5fdmFsdWU9TWF0aC5tYXgoMCxNYXRoLm1pbigxMDAsQmkodCkpKX1uZ09uSW5pdCgpe2xldCB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt0aGlzLl9zdHlsZVJvb3Q9YTIodCl8fHRoaXMuX2RvY3VtZW50LmhlYWQsdGhpcy5fYXR0YWNoU3R5bGVOb2RlKCksdC5jbGFzc0xpc3QuYWRkKCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWFuaW1hdGlvbiIpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X2dldENpcmNsZVJhZGl1cygpe3JldHVybih0aGlzLmRpYW1ldGVyLTEwKS8yfV9nZXRWaWV3Qm94KCl7bGV0IHQ9Mip0aGlzLl9nZXRDaXJjbGVSYWRpdXMoKSt0aGlzLnN0cm9rZVdpZHRoO3JldHVybmAwIDAgJHt0fSAke3R9YH1fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpe3JldHVybiAyKk1hdGguUEkqdGhpcy5fZ2V0Q2lyY2xlUmFkaXVzKCl9X2dldFN0cm9rZURhc2hPZmZzZXQoKXtyZXR1cm4iZGV0ZXJtaW5hdGUiPT09dGhpcy5tb2RlP3RoaXMuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKSooMTAwLXRoaXMuX3ZhbHVlKS8xMDA6bnVsbH1fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKXtyZXR1cm4gdGhpcy5zdHJva2VXaWR0aC90aGlzLmRpYW1ldGVyKjEwMH1fZ2V0Q2lyY2xlVHJhbnNmb3JtT3JpZ2luKHQpe2xldCBlPTUwKih0LmN1cnJlbnRTY2FsZT8/MSk7cmV0dXJuYCR7ZX0lICR7ZX0lYH1fYXR0YWNoU3R5bGVOb2RlKCl7bGV0IHQ9dGhpcy5fc3R5bGVSb290LGU9dGhpcy5fZGlhbWV0ZXIsaT1Cby5fZGlhbWV0ZXJzLHI9aS5nZXQodCk7aWYoIXJ8fCFyLmhhcyhlKSl7bGV0IG89dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtvLnNldEF0dHJpYnV0ZSgibWF0LXNwaW5uZXItYW5pbWF0aW9uIix0aGlzLl9zcGlubmVyQW5pbWF0aW9uTGFiZWwpLG8udGV4dENvbnRlbnQ9dGhpcy5fZ2V0QW5pbWF0aW9uVGV4dCgpLHQuYXBwZW5kQ2hpbGQobykscnx8KHI9bmV3IFNldCxpLnNldCh0LHIpKSxyLmFkZChlKX19X2dldEFuaW1hdGlvblRleHQoKXtsZXQgdD10aGlzLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCk7cmV0dXJuIlxuIEBrZXlmcmFtZXMgbWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS1ESUFNRVRFUiB7XG4gICAgMCUgICAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlKDApOyB9XG4gICAgMTIuNSUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlKDApOyB9XG4gICAgMTIuNTAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpOyB9XG4gICAgMjUlICAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSg3Mi41ZGVnKTsgfVxuXG4gICAgMjUuMDAwMSUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7IH1cbiAgICAzNy41JSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsgfVxuICAgIDM3LjUwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyk7IH1cbiAgICA1MCUgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKTsgfVxuXG4gICAgNTAuMDAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTsgfVxuICAgIDYyLjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOyB9XG4gICAgNjIuNTAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDI1MS41ZGVnKTsgfVxuICAgIDc1JSAgICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMjUxLjVkZWcpOyB9XG5cbiAgICA3NS4wMDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7IH1cbiAgICA4Ny41JSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOyB9XG4gICAgODcuNTAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKTsgfVxuICAgIDEwMCUgICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpOyB9XG4gIH1cbiIucmVwbGFjZSgvU1RBUlRfVkFMVUUvZywiIisuOTUqdCkucmVwbGFjZSgvRU5EX1ZBTFVFL2csIiIrLjIqdCkucmVwbGFjZSgvRElBTUVURVIvZyxgJHt0aGlzLl9zcGlubmVyQW5pbWF0aW9uTGFiZWx9YCl9X2dldFNwaW5uZXJBbmltYXRpb25MYWJlbCgpe3JldHVybiB0aGlzLmRpYW1ldGVyLnRvU3RyaW5nKCkucmVwbGFjZSgiLiIsIl8iKX19O0JvLl9kaWFtZXRlcnM9bmV3IFdlYWtNYXAsQm8uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8Qm8pKE0oUmUpLE0ob2kpLE0oSHQsOCksTShQaSw4KSxNKHU1ZSksTShubiksTShWYSksTShfdCkpfSxCby5cdTAyNzVjbXA9Uih7dHlwZTpCbyxzZWxlY3RvcnM6W1sibWF0LXByb2dyZXNzLXNwaW5uZXIiXSxbIm1hdC1zcGlubmVyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJwcm9ncmVzc2JhciIsInRhYmluZGV4IiwiLTEiLDEsIm1hdC1wcm9ncmVzcy1zcGlubmVyIiwibWF0LXNwaW5uZXIiXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxlKXsyJnQmJih6ZSgiYXJpYS12YWx1ZW1pbiIsImRldGVybWluYXRlIj09PWUubW9kZT8wOm51bGwpKCJhcmlhLXZhbHVlbWF4IiwiZGV0ZXJtaW5hdGUiPT09ZS5tb2RlPzEwMDpudWxsKSgiYXJpYS12YWx1ZW5vdyIsImRldGVybWluYXRlIj09PWUubW9kZT9lLnZhbHVlOm51bGwpKCJtb2RlIixlLm1vZGUpLFB0KCJ3aWR0aCIsZS5kaWFtZXRlciwicHgiKSgiaGVpZ2h0IixlLmRpYW1ldGVyLCJweCIpLGV0KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsZS5fbm9vcEFuaW1hdGlvbnMpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGRpYW1ldGVyOiJkaWFtZXRlciIsc3Ryb2tlV2lkdGg6InN0cm9rZVdpZHRoIixtb2RlOiJtb2RlIix2YWx1ZToidmFsdWUifSxleHBvcnRBczpbIm1hdFByb2dyZXNzU3Bpbm5lciJdLGZlYXR1cmVzOlt0dF0sZGVjbHM6NCx2YXJzOjgsY29uc3RzOltbInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCBtZWV0IiwiZm9jdXNhYmxlIiwiZmFsc2UiLCJhcmlhLWhpZGRlbiIsInRydWUiLDMsIm5nU3dpdGNoIl0sWyJzdmciLCIiXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiLDMsImFuaW1hdGlvbi1uYW1lIiwic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLXdpZHRoIiwidHJhbnNmb3JtLW9yaWdpbiIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjeCIsIjUwJSIsImN5IiwiNTAlIiwzLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2Utd2lkdGgiLCJ0cmFuc2Zvcm0tb3JpZ2luIiw0LCJuZ1N3aXRjaENhc2UiXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxlKXsxJnQmJihJbigpLF8oMCwic3ZnIiwwLDEpLEUoMixzNWUsMSwxMSwiY2lyY2xlIiwyKSxFKDMsYTVlLDEsOSwiY2lyY2xlIiwzKSx2KCkpLDImdCYmKFB0KCJ3aWR0aCIsZS5kaWFtZXRlciwicHgiKSgiaGVpZ2h0IixlLmRpYW1ldGVyLCJweCIpLHkoIm5nU3dpdGNoIiwiaW5kZXRlcm1pbmF0ZSI9PT1lLm1vZGUpLHplKCJ2aWV3Qm94IixlLl9nZXRWaWV3Qm94KCkpLEMoMikseSgibmdTd2l0Y2hDYXNlIiwhMCksQygxKSx5KCJuZ1N3aXRjaENhc2UiLCExKSl9LGRlcGVuZGVuY2llczpbQ3IsVXJdLHN0eWxlczpbIi5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgc3Zne3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTt0b3A6MDtsZWZ0OjA7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle2ZpbGw6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IDIyNW1zIGxpbmVhcn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOkNhbnZhc1RleHR9Lm1hdC1wcm9ncmVzcy1zcGlubmVyW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne2FuaW1hdGlvbjptYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlIDIwMDBtcyBsaW5lYXIgaW5maW5pdGV9Lm1hdC1wcm9ncmVzcy1zcGlubmVyW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb24tcHJvcGVydHk6c3Ryb2tlO2FuaW1hdGlvbi1kdXJhdGlvbjo0MDAwbXM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSk7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgc3ZnLC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSBjaXJjbGV7YW5pbWF0aW9uOm5vbmU7dHJhbnNpdGlvbjpub25lfUBrZXlmcmFtZXMgbWF0LXByb2dyZXNzLXNwaW5uZXItbGluZWFyLXJvdGF0ZXswJXt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfTEwMCV7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtMTAwezAle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlKDApfTEyLjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDApfTEyLjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSg3Mi41ZGVnKX0yNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpfTI1LjAwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9MzcuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX0zNy41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMTYxLjVkZWcpfTUwJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMTYxLjVkZWcpfTUwLjAwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9NjIuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX02Mi41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMjUxLjVkZWcpfTc1JXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMjUxLjVkZWcpfTc1LjAwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX04Ny41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9ODcuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKX0xMDAle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyl9fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pO3ZhciBfZD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbbG4sTWUsbG5dfSksbn0pKCk7ZnVuY3Rpb24gaDVlKG4sdCl7aWYoMSZuJiYoXygwLCJiIiksQSgxKSx2KCkpLDImbil7bGV0IGU9UygpLiRpbXBsaWNpdDtDKDEpLGplKCIiLGUuZGlzcGxheUFsaWFzLCI6Iil9fWZ1bmN0aW9uIGY1ZShuLHQpe2lmKDEmbiYmKF8oMCwibWF0LW9wdGlvbiIsMikoMSwic3BhbiIsMyksRSgyLGg1ZSwyLDEsImIiLDQpLEEoMyksdigpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7eSgidmFsdWUiLGUudmFsdWUpKCJkaXNhYmxlZCIsZS5kaXNhYmxlZCksQygxKSxFVCgidGl0bGUiLCIiLGUuZGlzcGxheUFsaWFzLCI6ICIsZS5kaXNwbGF5VGV4dCwiIiksQygxKSx5KCJuZ0lmIixlLmRpc3BsYXlBbGlhcyksQygxKSxqZSgiICIsZS5kaXNwbGF5VGV4dCwiICIpfX12YXIgTG9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnZhbHVlPSIiLHRoaXMub3B0aW9ucz1bXSx0aGlzLnNlbGVjdGlvbkNoYW5nZT1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZHJvcGRvd24iXV0saW5wdXRzOnt2YWx1ZToidmFsdWUiLG9wdGlvbnM6Im9wdGlvbnMifSxvdXRwdXRzOntzZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbkNoYW5nZSJ9LGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiwiZGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIl0sWzEsIm9wdGlvbi1jb250ZW50IiwzLCJ0aXRsZSJdLFs0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJtYXQtc2VsZWN0IiwwKSxQKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG8udmFsdWUpfSksRSgxLGY1ZSw0LDYsIm1hdC1vcHRpb24iLDEpLHYoKSksMiZlJiYoeSgidmFsdWUiLGkudmFsdWUpLEMoMSkseSgibmdGb3JPZiIsaS5vcHRpb25zKSl9LGRlcGVuZGVuY2llczpbZG4sQmUsSGgsT3NdLHN0eWxlczpbIm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzhlOThhMztib3JkZXItcmFkaXVzOjNweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo2cHh9bWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1zdHlsZTphdXRvfSAgLm1hdC1zZWxlY3QtcGFuZWx7bWF4LXdpZHRoOjcwdnd9ICBtYXQtb3B0aW9uLm1hdC1vcHRpb257aGVpZ2h0OmF1dG99ICAubWF0LW9wdGlvbi10ZXh0e3doaXRlLXNwYWNlOm5vcm1hbDt3b3JkLWJyZWFrOmJyZWFrLWFsbH0ub3B0aW9uLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0iXX0pLG59KSgpO2Z1bmN0aW9uIGc1ZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMzIpKDEsIm1hdC1jaGVja2JveCIsMjcpLFAoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygyKS5yYW5nZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpKX0pLEEoMiwiRW5hYmxlIFJhbmdlIFNlbGVjdGlvbiAiKSx2KCkoKX1pZigyJm4pe2xldCBlPVMoMik7QygxKSx5KCJjaGVja2VkIixlLmlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkKSgiZGlzYWJsZWQiLCFlLmlzQXhpc1R5cGVTdGVwKCkpfX1mdW5jdGlvbiBfNWUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDMzKSgxLCJtYXQtY2hlY2tib3giLDI3KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoMikubGlua2VkVGltZVRvZ2dsZWQuZW1pdCgpKX0pLEEoMiksdigpKCl9aWYoMiZuKXtsZXQgZT1TKDIpO0MoMSkseSgiY2hlY2tlZCIsZS5pc0xpbmtlZFRpbWVFbmFibGVkKSgiZGlzYWJsZWQiLCFlLmlzQXhpc1R5cGVTdGVwKCkpLEMoMSksamUoIkxpbmsgYnkgc3RlcCAiLGUuZ2V0TGlua2VkVGltZVNlbGVjdGlvblN0YXJ0U3RlcCgpLCIgIil9fWZ1bmN0aW9uIHY1ZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMzcpfWZ1bmN0aW9uIHk1ZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMzgpfWZ1bmN0aW9uIGI1ZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMzQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKDIpLm9uU2xpZGVPdXRUb2dnbGVkLmVtaXQoKSl9KSxFKDEsdjVlLDEsMCwibWF0LWljb24iLDM1KSxFKDIseTVlLDEsMCwibWF0LWljb24iLDM2KSxBKDMsIiBPcGVuIENvbHVtbiBFZGl0IENvbnRyb2wgIiksdigpfWlmKDImbil7bGV0IGU9UygyKTtDKDEpLHkoIm5nSWYiLCFlLmlzU2xpZGVPdXRNZW51T3BlbiksQygxKSx5KCJuZ0lmIixlLmlzU2xpZGVPdXRNZW51T3Blbil9fWZ1bmN0aW9uIHg1ZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMjYpKDEsIm1hdC1jaGVja2JveCIsMjcpLFAoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLnN0ZXBTZWxlY3RvclRvZ2dsZWQuZW1pdCgpKX0pLEEoMiwiRW5hYmxlIHN0ZXAgc2VsZWN0aW9uIGFuZCBkYXRhIHRhYmxlICIpLHYoKSxfKDMsInNwYW4iLDI4KSxBKDQsIihTY2FsYXJzIG9ubHkpIiksdigpLEUoNSxnNWUsMywyLCJkaXYiLDI5KSxFKDYsXzVlLDMsMywiZGl2IiwzMCksRSg3LGI1ZSw0LDIsImRpdiIsMzEpLHYoKX1pZigyJm4pe2xldCBlPVMoKTt5KCJ0aXRsZSIsZS5pc0F4aXNUeXBlU3RlcCgpPyIiOiJPbmx5IGF2YWlsYWJsZSB3aGVuIEhvcml6b250YWwgQXhpcyBpcyBzZXQgdG8gc3RlcCIpLEMoMSkseSgiY2hlY2tlZCIsZS5pc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQpKCJkaXNhYmxlZCIsIWUuaXNBeGlzVHlwZVN0ZXAoKSksQyg0KSx5KCJuZ0lmIixlLmlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkKSxDKDEpLHkoIm5nSWYiLGUuaXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQpLEMoMSkseSgibmdJZiIsZS5pc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkKX19ZnVuY3Rpb24gQzVlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwic2VjdGlvbiIsMzkpKDEsImgzIiwxKSxBKDIsIkltYWdlcyIpLHYoKSxfKDMsImRpdiIsNDApKDQsImRpdiIsNDEpLEEoNSwiQnJpZ2h0bmVzcyIpLHYoKSxfKDYsImRpdiIsOCkoNywibWF0LXNsaWRlciIsNDIpLFAoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLmVtaXQoci52YWx1ZSkpfSksdigpLF8oOCwiYnV0dG9uIiw0MyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5pbWFnZUJyaWdodG5lc3NSZXNldC5lbWl0KCkpfSksTyg5LCJtYXQtaWNvbiIsMTEpLHYoKSgpKCksXygxMCwiZGl2Iiw0NCkoMTEsImRpdiIsNDUpLEEoMTIsIkNvbnRyYXN0IiksdigpLF8oMTMsImRpdiIsOCkoMTQsIm1hdC1zbGlkZXIiLDQ2KSxQKCJpbnB1dCIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5pbWFnZUNvbnRyYXN0U2xpZGVyQ2hhbmdlZCQuZW1pdChyLnZhbHVlKSl9KSx2KCksXygxNSwiYnV0dG9uIiw0NyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5pbWFnZUNvbnRyYXN0UmVzZXQuZW1pdCgpKX0pLE8oMTYsIm1hdC1pY29uIiwxMSksdigpKCkoKSxfKDE3LCJkaXYiLDQ4KSgxOCwibWF0LWNoZWNrYm94IiwyMCksUCgiY2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLmltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkLmVtaXQoci5jaGVja2VkKSl9KSxBKDE5LCJTaG93IGFjdHVhbCBpbWFnZSBzaXplIiksdigpKCkoKX1pZigyJm4pe2xldCBlPVMoKTtDKDcpLHkoIm1heCIsMmUzKSgibWluIiwwKSgic3RlcCIsMTApKCJ2YWx1ZSIsZS5pbWFnZUJyaWdodG5lc3NJbk1pbGxpKSgidGh1bWJMYWJlbCIsITApKCJkaXNwbGF5V2l0aCIsZS5mb3JtYXRNaWxsaVRvWmVyb3RoKSxDKDcpLHkoIm1heCIsNWUzKSgibWluIiwwKSgic3RlcCIsMTApKCJ2YWx1ZSIsZS5pbWFnZUNvbnRyYXN0SW5NaWxsaSkoInRodW1iTGFiZWwiLCEwKSgiZGlzcGxheVdpdGgiLGUuZm9ybWF0TWlsbGlUb1plcm90aCksQyg0KSx5KCJjaGVja2VkIixlLmltYWdlU2hvd0FjdHVhbFNpemUpfX12YXIgVm9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5sb2NhbGU9ZSx0aGlzLmxpbmtlZFRpbWVUb2dnbGVkPW5ldyBHLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ9bmV3IEcsdGhpcy5zdGVwU2VsZWN0b3JUb2dnbGVkPW5ldyBHLHRoaXMucmFuZ2VTZWxlY3Rpb25Ub2dnbGVkPW5ldyBHLHRoaXMub25TbGlkZU91dFRvZ2dsZWQ9bmV3IEcsdGhpcy5Ub29sdGlwU29ydERyb3Bkb3duT3B0aW9ucz1be3ZhbHVlOk9vLkFMUEhBQkVUSUNBTCxkaXNwbGF5VGV4dDoiQWxwaGFiZXRpY2FsIn0se3ZhbHVlOk9vLkFTQ0VORElORyxkaXNwbGF5VGV4dDoiQXNjZW5kaW5nIn0se3ZhbHVlOk9vLkRFU0NFTkRJTkcsZGlzcGxheVRleHQ6IkRlc2NlbmRpbmcifSx7dmFsdWU6T28uTkVBUkVTVCxkaXNwbGF5VGV4dDoiTmVhcmVzdCBQaXhlbCJ9LHt2YWx1ZTpPby5ORUFSRVNUX1ksZGlzcGxheVRleHQ6Ik5lYXJlc3QgWSJ9XSx0aGlzLnRvb2x0aXBTb3J0Q2hhbmdlZD1uZXcgRyx0aGlzLmlnbm9yZU91dGxpZXJzQ2hhbmdlZD1uZXcgRyx0aGlzLlhBeGlzVHlwZT1KaSx0aGlzLlhBeGlzVHlwZURyb3Bkb3duT3B0aW9ucz1be3ZhbHVlOkppLlNURVAsZGlzcGxheVRleHQ6IlN0ZXAifSx7dmFsdWU6SmkuUkVMQVRJVkUsZGlzcGxheVRleHQ6IlJlbGF0aXZlIn0se3ZhbHVlOkppLldBTExfVElNRSxkaXNwbGF5VGV4dDoiV2FsbCJ9XSx0aGlzLnhBeGlzVHlwZUNoYW5nZWQ9bmV3IEcsdGhpcy5NQVhfQ0FSRF9XSURUSF9TTElERVJfVkFMVUU9NzM1LHRoaXMuTUlOX0NBUkRfV0lEVEhfU0xJREVSX1ZBTFVFPTMzNSx0aGlzLmNhcmRXaWR0aFNsaWRlckNoYW5nZWQkPW5ldyBHLHRoaXMuY2FyZFdpZHRoQ2hhbmdlZD10aGlzLmNhcmRXaWR0aFNsaWRlckNoYW5nZWQkLnBpcGUoYnUoMjUwKSksdGhpcy5jYXJkV2lkdGhSZXNldD1uZXcgRyx0aGlzLkhpc3RvZ3JhbU1vZGVEcm9wZG93bk9wdGlvbnM9W3t2YWx1ZTp6ci5PRkZTRVQsZGlzcGxheVRleHQ6Ik9mZnNldCJ9LHt2YWx1ZTp6ci5PVkVSTEFZLGRpc3BsYXlUZXh0OiJPdmVybGF5In1dLHRoaXMuaGlzdG9ncmFtTW9kZUNoYW5nZWQ9bmV3IEcsdGhpcy5NQVhfU01PT1RISU5HX1ZBTFVFPS45OTksdGhpcy5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRT0uOTksdGhpcy5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQ9bmV3IEcsdGhpcy5zY2FsYXJTbW9vdGhpbmdDaGFuZ2VkPXRoaXMuc2NhbGFyU21vb3RoaW5nQ29udHJvbENoYW5nZWQkLnBpcGUoYnUoMjUwKSksdGhpcy5zY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZD1uZXcgRyx0aGlzLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkPW5ldyBHLHRoaXMuaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQ9dGhpcy5pbWFnZUJyaWdodG5lc3NTbGlkZXJDaGFuZ2VkJC5waXBlKGJ1KDI1MCkpLHRoaXMuaW1hZ2VCcmlnaHRuZXNzUmVzZXQ9bmV3IEcsdGhpcy5pbWFnZUNvbnRyYXN0U2xpZGVyQ2hhbmdlZCQ9bmV3IEcsdGhpcy5pbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQ9dGhpcy5pbWFnZUNvbnRyYXN0U2xpZGVyQ2hhbmdlZCQucGlwZShidSgyNTApKSx0aGlzLmltYWdlQ29udHJhc3RSZXNldD1uZXcgRyx0aGlzLmltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkPW5ldyBHfW9uU2NhbGFyU21vb3RoaW5nSW5wdXQoZSl7bGV0IGk9ZS50YXJnZXQ7aWYoIWkudmFsdWUpcmV0dXJuO2xldCByPU1hdGgubWluKE1hdGgubWF4KDAscGFyc2VGbG9hdChpLnZhbHVlKSksLjk5OSk7ciE9PXBhcnNlRmxvYXQoaS52YWx1ZSkmJihpLnZhbHVlPVN0cmluZyhyKSksdGhpcy5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQuZW1pdChyKX1mb3JtYXRNaWxsaVRvWmVyb3RoKGUpe3JldHVybiB1NShlLzFlMyx0aGlzLmxvY2FsZXx8ImVuLVVTIiwiMS4wLTIiKX1nZXRMaW5rZWRUaW1lU2VsZWN0aW9uU3RhcnRTdGVwKCl7cmV0dXJuIHRoaXMuaXNMaW5rZWRUaW1lRW5hYmxlZHx8bnVsbD09PXRoaXMubGlua2VkVGltZVNlbGVjdGlvbnx8bnVsbCE9PXRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5lbmQ/IiI6dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXB9aXNBeGlzVHlwZVN0ZXAoKXtyZXR1cm4gdGhpcy54QXhpc1R5cGU9PT1KaS5TVEVQfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFdkKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MtY29tcG9uZW50Il1dLGlucHV0czp7aXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQ6ImlzTGlua2VkVGltZUZlYXR1cmVFbmFibGVkIixpc1JhbmdlU2VsZWN0aW9uQWxsb3dlZDoiaXNSYW5nZVNlbGVjdGlvbkFsbG93ZWQiLGlzTGlua2VkVGltZUVuYWJsZWQ6ImlzTGlua2VkVGltZUVuYWJsZWQiLGlzU2NhbGFyU3RlcFNlbGVjdG9yRmVhdHVyZUVuYWJsZWQ6ImlzU2NhbGFyU3RlcFNlbGVjdG9yRmVhdHVyZUVuYWJsZWQiLGlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZDoiaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkIixpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZDoiaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQiLGlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGxpbmtlZFRpbWVTZWxlY3Rpb246ImxpbmtlZFRpbWVTZWxlY3Rpb24iLHN0ZXBNaW5NYXg6InN0ZXBNaW5NYXgiLGlzU2xpZGVPdXRNZW51T3BlbjoiaXNTbGlkZU91dE1lbnVPcGVuIixpc0ltYWdlU3VwcG9ydEVuYWJsZWQ6ImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsdG9vbHRpcFNvcnQ6InRvb2x0aXBTb3J0IixpZ25vcmVPdXRsaWVyczoiaWdub3JlT3V0bGllcnMiLHhBeGlzVHlwZToieEF4aXNUeXBlIixjYXJkTWluV2lkdGg6ImNhcmRNaW5XaWR0aCIsaGlzdG9ncmFtTW9kZToiaGlzdG9ncmFtTW9kZSIsc2NhbGFyU21vb3RoaW5nOiJzY2FsYXJTbW9vdGhpbmciLHNjYWxhclBhcnRpdGlvblg6InNjYWxhclBhcnRpdGlvblgiLGltYWdlQnJpZ2h0bmVzc0luTWlsbGk6ImltYWdlQnJpZ2h0bmVzc0luTWlsbGkiLGltYWdlQ29udHJhc3RJbk1pbGxpOiJpbWFnZUNvbnRyYXN0SW5NaWxsaSIsaW1hZ2VTaG93QWN0dWFsU2l6ZToiaW1hZ2VTaG93QWN0dWFsU2l6ZSJ9LG91dHB1dHM6e2xpbmtlZFRpbWVUb2dnbGVkOiJsaW5rZWRUaW1lVG9nZ2xlZCIsbGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ6ImxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixzdGVwU2VsZWN0b3JUb2dnbGVkOiJzdGVwU2VsZWN0b3JUb2dnbGVkIixyYW5nZVNlbGVjdGlvblRvZ2dsZWQ6InJhbmdlU2VsZWN0aW9uVG9nZ2xlZCIsb25TbGlkZU91dFRvZ2dsZWQ6Im9uU2xpZGVPdXRUb2dnbGVkIix0b29sdGlwU29ydENoYW5nZWQ6InRvb2x0aXBTb3J0Q2hhbmdlZCIsaWdub3JlT3V0bGllcnNDaGFuZ2VkOiJpZ25vcmVPdXRsaWVyc0NoYW5nZWQiLHhBeGlzVHlwZUNoYW5nZWQ6InhBeGlzVHlwZUNoYW5nZWQiLGNhcmRXaWR0aENoYW5nZWQ6ImNhcmRXaWR0aENoYW5nZWQiLGNhcmRXaWR0aFJlc2V0OiJjYXJkV2lkdGhSZXNldCIsaGlzdG9ncmFtTW9kZUNoYW5nZWQ6Imhpc3RvZ3JhbU1vZGVDaGFuZ2VkIixzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkOiJzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkIixzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZDoic2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQiLGltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkOiJpbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZCIsaW1hZ2VCcmlnaHRuZXNzUmVzZXQ6ImltYWdlQnJpZ2h0bmVzc1Jlc2V0IixpbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQ6ImltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZCIsaW1hZ2VDb250cmFzdFJlc2V0OiJpbWFnZUNvbnRyYXN0UmVzZXQiLGltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkOiJpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCJ9LGRlY2xzOjQzLHZhcnM6MjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZSxpO3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcmVzZXQgdGhlIGNhcmQgd2lkdGggc2V0dGluZ+KQn2NjZGM5NmIwMDNmYmJhOTBkYjdhNjk1OWI1YjI2ZTNjYzU4ZjdkODDikJ81MjIzMTExMDQ3OTY4MTAyNDY2OlJlc2V0IGNhcmQgd2lkdGhgLGU9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byByZXNldCB0aGUgaW1hZ2UgYnJpZ2h0bmVzcyBzZXR0aW5n4pCfYzQ4MmIzYTQ3ZWEwOTc1ZmE4YmUwMWFmYjNmYmVjOWI3NjYyOGJkN+KQnzExODkxNjE4NTcyNDAzNzgzOTU6UmVzZXQgYnJpZ2h0bmVzc2AsaT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHJlc2V0IHRoZSBpbWFnZSBjb250cmFzdCBzZXR0aW5n4pCfZWQ3MTJhOGI5MjcwNDFiZTE1MjUyYjI5ZWI1MjFlYmIxMzc0YmFkOOKQnzUzNzA3MDMzNDI5MjM2MTE5NTU6UmVzZXQgY29udHJhc3RgLFtbMSwiZ2VuZXJhbCJdLFsxLCJzZWN0aW9uLXRpdGxlIl0sWzEsImNvbnRyb2wtcm93IiwieC1heGlzLXR5cGUiXSxbImlkIiwieC1heGlzLXR5cGUtbGFiZWwiLDEsImNvbnRyb2wtbmFtZSJdLFszLCJ2YWx1ZSIsIm9wdGlvbnMiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbImNsYXNzIiwiY29udHJvbC1yb3cgc2NhbGFycy1zdGVwLXNlbGVjdG9yIiwzLCJ0aXRsZSIsNCwibmdJZiJdLFsxLCJjb250cm9sLXJvdyIsImNhcmQtd2lkdGgiXSxbImlkIiwiY2FyZC13aWR0aC1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWzEsInNsaWRlci1yb3ciXSxbImFyaWEtbGFiZWxsZWRieSIsImNhcmQtd2lkdGgtbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJpbnB1dCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwidGl0bGUiLCJSZXNldCBjYXJkIHdpZHRoIiwxLCJyZXNldC1idXR0b24iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwic2V0dGluZ3NfYmFja3VwX3Jlc3RvcmVfMjRweCJdLFsxLCJzY2FsYXJzIl0sWzEsImNvbnRyb2wtcm93Iiwic2NhbGFycy1zbW9vdGhpbmciXSxbImlkIiwic2NhbGFycy1zbW9vdGhpbmctbGFiZWwiLDEsImNvbnRyb2wtbmFtZSJdLFsiYXJpYS1sYWJlbGxlZGJ5Iiwic2NhbGFycy1zbW9vdGhpbmctbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJpbnB1dCJdLFsiYXJpYS1sYWJlbGxlZGJ5Iiwic2NhbGFycy1zbW9vdGhpbmctbGFiZWwiLCJ0eXBlIiwibnVtYmVyIiwibWluIiwiMCIsInN0ZXAiLCIwLjAwMSIsMSwic2xpZGVyLWlucHV0IiwzLCJtYXgiLCJ2YWx1ZSIsImlucHV0Il0sWzEsImNvbnRyb2wtcm93IiwidG9vbHRpcC1zb3J0Il0sWzEsImNvbnRyb2wtbmFtZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtaWdub3JlLW91dGxpZXJzIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXBhcnRpdGlvbi14Il0sWyJzdmdJY29uIiwiaGVscF9vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIk5vbi1tb25vdG9uaWMgc3RlcHMgY2FuIG9jY3VyIHdoZW4gcmV1c2luZyBhIGxvZ2RpciB3aXRoIG11bHRpcGxlIHN1bW1hcnkgd3JpdGVycyBhbmQgb3ZlcmxhcHBpbmcgc3RlcHMuIExpbmUgY2hhcnRzLCB3aXRob3V0IHRoaXMgb3B0aW9uIGVuYWJsZWQsIGNhbiBhcHBlYXIgemlnIHphZ2dlZC4gVGhpcyBpcyBjb21tb24gd2hlbiByZXN0YXJ0aW5nIGZyb20gYSBjaGVja3BvaW50LlxuXG5XaGVuIGVuYWJsZWQsIGEgbm9uLW1vbm90b25pYyB0aW1lIHNlcmllcyBjb21wb3NlZCBvZiBOIG1vbm90b25pYyBwaWVjZXMgd2lsbCBiZSBzaG93biBhcyBOIG1vbm90b25pYyBsaW5lcy4iLDEsImluZm8iXSxbMSwiSGlzdG9ncmFtcyJdLFsxLCJjb250cm9sLXJvdyIsImhpc3RvZ3JhbS1tb2RlIl0sWyJjbGFzcyIsImltYWdlIiw0LCJuZ0lmIl0sWzEsImNvbnRyb2wtcm93Iiwic2NhbGFycy1zdGVwLXNlbGVjdG9yIiwzLCJ0aXRsZSJdLFszLCJjaGVja2VkIiwiZGlzYWJsZWQiLCJjaGFuZ2UiXSxbMSwiaW5kZW50Il0sWyJjbGFzcyIsImluZGVudCByYW5nZS1zZWxlY3Rpb24iLDQsIm5nSWYiXSxbImNsYXNzIiwiY29udHJvbC1yb3cgbGlua2VkLXRpbWUgaW5kZW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbmRlbnQiLCJyYW5nZS1zZWxlY3Rpb24iXSxbMSwiY29udHJvbC1yb3ciLCJsaW5rZWQtdGltZSIsImluZGVudCJdLFsxLCJjb2x1bW4tZWRpdC1tZW51LXRvZ2dsZSIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjaGV2cm9uX2xlZnRfMjRweCIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImNoZXZyb25fcmlnaHRfMjRweCIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImNoZXZyb25fbGVmdF8yNHB4Il0sWyJzdmdJY29uIiwiY2hldnJvbl9yaWdodF8yNHB4Il0sWzEsImltYWdlIl0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtYnJpZ2h0bmVzcyJdLFsiaWQiLCJpbWFnZS1icmlnaHRuZXNzLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWJyaWdodG5lc3MtbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJkaXNwbGF5V2l0aCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLCJ0aXRsZSIsIlJlc2V0IGJyaWdodG5lc3MiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbMSwiY29udHJvbC1yb3ciLCJpbWFnZS1jb250cmFzdCJdLFsiaWQiLCJpbWFnZS1jb25zdHJhc3QtbGFiZWwiLDEsImNvbnRyb2wtbmFtZSJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiaW1hZ2UtY29uc3RyYXN0LWxhYmVsIiwiY29sb3IiLCJwcmltYXJ5IiwzLCJtYXgiLCJtaW4iLCJzdGVwIiwidmFsdWUiLCJ0aHVtYkxhYmVsIiwiZGlzcGxheVdpdGgiLCJpbnB1dCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsaSwidGl0bGUiLCJSZXNldCBjb250cmFzdCIsMSwicmVzZXQtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJjb250cm9sLXJvdyIsImltYWdlLXNob3ctYWN0dWFsLXNpemUiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJzZWN0aW9uIiwwKSgxLCJoMyIsMSksQSgyLCJHZW5lcmFsIiksdigpLF8oMywiZGl2IiwyKSg0LCJkaXYiLDMpLEEoNSwiSG9yaXpvbnRhbCBBeGlzIiksdigpLF8oNiwidGItZHJvcGRvd24iLDQpLFAoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkueEF4aXNUeXBlQ2hhbmdlZC5lbWl0KG8pfSksdigpKCksRSg3LHg1ZSw4LDYsImRpdiIsNSksXyg4LCJkaXYiLDYpKDksImRpdiIsNyksQSgxMCwiQ2FyZCBXaWR0aCIpLHYoKSxfKDExLCJkaXYiLDgpKDEyLCJtYXQtc2xpZGVyIiw5KSxQKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLHYoKSxfKDEzLCJidXR0b24iLDEwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jYXJkV2lkdGhSZXNldC5lbWl0KCl9KSxPKDE0LCJtYXQtaWNvbiIsMTEpLHYoKSgpKCkoKSxfKDE1LCJzZWN0aW9uIiwxMikoMTYsImgzIiwxKSxBKDE3LCJTY2FsYXJzIiksdigpLF8oMTgsImRpdiIsMTMpKDE5LCJkaXYiLDE0KSxBKDIwLCJTbW9vdGhpbmciKSx2KCksXygyMSwiZGl2Iiw4KSgyMiwibWF0LXNsaWRlciIsMTUpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLHYoKSxfKDIzLCJpbnB1dCIsMTYpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0lucHV0KG8pfSksdigpKCkoKSxfKDI0LCJkaXYiLDE3KSgyNSwiZGl2IiwxOCksQSgyNiwiVG9vbHRpcCBzb3J0aW5nIG1ldGhvZCIpLHYoKSxfKDI3LCJ0Yi1kcm9wZG93biIsNCksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50b29sdGlwU29ydENoYW5nZWQuZW1pdChvKX0pLHYoKSgpLF8oMjgsImRpdiIsMTkpKDI5LCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlnbm9yZU91dGxpZXJzQ2hhbmdlZC5lbWl0KG8uY2hlY2tlZCl9KSxBKDMwLCJJZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZyIpLHYoKSgpLF8oMzEsImRpdiIsMjEpKDMyLCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQuZW1pdCgpfSksQSgzMywiUGFydGl0aW9uIG5vbi1tb25vdG9uaWMgWCBheGlzIiksdigpLE8oMzQsIm1hdC1pY29uIiwyMiksdigpKCksXygzNSwic2VjdGlvbiIsMjMpKDM2LCJoMyIsMSksQSgzNywiSGlzdG9ncmFtcyIpLHYoKSxfKDM4LCJkaXYiLDI0KSgzOSwiZGl2IiwxOCksQSg0MCwiTW9kZSIpLHYoKSxfKDQxLCJ0Yi1kcm9wZG93biIsNCksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oaXN0b2dyYW1Nb2RlQ2hhbmdlZC5lbWl0KG8pfSksdigpKCkoKSxFKDQyLEM1ZSwyMCwxMywic2VjdGlvbiIsMjUpKSwyJmUmJihDKDYpLHkoInZhbHVlIixpLnhBeGlzVHlwZSkoIm9wdGlvbnMiLGkuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zKSxDKDEpLHkoIm5nSWYiLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCksQyg1KSx5KCJtYXgiLGkuTUFYX0NBUkRfV0lEVEhfU0xJREVSX1ZBTFVFKSgibWluIixpLk1JTl9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRSkoInN0ZXAiLDUwKSgidmFsdWUiLGkuY2FyZE1pbldpZHRoKSgidGh1bWJMYWJlbCIsITEpLEMoMTApLHkoIm1heCIsaS5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRSkoIm1pbiIsMCkoInN0ZXAiLC4wMSkoInZhbHVlIixpLnNjYWxhclNtb290aGluZykoInRodW1iTGFiZWwiLCEwKSxDKDEpLHkoIm1heCIsaS5NQVhfU01PT1RISU5HX1ZBTFVFKSgidmFsdWUiLGkuc2NhbGFyU21vb3RoaW5nKSxDKDQpLHkoInZhbHVlIixpLnRvb2x0aXBTb3J0KSgib3B0aW9ucyIsaS5Ub29sdGlwU29ydERyb3Bkb3duT3B0aW9ucyksQygyKSx5KCJjaGVja2VkIixpLmlnbm9yZU91dGxpZXJzKSxDKDMpLHkoImNoZWNrZWQiLGkuc2NhbGFyUGFydGl0aW9uWCksQyg5KSx5KCJ2YWx1ZSIsaS5oaXN0b2dyYW1Nb2RlKSgib3B0aW9ucyIsaS5IaXN0b2dyYW1Nb2RlRHJvcGRvd25PcHRpb25zKSxDKDEpLHkoIm5nSWYiLGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkKSl9LGRlcGVuZGVuY2llczpbQmUsTG9lLF9uLHlsLEd0LHVwXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEycHh9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7cGFkZGluZzoxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMjEyMTIxO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtmb250LXdlaWdodDo1MDA7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6bm9ybWFsO21hcmdpbjowIDAgMTJweCAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNlY3Rpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9c2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAuY29udHJvbC1yb3dbX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLWJvdHRvbToxMnB4fS5jb250cm9sLW5hbWVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206OHB4fS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyOHB4fS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNldC1idXR0b25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjZweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyOjFweCBzb2xpZCAjOGU5OGEzO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjEycHg7cGFkZGluZzowIDRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM0MjUwNjZ9LnNjYWxhcnMtc21vb3RoaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zbGlkZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTt3aWR0aDo1ZW19LnNjYWxhcnMtcGFydGl0aW9uLXhbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LnNjYWxhcnMtcGFydGl0aW9uLXhbX25nY29udGVudC0lQ09NUCVdICAgLmluZm9bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxNXB4O21hcmdpbi1sZWZ0OjVweDt3aWR0aDoxNXB4fW1hdC1zbGlkZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MTttYXJnaW4tbGVmdDotOHB4O21hcmdpbi1yaWdodDotOHB4fS5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtjdXJzb3I6cG9pbnRlcn0uY29sdW1uLWVkaXQtbWVudS10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxNXB4O3dpZHRoOjE1cHh9dGItZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9LmxpbmtlZC10aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjVweCAwfS5jb250cm9sLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuaW5kZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoyNXB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVDVlPU9iamVjdC5mcmVlemUoe1NMSURFUjpjcy5TRVRUSU5HU19TTElERVIsVEVYVDpjcy5TRVRUSU5HU19URVhULFRFWFRfREVMRVRFRDpjcy5DSEFOR0VfVE9fU0lOR0xFfSksSG9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuaXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KE0kKSx0aGlzLmlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkJD10aGlzLnN0b3JlLnNlbGVjdChUJCksdGhpcy5pc1NjYWxhclN0ZXBTZWxlY3RvckZlYXR1cmVFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChTJCksdGhpcy5pc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGZ2KSx0aGlzLmlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChtdiksdGhpcy5pc0xpbmtlZFRpbWVFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChZbSksdGhpcy5pc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChxQSksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChpSCksdGhpcy5zdGVwTWluTWF4JD10aGlzLnN0b3JlLnNlbGVjdChuSCksdGhpcy5pc1NsaWRlT3V0TWVudU9wZW4kPXRoaXMuc3RvcmUuc2VsZWN0KFVJKSx0aGlzLmlzSW1hZ2VTdXBwb3J0RW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoZ2gpLnBpcGUoWWUoQm9vbGVhbiksUXQoMSksV3QodGhpcy5zdG9yZS5zZWxlY3QoV0EpKSxMKChbLGldKT0+aSkpLHRoaXMudG9vbHRpcFNvcnQkPXRoaXMuc3RvcmUuc2VsZWN0KHB2KSx0aGlzLmlnbm9yZU91dGxpZXJzJD10aGlzLnN0b3JlLnNlbGVjdChodiksdGhpcy54QXhpc1R5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KHRkKSx0aGlzLmNhcmRNaW5XaWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoZHYpLHRoaXMuaGlzdG9ncmFtTW9kZSQ9dGhpcy5zdG9yZS5zZWxlY3QoUkkpLHRoaXMuc2NhbGFyU21vb3RoaW5nJD10aGlzLnN0b3JlLnNlbGVjdChvcCksdGhpcy5zY2FsYXJQYXJ0aXRpb25YJD10aGlzLnN0b3JlLnNlbGVjdChPSSksdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdChrSSksdGhpcy5pbWFnZUNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QoRkkpLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTkkpfW9uVG9vbHRpcFNvcnRDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goalAoe3NvcnQ6ZX0pKX1vbklnbm9yZU91dGxpZXJzQ2hhbmdlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goR1AoKSl9b25YQXhpc1R5cGVDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goV1Aoe3hBeGlzVHlwZTplfSkpfW9uQ2FyZFdpZHRoQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHFQKHtjYXJkTWluV2lkdGg6ZX0pKX1vbkNhcmRXaWR0aFJlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaChZUCgpKX1vbkhpc3RvZ3JhbU1vZGVDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2godFIoe2hpc3RvZ3JhbU1vZGU6ZX0pKX1vblNjYWxhclNtb290aGluZ0NoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChYUCh7c21vb3RoaW5nOmV9KSl9b25TY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goUVAoKSl9b25JbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEtQKHticmlnaHRuZXNzSW5NaWxsaTplfSkpfW9uSW1hZ2VCcmlnaHRuZXNzUmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEpQKCkpfW9uSW1hZ2VDb250cmFzdFJlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaCgkUCgpKX1vbkltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFpQKHtjb250cmFzdEluTWlsbGk6ZX0pKX1vbkltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChlUigpKX1vbkxpbmtlZFRpbWVUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh1Uih7YWZmb3JkYW5jZTpibC5DSEVDS19CT1h9KSl9b25TdGVwU2VsZWN0b3JUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChYaCh7YWZmb3JkYW5jZTpibC5DSEVDS19CT1h9KSl9b25SYW5nZVNlbGVjdGlvblRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGhSKHthZmZvcmRhbmNlOmJsLkNIRUNLX0JPWH0pKX1vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkKHt0aW1lU2VsZWN0aW9uOmUsc291cmNlOml9KXt0aGlzLnN0b3JlLmRpc3BhdGNoKFloKHt0aW1lU2VsZWN0aW9uOmUsYWZmb3JkYW5jZTpUNWVbaV19KSl9b25TbGlkZU91dFRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFZQKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MiXV0sZGVjbHM6MjIsdmFyczo2Myxjb25zdHM6W1szLCJpc0ltYWdlU3VwcG9ydEVuYWJsZWQiLCJ0b29sdGlwU29ydCIsImlnbm9yZU91dGxpZXJzIiwieEF4aXNUeXBlIiwiY2FyZE1pbldpZHRoIiwiaGlzdG9ncmFtTW9kZSIsInNjYWxhclNtb290aGluZyIsInNjYWxhclBhcnRpdGlvblgiLCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIiwiaW1hZ2VDb250cmFzdEluTWlsbGkiLCJpbWFnZVNob3dBY3R1YWxTaXplIiwiaXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQiLCJpc1JhbmdlU2VsZWN0aW9uQWxsb3dlZCIsImlzU2NhbGFyU3RlcFNlbGVjdG9yRmVhdHVyZUVuYWJsZWQiLCJpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQiLCJpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCIsImlzTGlua2VkVGltZUVuYWJsZWQiLCJpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwibGlua2VkVGltZVNlbGVjdGlvbiIsInN0ZXBNaW5NYXgiLCJpc1NsaWRlT3V0TWVudU9wZW4iLCJ0b29sdGlwU29ydENoYW5nZWQiLCJpZ25vcmVPdXRsaWVyc0NoYW5nZWQiLCJ4QXhpc1R5cGVDaGFuZ2VkIiwiY2FyZFdpZHRoQ2hhbmdlZCIsImNhcmRXaWR0aFJlc2V0IiwiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLCJzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkIiwic2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQiLCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZCIsImltYWdlQnJpZ2h0bmVzc1Jlc2V0IiwiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIiwiaW1hZ2VDb250cmFzdFJlc2V0IiwiaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQiLCJsaW5rZWRUaW1lVG9nZ2xlZCIsImxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwic3RlcFNlbGVjdG9yVG9nZ2xlZCIsInJhbmdlU2VsZWN0aW9uVG9nZ2xlZCIsIm9uU2xpZGVPdXRUb2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiLDApLFAoInRvb2x0aXBTb3J0Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Ub29sdGlwU29ydENoYW5nZWQobyl9KSgiaWdub3JlT3V0bGllcnNDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uSWdub3JlT3V0bGllcnNDaGFuZ2VkKCl9KSgieEF4aXNUeXBlQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25YQXhpc1R5cGVDaGFuZ2VkKG8pfSkoImNhcmRXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2FyZFdpZHRoQ2hhbmdlZChvKX0pKCJjYXJkV2lkdGhSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNhcmRXaWR0aFJlc2V0KCl9KSgiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSGlzdG9ncmFtTW9kZUNoYW5nZWQobyl9KSgic2NhbGFyU21vb3RoaW5nQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TY2FsYXJTbW9vdGhpbmdDaGFuZ2VkKG8pfSkoInNjYWxhclBhcnRpdGlvblhUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQoKX0pKCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25JbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZChvKX0pKCJpbWFnZUJyaWdodG5lc3NSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkltYWdlQnJpZ2h0bmVzc1Jlc2V0KCl9KSgiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZChvKX0pKCJpbWFnZUNvbnRyYXN0UmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25JbWFnZUNvbnRyYXN0UmVzZXQoKX0pKCJpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkKCl9KSgibGlua2VkVGltZVRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25MaW5rZWRUaW1lVG9nZ2xlZCgpfSkoImxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkKG8pfSkoInN0ZXBTZWxlY3RvclRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TdGVwU2VsZWN0b3JUb2dnbGVkKCl9KSgicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmFuZ2VTZWxlY3Rpb25Ub2dnbGVkKCl9KSgib25TbGlkZU91dFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TbGlkZU91dFRvZ2dsZWQoKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLEIoNCwiYXN5bmMiKSxCKDUsImFzeW5jIiksQig2LCJhc3luYyIpLEIoNywiYXN5bmMiKSxCKDgsImFzeW5jIiksQig5LCJhc3luYyIpLEIoMTAsImFzeW5jIiksQigxMSwiYXN5bmMiKSxCKDEyLCJhc3luYyIpLEIoMTMsImFzeW5jIiksQigxNCwiYXN5bmMiKSxCKDE1LCJhc3luYyIpLEIoMTYsImFzeW5jIiksQigxNywiYXN5bmMiKSxCKDE4LCJhc3luYyIpLEIoMTksImFzeW5jIiksQigyMCwiYXN5bmMiKSxCKDIxLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJpc0ltYWdlU3VwcG9ydEVuYWJsZWQiLFUoMSwyMSxpLmlzSW1hZ2VTdXBwb3J0RW5hYmxlZCQpKSgidG9vbHRpcFNvcnQiLFUoMiwyMyxpLnRvb2x0aXBTb3J0JCkpKCJpZ25vcmVPdXRsaWVycyIsVSgzLDI1LGkuaWdub3JlT3V0bGllcnMkKSkoInhBeGlzVHlwZSIsVSg0LDI3LGkueEF4aXNUeXBlJCkpKCJjYXJkTWluV2lkdGgiLFUoNSwyOSxpLmNhcmRNaW5XaWR0aCQpKSgiaGlzdG9ncmFtTW9kZSIsVSg2LDMxLGkuaGlzdG9ncmFtTW9kZSQpKSgic2NhbGFyU21vb3RoaW5nIixVKDcsMzMsaS5zY2FsYXJTbW9vdGhpbmckKSkoInNjYWxhclBhcnRpdGlvblgiLFUoOCwzNSxpLnNjYWxhclBhcnRpdGlvblgkKSkoImltYWdlQnJpZ2h0bmVzc0luTWlsbGkiLFUoOSwzNyxpLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkkKSkoImltYWdlQ29udHJhc3RJbk1pbGxpIixVKDEwLDM5LGkuaW1hZ2VDb250cmFzdEluTWlsbGkkKSkoImltYWdlU2hvd0FjdHVhbFNpemUiLFUoMTEsNDEsaS5pbWFnZVNob3dBY3R1YWxTaXplJCkpKCJpc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCIsVSgxMiw0MyxpLmlzTGlua2VkVGltZUZlYXR1cmVFbmFibGVkJCkpKCJpc1JhbmdlU2VsZWN0aW9uQWxsb3dlZCIsVSgxMyw0NSxpLmlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkJCkpKCJpc1NjYWxhclN0ZXBTZWxlY3RvckZlYXR1cmVFbmFibGVkIixVKDE0LDQ3LGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCQpKSgiaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkIixVKDE1LDQ5LGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkJCkpKCJpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCIsVSgxNiw1MSxpLmlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkJCkpKCJpc0xpbmtlZFRpbWVFbmFibGVkIixVKDE3LDUzLGkuaXNMaW5rZWRUaW1lRW5hYmxlZCQpKSgiaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsVSgxOCw1NSxpLmlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkKSkoImxpbmtlZFRpbWVTZWxlY3Rpb24iLFUoMTksNTcsaS5saW5rZWRUaW1lU2VsZWN0aW9uJCkpKCJzdGVwTWluTWF4IixVKDIwLDU5LGkuc3RlcE1pbk1heCQpKSgiaXNTbGlkZU91dE1lbnVPcGVuIixVKDIxLDYxLGkuaXNTbGlkZU91dE1lbnVPcGVuJCkpfSxkZXBlbmRlbmNpZXM6W1ZvZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVW9lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZGFzaGJvYXJkLXJpZ2h0LXBhbmUiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJk8oMCwibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MiKX0sZGVwZW5kZW5jaWVzOltIb2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEk1ZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMyl9ZnVuY3Rpb24gUDVlKG4sdCl7MSZuJiZPKDAsIm1hdC1pY29uIiwzKX1mdW5jdGlvbiBSNWUobix0KXsxJm4mJk8oMCwiZGl2Iiw0KX12YXIgdlI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuQ29sdW1uSGVhZGVyVHlwZT1LdH1nZXRIZWFkZXJUZXh0Q29sdW1uKGUpe3N3aXRjaChlKXtjYXNlIEt0LlJVTjpyZXR1cm4iUnVuIjtjYXNlIEt0LlZBTFVFOnJldHVybiJWYWx1ZSI7Y2FzZSBLdC5TVEVQOnJldHVybiJTdGVwIjtjYXNlIEt0LlRJTUU6cmV0dXJuIlRpbWUiO2Nhc2UgS3QuUkVMQVRJVkVfVElNRTpyZXR1cm4iUmVsYXRpdmUiO2Nhc2UgS3QuU01PT1RIRUQ6cmV0dXJuIlNtb290aGVkIjtjYXNlIEt0LlZBTFVFX0NIQU5HRTpyZXR1cm4iVmFsdWUiO2Nhc2UgS3QuU1RBUlRfU1RFUDpyZXR1cm4iU3RhcnQgU3RlcCI7Y2FzZSBLdC5FTkRfU1RFUDpyZXR1cm4iRW5kIFN0ZXAiO2Nhc2UgS3QuU1RBUlRfVkFMVUU6cmV0dXJuIlN0YXJ0IFZhbHVlIjtjYXNlIEt0LkVORF9WQUxVRTpyZXR1cm4iRW5kIFZhbHVlIjtjYXNlIEt0Lk1JTl9WQUxVRTpyZXR1cm4iTWluIjtjYXNlIEt0Lk1BWF9WQUxVRTpyZXR1cm4iTWF4IjtjYXNlIEt0LlBFUkNFTlRBR0VfQ0hBTkdFOnJldHVybiIlIjtkZWZhdWx0OnJldHVybiIifX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZS1oZWFkZXIiXV0saW5wdXRzOntoZWFkZXI6ImhlYWRlciJ9LGRlY2xzOjYsdmFyczo0LGNvbnN0czpbWzEsImhlYWRlci1jb250YWluZXIiLDMsIm5nU3dpdGNoIl0sWyJzdmdJY29uIiwiY2hhbmdlX2hpc3RvcnlfMjRweCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImV4dHJhLXJpZ2h0LXBhZGRpbmciLDQsIm5nU3dpdGNoRGVmYXVsdCJdLFsic3ZnSWNvbiIsImNoYW5nZV9oaXN0b3J5XzI0cHgiXSxbMSwiZXh0cmEtcmlnaHQtcGFkZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwKSxFKDEsSTVlLDEsMCwibWF0LWljb24iLDEpLEUoMixQNWUsMSwwLCJtYXQtaWNvbiIsMSksRSgzLFI1ZSwxLDAsImRpdiIsMiksXyg0LCJzcGFuIiksQSg1KSx2KCkoKSksMiZlJiYoeSgibmdTd2l0Y2giLGkuaGVhZGVyLnR5cGUpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlclR5cGUuVkFMVUVfQ0hBTkdFKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJUeXBlLlBFUkNFTlRBR0VfQ0hBTkdFKSxDKDMpLHl0KGkuZ2V0SGVhZGVyVGV4dENvbHVtbihpLmhlYWRlci50eXBlKSkpfSxkZXBlbmRlbmNpZXM6W0NyLFVyLGNoLEd0XSxzdHlsZXM6WyIuaGVhZGVyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uZXh0cmEtcmlnaHQtcGFkZGluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1yaWdodDoxcHh9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMnB4O3dpZHRoOjEycHh9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBPNWUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDYpKDEsIm1hdC1jaGVja2JveCIsNyksUCgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPW9lKGUpLiRpbXBsaWNpdCxzPVMoKS5kYXRhVGFibGVNb2RlO3JldHVybiBzZShTKCkudG9nZ2xlSGVhZGVyKG8scykpfSksTygyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsOCksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtDKDEpLHkoImNoZWNrZWQiLGUuZW5hYmxlZCksQygxKSx5KCJoZWFkZXIiLGUpfX1mdW5jdGlvbiBrNWUobix0KXtpZigxJm4mJihfKDAsImRpdiIsNCksRSgxLE81ZSwzLDIsImRpdiIsNSksdigpKSwyJm4pe2xldCBlPXQuaGVhZGVycztDKDEpLHkoIm5nRm9yT2YiLGUpfX12YXIgam9lPWZ1bmN0aW9uKG4sdCl7cmV0dXJue2hlYWRlcnM6bixkYXRhVGFibGVNb2RlOnR9fSxHb2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGF0YVRhYmxlTW9kZT1nZCx0aGlzLnNlbGVjdGVkVGFiPWdkLlNJTkdMRSx0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkPW5ldyBHfXRvZ2dsZUhlYWRlcihlLGkpe3RoaXMub25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQuZW1pdCh7ZGF0YVRhYmxlTW9kZTppLGhlYWRlclR5cGU6ZS50eXBlfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3ItY29tcG9uZW50Il1dLGlucHV0czp7cmFuZ2VIZWFkZXJzOiJyYW5nZUhlYWRlcnMiLHNpbmdsZUhlYWRlcnM6InNpbmdsZUhlYWRlcnMifSxvdXRwdXRzOntvblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZDoib25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQifSxkZWNsczo4LHZhcnM6MTIsY29uc3RzOltbMSwidGFiLWdyb3VwIl0sWzMsImxhYmVsIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiaGVhZGVyTGlzdCIsIiJdLFsxLCJoZWFkZXItbGlzdCJdLFsiY2xhc3MiLCJoZWFkZXItbGlzdC1pdGVtIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiaGVhZGVyLWxpc3QtaXRlbSJdLFszLCJjaGVja2VkIiwiY2hhbmdlIl0sWzMsImhlYWRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKF8oMCwiZGl2IikoMSwibWF0LXRhYi1ncm91cCIsMCkoMiwibWF0LXRhYiIsMSksTygzLCJuZ0NvbnRleHQiLDIpLHYoKSxfKDQsIm1hdC10YWIiLDEpLE8oNSwibmdDb250ZXh0IiwyKSx2KCkoKSgpLEUoNixrNWUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwzLHF0KSksMiZlKXtsZXQgcj0kZSg3KTtDKDIpLHkoImxhYmVsIiwiU2luZ2xlIiksQygxKSx5KCJuZ1RlbXBsYXRlT3V0bGV0IixyKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFFyKDYsam9lLGkuc2luZ2xlSGVhZGVycyxpLkRhdGFUYWJsZU1vZGUuU0lOR0xFKSksQygxKSx5KCJsYWJlbCIsIlJhbmdlIiksQygxKSx5KCJuZ1RlbXBsYXRlT3V0bGV0IixyKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFFyKDksam9lLGkucmFuZ2VIZWFkZXJzLGkuRGF0YVRhYmxlTW9kZS5SQU5HRSkpfX0sZGVwZW5kZW5jaWVzOltkbixvcyx2Uix5bCxaMix4d10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgICAgLm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjB9LnRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowfS5oZWFkZXItbGlzdFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1JTttYXJnaW4tbGVmdDo1JX0uaGVhZGVyLWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozcHh9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxXb2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zaW5nbGVIZWFkZXJzJD10aGlzLnN0b3JlLnNlbGVjdChCSSksdGhpcy5yYW5nZUhlYWRlcnMkPXRoaXMuc3RvcmUuc2VsZWN0KFZJKX1vblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZCh7ZGF0YVRhYmxlTW9kZTplLGhlYWRlclR5cGU6aX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2gocFIoe2RhdGFUYWJsZU1vZGU6ZSxoZWFkZXJUeXBlOml9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXNjYWxhci1jb2x1bW4tZWRpdG9yIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInNpbmdsZUhlYWRlcnMiLCJyYW5nZUhlYWRlcnMiLCJvblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwibWV0cmljcy1zY2FsYXItY29sdW1uLWVkaXRvci1jb21wb25lbnQiLDApLFAoIm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZChvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksdigpKSwyJmUmJnkoInNpbmdsZUhlYWRlcnMiLFUoMSwyLGkuc2luZ2xlSGVhZGVycyQpKSgicmFuZ2VIZWFkZXJzIixVKDIsNCxpLnJhbmdlSGVhZGVycyQpKX0sZGVwZW5kZW5jaWVzOltHb2UsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEw1ZT1KKFBJLG9vLChuLHQpPT5uLmZpbHRlcihlPT4hbWwoZS5wbHVnaW4pfHxCb29sZWFuKHQmJnQuZ2V0KGUucnVuSWQpKSkpLG1nPUooTDVlLG49Pm4uc29ydCgodCxlKT0+RncodC50YWcsZS50YWcpKSksYXk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMucmVmPWUsdGhpcy5jZGtTY3JvbGxhYmxlPWksdGhpcy5vblZpc2liaWxpdHlDaGFuZ2U9bmV3IEcsdGhpcy5uZ1Vuc3Vic2NyaWJlJD1uZXcga2UsdGhpcy5vbkV2ZW50JD1uZXcga2V9bmdPbkluaXQoKXtsZXQgZT17cm9vdDp0aGlzLmNka1Njcm9sbGFibGU/dGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50Om51bGx9O3RoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW4mJihlLnJvb3RNYXJnaW49dGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbik7bGV0IGk9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHI9Pnt0aGlzLm9uRXZlbnQkLm5leHQocil9LGUpO2kub2JzZXJ2ZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KSx0aGlzLm5nVW5zdWJzY3JpYmUkLnN1YnNjcmliZSgoKT0+e2kudW5vYnNlcnZlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpfSksdGhpcy5vbkV2ZW50JC5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUocj0+e2xldCBvPXIuc2xpY2UoLTEpWzBdO3RoaXMub25WaXNpYmlsaXR5Q2hhbmdlLmVtaXQoe3Zpc2libGU6by5pc0ludGVyc2VjdGluZ30pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUkLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUkLmNvbXBsZXRlKCl9d2FpdEZvckV2ZW50Rm9yVGVzdE9ubHkoKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+dGhpcy5vbkV2ZW50JC5waXBlKFF0KDEpKS5zdWJzY3JpYmUoKCk9PntlKCl9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oSWgsOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIl1dLGlucHV0czp7aW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW46ImludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luIn0sb3V0cHV0czp7b25WaXNpYmlsaXR5Q2hhbmdlOiJvblZpc2liaWxpdHlDaGFuZ2UifX0pLG59KSgpLHFvZT0iL3NjYWxhcl9zdW1tYXJ5IjtmdW5jdGlvbiBseShuLHQpe2xldCBlPW47cmV0dXJuIHQmJm4uc3RhcnRzV2l0aCh0KyIvIikmJihlPW4uc2xpY2UodC5sZW5ndGgrMSkpLGUuZW5kc1dpdGgocW9lKSYmKGU9ZS5zbGljZSgwLC1xb2UubGVuZ3RoKSksZXx8bn1mdW5jdGlvbiBZb2Uobix0LGUpe3JldHVybiBuPHQ/dDpuPmU/ZTpufWZ1bmN0aW9uIFFoKG4sdCxlKXtsZXQgaT1Zb2Uobi5zdGFydC5zdGVwLHQsZSkscj1uLmVuZD9Zb2Uobi5lbmQuc3RlcCx0LGUpOm51bGw7cmV0dXJue3N0YXJ0U3RlcDppLGVuZFN0ZXA6cixjbGlwcGVkOmkhPT1uLnN0YXJ0LnN0ZXB8fHIhPT0obi5lbmQ/LnN0ZXA/P251bGwpfX12YXIgVjVlPVsibWVhc3VyZXIiXSxINWU9WyJpbnB1dCJdLEpvZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY2hhbmdlRGV0ZWN0b3I9ZSx0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMuc3R5bGU9ImRlZmF1bHQiLHRoaXMucGF0dGVyblJlZ2V4PW5ldyBSZWdFeHAoIi4qIiksdGhpcy5pc1ZhbGlkPSEwLHRoaXMub25WYWx1ZUNoYW5nZT1uZXcgRyx0aGlzLmJsdXI9bmV3IEcsdGhpcy5mb2N1cz1uZXcgRyx0aGlzLmtleWRvd249bmV3IEcsdGhpcy5rZXl1cD1uZXcgRyx0aGlzLmludGVybmFsVmFsdWU9IiIsdGhpcy5mb250Q2hhbmdlTGlzdGVuZXI9dGhpcy51cGRhdGVJbnB1dFdpZHRoLmJpbmQodGhpcyl9bmdPbkluaXQoKXtkb2N1bWVudC5mb250cyYmZG9jdW1lbnQuZm9udHMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGluZ2RvbmUiLHRoaXMuZm9udENoYW5nZUxpc3RlbmVyKX1uZ09uRGVzdHJveSgpe2RvY3VtZW50LmZvbnRzJiZkb2N1bWVudC5mb250cy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkaW5nZG9uZSIsdGhpcy5mb250Q2hhbmdlTGlzdGVuZXIpfW5nT25DaGFuZ2VzKGUpe2UucGF0dGVybiYmKHRoaXMucGF0dGVyblJlZ2V4PW5ldyBSZWdFeHAodGhpcy5wYXR0ZXJuPz8iIikpLGUudmFsdWUmJih0aGlzLmludGVybmFsVmFsdWU9dGhpcy52YWx1ZSksdGhpcy5pc1ZhbGlkPXRoaXMucGF0dGVyblJlZ2V4LnRlc3QodGhpcy5pbnRlcm5hbFZhbHVlKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKX1vbklucHV0KGUpe2xldCBpPXRoaXMuaW50ZXJuYWxWYWx1ZTt0aGlzLmludGVybmFsVmFsdWU9dGhpcy5pbnB1dEVsUmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUsdGhpcy5pbnRlcm5hbFZhbHVlIT09aSYmKHRoaXMuaXNWYWxpZD10aGlzLnBhdHRlcm5SZWdleC50ZXN0KHRoaXMuaW50ZXJuYWxWYWx1ZSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSksdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoe3ZhbHVlOnRoaXMuaW50ZXJuYWxWYWx1ZX0pfXVwZGF0ZUlucHV0V2lkdGgoKXtsZXR7d2lkdGg6ZX09dGhpcy5tZWFzdXJlckVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5pbnB1dEVsUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGg9YCR7ZX1weGB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0obm4pKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJjb250ZW50LXdyYXBwaW5nLWlucHV0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKG90KFY1ZSw3LFJlKSxvdChINWUsNyxSZSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkubWVhc3VyZXJFbFJlZj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5pbnB1dEVsUmVmPXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkRhKGkuc3R5bGUpfSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixzdHlsZToic3R5bGUiLHBhdHRlcm46InBhdHRlcm4ifSxvdXRwdXRzOntvblZhbHVlQ2hhbmdlOiJvblZhbHVlQ2hhbmdlIixibHVyOiJibHVyIixmb2N1czoiZm9jdXMiLGtleWRvd246ImtleWRvd24iLGtleXVwOiJrZXl1cCJ9LGZlYXR1cmVzOltGdF0sZGVjbHM6Nix2YXJzOjcsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWVhc3VyZXIiXSxbIm1lYXN1cmVyIiwiIl0sWyJhdXRvY29tcGxldGUiLCJvZmYiLCJzcGVsbGNoZWNrIiwiZmFsc2UiLCJ0eXBlIiwidGV4dCIsMywidmFsdWUiLCJwbGFjZWhvbGRlciIsImJsdXIiLCJmb2N1cyIsImlucHV0Iiwia2V5ZG93biIsImtleXVwIl0sWyJpbnB1dCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwic3BhbiIpKDEsInNwYW4iLDAsMSksQSgzKSx2KCksXyg0LCJpbnB1dCIsMiwzKSxQKCJibHVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5ibHVyLmVtaXQobyl9KSgiZm9jdXMiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmZvY3VzLmVtaXQobyl9KSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW5wdXQobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkua2V5ZG93bi5lbWl0KG8pfSkoImtleXVwIixmdW5jdGlvbihvKXtyZXR1cm4gaS5rZXl1cC5lbWl0KG8pfSksdigpKCkpLDImZSYmKGV0KCJjb250YWluZXIiLCEwKSgiaXMtdmFsaWQiLGkuaXNWYWxpZCksQygzKSx5dChpLmludGVybmFsVmFsdWV8fGkucGxhY2Vob2xkZXIpLEMoMSkseSgidmFsdWUiLGkudmFsdWUpKCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlcikpfSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2lkdGg6bWF4LWNvbnRlbnR9W19uZ2hvc3QtJUNPTVAlXTpmb2N1cy13aXRoaW4gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2Y1N2MwMH0uZGVmYXVsdFtfbmdob3N0LSVDT01QJV06aG92ZXIgICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ViZWJlYn0uZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKXtib3JkZXItY29sb3I6I2VmOWE5YX0uZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06aG92ZXIsIC5lcnJvcltfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cy13aXRoaW4sIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKTpob3ZlciwgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOm5vdCguaXMtdmFsaWQpOmZvY3VzLXdpdGhpbntib3JkZXItY29sb3I6I2VmOWE5YX0uaGlnaC1jb250cmFzdFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2JkYmRiZH0uaGlnaC1jb250cmFzdFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3JkZXItY29sb3I6Izc1NzU3NX0uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7cGFkZGluZzoxcHggMnB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tZWFzdXJlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbn0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVdLCBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDoxLjQ7cGFkZGluZzowO3doaXRlLXNwYWNlOnByZX0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5LCBpbnB1dFtfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7d2lkdGg6MmNofWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjowO2NvbG9yOmluaGVyaXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1mYW1pbHk6aW5oZXJpdDtvdXRsaW5lOjB9aW5wdXRbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze3BhZGRpbmctcmlnaHQ6MWNofSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gejVlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiY29udGVudC13cmFwcGluZy1pbnB1dCIsMyksUCgib25WYWx1ZUNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5hbGlhc0NoYW5nZWQuZW1pdChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1TKCk7amwoZS5pc0FsaWFzTmFtZUxlZ2FsPyJoaWdoLWNvbnRyYXN0IjoiZXJyb3IiKSx5KCJ2YWx1ZSIsZS5hbGlhcy5hbGlhc1RleHQpfX1mdW5jdGlvbiBqNWUobix0KXtpZigxJm4mJihfKDAsInNwYW4iLDQpLEEoMSksdigpKSwyJm4pe2xldCBlPVMoKTtldCgiaWxsZWdhbCIsIWUuaXNBbGlhc05hbWVMZWdhbCkseSgidGl0bGUiLGUudGl0bGUpLEMoMSkseXQoZS5hbGlhcy5hbGlhc1RleHQpfX12YXIgY3k9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNBbGlhc05hbWVMZWdhbD0hMCx0aGlzLmFsaWFzQ2hhbmdlZD1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZXhwZXJpbWVudC1hbGlhcyJdXSxpbnB1dHM6e2FsaWFzOiJhbGlhcyIsYWxpYXNFZGl0YWJsZToiYWxpYXNFZGl0YWJsZSIsdGl0bGU6InRpdGxlIixpc0FsaWFzTmFtZUxlZ2FsOiJpc0FsaWFzTmFtZUxlZ2FsIn0sb3V0cHV0czp7YWxpYXNDaGFuZ2VkOiJhbGlhc0NoYW5nZWQifSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sxLCJhbGlhcy1udW1iZXIiXSxbInBsYWNlaG9sZGVyIiwiQWxpYXMgZm9yIGV4cGVyaW1lbnQiLDMsInN0eWxlIiwidmFsdWUiLCJvblZhbHVlQ2hhbmdlIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vRWRpdEFsaWFzTmFtZSIsIiJdLFsicGxhY2Vob2xkZXIiLCJBbGlhcyBmb3IgZXhwZXJpbWVudCIsMywidmFsdWUiLCJvblZhbHVlQ2hhbmdlIl0sWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJzcGFuIiwwKSxBKDEpLHYoKSxFKDIsejVlLDEsMywiY29udGVudC13cmFwcGluZy1pbnB1dCIsMSksRSgzLGo1ZSwyLDQsIm5nLXRlbXBsYXRlIixudWxsLDIscXQpKSwyJmUpe2xldCByPSRlKDQpO0MoMSkseXQoaS5hbGlhcy5hbGlhc051bWJlciksQygxKSx5KCJuZ0lmIixpLmFsaWFzRWRpdGFibGUpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W0JlLEpvZV0sc3R5bGVzOlsiLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtjb2xvcjojMjEyMTIxO2JvcmRlci1yYWRpdXM6MnB4O21hcmdpbi1yaWdodDoycHg7cGFkZGluZzowIDJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lfSJdfSksbn0pKCk7ZnVuY3Rpb24gRzVlKG4sdCl7MSZuJiZPKDAsInRiLWV4cGVyaW1lbnQtYWxpYXMiLDIpLDImbiYmeSgiYWxpYXMiLFMoKS5leHBlcmltZW50QWxpYXMpfWZ1bmN0aW9uIFc1ZShuLHQpezEmbiYmKF8oMCwic3BhbiIpLEEoMSwiLyIpLHYoKSl9dmFyICRvZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lLWNvbXBvbmVudCJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGV4cGVyaW1lbnRBbGlhczoiZXhwZXJpbWVudEFsaWFzIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbMywiYWxpYXMiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJhbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKEUoMCxHNWUsMSwxLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwwKSxFKDEsVzVlLDIsMCwic3BhbiIsMSksXygyLCJzcGFuIiksQSgzKSx2KCkpLDImZSYmKHkoIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSxDKDEpLHkoIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSxDKDIpLHl0KGkubmFtZSkpfSxkZXBlbmRlbmNpZXM6W0JlLGN5XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseVI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWV9bmdPbkluaXQoKXt0aGlzLm5hbWUkPUx0KFt0aGlzLnN0b3JlLnNlbGVjdChXSSx7cnVuSWQ6dGhpcy5ydW5JZH0pXSkucGlwZShMKChbZV0pPT5mdW5jdGlvbihuLHQsZSl7aWYoIXQpcmV0dXJuIG47bGV0IGk9dD8ubmFtZT8/Ii4uLiI7cmV0dXJuIGl9KHRoaXMucnVuSWQsZSkpKSx0aGlzLmV4cGVyaW1lbnRBbGlhcyQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KEdJLHtydW5JZDp0aGlzLnJ1bklkfSksdGhpcy5zdG9yZS5zZWxlY3QoWXUpXSkucGlwZShMKChbZSxpXSk9PmU/aVtlXTpudWxsKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lIl1dLGlucHV0czp7cnVuSWQ6InJ1bklkIn0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywibmFtZSIsImV4cGVyaW1lbnRBbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE8oMCwiY2FyZC1ydW4tbmFtZS1jb21wb25lbnQiLDApLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpKSwyJmUmJih5KCJuYW1lIixVKDEsMyxpLm5hbWUkKSkoImV4cGVyaW1lbnRBbGlhcyIsVSgzLDcsaS5leHBlcmltZW50QWxpYXMkKSksemUoInRpdGxlIixVKDIsNSxpLm5hbWUkKSkpfSxkZXBlbmRlbmNpZXM6WyRvZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gWTVlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwyKSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSx5dChlLmZpcnN0VGV4dFBhcnQoKSl9fXZhciB1eT0oKCk9PntjbGFzcyBue3BhcnNlVmFsdWUoKXtsZXQgZT10aGlzLnZhbHVlLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lP3tmaXJzdDoiIixzZWNvbmQ6dGhpcy52YWx1ZX06e2ZpcnN0OnRoaXMudmFsdWUuc2xpY2UoMCxlKSxzZWNvbmQ6dGhpcy52YWx1ZS5zbGljZShlKX19Zmlyc3RUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5maXJzdH1zZWNvbmRUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5zZWNvbmR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLXRydW5jYXRlZC1wYXRoIl1dLGlucHV0czp7dmFsdWU6InZhbHVlIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNsYXNzIiwiZmlyc3QtdGV4dC1wYXJ0Iiw0LCJuZ0lmIl0sWzEsInNlY29uZC10ZXh0LXBhcnQiXSxbMSwiZmlyc3QtdGV4dC1wYXJ0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRSgwLFk1ZSwyLDEsInNwYW4iLDApLF8oMSwic3BhbiIsMSksQSgyKSx2KCkpLDImZSYmKHkoIm5nSWYiLGkuZmlyc3RUZXh0UGFydCgpLmxlbmd0aD4wKSxDKDIpLHl0KGkuc2Vjb25kVGV4dFBhcnQoKSkpfSxkZXBlbmRlbmNpZXM6W0JlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2hpdGUtc3BhY2U6bm93cmFwfS5maXJzdC10ZXh0LXBhcnRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxIDRjaDttYXgtd2lkdGg6bWF4LWNvbnRlbnR9LmZpcnN0LXRleHQtcGFydFtfbmdjb250ZW50LSVDT01QJV0sIC5zZWNvbmQtdGV4dC1wYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30iXX0pLG59KSgpO2Z1bmN0aW9uIFg1ZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMil9ZnVuY3Rpb24gUTVlKG4sdCl7MSZuJiZPKDAsIm1hdC1pY29uIiwzKX12YXIgZHk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNDbGlwcGVkPSExLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkPSExfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciXV0saW5wdXRzOntpc0NsaXBwZWQ6ImlzQ2xpcHBlZCIsaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkOiJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1siZGF0YS12YWx1ZSIsImNsaXBwZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkxpbmtlZCBzdGVwIGlzIG5vdCBmb3VuZCBpbiB0aGlzIHZpc3VhbGl6YXRpb24uIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iLDQsIm5nSWYiXSxbImRhdGEtdmFsdWUiLCJjbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwic3ZnSWNvbiIsImluZm9fb3V0bGluZV8yNHB4IiwidGl0bGUiLCJEYXRhIGlzIG5vdCBmb3VuZCBvbiBzZWxlY3RlZCBzdGVwLiBXZSBoaWdobGlnaHRlZCB0aGUgY2xvc2VzdCBzdGVwIGZvciB5b3UuIiw0LCJuZ0lmIl0sWyJkYXRhLXZhbHVlIiwiY2xpcHBlZCIsInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCIsInRpdGxlIiwiTGlua2VkIHN0ZXAgaXMgbm90IGZvdW5kIGluIHRoaXMgdmlzdWFsaXphdGlvbi4gV2UgaGlnaGxpZ2h0ZWQgdGhlIGNsb3Nlc3Qgc3RlcCBmb3IgeW91LiJdLFsiZGF0YS12YWx1ZSIsImNsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkRhdGEgaXMgbm90IGZvdW5kIG9uIHNlbGVjdGVkIHN0ZXAuIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihFKDAsWDVlLDEsMCwibWF0LWljb24iLDApLEUoMSxRNWUsMSwwLCJtYXQtaWNvbiIsMSkpLDImZSYmKHkoIm5nSWYiLGkuaXNDbGlwcGVkKSxDKDEpLHkoIm5nSWYiLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkKSl9LGRlcGVuZGVuY2llczpbQmUsR3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29sb3I6I2QzMmYyZjtoZWlnaHQ6MWVtO2xpbmUtaGVpZ2h0OjA7ZGlzcGxheTppbmxpbmUtZmxleH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6I2QzMmYyZn1bX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBLNWUobix0KXtpZigxJm4mJihfKDAsInNwYW4iLDE5KSxBKDEpLEIoMiwibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPVMoKTtDKDEpLGplKCJTdGVwICIsVSgyLDEsZS5zdGVwc1tlLnN0ZXBJbmRleF0pLCIiKX19ZnVuY3Rpb24gWjVlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwyMCksQSgxKSxCKDIsIm51bWJlciIpLEIoMywibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPVMoKTtDKDEpLFhwKCJTYW1wbGUgIixVKDIsMixlLnNhbXBsZSsxKSwiLyIsVSgzLDQsZS5udW1TYW1wbGUpLCIiKX19ZnVuY3Rpb24gSjVlKG4sdCl7MSZuJiZPKDAsIm1hdC1zcGlubmVyIiwyMSl9ZnVuY3Rpb24gJDVlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiksTygxLCJzcGFuIiwzMCkoMiwic3BhbiIsMzEpLHYoKSksMiZuKXtsZXQgZT1TKDMpO0MoMiksUHQoImxlZnQiLGUuc2xpZGVyU3RhcnRQb3NpdGlvbikoIndpZHRoIixlLnNsaWRlclRyYWNrV2lkdGgpfX1mdW5jdGlvbiBlNGUobix0KXtpZigxJm4mJk8oMCwiZGl2IiwzMiksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoMyk7UHQoImxlZnQiLGkuZ2V0TGlua2VkVGltZVRpY2tMZWZ0U3R5bGUoZSkpKCJtYXJnaW4tbGVmdCIsaS5nZXRMaW5rZWRUaW1lVGlja01hcmdpbkxlZnRTdHlsZShlKSl9fWZ1bmN0aW9uIHQ0ZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwyNyksRSgxLCQ1ZSwzLDQsInNwYW4iLDI4KSxFKDIsZTRlLDEsNCwiZGl2IiwyOSksdigpKSwyJm4pe2xldCBlPVMoMik7QygxKSx5KCJuZ0lmIixudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXApLEMoMSkseSgibmdGb3JPZiIsZS5zZWxlY3RlZFN0ZXBzKX19dmFyIG40ZT1mdW5jdGlvbihuKXtyZXR1cm5bbl19LGk0ZT1mdW5jdGlvbihuKXtyZXR1cm57ZmlsdGVyOm59fTtmdW5jdGlvbiByNGUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7c24oMCksXygxLCJkaXYiLDIyKSgyLCJtYXQtc2xpZGVyIiwyMyksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25TbGlkZXJJbnB1dChyKSl9KSx2KCksRSgzLHQ0ZSwzLDIsImRpdiIsMjQpLHYoKSxfKDQsImRpdiIsMjUpLE8oNSwiaW1nIiwyNiksdigpLGFuKCl9aWYoMiZuKXtsZXQgZT1TKCk7QygyKSx5KCJuZ0NsYXNzIixPbigxMSxuNGUsZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA/ImhpZGUtc2xpZGVyIjoiIikpKCJkaXNhYmxlZCIsZS5zdGVwcy5sZW5ndGg8PTEpKCJtaW4iLDApKCJtYXgiLGUuc3RlcHMubGVuZ3RoLTEpKCJzdGVwIiwxKSgidGlja0ludGVydmFsIiwxKSgidmFsdWUiLGUuc3RlcEluZGV4KSxDKDEpLHkoIm5nSWYiLGUubGlua2VkVGltZVNlbGVjdGlvbiksQygyKSxYeCgiYWx0IiwiSW1hZ2UgYXQgc3RlcCAiLGUuc3RlcHNbZS5zdGVwSW5kZXhdLCIiKSxaaSgic3JjIixlLmltYWdlVXJsLHpsKSx5KCJuZ1N0eWxlIixPbigxMyxpNGUsZS5jc3NGaWx0ZXIoKSkpfX1mdW5jdGlvbiBvNGUobix0KXsxJm4mJihfKDAsImRpdiIsMzQpLEEoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLHYoKSl9ZnVuY3Rpb24gczRlKG4sdCl7aWYoMSZuJiZFKDAsbzRlLDIsMCwiZGl2IiwzMyksMiZuKXtsZXQgZT1TKCk7eSgibmdJZiIsZS5sb2FkU3RhdGU9PT1lLkRhdGFMb2FkU3RhdGUuRkFJTEVEKX19dmFyIGE0ZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fSx0c2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGF0YUxvYWRTdGF0ZT1PZSx0aGlzLnNsaWRlclN0YXJ0UG9zaXRpb249IiIsdGhpcy5zbGlkZXJUcmFja1dpZHRoPSIiLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbj1udWxsLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkPSExLHRoaXMub25BY3R1YWxTaXplVG9nZ2xlPW5ldyBHLHRoaXMuc3RlcEluZGV4Q2hhbmdlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHfWNzc0ZpbHRlcigpe3JldHVybmBjb250cmFzdCgke3RoaXMuY29udHJhc3RJbk1pbGxpLzEwfSUpIGJyaWdodG5lc3MoJHt0aGlzLmJyaWdodG5lc3NJbk1pbGxpLzFlM30pYH1vblNsaWRlcklucHV0KGUpe3RoaXMuc3RlcEluZGV4Q2hhbmdlLmVtaXQoZS52YWx1ZSl9Y2hhbmdlRGlzdGluY3QoZSl7cmV0dXJuIGUuY3VycmVudFZhbHVlIT09ZS5wcmV2aW91c1ZhbHVlfW5nT25DaGFuZ2VzKGUpeyhlLnNlbGVjdGVkU3RlcHMmJnRoaXMuY2hhbmdlRGlzdGluY3QoZS5zZWxlY3RlZFN0ZXBzKXx8ZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZ0aGlzLmNoYW5nZURpc3RpbmN0KGUubGlua2VkVGltZVNlbGVjdGlvbikpJiZ0aGlzLnJlbmRlclJhbmdlU2xpZGVyKCl9cmVuZGVyUmFuZ2VTbGlkZXIoKXtpZighdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9ufHwhdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXApcmV0dXJuO2xldCBlPXRoaXMuc3RlcHMubGVuZ3RoLTEsaT10aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnRTdGVwPHRoaXMuc3RlcHNbMF0/dGhpcy5zdGVwc1swXTp0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnRTdGVwLHI9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA+dGhpcy5zdGVwc1tlXT90aGlzLnN0ZXBzW2VdOnRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5lbmRTdGVwLHtzdGFydFBvc2l0aW9uOm8sd2lkdGg6c309dGhpcy5nZXRUcmFja1N0YXJ0UG9zaXRpb25BbmRXaWR0aChpLHIsZSk7dGhpcy5zbGlkZXJTdGFydFBvc2l0aW9uPTEwMCpvKyIlIix0aGlzLnNsaWRlclRyYWNrV2lkdGg9MTAwKnMrIiUifWdldFRyYWNrU3RhcnRQb3NpdGlvbkFuZFdpZHRoKGUsaSxyKXtsZXQgbz0xL3Iscz0wLGE9MCxsPTA7Zm9yKDtsPHRoaXMuc3RlcHMubGVuZ3RoLTE7bCsrKXtsZXQgYz10aGlzLnN0ZXBzW2xdLHU9dGhpcy5zdGVwc1tsKzFdO2lmKGM8PWUmJmU8PXUpe3MrPShlLWMpLyh1LWMpO2JyZWFrfX1mb3Iocz0ocytsKSpvO2w8dGhpcy5zdGVwcy5sZW5ndGgtMTtsKyspe2xldCBjPXRoaXMuc3RlcHNbbF0sdT10aGlzLnN0ZXBzW2wrMV07aWYoZT49YyYmaTw9dSl7YT0oaS1lKS8odS1jKTticmVha31pZihlPj1jJiZpPj11KWErPSh1LWUpLyh1LWMpO2Vsc2V7aWYoIShpPj11KSl7YSs9KGktYykvKHUtYyk7YnJlYWt9YSs9MX19cmV0dXJuIGEqPW8sKHM+MXx8czwwKSYmKHM9MCkse3N0YXJ0UG9zaXRpb246cyx3aWR0aDphfX1nZXRMaW5rZWRUaW1lVGlja0xlZnRTdHlsZShlKXtpZigtMT09dGhpcy5zdGVwcy5pbmRleE9mKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGVwSW5kZXg6IHN0ZXBJbmRleCB2YWx1ZSBpcyBub3QgaW5jbHVkZWQgaW4gc3RlcHMiKTtyZXR1cm4gdGhpcy5zdGVwcy5pbmRleE9mKGUpLyh0aGlzLnN0ZXBzLmxlbmd0aC0xKSoxMDArIiUifWdldExpbmtlZFRpbWVUaWNrTWFyZ2luTGVmdFN0eWxlKGUpe2lmKC0xPT10aGlzLnN0ZXBzLmluZGV4T2YoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0ZXBJbmRleDogc3RlcEluZGV4IHZhbHVlIGlzIG5vdCBpbmNsdWRlZCBpbiBzdGVwcyIpO3JldHVybmAtJHt0aGlzLnN0ZXBzLmluZGV4T2YoZSkvKHRoaXMuc3RlcHMubGVuZ3RoLTEpKjE0fXB4YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siaW1hZ2UtY2FyZC1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmV0KCJhY3R1YWwtc2l6ZSIsaS5zaG93QWN0dWFsU2l6ZSl9LGlucHV0czp7bG9hZFN0YXRlOiJsb2FkU3RhdGUiLHRpdGxlOiJ0aXRsZSIsdGFnOiJ0YWciLHJ1bklkOiJydW5JZCIsc2FtcGxlOiJzYW1wbGUiLG51bVNhbXBsZToibnVtU2FtcGxlIixpbWFnZVVybDoiaW1hZ2VVcmwiLHN0ZXBJbmRleDoic3RlcEluZGV4IixzdGVwczoic3RlcHMiLGJyaWdodG5lc3NJbk1pbGxpOiJicmlnaHRuZXNzSW5NaWxsaSIsY29udHJhc3RJbk1pbGxpOiJjb250cmFzdEluTWlsbGkiLHNob3dBY3R1YWxTaXplOiJzaG93QWN0dWFsU2l6ZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsYWxsb3dUb2dnbGVBY3R1YWxTaXplOiJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLGlzUGlubmVkOiJpc1Bpbm5lZCIsc2VsZWN0ZWRTdGVwczoic2VsZWN0ZWRTdGVwcyIsbGlua2VkVGltZVNlbGVjdGlvbjoibGlua2VkVGltZVNlbGVjdGlvbiIsaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkOiJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQifSxvdXRwdXRzOntvbkFjdHVhbFNpemVUb2dnbGU6Im9uQWN0dWFsU2l6ZVRvZ2dsZSIsc3RlcEluZGV4Q2hhbmdlOiJzdGVwSW5kZXhDaGFuZ2UiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczoyMSx2YXJzOjE2LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBwaW4gYSBjYXJkLuKQn2U2NjVkYzcxMmJkNWYxOGQ0ZGZhM2EyOWUxMjVkNTY1Y2M1MWUyZjbikJ83Mjg0NjA2NDI2MjM0Mzc1MzQ0OlBpbiBjYXJkYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gb24gYW4gaW1hZ2UgY2FyZCB0aGF0IHRvZ2dsZXMgYWN0dWFsIGltYWdlIHNpemUu4pCfM2NhMDVlZjNhNmUzYTM3MDY1ZjVlMGY2OWM1ZDVhMjE3OGQ5MDc5MeKQnzc2MzUxMDE5MzY2NjQ3ODkxNDA6VG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplYCxbWzEsImhlYWRpbmciXSxbMSwibGluZSJdLFsxLCJ0YWciXSxbMSwidGFnLXBhdGgiLDMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwiaW1hZ2Vfc2VhcmNoXzI0cHgiXSxbMSwicnVuIl0sWzEsImRvdCIsMywibmdTdHlsZSJdLFsxLCJydW4tdGV4dCIsMywicnVuSWQiXSxbMSwibWV0YWRhdGEiXSxbImNsYXNzIiwic3RlcCIsNCwibmdJZiJdLFsiY2xhc3MiLCJzYW1wbGUiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZyIsImRpYW1ldGVyIiwiMTgiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ltYWdlRGF0YSIsIiJdLFsxLCJzdGVwIl0sWzEsInNhbXBsZSJdLFsiZGlhbWV0ZXIiLCIxOCIsMSwibG9hZGluZyJdLFsxLCJzbGlkZXItcm93Il0sWyJjb2xvciIsInByaW1hcnkiLDEsInN0ZXAtc2xpZGVyIiwzLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJtaW4iLCJtYXgiLCJzdGVwIiwidGlja0ludGVydmFsIiwidmFsdWUiLCJpbnB1dCJdLFsiY2xhc3MiLCJsaW5rZWQtdGltZS13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImltZy1jb250YWluZXIiXSxbMywiYWx0Iiwic3JjIiwibmdTdHlsZSJdLFsxLCJsaW5rZWQtdGltZS13cmFwcGVyIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwibGlua2VkLXRpbWUtdGljayIsMywibGVmdCIsIm1hcmdpbi1sZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwic2xpZGVyLXRyYWNrIl0sWzEsInNsaWRlci10cmFjay1maWxsIl0sWzEsImxpbmtlZC10aW1lLXRpY2siXSxbImNsYXNzIiwiZW1wdHktbWVzc2FnZSIsNCwibmdJZiJdLFsxLCJlbXB0eS1tZXNzYWdlIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKF8oMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsInNwYW4iLDIpLE8oMywidGItdHJ1bmNhdGVkLXBhdGgiLDMpKDQsInZpcy1saW5rZWQtdGltZS1zZWxlY3Rpb24td2FybmluZyIsNCksdigpLF8oNSwic3BhbiIsNSkoNiwiYnV0dG9uIiw2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxPKDcsIm1hdC1pY29uIiw3KSx2KCksXyg4LCJidXR0b24iLDgpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uQWN0dWFsU2l6ZVRvZ2dsZS5lbWl0KCl9KSxPKDksIm1hdC1pY29uIiw5KSx2KCkoKSgpLF8oMTAsImRpdiIsMSkoMTEsInNwYW4iLDEwKSxPKDEyLCJzcGFuIiwxMSkoMTMsImNhcmQtcnVuLW5hbWUiLDEyKSx2KCksXygxNCwiZGl2IiwxMyksRSgxNSxLNWUsMywzLCJzcGFuIiwxNCksRSgxNixaNWUsNCw2LCJzcGFuIiwxNSksRSgxNyxKNWUsMSwwLCJtYXQtc3Bpbm5lciIsMTYpLHYoKSgpKCksRSgxOCxyNGUsNiwxNSwibmctY29udGFpbmVyIiwxNyksRSgxOSxzNGUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxOCxxdCkpLDImZSl7bGV0IHI9JGUoMjApO0MoMyksWmkoInRpdGxlIixpLnRhZyksWmkoInZhbHVlIixpLnRpdGxlKSxDKDEpLHkoImlzQ2xpcHBlZCIsaS5saW5rZWRUaW1lU2VsZWN0aW9uJiZpLmxpbmtlZFRpbWVTZWxlY3Rpb24uY2xpcHBlZCkoImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsaS5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQpLEMoMiksemUoInRpdGxlIixpLmlzUGlubmVkPyJVbnBpbiBjYXJkIjoiUGluIGNhcmQiKSxDKDEpLHkoInN2Z0ljb24iLGkuaXNQaW5uZWQ/ImtlZXBfMjRweCI6ImtlZXBfb3V0bGluZV8yNHB4IiksQygxKSx5KCJkaXNhYmxlZCIsIWkuYWxsb3dUb2dnbGVBY3R1YWxTaXplKSxDKDQpLHkoIm5nU3R5bGUiLE9uKDE0LGE0ZSxpLnJ1bkNvbG9yU2NhbGUoaS5ydW5JZCkpKSxDKDEpLHkoInJ1bklkIixpLnJ1bklkKSxDKDIpLHkoIm5nSWYiLG51bGwhPT1pLnN0ZXBJbmRleCYmaS5zdGVwSW5kZXg8aS5zdGVwcy5sZW5ndGgpLEMoMSkseSgibmdJZiIsaS5udW1TYW1wbGU+MSksQygxKSx5KCJuZ0lmIixpLmxvYWRTdGF0ZT09PWkuRGF0YUxvYWRTdGF0ZS5MT0FESU5HKSxDKDEpLHkoIm5nSWYiLG51bGwhPT1pLnN0ZXBJbmRleCYmaS5zdGVwSW5kZXg8aS5zdGVwcy5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W0ZuLGRuLEJlLHp1LF9uLEd0LEJvLHVwLHlSLHV5LGR5LFFsXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczozMThweDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5hY3R1YWwtc2l6ZVtfbmdob3N0LSVDT01QJV17aGVpZ2h0OmF1dG99LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubGluZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIG1heC1jb250ZW50fS50YWdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOjVweH0ubWV0YWRhdGFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NXB4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXgtd2lkdGg6MTc1cHg7dGV4dC1hbGlnbjplbmR9LnRhZy1wYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVde2FsaWduLXNlbGY6YmFzZWxpbmU7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAuZG90W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTNweDtoZWlnaHQ6MTNweDtib3JkZXItcmFkaXVzOjUwJTttYXJnaW4tcmlnaHQ6NHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLnJ1bi10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczttYXgtd2lkdGg6MTIwcHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0sIC5zYW1wbGVbX25nY29udGVudC0lQ09NUCVdLCAuc3RlcFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTNweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnJ1bltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNhbXBsZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zYW1wbGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnN0ZXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7anVzdGlmeS1zZWxmOmZsZXgtZW5kO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXJpZ2h0Oi0xMnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmltZy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO292ZXJmbG93LXk6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZX0uaW1nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBpbWdbX25nY29udGVudC0lQ09NUCVde2ltYWdlLXJlbmRlcmluZzotbW96LWNyaXNwLWVkZ2VzO2ltYWdlLXJlbmRlcmluZzpwaXhlbGF0ZWR9LmFjdHVhbC1zaXplW19uZ2hvc3QtJUNPTVAlXSAgIC5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO2ZsZXg6bm9uZX1bX25naG9zdC0lQ09NUCVdOm5vdCguYWN0dWFsLXNpemUpICAgaW1nW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTttYXgtaGVpZ2h0OjEwMCU7bWF4LXdpZHRoOjEwMCU7d2lkdGg6YXV0bztoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvbnRhaW59LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI0cHg7cG9zaXRpb246cmVsYXRpdmV9LnN0ZXAtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjF9W19uZ2hvc3QtJUNPTVAlXSAgICAgLm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH1bX25naG9zdC0lQ09NUCVdICAgICAuaGlkZS1zbGlkZXIubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjB9LmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MWVtO2ZvbnQtc2l6ZToxM3B4fS5saW5rZWQtdGltZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NXB4O3dpZHRoOjEwMCV9LmxpbmtlZC10aW1lLXRpY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6MTRweDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxNHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5saW5rZWQtdGltZS10aWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmxpbmtlZC10aW1lLXRpY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzIxMjEyMX0uc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MnB4O3RvcDo2cHg7cG9zaXRpb246YWJzb2x1dGV9LnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4yNik7bGVmdDo3cHg7d2lkdGg6Y2FsYygxMDAlIC0gMTRweCl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyl9LnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNlZjZjMDB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxuc2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLmRhdGFTb3VyY2U9aSx0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEcsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IEcsdGhpcy5icmlnaHRuZXNzSW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3Qoa0kpLHRoaXMuY29udHJhc3RJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdChGSSksdGhpcy5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQ9dGhpcy5zdG9yZS5zZWxlY3QoTkkpLHRoaXMuc2hvd0FjdHVhbFNpemU9ITEsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkPSExLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlU3ViamVjdD1uZXcgaHIodGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IGtlfW9uU3RlcEluZGV4Q2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKG9SKHtjYXJkSWQ6dGhpcy5jYXJkSWQsc3RlcEluZGV4OmV9KSl9aXNJbWFnZUNhcmRNZXRhZGF0YShlKXtsZXR7cGx1Z2luOml9PWU7cmV0dXJuIGk9PT1yaS5JTUFHRVN9b25BY3R1YWxTaXplVG9nZ2xlKCl7dGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkPSF0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZWQsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVTdWJqZWN0Lm5leHQodGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkKX1uZ09uSW5pdCgpe0x0KFt0aGlzLmFjdHVhbFNpemVHbG9iYWxTZXR0aW5nJCx0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZVN1YmplY3RdKS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSksa3QoKFtsLGNdKT0+e3RoaXMuc2hvd0FjdHVhbFNpemU9bHx8Yyx0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdCh0aGlzLnNob3dBY3R1YWxTaXplKX0pKS5zdWJzY3JpYmUoKCk9Pnt9KTtsZXQgaT10aGlzLnN0b3JlLnNlbGVjdCh0Yyx0aGlzLmNhcmRJZCkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpLFllKGw9PiEhbCYmdGhpcy5pc0ltYWdlQ2FyZE1ldGFkYXRhKGwpKSxMKGw9PmwpLE1hKDEpKSxvPUx0KFtpLHRoaXMuc3RvcmUuc2VsZWN0KHhoLHRoaXMuY2FyZElkKV0pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxMKChbbCxjXSk9PntsZXQgdT1sLnJ1bklkO3JldHVybiBjJiZjLmhhc093blByb3BlcnR5KHUpP2NbdV06W119KSx5aSgobCxjKT0+bC5sZW5ndGg9PT1jLmxlbmd0aCYmMD09PWwubGVuZ3RofHxsPT09YyksTWEoMSkpO3RoaXMuc3RlcEluZGV4JD10aGlzLnN0b3JlLnNlbGVjdCh0SCx0aGlzLmNhcmRJZCkucGlwZShMKGw9Pmw/bC5pbmRleDpudWxsKSksdGhpcy5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQkPXRoaXMuc3RvcmUuc2VsZWN0KHRILHRoaXMuY2FyZElkKS5waXBlKEwobD0+ISFsJiZsLmlzQ2xvc2VzdCkpLHRoaXMubG9hZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChiaCx0aGlzLmNhcmRJZCksdGhpcy50YWckPWkucGlwZShMKGw9PmwudGFnKSksdGhpcy50aXRsZSQ9dGhpcy50YWckLnBpcGUoTChsPT5seShsLHRoaXMuZ3JvdXBOYW1lKSkpLHRoaXMucnVuSWQkPWkucGlwZShMKGw9PmwucnVuSWQpKSx0aGlzLnNhbXBsZSQ9aS5waXBlKEwobD0+bC5zYW1wbGUpKSx0aGlzLm51bVNhbXBsZSQ9aS5waXBlKEwobD0+bC5udW1TYW1wbGUpKSx0aGlzLnN0ZXBzJD10aGlzLnN0b3JlLnNlbGVjdChnZWUsdGhpcy5jYXJkSWQpLHRoaXMuaXNQaW5uZWQkPXRoaXMuc3RvcmUuc2VsZWN0KENoLHRoaXMuY2FyZElkKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KFhtKS5waXBlKGZyKHRoaXMuc3RlcHMkKSxMKChbbCxjXSk9Pmw/UWgobCxNYXRoLm1pbiguLi5jKSxNYXRoLm1heCguLi5jKSk6bnVsbCkpLHRoaXMuc2VsZWN0ZWRTdGVwcyQ9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJC5waXBlKGZyKHRoaXMuc3RlcHMkKSxMKChbbCxjXSk9Pmw/bnVsbD09PWwuZW5kU3RlcD8tMSE9PWMuaW5kZXhPZihsLnN0YXJ0U3RlcCk/W2wuc3RhcnRTdGVwXTpbXTpjLmZpbHRlcih1PT51Pj1sLnN0YXJ0U3RlcCYmdTw9bC5lbmRTdGVwKTpbXSkpO2xldCBhPUx0KFtvLHRoaXMuc3RlcEluZGV4JF0pLnBpcGUoTCgoW2wsY10pPT5udWxsIT09YyYmbFtjXT9sW2NdOm51bGwpKTt0aGlzLmltYWdlVXJsJD1hLnBpcGUoTChsPT5sP3RoaXMuZGF0YVNvdXJjZS5pbWFnZVVybChsLmltYWdlSWQpOm51bGwpKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpLE0oJHUpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJpbWFnZS1jYXJkIl1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoxNyx2YXJzOjUwLGNvbnN0czpbWzMsImxvYWRTdGF0ZSIsInRpdGxlIiwidGFnIiwicnVuSWQiLCJzYW1wbGUiLCJudW1TYW1wbGUiLCJpbWFnZVVybCIsInN0ZXBJbmRleCIsInN0ZXBzIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwiYnJpZ2h0bmVzc0luTWlsbGkiLCJjb250cmFzdEluTWlsbGkiLCJydW5Db2xvclNjYWxlIiwic2hvd0FjdHVhbFNpemUiLCJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLCJpc1Bpbm5lZCIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzZWxlY3RlZFN0ZXBzIiwic3RlcEluZGV4Q2hhbmdlIiwib25BY3R1YWxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJpbWFnZS1jYXJkLWNvbXBvbmVudCIsMCksUCgic3RlcEluZGV4Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblN0ZXBJbmRleENoYW5nZWQobyl9KSgib25BY3R1YWxTaXplVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQWN0dWFsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLEIoMywiYXN5bmMiKSxCKDQsImFzeW5jIiksQig1LCJhc3luYyIpLEIoNiwiYXN5bmMiKSxCKDcsImFzeW5jIiksQig4LCJhc3luYyIpLEIoOSwiYXN5bmMiKSxCKDEwLCJhc3luYyIpLEIoMTEsImFzeW5jIiksQigxMiwiYXN5bmMiKSxCKDEzLCJhc3luYyIpLEIoMTQsImFzeW5jIiksQigxNSwiYXN5bmMiKSxCKDE2LCJhc3luYyIpLHYoKSksMiZlJiZ5KCJsb2FkU3RhdGUiLFUoMSwxOCxpLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFUoMiwyMCxpLnRpdGxlJCkpKCJ0YWciLFUoMywyMixpLnRhZyQpKSgicnVuSWQiLFUoNCwyNCxpLnJ1bklkJCkpKCJzYW1wbGUiLFUoNSwyNixpLnNhbXBsZSQpKSgibnVtU2FtcGxlIixVKDYsMjgsaS5udW1TYW1wbGUkKSkoImltYWdlVXJsIixVKDcsMzAsaS5pbWFnZVVybCQpKSgic3RlcEluZGV4IixVKDgsMzIsaS5zdGVwSW5kZXgkKSkoInN0ZXBzIixVKDksMzQsaS5zdGVwcyQpKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixVKDEwLDM2LGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJCkpKCJicmlnaHRuZXNzSW5NaWxsaSIsVSgxMSwzOCxpLmJyaWdodG5lc3NJbk1pbGxpJCkpKCJjb250cmFzdEluTWlsbGkiLFUoMTIsNDAsaS5jb250cmFzdEluTWlsbGkkKSkoInJ1bkNvbG9yU2NhbGUiLGkucnVuQ29sb3JTY2FsZSkoInNob3dBY3R1YWxTaXplIixpLnNob3dBY3R1YWxTaXplKSgiYWxsb3dUb2dnbGVBY3R1YWxTaXplIiwhMT09PVUoMTMsNDIsaS5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQpKSgiaXNQaW5uZWQiLFUoMTQsNDQsaS5pc1Bpbm5lZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVSgxNSw0NixpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoInNlbGVjdGVkU3RlcHMiLFUoMTYsNDgsaS5zZWxlY3RlZFN0ZXBzJCkpfSxkZXBlbmRlbmNpZXM6W3RzZSxHZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGRyPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TVkc9MF09IlNWRyIsbltuLldFQkdMPTFdPSJXRUJHTCJ9KGRyfHwoZHI9e30pKSxkcikpKCksTnI9KCgpPT4oZnVuY3Rpb24obil7bltuLkxJTkVBUj0wXT0iTElORUFSIixuW24uTE9HMTA9MV09IkxPRzEwIixuW24uVElNRT0yXT0iVElNRSJ9KE5yfHwoTnI9e30pKSxOcikpKCksR3I9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJOT05FIixuLkRSQUdfWk9PTUlORz0iRFJBR19aT09NSU5HIixuLlNDUk9MTF9aT09NSU5HPSJTQ1JPTExfWk9PTUlORyIsbi5QQU5OSU5HPSJQQU5OSU5HIn0oR3J8fChHcj17fSkpLEdyKSkoKTtmdW5jdGlvbiBkNGUobix0KXsxJm4mJihfKDAsInNwYW4iKSxBKDEsInNjYWxhciIpLHYoKSl9ZnVuY3Rpb24gcDRlKG4sdCl7MSZuJiYoXygwLCJzcGFuIiksQSgxLCJoaXN0b2dyYW0iKSx2KCkpfWZ1bmN0aW9uIGg0ZShuLHQpezEmbiYmKF8oMCwic3BhbiIpLEEoMSwidW5rbm93biIpLHYoKSl9ZnVuY3Rpb24gZjRlKG4sdCl7aWYoMSZuJiYoc24oMCwxMyksRSgxLGQ0ZSwyLDAsInNwYW4iLDE0KSxFKDIscDRlLDIsMCwic3BhbiIsMTQpLEUoMyxoNGUsMiwwLCJzcGFuIiwxNSksYW4oKSksMiZuKXtsZXQgZT1TKDIpO3koIm5nU3dpdGNoIixlLmNhcmRNZXRhZGF0YS5wbHVnaW4pLEMoMSkseSgibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuU0NBTEFSUyksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKX19ZnVuY3Rpb24gbTRlKG4sdCl7MSZuJiZOaSgwKX1mdW5jdGlvbiBnNGUobix0KXtpZigxJm4mJihfKDAsIm9wdGlvbiIsMTYpLEEoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O3koInZhbHVlIixlLmlkKSxDKDEpLHl0KGUubmFtZSl9fWZ1bmN0aW9uIF80ZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtzbigwKSxfKDEsImgyIiksRSgyLGY0ZSw0LDMsIm5nLXRlbXBsYXRlIixudWxsLDIscXQpLF8oNCwic3BhbiIpLEEoNSwiRG93bmxvYWRceGEwIiksdigpLEUoNixtNGUsMSwwLCJuZy1jb250YWluZXIiLDMpLF8oNywic3BhbiIpLEEoOCwiXHhhMGRhdGEgZm9yXHhhMCIpLHYoKSxfKDksImNvZGUiLDQpLEEoMTApLHYoKSgpLF8oMTEsIm1hdC1kaWFsb2ctY29udGVudCIpKDEyLCJtYXQtZm9ybS1maWVsZCIsNSkoMTMsIm1hdC1sYWJlbCIpLEEoMTQsIlNlbGVjdCBhIHJ1biB0byBkb3dubG9hZCBhIGRhdGEgZm9yIGEgc2VyaWVzIiksdigpLF8oMTUsInNlbGVjdCIsNiksUCgiY2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLnJ1blNlbGVjdGVkLmVtaXQoci50YXJnZXQudmFsdWUpKX0pLF8oMTYsIm9wdGlvbiIsNyksQSgxNywiLSIpLHYoKSxFKDE4LGc0ZSwyLDIsIm9wdGlvbiIsOCksdigpKCksXygxOSwiZGl2Iiw5KSgyMCwic3BhbiIpLEEoMjEsIkRvd25sb2FkIGFzXHUyMDI2IiksdigpLEEoMjIsIlx4YTAiKSxfKDIzLCJhIiwxMCksQSgyNCwiSlNPTiIpLHYoKSxfKDI1LCJhIiwxMCksQSgyNiwiQ1NWIiksdigpKCkoKSxfKDI3LCJtYXQtZGlhbG9nLWFjdGlvbnMiLDExKSgyOCwiYnV0dG9uIiwxMiksQSgyOSwiQ2xvc2UiKSx2KCkoKSxhbigpfWlmKDImbil7bGV0IGU9JGUoMyksaT1TKCk7Qyg2KSx5KCJuZ1RlbXBsYXRlT3V0bGV0IixlKSxDKDMpLHkoInRpdGxlIixpLmNhcmRNZXRhZGF0YS50YWcpLEMoMSkseXQoaS5jYXJkTWV0YWRhdGEudGFnKSxDKDUpLHkoInZhbHVlIixpLnNlbGVjdGVkUnVuSWR8fCIiKSxDKDEpLHkoInZhbHVlIiwiIiksQygyKSx5KCJuZ0Zvck9mIixpLnJ1bnMpLEMoNSkseSgiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsSnNvbikoImRvd25sb2FkIixpLmdldERvd25sb2FkTmFtZSgianNvbiIpKSx6ZSgiaHJlZiIsaS5kb3dubG9hZFVybEpzb24semwpLEMoMikseSgiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsQ3N2KSgiZG93bmxvYWQiLGkuZ2V0RG93bmxvYWROYW1lKCJjc3YiKSksemUoImhyZWYiLGkuZG93bmxvYWRVcmxDc3YsemwpfX1mdW5jdGlvbiB2NGUobix0KXsxJm4mJkEoMCwiTG9hZGluZy4uLiIpfXZhciByc2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMucnVuU2VsZWN0ZWQ9bmV3IEcsdGhpcy5QbHVnaW5UeXBlPXJpfWdldERvd25sb2FkTmFtZShlKXtsZXQgaT10aGlzLnJ1bnMuZmluZChyPT5yLmlkPT09dGhpcy5zZWxlY3RlZFJ1bklkKTtyZXR1cm4gaT9gJHtpLm5hbWV9LiR7ZX1gOiIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQiXV0saW5wdXRzOntjYXJkTWV0YWRhdGE6ImNhcmRNZXRhZGF0YSIscnVuczoicnVucyIsc2VsZWN0ZWRSdW5JZDoic2VsZWN0ZWRSdW5JZCIsZG93bmxvYWRVcmxDc3Y6ImRvd25sb2FkVXJsQ3N2Iixkb3dubG9hZFVybEpzb246ImRvd25sb2FkVXJsSnNvbiJ9LG91dHB1dHM6e3J1blNlbGVjdGVkOiJydW5TZWxlY3RlZCJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9DYXJkTWV0YWRhdGEiLCIiXSxbImRhdGFOYW1lIiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwidGFnLW5hbWUiLDMsInRpdGxlIl0sWyJhcHBlYXJhbmNlIiwiZmlsbCIsMSwicnVuLXNlbGVjdG9yIl0sWyJtYXROYXRpdmVDb250cm9sIiwiIiwibmFtZSIsInJ1biIsImNka0ZvY3VzSW5pdGlhbCIsIiIsInJlcXVpcmVkIiwiIiwzLCJ2YWx1ZSIsImNoYW5nZSJdLFsic2VsZWN0ZWQiLCIiLDMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZG93bmxvYWQtY29udHJvbHMiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMywiZGlzYWJsZWQiLCJkb3dubG9hZCJdLFsiYWxpZ24iLCJlbmQiXSxbIm1hdC1idXR0b24iLCIiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJOZ1N3aXRjaERlZmF1bHQiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihFKDAsXzRlLDMwLDEyLCJuZy1jb250YWluZXIiLDApLEUoMSx2NGUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLHF0KSksMiZlKXtsZXQgcj0kZSgyKTt5KCJuZ0lmIixpLmNhcmRNZXRhZGF0YSkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbZG4sQmUsb3MsQ3IsVXIsRG5lLEluZSxfbixJdixUMixEMixBMixwZCxOdixVaF0sc3R5bGVzOlsiaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxLjI1ZW07b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5ydW4tc2VsZWN0b3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtO3dpZHRoOjEwMCV9LmRvd25sb2FkLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjllbX0uZG93bmxvYWQtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjNweCAxMHB4IDNweCAwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksb3NlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc2VsZWN0ZWRSdW5JZCQ9bmV3IGhyKG51bGwpLHRoaXMuY2FyZE1ldGFkYXRhJD1lLnNlbGVjdCh0YyxyLmNhcmRJZCkucGlwZShZZShvPT5Cb29sZWFuKG8pKSksdGhpcy5kb3dubG9hZFVybENzdiQ9THQoW2Uuc2VsZWN0KHRjLHIuY2FyZElkKSx0aGlzLnNlbGVjdGVkUnVuSWQkXSkucGlwZShMKChbbyxzXSk9Pm8mJnM/aS5kb3dubG9hZFVybChvLnBsdWdpbixvLnRhZyxzLCJjc3YiKTpudWxsKSx6bihudWxsKSksdGhpcy5kb3dubG9hZFVybEpzb24kPUx0KFtlLnNlbGVjdCh0YyxyLmNhcmRJZCksdGhpcy5zZWxlY3RlZFJ1bklkJF0pLnBpcGUoTCgoW28sc10pPT5vJiZzP2kuZG93bmxvYWRVcmwoby5wbHVnaW4sby50YWcscywianNvbiIpOm51bGwpLHpuKG51bGwpKSx0aGlzLnJ1bnMkPUx0KFtlLnNlbGVjdChxSSksZS5zZWxlY3QoeGgsci5jYXJkSWQpXSkucGlwZShMKChbbyxzXSk9PnM/T2JqZWN0LmtleXMocykubWFwKGE9Pm8uZ2V0KGEpKS5maWx0ZXIoQm9vbGVhbik6W10pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSksTSgkdSksTShjdykpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImRhdGFfZG93bmxvYWRfZGlhbG9nIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJjYXJkTWV0YWRhdGEiLCJydW5zIiwic2VsZWN0ZWRSdW5JZCIsImRvd25sb2FkVXJsQ3N2IiwiZG93bmxvYWRVcmxKc29uIiwicnVuU2VsZWN0ZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudCIsMCksUCgicnVuU2VsZWN0ZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNlbGVjdGVkUnVuSWQkLm5leHQobyl9KSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLEIoMywiYXN5bmMiKSxCKDQsImFzeW5jIiksQig1LCJhc3luYyIpLHYoKSksMiZlJiZ5KCJjYXJkTWV0YWRhdGEiLFUoMSw1LGkuY2FyZE1ldGFkYXRhJCkpKCJydW5zIixVKDIsNyxpLnJ1bnMkKSkoInNlbGVjdGVkUnVuSWQiLFUoMyw5LGkuc2VsZWN0ZWRSdW5JZCQpKSgiZG93bmxvYWRVcmxDc3YiLFUoNCwxMSxpLmRvd25sb2FkVXJsQ3N2JCkpKCJkb3dubG9hZFVybEpzb24iLFUoNSwxMyxpLmRvd25sb2FkVXJsSnNvbiQpKX0sZGVwZW5kZW5jaWVzOltyc2UsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHVjKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIEJ3KG4pe3JldHVybiAxPT09bi5sZW5ndGgmJihuPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiB1YyhuKHQpLGUpfX0obikpLHtsZWZ0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk8MD9pPW8rMTpyPW99cmV0dXJuIGl9LHJpZ2h0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk+MD9yPW86aT1vKzF9cmV0dXJuIGl9fX12YXIgaXU9QncodWMpLnJpZ2h0O2Z1bmN0aW9uIHhSKG4sdCl7dmFyIHIsbyxzLGU9bi5sZW5ndGgsaT0tMTtpZihudWxsPT10KXtmb3IoOysraTxlOylpZihudWxsIT0ocj1uW2ldKSYmcj49cilmb3Iobz1zPXI7KytpPGU7KW51bGwhPShyPW5baV0pJiYobz5yJiYobz1yKSxzPHImJihzPXIpKX1lbHNlIGZvcig7KytpPGU7KWlmKG51bGwhPShyPXQobltpXSxpLG4pKSYmcj49cilmb3Iobz1zPXI7KytpPGU7KW51bGwhPShyPXQobltpXSxpLG4pKSYmKG8+ciYmKG89ciksczxyJiYocz1yKSk7cmV0dXJuW28sc119dmFyIGNzZT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gVncobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIHVzZShuKXtyZXR1cm4gbn1mdW5jdGlvbiBLaChuLHQsZSl7bj0rbix0PSt0LGU9KHI9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1uLG49MCwxKTpyPDM/MTorZTtmb3IodmFyIGk9LTEscj0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKCh0LW4pL2UpKSxvPW5ldyBBcnJheShyKTsrK2k8cjspb1tpXT1uK2kqZTtyZXR1cm4gb312YXIgUlU9TWF0aC5zcXJ0KDUwKSxPVT1NYXRoLnNxcnQoMTApLGtVPU1hdGguc3FydCgyKTtmdW5jdGlvbiBIdyhuLHQsZSl7dmFyIGksbyxzLGEscj0tMTtpZihlPStlLChuPStuKT09KHQ9K3QpJiZlPjApcmV0dXJuW25dO2lmKChpPXQ8bikmJihvPW4sbj10LHQ9byksMD09PShhPXB5KG4sdCxlKSl8fCFpc0Zpbml0ZShhKSlyZXR1cm5bXTtpZihhPjApZm9yKG49TWF0aC5jZWlsKG4vYSksdD1NYXRoLmZsb29yKHQvYSkscz1uZXcgQXJyYXkobz1NYXRoLmNlaWwodC1uKzEpKTsrK3I8bzspc1tyXT0obityKSphO2Vsc2UgZm9yKG49TWF0aC5mbG9vcihuKmEpLHQ9TWF0aC5jZWlsKHQqYSkscz1uZXcgQXJyYXkobz1NYXRoLmNlaWwobi10KzEpKTsrK3I8bzspc1tyXT0obi1yKS9hO3JldHVybiBpJiZzLnJldmVyc2UoKSxzfWZ1bmN0aW9uIHB5KG4sdCxlKXt2YXIgaT0odC1uKS9NYXRoLm1heCgwLGUpLHI9TWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApLG89aS9NYXRoLnBvdygxMCxyKTtyZXR1cm4gcj49MD8obz49UlU/MTA6bz49T1U/NTpvPj1rVT8yOjEpKk1hdGgucG93KDEwLHIpOi1NYXRoLnBvdygxMCwtcikvKG8+PVJVPzEwOm8+PU9VPzU6bz49a1U/MjoxKX1mdW5jdGlvbiB2ZChuLHQsZSl7dmFyIGk9TWF0aC5hYnModC1uKS9NYXRoLm1heCgwLGUpLHI9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApKSxvPWkvcjtyZXR1cm4gbz49UlU/cio9MTA6bz49T1U/cio9NTpvPj1rVSYmKHIqPTIpLHQ8bj8tcjpyfWZ1bmN0aW9uIENSKG4pe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2cobi5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIE1SKCl7dmFyIG49dXNlLHQ9eFIsZT1DUjtmdW5jdGlvbiBpKHIpe3ZhciBvLGEscz1yLmxlbmd0aCxsPW5ldyBBcnJheShzKTtmb3Iobz0wO288czsrK28pbFtvXT1uKHJbb10sbyxyKTt2YXIgYz10KGwpLHU9Y1swXSxkPWNbMV0scD1lKGwsdSxkKTtBcnJheS5pc0FycmF5KHApfHwocD12ZCh1LGQscCkscD1LaChNYXRoLmNlaWwodS9wKSpwLGQscCkpO2Zvcih2YXIgaD1wLmxlbmd0aDtwWzBdPD11OylwLnNoaWZ0KCksLS1oO2Zvcig7cFtoLTFdPmQ7KXAucG9wKCksLS1oO3ZhciBtLGY9bmV3IEFycmF5KGgrMSk7Zm9yKG89MDtvPD1oOysrbykobT1mW29dPVtdKS54MD1vPjA/cFtvLTFdOnUsbS54MT1vPGg/cFtvXTpkO2ZvcihvPTA7bzxzOysrbyl1PD0oYT1sW29dKSYmYTw9ZCYmZltpdShwLGEsMCxoKV0ucHVzaChyW29dKTtyZXR1cm4gZn1yZXR1cm4gaS52YWx1ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOlZ3KHIpLGkpOm59LGkuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiByP3I6VncoW3JbMF0sclsxXV0pLGkpOnR9LGkudGhyZXNob2xkcz1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOkFycmF5LmlzQXJyYXkocik/VncoY3NlLmNhbGwocikpOlZ3KHIpLGkpOmV9LGl9dmFyIHdSPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBkc2Uobil7cmV0dXJuIG59ZnVuY3Rpb24gRDRlKG4pe3JldHVybiJ0cmFuc2xhdGUoIisobisuNSkrIiwwKSJ9ZnVuY3Rpb24gQTRlKG4pe3JldHVybiJ0cmFuc2xhdGUoMCwiKyhuKy41KSsiKSJ9ZnVuY3Rpb24gSTRlKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4rbih0KX19ZnVuY3Rpb24gUDRlKG4pe3ZhciB0PU1hdGgubWF4KDAsbi5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiBuLnJvdW5kKCkmJih0PU1hdGgucm91bmQodCkpLGZ1bmN0aW9uKGUpe3JldHVybituKGUpK3R9fWZ1bmN0aW9uIFI0ZSgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBCVShuLHQpe3ZhciBlPVtdLGk9bnVsbCxyPW51bGwsbz02LHM9NixhPTMsbD0xPT09bnx8ND09PW4/LTE6MSxjPTQ9PT1ufHwyPT09bj8ieCI6InkiLHU9MT09PW58fDM9PT1uP0Q0ZTpBNGU7ZnVuY3Rpb24gZChwKXt2YXIgaD1pPz8odC50aWNrcz90LnRpY2tzLmFwcGx5KHQsZSk6dC5kb21haW4oKSksZj1yPz8odC50aWNrRm9ybWF0P3QudGlja0Zvcm1hdC5hcHBseSh0LGUpOmRzZSksbT1NYXRoLm1heChvLDApK2EseD10LnJhbmdlKCksZz0reFswXSsuNSxiPSt4W3gubGVuZ3RoLTFdKy41LEQ9KHQuYmFuZHdpZHRoP1A0ZTpJNGUpKHQuY29weSgpKSxUPXAuc2VsZWN0aW9uP3Auc2VsZWN0aW9uKCk6cCxrPVQuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLFo9VC5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShoLHQpLm9yZGVyKCksej1aLmV4aXQoKSxmZT1aLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksdWU9Wi5zZWxlY3QoImxpbmUiKSxoZT1aLnNlbGVjdCgidGV4dCIpO2s9ay5tZXJnZShrLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpKSxaPVoubWVyZ2UoZmUpLHVlPXVlLm1lcmdlKGZlLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIoYysiMiIsbCpvKSksaGU9aGUubWVyZ2UoZmUuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIoYyxsKm0pLmF0dHIoImR5IiwxPT09bj8iMGVtIjozPT09bj8iMC43MWVtIjoiMC4zMmVtIikpLHAhPT1UJiYoaz1rLnRyYW5zaXRpb24ocCksWj1aLnRyYW5zaXRpb24ocCksdWU9dWUudHJhbnNpdGlvbihwKSxoZT1oZS50cmFuc2l0aW9uKHApLHo9ei50cmFuc2l0aW9uKHApLmF0dHIoIm9wYWNpdHkiLDFlLTYpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odyl7cmV0dXJuIGlzRmluaXRlKHc9RCh3KSk/dSh3KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSxmZS5hdHRyKCJvcGFjaXR5IiwxZS02KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHcpe3ZhciBGPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHUoRiYmaXNGaW5pdGUoRj1GKHcpKT9GOkQodykpfSkpLHoucmVtb3ZlKCksay5hdHRyKCJkIiw0PT09bnx8Mj09bj9zPyJNIitsKnMrIiwiK2crIkgwLjVWIitiKyJIIitsKnM6Ik0wLjUsIitnKyJWIitiOnM/Ik0iK2crIiwiK2wqcysiVjAuNUgiK2IrIlYiK2wqczoiTSIrZysiLDAuNUgiK2IpLFouYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih3KXtyZXR1cm4gdShEKHcpKX0pLHVlLmF0dHIoYysiMiIsbCpvKSxoZS5hdHRyKGMsbCptKS50ZXh0KGYpLFQuZmlsdGVyKFI0ZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PW4/InN0YXJ0Ijo0PT09bj8iZW5kIjoibWlkZGxlIiksVC5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9RH0pfXJldHVybiBkLnNjYWxlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXAsZCk6dH0sZC50aWNrcz1mdW5jdGlvbigpe3JldHVybiBlPXdSLmNhbGwoYXJndW1lbnRzKSxkfSxkLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09cD9bXTp3Ui5jYWxsKHApLGQpOmUuc2xpY2UoKX0sZC50aWNrVmFsdWVzPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXA/bnVsbDp3Ui5jYWxsKHApLGQpOmkmJmkuc2xpY2UoKX0sZC50aWNrRm9ybWF0PWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXAsZCk6cn0sZC50aWNrU2l6ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPStwLGQpOm99LGQudGlja1NpemVJbm5lcj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rcCxkKTpvfSxkLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3AsZCk6c30sZC50aWNrUGFkZGluZz1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rcCxkKTphfSxkfWZ1bmN0aW9uIHp3KG4pe3JldHVybiBCVSgyLG4pfWZ1bmN0aW9uIGp3KG4pe3JldHVybiBCVSgzLG4pfXZhciBPNGU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gZnNlKCl7Zm9yKHZhciBpLG49MCx0PWFyZ3VtZW50cy5sZW5ndGgsZT17fTtuPHQ7KytuKXtpZighKGk9YXJndW1lbnRzW25dKyIiKXx8aSBpbiBlfHwvW1xzLl0vLnRlc3QoaSkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIraSk7ZVtpXT1bXX1yZXR1cm4gbmV3IEVSKGUpfWZ1bmN0aW9uIEVSKG4pe3RoaXMuXz1ufWZ1bmN0aW9uIGs0ZShuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfWZ1bmN0aW9uIEY0ZShuLHQpe2Zvcih2YXIgcixlPTAsaT1uLmxlbmd0aDtlPGk7KytlKWlmKChyPW5bZV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIGhzZShuLHQsZSl7Zm9yKHZhciBpPTAscj1uLmxlbmd0aDtpPHI7KytpKWlmKG5baV0ubmFtZT09PXQpe25baV09TzRlLG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1lJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn1FUi5wcm90b3R5cGU9ZnNlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RVIsb246ZnVuY3Rpb24obix0KXt2YXIgcixlPXRoaXMuXyxpPWs0ZShuKyIiLGUpLG89LTEscz1pLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxzOylpZihyPShuPWlbb10pLnR5cGUpZVtyXT1oc2UoZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZihudWxsPT10KWZvcihyIGluIGUpZVtyXT1oc2UoZVtyXSxuLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK288czspaWYoKHI9KG49aVtvXSkudHlwZSkmJihyPUY0ZShlW3JdLG4ubmFtZSkpKXJldHVybiByfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIG49e30sdD10aGlzLl87Zm9yKHZhciBlIGluIHQpbltlXT10W2VdLnNsaWNlKCk7cmV0dXJuIG5ldyBFUihuKX0sY2FsbDpmdW5jdGlvbihuLHQpe2lmKChyPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHIsbyxlPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSllW2ldPWFyZ3VtZW50c1tpKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKGk9MCxyPShvPXRoaXMuX1tuXSkubGVuZ3RoO2k8cjsrK2kpb1tpXS52YWx1ZS5hcHBseSh0LGUpfSxhcHBseTpmdW5jdGlvbihuLHQsZSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShuKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIituKTtmb3IodmFyIGk9dGhpcy5fW25dLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseSh0LGUpfX07dmFyIEd3PWZzZSxUUj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsSFU9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOlRSLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gZHAobil7dmFyIHQ9bis9IiIsZT10LmluZGV4T2YoIjoiKTtyZXR1cm4gZT49MCYmInhtbG5zIiE9PSh0PW4uc2xpY2UoMCxlKSkmJihuPW4uc2xpY2UoZSsxKSksSFUuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkhVW3RdLGxvY2FsOm59Om59ZnVuY3Rpb24gTjRlKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09VFImJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVRSP3QuY3JlYXRlRWxlbWVudChuKTp0LmNyZWF0ZUVsZW1lbnROUyhlLG4pfX1mdW5jdGlvbiBMNGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gRFIobil7dmFyIHQ9ZHAobik7cmV0dXJuKHQubG9jYWw/TDRlOk40ZSkodCl9ZnVuY3Rpb24gQjRlKCl7fWZ1bmN0aW9uIGdnKG4pe3JldHVybiBudWxsPT1uP0I0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Iobil9fWZ1bmN0aW9uIFY0ZSgpe3JldHVybltdfWZ1bmN0aW9uIFd3KG4pe3JldHVybiBudWxsPT1uP1Y0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwobil9fWZ1bmN0aW9uIHF3KG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIEFSKG4pe3JldHVybiBuZXcgQXJyYXkobi5sZW5ndGgpfWZ1bmN0aW9uIFl3KG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fWZ1bmN0aW9uIEg0ZShuLHQsZSxpLHIsbyl7Zm9yKHZhciBhLHM9MCxsPXQubGVuZ3RoLGM9by5sZW5ndGg7czxjOysrcykoYT10W3NdKT8oYS5fX2RhdGFfXz1vW3NdLGlbc109YSk6ZVtzXT1uZXcgWXcobixvW3NdKTtmb3IoO3M8bDsrK3MpKGE9dFtzXSkmJihyW3NdPWEpfWZ1bmN0aW9uIFU0ZShuLHQsZSxpLHIsbyxzKXt2YXIgYSxsLGgsYz17fSx1PXQubGVuZ3RoLGQ9by5sZW5ndGgscD1uZXcgQXJyYXkodSk7Zm9yKGE9MDthPHU7KythKShsPXRbYV0pJiYocFthXT1oPSIkIitzLmNhbGwobCxsLl9fZGF0YV9fLGEsdCksaCBpbiBjP3JbYV09bDpjW2hdPWwpO2ZvcihhPTA7YTxkOysrYSkobD1jW2g9IiQiK3MuY2FsbChuLG9bYV0sYSxvKV0pPyhpW2FdPWwsbC5fX2RhdGFfXz1vW2FdLGNbaF09bnVsbCk6ZVthXT1uZXcgWXcobixvW2FdKTtmb3IoYT0wO2E8dTsrK2EpKGw9dFthXSkmJmNbcFthXV09PT1sJiYoclthXT1sKX1mdW5jdGlvbiB6NGUobix0KXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59ZnVuY3Rpb24gajRlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfX1mdW5jdGlvbiBHNGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpfX1mdW5jdGlvbiBXNGUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiBxNGUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCx0KX19ZnVuY3Rpb24gWTRlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZShuKTp0aGlzLnNldEF0dHJpYnV0ZShuLGUpfX1mdW5jdGlvbiBYNGUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gSVIobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudCYmbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxuLmRvY3VtZW50JiZufHxuLmRlZmF1bHRWaWV3fWZ1bmN0aW9uIFE0ZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfX1mdW5jdGlvbiBLNGUobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBaNGUobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4saSxlKX19ZnVuY3Rpb24gWmgobix0KXtyZXR1cm4gbi5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxJUihuKS5nZXRDb21wdXRlZFN0eWxlKG4sbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBKNGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbbl19fWZ1bmN0aW9uICQ0ZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24gZUhlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT9kZWxldGUgdGhpc1tuXTp0aGlzW25dPWV9fWZ1bmN0aW9uIE5zZShuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gVVUobil7cmV0dXJuIG4uY2xhc3NMaXN0fHxuZXcgTHNlKG4pfWZ1bmN0aW9uIExzZShuKXt0aGlzLl9ub2RlPW4sdGhpcy5fbmFtZXM9TnNlKG4uZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gQnNlKG4sdCl7Zm9yKHZhciBlPVVVKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5hZGQodFtpXSl9ZnVuY3Rpb24gVnNlKG4sdCl7Zm9yKHZhciBlPVVVKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gdEhlKG4pe3JldHVybiBmdW5jdGlvbigpe0JzZSh0aGlzLG4pfX1mdW5jdGlvbiBuSGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7VnNlKHRoaXMsbil9fWZ1bmN0aW9uIGlIZShuLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9Cc2U6VnNlKSh0aGlzLG4pfX1mdW5jdGlvbiBySGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIG9IZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIHNIZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ/PyIifX1mdW5jdGlvbiBhSGUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBsSGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gY0hlKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ/PyIifX1mdW5jdGlvbiB1SGUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gZEhlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gcEhlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gaEhlKCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO24mJm4ucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gZkhlKCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBtSGUoKXt2YXIgbj10aGlzLmNsb25lTm9kZSghMCksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUobix0aGlzLm5leHRTaWJsaW5nKTpufVl3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6WXcsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX0sTHNlLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3RoaXMuX25hbWVzLmluZGV4T2Yobik8MCYmKHRoaXMuX25hbWVzLnB1c2gobiksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG4pPj0wfX07dmFyIFpzZT17fSxzaT1udWxsO2Z1bmN0aW9uIGdIZShuLHQsZSl7cmV0dXJuIG49SnNlKG4sdCxlKSxmdW5jdGlvbihpKXt2YXIgcj1pLnJlbGF0ZWRUYXJnZXQ7KCFyfHxyIT09dGhpcyYmISg4JnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpKSYmbi5jYWxsKHRoaXMsaSl9fWZ1bmN0aW9uIEpzZShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPXNpO3NpPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e3NpPXJ9fX1mdW5jdGlvbiBfSGUobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixpPXQuaW5kZXhPZigiLiIpO3JldHVybiBpPj0wJiYoZT10LnNsaWNlKGkrMSksdD10LnNsaWNlKDAsaSkpLHt0eXBlOnQsbmFtZTplfX0pfWZ1bmN0aW9uIHZIZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYodCl7Zm9yKHZhciBvLGU9MCxpPS0xLHI9dC5sZW5ndGg7ZTxyOysrZSlvPXRbZV0sbi50eXBlJiZvLnR5cGUhPT1uLnR5cGV8fG8ubmFtZSE9PW4ubmFtZT90WysraV09bzp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24geUhlKG4sdCxlKXt2YXIgaT1ac2UuaGFzT3duUHJvcGVydHkobi50eXBlKT9nSGU6SnNlO3JldHVybiBmdW5jdGlvbihyLG8scyl7dmFyIGwsYT10aGlzLl9fb24sYz1pKHQsbyxzKTtpZihhKWZvcih2YXIgdT0wLGQ9YS5sZW5ndGg7dTxkOysrdSlpZigobD1hW3VdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSx2b2lkKGwudmFsdWU9dCk7dGhpcy5hZGRFdmVudExpc3RlbmVyKG4udHlwZSxjLGUpLGw9e3R5cGU6bi50eXBlLG5hbWU6bi5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOmV9LGE/YS5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIGVhZShuLHQsZSl7dmFyIGk9SVIobikscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gYkhlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGVhZSh0aGlzLG4sdCl9fWZ1bmN0aW9uIHhIZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlYWUodGhpcyxuLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dHlwZW9mIGRvY3VtZW50PCJ1IiYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoWnNlPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTt2YXIgalU9W251bGxdO2Z1bmN0aW9uIGFvKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIG5hZSgpe3JldHVybiBuZXcgYW8oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxqVSl9YW8ucHJvdG90eXBlPW5hZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmFvLHNlbGVjdDpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49Z2cobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIGwsYyxvPXRbcl0scz1vLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KHMpLHU9MDt1PHM7Kyt1KShsPW9bdV0pJiYoYz1uLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLGFbdV09Yyk7cmV0dXJuIG5ldyBhbyhpLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVd3KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLG89MDtvPGU7KytvKWZvcih2YXIgbCxzPXRbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYykobD1zW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMscykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBhbyhpLHIpfSxmaWx0ZXI6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPXF3KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBsLG89dFtyXSxzPW8ubGVuZ3RoLGE9aVtyXT1bXSxjPTA7YzxzOysrYykobD1vW2NdKSYmbi5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZhLnB1c2gobCk7cmV0dXJuIG5ldyBhbyhpLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKG4sdCl7aWYoIW4pcmV0dXJuIGg9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihaKXtoWysrY109Wn0pLGg7dmFyIGU9dD9VNGU6SDRlLGk9dGhpcy5fcGFyZW50cyxyPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fShuKSk7Zm9yKHZhciBvPXIubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGE9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1pW2NdLGQ9cltjXSxwPWQubGVuZ3RoLGg9bi5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLGkpLGY9aC5sZW5ndGgsbT1hW2NdPW5ldyBBcnJheShmKSx4PXNbY109bmV3IEFycmF5KGYpO2UodSxkLG0seCxsW2NdPW5ldyBBcnJheShwKSxoLHQpO2Zvcih2YXIgVCxrLGI9MCxEPTA7YjxmOysrYilpZihUPW1bYl0pe2ZvcihiPj1EJiYoRD1iKzEpOyEoaz14W0RdKSYmKytEPGY7KTtULl9uZXh0PWt8fG51bGx9fXJldHVybihzPW5ldyBhbyhzLGkpKS5fZW50ZXI9YSxzLl9leGl0PWwsc30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGFvKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKEFSKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgYW8odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChBUiksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24obix0LGUpe3ZhciBpPXRoaXMuZW50ZXIoKSxyPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uKGkpOmkuYXBwZW5kKG4rIiIpLG51bGwhPXQmJihyPXQocikpLG51bGw9PWU/by5yZW1vdmUoKTplKG8pLGkmJnI/aS5tZXJnZShyKS5vcmRlcigpOnJ9LG1lcmdlOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT1uLl9ncm91cHMsaT10Lmxlbmd0aCxvPU1hdGgubWluKGksZS5sZW5ndGgpLHM9bmV3IEFycmF5KGkpLGE9MDthPG87KythKWZvcih2YXIgcCxsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsZD1zW2FdPW5ldyBBcnJheSh1KSxoPTA7aDx1OysraCkocD1sW2hdfHxjW2hdKSYmKGRbaF09cCk7Zm9yKDthPGk7KythKXNbYV09dFthXTtyZXR1cm4gbmV3IGFvKHMsdGhpcy5fcGFyZW50cyl9LG9yZGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuPXRoaXMuX2dyb3Vwcyx0PS0xLGU9bi5sZW5ndGg7Kyt0PGU7KWZvcih2YXIgcyxpPW5bdF0scj1pLmxlbmd0aC0xLG89aVtyXTstLXI+PTA7KShzPWlbcl0pJiYobyYmNF5zLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pJiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHMsbyksbz1zKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbihuKXtmdW5jdGlvbiB0KGQscCl7cmV0dXJuIGQmJnA/bihkLl9fZGF0YV9fLHAuX19kYXRhX18pOiFkLSFwfW58fChuPXo0ZSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxpPWUubGVuZ3RoLHI9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKXtmb3IodmFyIGMscz1lW29dLGE9cy5sZW5ndGgsbD1yW29dPW5ldyBBcnJheShhKSx1PTA7dTxhOysrdSkoYz1zW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgYW8ocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxuLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3ZhciBuPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7blsrK3RdPXRoaXN9KSxufSxub2RlOmZ1bmN0aW9uKCl7Zm9yKHZhciBuPXRoaXMuX2dyb3Vwcyx0PTAsZT1uLmxlbmd0aDt0PGU7Kyt0KWZvcih2YXIgaT1uW3RdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3Ipe3ZhciBzPWlbcl07aWYocylyZXR1cm4gc31yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbigpe3ZhciBuPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrbn0pLG59LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLGk9dC5sZW5ndGg7ZTxpOysrZSlmb3IodmFyIGEscj10W2VdLG89MCxzPXIubGVuZ3RoO288czsrK28pKGE9cltvXSkmJm4uY2FsbChhLGEuX19kYXRhX18sbyxyKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbihuLHQpe3ZhciBlPWRwKG4pO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIGUubG9jYWw/aS5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOmkuZ2V0QXR0cmlidXRlKGUpfXJldHVybiB0aGlzLmVhY2goKG51bGw9PXQ/ZS5sb2NhbD9HNGU6ajRlOiJmdW5jdGlvbiI9PXR5cGVvZiB0P2UubG9jYWw/WDRlOlk0ZTplLmxvY2FsP3E0ZTpXNGUpKGUsdCkpfSxzdHlsZTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PXQ/UTRlOiJmdW5jdGlvbiI9PXR5cGVvZiB0P1o0ZTpLNGUpKG4sdCxlPz8iIikpOlpoKHRoaXMubm9kZSgpLG4pfSxwcm9wZXJ0eTpmdW5jdGlvbihuLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT10P0o0ZToiZnVuY3Rpb24iPT10eXBlb2YgdD9lSGU6JDRlKShuLHQpKTp0aGlzLm5vZGUoKVtuXX0sY2xhc3NlZDpmdW5jdGlvbihuLHQpe3ZhciBlPU5zZShuKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT1VVSh0aGlzLm5vZGUoKSkscj0tMSxvPWUubGVuZ3RoOysrcjxvOylpZighaS5jb250YWlucyhlW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9pSGU6dD90SGU6bkhlKShlLHQpKX0sdGV4dDpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09bj9ySGU6KCJmdW5jdGlvbiI9PXR5cGVvZiBuP3NIZTpvSGUpKG4pKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09bj9hSGU6KCJmdW5jdGlvbiI9PXR5cGVvZiBuP2NIZTpsSGUpKG4pKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCh1SGUpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZEhlKX0sYXBwZW5kOmZ1bmN0aW9uKG4pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246RFIobik7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246RFIobiksaT1udWxsPT10P3BIZToiZnVuY3Rpb24iPT10eXBlb2YgdD90OmdnKHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChoSGUpfSxjbG9uZTpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5zZWxlY3Qobj9tSGU6ZkhlKX0sZGF0dW06ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLG4pOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbihuLHQsZSl7dmFyIHIscyxpPV9IZShuKyIiKSxvPWkubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKGE9dD95SGU6dkhlLG51bGw9PWUmJihlPSExKSxyPTA7cjxvOysrcil0aGlzLmVhY2goYShpW3JdLHQsZSkpO3JldHVybiB0aGlzfXZhciBhPXRoaXMubm9kZSgpLl9fb247aWYoYSlmb3IodmFyIHUsbD0wLGM9YS5sZW5ndGg7bDxjOysrbClmb3Iocj0wLHU9YVtsXTtyPG87KytyKWlmKChzPWlbcl0pLnR5cGU9PT11LnR5cGUmJnMubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD94SGU6YkhlKShuLHQpKX19O3ZhciBwcD1uYWU7ZnVuY3Rpb24gYm8obil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP25ldyBhbyhbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobildXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGFvKFtbbl1dLGpVKX1mdW5jdGlvbiBQUigpe2Zvcih2YXIgdCxuPXNpO3Q9bi5zb3VyY2VFdmVudDspbj10O3JldHVybiBufWZ1bmN0aW9uIFJSKG4sdCl7dmFyIGU9bi5vd25lclNWR0VsZW1lbnR8fG47aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIGk9ZS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBpLng9dC5jbGllbnRYLGkueT10LmNsaWVudFksWyhpPWkubWF0cml4VHJhbnNmb3JtKG4uZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciByPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1yLmxlZnQtbi5jbGllbnRMZWZ0LHQuY2xpZW50WS1yLnRvcC1uLmNsaWVudFRvcF19ZnVuY3Rpb24gR1Uobil7dmFyIHQ9UFIoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksUlIobix0KX1mdW5jdGlvbiBPUigpe3NpLnByZXZlbnREZWZhdWx0KCksc2kuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gcVUobil7dmFyIHQ9bi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT1ibyhuKS5vbigiZHJhZ3N0YXJ0LmRyYWciLE9SLCEwKTsib25zZWxlY3RzdGFydCJpbiB0P2Uub24oInNlbGVjdHN0YXJ0LmRyYWciLE9SLCEwKToodC5fX25vc2VsZWN0PXQuc3R5bGUuTW96VXNlclNlbGVjdCx0LnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBZVShuLHQpe3ZhciBlPW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGk9Ym8obikub24oImRyYWdzdGFydC5kcmFnIixudWxsKTt0JiYoaS5vbigiY2xpY2suZHJhZyIsT1IsITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIGU/aS5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KGUuc3R5bGUuTW96VXNlclNlbGVjdD1lLl9fbm9zZWxlY3QsZGVsZXRlIGUuX19ub3NlbGVjdCl9ZnVuY3Rpb24gX2cobix0LGUpe24ucHJvdG90eXBlPXQucHJvdG90eXBlPWUsZS5jb25zdHJ1Y3Rvcj1ufWZ1bmN0aW9uIGh5KG4sdCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBpIGluIHQpZVtpXT10W2ldO3JldHVybiBlfWZ1bmN0aW9uIEpoKCl7fXZhciBGUj0xLy43LGZ5PSJcXHMqKFsrLV0/XFxkKylcXHMqIixRdz0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixiZD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsQ0hlPS9eIyhbMC05YS1mXXszLDh9KSQvLE1IZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbZnksZnksZnldKyJcXCkkIiksd0hlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tiZCxiZCxiZF0rIlxcKSQiKSxTSGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tmeSxmeSxmeSxRd10rIlxcKSQiKSxFSGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tiZCxiZCxiZCxRd10rIlxcKSQiKSxUSGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW1F3LGJkLGJkXSsiXFwpJCIpLERIZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW1F3LGJkLGJkLFF3XSsiXFwpJCIpLGlhZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiByYWUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBvYWUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBydShuKXt2YXIgdCxlO3JldHVybiBuPShuKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1DSGUuZXhlYyhuKSk/KGU9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSw2PT09ZT9zYWUodCk6Mz09PWU/bmV3IEhzKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXwyNDAmdCwoMTUmdCk8PDR8MTUmdCwxKTo4PT09ZT9rUih0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCgyNTUmdCkvMjU1KTo0PT09ZT9rUih0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8MjQwJnQsKCgxNSZ0KTw8NHwxNSZ0KS8yNTUpOm51bGwpOih0PU1IZS5leGVjKG4pKT9uZXcgSHModFsxXSx0WzJdLHRbM10sMSk6KHQ9d0hlLmV4ZWMobikpP25ldyBIcygyNTUqdFsxXS8xMDAsMjU1KnRbMl0vMTAwLDI1NSp0WzNdLzEwMCwxKToodD1TSGUuZXhlYyhuKSk/a1IodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9RUhlLmV4ZWMobikpP2tSKDI1NSp0WzFdLzEwMCwyNTUqdFsyXS8xMDAsMjU1KnRbM10vMTAwLHRbNF0pOih0PVRIZS5leGVjKG4pKT9jYWUodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1ESGUuZXhlYyhuKSk/Y2FlKHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6aWFlLmhhc093blByb3BlcnR5KG4pP3NhZShpYWVbbl0pOiJ0cmFuc3BhcmVudCI9PT1uP25ldyBIcyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIHNhZShuKXtyZXR1cm4gbmV3IEhzKG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbiwxKX1mdW5jdGlvbiBrUihuLHQsZSxpKXtyZXR1cm4gaTw9MCYmKG49dD1lPU5hTiksbmV3IEhzKG4sdCxlLGkpfWZ1bmN0aW9uIEtVKG4pe3JldHVybiBuIGluc3RhbmNlb2YgSmh8fChuPXJ1KG4pKSxuP25ldyBIcygobj1uLnJnYigpKS5yLG4uZyxuLmIsbi5vcGFjaXR5KTpuZXcgSHN9ZnVuY3Rpb24gbXkobix0LGUsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0tVKG4pOm5ldyBIcyhuLHQsZSxpPz8xKX1mdW5jdGlvbiBIcyhuLHQsZSxpKXt0aGlzLnI9K24sdGhpcy5nPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gYWFlKCl7cmV0dXJuIiMiK1hVKHRoaXMucikrWFUodGhpcy5nKStYVSh0aGlzLmIpfWZ1bmN0aW9uIGxhZSgpe3ZhciBuPXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PShuPWlzTmFOKG4pPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PW4/IikiOiIsICIrbisiKSIpfWZ1bmN0aW9uIFhVKG4pe3JldHVybigobj1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKG4pfHwwKSkpPDE2PyIwIjoiIikrbi50b1N0cmluZygxNil9ZnVuY3Rpb24gY2FlKG4sdCxlLGkpe3JldHVybiBpPD0wP249dD1lPU5hTjplPD0wfHxlPj0xP249dD1OYU46dDw9MCYmKG49TmFOKSxuZXcgeWQobix0LGUsaSl9ZnVuY3Rpb24gdWFlKG4pe2lmKG4gaW5zdGFuY2VvZiB5ZClyZXR1cm4gbmV3IHlkKG4uaCxuLnMsbi5sLG4ub3BhY2l0eSk7aWYobiBpbnN0YW5jZW9mIEpofHwobj1ydShuKSksIW4pcmV0dXJuIG5ldyB5ZDtpZihuIGluc3RhbmNlb2YgeWQpcmV0dXJuIG47dmFyIHQ9KG49bi5yZ2IoKSkuci8yNTUsZT1uLmcvMjU1LGk9bi5iLzI1NSxyPU1hdGgubWluKHQsZSxpKSxvPU1hdGgubWF4KHQsZSxpKSxzPU5hTixhPW8tcixsPShvK3IpLzI7cmV0dXJuIGE/KHM9dD09PW8/KGUtaSkvYSs2KihlPGkpOmU9PT1vPyhpLXQpL2ErMjoodC1lKS9hKzQsYS89bDwuNT9vK3I6Mi1vLXIscyo9NjApOmE9bD4wJiZsPDE/MDpzLG5ldyB5ZChzLGEsbCxuLm9wYWNpdHkpfWZ1bmN0aW9uIHZnKG4sdCxlLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD91YWUobik6bmV3IHlkKG4sdCxlLGk/PzEpfWZ1bmN0aW9uIHlkKG4sdCxlLGkpe3RoaXMuaD0rbix0aGlzLnM9K3QsdGhpcy5sPStlLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBRVShuLHQsZSl7cmV0dXJuIDI1NSoobjw2MD90KyhlLXQpKm4vNjA6bjwxODA/ZTpuPDI0MD90KyhlLXQpKigyNDAtbikvNjA6dCl9X2coSmgscnUse2NvcHk6ZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxuKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6cmFlLGZvcm1hdEhleDpyYWUsZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIHVhZSh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOm9hZSx0b1N0cmluZzpvYWV9KSxfZyhIcyxteSxoeShKaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG49bnVsbD09bj9GUjpNYXRoLnBvdyhGUixuKSxuZXcgSHModGhpcy5yKm4sdGhpcy5nKm4sdGhpcy5iKm4sdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/Ljc6TWF0aC5wb3coLjcsbiksbmV3IEhzKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6YWFlLGZvcm1hdEhleDphYWUsZm9ybWF0UmdiOmxhZSx0b1N0cmluZzpsYWV9KSksX2coeWQsdmcsaHkoSmgse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/RlI6TWF0aC5wb3coRlIsbiksbmV3IHlkKHRoaXMuaCx0aGlzLnMsdGhpcy5sKm4sdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/Ljc6TWF0aC5wb3coLjcsbiksbmV3IHlkKHRoaXMuaCx0aGlzLnMsdGhpcy5sKm4sdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSx0PWlzTmFOKG4pfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGU9dGhpcy5sLGk9ZSsoZTwuNT9lOjEtZSkqdCxyPTIqZS1pO3JldHVybiBuZXcgSHMoUVUobj49MjQwP24tMjQwOm4rMTIwLHIsaSksUVUobixyLGkpLFFVKG48MTIwP24rMjQwOm4tMTIwLHIsaSksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBuPXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PShuPWlzTmFOKG4pPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT1uPyIpIjoiLCAiK24rIikiKX19KSk7dmFyIGRhZT1NYXRoLlBJLzE4MCxwYWU9MTgwL01hdGguUEksZ2FlPTQvMjksZ3k9Ni8yOSxfYWU9MypneSpneTtmdW5jdGlvbiB2YWUobil7aWYobiBpbnN0YW5jZW9mIHhkKXJldHVybiBuZXcgeGQobi5sLG4uYSxuLmIsbi5vcGFjaXR5KTtpZihuIGluc3RhbmNlb2YgaHApcmV0dXJuIHlhZShuKTtuIGluc3RhbmNlb2YgSHN8fChuPUtVKG4pKTt2YXIgbyxzLHQ9ZXoobi5yKSxlPWV6KG4uZyksaT1leihuLmIpLHI9WlUoKC4yMjI1MDQ1KnQrLjcxNjg3ODYqZSsuMDYwNjE2OSppKS8xKTtyZXR1cm4gdD09PWUmJmU9PT1pP289cz1yOihvPVpVKCguNDM2MDc0Nyp0Ky4zODUwNjQ5KmUrLjE0MzA4MDQqaSkvLjk2NDIyKSxzPVpVKCguMDEzOTMyMip0Ky4wOTcxMDQ1KmUrLjcxNDE3MzMqaSkvLjgyNTIxKSksbmV3IHhkKDExNipyLTE2LDUwMCooby1yKSwyMDAqKHItcyksbi5vcGFjaXR5KX1mdW5jdGlvbiB4ZChuLHQsZSxpKXt0aGlzLmw9K24sdGhpcy5hPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gWlUobil7cmV0dXJuIG4+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyhuLDEvMyk6bi9fYWUrZ2FlfWZ1bmN0aW9uIEpVKG4pe3JldHVybiBuPmd5P24qbipuOl9hZSoobi1nYWUpfWZ1bmN0aW9uICRVKG4pe3JldHVybiAyNTUqKG48PS4wMDMxMzA4PzEyLjkyKm46MS4wNTUqTWF0aC5wb3cobiwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gZXoobil7cmV0dXJuKG4vPTI1NSk8PS4wNDA0NT9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gUEhlKG4pe2lmKG4gaW5zdGFuY2VvZiBocClyZXR1cm4gbmV3IGhwKG4uaCxuLmMsbi5sLG4ub3BhY2l0eSk7aWYobiBpbnN0YW5jZW9mIHhkfHwobj12YWUobikpLDA9PT1uLmEmJjA9PT1uLmIpcmV0dXJuIG5ldyBocChOYU4sMDxuLmwmJm4ubDwxMDA/MDpOYU4sbi5sLG4ub3BhY2l0eSk7dmFyIHQ9TWF0aC5hdGFuMihuLmIsbi5hKSpwYWU7cmV0dXJuIG5ldyBocCh0PDA/dCszNjA6dCxNYXRoLnNxcnQobi5hKm4uYStuLmIqbi5iKSxuLmwsbi5vcGFjaXR5KX1mdW5jdGlvbiB5ZyhuLHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/UEhlKG4pOm5ldyBocChuLHQsZSxpPz8xKX1mdW5jdGlvbiBocChuLHQsZSxpKXt0aGlzLmg9K24sdGhpcy5jPSt0LHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24geWFlKG4pe2lmKGlzTmFOKG4uaCkpcmV0dXJuIG5ldyB4ZChuLmwsMCwwLG4ub3BhY2l0eSk7dmFyIHQ9bi5oKmRhZTtyZXR1cm4gbmV3IHhkKG4ubCxNYXRoLmNvcyh0KSpuLmMsTWF0aC5zaW4odCkqbi5jLG4ub3BhY2l0eSl9ZnVuY3Rpb24gbnoobix0LGUsaSxyKXt2YXIgbz1uKm4scz1vKm47cmV0dXJuKCgxLTMqbiszKm8tcykqdCsoNC02Km8rMypzKSplKygxKzMqbiszKm8tMypzKSppK3MqcikvNn1mdW5jdGlvbiBfeShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gQ2FlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuK2UqdH19ZnVuY3Rpb24gTFIobix0KXt2YXIgZT10LW47cmV0dXJuIGU/Q2FlKG4sZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTpfeShpc05hTihuKT90Om4pfWZ1bmN0aW9uIHphKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP0NhZShuLGUpOl95KGlzTmFOKG4pP3Q6bil9X2coeGQsZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3ZhZShuKTpuZXcgeGQobix0LGUsaT8/MSl9LGh5KEpoLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IHhkKHRoaXMubCsxOCoobj8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyB4ZCh0aGlzLmwtMTgqKG4/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIG49KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9uOm4rdGhpcy5hLzUwMCxlPWlzTmFOKHRoaXMuYik/bjpuLXRoaXMuYi8yMDA7cmV0dXJuIG5ldyBIcygkVSgzLjEzMzg1NjEqKHQ9Ljk2NDIyKkpVKHQpKS0xLjYxNjg2NjcqKG49MSpKVShuKSktLjQ5MDYxNDYqKGU9LjgyNTIxKkpVKGUpKSksJFUoLS45Nzg3Njg0KnQrMS45MTYxNDE1Km4rLjAzMzQ1NCplKSwkVSguMDcxOTQ1Myp0LS4yMjg5OTE0Km4rMS40MDUyNDI3KmUpLHRoaXMub3BhY2l0eSl9fSkpLF9nKGhwLHlnLGh5KEpoLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGhwKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihuPz8xKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBocCh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobj8/MSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHlhZSh0aGlzKS5yZ2IoKX19KSk7dmFyIGJnPWZ1bmN0aW9uIG4odCl7dmFyIGU9ZnVuY3Rpb24obil7cmV0dXJuIDE9PShuPStuKT96YTpmdW5jdGlvbih0LGUpe3JldHVybiBlLXQ/ZnVuY3Rpb24obix0LGUpe3JldHVybiBuPU1hdGgucG93KG4sZSksdD1NYXRoLnBvdyh0LGUpLW4sZT0xL2UsZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGgucG93KG4raSp0LGUpfX0odCxlLG4pOl95KGlzTmFOKHQpP2U6dCl9fSh0KTtmdW5jdGlvbiBpKHIsbyl7dmFyIHM9ZSgocj1teShyKSkuciwobz1teShvKSkuciksYT1lKHIuZyxvLmcpLGw9ZShyLmIsby5iKSxjPXphKHIub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gci5yPXModSksci5nPWEodSksci5iPWwodSksci5vcGFjaXR5PWModSkscisiIn19cmV0dXJuIGkuZ2FtbWE9bixpfSgxKTtmdW5jdGlvbiB3YWUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBzLGEsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShlKTtmb3Iocz0wO3M8ZTsrK3MpYT1teSh0W3NdKSxpW3NdPWEucnx8MCxyW3NdPWEuZ3x8MCxvW3NdPWEuYnx8MDtyZXR1cm4gaT1uKGkpLHI9bihyKSxvPW4obyksYS5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIGEucj1pKGwpLGEuZz1yKGwpLGEuYj1vKGwpLGErIiJ9fX12YXIgaXo9d2FlKGZ1bmN0aW9uKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0sbz1uW2krMV07cmV0dXJuIG56KChlLWkvdCkqdCxpPjA/bltpLTFdOjIqci1vLHIsbyxpPHQtMT9uW2krMl06MipvLXIpfX0pO2Z1bmN0aW9uIFNhZShuLHQpe3R8fCh0PVtdKTt2YXIgcixlPW4/TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpOjAsaT10LnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihyPTA7cjxlOysrcilpW3JdPW5bcl0qKDEtbykrdFtyXSpvO3JldHVybiBpfX1mdW5jdGlvbiBUYWUobix0KXt2YXIgcyxlPXQ/dC5sZW5ndGg6MCxpPW4/TWF0aC5taW4oZSxuLmxlbmd0aCk6MCxyPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheShlKTtmb3Iocz0wO3M8aTsrK3MpcltzXT1mcChuW3NdLHRbc10pO2Zvcig7czxlOysrcylvW3NdPXRbc107cmV0dXJuIGZ1bmN0aW9uKGEpe2ZvcihzPTA7czxpOysrcylvW3NdPXJbc10oYSk7cmV0dXJuIG99fWZ1bmN0aW9uIERhZShuLHQpe3ZhciBlPW5ldyBEYXRlO3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oaSl7cmV0dXJuIGUuc2V0VGltZShuKigxLWkpK3QqaSksZX19ZnVuY3Rpb24gQ3Mobix0KXtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGUpe3JldHVybiBuKigxLWUpK3QqZX19ZnVuY3Rpb24gQWFlKG4sdCl7dmFyIHIsZT17fSxpPXt9O2ZvcihyIGluKG51bGw9PT1ufHwib2JqZWN0IiE9dHlwZW9mIG4pJiYobj17fSksKG51bGw9PT10fHwib2JqZWN0IiE9dHlwZW9mIHQpJiYodD17fSksdClyIGluIG4/ZVtyXT1mcChuW3JdLHRbcl0pOmlbcl09dFtyXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKHIgaW4gZSlpW3JdPWVbcl0obyk7cmV0dXJuIGl9fXdhZShmdW5jdGlvbihuKXt2YXIgdD1uLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9TWF0aC5mbG9vcigoKGUlPTEpPDA/KytlOmUpKnQpO3JldHVybiBueigoZS1pL3QpKnQsblsoaSt0LTEpJXRdLG5baSV0XSxuWyhpKzEpJXRdLG5bKGkrMikldF0pfX0pO3ZhciBvej0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2cscno9bmV3IFJlZ0V4cChvei5zb3VyY2UsImciKTtmdW5jdGlvbiBLdyhuLHQpe3ZhciBpLHIsbyxlPW96Lmxhc3RJbmRleD1yei5sYXN0SW5kZXg9MCxzPS0xLGE9W10sbD1bXTtmb3Iobis9IiIsdCs9IiI7KGk9b3ouZXhlYyhuKSkmJihyPXJ6LmV4ZWModCkpOykobz1yLmluZGV4KT5lJiYobz10LnNsaWNlKGUsbyksYVtzXT9hW3NdKz1vOmFbKytzXT1vKSwoaT1pWzBdKT09PShyPXJbMF0pP2Fbc10/YVtzXSs9cjphWysrc109cjooYVsrK3NdPW51bGwsbC5wdXNoKHtpOnMseDpDcyhpLHIpfSkpLGU9cnoubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYobz10LnNsaWNlKGUpLGFbc10/YVtzXSs9bzphWysrc109byksYS5sZW5ndGg8Mj9sWzBdP2Z1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19KGxbMF0ueCk6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIGQsdT0wO3U8dDsrK3UpYVsoZD1sW3VdKS5pXT1kLngoYyk7cmV0dXJuIGEuam9pbigiIil9KX1mdW5jdGlvbiBmcChuLHQpe3ZhciBpLGU9dHlwZW9mIHQ7cmV0dXJuIG51bGw9PXR8fCJib29sZWFuIj09PWU/X3kodCk6KCJudW1iZXIiPT09ZT9Dczoic3RyaW5nIj09PWU/KGk9cnUodCkpPyh0PWksYmcpOkt3OnQgaW5zdGFuY2VvZiBydT9iZzp0IGluc3RhbmNlb2YgRGF0ZT9EYWU6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSh0KT9TYWU6QXJyYXkuaXNBcnJheSh0KT9UYWU6ImZ1bmN0aW9uIiE9dHlwZW9mIHQudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIHQudG9TdHJpbmd8fGlzTmFOKHQpP0FhZTpDcykobix0KX1mdW5jdGlvbiBzeihuLHQpe3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQobiooMS1lKSt0KmUpfX12YXIgWncsbHosUGFlLFZSLElhZT0xODAvTWF0aC5QSSxCUj17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBheihuLHQsZSxpLHIsbyl7dmFyIHMsYSxsO3JldHVybihzPU1hdGguc3FydChuKm4rdCp0KSkmJihuLz1zLHQvPXMpLChsPW4qZSt0KmkpJiYoZS09bipsLGktPXQqbCksKGE9TWF0aC5zcXJ0KGUqZStpKmkpKSYmKGUvPWEsaS89YSxsLz1hKSxuKmk8dCplJiYobj0tbix0PS10LGw9LWwscz0tcykse3RyYW5zbGF0ZVg6cix0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIodCxuKSpJYWUsc2tld1g6TWF0aC5hdGFuKGwpKklhZSxzY2FsZVg6cyxzY2FsZVk6YX19ZnVuY3Rpb24ga2FlKG4sdCxlLGkpe2Z1bmN0aW9uIHIoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBkPVtdLHA9W107cmV0dXJuIGM9bihjKSx1PW4odSksZnVuY3Rpb24oYyx1LGQscCxoLGYpe2lmKGMhPT1kfHx1IT09cCl7dmFyIG09aC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxlKTtmLnB1c2goe2k6bS00LHg6Q3MoYyxkKX0se2k6bS0yLHg6Q3ModSxwKX0pfWVsc2UoZHx8cCkmJmgucHVzaCgidHJhbnNsYXRlKCIrZCt0K3ArZSl9KGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxkLHApLGZ1bmN0aW9uKGMsdSxkLHApe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxwLnB1c2goe2k6ZC5wdXNoKHIoZCkrInJvdGF0ZSgiLG51bGwsaSktMix4OkNzKGMsdSl9KSk6dSYmZC5wdXNoKHIoZCkrInJvdGF0ZSgiK3UraSl9KGMucm90YXRlLHUucm90YXRlLGQscCksZnVuY3Rpb24oYyx1LGQscCl7YyE9PXU/cC5wdXNoKHtpOmQucHVzaChyKGQpKyJza2V3WCgiLG51bGwsaSktMix4OkNzKGMsdSl9KTp1JiZkLnB1c2gocihkKSsic2tld1goIit1K2kpfShjLnNrZXdYLHUuc2tld1gsZCxwKSxmdW5jdGlvbihjLHUsZCxwLGgsZil7aWYoYyE9PWR8fHUhPT1wKXt2YXIgbT1oLnB1c2gocihoKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zi5wdXNoKHtpOm0tNCx4OkNzKGMsZCl9LHtpOm0tMix4OkNzKHUscCl9KX1lbHNlKDEhPT1kfHwxIT09cCkmJmgucHVzaChyKGgpKyJzY2FsZSgiK2QrIiwiK3ArIikiKX0oYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksZCxwKSxjPXU9bnVsbCxmdW5jdGlvbihoKXtmb3IodmFyIHgsZj0tMSxtPXAubGVuZ3RoOysrZjxtOylkWyh4PXBbZl0pLmldPXgueChoKTtyZXR1cm4gZC5qb2luKCIiKX19fXZhciBjej1rYWUoZnVuY3Rpb24obil7cmV0dXJuIm5vbmUiPT09bj9CUjooWnd8fChadz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxsej1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsUGFlPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxady5zdHlsZS50cmFuc2Zvcm09bixuPVBhZS5nZXRDb21wdXRlZFN0eWxlKGx6LmFwcGVuZENoaWxkKFp3KSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxsei5yZW1vdmVDaGlsZChadyksYXooKyhuPW4uc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX0sInB4LCAiLCJweCkiLCJkZWcpIiksdXo9a2FlKGZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uP0JSOihWUnx8KFZSPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLFZSLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixuKSwobj1WUi50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9heigobj1uLm1hdHJpeCkuYSxuLmIsbi5jLG4uZCxuLmUsbi5mKTpCUil9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gRmFlKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBpPW4oKHQ9dmcodCkpLmgsKGU9dmcoZSkpLmgpLHI9emEodC5zLGUucyksbz16YSh0LmwsZS5sKSxzPXphKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gdC5oPWkoYSksdC5zPXIoYSksdC5sPW8oYSksdC5vcGFjaXR5PXMoYSksdCsiIn19fXZhciBkej1GYWUoTFIpO2Z1bmN0aW9uIE5hZShuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgaT1uKCh0PXlnKHQpKS5oLChlPXlnKGUpKS5oKSxyPXphKHQuYyxlLmMpLG89emEodC5sLGUubCkscz16YSh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIHQuaD1pKGEpLHQuYz1yKGEpLHQubD1vKGEpLHQub3BhY2l0eT1zKGEpLHQrIiJ9fX1GYWUoemEpO3ZhciBIUixlUyxwej1OYWUoTFIpLHZ5PShOYWUoemEpLDApLCR3PTAsSnc9MCxVUj0wLHhnPTAselI9MCx0Uz0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxWYWU9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24obil7c2V0VGltZW91dChuLDE3KX07ZnVuY3Rpb24geXkoKXtyZXR1cm4geGd8fChWYWUoQkhlKSx4Zz10Uy5ub3coKSt6Uil9ZnVuY3Rpb24gQkhlKCl7eGc9MH1mdW5jdGlvbiBuUygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24galIobix0LGUpe3ZhciBpPW5ldyBuUztyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIExhZSgpe3hnPShVUj10Uy5ub3coKSkrelIsdnk9JHc9MDt0cnl7IWZ1bmN0aW9uKCl7eXkoKSwrK3Z5O2Zvcih2YXIgdCxuPUhSO247KSh0PXhnLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS12eX0oKX1maW5hbGx5e3Z5PTAsZnVuY3Rpb24oKXtmb3IodmFyIG4sZSx0PUhSLGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpIUj1lKTtlUz1uLGh6KGkpfSgpLHhnPTB9fWZ1bmN0aW9uIFZIZSgpe3ZhciBuPXRTLm5vdygpLHQ9bi1VUjt0PjFlMyYmKHpSLT10LFVSPW4pfWZ1bmN0aW9uIGh6KG4pe3Z5fHwoJHcmJigkdz1jbGVhclRpbWVvdXQoJHcpKSxuLXhnPjI0PyhuPDEvMCYmKCR3PXNldFRpbWVvdXQoTGFlLG4tdFMubm93KCktelIpKSxKdyYmKEp3PWNsZWFySW50ZXJ2YWwoSncpKSk6KEp3fHwoVVI9dFMubm93KCksSnc9c2V0SW50ZXJ2YWwoVkhlLDFlMykpLHZ5PTEsVmFlKExhZSkpKX1mdW5jdGlvbiBHUihuLHQsZSl7dmFyIGk9bmV3IG5TO3JldHVybiBpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0PW51bGw9PXQ/MDordCxlKSxpfW5TLnByb3RvdHlwZT1qUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5TLHJlc3RhcnQ6ZnVuY3Rpb24obix0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7ZT0obnVsbD09ZT95eSgpOitlKSsobnVsbD09dD8wOit0KSwhdGhpcy5fbmV4dCYmZVMhPT10aGlzJiYoZVM/ZVMuX25leHQ9dGhpczpIUj10aGlzLGVTPXRoaXMpLHRoaXMuX2NhbGw9bix0aGlzLl90aW1lPWUsaHooKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsaHooKSl9fTt2YXIgVUhlPUd3KCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLHpIZT1bXTtmdW5jdGlvbiAkaChuLHQsZSxpLHIsbyl7dmFyIHM9bi5fX3RyYW5zaXRpb247aWYocyl7aWYoZSBpbiBzKXJldHVybn1lbHNlIG4uX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbihuLHQsZSl7dmFyIHIsaT1uLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiBzKGMpe3ZhciB1LGQscCxoO2lmKDEhPT1lLnN0YXRlKXJldHVybiBsKCk7Zm9yKHUgaW4gaSlpZigoaD1pW3VdKS5uYW1lPT09ZS5uYW1lKXtpZigzPT09aC5zdGF0ZSlyZXR1cm4gR1Iocyk7ND09PWguc3RhdGU/KGguc3RhdGU9NixoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsbixuLl9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGlbdV0pOit1PHQmJihoLnN0YXRlPTYsaC50aW1lci5zdG9wKCksaC5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxoLmluZGV4LGguZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihHUihmdW5jdGlvbigpezM9PT1lLnN0YXRlJiYoZS5zdGF0ZT00LGUudGltZXIucmVzdGFydChhLGUuZGVsYXksZS50aW1lKSxhKGMpKX0pLGUuc3RhdGU9MixlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSwyPT09ZS5zdGF0ZSl7Zm9yKGUuc3RhdGU9MyxyPW5ldyBBcnJheShwPWUudHdlZW4ubGVuZ3RoKSx1PTAsZD0tMTt1PHA7Kyt1KShoPWUudHdlZW5bdV0udmFsdWUuY2FsbChuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSkmJihyWysrZF09aCk7ci5sZW5ndGg9ZCsxfX1mdW5jdGlvbiBhKGMpe2Zvcih2YXIgdT1jPGUuZHVyYXRpb24/ZS5lYXNlLmNhbGwobnVsbCxjL2UuZHVyYXRpb24pOihlLnRpbWVyLnJlc3RhcnQobCksZS5zdGF0ZT01LDEpLGQ9LTEscD1yLmxlbmd0aDsrK2Q8cDspcltkXS5jYWxsKG4sdSk7NT09PWUuc3RhdGUmJihlLm9uLmNhbGwoImVuZCIsbixuLl9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksbCgpKX1mdW5jdGlvbiBsKCl7Zm9yKHZhciBjIGluIGUuc3RhdGU9NixlLnRpbWVyLnN0b3AoKSxkZWxldGUgaVt0XSxpKXJldHVybjtkZWxldGUgbi5fX3RyYW5zaXRpb259aVt0XT1lLGUudGltZXI9alIoZnVuY3Rpb24oYyl7ZS5zdGF0ZT0xLGUudGltZXIucmVzdGFydChzLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZzKGMtZS5kZWxheSl9LDAsZS50aW1lKX0obixlLHtuYW1lOnQsaW5kZXg6aSxncm91cDpyLG9uOlVIZSx0d2Vlbjp6SGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIHJTKG4sdCl7dmFyIGU9WG8obix0KTtpZihlLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBoYShuLHQpe3ZhciBlPVhvKG4sdCk7aWYoZS5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIFhvKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gQ2cobix0KXt2YXIgaSxyLHMsZT1uLl9fdHJhbnNpdGlvbixvPSEwO2lmKGUpe2ZvcihzIGluIHQ9bnVsbD09dD9udWxsOnQrIiIsZSkoaT1lW3NdKS5uYW1lPT09dD8ocj1pLnN0YXRlPjImJmkuc3RhdGU8NSxpLnN0YXRlPTYsaS50aW1lci5zdG9wKCksaS5vbi5jYWxsKHI/ImludGVycnVwdCI6ImNhbmNlbCIsbixuLl9fZGF0YV9fLGkuaW5kZXgsaS5ncm91cCksZGVsZXRlIGVbc10pOm89ITE7byYmZGVsZXRlIG4uX190cmFuc2l0aW9ufX1mdW5jdGlvbiBHSGUobix0KXt2YXIgZSxpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPWhhKHRoaXMsbiksbz1yLnR3ZWVuO2lmKG8hPT1lKWZvcih2YXIgcz0wLGE9KGk9ZT1vKS5sZW5ndGg7czxhOysrcylpZihpW3NdLm5hbWU9PT10KXsoaT1pLnNsaWNlKCkpLnNwbGljZShzLDEpO2JyZWFrfXIudHdlZW49aX19ZnVuY3Rpb24gV0hlKG4sdCxlKXt2YXIgaSxyO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1oYSh0aGlzLG4pLHM9by50d2VlbjtpZihzIT09aSl7cj0oaT1zKS5zbGljZSgpO2Zvcih2YXIgYT17bmFtZTp0LHZhbHVlOmV9LGw9MCxjPXIubGVuZ3RoO2w8YzsrK2wpaWYocltsXS5uYW1lPT09dCl7cltsXT1hO2JyZWFrfWw9PT1jJiZyLnB1c2goYSl9by50d2Vlbj1yfX1mdW5jdGlvbiBieShuLHQsZSl7dmFyIGk9bi5faWQ7cmV0dXJuIG4uZWFjaChmdW5jdGlvbigpe3ZhciByPWhhKHRoaXMsaSk7KHIudmFsdWV8fChyLnZhbHVlPXt9KSlbdF09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihyKXtyZXR1cm4gWG8ocixpKS52YWx1ZVt0XX19ZnVuY3Rpb24gWFIobix0KXt2YXIgZTtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiB0P0NzOnQgaW5zdGFuY2VvZiBydT9iZzooZT1ydSh0KSk/KHQ9ZSxiZyk6S3cpKG4sdCl9ZnVuY3Rpb24gcUhlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfX1mdW5jdGlvbiBZSGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpfX1mdW5jdGlvbiBYSGUobix0LGUpe3ZhciBpLG8scj1lKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPXRoaXMuZ2V0QXR0cmlidXRlKG4pO3JldHVybiBzPT09cj9udWxsOnM9PT1pP286bz10KGk9cyxlKX19ZnVuY3Rpb24gUUhlKG4sdCxlKXt2YXIgaSxvLHI9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk7cmV0dXJuIHM9PT1yP251bGw6cz09PWk/bzpvPXQoaT1zLGUpfX1mdW5jdGlvbiBLSGUobix0LGUpe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcyxsLGE9ZSh0aGlzKTtyZXR1cm4gbnVsbD09YT92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKG4pOihzPXRoaXMuZ2V0QXR0cmlidXRlKG4pKT09PShsPWErIiIpP251bGw6cz09PWkmJmw9PT1yP286KHI9bCxvPXQoaT1zLGEpKX19ZnVuY3Rpb24gWkhlKG4sdCxlKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHMsbCxhPWUodGhpcyk7cmV0dXJuIG51bGw9PWE/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6KHM9dGhpcy5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpKT09PShsPWErIiIpP251bGw6cz09PWkmJmw9PT1yP286KHI9bCxvPXQoaT1zLGEpKX19ZnVuY3Rpb24gSkhlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlKG4sdC5jYWxsKHRoaXMsZSkpfX1mdW5jdGlvbiAkSGUobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsdC5jYWxsKHRoaXMsZSkpfX1mdW5jdGlvbiBlVWUobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PWkmJihlPShpPW8pJiYkSGUobixvKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfWZ1bmN0aW9uIHRVZShuLHQpe3ZhciBlLGk7ZnVuY3Rpb24gcigpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09aSYmKGU9KGk9bykmJkpIZShuLG8pKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gblVlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7clModGhpcyxuKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGlVZShuLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7clModGhpcyxuKS5kZWxheT10fX1mdW5jdGlvbiByVWUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtoYSh0aGlzLG4pLmR1cmF0aW9uPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gb1VlKG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtoYSh0aGlzLG4pLmR1cmF0aW9uPXR9fWZ1bmN0aW9uIHNVZShuLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtoYSh0aGlzLG4pLmVhc2U9dH19ZnVuY3Rpb24gbFVlKG4sdCxlKXt2YXIgaSxyLG89ZnVuY3Rpb24obil7cmV0dXJuKG4rIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKHQ9dC5zbGljZSgwLGUpKSwhdHx8InN0YXJ0Ij09PXR9KX0odCk/clM6aGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9byh0aGlzLG4pLGE9cy5vbjthIT09aSYmKHI9KGk9YSkuY29weSgpKS5vbih0LGUpLHMub249cn19dmFyIHVVZT1wcC5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gaWxlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9fWZ1bmN0aW9uIG1VZShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LmNhbGwodGhpcyxpKSxlKX19ZnVuY3Rpb24gZ1VlKG4sdCxlKXt2YXIgaSxyO2Z1bmN0aW9uIG8oKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PXImJihpPShyPXMpJiZtVWUobixzLGUpKSxpfXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24geVVlKG4pe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnRleHRDb250ZW50PW4uY2FsbCh0aGlzLHQpfX1mdW5jdGlvbiBiVWUobil7dmFyIHQsZTtmdW5jdGlvbiBpKCl7dmFyIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHIhPT1lJiYodD0oZT1yKSYmeVVlKHIpKSx0fXJldHVybiBpLl92YWx1ZT1uLGl9dmFyIHhVZT0wO2Z1bmN0aW9uIFVzKG4sdCxlLGkpe3RoaXMuX2dyb3Vwcz1uLHRoaXMuX3BhcmVudHM9dCx0aGlzLl9uYW1lPWUsdGhpcy5faWQ9aX1mdW5jdGlvbiBRUigpe3JldHVybisreFVlfXZhciB4eT1wcC5wcm90b3R5cGU7VXMucHJvdG90eXBlPWZ1bmN0aW9uKG4pe3JldHVybiBwcCgpLnRyYW5zaXRpb24obil9LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VXMsc2VsZWN0OmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49Z2cobikpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPW5ldyBBcnJheShyKSxzPTA7czxyOysrcylmb3IodmFyIHUsZCxhPWlbc10sbD1hLmxlbmd0aCxjPW9bc109bmV3IEFycmF5KGwpLHA9MDtwPGw7KytwKSh1PWFbcF0pJiYoZD1uLmNhbGwodSx1Ll9fZGF0YV9fLHAsYSkpJiYoIl9fZGF0YV9fImluIHUmJihkLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbcF09ZCwkaChjW3BdLHQsZSxwLGMsWG8odSxlKSkpO3JldHVybiBuZXcgVXMobyx0aGlzLl9wYXJlbnRzLHQsZSl9LHNlbGVjdEFsbDpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVd3KG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1bXSxzPVtdLGE9MDthPHI7KythKWZvcih2YXIgdSxsPWlbYV0sYz1sLmxlbmd0aCxkPTA7ZDxjOysrZClpZih1PWxbZF0pe2Zvcih2YXIgaCxwPW4uY2FsbCh1LHUuX19kYXRhX18sZCxsKSxmPVhvKHUsZSksbT0wLHg9cC5sZW5ndGg7bTx4OysrbSkoaD1wW21dKSYmJGgoaCx0LGUsbSxwLGYpO28ucHVzaChwKSxzLnB1c2godSl9cmV0dXJuIG5ldyBVcyhvLHMsdCxlKX0sZmlsdGVyOmZ1bmN0aW9uKG4peyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1xdyhuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKWZvcih2YXIgbCxvPXRbcl0scz1vLmxlbmd0aCxhPWlbcl09W10sYz0wO2M8czsrK2MpKGw9b1tjXSkmJm4uY2FsbChsLGwuX19kYXRhX18sYyxvKSYmYS5wdXNoKGwpO3JldHVybiBuZXcgVXMoaSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbihuKXtpZihuLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgsbz1NYXRoLm1pbihpLGUubGVuZ3RoKSxzPW5ldyBBcnJheShpKSxhPTA7YTxvOysrYSlmb3IodmFyIHAsbD10W2FdLGM9ZVthXSx1PWwubGVuZ3RoLGQ9c1thXT1uZXcgQXJyYXkodSksaD0wO2g8dTsrK2gpKHA9bFtoXXx8Y1toXSkmJihkW2hdPXApO2Zvcig7YTxpOysrYSlzW2FdPXRbYV07cmV0dXJuIG5ldyBVcyhzLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgdVVlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgbj10aGlzLl9uYW1lLHQ9dGhpcy5faWQsZT1RUigpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBsLHM9aVtvXSxhPXMubGVuZ3RoLGM9MDtjPGE7KytjKWlmKGw9c1tjXSl7dmFyIHU9WG8obCx0KTskaChsLG4sZSxjLHMse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IFVzKGksdGhpcy5fcGFyZW50cyxuLGUpfSxjYWxsOnh5LmNhbGwsbm9kZXM6eHkubm9kZXMsbm9kZTp4eS5ub2RlLHNpemU6eHkuc2l6ZSxlbXB0eTp4eS5lbXB0eSxlYWNoOnh5LmVhY2gsb246ZnVuY3Rpb24obix0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP1hvKHRoaXMubm9kZSgpLGUpLm9uLm9uKG4pOnRoaXMuZWFjaChsVWUoZSxuLHQpKX0sYXR0cjpmdW5jdGlvbihuLHQpe3ZhciBlPWRwKG4pLGk9InRyYW5zZm9ybSI9PT1lP3V6OlhSO3JldHVybiB0aGlzLmF0dHJUd2VlbihuLCJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlLmxvY2FsP1pIZTpLSGUpKGUsaSxieSh0aGlzLCJhdHRyLiIrbix0KSk6bnVsbD09dD8oZS5sb2NhbD9ZSGU6cUhlKShlKTooZS5sb2NhbD9RSGU6WEhlKShlLGksdCkpfSxhdHRyVHdlZW46ZnVuY3Rpb24obix0KXt2YXIgZT0iYXR0ci4iK247aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3ZhciBpPWRwKG4pO3JldHVybiB0aGlzLnR3ZWVuKGUsKGkubG9jYWw/ZVVlOnRVZSkoaSx0KSl9LHN0eWxlOmZ1bmN0aW9uKG4sdCxlKXt2YXIgaT0idHJhbnNmb3JtIj09KG4rPSIiKT9jejpYUjtyZXR1cm4gbnVsbD09dD90aGlzLnN0eWxlVHdlZW4obixmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1aaCh0aGlzLG4pLHM9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobiksWmgodGhpcyxuKSk7cmV0dXJuIG89PT1zP251bGw6bz09PWUmJnM9PT1pP3I6cj10KGU9byxpPXMpfX0obixpKSkub24oImVuZC5zdHlsZS4iK24saWxlKG4pKToiZnVuY3Rpb24iPT10eXBlb2YgdD90aGlzLnN0eWxlVHdlZW4obixmdW5jdGlvbihuLHQsZSl7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPVpoKHRoaXMsbiksYT1lKHRoaXMpLGw9YSsiIjtyZXR1cm4gbnVsbD09YSYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobiksbD1hPVpoKHRoaXMsbikpLHM9PT1sP251bGw6cz09PWkmJmw9PT1yP286KHI9bCxvPXQoaT1zLGEpKX19KG4saSxieSh0aGlzLCJzdHlsZS4iK24sdCkpKS5lYWNoKGZ1bmN0aW9uKG4sdCl7dmFyIGUsaSxyLGEsbz0ic3R5bGUuIit0LHM9ImVuZC4iK287cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9aGEodGhpcyxuKSxjPWwub24sdT1udWxsPT1sLnZhbHVlW29dP2F8fChhPWlsZSh0KSk6dm9pZCAwOyhjIT09ZXx8ciE9PXUpJiYoaT0oZT1jKS5jb3B5KCkpLm9uKHMscj11KSxsLm9uPWl9fSh0aGlzLl9pZCxuKSk6dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0LGUpe3ZhciBpLG8scj1lKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPVpoKHRoaXMsbik7cmV0dXJuIHM9PT1yP251bGw6cz09PWk/bzpvPXQoaT1zLGUpfX0obixpLHQpLGUpLm9uKCJlbmQuc3R5bGUuIituLG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKG4sdCxlKXt2YXIgaT0ic3R5bGUuIisobis9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLGdVZShuLHQsZT8/IiIpKX0sdGV4dDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bih0aGlzKTt0aGlzLnRleHRDb250ZW50PXQ/PyIifX0oYnkodGhpcywidGV4dCIsbikpOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19KG51bGw9PW4/IiI6bisiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24obil7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYobnVsbD09bilyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LGJVZShuKSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBlIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtlIT09bilyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5faWQ7aWYobis9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHMsaT1Ybyh0aGlzLm5vZGUoKSxlKS50d2VlbixyPTAsbz1pLmxlbmd0aDtyPG87KytyKWlmKChzPWlbcl0pLm5hbWU9PT1uKXJldHVybiBzLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PXQ/R0hlOldIZSkoZSxuLHQpKX0sZGVsYXk6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uVWU6aVVlKSh0LG4pKTpYbyh0aGlzLm5vZGUoKSx0KS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9yVWU6b1VlKSh0LG4pKTpYbyh0aGlzLm5vZGUoKSx0KS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goc1VlKHQsbikpOlhvKHRoaXMubm9kZSgpLHQpLmVhc2V9LGVuZDpmdW5jdGlvbigpe3ZhciBuLHQsZT10aGlzLGk9ZS5faWQscj1lLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxzKXt2YXIgYT17dmFsdWU6c30sbD17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLXImJm8oKX19O2UuZWFjaChmdW5jdGlvbigpe3ZhciBjPWhhKHRoaXMsaSksdT1jLm9uO3UhPT1uJiYoKHQ9KG49dSkuY29weSgpKS5fLmNhbmNlbC5wdXNoKGEpLHQuXy5pbnRlcnJ1cHQucHVzaChhKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9fTt2YXIgZ3o9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uKG4pe3JldHVybigobio9Mik8PTE/bipuKm46KG4tPTIpKm4qbisyKS8yfX07ZnVuY3Rpb24gQ1VlKG4sdCl7Zm9yKHZhciBlOyEoZT1uLl9fdHJhbnNpdGlvbil8fCEoZT1lW3RdKTspaWYoIShuPW4ucGFyZW50Tm9kZSkpcmV0dXJuIGd6LnRpbWU9eXkoKSxnejtyZXR1cm4gZX1mdW5jdGlvbiBaUihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gZGxlKG4sdCxlKXt0aGlzLnRhcmdldD1uLHRoaXMudHlwZT10LHRoaXMuc2VsZWN0aW9uPWV9ZnVuY3Rpb24gX3ooKXtzaS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBKUigpe3NpLnByZXZlbnREZWZhdWx0KCksc2kuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9cHAucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Q2codGhpcyxuKX0pfSxwcC5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbihuKXt2YXIgdCxlO24gaW5zdGFuY2VvZiBVcz8odD1uLl9pZCxuPW4uX25hbWUpOih0PVFSKCksKGU9Z3opLnRpbWU9eXkoKSxuPW51bGw9PW4/bnVsbDpuKyIiKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBsLHM9aVtvXSxhPXMubGVuZ3RoLGM9MDtjPGE7KytjKShsPXNbY10pJiYkaChsLG4sdCxjLHMsZXx8Q1VlKGwsdCkpO3JldHVybiBuZXcgVXMoaSx0aGlzLl9wYXJlbnRzLG4sdCl9O3ZhciBwbGU9e25hbWU6ImRyYWcifSx2ej17bmFtZToic3BhY2UifSxDeT17bmFtZToiaGFuZGxlIn0sTXk9e25hbWU6ImNlbnRlciJ9O2Z1bmN0aW9uIGhsZShuKXtyZXR1cm5bK25bMF0sK25bMV1dfWZ1bmN0aW9uIHh6KG4pe3JldHVybltobGUoblswXSksaGxlKG5bMV0pXX1mdW5jdGlvbiBNVWUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLHQsZSl7YXJndW1lbnRzLmxlbmd0aDwzJiYoZT10LHQ9UFIoKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBvLGk9MCxyPXQ/dC5sZW5ndGg6MDtpPHI7KytpKWlmKChvPXRbaV0pLmlkZW50aWZpZXI9PT1lKXJldHVybiBSUihuLG8pO3JldHVybiBudWxsfSh0LHNpLnRvdWNoZXMsbil9fXZhciB5ej17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKG9TKSxpbnB1dDpmdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT1uP251bGw6W1srblswXSx0WzBdWzFdXSxbK25bMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG4mJltuWzBdWzBdLG5bMV1bMF1dfX0sJFI9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChvUyksaW5wdXQ6ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj9udWxsOltbdFswXVswXSwrblswXV0sW3RbMV1bMF0sK25bMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKG4pe3JldHVybiBuJiZbblswXVsxXSxuWzFdWzFdXX19LG1wPShbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChvUykse292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9KSxmbGU9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LG1sZT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sd1VlPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LFNVZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBvUyhuKXtyZXR1cm57dHlwZTpufX1mdW5jdGlvbiBFVWUoKXtyZXR1cm4hc2kuY3RybEtleSYmIXNpLmJ1dHRvbn1mdW5jdGlvbiBUVWUoKXt2YXIgbj10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm4gbi5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyhuPW4udmlld0JveC5iYXNlVmFsKS54LG4ueV0sW24ueCtuLndpZHRoLG4ueStuLmhlaWdodF1dOltbMCwwXSxbbi53aWR0aC5iYXNlVmFsLnZhbHVlLG4uaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBEVWUoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gYnoobil7Zm9yKDshbi5fX2JydXNoOylpZighKG49bi5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIG4uX19icnVzaH1mdW5jdGlvbiBBVWUobil7cmV0dXJuIG5bMF1bMF09PT1uWzFdWzBdfHxuWzBdWzFdPT09blsxXVsxXX1NYXRoO3ZhciBNej1NYXRoLlBJLHd6PTIqTXosTWc9MWUtNixrVWU9d3otTWc7ZnVuY3Rpb24gU3ooKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBfbGUoKXtyZXR1cm4gbmV3IFN6fVN6LnByb3RvdHlwZT1fbGUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpTeixtb3ZlVG86ZnVuY3Rpb24obix0KXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K24pKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihuLHQpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0rdCl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24obix0LGUsaSl7dGhpcy5fKz0iUSIrICtuKyIsIisgK3QrIiwiKyh0aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MT0raSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24obix0LGUsaSxyLG8pe3RoaXMuXys9IkMiKyArbisiLCIrICt0KyIsIisgK2UrIiwiKyAraSsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24obix0LGUsaSxyKXt2YXIgbz10aGlzLl94MSxzPXRoaXMuX3kxLGE9KGU9K2UpLShuPStuKSxsPShpPStpKS0odD0rdCksYz1vLW4sdT1zLXQsZD1jKmMrdSp1O2lmKChyPStyKTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9bikrIiwiKyh0aGlzLl95MT10KTtlbHNlIGlmKGQ+TWcpaWYoTWF0aC5hYnModSphLWwqYyk+TWcmJnIpe3ZhciBwPWUtbyxoPWktcyxmPWEqYStsKmwsbT1wKnAraCpoLHg9TWF0aC5zcXJ0KGYpLGc9TWF0aC5zcXJ0KGQpLGI9cipNYXRoLnRhbigoTXotTWF0aC5hY29zKChmK2QtbSkvKDIqeCpnKSkpLzIpLEQ9Yi9nLFQ9Yi94O01hdGguYWJzKEQtMSk+TWcmJih0aGlzLl8rPSJMIisobitEKmMpKyIsIisodCtEKnUpKSx0aGlzLl8rPSJBIityKyIsIityKyIsMCwwLCIrICsodSpwPmMqaCkrIiwiKyh0aGlzLl94MT1uK1QqYSkrIiwiKyh0aGlzLl95MT10K1QqbCl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9bikrIiwiKyh0aGlzLl95MT10KX0sYXJjOmZ1bmN0aW9uKG4sdCxlLGkscixvKXtuPStuLHQ9K3Qsbz0hIW87dmFyIHM9KGU9K2UpKk1hdGguY29zKGkpLGE9ZSpNYXRoLnNpbihpKSxsPW4rcyxjPXQrYSx1PTFebyxkPW8/aS1yOnItaTtpZihlPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrZSk7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPk1nfHxNYXRoLmFicyh0aGlzLl95MS1jKT5NZykmJih0aGlzLl8rPSJMIitsKyIsIitjKSxlJiYoZDwwJiYoZD1kJXd6K3d6KSxkPmtVZT90aGlzLl8rPSJBIitlKyIsIitlKyIsMCwxLCIrdSsiLCIrKG4tcykrIiwiKyh0LWEpKyJBIitlKyIsIitlKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6ZD5NZyYmKHRoaXMuXys9IkEiK2UrIiwiK2UrIiwwLCIrICsoZD49TXopKyIsIit1KyIsIisodGhpcy5feDE9bitlKk1hdGguY29zKHIpKSsiLCIrKHRoaXMuX3kxPXQrZSpNYXRoLnNpbihyKSkpKX0scmVjdDpmdW5jdGlvbihuLHQsZSxpKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K24pKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK2UrInYiKyAraSsiaCIrLWUrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgc1M9X2xlLE1sPSIkIjtmdW5jdGlvbiBlTygpe31mdW5jdGlvbiB2bGUobix0KXt2YXIgZT1uZXcgZU87aWYobiBpbnN0YW5jZW9mIGVPKW4uZWFjaChmdW5jdGlvbihhLGwpe2Uuc2V0KGwsYSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikpe3ZhciBvLGk9LTEscj1uLmxlbmd0aDtpZihudWxsPT10KWZvcig7KytpPHI7KWUuc2V0KGksbltpXSk7ZWxzZSBmb3IoOysraTxyOyllLnNldCh0KG89bltpXSxpLG4pLG8pfWVsc2UgaWYobilmb3IodmFyIHMgaW4gbillLnNldChzLG5bc10pO3JldHVybiBlfWVPLnByb3RvdHlwZT12bGUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplTyxoYXM6ZnVuY3Rpb24obil7cmV0dXJuIE1sK24gaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzW01sK25dfSxzZXQ6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGhpc1tNbCtuXT10LHRoaXN9LHJlbW92ZTpmdW5jdGlvbihuKXt2YXIgdD1NbCtuO3JldHVybiB0IGluIHRoaXMmJmRlbGV0ZSB0aGlzW3RdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKW5bMF09PT1NbCYmZGVsZXRlIHRoaXNbbl19LGtleXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09TWwmJm4ucHVzaCh0LnNsaWNlKDEpKTtyZXR1cm4gbn0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIG49W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PU1sJiZuLnB1c2godGhpc1t0XSk7cmV0dXJuIG59LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09TWwmJm4ucHVzaCh7a2V5OnQuc2xpY2UoMSksdmFsdWU6dGhpc1t0XX0pO3JldHVybiBufSxzaXplOmZ1bmN0aW9uKCl7dmFyIG49MDtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09TWwmJisrbjtyZXR1cm4gbn0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIG4gaW4gdGhpcylpZihuWzBdPT09TWwpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PU1sJiZuKHRoaXNbdF0sdC5zbGljZSgxKSx0aGlzKX19O3ZhciBncD12bGU7ZnVuY3Rpb24gdE8oKXt9dmFyIHdnPWdwLnByb3RvdHlwZTtmdW5jdGlvbiBTZyhuLHQpe2lmKChlPShuPXQ/bi50b0V4cG9uZW50aWFsKHQtMSk6bi50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxpPW4uc2xpY2UoMCxlKTtyZXR1cm5baS5sZW5ndGg+MT9pWzBdK2kuc2xpY2UoMik6aSwrbi5zbGljZShlKzEpXX1mdW5jdGlvbiBDZChuKXtyZXR1cm4obj1TZyhNYXRoLmFicyhuKSkpP25bMV06TmFOfXRPLnByb3RvdHlwZT1mdW5jdGlvbihuLHQpe3ZhciBlPW5ldyB0TztpZihuIGluc3RhbmNlb2YgdE8pbi5lYWNoKGZ1bmN0aW9uKG8pe2UuYWRkKG8pfSk7ZWxzZSBpZihuKXt2YXIgaT0tMSxyPW4ubGVuZ3RoO2lmKG51bGw9PXQpZm9yKDsrK2k8cjspZS5hZGQobltpXSk7ZWxzZSBmb3IoOysraTxyOyllLmFkZCh0KG5baV0saSxuKSl9cmV0dXJuIGV9LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dE8saGFzOndnLmhhcyxhZGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbTWwrKG4rPSIiKV09bix0aGlzfSxyZW1vdmU6d2cucmVtb3ZlLGNsZWFyOndnLmNsZWFyLHZhbHVlczp3Zy5rZXlzLHNpemU6d2cuc2l6ZSxlbXB0eTp3Zy5lbXB0eSxlYWNoOndnLmVhY2h9LE1hdGgsTWF0aC5zcXJ0KDUpO3ZhciBFeixWVWU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gZWYobil7aWYoISh0PVZVZS5leGVjKG4pKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK24pO3ZhciB0O3JldHVybiBuZXcgbk8oe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9ZnVuY3Rpb24gbk8obil7dGhpcy5maWxsPXZvaWQgMD09PW4uZmlsbD8iICI6bi5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09bi5hbGlnbj8iPiI6bi5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09bi5zaWduPyItIjpuLnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09bi5zeW1ib2w/IiI6bi5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhbi56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09bi53aWR0aD92b2lkIDA6K24ud2lkdGgsdGhpcy5jb21tYT0hIW4uY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09bi5wcmVjaXNpb24/dm9pZCAwOituLnByZWNpc2lvbix0aGlzLnRyaW09ISFuLnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PW4udHlwZT8iIjpuLnR5cGUrIiJ9ZnVuY3Rpb24gVHoobix0KXt2YXIgZT1TZyhuLHQpO2lmKCFlKXJldHVybiBuKyIiO3ZhciBpPWVbMF0scj1lWzFdO3JldHVybiByPDA/IjAuIituZXcgQXJyYXkoLXIpLmpvaW4oIjAiKStpOmkubGVuZ3RoPnIrMT9pLnNsaWNlKDAscisxKSsiLiIraS5zbGljZShyKzEpOmkrbmV3IEFycmF5KHItaS5sZW5ndGgrMikuam9pbigiMCIpfWVmLnByb3RvdHlwZT1uTy5wcm90b3R5cGUsbk8ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIER6PXsiJSI6ZnVuY3Rpb24obix0KXtyZXR1cm4oMTAwKm4pLnRvRml4ZWQodCl9LGI6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24obil7cmV0dXJuIG4rIiJ9LGQ6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGguYWJzKG49TWF0aC5yb3VuZChuKSk+PTFlMjE/bi50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOm4udG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9FeHBvbmVudGlhbCh0KX0sZjpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRml4ZWQodCl9LGc6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b1ByZWNpc2lvbih0KX0sbzpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZChuKS50b1N0cmluZyg4KX0scDpmdW5jdGlvbihuLHQpe3JldHVybiBUeigxMDAqbix0KX0scjpUeixzOmZ1bmN0aW9uKG4sdCl7dmFyIGU9U2cobix0KTtpZighZSlyZXR1cm4gbisiIjt2YXIgaT1lWzBdLHI9ZVsxXSxvPXItKEV6PTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSkrMSxzPWkubGVuZ3RoO3JldHVybiBvPT09cz9pOm8+cz9pK25ldyBBcnJheShvLXMrMSkuam9pbigiMCIpOm8+MD9pLnNsaWNlKDAsbykrIi4iK2kuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrU2cobixNYXRoLm1heCgwLHQrby0xKSlbMF19LFg6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMTYpfX07ZnVuY3Rpb24gQXoobil7cmV0dXJuIG59dmFyIGlPLHhvLHJPLEVsZT1BcnJheS5wcm90b3R5cGUubWFwLFRsZT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtmdW5jdGlvbiBkYygpe3JldHVybiBNYXRoLnJhbmRvbSgpfWlPPWZ1bmN0aW9uKG4pe3ZhciB0PXZvaWQgMD09PW4uZ3JvdXBpbmd8fHZvaWQgMD09PW4udGhvdXNhbmRzP0F6OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7Zm9yKHZhciByPWUubGVuZ3RoLG89W10scz0wLGE9blswXSxsPTA7cj4wJiZhPjAmJihsK2ErMT5pJiYoYT1NYXRoLm1heCgxLGktbCkpLG8ucHVzaChlLnN1YnN0cmluZyhyLT1hLHIrYSkpLCEoKGwrPWErMSk+aSkpOylhPW5bcz0ocysxKSVuLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fShFbGUuY2FsbChuLmdyb3VwaW5nLE51bWJlciksbi50aG91c2FuZHMrIiIpLGU9dm9pZCAwPT09bi5jdXJyZW5jeT8iIjpuLmN1cnJlbmN5WzBdKyIiLGk9dm9pZCAwPT09bi5jdXJyZW5jeT8iIjpuLmN1cnJlbmN5WzFdKyIiLHI9dm9pZCAwPT09bi5kZWNpbWFsPyIuIjpuLmRlY2ltYWwrIiIsbz12b2lkIDA9PT1uLm51bWVyYWxzP0F6OmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuWytlXX0pfX0oRWxlLmNhbGwobi5udW1lcmFscyxTdHJpbmcpKSxzPXZvaWQgMD09PW4ucGVyY2VudD8iJSI6bi5wZXJjZW50KyIiLGE9dm9pZCAwPT09bi5taW51cz8iLSI6bi5taW51cysiIixsPXZvaWQgMD09PW4ubmFuPyJOYU4iOm4ubmFuKyIiO2Z1bmN0aW9uIGMoZCl7dmFyIHA9KGQ9ZWYoZCkpLmZpbGwsaD1kLmFsaWduLGY9ZC5zaWduLG09ZC5zeW1ib2wseD1kLnplcm8sZz1kLndpZHRoLGI9ZC5jb21tYSxEPWQucHJlY2lzaW9uLFQ9ZC50cmltLGs9ZC50eXBlOyJuIj09PWs/KGI9ITAsaz0iZyIpOkR6W2tdfHwodm9pZCAwPT09RCYmKEQ9MTIpLFQ9ITAsaz0iZyIpLCh4fHwiMCI9PT1wJiYiPSI9PT1oKSYmKHg9ITAscD0iMCIsaD0iPSIpO3ZhciBaPSIkIj09PW0/ZToiIyI9PT1tJiYvW2JveFhdLy50ZXN0KGspPyIwIitrLnRvTG93ZXJDYXNlKCk6IiIsej0iJCI9PT1tP2k6L1slcF0vLnRlc3Qoayk/czoiIixmZT1EeltrXSx1ZT0vW2RlZmdwcnMlXS8udGVzdChrKTtmdW5jdGlvbiBoZSh3KXt2YXIgSyxkZSxZLEY9WixxPXo7aWYoImMiPT09aylxPWZlKHcpK3Esdz0iIjtlbHNle3ZhciBhZT0odz0rdyk8MHx8MS93PDA7aWYodz1pc05hTih3KT9sOmZlKE1hdGguYWJzKHcpLEQpLFQmJih3PWZ1bmN0aW9uKG4pe2U6Zm9yKHZhciByLHQ9bi5sZW5ndGgsZT0xLGk9LTE7ZTx0OysrZSlzd2l0Y2gobltlXSl7Y2FzZSIuIjppPXI9ZTticmVhaztjYXNlIjAiOjA9PT1pJiYoaT1lKSxyPWU7YnJlYWs7ZGVmYXVsdDppZighK25bZV0pYnJlYWsgZTtpPjAmJihpPTApfXJldHVybiBpPjA/bi5zbGljZSgwLGkpK24uc2xpY2UocisxKTpufSh3KSksYWUmJjA9PSt3JiYiKyIhPT1mJiYoYWU9ITEpLEY9KGFlPyIoIj09PWY/ZjphOiItIj09PWZ8fCIoIj09PWY/IiI6ZikrRixxPSgicyI9PT1rP1RsZVs4K0V6LzNdOiIiKStxKyhhZSYmIigiPT09Zj8iKSI6IiIpLHVlKWZvcihLPS0xLGRlPXcubGVuZ3RoOysrSzxkZTspaWYoNDg+KFk9dy5jaGFyQ29kZUF0KEspKXx8WT41Nyl7cT0oNDY9PT1ZP3Irdy5zbGljZShLKzEpOncuc2xpY2UoSykpK3Esdz13LnNsaWNlKDAsSyk7YnJlYWt9fWImJiF4JiYodz10KHcsMS8wKSk7dmFyIGxlPUYubGVuZ3RoK3cubGVuZ3RoK3EubGVuZ3RoLEllPWxlPGc/bmV3IEFycmF5KGctbGUrMSkuam9pbihwKToiIjtzd2l0Y2goYiYmeCYmKHc9dChJZSt3LEllLmxlbmd0aD9nLXEubGVuZ3RoOjEvMCksSWU9IiIpLGgpe2Nhc2UiPCI6dz1GK3crcStJZTticmVhaztjYXNlIj0iOnc9RitJZSt3K3E7YnJlYWs7Y2FzZSJeIjp3PUllLnNsaWNlKDAsbGU9SWUubGVuZ3RoPj4xKStGK3crcStJZS5zbGljZShsZSk7YnJlYWs7ZGVmYXVsdDp3PUllK0YrdytxfXJldHVybiBvKHcpfXJldHVybiBEPXZvaWQgMD09PUQ/NjovW2dwcnNdLy50ZXN0KGspP01hdGgubWF4KDEsTWF0aC5taW4oMjEsRCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsRCkpLGhlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGQrIiJ9LGhlfXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24oZCxwKXt2YXIgaD1jKCgoZD1lZihkKSkudHlwZT0iZiIsZCkpLGY9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoQ2QocCkvMykpKSxtPU1hdGgucG93KDEwLC1mKSx4PVRsZVs4K2YvM107cmV0dXJuIGZ1bmN0aW9uKGcpe3JldHVybiBoKG0qZykreH19fX0oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pLHhvPWlPLmZvcm1hdCxyTz1pTy5mb3JtYXRQcmVmaXgsZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkscil7cmV0dXJuIGk9bnVsbD09aT8wOitpLHI9bnVsbD09cj8xOityLDE9PT1hcmd1bWVudHMubGVuZ3RoPyhyPWksaT0wKTpyLT1pLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKSpyK2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KGRjKTt2YXIga3o9ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkscil7dmFyIG8scztyZXR1cm4gaT1udWxsPT1pPzA6K2kscj1udWxsPT1yPzE6K3IsZnVuY3Rpb24oKXt2YXIgYTtpZihudWxsIT1vKWE9byxvPW51bGw7ZWxzZSBkb3tvPTIqdCgpLTEsYT0yKnQoKS0xLHM9bypvK2EqYX13aGlsZSghc3x8cz4xKTtyZXR1cm4gaStyKmEqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKHMpL3MpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShkYyksRno9KGZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZSgpe3ZhciBpPWt6LnNvdXJjZSh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKGkoKSl9fXJldHVybiBlLnNvdXJjZT1uLGV9KGRjKSxmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPTAsbz0wO288aTsrK28pcis9dCgpO3JldHVybiByfX1yZXR1cm4gZS5zb3VyY2U9bixlfShkYykpO2Z1bmN0aW9uIHpzKG4sdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShuKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UodCkuZG9tYWluKG4pfXJldHVybiB0aGlzfShmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7dmFyIHI9Rnouc291cmNlKHQpKGkpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByKCkvaX19cmV0dXJuIGUuc291cmNlPW4sZX0pKGRjKSxmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtdCgpKS9pfX1yZXR1cm4gZS5zb3VyY2U9bixlfShkYyk7dmFyIEFsZT1BcnJheS5wcm90b3R5cGUsbFM9QWxlLm1hcCx0Zj1BbGUuc2xpY2UsTno9e25hbWU6ImltcGxpY2l0In07ZnVuY3Rpb24gY1MoKXt2YXIgbj1ncCgpLHQ9W10sZT1bXSxpPU56O2Z1bmN0aW9uIHIobyl7dmFyIHM9bysiIixhPW4uZ2V0KHMpO2lmKCFhKXtpZihpIT09TnopcmV0dXJuIGk7bi5zZXQocyxhPXQucHVzaChvKSl9cmV0dXJuIGVbKGEtMSklZS5sZW5ndGhdfXJldHVybiByLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W10sbj1ncCgpO2Zvcih2YXIgbCxjLHM9LTEsYT1vLmxlbmd0aDsrK3M8YTspbi5oYXMoYz0obD1vW3NdKSsiIil8fG4uc2V0KGMsdC5wdXNoKGwpKTtyZXR1cm4gcn0sci5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10Zi5jYWxsKG8pLHIpOmUuc2xpY2UoKX0sci51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW8scik6aX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNTKHQsZSkudW5rbm93bihpKX0senMuYXBwbHkocixhcmd1bWVudHMpLHJ9ZnVuY3Rpb24gd3koKXt2YXIgcixvLG49Y1MoKS51bmtub3duKHZvaWQgMCksdD1uLmRvbWFpbixlPW4ucmFuZ2UsaT1bMCwxXSxzPSExLGE9MCxsPTAsYz0uNTtmdW5jdGlvbiB1KCl7dmFyIGQ9dCgpLmxlbmd0aCxwPWlbMV08aVswXSxoPWlbcC0wXSxmPWlbMS1wXTtyPShmLWgpL01hdGgubWF4KDEsZC1hKzIqbCkscyYmKHI9TWF0aC5mbG9vcihyKSksaCs9KGYtaC1yKihkLWEpKSpjLG89ciooMS1hKSxzJiYoaD1NYXRoLnJvdW5kKGgpLG89TWF0aC5yb3VuZChvKSk7dmFyIG09S2goZCkubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBoK3IqeH0pO3JldHVybiBlKHA/bS5yZXZlcnNlKCk6bSl9cmV0dXJuIGRlbGV0ZSBuLnVua25vd24sbi5kb21haW49ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQoZCksdSgpKTp0KCl9LG4ucmFuZ2U9ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9WytkWzBdLCtkWzFdXSx1KCkpOmkuc2xpY2UoKX0sbi5yYW5nZVJvdW5kPWZ1bmN0aW9uKGQpe3JldHVybiBpPVsrZFswXSwrZFsxXV0scz0hMCx1KCl9LG4uYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIG99LG4uc3RlcD1mdW5jdGlvbigpe3JldHVybiByfSxuLnJvdW5kPWZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSEhZCx1KCkpOnN9LG4ucGFkZGluZz1mdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1NYXRoLm1pbigxLGw9K2QpLHUoKSk6YX0sbi5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9TWF0aC5taW4oMSxkKSx1KCkpOmF9LG4ucGFkZGluZ091dGVyPWZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStkLHUoKSk6bH0sbi5hbGlnbj1mdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsZCkpLHUoKSk6Y30sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHd5KHQoKSxpKS5yb3VuZChzKS5wYWRkaW5nSW5uZXIoYSkucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSx6cy5hcHBseSh1KCksYXJndW1lbnRzKX1mdW5jdGlvbiBJbGUobil7dmFyIHQ9bi5jb3B5O3JldHVybiBuLnBhZGRpbmc9bi5wYWRkaW5nT3V0ZXIsZGVsZXRlIG4ucGFkZGluZ0lubmVyLGRlbGV0ZSBuLnBhZGRpbmdPdXRlcixuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWxlKHQoKSl9LG59ZnVuY3Rpb24gU3koKXtyZXR1cm4gSWxlKHd5LmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIEx6KG4pe3JldHVybitufXZhciBSbGU9WzAsMV07ZnVuY3Rpb24gamEobil7cmV0dXJuIG59ZnVuY3Rpb24gQnoobix0KXtyZXR1cm4odC09bj0rbik/ZnVuY3Rpb24oZSl7cmV0dXJuKGUtbikvdH06ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fShpc05hTih0KT9OYU46LjUpfWZ1bmN0aW9uIE9sZShuKXt2YXIgaSx0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVybiB0PmUmJihpPXQsdD1lLGU9aSksZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxyKSl9fWZ1bmN0aW9uIEdVZShuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0sbz10WzBdLHM9dFsxXTtyZXR1cm4gcjxpPyhpPUJ6KHIsaSksbz1lKHMsbykpOihpPUJ6KGksciksbz1lKG8scykpLGZ1bmN0aW9uKGEpe3JldHVybiBvKGkoYSkpfX1mdW5jdGlvbiBXVWUobix0LGUpe3ZhciBpPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKS0xLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9LTE7Zm9yKG5baV08blswXSYmKG49bi5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylyW3NdPUJ6KG5bc10sbltzKzFdKSxvW3NdPWUodFtzXSx0W3MrMV0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgbD1pdShuLGEsMSxpKS0xO3JldHVybiBvW2xdKHJbbF0oYSkpfX1mdW5jdGlvbiBuZihuLHQpe3JldHVybiB0LmRvbWFpbihuLmRvbWFpbigpKS5yYW5nZShuLnJhbmdlKCkpLmludGVycG9sYXRlKG4uaW50ZXJwb2xhdGUoKSkuY2xhbXAobi5jbGFtcCgpKS51bmtub3duKG4udW5rbm93bigpKX1mdW5jdGlvbiB1Uygpe3ZhciBpLHIsbyxhLGwsYyxuPVJsZSx0PVJsZSxlPWZwLHM9amE7ZnVuY3Rpb24gdSgpe3JldHVybiBhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP1dVZTpHVWUsbD1jPW51bGwsZH1mdW5jdGlvbiBkKHApe3JldHVybiBpc05hTihwPStwKT9vOihsfHwobD1hKG4ubWFwKGkpLHQsZSkpKShpKHMocCkpKX1yZXR1cm4gZC5pbnZlcnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHMocigoY3x8KGM9YSh0LG4ubWFwKGkpLENzKSkpKHApKSl9LGQuZG9tYWluPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWxTLmNhbGwocCxMeikscz09PWphfHwocz1PbGUobikpLHUoKSk6bi5zbGljZSgpfSxkLnJhbmdlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXRmLmNhbGwocCksdSgpKTp0LnNsaWNlKCl9LGQucmFuZ2VSb3VuZD1mdW5jdGlvbihwKXtyZXR1cm4gdD10Zi5jYWxsKHApLGU9c3osdSgpfSxkLmNsYW1wPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXA/T2xlKG4pOmphLGQpOnMhPT1qYX0sZC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wLHUoKSk6ZX0sZC51bmtub3duPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXAsZCk6b30sZnVuY3Rpb24ocCxoKXtyZXR1cm4gaT1wLHI9aCx1KCl9fWZ1bmN0aW9uIGRTKG4sdCl7cmV0dXJuIHVTKCkobix0KX1mdW5jdGlvbiBFZyhuKXt2YXIgdD1uLmRvbWFpbjtyZXR1cm4gbi50aWNrcz1mdW5jdGlvbihlKXt2YXIgaT10KCk7cmV0dXJuIEh3KGlbMF0saVtpLmxlbmd0aC0xXSxlPz8xMCl9LG4udGlja0Zvcm1hdD1mdW5jdGlvbihlLGkpe3ZhciByPXQoKTtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSl7dmFyIG8scj12ZChuLHQsZSk7c3dpdGNoKChpPWVmKGk/PyIsZiIpKS50eXBlKXtjYXNlInMiOnZhciBzPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gbnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoQ2QodCkvMykpKS1DZChNYXRoLmFicyhuKSkpfShyLHMpKSYmKGkucHJlY2lzaW9uPW8pLHJPKGkscyk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49TWF0aC5hYnMobiksdD1NYXRoLmFicyh0KS1uLE1hdGgubWF4KDAsQ2QodCktQ2QobikpKzF9KHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1vLSgiZSI9PT1pLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heCgwLC1DZChNYXRoLmFicyhuKSkpfShyKSkmJihpLnByZWNpc2lvbj1vLTIqKCIlIj09PWkudHlwZSkpfXJldHVybiB4byhpKX0oclswXSxyW3IubGVuZ3RoLTFdLGU/PzEwLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7bnVsbD09ZSYmKGU9MTApO3ZhciBsLGk9dCgpLHI9MCxvPWkubGVuZ3RoLTEscz1pW3JdLGE9aVtvXTtyZXR1cm4gYTxzJiYobD1zLHM9YSxhPWwsbD1yLHI9byxvPWwpLChsPXB5KHMsYSxlKSk+MD9sPXB5KHM9TWF0aC5mbG9vcihzL2wpKmwsYT1NYXRoLmNlaWwoYS9sKSpsLGUpOmw8MCYmKGw9cHkocz1NYXRoLmNlaWwocypsKS9sLGE9TWF0aC5mbG9vcihhKmwpL2wsZSkpLGw+MD8oaVtyXT1NYXRoLmZsb29yKHMvbCkqbCxpW29dPU1hdGguY2VpbChhL2wpKmwsdChpKSk6bDwwJiYoaVtyXT1NYXRoLmNlaWwocypsKS9sLGlbb109TWF0aC5mbG9vcihhKmwpL2wsdChpKSksbn0sbn1mdW5jdGlvbiBRbygpe3ZhciBuPWRTKGphLGphKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5mKG4sUW8oKSl9LHpzLmFwcGx5KG4sYXJndW1lbnRzKSxFZyhuKX1mdW5jdGlvbiBvTyhuLHQpe3ZhciBzLGU9MCxpPShuPW4uc2xpY2UoKSkubGVuZ3RoLTEscj1uW2VdLG89bltpXTtyZXR1cm4gbzxyJiYocz1lLGU9aSxpPXMscz1yLHI9byxvPXMpLG5bZV09dC5mbG9vcihyKSxuW2ldPXQuY2VpbChvKSxufWZ1bmN0aW9uIGtsZShuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gRmxlKG4pe3JldHVybiBNYXRoLmV4cChuKX1mdW5jdGlvbiBxVWUobil7cmV0dXJuLU1hdGgubG9nKC1uKX1mdW5jdGlvbiBZVWUobil7cmV0dXJuLU1hdGguZXhwKC1uKX1mdW5jdGlvbiBYVWUobil7cmV0dXJuIGlzRmluaXRlKG4pPysoIjFlIituKTpuPDA/MDpufWZ1bmN0aW9uIE5sZShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLW4oLXQpfX1mdW5jdGlvbiBIeihuKXt2YXIgcixvLHQ9bihrbGUsRmxlKSxlPXQuZG9tYWluLGk9MTA7ZnVuY3Rpb24gcygpe3JldHVybiByPWZ1bmN0aW9uKG4pe3JldHVybiBuPT09TWF0aC5FP01hdGgubG9nOjEwPT09biYmTWF0aC5sb2cxMHx8Mj09PW4mJk1hdGgubG9nMnx8KG49TWF0aC5sb2cobiksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL259KX0oaSksbz1mdW5jdGlvbihuKXtyZXR1cm4gMTA9PT1uP1hVZTpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX0oaSksZSgpWzBdPDA/KHI9TmxlKHIpLG89TmxlKG8pLG4ocVVlLFlVZSkpOm4oa2xlLEZsZSksdH1yZXR1cm4gdC5iYXNlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSthLHMoKSk6aX0sdC5kb21haW49ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUoYSkscygpKTplKCl9LHQudGlja3M9ZnVuY3Rpb24oYSl7dmFyIGQsbD1lKCksYz1sWzBdLHU9bFtsLmxlbmd0aC0xXTsoZD11PGMpJiYocD1jLGM9dSx1PXApO3ZhciBmLG0seCxwPXIoYyksaD1yKHUpLGc9bnVsbD09YT8xMDorYSxiPVtdO2lmKCEoaSUxKSYmaC1wPGcpe2lmKHA9TWF0aC5yb3VuZChwKS0xLGg9TWF0aC5yb3VuZChoKSsxLGM+MCl7Zm9yKDtwPGg7KytwKWZvcihtPTEsZj1vKHApO208aTsrK20paWYoISgoeD1mKm0pPGMpKXtpZih4PnUpYnJlYWs7Yi5wdXNoKHgpfX1lbHNlIGZvcig7cDxoOysrcClmb3IobT1pLTEsZj1vKHApO20+PTE7LS1tKWlmKCEoKHg9ZiptKTxjKSl7aWYoeD51KWJyZWFrO2IucHVzaCh4KX19ZWxzZSBiPUh3KHAsaCxNYXRoLm1pbihoLXAsZykpLm1hcChvKTtyZXR1cm4gZD9iLnJldmVyc2UoKTpifSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24oYSxsKXtpZihudWxsPT1sJiYobD0xMD09PWk/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgbCYmKGw9eG8obCkpLGE9PT0xLzApcmV0dXJuIGw7bnVsbD09YSYmKGE9MTApO3ZhciBjPU1hdGgubWF4KDEsaSphL3QudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih1KXt2YXIgZD11L28oTWF0aC5yb3VuZChyKHUpKSk7cmV0dXJuIGQqaTxpLS41JiYoZCo9aSksZDw9Yz9sKHUpOiIifX0sdC5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUob08oZSgpLHtmbG9vcjpmdW5jdGlvbihhKXtyZXR1cm4gbyhNYXRoLmZsb29yKHIoYSkpKX0sY2VpbDpmdW5jdGlvbihhKXtyZXR1cm4gbyhNYXRoLmNlaWwocihhKSkpfX0pKX0sdH1mdW5jdGlvbiBwUygpe3ZhciBuPUh6KHVTKCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiBuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmYobixwUygpKS5iYXNlKG4uYmFzZSgpKX0senMuYXBwbHkobixhcmd1bWVudHMpLG59dmFyIFV6PW5ldyBEYXRlLHp6PW5ldyBEYXRlO2Z1bmN0aW9uIHlyKG4sdCxlLGkpe2Z1bmN0aW9uIHIobyl7cmV0dXJuIG4obz0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIHIuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIG4obz1uZXcgRGF0ZSgrbykpLG99LHIuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gbihvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxuKG8pLG99LHIucm91bmQ9ZnVuY3Rpb24obyl7dmFyIHM9cihvKSxhPXIuY2VpbChvKTtyZXR1cm4gby1zPGEtbz9zOmF9LHIub2Zmc2V0PWZ1bmN0aW9uKG8scyl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksbnVsbD09cz8xOk1hdGguZmxvb3IocykpLG99LHIucmFuZ2U9ZnVuY3Rpb24obyxzLGEpe3ZhciBjLGw9W107aWYobz1yLmNlaWwobyksYT1udWxsPT1hPzE6TWF0aC5mbG9vcihhKSwhKG88cyYmYT4wKSlyZXR1cm4gbDtkb3tsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxhKSxuKG8pfXdoaWxlKGM8byYmbzxzKTtyZXR1cm4gbH0sci5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHlyKGZ1bmN0aW9uKHMpe2lmKHM+PXMpZm9yKDtuKHMpLCFvKHMpOylzLnNldFRpbWUocy0xKX0sZnVuY3Rpb24ocyxhKXtpZihzPj1zKWlmKGE8MClmb3IoOysrYTw9MDspZm9yKDt0KHMsLTEpLCFvKHMpOyk7ZWxzZSBmb3IoOy0tYT49MDspZm9yKDt0KHMsMSksIW8ocyk7KTt9KX0sZSYmKHIuY291bnQ9ZnVuY3Rpb24obyxzKXtyZXR1cm4gVXouc2V0VGltZSgrbyksenouc2V0VGltZSgrcyksbihVeiksbih6eiksTWF0aC5mbG9vcihlKFV6LHp6KSl9LHIuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSxpc0Zpbml0ZShvKSYmbz4wP28+MT9yLmZpbHRlcihpP2Z1bmN0aW9uKHMpe3JldHVybiBpKHMpJW89PTB9OmZ1bmN0aW9uKHMpe3JldHVybiByLmNvdW50KDAscyklbz09MH0pOnI6bnVsbH0pLHJ9dmFyIHNPPXlyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC1ufSk7c08uZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIG49TWF0aC5mbG9vcihuKSxpc0Zpbml0ZShuKSYmbj4wP24+MT95cihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L24pKm4pfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKm4pfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL259KTpzTzpudWxsfTt2YXIgYU89c08sX3A9NmU0LGNPPTYwNDhlNSxCbGU9eXIoZnVuY3Rpb24obil7bi5zZXRUaW1lKG4tbi5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzFlMyp0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS8xZTN9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ1NlY29uZHMoKX0pLHVPPUJsZSxIbGU9eXIoZnVuY3Rpb24obil7bi5zZXRUaW1lKG4tbi5nZXRNaWxsaXNlY29uZHMoKS0xZTMqbi5nZXRTZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0Kl9wKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9fcH0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksR3o9SGxlLFVsZT15cihmdW5jdGlvbihuKXtuLnNldFRpbWUobi1uLmdldE1pbGxpc2Vjb25kcygpLTFlMypuLmdldFNlY29uZHMoKS1uLmdldE1pbnV0ZXMoKSpfcCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzM2ZTUqdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvMzZlNX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLFd6PVVsZSx6bGU9eXIoZnVuY3Rpb24obil7bi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldERhdGUobi5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbi0odC5nZXRUaW1lem9uZU9mZnNldCgpLW4uZ2V0VGltZXpvbmVPZmZzZXQoKSkqX3ApLzg2NGU1fSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXREYXRlKCktMX0pLEV5PXpsZTtmdW5jdGlvbiBEZyhuKXtyZXR1cm4geXIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctbiklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpfcCkvY099KX12YXIgQWc9RGcoMCksVHk9RGcoMSkscmY9KERnKDIpLERnKDMpLERnKDQpKSxYbGU9KERnKDUpLERnKDYpLHlyKGZ1bmN0aW9uKG4pe24uc2V0RGF0ZSgxKSxuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0TW9udGgobi5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldE1vbnRoKCktbi5nZXRNb250aCgpKzEyKih0LmdldEZ1bGxZZWFyKCktbi5nZXRGdWxsWWVhcigpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX0pKSxxej1YbGUsWXo9eXIoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtZei5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gaXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKSYmbj4wP3lyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvbikqbiksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSpuKX0pOm51bGx9O3ZhciB2cD1ZeixRbGU9eXIoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvODY0ZTV9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSksZE89UWxlO2Z1bmN0aW9uIElnKG4pe3JldHVybiB5cihmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCktKHQuZ2V0VVRDRGF5KCkrNy1uKSU3KSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2NPfSl9dmFyIGhTPUlnKDApLER5PUlnKDEpLG9mPShJZygyKSxJZygzKSxJZyg0KSksWHo9KElnKDUpLElnKDYpLHlyKGZ1bmN0aW9uKG4pe24uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktbi5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpfSkpO1h6LmV2ZXJ5PWZ1bmN0aW9uKG4pe3JldHVybiBpc0Zpbml0ZShuPU1hdGguZmxvb3IobikpJiZuPjA/eXIoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9uKSpuKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKm4pfSk6bnVsbH07dmFyIFBnPVh6O2Z1bmN0aW9uIFF6KG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpO3JldHVybiB0LnNldEZ1bGxZZWFyKG4ueSksdH1yZXR1cm4gbmV3IERhdGUobi55LG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKX1mdW5jdGlvbiBLeihuKXtpZigwPD1uLnkmJm4ueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKX1mdW5jdGlvbiBmUyhuLHQsZSl7cmV0dXJue3k6bixtOnQsZDplLEg6MCxNOjAsUzowLEw6MH19dmFyIEF5LEl5LHRjZT17Ii0iOiIiLF86IiAiLDA6IjAifSx1cz0vXlxzKlxkKy8sZ3plPS9eJS8sX3plPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBHaShuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLG89ci5sZW5ndGg7cmV0dXJuIGkrKG88ZT9uZXcgQXJyYXkoZS1vKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiB2emUobil7cmV0dXJuIG4ucmVwbGFjZShfemUsIlxcJCYiKX1mdW5jdGlvbiBtUyhuKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrbi5tYXAodnplKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gZ1Mobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24geXplKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi53PStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJ6ZShuLHQsZSl7dmFyIGk9dXMuZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/KG4udT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB4emUobix0LGUpe3ZhciBpPXVzLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQ3plKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5WPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE16ZShuLHQsZSl7dmFyIGk9dXMuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uVz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuY2Uobix0LGUpe3ZhciBpPXVzLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaWNlKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi55PStpWzBdKygraVswXT42OD8xOTAwOjJlMyksZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gd3plKG4sdCxlKXt2YXIgaT0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKGUsZSs2KSk7cmV0dXJuIGk/KG4uWj1pWzFdPzA6LShpWzJdKyhpWzNdfHwiMDAiKSksZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gU3plKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi5xPTMqaVswXS0zLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEV6ZShuLHQsZSl7dmFyIGk9dXMuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4ubT1pWzBdLTEsZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcmNlKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5kPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFR6ZShuLHQsZSl7dmFyIGk9dXMuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvY2Uobix0LGUpe3ZhciBpPXVzLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLkg9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRHplKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5NPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEF6ZShuLHQsZSl7dmFyIGk9dXMuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJemUobix0LGUpe3ZhciBpPXVzLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiBpPyhuLkw9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUHplKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSxlKzYpKTtyZXR1cm4gaT8obi5MPU1hdGguZmxvb3IoaVswXS8xZTMpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJ6ZShuLHQsZSl7dmFyIGk9Z3plLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpP2UraVswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gT3plKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLlE9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24ga3plKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc2NlKG4sdCl7cmV0dXJuIEdpKG4uZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gRnplKG4sdCl7cmV0dXJuIEdpKG4uZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIE56ZShuLHQpe3JldHVybiBHaShuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gTHplKG4sdCl7cmV0dXJuIEdpKDErRXkuY291bnQodnAobiksbiksdCwzKX1mdW5jdGlvbiBkY2Uobix0KXtyZXR1cm4gR2kobi5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIEJ6ZShuLHQpe3JldHVybiBkY2Uobix0KSsiMDAwIn1mdW5jdGlvbiBWemUobix0KXtyZXR1cm4gR2kobi5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBIemUobix0KXtyZXR1cm4gR2kobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBVemUobix0KXtyZXR1cm4gR2kobi5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiB6emUobil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gMD09PXQ/Nzp0fWZ1bmN0aW9uIGp6ZShuLHQpe3JldHVybiBHaShBZy5jb3VudCh2cChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gcGNlKG4pe3ZhciB0PW4uZ2V0RGF5KCk7cmV0dXJuIHQ+PTR8fDA9PT10P3JmKG4pOnJmLmNlaWwobil9ZnVuY3Rpb24gR3plKG4sdCl7cmV0dXJuIG49cGNlKG4pLEdpKHJmLmNvdW50KHZwKG4pLG4pKyg0PT09dnAobikuZ2V0RGF5KCkpLHQsMil9ZnVuY3Rpb24gV3plKG4pe3JldHVybiBuLmdldERheSgpfWZ1bmN0aW9uIHF6ZShuLHQpe3JldHVybiBHaShUeS5jb3VudCh2cChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gWXplKG4sdCl7cmV0dXJuIEdpKG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBYemUobix0KXtyZXR1cm4gR2koKG49cGNlKG4pKS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFF6ZShuLHQpe3JldHVybiBHaShuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gS3plKG4sdCl7dmFyIGU9bi5nZXREYXkoKTtyZXR1cm4gR2koKG49ZT49NHx8MD09PWU/cmYobik6cmYuY2VpbChuKSkuZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBaemUobil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybih0PjA/Ii0iOih0Kj0tMSwiKyIpKStHaSh0LzYwfDAsIjAiLDIpK0dpKHQlNjAsIjAiLDIpfWZ1bmN0aW9uIGFjZShuLHQpe3JldHVybiBHaShuLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIEp6ZShuLHQpe3JldHVybiBHaShuLmdldFVUQ0hvdXJzKCksdCwyKX1mdW5jdGlvbiAkemUobix0KXtyZXR1cm4gR2kobi5nZXRVVENIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIGVqZShuLHQpe3JldHVybiBHaSgxK2RPLmNvdW50KFBnKG4pLG4pLHQsMyl9ZnVuY3Rpb24gaGNlKG4sdCl7cmV0dXJuIEdpKG4uZ2V0VVRDTWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiB0amUobix0KXtyZXR1cm4gaGNlKG4sdCkrIjAwMCJ9ZnVuY3Rpb24gbmplKG4sdCl7cmV0dXJuIEdpKG4uZ2V0VVRDTW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gaWplKG4sdCl7cmV0dXJuIEdpKG4uZ2V0VVRDTWludXRlcygpLHQsMil9ZnVuY3Rpb24gcmplKG4sdCl7cmV0dXJuIEdpKG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gb2plKG4pe3ZhciB0PW4uZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT10Pzc6dH1mdW5jdGlvbiBzamUobix0KXtyZXR1cm4gR2koaFMuY291bnQoUGcobiktMSxuKSx0LDIpfWZ1bmN0aW9uIGZjZShuKXt2YXIgdD1uLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHwwPT09dD9vZihuKTpvZi5jZWlsKG4pfWZ1bmN0aW9uIGFqZShuLHQpe3JldHVybiBuPWZjZShuKSxHaShvZi5jb3VudChQZyhuKSxuKSsoND09PVBnKG4pLmdldFVUQ0RheSgpKSx0LDIpfWZ1bmN0aW9uIGxqZShuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiBjamUobix0KXtyZXR1cm4gR2koRHkuY291bnQoUGcobiktMSxuKSx0LDIpfWZ1bmN0aW9uIHVqZShuLHQpe3JldHVybiBHaShuLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gZGplKG4sdCl7cmV0dXJuIEdpKChuPWZjZShuKSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBwamUobix0KXtyZXR1cm4gR2kobi5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGhqZShuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIEdpKChuPWU+PTR8fDA9PT1lP29mKG4pOm9mLmNlaWwobikpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gZmplKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBsY2UoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gY2NlKG4pe3JldHVybitufWZ1bmN0aW9uIHVjZShuKXtyZXR1cm4gTWF0aC5mbG9vcigrbi8xZTMpfUF5PWZ1bmN0aW9uKG4pe3ZhciB0PW4uZGF0ZVRpbWUsZT1uLmRhdGUsaT1uLnRpbWUscj1uLnBlcmlvZHMsbz1uLmRheXMscz1uLnNob3J0RGF5cyxhPW4ubW9udGhzLGw9bi5zaG9ydE1vbnRocyxjPW1TKHIpLHU9Z1MociksZD1tUyhvKSxwPWdTKG8pLGg9bVMocyksZj1nUyhzKSxtPW1TKGEpLHg9Z1MoYSksZz1tUyhsKSxiPWdTKGwpLEQ9e2E6ZnVuY3Rpb24oVGUpe3JldHVybiBzW1RlLmdldERheSgpXX0sQTpmdW5jdGlvbihUZSl7cmV0dXJuIG9bVGUuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKFRlKXtyZXR1cm4gbFtUZS5nZXRNb250aCgpXX0sQjpmdW5jdGlvbihUZSl7cmV0dXJuIGFbVGUuZ2V0TW9udGgoKV19LGM6bnVsbCxkOnNjZSxlOnNjZSxmOkJ6ZSxnOlh6ZSxHOkt6ZSxIOkZ6ZSxJOk56ZSxqOkx6ZSxMOmRjZSxtOlZ6ZSxNOkh6ZSxwOmZ1bmN0aW9uKFRlKXtyZXR1cm4gclsrKFRlLmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24oVGUpe3JldHVybiAxK35+KFRlLmdldE1vbnRoKCkvMyl9LFE6Y2NlLHM6dWNlLFM6VXplLHU6enplLFU6anplLFY6R3plLHc6V3plLFc6cXplLHg6bnVsbCxYOm51bGwseTpZemUsWTpRemUsWjpaemUsIiUiOmxjZX0sVD17YTpmdW5jdGlvbihUZSl7cmV0dXJuIHNbVGUuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKFRlKXtyZXR1cm4gb1tUZS5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24oVGUpe3JldHVybiBsW1RlLmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKFRlKXtyZXR1cm4gYVtUZS5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6YWNlLGU6YWNlLGY6dGplLGc6ZGplLEc6aGplLEg6SnplLEk6JHplLGo6ZWplLEw6aGNlLG06bmplLE06aWplLHA6ZnVuY3Rpb24oVGUpe3JldHVybiByWysoVGUuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbihUZSl7cmV0dXJuIDErfn4oVGUuZ2V0VVRDTW9udGgoKS8zKX0sUTpjY2Usczp1Y2UsUzpyamUsdTpvamUsVTpzamUsVjphamUsdzpsamUsVzpjamUseDpudWxsLFg6bnVsbCx5OnVqZSxZOnBqZSxaOmZqZSwiJSI6bGNlfSxrPXthOmZ1bmN0aW9uKFRlLHh0LG10KXt2YXIgY2U9aC5leGVjKHh0LnNsaWNlKG10KSk7cmV0dXJuIGNlPyhUZS53PWZbY2VbMF0udG9Mb3dlckNhc2UoKV0sbXQrY2VbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbihUZSx4dCxtdCl7dmFyIGNlPWQuZXhlYyh4dC5zbGljZShtdCkpO3JldHVybiBjZT8oVGUudz1wW2NlWzBdLnRvTG93ZXJDYXNlKCldLG10K2NlWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24oVGUseHQsbXQpe3ZhciBjZT1nLmV4ZWMoeHQuc2xpY2UobXQpKTtyZXR1cm4gY2U/KFRlLm09YltjZVswXS50b0xvd2VyQ2FzZSgpXSxtdCtjZVswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKFRlLHh0LG10KXt2YXIgY2U9bS5leGVjKHh0LnNsaWNlKG10KSk7cmV0dXJuIGNlPyhUZS5tPXhbY2VbMF0udG9Mb3dlckNhc2UoKV0sbXQrY2VbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbihUZSx4dCxtdCl7cmV0dXJuIGZlKFRlLHQseHQsbXQpfSxkOnJjZSxlOnJjZSxmOlB6ZSxnOmljZSxHOm5jZSxIOm9jZSxJOm9jZSxqOlR6ZSxMOkl6ZSxtOkV6ZSxNOkR6ZSxwOmZ1bmN0aW9uKFRlLHh0LG10KXt2YXIgY2U9Yy5leGVjKHh0LnNsaWNlKG10KSk7cmV0dXJuIGNlPyhUZS5wPXVbY2VbMF0udG9Mb3dlckNhc2UoKV0sbXQrY2VbMF0ubGVuZ3RoKTotMX0scTpTemUsUTpPemUsczpremUsUzpBemUsdTpiemUsVTp4emUsVjpDemUsdzp5emUsVzpNemUseDpmdW5jdGlvbihUZSx4dCxtdCl7cmV0dXJuIGZlKFRlLGUseHQsbXQpfSxYOmZ1bmN0aW9uKFRlLHh0LG10KXtyZXR1cm4gZmUoVGUsaSx4dCxtdCl9LHk6aWNlLFk6bmNlLFo6d3plLCIlIjpSemV9O2Z1bmN0aW9uIFooVGUseHQpe3JldHVybiBmdW5jdGlvbihtdCl7dmFyIGJ0LGhuLG9uLGNlPVtdLGR0PS0xLFdlPTAsTXQ9VGUubGVuZ3RoO2ZvcihtdCBpbnN0YW5jZW9mIERhdGV8fChtdD1uZXcgRGF0ZSgrbXQpKTsrK2R0PE10OykzNz09PVRlLmNoYXJDb2RlQXQoZHQpJiYoY2UucHVzaChUZS5zbGljZShXZSxkdCkpLG51bGwhPShobj10Y2VbYnQ9VGUuY2hhckF0KCsrZHQpXSk/YnQ9VGUuY2hhckF0KCsrZHQpOmhuPSJlIj09PWJ0PyIgIjoiMCIsKG9uPXh0W2J0XSkmJihidD1vbihtdCxobikpLGNlLnB1c2goYnQpLFdlPWR0KzEpO3JldHVybiBjZS5wdXNoKFRlLnNsaWNlKFdlLGR0KSksY2Uuam9pbigiIil9fWZ1bmN0aW9uIHooVGUseHQpe3JldHVybiBmdW5jdGlvbihtdCl7dmFyIFdlLE10LGNlPWZTKDE5MDAsdm9pZCAwLDEpO2lmKGZlKGNlLFRlLG10Kz0iIiwwKSE9bXQubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGNlKXJldHVybiBuZXcgRGF0ZShjZS5RKTtpZigicyJpbiBjZSlyZXR1cm4gbmV3IERhdGUoMWUzKmNlLnMrKCJMImluIGNlP2NlLkw6MCkpO2lmKHh0JiYhKCJaImluIGNlKSYmKGNlLlo9MCksInAiaW4gY2UmJihjZS5IPWNlLkglMTIrMTIqY2UucCksdm9pZCAwPT09Y2UubSYmKGNlLm09InEiaW4gY2U/Y2UucTowKSwiViJpbiBjZSl7aWYoY2UuVjwxfHxjZS5WPjUzKXJldHVybiBudWxsOyJ3ImluIGNlfHwoY2Uudz0xKSwiWiJpbiBjZT8oTXQ9KFdlPUt6KGZTKGNlLnksMCwxKSkpLmdldFVUQ0RheSgpLFdlPU10PjR8fDA9PT1NdD9EeS5jZWlsKFdlKTpEeShXZSksV2U9ZE8ub2Zmc2V0KFdlLDcqKGNlLlYtMSkpLGNlLnk9V2UuZ2V0VVRDRnVsbFllYXIoKSxjZS5tPVdlLmdldFVUQ01vbnRoKCksY2UuZD1XZS5nZXRVVENEYXRlKCkrKGNlLncrNiklNyk6KE10PShXZT1ReihmUyhjZS55LDAsMSkpKS5nZXREYXkoKSxXZT1NdD40fHwwPT09TXQ/VHkuY2VpbChXZSk6VHkoV2UpLFdlPUV5Lm9mZnNldChXZSw3KihjZS5WLTEpKSxjZS55PVdlLmdldEZ1bGxZZWFyKCksY2UubT1XZS5nZXRNb250aCgpLGNlLmQ9V2UuZ2V0RGF0ZSgpKyhjZS53KzYpJTcpfWVsc2UoIlciaW4gY2V8fCJVImluIGNlKSYmKCJ3ImluIGNlfHwoY2Uudz0idSJpbiBjZT9jZS51JTc6IlciaW4gY2U/MTowKSxNdD0iWiJpbiBjZT9LeihmUyhjZS55LDAsMSkpLmdldFVUQ0RheSgpOlF6KGZTKGNlLnksMCwxKSkuZ2V0RGF5KCksY2UubT0wLGNlLmQ9IlciaW4gY2U/KGNlLncrNiklNys3KmNlLlctKE10KzUpJTc6Y2Uudys3KmNlLlUtKE10KzYpJTcpO3JldHVybiJaImluIGNlPyhjZS5IKz1jZS5aLzEwMHwwLGNlLk0rPWNlLlolMTAwLEt6KGNlKSk6UXooY2UpfX1mdW5jdGlvbiBmZShUZSx4dCxtdCxjZSl7Zm9yKHZhciBidCxobixkdD0wLFdlPXh0Lmxlbmd0aCxNdD1tdC5sZW5ndGg7ZHQ8V2U7KXtpZihjZT49TXQpcmV0dXJuLTE7aWYoMzc9PT0oYnQ9eHQuY2hhckNvZGVBdChkdCsrKSkpe2lmKGJ0PXh0LmNoYXJBdChkdCsrKSwhKGhuPWtbYnQgaW4gdGNlP3h0LmNoYXJBdChkdCsrKTpidF0pfHwoY2U9aG4oVGUsbXQsY2UpKTwwKXJldHVybi0xfWVsc2UgaWYoYnQhPW10LmNoYXJDb2RlQXQoY2UrKykpcmV0dXJuLTF9cmV0dXJuIGNlfXJldHVybiBELng9WihlLEQpLEQuWD1aKGksRCksRC5jPVoodCxEKSxULng9WihlLFQpLFQuWD1aKGksVCksVC5jPVoodCxUKSx7Zm9ybWF0OmZ1bmN0aW9uKFRlKXt2YXIgeHQ9WihUZSs9IiIsRCk7cmV0dXJuIHh0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFRlfSx4dH0scGFyc2U6ZnVuY3Rpb24oVGUpe3ZhciB4dD16KFRlKz0iIiwhMSk7cmV0dXJuIHh0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFRlfSx4dH0sdXRjRm9ybWF0OmZ1bmN0aW9uKFRlKXt2YXIgeHQ9WihUZSs9IiIsVCk7cmV0dXJuIHh0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFRlfSx4dH0sdXRjUGFyc2U6ZnVuY3Rpb24oVGUpe3ZhciB4dD16KFRlKz0iIiwhMCk7cmV0dXJuIHh0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFRlfSx4dH19fSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pLEl5PUF5LmZvcm1hdDt2YXIgdlM9NmU0LHlTPTYwKnZTLGJTPTI0KnlTLCR6PTM2NSpiUztmdW5jdGlvbiBnamUobil7cmV0dXJuIG5ldyBEYXRlKG4pfWZ1bmN0aW9uIF9qZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIERhdGU/K246K25ldyBEYXRlKCtuKX1mdW5jdGlvbiBlaihuLHQsZSxpLHIsbyxzLGEsbCl7dmFyIGM9ZFMoamEsamEpLHU9Yy5pbnZlcnQsZD1jLmRvbWFpbixwPWwoIi4lTCIpLGg9bCgiOiVTIiksZj1sKCIlSTolTSIpLG09bCgiJUkgJXAiKSx4PWwoIiVhICVkIiksZz1sKCIlYiAlZCIpLGI9bCgiJUIiKSxEPWwoIiVZIiksVD1bW3MsMSwxZTNdLFtzLDUsNWUzXSxbcywxNSwxNWUzXSxbcywzMCwzZTRdLFtvLDEsdlNdLFtvLDUsNSp2U10sW28sMTUsMTUqdlNdLFtvLDMwLDMwKnZTXSxbciwxLHlTXSxbciwzLDMqeVNdLFtyLDYsNip5U10sW3IsMTIsMTIqeVNdLFtpLDEsYlNdLFtpLDIsMipiU10sW2UsMSw2MDQ4ZTVdLFt0LDEsMjU5MmU2XSxbdCwzLDc3NzZlNl0sW24sMSwkel1dO2Z1bmN0aW9uIGsoeil7cmV0dXJuKHMoeik8ej9wOm8oeik8ej9oOnIoeik8ej9mOmkoeik8ej9tOnQoeik8ej9lKHopPHo/eDpnOm4oeik8ej9iOkQpKHopfWZ1bmN0aW9uIFooeixmZSx1ZSxoZSl7aWYobnVsbD09eiYmKHo9MTApLCJudW1iZXIiPT10eXBlb2Ygeil7dmFyIHc9TWF0aC5hYnModWUtZmUpL3osRj1CdyhmdW5jdGlvbihxKXtyZXR1cm4gcVsyXX0pLnJpZ2h0KFQsdyk7Rj09PVQubGVuZ3RoPyhoZT12ZChmZS8keix1ZS8keix6KSx6PW4pOkY/KGhlPShGPVRbdy9UW0YtMV1bMl08VFtGXVsyXS93P0YtMTpGXSlbMV0sej1GWzBdKTooaGU9TWF0aC5tYXgodmQoZmUsdWUseiksMSksej1hKX1yZXR1cm4gbnVsbD09aGU/ejp6LmV2ZXJ5KGhlKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oeil7cmV0dXJuIG5ldyBEYXRlKHUoeikpfSxjLmRvbWFpbj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9kKGxTLmNhbGwoeixfamUpKTpkKCkubWFwKGdqZSl9LGMudGlja3M9ZnVuY3Rpb24oeixmZSl7dmFyIHEsdWU9ZCgpLGhlPXVlWzBdLHc9dWVbdWUubGVuZ3RoLTFdLEY9dzxoZTtyZXR1cm4gRiYmKHE9aGUsaGU9dyx3PXEpLHE9KHE9Wih6LGhlLHcsZmUpKT9xLnJhbmdlKGhlLHcrMSk6W10sRj9xLnJldmVyc2UoKTpxfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oeixmZSl7cmV0dXJuIG51bGw9PWZlP2s6bChmZSl9LGMubmljZT1mdW5jdGlvbih6LGZlKXt2YXIgdWU9ZCgpO3JldHVybih6PVooeix1ZVswXSx1ZVt1ZS5sZW5ndGgtMV0sZmUpKT9kKG9PKHVlLHopKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmYoYyxlaihuLHQsZSxpLHIsbyxzLGEsbCkpfSxjfWZ1bmN0aW9uIFJnKCl7cmV0dXJuIHpzLmFwcGx5KGVqKHZwLHF6LEFnLEV5LFd6LEd6LHVPLGFPLEl5KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiBQeShuKXtmb3IodmFyIHQ9bi5sZW5ndGgvNnwwLGU9bmV3IEFycmF5KHQpLGk9MDtpPHQ7KWVbaV09IiMiK24uc2xpY2UoNippLDYqKytpKTtyZXR1cm4gZX1mdW5jdGlvbiBSeShuKXtyZXR1cm4gaXoobltuLmxlbmd0aC0xXSl9dmFyIHRqPVJ5KG5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChQeSkpLG5qPVJ5KG5ldyBBcnJheSgzKS5jb25jYXQoImYwZjBmMGJkYmRiZDYzNjM2MyIsImY3ZjdmN2NjY2NjYzk2OTY5NjUyNTI1MiIsImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNTAwMDAwMCIpLm1hcChQeSkpLGlqPVJ5KG5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChQeSkpO2Z1bmN0aW9uIGZhKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBufX1mdW5jdGlvbiB3Y2Uobil7dGhpcy5fY29udGV4dD1ufWZ1bmN0aW9uIHBPKG4pe3JldHVybiBuZXcgd2NlKG4pfWZ1bmN0aW9uIGhPKG4pe3JldHVybiBuWzBdfWZ1bmN0aW9uIGZPKG4pe3JldHVybiBuWzFdfWZ1bmN0aW9uIHhTKCl7dmFyIG49aE8sdD1mTyxlPWZhKCEwKSxpPW51bGwscj1wTyxvPW51bGw7ZnVuY3Rpb24gcyhhKXt2YXIgbCx1LHAsYz1hLmxlbmd0aCxkPSExO2ZvcihudWxsPT1pJiYobz1yKHA9c1MoKSkpLGw9MDtsPD1jOysrbCkhKGw8YyYmZSh1PWFbbF0sbCxhKSk9PT1kJiYoKGQ9IWQpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGQmJm8ucG9pbnQoK24odSxsLGEpLCt0KHUsbCxhKSk7aWYocClyZXR1cm4gbz1udWxsLHArIiJ8fG51bGx9cmV0dXJuIHMueD1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgYT9hOmZhKCthKSxzKTpufSxzLnk9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGE/YTpmYSgrYSkscyk6dH0scy5kZWZpbmVkPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2E6ZmEoISFhKSxzKTplfSxzLmN1cnZlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWEsbnVsbCE9aSYmKG89cihpKSkscyk6cn0scy5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1hP2k9bz1udWxsOm89cihpPWEpLHMpOml9LHN9ZnVuY3Rpb24gU2NlKG4sdCxlKXtuLl9jb250ZXh0LmJlemllckN1cnZlVG8obi5feDErbi5fayoobi5feDItbi5feDApLG4uX3kxK24uX2sqKG4uX3kyLW4uX3kwKSxuLl94MituLl9rKihuLl94MS10KSxuLl95MituLl9rKihuLl95MS1lKSxuLl94MixuLl95Mil9ZnVuY3Rpb24gbU8obix0KXt0aGlzLl9jb250ZXh0PW4sdGhpcy5faz0oMS10KS82fWZ1bmN0aW9uIEVjZShuLHQpe3RoaXMuX2NvbnRleHQ9bix0aGlzLl9hbHBoYT10fU1hdGgsd2NlLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKG4sdCl7c3dpdGNoKG49K24sdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhuLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKG4sdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHQpfX19LG1PLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpTY2UodGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihuLHQpe3N3aXRjaChuPStuLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8obix0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPW4sdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlNjZSh0aGlzLG4sdCl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9bix0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX0sZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3JldHVybiBuZXcgbU8oaSx0KX1yZXR1cm4gZS50ZW5zaW9uPWZ1bmN0aW9uKGkpe3JldHVybiBuKCtpKX0sZX0oMCksRWNlLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKG4sdCl7aWYobj0rbix0PSt0LHRoaXMuX3BvaW50KXt2YXIgZT10aGlzLl94Mi1uLGk9dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGUqZStpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8obix0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6IWZ1bmN0aW9uKG4sdCxlKXt2YXIgaT1uLl94MSxyPW4uX3kxLG89bi5feDIscz1uLl95MjtpZihuLl9sMDFfYT4xZS0xMil7dmFyIGE9MipuLl9sMDFfMmErMypuLl9sMDFfYSpuLl9sMTJfYStuLl9sMTJfMmEsbD0zKm4uX2wwMV9hKihuLl9sMDFfYStuLl9sMTJfYSk7aT0oaSphLW4uX3gwKm4uX2wxMl8yYStuLl94MipuLl9sMDFfMmEpL2wscj0ociphLW4uX3kwKm4uX2wxMl8yYStuLl95MipuLl9sMDFfMmEpL2x9aWYobi5fbDIzX2E+MWUtMTIpe3ZhciBjPTIqbi5fbDIzXzJhKzMqbi5fbDIzX2Eqbi5fbDEyX2Erbi5fbDEyXzJhLHU9MypuLl9sMjNfYSoobi5fbDIzX2Erbi5fbDEyX2EpO289KG8qYytuLl94MSpuLl9sMjNfMmEtdCpuLl9sMTJfMmEpL3Uscz0ocypjK24uX3kxKm4uX2wyM18yYS1lKm4uX2wxMl8yYSkvdX1uLl9jb250ZXh0LmJlemllckN1cnZlVG8oaSxyLG8scyxuLl94MixuLl95Mil9KHRoaXMsbix0KX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9bix0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIHNqPWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXtyZXR1cm4gdD9uZXcgRWNlKGksdCk6bmV3IG1PKGksMCl9cmV0dXJuIGUuYWxwaGE9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oK2kpfSxlfSguNSk7ZnVuY3Rpb24gYWooKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBPeShuKXtuLlU9bi5DPW4uTD1uLlI9bi5QPW4uTj1udWxsfWZ1bmN0aW9uIENTKG4sdCl7dmFyIGU9dCxpPXQuUixyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5SPWkuTCxlLlImJihlLlIuVT1lKSxpLkw9ZX1mdW5jdGlvbiBNUyhuLHQpe3ZhciBlPXQsaT10Lkwscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuTD1pLlIsZS5MJiYoZS5MLlU9ZSksaS5SPWV9ZnVuY3Rpb24gVGNlKG4pe2Zvcig7bi5MOyluPW4uTDtyZXR1cm4gbn1hai5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmFqLGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49VGNlKHRoaXMuXyksdC5QPW51bGwsdC5OPW4sbi5QPW4uTD10LGU9bik6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxlPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPWUsdC5DPSEwLG49dDtlJiZlLkM7KWU9PT0oaT1lLlUpLkw/KHI9aS5SKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoQ1ModGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsTVModGhpcyxpKSk6KHI9aS5MKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5MJiYoTVModGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsQ1ModGhpcyxpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciBlLG8scyx0PW4uVSxpPW4uTCxyPW4uUjtpZihvPWk/cj9UY2Uocik6aTpyLHQ/dC5MPT09bj90Lkw9bzp0LlI9bzp0aGlzLl89byxpJiZyPyhzPW8uQyxvLkM9bi5DLG8uTD1pLGkuVT1vLG8hPT1yPyh0PW8uVSxvLlU9bi5VLHQuTD1uPW8uUixvLlI9cixyLlU9byk6KG8uVT10LHQ9byxuPW8uUikpOihzPW4uQyxuPW8pLG4mJihuLlU9dCksIXMpe2lmKG4mJm4uQylyZXR1cm4gdm9pZChuLkM9ITEpO2Rve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PXQuTCl7aWYoKGU9dC5SKS5DJiYoZS5DPSExLHQuQz0hMCxDUyh0aGlzLHQpLGU9dC5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuUnx8IWUuUi5DKSYmKGUuTC5DPSExLGUuQz0hMCxNUyh0aGlzLGUpLGU9dC5SKSxlLkM9dC5DLHQuQz1lLlIuQz0hMSxDUyh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPXQuTCkuQyYmKGUuQz0hMSx0LkM9ITAsTVModGhpcyx0KSxlPXQuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLkx8fCFlLkwuQykmJihlLlIuQz0hMSxlLkM9ITAsQ1ModGhpcyxlKSxlPXQuTCksZS5DPXQuQyx0LkM9ZS5MLkM9ITEsTVModGhpcyx0KSxuPXRoaXMuXzticmVha31lLkM9ITAsbj10LHQ9dC5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19O3ZhciBsaj1hajtmdW5jdGlvbiBreShuLHQsZSxpKXt2YXIgcj1bbnVsbCxudWxsXSxvPWRzLnB1c2gociktMTtyZXR1cm4gci5sZWZ0PW4sci5yaWdodD10LGUmJndTKHIsbix0LGUpLGkmJndTKHIsdCxuLGkpLG1hW24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLG1hW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLHJ9ZnVuY3Rpb24gRnkobix0LGUpe3ZhciBpPVt0LGVdO3JldHVybiBpLmxlZnQ9bixpfWZ1bmN0aW9uIHdTKG4sdCxlLGkpe25bMF18fG5bMV0/bi5sZWZ0PT09ZT9uWzFdPWk6blswXT1pOihuWzBdPWksbi5sZWZ0PXQsbi5yaWdodD1lKX1mdW5jdGlvbiB4amUobix0LGUsaSxyKXt2YXIgbSxvPW5bMF0scz1uWzFdLGE9b1swXSxsPW9bMV0sZD0wLHA9MSxoPXNbMF0tYSxmPXNbMV0tbDtpZihtPXQtYSxofHwhKG0+MCkpe2lmKG0vPWgsaDwwKXtpZihtPGQpcmV0dXJuO208cCYmKHA9bSl9ZWxzZSBpZihoPjApe2lmKG0+cClyZXR1cm47bT5kJiYoZD1tKX1pZihtPWktYSxofHwhKG08MCkpe2lmKG0vPWgsaDwwKXtpZihtPnApcmV0dXJuO20+ZCYmKGQ9bSl9ZWxzZSBpZihoPjApe2lmKG08ZClyZXR1cm47bTxwJiYocD1tKX1pZihtPWUtbCxmfHwhKG0+MCkpe2lmKG0vPWYsZjwwKXtpZihtPGQpcmV0dXJuO208cCYmKHA9bSl9ZWxzZSBpZihmPjApe2lmKG0+cClyZXR1cm47bT5kJiYoZD1tKX1pZihtPXItbCxmfHwhKG08MCkpe2lmKG0vPWYsZjwwKXtpZihtPnApcmV0dXJuO20+ZCYmKGQ9bSl9ZWxzZSBpZihmPjApe2lmKG08ZClyZXR1cm47bTxwJiYocD1tKX1yZXR1cm4hKGQ+MCkmJiEocDwxKXx8KGQ+MCYmKG5bMF09W2ErZCpoLGwrZCpmXSkscDwxJiYoblsxXT1bYStwKmgsbCtwKmZdKSksITB9fX19fWZ1bmN0aW9uIENqZShuLHQsZSxpLHIpe3ZhciBvPW5bMV07aWYobylyZXR1cm4hMDt2YXIgbSx4LHM9blswXSxhPW4ubGVmdCxsPW4ucmlnaHQsYz1hWzBdLHU9YVsxXSxkPWxbMF0scD1sWzFdLGg9KGMrZCkvMjtpZihwPT09dSl7aWYoaDx0fHxoPj1pKXJldHVybjtpZihjPmQpe2lmKHMpe2lmKHNbMV0+PXIpcmV0dXJufWVsc2Ugcz1baCxlXTtvPVtoLHJdfWVsc2V7aWYocyl7aWYoc1sxXTxlKXJldHVybn1lbHNlIHM9W2gscl07bz1baCxlXX19ZWxzZSBpZih4PSh1K3ApLzItKG09KGMtZCkvKHAtdSkpKmgsbTwtMXx8bT4xKWlmKGM+ZCl7aWYocyl7aWYoc1sxXT49cilyZXR1cm59ZWxzZSBzPVsoZS14KS9tLGVdO289WyhyLXgpL20scl19ZWxzZXtpZihzKXtpZihzWzFdPGUpcmV0dXJufWVsc2Ugcz1bKHIteCkvbSxyXTtvPVsoZS14KS9tLGVdfWVsc2UgaWYodTxwKXtpZihzKXtpZihzWzBdPj1pKXJldHVybn1lbHNlIHM9W3QsbSp0K3hdO289W2ksbSppK3hdfWVsc2V7aWYocyl7aWYoc1swXTx0KXJldHVybn1lbHNlIHM9W2ksbSppK3hdO289W3QsbSp0K3hdfXJldHVybiBuWzBdPXMsblsxXT1vLCEwfWZ1bmN0aW9uIE1qZShuLHQpe3ZhciBlPW4uc2l0ZSxpPXQubGVmdCxyPXQucmlnaHQ7cmV0dXJuIGU9PT1yJiYocj1pLGk9ZSkscj9NYXRoLmF0YW4yKHJbMV0taVsxXSxyWzBdLWlbMF0pOihlPT09aT8oaT10WzFdLHI9dFswXSk6KGk9dFswXSxyPXRbMV0pLE1hdGguYXRhbjIoaVswXS1yWzBdLHJbMV0taVsxXSkpfWZ1bmN0aW9uIGNqKG4sdCl7cmV0dXJuIHRbKyh0LmxlZnQhPT1uLnNpdGUpXX1mdW5jdGlvbiB3amUobix0KXtyZXR1cm4gdFsrKHQubGVmdD09PW4uc2l0ZSldfXZhciBnTyxSY2U9W107ZnVuY3Rpb24gU2plKCl7T3kodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIE9nKG4pe3ZhciB0PW4uUCxlPW4uTjtpZih0JiZlKXt2YXIgaT10LnNpdGUscj1uLnNpdGUsbz1lLnNpdGU7aWYoaSE9PW8pe3ZhciBzPXJbMF0sYT1yWzFdLGw9aVswXS1zLGM9aVsxXS1hLHU9b1swXS1zLGQ9b1sxXS1hLHA9MioobCpkLWMqdSk7aWYoIShwPj0tT2NlKSl7dmFyIGg9bCpsK2MqYyxmPXUqdStkKmQsbT0oZCpoLWMqZikvcCx4PShsKmYtdSpoKS9wLGc9UmNlLnBvcCgpfHxuZXcgU2plO2cuYXJjPW4sZy5zaXRlPXIsZy54PW0rcyxnLnk9KGcuY3k9eCthKStNYXRoLnNxcnQobSptK3gqeCksbi5jaXJjbGU9Zztmb3IodmFyIGI9bnVsbCxEPU55Ll87RDspaWYoZy55PEQueXx8Zy55PT09RC55JiZnLng8PUQueCl7aWYoIUQuTCl7Yj1ELlA7YnJlYWt9RD1ELkx9ZWxzZXtpZighRC5SKXtiPUQ7YnJlYWt9RD1ELlJ9TnkuaW5zZXJ0KGIsZyksYnx8KGdPPWcpfX19fWZ1bmN0aW9uIGtnKG4pe3ZhciB0PW4uY2lyY2xlO3QmJih0LlB8fChnTz10Lk4pLE55LnJlbW92ZSh0KSxSY2UucHVzaCh0KSxPeSh0KSxuLmNpcmNsZT1udWxsKX12YXIgRmNlPVtdO2Z1bmN0aW9uIEVqZSgpe095KHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBrY2Uobil7dmFyIHQ9RmNlLnBvcCgpfHxuZXcgRWplO3JldHVybiB0LnNpdGU9bix0fWZ1bmN0aW9uIHVqKG4pe2tnKG4pLEZnLnJlbW92ZShuKSxGY2UucHVzaChuKSxPeShuKX1mdW5jdGlvbiBOY2Uobil7dmFyIHQ9bi5jaXJjbGUsZT10LngsaT10LmN5LHI9W2UsaV0sbz1uLlAscz1uLk4sYT1bbl07dWoobik7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKGUtbC5jaXJjbGUueCk8cHImJk1hdGguYWJzKGktbC5jaXJjbGUuY3kpPHByOylvPWwuUCxhLnVuc2hpZnQobCksdWoobCksbD1vO2EudW5zaGlmdChsKSxrZyhsKTtmb3IodmFyIGM9cztjLmNpcmNsZSYmTWF0aC5hYnMoZS1jLmNpcmNsZS54KTxwciYmTWF0aC5hYnMoaS1jLmNpcmNsZS5jeSk8cHI7KXM9Yy5OLGEucHVzaChjKSx1aihjKSxjPXM7YS5wdXNoKGMpLGtnKGMpO3ZhciBkLHU9YS5sZW5ndGg7Zm9yKGQ9MTtkPHU7KytkKXdTKChjPWFbZF0pLmVkZ2UsKGw9YVtkLTFdKS5zaXRlLGMuc2l0ZSxyKTsoYz1hW3UtMV0pLmVkZ2U9a3koKGw9YVswXSkuc2l0ZSxjLnNpdGUsbnVsbCxyKSxPZyhsKSxPZyhjKX1mdW5jdGlvbiBMY2Uobil7Zm9yKHZhciBpLHIsbyxzLHQ9blswXSxlPW5bMV0sYT1GZy5fO2E7KWlmKChvPUJjZShhLGUpLXQpPnByKWE9YS5MO2Vsc2V7aWYoISgocz10LVRqZShhLGUpKT5wcikpe28+LXByPyhpPWEuUCxyPWEpOnM+LXByPyhpPWEscj1hLk4pOmk9cj1hO2JyZWFrfWlmKCFhLlIpe2k9YTticmVha31hPWEuUn0hZnVuY3Rpb24obil7bWFbbi5pbmRleF09e3NpdGU6bixoYWxmZWRnZXM6W119fShuKTt2YXIgbD1rY2Uobik7aWYoRmcuaW5zZXJ0KGksbCksaXx8cil7aWYoaT09PXIpcmV0dXJuIGtnKGkpLHI9a2NlKGkuc2l0ZSksRmcuaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1reShpLnNpdGUsbC5zaXRlKSxPZyhpKSx2b2lkIE9nKHIpO2lmKCFyKXJldHVybiB2b2lkKGwuZWRnZT1reShpLnNpdGUsbC5zaXRlKSk7a2coaSksa2cocik7dmFyIGM9aS5zaXRlLHU9Y1swXSxkPWNbMV0scD1uWzBdLXUsaD1uWzFdLWQsZj1yLnNpdGUsbT1mWzBdLXUseD1mWzFdLWQsZz0yKihwKngtaCptKSxiPXAqcCtoKmgsRD1tKm0reCp4LFQ9Wyh4KmItaCpEKS9nK3UsKHAqRC1tKmIpL2crZF07d1Moci5lZGdlLGMsZixUKSxsLmVkZ2U9a3koYyxuLG51bGwsVCksci5lZGdlPWt5KG4sZixudWxsLFQpLE9nKGkpLE9nKHIpfX1mdW5jdGlvbiBCY2Uobix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxvPXItdDtpZighbylyZXR1cm4gaTt2YXIgcz1uLlA7aWYoIXMpcmV0dXJuLTEvMDt2YXIgYT0oZT1zLnNpdGUpWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgdT1hLWksZD0xL28tMS9jLHA9dS9jO3JldHVybiBkPygtcCtNYXRoLnNxcnQocCpwLTIqZCoodSp1LygtMipjKS1sK2MvMityLW8vMikpKS9kK2k6KGkrYSkvMn1mdW5jdGlvbiBUamUobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gQmNlKGUsdCk7dmFyIGk9bi5zaXRlO3JldHVybiBpWzFdPT09dD9pWzBdOjEvMH12YXIgRmcsbWEsTnksZHMscHI9MWUtNixPY2U9MWUtMTI7ZnVuY3Rpb24gRGplKG4sdCxlKXtyZXR1cm4oblswXS1lWzBdKSoodFsxXS1uWzFdKS0oblswXS10WzBdKSooZVsxXS1uWzFdKX1mdW5jdGlvbiBBamUobix0KXtyZXR1cm4gdFsxXS1uWzFdfHx0WzBdLW5bMF19ZnVuY3Rpb24gX08obix0KXt2YXIgaSxyLG8sZT1uLnNvcnQoQWplKS5wb3AoKTtmb3IoZHM9W10sbWE9bmV3IEFycmF5KG4ubGVuZ3RoKSxGZz1uZXcgbGosTnk9bmV3IGxqOzspaWYobz1nTyxlJiYoIW98fGVbMV08by55fHxlWzFdPT09by55JiZlWzBdPG8ueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJihMY2UoZSksaT1lWzBdLHI9ZVsxXSksZT1uLnBvcCgpO2Vsc2V7aWYoIW8pYnJlYWs7TmNlKG8uYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgZSxpLHIsbyxuPTAsdD1tYS5sZW5ndGg7bjx0OysrbilpZigoZT1tYVtuXSkmJihvPShpPWUuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgcz1uZXcgQXJyYXkobyksYT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPG87KytyKXNbcl09cixhW3JdPU1qZShlLGRzW2lbcl1dKTtmb3Iocy5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGFbY10tYVtsXX0pLHI9MDtyPG87KytyKWFbcl09aVtzW3JdXTtmb3Iocj0wO3I8bzsrK3IpaVtyXT1hW3JdfX0oKSx0KXt2YXIgcz0rdFswXVswXSxhPSt0WzBdWzFdLGw9K3RbMV1bMF0sYz0rdFsxXVsxXTsoZnVuY3Rpb24obix0LGUsaSl7Zm9yKHZhciBvLHI9ZHMubGVuZ3RoO3ItLTspQ2plKG89ZHNbcl0sbix0LGUsaSkmJnhqZShvLG4sdCxlLGkpJiYoTWF0aC5hYnMob1swXVswXS1vWzFdWzBdKT5wcnx8TWF0aC5hYnMob1swXVsxXS1vWzFdWzFdKT5wcil8fGRlbGV0ZSBkc1tyXX0pKHMsYSxsLGMpLGZ1bmN0aW9uKG4sdCxlLGkpe3ZhciBvLHMsYSxsLGMsdSxkLHAsaCxmLG0seCxyPW1hLmxlbmd0aCxnPSEwO2ZvcihvPTA7bzxyOysrbylpZihzPW1hW29dKXtmb3IoYT1zLnNpdGUsbD0oYz1zLmhhbGZlZGdlcykubGVuZ3RoO2wtLTspZHNbY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspbT0oZj13amUocyxkc1tjW2xdXSkpWzBdLHg9ZlsxXSxwPShkPWNqKHMsZHNbY1srK2wldV1dKSlbMF0saD1kWzFdLChNYXRoLmFicyhtLXApPnByfHxNYXRoLmFicyh4LWgpPnByKSYmKGMuc3BsaWNlKGwsMCxkcy5wdXNoKEZ5KGEsZixNYXRoLmFicyhtLW4pPHByJiZpLXg+cHI/W24sTWF0aC5hYnMocC1uKTxwcj9oOmldOk1hdGguYWJzKHgtaSk8cHImJmUtbT5wcj9bTWF0aC5hYnMoaC1pKTxwcj9wOmUsaV06TWF0aC5hYnMobS1lKTxwciYmeC10PnByP1tlLE1hdGguYWJzKHAtZSk8cHI/aDp0XTpNYXRoLmFicyh4LXQpPHByJiZtLW4+cHI/W01hdGguYWJzKGgtdCk8cHI/cDpuLHRdOm51bGwpKS0xKSwrK3UpO3UmJihnPSExKX1pZihnKXt2YXIgYixELFQsaz0xLzA7Zm9yKG89MCxnPW51bGw7bzxyOysrbykocz1tYVtvXSkmJihUPShiPShhPXMuc2l0ZSlbMF0tbikqYisoRD1hWzFdLXQpKkQpPGsmJihrPVQsZz1zKTtpZihnKXt2YXIgWj1bbix0XSx6PVtuLGldLGZlPVtlLGldLHVlPVtlLHRdO2cuaGFsZmVkZ2VzLnB1c2goZHMucHVzaChGeShhPWcuc2l0ZSxaLHopKS0xLGRzLnB1c2goRnkoYSx6LGZlKSktMSxkcy5wdXNoKEZ5KGEsZmUsdWUpKS0xLGRzLnB1c2goRnkoYSx1ZSxaKSktMSl9fWZvcihvPTA7bzxyOysrbykocz1tYVtvXSkmJihzLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBtYVtvXSl9KHMsYSxsLGMpfXRoaXMuZWRnZXM9ZHMsdGhpcy5jZWxscz1tYSxGZz1OeT1kcz1tYT1udWxsfWZ1bmN0aW9uIE5nKG4sdCxlKXt0aGlzLms9bix0aGlzLng9dCx0aGlzLnk9ZX1fTy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9PLHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBjaih0LG5baV0pfSk7cmV0dXJuIGUuZGF0YT10LnNpdGUuZGF0YSxlfSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciBuPVtdLHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGUsaSl7aWYoYT0obz1lLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgbyxhLGwscj1lLnNpdGUscz0tMSxjPXRbb1thLTFdXSx1PWMubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQ7KytzPGE7KWw9dSx1PShjPXRbb1tzXV0pLmxlZnQ9PT1yP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJmk8bC5pbmRleCYmaTx1LmluZGV4JiZEamUocixsLHUpPDAmJm4ucHVzaChbci5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLG59LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybntzb3VyY2U6bi5sZWZ0LmRhdGEsdGFyZ2V0Om4ucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihuLHQsZSl7Zm9yKHZhciByLGEsaT10aGlzLG89aS5fZm91bmR8fDAscz1pLmNlbGxzLmxlbmd0aDshKGE9aS5jZWxsc1tvXSk7KWlmKCsrbz49cylyZXR1cm4gbnVsbDt2YXIgbD1uLWEuc2l0ZVswXSxjPXQtYS5zaXRlWzFdLHU9bCpsK2MqYztkb3thPWkuY2VsbHNbcj1vXSxvPW51bGwsYS5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgcD1pLmVkZ2VzW2RdLGg9cC5sZWZ0O2lmKGghPT1hLnNpdGUmJmh8fChoPXAucmlnaHQpKXt2YXIgZj1uLWhbMF0sbT10LWhbMV0seD1mKmYrbSptO3g8dSYmKHU9eCxvPWguaW5kZXgpfX0pfXdoaWxlKG51bGwhPT1vKTtyZXR1cm4gaS5fZm91bmQ9cixudWxsPT1lfHx1PD1lKmU/YS5zaXRlOm51bGx9fSxOZy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk5nLHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiAxPT09bj90aGlzOm5ldyBOZyh0aGlzLmsqbix0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIDA9PT1uJjA9PT10P3RoaXM6bmV3IE5nKHRoaXMuayx0aGlzLngrdGhpcy5rKm4sdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24obil7cmV0dXJuW25bMF0qdGhpcy5rK3RoaXMueCxuWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihuKXtyZXR1cm5bKG5bMF0tdGhpcy54KS90aGlzLmssKG5bMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sbmV3IE5nKDEsMCwwKTt2YXIgemNlPXhvKCIuMn5lIiksSWplPXhvKCIuNH5yIiksVmNlPXhvKCIsfiIpO2Z1bmN0aW9uIEhjZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlNHx8dDwuMDAxP3pjZShuKTpJamUobil9dmFyIHlwPXtmb3JtYXRUaWNrOkhjZSxmb3JtYXRTaG9ydDpIY2UsZm9ybWF0UmVhZGFibGUobil7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlNHx8dDwuMDAxP3pjZShuKTpWY2Uobil9LGZvcm1hdExvbmc6VmNlfSxQamU9bmV3IEludGwuTnVtYmVyRm9ybWF0KHZvaWQgMCx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjN9KTtmdW5jdGlvbiB2TyhuKXtyZXR1cm4gUGplLmZvcm1hdChuKX12YXIgTWQ9e2Zvcm1hdFRpY2s6dk8sZm9ybWF0U2hvcnQ6dk8sZm9ybWF0UmVhZGFibGU6dk8sZm9ybWF0TG9uZzp2T30sUmplPXhvKCIwLjN+cyIpLE9qZT14bygiLC4zfmYiKTtmdW5jdGlvbiB5TyhuKXtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49MWU0fHx0PC4wMDE/UmplKG4pOk9qZShuKX12YXIgamNlPXtmb3JtYXRUaWNrOnlPLGZvcm1hdFNob3J0OnlPLGZvcm1hdFJlYWRhYmxlOnlPLGZvcm1hdExvbmc6eU99LGdqPTM2ZTUsTHk9eG8oIi40fiIpO2Z1bmN0aW9uIGJPKG4pe2lmKDA9PT1uKXJldHVybiIwIjtsZXQgdD1NYXRoLnNpZ24obik+MD8iIjoiLSIsZT1NYXRoLmFicyhuKTtyZXR1cm4gdCs9ZTwxZTM/YCR7THkoZSl9IG1zYDplPDZlND9gJHtMeShlLzFlMyl9IHNlY2A6ZTxnaj9gJHtMeShlLzZlNCl9IG1pbmA6ZTw4NjRlNT9gJHtMeShlL2dqKX0gaHJgOmU8MzE1MzZlNj9gJHtMeShlLzg2NGU1KX0gZGF5YDpgJHtMeShlLzMxNTM2ZTYpfSB5cmAsdH12YXIgaGosU1M9e2Zvcm1hdFRpY2s6Yk8sZm9ybWF0U2hvcnQ6Yk8sZm9ybWF0UmVhZGFibGU6Yk8sZm9ybWF0TG9uZzpiT30sa2plPVJnKCkudGlja0Zvcm1hdCgpLEdjZT17Zm9ybWF0VGljazpuPT5ramUobmV3IERhdGUobikpLGZvcm1hdFNob3J0Om49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKGhqLHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSksZm9ybWF0UmVhZGFibGU6bj0+bmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcoaGose3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KSxmb3JtYXRMb25nOm49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKGhqLHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9O2Z1bmN0aW9uIG91KG4pe3N3aXRjaChuKXtjYXNlIE5yLkxJTkVBUjpyZXR1cm4gbmV3IEVTO2Nhc2UgTnIuTE9HMTA6cmV0dXJuIG5ldyBiajtjYXNlIE5yLlRJTUU6cmV0dXJuIG5ldyBUUztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHtufSBub3Qgc3VwcG9ydGVkLmApfX12YXIgRVM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9eXB9dHJhbnNmb3JtKHQsZSxpKXtsZXRbcixvXT10LHM9by1yLFthLGxdPWU7cmV0dXJuIDA9PT1zP2E6KGwtYSkvcyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiAwPT09ZT9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1RbygpLG89LjA1KihpLWUrTnVtYmVyLkVQU0lMT04pLFtzLGFdPXIuZG9tYWluKFtlLW8saStvXSkubmljZSgpLmRvbWFpbigpO3JldHVybltzLGFdfXRpY2tzKHQsZSl7cmV0dXJuIFFvKCkuZG9tYWluKHQpLnRpY2tzKGUpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sYmo9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9eXB9dHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmxvZzEwKHQ+MD90Ok51bWJlci5NSU5fVkFMVUUpfXVudHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmV4cCh0L01hdGguTE9HMTBFKX1mb3J3YXJkKHQsZSxpKXtpZihpPD0wKXJldHVybiBlWzBdO2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLHU9dGhpcy50cmFuc2Zvcm0obyktbCxkPWEtcztyZXR1cm4gaT10aGlzLnRyYW5zZm9ybShpKSxkLyh1K051bWJlci5FUFNJTE9OKSooaS1sKStzfXJldmVyc2UodCxlLGkpe2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLHU9dGhpcy50cmFuc2Zvcm0obyktbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybSh1LyhhLXMrTnVtYmVyLkVQU0lMT04pKihpLXMpK2wpfW5pY2VEb21haW4odCl7bGV0W2UsaV09dDtpZihlPmkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7bGV0IHI9TWF0aC5tYXgoZSxOdW1iZXIuTUlOX1ZBTFVFKSxvPU1hdGgubWF4KGksTnVtYmVyLk1JTl9WQUxVRSk7cmV0dXJuIGk8PTA/W051bWJlci5NSU5fVkFMVUUsMV06W01hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsLjUqciksMipvXX10aWNrcyh0LGUpe2xldCBpPXRbMF08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzBdLHI9dFsxXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMV0sbz1wUygpLmRvbWFpbihbaSxyXSkudGlja3MoZSk7cmV0dXJuIG8ubGVuZ3RoP286dH1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSYmdD4wfX0sVFM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNjYWxlPVJnKCksdGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUdjZX1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0seGo9ITE7aWYoc2VsZi5oYXNPd25Qcm9wZXJ0eSgiV2ViR0wyUmVuZGVyaW5nQ29udGV4dCIpJiZzZWxmLmhhc093blByb3BlcnR5KCJkb2N1bWVudCIpKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiLCgpPT57eGo9ITF9KTtsZXQgdD1uLmdldENvbnRleHQoIndlYmdsMiIpO3hqPUJvb2xlYW4odCl9dmFyIHN1X2NvbnZlcnRSZWN0VG9FeHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fSxzdV9pc1dlYkdsMlN1cHBvcnRlZD1mdW5jdGlvbigpe3JldHVybiB4an0sc3VfaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gc2VsZi5oYXNPd25Qcm9wZXJ0eSgiT2Zmc2NyZWVuQ2FudmFzIil9LHN1X2FyZVBvbHlsaW5lc0VxdWFsPWZ1bmN0aW9uKG4sdCl7aWYobi5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKylpZihuW2VdIT09dFtlXSlyZXR1cm4hMTtyZXR1cm4hMH0sQnk9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnhTY2FsZT1vdShOci5MSU5FQVIpLHRoaXMueVNjYWxlPW91KE5yLkxJTkVBUiksdGhpcy5kb21Db250YWluZXJSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfX1nZXRVcGRhdGVJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMubGFzdFVwZGF0ZWR9dXBkYXRlSWRlbnRpZmllcigpe3RoaXMubGFzdFVwZGF0ZWQrK31pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMH1zZXRYU2NhbGUodCl7dGhpcy54U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXRZU2NhbGUodCl7dGhpcy55U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1nZXRDdXJyZW50Vmlld0JveFJlY3QoKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlld0JveFJlY3R9c2V0Vmlld0JveFJlY3QodCl7dGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXREb21Db250YWluZXJSZWN0KHQpe3RoaXMuZG9tQ29udGFpbmVyUmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxlKXtsZXQgaT10LHI9c3VfY29udmVydFJlY3RUb0V4dGVudCh0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdCk7cmV0dXJuW3RoaXMueFNjYWxlLmZvcndhcmQoci54LFtpLngsaS54K2kud2lkdGhdLGVbMF0pLHRoaXMueVNjYWxlLmZvcndhcmQoci55LHRoaXMuaXNZQXhpc1BvaW50ZWREb3duKCk/W2kueStpLmhlaWdodCxpLnldOltpLnksaS55K2kuaGVpZ2h0XSxlWzFdKV19fTtmdW5jdGlvbiB4TyhuLHQsZSxpKXtsZXR7Y29sb3I6cix2aXNpYmxlOm8sb3BhY2l0eTpzfT1pLGE9bjtyZXR1cm4gYXx8bz8oYT1hPz90KCksYT1lKGEpLGEuc3R5bGUuZGlzcGxheT1vPyIiOiJub25lIixhLnN0eWxlLnN0cm9rZT1yLGEuc3R5bGUub3BhY2l0eT1TdHJpbmcocz8/MSksYSk6bnVsbH12YXIgRWw9MTAwMSxabz0xMDAzLEdzPTEwMDYsX2Y9MTAwOSxXUz0xMDEyLFVnPTEwMTUsbGI9MTAxNixjYj0xMDIwLGdhPTEwMjMsamc9MTAyNixoYj0xMDI3LG9iPTI0MDAsc2I9MjQwMSxiZj0zZTMsV3I9MzAwMSxxUz0zNTA0NCxvaz0zNTA0OCxFcD1jbGFzc3thZGRFdmVudExpc3RlbmVyKHQsZSl7dm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzJiYodGhpcy5fbGlzdGVuZXJzPXt9KTtsZXQgaT10aGlzLl9saXN0ZW5lcnM7dm9pZCAwPT09aVt0XSYmKGlbdF09W10pLC0xPT09aVt0XS5pbmRleE9mKGUpJiZpW3RdLnB1c2goZSl9aGFzRXZlbnRMaXN0ZW5lcih0LGUpe2lmKHZvaWQgMD09PXRoaXMuX2xpc3RlbmVycylyZXR1cm4hMTtsZXQgaT10aGlzLl9saXN0ZW5lcnM7cmV0dXJuIHZvaWQgMCE9PWlbdF0mJi0xIT09aVt0XS5pbmRleE9mKGUpfXJlbW92ZUV2ZW50TGlzdGVuZXIodCxlKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCByPXRoaXMuX2xpc3RlbmVyc1t0XTtpZih2b2lkIDAhPT1yKXtsZXQgbz1yLmluZGV4T2YoZSk7LTEhPT1vJiZyLnNwbGljZShvLDEpfX1kaXNwYXRjaEV2ZW50KHQpe2lmKHZvaWQgMD09PXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IGk9dGhpcy5fbGlzdGVuZXJzW3QudHlwZV07aWYodm9pZCAwIT09aSl7dC50YXJnZXQ9dGhpcztsZXQgcj1pLnNsaWNlKDApO2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7bzxzO28rKylyW29dLmNhbGwodGhpcyx0KTt0LnRhcmdldD1udWxsfX19LE1zPVtdO2ZvcihsZXQgbj0wO248MjU2O24rKylNc1tuXT0objwxNj8iMCI6IiIpK24udG9TdHJpbmcoMTYpO3ZhciBEaj1NYXRoLlBJLzE4MCxoOD0xODAvTWF0aC5QSTtmdW5jdGlvbiBkdSgpe2xldCBuPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLHQ9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsZT00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCxpPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwO3JldHVybihNc1syNTUmbl0rTXNbbj4+OCYyNTVdK01zW24+PjE2JjI1NV0rTXNbbj4+MjQmMjU1XSsiLSIrTXNbMjU1JnRdK01zW3Q+PjgmMjU1XSsiLSIrTXNbdD4+MTYmMTV8NjRdK01zW3Q+PjI0JjI1NV0rIi0iK01zWzYzJmV8MTI4XStNc1tlPj44JjI1NV0rIi0iK01zW2U+PjE2JjI1NV0rTXNbZT4+MjQmMjU1XStNc1syNTUmaV0rTXNbaT4+OCYyNTVdK01zW2k+PjE2JjI1NV0rTXNbaT4+MjQmMjU1XSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBHYShuLHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxuKSl9ZnVuY3Rpb24gQWoobix0LGUpe3JldHVybigxLWUpKm4rZSp0fWZ1bmN0aW9uIHh1ZShuKXtyZXR1cm4gMD09KG4mbi0xKSYmMCE9PW59ZnVuY3Rpb24gSDhlKG4pe3JldHVybiBNYXRoLnBvdygyLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjIpKX12YXIgYXQ9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCl7dGhpcy54PXQsdGhpcy55PWV9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMueH1zZXQgd2lkdGgodCl7dGhpcy54PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnl9c2V0IGhlaWdodCh0KXt0aGlzLnk9dH1zZXQodCxlKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PWUsdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpc31hZGQodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQsZSkpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzfXN1Yih0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxlKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1hcHBseU1hdHJpeDModCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PXJbMF0qZStyWzNdKmkrcls2XSx0aGlzLnk9clsxXSplK3JbNF0qaStyWzddLHRoaXN9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXN9Y2xhbXAodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihlLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihlLnksdGhpcy55KSksdGhpc31jbGFtcFNjYWxhcih0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy55KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55fWNyb3NzKHQpe3JldHVybiB0aGlzLngqdC55LXRoaXMueSp0Lnh9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1hbmdsZSgpe3JldHVybiBNYXRoLmF0YW4yKC10aGlzLnksLXRoaXMueCkrTWF0aC5QSX1kaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VUb1NxdWFyZWQodCl7bGV0IGU9dGhpcy54LXQueCxpPXRoaXMueS10Lnk7cmV0dXJuIGUqZStpKml9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpc31lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLGkpe3JldHVybiB2b2lkIDAhPT1pJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpc31yb3RhdGVBcm91bmQodCxlKXtsZXQgaT1NYXRoLmNvcyhlKSxyPU1hdGguc2luKGUpLG89dGhpcy54LXQueCxzPXRoaXMueS10Lnk7cmV0dXJuIHRoaXMueD1vKmktcypyK3QueCx0aGlzLnk9bypyK3MqaSt0LnksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55fX07YXQucHJvdG90eXBlLmlzVmVjdG9yMj0hMDt2YXIgSm89Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDEsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsaSxyLG8scyxhLGwsYyl7bGV0IHU9dGhpcy5lbGVtZW50cztyZXR1cm4gdVswXT10LHVbMV09cix1WzJdPWEsdVszXT1lLHVbNF09byx1WzVdPWwsdVs2XT1pLHVbN109cyx1WzhdPWMsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDEsMCwwLDAsMSksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzBdPWlbMF0sZVsxXT1pWzFdLGVbMl09aVsyXSxlWzNdPWlbM10sZVs0XT1pWzRdLGVbNV09aVs1XSxlWzZdPWlbNl0sZVs3XT1pWzddLGVbOF09aVs4XSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsaSl7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMSksaS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDIpLHRoaXN9c2V0RnJvbU1hdHJpeDQodCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzRdLGVbOF0sZVsxXSxlWzVdLGVbOV0sZVsyXSxlWzZdLGVbMTBdKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LGUpe2xldCBpPXQuZWxlbWVudHMscj1lLmVsZW1lbnRzLG89dGhpcy5lbGVtZW50cyxzPWlbMF0sYT1pWzNdLGw9aVs2XSxjPWlbMV0sdT1pWzRdLGQ9aVs3XSxwPWlbMl0saD1pWzVdLGY9aVs4XSxtPXJbMF0seD1yWzNdLGc9cls2XSxiPXJbMV0sRD1yWzRdLFQ9cls3XSxrPXJbMl0sWj1yWzVdLHo9cls4XTtyZXR1cm4gb1swXT1zKm0rYSpiK2wqayxvWzNdPXMqeCthKkQrbCpaLG9bNl09cypnK2EqVCtsKnosb1sxXT1jKm0rdSpiK2QqayxvWzRdPWMqeCt1KkQrZCpaLG9bN109YypnK3UqVCtkKnosb1syXT1wKm0raCpiK2YqayxvWzVdPXAqeCtoKkQrZipaLG9bOF09cCpnK2gqVCtmKnosdGhpc31tdWx0aXBseVNjYWxhcih0KXtsZXQgZT10aGlzLmVsZW1lbnRzO3JldHVybiBlWzBdKj10LGVbM10qPXQsZVs2XSo9dCxlWzFdKj10LGVbNF0qPXQsZVs3XSo9dCxlWzJdKj10LGVbNV0qPXQsZVs4XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxvPXRbM10scz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLHU9dFs4XTtyZXR1cm4gZSpzKnUtZSphKmMtaSpvKnUraSphKmwrcipvKmMtcipzKmx9aW52ZXJ0KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxvPXRbM10scz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLHU9dFs4XSxkPXUqcy1hKmMscD1hKmwtdSpvLGg9YypvLXMqbCxmPWUqZCtpKnArcipoO2lmKDA9PT1mKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCk7bGV0IG09MS9mO3JldHVybiB0WzBdPWQqbSx0WzFdPShyKmMtdSppKSptLHRbMl09KGEqaS1yKnMpKm0sdFszXT1wKm0sdFs0XT0odSplLXIqbCkqbSx0WzVdPShyKm8tYSplKSptLHRbNl09aCptLHRbN109KGkqbC1jKmUpKm0sdFs4XT0ocyplLWkqbykqbSx0aGlzfXRyYW5zcG9zZSgpe2xldCB0LGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdD1lWzFdLGVbMV09ZVszXSxlWzNdPXQsdD1lWzJdLGVbMl09ZVs2XSxlWzZdPXQsdD1lWzVdLGVbNV09ZVs3XSxlWzddPXQsdGhpc31nZXROb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeDQodCkuaW52ZXJ0KCkudHJhbnNwb3NlKCl9dHJhbnNwb3NlSW50b0FycmF5KHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbM10sdFsyXT1lWzZdLHRbM109ZVsxXSx0WzRdPWVbNF0sdFs1XT1lWzddLHRbNl09ZVsyXSx0WzddPWVbNV0sdFs4XT1lWzhdLHRoaXN9c2V0VXZUcmFuc2Zvcm0odCxlLGkscixvLHMsYSl7bGV0IGw9TWF0aC5jb3MobyksYz1NYXRoLnNpbihvKTtyZXR1cm4gdGhpcy5zZXQoaSpsLGkqYywtaSoobCpzK2MqYSkrcyt0LC1yKmMscipsLC1yKigtYypzK2wqYSkrYStlLDAsMCwxKSx0aGlzfXNjYWxlKHQsZSl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gaVswXSo9dCxpWzNdKj10LGlbNl0qPXQsaVsxXSo9ZSxpWzRdKj1lLGlbN10qPWUsdGhpc31yb3RhdGUodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KSxyPXRoaXMuZWxlbWVudHMsbz1yWzBdLHM9clszXSxhPXJbNl0sbD1yWzFdLGM9cls0XSx1PXJbN107cmV0dXJuIHJbMF09ZSpvK2kqbCxyWzNdPWUqcytpKmMscls2XT1lKmEraSp1LHJbMV09LWkqbytlKmwscls0XT0taSpzK2UqYyxyWzddPS1pKmErZSp1LHRoaXN9dHJhbnNsYXRlKHQsZSl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gaVswXSs9dCppWzJdLGlbM10rPXQqaVs1XSxpWzZdKz10KmlbOF0saVsxXSs9ZSppWzJdLGlbNF0rPWUqaVs1XSxpWzddKz1lKmlbOF0sdGhpc31lcXVhbHModCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpZihlW3JdIT09aVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5lbGVtZW50c1tpXT10W2krZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gdFtlXT1pWzBdLHRbZSsxXT1pWzFdLHRbZSsyXT1pWzJdLHRbZSszXT1pWzNdLHRbZSs0XT1pWzRdLHRbZSs1XT1pWzVdLHRbZSs2XT1pWzZdLHRbZSs3XT1pWzddLHRbZSs4XT1pWzhdLHR9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX19O2Z1bmN0aW9uIE9kZShuKXtmb3IobGV0IHQ9bi5sZW5ndGgtMTt0Pj0wOy0tdClpZihuW3RdPjY1NTM1KXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFlTKG4pe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLG4pfUpvLnByb3RvdHlwZS5pc01hdHJpeDM9ITA7dmFyIEN1ZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSxhdT17aDowLHM6MCxsOjB9LENPPXtoOjAsczowLGw6MH07ZnVuY3Rpb24gSWoobix0LGUpe3JldHVybiBlPDAmJihlKz0xKSxlPjEmJihlLT0xKSxlPDEvNj9uKzYqKHQtbikqZTplPC41P3Q6ZTwyLzM/bis2Kih0LW4pKigyLzMtZSk6bn1mdW5jdGlvbiB1YihuKXtyZXR1cm4gbjwuMDQwNDU/LjA3NzM5OTM4MDgqbjpNYXRoLnBvdyguOTQ3ODY3Mjk4NipuKy4wNTIxMzI3MDE0LDIuNCl9ZnVuY3Rpb24gUGoobil7cmV0dXJuIG48LjAwMzEzMDg/MTIuOTIqbjoxLjA1NSpNYXRoLnBvdyhuLC40MTY2NiktLjA1NX12YXIgdm49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7cmV0dXJuIHZvaWQgMD09PWkmJnZvaWQgMD09PXI/dGhpcy5zZXQoZSk6dGhpcy5zZXRSR0IoZSxpLHIpfXNldChlKXtyZXR1cm4gZSYmZS5pc0NvbG9yP3RoaXMuY29weShlKToibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5zZXRIZXgoZSk6InN0cmluZyI9PXR5cGVvZiBlJiZ0aGlzLnNldFN0eWxlKGUpLHRoaXN9c2V0U2NhbGFyKGUpe3JldHVybiB0aGlzLnI9ZSx0aGlzLmc9ZSx0aGlzLmI9ZSx0aGlzfXNldEhleChlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLHRoaXMucj0oZT4+MTYmMjU1KS8yNTUsdGhpcy5nPShlPj44JjI1NSkvMjU1LHRoaXMuYj0oMjU1JmUpLzI1NSx0aGlzfXNldFJHQihlLGkscil7cmV0dXJuIHRoaXMucj1lLHRoaXMuZz1pLHRoaXMuYj1yLHRoaXN9c2V0SFNMKGUsaSxyKXtpZihlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuKG4lMSsxKSUxfShlKSxpPUdhKGksMCwxKSxyPUdhKHIsMCwxKSwwPT09aSl0aGlzLnI9dGhpcy5nPXRoaXMuYj1yO2Vsc2V7bGV0IG89cjw9LjU/ciooMStpKTpyK2ktcippLHM9MipyLW87dGhpcy5yPUlqKHMsbyxlKzEvMyksdGhpcy5nPUlqKHMsbyxlKSx0aGlzLmI9SWoocyxvLGUtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZShlKXtmdW5jdGlvbiBpKG8pe3ZvaWQgMCE9PW8mJnBhcnNlRmxvYXQobyk8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrZSsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgcjtpZihyPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKGUpKXtsZXQgbyxhPXJbMl07c3dpdGNoKHJbMV0pe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKG89L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludChvWzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQob1syXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KG9bM10sMTApKS8yNTUsaShvWzRdKSx0aGlzO2lmKG89L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludChvWzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQob1syXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KG9bM10sMTApKS8xMDAsaShvWzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKG89L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpe2xldCBsPXBhcnNlRmxvYXQob1sxXSkvMzYwLGM9cGFyc2VJbnQob1syXSwxMCkvMTAwLHU9cGFyc2VJbnQob1szXSwxMCkvMTAwO3JldHVybiBpKG9bNF0pLHRoaXMuc2V0SFNMKGwsYyx1KX19fWVsc2UgaWYocj0vXlwjKFtBLUZhLWZcZF0rKSQvLmV4ZWMoZSkpe2xldCBvPXJbMV0scz1vLmxlbmd0aDtpZigzPT09cylyZXR1cm4gdGhpcy5yPXBhcnNlSW50KG8uY2hhckF0KDApK28uY2hhckF0KDApLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KG8uY2hhckF0KDEpK28uY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KG8uY2hhckF0KDIpK28uY2hhckF0KDIpLDE2KS8yNTUsdGhpcztpZig2PT09cylyZXR1cm4gdGhpcy5yPXBhcnNlSW50KG8uY2hhckF0KDApK28uY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KG8uY2hhckF0KDIpK28uY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KG8uY2hhckF0KDQpK28uY2hhckF0KDUpLDE2KS8yNTUsdGhpc31yZXR1cm4gZSYmZS5sZW5ndGg+MD90aGlzLnNldENvbG9yTmFtZShlKTp0aGlzfXNldENvbG9yTmFtZShlKXtsZXQgaT1DdWVbZS50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gdm9pZCAwIT09aT90aGlzLnNldEhleChpKTpjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBVbmtub3duIGNvbG9yICIrZSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnIsdGhpcy5nLHRoaXMuYil9Y29weShlKXtyZXR1cm4gdGhpcy5yPWUucix0aGlzLmc9ZS5nLHRoaXMuYj1lLmIsdGhpc31jb3B5U1JHQlRvTGluZWFyKGUpe3JldHVybiB0aGlzLnI9dWIoZS5yKSx0aGlzLmc9dWIoZS5nKSx0aGlzLmI9dWIoZS5iKSx0aGlzfWNvcHlMaW5lYXJUb1NSR0IoZSl7cmV0dXJuIHRoaXMucj1QaihlLnIpLHRoaXMuZz1QaihlLmcpLHRoaXMuYj1QaihlLmIpLHRoaXN9Y29udmVydFNSR0JUb0xpbmVhcigpe3JldHVybiB0aGlzLmNvcHlTUkdCVG9MaW5lYXIodGhpcyksdGhpc31jb252ZXJ0TGluZWFyVG9TUkdCKCl7cmV0dXJuIHRoaXMuY29weUxpbmVhclRvU1JHQih0aGlzKSx0aGlzfWdldEhleCgpe3JldHVybiAyNTUqdGhpcy5yPDwxNl4yNTUqdGhpcy5nPDw4XjI1NSp0aGlzLmI8PDB9Z2V0SGV4U3RyaW5nKCl7cmV0dXJuKCIwMDAwMDAiK3RoaXMuZ2V0SGV4KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNil9Z2V0SFNMKGUpe2xldCBsLGMsaT10aGlzLnIscj10aGlzLmcsbz10aGlzLmIscz1NYXRoLm1heChpLHIsbyksYT1NYXRoLm1pbihpLHIsbyksdT0oYStzKS8yO2lmKGE9PT1zKWw9MCxjPTA7ZWxzZXtsZXQgZD1zLWE7c3dpdGNoKGM9dTw9LjU/ZC8ocythKTpkLygyLXMtYSkscyl7Y2FzZSBpOmw9KHItbykvZCsocjxvPzY6MCk7YnJlYWs7Y2FzZSByOmw9KG8taSkvZCsyO2JyZWFrO2Nhc2UgbzpsPShpLXIpL2QrNH1sLz02fXJldHVybiBlLmg9bCxlLnM9YyxlLmw9dSxlfWdldFN0eWxlKCl7cmV0dXJuInJnYigiKygyNTUqdGhpcy5yfDApKyIsIisoMjU1KnRoaXMuZ3wwKSsiLCIrKDI1NSp0aGlzLmJ8MCkrIikifW9mZnNldEhTTChlLGkscil7cmV0dXJuIHRoaXMuZ2V0SFNMKGF1KSxhdS5oKz1lLGF1LnMrPWksYXUubCs9cix0aGlzLnNldEhTTChhdS5oLGF1LnMsYXUubCksdGhpc31hZGQoZSl7cmV0dXJuIHRoaXMucis9ZS5yLHRoaXMuZys9ZS5nLHRoaXMuYis9ZS5iLHRoaXN9YWRkQ29sb3JzKGUsaSl7cmV0dXJuIHRoaXMucj1lLnIraS5yLHRoaXMuZz1lLmcraS5nLHRoaXMuYj1lLmIraS5iLHRoaXN9YWRkU2NhbGFyKGUpe3JldHVybiB0aGlzLnIrPWUsdGhpcy5nKz1lLHRoaXMuYis9ZSx0aGlzfXN1YihlKXtyZXR1cm4gdGhpcy5yPU1hdGgubWF4KDAsdGhpcy5yLWUuciksdGhpcy5nPU1hdGgubWF4KDAsdGhpcy5nLWUuZyksdGhpcy5iPU1hdGgubWF4KDAsdGhpcy5iLWUuYiksdGhpc31tdWx0aXBseShlKXtyZXR1cm4gdGhpcy5yKj1lLnIsdGhpcy5nKj1lLmcsdGhpcy5iKj1lLmIsdGhpc31tdWx0aXBseVNjYWxhcihlKXtyZXR1cm4gdGhpcy5yKj1lLHRoaXMuZyo9ZSx0aGlzLmIqPWUsdGhpc31sZXJwKGUsaSl7cmV0dXJuIHRoaXMucis9KGUuci10aGlzLnIpKmksdGhpcy5nKz0oZS5nLXRoaXMuZykqaSx0aGlzLmIrPShlLmItdGhpcy5iKSppLHRoaXN9bGVycENvbG9ycyhlLGkscil7cmV0dXJuIHRoaXMucj1lLnIrKGkuci1lLnIpKnIsdGhpcy5nPWUuZysoaS5nLWUuZykqcix0aGlzLmI9ZS5iKyhpLmItZS5iKSpyLHRoaXN9bGVycEhTTChlLGkpe3RoaXMuZ2V0SFNMKGF1KSxlLmdldEhTTChDTyk7bGV0IHI9QWooYXUuaCxDTy5oLGkpLG89QWooYXUucyxDTy5zLGkpLHM9QWooYXUubCxDTy5sLGkpO3JldHVybiB0aGlzLnNldEhTTChyLG8scyksdGhpc31lcXVhbHMoZSl7cmV0dXJuIGUucj09PXRoaXMuciYmZS5nPT09dGhpcy5nJiZlLmI9PT10aGlzLmJ9ZnJvbUFycmF5KGUsaT0wKXtyZXR1cm4gdGhpcy5yPWVbaV0sdGhpcy5nPWVbaSsxXSx0aGlzLmI9ZVtpKzJdLHRoaXN9dG9BcnJheShlPVtdLGk9MCl7cmV0dXJuIGVbaV09dGhpcy5yLGVbaSsxXT10aGlzLmcsZVtpKzJdPXRoaXMuYixlfWZyb21CdWZmZXJBdHRyaWJ1dGUoZSxpKXtyZXR1cm4gdGhpcy5yPWUuZ2V0WChpKSx0aGlzLmc9ZS5nZXRZKGkpLHRoaXMuYj1lLmdldFooaSksITA9PT1lLm5vcm1hbGl6ZWQmJih0aGlzLnIvPTI1NSx0aGlzLmcvPTI1NSx0aGlzLmIvPTI1NSksdGhpc310b0pTT04oKXtyZXR1cm4gdGhpcy5nZXRIZXgoKX19cmV0dXJuIG4uTkFNRVM9Q3VlLG59KSgpO3ZuLnByb3RvdHlwZS5pc0NvbG9yPSEwLHZuLnByb3RvdHlwZS5yPTEsdm4ucHJvdG90eXBlLmc9MSx2bi5wcm90b3R5cGUuYj0xO3ZhciBWeSxUcD1jbGFzc3tzdGF0aWMgZ2V0RGF0YVVSTCh0KXtpZigvXmRhdGE6L2kudGVzdCh0LnNyYyl8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudD4idSIpcmV0dXJuIHQuc3JjO2xldCBlO2lmKHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCllPXQ7ZWxzZXt2b2lkIDA9PT1WeSYmKFZ5PVlTKCJjYW52YXMiKSksVnkud2lkdGg9dC53aWR0aCxWeS5oZWlnaHQ9dC5oZWlnaHQ7bGV0IGk9VnkuZ2V0Q29udGV4dCgiMmQiKTt0IGluc3RhbmNlb2YgSW1hZ2VEYXRhP2kucHV0SW1hZ2VEYXRhKHQsMCwwKTppLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxlPVZ5fXJldHVybiBlLndpZHRoPjIwNDh8fGUuaGVpZ2h0PjIwNDg/KGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5nZXREYXRhVVJMOiBJbWFnZSBjb252ZXJ0ZWQgdG8ganBnIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIix0KSxlLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpKTplLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9c3RhdGljIHNSR0JUb0xpbmVhcih0KXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IGU9WVMoImNhbnZhcyIpO2Uud2lkdGg9dC53aWR0aCxlLmhlaWdodD10LmhlaWdodDtsZXQgaT1lLmdldENvbnRleHQoIjJkIik7aS5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCk7bGV0IHI9aS5nZXRJbWFnZURhdGEoMCwwLHQud2lkdGgsdC5oZWlnaHQpLG89ci5kYXRhO2ZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKW9bc109MjU1KnViKG9bc10vMjU1KTtyZXR1cm4gaS5wdXRJbWFnZURhdGEociwwLDApLGV9aWYodC5kYXRhKXtsZXQgZT10LmRhdGEuc2xpY2UoMCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspZVtpXT1lIGluc3RhbmNlb2YgVWludDhBcnJheXx8ZSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P01hdGguZmxvb3IoMjU1KnViKGVbaV0vMjU1KSk6dWIoZVtpXSk7cmV0dXJue2RhdGE6ZSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5zUkdCVG9MaW5lYXIoKTogVW5zdXBwb3J0ZWQgaW1hZ2UgdHlwZS4gTm8gY29sb3Igc3BhY2UgY29udmVyc2lvbiBhcHBsaWVkLiIpLHR9fSxVOGU9MCxIbz1jbGFzcyBleHRlbmRzIEVwe2NvbnN0cnVjdG9yKHQ9SG8uREVGQVVMVF9JTUFHRSxlPUhvLkRFRkFVTFRfTUFQUElORyxpPUVsLHI9RWwsbz1HcyxzPTEwMDgsYT1nYSxsPV9mLGM9MSx1PWJmKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOlU4ZSsrfSksdGhpcy51dWlkPWR1KCksdGhpcy5uYW1lPSIiLHRoaXMuaW1hZ2U9dCx0aGlzLm1pcG1hcHM9W10sdGhpcy5tYXBwaW5nPWUsdGhpcy53cmFwUz1pLHRoaXMud3JhcFQ9cix0aGlzLm1hZ0ZpbHRlcj1vLHRoaXMubWluRmlsdGVyPXMsdGhpcy5hbmlzb3Ryb3B5PWMsdGhpcy5mb3JtYXQ9YSx0aGlzLmludGVybmFsRm9ybWF0PW51bGwsdGhpcy50eXBlPWwsdGhpcy5vZmZzZXQ9bmV3IGF0KDAsMCksdGhpcy5yZXBlYXQ9bmV3IGF0KDEsMSksdGhpcy5jZW50ZXI9bmV3IGF0KDAsMCksdGhpcy5yb3RhdGlvbj0wLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMCx0aGlzLm1hdHJpeD1uZXcgSm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITAsdGhpcy5wcmVtdWx0aXBseUFscGhhPSExLHRoaXMuZmxpcFk9ITAsdGhpcy51bnBhY2tBbGlnbm1lbnQ9NCx0aGlzLmVuY29kaW5nPXUsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLm9uVXBkYXRlPW51bGwsdGhpcy5pc1JlbmRlclRhcmdldFRleHR1cmU9ITEsdGhpcy5uZWVkc1BNUkVNVXBkYXRlPSExfXVwZGF0ZU1hdHJpeCgpe3RoaXMubWF0cml4LnNldFV2VHJhbnNmb3JtKHRoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueSx0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnksdGhpcy5yb3RhdGlvbix0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnkpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5pbWFnZT10LmltYWdlLHRoaXMubWlwbWFwcz10Lm1pcG1hcHMuc2xpY2UoMCksdGhpcy5tYXBwaW5nPXQubWFwcGluZyx0aGlzLndyYXBTPXQud3JhcFMsdGhpcy53cmFwVD10LndyYXBULHRoaXMubWFnRmlsdGVyPXQubWFnRmlsdGVyLHRoaXMubWluRmlsdGVyPXQubWluRmlsdGVyLHRoaXMuYW5pc290cm9weT10LmFuaXNvdHJvcHksdGhpcy5mb3JtYXQ9dC5mb3JtYXQsdGhpcy5pbnRlcm5hbEZvcm1hdD10LmludGVybmFsRm9ybWF0LHRoaXMudHlwZT10LnR5cGUsdGhpcy5vZmZzZXQuY29weSh0Lm9mZnNldCksdGhpcy5yZXBlYXQuY29weSh0LnJlcGVhdCksdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5nZW5lcmF0ZU1pcG1hcHM9dC5nZW5lcmF0ZU1pcG1hcHMsdGhpcy5wcmVtdWx0aXBseUFscGhhPXQucHJlbXVsdGlwbHlBbHBoYSx0aGlzLmZsaXBZPXQuZmxpcFksdGhpcy51bnBhY2tBbGlnbm1lbnQ9dC51bnBhY2tBbGlnbm1lbnQsdGhpcy5lbmNvZGluZz10LmVuY29kaW5nLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc310b0pTT04odCl7bGV0IGU9dm9pZCAwPT09dHx8InN0cmluZyI9PXR5cGVvZiB0O2lmKCFlJiZ2b2lkIDAhPT10LnRleHR1cmVzW3RoaXMudXVpZF0pcmV0dXJuIHQudGV4dHVyZXNbdGhpcy51dWlkXTtsZXQgaT17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlRleHR1cmUiLGdlbmVyYXRvcjoiVGV4dHVyZS50b0pTT04ifSx1dWlkOnRoaXMudXVpZCxuYW1lOnRoaXMubmFtZSxtYXBwaW5nOnRoaXMubWFwcGluZyxyZXBlYXQ6W3RoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueV0sb2Zmc2V0Olt0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnldLGNlbnRlcjpbdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55XSxyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHdyYXA6W3RoaXMud3JhcFMsdGhpcy53cmFwVF0sZm9ybWF0OnRoaXMuZm9ybWF0LHR5cGU6dGhpcy50eXBlLGVuY29kaW5nOnRoaXMuZW5jb2RpbmcsbWluRmlsdGVyOnRoaXMubWluRmlsdGVyLG1hZ0ZpbHRlcjp0aGlzLm1hZ0ZpbHRlcixhbmlzb3Ryb3B5OnRoaXMuYW5pc290cm9weSxmbGlwWTp0aGlzLmZsaXBZLHByZW11bHRpcGx5QWxwaGE6dGhpcy5wcmVtdWx0aXBseUFscGhhLHVucGFja0FsaWdubWVudDp0aGlzLnVucGFja0FsaWdubWVudH07aWYodm9pZCAwIT09dGhpcy5pbWFnZSl7bGV0IHI9dGhpcy5pbWFnZTtpZih2b2lkIDA9PT1yLnV1aWQmJihyLnV1aWQ9ZHUoKSksIWUmJnZvaWQgMD09PXQuaW1hZ2VzW3IudXVpZF0pe2xldCBvO2lmKEFycmF5LmlzQXJyYXkocikpe289W107Zm9yKGxldCBzPTAsYT1yLmxlbmd0aDtzPGE7cysrKW8ucHVzaChSaihyW3NdLmlzRGF0YVRleHR1cmU/cltzXS5pbWFnZTpyW3NdKSl9ZWxzZSBvPVJqKHIpO3QuaW1hZ2VzW3IudXVpZF09e3V1aWQ6ci51dWlkLHVybDpvfX1pLmltYWdlPXIudXVpZH1yZXR1cm4ie30iIT09SlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkmJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGV8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09aSksaX1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKDMwMCE9PXRoaXMubWFwcGluZylyZXR1cm4gdDtpZih0LmFwcGx5TWF0cml4Myh0aGlzLm1hdHJpeCksdC54PDB8fHQueD4xKXN3aXRjaCh0aGlzLndyYXBTKXtjYXNlIDFlMzp0Lng9dC54LU1hdGguZmxvb3IodC54KTticmVhaztjYXNlIEVsOnQueD10Lng8MD8wOjE7YnJlYWs7Y2FzZSAxMDAyOnQueD0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpP01hdGguY2VpbCh0LngpLXQueDp0LngtTWF0aC5mbG9vcih0LngpfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSAxZTM6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWs7Y2FzZSBFbDp0Lnk9dC55PDA/MDoxO2JyZWFrO2Nhc2UgMTAwMjp0Lnk9MT09PU1hdGguYWJzKE1hdGguZmxvb3IodC55KSUyKT9NYXRoLmNlaWwodC55KS10Lnk6dC55LU1hdGguZmxvb3IodC55KX1yZXR1cm4gdGhpcy5mbGlwWSYmKHQueT0xLXQueSksdH1zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK319O2Z1bmN0aW9uIFJqKG4pe3JldHVybiB0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJm4gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZuIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJm4gaW5zdGFuY2VvZiBJbWFnZUJpdG1hcD9UcC5nZXREYXRhVVJMKG4pOm4uZGF0YT97ZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuLmRhdGEpLHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0LHR5cGU6bi5kYXRhLmNvbnN0cnVjdG9yLm5hbWV9Oihjb25zb2xlLndhcm4oIlRIUkVFLlRleHR1cmU6IFVuYWJsZSB0byBzZXJpYWxpemUgVGV4dHVyZS4iKSx7fSl9SG8uREVGQVVMVF9JTUFHRT12b2lkIDAsSG8uREVGQVVMVF9NQVBQSU5HPTMwMCxIby5wcm90b3R5cGUuaXNUZXh0dXJlPSEwO3ZhciBhcj1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnp9c2V0IHdpZHRoKHQpe3RoaXMuej10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy53fXNldCBoZWlnaHQodCl7dGhpcy53PXR9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzLnc9cix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpcy53PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRXKHQpe3JldHVybiB0aGlzLnc9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpcy53PXZvaWQgMCE9PXQudz90Lnc6MSx0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMudys9dC53LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpcy53Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzLnc9dC53K2Uudyx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzLncrPXQudyplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcy53LT10LncsdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzLnctPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXMudz10LnctZS53LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMudyo9dC53LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXMudyo9dCx0aGlzfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10aGlzLncscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbNF0qaStzWzhdKnIrc1sxMl0qbyx0aGlzLnk9c1sxXSplK3NbNV0qaStzWzldKnIrc1sxM10qbyx0aGlzLno9c1syXSplK3NbNl0qaStzWzEwXSpyK3NbMTRdKm8sdGhpcy53PXNbM10qZStzWzddKmkrc1sxMV0qcitzWzE1XSpvLHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9c2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb24odCl7dGhpcy53PTIqTWF0aC5hY29zKHQudyk7bGV0IGU9TWF0aC5zcXJ0KDEtdC53KnQudyk7cmV0dXJuIGU8MWUtND8odGhpcy54PTEsdGhpcy55PTAsdGhpcy56PTApOih0aGlzLng9dC54L2UsdGhpcy55PXQueS9lLHRoaXMuej10LnovZSksdGhpc31zZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGUsaSxyLG8sbD10LmVsZW1lbnRzLGM9bFswXSx1PWxbNF0sZD1sWzhdLHA9bFsxXSxoPWxbNV0sZj1sWzldLG09bFsyXSx4PWxbNl0sZz1sWzEwXTtpZihNYXRoLmFicyh1LXApPC4wMSYmTWF0aC5hYnMoZC1tKTwuMDEmJk1hdGguYWJzKGYteCk8LjAxKXtpZihNYXRoLmFicyh1K3ApPC4xJiZNYXRoLmFicyhkK20pPC4xJiZNYXRoLmFicyhmK3gpPC4xJiZNYXRoLmFicyhjK2grZy0zKTwuMSlyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCksdGhpcztlPU1hdGguUEk7bGV0IEQ9KGMrMSkvMixUPShoKzEpLzIsaz0oZysxKS8yLFo9KHUrcCkvNCx6PShkK20pLzQsZmU9KGYreCkvNDtyZXR1cm4gRD5UJiZEPms/RDwuMDE/KGk9MCxyPS43MDcxMDY3ODEsbz0uNzA3MTA2NzgxKTooaT1NYXRoLnNxcnQoRCkscj1aL2ksbz16L2kpOlQ+az9UPC4wMT8oaT0uNzA3MTA2NzgxLHI9MCxvPS43MDcxMDY3ODEpOihyPU1hdGguc3FydChUKSxpPVovcixvPWZlL3IpOms8LjAxPyhpPS43MDcxMDY3ODEscj0uNzA3MTA2NzgxLG89MCk6KG89TWF0aC5zcXJ0KGspLGk9ei9vLHI9ZmUvbyksdGhpcy5zZXQoaSxyLG8sZSksdGhpc31sZXQgYj1NYXRoLnNxcnQoKHgtZikqKHgtZikrKGQtbSkqKGQtbSkrKHAtdSkqKHAtdSkpO3JldHVybiBNYXRoLmFicyhiKTwuMDAxJiYoYj0xKSx0aGlzLng9KHgtZikvYix0aGlzLnk9KGQtbSkvYix0aGlzLno9KHAtdSkvYix0aGlzLnc9TWF0aC5hY29zKChjK2grZy0xKS8yKSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpcy53PU1hdGgubWluKHRoaXMudyx0LncpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5tYXgodGhpcy53LHQudyksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodC53LE1hdGgubWluKGUudyx0aGlzLncpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy53KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz1NYXRoLmZsb29yKHRoaXMudyksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXMudz1NYXRoLmNlaWwodGhpcy53KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXMudz1NYXRoLnJvdW5kKHRoaXMudyksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9dGhpcy53PDA/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXMudz0tdGhpcy53LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQueit0aGlzLncqdC53fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpcy53Kz0odC53LXRoaXMudykqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXMuej10LnorKGUuei10LnopKmksdGhpcy53PXQudysoZS53LXQudykqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMueiYmdC53PT09dGhpcy53fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzLnc9dFtlKzNdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0W2UrM109dGhpcy53LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIHZvaWQgMCE9PWkmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXMudz10LmdldFcoZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpcy53PU1hdGgucmFuZG9tKCksdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMueix5aWVsZCB0aGlzLnd9fTthci5wcm90b3R5cGUuaXNWZWN0b3I0PSEwO3ZhciBXYT1jbGFzcyBleHRlbmRzIEVwe2NvbnN0cnVjdG9yKHQsZSxpPXt9KXtzdXBlcigpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9MSx0aGlzLnNjaXNzb3I9bmV3IGFyKDAsMCx0LGUpLHRoaXMuc2Npc3NvclRlc3Q9ITEsdGhpcy52aWV3cG9ydD1uZXcgYXIoMCwwLHQsZSksdGhpcy50ZXh0dXJlPW5ldyBIbyh2b2lkIDAsaS5tYXBwaW5nLGkud3JhcFMsaS53cmFwVCxpLm1hZ0ZpbHRlcixpLm1pbkZpbHRlcixpLmZvcm1hdCxpLnR5cGUsaS5hbmlzb3Ryb3B5LGkuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmltYWdlPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOjF9LHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9dm9pZCAwIT09aS5nZW5lcmF0ZU1pcG1hcHMmJmkuZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5pbnRlcm5hbEZvcm1hdD12b2lkIDAhPT1pLmludGVybmFsRm9ybWF0P2kuaW50ZXJuYWxGb3JtYXQ6bnVsbCx0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PWkubWluRmlsdGVyP2kubWluRmlsdGVyOkdzLHRoaXMuZGVwdGhCdWZmZXI9dm9pZCAwPT09aS5kZXB0aEJ1ZmZlcnx8aS5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dm9pZCAwIT09aS5zdGVuY2lsQnVmZmVyJiZpLnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dm9pZCAwIT09aS5kZXB0aFRleHR1cmU/aS5kZXB0aFRleHR1cmU6bnVsbH1zZXRUZXh0dXJlKHQpe3QuaW1hZ2U9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LGRlcHRoOnRoaXMuZGVwdGh9LHRoaXMudGV4dHVyZT10fXNldFNpemUodCxlLGk9MSl7KHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKSYmKHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aSx0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlLmltYWdlLmRlcHRoPWksdGhpcy5kaXNwb3NlKCkpLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LmNvcHkodC52aWV3cG9ydCksdGhpcy50ZXh0dXJlPXQudGV4dHVyZS5jbG9uZSgpLHRoaXMudGV4dHVyZS5pbWFnZT1PYmplY3QuYXNzaWduKHt9LHQudGV4dHVyZS5pbWFnZSksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07V2EucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJUYXJnZXQ9ITAsY2xhc3MgZXh0ZW5kcyBXYXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKTtsZXQgcj10aGlzLnRleHR1cmU7dGhpcy50ZXh0dXJlPVtdO2ZvcihsZXQgbz0wO288aTtvKyspdGhpcy50ZXh0dXJlW29dPXIuY2xvbmUoKX1zZXRTaXplKHQsZSxpPTEpe2lmKHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLmRlcHRoPWk7Zm9yKGxldCByPTAsbz10aGlzLnRleHR1cmUubGVuZ3RoO3I8bztyKyspdGhpcy50ZXh0dXJlW3JdLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmhlaWdodD1lLHRoaXMudGV4dHVyZVtyXS5pbWFnZS5kZXB0aD1pO3RoaXMuZGlzcG9zZSgpfXJldHVybiB0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxlKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LGUpLHRoaXN9Y29weSh0KXt0aGlzLmRpc3Bvc2UoKSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzLnRleHR1cmUubGVuZ3RoPTA7Zm9yKGxldCBlPTAsaT10LnRleHR1cmUubGVuZ3RoO2U8aTtlKyspdGhpcy50ZXh0dXJlW2VdPXQudGV4dHVyZVtlXS5jbG9uZSgpO3JldHVybiB0aGlzfX0ucHJvdG90eXBlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9ITA7dmFyIFhTPWNsYXNzIGV4dGVuZHMgV2F7Y29uc3RydWN0b3IodCxlLGk9e30pe3N1cGVyKHQsZSxpKSx0aGlzLnNhbXBsZXM9NCx0aGlzLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5PXZvaWQgMD09PWkuaWdub3JlRGVwdGh8fGkuaWdub3JlRGVwdGgsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9dm9pZCAwIT09aS51c2VSZW5kZXJUb1RleHR1cmUmJmkudXNlUmVuZGVyVG9UZXh0dXJlLHRoaXMudXNlUmVuZGVyYnVmZmVyPSExPT09dGhpcy51c2VSZW5kZXJUb1RleHR1cmV9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weS5jYWxsKHRoaXMsdCksdGhpcy5zYW1wbGVzPXQuc2FtcGxlcyx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT10LnVzZVJlbmRlclRvVGV4dHVyZSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10LnVzZVJlbmRlcmJ1ZmZlcix0aGlzfX07WFMucHJvdG90eXBlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD0hMDt2YXIgcXM9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTAscj0xKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXJ9c3RhdGljIHNsZXJwKHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IFN0YXRpYyAuc2xlcnAoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcW0uc2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkgaW5zdGVhZC4iKSxpLnNsZXJwUXVhdGVybmlvbnModCxlLHIpfXN0YXRpYyBzbGVycEZsYXQodCxlLGkscixvLHMsYSl7bGV0IGw9aVtyKzBdLGM9aVtyKzFdLHU9aVtyKzJdLGQ9aVtyKzNdLHA9b1tzKzBdLGg9b1tzKzFdLGY9b1tzKzJdLG09b1tzKzNdO2lmKDA9PT1hKXJldHVybiB0W2UrMF09bCx0W2UrMV09Yyx0W2UrMl09dSx2b2lkKHRbZSszXT1kKTtpZigxPT09YSlyZXR1cm4gdFtlKzBdPXAsdFtlKzFdPWgsdFtlKzJdPWYsdm9pZCh0W2UrM109bSk7aWYoZCE9PW18fGwhPT1wfHxjIT09aHx8dSE9PWYpe2xldCB4PTEtYSxnPWwqcCtjKmgrdSpmK2QqbSxiPWc+PTA/MTotMSxEPTEtZypnO2lmKEQ+TnVtYmVyLkVQU0lMT04pe2xldCBrPU1hdGguc3FydChEKSxaPU1hdGguYXRhbjIoayxnKmIpO3g9TWF0aC5zaW4oeCpaKS9rLGE9TWF0aC5zaW4oYSpaKS9rfWxldCBUPWEqYjtpZihsPWwqeCtwKlQsYz1jKngraCpULHU9dSp4K2YqVCxkPWQqeCttKlQseD09PTEtYSl7bGV0IGs9MS9NYXRoLnNxcnQobCpsK2MqYyt1KnUrZCpkKTtsKj1rLGMqPWssdSo9ayxkKj1rfX10W2VdPWwsdFtlKzFdPWMsdFtlKzJdPXUsdFtlKzNdPWR9c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQsZSxpLHIsbyxzKXtsZXQgYT1pW3JdLGw9aVtyKzFdLGM9aVtyKzJdLHU9aVtyKzNdLGQ9b1tzXSxwPW9bcysxXSxoPW9bcysyXSxmPW9bcyszXTtyZXR1cm4gdFtlXT1hKmYrdSpkK2wqaC1jKnAsdFtlKzFdPWwqZit1KnArYypkLWEqaCx0W2UrMl09YypmK3UqaCthKnAtbCpkLHRbZSszXT11KmYtYSpkLWwqcC1jKmgsdH1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgdygpe3JldHVybiB0aGlzLl93fXNldCB3KHQpe3RoaXMuX3c9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10LngsdGhpcy5feT10LnksdGhpcy5fej10LnosdGhpcy5fdz10LncsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUV1bGVyKHQsZSl7aWYoIXR8fCF0LmlzRXVsZXIpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgaT10Ll94LHI9dC5feSxvPXQuX3oscz10Ll9vcmRlcixhPU1hdGguY29zLGw9TWF0aC5zaW4sYz1hKGkvMiksdT1hKHIvMiksZD1hKG8vMikscD1sKGkvMiksaD1sKHIvMiksZj1sKG8vMik7c3dpdGNoKHMpe2Nhc2UiWFlaIjp0aGlzLl94PXAqdSpkK2MqaCpmLHRoaXMuX3k9YypoKmQtcCp1KmYsdGhpcy5fej1jKnUqZitwKmgqZCx0aGlzLl93PWMqdSpkLXAqaCpmO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PXAqdSpkK2MqaCpmLHRoaXMuX3k9YypoKmQtcCp1KmYsdGhpcy5fej1jKnUqZi1wKmgqZCx0aGlzLl93PWMqdSpkK3AqaCpmO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PXAqdSpkLWMqaCpmLHRoaXMuX3k9YypoKmQrcCp1KmYsdGhpcy5fej1jKnUqZitwKmgqZCx0aGlzLl93PWMqdSpkLXAqaCpmO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl94PXAqdSpkLWMqaCpmLHRoaXMuX3k9YypoKmQrcCp1KmYsdGhpcy5fej1jKnUqZi1wKmgqZCx0aGlzLl93PWMqdSpkK3AqaCpmO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl94PXAqdSpkK2MqaCpmLHRoaXMuX3k9YypoKmQrcCp1KmYsdGhpcy5fej1jKnUqZi1wKmgqZCx0aGlzLl93PWMqdSpkLXAqaCpmO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl94PXAqdSpkLWMqaCpmLHRoaXMuX3k9YypoKmQtcCp1KmYsdGhpcy5fej1jKnUqZitwKmgqZCx0aGlzLl93PWMqdSpkK3AqaCpmO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitzKX1yZXR1cm4hMSE9PWUmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21BeGlzQW5nbGUodCxlKXtsZXQgaT1lLzIscj1NYXRoLnNpbihpKTtyZXR1cm4gdGhpcy5feD10Lngqcix0aGlzLl95PXQueSpyLHRoaXMuX3o9dC56KnIsdGhpcy5fdz1NYXRoLmNvcyhpKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGU9dC5lbGVtZW50cyxpPWVbMF0scj1lWzRdLG89ZVs4XSxzPWVbMV0sYT1lWzVdLGw9ZVs5XSxjPWVbMl0sdT1lWzZdLGQ9ZVsxMF0scD1pK2ErZDtpZihwPjApe2xldCBoPS41L01hdGguc3FydChwKzEpO3RoaXMuX3c9LjI1L2gsdGhpcy5feD0odS1sKSpoLHRoaXMuX3k9KG8tYykqaCx0aGlzLl96PShzLXIpKmh9ZWxzZSBpZihpPmEmJmk+ZCl7bGV0IGg9MipNYXRoLnNxcnQoMStpLWEtZCk7dGhpcy5fdz0odS1sKS9oLHRoaXMuX3g9LjI1KmgsdGhpcy5feT0ocitzKS9oLHRoaXMuX3o9KG8rYykvaH1lbHNlIGlmKGE+ZCl7bGV0IGg9MipNYXRoLnNxcnQoMSthLWktZCk7dGhpcy5fdz0oby1jKS9oLHRoaXMuX3g9KHIrcykvaCx0aGlzLl95PS4yNSpoLHRoaXMuX3o9KGwrdSkvaH1lbHNle2xldCBoPTIqTWF0aC5zcXJ0KDErZC1pLWEpO3RoaXMuX3c9KHMtcikvaCx0aGlzLl94PShvK2MpL2gsdGhpcy5feT0obCt1KS9oLHRoaXMuX3o9LjI1Kmh9cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Vbml0VmVjdG9ycyh0LGUpe2xldCBpPXQuZG90KGUpKzE7cmV0dXJuIGk8TnVtYmVyLkVQU0lMT04/KGk9MCxNYXRoLmFicyh0LngpPk1hdGguYWJzKHQueik/KHRoaXMuX3g9LXQueSx0aGlzLl95PXQueCx0aGlzLl96PTAsdGhpcy5fdz1pKToodGhpcy5feD0wLHRoaXMuX3k9LXQueix0aGlzLl96PXQueSx0aGlzLl93PWkpKToodGhpcy5feD10LnkqZS56LXQueiplLnksdGhpcy5feT10LnoqZS54LXQueCplLnosdGhpcy5fej10LngqZS55LXQueSplLngsdGhpcy5fdz1pKSx0aGlzLm5vcm1hbGl6ZSgpfWFuZ2xlVG8odCl7cmV0dXJuIDIqTWF0aC5hY29zKE1hdGguYWJzKEdhKHRoaXMuZG90KHQpLC0xLDEpKSl9cm90YXRlVG93YXJkcyh0LGUpe2xldCBpPXRoaXMuYW5nbGVUbyh0KTtpZigwPT09aSlyZXR1cm4gdGhpcztsZXQgcj1NYXRoLm1pbigxLGUvaSk7cmV0dXJuIHRoaXMuc2xlcnAodCxyKSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDAsMCwwLDEpfWludmVydCgpe3JldHVybiB0aGlzLmNvbmp1Z2F0ZSgpfWNvbmp1Z2F0ZSgpe3JldHVybiB0aGlzLl94Kj0tMSx0aGlzLl95Kj0tMSx0aGlzLl96Kj0tMSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMuX3gqdC5feCt0aGlzLl95KnQuX3krdGhpcy5feip0Ll96K3RoaXMuX3cqdC5fd31sZW5ndGhTcSgpe3JldHVybiB0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3d9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfW5vcm1hbGl6ZSgpe2xldCB0PXRoaXMubGVuZ3RoKCk7cmV0dXJuIDA9PT10Pyh0aGlzLl94PTAsdGhpcy5feT0wLHRoaXMuX3o9MCx0aGlzLl93PTEpOih0PTEvdCx0aGlzLl94PXRoaXMuX3gqdCx0aGlzLl95PXRoaXMuX3kqdCx0aGlzLl96PXRoaXMuX3oqdCx0aGlzLl93PXRoaXMuX3cqdCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCxlKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHRoaXMpfW11bHRpcGx5UXVhdGVybmlvbnModCxlKXtsZXQgaT10Ll94LHI9dC5feSxvPXQuX3oscz10Ll93LGE9ZS5feCxsPWUuX3ksYz1lLl96LHU9ZS5fdztyZXR1cm4gdGhpcy5feD1pKnUrcyphK3IqYy1vKmwsdGhpcy5feT1yKnUrcypsK28qYS1pKmMsdGhpcy5fej1vKnUrcypjK2kqbC1yKmEsdGhpcy5fdz1zKnUtaSphLXIqbC1vKmMsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnAodCxlKXtpZigwPT09ZSlyZXR1cm4gdGhpcztpZigxPT09ZSlyZXR1cm4gdGhpcy5jb3B5KHQpO2xldCBpPXRoaXMuX3gscj10aGlzLl95LG89dGhpcy5feixzPXRoaXMuX3csYT1zKnQuX3craSp0Ll94K3IqdC5feStvKnQuX3o7aWYoYTwwPyh0aGlzLl93PS10Ll93LHRoaXMuX3g9LXQuX3gsdGhpcy5feT0tdC5feSx0aGlzLl96PS10Ll96LGE9LWEpOnRoaXMuY29weSh0KSxhPj0xKXJldHVybiB0aGlzLl93PXMsdGhpcy5feD1pLHRoaXMuX3k9cix0aGlzLl96PW8sdGhpcztsZXQgbD0xLWEqYTtpZihsPD1OdW1iZXIuRVBTSUxPTil7bGV0IGg9MS1lO3JldHVybiB0aGlzLl93PWgqcytlKnRoaXMuX3csdGhpcy5feD1oKmkrZSp0aGlzLl94LHRoaXMuX3k9aCpyK2UqdGhpcy5feSx0aGlzLl96PWgqbytlKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31sZXQgYz1NYXRoLnNxcnQobCksdT1NYXRoLmF0YW4yKGMsYSksZD1NYXRoLnNpbigoMS1lKSp1KS9jLHA9TWF0aC5zaW4oZSp1KS9jO3JldHVybiB0aGlzLl93PXMqZCt0aGlzLl93KnAsdGhpcy5feD1pKmQrdGhpcy5feCpwLHRoaXMuX3k9cipkK3RoaXMuX3kqcCx0aGlzLl96PW8qZCt0aGlzLl96KnAsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnBRdWF0ZXJuaW9ucyh0LGUsaSl7cmV0dXJuIHRoaXMuY29weSh0KS5zbGVycChlLGkpfXJhbmRvbSgpe2xldCB0PU1hdGgucmFuZG9tKCksZT1NYXRoLnNxcnQoMS10KSxpPU1hdGguc3FydCh0KSxyPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpLG89MipNYXRoLlBJKk1hdGgucmFuZG9tKCk7cmV0dXJuIHRoaXMuc2V0KGUqTWF0aC5jb3MociksaSpNYXRoLnNpbihvKSxpKk1hdGguY29zKG8pLGUqTWF0aC5zaW4ocikpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fdz09PXRoaXMuX3d9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy5feD10W2VdLHRoaXMuX3k9dFtlKzFdLHRoaXMuX3o9dFtlKzJdLHRoaXMuX3c9dFtlKzNdLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMuX3gsdFtlKzFdPXRoaXMuX3ksdFtlKzJdPXRoaXMuX3osdFtlKzNdPXRoaXMuX3csdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMuX3g9dC5nZXRYKGUpLHRoaXMuX3k9dC5nZXRZKGUpLHRoaXMuX3o9dC5nZXRaKGUpLHRoaXMuX3c9dC5nZXRXKGUpLHRoaXN9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O3FzLnByb3RvdHlwZS5pc1F1YXRlcm5pb249ITA7dmFyIGllPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wKXt0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aX1zZXQodCxlLGkpe3JldHVybiB2b2lkIDA9PT1pJiYoaT10aGlzLnopLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpcy56PXQueitlLnosdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXMueis9dC56KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzLno9dC56LWUueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5VmVjdG9ycyh0LGUpKToodGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcyl9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXN9bXVsdGlwbHlWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngqZS54LHRoaXMueT10LnkqZS55LHRoaXMuej10LnoqZS56LHRoaXN9YXBwbHlFdWxlcih0KXtyZXR1cm4gdCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIiksdGhpcy5hcHBseVF1YXRlcm5pb24oTXVlLnNldEZyb21FdWxlcih0KSl9YXBwbHlBeGlzQW5nbGUodCxlKXtyZXR1cm4gdGhpcy5hcHBseVF1YXRlcm5pb24oTXVlLnNldEZyb21BeGlzQW5nbGUodCxlKSl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1szXSppK29bNl0qcix0aGlzLnk9b1sxXSplK29bNF0qaStvWzddKnIsdGhpcy56PW9bMl0qZStvWzVdKmkrb1s4XSpyLHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXgzKHQpLm5vcm1hbGl6ZSgpfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10LmVsZW1lbnRzLHM9MS8ob1szXSplK29bN10qaStvWzExXSpyK29bMTVdKTtyZXR1cm4gdGhpcy54PShvWzBdKmUrb1s0XSppK29bOF0qcitvWzEyXSkqcyx0aGlzLnk9KG9bMV0qZStvWzVdKmkrb1s5XSpyK29bMTNdKSpzLHRoaXMuej0ob1syXSplK29bNl0qaStvWzEwXSpyK29bMTRdKSpzLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQueCxzPXQueSxhPXQueixsPXQudyxjPWwqZStzKnItYSppLHU9bCppK2EqZS1vKnIsZD1sKnIrbyppLXMqZSxwPS1vKmUtcyppLWEqcjtyZXR1cm4gdGhpcy54PWMqbCtwKi1vK3UqLWEtZCotcyx0aGlzLnk9dSpsK3AqLXMrZCotby1jKi1hLHRoaXMuej1kKmwrcCotYStjKi1zLXUqLW8sdGhpc31wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkSW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQucHJvamVjdGlvbk1hdHJpeCl9dW5wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCl9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1s0XSppK29bOF0qcix0aGlzLnk9b1sxXSplK29bNV0qaStvWzldKnIsdGhpcy56PW9bMl0qZStvWzZdKmkrb1sxMF0qcix0aGlzLm5vcm1hbGl6ZSgpfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpcy56Lz10LnosdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnopfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzLno9dC56KyhlLnotdC56KSppLHRoaXN9Y3Jvc3ModCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKHQsZSkpOnRoaXMuY3Jvc3NWZWN0b3JzKHRoaXMsdCl9Y3Jvc3NWZWN0b3JzKHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56LHM9ZS54LGE9ZS55LGw9ZS56O3JldHVybiB0aGlzLng9cipsLW8qYSx0aGlzLnk9bypzLWkqbCx0aGlzLno9aSphLXIqcyx0aGlzfXByb2plY3RPblZlY3Rvcih0KXtsZXQgZT10Lmxlbmd0aFNxKCk7aWYoMD09PWUpcmV0dXJuIHRoaXMuc2V0KDAsMCwwKTtsZXQgaT10LmRvdCh0aGlzKS9lO3JldHVybiB0aGlzLmNvcHkodCkubXVsdGlwbHlTY2FsYXIoaSl9cHJvamVjdE9uUGxhbmUodCl7cmV0dXJuIE9qLmNvcHkodGhpcykucHJvamVjdE9uVmVjdG9yKHQpLHRoaXMuc3ViKE9qKX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihPai5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKDIqdGhpcy5kb3QodCkpKX1hbmdsZVRvKHQpe2xldCBlPU1hdGguc3FydCh0aGlzLmxlbmd0aFNxKCkqdC5sZW5ndGhTcSgpKTtpZigwPT09ZSlyZXR1cm4gTWF0aC5QSS8yO2xldCBpPXRoaXMuZG90KHQpL2U7cmV0dXJuIE1hdGguYWNvcyhHYShpLC0xLDEpKX1kaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VUb1NxdWFyZWQodCl7bGV0IGU9dGhpcy54LXQueCxpPXRoaXMueS10Lnkscj10aGlzLnotdC56O3JldHVybiBlKmUraSppK3Iqcn1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KStNYXRoLmFicyh0aGlzLnotdC56KX1zZXRGcm9tU3BoZXJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21TcGhlcmljYWxDb29yZHModC5yYWRpdXMsdC5waGksdC50aGV0YSl9c2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LGUsaSl7bGV0IHI9TWF0aC5zaW4oZSkqdDtyZXR1cm4gdGhpcy54PXIqTWF0aC5zaW4oaSksdGhpcy55PU1hdGguY29zKGUpKnQsdGhpcy56PXIqTWF0aC5jb3MoaSksdGhpc31zZXRGcm9tQ3lsaW5kcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQucmFkaXVzLHQudGhldGEsdC55KX1zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModCxlLGkpe3JldHVybiB0aGlzLng9dCpNYXRoLnNpbihlKSx0aGlzLnk9aSx0aGlzLno9dCpNYXRoLmNvcyhlKSx0aGlzfXNldEZyb21NYXRyaXhQb3NpdGlvbih0KXtsZXQgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9ZVsxMl0sdGhpcy55PWVbMTNdLHRoaXMuej1lWzE0XSx0aGlzfXNldEZyb21NYXRyaXhTY2FsZSh0KXtsZXQgZT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLHI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIHRoaXMueD1lLHRoaXMueT1pLHRoaXMuej1yLHRoaXN9c2V0RnJvbU1hdHJpeENvbHVtbih0LGUpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLDQqZSl9c2V0RnJvbU1hdHJpeDNDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cywzKmUpfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMuen1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXMuej10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIHZvaWQgMCE9PWkmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXN9cmFuZG9tRGlyZWN0aW9uKCl7bGV0IHQ9MiooTWF0aC5yYW5kb20oKS0uNSksZT1NYXRoLnJhbmRvbSgpKk1hdGguUEkqMixpPU1hdGguc3FydCgxLXQqKjIpO3JldHVybiB0aGlzLng9aSpNYXRoLmNvcyhlKSx0aGlzLnk9aSpNYXRoLnNpbihlKSx0aGlzLno9dCx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56fX07aWUucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgT2o9bmV3IGllLE11ZT1uZXcgcXMsVGw9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaWUoMS8wLDEvMCwxLzApLGU9bmV3IGllKC0xLzAsLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tQXJyYXkodCl7bGV0IGU9MS8wLGk9MS8wLHI9MS8wLG89LTEvMCxzPS0xLzAsYT0tMS8wO2ZvcihsZXQgbD0wLGM9dC5sZW5ndGg7bDxjO2wrPTMpe2xldCB1PXRbbF0sZD10W2wrMV0scD10W2wrMl07dTxlJiYoZT11KSxkPGkmJihpPWQpLHA8ciYmKHI9cCksdT5vJiYobz11KSxkPnMmJihzPWQpLHA+YSYmKGE9cCl9cmV0dXJuIHRoaXMubWluLnNldChlLGksciksdGhpcy5tYXguc2V0KG8scyxhKSx0aGlzfXNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCl7bGV0IGU9MS8wLGk9MS8wLHI9MS8wLG89LTEvMCxzPS0xLzAsYT0tMS8wO2ZvcihsZXQgbD0wLGM9dC5jb3VudDtsPGM7bCsrKXtsZXQgdT10LmdldFgobCksZD10LmdldFkobCkscD10LmdldFoobCk7dTxlJiYoZT11KSxkPGkmJihpPWQpLHA8ciYmKHI9cCksdT5vJiYobz11KSxkPnMmJihzPWQpLHA+YSYmKGE9cCl9cmV0dXJuIHRoaXMubWluLnNldChlLGksciksdGhpcy5tYXguc2V0KG8scyxhKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7bGV0IGk9TGcuY29weShlKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKGkpLHRoaXMubWF4LmNvcHkodCkuYWRkKGkpLHRoaXN9c2V0RnJvbU9iamVjdCh0LGU9ITEpe3JldHVybiB0aGlzLm1ha2VFbXB0eSgpLHRoaXMuZXhwYW5kQnlPYmplY3QodCxlKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LGU9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBpPXQuZ2VvbWV0cnk7aWYodm9pZCAwIT09aSlpZihlJiZudWxsIT1pLmF0dHJpYnV0ZXMmJnZvaWQgMCE9PWkuYXR0cmlidXRlcy5wb3NpdGlvbil7bGV0IG89aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgcz0wLGE9by5jb3VudDtzPGE7cysrKUxnLmZyb21CdWZmZXJBdHRyaWJ1dGUobyxzKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KExnKX1lbHNlIG51bGw9PT1pLmJvdW5kaW5nQm94JiZpLmNvbXB1dGVCb3VuZGluZ0JveCgpLGtqLmNvcHkoaS5ib3VuZGluZ0JveCksa2ouYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMudW5pb24oa2opO2xldCByPXQuY2hpbGRyZW47Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXRoaXMuZXhwYW5kQnlPYmplY3QocltvXSxlKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLExnKSxMZy5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxpO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LGk9dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4LngsaT10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LGkrPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxpKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LGkrPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixpKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZpPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoQVMpLE1PLnN1YlZlY3RvcnModGhpcy5tYXgsQVMpLEh5LnN1YlZlY3RvcnModC5hLEFTKSxVeS5zdWJWZWN0b3JzKHQuYixBUyksenkuc3ViVmVjdG9ycyh0LmMsQVMpLGFmLnN1YlZlY3RvcnMoVXksSHkpLGxmLnN1YlZlY3RvcnMoenksVXkpLEJnLnN1YlZlY3RvcnMoSHksenkpO2xldCBlPVswLC1hZi56LGFmLnksMCwtbGYueixsZi55LDAsLUJnLnosQmcueSxhZi56LDAsLWFmLngsbGYueiwwLC1sZi54LEJnLnosMCwtQmcueCwtYWYueSxhZi54LDAsLWxmLnksbGYueCwwLC1CZy55LEJnLngsMF07cmV0dXJuISghRmooZSxIeSxVeSx6eSxNTyl8fChlPVsxLDAsMCwwLDEsMCwwLDAsMV0sIUZqKGUsSHksVXksenksTU8pKSkmJih3Ty5jcm9zc1ZlY3RvcnMoYWYsbGYpLGU9W3dPLngsd08ueSx3Ty56XSxGaihlLEh5LFV5LHp5LE1PKSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTGcuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWdldEJvdW5kaW5nU3BoZXJlKHQpe3JldHVybiB0aGlzLmdldENlbnRlcih0LmNlbnRlciksdC5yYWRpdXM9LjUqdGhpcy5nZXRTaXplKExnKS5sZW5ndGgoKSx0fWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXMuaXNFbXB0eSgpJiZ0aGlzLm1ha2VFbXB0eSgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCl8fChicFswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxicFsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxicFsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxicFszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxicFs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxicFs1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxicFs2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxicFs3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoYnApKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O1RsLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIGJwPVtuZXcgaWUsbmV3IGllLG5ldyBpZSxuZXcgaWUsbmV3IGllLG5ldyBpZSxuZXcgaWUsbmV3IGllXSxMZz1uZXcgaWUsa2o9bmV3IFRsLEh5PW5ldyBpZSxVeT1uZXcgaWUsenk9bmV3IGllLGFmPW5ldyBpZSxsZj1uZXcgaWUsQmc9bmV3IGllLEFTPW5ldyBpZSxNTz1uZXcgaWUsd089bmV3IGllLFZnPW5ldyBpZTtmdW5jdGlvbiBGaihuLHQsZSxpLHIpe2ZvcihsZXQgbz0wLHM9bi5sZW5ndGgtMztvPD1zO28rPTMpe1ZnLmZyb21BcnJheShuLG8pO2xldCBhPXIueCpNYXRoLmFicyhWZy54KStyLnkqTWF0aC5hYnMoVmcueSkrci56Kk1hdGguYWJzKFZnLnopLGw9dC5kb3QoVmcpLGM9ZS5kb3QoVmcpLHU9aS5kb3QoVmcpO2lmKE1hdGgubWF4KC1NYXRoLm1heChsLGMsdSksTWF0aC5taW4obCxjLHUpKT5hKXJldHVybiExfXJldHVybiEwfXZhciB6OGU9bmV3IFRsLHd1ZT1uZXcgaWUsU089bmV3IGllLE5qPW5ldyBpZSx4Zj1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBpZSxlPS0xKXt0aGlzLmNlbnRlcj10LHRoaXMucmFkaXVzPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodCksdGhpcy5yYWRpdXM9ZSx0aGlzfXNldEZyb21Qb2ludHModCxlKXtsZXQgaT10aGlzLmNlbnRlcjt2b2lkIDAhPT1lP2kuY29weShlKTp6OGUuc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIoaSk7bGV0IHI9MDtmb3IobGV0IG89MCxzPXQubGVuZ3RoO288cztvKyspcj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQodFtvXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQociksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnJhZGl1cyt0LnJhZGl1cztyZXR1cm4gdC5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1lKmV9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzU3BoZXJlKHRoaXMpfWludGVyc2VjdHNQbGFuZSh0KXtyZXR1cm4gTWF0aC5hYnModC5kaXN0YW5jZVRvUG9pbnQodGhpcy5jZW50ZXIpKTw9dGhpcy5yYWRpdXN9Y2xhbXBQb2ludCh0LGUpe2xldCBpPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiBlLmNvcHkodCksaT50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyYmKGUuc3ViKHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKSxlLm11bHRpcGx5U2NhbGFyKHRoaXMucmFkaXVzKS5hZGQodGhpcy5jZW50ZXIpKSxlfWdldEJvdW5kaW5nQm94KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXhwYW5kQnlQb2ludCh0KXtOai5zdWJWZWN0b3JzKHQsdGhpcy5jZW50ZXIpO2xldCBlPU5qLmxlbmd0aFNxKCk7aWYoZT50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyl7bGV0IGk9TWF0aC5zcXJ0KGUpLHI9LjUqKGktdGhpcy5yYWRpdXMpO3RoaXMuY2VudGVyLmFkZChOai5tdWx0aXBseVNjYWxhcihyL2kpKSx0aGlzLnJhZGl1cys9cn1yZXR1cm4gdGhpc311bmlvbih0KXtyZXR1cm4hMD09PXRoaXMuY2VudGVyLmVxdWFscyh0LmNlbnRlcik/U08uc2V0KDAsMCwxKS5tdWx0aXBseVNjYWxhcih0LnJhZGl1cyk6U08uc3ViVmVjdG9ycyh0LmNlbnRlcix0aGlzLmNlbnRlcikubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpLHRoaXMuZXhwYW5kQnlQb2ludCh3dWUuY29weSh0LmNlbnRlcikuYWRkKFNPKSksdGhpcy5leHBhbmRCeVBvaW50KHd1ZS5jb3B5KHQuY2VudGVyKS5zdWIoU08pKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5jZW50ZXIuZXF1YWxzKHRoaXMuY2VudGVyKSYmdC5yYWRpdXM9PT10aGlzLnJhZGl1c31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19LHhwPW5ldyBpZSxMaj1uZXcgaWUsRU89bmV3IGllLGNmPW5ldyBpZSxCaj1uZXcgaWUsVE89bmV3IGllLFZqPW5ldyBpZSxDZj1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBpZSxlPW5ldyBpZSgwLDAsLTEpKXt0aGlzLm9yaWdpbj10LHRoaXMuZGlyZWN0aW9uPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodCksdGhpcy5kaXJlY3Rpb24uY29weShlKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodC5vcmlnaW4pLHRoaXMuZGlyZWN0aW9uLmNvcHkodC5kaXJlY3Rpb24pLHRoaXN9YXQodCxlKXtyZXR1cm4gZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5vcmlnaW4pfWxvb2tBdCh0KXtyZXR1cm4gdGhpcy5kaXJlY3Rpb24uY29weSh0KS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXN9cmVjYXN0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHRoaXMuYXQodCx4cCkpLHRoaXN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2Uuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKTtsZXQgaT1lLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIGk8MD9lLmNvcHkodGhpcy5vcmlnaW4pOmUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoaSkuYWRkKHRoaXMub3JpZ2luKX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQpKX1kaXN0YW5jZVNxVG9Qb2ludCh0KXtsZXQgZT14cC5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIGU8MD90aGlzLm9yaWdpbi5kaXN0YW5jZVRvU3F1YXJlZCh0KTooeHAuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoZSkuYWRkKHRoaXMub3JpZ2luKSx4cC5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VTcVRvU2VnbWVudCh0LGUsaSxyKXtMai5jb3B5KHQpLmFkZChlKS5tdWx0aXBseVNjYWxhciguNSksRU8uY29weShlKS5zdWIodCkubm9ybWFsaXplKCksY2YuY29weSh0aGlzLm9yaWdpbikuc3ViKExqKTtsZXQgZCxwLGgsZixvPS41KnQuZGlzdGFuY2VUbyhlKSxzPS10aGlzLmRpcmVjdGlvbi5kb3QoRU8pLGE9Y2YuZG90KHRoaXMuZGlyZWN0aW9uKSxsPS1jZi5kb3QoRU8pLGM9Y2YubGVuZ3RoU3EoKSx1PU1hdGguYWJzKDEtcypzKTtpZih1PjApaWYoZD1zKmwtYSxwPXMqYS1sLGY9byp1LGQ+PTApaWYocD49LWYpaWYocDw9Zil7bGV0IG09MS91O2QqPW0scCo9bSxoPWQqKGQrcypwKzIqYSkrcCoocypkK3ArMipsKStjfWVsc2UgcD1vLGQ9TWF0aC5tYXgoMCwtKHMqcCthKSksaD0tZCpkK3AqKHArMipsKStjO2Vsc2UgcD0tbyxkPU1hdGgubWF4KDAsLShzKnArYSkpLGg9LWQqZCtwKihwKzIqbCkrYztlbHNlIHA8PS1mPyhkPU1hdGgubWF4KDAsLSgtcypvK2EpKSxwPWQ+MD8tbzpNYXRoLm1pbihNYXRoLm1heCgtbywtbCksbyksaD0tZCpkK3AqKHArMipsKStjKTpwPD1mPyhkPTAscD1NYXRoLm1pbihNYXRoLm1heCgtbywtbCksbyksaD1wKihwKzIqbCkrYyk6KGQ9TWF0aC5tYXgoMCwtKHMqbythKSkscD1kPjA/bzpNYXRoLm1pbihNYXRoLm1heCgtbywtbCksbyksaD0tZCpkK3AqKHArMipsKStjKTtlbHNlIHA9cz4wPy1vOm8sZD1NYXRoLm1heCgwLC0ocypwK2EpKSxoPS1kKmQrcCoocCsyKmwpK2M7cmV0dXJuIGkmJmkuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoZCkuYWRkKHRoaXMub3JpZ2luKSxyJiZyLmNvcHkoRU8pLm11bHRpcGx5U2NhbGFyKHApLmFkZChMaiksaH1pbnRlcnNlY3RTcGhlcmUodCxlKXt4cC5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMub3JpZ2luKTtsZXQgaT14cC5kb3QodGhpcy5kaXJlY3Rpb24pLHI9eHAuZG90KHhwKS1pKmksbz10LnJhZGl1cyp0LnJhZGl1cztpZihyPm8pcmV0dXJuIG51bGw7bGV0IHM9TWF0aC5zcXJ0KG8tciksYT1pLXMsbD1pK3M7cmV0dXJuIGE8MCYmbDwwP251bGw6dGhpcy5hdChhPDA/bDphLGUpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31kaXN0YW5jZVRvUGxhbmUodCl7bGV0IGU9dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKTtpZigwPT09ZSlyZXR1cm4gMD09PXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKT8wOm51bGw7bGV0IGk9LSh0aGlzLm9yaWdpbi5kb3QodC5ub3JtYWwpK3QuY29uc3RhbnQpL2U7cmV0dXJuIGk+PTA/aTpudWxsfWludGVyc2VjdFBsYW5lKHQsZSl7bGV0IGk9dGhpcy5kaXN0YW5jZVRvUGxhbmUodCk7cmV0dXJuIG51bGw9PT1pP251bGw6dGhpcy5hdChpLGUpfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik7cmV0dXJuIDA9PT1lfHx0Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pKmU8MH1pbnRlcnNlY3RCb3godCxlKXtsZXQgaSxyLG8scyxhLGwsYz0xL3RoaXMuZGlyZWN0aW9uLngsdT0xL3RoaXMuZGlyZWN0aW9uLnksZD0xL3RoaXMuZGlyZWN0aW9uLnoscD10aGlzLm9yaWdpbjtyZXR1cm4gYz49MD8oaT0odC5taW4ueC1wLngpKmMscj0odC5tYXgueC1wLngpKmMpOihpPSh0Lm1heC54LXAueCkqYyxyPSh0Lm1pbi54LXAueCkqYyksdT49MD8obz0odC5taW4ueS1wLnkpKnUscz0odC5tYXgueS1wLnkpKnUpOihvPSh0Lm1heC55LXAueSkqdSxzPSh0Lm1pbi55LXAueSkqdSksaT5zfHxvPnJ8fCgobz5pfHxpIT1pKSYmKGk9byksKHM8cnx8ciE9cikmJihyPXMpLGQ+PTA/KGE9KHQubWluLnotcC56KSpkLGw9KHQubWF4LnotcC56KSpkKTooYT0odC5tYXguei1wLnopKmQsbD0odC5taW4uei1wLnopKmQpLGk+bHx8YT5yKXx8KChhPml8fGkhPWkpJiYoaT1hKSwobDxyfHxyIT1yKSYmKHI9bCkscjwwKT9udWxsOnRoaXMuYXQoaT49MD9pOnIsZSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gbnVsbCE9PXRoaXMuaW50ZXJzZWN0Qm94KHQseHApfWludGVyc2VjdFRyaWFuZ2xlKHQsZSxpLHIsbyl7Qmouc3ViVmVjdG9ycyhlLHQpLFRPLnN1YlZlY3RvcnMoaSx0KSxWai5jcm9zc1ZlY3RvcnMoQmosVE8pO2xldCBhLHM9dGhpcy5kaXJlY3Rpb24uZG90KFZqKTtpZihzPjApe2lmKHIpcmV0dXJuIG51bGw7YT0xfWVsc2V7aWYoIShzPDApKXJldHVybiBudWxsO2E9LTEscz0tc31jZi5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2xldCBsPWEqdGhpcy5kaXJlY3Rpb24uZG90KFRPLmNyb3NzVmVjdG9ycyhjZixUTykpO2lmKGw8MClyZXR1cm4gbnVsbDtsZXQgYz1hKnRoaXMuZGlyZWN0aW9uLmRvdChCai5jcm9zcyhjZikpO2lmKGM8MHx8bCtjPnMpcmV0dXJuIG51bGw7bGV0IHU9LWEqY2YuZG90KFZqKTtyZXR1cm4gdTwwP251bGw6dGhpcy5hdCh1L3Msbyl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5hcHBseU1hdHJpeDQodCksdGhpcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm9yaWdpbi5lcXVhbHModGhpcy5vcmlnaW4pJiZ0LmRpcmVjdGlvbi5lcXVhbHModGhpcy5kaXJlY3Rpb24pfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX0sUm49Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLHgpe2xldCBnPXRoaXMuZWxlbWVudHM7cmV0dXJuIGdbMF09dCxnWzRdPWUsZ1s4XT1pLGdbMTJdPXIsZ1sxXT1vLGdbNV09cyxnWzldPWEsZ1sxM109bCxnWzJdPWMsZ1s2XT11LGdbMTBdPWQsZ1sxNF09cCxnWzNdPWgsZ1s3XT1mLGdbMTFdPW0sZ1sxNV09eCx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IFJuKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sZVs5XT1pWzldLGVbMTBdPWlbMTBdLGVbMTFdPWlbMTFdLGVbMTJdPWlbMTJdLGVbMTNdPWlbMTNdLGVbMTRdPWlbMTRdLGVbMTVdPWlbMTVdLHRoaXN9Y29weVBvc2l0aW9uKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzEyXT1pWzEyXSxlWzEzXT1pWzEzXSxlWzE0XT1pWzE0XSx0aGlzfXNldEZyb21NYXRyaXgzKHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVszXSxlWzZdLDAsZVsxXSxlWzRdLGVbN10sMCxlWzJdLGVbNV0sZVs4XSwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdEJhc2lzKHQsZSxpKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMSksaS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMiksdGhpc31tYWtlQmFzaXModCxlLGkpe3JldHVybiB0aGlzLnNldCh0LngsZS54LGkueCwwLHQueSxlLnksaS55LDAsdC56LGUueixpLnosMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RSb3RhdGlvbih0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cyxyPTEvankuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLG89MS9qeS5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCkscz0xL2p5LnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gZVswXT1pWzBdKnIsZVsxXT1pWzFdKnIsZVsyXT1pWzJdKnIsZVszXT0wLGVbNF09aVs0XSpvLGVbNV09aVs1XSpvLGVbNl09aVs2XSpvLGVbN109MCxlWzhdPWlbOF0qcyxlWzldPWlbOV0qcyxlWzEwXT1pWzEwXSpzLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21FdWxlcih0KXt0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQueCxyPXQueSxvPXQueixzPU1hdGguY29zKGkpLGE9TWF0aC5zaW4oaSksbD1NYXRoLmNvcyhyKSxjPU1hdGguc2luKHIpLHU9TWF0aC5jb3MobyksZD1NYXRoLnNpbihvKTtpZigiWFlaIj09PXQub3JkZXIpe2xldCBwPXMqdSxoPXMqZCxmPWEqdSxtPWEqZDtlWzBdPWwqdSxlWzRdPS1sKmQsZVs4XT1jLGVbMV09aCtmKmMsZVs1XT1wLW0qYyxlWzldPS1hKmwsZVsyXT1tLXAqYyxlWzZdPWYraCpjLGVbMTBdPXMqbH1lbHNlIGlmKCJZWFoiPT09dC5vcmRlcil7bGV0IHA9bCp1LGg9bCpkLGY9Yyp1LG09YypkO2VbMF09cCttKmEsZVs0XT1mKmEtaCxlWzhdPXMqYyxlWzFdPXMqZCxlWzVdPXMqdSxlWzldPS1hLGVbMl09aCphLWYsZVs2XT1tK3AqYSxlWzEwXT1zKmx9ZWxzZSBpZigiWlhZIj09PXQub3JkZXIpe2xldCBwPWwqdSxoPWwqZCxmPWMqdSxtPWMqZDtlWzBdPXAtbSphLGVbNF09LXMqZCxlWzhdPWYraCphLGVbMV09aCtmKmEsZVs1XT1zKnUsZVs5XT1tLXAqYSxlWzJdPS1zKmMsZVs2XT1hLGVbMTBdPXMqbH1lbHNlIGlmKCJaWVgiPT09dC5vcmRlcil7bGV0IHA9cyp1LGg9cypkLGY9YSp1LG09YSpkO2VbMF09bCp1LGVbNF09ZipjLWgsZVs4XT1wKmMrbSxlWzFdPWwqZCxlWzVdPW0qYytwLGVbOV09aCpjLWYsZVsyXT0tYyxlWzZdPWEqbCxlWzEwXT1zKmx9ZWxzZSBpZigiWVpYIj09PXQub3JkZXIpe2xldCBwPXMqbCxoPXMqYyxmPWEqbCxtPWEqYztlWzBdPWwqdSxlWzRdPW0tcCpkLGVbOF09ZipkK2gsZVsxXT1kLGVbNV09cyp1LGVbOV09LWEqdSxlWzJdPS1jKnUsZVs2XT1oKmQrZixlWzEwXT1wLW0qZH1lbHNlIGlmKCJYWlkiPT09dC5vcmRlcil7bGV0IHA9cypsLGg9cypjLGY9YSpsLG09YSpjO2VbMF09bCp1LGVbNF09LWQsZVs4XT1jKnUsZVsxXT1wKmQrbSxlWzVdPXMqdSxlWzldPWgqZC1mLGVbMl09ZipkLWgsZVs2XT1hKnUsZVsxMF09bSpkK3B9cmV0dXJuIGVbM109MCxlWzddPTAsZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMuY29tcG9zZShqOGUsdCxHOGUpfWxvb2tBdCh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gd2wuc3ViVmVjdG9ycyh0LGUpLDA9PT13bC5sZW5ndGhTcSgpJiYod2wuej0xKSx3bC5ub3JtYWxpemUoKSx1Zi5jcm9zc1ZlY3RvcnMoaSx3bCksMD09PXVmLmxlbmd0aFNxKCkmJigxPT09TWF0aC5hYnMoaS56KT93bC54Kz0xZS00OndsLnorPTFlLTQsd2wubm9ybWFsaXplKCksdWYuY3Jvc3NWZWN0b3JzKGksd2wpKSx1Zi5ub3JtYWxpemUoKSxETy5jcm9zc1ZlY3RvcnMod2wsdWYpLHJbMF09dWYueCxyWzRdPURPLngscls4XT13bC54LHJbMV09dWYueSxyWzVdPURPLnkscls5XT13bC55LHJbMl09dWYueixyWzZdPURPLnosclsxMF09d2wueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsZSkpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQsZSl7bGV0IGk9dC5lbGVtZW50cyxyPWUuZWxlbWVudHMsbz10aGlzLmVsZW1lbnRzLHM9aVswXSxhPWlbNF0sbD1pWzhdLGM9aVsxMl0sdT1pWzFdLGQ9aVs1XSxwPWlbOV0saD1pWzEzXSxmPWlbMl0sbT1pWzZdLHg9aVsxMF0sZz1pWzE0XSxiPWlbM10sRD1pWzddLFQ9aVsxMV0saz1pWzE1XSxaPXJbMF0sej1yWzRdLGZlPXJbOF0sdWU9clsxMl0saGU9clsxXSx3PXJbNV0sRj1yWzldLHE9clsxM10sSz1yWzJdLGRlPXJbNl0sWT1yWzEwXSxhZT1yWzE0XSxsZT1yWzNdLEllPXJbN10sdmU9clsxMV0sRGU9clsxNV07cmV0dXJuIG9bMF09cypaK2EqaGUrbCpLK2MqbGUsb1s0XT1zKnorYSp3K2wqZGUrYypJZSxvWzhdPXMqZmUrYSpGK2wqWStjKnZlLG9bMTJdPXMqdWUrYSpxK2wqYWUrYypEZSxvWzFdPXUqWitkKmhlK3AqSytoKmxlLG9bNV09dSp6K2QqdytwKmRlK2gqSWUsb1s5XT11KmZlK2QqRitwKlkraCp2ZSxvWzEzXT11KnVlK2QqcStwKmFlK2gqRGUsb1syXT1mKlorbSpoZSt4KksrZypsZSxvWzZdPWYqeittKncreCpkZStnKkllLG9bMTBdPWYqZmUrbSpGK3gqWStnKnZlLG9bMTRdPWYqdWUrbSpxK3gqYWUrZypEZSxvWzNdPWIqWitEKmhlK1QqSytrKmxlLG9bN109Yip6K0QqdytUKmRlK2sqSWUsb1sxMV09YipmZStEKkYrVCpZK2sqdmUsb1sxNV09Yip1ZStEKnErVCphZStrKkRlLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzRdKj10LGVbOF0qPXQsZVsxMl0qPXQsZVsxXSo9dCxlWzVdKj10LGVbOV0qPXQsZVsxM10qPXQsZVsyXSo9dCxlWzZdKj10LGVbMTBdKj10LGVbMTRdKj10LGVbM10qPXQsZVs3XSo9dCxlWzExXSo9dCxlWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzRdLHI9dFs4XSxvPXRbMTJdLHM9dFsxXSxhPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGQ9dFs2XSxwPXRbMTBdLGg9dFsxNF07cmV0dXJuIHRbM10qKCtvKmwqZC1yKmMqZC1vKmEqcCtpKmMqcCtyKmEqaC1pKmwqaCkrdFs3XSooK2UqbCpoLWUqYypwK28qcypwLXIqcypoK3IqYyp1LW8qbCp1KSt0WzExXSooK2UqYypkLWUqYSpoLW8qcypkK2kqcypoK28qYSp1LWkqYyp1KSt0WzE1XSooLXIqYSp1LWUqbCpkK2UqYSpwK3IqcypkLWkqcypwK2kqbCp1KX10cmFuc3Bvc2UoKXtsZXQgZSx0PXRoaXMuZWxlbWVudHM7cmV0dXJuIGU9dFsxXSx0WzFdPXRbNF0sdFs0XT1lLGU9dFsyXSx0WzJdPXRbOF0sdFs4XT1lLGU9dFs2XSx0WzZdPXRbOV0sdFs5XT1lLGU9dFszXSx0WzNdPXRbMTJdLHRbMTJdPWUsZT10WzddLHRbN109dFsxM10sdFsxM109ZSxlPXRbMTFdLHRbMTFdPXRbMTRdLHRbMTRdPWUsdGhpc31zZXRQb3NpdGlvbih0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gdC5pc1ZlY3RvcjM/KHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56KTooclsxMl09dCxyWzEzXT1lLHJbMTRdPWkpLHRoaXN9aW52ZXJ0KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxvPXRbM10scz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLHU9dFs4XSxkPXRbOV0scD10WzEwXSxoPXRbMTFdLGY9dFsxMl0sbT10WzEzXSx4PXRbMTRdLGc9dFsxNV0sYj1kKngqYy1tKnAqYyttKmwqaC1hKngqaC1kKmwqZythKnAqZyxEPWYqcCpjLXUqeCpjLWYqbCpoK3MqeCpoK3UqbCpnLXMqcCpnLFQ9dSptKmMtZipkKmMrZiphKmgtcyptKmgtdSphKmcrcypkKmcsaz1mKmQqbC11Km0qbC1mKmEqcCtzKm0qcCt1KmEqeC1zKmQqeCxaPWUqYitpKkQrcipUK28qaztpZigwPT09WilyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCk7bGV0IHo9MS9aO3JldHVybiB0WzBdPWIqeix0WzFdPShtKnAqby1kKngqby1tKnIqaCtpKngqaCtkKnIqZy1pKnAqZykqeix0WzJdPShhKngqby1tKmwqbyttKnIqYy1pKngqYy1hKnIqZytpKmwqZykqeix0WzNdPShkKmwqby1hKnAqby1kKnIqYytpKnAqYythKnIqaC1pKmwqaCkqeix0WzRdPUQqeix0WzVdPSh1Kngqby1mKnAqbytmKnIqaC1lKngqaC11KnIqZytlKnAqZykqeix0WzZdPShmKmwqby1zKngqby1mKnIqYytlKngqYytzKnIqZy1lKmwqZykqeix0WzddPShzKnAqby11Kmwqbyt1KnIqYy1lKnAqYy1zKnIqaCtlKmwqaCkqeix0WzhdPVQqeix0WzldPShmKmQqby11Km0qby1mKmkqaCtlKm0qaCt1KmkqZy1lKmQqZykqeix0WzEwXT0ocyptKm8tZiphKm8rZippKmMtZSptKmMtcyppKmcrZSphKmcpKnosdFsxMV09KHUqYSpvLXMqZCpvLXUqaSpjK2UqZCpjK3MqaSpoLWUqYSpoKSp6LHRbMTJdPWsqeix0WzEzXT0odSptKnItZipkKnIrZippKnAtZSptKnAtdSppKngrZSpkKngpKnosdFsxNF09KGYqYSpyLXMqbSpyLWYqaSpsK2UqbSpsK3MqaSp4LWUqYSp4KSp6LHRbMTVdPShzKmQqci11KmEqcit1KmkqbC1lKmQqbC1zKmkqcCtlKmEqcCkqeix0aGlzfXNjYWxlKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10Lngscj10Lnksbz10Lno7cmV0dXJuIGVbMF0qPWksZVs0XSo9cixlWzhdKj1vLGVbMV0qPWksZVs1XSo9cixlWzldKj1vLGVbMl0qPWksZVs2XSo9cixlWzEwXSo9byxlWzNdKj1pLGVbN10qPXIsZVsxMV0qPW8sdGhpc31nZXRNYXhTY2FsZU9uQXhpcygpe2xldCB0PXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSx0WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSx0WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdKSl9bWFrZVRyYW5zbGF0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsdCwwLDEsMCxlLDAsMCwxLGksMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25YKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCxlLC1pLDAsMCxpLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblkodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwwLGksMCwwLDEsMCwwLC1pLDAsZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWih0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLC1pLDAsMCxpLGUsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25BeGlzKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPTEtaSxzPXQueCxhPXQueSxsPXQueixjPW8qcyx1PW8qYTtyZXR1cm4gdGhpcy5zZXQoYypzK2ksYyphLXIqbCxjKmwrciphLDAsYyphK3IqbCx1KmEraSx1KmwtcipzLDAsYypsLXIqYSx1KmwrcipzLG8qbCpsK2ksMCwwLDAsMCwxKSx0aGlzfW1ha2VTY2FsZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQsMCwwLDAsMCxlLDAsMCwwLDAsaSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNoZWFyKHQsZSxpLHIsbyxzKXtyZXR1cm4gdGhpcy5zZXQoMSxpLG8sMCx0LDEscywwLGUsciwxLDAsMCwwLDAsMSksdGhpc31jb21wb3NlKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzLG89ZS5feCxzPWUuX3ksYT1lLl96LGw9ZS5fdyxjPW8rbyx1PXMrcyxkPWErYSxwPW8qYyxoPW8qdSxmPW8qZCxtPXMqdSx4PXMqZCxnPWEqZCxiPWwqYyxEPWwqdSxUPWwqZCxrPWkueCxaPWkueSx6PWkuejtyZXR1cm4gclswXT0oMS0obStnKSkqayxyWzFdPShoK1QpKmssclsyXT0oZi1EKSprLHJbM109MCxyWzRdPShoLVQpKloscls1XT0oMS0ocCtnKSkqWixyWzZdPSh4K2IpKloscls3XT0wLHJbOF09KGYrRCkqeixyWzldPSh4LWIpKnosclsxMF09KDEtKHArbSkpKnosclsxMV09MCxyWzEyXT10LngsclsxM109dC55LHJbMTRdPXQueixyWzE1XT0xLHRoaXN9ZGVjb21wb3NlKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzLG89ankuc2V0KHJbMF0sclsxXSxyWzJdKS5sZW5ndGgoKSxzPWp5LnNldChyWzRdLHJbNV0scls2XSkubGVuZ3RoKCksYT1qeS5zZXQocls4XSxyWzldLHJbMTBdKS5sZW5ndGgoKTt0aGlzLmRldGVybWluYW50KCk8MCYmKG89LW8pLHQueD1yWzEyXSx0Lnk9clsxM10sdC56PXJbMTRdLGx1LmNvcHkodGhpcyk7bGV0IGM9MS9vLHU9MS9zLGQ9MS9hO3JldHVybiBsdS5lbGVtZW50c1swXSo9YyxsdS5lbGVtZW50c1sxXSo9YyxsdS5lbGVtZW50c1syXSo9YyxsdS5lbGVtZW50c1s0XSo9dSxsdS5lbGVtZW50c1s1XSo9dSxsdS5lbGVtZW50c1s2XSo9dSxsdS5lbGVtZW50c1s4XSo9ZCxsdS5lbGVtZW50c1s5XSo9ZCxsdS5lbGVtZW50c1sxMF0qPWQsZS5zZXRGcm9tUm90YXRpb25NYXRyaXgobHUpLGkueD1vLGkueT1zLGkuej1hLHRoaXN9bWFrZVBlcnNwZWN0aXZlKHQsZSxpLHIsbyxzKXt2b2lkIDA9PT1zJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUGVyc3BlY3RpdmUoKSBoYXMgYmVlbiByZWRlZmluZWQgYW5kIGhhcyBhIG5ldyBzaWduYXR1cmUuIFBsZWFzZSBjaGVjayB0aGUgZG9jcy4iKTtsZXQgYT10aGlzLmVsZW1lbnRzLGM9MipvLyhpLXIpLHU9KGUrdCkvKGUtdCksZD0oaStyKS8oaS1yKSxwPS0ocytvKS8ocy1vKSxoPS0yKnMqby8ocy1vKTtyZXR1cm4gYVswXT0yKm8vKGUtdCksYVs0XT0wLGFbOF09dSxhWzEyXT0wLGFbMV09MCxhWzVdPWMsYVs5XT1kLGFbMTNdPTAsYVsyXT0wLGFbNl09MCxhWzEwXT1wLGFbMTRdPWgsYVszXT0wLGFbN109MCxhWzExXT0tMSxhWzE1XT0wLHRoaXN9bWFrZU9ydGhvZ3JhcGhpYyh0LGUsaSxyLG8scyl7bGV0IGE9dGhpcy5lbGVtZW50cyxsPTEvKGUtdCksYz0xLyhpLXIpLHU9MS8ocy1vKSxkPShlK3QpKmwscD0oaStyKSpjLGg9KHMrbykqdTtyZXR1cm4gYVswXT0yKmwsYVs0XT0wLGFbOF09MCxhWzEyXT0tZCxhWzFdPTAsYVs1XT0yKmMsYVs5XT0wLGFbMTNdPS1wLGFbMl09MCxhWzZdPTAsYVsxMF09LTIqdSxhWzE0XT0taCxhWzNdPTAsYVs3XT0wLGFbMTFdPTAsYVsxNV09MSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDE2O3IrKylpZihlW3JdIT09aVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgaT0wO2k8MTY7aSsrKXRoaXMuZWxlbWVudHNbaV09dFtpK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09aVswXSx0W2UrMV09aVsxXSx0W2UrMl09aVsyXSx0W2UrM109aVszXSx0W2UrNF09aVs0XSx0W2UrNV09aVs1XSx0W2UrNl09aVs2XSx0W2UrN109aVs3XSx0W2UrOF09aVs4XSx0W2UrOV09aVs5XSx0W2UrMTBdPWlbMTBdLHRbZSsxMV09aVsxMV0sdFtlKzEyXT1pWzEyXSx0W2UrMTNdPWlbMTNdLHRbZSsxNF09aVsxNF0sdFtlKzE1XT1pWzE1XSx0fX07Um4ucHJvdG90eXBlLmlzTWF0cml4ND0hMDt2YXIgank9bmV3IGllLGx1PW5ldyBSbixqOGU9bmV3IGllKDAsMCwwKSxHOGU9bmV3IGllKDEsMSwxKSx1Zj1uZXcgaWUsRE89bmV3IGllLHdsPW5ldyBpZSxTdWU9bmV3IFJuLEV1ZT1uZXcgcXMsTWY9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTAscj1NZi5EZWZhdWx0T3JkZXIpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX29yZGVyPXJ9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IG9yZGVyKCl7cmV0dXJuIHRoaXMuX29yZGVyfXNldCBvcmRlcih0KXt0aGlzLl9vcmRlcj10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLGkscj10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX29yZGVyPXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fb3JkZXIpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC5feCx0aGlzLl95PXQuX3ksdGhpcy5fej10Ll96LHRoaXMuX29yZGVyPXQuX29yZGVyLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0LGU9dGhpcy5fb3JkZXIsaT0hMCl7bGV0IHI9dC5lbGVtZW50cyxvPXJbMF0scz1yWzRdLGE9cls4XSxsPXJbMV0sYz1yWzVdLHU9cls5XSxkPXJbMl0scD1yWzZdLGg9clsxMF07c3dpdGNoKGUpe2Nhc2UiWFlaIjp0aGlzLl95PU1hdGguYXNpbihHYShhLC0xLDEpKSxNYXRoLmFicyhhKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC11LGgpLHRoaXMuX3o9TWF0aC5hdGFuMigtcyxvKSk6KHRoaXMuX3g9TWF0aC5hdGFuMihwLGMpLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9TWF0aC5hc2luKC1HYSh1LC0xLDEpKSxNYXRoLmFicyh1KTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKGEsaCksdGhpcy5fej1NYXRoLmF0YW4yKGwsYykpOih0aGlzLl95PU1hdGguYXRhbjIoLWQsbyksdGhpcy5fej0wKTticmVhaztjYXNlIlpYWSI6dGhpcy5feD1NYXRoLmFzaW4oR2EocCwtMSwxKSksTWF0aC5hYnMocCk8Ljk5OTk5OTk/KHRoaXMuX3k9TWF0aC5hdGFuMigtZCxoKSx0aGlzLl96PU1hdGguYXRhbjIoLXMsYykpOih0aGlzLl95PTAsdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl95PU1hdGguYXNpbigtR2EoZCwtMSwxKSksTWF0aC5hYnMoZCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihwLGgpLHRoaXMuX3o9TWF0aC5hdGFuMihsLG8pKToodGhpcy5feD0wLHRoaXMuX3o9TWF0aC5hdGFuMigtcyxjKSk7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3o9TWF0aC5hc2luKEdhKGwsLTEsMSkpLE1hdGguYWJzKGwpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUsYyksdGhpcy5feT1NYXRoLmF0YW4yKC1kLG8pKToodGhpcy5feD0wLHRoaXMuX3k9TWF0aC5hdGFuMihhLGgpKTticmVhaztjYXNlIlhaWSI6dGhpcy5fej1NYXRoLmFzaW4oLUdhKHMsLTEsMSkpLE1hdGguYWJzKHMpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIocCxjKSx0aGlzLl95PU1hdGguYXRhbjIoYSxvKSk6KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxoKSx0aGlzLl95PTApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5FdWxlcjogLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrZSl9cmV0dXJuIHRoaXMuX29yZGVyPWUsITA9PT1pJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUXVhdGVybmlvbih0LGUsaSl7cmV0dXJuIFN1ZS5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLnNldEZyb21Sb3RhdGlvbk1hdHJpeChTdWUsZSxpKX1zZXRGcm9tVmVjdG9yMyh0LGU9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixlKX1yZW9yZGVyKHQpe3JldHVybiBFdWUuc2V0RnJvbUV1bGVyKHRoaXMpLHRoaXMuc2V0RnJvbVF1YXRlcm5pb24oRXVlLHQpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fb3JkZXI9PT10aGlzLl9vcmRlcn1mcm9tQXJyYXkodCl7cmV0dXJuIHRoaXMuX3g9dFswXSx0aGlzLl95PXRbMV0sdGhpcy5fej10WzJdLHZvaWQgMCE9PXRbM10mJih0aGlzLl9vcmRlcj10WzNdKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl9vcmRlcix0fXRvVmVjdG9yMyh0KXtyZXR1cm4gdD90LnNldCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feik6bmV3IGllKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07TWYucHJvdG90eXBlLmlzRXVsZXI9ITAsTWYuRGVmYXVsdE9yZGVyPSJYWVoiLE1mLlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07dmFyIHNrPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayZ0Lm1hc2spfWlzRW5hYmxlZCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayYoMTw8dHwwKSl9fSxXOGU9MCxUdWU9bmV3IGllLEd5PW5ldyBxcyxDcD1uZXcgUm4sQU89bmV3IGllLElTPW5ldyBpZSxxOGU9bmV3IGllLFk4ZT1uZXcgcXMsRHVlPW5ldyBpZSgxLDAsMCksQXVlPW5ldyBpZSgwLDEsMCksSXVlPW5ldyBpZSgwLDAsMSksWDhlPXt0eXBlOiJhZGRlZCJ9LFB1ZT17dHlwZToicmVtb3ZlZCJ9LFhpPWNsYXNzIGV4dGVuZHMgRXB7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOlc4ZSsrfSksdGhpcy51dWlkPWR1KCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPVhpLkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyBpZSxlPW5ldyBNZixpPW5ldyBxcyxyPW5ldyBpZSgxLDEsMSk7ZS5fb25DaGFuZ2UoZnVuY3Rpb24oKXtpLnNldEZyb21FdWxlcihlLCExKX0pLGkuX29uQ2hhbmdlKGZ1bmN0aW9uKCl7ZS5zZXRGcm9tUXVhdGVybmlvbihpLHZvaWQgMCwhMSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtwb3NpdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6dH0scm90YXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmV9LHF1YXRlcm5pb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOml9LHNjYWxlOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSxtb2RlbFZpZXdNYXRyaXg6e3ZhbHVlOm5ldyBSbn0sbm9ybWFsTWF0cml4Ont2YWx1ZTpuZXcgSm99fSksdGhpcy5tYXRyaXg9bmV3IFJuLHRoaXMubWF0cml4V29ybGQ9bmV3IFJuLHRoaXMubWF0cml4QXV0b1VwZGF0ZT1YaS5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdGhpcy5sYXllcnM9bmV3IHNrLHRoaXMudmlzaWJsZT0hMCx0aGlzLmNhc3RTaGFkb3c9ITEsdGhpcy5yZWNlaXZlU2hhZG93PSExLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMCx0aGlzLnJlbmRlck9yZGVyPTAsdGhpcy5hbmltYXRpb25zPVtdLHRoaXMudXNlckRhdGE9e319b25CZWZvcmVSZW5kZXIoKXt9b25BZnRlclJlbmRlcigpe31hcHBseU1hdHJpeDQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMubWF0cml4LnByZW11bHRpcGx5KHQpLHRoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKX1hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh0KSx0aGlzfXNldFJvdGF0aW9uRnJvbUF4aXNBbmdsZSh0LGUpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKHQsZSl9c2V0Um90YXRpb25Gcm9tRXVsZXIodCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcih0LCEwKX1zZXRSb3RhdGlvbkZyb21NYXRyaXgodCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KX1zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3RoaXMucXVhdGVybmlvbi5jb3B5KHQpfXJvdGF0ZU9uQXhpcyh0LGUpe3JldHVybiBHeS5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KEd5KSx0aGlzfXJvdGF0ZU9uV29ybGRBeGlzKHQsZSl7cmV0dXJuIEd5LnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkoR3kpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoRHVlLHQpfXJvdGF0ZVkodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKEF1ZSx0KX1yb3RhdGVaKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhJdWUsdCl9dHJhbnNsYXRlT25BeGlzKHQsZSl7cmV0dXJuIFR1ZS5jb3B5KHQpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pLHRoaXMucG9zaXRpb24uYWRkKFR1ZS5tdWx0aXBseVNjYWxhcihlKSksdGhpc310cmFuc2xhdGVYKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhEdWUsdCl9dHJhbnNsYXRlWSh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoQXVlLHQpfXRyYW5zbGF0ZVoodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKEl1ZSx0KX1sb2NhbFRvV29ybGQodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfXdvcmxkVG9Mb2NhbCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQoQ3AuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSl9bG9va0F0KHQsZSxpKXt0LmlzVmVjdG9yMz9BTy5jb3B5KHQpOkFPLnNldCh0LGUsaSk7bGV0IHI9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksSVMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9DcC5sb29rQXQoSVMsQU8sdGhpcy51cCk6Q3AubG9va0F0KEFPLElTLHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoQ3ApLHImJihDcC5leHRyYWN0Um90YXRpb24oci5tYXRyaXhXb3JsZCksR3kuc2V0RnJvbVJvdGF0aW9uTWF0cml4KENwKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkoR3kuaW52ZXJ0KCkpKX1hZGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRoaXMuYWRkKGFyZ3VtZW50c1tlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KG51bGwhPT10LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudChYOGUpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIix0KSx0aGlzKX1yZW1vdmUodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXRoaXMucmVtb3ZlKGFyZ3VtZW50c1tpXSk7cmV0dXJuIHRoaXN9bGV0IGU9dGhpcy5jaGlsZHJlbi5pbmRleE9mKHQpO3JldHVybi0xIT09ZSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoUHVlKSksdGhpc31yZW1vdmVGcm9tUGFyZW50KCl7bGV0IHQ9dGhpcy5wYXJlbnQ7cmV0dXJuIG51bGwhPT10JiZ0LnJlbW92ZSh0aGlzKSx0aGlzfWNsZWFyKCl7Zm9yKGxldCB0PTA7dDx0aGlzLmNoaWxkcmVuLmxlbmd0aDt0Kyspe2xldCBlPXRoaXMuY2hpbGRyZW5bdF07ZS5wYXJlbnQ9bnVsbCxlLmRpc3BhdGNoRXZlbnQoUHVlKX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzfWF0dGFjaCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksQ3AuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSxudWxsIT09dC5wYXJlbnQmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksQ3AubXVsdGlwbHkodC5wYXJlbnQubWF0cml4V29ybGQpKSx0LmFwcGx5TWF0cml4NChDcCksdGhpcy5hZGQodCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCksdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpe2lmKHRoaXNbdF09PT1lKXJldHVybiB0aGlzO2ZvcihsZXQgaT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aTxyO2krKyl7bGV0IHM9dGhpcy5jaGlsZHJlbltpXS5nZXRPYmplY3RCeVByb3BlcnR5KHQsZSk7aWYodm9pZCAwIT09cylyZXR1cm4gc319Z2V0V29ybGRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9Z2V0V29ybGRRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShJUyx0LHE4ZSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShJUyxZOGUsdCksdH1nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldChlWzhdLGVbOV0sZVsxMF0pLm5vcm1hbGl6ZSgpfXJheWNhc3QoKXt9dHJhdmVyc2UodCl7dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlKHQpfXRyYXZlcnNlVmlzaWJsZSh0KXtpZighMT09PXRoaXMudmlzaWJsZSlyZXR1cm47dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlVmlzaWJsZSh0KX10cmF2ZXJzZUFuY2VzdG9ycyh0KXtsZXQgZT10aGlzLnBhcmVudDtudWxsIT09ZSYmKHQoZSksZS50cmF2ZXJzZUFuY2VzdG9ycyh0KSl9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9dXBkYXRlTWF0cml4V29ybGQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLCh0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fHQpJiYobnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS51cGRhdGVNYXRyaXhXb3JsZCh0KX11cGRhdGVXb3JsZE1hdHJpeCh0LGUpe2xldCBpPXRoaXMucGFyZW50O2lmKCEwPT09dCYmbnVsbCE9PWkmJmkudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSxudWxsPT09dGhpcy5wYXJlbnQ/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLCEwPT09ZSl7bGV0IHI9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspcltvXS51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCl9fXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQsaT17fTtlJiYodD17Z2VvbWV0cmllczp7fSxtYXRlcmlhbHM6e30sdGV4dHVyZXM6e30saW1hZ2VzOnt9LHNoYXBlczp7fSxza2VsZXRvbnM6e30sYW5pbWF0aW9uczp7fX0saS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTtsZXQgcj17fTtmdW5jdGlvbiBvKGEsbCl7cmV0dXJuIHZvaWQgMD09PWFbbC51dWlkXSYmKGFbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHIudXVpZD10aGlzLnV1aWQsci50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKHIubmFtZT10aGlzLm5hbWUpLCEwPT09dGhpcy5jYXN0U2hhZG93JiYoci5jYXN0U2hhZG93PSEwKSwhMD09PXRoaXMucmVjZWl2ZVNoYWRvdyYmKHIucmVjZWl2ZVNoYWRvdz0hMCksITE9PT10aGlzLnZpc2libGUmJihyLnZpc2libGU9ITEpLCExPT09dGhpcy5mcnVzdHVtQ3VsbGVkJiYoci5mcnVzdHVtQ3VsbGVkPSExKSwwIT09dGhpcy5yZW5kZXJPcmRlciYmKHIucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoci51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyLmxheWVycz10aGlzLmxheWVycy5tYXNrLHIubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSwhMT09PXRoaXMubWF0cml4QXV0b1VwZGF0ZSYmKHIubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihyLnR5cGU9Ikluc3RhbmNlZE1lc2giLHIuY291bnQ9dGhpcy5jb3VudCxyLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksbnVsbCE9PXRoaXMuaW5zdGFuY2VDb2xvciYmKHIuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKSx0aGlzLmlzU2NlbmUpdGhpcy5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kLmlzQ29sb3I/ci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oKTp0aGlzLmJhY2tncm91bmQuaXNUZXh0dXJlJiYoci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04odCkudXVpZCkpLHRoaXMuZW52aXJvbm1lbnQmJnRoaXMuZW52aXJvbm1lbnQuaXNUZXh0dXJlJiYoci5lbnZpcm9ubWVudD10aGlzLmVudmlyb25tZW50LnRvSlNPTih0KS51dWlkKTtlbHNlIGlmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7ci5nZW9tZXRyeT1vKHQuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTtsZXQgYT10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYodm9pZCAwIT09YSYmdm9pZCAwIT09YS5zaGFwZXMpe2xldCBsPWEuc2hhcGVzO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBjPTAsdT1sLmxlbmd0aDtjPHU7YysrKW8odC5zaGFwZXMsbFtjXSk7ZWxzZSBvKHQuc2hhcGVzLGwpfX1pZih0aGlzLmlzU2tpbm5lZE1lc2gmJihyLmJpbmRNb2RlPXRoaXMuYmluZE1vZGUsci5iaW5kTWF0cml4PXRoaXMuYmluZE1hdHJpeC50b0FycmF5KCksdm9pZCAwIT09dGhpcy5za2VsZXRvbiYmKG8odC5za2VsZXRvbnMsdGhpcy5za2VsZXRvbiksci5za2VsZXRvbj10aGlzLnNrZWxldG9uLnV1aWQpKSx2b2lkIDAhPT10aGlzLm1hdGVyaWFsKWlmKEFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpe2xldCBhPVtdO2ZvcihsZXQgbD0wLGM9dGhpcy5tYXRlcmlhbC5sZW5ndGg7bDxjO2wrKylhLnB1c2gobyh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsW2xdKSk7ci5tYXRlcmlhbD1hfWVsc2Ugci5tYXRlcmlhbD1vKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWwpO2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe3IuY2hpbGRyZW49W107Zm9yKGxldCBhPTA7YTx0aGlzLmNoaWxkcmVuLmxlbmd0aDthKyspci5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bYV0udG9KU09OKHQpLm9iamVjdCl9aWYodGhpcy5hbmltYXRpb25zLmxlbmd0aD4wKXtyLmFuaW1hdGlvbnM9W107Zm9yKGxldCBhPTA7YTx0aGlzLmFuaW1hdGlvbnMubGVuZ3RoO2ErKylyLmFuaW1hdGlvbnMucHVzaChvKHQuYW5pbWF0aW9ucyx0aGlzLmFuaW1hdGlvbnNbYV0pKX1pZihlKXtsZXQgYT1zKHQuZ2VvbWV0cmllcyksbD1zKHQubWF0ZXJpYWxzKSxjPXModC50ZXh0dXJlcyksdT1zKHQuaW1hZ2VzKSxkPXModC5zaGFwZXMpLHA9cyh0LnNrZWxldG9ucyksaD1zKHQuYW5pbWF0aW9ucyk7YS5sZW5ndGg+MCYmKGkuZ2VvbWV0cmllcz1hKSxsLmxlbmd0aD4wJiYoaS5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKGkudGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKGkuaW1hZ2VzPXUpLGQubGVuZ3RoPjAmJihpLnNoYXBlcz1kKSxwLmxlbmd0aD4wJiYoaS5za2VsZXRvbnM9cCksaC5sZW5ndGg+MCYmKGkuYW5pbWF0aW9ucz1oKX1yZXR1cm4gaS5vYmplY3Q9cixpO2Z1bmN0aW9uIHMoYSl7bGV0IGw9W107Zm9yKGxldCBjIGluIGEpe2xldCB1PWFbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyx0KX1jb3B5KHQsZT0hMCl7aWYodGhpcy5uYW1lPXQubmFtZSx0aGlzLnVwLmNvcHkodC51cCksdGhpcy5wb3NpdGlvbi5jb3B5KHQucG9zaXRpb24pLHRoaXMucm90YXRpb24ub3JkZXI9dC5yb3RhdGlvbi5vcmRlcix0aGlzLnF1YXRlcm5pb24uY29weSh0LnF1YXRlcm5pb24pLHRoaXMuc2NhbGUuY29weSh0LnNjYWxlKSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCksdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlLHRoaXMubGF5ZXJzLm1hc2s9dC5sYXllcnMubWFzayx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMuY2FzdFNoYWRvdz10LmNhc3RTaGFkb3csdGhpcy5yZWNlaXZlU2hhZG93PXQucmVjZWl2ZVNoYWRvdyx0aGlzLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkLHRoaXMucmVuZGVyT3JkZXI9dC5yZW5kZXJPcmRlcix0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLCEwPT09ZSlmb3IobGV0IGk9MDtpPHQuY2hpbGRyZW4ubGVuZ3RoO2krKyl0aGlzLmFkZCh0LmNoaWxkcmVuW2ldLmNsb25lKCkpO3JldHVybiB0aGlzfX07WGkuRGVmYXVsdFVwPW5ldyBpZSgwLDEsMCksWGkuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITAsWGkucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIGN1PW5ldyBpZSxNcD1uZXcgaWUsSGo9bmV3IGllLHdwPW5ldyBpZSxXeT1uZXcgaWUscXk9bmV3IGllLFJ1ZT1uZXcgaWUsVWo9bmV3IGllLHpqPW5ldyBpZSxqaj1uZXcgaWUsbG89Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaWUsZT1uZXcgaWUsaT1uZXcgaWUpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1pfXN0YXRpYyBnZXROb3JtYWwodCxlLGkscil7ci5zdWJWZWN0b3JzKGksZSksY3Uuc3ViVmVjdG9ycyh0LGUpLHIuY3Jvc3MoY3UpO2xldCBvPXIubGVuZ3RoU3EoKTtyZXR1cm4gbz4wP3IubXVsdGlwbHlTY2FsYXIoMS9NYXRoLnNxcnQobykpOnIuc2V0KDAsMCwwKX1zdGF0aWMgZ2V0QmFyeWNvb3JkKHQsZSxpLHIsbyl7Y3Uuc3ViVmVjdG9ycyhyLGUpLE1wLnN1YlZlY3RvcnMoaSxlKSxIai5zdWJWZWN0b3JzKHQsZSk7bGV0IHM9Y3UuZG90KGN1KSxhPWN1LmRvdChNcCksbD1jdS5kb3QoSGopLGM9TXAuZG90KE1wKSx1PU1wLmRvdChIaiksZD1zKmMtYSphO2lmKDA9PT1kKXJldHVybiBvLnNldCgtMiwtMSwtMSk7bGV0IHA9MS9kLGg9KGMqbC1hKnUpKnAsZj0ocyp1LWEqbCkqcDtyZXR1cm4gby5zZXQoMS1oLWYsZixoKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LGUsaSxyKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscix3cCksd3AueD49MCYmd3AueT49MCYmd3AueCt3cC55PD0xfXN0YXRpYyBnZXRVVih0LGUsaSxyLG8scyxhLGwpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LGUsaSxyLHdwKSxsLnNldCgwLDApLGwuYWRkU2NhbGVkVmVjdG9yKG8sd3AueCksbC5hZGRTY2FsZWRWZWN0b3Iocyx3cC55KSxsLmFkZFNjYWxlZFZlY3RvcihhLHdwLnopLGx9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxlLGkscil7cmV0dXJuIGN1LnN1YlZlY3RvcnMoaSxlKSxNcC5zdWJWZWN0b3JzKHQsZSksY3UuY3Jvc3MoTXApLmRvdChyKTwwfXNldCh0LGUsaSl7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KGUpLHRoaXMuYy5jb3B5KGkpLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxlLGkscil7cmV0dXJuIHRoaXMuYS5jb3B5KHRbZV0pLHRoaXMuYi5jb3B5KHRbaV0pLHRoaXMuYy5jb3B5KHRbcl0pLHRoaXN9c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXModCxlLGkscil7cmV0dXJuIHRoaXMuYS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksdGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxpKSx0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hLmNvcHkodC5hKSx0aGlzLmIuY29weSh0LmIpLHRoaXMuYy5jb3B5KHQuYyksdGhpc31nZXRBcmVhKCl7cmV0dXJuIGN1LnN1YlZlY3RvcnModGhpcy5jLHRoaXMuYiksTXAuc3ViVmVjdG9ycyh0aGlzLmEsdGhpcy5iKSwuNSpjdS5jcm9zcyhNcCkubGVuZ3RoKCl9Z2V0TWlkcG9pbnQodCl7cmV0dXJuIHQuYWRkVmVjdG9ycyh0aGlzLmEsdGhpcy5iKS5hZGQodGhpcy5jKS5tdWx0aXBseVNjYWxhcigxLzMpfWdldE5vcm1hbCh0KXtyZXR1cm4gbG8uZ2V0Tm9ybWFsKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHQpfWdldFBsYW5lKHQpe3JldHVybiB0LnNldEZyb21Db3BsYW5hclBvaW50cyh0aGlzLmEsdGhpcy5iLHRoaXMuYyl9Z2V0QmFyeWNvb3JkKHQsZSl7cmV0dXJuIGxvLmdldEJhcnljb29yZCh0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUpfWdldFVWKHQsZSxpLHIsbyl7cmV0dXJuIGxvLmdldFVWKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSxpLHIsbyl9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4gbG8uY29udGFpbnNQb2ludCh0LHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1pc0Zyb250RmFjaW5nKHQpe3JldHVybiBsby5pc0Zyb250RmFjaW5nKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHQpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1RyaWFuZ2xlKHRoaXMpfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXtsZXQgcyxhLGk9dGhpcy5hLHI9dGhpcy5iLG89dGhpcy5jO1d5LnN1YlZlY3RvcnMocixpKSxxeS5zdWJWZWN0b3JzKG8saSksVWouc3ViVmVjdG9ycyh0LGkpO2xldCBsPVd5LmRvdChVaiksYz1xeS5kb3QoVWopO2lmKGw8PTAmJmM8PTApcmV0dXJuIGUuY29weShpKTt6ai5zdWJWZWN0b3JzKHQscik7bGV0IHU9V3kuZG90KHpqKSxkPXF5LmRvdCh6aik7aWYodT49MCYmZDw9dSlyZXR1cm4gZS5jb3B5KHIpO2xldCBwPWwqZC11KmM7aWYocDw9MCYmbD49MCYmdTw9MClyZXR1cm4gcz1sLyhsLXUpLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoV3kscyk7amouc3ViVmVjdG9ycyh0LG8pO2xldCBoPVd5LmRvdChqaiksZj1xeS5kb3QoamopO2lmKGY+PTAmJmg8PWYpcmV0dXJuIGUuY29weShvKTtsZXQgbT1oKmMtbCpmO2lmKG08PTAmJmM+PTAmJmY8PTApcmV0dXJuIGE9Yy8oYy1mKSxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKHF5LGEpO2xldCB4PXUqZi1oKmQ7aWYoeDw9MCYmZC11Pj0wJiZoLWY+PTApcmV0dXJuIFJ1ZS5zdWJWZWN0b3JzKG8sciksYT0oZC11KS8oZC11KyhoLWYpKSxlLmNvcHkocikuYWRkU2NhbGVkVmVjdG9yKFJ1ZSxhKTtsZXQgZz0xLyh4K20rcCk7cmV0dXJuIHM9bSpnLGE9cCpnLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoV3kscykuYWRkU2NhbGVkVmVjdG9yKHF5LGEpfWVxdWFscyh0KXtyZXR1cm4gdC5hLmVxdWFscyh0aGlzLmEpJiZ0LmIuZXF1YWxzKHRoaXMuYikmJnQuYy5lcXVhbHModGhpcy5jKX19LFE4ZT0wLGhzPWNsYXNzIGV4dGVuZHMgRXB7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOlE4ZSsrfSksdGhpcy51dWlkPWR1KCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iTWF0ZXJpYWwiLHRoaXMuZm9nPSEwLHRoaXMuYmxlbmRpbmc9MSx0aGlzLnNpZGU9MCx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9MjA0LHRoaXMuYmxlbmREc3Q9MjA1LHRoaXMuYmxlbmRFcXVhdGlvbj0xMDAsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz0zLHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9NTE5LHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPTc2ODAsdGhpcy5zdGVuY2lsWkZhaWw9NzY4MCx0aGlzLnN0ZW5jaWxaUGFzcz03NjgwLHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHZvaWQgMCE9PXQpZm9yKGxldCBlIGluIHQpe2xldCBpPXRbZV07aWYodm9pZCAwPT09aSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrZSsiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKCJzaGFkaW5nIj09PWUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PWk7Y29udGludWV9bGV0IHI9dGhpc1tlXTt2b2lkIDAhPT1yP3ImJnIuaXNDb2xvcj9yLnNldChpKTpyJiZyLmlzVmVjdG9yMyYmaSYmaS5pc1ZlY3RvcjM/ci5jb3B5KGkpOnRoaXNbZV09aTpjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6ICciK2UrIicgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4iKX19dG9KU09OKHQpe2xldCBlPXZvaWQgMD09PXR8fCJzdHJpbmciPT10eXBlb2YgdDtlJiYodD17dGV4dHVyZXM6e30saW1hZ2VzOnt9fSk7bGV0IGk9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJNYXRlcmlhbCIsZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07ZnVuY3Rpb24gcihvKXtsZXQgcz1bXTtmb3IobGV0IGEgaW4gbyl7bGV0IGw9b1thXTtkZWxldGUgbC5tZXRhZGF0YSxzLnB1c2gobCl9cmV0dXJuIHN9aWYoaS51dWlkPXRoaXMudXVpZCxpLnR5cGU9dGhpcy50eXBlLCIiIT09dGhpcy5uYW1lJiYoaS5uYW1lPXRoaXMubmFtZSksdGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYoaS5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLnJvdWdobmVzcyYmKGkucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKSx2b2lkIDAhPT10aGlzLm1ldGFsbmVzcyYmKGkubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKSx2b2lkIDAhPT10aGlzLnNoZWVuJiYoaS5zaGVlbj10aGlzLnNoZWVuKSx0aGlzLnNoZWVuQ29sb3ImJnRoaXMuc2hlZW5Db2xvci5pc0NvbG9yJiYoaS5zaGVlbkNvbG9yPXRoaXMuc2hlZW5Db2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaGVlblJvdWdobmVzcyYmKGkuc2hlZW5Sb3VnaG5lc3M9dGhpcy5zaGVlblJvdWdobmVzcyksdGhpcy5lbWlzc2l2ZSYmdGhpcy5lbWlzc2l2ZS5pc0NvbG9yJiYoaS5lbWlzc2l2ZT10aGlzLmVtaXNzaXZlLmdldEhleCgpKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5JiYxIT09dGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmKGkuZW1pc3NpdmVJbnRlbnNpdHk9dGhpcy5lbWlzc2l2ZUludGVuc2l0eSksdGhpcy5zcGVjdWxhciYmdGhpcy5zcGVjdWxhci5pc0NvbG9yJiYoaS5zcGVjdWxhcj10aGlzLnNwZWN1bGFyLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLnNwZWN1bGFySW50ZW5zaXR5JiYoaS5zcGVjdWxhckludGVuc2l0eT10aGlzLnNwZWN1bGFySW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyQ29sb3ImJnRoaXMuc3BlY3VsYXJDb2xvci5pc0NvbG9yJiYoaS5zcGVjdWxhckNvbG9yPXRoaXMuc3BlY3VsYXJDb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaGluaW5lc3MmJihpLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyksdm9pZCAwIT09dGhpcy5jbGVhcmNvYXQmJihpLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCksdm9pZCAwIT09dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MmJihpLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyksdGhpcy5jbGVhcmNvYXRNYXAmJnRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0TWFwPXRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCYmdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwJiZ0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04odCkudXVpZCxpLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYoaS5tYXA9dGhpcy5tYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihpLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04odCkudXVpZCksdGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihpLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYoaS5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTih0KS51dWlkLGkubGlnaHRNYXBJbnRlbnNpdHk9dGhpcy5saWdodE1hcEludGVuc2l0eSksdGhpcy5hb01hcCYmdGhpcy5hb01hcC5pc1RleHR1cmUmJihpLmFvTWFwPXRoaXMuYW9NYXAudG9KU09OKHQpLnV1aWQsaS5hb01hcEludGVuc2l0eT10aGlzLmFvTWFwSW50ZW5zaXR5KSx0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihpLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTih0KS51dWlkLGkuYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKSx0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYoaS5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKHQpLnV1aWQsaS5ub3JtYWxNYXBUeXBlPXRoaXMubm9ybWFsTWFwVHlwZSxpLm5vcm1hbFNjYWxlPXRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLmRpc3BsYWNlbWVudE1hcCYmdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlJiYoaS5kaXNwbGFjZW1lbnRNYXA9dGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKHQpLnV1aWQsaS5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLGkuZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpLHRoaXMucm91Z2huZXNzTWFwJiZ0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUmJihpLnJvdWdobmVzc01hcD10aGlzLnJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5tZXRhbG5lc3NNYXAmJnRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSYmKGkubWV0YWxuZXNzTWFwPXRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVtaXNzaXZlTWFwJiZ0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSYmKGkuZW1pc3NpdmVNYXA9dGhpcy5lbWlzc2l2ZU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihpLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhckludGVuc2l0eU1hcD10aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXAmJnRoaXMuc3BlY3VsYXJDb2xvck1hcC5pc1RleHR1cmUmJihpLnNwZWN1bGFyQ29sb3JNYXA9dGhpcy5zcGVjdWxhckNvbG9yTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYoaS5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKHQpLnV1aWQsdm9pZCAwIT09dGhpcy5jb21iaW5lJiYoaS5jb21iaW5lPXRoaXMuY29tYmluZSkpLHZvaWQgMCE9PXRoaXMuZW52TWFwSW50ZW5zaXR5JiYoaS5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpLHZvaWQgMCE9PXRoaXMucmVmbGVjdGl2aXR5JiYoaS5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHkpLHZvaWQgMCE9PXRoaXMucmVmcmFjdGlvblJhdGlvJiYoaS5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8pLHRoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYoaS5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTih0KS51dWlkKSx2b2lkIDAhPT10aGlzLnRyYW5zbWlzc2lvbiYmKGkudHJhbnNtaXNzaW9uPXRoaXMudHJhbnNtaXNzaW9uKSx0aGlzLnRyYW5zbWlzc2lvbk1hcCYmdGhpcy50cmFuc21pc3Npb25NYXAuaXNUZXh0dXJlJiYoaS50cmFuc21pc3Npb25NYXA9dGhpcy50cmFuc21pc3Npb25NYXAudG9KU09OKHQpLnV1aWQpLHZvaWQgMCE9PXRoaXMudGhpY2tuZXNzJiYoaS50aGlja25lc3M9dGhpcy50aGlja25lc3MpLHRoaXMudGhpY2tuZXNzTWFwJiZ0aGlzLnRoaWNrbmVzc01hcC5pc1RleHR1cmUmJihpLnRoaWNrbmVzc01hcD10aGlzLnRoaWNrbmVzc01hcC50b0pTT04odCkudXVpZCksdm9pZCAwIT09dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlJiYoaS5hdHRlbnVhdGlvbkRpc3RhbmNlPXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSksdm9pZCAwIT09dGhpcy5hdHRlbnVhdGlvbkNvbG9yJiYoaS5hdHRlbnVhdGlvbkNvbG9yPXRoaXMuYXR0ZW51YXRpb25Db2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaXplJiYoaS5zaXplPXRoaXMuc2l6ZSksbnVsbCE9PXRoaXMuc2hhZG93U2lkZSYmKGkuc2hhZG93U2lkZT10aGlzLnNoYWRvd1NpZGUpLHZvaWQgMCE9PXRoaXMuc2l6ZUF0dGVudWF0aW9uJiYoaS5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pLDEhPT10aGlzLmJsZW5kaW5nJiYoaS5ibGVuZGluZz10aGlzLmJsZW5kaW5nKSwwIT09dGhpcy5zaWRlJiYoaS5zaWRlPXRoaXMuc2lkZSksdGhpcy52ZXJ0ZXhDb2xvcnMmJihpLnZlcnRleENvbG9ycz0hMCksdGhpcy5vcGFjaXR5PDEmJihpLm9wYWNpdHk9dGhpcy5vcGFjaXR5KSwhMD09PXRoaXMudHJhbnNwYXJlbnQmJihpLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpLGkuZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jLGkuZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0LGkuZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGUsaS5jb2xvcldyaXRlPXRoaXMuY29sb3JXcml0ZSxpLmFscGhhV3JpdGU9dGhpcy5hbHBoYVdyaXRlLGkuc3RlbmNpbFdyaXRlPXRoaXMuc3RlbmNpbFdyaXRlLGkuc3RlbmNpbFdyaXRlTWFzaz10aGlzLnN0ZW5jaWxXcml0ZU1hc2ssaS5zdGVuY2lsRnVuYz10aGlzLnN0ZW5jaWxGdW5jLGkuc3RlbmNpbFJlZj10aGlzLnN0ZW5jaWxSZWYsaS5zdGVuY2lsRnVuY01hc2s9dGhpcy5zdGVuY2lsRnVuY01hc2ssaS5zdGVuY2lsRmFpbD10aGlzLnN0ZW5jaWxGYWlsLGkuc3RlbmNpbFpGYWlsPXRoaXMuc3RlbmNpbFpGYWlsLGkuc3RlbmNpbFpQYXNzPXRoaXMuc3RlbmNpbFpQYXNzLHRoaXMucm90YXRpb24mJjAhPT10aGlzLnJvdGF0aW9uJiYoaS5yb3RhdGlvbj10aGlzLnJvdGF0aW9uKSwhMD09PXRoaXMucG9seWdvbk9mZnNldCYmKGkucG9seWdvbk9mZnNldD0hMCksMCE9PXRoaXMucG9seWdvbk9mZnNldEZhY3RvciYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IpLDAhPT10aGlzLnBvbHlnb25PZmZzZXRVbml0cyYmKGkucG9seWdvbk9mZnNldFVuaXRzPXRoaXMucG9seWdvbk9mZnNldFVuaXRzKSx0aGlzLmxpbmV3aWR0aCYmMSE9PXRoaXMubGluZXdpZHRoJiYoaS5saW5ld2lkdGg9dGhpcy5saW5ld2lkdGgpLHZvaWQgMCE9PXRoaXMuZGFzaFNpemUmJihpLmRhc2hTaXplPXRoaXMuZGFzaFNpemUpLHZvaWQgMCE9PXRoaXMuZ2FwU2l6ZSYmKGkuZ2FwU2l6ZT10aGlzLmdhcFNpemUpLHZvaWQgMCE9PXRoaXMuc2NhbGUmJihpLnNjYWxlPXRoaXMuc2NhbGUpLCEwPT09dGhpcy5kaXRoZXJpbmcmJihpLmRpdGhlcmluZz0hMCksdGhpcy5hbHBoYVRlc3Q+MCYmKGkuYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KSwhMD09PXRoaXMuYWxwaGFUb0NvdmVyYWdlJiYoaS5hbHBoYVRvQ292ZXJhZ2U9dGhpcy5hbHBoYVRvQ292ZXJhZ2UpLCEwPT09dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEmJihpLnByZW11bHRpcGxpZWRBbHBoYT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSksITA9PT10aGlzLndpcmVmcmFtZSYmKGkud2lyZWZyYW1lPXRoaXMud2lyZWZyYW1lKSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD4xJiYoaS53aXJlZnJhbWVMaW5ld2lkdGg9dGhpcy53aXJlZnJhbWVMaW5ld2lkdGgpLCJyb3VuZCIhPT10aGlzLndpcmVmcmFtZUxpbmVjYXAmJihpLndpcmVmcmFtZUxpbmVjYXA9dGhpcy53aXJlZnJhbWVMaW5lY2FwKSwicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lam9pbiYmKGkud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lam9pbiksITA9PT10aGlzLmZsYXRTaGFkaW5nJiYoaS5mbGF0U2hhZGluZz10aGlzLmZsYXRTaGFkaW5nKSwhMT09PXRoaXMudmlzaWJsZSYmKGkudmlzaWJsZT0hMSksITE9PT10aGlzLnRvbmVNYXBwZWQmJihpLnRvbmVNYXBwZWQ9ITEpLCJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksZSl7bGV0IG89cih0LnRleHR1cmVzKSxzPXIodC5pbWFnZXMpO28ubGVuZ3RoPjAmJihpLnRleHR1cmVzPW8pLHMubGVuZ3RoPjAmJihpLmltYWdlcz1zKX1yZXR1cm4gaX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5mb2c9dC5mb2csdGhpcy5ibGVuZGluZz10LmJsZW5kaW5nLHRoaXMuc2lkZT10LnNpZGUsdGhpcy52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnMsdGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQsdGhpcy5ibGVuZFNyYz10LmJsZW5kU3JjLHRoaXMuYmxlbmREc3Q9dC5ibGVuZERzdCx0aGlzLmJsZW5kRXF1YXRpb249dC5ibGVuZEVxdWF0aW9uLHRoaXMuYmxlbmRTcmNBbHBoYT10LmJsZW5kU3JjQWxwaGEsdGhpcy5ibGVuZERzdEFscGhhPXQuYmxlbmREc3RBbHBoYSx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT10LmJsZW5kRXF1YXRpb25BbHBoYSx0aGlzLmRlcHRoRnVuYz10LmRlcHRoRnVuYyx0aGlzLmRlcHRoVGVzdD10LmRlcHRoVGVzdCx0aGlzLmRlcHRoV3JpdGU9dC5kZXB0aFdyaXRlLHRoaXMuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2ssdGhpcy5zdGVuY2lsRnVuYz10LnN0ZW5jaWxGdW5jLHRoaXMuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYsdGhpcy5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2ssdGhpcy5zdGVuY2lsRmFpbD10LnN0ZW5jaWxGYWlsLHRoaXMuc3RlbmNpbFpGYWlsPXQuc3RlbmNpbFpGYWlsLHRoaXMuc3RlbmNpbFpQYXNzPXQuc3RlbmNpbFpQYXNzLHRoaXMuc3RlbmNpbFdyaXRlPXQuc3RlbmNpbFdyaXRlO2xldCBlPXQuY2xpcHBpbmdQbGFuZXMsaT1udWxsO2lmKG51bGwhPT1lKXtsZXQgcj1lLmxlbmd0aDtpPW5ldyBBcnJheShyKTtmb3IobGV0IG89MDtvIT09cjsrK28paVtvXT1lW29dLmNsb25lKCl9cmV0dXJuIHRoaXMuY2xpcHBpbmdQbGFuZXM9aSx0aGlzLmNsaXBJbnRlcnNlY3Rpb249dC5jbGlwSW50ZXJzZWN0aW9uLHRoaXMuY2xpcFNoYWRvd3M9dC5jbGlwU2hhZG93cyx0aGlzLnNoYWRvd1NpZGU9dC5zaGFkb3dTaWRlLHRoaXMuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUsdGhpcy5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbix0aGlzLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0LHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMsdGhpcy5kaXRoZXJpbmc9dC5kaXRoZXJpbmcsdGhpcy5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEsdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX07aHMucHJvdG90eXBlLmlzTWF0ZXJpYWw9ITA7dmFyIEdnPWNsYXNzIGV4dGVuZHMgaHN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyB2bigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT0wLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O0dnLnByb3RvdHlwZS5pc01lc2hCYXNpY01hdGVyaWFsPSEwO3ZhciBFcj1uZXcgaWUsSU89bmV3IGF0LFlyPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1pLHRoaXMudXNhZ2U9cVMsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxpKXt0Kj10aGlzLml0ZW1TaXplLGkqPWUuaXRlbVNpemU7Zm9yKGxldCByPTAsbz10aGlzLml0ZW1TaXplO3I8bztyKyspdGhpcy5hcnJheVt0K3JdPWUuYXJyYXlbaStyXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgdm4pLGVbaSsrXT1zLnIsZVtpKytdPXMuZyxlW2krK109cy5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgYXQpLGVbaSsrXT1zLngsZVtpKytdPXMueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe2xldCBzPXRbcl07dm9pZCAwPT09cyYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLHM9bmV3IGllKSxlW2krK109cy54LGVbaSsrXT1zLnksZVtpKytdPXMuen1yZXR1cm4gdGhpc31jb3B5VmVjdG9yNHNBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe2xldCBzPXRbcl07dm9pZCAwPT09cyYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3I0c0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLHM9bmV3IGFyKSxlW2krK109cy54LGVbaSsrXT1zLnksZVtpKytdPXMueixlW2krK109cy53fXJldHVybiB0aGlzfWFwcGx5TWF0cml4Myh0KXtpZigyPT09dGhpcy5pdGVtU2l6ZSlmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylJTy5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksSU8uYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFkoZSxJTy54LElPLnkpO2Vsc2UgaWYoMz09PXRoaXMuaXRlbVNpemUpZm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspRXIuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLGUpLEVyLmFwcGx5TWF0cml4Myh0KSx0aGlzLnNldFhZWihlLEVyLngsRXIueSxFci56KTtyZXR1cm4gdGhpc31hcHBseU1hdHJpeDQodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspRXIueD10aGlzLmdldFgoZSksRXIueT10aGlzLmdldFkoZSksRXIuej10aGlzLmdldFooZSksRXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsRXIueCxFci55LEVyLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUVyLng9dGhpcy5nZXRYKGUpLEVyLnk9dGhpcy5nZXRZKGUpLEVyLno9dGhpcy5nZXRaKGUpLEVyLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKGUsRXIueCxFci55LEVyLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylFci54PXRoaXMuZ2V0WChlKSxFci55PXRoaXMuZ2V0WShlKSxFci56PXRoaXMuZ2V0WihlKSxFci50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxFci54LEVyLnksRXIueik7cmV0dXJuIHRoaXN9c2V0KHQsZT0wKXtyZXR1cm4gdGhpcy5hcnJheS5zZXQodCxlKSx0aGlzfWdldFgodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXX1zZXRYKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXT1lLHRoaXN9Z2V0WSh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMV19c2V0WSh0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXT1lLHRoaXN9Z2V0Wih0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl19c2V0Wih0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXT1lLHRoaXN9Z2V0Vyh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM119c2V0Vyh0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXT1lLHRoaXN9c2V0WFkodCxlLGkpe3JldHVybiB0aGlzLmFycmF5WzArKHQqPXRoaXMuaXRlbVNpemUpXT1lLHRoaXMuYXJyYXlbdCsxXT1pLHRoaXN9c2V0WFlaKHQsZSxpLHIpe3JldHVybiB0aGlzLmFycmF5WzArKHQqPXRoaXMuaXRlbVNpemUpXT1lLHRoaXMuYXJyYXlbdCsxXT1pLHRoaXMuYXJyYXlbdCsyXT1yLHRoaXN9c2V0WFlaVyh0LGUsaSxyLG8pe3JldHVybiB0aGlzLmFycmF5WzArKHQqPXRoaXMuaXRlbVNpemUpXT1lLHRoaXMuYXJyYXlbdCsxXT1pLHRoaXMuYXJyYXlbdCsyXT1yLHRoaXMuYXJyYXlbdCszXT1vLHRoaXN9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5hcnJheSx0aGlzLml0ZW1TaXplKS5jb3B5KHRoaXMpfXRvSlNPTigpe2xldCB0PXtpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpLG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfTtyZXR1cm4iIiE9PXRoaXMubmFtZSYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1xUyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKDAhPT10aGlzLnVwZGF0ZVJhbmdlLm9mZnNldHx8LTEhPT10aGlzLnVwZGF0ZVJhbmdlLmNvdW50KSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O1lyLnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgYWs9Y2xhc3MgZXh0ZW5kcyBZcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLGUsaSl9fSxsaz1jbGFzcyBleHRlbmRzIFlye2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDMyQXJyYXkodCksZSxpKX19OyhjbGFzcyBleHRlbmRzIFlye2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19KS5wcm90b3R5cGUuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlPSEwO3ZhciBKcj1jbGFzcyBleHRlbmRzIFlye2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgRmxvYXQzMkFycmF5KHQpLGUsaSl9fSxLOGU9MCxwYz1uZXcgUm4sR2o9bmV3IFhpLFl5PW5ldyBpZSxTbD1uZXcgVGwsUFM9bmV3IFRsLHBzPW5ldyBpZSxucj1jbGFzcyBleHRlbmRzIEVwe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpLOGUrK30pLHRoaXMudXVpZD1kdSgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITEsdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbCx0aGlzLmRyYXdSYW5nZT17c3RhcnQ6MCxjb3VudDoxLzB9LHRoaXMudXNlckRhdGE9e319Z2V0SW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleH1zZXRJbmRleCh0KXtyZXR1cm4gdGhpcy5pbmRleD1BcnJheS5pc0FycmF5KHQpP25ldyhPZGUodCk/bGs6YWspKHQsMSk6dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5hdHRyaWJ1dGVzW3RdfWFkZEdyb3VwKHQsZSxpPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Oml9KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO3ZvaWQgMCE9PWUmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKHZvaWQgMCE9PWkpe2xldCBvPShuZXcgSm8pLmdldE5vcm1hbE1hdHJpeCh0KTtpLmFwcGx5Tm9ybWFsTWF0cml4KG8pLGkubmVlZHNVcGRhdGU9ITB9bGV0IHI9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHZvaWQgMCE9PXImJihyLnRyYW5zZm9ybURpcmVjdGlvbih0KSxyLm5lZWRzVXBkYXRlPSEwKSxudWxsIT09dGhpcy5ib3VuZGluZ0JveCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSxudWxsIT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gcGMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQocGMpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gcGMubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChwYyksdGhpc31yb3RhdGVZKHQpe3JldHVybiBwYy5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KHBjKSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuIHBjLm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQocGMpLHRoaXN9dHJhbnNsYXRlKHQsZSxpKXtyZXR1cm4gcGMubWFrZVRyYW5zbGF0aW9uKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChwYyksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuIHBjLm1ha2VTY2FsZSh0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQocGMpLHRoaXN9bG9va0F0KHQpe3JldHVybiBHai5sb29rQXQodCksR2oudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoR2oubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKFl5KS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShZeS54LFl5LnksWXkueiksdGhpc31zZXRGcm9tUG9pbnRzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IG89dFtpXTtlLnB1c2goby54LG8ueSxvLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKcihlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe251bGw9PT10aGlzLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1uZXcgVGwpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ0JveC5zZXQobmV3IGllKC0xLzAsLTEvMCwtMS8wKSxuZXcgaWUoMS8wLDEvMCwxLzApKTtpZih2b2lkIDAhPT10KXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspU2wuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShlW2ldKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhwcy5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWluLFNsLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KHBzKSxwcy5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWF4LFNsLm1heCksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KHBzKSk6KHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChTbC5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChTbC5tYXgpKX1lbHNlIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogQ29tcHV0ZWQgbWluL21heCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9Y29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl7bnVsbD09PXRoaXMuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPW5ldyB4Zik7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXJldHVybiBjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgc3BoZXJlLiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdm9pZCB0aGlzLmJvdW5kaW5nU3BoZXJlLnNldChuZXcgaWUsMS8wKTtpZih0KXtsZXQgaT10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihTbC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBvPTAscz1lLmxlbmd0aDtvPHM7bysrKVBTLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVtvXSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8ocHMuYWRkVmVjdG9ycyhTbC5taW4sUFMubWluKSxTbC5leHBhbmRCeVBvaW50KHBzKSxwcy5hZGRWZWN0b3JzKFNsLm1heCxQUy5tYXgpLFNsLmV4cGFuZEJ5UG9pbnQocHMpKTooU2wuZXhwYW5kQnlQb2ludChQUy5taW4pLFNsLmV4cGFuZEJ5UG9pbnQoUFMubWF4KSk7U2wuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBvPTAscz10LmNvdW50O288cztvKyspcHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHBzKSk7aWYoZSlmb3IobGV0IG89MCxzPWUubGVuZ3RoO288cztvKyspe2xldCBhPWVbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLHU9YS5jb3VudDtjPHU7YysrKXBzLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxjKSxsJiYoWXkuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLHBzLmFkZChZeSkpLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHBzKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KHIpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLmF0dHJpYnV0ZXM7aWYobnVsbD09PXR8fHZvaWQgMD09PWUucG9zaXRpb258fHZvaWQgMD09PWUubm9ybWFsfHx2b2lkIDA9PT1lLnV2KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO2xldCBpPXQuYXJyYXkscj1lLnBvc2l0aW9uLmFycmF5LG89ZS5ub3JtYWwuYXJyYXkscz1lLnV2LmFycmF5LGE9ci5sZW5ndGgvMzt2b2lkIDA9PT1lLnRhbmdlbnQmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgWXIobmV3IEZsb2F0MzJBcnJheSg0KmEpLDQpKTtsZXQgbD1lLnRhbmdlbnQuYXJyYXksYz1bXSx1PVtdO2ZvcihsZXQgaGU9MDtoZTxhO2hlKyspY1toZV09bmV3IGllLHVbaGVdPW5ldyBpZTtsZXQgZD1uZXcgaWUscD1uZXcgaWUsaD1uZXcgaWUsZj1uZXcgYXQsbT1uZXcgYXQseD1uZXcgYXQsZz1uZXcgaWUsYj1uZXcgaWU7ZnVuY3Rpb24gRChoZSx3LEYpe2QuZnJvbUFycmF5KHIsMypoZSkscC5mcm9tQXJyYXkociwzKncpLGguZnJvbUFycmF5KHIsMypGKSxmLmZyb21BcnJheShzLDIqaGUpLG0uZnJvbUFycmF5KHMsMip3KSx4LmZyb21BcnJheShzLDIqRikscC5zdWIoZCksaC5zdWIoZCksbS5zdWIoZikseC5zdWIoZik7bGV0IHE9MS8obS54KngueS14LngqbS55KTshaXNGaW5pdGUocSl8fChnLmNvcHkocCkubXVsdGlwbHlTY2FsYXIoeC55KS5hZGRTY2FsZWRWZWN0b3IoaCwtbS55KS5tdWx0aXBseVNjYWxhcihxKSxiLmNvcHkoaCkubXVsdGlwbHlTY2FsYXIobS54KS5hZGRTY2FsZWRWZWN0b3IocCwteC54KS5tdWx0aXBseVNjYWxhcihxKSxjW2hlXS5hZGQoZyksY1t3XS5hZGQoZyksY1tGXS5hZGQoZyksdVtoZV0uYWRkKGIpLHVbd10uYWRkKGIpLHVbRl0uYWRkKGIpKX1sZXQgVD10aGlzLmdyb3VwczswPT09VC5sZW5ndGgmJihUPVt7c3RhcnQ6MCxjb3VudDppLmxlbmd0aH1dKTtmb3IobGV0IGhlPTAsdz1ULmxlbmd0aDtoZTx3OysraGUpe2xldCBGPVRbaGVdLHE9Ri5zdGFydDtmb3IobGV0IGRlPXEsWT1xK0YuY291bnQ7ZGU8WTtkZSs9MylEKGlbZGUrMF0saVtkZSsxXSxpW2RlKzJdKX1sZXQgaz1uZXcgaWUsWj1uZXcgaWUsej1uZXcgaWUsZmU9bmV3IGllO2Z1bmN0aW9uIHVlKGhlKXt6LmZyb21BcnJheShvLDMqaGUpLGZlLmNvcHkoeik7bGV0IHc9Y1toZV07ay5jb3B5KHcpLGsuc3ViKHoubXVsdGlwbHlTY2FsYXIoei5kb3QodykpKS5ub3JtYWxpemUoKSxaLmNyb3NzVmVjdG9ycyhmZSx3KTtsZXQgcT1aLmRvdCh1W2hlXSk8MD8tMToxO2xbNCpoZV09ay54LGxbNCpoZSsxXT1rLnksbFs0KmhlKzJdPWsueixsWzQqaGUrM109cX1mb3IobGV0IGhlPTAsdz1ULmxlbmd0aDtoZTx3OysraGUpe2xldCBGPVRbaGVdLHE9Ri5zdGFydDtmb3IobGV0IGRlPXEsWT1xK0YuY291bnQ7ZGU8WTtkZSs9Myl1ZShpW2RlKzBdKSx1ZShpW2RlKzFdKSx1ZShpW2RlKzJdKX19Y29tcHV0ZVZlcnRleE5vcm1hbHMoKXtsZXQgdD10aGlzLmluZGV4LGU9dGhpcy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aWYodm9pZCAwIT09ZSl7bGV0IGk9dGhpcy5nZXRBdHRyaWJ1dGUoIm5vcm1hbCIpO2lmKHZvaWQgMD09PWkpaT1uZXcgWXIobmV3IEZsb2F0MzJBcnJheSgzKmUuY291bnQpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLGkpO2Vsc2UgZm9yKGxldCBwPTAsaD1pLmNvdW50O3A8aDtwKyspaS5zZXRYWVoocCwwLDAsMCk7bGV0IHI9bmV3IGllLG89bmV3IGllLHM9bmV3IGllLGE9bmV3IGllLGw9bmV3IGllLGM9bmV3IGllLHU9bmV3IGllLGQ9bmV3IGllO2lmKHQpZm9yKGxldCBwPTAsaD10LmNvdW50O3A8aDtwKz0zKXtsZXQgZj10LmdldFgocCswKSxtPXQuZ2V0WChwKzEpLHg9dC5nZXRYKHArMik7ci5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZiksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsbSkscy5mcm9tQnVmZmVyQXR0cmlidXRlKGUseCksdS5zdWJWZWN0b3JzKHMsbyksZC5zdWJWZWN0b3JzKHIsbyksdS5jcm9zcyhkKSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxmKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxtKSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx4KSxhLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxpLnNldFhZWihmLGEueCxhLnksYS56KSxpLnNldFhZWihtLGwueCxsLnksbC56KSxpLnNldFhZWih4LGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgcD0wLGg9ZS5jb3VudDtwPGg7cCs9MylyLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxwKzApLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHArMSkscy5mcm9tQnVmZmVyQXR0cmlidXRlKGUscCsyKSx1LnN1YlZlY3RvcnMocyxvKSxkLnN1YlZlY3RvcnMocixvKSx1LmNyb3NzKGQpLGkuc2V0WFlaKHArMCx1LngsdS55LHUueiksaS5zZXRYWVoocCsxLHUueCx1LnksdS56KSxpLnNldFhZWihwKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLGkubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQsZSl7aWYoIXR8fCF0LmlzQnVmZmVyR2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LiIsdCk7dm9pZCAwPT09ZSYmKGU9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCByIGluIGkpe2lmKHZvaWQgMD09PXQuYXR0cmlidXRlc1tyXSljb250aW51ZTtsZXQgcz1pW3JdLmFycmF5LGE9dC5hdHRyaWJ1dGVzW3JdLGw9YS5hcnJheSxjPWEuaXRlbVNpemUqZSx1PU1hdGgubWluKGwubGVuZ3RoLHMubGVuZ3RoLWMpO2ZvcihsZXQgZD0wLHA9YztkPHU7ZCsrLHArKylzW3BdPWxbZF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCBlPTAsaT10LmNvdW50O2U8aTtlKyspcHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHBzLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKGUscHMueCxwcy55LHBzLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQoYSxsKXtsZXQgYz1hLmFycmF5LHU9YS5pdGVtU2l6ZSxkPWEubm9ybWFsaXplZCxwPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLGg9MCxmPTA7Zm9yKGxldCBtPTAseD1sLmxlbmd0aDttPHg7bSsrKXtoPWEuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT9sW21dKmEuZGF0YS5zdHJpZGUrYS5vZmZzZXQ6bFttXSp1O2ZvcihsZXQgZz0wO2c8dTtnKyspcFtmKytdPWNbaCsrXX1yZXR1cm4gbmV3IFlyKHAsdSxkKX1pZihudWxsPT09dGhpcy5pbmRleClyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS50b05vbkluZGV4ZWQoKTogQnVmZmVyR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4iKSx0aGlzO2xldCBlPW5ldyBucixpPXRoaXMuaW5kZXguYXJyYXkscj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBhIGluIHIpe2xldCBjPXQoclthXSxpKTtlLnNldEF0dHJpYnV0ZShhLGMpfWxldCBvPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiBvKXtsZXQgbD1bXSxjPW9bYV07Zm9yKGxldCB1PTAsZD1jLmxlbmd0aDt1PGQ7dSsrKXtsZXQgaD10KGNbdV0saSk7bC5wdXNoKGgpfWUubW9ycGhBdHRyaWJ1dGVzW2FdPWx9ZS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2xldCBzPXRoaXMuZ3JvdXBzO2ZvcihsZXQgYT0wLGw9cy5sZW5ndGg7YTxsO2ErKyl7bGV0IGM9c1thXTtlLmFkZEdyb3VwKGMuc3RhcnQsYy5jb3VudCxjLm1hdGVyaWFsSW5kZXgpfXJldHVybiBlfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQnVmZmVyR2VvbWV0cnkiLGdlbmVyYXRvcjoiQnVmZmVyR2VvbWV0cnkudG9KU09OIn19O2lmKHQudXVpZD10aGlzLnV1aWQsdC50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKHQubmFtZT10aGlzLm5hbWUpLE9iamVjdC5rZXlzKHRoaXMudXNlckRhdGEpLmxlbmd0aD4wJiYodC51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSx2b2lkIDAhPT10aGlzLnBhcmFtZXRlcnMpe2xldCBsPXRoaXMucGFyYW1ldGVycztmb3IobGV0IGMgaW4gbCl2b2lkIDAhPT1sW2NdJiYodFtjXT1sW2NdKTtyZXR1cm4gdH10LmRhdGE9e2F0dHJpYnV0ZXM6e319O2xldCBlPXRoaXMuaW5kZXg7bnVsbCE9PWUmJih0LmRhdGEuaW5kZXg9e3R5cGU6ZS5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuYXJyYXkpfSk7bGV0IGk9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgbCBpbiBpKXQuZGF0YS5hdHRyaWJ1dGVzW2xdPWlbbF0udG9KU09OKHQuZGF0YSk7bGV0IHI9e30sbz0hMTtmb3IobGV0IGwgaW4gdGhpcy5tb3JwaEF0dHJpYnV0ZXMpe2xldCBjPXRoaXMubW9ycGhBdHRyaWJ1dGVzW2xdLHU9W107Zm9yKGxldCBkPTAscD1jLmxlbmd0aDtkPHA7ZCsrKXUucHVzaChjW2RdLnRvSlNPTih0LmRhdGEpKTt1Lmxlbmd0aD4wJiYocltsXT11LG89ITApfW8mJih0LmRhdGEubW9ycGhBdHRyaWJ1dGVzPXIsdC5kYXRhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmUpO2xldCBzPXRoaXMuZ3JvdXBzO3MubGVuZ3RoPjAmJih0LmRhdGEuZ3JvdXBzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocykpKTtsZXQgYT10aGlzLmJvdW5kaW5nU3BoZXJlO3JldHVybiBudWxsIT09YSYmKHQuZGF0YS5ib3VuZGluZ1NwaGVyZT17Y2VudGVyOmEuY2VudGVyLnRvQXJyYXkoKSxyYWRpdXM6YS5yYWRpdXN9KSx0fWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5pbmRleD1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLm1vcnBoQXR0cmlidXRlcz17fSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsO2xldCBlPXt9O3RoaXMubmFtZT10Lm5hbWU7bGV0IGk9dC5pbmRleDtudWxsIT09aSYmdGhpcy5zZXRJbmRleChpLmNsb25lKGUpKTtsZXQgcj10LmF0dHJpYnV0ZXM7Zm9yKGxldCBjIGluIHIpdGhpcy5zZXRBdHRyaWJ1dGUoYyxyW2NdLmNsb25lKGUpKTtsZXQgbz10Lm1vcnBoQXR0cmlidXRlcztmb3IobGV0IGMgaW4gbyl7bGV0IHU9W10sZD1vW2NdO2ZvcihsZXQgcD0wLGg9ZC5sZW5ndGg7cDxoO3ArKyl1LnB1c2goZFtwXS5jbG9uZShlKSk7dGhpcy5tb3JwaEF0dHJpYnV0ZXNbY109dX10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXQubW9ycGhUYXJnZXRzUmVsYXRpdmU7bGV0IHM9dC5ncm91cHM7Zm9yKGxldCBjPTAsdT1zLmxlbmd0aDtjPHU7YysrKXtsZXQgZD1zW2NdO3RoaXMuYWRkR3JvdXAoZC5zdGFydCxkLmNvdW50LGQubWF0ZXJpYWxJbmRleCl9bGV0IGE9dC5ib3VuZGluZ0JveDtudWxsIT09YSYmKHRoaXMuYm91bmRpbmdCb3g9YS5jbG9uZSgpKTtsZXQgbD10LmJvdW5kaW5nU3BoZXJlO3JldHVybiBudWxsIT09bCYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bC5jbG9uZSgpKSx0aGlzLmRyYXdSYW5nZS5zdGFydD10LmRyYXdSYW5nZS5zdGFydCx0aGlzLmRyYXdSYW5nZS5jb3VudD10LmRyYXdSYW5nZS5jb3VudCx0aGlzLnVzZXJEYXRhPXQudXNlckRhdGEsdm9pZCAwIT09dC5wYXJhbWV0ZXJzJiYodGhpcy5wYXJhbWV0ZXJzPU9iamVjdC5hc3NpZ24oe30sdC5wYXJhbWV0ZXJzKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07bnIucHJvdG90eXBlLmlzQnVmZmVyR2VvbWV0cnk9ITA7dmFyIE91ZT1uZXcgUm4sWHk9bmV3IENmLFdqPW5ldyB4ZixkZj1uZXcgaWUscGY9bmV3IGllLGhmPW5ldyBpZSxxaj1uZXcgaWUsWWo9bmV3IGllLFhqPW5ldyBpZSxQTz1uZXcgaWUsUk89bmV3IGllLE9PPW5ldyBpZSxrTz1uZXcgYXQsRk89bmV3IGF0LE5PPW5ldyBhdCxRaj1uZXcgaWUsTE89bmV3IGllLFZvPWNsYXNzIGV4dGVuZHMgWGl7Y29uc3RydWN0b3IodD1uZXcgbnIsZT1uZXcgR2cpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx2b2lkIDAhPT10Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyYmKHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnNsaWNlKCkpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5JiYodGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9T2JqZWN0LmFzc2lnbih7fSx0Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeSkpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc311cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHZvaWQgMCE9PXIpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7bzxzO28rKyl7bGV0IGE9cltvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVthXT1vfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC51cGRhdGVNb3JwaFRhcmdldHMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX1yYXljYXN0KHQsZSl7bGV0IHMsaT10aGlzLmdlb21ldHJ5LHI9dGhpcy5tYXRlcmlhbCxvPXRoaXMubWF0cml4V29ybGQ7aWYodm9pZCAwIT09ciYmKG51bGw9PT1pLmJvdW5kaW5nU3BoZXJlJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLFdqLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksV2ouYXBwbHlNYXRyaXg0KG8pLCExIT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShXaikpJiYoT3VlLmNvcHkobykuaW52ZXJ0KCksWHkuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KE91ZSksbnVsbD09PWkuYm91bmRpbmdCb3h8fCExIT09WHkuaW50ZXJzZWN0c0JveChpLmJvdW5kaW5nQm94KSkpaWYoaS5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgYT1pLmluZGV4LGw9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uLGM9aS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sdT1pLm1vcnBoVGFyZ2V0c1JlbGF0aXZlLGQ9aS5hdHRyaWJ1dGVzLnV2LHA9aS5hdHRyaWJ1dGVzLnV2MixoPWkuZ3JvdXBzLGY9aS5kcmF3UmFuZ2U7aWYobnVsbCE9PWEpaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IG09MCx4PWgubGVuZ3RoO208eDttKyspe2xldCBnPWhbbV0sYj1yW2cubWF0ZXJpYWxJbmRleF07Zm9yKGxldCBrPU1hdGgubWF4KGcuc3RhcnQsZi5zdGFydCksWj1NYXRoLm1pbihhLmNvdW50LE1hdGgubWluKGcuc3RhcnQrZy5jb3VudCxmLnN0YXJ0K2YuY291bnQpKTtrPFo7ays9Myl7bGV0IHo9YS5nZXRYKGspLGZlPWEuZ2V0WChrKzEpLHVlPWEuZ2V0WChrKzIpO3M9Qk8odGhpcyxiLHQsWHksbCxjLHUsZCxwLHosZmUsdWUpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKGsvMykscy5mYWNlLm1hdGVyaWFsSW5kZXg9Zy5tYXRlcmlhbEluZGV4LGUucHVzaChzKSl9fWVsc2UgZm9yKGxldCBnPU1hdGgubWF4KDAsZi5zdGFydCksYj1NYXRoLm1pbihhLmNvdW50LGYuc3RhcnQrZi5jb3VudCk7ZzxiO2crPTMpe2xldCBEPWEuZ2V0WChnKSxUPWEuZ2V0WChnKzEpLGs9YS5nZXRYKGcrMik7cz1CTyh0aGlzLHIsdCxYeSxsLGMsdSxkLHAsRCxULGspLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKGcvMyksZS5wdXNoKHMpKX1lbHNlIGlmKHZvaWQgMCE9PWwpaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IG09MCx4PWgubGVuZ3RoO208eDttKyspe2xldCBnPWhbbV0sYj1yW2cubWF0ZXJpYWxJbmRleF07Zm9yKGxldCBrPU1hdGgubWF4KGcuc3RhcnQsZi5zdGFydCksWj1NYXRoLm1pbihsLmNvdW50LE1hdGgubWluKGcuc3RhcnQrZy5jb3VudCxmLnN0YXJ0K2YuY291bnQpKTtrPFo7ays9MylzPUJPKHRoaXMsYix0LFh5LGwsYyx1LGQscCxrLGsrMSxrKzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKGsvMykscy5mYWNlLm1hdGVyaWFsSW5kZXg9Zy5tYXRlcmlhbEluZGV4LGUucHVzaChzKSl9ZWxzZSBmb3IobGV0IGc9TWF0aC5tYXgoMCxmLnN0YXJ0KSxiPU1hdGgubWluKGwuY291bnQsZi5zdGFydCtmLmNvdW50KTtnPGI7Zys9MylzPUJPKHRoaXMscix0LFh5LGwsYyx1LGQscCxnLGcrMSxnKzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKGcvMyksZS5wdXNoKHMpKX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uIEJPKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkKXtkZi5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYykscGYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLGhmLmZyb21CdWZmZXJBdHRyaWJ1dGUocixkKTtsZXQgcD1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihvJiZwKXtQTy5zZXQoMCwwLDApLFJPLnNldCgwLDAsMCksT08uc2V0KDAsMCwwKTtmb3IobGV0IGY9MCxtPW8ubGVuZ3RoO2Y8bTtmKyspe2xldCB4PXBbZl0sZz1vW2ZdOzAhPT14JiYocWouZnJvbUJ1ZmZlckF0dHJpYnV0ZShnLGMpLFlqLmZyb21CdWZmZXJBdHRyaWJ1dGUoZyx1KSxYai5mcm9tQnVmZmVyQXR0cmlidXRlKGcsZCkscz8oUE8uYWRkU2NhbGVkVmVjdG9yKHFqLHgpLFJPLmFkZFNjYWxlZFZlY3RvcihZaix4KSxPTy5hZGRTY2FsZWRWZWN0b3IoWGoseCkpOihQTy5hZGRTY2FsZWRWZWN0b3IocWouc3ViKGRmKSx4KSxSTy5hZGRTY2FsZWRWZWN0b3IoWWouc3ViKHBmKSx4KSxPTy5hZGRTY2FsZWRWZWN0b3IoWGouc3ViKGhmKSx4KSkpfWRmLmFkZChQTykscGYuYWRkKFJPKSxoZi5hZGQoT08pfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLGRmKSxuLmJvbmVUcmFuc2Zvcm0odSxwZiksbi5ib25lVHJhbnNmb3JtKGQsaGYpKTtsZXQgaD1mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEpe2xldCBsO2lmKGw9MT09PXQuc2lkZT9pLmludGVyc2VjdFRyaWFuZ2xlKHMsbyxyLCEwLGEpOmkuaW50ZXJzZWN0VHJpYW5nbGUocixvLHMsMiE9PXQuc2lkZSxhKSxudWxsPT09bClyZXR1cm4gbnVsbDtMTy5jb3B5KGEpLExPLmFwcGx5TWF0cml4NChuLm1hdHJpeFdvcmxkKTtsZXQgYz1lLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhMTyk7cmV0dXJuIGM8ZS5uZWFyfHxjPmUuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6TE8uY2xvbmUoKSxvYmplY3Q6bn19KG4sdCxlLGksZGYscGYsaGYsUWopO2lmKGgpe2EmJihrTy5mcm9tQnVmZmVyQXR0cmlidXRlKGEsYyksRk8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHUpLE5PLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxkKSxoLnV2PWxvLmdldFVWKFFqLGRmLHBmLGhmLGtPLEZPLE5PLG5ldyBhdCkpLGwmJihrTy5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksRk8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLE5PLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxkKSxoLnV2Mj1sby5nZXRVVihRaixkZixwZixoZixrTyxGTyxOTyxuZXcgYXQpKTtsZXQgZj17YTpjLGI6dSxjOmQsbm9ybWFsOm5ldyBpZSxtYXRlcmlhbEluZGV4OjB9O2xvLmdldE5vcm1hbChkZixwZixoZixmLm5vcm1hbCksaC5mYWNlPWZ9cmV0dXJuIGh9Vm8ucHJvdG90eXBlLmlzTWVzaD0hMDt2YXIgV2c9Y2xhc3MgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcih0PTEsZT0xLGk9MSxyPTEsbz0xLHM9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkJveEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOnQsaGVpZ2h0OmUsZGVwdGg6aSx3aWR0aFNlZ21lbnRzOnIsaGVpZ2h0U2VnbWVudHM6byxkZXB0aFNlZ21lbnRzOnN9O2xldCBhPXRoaXM7cj1NYXRoLmZsb29yKHIpLG89TWF0aC5mbG9vcihvKSxzPU1hdGguZmxvb3Iocyk7bGV0IGw9W10sYz1bXSx1PVtdLGQ9W10scD0wLGg9MDtmdW5jdGlvbiBmKG0seCxnLGIsRCxULGssWix6LGZlLHVlKXtsZXQgaGU9VC96LHc9ay9mZSxGPVQvMixxPWsvMixLPVovMixkZT16KzEsWT1mZSsxLGFlPTAsbGU9MCxJZT1uZXcgaWU7Zm9yKGxldCB2ZT0wO3ZlPFk7dmUrKyl7bGV0IERlPXZlKnctcTtmb3IobGV0IG50PTA7bnQ8ZGU7bnQrKylJZVttXT0obnQqaGUtRikqYixJZVt4XT1EZSpELEllW2ddPUssYy5wdXNoKEllLngsSWUueSxJZS56KSxJZVttXT0wLEllW3hdPTAsSWVbZ109Wj4wPzE6LTEsdS5wdXNoKEllLngsSWUueSxJZS56KSxkLnB1c2gobnQveiksZC5wdXNoKDEtdmUvZmUpLGFlKz0xfWZvcihsZXQgdmU9MDt2ZTxmZTt2ZSsrKWZvcihsZXQgRGU9MDtEZTx6O0RlKyspe2xldCBndD1wK0RlK2RlKih2ZSsxKSxVZT1wKyhEZSsxKStkZSoodmUrMSksQWU9cCsoRGUrMSkrZGUqdmU7bC5wdXNoKHArRGUrZGUqdmUsZ3QsQWUpLGwucHVzaChndCxVZSxBZSksbGUrPTZ9YS5hZGRHcm91cChoLGxlLHVlKSxoKz1sZSxwKz1hZX1mKCJ6IiwieSIsIngiLC0xLC0xLGksZSx0LHMsbywwKSxmKCJ6IiwieSIsIngiLDEsLTEsaSxlLC10LHMsbywxKSxmKCJ4IiwieiIsInkiLDEsMSx0LGksZSxyLHMsMiksZigieCIsInoiLCJ5IiwxLC0xLHQsaSwtZSxyLHMsMyksZigieCIsInkiLCJ6IiwxLC0xLHQsZSxpLHIsbyw0KSxmKCJ4IiwieSIsInoiLC0xLC0xLHQsZSwtaSxyLG8sNSksdGhpcy5zZXRJbmRleChsKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKcihjLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgSnIodSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgSnIoZCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgV2codC53aWR0aCx0LmhlaWdodCx0LmRlcHRoLHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQuZGVwdGhTZWdtZW50cyl9fTtmdW5jdGlvbiBmYihuKXtsZXQgdD17fTtmb3IobGV0IGUgaW4gbil7dFtlXT17fTtmb3IobGV0IGkgaW4gbltlXSl7bGV0IHI9bltlXVtpXTt0W2VdW2ldPXImJihyLmlzQ29sb3J8fHIuaXNNYXRyaXgzfHxyLmlzTWF0cml4NHx8ci5pc1ZlY3RvcjJ8fHIuaXNWZWN0b3IzfHxyLmlzVmVjdG9yNHx8ci5pc1RleHR1cmV8fHIuaXNRdWF0ZXJuaW9uKT9yLmNsb25lKCk6QXJyYXkuaXNBcnJheShyKT9yLnNsaWNlKCk6cn19cmV0dXJuIHR9ZnVuY3Rpb24ganMobil7bGV0IHQ9e307Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPWZiKG5bZV0pO2ZvcihsZXQgciBpbiBpKXRbcl09aVtyXX1yZXR1cm4gdH12YXIgSjhlPXtjbG9uZTpmYixtZXJnZTpqc30sRHA9Y2xhc3MgZXh0ZW5kcyBoc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iLHRoaXMuZnJhZ21lbnRTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMS4wLCAwLjAsIDAuMCwgMS4wICk7XG59Iix0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfSx0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfSx0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwLHRoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExLHRoaXMuZ2xzbFZlcnNpb249bnVsbCx2b2lkIDAhPT10JiYodm9pZCAwIT09dC5hdHRyaWJ1dGVzJiZjb25zb2xlLmVycm9yKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSx0aGlzLnNldFZhbHVlcyh0KSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1mYih0LnVuaWZvcm1zKSx0aGlzLmRlZmluZXM9T2JqZWN0LmFzc2lnbih7fSx0LmRlZmluZXMpLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMubGlnaHRzPXQubGlnaHRzLHRoaXMuY2xpcHBpbmc9dC5jbGlwcGluZyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7ZS5nbHNsVmVyc2lvbj10aGlzLmdsc2xWZXJzaW9uLGUudW5pZm9ybXM9e307Zm9yKGxldCByIGluIHRoaXMudW5pZm9ybXMpe2xldCBzPXRoaXMudW5pZm9ybXNbcl0udmFsdWU7ZS51bmlmb3Jtc1tyXT1zJiZzLmlzVGV4dHVyZT97dHlwZToidCIsdmFsdWU6cy50b0pTT04odCkudXVpZH06cyYmcy5pc0NvbG9yP3t0eXBlOiJjIix2YWx1ZTpzLmdldEhleCgpfTpzJiZzLmlzVmVjdG9yMj97dHlwZToidjIiLHZhbHVlOnMudG9BcnJheSgpfTpzJiZzLmlzVmVjdG9yMz97dHlwZToidjMiLHZhbHVlOnMudG9BcnJheSgpfTpzJiZzLmlzVmVjdG9yND97dHlwZToidjQiLHZhbHVlOnMudG9BcnJheSgpfTpzJiZzLmlzTWF0cml4Mz97dHlwZToibTMiLHZhbHVlOnMudG9BcnJheSgpfTpzJiZzLmlzTWF0cml4ND97dHlwZToibTQiLHZhbHVlOnMudG9BcnJheSgpfTp7dmFsdWU6c319T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKGUuZGVmaW5lcz10aGlzLmRlZmluZXMpLGUudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLGUuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtsZXQgaT17fTtmb3IobGV0IHIgaW4gdGhpcy5leHRlbnNpb25zKSEwPT09dGhpcy5leHRlbnNpb25zW3JdJiYoaVtyXT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiYoZS5leHRlbnNpb25zPWkpLGV9fTtEcC5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDt2YXIgUVM9Y2xhc3MgZXh0ZW5kcyBYaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDYW1lcmEiLHRoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyBSbix0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IFJuLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IFJufWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoLWVbOF0sLWVbOV0sLWVbMTBdKS5ub3JtYWxpemUoKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7c3VwZXIudXBkYXRlV29ybGRNYXRyaXgodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX07UVMucHJvdG90eXBlLmlzQ2FtZXJhPSEwO3ZhciBXcz1jbGFzcyBleHRlbmRzIFFTe2NvbnN0cnVjdG9yKHQ9NTAsZT0xLGk9LjEscj0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9aSx0aGlzLmZhcj1yLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9ZSx0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLmZvdj10LmZvdix0aGlzLnpvb209dC56b29tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy5mb2N1cz10LmZvY3VzLHRoaXMuYXNwZWN0PXQuYXNwZWN0LHRoaXMudmlldz1udWxsPT09dC52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXMuZmlsbUdhdWdlPXQuZmlsbUdhdWdlLHRoaXMuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQsdGhpc31zZXRGb2NhbExlbmd0aCh0KXtsZXQgZT0uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90O3RoaXMuZm92PTIqaDgqTWF0aC5hdGFuKGUpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldEZvY2FsTGVuZ3RoKCl7bGV0IHQ9TWF0aC50YW4oLjUqRGoqdGhpcy5mb3YpO3JldHVybi41KnRoaXMuZ2V0RmlsbUhlaWdodCgpL3R9Z2V0RWZmZWN0aXZlRk9WKCl7cmV0dXJuIDIqaDgqTWF0aC5hdGFuKE1hdGgudGFuKC41KkRqKnRoaXMuZm92KS90aGlzLnpvb20pfWdldEZpbG1XaWR0aCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZSpNYXRoLm1pbih0aGlzLmFzcGVjdCwxKX1nZXRGaWxtSGVpZ2h0KCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlL01hdGgubWF4KHRoaXMuYXNwZWN0LDEpfXNldFZpZXdPZmZzZXQodCxlLGkscixvLHMpe3RoaXMuYXNwZWN0PXQvZSxudWxsPT09dGhpcy52aWV3JiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9ZSx0aGlzLnZpZXcub2Zmc2V0WD1pLHRoaXMudmlldy5vZmZzZXRZPXIsdGhpcy52aWV3LndpZHRoPW8sdGhpcy52aWV3LmhlaWdodD1zLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNsZWFyVmlld09mZnNldCgpe251bGwhPT10aGlzLnZpZXcmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9dXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpe2xldCB0PXRoaXMubmVhcixlPXQqTWF0aC50YW4oLjUqRGoqdGhpcy5mb3YpL3RoaXMuem9vbSxpPTIqZSxyPXRoaXMuYXNwZWN0Kmksbz0tLjUqcixzPXRoaXMudmlldztpZihudWxsIT09dGhpcy52aWV3JiZ0aGlzLnZpZXcuZW5hYmxlZCl7bGV0IGw9cy5mdWxsV2lkdGgsYz1zLmZ1bGxIZWlnaHQ7bys9cy5vZmZzZXRYKnIvbCxlLT1zLm9mZnNldFkqaS9jLHIqPXMud2lkdGgvbCxpKj1zLmhlaWdodC9jfWxldCBhPXRoaXMuZmlsbU9mZnNldDswIT09YSYmKG8rPXQqYS90aGlzLmdldEZpbG1XaWR0aCgpKSx0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKG8sbytyLGUsZS1pLHQsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LmZvdj10aGlzLmZvdixlLm9iamVjdC56b29tPXRoaXMuem9vbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsZS5vYmplY3QuZm9jdXM9dGhpcy5mb2N1cyxlLm9iamVjdC5hc3BlY3Q9dGhpcy5hc3BlY3QsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlLm9iamVjdC5maWxtR2F1Z2U9dGhpcy5maWxtR2F1Z2UsZS5vYmplY3QuZmlsbU9mZnNldD10aGlzLmZpbG1PZmZzZXQsZX19O1dzLnByb3RvdHlwZS5pc1BlcnNwZWN0aXZlQ2FtZXJhPSEwO3ZhciBLUz1jbGFzcyBleHRlbmRzIFhpe2NvbnN0cnVjdG9yKHQsZSxpKXtpZihzdXBlcigpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsITAhPT1pLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkN1YmVDYW1lcmE6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBhbiBpbnN0YW5jZSBvZiBXZWJHTEN1YmVSZW5kZXJUYXJnZXQgYXMgdGhpcmQgcGFyYW1ldGVyLiIpO3RoaXMucmVuZGVyVGFyZ2V0PWk7bGV0IHI9bmV3IFdzKDkwLDEsdCxlKTtyLmxheWVycz10aGlzLmxheWVycyxyLnVwLnNldCgwLC0xLDApLHIubG9va0F0KG5ldyBpZSgxLDAsMCkpLHRoaXMuYWRkKHIpO2xldCBvPW5ldyBXcyg5MCwxLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgaWUoLTEsMCwwKSksdGhpcy5hZGQobyk7bGV0IHM9bmV3IFdzKDkwLDEsdCxlKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLDAsMSkscy5sb29rQXQobmV3IGllKDAsMSwwKSksdGhpcy5hZGQocyk7bGV0IGE9bmV3IFdzKDkwLDEsdCxlKTthLmxheWVycz10aGlzLmxheWVycyxhLnVwLnNldCgwLDAsLTEpLGEubG9va0F0KG5ldyBpZSgwLC0xLDApKSx0aGlzLmFkZChhKTtsZXQgbD1uZXcgV3MoOTAsMSx0LGUpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3IGllKDAsMCwxKSksdGhpcy5hZGQobCk7bGV0IGM9bmV3IFdzKDkwLDEsdCxlKTtjLmxheWVycz10aGlzLmxheWVycyxjLnVwLnNldCgwLC0xLDApLGMubG9va0F0KG5ldyBpZSgwLDAsLTEpKSx0aGlzLmFkZChjKX11cGRhdGUodCxlKXtudWxsPT09dGhpcy5wYXJlbnQmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtsZXQgaT10aGlzLnJlbmRlclRhcmdldCxbcixvLHMsYSxsLGNdPXRoaXMuY2hpbGRyZW4sdT10LnhyLmVuYWJsZWQsZD10LmdldFJlbmRlclRhcmdldCgpO3QueHIuZW5hYmxlZD0hMTtsZXQgcD1pLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO2kudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQoaSwwKSx0LnJlbmRlcihlLHIpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMSksdC5yZW5kZXIoZSxvKSx0LnNldFJlbmRlclRhcmdldChpLDIpLHQucmVuZGVyKGUscyksdC5zZXRSZW5kZXJUYXJnZXQoaSwzKSx0LnJlbmRlcihlLGEpLHQuc2V0UmVuZGVyVGFyZ2V0KGksNCksdC5yZW5kZXIoZSxsKSxpLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXAsdC5zZXRSZW5kZXJUYXJnZXQoaSw1KSx0LnJlbmRlcihlLGMpLHQuc2V0UmVuZGVyVGFyZ2V0KGQpLHQueHIuZW5hYmxlZD11LGkudGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlPSEwfX0sbWI9Y2xhc3MgZXh0ZW5kcyBIb3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyx1KXtzdXBlcih0PXZvaWQgMCE9PXQ/dDpbXSxlPXZvaWQgMCE9PWU/ZTozMDEsaSxyLG8scyxhLGwsYyx1KSx0aGlzLmZsaXBZPSExfWdldCBpbWFnZXMoKXtyZXR1cm4gdGhpcy5pbWFnZX1zZXQgaW1hZ2VzKHQpe3RoaXMuaW1hZ2U9dH19O21iLnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwO3ZhciBjaz1jbGFzcyBleHRlbmRzIFdhe2NvbnN0cnVjdG9yKHQsZSxpKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEN1YmVSZW5kZXJUYXJnZXQ6IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkiKSxlPWkpLHN1cGVyKHQsdCxlKSx0aGlzLnRleHR1cmU9bmV3IG1iKHZvaWQgMCwoZT1lfHx7fSkubWFwcGluZyxlLndyYXBTLGUud3JhcFQsZS5tYWdGaWx0ZXIsZS5taW5GaWx0ZXIsZS5mb3JtYXQsZS50eXBlLGUuYW5pc290cm9weSxlLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9dm9pZCAwIT09ZS5nZW5lcmF0ZU1pcG1hcHMmJmUuZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9dm9pZCAwIT09ZS5taW5GaWx0ZXI/ZS5taW5GaWx0ZXI6R3N9ZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUodCxlKXt0aGlzLnRleHR1cmUudHlwZT1lLnR5cGUsdGhpcy50ZXh0dXJlLmZvcm1hdD1nYSx0aGlzLnRleHR1cmUuZW5jb2Rpbmc9ZS5lbmNvZGluZyx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWUuZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5taW5GaWx0ZXIsdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcj1lLm1hZ0ZpbHRlcjtsZXQgaV91bmlmb3Jtcz17dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0saV92ZXJ0ZXhTaGFkZXI9IlxuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0dmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHtcblxuXHRcdFx0XHRcdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXG5cdFx0XHRcdFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0XHRcdFx0XHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cblx0XHRcdFx0fVxuXHRcdFx0IixpX2ZyYWdtZW50U2hhZGVyPSJcblxuXHRcdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7XG5cblx0XHRcdFx0dmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcblxuXHRcdFx0XHQjaW5jbHVkZSA8Y29tbW9uPlxuXG5cdFx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRcdHZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRcdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApO1xuXG5cdFx0XHRcdH1cblx0XHRcdCIscj1uZXcgV2coNSw1LDUpLG89bmV3IERwKHtuYW1lOiJDdWJlbWFwRnJvbUVxdWlyZWN0Iix1bmlmb3JtczpmYihpX3VuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6aV92ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6aV9mcmFnbWVudFNoYWRlcixzaWRlOjEsYmxlbmRpbmc6MH0pO28udW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPWU7bGV0IHM9bmV3IFZvKHIsbyksYT1lLm1pbkZpbHRlcjtyZXR1cm4gMTAwOD09PWUubWluRmlsdGVyJiYoZS5taW5GaWx0ZXI9R3MpLG5ldyBLUygxLDEwLHRoaXMpLnVwZGF0ZSh0LHMpLGUubWluRmlsdGVyPWEscy5nZW9tZXRyeS5kaXNwb3NlKCkscy5tYXRlcmlhbC5kaXNwb3NlKCksdGhpc31jbGVhcih0LGUsaSxyKXtsZXQgbz10LmdldFJlbmRlclRhcmdldCgpO2ZvcihsZXQgcz0wO3M8NjtzKyspdC5zZXRSZW5kZXJUYXJnZXQodGhpcyxzKSx0LmNsZWFyKGUsaSxyKTt0LnNldFJlbmRlclRhcmdldChvKX19O2NrLnByb3RvdHlwZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD0hMDt2YXIgS2o9bmV3IGllLHRHZT1uZXcgaWUsbkdlPW5ldyBKbyx1dT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBpZSgxLDAsMCksZT0wKXt0aGlzLm5vcm1hbD10LHRoaXMuY29uc3RhbnQ9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PWUsdGhpc31zZXRDb21wb25lbnRzKHQsZSxpLHIpe3JldHVybiB0aGlzLm5vcm1hbC5zZXQodCxlLGkpLHRoaXMuY29uc3RhbnQ9cix0aGlzfXNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD0tZS5kb3QodGhpcy5ub3JtYWwpLHRoaXN9c2V0RnJvbUNvcGxhbmFyUG9pbnRzKHQsZSxpKXtsZXQgcj1Lai5zdWJWZWN0b3JzKGksZSkuY3Jvc3ModEdlLnN1YlZlY3RvcnModCxlKSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQocix0KSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodC5ub3JtYWwpLHRoaXMuY29uc3RhbnQ9dC5jb25zdGFudCx0aGlzfW5vcm1hbGl6ZSgpe2xldCB0PTEvdGhpcy5ub3JtYWwubGVuZ3RoKCk7cmV0dXJuIHRoaXMubm9ybWFsLm11bHRpcGx5U2NhbGFyKHQpLHRoaXMuY29uc3RhbnQqPXQsdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy5jb25zdGFudCo9LTEsdGhpcy5ub3JtYWwubmVnYXRlKCksdGhpc31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHRoaXMubm9ybWFsLmRvdCh0KSt0aGlzLmNvbnN0YW50fWRpc3RhbmNlVG9TcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuY2VudGVyKS10LnJhZGl1c31wcm9qZWN0UG9pbnQodCxlKXtyZXR1cm4gZS5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5kaXN0YW5jZVRvUG9pbnQodCkpLmFkZCh0KX1pbnRlcnNlY3RMaW5lKHQsZSl7bGV0IGk9dC5kZWx0YShLaikscj10aGlzLm5vcm1hbC5kb3QoaSk7aWYoMD09PXIpcmV0dXJuIDA9PT10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KT9lLmNvcHkodC5zdGFydCk6bnVsbDtsZXQgbz0tKHQuc3RhcnQuZG90KHRoaXMubm9ybWFsKSt0aGlzLmNvbnN0YW50KS9yO3JldHVybiBvPDB8fG8+MT9udWxsOmUuY29weShpKS5tdWx0aXBseVNjYWxhcihvKS5hZGQodC5zdGFydCl9aW50ZXJzZWN0c0xpbmUodCl7bGV0IGU9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCksaT10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmVuZCk7cmV0dXJuIGU8MCYmaT4wfHxpPDAmJmU+MH1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1jb3BsYW5hclBvaW50KHQpe3JldHVybiB0LmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX1hcHBseU1hdHJpeDQodCxlKXtsZXQgaT1lfHxuR2UuZ2V0Tm9ybWFsTWF0cml4KHQpLHI9dGhpcy5jb3BsYW5hclBvaW50KEtqKS5hcHBseU1hdHJpeDQodCksbz10aGlzLm5vcm1hbC5hcHBseU1hdHJpeDMoaSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuY29uc3RhbnQ9LXIuZG90KG8pLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLmNvbnN0YW50LT10LmRvdCh0aGlzLm5vcm1hbCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubm9ybWFsLmVxdWFscyh0aGlzLm5vcm1hbCkmJnQuY29uc3RhbnQ9PT10aGlzLmNvbnN0YW50fWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX07dXUucHJvdG90eXBlLmlzUGxhbmU9ITA7dmFyIFp5PW5ldyB4ZixWTz1uZXcgaWUsZ2I9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgdXUsZT1uZXcgdXUsaT1uZXcgdXUscj1uZXcgdXUsbz1uZXcgdXUscz1uZXcgdXUpe3RoaXMucGxhbmVzPVt0LGUsaSxyLG8sc119c2V0KHQsZSxpLHIsbyxzKXtsZXQgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkoaSksYVszXS5jb3B5KHIpLGFbNF0uY29weShvKSxhWzVdLmNvcHkocyksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspZVtpXS5jb3B5KHQucGxhbmVzW2ldKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuZWxlbWVudHMscj1pWzBdLG89aVsxXSxzPWlbMl0sYT1pWzNdLGw9aVs0XSxjPWlbNV0sdT1pWzZdLGQ9aVs3XSxwPWlbOF0saD1pWzldLGY9aVsxMF0sbT1pWzExXSx4PWlbMTJdLGc9aVsxM10sYj1pWzE0XSxEPWlbMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1yLGQtbCxtLXAsRC14KS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStyLGQrbCxtK3AsRCt4KS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStvLGQrYyxtK2gsRCtnKS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1vLGQtYyxtLWgsRC1nKS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1zLGQtdSxtLWYsRC1iKS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStzLGQrdSxtK2YsRCtiKS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7bGV0IGU9dC5nZW9tZXRyeTtyZXR1cm4gbnVsbD09PWUuYm91bmRpbmdTcGhlcmUmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksWnkuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKFp5KX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiBaeS5jZW50ZXIuc2V0KDAsMCwwKSxaeS5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsWnkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShaeSl9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuY2VudGVyLHI9LXQucmFkaXVzO2ZvcihsZXQgbz0wO288NjtvKyspaWYoZVtvXS5kaXN0YW5jZVRvUG9pbnQoaSk8cilyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspe2xldCByPWVbaV07aWYoVk8ueD1yLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LFZPLnk9ci5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSxWTy56PXIubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosci5kaXN0YW5jZVRvUG9pbnQoVk8pPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWlmKGVbaV0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fTtmdW5jdGlvbiBrZGUoKXtsZXQgbj1udWxsLHQ9ITEsZT1udWxsLGk9bnVsbDtmdW5jdGlvbiByKG8scyl7ZShvLHMpLGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7ITAhPT10JiZudWxsIT09ZSYmKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUociksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtuLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24obyl7ZT1vfSxzZXRDb250ZXh0OmZ1bmN0aW9uKG8pe249b319fWZ1bmN0aW9uIGlHZShuLHQpe2xldCBlPXQuaXNXZWJHTDIsaT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksaS5nZXQoYyl9LHJlbW92ZTpmdW5jdGlvbihjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9aS5nZXQoYyk7dSYmKG4uZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxpLmRlbGV0ZShjKSl9LHVwZGF0ZTpmdW5jdGlvbihjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IHA9aS5nZXQoYyk7cmV0dXJuIHZvaWQoKCFwfHxwLnZlcnNpb248Yy52ZXJzaW9uKSYmaS5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSkpfWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgZD1pLmdldChjKTt2b2lkIDA9PT1kP2kuc2V0KGMsZnVuY3Rpb24oYyx1KXtsZXQgZD1jLmFycmF5LHA9Yy51c2FnZSxoPW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKHUsaCksbi5idWZmZXJEYXRhKHUsZCxwKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZj01MTI2O3JldHVybiBkIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2Y9NTEyNjpkIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpkIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/ZT9mPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmY9NTEyMzpkIGluc3RhbmNlb2YgSW50MTZBcnJheT9mPTUxMjI6ZCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2Y9NTEyNTpkIGluc3RhbmNlb2YgSW50MzJBcnJheT9mPTUxMjQ6ZCBpbnN0YW5jZW9mIEludDhBcnJheT9mPTUxMjA6KGQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxkIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZj01MTIxKSx7YnVmZmVyOmgsdHlwZTpmLGJ5dGVzUGVyRWxlbWVudDpkLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX0oYyx1KSk6ZC52ZXJzaW9uPGMudmVyc2lvbiYmKGZ1bmN0aW9uKGMsdSxkKXtsZXQgcD11LmFycmF5LGg9dS51cGRhdGVSYW5nZTtuLmJpbmRCdWZmZXIoZCxjKSwtMT09PWguY291bnQ/bi5idWZmZXJTdWJEYXRhKGQsMCxwKTooZT9uLmJ1ZmZlclN1YkRhdGEoZCxoLm9mZnNldCpwLkJZVEVTX1BFUl9FTEVNRU5ULHAsaC5vZmZzZXQsaC5jb3VudCk6bi5idWZmZXJTdWJEYXRhKGQsaC5vZmZzZXQqcC5CWVRFU19QRVJfRUxFTUVOVCxwLnN1YmFycmF5KGgub2Zmc2V0LGgub2Zmc2V0K2guY291bnQpKSxoLmNvdW50PS0xKX0oZC5idWZmZXIsYyx1KSxkLnZlcnNpb249Yy52ZXJzaW9uKX19fXZhciBaUz1jbGFzcyBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBsYW5lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSx3aWR0aFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6cn07bGV0IG89dC8yLHM9ZS8yLGE9TWF0aC5mbG9vcihpKSxsPU1hdGguZmxvb3IociksYz1hKzEsdT1sKzEsZD10L2EscD1lL2wsaD1bXSxmPVtdLG09W10seD1bXTtmb3IobGV0IGc9MDtnPHU7ZysrKXtsZXQgYj1nKnAtcztmb3IobGV0IEQ9MDtEPGM7RCsrKWYucHVzaChEKmQtbywtYiwwKSxtLnB1c2goMCwwLDEpLHgucHVzaChEL2EpLHgucHVzaCgxLWcvbCl9Zm9yKGxldCBnPTA7ZzxsO2crKylmb3IobGV0IGI9MDtiPGE7YisrKXtsZXQgVD1iK2MqKGcrMSksaz1iKzErYyooZysxKSxaPWIrMStjKmc7aC5wdXNoKGIrYypnLFQsWiksaC5wdXNoKFQsayxaKX10aGlzLnNldEluZGV4KGgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEpyKGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBKcihtLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKcih4LDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBaUyh0LndpZHRoLHQuaGVpZ2h0LHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzKX19LERpPXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmIixhbHBoYW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixhbHBoYXRlc3RfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkO1xuI2VuZGlmIixhbHBoYXRlc3RfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQVRFU1Rcblx0dW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XG4jZW5kaWYiLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsYW9tYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDtcblx0dW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTtcbiNlbmRpZiIsYmVnaW5fdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTsiLGJlZ2lubm9ybWFsX3ZlcnRleDoidmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTtcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApO1xuI2VuZGlmIixic2RmczoidmVjMyBCUkRGX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IGRvdFZIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7XG5cdHJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7XG59XG5mbG9hdCBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xuXHRmbG9hdCBnbCA9IGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdHJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTtcbn1cbmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZGVub20gPSBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wO1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTtcbn1cbnZlYzMgQlJERl9HR1goIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBmMCwgZjkwLCBkb3RWSCApO1xuXHRmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XG5cdGZsb2F0IEQgPSBEX0dHWCggYWxwaGEsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBWICogRCApO1xufVxudmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGNvbnN0IGZsb2F0IExVVF9TSVpFID0gNjQuMDtcblx0Y29uc3QgZmxvYXQgTFVUX1NDQUxFID0gKCBMVVRfU0laRSAtIDEuMCApIC8gTFVUX1NJWkU7XG5cdGNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggTiwgViApICk7XG5cdHZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODU0Mzk4NSArICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTtcblx0ZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTtcblx0ZmxvYXQgdiA9IGEgLyBiO1xuXHRmbG9hdCB0aGV0YV9zaW50aGV0YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7XG5cdHJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTtcbn1cbnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0IGluIHZlYzMgcmVjdENvb3Jkc1sgNCBdICkge1xuXHR2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIGxpZ2h0Tm9ybWFsID0gY3Jvc3MoIHYxLCB2MiApO1xuXHRpZiggZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApO1xuXHR2ZWMzIFQxLCBUMjtcblx0VDEgPSBub3JtYWxpemUoIFYgLSBOICogZG90KCBWLCBOICkgKTtcblx0VDIgPSAtIGNyb3NzKCBOLCBUMSApO1xuXHRtYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApO1xuXHR2ZWMzIGNvb3Jkc1sgNCBdO1xuXHRjb29yZHNbIDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApO1xuXHRjb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApO1xuXHRjb29yZHNbIDIgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMiBdIC0gUCApO1xuXHRjb29yZHNbIDMgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMyBdIC0gUCApO1xuXHRjb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTtcblx0Y29vcmRzWyAxIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7XG5cdGNvb3Jkc1sgMiBdID0gbm9ybWFsaXplKCBjb29yZHNbIDIgXSApO1xuXHRjb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTtcblx0dmVjMyB2ZWN0b3JGb3JtRmFjdG9yID0gdmVjMyggMC4wICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jkc1sgMyBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTtcblx0ZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7XG5cdHJldHVybiB2ZWMzKCByZXN1bHQgKTtcbn1cbmZsb2F0IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKSB7XG5cdHJldHVybiAwLjI1O1xufVxuZmxvYXQgRF9CbGlublBob25nKCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5ILCBzaGluaW5lc3MgKTtcbn1cbnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIDEuMCwgZG90VkggKTtcblx0ZmxvYXQgRyA9IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKTtcblx0ZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbiNpZiBkZWZpbmVkKCBVU0VfU0hFRU4gKVxuZmxvYXQgRF9DaGFybGllKCBmbG9hdCByb3VnaG5lc3MsIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHRmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhO1xuXHRmbG9hdCBjb3MyaCA9IGRvdE5IICogZG90Tkg7XG5cdGZsb2F0IHNpbjJoID0gbWF4KCAxLjAgLSBjb3MyaCwgMC4wMDc4MTI1ICk7XG5cdHJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApO1xufVxuZmxvYXQgVl9OZXViZWx0KCBmbG9hdCBkb3ROViwgZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggMS4wIC8gKCA0LjAgKiAoIGRvdE5MICsgZG90TlYgLSBkb3ROTCAqIGRvdE5WICkgKSApO1xufVxudmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkge1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgRCA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7XG5cdGZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApO1xuXHRyZXR1cm4gc2hlZW5Db2xvciAqICggRCAqIFYgKTtcbn1cbiNlbmRpZiIsYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApO1xuXHRcdHZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZOID0gc3VyZl9ub3JtO1xuXHRcdHZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTtcblx0XHR2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XG5cdFx0ZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247XG5cdFx0dmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xuXHR9XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZlYzQgcGxhbmU7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRpZiAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgZGlzY2FyZDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjaWYgVU5JT05fQ0xJUFBJTkdfUExBTkVTIDwgTlVNX0NMSVBQSU5HX1BMQU5FU1xuXHRcdGJvb2wgY2xpcHBlZCA9IHRydWU7XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRcdGNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcblx0dW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dkNsaXBQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWYiLGNvbG9yX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0ZGlmZnVzZUNvbG9yICo9IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dkNvbG9yID0gdmVjNCggMS4wICk7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZDb2xvciA9IHZlYzMoIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvciAqPSBjb2xvcjtcbiNlbmRpZlxuI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SXG5cdHZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xuI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODZcbiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjZcbiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDdcbiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNVxuI2RlZmluZSBFUFNJTE9OIDFlLTZcbiNpZm5kZWYgc2F0dXJhdGVcbiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG4jZGVmaW5lIHdoaXRlQ29tcGxlbWVudCggYSApICggMS4wIC0gc2F0dXJhdGUoIGEgKSApXG5mbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9XG5mbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH1cbmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH1cbmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfVxuZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH1cbmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7XG5cdGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1Mztcblx0aGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7XG5cdHJldHVybiBmcmFjdCggc2luKCBzbiApICogYyApO1xufVxuI2lmZGVmIEhJR0hfUFJFQ0lTSU9OXG5cdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9XG4jZWxzZVxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7XG5cdFx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTtcblx0XHRyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7XG5cdH1cbiNlbmRpZlxuc3RydWN0IEluY2lkZW50TGlnaHQge1xuXHR2ZWMzIGNvbG9yO1xuXHR2ZWMzIGRpcmVjdGlvbjtcblx0Ym9vbCB2aXNpYmxlO1xufTtcbnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XG5cdHZlYzMgZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBkaXJlY3RTcGVjdWxhcjtcblx0dmVjMyBpbmRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgaW5kaXJlY3RTcGVjdWxhcjtcbn07XG5zdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7XG5cdHZlYzMgcG9zaXRpb247XG5cdHZlYzMgbm9ybWFsO1xuXHR2ZWMzIHZpZXdEaXI7XG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR2ZWMzIGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxubWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7XG5cdG1hdDMgdG1wO1xuXHR0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTtcblx0dG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XG5cdHRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApO1xuXHRyZXR1cm4gdG1wO1xufVxuZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHtcblx0dmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApO1xuXHRyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTtcbn1cbmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkge1xuXHRyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7XG59XG52ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkge1xuXHRmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcblx0ZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRyZXR1cm4gdmVjMiggdSwgdiApO1xufSIsY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OiIjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHQjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjBcblx0I2RlZmluZSBjdWJlVVZfbWluTWlwTGV2ZWwgNC4wXG5cdCNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wXG5cdCNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjBcblx0ZmxvYXQgZ2V0RmFjZSggdmVjMyBkaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyBhYnNEaXJlY3Rpb24gPSBhYnMoIGRpcmVjdGlvbiApO1xuXHRcdGZsb2F0IGZhY2UgPSAtIDEuMDtcblx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XG5cdFx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnggPiAwLjAgPyAwLjAgOiAzLjA7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi56ID4gMC4wID8gMi4wIDogNS4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNlO1xuXHR9XG5cdHZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkge1xuXHRcdHZlYzIgdXY7XG5cdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIC0gZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9XG5cdFx0cmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTtcblx0fVxuXHR2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkge1xuXHRcdGZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7XG5cdFx0bWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApO1xuXHRcdGZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7XG5cdFx0ZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTtcblx0XHR2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41O1xuXHRcdGlmICggZmFjZSA+IDIuMCApIHtcblx0XHRcdHV2LnkgKz0gZmFjZVNpemU7XG5cdFx0XHRmYWNlIC09IDMuMDtcblx0XHR9XG5cdFx0dXYueCArPSBmYWNlICogZmFjZVNpemU7XG5cdFx0aWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7XG5cdFx0XHR1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTtcblx0XHR9XG5cdFx0dXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7XG5cdFx0dXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTtcblx0XHR1diAqPSB0ZXhlbFNpemU7XG5cdFx0cmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjtcblx0fVxuXHQjZGVmaW5lIHIwIDEuMFxuXHQjZGVmaW5lIHYwIDAuMzM5XG5cdCNkZWZpbmUgbTAgLSAyLjBcblx0I2RlZmluZSByMSAwLjhcblx0I2RlZmluZSB2MSAwLjI3NlxuXHQjZGVmaW5lIG0xIC0gMS4wXG5cdCNkZWZpbmUgcjQgMC40XG5cdCNkZWZpbmUgdjQgMC4wNDZcblx0I2RlZmluZSBtNCAyLjBcblx0I2RlZmluZSByNSAwLjMwNVxuXHQjZGVmaW5lIHY1IDAuMDE2XG5cdCNkZWZpbmUgbTUgMy4wXG5cdCNkZWZpbmUgcjYgMC4yMVxuXHQjZGVmaW5lIHY2IDAuMDAzOFxuXHQjZGVmaW5lIG02IDQuMFxuXHRmbG9hdCByb3VnaG5lc3NUb01pcCggZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdGZsb2F0IG1pcCA9IDAuMDtcblx0XHRpZiAoIHJvdWdobmVzcyA+PSByMSApIHtcblx0XHRcdG1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7XG5cdFx0XHRtaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkge1xuXHRcdFx0bWlwID0gKCByNCAtIHJvdWdobmVzcyApICogKCBtNSAtIG00ICkgLyAoIHI0IC0gcjUgKSArIG00O1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNiApIHtcblx0XHRcdG1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7XHRcdH1cblx0XHRyZXR1cm4gbWlwO1xuXHR9XG5cdHZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHRmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7XG5cdFx0ZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTtcblx0XHRmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7XG5cdFx0dmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApO1xuXHRcdGlmICggbWlwRiA9PSAwLjAgKSB7XG5cdFx0XHRyZXR1cm4gdmVjNCggY29sb3IwLCAxLjAgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApO1xuXHRcdFx0cmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7XG5cdFx0fVxuXHR9XG4jZW5kaWYiLGRlZmF1bHRub3JtYWxfdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsO1xuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdG1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7XG5cdHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcblx0dHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XG4jaWZkZWYgRkxJUF9TSURFRFxuXHR0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBGTElQX1NJREVEXG5cdFx0dHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzO1xuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTtcblx0dG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmIixlbmNvZGluZ3NfZnJhZ21lbnQ6ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6InZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7XG59IixlbnZtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2ZWMzIGNhbWVyYVRvRnJhZztcblx0XHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0fVxuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYIClcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApXG5cdFx0b3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0I2VuZGlmXG5cdFxuI2VuZGlmIixlbnZtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0dW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7XG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHRcblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQIClcblx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRlJBQ1RJT05cblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2VuZGlmXG5cdHZlYzMgZ2V0SUJMSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdFx0I2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgd29ybGROb3JtYWwsIDEuMCApO1xuXHRcdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdmVjMyggMC4wICk7XG5cdFx0I2VuZGlmXG5cdH1cblx0dmVjMyBnZXRJQkxSYWRpYW5jZSggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdCNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzMgcmVmbGVjdFZlYztcblx0XHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHRcdHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApO1xuXHRcdFx0XHRyZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0cmVmbGVjdFZlYyA9IHJlZnJhY3QoIC0gdmlld0Rpciwgbm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0cmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xuXHRcdFx0cmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHZlYzMoIDAuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWYiLGVudm1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xuXHQjZWxzZVxuXHRcdHZlYzMgY2FtZXJhVG9WZXJ0ZXg7XG5cdFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcblx0XHRcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTtcblx0XHR9XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWYiLGZvZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZGb2dEZXB0aCA9IC0gbXZQb3NpdGlvbi56O1xuI2VuZGlmIixmb2dfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuI2VuZGlmIixmb2dfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IDEuMCAtIGV4cCggLSBmb2dEZW5zaXR5ICogZm9nRGVuc2l0eSAqIHZGb2dEZXB0aCAqIHZGb2dEZXB0aCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7XG5cdCNlbmRpZlxuXHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBmb2dDb2xvciwgZm9nRmFjdG9yICk7XG4jZW5kaWYiLGZvZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0ZPR1xuXHR1bmlmb3JtIHZlYzMgZm9nQ29sb3I7XG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZcbiNlbmRpZiIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDtcbiNlbmRpZlxudmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkge1xuXHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApO1xuXHR2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApO1xuXHQjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdFx0cmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApO1xuXHQjZWxzZVxuXHRcdHJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7XG5cdCNlbmRpZlxufSIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG4jZW5kaWYiLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDoidmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7XG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApO1xuR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7XG5iYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcbmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsO1xuYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xudkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcbnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcblx0dkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuZmxvYXQgZG90Tkw7XG52ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcbnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG52SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0dkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0dkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWYiLGxpZ2h0c19wYXJzX2JlZ2luOiJ1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdztcbnVuaWZvcm0gdmVjMyBhbWJpZW50TGlnaHRDb2xvcjtcbnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07XG52ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkge1xuXHRmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56O1xuXHR2ZWMzIHJlc3VsdCA9IHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDMgXSAqIDIuMCAqIDAuNTExNjY0ICogeDtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNiBdICogKCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7XG5cdHJldHVybiByZXN1bHQ7XG59XG52ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBsaWdodFByb2JlICk7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBhbWJpZW50TGlnaHRDb2xvcjtcblx0cmV0dXJuIGlycmFkaWFuY2U7XG59XG5mbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHtcblx0I2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0XHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdFx0aWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCApIHtcblx0XHRcdGRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmO1xuXHQjZWxzZVxuXHRcdGlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgJiYgZGVjYXlFeHBvbmVudCA+IDAuMCApIHtcblx0XHRcdHJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7XG5cdFx0fVxuXHRcdHJldHVybiAxLjA7XG5cdCNlbmRpZlxufVxuZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7XG5cdHJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHRsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0bGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0bGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0bGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdGlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkge1xuXHRcdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdFx0bGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247XG5cdFx0XHRsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApO1xuXHRcdFx0bGlnaHQudmlzaWJsZSA9ICggbGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcblx0XHRcdGxpZ2h0LnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7XG5cdFx0dmVjMyBjb2xvcjtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodDtcblx0fTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzE7XHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjtcblx0dW5pZm9ybSBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHRzWyBOVU1fUkVDVF9BUkVBX0xJR0hUUyBdO1xuI2VuZGlmXG4jaWYgTlVNX0hFTUlfTElHSFRTID4gMFxuXHRzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIHNreUNvbG9yO1xuXHRcdHZlYzMgZ3JvdW5kQ29sb3I7XG5cdH07XG5cdHVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdO1xuXHR2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRcdGZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41O1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7XG5cdFx0cmV0dXJuIGlycmFkaWFuY2U7XG5cdH1cbiNlbmRpZiIsbGlnaHRzX3Rvb25fZnJhZ21lbnQ6IlRvb25NYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7IixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OiJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbnN0cnVjdCBUb29uTWF0ZXJpYWwge1xuXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcbn07XG52b2lkIFJFX0RpcmVjdF9Ub29uKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1Rvb24oIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9Ub29uXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfVG9vblxuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waG9uZ19mcmFnbWVudDoiQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtcbm1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBzcGVjdWxhcjtcbm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzO1xubWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7IixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDoidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG5zdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7XG5cdGZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG59O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9CbGlublBob25nXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZ1xuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDoiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xudmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApO1xuZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7XG5tYXRlcmlhbC5yb3VnaG5lc3MgPSBtYXgoIHJvdWdobmVzc0ZhY3RvciwgMC4wNTI1ICk7bWF0ZXJpYWwucm91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xubWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApO1xuI2lmZGVmIElPUlxuXHQjaWZkZWYgU1BFQ1VMQVJcblx0XHRmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5O1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7XG5cdFx0I2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUFxuXHRcdFx0c3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTtcblx0XHQjZW5kaWZcblx0XHQjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVBcblx0XHRcdHNwZWN1bGFyQ29sb3JGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckNvbG9yTWFwLCB2VXYgKS5yZ2I7XG5cdFx0I2VuZGlmXG5cdFx0bWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSBtaXgoIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCAxLjAsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wO1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApO1xuXHRcdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggbWluKCBwb3cyKCAoIGlvciAtIDEuMCApIC8gKCBpb3IgKyAxLjAgKSApICogc3BlY3VsYXJDb2xvckZhY3RvciwgdmVjMyggMS4wICkgKSAqIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcbiNlbHNlXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIDAuMDQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG5cdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBjbGVhcmNvYXQ7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdEY5MCA9IDEuMDtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRSb3VnaG5lc3NNYXAsIHZVdiApLnk7XG5cdCNlbmRpZlxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1NIRUVOXG5cdG1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yO1xuXHQjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVBcblx0XHRtYXRlcmlhbC5zaGVlbkNvbG9yICo9IHRleHR1cmUyRCggc2hlZW5Db2xvck1hcCwgdlV2ICkucmdiO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApO1xuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBzaGVlblJvdWdobmVzc01hcCwgdlV2ICkuYTtcblx0I2VuZGlmXG4jZW5kaWYiLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHRmbG9hdCByb3VnaG5lc3M7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJGOTA7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2xlYXJjb2F0O1xuXHRcdGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcblx0XHR2ZWMzIGNsZWFyY29hdEYwO1xuXHRcdGZsb2F0IGNsZWFyY29hdEY5MDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHR2ZWMzIHNoZWVuQ29sb3I7XG5cdFx0ZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNlbmRpZlxufTtcbnZlYzMgY2xlYXJjb2F0U3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTtcbnZlYzMgc2hlZW5TcGVjdWxhciA9IHZlYzMoIDAuMCApO1xuZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCByMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcblx0ZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTtcblx0ZmxvYXQgYiA9IHJvdWdobmVzcyA8IDAuMjUgPyA0NC4wICogcjIgLSAyMy43ICogcm91Z2huZXNzICsgMy4yNiA6IDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyO1xuXHRmbG9hdCBERyA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTtcblx0cmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTtcbn1cbnZlYzIgREZHQXBwcm94KCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcblx0Y29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7XG5cdGNvbnN0IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xuXHR2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxO1xuXHRmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcblx0dmVjMiBmYWIgPSB2ZWMyKCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xuXHRyZXR1cm4gZmFiO1xufVxudmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0dmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55O1xufVxudm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7XG5cdHZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHR2ZWMzIEZzc0VzcyA9IHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XG5cdGZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7XG5cdGZsb2F0IEVtcyA9IDEuMCAtIEVzcztcblx0dmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XHR2ZWMzIEZtcyA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcblx0c2luZ2xlU2NhdHRlciArPSBGc3NFc3M7XG5cdG11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwucm91Z2huZXNzO1xuXHRcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xuXHRcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcdFx0cmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0dmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0XHR2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTtcblx0XHR2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTtcblx0XHRtYXQzIG1JbnYgPSBtYXQzKFxuXHRcdFx0dmVjMyggdDEueCwgMCwgdDEueSApLFxuXHRcdFx0dmVjMyggICAgMCwgMSwgICAgMCApLFxuXHRcdFx0dmVjMyggdDEueiwgMCwgdDEudyApXG5cdFx0KTtcblx0XHR2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTtcblx0fVxuI2VuZGlmXG52b2lkIFJFX0RpcmVjdF9QaHlzaWNhbCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGZsb2F0IGRvdE5MY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdFx0dmVjMyBjY0lycmFkaWFuY2UgPSBkb3ROTGNjICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0Y2xlYXJjb2F0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NoZWVuKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc2hlZW5Db2xvciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQpIHtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRjbGVhcmNvYXRTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIEVudmlyb25tZW50QlJERiggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBtYXRlcmlhbC5zaGVlbkNvbG9yICogSUJMU2hlZW5CUkRGKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHR2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBtdWx0aVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2UgPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTtcblx0Y29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTtcblx0dmVjMyBkaWZmdXNlID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSAoIHNpbmdsZVNjYXR0ZXJpbmcgKyBtdWx0aVNjYXR0ZXJpbmcgKSApO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9QaHlzaWNhbFxuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcdFx0UkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhclx0XHRSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsXG5mbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7XG59IixsaWdodHNfZnJhZ21lbnRfYmVnaW46IlxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uO1xuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsO1xuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0Z2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdztcblx0I2VuZGlmXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTtcblx0XHRnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApXG5cdFx0cG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRTcG90TGlnaHQgc3BvdExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKVxuXHRcdHNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdO1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApXG5cdFx0ZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxuXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07XG5cdFx0UkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdHZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHRpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApXG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcblx0XHRcdGlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0dmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7XG4jZW5kaWYiLGxpZ2h0c19mcmFnbWVudF9tYXBzOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0I2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbGlnaHRzX2ZyYWdtZW50X2VuZDoiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdFJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdFJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHRnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHRcdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHQjZW5kaWZcbiNlbmRpZiIsbG9nZGVwdGhidWZfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7XG5cdFx0dklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7XG5cdCNlbHNlXG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHNhbXBsZWREaWZmdXNlQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdCNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRVxuXHRcdHNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApO1xuXHQjZW5kaWZcblx0ZGlmZnVzZUNvbG9yICo9IHNhbXBsZWREaWZmdXNlQ29sb3I7XG4jZW5kaWYiLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxuXHR2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0ZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0FMUEhBTUFQXG5cdGRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZztcbiNlbmRpZiIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuI2VuZGlmXG4jaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9mcmFnbWVudDoiZmxvYXQgbWV0YWxuZXNzRmFjdG9yID0gbWV0YWxuZXNzO1xuI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dmVjNCB0ZXhlbE1ldGFsbmVzcyA9IHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTtcblx0bWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XG4jZW5kaWYiLG1vcnBobm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0b2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0aWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHRcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xuXHQjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkVcblx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgTU9SUEhUQVJHRVRTX0NPVU5UIF07XG5cdFx0dW5pZm9ybSBzYW1wbGVyMkRBcnJheSBtb3JwaFRhcmdldHNUZXh0dXJlO1xuXHRcdHVuaWZvcm0gdmVjMiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZTtcblx0XHR2ZWMzIGdldE1vcnBoKCBjb25zdCBpbiBpbnQgdmVydGV4SW5kZXgsIGNvbnN0IGluIGludCBtb3JwaFRhcmdldEluZGV4LCBjb25zdCBpbiBpbnQgb2Zmc2V0LCBjb25zdCBpbiBpbnQgc3RyaWRlICkge1xuXHRcdFx0ZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCB0ZXhlbEluZGV4IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCApO1xuXHRcdFx0ZmxvYXQgeCA9IHRleGVsSW5kZXggLSB5ICogbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueDtcblx0XHRcdHZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTtcblx0XHRcdHJldHVybiB0ZXh0dXJlKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWICkueHl6O1xuXHRcdH1cblx0I2Vsc2Vcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07XG5cdFx0I2Vsc2Vcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIixtb3JwaHRhcmdldF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbmRpZlxuXHRcdH1cblx0I2Vsc2Vcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHRcdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdFx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiJmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDtcbiNpZmRlZiBGTEFUX1NIQURFRFxuXHR2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCBjcm9zcyggZmR4LCBmZHkgKSApO1xuI2Vsc2Vcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIHZOb3JtYWwgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2ZWMzIHRhbmdlbnQgPSBub3JtYWxpemUoIHZUYW5nZW50ICk7XG5cdFx0dmVjMyBiaXRhbmdlbnQgPSBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XG5cdFx0XHRiaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xuXHRcdCNlbmRpZlxuXHRcdCNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKVxuXHRcdFx0bWF0MyB2VEJOID0gbWF0MyggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7Iixub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRub3JtYWwgPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdG5vcm1hbCA9IC0gbm9ybWFsO1xuXHQjZW5kaWZcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdG1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcblx0I2Vsc2Vcblx0XHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIG1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcblx0I2VuZGlmXG4jZWxpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApXG5cdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApO1xuI2VuZGlmIixub3JtYWxfcGFyc19mcmFnbWVudDoiI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX3BhcnNfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixub3JtYWxfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTtcblx0XHR2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuI2VuZGlmXG4jaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XG4jZW5kaWZcbiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApXG5cdHZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHtcblx0XHR2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XG5cdFx0dmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTtcblx0XHR2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApO1xuXHRcdHZlYzMgTiA9IHN1cmZfbm9ybTtcblx0XHR2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApO1xuXHRcdHZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7XG5cdFx0dmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDtcblx0XHR2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55O1xuXHRcdGZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7XG5cdFx0ZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7XG5cdH1cbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjoiI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDtcbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOiIjaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcblx0dmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0Y2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0Y2xlYXJjb2F0Tm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogY2xlYXJjb2F0TWFwTiApO1xuXHQjZWxzZVxuXHRcdGNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlO1xuI2VuZGlmIixvdXRwdXRfZnJhZ21lbnQ6IiNpZmRlZiBPUEFRVUVcbmRpZmZ1c2VDb2xvci5hID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuZGlmZnVzZUNvbG9yLmEgKj0gdHJhbnNtaXNzaW9uQWxwaGEgKyAwLjE7XG4jZW5kaWZcbmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7IixwYWNraW5nOiJ2ZWMzIHBhY2tOb3JtYWxUb1JHQiggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41O1xufVxudmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7XG5cdHJldHVybiAyLjAgKiByZ2IueHl6IC0gMS4wO1xufVxuY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjtcbmNvbnN0IHZlYzMgUGFja0ZhY3RvcnMgPSB2ZWMzKCAyNTYuICogMjU2LiAqIDI1Ni4sIDI1Ni4gKiAyNTYuLCAyNTYuICk7XG5jb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTtcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuO1xudmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xuXHRyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4O1x0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcbn1cbmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XG5cdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTtcbn1cbnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTtcblx0cmV0dXJuIHZlYzQoIHIueCAtIHIueSAvIDI1NS4wLCByLnksIHIueiAtIHIudyAvIDI1NS4wLCByLncgKTtcbn1cbnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHtcblx0cmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7XG59XG5mbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XG59XG5mbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjtcbn1cbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTtcbn1cbmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTtcbn0iLHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ6IiNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBXG5cdGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XG4jZW5kaWYiLHByb2plY3RfdmVydGV4OiJ2ZWM0IG12UG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0bXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcbiNlbmRpZlxubXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOyIsZGl0aGVyaW5nX2ZyYWdtZW50OiIjaWZkZWYgRElUSEVSSU5HXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBESVRIRVJJTkdcblx0dmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7XG5cdFx0ZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xuXHRcdHZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7XG5cdFx0ZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTtcblx0XHRyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCO1xuXHR9XG4jZW5kaWYiLHJvdWdobmVzc21hcF9mcmFnbWVudDoiZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xuI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcblx0cm91Z2huZXNzRmFjdG9yICo9IHRleGVsUm91Z2huZXNzLmc7XG4jZW5kaWYiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdGZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0cmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7XG5cdH1cblx0dmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7XG5cdFx0cmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApO1xuXHR9XG5cdGZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApe1xuXHRcdGZsb2F0IG9jY2x1c2lvbiA9IDEuMDtcblx0XHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApO1xuXHRcdGZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7XG5cdFx0aWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHtcblx0XHRcdGZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDtcblx0XHRcdGZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7XG5cdFx0XHRmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApO1x0XHRcdHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApO1x0XHRcdG9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApO1xuXHRcdH1cblx0XHRyZXR1cm4gb2NjbHVzaW9uO1xuXHR9XG5cdGZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7XG5cdFx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeDIgPSBkeDAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTIgPSBkeTAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeDMgPSBkeDEgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTMgPSBkeTEgLyAyLjA7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAoIDEuMCAvIDE3LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4ID0gdGV4ZWxTaXplLng7XG5cdFx0XHRmbG9hdCBkeSA9IHRleGVsU2l6ZS55O1xuXHRcdFx0dmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5O1xuXHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApO1xuXHRcdFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcblx0XHRcdHNoYWRvdyA9IChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnggKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueCApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnkgKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueSApICtcblx0XHRcdFx0bWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0XHQgIGYueCApLFxuXHRcdFx0XHRcdCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0XHQgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdFx0ICBmLnggKSxcblx0XHRcdFx0XHQgZi55IClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXG5cdFx0XHRzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZWxzZVxuXHRcdFx0c2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gc2hhZG93O1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICo9IHNjYWxlVG9DdWJlO1xuXHRcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciA9IHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogPiAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCA9IDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7XG5cdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTtcblx0XHR2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejtcblx0XHRmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApO1x0XHRkcCArPSBzaGFkb3dCaWFzO1xuXHRcdHZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcblx0XHRcdHZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsc2hhZG93bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRyaXhbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHZlYzMgc2hhZG93V29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdHZlYzQgc2hhZG93V29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dlNwb3RTaGFkb3dDb29yZFsgaSBdID0gc3BvdFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBwb2ludExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDoiZmxvYXQgZ2V0U2hhZG93TWFzaygpIHtcblx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHQjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNlbmRpZlxuXHRyZXR1cm4gc2hhZG93O1xufSIsc2tpbmJhc2VfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApO1xuXHRtYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTtcblx0bWF0NCBib25lTWF0WiA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC56ICk7XG5cdG1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApO1xuI2VuZGlmIixza2lubmluZ19wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDtcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXhJbnZlcnNlO1xuXHQjaWZkZWYgQk9ORV9URVhUVVJFXG5cdFx0dW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7XG5cdFx0dW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdGZsb2F0IGogPSBpICogNC4wO1xuXHRcdFx0ZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCB5ID0gZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcblx0XHRcdGZsb2F0IGR4ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0ZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5cdFx0XHR5ID0gZHkgKiAoIHkgKyAwLjUgKTtcblx0XHRcdHZlYzQgdjEgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDAuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjMgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjQgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDMuNSApLCB5ICkgKTtcblx0XHRcdG1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07XG5cdFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0bWF0NCBib25lID0gYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWYiLHNraW5uaW5nX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHR2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTtcblx0c2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55O1xuXHRza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejtcblx0c2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7XG5cdHRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7XG4jZW5kaWYiLHNraW5ub3JtYWxfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueCAqIGJvbmVNYXRYO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQudyAqIGJvbmVNYXRXO1xuXHRza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDtcblx0b2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG9iamVjdFRhbmdlbnQgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNlbmRpZlxuI2VuZGlmIixzcGVjdWxhcm1hcF9mcmFnbWVudDoiZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDtcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dmVjNCB0ZXhlbFNwZWN1bGFyID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7XG5cdHNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7XG4jZWxzZVxuXHRzcGVjdWxhclN0cmVuZ3RoID0gMS4wO1xuI2VuZGlmIixzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xuI2VuZGlmIix0b25lbWFwcGluZ19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjaWZuZGVmIHNhdHVyYXRlXG4jZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xudmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0cmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjtcbn1cbnZlYzMgUmVpbmhhcmRUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcblx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciAvICggdmVjMyggMS4wICkgKyBjb2xvciApICk7XG59XG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRjb2xvciA9IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcblx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcbn1cbnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7XG5cdHZlYzMgYSA9IHYgKiAoIHYgKyAwLjAyNDU3ODYgKSAtIDAuMDAwMDkwNTM3O1xuXHR2ZWMzIGIgPSB2ICogKCAwLjk4MzcyOSAqIHYgKyAwLjQzMjk1MTAgKSArIDAuMjM4MDgxO1xuXHRyZXR1cm4gYSAvIGI7XG59XG52ZWMzIEFDRVNGaWxtaWNUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29uc3QgbWF0MyBBQ0VTSW5wdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoIDAuNTk3MTksIDAuMDc2MDAsIDAuMDI4NDAgKSxcdFx0dmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLFxuXHRcdHZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKVxuXHQpO1xuXHRjb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoICAxLjYwNDc1LCAtMC4xMDIwOCwgLTAuMDAzMjcgKSxcdFx0dmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLFxuXHRcdHZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKVxuXHQpO1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlIC8gMC42O1xuXHRjb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yO1xuXHRjb2xvciA9IFJSVEFuZE9EVEZpdCggY29sb3IgKTtcblx0Y29sb3IgPSBBQ0VTT3V0cHV0TWF0ICogY29sb3I7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgKTtcbn1cbnZlYzMgQ3VzdG9tVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7IHJldHVybiBjb2xvcjsgfSIsdHJhbnNtaXNzaW9uX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHRmbG9hdCB0cmFuc21pc3Npb25BbHBoYSA9IDEuMDtcblx0ZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uO1xuXHRmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7XG5cdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdFx0dHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcblx0XHR0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7XG5cdCNlbmRpZlxuXHR2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7XG5cdHZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHR2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oXG5cdFx0biwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLFxuXHRcdHBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLFxuXHRcdGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0dG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApO1xuXHR0cmFuc21pc3Npb25BbHBoYSA9IG1peCggdHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCB0cmFuc21pc3Npb25GYWN0b3IgKTtcbiNlbmRpZiIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uO1xuXHR1bmlmb3JtIGZsb2F0IHRoaWNrbmVzcztcblx0dW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHR1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjtcblx0I2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0cmFuc21pc3Npb25NYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RISUNLTkVTU01BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDtcblx0I2VuZGlmXG5cdHVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDtcblx0dW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4O1xuXHR1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDtcblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4ICkge1xuXHRcdHZlYzMgcmVmcmFjdGlvblZlY3RvciA9IHJlZnJhY3QoIC0gdiwgbm9ybWFsaXplKCBuICksIDEuMCAvIGlvciApO1xuXHRcdHZlYzMgbW9kZWxTY2FsZTtcblx0XHRtb2RlbFNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnogPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAyIF0ueHl6ICkgKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCByZWZyYWN0aW9uVmVjdG9yICkgKiB0aGlja25lc3MgKiBtb2RlbFNjYWxlO1xuXHR9XG5cdGZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkge1xuXHRcdHJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApO1xuXHR9XG5cdHZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7XG5cdFx0ZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApO1xuXHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRMb2RFWFQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdHZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHtcblx0XHRpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkge1xuXHRcdFx0cmV0dXJuIHJhZGlhbmNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdFx0dmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApO1x0XHRcdHJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7XG5cdFx0fVxuXHR9XG5cdHZlYzQgZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbiggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IsXG5cdFx0Y29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gdmVjMyBwb3NpdGlvbiwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCxcblx0XHRjb25zdCBpbiBtYXQ0IHZpZXdNYXRyaXgsIGNvbnN0IGluIG1hdDQgcHJvak1hdHJpeCwgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsXG5cdFx0Y29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkge1xuXHRcdHZlYzMgdHJhbnNtaXNzaW9uUmF5ID0gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXggKTtcblx0XHR2ZWMzIHJlZnJhY3RlZFJheUV4aXQgPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcblx0XHR2ZWM0IG5kY1BvcyA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNCggcmVmcmFjdGVkUmF5RXhpdCwgMS4wICk7XG5cdFx0dmVjMiByZWZyYWN0aW9uQ29vcmRzID0gbmRjUG9zLnh5IC8gbmRjUG9zLnc7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XG5cdFx0dmVjNCB0cmFuc21pdHRlZExpZ2h0ID0gZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCByZWZyYWN0aW9uQ29vcmRzLCByb3VnaG5lc3MsIGlvciApO1xuXHRcdHZlYzMgYXR0ZW51YXRlZENvbG9yID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggdHJhbnNtaXR0ZWRMaWdodC5yZ2IsIGxlbmd0aCggdHJhbnNtaXNzaW9uUmF5ICksIGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0XHR2ZWMzIEYgPSBFbnZpcm9ubWVudEJSREYoIG4sIHYsIHNwZWN1bGFyQ29sb3IsIHNwZWN1bGFyRjkwLCByb3VnaG5lc3MgKTtcblx0XHRyZXR1cm4gdmVjNCggKCAxLjAgLSBGICkgKiBhdHRlbnVhdGVkQ29sb3IgKiBkaWZmdXNlQ29sb3IsIHRyYW5zbWl0dGVkTGlnaHQuYSApO1xuXHR9XG4jZW5kaWYiLHV2X3BhcnNfZnJhZ21lbnQ6IiNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2O1xuI2VuZGlmIix1dl9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9VVlxuXHQjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZXG5cdFx0dmVjMiB2VXY7XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMyIHZVdjtcblx0I2VuZGlmXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZiIsdXZfdmVydGV4OiIjaWZkZWYgVVNFX1VWXG5cdHZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG4jZW5kaWYiLHV2Ml9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG5cdHVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07XG4jZW5kaWYiLHV2Ml92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2VXYyID0gKCB1djJUcmFuc2Zvcm0gKiB2ZWMzKCB1djIsIDEgKSApLnh5O1xuI2VuZGlmIix3b3JsZHBvc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OIClcblx0dmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0XHR3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuXHQjZW5kaWZcblx0d29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiNlbmRpZiIsYmFja2dyb3VuZF92ZXJ0OiJ2YXJ5aW5nIHZlYzIgdlV2O1xudW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xudm9pZCBtYWluKCkge1xuXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApO1xufSIsYmFja2dyb3VuZF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7XG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHQyRCwgdlV2ICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7XG59IixjdWJlX2ZyYWc6IiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dkhpZ2hQcmVjaXNpb25aVyA9IGdsX1Bvc2l0aW9uLnp3O1xufSIsZGVwdGhfZnJhZzoiI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdFx0ZGlmZnVzZUNvbG9yLmEgPSBvcGFjaXR5O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdGZsb2F0IGZyYWdDb29yZFogPSAwLjUgKiB2SGlnaFByZWNpc2lvblpXWzBdIC8gdkhpZ2hQcmVjaXNpb25aV1sxXSArIDAuNTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApO1xuXHQjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDFcblx0XHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTtcblx0I2VuZGlmXG59IixkaXN0YW5jZVJHQkFfdmVydDoiI2RlZmluZSBESVNUQU5DRVxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbn0iLGRpc3RhbmNlUkdCQV9mcmFnOiIjZGVmaW5lIERJU1RBTkNFXG51bmlmb3JtIHZlYzMgcmVmZXJlbmNlUG9zaXRpb247XG51bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTtcbnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7XG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7XG5cdGRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTtcblx0ZGlzdCA9IHNhdHVyYXRlKCBkaXN0ICk7XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApO1xufSIsZXF1aXJlY3RfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cbn0iLGVxdWlyZWN0X2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGxpbmVkYXNoZWRfdmVydDoidW5pZm9ybSBmbG9hdCBzY2FsZTtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdHZMaW5lRGlzdGFuY2UgPSBzY2FsZSAqIGxpbmVEaXN0YW5jZTtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixsaW5lZGFzaGVkX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG59IixtZXNoYmFzaWNfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HIClcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHR2ZWM0IGxpZ2h0TWFwVGV4ZWw9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobGFtYmVydF92ZXJ0OiIjZGVmaW5lIExBTUJFUlRcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hsYW1iZXJ0X2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcblx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrO1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2htYXRjYXBfdmVydDoiI2RlZmluZSBNQVRDQVBcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbn0iLG1lc2htYXRjYXBfZnJhZzoiI2RlZmluZSBNQVRDQVBcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgbWF0Y2FwO1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHR2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcblx0dmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApO1xuXHR2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApO1xuXHR2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7XG5cdCNpZmRlZiBVU0VfTUFUQ0FQXG5cdFx0dmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApO1xuXHQjZWxzZVxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgPSB2ZWM0KCB2ZWMzKCBtaXgoIDAuMiwgMC44LCB1di55ICkgKSwgMS4wICk7XG5cdCNlbmRpZlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaG5vcm1hbF92ZXJ0OiIjZGVmaW5lIE5PUk1BTFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZlxufSIsbWVzaG5vcm1hbF9mcmFnOiIjZGVmaW5lIE5PUk1BTFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XG59IixtZXNocGhvbmdfdmVydDoiI2RlZmluZSBQSE9OR1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaHBob25nX2ZyYWc6IiNkZWZpbmUgUEhPTkdcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSB2ZWMzIHNwZWN1bGFyO1xudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaHBoeXNpY2FsX3ZlcnQ6IiNkZWZpbmUgU1RBTkRBUkRcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG4jZW5kaWZcbn0iLG1lc2hwaHlzaWNhbF9mcmFnOiIjZGVmaW5lIFNUQU5EQVJEXG4jaWZkZWYgUEhZU0lDQUxcblx0I2RlZmluZSBJT1Jcblx0I2RlZmluZSBTUEVDVUxBUlxuI2VuZGlmXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzO1xudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWZkZWYgSU9SXG5cdHVuaWZvcm0gZmxvYXQgaW9yO1xuI2VuZGlmXG4jaWZkZWYgU1BFQ1VMQVJcblx0dW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTtcblx0dW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyQ29sb3JNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0dW5pZm9ybSB2ZWMzIHNoZWVuQ29sb3I7XG5cdHVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Sb3VnaG5lc3NNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgdG90YWxEaWZmdXNlID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcblx0dmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xuXHQjaW5jbHVkZSA8dHJhbnNtaXNzaW9uX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0ZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7XG5cdFx0b3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRmbG9hdCBkb3ROVmNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHR2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApO1xuXHRcdG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogKCAxLjAgLSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBGY2MgKSArIGNsZWFyY29hdFNwZWN1bGFyICogbWF0ZXJpYWwuY2xlYXJjb2F0O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2h0b29uX3ZlcnQ6IiNkZWZpbmUgVE9PTlxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2h0b29uX2ZyYWc6IiNkZWZpbmUgVE9PTlxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Z3JhZGllbnRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIscG9pbnRzX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9pbnRTaXplID0gc2l6ZTtcblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIscG9pbnRzX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIsc2hhZG93X3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsc2hhZG93X2ZyYWc6InVuaWZvcm0gdmVjMyBjb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59IixzcHJpdGVfdmVydDoidW5pZm9ybSBmbG9hdCByb3RhdGlvbjtcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHR2ZWMyIHNjYWxlO1xuXHRzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTtcblx0c2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7XG5cdCNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTtcblx0XHRpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejtcblx0I2VuZGlmXG5cdHZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7XG5cdHZlYzIgcm90YXRlZFBvc2l0aW9uO1xuXHRyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdHJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcblx0bXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHNwcml0ZV9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59In0sQnQ9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IHZuKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IEpvfSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBKb30sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxpb3I6e3ZhbHVlOjEuNX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3IGF0KDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgdm4oMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgdm4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IEpvfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgdm4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBhdCguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgSm99fX0sU2Q9e2Jhc2ljOnt1bmlmb3JtczpqcyhbQnQuY29tbW9uLEJ0LnNwZWN1bGFybWFwLEJ0LmVudm1hcCxCdC5hb21hcCxCdC5saWdodG1hcCxCdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6RGkubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RGkubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOmpzKFtCdC5jb21tb24sQnQuc3BlY3VsYXJtYXAsQnQuZW52bWFwLEJ0LmFvbWFwLEJ0LmxpZ2h0bWFwLEJ0LmVtaXNzaXZlbWFwLEJ0LmZvZyxCdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgdm4oMCl9fV0pLHZlcnRleFNoYWRlcjpEaS5tZXNobGFtYmVydF92ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3JtczpqcyhbQnQuY29tbW9uLEJ0LnNwZWN1bGFybWFwLEJ0LmVudm1hcCxCdC5hb21hcCxCdC5saWdodG1hcCxCdC5lbWlzc2l2ZW1hcCxCdC5idW1wbWFwLEJ0Lm5vcm1hbG1hcCxCdC5kaXNwbGFjZW1lbnRtYXAsQnQuZm9nLEJ0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyB2bigwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyB2bigxMTE4NDgxKX0sc2hpbmluZXNzOnt2YWx1ZTozMH19XSksdmVydGV4U2hhZGVyOkRpLm1lc2hwaG9uZ192ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLm1lc2hwaG9uZ19mcmFnfSxzdGFuZGFyZDp7dW5pZm9ybXM6anMoW0J0LmNvbW1vbixCdC5lbnZtYXAsQnQuYW9tYXAsQnQubGlnaHRtYXAsQnQuZW1pc3NpdmVtYXAsQnQuYnVtcG1hcCxCdC5ub3JtYWxtYXAsQnQuZGlzcGxhY2VtZW50bWFwLEJ0LnJvdWdobmVzc21hcCxCdC5tZXRhbG5lc3NtYXAsQnQuZm9nLEJ0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyB2bigwKX0scm91Z2huZXNzOnt2YWx1ZToxfSxtZXRhbG5lc3M6e3ZhbHVlOjB9LGVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOkRpLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLm1lc2hwaHlzaWNhbF9mcmFnfSx0b29uOnt1bmlmb3JtczpqcyhbQnQuY29tbW9uLEJ0LmFvbWFwLEJ0LmxpZ2h0bWFwLEJ0LmVtaXNzaXZlbWFwLEJ0LmJ1bXBtYXAsQnQubm9ybWFsbWFwLEJ0LmRpc3BsYWNlbWVudG1hcCxCdC5ncmFkaWVudG1hcCxCdC5mb2csQnQubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IHZuKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6RGkubWVzaHRvb25fdmVydCxmcmFnbWVudFNoYWRlcjpEaS5tZXNodG9vbl9mcmFnfSxtYXRjYXA6e3VuaWZvcm1zOmpzKFtCdC5jb21tb24sQnQuYnVtcG1hcCxCdC5ub3JtYWxtYXAsQnQuZGlzcGxhY2VtZW50bWFwLEJ0LmZvZyx7bWF0Y2FwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6RGkubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3JtczpqcyhbQnQucG9pbnRzLEJ0LmZvZ10pLHZlcnRleFNoYWRlcjpEaS5wb2ludHNfdmVydCxmcmFnbWVudFNoYWRlcjpEaS5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3JtczpqcyhbQnQuY29tbW9uLEJ0LmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpEaS5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RGkubGluZWRhc2hlZF9mcmFnfSxkZXB0aDp7dW5pZm9ybXM6anMoW0J0LmNvbW1vbixCdC5kaXNwbGFjZW1lbnRtYXBdKSx2ZXJ0ZXhTaGFkZXI6RGkuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjpEaS5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOmpzKFtCdC5jb21tb24sQnQuYnVtcG1hcCxCdC5ub3JtYWxtYXAsQnQuZGlzcGxhY2VtZW50bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6RGkubWVzaG5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLm1lc2hub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3JtczpqcyhbQnQuc3ByaXRlLEJ0LmZvZ10pLHZlcnRleFNoYWRlcjpEaS5zcHJpdGVfdmVydCxmcmFnbWVudFNoYWRlcjpEaS5zcHJpdGVfZnJhZ30sYmFja2dyb3VuZDp7dW5pZm9ybXM6e3V2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgSm99LHQyRDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpEaS5iYWNrZ3JvdW5kX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RGkuYmFja2dyb3VuZF9mcmFnfSxjdWJlOnt1bmlmb3JtczpqcyhbQnQuZW52bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6RGkuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLmN1YmVfZnJhZ30sZXF1aXJlY3Q6e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6RGkuZXF1aXJlY3RfdmVydCxmcmFnbWVudFNoYWRlcjpEaS5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOmpzKFtCdC5jb21tb24sQnQuZGlzcGxhY2VtZW50bWFwLHtyZWZlcmVuY2VQb3NpdGlvbjp7dmFsdWU6bmV3IGllfSxuZWFyRGlzdGFuY2U6e3ZhbHVlOjF9LGZhckRpc3RhbmNlOnt2YWx1ZToxZTN9fV0pLHZlcnRleFNoYWRlcjpEaS5kaXN0YW5jZVJHQkFfdmVydCxmcmFnbWVudFNoYWRlcjpEaS5kaXN0YW5jZVJHQkFfZnJhZ30sc2hhZG93Ont1bmlmb3JtczpqcyhbQnQubGlnaHRzLEJ0LmZvZyx7Y29sb3I6e3ZhbHVlOm5ldyB2bigwKX0sb3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOkRpLnNoYWRvd192ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLnNoYWRvd19mcmFnfX07ZnVuY3Rpb24gSVdlKG4sdCxlLGkscixvKXtsZXQgbCxjLHM9bmV3IHZuKDApLGE9ITA9PT1yPzA6MSx1PW51bGwsZD0wLHA9bnVsbDtmdW5jdGlvbiBmKG0seCl7ZS5idWZmZXJzLmNvbG9yLnNldENsZWFyKG0ucixtLmcsbS5iLHgsbyl9cmV0dXJue2dldENsZWFyQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gc30sc2V0Q2xlYXJDb2xvcjpmdW5jdGlvbihtLHg9MSl7cy5zZXQobSksYT14LGYocyxhKX0sZ2V0Q2xlYXJBbHBoYTpmdW5jdGlvbigpe3JldHVybiBhfSxzZXRDbGVhckFscGhhOmZ1bmN0aW9uKG0pe2E9bSxmKHMsYSl9LHJlbmRlcjpmdW5jdGlvbihtLHgpe2xldCBnPSExLGI9ITA9PT14LmlzU2NlbmU/eC5iYWNrZ3JvdW5kOm51bGw7YiYmYi5pc1RleHR1cmUmJihiPXQuZ2V0KGIpKTtsZXQgRD1uLnhyLFQ9RC5nZXRTZXNzaW9uJiZELmdldFNlc3Npb24oKTtUJiYiYWRkaXRpdmUiPT09VC5lbnZpcm9ubWVudEJsZW5kTW9kZSYmKGI9bnVsbCksbnVsbD09PWI/ZihzLGEpOmImJmIuaXNDb2xvciYmKGYoYiwxKSxnPSEwKSwobi5hdXRvQ2xlYXJ8fGcpJiZuLmNsZWFyKG4uYXV0b0NsZWFyQ29sb3Isbi5hdXRvQ2xlYXJEZXB0aCxuLmF1dG9DbGVhclN0ZW5jaWwpLGImJihiLmlzQ3ViZVRleHR1cmV8fDMwNj09PWIubWFwcGluZyk/KHZvaWQgMD09PWMmJihjPW5ldyBWbyhuZXcgV2coMSwxLDEpLG5ldyBEcCh7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6ZmIoU2QuY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOlNkLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOlNkLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZToxLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoInV2IiksYy5vbkJlZm9yZVJlbmRlcj1mdW5jdGlvbihrLFoseil7dGhpcy5tYXRyaXhXb3JsZC5jb3B5UG9zaXRpb24oei5tYXRyaXhXb3JsZCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLm1hdGVyaWFsLCJlbnZNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5lbnZNYXAudmFsdWV9fSksaS51cGRhdGUoYykpLGMubWF0ZXJpYWwudW5pZm9ybXMuZW52TWFwLnZhbHVlPWIsYy5tYXRlcmlhbC51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPWIuaXNDdWJlVGV4dHVyZSYmITE9PT1iLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxLCh1IT09Ynx8ZCE9PWIudmVyc2lvbnx8cCE9PW4udG9uZU1hcHBpbmcpJiYoYy5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PWIsZD1iLnZlcnNpb24scD1uLnRvbmVNYXBwaW5nKSxtLnVuc2hpZnQoYyxjLmdlb21ldHJ5LGMubWF0ZXJpYWwsMCwwLG51bGwpKTpiJiZiLmlzVGV4dHVyZSYmKHZvaWQgMD09PWwmJihsPW5ldyBWbyhuZXcgWlMoMiwyKSxuZXcgRHAoe25hbWU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6ZmIoU2QuYmFja2dyb3VuZC51bmlmb3JtcyksdmVydGV4U2hhZGVyOlNkLmJhY2tncm91bmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOlNkLmJhY2tncm91bmQuZnJhZ21lbnRTaGFkZXIsc2lkZTowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxsLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwubWF0ZXJpYWwsIm1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLnQyRC52YWx1ZX19KSxpLnVwZGF0ZShsKSksbC5tYXRlcmlhbC51bmlmb3Jtcy50MkQudmFsdWU9YiwhMD09PWIubWF0cml4QXV0b1VwZGF0ZSYmYi51cGRhdGVNYXRyaXgoKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoYi5tYXRyaXgpLCh1IT09Ynx8ZCE9PWIudmVyc2lvbnx8cCE9PW4udG9uZU1hcHBpbmcpJiYobC5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PWIsZD1iLnZlcnNpb24scD1uLnRvbmVNYXBwaW5nKSxtLnVuc2hpZnQobCxsLmdlb21ldHJ5LGwubWF0ZXJpYWwsMCwwLG51bGwpKX19fWZ1bmN0aW9uIFBXZShuLHQsZSxpKXtsZXQgcj1uLmdldFBhcmFtZXRlcigzNDkyMSksbz1pLmlzV2ViR0wyP251bGw6dC5nZXQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iikscz1pLmlzV2ViR0wyfHxudWxsIT09byxhPXt9LGw9bShudWxsKSxjPWw7ZnVuY3Rpb24gcChxKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmJpbmRWZXJ0ZXhBcnJheShxKTpvLmJpbmRWZXJ0ZXhBcnJheU9FUyhxKX1mdW5jdGlvbiBoKHEpe3JldHVybiBpLmlzV2ViR0wyP24uZGVsZXRlVmVydGV4QXJyYXkocSk6by5kZWxldGVWZXJ0ZXhBcnJheU9FUyhxKX1mdW5jdGlvbiBtKHEpe2xldCBLPVtdLGRlPVtdLFk9W107Zm9yKGxldCBhZT0wO2FlPHI7YWUrKylLW2FlXT0wLGRlW2FlXT0wLFlbYWVdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOkssZW5hYmxlZEF0dHJpYnV0ZXM6ZGUsYXR0cmlidXRlRGl2aXNvcnM6WSxvYmplY3Q6cSxhdHRyaWJ1dGVzOnt9LGluZGV4Om51bGx9fWZ1bmN0aW9uIGIoKXtsZXQgcT1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBLPTAsZGU9cS5sZW5ndGg7SzxkZTtLKyspcVtLXT0wfWZ1bmN0aW9uIEQocSl7VChxLDApfWZ1bmN0aW9uIFQocSxLKXtsZXQgWT1jLmVuYWJsZWRBdHRyaWJ1dGVzLGFlPWMuYXR0cmlidXRlRGl2aXNvcnM7Yy5uZXdBdHRyaWJ1dGVzW3FdPTEsMD09PVlbcV0mJihuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHEpLFlbcV09MSksYWVbcV0hPT1LJiYoKGkuaXNXZWJHTDI/bjp0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKVtpLmlzV2ViR0wyPyJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIjoidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIl0ocSxLKSxhZVtxXT1LKX1mdW5jdGlvbiBrKCl7bGV0IHE9Yy5uZXdBdHRyaWJ1dGVzLEs9Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IGRlPTAsWT1LLmxlbmd0aDtkZTxZO2RlKyspS1tkZV0hPT1xW2RlXSYmKG4uZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGRlKSxLW2RlXT0wKX1mdW5jdGlvbiBaKHEsSyxkZSxZLGFlLGxlKXshMCE9PWkuaXNXZWJHTDJ8fDUxMjQhPT1kZSYmNTEyNSE9PWRlP24udmVydGV4QXR0cmliUG9pbnRlcihxLEssZGUsWSxhZSxsZSk6bi52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihxLEssZGUsYWUsbGUpfWZ1bmN0aW9uIHcoKXtGKCksYyE9PWwmJihjPWwscChjLm9iamVjdCkpfWZ1bmN0aW9uIEYoKXtsLmdlb21ldHJ5PW51bGwsbC5wcm9ncmFtPW51bGwsbC53aXJlZnJhbWU9ITF9cmV0dXJue3NldHVwOmZ1bmN0aW9uKHEsSyxkZSxZLGFlKXtsZXQgbGU9ITE7aWYocyl7bGV0IEllPWZ1bmN0aW9uKHEsSyxkZSl7bGV0IFk9ITA9PT1kZS53aXJlZnJhbWUsYWU9YVtxLmlkXTt2b2lkIDA9PT1hZSYmKGFlPXt9LGFbcS5pZF09YWUpO2xldCBsZT1hZVtLLmlkXTt2b2lkIDA9PT1sZSYmKGxlPXt9LGFlW0suaWRdPWxlKTtsZXQgSWU9bGVbWV07cmV0dXJuIHZvaWQgMD09PUllJiYoSWU9bShpLmlzV2ViR0wyP24uY3JlYXRlVmVydGV4QXJyYXkoKTpvLmNyZWF0ZVZlcnRleEFycmF5T0VTKCkpLGxlW1ldPUllKSxJZX0oWSxkZSxLKTtjIT09SWUmJihjPUllLHAoYy5vYmplY3QpKSxsZT1mdW5jdGlvbihxLEspe2xldCBkZT1jLmF0dHJpYnV0ZXMsWT1xLmF0dHJpYnV0ZXMsYWU9MDtmb3IobGV0IGxlIGluIFkpe2xldCBJZT1kZVtsZV0sdmU9WVtsZV07aWYodm9pZCAwPT09SWV8fEllLmF0dHJpYnV0ZSE9PXZlfHxJZS5kYXRhIT09dmUuZGF0YSlyZXR1cm4hMDthZSsrfXJldHVybiBjLmF0dHJpYnV0ZXNOdW0hPT1hZXx8Yy5pbmRleCE9PUt9KFksYWUpLGxlJiZmdW5jdGlvbihxLEspe2xldCBkZT17fSxZPXEuYXR0cmlidXRlcyxhZT0wO2ZvcihsZXQgbGUgaW4gWSl7bGV0IEllPVlbbGVdLHZlPXt9O3ZlLmF0dHJpYnV0ZT1JZSxJZS5kYXRhJiYodmUuZGF0YT1JZS5kYXRhKSxkZVtsZV09dmUsYWUrK31jLmF0dHJpYnV0ZXM9ZGUsYy5hdHRyaWJ1dGVzTnVtPWFlLGMuaW5kZXg9S30oWSxhZSl9ZWxzZXtsZXQgSWU9ITA9PT1LLndpcmVmcmFtZTsoYy5nZW9tZXRyeSE9PVkuaWR8fGMucHJvZ3JhbSE9PWRlLmlkfHxjLndpcmVmcmFtZSE9PUllKSYmKGMuZ2VvbWV0cnk9WS5pZCxjLnByb2dyYW09ZGUuaWQsYy53aXJlZnJhbWU9SWUsbGU9ITApfSEwPT09cS5pc0luc3RhbmNlZE1lc2gmJihsZT0hMCksbnVsbCE9PWFlJiZlLnVwZGF0ZShhZSwzNDk2MyksbGUmJihmdW5jdGlvbihxLEssZGUsWSl7aWYoITE9PT1pLmlzV2ViR0wyJiYocS5pc0luc3RhbmNlZE1lc2h8fFkuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSkmJm51bGw9PT10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXJldHVybjtiKCk7bGV0IGFlPVkuYXR0cmlidXRlcyxsZT1kZS5nZXRBdHRyaWJ1dGVzKCksSWU9Sy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzO2ZvcihsZXQgdmUgaW4gbGUpe2xldCBEZT1sZVt2ZV07aWYoRGUubG9jYXRpb24+PTApe2xldCBudD1hZVt2ZV07aWYodm9pZCAwPT09bnQmJigiaW5zdGFuY2VNYXRyaXgiPT09dmUmJnEuaW5zdGFuY2VNYXRyaXgmJihudD1xLmluc3RhbmNlTWF0cml4KSwiaW5zdGFuY2VDb2xvciI9PT12ZSYmcS5pbnN0YW5jZUNvbG9yJiYobnQ9cS5pbnN0YW5jZUNvbG9yKSksdm9pZCAwIT09bnQpe2xldCBndD1udC5ub3JtYWxpemVkLFVlPW50Lml0ZW1TaXplLEFlPWUuZ2V0KG50KTtpZih2b2lkIDA9PT1BZSljb250aW51ZTtsZXQgdG49QWUuYnVmZmVyLHB0PUFlLnR5cGUsd3Q9QWUuYnl0ZXNQZXJFbGVtZW50O2lmKG50LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2xldCBUZT1udC5kYXRhLHh0PVRlLnN0cmlkZSxtdD1udC5vZmZzZXQ7aWYoVGUmJlRlLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIpe2ZvcihsZXQgY2U9MDtjZTxEZS5sb2NhdGlvblNpemU7Y2UrKylUKERlLmxvY2F0aW9uK2NlLFRlLm1lc2hQZXJBdHRyaWJ1dGUpOyEwIT09cS5pc0luc3RhbmNlZE1lc2gmJnZvaWQgMD09PVkuX21heEluc3RhbmNlQ291bnQmJihZLl9tYXhJbnN0YW5jZUNvdW50PVRlLm1lc2hQZXJBdHRyaWJ1dGUqVGUuY291bnQpfWVsc2UgZm9yKGxldCBjZT0wO2NlPERlLmxvY2F0aW9uU2l6ZTtjZSsrKUQoRGUubG9jYXRpb24rY2UpO24uYmluZEJ1ZmZlcigzNDk2Mix0bik7Zm9yKGxldCBjZT0wO2NlPERlLmxvY2F0aW9uU2l6ZTtjZSsrKVooRGUubG9jYXRpb24rY2UsVWUvRGUubG9jYXRpb25TaXplLHB0LGd0LHh0Knd0LChtdCtVZS9EZS5sb2NhdGlvblNpemUqY2UpKnd0KX1lbHNle2lmKG50LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKXtmb3IobGV0IFRlPTA7VGU8RGUubG9jYXRpb25TaXplO1RlKyspVChEZS5sb2NhdGlvbitUZSxudC5tZXNoUGVyQXR0cmlidXRlKTshMCE9PXEuaXNJbnN0YW5jZWRNZXNoJiZ2b2lkIDA9PT1ZLl9tYXhJbnN0YW5jZUNvdW50JiYoWS5fbWF4SW5zdGFuY2VDb3VudD1udC5tZXNoUGVyQXR0cmlidXRlKm50LmNvdW50KX1lbHNlIGZvcihsZXQgVGU9MDtUZTxEZS5sb2NhdGlvblNpemU7VGUrKylEKERlLmxvY2F0aW9uK1RlKTtuLmJpbmRCdWZmZXIoMzQ5NjIsdG4pO2ZvcihsZXQgVGU9MDtUZTxEZS5sb2NhdGlvblNpemU7VGUrKylaKERlLmxvY2F0aW9uK1RlLFVlL0RlLmxvY2F0aW9uU2l6ZSxwdCxndCxVZSp3dCxVZS9EZS5sb2NhdGlvblNpemUqVGUqd3QpfX1lbHNlIGlmKHZvaWQgMCE9PUllKXtsZXQgZ3Q9SWVbdmVdO2lmKHZvaWQgMCE9PWd0KXN3aXRjaChndC5sZW5ndGgpe2Nhc2UgMjpuLnZlcnRleEF0dHJpYjJmdihEZS5sb2NhdGlvbixndCk7YnJlYWs7Y2FzZSAzOm4udmVydGV4QXR0cmliM2Z2KERlLmxvY2F0aW9uLGd0KTticmVhaztjYXNlIDQ6bi52ZXJ0ZXhBdHRyaWI0ZnYoRGUubG9jYXRpb24sZ3QpO2JyZWFrO2RlZmF1bHQ6bi52ZXJ0ZXhBdHRyaWIxZnYoRGUubG9jYXRpb24sZ3QpfX19fWsoKX0ocSxLLGRlLFkpLG51bGwhPT1hZSYmbi5iaW5kQnVmZmVyKDM0OTYzLGUuZ2V0KGFlKS5idWZmZXIpKX0scmVzZXQ6dyxyZXNldERlZmF1bHRTdGF0ZTpGLGRpc3Bvc2U6ZnVuY3Rpb24oKXt3KCk7Zm9yKGxldCBxIGluIGEpe2xldCBLPWFbcV07Zm9yKGxldCBkZSBpbiBLKXtsZXQgWT1LW2RlXTtmb3IobGV0IGFlIGluIFkpaChZW2FlXS5vYmplY3QpLGRlbGV0ZSBZW2FlXTtkZWxldGUgS1tkZV19ZGVsZXRlIGFbcV19fSxyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTpmdW5jdGlvbihxKXtpZih2b2lkIDA9PT1hW3EuaWRdKXJldHVybjtsZXQgSz1hW3EuaWRdO2ZvcihsZXQgZGUgaW4gSyl7bGV0IFk9S1tkZV07Zm9yKGxldCBhZSBpbiBZKWgoWVthZV0ub2JqZWN0KSxkZWxldGUgWVthZV07ZGVsZXRlIEtbZGVdfWRlbGV0ZSBhW3EuaWRdfSxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOmZ1bmN0aW9uKHEpe2ZvcihsZXQgSyBpbiBhKXtsZXQgZGU9YVtLXTtpZih2b2lkIDA9PT1kZVtxLmlkXSljb250aW51ZTtsZXQgWT1kZVtxLmlkXTtmb3IobGV0IGFlIGluIFkpaChZW2FlXS5vYmplY3QpLGRlbGV0ZSBZW2FlXTtkZWxldGUgZGVbcS5pZF19fSxpbml0QXR0cmlidXRlczpiLGVuYWJsZUF0dHJpYnV0ZTpELGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOmt9fWZ1bmN0aW9uIFJXZShuLHQsZSxpKXtsZXQgbyxyPWkuaXNXZWJHTDI7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uKGMpe289Y30sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oYyx1KXtuLmRyYXdBcnJheXMobyxjLHUpLGUudXBkYXRlKHUsbywxKX0sdGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24oYyx1LGQpe2lmKDA9PT1kKXJldHVybjtsZXQgcCxoO2lmKHIpcD1uLGg9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYocD10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGg9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PXApcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cFtoXShvLGMsdSxkKSxlLnVwZGF0ZSh1LG8sZCl9fWZ1bmN0aW9uIE9XZShuLHQsZSl7bGV0IGk7ZnVuY3Rpb24gbyh6KXtpZigiaGlnaHAiPT09eil7aWYobi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjt6PSJtZWRpdW1wIn1yZXR1cm4ibWVkaXVtcCI9PT16JiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJm4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBzPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0PCJ1IiYmbiBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dDwidSImJm4gaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxhPXZvaWQgMCE9PWUucHJlY2lzaW9uP2UucHJlY2lzaW9uOiJoaWdocCIsbD1vKGEpO2whPT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIsYSwibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIiksYT1sKTtsZXQgYz1zfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT0hMD09PWUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixkPW4uZ2V0UGFyYW1ldGVyKDM0OTMwKSxwPW4uZ2V0UGFyYW1ldGVyKDM1NjYwKSxoPW4uZ2V0UGFyYW1ldGVyKDMzNzkpLGY9bi5nZXRQYXJhbWV0ZXIoMzQwNzYpLG09bi5nZXRQYXJhbWV0ZXIoMzQ5MjEpLHg9bi5nZXRQYXJhbWV0ZXIoMzYzNDcpLGc9bi5nZXRQYXJhbWV0ZXIoMzYzNDgpLGI9bi5nZXRQYXJhbWV0ZXIoMzYzNDkpLEQ9cD4wLFQ9c3x8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iik7cmV0dXJue2lzV2ViR0wyOnMsZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09aSlyZXR1cm4gaTtpZighMD09PXQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSl7bGV0IHo9dC5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2k9bi5nZXRQYXJhbWV0ZXIoei5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpfWVsc2UgaT0wO3JldHVybiBpfSxnZXRNYXhQcmVjaXNpb246byxwcmVjaXNpb246YSxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6ZCxtYXhWZXJ0ZXhUZXh0dXJlczpwLG1heFRleHR1cmVTaXplOmgsbWF4Q3ViZW1hcFNpemU6ZixtYXhBdHRyaWJ1dGVzOm0sbWF4VmVydGV4VW5pZm9ybXM6eCxtYXhWYXJ5aW5nczpnLG1heEZyYWdtZW50VW5pZm9ybXM6Yix2ZXJ0ZXhUZXh0dXJlczpELGZsb2F0RnJhZ21lbnRUZXh0dXJlczpULGZsb2F0VmVydGV4VGV4dHVyZXM6RCYmVCxtYXhTYW1wbGVzOnM/bi5nZXRQYXJhbWV0ZXIoMzYxODMpOjB9fWZ1bmN0aW9uIGtXZShuKXtsZXQgdD10aGlzLGU9bnVsbCxpPTAscj0hMSxvPSExLHM9bmV3IHV1LGE9bmV3IEpvLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ZSYmKGwudmFsdWU9ZSxsLm5lZWRzVXBkYXRlPWk+MCksdC5udW1QbGFuZXM9aSx0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoZCxwLGgsZil7bGV0IG09bnVsbCE9PWQ/ZC5sZW5ndGg6MCx4PW51bGw7aWYoMCE9PW0pe2lmKHg9bC52YWx1ZSwhMCE9PWZ8fG51bGw9PT14KXtsZXQgZz1oKzQqbSxiPXAubWF0cml4V29ybGRJbnZlcnNlO2EuZ2V0Tm9ybWFsTWF0cml4KGIpLChudWxsPT09eHx8eC5sZW5ndGg8ZykmJih4PW5ldyBGbG9hdDMyQXJyYXkoZykpO2ZvcihsZXQgRD0wLFQ9aDtEIT09bTsrK0QsVCs9NClzLmNvcHkoZFtEXSkuYXBwbHlNYXRyaXg0KGIsYSkscy5ub3JtYWwudG9BcnJheSh4LFQpLHhbVCszXT1zLmNvbnN0YW50fWwudmFsdWU9eCxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz1tLHQubnVtSW50ZXJzZWN0aW9uPTAseH10aGlzLnVuaWZvcm09bCx0aGlzLm51bVBsYW5lcz0wLHRoaXMubnVtSW50ZXJzZWN0aW9uPTAsdGhpcy5pbml0PWZ1bmN0aW9uKGQscCxoKXtsZXQgZj0wIT09ZC5sZW5ndGh8fHB8fDAhPT1pfHxyO3JldHVybiByPXAsZT11KGQsaCwwKSxpPWQubGVuZ3RoLGZ9LHRoaXMuYmVnaW5TaGFkb3dzPWZ1bmN0aW9uKCl7bz0hMCx1KG51bGwpfSx0aGlzLmVuZFNoYWRvd3M9ZnVuY3Rpb24oKXtvPSExLGMoKX0sdGhpcy5zZXRTdGF0ZT1mdW5jdGlvbihkLHAsaCl7bGV0IGY9ZC5jbGlwcGluZ1BsYW5lcyxtPWQuY2xpcEludGVyc2VjdGlvbix4PWQuY2xpcFNoYWRvd3MsZz1uLmdldChkKTtpZighcnx8bnVsbD09PWZ8fDA9PT1mLmxlbmd0aHx8byYmIXgpbz91KG51bGwpOmMoKTtlbHNle2xldCBiPW8/MDppLEQ9NCpiLFQ9Zy5jbGlwcGluZ1N0YXRlfHxudWxsO2wudmFsdWU9VCxUPXUoZixwLEQsaCk7Zm9yKGxldCBrPTA7ayE9PUQ7KytrKVRba109ZVtrXTtnLmNsaXBwaW5nU3RhdGU9VCx0aGlzLm51bUludGVyc2VjdGlvbj1tP3RoaXMubnVtUGxhbmVzOjAsdGhpcy5udW1QbGFuZXMrPWJ9fX1mdW5jdGlvbiBGV2Uobil7bGV0IHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZShzLGEpe3JldHVybiAzMDM9PT1hP3MubWFwcGluZz0zMDE6MzA0PT09YSYmKHMubWFwcGluZz0zMDIpLHN9ZnVuY3Rpb24gcihzKXtsZXQgYT1zLnRhcmdldDthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHIpO2xldCBsPXQuZ2V0KGEpO3ZvaWQgMCE9PWwmJih0LmRlbGV0ZShhKSxsLmRpc3Bvc2UoKSl9cmV0dXJue2dldDpmdW5jdGlvbihzKXtpZihzJiZzLmlzVGV4dHVyZSYmITE9PT1zLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSl7bGV0IGE9cy5tYXBwaW5nO2lmKDMwMz09PWF8fDMwND09PWEpe2lmKHQuaGFzKHMpKXJldHVybiBlKHQuZ2V0KHMpLnRleHR1cmUscy5tYXBwaW5nKTt7bGV0IGw9cy5pbWFnZTtpZihsJiZsLmhlaWdodD4wKXtsZXQgYz1uZXcgY2sobC5oZWlnaHQvMik7cmV0dXJuIGMuZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUobixzKSx0LnNldChzLGMpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsciksZShjLnRleHR1cmUscy5tYXBwaW5nKX1yZXR1cm4gbnVsbH19fXJldHVybiBzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dD1uZXcgV2Vha01hcH19fVNkLnBoeXNpY2FsPXt1bmlmb3JtczpqcyhbU2Quc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBhdCgxLDEpfSxjbGVhcmNvYXROb3JtYWxNYXA6e3ZhbHVlOm51bGx9LHNoZWVuOnt2YWx1ZTowfSxzaGVlbkNvbG9yOnt2YWx1ZTpuZXcgdm4oMCl9LHNoZWVuQ29sb3JNYXA6e3ZhbHVlOm51bGx9LHNoZWVuUm91Z2huZXNzOnt2YWx1ZToxfSxzaGVlblJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnt2YWx1ZTpuZXcgYXR9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgdm4oMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IHZuKDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOkRpLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLm1lc2hwaHlzaWNhbF9mcmFnfTt2YXIgcWc9Y2xhc3MgZXh0ZW5kcyBRU3tjb25zdHJ1Y3Rvcih0PS0xLGU9MSxpPTEscj0tMSxvPS4xLHM9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9aSx0aGlzLmJvdHRvbT1yLHRoaXMubmVhcj1vLHRoaXMuZmFyPXMsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5sZWZ0PXQubGVmdCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy50b3A9dC50b3AsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLnpvb209dC56b29tLHRoaXMudmlldz1udWxsPT09dC52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXN9c2V0Vmlld09mZnNldCh0LGUsaSxyLG8scyl7bnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9cyx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksaT0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIscj0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIsbz1pLXQscz1pK3QsYT1yK2UsbD1yLWU7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBjPSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sdT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtvKz1jKnRoaXMudmlldy5vZmZzZXRYLHM9bytjKnRoaXMudmlldy53aWR0aCxhLT11KnRoaXMudmlldy5vZmZzZXRZLGw9YS11KnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMobyxzLGEsbCx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0LGUub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQsZS5vYmplY3QudG9wPXRoaXMudG9wLGUub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlfX07cWcucHJvdG90eXBlLmlzT3J0aG9ncmFwaGljQ2FtZXJhPSEwO3ZhciBfYj1jbGFzcyBleHRlbmRzIERwe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifX07X2IucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7dmFyIHdkPU1hdGgucG93KDIsOCksRmRlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSxOZGU9NStGZGUubGVuZ3RoLFpqPW5ldyBxZyx7X2xvZFBsYW5lczpSUyxfc2l6ZUxvZHM6a3VlLF9zaWdtYXM6SE99PU5XZSgpLEZ1ZT1uZXcgdm4sSmo9bnVsbCxIZz0oMStNYXRoLnNxcnQoNSkpLzIsJHk9MS9IZyxOdWU9W25ldyBpZSgxLDEsMSksbmV3IGllKC0xLDEsMSksbmV3IGllKDEsMSwtMSksbmV3IGllKC0xLDEsLTEpLG5ldyBpZSgwLEhnLCR5KSxuZXcgaWUoMCxIZywtJHkpLG5ldyBpZSgkeSwwLEhnKSxuZXcgaWUoLSR5LDAsSGcpLG5ldyBpZShIZywkeSwwKSxuZXcgaWUoLUhnLCR5LDApXSx1az1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0PW51bGwsdGhpcy5fYmx1ck1hdGVyaWFsPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBGbG9hdDMyQXJyYXkoMjApLGU9bmV3IGllKDAsMSwwKTtyZXR1cm4gbmV3IF9iKHtuYW1lOiJTcGhlcmljYWxHYXVzc2lhbkJsdXIiLGRlZmluZXM6e246MjB9LHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHNhbXBsZXM6e3ZhbHVlOjF9LHdlaWdodHM6e3ZhbHVlOnR9LGxhdGl0dWRpbmFsOnt2YWx1ZTohMX0sZFRoZXRhOnt2YWx1ZTowfSxtaXBJbnQ6e3ZhbHVlOjB9LHBvbGVBeGlzOnt2YWx1ZTplfX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdFx0XHR1bmlmb3JtIGludCBzYW1wbGVzO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCB3ZWlnaHRzWyBuIF07XG5cdFx0XHR1bmlmb3JtIGJvb2wgbGF0aXR1ZGluYWw7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IGRUaGV0YTtcblx0XHRcdHVuaWZvcm0gZmxvYXQgbWlwSW50O1xuXHRcdFx0dW5pZm9ybSB2ZWMzIHBvbGVBeGlzO1xuXG5cdFx0XHQjZGVmaW5lIEVOVk1BUF9UWVBFX0NVQkVfVVZcblx0XHRcdCNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG5cblx0XHRcdHZlYzMgZ2V0U2FtcGxlKCBmbG9hdCB0aGV0YSwgdmVjMyBheGlzICkge1xuXG5cdFx0XHRcdGZsb2F0IGNvc1RoZXRhID0gY29zKCB0aGV0YSApO1xuXHRcdFx0XHQvLyBSb2RyaWd1ZXMnIGF4aXMtYW5nbGUgcm90YXRpb25cblx0XHRcdFx0dmVjMyBzYW1wbGVEaXJlY3Rpb24gPSB2T3V0cHV0RGlyZWN0aW9uICogY29zVGhldGFcblx0XHRcdFx0XHQrIGNyb3NzKCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiBzaW4oIHRoZXRhIClcblx0XHRcdFx0XHQrIGF4aXMgKiBkb3QoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqICggMS4wIC0gY29zVGhldGEgKTtcblxuXHRcdFx0XHRyZXR1cm4gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyZWN0aW9uLCBtaXBJbnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0dmVjMyBheGlzID0gbGF0aXR1ZGluYWwgPyBwb2xlQXhpcyA6IGNyb3NzKCBwb2xlQXhpcywgdk91dHB1dERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdGlmICggYWxsKCBlcXVhbCggYXhpcywgdmVjMyggMC4wICkgKSApICkge1xuXG5cdFx0XHRcdFx0YXhpcyA9IHZlYzMoIHZPdXRwdXREaXJlY3Rpb24ueiwgMC4wLCAtIHZPdXRwdXREaXJlY3Rpb24ueCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRheGlzID0gbm9ybWFsaXplKCBheGlzICk7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgMCBdICogZ2V0U2FtcGxlKCAwLjAsIGF4aXMgKTtcblxuXHRcdFx0XHRmb3IgKCBpbnQgaSA9IDE7IGkgPCBuOyBpKysgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGkgPj0gc2FtcGxlcyApIHtcblxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmbG9hdCB0aGV0YSA9IGRUaGV0YSAqIGZsb2F0KCBpICk7XG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIC0xLjAgKiB0aGV0YSwgYXhpcyApO1xuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCB0aGV0YSwgYXhpcyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXHRcdCIsYmxlbmRpbmc6MCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfSgpLHRoaXMuX2VxdWlyZWN0U2hhZGVyPW51bGwsdGhpcy5fY3ViZW1hcFNoYWRlcj1udWxsLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpfWZyb21TY2VuZSh0LGU9MCxpPS4xLHI9MTAwKXtKaj10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgbz10aGlzLl9hbGxvY2F0ZVRhcmdldHMoKTtyZXR1cm4gdGhpcy5fc2NlbmVUb0N1YmVVVih0LGkscixvKSxlPjAmJnRoaXMuX2JsdXIobywwLDAsZSksdGhpcy5fYXBwbHlQTVJFTShvKSx0aGlzLl9jbGVhbnVwKG8pLG99ZnJvbUVxdWlyZWN0YW5ndWxhcih0LGU9bnVsbCl7cmV0dXJuIHRoaXMuX2Zyb21UZXh0dXJlKHQsZSl9ZnJvbUN1YmVtYXAodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWNvbXBpbGVDdWJlbWFwU2hhZGVyKCl7bnVsbD09PXRoaXMuX2N1YmVtYXBTaGFkZXImJih0aGlzLl9jdWJlbWFwU2hhZGVyPVZ1ZSgpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9jdWJlbWFwU2hhZGVyKSl9Y29tcGlsZUVxdWlyZWN0YW5ndWxhclNoYWRlcigpe251bGw9PT10aGlzLl9lcXVpcmVjdFNoYWRlciYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPUJ1ZSgpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9lcXVpcmVjdFNoYWRlcikpfWRpc3Bvc2UoKXt0aGlzLl9ibHVyTWF0ZXJpYWwuZGlzcG9zZSgpLG51bGwhPT10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCYmdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQuZGlzcG9zZSgpLG51bGwhPT10aGlzLl9jdWJlbWFwU2hhZGVyJiZ0aGlzLl9jdWJlbWFwU2hhZGVyLmRpc3Bvc2UoKSxudWxsIT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJnRoaXMuX2VxdWlyZWN0U2hhZGVyLmRpc3Bvc2UoKTtmb3IobGV0IHQ9MDt0PFJTLmxlbmd0aDt0KyspUlNbdF0uZGlzcG9zZSgpfV9jbGVhbnVwKHQpe3RoaXMuX3JlbmRlcmVyLnNldFJlbmRlclRhcmdldChKaiksdC5zY2lzc29yVGVzdD0hMSxVTyh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KX1fZnJvbVRleHR1cmUodCxlKXtKaj10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgaT1lfHx0aGlzLl9hbGxvY2F0ZVRhcmdldHModCk7cmV0dXJuIHRoaXMuX3RleHR1cmVUb0N1YmVVVih0LGkpLHRoaXMuX2FwcGx5UE1SRU0oaSksdGhpcy5fY2xlYW51cChpKSxpfV9hbGxvY2F0ZVRhcmdldHModCl7bGV0IGU9e21hZ0ZpbHRlcjpHcyxtaW5GaWx0ZXI6R3MsZ2VuZXJhdGVNaXBtYXBzOiExLHR5cGU6bGIsZm9ybWF0OmdhLGVuY29kaW5nOmJmLGRlcHRoQnVmZmVyOiExfSxpPUx1ZShlKTtyZXR1cm4gaS5kZXB0aEJ1ZmZlcj0hdCxudWxsPT09dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQmJih0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1MdWUoZSkpLGl9X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgZT1uZXcgVm8oUlNbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShlLFpqKX1fc2NlbmVUb0N1YmVVVih0LGUsaSxyKXtsZXQgYT1uZXcgV3MoOTAsMSxlLGkpLGw9WzEsLTEsMSwxLDEsMV0sYz1bMSwxLDEsLTEsLTEsLTFdLHU9dGhpcy5fcmVuZGVyZXIsZD11LmF1dG9DbGVhcixwPXUudG9uZU1hcHBpbmc7dS5nZXRDbGVhckNvbG9yKEZ1ZSksdS50b25lTWFwcGluZz0wLHUuYXV0b0NsZWFyPSExO2xldCBoPW5ldyBHZyh7bmFtZToiUE1SRU0uQmFja2dyb3VuZCIsc2lkZToxLGRlcHRoV3JpdGU6ITEsZGVwdGhUZXN0OiExfSksZj1uZXcgVm8obmV3IFdnLGgpLG09ITEseD10LmJhY2tncm91bmQ7eD94LmlzQ29sb3ImJihoLmNvbG9yLmNvcHkoeCksdC5iYWNrZ3JvdW5kPW51bGwsbT0hMCk6KGguY29sb3IuY29weShGdWUpLG09ITApO2ZvcihsZXQgZz0wO2c8NjtnKyspe2xldCBiPWclMzswPT09Yj8oYS51cC5zZXQoMCxsW2ddLDApLGEubG9va0F0KGNbZ10sMCwwKSk6MT09PWI/KGEudXAuc2V0KDAsMCxsW2ddKSxhLmxvb2tBdCgwLGNbZ10sMCkpOihhLnVwLnNldCgwLGxbZ10sMCksYS5sb29rQXQoMCwwLGNbZ10pKSxVTyhyLGIqd2QsZz4yP3dkOjAsd2Qsd2QpLHUuc2V0UmVuZGVyVGFyZ2V0KHIpLG0mJnUucmVuZGVyKGYsYSksdS5yZW5kZXIodCxhKX1mLmdlb21ldHJ5LmRpc3Bvc2UoKSxmLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPXAsdS5hdXRvQ2xlYXI9ZCx0LmJhY2tncm91bmQ9eH1fdGV4dHVyZVRvQ3ViZVVWKHQsZSl7bGV0IGk9dGhpcy5fcmVuZGVyZXIscj0zMDE9PT10Lm1hcHBpbmd8fDMwMj09PXQubWFwcGluZztyPyhudWxsPT09dGhpcy5fY3ViZW1hcFNoYWRlciYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9VnVlKCkpLHRoaXMuX2N1YmVtYXBTaGFkZXIudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT0hMT09PXQuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEpOm51bGw9PT10aGlzLl9lcXVpcmVjdFNoYWRlciYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPUJ1ZSgpKTtsZXQgbz1yP3RoaXMuX2N1YmVtYXBTaGFkZXI6dGhpcy5fZXF1aXJlY3RTaGFkZXIscz1uZXcgVm8oUlNbMF0sbyksYT1vLnVuaWZvcm1zO2EuZW52TWFwLnZhbHVlPXQscnx8YS50ZXhlbFNpemUudmFsdWUuc2V0KDEvdC5pbWFnZS53aWR0aCwxL3QuaW1hZ2UuaGVpZ2h0KSxVTyhlLDAsMCwzKndkLDIqd2QpLGkuc2V0UmVuZGVyVGFyZ2V0KGUpLGkucmVuZGVyKHMsWmopfV9hcHBseVBNUkVNKHQpe2xldCBlPXRoaXMuX3JlbmRlcmVyLGk9ZS5hdXRvQ2xlYXI7ZS5hdXRvQ2xlYXI9ITE7Zm9yKGxldCByPTE7cjxOZGU7cisrKXtsZXQgbz1NYXRoLnNxcnQoSE9bcl0qSE9bcl0tSE9bci0xXSpIT1tyLTFdKTt0aGlzLl9ibHVyKHQsci0xLHIsbyxOdWVbKHItMSklTnVlLmxlbmd0aF0pfWUuYXV0b0NsZWFyPWl9X2JsdXIodCxlLGkscixvKXtsZXQgcz10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LHMsZSxpLHIsImxhdGl0dWRpbmFsIixvKSx0aGlzLl9oYWxmQmx1cihzLHQsaSxpLHIsImxvbmdpdHVkaW5hbCIsbyl9X2hhbGZCbHVyKHQsZSxpLHIsbyxzLGEpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsOyJsYXRpdHVkaW5hbCIhPT1zJiYibG9uZ2l0dWRpbmFsIiE9PXMmJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgZD1uZXcgVm8oUlNbcl0sYykscD1jLnVuaWZvcm1zLGg9a3VlW2ldLTEsZj1pc0Zpbml0ZShvKT9NYXRoLlBJLygyKmgpOjIqTWF0aC5QSS8zOSxtPW8vZix4PWlzRmluaXRlKG8pPzErTWF0aC5mbG9vcigzKm0pOjIwO3g+MjAmJmNvbnNvbGUud2Fybihgc2lnbWFSYWRpYW5zLCAke299LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7eH0gc2FtcGxlcyB3aGVuIHRoZSBtYXhpbXVtIGlzIHNldCB0byAyMGApO2xldCBnPVtdLGI9MDtmb3IobGV0IFo9MDtaPDIwOysrWil7bGV0IHo9Wi9tLGZlPU1hdGguZXhwKC16KnovMik7Zy5wdXNoKGZlKSwwPT09Wj9iKz1mZTpaPHgmJihiKz0yKmZlKX1mb3IobGV0IFo9MDtaPGcubGVuZ3RoO1orKylnW1pdPWdbWl0vYjtwLmVudk1hcC52YWx1ZT10LnRleHR1cmUscC5zYW1wbGVzLnZhbHVlPXgscC53ZWlnaHRzLnZhbHVlPWcscC5sYXRpdHVkaW5hbC52YWx1ZT0ibGF0aXR1ZGluYWwiPT09cyxhJiYocC5wb2xlQXhpcy52YWx1ZT1hKSxwLmRUaGV0YS52YWx1ZT1mLHAubWlwSW50LnZhbHVlPTgtaTtsZXQgRD1rdWVbcl07VU8oZSwzKk1hdGgubWF4KDAsd2QtMipEKSwoMD09PXI/MDoyKndkKSsyKkQqKHI+ND9yLTgrNDowKSwzKkQsMipEKSxsLnNldFJlbmRlclRhcmdldChlKSxsLnJlbmRlcihkLFpqKX19O2Z1bmN0aW9uIE5XZSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPTg7Zm9yKGxldCByPTA7cjxOZGU7cisrKXtsZXQgbz1NYXRoLnBvdygyLGkpO3QucHVzaChvKTtsZXQgcz0xL287cj40P3M9RmRlW3ItOCs0LTFdOjA9PT1yJiYocz0wKSxlLnB1c2gocyk7bGV0IGE9MS8oby0xKSxsPS1hLzIsYz0xK2EvMix1PVtsLGwsYyxsLGMsYyxsLGwsYyxjLGwsY10sZD02LHA9NixoPTMsZj0yLG09MSx4PW5ldyBGbG9hdDMyQXJyYXkoaCpwKmQpLGc9bmV3IEZsb2F0MzJBcnJheShmKnAqZCksYj1uZXcgRmxvYXQzMkFycmF5KG0qcCpkKTtmb3IobGV0IFQ9MDtUPGQ7VCsrKXtsZXQgaz1UJTMqMi8zLTEsWj1UPjI/MDotMTt4LnNldChbayxaLDAsaysyLzMsWiwwLGsrMi8zLForMSwwLGssWiwwLGsrMi8zLForMSwwLGssWisxLDBdLGgqcCpUKSxnLnNldCh1LGYqcCpUKSxiLnNldChbVCxULFQsVCxULFRdLG0qcCpUKX1sZXQgRD1uZXcgbnI7RC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgWXIoeCxoKSksRC5zZXRBdHRyaWJ1dGUoInV2IixuZXcgWXIoZyxmKSksRC5zZXRBdHRyaWJ1dGUoImZhY2VJbmRleCIsbmV3IFlyKGIsbSkpLG4ucHVzaChEKSxpPjQmJmktLX1yZXR1cm57X2xvZFBsYW5lczpuLF9zaXplTG9kczp0LF9zaWdtYXM6ZX19ZnVuY3Rpb24gTHVlKG4pe2xldCB0PW5ldyBXYSgzKndkLDMqd2Qsbik7cmV0dXJuIHQudGV4dHVyZS5tYXBwaW5nPTMwNix0LnRleHR1cmUubmFtZT0iUE1SRU0uY3ViZVV2Iix0LnNjaXNzb3JUZXN0PSEwLHR9ZnVuY3Rpb24gVU8obix0LGUsaSxyKXtuLnZpZXdwb3J0LnNldCh0LGUsaSxyKSxuLnNjaXNzb3Iuc2V0KHQsZSxpLHIpfWZ1bmN0aW9uIEJ1ZSgpe2xldCBuPW5ldyBhdCgxLDEpO3JldHVybiBuZXcgX2Ioe25hbWU6IkVxdWlyZWN0YW5ndWxhclRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSx0ZXhlbFNpemU6e3ZhbHVlOm59fSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0YXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cdFx0YXR0cmlidXRlIHZlYzIgdXY7XG5cdFx0YXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDtcblxuXHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0Ly8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvblxuXHRcdHZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkge1xuXG5cdFx0XHR1diA9IDIuMCAqIHV2IC0gMS4wO1xuXG5cdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTtcblxuXHRcdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHpcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh5ICo9IC0xLjA7IC8vICggLXUsIC0xLCB2ICkgbmVnIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpcmVjdGlvbjtcblxuXHRcdH1cblxuXHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0dk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApO1xuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cblx0XHR9XG5cdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0XHRcdHVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XG5cblx0XHRcdCNpbmNsdWRlIDxjb21tb24+XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblxuXHRcdFx0XHR2ZWMzIG91dHB1dERpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdk91dHB1dERpcmVjdGlvbiApO1xuXHRcdFx0XHR2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7XG5cblx0XHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7XG5cdFx0XHRcdHV2IC09IGYgKiB0ZXhlbFNpemU7XG5cdFx0XHRcdHZlYzMgdGwgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXHRcdFx0XHR1di54ICs9IHRleGVsU2l6ZS54O1xuXHRcdFx0XHR2ZWMzIHRyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblx0XHRcdFx0dXYueSArPSB0ZXhlbFNpemUueTtcblx0XHRcdFx0dmVjMyBiciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdFx0XHRcdHV2LnggLT0gdGV4ZWxTaXplLng7XG5cdFx0XHRcdHZlYzMgYmwgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXG5cdFx0XHRcdHZlYzMgdG0gPSBtaXgoIHRsLCB0ciwgZi54ICk7XG5cdFx0XHRcdHZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7XG5cdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIHRtLCBibSwgZi55ICk7XG5cblx0XHRcdH1cblx0XHQiLGJsZW5kaW5nOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBWdWUoKXtyZXR1cm4gbmV3IF9iKHtuYW1lOiJDdWJlbWFwVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHZPdXRwdXREaXJlY3Rpb24ueCwgdk91dHB1dERpcmVjdGlvbi55eiApICk7XG5cblx0XHRcdH1cblx0XHQiLGJsZW5kaW5nOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBCV2Uobil7bGV0IHQ9bmV3IFdlYWtNYXAsZT1udWxsO2Z1bmN0aW9uIG8oYSl7bGV0IGw9YS50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKTtsZXQgYz10LmdldChsKTt2b2lkIDAhPT1jJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfXJldHVybntnZXQ6ZnVuY3Rpb24oYSl7aWYoYSYmYS5pc1RleHR1cmUpe2xldCBsPWEubWFwcGluZyxjPTMwMz09PWx8fDMwND09PWwsdT0zMDE9PT1sfHwzMDI9PT1sO2lmKGN8fHUpe2lmKGEuaXNSZW5kZXJUYXJnZXRUZXh0dXJlJiYhMD09PWEubmVlZHNQTVJFTVVwZGF0ZSl7YS5uZWVkc1BNUkVNVXBkYXRlPSExO2xldCBkPXQuZ2V0KGEpO3JldHVybiBudWxsPT09ZSYmKGU9bmV3IHVrKG4pKSxkPWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKGEsZCk6ZS5mcm9tQ3ViZW1hcChhLGQpLHQuc2V0KGEsZCksZC50ZXh0dXJlfWlmKHQuaGFzKGEpKXJldHVybiB0LmdldChhKS50ZXh0dXJlO3tsZXQgZD1hLmltYWdlO2lmKGMmJmQmJmQuaGVpZ2h0PjB8fHUmJmQmJmZ1bmN0aW9uKGEpe2xldCBsPTA7Zm9yKGxldCB1PTA7dTw2O3UrKyl2b2lkIDAhPT1hW3VdJiZsKys7cmV0dXJuIDY9PT1sfShkKSl7bnVsbD09PWUmJihlPW5ldyB1ayhuKSk7bGV0IHA9Yz9lLmZyb21FcXVpcmVjdGFuZ3VsYXIoYSk6ZS5mcm9tQ3ViZW1hcChhKTtyZXR1cm4gdC5zZXQoYSxwKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG8pLHAudGV4dHVyZX1yZXR1cm4gbnVsbH19fXJldHVybiBhfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dD1uZXcgV2Vha01hcCxudWxsIT09ZSYmKGUuZGlzcG9zZSgpLGU9bnVsbCl9fX1mdW5jdGlvbiBWV2Uobil7bGV0IHQ9e307ZnVuY3Rpb24gZShpKXtpZih2b2lkIDAhPT10W2ldKXJldHVybiB0W2ldO2xldCByO3N3aXRjaChpKXtjYXNlIldFQkdMX2RlcHRoX3RleHR1cmUiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKXx8bi5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9kZXB0aF90ZXh0dXJlIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2JyZWFrO2Nhc2UiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjpyPW4uZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8bi5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxuLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDpyPW4uZ2V0RXh0ZW5zaW9uKGkpfXJldHVybiB0W2ldPXIscn1yZXR1cm57aGFzOmZ1bmN0aW9uKGkpe3JldHVybiBudWxsIT09ZShpKX0saW5pdDpmdW5jdGlvbihpKXtpLmlzV2ViR0wyP2UoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKTooZSgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLGUoIk9FU190ZXh0dXJlX2Zsb2F0IiksZSgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLGUoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIiksZSgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIiksZSgiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLGUoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksZSgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKSxlKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxlKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKSxlKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0sZ2V0OmZ1bmN0aW9uKGkpe2xldCByPWUoaSk7cmV0dXJuIG51bGw9PT1yJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIraSsiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpLHJ9fX1mdW5jdGlvbiBIV2Uobix0LGUsaSl7bGV0IHI9e30sbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBzKGQpe2xldCBwPWQudGFyZ2V0O251bGwhPT1wLmluZGV4JiZ0LnJlbW92ZShwLmluZGV4KTtmb3IobGV0IGYgaW4gcC5hdHRyaWJ1dGVzKXQucmVtb3ZlKHAuYXR0cmlidXRlc1tmXSk7cC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKSxkZWxldGUgcltwLmlkXTtsZXQgaD1vLmdldChwKTtoJiYodC5yZW1vdmUoaCksby5kZWxldGUocCkpLGkucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkocCksITA9PT1wLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkmJmRlbGV0ZSBwLl9tYXhJbnN0YW5jZUNvdW50LGUubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBjKGQpe2xldCBwPVtdLGg9ZC5pbmRleCxmPWQuYXR0cmlidXRlcy5wb3NpdGlvbixtPTA7aWYobnVsbCE9PWgpe2xldCBiPWguYXJyYXk7bT1oLnZlcnNpb247Zm9yKGxldCBEPTAsVD1iLmxlbmd0aDtEPFQ7RCs9Myl7bGV0IGs9YltEKzBdLFo9YltEKzFdLHo9YltEKzJdO3AucHVzaChrLFosWix6LHosayl9fWVsc2V7bT1mLnZlcnNpb247Zm9yKGxldCBEPTAsVD1mLmFycmF5Lmxlbmd0aC8zLTE7RDxUO0QrPTMpe2xldCBrPUQrMCxaPUQrMSx6PUQrMjtwLnB1c2goayxaLFoseix6LGspfX1sZXQgeD1uZXcoT2RlKHApP2xrOmFrKShwLDEpO3gudmVyc2lvbj1tO2xldCBnPW8uZ2V0KGQpO2cmJnQucmVtb3ZlKGcpLG8uc2V0KGQseCl9cmV0dXJue2dldDpmdW5jdGlvbihkLHApe3JldHVybiEwPT09cltwLmlkXXx8KHAuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscykscltwLmlkXT0hMCxlLm1lbW9yeS5nZW9tZXRyaWVzKyspLHB9LHVwZGF0ZTpmdW5jdGlvbihkKXtsZXQgcD1kLmF0dHJpYnV0ZXM7Zm9yKGxldCBmIGluIHApdC51cGRhdGUocFtmXSwzNDk2Mik7bGV0IGg9ZC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBmIGluIGgpe2xldCBtPWhbZl07Zm9yKGxldCB4PTAsZz1tLmxlbmd0aDt4PGc7eCsrKXQudXBkYXRlKG1beF0sMzQ5NjIpfX0sZ2V0V2lyZWZyYW1lQXR0cmlidXRlOmZ1bmN0aW9uKGQpe2xldCBwPW8uZ2V0KGQpO2lmKHApe2xldCBoPWQuaW5kZXg7bnVsbCE9PWgmJnAudmVyc2lvbjxoLnZlcnNpb24mJmMoZCl9ZWxzZSBjKGQpO3JldHVybiBvLmdldChkKX19fWZ1bmN0aW9uIFVXZShuLHQsZSxpKXtsZXQgbyxhLGwscj1pLmlzV2ViR0wyO3RoaXMuc2V0TW9kZT1mdW5jdGlvbihwKXtvPXB9LHRoaXMuc2V0SW5kZXg9ZnVuY3Rpb24ocCl7YT1wLnR5cGUsbD1wLmJ5dGVzUGVyRWxlbWVudH0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24ocCxoKXtuLmRyYXdFbGVtZW50cyhvLGgsYSxwKmwpLGUudXBkYXRlKGgsbywxKX0sdGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24ocCxoLGYpe2lmKDA9PT1mKXJldHVybjtsZXQgbSx4O2lmKHIpbT1uLHg9ImRyYXdFbGVtZW50c0luc3RhbmNlZCI7ZWxzZSBpZihtPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikseD0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLG51bGw9PT1tKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTttW3hdKG8saCxhLHAqbCxmKSxlLnVwZGF0ZShoLG8sZil9fWZ1bmN0aW9uIHpXZShuKXtsZXQgZT17ZnJhbWU6MCxjYWxsczowLHRyaWFuZ2xlczowLHBvaW50czowLGxpbmVzOjB9O3JldHVybnttZW1vcnk6e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxyZW5kZXI6ZSxwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDpmdW5jdGlvbigpe2UuZnJhbWUrKyxlLmNhbGxzPTAsZS50cmlhbmdsZXM9MCxlLnBvaW50cz0wLGUubGluZXM9MH0sdXBkYXRlOmZ1bmN0aW9uKG8scyxhKXtzd2l0Y2goZS5jYWxscysrLHMpe2Nhc2UgNDplLnRyaWFuZ2xlcys9YSooby8zKTticmVhaztjYXNlIDE6ZS5saW5lcys9YSooby8yKTticmVhaztjYXNlIDM6ZS5saW5lcys9YSooby0xKTticmVhaztjYXNlIDI6ZS5saW5lcys9YSpvO2JyZWFrO2Nhc2UgMDplLnBvaW50cys9YSpvO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLHMpfX19fXZhciBKUz1jbGFzcyBleHRlbmRzIEhve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHI9MSl7c3VwZXIobnVsbCksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0OmksZGVwdGg6cn0sdGhpcy5tYWdGaWx0ZXI9Wm8sdGhpcy5taW5GaWx0ZXI9Wm8sdGhpcy53cmFwUj1FbCx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtmdW5jdGlvbiBqV2Uobix0KXtyZXR1cm4gblswXS10WzBdfWZ1bmN0aW9uIEdXZShuLHQpe3JldHVybiBNYXRoLmFicyh0WzFdKS1NYXRoLmFicyhuWzFdKX1mdW5jdGlvbiBIdWUobix0KXtsZXQgZT0xLGk9dC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3QuZGF0YS5hcnJheTp0LmFycmF5O2kgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/ZT0xMjc6aSBpbnN0YW5jZW9mIEludDE2QXJyYXk/ZT0zMjc2NzppIGluc3RhbmNlb2YgSW50MzJBcnJheT9lPTIxNDc0ODM2NDc6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xNb3JwaHRhcmdldHM6IFVuc3VwcG9ydGVkIG1vcnBoIGF0dHJpYnV0ZSBkYXRhIHR5cGU6ICIsaSksbi5kaXZpZGVTY2FsYXIoZSl9ZnVuY3Rpb24gV1dlKG4sdCxlKXtsZXQgaT17fSxyPW5ldyBGbG9hdDMyQXJyYXkoOCksbz1uZXcgV2Vha01hcCxzPW5ldyBpZSxhPVtdO2ZvcihsZXQgYz0wO2M8ODtjKyspYVtjXT1bYywwXTtyZXR1cm57dXBkYXRlOmZ1bmN0aW9uKGMsdSxkLHApe2xldCBoPWMubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKCEwPT09dC5pc1dlYkdMMil7bGV0IGY9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoLG09by5nZXQodSk7aWYodm9pZCAwPT09bXx8bS5jb3VudCE9PWYpe2xldCBGPWZ1bmN0aW9uKCl7aGUuZGlzcG9zZSgpLG8uZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsRil9O3ZvaWQgMCE9PW0mJm0udGV4dHVyZS5kaXNwb3NlKCk7bGV0IGI9dm9pZCAwIT09dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLEQ9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sVD11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLFo9ITA9PT1iPzI6MSx6PXUuYXR0cmlidXRlcy5wb3NpdGlvbi5jb3VudCpaLGZlPTE7ej50Lm1heFRleHR1cmVTaXplJiYoZmU9TWF0aC5jZWlsKHovdC5tYXhUZXh0dXJlU2l6ZSksej10Lm1heFRleHR1cmVTaXplKTtsZXQgdWU9bmV3IEZsb2F0MzJBcnJheSh6KmZlKjQqZiksaGU9bmV3IEpTKHVlLHosZmUsZik7aGUuZm9ybWF0PWdhLGhlLnR5cGU9VWcsaGUubmVlZHNVcGRhdGU9ITA7bGV0IHc9NCpaO2ZvcihsZXQgcT0wO3E8ZjtxKyspe2xldCBLPURbcV0sZGU9VFtxXSxZPXoqZmUqNCpxO2ZvcihsZXQgYWU9MDthZTxLLmNvdW50O2FlKyspe3MuZnJvbUJ1ZmZlckF0dHJpYnV0ZShLLGFlKSwhMD09PUsubm9ybWFsaXplZCYmSHVlKHMsSyk7bGV0IGxlPWFlKnc7dWVbWStsZSswXT1zLngsdWVbWStsZSsxXT1zLnksdWVbWStsZSsyXT1zLnosdWVbWStsZSszXT0wLCEwPT09YiYmKHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShkZSxhZSksITA9PT1kZS5ub3JtYWxpemVkJiZIdWUocyxkZSksdWVbWStsZSs0XT1zLngsdWVbWStsZSs1XT1zLnksdWVbWStsZSs2XT1zLnosdWVbWStsZSs3XT0wKX19bT17Y291bnQ6Zix0ZXh0dXJlOmhlLHNpemU6bmV3IGF0KHosZmUpfSxvLnNldCh1LG0pLHUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsRil9bGV0IHg9MDtmb3IobGV0IGI9MDtiPGgubGVuZ3RoO2IrKyl4Kz1oW2JdO2xldCBnPXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLXg7cC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsZykscC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsaCkscC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0c1RleHR1cmUiLG0udGV4dHVyZSxlKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRzVGV4dHVyZVNpemUiLG0uc2l6ZSl9ZWxzZXtsZXQgZj12b2lkIDA9PT1oPzA6aC5sZW5ndGgsbT1pW3UuaWRdO2lmKHZvaWQgMD09PW18fG0ubGVuZ3RoIT09Zil7bT1bXTtmb3IobGV0IFQ9MDtUPGY7VCsrKW1bVF09W1QsMF07aVt1LmlkXT1tfWZvcihsZXQgVD0wO1Q8ZjtUKyspe2xldCBrPW1bVF07a1swXT1ULGtbMV09aFtUXX1tLnNvcnQoR1dlKTtmb3IobGV0IFQ9MDtUPDg7VCsrKVQ8ZiYmbVtUXVsxXT8oYVtUXVswXT1tW1RdWzBdLGFbVF1bMV09bVtUXVsxXSk6KGFbVF1bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsYVtUXVsxXT0wKTthLnNvcnQoaldlKTtsZXQgeD11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixnPXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxiPTA7Zm9yKGxldCBUPTA7VDw4O1QrKyl7bGV0IGs9YVtUXSxaPWtbMF0sej1rWzFdO1ohPT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiYmej8oeCYmdS5nZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitUKSE9PXhbWl0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrVCx4W1pdKSxnJiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK1QpIT09Z1taXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitULGdbWl0pLHJbVF09eixiKz16KTooeCYmITA9PT11Lmhhc0F0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK1QpJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK1QpLGcmJiEwPT09dS5oYXNBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitUKSYmdS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitUKSxyW1RdPTApfWxldCBEPXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLWI7cC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsRCkscC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIscil9fX19ZnVuY3Rpb24gcVdlKG4sdCxlLGkpe2xldCByPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGEobCl7bGV0IGM9bC50YXJnZXQ7Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxlLnJlbW92ZShjLmluc3RhbmNlTWF0cml4KSxudWxsIT09Yy5pbnN0YW5jZUNvbG9yJiZlLnJlbW92ZShjLmluc3RhbmNlQ29sb3IpfXJldHVybnt1cGRhdGU6ZnVuY3Rpb24obCl7bGV0IGM9aS5yZW5kZXIuZnJhbWUsZD10LmdldChsLGwuZ2VvbWV0cnkpO3JldHVybiByLmdldChkKSE9PWMmJih0LnVwZGF0ZShkKSxyLnNldChkLGMpKSxsLmlzSW5zdGFuY2VkTWVzaCYmKCExPT09bC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSYmbC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxlLnVwZGF0ZShsLmluc3RhbmNlTWF0cml4LDM0OTYyKSxudWxsIT09bC5pbnN0YW5jZUNvbG9yJiZlLnVwZGF0ZShsLmluc3RhbmNlQ29sb3IsMzQ5NjIpKSxkfSxkaXNwb3NlOmZ1bmN0aW9uKCl7cj1uZXcgV2Vha01hcH19fUpTLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDt2YXIgZGs9Y2xhc3MgZXh0ZW5kcyBIb3tjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDppLGRlcHRoOnJ9LHRoaXMubWFnRmlsdGVyPVpvLHRoaXMubWluRmlsdGVyPVpvLHRoaXMud3JhcFI9RWwsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07ZGsucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRD0hMDt2YXIgTGRlPW5ldyBIbyxCZGU9bmV3IEpTLFZkZT1uZXcgZGssSGRlPW5ldyBtYixVdWU9W10senVlPVtdLGp1ZT1uZXcgRmxvYXQzMkFycmF5KDE2KSxHdWU9bmV3IEZsb2F0MzJBcnJheSg5KSxXdWU9bmV3IEZsb2F0MzJBcnJheSg0KTtmdW5jdGlvbiBFYihuLHQsZSl7bGV0IGk9blswXTtpZihpPD0wfHxpPjApcmV0dXJuIG47bGV0IHI9dCplLG89VXVlW3JdO2lmKHZvaWQgMD09PW8mJihvPW5ldyBGbG9hdDMyQXJyYXkociksVXVlW3JdPW8pLDAhPT10KXtpLnRvQXJyYXkobywwKTtmb3IobGV0IHM9MSxhPTA7cyE9PXQ7KytzKWErPWUsbltzXS50b0FycmF5KG8sYSl9cmV0dXJuIG99ZnVuY3Rpb24gX2Eobix0KXtpZihuLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wLGk9bi5sZW5ndGg7ZTxpO2UrKylpZihuW2VdIT09dFtlXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBZcyhuLHQpe2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyluW2VdPXRbZV19ZnVuY3Rpb24ga2sobix0KXtsZXQgZT16dWVbdF07dm9pZCAwPT09ZSYmKGU9bmV3IEludDMyQXJyYXkodCksenVlW3RdPWUpO2ZvcihsZXQgaT0wO2khPT10OysraSllW2ldPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiBlfWZ1bmN0aW9uIFlXZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7ZVswXSE9PXQmJihuLnVuaWZvcm0xZih0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiBYV2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PXQueCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueSkmJihuLnVuaWZvcm0yZih0aGlzLmFkZHIsdC54LHQueSksZVswXT10LngsZVsxXT10LnkpO2Vsc2V7aWYoX2EoZSx0KSlyZXR1cm47bi51bmlmb3JtMmZ2KHRoaXMuYWRkcix0KSxZcyhlLHQpfX1mdW5jdGlvbiBRV2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PXQueCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQueikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLGVbMF09dC54LGVbMV09dC55LGVbMl09dC56KTtlbHNlIGlmKHZvaWQgMCE9PXQucikoZVswXSE9PXQucnx8ZVsxXSE9PXQuZ3x8ZVsyXSE9PXQuYikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLGVbMF09dC5yLGVbMV09dC5nLGVbMl09dC5iKTtlbHNle2lmKF9hKGUsdCkpcmV0dXJuO24udW5pZm9ybTNmdih0aGlzLmFkZHIsdCksWXMoZSx0KX19ZnVuY3Rpb24gS1dlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtpZih2b2lkIDAhPT10LngpKGVbMF0hPT10Lnh8fGVbMV0hPT10Lnl8fGVbMl0hPT10Lnp8fGVbM10hPT10LncpJiYobi51bmlmb3JtNGYodGhpcy5hZGRyLHQueCx0LnksdC56LHQudyksZVswXT10LngsZVsxXT10LnksZVsyXT10LnosZVszXT10LncpO2Vsc2V7aWYoX2EoZSx0KSlyZXR1cm47bi51bmlmb3JtNGZ2KHRoaXMuYWRkcix0KSxZcyhlLHQpfX1mdW5jdGlvbiBaV2Uobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihfYShlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHQpLFlzKGUsdCl9ZWxzZXtpZihfYShlLGkpKXJldHVybjtXdWUuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsV3VlKSxZcyhlLGkpfX1mdW5jdGlvbiBKV2Uobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihfYShlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLHQpLFlzKGUsdCl9ZWxzZXtpZihfYShlLGkpKXJldHVybjtHdWUuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsR3VlKSxZcyhlLGkpfX1mdW5jdGlvbiAkV2Uobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihfYShlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLHQpLFlzKGUsdCl9ZWxzZXtpZihfYShlLGkpKXJldHVybjtqdWUuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsanVlKSxZcyhlLGkpfX1mdW5jdGlvbiBlN2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHQpLGVbMF09dCl9ZnVuY3Rpb24gdDdlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtfYShlLHQpfHwobi51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxZcyhlLHQpKX1mdW5jdGlvbiBuN2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19hKGUsdCl8fChuLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpLFlzKGUsdCkpfWZ1bmN0aW9uIGk3ZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7X2EoZSx0KXx8KG4udW5pZm9ybTRpdih0aGlzLmFkZHIsdCksWXMoZSx0KSl9ZnVuY3Rpb24gcjdlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiBvN2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19hKGUsdCl8fChuLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KSxZcyhlLHQpKX1mdW5jdGlvbiBzN2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19hKGUsdCl8fChuLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KSxZcyhlLHQpKX1mdW5jdGlvbiBhN2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19hKGUsdCl8fChuLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxZcyhlLHQpKX1mdW5jdGlvbiBsN2Uobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2FmZVNldFRleHR1cmUyRCh0fHxMZGUscil9ZnVuY3Rpb24gYzdlKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNldFRleHR1cmUzRCh0fHxWZGUscil9ZnVuY3Rpb24gdTdlKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNhZmVTZXRUZXh0dXJlQ3ViZSh0fHxIZGUscil9ZnVuY3Rpb24gZDdlKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNldFRleHR1cmUyREFycmF5KHR8fEJkZSxyKX1mdW5jdGlvbiBoN2Uobix0KXtuLnVuaWZvcm0xZnYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGY3ZShuLHQpe2xldCBlPUViKHQsdGhpcy5zaXplLDIpO24udW5pZm9ybTJmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gbTdlKG4sdCl7bGV0IGU9RWIodCx0aGlzLnNpemUsMyk7bi51bmlmb3JtM2Z2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBnN2Uobix0KXtsZXQgZT1FYih0LHRoaXMuc2l6ZSw0KTtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIF83ZShuLHQpe2xldCBlPUViKHQsdGhpcy5zaXplLDQpO24udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gdjdlKG4sdCl7bGV0IGU9RWIodCx0aGlzLnNpemUsOSk7bi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiB5N2Uobix0KXtsZXQgZT1FYih0LHRoaXMuc2l6ZSwxNik7bi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiBiN2Uobix0KXtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHg3ZShuLHQpe24udW5pZm9ybTJpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gQzdlKG4sdCl7bi51bmlmb3JtM2l2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBNN2Uobix0KXtuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHc3ZShuLHQpe24udW5pZm9ybTF1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFM3ZShuLHQpe24udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEU3ZShuLHQpe24udW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFQ3ZShuLHQpe24udW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEQ3ZShuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1rayhlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBvPTA7byE9PWk7KytvKWUuc2FmZVNldFRleHR1cmUyRCh0W29dfHxMZGUscltvXSl9ZnVuY3Rpb24gQTdlKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPWtrKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IG89MDtvIT09aTsrK28pZS5zZXRUZXh0dXJlM0QodFtvXXx8VmRlLHJbb10pfWZ1bmN0aW9uIEk3ZShuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1rayhlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBvPTA7byE9PWk7KytvKWUuc2FmZVNldFRleHR1cmVDdWJlKHRbb118fEhkZSxyW29dKX1mdW5jdGlvbiBQN2Uobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9a2soZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgbz0wO28hPT1pOysrbyllLnNldFRleHR1cmUyREFycmF5KHRbb118fEJkZSxyW29dKX1mdW5jdGlvbiBPN2Uobix0LGUpe3RoaXMuaWQ9bix0aGlzLmFkZHI9ZSx0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgNTEyNjpyZXR1cm4gWVdlO2Nhc2UgMzU2NjQ6cmV0dXJuIFhXZTtjYXNlIDM1NjY1OnJldHVybiBRV2U7Y2FzZSAzNTY2NjpyZXR1cm4gS1dlO2Nhc2UgMzU2NzQ6cmV0dXJuIFpXZTtjYXNlIDM1Njc1OnJldHVybiBKV2U7Y2FzZSAzNTY3NjpyZXR1cm4gJFdlO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBlN2U7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiB0N2U7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBuN2U7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBpN2U7Y2FzZSA1MTI1OnJldHVybiByN2U7Y2FzZSAzNjI5NDpyZXR1cm4gbzdlO2Nhc2UgMzYyOTU6cmV0dXJuIHM3ZTtjYXNlIDM2Mjk2OnJldHVybiBhN2U7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBsN2U7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIGM3ZTtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiB1N2U7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gZDdlfX0odC50eXBlKX1mdW5jdGlvbiBVZGUobix0LGUpe3RoaXMuaWQ9bix0aGlzLmFkZHI9ZSx0aGlzLmNhY2hlPVtdLHRoaXMuc2l6ZT10LnNpemUsdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBoN2U7Y2FzZSAzNTY2NDpyZXR1cm4gZjdlO2Nhc2UgMzU2NjU6cmV0dXJuIG03ZTtjYXNlIDM1NjY2OnJldHVybiBnN2U7Y2FzZSAzNTY3NDpyZXR1cm4gXzdlO2Nhc2UgMzU2NzU6cmV0dXJuIHY3ZTtjYXNlIDM1Njc2OnJldHVybiB5N2U7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIGI3ZTtjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIHg3ZTtjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIEM3ZTtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIE03ZTtjYXNlIDUxMjU6cmV0dXJuIHc3ZTtjYXNlIDM2Mjk0OnJldHVybiBTN2U7Y2FzZSAzNjI5NTpyZXR1cm4gRTdlO2Nhc2UgMzYyOTY6cmV0dXJuIFQ3ZTtjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIEQ3ZTtjYXNlIDM1Njc5OmNhc2UgMzYyOTk6Y2FzZSAzNjMwNzpyZXR1cm4gQTdlO2Nhc2UgMzU2ODA6Y2FzZSAzNjMwMDpjYXNlIDM2MzA4OmNhc2UgMzYyOTM6cmV0dXJuIEk3ZTtjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBQN2V9fSh0LnR5cGUpfWZ1bmN0aW9uIHpkZShuKXt0aGlzLmlkPW4sdGhpcy5zZXE9W10sdGhpcy5tYXA9e319VWRlLnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbihuKXtsZXQgdD10aGlzLmNhY2hlO24gaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJnQubGVuZ3RoIT09bi5sZW5ndGgmJih0aGlzLmNhY2hlPW5ldyBGbG9hdDMyQXJyYXkobi5sZW5ndGgpKSxZcyh0LG4pfSx6ZGUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10aGlzLnNlcTtmb3IobGV0IHI9MCxvPWkubGVuZ3RoO3IhPT1vOysrcil7bGV0IHM9aVtyXTtzLnNldFZhbHVlKG4sdFtzLmlkXSxlKX19O3ZhciAkaj0vKFx3KykoXF0pPyhcW3xcLik/L2c7ZnVuY3Rpb24gcXVlKG4sdCl7bi5zZXEucHVzaCh0KSxuLm1hcFt0LmlkXT10fWZ1bmN0aW9uIGs3ZShuLHQsZSl7bGV0IGk9bi5uYW1lLHI9aS5sZW5ndGg7Zm9yKCRqLmxhc3RJbmRleD0wOzspe2xldCBvPSRqLmV4ZWMoaSkscz0kai5sYXN0SW5kZXgsYT1vWzFdLGM9b1szXTtpZigiXSI9PT1vWzJdJiYoYXw9MCksdm9pZCAwPT09Y3x8IlsiPT09YyYmcysyPT09cil7cXVlKGUsdm9pZCAwPT09Yz9uZXcgTzdlKGEsbix0KTpuZXcgVWRlKGEsbix0KSk7YnJlYWt9e2xldCBkPWUubWFwW2FdO3ZvaWQgMD09PWQmJihkPW5ldyB6ZGUoYSkscXVlKGUsZCkpLGU9ZH19fWZ1bmN0aW9uIHlmKG4sdCl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307bGV0IGU9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MTgpO2ZvcihsZXQgaT0wO2k8ZTsrK2kpe2xldCByPW4uZ2V0QWN0aXZlVW5pZm9ybSh0LGkpO2s3ZShyLG4uZ2V0VW5pZm9ybUxvY2F0aW9uKHQsci5uYW1lKSx0aGlzKX19ZnVuY3Rpb24gWXVlKG4sdCxlKXtsZXQgaT1uLmNyZWF0ZVNoYWRlcih0KTtyZXR1cm4gbi5zaGFkZXJTb3VyY2UoaSxlKSxuLmNvbXBpbGVTaGFkZXIoaSksaX15Zi5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9dGhpcy5tYXBbdF07dm9pZCAwIT09ciYmci5zZXRWYWx1ZShuLGUsaSl9LHlmLnByb3RvdHlwZS5zZXRPcHRpb25hbD1mdW5jdGlvbihuLHQsZSl7bGV0IGk9dFtlXTt2b2lkIDAhPT1pJiZ0aGlzLnNldFZhbHVlKG4sZSxpKX0seWYudXBsb2FkPWZ1bmN0aW9uKG4sdCxlLGkpe2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7ciE9PW87KytyKXtsZXQgcz10W3JdLGE9ZVtzLmlkXTshMSE9PWEubmVlZHNVcGRhdGUmJnMuc2V0VmFsdWUobixhLnZhbHVlLGkpfX0seWYuc2VxV2l0aFZhbHVlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTAscj1uLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPW5baV07by5pZCBpbiB0JiZlLnB1c2gobyl9cmV0dXJuIGV9O3ZhciBGN2U9MDtmdW5jdGlvbiBYdWUobix0LGUpe2xldCBpPW4uZ2V0U2hhZGVyUGFyYW1ldGVyKHQsMzU3MTMpLHI9bi5nZXRTaGFkZXJJbmZvTG9nKHQpLnRyaW0oKTtyZXR1cm4gaSYmIiI9PT1yPyIiOmUudG9VcHBlckNhc2UoKSsiXG5cbiIrcisiXG5cbiIrZnVuY3Rpb24obil7bGV0IHQ9bi5zcGxpdCgiXG4iKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPWUrMSsiOiAiK3RbZV07cmV0dXJuIHQuam9pbigiXG4iKX0obi5nZXRTaGFkZXJTb3VyY2UodCkpfWZ1bmN0aW9uIEI3ZShuLHQpe2xldCBlPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIGJmOnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSBXcjpyZXR1cm5bInNSR0IiLCIoIHZhbHVlICkiXTtkZWZhdWx0OnJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6IixuKSxbIkxpbmVhciIsIiggdmFsdWUgKSJdfX0odCk7cmV0dXJuInZlYzQgIituKyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbyIrZVswXStlWzFdKyI7IH0ifWZ1bmN0aW9uIFY3ZShuLHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIDE6ZT0iTGluZWFyIjticmVhaztjYXNlIDI6ZT0iUmVpbmhhcmQiO2JyZWFrO2Nhc2UgMzplPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgNDplPSJBQ0VTRmlsbWljIjticmVhaztjYXNlIDU6ZT0iQ3VzdG9tIjticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCB0b25lTWFwcGluZzoiLHQpLGU9IkxpbmVhciJ9cmV0dXJuInZlYzMgIituKyIoIHZlYzMgY29sb3IgKSB7IHJldHVybiAiK2UrIlRvbmVNYXBwaW5nKCBjb2xvciApOyB9In1mdW5jdGlvbiBWUyhuKXtyZXR1cm4iIiE9PW59ZnVuY3Rpb24gUXVlKG4sdCl7cmV0dXJuIG4ucmVwbGFjZSgvTlVNX0RJUl9MSUdIVFMvZyx0Lm51bURpckxpZ2h0cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRTL2csdC5udW1TcG90TGlnaHRzKS5yZXBsYWNlKC9OVU1fUkVDVF9BUkVBX0xJR0hUUy9nLHQubnVtUmVjdEFyZWFMaWdodHMpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVFMvZyx0Lm51bVBvaW50TGlnaHRzKS5yZXBsYWNlKC9OVU1fSEVNSV9MSUdIVFMvZyx0Lm51bUhlbWlMaWdodHMpLnJlcGxhY2UoL05VTV9ESVJfTElHSFRfU0hBRE9XUy9nLHQubnVtRGlyTGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVF9TSEFET1dTL2csdC5udW1TcG90TGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRfU0hBRE9XUy9nLHQubnVtUG9pbnRMaWdodFNoYWRvd3MpfWZ1bmN0aW9uIEt1ZShuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzLXQubnVtQ2xpcEludGVyc2VjdGlvbil9dmFyIGo3ZT0vXlsgXHRdKiNpbmNsdWRlICs8KFtcd1xkLi9dKyk+L2dtO2Z1bmN0aW9uIGc4KG4pe3JldHVybiBuLnJlcGxhY2UoajdlLEc3ZSl9ZnVuY3Rpb24gRzdlKG4sdCl7bGV0IGU9RGlbdF07aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3QgcmVzb2x2ZSAjaW5jbHVkZSA8Iit0KyI+Iik7cmV0dXJuIGc4KGUpfXZhciBXN2U9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxxN2U9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBadWUobil7cmV0dXJuIG4ucmVwbGFjZShxN2UsamRlKS5yZXBsYWNlKFc3ZSxZN2UpfWZ1bmN0aW9uIFk3ZShuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksamRlKDAsdCxlLGkpfWZ1bmN0aW9uIGpkZShuLHQsZSxpKXtsZXQgcj0iIjtmb3IobGV0IG89cGFyc2VJbnQodCk7bzxwYXJzZUludChlKTtvKyspcis9aS5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrbysiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2csbyk7cmV0dXJuIHJ9ZnVuY3Rpb24gSnVlKG4pe2xldCB0PSJwcmVjaXNpb24gIituLnByZWNpc2lvbisiIGZsb2F0O1xucHJlY2lzaW9uICIrbi5wcmVjaXNpb24rIiBpbnQ7IjtyZXR1cm4iaGlnaHAiPT09bi5wcmVjaXNpb24/dCs9IlxuI2RlZmluZSBISUdIX1BSRUNJU0lPTiI6Im1lZGl1bXAiPT09bi5wcmVjaXNpb24/dCs9IlxuI2RlZmluZSBNRURJVU1fUFJFQ0lTSU9OIjoibG93cCI9PT1uLnByZWNpc2lvbiYmKHQrPSJcbiNkZWZpbmUgTE9XX1BSRUNJU0lPTiIpLHR9ZnVuY3Rpb24gSjdlKG4sdCxlLGkpe2xldCBtLHgscj1uLmdldENvbnRleHQoKSxvPWUuZGVmaW5lcyxzPWUudmVydGV4U2hhZGVyLGE9ZS5mcmFnbWVudFNoYWRlcixsPWZ1bmN0aW9uKG4pe2xldCB0PSJTSEFET1dNQVBfVFlQRV9CQVNJQyI7cmV0dXJuIDE9PT1uLnNoYWRvd01hcFR5cGU/dD0iU0hBRE9XTUFQX1RZUEVfUENGIjoyPT09bi5zaGFkb3dNYXBUeXBlP3Q9IlNIQURPV01BUF9UWVBFX1BDRl9TT0ZUIjozPT09bi5zaGFkb3dNYXBUeXBlJiYodD0iU0hBRE9XTUFQX1RZUEVfVlNNIiksdH0oZSksYz1mdW5jdGlvbihuKXtsZXQgdD0iRU5WTUFQX1RZUEVfQ1VCRSI7aWYobi5lbnZNYXApc3dpdGNoKG4uZW52TWFwTW9kZSl7Y2FzZSAzMDE6Y2FzZSAzMDI6dD0iRU5WTUFQX1RZUEVfQ1VCRSI7YnJlYWs7Y2FzZSAzMDY6Y2FzZSAzMDc6dD0iRU5WTUFQX1RZUEVfQ1VCRV9VViJ9cmV0dXJuIHR9KGUpLHU9ZnVuY3Rpb24obil7bGV0IHQ9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iO2lmKG4uZW52TWFwKXN3aXRjaChuLmVudk1hcE1vZGUpe2Nhc2UgMzAyOmNhc2UgMzA3OnQ9IkVOVk1BUF9NT0RFX1JFRlJBQ1RJT04ifXJldHVybiB0fShlKSxkPWZ1bmN0aW9uKG4pe2xldCB0PSJFTlZNQVBfQkxFTkRJTkdfTk9ORSI7aWYobi5lbnZNYXApc3dpdGNoKG4uY29tYmluZSl7Y2FzZSAwOnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSAxOnQ9IkVOVk1BUF9CTEVORElOR19NSVgiO2JyZWFrO2Nhc2UgMjp0PSJFTlZNQVBfQkxFTkRJTkdfQUREIn1yZXR1cm4gdH0oZSkscD1lLmlzV2ViR0wyPyIiOmZ1bmN0aW9uKG4pe3JldHVybltuLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxuLmVudk1hcEN1YmVVVnx8bi5idW1wTWFwfHxuLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8bi5jbGVhcmNvYXROb3JtYWxNYXB8fG4uZmxhdFNoYWRpbmd8fCJwaHlzaWNhbCI9PT1uLnNoYWRlcklEPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKG4uZXh0ZW5zaW9uRnJhZ0RlcHRofHxuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixuLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChuLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fG4uZW52TWFwfHxuLnRyYW5zbWlzc2lvbikmJm4ucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoVlMpLmpvaW4oIlxuIil9KGUpLGg9ZnVuY3Rpb24obil7bGV0IHQ9W107Zm9yKGxldCBlIGluIG4pe2xldCBpPW5bZV07ITEhPT1pJiZ0LnB1c2goIiNkZWZpbmUgIitlKyIgIitpKX1yZXR1cm4gdC5qb2luKCJcbiIpfShvKSxmPXIuY3JlYXRlUHJvZ3JhbSgpLGc9ZS5nbHNsVmVyc2lvbj8iI3ZlcnNpb24gIitlLmdsc2xWZXJzaW9uKyJcbiI6IiI7ZS5pc1Jhd1NoYWRlck1hdGVyaWFsPyhtPVtoXS5maWx0ZXIoVlMpLmpvaW4oIlxuIiksbS5sZW5ndGg+MCYmKG0rPSJcbiIpLHg9W3AsaF0uZmlsdGVyKFZTKS5qb2luKCJcbiIpLHgubGVuZ3RoPjAmJih4Kz0iXG4iKSk6KG09W0p1ZShlKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK2Uuc2hhZGVyTmFtZSxoLGUuaW5zdGFuY2luZz8iI2RlZmluZSBVU0VfSU5TVEFOQ0lORyI6IiIsZS5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkdfQ09MT1IiOiIiLGUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBWRVJURVhfVEVYVFVSRVMiOiIiLCIjZGVmaW5lIE1BWF9CT05FUyAiK2UubWF4Qm9uZXMsZS51c2VGb2cmJmUuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGUudXNlRm9nJiZlLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGUubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrdToiIixlLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsZS5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLGUuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixlLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLGUubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLGUubm9ybWFsTWFwJiZlLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUudGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLGUuY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLGUuY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixlLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsZS5kaXNwbGFjZW1lbnRNYXAmJmUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIixlLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsZS5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLGUuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsZS5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsZS5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsZS5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLGUudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLGUudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLGUudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLGUuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsZS5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLGUudmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLGUudmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsZS52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixlLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLGUudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLGUuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLGUuc2tpbm5pbmc/IiNkZWZpbmUgVVNFX1NLSU5OSU5HIjoiIixlLnVzZVZlcnRleFRleHR1cmU/IiNkZWZpbmUgQk9ORV9URVhUVVJFIjoiIixlLm1vcnBoVGFyZ2V0cz8iI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTIjoiIixlLm1vcnBoTm9ybWFscyYmITE9PT1lLmZsYXRTaGFkaW5nPyIjZGVmaW5lIFVTRV9NT1JQSE5PUk1BTFMiOiIiLGUubW9ycGhUYXJnZXRzJiZlLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19URVhUVVJFIjoiIixlLm1vcnBoVGFyZ2V0cyYmZS5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfQ09VTlQgIitlLm1vcnBoVGFyZ2V0c0NvdW50OiIiLGUuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixlLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixlLnNpemVBdHRlbnVhdGlvbj8iI2RlZmluZSBVU0VfU0laRUFUVEVOVUFUSU9OIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmUucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsInVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgbW9kZWxWaWV3TWF0cml4OyIsInVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OyIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkciLCJcdGF0dHJpYnV0ZSBtYXQ0IGluc3RhbmNlTWF0cml4OyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUiIsIlx0YXR0cmlidXRlIHZlYzMgaW5zdGFuY2VDb2xvcjsiLCIjZW5kaWYiLCJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBub3JtYWw7IiwiYXR0cmlidXRlIHZlYzIgdXY7IiwiI2lmZGVmIFVTRV9UQU5HRU5UIiwiXHRhdHRyaWJ1dGUgdmVjNCB0YW5nZW50OyIsIiNlbmRpZiIsIiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKSIsIlx0YXR0cmlidXRlIHZlYzQgY29sb3I7IiwiI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkiLCJcdGF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZiAoIGRlZmluZWQoIFVTRV9NT1JQSFRBUkdFVFMgKSAmJiAhIGRlZmluZWQoIE1PUlBIVEFSR0VUU19URVhUVVJFICkgKSIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIlx0I2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIlx0I2Vsc2UiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIlx0I2VuZGlmIiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9TS0lOTklORyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLCIjZW5kaWYiLCJcbiJdLmZpbHRlcihWUykuam9pbigiXG4iKSx4PVtwLEp1ZShlKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK2Uuc2hhZGVyTmFtZSxoLGUudXNlRm9nJiZlLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixlLnVzZUZvZyYmZS5mb2dFeHAyPyIjZGVmaW5lIEZPR19FWFAyIjoiIixlLm1hcD8iI2RlZmluZSBVU0VfTUFQIjoiIixlLm1hdGNhcD8iI2RlZmluZSBVU0VfTUFUQ0FQIjoiIixlLmVudk1hcD8iI2RlZmluZSBVU0VfRU5WTUFQIjoiIixlLmVudk1hcD8iI2RlZmluZSAiK2M6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIit1OiIiLGUuZW52TWFwPyIjZGVmaW5lICIrZDoiIixlLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsZS5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLGUuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixlLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLGUubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLGUubm9ybWFsTWFwJiZlLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUudGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLGUuY2xlYXJjb2F0PyIjZGVmaW5lIFVTRV9DTEVBUkNPQVQiOiIiLGUuY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLGUuY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixlLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsZS5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLGUuc3BlY3VsYXJJbnRlbnNpdHlNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQIjoiIixlLnNwZWN1bGFyQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSQ09MT1JNQVAiOiIiLGUucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLGUubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLGUuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixlLmFscGhhVGVzdD8iI2RlZmluZSBVU0VfQUxQSEFURVNUIjoiIixlLnNoZWVuPyIjZGVmaW5lIFVTRV9TSEVFTiI6IiIsZS5zaGVlbkNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQIjoiIixlLnNoZWVuUm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCI6IiIsZS50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsZS50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsZS50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsZS5kZWNvZGVWaWRlb1RleHR1cmU/IiNkZWZpbmUgREVDT0RFX1ZJREVPX1RFWFRVUkUiOiIiLGUudmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLGUudmVydGV4Q29sb3JzfHxlLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfQ09MT1IiOiIiLGUudmVydGV4QWxwaGFzPyIjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQSI6IiIsZS52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixlLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixlLmdyYWRpZW50TWFwPyIjZGVmaW5lIFVTRV9HUkFESUVOVE1BUCI6IiIsZS5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZS5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGUuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLGUucHJlbXVsdGlwbGllZEFscGhhPyIjZGVmaW5lIFBSRU1VTFRJUExJRURfQUxQSEEiOiIiLGUucGh5c2ljYWxseUNvcnJlY3RMaWdodHM/IiNkZWZpbmUgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyI6IiIsZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLChlLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fGUuZW52TWFwKSYmZS5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNkZWZpbmUgVEVYVFVSRV9MT0RfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLDAhPT1lLnRvbmVNYXBwaW5nPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsMCE9PWUudG9uZU1hcHBpbmc/RGkudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIiwwIT09ZS50b25lTWFwcGluZz9WN2UoInRvbmVNYXBwaW5nIixlLnRvbmVNYXBwaW5nKToiIixlLmRpdGhlcmluZz8iI2RlZmluZSBESVRIRVJJTkciOiIiLGUuYWxwaGFXcml0ZT8iIjoiI2RlZmluZSBPUEFRVUUiLERpLmVuY29kaW5nc19wYXJzX2ZyYWdtZW50LEI3ZSgibGluZWFyVG9PdXRwdXRUZXhlbCIsZS5vdXRwdXRFbmNvZGluZyksZS5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK2UuZGVwdGhQYWNraW5nOiIiLCJcbiJdLmZpbHRlcihWUykuam9pbigiXG4iKSkscz1nOChzKSxzPVF1ZShzLGUpLHM9S3VlKHMsZSksYT1nOChhKSxhPVF1ZShhLGUpLGE9S3VlKGEsZSkscz1adWUocyksYT1adWUoYSksZS5pc1dlYkdMMiYmITAhPT1lLmlzUmF3U2hhZGVyTWF0ZXJpYWwmJihnPSIjdmVyc2lvbiAzMDAgZXNcbiIsbT1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKCJcbiIpKyJcbiIrbSx4PVsiI2RlZmluZSB2YXJ5aW5nIGluIiwiMzAwIGVzIj09PWUuZ2xzbFZlcnNpb24/IiI6ImxheW91dChsb2NhdGlvbiA9IDApIG91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLCIzMDAgZXMiPT09ZS5nbHNsVmVyc2lvbj8iIjoiI2RlZmluZSBnbF9GcmFnQ29sb3IgcGNfZnJhZ0NvbG9yIiwiI2RlZmluZSBnbF9GcmFnRGVwdGhFWFQgZ2xfRnJhZ0RlcHRoIiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZUN1YmUgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlUHJvaiIsIiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pMb2RFWFQgdGV4dHVyZVByb2pMb2QiLCIjZGVmaW5lIHRleHR1cmVDdWJlTG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pHcmFkRVhUIHRleHR1cmVQcm9qR3JhZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVHcmFkRVhUIHRleHR1cmVHcmFkIl0uam9pbigiXG4iKSsiXG4iK3gpO2xldCBaLHosRD1nK3grYSxUPVl1ZShyLDM1NjMzLGcrbStzKSxrPVl1ZShyLDM1NjMyLEQpO2lmKHIuYXR0YWNoU2hhZGVyKGYsVCksci5hdHRhY2hTaGFkZXIoZixrKSx2b2lkIDAhPT1lLmluZGV4MEF0dHJpYnV0ZU5hbWU/ci5iaW5kQXR0cmliTG9jYXRpb24oZiwwLGUuaW5kZXgwQXR0cmlidXRlTmFtZSk6ITA9PT1lLm1vcnBoVGFyZ2V0cyYmci5iaW5kQXR0cmliTG9jYXRpb24oZiwwLCJwb3NpdGlvbiIpLHIubGlua1Byb2dyYW0oZiksbi5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7bGV0IGZlPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZikudHJpbSgpLHVlPXIuZ2V0U2hhZGVySW5mb0xvZyhUKS50cmltKCksaGU9ci5nZXRTaGFkZXJJbmZvTG9nKGspLnRyaW0oKSx3PSEwLEY9ITA7aWYoITE9PT1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZiwzNTcxNCkpe3c9ITE7bGV0IHE9WHVlKHIsVCwidmVydGV4IiksSz1YdWUocixrLCJmcmFnbWVudCIpO2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUHJvZ3JhbTogU2hhZGVyIEVycm9yICIrci5nZXRFcnJvcigpKyIgLSBWQUxJREFURV9TVEFUVVMgIityLmdldFByb2dyYW1QYXJhbWV0ZXIoZiwzNTcxNSkrIlxuXG5Qcm9ncmFtIEluZm8gTG9nOiAiK2ZlKyJcbiIrcSsiXG4iK0spfWVsc2UiIiE9PWZlP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBQcm9ncmFtIEluZm8gTG9nOiIsZmUpOigiIj09PXVlfHwiIj09PWhlKSYmKEY9ITEpO0YmJih0aGlzLmRpYWdub3N0aWNzPXtydW5uYWJsZTp3LHByb2dyYW1Mb2c6ZmUsdmVydGV4U2hhZGVyOntsb2c6dWUscHJlZml4Om19LGZyYWdtZW50U2hhZGVyOntsb2c6aGUscHJlZml4Onh9fSl9cmV0dXJuIHIuZGVsZXRlU2hhZGVyKFQpLHIuZGVsZXRlU2hhZGVyKGspLHRoaXMuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09WiYmKFo9bmV3IHlmKHIsZikpLFp9LHRoaXMuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT16JiYoej1mdW5jdGlvbihuLHQpe2xldCBlPXt9LGk9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgcj0wO3I8aTtyKyspe2xldCBvPW4uZ2V0QWN0aXZlQXR0cmliKHQscikscz1vLm5hbWUsYT0xOzM1Njc0PT09by50eXBlJiYoYT0yKSwzNTY3NT09PW8udHlwZSYmKGE9MyksMzU2NzY9PT1vLnR5cGUmJihhPTQpLGVbc109e3R5cGU6by50eXBlLGxvY2F0aW9uOm4uZ2V0QXR0cmliTG9jYXRpb24odCxzKSxsb2NhdGlvblNpemU6YX19cmV0dXJuIGV9KHIsZikpLHp9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKSxyLmRlbGV0ZVByb2dyYW0oZiksdGhpcy5wcm9ncmFtPXZvaWQgMH0sdGhpcy5uYW1lPWUuc2hhZGVyTmFtZSx0aGlzLmlkPUY3ZSsrLHRoaXMuY2FjaGVLZXk9dCx0aGlzLnVzZWRUaW1lcz0xLHRoaXMucHJvZ3JhbT1mLHRoaXMudmVydGV4U2hhZGVyPVQsdGhpcy5mcmFnbWVudFNoYWRlcj1rLHRoaXN9dmFyICQ3ZT0wO2Z1bmN0aW9uIGU5ZShuLHQsZSxpLHIsbyxzKXtsZXQgYT1uZXcgc2ssbD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNoYWRlckNhY2hlPW5ldyBNYXAsdGhpcy5tYXRlcmlhbENhY2hlPW5ldyBNYXB9dXBkYXRlKHQpe2xldCBpPXQuZnJhZ21lbnRTaGFkZXIscj10aGlzLl9nZXRTaGFkZXJTdGFnZSh0LnZlcnRleFNoYWRlciksbz10aGlzLl9nZXRTaGFkZXJTdGFnZShpKSxzPXRoaXMuX2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCk7cmV0dXJuITE9PT1zLmhhcyhyKSYmKHMuYWRkKHIpLHIudXNlZFRpbWVzKyspLCExPT09cy5oYXMobykmJihzLmFkZChvKSxvLnVzZWRUaW1lcysrKSx0aGlzfXJlbW92ZSh0KXtsZXQgZT10aGlzLm1hdGVyaWFsQ2FjaGUuZ2V0KHQpO2ZvcihsZXQgaSBvZiBlKWkudXNlZFRpbWVzLS0sMD09PWkudXNlZFRpbWVzJiZ0aGlzLnNoYWRlckNhY2hlLmRlbGV0ZShpKTtyZXR1cm4gdGhpcy5tYXRlcmlhbENhY2hlLmRlbGV0ZSh0KSx0aGlzfWdldFZlcnRleFNoYWRlcklEKHQpe3JldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSh0LnZlcnRleFNoYWRlcikuaWR9Z2V0RnJhZ21lbnRTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC5mcmFnbWVudFNoYWRlcikuaWR9ZGlzcG9zZSgpe3RoaXMuc2hhZGVyQ2FjaGUuY2xlYXIoKSx0aGlzLm1hdGVyaWFsQ2FjaGUuY2xlYXIoKX1fZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbCh0KXtsZXQgZT10aGlzLm1hdGVyaWFsQ2FjaGU7cmV0dXJuITE9PT1lLmhhcyh0KSYmZS5zZXQodCxuZXcgU2V0KSxlLmdldCh0KX1fZ2V0U2hhZGVyU3RhZ2UodCl7bGV0IGU9dGhpcy5zaGFkZXJDYWNoZTtpZighMT09PWUuaGFzKHQpKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmlkPSQ3ZSsrLHRoaXMudXNlZFRpbWVzPTB9fTtlLnNldCh0LGkpfXJldHVybiBlLmdldCh0KX19LGM9W10sdT1yLmlzV2ViR0wyLGQ9ci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHA9ci5mbG9hdFZlcnRleFRleHR1cmVzLGg9ci5tYXhWZXJ0ZXhVbmlmb3JtcyxmPXIudmVydGV4VGV4dHVyZXMsbT1yLnByZWNpc2lvbix4PXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hEaXN0YW5jZU1hdGVyaWFsOiJkaXN0YW5jZVJHQkEiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoidG9vbiIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoUGh5c2ljYWxNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hNYXRjYXBNYXRlcmlhbDoibWF0Y2FwIixMaW5lQmFzaWNNYXRlcmlhbDoiYmFzaWMiLExpbmVEYXNoZWRNYXRlcmlhbDoiZGFzaGVkIixQb2ludHNNYXRlcmlhbDoicG9pbnRzIixTaGFkb3dNYXRlcmlhbDoic2hhZG93IixTcHJpdGVNYXRlcmlhbDoic3ByaXRlIn07cmV0dXJue2dldFBhcmFtZXRlcnM6ZnVuY3Rpb24odyxGLHEsSyxkZSl7bGV0IERlLG50LGd0LFVlLFk9Sy5mb2csbGU9KHcuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9lOnQpLmdldCh3LmVudk1hcHx8KHcuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9LLmVudmlyb25tZW50Om51bGwpKSxJZT14W3cudHlwZV0sdmU9ZGUuaXNTa2lubmVkTWVzaD9mdW5jdGlvbih3KXtsZXQgcT13LnNrZWxldG9uLmJvbmVzO2lmKHApcmV0dXJuIDEwMjQ7e2xldCBkZT1NYXRoLmZsb29yKChoLTIwKS80KSxZPU1hdGgubWluKGRlLHEubGVuZ3RoKTtyZXR1cm4gWTxxLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitxLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK1krIi4iKSwwKTpZfX0oZGUpOjA7aWYobnVsbCE9PXcucHJlY2lzaW9uJiYobT1yLmdldE1heFByZWNpc2lvbih3LnByZWNpc2lvbiksbSE9PXcucHJlY2lzaW9uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOiIsdy5wcmVjaXNpb24sIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixtLCJpbnN0ZWFkLiIpKSxJZSl7bGV0IFRlPVNkW0llXTtEZT1UZS52ZXJ0ZXhTaGFkZXIsbnQ9VGUuZnJhZ21lbnRTaGFkZXJ9ZWxzZSBEZT13LnZlcnRleFNoYWRlcixudD13LmZyYWdtZW50U2hhZGVyLGwudXBkYXRlKHcpLGd0PWwuZ2V0VmVydGV4U2hhZGVySUQodyksVWU9bC5nZXRGcmFnbWVudFNoYWRlcklEKHcpO2xldCBBZT1uLmdldFJlbmRlclRhcmdldCgpLHB0PXcuY2xlYXJjb2F0PjA7cmV0dXJue2lzV2ViR0wyOnUsc2hhZGVySUQ6SWUsc2hhZGVyTmFtZTp3LnR5cGUsdmVydGV4U2hhZGVyOkRlLGZyYWdtZW50U2hhZGVyOm50LGRlZmluZXM6dy5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmd0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6VWUsaXNSYXdTaGFkZXJNYXRlcmlhbDohMD09PXcuaXNSYXdTaGFkZXJNYXRlcmlhbCxnbHNsVmVyc2lvbjp3Lmdsc2xWZXJzaW9uLHByZWNpc2lvbjptLGluc3RhbmNpbmc6ITA9PT1kZS5pc0luc3RhbmNlZE1lc2gsaW5zdGFuY2luZ0NvbG9yOiEwPT09ZGUuaXNJbnN0YW5jZWRNZXNoJiZudWxsIT09ZGUuaW5zdGFuY2VDb2xvcixzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmYsb3V0cHV0RW5jb2Rpbmc6bnVsbD09PUFlP24ub3V0cHV0RW5jb2Rpbmc6ITA9PT1BZS5pc1hSUmVuZGVyVGFyZ2V0P0FlLnRleHR1cmUuZW5jb2Rpbmc6YmYsbWFwOiEhdy5tYXAsbWF0Y2FwOiEhdy5tYXRjYXAsZW52TWFwOiEhbGUsZW52TWFwTW9kZTpsZSYmbGUubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFsZSYmKDMwNj09PWxlLm1hcHBpbmd8fDMwNz09PWxlLm1hcHBpbmcpLGxpZ2h0TWFwOiEhdy5saWdodE1hcCxhb01hcDohIXcuYW9NYXAsZW1pc3NpdmVNYXA6ISF3LmVtaXNzaXZlTWFwLGJ1bXBNYXA6ISF3LmJ1bXBNYXAsbm9ybWFsTWFwOiEhdy5ub3JtYWxNYXAsb2JqZWN0U3BhY2VOb3JtYWxNYXA6MT09PXcubm9ybWFsTWFwVHlwZSx0YW5nZW50U3BhY2VOb3JtYWxNYXA6MD09PXcubm9ybWFsTWFwVHlwZSxkZWNvZGVWaWRlb1RleHR1cmU6ISF3Lm1hcCYmITA9PT13Lm1hcC5pc1ZpZGVvVGV4dHVyZSYmdy5tYXAuZW5jb2Rpbmc9PT1XcixjbGVhcmNvYXQ6cHQsY2xlYXJjb2F0TWFwOnB0JiYhIXcuY2xlYXJjb2F0TWFwLGNsZWFyY29hdFJvdWdobmVzc01hcDpwdCYmISF3LmNsZWFyY29hdFJvdWdobmVzc01hcCxjbGVhcmNvYXROb3JtYWxNYXA6cHQmJiEhdy5jbGVhcmNvYXROb3JtYWxNYXAsZGlzcGxhY2VtZW50TWFwOiEhdy5kaXNwbGFjZW1lbnRNYXAscm91Z2huZXNzTWFwOiEhdy5yb3VnaG5lc3NNYXAsbWV0YWxuZXNzTWFwOiEhdy5tZXRhbG5lc3NNYXAsc3BlY3VsYXJNYXA6ISF3LnNwZWN1bGFyTWFwLHNwZWN1bGFySW50ZW5zaXR5TWFwOiEhdy5zcGVjdWxhckludGVuc2l0eU1hcCxzcGVjdWxhckNvbG9yTWFwOiEhdy5zcGVjdWxhckNvbG9yTWFwLGFscGhhTWFwOiEhdy5hbHBoYU1hcCxhbHBoYVRlc3Q6dy5hbHBoYVRlc3Q+MCxhbHBoYVdyaXRlOncuYWxwaGFXcml0ZXx8dy50cmFuc3BhcmVudCxncmFkaWVudE1hcDohIXcuZ3JhZGllbnRNYXAsc2hlZW46dy5zaGVlbj4wLHNoZWVuQ29sb3JNYXA6ISF3LnNoZWVuQ29sb3JNYXAsc2hlZW5Sb3VnaG5lc3NNYXA6ISF3LnNoZWVuUm91Z2huZXNzTWFwLHRyYW5zbWlzc2lvbjp3LnRyYW5zbWlzc2lvbj4wLHRyYW5zbWlzc2lvbk1hcDohIXcudHJhbnNtaXNzaW9uTWFwLHRoaWNrbmVzc01hcDohIXcudGhpY2tuZXNzTWFwLGNvbWJpbmU6dy5jb21iaW5lLHZlcnRleFRhbmdlbnRzOiEhdy5ub3JtYWxNYXAmJiEhZGUuZ2VvbWV0cnkmJiEhZGUuZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50LHZlcnRleENvbG9yczp3LnZlcnRleENvbG9ycyx2ZXJ0ZXhBbHBoYXM6ITA9PT13LnZlcnRleENvbG9ycyYmISFkZS5nZW9tZXRyeSYmISFkZS5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yJiY0PT09ZGUuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSx2ZXJ0ZXhVdnM6ISEody5tYXB8fHcuYnVtcE1hcHx8dy5ub3JtYWxNYXB8fHcuc3BlY3VsYXJNYXB8fHcuYWxwaGFNYXB8fHcuZW1pc3NpdmVNYXB8fHcucm91Z2huZXNzTWFwfHx3Lm1ldGFsbmVzc01hcHx8dy5jbGVhcmNvYXRNYXB8fHcuY2xlYXJjb2F0Um91Z2huZXNzTWFwfHx3LmNsZWFyY29hdE5vcm1hbE1hcHx8dy5kaXNwbGFjZW1lbnRNYXB8fHcudHJhbnNtaXNzaW9uTWFwfHx3LnRoaWNrbmVzc01hcHx8dy5zcGVjdWxhckludGVuc2l0eU1hcHx8dy5zcGVjdWxhckNvbG9yTWFwfHx3LnNoZWVuQ29sb3JNYXB8fHcuc2hlZW5Sb3VnaG5lc3NNYXApLHV2c1ZlcnRleE9ubHk6ISh3Lm1hcHx8dy5idW1wTWFwfHx3Lm5vcm1hbE1hcHx8dy5zcGVjdWxhck1hcHx8dy5hbHBoYU1hcHx8dy5lbWlzc2l2ZU1hcHx8dy5yb3VnaG5lc3NNYXB8fHcubWV0YWxuZXNzTWFwfHx3LmNsZWFyY29hdE5vcm1hbE1hcHx8dy50cmFuc21pc3Npb24+MHx8dy50cmFuc21pc3Npb25NYXB8fHcudGhpY2tuZXNzTWFwfHx3LnNwZWN1bGFySW50ZW5zaXR5TWFwfHx3LnNwZWN1bGFyQ29sb3JNYXB8fHcuc2hlZW4+MHx8dy5zaGVlbkNvbG9yTWFwfHx3LnNoZWVuUm91Z2huZXNzTWFwfHwhdy5kaXNwbGFjZW1lbnRNYXApLGZvZzohIVksdXNlRm9nOncuZm9nLGZvZ0V4cDI6WSYmWS5pc0ZvZ0V4cDIsZmxhdFNoYWRpbmc6ISF3LmZsYXRTaGFkaW5nLHNpemVBdHRlbnVhdGlvbjp3LnNpemVBdHRlbnVhdGlvbixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmQsc2tpbm5pbmc6ITA9PT1kZS5pc1NraW5uZWRNZXNoJiZ2ZT4wLG1heEJvbmVzOnZlLHVzZVZlcnRleFRleHR1cmU6cCxtb3JwaFRhcmdldHM6ISFkZS5nZW9tZXRyeSYmISFkZS5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhZGUuZ2VvbWV0cnkmJiEhZGUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxtb3JwaFRhcmdldHNDb3VudDpkZS5nZW9tZXRyeSYmZGUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP2RlLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg6MCxudW1EaXJMaWdodHM6Ri5kaXJlY3Rpb25hbC5sZW5ndGgsbnVtUG9pbnRMaWdodHM6Ri5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpGLnNwb3QubGVuZ3RoLG51bVJlY3RBcmVhTGlnaHRzOkYucmVjdEFyZWEubGVuZ3RoLG51bUhlbWlMaWdodHM6Ri5oZW1pLmxlbmd0aCxudW1EaXJMaWdodFNoYWRvd3M6Ri5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGgsbnVtUG9pbnRMaWdodFNoYWRvd3M6Ri5wb2ludFNoYWRvd01hcC5sZW5ndGgsbnVtU3BvdExpZ2h0U2hhZG93czpGLnNwb3RTaGFkb3dNYXAubGVuZ3RoLG51bUNsaXBwaW5nUGxhbmVzOnMubnVtUGxhbmVzLG51bUNsaXBJbnRlcnNlY3Rpb246cy5udW1JbnRlcnNlY3Rpb24sZGl0aGVyaW5nOncuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6bi5zaGFkb3dNYXAuZW5hYmxlZCYmcS5sZW5ndGg+MCxzaGFkb3dNYXBUeXBlOm4uc2hhZG93TWFwLnR5cGUsdG9uZU1hcHBpbmc6dy50b25lTWFwcGVkP24udG9uZU1hcHBpbmc6MCxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czpuLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTp3LnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDoyPT09dy5zaWRlLGZsaXBTaWRlZDoxPT09dy5zaWRlLGRlcHRoUGFja2luZzp2b2lkIDAhPT13LmRlcHRoUGFja2luZyYmdy5kZXB0aFBhY2tpbmcsaW5kZXgwQXR0cmlidXRlTmFtZTp3LmluZGV4MEF0dHJpYnV0ZU5hbWUsZXh0ZW5zaW9uRGVyaXZhdGl2ZXM6dy5leHRlbnNpb25zJiZ3LmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMsZXh0ZW5zaW9uRnJhZ0RlcHRoOncuZXh0ZW5zaW9ucyYmdy5leHRlbnNpb25zLmZyYWdEZXB0aCxleHRlbnNpb25EcmF3QnVmZmVyczp3LmV4dGVuc2lvbnMmJncuZXh0ZW5zaW9ucy5kcmF3QnVmZmVycyxleHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EOncuZXh0ZW5zaW9ucyYmdy5leHRlbnNpb25zLnNoYWRlclRleHR1cmVMT0QscmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg6dXx8aS5oYXMoIkVYVF9mcmFnX2RlcHRoIikscmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVyczp1fHxpLmhhcygiV0VCR0xfZHJhd19idWZmZXJzIikscmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kOnV8fGkuaGFzKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIiksY3VzdG9tUHJvZ3JhbUNhY2hlS2V5OncuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl9fSxnZXRQcm9ncmFtQ2FjaGVLZXk6ZnVuY3Rpb24odyl7bGV0IEY9W107aWYody5zaGFkZXJJRD9GLnB1c2gody5zaGFkZXJJRCk6KEYucHVzaCh3LmN1c3RvbVZlcnRleFNoYWRlcklEKSxGLnB1c2gody5jdXN0b21GcmFnbWVudFNoYWRlcklEKSksdm9pZCAwIT09dy5kZWZpbmVzKWZvcihsZXQgcSBpbiB3LmRlZmluZXMpRi5wdXNoKHEpLEYucHVzaCh3LmRlZmluZXNbcV0pO3JldHVybiExPT09dy5pc1Jhd1NoYWRlck1hdGVyaWFsJiYoZnVuY3Rpb24odyxGKXt3LnB1c2goRi5wcmVjaXNpb24pLHcucHVzaChGLm91dHB1dEVuY29kaW5nKSx3LnB1c2goRi5lbnZNYXBNb2RlKSx3LnB1c2goRi5jb21iaW5lKSx3LnB1c2goRi52ZXJ0ZXhVdnMpLHcucHVzaChGLmZvZ0V4cDIpLHcucHVzaChGLnNpemVBdHRlbnVhdGlvbiksdy5wdXNoKEYubWF4Qm9uZXMpLHcucHVzaChGLm1vcnBoVGFyZ2V0c0NvdW50KSx3LnB1c2goRi5udW1EaXJMaWdodHMpLHcucHVzaChGLm51bVBvaW50TGlnaHRzKSx3LnB1c2goRi5udW1TcG90TGlnaHRzKSx3LnB1c2goRi5udW1IZW1pTGlnaHRzKSx3LnB1c2goRi5udW1SZWN0QXJlYUxpZ2h0cyksdy5wdXNoKEYubnVtRGlyTGlnaHRTaGFkb3dzKSx3LnB1c2goRi5udW1Qb2ludExpZ2h0U2hhZG93cyksdy5wdXNoKEYubnVtU3BvdExpZ2h0U2hhZG93cyksdy5wdXNoKEYuc2hhZG93TWFwVHlwZSksdy5wdXNoKEYudG9uZU1hcHBpbmcpLHcucHVzaChGLm51bUNsaXBwaW5nUGxhbmVzKSx3LnB1c2goRi5udW1DbGlwSW50ZXJzZWN0aW9uKSx3LnB1c2goRi5hbHBoYVdyaXRlKX0oRix3KSxmdW5jdGlvbih3LEYpe2EuZGlzYWJsZUFsbCgpLEYuaXNXZWJHTDImJmEuZW5hYmxlKDApLEYuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmYS5lbmFibGUoMSksRi5pbnN0YW5jaW5nJiZhLmVuYWJsZSgyKSxGLmluc3RhbmNpbmdDb2xvciYmYS5lbmFibGUoMyksRi5tYXAmJmEuZW5hYmxlKDQpLEYubWF0Y2FwJiZhLmVuYWJsZSg1KSxGLmVudk1hcCYmYS5lbmFibGUoNiksRi5lbnZNYXBDdWJlVVYmJmEuZW5hYmxlKDcpLEYubGlnaHRNYXAmJmEuZW5hYmxlKDgpLEYuYW9NYXAmJmEuZW5hYmxlKDkpLEYuZW1pc3NpdmVNYXAmJmEuZW5hYmxlKDEwKSxGLmJ1bXBNYXAmJmEuZW5hYmxlKDExKSxGLm5vcm1hbE1hcCYmYS5lbmFibGUoMTIpLEYub2JqZWN0U3BhY2VOb3JtYWxNYXAmJmEuZW5hYmxlKDEzKSxGLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmYS5lbmFibGUoMTQpLEYuY2xlYXJjb2F0JiZhLmVuYWJsZSgxNSksRi5jbGVhcmNvYXRNYXAmJmEuZW5hYmxlKDE2KSxGLmNsZWFyY29hdFJvdWdobmVzc01hcCYmYS5lbmFibGUoMTcpLEYuY2xlYXJjb2F0Tm9ybWFsTWFwJiZhLmVuYWJsZSgxOCksRi5kaXNwbGFjZW1lbnRNYXAmJmEuZW5hYmxlKDE5KSxGLnNwZWN1bGFyTWFwJiZhLmVuYWJsZSgyMCksRi5yb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDIxKSxGLm1ldGFsbmVzc01hcCYmYS5lbmFibGUoMjIpLEYuZ3JhZGllbnRNYXAmJmEuZW5hYmxlKDIzKSxGLmFscGhhTWFwJiZhLmVuYWJsZSgyNCksRi5hbHBoYVRlc3QmJmEuZW5hYmxlKDI1KSxGLnZlcnRleENvbG9ycyYmYS5lbmFibGUoMjYpLEYudmVydGV4QWxwaGFzJiZhLmVuYWJsZSgyNyksRi52ZXJ0ZXhVdnMmJmEuZW5hYmxlKDI4KSxGLnZlcnRleFRhbmdlbnRzJiZhLmVuYWJsZSgyOSksRi51dnNWZXJ0ZXhPbmx5JiZhLmVuYWJsZSgzMCksRi5mb2cmJmEuZW5hYmxlKDMxKSx3LnB1c2goYS5tYXNrKSxhLmRpc2FibGVBbGwoKSxGLnVzZUZvZyYmYS5lbmFibGUoMCksRi5mbGF0U2hhZGluZyYmYS5lbmFibGUoMSksRi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZhLmVuYWJsZSgyKSxGLnNraW5uaW5nJiZhLmVuYWJsZSgzKSxGLnVzZVZlcnRleFRleHR1cmUmJmEuZW5hYmxlKDQpLEYubW9ycGhUYXJnZXRzJiZhLmVuYWJsZSg1KSxGLm1vcnBoTm9ybWFscyYmYS5lbmFibGUoNiksRi5wcmVtdWx0aXBsaWVkQWxwaGEmJmEuZW5hYmxlKDcpLEYuc2hhZG93TWFwRW5hYmxlZCYmYS5lbmFibGUoOCksRi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmYS5lbmFibGUoOSksRi5kb3VibGVTaWRlZCYmYS5lbmFibGUoMTApLEYuZmxpcFNpZGVkJiZhLmVuYWJsZSgxMSksRi5kZXB0aFBhY2tpbmcmJmEuZW5hYmxlKDEyKSxGLmRpdGhlcmluZyYmYS5lbmFibGUoMTMpLEYuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJmEuZW5hYmxlKDE0KSxGLnNwZWN1bGFyQ29sb3JNYXAmJmEuZW5hYmxlKDE1KSxGLnRyYW5zbWlzc2lvbiYmYS5lbmFibGUoMTYpLEYudHJhbnNtaXNzaW9uTWFwJiZhLmVuYWJsZSgxNyksRi50aGlja25lc3NNYXAmJmEuZW5hYmxlKDE4KSxGLnNoZWVuJiZhLmVuYWJsZSgxOSksRi5zaGVlbkNvbG9yTWFwJiZhLmVuYWJsZSgyMCksRi5zaGVlblJvdWdobmVzc01hcCYmYS5lbmFibGUoMjEpLEYuZGVjb2RlVmlkZW9UZXh0dXJlJiZhLmVuYWJsZSgyMiksdy5wdXNoKGEubWFzayl9KEYsdyksRi5wdXNoKG4ub3V0cHV0RW5jb2RpbmcpKSxGLnB1c2gody5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkpLEYuam9pbigpfSxnZXRVbmlmb3JtczpmdW5jdGlvbih3KXtsZXQgcSxGPXhbdy50eXBlXTtyZXR1cm4gcT1GP0o4ZS5jbG9uZShTZFtGXS51bmlmb3Jtcyk6dy51bmlmb3JtcyxxfSxhY3F1aXJlUHJvZ3JhbTpmdW5jdGlvbih3LEYpe2xldCBxO2ZvcihsZXQgSz0wLGRlPWMubGVuZ3RoO0s8ZGU7SysrKXtsZXQgWT1jW0tdO2lmKFkuY2FjaGVLZXk9PT1GKXtxPVksKytxLnVzZWRUaW1lczticmVha319cmV0dXJuIHZvaWQgMD09PXEmJihxPW5ldyBKN2UobixGLHcsbyksYy5wdXNoKHEpKSxxfSxyZWxlYXNlUHJvZ3JhbTpmdW5jdGlvbih3KXtpZigwPT0tLXcudXNlZFRpbWVzKXtsZXQgRj1jLmluZGV4T2Yodyk7Y1tGXT1jW2MubGVuZ3RoLTFdLGMucG9wKCksdy5kZXN0cm95KCl9fSxyZWxlYXNlU2hhZGVyQ2FjaGU6ZnVuY3Rpb24odyl7bC5yZW1vdmUodyl9LHByb2dyYW1zOmMsZGlzcG9zZTpmdW5jdGlvbigpe2wuZGlzcG9zZSgpfX19ZnVuY3Rpb24gdDllKCl7bGV0IG49bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihvKXtsZXQgcz1uLmdldChvKTtyZXR1cm4gdm9pZCAwPT09cyYmKHM9e30sbi5zZXQobyxzKSksc30scmVtb3ZlOmZ1bmN0aW9uKG8pe24uZGVsZXRlKG8pfSx1cGRhdGU6ZnVuY3Rpb24obyxzLGEpe24uZ2V0KG8pW3NdPWF9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtuPW5ldyBXZWFrTWFwfX19ZnVuY3Rpb24gbjllKG4sdCl7cmV0dXJuIG4uZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9uLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOm4ucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP24ucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjpuLm1hdGVyaWFsLmlkIT09dC5tYXRlcmlhbC5pZD9uLm1hdGVyaWFsLmlkLXQubWF0ZXJpYWwuaWQ6bi56IT09dC56P24uei10Lno6bi5pZC10LmlkfWZ1bmN0aW9uICR1ZShuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi56IT09dC56P3Quei1uLno6bi5pZC10LmlkfWZ1bmN0aW9uIGVkZSgpe2xldCBuPVtdLHQ9MCxlPVtdLGk9W10scj1bXTtmdW5jdGlvbiBzKGQscCxoLGYsbSx4KXtsZXQgZz1uW3RdO3JldHVybiB2b2lkIDA9PT1nPyhnPXtpZDpkLmlkLG9iamVjdDpkLGdlb21ldHJ5OnAsbWF0ZXJpYWw6aCxncm91cE9yZGVyOmYscmVuZGVyT3JkZXI6ZC5yZW5kZXJPcmRlcix6Om0sZ3JvdXA6eH0sblt0XT1nKTooZy5pZD1kLmlkLGcub2JqZWN0PWQsZy5nZW9tZXRyeT1wLGcubWF0ZXJpYWw9aCxnLmdyb3VwT3JkZXI9ZixnLnJlbmRlck9yZGVyPWQucmVuZGVyT3JkZXIsZy56PW0sZy5ncm91cD14KSx0KyssZ31yZXR1cm57b3BhcXVlOmUsdHJhbnNtaXNzaXZlOmksdHJhbnNwYXJlbnQ6cixpbml0OmZ1bmN0aW9uKCl7dD0wLGUubGVuZ3RoPTAsaS5sZW5ndGg9MCxyLmxlbmd0aD0wfSxwdXNoOmZ1bmN0aW9uKGQscCxoLGYsbSx4KXtsZXQgZz1zKGQscCxoLGYsbSx4KTtoLnRyYW5zbWlzc2lvbj4wP2kucHVzaChnKTohMD09PWgudHJhbnNwYXJlbnQ/ci5wdXNoKGcpOmUucHVzaChnKX0sdW5zaGlmdDpmdW5jdGlvbihkLHAsaCxmLG0seCl7bGV0IGc9cyhkLHAsaCxmLG0seCk7aC50cmFuc21pc3Npb24+MD9pLnVuc2hpZnQoZyk6ITA9PT1oLnRyYW5zcGFyZW50P3IudW5zaGlmdChnKTplLnVuc2hpZnQoZyl9LGZpbmlzaDpmdW5jdGlvbigpe2ZvcihsZXQgZD10LHA9bi5sZW5ndGg7ZDxwO2QrKyl7bGV0IGg9bltkXTtpZihudWxsPT09aC5pZClicmVhaztoLmlkPW51bGwsaC5vYmplY3Q9bnVsbCxoLmdlb21ldHJ5PW51bGwsaC5tYXRlcmlhbD1udWxsLGguZ3JvdXA9bnVsbH19LHNvcnQ6ZnVuY3Rpb24oZCxwKXtlLmxlbmd0aD4xJiZlLnNvcnQoZHx8bjllKSxpLmxlbmd0aD4xJiZpLnNvcnQocHx8JHVlKSxyLmxlbmd0aD4xJiZyLnNvcnQocHx8JHVlKX19fWZ1bmN0aW9uIGk5ZSgpe2xldCBuPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24oaSxyKXtsZXQgbztyZXR1cm4hMT09PW4uaGFzKGkpPyhvPW5ldyBlZGUsbi5zZXQoaSxbb10pKTpyPj1uLmdldChpKS5sZW5ndGg/KG89bmV3IGVkZSxuLmdldChpKS5wdXNoKG8pKTpvPW4uZ2V0KGkpW3JdLG99LGRpc3Bvc2U6ZnVuY3Rpb24oKXtuPW5ldyBXZWFrTWFwfX19ZnVuY3Rpb24gcjllKCl7bGV0IG49e307cmV0dXJue2dldDpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT1uW3QuaWRdKXJldHVybiBuW3QuaWRdO2xldCBlO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6ZT17ZGlyZWN0aW9uOm5ldyBpZSxjb2xvcjpuZXcgdm59O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjplPXtwb3NpdGlvbjpuZXcgaWUsZGlyZWN0aW9uOm5ldyBpZSxjb2xvcjpuZXcgdm4sZGlzdGFuY2U6MCxjb25lQ29zOjAscGVudW1icmFDb3M6MCxkZWNheTowfTticmVhaztjYXNlIlBvaW50TGlnaHQiOmU9e3Bvc2l0aW9uOm5ldyBpZSxjb2xvcjpuZXcgdm4sZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6ZT17ZGlyZWN0aW9uOm5ldyBpZSxza3lDb2xvcjpuZXcgdm4sZ3JvdW5kQ29sb3I6bmV3IHZufTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmU9e2NvbG9yOm5ldyB2bixwb3NpdGlvbjpuZXcgaWUsaGFsZldpZHRoOm5ldyBpZSxoYWxmSGVpZ2h0Om5ldyBpZX19cmV0dXJuIG5bdC5pZF09ZSxlfX19dmFyIHM5ZT0wO2Z1bmN0aW9uIGE5ZShuLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0obi5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gbDllKG4sdCl7bGV0IGU9bmV3IHI5ZSxpPWZ1bmN0aW9uKCl7bGV0IG49e307cmV0dXJue2dldDpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT1uW3QuaWRdKXJldHVybiBuW3QuaWRdO2xldCBlO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6Y2FzZSJTcG90TGlnaHQiOmU9e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgYXR9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBhdCxzaGFkb3dDYW1lcmFOZWFyOjEsc2hhZG93Q2FtZXJhRmFyOjFlM319cmV0dXJuIG5bdC5pZF09ZSxlfX19KCkscj17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKXIucHJvYmUucHVzaChuZXcgaWUpO2xldCBvPW5ldyBpZSxzPW5ldyBSbixhPW5ldyBSbjtyZXR1cm57c2V0dXA6ZnVuY3Rpb24odSxkKXtsZXQgcD0wLGg9MCxmPTA7Zm9yKGxldCB1ZT0wO3VlPDk7dWUrKylyLnByb2JlW3VlXS5zZXQoMCwwLDApO2xldCBtPTAseD0wLGc9MCxiPTAsRD0wLFQ9MCxrPTAsWj0wO3Uuc29ydChhOWUpO2xldCB6PSEwIT09ZD9NYXRoLlBJOjE7Zm9yKGxldCB1ZT0wLGhlPXUubGVuZ3RoO3VlPGhlO3VlKyspe2xldCB3PXVbdWVdLEY9dy5jb2xvcixxPXcuaW50ZW5zaXR5LEs9dy5kaXN0YW5jZSxkZT13LnNoYWRvdyYmdy5zaGFkb3cubWFwP3cuc2hhZG93Lm1hcC50ZXh0dXJlOm51bGw7aWYody5pc0FtYmllbnRMaWdodClwKz1GLnIqcSp6LGgrPUYuZypxKnosZis9Ri5iKnEqejtlbHNlIGlmKHcuaXNMaWdodFByb2JlKWZvcihsZXQgWT0wO1k8OTtZKyspci5wcm9iZVtZXS5hZGRTY2FsZWRWZWN0b3Iody5zaC5jb2VmZmljaWVudHNbWV0scSk7ZWxzZSBpZih3LmlzRGlyZWN0aW9uYWxMaWdodCl7bGV0IFk9ZS5nZXQodyk7aWYoWS5jb2xvci5jb3B5KHcuY29sb3IpLm11bHRpcGx5U2NhbGFyKHcuaW50ZW5zaXR5KnopLHcuY2FzdFNoYWRvdyl7bGV0IGFlPXcuc2hhZG93LGxlPWkuZ2V0KHcpO2xlLnNoYWRvd0JpYXM9YWUuYmlhcyxsZS5zaGFkb3dOb3JtYWxCaWFzPWFlLm5vcm1hbEJpYXMsbGUuc2hhZG93UmFkaXVzPWFlLnJhZGl1cyxsZS5zaGFkb3dNYXBTaXplPWFlLm1hcFNpemUsci5kaXJlY3Rpb25hbFNoYWRvd1ttXT1sZSxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW21dPWRlLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbbV09dy5zaGFkb3cubWF0cml4LFQrK31yLmRpcmVjdGlvbmFsW21dPVksbSsrfWVsc2UgaWYody5pc1Nwb3RMaWdodCl7bGV0IFk9ZS5nZXQodyk7aWYoWS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24ody5tYXRyaXhXb3JsZCksWS5jb2xvci5jb3B5KEYpLm11bHRpcGx5U2NhbGFyKHEqeiksWS5kaXN0YW5jZT1LLFkuY29uZUNvcz1NYXRoLmNvcyh3LmFuZ2xlKSxZLnBlbnVtYnJhQ29zPU1hdGguY29zKHcuYW5nbGUqKDEtdy5wZW51bWJyYSkpLFkuZGVjYXk9dy5kZWNheSx3LmNhc3RTaGFkb3cpe2xldCBhZT13LnNoYWRvdyxsZT1pLmdldCh3KTtsZS5zaGFkb3dCaWFzPWFlLmJpYXMsbGUuc2hhZG93Tm9ybWFsQmlhcz1hZS5ub3JtYWxCaWFzLGxlLnNoYWRvd1JhZGl1cz1hZS5yYWRpdXMsbGUuc2hhZG93TWFwU2l6ZT1hZS5tYXBTaXplLHIuc3BvdFNoYWRvd1tnXT1sZSxyLnNwb3RTaGFkb3dNYXBbZ109ZGUsci5zcG90U2hhZG93TWF0cml4W2ddPXcuc2hhZG93Lm1hdHJpeCxaKyt9ci5zcG90W2ddPVksZysrfWVsc2UgaWYody5pc1JlY3RBcmVhTGlnaHQpe2xldCBZPWUuZ2V0KHcpO1kuY29sb3IuY29weShGKS5tdWx0aXBseVNjYWxhcihxKSxZLmhhbGZXaWR0aC5zZXQoLjUqdy53aWR0aCwwLDApLFkuaGFsZkhlaWdodC5zZXQoMCwuNSp3LmhlaWdodCwwKSxyLnJlY3RBcmVhW2JdPVksYisrfWVsc2UgaWYody5pc1BvaW50TGlnaHQpe2xldCBZPWUuZ2V0KHcpO2lmKFkuY29sb3IuY29weSh3LmNvbG9yKS5tdWx0aXBseVNjYWxhcih3LmludGVuc2l0eSp6KSxZLmRpc3RhbmNlPXcuZGlzdGFuY2UsWS5kZWNheT13LmRlY2F5LHcuY2FzdFNoYWRvdyl7bGV0IGFlPXcuc2hhZG93LGxlPWkuZ2V0KHcpO2xlLnNoYWRvd0JpYXM9YWUuYmlhcyxsZS5zaGFkb3dOb3JtYWxCaWFzPWFlLm5vcm1hbEJpYXMsbGUuc2hhZG93UmFkaXVzPWFlLnJhZGl1cyxsZS5zaGFkb3dNYXBTaXplPWFlLm1hcFNpemUsbGUuc2hhZG93Q2FtZXJhTmVhcj1hZS5jYW1lcmEubmVhcixsZS5zaGFkb3dDYW1lcmFGYXI9YWUuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W3hdPWxlLHIucG9pbnRTaGFkb3dNYXBbeF09ZGUsci5wb2ludFNoYWRvd01hdHJpeFt4XT13LnNoYWRvdy5tYXRyaXgsaysrfXIucG9pbnRbeF09WSx4Kyt9ZWxzZSBpZih3LmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgWT1lLmdldCh3KTtZLnNreUNvbG9yLmNvcHkody5jb2xvcikubXVsdGlwbHlTY2FsYXIocSp6KSxZLmdyb3VuZENvbG9yLmNvcHkody5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIocSp6KSxyLmhlbWlbRF09WSxEKyt9fWI+MCYmKHQuaXNXZWJHTDJ8fCEwPT09bi5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPyhyLnJlY3RBcmVhTFRDMT1CdC5MVENfRkxPQVRfMSxyLnJlY3RBcmVhTFRDMj1CdC5MVENfRkxPQVRfMik6ITA9PT1uLmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT8oci5yZWN0QXJlYUxUQzE9QnQuTFRDX0hBTEZfMSxyLnJlY3RBcmVhTFRDMj1CdC5MVENfSEFMRl8yKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVbmFibGUgdG8gdXNlIFJlY3RBcmVhTGlnaHQuIE1pc3NpbmcgV2ViR0wgZXh0ZW5zaW9ucy4iKSksci5hbWJpZW50WzBdPXAsci5hbWJpZW50WzFdPWgsci5hbWJpZW50WzJdPWY7bGV0IGZlPXIuaGFzaDsoZmUuZGlyZWN0aW9uYWxMZW5ndGghPT1tfHxmZS5wb2ludExlbmd0aCE9PXh8fGZlLnNwb3RMZW5ndGghPT1nfHxmZS5yZWN0QXJlYUxlbmd0aCE9PWJ8fGZlLmhlbWlMZW5ndGghPT1EfHxmZS5udW1EaXJlY3Rpb25hbFNoYWRvd3MhPT1UfHxmZS5udW1Qb2ludFNoYWRvd3MhPT1rfHxmZS5udW1TcG90U2hhZG93cyE9PVopJiYoci5kaXJlY3Rpb25hbC5sZW5ndGg9bSxyLnNwb3QubGVuZ3RoPWcsci5yZWN0QXJlYS5sZW5ndGg9YixyLnBvaW50Lmxlbmd0aD14LHIuaGVtaS5sZW5ndGg9RCxyLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aD1ULHIuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoPVQsci5wb2ludFNoYWRvdy5sZW5ndGg9ayxyLnBvaW50U2hhZG93TWFwLmxlbmd0aD1rLHIuc3BvdFNoYWRvdy5sZW5ndGg9WixyLnNwb3RTaGFkb3dNYXAubGVuZ3RoPVosci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC5sZW5ndGg9VCxyLnBvaW50U2hhZG93TWF0cml4Lmxlbmd0aD1rLHIuc3BvdFNoYWRvd01hdHJpeC5sZW5ndGg9WixmZS5kaXJlY3Rpb25hbExlbmd0aD1tLGZlLnBvaW50TGVuZ3RoPXgsZmUuc3BvdExlbmd0aD1nLGZlLnJlY3RBcmVhTGVuZ3RoPWIsZmUuaGVtaUxlbmd0aD1ELGZlLm51bURpcmVjdGlvbmFsU2hhZG93cz1ULGZlLm51bVBvaW50U2hhZG93cz1rLGZlLm51bVNwb3RTaGFkb3dzPVosci52ZXJzaW9uPXM5ZSsrKX0sc2V0dXBWaWV3OmZ1bmN0aW9uKHUsZCl7bGV0IHA9MCxoPTAsZj0wLG09MCx4PTAsZz1kLm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IGI9MCxEPXUubGVuZ3RoO2I8RDtiKyspe2xldCBUPXVbYl07aWYoVC5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBrPXIuZGlyZWN0aW9uYWxbcF07ay5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFQubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxrLmRpcmVjdGlvbi5zdWIobyksay5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKGcpLHArK31lbHNlIGlmKFQuaXNTcG90TGlnaHQpe2xldCBrPXIuc3BvdFtmXTtrLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihULm1hdHJpeFdvcmxkKSxrLnBvc2l0aW9uLmFwcGx5TWF0cml4NChnKSxrLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oVC5tYXRyaXhXb3JsZCksby5zZXRGcm9tTWF0cml4UG9zaXRpb24oVC50YXJnZXQubWF0cml4V29ybGQpLGsuZGlyZWN0aW9uLnN1YihvKSxrLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oZyksZisrfWVsc2UgaWYoVC5pc1JlY3RBcmVhTGlnaHQpe2xldCBrPXIucmVjdEFyZWFbbV07ay5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oVC5tYXRyaXhXb3JsZCksay5wb3NpdGlvbi5hcHBseU1hdHJpeDQoZyksYS5pZGVudGl0eSgpLHMuY29weShULm1hdHJpeFdvcmxkKSxzLnByZW11bHRpcGx5KGcpLGEuZXh0cmFjdFJvdGF0aW9uKHMpLGsuaGFsZldpZHRoLnNldCguNSpULndpZHRoLDAsMCksay5oYWxmSGVpZ2h0LnNldCgwLC41KlQuaGVpZ2h0LDApLGsuaGFsZldpZHRoLmFwcGx5TWF0cml4NChhKSxrLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KGEpLG0rK31lbHNlIGlmKFQuaXNQb2ludExpZ2h0KXtsZXQgaz1yLnBvaW50W2hdO2sucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFQubWF0cml4V29ybGQpLGsucG9zaXRpb24uYXBwbHlNYXRyaXg0KGcpLGgrK31lbHNlIGlmKFQuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBrPXIuaGVtaVt4XTtrLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oVC5tYXRyaXhXb3JsZCksay5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKGcpLGsuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLHgrK319fSxzdGF0ZTpyfX1mdW5jdGlvbiB0ZGUobix0KXtsZXQgZT1uZXcgbDllKG4sdCksaT1bXSxyPVtdO3JldHVybntpbml0OmZ1bmN0aW9uKCl7aS5sZW5ndGg9MCxyLmxlbmd0aD0wfSxzdGF0ZTp7bGlnaHRzQXJyYXk6aSxzaGFkb3dzQXJyYXk6cixsaWdodHM6ZX0sc2V0dXBMaWdodHM6ZnVuY3Rpb24oZCl7ZS5zZXR1cChpLGQpfSxzZXR1cExpZ2h0c1ZpZXc6ZnVuY3Rpb24oZCl7ZS5zZXR1cFZpZXcoaSxkKX0scHVzaExpZ2h0OmZ1bmN0aW9uKGQpe2kucHVzaChkKX0scHVzaFNoYWRvdzpmdW5jdGlvbihkKXtyLnB1c2goZCl9fX1mdW5jdGlvbiBjOWUobix0KXtsZXQgZT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKG8scz0wKXtsZXQgYTtyZXR1cm4hMT09PWUuaGFzKG8pPyhhPW5ldyB0ZGUobix0KSxlLnNldChvLFthXSkpOnM+PWUuZ2V0KG8pLmxlbmd0aD8oYT1uZXcgdGRlKG4sdCksZS5nZXQobykucHVzaChhKSk6YT1lLmdldChvKVtzXSxhfSxkaXNwb3NlOmZ1bmN0aW9uKCl7ZT1uZXcgV2Vha01hcH19fXZhciBwaz1jbGFzcyBleHRlbmRzIGhze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGVwdGhNYXRlcmlhbCIsdGhpcy5kZXB0aFBhY2tpbmc9MzIwMCx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9fTtway5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMDt2YXIgaGs9Y2xhc3MgZXh0ZW5kcyBoc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IGllLHRoaXMubmVhckRpc3RhbmNlPTEsdGhpcy5mYXJEaXN0YW5jZT0xZTMsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnJlZmVyZW5jZVBvc2l0aW9uLmNvcHkodC5yZWZlcmVuY2VQb3NpdGlvbiksdGhpcy5uZWFyRGlzdGFuY2U9dC5uZWFyRGlzdGFuY2UsdGhpcy5mYXJEaXN0YW5jZT10LmZhckRpc3RhbmNlLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzfX07ZnVuY3Rpb24gR2RlKG4sdCxlKXtsZXQgaT1uZXcgZ2Iscj1uZXcgYXQsbz1uZXcgYXQscz1uZXcgYXIsYT1uZXcgcGsoe2RlcHRoUGFja2luZzozMjAxfSksbD1uZXcgaGssYz17fSx1PWUubWF4VGV4dHVyZVNpemUsZD17MDoxLDE6MCwyOjJ9LHA9bmV3IERwKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBhdH0scmFkaXVzOnt2YWx1ZTo0fX0sdmVydGV4U2hhZGVyOiJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsZnJhZ21lbnRTaGFkZXI6InVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG51bmlmb3JtIGZsb2F0IHJhZGl1cztcbiNpbmNsdWRlIDxwYWNraW5nPlxudm9pZCBtYWluKCkge1xuXHRjb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7XG5cdGZsb2F0IG1lYW4gPSAwLjA7XG5cdGZsb2F0IHNxdWFyZWRfbWVhbiA9IDAuMDtcblx0ZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApO1xuXHRmbG9hdCB1dlN0YXJ0ID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAtIDEuMDtcblx0Zm9yICggZmxvYXQgaSA9IDAuMDsgaSA8IHNhbXBsZXM7IGkgKysgKSB7XG5cdFx0ZmxvYXQgdXZPZmZzZXQgPSB1dlN0YXJ0ICsgaSAqIHV2U3RyaWRlO1xuXHRcdCNpZmRlZiBIT1JJWk9OVEFMX1BBU1Ncblx0XHRcdHZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggdXZPZmZzZXQsIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGlzdHJpYnV0aW9uLng7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSArIGRpc3RyaWJ1dGlvbi54ICogZGlzdHJpYnV0aW9uLng7XG5cdFx0I2Vsc2Vcblx0XHRcdGZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCB1dk9mZnNldCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGVwdGg7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGVwdGggKiBkZXB0aDtcblx0XHQjZW5kaWZcblx0fVxuXHRtZWFuID0gbWVhbiAvIHNhbXBsZXM7XG5cdHNxdWFyZWRfbWVhbiA9IHNxdWFyZWRfbWVhbiAvIHNhbXBsZXM7XG5cdGZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApO1xuXHRnbF9GcmFnQ29sb3IgPSBwYWNrMkhhbGZUb1JHQkEoIHZlYzIoIG1lYW4sIHN0ZF9kZXYgKSApO1xufSJ9KSxoPXAuY2xvbmUoKTtoLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGY9bmV3IG5yO2Yuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFlyKG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgbT1uZXcgVm8oZixwKSx4PXRoaXM7ZnVuY3Rpb24gZyhULGspe2xldCBaPXQudXBkYXRlKG0pO3AuZGVmaW5lcy5WU01fU0FNUExFUyE9PVQuYmx1clNhbXBsZXMmJihwLmRlZmluZXMuVlNNX1NBTVBMRVM9VC5ibHVyU2FtcGxlcyxoLmRlZmluZXMuVlNNX1NBTVBMRVM9VC5ibHVyU2FtcGxlcyxwLm5lZWRzVXBkYXRlPSEwLGgubmVlZHNVcGRhdGU9ITApLHAudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9VC5tYXAudGV4dHVyZSxwLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9VC5tYXBTaXplLHAudW5pZm9ybXMucmFkaXVzLnZhbHVlPVQucmFkaXVzLG4uc2V0UmVuZGVyVGFyZ2V0KFQubWFwUGFzcyksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KGssbnVsbCxaLHAsbSxudWxsKSxoLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPVQubWFwUGFzcy50ZXh0dXJlLGgudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1ULm1hcFNpemUsaC51bmlmb3Jtcy5yYWRpdXMudmFsdWU9VC5yYWRpdXMsbi5zZXRSZW5kZXJUYXJnZXQoVC5tYXApLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChrLG51bGwsWixoLG0sbnVsbCl9ZnVuY3Rpb24gYihULGssWix6LGZlLHVlLGhlKXtsZXQgdz1udWxsLEY9ITA9PT16LmlzUG9pbnRMaWdodD9ULmN1c3RvbURpc3RhbmNlTWF0ZXJpYWw6VC5jdXN0b21EZXB0aE1hdGVyaWFsO2lmKHc9dm9pZCAwIT09Rj9GOiEwPT09ei5pc1BvaW50TGlnaHQ/bDphLG4ubG9jYWxDbGlwcGluZ0VuYWJsZWQmJiEwPT09Wi5jbGlwU2hhZG93cyYmMCE9PVouY2xpcHBpbmdQbGFuZXMubGVuZ3RofHxaLmRpc3BsYWNlbWVudE1hcCYmMCE9PVouZGlzcGxhY2VtZW50U2NhbGV8fFouYWxwaGFNYXAmJlouYWxwaGFUZXN0PjApe2xldCBxPXcudXVpZCxLPVoudXVpZCxkZT1jW3FdO3ZvaWQgMD09PWRlJiYoZGU9e30sY1txXT1kZSk7bGV0IFk9ZGVbS107dm9pZCAwPT09WSYmKFk9dy5jbG9uZSgpLGRlW0tdPVkpLHc9WX1yZXR1cm4gdy52aXNpYmxlPVoudmlzaWJsZSx3LndpcmVmcmFtZT1aLndpcmVmcmFtZSx3LnNpZGU9Mz09PWhlP251bGwhPT1aLnNoYWRvd1NpZGU/Wi5zaGFkb3dTaWRlOlouc2lkZTpudWxsIT09Wi5zaGFkb3dTaWRlP1ouc2hhZG93U2lkZTpkW1ouc2lkZV0sdy5hbHBoYU1hcD1aLmFscGhhTWFwLHcuYWxwaGFUZXN0PVouYWxwaGFUZXN0LHcuY2xpcFNoYWRvd3M9Wi5jbGlwU2hhZG93cyx3LmNsaXBwaW5nUGxhbmVzPVouY2xpcHBpbmdQbGFuZXMsdy5jbGlwSW50ZXJzZWN0aW9uPVouY2xpcEludGVyc2VjdGlvbix3LmRpc3BsYWNlbWVudE1hcD1aLmRpc3BsYWNlbWVudE1hcCx3LmRpc3BsYWNlbWVudFNjYWxlPVouZGlzcGxhY2VtZW50U2NhbGUsdy5kaXNwbGFjZW1lbnRCaWFzPVouZGlzcGxhY2VtZW50Qmlhcyx3LndpcmVmcmFtZUxpbmV3aWR0aD1aLndpcmVmcmFtZUxpbmV3aWR0aCx3LmxpbmV3aWR0aD1aLmxpbmV3aWR0aCwhMD09PXouaXNQb2ludExpZ2h0JiYhMD09PXcuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbCYmKHcucmVmZXJlbmNlUG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHoubWF0cml4V29ybGQpLHcubmVhckRpc3RhbmNlPWZlLHcuZmFyRGlzdGFuY2U9dWUpLHd9ZnVuY3Rpb24gRChULGssWix6LGZlKXtpZighMT09PVQudmlzaWJsZSlyZXR1cm47aWYoVC5sYXllcnMudGVzdChrLmxheWVycykmJihULmlzTWVzaHx8VC5pc0xpbmV8fFQuaXNQb2ludHMpJiYoVC5jYXN0U2hhZG93fHxULnJlY2VpdmVTaGFkb3cmJjM9PT1mZSkmJighVC5mcnVzdHVtQ3VsbGVkfHxpLmludGVyc2VjdHNPYmplY3QoVCkpKXtULm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKFoubWF0cml4V29ybGRJbnZlcnNlLFQubWF0cml4V29ybGQpO2xldCB3PXQudXBkYXRlKFQpLEY9VC5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KEYpKXtsZXQgcT13Lmdyb3Vwcztmb3IobGV0IEs9MCxkZT1xLmxlbmd0aDtLPGRlO0srKyl7bGV0IFk9cVtLXSxhZT1GW1kubWF0ZXJpYWxJbmRleF07aWYoYWUmJmFlLnZpc2libGUpe2xldCBsZT1iKFQsMCxhZSx6LFoubmVhcixaLmZhcixmZSk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoWixudWxsLHcsbGUsVCxZKX19fWVsc2UgaWYoRi52aXNpYmxlKXtsZXQgcT1iKFQsMCxGLHosWi5uZWFyLFouZmFyLGZlKTtuLnJlbmRlckJ1ZmZlckRpcmVjdChaLG51bGwsdyxxLFQsbnVsbCl9fWxldCBoZT1ULmNoaWxkcmVuO2ZvcihsZXQgdz0wLEY9aGUubGVuZ3RoO3c8Rjt3KyspRChoZVt3XSxrLFoseixmZSl9dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT0xLHRoaXMucmVuZGVyPWZ1bmN0aW9uKFQsayxaKXtpZighMT09PXguZW5hYmxlZHx8ITE9PT14LmF1dG9VcGRhdGUmJiExPT09eC5uZWVkc1VwZGF0ZXx8MD09PVQubGVuZ3RoKXJldHVybjtsZXQgej1uLmdldFJlbmRlclRhcmdldCgpLGZlPW4uZ2V0QWN0aXZlQ3ViZUZhY2UoKSx1ZT1uLmdldEFjdGl2ZU1pcG1hcExldmVsKCksaGU9bi5zdGF0ZTtoZS5zZXRCbGVuZGluZygwKSxoZS5idWZmZXJzLmNvbG9yLnNldENsZWFyKDEsMSwxLDEpLGhlLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksaGUuc2V0U2Npc3NvclRlc3QoITEpO2ZvcihsZXQgdz0wLEY9VC5sZW5ndGg7dzxGO3crKyl7bGV0IHE9VFt3XSxLPXEuc2hhZG93O2lmKHZvaWQgMD09PUspe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xTaGFkb3dNYXA6IixxLCJoYXMgbm8gc2hhZG93LiIpO2NvbnRpbnVlfWlmKCExPT09Sy5hdXRvVXBkYXRlJiYhMT09PUsubmVlZHNVcGRhdGUpY29udGludWU7ci5jb3B5KEsubWFwU2l6ZSk7bGV0IGRlPUsuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoci5tdWx0aXBseShkZSksby5jb3B5KEsubWFwU2l6ZSksKHIueD51fHxyLnk+dSkmJihyLng+dSYmKG8ueD1NYXRoLmZsb29yKHUvZGUueCksci54PW8ueCpkZS54LEsubWFwU2l6ZS54PW8ueCksci55PnUmJihvLnk9TWF0aC5mbG9vcih1L2RlLnkpLHIueT1vLnkqZGUueSxLLm1hcFNpemUueT1vLnkpKSxudWxsPT09Sy5tYXAmJiFLLmlzUG9pbnRMaWdodFNoYWRvdyYmMz09PXRoaXMudHlwZSl7bGV0IGFlPXttaW5GaWx0ZXI6R3MsbWFnRmlsdGVyOkdzLGZvcm1hdDpnYX07Sy5tYXA9bmV3IFdhKHIueCxyLnksYWUpLEsubWFwLnRleHR1cmUubmFtZT1xLm5hbWUrIi5zaGFkb3dNYXAiLEsubWFwUGFzcz1uZXcgV2Eoci54LHIueSxhZSksSy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfW51bGw9PT1LLm1hcCYmKEsubWFwPW5ldyBXYShyLngsci55LHttaW5GaWx0ZXI6Wm8sbWFnRmlsdGVyOlpvLGZvcm1hdDpnYX0pLEsubWFwLnRleHR1cmUubmFtZT1xLm5hbWUrIi5zaGFkb3dNYXAiLEsuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksbi5zZXRSZW5kZXJUYXJnZXQoSy5tYXApLG4uY2xlYXIoKTtsZXQgWT1LLmdldFZpZXdwb3J0Q291bnQoKTtmb3IobGV0IGFlPTA7YWU8WTthZSsrKXtsZXQgbGU9Sy5nZXRWaWV3cG9ydChhZSk7cy5zZXQoby54KmxlLngsby55KmxlLnksby54KmxlLnosby55KmxlLncpLGhlLnZpZXdwb3J0KHMpLEsudXBkYXRlTWF0cmljZXMocSxhZSksaT1LLmdldEZydXN0dW0oKSxEKGssWixLLmNhbWVyYSxxLHRoaXMudHlwZSl9IUsuaXNQb2ludExpZ2h0U2hhZG93JiYzPT09dGhpcy50eXBlJiZnKEssWiksSy5uZWVkc1VwZGF0ZT0hMX14Lm5lZWRzVXBkYXRlPSExLG4uc2V0UmVuZGVyVGFyZ2V0KHosZmUsdWUpfX1mdW5jdGlvbiBwOWUobix0LGUpe2xldCBpPWUuaXNXZWJHTDIsYT1uZXcgZnVuY3Rpb24oKXtsZXQgZ2U9ITEsZm49bmV3IGFyLFp0PW51bGwsTm49bmV3IGFyKDAsMCwwLDApO3JldHVybntzZXRNYXNrOmZ1bmN0aW9uKFplKXtadCE9PVplJiYhZ2UmJihuLmNvbG9yTWFzayhaZSxaZSxaZSxaZSksWnQ9WmUpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oWmUpe2dlPVplfSxzZXRDbGVhcjpmdW5jdGlvbihaZSxEbixNaSxUcixFcyl7ITA9PT1FcyYmKFplKj1UcixEbio9VHIsTWkqPVRyKSxmbi5zZXQoWmUsRG4sTWksVHIpLCExPT09Tm4uZXF1YWxzKGZuKSYmKG4uY2xlYXJDb2xvcihaZSxEbixNaSxUciksTm4uY29weShmbikpfSxyZXNldDpmdW5jdGlvbigpe2dlPSExLFp0PW51bGwsTm4uc2V0KC0xLDAsMCwwKX19fSxsPW5ldyBmdW5jdGlvbigpe2xldCBnZT0hMSxmbj1udWxsLFp0PW51bGwsTm49bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbihaZSl7WmU/QWUoMjkyOSk6dG4oMjkyOSl9LHNldE1hc2s6ZnVuY3Rpb24oWmUpe2ZuIT09WmUmJiFnZSYmKG4uZGVwdGhNYXNrKFplKSxmbj1aZSl9LHNldEZ1bmM6ZnVuY3Rpb24oWmUpe2lmKFp0IT09WmUpe2lmKFplKXN3aXRjaChaZSl7Y2FzZSAwOm4uZGVwdGhGdW5jKDUxMik7YnJlYWs7Y2FzZSAxOm4uZGVwdGhGdW5jKDUxOSk7YnJlYWs7Y2FzZSAyOm4uZGVwdGhGdW5jKDUxMyk7YnJlYWs7Y2FzZSAzOmRlZmF1bHQ6bi5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIDQ6bi5kZXB0aEZ1bmMoNTE0KTticmVhaztjYXNlIDU6bi5kZXB0aEZ1bmMoNTE4KTticmVhaztjYXNlIDY6bi5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIDc6bi5kZXB0aEZ1bmMoNTE3KX1lbHNlIG4uZGVwdGhGdW5jKDUxNSk7WnQ9WmV9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oWmUpe2dlPVplfSxzZXRDbGVhcjpmdW5jdGlvbihaZSl7Tm4hPT1aZSYmKG4uY2xlYXJEZXB0aChaZSksTm49WmUpfSxyZXNldDpmdW5jdGlvbigpe2dlPSExLGZuPW51bGwsWnQ9bnVsbCxObj1udWxsfX19LGM9bmV3IGZ1bmN0aW9uKCl7bGV0IGdlPSExLGZuPW51bGwsWnQ9bnVsbCxObj1udWxsLFplPW51bGwsRG49bnVsbCxNaT1udWxsLFRyPW51bGwsRXM9bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbihCcil7Z2V8fChCcj9BZSgyOTYwKTp0bigyOTYwKSl9LHNldE1hc2s6ZnVuY3Rpb24oQnIpe2ZuIT09QnImJiFnZSYmKG4uc3RlbmNpbE1hc2soQnIpLGZuPUJyKX0sc2V0RnVuYzpmdW5jdGlvbihCcixQbCxiYSl7KFp0IT09QnJ8fE5uIT09UGx8fFplIT09YmEpJiYobi5zdGVuY2lsRnVuYyhCcixQbCxiYSksWnQ9QnIsTm49UGwsWmU9YmEpfSxzZXRPcDpmdW5jdGlvbihCcixQbCxiYSl7KERuIT09QnJ8fE1pIT09UGx8fFRyIT09YmEpJiYobi5zdGVuY2lsT3AoQnIsUGwsYmEpLERuPUJyLE1pPVBsLFRyPWJhKX0sc2V0TG9ja2VkOmZ1bmN0aW9uKEJyKXtnZT1Ccn0sc2V0Q2xlYXI6ZnVuY3Rpb24oQnIpe0VzIT09QnImJihuLmNsZWFyU3RlbmNpbChCciksRXM9QnIpfSxyZXNldDpmdW5jdGlvbigpe2dlPSExLGZuPW51bGwsWnQ9bnVsbCxObj1udWxsLFplPW51bGwsRG49bnVsbCxNaT1udWxsLFRyPW51bGwsRXM9bnVsbH19fSx1PXt9LGQ9e30scD1uZXcgV2Vha01hcCxoPVtdLGY9bnVsbCxtPSExLHg9bnVsbCxnPW51bGwsYj1udWxsLEQ9bnVsbCxUPW51bGwsaz1udWxsLFo9bnVsbCx6PSExLGZlPW51bGwsdWU9bnVsbCxoZT1udWxsLHc9bnVsbCxGPW51bGwscT1uLmdldFBhcmFtZXRlcigzNTY2MSksSz0hMSxkZT0wLFk9bi5nZXRQYXJhbWV0ZXIoNzkzOCk7LTEhPT1ZLmluZGV4T2YoIldlYkdMIik/KGRlPXBhcnNlRmxvYXQoL15XZWJHTCAoXGQpLy5leGVjKFkpWzFdKSxLPWRlPj0xKTotMSE9PVkuaW5kZXhPZigiT3BlbkdMIEVTIikmJihkZT1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoWSlbMV0pLEs9ZGU+PTIpO2xldCBhZT1udWxsLGxlPXt9LEllPW4uZ2V0UGFyYW1ldGVyKDMwODgpLHZlPW4uZ2V0UGFyYW1ldGVyKDI5NzgpLERlPShuZXcgYXIpLmZyb21BcnJheShJZSksbnQ9KG5ldyBhcikuZnJvbUFycmF5KHZlKTtmdW5jdGlvbiBndChnZSxmbixadCl7bGV0IE5uPW5ldyBVaW50OEFycmF5KDQpLFplPW4uY3JlYXRlVGV4dHVyZSgpO24uYmluZFRleHR1cmUoZ2UsWmUpLG4udGV4UGFyYW1ldGVyaShnZSwxMDI0MSw5NzI4KSxuLnRleFBhcmFtZXRlcmkoZ2UsMTAyNDAsOTcyOCk7Zm9yKGxldCBEbj0wO0RuPFp0O0RuKyspbi50ZXhJbWFnZTJEKGZuK0RuLDAsNjQwOCwxLDEsMCw2NDA4LDUxMjEsTm4pO3JldHVybiBaZX1sZXQgVWU9e307ZnVuY3Rpb24gQWUoZ2UpeyEwIT09dVtnZV0mJihuLmVuYWJsZShnZSksdVtnZV09ITApfWZ1bmN0aW9uIHRuKGdlKXshMSE9PXVbZ2VdJiYobi5kaXNhYmxlKGdlKSx1W2dlXT0hMSl9VWVbMzU1M109Z3QoMzU1MywzNTUzLDEpLFVlWzM0MDY3XT1ndCgzNDA2NywzNDA2OSw2KSxhLnNldENsZWFyKDAsMCwwLDEpLGwuc2V0Q2xlYXIoMSksYy5zZXRDbGVhcigwKSxBZSgyOTI5KSxsLnNldEZ1bmMoMyksV2UoITEpLE10KDEpLEFlKDI4ODQpLGNlKDApO2xldCB4dD17MTAwOjMyNzc0LDEwMTozMjc3OCwxMDI6MzI3Nzl9O2lmKGkpeHRbMTAzXT0zMjc3NSx4dFsxMDRdPTMyNzc2O2Vsc2V7bGV0IGdlPXQuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iik7bnVsbCE9PWdlJiYoeHRbMTAzXT1nZS5NSU5fRVhULHh0WzEwNF09Z2UuTUFYX0VYVCl9bGV0IG10PXsyMDA6MCwyMDE6MSwyMDI6NzY4LDIwNDo3NzAsMjEwOjc3NiwyMDg6Nzc0LDIwNjo3NzIsMjAzOjc2OSwyMDU6NzcxLDIwOTo3NzUsMjA3Ojc3M307ZnVuY3Rpb24gY2UoZ2UsZm4sWnQsTm4sWmUsRG4sTWksVHIpe2lmKDAhPT1nZSl7aWYoITE9PT1tJiYoQWUoMzA0MiksbT0hMCksNT09PWdlKVplPVplfHxmbixEbj1Ebnx8WnQsTWk9TWl8fE5uLChmbiE9PWd8fFplIT09VCkmJihuLmJsZW5kRXF1YXRpb25TZXBhcmF0ZSh4dFtmbl0seHRbWmVdKSxnPWZuLFQ9WmUpLChadCE9PWJ8fE5uIT09RHx8RG4hPT1rfHxNaSE9PVopJiYobi5ibGVuZEZ1bmNTZXBhcmF0ZShtdFtadF0sbXRbTm5dLG10W0RuXSxtdFtNaV0pLGI9WnQsRD1ObixrPURuLFo9TWkpLHg9Z2Usej1udWxsO2Vsc2UgaWYoZ2UhPT14fHxUciE9PXope2lmKCgxMDAhPT1nfHwxMDAhPT1UKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCksZz0xMDAsVD0xMDApLFRyKXN3aXRjaChnZSl7Y2FzZSAxOm4uYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjpuLmJsZW5kRnVuYygxLDEpO2JyZWFrO2Nhc2UgMzpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY5LDAsMSk7YnJlYWs7Y2FzZSA0Om4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixnZSl9ZWxzZSBzd2l0Y2goZ2Upe2Nhc2UgMTpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjpuLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSAzOm4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIDQ6bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixnZSl9Yj1udWxsLEQ9bnVsbCxrPW51bGwsWj1udWxsLHg9Z2Usej1Ucn19ZWxzZSEwPT09bSYmKHRuKDMwNDIpLG09ITEpfWZ1bmN0aW9uIFdlKGdlKXtmZSE9PWdlJiYobi5mcm9udEZhY2UoZ2U/MjMwNDoyMzA1KSxmZT1nZSl9ZnVuY3Rpb24gTXQoZ2UpezAhPT1nZT8oQWUoMjg4NCksZ2UhPT11ZSYmbi5jdWxsRmFjZSgxPT09Z2U/MTAyOToyPT09Z2U/MTAyODoxMDMyKSk6dG4oMjg4NCksdWU9Z2V9ZnVuY3Rpb24gaG4oZ2UsZm4sWnQpe2dlPyhBZSgzMjgyMyksKHchPT1mbnx8RiE9PVp0KSYmKG4ucG9seWdvbk9mZnNldChmbixadCksdz1mbixGPVp0KSk6dG4oMzI4MjMpfWZ1bmN0aW9uIGZpKGdlKXt2b2lkIDA9PT1nZSYmKGdlPTMzOTg0K3EtMSksYWUhPT1nZSYmKG4uYWN0aXZlVGV4dHVyZShnZSksYWU9Z2UpfXJldHVybntidWZmZXJzOntjb2xvcjphLGRlcHRoOmwsc3RlbmNpbDpjfSxlbmFibGU6QWUsZGlzYWJsZTp0bixiaW5kRnJhbWVidWZmZXI6ZnVuY3Rpb24oZ2UsZm4pe3JldHVybiBkW2dlXSE9PWZuJiYobi5iaW5kRnJhbWVidWZmZXIoZ2UsZm4pLGRbZ2VdPWZuLGkmJigzNjAwOT09PWdlJiYoZFszNjE2MF09Zm4pLDM2MTYwPT09Z2UmJihkWzM2MDA5XT1mbikpLCEwKX0sZHJhd0J1ZmZlcnM6ZnVuY3Rpb24oZ2UsZm4pe2xldCBadD1oLE5uPSExO2lmKGdlKWlmKFp0PXAuZ2V0KGZuKSx2b2lkIDA9PT1adCYmKFp0PVtdLHAuc2V0KGZuLFp0KSksZ2UuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyl7bGV0IFplPWdlLnRleHR1cmU7aWYoWnQubGVuZ3RoIT09WmUubGVuZ3RofHwzNjA2NCE9PVp0WzBdKXtmb3IobGV0IERuPTAsTWk9WmUubGVuZ3RoO0RuPE1pO0RuKyspWnRbRG5dPTM2MDY0K0RuO1p0Lmxlbmd0aD1aZS5sZW5ndGgsTm49ITB9fWVsc2UgMzYwNjQhPT1adFswXSYmKFp0WzBdPTM2MDY0LE5uPSEwKTtlbHNlIDEwMjkhPT1adFswXSYmKFp0WzBdPTEwMjksTm49ITApO05uJiYoZS5pc1dlYkdMMj9uLmRyYXdCdWZmZXJzKFp0KTp0LmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChadCkpfSx1c2VQcm9ncmFtOmZ1bmN0aW9uKGdlKXtyZXR1cm4gZiE9PWdlJiYobi51c2VQcm9ncmFtKGdlKSxmPWdlLCEwKX0sc2V0QmxlbmRpbmc6Y2Usc2V0TWF0ZXJpYWw6ZnVuY3Rpb24oZ2UsZm4pezI9PT1nZS5zaWRlP3RuKDI4ODQpOkFlKDI4ODQpO2xldCBadD0xPT09Z2Uuc2lkZTtmbiYmKFp0PSFadCksV2UoWnQpLDE9PT1nZS5ibGVuZGluZyYmITE9PT1nZS50cmFuc3BhcmVudD9jZSgwKTpjZShnZS5ibGVuZGluZyxnZS5ibGVuZEVxdWF0aW9uLGdlLmJsZW5kU3JjLGdlLmJsZW5kRHN0LGdlLmJsZW5kRXF1YXRpb25BbHBoYSxnZS5ibGVuZFNyY0FscGhhLGdlLmJsZW5kRHN0QWxwaGEsZ2UucHJlbXVsdGlwbGllZEFscGhhKSxsLnNldEZ1bmMoZ2UuZGVwdGhGdW5jKSxsLnNldFRlc3QoZ2UuZGVwdGhUZXN0KSxsLnNldE1hc2soZ2UuZGVwdGhXcml0ZSksYS5zZXRNYXNrKGdlLmNvbG9yV3JpdGUpO2xldCBObj1nZS5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KE5uKSxObiYmKGMuc2V0TWFzayhnZS5zdGVuY2lsV3JpdGVNYXNrKSxjLnNldEZ1bmMoZ2Uuc3RlbmNpbEZ1bmMsZ2Uuc3RlbmNpbFJlZixnZS5zdGVuY2lsRnVuY01hc2spLGMuc2V0T3AoZ2Uuc3RlbmNpbEZhaWwsZ2Uuc3RlbmNpbFpGYWlsLGdlLnN0ZW5jaWxaUGFzcykpLGhuKGdlLnBvbHlnb25PZmZzZXQsZ2UucG9seWdvbk9mZnNldEZhY3RvcixnZS5wb2x5Z29uT2Zmc2V0VW5pdHMpLCEwPT09Z2UuYWxwaGFUb0NvdmVyYWdlP0FlKDMyOTI2KTp0bigzMjkyNil9LHNldEZsaXBTaWRlZDpXZSxzZXRDdWxsRmFjZTpNdCxzZXRMaW5lV2lkdGg6ZnVuY3Rpb24oZ2Upe2dlIT09aGUmJihLJiZuLmxpbmVXaWR0aChnZSksaGU9Z2UpfSxzZXRQb2x5Z29uT2Zmc2V0OmhuLHNldFNjaXNzb3JUZXN0OmZ1bmN0aW9uKGdlKXtnZT9BZSgzMDg5KTp0bigzMDg5KX0sYWN0aXZlVGV4dHVyZTpmaSxiaW5kVGV4dHVyZTpmdW5jdGlvbihnZSxmbil7bnVsbD09PWFlJiZmaSgpO2xldCBadD1sZVthZV07dm9pZCAwPT09WnQmJihadD17dHlwZTp2b2lkIDAsdGV4dHVyZTp2b2lkIDB9LGxlW2FlXT1adCksKFp0LnR5cGUhPT1nZXx8WnQudGV4dHVyZSE9PWZuKSYmKG4uYmluZFRleHR1cmUoZ2UsZm58fFVlW2dlXSksWnQudHlwZT1nZSxadC50ZXh0dXJlPWZuKX0sdW5iaW5kVGV4dHVyZTpmdW5jdGlvbigpe2xldCBnZT1sZVthZV07dm9pZCAwIT09Z2UmJnZvaWQgMCE9PWdlLnR5cGUmJihuLmJpbmRUZXh0dXJlKGdlLnR5cGUsbnVsbCksZ2UudHlwZT12b2lkIDAsZ2UudGV4dHVyZT12b2lkIDApfSxjb21wcmVzc2VkVGV4SW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChnZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGdlKX19LHRleEltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7bi50ZXhJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChnZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGdlKX19LHRleEltYWdlM0Q6ZnVuY3Rpb24oKXt0cnl7bi50ZXhJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChnZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGdlKX19LHRleFN0b3JhZ2UyRDpmdW5jdGlvbigpe3RyeXtuLnRleFN0b3JhZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goZ2Upe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixnZSl9fSx0ZXhTdG9yYWdlM0Q6ZnVuY3Rpb24oKXt0cnl7bi50ZXhTdG9yYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKGdlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsZ2UpfX0sdGV4U3ViSW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLnRleFN1YkltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKGdlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsZ2UpfX0sdGV4U3ViSW1hZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleFN1YkltYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKGdlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsZ2UpfX0sY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7bi5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goZ2Upe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixnZSl9fSxzY2lzc29yOmZ1bmN0aW9uKGdlKXshMT09PURlLmVxdWFscyhnZSkmJihuLnNjaXNzb3IoZ2UueCxnZS55LGdlLnosZ2UudyksRGUuY29weShnZSkpfSx2aWV3cG9ydDpmdW5jdGlvbihnZSl7ITE9PT1udC5lcXVhbHMoZ2UpJiYobi52aWV3cG9ydChnZS54LGdlLnksZ2UueixnZS53KSxudC5jb3B5KGdlKSl9LHJlc2V0OmZ1bmN0aW9uKCl7bi5kaXNhYmxlKDMwNDIpLG4uZGlzYWJsZSgyODg0KSxuLmRpc2FibGUoMjkyOSksbi5kaXNhYmxlKDMyODIzKSxuLmRpc2FibGUoMzA4OSksbi5kaXNhYmxlKDI5NjApLG4uZGlzYWJsZSgzMjkyNiksbi5ibGVuZEVxdWF0aW9uKDMyNzc0KSxuLmJsZW5kRnVuYygxLDApLG4uYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksbi5jb2xvck1hc2soITAsITAsITAsITApLG4uY2xlYXJDb2xvcigwLDAsMCwwKSxuLmRlcHRoTWFzayghMCksbi5kZXB0aEZ1bmMoNTEzKSxuLmNsZWFyRGVwdGgoMSksbi5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxuLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLG4uc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxuLmNsZWFyU3RlbmNpbCgwKSxuLmN1bGxGYWNlKDEwMjkpLG4uZnJvbnRGYWNlKDIzMDUpLG4ucG9seWdvbk9mZnNldCgwLDApLG4uYWN0aXZlVGV4dHVyZSgzMzk4NCksbi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksITA9PT1pJiYobi5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksbi5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLG4udXNlUHJvZ3JhbShudWxsKSxuLmxpbmVXaWR0aCgxKSxuLnNjaXNzb3IoMCwwLG4uY2FudmFzLndpZHRoLG4uY2FudmFzLmhlaWdodCksbi52aWV3cG9ydCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSx1PXt9LGFlPW51bGwsbGU9e30sZD17fSxwPW5ldyBXZWFrTWFwLGg9W10sZj1udWxsLG09ITEseD1udWxsLGc9bnVsbCxiPW51bGwsRD1udWxsLFQ9bnVsbCxrPW51bGwsWj1udWxsLHo9ITEsZmU9bnVsbCx1ZT1udWxsLGhlPW51bGwsdz1udWxsLEY9bnVsbCxEZS5zZXQoMCwwLG4uY2FudmFzLndpZHRoLG4uY2FudmFzLmhlaWdodCksbnQuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGEucmVzZXQoKSxsLnJlc2V0KCksYy5yZXNldCgpfX19ZnVuY3Rpb24gaDllKG4sdCxlLGkscixvLHMpe2xldCBtLGE9ci5pc1dlYkdMMixsPXIubWF4VGV4dHVyZXMsYz1yLm1heEN1YmVtYXBTaXplLHU9ci5tYXhUZXh0dXJlU2l6ZSxkPXIubWF4U2FtcGxlcyxoPXQuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKT90LmdldCgiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik6dm9pZCAwLGY9bmV3IFdlYWtNYXAseD0hMTt0cnl7eD10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzPCJ1IiYmbnVsbCE9PW5ldyBPZmZzY3JlZW5DYW52YXMoMSwxKS5nZXRDb250ZXh0KCIyZCIpfWNhdGNoe31mdW5jdGlvbiBnKGVlLFcpe3JldHVybiB4P25ldyBPZmZzY3JlZW5DYW52YXMoZWUsVyk6WVMoImNhbnZhcyIpfWZ1bmN0aW9uIGIoZWUsVyxYZSxUdCl7bGV0IG1uPTE7aWYoKGVlLndpZHRoPlR0fHxlZS5oZWlnaHQ+VHQpJiYobW49VHQvTWF0aC5tYXgoZWUud2lkdGgsZWUuaGVpZ2h0KSksbW48MXx8ITA9PT1XKXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJmVlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PCJ1IiYmZWUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmZWUgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IHFlPVc/SDhlOk1hdGguZmxvb3Isd249cWUobW4qZWUud2lkdGgpLHluPXFlKG1uKmVlLmhlaWdodCk7dm9pZCAwPT09bSYmKG09Zyh3bix5bikpO2xldCB6dD1YZT9nKHduLHluKTptO3JldHVybiB6dC53aWR0aD13bix6dC5oZWlnaHQ9eW4senQuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UoZWUsMCwwLHduLHluKSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK2VlLndpZHRoKyJ4IitlZS5oZWlnaHQrIikgdG8gKCIrd24rIngiK3luKyIpLiIpLHp0fXJldHVybiJkYXRhImluIGVlJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIrZWUud2lkdGgrIngiK2VlLmhlaWdodCsiKS4iKSxlZX1yZXR1cm4gZWV9ZnVuY3Rpb24gRChlZSl7cmV0dXJuIHh1ZShlZS53aWR0aCkmJnh1ZShlZS5oZWlnaHQpfWZ1bmN0aW9uIGsoZWUsVyl7cmV0dXJuIGVlLmdlbmVyYXRlTWlwbWFwcyYmVyYmZWUubWluRmlsdGVyIT09Wm8mJmVlLm1pbkZpbHRlciE9PUdzfWZ1bmN0aW9uIFooZWUpe24uZ2VuZXJhdGVNaXBtYXAoZWUpfWZ1bmN0aW9uIHooZWUsVyxYZSxUdCxtbj0hMSl7aWYoITE9PT1hKXJldHVybiBXO2lmKG51bGwhPT1lZSl7aWYodm9pZCAwIT09bltlZV0pcmV0dXJuIG5bZWVdO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCAnIitlZSsiJyIpfWxldCBxZT1XO3JldHVybiA2NDAzPT09VyYmKDUxMjY9PT1YZSYmKHFlPTMzMzI2KSw1MTMxPT09WGUmJihxZT0zMzMyNSksNTEyMT09PVhlJiYocWU9MzMzMjEpKSwzMzMxOT09PVcmJig1MTI2PT09WGUmJihxZT0zMzMyOCksNTEzMT09PVhlJiYocWU9MzMzMjcpLDUxMjE9PT1YZSYmKHFlPTMzMzIzKSksNjQwOD09PVcmJig1MTI2PT09WGUmJihxZT0zNDgzNiksNTEzMT09PVhlJiYocWU9MzQ4NDIpLDUxMjE9PT1YZSYmKHFlPVR0PT09V3ImJiExPT09bW4/MzU5MDc6MzI4NTYpLDMyODE5PT09WGUmJihxZT0zMjg1NCksMzI4MjA9PT1YZSYmKHFlPTMyODU1KSksKDMzMzI1PT09cWV8fDMzMzI2PT09cWV8fDMzMzI3PT09cWV8fDMzMzI4PT09cWV8fDM0ODQyPT09cWV8fDM0ODM2PT09cWUpJiZ0LmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpLHFlfWZ1bmN0aW9uIGZlKGVlLFcsWGUpe3JldHVybiEwPT09ayhlZSxYZSl8fGVlLmlzRnJhbWVidWZmZXJUZXh0dXJlJiZlZS5taW5GaWx0ZXIhPT1abyYmZWUubWluRmlsdGVyIT09R3M/TWF0aC5sb2cyKE1hdGgubWF4KFcud2lkdGgsVy5oZWlnaHQpKSsxOnZvaWQgMCE9PWVlLm1pcG1hcHMmJmVlLm1pcG1hcHMubGVuZ3RoPjA/ZWUubWlwbWFwcy5sZW5ndGg6ZWUuaXNDb21wcmVzc2VkVGV4dHVyZSYmQXJyYXkuaXNBcnJheShlZS5pbWFnZSk/Vy5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIHVlKGVlKXtyZXR1cm4gZWU9PT1ab3x8MTAwND09PWVlfHwxMDA1PT09ZWU/OTcyODo5NzI5fWZ1bmN0aW9uIGhlKGVlKXtsZXQgVz1lZS50YXJnZXQ7Vy5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixoZSksZnVuY3Rpb24oZWUpe2xldCBXPWkuZ2V0KGVlKTt2b2lkIDAhPT1XLl9fd2ViZ2xJbml0JiYobi5kZWxldGVUZXh0dXJlKFcuX193ZWJnbFRleHR1cmUpLGkucmVtb3ZlKGVlKSl9KFcpLFcuaXNWaWRlb1RleHR1cmUmJmYuZGVsZXRlKFcpLHMubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gdyhlZSl7bGV0IFc9ZWUudGFyZ2V0O1cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdyksZnVuY3Rpb24oZWUpe2xldCBXPWVlLnRleHR1cmUsWGU9aS5nZXQoZWUpLFR0PWkuZ2V0KFcpO2lmKGVlKXtpZih2b2lkIDAhPT1UdC5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShUdC5fX3dlYmdsVGV4dHVyZSkscy5tZW1vcnkudGV4dHVyZXMtLSksZWUuZGVwdGhUZXh0dXJlJiZlZS5kZXB0aFRleHR1cmUuZGlzcG9zZSgpLGVlLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgbW49MDttbjw2O21uKyspbi5kZWxldGVGcmFtZWJ1ZmZlcihYZS5fX3dlYmdsRnJhbWVidWZmZXJbbW5dKSxYZS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFhlLl9fd2ViZ2xEZXB0aGJ1ZmZlclttbl0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihYZS5fX3dlYmdsRnJhbWVidWZmZXIpLFhlLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIoWGUuX193ZWJnbERlcHRoYnVmZmVyKSxYZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXImJm4uZGVsZXRlRnJhbWVidWZmZXIoWGUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxYZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFhlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksWGUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihYZS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKGVlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMpZm9yKGxldCBtbj0wLHFlPVcubGVuZ3RoO21uPHFlO21uKyspe2xldCB3bj1pLmdldChXW21uXSk7d24uX193ZWJnbFRleHR1cmUmJihuLmRlbGV0ZVRleHR1cmUod24uX193ZWJnbFRleHR1cmUpLHMubWVtb3J5LnRleHR1cmVzLS0pLGkucmVtb3ZlKFdbbW5dKX1pLnJlbW92ZShXKSxpLnJlbW92ZShlZSl9fShXKX1sZXQgSz0wO2Z1bmN0aW9uIGFlKGVlLFcpe2xldCBYZT1pLmdldChlZSk7aWYoZWUuaXNWaWRlb1RleHR1cmUmJmZ1bmN0aW9uKGVlKXtsZXQgVz1zLnJlbmRlci5mcmFtZTtmLmdldChlZSkhPT1XJiYoZi5zZXQoZWUsVyksZWUudXBkYXRlKCkpfShlZSksZWUudmVyc2lvbj4wJiZYZS5fX3ZlcnNpb24hPT1lZS52ZXJzaW9uKXtsZXQgVHQ9ZWUuaW1hZ2U7aWYodm9pZCAwPT09VHQpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNle2lmKCExIT09VHQuY29tcGxldGUpcmV0dXJuIHZvaWQgQWUoWGUsZWUsVyk7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlIil9fWUuYWN0aXZlVGV4dHVyZSgzMzk4NCtXKSxlLmJpbmRUZXh0dXJlKDM1NTMsWGUuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIHZlKGVlLFcpe2xldCBYZT1pLmdldChlZSk7ZWUudmVyc2lvbj4wJiZYZS5fX3ZlcnNpb24hPT1lZS52ZXJzaW9uP2Z1bmN0aW9uKGVlLFcsWGUpe2lmKDYhPT1XLmltYWdlLmxlbmd0aClyZXR1cm47VWUoZWUsVyksZS5hY3RpdmVUZXh0dXJlKDMzOTg0K1hlKSxlLmJpbmRUZXh0dXJlKDM0MDY3LGVlLl9fd2ViZ2xUZXh0dXJlKSxuLnBpeGVsU3RvcmVpKDM3NDQwLFcuZmxpcFkpLG4ucGl4ZWxTdG9yZWkoMzc0NDEsVy5wcmVtdWx0aXBseUFscGhhKSxuLnBpeGVsU3RvcmVpKDMzMTcsVy51bnBhY2tBbGlnbm1lbnQpLG4ucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IFR0PVcmJihXLmlzQ29tcHJlc3NlZFRleHR1cmV8fFcuaW1hZ2VbMF0uaXNDb21wcmVzc2VkVGV4dHVyZSksbW49Vy5pbWFnZVswXSYmVy5pbWFnZVswXS5pc0RhdGFUZXh0dXJlLHFlPVtdO2ZvcihsZXQgWmU9MDtaZTw2O1plKyspcWVbWmVdPVR0fHxtbj9tbj9XLmltYWdlW1plXS5pbWFnZTpXLmltYWdlW1plXTpiKFcuaW1hZ2VbWmVdLCExLCEwLGMpLHFlW1plXT1obihXLHFlW1plXSk7bGV0IE5uLHduPXFlWzBdLHluPUQod24pfHxhLHp0PW8uY29udmVydChXLmZvcm1hdCxXLmVuY29kaW5nKSxVdD1vLmNvbnZlcnQoVy50eXBlKSxXbj16KFcuaW50ZXJuYWxGb3JtYXQsenQsVXQsVy5lbmNvZGluZyksZ2U9YSYmITAhPT1XLmlzVmlkZW9UZXh0dXJlLGZuPXZvaWQgMD09PWVlLl9fdmVyc2lvbixadD1mZShXLHduLHluKTtpZihndCgzNDA2NyxXLHluKSxUdCl7Z2UmJmZuJiZlLnRleFN0b3JhZ2UyRCgzNDA2NyxadCxXbix3bi53aWR0aCx3bi5oZWlnaHQpO2ZvcihsZXQgWmU9MDtaZTw2O1plKyspe05uPXFlW1plXS5taXBtYXBzO2ZvcihsZXQgRG49MDtEbjxObi5sZW5ndGg7RG4rKyl7bGV0IE1pPU5uW0RuXTtXLmZvcm1hdCE9PWdhP251bGwhPT16dD9nZT9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K1plLERuLDAsMCxNaS53aWR0aCxNaS5oZWlnaHQsenQsTWkuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStaZSxEbixXbixNaS53aWR0aCxNaS5oZWlnaHQsMCxNaS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6Z2U/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1plLERuLDAsMCxNaS53aWR0aCxNaS5oZWlnaHQsenQsVXQsTWkuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1plLERuLFduLE1pLndpZHRoLE1pLmhlaWdodCwwLHp0LFV0LE1pLmRhdGEpfX19ZWxzZXtObj1XLm1pcG1hcHMsZ2UmJmZuJiYoTm4ubGVuZ3RoPjAmJlp0KyssZS50ZXhTdG9yYWdlMkQoMzQwNjcsWnQsV24scWVbMF0ud2lkdGgscWVbMF0uaGVpZ2h0KSk7Zm9yKGxldCBaZT0wO1plPDY7WmUrKylpZihtbil7Z2U/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1plLDAsMCwwLHFlW1plXS53aWR0aCxxZVtaZV0uaGVpZ2h0LHp0LFV0LHFlW1plXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWmUsMCxXbixxZVtaZV0ud2lkdGgscWVbWmVdLmhlaWdodCwwLHp0LFV0LHFlW1plXS5kYXRhKTtmb3IobGV0IERuPTA7RG48Tm4ubGVuZ3RoO0RuKyspe2xldCBUcj1ObltEbl0uaW1hZ2VbWmVdLmltYWdlO2dlP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStaZSxEbisxLDAsMCxUci53aWR0aCxUci5oZWlnaHQsenQsVXQsVHIuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1plLERuKzEsV24sVHIud2lkdGgsVHIuaGVpZ2h0LDAsenQsVXQsVHIuZGF0YSl9fWVsc2V7Z2U/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1plLDAsMCwwLHp0LFV0LHFlW1plXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1plLDAsV24senQsVXQscWVbWmVdKTtmb3IobGV0IERuPTA7RG48Tm4ubGVuZ3RoO0RuKyspe2xldCBNaT1ObltEbl07Z2U/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1plLERuKzEsMCwwLHp0LFV0LE1pLmltYWdlW1plXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1plLERuKzEsV24senQsVXQsTWkuaW1hZ2VbWmVdKX19fWsoVyx5bikmJlooMzQwNjcpLGVlLl9fdmVyc2lvbj1XLnZlcnNpb24sVy5vblVwZGF0ZSYmVy5vblVwZGF0ZShXKX0oWGUsZWUsVyk6KGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtXKSxlLmJpbmRUZXh0dXJlKDM0MDY3LFhlLl9fd2ViZ2xUZXh0dXJlKSl9bGV0IERlPXsxZTM6MTA0OTcsW0VsXTozMzA3MSwxMDAyOjMzNjQ4fSxudD17W1pvXTo5NzI4LDEwMDQ6OTk4NCwxMDA1Ojk5ODYsW0dzXTo5NzI5LDEwMDc6OTk4NSwxMDA4Ojk5ODd9O2Z1bmN0aW9uIGd0KGVlLFcsWGUpe2lmKFhlPyhuLnRleFBhcmFtZXRlcmkoZWUsMTAyNDIsRGVbVy53cmFwU10pLG4udGV4UGFyYW1ldGVyaShlZSwxMDI0MyxEZVtXLndyYXBUXSksKDMyODc5PT09ZWV8fDM1ODY2PT09ZWUpJiZuLnRleFBhcmFtZXRlcmkoZWUsMzI4ODIsRGVbVy53cmFwUl0pLG4udGV4UGFyYW1ldGVyaShlZSwxMDI0MCxudFtXLm1hZ0ZpbHRlcl0pLG4udGV4UGFyYW1ldGVyaShlZSwxMDI0MSxudFtXLm1pbkZpbHRlcl0pKToobi50ZXhQYXJhbWV0ZXJpKGVlLDEwMjQyLDMzMDcxKSxuLnRleFBhcmFtZXRlcmkoZWUsMTAyNDMsMzMwNzEpLCgzMjg3OT09PWVlfHwzNTg2Nj09PWVlKSYmbi50ZXhQYXJhbWV0ZXJpKGVlLDMyODgyLDMzMDcxKSwoVy53cmFwUyE9PUVsfHxXLndyYXBUIT09RWwpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS53cmFwUyBhbmQgVGV4dHVyZS53cmFwVCBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmcuIiksbi50ZXhQYXJhbWV0ZXJpKGVlLDEwMjQwLHVlKFcubWFnRmlsdGVyKSksbi50ZXhQYXJhbWV0ZXJpKGVlLDEwMjQxLHVlKFcubWluRmlsdGVyKSksVy5taW5GaWx0ZXIhPT1abyYmVy5taW5GaWx0ZXIhPT1HcyYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuIikpLCEwPT09dC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKXtsZXQgVHQ9dC5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2lmKFcudHlwZT09PVVnJiYhMT09PXQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKXx8ITE9PT1hJiZXLnR5cGU9PT1sYiYmITE9PT10LmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSlyZXR1cm47KFcuYW5pc290cm9weT4xfHxpLmdldChXKS5fX2N1cnJlbnRBbmlzb3Ryb3B5KSYmKG4udGV4UGFyYW1ldGVyZihlZSxUdC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihXLmFuaXNvdHJvcHksci5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxpLmdldChXKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PVcuYW5pc290cm9weSl9fWZ1bmN0aW9uIFVlKGVlLFcpe3ZvaWQgMD09PWVlLl9fd2ViZ2xJbml0JiYoZWUuX193ZWJnbEluaXQ9ITAsVy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixoZSksZWUuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkscy5tZW1vcnkudGV4dHVyZXMrKyl9ZnVuY3Rpb24gQWUoZWUsVyxYZSl7bGV0IFR0PTM1NTM7Vy5pc0RhdGFUZXh0dXJlMkRBcnJheSYmKFR0PTM1ODY2KSxXLmlzRGF0YVRleHR1cmUzRCYmKFR0PTMyODc5KSxVZShlZSxXKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrWGUpLGUuYmluZFRleHR1cmUoVHQsZWUuX193ZWJnbFRleHR1cmUpLG4ucGl4ZWxTdG9yZWkoMzc0NDAsVy5mbGlwWSksbi5waXhlbFN0b3JlaSgzNzQ0MSxXLnByZW11bHRpcGx5QWxwaGEpLG4ucGl4ZWxTdG9yZWkoMzMxNyxXLnVucGFja0FsaWdubWVudCksbi5waXhlbFN0b3JlaSgzNzQ0MywwKTtsZXQgbW49ZnVuY3Rpb24oZWUpe3JldHVybiFhJiYoZWUud3JhcFMhPT1FbHx8ZWUud3JhcFQhPT1FbHx8ZWUubWluRmlsdGVyIT09Wm8mJmVlLm1pbkZpbHRlciE9PUdzKX0oVykmJiExPT09RChXLmltYWdlKSxxZT1iKFcuaW1hZ2UsbW4sITEsdSk7cWU9aG4oVyxxZSk7bGV0IHduPUQocWUpfHxhLHluPW8uY29udmVydChXLmZvcm1hdCxXLmVuY29kaW5nKSx6dD1vLmNvbnZlcnQoVy50eXBlKSxVdD16KFcuaW50ZXJuYWxGb3JtYXQseW4senQsVy5lbmNvZGluZyxXLmlzVmlkZW9UZXh0dXJlKTtndChUdCxXLHduKTtsZXQgV24sZ2U9Vy5taXBtYXBzLGZuPWEmJiEwIT09Vy5pc1ZpZGVvVGV4dHVyZSxadD12b2lkIDA9PT1lZS5fX3ZlcnNpb24sTm49ZmUoVyxxZSx3bik7aWYoVy5pc0RlcHRoVGV4dHVyZSlVdD02NDAyLGE/VXQ9Vy50eXBlPT09VWc/MzYwMTI6MTAxND09PVcudHlwZT8zMzE5MDpXLnR5cGU9PT1jYj8zNTA1NjozMzE4OTpXLnR5cGU9PT1VZyYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksVy5mb3JtYXQ9PT1qZyYmNjQwMj09PVV0JiZXLnR5cGUhPT1XUyYmMTAxNCE9PVcudHlwZSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLFcudHlwZT1XUyx6dD1vLmNvbnZlcnQoVy50eXBlKSksVy5mb3JtYXQ9PT1oYiYmNjQwMj09PVV0JiYoVXQ9MzQwNDEsVy50eXBlIT09Y2ImJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksVy50eXBlPWNiLHp0PW8uY29udmVydChXLnR5cGUpKSksZm4mJlp0P2UudGV4U3RvcmFnZTJEKDM1NTMsMSxVdCxxZS53aWR0aCxxZS5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsVXQscWUud2lkdGgscWUuaGVpZ2h0LDAseW4senQsbnVsbCk7ZWxzZSBpZihXLmlzRGF0YVRleHR1cmUpaWYoZ2UubGVuZ3RoPjAmJnduKXtmbiYmWnQmJmUudGV4U3RvcmFnZTJEKDM1NTMsTm4sVXQsZ2VbMF0ud2lkdGgsZ2VbMF0uaGVpZ2h0KTtmb3IobGV0IFplPTAsRG49Z2UubGVuZ3RoO1plPERuO1plKyspV249Z2VbWmVdLGZuP2UudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLFduLndpZHRoLFduLmhlaWdodCx5bix6dCxXbi5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxaZSxVdCxXbi53aWR0aCxXbi5oZWlnaHQsMCx5bix6dCxXbi5kYXRhKTtXLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIGZuPyhadCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxObixVdCxxZS53aWR0aCxxZS5oZWlnaHQpLGUudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLHFlLndpZHRoLHFlLmhlaWdodCx5bix6dCxxZS5kYXRhKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxVdCxxZS53aWR0aCxxZS5oZWlnaHQsMCx5bix6dCxxZS5kYXRhKTtlbHNlIGlmKFcuaXNDb21wcmVzc2VkVGV4dHVyZSl7Zm4mJlp0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLE5uLFV0LGdlWzBdLndpZHRoLGdlWzBdLmhlaWdodCk7Zm9yKGxldCBaZT0wLERuPWdlLmxlbmd0aDtaZTxEbjtaZSsrKVduPWdlW1plXSxXLmZvcm1hdCE9PWdhP251bGwhPT15bj9mbj9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsWmUsMCwwLFduLndpZHRoLFduLmhlaWdodCx5bixXbi5kYXRhKTplLmNvbXByZXNzZWRUZXhJbWFnZTJEKDM1NTMsWmUsVXQsV24ud2lkdGgsV24uaGVpZ2h0LDAsV24uZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAudXBsb2FkVGV4dHVyZSgpIik6Zm4/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsWmUsMCwwLFduLndpZHRoLFduLmhlaWdodCx5bix6dCxXbi5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxaZSxVdCxXbi53aWR0aCxXbi5oZWlnaHQsMCx5bix6dCxXbi5kYXRhKX1lbHNlIGlmKFcuaXNEYXRhVGV4dHVyZTJEQXJyYXkpZm4/KFp0JiZlLnRleFN0b3JhZ2UzRCgzNTg2NixObixVdCxxZS53aWR0aCxxZS5oZWlnaHQscWUuZGVwdGgpLGUudGV4U3ViSW1hZ2UzRCgzNTg2NiwwLDAsMCwwLHFlLndpZHRoLHFlLmhlaWdodCxxZS5kZXB0aCx5bix6dCxxZS5kYXRhKSk6ZS50ZXhJbWFnZTNEKDM1ODY2LDAsVXQscWUud2lkdGgscWUuaGVpZ2h0LHFlLmRlcHRoLDAseW4senQscWUuZGF0YSk7ZWxzZSBpZihXLmlzRGF0YVRleHR1cmUzRClmbj8oWnQmJmUudGV4U3RvcmFnZTNEKDMyODc5LE5uLFV0LHFlLndpZHRoLHFlLmhlaWdodCxxZS5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDMyODc5LDAsMCwwLDAscWUud2lkdGgscWUuaGVpZ2h0LHFlLmRlcHRoLHluLHp0LHFlLmRhdGEpKTplLnRleEltYWdlM0QoMzI4NzksMCxVdCxxZS53aWR0aCxxZS5oZWlnaHQscWUuZGVwdGgsMCx5bix6dCxxZS5kYXRhKTtlbHNlIGlmKFcuaXNGcmFtZWJ1ZmZlclRleHR1cmUpZm4mJlp0P2UudGV4U3RvcmFnZTJEKDM1NTMsTm4sVXQscWUud2lkdGgscWUuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLFV0LHFlLndpZHRoLHFlLmhlaWdodCwwLHluLHp0LG51bGwpO2Vsc2UgaWYoZ2UubGVuZ3RoPjAmJnduKXtmbiYmWnQmJmUudGV4U3RvcmFnZTJEKDM1NTMsTm4sVXQsZ2VbMF0ud2lkdGgsZ2VbMF0uaGVpZ2h0KTtmb3IobGV0IFplPTAsRG49Z2UubGVuZ3RoO1plPERuO1plKyspV249Z2VbWmVdLGZuP2UudGV4U3ViSW1hZ2UyRCgzNTUzLFplLDAsMCx5bix6dCxXbik6ZS50ZXhJbWFnZTJEKDM1NTMsWmUsVXQseW4senQsV24pO1cuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2UgZm4/KFp0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLE5uLFV0LHFlLndpZHRoLHFlLmhlaWdodCksZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAseW4senQscWUpKTplLnRleEltYWdlMkQoMzU1MywwLFV0LHluLHp0LHFlKTtrKFcsd24pJiZaKFR0KSxlZS5fX3ZlcnNpb249Vy52ZXJzaW9uLFcub25VcGRhdGUmJlcub25VcGRhdGUoVyl9ZnVuY3Rpb24gcHQoZWUsVyxYZSxUdCxtbil7bGV0IHFlPW8uY29udmVydChYZS5mb3JtYXQsWGUuZW5jb2RpbmcpLHduPW8uY29udmVydChYZS50eXBlKSx5bj16KFhlLmludGVybmFsRm9ybWF0LHFlLHduLFhlLmVuY29kaW5nKTtpLmdldChXKS5fX2hhc0V4dGVybmFsVGV4dHVyZXN8fCgzMjg3OT09PW1ufHwzNTg2Nj09PW1uP2UudGV4SW1hZ2UzRChtbiwwLHluLFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCwwLHFlLHduLG51bGwpOmUudGV4SW1hZ2UyRChtbiwwLHluLFcud2lkdGgsVy5oZWlnaHQsMCxxZSx3bixudWxsKSksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsZWUpLFcudXNlUmVuZGVyVG9UZXh0dXJlP2guZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCxUdCxtbixpLmdldChYZSkuX193ZWJnbFRleHR1cmUsMCxNdChXKSk6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCxUdCxtbixpLmdldChYZSkuX193ZWJnbFRleHR1cmUsMCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gd3QoZWUsVyxYZSl7aWYobi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGVlKSxXLmRlcHRoQnVmZmVyJiYhVy5zdGVuY2lsQnVmZmVyKXtsZXQgVHQ9MzMxODk7aWYoWGV8fFcudXNlUmVuZGVyVG9UZXh0dXJlKXtsZXQgbW49Vy5kZXB0aFRleHR1cmU7bW4mJm1uLmlzRGVwdGhUZXh0dXJlJiYobW4udHlwZT09PVVnP1R0PTM2MDEyOjEwMTQ9PT1tbi50eXBlJiYoVHQ9MzMxOTApKTtsZXQgcWU9TXQoVyk7Vy51c2VSZW5kZXJUb1RleHR1cmU/aC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEscWUsVHQsVy53aWR0aCxXLmhlaWdodCk6bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEscWUsVHQsVy53aWR0aCxXLmhlaWdodCl9ZWxzZSBuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsVHQsVy53aWR0aCxXLmhlaWdodCk7bi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSxlZSl9ZWxzZSBpZihXLmRlcHRoQnVmZmVyJiZXLnN0ZW5jaWxCdWZmZXIpe2xldCBUdD1NdChXKTtYZSYmVy51c2VSZW5kZXJidWZmZXI/bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsVHQsMzUwNTYsVy53aWR0aCxXLmhlaWdodCk6Vy51c2VSZW5kZXJUb1RleHR1cmU/aC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsVHQsMzUwNTYsVy53aWR0aCxXLmhlaWdodCk6bi5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLFcud2lkdGgsVy5oZWlnaHQpLG4uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsZWUpfWVsc2V7bGV0IFR0PSEwPT09Vy5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzP1cudGV4dHVyZVswXTpXLnRleHR1cmUsbW49by5jb252ZXJ0KFR0LmZvcm1hdCxUdC5lbmNvZGluZykscWU9by5jb252ZXJ0KFR0LnR5cGUpLHduPXooVHQuaW50ZXJuYWxGb3JtYXQsbW4scWUsVHQuZW5jb2RpbmcpLHluPU10KFcpO1hlJiZXLnVzZVJlbmRlcmJ1ZmZlcj9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSx5bix3bixXLndpZHRoLFcuaGVpZ2h0KTpXLnVzZVJlbmRlclRvVGV4dHVyZT9oLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSx5bix3bixXLndpZHRoLFcuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsd24sVy53aWR0aCxXLmhlaWdodCl9bi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIHh0KGVlKXtsZXQgVz1pLmdldChlZSksWGU9ITA9PT1lZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldDtpZihlZS5kZXB0aFRleHR1cmUmJiFXLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXIpe2lmKFhlKXRocm93IG5ldyBFcnJvcigidGFyZ2V0LmRlcHRoVGV4dHVyZSBub3Qgc3VwcG9ydGVkIGluIEN1YmUgcmVuZGVyIHRhcmdldHMiKTshZnVuY3Rpb24oZWUsVyl7aWYoVyYmVy5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxlZSksIVcuZGVwdGhUZXh0dXJlfHwhVy5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgbmV3IEVycm9yKCJyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuRGVwdGhUZXh0dXJlIik7KCFpLmdldChXLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmV8fFcuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoIT09Vy53aWR0aHx8Vy5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0IT09Vy5oZWlnaHQpJiYoVy5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGg9Vy53aWR0aCxXLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQ9Vy5oZWlnaHQsVy5kZXB0aFRleHR1cmUubmVlZHNVcGRhdGU9ITApLGFlKFcuZGVwdGhUZXh0dXJlLDApO2xldCBUdD1pLmdldChXLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsbW49TXQoVyk7aWYoVy5kZXB0aFRleHR1cmUuZm9ybWF0PT09amcpVy51c2VSZW5kZXJUb1RleHR1cmU/aC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMsVHQsMCxtbik6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLFR0LDApO2Vsc2V7aWYoVy5kZXB0aFRleHR1cmUuZm9ybWF0IT09aGIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKTtXLnVzZVJlbmRlclRvVGV4dHVyZT9oLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAsMzMzMDYsMzU1MyxUdCwwLG1uKTpuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsVHQsMCl9fShXLl9fd2ViZ2xGcmFtZWJ1ZmZlcixlZSl9ZWxzZSBpZihYZSl7Vy5fX3dlYmdsRGVwdGhidWZmZXI9W107Zm9yKGxldCBUdD0wO1R0PDY7VHQrKyllLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxXLl9fd2ViZ2xGcmFtZWJ1ZmZlcltUdF0pLFcuX193ZWJnbERlcHRoYnVmZmVyW1R0XT1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHd0KFcuX193ZWJnbERlcHRoYnVmZmVyW1R0XSxlZSwhMSl9ZWxzZSBlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxXLl9fd2ViZ2xGcmFtZWJ1ZmZlciksVy5fX3dlYmdsRGVwdGhidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSx3dChXLl9fd2ViZ2xEZXB0aGJ1ZmZlcixlZSwhMSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gTXQoZWUpe3JldHVybiBhJiYoZWUudXNlUmVuZGVyYnVmZmVyfHxlZS51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGQsZWUuc2FtcGxlcyk6MH1mdW5jdGlvbiBobihlZSxXKXtsZXQgWGU9ZWUuZW5jb2RpbmcsVHQ9ZWUuZm9ybWF0LG1uPWVlLnR5cGU7cmV0dXJuITA9PT1lZS5pc0NvbXByZXNzZWRUZXh0dXJlfHwhMD09PWVlLmlzVmlkZW9UZXh0dXJlfHwxMDM1PT09ZWUuZm9ybWF0fHxYZSE9PWJmJiYoWGU9PT1Xcj8hMT09PWE/ITA9PT10LmhhcygiRVhUX3NSR0IiKSYmVHQ9PT1nYT8oZWUuZm9ybWF0PTEwMzUsZWUubWluRmlsdGVyPUdzLGVlLmdlbmVyYXRlTWlwbWFwcz0hMSk6Vz1UcC5zUkdCVG9MaW5lYXIoVyk6KFR0IT09Z2F8fG1uIT09X2YpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixYZSkpLFd9bGV0IG9uPSExLGZpPSExO3RoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdD1mdW5jdGlvbigpe2xldCBlZT1LO3JldHVybiBlZT49bCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBUcnlpbmcgdG8gdXNlICIrZWUrIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIitsKSxLKz0xLGVlfSx0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPWZ1bmN0aW9uKCl7Sz0wfSx0aGlzLnNldFRleHR1cmUyRD1hZSx0aGlzLnNldFRleHR1cmUyREFycmF5PWZ1bmN0aW9uKGVlLFcpe2xldCBYZT1pLmdldChlZSk7ZWUudmVyc2lvbj4wJiZYZS5fX3ZlcnNpb24hPT1lZS52ZXJzaW9uP0FlKFhlLGVlLFcpOihlLmFjdGl2ZVRleHR1cmUoMzM5ODQrVyksZS5iaW5kVGV4dHVyZSgzNTg2NixYZS5fX3dlYmdsVGV4dHVyZSkpfSx0aGlzLnNldFRleHR1cmUzRD1mdW5jdGlvbihlZSxXKXtsZXQgWGU9aS5nZXQoZWUpO2VlLnZlcnNpb24+MCYmWGUuX192ZXJzaW9uIT09ZWUudmVyc2lvbj9BZShYZSxlZSxXKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K1cpLGUuYmluZFRleHR1cmUoMzI4NzksWGUuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlQ3ViZT12ZSx0aGlzLnJlYmluZFRleHR1cmVzPWZ1bmN0aW9uKGVlLFcsWGUpe2xldCBUdD1pLmdldChlZSk7dm9pZCAwIT09VyYmcHQoVHQuX193ZWJnbEZyYW1lYnVmZmVyLGVlLGVlLnRleHR1cmUsMzYwNjQsMzU1Myksdm9pZCAwIT09WGUmJnh0KGVlKX0sdGhpcy5zZXR1cFJlbmRlclRhcmdldD1mdW5jdGlvbihlZSl7bGV0IFc9ZWUudGV4dHVyZSxYZT1pLmdldChlZSksVHQ9aS5nZXQoVyk7ZWUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdyksITAhPT1lZS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzJiYodm9pZCAwPT09VHQuX193ZWJnbFRleHR1cmUmJihUdC5fX3dlYmdsVGV4dHVyZT1uLmNyZWF0ZVRleHR1cmUoKSksVHQuX192ZXJzaW9uPVcudmVyc2lvbixzLm1lbW9yeS50ZXh0dXJlcysrKTtsZXQgbW49ITA9PT1lZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCxxZT0hMD09PWVlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMsd249Vy5pc0RhdGFUZXh0dXJlM0R8fFcuaXNEYXRhVGV4dHVyZTJEQXJyYXkseW49RChlZSl8fGE7aWYobW4pe1hlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1bXTtmb3IobGV0IHp0PTA7enQ8Njt6dCsrKVhlLl9fd2ViZ2xGcmFtZWJ1ZmZlclt6dF09bi5jcmVhdGVGcmFtZWJ1ZmZlcigpfWVsc2UgaWYoWGUuX193ZWJnbEZyYW1lYnVmZmVyPW4uY3JlYXRlRnJhbWVidWZmZXIoKSxxZSlpZihyLmRyYXdCdWZmZXJzKXtsZXQgenQ9ZWUudGV4dHVyZTtmb3IobGV0IFV0PTAsV249enQubGVuZ3RoO1V0PFduO1V0Kyspe2xldCBnZT1pLmdldCh6dFtVdF0pO3ZvaWQgMD09PWdlLl9fd2ViZ2xUZXh0dXJlJiYoZ2UuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkscy5tZW1vcnkudGV4dHVyZXMrKyl9fWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyIG9yIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24uIik7ZWxzZSBpZihlZS51c2VSZW5kZXJidWZmZXIpaWYoYSl7WGUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyPW4uY3JlYXRlRnJhbWVidWZmZXIoKSxYZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsWGUuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKTtsZXQgenQ9by5jb252ZXJ0KFcuZm9ybWF0LFcuZW5jb2RpbmcpLFV0PW8uY29udmVydChXLnR5cGUpLFduPXooVy5pbnRlcm5hbEZvcm1hdCx6dCxVdCxXLmVuY29kaW5nKSxnZT1NdChlZSk7bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsZ2UsV24sZWUud2lkdGgsZWUuaGVpZ2h0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxYZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLG4uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwNjQsMzYxNjEsWGUuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksZWUuZGVwdGhCdWZmZXImJihYZS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSx3dChYZS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIsZWUsITApKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKG1uKXtlLmJpbmRUZXh0dXJlKDM0MDY3LFR0Ll9fd2ViZ2xUZXh0dXJlKSxndCgzNDA2NyxXLHluKTtmb3IobGV0IHp0PTA7enQ8Njt6dCsrKXB0KFhlLl9fd2ViZ2xGcmFtZWJ1ZmZlclt6dF0sZWUsVywzNjA2NCwzNDA2OSt6dCk7ayhXLHluKSYmWigzNDA2NyksZS51bmJpbmRUZXh0dXJlKCl9ZWxzZSBpZihxZSl7bGV0IHp0PWVlLnRleHR1cmU7Zm9yKGxldCBVdD0wLFduPXp0Lmxlbmd0aDtVdDxXbjtVdCsrKXtsZXQgZ2U9enRbVXRdLGZuPWkuZ2V0KGdlKTtlLmJpbmRUZXh0dXJlKDM1NTMsZm4uX193ZWJnbFRleHR1cmUpLGd0KDM1NTMsZ2UseW4pLHB0KFhlLl9fd2ViZ2xGcmFtZWJ1ZmZlcixlZSxnZSwzNjA2NCtVdCwzNTUzKSxrKGdlLHluKSYmWigzNTUzKX1lLnVuYmluZFRleHR1cmUoKX1lbHNle2xldCB6dD0zNTUzO3duJiYoYT96dD1XLmlzRGF0YVRleHR1cmUzRD8zMjg3OTozNTg2Njpjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheSBvbmx5IHN1cHBvcnRlZCB3aXRoIFdlYkdMMi4iKSksZS5iaW5kVGV4dHVyZSh6dCxUdC5fX3dlYmdsVGV4dHVyZSksZ3QoenQsVyx5bikscHQoWGUuX193ZWJnbEZyYW1lYnVmZmVyLGVlLFcsMzYwNjQsenQpLGsoVyx5bikmJlooenQpLGUudW5iaW5kVGV4dHVyZSgpfWVlLmRlcHRoQnVmZmVyJiZ4dChlZSl9LHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWZ1bmN0aW9uKGVlKXtsZXQgVz1EKGVlKXx8YSxYZT0hMD09PWVlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM/ZWUudGV4dHVyZTpbZWUudGV4dHVyZV07Zm9yKGxldCBUdD0wLG1uPVhlLmxlbmd0aDtUdDxtbjtUdCsrKXtsZXQgcWU9WGVbVHRdO2lmKGsocWUsVykpe2xldCB3bj1lZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLHluPWkuZ2V0KHFlKS5fX3dlYmdsVGV4dHVyZTtlLmJpbmRUZXh0dXJlKHduLHluKSxaKHduKSxlLnVuYmluZFRleHR1cmUoKX19fSx0aGlzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKGVlKXtpZihlZS51c2VSZW5kZXJidWZmZXIpaWYoYSl7bGV0IFc9ZWUud2lkdGgsWGU9ZWUuaGVpZ2h0LFR0PTE2Mzg0LG1uPVszNjA2NF0scWU9ZWUuc3RlbmNpbEJ1ZmZlcj8zMzMwNjozNjA5NjtlZS5kZXB0aEJ1ZmZlciYmbW4ucHVzaChxZSksZWUuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHl8fChlZS5kZXB0aEJ1ZmZlciYmKFR0fD0yNTYpLGVlLnN0ZW5jaWxCdWZmZXImJihUdHw9MTAyNCkpO2xldCB3bj1pLmdldChlZSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYwMDgsd24uX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSx3bi5fX3dlYmdsRnJhbWVidWZmZXIpLGVlLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5JiYobi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsW3FlXSksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW3FlXSkpLG4uYmxpdEZyYW1lYnVmZmVyKDAsMCxXLFhlLDAsMCxXLFhlLFR0LDk3MjgpLG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LG1uKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSx3bi5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9LHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcj14dCx0aGlzLnNldHVwRnJhbWVCdWZmZXJUZXh0dXJlPXB0LHRoaXMuc2FmZVNldFRleHR1cmUyRD1mdW5jdGlvbihlZSxXKXtlZSYmZWUuaXNXZWJHTFJlbmRlclRhcmdldCYmKCExPT09b24mJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxvbj0hMCksZWU9ZWUudGV4dHVyZSksYWUoZWUsVyl9LHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZ1bmN0aW9uKGVlLFcpe2VlJiZlZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKCExPT09ZmkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksZmk9ITApLGVlPWVlLnRleHR1cmUpLHZlKGVlLFcpfX1mdW5jdGlvbiBmOWUobix0LGUpe2xldCBpPWUuaXNXZWJHTDI7cmV0dXJue2NvbnZlcnQ6ZnVuY3Rpb24obyxzPW51bGwpe2xldCBhO2lmKG89PT1fZilyZXR1cm4gNTEyMTtpZigxMDE3PT09bylyZXR1cm4gMzI4MTk7aWYoMTAxOD09PW8pcmV0dXJuIDMyODIwO2lmKDEwMTA9PT1vKXJldHVybiA1MTIwO2lmKDEwMTE9PT1vKXJldHVybiA1MTIyO2lmKG89PT1XUylyZXR1cm4gNTEyMztpZigxMDEzPT09bylyZXR1cm4gNTEyNDtpZigxMDE0PT09bylyZXR1cm4gNTEyNTtpZihvPT09VWcpcmV0dXJuIDUxMjY7aWYobz09PWxiKXJldHVybiBpPzUxMzE6KGE9dC5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxudWxsIT09YT9hLkhBTEZfRkxPQVRfT0VTOm51bGwpO2lmKDEwMjE9PT1vKXJldHVybiA2NDA2O2lmKG89PT1nYSlyZXR1cm4gNjQwODtpZigxMDI0PT09bylyZXR1cm4gNjQwOTtpZigxMDI1PT09bylyZXR1cm4gNjQxMDtpZihvPT09amcpcmV0dXJuIDY0MDI7aWYobz09PWhiKXJldHVybiAzNDA0MTtpZigxMDI4PT09bylyZXR1cm4gNjQwMztpZigxMDM1PT09bylyZXR1cm4gYT10LmdldCgiRVhUX3NSR0IiKSxudWxsIT09YT9hLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYoMTAyOT09PW8pcmV0dXJuIDM2MjQ0O2lmKDEwMzA9PT1vKXJldHVybiAzMzMxOTtpZigxMDMxPT09bylyZXR1cm4gMzMzMjA7aWYoMTAzMz09PW8pcmV0dXJuIDM2MjQ5O2lmKDMzNzc2PT09b3x8MzM3Nzc9PT1vfHwzMzc3OD09PW98fDMzNzc5PT09bylpZihzPT09V3Ipe2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjX3NyZ2IiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZigzMzc3Nj09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzc9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDFfRVhUO2lmKDMzNzc4PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX0VYVDtpZigzMzc3OT09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9FWFR9ZWxzZXtpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKDMzNzc2PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO2lmKDMzNzc3PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtpZigzMzc3OD09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7aWYoMzM3Nzk9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUfWlmKDM1ODQwPT09b3x8MzU4NDE9PT1vfHwzNTg0Mj09PW98fDM1ODQzPT09byl7aWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYoMzU4NDA9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYoMzU4NDE9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc7aWYoMzU4NDI9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HO2lmKDM1ODQzPT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31pZigzNjE5Nj09PW8pcmV0dXJuIGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIiksbnVsbCE9PWE/YS5DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOm51bGw7aWYoMzc0OTI9PT1vfHwzNzQ5Nj09PW8pe2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZigzNzQ5Mj09PW8pcmV0dXJuIHM9PT1Xcj9hLkNPTVBSRVNTRURfU1JHQjhfRVRDMjphLkNPTVBSRVNTRURfUkdCOF9FVEMyO2lmKDM3NDk2PT09bylyZXR1cm4gcz09PVdyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUM6YS5DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDfWlmKDM3ODA4PT09b3x8Mzc4MDk9PT1vfHwzNzgxMD09PW98fDM3ODExPT09b3x8Mzc4MTI9PT1vfHwzNzgxMz09PW98fDM3ODE0PT09b3x8Mzc4MTU9PT1vfHwzNzgxNj09PW98fDM3ODE3PT09b3x8Mzc4MTg9PT1vfHwzNzgxOT09PW98fDM3ODIwPT09b3x8Mzc4MjE9PT1vKXtpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YyIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKDM3ODA4PT09bylyZXR1cm4gcz09PVdyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjtpZigzNzgwOT09PW8pcmV0dXJuIHM9PT1Xcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NF9LSFI7aWYoMzc4MTA9PT1vKXJldHVybiBzPT09V3I/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSO2lmKDM3ODExPT09bylyZXR1cm4gcz09PVdyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjtpZigzNzgxMj09PW8pcmV0dXJuIHM9PT1Xcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4Nl9LSFI7aWYoMzc4MTM9PT1vKXJldHVybiBzPT09V3I/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDVfS0hSO2lmKDM3ODE0PT09bylyZXR1cm4gcz09PVdyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjtpZigzNzgxNT09PW8pcmV0dXJuIHM9PT1Xcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFI7aWYoMzc4MTY9PT1vKXJldHVybiBzPT09V3I/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFI7aWYoMzc4MTc9PT1vKXJldHVybiBzPT09V3I/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI7aWYoMzc4MTg9PT1vKXJldHVybiBzPT09V3I/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9LSFI7aWYoMzc4MTk9PT1vKXJldHVybiBzPT09V3I/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tIUjtpZigzNzgyMD09PW8pcmV0dXJuIHM9PT1Xcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSO2lmKDM3ODIxPT09bylyZXR1cm4gcz09PVdyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMl9LSFJ9aWYoMzY0OTI9PT1vKXtpZihhPXQuZ2V0KCJFWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9icHRjIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYoMzY0OTI9PT1vKXJldHVybiBzPT09V3I/YS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfQlBUQ19VTk9STV9FWFQ6YS5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STV9FWFR9cmV0dXJuIG89PT1jYj9pPzM0MDQyOihhPXQuZ2V0KCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksbnVsbCE9PWE/YS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTDpudWxsKTp2b2lkIDB9fX1oay5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDt2YXIgZms9Y2xhc3MgZXh0ZW5kcyBXc3tjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMuY2FtZXJhcz10fX07ZmsucHJvdG90eXBlLmlzQXJyYXlDYW1lcmE9ITA7dmFyIHpnPWNsYXNzIGV4dGVuZHMgWGl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iR3JvdXAifX07emcucHJvdG90eXBlLmlzR3JvdXA9ITA7dmFyIG05ZT17dHlwZToibW92ZSJ9LFVTPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fdGFyZ2V0UmF5PW51bGwsdGhpcy5fZ3JpcD1udWxsLHRoaXMuX2hhbmQ9bnVsbH1nZXRIYW5kU3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2hhbmQmJih0aGlzLl9oYW5kPW5ldyB6Zyx0aGlzLl9oYW5kLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5faGFuZC52aXNpYmxlPSExLHRoaXMuX2hhbmQuam9pbnRzPXt9LHRoaXMuX2hhbmQuaW5wdXRTdGF0ZT17cGluY2hpbmc6ITF9KSx0aGlzLl9oYW5kfWdldFRhcmdldFJheVNwYWNlKCl7cmV0dXJuIG51bGw9PT10aGlzLl90YXJnZXRSYXkmJih0aGlzLl90YXJnZXRSYXk9bmV3IHpnLHRoaXMuX3RhcmdldFJheS5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExLHRoaXMuX3RhcmdldFJheS5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl90YXJnZXRSYXkubGluZWFyVmVsb2NpdHk9bmV3IGllLHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgaWUpLHRoaXMuX3RhcmdldFJheX1nZXRHcmlwU3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwPW5ldyB6Zyx0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fZ3JpcC52aXNpYmxlPSExLHRoaXMuX2dyaXAuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5saW5lYXJWZWxvY2l0eT1uZXcgaWUsdGhpcy5fZ3JpcC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5hbmd1bGFyVmVsb2NpdHk9bmV3IGllKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIG51bGwhPT10aGlzLl90YXJnZXRSYXkmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLG51bGwhPT10aGlzLl9ncmlwJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksbnVsbCE9PXRoaXMuX2hhbmQmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSxudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLG51bGwhPT10aGlzLl9ncmlwJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSxudWxsIT09dGhpcy5faGFuZCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxlLGkpe2xldCByPW51bGwsbz1udWxsLHM9bnVsbCxhPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJiJ2aXNpYmxlLWJsdXJyZWQiIT09ZS5zZXNzaW9uLnZpc2liaWxpdHlTdGF0ZSlpZihudWxsIT09YSYmKHI9ZS5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsaSksbnVsbCE9PXImJihhLm1hdHJpeC5mcm9tQXJyYXkoci50cmFuc2Zvcm0ubWF0cml4KSxhLm1hdHJpeC5kZWNvbXBvc2UoYS5wb3NpdGlvbixhLnJvdGF0aW9uLGEuc2NhbGUpLHIubGluZWFyVmVsb2NpdHk/KGEuaGFzTGluZWFyVmVsb2NpdHk9ITAsYS5saW5lYXJWZWxvY2l0eS5jb3B5KHIubGluZWFyVmVsb2NpdHkpKTphLmhhc0xpbmVhclZlbG9jaXR5PSExLHIuYW5ndWxhclZlbG9jaXR5PyhhLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxhLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KHIuYW5ndWxhclZlbG9jaXR5KSk6YS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KG05ZSkpKSxjJiZ0LmhhbmQpe3M9ITA7Zm9yKGxldCBtIG9mIHQuaGFuZC52YWx1ZXMoKSl7bGV0IHg9ZS5nZXRKb2ludFBvc2UobSxpKTtpZih2b2lkIDA9PT1jLmpvaW50c1ttLmpvaW50TmFtZV0pe2xldCBiPW5ldyB6ZztiLm1hdHJpeEF1dG9VcGRhdGU9ITEsYi52aXNpYmxlPSExLGMuam9pbnRzW20uam9pbnROYW1lXT1iLGMuYWRkKGIpfWxldCBnPWMuam9pbnRzW20uam9pbnROYW1lXTtudWxsIT09eCYmKGcubWF0cml4LmZyb21BcnJheSh4LnRyYW5zZm9ybS5tYXRyaXgpLGcubWF0cml4LmRlY29tcG9zZShnLnBvc2l0aW9uLGcucm90YXRpb24sZy5zY2FsZSksZy5qb2ludFJhZGl1cz14LnJhZGl1cyksZy52aXNpYmxlPW51bGwhPT14fWxldCBwPWMuam9pbnRzWyJpbmRleC1maW5nZXItdGlwIl0ucG9zaXRpb24uZGlzdGFuY2VUbyhjLmpvaW50c1sidGh1bWItdGlwIl0ucG9zaXRpb24pLGg9LjAyLGY9LjAwNTtjLmlucHV0U3RhdGUucGluY2hpbmcmJnA+aCtmPyhjLmlucHV0U3RhdGUucGluY2hpbmc9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaGVuZCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSk6IWMuaW5wdXRTdGF0ZS5waW5jaGluZyYmcDw9aC1mJiYoYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSEwLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hzdGFydCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSl9ZWxzZSBudWxsIT09bCYmdC5ncmlwU3BhY2UmJihvPWUuZ2V0UG9zZSh0LmdyaXBTcGFjZSxpKSxudWxsIT09byYmKGwubWF0cml4LmZyb21BcnJheShvLnRyYW5zZm9ybS5tYXRyaXgpLGwubWF0cml4LmRlY29tcG9zZShsLnBvc2l0aW9uLGwucm90YXRpb24sbC5zY2FsZSksby5saW5lYXJWZWxvY2l0eT8obC5oYXNMaW5lYXJWZWxvY2l0eT0hMCxsLmxpbmVhclZlbG9jaXR5LmNvcHkoby5saW5lYXJWZWxvY2l0eSkpOmwuaGFzTGluZWFyVmVsb2NpdHk9ITEsby5hbmd1bGFyVmVsb2NpdHk/KGwuaGFzQW5ndWxhclZlbG9jaXR5PSEwLGwuYW5ndWxhclZlbG9jaXR5LmNvcHkoby5hbmd1bGFyVmVsb2NpdHkpKTpsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSkpO3JldHVybiBudWxsIT09YSYmKGEudmlzaWJsZT1udWxsIT09ciksbnVsbCE9PWwmJihsLnZpc2libGU9bnVsbCE9PW8pLG51bGwhPT1jJiYoYy52aXNpYmxlPW51bGwhPT1zKSx0aGlzfX0sJFM9Y2xhc3MgZXh0ZW5kcyBIb3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyx1KXtpZigodT12b2lkIDAhPT11P3U6amcpIT09amcmJnUhPT1oYil0aHJvdyBuZXcgRXJyb3IoIkRlcHRoVGV4dHVyZSBmb3JtYXQgbXVzdCBiZSBlaXRoZXIgVEhSRUUuRGVwdGhGb3JtYXQgb3IgVEhSRUUuRGVwdGhTdGVuY2lsRm9ybWF0Iik7dm9pZCAwPT09aSYmdT09PWpnJiYoaT1XUyksdm9pZCAwPT09aSYmdT09PWhiJiYoaT1jYiksc3VwZXIobnVsbCxyLG8scyxhLGwsdSxpLGMpLHRoaXMuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OmV9LHRoaXMubWFnRmlsdGVyPXZvaWQgMCE9PWE/YTpabyx0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1sP2w6Wm8sdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX19OyRTLnByb3RvdHlwZS5pc0RlcHRoVGV4dHVyZT0hMDt2YXIgeTg9Y2xhc3MgZXh0ZW5kcyBFcHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCk7bGV0IGk9dGhpcyxyPW51bGwsbz0xLHM9bnVsbCxhPSJsb2NhbC1mbG9vciIsbD10LmV4dGVuc2lvbnMuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSxjPW51bGwsdT1udWxsLGQ9bnVsbCxwPW51bGwsaD0hMSxmPW51bGwsbT1lLmdldENvbnRleHRBdHRyaWJ1dGVzKCkseD1udWxsLGc9bnVsbCxiPVtdLEQ9bmV3IE1hcCxUPW5ldyBXcztULmxheWVycy5lbmFibGUoMSksVC52aWV3cG9ydD1uZXcgYXI7bGV0IGs9bmV3IFdzO2subGF5ZXJzLmVuYWJsZSgyKSxrLnZpZXdwb3J0PW5ldyBhcjtsZXQgWj1bVCxrXSx6PW5ldyBmazt6LmxheWVycy5lbmFibGUoMSksei5sYXllcnMuZW5hYmxlKDIpO2xldCBmZT1udWxsLHVlPW51bGw7ZnVuY3Rpb24gaGUodmUpe2xldCBEZT1ELmdldCh2ZS5pbnB1dFNvdXJjZSk7RGUmJkRlLmRpc3BhdGNoRXZlbnQoe3R5cGU6dmUudHlwZSxkYXRhOnZlLmlucHV0U291cmNlfSl9ZnVuY3Rpb24gdygpe0QuZm9yRWFjaChmdW5jdGlvbih2ZSxEZSl7dmUuZGlzY29ubmVjdChEZSl9KSxELmNsZWFyKCksZmU9bnVsbCx1ZT1udWxsLHQuc2V0UmVuZGVyVGFyZ2V0KHgpLHA9bnVsbCxkPW51bGwsdT1udWxsLHI9bnVsbCxnPW51bGwsSWUuc3RvcCgpLGkuaXNQcmVzZW50aW5nPSExLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX1mdW5jdGlvbiBGKHZlKXtsZXQgRGU9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBudD0wO250PGIubGVuZ3RoO250KyspRC5zZXQoRGVbbnRdLGJbbnRdKTtmb3IobGV0IG50PTA7bnQ8dmUucmVtb3ZlZC5sZW5ndGg7bnQrKyl7bGV0IGd0PXZlLnJlbW92ZWRbbnRdLFVlPUQuZ2V0KGd0KTtVZSYmKFVlLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpndH0pLEQuZGVsZXRlKGd0KSl9Zm9yKGxldCBudD0wO250PHZlLmFkZGVkLmxlbmd0aDtudCsrKXtsZXQgZ3Q9dmUuYWRkZWRbbnRdLFVlPUQuZ2V0KGd0KTtVZSYmVWUuZGlzcGF0Y2hFdmVudCh7dHlwZToiY29ubmVjdGVkIixkYXRhOmd0fSl9fXRoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKHZlKXtsZXQgRGU9Ylt2ZV07cmV0dXJuIHZvaWQgMD09PURlJiYoRGU9bmV3IFVTLGJbdmVdPURlKSxEZS5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKHZlKXtsZXQgRGU9Ylt2ZV07cmV0dXJuIHZvaWQgMD09PURlJiYoRGU9bmV3IFVTLGJbdmVdPURlKSxEZS5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKHZlKXtsZXQgRGU9Ylt2ZV07cmV0dXJuIHZvaWQgMD09PURlJiYoRGU9bmV3IFVTLGJbdmVdPURlKSxEZS5nZXRIYW5kU3BhY2UoKX0sdGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKHZlKXtvPXZlLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKHZlKXthPXZlLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIHJlZmVyZW5jZSBzcGFjZSB0eXBlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuZ2V0UmVmZXJlbmNlU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gc30sdGhpcy5nZXRCYXNlTGF5ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PWQ/ZDpwfSx0aGlzLmdldEJpbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdX0sdGhpcy5nZXRGcmFtZT1mdW5jdGlvbigpe3JldHVybiBmfSx0aGlzLmdldFNlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gcn0sdGhpcy5zZXRTZXNzaW9uPWFzeW5jIGZ1bmN0aW9uKHZlKXtpZihyPXZlLG51bGwhPT1yKXtpZih4PXQuZ2V0UmVuZGVyVGFyZ2V0KCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3QiLGhlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixoZSksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLGhlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemUiLGhlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsaGUpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsaGUpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZW5kIix3KSxyLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0c291cmNlc2NoYW5nZSIsRiksITAhPT1tLnhyQ29tcGF0aWJsZSYmYXdhaXQgZS5tYWtlWFJDb21wYXRpYmxlKCksdm9pZCAwPT09ci5yZW5kZXJTdGF0ZS5sYXllcnN8fCExPT09dC5jYXBhYmlsaXRpZXMuaXNXZWJHTDIpcD1uZXcgWFJXZWJHTExheWVyKHIsZSx7YW50aWFsaWFzOnZvaWQgMCE9PXIucmVuZGVyU3RhdGUubGF5ZXJzfHxtLmFudGlhbGlhcyxhbHBoYTptLmFscGhhLGRlcHRoOm0uZGVwdGgsc3RlbmNpbDptLnN0ZW5jaWwsZnJhbWVidWZmZXJTY2FsZUZhY3RvcjpvfSksci51cGRhdGVSZW5kZXJTdGF0ZSh7YmFzZUxheWVyOnB9KSxnPW5ldyBXYShwLmZyYW1lYnVmZmVyV2lkdGgscC5mcmFtZWJ1ZmZlckhlaWdodCx7Zm9ybWF0OmdhLHR5cGU6X2YsZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pO2Vsc2V7aD1tLmFudGlhbGlhcztsZXQgRGU9bnVsbCxudD1udWxsLGd0PW51bGw7bS5kZXB0aCYmKGd0PW0uc3RlbmNpbD8zNTA1NjozMzE5MCxEZT1tLnN0ZW5jaWw/aGI6amcsbnQ9bS5zdGVuY2lsP2NiOldTKTtsZXQgVWU9e2NvbG9yRm9ybWF0OnQub3V0cHV0RW5jb2Rpbmc9PT1Xcj8zNTkwNzozMjg1NixkZXB0aEZvcm1hdDpndCxzY2FsZUZhY3RvcjpvfTt1PW5ldyBYUldlYkdMQmluZGluZyhyLGUpLGQ9dS5jcmVhdGVQcm9qZWN0aW9uTGF5ZXIoVWUpLHIudXBkYXRlUmVuZGVyU3RhdGUoe2xheWVyczpbZF19KSxnPWg/bmV3IFhTKGQudGV4dHVyZVdpZHRoLGQudGV4dHVyZUhlaWdodCx7Zm9ybWF0OmdhLHR5cGU6X2YsZGVwdGhUZXh0dXJlOm5ldyAkUyhkLnRleHR1cmVXaWR0aCxkLnRleHR1cmVIZWlnaHQsbnQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsRGUpLHN0ZW5jaWxCdWZmZXI6bS5zdGVuY2lsLGlnbm9yZURlcHRoOmQuaWdub3JlRGVwdGhWYWx1ZXMsdXNlUmVuZGVyVG9UZXh0dXJlOmwsZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pOm5ldyBXYShkLnRleHR1cmVXaWR0aCxkLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpnYSx0eXBlOl9mLGRlcHRoVGV4dHVyZTpuZXcgJFMoZC50ZXh0dXJlV2lkdGgsZC50ZXh0dXJlSGVpZ2h0LG50LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLERlKSxzdGVuY2lsQnVmZmVyOm0uc3RlbmNpbCxpZ25vcmVEZXB0aDpkLmlnbm9yZURlcHRoVmFsdWVzLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1nLmlzWFJSZW5kZXJUYXJnZXQ9ITAsdGhpcy5zZXRGb3ZlYXRpb24oMSkscz1hd2FpdCByLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShhKSxJZS5zZXRDb250ZXh0KHIpLEllLnN0YXJ0KCksaS5pc1ByZXNlbnRpbmc9ITAsaS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uc3RhcnQifSl9fTtsZXQgcT1uZXcgaWUsSz1uZXcgaWU7ZnVuY3Rpb24gWSh2ZSxEZSl7bnVsbD09PURlP3ZlLm1hdHJpeFdvcmxkLmNvcHkodmUubWF0cml4KTp2ZS5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKERlLm1hdHJpeFdvcmxkLHZlLm1hdHJpeCksdmUubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodmUubWF0cml4V29ybGQpLmludmVydCgpfXRoaXMudXBkYXRlQ2FtZXJhPWZ1bmN0aW9uKHZlKXtpZihudWxsPT09cilyZXR1cm47ei5uZWFyPWsubmVhcj1ULm5lYXI9dmUubmVhcix6LmZhcj1rLmZhcj1ULmZhcj12ZS5mYXIsKGZlIT09ei5uZWFyfHx1ZSE9PXouZmFyKSYmKHIudXBkYXRlUmVuZGVyU3RhdGUoe2RlcHRoTmVhcjp6Lm5lYXIsZGVwdGhGYXI6ei5mYXJ9KSxmZT16Lm5lYXIsdWU9ei5mYXIpO2xldCBEZT12ZS5wYXJlbnQsbnQ9ei5jYW1lcmFzO1koeixEZSk7Zm9yKGxldCBVZT0wO1VlPG50Lmxlbmd0aDtVZSsrKVkobnRbVWVdLERlKTt6Lm1hdHJpeFdvcmxkLmRlY29tcG9zZSh6LnBvc2l0aW9uLHoucXVhdGVybmlvbix6LnNjYWxlKSx2ZS5wb3NpdGlvbi5jb3B5KHoucG9zaXRpb24pLHZlLnF1YXRlcm5pb24uY29weSh6LnF1YXRlcm5pb24pLHZlLnNjYWxlLmNvcHkoei5zY2FsZSksdmUubWF0cml4LmNvcHkoei5tYXRyaXgpLHZlLm1hdHJpeFdvcmxkLmNvcHkoei5tYXRyaXhXb3JsZCk7bGV0IGd0PXZlLmNoaWxkcmVuO2ZvcihsZXQgVWU9MCxBZT1ndC5sZW5ndGg7VWU8QWU7VWUrKylndFtVZV0udXBkYXRlTWF0cml4V29ybGQoITApOzI9PT1udC5sZW5ndGg/ZnVuY3Rpb24odmUsRGUsbnQpe3Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKERlLm1hdHJpeFdvcmxkKSxLLnNldEZyb21NYXRyaXhQb3NpdGlvbihudC5tYXRyaXhXb3JsZCk7bGV0IGd0PXEuZGlzdGFuY2VUbyhLKSxVZT1EZS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLEFlPW50LnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsdG49VWVbMTRdLyhVZVsxMF0tMSkscHQ9VWVbMTRdLyhVZVsxMF0rMSksd3Q9KFVlWzldKzEpL1VlWzVdLFRlPShVZVs5XS0xKS9VZVs1XSx4dD0oVWVbOF0tMSkvVWVbMF0sbXQ9KEFlWzhdKzEpL0FlWzBdLGNlPXRuKnh0LGR0PXRuKm10LFdlPWd0LygteHQrbXQpLE10PVdlKi14dDtEZS5tYXRyaXhXb3JsZC5kZWNvbXBvc2UodmUucG9zaXRpb24sdmUucXVhdGVybmlvbix2ZS5zY2FsZSksdmUudHJhbnNsYXRlWChNdCksdmUudHJhbnNsYXRlWihXZSksdmUubWF0cml4V29ybGQuY29tcG9zZSh2ZS5wb3NpdGlvbix2ZS5xdWF0ZXJuaW9uLHZlLnNjYWxlKSx2ZS5tYXRyaXhXb3JsZEludmVyc2UuY29weSh2ZS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7bGV0IGJ0PXRuK1dlLGhuPXB0K1dlO3ZlLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKGNlLU10LGR0KyhndC1NdCksd3QqcHQvaG4qYnQsVGUqcHQvaG4qYnQsYnQsaG4pfSh6LFQsayk6ei5wcm9qZWN0aW9uTWF0cml4LmNvcHkoVC5wcm9qZWN0aW9uTWF0cml4KX0sdGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gen0sdGhpcy5nZXRGb3ZlYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PWQ/ZC5maXhlZEZvdmVhdGlvbjpudWxsIT09cD9wLmZpeGVkRm92ZWF0aW9uOnZvaWQgMH0sdGhpcy5zZXRGb3ZlYXRpb249ZnVuY3Rpb24odmUpe251bGwhPT1kJiYoZC5maXhlZEZvdmVhdGlvbj12ZSksbnVsbCE9PXAmJnZvaWQgMCE9PXAuZml4ZWRGb3ZlYXRpb24mJihwLmZpeGVkRm92ZWF0aW9uPXZlKX07bGV0IGFlPW51bGwsSWU9bmV3IGtkZTtJZS5zZXRBbmltYXRpb25Mb29wKGZ1bmN0aW9uKHZlLERlKXtpZihjPURlLmdldFZpZXdlclBvc2UocyksZj1EZSxudWxsIT09Yyl7bGV0IGd0PWMudmlld3M7bnVsbCE9PXAmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKGcscC5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQoZykpO2xldCBVZT0hMTtndC5sZW5ndGghPT16LmNhbWVyYXMubGVuZ3RoJiYoei5jYW1lcmFzLmxlbmd0aD0wLFVlPSEwKTtmb3IobGV0IEFlPTA7QWU8Z3QubGVuZ3RoO0FlKyspe2xldCB0bj1ndFtBZV0scHQ9bnVsbDtpZihudWxsIT09cClwdD1wLmdldFZpZXdwb3J0KHRuKTtlbHNle2xldCBUZT11LmdldFZpZXdTdWJJbWFnZShkLHRuKTtwdD1UZS52aWV3cG9ydCwwPT09QWUmJih0LnNldFJlbmRlclRhcmdldFRleHR1cmVzKGcsVGUuY29sb3JUZXh0dXJlLGQuaWdub3JlRGVwdGhWYWx1ZXM/dm9pZCAwOlRlLmRlcHRoU3RlbmNpbFRleHR1cmUpLHQuc2V0UmVuZGVyVGFyZ2V0KGcpKX1sZXQgd3Q9WltBZV07d3QubWF0cml4LmZyb21BcnJheSh0bi50cmFuc2Zvcm0ubWF0cml4KSx3dC5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheSh0bi5wcm9qZWN0aW9uTWF0cml4KSx3dC52aWV3cG9ydC5zZXQocHQueCxwdC55LHB0LndpZHRoLHB0LmhlaWdodCksMD09PUFlJiZ6Lm1hdHJpeC5jb3B5KHd0Lm1hdHJpeCksITA9PT1VZSYmei5jYW1lcmFzLnB1c2god3QpfX1sZXQgbnQ9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBndD0wO2d0PGIubGVuZ3RoO2d0KyspYltndF0udXBkYXRlKG50W2d0XSxEZSxzKTthZSYmYWUodmUsRGUpLGY9bnVsbH0pLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbih2ZSl7YWU9dmV9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe319fTtmdW5jdGlvbiBnOWUobil7ZnVuY3Rpb24gaShnLGIpe2cub3BhY2l0eS52YWx1ZT1iLm9wYWNpdHksYi5jb2xvciYmZy5kaWZmdXNlLnZhbHVlLmNvcHkoYi5jb2xvciksYi5lbWlzc2l2ZSYmZy5lbWlzc2l2ZS52YWx1ZS5jb3B5KGIuZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKGIuZW1pc3NpdmVJbnRlbnNpdHkpLGIubWFwJiYoZy5tYXAudmFsdWU9Yi5tYXApLGIuYWxwaGFNYXAmJihnLmFscGhhTWFwLnZhbHVlPWIuYWxwaGFNYXApLGIuc3BlY3VsYXJNYXAmJihnLnNwZWN1bGFyTWFwLnZhbHVlPWIuc3BlY3VsYXJNYXApLGIuYWxwaGFUZXN0PjAmJihnLmFscGhhVGVzdC52YWx1ZT1iLmFscGhhVGVzdCk7bGV0IFQsayxEPW4uZ2V0KGIpLmVudk1hcDtEJiYoZy5lbnZNYXAudmFsdWU9RCxnLmZsaXBFbnZNYXAudmFsdWU9RC5pc0N1YmVUZXh0dXJlJiYhMT09PUQuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEsZy5yZWZsZWN0aXZpdHkudmFsdWU9Yi5yZWZsZWN0aXZpdHksZy5pb3IudmFsdWU9Yi5pb3IsZy5yZWZyYWN0aW9uUmF0aW8udmFsdWU9Yi5yZWZyYWN0aW9uUmF0aW8pLGIubGlnaHRNYXAmJihnLmxpZ2h0TWFwLnZhbHVlPWIubGlnaHRNYXAsZy5saWdodE1hcEludGVuc2l0eS52YWx1ZT1iLmxpZ2h0TWFwSW50ZW5zaXR5KSxiLmFvTWFwJiYoZy5hb01hcC52YWx1ZT1iLmFvTWFwLGcuYW9NYXBJbnRlbnNpdHkudmFsdWU9Yi5hb01hcEludGVuc2l0eSksYi5tYXA/VD1iLm1hcDpiLnNwZWN1bGFyTWFwP1Q9Yi5zcGVjdWxhck1hcDpiLmRpc3BsYWNlbWVudE1hcD9UPWIuZGlzcGxhY2VtZW50TWFwOmIubm9ybWFsTWFwP1Q9Yi5ub3JtYWxNYXA6Yi5idW1wTWFwP1Q9Yi5idW1wTWFwOmIucm91Z2huZXNzTWFwP1Q9Yi5yb3VnaG5lc3NNYXA6Yi5tZXRhbG5lc3NNYXA/VD1iLm1ldGFsbmVzc01hcDpiLmFscGhhTWFwP1Q9Yi5hbHBoYU1hcDpiLmVtaXNzaXZlTWFwP1Q9Yi5lbWlzc2l2ZU1hcDpiLmNsZWFyY29hdE1hcD9UPWIuY2xlYXJjb2F0TWFwOmIuY2xlYXJjb2F0Tm9ybWFsTWFwP1Q9Yi5jbGVhcmNvYXROb3JtYWxNYXA6Yi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/VD1iLmNsZWFyY29hdFJvdWdobmVzc01hcDpiLnNwZWN1bGFySW50ZW5zaXR5TWFwP1Q9Yi5zcGVjdWxhckludGVuc2l0eU1hcDpiLnNwZWN1bGFyQ29sb3JNYXA/VD1iLnNwZWN1bGFyQ29sb3JNYXA6Yi50cmFuc21pc3Npb25NYXA/VD1iLnRyYW5zbWlzc2lvbk1hcDpiLnRoaWNrbmVzc01hcD9UPWIudGhpY2tuZXNzTWFwOmIuc2hlZW5Db2xvck1hcD9UPWIuc2hlZW5Db2xvck1hcDpiLnNoZWVuUm91Z2huZXNzTWFwJiYoVD1iLnNoZWVuUm91Z2huZXNzTWFwKSx2b2lkIDAhPT1UJiYoVC5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoVD1ULnRleHR1cmUpLCEwPT09VC5tYXRyaXhBdXRvVXBkYXRlJiZULnVwZGF0ZU1hdHJpeCgpLGcudXZUcmFuc2Zvcm0udmFsdWUuY29weShULm1hdHJpeCkpLGIuYW9NYXA/az1iLmFvTWFwOmIubGlnaHRNYXAmJihrPWIubGlnaHRNYXApLHZvaWQgMCE9PWsmJihrLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihrPWsudGV4dHVyZSksITA9PT1rLm1hdHJpeEF1dG9VcGRhdGUmJmsudXBkYXRlTWF0cml4KCksZy51djJUcmFuc2Zvcm0udmFsdWUuY29weShrLm1hdHJpeCkpfWZ1bmN0aW9uIGQoZyxiKXtnLnJvdWdobmVzcy52YWx1ZT1iLnJvdWdobmVzcyxnLm1ldGFsbmVzcy52YWx1ZT1iLm1ldGFsbmVzcyxiLnJvdWdobmVzc01hcCYmKGcucm91Z2huZXNzTWFwLnZhbHVlPWIucm91Z2huZXNzTWFwKSxiLm1ldGFsbmVzc01hcCYmKGcubWV0YWxuZXNzTWFwLnZhbHVlPWIubWV0YWxuZXNzTWFwKSxiLmVtaXNzaXZlTWFwJiYoZy5lbWlzc2l2ZU1hcC52YWx1ZT1iLmVtaXNzaXZlTWFwKSxiLmJ1bXBNYXAmJihnLmJ1bXBNYXAudmFsdWU9Yi5idW1wTWFwLGcuYnVtcFNjYWxlLnZhbHVlPWIuYnVtcFNjYWxlLDE9PT1iLnNpZGUmJihnLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxiLm5vcm1hbE1hcCYmKGcubm9ybWFsTWFwLnZhbHVlPWIubm9ybWFsTWFwLGcubm9ybWFsU2NhbGUudmFsdWUuY29weShiLm5vcm1hbFNjYWxlKSwxPT09Yi5zaWRlJiZnLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxiLmRpc3BsYWNlbWVudE1hcCYmKGcuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWIuZGlzcGxhY2VtZW50TWFwLGcuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9Yi5kaXNwbGFjZW1lbnRTY2FsZSxnLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9Yi5kaXNwbGFjZW1lbnRCaWFzKSxuLmdldChiKS5lbnZNYXAmJihnLmVudk1hcEludGVuc2l0eS52YWx1ZT1iLmVudk1hcEludGVuc2l0eSl9cmV0dXJue3JlZnJlc2hGb2dVbmlmb3JtczpmdW5jdGlvbihnLGIpe2cuZm9nQ29sb3IudmFsdWUuY29weShiLmNvbG9yKSxiLmlzRm9nPyhnLmZvZ05lYXIudmFsdWU9Yi5uZWFyLGcuZm9nRmFyLnZhbHVlPWIuZmFyKTpiLmlzRm9nRXhwMiYmKGcuZm9nRGVuc2l0eS52YWx1ZT1iLmRlbnNpdHkpfSxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpmdW5jdGlvbihnLGIsRCxULGspe2IuaXNNZXNoQmFzaWNNYXRlcmlhbD9pKGcsYik6Yi5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGkoZyxiKSxmdW5jdGlvbihnLGIpe2IuZW1pc3NpdmVNYXAmJihnLmVtaXNzaXZlTWFwLnZhbHVlPWIuZW1pc3NpdmVNYXApfShnLGIpKTpiLmlzTWVzaFRvb25NYXRlcmlhbD8oaShnLGIpLGZ1bmN0aW9uKGcsYil7Yi5ncmFkaWVudE1hcCYmKGcuZ3JhZGllbnRNYXAudmFsdWU9Yi5ncmFkaWVudE1hcCksYi5lbWlzc2l2ZU1hcCYmKGcuZW1pc3NpdmVNYXAudmFsdWU9Yi5lbWlzc2l2ZU1hcCksYi5idW1wTWFwJiYoZy5idW1wTWFwLnZhbHVlPWIuYnVtcE1hcCxnLmJ1bXBTY2FsZS52YWx1ZT1iLmJ1bXBTY2FsZSwxPT09Yi5zaWRlJiYoZy5idW1wU2NhbGUudmFsdWUqPS0xKSksYi5ub3JtYWxNYXAmJihnLm5vcm1hbE1hcC52YWx1ZT1iLm5vcm1hbE1hcCxnLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoYi5ub3JtYWxTY2FsZSksMT09PWIuc2lkZSYmZy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksYi5kaXNwbGFjZW1lbnRNYXAmJihnLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1iLmRpc3BsYWNlbWVudE1hcCxnLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWIuZGlzcGxhY2VtZW50U2NhbGUsZy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWIuZGlzcGxhY2VtZW50Qmlhcyl9KGcsYikpOmIuaXNNZXNoUGhvbmdNYXRlcmlhbD8oaShnLGIpLGZ1bmN0aW9uKGcsYil7Zy5zcGVjdWxhci52YWx1ZS5jb3B5KGIuc3BlY3VsYXIpLGcuc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KGIuc2hpbmluZXNzLDFlLTQpLGIuZW1pc3NpdmVNYXAmJihnLmVtaXNzaXZlTWFwLnZhbHVlPWIuZW1pc3NpdmVNYXApLGIuYnVtcE1hcCYmKGcuYnVtcE1hcC52YWx1ZT1iLmJ1bXBNYXAsZy5idW1wU2NhbGUudmFsdWU9Yi5idW1wU2NhbGUsMT09PWIuc2lkZSYmKGcuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGIubm9ybWFsTWFwJiYoZy5ub3JtYWxNYXAudmFsdWU9Yi5ub3JtYWxNYXAsZy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGIubm9ybWFsU2NhbGUpLDE9PT1iLnNpZGUmJmcubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGIuZGlzcGxhY2VtZW50TWFwJiYoZy5kaXNwbGFjZW1lbnRNYXAudmFsdWU9Yi5kaXNwbGFjZW1lbnRNYXAsZy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1iLmRpc3BsYWNlbWVudFNjYWxlLGcuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1iLmRpc3BsYWNlbWVudEJpYXMpfShnLGIpKTpiLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkoZyxiKSxiLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZnVuY3Rpb24oZyxiLEQpe2QoZyxiKSxnLmlvci52YWx1ZT1iLmlvcixiLnNoZWVuPjAmJihnLnNoZWVuQ29sb3IudmFsdWUuY29weShiLnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKGIuc2hlZW4pLGcuc2hlZW5Sb3VnaG5lc3MudmFsdWU9Yi5zaGVlblJvdWdobmVzcyxiLnNoZWVuQ29sb3JNYXAmJihnLnNoZWVuQ29sb3JNYXAudmFsdWU9Yi5zaGVlbkNvbG9yTWFwKSxiLnNoZWVuUm91Z2huZXNzTWFwJiYoZy5zaGVlblJvdWdobmVzc01hcC52YWx1ZT1iLnNoZWVuUm91Z2huZXNzTWFwKSksYi5jbGVhcmNvYXQ+MCYmKGcuY2xlYXJjb2F0LnZhbHVlPWIuY2xlYXJjb2F0LGcuY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPWIuY2xlYXJjb2F0Um91Z2huZXNzLGIuY2xlYXJjb2F0TWFwJiYoZy5jbGVhcmNvYXRNYXAudmFsdWU9Yi5jbGVhcmNvYXRNYXApLGIuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYoZy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9Yi5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLGIuY2xlYXJjb2F0Tm9ybWFsTWFwJiYoZy5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KGIuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLGcuY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPWIuY2xlYXJjb2F0Tm9ybWFsTWFwLDE9PT1iLnNpZGUmJmcuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpKSxiLnRyYW5zbWlzc2lvbj4wJiYoZy50cmFuc21pc3Npb24udmFsdWU9Yi50cmFuc21pc3Npb24sZy50cmFuc21pc3Npb25TYW1wbGVyTWFwLnZhbHVlPUQudGV4dHVyZSxnLnRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnZhbHVlLnNldChELndpZHRoLEQuaGVpZ2h0KSxiLnRyYW5zbWlzc2lvbk1hcCYmKGcudHJhbnNtaXNzaW9uTWFwLnZhbHVlPWIudHJhbnNtaXNzaW9uTWFwKSxnLnRoaWNrbmVzcy52YWx1ZT1iLnRoaWNrbmVzcyxiLnRoaWNrbmVzc01hcCYmKGcudGhpY2tuZXNzTWFwLnZhbHVlPWIudGhpY2tuZXNzTWFwKSxnLmF0dGVudWF0aW9uRGlzdGFuY2UudmFsdWU9Yi5hdHRlbnVhdGlvbkRpc3RhbmNlLGcuYXR0ZW51YXRpb25Db2xvci52YWx1ZS5jb3B5KGIuYXR0ZW51YXRpb25Db2xvcikpLGcuc3BlY3VsYXJJbnRlbnNpdHkudmFsdWU9Yi5zcGVjdWxhckludGVuc2l0eSxnLnNwZWN1bGFyQ29sb3IudmFsdWUuY29weShiLnNwZWN1bGFyQ29sb3IpLGIuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJihnLnNwZWN1bGFySW50ZW5zaXR5TWFwLnZhbHVlPWIuc3BlY3VsYXJJbnRlbnNpdHlNYXApLGIuc3BlY3VsYXJDb2xvck1hcCYmKGcuc3BlY3VsYXJDb2xvck1hcC52YWx1ZT1iLnNwZWN1bGFyQ29sb3JNYXApfShnLGIsayk6ZChnLGIpKTpiLmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhpKGcsYiksZnVuY3Rpb24oZyxiKXtiLm1hdGNhcCYmKGcubWF0Y2FwLnZhbHVlPWIubWF0Y2FwKSxiLmJ1bXBNYXAmJihnLmJ1bXBNYXAudmFsdWU9Yi5idW1wTWFwLGcuYnVtcFNjYWxlLnZhbHVlPWIuYnVtcFNjYWxlLDE9PT1iLnNpZGUmJihnLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxiLm5vcm1hbE1hcCYmKGcubm9ybWFsTWFwLnZhbHVlPWIubm9ybWFsTWFwLGcubm9ybWFsU2NhbGUudmFsdWUuY29weShiLm5vcm1hbFNjYWxlKSwxPT09Yi5zaWRlJiZnLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxiLmRpc3BsYWNlbWVudE1hcCYmKGcuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWIuZGlzcGxhY2VtZW50TWFwLGcuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9Yi5kaXNwbGFjZW1lbnRTY2FsZSxnLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9Yi5kaXNwbGFjZW1lbnRCaWFzKX0oZyxiKSk6Yi5pc01lc2hEZXB0aE1hdGVyaWFsPyhpKGcsYiksZnVuY3Rpb24oZyxiKXtiLmRpc3BsYWNlbWVudE1hcCYmKGcuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWIuZGlzcGxhY2VtZW50TWFwLGcuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9Yi5kaXNwbGFjZW1lbnRTY2FsZSxnLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9Yi5kaXNwbGFjZW1lbnRCaWFzKX0oZyxiKSk6Yi5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhpKGcsYiksZnVuY3Rpb24oZyxiKXtiLmRpc3BsYWNlbWVudE1hcCYmKGcuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWIuZGlzcGxhY2VtZW50TWFwLGcuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9Yi5kaXNwbGFjZW1lbnRTY2FsZSxnLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9Yi5kaXNwbGFjZW1lbnRCaWFzKSxnLnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoYi5yZWZlcmVuY2VQb3NpdGlvbiksZy5uZWFyRGlzdGFuY2UudmFsdWU9Yi5uZWFyRGlzdGFuY2UsZy5mYXJEaXN0YW5jZS52YWx1ZT1iLmZhckRpc3RhbmNlfShnLGIpKTpiLmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhpKGcsYiksZnVuY3Rpb24oZyxiKXtiLmJ1bXBNYXAmJihnLmJ1bXBNYXAudmFsdWU9Yi5idW1wTWFwLGcuYnVtcFNjYWxlLnZhbHVlPWIuYnVtcFNjYWxlLDE9PT1iLnNpZGUmJihnLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxiLm5vcm1hbE1hcCYmKGcubm9ybWFsTWFwLnZhbHVlPWIubm9ybWFsTWFwLGcubm9ybWFsU2NhbGUudmFsdWUuY29weShiLm5vcm1hbFNjYWxlKSwxPT09Yi5zaWRlJiZnLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxiLmRpc3BsYWNlbWVudE1hcCYmKGcuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWIuZGlzcGxhY2VtZW50TWFwLGcuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9Yi5kaXNwbGFjZW1lbnRTY2FsZSxnLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9Yi5kaXNwbGFjZW1lbnRCaWFzKX0oZyxiKSk6Yi5pc0xpbmVCYXNpY01hdGVyaWFsPyhmdW5jdGlvbihnLGIpe2cuZGlmZnVzZS52YWx1ZS5jb3B5KGIuY29sb3IpLGcub3BhY2l0eS52YWx1ZT1iLm9wYWNpdHl9KGcsYiksYi5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmZnVuY3Rpb24oZyxiKXtnLmRhc2hTaXplLnZhbHVlPWIuZGFzaFNpemUsZy50b3RhbFNpemUudmFsdWU9Yi5kYXNoU2l6ZStiLmdhcFNpemUsZy5zY2FsZS52YWx1ZT1iLnNjYWxlfShnLGIpKTpiLmlzUG9pbnRzTWF0ZXJpYWw/ZnVuY3Rpb24oZyxiLEQsVCl7bGV0IGs7Zy5kaWZmdXNlLnZhbHVlLmNvcHkoYi5jb2xvciksZy5vcGFjaXR5LnZhbHVlPWIub3BhY2l0eSxnLnNpemUudmFsdWU9Yi5zaXplKkQsZy5zY2FsZS52YWx1ZT0uNSpULGIubWFwJiYoZy5tYXAudmFsdWU9Yi5tYXApLGIuYWxwaGFNYXAmJihnLmFscGhhTWFwLnZhbHVlPWIuYWxwaGFNYXApLGIuYWxwaGFUZXN0PjAmJihnLmFscGhhVGVzdC52YWx1ZT1iLmFscGhhVGVzdCksYi5tYXA/az1iLm1hcDpiLmFscGhhTWFwJiYoaz1iLmFscGhhTWFwKSx2b2lkIDAhPT1rJiYoITA9PT1rLm1hdHJpeEF1dG9VcGRhdGUmJmsudXBkYXRlTWF0cml4KCksZy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGsubWF0cml4KSl9KGcsYixELFQpOmIuaXNTcHJpdGVNYXRlcmlhbD9mdW5jdGlvbihnLGIpe2xldCBEO2cuZGlmZnVzZS52YWx1ZS5jb3B5KGIuY29sb3IpLGcub3BhY2l0eS52YWx1ZT1iLm9wYWNpdHksZy5yb3RhdGlvbi52YWx1ZT1iLnJvdGF0aW9uLGIubWFwJiYoZy5tYXAudmFsdWU9Yi5tYXApLGIuYWxwaGFNYXAmJihnLmFscGhhTWFwLnZhbHVlPWIuYWxwaGFNYXApLGIuYWxwaGFUZXN0PjAmJihnLmFscGhhVGVzdC52YWx1ZT1iLmFscGhhVGVzdCksYi5tYXA/RD1iLm1hcDpiLmFscGhhTWFwJiYoRD1iLmFscGhhTWFwKSx2b2lkIDAhPT1EJiYoITA9PT1ELm1hdHJpeEF1dG9VcGRhdGUmJkQudXBkYXRlTWF0cml4KCksZy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KEQubWF0cml4KSl9KGcsYik6Yi5pc1NoYWRvd01hdGVyaWFsPyhnLmNvbG9yLnZhbHVlLmNvcHkoYi5jb2xvciksZy5vcGFjaXR5LnZhbHVlPWIub3BhY2l0eSk6Yi5pc1NoYWRlck1hdGVyaWFsJiYoYi51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfX19ZnVuY3Rpb24gaXIobj17fSl7bGV0IHQ9dm9pZCAwIT09bi5jYW52YXM/bi5jYW52YXM6ZnVuY3Rpb24oKXtsZXQgbj1ZUygiY2FudmFzIik7cmV0dXJuIG4uc3R5bGUuZGlzcGxheT0iYmxvY2siLG59KCksZT12b2lkIDAhPT1uLmNvbnRleHQ/bi5jb250ZXh0Om51bGwsaT12b2lkIDAhPT1uLmFscGhhJiZuLmFscGhhLHI9dm9pZCAwPT09bi5kZXB0aHx8bi5kZXB0aCxvPXZvaWQgMD09PW4uc3RlbmNpbHx8bi5zdGVuY2lsLHM9dm9pZCAwIT09bi5hbnRpYWxpYXMmJm4uYW50aWFsaWFzLGE9dm9pZCAwPT09bi5wcmVtdWx0aXBsaWVkQWxwaGF8fG4ucHJlbXVsdGlwbGllZEFscGhhLGw9dm9pZCAwIT09bi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXImJm4ucHJlc2VydmVEcmF3aW5nQnVmZmVyLGM9dm9pZCAwIT09bi5wb3dlclByZWZlcmVuY2U/bi5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9dm9pZCAwIT09bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0JiZuLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQsZD1udWxsLHA9bnVsbCxoPVtdLGY9W107dGhpcy5kb21FbGVtZW50PXQsdGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9LHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuYXV0b0NsZWFyQ29sb3I9ITAsdGhpcy5hdXRvQ2xlYXJEZXB0aD0hMCx0aGlzLmF1dG9DbGVhclN0ZW5jaWw9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLmNsaXBwaW5nUGxhbmVzPVtdLHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ9ITEsdGhpcy5vdXRwdXRFbmNvZGluZz1iZix0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPSExLHRoaXMudG9uZU1hcHBpbmc9MCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgbT10aGlzLHg9ITEsZz0wLGI9MCxEPW51bGwsVD0tMSxrPW51bGwsWj1uZXcgYXIsej1uZXcgYXIsZmU9bnVsbCx1ZT10LndpZHRoLGhlPXQuaGVpZ2h0LHc9MSxGPW51bGwscT1udWxsLEs9bmV3IGFyKDAsMCx1ZSxoZSksZGU9bmV3IGFyKDAsMCx1ZSxoZSksWT0hMSxhZT1uZXcgZ2IsbGU9ITEsSWU9ITEsdmU9bnVsbCxEZT1uZXcgUm4sbnQ9bmV3IGllLGd0PXtiYWNrZ3JvdW5kOm51bGwsZm9nOm51bGwsZW52aXJvbm1lbnQ6bnVsbCxvdmVycmlkZU1hdGVyaWFsOm51bGwsaXNTY2VuZTohMH07ZnVuY3Rpb24gVWUoKXtyZXR1cm4gbnVsbD09PUQ/dzoxfWxldCBwdCx3dCxUZSx4dCxtdCxjZSxkdCxXZSxNdCxidCxobixvbixmaSxXaSxxaSxlZSxXLFhlLFR0LG1uLHFlLHduLHluLEFlPWU7ZnVuY3Rpb24gdG4oSSxYKXtmb3IobGV0ICQ9MDskPEkubGVuZ3RoOyQrKyl7bGV0IG1lPXQuZ2V0Q29udGV4dChJWyRdLFgpO2lmKG51bGwhPT1tZSlyZXR1cm4gbWV9cmV0dXJuIG51bGx9dHJ5e2xldCBJPXthbHBoYTohMCxkZXB0aDpyLHN0ZW5jaWw6byxhbnRpYWxpYXM6cyxwcmVtdWx0aXBsaWVkQWxwaGE6YSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6bCxwb3dlclByZWZlcmVuY2U6YyxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnV9O2lmKCJzZXRBdHRyaWJ1dGUiaW4gdCYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtZW5naW5lIiwidGhyZWUuanMgcjEzNyIpLHQuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsV24sITEpLHQuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLGdlLCExKSxudWxsPT09QWUpe2xldCBYPVsid2ViZ2wyIiwid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiXTtpZighMD09PW0uaXNXZWJHTDFSZW5kZXJlciYmWC5zaGlmdCgpLEFlPXRuKFgsSSksbnVsbD09PUFlKXRocm93IHRuKFgpP25ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dCB3aXRoIHlvdXIgc2VsZWN0ZWQgYXR0cmlidXRlcy4iKTpuZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQuIil9dm9pZCAwPT09QWUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0JiYoQWUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJue3JhbmdlTWluOjEscmFuZ2VNYXg6MSxwcmVjaXNpb246MX19KX1jYXRjaChJKXt0aHJvdyBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK0kubWVzc2FnZSksSX1mdW5jdGlvbiB6dCgpe3B0PW5ldyBWV2UoQWUpLHd0PW5ldyBPV2UoQWUscHQsbikscHQuaW5pdCh3dCksd249bmV3IGY5ZShBZSxwdCx3dCksVGU9bmV3IHA5ZShBZSxwdCx3dCkseHQ9bmV3IHpXZShBZSksbXQ9bmV3IHQ5ZSxjZT1uZXcgaDllKEFlLHB0LFRlLG10LHd0LHduLHh0KSxkdD1uZXcgRldlKG0pLFdlPW5ldyBCV2UobSksTXQ9bmV3IGlHZShBZSx3dCkseW49bmV3IFBXZShBZSxwdCxNdCx3dCksYnQ9bmV3IEhXZShBZSxNdCx4dCx5biksaG49bmV3IHFXZShBZSxidCxNdCx4dCksVHQ9bmV3IFdXZShBZSx3dCxjZSksZWU9bmV3IGtXZShtdCksb249bmV3IGU5ZShtLGR0LFdlLHB0LHd0LHluLGVlKSxmaT1uZXcgZzllKG10KSxXaT1uZXcgaTllLHFpPW5ldyBjOWUocHQsd3QpLFhlPW5ldyBJV2UobSxkdCxUZSxobixpLGEpLFc9bmV3IEdkZShtLGhuLHd0KSxtbj1uZXcgUldlKEFlLHB0LHh0LHd0KSxxZT1uZXcgVVdlKEFlLHB0LHh0LHd0KSx4dC5wcm9ncmFtcz1vbi5wcm9ncmFtcyxtLmNhcGFiaWxpdGllcz13dCxtLmV4dGVuc2lvbnM9cHQsbS5wcm9wZXJ0aWVzPW10LG0ucmVuZGVyTGlzdHM9V2ksbS5zaGFkb3dNYXA9VyxtLnN0YXRlPVRlLG0uaW5mbz14dH16dCgpO2xldCBVdD1uZXcgeTgobSxBZSk7ZnVuY3Rpb24gV24oSSl7SS5wcmV2ZW50RGVmYXVsdCgpLGNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIikseD0hMH1mdW5jdGlvbiBnZSgpe2NvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IFJlc3RvcmVkLiIpLHg9ITE7bGV0IEk9eHQuYXV0b1Jlc2V0LFg9Vy5lbmFibGVkLCQ9Vy5hdXRvVXBkYXRlLG5lPVcubmVlZHNVcGRhdGUsbWU9Vy50eXBlO3p0KCkseHQuYXV0b1Jlc2V0PUksVy5lbmFibGVkPVgsVy5hdXRvVXBkYXRlPSQsVy5uZWVkc1VwZGF0ZT1uZSxXLnR5cGU9bWV9ZnVuY3Rpb24gZm4oSSl7bGV0IFg9SS50YXJnZXQ7WC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixmbiksZnVuY3Rpb24oSSl7KGZ1bmN0aW9uKEkpe2xldCBYPW10LmdldChJKS5wcm9ncmFtczt2b2lkIDAhPT1YJiYoWC5mb3JFYWNoKGZ1bmN0aW9uKCQpe29uLnJlbGVhc2VQcm9ncmFtKCQpfSksSS5pc1NoYWRlck1hdGVyaWFsJiZvbi5yZWxlYXNlU2hhZGVyQ2FjaGUoSSkpfSkoSSksbXQucmVtb3ZlKEkpfShYKX10aGlzLnhyPVV0LHRoaXMuZ2V0Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBBZX0sdGhpcy5nZXRDb250ZXh0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBBZS5nZXRDb250ZXh0QXR0cmlidXRlcygpfSx0aGlzLmZvcmNlQ29udGV4dExvc3M9ZnVuY3Rpb24oKXtsZXQgST1wdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO0kmJkkubG9zZUNvbnRleHQoKX0sdGhpcy5mb3JjZUNvbnRleHRSZXN0b3JlPWZ1bmN0aW9uKCl7bGV0IEk9cHQuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtJJiZJLnJlc3RvcmVDb250ZXh0KCl9LHRoaXMuZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3JldHVybiB3fSx0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24oSSl7dm9pZCAwIT09SSYmKHc9SSx0aGlzLnNldFNpemUodWUsaGUsITEpKX0sdGhpcy5nZXRTaXplPWZ1bmN0aW9uKEkpe3JldHVybiBJLnNldCh1ZSxoZSl9LHRoaXMuc2V0U2l6ZT1mdW5jdGlvbihJLFgsJCl7VXQuaXNQcmVzZW50aW5nP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ2FuJ3QgY2hhbmdlIHNpemUgd2hpbGUgVlIgZGV2aWNlIGlzIHByZXNlbnRpbmcuIik6KHVlPUksaGU9WCx0LndpZHRoPU1hdGguZmxvb3IoSSp3KSx0LmhlaWdodD1NYXRoLmZsb29yKFgqdyksITEhPT0kJiYodC5zdHlsZS53aWR0aD1JKyJweCIsdC5zdHlsZS5oZWlnaHQ9WCsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxJLFgpKX0sdGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihJKXtyZXR1cm4gSS5zZXQodWUqdyxoZSp3KS5mbG9vcigpfSx0aGlzLnNldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKEksWCwkKXt1ZT1JLGhlPVgsdz0kLHQud2lkdGg9TWF0aC5mbG9vcihJKiQpLHQuaGVpZ2h0PU1hdGguZmxvb3IoWCokKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxJLFgpfSx0aGlzLmdldEN1cnJlbnRWaWV3cG9ydD1mdW5jdGlvbihJKXtyZXR1cm4gSS5jb3B5KFopfSx0aGlzLmdldFZpZXdwb3J0PWZ1bmN0aW9uKEkpe3JldHVybiBJLmNvcHkoSyl9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24oSSxYLCQsbmUpe0kuaXNWZWN0b3I0P0suc2V0KEkueCxJLnksSS56LEkudyk6Sy5zZXQoSSxYLCQsbmUpLFRlLnZpZXdwb3J0KFouY29weShLKS5tdWx0aXBseVNjYWxhcih3KS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yPWZ1bmN0aW9uKEkpe3JldHVybiBJLmNvcHkoZGUpfSx0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oSSxYLCQsbmUpe0kuaXNWZWN0b3I0P2RlLnNldChJLngsSS55LEkueixJLncpOmRlLnNldChJLFgsJCxuZSksVGUuc2Npc3Nvcih6LmNvcHkoZGUpLm11bHRpcGx5U2NhbGFyKHcpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIFl9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oSSl7VGUuc2V0U2Npc3NvclRlc3QoWT1JKX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKEkpe0Y9SX0sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24oSSl7cT1JfSx0aGlzLmdldENsZWFyQ29sb3I9ZnVuY3Rpb24oSSl7cmV0dXJuIEkuY29weShYZS5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtYZS5zZXRDbGVhckNvbG9yLmFwcGx5KFhlLGFyZ3VtZW50cyl9LHRoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBYZS5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe1hlLnNldENsZWFyQWxwaGEuYXBwbHkoWGUsYXJndW1lbnRzKX0sdGhpcy5jbGVhcj1mdW5jdGlvbihJLFgsJCl7bGV0IG5lPTA7KHZvaWQgMD09PUl8fEkpJiYobmV8PTE2Mzg0KSwodm9pZCAwPT09WHx8WCkmJihuZXw9MjU2KSwodm9pZCAwPT09JHx8JCkmJihuZXw9MTAyNCksQWUuY2xlYXIobmUpfSx0aGlzLmNsZWFyQ29sb3I9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCEwLCExLCExKX0sdGhpcy5jbGVhckRlcHRoPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMCwhMSl9LHRoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsV24sITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLGdlLCExKSxXaS5kaXNwb3NlKCkscWkuZGlzcG9zZSgpLG10LmRpc3Bvc2UoKSxkdC5kaXNwb3NlKCksV2UuZGlzcG9zZSgpLGhuLmRpc3Bvc2UoKSx5bi5kaXNwb3NlKCksb24uZGlzcG9zZSgpLFV0LmRpc3Bvc2UoKSxVdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLE1pKSxVdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixUciksdmUmJih2ZS5kaXNwb3NlKCksdmU9bnVsbCksRXMuc3RvcCgpfSx0aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihJLFgsJCxuZSxtZSxLZSl7bnVsbD09PVgmJihYPWd0KTtsZXQgbHQ9bWUuaXNNZXNoJiZtZS5tYXRyaXhXb3JsZC5kZXRlcm1pbmFudCgpPDAsSmU9ZnVuY3Rpb24oSSxYLCQsbmUsbWUpeyEwIT09WC5pc1NjZW5lJiYoWD1ndCksY2UucmVzZXRUZXh0dXJlVW5pdHMoKTtsZXQgS2U9WC5mb2csSmU9bnVsbD09PUQ/bS5vdXRwdXRFbmNvZGluZzohMD09PUQuaXNYUlJlbmRlclRhcmdldD9ELnRleHR1cmUuZW5jb2Rpbmc6YmYsZnQ9KG5lLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/V2U6ZHQpLmdldChuZS5lbnZNYXB8fChuZS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP1guZW52aXJvbm1lbnQ6bnVsbCkpLEN0PSEwPT09bmUudmVydGV4Q29sb3JzJiYhISQuYXR0cmlidXRlcy5jb2xvciYmND09PSQuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSxJdD0hIW5lLm5vcm1hbE1hcCYmISEkLmF0dHJpYnV0ZXMudGFuZ2VudCxOdD0hISQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLGJuPSEhJC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLHJyPSQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uPyQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLEFpPW5lLnRvbmVNYXBwZWQ/bS50b25lTWFwcGluZzowLE1uPW10LmdldChuZSksSG49cC5zdGF0ZS5saWdodHM7ITAhPT1sZXx8ITAhPT1JZSYmST09PWt8fGVlLnNldFN0YXRlKG5lLEksST09PWsmJm5lLmlkPT09VCk7bGV0IE90PSExO25lLnZlcnNpb249PT1Nbi5fX3ZlcnNpb24/KE1uLm5lZWRzTGlnaHRzJiZNbi5saWdodHNTdGF0ZVZlcnNpb24hPT1Ibi5zdGF0ZS52ZXJzaW9ufHxNbi5vdXRwdXRFbmNvZGluZyE9PUplfHxtZS5pc0luc3RhbmNlZE1lc2gmJiExPT09TW4uaW5zdGFuY2luZ3x8IW1lLmlzSW5zdGFuY2VkTWVzaCYmITA9PT1Nbi5pbnN0YW5jaW5nfHxtZS5pc1NraW5uZWRNZXNoJiYhMT09PU1uLnNraW5uaW5nfHwhbWUuaXNTa2lubmVkTWVzaCYmITA9PT1Nbi5za2lubmluZ3x8TW4uZW52TWFwIT09ZnR8fG5lLmZvZyYmTW4uZm9nIT09S2V8fHZvaWQgMCE9PU1uLm51bUNsaXBwaW5nUGxhbmVzJiYoTW4ubnVtQ2xpcHBpbmdQbGFuZXMhPT1lZS5udW1QbGFuZXN8fE1uLm51bUludGVyc2VjdGlvbiE9PWVlLm51bUludGVyc2VjdGlvbil8fE1uLnZlcnRleEFscGhhcyE9PUN0fHxNbi52ZXJ0ZXhUYW5nZW50cyE9PUl0fHxNbi5tb3JwaFRhcmdldHMhPT1OdHx8TW4ubW9ycGhOb3JtYWxzIT09Ym58fE1uLnRvbmVNYXBwaW5nIT09QWl8fCEwPT09d3QuaXNXZWJHTDImJk1uLm1vcnBoVGFyZ2V0c0NvdW50IT09cnIpJiYoT3Q9ITApOihPdD0hMCxNbi5fX3ZlcnNpb249bmUudmVyc2lvbik7bGV0IHdpPU1uLmN1cnJlbnRQcm9ncmFtOyEwPT09T3QmJih3aT1leChuZSxYLG1lKSk7bGV0IGFpPSExLFluPSExLCRuPSExLFl0PXdpLmdldFVuaWZvcm1zKCksWWk9TW4udW5pZm9ybXM7aWYoVGUudXNlUHJvZ3JhbSh3aS5wcm9ncmFtKSYmKGFpPSEwLFluPSEwLCRuPSEwKSxuZS5pZCE9PVQmJihUPW5lLmlkLFluPSEwKSxhaXx8ayE9PUkpe2lmKFl0LnNldFZhbHVlKEFlLCJwcm9qZWN0aW9uTWF0cml4IixJLnByb2plY3Rpb25NYXRyaXgpLHd0LmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJll0LnNldFZhbHVlKEFlLCJsb2dEZXB0aEJ1ZkZDIiwyLyhNYXRoLmxvZyhJLmZhcisxKS9NYXRoLkxOMikpLGshPT1JJiYoaz1JLFluPSEwLCRuPSEwKSxuZS5pc1NoYWRlck1hdGVyaWFsfHxuZS5pc01lc2hQaG9uZ01hdGVyaWFsfHxuZS5pc01lc2hUb29uTWF0ZXJpYWx8fG5lLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fG5lLmVudk1hcCl7bGV0IEFuPVl0Lm1hcC5jYW1lcmFQb3NpdGlvbjt2b2lkIDAhPT1BbiYmQW4uc2V0VmFsdWUoQWUsbnQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEkubWF0cml4V29ybGQpKX0obmUuaXNNZXNoUGhvbmdNYXRlcmlhbHx8bmUuaXNNZXNoVG9vbk1hdGVyaWFsfHxuZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fG5lLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fG5lLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fG5lLmlzU2hhZGVyTWF0ZXJpYWwpJiZZdC5zZXRWYWx1ZShBZSwiaXNPcnRob2dyYXBoaWMiLCEwPT09SS5pc09ydGhvZ3JhcGhpY0NhbWVyYSksKG5lLmlzTWVzaFBob25nTWF0ZXJpYWx8fG5lLmlzTWVzaFRvb25NYXRlcmlhbHx8bmUuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxuZS5pc01lc2hCYXNpY01hdGVyaWFsfHxuZS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxuZS5pc1NoYWRlck1hdGVyaWFsfHxuZS5pc1NoYWRvd01hdGVyaWFsfHxtZS5pc1NraW5uZWRNZXNoKSYmWXQuc2V0VmFsdWUoQWUsInZpZXdNYXRyaXgiLEkubWF0cml4V29ybGRJbnZlcnNlKX1pZihtZS5pc1NraW5uZWRNZXNoKXtZdC5zZXRPcHRpb25hbChBZSxtZSwiYmluZE1hdHJpeCIpLFl0LnNldE9wdGlvbmFsKEFlLG1lLCJiaW5kTWF0cml4SW52ZXJzZSIpO2xldCBBbj1tZS5za2VsZXRvbjtBbiYmKHd0LmZsb2F0VmVydGV4VGV4dHVyZXM/KG51bGw9PT1Bbi5ib25lVGV4dHVyZSYmQW4uY29tcHV0ZUJvbmVUZXh0dXJlKCksWXQuc2V0VmFsdWUoQWUsImJvbmVUZXh0dXJlIixBbi5ib25lVGV4dHVyZSxjZSksWXQuc2V0VmFsdWUoQWUsImJvbmVUZXh0dXJlU2l6ZSIsQW4uYm9uZVRleHR1cmVTaXplKSk6WXQuc2V0T3B0aW9uYWwoQWUsQW4sImJvbmVNYXRyaWNlcyIpKX1yZXR1cm4hISQmJih2b2lkIDAhPT0kLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbnx8dm9pZCAwIT09JC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsKSYmVHQudXBkYXRlKG1lLCQsbmUsd2kpLChZbnx8TW4ucmVjZWl2ZVNoYWRvdyE9PW1lLnJlY2VpdmVTaGFkb3cpJiYoTW4ucmVjZWl2ZVNoYWRvdz1tZS5yZWNlaXZlU2hhZG93LFl0LnNldFZhbHVlKEFlLCJyZWNlaXZlU2hhZG93IixtZS5yZWNlaXZlU2hhZG93KSksWW4mJihZdC5zZXRWYWx1ZShBZSwidG9uZU1hcHBpbmdFeHBvc3VyZSIsbS50b25lTWFwcGluZ0V4cG9zdXJlKSxNbi5uZWVkc0xpZ2h0cyYmZnVuY3Rpb24oSSxYKXtJLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlPVgsSS5saWdodFByb2JlLm5lZWRzVXBkYXRlPVgsSS5kaXJlY3Rpb25hbExpZ2h0cy5uZWVkc1VwZGF0ZT1YLEkuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9WCxJLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPVgsSS5wb2ludExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1YLEkuc3BvdExpZ2h0cy5uZWVkc1VwZGF0ZT1YLEkuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1YLEkucmVjdEFyZWFMaWdodHMubmVlZHNVcGRhdGU9WCxJLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGU9WH0oWWksJG4pLEtlJiZuZS5mb2cmJmZpLnJlZnJlc2hGb2dVbmlmb3JtcyhZaSxLZSksZmkucmVmcmVzaE1hdGVyaWFsVW5pZm9ybXMoWWksbmUsdyxoZSx2ZSkseWYudXBsb2FkKEFlLE1uLnVuaWZvcm1zTGlzdCxZaSxjZSkpLG5lLmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09bmUudW5pZm9ybXNOZWVkVXBkYXRlJiYoeWYudXBsb2FkKEFlLE1uLnVuaWZvcm1zTGlzdCxZaSxjZSksbmUudW5pZm9ybXNOZWVkVXBkYXRlPSExKSxuZS5pc1Nwcml0ZU1hdGVyaWFsJiZZdC5zZXRWYWx1ZShBZSwiY2VudGVyIixtZS5jZW50ZXIpLFl0LnNldFZhbHVlKEFlLCJtb2RlbFZpZXdNYXRyaXgiLG1lLm1vZGVsVmlld01hdHJpeCksWXQuc2V0VmFsdWUoQWUsIm5vcm1hbE1hdHJpeCIsbWUubm9ybWFsTWF0cml4KSxZdC5zZXRWYWx1ZShBZSwibW9kZWxNYXRyaXgiLG1lLm1hdHJpeFdvcmxkKSx3aX0oSSxYLCQsbmUsbWUpO1RlLnNldE1hdGVyaWFsKG5lLGx0KTtsZXQgZnQ9JC5pbmRleCxDdD0kLmF0dHJpYnV0ZXMucG9zaXRpb247aWYobnVsbD09PWZ0KXtpZih2b2lkIDA9PT1DdHx8MD09PUN0LmNvdW50KXJldHVybn1lbHNlIGlmKDA9PT1mdC5jb3VudClyZXR1cm47bGV0IEl0PTE7ITA9PT1uZS53aXJlZnJhbWUmJihmdD1idC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUoJCksSXQ9MikseW4uc2V0dXAobWUsbmUsSmUsJCxmdCk7bGV0IE50LGJuPW1uO251bGwhPT1mdCYmKE50PU10LmdldChmdCksYm49cWUsYm4uc2V0SW5kZXgoTnQpKTtsZXQgcnI9bnVsbCE9PWZ0P2Z0LmNvdW50OkN0LmNvdW50LEFpPSQuZHJhd1JhbmdlLnN0YXJ0Kkl0LE1uPSQuZHJhd1JhbmdlLmNvdW50Kkl0LEhuPW51bGwhPT1LZT9LZS5zdGFydCpJdDowLE90PW51bGwhPT1LZT9LZS5jb3VudCpJdDoxLzAsd2k9TWF0aC5tYXgoQWksSG4pLGFpPU1hdGgubWluKHJyLEFpK01uLEhuK090KS0xLFluPU1hdGgubWF4KDAsYWktd2krMSk7aWYoMCE9PVluKXtpZihtZS5pc01lc2gpITA9PT1uZS53aXJlZnJhbWU/KFRlLnNldExpbmVXaWR0aChuZS53aXJlZnJhbWVMaW5ld2lkdGgqVWUoKSksYm4uc2V0TW9kZSgxKSk6Ym4uc2V0TW9kZSg0KTtlbHNlIGlmKG1lLmlzTGluZSl7bGV0ICRuPW5lLmxpbmV3aWR0aDt2b2lkIDA9PT0kbiYmKCRuPTEpLFRlLnNldExpbmVXaWR0aCgkbipVZSgpKSxibi5zZXRNb2RlKG1lLmlzTGluZVNlZ21lbnRzPzE6bWUuaXNMaW5lTG9vcD8yOjMpfWVsc2UgbWUuaXNQb2ludHM/Ym4uc2V0TW9kZSgwKTptZS5pc1Nwcml0ZSYmYm4uc2V0TW9kZSg0KTtpZihtZS5pc0luc3RhbmNlZE1lc2gpYm4ucmVuZGVySW5zdGFuY2VzKHdpLFluLG1lLmNvdW50KTtlbHNlIGlmKCQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSl7bGV0ICRuPU1hdGgubWluKCQuaW5zdGFuY2VDb3VudCwkLl9tYXhJbnN0YW5jZUNvdW50KTtibi5yZW5kZXJJbnN0YW5jZXMod2ksWW4sJG4pfWVsc2UgYm4ucmVuZGVyKHdpLFluKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbihJLFgpe3A9cWkuZ2V0KEkpLHAuaW5pdCgpLGYucHVzaChwKSxJLnRyYXZlcnNlVmlzaWJsZShmdW5jdGlvbigkKXskLmlzTGlnaHQmJiQubGF5ZXJzLnRlc3QoWC5sYXllcnMpJiYocC5wdXNoTGlnaHQoJCksJC5jYXN0U2hhZG93JiZwLnB1c2hTaGFkb3coJCkpfSkscC5zZXR1cExpZ2h0cyhtLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSxJLnRyYXZlcnNlKGZ1bmN0aW9uKCQpe2xldCBuZT0kLm1hdGVyaWFsO2lmKG5lKWlmKEFycmF5LmlzQXJyYXkobmUpKWZvcihsZXQgbWU9MDttZTxuZS5sZW5ndGg7bWUrKylleChuZVttZV0sSSwkKTtlbHNlIGV4KG5lLEksJCl9KSxmLnBvcCgpLHA9bnVsbH07bGV0IFplPW51bGw7ZnVuY3Rpb24gTWkoKXtFcy5zdG9wKCl9ZnVuY3Rpb24gVHIoKXtFcy5zdGFydCgpfWxldCBFcz1uZXcga2RlO2Z1bmN0aW9uIEJyKEksWCwkLG5lKXtpZighMT09PUkudmlzaWJsZSlyZXR1cm47aWYoSS5sYXllcnMudGVzdChYLmxheWVycykpaWYoSS5pc0dyb3VwKSQ9SS5yZW5kZXJPcmRlcjtlbHNlIGlmKEkuaXNMT0QpITA9PT1JLmF1dG9VcGRhdGUmJkkudXBkYXRlKFgpO2Vsc2UgaWYoSS5pc0xpZ2h0KXAucHVzaExpZ2h0KEkpLEkuY2FzdFNoYWRvdyYmcC5wdXNoU2hhZG93KEkpO2Vsc2UgaWYoSS5pc1Nwcml0ZSl7aWYoIUkuZnJ1c3R1bUN1bGxlZHx8YWUuaW50ZXJzZWN0c1Nwcml0ZShJKSl7bmUmJm50LnNldEZyb21NYXRyaXhQb3NpdGlvbihJLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoRGUpO2xldCBsdD1obi51cGRhdGUoSSksSmU9SS5tYXRlcmlhbDtKZS52aXNpYmxlJiZkLnB1c2goSSxsdCxKZSwkLG50LnosbnVsbCl9fWVsc2UgaWYoKEkuaXNNZXNofHxJLmlzTGluZXx8SS5pc1BvaW50cykmJihJLmlzU2tpbm5lZE1lc2gmJkkuc2tlbGV0b24uZnJhbWUhPT14dC5yZW5kZXIuZnJhbWUmJihJLnNrZWxldG9uLnVwZGF0ZSgpLEkuc2tlbGV0b24uZnJhbWU9eHQucmVuZGVyLmZyYW1lKSwhSS5mcnVzdHVtQ3VsbGVkfHxhZS5pbnRlcnNlY3RzT2JqZWN0KEkpKSl7bmUmJm50LnNldEZyb21NYXRyaXhQb3NpdGlvbihJLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoRGUpO2xldCBsdD1obi51cGRhdGUoSSksSmU9SS5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KEplKSl7bGV0IGZ0PWx0Lmdyb3Vwcztmb3IobGV0IEN0PTAsSXQ9ZnQubGVuZ3RoO0N0PEl0O0N0Kyspe2xldCBOdD1mdFtDdF0sYm49SmVbTnQubWF0ZXJpYWxJbmRleF07Ym4mJmJuLnZpc2libGUmJmQucHVzaChJLGx0LGJuLCQsbnQueixOdCl9fWVsc2UgSmUudmlzaWJsZSYmZC5wdXNoKEksbHQsSmUsJCxudC56LG51bGwpfWxldCBLZT1JLmNoaWxkcmVuO2ZvcihsZXQgbHQ9MCxKZT1LZS5sZW5ndGg7bHQ8SmU7bHQrKylCcihLZVtsdF0sWCwkLG5lKX1mdW5jdGlvbiBQbChJLFgsJCxuZSl7bGV0IG1lPUkub3BhcXVlLEtlPUkudHJhbnNtaXNzaXZlLGx0PUkudHJhbnNwYXJlbnQ7cC5zZXR1cExpZ2h0c1ZpZXcoJCksS2UubGVuZ3RoPjAmJmZ1bmN0aW9uKEksWCwkKXtudWxsPT09dmUmJih2ZT1uZXcoITA9PT1zJiYhMD09PXd0LmlzV2ViR0wyP1hTOldhKSgxMDI0LDEwMjQse2dlbmVyYXRlTWlwbWFwczohMCx0eXBlOm51bGwhPT13bi5jb252ZXJ0KGxiKT9sYjpfZixtaW5GaWx0ZXI6MTAwOCxtYWdGaWx0ZXI6Wm8sd3JhcFM6RWwsd3JhcFQ6RWwsdXNlUmVuZGVyVG9UZXh0dXJlOnB0LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KSk7bGV0IG5lPW0uZ2V0UmVuZGVyVGFyZ2V0KCk7bS5zZXRSZW5kZXJUYXJnZXQodmUpLG0uY2xlYXIoKTtsZXQgbWU9bS50b25lTWFwcGluZzttLnRvbmVNYXBwaW5nPTAsYmMoSSxYLCQpLG0udG9uZU1hcHBpbmc9bWUsY2UudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQodmUpLGNlLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcCh2ZSksbS5zZXRSZW5kZXJUYXJnZXQobmUpfShtZSxYLCQpLG5lJiZUZS52aWV3cG9ydChaLmNvcHkobmUpKSxtZS5sZW5ndGg+MCYmYmMobWUsWCwkKSxLZS5sZW5ndGg+MCYmYmMoS2UsWCwkKSxsdC5sZW5ndGg+MCYmYmMobHQsWCwkKX1mdW5jdGlvbiBiYyhJLFgsJCl7bGV0IG5lPSEwPT09WC5pc1NjZW5lP1gub3ZlcnJpZGVNYXRlcmlhbDpudWxsO2ZvcihsZXQgbWU9MCxLZT1JLmxlbmd0aDttZTxLZTttZSsrKXtsZXQgbHQ9SVttZV0sSmU9bHQub2JqZWN0LGZ0PWx0Lmdlb21ldHJ5LEN0PW51bGw9PT1uZT9sdC5tYXRlcmlhbDpuZSxJdD1sdC5ncm91cDtKZS5sYXllcnMudGVzdCgkLmxheWVycykmJmlOKEplLFgsJCxmdCxDdCxJdCl9fWZ1bmN0aW9uIGlOKEksWCwkLG5lLG1lLEtlKXtJLm9uQmVmb3JlUmVuZGVyKG0sWCwkLG5lLG1lLEtlKSxJLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKCQubWF0cml4V29ybGRJbnZlcnNlLEkubWF0cml4V29ybGQpLEkubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChJLm1vZGVsVmlld01hdHJpeCksbWUub25CZWZvcmVSZW5kZXIobSxYLCQsbmUsSSxLZSksITA9PT1tZS50cmFuc3BhcmVudCYmMj09PW1lLnNpZGU/KG1lLnNpZGU9MSxtZS5uZWVkc1VwZGF0ZT0hMCxtLnJlbmRlckJ1ZmZlckRpcmVjdCgkLFgsbmUsbWUsSSxLZSksbWUuc2lkZT0wLG1lLm5lZWRzVXBkYXRlPSEwLG0ucmVuZGVyQnVmZmVyRGlyZWN0KCQsWCxuZSxtZSxJLEtlKSxtZS5zaWRlPTIpOm0ucmVuZGVyQnVmZmVyRGlyZWN0KCQsWCxuZSxtZSxJLEtlKSxJLm9uQWZ0ZXJSZW5kZXIobSxYLCQsbmUsbWUsS2UpfWZ1bmN0aW9uIGV4KEksWCwkKXshMCE9PVguaXNTY2VuZSYmKFg9Z3QpO2xldCBuZT1tdC5nZXQoSSksbWU9cC5zdGF0ZS5saWdodHMsbHQ9bWUuc3RhdGUudmVyc2lvbixKZT1vbi5nZXRQYXJhbWV0ZXJzKEksbWUuc3RhdGUscC5zdGF0ZS5zaGFkb3dzQXJyYXksWCwkKSxmdD1vbi5nZXRQcm9ncmFtQ2FjaGVLZXkoSmUpLEN0PW5lLnByb2dyYW1zO25lLmVudmlyb25tZW50PUkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9YLmVudmlyb25tZW50Om51bGwsbmUuZm9nPVguZm9nLG5lLmVudk1hcD0oSS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP1dlOmR0KS5nZXQoSS5lbnZNYXB8fG5lLmVudmlyb25tZW50KSx2b2lkIDA9PT1DdCYmKEkuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsZm4pLEN0PW5ldyBNYXAsbmUucHJvZ3JhbXM9Q3QpO2xldCBJdD1DdC5nZXQoZnQpO2lmKHZvaWQgMCE9PUl0KXtpZihuZS5jdXJyZW50UHJvZ3JhbT09PUl0JiZuZS5saWdodHNTdGF0ZVZlcnNpb249PT1sdClyZXR1cm4gRkUoSSxKZSksSXR9ZWxzZSBKZS51bmlmb3Jtcz1vbi5nZXRVbmlmb3JtcyhJKSxJLm9uQnVpbGQoJCxKZSxtKSxJLm9uQmVmb3JlQ29tcGlsZShKZSxtKSxJdD1vbi5hY3F1aXJlUHJvZ3JhbShKZSxmdCksQ3Quc2V0KGZ0LEl0KSxuZS51bmlmb3Jtcz1KZS51bmlmb3JtcztsZXQgTnQ9bmUudW5pZm9ybXM7KCFJLmlzU2hhZGVyTWF0ZXJpYWwmJiFJLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fCEwPT09SS5jbGlwcGluZykmJihOdC5jbGlwcGluZ1BsYW5lcz1lZS51bmlmb3JtKSxGRShJLEplKSxuZS5uZWVkc0xpZ2h0cz1mdW5jdGlvbihJKXtyZXR1cm4gSS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fEkuaXNNZXNoVG9vbk1hdGVyaWFsfHxJLmlzTWVzaFBob25nTWF0ZXJpYWx8fEkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8SS5pc1NoYWRvd01hdGVyaWFsfHxJLmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09SS5saWdodHN9KEkpLG5lLmxpZ2h0c1N0YXRlVmVyc2lvbj1sdCxuZS5uZWVkc0xpZ2h0cyYmKE50LmFtYmllbnRMaWdodENvbG9yLnZhbHVlPW1lLnN0YXRlLmFtYmllbnQsTnQubGlnaHRQcm9iZS52YWx1ZT1tZS5zdGF0ZS5wcm9iZSxOdC5kaXJlY3Rpb25hbExpZ2h0cy52YWx1ZT1tZS5zdGF0ZS5kaXJlY3Rpb25hbCxOdC5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy52YWx1ZT1tZS5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvdyxOdC5zcG90TGlnaHRzLnZhbHVlPW1lLnN0YXRlLnNwb3QsTnQuc3BvdExpZ2h0U2hhZG93cy52YWx1ZT1tZS5zdGF0ZS5zcG90U2hhZG93LE50LnJlY3RBcmVhTGlnaHRzLnZhbHVlPW1lLnN0YXRlLnJlY3RBcmVhLE50Lmx0Y18xLnZhbHVlPW1lLnN0YXRlLnJlY3RBcmVhTFRDMSxOdC5sdGNfMi52YWx1ZT1tZS5zdGF0ZS5yZWN0QXJlYUxUQzIsTnQucG9pbnRMaWdodHMudmFsdWU9bWUuc3RhdGUucG9pbnQsTnQucG9pbnRMaWdodFNoYWRvd3MudmFsdWU9bWUuc3RhdGUucG9pbnRTaGFkb3csTnQuaGVtaXNwaGVyZUxpZ2h0cy52YWx1ZT1tZS5zdGF0ZS5oZW1pLE50LmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPW1lLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwLE50LmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlPW1lLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LE50LnNwb3RTaGFkb3dNYXAudmFsdWU9bWUuc3RhdGUuc3BvdFNoYWRvd01hcCxOdC5zcG90U2hhZG93TWF0cml4LnZhbHVlPW1lLnN0YXRlLnNwb3RTaGFkb3dNYXRyaXgsTnQucG9pbnRTaGFkb3dNYXAudmFsdWU9bWUuc3RhdGUucG9pbnRTaGFkb3dNYXAsTnQucG9pbnRTaGFkb3dNYXRyaXgudmFsdWU9bWUuc3RhdGUucG9pbnRTaGFkb3dNYXRyaXgpO2xldCBibj1JdC5nZXRVbmlmb3JtcygpLHJyPXlmLnNlcVdpdGhWYWx1ZShibi5zZXEsTnQpO3JldHVybiBuZS5jdXJyZW50UHJvZ3JhbT1JdCxuZS51bmlmb3Jtc0xpc3Q9cnIsSXR9ZnVuY3Rpb24gRkUoSSxYKXtsZXQgJD1tdC5nZXQoSSk7JC5vdXRwdXRFbmNvZGluZz1YLm91dHB1dEVuY29kaW5nLCQuaW5zdGFuY2luZz1YLmluc3RhbmNpbmcsJC5za2lubmluZz1YLnNraW5uaW5nLCQubW9ycGhUYXJnZXRzPVgubW9ycGhUYXJnZXRzLCQubW9ycGhOb3JtYWxzPVgubW9ycGhOb3JtYWxzLCQubW9ycGhUYXJnZXRzQ291bnQ9WC5tb3JwaFRhcmdldHNDb3VudCwkLm51bUNsaXBwaW5nUGxhbmVzPVgubnVtQ2xpcHBpbmdQbGFuZXMsJC5udW1JbnRlcnNlY3Rpb249WC5udW1DbGlwSW50ZXJzZWN0aW9uLCQudmVydGV4QWxwaGFzPVgudmVydGV4QWxwaGFzLCQudmVydGV4VGFuZ2VudHM9WC52ZXJ0ZXhUYW5nZW50cywkLnRvbmVNYXBwaW5nPVgudG9uZU1hcHBpbmd9RXMuc2V0QW5pbWF0aW9uTG9vcChmdW5jdGlvbihJKXtaZSYmWmUoSSl9KSx0eXBlb2Ygd2luZG93PCJ1IiYmRXMuc2V0Q29udGV4dCh3aW5kb3cpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihJKXtaZT1JLFV0LnNldEFuaW1hdGlvbkxvb3AoSSksbnVsbD09PUk/RXMuc3RvcCgpOkVzLnN0YXJ0KCl9LFV0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsTWkpLFV0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLFRyKSx0aGlzLnJlbmRlcj1mdW5jdGlvbihJLFgpe2lmKHZvaWQgMD09PVh8fCEwPT09WC5pc0NhbWVyYSl7aWYoITAhPT14KXtpZighMD09PUkuYXV0b1VwZGF0ZSYmSS51cGRhdGVNYXRyaXhXb3JsZCgpLG51bGw9PT1YLnBhcmVudCYmWC51cGRhdGVNYXRyaXhXb3JsZCgpLCEwPT09VXQuZW5hYmxlZCYmITA9PT1VdC5pc1ByZXNlbnRpbmcmJighMD09PVV0LmNhbWVyYUF1dG9VcGRhdGUmJlV0LnVwZGF0ZUNhbWVyYShYKSxYPVV0LmdldENhbWVyYSgpKSwhMD09PUkuaXNTY2VuZSYmSS5vbkJlZm9yZVJlbmRlcihtLEksWCxEKSxwPXFpLmdldChJLGYubGVuZ3RoKSxwLmluaXQoKSxmLnB1c2gocCksRGUubXVsdGlwbHlNYXRyaWNlcyhYLnByb2plY3Rpb25NYXRyaXgsWC5tYXRyaXhXb3JsZEludmVyc2UpLGFlLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KERlKSxJZT10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLGxlPWVlLmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxJZSxYKSxkPVdpLmdldChJLGgubGVuZ3RoKSxkLmluaXQoKSxoLnB1c2goZCksQnIoSSxYLDAsbS5zb3J0T2JqZWN0cyksZC5maW5pc2goKSwhMD09PW0uc29ydE9iamVjdHMmJmQuc29ydChGLHEpLCEwPT09bGUmJmVlLmJlZ2luU2hhZG93cygpLFcucmVuZGVyKHAuc3RhdGUuc2hhZG93c0FycmF5LEksWCksITA9PT1sZSYmZWUuZW5kU2hhZG93cygpLCEwPT09dGhpcy5pbmZvLmF1dG9SZXNldCYmdGhpcy5pbmZvLnJlc2V0KCksWGUucmVuZGVyKGQsSSkscC5zZXR1cExpZ2h0cyhtLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSxYLmlzQXJyYXlDYW1lcmEpe2xldCBuZT1YLmNhbWVyYXM7Zm9yKGxldCBtZT0wLEtlPW5lLmxlbmd0aDttZTxLZTttZSsrKXtsZXQgbHQ9bmVbbWVdO1BsKGQsSSxsdCxsdC52aWV3cG9ydCl9fWVsc2UgUGwoZCxJLFgpO251bGwhPT1EJiYoY2UudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoRCksY2UudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKEQpKSwhMD09PUkuaXNTY2VuZSYmSS5vbkFmdGVyUmVuZGVyKG0sSSxYKSxUZS5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLFRlLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCksVGUuYnVmZmVycy5jb2xvci5zZXRNYXNrKCEwKSxUZS5zZXRQb2x5Z29uT2Zmc2V0KCExKSx5bi5yZXNldERlZmF1bHRTdGF0ZSgpLFQ9LTEsaz1udWxsLGYucG9wKCkscD1mLmxlbmd0aD4wP2ZbZi5sZW5ndGgtMV06bnVsbCxoLnBvcCgpLGQ9aC5sZW5ndGg+MD9oW2gubGVuZ3RoLTFdOm51bGx9fWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXI6IGNhbWVyYSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQ2FtZXJhLiIpfSx0aGlzLmdldEFjdGl2ZUN1YmVGYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGd9LHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gRH0sdGhpcy5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcz1mdW5jdGlvbihJLFgsJCl7bXQuZ2V0KEkudGV4dHVyZSkuX193ZWJnbFRleHR1cmU9WCxtdC5nZXQoSS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlPSQ7bGV0IG5lPW10LmdldChJKTtuZS5fX2hhc0V4dGVybmFsVGV4dHVyZXM9ITAsbmUuX19oYXNFeHRlcm5hbFRleHR1cmVzJiYobmUuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcj12b2lkIDA9PT0kLG5lLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fEkudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxJLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxJLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKEksWCl7bGV0ICQ9bXQuZ2V0KEkpOyQuX193ZWJnbEZyYW1lYnVmZmVyPVgsJC5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlcj12b2lkIDA9PT1YfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihJLFg9MCwkPTApe0Q9SSxnPVgsYj0kO2xldCBuZT0hMDtpZihJKXtsZXQgZnQ9bXQuZ2V0KEkpO3ZvaWQgMCE9PWZ0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyPyhUZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksbmU9ITEpOnZvaWQgMD09PWZ0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcj9jZS5zZXR1cFJlbmRlclRhcmdldChJKTpmdC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJmNlLnJlYmluZFRleHR1cmVzKEksbXQuZ2V0KEkudGV4dHVyZSkuX193ZWJnbFRleHR1cmUsbXQuZ2V0KEkuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSl9bGV0IG1lPW51bGwsS2U9ITEsbHQ9ITE7aWYoSSl7bGV0IGZ0PUkudGV4dHVyZTsoZnQuaXNEYXRhVGV4dHVyZTNEfHxmdC5pc0RhdGFUZXh0dXJlMkRBcnJheSkmJihsdD0hMCk7bGV0IEN0PW10LmdldChJKS5fX3dlYmdsRnJhbWVidWZmZXI7SS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8obWU9Q3RbWF0sS2U9ITApOm1lPUkudXNlUmVuZGVyYnVmZmVyP210LmdldChJKS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI6Q3QsWi5jb3B5KEkudmlld3BvcnQpLHouY29weShJLnNjaXNzb3IpLGZlPUkuc2Npc3NvclRlc3R9ZWxzZSBaLmNvcHkoSykubXVsdGlwbHlTY2FsYXIodykuZmxvb3IoKSx6LmNvcHkoZGUpLm11bHRpcGx5U2NhbGFyKHcpLmZsb29yKCksZmU9WTtpZihUZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbWUpJiZ3dC5kcmF3QnVmZmVycyYmbmUmJlRlLmRyYXdCdWZmZXJzKEksbWUpLFRlLnZpZXdwb3J0KFopLFRlLnNjaXNzb3IoeiksVGUuc2V0U2Npc3NvclRlc3QoZmUpLEtlKXtsZXQgZnQ9bXQuZ2V0KEkudGV4dHVyZSk7QWUuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzQwNjkrWCxmdC5fX3dlYmdsVGV4dHVyZSwkKX1lbHNlIGlmKGx0KXtsZXQgZnQ9bXQuZ2V0KEkudGV4dHVyZSk7QWUuZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoMzYxNjAsMzYwNjQsZnQuX193ZWJnbFRleHR1cmUsJHx8MCxYfHwwKX1UPS0xfSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24oSSxYLCQsbmUsbWUsS2UsbHQpe2lmKCFJfHwhSS5pc1dlYkdMUmVuZGVyVGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBUSFJFRS5XZWJHTFJlbmRlclRhcmdldC4iKTtsZXQgSmU9bXQuZ2V0KEkpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihJLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZ2b2lkIDAhPT1sdCYmKEplPUplW2x0XSksSmUpe1RlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxKZSk7dHJ5e2xldCBmdD1JLnRleHR1cmUsQ3Q9ZnQuZm9ybWF0LEl0PWZ0LnR5cGU7aWYoQ3QhPT1nYSYmd24uY29udmVydChDdCkhPT1BZS5nZXRQYXJhbWV0ZXIoMzU3MzkpKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpO2xldCBOdD1JdD09PWxiJiYocHQuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8d3QuaXNXZWJHTDImJnB0LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZighKEl0PT09X2Z8fHduLmNvbnZlcnQoSXQpPT09QWUuZ2V0UGFyYW1ldGVyKDM1NzM4KXx8SXQ9PT1VZyYmKHd0LmlzV2ViR0wyfHxwdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fHB0LmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpfHxOdCkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpOzM2MDUzPT09QWUuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCk/WD49MCYmWDw9SS53aWR0aC1uZSYmJD49MCYmJDw9SS5oZWlnaHQtbWUmJkFlLnJlYWRQaXhlbHMoWCwkLG5lLG1lLHduLmNvbnZlcnQoQ3QpLHduLmNvbnZlcnQoSXQpLEtlKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlYWRQaXhlbHMgZnJvbSByZW5kZXJUYXJnZXQgZmFpbGVkLiBGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUuIil9ZmluYWxseXtsZXQgZnQ9bnVsbCE9PUQ/bXQuZ2V0KEQpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjpudWxsO1RlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxmdCl9fX0sdGhpcy5jb3B5RnJhbWVidWZmZXJUb1RleHR1cmU9ZnVuY3Rpb24oSSxYLCQ9MCl7aWYoITAhPT1YLmlzRnJhbWVidWZmZXJUZXh0dXJlKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IGNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZSgpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBGcmFtZWJ1ZmZlclRleHR1cmUuIik7bGV0IG5lPU1hdGgucG93KDIsLSQpLG1lPU1hdGguZmxvb3IoWC5pbWFnZS53aWR0aCpuZSksS2U9TWF0aC5mbG9vcihYLmltYWdlLmhlaWdodCpuZSk7Y2Uuc2V0VGV4dHVyZTJEKFgsMCksQWUuY29weVRleFN1YkltYWdlMkQoMzU1MywkLDAsMCxJLngsSS55LG1lLEtlKSxUZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmU9ZnVuY3Rpb24oSSxYLCQsbmU9MCl7bGV0IG1lPVguaW1hZ2Uud2lkdGgsS2U9WC5pbWFnZS5oZWlnaHQsbHQ9d24uY29udmVydCgkLmZvcm1hdCksSmU9d24uY29udmVydCgkLnR5cGUpO2NlLnNldFRleHR1cmUyRCgkLDApLEFlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLEFlLnBpeGVsU3RvcmVpKDM3NDQxLCQucHJlbXVsdGlwbHlBbHBoYSksQWUucGl4ZWxTdG9yZWkoMzMxNywkLnVucGFja0FsaWdubWVudCksWC5pc0RhdGFUZXh0dXJlP0FlLnRleFN1YkltYWdlMkQoMzU1MyxuZSxJLngsSS55LG1lLEtlLGx0LEplLFguaW1hZ2UuZGF0YSk6WC5pc0NvbXByZXNzZWRUZXh0dXJlP0FlLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsbmUsSS54LEkueSxYLm1pcG1hcHNbMF0ud2lkdGgsWC5taXBtYXBzWzBdLmhlaWdodCxsdCxYLm1pcG1hcHNbMF0uZGF0YSk6QWUudGV4U3ViSW1hZ2UyRCgzNTUzLG5lLEkueCxJLnksbHQsSmUsWC5pbWFnZSksMD09PW5lJiYkLmdlbmVyYXRlTWlwbWFwcyYmQWUuZ2VuZXJhdGVNaXBtYXAoMzU1MyksVGUudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q9ZnVuY3Rpb24oSSxYLCQsbmUsbWU9MCl7aWYobS5pc1dlYkdMMVJlbmRlcmVyKXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2xldCBJdCxLZT1JLm1heC54LUkubWluLngrMSxsdD1JLm1heC55LUkubWluLnkrMSxKZT1JLm1heC56LUkubWluLnorMSxmdD13bi5jb252ZXJ0KG5lLmZvcm1hdCksQ3Q9d24uY29udmVydChuZS50eXBlKTtpZihuZS5pc0RhdGFUZXh0dXJlM0QpY2Uuc2V0VGV4dHVyZTNEKG5lLDApLEl0PTMyODc5O2Vsc2V7aWYoIW5lLmlzRGF0YVRleHR1cmUyREFycmF5KXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBvbmx5IHN1cHBvcnRzIFRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheS4iKTtjZS5zZXRUZXh0dXJlMkRBcnJheShuZSwwKSxJdD0zNTg2Nn1BZS5waXhlbFN0b3JlaSgzNzQ0MCxuZS5mbGlwWSksQWUucGl4ZWxTdG9yZWkoMzc0NDEsbmUucHJlbXVsdGlwbHlBbHBoYSksQWUucGl4ZWxTdG9yZWkoMzMxNyxuZS51bnBhY2tBbGlnbm1lbnQpO2xldCBOdD1BZS5nZXRQYXJhbWV0ZXIoMzMxNCksYm49QWUuZ2V0UGFyYW1ldGVyKDMyODc4KSxycj1BZS5nZXRQYXJhbWV0ZXIoMzMxNiksQWk9QWUuZ2V0UGFyYW1ldGVyKDMzMTUpLE1uPUFlLmdldFBhcmFtZXRlcigzMjg3NyksSG49JC5pc0NvbXByZXNzZWRUZXh0dXJlPyQubWlwbWFwc1swXTokLmltYWdlO0FlLnBpeGVsU3RvcmVpKDMzMTQsSG4ud2lkdGgpLEFlLnBpeGVsU3RvcmVpKDMyODc4LEhuLmhlaWdodCksQWUucGl4ZWxTdG9yZWkoMzMxNixJLm1pbi54KSxBZS5waXhlbFN0b3JlaSgzMzE1LEkubWluLnkpLEFlLnBpeGVsU3RvcmVpKDMyODc3LEkubWluLnopLCQuaXNEYXRhVGV4dHVyZXx8JC5pc0RhdGFUZXh0dXJlM0Q/QWUudGV4U3ViSW1hZ2UzRChJdCxtZSxYLngsWC55LFgueixLZSxsdCxKZSxmdCxDdCxIbi5kYXRhKTokLmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksQWUuY29tcHJlc3NlZFRleFN1YkltYWdlM0QoSXQsbWUsWC54LFgueSxYLnosS2UsbHQsSmUsZnQsSG4uZGF0YSkpOkFlLnRleFN1YkltYWdlM0QoSXQsbWUsWC54LFgueSxYLnosS2UsbHQsSmUsZnQsQ3QsSG4pLEFlLnBpeGVsU3RvcmVpKDMzMTQsTnQpLEFlLnBpeGVsU3RvcmVpKDMyODc4LGJuKSxBZS5waXhlbFN0b3JlaSgzMzE2LHJyKSxBZS5waXhlbFN0b3JlaSgzMzE1LEFpKSxBZS5waXhlbFN0b3JlaSgzMjg3NyxNbiksMD09PW1lJiZuZS5nZW5lcmF0ZU1pcG1hcHMmJkFlLmdlbmVyYXRlTWlwbWFwKEl0KSxUZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuaW5pdFRleHR1cmU9ZnVuY3Rpb24oSSl7Y2Uuc2V0VGV4dHVyZTJEKEksMCksVGUudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXtnPTAsYj0wLEQ9bnVsbCxUZS5yZXNldCgpLHluLnJlc2V0KCl9LHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX188InUiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1pci5wcm90b3R5cGUuaXNXZWJHTFJlbmRlcmVyPSEwLGNsYXNzIGV4dGVuZHMgaXJ7fS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgZUU9Y2xhc3N7Y29uc3RydWN0b3IodCxlPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgdm4odCksdGhpcy5kZW5zaXR5PWV9Y2xvbmUoKXtyZXR1cm4gbmV3IGVFKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtlRS5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciB0RT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MSxpPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IHZuKHQpLHRoaXMubmVhcj1lLHRoaXMuZmFyPWl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRFKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTt0RS5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIHZiPWNsYXNzIGV4dGVuZHMgWGl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksbnVsbCE9PXQuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksbnVsbCE9PXQuZW52aXJvbm1lbnQmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksbnVsbCE9PXQuZm9nJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksbnVsbCE9PXQub3ZlcnJpZGVNYXRlcmlhbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gbnVsbCE9PXRoaXMuZm9nJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX07dmIucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIFlnPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLnVzYWdlPXFTLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9ZHUoKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuc3RyaWRlLGkqPWUuc3RyaWRlO2ZvcihsZXQgcj0wLG89dGhpcy5zdHJpZGU7cjxvO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31jbG9uZSh0KXt2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPWR1KCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IGU9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUsdGhpcy5zdHJpZGUpO3JldHVybiBpLnNldFVzYWdlKHRoaXMudXNhZ2UpLGl9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPWR1KCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07WWcucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIENvPW5ldyBpZSxYZz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyPSExKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXQsdGhpcy5pdGVtU2l6ZT1lLHRoaXMub2Zmc2V0PWksdGhpcy5ub3JtYWxpemVkPSEwPT09cn1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5kYXRhLmNvdW50fWdldCBhcnJheSgpe3JldHVybiB0aGlzLmRhdGEuYXJyYXl9c2V0IG5lZWRzVXBkYXRlKHQpe3RoaXMuZGF0YS5uZWVkc1VwZGF0ZT10fWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuZGF0YS5jb3VudDtlPGk7ZSsrKUNvLng9dGhpcy5nZXRYKGUpLENvLnk9dGhpcy5nZXRZKGUpLENvLno9dGhpcy5nZXRaKGUpLENvLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldFhZWihlLENvLngsQ28ueSxDby56KTtyZXR1cm4gdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylDby54PXRoaXMuZ2V0WChlKSxDby55PXRoaXMuZ2V0WShlKSxDby56PXRoaXMuZ2V0WihlKSxDby5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihlLENvLngsQ28ueSxDby56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspQ28ueD10aGlzLmdldFgoZSksQ28ueT10aGlzLmdldFkoZSksQ28uej10aGlzLmdldFooZSksQ28udHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXMuc2V0WFlaKGUsQ28ueCxDby55LENvLnopO3JldHVybiB0aGlzfXNldFgodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF09ZSx0aGlzfXNldFkodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXT1lLHRoaXN9c2V0Wih0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdPWUsdGhpc31zZXRXKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109ZSx0aGlzfWdldFgodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdfWdldFkodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV19Z2V0Wih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXX1nZXRXKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdfXNldFhZKHQsZSxpKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1pLHRoaXN9c2V0WFlaKHQsZSxpLHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzfXNldFhZWlcodCxlLGkscixvKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1pLHRoaXMuZGF0YS5hcnJheVt0KzJdPXIsdGhpcy5kYXRhLmFycmF5W3QrM109byx0aGlzfWNsb25lKHQpe2lmKHZvaWQgMD09PXQpe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS5jbG9uZSgpOiBDbG9uaW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPHRoaXMuY291bnQ7aSsrKXtsZXQgcj1pKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKyllLnB1c2godGhpcy5kYXRhLmFycmF5W3Irb10pfXJldHVybiBuZXcgWXIobmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IoZSksdGhpcy5pdGVtU2l6ZSx0aGlzLm5vcm1hbGl6ZWQpfXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLmNsb25lKHQpKSxuZXcgWGcodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdLHRoaXMuaXRlbVNpemUsdGhpcy5vZmZzZXQsdGhpcy5ub3JtYWxpemVkKX10b0pTT04odCl7aWYodm9pZCAwPT09dCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLnRvSlNPTigpOiBTZXJpYWxpemluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuIik7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0aGlzLmNvdW50O2krKyl7bGV0IHI9aSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0O2ZvcihsZXQgbz0wO288dGhpcy5pdGVtU2l6ZTtvKyspZS5wdXNoKHRoaXMuZGF0YS5hcnJheVtyK29dKX1yZXR1cm57aXRlbVNpemU6dGhpcy5pdGVtU2l6ZSx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTplLG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfX1yZXR1cm4gdm9pZCAwPT09dC5pbnRlcmxlYXZlZEJ1ZmZlcnMmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdm9pZCAwPT09dC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07WGcucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIG1rPWNsYXNzIGV4dGVuZHMgaHN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyB2bigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07bWsucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIGViLE9TPW5ldyBpZSx0Yj1uZXcgaWUsbmI9bmV3IGllLGliPW5ldyBhdCxrUz1uZXcgYXQsV2RlPW5ldyBSbix6Tz1uZXcgaWUsRlM9bmV3IGllLGpPPW5ldyBpZSxuZGU9bmV3IGF0LGU4PW5ldyBhdCxpZGU9bmV3IGF0O2Z1bmN0aW9uIEdPKG4sdCxlLGkscixvKXtpYi5zdWJWZWN0b3JzKG4sZSkuYWRkU2NhbGFyKC41KS5tdWx0aXBseShpKSx2b2lkIDAhPT1yPyhrUy54PW8qaWIueC1yKmliLnksa1MueT1yKmliLngrbyppYi55KTprUy5jb3B5KGliKSxuLmNvcHkodCksbi54Kz1rUy54LG4ueSs9a1MueSxuLmFwcGx5TWF0cml4NChXZGUpfShjbGFzcyBleHRlbmRzIFhpe2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLHZvaWQgMD09PWViKXtlYj1uZXcgbnI7bGV0IGU9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksaT1uZXcgWWcoZSw1KTtlYi5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxlYi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgWGcoaSwzLDAsITEpKSxlYi5zZXRBdHRyaWJ1dGUoInV2IixuZXcgWGcoaSwyLDMsITEpKX10aGlzLmdlb21ldHJ5PWViLHRoaXMubWF0ZXJpYWw9dm9pZCAwIT09dD90Om5ldyBtayx0aGlzLmNlbnRlcj1uZXcgYXQoLjUsLjUpfXJheWNhc3QodCxlKXtudWxsPT09dC5jYW1lcmEmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNwcml0ZTogIlJheWNhc3Rlci5jYW1lcmEiIG5lZWRzIHRvIGJlIHNldCBpbiBvcmRlciB0byByYXljYXN0IGFnYWluc3Qgc3ByaXRlcy4nKSx0Yi5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCksV2RlLmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLG5iLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmITE9PT10aGlzLm1hdGVyaWFsLnNpemVBdHRlbnVhdGlvbiYmdGIubXVsdGlwbHlTY2FsYXIoLW5iLnopO2xldCByLG8saT10aGlzLm1hdGVyaWFsLnJvdGF0aW9uOzAhPT1pJiYobz1NYXRoLmNvcyhpKSxyPU1hdGguc2luKGkpKTtsZXQgcz10aGlzLmNlbnRlcjtHTyh6Ty5zZXQoLS41LC0uNSwwKSxuYixzLHRiLHIsbyksR08oRlMuc2V0KC41LC0uNSwwKSxuYixzLHRiLHIsbyksR08oak8uc2V0KC41LC41LDApLG5iLHMsdGIscixvKSxuZGUuc2V0KDAsMCksZTguc2V0KDEsMCksaWRlLnNldCgxLDEpO2xldCBhPXQucmF5LmludGVyc2VjdFRyaWFuZ2xlKHpPLEZTLGpPLCExLE9TKTtpZihudWxsPT09YSYmKEdPKEZTLnNldCgtLjUsLjUsMCksbmIscyx0YixyLG8pLGU4LnNldCgwLDEpLGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoek8sak8sRlMsITEsT1MpLG51bGw9PT1hKSlyZXR1cm47bGV0IGw9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oT1MpO2w8dC5uZWFyfHxsPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOmwscG9pbnQ6T1MuY2xvbmUoKSx1djpsby5nZXRVVihPUyx6TyxGUyxqTyxuZGUsZTgsaWRlLG5ldyBhdCksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx2b2lkIDAhPT10LmNlbnRlciYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fSkucHJvdG90eXBlLmlzU3ByaXRlPSEwO3ZhciByZGU9bmV3IGllLG9kZT1uZXcgYXIsc2RlPW5ldyBhcix2OWU9bmV3IGllLGFkZT1uZXcgUm4sZ2s9Y2xhc3MgZXh0ZW5kcyBWb3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTa2lubmVkTWVzaCIsdGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiLHRoaXMuYmluZE1hdHJpeD1uZXcgUm4sdGhpcy5iaW5kTWF0cml4SW52ZXJzZT1uZXcgUm59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJpbmRNb2RlPXQuYmluZE1vZGUsdGhpcy5iaW5kTWF0cml4LmNvcHkodC5iaW5kTWF0cml4KSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodC5iaW5kTWF0cml4SW52ZXJzZSksdGhpcy5za2VsZXRvbj10LnNrZWxldG9uLHRoaXN9YmluZCh0LGUpe3RoaXMuc2tlbGV0b249dCx2b2lkIDA9PT1lJiYodGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCksdGhpcy5za2VsZXRvbi5jYWxjdWxhdGVJbnZlcnNlcygpLGU9dGhpcy5tYXRyaXhXb3JsZCksdGhpcy5iaW5kTWF0cml4LmNvcHkoZSksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KGUpLmludmVydCgpfXBvc2UoKXt0aGlzLnNrZWxldG9uLnBvc2UoKX1ub3JtYWxpemVTa2luV2VpZ2h0cygpe2xldCB0PW5ldyBhcixlPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0O2ZvcihsZXQgaT0wLHI9ZS5jb3VudDtpPHI7aSsrKXt0Lng9ZS5nZXRYKGkpLHQueT1lLmdldFkoaSksdC56PWUuZ2V0WihpKSx0Lnc9ZS5nZXRXKGkpO2xldCBvPTEvdC5tYW5oYXR0YW5MZW5ndGgoKTtvIT09MS8wP3QubXVsdGlwbHlTY2FsYXIobyk6dC5zZXQoMSwwLDAsMCksZS5zZXRYWVpXKGksdC54LHQueSx0LnosdC53KX19dXBkYXRlTWF0cml4V29ybGQodCl7c3VwZXIudXBkYXRlTWF0cml4V29ybGQodCksImF0dGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpOiJkZXRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLmJpbmRNYXRyaXgpLmludmVydCgpOmNvbnNvbGUud2FybigiVEhSRUUuU2tpbm5lZE1lc2g6IFVucmVjb2duaXplZCBiaW5kTW9kZTogIit0aGlzLmJpbmRNb2RlKX1ib25lVHJhbnNmb3JtKHQsZSl7bGV0IGk9dGhpcy5za2VsZXRvbixyPXRoaXMuZ2VvbWV0cnk7b2RlLmZyb21CdWZmZXJBdHRyaWJ1dGUoci5hdHRyaWJ1dGVzLnNraW5JbmRleCx0KSxzZGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxyZGUuY29weShlKS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4KSxlLnNldCgwLDAsMCk7Zm9yKGxldCBvPTA7bzw0O28rKyl7bGV0IHM9c2RlLmdldENvbXBvbmVudChvKTtpZigwIT09cyl7bGV0IGE9b2RlLmdldENvbXBvbmVudChvKTthZGUubXVsdGlwbHlNYXRyaWNlcyhpLmJvbmVzW2FdLm1hdHJpeFdvcmxkLGkuYm9uZUludmVyc2VzW2FdKSxlLmFkZFNjYWxlZFZlY3Rvcih2OWUuY29weShyZGUpLmFwcGx5TWF0cml4NChhZGUpLHMpfX1yZXR1cm4gZS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4SW52ZXJzZSl9fTtnay5wcm90b3R5cGUuaXNTa2lubmVkTWVzaD0hMCxjbGFzcyBleHRlbmRzIFhpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX0ucHJvdG90eXBlLmlzQm9uZT0hMCxjbGFzcyBleHRlbmRzIEhve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHIsbyxzLGEsbCxjPVpvLHU9Wm8sZCxwKXtzdXBlcihudWxsLHMsYSxsLGMsdSxyLG8sZCxwKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aX0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciBuRT1jbGFzcyBleHRlbmRzIFlye2NvbnN0cnVjdG9yKHQsZSxpLHI9MSl7Im51bWJlciI9PXR5cGVvZiBpJiYocj1pLGk9ITEsY29uc29sZS5lcnJvcigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgbm9ybWFsaXplZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQuIikpLHN1cGVyKHQsZSxpKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9cn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwLHR9fTtuRS5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGxkZT1uZXcgUm4sY2RlPW5ldyBSbixXTz1bXSxOUz1uZXcgVm87KGNsYXNzIGV4dGVuZHMgVm97Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsZSksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcgbkUobmV3IEZsb2F0MzJBcnJheSgxNippKSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1pLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSxudWxsIT09dC5pbnN0YW5jZUNvbG9yJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9Z2V0TWF0cml4QXQodCxlKXtlLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LDE2KnQpfXJheWNhc3QodCxlKXtsZXQgaT10aGlzLm1hdHJpeFdvcmxkLHI9dGhpcy5jb3VudDtpZihOUy5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LE5TLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsdm9pZCAwIT09TlMubWF0ZXJpYWwpZm9yKGxldCBvPTA7bzxyO28rKyl7dGhpcy5nZXRNYXRyaXhBdChvLGxkZSksY2RlLm11bHRpcGx5TWF0cmljZXMoaSxsZGUpLE5TLm1hdHJpeFdvcmxkPWNkZSxOUy5yYXljYXN0KHQsV08pO2ZvcihsZXQgcz0wLGE9V08ubGVuZ3RoO3M8YTtzKyspe2xldCBsPVdPW3NdO2wuaW5zdGFuY2VJZD1vLGwub2JqZWN0PXRoaXMsZS5wdXNoKGwpfVdPLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQsZSl7bnVsbD09PXRoaXMuaW5zdGFuY2VDb2xvciYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgbkUobmV3IEZsb2F0MzJBcnJheSgzKnRoaXMuaW5zdGFuY2VNYXRyaXguY291bnQpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9c2V0TWF0cml4QXQodCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwxNip0KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KS5wcm90b3R5cGUuaXNJbnN0YW5jZWRNZXNoPSEwO3ZhciBBcD1jbGFzcyBleHRlbmRzIGhze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgdm4oMTY3NzcyMTUpLHRoaXMubGluZXdpZHRoPTEsdGhpcy5saW5lY2FwPSJyb3VuZCIsdGhpcy5saW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubGluZXdpZHRoPXQubGluZXdpZHRoLHRoaXMubGluZWNhcD10LmxpbmVjYXAsdGhpcy5saW5lam9pbj10LmxpbmVqb2luLHRoaXN9fTtBcC5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDt2YXIgdWRlPW5ldyBpZSxkZGU9bmV3IGllLHBkZT1uZXcgUm4sdDg9bmV3IENmLHFPPW5ldyB4ZixpRT1jbGFzcyBleHRlbmRzIFhpe2NvbnN0cnVjdG9yKHQ9bmV3IG5yLGU9bmV3IEFwKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZSIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYobnVsbD09PXQuaW5kZXgpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVswXTtmb3IobGV0IHI9MSxvPWUuY291bnQ7cjxvO3IrKyl1ZGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHItMSksZGRlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyKSxpW3JdPWlbci0xXSxpW3JdKz11ZGUuZGlzdGFuY2VUbyhkZGUpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyBKcihpLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfXJheWNhc3QodCxlKXtsZXQgaT10aGlzLmdlb21ldHJ5LHI9dGhpcy5tYXRyaXhXb3JsZCxvPXQucGFyYW1zLkxpbmUudGhyZXNob2xkLHM9aS5kcmF3UmFuZ2U7aWYobnVsbD09PWkuYm91bmRpbmdTcGhlcmUmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCkscU8uY29weShpLmJvdW5kaW5nU3BoZXJlKSxxTy5hcHBseU1hdHJpeDQocikscU8ucmFkaXVzKz1vLCExPT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShxTykpcmV0dXJuO3BkZS5jb3B5KHIpLmludmVydCgpLHQ4LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChwZGUpO2xldCBhPW8vKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1hKmEsYz1uZXcgaWUsdT1uZXcgaWUsZD1uZXcgaWUscD1uZXcgaWUsaD10aGlzLmlzTGluZVNlZ21lbnRzPzI6MTtpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBmPWkuaW5kZXgseD1pLmF0dHJpYnV0ZXMucG9zaXRpb247aWYobnVsbCE9PWYpZm9yKGxldCBEPU1hdGgubWF4KDAscy5zdGFydCksVD1NYXRoLm1pbihmLmNvdW50LHMuc3RhcnQrcy5jb3VudCktMTtEPFQ7RCs9aCl7bGV0IGs9Zi5nZXRYKEQpLFo9Zi5nZXRYKEQrMSk7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKHgsayksdS5mcm9tQnVmZmVyQXR0cmlidXRlKHgsWiksdDguZGlzdGFuY2VTcVRvU2VnbWVudChjLHUscCxkKT5sKWNvbnRpbnVlO3AuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBmZT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhwKTtmZTx0Lm5lYXJ8fGZlPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOmZlLHBvaW50OmQuY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6RCxmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX1lbHNlIGZvcihsZXQgRD1NYXRoLm1heCgwLHMuc3RhcnQpLFQ9TWF0aC5taW4oeC5jb3VudCxzLnN0YXJ0K3MuY291bnQpLTE7RDxUO0QrPWgpe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh4LEQpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh4LEQrMSksdDguZGlzdGFuY2VTcVRvU2VnbWVudChjLHUscCxkKT5sKWNvbnRpbnVlO3AuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBaPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHApO1o8dC5uZWFyfHxaPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOloscG9pbnQ6ZC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpELGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHZvaWQgMCE9PXIpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7bzxzO28rKyl7bGV0IGE9cltvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVthXT1vfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtpRS5wcm90b3R5cGUuaXNMaW5lPSEwO3ZhciBoZGU9bmV3IGllLGZkZT1uZXcgaWUsckU9Y2xhc3MgZXh0ZW5kcyBpRXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYobnVsbD09PXQuaW5kZXgpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVtdO2ZvcihsZXQgcj0wLG89ZS5jb3VudDtyPG87cis9MiloZGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIpLGZkZS5mcm9tQnVmZmVyQXR0cmlidXRlKGUscisxKSxpW3JdPTA9PT1yPzA6aVtyLTFdLGlbcisxXT1pW3JdK2hkZS5kaXN0YW5jZVRvKGZkZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IEpyKGksMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfX07ckUucHJvdG90eXBlLmlzTGluZVNlZ21lbnRzPSEwLGNsYXNzIGV4dGVuZHMgaUV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZUxvb3AifX0ucHJvdG90eXBlLmlzTGluZUxvb3A9ITA7dmFyIF9rPWNsYXNzIGV4dGVuZHMgaHN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50c01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyB2bigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5zaXplPTEsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuc2l6ZT10LnNpemUsdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319O19rLnByb3RvdHlwZS5pc1BvaW50c01hdGVyaWFsPSEwO3ZhciBtZGU9bmV3IFJuLEU4PW5ldyBDZixZTz1uZXcgeGYsWE89bmV3IGllO2Z1bmN0aW9uIGdkZShuLHQsZSxpLHIsbyxzKXtsZXQgYT1FOC5kaXN0YW5jZVNxVG9Qb2ludChuKTtpZihhPGUpe2xldCBsPW5ldyBpZTtFOC5jbG9zZXN0UG9pbnRUb1BvaW50KG4sbCksbC5hcHBseU1hdHJpeDQoaSk7bGV0IGM9ci5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCk7aWYoYzxyLm5lYXJ8fGM+ci5mYXIpcmV0dXJuO28ucHVzaCh7ZGlzdGFuY2U6YyxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChhKSxwb2ludDpsLGluZGV4OnQsZmFjZTpudWxsLG9iamVjdDpzfSl9fShjbGFzcyBleHRlbmRzIFhpe2NvbnN0cnVjdG9yKHQ9bmV3IG5yLGU9bmV3IF9rKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxzPWkuZHJhd1JhbmdlO2lmKG51bGw9PT1pLmJvdW5kaW5nU3BoZXJlJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLFlPLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksWU8uYXBwbHlNYXRyaXg0KHIpLFlPLnJhZGl1cys9bywhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUoWU8pKXJldHVybjttZGUuY29weShyKS5pbnZlcnQoKSxFOC5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQobWRlKTtsZXQgYT1vLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9YSphO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGM9aS5pbmRleCxkPWkuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsIT09Yylmb3IobGV0IGY9TWF0aC5tYXgoMCxzLnN0YXJ0KSxtPU1hdGgubWluKGMuY291bnQscy5zdGFydCtzLmNvdW50KTtmPG07ZisrKXtsZXQgeD1jLmdldFgoZik7WE8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShkLHgpLGdkZShYTyx4LGwscix0LGUsdGhpcyl9ZWxzZSBmb3IobGV0IGY9TWF0aC5tYXgoMCxzLnN0YXJ0KSxtPU1hdGgubWluKGQuY291bnQscy5zdGFydCtzLmNvdW50KTtmPG07ZisrKVhPLmZyb21CdWZmZXJBdHRyaWJ1dGUoZCxmKSxnZGUoWE8sZixsLHIsdCxlLHRoaXMpfWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYodm9pZCAwIT09cil7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXtsZXQgYT1yW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FdPW99fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fX0pLnByb3RvdHlwZS5pc1BvaW50cz0hMCxjbGFzcyBleHRlbmRzIEhve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjKXtzdXBlcih0LGUsaSxyLG8scyxhLGwsYyksdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09cz9zOkdzLHRoaXMubWFnRmlsdGVyPXZvaWQgMCE9PW8/bzpHcyx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTtsZXQgdT10aGlzOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhmdW5jdGlvbiBkKCl7dS5uZWVkc1VwZGF0ZT0hMCx0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soZCl9KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfXVwZGF0ZSgpe2xldCB0PXRoaXMuaW1hZ2U7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdD09MCYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fS5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmU9ITAsY2xhc3MgZXh0ZW5kcyBIb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoe3dpZHRoOnQsaGVpZ2h0OmV9KSx0aGlzLmZvcm1hdD1pLHRoaXMubWFnRmlsdGVyPVpvLHRoaXMubWluRmlsdGVyPVpvLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9fS5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmU9ITAsY2xhc3MgZXh0ZW5kcyBIb3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7c3VwZXIobnVsbCxzLGEsbCxjLHUscixvLGQscCksdGhpcy5pbWFnZT17d2lkdGg6ZSxoZWlnaHQ6aX0sdGhpcy5taXBtYXBzPXQsdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX19LnByb3RvdHlwZS5pc0NvbXByZXNzZWRUZXh0dXJlPSEwLGNsYXNzIGV4dGVuZHMgSG97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3N1cGVyKHQsZSxpLHIsbyxzLGEsbCxjKSx0aGlzLm5lZWRzVXBkYXRlPSEwfX0ucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDt2YXIgeWI9Y2xhc3MgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcih0PTEsZT04LGk9MCxyPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOmUsdGhldGFTdGFydDppLHRoZXRhTGVuZ3RoOnJ9LGU9TWF0aC5tYXgoMyxlKTtsZXQgbz1bXSxzPVtdLGE9W10sbD1bXSxjPW5ldyBpZSx1PW5ldyBhdDtzLnB1c2goMCwwLDApLGEucHVzaCgwLDAsMSksbC5wdXNoKC41LC41KTtmb3IobGV0IGQ9MCxwPTM7ZDw9ZTtkKysscCs9Myl7bGV0IGg9aStkL2UqcjtjLng9dCpNYXRoLmNvcyhoKSxjLnk9dCpNYXRoLnNpbihoKSxzLnB1c2goYy54LGMueSxjLnopLGEucHVzaCgwLDAsMSksdS54PShzW3BdL3QrMSkvMix1Lnk9KHNbcCsxXS90KzEpLzIsbC5wdXNoKHUueCx1LnkpfWZvcihsZXQgZD0xO2Q8PWU7ZCsrKW8ucHVzaChkLGQrMSwwKTt0aGlzLnNldEluZGV4KG8pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEpyKHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBKcihhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKcihsLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyB5Yih0LnJhZGl1cyx0LnNlZ21lbnRzLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LHFhPShuZXcgaWUsbmV3IGllLG5ldyBpZSxuZXcgbG8sY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9IkN1cnZlIix0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDB9Z2V0UG9pbnQoKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLmdldFBvaW50KCkgbm90IGltcGxlbWVudGVkLiIpLG51bGx9Z2V0UG9pbnRBdCh0LGUpe2xldCBpPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0UG9pbnQoaSxlKX1nZXRQb2ludHModD01KXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludChpL3QpKTtyZXR1cm4gZX1nZXRTcGFjZWRQb2ludHModD01KXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludEF0KGkvdCkpO3JldHVybiBlfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0TGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfWdldExlbmd0aHModD10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyl7aWYodGhpcy5jYWNoZUFyY0xlbmd0aHMmJnRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aD09PXQrMSYmIXRoaXMubmVlZHNVcGRhdGUpcmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzO3RoaXMubmVlZHNVcGRhdGU9ITE7bGV0IGksZT1bXSxyPXRoaXMuZ2V0UG9pbnQoMCksbz0wO2UucHVzaCgwKTtmb3IobGV0IHM9MTtzPD10O3MrKylpPXRoaXMuZ2V0UG9pbnQocy90KSxvKz1pLmRpc3RhbmNlVG8ociksZS5wdXNoKG8pLHI9aTtyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM9ZSxlfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuZ2V0TGVuZ3RocygpfWdldFV0b1RtYXBwaW5nKHQsZSl7bGV0IHMsaT10aGlzLmdldExlbmd0aHMoKSxyPTAsbz1pLmxlbmd0aDtzPWV8fHQqaVtvLTFdO2xldCBjLGE9MCxsPW8tMTtmb3IoO2E8PWw7KWlmKHI9TWF0aC5mbG9vcihhKyhsLWEpLzIpLGM9aVtyXS1zLGM8MClhPXIrMTtlbHNle2lmKCEoYz4wKSl7bD1yO2JyZWFrfWw9ci0xfWlmKHI9bCxpW3JdPT09cylyZXR1cm4gci8oby0xKTtsZXQgdT1pW3JdO3JldHVybihyKyhzLXUpLyhpW3IrMV0tdSkpLyhvLTEpfWdldFRhbmdlbnQodCxlKXtsZXQgcj10LTFlLTQsbz10KzFlLTQ7cjwwJiYocj0wKSxvPjEmJihvPTEpO2xldCBzPXRoaXMuZ2V0UG9pbnQociksYT10aGlzLmdldFBvaW50KG8pLGw9ZXx8KHMuaXNWZWN0b3IyP25ldyBhdDpuZXcgaWUpO3JldHVybiBsLmNvcHkoYSkuc3ViKHMpLm5vcm1hbGl6ZSgpLGx9Z2V0VGFuZ2VudEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KGksZSl9Y29tcHV0ZUZyZW5ldEZyYW1lcyh0LGUpe2xldCBpPW5ldyBpZSxyPVtdLG89W10scz1bXSxhPW5ldyBpZSxsPW5ldyBSbjtmb3IobGV0IGg9MDtoPD10O2grKylyW2hdPXRoaXMuZ2V0VGFuZ2VudEF0KGgvdCxuZXcgaWUpO29bMF09bmV3IGllLHNbMF09bmV3IGllO2xldCBjPU51bWJlci5NQVhfVkFMVUUsdT1NYXRoLmFicyhyWzBdLngpLGQ9TWF0aC5hYnMoclswXS55KSxwPU1hdGguYWJzKHJbMF0ueik7dTw9YyYmKGM9dSxpLnNldCgxLDAsMCkpLGQ8PWMmJihjPWQsaS5zZXQoMCwxLDApKSxwPD1jJiZpLnNldCgwLDAsMSksYS5jcm9zc1ZlY3RvcnMoclswXSxpKS5ub3JtYWxpemUoKSxvWzBdLmNyb3NzVmVjdG9ycyhyWzBdLGEpLHNbMF0uY3Jvc3NWZWN0b3JzKHJbMF0sb1swXSk7Zm9yKGxldCBoPTE7aDw9dDtoKyspe2lmKG9baF09b1toLTFdLmNsb25lKCksc1toXT1zW2gtMV0uY2xvbmUoKSxhLmNyb3NzVmVjdG9ycyhyW2gtMV0scltoXSksYS5sZW5ndGgoKT5OdW1iZXIuRVBTSUxPTil7YS5ub3JtYWxpemUoKTtsZXQgZj1NYXRoLmFjb3MoR2EocltoLTFdLmRvdChyW2hdKSwtMSwxKSk7b1toXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKGEsZikpfXNbaF0uY3Jvc3NWZWN0b3JzKHJbaF0sb1toXSl9aWYoITA9PT1lKXtsZXQgaD1NYXRoLmFjb3MoR2Eob1swXS5kb3Qob1t0XSksLTEsMSkpO2gvPXQsclswXS5kb3QoYS5jcm9zc1ZlY3RvcnMob1swXSxvW3RdKSk+MCYmKGg9LWgpO2ZvcihsZXQgZj0xO2Y8PXQ7ZisrKW9bZl0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhyW2ZdLGgqZikpLHNbZl0uY3Jvc3NWZWN0b3JzKHJbZl0sb1tmXSl9cmV0dXJue3RhbmdlbnRzOnIsbm9ybWFsczpvLGJpbm9ybWFsczpzfX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQ3VydmUiLGdlbmVyYXRvcjoiQ3VydmUudG9KU09OIn19O3JldHVybiB0LmFyY0xlbmd0aERpdmlzaW9ucz10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyx0LnR5cGU9dGhpcy50eXBlLHR9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9fSksYmI9Y2xhc3MgZXh0ZW5kcyBxYXtjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MSxyPTEsbz0wLHM9MipNYXRoLlBJLGE9ITEsbD0wKXtzdXBlcigpLHRoaXMudHlwZT0iRWxsaXBzZUN1cnZlIix0aGlzLmFYPXQsdGhpcy5hWT1lLHRoaXMueFJhZGl1cz1pLHRoaXMueVJhZGl1cz1yLHRoaXMuYVN0YXJ0QW5nbGU9byx0aGlzLmFFbmRBbmdsZT1zLHRoaXMuYUNsb2Nrd2lzZT1hLHRoaXMuYVJvdGF0aW9uPWx9Z2V0UG9pbnQodCxlKXtsZXQgaT1lfHxuZXcgYXQscj0yKk1hdGguUEksbz10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlLHM9TWF0aC5hYnMobyk8TnVtYmVyLkVQU0lMT047Zm9yKDtvPDA7KW8rPXI7Zm9yKDtvPnI7KW8tPXI7bzxOdW1iZXIuRVBTSUxPTiYmKG89cz8wOnIpLCEwPT09dGhpcy5hQ2xvY2t3aXNlJiYhcyYmKG89PT1yP289LXI6by09cik7bGV0IGE9dGhpcy5hU3RhcnRBbmdsZSt0Km8sbD10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhhKSxjPXRoaXMuYVkrdGhpcy55UmFkaXVzKk1hdGguc2luKGEpO2lmKDAhPT10aGlzLmFSb3RhdGlvbil7bGV0IHU9TWF0aC5jb3ModGhpcy5hUm90YXRpb24pLGQ9TWF0aC5zaW4odGhpcy5hUm90YXRpb24pLHA9bC10aGlzLmFYLGg9Yy10aGlzLmFZO2w9cCp1LWgqZCt0aGlzLmFYLGM9cCpkK2gqdSt0aGlzLmFZfXJldHVybiBpLnNldChsLGMpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5hWD10aGlzLmFYLHQuYVk9dGhpcy5hWSx0LnhSYWRpdXM9dGhpcy54UmFkaXVzLHQueVJhZGl1cz10aGlzLnlSYWRpdXMsdC5hU3RhcnRBbmdsZT10aGlzLmFTdGFydEFuZ2xlLHQuYUVuZEFuZ2xlPXRoaXMuYUVuZEFuZ2xlLHQuYUNsb2Nrd2lzZT10aGlzLmFDbG9ja3dpc2UsdC5hUm90YXRpb249dGhpcy5hUm90YXRpb24sdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc319O2JiLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDt2YXIgdms9Y2xhc3MgZXh0ZW5kcyBiYntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7c3VwZXIodCxlLGksaSxyLG8scyksdGhpcy50eXBlPSJBcmNDdXJ2ZSJ9fTtmdW5jdGlvbiBTRygpe2xldCBuPTAsdD0wLGU9MCxpPTA7ZnVuY3Rpb24gcihvLHMsYSxsKXtuPW8sdD1hLGU9LTMqbyszKnMtMiphLWwsaT0yKm8tMipzK2ErbH1yZXR1cm57aW5pdENhdG11bGxSb206ZnVuY3Rpb24obyxzLGEsbCxjKXtyKHMsYSxjKihhLW8pLGMqKGwtcykpfSxpbml0Tm9udW5pZm9ybUNhdG11bGxSb206ZnVuY3Rpb24obyxzLGEsbCxjLHUsZCl7bGV0IHA9KHMtbykvYy0oYS1vKS8oYyt1KSsoYS1zKS91LGg9KGEtcykvdS0obC1zKS8odStkKSsobC1hKS9kO3AqPXUsaCo9dSxyKHMsYSxwLGgpfSxjYWxjOmZ1bmN0aW9uKG8pe2xldCBzPW8qbztyZXR1cm4gbit0Km8rZSpzK2kqKHMqbyl9fX12ay5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDt2YXIgUU89bmV3IGllLG44PW5ldyBTRyxpOD1uZXcgU0cscjg9bmV3IFNHLHlrPWNsYXNzIGV4dGVuZHMgcWF7Y29uc3RydWN0b3IodD1bXSxlPSExLGk9ImNlbnRyaXBldGFsIixyPS41KXtzdXBlcigpLHRoaXMudHlwZT0iQ2F0bXVsbFJvbUN1cnZlMyIsdGhpcy5wb2ludHM9dCx0aGlzLmNsb3NlZD1lLHRoaXMuY3VydmVUeXBlPWksdGhpcy50ZW5zaW9uPXJ9Z2V0UG9pbnQodCxlPW5ldyBpZSl7bGV0IGMsdSxpPWUscj10aGlzLnBvaW50cyxvPXIubGVuZ3RoLHM9KG8tKHRoaXMuY2xvc2VkPzA6MSkpKnQsYT1NYXRoLmZsb29yKHMpLGw9cy1hO3RoaXMuY2xvc2VkP2ErPWE+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKGEpL28pKzEpKm86MD09PWwmJmE9PT1vLTEmJihhPW8tMixsPTEpLHRoaXMuY2xvc2VkfHxhPjA/Yz1yWyhhLTEpJW9dOihRTy5zdWJWZWN0b3JzKHJbMF0sclsxXSkuYWRkKHJbMF0pLGM9UU8pO2xldCBkPXJbYSVvXSxwPXJbKGErMSklb107aWYodGhpcy5jbG9zZWR8fGErMjxvP3U9clsoYSsyKSVvXTooUU8uc3ViVmVjdG9ycyhyW28tMV0scltvLTJdKS5hZGQocltvLTFdKSx1PVFPKSwiY2VudHJpcGV0YWwiPT09dGhpcy5jdXJ2ZVR5cGV8fCJjaG9yZGFsIj09PXRoaXMuY3VydmVUeXBlKXtsZXQgaD0iY2hvcmRhbCI9PT10aGlzLmN1cnZlVHlwZT8uNTouMjUsZj1NYXRoLnBvdyhjLmRpc3RhbmNlVG9TcXVhcmVkKGQpLGgpLG09TWF0aC5wb3coZC5kaXN0YW5jZVRvU3F1YXJlZChwKSxoKSx4PU1hdGgucG93KHAuZGlzdGFuY2VUb1NxdWFyZWQodSksaCk7bTwxZS00JiYobT0xKSxmPDFlLTQmJihmPW0pLHg8MWUtNCYmKHg9bSksbjguaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueCxkLngscC54LHUueCxmLG0seCksaTguaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueSxkLnkscC55LHUueSxmLG0seCkscjguaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueixkLnoscC56LHUueixmLG0seCl9ZWxzZSJjYXRtdWxscm9tIj09PXRoaXMuY3VydmVUeXBlJiYobjguaW5pdENhdG11bGxSb20oYy54LGQueCxwLngsdS54LHRoaXMudGVuc2lvbiksaTguaW5pdENhdG11bGxSb20oYy55LGQueSxwLnksdS55LHRoaXMudGVuc2lvbikscjguaW5pdENhdG11bGxSb20oYy56LGQueixwLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBpLnNldChuOC5jYWxjKGwpLGk4LmNhbGMobCkscjguY2FsYyhsKSksaX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl0aGlzLnBvaW50cy5wdXNoKHQucG9pbnRzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl0LnBvaW50cy5wdXNoKHRoaXMucG9pbnRzW2VdLnRvQXJyYXkoKSk7cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgaWUpLmZyb21BcnJheShyKSl9cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc319O2Z1bmN0aW9uIF9kZShuLHQsZSxpLHIpe2xldCBvPS41KihpLXQpLHM9LjUqKHItZSksYT1uKm47cmV0dXJuKDIqZS0yKmkrbytzKSoobiphKSsoLTMqZSszKmktMipvLXMpKmErbypuK2V9ZnVuY3Rpb24gelMobix0LGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7bGV0IGU9MS1uO3JldHVybiBlKmUqdH0obix0KStmdW5jdGlvbihuLHQpe3JldHVybiAyKigxLW4pKm4qdH0obixlKStmdW5jdGlvbihuLHQpe3JldHVybiBuKm4qdH0obixpKX1mdW5jdGlvbiBqUyhuLHQsZSxpLHIpe3JldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPTEtbjtyZXR1cm4gZSplKmUqdH0obix0KStmdW5jdGlvbihuLHQpe2xldCBlPTEtbjtyZXR1cm4gMyplKmUqbip0fShuLGUpK2Z1bmN0aW9uKG4sdCl7cmV0dXJuIDMqKDEtbikqbipuKnR9KG4saSkrZnVuY3Rpb24obix0KXtyZXR1cm4gbipuKm4qdH0obixyKX15ay5wcm90b3R5cGUuaXNDYXRtdWxsUm9tQ3VydmUzPSEwO3ZhciBvRT1jbGFzcyBleHRlbmRzIHFhe2NvbnN0cnVjdG9yKHQ9bmV3IGF0LGU9bmV3IGF0LGk9bmV3IGF0LHI9bmV3IGF0KXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWksdGhpcy52Mz1yfWdldFBvaW50KHQsZT1uZXcgYXQpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxzPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBpLnNldChqUyh0LHIueCxvLngscy54LGEueCksalModCxyLnksby55LHMueSxhLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O29FLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmU9ITA7dmFyIGJrPWNsYXNzIGV4dGVuZHMgcWF7Y29uc3RydWN0b3IodD1uZXcgaWUsZT1uZXcgaWUsaT1uZXcgaWUscj1uZXcgaWUpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWksdGhpcy52Mz1yfWdldFBvaW50KHQsZT1uZXcgaWUpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxzPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBpLnNldChqUyh0LHIueCxvLngscy54LGEueCksalModCxyLnksby55LHMueSxhLnkpLGpTKHQsci56LG8ueixzLnosYS56KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTtiay5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDt2YXIgeGI9Y2xhc3MgZXh0ZW5kcyBxYXtjb25zdHJ1Y3Rvcih0PW5ldyBhdCxlPW5ldyBhdCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZSIsdGhpcy52MT10LHRoaXMudjI9ZX1nZXRQb2ludCh0LGU9bmV3IGF0KXtsZXQgaT1lO3JldHVybiAxPT09dD9pLmNvcHkodGhpcy52Mik6KGkuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksaS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLGl9Z2V0UG9pbnRBdCh0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9Z2V0VGFuZ2VudCh0LGUpe2xldCBpPWV8fG5ldyBhdDtyZXR1cm4gaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O3hiLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgc0U9Y2xhc3MgZXh0ZW5kcyBxYXtjb25zdHJ1Y3Rvcih0PW5ldyBhdCxlPW5ldyBhdCxpPW5ldyBhdCl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aX1nZXRQb2ludCh0LGU9bmV3IGF0KXtsZXQgaT1lLHI9dGhpcy52MCxvPXRoaXMudjEscz10aGlzLnYyO3JldHVybiBpLnNldCh6Uyh0LHIueCxvLngscy54KSx6Uyh0LHIueSxvLnkscy55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTtzRS5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMDt2YXIgeGs9Y2xhc3MgZXh0ZW5kcyBxYXtjb25zdHJ1Y3Rvcih0PW5ldyBpZSxlPW5ldyBpZSxpPW5ldyBpZSl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyBpZSl7bGV0IGk9ZSxyPXRoaXMudjAsbz10aGlzLnYxLHM9dGhpcy52MjtyZXR1cm4gaS5zZXQoelModCxyLngsby54LHMueCkselModCxyLnksby55LHMueSkselModCxyLnosby56LHMueikpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07eGsucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO3ZhciBhRT1jbGFzcyBleHRlbmRzIHFhe2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy50eXBlPSJTcGxpbmVDdXJ2ZSIsdGhpcy5wb2ludHM9dH1nZXRQb2ludCh0LGU9bmV3IGF0KXtsZXQgaT1lLHI9dGhpcy5wb2ludHMsbz0oci5sZW5ndGgtMSkqdCxzPU1hdGguZmxvb3IobyksYT1vLXMsbD1yWzA9PT1zP3M6cy0xXSxjPXJbc10sdT1yW3M+ci5sZW5ndGgtMj9yLmxlbmd0aC0xOnMrMV0sZD1yW3M+ci5sZW5ndGgtMz9yLmxlbmd0aC0xOnMrMl07cmV0dXJuIGkuc2V0KF9kZShhLGwueCxjLngsdS54LGQueCksX2RlKGEsbC55LGMueSx1LnksZC55KSksaX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl0aGlzLnBvaW50cy5wdXNoKHQucG9pbnRzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5wb2ludHMubGVuZ3RoO2U8aTtlKyspdC5wb2ludHMucHVzaCh0aGlzLnBvaW50c1tlXS50b0FycmF5KCkpO3JldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2goKG5ldyBhdCkuZnJvbUFycmF5KHIpKX1yZXR1cm4gdGhpc319O2FFLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3ZhciBxZGU9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6dmssQ2F0bXVsbFJvbUN1cnZlMzp5ayxDdWJpY0JlemllckN1cnZlOm9FLEN1YmljQmV6aWVyQ3VydmUzOmJrLEVsbGlwc2VDdXJ2ZTpiYixMaW5lQ3VydmU6eGIsTGluZUN1cnZlMzpjbGFzcyBleHRlbmRzIHFhe2NvbnN0cnVjdG9yKHQ9bmV3IGllLGU9bmV3IGllKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlMyIsdGhpcy5pc0xpbmVDdXJ2ZTM9ITAsdGhpcy52MT10LHRoaXMudjI9ZX1nZXRQb2ludCh0LGU9bmV3IGllKXtsZXQgaT1lO3JldHVybiAxPT09dD9pLmNvcHkodGhpcy52Mik6KGkuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksaS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLGl9Z2V0UG9pbnRBdCh0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX0sUXVhZHJhdGljQmV6aWVyQ3VydmU6c0UsUXVhZHJhdGljQmV6aWVyQ3VydmUzOnhrLFNwbGluZUN1cnZlOmFFfSksTzg9Y2xhc3MgZXh0ZW5kcyBxYXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDdXJ2ZVBhdGgiLHRoaXMuY3VydmVzPVtdLHRoaXMuYXV0b0Nsb3NlPSExfWFkZCh0KXt0aGlzLmN1cnZlcy5wdXNoKHQpfWNsb3NlUGF0aCgpe2xldCB0PXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLGU9dGhpcy5jdXJ2ZXNbdGhpcy5jdXJ2ZXMubGVuZ3RoLTFdLmdldFBvaW50KDEpO3QuZXF1YWxzKGUpfHx0aGlzLmN1cnZlcy5wdXNoKG5ldyB4YihlLHQpKX1nZXRQb2ludCh0LGUpe2xldCBpPXQqdGhpcy5nZXRMZW5ndGgoKSxyPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCksbz0wO2Zvcig7bzxyLmxlbmd0aDspe2lmKHJbb10+PWkpe2xldCBzPXJbb10taSxhPXRoaXMuY3VydmVzW29dLGw9YS5nZXRMZW5ndGgoKTtyZXR1cm4gYS5nZXRQb2ludEF0KDA9PT1sPzA6MS1zL2wsZSl9bysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLGU9MDtmb3IobGV0IGk9MCxyPXRoaXMuY3VydmVzLmxlbmd0aDtpPHI7aSsrKWUrPXRoaXMuY3VydmVzW2ldLmdldExlbmd0aCgpLHQucHVzaChlKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludChpL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUucHVzaChlWzBdKSxlfWdldFBvaW50cyh0PTEyKXtsZXQgaSxlPVtdO2ZvcihsZXQgcj0wLG89dGhpcy5jdXJ2ZXM7cjxvLmxlbmd0aDtyKyspe2xldCBzPW9bcl0sbD1zLmdldFBvaW50cyhzJiZzLmlzRWxsaXBzZUN1cnZlPzIqdDpzJiYocy5pc0xpbmVDdXJ2ZXx8cy5pc0xpbmVDdXJ2ZTMpPzE6cyYmcy5pc1NwbGluZUN1cnZlP3Qqcy5wb2ludHMubGVuZ3RoOnQpO2ZvcihsZXQgYz0wO2M8bC5sZW5ndGg7YysrKXtsZXQgdT1sW2NdO2kmJmkuZXF1YWxzKHUpfHwoZS5wdXNoKHUpLGk9dSl9fXJldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5sZW5ndGg+MSYmIWVbZS5sZW5ndGgtMV0uZXF1YWxzKGVbMF0pJiZlLnB1c2goZVswXSksZX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsaT10LmN1cnZlcy5sZW5ndGg7ZTxpO2UrKyl0aGlzLmN1cnZlcy5wdXNoKHQuY3VydmVzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzLmF1dG9DbG9zZT10LmF1dG9DbG9zZSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QuYXV0b0Nsb3NlPXRoaXMuYXV0b0Nsb3NlLHQuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspdC5jdXJ2ZXMucHVzaCh0aGlzLmN1cnZlc1tlXS50b0pTT04oKSk7cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpcy5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsaT10LmN1cnZlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5jdXJ2ZXNbZV07dGhpcy5jdXJ2ZXMucHVzaCgobmV3IHFkZVtyLnR5cGVdKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fSxsRT1jbGFzcyBleHRlbmRzIE84e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQYXRoIix0aGlzLmN1cnJlbnRQb2ludD1uZXcgYXQsdCYmdGhpcy5zZXRGcm9tUG9pbnRzKHQpfXNldEZyb21Qb2ludHModCl7dGhpcy5tb3ZlVG8odFswXS54LHRbMF0ueSk7Zm9yKGxldCBlPTEsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMubGluZVRvKHRbZV0ueCx0W2VdLnkpO3JldHVybiB0aGlzfW1vdmVUbyh0LGUpe3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5zZXQodCxlKSx0aGlzfWxpbmVUbyh0LGUpe2xldCBpPW5ldyB4Yih0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBhdCh0LGUpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChpKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQodCxlKSx0aGlzfXF1YWRyYXRpY0N1cnZlVG8odCxlLGkscil7bGV0IG89bmV3IHNFKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IGF0KHQsZSksbmV3IGF0KGkscikpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKG8pLHRoaXMuY3VycmVudFBvaW50LnNldChpLHIpLHRoaXN9YmV6aWVyQ3VydmVUbyh0LGUsaSxyLG8scyl7bGV0IGE9bmV3IG9FKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IGF0KHQsZSksbmV3IGF0KGksciksbmV3IGF0KG8scykpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKGEpLHRoaXMuY3VycmVudFBvaW50LnNldChvLHMpLHRoaXN9c3BsaW5lVGhydSh0KXtsZXQgZT1bdGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKV0uY29uY2F0KHQpLGk9bmV3IGFFKGUpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKGkpLHRoaXMuY3VycmVudFBvaW50LmNvcHkodFt0Lmxlbmd0aC0xXSksdGhpc31hcmModCxlLGkscixvLHMpe3JldHVybiB0aGlzLmFic2FyYyh0K3RoaXMuY3VycmVudFBvaW50LngsZSt0aGlzLmN1cnJlbnRQb2ludC55LGkscixvLHMpLHRoaXN9YWJzYXJjKHQsZSxpLHIsbyxzKXtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQsZSxpLGkscixvLHMpLHRoaXN9ZWxsaXBzZSh0LGUsaSxyLG8scyxhLGwpe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCt0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSxpLHIsbyxzLGEsbCksdGhpc31hYnNlbGxpcHNlKHQsZSxpLHIsbyxzLGEsbCl7bGV0IGM9bmV3IGJiKHQsZSxpLHIsbyxzLGEsbCk7aWYodGhpcy5jdXJ2ZXMubGVuZ3RoPjApe2xldCBkPWMuZ2V0UG9pbnQoMCk7ZC5lcXVhbHModGhpcy5jdXJyZW50UG9pbnQpfHx0aGlzLmxpbmVUbyhkLngsZC55KX10aGlzLmN1cnZlcy5wdXNoKGMpO2xldCB1PWMuZ2V0UG9pbnQoMSk7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LmNvcHkodSksdGhpc31jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY3VycmVudFBvaW50LmNvcHkodC5jdXJyZW50UG9pbnQpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuY3VycmVudFBvaW50PXRoaXMuY3VycmVudFBvaW50LnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLmN1cnJlbnRQb2ludC5mcm9tQXJyYXkodC5jdXJyZW50UG9pbnQpLHRoaXN9fSxJcD1jbGFzcyBleHRlbmRzIGxFe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudXVpZD1kdSgpLHRoaXMudHlwZT0iU2hhcGUiLHRoaXMuaG9sZXM9W119Z2V0UG9pbnRzSG9sZXModCl7bGV0IGU9W107Zm9yKGxldCBpPTAscj10aGlzLmhvbGVzLmxlbmd0aDtpPHI7aSsrKWVbaV09dGhpcy5ob2xlc1tpXS5nZXRQb2ludHModCk7cmV0dXJuIGV9ZXh0cmFjdFBvaW50cyh0KXtyZXR1cm57c2hhcGU6dGhpcy5nZXRQb2ludHModCksaG9sZXM6dGhpcy5nZXRQb2ludHNIb2xlcyh0KX19Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10LmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXRoaXMuaG9sZXMucHVzaCh0LmhvbGVzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QudXVpZD10aGlzLnV1aWQsdC5ob2xlcz1bXTtmb3IobGV0IGU9MCxpPXRoaXMuaG9sZXMubGVuZ3RoO2U8aTtlKyspdC5ob2xlcy5wdXNoKHRoaXMuaG9sZXNbZV0udG9KU09OKCkpO3JldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMudXVpZD10LnV1aWQsdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxpPXQuaG9sZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuaG9sZXNbZV07dGhpcy5ob2xlcy5wdXNoKChuZXcgbEUpLmZyb21KU09OKHIpKX1yZXR1cm4gdGhpc319O2Z1bmN0aW9uIFlkZShuLHQsZSxpLHIpe2xldCBvLHM7aWYocj09PWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPTA7Zm9yKGxldCBvPXQscz1lLWk7bzxlO28rPWkpcis9KG5bc10tbltvXSkqKG5bbysxXStuW3MrMV0pLHM9bztyZXR1cm4gcn0obix0LGUsaSk+MClmb3Iobz10O288ZTtvKz1pKXM9dmRlKG8sbltvXSxuW28rMV0scyk7ZWxzZSBmb3Iobz1lLWk7bz49dDtvLT1pKXM9dmRlKG8sbltvXSxuW28rMV0scyk7cmV0dXJuIHMmJkZrKHMscy5uZXh0KSYmKGRFKHMpLHM9cy5uZXh0KSxzfWZ1bmN0aW9uIHdmKG4sdCl7aWYoIW4pcmV0dXJuIG47dHx8KHQ9bik7bGV0IGksZT1uO2Rve2lmKGk9ITEsZS5zdGVpbmVyfHwhRmsoZSxlLm5leHQpJiYwIT09WnIoZS5wcmV2LGUsZS5uZXh0KSllPWUubmV4dDtlbHNle2lmKGRFKGUpLGU9dD1lLnByZXYsZT09PWUubmV4dClicmVhaztpPSEwfX13aGlsZShpfHxlIT09dCk7cmV0dXJuIHR9ZnVuY3Rpb24gY0Uobix0LGUsaSxyLG8scyl7aWYoIW4pcmV0dXJuOyFzJiZvJiZmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uO2Rve251bGw9PT1yLnomJihyLno9azgoci54LHIueSx0LGUsaSkpLHIucHJldlo9ci5wcmV2LHIubmV4dFo9ci5uZXh0LHI9ci5uZXh0fXdoaWxlKHIhPT1uKTtyLnByZXZaLm5leHRaPW51bGwsci5wcmV2Wj1udWxsLGZ1bmN0aW9uKG4pe2xldCB0LGUsaSxyLG8scyxhLGwsYz0xO2Rve2ZvcihlPW4sbj1udWxsLG89bnVsbCxzPTA7ZTspe2ZvcihzKyssaT1lLGE9MCx0PTA7dDxjJiYoYSsrLGk9aS5uZXh0WixpKTt0KyspO2ZvcihsPWM7YT4wfHxsPjAmJmk7KTAhPT1hJiYoMD09PWx8fCFpfHxlLno8PWkueik/KHI9ZSxlPWUubmV4dFosYS0tKToocj1pLGk9aS5uZXh0WixsLS0pLG8/by5uZXh0Wj1yOm49cixyLnByZXZaPW8sbz1yO2U9aX1vLm5leHRaPW51bGwsYyo9Mn13aGlsZShzPjEpfShyKX0obixpLHIsbyk7bGV0IGwsYyxhPW47Zm9yKDtuLnByZXYhPT1uLm5leHQ7KWlmKGw9bi5wcmV2LGM9bi5uZXh0LG8/RDllKG4saSxyLG8pOlQ5ZShuKSl0LnB1c2gobC5pL2UpLHQucHVzaChuLmkvZSksdC5wdXNoKGMuaS9lKSxkRShuKSxuPWMubmV4dCxhPWMubmV4dDtlbHNlIGlmKChuPWMpPT09YSl7cz8xPT09cz9jRShuPUE5ZSh3ZihuKSx0LGUpLHQsZSxpLHIsbywyKToyPT09cyYmSTllKG4sdCxlLGkscixvKTpjRSh3ZihuKSx0LGUsaSxyLG8sMSk7YnJlYWt9fWZ1bmN0aW9uIFQ5ZShuKXtsZXQgdD1uLnByZXYsZT1uLGk9bi5uZXh0O2lmKFpyKHQsZSxpKT49MClyZXR1cm4hMTtsZXQgcj1uLm5leHQubmV4dDtmb3IoO3IhPT1uLnByZXY7KXtpZihhYih0LngsdC55LGUueCxlLnksaS54LGkueSxyLngsci55KSYmWnIoci5wcmV2LHIsci5uZXh0KT49MClyZXR1cm4hMTtyPXIubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBEOWUobix0LGUsaSl7bGV0IHI9bi5wcmV2LG89bixzPW4ubmV4dDtpZihacihyLG8scyk+PTApcmV0dXJuITE7bGV0IGM9ci54Pm8ueD9yLng+cy54P3IueDpzLng6by54PnMueD9vLng6cy54LHU9ci55Pm8ueT9yLnk+cy55P3IueTpzLnk6by55PnMueT9vLnk6cy55LGQ9azgoci54PG8ueD9yLng8cy54P3IueDpzLng6by54PHMueD9vLng6cy54LHIueTxvLnk/ci55PHMueT9yLnk6cy55Om8ueTxzLnk/by55OnMueSx0LGUsaSkscD1rOChjLHUsdCxlLGkpLGg9bi5wcmV2WixmPW4ubmV4dFo7Zm9yKDtoJiZoLno+PWQmJmYmJmYuejw9cDspe2lmKGghPT1uLnByZXYmJmghPT1uLm5leHQmJmFiKHIueCxyLnksby54LG8ueSxzLngscy55LGgueCxoLnkpJiZacihoLnByZXYsaCxoLm5leHQpPj0wfHwoaD1oLnByZXZaLGYhPT1uLnByZXYmJmYhPT1uLm5leHQmJmFiKHIueCxyLnksby54LG8ueSxzLngscy55LGYueCxmLnkpJiZacihmLnByZXYsZixmLm5leHQpPj0wKSlyZXR1cm4hMTtmPWYubmV4dFp9Zm9yKDtoJiZoLno+PWQ7KXtpZihoIT09bi5wcmV2JiZoIT09bi5uZXh0JiZhYihyLngsci55LG8ueCxvLnkscy54LHMueSxoLngsaC55KSYmWnIoaC5wcmV2LGgsaC5uZXh0KT49MClyZXR1cm4hMTtoPWgucHJldlp9Zm9yKDtmJiZmLno8PXA7KXtpZihmIT09bi5wcmV2JiZmIT09bi5uZXh0JiZhYihyLngsci55LG8ueCxvLnkscy54LHMueSxmLngsZi55KSYmWnIoZi5wcmV2LGYsZi5uZXh0KT49MClyZXR1cm4hMTtmPWYubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gQTllKG4sdCxlKXtsZXQgaT1uO2Rve2xldCByPWkucHJldixvPWkubmV4dC5uZXh0OyFGayhyLG8pJiZYZGUocixpLGkubmV4dCxvKSYmdUUocixvKSYmdUUobyxyKSYmKHQucHVzaChyLmkvZSksdC5wdXNoKGkuaS9lKSx0LnB1c2goby5pL2UpLGRFKGkpLGRFKGkubmV4dCksaT1uPW8pLGk9aS5uZXh0fXdoaWxlKGkhPT1uKTtyZXR1cm4gd2YoaSl9ZnVuY3Rpb24gSTllKG4sdCxlLGkscixvKXtsZXQgcz1uO2Rve2xldCBhPXMubmV4dC5uZXh0O2Zvcig7YSE9PXMucHJldjspe2lmKHMuaSE9PWEuaSYmVjllKHMsYSkpe2xldCBsPVFkZShzLGEpO3JldHVybiBzPXdmKHMscy5uZXh0KSxsPXdmKGwsbC5uZXh0KSxjRShzLHQsZSxpLHIsbyksdm9pZCBjRShsLHQsZSxpLHIsbyl9YT1hLm5leHR9cz1zLm5leHR9d2hpbGUocyE9PW4pfWZ1bmN0aW9uIFI5ZShuLHQpe3JldHVybiBuLngtdC54fWZ1bmN0aW9uIE85ZShuLHQpe2lmKHQ9ZnVuY3Rpb24obix0KXtsZXQgcyxlPXQsaT1uLngscj1uLnksbz0tMS8wO2Rve2lmKHI8PWUueSYmcj49ZS5uZXh0LnkmJmUubmV4dC55IT09ZS55KXtsZXQgcD1lLngrKHItZS55KSooZS5uZXh0LngtZS54KS8oZS5uZXh0LnktZS55KTtpZihwPD1pJiZwPm8pe2lmKG89cCxwPT09aSl7aWYocj09PWUueSlyZXR1cm4gZTtpZihyPT09ZS5uZXh0LnkpcmV0dXJuIGUubmV4dH1zPWUueDxlLm5leHQueD9lOmUubmV4dH19ZT1lLm5leHR9d2hpbGUoZSE9PXQpO2lmKCFzKXJldHVybiBudWxsO2lmKGk9PT1vKXJldHVybiBzO2xldCBkLGE9cyxsPXMueCxjPXMueSx1PTEvMDtlPXM7ZG97aT49ZS54JiZlLng+PWwmJmkhPT1lLngmJmFiKHI8Yz9pOm8scixsLGMscjxjP286aSxyLGUueCxlLnkpJiYoZD1NYXRoLmFicyhyLWUueSkvKGktZS54KSx1RShlLG4pJiYoZDx1fHxkPT09dSYmKGUueD5zLnh8fGUueD09PXMueCYmRjllKHMsZSkpKSYmKHM9ZSx1PWQpKSxlPWUubmV4dH13aGlsZShlIT09YSk7cmV0dXJuIHN9KG4sdCksdCl7bGV0IGU9UWRlKHQsbik7d2YodCx0Lm5leHQpLHdmKGUsZS5uZXh0KX19ZnVuY3Rpb24gRjllKG4sdCl7cmV0dXJuIFpyKG4ucHJldixuLHQucHJldik8MCYmWnIodC5uZXh0LG4sbi5uZXh0KTwwfWZ1bmN0aW9uIGs4KG4sdCxlLGkscil7cmV0dXJuKG49MTQzMTY1NTc2NSYoKG49ODU4OTkzNDU5Jigobj0yNTI2NDUxMzUmKChuPTE2NzExOTM1Jigobj0zMjc2Nyoobi1lKSpyKXxuPDw4KSl8bjw8NCkpfG48PDIpKXxuPDwxKSl8KHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodD0zMjc2NyoodC1pKSpyKXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSk8PDF9ZnVuY3Rpb24gQjllKG4pe2xldCB0PW4sZT1uO2Rveyh0Lng8ZS54fHx0Lng9PT1lLngmJnQueTxlLnkpJiYoZT10KSx0PXQubmV4dH13aGlsZSh0IT09bik7cmV0dXJuIGV9ZnVuY3Rpb24gYWIobix0LGUsaSxyLG8scyxhKXtyZXR1cm4oci1zKSoodC1hKS0obi1zKSooby1hKT49MCYmKG4tcykqKGktYSktKGUtcykqKHQtYSk+PTAmJihlLXMpKihvLWEpLShyLXMpKihpLWEpPj0wfWZ1bmN0aW9uIFY5ZShuLHQpe3JldHVybiBuLm5leHQuaSE9PXQuaSYmbi5wcmV2LmkhPT10LmkmJiFmdW5jdGlvbihuLHQpe2xldCBlPW47ZG97aWYoZS5pIT09bi5pJiZlLm5leHQuaSE9PW4uaSYmZS5pIT09dC5pJiZlLm5leHQuaSE9PXQuaSYmWGRlKGUsZS5uZXh0LG4sdCkpcmV0dXJuITA7ZT1lLm5leHR9d2hpbGUoZSE9PW4pO3JldHVybiExfShuLHQpJiYodUUobix0KSYmdUUodCxuKSYmZnVuY3Rpb24obix0KXtsZXQgZT1uLGk9ITEscj0obi54K3QueCkvMixvPShuLnkrdC55KS8yO2Rve2UueT5vIT1lLm5leHQueT5vJiZlLm5leHQueSE9PWUueSYmcjwoZS5uZXh0LngtZS54KSooby1lLnkpLyhlLm5leHQueS1lLnkpK2UueCYmKGk9IWkpLGU9ZS5uZXh0fXdoaWxlKGUhPT1uKTtyZXR1cm4gaX0obix0KSYmKFpyKG4ucHJldixuLHQucHJldil8fFpyKG4sdC5wcmV2LHQpKXx8Rmsobix0KSYmWnIobi5wcmV2LG4sbi5uZXh0KT4wJiZacih0LnByZXYsdCx0Lm5leHQpPjApfWZ1bmN0aW9uIFpyKG4sdCxlKXtyZXR1cm4odC55LW4ueSkqKGUueC10LngpLSh0Lngtbi54KSooZS55LXQueSl9ZnVuY3Rpb24gRmsobix0KXtyZXR1cm4gbi54PT09dC54JiZuLnk9PT10Lnl9ZnVuY3Rpb24gWGRlKG4sdCxlLGkpe2xldCByPVpPKFpyKG4sdCxlKSksbz1aTyhacihuLHQsaSkpLHM9Wk8oWnIoZSxpLG4pKSxhPVpPKFpyKGUsaSx0KSk7cmV0dXJuISEociE9PW8mJnMhPT1hfHwwPT09ciYmS08obixlLHQpfHwwPT09byYmS08obixpLHQpfHwwPT09cyYmS08oZSxuLGkpfHwwPT09YSYmS08oZSx0LGkpKX1mdW5jdGlvbiBLTyhuLHQsZSl7cmV0dXJuIHQueDw9TWF0aC5tYXgobi54LGUueCkmJnQueD49TWF0aC5taW4obi54LGUueCkmJnQueTw9TWF0aC5tYXgobi55LGUueSkmJnQueT49TWF0aC5taW4obi55LGUueSl9ZnVuY3Rpb24gWk8obil7cmV0dXJuIG4+MD8xOm48MD8tMTowfWZ1bmN0aW9uIHVFKG4sdCl7cmV0dXJuIFpyKG4ucHJldixuLG4ubmV4dCk8MD9acihuLHQsbi5uZXh0KT49MCYmWnIobixuLnByZXYsdCk+PTA6WnIobix0LG4ucHJldik8MHx8WnIobixuLm5leHQsdCk8MH1mdW5jdGlvbiBRZGUobix0KXtsZXQgZT1uZXcgRjgobi5pLG4ueCxuLnkpLGk9bmV3IEY4KHQuaSx0LngsdC55KSxyPW4ubmV4dCxvPXQucHJldjtyZXR1cm4gbi5uZXh0PXQsdC5wcmV2PW4sZS5uZXh0PXIsci5wcmV2PWUsaS5uZXh0PWUsZS5wcmV2PWksby5uZXh0PWksaS5wcmV2PW8saX1mdW5jdGlvbiB2ZGUobix0LGUsaSl7bGV0IHI9bmV3IEY4KG4sdCxlKTtyZXR1cm4gaT8oci5uZXh0PWkubmV4dCxyLnByZXY9aSxpLm5leHQucHJldj1yLGkubmV4dD1yKTooci5wcmV2PXIsci5uZXh0PXIpLHJ9ZnVuY3Rpb24gZEUobil7bi5uZXh0LnByZXY9bi5wcmV2LG4ucHJldi5uZXh0PW4ubmV4dCxuLnByZXZaJiYobi5wcmV2Wi5uZXh0Wj1uLm5leHRaKSxuLm5leHRaJiYobi5uZXh0Wi5wcmV2Wj1uLnByZXZaKX1mdW5jdGlvbiBGOChuLHQsZSl7dGhpcy5pPW4sdGhpcy54PXQsdGhpcy55PWUsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9dmFyIEVkPWNsYXNze3N0YXRpYyBhcmVhKHQpe2xldCBlPXQubGVuZ3RoLGk9MDtmb3IobGV0IHI9ZS0xLG89MDtvPGU7cj1vKyspaSs9dFtyXS54KnRbb10ueS10W29dLngqdFtyXS55O3JldHVybi41Kml9c3RhdGljIGlzQ2xvY2tXaXNlKHQpe3JldHVybiBFZC5hcmVhKHQpPDB9c3RhdGljIHRyaWFuZ3VsYXRlU2hhcGUodCxlKXtsZXQgaT1bXSxyPVtdLG89W107eWRlKHQpLGJkZShpLHQpO2xldCBzPXQubGVuZ3RoO2UuZm9yRWFjaCh5ZGUpO2ZvcihsZXQgbD0wO2w8ZS5sZW5ndGg7bCsrKXIucHVzaChzKSxzKz1lW2xdLmxlbmd0aCxiZGUoaSxlW2xdKTtsZXQgYT1mdW5jdGlvbihuLHQsZT0yKXtsZXQgYSxsLGMsdSxkLHAsaCxpPXQmJnQubGVuZ3RoLHI9aT90WzBdKmU6bi5sZW5ndGgsbz1ZZGUobiwwLHIsZSwhMCkscz1bXTtpZighb3x8by5uZXh0PT09by5wcmV2KXJldHVybiBzO2lmKGkmJihvPWZ1bmN0aW9uKG4sdCxlLGkpe2xldCBvLHMsYSxsLGMscj1bXTtmb3Iobz0wLHM9dC5sZW5ndGg7bzxzO28rKylhPXRbb10qaSxsPW88cy0xP3RbbysxXSppOm4ubGVuZ3RoLGM9WWRlKG4sYSxsLGksITEpLGM9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLHIucHVzaChCOWUoYykpO2ZvcihyLnNvcnQoUjllKSxvPTA7bzxyLmxlbmd0aDtvKyspTzllKHJbb10sZSksZT13ZihlLGUubmV4dCk7cmV0dXJuIGV9KG4sdCxvLGUpKSxuLmxlbmd0aD44MCplKXthPWM9blswXSxsPXU9blsxXTtmb3IobGV0IGY9ZTtmPHI7Zis9ZSlkPW5bZl0scD1uW2YrMV0sZDxhJiYoYT1kKSxwPGwmJihsPXApLGQ+YyYmKGM9ZCkscD51JiYodT1wKTtoPU1hdGgubWF4KGMtYSx1LWwpLGg9MCE9PWg/MS9oOjB9cmV0dXJuIGNFKG8scyxlLGEsbCxoKSxzfShpLHIpO2ZvcihsZXQgbD0wO2w8YS5sZW5ndGg7bCs9MylvLnB1c2goYS5zbGljZShsLGwrMykpO3JldHVybiBvfX07ZnVuY3Rpb24geWRlKG4pe2xldCB0PW4ubGVuZ3RoO3Q+MiYmblt0LTFdLmVxdWFscyhuWzBdKSYmbi5wb3AoKX1mdW5jdGlvbiBiZGUobix0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyluLnB1c2godFtlXS54KSxuLnB1c2godFtlXS55KX12YXIgU2Y9Y2xhc3MgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcih0PW5ldyBJcChbbmV3IGF0KC41LC41KSxuZXcgYXQoLS41LC41KSxuZXcgYXQoLS41LC0uNSksbmV3IGF0KC41LC0uNSldKSxlPXt9KXtzdXBlcigpLHRoaXMudHlwZT0iRXh0cnVkZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczp0LG9wdGlvbnM6ZX0sdD1BcnJheS5pc0FycmF5KHQpP3Q6W3RdO2xldCBpPXRoaXMscj1bXSxvPVtdO2ZvcihsZXQgYT0wLGw9dC5sZW5ndGg7YTxsO2ErKylzKHRbYV0pO2Z1bmN0aW9uIHMoYSl7bGV0IGw9W10sYz12b2lkIDAhPT1lLmN1cnZlU2VnbWVudHM/ZS5jdXJ2ZVNlZ21lbnRzOjEyLHU9dm9pZCAwIT09ZS5zdGVwcz9lLnN0ZXBzOjEsZD12b2lkIDAhPT1lLmRlcHRoP2UuZGVwdGg6MSxwPXZvaWQgMD09PWUuYmV2ZWxFbmFibGVkfHxlLmJldmVsRW5hYmxlZCxoPXZvaWQgMCE9PWUuYmV2ZWxUaGlja25lc3M/ZS5iZXZlbFRoaWNrbmVzczouMixmPXZvaWQgMCE9PWUuYmV2ZWxTaXplP2UuYmV2ZWxTaXplOmgtLjEsbT12b2lkIDAhPT1lLmJldmVsT2Zmc2V0P2UuYmV2ZWxPZmZzZXQ6MCx4PXZvaWQgMCE9PWUuYmV2ZWxTZWdtZW50cz9lLmJldmVsU2VnbWVudHM6MyxnPWUuZXh0cnVkZVBhdGgsYj12b2lkIDAhPT1lLlVWR2VuZXJhdG9yP2UuVVZHZW5lcmF0b3I6ajllO3ZvaWQgMCE9PWUuYW1vdW50JiYoY29uc29sZS53YXJuKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLiIpLGQ9ZS5hbW91bnQpO2xldCBELGssWix6LGZlLFQ9ITE7ZyYmKEQ9Zy5nZXRTcGFjZWRQb2ludHModSksVD0hMCxwPSExLGs9Zy5jb21wdXRlRnJlbmV0RnJhbWVzKHUsITEpLFo9bmV3IGllLHo9bmV3IGllLGZlPW5ldyBpZSkscHx8KHg9MCxoPTAsZj0wLG09MCk7bGV0IHVlPWEuZXh0cmFjdFBvaW50cyhjKSxoZT11ZS5zaGFwZSx3PXVlLmhvbGVzO2lmKCFFZC5pc0Nsb2NrV2lzZShoZSkpe2hlPWhlLnJldmVyc2UoKTtmb3IobGV0IGNlPTAsZHQ9dy5sZW5ndGg7Y2U8ZHQ7Y2UrKyl7bGV0IFdlPXdbY2VdO0VkLmlzQ2xvY2tXaXNlKFdlKSYmKHdbY2VdPVdlLnJldmVyc2UoKSl9fWxldCBxPUVkLnRyaWFuZ3VsYXRlU2hhcGUoaGUsdyksSz1oZTtmb3IobGV0IGNlPTAsZHQ9dy5sZW5ndGg7Y2U8ZHQ7Y2UrKyloZT1oZS5jb25jYXQod1tjZV0pO2Z1bmN0aW9uIGRlKGNlLGR0LFdlKXtyZXR1cm4gZHR8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0IiksZHQuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihXZSkuYWRkKGNlKX1sZXQgWT1oZS5sZW5ndGgsYWU9cS5sZW5ndGg7ZnVuY3Rpb24gbGUoY2UsZHQsV2Upe2xldCBNdCxidCxobixvbj1jZS54LWR0LngsZmk9Y2UueS1kdC55LFdpPVdlLngtY2UueCxxaT1XZS55LWNlLnksZWU9b24qb24rZmkqZmk7aWYoTWF0aC5hYnMob24qcWktZmkqV2kpPk51bWJlci5FUFNJTE9OKXtsZXQgWGU9TWF0aC5zcXJ0KGVlKSxUdD1NYXRoLnNxcnQoV2kqV2krcWkqcWkpLG1uPWR0LngtZmkvWGUscWU9ZHQueStvbi9YZSx6dD0oKFdlLngtcWkvVHQtbW4pKnFpLShXZS55K1dpL1R0LXFlKSpXaSkvKG9uKnFpLWZpKldpKTtNdD1tbitvbip6dC1jZS54LGJ0PXFlK2ZpKnp0LWNlLnk7bGV0IFV0PU10Kk10K2J0KmJ0O2lmKFV0PD0yKXJldHVybiBuZXcgYXQoTXQsYnQpO2huPU1hdGguc3FydChVdC8yKX1lbHNle2xldCBYZT0hMTtvbj5OdW1iZXIuRVBTSUxPTj9XaT5OdW1iZXIuRVBTSUxPTiYmKFhlPSEwKTpvbjwtTnVtYmVyLkVQU0lMT04/V2k8LU51bWJlci5FUFNJTE9OJiYoWGU9ITApOk1hdGguc2lnbihmaSk9PT1NYXRoLnNpZ24ocWkpJiYoWGU9ITApLFhlPyhNdD0tZmksYnQ9b24saG49TWF0aC5zcXJ0KGVlKSk6KE10PW9uLGJ0PWZpLGhuPU1hdGguc3FydChlZS8yKSl9cmV0dXJuIG5ldyBhdChNdC9obixidC9obil9bGV0IEllPVtdO2ZvcihsZXQgY2U9MCxkdD1LLmxlbmd0aCxXZT1kdC0xLE10PWNlKzE7Y2U8ZHQ7Y2UrKyxXZSsrLE10KyspV2U9PT1kdCYmKFdlPTApLE10PT09ZHQmJihNdD0wKSxJZVtjZV09bGUoS1tjZV0sS1tXZV0sS1tNdF0pO2xldCBEZSx2ZT1bXSxudD1JZS5jb25jYXQoKTtmb3IobGV0IGNlPTAsZHQ9dy5sZW5ndGg7Y2U8ZHQ7Y2UrKyl7bGV0IFdlPXdbY2VdO0RlPVtdO2ZvcihsZXQgTXQ9MCxidD1XZS5sZW5ndGgsaG49YnQtMSxvbj1NdCsxO010PGJ0O010KyssaG4rKyxvbisrKWhuPT09YnQmJihobj0wKSxvbj09PWJ0JiYob249MCksRGVbTXRdPWxlKFdlW010XSxXZVtobl0sV2Vbb25dKTt2ZS5wdXNoKERlKSxudD1udC5jb25jYXQoRGUpfWZvcihsZXQgY2U9MDtjZTx4O2NlKyspe2xldCBkdD1jZS94LFdlPWgqTWF0aC5jb3MoZHQqTWF0aC5QSS8yKSxNdD1mKk1hdGguc2luKGR0Kk1hdGguUEkvMikrbTtmb3IobGV0IGJ0PTAsaG49Sy5sZW5ndGg7YnQ8aG47YnQrKyl7bGV0IG9uPWRlKEtbYnRdLEllW2J0XSxNdCk7cHQob24ueCxvbi55LC1XZSl9Zm9yKGxldCBidD0wLGhuPXcubGVuZ3RoO2J0PGhuO2J0Kyspe2xldCBvbj13W2J0XTtEZT12ZVtidF07Zm9yKGxldCBmaT0wLFdpPW9uLmxlbmd0aDtmaTxXaTtmaSsrKXtsZXQgcWk9ZGUob25bZmldLERlW2ZpXSxNdCk7cHQocWkueCxxaS55LC1XZSl9fX1sZXQgZ3Q9ZittO2ZvcihsZXQgY2U9MDtjZTxZO2NlKyspe2xldCBkdD1wP2RlKGhlW2NlXSxudFtjZV0sZ3QpOmhlW2NlXTtUPyh6LmNvcHkoay5ub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcihkdC54KSxaLmNvcHkoay5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGR0LnkpLGZlLmNvcHkoRFswXSkuYWRkKHopLmFkZChaKSxwdChmZS54LGZlLnksZmUueikpOnB0KGR0LngsZHQueSwwKX1mb3IobGV0IGNlPTE7Y2U8PXU7Y2UrKylmb3IobGV0IGR0PTA7ZHQ8WTtkdCsrKXtsZXQgV2U9cD9kZShoZVtkdF0sbnRbZHRdLGd0KTpoZVtkdF07VD8oei5jb3B5KGsubm9ybWFsc1tjZV0pLm11bHRpcGx5U2NhbGFyKFdlLngpLFouY29weShrLmJpbm9ybWFsc1tjZV0pLm11bHRpcGx5U2NhbGFyKFdlLnkpLGZlLmNvcHkoRFtjZV0pLmFkZCh6KS5hZGQoWikscHQoZmUueCxmZS55LGZlLnopKTpwdChXZS54LFdlLnksZC91KmNlKX1mb3IobGV0IGNlPXgtMTtjZT49MDtjZS0tKXtsZXQgZHQ9Y2UveCxXZT1oKk1hdGguY29zKGR0Kk1hdGguUEkvMiksTXQ9ZipNYXRoLnNpbihkdCpNYXRoLlBJLzIpK207Zm9yKGxldCBidD0wLGhuPUsubGVuZ3RoO2J0PGhuO2J0Kyspe2xldCBvbj1kZShLW2J0XSxJZVtidF0sTXQpO3B0KG9uLngsb24ueSxkK1dlKX1mb3IobGV0IGJ0PTAsaG49dy5sZW5ndGg7YnQ8aG47YnQrKyl7bGV0IG9uPXdbYnRdO0RlPXZlW2J0XTtmb3IobGV0IGZpPTAsV2k9b24ubGVuZ3RoO2ZpPFdpO2ZpKyspe2xldCBxaT1kZShvbltmaV0sRGVbZmldLE10KTtUP3B0KHFpLngscWkueStEW3UtMV0ueSxEW3UtMV0ueCtXZSk6cHQocWkueCxxaS55LGQrV2UpfX19ZnVuY3Rpb24gdG4oY2UsZHQpe2xldCBXZT1jZS5sZW5ndGg7Zm9yKDstLVdlPj0wOyl7bGV0IE10PVdlLGJ0PVdlLTE7YnQ8MCYmKGJ0PWNlLmxlbmd0aC0xKTtmb3IobGV0IGhuPTAsb249dSsyKng7aG48b247aG4rKyl7bGV0IGZpPVkqaG4sV2k9WSooaG4rMSk7VGUoZHQrTXQrZmksZHQrYnQrZmksZHQrYnQrV2ksZHQrTXQrV2kpfX19ZnVuY3Rpb24gcHQoY2UsZHQsV2Upe2wucHVzaChjZSksbC5wdXNoKGR0KSxsLnB1c2goV2UpfWZ1bmN0aW9uIHd0KGNlLGR0LFdlKXt4dChjZSkseHQoZHQpLHh0KFdlKTtsZXQgTXQ9ci5sZW5ndGgvMyxidD1iLmdlbmVyYXRlVG9wVVYoaSxyLE10LTMsTXQtMixNdC0xKTttdChidFswXSksbXQoYnRbMV0pLG10KGJ0WzJdKX1mdW5jdGlvbiBUZShjZSxkdCxXZSxNdCl7eHQoY2UpLHh0KGR0KSx4dChNdCkseHQoZHQpLHh0KFdlKSx4dChNdCk7bGV0IGJ0PXIubGVuZ3RoLzMsaG49Yi5nZW5lcmF0ZVNpZGVXYWxsVVYoaSxyLGJ0LTYsYnQtMyxidC0yLGJ0LTEpO210KGhuWzBdKSxtdChoblsxXSksbXQoaG5bM10pLG10KGhuWzFdKSxtdChoblsyXSksbXQoaG5bM10pfWZ1bmN0aW9uIHh0KGNlKXtyLnB1c2gobFszKmNlKzBdKSxyLnB1c2gobFszKmNlKzFdKSxyLnB1c2gobFszKmNlKzJdKX1mdW5jdGlvbiBtdChjZSl7by5wdXNoKGNlLngpLG8ucHVzaChjZS55KX0oZnVuY3Rpb24oKXtsZXQgY2U9ci5sZW5ndGgvMztpZihwKXtsZXQgZHQ9MCxXZT1ZKmR0O2ZvcihsZXQgTXQ9MDtNdDxhZTtNdCsrKXtsZXQgYnQ9cVtNdF07d3QoYnRbMl0rV2UsYnRbMV0rV2UsYnRbMF0rV2UpfWR0PXUrMip4LFdlPVkqZHQ7Zm9yKGxldCBNdD0wO010PGFlO010Kyspe2xldCBidD1xW010XTt3dChidFswXStXZSxidFsxXStXZSxidFsyXStXZSl9fWVsc2V7Zm9yKGxldCBkdD0wO2R0PGFlO2R0Kyspe2xldCBXZT1xW2R0XTt3dChXZVsyXSxXZVsxXSxXZVswXSl9Zm9yKGxldCBkdD0wO2R0PGFlO2R0Kyspe2xldCBXZT1xW2R0XTt3dChXZVswXStZKnUsV2VbMV0rWSp1LFdlWzJdK1kqdSl9fWkuYWRkR3JvdXAoY2Usci5sZW5ndGgvMy1jZSwwKX0pKCksZnVuY3Rpb24oKXtsZXQgY2U9ci5sZW5ndGgvMyxkdD0wO3RuKEssZHQpLGR0Kz1LLmxlbmd0aDtmb3IobGV0IFdlPTAsTXQ9dy5sZW5ndGg7V2U8TXQ7V2UrKyl7bGV0IGJ0PXdbV2VdO3RuKGJ0LGR0KSxkdCs9YnQubGVuZ3RofWkuYWRkR3JvdXAoY2Usci5sZW5ndGgvMy1jZSwxKX0oKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKcihyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKcihvLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCl9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtpZihlLnNoYXBlcz1bXSxBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgaT0wLHI9bi5sZW5ndGg7aTxyO2krKyllLnNoYXBlcy5wdXNoKG5baV0udXVpZCk7ZWxzZSBlLnNoYXBlcy5wdXNoKG4udXVpZCk7cmV0dXJuIHZvaWQgMCE9PXQuZXh0cnVkZVBhdGgmJihlLm9wdGlvbnMuZXh0cnVkZVBhdGg9dC5leHRydWRlUGF0aC50b0pTT04oKSksZX0odGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyx0aGlzLnBhcmFtZXRlcnMub3B0aW9ucyx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IG89MCxzPXQuc2hhcGVzLmxlbmd0aDtvPHM7bysrKWkucHVzaChlW3Quc2hhcGVzW29dXSk7bGV0IHI9dC5vcHRpb25zLmV4dHJ1ZGVQYXRoO3JldHVybiB2b2lkIDAhPT1yJiYodC5vcHRpb25zLmV4dHJ1ZGVQYXRoPShuZXcgcWRlW3IudHlwZV0pLmZyb21KU09OKHIpKSxuZXcgU2YoaSx0Lm9wdGlvbnMpfX0sajllPXtnZW5lcmF0ZVRvcFVWOmZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IGE9dFszKmldLGw9dFszKmkrMV0sYz10WzMqcl0sdT10WzMqcisxXTtyZXR1cm5bbmV3IGF0KHRbMyplXSx0WzMqZSsxXSksbmV3IGF0KGEsbCksbmV3IGF0KGMsdSldfSxnZW5lcmF0ZVNpZGVXYWxsVVY6ZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPXRbMyplXSxhPXRbMyplKzFdLGw9dFszKmUrMl0sYz10WzMqaV0sdT10WzMqaSsxXSxkPXRbMyppKzJdLHA9dFszKnJdLGg9dFszKnIrMV0sZj10WzMqcisyXSxtPXRbMypvXSx4PXRbMypvKzFdLGc9dFszKm8rMl07cmV0dXJuIE1hdGguYWJzKGEtdSk8TWF0aC5hYnMocy1jKT9bbmV3IGF0KHMsMS1sKSxuZXcgYXQoYywxLWQpLG5ldyBhdChwLDEtZiksbmV3IGF0KG0sMS1nKV06W25ldyBhdChhLDEtbCksbmV3IGF0KHUsMS1kKSxuZXcgYXQoaCwxLWYpLG5ldyBhdCh4LDEtZyldfX0sUWc9Y2xhc3MgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcih0PW5ldyBJcChbbmV3IGF0KDAsLjUpLG5ldyBhdCgtLjUsLS41KSxuZXcgYXQoLjUsLS41KV0pLGU9MTIpe3N1cGVyKCksdGhpcy50eXBlPSJTaGFwZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczp0LGN1cnZlU2VnbWVudHM6ZX07bGV0IGk9W10scj1bXSxvPVtdLHM9W10sYT0wLGw9MDtpZighMT09PUFycmF5LmlzQXJyYXkodCkpYyh0KTtlbHNlIGZvcihsZXQgdT0wO3U8dC5sZW5ndGg7dSsrKWModFt1XSksdGhpcy5hZGRHcm91cChhLGwsdSksYSs9bCxsPTA7ZnVuY3Rpb24gYyh1KXtsZXQgZD1yLmxlbmd0aC8zLHA9dS5leHRyYWN0UG9pbnRzKGUpLGg9cC5zaGFwZSxmPXAuaG9sZXM7ITE9PT1FZC5pc0Nsb2NrV2lzZShoKSYmKGg9aC5yZXZlcnNlKCkpO2ZvcihsZXQgeD0wLGc9Zi5sZW5ndGg7eDxnO3grKyl7bGV0IGI9Zlt4XTshMD09PUVkLmlzQ2xvY2tXaXNlKGIpJiYoZlt4XT1iLnJldmVyc2UoKSl9bGV0IG09RWQudHJpYW5ndWxhdGVTaGFwZShoLGYpO2ZvcihsZXQgeD0wLGc9Zi5sZW5ndGg7eDxnO3grKyloPWguY29uY2F0KGZbeF0pO2ZvcihsZXQgeD0wLGc9aC5sZW5ndGg7eDxnO3grKyl7bGV0IGI9aFt4XTtyLnB1c2goYi54LGIueSwwKSxvLnB1c2goMCwwLDEpLHMucHVzaChiLngsYi55KX1mb3IobGV0IHg9MCxnPW0ubGVuZ3RoO3g8Zzt4Kyspe2xldCBiPW1beF07aS5wdXNoKGJbMF0rZCxiWzFdK2QsYlsyXStkKSxsKz0zfX10aGlzLnNldEluZGV4KGkpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEpyKHIsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBKcihvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKcihzLDIpKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gZnVuY3Rpb24obix0KXtpZih0LnNoYXBlcz1bXSxBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgZT0wLGk9bi5sZW5ndGg7ZTxpO2UrKyl0LnNoYXBlcy5wdXNoKG5bZV0udXVpZCk7ZWxzZSB0LnNoYXBlcy5wdXNoKG4udXVpZCk7cmV0dXJuIHR9KHRoaXMucGFyYW1ldGVycy5zaGFwZXMsdCl9c3RhdGljIGZyb21KU09OKHQsZSl7bGV0IGk9W107Zm9yKGxldCByPTAsbz10LnNoYXBlcy5sZW5ndGg7cjxvO3IrKylpLnB1c2goZVt0LnNoYXBlc1tyXV0pO3JldHVybiBuZXcgUWcoaSx0LmN1cnZlU2VnbWVudHMpfX07KGNsYXNzIGV4dGVuZHMgaHN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYWRvd01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyB2bigwKSx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXN9fSkucHJvdG90eXBlLmlzU2hhZG93TWF0ZXJpYWw9ITA7dmFyIENrPWNsYXNzIGV4dGVuZHMgaHN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLnR5cGU9Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyB2bigxNjc3NzIxNSksdGhpcy5yb3VnaG5lc3M9MSx0aGlzLm1ldGFsbmVzcz0wLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IHZuKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IGF0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5yb3VnaG5lc3NNYXA9bnVsbCx0aGlzLm1ldGFsbmVzc01hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuZW52TWFwSW50ZW5zaXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MsdGhpcy5tZXRhbG5lc3M9dC5tZXRhbG5lc3MsdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5yb3VnaG5lc3NNYXA9dC5yb3VnaG5lc3NNYXAsdGhpcy5tZXRhbG5lc3NNYXA9dC5tZXRhbG5lc3NNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuZW52TWFwSW50ZW5zaXR5PXQuZW52TWFwSW50ZW5zaXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07Q2sucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBDa3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiLHRoaXMuY2xlYXJjb2F0TWFwPW51bGwsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9MCx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD1udWxsLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IGF0KDEsMSksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9bnVsbCx0aGlzLmlvcj0xLjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInJlZmxlY3Rpdml0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBHYSgyLjUqKHRoaXMuaW9yLTEpLyh0aGlzLmlvcisxKSwwLDEpfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5pb3I9KDErLjQqZSkvKDEtLjQqZSl9fSksdGhpcy5zaGVlbkNvbG9yPW5ldyB2bigwKSx0aGlzLnNoZWVuQ29sb3JNYXA9bnVsbCx0aGlzLnNoZWVuUm91Z2huZXNzPTEsdGhpcy5zaGVlblJvdWdobmVzc01hcD1udWxsLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy50aGlja25lc3M9MCx0aGlzLnRoaWNrbmVzc01hcD1udWxsLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT0wLHRoaXMuYXR0ZW51YXRpb25Db2xvcj1uZXcgdm4oMSwxLDEpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPW51bGwsdGhpcy5zcGVjdWxhckNvbG9yPW5ldyB2bigxLDEsMSksdGhpcy5zcGVjdWxhckNvbG9yTWFwPW51bGwsdGhpcy5fc2hlZW49MCx0aGlzLl9jbGVhcmNvYXQ9MCx0aGlzLl90cmFuc21pc3Npb249MCx0aGlzLnNldFZhbHVlcyh0KX1nZXQgc2hlZW4oKXtyZXR1cm4gdGhpcy5fc2hlZW59c2V0IHNoZWVuKHQpe3RoaXMuX3NoZWVuPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fc2hlZW49dH1nZXQgY2xlYXJjb2F0KCl7cmV0dXJuIHRoaXMuX2NsZWFyY29hdH1zZXQgY2xlYXJjb2F0KHQpe3RoaXMuX2NsZWFyY29hdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2NsZWFyY29hdD10fWdldCB0cmFuc21pc3Npb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNtaXNzaW9ufXNldCB0cmFuc21pc3Npb24odCl7dGhpcy5fdHJhbnNtaXNzaW9uPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fdHJhbnNtaXNzaW9uPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5pb3I9dC5pb3IsdGhpcy5zaGVlbj10LnNoZWVuLHRoaXMuc2hlZW5Db2xvci5jb3B5KHQuc2hlZW5Db2xvciksdGhpcy5zaGVlbkNvbG9yTWFwPXQuc2hlZW5Db2xvck1hcCx0aGlzLnNoZWVuUm91Z2huZXNzPXQuc2hlZW5Sb3VnaG5lc3MsdGhpcy5zaGVlblJvdWdobmVzc01hcD10LnNoZWVuUm91Z2huZXNzTWFwLHRoaXMudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uLHRoaXMudHJhbnNtaXNzaW9uTWFwPXQudHJhbnNtaXNzaW9uTWFwLHRoaXMudGhpY2tuZXNzPXQudGhpY2tuZXNzLHRoaXMudGhpY2tuZXNzTWFwPXQudGhpY2tuZXNzTWFwLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UsdGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkodC5hdHRlbnVhdGlvbkNvbG9yKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PXQuc3BlY3VsYXJJbnRlbnNpdHksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD10LnNwZWN1bGFySW50ZW5zaXR5TWFwLHRoaXMuc3BlY3VsYXJDb2xvci5jb3B5KHQuc3BlY3VsYXJDb2xvciksdGhpcy5zcGVjdWxhckNvbG9yTWFwPXQuc3BlY3VsYXJDb2xvck1hcCx0aGlzfX0ucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBoc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaFBob25nTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHZuKDE2Nzc3MjE1KSx0aGlzLnNwZWN1bGFyPW5ldyB2bigxMTE4NDgxKSx0aGlzLnNoaW5pbmVzcz0zMCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyB2bigwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBhdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9MCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIGhze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtUT09OOiIifSx0aGlzLnR5cGU9Ik1lc2hUb29uTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHZuKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuZ3JhZGllbnRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgdm4oMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgYXQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5ncmFkaWVudE1hcD10LmdyYWRpZW50TWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX0ucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIGhze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBhdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoTm9ybWFsTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBoc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgdm4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IHZuKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT0wLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319LnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBoc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17TUFUQ0FQOiIifSx0aGlzLnR5cGU9Ik1lc2hNYXRjYXBNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgdm4oMTY3NzcyMTUpLHRoaXMubWF0Y2FwPW51bGwsdGhpcy5tYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgYXQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17TUFUQ0FQOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXRjYXA9dC5tYXRjYXAsdGhpcy5tYXA9dC5tYXAsdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBBcHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fS5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIHFyPXthcnJheVNsaWNlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gcXIuaXNUeXBlZEFycmF5KG4pP25ldyBuLmNvbnN0cnVjdG9yKG4uc3ViYXJyYXkodCx2b2lkIDAhPT1lP2U6bi5sZW5ndGgpKTpuLnNsaWNlKHQsZSl9LGNvbnZlcnRBcnJheTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIW58fCFlJiZuLmNvbnN0cnVjdG9yPT09dD9uOiJudW1iZXIiPT10eXBlb2YgdC5CWVRFU19QRVJfRUxFTUVOVD9uZXcgdChuKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKX0saXNUeXBlZEFycmF5OmZ1bmN0aW9uKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX0sZ2V0S2V5ZnJhbWVPcmRlcjpmdW5jdGlvbihuKXtsZXQgZT1uLmxlbmd0aCxpPW5ldyBBcnJheShlKTtmb3IobGV0IHI9MDtyIT09ZTsrK3IpaVtyXT1yO3JldHVybiBpLnNvcnQoZnVuY3Rpb24ocixvKXtyZXR1cm4gbltyXS1uW29dfSksaX0sc29ydGVkQXJyYXk6ZnVuY3Rpb24obix0LGUpe2xldCBpPW4ubGVuZ3RoLHI9bmV3IG4uY29uc3RydWN0b3IoaSk7Zm9yKGxldCBvPTAscz0wO3MhPT1pOysrbyl7bGV0IGE9ZVtvXSp0O2ZvcihsZXQgbD0wO2whPT10OysrbClyW3MrK109blthK2xdfXJldHVybiByfSxmbGF0dGVuSlNPTjpmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xLG89blswXTtmb3IoO3ZvaWQgMCE9PW8mJnZvaWQgMD09PW9baV07KW89bltyKytdO2lmKHZvaWQgMD09PW8pcmV0dXJuO2xldCBzPW9baV07aWYodm9pZCAwIT09cylpZihBcnJheS5pc0FycmF5KHMpKWRve3M9b1tpXSx2b2lkIDAhPT1zJiYodC5wdXNoKG8udGltZSksZS5wdXNoLmFwcGx5KGUscykpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pO2Vsc2UgaWYodm9pZCAwIT09cy50b0FycmF5KWRve3M9b1tpXSx2b2lkIDAhPT1zJiYodC5wdXNoKG8udGltZSkscy50b0FycmF5KGUsZS5sZW5ndGgpKSxvPW5bcisrXX13aGlsZSh2b2lkIDAhPT1vKTtlbHNlIGRve3M9b1tpXSx2b2lkIDAhPT1zJiYodC5wdXNoKG8udGltZSksZS5wdXNoKHMpKSxvPW5bcisrXX13aGlsZSh2b2lkIDAhPT1vKX0sc3ViY2xpcDpmdW5jdGlvbihuLHQsZSxpLHI9MzApe2xldCBvPW4uY2xvbmUoKTtvLm5hbWU9dDtsZXQgcz1bXTtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpe2xldCBjPW8udHJhY2tzW2xdLHU9Yy5nZXRWYWx1ZVNpemUoKSxkPVtdLHA9W107Zm9yKGxldCBoPTA7aDxjLnRpbWVzLmxlbmd0aDsrK2gpe2xldCBmPWMudGltZXNbaF0qcjtpZighKGY8ZXx8Zj49aSkpe2QucHVzaChjLnRpbWVzW2hdKTtmb3IobGV0IG09MDttPHU7KyttKXAucHVzaChjLnZhbHVlc1toKnUrbV0pfX0wIT09ZC5sZW5ndGgmJihjLnRpbWVzPXFyLmNvbnZlcnRBcnJheShkLGMudGltZXMuY29uc3RydWN0b3IpLGMudmFsdWVzPXFyLmNvbnZlcnRBcnJheShwLGMudmFsdWVzLmNvbnN0cnVjdG9yKSxzLnB1c2goYykpfW8udHJhY2tzPXM7bGV0IGE9MS8wO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbClhPm8udHJhY2tzW2xdLnRpbWVzWzBdJiYoYT1vLnRyYWNrc1tsXS50aW1lc1swXSk7Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKW8udHJhY2tzW2xdLnNoaWZ0KC0xKmEpO3JldHVybiBvLnJlc2V0RHVyYXRpb24oKSxvfSxtYWtlQ2xpcEFkZGl0aXZlOmZ1bmN0aW9uKG4sdD0wLGU9bixpPTMwKXtpPD0wJiYoaT0zMCk7bGV0IHI9ZS50cmFja3MubGVuZ3RoLG89dC9pO2ZvcihsZXQgcz0wO3M8cjsrK3Mpe2xldCBhPWUudHJhY2tzW3NdLGw9YS5WYWx1ZVR5cGVOYW1lO2lmKCJib29sIj09PWx8fCJzdHJpbmciPT09bCljb250aW51ZTtsZXQgYz1uLnRyYWNrcy5maW5kKGZ1bmN0aW9uKGcpe3JldHVybiBnLm5hbWU9PT1hLm5hbWUmJmcuVmFsdWVUeXBlTmFtZT09PWx9KTtpZih2b2lkIDA9PT1jKWNvbnRpbnVlO2xldCB1PTAsZD1hLmdldFZhbHVlU2l6ZSgpO2EuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJih1PWQvMyk7bGV0IHA9MCxoPWMuZ2V0VmFsdWVTaXplKCk7Yy5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHA9aC8zKTtsZXQgbSxmPWEudGltZXMubGVuZ3RoLTE7aWYobzw9YS50aW1lc1swXSltPXFyLmFycmF5U2xpY2UoYS52YWx1ZXMsdSxkLXUpO2Vsc2UgaWYobz49YS50aW1lc1tmXSl7bGV0IGc9ZipkK3U7bT1xci5hcnJheVNsaWNlKGEudmFsdWVzLGcsZytkLXUpfWVsc2V7bGV0IGc9YS5jcmVhdGVJbnRlcnBvbGFudCgpLGI9dSxEPWQtdTtnLmV2YWx1YXRlKG8pLG09cXIuYXJyYXlTbGljZShnLnJlc3VsdEJ1ZmZlcixiLEQpfSJxdWF0ZXJuaW9uIj09PWwmJihuZXcgcXMpLmZyb21BcnJheShtKS5ub3JtYWxpemUoKS5jb25qdWdhdGUoKS50b0FycmF5KG0pO2xldCB4PWMudGltZXMubGVuZ3RoO2ZvcihsZXQgZz0wO2c8eDsrK2cpe2xldCBiPWcqaCtwO2lmKCJxdWF0ZXJuaW9uIj09PWwpcXMubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoYy52YWx1ZXMsYixtLDAsYy52YWx1ZXMsYik7ZWxzZXtsZXQgRD1oLTIqcDtmb3IobGV0IFQ9MDtUPEQ7KytUKWMudmFsdWVzW2IrVF0tPW1bVF19fX1yZXR1cm4gbi5ibGVuZE1vZGU9MjUwMSxufX0sVGQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXZvaWQgMCE9PXI/cjpuZXcgZS5jb25zdHJ1Y3RvcihpKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPWksdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtsZXQgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxpPXRoaXMuX2NhY2hlZEluZGV4LHI9ZVtpXSxvPWVbaS0xXTtlOnt0OntsZXQgcztuOntpOmlmKCEodDxyKSl7Zm9yKGxldCBhPWkrMjs7KXtpZih2b2lkIDA9PT1yKXtpZih0PG8pYnJlYWsgaTtyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSx0LG8pfWlmKGk9PT1hKWJyZWFrO2lmKG89cixyPWVbKytpXSx0PHIpYnJlYWsgdH1zPWUubGVuZ3RoO2JyZWFrIG59aWYodD49bylicmVhayBlO3tsZXQgYT1lWzFdO3Q8YSYmKGk9MixvPWEpO2ZvcihsZXQgbD1pLTI7Oyl7aWYodm9pZCAwPT09bylyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQscik7aWYoaT09PWwpYnJlYWs7aWYocj1vLG89ZVstLWktMV0sdD49bylicmVhayB0fXM9aSxpPTB9fWZvcig7aTxzOyl7bGV0IGE9aStzPj4+MTt0PGVbYV0/cz1hOmk9YSsxfWlmKHI9ZVtpXSxvPWVbaS0xXSx2b2lkIDA9PT1vKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxyKTtpZih2b2lkIDA9PT1yKXJldHVybiBpPWUubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5hZnRlckVuZF8oaS0xLG8sdCl9dGhpcy5fY2FjaGVkSW5kZXg9aSx0aGlzLmludGVydmFsQ2hhbmdlZF8oaSxvLHIpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhpLG8sdCxyKX1nZXRTZXR0aW5nc18oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffWNvcHlTYW1wbGVWYWx1ZV8odCl7bGV0IGU9dGhpcy5yZXN1bHRCdWZmZXIsaT10aGlzLnNhbXBsZVZhbHVlcyxyPXRoaXMudmFsdWVTaXplLG89dCpyO2ZvcihsZXQgcz0wO3MhPT1yOysrcyllW3NdPWlbbytzXTtyZXR1cm4gZX1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319O1RkLnByb3RvdHlwZS5iZWZvcmVTdGFydF89VGQucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sVGQucHJvdG90eXBlLmFmdGVyRW5kXz1UZC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXzt2YXIgRzg9Y2xhc3MgZXh0ZW5kcyBUZHtjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKSx0aGlzLl93ZWlnaHRQcmV2PS0wLHRoaXMuX29mZnNldFByZXY9LTAsdGhpcy5fd2VpZ2h0TmV4dD0tMCx0aGlzLl9vZmZzZXROZXh0PS0wLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17ZW5kaW5nU3RhcnQ6b2IsZW5kaW5nRW5kOm9ifX1pbnRlcnZhbENoYW5nZWRfKHQsZSxpKXtsZXQgcj10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxvPXQtMixzPXQrMSxhPXJbb10sbD1yW3NdO2lmKHZvaWQgMD09PWEpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2Ugc2I6bz10LGE9MiplLWk7YnJlYWs7Y2FzZSAyNDAyOm89ci5sZW5ndGgtMixhPWUrcltvXS1yW28rMV07YnJlYWs7ZGVmYXVsdDpvPXQsYT1pfWlmKHZvaWQgMD09PWwpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nRW5kKXtjYXNlIHNiOnM9dCxsPTIqaS1lO2JyZWFrO2Nhc2UgMjQwMjpzPTEsbD1pK3JbMV0tclswXTticmVhaztkZWZhdWx0OnM9dC0xLGw9ZX1sZXQgYz0uNSooaS1lKSx1PXRoaXMudmFsdWVTaXplO3RoaXMuX3dlaWdodFByZXY9Yy8oZS1hKSx0aGlzLl93ZWlnaHROZXh0PWMvKGwtaSksdGhpcy5fb2Zmc2V0UHJldj1vKnUsdGhpcy5fb2Zmc2V0TmV4dD1zKnV9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLHM9dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSx1PXRoaXMuX29mZnNldFByZXYsZD10aGlzLl9vZmZzZXROZXh0LHA9dGhpcy5fd2VpZ2h0UHJldixoPXRoaXMuX3dlaWdodE5leHQsZj0oaS1lKS8oci1lKSxtPWYqZix4PW0qZixnPS1wKngrMipwKm0tcCpmLGI9KDErcCkqeCsoLTEuNS0yKnApKm0rKC0uNStwKSpmKzEsRD0oLTEtaCkqeCsoMS41K2gpKm0rLjUqZixUPWgqeC1oKm07Zm9yKGxldCBrPTA7ayE9PWE7KytrKW9ba109ZypzW3Ura10rYipzW2Mra10rRCpzW2wra10rVCpzW2Qra107cmV0dXJuIG99fSxNaz1jbGFzcyBleHRlbmRzIFRke2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixzPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUsbD10KmEsYz1sLWEsdT0oaS1lKS8oci1lKSxkPTEtdTtmb3IobGV0IHA9MDtwIT09YTsrK3Apb1twXT1zW2MrcF0qZCtzW2wrcF0qdTtyZXR1cm4gb319LFc4PWNsYXNzIGV4dGVuZHMgVGR7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQpe3JldHVybiB0aGlzLmNvcHlTYW1wbGVWYWx1ZV8odC0xKX19LGhjPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKHZvaWQgMD09PWV8fDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK3QpO3RoaXMubmFtZT10LHRoaXMudGltZXM9cXIuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9cXIuY29udmVydEFycmF5KGksdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpLHRoaXMuc2V0SW50ZXJwb2xhdGlvbihyfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1zdGF0aWMgdG9KU09OKHQpe2xldCBpLGU9dC5jb25zdHJ1Y3RvcjtpZihlLnRvSlNPTiE9PXRoaXMudG9KU09OKWk9ZS50b0pTT04odCk7ZWxzZXtpPXtuYW1lOnQubmFtZSx0aW1lczpxci5jb252ZXJ0QXJyYXkodC50aW1lcyxBcnJheSksdmFsdWVzOnFyLmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2xldCByPXQuZ2V0SW50ZXJwb2xhdGlvbigpO3IhPT10LkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoaS5pbnRlcnBvbGF0aW9uPXIpfXJldHVybiBpLnR5cGU9dC5WYWx1ZVR5cGVOYW1lLGl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUodCl7cmV0dXJuIG5ldyBXOCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgTWsodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfUludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCh0KXtyZXR1cm4gbmV3IEc4KHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1zZXRJbnRlcnBvbGF0aW9uKHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIDIzMDA6ZT10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlO2JyZWFrO2Nhc2UgMjMwMTplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyO2JyZWFrO2Nhc2UgMjMwMjplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RofWlmKHZvaWQgMD09PWUpe2xldCBpPSJ1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAiK3RoaXMuVmFsdWVUeXBlTmFtZSsiIGtleWZyYW1lIHRyYWNrIG5hbWVkICIrdGhpcy5uYW1lO2lmKHZvaWQgMD09PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2lmKHQ9PT10aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKXRocm93IG5ldyBFcnJvcihpKTt0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil9cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuS2V5ZnJhbWVUcmFjazoiLGkpLHRoaXN9cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9ZSx0aGlzfWdldEludGVycG9sYXRpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiAyMzAwO2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6cmV0dXJuIDIzMDE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gMjMwMn19Z2V0VmFsdWVTaXplKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH1zaGlmdCh0KXtpZigwIT09dCl7bGV0IGU9dGhpcy50aW1lcztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSllW2ldKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKDEhPT10KXtsZXQgZT10aGlzLnRpbWVzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKWVbaV0qPXR9cmV0dXJuIHRoaXN9dHJpbSh0LGUpe2xldCBpPXRoaXMudGltZXMscj1pLmxlbmd0aCxvPTAscz1yLTE7Zm9yKDtvIT09ciYmaVtvXTx0OykrK287Zm9yKDstMSE9PXMmJmlbc10+ZTspLS1zO2lmKCsrcywwIT09b3x8cyE9PXIpe28+PXMmJihzPU1hdGgubWF4KHMsMSksbz1zLTEpO2xldCBhPXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1xci5hcnJheVNsaWNlKGksbyxzKSx0aGlzLnZhbHVlcz1xci5hcnJheVNsaWNlKHRoaXMudmFsdWVzLG8qYSxzKmEpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITAsZT10aGlzLmdldFZhbHVlU2l6ZSgpO2UtTWF0aC5mbG9vcihlKSE9MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IEludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjay4iLHRoaXMpLHQ9ITEpO2xldCBpPXRoaXMudGltZXMscj10aGlzLnZhbHVlcyxvPWkubGVuZ3RoOzA9PT1vJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVHJhY2sgaXMgZW1wdHkuIix0aGlzKSx0PSExKTtsZXQgcz1udWxsO2ZvcihsZXQgYT0wO2EhPT1vO2ErKyl7bGV0IGw9aVthXTtpZigibnVtYmVyIj09dHlwZW9mIGwmJmlzTmFOKGwpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUaW1lIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsYSxsKSx0PSExO2JyZWFrfWlmKG51bGwhPT1zJiZzPmwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IE91dCBvZiBvcmRlciBrZXlzLiIsdGhpcyxhLGwscyksdD0hMTticmVha31zPWx9aWYodm9pZCAwIT09ciYmcXIuaXNUeXBlZEFycmF5KHIpKWZvcihsZXQgYT0wLGw9ci5sZW5ndGg7YSE9PWw7KythKXtsZXQgYz1yW2FdO2lmKGlzTmFOKGMpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBWYWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLGEsYyksdD0hMTticmVha319cmV0dXJuIHR9b3B0aW1pemUoKXtsZXQgdD1xci5hcnJheVNsaWNlKHRoaXMudGltZXMpLGU9cXIuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyksaT10aGlzLmdldFZhbHVlU2l6ZSgpLHI9MjMwMj09PXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpLG89dC5sZW5ndGgtMSxzPTE7Zm9yKGxldCBhPTE7YTxvOysrYSl7bGV0IGw9ITEsYz10W2FdO2lmKGMhPT10W2ErMV0mJigxIT09YXx8YyE9PXRbMF0pKWlmKHIpbD0hMDtlbHNle2xldCBkPWEqaSxwPWQtaSxoPWQraTtmb3IobGV0IGY9MDtmIT09aTsrK2Ype2xldCBtPWVbZCtmXTtpZihtIT09ZVtwK2ZdfHxtIT09ZVtoK2ZdKXtsPSEwO2JyZWFrfX19aWYobCl7aWYoYSE9PXMpe3Rbc109dFthXTtsZXQgZD1hKmkscD1zKmk7Zm9yKGxldCBoPTA7aCE9PWk7KytoKWVbcCtoXT1lW2QraF19KytzfX1pZihvPjApe3Rbc109dFtvXTtmb3IobGV0IGE9byppLGw9cyppLGM9MDtjIT09aTsrK2MpZVtsK2NdPWVbYStjXTsrK3N9cmV0dXJuIHMhPT10Lmxlbmd0aD8odGhpcy50aW1lcz1xci5hcnJheVNsaWNlKHQsMCxzKSx0aGlzLnZhbHVlcz1xci5hcnJheVNsaWNlKGUsMCxzKmkpKToodGhpcy50aW1lcz10LHRoaXMudmFsdWVzPWUpLHRoaXN9Y2xvbmUoKXtsZXQgdD1xci5hcnJheVNsaWNlKHRoaXMudGltZXMsMCksZT1xci5hcnJheVNsaWNlKHRoaXMudmFsdWVzLDApLHI9bmV3KDAsdGhpcy5jb25zdHJ1Y3RvcikodGhpcy5uYW1lLHQsZSk7cmV0dXJuIHIuY3JlYXRlSW50ZXJwb2xhbnQ9dGhpcy5jcmVhdGVJbnRlcnBvbGFudCxyfX07aGMucHJvdG90eXBlLlRpbWVCdWZmZXJUeXBlPUZsb2F0MzJBcnJheSxoYy5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUZsb2F0MzJBcnJheSxoYy5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249MjMwMTt2YXIgRWY9Y2xhc3MgZXh0ZW5kcyBoY3t9O0VmLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJib29sIixFZi5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5LEVmLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAwLEVmLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwLEVmLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciB3az1jbGFzcyBleHRlbmRzIGhje307d2sucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImNvbG9yIjt2YXIgQ2I9Y2xhc3MgZXh0ZW5kcyBoY3t9O0NiLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO3ZhciBxOD1jbGFzcyBleHRlbmRzIFRke2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixzPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUsbD0oaS1lKS8oci1lKSxjPXQqYTtmb3IobGV0IHU9YythO2MhPT11O2MrPTQpcXMuc2xlcnBGbGF0KG8sMCxzLGMtYSxzLGMsbCk7cmV0dXJuIG99fSxLZz1jbGFzcyBleHRlbmRzIGhje0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IHE4KHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX19O0tnLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJxdWF0ZXJuaW9uIixLZy5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249MjMwMSxLZy5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgVGY9Y2xhc3MgZXh0ZW5kcyBoY3t9O1RmLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJzdHJpbmciLFRmLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXksVGYucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPTIzMDAsVGYucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDAsVGYucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIE1iPWNsYXNzIGV4dGVuZHMgaGN7fTtNYi5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0idmVjdG9yIjt2YXIgU2s9Y2xhc3N7Y29uc3RydWN0b3IodCxlPS0xLGkscj0yNTAwKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1pLHRoaXMuZHVyYXRpb249ZSx0aGlzLmJsZW5kTW9kZT1yLHRoaXMudXVpZD1kdSgpLHRoaXMuZHVyYXRpb248MCYmdGhpcy5yZXNldER1cmF0aW9uKCl9c3RhdGljIHBhcnNlKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj0xLyh0LmZwc3x8MSk7Zm9yKGxldCBzPTAsYT1pLmxlbmd0aDtzIT09YTsrK3MpZS5wdXNoKFk5ZShpW3NdKS5zY2FsZShyKSk7bGV0IG89bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24sZSx0LmJsZW5kTW9kZSk7cmV0dXJuIG8udXVpZD10LnV1aWQsb31zdGF0aWMgdG9KU09OKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6ZSx1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgbz0wLHM9aS5sZW5ndGg7byE9PXM7KytvKWUucHVzaChoYy50b0pTT04oaVtvXSkpO3JldHVybiByfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LGUsaSxyKXtsZXQgbz1lLmxlbmd0aCxzPVtdO2ZvcihsZXQgYT0wO2E8bzthKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChhK28tMSklbyxhLChhKzEpJW8pLGMucHVzaCgwLDEsMCk7bGV0IHU9cXIuZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPXFyLnNvcnRlZEFycmF5KGwsMSx1KSxjPXFyLnNvcnRlZEFycmF5KGMsMSx1KSwhciYmMD09PWxbMF0mJihsLnB1c2gobyksYy5wdXNoKGNbMF0pKSxzLnB1c2gobmV3IENiKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrZVthXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvaSkpfXJldHVybiBuZXcgdGhpcyh0LC0xLHMpfXN0YXRpYyBmaW5kQnlOYW1lKHQsZSl7bGV0IGk9dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IHI9dDtpPXIuZ2VvbWV0cnkmJnIuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8ci5hbmltYXRpb25zfWZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlmKGlbcl0ubmFtZT09PWUpcmV0dXJuIGlbcl07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQsZSxpKXtsZXQgcj17fSxvPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgYT0wLGw9dC5sZW5ndGg7YTxsO2ErKyl7bGV0IGM9dFthXSx1PWMubmFtZS5tYXRjaChvKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgZD11WzFdLHA9cltkXTtwfHwocltkXT1wPVtdKSxwLnB1c2goYyl9fWxldCBzPVtdO2ZvcihsZXQgYSBpbiByKXMucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKGEsclthXSxlLGkpKTtyZXR1cm4gc31zdGF0aWMgcGFyc2VBbmltYXRpb24odCxlKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBpPWZ1bmN0aW9uKGQscCxoLGYsbSl7aWYoMCE9PWgubGVuZ3RoKXtsZXQgeD1bXSxnPVtdO3FyLmZsYXR0ZW5KU09OKGgseCxnLGYpLDAhPT14Lmxlbmd0aCYmbS5wdXNoKG5ldyBkKHAseCxnKSl9fSxyPVtdLG89dC5uYW1lfHwiZGVmYXVsdCIscz10LmZwc3x8MzAsYT10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGQ9MDtkPGMubGVuZ3RoO2QrKyl7bGV0IHA9Y1tkXS5rZXlzO2lmKHAmJjAhPT1wLmxlbmd0aClpZihwWzBdLm1vcnBoVGFyZ2V0cyl7bGV0IGYsaD17fTtmb3IoZj0wO2Y8cC5sZW5ndGg7ZisrKWlmKHBbZl0ubW9ycGhUYXJnZXRzKWZvcihsZXQgbT0wO208cFtmXS5tb3JwaFRhcmdldHMubGVuZ3RoO20rKyloW3BbZl0ubW9ycGhUYXJnZXRzW21dXT0tMTtmb3IobGV0IG0gaW4gaCl7bGV0IHg9W10sZz1bXTtmb3IobGV0IGI9MDtiIT09cFtmXS5tb3JwaFRhcmdldHMubGVuZ3RoOysrYil7bGV0IEQ9cFtmXTt4LnB1c2goRC50aW1lKSxnLnB1c2goRC5tb3JwaFRhcmdldD09PW0/MTowKX1yLnB1c2gobmV3IENiKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VbIittKyJdIix4LGcpKX1sPWgubGVuZ3RoKihzfHwxKX1lbHNle2xldCBoPSIuYm9uZXNbIitlW2RdLm5hbWUrIl0iO2koTWIsaCsiLnBvc2l0aW9uIixwLCJwb3MiLHIpLGkoS2csaCsiLnF1YXRlcm5pb24iLHAsInJvdCIsciksaShNYixoKyIuc2NhbGUiLHAsInNjbCIscil9fXJldHVybiAwPT09ci5sZW5ndGg/bnVsbDpuZXcgdGhpcyhvLGwscixhKX1yZXNldER1cmF0aW9uKCl7bGV0IGU9MDtmb3IobGV0IGk9MCxyPXRoaXMudHJhY2tzLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPXRoaXMudHJhY2tzW2ldO2U9TWF0aC5tYXgoZSxvLnRpbWVzW28udGltZXMubGVuZ3RoLTFdKX1yZXR1cm4gdGhpcy5kdXJhdGlvbj1lLHRoaXN9dHJpbSgpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS50cmltKDAsdGhpcy5kdXJhdGlvbik7cmV0dXJuIHRoaXN9dmFsaWRhdGUoKXtsZXQgdD0hMDtmb3IobGV0IGU9MDtlPHRoaXMudHJhY2tzLmxlbmd0aDtlKyspdD10JiZ0aGlzLnRyYWNrc1tlXS52YWxpZGF0ZSgpO3JldHVybiB0fW9wdGltaXplKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLm9wdGltaXplKCk7cmV0dXJuIHRoaXN9Y2xvbmUoKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPHRoaXMudHJhY2tzLmxlbmd0aDtlKyspdC5wdXNoKHRoaXMudHJhY2tzW2VdLmNsb25lKCkpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLm5hbWUsdGhpcy5kdXJhdGlvbix0LHRoaXMuYmxlbmRNb2RlKX10b0pTT04oKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b0pTT04odGhpcyl9fTtmdW5jdGlvbiBZOWUobil7aWYodm9pZCAwPT09bi50eXBlKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtsZXQgdD1mdW5jdGlvbihuKXtzd2l0Y2gobi50b0xvd2VyQ2FzZSgpKXtjYXNlInNjYWxhciI6Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQiOmNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOnJldHVybiBDYjtjYXNlInZlY3RvciI6Y2FzZSJ2ZWN0b3IyIjpjYXNlInZlY3RvcjMiOmNhc2UidmVjdG9yNCI6cmV0dXJuIE1iO2Nhc2UiY29sb3IiOnJldHVybiB3aztjYXNlInF1YXRlcm5pb24iOnJldHVybiBLZztjYXNlImJvb2wiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIEVmO2Nhc2Uic3RyaW5nIjpyZXR1cm4gVGZ9dGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogIituKX0obi50eXBlKTtpZih2b2lkIDA9PT1uLnRpbWVzKXtsZXQgZT1bXSxpPVtdO3FyLmZsYXR0ZW5KU09OKG4ua2V5cyxlLGksInZhbHVlIiksbi50aW1lcz1lLG4udmFsdWVzPWl9cmV0dXJuIHZvaWQgMCE9PXQucGFyc2U/dC5wYXJzZShuKTpuZXcgdChuLm5hbWUsbi50aW1lcyxuLnZhbHVlcyxuLmludGVycG9sYXRpb24pfXZhciB3Yj17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24obix0KXshMSE9PXRoaXMuZW5hYmxlZCYmKHRoaXMuZmlsZXNbbl09dCl9LGdldDpmdW5jdGlvbihuKXtpZighMSE9PXRoaXMuZW5hYmxlZClyZXR1cm4gdGhpcy5maWxlc1tuXX0scmVtb3ZlOmZ1bmN0aW9uKG4pe2RlbGV0ZSB0aGlzLmZpbGVzW25dfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxYOWU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgbCxyPXRoaXMsbz0hMSxzPTAsYT0wLGM9W107dGhpcy5vblN0YXJ0PXZvaWQgMCx0aGlzLm9uTG9hZD10LHRoaXMub25Qcm9ncmVzcz1lLHRoaXMub25FcnJvcj1pLHRoaXMuaXRlbVN0YXJ0PWZ1bmN0aW9uKHUpe2ErKywhMT09PW8mJnZvaWQgMCE9PXIub25TdGFydCYmci5vblN0YXJ0KHUscyxhKSxvPSEwfSx0aGlzLml0ZW1FbmQ9ZnVuY3Rpb24odSl7cysrLHZvaWQgMCE9PXIub25Qcm9ncmVzcyYmci5vblByb2dyZXNzKHUscyxhKSxzPT09YSYmKG89ITEsdm9pZCAwIT09ci5vbkxvYWQmJnIub25Mb2FkKCkpfSx0aGlzLml0ZW1FcnJvcj1mdW5jdGlvbih1KXt2b2lkIDAhPT1yLm9uRXJyb3ImJnIub25FcnJvcih1KX0sdGhpcy5yZXNvbHZlVVJMPWZ1bmN0aW9uKHUpe3JldHVybiBsP2wodSk6dX0sdGhpcy5zZXRVUkxNb2RpZmllcj1mdW5jdGlvbih1KXtyZXR1cm4gbD11LHRoaXN9LHRoaXMuYWRkSGFuZGxlcj1mdW5jdGlvbih1LGQpe3JldHVybiBjLnB1c2godSxkKSx0aGlzfSx0aGlzLnJlbW92ZUhhbmRsZXI9ZnVuY3Rpb24odSl7bGV0IGQ9Yy5pbmRleE9mKHUpO3JldHVybi0xIT09ZCYmYy5zcGxpY2UoZCwyKSx0aGlzfSx0aGlzLmdldEhhbmRsZXI9ZnVuY3Rpb24odSl7Zm9yKGxldCBkPTAscD1jLmxlbmd0aDtkPHA7ZCs9Mil7bGV0IGg9Y1tkXSxmPWNbZCsxXTtpZihoLmdsb2JhbCYmKGgubGFzdEluZGV4PTApLGgudGVzdCh1KSlyZXR1cm4gZn1yZXR1cm4gbnVsbH19fSxEZD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09dD90Olg5ZSx0aGlzLmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLHRoaXMud2l0aENyZWRlbnRpYWxzPSExLHRoaXMucGF0aD0iIix0aGlzLnJlc291cmNlUGF0aD0iIix0aGlzLnJlcXVlc3RIZWFkZXI9e319bG9hZCgpe31sb2FkQXN5bmModCxlKXtsZXQgaT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLG8pe2kubG9hZCh0LHIsZSxvKX0pfXBhcnNlKCl7fXNldENyb3NzT3JpZ2luKHQpe3JldHVybiB0aGlzLmNyb3NzT3JpZ2luPXQsdGhpc31zZXRXaXRoQ3JlZGVudGlhbHModCl7cmV0dXJuIHRoaXMud2l0aENyZWRlbnRpYWxzPXQsdGhpc31zZXRQYXRoKHQpe3JldHVybiB0aGlzLnBhdGg9dCx0aGlzfXNldFJlc291cmNlUGF0aCh0KXtyZXR1cm4gdGhpcy5yZXNvdXJjZVBhdGg9dCx0aGlzfXNldFJlcXVlc3RIZWFkZXIodCl7cmV0dXJuIHRoaXMucmVxdWVzdEhlYWRlcj10LHRoaXN9fSxTcD17fSxYOD1jbGFzcyBleHRlbmRzIERke2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7dm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89d2IuZ2V0KHQpO2lmKHZvaWQgMCE9PW8pcmV0dXJuIHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dCgoKT0+e2UmJmUobyksdGhpcy5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLG87aWYodm9pZCAwIT09U3BbdF0pcmV0dXJuIHZvaWQgU3BbdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczppLG9uRXJyb3I6cn0pO1NwW3RdPVtdLFNwW3RdLnB1c2goe29uTG9hZDplLG9uUHJvZ3Jlc3M6aSxvbkVycm9yOnJ9KTtsZXQgcz1uZXcgUmVxdWVzdCh0LHtoZWFkZXJzOm5ldyBIZWFkZXJzKHRoaXMucmVxdWVzdEhlYWRlciksY3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiJ9KSxhPXRoaXMubWltZVR5cGUsbD10aGlzLnJlc3BvbnNlVHlwZTtmZXRjaChzKS50aGVuKGM9PntpZigyMDA9PT1jLnN0YXR1c3x8MD09PWMuc3RhdHVzKXtpZigwPT09Yy5zdGF0dXMmJmNvbnNvbGUud2FybigiVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4iKSx0eXBlb2YgUmVhZGFibGVTdHJlYW0+InUifHx2b2lkIDA9PT1jLmJvZHkuZ2V0UmVhZGVyKXJldHVybiBjO2xldCB1PVNwW3RdLGQ9Yy5ib2R5LmdldFJlYWRlcigpLHA9Yy5oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiKSxoPXA/cGFyc2VJbnQocCk6MCxmPTAhPT1oLG09MCx4PW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQoZyl7IWZ1bmN0aW9uIGIoKXtkLnJlYWQoKS50aGVuKCh7ZG9uZTpELHZhbHVlOlR9KT0+e2lmKEQpZy5jbG9zZSgpO2Vsc2V7bSs9VC5ieXRlTGVuZ3RoO2xldCBrPW5ldyBQcm9ncmVzc0V2ZW50KCJwcm9ncmVzcyIse2xlbmd0aENvbXB1dGFibGU6Zixsb2FkZWQ6bSx0b3RhbDpofSk7Zm9yKGxldCBaPTAsej11Lmxlbmd0aDtaPHo7WisrKXtsZXQgZmU9dVtaXTtmZS5vblByb2dyZXNzJiZmZS5vblByb2dyZXNzKGspfWcuZW5xdWV1ZShUKSxiKCl9fSl9KCl9fSk7cmV0dXJuIG5ldyBSZXNwb25zZSh4KX10aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh1LGEpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHZvaWQgMD09PWEpcmV0dXJuIGMudGV4dCgpO3tsZXQgZD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMoYSkscD1kJiZkWzFdP2RbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAsaD1uZXcgVGV4dERlY29kZXIocCk7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGY9PmguZGVjb2RlKGYpKX19fSkudGhlbihjPT57d2IuYWRkKHQsYyk7bGV0IHU9U3BbdF07ZGVsZXRlIFNwW3RdO2ZvcihsZXQgZD0wLHA9dS5sZW5ndGg7ZDxwO2QrKyl7bGV0IGg9dVtkXTtoLm9uTG9hZCYmaC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PVNwW3RdO2lmKHZvaWQgMD09PXUpdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBTcFt0XTtmb3IobGV0IGQ9MCxwPXUubGVuZ3RoO2Q8cDtkKyspe2xldCBoPXVbZF07aC5vbkVycm9yJiZoLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0sRWs9Y2xhc3MgZXh0ZW5kcyBEZHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe3ZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxzPXdiLmdldCh0KTtpZih2b2lkIDAhPT1zKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKHMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxzO2xldCBhPVlTKCJpbWciKTtmdW5jdGlvbiBsKCl7dSgpLHdiLmFkZCh0LHRoaXMpLGUmJmUodGhpcyksby5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gYyhkKXt1KCksciYmcihkKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIHUoKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpfXJldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpLCJkYXRhOiIhPT10LnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYoYS5jcm9zc09yaWdpbj10aGlzLmNyb3NzT3JpZ2luKSxvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLGEuc3JjPXQsYX19LFE4PWNsYXNzIGV4dGVuZHMgRGR7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXtsZXQgbz1uZXcgbWIscz1uZXcgRWsodGhpcy5tYW5hZ2VyKTtzLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLHMuc2V0UGF0aCh0aGlzLnBhdGgpO2xldCBhPTA7ZnVuY3Rpb24gbChjKXtzLmxvYWQodFtjXSxmdW5jdGlvbih1KXtvLmltYWdlc1tjXT11LGErKyw2PT09YSYmKG8ubmVlZHNVcGRhdGU9ITAsZSYmZShvKSl9LHZvaWQgMCxyKX1mb3IobGV0IGM9MDtjPHQubGVuZ3RoOysrYylsKGMpO3JldHVybiBvfX0sSzg9Y2xhc3MgZXh0ZW5kcyBEZHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPW5ldyBIbyxzPW5ldyBFayh0aGlzLm1hbmFnZXIpO3JldHVybiBzLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMubG9hZCh0LGZ1bmN0aW9uKGEpe28uaW1hZ2U9YSxvLm5lZWRzVXBkYXRlPSEwLHZvaWQgMCE9PWUmJmUobyl9LGksciksb319LGZjPWNsYXNzIGV4dGVuZHMgWGl7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgdm4odCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxlLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdm9pZCAwIT09dGhpcy5ncm91bmRDb2xvciYmKGUub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuZGlzdGFuY2UmJihlLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx2b2lkIDAhPT10aGlzLmFuZ2xlJiYoZS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdm9pZCAwIT09dGhpcy5kZWNheSYmKGUub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHZvaWQgMCE9PXRoaXMucGVudW1icmEmJihlLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx2b2lkIDAhPT10aGlzLnNoYWRvdyYmKGUub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSksZX19O2ZjLnByb3RvdHlwZS5pc0xpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgZmN7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsaSksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShYaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgdm4oZSl9Y29weSh0KXtyZXR1cm4gZmMucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX0ucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciB4ZGU9bmV3IFJuLENkZT1uZXcgaWUsTWRlPW5ldyBpZSxwRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmNhbWVyYT10LHRoaXMuYmlhcz0wLHRoaXMubm9ybWFsQmlhcz0wLHRoaXMucmFkaXVzPTEsdGhpcy5ibHVyU2FtcGxlcz04LHRoaXMubWFwU2l6ZT1uZXcgYXQoNTEyLDUxMiksdGhpcy5tYXA9bnVsbCx0aGlzLm1hcFBhc3M9bnVsbCx0aGlzLm1hdHJpeD1uZXcgUm4sdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy5fZnJ1c3R1bT1uZXcgZ2IsdGhpcy5fZnJhbWVFeHRlbnRzPW5ldyBhdCgxLDEpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9MSx0aGlzLl92aWV3cG9ydHM9W25ldyBhcigwLDAsMSwxKV19Z2V0Vmlld3BvcnRDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cG9ydENvdW50fWdldEZydXN0dW0oKXtyZXR1cm4gdGhpcy5fZnJ1c3R1bX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPXRoaXMubWF0cml4O0NkZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksZS5wb3NpdGlvbi5jb3B5KENkZSksTWRlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0LnRhcmdldC5tYXRyaXhXb3JsZCksZS5sb29rQXQoTWRlKSxlLnVwZGF0ZU1hdHJpeFdvcmxkKCkseGRlLm11bHRpcGx5TWF0cmljZXMoZS5wcm9qZWN0aW9uTWF0cml4LGUubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHhkZSksaS5zZXQoLjUsMCwwLC41LDAsLjUsMCwuNSwwLDAsLjUsLjUsMCwwLDAsMSksaS5tdWx0aXBseShlLnByb2plY3Rpb25NYXRyaXgpLGkubXVsdGlwbHkoZS5tYXRyaXhXb3JsZEludmVyc2UpfWdldFZpZXdwb3J0KHQpe3JldHVybiB0aGlzLl92aWV3cG9ydHNbdF19Z2V0RnJhbWVFeHRlbnRzKCl7cmV0dXJuIHRoaXMuX2ZyYW1lRXh0ZW50c31kaXNwb3NlKCl7dGhpcy5tYXAmJnRoaXMubWFwLmRpc3Bvc2UoKSx0aGlzLm1hcFBhc3MmJnRoaXMubWFwUGFzcy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gdGhpcy5jYW1lcmE9dC5jYW1lcmEuY2xvbmUoKSx0aGlzLmJpYXM9dC5iaWFzLHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMubWFwU2l6ZS5jb3B5KHQubWFwU2l6ZSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD17fTtyZXR1cm4gMCE9PXRoaXMuYmlhcyYmKHQuYmlhcz10aGlzLmJpYXMpLDAhPT10aGlzLm5vcm1hbEJpYXMmJih0Lm5vcm1hbEJpYXM9dGhpcy5ub3JtYWxCaWFzKSwxIT09dGhpcy5yYWRpdXMmJih0LnJhZGl1cz10aGlzLnJhZGl1cyksKDUxMiE9PXRoaXMubWFwU2l6ZS54fHw1MTIhPT10aGlzLm1hcFNpemUueSkmJih0Lm1hcFNpemU9dGhpcy5tYXBTaXplLnRvQXJyYXkoKSksdC5jYW1lcmE9dGhpcy5jYW1lcmEudG9KU09OKCExKS5vYmplY3QsZGVsZXRlIHQuY2FtZXJhLm1hdHJpeCx0fX0sVGs9Y2xhc3MgZXh0ZW5kcyBwRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBXcyg1MCwxLC41LDUwMCkpLHRoaXMuZm9jdXM9MX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPTIqaDgqdC5hbmdsZSp0aGlzLmZvY3VzLHI9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQsbz10LmRpc3RhbmNlfHxlLmZhcjsoaSE9PWUuZm92fHxyIT09ZS5hc3BlY3R8fG8hPT1lLmZhcikmJihlLmZvdj1pLGUuYXNwZWN0PXIsZS5mYXI9byxlLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksc3VwZXIudXBkYXRlTWF0cmljZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZvY3VzPXQuZm9jdXMsdGhpc319O1RrLnByb3RvdHlwZS5pc1Nwb3RMaWdodFNoYWRvdz0hMCxjbGFzcyBleHRlbmRzIGZje2NvbnN0cnVjdG9yKHQsZSxpPTAscj1NYXRoLlBJLzMsbz0wLHM9MSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KFhpLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgWGksdGhpcy5kaXN0YW5jZT1pLHRoaXMuYW5nbGU9cix0aGlzLnBlbnVtYnJhPW8sdGhpcy5kZWNheT1zLHRoaXMuc2hhZG93PW5ldyBUa31nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fS5wcm90b3R5cGUuaXNTcG90TGlnaHQ9ITA7dmFyIHdkZT1uZXcgUm4sTFM9bmV3IGllLG84PW5ldyBpZSxEaz1jbGFzcyBleHRlbmRzIHBFe2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFdzKDkwLDEsLjUsNTAwKSksdGhpcy5fZnJhbWVFeHRlbnRzPW5ldyBhdCg0LDIpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9Nix0aGlzLl92aWV3cG9ydHM9W25ldyBhcigyLDEsMSwxKSxuZXcgYXIoMCwxLDEsMSksbmV3IGFyKDMsMSwxLDEpLG5ldyBhcigxLDEsMSwxKSxuZXcgYXIoMywwLDEsMSksbmV3IGFyKDEsMCwxLDEpXSx0aGlzLl9jdWJlRGlyZWN0aW9ucz1bbmV3IGllKDEsMCwwKSxuZXcgaWUoLTEsMCwwKSxuZXcgaWUoMCwwLDEpLG5ldyBpZSgwLDAsLTEpLG5ldyBpZSgwLDEsMCksbmV3IGllKDAsLTEsMCldLHRoaXMuX2N1YmVVcHM9W25ldyBpZSgwLDEsMCksbmV3IGllKDAsMSwwKSxuZXcgaWUoMCwxLDApLG5ldyBpZSgwLDEsMCksbmV3IGllKDAsMCwxKSxuZXcgaWUoMCwwLC0xKV19dXBkYXRlTWF0cmljZXModCxlPTApe2xldCBpPXRoaXMuY2FtZXJhLHI9dGhpcy5tYXRyaXgsbz10LmRpc3RhbmNlfHxpLmZhcjtvIT09aS5mYXImJihpLmZhcj1vLGkudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxMUy5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksaS5wb3NpdGlvbi5jb3B5KExTKSxvOC5jb3B5KGkucG9zaXRpb24pLG84LmFkZCh0aGlzLl9jdWJlRGlyZWN0aW9uc1tlXSksaS51cC5jb3B5KHRoaXMuX2N1YmVVcHNbZV0pLGkubG9va0F0KG84KSxpLnVwZGF0ZU1hdHJpeFdvcmxkKCksci5tYWtlVHJhbnNsYXRpb24oLUxTLngsLUxTLnksLUxTLnopLHdkZS5tdWx0aXBseU1hdHJpY2VzKGkucHJvamVjdGlvbk1hdHJpeCxpLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh3ZGUpfX07RGsucHJvdG90eXBlLmlzUG9pbnRMaWdodFNoYWRvdz0hMCxjbGFzcyBleHRlbmRzIGZje2NvbnN0cnVjdG9yKHQsZSxpPTAscj0xKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1pLHRoaXMuZGVjYXk9cix0aGlzLnNoYWRvdz1uZXcgRGt9Z2V0IHBvd2VyKCl7cmV0dXJuIDQqdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fS5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBBaz1jbGFzcyBleHRlbmRzIHBFe2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IHFnKC01LDUsNSwtNSwuNSw1MDApKX19O0FrLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITAsY2xhc3MgZXh0ZW5kcyBmY3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJEaXJlY3Rpb25hbExpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoWGkuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMudGFyZ2V0PW5ldyBYaSx0aGlzLnNoYWRvdz1uZXcgQWt9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX0ucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodD0hMCxjbGFzcyBleHRlbmRzIGZje2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkFtYmllbnRMaWdodCJ9fS5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHQ9ITAsY2xhc3MgZXh0ZW5kcyBmY3tjb25zdHJ1Y3Rvcih0LGUsaT0xMCxyPTEwKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1pLHRoaXMuaGVpZ2h0PXJ9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsZS5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LGV9fS5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBJaz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgaWUpfXNldCh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLmNvcHkodFtlXSk7cmV0dXJuIHRoaXN9emVybygpe2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHNbdF0uc2V0KDAsMCwwKTtyZXR1cm4gdGhpc31nZXRBdCh0LGUpe2xldCBpPXQueCxyPXQueSxvPXQueixzPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiBlLmNvcHkoc1swXSkubXVsdGlwbHlTY2FsYXIoLjI4MjA5NSksZS5hZGRTY2FsZWRWZWN0b3Ioc1sxXSwuNDg4NjAzKnIpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMl0sLjQ4ODYwMypvKSxlLmFkZFNjYWxlZFZlY3RvcihzWzNdLC40ODg2MDMqaSksZS5hZGRTY2FsZWRWZWN0b3Ioc1s0XSxpKnIqMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNV0scipvKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihzWzZdLC4zMTUzOTIqKDMqbypvLTEpKSxlLmFkZFNjYWxlZFZlY3RvcihzWzddLGkqbyoxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3Ioc1s4XSwuNTQ2Mjc0KihpKmktcipyKSksZX1nZXRJcnJhZGlhbmNlQXQodCxlKXtsZXQgaT10Lngscj10Lnksbz10Lnoscz10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KHNbMF0pLm11bHRpcGx5U2NhbGFyKC44ODYyMjcpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMV0sMS4wMjMzMjgqciksZS5hZGRTY2FsZWRWZWN0b3Ioc1syXSwxLjAyMzMyOCpvKSxlLmFkZFNjYWxlZFZlY3RvcihzWzNdLDEuMDIzMzI4KmkpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNF0sLjg1ODA4NippKnIpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNV0sLjg1ODA4NipyKm8pLGUuYWRkU2NhbGVkVmVjdG9yKHNbNl0sLjc0MzEyNSpvKm8tLjI0NzcwOCksZS5hZGRTY2FsZWRWZWN0b3Ioc1s3XSwuODU4MDg2KmkqbyksZS5hZGRTY2FsZWRWZWN0b3Ioc1s4XSwuNDI5MDQzKihpKmktcipyKSksZX1hZGQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5hZGQodC5jb2VmZmljaWVudHNbZV0pO3JldHVybiB0aGlzfWFkZFNjYWxlZFNIKHQsZSl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmNvZWZmaWNpZW50c1tpXS5hZGRTY2FsZWRWZWN0b3IodC5jb2VmZmljaWVudHNbaV0sZSk7cmV0dXJuIHRoaXN9c2NhbGUodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5tdWx0aXBseVNjYWxhcih0KTtyZXR1cm4gdGhpc31sZXJwKHQsZSl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmNvZWZmaWNpZW50c1tpXS5sZXJwKHQuY29lZmZpY2llbnRzW2ldLGUpO3JldHVybiB0aGlzfWVxdWFscyh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKWlmKCF0aGlzLmNvZWZmaWNpZW50c1tlXS5lcXVhbHModC5jb2VmZmljaWVudHNbZV0pKXJldHVybiExO3JldHVybiEwfWNvcHkodCl7cmV0dXJuIHRoaXMuc2V0KHQuY29lZmZpY2llbnRzKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1mcm9tQXJyYXkodCxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS5mcm9tQXJyYXkodCxlKzMqcik7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpW3JdLnRvQXJyYXkodCxlKzMqcik7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxlKXtsZXQgaT10Lngscj10Lnksbz10Lno7ZVswXT0uMjgyMDk1LGVbMV09LjQ4ODYwMypyLGVbMl09LjQ4ODYwMypvLGVbM109LjQ4ODYwMyppLGVbNF09MS4wOTI1NDgqaSpyLGVbNV09MS4wOTI1NDgqcipvLGVbNl09LjMxNTM5MiooMypvKm8tMSksZVs3XT0xLjA5MjU0OCppKm8sZVs4XT0uNTQ2Mjc0KihpKmktcipyKX19O0lrLnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIGhFPWNsYXNzIGV4dGVuZHMgZmN7Y29uc3RydWN0b3IodD1uZXcgSWssZT0xKXtzdXBlcih2b2lkIDAsZSksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCksZX19O2hFLnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIGlHPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlcjwidSIpcmV0dXJuKG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKHQpO2xldCBlPSIiO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlKSl9Y2F0Y2h7cmV0dXJuIGV9fXN0YXRpYyBleHRyYWN0VXJsQmFzZSh0KXtsZXQgZT10Lmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lPyIuLyI6dC5zdWJzdHIoMCxlKzEpfXN0YXRpYyByZXNvbHZlVVJMKHQsZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0fHwiIj09PXQ/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KGUpJiYvXlwvLy50ZXN0KHQpJiYoZT1lLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OmUrdCl9fTsoY2xhc3MgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSIsdGhpcy5pbnN0YW5jZUNvdW50PTEvMH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VDb3VudD10Lmluc3RhbmNlQ291bnQsdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fSkucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk9ITAsY2xhc3MgZXh0ZW5kcyBEZHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA+InUiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPiJ1IiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LGUsaSxyKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLHM9d2IuZ2V0KHQpO2lmKHZvaWQgMCE9PXMpcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUocyksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLHM7bGV0IGE9e307YS5jcmVkZW50aWFscz0iYW5vbnltb3VzIj09PXRoaXMuY3Jvc3NPcmlnaW4/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIsYS5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LGEpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKG8ub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXt3Yi5hZGQodCxsKSxlJiZlKGwpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7ciYmcihsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSksby5tYW5hZ2VyLml0ZW1TdGFydCh0KX19LnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBKTyxzRz1jbGFzcyBleHRlbmRzIERke2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7bGV0IG89dGhpcyxzPW5ldyBYOCh0aGlzLm1hbmFnZXIpO3Muc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxzLmxvYWQodCxmdW5jdGlvbihhKXt0cnl7bGV0IGw9YS5zbGljZSgwKTsodm9pZCAwPT09Sk8mJihKTz1uZXcod2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkpLEpPKS5kZWNvZGVBdWRpb0RhdGEobCxmdW5jdGlvbih1KXtlKHUpfSl9Y2F0Y2gobCl7cj9yKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LGkscil9fTsoY2xhc3MgZXh0ZW5kcyBoRXtjb25zdHJ1Y3Rvcih0LGUsaT0xKXtzdXBlcih2b2lkIDAsaSk7bGV0IHI9KG5ldyB2bikuc2V0KHQpLG89KG5ldyB2bikuc2V0KGUpLHM9bmV3IGllKHIucixyLmcsci5iKSxhPW5ldyBpZShvLnIsby5nLG8uYiksbD1NYXRoLnNxcnQoTWF0aC5QSSksYz1sKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkocykuYWRkKGEpLm11bHRpcGx5U2NhbGFyKGwpLHRoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkocykuc3ViKGEpLm11bHRpcGx5U2NhbGFyKGMpfX0pLnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodFByb2JlPSEwLGNsYXNzIGV4dGVuZHMgaEV7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKHZvaWQgMCxlKTtsZXQgaT0obmV3IHZuKS5zZXQodCk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KGkucixpLmcsaS5iKS5tdWx0aXBseVNjYWxhcigyKk1hdGguc3FydChNYXRoLlBJKSl9fS5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHRQcm9iZT0hMDt2YXIgZEc9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCByLG8scztzd2l0Y2godGhpcy5iaW5kaW5nPXQsdGhpcy52YWx1ZVNpemU9aSxlKXtjYXNlInF1YXRlcm5pb24iOnI9dGhpcy5fc2xlcnAsbz10aGlzLl9zbGVycEFkZGl0aXZlLHM9dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb24sdGhpcy5idWZmZXI9bmV3IEZsb2F0NjRBcnJheSg2KmkpLHRoaXMuX3dvcmtJbmRleD01O2JyZWFrO2Nhc2Uic3RyaW5nIjpjYXNlImJvb2wiOnI9dGhpcy5fc2VsZWN0LG89dGhpcy5fc2VsZWN0LHM9dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyLHRoaXMuYnVmZmVyPW5ldyBBcnJheSg1KmkpO2JyZWFrO2RlZmF1bHQ6cj10aGlzLl9sZXJwLG89dGhpcy5fbGVycEFkZGl0aXZlLHM9dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMsdGhpcy5idWZmZXI9bmV3IEZsb2F0NjRBcnJheSg1KmkpfXRoaXMuX21peEJ1ZmZlclJlZ2lvbj1yLHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlPW8sdGhpcy5fc2V0SWRlbnRpdHk9cyx0aGlzLl9vcmlnSW5kZXg9Myx0aGlzLl9hZGRJbmRleD00LHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsdGhpcy51c2VDb3VudD0wLHRoaXMucmVmZXJlbmNlQ291bnQ9MH1hY2N1bXVsYXRlKHQsZSl7bGV0IGk9dGhpcy5idWZmZXIscj10aGlzLnZhbHVlU2l6ZSxvPXQqcityLHM9dGhpcy5jdW11bGF0aXZlV2VpZ2h0O2lmKDA9PT1zKXtmb3IobGV0IGE9MDthIT09cjsrK2EpaVtvK2FdPWlbYV07cz1lfWVsc2Ugcys9ZSx0aGlzLl9taXhCdWZmZXJSZWdpb24oaSxvLDAsZS9zLHIpO3RoaXMuY3VtdWxhdGl2ZVdlaWdodD1zfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9hZGRJbmRleDswPT09dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoZSxyLDAsdCxpKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgZT10aGlzLnZhbHVlU2l6ZSxpPXRoaXMuYnVmZmVyLHI9dCplK2Usbz10aGlzLmN1bXVsYXRpdmVXZWlnaHQscz10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxhPXRoaXMuYmluZGluZzt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLG88MSYmdGhpcy5fbWl4QnVmZmVyUmVnaW9uKGkscixlKnRoaXMuX29yaWdJbmRleCwxLW8sZSkscz4wJiZ0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShpLHIsdGhpcy5fYWRkSW5kZXgqZSwxLGUpO2ZvcihsZXQgbD1lLGM9ZStlO2whPT1jOysrbClpZihpW2xdIT09aVtsK2VdKXthLnNldFZhbHVlKGkscik7YnJlYWt9fXNhdmVPcmlnaW5hbFN0YXRlKCl7bGV0IGU9dGhpcy5idWZmZXIsaT10aGlzLnZhbHVlU2l6ZSxyPWkqdGhpcy5fb3JpZ0luZGV4O3RoaXMuYmluZGluZy5nZXRWYWx1ZShlLHIpO2ZvcihsZXQgbz1pLHM9cjtvIT09czsrK28pZVtvXT1lW3IrbyVpXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXt0aGlzLmJpbmRpbmcuc2V0VmFsdWUodGhpcy5idWZmZXIsMyp0aGlzLnZhbHVlU2l6ZSl9X3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCl7bGV0IHQ9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUsZT10K3RoaXMudmFsdWVTaXplO2ZvcihsZXQgaT10O2k8ZTtpKyspdGhpcy5idWZmZXJbaV09MH1fc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb24oKXt0aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpLHRoaXMuYnVmZmVyW3RoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplKzNdPTF9X3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcigpe2xldCB0PXRoaXMuX29yaWdJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplO2ZvcihsZXQgaT0wO2k8dGhpcy52YWx1ZVNpemU7aSsrKXRoaXMuYnVmZmVyW2UraV09dGhpcy5idWZmZXJbdCtpXX1fc2VsZWN0KHQsZSxpLHIsbyl7aWYocj49LjUpZm9yKGxldCBzPTA7cyE9PW87KytzKXRbZStzXT10W2krc119X3NsZXJwKHQsZSxpLHIpe3FzLnNsZXJwRmxhdCh0LGUsdCxlLHQsaSxyKX1fc2xlcnBBZGRpdGl2ZSh0LGUsaSxyLG8pe2xldCBzPXRoaXMuX3dvcmtJbmRleCpvO3FzLm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQscyx0LGUsdCxpKSxxcy5zbGVycEZsYXQodCxlLHQsZSx0LHMscil9X2xlcnAodCxlLGkscixvKXtsZXQgcz0xLXI7Zm9yKGxldCBhPTA7YSE9PW87KythKXtsZXQgbD1lK2E7dFtsXT10W2xdKnMrdFtpK2FdKnJ9fV9sZXJwQWRkaXRpdmUodCxlLGkscixvKXtmb3IobGV0IHM9MDtzIT09bzsrK3Mpe2xldCBhPWUrczt0W2FdPXRbYV0rdFtpK3NdKnJ9fX0sRUc9IlxcW1xcXVxcLjpcXC8iLEs5ZT1uZXcgUmVnRXhwKCJbIitFRysiXSIsImciKSxURz0iW14iK0VHKyJdIixaOWU9IlteIitFRy5yZXBsYWNlKCJcXC4iLCIiKSsiXSIsSjllPS8oKD86V0MrW1wvOl0pKikvLnNvdXJjZS5yZXBsYWNlKCJXQyIsVEcpLCQ5ZT0vKFdDT0QrKT8vLnNvdXJjZS5yZXBsYWNlKCJXQ09EIixaOWUpLGVxZT0vKD86XC4oV0MrKSg/OlxbKC4rKVxdKT8pPy8uc291cmNlLnJlcGxhY2UoIldDIixURyksdHFlPS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIixURyksbnFlPW5ldyBSZWdFeHAoIl4iK0o5ZSskOWUrZXFlK3RxZSsiJCIpLGlxZT1bIm1hdGVyaWFsIiwibWF0ZXJpYWxzIiwiYm9uZXMiXSxwRz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHI9aXx8THIucGFyc2VUcmFja05hbWUoZSk7dGhpcy5fdGFyZ2V0R3JvdXA9dCx0aGlzLl9iaW5kaW5ncz10LnN1YnNjcmliZV8oZSxyKX1nZXRWYWx1ZSh0LGUpe3RoaXMuYmluZCgpO2xldCByPXRoaXMuX2JpbmRpbmdzW3RoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzX107dm9pZCAwIT09ciYmci5nZXRWYWx1ZSh0LGUpfXNldFZhbHVlKHQsZSl7bGV0IGk9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCByPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxvPWkubGVuZ3RoO3IhPT1vOysrcilpW3JdLnNldFZhbHVlKHQsZSl9YmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgZT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18saT10Lmxlbmd0aDtlIT09aTsrK2UpdFtlXS5iaW5kKCl9dW5iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXQubGVuZ3RoO2UhPT1pOysrZSl0W2VdLnVuYmluZCgpfX0sTHI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5wYXRoPWksdGhpcy5wYXJzZWRQYXRoPXJ8fG4ucGFyc2VUcmFja05hbWUoaSksdGhpcy5ub2RlPW4uZmluZE5vZGUoZSx0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpfHxlLHRoaXMucm9vdE5vZGU9ZSx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfXN0YXRpYyBjcmVhdGUoZSxpLHIpe3JldHVybiBlJiZlLmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IG4uQ29tcG9zaXRlKGUsaSxyKTpuZXcgbihlLGkscil9c3RhdGljIHNhbml0aXplTm9kZU5hbWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvXHMvZywiXyIpLnJlcGxhY2UoSzllLCIiKX1zdGF0aWMgcGFyc2VUcmFja05hbWUoZSl7bGV0IGk9bnFlLmV4ZWMoZSk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IENhbm5vdCBwYXJzZSB0cmFja05hbWU6ICIrZSk7bGV0IHI9e25vZGVOYW1lOmlbMl0sb2JqZWN0TmFtZTppWzNdLG9iamVjdEluZGV4OmlbNF0scHJvcGVydHlOYW1lOmlbNV0scHJvcGVydHlJbmRleDppWzZdfSxvPXIubm9kZU5hbWUmJnIubm9kZU5hbWUubGFzdEluZGV4T2YoIi4iKTtpZih2b2lkIDAhPT1vJiYtMSE9PW8pe2xldCBzPXIubm9kZU5hbWUuc3Vic3RyaW5nKG8rMSk7LTEhPT1pcWUuaW5kZXhPZihzKSYmKHIubm9kZU5hbWU9ci5ub2RlTmFtZS5zdWJzdHJpbmcoMCxvKSxyLm9iamVjdE5hbWU9cyl9aWYobnVsbD09PXIucHJvcGVydHlOYW1lfHwwPT09ci5wcm9wZXJ0eU5hbWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBjYW4gbm90IHBhcnNlIHByb3BlcnR5TmFtZSBmcm9tIHRyYWNrTmFtZTogIitlKTtyZXR1cm4gcn1zdGF0aWMgZmluZE5vZGUoZSxpKXtpZighaXx8IiI9PT1pfHwiLiI9PT1pfHwtMT09PWl8fGk9PT1lLm5hbWV8fGk9PT1lLnV1aWQpcmV0dXJuIGU7aWYoZS5za2VsZXRvbil7bGV0IHI9ZS5za2VsZXRvbi5nZXRCb25lQnlOYW1lKGkpO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHJ9aWYoZS5jaGlsZHJlbil7bGV0IHI9ZnVuY3Rpb24ocyl7Zm9yKGxldCBhPTA7YTxzLmxlbmd0aDthKyspe2xldCBsPXNbYV07aWYobC5uYW1lPT09aXx8bC51dWlkPT09aSlyZXR1cm4gbDtsZXQgYz1yKGwuY2hpbGRyZW4pO2lmKGMpcmV0dXJuIGN9cmV0dXJuIG51bGx9LG89cihlLmNoaWxkcmVuKTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfV9nZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fc2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X2dldFZhbHVlX2RpcmVjdChlLGkpe2VbaV09dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdfV9nZXRWYWx1ZV9hcnJheShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO28hPT1zOysrbyllW2krK109cltvXX1fZ2V0VmFsdWVfYXJyYXlFbGVtZW50KGUsaSl7ZVtpXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX1fZ2V0VmFsdWVfdG9BcnJheShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS50b0FycmF5KGUsaSl9X3NldFZhbHVlX2RpcmVjdChlLGkpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW2ldfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUoZSxpKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09ZVtpXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUoZSxpKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09ZVtpXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO28hPT1zOysrbylyW29dPWVbaSsrXX1fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUoZSxpKXtsZXQgcj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvIT09czsrK28pcltvXT1lW2krK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUoZSxpKXtsZXQgcj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvIT09czsrK28pcltvXT1lW2krK107dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50KGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09ZVtpXX1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlKGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09ZVtpXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoZSxpKX1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlKGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLGkpLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoZSxpKSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9nZXRWYWx1ZV91bmJvdW5kKGUsaSl7dGhpcy5iaW5kKCksdGhpcy5nZXRWYWx1ZShlLGkpfV9zZXRWYWx1ZV91bmJvdW5kKGUsaSl7dGhpcy5iaW5kKCksdGhpcy5zZXRWYWx1ZShlLGkpfWJpbmQoKXtsZXQgZT10aGlzLm5vZGUsaT10aGlzLnBhcnNlZFBhdGgscj1pLm9iamVjdE5hbWUsbz1pLnByb3BlcnR5TmFtZSxzPWkucHJvcGVydHlJbmRleDtpZihlfHwoZT1uLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsaS5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUsdGhpcy5ub2RlPWUpLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGUsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZSwhZSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgbm9kZSBmb3IgdHJhY2s6ICIrdGhpcy5wYXRoKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iKTtpZihyKXtsZXQgdT1pLm9iamVjdEluZGV4O3N3aXRjaChyKXtjYXNlIm1hdGVyaWFscyI6aWYoIWUubWF0ZXJpYWwpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWwuIix0aGlzKTtpZighZS5tYXRlcmlhbC5tYXRlcmlhbHMpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwubWF0ZXJpYWxzIGFzIG5vZGUubWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFscyBhcnJheS4iLHRoaXMpO2U9ZS5tYXRlcmlhbC5tYXRlcmlhbHM7YnJlYWs7Y2FzZSJib25lcyI6aWYoIWUuc2tlbGV0b24pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24uIix0aGlzKTtlPWUuc2tlbGV0b24uYm9uZXM7Zm9yKGxldCBkPTA7ZDxlLmxlbmd0aDtkKyspaWYoZVtkXS5uYW1lPT09dSl7dT1kO2JyZWFrfWJyZWFrO2RlZmF1bHQ6aWYodm9pZCAwPT09ZVtyXSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLiIsdGhpcyk7ZT1lW3JdfWlmKHZvaWQgMCE9PXUpe2lmKHZvaWQgMD09PWVbdV0pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gYmluZCB0byBvYmplY3RJbmRleCBvZiBvYmplY3ROYW1lLCBidXQgaXMgdW5kZWZpbmVkLiIsdGhpcyxlKTtlPWVbdV19fWxldCBhPWVbb107aWYodm9pZCAwPT09YSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAiK2kubm9kZU5hbWUrIi4iK28rIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsZSk7bGV0IGw9dGhpcy5WZXJzaW9uaW5nLk5vbmU7dGhpcy50YXJnZXRPYmplY3Q9ZSx2b2lkIDAhPT1lLm5lZWRzVXBkYXRlP2w9dGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlOnZvaWQgMCE9PWUubWF0cml4V29ybGROZWVkc1VwZGF0ZSYmKGw9dGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGUpO2xldCBjPXRoaXMuQmluZGluZ1R5cGUuRGlyZWN0O2lmKHZvaWQgMCE9PXMpe2lmKCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiPT09byl7aWYoIWUuZ2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkuIix0aGlzKTtpZighZS5nZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBvbiBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIix0aGlzKTtpZighZS5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLiIsdGhpcyk7dm9pZCAwIT09ZS5tb3JwaFRhcmdldERpY3Rpb25hcnlbc10mJihzPWUubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdKX1jPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hLHRoaXMucHJvcGVydHlJbmRleD1zfWVsc2Ugdm9pZCAwIT09YS5mcm9tQXJyYXkmJnZvaWQgMCE9PWEudG9BcnJheT8oYz10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTpBcnJheS5pc0FycmF5KGEpPyhjPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEpOnRoaXMucHJvcGVydHlOYW1lPW87dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbY10sdGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW2NdW2xdfXVuYmluZCgpe3RoaXMubm9kZT1udWxsLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9fXJldHVybiBuLkNvbXBvc2l0ZT1wRyxufSkoKTtMci5wcm90b3R5cGUuQmluZGluZ1R5cGU9e0RpcmVjdDowLEVudGlyZUFycmF5OjEsQXJyYXlFbGVtZW50OjIsSGFzRnJvbVRvQXJyYXk6M30sTHIucHJvdG90eXBlLlZlcnNpb25pbmc9e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn0sTHIucHJvdG90eXBlLkdldHRlckJ5QmluZGluZ1R5cGU9W0xyLnByb3RvdHlwZS5fZ2V0VmFsdWVfZGlyZWN0LExyLnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXksTHIucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheUVsZW1lbnQsTHIucHJvdG90eXBlLl9nZXRWYWx1ZV90b0FycmF5XSxMci5wcm90b3R5cGUuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc9W1tMci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdCxMci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSxMci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbTHIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheSxMci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlLExyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0xyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50LExyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlLExyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtMci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheSxMci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSxMci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXV0sY2xhc3MgZXh0ZW5kcyBFcHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX3Jvb3Q9dCx0aGlzLl9pbml0TWVtb3J5TWFuYWdlcigpLHRoaXMuX2FjY3VJbmRleD0wLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTF9X2JpbmRBY3Rpb24odCxlKXtsZXQgaT10Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3Qscj10Ll9jbGlwLnRyYWNrcyxvPXIubGVuZ3RoLHM9dC5fcHJvcGVydHlCaW5kaW5ncyxhPXQuX2ludGVycG9sYW50cyxsPWkudXVpZCxjPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSx1PWNbbF07dm9pZCAwPT09dSYmKHU9e30sY1tsXT11KTtmb3IobGV0IGQ9MDtkIT09bzsrK2Qpe2xldCBwPXJbZF0saD1wLm5hbWUsZj11W2hdO2lmKHZvaWQgMCE9PWYpKytmLnJlZmVyZW5jZUNvdW50LHNbZF09ZjtlbHNle2lmKGY9c1tkXSx2b2lkIDAhPT1mKXtudWxsPT09Zi5fY2FjaGVJbmRleCYmKCsrZi5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZixsLGgpKTtjb250aW51ZX1mPW5ldyBkRyhMci5jcmVhdGUoaSxoLGUmJmUuX3Byb3BlcnR5QmluZGluZ3NbZF0uYmluZGluZy5wYXJzZWRQYXRoKSxwLlZhbHVlVHlwZU5hbWUscC5nZXRWYWx1ZVNpemUoKSksKytmLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhmLGwsaCksc1tkXT1mfWFbZF0ucmVzdWx0QnVmZmVyPWYuYnVmZmVyfX1fYWN0aXZhdGVBY3Rpb24odCl7aWYoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtpZihudWxsPT09dC5fY2FjaGVJbmRleCl7bGV0IGk9KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZCxyPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXBbcl07dGhpcy5fYmluZEFjdGlvbih0LG8mJm8ua25vd25BY3Rpb25zWzBdKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih0LHIsaSl9bGV0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSl7bGV0IG89ZVtpXTswPT1vLnVzZUNvdW50KysmJih0aGlzLl9sZW5kQmluZGluZyhvKSxvLnNhdmVPcmlnaW5hbFN0YXRlKCkpfXRoaXMuX2xlbmRBY3Rpb24odCl9fV9kZWFjdGl2YXRlQWN0aW9uKHQpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtsZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgbz1lW2ldOzA9PS0tby51c2VDb3VudCYmKG8ucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl90YWtlQmFja0JpbmRpbmcobykpfXRoaXMuX3Rha2VCYWNrQWN0aW9uKHQpfX1faW5pdE1lbW9yeU1hbmFnZXIoKXt0aGlzLl9hY3Rpb25zPVtdLHRoaXMuX25BY3RpdmVBY3Rpb25zPTAsdGhpcy5fYWN0aW9uc0J5Q2xpcD17fSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9uQWN0aXZlQmluZGluZ3M9MCx0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWU9e30sdGhpcy5fY29udHJvbEludGVycG9sYW50cz1bXSx0aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cz0wO2xldCB0PXRoaXM7dGhpcy5zdGF0cz17YWN0aW9uczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2FjdGlvbnMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUFjdGlvbnN9fSxiaW5kaW5nczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2JpbmRpbmdzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVCaW5kaW5nc319LGNvbnRyb2xJbnRlcnBvbGFudHM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9jb250cm9sSW50ZXJwb2xhbnRzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzfX19fV9pc0FjdGl2ZUFjdGlvbih0KXtsZXQgZT10Ll9jYWNoZUluZGV4O3JldHVybiBudWxsIT09ZSYmZTx0aGlzLl9uQWN0aXZlQWN0aW9uc31fYWRkSW5hY3RpdmVBY3Rpb24odCxlLGkpe2xldCByPXRoaXMuX2FjdGlvbnMsbz10aGlzLl9hY3Rpb25zQnlDbGlwLHM9b1tlXTtpZih2b2lkIDA9PT1zKXM9e2tub3duQWN0aW9uczpbdF0sYWN0aW9uQnlSb290Ont9fSx0Ll9ieUNsaXBDYWNoZUluZGV4PTAsb1tlXT1zO2Vsc2V7bGV0IGE9cy5rbm93bkFjdGlvbnM7dC5fYnlDbGlwQ2FjaGVJbmRleD1hLmxlbmd0aCxhLnB1c2godCl9dC5fY2FjaGVJbmRleD1yLmxlbmd0aCxyLnB1c2godCkscy5hY3Rpb25CeVJvb3RbaV09dH1fcmVtb3ZlSW5hY3RpdmVBY3Rpb24odCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPWVbZS5sZW5ndGgtMV0scj10Ll9jYWNoZUluZGV4O2kuX2NhY2hlSW5kZXg9cixlW3JdPWksZS5wb3AoKSx0Ll9jYWNoZUluZGV4PW51bGw7bGV0IG89dC5fY2xpcC51dWlkLHM9dGhpcy5fYWN0aW9uc0J5Q2xpcCxhPXNbb10sbD1hLmtub3duQWN0aW9ucyxjPWxbbC5sZW5ndGgtMV0sdT10Ll9ieUNsaXBDYWNoZUluZGV4O2MuX2J5Q2xpcENhY2hlSW5kZXg9dSxsW3VdPWMsbC5wb3AoKSx0Ll9ieUNsaXBDYWNoZUluZGV4PW51bGwsZGVsZXRlIGEuYWN0aW9uQnlSb290Wyh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWRdLDA9PT1sLmxlbmd0aCYmZGVsZXRlIHNbb10sdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KXtsZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgbz1lW2ldOzA9PS0tby5yZWZlcmVuY2VDb3VudCYmdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKG8pfX1fbGVuZEFjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC5fY2FjaGVJbmRleCxyPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssbz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQsby5fY2FjaGVJbmRleD1pLGVbaV09b31fdGFrZUJhY2tBY3Rpb24odCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQuX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVBY3Rpb25zLG89ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LG8uX2NhY2hlSW5kZXg9aSxlW2ldPW99X2FkZEluYWN0aXZlQmluZGluZyh0LGUsaSl7bGV0IHI9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLG89dGhpcy5fYmluZGluZ3Mscz1yW2VdO3ZvaWQgMD09PXMmJihzPXt9LHJbZV09cyksc1tpXT10LHQuX2NhY2hlSW5kZXg9by5sZW5ndGgsby5wdXNoKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcodCl7bGV0IGU9dGhpcy5fYmluZGluZ3MsaT10LmJpbmRpbmcscj1pLnJvb3ROb2RlLnV1aWQsbz1pLnBhdGgscz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsYT1zW3JdLGw9ZVtlLmxlbmd0aC0xXSxjPXQuX2NhY2hlSW5kZXg7bC5fY2FjaGVJbmRleD1jLGVbY109bCxlLnBvcCgpLGRlbGV0ZSBhW29dLDA9PT1PYmplY3Qua2V5cyhhKS5sZW5ndGgmJmRlbGV0ZSBzW3JdfV9sZW5kQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuX2NhY2hlSW5kZXgscj10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV90YWtlQmFja0JpbmRpbmcodCl7bGV0IGU9dGhpcy5fYmluZGluZ3MsaT10Ll9jYWNoZUluZGV4LHI9LS10aGlzLl9uQWN0aXZlQmluZGluZ3Msbz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQsby5fY2FjaGVJbmRleD1pLGVbaV09b31fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpe2xldCB0PXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsZT10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrLGk9dFtlXTtyZXR1cm4gdm9pZCAwPT09aSYmKGk9bmV3IE1rKG5ldyBGbG9hdDMyQXJyYXkoMiksbmV3IEZsb2F0MzJBcnJheSgyKSwxLHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIpLGkuX19jYWNoZUluZGV4PWUsdFtlXT1pKSxpfV90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KXtsZXQgZT10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLGk9dC5fX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzLG89ZVtyXTt0Ll9fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9fY2FjaGVJbmRleD1pLGVbaV09b31jbGlwQWN0aW9uKHQsZSxpKXtsZXQgcj1lfHx0aGlzLl9yb290LG89ci51dWlkLHM9InN0cmluZyI9PXR5cGVvZiB0P1NrLmZpbmRCeU5hbWUocix0KTp0LGE9bnVsbCE9PXM/cy51dWlkOnQsbD10aGlzLl9hY3Rpb25zQnlDbGlwW2FdLGM9bnVsbDtpZih2b2lkIDA9PT1pJiYoaT1udWxsIT09cz9zLmJsZW5kTW9kZToyNTAwKSx2b2lkIDAhPT1sKXtsZXQgZD1sLmFjdGlvbkJ5Um9vdFtvXTtpZih2b2lkIDAhPT1kJiZkLmJsZW5kTW9kZT09PWkpcmV0dXJuIGQ7Yz1sLmtub3duQWN0aW9uc1swXSxudWxsPT09cyYmKHM9Yy5fY2xpcCl9aWYobnVsbD09PXMpcmV0dXJuIG51bGw7bGV0IHU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPW51bGwscj1lLmJsZW5kTW9kZSl7dGhpcy5fbWl4ZXI9dCx0aGlzLl9jbGlwPWUsdGhpcy5fbG9jYWxSb290PWksdGhpcy5ibGVuZE1vZGU9cjtsZXQgbz1lLnRyYWNrcyxzPW8ubGVuZ3RoLGE9bmV3IEFycmF5KHMpLGw9e2VuZGluZ1N0YXJ0Om9iLGVuZGluZ0VuZDpvYn07Zm9yKGxldCBjPTA7YyE9PXM7KytjKXtsZXQgdT1vW2NdLmNyZWF0ZUludGVycG9sYW50KG51bGwpO2FbY109dSx1LnNldHRpbmdzPWx9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncz1sLHRoaXMuX2ludGVycG9sYW50cz1hLHRoaXMuX3Byb3BlcnR5QmluZGluZ3M9bmV3IEFycmF5KHMpLHRoaXMuX2NhY2hlSW5kZXg9bnVsbCx0aGlzLl9ieUNsaXBDYWNoZUluZGV4PW51bGwsdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMubG9vcD0yMjAxLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xLHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT0xLHRoaXMud2VpZ2h0PTEsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PTEsdGhpcy5yZXBldGl0aW9ucz0xLzAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ9ITEsdGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwLHRoaXMuemVyb1Nsb3BlQXRFbmQ9ITB9cGxheSgpe3JldHVybiB0aGlzLl9taXhlci5fYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpc31zdG9wKCl7cmV0dXJuIHRoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXMucmVzZXQoKX1yZXNldCgpe3JldHVybiB0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy50aW1lPTAsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9aXNSdW5uaW5nKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMucGF1c2VkJiYwIT09dGhpcy50aW1lU2NhbGUmJm51bGw9PT10aGlzLl9zdGFydFRpbWUmJnRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1pc1NjaGVkdWxlZCgpe3JldHVybiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9c3RhcnRBdCh0KXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lPXQsdGhpc31zZXRMb29wKHQsZSl7cmV0dXJuIHRoaXMubG9vcD10LHRoaXMucmVwZXRpdGlvbnM9ZSx0aGlzfXNldEVmZmVjdGl2ZVdlaWdodCh0KXtyZXR1cm4gdGhpcy53ZWlnaHQ9dCx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy5lbmFibGVkP3Q6MCx0aGlzLnN0b3BGYWRpbmcoKX1nZXRFZmZlY3RpdmVXZWlnaHQoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0fWZhZGVJbih0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwwLDEpfWZhZGVPdXQodCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMSwwKX1jcm9zc0ZhZGVGcm9tKHQsZSxpKXtpZih0LmZhZGVPdXQoZSksdGhpcy5mYWRlSW4oZSksaSl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixvPXQuX2NsaXAuZHVyYXRpb24sYT1yL287dC53YXJwKDEsby9yLGUpLHRoaXMud2FycChhLDEsZSl9cmV0dXJuIHRoaXN9Y3Jvc3NGYWRlVG8odCxlLGkpe3JldHVybiB0LmNyb3NzRmFkZUZyb20odGhpcyxlLGkpfXN0b3BGYWRpbmcoKXtsZXQgdD10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtyZXR1cm4gbnVsbCE9PXQmJih0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31zZXRFZmZlY3RpdmVUaW1lU2NhbGUodCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXQsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPXRoaXMucGF1c2VkPzA6dCx0aGlzLnN0b3BXYXJwaW5nKCl9Z2V0RWZmZWN0aXZlVGltZVNjYWxlKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZX1zZXREdXJhdGlvbih0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dGhpcy5fY2xpcC5kdXJhdGlvbi90LHRoaXMuc3RvcFdhcnBpbmcoKX1zeW5jV2l0aCh0KXtyZXR1cm4gdGhpcy50aW1lPXQudGltZSx0aGlzLnRpbWVTY2FsZT10LnRpbWVTY2FsZSx0aGlzLnN0b3BXYXJwaW5nKCl9aGFsdCh0KXtyZXR1cm4gdGhpcy53YXJwKHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwwLHQpfXdhcnAodCxlLGkpe2xldCByPXRoaXMuX21peGVyLG89ci50aW1lLHM9dGhpcy50aW1lU2NhbGUsYT10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtudWxsPT09YSYmKGE9ci5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PWEpO2xldCBsPWEucGFyYW1ldGVyUG9zaXRpb25zLGM9YS5zYW1wbGVWYWx1ZXM7cmV0dXJuIGxbMF09byxsWzFdPW8raSxjWzBdPXQvcyxjWzFdPWUvcyx0aGlzfXN0b3BXYXJwaW5nKCl7bGV0IHQ9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7cmV0dXJuIG51bGwhPT10JiYodGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9Z2V0TWl4ZXIoKXtyZXR1cm4gdGhpcy5fbWl4ZXJ9Z2V0Q2xpcCgpe3JldHVybiB0aGlzLl9jbGlwfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHx0aGlzLl9taXhlci5fcm9vdH1fdXBkYXRlKHQsZSxpLHIpe2lmKCF0aGlzLmVuYWJsZWQpcmV0dXJuIHZvaWQgdGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2xldCBvPXRoaXMuX3N0YXJ0VGltZTtpZihudWxsIT09byl7bGV0IGw9KHQtbykqaTtpZihsPDB8fDA9PT1pKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbCxlPWkqbH1lKj10aGlzLl91cGRhdGVUaW1lU2NhbGUodCk7bGV0IHM9dGhpcy5fdXBkYXRlVGltZShlKSxhPXRoaXMuX3VwZGF0ZVdlaWdodCh0KTtpZihhPjApe2xldCBsPXRoaXMuX2ludGVycG9sYW50cyxjPXRoaXMuX3Byb3BlcnR5QmluZGluZ3M7aWYoMjUwMT09PXRoaXMuYmxlbmRNb2RlKWZvcihsZXQgdT0wLGQ9bC5sZW5ndGg7dSE9PWQ7Kyt1KWxbdV0uZXZhbHVhdGUocyksY1t1XS5hY2N1bXVsYXRlQWRkaXRpdmUoYSk7ZWxzZSBmb3IobGV0IHU9MCxkPWwubGVuZ3RoO3UhPT1kOysrdSlsW3VdLmV2YWx1YXRlKHMpLGNbdV0uYWNjdW11bGF0ZShyLGEpfX1fdXBkYXRlV2VpZ2h0KHQpe2xldCBlPTA7aWYodGhpcy5lbmFibGVkKXtlPXRoaXMud2VpZ2h0O2xldCBpPXRoaXMuX3dlaWdodEludGVycG9sYW50O2lmKG51bGwhPT1pKXtsZXQgcj1pLmV2YWx1YXRlKHQpWzBdO2UqPXIsdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcEZhZGluZygpLDA9PT1yJiYodGhpcy5lbmFibGVkPSExKSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9ZSxlfV91cGRhdGVUaW1lU2NhbGUodCl7bGV0IGU9MDtpZighdGhpcy5wYXVzZWQpe2U9dGhpcy50aW1lU2NhbGU7bGV0IGk9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbCE9PWkmJihlKj1pLmV2YWx1YXRlKHQpWzBdLHQ+aS5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCksMD09PWU/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9ZSkpfXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9ZSxlfV91cGRhdGVUaW1lKHQpe2xldCBlPXRoaXMuX2NsaXAuZHVyYXRpb24saT10aGlzLmxvb3Ascj10aGlzLnRpbWUrdCxvPXRoaXMuX2xvb3BDb3VudCxzPTIyMDI9PT1pO2lmKDA9PT10KXJldHVybi0xPT09bz9yOnMmJjE9PSgxJm8pP2UtcjpyO2lmKDIyMDA9PT1pKXstMT09PW8mJih0aGlzLl9sb29wQ291bnQ9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLCEwLCExKSk7ZTp7aWYocj49ZSlyPWU7ZWxzZXtpZighKHI8MCkpe3RoaXMudGltZT1yO2JyZWFrIGV9cj0wfXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dDwwPy0xOjF9KX19ZWxzZXtpZigtMT09PW8mJih0Pj0wPyhvPTAsdGhpcy5fc2V0RW5kaW5ncyghMCwwPT09dGhpcy5yZXBldGl0aW9ucyxzKSk6dGhpcy5fc2V0RW5kaW5ncygwPT09dGhpcy5yZXBldGl0aW9ucywhMCxzKSkscj49ZXx8cjwwKXtsZXQgYT1NYXRoLmZsb29yKHIvZSk7ci09ZSphLG8rPU1hdGguYWJzKGEpO2xldCBsPXRoaXMucmVwZXRpdGlvbnMtbztpZihsPD0wKXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLHI9dD4wP2U6MCx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ+MD8xOi0xfSk7ZWxzZXtpZigxPT09bCl7bGV0IGM9dDwwO3RoaXMuX3NldEVuZGluZ3MoYywhYyxzKX1lbHNlIHRoaXMuX3NldEVuZGluZ3MoITEsITEscyk7dGhpcy5fbG9vcENvdW50PW8sdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToibG9vcCIsYWN0aW9uOnRoaXMsbG9vcERlbHRhOmF9KX19ZWxzZSB0aGlzLnRpbWU9cjtpZihzJiYxPT0oMSZvKSlyZXR1cm4gZS1yfXJldHVybiByfV9zZXRFbmRpbmdzKHQsZSxpKXtsZXQgcj10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO2k/KHIuZW5kaW5nU3RhcnQ9c2Isci5lbmRpbmdFbmQ9c2IpOihyLmVuZGluZ1N0YXJ0PXQ/dGhpcy56ZXJvU2xvcGVBdFN0YXJ0P3NiOm9iOjI0MDIsci5lbmRpbmdFbmQ9ZT90aGlzLnplcm9TbG9wZUF0RW5kP3NiOm9iOjI0MDIpfV9zY2hlZHVsZUZhZGluZyh0LGUsaSl7bGV0IHI9dGhpcy5fbWl4ZXIsbz1yLnRpbWUscz10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtudWxsPT09cyYmKHM9ci5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3dlaWdodEludGVycG9sYW50PXMpO2xldCBhPXMucGFyYW1ldGVyUG9zaXRpb25zLGw9cy5zYW1wbGVWYWx1ZXM7cmV0dXJuIGFbMF09byxsWzBdPWUsYVsxXT1vK3QsbFsxXT1pLHRoaXN9fSh0aGlzLHMsZSxpKTtyZXR1cm4gdGhpcy5fYmluZEFjdGlvbih1LGMpLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHUsYSxvKSx1fWV4aXN0aW5nQWN0aW9uKHQsZSl7bGV0IGk9ZXx8dGhpcy5fcm9vdCxyPWkudXVpZCxvPSJzdHJpbmciPT10eXBlb2YgdD9Tay5maW5kQnlOYW1lKGksdCk6dCxhPXRoaXMuX2FjdGlvbnNCeUNsaXBbbz9vLnV1aWQ6dF07cmV0dXJuIHZvaWQgMCE9PWEmJmEuYWN0aW9uQnlSb290W3JdfHxudWxsfXN0b3BBbGxBY3Rpb24oKXtsZXQgdD10aGlzLl9hY3Rpb25zO2ZvcihsZXQgaT10aGlzLl9uQWN0aXZlQWN0aW9ucy0xO2k+PTA7LS1pKXRbaV0uc3RvcCgpO3JldHVybiB0aGlzfXVwZGF0ZSh0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dGhpcy5fbkFjdGl2ZUFjdGlvbnMscj10aGlzLnRpbWUrPXQqPXRoaXMudGltZVNjYWxlLG89TWF0aC5zaWduKHQpLHM9dGhpcy5fYWNjdUluZGV4Xj0xO2ZvcihsZXQgYz0wO2MhPT1pOysrYyllW2NdLl91cGRhdGUocix0LG8scyk7bGV0IGE9dGhpcy5fYmluZGluZ3MsbD10aGlzLl9uQWN0aXZlQmluZGluZ3M7Zm9yKGxldCBjPTA7YyE9PWw7KytjKWFbY10uYXBwbHkocyk7cmV0dXJuIHRoaXN9c2V0VGltZSh0KXt0aGlzLnRpbWU9MDtmb3IobGV0IGU9MDtlPHRoaXMuX2FjdGlvbnMubGVuZ3RoO2UrKyl0aGlzLl9hY3Rpb25zW2VdLnRpbWU9MDtyZXR1cm4gdGhpcy51cGRhdGUodCl9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9yb290fXVuY2FjaGVDbGlwKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10LnV1aWQscj10aGlzLl9hY3Rpb25zQnlDbGlwLG89cltpXTtpZih2b2lkIDAhPT1vKXtsZXQgcz1vLmtub3duQWN0aW9ucztmb3IobGV0IGE9MCxsPXMubGVuZ3RoO2EhPT1sOysrYSl7bGV0IGM9c1thXTt0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGMpO2xldCB1PWMuX2NhY2hlSW5kZXgsZD1lW2UubGVuZ3RoLTFdO2MuX2NhY2hlSW5kZXg9bnVsbCxjLl9ieUNsaXBDYWNoZUluZGV4PW51bGwsZC5fY2FjaGVJbmRleD11LGVbdV09ZCxlLnBvcCgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oYyl9ZGVsZXRlIHJbaV19fXVuY2FjaGVSb290KHQpe2xldCBlPXQudXVpZCxpPXRoaXMuX2FjdGlvbnNCeUNsaXA7Zm9yKGxldCBzIGluIGkpe2xldCBsPWlbc10uYWN0aW9uQnlSb290W2VdO3ZvaWQgMCE9PWwmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGwpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGwpKX1sZXQgbz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWVbZV07aWYodm9pZCAwIT09bylmb3IobGV0IHMgaW4gbyl7bGV0IGE9b1tzXTthLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKGEpfX11bmNhY2hlQWN0aW9uKHQsZSl7bGV0IGk9dGhpcy5leGlzdGluZ0FjdGlvbih0LGUpO251bGwhPT1pJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihpKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihpKSl9fS5wcm90b3R5cGUuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI9bmV3IEZsb2F0MzJBcnJheSgxKTt2YXIgZkU9Y2xhc3N7Y29uc3RydWN0b3IodCl7InN0cmluZyI9PXR5cGVvZiB0JiYoY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLiIpLHQ9YXJndW1lbnRzWzFdKSx0aGlzLnZhbHVlPXR9Y2xvbmUoKXtyZXR1cm4gbmV3IGZFKHZvaWQgMD09PXRoaXMudmFsdWUuY2xvbmU/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfX07KGNsYXNzIGV4dGVuZHMgWWd7Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodCxlKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9aX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc31jbG9uZSh0KXtsZXQgZT1zdXBlci5jbG9uZSh0KTtyZXR1cm4gZS5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxlfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9fSkucHJvdG90eXBlLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIFNkZT1uZXcgYXQsWmc9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgYXQoMS8wLDEvMCksZT1uZXcgYXQoLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2xldCBpPVNkZS5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIoaSksdGhpcy5tYXguY29weSh0KS5hZGQoaSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueX1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueSl9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4Lnl9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gU2RlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMubWluLmFkZCh0KSx0aGlzLm1heC5hZGQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubWluLmVxdWFscyh0aGlzLm1pbikmJnQubWF4LmVxdWFscyh0aGlzLm1heCl9fTtaZy5wcm90b3R5cGUuaXNCb3gyPSEwO3ZhciBmZj1uZXcgaWUsZWs9bmV3IFJuLHM4PW5ldyBSbjtmdW5jdGlvbiBLZGUobil7bGV0IHQ9W107biYmbi5pc0JvbmUmJnQucHVzaChuKTtmb3IobGV0IGU9MDtlPG4uY2hpbGRyZW4ubGVuZ3RoO2UrKyl0LnB1c2guYXBwbHkodCxLZGUobi5jaGlsZHJlbltlXSkpO3JldHVybiB0fXZhciBycWU9bmV3IEZsb2F0MzJBcnJheSgxKTtmdW5jdGlvbiBERyhuLHQsZSl7aWYoMT09PWUpcmV0dXJuIG5ldyB2bih0KTtsZXQgaT12Zyh0KTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYGQzIGZhaWxlZCB0byByZWNvZ25pemUgdGhlIGNvbG9yOiAke3R9YCk7cmV0dXJuIG5ldyB2bihkeihpLG4pKDEtZSkpfW5ldyBJbnQzMkFycmF5KHJxZS5idWZmZXIpLHFhLmNyZWF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUocWEucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG4ucHJvdG90eXBlLmdldFBvaW50PXQsbn0sbEUucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKG4pfSxjbGFzcyBleHRlbmRzIHJFe2NvbnN0cnVjdG9yKHQ9MTAsZT0xMCxpPTQ0NzM5MjQscj04OTQ3ODQ4KXtpPW5ldyB2bihpKSxyPW5ldyB2bihyKTtsZXQgbz1lLzIscz10L2UsYT10LzIsbD1bXSxjPVtdO2ZvcihsZXQgcD0wLGg9MCxmPS1hO3A8PWU7cCsrLGYrPXMpe2wucHVzaCgtYSwwLGYsYSwwLGYpLGwucHVzaChmLDAsLWEsZiwwLGEpO2xldCBtPXA9PT1vP2k6cjttLnRvQXJyYXkoYyxoKSxoKz0zLG0udG9BcnJheShjLGgpLGgrPTMsbS50b0FycmF5KGMsaCksaCs9MyxtLnRvQXJyYXkoYyxoKSxoKz0zfWxldCB1PW5ldyBucjt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKcihsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBKcihjLDMpKSxzdXBlcih1LG5ldyBBcCh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJHcmlkSGVscGVyIn19LnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9LGNsYXNzIGV4dGVuZHMgckV7Y29uc3RydWN0b3IodCl7bGV0IGU9S2RlKHQpLGk9bmV3IG5yLHI9W10sbz1bXSxzPW5ldyB2bigwLDAsMSksYT1uZXcgdm4oMCwxLDApO2ZvcihsZXQgYz0wO2M8ZS5sZW5ndGg7YysrKXtsZXQgdT1lW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihyLnB1c2goMCwwLDApLHIucHVzaCgwLDAsMCksby5wdXNoKHMucixzLmcscy5iKSxvLnB1c2goYS5yLGEuZyxhLmIpKX1pLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKcihyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBKcihvLDMpKSxzdXBlcihpLG5ldyBBcCh7dmVydGV4Q29sb3JzOiEwLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITEsdHJhbnNwYXJlbnQ6ITB9KSksdGhpcy50eXBlPSJTa2VsZXRvbkhlbHBlciIsdGhpcy5pc1NrZWxldG9uSGVscGVyPSEwLHRoaXMucm9vdD10LHRoaXMuYm9uZXM9ZSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMX11cGRhdGVNYXRyaXhXb3JsZCh0KXtsZXQgZT10aGlzLmJvbmVzLGk9dGhpcy5nZW9tZXRyeSxyPWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO3M4LmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtmb3IobGV0IG89MCxzPTA7bzxlLmxlbmd0aDtvKyspe2xldCBhPWVbb107YS5wYXJlbnQmJmEucGFyZW50LmlzQm9uZSYmKGVrLm11bHRpcGx5TWF0cmljZXMoczgsYS5tYXRyaXhXb3JsZCksZmYuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGVrKSxyLnNldFhZWihzLGZmLngsZmYueSxmZi56KSxlay5tdWx0aXBseU1hdHJpY2VzKHM4LGEucGFyZW50Lm1hdHJpeFdvcmxkKSxmZi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZWspLHIuc2V0WFlaKHMrMSxmZi54LGZmLnksZmYueikscys9Mil9aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIikubmVlZHNVcGRhdGU9ITAsc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCl9fS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tlbGV0b25IZWxwZXI6IHVwZGF0ZSgpIG5vIGxvbmdlciBuZWVkcyB0byBiZSBjYWxsZWQuIil9LERkLnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Mb2FkZXI6IC5leHRyYWN0VXJsQmFzZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5Mb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSgpIGluc3RlYWQuIiksaUcuZXh0cmFjdFVybEJhc2Uobil9LERkLkhhbmRsZXJzPXthZGQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmFkZCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5hZGRIYW5kbGVyKCkgaW5zdGVhZC4iKX0sZ2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5nZXQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuZ2V0SGFuZGxlcigpIGluc3RlYWQuIil9fSxaZy5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihuKX0sWmcucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSxaZy5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX0sWmcucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKG4pfSxUbC5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihuKX0sVGwucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSxUbC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX0sVGwucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUobil9LFRsLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX0seGYucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9LGdiLnByb3RvdHlwZS5zZXRGcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4iKSx0aGlzLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KG4pfSxKby5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfSxKby5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX0sSm8ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sSm8ucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX0sSm8ucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LEpvLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9LFJuLnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKG4pfSxSbi5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfSxSbi5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIiksKG5ldyBpZSkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDMpfSxSbi5wcm90b3R5cGUuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkuIiksdGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihuKX0sUm4ucHJvdG90eXBlLm11bHRpcGx5VG9BcnJheT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFJuLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSxSbi5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3I0PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sUm4ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sUm4ucHJvdG90eXBlLnJvdGF0ZUF4aXM9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuLnRyYW5zZm9ybURpcmVjdGlvbih0aGlzKX0sUm4ucHJvdG90eXBlLmNyb3NzVmVjdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5jcm9zc1ZlY3RvcigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSxSbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFJuLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxSbi5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sUm4ucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFJuLnByb3RvdHlwZS5yb3RhdGVCeUF4aXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQnlBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sUm4ucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sUm4ucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFJuLnByb3RvdHlwZS5tYWtlRnJ1c3R1bT1mdW5jdGlvbihuLHQsZSxpLHIsbyl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VGcnVzdHVtKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgaW5zdGVhZC4iKSx0aGlzLm1ha2VQZXJzcGVjdGl2ZShuLHQsaSxlLHIsbyl9LFJuLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9LHV1LnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkxpbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5pc0ludGVyc2VjdGlvbkxpbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzTGluZSgpLiIpLHRoaXMuaW50ZXJzZWN0c0xpbmUobil9LHFzLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBpcyBub3cgdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApIGluc3RlYWQuIiksbi5hcHBseVF1YXRlcm5pb24odGhpcyl9LHFzLnByb3RvdHlwZS5pbnZlcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLmludmVyc2UoKSBoYXMgYmVlbiByZW5hbWVkIHRvIGludmVydCgpLiIpLHRoaXMuaW52ZXJ0KCl9LENmLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkJveD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LENmLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uUGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzUGxhbmUoKS4iKSx0aGlzLmludGVyc2VjdHNQbGFuZShuKX0sQ2YucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uU3BoZXJlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1NwaGVyZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShuKX0sbG8ucHJvdG90eXBlLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmFyZWEoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRBcmVhKCkuIiksdGhpcy5nZXRBcmVhKCl9LGxvLnByb3RvdHlwZS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLHRoaXMuZ2V0QmFyeWNvb3JkKG4sdCl9LGxvLnByb3RvdHlwZS5taWRwb2ludD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0TWlkcG9pbnQoKS4iKSx0aGlzLmdldE1pZHBvaW50KG4pfSxsby5wcm90b3R5cGVub3JtYWw9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSx0aGlzLmdldE5vcm1hbChuKX0sbG8ucHJvdG90eXBlLnBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAucGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRQbGFuZSgpLiIpLHRoaXMuZ2V0UGxhbmUobil9LGxvLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksbG8uZ2V0QmFyeWNvb3JkKG4sdCxlLGkscil9LGxvLm5vcm1hbD1mdW5jdGlvbihuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLGxvLmdldE5vcm1hbChuLHQsZSxpKX0sSXAucHJvdG90eXBlLmV4dHJhY3RBbGxQb2ludHM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRyYWN0QWxsUG9pbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5leHRyYWN0UG9pbnRzKCkgaW5zdGVhZC4iKSx0aGlzLmV4dHJhY3RQb2ludHMobil9LElwLnByb3RvdHlwZS5leHRydWRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBTZih0aGlzLG4pfSxJcC5wcm90b3R5cGUubWFrZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAubWFrZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFNoYXBlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBRZyh0aGlzLG4pfSxhdC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX0sYXQucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfSxhdC5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9LGllLnByb3RvdHlwZS5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfSxpZS5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUXVhdGVybmlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX0saWUucHJvdG90eXBlLmdldFBvc2l0aW9uRnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24obil9LGllLnByb3RvdHlwZS5nZXRTY2FsZUZyb21NYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFNjYWxlKG4pfSxpZS5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LG4pfSxpZS5wcm90b3R5cGUuYXBwbHlQcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LGllLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUobix0LGUpfSxpZS5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8obil9LGllLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sYXIucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9LGFyLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sWGkucHJvdG90eXBlLmdldENoaWxkQnlOYW1lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0Q2hpbGRCeU5hbWUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRPYmplY3RCeU5hbWUoKS4iKSx0aGlzLmdldE9iamVjdEJ5TmFtZShuKX0sWGkucHJvdG90eXBlLnJlbmRlckRlcHRoPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnJlbmRlckRlcHRoIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAucmVuZGVyT3JkZXIsIGluc3RlYWQuIil9LFhpLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIiksdGhpcy50cmFuc2xhdGVPbkF4aXModCxuKX0sWGkucHJvdG90eXBlLmdldFdvcmxkUm90YXRpb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUm90YXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuT2JqZWN0M0QuZ2V0V29ybGRRdWF0ZXJuaW9uKCB0YXJnZXQgKSBpbnN0ZWFkLiIpfSxYaS5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLiIpLHRoaXMuYXBwbHlNYXRyaXg0KG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhYaS5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXI9bn19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9fX0pLFZvLnByb3RvdHlwZS5zZXREcmF3TW9kZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5zZXREcmF3TW9kZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFZvLnByb3RvdHlwZSx7ZHJhd01vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4iKSwwfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSksZ2sucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxXcy5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihuLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx2b2lkIDAhPT10JiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChuKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZmMucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9bn19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1ufX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1ufX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9bn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPW59fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9bn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPW59fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPW59fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9bn19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9bn19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWXIucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09b2t9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShvayl9fX0pLFlyLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKCEwPT09bj9vazpxUyksdGhpc30sWXIucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sWXIucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sbnIucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChuKX0sbnIucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksdCYmdC5pc0J1ZmZlckF0dHJpYnV0ZXx8dCYmdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPyJpbmRleCI9PT1uPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShuLHQpOihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShuLG5ldyBZcihhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpfSxuci5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24obix0LGUpe3ZvaWQgMCE9PWUmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChuLHQpfSxuci5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfSxuci5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxuci5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUobil9LG5yLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG5yLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSksWWcucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZSghMD09PW4/b2s6cVMpLHRoaXN9LFlnLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sU2YucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFNmLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxTZi5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHZiLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sZkUucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaHMucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyB2bn19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PW59fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPW59fSx2ZXJ0ZXhUYW5nZW50czp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHAucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1ufX19KSxpci5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KG4pLHRoaXMuY2xlYXIodCxlLGkpfSxpci5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKG4pfSxpci5wcm90b3R5cGUuZ2V0Q3VycmVudFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKSx0aGlzLmdldFJlbmRlclRhcmdldCgpfSxpci5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX0saXIucHJvdG90eXBlLmdldFByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufSxpci5wcm90b3R5cGUucmVzZXRHTFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4iKSx0aGlzLnN0YXRlLnJlc2V0KCl9LGlyLnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9LGlyLnByb3RvdHlwZS5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9LGlyLnByb3RvdHlwZS5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKX0saXIucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LGlyLnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX0saXIucHJvdG90eXBlLnN1cHBvcnRzQmxlbmRNaW5NYXg9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKX0saXIucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfSxpci5wcm90b3R5cGUuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9LGlyLnByb3RvdHlwZS5lbmFibGVTY2lzc29yVGVzdD1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKSx0aGlzLnNldFNjaXNzb3JUZXN0KG4pfSxpci5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0saXIucHJvdG90eXBlLmFkZFByZVBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGlyLnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGlyLnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxpci5wcm90b3R5cGUuc2V0RmFjZUN1bGxpbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGlyLnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGlyLnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGlyLnByb3RvdHlwZS5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxpci5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGlyLnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGlyLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIiksdGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1ufX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIiksdGhpcy5zaGFkb3dNYXAudHlwZT1ufX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxjb250ZXh0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY29udGV4dCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmdldENvbnRleHQoKSBpbnN0ZWFkLiIpLHRoaXMuZ2V0Q29udGV4dCgpfX0sdnI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC52ciBoYXMgYmVlbiByZW5hbWVkIHRvIC54ciIpLHRoaXMueHJ9fSxnYW1tYUlucHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIil9fSxnYW1tYU91dHB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLHRoaXMub3V0cHV0RW5jb2Rpbmc9ITA9PT1uP1dyOmJmfX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxnYW1tYUZhY3Rvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIiksMn0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR2RlLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhXYS5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1ufX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPW59fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPW59fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPW59fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1ufX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1ufX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1ufX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1ufX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9bn19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bn19fSksY2xhc3MgZXh0ZW5kcyBYaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKCEwPT09dGhpcy5pc1BsYXlpbmcpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTt0aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IGU9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiBlLmJ1ZmZlcj10aGlzLmJ1ZmZlcixlLmxvb3A9dGhpcy5sb29wLGUubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LGUubG9vcEVuZD10aGlzLmxvb3BFbmQsZS5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLGUuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPWUsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLCEwPT09dGhpcy5sb29wJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfXN0b3AoKXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLl9wcm9ncmVzcz0wLHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnNvdXJjZS5vbmVuZGVkPW51bGwsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSwhMD09PXRoaXMuX2Nvbm5lY3RlZD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHZvaWQgMCE9PXRoaXMuc291cmNlLmRldHVuZSlyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMucGxheWJhY2tSYXRlPXQsITA9PT10aGlzLmlzUGxheWluZyYmdGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFRhcmdldEF0VGltZSh0aGlzLnBsYXliYWNrUmF0ZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbD8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5sb29wPXQsITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuc291cmNlLmxvb3A9dGhpcy5sb29wKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX0ucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4obmV3IHNHKS5sb2FkKG4sZnVuY3Rpb24oaSl7dC5zZXRCdWZmZXIoaSl9KSx0aGlzfSxLUy5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShuLHQpfSxLUy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihuLHQsZSxpKX0sVHAuY3Jvc3NPcmlnaW49dm9pZCAwLFRwLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IHI9bmV3IEs4O3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IG89ci5sb2FkKG4sZSx2b2lkIDAsaSk7cmV0dXJuIHQmJihvLm1hcHBpbmc9dCksb30sVHAubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgUTg7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfSxUcC5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LFRwLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfSx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246IjEzNyJ9fSkpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPSIxMzciKTt2YXIgcHU9KCgpPT4oZnVuY3Rpb24obil7bltuLkNJUkNMRT0wXT0iQ0lSQ0xFIixuW24uTElORT0xXT0iTElORSIsbltuLlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsbltuLlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0ocHV8fChwdT17fSkpLHB1KSkoKTtmdW5jdGlvbiBKZGUobix0KXtsZXQgZT10Lmxlbmd0aC8yLGk9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghaXx8aS5jb3VudCE9PTMqZSkmJihpPW5ldyBZcihuZXcgRmxvYXQzMkFycmF5KDMqZSksMyksbi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixpKSk7bGV0IHI9aS5hcnJheTtmb3IobGV0IG89MDtvPGU7bysrKXJbMypvXT10WzIqb10sclszKm8rMV09dFsyKm8rMV07aS5uZWVkc1VwZGF0ZT0hMCxuLnNldERyYXdSYW5nZSgwLDMqZSksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiAkZGUobix0LGUpe2xldCBpPU1hdGgubWF4KHQubGVuZ3RoLzItMSwwKSxyPTIqaSozLG89MypyLHM9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghc3x8cy5jb3VudCE9PXIpJiYocz1uZXcgWXIobmV3IEZsb2F0MzJBcnJheShvKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLHMpKTtsZXQgYT1zLmFycmF5O2ZvcihsZXQgbD0wO2w8aTtsKyspe2xldFtjLHUsZCxwXT1bdFsyKmxdLHRbMipsKzFdLHRbMipsKzJdLHRbMipsKzNdXSxoPW5ldyBhdChjLHUpLGY9bmV3IGF0KGQscCksbT1uZXcgYXQoZC1jLHAtdSkseD1uZXcgYXQoLW0ueSxtLngpLnNldExlbmd0aChlLzIpLGc9aC5jbG9uZSgpLmFkZCh4KSxiPWguY2xvbmUoKS5zdWIoeCksRD1mLmNsb25lKCkuYWRkKHgpLFQ9Zi5jbG9uZSgpLnN1Yih4KSxrPVtnLngsZy55LDAsYi54LGIueSwwLEQueCxELnksMCxELngsRC55LDAsYi54LGIueSwwLFQueCxULnksMF07YS5zZXQoayxsKmsubGVuZ3RoKX1zLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsbyksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBOayhuLHQsZSxpKXtsZXR7dmlzaWJsZTpyLGNvbG9yOm8sb3BhY2l0eTpzfT1pO2lmKEFycmF5LmlzQXJyYXkodC5tYXRlcmlhbCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IG9ubHkgZXhwZWN0IG9uZSBtYXRlcmlhbCBvbiBhbiBvYmplY3QiKTtsZXQgYT10Lm1hdGVyaWFsO2lmKGEudmlzaWJsZSE9PXImJihhLnZpc2libGU9cixhLm5lZWRzVXBkYXRlPSEwKSwhcilyZXR1cm4hMTtsZXQgbD1ERyhuLG8scz8/MSksYz1lKHQuZ2VvbWV0cnkpO3JldHVybiB0Lmdlb21ldHJ5IT09YyYmKHQuZ2VvbWV0cnk9YyksYS5jb2xvci5lcXVhbHMobCl8fChhLmNvbG9yLnNldChsKSxhLm5lZWRzVXBkYXRlPSEwKSwhMH12YXIgQms9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5yYXdTZXJpZXNEYXRhPVtdLHRoaXMuc2VyaWVzPVtdLHRoaXMucGFpbnREaXJ0eT0hMCx0aGlzLnJlbmRlckNhY2hlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJldkZyYW1lQ2FjaGU9bmV3IE1hcCx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXB9Z2V0RnJvbVByZXZpb3VzRnJhbWUodCl7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGUuZ2V0KHQpPz9udWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2xldCB0PVtdO2ZvcihsZXRbZSxpXW9mIHRoaXMucHJldkZyYW1lQ2FjaGUuZW50cmllcygpKXRoaXMuY3VyckZyYW1lQ2FjaGUuaGFzKGUpfHx0LnB1c2goaSk7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGU9dGhpcy5jdXJyRnJhbWVDYWNoZSx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXAsdH19LHRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbCx0aGlzLmxheW91dD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmdldE1ldGFkYXRhTWFwSW1wbD10LmdldE1ldGFkYXRhTWFwLHRoaXMuY29vcmRpbmF0b3I9dC5jb29yZGluYXRvcix0aGlzLnJlbmRlcmVyPXQucmVuZGVyZXIsdGhpcy5wYWludEJydXNoPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucmVuZGVyQ2FjaGU9dCx0aGlzLnJlbmRlcmVyPWV9c2V0TGluZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkpO3ImJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxyKX1zZXRUcmlhbmdsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0Q2lyY2xlKHQsZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJhcGV6b2lkKHQsZSxpLHIpe2xldCBvPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkscik7byYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LG8pfX0odGhpcy5yZW5kZXJDYWNoZSx0aGlzLnJlbmRlcmVyKX1zZXRMYXlvdXRSZWN0KHQpeyh0aGlzLmxheW91dC54IT09dC54fHx0aGlzLmxheW91dC53aWR0aCE9PXQud2lkdGh8fHRoaXMubGF5b3V0LnkhPT10Lnl8fHRoaXMubGF5b3V0LmhlaWdodCE9PXQuaGVpZ2h0KSYmKHRoaXMucGFpbnREaXJ0eT0hMCksdGhpcy5sYXlvdXQ9dH1nZXRMYXlvdXRSZWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0fWdldE1ldGFkYXRhTWFwKCl7cmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsKCl9bWFya0FzUGFpbnREaXJ0eSgpe3RoaXMucGFpbnREaXJ0eT0hMH1yZW5kZXIoKXtpZih0aGlzLnRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpLHRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IobGV0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0TGF5b3V0UmVjdCgpO3RoaXMuc2VyaWVzPW5ldyBBcnJheSh0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGg7ZSsrKXtsZXQgaT10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOmkuaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheSgyKmkucG9pbnRzLmxlbmd0aCl9O2ZvcihsZXQgcj0wO3I8aS5wb2ludHMubGVuZ3RoO3IrKyl7bGV0W28sc109dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW2kucG9pbnRzW3JdLngsaS5wb2ludHNbcl0ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lWzIqcl09byx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVsyKnIrMV09c319dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19LFRiPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OVU1CRVI9MF09Ik5VTUJFUiIsbltuLk5BTj0xXT0iTkFOIn0oVGJ8fChUYj17fSkpLFRiKSkoKSxWaz1jbGFzcyBleHRlbmRzIEJre3JlY29yZFBhcnRpdGlvbih0LGUsaSl7cmV0dXJuIHQ/e3R5cGU6VGIuTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOlRiLk5BTixwb2x5bGluZTplLm1hcCgocixvKT0+aXNOYU4ocik/byUyPT0wP2kueDppLnk6cil9fXBhcnRpdGlvblBvbHlsaW5lKHQpe2xldCBlPVtdLGk9MCxyPSExLG89dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHRoaXMuZ2V0TGF5b3V0UmVjdCgpLFswLDBdKSxzPXt4Om9bMF0seTpvWzFdfSxhPW51bGw7Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKz0yKXtsZXQgYz10W2xdLHU9dFtsKzFdLGQ9aXNOYU4oYyl8fGlzTmFOKHUpO2QhPT1yJiZpIT09bCYmKGUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksbCksbnVsbD09PWE/e3g6Yyx5OnV9OmEpKSxpPWwpLGR8fChhPXt4OmMseTp1fSkscj1kfXJldHVybiBpIT09dC5sZW5ndGgtMSYmZS5wdXNoKHRoaXMucmVjb3JkUGFydGl0aW9uKCFyLHQuc2xpY2UoaSx0Lmxlbmd0aCksYT8/cykpLGV9cmVkcmF3KCl7Zm9yKGxldCB0IG9mIHRoaXMuc2VyaWVzKXtsZXQgaT10aGlzLmdldE1ldGFkYXRhTWFwKClbdC5pZF07aWYoIWkpY29udGludWU7aWYodC5wb2x5bGluZS5sZW5ndGglMiE9MCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBoYXZlIG9kZCBsZW5ndGgtZWQgcG9seWxpbmU6ICR7dC5wb2x5bGluZS5sZW5ndGh9YCk7bGV0IHI9dGhpcy5wYXJ0aXRpb25Qb2x5bGluZSh0LnBvbHlsaW5lKTtmb3IobGV0W28se3R5cGU6cyxwb2x5bGluZTphfV1vZiByLmVudHJpZXMoKSlpZihzPT09VGIuTlVNQkVSKTI9PT1hLmxlbmd0aD90aGlzLnBhaW50QnJ1c2guc2V0Q2lyY2xlKEpTT04uc3RyaW5naWZ5KFsiY2lyY2xlIix0LmlkLG9dKSx7eDphWzBdLHk6YVsxXX0se2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLHQuaWQsb10pLGEse2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEsd2lkdGg6Mn0pO2Vsc2UgaWYoIWkuYXV4KWZvcihsZXQgbD0wO2w8YS5sZW5ndGg7bCs9Mil0aGlzLnBhaW50QnJ1c2guc2V0VHJpYW5nbGUoSlNPTi5zdHJpbmdpZnkoWyJOYU4iLHQuaWQsYVtsXSxhW2wrMV1dKSx7eDphW2xdLHk6YVtsKzFdfSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Omkub3BhY2l0eT8/MSxzaXplOjEyfSl9fX0sSGs9Y2xhc3MgZXh0ZW5kcyBCeXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jYW1lcmE9bmV3IHFnKDAsMWUzLDFlMywwLDAsMTAwKX1pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMX1zZXREb21Db250YWluZXJSZWN0KHQpe3N1cGVyLnNldERvbUNvbnRhaW5lclJlY3QodCksdGhpcy5jYW1lcmEubGVmdD10LngsdGhpcy5jYW1lcmEucmlnaHQ9dC54K3Qud2lkdGgsdGhpcy5jYW1lcmEudG9wPXQueSt0LmhlaWdodCx0aGlzLmNhbWVyYS5ib3R0b209dC55LHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRDYW1lcmEoKXtyZXR1cm4gdGhpcy5jYW1lcmF9fSxVaz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtzd2l0Y2godGhpcy5tZXRhZGF0YU1hcD17fSx0aGlzLnNob3VsZFJlcGFpbnQ9ITEsdGhpcy5jYWxsYmFja3M9dC5jYWxsYmFja3MsdC50eXBlKXtjYXNlIGRyLlNWRzp0aGlzLmNvb3JkaW5hdG9yPW5ldyBCeSx0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN2Zz10fWZsdXNoKCl7fW9uUmVzaXplKHQpe31kZXN0cm95T2JqZWN0KHQpe3RoaXMuc3ZnLnJlbW92ZUNoaWxkKHQuZG9tKX1zZXRVc2VEYXJrTW9kZSh0KXt9Y3JlYXRlUGF0aERTdHJpbmcodCl7aWYoIXQubGVuZ3RoKXJldHVybiIiO2xldCBlPW5ldyBBcnJheSh0Lmxlbmd0aC8yKTtlWzBdPWBNJHt0WzBdfSwke3RbMV19YDtmb3IobGV0IGk9MTtpPHQubGVuZ3RoLzI7aSsrKWVbaV09YEwke3RbMippXX0sJHt0WzIqaSsxXX1gO3JldHVybiBlLmpvaW4oIiIpfWNyZWF0ZU9yVXBkYXRlTGluZU9iamVjdCh0LGUsaSl7bGV0IHI9eE8odD8uZG9tLCgpPT57bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTtvLnN0eWxlLmZpbGw9Im5vbmUiO2xldCBzPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoZSk7cmV0dXJuIG8uc2V0QXR0cmlidXRlKCJkIixzKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChvKSxvfSxvPT57aWYoIXQ/LmRhdGF8fCFzdV9hcmVQb2x5bGluZXNFcXVhbChlLHQ/LmRhdGEpKXtsZXQgcz10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO28uc2V0QXR0cmlidXRlKCJkIixzKX1yZXR1cm4gb30saSk7cmV0dXJuIG51bGw9PT1yP251bGw6KHIuc3R5bGUuc3Ryb2tlV2lkdGg9U3RyaW5nKGkud2lkdGgpLHtkb206cixkYXRhOmV9KX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyLGNvbG9yOm99PWkscz1yKk1hdGguc3FydCgzKS8yLGE9bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnkrcy8zLGUueCtyLzIsZS55K3MvMyxlLngsZS55LTIqcy8zXSksbD14Tyh0Py5kb20sKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2MuY2xhc3NMaXN0LmFkZCgidHJpYW5nbGUiKSxjLnN0eWxlLmZpbGw9Im5vbmUiO2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYyksY30sYz0+e2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksY30saSk7cmV0dXJuIG51bGw9PT1sP251bGw6KGwuc3R5bGUuZmlsbD1vLHtkb206bCxkYXRhOmF9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsaSl7bGV0e2NvbG9yOnIscmFkaXVzOm99PWkscz14Tyh0Py5kb20sKCk9PntsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2lyY2xlIik7cmV0dXJuIGEuc3R5bGUuZmlsbD1yLGEuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLGEuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLGEuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcobykpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKGEpLGF9LGE9PihhLnN0eWxlLmZpbGw9cixhLnNldEF0dHJpYnV0ZSgiY3giLFN0cmluZyhlLngpKSxhLnNldEF0dHJpYnV0ZSgiY3kiLFN0cmluZyhlLnkpKSxhLnNldEF0dHJpYnV0ZSgiciIsU3RyaW5nKG8pKSxhKSxpKTtyZXR1cm4gbnVsbD09PXM/bnVsbDp7ZG9tOnMsZGF0YTplfX1jcmVhdGVPclVwZGF0ZVRyYXBlem9pZE9iamVjdCh0LGUsaSxyKXtpZihlLnkhPT1pLnkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIklucHV0IGVycm9yOiBzdGFydC55ICE9IGVuZC55LiIpO2xldHthbHRpdHVkZTpvLGNvbG9yOnN9PXIsYT0yL01hdGguc3FydCgzKSpvLGw9bmV3IEZsb2F0MzJBcnJheShbZS54LWEvMixlLnkrby8yLGUueCxlLnktby8yLGkueCxpLnktby8yLGkueCthLzIsaS55K28vMl0pLGM9eE8odD8uZG9tLCgpPT57bGV0IHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt1LmNsYXNzTGlzdC5hZGQoInRyYXBlem9pZCIpLHUuc3R5bGUuZmlsbD0ibm9uZSI7bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZCh1KSx1fSx1PT57bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSx1fSxyKTtyZXR1cm4gbnVsbD09PWM/bnVsbDooYy5zdHlsZS5maWxsPXMse2RvbTpjLGRhdGE6bH0pfWRpc3Bvc2UoKXt9fSh0LmNvbnRhaW5lcik7YnJlYWs7Y2FzZSBkci5XRUJHTDp7bGV0IGU9bmV3IEhrO3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT1uZXcgdmIsdGhpcy5iYWNrZ3JvdW5kQ29sb3I9IiNmZmYiLHN1X2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCkmJnQgaW5zdGFuY2VvZiBPZmZzY3JlZW5DYW52YXMmJih0LnN0eWxlPXQuc3R5bGV8fHt9KSxyJiZ0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHIpLHRoaXMucmVuZGVyZXI9bmV3IGlyKHtjYW52YXM6dCxhbnRpYWxpYXM6ITAsYWxwaGE6ITB9KSx0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8oaSl9b25SZXNpemUodCl7dGhpcy5yZW5kZXJlci5zZXRTaXplKHQud2lkdGgsdC5oZWlnaHQpfWRlc3Ryb3lPYmplY3QodCl7bGV0IGU9dC5vYmozZDtpZih0aGlzLnNjZW5lLnJlbW92ZShlKSxlIGluc3RhbmNlb2YgVm8pe2UuZ2VvbWV0cnkuZGlzcG9zZSgpO2xldCBpPUFycmF5LmlzQXJyYXkoZS5tYXRlcmlhbCk/ZS5tYXRlcmlhbDpbZS5tYXRlcmlhbF07Zm9yKGxldCByIG9mIGkpci5kaXNwb3NlKCl9fXNldFVzZURhcmtNb2RlKHQpe3RoaXMuYmFja2dyb3VuZENvbG9yPXQ/IiMzMDMwMzAiOiIjZmZmIn1jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodCxlLGkpe2lmKCF0JiYhaS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOnIsd2lkdGg6b309aTtpZighdCl7bGV0IHU9REcodGhpcy5iYWNrZ3JvdW5kQ29sb3IsaS5jb2xvcixpLm9wYWNpdHk/PzEpLGQ9bmV3IG5yLHA9bmV3IEFwKHtjb2xvcjp1fSksaD1uZXcgVm8oZCxwKTtyZXR1cm4gcC52aXNpYmxlPXIsJGRlKGQsZSxvKSx0aGlzLnNjZW5lLmFkZChoKSx7dHlwZTpwdS5MSU5FLGRhdGE6ZSxvYmozZDpoLHdpZHRoOm99fWxldHtkYXRhOnMsb2JqM2Q6YSx3aWR0aDpsfT10O3JldHVybiBOayh0aGlzLmJhY2tncm91bmRDb2xvcixhLHU9PigobyE9PWx8fCFzfHwhc3VfYXJlUG9seWxpbmVzRXF1YWwocyxlKSkmJiRkZSh1LGUsbyksdSksaSk/e3R5cGU6cHUuTElORSxkYXRhOmUsb2JqM2Q6YSx3aWR0aDpvfTp0fWNyZWF0ZU1lc2godCxlKXtpZighZS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOmksY29sb3I6cixvcGFjaXR5Om99PWUscz1ERyh0aGlzLmJhY2tncm91bmRDb2xvcixyLG8/PzEpLGE9bmV3IEdnKHtjb2xvcjpzLHZpc2libGU6aX0pO3JldHVybiBuZXcgVm8odCxhKX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyfT1pLG89cipNYXRoLnNxcnQoMykvMixzPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55LW8vMyxlLngrci8yLGUueS1vLzMsZS54LGUueSsyKm8vM10pO2lmKCF0KXtsZXQgbD1uZXcgbnI7SmRlKGwscyk7bGV0IGM9dGhpcy5jcmVhdGVNZXNoKGwsaSk7cmV0dXJuIG51bGw9PT1jP251bGw6KHRoaXMuc2NlbmUuYWRkKGMpLHt0eXBlOnB1LlRSSUFOR0xFLGRhdGE6ZSxvYmozZDpjfSl9cmV0dXJuIE5rKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsbD0+KEpkZShsLHMpLGwpLGkpP3t0eXBlOnB1LlRSSUFOR0xFLGRhdGE6ZSxvYmozZDp0Lm9iajNkfTp0fWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7cmFkaXVzOnJ9PWksbz1uZXcgeWIoaS5yYWRpdXMpO2lmKCF0KXtsZXQgYT10aGlzLmNyZWF0ZU1lc2gobyxpKTtyZXR1cm4gbnVsbD09PWE/bnVsbDooYS5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZChhKSx7dHlwZTpwdS5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOmF9KX1yZXR1cm4gTmsodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+byxpKT8odC5vYmozZC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx7dHlwZTpwdS5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOm99PXIscz0yL01hdGguc3FydCgzKSpvLGE9bmV3IElwKFtuZXcgYXQoZS54LXMvMixlLnktby8yKSxuZXcgYXQoZS54LGUueStvLzIpLG5ldyBhdChpLngsaS55K28vMiksbmV3IGF0KGkueCtzLzIsaS55LW8vMildKTthLmF1dG9DbG9zZT0hMDtsZXQgbD1uZXcgUWcoYSk7aWYoIXQpe2xldCB1PXRoaXMuY3JlYXRlTWVzaChsLHIpO3JldHVybiBudWxsPT09dT9udWxsOih0aGlzLnNjZW5lLmFkZCh1KSx7dHlwZTpwdS5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDp1fSl9cmV0dXJuIE5rKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsKCk9Pmwscik/e3R5cGU6cHUuVFJBUEVaT0lELGRhdGE6W2UsaV0sb2JqM2Q6dC5vYmozZH06dH1mbHVzaCgpe3RoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsdGhpcy5jb29yZGluYXRvci5nZXRDYW1lcmEoKSl9ZGlzcG9zZSgpe3RoaXMucmVuZGVyZXIuZGlzcG9zZSgpfX0odC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgVmsoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUob3UodCkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFlTY2FsZShvdSh0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KHt4OjAseTowLC4uLnR9KSx0aGlzLnJlbmRlcmVyLm9uUmVzaXplKHt4OjAseTowLC4uLnR9KSx0aGlzLnNlcmllc0xpbmVWaWV3LnNldExheW91dFJlY3Qoey4uLnQseDowLHk6MH0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0TWV0YWRhdGEodCl7bGV0IGU9ITE7T2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW2kscl0pPT57bGV0IG89dGhpcy5tZXRhZGF0YU1hcFtpXTsoIW98fHIuY29sb3IhPT1vLmNvbG9yfHxyLnZpc2libGUhPT1vLnZpc2libGV8fHIub3BhY2l0eSE9PW8ub3BhY2l0eSkmJihlPSEwKSx0aGlzLm1ldGFkYXRhTWFwW2ldPXJ9KSxlJiZ0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFZpZXdCb3godCl7dGhpcy5jb29yZGluYXRvci5zZXRWaWV3Qm94UmVjdCh7eDp0LnhbMF0sd2lkdGg6dC54WzFdLXQueFswXSx5OnQueVswXSxoZWlnaHQ6dC55WzFdLXQueVswXX0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0RGF0YSh0KXt0aGlzLnNlcmllc0xpbmVWaWV3LnNldERhdGEodCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnJlbmRlcmVyLnNldFVzZURhcmtNb2RlKHQpLHRoaXMuc2VyaWVzTGluZVZpZXcubWFya0FzUGFpbnREaXJ0eSgpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2NoZWR1bGVSZXBhaW50KCl7dGhpcy5zaG91bGRSZXBhaW50fHwodGhpcy5zaG91bGRSZXBhaW50PSEwLChuPT57c2VsZi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KSgoKT0+e3RoaXMucmVwYWludCgpLHRoaXMuc2hvdWxkUmVwYWludD0hMX0pKX1yZXBhaW50KCl7dGhpcy5zZXJpZXNMaW5lVmlldy5yZW5kZXIoKSx0aGlzLnJlbmRlcmVyLmZsdXNoKCksdGhpcy5jYWxsYmFja3Mub25EcmF3RW5kKCl9fSxEbD0oKCk9PihmdW5jdGlvbihuKXtuW24uU0VSSUVTX0RBVEFfVVBEQVRFRD0wXT0iU0VSSUVTX0RBVEFfVVBEQVRFRCIsbltuLlNFUklFU19NRVRBREFUQV9DSEFOR0VEPTFdPSJTRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCIsbltuLlNDQUxFX1VQREFURUQ9Ml09IlNDQUxFX1VQREFURUQiLG5bbi5WSUVXX0JPWF9VUERBVEVEPTNdPSJWSUVXX0JPWF9VUERBVEVEIixuW24uSU5JVD00XT0iSU5JVCIsbltuLkRPTV9SRVNJWkVEPTVdPSJET01fUkVTSVpFRCIsbltuLkRBUktfTU9ERV9VUERBVEVEPTZdPSJEQVJLX01PREVfVVBEQVRFRCIsbltuLkRJU1BPU0VEPTddPSJESVNQT1NFRCJ9KERsfHwoRGw9e30pKSxEbCkpKCksRGI9KCgpPT4oZnVuY3Rpb24obil7bltuLk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQiLG5bbi5PTl9DT05URVhUX0xPU1Q9MV09Ik9OX0NPTlRFWFRfTE9TVCJ9KERifHwoRGI9e30pKSxEYikpKCk7ZnVuY3Rpb24gdHBlKG4pe2lmKG4uaW5jbHVkZXMoIi8iKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiV29ya2VyIGZhY3Rvcnkgb25seSBhbGxvd3MgZmlsZSBuYW1lIGFuZCBubyByZXNvdXJjZSBwYXRoLiIpO3JldHVybiBuZXcgV29ya2VyKG4pfXZhciBKZz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLmNhbGxiYWNrcz10LmNhbGxiYWNrcyx0LnR5cGUhPT1kci5XRUJHTCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IHVzZSBub24gV0VCR0wgcmVuZGVyZXIgZm9yIHRoZSBvZmZzY3JlZW4gbGluZSBjaGFydC4gUmVjZWl2ZWQgJHtkclt0LnR5cGVdfSBgKTtsZXQgZT1uZXcgTWVzc2FnZUNoYW5uZWw7ZS5wb3J0MS5vbm1lc3NhZ2U9bz0+e3RoaXMub25NZXNzYWdlRnJvbVdvcmtlcihvLmRhdGEpfSx0aGlzLnR4TWVzc2FnZVBvcnQ9ZS5wb3J0MTtsZXQgaT10LmNvbnRhaW5lci50cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbigpO3RoaXMud29ya2VySW5zdGFuY2U9Smcud29ya2VyUG9vbC5nZXROZXh0KCk7bGV0IHI9e3R5cGU6RGwuSU5JVCxjYW52YXM6aSxkZXZpY2VQaXhlbFJhdGlvOndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLGRpbTp0LmRvbURpbWVuc2lvbixyZW5kZXJlclR5cGU6dC50eXBlLHVzZURhcmtNb2RlOnQudXNlRGFya01vZGV9O3RoaXMud29ya2VySW5zdGFuY2UucG9zdE1lc3NhZ2UocixbaSxlLnBvcnQyXSl9ZGlzcG9zZSgpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RGwuRElTUE9TRUR9KSx0aGlzLndvcmtlckluc3RhbmNlLmZyZWUoKSx0aGlzLnR4TWVzc2FnZVBvcnQuY2xvc2UoKX1zZXRYU2NhbGVUeXBlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RGwuU0NBTEVfVVBEQVRFRCxheGlzOiJ4IixzY2FsZVR5cGU6dH0pfXNldFlTY2FsZVR5cGUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpEbC5TQ0FMRV9VUERBVEVELGF4aXM6InkiLHNjYWxlVHlwZTp0fSl9cmVzaXplKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RGwuRE9NX1JFU0laRUQsZGltOnR9KX1zZXRNZXRhZGF0YSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOkRsLlNFUklFU19NRVRBREFUQV9DSEFOR0VELG1ldGFkYXRhOnR9KX1zZXRWaWV3Qm94KHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RGwuVklFV19CT1hfVVBEQVRFRCxleHRlbnQ6dH0pfXNldERhdGEodCl7bGV0IGU9ZnVuY3Rpb24obil7bGV0IHQ9bi5yZWR1Y2UoKG8scyk9Pm8rcy5wb2ludHMubGVuZ3RoLDApLGU9MCxpPW5ldyBGbG9hdDY0QXJyYXkoMip0KSxyPVtdO2ZvcihsZXQgbyBvZiBuKXtyLnB1c2goe2lkOm8uaWQsbGVuZ3RoOm8ucG9pbnRzLmxlbmd0aH0pO2ZvcihsZXQgcz0wO3M8by5wb2ludHMubGVuZ3RoO3MrKylpW2UrK109by5wb2ludHNbc10ueCxpW2UrK109by5wb2ludHNbc10ueX1yZXR1cm57aWRzQW5kTGVuZ3RoczpyLGZsYXR0ZW5lZFNlcmllczppLmJ1ZmZlcn19KHQpO3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RGwuU0VSSUVTX0RBVEFfVVBEQVRFRCxjb21wYWN0RGF0YVNlcmllczplfSxbZS5mbGF0dGVuZWRTZXJpZXNdKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOkRsLkRBUktfTU9ERV9VUERBVEVELHVzZURhcmtNb2RlOnR9KX1zZW5kTWVzc2FnZSh0LGUpe2U/dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQsZSk6dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQpfW9uTWVzc2FnZUZyb21Xb3JrZXIodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSBEYi5PTl9SRURSQVdfRU5EOnRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpO2JyZWFrO2Nhc2UgRGIuT05fQ09OVEVYVF9MT1NUOnRoaXMuY2FsbGJhY2tzLm9uQ29udGV4dExvc3QoKX19fTtmdW5jdGlvbiBBZChuLHQpe3JldHVybiJ4Ij09PXQ/WzAsbi53aWR0aF06W24uaGVpZ2h0LDBdfWZ1bmN0aW9uIHZFKG4sdCl7bGV0IGU9TWF0aC5mbG9vcihuLzUwKTtyZXR1cm4gTWF0aC5taW4oZSx0KX1mdW5jdGlvbiBQRyhuLHQsZSxpKXtyZXR1cm57bWFqb3I6W10sbWlub3I6bi50aWNrcyhpLGUpLm1hcChvPT4oe3ZhbHVlOm8sdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2sobyl9KSl9fUpnLndvcmtlclBvb2w9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZT0xMCxpPXRwZSl7dGhpcy53b3JrZXJSZXNvdXJjZVBhdGg9dCx0aGlzLm1heFBvb2xTaXplPWUsdGhpcy53b3JrZXJGYWN0b3J5PWksdGhpcy53b3JrZXJzPVtdfWdldE5leHQoKXtsZXQgdDtpZih0aGlzLndvcmtlcnMuZXZlcnkoKHthY3RpdmVDb3VudDppfSk9Pmk+MCkmJnRoaXMud29ya2Vycy5sZW5ndGg8dGhpcy5tYXhQb29sU2l6ZSl7bGV0IGk9dGhpcy53b3JrZXJGYWN0b3J5KHRoaXMud29ya2VyUmVzb3VyY2VQYXRoKTt0PXthY3RpdmVDb3VudDowLHBvc3RNZXNzYWdlOihyLG8pPT57aS5wb3N0TWVzc2FnZShyLG8pfSxmcmVlOigpPT57dC5hY3RpdmVDb3VudD1NYXRoLm1heCh0LmFjdGl2ZUNvdW50LTEsMCl9fSx0aGlzLndvcmtlcnMucHVzaCh0KX1lbHNle2xldCBpPXRoaXMud29ya2Vycy5tYXAoKHthY3RpdmVDb3VudDpvfSk9Pm8pLHI9aS5pbmRleE9mKE1hdGgubWluKC4uLmkpKTt0PXRoaXMud29ya2Vyc1tyXX1yZXR1cm4gdC5hY3RpdmVDb3VudCsrLHR9fSgiY2hhcnRfd29ya2VyLmpzP19maWxlX2hhc2g9YzQ0MTc2ODEiKTt2YXIgSUc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKSx5RT17Z2V0U3RhbmRhcmRUaWNrczpQRyxnZXRUaWNrc0ZvclRlbXBvcmFsU2NhbGU6ZnVuY3Rpb24obix0LGUsaSl7bGV0W3Isb109aSxzPW4udGlja3MoaSwyKTtpZihvLXI+PTg2NGU1fHxzLmxlbmd0aD4yKXJldHVybiBQRyhuLHQsZSxpKTtsZXQgYT1uLnRpY2tzKGksZSk7cmV0dXJue21ham9yOnMubWFwKGw9Pih7c3RhcnQ6bCx0aWNrRm9ybWF0dGVkU3RyaW5nOnQuZm9ybWF0U2hvcnQobCl9KSksbWlub3I6YS5tYXAobD0+KHt2YWx1ZTpsLHRpY2tGb3JtYXR0ZWRTdHJpbmc6dC5mb3JtYXRUaWNrKGwpfSkpfX0sZ2V0VGlja3NGb3JMaW5lYXJTY2FsZTpmdW5jdGlvbihuLHQsZSxpKXtsZXRbcixvXT1pLHM9TWF0aC5hYnMoby1yKTtpZihzPi4wMDEpcmV0dXJuIFBHKG4sdCxlLGkpO2xldCBhPW4udGlja3MoW3Isb10sZSksbD1uLnRpY2tzKFtyLG9dLDIpLGM9W10sdT1mdW5jdGlvbihuKXtsZXQgdD1uLnRvRXhwb25lbnRpYWwoKS5zcGxpdCgiZS0iLDIpO3JldHVybiAyPT09dC5sZW5ndGg/TnVtYmVyKHRbMV0pLTE6MH0ocyk7czwxJiZsLmV2ZXJ5KGg9PntsZXQgZj1NYXRoLmFicyhoKTtyZXR1cm4gZj49MCYmZjwxfSkmJih1Kz0xKTtsZXQgZD1uZXcgTWFwO2ZvcihsZXQgaCBvZiBsKXtsZXRbZixtPSIiXT1TdHJpbmcoaCkuc3BsaXQoIi4iLDIpLHg9TnVtYmVyKGYrIi4iK20uc2xpY2UoMCx1KSk7ZC5zZXQoeCx7c3RhcnQ6eCx0aWNrRm9ybWF0dGVkU3RyaW5nOjA9PT14PyJcdTIwMTQiOnQuZm9ybWF0UmVhZGFibGUoeCl9KX1sZXQgcD0xMCpNYXRoLnBvdygxMCwtdSk7Zm9yKGxldCBoIG9mIGEpZm9yKGxldCBmIG9mWy4uLmQua2V5cygpXS5yZXZlcnNlKCkpe2xldCBtPWgtZjtpZihtPj0wJiZtPHApe2lmKDA9PT1mKWMucHVzaCh7dmFsdWU6aCx0aWNrRm9ybWF0dGVkU3RyaW5nOnQuZm9ybWF0VGljayhoKX0pO2Vsc2V7bGV0IHg9U3RyaW5nKGgpLnNsaWNlKFN0cmluZyhmKS5sZW5ndGgpO2MucHVzaCh7dmFsdWU6aCx0aWNrRm9ybWF0dGVkU3RyaW5nOmBcdTIwMjYke3h8fCIwIn1gfSl9YnJlYWt9fXJldHVybnttYWpvcjpBcnJheS5mcm9tKGQudmFsdWVzKCkpLG1pbm9yOmN9fSxmaWx0ZXJUaWNrc0J5VmlzaWJpbGl0eTpmdW5jdGlvbihuLHQsZSxpLHI9NSl7aWYoIW4ubGVuZ3RofHwhSUcpcmV0dXJuIG47bGV0IG89IngiPT09ZT8xOi0xLHM9bnVsbDtyZXR1cm4gbi5maWx0ZXIoYT0+e2xldCBsPXQoYSk7SUcuZm9udD1pO2xldCBjPUlHLm1lYXN1cmVUZXh0KGEudGlja0Zvcm1hdHRlZFN0cmluZyksdT0ieCI9PT1lP2Mud2lkdGg6Yy5hY3R1YWxCb3VuZGluZ0JveEFzY2VudC1jLmFjdHVhbEJvdW5kaW5nQm94RGVzY2VudDtyZXR1cm4gbnVsbD09PXM/IShsK28qdTwwfHwocz1sK28qdSwwKSk6IShvKihzK28qci1sKT4wfHwocz1sK28qdSwwKSl9KX19O2Z1bmN0aW9uIGRxZShuLHQpe2lmKDEmbiYmKEluKCksXygwLCJnIiwxNykoMSwidGV4dCIpLEEoMiksdigpLF8oMywidGl0bGUiKSxBKDQpLHYoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9UygpO0MoMSksUHQoImZvbnQiLGkuYXhpc0ZvbnQpLHplKCJ4IixpLnRleHRYUG9zaXRpb24oZS52YWx1ZSkpKCJ5IixpLnRleHRZUG9zaXRpb24oZS52YWx1ZSkpLEMoMSksamUoIiAiLGUudGlja0Zvcm1hdHRlZFN0cmluZywiICIpLEMoMikseXQoaS5nZXRGb3JtYXR0ZXIoKS5mb3JtYXRMb25nKGUudmFsdWUpKX19ZnVuY3Rpb24gcHFlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwyMCkoMSwic3BhbiIpLEEoMiksdigpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9dC5sYXN0LG89UygyKTtQdCgibGVmdCIsby5nZXRNYWpvclhQb3NpdGlvbihlKSwicHgiKSgid2lkdGgiLG8uZ2V0TWFqb3JXaWR0aFN0cmluZyhlLHIsby5tYWpvclRpY2tzW2krMV0pKSgiYm90dG9tIixvLmdldE1ham9yWVBvc2l0aW9uKGUpLCJweCIpKCJoZWlnaHQiLG8uZ2V0TWFqb3JIZWlnaHRTdHJpbmcoZSxyLG8ubWFqb3JUaWNrc1tpKzFdKSkoImZvbnQiLG8uYXhpc0ZvbnQpLGV0KCJtYWpvci1sYWJlbCIsITApKCJsYXN0IixyKSx5KCJ0aXRsZSIsby5nZXRGb3JtYXR0ZXIoKS5mb3JtYXRMb25nKGUuc3RhcnQpKSxDKDIpLHl0KGUudGlja0Zvcm1hdHRlZFN0cmluZyl9fWZ1bmN0aW9uIGhxZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwxOCksRSgxLHBxZSwzLDE2LCJzcGFuIiwxOSksdigpKSwyJm4pe2xldCBlPVMoKTtDKDEpLHkoIm5nRm9yT2YiLGUubWFqb3JUaWNrcykoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5TWFqb3JUaWNrKX19dmFyIG9wZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2U9bmV3IEcsdGhpcy5lZGl0TWVudU9wZW5lZD0hMSx0aGlzLm1ham9yVGlja3M9W10sdGhpcy5taW5vclRpY2tzPVtdfW5nT25DaGFuZ2VzKCl7bGV0IGU9bnVsbCxyPXZFKCJ4Ij09PXRoaXMuYXhpcz90aGlzLmRvbURpbS53aWR0aDp0aGlzLmRvbURpbS5oZWlnaHQsdGhpcy5ncmlkQ291bnQpO2U9dGhpcy5zY2FsZSBpbnN0YW5jZW9mIEVTP3lFLmdldFRpY2tzRm9yTGluZWFyU2NhbGUodGhpcy5zY2FsZSx0aGlzLmdldEZvcm1hdHRlcigpLHIsdGhpcy5heGlzRXh0ZW50KTp0aGlzLnNjYWxlIGluc3RhbmNlb2YgVFM/eUUuZ2V0VGlja3NGb3JUZW1wb3JhbFNjYWxlKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxyLHRoaXMuYXhpc0V4dGVudCk6eUUuZ2V0U3RhbmRhcmRUaWNrcyh0aGlzLnNjYWxlLHRoaXMuZ2V0Rm9ybWF0dGVyKCkscix0aGlzLmF4aXNFeHRlbnQpLHRoaXMubWFqb3JUaWNrcz1lLm1ham9yLHRoaXMubWlub3JUaWNrcz15RS5maWx0ZXJUaWNrc0J5VmlzaWJpbGl0eShlLm1pbm9yLG89PnRoaXMuZ2V0RG9tUG9zKG8udmFsdWUpLHRoaXMuYXhpcywiMTFweCBSb2JvdG8sIHNhbnMtc2VyaWYiKX1nZXRGb3JtYXR0ZXIoKXtyZXR1cm4gdGhpcy5jdXN0b21Gb3JtYXR0ZXI/P3RoaXMuc2NhbGUuZGVmYXVsdEZvcm1hdHRlcn10cmFja0J5TWlub3JUaWNrKGUpe3JldHVybiBlLnZhbHVlfXRyYWNrQnlNYWpvclRpY2soZSl7cmV0dXJuIGUuc3RhcnR9Z2V0RG9tUG9zKGUpe3JldHVybiB0aGlzLnNjYWxlLmZvcndhcmQodGhpcy5heGlzRXh0ZW50LEFkKHRoaXMuZG9tRGltLHRoaXMuYXhpcyksZSl9dGV4dFhQb3NpdGlvbihlKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/U3RyaW5nKHRoaXMuZ2V0RG9tUG9zKGUpKToiMTAwJSJ9dGV4dFlQb3NpdGlvbihlKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/IiI6U3RyaW5nKHRoaXMuZ2V0RG9tUG9zKGUpKX1nZXRNYWpvclhQb3NpdGlvbihlKXtyZXR1cm4ieSI9PT10aGlzLmF4aXM/MDpNYXRoLm1pbih0aGlzLmRvbURpbS53aWR0aCxNYXRoLm1heCgwLHRoaXMuZ2V0RG9tUG9zKGUuc3RhcnQpKSl9Z2V0TWFqb3JXaWR0aFN0cmluZyhlLGkscil7cmV0dXJuInkiPT09dGhpcy5heGlzPyIiOihpfHwhcj90aGlzLmRvbURpbS53aWR0aDp0aGlzLmdldE1ham9yWFBvc2l0aW9uKHIpKS10aGlzLmdldE1ham9yWFBvc2l0aW9uKGUpKyJweCJ9Z2V0TWFqb3JZUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzPzA6dGhpcy5kb21EaW0uaGVpZ2h0LU1hdGgubWluKHRoaXMuZG9tRGltLmhlaWdodCxNYXRoLm1heCgwLHRoaXMuZ2V0RG9tUG9zKGUuc3RhcnQpKSl9Z2V0TWFqb3JIZWlnaHRTdHJpbmcoZSxpLHIpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz8iIjooaXx8IXI/dGhpcy5kb21EaW0uaGVpZ2h0OnRoaXMuZ2V0TWFqb3JZUG9zaXRpb24ocikpLXRoaXMuZ2V0TWFqb3JZUG9zaXRpb24oZSkrInB4In1rZXlkb3duUHJldmVudENsb3NlKGUpeyJFc2NhcGUiIT09ZS5rZXkmJmUuc3RvcFByb3BhZ2F0aW9uKCl9ZXh0ZW50Q2hhbmdlZChlLGkpe2xldCByPU51bWJlcihlKSxvPU51bWJlcihpKTtpZihvPHIpe2xldCBzPXI7cj1vLG89c30hTnVtYmVyLmlzRmluaXRlKHIpfHwhTnVtYmVyLmlzRmluaXRlKG8pfHx0aGlzLm9uVmlld0V4dGVudENoYW5nZS5lbWl0KFtyLG9dKX1vbkF4aXNVcGRhdGVNZW51T3BlbihlLGkscil7ZS52YWx1ZT1TdHJpbmcoclswXSksaS52YWx1ZT1TdHJpbmcoclsxXSksZS5mb2N1cygpfXNldEVkaXRNZW51T3BlbmVkKGUpe3RoaXMuZWRpdE1lbnVPcGVuZWQ9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibGluZS1jaGFydC1heGlzIl1dLGlucHV0czp7YXhpc0V4dGVudDoiYXhpc0V4dGVudCIsYXhpczoiYXhpcyIsc2NhbGU6InNjYWxlIixncmlkQ291bnQ6ImdyaWRDb3VudCIsZG9tRGltOiJkb21EaW0iLGN1c3RvbUZvcm1hdHRlcjoiY3VzdG9tRm9ybWF0dGVyIn0sb3V0cHV0czp7b25WaWV3RXh0ZW50Q2hhbmdlOiJvblZpZXdFeHRlbnRDaGFuZ2UifSxmZWF0dXJlczpbRnRdLGRlY2xzOjI2LHZhcnM6MTMsY29uc3RzOltbMSwibGluZSJdLFsxLCJtaW5vciJdLFsxLCJ0aWNrcyJdLFsiY2xhc3MiLCJtaW5vci10aWNrLWxhYmVsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQ2xpY2sgdG8gbWFudWFsbHkgc2V0IG1pbiAmIG1heCB2YWx1ZXMiLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIiwibWVudU9wZW5lZCIsIm1lbnVDbG9zZWQiXSxbIm1hdE1lbnVUcmlnZ2VyIiwibWF0TWVudVRyaWdnZXIiXSxbInN2Z0ljb24iLCJlZGl0XzI0cHgiXSxbImNsYXNzIiwibWFqb3IgdGlja3MiLDQsIm5nSWYiXSxbInhQb3NpdGlvbiIsImJlZm9yZSIsMywieVBvc2l0aW9uIl0sWyJtYW51YWxDb250cm9sIiwibWF0TWVudSJdLFsxLCJleHRlbnQtZWRpdC1pbnB1dCIsMywiY2xpY2siLCJrZXlkb3duIl0sWyJ0eXBlIiwibnVtYmVyIiwzLCJ2YWx1ZSJdLFsibWluSW5wdXQiLCIiXSxbIm1heElucHV0IiwiIl0sWzEsImV4dGVudC1lZGl0LWNvbnRyb2wiLDMsImtleWRvd24iXSxbIm1hdC1yYWlzZWQtYnV0dG9uIiwiIiwiY29sb3IiLCJwcmltYXJ5IiwxLCJleHRlbnQtZWRpdC1jaGFuZ2UiLDMsImNsaWNrIl0sWyJtYXQtc3Ryb2tlZC1idXR0b24iLCIiLDEsImV4dGVudC1lZGl0LWNhbmNlbCIsMywiY2xpY2siXSxbMSwibWlub3ItdGljay1sYWJlbCJdLFsxLCJtYWpvciIsInRpY2tzIl0sWzMsIm1ham9yLWxhYmVsIiwibGFzdCIsImxlZnQiLCJ3aWR0aCIsImJvdHRvbSIsImhlaWdodCIsImZvbnQiLCJ0aXRsZSIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlKXtsZXQgcj1QZSgpO18oMCwiZGl2IiksTygxLCJkaXYiLDApLF8oMiwiZGl2IiwxKSxJbigpLF8oMywic3ZnIiwyKSxFKDQsZHFlLDUsNiwiZyIsMyksdigpLEpzKCksXyg1LCJidXR0b24iLDQsNSksUCgibWVudU9wZW5lZCIsZnVuY3Rpb24oKXtvZShyKTtsZXQgcz0kZSgxNSksYT0kZSgyMCk7cmV0dXJuIGkub25BeGlzVXBkYXRlTWVudU9wZW4ocyxhLGkuYXhpc0V4dGVudCksc2UoaS5zZXRFZGl0TWVudU9wZW5lZCghMCkpfSkoIm1lbnVDbG9zZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2V0RWRpdE1lbnVPcGVuZWQoITEpfSksTyg3LCJtYXQtaWNvbiIsNiksdigpKCksRSg4LGhxZSwyLDIsImRpdiIsNyksdigpLF8oOSwibWF0LW1lbnUiLDgsOSkoMTEsImRpdiIsMTApLFAoImNsaWNrIixmdW5jdGlvbihzKXtyZXR1cm4gcy5zdG9wUHJvcGFnYXRpb24oKX0pKCJrZXlkb3duIixmdW5jdGlvbihzKXtyZXR1cm4gaS5rZXlkb3duUHJldmVudENsb3NlKHMpfSksXygxMiwibGFiZWwiKSxBKDEzLCJtaW4iKSx2KCksTygxNCwiaW5wdXQiLDExLDEyKSx2KCksXygxNiwiZGl2IiwxMCksUCgiY2xpY2siLGZ1bmN0aW9uKHMpe3JldHVybiBzLnN0b3BQcm9wYWdhdGlvbigpfSkoImtleWRvd24iLGZ1bmN0aW9uKHMpe3JldHVybiBpLmtleWRvd25QcmV2ZW50Q2xvc2Uocyl9KSxfKDE3LCJsYWJlbCIpLEEoMTgsIm1heCIpLHYoKSxPKDE5LCJpbnB1dCIsMTEsMTMpLHYoKSxfKDIxLCJkaXYiLDE0KSxQKCJrZXlkb3duIixmdW5jdGlvbihzKXtyZXR1cm4gaS5rZXlkb3duUHJldmVudENsb3NlKHMpfSksXygyMiwiYnV0dG9uIiwxNSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7b2Uocik7bGV0IHM9JGUoMTUpLGE9JGUoMjApLGw9JGUoNik7cmV0dXJuIGkuZXh0ZW50Q2hhbmdlZChzLnZhbHVlLGEudmFsdWUpLHNlKGwuY2xvc2VNZW51KCkpfSksQSgyMywiIENoYW5nZSAiKSx2KCksXygyNCwiYnV0dG9uIiwxNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKHIpLHNlKCRlKDYpLmNsb3NlTWVudSgpKX0pLEEoMjUsIiBDYW5jZWwgIiksdigpKCkoKX1pZigyJmUpe2xldCByPSRlKDEwKTtEYShpLmF4aXMrIi1heGlzIGF4aXMiKSxDKDQpLHkoIm5nRm9yT2YiLGkubWlub3JUaWNrcykoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5TWlub3JUaWNrKSxDKDEpLGV0KCJleHRlbnQtZWRpdC1idXR0b24iLCEwKSgiZXh0ZW50LWVkaXQtbWVudS1vcGVuZWQiLGkuZWRpdE1lbnVPcGVuZWQpLHkoIm1hdE1lbnVUcmlnZ2VyRm9yIixyKSxDKDMpLHkoIm5nSWYiLGkubWFqb3JUaWNrcy5sZW5ndGgpLEMoMSkseSgieVBvc2l0aW9uIiwieSI9PT1pLmF4aXM/ImFib3ZlIjoiYmVsb3ciKSxDKDUpLHkoInZhbHVlIixpLmF4aXNFeHRlbnRbMF0pLEMoNSkseSgidmFsdWUiLGkuYXhpc0V4dGVudFsxXSl9fSxkZXBlbmRlbmNpZXM6W2RuLEJlLF9uLEd0LGhkLGZkXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW59Lm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZmlsbDpjdXJyZW50Q29sb3I7Zm9udC1zaXplOjExcHg7dXNlci1zZWxlY3Q6bm9uZX0uYXhpc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1pbm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMDtvdmVyZmxvdzpoaWRkZW59LmxpbmVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2FhYTtmbGV4OjAgMCAxcHg7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9LnRpY2tzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjNweH0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOnRleHQtYmVmb3JlLWVkZ2U7dGV4dC1hbmNob3I6bWlkZGxlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tzW19uZ2NvbnRlbnQtJUNPTVAlXXstd2Via2l0LW1hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSk7bWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMCkgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgcmdiYSgwLCAwLCAwLCAwKSAxMDAlKX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDo1cHh9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTpjZW50cmFsO3RleHQtYW5jaG9yOmVuZH0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrc1tfbmdjb250ZW50LSVDT01QJV17LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwgMCwgMCwgMCkgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgcmdiYSgwLCAwLCAwLCAwKSAxMDAlKTttYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwgMCwgMCwgMCkgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgcmdiYSgwLCAwLCAwLCAwKSAxMDAlKX0uZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Zm9udC1zaXplOjA7aGVpZ2h0OjI0cHg7bGluZS1oZWlnaHQ6MjRweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDo1cHg7dG9wOjVweDt2aXNpYmlsaXR5OmhpZGRlbjt3aWR0aDoyNHB4fS5leHRlbnQtZWRpdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxNnB4O3dpZHRoOjE2cHg7bGluZS1oZWlnaHQ6MTZweH0uZXh0ZW50LWVkaXQtaW5wdXRbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtjb2x1bW4tZ2FwOjVweDtkaXNwbGF5OmdyaWQ7Zm9udC1zaXplOjEycHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjMwcHggbWlubWF4KGF1dG8sIDEwMHB4KTtoZWlnaHQ6MzBweDttYXJnaW46MTBweCAyMHB4fS5leHRlbnQtZWRpdC1pbnB1dFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1zdHlsZTpzb2xpZDtjb2xvcjppbmhlcml0fS5leHRlbnQtZWRpdC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW46MTBweCAyMHB4fS5leHRlbnQtZWRpdC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MS40O21hcmdpbi1sZWZ0OjVweDtwYWRkaW5nOjAgMTBweH0uYXhpc1tfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAuZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmF4aXNbX25nY29udGVudC0lQ09NUCVdOmZvY3VzLXdpdGhpbiAgIC5leHRlbnQtZWRpdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAuZXh0ZW50LWVkaXQtbWVudS1vcGVuZWRbX25nY29udGVudC0lQ09NUCVde3Zpc2liaWxpdHk6dmlzaWJsZX0ubWFqb3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtjb250YWluOnN0cmljdH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7d2hpdGUtc3BhY2U6bm93cmFwfS5tYWpvcltfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjOWU5ZTllO3BhZGRpbmc6MCA1cHh9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWwubGFzdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjOWU5ZTllfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOWU5ZTllO2hlaWdodDoxMDAlO3BhZGRpbmc6NXB4IDA7d2lkdGg6MTAwJX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbC5sYXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjOWU5ZTllfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcn0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGJFKG4sdCl7bGV0IGU9TWF0aC5taW4oaXUobi5tYXAoKHt4Om99KT0+byksdCksbi5sZW5ndGgtMSksaT1NYXRoLm1heCgwLGUtMSk7cmV0dXJuIE1hdGguYWJzKG5baV0ueC10KS1NYXRoLmFicyhuW2VdLngtdCk8PTA/aTplfWZ1bmN0aW9uIHNwZShuLHQsZSxpLHIsbyl7bGV0IHM7c3dpdGNoKG4uZGVsdGFNb2RlKXtjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX1BJWEVMOnM9MTticmVhaztjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU6cz04O2JyZWFrO2Nhc2UgV2hlZWxFdmVudC5ET01fREVMVEFfUEFHRTpzPTIwO2JyZWFrO2RlZmF1bHQ6cz0xLGNvbnNvbGUud2FybihgVW5rbm93biBXaGVlbEV2ZW50IGRlbHRhTW9kZTogJHtuLmRlbHRhTW9kZX0uYCl9bGV0IGE9bi5kZWx0YVkqcyxsPWE8MD9NYXRoLm1heChhKmksLS45NSk6YSppLHt3aWR0aDpjLGhlaWdodDp1fT1lLGQ9W3IucmV2ZXJzZSh0LngsWzAsY10sLW4ub2Zmc2V0WCpsKSxyLnJldmVyc2UodC54LFswLGNdLGMrKGMtbi5vZmZzZXRYKSpsKV0scD1bby5yZXZlcnNlKHQueSxbdSwwXSwtbi5vZmZzZXRZKmwpLG8ucmV2ZXJzZSh0LnksW3UsMF0sdSsodS1uLm9mZnNldFkpKmwpXTtyZXR1cm57eDpkWzFdPGRbMF0/W2RbMV0sZFswXV06ZCx5OnBbMV08cFswXT9bcFsxXSxwWzBdXTpwfX12YXIgZ3FlPVsiZG90cyJdO2Z1bmN0aW9uIF9xZShuLHQpe2lmKDEmbiYmKEluKCksTygwLCJjaXJjbGUiLDEyKSksMiZuKXtsZXQgZT1TKCkuJGltcGxpY2l0LGk9UygyKTt6ZSgiY3giLGkuZ2V0RG9tWChlLmRhdGFQb2ludC54KSkoImN5IixpLmdldERvbVkoZS5kYXRhUG9pbnQueSkpKCJmaWxsIixlLm1ldGFkYXRhLmNvbG9yKX19ZnVuY3Rpb24gdnFlKG4sdCl7aWYoMSZuJiYoSW4oKSxzbigwKSxFKDEsX3FlLDEsMywiY2lyY2xlIiwxMSksYW4oKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoMik7QygxKSx5KCJuZ0lmIixpLnNob3VsZFJlbmRlclRvb2x0aXBQb2ludChlLmRhdGFQb2ludCkpfX1mdW5jdGlvbiB5cWUobix0KXtpZigxJm4mJihJbigpLHNuKDApLEUoMSx2cWUsMiwxLCJuZy1jb250YWluZXIiLDEwKSxhbigpKSwyJm4pe2xldCBlPVMoKTtDKDEpLHkoIm5nRm9yT2YiLGUuY3Vyc29yZWREYXRhKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlTZXJpZXNOYW1lKX19ZnVuY3Rpb24gYnFlKG4sdCl7aWYoMSZuJiYoSW4oKSxPKDAsInJlY3QiLDEzKSksMiZuKXtsZXQgZT1TKCk7emUoIngiLGUuem9vbUJveEluVWlDb29yZGluYXRlLngpKCJ3aWR0aCIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUud2lkdGgpKCJ5IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS55KSgiaGVpZ2h0IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS5oZWlnaHQpfX12YXIgeHFlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm57ZGF0YTpuLGN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQ6dCxjdXJzb3JMb2NhdGlvbjplfX07ZnVuY3Rpb24gQ3FlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDE0KSxOaSgxLDE1KSx2KCkpLDImbil7bGV0IGU9UygpLGk9JGUoMTEpO0MoMSkseSgibmdUZW1wbGF0ZU91dGxldCIsZS50b29sdGlwVGVtcGxhdGU/ZS50b29sdGlwVGVtcGxhdGU6aSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixaeCgyLHhxZSxlLmN1cnNvcmVkRGF0YSxlLmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQsZS5jdXJzb3JMb2NhdGlvbikpfX1mdW5jdGlvbiBNcWUobix0KXtpZigxJm4mJihzbigwKSxfKDEsInRyIiwxNykoMiwidGQiLDE4KSxPKDMsInNwYW4iKSx2KCksXyg0LCJ0ZCIsMTkpLEEoNSksdigpLF8oNiwidGQiKSxBKDcpLHYoKSxfKDgsInRkIiksQSg5KSx2KCkoKSxhbigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O0MoMyksUHQoImJhY2tncm91bmQtY29sb3IiLGUubWV0YWRhdGEuY29sb3IpLEMoMikseXQoZS5tZXRhZGF0YS5kaXNwbGF5TmFtZSksQygyKSx5dChlLmRhdGFQb2ludC55KSxDKDIpLHl0KGUuZGF0YVBvaW50LngpfX1mdW5jdGlvbiB3cWUobix0KXtpZigxJm4mJihfKDAsInRhYmxlIikoMSwidGhlYWQiKSgyLCJ0ciIpLE8oMywidGgiLDE2KSxfKDQsInRoIiksQSg1LCJOYW1lIiksdigpLF8oNiwidGgiKSxBKDcsIlkiKSx2KCksXyg4LCJ0aCIpLEEoOSwiWCIpLHYoKSgpKCksXygxMCwidGJvZHkiKSxFKDExLE1xZSwxMCw1LCJuZy1jb250YWluZXIiLDEwKSx2KCkoKSksMiZuKXtsZXQgZT10LmRhdGEsaT1TKCk7QygxMSkseSgibmdGb3JPZiIsZSkoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5U2VyaWVzTmFtZSl9fWZ1bmN0aW9uIEVxZShuKXtyZXR1cm4gbi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX12YXIgYXBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy5zY3JvbGxTdHJhdGVneT1pLHRoaXMub25WaWV3RXh0ZW50Q2hhbmdlPW5ldyBHLHRoaXMub25WaWV3RXh0ZW50UmVzZXQ9bmV3IEcsdGhpcy5vbkludGVyYWN0aW9uU3RhdGVDaGFuZ2U9bmV3IEcsdGhpcy5JbnRlcmFjdGlvblN0YXRlPUdyLHRoaXMuc3RhdGU9bmV3IGhyKEdyLk5PTkUpLHRoaXMuc3BlY2lhbEtleVByZXNzZWQ9ITEsdGhpcy56b29tQm94SW5VaUNvb3JkaW5hdGU9e3g6MCx3aWR0aDowLGhlaWdodDowLHk6MH0sdGhpcy50b29sdGlwUG9zaXRpb25zPVt7b2Zmc2V0WTo1LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVk6InRvcCJ9LHtvZmZzZXRZOjUsb3JpZ2luWDoiZW5kIixvdmVybGF5WDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlZOiJ0b3AifSx7b2Zmc2V0WTotMTUsb3JpZ2luWDoic3RhcnQiLG92ZXJsYXlYOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WToiYm90dG9tIn0se29mZnNldFk6LTE1LG9yaWdpblg6ImVuZCIsb3ZlcmxheVg6ImVuZCIsb3JpZ2luWToidG9wIixvdmVybGF5WToiYm90dG9tIn0se29mZnNldFg6NSxvcmlnaW5YOiJlbmQiLG92ZXJsYXlYOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WToidG9wIn0se29mZnNldFg6LTUsb3JpZ2luWDoic3RhcnQiLG92ZXJsYXlYOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6InRvcCJ9XSx0aGlzLmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQ9bnVsbCx0aGlzLmN1cnNvckxvY2F0aW9uPW51bGwsdGhpcy5jdXJzb3JlZERhdGE9W10sdGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPSExLHRoaXMuc2hvd1pvb21JbnN0cnVjdGlvbj0hMSx0aGlzLmRyYWdTdGFydENvb3JkPW51bGwsdGhpcy5pc0N1cnNvckluc2lkZT0hMSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IGtlLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0YXRlLnN1YnNjcmliZShlPT57dGhpcy5vbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UuZW1pdChlKX0pKSx0aGlzLm5nVW5zdWJzY3JpYmUucGlwZShMKCgpPT57dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goZT0+ZS51bnN1YnNjcmliZSgpKX0pKSxfaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwiZGJsY2xpY2siLHtwYXNzaXZlOiEwfSkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm9uVmlld0V4dGVudFJlc2V0LmVtaXQoKSx0aGlzLnN0YXRlLm5leHQoR3IuTk9ORSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pLF9pKHdpbmRvdywia2V5ZG93biIse3Bhc3NpdmU6ITB9KS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5zaG91bGRQYW4oZSk7aSE9PXRoaXMuc3BlY2lhbEtleVByZXNzZWQmJih0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPWksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSxfaSh3aW5kb3csImtleXVwIix7cGFzc2l2ZTohMH0pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLnNob3VsZFBhbihlKTtpIT09dGhpcy5zcGVjaWFsS2V5UHJlc3NlZCYmKHRoaXMuc3BlY2lhbEtleVByZXNzZWQ9aSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX0pLF9pKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJtb3VzZWRvd24iLHtwYXNzaXZlOiEwfSkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuc3RhdGUuZ2V0VmFsdWUoKSxyPXRoaXMuc2hvdWxkUGFuKGUpP0dyLlBBTk5JTkc6R3IuRFJBR19aT09NSU5HO2k9PT1Hci5OT05FJiZyPT09R3IuRFJBR19aT09NSU5HJiYodGhpcy5kcmFnU3RhcnRDb29yZD17eDplLm9mZnNldFgseTplLm9mZnNldFl9LHRoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4OmUub2Zmc2V0WCx3aWR0aDowLHk6ZS5vZmZzZXRZLGhlaWdodDowfSksaSE9PXImJih0aGlzLnN0YXRlLm5leHQociksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSxfaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2V1cCIse3Bhc3NpdmU6ITB9KS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57bGV0IGk9KGUuYnV0dG9ucyZDbC5MRUZUKT09PUNsLkxFRlQ7dGhpcy5kcmFnU3RhcnRDb29yZD1udWxsO2xldCByPXRoaXMuem9vbUJveEluVWlDb29yZGluYXRlO2lmKCFpJiZ0aGlzLnN0YXRlLmdldFZhbHVlKCk9PT1Hci5EUkFHX1pPT01JTkcmJnIud2lkdGg+MCYmci5oZWlnaHQ+MCl7bGV0IG89dGhpcy5nZXREYXRhWChyLngpLHM9dGhpcy5nZXREYXRhWChyLngrci53aWR0aCksYT10aGlzLmdldERhdGFZKHIueStyLmhlaWdodCksbD10aGlzLmdldERhdGFZKHIueSk7dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdCh7ZGF0YUV4dGVudDp7eDpbbyxzXSx5OlthLGxdfX0pfXRoaXMuc3RhdGUuZ2V0VmFsdWUoKSE9PUdyLk5PTkUmJih0aGlzLnN0YXRlLm5leHQoR3IuTk9ORSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSxfaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2VlbnRlciIse3Bhc3NpdmU6ITB9KS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5pc0N1cnNvckluc2lkZT0hMCx0aGlzLnVwZGF0ZVRvb2x0aXAoZSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pLF9pKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJtb3VzZWxlYXZlIix7cGFzc2l2ZTohMH0pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLmRyYWdTdGFydENvb3JkPW51bGwsdGhpcy5pc0N1cnNvckluc2lkZT0hMSx0aGlzLnVwZGF0ZVRvb2x0aXAoZSksdGhpcy5zdGF0ZS5uZXh0KEdyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxfaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2Vtb3ZlIix7cGFzc2l2ZTohMH0pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9Pntzd2l0Y2godGhpcy5zdGF0ZS5nZXRWYWx1ZSgpKXtjYXNlIEdyLlNDUk9MTF9aT09NSU5HOnRoaXMuc3RhdGUubmV4dChHci5OT05FKSx0aGlzLnVwZGF0ZVRvb2x0aXAoZSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTticmVhaztjYXNlIEdyLk5PTkU6dGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7YnJlYWs7Y2FzZSBHci5QQU5OSU5HOntsZXQgaT0tZS5tb3ZlbWVudFgscj0tZS5tb3ZlbWVudFkse3dpZHRoOm8saGVpZ2h0OnN9PXRoaXMuZG9tRGltLGE9dGhpcy5nZXREYXRhWChpKSxsPXRoaXMuZ2V0RGF0YVgobytpKSxjPXRoaXMuZ2V0RGF0YVkocytyKSx1PXRoaXMuZ2V0RGF0YVkocik7dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdCh7ZGF0YUV4dGVudDp7eDpbYSxsXSx5OltjLHVdfX0pO2JyZWFrfWNhc2UgR3IuRFJBR19aT09NSU5HOntpZighdGhpcy5kcmFnU3RhcnRDb29yZClicmVhaztsZXQgaT1bdGhpcy5kcmFnU3RhcnRDb29yZC54LGUub2Zmc2V0WF0scj1bdGhpcy5kcmFnU3RhcnRDb29yZC55LGUub2Zmc2V0WV07dGhpcy56b29tQm94SW5VaUNvb3JkaW5hdGU9e3g6TWF0aC5taW4oLi4uaSksd2lkdGg6TWF0aC5tYXgoLi4uaSktTWF0aC5taW4oLi4uaSkseTpNYXRoLm1pbiguLi5yKSxoZWlnaHQ6TWF0aC5tYXgoLi4uciktTWF0aC5taW4oLi4ucil9fXRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9fSksX2kodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIndoZWVsIix7cGFzc2l2ZTohMX0pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSx1aShlPT57bGV0IGk9IWUuY3RybEtleSYmIWUuc2hpZnRLZXkmJmUuYWx0S2V5O3JldHVybiB0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249IWksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSxpPyhlLnByZXZlbnREZWZhdWx0KCksWHQoZSkpOkthKDNlMykucGlwZShrdCgoKT0+e3RoaXMuc2hvd1pvb21JbnN0cnVjdGlvbj0hMSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfSksTCgoKT0+bnVsbCkpfSksWWUoZT0+Qm9vbGVhbihlKSkpLnN1YnNjcmliZShlPT57dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdCh7ZGF0YUV4dGVudDpzcGUoZSx0aGlzLnZpZXdFeHRlbnQsdGhpcy5kb21EaW0sLjAxLHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKX0pLHRoaXMuc3RhdGUuZ2V0VmFsdWUoKSE9PUdyLlNDUk9MTF9aT09NSU5HJiYodGhpcy5zdGF0ZS5uZXh0KEdyLlNDUk9MTF9aT09NSU5HKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX0pfW5nT25DaGFuZ2VzKCl7dGhpcy51cGRhdGVDdXJzb3JlZERhdGFBbmRUb29sdGlwVmlzaWJpbGl0eSgpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1zaG91bGRQYW4oZSl7bGV0IGk9ZS5zaGlmdEtleXx8ZS5hbHRLZXk7aWYoZSBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpcmV0dXJuIGk7bGV0IHI9KGUuYnV0dG9ucyZDbC5MRUZUKT09PUNsLkxFRlQsbz0oZS5idXR0b25zJkNsLk1JRERMRSk9PT1DbC5NSURETEU7cmV0dXJuISghciYmIW8pJiYobyYmIXJ8fGkpfXRyYWNrQnlTZXJpZXNOYW1lKGUsaSl7cmV0dXJuIGkuaWR9Z2V0RG9tWChlKXtyZXR1cm4gdGhpcy54U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueCxBZCh0aGlzLmRvbURpbSwieCIpLGUpfWdldERhdGFYKGUpe3JldHVybiB0aGlzLnhTY2FsZS5yZXZlcnNlKHRoaXMudmlld0V4dGVudC54LEFkKHRoaXMuZG9tRGltLCJ4IiksZSl9Z2V0RG9tWShlKXtyZXR1cm4gdGhpcy55U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueSxBZCh0aGlzLmRvbURpbSwieSIpLGUpfWdldERhdGFZKGUpe3JldHVybiB0aGlzLnlTY2FsZS5yZXZlcnNlKHRoaXMudmlld0V4dGVudC55LEFkKHRoaXMuZG9tRGltLCJ5IiksZSl9c2hvdWxkUmVuZGVyVG9vbHRpcFBvaW50KGUpe3JldHVybiBudWxsIT09ZSYmIWlzTmFOKGUueCkmJiFpc05hTihlLnkpfXVwZGF0ZVRvb2x0aXAoZSl7dGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkPXt4OnRoaXMuZ2V0RGF0YVgoZS5vZmZzZXRYKSx5OnRoaXMuZ2V0RGF0YVkoZS5vZmZzZXRZKX0sdGhpcy5jdXJzb3JMb2NhdGlvbj17eDplLm9mZnNldFgseTplLm9mZnNldFl9LHRoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1vblRvb2x0aXBEaXNwbGF5RGV0YWNoZWQoKXt0aGlzLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQ9ITF9dXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKXtsZXQgZT10aGlzLmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQ7aWYobnVsbD09PWUpcmV0dXJuIHRoaXMuY3Vyc29yZWREYXRhPVtdLHZvaWQodGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPSExKTt0aGlzLmN1cnNvcmVkRGF0YT10aGlzLmlzQ3Vyc29ySW5zaWRlP3RoaXMuc2VyaWVzRGF0YS5tYXAoaT0+KHtzZXJpZXNEYXR1bTppLG1ldGFkYXRhOnRoaXMuc2VyaWVzTWV0YWRhdGFNYXBbaS5pZF19KSkuZmlsdGVyKCh7bWV0YWRhdGE6aX0pPT5pJiZpLnZpc2libGUmJiFCb29sZWFuKGkuYXV4KSkubWFwKCh7c2VyaWVzRGF0dW06aSxtZXRhZGF0YTpyfSk9PntsZXQgbz1iRShpLnBvaW50cyxlLngpLHM9aS5wb2ludHNbb107cmV0dXJue2lkOmkuaWQsY2xvc2VzdFBvaW50SW5kZXg6byxkYXRhUG9pbnQ6cyxkb21Qb2ludDp7eDp0aGlzLmdldERvbVgocy54KSx5OnRoaXMuZ2V0RG9tWShzLnkpfSxtZXRhZGF0YTpyfX0pLmZpbHRlcihpPT5pKTpbXSx0aGlzLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQ9Qm9vbGVhbih0aGlzLmN1cnNvcmVkRGF0YS5sZW5ndGgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKG5uKSxNKG5nKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKG90KGdxZSw3LFJlKSxvdChSaCw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5kb3RzQ29udGFpbmVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLm92ZXJsYXk9ci5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmZXQoInNob3ctem9vbS1pbnN0cnVjdGlvbiIsaS5zaG93Wm9vbUluc3RydWN0aW9uKX0saW5wdXRzOntzZXJpZXNEYXRhOiJzZXJpZXNEYXRhIixzZXJpZXNNZXRhZGF0YU1hcDoic2VyaWVzTWV0YWRhdGFNYXAiLHZpZXdFeHRlbnQ6InZpZXdFeHRlbnQiLHhTY2FsZToieFNjYWxlIix5U2NhbGU6InlTY2FsZSIsZG9tRGltOiJkb21EaW0iLHRvb2x0aXBPcmlnaW5FbDoidG9vbHRpcE9yaWdpbkVsIix0b29sdGlwVGVtcGxhdGU6InRvb2x0aXBUZW1wbGF0ZSJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIixvblZpZXdFeHRlbnRSZXNldDoib25WaWV3RXh0ZW50UmVzZXQiLG9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZToib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpuZyx1c2VGYWN0b3J5OkVxZSxkZXBzOlt0cl19XSksRnRdLGRlY2xzOjEyLHZhcnM6MTUsY29uc3RzOltbMSwiZG90cyJdLFsiZG90cyIsIiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsInpvb20tYm94Iiw0LCJuZ0lmIl0sWzEsInpvb20taW5zdHJ1Y3Rpb24iXSxbMSwiaW5zdHJ1Y3Rpb24tY29udGVudCJdLFsiY2RrT3ZlcmxheU9yaWdpbiIsIiIsMSwidG9vbHRpcC1vcmlnaW4iXSxbInRvb2x0aXBPcmlnaW4iLCJjZGtPdmVybGF5T3JpZ2luIl0sWyJjZGtDb25uZWN0ZWRPdmVybGF5IiwiIiwzLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IiwiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiLCJjZGtDb25uZWN0ZWRPdmVybGF5R3Jvd0FmdGVyT3BlbiIsImRldGFjaCJdLFsiZGVmYXVsdFRvb2x0aXAiLCIiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJyIiwiNCIsNCwibmdJZiJdLFsiciIsIjQiXSxbMSwiem9vbS1ib3giXSxbMSwidG9vbHRpcC1jb250YWluZXIiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsImNpcmNsZS1oZWFkZXIiXSxbMSwidG9vbHRpcC1yb3ciXSxbMSwidG9vbHRpcC1yb3ctY2lyY2xlIl0sWzEsIm5hbWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihJbigpLF8oMCwic3ZnIiwwLDEpLEUoMix5cWUsMiwyLCJuZy1jb250YWluZXIiLDIpLEUoMyxicWUsMSw0LCJyZWN0IiwzKSx2KCksSnMoKSxfKDQsImRpdiIsNCkoNSwic3BhbiIsNSksQSg2LCJBbHQgKyBTY3JvbGwgdG8gWm9vbSIpLHYoKSgpLE8oNywiZGl2Iiw2LDcpLEUoOSxDcWUsMiw2LCJuZy10ZW1wbGF0ZSIsOCksUCgiZGV0YWNoIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG9vbHRpcERpc3BsYXlEZXRhY2hlZCgpfSksRSgxMCx3cWUsMTIsMiwibmctdGVtcGxhdGUiLG51bGwsOSxxdCkpLDImZSYmKGV0KCJwYW5uYWJsZSIsaS5zcGVjaWFsS2V5UHJlc3NlZCkoImRyYWdnYWJsZSIsaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLk5PTkV8fGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5EUkFHX1pPT01JTkcpKCJwYW5uaW5nIixpLnN0YXRlLmdldFZhbHVlKCk9PT1pLkludGVyYWN0aW9uU3RhdGUuUEFOTklORyksQygyKSx5KCJuZ0lmIixpLnN0YXRlLmdldFZhbHVlKCk9PT1pLkludGVyYWN0aW9uU3RhdGUuTk9ORSksQygxKSx5KCJuZ0lmIixpLnN0YXRlLmdldFZhbHVlKCk9PT1pLkludGVyYWN0aW9uU3RhdGUuRFJBR19aT09NSU5HKSxDKDYpLHkoImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iLGkudG9vbHRpcE9yaWdpbkVsKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLGkudG9vbHRpcERpc3BsYXlBdHRhY2hlZCYmaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLk5PTkUpKCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIixpLnRvb2x0aXBQb3NpdGlvbnMpKCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLGkuc2Nyb2xsU3RyYXRlZ3kpKCJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwhMSkoImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiLCEwKSgiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iLCEwKSl9LGRlcGVuZGVuY2llczpbZG4sQmUsb3MsUmgsaWddLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlO3VzZXItc2VsZWN0Om5vbmV9LmRvdHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmRvdHMuZHJhZ2dhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6Y3Jvc3NoYWlyfS5kb3RzLnBhbm5hYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6Z3JhYn0uZG90cy5wYW5uaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6Z3JhYmJpbmd9LnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0udG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNik7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0udG9vbHRpcC1vcmlnaW5bX25nY29udGVudC0lQ09NUCVde2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowfS50b29sdGlwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC44NSk7Ym9yZGVyLXJhZGl1czo0cHg7Y29sb3I6I2ZmZjtjb250YWluOnBhaW50IHN0eWxlIGxheW91dDtmb250LXNpemU6LjllbTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6NXB4O3BvaW50ZXItZXZlbnRzOm5vbmU7d2lkdGg6MTAwJX10aFtfbmdjb250ZW50LSVDT01QJV0sIHRkW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCA1cHg7dGV4dC1hbGlnbjpsZWZ0fXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo1MDA7cGFkZGluZy1ib3R0b206NXB4fS56b29tLWJveFtfbmdjb250ZW50LSVDT01QJV17ZmlsbC1vcGFjaXR5Oi4wMztmaWxsOiMwMDA7c3Ryb2tlOiNjY2N9Lnpvb20taW5zdHJ1Y3Rpb25bX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtsZWZ0OjA7b3BhY2l0eTowO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MTBweDt0cmFuc2l0aW9uOm9wYWNpdHkgLjVzO3otaW5kZXg6MX0uaW5zdHJ1Y3Rpb24tY29udGVudFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC42KTtib3JkZXItcmFkaXVzOjVweDtjb2xvcjojZmZmO3BhZGRpbmc6NXB4IDEwcHg7dXNlci1zZWxlY3Q6bm9uZX0uc2hvdy16b29tLWluc3RydWN0aW9uW19uZ2hvc3QtJUNPTVAlXSAgIC56b29tLWluc3RydWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBEcWUobix0KXtpZigxJm4mJihJbigpLE8oMCwibGluZSIsMikpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKCk7ZXQoInplcm8iLDA9PT1lKSx6ZSgieDEiLGkuZ2V0RG9tWChlKSkoIngyIixpLmdldERvbVgoZSkpKCJ5MiIsaS5kb21EaW0uaGVpZ2h0KX19ZnVuY3Rpb24gQXFlKG4sdCl7aWYoMSZuJiYoSW4oKSxPKDAsImxpbmUiLDMpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9UygpO2V0KCJ6ZXJvIiwwPT09ZSksemUoInkxIixpLmdldERvbVkoZSkpKCJ4MiIsaS5kb21EaW0ud2lkdGgpKCJ5MiIsaS5nZXREb21ZKGUpKX19dmFyIGxwZT0oKCk9PntjbGFzcyBue2dldERvbVgoZSl7cmV0dXJuIHRoaXMueFNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LngsQWQodGhpcy5kb21EaW0sIngiKSxlKX1nZXREb21ZKGUpe3JldHVybiB0aGlzLnlTY2FsZS5mb3J3YXJkKHRoaXMudmlld0V4dGVudC55LEFkKHRoaXMuZG9tRGltLCJ5IiksZSl9Z2V0WFRpY2tzKCl7cmV0dXJuIHRoaXMueFNjYWxlLnRpY2tzKHRoaXMudmlld0V4dGVudC54LHZFKHRoaXMuZG9tRGltLndpZHRoLHRoaXMueEdyaWRDb3VudCkpfWdldFlUaWNrcygpe3JldHVybiB0aGlzLnlTY2FsZS50aWNrcyh0aGlzLnZpZXdFeHRlbnQueSx2RSh0aGlzLmRvbURpbS5oZWlnaHQsdGhpcy55R3JpZENvdW50KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtZ3JpZC12aWV3Il1dLGlucHV0czp7dmlld0V4dGVudDoidmlld0V4dGVudCIseFNjYWxlOiJ4U2NhbGUiLHhHcmlkQ291bnQ6InhHcmlkQ291bnQiLHlTY2FsZToieVNjYWxlIix5R3JpZENvdW50OiJ5R3JpZENvdW50Iixkb21EaW06ImRvbURpbSJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWyJ5MSIsIjAiLDMsInplcm8iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsieDEiLCIwIiwzLCJ6ZXJvIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInkxIiwiMCJdLFsieDEiLCIwIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoSW4oKSxfKDAsInN2ZyIpLEUoMSxEcWUsMSw1LCJsaW5lIiwwKSxFKDIsQXFlLDEsNSwibGluZSIsMSksdigpKSwyJmUmJihDKDEpLHkoIm5nRm9yT2YiLGkuZ2V0WFRpY2tzKCkpLEMoMSkseSgibmdGb3JPZiIsaS5nZXRZVGlja3MoKSkpfSxkZXBlbmRlbmNpZXM6W2RuXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIGxpbmVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgc3Ryb2tlOiAjY2NjO1xuICAgICAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgICAgIH1cblxuICAgICAgLnplcm9bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgc3Ryb2tlOiAjYWFhO1xuICAgICAgICBzdHJva2Utd2lkdGg6IDEuNXB4O1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUHFlPVsic2VyaWVzVmlldyJdLFJxZT1bInhBeGlzIl0sT3FlPVsieUF4aXMiXSxrcWU9WyJjaGFydEVsIl07ZnVuY3Rpb24gRnFlKG4sdCl7aWYoMSZuJiZPKDAsImxpbmUtY2hhcnQtZ3JpZC12aWV3IiwxNiksMiZuKXtsZXQgZT1TKCk7eSgidmlld0V4dGVudCIsZS52aWV3Qm94KSgieFNjYWxlIixlLnhTY2FsZSkoInlTY2FsZSIsZS55U2NhbGUpKCJ4R3JpZENvdW50IixlLlhfR1JJRF9DT1VOVCkoInlHcmlkQ291bnQiLGUuWV9HUklEX0NPVU5UKSgiZG9tRGltIixlLmRvbURpbWVuc2lvbnMubWFpbil9fWZ1bmN0aW9uIE5xZShuLHQpezEmbiYmKEluKCksTygwLCJzdmciLG51bGwsMTcpKX1mdW5jdGlvbiBMcWUobix0KXsxJm4mJk8oMCwiY2FudmFzIixudWxsLDE3KX1mdW5jdGlvbiBCcWUobix0KXtpZigxJm4mJihzbigwKSxFKDEsTnFlLDIsMCwic3ZnIiw1KSxFKDIsTHFlLDIsMCwiY2FudmFzIiw1KSxhbigpKSwyJm4pe2xldCBlPVMoKTtDKDEpLHkoIm5nSWYiLGUuZ2V0UmVuZGVyZXJUeXBlKCk9PT1lLlJlbmRlcmVyVHlwZS5TVkcpLEMoMSkseSgibmdJZiIsZS5nZXRSZW5kZXJlclR5cGUoKT09PWUuUmVuZGVyZXJUeXBlLldFQkdMKX19ZnVuY3Rpb24gVnFlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwibGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3IiwxOCksUCgib25WaWV3RXh0ZW50Q2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uVmlld0JveENoYW5nZWQocikpfSkoIm9uVmlld0V4dGVudFJlc2V0IixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkudmlld0JveFJlc2V0KCkpfSkoIm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UocikpfSksdigpfWlmKDImbil7bGV0IGU9UygpLGk9JGUoMSk7eSgic2VyaWVzRGF0YSIsZS5zZXJpZXNEYXRhKSgic2VyaWVzTWV0YWRhdGFNYXAiLGUuc2VyaWVzTWV0YWRhdGFNYXApKCJ2aWV3RXh0ZW50IixlLnZpZXdCb3gpKCJ4U2NhbGUiLGUueFNjYWxlKSgieVNjYWxlIixlLnlTY2FsZSkoInRvb2x0aXBPcmlnaW5FbCIsaSkoImRvbURpbSIsZS5kb21EaW1lbnNpb25zLm1haW4pKCJ0b29sdGlwVGVtcGxhdGUiLGUudG9vbHRpcFRlbXBsYXRlKX19dmFyIEhxZT1mdW5jdGlvbihuLHQsZSxpKXtyZXR1cm57eFNjYWxlOm4seVNjYWxlOnQsZG9tRGltZW5zaW9uOmUsdmlld0V4dGVudDppfX07ZnVuY3Rpb24gVXFlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDE5KSxOaSgxLDIwKSx2KCkpLDImbil7bGV0IGU9UygpO0MoMSkseSgibmdUZW1wbGF0ZU91dGxldCIsZS5jdXN0b21WaXNUZW1wbGF0ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixLMygyLEhxZSxlLnhTY2FsZSxlLnlTY2FsZSxlLmRvbURpbWVuc2lvbnMubWFpbixlLnZpZXdCb3gpKX19ZnVuY3Rpb24genFlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwibGluZS1jaGFydC1heGlzIiwyMSksUCgib25WaWV3RXh0ZW50Q2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uVmlld0JveENoYW5nZWRGcm9tQXhpcyhyLCJ5IikpfSksdigpfWlmKDImbil7bGV0IGU9UygpO3koImF4aXNFeHRlbnQiLGUudmlld0JveC55KSgiY3VzdG9tRm9ybWF0dGVyIixlLmN1c3RvbVlGb3JtYXR0ZXIpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy55QXhpcykoImdyaWRDb3VudCIsZS5ZX0dSSURfQ09VTlQpKCJzY2FsZSIsZS55U2NhbGUpfX1mdW5jdGlvbiBqcWUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJsaW5lLWNoYXJ0LWF4aXMiLDIyKSxQKCJvblZpZXdFeHRlbnRDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKHIsIngiKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1TKCk7eSgiYXhpc0V4dGVudCIsZS52aWV3Qm94LngpKCJjdXN0b21Gb3JtYXR0ZXIiLGUuY3VzdG9tWEZvcm1hdHRlcikoImRvbURpbSIsZS5kb21EaW1lbnNpb25zLnhBeGlzKSgiZ3JpZENvdW50IixlLlhfR1JJRF9DT1VOVCkoInNjYWxlIixlLnhTY2FsZSl9fWZ1bmN0aW9uIEdxZShuLHQpezEmbiYmKF8oMCwiZGl2IiwyMyksTygxLCJzcGFuIiwyNCksdigpKX12YXIgV3FlPWZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJue3hTY2FsZTpuLHlTY2FsZTp0LGRvbURpbWVuc2lvbjplLHZpZXdFeHRlbnQ6aSxpbnRlcmFjdGlvblN0YXRlOnJ9fTtmdW5jdGlvbiBxcWUobix0KXtpZigxJm4mJihfKDAsImRpdiIsMjUsMjYpLE5pKDIsMjApLHYoKSksMiZuKXtsZXQgZT1TKCk7QygyKSx5KCJuZ1RlbXBsYXRlT3V0bGV0IixlLmN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFozKDIsV3FlLGUueFNjYWxlLGUueVNjYWxlLGUuZG9tRGltZW5zaW9ucy5tYWluLGUudmlld0JveCxlLmludGVyYWN0aW9uU3RhdGUpKX19dmFyIFlxZT1mdW5jdGlvbihuLHQpe3JldHVybntjb250YWluZXI6ITAsImRhcmstbW9kZSI6biwibGluZS1vbmx5LW1vZGUiOnQsImxpbmUtY2hhcnQiOiEwfX0sUkc9e3g6WzAsMV0seTpbMCwxXX0sams9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy5SZW5kZXJlclR5cGU9ZHIsdGhpcy51c2VEYXJrTW9kZT0hMSx0aGlzLnByZWZlcnJlZFJlbmRlcmVyVHlwZT1kci5XRUJHTCx0aGlzLnhTY2FsZVR5cGU9TnIuTElORUFSLHRoaXMueVNjYWxlVHlwZT1Oci5MSU5FQVIsdGhpcy5saW5lT25seT0hMSx0aGlzLnZpZXdCb3hDaGFuZ2VkPW5ldyBHLHRoaXMub25WaWV3Qm94T3ZlcnJpZGRlbj1uZXcgTGYoMSksdGhpcy5pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5ZX0dSSURfQ09VTlQ9Nix0aGlzLlhfR1JJRF9DT1VOVD0xMCx0aGlzLnhTY2FsZT1vdSh0aGlzLnhTY2FsZVR5cGUpLHRoaXMueVNjYWxlPW91KHRoaXMueFNjYWxlVHlwZSksdGhpcy52aWV3Qm94PVJHLHRoaXMuZG9tRGltZW5zaW9ucz17bWFpbjp7d2lkdGg6MCxoZWlnaHQ6MH0seEF4aXM6e3dpZHRoOjAsaGVpZ2h0OjB9LHlBeGlzOnt3aWR0aDowLGhlaWdodDowfX0sdGhpcy5zaG93Q2hhcnRSZW5kZXJlckVsZW1lbnQ9ITAsdGhpcy5pbnRlcmFjdGlvblN0YXRlPUdyLk5PTkUsdGhpcy5saW5lQ2hhcnQ9bnVsbCx0aGlzLmlzRGF0YVVwZGF0ZWQ9ITEsdGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMSx0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMSx0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49ITEsdGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITEsdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMuc2NhbGVVcGRhdGVkPSEwLHRoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMX1uZ09uSW5pdCgpe3RoaXMub25WaWV3Qm94T3ZlcnJpZGRlbi5uZXh0KHRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbil9bmdPbkNoYW5nZXMoZSl7ZS54U2NhbGVUeXBlJiYodGhpcy54U2NhbGU9b3UodGhpcy54U2NhbGVUeXBlKSx0aGlzLnNjYWxlVXBkYXRlZD0hMCksZS55U2NhbGVUeXBlJiYodGhpcy55U2NhbGU9b3UodGhpcy55U2NhbGVUeXBlKSx0aGlzLnNjYWxlVXBkYXRlZD0hMCksZS5zZXJpZXNEYXRhJiYodGhpcy5pc0RhdGFVcGRhdGVkPSEwKSxlLmZpeGVkVmlld0JveCYmKHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSEwKSxlLnNlcmllc01ldGFkYXRhTWFwJiYodGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMCksZS51c2VEYXJrTW9kZSYmKHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSEwKSx0aGlzLnNjYWxlVXBkYXRlZCYmdGhpcy5zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCExKSx0aGlzLmlzVmlld0JveENoYW5nZWQ9dGhpcy5pc1ZpZXdCb3hDaGFuZ2VkfHx0aGlzLnNjYWxlVXBkYXRlZHx8IXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbiYmdGhpcy5zaG91bGRVcGRhdGVEZWZhdWx0Vmlld0JveChlKSx0aGlzLnVwZGF0ZUxpbmVDaGFydCgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuaW5pdGlhbGl6ZUNoYXJ0KCksdGhpcy51cGRhdGVMaW5lQ2hhcnQoKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKX1yZWNvdmVyUmVuZGVyZXJJZk5lZWRlZCgpeyF0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3R8fHRoaXMuZGlzYWJsZVVwZGF0ZXx8KHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSExLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSEwLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuaW5pdGlhbGl6ZUNoYXJ0KCksdGhpcy5zY2FsZVVwZGF0ZWQ9ITAsdGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMCx0aGlzLmlzRGF0YVVwZGF0ZWQ9ITAsdGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITAsdGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWQ9ITAsdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMSl9b25WaWV3UmVzaXplKCl7IXRoaXMubGluZUNoYXJ0fHwodGhpcy5yZWFkQW5kVXBkYXRlRG9tRGltZW5zaW9ucygpLHRoaXMubGluZUNoYXJ0LnJlc2l6ZSh0aGlzLmRvbURpbWVuc2lvbnMubWFpbiksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkpfXNob3VsZFVwZGF0ZURlZmF1bHRWaWV3Qm94KGUpe2lmKGUueFNjYWxlVHlwZXx8ZS55U2NhbGVUeXBlfHxlLmlnbm9yZVlPdXRsaWVyc3x8ZS5zZXJpZXNEYXRhKXJldHVybiEwO2xldCByPWUuc2VyaWVzTWV0YWRhdGFNYXA7aWYocil7bGV0IG89ci5wcmV2aW91c1ZhbHVlO2lmKE9iamVjdC5rZXlzKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApLmxlbmd0aCE9PU9iamVjdC5rZXlzKG8/P3t9KS5sZW5ndGgpcmV0dXJuITA7Zm9yKGxldFtzLGFdb2YgT2JqZWN0LmVudHJpZXModGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkpe2xldCBsPW8mJm9bc107aWYoIWx8fGEudmlzaWJsZSE9PWwudmlzaWJsZSlyZXR1cm4hMH19cmV0dXJuITF9b25Db250ZXh0TG9zdCgpe3RoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMCx0aGlzLmxpbmVDaGFydCYmKHRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKSx0aGlzLmxpbmVDaGFydD1udWxsKX10cmlnZ2VyQ29udGV4dExvc3RGb3JUZXN0KCl7dGhpcy5vbkNvbnRleHRMb3N0KCl9Z2V0TGluZUNoYXJ0Rm9yVGVzdCgpe3JldHVybiB0aGlzLmxpbmVDaGFydH1pbml0aWFsaXplQ2hhcnQoKXt0aGlzLmxpbmVDaGFydCYmdGhpcy5saW5lQ2hhcnQuZGlzcG9zZSgpO2xldCBlPXRoaXMuZ2V0UmVuZGVyZXJUeXBlKCksaT17b25EcmF3RW5kOigpPT57fSxvbkNvbnRleHRMb3N0OnRoaXMub25Db250ZXh0TG9zdC5iaW5kKHRoaXMpfSxyPW51bGw7c3dpdGNoKHRoaXMucmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKSxlKXtjYXNlIGRyLlNWRzpyPXt0eXBlOmRyLlNWRyxjb250YWluZXI6dGhpcy5jaGFydEVsLm5hdGl2ZUVsZW1lbnQsY2FsbGJhY2tzOmksZG9tRGltZW5zaW9uOnRoaXMuZG9tRGltZW5zaW9ucy5tYWluLHVzZURhcmtNb2RlOnRoaXMudXNlRGFya01vZGV9O2JyZWFrO2Nhc2UgZHIuV0VCR0w6cj17dHlwZTpkci5XRUJHTCxjb250YWluZXI6dGhpcy5jaGFydEVsLm5hdGl2ZUVsZW1lbnQsZGV2aWNlUGl4ZWxSYXRpbzp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxjYWxsYmFja3M6aSxkb21EaW1lbnNpb246dGhpcy5kb21EaW1lbnNpb25zLm1haW4sdXNlRGFya01vZGU6dGhpcy51c2VEYXJrTW9kZX07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYDxsaW5lLWNoYXJ0PiBkb2VzIG5vdCB5ZXQgc3VwcG9ydCByZW5kZXJlclR5cGU6ICR7ZX1gKX1sZXQgcz1lIT09ZHIuU1ZHJiZzdV9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpP0pnOlVrO3RoaXMubGluZUNoYXJ0PW5ldyBzKHIpfW5nT25EZXN0cm95KCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKX1nZXRSZW5kZXJlclR5cGUoKXtyZXR1cm4gZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgZHIuU1ZHOnJldHVybiBkci5TVkc7Y2FzZSBkci5XRUJHTDpyZXR1cm4gc3VfaXNXZWJHbDJTdXBwb3J0ZWQoKT9kci5XRUJHTDpkci5TVkc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmVuZGVyZXJUeXBlOiAke259YCl9fSh0aGlzLnByZWZlcnJlZFJlbmRlcmVyVHlwZSl9cmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKXt0aGlzLmRvbURpbWVuc2lvbnM9e21haW46e3dpZHRoOnRoaXMuc2VyaWVzVmlldy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnNlcmllc1ZpZXcubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9LHhBeGlzOnt3aWR0aDp0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMueEF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9LHlBeGlzOnt3aWR0aDp0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMueUF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9fX11cGRhdGVMaW5lQ2hhcnQoKXtpZih0aGlzLnJlY292ZXJSZW5kZXJlcklmTmVlZGVkKCksdGhpcy5saW5lQ2hhcnQmJiF0aGlzLmRpc2FibGVVcGRhdGUpe2lmKHRoaXMuc2NhbGVVcGRhdGVkJiYodGhpcy5zY2FsZVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0WFNjYWxlVHlwZSh0aGlzLnhTY2FsZVR5cGUpLHRoaXMubGluZUNoYXJ0LnNldFlTY2FsZVR5cGUodGhpcy55U2NhbGVUeXBlKSksdGhpcy5pc01ldGFkYXRhVXBkYXRlZCYmKHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0TWV0YWRhdGEodGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkpLHRoaXMuaXNEYXRhVXBkYXRlZCYmKHRoaXMuaXNEYXRhVXBkYXRlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXREYXRhKHRoaXMuc2VyaWVzRGF0YSkpLHRoaXMudXNlRGFya01vZGVVcGRhdGVkJiYodGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0VXNlRGFya01vZGUodGhpcy51c2VEYXJrTW9kZSkpLCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuZml4ZWRWaWV3Qm94KXRoaXMudmlld0JveD10aGlzLmZpeGVkVmlld0JveDtlbHNlIGlmKCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuaXNWaWV3Qm94Q2hhbmdlZCl7bGV0IGk9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1udWxsLHM9bnVsbCxhPVtdO2ZvcihsZXR7aWQ6ZCxwb2ludHM6cH1vZiBuKXtsZXQgaD10W2RdO2lmKGgmJiFoLmF1eCYmaC52aXNpYmxlKWZvcihsZXQgZj0wO2Y8cC5sZW5ndGg7ZisrKXtsZXR7eDptLHk6eH09cFtmXTtpKG0pJiYobz1udWxsPT09b3x8bTxvP206byxzPW51bGw9PT1zfHxtPnM/bTpzKSxyKHgpJiZhLnB1c2goeCl9fWEuc29ydCh1Yyk7bGV0IGM9YVswXSx1PWFbYS5sZW5ndGgtMV07cmV0dXJuIGUmJmEubGVuZ3RoPjImJihjPWFbTWF0aC5jZWlsKC4wNSooYS5sZW5ndGgtMSkpXSx1PWFbTWF0aC5mbG9vciguOTUqKGEubGVuZ3RoLTEpKV0pLHt4Om51bGwhPT1vJiZudWxsIT09cz9bbyxzXTp2b2lkIDAseTp2b2lkIDAhPT1jJiZ2b2lkIDAhPT11P1tjLHVdOnZvaWQgMH19KHRoaXMuc2VyaWVzRGF0YSx0aGlzLnNlcmllc01ldGFkYXRhTWFwLHRoaXMuaWdub3JlWU91dGxpZXJzLHRoaXMueFNjYWxlLmlzU2FmZU51bWJlcix0aGlzLnlTY2FsZS5pc1NhZmVOdW1iZXIpO3RoaXMudmlld0JveD17eDp0aGlzLnhTY2FsZS5uaWNlRG9tYWluKGkueD8/UkcueCkseTp0aGlzLnlTY2FsZS5uaWNlRG9tYWluKGkueT8/UkcueSl9fSh0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZHx8dGhpcy5pc1ZpZXdCb3hDaGFuZ2VkKSYmKHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSExLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXRWaWV3Qm94KHRoaXMudmlld0JveCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkpfX1vblZpZXdCb3hDaGFuZ2VkKHtkYXRhRXh0ZW50OmV9KXt0aGlzLnNldElzVmlld0JveE92ZXJyaWRkZW4oITApLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLnZpZXdCb3g9ZSx0aGlzLnVwZGF0ZUxpbmVDaGFydCgpLHRoaXMudmlld0JveENoYW5nZWQuZW1pdChlKX12aWV3Qm94UmVzZXQoKXt0aGlzLnNldElzVmlld0JveE92ZXJyaWRkZW4oITEpLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUxpbmVDaGFydCgpLHRoaXMudmlld0JveENoYW5nZWQuZW1pdCh0aGlzLnZpZXdCb3gpfXNldElzVmlld0JveE92ZXJyaWRkZW4oZSl7bGV0IGk9dGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuO3RoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbj1lLGkhPT1lJiZ0aGlzLm9uVmlld0JveE92ZXJyaWRkZW4ubmV4dChlKX1vbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UoZSl7dGhpcy5pbnRlcmFjdGlvblN0YXRlPWV9Z2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpe3JldHVybiB0aGlzLm9uVmlld0JveE92ZXJyaWRkZW59b25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKGUsaSl7bGV0IHI9ey4uLnRoaXMudmlld0JveCxbaV06ZX07dGhpcy5vblZpZXdCb3hDaGFuZ2VkKHtkYXRhRXh0ZW50OnJ9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShubikpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoUHFlLDcsUmUpLG90KFJxZSw3LFJlKSxvdChPcWUsNyxSZSksb3Qoa3FlLDUsUmUpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnNlcmllc1ZpZXc9ci5maXJzdCksTmUocj1MZSgpKSYmKGkueEF4aXM9ci5maXJzdCksTmUocj1MZSgpKSYmKGkueUF4aXM9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuY2hhcnRFbD1yLmZpcnN0KX19LGlucHV0czp7Y3VzdG9tVmlzVGVtcGxhdGU6ImN1c3RvbVZpc1RlbXBsYXRlIixjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZToiY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGUiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSIscHJlZmVycmVkUmVuZGVyZXJUeXBlOiJwcmVmZXJyZWRSZW5kZXJlclR5cGUiLHNlcmllc0RhdGE6InNlcmllc0RhdGEiLGZpeGVkVmlld0JveDoiZml4ZWRWaWV3Qm94IixzZXJpZXNNZXRhZGF0YU1hcDoic2VyaWVzTWV0YWRhdGFNYXAiLHhTY2FsZVR5cGU6InhTY2FsZVR5cGUiLHlTY2FsZVR5cGU6InlTY2FsZVR5cGUiLGN1c3RvbVhGb3JtYXR0ZXI6ImN1c3RvbVhGb3JtYXR0ZXIiLGN1c3RvbVlGb3JtYXR0ZXI6ImN1c3RvbVlGb3JtYXR0ZXIiLHRvb2x0aXBUZW1wbGF0ZToidG9vbHRpcFRlbXBsYXRlIixsaW5lT25seToibGluZU9ubHkiLGRpc2FibGVVcGRhdGU6ImRpc2FibGVVcGRhdGUiLGlnbm9yZVlPdXRsaWVyczoiaWdub3JlWU91dGxpZXJzIn0sb3V0cHV0czp7dmlld0JveENoYW5nZWQ6InZpZXdCb3hDaGFuZ2VkIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczoxNix2YXJzOjEzLGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLCJjZGtPdmVybGF5T3JpZ2luIiwiIiwzLCJuZ0NsYXNzIiwicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLCJvblJlc2l6ZSJdLFsib3ZlcmxheVRhcmdldCIsImNka092ZXJsYXlPcmlnaW4iXSxbMSwic2VyaWVzLXZpZXciXSxbInNlcmllc1ZpZXciLCIiXSxbMywidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInhHcmlkQ291bnQiLCJ5R3JpZENvdW50IiwiZG9tRGltIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywic2VyaWVzRGF0YSIsInNlcmllc01ldGFkYXRhTWFwIiwidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInRvb2x0aXBPcmlnaW5FbCIsImRvbURpbSIsInRvb2x0aXBUZW1wbGF0ZSIsIm9uVmlld0V4dGVudENoYW5nZSIsIm9uVmlld0V4dGVudFJlc2V0Iiwib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImN1c3RvbS12aXMiLDQsIm5nSWYiXSxbMSwieS1heGlzIl0sWyJ5QXhpcyIsIiJdLFsiYXhpcyIsInkiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSIsNCwibmdJZiJdLFsxLCJ4LWF4aXMiXSxbInhBeGlzIiwiIl0sWyJheGlzIiwieCIsMywiYXhpc0V4dGVudCIsImN1c3RvbUZvcm1hdHRlciIsImRvbURpbSIsImdyaWRDb3VudCIsInNjYWxlIiwib25WaWV3RXh0ZW50Q2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRvdCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjdXN0b20tdmlzIGN1c3RvbS1jaGFydC1vdmVybGF5LXZpcyIsNCwibmdJZiJdLFszLCJ2aWV3RXh0ZW50IiwieFNjYWxlIiwieVNjYWxlIiwieEdyaWRDb3VudCIsInlHcmlkQ291bnQiLCJkb21EaW0iXSxbImNoYXJ0RWwiLCIiXSxbMywic2VyaWVzRGF0YSIsInNlcmllc01ldGFkYXRhTWFwIiwidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInRvb2x0aXBPcmlnaW5FbCIsImRvbURpbSIsInRvb2x0aXBUZW1wbGF0ZSIsIm9uVmlld0V4dGVudENoYW5nZSIsIm9uVmlld0V4dGVudFJlc2V0Iiwib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIl0sWzEsImN1c3RvbS12aXMiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWyJheGlzIiwieSIsMywiYXhpc0V4dGVudCIsImN1c3RvbUZvcm1hdHRlciIsImRvbURpbSIsImdyaWRDb3VudCIsInNjYWxlIiwib25WaWV3RXh0ZW50Q2hhbmdlIl0sWyJheGlzIiwieCIsMywiYXhpc0V4dGVudCIsImN1c3RvbUZvcm1hdHRlciIsImRvbURpbSIsImdyaWRDb3VudCIsInNjYWxlIiwib25WaWV3RXh0ZW50Q2hhbmdlIl0sWzEsImRvdCJdLFsxLCJyZWN0Il0sWzEsImN1c3RvbS12aXMiLCJjdXN0b20tY2hhcnQtb3ZlcmxheS12aXMiXSxbImN1c3RvbUNoYXJ0T3ZlcmxheSIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwLDEpLFAoIm9uUmVzaXplIixmdW5jdGlvbigpe3JldHVybiBpLm9uVmlld1Jlc2l6ZSgpfSksXygyLCJkaXYiLDIsMyksRSg0LEZxZSwxLDYsImxpbmUtY2hhcnQtZ3JpZC12aWV3Iiw0KSxFKDUsQnFlLDMsMiwibmctY29udGFpbmVyIiw1KSxFKDYsVnFlLDEsOCwibGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3Iiw2KSxFKDcsVXFlLDIsNywiZGl2Iiw3KSx2KCksXyg4LCJkaXYiLDgsOSksRSgxMCx6cWUsMSw1LCJsaW5lLWNoYXJ0LWF4aXMiLDEwKSx2KCksXygxMSwiZGl2IiwxMSwxMiksRSgxMyxqcWUsMSw1LCJsaW5lLWNoYXJ0LWF4aXMiLDEzKSx2KCksRSgxNCxHcWUsMiwwLCJkaXYiLDE0KSxFKDE1LHFxZSwzLDgsImRpdiIsMTUpLHYoKSksMiZlJiYoeSgibmdDbGFzcyIsUXIoMTAsWXFlLGkudXNlRGFya01vZGUsaS5saW5lT25seSkpKCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsMCksQyg0KSx5KCJuZ0lmIiwhaS5saW5lT25seSksQygxKSx5KCJuZ0lmIixpLnNob3dDaGFydFJlbmRlcmVyRWxlbWVudCksQygxKSx5KCJuZ0lmIiwhaS5saW5lT25seSksQygxKSx5KCJuZ0lmIixpLmN1c3RvbVZpc1RlbXBsYXRlKSxDKDMpLHkoIm5nSWYiLCFpLmxpbmVPbmx5KSxDKDMpLHkoIm5nSWYiLCFpLmxpbmVPbmx5KSxDKDEpLHkoIm5nSWYiLCFpLmxpbmVPbmx5KSxDKDEpLHkoIm5nSWYiLGkuY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGUpKX0sZGVwZW5kZW5jaWVzOltGbixCZSxvcyxpZyxvcGUsYXBlLGxwZSxoZ10sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OmlubGluZS1ibG9ja31bX25naG9zdC0lQ09NUCVdICAgICAubGluZS1jaGFydDpoYXMoLmhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYTpob3ZlcikgLngtYXhpcyAuZXh0ZW50LWVkaXQtYnV0dG9ue3Zpc2liaWxpdHk6dmlzaWJsZX1bX25naG9zdC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmV9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDppbmhlcml0O2Rpc3BsYXk6Z3JpZDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MTAwJTtncmlkLXRlbXBsYXRlLWFyZWFzOiJ5YXhpcyBzZXJpZXMiICJkb3QgeGF4aXMiICIuIGN1c3RvbUNoYXJ0T3ZlcmxheSI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjUwcHggMWZyO2dyaWQtYXV0by1yb3dzOjFmciAzMHB4IDBweH0uY29udGFpbmVyLmRhcmstbW9kZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0uY29udGFpbmVyLmxpbmUtb25seS1tb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MCAxZnI7Z3JpZC1hdXRvLXJvd3M6MWZyIDB9LnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2VyaWVzO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0uc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgY2FudmFzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHN2Z1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWdyaWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVdLCAueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWF4aXNbX25nY29udGVudC0lQ09NUCVdLCAueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnQtYXhpc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnhheGlzO3Bvc2l0aW9uOnJlbGF0aXZlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp5YXhpc30uZG90W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2Rpc3BsYXk6ZmxleDtncmlkLWFyZWE6ZG90O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZG90W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MXB4O3dpZHRoOjFweDtiYWNrZ3JvdW5kLWNvbG9yOiNhYWF9LmN1c3RvbS1jaGFydC1vdmVybGF5LXZpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmN1c3RvbUNoYXJ0T3ZlcmxheTtncmlkLXJvdy1lbmQ6MjtncmlkLXJvdy1zdGFydDoxfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gUXFlKG4sdCl7aWYoMSZuJiZPKDAsIm1hdC1pY29uIiwxMCksMiZuKXtsZXQgZT1TKDIpLiRpbXBsaWNpdCxpPVMoKTt5KCJuZ0NsYXNzIixlLnR5cGU9PT1pLnNvcnRpbmdJbmZvLmhlYWRlcj8ic2hvdyI6InNob3ctb24taG92ZXIiKX19ZnVuY3Rpb24gS3FlKG4sdCl7aWYoMSZuJiZPKDAsIm1hdC1pY29uIiwxMSksMiZuKXtsZXQgZT1TKDIpLiRpbXBsaWNpdCxpPVMoKTt5KCJuZ0NsYXNzIixlLnR5cGU9PT1pLnNvcnRpbmdJbmZvLmhlYWRlcj8ic2hvdyI6InNob3ctb24taG92ZXIiKX19ZnVuY3Rpb24gWnFlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwidGgiLDQpLFAoImNsaWNrIixmdW5jdGlvbigpe29lKGUpO2xldCByPVMoKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoKS5oZWFkZXJDbGlja2VkKHIudHlwZSkpfSksXygxLCJkaXYiLDUpLFAoImRyYWdzdGFydCIsZnVuY3Rpb24oKXtvZShlKTtsZXQgcj1TKCkuJGltcGxpY2l0O3JldHVybiBzZShTKCkuZHJhZ1N0YXJ0KHIpKX0pKCJkcmFnZW5kIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKDIpLmRyYWdFbmQoKSl9KSgiZHJhZ2VudGVyIixmdW5jdGlvbigpe29lKGUpO2xldCByPVMoKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoKS5kcmFnRW50ZXIocikpfSksTygyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsNiksXygzLCJkaXYiLDcpLEUoNCxRcWUsMSwxLCJtYXQtaWNvbiIsOCksRSg1LEtxZSwxLDEsIm1hdC1pY29uIiw5KSx2KCkoKSgpfWlmKDImbil7bGV0IGU9UygpLiRpbXBsaWNpdCxpPVMoKTtDKDEpLHkoImRyYWdnYWJsZSIsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCkoIm5nQ2xhc3MiLGkuZ2V0SGVhZGVySGlnaGxpZ2h0U3R5bGUoZS50eXBlKSksQygxKSx5KCJoZWFkZXIiLGUpLEMoMikseSgibmdJZiIsaS5zb3J0aW5nSW5mby5vcmRlcj09PWkuU29ydGluZ09yZGVyLkFTQ0VORElOR3x8ZS50eXBlIT09aS5zb3J0aW5nSW5mby5oZWFkZXIpLEMoMSkseSgibmdJZiIsaS5zb3J0aW5nSW5mby5vcmRlcj09PWkuU29ydGluZ09yZGVyLkRFU0NFTkRJTkcmJmUudHlwZT09PWkuc29ydGluZ0luZm8uaGVhZGVyKX19ZnVuY3Rpb24gSnFlKG4sdCl7aWYoMSZuJiYoc24oMCksRSgxLFpxZSw2LDUsInRoIiwzKSxhbigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9UygpO0MoMSkseSgibmdJZiIsaS5zaG93Q29sdW1uKGUpKX19ZnVuY3Rpb24gJHFlKG4sdCl7MSZuJiZOaSgwKX12YXIgY3BlPWZ1bmN0aW9uKG4pe3JldHVybnskaW1wbGljaXQ6bn19O2Z1bmN0aW9uIGVZZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwxOCksRSgxLCRxZSwxLDAsIm5nLWNvbnRhaW5lciIsMTkpLEEoMiksdigpKSwyJm4pe2xldCBlPVMoMikuJGltcGxpY2l0LGk9UygpLiRpbXBsaWNpdCxyPVMoKSxvPSRlKDkpO0MoMSkseSgibmdUZW1wbGF0ZU91dGxldCIsbykoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixPbigzLGNwZSxpLlZBTFVFX0NIQU5HRSkpLEMoMSksamUoIiAiLHIuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLnR5cGUsaSksIiAiKX19ZnVuY3Rpb24gdFllKG4sdCl7MSZuJiZOaSgwKX1mdW5jdGlvbiBuWWUobix0KXtpZigxJm4mJihfKDAsImRpdiIsMTgpLEUoMSx0WWUsMSwwLCJuZy1jb250YWluZXIiLDE5KSxBKDIpLHYoKSksMiZuKXtsZXQgZT1TKDIpLiRpbXBsaWNpdCxpPVMoKS4kaW1wbGljaXQscj1TKCksbz0kZSg5KTtDKDEpLHkoIm5nVGVtcGxhdGVPdXRsZXQiLG8pKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsT24oMyxjcGUsaS5QRVJDRU5UQUdFX0NIQU5HRSkpLEMoMSksamUoIiAiLHIuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLnR5cGUsaSksIiAiKX19ZnVuY3Rpb24gaVllKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDIwKSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKDIpLiRpbXBsaWNpdCxpPVMoKS4kaW1wbGljaXQscj1TKCk7QygxKSxqZSgiICIsci5nZXRGb3JtYXR0ZWREYXRhRm9yQ29sdW1uKGUudHlwZSxpKSwiICIpfX1mdW5jdGlvbiByWWUobix0KXtpZigxJm4mJihfKDAsInRkIiwxNSksRSgxLGVZZSwzLDUsImRpdiIsMTYpLEUoMixuWWUsMyw1LCJkaXYiLDE2KSxFKDMsaVllLDIsMSwiZGl2IiwxNyksdigpKSwyJm4pe2xldCBlPVMoKS4kaW1wbGljaXQsaT1TKDIpO3koIm5nU3dpdGNoIixlLnR5cGUpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlcnMuVkFMVUVfQ0hBTkdFKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJzLlBFUkNFTlRBR0VfQ0hBTkdFKX19ZnVuY3Rpb24gb1llKG4sdCl7aWYoMSZuJiYoc24oMCksRSgxLHJZZSw0LDMsInRkIiwxNCksYW4oKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoMik7QygxKSx5KCJuZ0lmIixpLnNob3dDb2x1bW4oZSkpfX1mdW5jdGlvbiBzWWUobix0KXtpZigxJm4mJihzbigwKSxfKDEsInRyIiwxMikoMiwidGQiLDEzKSxPKDMsInNwYW4iKSx2KCksRSg0LG9ZZSwyLDEsIm5nLWNvbnRhaW5lciIsMSksdigpLGFuKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKCk7QygzKSxQdCgiYmFja2dyb3VuZC1jb2xvciIsZS5DT0xPUiksQygxKSx5KCJuZ0Zvck9mIixpLmhlYWRlcnMpfX1mdW5jdGlvbiBhWWUobix0KXsxJm4mJk8oMCwibWF0LWljb24iLDIzKX1mdW5jdGlvbiBsWWUobix0KXsxJm4mJk8oMCwibWF0LWljb24iLDI0KX1mdW5jdGlvbiBjWWUobix0KXtpZigxJm4mJihFKDAsYVllLDEsMCwibWF0LWljb24iLDIxKSxFKDEsbFllLDEsMCwibWF0LWljb24iLDIyKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt5KCJuZ0lmIixlPj0wKSxDKDEpLHkoIm5nSWYiLGU8MCl9fXZhciBQcD0oKCk9PihmdW5jdGlvbihuKXtuW24uUklHSFQ9MF09IlJJR0hUIixuW24uTEVGVD0xXT0iTEVGVCJ9KFBwfHwoUHA9e30pKSxQcCkpKCksT0c9ZnVuY3Rpb24obil7bi5wcmV2ZW50RGVmYXVsdCgpfSx1cGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc29ydERhdGFCeT1uZXcgRyx0aGlzLm9yZGVyQ29sdW1ucz1uZXcgRyx0aGlzLkNvbHVtbkhlYWRlcnM9S3QsdGhpcy5Tb3J0aW5nT3JkZXI9eGwsdGhpcy5TaWRlPVBwLHRoaXMuaGlnaGxpZ2h0U2lkZT1QcC5SSUdIVH1uZ09uRGVzdHJveSgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixPRyl9Z2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLGkpe3N3aXRjaChlKXtjYXNlIEt0LlJVTjpyZXR1cm4gdm9pZCAwPT09aS5SVU4/IiI6aS5SVU47Y2FzZSBLdC5WQUxVRTpyZXR1cm4gdm9pZCAwPT09aS5WQUxVRT8iIjp5cC5mb3JtYXRTaG9ydChpLlZBTFVFKTtjYXNlIEt0LlNURVA6cmV0dXJuIHZvaWQgMD09PWkuU1RFUD8iIjpNZC5mb3JtYXRTaG9ydChpLlNURVApO2Nhc2UgS3QuVElNRTpyZXR1cm4gdm9pZCAwPT09aS5USU1FPyIiOm5ldyBEYXRlKGkuVElNRSkudG9JU09TdHJpbmcoKTtjYXNlIEt0LlJFTEFUSVZFX1RJTUU6cmV0dXJuIHZvaWQgMD09PWkuUkVMQVRJVkVfVElNRT8iIjpTUy5mb3JtYXRSZWFkYWJsZShpLlJFTEFUSVZFX1RJTUUpO2Nhc2UgS3QuU01PT1RIRUQ6cmV0dXJuIHZvaWQgMD09PWkuU01PT1RIRUQ/IiI6eXAuZm9ybWF0U2hvcnQoaS5TTU9PVEhFRCk7Y2FzZSBLdC5WQUxVRV9DSEFOR0U6cmV0dXJuIHZvaWQgMD09PWkuVkFMVUVfQ0hBTkdFPyIiOnlwLmZvcm1hdFNob3J0KE1hdGguYWJzKGkuVkFMVUVfQ0hBTkdFKSk7Y2FzZSBLdC5TVEFSVF9TVEVQOnJldHVybiB2b2lkIDA9PT1pLlNUQVJUX1NURVA/IiI6TWQuZm9ybWF0U2hvcnQoaS5TVEFSVF9TVEVQKTtjYXNlIEt0LkVORF9TVEVQOnJldHVybiB2b2lkIDA9PT1pLkVORF9TVEVQPyIiOk1kLmZvcm1hdFNob3J0KGkuRU5EX1NURVApO2Nhc2UgS3QuU1RBUlRfVkFMVUU6cmV0dXJuIHZvaWQgMD09PWkuU1RBUlRfVkFMVUU/IiI6TWQuZm9ybWF0U2hvcnQoaS5TVEFSVF9WQUxVRSk7Y2FzZSBLdC5FTkRfVkFMVUU6cmV0dXJuIHZvaWQgMD09PWkuRU5EX1ZBTFVFPyIiOk1kLmZvcm1hdFNob3J0KGkuRU5EX1ZBTFVFKTtjYXNlIEt0Lk1JTl9WQUxVRTpyZXR1cm4gdm9pZCAwPT09aS5NSU5fVkFMVUU/IiI6TWQuZm9ybWF0U2hvcnQoaS5NSU5fVkFMVUUpO2Nhc2UgS3QuTUFYX1ZBTFVFOnJldHVybiB2b2lkIDA9PT1pLk1BWF9WQUxVRT8iIjpNZC5mb3JtYXRTaG9ydChpLk1BWF9WQUxVRSk7Y2FzZSBLdC5QRVJDRU5UQUdFX0NIQU5HRTpyZXR1cm4gdm9pZCAwPT09aS5QRVJDRU5UQUdFX0NIQU5HRT8iIjpNYXRoLnJvdW5kKDEwMCppLlBFUkNFTlRBR0VfQ0hBTkdFKS50b1N0cmluZygpKyIlIjtkZWZhdWx0OnJldHVybiIifX1oZWFkZXJDbGlja2VkKGUpe3RoaXMuc29ydERhdGFCeS5lbWl0KHRoaXMuc29ydGluZ0luZm8uaGVhZGVyIT09ZXx8dGhpcy5zb3J0aW5nSW5mby5vcmRlciE9PXhsLkFTQ0VORElORz97aGVhZGVyOmUsb3JkZXI6eGwuQVNDRU5ESU5HfTp7aGVhZGVyOmUsb3JkZXI6eGwuREVTQ0VORElOR30pfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZT1lLnR5cGUsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLE9HKX1kcmFnRW5kKCl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlfHwhdGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGV8fCh0aGlzLm9yZGVyQ29sdW1ucy5lbWl0KHRoaXMubW92ZUhlYWRlcih0aGlzLmdldEluZGV4T2ZIZWFkZXJXaXRoVHlwZSh0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZSksdGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aFR5cGUodGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGUpKSksdGhpcy5kcmFnZ2luZ0hlYWRlclR5cGU9dm9pZCAwLHRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5UeXBlPXZvaWQgMCxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsT0cpKX1kcmFnRW50ZXIoZSl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlfHwodGhpcy5oaWdobGlnaHRTaWRlPXRoaXMuZ2V0SW5kZXhPZkhlYWRlcldpdGhUeXBlKGUudHlwZSk8dGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aFR5cGUodGhpcy5kcmFnZ2luZ0hlYWRlclR5cGUpP1BwLkxFRlQ6UHAuUklHSFQsdGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGU9ZS50eXBlKX1tb3ZlSGVhZGVyKGUsaSl7bGV0IHI9Wy4uLnRoaXMuaGVhZGVyc107cmV0dXJuIHIuc3BsaWNlKGUsMSksci5zcGxpY2UoaSwwLHRoaXMuaGVhZGVyc1tlXSkscn1nZXRIZWFkZXJIaWdobGlnaHRTdHlsZShlKXtyZXR1cm4gZSE9PXRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5UeXBlP3t9OntoaWdobGlnaHQ6ITAsImhpZ2hsaWdodC1ib3JkZXItcmlnaHQiOnRoaXMuaGlnaGxpZ2h0U2lkZT09PVBwLlJJR0hULCJoaWdobGlnaHQtYm9yZGVyLWxlZnQiOnRoaXMuaGlnaGxpZ2h0U2lkZT09PVBwLkxFRlR9fXNob3dDb2x1bW4oZSl7cmV0dXJuIGUuZW5hYmxlZCYmKHRoaXMuc21vb3RoaW5nRW5hYmxlZHx8ZS50eXBlIT09S3QuU01PT1RIRUQpfWdldEluZGV4T2ZIZWFkZXJXaXRoVHlwZShlKXtyZXR1cm4gdGhpcy5oZWFkZXJzLmZpbmRJbmRleChpPT5lPT09aS50eXBlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZSJdXSxpbnB1dHM6e2hlYWRlcnM6ImhlYWRlcnMiLGRhdGE6ImRhdGEiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsb3JkZXJDb2x1bW5zOiJvcmRlckNvbHVtbnMifSxkZWNsczoxMCx2YXJzOjIsY29uc3RzOltbMSwiZGF0YS10YWJsZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFycm93IiwiIl0sWzMsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsImNlbGwiLDMsImRyYWdnYWJsZSIsIm5nQ2xhc3MiLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiwiZHJhZ2VudGVyIl0sWzMsImhlYWRlciJdLFsxLCJzb3J0aW5nLWljb24tY29udGFpbmVyIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4IiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDMsIm5nQ2xhc3MiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4IiwzLCJuZ0NsYXNzIl0sWzEsInJvdyJdLFsxLCJyb3ctY2lyY2xlIl0sWzMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsImNlbGwiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJjZWxsIGV4dHJhLXJpZ2h0LXBhZGRpbmciLDQsIm5nU3dpdGNoRGVmYXVsdCJdLFsxLCJjZWxsIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJjZWxsIiwiZXh0cmEtcmlnaHQtcGFkZGluZyJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4Iiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4Il0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IikoMSwidGFibGUiLDApKDIsInRoZWFkIikoMywidHIiKSxPKDQsInRoIiksRSg1LEpxZSwyLDEsIm5nLWNvbnRhaW5lciIsMSksdigpKCksXyg2LCJ0Ym9keSIpLEUoNyxzWWUsNSwzLCJuZy1jb250YWluZXIiLDEpLHYoKSgpKCksRSg4LGNZZSwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDIscXQpKSwyJmUmJihDKDUpLHkoIm5nRm9yT2YiLGkuaGVhZGVycyksQygyKSx5KCJuZ0Zvck9mIixpLmRhdGEpKX0sZGVwZW5kZW5jaWVzOltGbixkbixCZSxvcyxDcixVcixjaCxHdCx2Ul0sc3R5bGVzOlsiLmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1zcGFjaW5nOjRweDtmb250LXNpemU6MTNweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnN0aWNreTt0ZXh0LWFsaWduOmxlZnQ7dG9wOjA7dmVydGljYWwtYWxpZ246Ym90dG9tfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntjdXJzb3I6cG9pbnRlcn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmNlbGxbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmV4dHJhLXJpZ2h0LXBhZGRpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctcmlnaHQ6MXB4fS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yb3dbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAucm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAucm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O3dpZHRoOjEwcHh9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmNlbGxbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLnNvcnRpbmctaWNvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7Ym9yZGVyLXJhZGl1czo1cHh9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLnNob3dbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuc2hvdy1vbi1ob3Zlcltfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciAgIC5zaG93LW9uLWhvdmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi4zfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaWdobGlnaHRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VlZX0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuaGlnaGxpZ2h0LWJvcmRlci1yaWdodFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCAjZmY5ODAwfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaWdobGlnaHQtYm9yZGVyLWxlZnRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjJweCBzb2xpZCAjZmY5ODAwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkscHBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnNvcnREYXRhQnk9bmV3IEcsdGhpcy5vcmRlckNvbHVtbnM9bmV3IEd9Z2V0TWluVmFsdWVJblJhbmdlKGUsaSxyLG89ITEpe2xldCBzPXRoaXMubWF5YmVTbW9vdGhlZFZhbHVlKGVbaV0sbyk7Zm9yKGxldCBhPWk7YTw9cjthKyspcz50aGlzLm1heWJlU21vb3RoZWRWYWx1ZShlW2FdLG8pJiYocz10aGlzLm1heWJlU21vb3RoZWRWYWx1ZShlW2FdLG8pKTtyZXR1cm4gc31nZXRNYXhWYWx1ZUluUmFuZ2UoZSxpLHIsbz0hMSl7bGV0IHM9dGhpcy5tYXliZVNtb290aGVkVmFsdWUoZVtpXSxvKTtmb3IobGV0IGE9aTthPD1yO2ErKylzPHRoaXMubWF5YmVTbW9vdGhlZFZhbHVlKGVbYV0sbykmJihzPXRoaXMubWF5YmVTbW9vdGhlZFZhbHVlKGVbYV0sbykpO3JldHVybiBzfW1heWJlU21vb3RoZWRWYWx1ZShlLGkpe3JldHVybiBpP2UueTplLnZhbHVlfWdldFRpbWVTZWxlY3Rpb25UYWJsZURhdGEoKXtpZihudWxsPT09dGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uKXJldHVybltdO2xldCBlPXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5zdGFydC5zdGVwLGk9dGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD8uc3RlcCxyPXRoaXMuZGF0YVNlcmllcy5maWx0ZXIobz0+e2xldCBzPXRoaXMuY2hhcnRNZXRhZGF0YU1hcFtvLmlkXTtyZXR1cm4gcyYmcy52aXNpYmxlJiYhQm9vbGVhbihzLmF1eCl9KS5tYXAobz0+e2xldCBzPXRoaXMuY2hhcnRNZXRhZGF0YU1hcFtvLmlkXSxhPWJFKG8ucG9pbnRzLGUpLGw9by5wb2ludHNbYV0sYz1udWxsLHU9bnVsbDtudWxsIT1pJiYodT1iRShvLnBvaW50cyxpKSxjPW8ucG9pbnRzW3VdKTtsZXQgZD17aWQ6by5pZH07ZC5DT0xPUj1zLmNvbG9yO2ZvcihsZXQgcCBvZiB0aGlzLmNvbHVtbkhlYWRlcnMpc3dpdGNoKHAudHlwZSl7Y2FzZSBLdC5SVU46bGV0IGg9IiI7cy5hbGlhcyYmKGg9YCR7cy5hbGlhcy5hbGlhc051bWJlcn0gJHtzLmFsaWFzLmFsaWFzVGV4dH0vYCksZC5SVU49YCR7aH0ke3MuZGlzcGxheU5hbWV9YDtjb250aW51ZTtjYXNlIEt0LlNURVA6ZC5TVEVQPWwuc3RlcDtjb250aW51ZTtjYXNlIEt0LlZBTFVFOmQuVkFMVUU9bC52YWx1ZTtjb250aW51ZTtjYXNlIEt0LlJFTEFUSVZFX1RJTUU6ZC5SRUxBVElWRV9USU1FPWwucmVsYXRpdmVUaW1lSW5Ncztjb250aW51ZTtjYXNlIEt0LlNNT09USEVEOmQuU01PT1RIRUQ9bC55O2NvbnRpbnVlO2Nhc2UgS3QuVkFMVUVfQ0hBTkdFOmlmKCFjKWNvbnRpbnVlO2QuVkFMVUVfQ0hBTkdFPWMueS1sLnk7Y29udGludWU7Y2FzZSBLdC5TVEFSVF9TVEVQOmQuU1RBUlRfU1RFUD1sLnN0ZXA7Y29udGludWU7Y2FzZSBLdC5FTkRfU1RFUDppZighYyljb250aW51ZTtkLkVORF9TVEVQPWMuc3RlcDtjb250aW51ZTtjYXNlIEt0LlNUQVJUX1ZBTFVFOmQuU1RBUlRfVkFMVUU9bC55O2NvbnRpbnVlO2Nhc2UgS3QuRU5EX1ZBTFVFOmlmKCFjKWNvbnRpbnVlO2QuRU5EX1ZBTFVFPWMueTtjb250aW51ZTtjYXNlIEt0Lk1JTl9WQUxVRTppZighdSljb250aW51ZTtkLk1JTl9WQUxVRT10aGlzLmdldE1pblZhbHVlSW5SYW5nZShvLnBvaW50cyxhLHUsITApO2NvbnRpbnVlO2Nhc2UgS3QuTUFYX1ZBTFVFOmlmKCF1KWNvbnRpbnVlO2QuTUFYX1ZBTFVFPXRoaXMuZ2V0TWF4VmFsdWVJblJhbmdlKG8ucG9pbnRzLGEsdSwhMCk7Y29udGludWU7Y2FzZSBLdC5QRVJDRU5UQUdFX0NIQU5HRTppZighYyljb250aW51ZTtkLlBFUkNFTlRBR0VfQ0hBTkdFPShjLnktbC55KS9sLnk7Y29udGludWU7ZGVmYXVsdDpjb250aW51ZX1yZXR1cm4gZH0pO3JldHVybiByLnNvcnQoKG8scyk9PntsZXQgYT10aGlzLmdldFNvcnRhYmxlVmFsdWUobyx0aGlzLnNvcnRpbmdJbmZvLmhlYWRlciksbD10aGlzLmdldFNvcnRhYmxlVmFsdWUocyx0aGlzLnNvcnRpbmdJbmZvLmhlYWRlcik7cmV0dXJuIGE8bD90aGlzLnNvcnRpbmdJbmZvLm9yZGVyPT09eGwuQVNDRU5ESU5HPy0xOjE6YT5sP3RoaXMuc29ydGluZ0luZm8ub3JkZXI9PT14bC5BU0NFTkRJTkc/MTotMTowfSkscn1nZXRTb3J0YWJsZVZhbHVlKGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBOdW1iZXIuaXNOYU4obil8fCJOYU4iPT09bnx8bnVsbD09bj8tMS8wOm59KGk9PT1LdC5SVU4/dGhpcy5jaGFydE1ldGFkYXRhTWFwW2UuaWRdLmRpc3BsYXlOYW1lOmVbaV0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZC1kYXRhLXRhYmxlIl1dLGlucHV0czp7Y2hhcnRNZXRhZGF0YU1hcDoiY2hhcnRNZXRhZGF0YU1hcCIsZGF0YVNlcmllczoiZGF0YVNlcmllcyIsc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbjoic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsY29sdW1uSGVhZGVyczoiY29sdW1uSGVhZGVycyIsc29ydGluZ0luZm86InNvcnRpbmdJbmZvIixjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZDoiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLHNtb290aGluZ0VuYWJsZWQ6InNtb290aGluZ0VuYWJsZWQifSxvdXRwdXRzOntzb3J0RGF0YUJ5OiJzb3J0RGF0YUJ5IixvcmRlckNvbHVtbnM6Im9yZGVyQ29sdW1ucyJ9LGRlY2xzOjEsdmFyczo1LGNvbnN0czpbWzMsImhlYWRlcnMiLCJkYXRhIiwic29ydGluZ0luZm8iLCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsInNtb290aGluZ0VuYWJsZWQiLCJzb3J0RGF0YUJ5Iiwib3JkZXJDb2x1bW5zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJ0Yi1kYXRhLXRhYmxlIiwwKSxQKCJzb3J0RGF0YUJ5IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zb3J0RGF0YUJ5LmVtaXQobyl9KSgib3JkZXJDb2x1bW5zIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vcmRlckNvbHVtbnMuZW1pdChvKX0pLHYoKSksMiZlJiZ5KCJoZWFkZXJzIixpLmNvbHVtbkhlYWRlcnMpKCJkYXRhIixpLmdldFRpbWVTZWxlY3Rpb25UYWJsZURhdGEoKSkoInNvcnRpbmdJbmZvIixpLnNvcnRpbmdJbmZvKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpKCJzbW9vdGhpbmdFbmFibGVkIixpLnNtb290aGluZ0VuYWJsZWQpfSxkZXBlbmRlbmNpZXM6W3VwZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7dmFyIHBZZT1bInN0ZXBTcGFuIl07ZnVuY3Rpb24gaFllKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLE8oMSwibWF0LWljb24iLDUpLHYoKX19ZnVuY3Rpb24gZlllKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLE8oMSwibWF0LWljb24iLDYpLHYoKX19dmFyIG1ZZT1mdW5jdGlvbihuLHQpe3JldHVybntmb2I6ITAsdW5yZW1vdmFibGU6bixwcm9zcGVjdGl2ZTp0fX0saHBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFsbG93UmVtb3ZhbD0hMCx0aGlzLmlzUHJvc3BlY3RpdmU9ITEsdGhpcy5zdGVwQ2hhbmdlZD1uZXcgRyx0aGlzLmZvYlJlbW92ZWQ9bmV3IEd9bmdPbkNoYW5nZXMoZSl7ZS5zdGVwJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5zdGVwU3Bhbi5uYXRpdmVFbGVtZW50JiZ0aGlzLnN0ZXBTcGFuLm5hdGl2ZUVsZW1lbnQuYmx1cigpfXZhbGlkYXRlU3RlcChlKXtsZXQgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUud2hpY2gpOygiICI9PT1lLmtleXx8aXNOYU4oTnVtYmVyKGkpKSkmJmUucHJldmVudERlZmF1bHQoKX1zdGVwVHlwZWQoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBpPWUudGFyZ2V0LmlubmVyVGV4dDt0aGlzLnN0ZXBDaGFuZ2VkLmVtaXQoIiIhPT1pP051bWJlcihpKTpudWxsKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC1mb2IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChwWWUsNyxSZSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5zdGVwU3Bhbj1yLmZpcnN0KX19LGlucHV0czp7c3RlcDoic3RlcCIsYWxsb3dSZW1vdmFsOiJhbGxvd1JlbW92YWwiLGlzUHJvc3BlY3RpdmU6ImlzUHJvc3BlY3RpdmUifSxvdXRwdXRzOntzdGVwQ2hhbmdlZDoic3RlcENoYW5nZWQiLGZvYlJlbW92ZWQ6ImZvYlJlbW92ZWQifSxmZWF0dXJlczpbRnRdLGRlY2xzOjUsdmFyczo3LGNvbnN0czpbWzMsIm5nQ2xhc3MiXSxbImNvbnRlbnRlZGl0YWJsZSIsIiIsInJvbGUiLCJ0ZXh0Ym94IiwiYXJpYS1sYWJlbCIsIkVkaXQgc3RlcCIsMywiaW5uZXJIVE1MIiwiYmx1ciIsImtleXByZXNzIiwia2V5ZG93bi5lbnRlciIsImtleWRvd24uc2hpZnQuZW50ZXIiXSxbInN0ZXBTcGFuIiwiIl0sWyJhcmlhLWxhYmVsIiwiRGVzZWxlY3QgZm9iIiwzLCJjbGljayIsNCwibmdJZiJdLFsiYXJpYS1sYWJlbCIsIkRlc2VsZWN0IGZvYiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjbG9zZV8yNHB4Il0sWyJzdmdJY29uIiwia2VlcF8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDApKDEsInNwYW4iLDEsMiksUCgiYmx1ciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc3RlcFR5cGVkKG8pfSkoImtleXByZXNzIixmdW5jdGlvbihvKXtyZXR1cm4gaS52YWxpZGF0ZVN0ZXAobyl9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc3RlcFR5cGVkKG8pfSkoImtleWRvd24uc2hpZnQuZW50ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBvLnByZXZlbnREZWZhdWx0KCl9KSx2KCksRSgzLGhZZSwyLDAsImJ1dHRvbiIsMyksRSg0LGZZZSwyLDAsImJ1dHRvbiIsMyksdigpKSwyJmUmJih5KCJuZ0NsYXNzIixRcig0LG1ZZSwhaS5hbGxvd1JlbW92YWwsaS5pc1Byb3NwZWN0aXZlKSksQygxKSx5KCJpbm5lckhUTUwiLGkuc3RlcCxBMyksQygyKSx5KCJuZ0lmIixpLmFsbG93UmVtb3ZhbCksQygxKSx5KCJuZ0lmIixpLmlzUHJvc3BlY3RpdmUpKX0sZGVwZW5kZW5jaWVzOltGbixCZSxHdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItcmFkaXVzOjI1cHg7cGFkZGluZzoycHggMnB4IDJweCA0cHg7Zm9udC1zaXplOjExcHg7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6bWluLWNvbnRlbnR9LmZvYltfbmdjb250ZW50LSVDT01QJV0gPiAucHJvc3BlY3RpdmVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctdG9wOjFweH0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntjdXJzb3I6Z3JhYn0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlci5wcm9zcGVjdGl2ZXtjdXJzb3I6cG9pbnRlcn0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTphY3RpdmV7Y3Vyc29yOmdyYWJiaW5nfS5mb2IudW5yZW1vdmFibGVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDRweH0uZm9iLnByb3NwZWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjoxcHggZGFzaGVkICM5ZTllOWU7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6MTdweH1zcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjUwJTtmb250LXNpemU6MTFweDt3aWR0aDoxMXB4O2hlaWdodDoxMXB4O2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjb2xvcjppbmhlcml0fWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjExMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOWU5ZTllO2NvbG9yOiNlZWU7Y3Vyc29yOnBvaW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2UwZTBlMH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLF9ZZT1bInN0YXJ0Rm9iV3JhcHBlciJdLHZZZT1bImVuZEZvYldyYXBwZXIiXSx5WWU9WyJwcm9zcGVjdGl2ZUZvYldyYXBwZXIiXTtmdW5jdGlvbiBiWWUobix0KXsxJm4mJk8oMCwiZGl2Iiw3KX1mdW5jdGlvbiB4WWUobix0KXtpZigxJm4mJihfKDAsImRpdiIsMyw0KSxFKDIsYlllLDEsMCwiZGl2Iiw1KSxPKDMsImNhcmQtZm9iIiw2KSx2KCkpLDImbil7bGV0IGU9UygyKTtQdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yUHJvc3BlY3RpdmVGb2IoKSksQygyKSx5KCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLEMoMSkseSgibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoImFsbG93UmVtb3ZhbCIsITEpKCJpc1Byb3NwZWN0aXZlIiwhMCkoInN0ZXAiLGUucHJvc3BlY3RpdmVTdGVwKX19ZnVuY3Rpb24gQ1llKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO3NuKDApLEUoMSx4WWUsNCw3LCJkaXYiLDEpLF8oMiwiZGl2IiwyKSxQKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkubW91c2VPdmVyUHJvc3BlY3RpdmVGb2JBcmVhKHIpKX0pKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5wcm9zcGVjdGl2ZUZvYkNsaWNrZWQocikpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5vblByb3NwZWN0aXZlQXJlYU1vdXNlTGVhdmUoKSl9KSx2KCksYW4oKX1pZigyJm4pe2xldCBlPVMoKTtDKDEpLHkoIm5nSWYiLG51bGwhPT1lLnByb3NwZWN0aXZlU3RlcCksQygxKSx5KCJuZ0NsYXNzIixlLmlzVmVydGljYWwoKT8idmVydGljYWwtcHJvc3BlY3RpdmUtYXJlYSI6Imhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYSIpfX1mdW5jdGlvbiBNWWUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDExKSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoMik7cmV0dXJuIHNlKG8uc3RhcnREcmFnKG8uRm9iLlNUQVJULG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRVhURU5ERURfTElORSxyKSl9KSx2KCl9fWZ1bmN0aW9uIHdZZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMyw4KSxFKDIsTVllLDEsMCwiZGl2Iiw5KSxfKDMsImNhcmQtZm9iIiwxMCksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKCk7cmV0dXJuIHNlKG8uc3RhcnREcmFnKG8uRm9iLlNUQVJULG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRk9CLHIpKX0pKCJzdGVwQ2hhbmdlZCIsZnVuY3Rpb24ocil7b2UoZSk7bGV0IG89UygpO3JldHVybiBzZShvLnN0ZXBUeXBlZChvLkZvYi5TVEFSVCxyKSl9KSgiZm9iUmVtb3ZlZCIsZnVuY3Rpb24oKXtvZShlKTtsZXQgcj1TKCk7cmV0dXJuIHNlKHIub25Gb2JSZW1vdmVkKHIuRm9iLlNUQVJUKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTtQdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yU3RhcnRGb2IoKSksQygyKSx5KCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLEMoMSkseSgibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoInN0ZXAiLGUudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX19ZnVuY3Rpb24gU1llKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwxMSksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKDIpO3JldHVybiBzZShvLnN0YXJ0RHJhZyhvLkZvYi5FTkQsby5UaW1lU2VsZWN0aW9uQWZmb3JkYW5jZS5FWFRFTkRFRF9MSU5FLHIpKX0pLHYoKX19ZnVuY3Rpb24gRVllKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwzLDEyKSxFKDIsU1llLDEsMCwiZGl2Iiw5KSxfKDMsImNhcmQtZm9iIiwxMyksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKCk7cmV0dXJuIHNlKG8uc3RhcnREcmFnKG8uRm9iLkVORCxvLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlLkZPQixyKSl9KSgic3RlcENoYW5nZWQiLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoKTtyZXR1cm4gc2Uoby5zdGVwVHlwZWQoby5Gb2IuRU5ELHIpKX0pKCJmb2JSZW1vdmVkIixmdW5jdGlvbigpe29lKGUpO2xldCByPVMoKTtyZXR1cm4gc2Uoci5vbkZvYlJlbW92ZWQoci5Gb2IuRU5EKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTtQdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yRW5kRm9iKCkpLEMoMikseSgibmdJZiIsZS5zaG93RXh0ZW5kZWRMaW5lKSxDKDEpLHkoIm5nQ2xhc3MiLGUuaXNWZXJ0aWNhbCgpPyJ2ZXJ0aWNhbC1mb2IiOiJob3Jpem9udGFsLWZvYiIpKCJzdGVwIixlLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfX12YXIgWHI9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PTkU9MF09Ik5PTkUiLG5bbi5TVEFSVD0xXT0iU1RBUlQiLG5bbi5FTkQ9Ml09IkVORCJ9KFhyfHwoWHI9e30pKSxYcikpKCksVFllPXtzdGFydDpYci5TVEFSVCxlbmQ6WHIuRU5EfSxHaz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucm9vdD1lLHRoaXMuc2hvd0V4dGVuZGVkTGluZT0hMSx0aGlzLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZD0hMSx0aGlzLnByb3NwZWN0aXZlU3RlcD1udWxsLHRoaXMucHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uPW51bGwsdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBHLHRoaXMub25UaW1lU2VsZWN0aW9uVG9nZ2xlZD1uZXcgRyx0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZD1uZXcgRyx0aGlzLmhhc0ZvYk1vdmVkPSExLHRoaXMuY3VycmVudERyYWdnaW5nRm9iPVhyLk5PTkUsdGhpcy5hZmZvcmRhbmNlPWNzLk5PTkUsdGhpcy5tb3VzZUxpc3RlbmVyPXRoaXMubW91c2VNb3ZlLmJpbmQodGhpcyksdGhpcy5zdG9wTGlzdGVuZXI9dGhpcy5zdG9wRHJhZy5iaW5kKHRoaXMpLHRoaXMuRm9iPVhyLHRoaXMuVGltZVNlbGVjdGlvbkFmZm9yZGFuY2U9Y3N9Z2V0Q3NzVHJhbnNsYXRlUHhGb3JTdGFydEZvYigpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1wYS5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLnN0YXJ0U3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLnN0YXJ0U3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9Z2V0Q3NzVHJhbnNsYXRlUHhGb3JFbmRGb2IoKXtyZXR1cm4gbnVsbD09PXRoaXMuZW5kU3RlcEF4aXNQb3NpdGlvbj8iIjp0aGlzLmF4aXNEaXJlY3Rpb249PT1wYS5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLmVuZFN0ZXBBeGlzUG9zaXRpb259cHgpYDpgdHJhbnNsYXRlKCR7dGhpcy5lbmRTdGVwQXhpc1Bvc2l0aW9ufXB4LCAwcHgpYH1nZXRDc3NUcmFuc2xhdGVQeEZvclByb3NwZWN0aXZlRm9iKCl7cmV0dXJuIG51bGw9PT10aGlzLnByb3NwZWN0aXZlU3RlcD8iIjp0aGlzLmF4aXNEaXJlY3Rpb249PT1wYS5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9c3RvcEV2ZW50UHJvcGFnYXRpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCl9c3RhcnREcmFnKGUsaSxyKXtpIT09Y3MuRk9CJiZ0aGlzLnN0b3BFdmVudFByb3BhZ2F0aW9uKHIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3VzZUxpc3RlbmVyKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnN0b3BMaXN0ZW5lciksdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9ZSx0aGlzLmFmZm9yZGFuY2U9aX1zdG9wRHJhZygpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3VzZUxpc3RlbmVyKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnN0b3BMaXN0ZW5lciksdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9WHIuTk9ORSx0aGlzLmhhc0ZvYk1vdmVkJiZ0aGlzLnRpbWVTZWxlY3Rpb24mJnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHt0aW1lU2VsZWN0aW9uOnRoaXMudGltZVNlbGVjdGlvbixhZmZvcmRhbmNlOnRoaXMuYWZmb3JkYW5jZX0pLHRoaXMuYWZmb3JkYW5jZT1jcy5OT05FLHRoaXMuaGFzRm9iTW92ZWQ9ITF9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1wYS5WRVJUSUNBTH1zaG91bGRTd2FwRm9icyhlKXtyZXR1cm4hKCF0aGlzLnRpbWVTZWxlY3Rpb258fCF0aGlzLnRpbWVTZWxlY3Rpb24uZW5kKSYmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09WHIuRU5EP2U8dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA6dGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Yci5TVEFSVCYmZT50aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldE5ld1RpbWVTZWxlY3Rpb24oZSxpKXtsZXQgcj17Li4uaX07aWYoIXRoaXMudGltZVNlbGVjdGlvbilyZXR1cm4gcjtpZighdGhpcy50aW1lU2VsZWN0aW9uLmVuZClyZXR1cm4gci5zdGFydD17c3RlcDplfSxyO2lmKHRoaXMuc2hvdWxkU3dhcEZvYnMoZSkpe2xldFtvLHNdPXRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09WHIuRU5EP1siZW5kIiwic3RhcnQiXTpbInN0YXJ0IiwiZW5kIl07cmV0dXJuIHRoaXMuY3VycmVudERyYWdnaW5nRm9iPVRZZVtzXSxyW29dPXRoaXMudGltZVNlbGVjdGlvbltzXSxyW3NdPXtzdGVwOmV9LHJ9cmV0dXJuIHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09WHIuRU5EPyhyLmVuZD17c3RlcDplfSxyKTooci5zdGFydD17c3RlcDplfSxyKX1nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSl7bGV0IGk9bnVsbCxyPXRoaXMuZ2V0TW91c2VQb3NpdGlvbkZyb21FdmVudChlKSxvPXRoaXMuYXhpc0RpcmVjdGlvbj09PXBhLlZFUlRJQ0FMP2UubW92ZW1lbnRZOmUubW92ZW1lbnRYO3JldHVybiB0aGlzLmlzTW92aW5nSGlnaGVyKHIsbyk/aT10aGlzLmNhcmRGb2JIZWxwZXIuZ2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb24ocik6dGhpcy5pc01vdmluZ0xvd2VyKHIsbykmJihpPXRoaXMuY2FyZEZvYkhlbHBlci5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uKHIpKSxudWxsPT09aT9udWxsOml9bW91c2VNb3ZlKGUpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09WHIuTk9ORSlyZXR1cm47bGV0IGk9dGhpcy5nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSk7aWYobnVsbD09PWl8fCF0aGlzLnRpbWVTZWxlY3Rpb24pcmV0dXJuO2xldCByPXRoaXMuZ2V0TmV3VGltZVNlbGVjdGlvbihpLHRoaXMudGltZVNlbGVjdGlvbik7dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246cn0pLHRoaXMuaGFzRm9iTW92ZWQ9ITB9bW91c2VPdmVyUHJvc3BlY3RpdmVGb2JBcmVhKGUpe2lmKG51bGwhPXRoaXMudGltZVNlbGVjdGlvbj8uZW5kKXJldHVybjtsZXQgaT10aGlzLmdldE5ld1N0ZXBGcm9tTW91c2VFdmVudChlKTtudWxsIT09aSYmdGhpcy5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQuZW1pdChpKX1pc01vdmluZ0xvd2VyKGUsaSl7aWYodGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Yci5OT05FJiZudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXApcmV0dXJuITA7bGV0IHI9dGhpcy5nZXRDdXJyZW50Rm9iU3RlcCgpO3JldHVybiB2b2lkIDAhPT1yJiZlPHRoaXMuZ2V0RHJhZ2dpbmdGb2JDZW50ZXIoKSYmaTwwJiZyPnRoaXMubG93ZXN0U3RlcH1pc01vdmluZ0hpZ2hlcihlLGkpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09WHIuTk9ORSYmbnVsbD09PXRoaXMucHJvc3BlY3RpdmVTdGVwKXJldHVybiEwO2xldCByPXRoaXMuZ2V0Q3VycmVudEZvYlN0ZXAoKTtyZXR1cm4gdm9pZCAwIT09ciYmZT50aGlzLmdldERyYWdnaW5nRm9iQ2VudGVyKCkmJmk+MCYmcjx0aGlzLmhpZ2hlc3RTdGVwfWdldERyYWdnaW5nRm9iQ2VudGVyKCl7bGV0IGU9dGhpcy5nZXRDdXJyZW50Rm9iKCk/Lm5hdGl2ZUVsZW1lbnQ7aWYoIWUpcmV0dXJuIDA7bGV0IGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ascj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7cmV0dXJuIHRoaXMuYXhpc0RpcmVjdGlvbj09PXBhLlZFUlRJQ0FMP2ktdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOnItdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1nZXRDdXJyZW50Rm9iKCl7c3dpdGNoKHRoaXMuY3VycmVudERyYWdnaW5nRm9iKXtjYXNlIFhyLlNUQVJUOnJldHVybiB0aGlzLnN0YXJ0Rm9iV3JhcHBlcjtjYXNlIFhyLkVORDpyZXR1cm4gdGhpcy5lbmRGb2JXcmFwcGVyO2Nhc2UgWHIuTk9ORTpyZXR1cm4gdGhpcy5wcm9zcGVjdGl2ZUZvYldyYXBwZXJ9fWdldEN1cnJlbnRGb2JTdGVwKCl7c3dpdGNoKHRoaXMuY3VycmVudERyYWdnaW5nRm9iKXtjYXNlIFhyLlNUQVJUOnJldHVybiB0aGlzLnRpbWVTZWxlY3Rpb24/LnN0YXJ0LnN0ZXA7Y2FzZSBYci5FTkQ6cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj8uZW5kPy5zdGVwO2Nhc2UgWHIuTk9ORTpyZXR1cm4gdGhpcy5wcm9zcGVjdGl2ZVN0ZXA/P3ZvaWQgMH19Z2V0TW91c2VQb3NpdGlvbkZyb21FdmVudChlKXtyZXR1cm4gdGhpcy5heGlzRGlyZWN0aW9uPT09cGEuVkVSVElDQUw/ZS5jbGllbnRZLXRoaXMucm9vdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDplLmNsaWVudFgtdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1zdGVwVHlwZWQoZSxpKXtpZihudWxsPT09aSlyZXR1cm4gdm9pZChudWxsIT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZCYmdGhpcy5vbkZvYlJlbW92ZWQoZSkpO2xldCByPXsuLi50aGlzLnRpbWVTZWxlY3Rpb259O2U9PT1Yci5TVEFSVD9yLnN0YXJ0PXtzdGVwOml9OmU9PT1Yci5FTkQmJihyLmVuZD17c3RlcDppfSksbnVsbCE9PXIuZW5kJiZyLnN0YXJ0LnN0ZXA+ci5lbmQuc3RlcCYmKHI9e3N0YXJ0OnIuZW5kLGVuZDpyLnN0YXJ0fSksdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246cixhZmZvcmRhbmNlOmNzLkZPQl9URVhUfSl9cHJvc3BlY3RpdmVGb2JDbGlja2VkKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IGk9dGhpcy5nZXRQcm9zcGVjdGl2ZVRpbWVTZWxlY3Rpb24oKTshaXx8KHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOmNzLkZPQl9BRERFRCx0aW1lU2VsZWN0aW9uOml9KSx0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZC5lbWl0KG51bGwpKX1nZXRQcm9zcGVjdGl2ZVRpbWVTZWxlY3Rpb24oKXtpZih0aGlzLnByb3NwZWN0aXZlU3RlcClyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uP3tzdGFydDp7c3RlcDpNYXRoLm1pbih0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCx0aGlzLnByb3NwZWN0aXZlU3RlcCl9LGVuZDp7c3RlcDpNYXRoLm1heCh0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCx0aGlzLnByb3NwZWN0aXZlU3RlcCl9fTp7c3RhcnQ6e3N0ZXA6dGhpcy5wcm9zcGVjdGl2ZVN0ZXB9LGVuZDpudWxsfX1vbkZvYlJlbW92ZWQoZSl7ZSE9PVhyLkVORD9udWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD90aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpOnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOmNzLkZPQl9SRU1PVkVELHRpbWVTZWxlY3Rpb246e3N0YXJ0OnRoaXMudGltZVNlbGVjdGlvbi5lbmQsZW5kOm51bGx9fSk6dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe2FmZm9yZGFuY2U6Y3MuRk9CX1JFTU9WRUQsdGltZVNlbGVjdGlvbjp7Li4udGhpcy50aW1lU2VsZWN0aW9uLGVuZDpudWxsfX0pfW9uUHJvc3BlY3RpdmVBcmVhTW91c2VMZWF2ZSgpe3RoaXMub25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkLmVtaXQobnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLWZvYi1jb250cm9sbGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKG90KF9ZZSw1KSxvdCh2WWUsNSksb3QoeVllLDUpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnN0YXJ0Rm9iV3JhcHBlcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5lbmRGb2JXcmFwcGVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnByb3NwZWN0aXZlRm9iV3JhcHBlcj1yLmZpcnN0KX19LGlucHV0czp7YXhpc0RpcmVjdGlvbjoiYXhpc0RpcmVjdGlvbiIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsY2FyZEZvYkhlbHBlcjoiY2FyZEZvYkhlbHBlciIsc3RhcnRTdGVwQXhpc1Bvc2l0aW9uOiJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLGVuZFN0ZXBBeGlzUG9zaXRpb246ImVuZFN0ZXBBeGlzUG9zaXRpb24iLGhpZ2hlc3RTdGVwOiJoaWdoZXN0U3RlcCIsbG93ZXN0U3RlcDoibG93ZXN0U3RlcCIsc2hvd0V4dGVuZGVkTGluZToic2hvd0V4dGVuZGVkTGluZSIsaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkOiJpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQiLHByb3NwZWN0aXZlU3RlcDoicHJvc3BlY3RpdmVTdGVwIixwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb246InByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbiJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLG9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZDoib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbNCwibmdJZiJdLFsiY2xhc3MiLCJ0aW1lLWZvYi13cmFwcGVyIiwzLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbMSwicHJvc3BlY3RpdmUtZm9iLWFyZWEiLDMsIm5nQ2xhc3MiLCJtb3VzZW1vdmUiLCJjbGljayIsIm1vdXNlbGVhdmUiXSxbMSwidGltZS1mb2Itd3JhcHBlciJdLFsicHJvc3BlY3RpdmVGb2JXcmFwcGVyIiwiIl0sWyJjbGFzcyIsImV4dGVuZGVkLWxpbmUiLDQsIm5nSWYiXSxbMywibmdDbGFzcyIsImFsbG93UmVtb3ZhbCIsImlzUHJvc3BlY3RpdmUiLCJzdGVwIl0sWzEsImV4dGVuZGVkLWxpbmUiXSxbInN0YXJ0Rm9iV3JhcHBlciIsIiJdLFsiY2xhc3MiLCJleHRlbmRlZC1saW5lIiwzLCJtb3VzZWRvd24iLDQsIm5nSWYiXSxbMSwic3RhcnRGb2IiLDMsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl0sWzEsImV4dGVuZGVkLWxpbmUiLDMsIm1vdXNlZG93biJdLFsiZW5kRm9iV3JhcHBlciIsIiJdLFsxLCJlbmRGb2IiLDMsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiKSxFKDEsQ1llLDMsMiwibmctY29udGFpbmVyIiwwKSxFKDIsd1llLDQsNSwiZGl2IiwxKSxFKDMsRVllLDQsNSwiZGl2IiwxKSx2KCkpLDImZSYmKEMoMSkseSgibmdJZiIsaS5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQpLEMoMSkseSgibmdJZiIsaS50aW1lU2VsZWN0aW9uKSxDKDEpLHkoIm5nSWYiLGkudGltZVNlbGVjdGlvbiYmaS50aW1lU2VsZWN0aW9uLmVuZCkpfSxkZXBlbmRlbmNpZXM6W0ZuLEJlLGhwZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtwb2ludGVyLWV2ZW50czphbGx9LnRpbWUtZm9iLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjB9LnZlcnRpY2FsLWZvYltfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lmhvcml6b250YWwtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX0uZXh0ZW5kZWQtbGluZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItd2lkdGg6MCAxcHg7aGVpZ2h0OmNhbGMoMTAwJSAtIDMwcHgpfS5leHRlbmRlZC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMThweCwgI2NjYyAxOXB4LCAjY2NjIDIxcHgsIHRyYW5zcGFyZW50IDIycHgpO2JvcmRlcjowO2N1cnNvcjpldy1yZXNpemU7bWFyZ2luLWxlZnQ6LTIwcHg7cGFkZGluZzowIDIwcHh9Lmhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjA7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjMwcHg7d2lkdGg6Y2FsYygxMDAlIC0gNzRweCl9LnByb3NwZWN0aXZlLWFyZWFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxtcGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkPSExLHRoaXMuZGlzYWJsZUludGVyYWN0aW9uPSExLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5heGlzRGlyZWN0aW9uPXBhLkhPUklaT05UQUwsdGhpcy5jYXJkRm9iSGVscGVyPXtnZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbjp0aGlzLmdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyksZ2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbjp0aGlzLmdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb24uYmluZCh0aGlzKX0sdGhpcy5wcm9zcGVjdGl2ZVN0ZXA9bnVsbH1nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCl7cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj90aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCk6IiJ9Z2V0QXhpc1Bvc2l0aW9uRnJvbUVuZFN0ZXAoKXtyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQ/dGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQuc3RlcD8/dGhpcy5taW5NYXhTdGVwLm1heFN0ZXApOm51bGx9Z2V0QXhpc1Bvc2l0aW9uRnJvbVByb3NwZWN0aXZlU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXA/bnVsbDp0aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnByb3NwZWN0aXZlU3RlcCl9b25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkKGUpe3RoaXMucHJvc3BlY3RpdmVTdGVwPWV9Z2V0SGlnaGVzdFN0ZXAoKXtyZXR1cm4gdGhpcy5taW5NYXhTdGVwLm1heFN0ZXB9Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLm1pbk1heFN0ZXAubWluU3RlcH1nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl9Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl9Z2V0U3RlcEF0TW91c2VQb3N0aW9uKGUpe2xldCBpPU1hdGgucm91bmQodGhpcy5zY2FsZS5yZXZlcnNlKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sZSkpO3JldHVybiBpPnRoaXMuZ2V0SGlnaGVzdFN0ZXAoKT90aGlzLmdldEhpZ2hlc3RTdGVwKCk6aTx0aGlzLmdldExvd2VzdFN0ZXAoKT90aGlzLmdldExvd2VzdFN0ZXAoKTppfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3RpbWVTZWxlY3Rpb246InRpbWVTZWxlY3Rpb24iLHNjYWxlOiJzY2FsZSIsbWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQ6Im1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kIixtaW5NYXhTdGVwOiJtaW5NYXhTdGVwIixheGlzU2l6ZToiYXhpc1NpemUiLGlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZDoiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIixkaXNhYmxlSW50ZXJhY3Rpb246ImRpc2FibGVJbnRlcmFjdGlvbiJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6MTMsY29uc3RzOltbMywiYXhpc0RpcmVjdGlvbiIsInRpbWVTZWxlY3Rpb24iLCJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLCJlbmRTdGVwQXhpc1Bvc2l0aW9uIiwicHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uIiwiaGlnaGVzdFN0ZXAiLCJsb3dlc3RTdGVwIiwicHJvc3BlY3RpdmVTdGVwIiwiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIiwiY2FyZEZvYkhlbHBlciIsInNob3dFeHRlbmRlZExpbmUiLCJvblByb3NwZWN0aXZlU3RlcENoYW5nZWQiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiY2FyZC1mb2ItY29udHJvbGxlciIsMCksUCgib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQobyl9KSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KG8pfSkoIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdChvKX0pLHYoKSksMiZlJiYoUHQoInBvaW50ZXItZXZlbnRzIixpLmRpc2FibGVJbnRlcmFjdGlvbj8ibm9uZSI6ImFsbCIpLHkoImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb24iLGkuZ2V0QXhpc1Bvc2l0aW9uRnJvbVByb3NwZWN0aXZlU3RlcCgpKSgiaGlnaGVzdFN0ZXAiLGkuZ2V0SGlnaGVzdFN0ZXAoKSkoImxvd2VzdFN0ZXAiLGkuZ2V0TG93ZXN0U3RlcCgpKSgicHJvc3BlY3RpdmVTdGVwIixpLnByb3NwZWN0aXZlU3RlcCkoImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsaS5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpKCJzaG93RXh0ZW5kZWRMaW5lIiwhMCkpfSxkZXBlbmRlbmNpZXM6W0drXSxzdHlsZXM6WyJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciAudGltZS1mb2Itd3JhcHBlcntoZWlnaHQ6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEFZZShuLHQpezEmbiYmTygwLCJtYXQtc3Bpbm5lciIsMjUpfWZ1bmN0aW9uIElZZShuLHQpezEmbiYmKF8oMCwidGgiKSxBKDEsIlNtb290aGVkIiksdigpKX1mdW5jdGlvbiBQWWUobix0KXtpZigxJm4mJihzbigwKSxPKDEsInRiLWV4cGVyaW1lbnQtYWxpYXMiLDMxKSxBKDIsIi8iKSxhbigpKSwyJm4pe2xldCBlPVMoKS4kaW1wbGljaXQ7QygxKSx5KCJhbGlhcyIsZS5tZXRhZGF0YS5hbGlhcyl9fWZ1bmN0aW9uIFJZZShuLHQpe2lmKDEmbiYmKF8oMCwidGQiKSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKCkuJGltcGxpY2l0LGk9UygyKTtDKDEpLGplKCIgIixpLnZhbHVlRm9ybWF0dGVyLmZvcm1hdFNob3J0KGUuZGF0YVBvaW50LnkpLCIgIil9fWZ1bmN0aW9uIE9ZZShuLHQpe2lmKDEmbiYmKHNuKDApLF8oMSwidHIiLDI5KSgyLCJ0ZCIsMzApLE8oMywic3BhbiIpLHYoKSxfKDQsInRkIiwyKSxFKDUsUFllLDMsMSwibmctY29udGFpbmVyIiwyMiksQSg2KSx2KCksRSg3LFJZZSwyLDEsInRkIiwyMiksXyg4LCJ0ZCIpLEEoOSksdigpLF8oMTAsInRkIiksQSgxMSksdigpLF8oMTIsInRkIiksQSgxMyksQigxNCwiZGF0ZSIpLHYoKSxfKDE1LCJ0ZCIpLEEoMTYpLHYoKSgpLGFuKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKDIpO0MoMSksZXQoImNsb3Nlc3QiLGUubWV0YWRhdGEuY2xvc2VzdCksQygyKSxQdCgiYmFja2dyb3VuZC1jb2xvciIsZS5tZXRhZGF0YS5jb2xvciksQygyKSx5KCJuZ0lmIixlLm1ldGFkYXRhLmFsaWFzKSxDKDEpLGplKCIiLGUubWV0YWRhdGEuZGlzcGxheU5hbWUsIiAiKSxDKDEpLHkoIm5nSWYiLGkuc21vb3RoaW5nRW5hYmxlZCksQygyKSx5dChpLnZhbHVlRm9ybWF0dGVyLmZvcm1hdFNob3J0KGUuZGF0YVBvaW50LnZhbHVlKSksQygyKSx5dChpLnN0ZXBGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQuc3RlcCkpLEMoMikseXQoSmYoMTQsMTEsZS5kYXRhUG9pbnQud2FsbFRpbWUsInNob3J0IikpLEMoMyksamUoIiAiLGkucmVsYXRpdmVYRm9ybWF0dGVyLmZvcm1hdFJlYWRhYmxlKGUuZGF0YVBvaW50LnJlbGF0aXZlVGltZUluTXMpLCIgIil9fWZ1bmN0aW9uIGtZZShuLHQpe2lmKDEmbiYmKF8oMCwidGFibGUiLDI2KSgxLCJ0aGVhZCIpKDIsInRyIiksTygzLCJ0aCIsMjcpLF8oNCwidGgiKSxBKDUsIlJ1biIpLHYoKSxFKDYsSVllLDIsMCwidGgiLDIyKSxfKDcsInRoIiksQSg4LCJWYWx1ZSIpLHYoKSxfKDksInRoIiksQSgxMCwiU3RlcCIpLHYoKSxfKDExLCJ0aCIpLEEoMTIsIlRpbWUiKSx2KCksXygxMywidGgiKSxBKDE0LCJSZWxhdGl2ZSIpLHYoKSgpKCksXygxNSwidGJvZHkiKSxFKDE2LE9ZZSwxNywxNCwibmctY29udGFpbmVyIiwyOCksdigpKCkpLDImbil7bGV0IGU9dC5kYXRhLGk9dC5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkLHI9dC5jdXJzb3JMb2NhdGlvbixvPVMoKTtDKDYpLHkoIm5nSWYiLG8uc21vb3RoaW5nRW5hYmxlZCksQygxMCkseSgibmdGb3JPZiIsby5nZXRDdXJzb3JBd2FyZVRvb2x0aXBEYXRhKGUsaSxyKSkoIm5nRm9yVHJhY2tCeSIsby50cmFja0J5VG9vbHRpcERhdHVtKX19ZnVuY3Rpb24gRlllKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO3NuKDApLF8oMSwiZGl2IiwzMikoMiwic2NhbGFyLWNhcmQtZGF0YS10YWJsZSIsMzMpLFAoInNvcnREYXRhQnkiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkuc29ydERhdGFCeShyKSl9KSgib3JkZXJDb2x1bW5zIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLnJlb3JkZXJDb2x1bW5IZWFkZXJzLmVtaXQocikpfSksdigpKCksYW4oKX1pZigyJm4pe2xldCBlPVMoKTtDKDIpLHkoImNoYXJ0TWV0YWRhdGFNYXAiLGUuY2hhcnRNZXRhZGF0YU1hcCkoImRhdGFTZXJpZXMiLGUuZGF0YVNlcmllcykoInN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24iLGUuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbikoImNvbHVtbkhlYWRlcnMiLGUuY29sdW1uSGVhZGVycykoInNvcnRpbmdJbmZvIixlLnNvcnRpbmdJbmZvKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGUuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpKCJzbW9vdGhpbmdFbmFibGVkIixlLnNtb290aGluZ0VuYWJsZWQpfX12YXIgTlllPWZ1bmN0aW9uKG4pe3JldHVyblswLG5dfSxMWWU9ZnVuY3Rpb24oKXtyZXR1cm57Im91dC1vZi1zZWxlY3RlZC10aW1lIjohMCxlbmQ6ITAscmFuZ2U6ITB9fTtmdW5jdGlvbiBCWWUobix0KXtpZigxJm4mJk8oMCwiZGl2IiwzNCksMiZuKXtsZXQgZT1TKDIpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPVMoKTtQdCgibGVmdCIsby5mb3J3YXJkKGkueCxPbigzLE5ZZSxyLndpZHRoKSxudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kP251bGw6cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSsicHgiKSx5KCJuZ0NsYXNzIixRcCg1LExZZSkpfX12YXIgVlllPWZ1bmN0aW9uKG4pe3JldHVybltuLDBdfSxIWWU9ZnVuY3Rpb24obil7cmV0dXJueyJvdXQtb2Ytc2VsZWN0ZWQtdGltZSI6ITAsc3RhcnQ6ITAscmFuZ2U6bn19O2Z1bmN0aW9uIFVZZShuLHQpe2lmKDEmbiYmKHNuKDApLE8oMSwiZGl2IiwzNCksRSgyLEJZZSwxLDYsImRpdiIsMzUpLGFuKCkpLDImbil7bGV0IGU9UygpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPVMoKTtDKDEpLFB0KCJyaWdodCIsby5mb3J3YXJkKGkueCxPbig0LFZZZSxyLndpZHRoKSxzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCkrInB4IikseSgibmdDbGFzcyIsT24oNixIWWUsIShudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kfHwhcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSkpLEMoMSkseSgibmdJZiIsbnVsbD09cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9udWxsOnMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQuc3RlcCl9fWZ1bmN0aW9uIHpZZShuLHQpezEmbiYmRSgwLFVZZSwzLDgsIm5nLWNvbnRhaW5lciIsMjIpLDImbiYmeSgibmdJZiIsUygpLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24pfWZ1bmN0aW9uIGpZZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtzbigwKSxfKDEsInNjYWxhci1jYXJkLWZvYi1jb250cm9sbGVyIiwzNiksUCgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoMikub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKDIpLm9uRm9iUmVtb3ZlZCgpKX0pLHYoKSxhbigpfWlmKDImbil7bGV0IGU9UygpLGk9ZS5pbnRlcmFjdGlvblN0YXRlLHI9ZS54U2NhbGUsbz1lLnZpZXdFeHRlbnQscz1lLmRvbURpbWVuc2lvbixhPVMoKTtDKDEpLHkoImRpc2FibGVJbnRlcmFjdGlvbiIsIk5PTkUiIT09aSkoInRpbWVTZWxlY3Rpb24iLGEuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbikoInNjYWxlIixyKSgibWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQiLG8ueCkoIm1pbk1heFN0ZXAiLGEubWluTWF4U3RlcCkoImF4aXNTaXplIixzLndpZHRoKSgiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIixhLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCl9fWZ1bmN0aW9uIEdZZShuLHQpezEmbiYmRSgwLGpZZSwyLDcsIm5nLWNvbnRhaW5lciIsMjIpLDImbiYmeSgibmdJZiIsUygpLnNob3dGb2JDb250cm9sbGVyKCkpfXZhciBncGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMucmVmPWUsdGhpcy5kaWFsb2c9aSx0aGlzLkRhdGFMb2FkU3RhdGU9T2UsdGhpcy5SZW5kZXJlclR5cGU9ZHIsdGhpcy5TY2FsZVR5cGU9TnIsdGhpcy5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQ9ITEsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZD1uZXcgRyx0aGlzLm9uRGF0YVRhYmxlU29ydGluZz1uZXcgRyx0aGlzLnJlb3JkZXJDb2x1bW5IZWFkZXJzPW5ldyBHLHRoaXMub25MaW5lQ2hhcnRab29tPW5ldyBHLHRoaXMuc29ydGluZ0luZm89e2hlYWRlcjpLdC5SVU4sb3JkZXI6eGwuQVNDRU5ESU5HfSx0aGlzLnlTY2FsZVR5cGU9TnIuTElORUFSLHRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbj0hMSx0aGlzLnJlbGF0aXZlWEZvcm1hdHRlcj1TUyx0aGlzLnZhbHVlRm9ybWF0dGVyPXlwLHRoaXMuc3RlcEZvcm1hdHRlcj1NZH10b2dnbGVZU2NhbGVUeXBlKCl7dGhpcy55U2NhbGVUeXBlPXRoaXMueVNjYWxlVHlwZT09PU5yLkxJTkVBUj9Oci5MT0cxMDpOci5MSU5FQVJ9c29ydERhdGFCeShlKXt0aGlzLnNvcnRpbmdJbmZvPWUsdGhpcy5vbkRhdGFUYWJsZVNvcnRpbmcuZW1pdChlKX1yZXNldERvbWFpbigpe3RoaXMubGluZUNoYXJ0JiZ0aGlzLmxpbmVDaGFydC52aWV3Qm94UmVzZXQoKX10cmFja0J5VG9vbHRpcERhdHVtKGUsaSl7cmV0dXJuIGkuaWR9Z2V0Q3VzdG9tWEZvcm1hdHRlcigpe3N3aXRjaCh0aGlzLnhBeGlzVHlwZSl7Y2FzZSBKaS5SRUxBVElWRTpyZXR1cm4gU1M7Y2FzZSBKaS5TVEVQOnJldHVybiBqY2U7ZGVmYXVsdDpyZXR1cm59fWdldEN1cnNvckF3YXJlVG9vbHRpcERhdGEoZSxpLHIpe2xldCBvPWUubWFwKGw9Pih7Li4ubCxtZXRhZGF0YTp7Li4ubC5tZXRhZGF0YSxjbG9zZXN0OiExLGRpc3RUb0N1cnNvclBpeGVsczpNYXRoLmh5cG90KGwuZG9tUG9pbnQueC1yLngsbC5kb21Qb2ludC55LXIueSksZGlzdFRvQ3Vyc29yWDpsLmRhdGFQb2ludC54LWkueCxkaXN0VG9DdXJzb3JZOmwuZGF0YVBvaW50LnktaS55fX0pKSxzPTEvMCxhPTA7Zm9yKGxldCBsPTA7bDxvLmxlbmd0aDtsKyspcz5vW2xdLm1ldGFkYXRhLmRpc3RUb0N1cnNvclBpeGVscyYmKHM9b1tsXS5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMsYT1sKTtzd2l0Y2goby5sZW5ndGgmJihvW2FdLm1ldGFkYXRhLmNsb3Nlc3Q9ITApLHRoaXMudG9vbHRpcFNvcnQpe2Nhc2UgT28uQVNDRU5ESU5HOnJldHVybiBvLnNvcnQoKGwsYyk9PmwuZGF0YVBvaW50LnktYy5kYXRhUG9pbnQueSk7Y2FzZSBPby5ERVNDRU5ESU5HOnJldHVybiBvLnNvcnQoKGwsYyk9PmMuZGF0YVBvaW50LnktbC5kYXRhUG9pbnQueSk7Y2FzZSBPby5ORUFSRVNUOnJldHVybiBvLnNvcnQoKGwsYyk9PmwubWV0YWRhdGEuZGlzdFRvQ3Vyc29yUGl4ZWxzLWMubWV0YWRhdGEuZGlzdFRvQ3Vyc29yUGl4ZWxzKTtjYXNlIE9vLk5FQVJFU1RfWTpyZXR1cm4gby5zb3J0KChsLGMpPT5sLm1ldGFkYXRhLmRpc3RUb0N1cnNvclktYy5tZXRhZGF0YS5kaXN0VG9DdXJzb3JZKTtjYXNlIE9vLkRFRkFVTFQ6Y2FzZSBPby5BTFBIQUJFVElDQUw6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5tZXRhZGF0YS5kaXNwbGF5TmFtZTxjLm1ldGFkYXRhLmRpc3BsYXlOYW1lPy0xOmwubWV0YWRhdGEuZGlzcGxheU5hbWU+Yy5tZXRhZGF0YS5kaXNwbGF5TmFtZT8xOjApfX1vcGVuRGF0YURvd25sb2FkRGlhbG9nKCl7dGhpcy5kaWFsb2cub3Blbih0aGlzLkRhdGFEb3dubG9hZENvbXBvbmVudCx7ZGF0YTp7Y2FyZElkOnRoaXMuY2FyZElkfX0pfW9uRm9iUmVtb3ZlZCgpe3RoaXMub25TdGVwU2VsZWN0b3JUb2dnbGVkLmVtaXQoYmwuRk9CX0RFU0VMRUNUKX1zaG93RGF0YVRhYmxlKCl7cmV0dXJuIHRoaXMueEF4aXNUeXBlPT09SmkuU1RFUCYmbnVsbCE9PXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbn1zaG93Rm9iQ29udHJvbGxlcigpe3JldHVybiB0aGlzLnhBeGlzVHlwZT09PUppLlNURVAmJihudWxsIT09dGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9ufHx0aGlzLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0odmwpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChqayw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmxpbmVDaGFydD1yLmZpcnN0KX19LGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGNoYXJ0TWV0YWRhdGFNYXA6ImNoYXJ0TWV0YWRhdGFNYXAiLERhdGFEb3dubG9hZENvbXBvbmVudDoiRGF0YURvd25sb2FkQ29tcG9uZW50IixkYXRhU2VyaWVzOiJkYXRhU2VyaWVzIixpZ25vcmVPdXRsaWVyczoiaWdub3JlT3V0bGllcnMiLGlzQ2FyZFZpc2libGU6ImlzQ2FyZFZpc2libGUiLGlzUGlubmVkOiJpc1Bpbm5lZCIsbG9hZFN0YXRlOiJsb2FkU3RhdGUiLHNob3dGdWxsU2l6ZToic2hvd0Z1bGxTaXplIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIix0YWc6InRhZyIsdGl0bGU6InRpdGxlIix0b29sdGlwU29ydDoidG9vbHRpcFNvcnQiLHhBeGlzVHlwZToieEF4aXNUeXBlIix4U2NhbGVUeXBlOiJ4U2NhbGVUeXBlIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUiLGZvcmNlU3ZnOiJmb3JjZVN2ZyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uOiJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIixpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQ6ImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsbWluTWF4U3RlcDoibWluTWF4U3RlcCIsY29sdW1uSGVhZGVyczoiY29sdW1uSGVhZGVycyJ9LG91dHB1dHM6e29uRnVsbFNpemVUb2dnbGU6Im9uRnVsbFNpemVUb2dnbGUiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIixvblRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvblN0ZXBTZWxlY3RvclRvZ2dsZWQ6Im9uU3RlcFNlbGVjdG9yVG9nZ2xlZCIsb25EYXRhVGFibGVTb3J0aW5nOiJvbkRhdGFUYWJsZVNvcnRpbmciLHJlb3JkZXJDb2x1bW5IZWFkZXJzOiJyZW9yZGVyQ29sdW1uSGVhZGVycyIsb25MaW5lQ2hhcnRab29tOiJvbkxpbmVDaGFydFpvb20ifSxkZWNsczozNix2YXJzOjI3LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGUsaSxyLG87cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHJlc2V0cyBsaW5lIGNoYXJ0IGRvbWFpbiB0byB0aGUgZGF0YeKQn2U2OGE1NTI5NDFhYjQyN2E5OWU3NDM3ZTA4NDQzZjMwYWM3MWNjZDbikJ8zODMwNjQ2NTIxMDU4MjY4NTU4OkZpdCBsaW5lIGNoYXJ0IGRvbWFpbnMgdG8gZGF0YWAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHBpbiBhIGNhcmQu4pCfZTY2NWRjNzEyYmQ1ZjE4ZDRkZmEzYTI5ZTEyNWQ1NjVjYzUxZTJmNuKQnzcyODQ2MDY0MjYyMzQzNzUzNDQ6UGluIGNhcmRgLGk9JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBsaW5lIGNoYXJ0IHRoYXQgdG9nZ2xlcyBmdWxsIHNpemUgbW9kZS7ikJ9mYzhmNzY3ZDBiOWY5MzAxODdhMWJhZTM0NDc3YWQyODczNmVjZTMz4pCfOTE1NzIxNTYzNjM4OTI2NTk3OlRvZ2dsZSBmdWxsIHNpemUgbW9kZWAscj0kbG9jYWxpemVgOkFuIG92ZXJmbG93IG1lbnUgYnV0dG9uIHRoYXQgb3BlbnMgbW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnPikJ9iMjYwZmFiOTQ2YTMwNzdjZTIwZmQyOGUzMzY5NzlmNTg2NzIwZThk4pCfODc4MDUzNzQwMjEwMzM2NDM1Ok1vcmUgbGluZSBjaGFydCBvcHRpb25zYCxvPSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCB0b2dnbGVzIGxvZyBzY2FsZSBvbiB5LWF4aXMgb24gYSBsaW5lIGNoYXJ04pCfZmU5MWY5NmFiOWIzYmFjYTVhNDg5MTNmMmIwZmFlODQ0ODNkOTNlM+KQnzMzNzQ2NDU2MjA2Mzg4ODM5MjY6VG9nZ2xlIFktYXhpcyBsb2cgc2NhbGUgb24gbGluZSBjaGFydGAsW1sxLCJhbHdheXMtdmlzaWJsZSJdLFsxLCJoZWFkaW5nIl0sWzEsIm5hbWUiXSxbMSwidGFnIiwzLCJ0aXRsZSIsInZhbHVlIl0sWzMsImlzQ2xpcHBlZCJdLFsxLCJjb250cm9scyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJkaXNhYmxlZCIsInRpdGxlIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19vdmVyc2Nhbl8yNHB4Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGksInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsciwidGl0bGUiLCJNb3JlIGxpbmUgY2hhcnQgb3B0aW9ucyIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJtb3JlX3ZlcnRfMjRweCJdLFsibWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJhcmlhLWxhYmVsIixvLDMsImNsaWNrIl0sWyJzdmdJY29uIiwibGluZV93ZWlnaHRfMjRweCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLCJPcGVuIGRpYWxvZyB0byBkb3dubG9hZCBkYXRhIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImdldF9hcHBfMjRweCJdLFsxLCJjaGFydC1jb250YWluZXIiXSxbImRpYW1ldGVyIiwiMTgiLDQsIm5nSWYiXSxbMywiZGlzYWJsZVVwZGF0ZSIsInByZWZlcnJlZFJlbmRlcmVyVHlwZSIsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInhTY2FsZVR5cGUiLCJ5U2NhbGVUeXBlIiwiY3VzdG9tWEZvcm1hdHRlciIsImlnbm9yZVlPdXRsaWVycyIsInRvb2x0aXBUZW1wbGF0ZSIsInVzZURhcmtNb2RlIiwiY3VzdG9tVmlzVGVtcGxhdGUiLCJjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSIsIm9uVmlld0JveE92ZXJyaWRkZW4iLCJ2aWV3Qm94Q2hhbmdlZCJdLFsidG9vbHRpcCIsIiJdLFs0LCJuZ0lmIl0sWyJsaW5lQ2hhcnRDdXN0b21WaXMiLCIiXSxbImxpbmVDaGFydEN1c3RvbVhBeGlzVmlzIiwiIl0sWyJkaWFtZXRlciIsIjE4Il0sWzEsInRvb2x0aXAiXSxbMSwiY2lyY2xlLWhlYWRlciJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwidG9vbHRpcC1yb3ciXSxbMSwidG9vbHRpcC1yb3ctY2lyY2xlIl0sWzMsImFsaWFzIl0sWzEsImRhdGEtdGFibGUtY29udGFpbmVyIl0sWzMsImNoYXJ0TWV0YWRhdGFNYXAiLCJkYXRhU2VyaWVzIiwic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsImNvbHVtbkhlYWRlcnMiLCJzb3J0aW5nSW5mbyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwic21vb3RoaW5nRW5hYmxlZCIsInNvcnREYXRhQnkiLCJvcmRlckNvbHVtbnMiXSxbMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIiwibGVmdCIsNCwibmdJZiJdLFszLCJkaXNhYmxlSW50ZXJhY3Rpb24iLCJ0aW1lU2VsZWN0aW9uIiwic2NhbGUiLCJtaW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCIsIm1pbk1heFN0ZXAiLCJheGlzU2l6ZSIsImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKF8oMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsInNwYW4iLDIpLE8oMywidGItdHJ1bmNhdGVkLXBhdGgiLDMpKDQsInZpcy1saW5rZWQtdGltZS1zZWxlY3Rpb24td2FybmluZyIsNCksdigpLF8oNSwic3BhbiIsNSkoNiwiYnV0dG9uIiw2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5yZXNldERvbWFpbigpfSksQig3LCJhc3luYyIpLEIoOCwiYXN5bmMiKSxPKDksIm1hdC1pY29uIiw3KSx2KCksXygxMCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxPKDExLCJtYXQtaWNvbiIsOSksdigpLF8oMTIsImJ1dHRvbiIsMTApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uRnVsbFNpemVUb2dnbGUuZW1pdCgpfSksTygxMywibWF0LWljb24iLDkpLHYoKSxfKDE0LCJidXR0b24iLDExKSxPKDE1LCJtYXQtaWNvbiIsMTIpLHYoKSxfKDE2LCJtYXQtbWVudSIsbnVsbCwxMykoMTgsImJ1dHRvbiIsMTQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZVlTY2FsZVR5cGUoKX0pLE8oMTksIm1hdC1pY29uIiwxNSksXygyMCwic3BhbiIpLEEoMjEsIlRvZ2dsZSBZLWF4aXMgbG9nIHNjYWxlIiksdigpKCksXygyMiwiYnV0dG9uIiwxNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub3BlbkRhdGFEb3dubG9hZERpYWxvZygpfSksTygyMywibWF0LWljb24iLDE3KSxfKDI0LCJzcGFuIiksQSgyNSwiRG93bmxvYWQgZGF0YSIpLHYoKSgpKCkoKSgpLF8oMjYsImRpdiIsMTgpLEUoMjcsQVllLDEsMCwibWF0LXNwaW5uZXIiLDE5KSxfKDI4LCJsaW5lLWNoYXJ0IiwyMCksUCgib25WaWV3Qm94T3ZlcnJpZGRlbiIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaXNWaWV3Qm94T3ZlcnJpZGRlbj1vfSkoInZpZXdCb3hDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkxpbmVDaGFydFpvb20uZW1pdChvKX0pLHYoKSxFKDI5LGtZZSwxNywzLCJuZy10ZW1wbGF0ZSIsbnVsbCwyMSxxdCksdigpKCksRSgzMSxGWWUsMyw3LCJuZy1jb250YWluZXIiLDIyKSxFKDMyLHpZZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDIzLHF0KSxFKDM0LEdZZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDI0LHF0KSksMiZlKXtsZXQgcj0kZSgxNyksbz0kZSgzMCkscz0kZSgzMyksYT0kZSgzNSk7QygzKSxaaSgidGl0bGUiLGkudGFnKSxaaSgidmFsdWUiLGkudGl0bGUpLEMoMSkseSgiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSxDKDIpLHkoImRpc2FibGVkIiwhaS5saW5lQ2hhcnR8fCFVKDcsMjMsaS5saW5lQ2hhcnQuZ2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpKSkoInRpdGxlIixpLmxpbmVDaGFydCYmVSg4LDI1LGkubGluZUNoYXJ0LmdldElzVmlld0JveE92ZXJyaWRkZW4oKSk/IkxpbmUgY2hhcnQgaXMgYWxyZWFkeSBmaXR0ZWQgdG8gZGF0YS4gV2hlbiBkYXRhIHVwZGF0ZXMsIHRoZSBsaW5lIGNoYXJ0IHdpbGwgYXV0byBmaXQgdG8gaXRzIGRvbWFpbi4iOiJGaXQgbGluZSBjaGFydCBkb21haW5zIHRvIGRhdGEiKSxDKDQpLHplKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIiksQygxKSx5KCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLEMoMikseSgic3ZnSWNvbiIsaS5zaG93RnVsbFNpemU/ImZ1bGxzY3JlZW5fZXhpdF8yNHB4IjoiZnVsbHNjcmVlbl8yNHB4IiksQygxKSx5KCJtYXRNZW51VHJpZ2dlckZvciIsciksQygxMykseSgibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORyksQygxKSx5KCJkaXNhYmxlVXBkYXRlIiwhaS5pc0NhcmRWaXNpYmxlKSgicHJlZmVycmVkUmVuZGVyZXJUeXBlIixpLmZvcmNlU3ZnP2kuUmVuZGVyZXJUeXBlLlNWRzppLlJlbmRlcmVyVHlwZS5XRUJHTCkoInNlcmllc0RhdGEiLGkuZGF0YVNlcmllcykoInNlcmllc01ldGFkYXRhTWFwIixpLmNoYXJ0TWV0YWRhdGFNYXApKCJ4U2NhbGVUeXBlIixpLnhTY2FsZVR5cGUpKCJ5U2NhbGVUeXBlIixpLnlTY2FsZVR5cGUpKCJjdXN0b21YRm9ybWF0dGVyIixpLmdldEN1c3RvbVhGb3JtYXR0ZXIoKSkoImlnbm9yZVlPdXRsaWVycyIsaS5pZ25vcmVPdXRsaWVycykoInRvb2x0aXBUZW1wbGF0ZSIsbykoInVzZURhcmtNb2RlIixpLnVzZURhcmtNb2RlKSgiY3VzdG9tVmlzVGVtcGxhdGUiLHMpKCJjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSIsYSksQygzKSx5KCJuZ0lmIixpLnNob3dEYXRhVGFibGUoKSl9fSxkZXBlbmRlbmNpZXM6W0ZuLGRuLEJlLGN5LGprLF9uLEd0LGhkLG51LGZkLEJvLHV5LGR5LHBwZSxtcGUsR2UsVV9dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5hbHdheXMtdmlzaWJsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6Mjk4cHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxfS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxNHB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206NHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpncmlkO2dhcDo1cHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gYXV0b30uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV0gICB2aXMtc2VsZWN0ZWQtdGltZS1jbGlwcGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MS4yZW07bGluZS1oZWlnaHQ6MH0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7ZmxleC1zaHJpbms6MDttYXJnaW4tcmlnaHQ6LTEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uY2hhcnQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0uY2hhcnQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMXB4O3RvcDoxMXB4fS5jaGFydC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJX0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXNwYWNpbmc6NHB4O2ZvbnQtc2l6ZToxM3B4fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xvc2VzdFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojZmZmO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm91dC1vZi1zZWxlY3RlZC10aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZX0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodC13aWR0aDoycHg7bWFyZ2luLWxlZnQ6LTFweH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnQucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2xlZnQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuZW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdC13aWR0aDoycHg7bWFyZ2luLXJpZ2h0Oi0xcHg7cmlnaHQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQpfS5kYXRhLXRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtoZWlnaHQ6MTAwcHg7b3ZlcmZsb3c6YXV0b30iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGtHPS0xLzAsRkc9MS8wO2Z1bmN0aW9uIHFZZShuLHQpe3JldHVybiBuLmxlbmd0aD09PXQubGVuZ3RoJiZuLmV2ZXJ5KChlLGkpPT57bGV0IHI9dFtpXSxvPWUucG9pbnRzLHM9ci5wb2ludHM7cmV0dXJuIGUucnVuSWQ9PT1yLnJ1bklkJiZvLmxlbmd0aD09PXMubGVuZ3RoJiZvLmV2ZXJ5KChhLGwpPT57bGV0IGM9c1tsXTtyZXR1cm4gYS54PT09Yy54JiZhLnk9PT1jLnl9KX0pfXZhciBfcGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5EYXRhRG93bmxvYWRDb21wb25lbnQ9b3NlLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZD1uZXcgRyx0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkPW5ldyBHLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBHLHRoaXMuaXNWaXNpYmxlPSExLHRoaXMuaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChEJCksdGhpcy5taW5NYXhTdGVwcyQ9bmV3IGhyKHttaW5TdGVwOmtHLG1heFN0ZXA6Rkd9KSx0aGlzLmxpbmVDaGFydFpvb20kPW5ldyBocih7bWluU3RlcDprRyxtYXhTdGVwOkZHfSksdGhpcy5zdGVwU2VsZWN0b3JUaW1lU2VsZWN0aW9uJD1uZXcgaHIobnVsbCksdGhpcy51c2VEYXJrTW9kZSQ9dGhpcy5zdG9yZS5zZWxlY3QoUXUpLHRoaXMuaWdub3JlT3V0bGllcnMkPXRoaXMuc3RvcmUuc2VsZWN0KGh2KSx0aGlzLnRvb2x0aXBTb3J0JD10aGlzLnN0b3JlLnNlbGVjdChwdiksdGhpcy54QXhpc1R5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KHRkKSx0aGlzLmZvcmNlU3ZnJD10aGlzLnN0b3JlLnNlbGVjdCh3JCksdGhpcy5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QocUEpLHRoaXMueFNjYWxlVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QodGQpLnBpcGUoTChpPT57c3dpdGNoKGkpe2Nhc2UgSmkuU1RFUDpjYXNlIEppLlJFTEFUSVZFOnJldHVybiBOci5MSU5FQVI7Y2FzZSBKaS5XQUxMX1RJTUU6cmV0dXJuIE5yLlRJTUU7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgeEF4aXNUeXBlIGZvciBsaW5lIGNoYXJ0LiAke2l9YCl9fSkpLHRoaXMuc2NhbGFyU21vb3RoaW5nJD10aGlzLnN0b3JlLnNlbGVjdChvcCksdGhpcy5zbW9vdGhpbmdFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChvcCkucGlwZShMKGk9Pmk+MCkpLHRoaXMuc2hvd0Z1bGxTaXplPSExLHRoaXMubmdVbnN1YnNjcmliZT1uZXcga2V9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmlzVmlzaWJsZT1lfWlzU2NhbGFyQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PXJpLlNDQUxBUlN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc2hvd0Z1bGxTaXplPSF0aGlzLnNob3dGdWxsU2l6ZSx0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdCh0aGlzLnNob3dGdWxsU2l6ZSksdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZC5lbWl0KHRoaXMuc2hvd0Z1bGxTaXplKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KHRjLHRoaXMuY2FyZElkKS5waXBlKFllKGw9PiEhbCYmdGhpcy5pc1NjYWxhckNhcmRNZXRhZGF0YShsKSksTChsPT5sKSk7ZnVuY3Rpb24gcyhsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWyJzbW9vdGhlZCIsbF0pfWxldCBhPXRoaXMuc3RvcmUuc2VsZWN0KHhoLHRoaXMuY2FyZElkKS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSksWWUobD0+Qm9vbGVhbihsKSksTChsPT5sKSxNYSgxKSkucGlwZShmcih0aGlzLnN0b3JlLnNlbGVjdCh0ZCkpLEwoKFtsLGNdKT0+T2JqZWN0LmtleXMobCkubWFwKHA9Pih7cnVuSWQ6cCxwb2ludHM6dGhpcy5zdGVwU2VyaWVzVG9MaW5lU2VyaWVzKGxbcF0sYyl9KSkpLHlpKHFZZSkpLnBpcGUoZnIodGhpcy5zdG9yZS5zZWxlY3QoT0kpKSxzdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEwoKFtsLGNdKT0+Yz9mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgb2Ygbil7bGV0IGk9W10scj1OdW1iZXIuaXNGaW5pdGUoZS5wb2ludHNbMF0/LngpP2UucG9pbnRzWzBdLng6LTEvMCxvPVtdO2ZvcihsZXQgcyBvZiBlLnBvaW50cylOdW1iZXIuaXNGaW5pdGUocy54KT8ocy54PHImJihpLnB1c2goe3Nlcmllc0lkOkpTT04uc3RyaW5naWZ5KFtlLnJ1bklkLGkubGVuZ3RoXSkscnVuSWQ6ZS5ydW5JZCxwb2ludHM6b30pLG89W10pLG8ucHVzaChzKSxyPXMueCk6by5wdXNoKHMpO2kucHVzaCh7c2VyaWVzSWQ6SlNPTi5zdHJpbmdpZnkoW2UucnVuSWQsaS5sZW5ndGhdKSxydW5JZDplLnJ1bklkLHBvaW50czpvfSk7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspdC5wdXNoKHsuLi5pW3NdLHBhcnRpdGlvbkluZGV4OnMscGFydGl0aW9uU2l6ZTppLmxlbmd0aH0pfXJldHVybiB0fShsKTpsLm1hcCh1PT4oey4uLnUsc2VyaWVzSWQ6dS5ydW5JZCxwYXJ0aXRpb25JbmRleDowLHBhcnRpdGlvblNpemU6MX0pKSksTChsPT5sLm1hcChjPT57bGV0IHU9Yy5wb2ludHNbMF0/LndhbGxUaW1lO3JldHVybnsuLi5jLHBvaW50czpjLnBvaW50cy5tYXAoZD0+KHsuLi5kLHJlbGF0aXZlVGltZUluTXM6ZC53YWxsVGltZS11fSkpfX0pKSxmcih0aGlzLnN0b3JlLnNlbGVjdCh0ZCkpLEwoKFtsLGNdKT0+bC5tYXAodT0+KHsuLi51LHBvaW50czp1LnBvaW50cy5tYXAoZD0+e2xldCBwO3N3aXRjaChjKXtjYXNlIEppLlJFTEFUSVZFOnA9ZC5yZWxhdGl2ZVRpbWVJbk1zO2JyZWFrO2Nhc2UgSmkuV0FMTF9USU1FOnA9ZC53YWxsVGltZTticmVhaztkZWZhdWx0OnA9ZC5zdGVwfXJldHVybnsuLi5kLHg6cH19KX0pKSksTWEoMSkpO0x0KFthLHRoaXMubGluZUNoYXJ0Wm9vbSRdKS5zdWJzY3JpYmUoKFtsLGNdKT0+e2xldCB1PWwubWFwKCh7cG9pbnRzOm19KT0+bS5tYXAoKHt4Onh9KT0+eCkpLmZsYXQoKSxkPTA9PT11Lmxlbmd0aD9rRzpNYXRoLm1pbiguLi51KSxwPTA9PT11Lmxlbmd0aD9GRzpNYXRoLm1heCguLi51KSxoPU1hdGgubWF4KGQsYy5taW5TdGVwKSxmPU1hdGgubWluKHAsYy5tYXhTdGVwKTt0aGlzLm1pbk1heFN0ZXBzJC5uZXh0KHttaW5TdGVwOmgsbWF4U3RlcDpmfSl9KSx0aGlzLmRhdGFTZXJpZXMkPWEucGlwZShmcih0aGlzLnN0b3JlLnNlbGVjdChvcCkpLHVpKChbbCxjXSk9PntsZXQgdT1sLm1hcCgoe3Nlcmllc0lkOmQscG9pbnRzOnB9KT0+KHtpZDpkLHBvaW50czpwfSkpO3JldHVybiBjPD0wP1h0KHUpOkVvKGFzeW5jIGZ1bmN0aW9uKG4sdCl7TnVtYmVyLmlzRmluaXRlKHQpfHwodD0wKSx0PU1hdGgubWF4KDAsTWF0aC5taW4odCwxKSk7bGV0IGU9W107Zm9yKGxldCBpIG9mIG4pe2xldCByPWkucG9pbnRzWzBdPy55O2lmKGkucG9pbnRzLmV2ZXJ5KGM9PmMueT09cikpe2UucHVzaChpKTtjb250aW51ZX1sZXQgcz1pLnBvaW50cy5sZW5ndGg+MD8wOk5hTixhPTAsbD1pLnBvaW50cy5tYXAoYz0+e2xldCB1PWMueTtpZihOdW1iZXIuaXNGaW5pdGUodSkpe3M9cyp0KygxLXQpKnUsYSsrO2xldCBkPTE9PT10PzE6MS1NYXRoLnBvdyh0LGEpO3JldHVybnt4OmMueCx5OnMvZH19cmV0dXJue3g6Yy54LHk6dX19KTtlLnB1c2goe2lkOmkuaWQscG9pbnRzOmx9KX1yZXR1cm4gZX0odSxjKSkucGlwZShMKGQ9PntsZXQgcD11Lm1hcCgoaCxmKT0+KHtpZDpzKGguaWQpLHBvaW50czpkW2ZdLnBvaW50cy5tYXAoKHt5Om19LHgpPT4oey4uLmgucG9pbnRzW3hdLHk6bX0pKX0pKTtyZXR1cm5bLi4udSwuLi5wXX0pKX0pLHpuKFtdKSksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD1MdChbdGhpcy5taW5NYXhTdGVwcyQsdGhpcy5zdG9yZS5zZWxlY3QoWW0pLHRoaXMuc3RvcmUuc2VsZWN0KFhtKSx0aGlzLnN0b3JlLnNlbGVjdCh0ZCldKS5waXBlKEwoKFt7bWluU3RlcDpsLG1heFN0ZXA6Y30sdSxkLHBdKT0+dSYmcD09PUppLlNURVAmJmQ/UWgoZCxsLGMpOm51bGwpKSx0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24kPUx0KFt0aGlzLnN0ZXBTZWxlY3RvclRpbWVTZWxlY3Rpb24kLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiQsdGhpcy5zdG9yZS5zZWxlY3QoWW0pXSkucGlwZShMKChbbCxjLHVdKT0+dSYmYz97c3RhcnQ6e3N0ZXA6Yy5zdGFydFN0ZXB9LGVuZDpudWxsPT09Yy5lbmRTdGVwP251bGw6e3N0ZXA6Yy5lbmRTdGVwfX06bCkpLHRoaXMuY29sdW1uSGVhZGVycyQ9THQoW3RoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQsdGhpcy5zdG9yZS5zZWxlY3QoQkkpLHRoaXMuc3RvcmUuc2VsZWN0KFZJKV0pLnBpcGUoTCgoW2wsYyx1XSk9Pm51bGw9PT1sfHxudWxsPT09bC5lbmQ/Yzp1KSksdGhpcy5jaGFydE1ldGFkYXRhTWFwJD1hLnBpcGUodWkobD0+THQobC5tYXAoYz0+dGhpcy5nZXRSdW5EaXNwbGF5TmFtZUFuZEFsaWFzKGMucnVuSWQpLnBpcGUoTCh1PT4oey4uLmMsLi4udX0pKSkpKSksZnIodGhpcy5zdG9yZS5zZWxlY3Qob28pLHRoaXMuc3RvcmUuc2VsZWN0KG5jKSx0aGlzLnN0b3JlLnNlbGVjdChvcCkpLEhyKDApLEwoKFtsLGMsdSxkXSk9PntsZXQgcD17fSxoPWQ+MDtmb3IobGV0IGYgb2YgbCl7bGV0e3Nlcmllc0lkOm0scnVuSWQ6eCxkaXNwbGF5TmFtZTpnLGFsaWFzOmIscGFydGl0aW9uSW5kZXg6RCxwYXJ0aXRpb25TaXplOlR9PWY7cFttXT17dHlwZTpzeS5PUklHSU5BTCxpZDptLGFsaWFzOmIsZGlzcGxheU5hbWU6VD4xP2Ake2d9OiAke0R9YDpnLHZpc2libGU6Qm9vbGVhbihjJiZjLmdldCh4KSksY29sb3I6dVt4XT8/IiNmZmYiLGF1eDohMSxvcGFjaXR5OjF9fWlmKCFoKXJldHVybiBwO2ZvcihsZXRbZixtXW9mIE9iamVjdC5lbnRyaWVzKHApKXtsZXQgeD1zKGYpO3BbeF09ey4uLm0saWQ6eCx0eXBlOnN5LkRFUklWRUQsYXV4OiExLG9yaWdpbmFsU2VyaWVzSWQ6Zn0sbS5hdXg9ITAsbS5vcGFjaXR5PS4yNX1yZXR1cm4gcH0pLHpuKHt9KSksdGhpcy5sb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KGJoLHRoaXMuY2FyZElkKSx0aGlzLnRhZyQ9aS5waXBlKEwobD0+bC50YWcpKSx0aGlzLnRpdGxlJD10aGlzLnRhZyQucGlwZShMKGw9Pmx5KGwsdGhpcy5ncm91cE5hbWUpKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoQ2gsdGhpcy5jYXJkSWQpLHRoaXMuc3RvcmUuc2VsZWN0KGZ2KS5waXBlKFd0KHRoaXMubWluTWF4U3RlcHMkKSxzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKFtsLGNdKT0+e2w/bnVsbCE9PXRoaXMuc3RlcFNlbGVjdG9yVGltZVNlbGVjdGlvbiQuZ2V0VmFsdWUoKXx8dGhpcy5zdGVwU2VsZWN0b3JUaW1lU2VsZWN0aW9uJC5uZXh0KHtzdGFydDp7c3RlcDpjLm1pblN0ZXB9LGVuZDpudWxsfSk6dGhpcy5zdGVwU2VsZWN0b3JUaW1lU2VsZWN0aW9uJC5uZXh0KG51bGwpfSksdGhpcy5zdG9yZS5zZWxlY3QobXYpLnBpcGUoV3QodGhpcy5taW5NYXhTdGVwcyQpLHN0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoW2wsY10pPT57bGV0IHU9dGhpcy5zdGVwU2VsZWN0b3JUaW1lU2VsZWN0aW9uJC5nZXRWYWx1ZSgpO251bGwhPT11P2x8fG51bGw9PT11LmVuZD9sJiZudWxsPT09dS5lbmQmJnRoaXMuc3RlcFNlbGVjdG9yVGltZVNlbGVjdGlvbiQubmV4dCh7c3RhcnQ6dS5zdGFydCxlbmQ6e3N0ZXA6Yy5tYXhTdGVwfX0pOnRoaXMuc3RlcFNlbGVjdG9yVGltZVNlbGVjdGlvbiQubmV4dCh7c3RhcnQ6dS5zdGFydCxlbmQ6bnVsbH0pOmwmJnRoaXMuc3RlcFNlbGVjdG9yVGltZVNlbGVjdGlvbiQubmV4dCh7c3RhcnQ6e3N0ZXA6Yy5taW5TdGVwfSxlbmQ6bD97c3RlcDpjLm1heFN0ZXB9Om51bGx9KX0pLHRoaXMubWluTWF4U3RlcHMkLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh7bWluU3RlcDpsLG1heFN0ZXA6Y30pPT57aWYoIXRoaXMuc3RlcFNlbGVjdG9yVGltZVNlbGVjdGlvbiQuZ2V0VmFsdWUoKSlyZXR1cm47bGV0IHU9dGhpcy5zdGVwU2VsZWN0b3JUaW1lU2VsZWN0aW9uJC5nZXRWYWx1ZSgpPy5zdGFydC5zdGVwLGQ9dGhpcy5zdGVwU2VsZWN0b3JUaW1lU2VsZWN0aW9uJC5nZXRWYWx1ZSgpPy5lbmQ/LnN0ZXAscD1mdW5jdGlvbihuLHQsZSl7bGV0IGk9UWgobix0LGUpO3JldHVybntzdGFydDp7c3RlcDppLnN0YXJ0U3RlcH0sZW5kOm51bGw9PT1pLmVuZFN0ZXA/bnVsbDp7c3RlcDppLmVuZFN0ZXB9fX0oe3N0YXJ0OntzdGVwOnU/P2x9LGVuZDp0aGlzLnN0ZXBTZWxlY3RvclRpbWVTZWxlY3Rpb24kLmdldFZhbHVlKCk/LmVuZD97c3RlcDpkPz9jfTpudWxsfSxsLGMpO3RoaXMuc3RlcFNlbGVjdG9yVGltZVNlbGVjdGlvbiQubmV4dChwKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1nZXRSdW5EaXNwbGF5TmFtZUFuZEFsaWFzKGUpe3JldHVybiBMdChbdGhpcy5zdG9yZS5zZWxlY3QoR0kse3J1bklkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChZdSksdGhpcy5zdG9yZS5zZWxlY3QoV0kse3J1bklkOmV9KV0pLnBpcGUoTCgoW2kscixvXSk9PntsZXQgcz1udWxsIT09aT9yW2ldPz9udWxsOm51bGw7cmV0dXJue2Rpc3BsYXlOYW1lOm98fHM/bz8ubmFtZT8/Ii4uLiI6ZSxhbGlhczpzfX0pKX1zdGVwU2VyaWVzVG9MaW5lU2VyaWVzKGUsaSl7bGV0IHI9aT09PUppLlNURVA7cmV0dXJuIGUubWFwKG89PntsZXQgcz0xZTMqby53YWxsVGltZTtyZXR1cm57Li4ubyx4OnI/by5zdGVwOnMseTpvLnZhbHVlLHdhbGxUaW1lOnMscmVsYXRpdmVUaW1lSW5NczowfX0pfW9uRGF0YVRhYmxlU29ydGluZyhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHlvZShlKSl9b25UaW1lU2VsZWN0aW9uQ2hhbmdlZChlKXtsZXR7bWluU3RlcDppLG1heFN0ZXA6cn09dGhpcy5taW5NYXhTdGVwcyQuZ2V0VmFsdWUoKSx7c3RhcnRTdGVwOm8sZW5kU3RlcDpzfT1RaChlLnRpbWVTZWxlY3Rpb24saSxyKSxhPXtzdGFydDp7c3RlcDpvfSxlbmQ6cz97c3RlcDpzfTpudWxsfTt0aGlzLnN0b3JlLmRpc3BhdGNoKFloKGUpKSx0aGlzLnN0ZXBTZWxlY3RvclRpbWVTZWxlY3Rpb24kLm5leHQoYSl9b25TdGVwU2VsZWN0b3JUb2dnbGVkKGUpe3RoaXMuc3RlcFNlbGVjdG9yVGltZVNlbGVjdGlvbiQuZ2V0VmFsdWUoKSYmdGhpcy5zdGVwU2VsZWN0b3JUaW1lU2VsZWN0aW9uJC5uZXh0KG51bGwpLHRoaXMuc3RvcmUuZGlzcGF0Y2goWGgoe2FmZm9yZGFuY2U6ZX0pKX1vbkxpbmVDaGFydFpvb20oZSl7bGV0IGk9ZS54LHI9e21pblN0ZXA6TWF0aC5jZWlsKE1hdGgubWluKC4uLmkpKSxtYXhTdGVwOk1hdGguZmxvb3IoTWF0aC5tYXgoLi4uaSkpfTt0aGlzLmxpbmVDaGFydFpvb20kLm5leHQocil9cmVvcmRlckNvbHVtbkhlYWRlcnMoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChkUih7bmV3T3JkZXI6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkIl1dLGlucHV0czp7RGF0YURvd25sb2FkQ29tcG9uZW50OiJEYXRhRG93bmxvYWRDb21wb25lbnQiLGNhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSJ9LG91dHB1dHM6e2Z1bGxXaWR0aENoYW5nZWQ6ImZ1bGxXaWR0aENoYW5nZWQiLGZ1bGxIZWlnaHRDaGFuZ2VkOiJmdWxsSGVpZ2h0Q2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoyMCx2YXJzOjYxLGNvbnN0czpbWyJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIiwzLCJjYXJkSWQiLCJjaGFydE1ldGFkYXRhTWFwIiwiRGF0YURvd25sb2FkQ29tcG9uZW50IiwiZGF0YVNlcmllcyIsImlnbm9yZU91dGxpZXJzIiwiaXNDYXJkVmlzaWJsZSIsImlzUGlubmVkIiwibG9hZFN0YXRlIiwic2hvd0Z1bGxTaXplIiwic21vb3RoaW5nRW5hYmxlZCIsInRhZyIsInRpdGxlIiwidG9vbHRpcFNvcnQiLCJ4QXhpc1R5cGUiLCJ4U2NhbGVUeXBlIiwidXNlRGFya01vZGUiLCJsaW5rZWRUaW1lU2VsZWN0aW9uIiwic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsImZvcmNlU3ZnIiwiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLCJtaW5NYXhTdGVwIiwiY29sdW1uSGVhZGVycyIsIm9uRnVsbFNpemVUb2dnbGUiLCJvblBpbkNsaWNrZWQiLCJvblZpc2liaWxpdHlDaGFuZ2UiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25TdGVwU2VsZWN0b3JUb2dnbGVkIiwib25EYXRhVGFibGVTb3J0aW5nIiwib25MaW5lQ2hhcnRab29tIiwicmVvcmRlckNvbHVtbkhlYWRlcnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsInNjYWxhci1jYXJkLWNvbXBvbmVudCIsMCksUCgib25GdWxsU2l6ZVRvZ2dsZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlKCl9KSgib25QaW5DbGlja2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5waW5TdGF0ZUNoYW5nZWQuZW1pdChvKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pKCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkKG8pfSkoIm9uU3RlcFNlbGVjdG9yVG9nZ2xlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TdGVwU2VsZWN0b3JUb2dnbGVkKG8pfSkoIm9uRGF0YVRhYmxlU29ydGluZyIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25EYXRhVGFibGVTb3J0aW5nKG8pfSkoIm9uTGluZUNoYXJ0Wm9vbSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25MaW5lQ2hhcnRab29tKG8pfSkoInJlb3JkZXJDb2x1bW5IZWFkZXJzIixmdW5jdGlvbihvKXtyZXR1cm4gaS5yZW9yZGVyQ29sdW1uSGVhZGVycyhvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLEIoNCwiYXN5bmMiKSxCKDUsImFzeW5jIiksQig2LCJhc3luYyIpLEIoNywiYXN5bmMiKSxCKDgsImFzeW5jIiksQig5LCJhc3luYyIpLEIoMTAsImFzeW5jIiksQigxMSwiYXN5bmMiKSxCKDEyLCJhc3luYyIpLEIoMTMsImFzeW5jIiksQigxNCwiYXN5bmMiKSxCKDE1LCJhc3luYyIpLEIoMTYsImFzeW5jIiksQigxNywiYXN5bmMiKSxCKDE4LCJhc3luYyIpLEIoMTksImFzeW5jIiksdigpKSwyJmUmJnkoImNhcmRJZCIsaS5jYXJkSWQpKCJjaGFydE1ldGFkYXRhTWFwIixVKDEsMjMsaS5jaGFydE1ldGFkYXRhTWFwJCkpKCJEYXRhRG93bmxvYWRDb21wb25lbnQiLGkuRGF0YURvd25sb2FkQ29tcG9uZW50KSgiZGF0YVNlcmllcyIsVSgyLDI1LGkuZGF0YVNlcmllcyQpKSgiaWdub3JlT3V0bGllcnMiLFUoMywyNyxpLmlnbm9yZU91dGxpZXJzJCkpKCJpc0NhcmRWaXNpYmxlIixpLmlzVmlzaWJsZSkoImlzUGlubmVkIixVKDQsMjksaS5pc1Bpbm5lZCQpKSgibG9hZFN0YXRlIixVKDUsMzEsaS5sb2FkU3RhdGUkKSkoInNob3dGdWxsU2l6ZSIsaS5zaG93RnVsbFNpemUpKCJzbW9vdGhpbmdFbmFibGVkIixVKDYsMzMsaS5zbW9vdGhpbmdFbmFibGVkJCkpKCJ0YWciLFUoNywzNSxpLnRhZyQpKSgidGl0bGUiLFUoOCwzNyxpLnRpdGxlJCkpKCJ0b29sdGlwU29ydCIsVSg5LDM5LGkudG9vbHRpcFNvcnQkKSkoInhBeGlzVHlwZSIsVSgxMCw0MSxpLnhBeGlzVHlwZSQpKSgieFNjYWxlVHlwZSIsVSgxMSw0MyxpLnhTY2FsZVR5cGUkKSkoInVzZURhcmtNb2RlIixVKDEyLDQ1LGkudXNlRGFya01vZGUkKSkoImxpbmtlZFRpbWVTZWxlY3Rpb24iLFUoMTMsNDcsaS5saW5rZWRUaW1lU2VsZWN0aW9uJCkpKCJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIixVKDE0LDQ5LGkuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQpKSgiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIixVKDE1LDUxLGkuaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkJCkpKCJmb3JjZVN2ZyIsVSgxNiw1MyxpLmZvcmNlU3ZnJCkpKCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsVSgxNyw1NSxpLmNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkJCkpKCJtaW5NYXhTdGVwIixVKDE4LDU3LGkubWluTWF4U3RlcHMkKSkoImNvbHVtbkhlYWRlcnMiLFUoMTksNTksaS5jb2x1bW5IZWFkZXJzJCkpfSxkZXBlbmRlbmNpZXM6W2F5LGdwZSxHZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBRWWUobix0LGUpe2xldCBpPVtdLHtsZWZ0OnIscmlnaHQ6b309dCxzPShvLXIpL2UsYT0wLGw9MDtmb3IobGV0IGM9MDtjPGU7YysrKXtsZXQgdT1yK2MqcyxkPXUrcyxwPWM9PT1lLTEsaD1sO2ZvcihsPTA7YTxuLmxlbmd0aDspe2xldCBmPW5bYV0sbT1LWWUoZix1LGQsIXApO2lmKGgrPW0uY3VycixsKz1tLm5leHQsZi54K2YuZHg+ZClicmVhazthKyt9aS5wdXNoKHt4OnUsZHg6cyx5Omh9KX1yZXR1cm4gaX1mdW5jdGlvbiBLWWUobix0LGUsaSl7bGV0IHI9bi54LG89bi54K24uZHg7aWYocj5lfHxvPHQpcmV0dXJue2N1cnI6MCxuZXh0OjB9O2lmKDA9PT1uLmR4KXJldHVybiBpJiZvPj1lP3tjdXJyOjAsbmV4dDpuLnl9OntjdXJyOm4ueSxuZXh0OjB9O2xldCBzPU1hdGgubWluKG8sZSktTWF0aC5tYXgocix0KTtyZXR1cm57Y3VycjpuLnkqcy9uLmR4LG5leHQ6MH19dmFyICRZZT14bygiLjJ+cyIpLGVYZT14bygiLjR+ciIpLHRYZT14bygiLjJ+ZSIpO2Z1bmN0aW9uIHlwZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlND8kWWUobik6dDwuMDAxP3RYZShuKTplWGUobil9dmFyIG5YZT1bIm1haW4iXSxpWGU9WyJ4QXhpcyJdLHJYZT1bInlBeGlzIl0sb1hlPVsiY29udGVudCJdLHNYZT1bImhpc3RvZ3JhbXMiXTtmdW5jdGlvbiBhWGUobix0KXtpZigxJm4mJihJbigpLF8oMCwiZyIpKDEsInRleHQiKSxBKDIpLHYoKSgpKSwyJm4pe2xldCBlPVMoKTtQdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4KGUudG9vbHRpcERhdGEueEF4aXMucG9zaXRpb24sOSkpLEMoMikseXQoZS50b29sdGlwRGF0YS54QXhpcy5sYWJlbCl9fWZ1bmN0aW9uIGxYZShuLHQpe2lmKDEmbiYmKEluKCksXygwLCJnIikoMSwidGV4dCIpLEEoMiksdigpKCkpLDImbil7bGV0IGU9UygpO1B0KCJ0cmFuc2Zvcm0iLGUuZ2V0R3JvdXBUcmFuc2Zvcm0oZS50b29sdGlwRGF0YS5jbG9zZXN0RGF0dW0pKSxDKDEpLHplKCJ5IixlLnRvb2x0aXBEYXRhLnlBeGlzLnBvc2l0aW9uKSxDKDEpLGplKCIgIixlLnRvb2x0aXBEYXRhLnlBeGlzLmxhYmVsLCIgIil9fWZ1bmN0aW9uIGNYZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtJbigpLEpzKCksc24oMCksXygxLCJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciIsMTYpLFAoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub25MaW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksdigpLGFuKCl9aWYoMiZuKXtsZXQgZT1TKCk7QygxKSx5KCJ0aW1lU2VsZWN0aW9uIixlLnRpbWVTZWxlY3Rpb24pKCJzdGVwcyIsZS5nZXRTdGVwcygpKSgidGVtcG9yYWxTY2FsZSIsZS5zY2FsZXMudGVtcG9yYWxTY2FsZSl9fWZ1bmN0aW9uIHVYZShuLHQpe2lmKDEmbiYmKEluKCksXygwLCJnIiksTygxLCJsaW5lIiwxNyksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O1B0KCJ0cmFuc2Zvcm0iLFMoKS5nZXRDc3NUcmFuc2xhdGVQeCgwLGUpKX19ZnVuY3Rpb24gZFhlKG4sdCl7MSZuJiYoSW4oKSxPKDAsImxpbmUiLDIxKSl9ZnVuY3Rpb24gcFhlKG4sdCl7aWYoMSZuJiYoSW4oKSxPKDAsImNpcmNsZSIsMjIpKSwyJm4pe2xldCBlPVMoKS4kaW1wbGljaXQsaT1TKCk7UHQoInRyYW5zZm9ybSIsaS5nZXRDc3NUcmFuc2xhdGVQeChpLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChpLmdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZShlLGkudG9vbHRpcERhdGEueFBvc2l0aW9uSW5CaW5Db29yZCkpLngsaS5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoaS5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUoZSxpLnRvb2x0aXBEYXRhLnhQb3NpdGlvbkluQmluQ29vcmQpKS55KSl9fWZ1bmN0aW9uIGhYZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtJbigpLF8oMCwiZyIsMTgpLFAoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKHIpe2xldCBzPW9lKGUpLiRpbXBsaWNpdDtyZXR1cm4gc2UoUygpLnVwZGF0ZUNvbG9yT25Ib3ZlcihyLHMsITApKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbihyKXtsZXQgcz1vZShlKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoKS51cGRhdGVDb2xvck9uSG92ZXIocixzLCExKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89b2UoZSkuJGltcGxpY2l0O3JldHVybiBzZShTKCkub25MaW5rZWRUaW1lUmFuZ2VDaGFuZ2VkKG8pKX0pLEUoMSxkWGUsMSwwLCJsaW5lIiwxOSksTygyLCJwYXRoIiksRSgzLHBYZSwxLDIsImNpcmNsZSIsMjApLHYoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9UygpO1B0KCJ0cmFuc2Zvcm0iLGkuZ2V0R3JvdXBUcmFuc2Zvcm0oZSkpKCJjb2xvciIsaS5nZXRIaXN0b2dyYW1GaWxsKGUpKSxldCgiaGlzdG9ncmFtIiwhMCkoIm5vLWNvbG9yIiwhaS5pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoZSkpLEMoMSkseSgibmdJZiIsaS5tb2RlPT09aS5IaXN0b2dyYW1Nb2RlLk9GRlNFVCksQygxKSx6ZSgiZCIsaS5nZXRIaXN0b2dyYW1QYXRoKGUpKSxDKDEpLHkoIm5nSWYiLGkudG9vbHRpcERhdGEpfX1mdW5jdGlvbiBmWGUobix0KXtpZigxJm4mJihJbigpLE8oMCwiY2lyY2xlIiwyMikpLDImbil7bGV0IGU9UygyKTt6ZSgiY3giLGUuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUudG9vbHRpcERhdGEuY2xvc2VzdEJpbikueCkoImN5IixlLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLnkpfX1mdW5jdGlvbiBtWGUobix0KXtpZigxJm4mJihJbigpLF8oMCwiZyIsNCkoMSwiZyIpLE8oMiwicGF0aCIpLEUoMyxmWGUsMSwyLCJjaXJjbGUiLDIzKSx2KCksXyg0LCJnIiwyNCkoNSwidGV4dCIsMjUpLEEoNiksdigpKCkoKSksMiZuKXtsZXQgZT1TKCk7QygxKSxQdCgidHJhbnNmb3JtIixlLmdldEdyb3VwVHJhbnNmb3JtKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSksQygxKSx6ZSgiZCIsZS5nZXRIaXN0b2dyYW1QYXRoKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSksQygxKSx5KCJuZ0lmIixlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLEMoMSksUHQoInRyYW5zZm9ybSIsZS5nZXRDc3NUcmFuc2xhdGVQeChlLnRvb2x0aXBEYXRhLnZhbHVlLnBvc2l0aW9uLngsZS50b29sdGlwRGF0YS52YWx1ZS5wb3NpdGlvbi55KSksQygyKSx5dChlLnRvb2x0aXBEYXRhLnZhbHVlLmxhYmVsKX19dmFyIFdrPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMubW9kZT16ci5PRkZTRVQsdGhpcy50aW1lUHJvcGVydHk9Um8uU1RFUCx0aGlzLnRpbWVTZWxlY3Rpb249bnVsbCx0aGlzLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ9bmV3IEcsdGhpcy5vbkxpbmtlZFRpbWVUb2dnbGVkPW5ldyBHLHRoaXMuSGlzdG9ncmFtTW9kZT16cix0aGlzLlRpbWVQcm9wZXJ0eT1Sbyx0aGlzLnRvb2x0aXBEYXRhPW51bGwsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBrZSx0aGlzLmxheW91dD17aGlzdG9ncmFtSGVpZ2h0OjAsY29udGVudENsaWVudFJlY3Q6e2hlaWdodDowLHdpZHRoOjB9fSx0aGlzLnNjYWxlcz1udWxsLHRoaXMuZm9ybWF0dGVycz17YmluTnVtYmVyOnlwZSxjb3VudDp4bygiLjNuIiksd2FsbFRpbWU6SXkoIiVtLyVkICVYIiksc3RlcDp4bygiLjBmIikscmVsYXRpdmU6aT0+eG8oIi4xciIpKGkvMzZlNSkrImgifSx0aGlzLmRvbVZpc2libGU9ITF9bmdPbkNoYW5nZXMoKXt0aGlzLnVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe19pKHRoaXMubWFpbi5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+dGhpcy5vbk1vdXNlTW92ZShlKSl9Z2V0Q3NzVHJhbnNsYXRlUHgoZSxpKXtyZXR1cm5gdHJhbnNsYXRlKCR7ZX1weCwgJHtpfXB4KWB9Z2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKGUsaSl7aWYoIWUuYmlucy5sZW5ndGgpcmV0dXJue3g6MCxkeDowLHk6MH07bGV0IHI9ZS5iaW5zWzBdLG89ZS5iaW5zLnNsaWNlKC0xKVswXTtyZXR1cm4gaTxyLng/cjppPj1vLngrby5keD9vOmUuYmlucy5maW5kKGE9PmEueDw9aSYmaTxhLngrYS5keCl9Z2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUpe3JldHVybiB0aGlzLnNjYWxlcz97eDp0aGlzLnNjYWxlcy5iaW5TY2FsZSh4RShlKSkseTp0aGlzLnNjYWxlcy5jb3VudFNjYWxlKGUueSl9Ont4OjAseTowfX1nZXRIaXN0b2dyYW1QYXRoKGUpe2lmKCF0aGlzLnNjYWxlc3x8IWUuYmlucy5sZW5ndGgpcmV0dXJuIiI7bGV0IGk9dGhpcy5zY2FsZXMuYmluU2NhbGUscj10aGlzLnNjYWxlcy5jb3VudFNjYWxlLG89ZS5iaW5zWzBdLHM9ZS5iaW5zLnNsaWNlKC0xKVswXSxhPVtgTSR7aSh4RShvKSl9LCR7cigwKX1gXTtmb3IobGV0IGwgb2YgZS5iaW5zKWEucHVzaChgTCR7aSh4RShsKSl9LCR7cihsLnkpfWApO3JldHVybiBhLnB1c2goYEwke2koeEUocykpfSwke3IoMCl9YCksYS5qb2luKCIiKX10cmFja0J5V2FsbFRpbWUoZSl7cmV0dXJuIGUud2FsbFRpbWV9Z2V0R3JvdXBUcmFuc2Zvcm0oZSl7cmV0dXJuIHRoaXMuc2NhbGVzJiZ0aGlzLm1vZGUhPT16ci5PVkVSTEFZP3RoaXMuZ2V0Q3NzVHJhbnNsYXRlUHgoMCx0aGlzLnNjYWxlcy50ZW1wb3JhbFNjYWxlKHRoaXMuZ2V0VGltZVZhbHVlKGUpKSk6IiJ9Z2V0U3RlcHMoKXtyZXR1cm4gdGhpcy5kYXRhLm1hcChlPT5lLnN0ZXApfWlzVGltZVNlbGVjdGlvbkVuYWJsZWQoZSl7cmV0dXJuIEJvb2xlYW4odGhpcy5tb2RlPT09enIuT0ZGU0VUJiZ0aGlzLnRpbWVQcm9wZXJ0eT09PVJvLlNURVAmJnRoaXMuc2NhbGVzJiZlKX1pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoZSl7cmV0dXJuIXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pfHwobnVsbD09PXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA9PT1lLnN0ZXA6dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA8PWUuc3RlcCYmdGhpcy50aW1lU2VsZWN0aW9uLmVuZC5zdGVwPj1lLnN0ZXApfWdldEhpc3RvZ3JhbUZpbGwoZSl7cmV0dXJuIHRoaXMuc2NhbGVzP3RoaXMuc2NhbGVzLmQzQ29sb3JTY2FsZSh0aGlzLmdldFRpbWVWYWx1ZShlKSk6IiJ9dXBkYXRlQ29sb3JPbkhvdmVyKGUsaSxyKXshdGhpcy5pc1RpbWVTZWxlY3Rpb25FbmFibGVkKHRoaXMudGltZVNlbGVjdGlvbil8fHRoaXMuaXNEYXR1bUluVGltZVNlbGVjdGlvblJhbmdlKGkpfHwocj9lLnRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJuby1jb2xvciIpOmUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoIm5vLWNvbG9yIikpfWdldEdyaWRUaWNrWUxvY3MoKXtpZighdGhpcy5zY2FsZXN8fHRoaXMubW9kZT09PXpyLk9GRlNFVClyZXR1cm5bXTtsZXQgZT10aGlzLnNjYWxlcy5jb3VudFNjYWxlO3JldHVybiBlLnRpY2tzKCkubWFwKGk9PmUoaSkpfW9uUmVzaXplKCl7dGhpcy51cGRhdGVDbGllbnRSZWN0cygpLHRoaXMudXBkYXRlQ2hhcnRJZlZpc2libGUoKX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6ZX0pe3RoaXMuZG9tVmlzaWJsZT1lLGUmJih0aGlzLnVwZGF0ZUNsaWVudFJlY3RzKCksdGhpcy51cGRhdGVDaGFydElmVmlzaWJsZSgpKX1vbkxpbmtlZFRpbWVSYW5nZUNoYW5nZWQoZSl7aWYoIXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pKXJldHVybjtsZXQgaT10aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCxyPXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/LnN0ZXAsbz1lLnN0ZXA8aT9lLnN0ZXA6aSxzPXI7cz12b2lkIDA9PT1zP2Uuc3RlcD5pP2Uuc3RlcDppOmUuc3RlcD5zP2Uuc3RlcDpzLChvIT09aXx8cyE9PXIpJiZvIT09cyYmdGhpcy5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246e3N0YXJ0OntzdGVwOm99LGVuZDp7c3RlcDpzfX0sYWZmb3JkYW5jZTpjcy5ISVNUT0dSQU1fQ0xJQ0tfVE9fUkFOR0V9KX1nZXRUaW1lVmFsdWUoZSl7c3dpdGNoKHRoaXMudGltZVByb3BlcnR5KXtjYXNlIFJvLldBTExfVElNRTpyZXR1cm4gZS53YWxsVGltZTtjYXNlIFJvLlNURVA6cmV0dXJuIGUuc3RlcDtjYXNlIFJvLlJFTEFUSVZFOnJldHVybiBlLndhbGxUaW1lLXRoaXMuZGF0YVswXS53YWxsVGltZX19dXBkYXRlQ2xpZW50UmVjdHMoKXt0aGlzLmNvbnRlbnQmJih0aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdD10aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHQ9dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3QuaGVpZ2h0LzIuNSl9dXBkYXRlQ2hhcnRJZlZpc2libGUoKXshdGhpcy5kb21WaXNpYmxlfHwodGhpcy5zY2FsZXM9dGhpcy5jb21wdXRlU2NhbGVzKHRoaXMuZGF0YSksdGhpcy5yZW5kZXJYQXhpcygpLHRoaXMucmVuZGVyWUF4aXMoKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSl9Y29tcHV0ZVNjYWxlcyhlKXtsZXR7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3Qse21pbjpvLG1heDpzfT1icGUoZSxnPT5mdW5jdGlvbihuLHQpe3JldHVybiBuLnJlZHVjZSgoZSxpKT0+TWF0aC5taW4oZSxpLngpLDEvMCl9KGcuYmlucyksZz0+TkcoZy5iaW5zLCh7eDpiLGR4OkR9KT0+YitEKSksYT1ORyhlLGc9Pk5HKGcuYmlucywoe3k6Yn0pPT5iKSksbD1RbygpLmRvbWFpbihbbyxzXSkubmljZSgpLGM9dGhpcy5tb2RlIT09enIuT1ZFUkxBWSYmdGhpcy50aW1lUHJvcGVydHk9PVJvLldBTExfVElNRT9SZygpOlFvKCksdT1lLm1hcChnPT50aGlzLmdldFRpbWVWYWx1ZShnKSkse21pbjpkLG1heDpwfT1icGUodSxnPT5nKSxoPVtkLHBdO2MuZG9tYWluKGgpO2xldCBmPVFvKCk7Zi5kb21haW4oWzAsYV0pO2xldCBtPXlnKHRoaXMuY29sb3J8fCIjMDAwIikseD1RbygpO3JldHVybiB4LmRvbWFpbihoKSxsLnJhbmdlKFswLGldKSx4LnJhbmdlKFttLmJyaWdodGVyKCksbS5kYXJrZXIoKV0pLHguaW50ZXJwb2xhdGUocHopLHRoaXMubW9kZT09PXpyLk9WRVJMQVk/KGMucmFuZ2UoW3Iscl0pLGYucmFuZ2UoW3IsMF0pKTooYy5yYW5nZShbci0odGhpcy5tb2RlPT09enIuT0ZGU0VUP3ItdGhpcy5sYXlvdXQuaGlzdG9ncmFtSGVpZ2h0OjApLHJdKSxmLnJhbmdlKFswLC10aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHRdKSkse2JpblNjYWxlOmwsZDNDb2xvclNjYWxlOngsY291bnRTY2FsZTpmLHRlbXBvcmFsU2NhbGU6Y319cmVuZGVyWEF4aXMoKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldHt3aWR0aDplfT10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdCxpPWp3KHRoaXMuc2NhbGVzLmJpblNjYWxlKS50aWNrcyhNYXRoLm1heCgyLGUvMjApKTtpLnRpY2tGb3JtYXQodGhpcy5mb3JtYXR0ZXJzLmJpbk51bWJlciksaShibyh0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQpKX1nZXRZQXhpc0Zvcm1hdHRlcigpe2lmKHRoaXMubW9kZT09PXpyLk9WRVJMQVkpcmV0dXJuIHRoaXMuZm9ybWF0dGVycy5jb3VudDtzd2l0Y2godGhpcy50aW1lUHJvcGVydHkpe2Nhc2UgUm8uV0FMTF9USU1FOnJldHVybiB0aGlzLmZvcm1hdHRlcnMud2FsbFRpbWU7Y2FzZSBSby5TVEVQOnJldHVybiB0aGlzLmZvcm1hdHRlcnMuc3RlcDtjYXNlIFJvLlJFTEFUSVZFOnJldHVybiB0aGlzLmZvcm1hdHRlcnMucmVsYXRpdmU7ZGVmYXVsdDp0aHJvdyBSYW5nZUVycm9yKGBZIGF4aXMgZm9ybWF0dGVyIGZvciAke3RoaXMudGltZVByb3BlcnR5fSBtdXN0IGJlIGltcGxlbWVudGVkYCl9fWdldE1heFRpY2tzKGUpe2xldHtoZWlnaHQ6aX09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3Qscj1pLzE1O2lmKHRoaXMudGltZVByb3BlcnR5PT09Um8uU1RFUCl7bGV0W28sc109ZS5kb21haW4oKSxhPU1hdGgubWF4KHMtbysxLDEpO3JldHVybiBNYXRoLm1pbihhLHIpfXJldHVybiByfXJlbmRlcllBeGlzKCl7aWYoIXRoaXMuc2NhbGVzKXJldHVybjtsZXQgZT10aGlzLm1vZGU9PT16ci5PVkVSTEFZP3RoaXMuc2NhbGVzLmNvdW50U2NhbGU6dGhpcy5zY2FsZXMudGVtcG9yYWxTY2FsZSxpPXRoaXMuZ2V0TWF4VGlja3MoZSkscj16dyhlKS50aWNrcyhNYXRoLm1heCgyLGkpKTtyLnRpY2tGb3JtYXQodGhpcy5nZXRZQXhpc0Zvcm1hdHRlcigpKSxyKGJvKHRoaXMueUF4aXMubmF0aXZlRWxlbWVudCkpfWZpbmRDbG9zZXN0RGF0dW1JbmRleChlKXtsZXQgaT1lLnRhcmdldCxyPWk7Zm9yKDtpJiZpIT09dGhpcy5oaXN0b2dyYW1zLm5hdGl2ZUVsZW1lbnQ7KXI9aSxpPWkucGFyZW50RWxlbWVudDtyZXR1cm4gaT9BcnJheS5mcm9tKGkuY2hpbGRyZW4pLmluZGV4T2Yocik6LTF9b25Nb3VzZU1vdmVGb3JUZXN0T25seShlKXtyZXR1cm4gdGhpcy5vbk1vdXNlTW92ZShlKX1vbk1vdXNlTW92ZShlKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldCBpPWUub2Zmc2V0WCxyPWUub2Zmc2V0WSxvPXRoaXMuZmluZENsb3Nlc3REYXR1bUluZGV4KGUpO2lmKG88MClyZXR1cm47bGV0IHM9dGhpcy5zY2FsZXMuYmluU2NhbGUuaW52ZXJ0KGkpLGE9dGhpcy5kYXRhW29dLGw9dGhpcy5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUoYSxzKTt0aGlzLnRvb2x0aXBEYXRhPXt2YWx1ZTp7cG9zaXRpb246e3g6aSx5OnJ9LGxhYmVsOnRoaXMubW9kZT09PXpyLk9GRlNFVD90aGlzLmZvcm1hdHRlcnMuY291bnQobC55KTpgU3RlcDogJHt0aGlzLmZvcm1hdHRlcnMuc3RlcChhLnN0ZXApfWB9LHhBeGlzOntwb3NpdGlvbjp0aGlzLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChsKS54LGxhYmVsOnRoaXMuZm9ybWF0dGVycy5iaW5OdW1iZXIoeEUobCkpfSx5QXhpczp7cG9zaXRpb246dGhpcy5zY2FsZXMuY291bnRTY2FsZSh0aGlzLm1vZGU9PT16ci5PRkZTRVQ/MDpsLnkpLGxhYmVsOnRoaXMubW9kZT09PXpyLk9GRlNFVD90aGlzLmdldFlBeGlzRm9ybWF0dGVyKCkodGhpcy5nZXRUaW1lVmFsdWUoYSkpOnRoaXMuZm9ybWF0dGVycy5iaW5OdW1iZXIobC55KX0seFBvc2l0aW9uSW5CaW5Db29yZDpzLGNsb3Nlc3REYXR1bTphLGNsb3Nlc3RCaW46bH0sdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0obm4pKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1oaXN0b2dyYW0iXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoblhlLDUpLG90KGlYZSw1KSxvdChyWGUsNSksb3Qob1hlLDUpLG90KHNYZSw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5tYWluPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnhBeGlzPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnlBeGlzPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmNvbnRlbnQ9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuaGlzdG9ncmFtcz1yLmZpcnN0KX19LGlucHV0czp7bW9kZToibW9kZSIsdGltZVByb3BlcnR5OiJ0aW1lUHJvcGVydHkiLGNvbG9yOiJjb2xvciIsZGF0YToiZGF0YSIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiJ9LG91dHB1dHM6e29uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uTGlua2VkVGltZVRvZ2dsZWQ6Im9uTGlua2VkVGltZVRvZ2dsZWQifSxmZWF0dXJlczpbRnRdLGRlY2xzOjIyLHZhcnM6MTUsY29uc3RzOltbImRldGVjdFJlc2l6ZSIsIiIsIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiLDMsIm9uUmVzaXplIiwib25WaXNpYmlsaXR5Q2hhbmdlIl0sWyJtYWluIiwiIl0sWzEsImF4aXMiLCJ4LWF4aXMiXSxbInhBeGlzIiwiIl0sWzEsInRvb2x0aXAiXSxbMywidHJhbnNmb3JtIiw0LCJuZ0lmIl0sWzEsImF4aXMiLCJ5LWF4aXMiXSxbInlBeGlzIiwiIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudCJdLFsiY29udGVudCIsIiJdLFsxLCJncmlkIl0sWzMsInRyYW5zZm9ybSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJoaXN0b2dyYW1zIiwiIl0sWzMsInRyYW5zZm9ybSIsImhpc3RvZ3JhbSIsIm5vLWNvbG9yIiwiY29sb3IiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbImNsYXNzIiwidG9vbHRpcCIsNCwibmdJZiJdLFsxLCJoaXN0b2dyYW0tY2FyZC1mb2IiLDMsInRpbWVTZWxlY3Rpb24iLCJzdGVwcyIsInRlbXBvcmFsU2NhbGUiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdLFsieDIiLCIxMDAlIiwxLCJ0aWNrIl0sWzMsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwiY2xpY2siXSxbImNsYXNzIiwiYmFzZWxpbmUiLCJ4MiIsIjEwMCUiLDQsIm5nSWYiXSxbInIiLCIyIiwzLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbIngyIiwiMTAwJSIsMSwiYmFzZWxpbmUiXSxbInIiLCIyIl0sWyJyIiwiMiIsNCwibmdJZiJdLFsxLCJ2YWx1ZS1sYWJlbCJdLFsieCIsIjMiLCJ5IiwiLTMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCwxKSxQKCJvblJlc2l6ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlc2l6ZSgpfSkoIm9uVmlzaWJpbGl0eUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WaXNpYmlsaXR5Q2hhbmdlKG8pfSksSW4oKSxfKDIsInN2ZyIsMiksTygzLCJnIixudWxsLDMpLF8oNSwiZyIsNCksRSg2LGFYZSwzLDMsImciLDUpLHYoKSgpLEpzKCksXyg3LCJkaXYiLDYpLEluKCksXyg4LCJzdmciKSxPKDksImciLG51bGwsNyksXygxMSwiZyIsNCksRSgxMixsWGUsMyw0LCJnIiw1KSx2KCkoKSxFKDEzLGNYZSwyLDMsIm5nLWNvbnRhaW5lciIsOCksdigpLF8oMTQsInN2ZyIsOSwxMCkoMTYsImciLDExKSxFKDE3LHVYZSwyLDIsImciLDEyKSx2KCksXygxOCwiZyIsbnVsbCwxMyksRSgyMCxoWGUsNCwxMSwiZyIsMTQpLHYoKSxFKDIxLG1YZSw3LDcsImciLDE1KSx2KCkoKSksMiZlJiYoRGEoIm1haW4gIitpLm1vZGUrIiAiK2kudGltZVByb3BlcnR5KSxDKDYpLHkoIm5nSWYiLGkudG9vbHRpcERhdGEpLEMoNSksUHQoInRyYW5zZm9ybSIsaS5nZXRDc3NUcmFuc2xhdGVQeCg5LDApKSxDKDEpLHkoIm5nSWYiLGkudG9vbHRpcERhdGEpLEMoMSkseSgibmdJZiIsaS5pc1RpbWVTZWxlY3Rpb25FbmFibGVkKGkudGltZVNlbGVjdGlvbikpLEMoNCkseSgibmdGb3JPZiIsaS5nZXRHcmlkVGlja1lMb2NzKCkpLEMoMSksZXQoImhpc3RvZ3JhbXMiLCEwKSgibGlua2VkLXRpbWUtc2luZ2xlLXN0ZXAiLGkudGltZVNlbGVjdGlvbiYmIWkudGltZVNlbGVjdGlvbi5lbmQpLEMoMikseSgibmdGb3JPZiIsaS5kYXRhKSgibmdGb3JUcmFja0J5IixpLnRyYWNrQnlXYWxsVGltZSksQygxKSx5KCJuZ0lmIixpLnRvb2x0aXBEYXRhKSl9LHN0eWxlczpbJ1tfbmdob3N0LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfVtfbmdob3N0LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MTBweH0ubWFpbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImNvbnRlbnQgeS1heGlzIiAieC1heGlzIC4iO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgNTBweDtncmlkLXRlbXBsYXRlLXJvd3M6MWZyIDMwcHh9Lm1haW4ud2FsbF90aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDc1cHh9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTBweH0ubGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVdLCAubGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVde2ZpbGw6Y3VycmVudENvbG9yfS5saW5rZWQtdGltZS1mb2JbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTppZGVvZ3JhcGhpYzt0ZXh0LWFuY2hvcjpzdGFydH0uYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAge2NvbG9yOiM2MTYxNjE7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICB7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAuZG9tYWluLCAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIHRleHR7ZGlzcGxheTpub25lfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2s6bnRoLWNoaWxkKDJuKzEpIHRleHR7ZGlzcGxheTppbml0aWFsfXN2Z1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb2ludGVyLWV2ZW50czp2aXNpYmxlUGFpbnRlZH1zdmdbX25nY29udGVudC0lQ09NUCVdICAgbGluZVtfbmdjb250ZW50LSVDT01QJV0sIHN2Z1tfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCBzdmdbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmV9c3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGdbX25nY29udGVudC0lQ09NUCVde3dpbGwtY2hhbmdlOnRyYW5zZm9ybX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6eC1heGlzfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOmhhbmdpbmc7dGV4dC1hbmNob3I6bWlkZGxlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp5LWF4aXM7b3ZlcmZsb3c6Y2xpcCB2aXNpYmxlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOm1pZGRsZTt0ZXh0LWFuY2hvcjpzdGFydH0uaGlzdG9ncmFtLWNhcmQtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0OjlweDtwb3NpdGlvbjphYnNvbHV0ZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV0sIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgbGluZXtzdHJva2U6I2RkZH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmUsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgbGluZXtzdHJva2U6IzU1NX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmNvbnRlbnQ7b3ZlcmZsb3c6dmlzaWJsZTt6LWluZGV4OjF9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVde3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWRhc2hhcnJheToyfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0sIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde2ZpbGw6Y3VycmVudENvbG9yO3N0cm9rZS1vcGFjaXR5Oi42O3N0cm9rZS13aWR0aDoxcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWx0ZXI6ZHJvcC1zaGFkb3coMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuNikpO3N0cm9rZTojZmZmO3dpbGwtY2hhbmdlOnRyYW5zZm9ybX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVde3N0cm9rZS1vcGFjaXR5Oi4xO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlOmN1cnJlbnRDb2xvcjt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlOmN1cnJlbnRDb2xvcjtmaWxsOnJnYmEoMCwwLDAsMCl9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDIyMSwyMjEsMjIxLC40KSAhaW1wb3J0YW50fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eTouMn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoNTEsNTEsNTEsLjQpICFpbXBvcnRhbnR9Lm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6I2ZmZn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTojNTU1fS5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXMubGlua2VkLXRpbWUtc2luZ2xlLXN0ZXBbX25nY29udGVudC0lQ09NUCVdICAgW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLm5vLWNvbG9yKSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTojMDAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXMubGlua2VkLXRpbWUtc2luZ2xlLXN0ZXBbX25nY29udGVudC0lQ09NUCVdICAgW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLm5vLWNvbG9yKSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6I2ZmZn0ub3ZlcmxheVtfbmdjb250ZW50LSVDT01QJV0gICAueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgbGluZXtkaXNwbGF5Om5vbmV9Lm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17ZmlsbC1vcGFjaXR5OjA7c3Ryb2tlOmN1cnJlbnRDb2xvcn0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0sIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gTkcobix0KXtyZXR1cm4gbi5yZWR1Y2UoKGUsaSk9Pk1hdGgubWF4KGUsdChpKSksLTEvMCl9ZnVuY3Rpb24gYnBlKG4sdCxlKXtlfHwoZT10KTtsZXQgaT0xLzAscj0tMS8wO2ZvcihsZXQgbyBvZiBuKWk9TWF0aC5taW4oaSx0KG8pKSxyPU1hdGgubWF4KHIsZShvKSk7cmV0dXJue21pbjppLG1heDpyfX1mdW5jdGlvbiB4RShuKXtyZXR1cm4gbi54Ky41Km4uZHh9ZnVuY3Rpb24gdlhlKG4sdCl7MSZuJiYoXygwLCJzcGFuIiwxNCksTygxLCJtYXQtc3Bpbm5lciIsMTUpLHYoKSl9ZnVuY3Rpb24geVhlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwidGItaGlzdG9ncmFtIiwxNiksUCgib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQocikpfSkoIm9uTGlua2VkVGltZVRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbkxpbmtlZFRpbWVUb2dnbGVkLmVtaXQoKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1TKCk7eSgiZGF0YSIsZS5kYXRhKSgibW9kZSIsZS5tb2RlKSgidGltZVByb3BlcnR5IixlLnRpbWVQcm9wZXJ0eShlLnhBeGlzVHlwZSkpKCJjb2xvciIsZS5ydW5Db2xvclNjYWxlKGUucnVuSWQpKSgidGltZVNlbGVjdGlvbiIsZS5jb252ZXJ0VG9UaW1lU2VsZWN0aW9uKGUubGlua2VkVGltZVNlbGVjdGlvbikpfX1mdW5jdGlvbiBiWGUobix0KXsxJm4mJihfKDAsImRpdiIsMTgpLEEoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLHYoKSl9ZnVuY3Rpb24geFhlKG4sdCl7aWYoMSZuJiZFKDAsYlhlLDIsMCwiZGl2IiwxNyksMiZuKXtsZXQgZT1TKCk7eSgibmdJZiIsZS5sb2FkU3RhdGU9PT1lLkRhdGFMb2FkU3RhdGUuRkFJTEVEKX19dmFyIENYZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fSx4cGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGF0YUxvYWRTdGF0ZT1PZSx0aGlzLm9uRnVsbFNpemVUb2dnbGU9bmV3IEcsdGhpcy5vblBpbkNsaWNrZWQ9bmV3IEcsdGhpcy5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBHLHRoaXMub25MaW5rZWRUaW1lVG9nZ2xlZD1uZXcgR310aW1lUHJvcGVydHkoZSl7c3dpdGNoKGUpe2Nhc2UgSmkuU1RFUDpyZXR1cm4gUm8uU1RFUDtjYXNlIEppLldBTExfVElNRTpyZXR1cm4gUm8uV0FMTF9USU1FO2Nhc2UgSmkuUkVMQVRJVkU6cmV0dXJuIFJvLlJFTEFUSVZFO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHhBeGlzVHlwZSBmb3IgaGlzdG9ncmFtIHRpbWUgcHJvcGVydHkuIil9fWNvbnZlcnRUb1RpbWVTZWxlY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lP251bGw6e3N0YXJ0OntzdGVwOmUuc3RhcnRTdGVwfSxlbmQ6ZS5lbmRTdGVwP3tzdGVwOmUuZW5kU3RlcH06bnVsbH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImhpc3RvZ3JhbS1jYXJkLWNvbXBvbmVudCJdXSxpbnB1dHM6e2xvYWRTdGF0ZToibG9hZFN0YXRlIix0aXRsZToidGl0bGUiLHRhZzoidGFnIixydW5JZDoicnVuSWQiLGRhdGE6ImRhdGEiLG1vZGU6Im1vZGUiLHhBeGlzVHlwZToieEF4aXNUeXBlIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIixzaG93RnVsbFNpemU6InNob3dGdWxsU2l6ZSIsaXNQaW5uZWQ6ImlzUGlubmVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ6ImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJ9LG91dHB1dHM6e29uRnVsbFNpemVUb2dnbGU6Im9uRnVsbFNpemVUb2dnbGUiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIixvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvbkxpbmtlZFRpbWVUb2dnbGVkOiJvbkxpbmtlZFRpbWVUb2dnbGVkIn0sZGVjbHM6MTYsdmFyczoxNCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIG9uIGEgaGlzdG9ncmFtIGNhcmQgdGhhdCB0b2dnbGVzIGZ1bGwgc2l6ZSBtb2RlLuKQn2ZjOGY3NjdkMGI5ZjkzMDE4N2ExYmFlMzQ0NzdhZDI4NzM2ZWNlMzPikJ85MTU3MjE1NjM2Mzg5MjY1OTc6VG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlYCxbWzEsImhlYWRpbmciXSxbMSwidGFnIl0sWzMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIl0sWzEsInJ1biJdLFsxLCJkb3QiLDMsIm5nU3R5bGUiXSxbMSwicnVuLXRleHQiLDMsInJ1bklkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzMsImRhdGEiLCJtb2RlIiwidGltZVByb3BlcnR5IiwiY29sb3IiLCJ0aW1lU2VsZWN0aW9uIiwib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uTGlua2VkVGltZVRvZ2dsZWQiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9EYXRhIiwiIl0sWzEsInNwaW5uZXIiXSxbImRpYW1ldGVyIiwiMTgiXSxbMywiZGF0YSIsIm1vZGUiLCJ0aW1lUHJvcGVydHkiLCJjb2xvciIsInRpbWVTZWxlY3Rpb24iLCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25MaW5rZWRUaW1lVG9nZ2xlZCJdLFsiY2xhc3MiLCJlbXB0eS1tZXNzYWdlIiw0LCJuZ0lmIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJkaXYiLDApKDEsImRpdiIsMSksTygyLCJ0Yi10cnVuY2F0ZWQtcGF0aCIsMikoMywidmlzLWxpbmtlZC10aW1lLXNlbGVjdGlvbi13YXJuaW5nIiwzKSx2KCksXyg0LCJkaXYiLDQpLE8oNSwic3BhbiIsNSkoNiwiY2FyZC1ydW4tbmFtZSIsNiksdigpLF8oNywic3BhbiIsNykoOCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxPKDksIm1hdC1pY29uIiw5KSx2KCksXygxMCwiYnV0dG9uIiwxMCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZS5lbWl0KCl9KSxPKDExLCJtYXQtaWNvbiIsOSksdigpKCksRSgxMix2WGUsMiwwLCJzcGFuIiwxMSksdigpLEUoMTMseVhlLDEsNSwidGItaGlzdG9ncmFtIiwxMiksRSgxNCx4WGUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMyxxdCkpLDImZSl7bGV0IHI9JGUoMTUpO0MoMikseSgidGl0bGUiLGkudGFnKSgidmFsdWUiLGkudGl0bGUpLEMoMSkseSgiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixpLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCksQygyKSx5KCJuZ1N0eWxlIixPbigxMixDWGUsaS5ydW5Db2xvclNjYWxlKGkucnVuSWQpKSksQygxKSx5KCJydW5JZCIsaS5ydW5JZCksQygyKSx6ZSgidGl0bGUiLGkuaXNQaW5uZWQ/IlVucGluIGNhcmQiOiJQaW4gY2FyZCIpLEMoMSkseSgic3ZnSWNvbiIsaS5pc1Bpbm5lZD8ia2VlcF8yNHB4Ijoia2VlcF9vdXRsaW5lXzI0cHgiKSxDKDIpLHkoInN2Z0ljb24iLGkuc2hvd0Z1bGxTaXplPyJmdWxsc2NyZWVuX2V4aXRfMjRweCI6ImZ1bGxzY3JlZW5fMjRweCIpLEMoMSkseSgibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORyksQygxKSx5KCJuZ0lmIixpLmRhdGEmJmkuZGF0YS5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W0JlLHp1LFdrLF9uLEd0LEJvLHlSLHV5LGR5XSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczozMThweDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRhZyBjb250cm9scyIgInJ1biBzcGlubmVyIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbTo0cHh9LnRhZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtnYXA6NXB4O2dyaWQtYXJlYTp0YWc7b3ZlcmZsb3c6aGlkZGVufS50YWdbX25nY29udGVudC0lQ09NUCVdICAgdmlzLXNlbGVjdGVkLXRpbWUtY2xpcHBlZFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MH0ucGluLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjE4cHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnJ1bjtkaXNwbGF5OmZsZXg7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtc2l6ZToxM3B4fS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLmRvdFtfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7Ym9yZGVyLXJhZGl1czo1MCU7bWFyZ2luLXJpZ2h0OjRweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ydW4tdGV4dFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7bWF4LXdpZHRoOjEyMHB4fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7Z3JpZC1hcmVhOmNvbnRyb2xzO2p1c3RpZnktc2VsZjpmbGV4LWVuZDtmbGV4LXNocmluazowO21hcmdpbi1yaWdodDotMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Z3JpZC1hcmVhOnNwaW5uZXI7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX1tYXQtc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17dG9wOjA7cmlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0ZX10Yi1oaXN0b2dyYW1bX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjFlbTtmb250LXNpemU6MTNweH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLENwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEcsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgRyx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgRyx0aGlzLm1vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KFJJKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QodGQpLHRoaXMuc2hvd0Z1bGxTaXplPSExfWlzSGlzdG9ncmFtQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PXJpLkhJU1RPR1JBTVN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc2hvd0Z1bGxTaXplPSF0aGlzLnNob3dGdWxsU2l6ZSx0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdCh0aGlzLnNob3dGdWxsU2l6ZSksdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZC5lbWl0KHRoaXMuc2hvd0Z1bGxTaXplKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KHRjLHRoaXMuY2FyZElkKS5waXBlKFllKG89PiEhbyYmdGhpcy5pc0hpc3RvZ3JhbUNhcmRNZXRhZGF0YShvKSksTChvPT5vKSkscj1MdChbaSx0aGlzLnN0b3JlLnNlbGVjdCh4aCx0aGlzLmNhcmRJZCldKTt0aGlzLmRhdGEkPXIucGlwZShMKChbbyxzXSk9PntsZXQgYT1vLnJ1bklkO3JldHVybiBzJiZzLmhhc093blByb3BlcnR5KGEpP2Z1bmN0aW9uKG4sdD0zMCl7aWYoIW4ubGVuZ3RofHx0PDEpcmV0dXJuW107bGV0IGU9ZnVuY3Rpb24obil7bGV0IHQ9bnVsbCxlPW51bGw7Zm9yKGxldHtiaW5zOml9b2Ygbil7aWYoIWkubGVuZ3RoKWNvbnRpbnVlO2xldCByPWlbaS5sZW5ndGgtMV0sbz1pWzBdLngscz1yLngrci5keDsobnVsbD09PXR8fG88dCkmJih0PW8pLChudWxsPT09ZXx8cz5lKSYmKGU9cyl9cmV0dXJuIG51bGw9PT10fHxudWxsPT09ZT9udWxsOntsZWZ0OnQscmlnaHQ6ZX19KG4pO3JldHVybiBlJiZlLmxlZnQ9PT1lLnJpZ2h0JiYoZS5yaWdodD0xLjEqZS5yaWdodCsxLGUubGVmdD1lLmxlZnQvMS4xLTEpLG4ubWFwKGk9Pih7c3RlcDppLnN0ZXAsd2FsbFRpbWU6aS53YWxsVGltZSxiaW5zOmU/UVllKGkuYmlucyxlLHQpOltdfSkpfShzW2FdLm1hcCh1PT57bGV0e3dhbGxUaW1lOmQsc3RlcDpwfT11O3JldHVybnt3YWxsVGltZTpkLHN0ZXA6cCxiaW5zOnUuYmlucy5tYXAoZj0+KHt4OmYubWluLGR4OmYubWF4LWYubWluLHk6Zi5jb3VudH0pKX19KSk6W119KSksdGhpcy5zdGVwcyQ9dGhpcy5kYXRhJC5waXBlKEwobz0+by5tYXAocz0+cy5zdGVwKSkpLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KFhtKSx0aGlzLnN0ZXBzJF0pLnBpcGUoTCgoW28sc10pPT57aWYoIW8pcmV0dXJuIG51bGw7bGV0IGE9MS8wLGw9LTEvMDtmb3IobGV0IHUgb2YgcylhPU1hdGgubWluKHUsYSksbD1NYXRoLm1heCh1LGwpO3JldHVybiBmdW5jdGlvbihuLHQpe2lmKG51bGwhPT1uLmVuZFN0ZXApcmV0dXJuIG47bGV0IGU9ZnVuY3Rpb24obix0KXtsZXQgZT0xLzAsaT1udWxsO2ZvcihsZXQgciBvZiB0KXtsZXQgbz1NYXRoLmFicyhuLXIpO288ZSYmKGU9byxpPXIpfXJldHVybiBpfShuLnN0YXJ0U3RlcCx0KTtyZXR1cm4gbnVsbCE9PWU/ey4uLm4sc3RhcnRTdGVwOmV9Om59KFFoKG8sYSxsKSxzKX0pKSx0aGlzLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KFhtKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kXSkucGlwZShMKChbbyxzXSk9Pm8mJnMmJiFzLmNsaXBwZWQmJm51bGw9PT1vLmVuZCYmby5zdGFydC5zdGVwIT09cy5zdGFydFN0ZXApKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYmgsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoTChvPT5vLnRhZykpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKEwobz0+bHkobyx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLnJ1bklkJD1pLnBpcGUoTChvPT5vLnJ1bklkKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoQ2gsdGhpcy5jYXJkSWQpfW9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChZaChlKSl9b25MaW5rZWRUaW1lVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goWGgoe2FmZm9yZGFuY2U6YmwuRk9CX0RFU0VMRUNUfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siaGlzdG9ncmFtLWNhcmQiXV0saW5wdXRzOntjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixmdWxsSGVpZ2h0Q2hhbmdlZDoiZnVsbEhlaWdodENoYW5nZWQiLHBpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MTEsdmFyczozMixjb25zdHM6W1szLCJsb2FkU3RhdGUiLCJ0aXRsZSIsInRhZyIsInJ1bklkIiwiZGF0YSIsIm1vZGUiLCJ4QXhpc1R5cGUiLCJydW5Db2xvclNjYWxlIiwic2hvd0Z1bGxTaXplIiwiaXNQaW5uZWQiLCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLCJsaW5rZWRUaW1lU2VsZWN0aW9uIiwib25GdWxsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCIsIm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvbkxpbmtlZFRpbWVUb2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJoaXN0b2dyYW0tY2FyZC1jb21wb25lbnQiLDApLFAoIm9uRnVsbFNpemVUb2dnbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSgib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZChvKX0pKCJvbkxpbmtlZFRpbWVUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uTGlua2VkVGltZVRvZ2dsZWQoKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLEIoNCwiYXN5bmMiKSxCKDUsImFzeW5jIiksQig2LCJhc3luYyIpLEIoNywiYXN5bmMiKSxCKDgsImFzeW5jIiksQig5LCJhc3luYyIpLEIoMTAsImFzeW5jIiksdigpKSwyJmUmJnkoImxvYWRTdGF0ZSIsVSgxLDEyLGkubG9hZFN0YXRlJCkpKCJ0aXRsZSIsVSgyLDE0LGkudGl0bGUkKSkoInRhZyIsVSgzLDE2LGkudGFnJCkpKCJydW5JZCIsVSg0LDE4LGkucnVuSWQkKSkoImRhdGEiLFUoNSwyMCxpLmRhdGEkKSkoIm1vZGUiLFUoNiwyMixpLm1vZGUkKSkoInhBeGlzVHlwZSIsVSg3LDI0LGkueEF4aXNUeXBlJCkpKCJydW5Db2xvclNjYWxlIixpLnJ1bkNvbG9yU2NhbGUpKCJzaG93RnVsbFNpemUiLGkuc2hvd0Z1bGxTaXplKSgiaXNQaW5uZWQiLFUoOCwyNixpLmlzUGlubmVkJCkpKCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLFUoOSwyOCxpLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVSgxMCwzMCxpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSl9LGRlcGVuZGVuY2llczpbeHBlLEdlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gU1hlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiaW1hZ2UtY2FyZCIsNiksUCgiZnVsbFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoMikub25GdWxsV2lkdGhDaGFuZ2VkKHIpKX0pKCJwaW5TdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoMikub25QaW5TdGF0ZUNoYW5nZWQoKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1TKDIpO3koImNhcmRJZCIsZS5jYXJkSWQpKCJncm91cE5hbWUiLGUuZ3JvdXBOYW1lKSgicnVuQ29sb3JTY2FsZSIsZS5ydW5Db2xvclNjYWxlKX19ZnVuY3Rpb24gRVhlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwic2NhbGFyLWNhcmQiLDcpLFAoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKDIpLm9uRnVsbFdpZHRoQ2hhbmdlZChyKSl9KSgiZnVsbEhlaWdodENoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKDIpLm9uRnVsbEhlaWdodENoYW5nZWQocikpfSkoInBpblN0YXRlQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLHYoKX1pZigyJm4pe2xldCBlPVMoMik7eSgiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpfX1mdW5jdGlvbiBUWGUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJoaXN0b2dyYW0tY2FyZCIsOCksUCgiZnVsbFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoMikub25GdWxsV2lkdGhDaGFuZ2VkKHIpKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoMikub25GdWxsSGVpZ2h0Q2hhbmdlZChyKSl9KSgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKDIpLm9uUGluU3RhdGVDaGFuZ2VkKCkpfSksdigpfWlmKDImbil7bGV0IGU9UygyKTt5KCJjYXJkSWQiLGUuY2FyZElkKSgiZ3JvdXBOYW1lIixlLmdyb3VwTmFtZSkoInJ1bkNvbG9yU2NhbGUiLGUucnVuQ29sb3JTY2FsZSl9fWZ1bmN0aW9uIERYZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiksQSgxKSx2KCkpLDImbil7bGV0IGU9UygyKTtDKDEpLGplKCJQbGFjZWhvbGRlciBlcnJvciBmb3I6ICIsZS5jYXJkSWQsIiIpfX1mdW5jdGlvbiBBWGUobix0KXtpZigxJm4mJihzbigwLDEpLEUoMSxTWGUsMSwzLCJpbWFnZS1jYXJkIiwyKSxFKDIsRVhlLDEsMiwic2NhbGFyLWNhcmQiLDMpLEUoMyxUWGUsMSwzLCJoaXN0b2dyYW0tY2FyZCIsNCksRSg0LERYZSwyLDEsImRpdiIsNSksYW4oKSksMiZuKXtsZXQgZT1TKCk7eSgibmdTd2l0Y2giLGUucGx1Z2luVHlwZSksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5JTUFHRVMpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuU0NBTEFSUyksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKX19dmFyIE1wZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5QbHVnaW5UeXBlPXJpLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZD1uZXcgRyx0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkPW5ldyBHLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBHfW9uRnVsbFdpZHRoQ2hhbmdlZChlKXt0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdChlKX1vbkZ1bGxIZWlnaHRDaGFuZ2VkKGUpe3RoaXMuZnVsbEhlaWdodENoYW5nZWQuZW1pdChlKX1vblBpblN0YXRlQ2hhbmdlZCgpe3RoaXMucGluU3RhdGVDaGFuZ2VkLmVtaXQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e2lzRXZlclZpc2libGU6ImlzRXZlclZpc2libGUiLGNhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSIscGx1Z2luVHlwZToicGx1Z2luVHlwZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSJ9LG91dHB1dHM6e2Z1bGxXaWR0aENoYW5nZWQ6ImZ1bGxXaWR0aENoYW5nZWQiLGZ1bGxIZWlnaHRDaGFuZ2VkOiJmdWxsSGVpZ2h0Q2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1szLCJuZ1N3aXRjaCIsNCwibmdJZiJdLFszLCJuZ1N3aXRjaCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwiZnVsbFdpZHRoQ2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCIsNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCIsNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ1N3aXRjaERlZmF1bHQiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwiZnVsbFdpZHRoQ2hhbmdlZCIsImZ1bGxIZWlnaHRDaGFuZ2VkIiwicGluU3RhdGVDaGFuZ2VkIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkUoMCxBWGUsNSw0LCJuZy1jb250YWluZXIiLDApLDImZSYmeSgibmdJZiIsaS5pc0V2ZXJWaXNpYmxlKX0sZGVwZW5kZW5jaWVzOltCZSxDcixVcixjaCxuc2UsX3BlLENwZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksd3BlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuaXNFdmVyVmlzaWJsZT0hMSx0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEcsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgRyx0aGlzLnJ1bkNvbG9yU2NhbGUkPXRoaXMuc3RvcmUuc2VsZWN0KG5jKS5waXBlKGIwKDM1MCx2b2lkIDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KSxMKGk9PnI9PmkuaGFzT3duUHJvcGVydHkocik/aVtyXToiI2ZmZiIpKX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6ZX0pe3RoaXMuaXNFdmVyVmlzaWJsZT10aGlzLmlzRXZlclZpc2libGV8fGV9b25GdWxsV2lkdGhDaGFuZ2VkKGUpe3RoaXMuZnVsbFdpZHRoQ2hhbmdlZC5lbWl0KGUpfW9uRnVsbEhlaWdodENoYW5nZWQoZSl7dGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZC5lbWl0KGUpfW9uUGluU3RhdGVDaGFuZ2VkKCl7dGhpcy5zdG9yZS5zZWxlY3QoQ2gsdGhpcy5jYXJkSWQpLnBpcGUoUXQoMSksV3QodGhpcy5zdG9yZS5zZWxlY3QoeWVlKSkpLnN1YnNjcmliZSgoW2UsaV0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChyeSh7Y2FyZElkOnRoaXMuY2FyZElkLGNhbkNyZWF0ZU5ld1BpbnM6aSx3YXNQaW5uZWQ6ZX0pKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC12aWV3Il1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixwbHVnaW5UeXBlOiJwbHVnaW5UeXBlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIsZnVsbEhlaWdodENoYW5nZWQ6ImZ1bGxIZWlnaHRDaGFuZ2VkIn0sZGVjbHM6Mix2YXJzOjcsY29uc3RzOltbIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiLCJpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbiIsIjIwMHB4IDIwMHB4IDIwMHB4IDIwMHB4IiwzLCJpc0V2ZXJWaXNpYmxlIiwiY2FyZElkIiwiZ3JvdXBOYW1lIiwicGx1Z2luVHlwZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLCJvblZpc2liaWxpdHlDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImNhcmQtdmlldy1jb21wb25lbnQiLDApLFAoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRnVsbFdpZHRoQ2hhbmdlZChvKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GdWxsSGVpZ2h0Q2hhbmdlZChvKX0pKCJwaW5TdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5TdGF0ZUNoYW5nZWQoKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pLEIoMSwiYXN5bmMiKSx2KCkpLDImZSYmeSgiaXNFdmVyVmlzaWJsZSIsaS5pc0V2ZXJWaXNpYmxlKSgiY2FyZElkIixpLmNhcmRJZCkoImdyb3VwTmFtZSIsaS5ncm91cE5hbWUpKCJwbHVnaW5UeXBlIixpLnBsdWdpblR5cGUpKCJydW5Db2xvclNjYWxlIixVKDEsNSxpLnJ1bkNvbG9yU2NhbGUkKSl9LGRlcGVuZGVuY2llczpbYXksTXBlLEdlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gT1hlKG4sdCl7MSZuJiZOaSgwKX12YXIga1hlPWZ1bmN0aW9uKG4sdCl7cmV0dXJueyJmdWxsLXdpZHRoIjpuLCJmdWxsLWhlaWdodCI6dH19O2Z1bmN0aW9uIEZYZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsNSkoMSwiY2FyZC12aWV3Iiw2KSxQKCJmdWxsV2lkdGhDaGFuZ2VkIixmdW5jdGlvbihyKXtsZXQgcz1vZShlKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoMikub25GdWxsV2lkdGhDaGFuZ2VkKHMuY2FyZElkLHIpKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24ocil7bGV0IHM9b2UoZSkuJGltcGxpY2l0O3JldHVybiBzZShTKDIpLm9uRnVsbEhlaWdodENoYW5nZWQocy5jYXJkSWQscikpfSksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoMik7eSgibmdDbGFzcyIsUXIoNixrWGUsaS5jYXJkc0F0RnVsbFdpZHRoLmhhcyhlLmNhcmRJZCksaS5jYXJkc0F0RnVsbEhlaWdodC5oYXMoZS5jYXJkSWQpKSksQygxKSx5KCJjYXJkSWQiLGUuY2FyZElkKSgiZ3JvdXBOYW1lIixpLmdyb3VwTmFtZSkoInBsdWdpblR5cGUiLGUucGx1Z2luKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcikoImNhcmRMYXp5TG9hZGVyIixlLmNhcmRJZCl9fWZ1bmN0aW9uIE5YZShuLHQpezEmbiYmTmkoMCl9dmFyIExYZT1mdW5jdGlvbigpe3JldHVybntpc0JvdHRvbUNvbnRyb2w6ITF9fSxCWGU9ZnVuY3Rpb24oKXtyZXR1cm57aXNCb3R0b21Db250cm9sOiEwfX07ZnVuY3Rpb24gVlhlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiKSxFKDEsT1hlLDEsMCwibmctY29udGFpbmVyIiwyKSxfKDIsImRpdiIsMyksRSgzLEZYZSwyLDksImRpdiIsNCksdigpLEUoNCxOWGUsMSwwLCJuZy1jb250YWluZXIiLDIpLHYoKSksMiZuKXtsZXQgZT1TKCksaT0kZSgyKTtDKDEpLHkoIm5nVGVtcGxhdGVPdXRsZXQiLGkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsUXAoOCxMWGUpKSxDKDEpLFB0KCJncmlkLXRlbXBsYXRlLWNvbHVtbnMiLGUuZ3JpZFRlbXBsYXRlQ29sdW1uKSxDKDEpLHkoIm5nRm9yT2YiLGUuY2FyZElkc1dpdGhNZXRhZGF0YSkoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5Q2FyZHMpLEMoMSkseSgibmdUZW1wbGF0ZU91dGxldCIsaSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixRcCg5LEJYZSkpfX1mdW5jdGlvbiBIWGUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJidXR0b24iLDEyKSxQKCJjbGljayIsZnVuY3Rpb24ocil7b2UoZSk7bGV0IG89UygzKTtyZXR1cm4gc2Uoby5oYW5kbGVQYWdlQ2hhbmdlKG8ucGFnZUluZGV4LTEsci50YXJnZXQpKX0pLEEoMSwiIFByZXZpb3VzICIpLHYoKX0yJm4mJnkoImRpc2FibGVkIiwwPT09UygzKS5wYWdlSW5kZXgpfWZ1bmN0aW9uIFVYZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsInNwYW4iLDE1KSgxLCJpbnB1dCIsMTYpLFAoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUyg0KS5vblBhZ2luYXRpb25JbnB1dENoYW5nZShyKSl9KSgiY2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUyg0KS5vblBhZ2luYXRpb25JbnB1dENoYW5nZShyKSl9KSx2KCksQSgyKSx2KCl9aWYoMiZuKXtsZXQgZT1TKDQpO0MoMSkseSgidmFsdWUiLGUucGFnZUluZGV4KzEpKCJtYXgiLGUubnVtUGFnZXMpLEMoMSksamUoIiBvZiAiLGUubnVtUGFnZXMsIiIpfX1mdW5jdGlvbiB6WGUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJzcGFuIiksRSgxLFVYZSwzLDMsInNwYW4iLDEzKSxfKDIsImJ1dHRvbiIsMTQpLFAoImNsaWNrIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKDMpO3JldHVybiBzZShvLmhhbmRsZVBhZ2VDaGFuZ2Uoby5wYWdlSW5kZXgrMSxyLnRhcmdldCkpfSksQSgzLCIgTmV4dCAiKSx2KCkoKX1pZigyJm4pe2xldCBlPVMoMikuaXNCb3R0b21Db250cm9sLGk9UygpO0MoMSkseSgibmdJZiIsaS5zaG93UGFnaW5hdGlvbklucHV0KGUpKSxDKDEpLHkoImRpc2FibGVkIixpLnBhZ2VJbmRleCsxPj1pLm51bVBhZ2VzKX19ZnVuY3Rpb24galhlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDgpKDEsInNwYW4iLDkpLEUoMixIWGUsMiwxLCJidXR0b24iLDEwKSx2KCksXygzLCJzcGFuIiwxMSksRSg0LHpYZSw0LDIsInNwYW4iLDApLHYoKSgpKSwyJm4pe2xldCBlPVMoMik7QygyKSx5KCJuZ0lmIixlLnNob3dQYWdpbmF0aW9uQ29udHJvbHMpLEMoMikseSgibmdJZiIsZS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKX19ZnVuY3Rpb24gR1hlKG4sdCl7MSZuJiZFKDAsalhlLDUsMiwiZGl2Iiw3KSwyJm4mJnkoIm5nSWYiLFMoKS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKX12YXIgU3BlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jZGtTY3JvbGxhYmxlPWUsdGhpcy5QbHVnaW5UeXBlPXJpLHRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1uPSIiLHRoaXMuY2FyZHNBdEZ1bGxXaWR0aD1uZXcgU2V0LHRoaXMuY2FyZHNBdEZ1bGxIZWlnaHQ9bmV3IFNldCx0aGlzLnBhZ2VJbmRleENoYW5nZWQ9bmV3IEd9bmdPbkluaXQoKXt0aGlzLmlzQ2FyZFdpZHRoVmFsaWQodGhpcy5jYXJkTWluV2lkdGgpJiYodGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49YHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgke3RoaXMuY2FyZE1pbldpZHRofXB4LCAxZnIpKWApfW5nT25DaGFuZ2VzKGUpe2lmKGUuY2FyZE1pbldpZHRoKXtsZXQgaT1lLmNhcmRNaW5XaWR0aC5jdXJyZW50VmFsdWU7dGhpcy5pc0NhcmRXaWR0aFZhbGlkKGkpPyh0aGlzLmNhcmRNaW5XaWR0aD1pLHRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1uPWByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoJHt0aGlzLmNhcmRNaW5XaWR0aH1weCwgMWZyKSlgKTp0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbj0iIn19aXNDYXJkV2lkdGhWYWxpZChlKXtyZXR1cm4gZSYmZT49MzM1JiZlPD03MzV9c2hvd1BhZ2luYXRpb25JbnB1dChlKXtyZXR1cm4gZX1oYW5kbGVQYWdlQ2hhbmdlKGUsaSl7bGV0IHI9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7c2V0VGltZW91dCgoKT0+e3RoaXMuc2Nyb2xsVG9LZWVwVGFyZ2V0UG9zaXRpb24oaSxyKX0sMCksdGhpcy5wYWdlSW5kZXhDaGFuZ2VkLmVtaXQoZSl9c2Nyb2xsVG9LZWVwVGFyZ2V0UG9zaXRpb24oZSxpKXtsZXQgcj10aGlzLmNka1Njcm9sbGFibGU/LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O3ImJnIuc2Nyb2xsVG8oMCxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1pK3Iuc2Nyb2xsVG9wKX10cmFja0J5Q2FyZHMoZSxpKXtyZXR1cm4gaS5jYXJkSWR9b25QYWdpbmF0aW9uSW5wdXRDaGFuZ2UoZSl7bGV0IGk9ZS50YXJnZXQ7aWYoImlucHV0Ij09PWUudHlwZSYmIiI9PT1pLnZhbHVlKXJldHVybjtsZXQgcj1OdW1iZXIoaS52YWx1ZSktMSxvPU1hdGgubWluKE1hdGgubWF4KDAsciksdGhpcy5udW1QYWdlcy0xKTtpLnZhbHVlIT09U3RyaW5nKG8rMSkmJihpLnZhbHVlPVN0cmluZyhvKzEpKSx0aGlzLmhhbmRsZVBhZ2VDaGFuZ2UobyxpKX1vbkZ1bGxXaWR0aENoYW5nZWQoZSxpKXtpP3RoaXMuY2FyZHNBdEZ1bGxXaWR0aC5hZGQoZSk6dGhpcy5jYXJkc0F0RnVsbFdpZHRoLmRlbGV0ZShlKX1vbkZ1bGxIZWlnaHRDaGFuZ2VkKGUsaSl7aT90aGlzLmNhcmRzQXRGdWxsSGVpZ2h0LmFkZChlKTp0aGlzLmNhcmRzQXRGdWxsSGVpZ2h0LmRlbGV0ZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShJaCw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyaWQtY29tcG9uZW50Il1dLGlucHV0czp7aXNHcm91cEV4cGFuZGVkOiJpc0dyb3VwRXhwYW5kZWQiLHBhZ2VJbmRleDoicGFnZUluZGV4IixudW1QYWdlczoibnVtUGFnZXMiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEiLGNhcmRNaW5XaWR0aDoiY2FyZE1pbldpZHRoIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciIsc2hvd1BhZ2luYXRpb25Db250cm9sczoic2hvd1BhZ2luYXRpb25Db250cm9scyJ9LG91dHB1dHM6e3BhZ2VJbmRleENoYW5nZWQ6InBhZ2VJbmRleENoYW5nZWQifSxmZWF0dXJlczpbRnRdLGRlY2xzOjMsdmFyczoxLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHNldHMgYSBncm91cCB0byB0aGUgcHJldmlvdXMgcGFnZS7ikJ81NzVlNzgyZmQyN2YyZWU3MGEwMzRhNzc1ZWZlOWFkMTYyNDcyMjUw4pCfMzYyOTk2MDU0NDg3NTM2MDA0NjpQcmV2aW91cyBwYWdlYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBzZXRzIGEgZ3JvdXAgdG8gdGhlIG5leHQgcGFnZS7ikJ9jZTNjZWZiMWNkMDA5OWFhNTAwM2RkYTE2ZWM5ZWIyMWZkOGJhNzg54pCfMzMzNzMwMTY5NDIxMDI4NzU5NTpOZXh0IHBhZ2VgLFtbNCwibmdJZiJdLFsiZ3JvdXBDb250cm9scyIsIiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2FyZC1ncmlkIl0sWyJjbGFzcyIsImNhcmQtc3BhY2UiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjYXJkLXNwYWNlIiwzLCJuZ0NsYXNzIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBsdWdpblR5cGUiLCJjYXJkT2JzZXJ2ZXIiLCJjYXJkTGF6eUxvYWRlciIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCJdLFsiY2xhc3MiLCJncm91cC1jb250cm9scyIsNCwibmdJZiJdLFsxLCJncm91cC1jb250cm9scyJdLFsxLCJwcmV2LWNvbnRhaW5lciJdLFsiY2xhc3MiLCJwcmV2IHBhZ2luYXRpb24tYnV0dG9uIiwibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbnB1dC1hbmQtbmV4dC1jb250YWluZXIiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInByZXYiLCJwYWdpbmF0aW9uLWJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWlucHV0Iiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwxLCJuZXh0IiwicGFnaW5hdGlvbi1idXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwicGFnaW5hdGlvbi1pbnB1dCJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLDMsInZhbHVlIiwibWF4IiwiaW5wdXQiLCJjaGFuZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRSgwLFZYZSw1LDEwLCJkaXYiLDApLEUoMSxHWGUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLHF0KSksMiZlJiZ5KCJuZ0lmIixpLmlzR3JvdXBFeHBhbmRlZCl9LGRlcGVuZGVuY2llczpbT29lLHdwZSxGbixkbixCZSxvcyxfbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOmNvbnRlbnR9LmNhcmQtZ3JpZFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMzM1cHgsIDFmcikpO2dhcDoxNnB4O3BhZGRpbmc6MTZweH0uY2FyZC1zcGFjZS5mdWxsLXdpZHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWNvbHVtbi1zdGFydDoxO2dyaWQtY29sdW1uLWVuZDotMX0uY2FyZC1zcGFjZS5mdWxsLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDo0ODBweH0uY2FyZC1zcGFjZS5mdWxsLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV0gICBjYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfWNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250YWluOmxheW91dCBwYWludDtkaXNwbGF5OmJsb2NrO21pbi1oZWlnaHQ6MzIwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpjZW50ZXI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHg7cGFkZGluZzowIDE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LW9mLXR5cGV7cGFkZGluZy10b3A6MTZweH0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmxhc3Qtb2YtdHlwZXtwYWRkaW5nLWJvdHRvbToxNnB4fS5wcmV2LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtc3RhcnR9LmlucHV0LWFuZC1uZXh0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtZW5kfS5wYWdpbmF0aW9uLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MTZweH0ucGFnaW5hdGlvbi1pbnB1dFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0fS5wYWdpbmF0aW9uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0ucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVke2NvbG9yOiM3NTc1NzV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZHtjb2xvcjojNjE2MTYxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksQWI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ncm91cE5hbWU9bnVsbCx0aGlzLmdyb3VwTmFtZSQ9bmV3IGhyKG51bGwpLHRoaXMucGFnZUluZGV4JD1uZXcgaHIoMCksdGhpcy5pdGVtcyQ9bmV3IGhyKFtdKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IGtlLHRoaXMubnVtUGFnZXMkPUx0KFt0aGlzLml0ZW1zJCx0aGlzLnN0b3JlLnNlbGVjdChOYS5nZXRQYWdlU2l6ZSldKS5waXBlKEwoKFtpLHJdKT0+TWF0aC5jZWlsKGkubGVuZ3RoL3IpKSksdGhpcy5pc0dyb3VwRXhwYW5kZWQkPXRoaXMuZ3JvdXBOYW1lJC5waXBlKHVpKGk9Pm51bGwhPT1pP3RoaXMuc3RvcmUuc2VsZWN0KExJLGkpOlh0KCEwKSkpLHRoaXMuc2hvd1BhZ2luYXRpb25Db250cm9scyQ9dGhpcy5udW1QYWdlcyQucGlwZShMKGk9Pmk+MSkpLHRoaXMubm9ybWFsaXplZFBhZ2VJbmRleCQ9THQoW3RoaXMucGFnZUluZGV4JCx0aGlzLm51bVBhZ2VzJF0pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxrdCgoW2kscl0pPT57MCE9PXImJihpPj1yP3RoaXMucGFnZUluZGV4JC5uZXh0KHItMSk6aTwwJiZ0aGlzLnBhZ2VJbmRleCQubmV4dCgwKSl9KSxMKChbaSxyXSk9Pk1hdGgubWluKE1hdGgubWF4KGksMCksci0xKSksTWEoMSkpLHRoaXMucGFnZWRJdGVtcyQ9THQoW3RoaXMuaXRlbXMkLHRoaXMuc3RvcmUuc2VsZWN0KE5hLmdldFBhZ2VTaXplKSx0aGlzLm5vcm1hbGl6ZWRQYWdlSW5kZXgkLHRoaXMuaXNHcm91cEV4cGFuZGVkJF0pLnBpcGUoTCgoW2kscixvLHNdKT0+aS5zbGljZShyKm8scipvKyhzP3I6MCkpKSksdGhpcy5jYXJkTWluV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KGR2KX1uZ09uQ2hhbmdlcyhlKXtlLmNhcmRJZHNXaXRoTWV0YWRhdGEmJnRoaXMuaXRlbXMkLm5leHQodGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhKSxlLmdyb3VwTmFtZSYmdGhpcy5ncm91cE5hbWUkLm5leHQodGhpcy5ncm91cE5hbWUpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1vblBhZ2VJbmRleENoYW5nZWQoZSl7dGhpcy5wYWdlSW5kZXgkLm5leHQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JpZCJdXSxpbnB1dHM6e2dyb3VwTmFtZToiZ3JvdXBOYW1lIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGZlYXR1cmVzOltGdF0sZGVjbHM6Nyx2YXJzOjE5LGNvbnN0czpbWzMsImlzR3JvdXBFeHBhbmRlZCIsInBhZ2VJbmRleCIsIm51bVBhZ2VzIiwic2hvd1BhZ2luYXRpb25Db250cm9scyIsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkTWluV2lkdGgiLCJjYXJkT2JzZXJ2ZXIiLCJwYWdlSW5kZXhDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiLDApLFAoInBhZ2VJbmRleENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUGFnZUluZGV4Q2hhbmdlZChvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLEIoNCwiYXN5bmMiKSxCKDUsImFzeW5jIiksQig2LCJhc3luYyIpLHYoKSksMiZlJiZ5KCJpc0dyb3VwRXhwYW5kZWQiLFUoMSw3LGkuaXNHcm91cEV4cGFuZGVkJCkpKCJwYWdlSW5kZXgiLFUoMiw5LGkubm9ybWFsaXplZFBhZ2VJbmRleCQpKSgibnVtUGFnZXMiLFUoMywxMSxpLm51bVBhZ2VzJCkpKCJzaG93UGFnaW5hdGlvbkNvbnRyb2xzIixVKDQsMTMsaS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzJCkpKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixVKDUsMTUsaS5wYWdlZEl0ZW1zJCkpKCJjYXJkTWluV2lkdGgiLFUoNiwxNyxpLmNhcmRNaW5XaWR0aCQpKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcil9LGRlcGVuZGVuY2llczpbU3BlLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBYWGUobix0KXtpZigxJm4mJihfKDAsInNwYW4iLDcpLEEoMSksQigyLCJudW1iZXIiKSx2KCkpLDImbil7bGV0IGU9UygpO0MoMSksamUoIiIsVSgyLDEsZS5udW1iZXJPZkNhcmRzKSwiIGNhcmRzIil9fWZ1bmN0aW9uIFFYZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsOCl9ZnVuY3Rpb24gS1hlKG4sdCl7MSZuJiZPKDAsIm1hdC1pY29uIiw5KX12YXIgRXBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmdyb3VwRXhwYW5zaW9uVG9nZ2xlZD1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXItY29tcG9uZW50Il1dLGlucHV0czp7Z3JvdXBOYW1lOiJncm91cE5hbWUiLG51bWJlck9mQ2FyZHM6Im51bWJlck9mQ2FyZHMiLGlzR3JvdXBFeHBhbmRlZDoiaXNHcm91cEV4cGFuZGVkIn0sb3V0cHV0czp7Z3JvdXBFeHBhbnNpb25Ub2dnbGVkOiJncm91cEV4cGFuc2lvblRvZ2dsZWQifSxkZWNsczo5LHZhcnM6NSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0kbG9jYWxpemVgOkEgYnV0dG9uIHRoYXQgYWxsb3dzIHVzZXIgdG8gZXhwYW5kIGEgdGFnIGdyb3VwLuKQn2ZmYWExMTQ3MWI4NzhhNmRmZmUyZTY4YzZmMzcwNjRhOWUwNzQ4NTPikJ81Mzg2MDU0MzI1Mjc0Nzc5MjU4OkV4cGFuZCBncm91cGAsW1siYXJpYS1sYWJlbCIsdCwxLCJncm91cC10b29sYmFyIiwzLCJjbGljayJdLFsxLCJncm91cC10aXRsZS13cmFwcGVyIl0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIiwzLCJ0aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWzEsImV4cGFuZC1ncm91cC1pY29uIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJleHBhbmRNb3JlIiwiIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbInN2Z0ljb24iLCJleHBhbmRfbGVzc18yNHB4Il0sWyJzdmdJY29uIiwiZXhwYW5kX21vcmVfMjRweCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihfKDAsImJ1dHRvbiIsMCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZ3JvdXBFeHBhbnNpb25Ub2dnbGVkLmVtaXQoKX0pLF8oMSwic3BhbiIsMSkoMiwic3BhbiIsMiksQSgzKSx2KCksRSg0LFhYZSwzLDMsInNwYW4iLDMpLHYoKSxfKDUsInNwYW4iLDQpLEUoNixRWGUsMSwwLCJtYXQtaWNvbiIsNSksRSg3LEtYZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDYscXQpLHYoKSgpKSwyJmUpe2xldCByPSRlKDgpO0MoMiksWmkoInRpdGxlIixpLmdyb3VwTmFtZSksQygxKSx5dChpLmdyb3VwTmFtZSksQygxKSx5KCJuZ0lmIixpLm51bWJlck9mQ2FyZHM+MSksQygyKSx5KCJuZ0lmIixpLmlzR3JvdXBFeHBhbmRlZCkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbQmUsR3QsUWxdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9W19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2NvbG9yOiMyMTIxMjE7dG9wOi0xcHg7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7Zm9udDppbmhlcml0fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfS5jYXJkLWdyb3VwOmZpcnN0LW9mLXR5cGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MH1bX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpwb2ludGVyfS5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWR7Y29sb3I6Izc1NzU3NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVkLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVke2NvbG9yOiM2MTYxNjF9Lmdyb3VwLXRpdGxlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO3RleHQtYWxpZ246bGVmdH0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjE7bWFyZ2luLWxlZnQ6NnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVHBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZ3JvdXBOYW1lPW51bGwsdGhpcy5pc0dyb3VwRXhwYW5kZWQkPVh0KCExKX1uZ09uSW5pdCgpe3RoaXMuaXNHcm91cEV4cGFuZGVkJD1udWxsIT09dGhpcy5ncm91cE5hbWU/dGhpcy5zdG9yZS5zZWxlY3QoTEksdGhpcy5ncm91cE5hbWUpOlh0KCExKX1vbkdyb3VwRXhwYW5zaW9uVG9nZ2xlZCgpe2lmKG51bGw9PT10aGlzLmdyb3VwTmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiBleHBhbnNpb24gY2Fubm90IGJlIHRvZ2dsZWQgd2hlbiBncm91cE5hbWUgaXMgbnVsbCIpO3RoaXMuc3RvcmUuZGlzcGF0Y2goYVIoe3RhZ0dyb3VwOnRoaXMuZ3JvdXBOYW1lfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXIiXV0saW5wdXRzOntncm91cE5hbWU6Imdyb3VwTmFtZSIsbnVtYmVyT2ZDYXJkczoibnVtYmVyT2ZDYXJkcyJ9LGRlY2xzOjIsdmFyczo1LGNvbnN0czpbWzMsIm51bWJlck9mQ2FyZHMiLCJpc0dyb3VwRXhwYW5kZWQiLCJncm91cE5hbWUiLCJncm91cEV4cGFuc2lvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1ldHJpY3MtY2FyZC1ncm91cC10b29sYmFyLWNvbXBvbmVudCIsMCksUCgiZ3JvdXBFeHBhbnNpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uR3JvdXBFeHBhbnNpb25Ub2dnbGVkKCl9KSxCKDEsImFzeW5jIiksdigpKSwyJmUmJnkoIm51bWJlck9mQ2FyZHMiLGkubnVtYmVyT2ZDYXJkcykoImlzR3JvdXBFeHBhbmRlZCIsVSgxLDMsaS5pc0dyb3VwRXhwYW5kZWQkKSkoImdyb3VwTmFtZSIsaS5ncm91cE5hbWUpfSxkZXBlbmRlbmNpZXM6W0VwZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gJFhlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDEpLE8oMSwibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXIiLDIpKDIsIm1ldHJpY3MtY2FyZC1ncmlkIiwzKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKCk7QygxKSx5KCJudW1iZXJPZkNhcmRzIixlLml0ZW1zLmxlbmd0aCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpLEMoMSkseSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsZS5pdGVtcykoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpKCJncm91cE5hbWUiLGUuZ3JvdXBOYW1lKX19dmFyIERwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5QbHVnaW5UeXBlPXJpfXRyYWNrQnlHcm91cChlLGkpe3JldHVybiBpLmdyb3VwTmFtZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnQiXV0saW5wdXRzOntjYXJkR3JvdXBzOiJjYXJkR3JvdXBzIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjEsdmFyczoyLGNvbnN0czpbWyJjbGFzcyIsImNhcmQtZ3JvdXAiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjYXJkLWdyb3VwIl0sWzMsIm51bWJlck9mQ2FyZHMiLCJncm91cE5hbWUiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciIsImdyb3VwTmFtZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRSgwLCRYZSwzLDUsImRpdiIsMCksMiZlJiZ5KCJuZ0Zvck9mIixpLmNhcmRHcm91cHMpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeUdyb3VwKX0sZGVwZW5kZW5jaWVzOltkbixBYixUcGVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxBcGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5jYXJkR3JvdXBzJD10aGlzLnN0b3JlLnNlbGVjdChtZykucGlwZShmcih0aGlzLnN0b3JlLnNlbGVjdChuZCkpLEwoKFtpLHJdKT0+ci5zaXplP2kuZmlsdGVyKG89PnIuaGFzKG8ucGx1Z2luKSk6aSksTChpPT5mUihpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwcyJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6Mix2YXJzOjQsY29uc3RzOltbMywiY2FyZEdyb3VwcyIsImNhcmRPYnNlcnZlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE8oMCwibWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnQiLDApLEIoMSwiYXN5bmMiKSksMiZlJiZ5KCJjYXJkR3JvdXBzIixVKDEsMixpLmNhcmRHcm91cHMkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpfSxkZXBlbmRlbmNpZXM6W0RwZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gblFlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiksQSgxKSx2KCkpLDImbil7bGV0IGU9UygpO0MoMSksamUoIiBhbmQgIixlLmdldFBsdWdpblR5cGVGaWx0ZXJTdHJpbmcoZS5wbHVnaW5UeXBlcyksIiB2aXN1YWxpemF0aW9uIGZpbHRlciIpfX12YXIgSXBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLlBsdWdpblR5cGU9cmksdGhpcy5saXN0Rm9ybWF0dGVyPW5ldyBJbnRsLkxpc3RGb3JtYXQodm9pZCAwLHtzdHlsZToibG9uZyIsdHlwZToiZGlzanVuY3Rpb24ifSl9Z2V0UGx1Z2luVHlwZUZpbHRlclN0cmluZyhlKXtsZXQgaT1bLi4uZV0ubWFwKHI9Pntzd2l0Y2gocil7Y2FzZSByaS5TQ0FMQVJTOnJldHVybiJzY2FsYXIiO2Nhc2UgcmkuSU1BR0VTOnJldHVybiJpbWFnZSI7Y2FzZSByaS5ISVNUT0dSQU1TOnJldHVybiJoaXN0b2dyYW0iO2RlZmF1bHQ6dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFBsZWFzZSBpbXBsZW1lbnQgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgcGx1Z2luIHR5cGU6ICR7cn1gKX19KTtyZXR1cm4gdGhpcy5saXN0Rm9ybWF0dGVyLmZvcm1hdChpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1lbXB0eS10YWctbWF0Y2gtY29tcG9uZW50Il1dLGlucHV0czp7cGx1Z2luVHlwZXM6InBsdWdpblR5cGVzIix0YWdGaWx0ZXJSZWdleDoidGFnRmlsdGVyUmVnZXgiLHRhZ0NvdW50czoidGFnQ291bnRzIn0sZGVjbHM6Nix2YXJzOjUsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKEEoMCwiTm8gbWF0Y2hlcyBmb3IgdGFnIGZpbHRlciAiKSxfKDEsImNvZGUiKSxBKDIpLHYoKSxFKDMsblFlLDIsMSwic3BhbiIsMCksQSg0KSxCKDUsIm51bWJlciIpKSwyJmUmJihDKDIpLGplKCIvIixpLnRhZ0ZpbHRlclJlZ2V4LCIvIiksQygxKSx5KCJuZ0lmIixpLnBsdWdpblR5cGVzLnNpemUpLEMoMSksamUoIiBvdXQgb2YgIixVKDUsMyxpLnRhZ0NvdW50cyksIiB0YWdzLiIpKX0sZGVwZW5kZW5jaWVzOltCZSxRbF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUHBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMucGx1Z2luVHlwZXMkPXRoaXMuc3RvcmUuc2VsZWN0KG5kKSx0aGlzLnRhZ0ZpbHRlclJlZ2V4JD10aGlzLnN0b3JlLnNlbGVjdChYYyksdGhpcy50YWdDb3VudHMkPXRoaXMuc3RvcmUuc2VsZWN0KG1nKS5waXBlKEwoaT0+bmV3IFNldChpLm1hcCgoe3RhZzpyfSk9PnIpKS5zaXplKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaCJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJwbHVnaW5UeXBlcyIsInRhZ0ZpbHRlclJlZ2V4IiwidGFnQ291bnRzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaC1jb21wb25lbnQiLDApLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpKSwyJmUmJnkoInBsdWdpblR5cGVzIixVKDEsMyxpLnBsdWdpblR5cGVzJCkpKCJ0YWdGaWx0ZXJSZWdleCIsVSgyLDUsaS50YWdGaWx0ZXJSZWdleCQpKSgidGFnQ291bnRzIixVKDMsNyxpLnRhZ0NvdW50cyQpKX0sZGVwZW5kZW5jaWVzOltJcGUsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIG9RZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsNiksQSgxKSxCKDIsIm51bWJlciIpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSxqZSgiIixVKDIsMSxlLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoKSwiIGNhcmRzIil9fWZ1bmN0aW9uIHNRZShuLHQpezEmbiYmTygwLCJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaCIsNyl9dmFyIFJwZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWZpbHRlcmVkLXZpZXctY29tcG9uZW50Il1dLGlucHV0czp7aXNFbXB0eU1hdGNoOiJpc0VtcHR5TWF0Y2giLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIn0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbMSwiZ3JvdXAtdG9vbGJhciJdLFsxLCJncm91cC10ZXh0Il0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIl0sWyJjbGFzcyIsImdyb3VwLWNhcmQtY291bnQiLDQsIm5nSWYiXSxbImNsYXNzIiwid2FybiIsNCwibmdJZiJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbMSwid2FybiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwKSgxLCJzcGFuIiwxKSgyLCJzcGFuIiwyKSxBKDMsIlRhZ3MgbWF0Y2hpbmcgZmlsdGVyIiksdigpLEUoNCxvUWUsMywzLCJzcGFuIiwzKSx2KCkoKSxFKDUsc1FlLDEsMCwibWV0cmljcy1lbXB0eS10YWctbWF0Y2giLDQpLE8oNiwibWV0cmljcy1jYXJkLWdyaWQiLDUpKSwyJmUmJihDKDQpLHkoIm5nSWYiLGkuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGg+MSksQygxKSx5KCJuZ0lmIixpLmlzRW1wdHlNYXRjaCksQygxKSx5KCJjYXJkSWRzV2l0aE1ldGFkYXRhIixpLmNhcmRJZHNXaXRoTWV0YWRhdGEpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSl9LGRlcGVuZGVuY2llczpbQmUsQWIsUHBlLFFsXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfS5ncm91cC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmV9Lmdyb3VwLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjE2MTYxO21hcmdpbi1sZWZ0OjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1tZXRyaWNzLWVtcHR5LXRhZy1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTNweDtmb250LXN0eWxlOml0YWxpYztwYWRkaW5nOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpibG9ja31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE9wZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEkPXRoaXMuc3RvcmUuc2VsZWN0KG1nKS5waXBlKGZyKHRoaXMuc3RvcmUuc2VsZWN0KG5kKSksTCgoW2kscl0pPT5yLnNpemU/aS5maWx0ZXIobz0+ci5oYXMoby5wbHVnaW4pKTppKSxmcih0aGlzLnN0b3JlLnNlbGVjdChYYykpLEhyKDIwMCksTCgoW2kscl0pPT57dHJ5e3JldHVybntjYXJkTGlzdDppLHJlZ2V4Om5ldyBSZWdFeHAociwiaSIpfX1jYXRjaHtyZXR1cm57Y2FyZExpc3Q6aSxyZWdleDpudWxsfX19KSxZZSgoe3JlZ2V4Oml9KT0+bnVsbCE9PWkpLEwoKHtjYXJkTGlzdDppLHJlZ2V4OnJ9KT0+aS5maWx0ZXIoKHt0YWc6b30pPT5yLnRlc3QobykpKSx5aSgoaSxyKT0+aS5sZW5ndGg9PT1yLmxlbmd0aCYmaS5ldmVyeSgobyxzKT0+by5jYXJkSWQ9PT1yW3NdLmNhcmRJZCkpLFRzKCksem4oW10pKSx0aGlzLmlzRW1wdHlNYXRjaCQ9dGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhJC5waXBlKGZyKHRoaXMuc3RvcmUuc2VsZWN0KG1nKSksTCgoW2kscl0pPT5Cb29sZWFuKHIubGVuZ3RoKSYmMD09PWkubGVuZ3RoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWZpbHRlcmVkLXZpZXciXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjMsdmFyczo3LGNvbnN0czpbWzMsImlzRW1wdHlNYXRjaCIsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsIm1ldHJpY3MtZmlsdGVyZWQtdmlldy1jb21wb25lbnQiLDApLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIikpLDImZSYmeSgiaXNFbXB0eU1hdGNoIixVKDEsMyxpLmlzRW1wdHlNYXRjaCQpKSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsVSgyLDUsaS5jYXJkSWRzV2l0aE1ldGFkYXRhJCkpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKX0sZGVwZW5kZW5jaWVzOltScGUsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHVRZT1bInBhbmVsIl07ZnVuY3Rpb24gZFFlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDAsMSksVm4oMiksdigpKSwyJm4pe2xldCBlPXQuaWQsaT1TKCk7eSgiaWQiLGkuaWQpKCJuZ0NsYXNzIixpLl9jbGFzc0xpc3QpLHplKCJhcmlhLWxhYmVsIixpLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsaS5fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieShlKSl9fXZhciBwUWU9WyIqIl0saFFlPTAsZlFlPXFvKGNsYXNze30pLGtwZT1uZXcgcGUoIm1hdC1hdXRvY29tcGxldGUtZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybnthdXRvQWN0aXZlRmlyc3RPcHRpb246ITEsYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbjohMX19fSksZ1FlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBmUWV7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzPVNuLkVNUFRZLHRoaXMuc2hvd1BhbmVsPSExLHRoaXMuX2lzT3Blbj0hMSx0aGlzLmRpc3BsYXlXaXRoPW51bGwsdGhpcy5vcHRpb25TZWxlY3RlZD1uZXcgRyx0aGlzLm9wZW5lZD1uZXcgRyx0aGlzLmNsb3NlZD1uZXcgRyx0aGlzLm9wdGlvbkFjdGl2YXRlZD1uZXcgRyx0aGlzLl9jbGFzc0xpc3Q9e30sdGhpcy5pZD0ibWF0LWF1dG9jb21wbGV0ZS0iK2hRZSsrLHRoaXMuaW5lcnRHcm91cHM9bz8uU0FGQVJJfHwhMSx0aGlzLl9hdXRvQWN0aXZlRmlyc3RPcHRpb249ISFyLmF1dG9BY3RpdmVGaXJzdE9wdGlvbix0aGlzLl9hdXRvU2VsZWN0QWN0aXZlT3B0aW9uPSEhci5hdXRvU2VsZWN0QWN0aXZlT3B0aW9ufWdldCBpc09wZW4oKXtyZXR1cm4gdGhpcy5faXNPcGVuJiZ0aGlzLnNob3dQYW5lbH1nZXQgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbn1zZXQgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uKGUpe3RoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj1SdChlKX1nZXQgYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbigpe3JldHVybiB0aGlzLl9hdXRvU2VsZWN0QWN0aXZlT3B0aW9ufXNldCBhdXRvU2VsZWN0QWN0aXZlT3B0aW9uKGUpe3RoaXMuX2F1dG9TZWxlY3RBY3RpdmVPcHRpb249UnQoZSl9c2V0IGNsYXNzTGlzdChlKXt0aGlzLl9jbGFzc0xpc3Q9ZSYmZS5sZW5ndGg/ZnVuY3Rpb24obix0PS9ccysvKXtsZXQgZT1bXTtpZihudWxsIT1uKXtsZXQgaT1BcnJheS5pc0FycmF5KG4pP246YCR7bn1gLnNwbGl0KHQpO2ZvcihsZXQgciBvZiBpKXtsZXQgbz1gJHtyfWAudHJpbSgpO28mJmUucHVzaChvKX19cmV0dXJuIGV9KGUpLnJlZHVjZSgoaSxyKT0+KGlbcl09ITAsaSkse30pOnt9LHRoaXMuX3NldFZpc2liaWxpdHlDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZT0iIn1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9rZXlNYW5hZ2VyPW5ldyB3dih0aGlzLm9wdGlvbnMpLndpdGhXcmFwKCksdGhpcy5fYWN0aXZlT3B0aW9uQ2hhbmdlcz10aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5zdWJzY3JpYmUoZT0+e3RoaXMuaXNPcGVuJiZ0aGlzLm9wdGlvbkFjdGl2YXRlZC5lbWl0KHtzb3VyY2U6dGhpcyxvcHRpb246dGhpcy5vcHRpb25zLnRvQXJyYXkoKVtlXXx8bnVsbH0pfSksdGhpcy5fc2V0VmlzaWJpbGl0eSgpfW5nT25EZXN0cm95KCl7dGhpcy5fYWN0aXZlT3B0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpfV9zZXRTY3JvbGxUb3AoZSl7dGhpcy5wYW5lbCYmKHRoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9ZSl9X2dldFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLnBhbmVsP3RoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A6MH1fc2V0VmlzaWJpbGl0eSgpe3RoaXMuc2hvd1BhbmVsPSEhdGhpcy5vcHRpb25zLmxlbmd0aCx0aGlzLl9zZXRWaXNpYmlsaXR5Q2xhc3Nlcyh0aGlzLl9jbGFzc0xpc3QpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9lbWl0U2VsZWN0RXZlbnQoZSl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLm9wdGlvbj1lfX0odGhpcyxlKTt0aGlzLm9wdGlvblNlbGVjdGVkLmVtaXQoaSl9X2dldFBhbmVsQXJpYUxhYmVsbGVkYnkoZSl7cmV0dXJuIHRoaXMuYXJpYUxhYmVsP251bGw6dGhpcy5hcmlhTGFiZWxsZWRieT8oZT9lKyIgIjoiIikrdGhpcy5hcmlhTGFiZWxsZWRieTplfV9zZXRWaXNpYmlsaXR5Q2xhc3NlcyhlKXtlW3RoaXMuX3Zpc2libGVDbGFzc109dGhpcy5zaG93UGFuZWwsZVt0aGlzLl9oaWRkZW5DbGFzc109IXRoaXMuc2hvd1BhbmVsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKG5uKSxNKFJlKSxNKGtwZSksTShvaSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKG90KFZpLDcpLG90KHVRZSw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS50ZW1wbGF0ZT1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5wYW5lbD1yLmZpcnN0KX19LGlucHV0czp7YXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxkaXNwbGF5V2l0aDoiZGlzcGxheVdpdGgiLGF1dG9BY3RpdmVGaXJzdE9wdGlvbjoiYXV0b0FjdGl2ZUZpcnN0T3B0aW9uIixhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiJhdXRvU2VsZWN0QWN0aXZlT3B0aW9uIixwYW5lbFdpZHRoOiJwYW5lbFdpZHRoIixjbGFzc0xpc3Q6WyJjbGFzcyIsImNsYXNzTGlzdCJdfSxvdXRwdXRzOntvcHRpb25TZWxlY3RlZDoib3B0aW9uU2VsZWN0ZWQiLG9wZW5lZDoib3BlbmVkIixjbG9zZWQ6ImNsb3NlZCIsb3B0aW9uQWN0aXZhdGVkOiJvcHRpb25BY3RpdmF0ZWQifSxmZWF0dXJlczpbdHRdfSksbn0pKCkscWs9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGdRZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdmlzaWJsZUNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLXZpc2libGUiLHRoaXMuX2hpZGRlbkNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLWhpZGRlbiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtYXV0b2NvbXBsZXRlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihFaShyLHJ3LDUpLEVpKHIsT3MsNSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkub3B0aW9uR3JvdXBzPW8pLE5lKG89TGUoKSkmJihpLm9wdGlvbnM9byl9fSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUiXSxpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZSJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6aXcsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOnBRZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sicm9sZSIsImxpc3Rib3giLDEsIm1hdC1hdXRvY29tcGxldGUtcGFuZWwiLDMsImlkIiwibmdDbGFzcyJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih4aSgpLEUoMCxkUWUsMyw0LCJuZy10ZW1wbGF0ZSIpKX0sZGVwZW5kZW5jaWVzOltGbl0sc3R5bGVzOlsiLm1hdC1hdXRvY29tcGxldGUtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3Zpc2liaWxpdHk6aGlkZGVuO21heC13aWR0aDpub25lO21heC1oZWlnaHQ6MjU2cHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHh9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS12aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLWhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC1hYm92ZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4fS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtZGl2aWRlci1ob3Jpem9udGFse21hcmdpbi10b3A6LTFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse291dGxpbmU6c29saWQgMXB4fW1hdC1hdXRvY29tcGxldGV7ZGlzcGxheTpub25lfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEZwZT1uZXcgcGUoIm1hdC1hdXRvY29tcGxldGUtc2Nyb2xsLXN0cmF0ZWd5IiksdlFlPXtwcm92aWRlOkZwZSxkZXBzOlt0cl0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19LHlRZT17cHJvdmlkZTpObyx1c2VFeGlzdGluZzpKbigoKT0+JGcpLG11bHRpOiEwfSxiUWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkLHApe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9vdmVybGF5PWksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1yLHRoaXMuX3pvbmU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMuX2Rpcj1sLHRoaXMuX2Zvcm1GaWVsZD1jLHRoaXMuX2RvY3VtZW50PXUsdGhpcy5fdmlld3BvcnRSdWxlcj1kLHRoaXMuX2RlZmF1bHRzPXAsdGhpcy5fY29tcG9uZW50RGVzdHJveWVkPSExLHRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkPSExLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbj1Tbi5FTVBUWSx0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9ITAsdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbT1uZXcga2UsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXI9KCk9Pnt0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudHx8dGhpcy5wYW5lbE9wZW59LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMucG9zaXRpb249ImF1dG8iLHRoaXMuYXV0b2NvbXBsZXRlQXR0cmlidXRlPSJvZmYiLHRoaXMuX292ZXJsYXlBdHRhY2hlZD0hMSx0aGlzLm9wdGlvblNlbGVjdGlvbnM9UWEoKCk9PntsZXQgaD10aGlzLmF1dG9jb21wbGV0ZT90aGlzLmF1dG9jb21wbGV0ZS5vcHRpb25zOm51bGw7cmV0dXJuIGg/aC5jaGFuZ2VzLnBpcGUoem4oaCksdWkoKCk9Pkp0KC4uLmgubWFwKGY9PmYub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX3pvbmUub25TdGFibGUucGlwZShRdCgxKSx1aSgoKT0+dGhpcy5vcHRpb25TZWxlY3Rpb25zKSl9KSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hfWdldCBhdXRvY29tcGxldGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZH1zZXQgYXV0b2NvbXBsZXRlRGlzYWJsZWQoZSl7dGhpcy5fYXV0b2NvbXBsZXRlRGlzYWJsZWQ9UnQoZSl9bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGU8InUiJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5lLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyKSl9bmdPbkNoYW5nZXMoZSl7ZS5wb3NpdGlvbiYmdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmKHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kpLHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCkpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGU8InUiJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyKSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZD0hMCx0aGlzLl9kZXN0cm95UGFuZWwoKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLmNvbXBsZXRlKCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9vdmVybGF5QXR0YWNoZWQmJnRoaXMuYXV0b2NvbXBsZXRlLnNob3dQYW5lbH1vcGVuUGFuZWwoKXt0aGlzLl9hdHRhY2hPdmVybGF5KCksdGhpcy5fZmxvYXRMYWJlbCgpfWNsb3NlUGFuZWwoKXt0aGlzLl9yZXNldExhYmVsKCksdGhpcy5fb3ZlcmxheUF0dGFjaGVkJiYodGhpcy5wYW5lbE9wZW4mJnRoaXMuX3pvbmUucnVuKCgpPT57dGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKX0pLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSExLHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb249bnVsbCx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkmJih0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZHx8dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpKX11cGRhdGVQb3NpdGlvbigpe3RoaXMuX292ZXJsYXlBdHRhY2hlZCYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfWdldCBwYW5lbENsb3NpbmdBY3Rpb25zKCl7cmV0dXJuIEp0KHRoaXMub3B0aW9uU2VsZWN0aW9ucyx0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci50YWJPdXQucGlwZShZZSgoKT0+dGhpcy5fb3ZlcmxheUF0dGFjaGVkKSksdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbSx0aGlzLl9nZXRPdXRzaWRlQ2xpY2tTdHJlYW0oKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKFllKCgpPT50aGlzLl9vdmVybGF5QXR0YWNoZWQpKTpYdCgpKS5waXBlKEwoZT0+ZSBpbnN0YW5jZW9mIG53P2U6bnVsbCkpfWdldCBhY3RpdmVPcHRpb24oKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyP3RoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW06bnVsbH1fZ2V0T3V0c2lkZUNsaWNrU3RyZWFtKCl7cmV0dXJuIEp0KF9pKHRoaXMuX2RvY3VtZW50LCJjbGljayIpLF9pKHRoaXMuX2RvY3VtZW50LCJhdXhjbGljayIpLF9pKHRoaXMuX2RvY3VtZW50LCJ0b3VjaGVuZCIpKS5waXBlKFllKGU9PntsZXQgaT1RYyhlKSxyPXRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDpudWxsLG89dGhpcy5jb25uZWN0ZWRUbz90aGlzLmNvbm5lY3RlZFRvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDpudWxsO3JldHVybiB0aGlzLl9vdmVybGF5QXR0YWNoZWQmJmkhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQmJnRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQmJighcnx8IXIuY29udGFpbnMoaSkpJiYoIW98fCFvLmNvbnRhaW5zKGkpKSYmISF0aGlzLl9vdmVybGF5UmVmJiYhdGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5jb250YWlucyhpKX0pKX13cml0ZVZhbHVlKGUpe1Byb21pc2UucmVzb2x2ZShudWxsKS50aGVuKCgpPT50aGlzLl9hc3NpZ25PcHRpb25WYWx1ZShlKSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmRpc2FibGVkPWV9X2hhbmRsZUtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9a3IoZSk7aWYoMjc9PT1pJiYhciYmZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlT3B0aW9uJiYxMz09PWkmJnRoaXMucGFuZWxPcGVuJiYhcil0aGlzLmFjdGl2ZU9wdGlvbi5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSxlLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBpZih0aGlzLmF1dG9jb21wbGV0ZSl7bGV0IG89dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSxzPTM4PT09aXx8NDA9PT1pOzk9PT1pfHxzJiYhciYmdGhpcy5wYW5lbE9wZW4/dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIub25LZXlkb3duKGUpOnMmJnRoaXMuX2Nhbk9wZW4oKSYmdGhpcy5vcGVuUGFuZWwoKSwoc3x8dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSE9PW8pJiYodGhpcy5fc2Nyb2xsVG9PcHRpb24odGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4fHwwKSx0aGlzLmF1dG9jb21wbGV0ZS5hdXRvU2VsZWN0QWN0aXZlT3B0aW9uJiZ0aGlzLmFjdGl2ZU9wdGlvbiYmKHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb258fCh0aGlzLl92YWx1ZUJlZm9yZUF1dG9TZWxlY3Rpb249dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlKSx0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9uPXRoaXMuYWN0aXZlT3B0aW9uLHRoaXMuX2Fzc2lnbk9wdGlvblZhbHVlKHRoaXMuYWN0aXZlT3B0aW9uLnZhbHVlKSkpfX1faGFuZGxlSW5wdXQoZSl7bGV0IGk9ZS50YXJnZXQscj1pLnZhbHVlOyJudW1iZXIiPT09aS50eXBlJiYocj0iIj09cj9udWxsOnBhcnNlRmxvYXQocikpLHRoaXMuX3ByZXZpb3VzVmFsdWUhPT1yJiYodGhpcy5fcHJldmlvdXNWYWx1ZT1yLHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb249bnVsbCx0aGlzLl9vbkNoYW5nZShyKSx0aGlzLl9jYW5PcGVuKCkmJnRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1lLnRhcmdldCYmdGhpcy5vcGVuUGFuZWwoKSl9X2hhbmRsZUZvY3VzKCl7dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzP3RoaXMuX2Nhbk9wZW4oKSYmKHRoaXMuX3ByZXZpb3VzVmFsdWU9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlLHRoaXMuX2F0dGFjaE92ZXJsYXkoKSx0aGlzLl9mbG9hdExhYmVsKCEwKSk6dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzPSEwfV9oYW5kbGVDbGljaygpe3RoaXMuX2Nhbk9wZW4oKSYmIXRoaXMucGFuZWxPcGVuJiZ0aGlzLm9wZW5QYW5lbCgpfV9mbG9hdExhYmVsKGU9ITEpe3RoaXMuX2Zvcm1GaWVsZCYmImF1dG8iPT09dGhpcy5fZm9ybUZpZWxkLmZsb2F0TGFiZWwmJihlP3RoaXMuX2Zvcm1GaWVsZC5fYW5pbWF0ZUFuZExvY2tMYWJlbCgpOnRoaXMuX2Zvcm1GaWVsZC5mbG9hdExhYmVsPSJhbHdheXMiLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMCl9X3Jlc2V0TGFiZWwoKXt0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWwmJih0aGlzLl9mb3JtRmllbGQuZmxvYXRMYWJlbD0iYXV0byIsdGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsPSExKX1fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpe3JldHVybiBKdCh0aGlzLl96b25lLm9uU3RhYmxlLnBpcGUoUXQoMSkpLHRoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuY2hhbmdlcy5waXBlKGt0KCgpPT50aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnJlYXBwbHlMYXN0UG9zaXRpb24oKSksT2woMCkpKS5waXBlKHVpKCgpPT4odGhpcy5fem9uZS5ydW4oKCk9PntsZXQgcj10aGlzLnBhbmVsT3Blbjt0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSx0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLnBhbmVsT3BlbiYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHIhPT10aGlzLnBhbmVsT3BlbiYmKHRoaXMucGFuZWxPcGVuP3RoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCk6dGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKSl9KSx0aGlzLnBhbmVsQ2xvc2luZ0FjdGlvbnMpKSxRdCgxKSkuc3Vic2NyaWJlKHI9PnRoaXMuX3NldFZhbHVlQW5kQ2xvc2UocikpfV9kZXN0cm95UGFuZWwoKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5jbG9zZVBhbmVsKCksdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKX1fYXNzaWduT3B0aW9uVmFsdWUoZSl7bGV0IGk9dGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoP3RoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKGUpOmU7dGhpcy5fdXBkYXRlTmF0aXZlSW5wdXRWYWx1ZShpPz8iIil9X3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUoZSl7dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5fY29udHJvbC52YWx1ZT1lOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT1lLHRoaXMuX3ByZXZpb3VzVmFsdWU9ZX1fc2V0VmFsdWVBbmRDbG9zZShlKXtsZXQgaT1lP2Uuc291cmNlOnRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb247aSYmKHRoaXMuX2NsZWFyUHJldmlvdXNTZWxlY3RlZE9wdGlvbihpKSx0aGlzLl9hc3NpZ25PcHRpb25WYWx1ZShpLnZhbHVlKSx0aGlzLl9vbkNoYW5nZShpLnZhbHVlKSx0aGlzLmF1dG9jb21wbGV0ZS5fZW1pdFNlbGVjdEV2ZW50KGkpLHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpKSx0aGlzLmNsb3NlUGFuZWwoKX1fY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKGUpe3RoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuZm9yRWFjaChpPT57aSE9PWUmJmkuc2VsZWN0ZWQmJmkuZGVzZWxlY3QoKX0pfV9hdHRhY2hPdmVybGF5KCl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZjtlPyh0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkpLGUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSkpOih0aGlzLl9wb3J0YWw9bmV3IGtzKHRoaXMuYXV0b2NvbXBsZXRlLnRlbXBsYXRlLHRoaXMuX3ZpZXdDb250YWluZXJSZWYse2lkOnRoaXMuX2Zvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpfSksZT10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9nZXRPdmVybGF5Q29uZmlnKCkpLHRoaXMuX292ZXJsYXlSZWY9ZSx0aGlzLl9oYW5kbGVPdmVybGF5RXZlbnRzKGUpLHRoaXMuX3ZpZXdwb3J0U3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYW5lbE9wZW4mJmUmJmUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSl9KSksZSYmIWUuaGFzQXR0YWNoZWQoKSYmKGUuYXR0YWNoKHRoaXMuX3BvcnRhbCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpKTtsZXQgaT10aGlzLnBhbmVsT3Blbjt0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSEwLHRoaXMucGFuZWxPcGVuJiZpIT09dGhpcy5wYW5lbE9wZW4mJnRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCl9X2dldE92ZXJsYXlDb25maWcoKXtyZXR1cm4gbmV3IHNjKHtwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksd2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpLGRpcmVjdGlvbjp0aGlzLl9kaXIscGFuZWxDbGFzczp0aGlzLl9kZWZhdWx0cz8ub3ZlcmxheVBhbmVsQ2xhc3N9KX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7bGV0IGU9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZ2V0Q29ubmVjdGVkRWxlbWVudCgpKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSk7cmV0dXJuIHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKGUpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9ZSxlfV9zZXRTdHJhdGVneVBvc2l0aW9ucyhlKXtsZXQgcyxpPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoiZW5kIixvdmVybGF5WToidG9wIn1dLHI9dGhpcy5fYWJvdmVDbGFzcyxvPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOnJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSIscGFuZWxDbGFzczpyfV07cz0iYWJvdmUiPT09dGhpcy5wb3NpdGlvbj9vOiJiZWxvdyI9PT10aGlzLnBvc2l0aW9uP2k6Wy4uLmksLi4ub10sZS53aXRoUG9zaXRpb25zKHMpfV9nZXRDb25uZWN0ZWRFbGVtZW50KCl7cmV0dXJuIHRoaXMuY29ubmVjdGVkVG8/dGhpcy5jb25uZWN0ZWRUby5lbGVtZW50UmVmOnRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpOnRoaXMuX2VsZW1lbnR9X2dldFBhbmVsV2lkdGgoKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUucGFuZWxXaWR0aHx8dGhpcy5fZ2V0SG9zdFdpZHRoKCl9X2dldEhvc3RXaWR0aCgpe3JldHVybiB0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1fcmVzZXRBY3RpdmVJdGVtKCl7bGV0IGU9dGhpcy5hdXRvY29tcGxldGU7ZS5hdXRvQWN0aXZlRmlyc3RPcHRpb24/ZS5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTplLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpfV9jYW5PcGVuKCl7bGV0IGU9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiFlLnJlYWRPbmx5JiYhZS5kaXNhYmxlZCYmIXRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQ/LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbFRvT3B0aW9uKGUpe2xldCBpPXRoaXMuYXV0b2NvbXBsZXRlLHI9b3coZSxpLm9wdGlvbnMsaS5vcHRpb25Hcm91cHMpO2lmKDA9PT1lJiYxPT09cilpLl9zZXRTY3JvbGxUb3AoMCk7ZWxzZSBpZihpLnBhbmVsKXtsZXQgbz1pLm9wdGlvbnMudG9BcnJheSgpW2VdO2lmKG8pe2xldCBzPW8uX2dldEhvc3RFbGVtZW50KCksYT1fMihzLm9mZnNldFRvcCxzLm9mZnNldEhlaWdodCxpLl9nZXRTY3JvbGxUb3AoKSxpLnBhbmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtpLl9zZXRTY3JvbGxUb3AoYSl9fX1faGFuZGxlT3ZlcmxheUV2ZW50cyhlKXtlLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoaT0+eygyNz09PWkua2V5Q29kZSYmIWtyKGkpfHwzOD09PWkua2V5Q29kZSYma3IoaSwiYWx0S2V5IikpJiYodGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbiYmKHRoaXMuX3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUodGhpcy5fdmFsdWVCZWZvcmVBdXRvU2VsZWN0aW9uPz8iIiksdGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbj1udWxsKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLm5leHQoKSx0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSxpLnN0b3BQcm9wYWdhdGlvbigpLGkucHJldmVudERlZmF1bHQoKSl9KSxlLm91dHNpZGVQb2ludGVyRXZlbnRzKCkuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0odHIpLE0oT2kpLE0oX3QpLE0obm4pLE0oRnBlKSxNKCRpLDgpLE0oc2csOSksTShIdCw4KSxNKFZhKSxNKGtwZSw4KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4saW5wdXRzOnthdXRvY29tcGxldGU6WyJtYXRBdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGUiXSxwb3NpdGlvbjpbIm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uIiwicG9zaXRpb24iXSxjb25uZWN0ZWRUbzpbIm1hdEF1dG9jb21wbGV0ZUNvbm5lY3RlZFRvIiwiY29ubmVjdGVkVG8iXSxhdXRvY29tcGxldGVBdHRyaWJ1dGU6WyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVBdHRyaWJ1dGUiXSxhdXRvY29tcGxldGVEaXNhYmxlZDpbIm1hdEF1dG9jb21wbGV0ZURpc2FibGVkIiwiYXV0b2NvbXBsZXRlRGlzYWJsZWQiXX0sZmVhdHVyZXM6W0Z0XX0pLG59KSgpLCRnPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBiUWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Fib3ZlQ2xhc3M9Im1hdC1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwibWF0QXV0b2NvbXBsZXRlIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdEF1dG9jb21wbGV0ZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUtdHJpZ2dlciJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJmb2N1c2luIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVGb2N1cygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uVG91Y2hlZCgpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlSW5wdXQobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZUNsaWNrKCl9KSwyJmUmJnplKCJhdXRvY29tcGxldGUiLGkuYXV0b2NvbXBsZXRlQXR0cmlidXRlKSgicm9sZSIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJjb21ib2JveCIpKCJhcmlhLWF1dG9jb21wbGV0ZSIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0IikoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsaS5wYW5lbE9wZW4mJmkuYWN0aXZlT3B0aW9uP2kuYWN0aXZlT3B0aW9uLmlkOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6aS5wYW5lbE9wZW4udG9TdHJpbmcoKSkoImFyaWEtb3ducyIsaS5hdXRvY29tcGxldGVEaXNhYmxlZHx8IWkucGFuZWxPcGVufHxudWxsPT1pLmF1dG9jb21wbGV0ZT9udWxsOmkuYXV0b2NvbXBsZXRlLmlkKSgiYXJpYS1oYXNwb3B1cCIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0Ym94Iil9LGV4cG9ydEFzOlsibWF0QXV0b2NvbXBsZXRlVHJpZ2dlciJdLGZlYXR1cmVzOlskdChbeVFlXSksdHRdfSksbn0pKCksSWI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbdlFlXSxpbXBvcnRzOltzcyxBdixsbixNZSx1ZCxBdixsbl19KSxufSkoKSxZaz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy52YWx1ZT0iIix0aGlzLnBsYWNlaG9sZGVyPSIifW9uSW5wdXRLZXlVcChlKXsiRW50ZXIiPT09ZS5rZXkmJnRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlci5jbG9zZVBhbmVsKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWZpbHRlci1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KCRnLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuYXV0b2NvbXBsZXRlVHJpZ2dlcj1yLmZpcnN0KX19LGlucHV0czp7dmFsdWU6InZhbHVlIixtYXRBdXRvY29tcGxldGU6Im1hdEF1dG9jb21wbGV0ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIn0sZGVjbHM6Mix2YXJzOjQsY29uc3RzOltbInN2Z0ljb24iLCJzZWFyY2hfMjRweCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsInBsYWNlaG9sZGVyIiwibWF0QXV0b2NvbXBsZXRlIiwibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiLCJ2YWx1ZSIsImtleXVwIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJtYXQtaWNvbiIsMCksXygxLCJpbnB1dCIsMSksUCgia2V5dXAiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW5wdXRLZXlVcChvKX0pLHYoKSksMiZlJiYoQygxKSx5KCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlcikoIm1hdEF1dG9jb21wbGV0ZSIsaS5tYXRBdXRvY29tcGxldGUpKCJtYXRBdXRvY29tcGxldGVEaXNhYmxlZCIsIWkubWF0QXV0b2NvbXBsZXRlKSgidmFsdWUiLGkudmFsdWUpKX0sZGVwZW5kZW5jaWVzOlskZyxHdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjEzcHh9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3I7Y29sb3I6Y3VycmVudENvbG9yO2ZvbnQ6aW5oZXJpdDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2ZsZXgtZ3JvdzoxfSJdfSksbn0pKCk7ZnVuY3Rpb24geFFlKG4sdCl7MSZuJiZPKDAsIm1hdC1pY29uIiw3KX1mdW5jdGlvbiBDUWUobix0KXtpZigxJm4mJihfKDAsIm1hdC1vcHRpb24iLDgpLEEoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O3koInZhbHVlIixlKSx6ZSgidGl0bGUiLGUpLEMoMSkseXQoZSl9fWZ1bmN0aW9uIE1RZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2Iiw5KSgxLCJlbSIpLEEoMiksQigzLCJudW1iZXIiKSx2KCkoKSksMiZuKXtsZXQgZT1TKCk7QygyKSxqZSgiYW5kICIsVSgzLDEsZS5jb21wbGV0aW9ucy5sZW5ndGgtMjUpLCIgbW9yZSB0YWdzIG1hdGNoZWQiKX19dmFyIExwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEd9b25Db21wbGV0aW9uQWNjZXB0ZWQoZSl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKE9PZSwiXFwkJiIpfShlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmV0KCJ2YWxpZCIsaS5pc1JlZ2V4RmlsdGVyVmFsaWQpfSxpbnB1dHM6e3JlZ2V4RmlsdGVyVmFsdWU6InJlZ2V4RmlsdGVyVmFsdWUiLGlzUmVnZXhGaWx0ZXJWYWxpZDoiaXNSZWdleEZpbHRlclZhbGlkIixjb21wbGV0aW9uczoiY29tcGxldGlvbnMifSxvdXRwdXRzOntvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGRlY2xzOjcsdmFyczo1LGNvbnN0czpbWzEsInRhZy1maWx0ZXIiXSxbInBsYWNlaG9sZGVyIiwiRmlsdGVyIHRhZ3MgKHJlZ2V4KSIsMywidmFsdWUiLCJtYXRBdXRvY29tcGxldGUiLCJpbnB1dCJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJjbGFzcyIsImVycm9yLWljb24iLCJ0aXRsZSIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDQsIm5nSWYiXSxbMSwidGFnLW9wdGlvbnMiLDMsIm9wdGlvblNlbGVjdGVkIl0sWyJmaWx0ZXJNYXRjaGVzIiwibWF0QXV0b2NvbXBsZXRlIl0sWyJjbGFzcyIsIm9wdGlvbiIsMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJhbmQtbW9yZSIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJ0aXRsZSIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDEsImVycm9yLWljb24iXSxbMSwib3B0aW9uIiwzLCJ2YWx1ZSJdLFsxLCJhbmQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKF8oMCwiZGl2IiwwKSgxLCJ0Yi1maWx0ZXItaW5wdXQiLDEpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChvLnRhcmdldC52YWx1ZSl9KSx2KCksRSgyLHhRZSwxLDAsIm1hdC1pY29uIiwyKSx2KCksXygzLCJtYXQtYXV0b2NvbXBsZXRlIiwzLDQpLFAoIm9wdGlvblNlbGVjdGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNvbXBsZXRpb25BY2NlcHRlZChvLm9wdGlvbi52YWx1ZSl9KSxFKDUsQ1FlLDIsMywibWF0LW9wdGlvbiIsNSksRSg2LE1RZSw0LDMsImRpdiIsNiksdigpKSwyJmUpe2xldCByPSRlKDQpO0MoMSkseSgidmFsdWUiLGkucmVnZXhGaWx0ZXJWYWx1ZSkoIm1hdEF1dG9jb21wbGV0ZSIsciksQygxKSx5KCJuZ0lmIiwhaS5pc1JlZ2V4RmlsdGVyVmFsaWQpLEMoMykseSgibmdGb3JPZiIsbnVsbD09aS5jb21wbGV0aW9ucz9udWxsOmkuY29tcGxldGlvbnMuc2xpY2UoMCwyNSkpLEMoMSkseSgibmdJZiIsKG51bGw9PWkuY29tcGxldGlvbnM/bnVsbDppLmNvbXBsZXRpb25zLmxlbmd0aCk+MjUpfX0sZGVwZW5kZW5jaWVzOltkbixCZSxZayxxayxPcyxHdCxRbF0sc3R5bGVzOlsiLnRhZy1maWx0ZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX10Yi1maWx0ZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxfVtfbmdob3N0LSVDT01QJV17Y29sb3I6IzIxMjEyMX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6I2ZmZn1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpe2NvbG9yOiNjNjI4Mjh9W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKSAgIC5lcnJvci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojYzYyODI4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjB9ICAudGFnLW9wdGlvbnMgLm9wdGlvbiwgICAudGFnLW9wdGlvbnMgLmFuZC1tb3Jley13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWxpbmUtY2xhbXA6MztkaXNwbGF5Oi13ZWJraXQtYm94O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuNDtwYWRkaW5nOjhweCAxNnB4fSAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgICAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAudGFnLW9wdGlvbnMgLmFuZC1tb3Jle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksQnBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMudGFnRmlsdGVyJD10aGlzLnN0b3JlLnNlbGVjdChYYyksdGhpcy5pc1RhZ0ZpbHRlclJlZ2V4VmFsaWQkPXRoaXMudGFnRmlsdGVyJC5waXBlKEwoaT0+e3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChpKSwhMH1jYXRjaHtyZXR1cm4hMX19KSksdGhpcy5jb21wbGV0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoUEkpLnBpcGUoZnIodGhpcy5zdG9yZS5zZWxlY3QobmQpKSxMKChbaSxyXSk9PmkuZmlsdGVyKCh7cGx1Z2luOm99KT0+IXIuc2l6ZXx8ci5oYXMobykpLm1hcCgoe3RhZzpvfSk9Pm8pKSxMKGk9PlsuLi5uZXcgU2V0KGkpXSksTChpPT5pLnNvcnQoRncpKSxmcih0aGlzLnN0b3JlLnNlbGVjdChYYykpLEwoKFtpLHJdKT0+e3RyeXtyZXR1cm5baSxuZXcgUmVnRXhwKHIsImkiKV19Y2F0Y2h7cmV0dXJuW2ksbnVsbF19fSksWWUoKFssaV0pPT5udWxsIT09aSksTCgoW2kscl0pPT5pLmZpbHRlcihvPT5yLnRlc3QobykpKSl9b25UYWdGaWx0ZXJDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChzUih7dGFnRmlsdGVyOmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXRhZy1maWx0ZXIiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywicmVnZXhGaWx0ZXJWYWx1ZSIsImlzUmVnZXhGaWx0ZXJWYWxpZCIsImNvbXBsZXRpb25zIiwib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJtZXRyaWNzLXRhZy1maWx0ZXItY29tcG9uZW50IiwwKSxQKCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGFnRmlsdGVyQ2hhbmdlKG8pfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksdigpKSwyJmUmJnkoInJlZ2V4RmlsdGVyVmFsdWUiLFUoMSwzLGkudGFnRmlsdGVyJCkpKCJpc1JlZ2V4RmlsdGVyVmFsaWQiLFUoMiw1LGkuaXNUYWdGaWx0ZXJSZWdleFZhbGlkJCkpKCJjb21wbGV0aW9ucyIsVSgzLDcsaS5jb21wbGV0aW9ucyQpKX0sZGVwZW5kZW5jaWVzOltMcGUsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEVRZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsOCksQSgxKSx2KCkpLDImbil7bGV0IGU9UygpO0MoMSksamUoIiIsZS5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aCwiIGNhcmRzIil9fWZ1bmN0aW9uIFRRZShuLHQpezEmbiYmKF8oMCwic3BhbiIsOSksQSgxLCJOZXcgY2FyZCBwaW5uZWQiKSx2KCkpLDImbiYmemUoImRhdGEtaWQiLHQuJGltcGxpY2l0KX1mdW5jdGlvbiBEUWUobix0KXtpZigxJm4mJk8oMCwibWV0cmljcy1jYXJkLWdyaWQiLDEwKSwyJm4pe2xldCBlPVMoKTt5KCJjYXJkSWRzV2l0aE1ldGFkYXRhIixlLmNhcmRJZHNXaXRoTWV0YWRhdGEpKCJjYXJkT2JzZXJ2ZXIiLGUuY2FyZE9ic2VydmVyKX19ZnVuY3Rpb24gQVFlKG4sdCl7MSZuJiYoXygwLCJkaXYiLDExKSxBKDEsIlBpbiBjYXJkcyBmb3IgYSBxdWljayB2aWV3IGFuZCBjb21wYXJpc29uIiksdigpKX12YXIgVnBlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50Il1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEiLG5ld0NhcmRQaW5uZWRJZHM6Im5ld0NhcmRQaW5uZWRJZHMifSxkZWNsczoxMCx2YXJzOjQsY29uc3RzOltbMSwiZ3JvdXAtdG9vbGJhciJdLFsic3ZnSWNvbiIsImtlZXBfMjRweCJdLFsxLCJncm91cC10ZXh0Il0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIl0sWyJjbGFzcyIsImdyb3VwLWNhcmQtY291bnQiLDQsIm5nSWYiXSxbImNsYXNzIiwibmV3LWNhcmQtcGlubmVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJlbXB0eVBpbm5lZFZpZXciLCIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdLFsxLCJuZXctY2FyZC1waW5uZWQiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciJdLFsxLCJlbXB0eS1tZXNzYWdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJkaXYiLDApLE8oMSwibWF0LWljb24iLDEpLF8oMiwic3BhbiIsMikoMywic3BhbiIsMyksQSg0LCJQaW5uZWQiKSx2KCksRSg1LEVRZSwyLDEsInNwYW4iLDQpLEUoNixUUWUsMiwxLCJzcGFuIiw1KSx2KCkoKSxFKDcsRFFlLDEsMiwibWV0cmljcy1jYXJkLWdyaWQiLDYpLEUoOCxBUWUsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw3LHF0KSksMiZlKXtsZXQgcj0kZSg5KTtDKDUpLHkoIm5nSWYiLGkuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGg+MSksQygxKSx5KCJuZ0Zvck9mIixpLm5ld0NhcmRQaW5uZWRJZHMpLEMoMSkseSgibmdJZiIsaS5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aCkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbZG4sQmUsR3QsQWJdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Lmdyb3VwLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTtnYXA6NnB4fS5ncm91cC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTNweDtmb250LXN0eWxlOml0YWxpYztwYWRkaW5nOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Lm5ldy1jYXJkLXBpbm5lZFtfbmdjb250ZW50LSVDT01QJV17YW5pbWF0aW9uOnBpbm5lZC12aWV3LWZhZGUtb3V0IDNzIGxpbmVhcjtiYWNrZ3JvdW5kOiNmNDQzMzY7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6I2ZmZjtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTNweDtvcGFjaXR5OjA7cGFkZGluZzozcHggNXB4fUBrZXlmcmFtZXMgcGlubmVkLXZpZXctZmFkZS1vdXR7ZnJvbXtvcGFjaXR5OjF9NjYle29wYWNpdHk6Ljk5fXRve29wYWNpdHk6MH19Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxIcGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhJD10aGlzLnN0b3JlLnNlbGVjdCh6TSkucGlwZSh6bihbXSkpLHRoaXMubmV3Q2FyZFBpbm5lZElkcyQ9dGhpcy5zdG9yZS5zZWxlY3Qoek0pLnBpcGUoWmEoMSksTChpPT5pLm1hcChyPT5yLmNhcmRJZCkpLHkwKCksTCgoW2kscl0pPT57bGV0IG89bmV3IFNldChpKSxzPW5ldyBTZXQocik7Zm9yKGxldCBhIG9mIHMpaWYoIW8uaGFzKGEpKXJldHVybiBEYXRlLm5vdygpO3JldHVybiBudWxsfSksem4obnVsbCkseTAoKSxMKChbaSxyXSk9Pm51bGw9PT1pJiZudWxsPT09cj9udWxsOm51bGw9PT1yP1tpXTpbcl0pLFllKGk9Pm51bGwhPT1pKSxMKGk9PltpWzBdXSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1waW5uZWQtdmlldyJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6Myx2YXJzOjcsY29uc3RzOltbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsIm5ld0NhcmRQaW5uZWRJZHMiLCJjYXJkT2JzZXJ2ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsIm1ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50IiwwKSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpKSwyJmUmJnkoImNhcmRJZHNXaXRoTWV0YWRhdGEiLFUoMSwzLGkuY2FyZElkc1dpdGhNZXRhZGF0YSQpKSgibmV3Q2FyZFBpbm5lZElkcyIsVSgyLDUsaS5uZXdDYXJkUGlubmVkSWRzJCkpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKX0sZGVwZW5kZW5jaWVzOltWcGUsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFJRZShuLHQpezEmbiYmTygwLCJtZXRyaWNzLWZpbHRlcmVkLXZpZXciLDEyKSwyJm4mJnkoImNhcmRPYnNlcnZlciIsUygpLmNhcmRPYnNlcnZlcil9ZnVuY3Rpb24gT1FlKG4sdCl7MSZuJiYoXygwLCJkaXYiLDE2KSxPKDEsIm1hdC1zcGlubmVyIiwxNyksdigpKX12YXIga1FlPWZ1bmN0aW9uKG4pe3JldHVybnsic2xpZGUtb3V0LW1lbnUtZXhwYW5kZWQiOm59fTtmdW5jdGlvbiBGUWUobix0KXtpZigxJm4mJihfKDAsImRpdiIsMTgpLE8oMSwibWV0cmljcy1zY2FsYXItY29sdW1uLWVkaXRvciIpLHYoKSksMiZuKXtsZXQgZT1TKCk7eSgibmdDbGFzcyIsT24oMSxrUWUsZS5zbGlkZU91dE1lbnVPcGVuKSl9fWZ1bmN0aW9uIE5RZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMTkpKDEsImRpdiIsMjApKDIsImgyIiwyMSksQSgzLCJTZXR0aW5ncyIpLHYoKSxfKDQsImJ1dHRvbiIsMjIpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZC5lbWl0KCkpfSksTyg1LCJtYXQtaWNvbiIsMjMpLHYoKSgpLE8oNiwibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSIpLHYoKX19dmFyIExRZT1mdW5jdGlvbihuKXtyZXR1cm57Y2hlY2tlZDpuLCJzZXR0aW5ncy1idXR0b24iOiEwfX0sVXBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5ob3N0PWUsdGhpcy5vblNldHRpbmdzQnV0dG9uQ2xpY2tlZD1uZXcgRyx0aGlzLm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQ9bmV3IEcsdGhpcy5vblBsdWdpblR5cGVUb2dnbGVkPW5ldyBHLHRoaXMub25QbHVnaW5UeXBlQWxsVG9nZ2xlZD1uZXcgRyx0aGlzLlBsdWdpblR5cGU9cmksdGhpcy5jYXJkT2JzZXJ2ZXI9bmV3IE53KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCI2MDBweCAwcHggNjAwcHggMHB4Iil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLW1haW4tdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntzaG93RmlsdGVyZWRWaWV3OiJzaG93RmlsdGVyZWRWaWV3Iixpc1NpZGVwYW5lT3BlbjoiaXNTaWRlcGFuZU9wZW4iLGZpbHRlcmVkUGx1Z2luVHlwZXM6ImZpbHRlcmVkUGx1Z2luVHlwZXMiLGluaXRpYWxUYWdzTG9hZGluZzoiaW5pdGlhbFRhZ3NMb2FkaW5nIixzbGlkZU91dE1lbnVPcGVuOiJzbGlkZU91dE1lbnVPcGVuIn0sb3V0cHV0czp7b25TZXR0aW5nc0J1dHRvbkNsaWNrZWQ6Im9uU2V0dGluZ3NCdXR0b25DbGlja2VkIixvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkOiJvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkIixvblBsdWdpblR5cGVUb2dnbGVkOiJvblBsdWdpblR5cGVUb2dnbGVkIixvblBsdWdpblR5cGVBbGxUb2dnbGVkOiJvblBsdWdpblR5cGVBbGxUb2dnbGVkIn0sZGVjbHM6MjMsdmFyczoyMixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSRsb2NhbGl6ZWA6TGFiZWwgb24gYSB0b29sYmFyIGJ1dHRvbiB0byB0b2dnbGUgdGhlIHNldHRpbmdzIHNpZGUgcGFuZS7ikJ9kMzUxNmRiNmJiZTY4NjBhNTViZWFiNjZlNDk2OWRhYzYyNWI4ZDcy4pCfNzY1OTI4NTQ0NTU4MDgzODkyNTpUb2dnbGUgc2V0dGluZ3Mgc2lkZSBwYW5lYCxlPSRsb2NhbGl6ZWA6TGFiZWwgb24gYSBidXR0b24gdG8gY2xvc2UgdGhlIHNldHRpbmdzIHNpZGUgcGFuZS7ikJ8wNDUyMWRjMGI2YTY1Y2Y1YzM4Mjk0NGM5YThiNGI4NDRhM2U5NTk44pCfODE1Njc2Njk5Nzc0NzE2NTg3MTpDbG9zZSBzaWRlIHBhbmVgLFtbMSwidG9vbGJhciJdLFsibXVsdGlwbGUiLCIiLCJhcHBlYXJhbmNlIiwic3RhbmRhcmQiLDEsImZpbHRlci12aWV3Il0sWyJtYXQtYnV0dG9uIiwiIiwicm9sZSIsImNoZWNrYm94IiwiZGF0YS12YWx1ZSIsImFsbCIsMSwiZmlsdGVyLXZpZXctYnV0dG9uIiwzLCJjbGljayJdLFsibWF0LWJ1dHRvbiIsIiIsInJvbGUiLCJjaGVja2JveCIsImRhdGEtdmFsdWUiLCJzY2FsYXJzIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWyJtYXQtYnV0dG9uIiwiIiwicm9sZSIsImNoZWNrYm94IiwiZGF0YS12YWx1ZSIsImltYWdlIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWyJtYXQtYnV0dG9uIiwiIiwicm9sZSIsImNoZWNrYm94IiwiZGF0YS12YWx1ZSIsImhpc3RvZ3JhbSIsMSwiZmlsdGVyLXZpZXctYnV0dG9uIiwzLCJjbGljayJdLFsxLCJyaWdodC1pdGVtcyJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il0sWzEsInNwbGl0LWNvbnRlbnQiXSxbImNka1Njcm9sbGFibGUiLCIiXSxbMywiY2FyZE9ic2VydmVyIiw0LCJuZ0lmIl0sWzMsImNhcmRPYnNlcnZlciJdLFsiY2xhc3MiLCJsb2FkaW5nLWNvbnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJzbGlkZS1vdXQtbWVudSIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaWRlYmFyIiw0LCJuZ0lmIl0sWzEsImxvYWRpbmctY29udGFpbmVyIl0sWyJkaWFtZXRlciIsIjM2Il0sWzEsInNsaWRlLW91dC1tZW51IiwzLCJuZ0NsYXNzIl0sWzEsInNpZGViYXIiXSxbMSwiaGVhZGVyIl0sWzEsInRpdGxlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xvc2VfMjRweCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCksTygxLCJtZXRyaWNzLXRhZy1maWx0ZXIiKSxfKDIsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIiwxKSgzLCJidXR0b24iLDIpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQuZW1pdCgpfSksQSg0LCIgQWxsICIpLHYoKSxfKDUsImJ1dHRvbiIsMyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QbHVnaW5UeXBlVG9nZ2xlZC5lbWl0KGkuUGx1Z2luVHlwZS5TQ0FMQVJTKX0pLEEoNiwiIFNjYWxhcnMgIiksdigpLF8oNywiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBsdWdpblR5cGVUb2dnbGVkLmVtaXQoaS5QbHVnaW5UeXBlLklNQUdFUyl9KSxBKDgsIiBJbWFnZSAiKSx2KCksXyg5LCJidXR0b24iLDUpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZVRvZ2dsZWQuZW1pdChpLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9KSxBKDEwLCIgSGlzdG9ncmFtICIpLHYoKSgpLF8oMTEsImRpdiIsNikoMTIsImJ1dHRvbiIsNyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQuZW1pdCgpfSksTygxMywibWF0LWljb24iLDgpLEEoMTQsIiBTZXR0aW5ncyAiKSx2KCkoKSgpLF8oMTUsImRpdiIsOSkoMTYsImRpdiIsMTApLEUoMTcsUlFlLDEsMSwibWV0cmljcy1maWx0ZXJlZC12aWV3IiwxMSksTygxOCwibWV0cmljcy1waW5uZWQtdmlldyIsMTIpLEUoMTksT1FlLDIsMCwiZGl2IiwxMyksTygyMCwibWV0cmljcy1jYXJkLWdyb3VwcyIsMTIpLHYoKSxFKDIxLEZRZSwyLDMsImRpdiIsMTQpLEUoMjIsTlFlLDcsMCwiZGl2IiwxNSksdigpKSwyJmUmJihDKDMpLHplKCJhcmlhLWNoZWNrZWQiLDA9PT1pLmZpbHRlcmVkUGx1Z2luVHlwZXMuc2l6ZSksQygyKSx6ZSgiYXJpYS1jaGVja2VkIixpLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKGkuUGx1Z2luVHlwZS5TQ0FMQVJTKSksQygyKSx6ZSgiYXJpYS1jaGVja2VkIixpLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKGkuUGx1Z2luVHlwZS5JTUFHRVMpKSxDKDIpLHplKCJhcmlhLWNoZWNrZWQiLGkuZmlsdGVyZWRQbHVnaW5UeXBlcy5oYXMoaS5QbHVnaW5UeXBlLkhJU1RPR1JBTVMpKSxDKDMpLHkoIm5nQ2xhc3MiLE9uKDIwLExRZSxpLmlzU2lkZXBhbmVPcGVuKSksemUoImFyaWEtcHJlc3NlZCIsaS5pc1NpZGVwYW5lT3BlbiksQyg0KSxldCgibWFpbiIsITApKCJmaWx0ZXItdmlldyIsaS5zaG93RmlsdGVyZWRWaWV3KSxDKDEpLHkoIm5nSWYiLGkuc2hvd0ZpbHRlcmVkVmlldyksQygxKSxQdCgiZGlzcGxheSIsaS5zaG93RmlsdGVyZWRWaWV3PyJub25lIjoiIikseSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlciksQygxKSx5KCJuZ0lmIixpLmluaXRpYWxUYWdzTG9hZGluZyksQygxKSxQdCgiZGlzcGxheSIsaS5zaG93RmlsdGVyZWRWaWV3PyJub25lIjoiIikseSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlciksQygxKSx5KCJuZ0lmIixpLmlzU2lkZXBhbmVPcGVuKSxDKDEpLHkoIm5nSWYiLGkuaXNTaWRlcGFuZU9wZW4pKX0sZGVwZW5kZW5jaWVzOltGbixCZSxJaCxfbixFVSxHdCxCbyxVb2UsV29lLEFwZSxPcGUsQnBlLEhwZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy10YWctZmlsdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMSAxMDBweH0udG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICAucmlnaHQtaXRlbXNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO21hcmdpbi1sZWZ0OjE2cHg7cGFkZGluZy1sZWZ0OjE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NHB4O2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6MDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDpub3JtYWw7aGVpZ2h0OjI1cHg7bGluZS1oZWlnaHQ6MjVweDttaW4td2lkdGg6dW5zZXQ7cGFkZGluZzowIDEycHh9LmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdICsgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bYXJpYS1jaGVja2VkPXRydWVdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvblthcmlhLWNoZWNrZWQ9dHJ1ZV1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW2FyaWEtY2hlY2tlZD10cnVlXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxfS5zcGxpdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7b3ZlcmZsb3cteTphdXRvO2ZsZXg6MX0ubWFpbltfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOnN0cmljdDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0ubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjVmNmY3O2ZsZXg6MSAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojM2EzYTNhfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXBpbm5lZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5tYWluLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59Lm1haW4uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmNvbnRlbnQ7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sc2Nyb2xsLXBvc2l0aW9ufS5sb2FkaW5nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoyMHB4IDB9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6MCAwIDI1MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW46MH1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmlubGluZS1mbGV4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItY29sb3I6I2UwZTBlMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzIxMjEyMX1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtYnV0dG9uLXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9W19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo0cHh9LnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7aGVpZ2h0OjEwMCU7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NTBweDt0b3A6NDlweDt0cmFuc2l0aW9uOmFsbCAuNzVzIGVhc2U7dmlzaWJpbGl0eTpoaWRkZW47d2lkdGg6MjAwcHg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGUtb3V0LW1lbnVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGUtb3V0LW1lbnVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0uc2xpZGUtb3V0LW1lbnUtZXhwYW5kZWRbX25nY29udGVudC0lQ09NUCVde3JpZ2h0OjI1MHB4O3Zpc2liaWxpdHk6dmlzaWJsZX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHpwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmlzU2lkZXBhbmVPcGVuJD10aGlzLnN0b3JlLnNlbGVjdChISSksdGhpcy5pbml0aWFsVGFnc0xvYWRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KFVNKS5waXBlKGN4KGk9Pm51bGw9PT1pLmxhc3RMb2FkZWRUaW1lSW5NcywhMCksTChpPT5pLnN0YXRlPT09T2UuTE9BRElORyYmbnVsbD09PWkubGFzdExvYWRlZFRpbWVJbk1zKSksdGhpcy5zaG93RmlsdGVyZWRWaWV3JD10aGlzLnN0b3JlLnNlbGVjdChYYykucGlwZShMKGk9PmkubGVuZ3RoPjApKSx0aGlzLmZpbHRlcmVkUGx1Z2luVHlwZXMkPXRoaXMuc3RvcmUuc2VsZWN0KG5kKSx0aGlzLmlzU2xpZGVvdXRNZW51T3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3QoVUkpfW9uU2V0dGluZ3NCdXR0b25DbGlja2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChCUCgpKX1vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChMUCgpKX1vblBsdWdpblZpc2liaWxpdHlUb2dnbGVkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gobFIoe3BsdWdpbjplfSkpfW9uU2hvd0FsbFBsdWdpbnMoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGNSKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1tYWluLXZpZXciXV0sZGVjbHM6Nix2YXJzOjE1LGNvbnN0czpbWzMsInNob3dGaWx0ZXJlZFZpZXciLCJpc1NpZGVwYW5lT3BlbiIsImluaXRpYWxUYWdzTG9hZGluZyIsImZpbHRlcmVkUGx1Z2luVHlwZXMiLCJzbGlkZU91dE1lbnVPcGVuIiwib25TZXR0aW5nc0J1dHRvbkNsaWNrZWQiLCJvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkIiwib25QbHVnaW5UeXBlVG9nZ2xlZCIsIm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCIsMCksUCgib25TZXR0aW5nc0J1dHRvbkNsaWNrZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQoKX0pKCJvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQoKX0pKCJvblBsdWdpblR5cGVUb2dnbGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBsdWdpblZpc2liaWxpdHlUb2dnbGVkKG8pfSkoIm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TaG93QWxsUGx1Z2lucygpfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksQig0LCJhc3luYyIpLEIoNSwiYXN5bmMiKSx2KCkpLDImZSYmeSgic2hvd0ZpbHRlcmVkVmlldyIsVSgxLDUsaS5zaG93RmlsdGVyZWRWaWV3JCkpKCJpc1NpZGVwYW5lT3BlbiIsVSgyLDcsaS5pc1NpZGVwYW5lT3BlbiQpKSgiaW5pdGlhbFRhZ3NMb2FkaW5nIixVKDMsOSxpLmluaXRpYWxUYWdzTG9hZGluZyQpKSgiZmlsdGVyZWRQbHVnaW5UeXBlcyIsVSg0LDExLGkuZmlsdGVyZWRQbHVnaW5UeXBlcyQpKSgic2xpZGVPdXRNZW51T3BlbiIsVSg1LDEzLGkuaXNTbGlkZW91dE1lbnVPcGVuJCkpfSxkZXBlbmRlbmNpZXM6W1VwZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdmE9KCgpPT4oZnVuY3Rpb24obil7bi5DSEVDS0JPWD0iY2hlY2tib3giLG4uUlVOX05BTUU9InJ1bl9uYW1lIixuLkVYUEVSSU1FTlRfTkFNRT0iZXhwZXJpbWVudF9uYW1lIixuLlJVTl9DT0xPUj0icnVuX2NvbG9yIn0odmF8fCh2YT17fSkpLHZhKSkoKSxEZj17fTtCRShEZix7Z2V0RXhwZXJpbWVudHNIcGFyYW1zQW5kTWV0cmljc1NwZWNzOigpPT5HUWUsZ2V0SHBhcmFtRmlsdGVyTWFwOigpPT5VUWUsZ2V0TWV0cmljRmlsdGVyTWFwOigpPT5qUWV9KTt2YXIgQ0U9TXIoZkkpLEhRZT1KKENFLChuLHQpPT57bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpIW4uc3BlY3NbaV18fGUucHVzaChuLnNwZWNzW2ldLmhwYXJhbS5kZWZhdWx0RmlsdGVycyk7cmV0dXJuIExNKGUpfSksVVFlPUooSFFlLENFLChuLHQsZSk9PntsZXQgaT1XbShlKTtyZXR1cm4gbmV3IE1hcChbLi4ubiwuLi50LmZpbHRlcnNbaV0/LmhwYXJhbXM/P1tdXSl9KSx6UWU9SihDRSwobix0KT0+e2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KSFuLnNwZWNzW2ldfHxlLnB1c2gobi5zcGVjc1tpXS5tZXRyaWMuZGVmYXVsdEZpbHRlcnMpO3JldHVybiBoSShlKX0pLGpRZT1KKHpRZSxDRSwobix0LGUpPT57bGV0IGk9V20oZSk7cmV0dXJuIG5ldyBNYXAoWy4uLm4sLi4udC5maWx0ZXJzW2ldPy5tZXRyaWNzPz9bXV0pfSksR1FlPUooQ0UsKG4sdCk9PmZ1bmN0aW9uKC4uLm4pe2xldCB0PW5ldyBNYXAsZT1uZXcgTWFwLGk9bmV3IE1hcCxyPW5ldyBNYXAsbz1bXTtmb3IobGV0IHMgb2Ygbil7Zm9yKGxldCBhIG9mIHMuaHBhcmFtcylpZihlLmhhcyhhLm5hbWUpfHxlLnNldChhLm5hbWUsbmV3IFNldCksZS5nZXQoYS5uYW1lKS5hZGQoYS5kaXNwbGF5TmFtZSksdC5oYXMoYS5uYW1lKSl7bGV0IGw9dC5nZXQoYS5uYW1lKSxjPWE7aWYobC50eXBlIT09Yy50eXBlJiZvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCB0eXBlcyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bC50eXBlfSB2cy4gJHtjLnR5cGV9YCksbC5kb21haW4udHlwZT09PUNpLklOVEVSVkFMJiZjLmRvbWFpbi50eXBlPT09Q2kuSU5URVJWQUwpKGwuZG9tYWluLm1pblZhbHVlIT09Yy5kb21haW4ubWluVmFsdWV8fGwuZG9tYWluLm1heFZhbHVlIT09Yy5kb21haW4ubWF4VmFsdWUpJiZvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRvbWFpbn0gdnMuICR7Yy5kb21haW59YCk7ZWxzZSBpZihsLmRvbWFpbi50eXBlPT09Q2kuRElTQ1JFVEUmJmMuZG9tYWluLnR5cGU9PT1DaS5ESVNDUkVURSl7bGV0IHU9bmV3IFNldChbLi4ubC5kb21haW4udmFsdWVzLC4uLmMuZG9tYWluLnZhbHVlc10pOyhsLmRvbWFpbi52YWx1ZXMubGVuZ3RoIT09Yy5kb21haW4udmFsdWVzLmxlbmd0aHx8bC5kb21haW4udmFsdWVzLmxlbmd0aCE9PXUuc2l6ZSkmJm8ucHVzaChgSHBhcmFtLCAke2MubmFtZX0sIGRvbWFpbnMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wuZG9tYWlufSB2cy4gJHtjLmRvbWFpbn1gKX1lbHNlIG8ucHVzaChgSHBhcmFtLCAke2MubmFtZX0sIGRvbWFpbnMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wuZG9tYWlufSB2cy4gJHtjLmRvbWFpbn1gKX1lbHNlIHQuc2V0KGEubmFtZSx7Li4uYX0pO2ZvcihsZXQgYSBvZiBzLm1ldHJpY3MpaWYoci5oYXMoYS50YWcpfHxyLnNldChhLnRhZyxuZXcgU2V0KSxyLmdldChhLnRhZykuYWRkKGEuZGlzcGxheU5hbWUpLGkuaGFzKGEudGFnKSl7bGV0IGw9aS5nZXQoYS50YWcpLGM9YTtsLmRhdGFzZXRUeXBlIT09Yy5kYXRhc2V0VHlwZSYmby5wdXNoKGBNZXRyaWMsICR7Yy50YWd9LCBkYXRhc2V0VHlwZXMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wuZGF0YXNldFR5cGV9IHZzLiAke2MuZGF0YXNldFR5cGV9YCl9ZWxzZSBpLnNldChhLnRhZyx7Li4uYX0pfWlmKG8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVmFsaWRhdGlvbiBlcnJvcjpcbiR7by5qb2luKCJcbiIpfWApO3JldHVybntocGFyYW1zOlsuLi50XS5tYXAoKFtzLGFdKT0+KHsuLi5hLGRpc3BsYXlOYW1lOlsuLi5lLmdldChzKV0uam9pbigiIG9yICIpfSkpLG1ldHJpY3M6Wy4uLmldLm1hcCgoW3MsYV0pPT4oey4uLmEsZGlzcGxheU5hbWU6Wy4uLnIuZ2V0KHMpXS5qb2luKCIgb3IgIil9KSl9fSguLi50LmV4cGVyaW1lbnRJZHMubWFwKGU9PntsZXQgaT1uLnNwZWNzW2VdO3JldHVybiBpP3tocGFyYW1zOmkuaHBhcmFtLnNwZWNzLG1ldHJpY3M6aS5tZXRyaWMuc3BlY3N9Om51bGx9KS5maWx0ZXIoQm9vbGVhbikpKSxXUWU9WyJ0b29sdGlwIl0sR3BlPSJ0b29sdGlwLXBhbmVsIixXcGU9bGEoe3Bhc3NpdmU6ITB9KSxxcGU9bmV3IHBlKCJtYXQtdG9vbHRpcC1zY3JvbGwtc3RyYXRlZ3kiKSxRUWU9e3Byb3ZpZGU6cXBlLGRlcHM6W3RyXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7c2Nyb2xsVGhyb3R0bGU6MjB9KX19LEtRZT1uZXcgcGUoIm1hdC10b29sdGlwLWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57c2hvd0RlbGF5OjAsaGlkZURlbGF5OjAsdG91Y2hlbmRIaWRlRGVsYXk6MTUwMH19fSksSlFlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj1yLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9byx0aGlzLl9uZ1pvbmU9cyx0aGlzLl9wbGF0Zm9ybT1hLHRoaXMuX2FyaWFEZXNjcmliZXI9bCx0aGlzLl9mb2N1c01vbml0b3I9Yyx0aGlzLl9kaXI9ZCx0aGlzLl9kZWZhdWx0T3B0aW9ucz1wLHRoaXMuX3Bvc2l0aW9uPSJiZWxvdyIsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fdmlld0luaXRpYWxpemVkPSExLHRoaXMuX3BvaW50ZXJFeGl0RXZlbnRzSW5pdGlhbGl6ZWQ9ITEsdGhpcy5fdmlld3BvcnRNYXJnaW49OCx0aGlzLl9jc3NDbGFzc1ByZWZpeD0ibWF0Iix0aGlzLl9zaG93RGVsYXk9dGhpcy5fZGVmYXVsdE9wdGlvbnMuc2hvd0RlbGF5LHRoaXMuX2hpZGVEZWxheT10aGlzLl9kZWZhdWx0T3B0aW9ucy5oaWRlRGVsYXksdGhpcy50b3VjaEdlc3R1cmVzPSJhdXRvIix0aGlzLl9tZXNzYWdlPSIiLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveWVkPW5ldyBrZSx0aGlzLl9zY3JvbGxTdHJhdGVneT11LHRoaXMuX2RvY3VtZW50PWgscCYmKHAucG9zaXRpb24mJih0aGlzLnBvc2l0aW9uPXAucG9zaXRpb24pLHAudG91Y2hHZXN0dXJlcyYmKHRoaXMudG91Y2hHZXN0dXJlcz1wLnRvdWNoR2VzdHVyZXMpKSxkLmNoYW5nZS5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX292ZXJsYXlSZWYmJnRoaXMuX3VwZGF0ZVBvc2l0aW9uKHRoaXMuX292ZXJsYXlSZWYpfSl9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbihlKXtlIT09dGhpcy5fcG9zaXRpb24mJih0aGlzLl9wb3NpdGlvbj1lLHRoaXMuX292ZXJsYXlSZWYmJih0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKSx0aGlzLl90b29sdGlwSW5zdGFuY2U/LnNob3coMCksdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD1SdChlKSx0aGlzLl9kaXNhYmxlZD90aGlzLmhpZGUoMCk6dGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpfWdldCBzaG93RGVsYXkoKXtyZXR1cm4gdGhpcy5fc2hvd0RlbGF5fXNldCBzaG93RGVsYXkoZSl7dGhpcy5fc2hvd0RlbGF5PUJpKGUpfWdldCBoaWRlRGVsYXkoKXtyZXR1cm4gdGhpcy5faGlkZURlbGF5fXNldCBoaWRlRGVsYXkoZSl7dGhpcy5faGlkZURlbGF5PUJpKGUpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmKHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5fbW91c2VMZWF2ZUhpZGVEZWxheT10aGlzLl9oaWRlRGVsYXkpfWdldCBtZXNzYWdlKCl7cmV0dXJuIHRoaXMuX21lc3NhZ2V9c2V0IG1lc3NhZ2UoZSl7dGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsdGhpcy5fbWVzc2FnZSwidG9vbHRpcCIpLHRoaXMuX21lc3NhZ2U9bnVsbCE9ZT9TdHJpbmcoZSkudHJpbSgpOiIiLCF0aGlzLl9tZXNzYWdlJiZ0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCk/dGhpcy5oaWRlKDApOih0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCksdGhpcy5fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fYXJpYURlc2NyaWJlci5kZXNjcmliZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsdGhpcy5tZXNzYWdlLCJ0b29sdGlwIil9KX0pKX1nZXQgdG9vbHRpcENsYXNzKCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXBDbGFzc31zZXQgdG9vbHRpcENsYXNzKGUpe3RoaXMuX3Rvb2x0aXBDbGFzcz1lLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fc2V0VG9vbHRpcENsYXNzKHRoaXMuX3Rvb2x0aXBDbGFzcyl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fdmlld0luaXRpYWxpemVkPSEwLHRoaXMuX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKSx0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmKS5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShlPT57ZT8ia2V5Ym9hcmQiPT09ZSYmdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5zaG93KCkpOnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuaGlkZSgwKSl9KX1uZ09uRGVzdHJveSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtjbGVhclRpbWVvdXQodGhpcy5fdG91Y2hzdGFydFRpbWVvdXQpLHRoaXMuX292ZXJsYXlSZWYmJih0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKSx0aGlzLl90b29sdGlwSW5zdGFuY2U9bnVsbCksdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5mb3JFYWNoKChbaSxyXSk9PntlLnJlbW92ZUV2ZW50TGlzdGVuZXIoaSxyLFdwZSl9KSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmxlbmd0aD0wLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbihlLHRoaXMubWVzc2FnZSwidG9vbHRpcCIpLHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyhlKX1zaG93KGU9dGhpcy5zaG93RGVsYXkpe2lmKHRoaXMuZGlzYWJsZWR8fCF0aGlzLm1lc3NhZ2V8fHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSlyZXR1cm4gdm9pZCB0aGlzLl90b29sdGlwSW5zdGFuY2U/Ll9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpO2xldCBpPXRoaXMuX2NyZWF0ZU92ZXJsYXkoKTt0aGlzLl9kZXRhY2goKSx0aGlzLl9wb3J0YWw9dGhpcy5fcG9ydGFsfHxuZXcgJGModGhpcy5fdG9vbHRpcENvbXBvbmVudCx0aGlzLl92aWV3Q29udGFpbmVyUmVmKTtsZXQgcj10aGlzLl90b29sdGlwSW5zdGFuY2U9aS5hdHRhY2godGhpcy5fcG9ydGFsKS5pbnN0YW5jZTtyLl90cmlnZ2VyRWxlbWVudD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsci5fbW91c2VMZWF2ZUhpZGVEZWxheT10aGlzLl9oaWRlRGVsYXksci5hZnRlckhpZGRlbigpLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9kZXRhY2goKSksdGhpcy5fc2V0VG9vbHRpcENsYXNzKHRoaXMuX3Rvb2x0aXBDbGFzcyksdGhpcy5fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKSxyLnNob3coZSl9aGlkZShlPXRoaXMuaGlkZURlbGF5KXtsZXQgaT10aGlzLl90b29sdGlwSW5zdGFuY2U7aSYmKGkuaXNWaXNpYmxlKCk/aS5oaWRlKGUpOihpLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpLHRoaXMuX2RldGFjaCgpKSl9dG9nZ2xlKCl7dGhpcy5faXNUb29sdGlwVmlzaWJsZSgpP3RoaXMuaGlkZSgpOnRoaXMuc2hvdygpfV9pc1Rvb2x0aXBWaXNpYmxlKCl7cmV0dXJuISF0aGlzLl90b29sdGlwSW5zdGFuY2UmJnRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5pc1Zpc2libGUoKX1fY3JlYXRlT3ZlcmxheSgpe2lmKHRoaXMuX292ZXJsYXlSZWYpcmV0dXJuIHRoaXMuX292ZXJsYXlSZWY7bGV0IGU9dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModGhpcy5fZWxlbWVudFJlZiksaT10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50UmVmKS53aXRoVHJhbnNmb3JtT3JpZ2luT24oYC4ke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS10b29sdGlwYCkud2l0aEZsZXhpYmxlRGltZW5zaW9ucyghMSkud2l0aFZpZXdwb3J0TWFyZ2luKHRoaXMuX3ZpZXdwb3J0TWFyZ2luKS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnMoZSk7cmV0dXJuIGkucG9zaXRpb25DaGFuZ2VzLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKHI9Pnt0aGlzLl91cGRhdGVDdXJyZW50UG9zaXRpb25DbGFzcyhyLmNvbm5lY3Rpb25QYWlyKSx0aGlzLl90b29sdGlwSW5zdGFuY2UmJnIuc2Nyb2xsYWJsZVZpZXdQcm9wZXJ0aWVzLmlzT3ZlcmxheUNsaXBwZWQmJnRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5pc1Zpc2libGUoKSYmdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5oaWRlKDApKX0pLHRoaXMuX292ZXJsYXlSZWY9dGhpcy5fb3ZlcmxheS5jcmVhdGUoe2RpcmVjdGlvbjp0aGlzLl9kaXIscG9zaXRpb25TdHJhdGVneTppLHBhbmVsQ2xhc3M6YCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LSR7R3BlfWAsc2Nyb2xsU3RyYXRlZ3k6dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKX0pLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKHRoaXMuX292ZXJsYXlSZWYpLHRoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fZGV0YWNoKCkpLHRoaXMuX292ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fdG9vbHRpcEluc3RhbmNlPy5faGFuZGxlQm9keUludGVyYWN0aW9uKCkpLHRoaXMuX292ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKHI9Pnt0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJjI3PT09ci5rZXlDb2RlJiYha3IocikmJihyLnByZXZlbnREZWZhdWx0KCksci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLmhpZGUoMCkpKX0pLHRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlVG9vbHRpcEludGVyYWN0aXZpdHkmJnRoaXMuX292ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcyhgJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tdG9vbHRpcC1wYW5lbC1ub24taW50ZXJhY3RpdmVgKSx0aGlzLl9vdmVybGF5UmVmfV9kZXRhY2goKXt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkmJnRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCksdGhpcy5fdG9vbHRpcEluc3RhbmNlPW51bGx9X3VwZGF0ZVBvc2l0aW9uKGUpe2xldCBpPWUuZ2V0Q29uZmlnKCkucG9zaXRpb25TdHJhdGVneSxyPXRoaXMuX2dldE9yaWdpbigpLG89dGhpcy5fZ2V0T3ZlcmxheVBvc2l0aW9uKCk7aS53aXRoUG9zaXRpb25zKFt0aGlzLl9hZGRPZmZzZXQoey4uLnIubWFpbiwuLi5vLm1haW59KSx0aGlzLl9hZGRPZmZzZXQoey4uLnIuZmFsbGJhY2ssLi4uby5mYWxsYmFja30pXSl9X2FkZE9mZnNldChlKXtyZXR1cm4gZX1fZ2V0T3JpZ2luKCl7bGV0IHIsZT0hdGhpcy5fZGlyfHwibHRyIj09dGhpcy5fZGlyLnZhbHVlLGk9dGhpcy5wb3NpdGlvbjsiYWJvdmUiPT1pfHwiYmVsb3ciPT1pP3I9e29yaWdpblg6ImNlbnRlciIsb3JpZ2luWToiYWJvdmUiPT1pPyJ0b3AiOiJib3R0b20ifToiYmVmb3JlIj09aXx8ImxlZnQiPT1pJiZlfHwicmlnaHQiPT1pJiYhZT9yPXtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiY2VudGVyIn06KCJhZnRlciI9PWl8fCJyaWdodCI9PWkmJmV8fCJsZWZ0Ij09aSYmIWUpJiYocj17b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJjZW50ZXIifSk7bGV0e3g6byx5OnN9PXRoaXMuX2ludmVydFBvc2l0aW9uKHIub3JpZ2luWCxyLm9yaWdpblkpO3JldHVybnttYWluOnIsZmFsbGJhY2s6e29yaWdpblg6byxvcmlnaW5ZOnN9fX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7bGV0IHIsZT0hdGhpcy5fZGlyfHwibHRyIj09dGhpcy5fZGlyLnZhbHVlLGk9dGhpcy5wb3NpdGlvbjsiYWJvdmUiPT1pP3I9e292ZXJsYXlYOiJjZW50ZXIiLG92ZXJsYXlZOiJib3R0b20ifToiYmVsb3ciPT1pP3I9e292ZXJsYXlYOiJjZW50ZXIiLG92ZXJsYXlZOiJ0b3AifToiYmVmb3JlIj09aXx8ImxlZnQiPT1pJiZlfHwicmlnaHQiPT1pJiYhZT9yPXtvdmVybGF5WDoiZW5kIixvdmVybGF5WToiY2VudGVyIn06KCJhZnRlciI9PWl8fCJyaWdodCI9PWkmJmV8fCJsZWZ0Ij09aSYmIWUpJiYocj17b3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiY2VudGVyIn0pO2xldHt4Om8seTpzfT10aGlzLl9pbnZlcnRQb3NpdGlvbihyLm92ZXJsYXlYLHIub3ZlcmxheVkpO3JldHVybnttYWluOnIsZmFsbGJhY2s6e292ZXJsYXlYOm8sb3ZlcmxheVk6c319fV91cGRhdGVUb29sdGlwTWVzc2FnZSgpe3RoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmKHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5tZXNzYWdlPXRoaXMubWVzc2FnZSx0aGlzLl90b29sdGlwSW5zdGFuY2UuX21hcmtGb3JDaGVjaygpLHRoaXMuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUoUXQoMSksc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9KSl9X3NldFRvb2x0aXBDbGFzcyhlKXt0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UudG9vbHRpcENsYXNzPWUsdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKSl9X2ludmVydFBvc2l0aW9uKGUsaSl7cmV0dXJuImFib3ZlIj09PXRoaXMucG9zaXRpb258fCJiZWxvdyI9PT10aGlzLnBvc2l0aW9uPyJ0b3AiPT09aT9pPSJib3R0b20iOiJib3R0b20iPT09aSYmKGk9InRvcCIpOiJlbmQiPT09ZT9lPSJzdGFydCI6InN0YXJ0Ij09PWUmJihlPSJlbmQiKSx7eDplLHk6aX19X3VwZGF0ZUN1cnJlbnRQb3NpdGlvbkNsYXNzKGUpe2xldCBzLHtvdmVybGF5WTppLG9yaWdpblg6cixvcmlnaW5ZOm99PWU7aWYocz0iY2VudGVyIj09PWk/dGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8iZW5kIj09PXI/ImxlZnQiOiJyaWdodCI6InN0YXJ0Ij09PXI/ImxlZnQiOiJyaWdodCI6ImJvdHRvbSI9PT1pJiYidG9wIj09PW8/ImFib3ZlIjoiYmVsb3ciLHMhPT10aGlzLl9jdXJyZW50UG9zaXRpb24pe2xldCBhPXRoaXMuX292ZXJsYXlSZWY7aWYoYSl7bGV0IGw9YCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LSR7R3BlfS1gO2EucmVtb3ZlUGFuZWxDbGFzcyhsK3RoaXMuX2N1cnJlbnRQb3NpdGlvbiksYS5hZGRQYW5lbENsYXNzKGwrcyl9dGhpcy5fY3VycmVudFBvc2l0aW9uPXN9fV9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCl7dGhpcy5fZGlzYWJsZWR8fCF0aGlzLm1lc3NhZ2V8fCF0aGlzLl92aWV3SW5pdGlhbGl6ZWR8fHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMubGVuZ3RofHwodGhpcy5fcGxhdGZvcm1TdXBwb3J0c01vdXNlRXZlbnRzKCk/dGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5wdXNoKFsibW91c2VlbnRlciIsKCk9Pnt0aGlzLl9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKSx0aGlzLnNob3coKX1dKToib2ZmIiE9PXRoaXMudG91Y2hHZXN0dXJlcyYmKHRoaXMuX2Rpc2FibGVOYXRpdmVHZXN0dXJlc0lmTmVjZXNzYXJ5KCksdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5wdXNoKFsidG91Y2hzdGFydCIsKCk9Pnt0aGlzLl9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKSxjbGVhclRpbWVvdXQodGhpcy5fdG91Y2hzdGFydFRpbWVvdXQpLHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuc2hvdygpLDUwMCl9XSkpLHRoaXMuX2FkZExpc3RlbmVycyh0aGlzLl9wYXNzaXZlTGlzdGVuZXJzKSl9X3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpe2lmKHRoaXMuX3BvaW50ZXJFeGl0RXZlbnRzSW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuX3BvaW50ZXJFeGl0RXZlbnRzSW5pdGlhbGl6ZWQ9ITA7bGV0IGU9W107aWYodGhpcy5fcGxhdGZvcm1TdXBwb3J0c01vdXNlRXZlbnRzKCkpZS5wdXNoKFsibW91c2VsZWF2ZSIsaT0+e2xldCByPWkucmVsYXRlZFRhcmdldDsoIXJ8fCF0aGlzLl9vdmVybGF5UmVmPy5vdmVybGF5RWxlbWVudC5jb250YWlucyhyKSkmJnRoaXMuaGlkZSgpfV0sWyJ3aGVlbCIsaT0+dGhpcy5fd2hlZWxMaXN0ZW5lcihpKV0pO2Vsc2UgaWYoIm9mZiIhPT10aGlzLnRvdWNoR2VzdHVyZXMpe3RoaXMuX2Rpc2FibGVOYXRpdmVHZXN0dXJlc0lmTmVjZXNzYXJ5KCk7bGV0IGk9KCk9PntjbGVhclRpbWVvdXQodGhpcy5fdG91Y2hzdGFydFRpbWVvdXQpLHRoaXMuaGlkZSh0aGlzLl9kZWZhdWx0T3B0aW9ucy50b3VjaGVuZEhpZGVEZWxheSl9O2UucHVzaChbInRvdWNoZW5kIixpXSxbInRvdWNoY2FuY2VsIixpXSl9dGhpcy5fYWRkTGlzdGVuZXJzKGUpLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMucHVzaCguLi5lKX1fYWRkTGlzdGVuZXJzKGUpe2UuZm9yRWFjaCgoW2kscl0pPT57dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoaSxyLFdwZSl9KX1fcGxhdGZvcm1TdXBwb3J0c01vdXNlRXZlbnRzKCl7cmV0dXJuIXRoaXMuX3BsYXRmb3JtLklPUyYmIXRoaXMuX3BsYXRmb3JtLkFORFJPSUR9X3doZWVsTGlzdGVuZXIoZSl7aWYodGhpcy5faXNUb29sdGlwVmlzaWJsZSgpKXtsZXQgaT10aGlzLl9kb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUuY2xpZW50WCxlLmNsaWVudFkpLHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2khPT1yJiYhci5jb250YWlucyhpKSYmdGhpcy5oaWRlKCl9fV9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpe2xldCBlPXRoaXMudG91Y2hHZXN0dXJlcztpZigib2ZmIiE9PWUpe2xldCBpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxyPWkuc3R5bGU7KCJvbiI9PT1lfHwiSU5QVVQiIT09aS5ub2RlTmFtZSYmIlRFWFRBUkVBIiE9PWkubm9kZU5hbWUpJiYoci51c2VyU2VsZWN0PXIubXNVc2VyU2VsZWN0PXIud2Via2l0VXNlclNlbGVjdD1yLk1velVzZXJTZWxlY3Q9Im5vbmUiKSwoIm9uIj09PWV8fCFpLmRyYWdnYWJsZSkmJihyLndlYmtpdFVzZXJEcmFnPSJub25lIiksci50b3VjaEFjdGlvbj0ibm9uZSIsci53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj0idHJhbnNwYXJlbnQifX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe25sKCl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4saW5wdXRzOntwb3NpdGlvbjpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsInBvc2l0aW9uIl0sZGlzYWJsZWQ6WyJtYXRUb29sdGlwRGlzYWJsZWQiLCJkaXNhYmxlZCJdLHNob3dEZWxheTpbIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJzaG93RGVsYXkiXSxoaWRlRGVsYXk6WyJtYXRUb29sdGlwSGlkZURlbGF5IiwiaGlkZURlbGF5Il0sdG91Y2hHZXN0dXJlczpbIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwidG91Y2hHZXN0dXJlcyJdLG1lc3NhZ2U6WyJtYXRUb29sdGlwIiwibWVzc2FnZSJdLHRvb2x0aXBDbGFzczpbIm1hdFRvb2x0aXBDbGFzcyIsInRvb2x0aXBDbGFzcyJdfX0pLG59KSgpLFhrPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBKUWV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpe3N1cGVyKGUsaSxyLG8scyxhLGwsYyx1LGQscCxoKSx0aGlzLl90b29sdGlwQ29tcG9uZW50PWVLZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTSh0ciksTShSZSksTSgkbSksTShPaSksTShfdCksTShvaSksTShmMiksTShGciksTShxcGUpLE0oJGksOCksTShLUWUsOCksTShIdCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRUb29sdGlwIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LXRvb2x0aXAtdHJpZ2dlciJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdLGZlYXR1cmVzOlt0dF19KSxufSkoKSwkUWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fY2xvc2VPbkludGVyYWN0aW9uPSExLHRoaXMuX2lzVmlzaWJsZT0hMSx0aGlzLl9vbkhpZGU9bmV3IGtlLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZD0iTm9vcEFuaW1hdGlvbnMiPT09aX1zaG93KGUpe2NsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dElkKSx0aGlzLl9zaG93VGltZW91dElkPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl90b2dnbGVWaXNpYmlsaXR5KCEwKSx0aGlzLl9zaG93VGltZW91dElkPXZvaWQgMH0sZSl9aGlkZShlKXtjbGVhclRpbWVvdXQodGhpcy5fc2hvd1RpbWVvdXRJZCksdGhpcy5faGlkZVRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT57dGhpcy5fdG9nZ2xlVmlzaWJpbGl0eSghMSksdGhpcy5faGlkZVRpbWVvdXRJZD12b2lkIDB9LGUpfWFmdGVySGlkZGVuKCl7cmV0dXJuIHRoaXMuX29uSGlkZX1pc1Zpc2libGUoKXtyZXR1cm4gdGhpcy5faXNWaXNpYmxlfW5nT25EZXN0cm95KCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FuaW1hdGlvbnMoKSx0aGlzLl9vbkhpZGUuY29tcGxldGUoKSx0aGlzLl90cmlnZ2VyRWxlbWVudD1udWxsfV9oYW5kbGVCb2R5SW50ZXJhY3Rpb24oKXt0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb24mJnRoaXMuaGlkZSgwKX1fbWFya0ZvckNoZWNrKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2hhbmRsZU1vdXNlTGVhdmUoe3JlbGF0ZWRUYXJnZXQ6ZX0peyghZXx8IXRoaXMuX3RyaWdnZXJFbGVtZW50LmNvbnRhaW5zKGUpKSYmKHRoaXMuaXNWaXNpYmxlKCk/dGhpcy5oaWRlKHRoaXMuX21vdXNlTGVhdmVIaWRlRGVsYXkpOnRoaXMuX2ZpbmFsaXplQW5pbWF0aW9uKCExKSl9X29uU2hvdygpe31faGFuZGxlQW5pbWF0aW9uRW5kKHthbmltYXRpb25OYW1lOmV9KXsoZT09PXRoaXMuX3Nob3dBbmltYXRpb258fGU9PT10aGlzLl9oaWRlQW5pbWF0aW9uKSYmdGhpcy5fZmluYWxpemVBbmltYXRpb24oZT09PXRoaXMuX3Nob3dBbmltYXRpb24pfV9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpe2NsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dElkKSxjbGVhclRpbWVvdXQodGhpcy5faGlkZVRpbWVvdXRJZCksdGhpcy5fc2hvd1RpbWVvdXRJZD10aGlzLl9oaWRlVGltZW91dElkPXZvaWQgMH1fZmluYWxpemVBbmltYXRpb24oZSl7ZT90aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb249ITA6dGhpcy5pc1Zpc2libGUoKXx8dGhpcy5fb25IaWRlLm5leHQoKX1fdG9nZ2xlVmlzaWJpbGl0eShlKXtsZXQgaT10aGlzLl90b29sdGlwLm5hdGl2ZUVsZW1lbnQscj10aGlzLl9zaG93QW5pbWF0aW9uLG89dGhpcy5faGlkZUFuaW1hdGlvbjtpZihpLmNsYXNzTGlzdC5yZW1vdmUoZT9vOnIpLGkuY2xhc3NMaXN0LmFkZChlP3I6byksdGhpcy5faXNWaXNpYmxlPWUsZSYmIXRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmImZ1bmN0aW9uIj09dHlwZW9mIGdldENvbXB1dGVkU3R5bGUpe2xldCBzPWdldENvbXB1dGVkU3R5bGUoaSk7KCIwcyI9PT1zLmdldFByb3BlcnR5VmFsdWUoImFuaW1hdGlvbi1kdXJhdGlvbiIpfHwibm9uZSI9PT1zLmdldFByb3BlcnR5VmFsdWUoImFuaW1hdGlvbi1uYW1lIikpJiYodGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPSEwKX1lJiZ0aGlzLl9vblNob3coKSx0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQmJihpLmNsYXNzTGlzdC5hZGQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiksdGhpcy5fZmluYWxpemVBbmltYXRpb24oZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKG5uKSxNKFBpLDgpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bn0pLG59KSgpLGVLZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgJFFle2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLHIpLHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlcj1pLHRoaXMuX2lzSGFuZHNldD10aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZSgiKG1heC13aWR0aDogNTk5Ljk4cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSwgKG1heC13aWR0aDogOTU5Ljk4cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiKSx0aGlzLl9zaG93QW5pbWF0aW9uPSJtYXQtdG9vbHRpcC1zaG93Iix0aGlzLl9oaWRlQW5pbWF0aW9uPSJtYXQtdG9vbHRpcC1oaWRlIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShubiksTShKbSksTShQaSw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRvb2x0aXAtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmb3QoV1FlLDcpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX3Rvb2x0aXA9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJhcmlhLWhpZGRlbiIsInRydWUiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgibW91c2VsZWF2ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZU1vdXNlTGVhdmUobyl9KSwyJmUmJlB0KCJ6b29tIixpLmlzVmlzaWJsZSgpPzE6bnVsbCl9LGZlYXR1cmVzOlt0dF0sZGVjbHM6NCx2YXJzOjYsY29uc3RzOltbMSwibWF0LXRvb2x0aXAiLDMsIm5nQ2xhc3MiLCJhbmltYXRpb25lbmQiXSxbInRvb2x0aXAiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihfKDAsImRpdiIsMCwxKSxQKCJhbmltYXRpb25lbmQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVBbmltYXRpb25FbmQobyl9KSxCKDIsImFzeW5jIiksQSgzKSx2KCkpLDImZSl7bGV0IHI7ZXQoIm1hdC10b29sdGlwLWhhbmRzZXQiLG51bGw9PShyPVUoMiw0LGkuX2lzSGFuZHNldCkpP251bGw6ci5tYXRjaGVzKSx5KCJuZ0NsYXNzIixpLnRvb2x0aXBDbGFzcyksQygzKSx5dChpLm1lc3NhZ2UpfX0sZGVwZW5kZW5jaWVzOltGbixHZV0sc3R5bGVzOlsiLm1hdC10b29sdGlwe2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo0cHg7bWFyZ2luOjE0cHg7bWF4LXdpZHRoOjI1MHB4O3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDo4cHg7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7dHJhbnNmb3JtOnNjYWxlKDApfS5tYXQtdG9vbHRpcC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXthbmltYXRpb246bm9uZTt0cmFuc2Zvcm06c2NhbGUoMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRvb2x0aXB7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC10b29sdGlwLWhhbmRzZXR7bWFyZ2luOjI0cHg7cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDoxNnB4fS5tYXQtdG9vbHRpcC1wYW5lbC1ub24taW50ZXJhY3RpdmV7cG9pbnRlci1ldmVudHM6bm9uZX1Aa2V5ZnJhbWVzIG1hdC10b29sdGlwLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSgwKX01MCV7b3BhY2l0eTouNTt0cmFuc2Zvcm06c2NhbGUoMC45OSl9MTAwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX1Aa2V5ZnJhbWVzIG1hdC10b29sdGlwLWhpZGV7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX0xMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoMSl9fS5tYXQtdG9vbHRpcC1zaG93e2FuaW1hdGlvbjptYXQtdG9vbHRpcC1zaG93IDIwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIGZvcndhcmRzfS5tYXQtdG9vbHRpcC1oaWRle2FuaW1hdGlvbjptYXQtdG9vbHRpcC1oaWRlIDEwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIGZvcndhcmRzfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFFrPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W1FRZV0saW1wb3J0czpbRXYsTWUsc3MsbG4sbG4sdWRdfSksbn0pKCk7ZnVuY3Rpb24gdEtlKG4sdCl7aWYoMSZuJiYoXygwLCJtYXQtb3B0aW9uIiwxOSksQSgxKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7eSgidmFsdWUiLGUpLEMoMSksamUoIiAiLGUsIiAiKX19ZnVuY3Rpb24gbktlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwibWF0LWZvcm0tZmllbGQiLDE2KSgxLCJtYXQtc2VsZWN0IiwxNyksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygyKS5fY2hhbmdlUGFnZVNpemUoci52YWx1ZSkpfSksRSgyLHRLZSwyLDIsIm1hdC1vcHRpb24iLDE4KSx2KCkoKX1pZigyJm4pe2xldCBlPVMoMik7eSgiYXBwZWFyYW5jZSIsZS5fZm9ybUZpZWxkQXBwZWFyYW5jZSkoImNvbG9yIixlLmNvbG9yKSxDKDEpLHkoInZhbHVlIixlLnBhZ2VTaXplKSgiZGlzYWJsZWQiLGUuZGlzYWJsZWQpKCJwYW5lbENsYXNzIixlLnNlbGVjdENvbmZpZy5wYW5lbENsYXNzfHwiIikoImRpc2FibGVPcHRpb25DZW50ZXJpbmciLGUuc2VsZWN0Q29uZmlnLmRpc2FibGVPcHRpb25DZW50ZXJpbmcpKCJhcmlhLWxhYmVsIixlLl9pbnRsLml0ZW1zUGVyUGFnZUxhYmVsKSxDKDEpLHkoIm5nRm9yT2YiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucyl9fWZ1bmN0aW9uIGlLZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwyMCksQSgxKSx2KCkpLDImbil7bGV0IGU9UygyKTtDKDEpLHl0KGUucGFnZVNpemUpfX1mdW5jdGlvbiByS2Uobix0KXtpZigxJm4mJihfKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLEEoMiksdigpLEUoMyxuS2UsMyw4LCJtYXQtZm9ybS1maWVsZCIsMTQpLEUoNCxpS2UsMiwxLCJkaXYiLDE1KSx2KCkpLDImbil7bGV0IGU9UygpO0MoMiksamUoIiAiLGUuX2ludGwuaXRlbXNQZXJQYWdlTGFiZWwsIiAiKSxDKDEpLHkoIm5nSWYiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg+MSksQygxKSx5KCJuZ0lmIixlLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMubGVuZ3RoPD0xKX19ZnVuY3Rpb24gb0tlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiYnV0dG9uIiwyMSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5maXJzdFBhZ2UoKSl9KSxJbigpLF8oMSwic3ZnIiw3KSxPKDIsInBhdGgiLDIyKSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTt5KCJtYXRUb29sdGlwIixlLl9pbnRsLmZpcnN0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixlLl9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpKSgibWF0VG9vbHRpcFBvc2l0aW9uIiwiYWJvdmUiKSgiZGlzYWJsZWQiLGUuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpLHplKCJhcmlhLWxhYmVsIixlLl9pbnRsLmZpcnN0UGFnZUxhYmVsKX19ZnVuY3Rpb24gc0tlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO0luKCksSnMoKSxfKDAsImJ1dHRvbiIsMjMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkubGFzdFBhZ2UoKSl9KSxJbigpLF8oMSwic3ZnIiw3KSxPKDIsInBhdGgiLDI0KSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTt5KCJtYXRUb29sdGlwIixlLl9pbnRsLmxhc3RQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGUuX25leHRCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIixlLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpLHplKCJhcmlhLWxhYmVsIixlLl9pbnRsLmxhc3RQYWdlTGFiZWwpfX1Lcigic3RhdGUiLFtraSgiaW5pdGlhbCwgdm9pZCwgaGlkZGVuIixnbih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMCkifSkpLGtpKCJ2aXNpYmxlIixnbih7dHJhbnNmb3JtOiJzY2FsZSgxKSJ9KSksTGkoIiogPT4gdmlzaWJsZSIsamkoIjIwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixEbShbZ24oe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDApIixvZmZzZXQ6MH0pLGduKHtvcGFjaXR5Oi41LHRyYW5zZm9ybToic2NhbGUoMC45OSkiLG9mZnNldDouNX0pLGduKHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJzY2FsZSgxKSIsb2Zmc2V0OjF9KV0pKSksTGkoIiogPT4gaGlkZGVuIixqaSgiMTAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLGduKHtvcGFjaXR5OjB9KSkpXSk7dmFyIGUwPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmNoYW5nZXM9bmV3IGtlLHRoaXMuaXRlbXNQZXJQYWdlTGFiZWw9Ikl0ZW1zIHBlciBwYWdlOiIsdGhpcy5uZXh0UGFnZUxhYmVsPSJOZXh0IHBhZ2UiLHRoaXMucHJldmlvdXNQYWdlTGFiZWw9IlByZXZpb3VzIHBhZ2UiLHRoaXMuZmlyc3RQYWdlTGFiZWw9IkZpcnN0IHBhZ2UiLHRoaXMubGFzdFBhZ2VMYWJlbD0iTGFzdCBwYWdlIix0aGlzLmdldFJhbmdlTGFiZWw9KGUsaSxyKT0+e2lmKDA9PXJ8fDA9PWkpcmV0dXJuYDAgb2YgJHtyfWA7bGV0IG89ZSppO3JldHVybmAke28rMX0gXHUyMDEzICR7bzwocj1NYXRoLm1heChyLDApKT9NYXRoLm1pbihvK2kscik6bytpfSBvZiAke3J9YH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGxLZT17cHJvdmlkZTplMCxkZXBzOltbbmV3IG5zLG5ldyB0bCxlMF1dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIG58fG5ldyBlMH19LHVLZT1uZXcgcGUoIk1BVF9QQUdJTkFUT1JfREVGQVVMVF9PUFRJT05TIiksZEtlPXNvKG0yKGNsYXNze30pKSxwS2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGRLZXtjb25zdHJ1Y3RvcihlLGkscil7aWYoc3VwZXIoKSx0aGlzLl9pbnRsPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9wYWdlSW5kZXg9MCx0aGlzLl9sZW5ndGg9MCx0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9W10sdGhpcy5faGlkZVBhZ2VTaXplPSExLHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zPSExLHRoaXMuc2VsZWN0Q29uZmlnPXt9LHRoaXMucGFnZT1uZXcgRyx0aGlzLl9pbnRsQ2hhbmdlcz1lLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSkscil7bGV0e3BhZ2VTaXplOm8scGFnZVNpemVPcHRpb25zOnMsaGlkZVBhZ2VTaXplOmEsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6bH09cjtudWxsIT1vJiYodGhpcy5fcGFnZVNpemU9byksbnVsbCE9cyYmKHRoaXMuX3BhZ2VTaXplT3B0aW9ucz1zKSxudWxsIT1hJiYodGhpcy5faGlkZVBhZ2VTaXplPWEpLG51bGwhPWwmJih0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1sKX19Z2V0IHBhZ2VJbmRleCgpe3JldHVybiB0aGlzLl9wYWdlSW5kZXh9c2V0IHBhZ2VJbmRleChlKXt0aGlzLl9wYWdlSW5kZXg9TWF0aC5tYXgoQmkoZSksMCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sZW5ndGh9c2V0IGxlbmd0aChlKXt0aGlzLl9sZW5ndGg9QmkoZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHBhZ2VTaXplKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplfXNldCBwYWdlU2l6ZShlKXt0aGlzLl9wYWdlU2l6ZT1NYXRoLm1heChCaShlKSwwKSx0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKX1nZXQgcGFnZVNpemVPcHRpb25zKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplT3B0aW9uc31zZXQgcGFnZVNpemVPcHRpb25zKGUpe3RoaXMuX3BhZ2VTaXplT3B0aW9ucz0oZXx8W10pLm1hcChpPT5CaShpKSksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IGhpZGVQYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9oaWRlUGFnZVNpemV9c2V0IGhpZGVQYWdlU2l6ZShlKXt0aGlzLl9oaWRlUGFnZVNpemU9UnQoZSl9Z2V0IHNob3dGaXJzdExhc3RCdXR0b25zKCl7cmV0dXJuIHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zfXNldCBzaG93Rmlyc3RMYXN0QnV0dG9ucyhlKXt0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1SdChlKX1uZ09uSW5pdCgpe3RoaXMuX2luaXRpYWxpemVkPSEwLHRoaXMuX3VwZGF0ZURpc3BsYXllZFBhZ2VTaXplT3B0aW9ucygpLHRoaXMuX21hcmtJbml0aWFsaXplZCgpfW5nT25EZXN0cm95KCl7dGhpcy5faW50bENoYW5nZXMudW5zdWJzY3JpYmUoKX1uZXh0UGFnZSgpe2lmKCF0aGlzLmhhc05leHRQYWdlKCkpcmV0dXJuO2xldCBlPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PXRoaXMucGFnZUluZGV4KzEsdGhpcy5fZW1pdFBhZ2VFdmVudChlKX1wcmV2aW91c1BhZ2UoKXtpZighdGhpcy5oYXNQcmV2aW91c1BhZ2UoKSlyZXR1cm47bGV0IGU9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXg9dGhpcy5wYWdlSW5kZXgtMSx0aGlzLl9lbWl0UGFnZUV2ZW50KGUpfWZpcnN0UGFnZSgpe2lmKCF0aGlzLmhhc1ByZXZpb3VzUGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD0wLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9bGFzdFBhZ2UoKXtpZighdGhpcy5oYXNOZXh0UGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD10aGlzLmdldE51bWJlck9mUGFnZXMoKS0xLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9aGFzUHJldmlvdXNQYWdlKCl7cmV0dXJuIHRoaXMucGFnZUluZGV4Pj0xJiYwIT10aGlzLnBhZ2VTaXplfWhhc05leHRQYWdlKCl7bGV0IGU9dGhpcy5nZXROdW1iZXJPZlBhZ2VzKCktMTtyZXR1cm4gdGhpcy5wYWdlSW5kZXg8ZSYmMCE9dGhpcy5wYWdlU2l6ZX1nZXROdW1iZXJPZlBhZ2VzKCl7cmV0dXJuIHRoaXMucGFnZVNpemU/TWF0aC5jZWlsKHRoaXMubGVuZ3RoL3RoaXMucGFnZVNpemUpOjB9X2NoYW5nZVBhZ2VTaXplKGUpe2xldCByPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PU1hdGguZmxvb3IodGhpcy5wYWdlSW5kZXgqdGhpcy5wYWdlU2l6ZS9lKXx8MCx0aGlzLnBhZ2VTaXplPWUsdGhpcy5fZW1pdFBhZ2VFdmVudChyKX1fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNOZXh0UGFnZSgpfV9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNQcmV2aW91c1BhZ2UoKX1fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl7IXRoaXMuX2luaXRpYWxpemVkfHwodGhpcy5wYWdlU2l6ZXx8KHRoaXMuX3BhZ2VTaXplPTAhPXRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aD90aGlzLnBhZ2VTaXplT3B0aW9uc1swXTo1MCksdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zPXRoaXMucGFnZVNpemVPcHRpb25zLnNsaWNlKCksLTE9PT10aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMuaW5kZXhPZih0aGlzLnBhZ2VTaXplKSYmdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnB1c2godGhpcy5wYWdlU2l6ZSksdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnNvcnQoKGUsaSk9PmUtaSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9lbWl0UGFnZUV2ZW50KGUpe3RoaXMucGFnZS5lbWl0KHtwcmV2aW91c1BhZ2VJbmRleDplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxwYWdlU2l6ZTp0aGlzLnBhZ2VTaXplLGxlbmd0aDp0aGlzLmxlbmd0aH0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7bmwoKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixpbnB1dHM6e2NvbG9yOiJjb2xvciIscGFnZUluZGV4OiJwYWdlSW5kZXgiLGxlbmd0aDoibGVuZ3RoIixwYWdlU2l6ZToicGFnZVNpemUiLHBhZ2VTaXplT3B0aW9uczoicGFnZVNpemVPcHRpb25zIixoaWRlUGFnZVNpemU6ImhpZGVQYWdlU2l6ZSIsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6InNob3dGaXJzdExhc3RCdXR0b25zIixzZWxlY3RDb25maWc6InNlbGVjdENvbmZpZyJ9LG91dHB1dHM6e3BhZ2U6InBhZ2UifSxmZWF0dXJlczpbdHRdfSksbn0pKCksS2s9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBLZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpLHIpLHImJm51bGwhPXIuZm9ybUZpZWxkQXBwZWFyYW5jZSYmKHRoaXMuX2Zvcm1GaWVsZEFwcGVhcmFuY2U9ci5mb3JtRmllbGRBcHBlYXJhbmNlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShlMCksTShubiksTSh1S2UsOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1wYWdpbmF0b3IiXV0saG9zdEF0dHJzOlsicm9sZSIsImdyb3VwIiwxLCJtYXQtcGFnaW5hdG9yIl0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxleHBvcnRBczpbIm1hdFBhZ2luYXRvciJdLGZlYXR1cmVzOlt0dF0sZGVjbHM6MTQsdmFyczoxNCxjb25zdHM6W1sxLCJtYXQtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lciJdLFsxLCJtYXQtcGFnaW5hdG9yLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnMiXSxbMSwibWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWZpcnN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLXByZXZpb3VzIiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsidmlld0JveCIsIjAgMCAyNCAyNCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtcGFnaW5hdG9yLWljb24iXSxbImQiLCJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1uZXh0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiZCIsIk0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1sYXN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbCJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS12YWx1ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIiwicGFuZWxDbGFzcyIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJhcmlhLWxhYmVsIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMSwibWF0LXBhZ2luYXRvci1wYWdlLXNpemUtdmFsdWUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1maXJzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tbGFzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNNS41OSA3LjQxTDEwLjE4IDEybC00LjU5IDQuNTlMNyAxOGw2LTYtNi02ek0xNiA2aDJ2MTJoLTJ6Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDApKDEsImRpdiIsMSksRSgyLHJLZSw1LDMsImRpdiIsMiksXygzLCJkaXYiLDMpKDQsImRpdiIsNCksQSg1KSx2KCksRSg2LG9LZSwzLDUsImJ1dHRvbiIsNSksXyg3LCJidXR0b24iLDYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnByZXZpb3VzUGFnZSgpfSksSW4oKSxfKDgsInN2ZyIsNyksTyg5LCJwYXRoIiw4KSx2KCkoKSxKcygpLF8oMTAsImJ1dHRvbiIsOSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkubmV4dFBhZ2UoKX0pLEluKCksXygxMSwic3ZnIiw3KSxPKDEyLCJwYXRoIiwxMCksdigpKCksRSgxMyxzS2UsMyw1LCJidXR0b24iLDExKSx2KCkoKSgpKSwyJmUmJihDKDIpLHkoIm5nSWYiLCFpLmhpZGVQYWdlU2l6ZSksQygzKSxqZSgiICIsaS5faW50bC5nZXRSYW5nZUxhYmVsKGkucGFnZUluZGV4LGkucGFnZVNpemUsaS5sZW5ndGgpLCIgIiksQygxKSx5KCJuZ0lmIixpLnNob3dGaXJzdExhc3RCdXR0b25zKSxDKDEpLHkoIm1hdFRvb2x0aXAiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGkuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSksemUoImFyaWEtbGFiZWwiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpLEMoMykseSgibWF0VG9vbHRpcCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixpLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpKSx6ZSgiYXJpYS1sYWJlbCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSxDKDMpLHkoIm5nSWYiLGkuc2hvd0ZpcnN0TGFzdEJ1dHRvbnMpKX0sZGVwZW5kZW5jaWVzOltkbixCZSxfbixwZCxIaCxPcyxYa10sc3R5bGVzOlsiLm1hdC1wYWdpbmF0b3J7ZGlzcGxheTpibG9ja30ubWF0LXBhZ2luYXRvci1vdXRlci1jb250YWluZXJ7ZGlzcGxheTpmbGV4fS5tYXQtcGFnaW5hdG9yLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtwYWRkaW5nOjAgOHB4O2ZsZXgtd3JhcDp3cmFwLXJldmVyc2U7d2lkdGg6MTAwJX0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemV7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZXttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDo4cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLWxhYmVse21hcmdpbjowIDRweH0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemUtc2VsZWN0e21hcmdpbjo2cHggNHB4IDAgNHB4O3dpZHRoOjU2cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmV7d2lkdGg6NjRweH0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbHt3aWR0aDo2NHB4fS5tYXQtcGFnaW5hdG9yLXJhbmdlLWxhYmVse21hcmdpbjowIDMycHggMCAyNHB4fS5tYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnN7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LXBhZ2luYXRvci1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjI4cHg7ZmlsbDpjdXJyZW50Q29sb3J9W2Rpcj1ydGxdIC5tYXQtcGFnaW5hdG9yLWljb257dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1wYWdpbmF0b3ItaWNvbntmaWxsOkNhbnZhc1RleHR9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksWHBlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W2xLZV0saW1wb3J0czpbTWUsUG4sbGMsUWssbG5dfSksbn0pKCksZktlPVsibWF0LXNvcnQtaGVhZGVyIiwiIl07ZnVuY3Rpb24gbUtlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwzKSxQKCJAYXJyb3dQb3NpdGlvbi5zdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSEwKX0pKCJAYXJyb3dQb3NpdGlvbi5kb25lIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITEpfSksTygxLCJkaXYiLDQpLF8oMiwiZGl2Iiw1KSxPKDMsImRpdiIsNikoNCwiZGl2Iiw3KSg1LCJkaXYiLDgpLHYoKSgpfWlmKDImbil7bGV0IGU9UygpO3koIkBhcnJvd09wYWNpdHkiLGUuX2dldEFycm93Vmlld1N0YXRlKCkpKCJAYXJyb3dQb3NpdGlvbiIsZS5fZ2V0QXJyb3dWaWV3U3RhdGUoKSkoIkBhbGxvd0NoaWxkcmVuIixlLl9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLEMoMikseSgiQGluZGljYXRvciIsZS5fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpKSxDKDEpLHkoIkBsZWZ0UG9pbnRlciIsZS5fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpKSxDKDEpLHkoIkByaWdodFBvaW50ZXIiLGUuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSl9fXZhciBnS2U9WyIqIl0sUXBlPW5ldyBwZSgiTUFUX1NPUlRfREVGQVVMVF9PUFRJT05TIiksX0tlPW0yKHNvKGNsYXNze30pKSxNRT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgX0tle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fZGVmYXVsdE9wdGlvbnM9ZSx0aGlzLnNvcnRhYmxlcz1uZXcgTWFwLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcga2UsdGhpcy5zdGFydD0iYXNjIix0aGlzLl9kaXJlY3Rpb249IiIsdGhpcy5zb3J0Q2hhbmdlPW5ldyBHfWdldCBkaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyZWN0aW9ufXNldCBkaXJlY3Rpb24oZSl7dGhpcy5fZGlyZWN0aW9uPWV9Z2V0IGRpc2FibGVDbGVhcigpe3JldHVybiB0aGlzLl9kaXNhYmxlQ2xlYXJ9c2V0IGRpc2FibGVDbGVhcihlKXt0aGlzLl9kaXNhYmxlQ2xlYXI9UnQoZSl9cmVnaXN0ZXIoZSl7dGhpcy5zb3J0YWJsZXMuc2V0KGUuaWQsZSl9ZGVyZWdpc3RlcihlKXt0aGlzLnNvcnRhYmxlcy5kZWxldGUoZS5pZCl9c29ydChlKXt0aGlzLmFjdGl2ZSE9ZS5pZD8odGhpcy5hY3RpdmU9ZS5pZCx0aGlzLmRpcmVjdGlvbj1lLnN0YXJ0P2Uuc3RhcnQ6dGhpcy5zdGFydCk6dGhpcy5kaXJlY3Rpb249dGhpcy5nZXROZXh0U29ydERpcmVjdGlvbihlKSx0aGlzLnNvcnRDaGFuZ2UuZW1pdCh7YWN0aXZlOnRoaXMuYWN0aXZlLGRpcmVjdGlvbjp0aGlzLmRpcmVjdGlvbn0pfWdldE5leHRTb3J0RGlyZWN0aW9uKGUpe2lmKCFlKXJldHVybiIiO2xldCByPWZ1bmN0aW9uKG4sdCl7bGV0IGU9WyJhc2MiLCJkZXNjIl07cmV0dXJuImRlc2MiPT1uJiZlLnJldmVyc2UoKSx0fHxlLnB1c2goIiIpLGV9KGUuc3RhcnR8fHRoaXMuc3RhcnQsZT8uZGlzYWJsZUNsZWFyPz90aGlzLmRpc2FibGVDbGVhcj8/ISF0aGlzLl9kZWZhdWx0T3B0aW9ucz8uZGlzYWJsZUNsZWFyKSxvPXIuaW5kZXhPZih0aGlzLmRpcmVjdGlvbikrMTtyZXR1cm4gbz49ci5sZW5ndGgmJihvPTApLHJbb119bmdPbkluaXQoKXt0aGlzLl9tYXJrSW5pdGlhbGl6ZWQoKX1uZ09uQ2hhbmdlcygpe3RoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShRcGUsOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRTb3J0IiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LXNvcnQiXSxpbnB1dHM6e2Rpc2FibGVkOlsibWF0U29ydERpc2FibGVkIiwiZGlzYWJsZWQiXSxhY3RpdmU6WyJtYXRTb3J0QWN0aXZlIiwiYWN0aXZlIl0sc3RhcnQ6WyJtYXRTb3J0U3RhcnQiLCJzdGFydCJdLGRpcmVjdGlvbjpbIm1hdFNvcnREaXJlY3Rpb24iLCJkaXJlY3Rpb24iXSxkaXNhYmxlQ2xlYXI6WyJtYXRTb3J0RGlzYWJsZUNsZWFyIiwiZGlzYWJsZUNsZWFyIl19LG91dHB1dHM6e3NvcnRDaGFuZ2U6Im1hdFNvcnRDaGFuZ2UifSxleHBvcnRBczpbIm1hdFNvcnQiXSxmZWF0dXJlczpbdHQsRnRdfSksbn0pKCksQWY9YXRlLkVOVEVSSU5HKyIgIitzdGUuU1RBTkRBUkRfQ1VSVkUsUGI9e2luZGljYXRvcjpLcigiaW5kaWNhdG9yIixba2koImFjdGl2ZS1hc2MsIGFzYyIsZ24oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwcHgpIn0pKSxraSgiYWN0aXZlLWRlc2MsIGRlc2MiLGduKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMTBweCkifSkpLExpKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsamkoQWYpKV0pLGxlZnRQb2ludGVyOktyKCJsZWZ0UG9pbnRlciIsW2tpKCJhY3RpdmUtYXNjLCBhc2MiLGduKHt0cmFuc2Zvcm06InJvdGF0ZSgtNDVkZWcpIn0pKSxraSgiYWN0aXZlLWRlc2MsIGRlc2MiLGduKHt0cmFuc2Zvcm06InJvdGF0ZSg0NWRlZykifSkpLExpKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsamkoQWYpKV0pLHJpZ2h0UG9pbnRlcjpLcigicmlnaHRQb2ludGVyIixba2koImFjdGl2ZS1hc2MsIGFzYyIsZ24oe3RyYW5zZm9ybToicm90YXRlKDQ1ZGVnKSJ9KSksa2koImFjdGl2ZS1kZXNjLCBkZXNjIixnbih7dHJhbnNmb3JtOiJyb3RhdGUoLTQ1ZGVnKSJ9KSksTGkoImFjdGl2ZS1hc2MgPD0+IGFjdGl2ZS1kZXNjIixqaShBZikpXSksYXJyb3dPcGFjaXR5OktyKCJhcnJvd09wYWNpdHkiLFtraSgiZGVzYy10by1hY3RpdmUsIGFzYy10by1hY3RpdmUsIGFjdGl2ZSIsZ24oe29wYWNpdHk6MX0pKSxraSgiZGVzYy10by1oaW50LCBhc2MtdG8taGludCwgaGludCIsZ24oe29wYWNpdHk6LjU0fSkpLGtpKCJoaW50LXRvLWRlc2MsIGFjdGl2ZS10by1kZXNjLCBkZXNjLCBoaW50LXRvLWFzYywgYWN0aXZlLXRvLWFzYywgYXNjLCB2b2lkIixnbih7b3BhY2l0eTowfSkpLExpKCIqID0+IGFzYywgKiA9PiBkZXNjLCAqID0+IGFjdGl2ZSwgKiA9PiBoaW50LCAqID0+IHZvaWQiLGppKCIwbXMiKSksTGkoIiogPD0+ICoiLGppKEFmKSldKSxhcnJvd1Bvc2l0aW9uOktyKCJhcnJvd1Bvc2l0aW9uIixbTGkoIiogPT4gZGVzYy10by1oaW50LCAqID0+IGRlc2MtdG8tYWN0aXZlIixqaShBZixEbShbZ24oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjUlKSJ9KSxnbih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pXSkpKSxMaSgiKiA9PiBoaW50LXRvLWRlc2MsICogPT4gYWN0aXZlLXRvLWRlc2MiLGppKEFmLERtKFtnbih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pLGduKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KV0pKSksTGkoIiogPT4gYXNjLXRvLWhpbnQsICogPT4gYXNjLXRvLWFjdGl2ZSIsamkoQWYsRG0oW2duKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KSxnbih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pXSkpKSxMaSgiKiA9PiBoaW50LXRvLWFzYywgKiA9PiBhY3RpdmUtdG8tYXNjIixqaShBZixEbShbZ24oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSxnbih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yNSUpIn0pXSkpKSxraSgiZGVzYy10by1oaW50LCBhc2MtdG8taGludCwgaGludCwgZGVzYy10by1hY3RpdmUsIGFzYy10by1hY3RpdmUsIGFjdGl2ZSIsZ24oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSksa2koImhpbnQtdG8tZGVzYywgYWN0aXZlLXRvLWRlc2MsIGRlc2MiLGduKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTI1JSkifSkpLGtpKCJoaW50LXRvLWFzYywgYWN0aXZlLXRvLWFzYywgYXNjIixnbih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDI1JSkifSkpXSksYWxsb3dDaGlsZHJlbjpLcigiYWxsb3dDaGlsZHJlbiIsW0xpKCIqIDw9PiAqIixbSW0oIkAqIixBbSgpLHtvcHRpb25hbDohMH0pXSldKX0sWms9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuY2hhbmdlcz1uZXcga2V9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGJLZT17cHJvdmlkZTpaayxkZXBzOltbbmV3IG5zLG5ldyB0bCxaa11dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIG58fG5ldyBaa319LHhLZT1zbyhjbGFzc3t9KSxLcGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHhLZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKCksdGhpcy5faW50bD1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fc29ydD1yLHRoaXMuX2NvbHVtbkRlZj1vLHRoaXMuX2ZvY3VzTW9uaXRvcj1zLHRoaXMuX2VsZW1lbnRSZWY9YSx0aGlzLl9hcmlhRGVzY3JpYmVyPWwsdGhpcy5fc2hvd0luZGljYXRvckhpbnQ9ITEsdGhpcy5fdmlld1N0YXRlPXt9LHRoaXMuX2Fycm93RGlyZWN0aW9uPSIiLHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITEsdGhpcy5hcnJvd1Bvc2l0aW9uPSJhZnRlciIsdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uPSJTb3J0IixjPy5hcnJvd1Bvc2l0aW9uJiYodGhpcy5hcnJvd1Bvc2l0aW9uPWM/LmFycm93UG9zaXRpb24pLHRoaXMuX2hhbmRsZVN0YXRlQ2hhbmdlcygpfWdldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9ufXNldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oZSl7dGhpcy5fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKGUpfWdldCBkaXNhYmxlQ2xlYXIoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZUNsZWFyfXNldCBkaXNhYmxlQ2xlYXIoZSl7dGhpcy5fZGlzYWJsZUNsZWFyPVJ0KGUpfW5nT25Jbml0KCl7IXRoaXMuaWQmJnRoaXMuX2NvbHVtbkRlZiYmKHRoaXMuaWQ9dGhpcy5fY29sdW1uRGVmLm5hbWUpLHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHt0b1N0YXRlOnRoaXMuX2lzU29ydGVkKCk/ImFjdGl2ZSI6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSx0aGlzLl9zb3J0LnJlZ2lzdGVyKHRoaXMpLHRoaXMuX3NvcnRCdXR0b249dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5tYXQtc29ydC1oZWFkZXItY29udGFpbmVyIiksdGhpcy5fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbil9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCkuc3Vic2NyaWJlKGU9PntsZXQgaT0hIWU7aSE9PXRoaXMuX3Nob3dJbmRpY2F0b3JIaW50JiYodGhpcy5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoaSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fc29ydC5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X3NldEluZGljYXRvckhpbnRWaXNpYmxlKGUpe3RoaXMuX2lzRGlzYWJsZWQoKSYmZXx8KHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PWUsdGhpcy5faXNTb3J0ZWQoKXx8KHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50P3tmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiaGludCJ9Ontmcm9tU3RhdGU6ImhpbnQiLHRvU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSkpfV9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoZSl7dGhpcy5fdmlld1N0YXRlPWV8fHt9LHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24mJih0aGlzLl92aWV3U3RhdGU9e3RvU3RhdGU6ZS50b1N0YXRlfSl9X3RvZ2dsZU9uSW50ZXJhY3Rpb24oKXt0aGlzLl9zb3J0LnNvcnQodGhpcyksKCJoaW50Ij09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlfHwiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlKSYmKHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApfV9oYW5kbGVDbGljaygpe3RoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5fc29ydC5zb3J0KHRoaXMpfV9oYW5kbGVLZXlkb3duKGUpeyF0aGlzLl9pc0Rpc2FibGVkKCkmJigzMj09PWUua2V5Q29kZXx8MTM9PT1lLmtleUNvZGUpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZU9uSW50ZXJhY3Rpb24oKSl9X2lzU29ydGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuYWN0aXZlPT10aGlzLmlkJiYoImFzYyI9PT10aGlzLl9zb3J0LmRpcmVjdGlvbnx8ImRlc2MiPT09dGhpcy5fc29ydC5kaXJlY3Rpb24pfV9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCl7cmV0dXJuYCR7dGhpcy5faXNTb3J0ZWQoKT8iYWN0aXZlLSI6IiJ9JHt0aGlzLl9hcnJvd0RpcmVjdGlvbn1gfV9nZXRBcnJvd1ZpZXdTdGF0ZSgpe2xldCBlPXRoaXMuX3ZpZXdTdGF0ZS5mcm9tU3RhdGU7cmV0dXJuKGU/YCR7ZX0tdG8tYDoiIikrdGhpcy5fdmlld1N0YXRlLnRvU3RhdGV9X3VwZGF0ZUFycm93RGlyZWN0aW9uKCl7dGhpcy5fYXJyb3dEaXJlY3Rpb249dGhpcy5faXNTb3J0ZWQoKT90aGlzLl9zb3J0LmRpcmVjdGlvbjp0aGlzLnN0YXJ0fHx0aGlzLl9zb3J0LnN0YXJ0fV9pc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZWR9X2dldEFyaWFTb3J0QXR0cmlidXRlKCl7cmV0dXJuIHRoaXMuX2lzU29ydGVkKCk/ImFzYyI9PXRoaXMuX3NvcnQuZGlyZWN0aW9uPyJhc2NlbmRpbmciOiJkZXNjZW5kaW5nIjoibm9uZSJ9X3JlbmRlckFycm93KCl7cmV0dXJuIXRoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5faXNTb3J0ZWQoKX1fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKGUpe3RoaXMuX3NvcnRCdXR0b24mJih0aGlzLl9hcmlhRGVzY3JpYmVyPy5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLl9zb3J0QnV0dG9uLHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbiksdGhpcy5fYXJpYURlc2NyaWJlcj8uZGVzY3JpYmUodGhpcy5fc29ydEJ1dHRvbixlKSksdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uPWV9X2hhbmRsZVN0YXRlQ2hhbmdlcygpe3RoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uPUp0KHRoaXMuX3NvcnQuc29ydENoYW5nZSx0aGlzLl9zb3J0Ll9zdGF0ZUNoYW5nZXMsdGhpcy5faW50bC5jaGFuZ2VzKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9pc1NvcnRlZCgpJiYodGhpcy5fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKSwoImhpbnQiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGV8fCJhY3RpdmUiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGUpJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHtmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiYWN0aXZlIn0pLHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PSExKSwhdGhpcy5faXNTb3J0ZWQoKSYmdGhpcy5fdmlld1N0YXRlJiYiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZToiYWN0aXZlIix0b1N0YXRlOnRoaXMuX2Fycm93RGlyZWN0aW9ufSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oWmspLE0obm4pLE0oTUUsOCksTSgiTUFUX1NPUlRfSEVBREVSX0NPTFVNTl9ERUYiLDgpLE0oRnIpLE0oUmUpLE0oZjIsOCksTShRcGUsOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1zb3J0LWhlYWRlciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1zb3J0LWhlYWRlciJdLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlQ2xpY2soKX0pKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLl9zZXRJbmRpY2F0b3JIaW50VmlzaWJsZSghMCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoITEpfSksMiZlJiYoemUoImFyaWEtc29ydCIsaS5fZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKSksZXQoIm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCIsaS5faXNEaXNhYmxlZCgpKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixpZDpbIm1hdC1zb3J0LWhlYWRlciIsImlkIl0sYXJyb3dQb3NpdGlvbjoiYXJyb3dQb3NpdGlvbiIsc3RhcnQ6InN0YXJ0Iixzb3J0QWN0aW9uRGVzY3JpcHRpb246InNvcnRBY3Rpb25EZXNjcmlwdGlvbiIsZGlzYWJsZUNsZWFyOiJkaXNhYmxlQ2xlYXIifSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXSxmZWF0dXJlczpbdHRdLGF0dHJzOmZLZSxuZ0NvbnRlbnRTZWxlY3RvcnM6Z0tlLGRlY2xzOjQsdmFyczo3LGNvbnN0czpbWzEsIm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0sWzEsIm1hdC1zb3J0LWhlYWRlci1jb250ZW50Il0sWyJjbGFzcyIsIm1hdC1zb3J0LWhlYWRlci1hcnJvdyIsNCwibmdJZiJdLFsxLCJtYXQtc29ydC1oZWFkZXItYXJyb3ciXSxbMSwibWF0LXNvcnQtaGVhZGVyLXN0ZW0iXSxbMSwibWF0LXNvcnQtaGVhZGVyLWluZGljYXRvciJdLFsxLCJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHhpKCksXygwLCJkaXYiLDApKDEsImRpdiIsMSksVm4oMiksdigpLEUoMyxtS2UsNiw2LCJkaXYiLDIpLHYoKSksMiZlJiYoZXQoIm1hdC1zb3J0LWhlYWRlci1zb3J0ZWQiLGkuX2lzU29ydGVkKCkpKCJtYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIiwiYmVmb3JlIj09PWkuYXJyb3dQb3NpdGlvbiksemUoInRhYmluZGV4IixpLl9pc0Rpc2FibGVkKCk/bnVsbDowKSgicm9sZSIsaS5faXNEaXNhYmxlZCgpP251bGw6ImJ1dHRvbiIpLEMoMykseSgibmdJZiIsaS5fcmVuZGVyQXJyb3coKSkpfSxkZXBlbmRlbmNpZXM6W0JlXSxzdHlsZXM6WyIubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2xldHRlci1zcGFjaW5nOm5vcm1hbDtvdXRsaW5lOjB9W21hdC1zb3J0LWhlYWRlcl0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIsW21hdC1zb3J0LWhlYWRlcl0uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntib3JkZXItYm90dG9tOnNvbGlkIDFweCBjdXJyZW50Q29sb3J9Lm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntjdXJzb3I6ZGVmYXVsdH0ubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc29ydC1oZWFkZXItY29udGVudHt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3Jle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfS5tYXQtc29ydC1oZWFkZXItYXJyb3d7aGVpZ2h0OjEycHg7d2lkdGg6MTJweDttaW4td2lkdGg6MTJweDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7b3BhY2l0eTowfS5tYXQtc29ydC1oZWFkZXItYXJyb3csW2Rpcj1ydGxdIC5tYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7bWFyZ2luOjAgMCAwIDZweH0ubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZSAubWF0LXNvcnQtaGVhZGVyLWFycm93LFtkaXI9cnRsXSAubWF0LXNvcnQtaGVhZGVyLWFycm93e21hcmdpbjowIDZweCAwIDB9Lm1hdC1zb3J0LWhlYWRlci1zdGVte2JhY2tncm91bmQ6Y3VycmVudENvbG9yO2hlaWdodDoxMHB4O3dpZHRoOjJweDttYXJnaW46YXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1zdGVte3dpZHRoOjA7Ym9yZGVyLWxlZnQ6c29saWQgMnB4fS5tYXQtc29ydC1oZWFkZXItaW5kaWNhdG9ye3dpZHRoOjEwMCU7aGVpZ2h0OjJweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbWlkZGxle21hcmdpbjphdXRvO2hlaWdodDoycHg7d2lkdGg6MnB4O2JhY2tncm91bmQ6Y3VycmVudENvbG9yO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZXt3aWR0aDowO2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMnB4O2JvcmRlci1sZWZ0OnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCwubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7YmFja2dyb3VuZDpjdXJyZW50Q29sb3I7d2lkdGg6NnB4O2hlaWdodDoycHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodHt3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OnNvbGlkIDZweDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdHt0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0O2xlZnQ6MH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7dHJhbnNmb3JtLW9yaWdpbjpsZWZ0O3JpZ2h0OjB9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbUGIuaW5kaWNhdG9yLFBiLmxlZnRQb2ludGVyLFBiLnJpZ2h0UG9pbnRlcixQYi5hcnJvd09wYWNpdHksUGIuYXJyb3dQb3NpdGlvbixQYi5hbGxvd0NoaWxkcmVuXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxacGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbYktlXSxpbXBvcnRzOltNZSxsbl19KSxufSkoKTtmdW5jdGlvbiBqRyhuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX3N0aWNreT0hMSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfWdldCBzdGlja3koKXtyZXR1cm4gdGhpcy5fc3RpY2t5fXNldCBzdGlja3kodCl7bGV0IGU9dGhpcy5fc3RpY2t5O3RoaXMuX3N0aWNreT1SdCh0KSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPWUhPT10aGlzLl9zdGlja3l9aGFzU3RpY2t5Q2hhbmdlZCgpe2xldCB0PXRoaXMuX2hhc1N0aWNreUNoYW5nZWQ7cmV0dXJuIHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITEsdH1yZXNldFN0aWNreUNoYW5nZWQoKXt0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfX19dmFyIEdHPW5ldyBwZSgiQ0RLX1RBQkxFIiksSnBlPShuZXcgcGUoInRleHQtY29sdW1uLW9wdGlvbnMiKSxqRyhjbGFzc3t9KSxuZXcgcGUoIl9DT0FMRVNDRURfU1RZTEVfU0NIRURVTEVSIiksKCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMudGVtcGxhdGU9ZSx0aGlzLl9kaWZmZXJzPWl9bmdPbkNoYW5nZXMoZSl7aWYoIXRoaXMuX2NvbHVtbnNEaWZmZXIpe2xldCBpPWUuY29sdW1ucyYmZS5jb2x1bW5zLmN1cnJlbnRWYWx1ZXx8W107dGhpcy5fY29sdW1uc0RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoaSkuY3JlYXRlKCksdGhpcy5fY29sdW1uc0RpZmZlci5kaWZmKGkpfX1nZXRDb2x1bW5zRGlmZigpe3JldHVybiB0aGlzLl9jb2x1bW5zRGlmZmVyLmRpZmYodGhpcy5jb2x1bW5zKX1leHRyYWN0Q2VsbFRlbXBsYXRlKGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgJHBlP2UuaGVhZGVyQ2VsbC50ZW1wbGF0ZTp0aGlzIGluc3RhbmNlb2YgZWhlP2UuZm9vdGVyQ2VsbC50ZW1wbGF0ZTplLmNlbGwudGVtcGxhdGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oVmkpLE0oa2MpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixmZWF0dXJlczpbRnRdfSksbn0pKCkpLHdLZT1qRyhjbGFzcyBleHRlbmRzIEpwZXt9KSwkcGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHdLZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl90YWJsZT1yfW5nT25DaGFuZ2VzKGUpe3N1cGVyLm5nT25DaGFuZ2VzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFZpKSxNKGtjKSxNKEdHLDgpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrSGVhZGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0hlYWRlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtIZWFkZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W3R0LEZ0XX0pLG59KSgpLFNLZT1qRyhjbGFzcyBleHRlbmRzIEpwZXt9KSxlaGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFNLZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl90YWJsZT1yfW5nT25DaGFuZ2VzKGUpe3N1cGVyLm5nT25DaGFuZ2VzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFZpKSxNKGtjKSxNKEdHLDgpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrRm9vdGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0Zvb3RlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtGb290ZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W3R0LEZ0XX0pLG59KSgpLHRoZT0obmV3IHBlKCJDREtfU1BMIiksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W1pjXX0pLG59KSgpKSxuaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W3RoZSxsbixsbl19KSxufSkoKSxXRz1jbGFzcyBleHRlbmRzIFB2e2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5fcmVuZGVyRGF0YT1uZXcgaHIoW10pLHRoaXMuX2ZpbHRlcj1uZXcgaHIoIiIpLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXM9bmV3IGtlLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249bnVsbCx0aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3I9KGUsaSk9PntsZXQgcj1lW2ldO2lmKGhIKHIpKXtsZXQgbz1OdW1iZXIocik7cmV0dXJuIG88OTAwNzE5OTI1NDc0MDk5MT9vOnJ9cmV0dXJuIHJ9LHRoaXMuc29ydERhdGE9KGUsaSk9PntsZXQgcj1pLmFjdGl2ZSxvPWkuZGlyZWN0aW9uO3JldHVybiByJiYiIiE9bz9lLnNvcnQoKHMsYSk9PntsZXQgbD10aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3IocyxyKSxjPXRoaXMuc29ydGluZ0RhdGFBY2Nlc3NvcihhLHIpLHU9dHlwZW9mIGwsZD10eXBlb2YgYzt1IT09ZCYmKCJudW1iZXIiPT09dSYmKGwrPSIiKSwibnVtYmVyIj09PWQmJihjKz0iIikpO2xldCBwPTA7cmV0dXJuIG51bGwhPWwmJm51bGwhPWM/bD5jP3A9MTpsPGMmJihwPS0xKTpudWxsIT1sP3A9MTpudWxsIT1jJiYocD0tMSkscCooImFzYyI9PW8/MTotMSl9KTplfSx0aGlzLmZpbHRlclByZWRpY2F0ZT0oZSxpKT0+e2xldCByPU9iamVjdC5rZXlzKGUpLnJlZHVjZSgocyxhKT0+cytlW2FdKyJcdTI1ZWMiLCIiKS50b0xvd2VyQ2FzZSgpLG89aS50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4tMSE9ci5pbmRleE9mKG8pfSx0aGlzLl9kYXRhPW5ldyBocih0KSx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX1nZXQgZGF0YSgpe3JldHVybiB0aGlzLl9kYXRhLnZhbHVlfXNldCBkYXRhKHQpe3Q9QXJyYXkuaXNBcnJheSh0KT90OltdLHRoaXMuX2RhdGEubmV4dCh0KSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9ufHx0aGlzLl9maWx0ZXJEYXRhKHQpfWdldCBmaWx0ZXIoKXtyZXR1cm4gdGhpcy5fZmlsdGVyLnZhbHVlfXNldCBmaWx0ZXIodCl7dGhpcy5fZmlsdGVyLm5leHQodCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fZmlsdGVyRGF0YSh0aGlzLmRhdGEpfWdldCBzb3J0KCl7cmV0dXJuIHRoaXMuX3NvcnR9c2V0IHNvcnQodCl7dGhpcy5fc29ydD10LHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfWdldCBwYWdpbmF0b3IoKXtyZXR1cm4gdGhpcy5fcGFnaW5hdG9yfXNldCBwYWdpbmF0b3IodCl7dGhpcy5fcGFnaW5hdG9yPXQsdGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCl9X3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpe2xldCB0PXRoaXMuX3NvcnQ/SnQodGhpcy5fc29ydC5zb3J0Q2hhbmdlLHRoaXMuX3NvcnQuaW5pdGlhbGl6ZWQpOlh0KG51bGwpLGU9dGhpcy5fcGFnaW5hdG9yP0p0KHRoaXMuX3BhZ2luYXRvci5wYWdlLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXMsdGhpcy5fcGFnaW5hdG9yLmluaXRpYWxpemVkKTpYdChudWxsKSxyPUx0KFt0aGlzLl9kYXRhLHRoaXMuX2ZpbHRlcl0pLnBpcGUoTCgoW2FdKT0+dGhpcy5fZmlsdGVyRGF0YShhKSkpLG89THQoW3IsdF0pLnBpcGUoTCgoW2FdKT0+dGhpcy5fb3JkZXJEYXRhKGEpKSkscz1MdChbbyxlXSkucGlwZShMKChbYV0pPT50aGlzLl9wYWdlRGF0YShhKSkpO3RoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1zLnN1YnNjcmliZShhPT50aGlzLl9yZW5kZXJEYXRhLm5leHQoYSkpfV9maWx0ZXJEYXRhKHQpe3JldHVybiB0aGlzLmZpbHRlcmVkRGF0YT1udWxsPT10aGlzLmZpbHRlcnx8IiI9PT10aGlzLmZpbHRlcj90OnQuZmlsdGVyKGU9PnRoaXMuZmlsdGVyUHJlZGljYXRlKGUsdGhpcy5maWx0ZXIpKSx0aGlzLnBhZ2luYXRvciYmdGhpcy5fdXBkYXRlUGFnaW5hdG9yKHRoaXMuZmlsdGVyZWREYXRhLmxlbmd0aCksdGhpcy5maWx0ZXJlZERhdGF9X29yZGVyRGF0YSh0KXtyZXR1cm4gdGhpcy5zb3J0P3RoaXMuc29ydERhdGEodC5zbGljZSgpLHRoaXMuc29ydCk6dH1fcGFnZURhdGEodCl7aWYoIXRoaXMucGFnaW5hdG9yKXJldHVybiB0O2xldCBlPXRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCp0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZTtyZXR1cm4gdC5zbGljZShlLGUrdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpfV91cGRhdGVQYWdpbmF0b3IodCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMucGFnaW5hdG9yO2lmKGUmJihlLmxlbmd0aD10LGUucGFnZUluZGV4PjApKXtsZXQgaT1NYXRoLmNlaWwoZS5sZW5ndGgvZS5wYWdlU2l6ZSktMXx8MCxyPU1hdGgubWluKGUucGFnZUluZGV4LGkpO3IhPT1lLnBhZ2VJbmRleCYmKGUucGFnZUluZGV4PXIsdGhpcy5faW50ZXJuYWxQYWdlQ2hhbmdlcy5uZXh0KCkpfX0pfWNvbm5lY3QoKXtyZXR1cm4gdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCksdGhpcy5fcmVuZGVyRGF0YX1kaXNjb25uZWN0KCl7dGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uPW51bGx9fSxKaz1jbGFzcyBleHRlbmRzIFdHe30sREtlPVsiZGlhbG9nUG9wdXAiXSxBS2U9WyJodWVTbGlkZXIiXSxJS2U9WyJhbHBoYVNsaWRlciJdO2Z1bmN0aW9uIFBLZShuLHQpe2lmKDEmbiYmTygwLCJkaXYiKSwyJm4pe2xldCBlPVMoKTtReCgiYXJyb3cgYXJyb3ctIixlLmNwVXNlUG9zaXRpb24sIiIpLFB0KCJ0b3AiLGUuYXJyb3dUb3AsInB4Iil9fWZ1bmN0aW9uIFJLZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMjgpLFAoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uQ29sb3JDaGFuZ2UocikpfSkoImRyYWdTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uRHJhZ1N0YXJ0KCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub25EcmFnRW5kKCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pLE8oMSwiZGl2IiwxNCksdigpfWlmKDImbil7bGV0IGU9UygpO1B0KCJiYWNrZ3JvdW5kLWNvbG9yIixlLmh1ZVNsaWRlckNvbG9yKSx5KCJyZ1giLDEpKCJyZ1kiLDEpLEMoMSksUHQoInRvcCIsbnVsbD09ZS5zbGlkZXI/bnVsbDplLnNsaWRlci52LCJweCIpKCJsZWZ0IixudWxsPT1lLnNsaWRlcj9udWxsOmUuc2xpZGVyLnMsInB4Iil9fWZ1bmN0aW9uIE9LZShuLHQpezEmbiYmKEluKCksXygwLCJzdmciLDI5KSxPKDEsInBhdGgiLDMwKSgyLCJwYXRoIiwzMSksdigpKX1mdW5jdGlvbiBrS2Uobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJidXR0b24iLDMyKSxQKCJjbGljayIsZnVuY3Rpb24ocil7b2UoZSk7bGV0IG89UygpO3JldHVybiBzZShvLm9uQWRkUHJlc2V0Q29sb3IocixvLnNlbGVjdGVkQ29sb3IpKX0pLEEoMSksdigpfWlmKDImbil7bGV0IGU9UygpO0RhKGUuY3BBZGRDb2xvckJ1dHRvbkNsYXNzKSx5KCJkaXNhYmxlZCIsZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGg+PWUuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgpLEMoMSksamUoIiAiLGUuY3BBZGRDb2xvckJ1dHRvblRleHQsIiAiKX19ZnVuY3Rpb24gRktlKG4sdCl7MSZuJiZPKDAsImRpdiIsMzMpfWZ1bmN0aW9uIE5LZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9UygyKTt5KCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5hKX19ZnVuY3Rpb24gTEtlKG4sdCl7MSZuJiYoXygwLCJkaXYiKSxBKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIEJLZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMzQpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25DeWFuSW5wdXQocikpfSksdigpLF8oMywiaW5wdXQiLDM2KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbk1hZ2VudGFJbnB1dChyKSl9KSx2KCksXyg0LCJpbnB1dCIsMzYpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uWWVsbG93SW5wdXQocikpfSksdigpLF8oNSwiaW5wdXQiLDM2KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbkJsYWNrSW5wdXQocikpfSksdigpLEUoNixOS2UsMSwyLCJpbnB1dCIsMzcpLHYoKSxfKDcsImRpdiIsMzUpKDgsImRpdiIpLEEoOSwiQyIpLHYoKSxfKDEwLCJkaXYiKSxBKDExLCJNIiksdigpLF8oMTIsImRpdiIpLEEoMTMsIlkiKSx2KCksXygxNCwiZGl2IiksQSgxNSwiSyIpLHYoKSxFKDE2LExLZSwyLDAsImRpdiIsMzgpLHYoKSgpfWlmKDImbil7bGV0IGU9UygpO1B0KCJkaXNwbGF5IiwzIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLEMoMikseSgicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5jKSxDKDEpLHkoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5jbXlrVGV4dD9udWxsOmUuY215a1RleHQubSksQygxKSx5KCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PWUuY215a1RleHQ/bnVsbDplLmNteWtUZXh0LnkpLEMoMSkseSgicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5rKSxDKDEpLHkoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSxDKDEwKSx5KCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIFZLZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9UygyKTt5KCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5hKX19ZnVuY3Rpb24gSEtlKG4sdCl7MSZuJiYoXygwLCJkaXYiKSxBKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIFVLZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsNDApKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25IdWVJbnB1dChyKSl9KSx2KCksXygzLCJpbnB1dCIsMzYpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uU2F0dXJhdGlvbklucHV0KHIpKX0pLHYoKSxfKDQsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25MaWdodG5lc3NJbnB1dChyKSl9KSx2KCksRSg1LFZLZSwxLDIsImlucHV0IiwzNyksdigpLF8oNiwiZGl2IiwzNSkoNywiZGl2IiksQSg4LCJIIiksdigpLF8oOSwiZGl2IiksQSgxMCwiUyIpLHYoKSxfKDExLCJkaXYiKSxBKDEyLCJMIiksdigpLEUoMTMsSEtlLDIsMCwiZGl2IiwzOCksdigpKCl9aWYoMiZuKXtsZXQgZT1TKCk7UHQoImRpc3BsYXkiLDIhPT1lLmZvcm1hdD8ibm9uZSI6ImJsb2NrIiksQygyKSx5KCJyZyIsMzYwKSgidmFsdWUiLG51bGw9PWUuaHNsYVRleHQ/bnVsbDplLmhzbGFUZXh0LmgpLEMoMSkseSgicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5zKSxDKDEpLHkoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQubCksQygxKSx5KCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCksQyg4KSx5KCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIHpLZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9UygyKTt5KCJyZyIsMSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5hKX19ZnVuY3Rpb24gaktlKG4sdCl7MSZuJiYoXygwLCJkaXYiKSxBKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIEdLZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsNDIpKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MyksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25SZWRJbnB1dChyKSl9KSx2KCksXygzLCJpbnB1dCIsNDMpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uR3JlZW5JbnB1dChyKSl9KSx2KCksXyg0LCJpbnB1dCIsNDMpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uQmx1ZUlucHV0KHIpKX0pLHYoKSxFKDUsektlLDEsMiwiaW5wdXQiLDM3KSx2KCksXyg2LCJkaXYiLDM1KSg3LCJkaXYiKSxBKDgsIlIiKSx2KCksXyg5LCJkaXYiKSxBKDEwLCJHIiksdigpLF8oMTEsImRpdiIpLEEoMTIsIkIiKSx2KCksRSgxMyxqS2UsMiwwLCJkaXYiLDM4KSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTtQdCgiZGlzcGxheSIsMSE9PWUuZm9ybWF0PyJub25lIjoiYmxvY2siKSxDKDIpLHkoInJnIiwyNTUpKCJ2YWx1ZSIsbnVsbD09ZS5yZ2JhVGV4dD9udWxsOmUucmdiYVRleHQuciksQygxKSx5KCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PWUucmdiYVRleHQ/bnVsbDplLnJnYmFUZXh0LmcpLEMoMSkseSgicmciLDI1NSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5iKSxDKDEpLHkoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSxDKDgpLHkoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gV0tlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiaW5wdXQiLDM5KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoMikub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKDIpLm9uQWxwaGFJbnB1dChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1TKDIpO3koInJnIiwxKSgidmFsdWUiLGUuaGV4QWxwaGEpfX1mdW5jdGlvbiBxS2Uobix0KXsxJm4mJihfKDAsImRpdiIpLEEoMSwiQSIpLHYoKSl9ZnVuY3Rpb24gWUtlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2Iiw0NCkoMSwiZGl2IiwzNSkoMiwiaW5wdXQiLDQ1KSxQKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub25IZXhJbnB1dChudWxsKSl9KSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25IZXhJbnB1dChyKSl9KSx2KCksRSgzLFdLZSwxLDIsImlucHV0IiwzNyksdigpLF8oNCwiZGl2IiwzNSkoNSwiZGl2IiksQSg2LCJIZXgiKSx2KCksRSg3LHFLZSwyLDAsImRpdiIsMzgpLHYoKSgpfWlmKDImbil7bGV0IGU9UygpO1B0KCJkaXNwbGF5IiwwIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLGV0KCJoZXgtYWxwaGEiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCksQygyKSx5KCJ2YWx1ZSIsZS5oZXhUZXh0KSxDKDEpLHkoIm5nSWYiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCksQyg0KSx5KCJuZ0lmIiwiZm9yY2VkIj09PWUuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBYS2Uobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJpbnB1dCIsMzkpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygyKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoMikub25BbHBoYUlucHV0KHIpKX0pLHYoKX1pZigyJm4pe2xldCBlPVMoMik7eSgicmciLDEpKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQuYSl9fWZ1bmN0aW9uIFFLZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsNDYpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25WYWx1ZUlucHV0KHIpKX0pLHYoKSxFKDMsWEtlLDEsMiwiaW5wdXQiLDM3KSx2KCksXyg0LCJkaXYiLDM1KSg1LCJkaXYiKSxBKDYsIlYiKSx2KCksXyg3LCJkaXYiKSxBKDgsIkEiKSx2KCkoKSgpfWlmKDImbil7bGV0IGU9UygpO0MoMikseSgicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5sKSxDKDEpLHkoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gS0tlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2Iiw0NykoMSwic3BhbiIsNDgpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub25Gb3JtYXRUb2dnbGUoLTEpKX0pLHYoKSxfKDIsInNwYW4iLDQ4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uRm9ybWF0VG9nZ2xlKDEpKX0pLHYoKSgpfX1mdW5jdGlvbiBaS2Uobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJzcGFuIiw1NSksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoMykub25SZW1vdmVQcmVzZXRDb2xvcihyLG8pKX0pLHYoKX0yJm4mJkRhKFMoNCkuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzKX1mdW5jdGlvbiBKS2Uobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDUzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1vZShlKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoMykuc2V0Q29sb3JGcm9tU3RyaW5nKG8pKX0pLEUoMSxaS2UsMSwzLCJzcGFuIiw1NCksdigpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKDMpO1B0KCJiYWNrZ3JvdW5kLWNvbG9yIixlKSxDKDEpLHkoIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbil9fWZ1bmN0aW9uICRLZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiksRSgxLEpLZSwyLDMsImRpdiIsNTIpLHYoKSksMiZuKXtsZXQgZT1TKDIpO0RhKGUuY3BQcmVzZXRDb2xvcnNDbGFzcyksQygxKSx5KCJuZ0Zvck9mIixlLmNwUHJlc2V0Q29sb3JzKX19ZnVuY3Rpb24gZVplKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiKSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKDIpO0RhKGUuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcyksQygxKSx5dChlLmNwUHJlc2V0RW1wdHlNZXNzYWdlKX19ZnVuY3Rpb24gdFplKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDQ5KSxPKDEsImhyIiksXygyLCJkaXYiLDUwKSxBKDMpLHYoKSxFKDQsJEtlLDIsNCwiZGl2Iiw1MSksRSg1LGVaZSwyLDQsImRpdiIsNTEpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygzKSx5dChlLmNwUHJlc2V0TGFiZWwpLEMoMSkseSgibmdJZiIsbnVsbD09ZS5jcFByZXNldENvbG9ycz9udWxsOmUuY3BQcmVzZXRDb2xvcnMubGVuZ3RoKSxDKDEpLHkoIm5nSWYiLCEobnVsbCE9ZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGgpJiZlLmNwQWRkQ29sb3JCdXR0b24pfX1mdW5jdGlvbiBuWmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJidXR0b24iLDU4KSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoMikub25DYW5jZWxDb2xvcihyKSl9KSxBKDEpLHYoKX1pZigyJm4pe2xldCBlPVMoMik7RGEoZS5jcENhbmNlbEJ1dHRvbkNsYXNzKSxDKDEpLHl0KGUuY3BDYW5jZWxCdXR0b25UZXh0KX19ZnVuY3Rpb24gaVplKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiYnV0dG9uIiw1OCksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKDIpLm9uQWNjZXB0Q29sb3IocikpfSksQSgxKSx2KCl9aWYoMiZuKXtsZXQgZT1TKDIpO0RhKGUuY3BPS0J1dHRvbkNsYXNzKSxDKDEpLHl0KGUuY3BPS0J1dHRvblRleHQpfX1mdW5jdGlvbiByWmUobix0KXtpZigxJm4mJihfKDAsImRpdiIsNTYpLEUoMSxuWmUsMiw0LCJidXR0b24iLDU3KSxFKDIsaVplLDIsNCwiYnV0dG9uIiw1NyksdigpKSwyJm4pe2xldCBlPVMoKTtDKDEpLHkoIm5nSWYiLGUuY3BDYW5jZWxCdXR0b24pLEMoMSkseSgibmdJZiIsZS5jcE9LQnV0dG9uKX19ZnVuY3Rpb24gb1plKG4sdCl7MSZuJiZOaSgwKX1mdW5jdGlvbiBzWmUobix0KXtpZigxJm4mJihfKDAsImRpdiIsNTkpLEUoMSxvWmUsMSwwLCJuZy1jb250YWluZXIiLDYwKSx2KCkpLDImbil7bGV0IGU9UygpO0MoMSkseSgibmdUZW1wbGF0ZU91dGxldCIsZS5jcEV4dHJhVGVtcGxhdGUpfX12YXIgd3M9KCgpPT4oZnVuY3Rpb24obil7bltuLkhFWD0wXT0iSEVYIixuW24uUkdCQT0xXT0iUkdCQSIsbltuLkhTTEE9Ml09IkhTTEEiLG5bbi5DTVlLPTNdPSJDTVlLIn0od3N8fCh3cz17fSkpLHdzKSkoKSxodT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9aSx0aGlzLmE9cn19LFJiPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0sUnA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy5sPWksdGhpcy5hPXJ9fSx0MD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG89MSl7dGhpcy5jPXQsdGhpcy5tPWUsdGhpcy55PWksdGhpcy5rPXIsdGhpcy5hPW99fSxjWmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubmV3VmFsdWU9bmV3IEd9aW5wdXRDaGFuZ2UoZSl7bGV0IGk9ZS50YXJnZXQudmFsdWU7aWYodm9pZCAwPT09dGhpcy5yZyl0aGlzLm5ld1ZhbHVlLmVtaXQoaSk7ZWxzZXtsZXQgcj1wYXJzZUZsb2F0KGkpO3RoaXMubmV3VmFsdWUuZW1pdCh7djpyLHJnOnRoaXMucmd9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJ0ZXh0IiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlucHV0Q2hhbmdlKG8pfSl9LGlucHV0czp7cmc6InJnIix0ZXh0OiJ0ZXh0In0sb3V0cHV0czp7bmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxufSkoKSx1WmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsUmVmPWUsdGhpcy5kcmFnRW5kPW5ldyBHLHRoaXMuZHJhZ1N0YXJ0PW5ldyBHLHRoaXMubmV3VmFsdWU9bmV3IEcsdGhpcy5saXN0ZW5lck1vdmU9aT0+dGhpcy5tb3ZlKGkpLHRoaXMubGlzdGVuZXJTdG9wPSgpPT50aGlzLnN0b3AoKX1tb3VzZURvd24oZSl7dGhpcy5zdGFydChlKX10b3VjaFN0YXJ0KGUpe3RoaXMuc3RhcnQoZSl9bW92ZShlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDdXJzb3IoZSl9c3RhcnQoZSl7dGhpcy5zZXRDdXJzb3IoZSksZS5zdG9wUHJvcGFnYXRpb24oKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSx0aGlzLmRyYWdTdGFydC5lbWl0KCl9c3RvcCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLHRoaXMuZHJhZ0VuZC5lbWl0KCl9Z2V0WChlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PWUucGFnZVg/ZS5wYWdlWDplLnRvdWNoZXNbMF0ucGFnZVgpLWkubGVmdC13aW5kb3cucGFnZVhPZmZzZXR9Z2V0WShlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PWUucGFnZVk/ZS5wYWdlWTplLnRvdWNoZXNbMF0ucGFnZVkpLWkudG9wLXdpbmRvdy5wYWdlWU9mZnNldH1zZXRDdXJzb3IoZSl7bGV0IGk9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLHI9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCxvPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRYKGUpLGkpKSxzPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRZKGUpLHIpKTt2b2lkIDAhPT10aGlzLnJnWCYmdm9pZCAwIT09dGhpcy5yZ1k/dGhpcy5uZXdWYWx1ZS5lbWl0KHtzOm8vaSx2OjEtcy9yLHJnWDp0aGlzLnJnWCxyZ1k6dGhpcy5yZ1l9KTp2b2lkIDA9PT10aGlzLnJnWCYmdm9pZCAwIT09dGhpcy5yZ1k/dGhpcy5uZXdWYWx1ZS5lbWl0KHt2OnMvcixyZ1k6dGhpcy5yZ1l9KTp2b2lkIDAhPT10aGlzLnJnWCYmdm9pZCAwPT09dGhpcy5yZ1kmJnRoaXMubmV3VmFsdWUuZW1pdCh7djpvL2kscmdYOnRoaXMucmdYfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwic2xpZGVyIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgibW91c2Vkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5tb3VzZURvd24obyl9KSgidG91Y2hzdGFydCIsZnVuY3Rpb24obyl7cmV0dXJuIGkudG91Y2hTdGFydChvKX0pfSxpbnB1dHM6e3JnWDoicmdYIixyZ1k6InJnWSIsc2xpZGVyOiJzbGlkZXIifSxvdXRwdXRzOntkcmFnRW5kOiJkcmFnRW5kIixkcmFnU3RhcnQ6ImRyYWdTdGFydCIsbmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxufSkoKSwkaz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmg9dCx0aGlzLnM9ZSx0aGlzLnY9aSx0aGlzLmE9cn19LGVGPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0scUc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aXZlPW51bGx9c2V0QWN0aXZlKGUpe3RoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZSE9PWUmJiJpbmxpbmUiIT09dGhpcy5hY3RpdmUuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmFjdGl2ZS5jbG9zZURpYWxvZygpLHRoaXMuYWN0aXZlPWV9aHN2YTJoc2xhKGUpe2xldCBpPWUuaCxyPWUucyxvPWUudixzPWUuYTtpZigwPT09bylyZXR1cm4gbmV3IFJwKGksMCwwLHMpO2lmKDA9PT1yJiYxPT09bylyZXR1cm4gbmV3IFJwKGksMSwxLHMpO3tsZXQgYT1vKigyLXIpLzI7cmV0dXJuIG5ldyBScChpLG8qci8oMS1NYXRoLmFicygyKmEtMSkpLGEscyl9fWhzbGEyaHN2YShlKXtsZXQgaT1NYXRoLm1pbihlLmgsMSkscj1NYXRoLm1pbihlLnMsMSksbz1NYXRoLm1pbihlLmwsMSkscz1NYXRoLm1pbihlLmEsMSk7aWYoMD09PW8pcmV0dXJuIG5ldyBSYihpLDAsMCxzKTt7bGV0IGE9bytyKigxLU1hdGguYWJzKDIqby0xKSkvMjtyZXR1cm4gbmV3IFJiKGksMiooYS1vKS9hLGEscyl9fWhzdmFUb1JnYmEoZSl7bGV0IGkscixvLHM9ZS5oLGE9ZS5zLGw9ZS52LGM9ZS5hLHU9TWF0aC5mbG9vcig2KnMpLGQ9NipzLXUscD1sKigxLWEpLGg9bCooMS1kKmEpLGY9bCooMS0oMS1kKSphKTtzd2l0Y2godSU2KXtjYXNlIDA6aT1sLHI9ZixvPXA7YnJlYWs7Y2FzZSAxOmk9aCxyPWwsbz1wO2JyZWFrO2Nhc2UgMjppPXAscj1sLG89ZjticmVhaztjYXNlIDM6aT1wLHI9aCxvPWw7YnJlYWs7Y2FzZSA0Omk9ZixyPXAsbz1sO2JyZWFrO2Nhc2UgNTppPWwscj1wLG89aDticmVhaztkZWZhdWx0Omk9MCxyPTAsbz0wfXJldHVybiBuZXcgaHUoaSxyLG8sYyl9Y215a1RvUmdiKGUpe3JldHVybiBuZXcgaHUoKDEtZS5jKSooMS1lLmspLCgxLWUubSkqKDEtZS5rKSwoMS1lLnkpKigxLWUuayksZS5hKX1yZ2JhVG9DbXlrKGUpe2xldCBpPTEtTWF0aC5tYXgoZS5yLGUuZyxlLmIpO3JldHVybiAxPT09aT9uZXcgdDAoMCwwLDAsMSxlLmEpOm5ldyB0MCgoMS1lLnItaSkvKDEtaSksKDEtZS5nLWkpLygxLWkpLCgxLWUuYi1pKS8oMS1pKSxpLGUuYSl9cmdiYVRvSHN2YShlKXtsZXQgaSxyLG89TWF0aC5taW4oZS5yLDEpLHM9TWF0aC5taW4oZS5nLDEpLGE9TWF0aC5taW4oZS5iLDEpLGw9TWF0aC5taW4oZS5hLDEpLGM9TWF0aC5tYXgobyxzLGEpLHU9TWF0aC5taW4obyxzLGEpLGQ9YyxwPWMtdTtpZihyPTA9PT1jPzA6cC9jLGM9PT11KWk9MDtlbHNle3N3aXRjaChjKXtjYXNlIG86aT0ocy1hKS9wKyhzPGE/NjowKTticmVhaztjYXNlIHM6aT0oYS1vKS9wKzI7YnJlYWs7Y2FzZSBhOmk9KG8tcykvcCs0O2JyZWFrO2RlZmF1bHQ6aT0wfWkvPTZ9cmV0dXJuIG5ldyBSYihpLHIsZCxsKX1yZ2JhVG9IZXgoZSxpKXtsZXQgcj0iIyIrKDE2Nzc3MjE2fGUucjw8MTZ8ZS5nPDw4fGUuYikudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtyZXR1cm4gaSYmKHIrPSgyNTZ8TWF0aC5yb3VuZCgyNTUqZS5hKSkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSkscn1ub3JtYWxpemVDTVlLKGUpe3JldHVybiBuZXcgdDAoZS5jLzEwMCxlLm0vMTAwLGUueS8xMDAsZS5rLzEwMCxlLmEpfWRlbm9ybWFsaXplQ01ZSyhlKXtyZXR1cm4gbmV3IHQwKE1hdGguZmxvb3IoMTAwKmUuYyksTWF0aC5mbG9vcigxMDAqZS5tKSxNYXRoLmZsb29yKDEwMCplLnkpLE1hdGguZmxvb3IoMTAwKmUuayksZS5hKX1kZW5vcm1hbGl6ZVJHQkEoZSl7cmV0dXJuIG5ldyBodShNYXRoLnJvdW5kKDI1NSplLnIpLE1hdGgucm91bmQoMjU1KmUuZyksTWF0aC5yb3VuZCgyNTUqZS5iKSxlLmEpfXN0cmluZ1RvSHN2YShlPSIiLGk9ITEpe2xldCByPW51bGw7ZT0oZXx8IiIpLnRvTG93ZXJDYXNlKCk7bGV0IG89W3tyZTovKHJnYilhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKiU/LFxzKihcZHsxLDN9KVxzKiU/KD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKHMpe3JldHVybiBuZXcgaHUocGFyc2VJbnQoc1syXSwxMCkvMjU1LHBhcnNlSW50KHNbM10sMTApLzI1NSxwYXJzZUludChzWzRdLDEwKS8yNTUsaXNOYU4ocGFyc2VGbG9hdChzWzVdKSk/MTpwYXJzZUZsb2F0KHNbNV0pKX19LHtyZTovKGhzbClhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KSVccyosXHMqKFxkezEsM30pJVxzKig/OixccyooXGQrKD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IFJwKHBhcnNlSW50KHNbMl0sMTApLzM2MCxwYXJzZUludChzWzNdLDEwKS8xMDAscGFyc2VJbnQoc1s0XSwxMCkvMTAwLGlzTmFOKHBhcnNlRmxvYXQoc1s1XSkpPzE6cGFyc2VGbG9hdChzWzVdKSl9fV07by5wdXNoKGk/e3JlOi8jKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KT8kLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IGh1KHBhcnNlSW50KHNbMV0sMTYpLzI1NSxwYXJzZUludChzWzJdLDE2KS8yNTUscGFyc2VJbnQoc1szXSwxNikvMjU1LHBhcnNlSW50KHNbNF18fCJGRiIsMTYpLzI1NSl9fTp7cmU6LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkkLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IGh1KHBhcnNlSW50KHNbMV0sMTYpLzI1NSxwYXJzZUludChzWzJdLDE2KS8yNTUscGFyc2VJbnQoc1szXSwxNikvMjU1LDEpfX0pLG8ucHVzaCh7cmU6LyMoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkkLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IGh1KHBhcnNlSW50KHNbMV0rc1sxXSwxNikvMjU1LHBhcnNlSW50KHNbMl0rc1syXSwxNikvMjU1LHBhcnNlSW50KHNbM10rc1szXSwxNikvMjU1LDEpfX0pO2ZvcihsZXQgcyBpbiBvKWlmKG8uaGFzT3duUHJvcGVydHkocykpe2xldCBhPW9bc10sbD1hLnJlLmV4ZWMoZSksYz1sJiZhLnBhcnNlKGwpO2lmKGMpcmV0dXJuIGMgaW5zdGFuY2VvZiBodT9yPXRoaXMucmdiYVRvSHN2YShjKTpjIGluc3RhbmNlb2YgUnAmJihyPXRoaXMuaHNsYTJoc3ZhKGMpKSxyfXJldHVybiByfW91dHB1dEZvcm1hdChlLGkscil7c3dpdGNoKCJhdXRvIj09PWkmJihpPWUuYTwxPyJyZ2JhIjoiaGV4IiksaSl7Y2FzZSJoc2xhIjpsZXQgbz10aGlzLmhzdmEyaHNsYShlKSxzPW5ldyBScChNYXRoLnJvdW5kKDM2MCpvLmgpLE1hdGgucm91bmQoMTAwKm8ucyksTWF0aC5yb3VuZCgxMDAqby5sKSxNYXRoLnJvdW5kKDEwMCpvLmEpLzEwMCk7cmV0dXJuIGUuYTwxfHwiYWx3YXlzIj09PXI/ImhzbGEoIitzLmgrIiwiK3MucysiJSwiK3MubCsiJSwiK3MuYSsiKSI6ImhzbCgiK3MuaCsiLCIrcy5zKyIlLCIrcy5sKyIlKSI7Y2FzZSJyZ2JhIjpsZXQgYT10aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEoZSkpO3JldHVybiBlLmE8MXx8ImFsd2F5cyI9PT1yPyJyZ2JhKCIrYS5yKyIsIithLmcrIiwiK2EuYisiLCIrTWF0aC5yb3VuZCgxMDAqYS5hKS8xMDArIikiOiJyZ2IoIithLnIrIiwiK2EuZysiLCIrYS5iKyIpIjtkZWZhdWx0OmxldCBsPSJhbHdheXMiPT09cnx8ImZvcmNlZCI9PT1yO3JldHVybiB0aGlzLnJnYmFUb0hleCh0aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEoZSkpLGwpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksaWhlPXR5cGVvZiB3aW5kb3c8InUiJiYib250b3VjaHN0YXJ0ImluIHdpbmRvdyxkWmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7dGhpcy5uZ1pvbmU9ZSx0aGlzLmVsUmVmPWksdGhpcy5jZFJlZj1yLHRoaXMuZG9jdW1lbnQ9byx0aGlzLnBsYXRmb3JtSWQ9cyx0aGlzLnNlcnZpY2U9YSx0aGlzLmlzSUUxMD0hMSx0aGlzLmRpYWxvZ0Fycm93U2l6ZT0xMCx0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTE1LHRoaXMuZGlhbG9nSW5wdXRGaWVsZHM9W3dzLkhFWCx3cy5SR0JBLHdzLkhTTEEsd3MuQ01ZS10sdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj0hMSx0aGlzLmV5ZURyb3BwZXJTdXBwb3J0ZWQ9WEQodGhpcy5wbGF0Zm9ybUlkKSYmIkV5ZURyb3BwZXIiaW4gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlld31oYW5kbGVFc2MoZSl7dGhpcy5zaG93JiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMub25DYW5jZWxDb2xvcihlKX1oYW5kbGVFbnRlcihlKXt0aGlzLnNob3cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5vbkFjY2VwdENvbG9yKGUpfW5nT25Jbml0KCl7dGhpcy5zbGlkZXI9bmV3ICRrKDAsMCwwLDApLHRoaXMuc2xpZGVyRGltTWF4PW5ldyBlRih0aGlzLmh1ZVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDAsdGhpcy5jcFdpZHRoLDEzMCx0aGlzLmFscGhhU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCksdGhpcy5mb3JtYXQ9dGhpcy5jcENteWtFbmFibGVkP3dzLkNNWUs6InJnYmEiPT09dGhpcy5jcE91dHB1dEZvcm1hdD93cy5SR0JBOiJoc2xhIj09PXRoaXMuY3BPdXRwdXRGb3JtYXQ/d3MuSFNMQTp3cy5IRVgsdGhpcy5saXN0ZW5lck1vdXNlRG93bj1yPT57dGhpcy5vbk1vdXNlRG93bihyKX0sdGhpcy5saXN0ZW5lclJlc2l6ZT0oKT0+e3RoaXMub25SZXNpemUoKX0sdGhpcy5vcGVuRGlhbG9nKHRoaXMuaW5pdGlhbENvbG9yLCExKX1uZ09uRGVzdHJveSgpe3RoaXMuY2xvc2VEaWFsb2coKX1uZ0FmdGVyVmlld0luaXQoKXsyMzA9PT10aGlzLmNwV2lkdGgmJiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXl8fCh0aGlzLnNsaWRlckRpbU1heD1uZXcgZUYodGhpcy5odWVTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwLHRoaXMuY3BXaWR0aCwxMzAsdGhpcy5hbHBoYVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDApLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEpLHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX1vcGVuRGlhbG9nKGUsaT0hMCl7dGhpcy5zZXJ2aWNlLnNldEFjdGl2ZSh0aGlzKSx0aGlzLndpZHRofHwodGhpcy5jcFdpZHRoPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKSx0aGlzLmhlaWdodHx8KHRoaXMuaGVpZ2h0PTMyMCksdGhpcy5zZXRJbml0aWFsQ29sb3IoZSksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoZSxpKSx0aGlzLm9wZW5Db2xvclBpY2tlcigpfWNsb3NlRGlhbG9nKCl7dGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9c2V0dXBEaWFsb2coZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLHgsZyxiLEQsVCxrLFoseixmZSx1ZSxoZSx3LEYscSxLLGRlLFksYWUsbGUsSWUsdmUsRGUsbnQsZ3Qpe3RoaXMuc2V0SW5pdGlhbENvbG9yKHIpLHRoaXMuc2V0Q29sb3JNb2RlKGMpLHRoaXMuaXNJRTEwPTEwPT09ZnVuY3Rpb24oKXtsZXQgbj0iIjt0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmKG49bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKTtsZXQgdD1uLmluZGV4T2YoIm1zaWUgIik7cmV0dXJuIHQ+MCYmcGFyc2VJbnQobi5zdWJzdHJpbmcodCs1LG4uaW5kZXhPZigiLiIsdCkpLDEwKX0oKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlPWUsdGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmPWksdGhpcy5jcERpc2FibGVJbnB1dD1oLHRoaXMuY3BDbXlrRW5hYmxlZD11LHRoaXMuY3BBbHBoYUNoYW5uZWw9ZCx0aGlzLmNwT3V0cHV0Rm9ybWF0PXAsdGhpcy5jcERpYWxvZ0Rpc3BsYXk9YSx0aGlzLmNwSWdub3JlZEVsZW1lbnRzPWYsdGhpcy5jcFNhdmVDbGlja091dHNpZGU9bSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGU9eCx0aGlzLnVzZVJvb3RWaWV3Q29udGFpbmVyPWcsdGhpcy53aWR0aD10aGlzLmNwV2lkdGg9cGFyc2VJbnQobywxMCksdGhpcy5oZWlnaHQ9dGhpcy5jcEhlaWdodD1wYXJzZUludChzLDEwKSx0aGlzLmNwUG9zaXRpb249Yix0aGlzLmNwUG9zaXRpb25PZmZzZXQ9cGFyc2VJbnQoRCwxMCksdGhpcy5jcE9LQnV0dG9uPXcsdGhpcy5jcE9LQnV0dG9uVGV4dD1xLHRoaXMuY3BPS0J1dHRvbkNsYXNzPUYsdGhpcy5jcENhbmNlbEJ1dHRvbj1LLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0PVksdGhpcy5jcENhbmNlbEJ1dHRvbkNsYXNzPWRlLHRoaXMuY3BFeWVEcm9wcGVyPURlLHRoaXMuZmFsbGJhY2tDb2xvcj1sfHwiI2ZmZiIsdGhpcy5zZXRQcmVzZXRDb25maWcoayxaKSx0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3M9eix0aGlzLmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoPWZlLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2U9dWUsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzPWhlLHRoaXMuY3BBZGRDb2xvckJ1dHRvbj1hZSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PUllLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPWxlLHRoaXMuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzPXZlLHRoaXMuY3BUcmlnZ2VyRWxlbWVudD1udCx0aGlzLmNwRXh0cmFUZW1wbGF0ZT1ndCxUfHwodGhpcy5kaWFsb2dBcnJvd09mZnNldD0wKSwiaW5saW5lIj09PWEmJih0aGlzLmRpYWxvZ0Fycm93U2l6ZT0wLHRoaXMuZGlhbG9nQXJyb3dPZmZzZXQ9MCksImhleCI9PT1wJiYiYWx3YXlzIiE9PWQmJiJmb3JjZWQiIT09ZCYmKHRoaXMuY3BBbHBoYUNoYW5uZWw9ImRpc2FibGVkIil9c2V0Q29sb3JNb2RlKGUpe3N3aXRjaChlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSl7Y2FzZSIxIjpjYXNlIkMiOmNhc2UiQ09MT1IiOmRlZmF1bHQ6dGhpcy5jcENvbG9yTW9kZT0xO2JyZWFrO2Nhc2UiMiI6Y2FzZSJHIjpjYXNlIkdSQVlTQ0FMRSI6dGhpcy5jcENvbG9yTW9kZT0yO2JyZWFrO2Nhc2UiMyI6Y2FzZSJQIjpjYXNlIlBSRVNFVFMiOnRoaXMuY3BDb2xvck1vZGU9M319c2V0SW5pdGlhbENvbG9yKGUpe3RoaXMuaW5pdGlhbENvbG9yPWV9c2V0UHJlc2V0Q29uZmlnKGUsaSl7dGhpcy5jcFByZXNldExhYmVsPWUsdGhpcy5jcFByZXNldENvbG9ycz1pfXNldENvbG9yRnJvbVN0cmluZyhlLGk9ITAscj0hMCl7bGV0IG87ImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZm9yY2VkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWw/KG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YShlLCEwKSwhbyYmIXRoaXMuaHN2YSYmKG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YShlLCExKSkpOm89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YShlLCExKSwhbyYmIXRoaXMuaHN2YSYmKG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YSh0aGlzLmZhbGxiYWNrQ29sb3IsITEpKSxvJiYodGhpcy5oc3ZhPW8sdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLCJoZXgiPT09dGhpcy5jcE91dHB1dEZvcm1hdCYmImRpc2FibGVkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwmJih0aGlzLmhzdmEuYT0xKSx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKGkscikpfW9uUmVzaXplKCl7ImZpeGVkIj09PXRoaXMucG9zaXRpb24/dGhpcy5zZXREaWFsb2dQb3NpdGlvbigpOiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpfW9uRHJhZ0VuZChlKXt0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckRyYWdFbmQoe3NsaWRlcjplLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkRyYWdTdGFydChlKXt0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckRyYWdTdGFydCh7c2xpZGVyOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uTW91c2VEb3duKGUpe3RoaXMuc2hvdyYmIXRoaXMuaXNJRTEwJiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJmUudGFyZ2V0IT09dGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQmJiF0aGlzLmlzRGVzY2VuZGFudCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsZS50YXJnZXQpJiYhdGhpcy5pc0Rlc2NlbmRhbnQodGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZS50YXJnZXQpJiYwPT09dGhpcy5jcElnbm9yZWRFbGVtZW50cy5maWx0ZXIoaT0+aT09PWUudGFyZ2V0KS5sZW5ndGgmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlP3RoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKToodGhpcy5oc3ZhPW51bGwsdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodGhpcy5pbml0aWFsQ29sb3IsITEpLHRoaXMuY3BDbXlrRW5hYmxlZCYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jbXlrQ2hhbmdlZCh0aGlzLmNteWtDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNoYW5nZWQodGhpcy5pbml0aWFsQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDYW5jZWxlZCgpKSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGUmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpfSl9b25BY2NlcHRDb2xvcihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub3V0cHV0Q29sb3ImJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKSwicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpfW9uQ2FuY2VsQ29sb3IoZSl7dGhpcy5oc3ZhPW51bGwsZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2FuY2VsZWQoKSx0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwhMCksInBvcHVwIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiYodGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLmluaXRpYWxDb2xvciwhMCksdGhpcy5jbG9zZUNvbG9yUGlja2VyKCkpfW9uRXllRHJvcHBlcigpe3RoaXMuZXllRHJvcHBlclN1cHBvcnRlZCYmKG5ldyB3aW5kb3cuRXllRHJvcHBlcikub3BlbigpLnRoZW4oaT0+e3RoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKGkuc1JHQkhleCwhMCl9KX1vbkZvcm1hdFRvZ2dsZShlKXtsZXQgaT10aGlzLmRpYWxvZ0lucHV0RmllbGRzLmxlbmd0aC0odGhpcy5jcENteWtFbmFibGVkPzA6MSkscj0oKHRoaXMuZGlhbG9nSW5wdXRGaWVsZHMuaW5kZXhPZih0aGlzLmZvcm1hdCkrZSklaStpKSVpO3RoaXMuZm9ybWF0PXRoaXMuZGlhbG9nSW5wdXRGaWVsZHNbcl19b25Db2xvckNoYW5nZShlKXt0aGlzLmhzdmEucz1lLnMvZS5yZ1gsdGhpcy5oc3ZhLnY9ZS52L2UucmdZLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoibGlnaHRuZXNzIix2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6InNhdHVyYXRpb24iLHZhbHVlOnRoaXMuaHN2YS5zLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkh1ZUNoYW5nZShlKXt0aGlzLmhzdmEuaD1lLnYvZS5yZ1gsdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoiaHVlIix2YWx1ZTp0aGlzLmhzdmEuaCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25WYWx1ZUNoYW5nZShlKXt0aGlzLmhzdmEudj1lLnYvZS5yZ1gsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJ2YWx1ZSIsdmFsdWU6dGhpcy5oc3ZhLnYsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQWxwaGFDaGFuZ2UoZSl7dGhpcy5oc3ZhLmE9ZS52L2UucmdYLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoiYWxwaGEiLHZhbHVlOnRoaXMuaHN2YS5hLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkhleElucHV0KGUpe2lmKG51bGw9PT1lKXRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKTtlbHNle2UmJiIjIiE9PWVbMF0mJihlPSIjIitlKTtsZXQgaT0vXiMoW2EtZjAtOV17M318W2EtZjAtOV17Nn0pJC9naTsiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwmJihpPS9eIyhbYS1mMC05XXszfXxbYS1mMC05XXs2fXxbYS1mMC05XXs4fSkkL2dpKTtsZXQgcj1pLnRlc3QoZSk7ciYmKGUubGVuZ3RoPDUmJihlPSIjIitlLnN1YnN0cmluZygxKS5zcGxpdCgiIikubWFwKG89Pm8rbykuam9pbigiIikpLCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKGUrPU1hdGgucm91bmQoMjU1KnRoaXMuaHN2YS5hKS50b1N0cmluZygxNikpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKGUsITAsITEpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImhleCIsdmFsaWQ6cix2YWx1ZTplLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX19b25SZWRJbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLnI9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoicmVkIix2YWxpZDpyLHZhbHVlOmkucixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25CbHVlSW5wdXQoZSl7bGV0IGk9dGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5iPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UucmdiYVRvSHN2YShpKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImJsdWUiLHZhbGlkOnIsdmFsdWU6aS5iLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkdyZWVuSW5wdXQoZSl7bGV0IGk9dGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5nPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UucmdiYVRvSHN2YShpKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImdyZWVuIix2YWxpZDpyLHZhbHVlOmkuZyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25IdWVJbnB1dChlKXtsZXQgaT0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7aSYmKHRoaXMuaHN2YS5oPWUudi9lLnJnLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiaHVlIix2YWxpZDppLHZhbHVlOnRoaXMuaHN2YS5oLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblZhbHVlSW5wdXQoZSl7bGV0IGk9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO2kmJih0aGlzLmhzdmEudj1lLnYvZS5yZyx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoidmFsdWUiLHZhbGlkOmksdmFsdWU6dGhpcy5oc3ZhLnYsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQWxwaGFJbnB1dChlKXtsZXQgaT0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7aSYmKHRoaXMuaHN2YS5hPWUudi9lLnJnLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJhbHBoYSIsdmFsaWQ6aSx2YWx1ZTp0aGlzLmhzdmEuYSxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25MaWdodG5lc3NJbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YTJoc2xhKHRoaXMuaHN2YSkscj0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7ciYmKGkubD1lLnYvZS5yZyx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLmhzbGEyaHN2YShpKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImxpZ2h0bmVzcyIsdmFsaWQ6cix2YWx1ZTppLmwsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uU2F0dXJhdGlvbklucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhMmhzbGEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5zPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UuaHNsYTJoc3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoic2F0dXJhdGlvbiIsdmFsaWQ6cix2YWx1ZTppLnMsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQ3lhbklucHV0KGUpeyFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZyYmKHRoaXMuY215ay5jPWUudix0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCExLCEwLCEwKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJjeWFuIix2YWxpZDohMCx2YWx1ZTp0aGlzLmNteWsuYyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25NYWdlbnRhSW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLm09ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6Im1hZ2VudGEiLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5tLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblllbGxvd0lucHV0KGUpeyFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZyYmKHRoaXMuY215ay55PWUudix0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCExLCEwLCEwKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJ5ZWxsb3ciLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay55LGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkJsYWNrSW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLms9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImJsYWNrIix2YWxpZDohMCx2YWx1ZTp0aGlzLmNteWsuayxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BZGRQcmVzZXRDb2xvcihlLGkpe2Uuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5jcFByZXNldENvbG9ycy5maWx0ZXIocj0+cj09PWkpLmxlbmd0aHx8KHRoaXMuY3BQcmVzZXRDb2xvcnM9dGhpcy5jcFByZXNldENvbG9ycy5jb25jYXQoaSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5wcmVzZXRDb2xvcnNDaGFuZ2VkKHRoaXMuY3BQcmVzZXRDb2xvcnMpKX1vblJlbW92ZVByZXNldENvbG9yKGUsaSl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNwUHJlc2V0Q29sb3JzPXRoaXMuY3BQcmVzZXRDb2xvcnMuZmlsdGVyKHI9PnIhPT1pKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycyl9b3BlbkNvbG9yUGlja2VyKCl7dGhpcy5zaG93fHwodGhpcy5zaG93PSEwLHRoaXMuaGlkZGVuPSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmhpZGRlbj0hMSx0aGlzLnNldERpYWxvZ1Bvc2l0aW9uKCksdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCl9LDApLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc3RhdGVDaGFuZ2VkKCEwKSx0aGlzLmlzSUUxMHx8dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpaGU/ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5saXN0ZW5lck1vdXNlRG93bik6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLmxpc3RlbmVyTW91c2VEb3duKX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMubGlzdGVuZXJSZXNpemUpKX1jbG9zZUNvbG9yUGlja2VyKCl7dGhpcy5zaG93JiYodGhpcy5zaG93PSExLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc3RhdGVDaGFuZ2VkKCExKSx0aGlzLmlzSUUxMHx8KGloZT9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLmxpc3RlbmVyTW91c2VEb3duKTpkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMubGlzdGVuZXJNb3VzZURvd24pKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLmxpc3RlbmVyUmVzaXplKSx0aGlzLmNkUmVmLmRlc3Ryb3llZHx8dGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCkpfXVwZGF0ZUNvbG9yUGlja2VyKGU9ITAsaT0hMCxyPSExKXtpZih0aGlzLnNsaWRlckRpbU1heCl7Mj09PXRoaXMuY3BDb2xvck1vZGUmJih0aGlzLmhzdmEucz0wKTtsZXQgbyxzLGEsbD10aGlzLm91dHB1dENvbG9yO2lmKHM9dGhpcy5zZXJ2aWNlLmhzdmEyaHNsYSh0aGlzLmhzdmEpLHRoaXMuY3BDbXlrRW5hYmxlZD8ocj8oYT10aGlzLnNlcnZpY2UuY215a1RvUmdiKHRoaXMuc2VydmljZS5ub3JtYWxpemVDTVlLKHRoaXMuY215aykpLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UucmdiYVRvSHN2YShhKSk6KGE9dGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSx0aGlzLmNteWs9dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplQ01ZSyh0aGlzLnNlcnZpY2UucmdiYVRvQ215ayhhKSkpLGE9dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQShhKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgpOmE9dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQSh0aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpKSxvPXRoaXMuc2VydmljZS5kZW5vcm1hbGl6ZVJHQkEodGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEobmV3IFJiKHRoaXMuc2xpZGVySHx8dGhpcy5oc3ZhLmgsMSwxLDEpKSksaSYmKHRoaXMuaHNsYVRleHQ9bmV3IFJwKE1hdGgucm91bmQoMzYwKnMuaCksTWF0aC5yb3VuZCgxMDAqcy5zKSxNYXRoLnJvdW5kKDEwMCpzLmwpLE1hdGgucm91bmQoMTAwKnMuYSkvMTAwKSx0aGlzLnJnYmFUZXh0PW5ldyBodShhLnIsYS5nLGEuYixNYXRoLnJvdW5kKDEwMCphLmEpLzEwMCksdGhpcy5jcENteWtFbmFibGVkJiYodGhpcy5jbXlrVGV4dD1uZXcgdDAodGhpcy5jbXlrLmMsdGhpcy5jbXlrLm0sdGhpcy5jbXlrLnksdGhpcy5jbXlrLmssTWF0aC5yb3VuZCgxMDAqdGhpcy5jbXlrLmEpLzEwMCkpLHRoaXMuaGV4VGV4dD10aGlzLnNlcnZpY2UucmdiYVRvSGV4KGEsImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsKSx0aGlzLmhleEFscGhhPXRoaXMucmdiYVRleHQuYSksImF1dG8iPT09dGhpcy5jcE91dHB1dEZvcm1hdCYmdGhpcy5mb3JtYXQhPT13cy5SR0JBJiZ0aGlzLmZvcm1hdCE9PXdzLkNNWUsmJnRoaXMuZm9ybWF0IT09d3MuSFNMQSYmdGhpcy5oc3ZhLmE8MSYmKHRoaXMuZm9ybWF0PXRoaXMuaHN2YS5hPDE/d3MuUkdCQTp3cy5IRVgpLHRoaXMuaHVlU2xpZGVyQ29sb3I9InJnYigiK28ucisiLCIrby5nKyIsIitvLmIrIikiLHRoaXMuYWxwaGFTbGlkZXJDb2xvcj0icmdiKCIrYS5yKyIsIithLmcrIiwiK2EuYisiKSIsdGhpcy5vdXRwdXRDb2xvcj10aGlzLnNlcnZpY2Uub3V0cHV0Rm9ybWF0KHRoaXMuaHN2YSx0aGlzLmNwT3V0cHV0Rm9ybWF0LHRoaXMuY3BBbHBoYUNoYW5uZWwpLHRoaXMuc2VsZWN0ZWRDb2xvcj10aGlzLnNlcnZpY2Uub3V0cHV0Rm9ybWF0KHRoaXMuaHN2YSwicmdiYSIsbnVsbCksdGhpcy5mb3JtYXQhPT13cy5DTVlLKXRoaXMuY215a0NvbG9yPSIiO2Vsc2UgaWYoImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZW5hYmxlZCI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZm9yY2VkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwpe2xldCBjPU1hdGgucm91bmQoMTAwKnRoaXMuY215ay5hKS8xMDA7dGhpcy5jbXlrQ29sb3I9YGNteWthKCR7dGhpcy5jbXlrLmN9LCR7dGhpcy5jbXlrLm19LCR7dGhpcy5jbXlrLnl9LCR7dGhpcy5jbXlrLmt9LCR7Y30pYH1lbHNlIHRoaXMuY215a0NvbG9yPWBjbXlrKCR7dGhpcy5jbXlrLmN9LCR7dGhpcy5jbXlrLm19LCR7dGhpcy5jbXlrLnl9LCR7dGhpcy5jbXlrLmt9KWA7dGhpcy5zbGlkZXI9bmV3ICRrKCh0aGlzLnNsaWRlckh8fHRoaXMuaHN2YS5oKSp0aGlzLnNsaWRlckRpbU1heC5oLTgsdGhpcy5oc3ZhLnMqdGhpcy5zbGlkZXJEaW1NYXgucy04LCgxLXRoaXMuaHN2YS52KSp0aGlzLnNsaWRlckRpbU1heC52LTgsdGhpcy5oc3ZhLmEqdGhpcy5zbGlkZXJEaW1NYXguYS04KSxlJiZsIT09dGhpcy5vdXRwdXRDb2xvciYmKHRoaXMuY3BDbXlrRW5hYmxlZCYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jbXlrQ2hhbmdlZCh0aGlzLmNteWtDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNoYW5nZWQodGhpcy5vdXRwdXRDb2xvcikpfX1zZXREaWFsb2dQb3NpdGlvbigpe2lmKCJpbmxpbmUiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkpdGhpcy5wb3NpdGlvbj0icmVsYXRpdmUiO2Vsc2V7bGV0IHIsZT0ic3RhdGljIixpPSIiLG89bnVsbCxzPW51bGwsYT10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLGw9dGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O2Zvcig7bnVsbCE9PWEmJiJIVE1MIiE9PWEudGFnTmFtZTspe2lmKHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUoYSksZT1yLmdldFByb3BlcnR5VmFsdWUoInBvc2l0aW9uIiksaT1yLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLCJzdGF0aWMiIT09ZSYmbnVsbD09PW8mJihvPWEpLGkmJiJub25lIiE9PWkmJm51bGw9PT1zJiYocz1hKSwiZml4ZWQiPT09ZSl7bz1zO2JyZWFrfWE9YS5wYXJlbnROb2RlfWxldCBjPXRoaXMuY3JlYXRlRGlhbG9nQm94KHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJmaXhlZCIhPT1lKTtpZih0aGlzLnVzZVJvb3RWaWV3Q29udGFpbmVyfHwiZml4ZWQiPT09ZSYmKCFvfHxvIGluc3RhbmNlb2YgSFRNTFVua25vd25FbGVtZW50KSl0aGlzLnRvcD1jLnRvcCx0aGlzLmxlZnQ9Yy5sZWZ0O2Vsc2V7bnVsbD09PW8mJihvPWEpO2xldCBkPXRoaXMuY3JlYXRlRGlhbG9nQm94KG8sImZpeGVkIiE9PWUpO3RoaXMudG9wPWMudG9wLWQudG9wLHRoaXMubGVmdD1jLmxlZnQtZC5sZWZ0fSJmaXhlZCI9PT1lJiYodGhpcy5wb3NpdGlvbj0iZml4ZWQiKTtsZXQgdT10aGlzLmNwUG9zaXRpb247ImF1dG8iPT09dGhpcy5jcFBvc2l0aW9uJiYodT1mdW5jdGlvbihuLHQpe2xldCBlPSJyaWdodCIsaT0iYm90dG9tIix7aGVpZ2h0OnIsd2lkdGg6b309bix7dG9wOnMsbGVmdDphfT10LGw9cyt0LmhlaWdodCxjPWErdC53aWR0aCx1PXMtcjwwLGQ9bCtyPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpLHA9YS1vPDAsaD1jK28+KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpO3JldHVybiBkJiYoaT0idG9wIiksdSYmKGk9ImJvdHRvbSIpLHAmJihlPSJyaWdodCIpLGgmJihlPSJsZWZ0IiksdSYmZCYmcCYmaD9bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdLnJlZHVjZSgoeCxnKT0+blt4XT5uW2ddP3g6Zyk6cCYmaD91PyJib3R0b20iOmR8fHM+bD8idG9wIjoiYm90dG9tIjp1JiZkP3A/InJpZ2h0IjpofHxhPmM/ImxlZnQiOiJyaWdodCI6YCR7aX0tJHtlfWB9KHRoaXMuZGlhbG9nRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuY3BUcmlnZ2VyRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSksInRvcCI9PT11Pyh0aGlzLmFycm93VG9wPWwtMSx0aGlzLnRvcC09bCt0aGlzLmRpYWxvZ0Fycm93U2l6ZSx0aGlzLmxlZnQrPXRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAqYy53aWR0aC10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToiYm90dG9tIj09PXU/KHRoaXMudG9wKz1jLmhlaWdodCt0aGlzLmRpYWxvZ0Fycm93U2l6ZSx0aGlzLmxlZnQrPXRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAqYy53aWR0aC10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToidG9wLWxlZnQiPT09dXx8ImxlZnQtdG9wIj09PXU/KHRoaXMudG9wLT1sLWMuaGVpZ2h0K2MuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAsdGhpcy5sZWZ0LT10aGlzLmNwV2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMi10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToidG9wLXJpZ2h0Ij09PXV8fCJyaWdodC10b3AiPT09dT8odGhpcy50b3AtPWwtYy5oZWlnaHQrYy5oZWlnaHQqdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCx0aGlzLmxlZnQrPWMud2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMi10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToibGVmdCI9PT11fHwiYm90dG9tLWxlZnQiPT09dXx8ImxlZnQtYm90dG9tIj09PXU/KHRoaXMudG9wKz1jLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQsdGhpcy5sZWZ0LT10aGlzLmNwV2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMik6KHRoaXMudG9wKz1jLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQsdGhpcy5sZWZ0Kz1jLndpZHRoK3RoaXMuZGlhbG9nQXJyb3dTaXplLTIpLHRoaXMuY3BVc2VQb3NpdGlvbj11fX1pc0Rlc2NlbmRhbnQoZSxpKXtsZXQgcj1pLnBhcmVudE5vZGU7Zm9yKDtudWxsIT09cjspe2lmKHI9PT1lKXJldHVybiEwO3I9ci5wYXJlbnROb2RlfXJldHVybiExfWNyZWF0ZURpYWxvZ0JveChlLGkpe2xldHt0b3A6cixsZWZ0Om99PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDpyKyhpP3dpbmRvdy5wYWdlWU9mZnNldDowKSxsZWZ0Om8rKGk/d2luZG93LnBhZ2VYT2Zmc2V0OjApLHdpZHRoOmUub2Zmc2V0V2lkdGgsaGVpZ2h0OmUub2Zmc2V0SGVpZ2h0fX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShfdCksTShSZSksTShubiksTShIdCksTShHZCksTShxRykpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImNvbG9yLXBpY2tlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihvdChES2UsNyksb3QoQUtlLDcpLG90KElLZSw3KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5kaWFsb2dFbGVtZW50PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmh1ZVNsaWRlcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5hbHBoYVNsaWRlcj1yLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgia2V5dXAuZXNjIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVFc2Mobyl9LDAsX1QpKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlRW50ZXIobyl9LCExLF9UKX0sZGVjbHM6MzAsdmFyczo1MSxjb25zdHM6W1sxLCJjb2xvci1waWNrZXIiLDMsImNsaWNrIl0sWyJkaWFsb2dQb3B1cCIsIiJdLFszLCJjbGFzcyIsInRvcCIsNCwibmdJZiJdLFsiY2xhc3MiLCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIsMywic2xpZGVyIiwicmdYIiwicmdZIiwiYmFja2dyb3VuZC1jb2xvciIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCIsNCwibmdJZiJdLFsxLCJodWUtYWxwaGEiLCJib3giXSxbMSwibGVmdCJdLFsxLCJzZWxlY3RlZC1jb2xvci1iYWNrZ3JvdW5kIl0sWzEsInNlbGVjdGVkLWNvbG9yIiwzLCJjbGljayJdLFsiY2xhc3MiLCJleWVkcm9wcGVyLWljb24iLCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaGVpZ2h0IiwiMjRweCIsInZpZXdCb3giLCIwIDAgMjQgMjQiLCJ3aWR0aCIsIjI0cHgiLCJmaWxsIiwiIzAwMDAwMCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMywiY2xhc3MiLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInJpZ2h0Il0sWyJzdHlsZSIsImhlaWdodDogMTZweDsiLDQsIm5nSWYiXSxbMSwiaHVlIiwzLCJzbGlkZXIiLCJyZ1giLCJuZXdWYWx1ZSIsImRyYWdTdGFydCIsImRyYWdFbmQiXSxbImh1ZVNsaWRlciIsIiJdLFsxLCJjdXJzb3IiXSxbMSwidmFsdWUiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsidmFsdWVTbGlkZXIiLCIiXSxbMSwiYWxwaGEiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsiYWxwaGFTbGlkZXIiLCIiXSxbImNsYXNzIiwiY215ay10ZXh0IiwzLCJkaXNwbGF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImhzbGEtdGV4dCIsMywiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJyZ2JhLXRleHQiLDMsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaGV4LXRleHQiLDMsImhleC1hbHBoYSIsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwidmFsdWUtdGV4dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0eXBlLXBvbGljeSIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmVzZXQtYXJlYSIsNCwibmdJZiJdLFsiY2xhc3MiLCJidXR0b24tYXJlYSIsNCwibmdJZiJdLFsiY2xhc3MiLCJleHRyYS10ZW1wbGF0ZSIsNCwibmdJZiJdLFsxLCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIsMywic2xpZGVyIiwicmdYIiwicmdZIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaGVpZ2h0IiwiMjRweCIsInZpZXdCb3giLCIwIDAgMjQgMjQiLCJ3aWR0aCIsIjI0cHgiLCJmaWxsIiwiIzAwMDAwMCIsMSwiZXllZHJvcHBlci1pY29uIl0sWyJkIiwiTTAgMGgyNHYyNEgwVjB6IiwiZmlsbCIsIm5vbmUiXSxbImQiLCJNMTcuNjYgNS40MWwuOTIuOTItMi42OSAyLjY5LS45Mi0uOTIgMi42OS0yLjY5TTE3LjY3IDNjLS4yNiAwLS41MS4xLS43MS4yOWwtMy4xMiAzLjEyLTEuOTMtMS45MS0xLjQxIDEuNDEgMS40MiAxLjQyTDMgMTYuMjVWMjFoNC43NWw4LjkyLTguOTIgMS40MiAxLjQyIDEuNDEtMS40MS0xLjkyLTEuOTIgMy4xMi0zLjEyYy40LS40LjQtMS4wMy4wMS0xLjQybC0yLjM0LTIuMzRjLS4yLS4xOS0uNDUtLjI5LS43LS4yOXpNNi45MiAxOUw1IDE3LjA4bDguMDYtOC4wNiAxLjkyIDEuOTJMNi45MiAxOXoiXSxbInR5cGUiLCJidXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMiwiaGVpZ2h0IiwiMTZweCJdLFsxLCJjbXlrLXRleHQiXSxbMSwiYm94Il0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKiIsIm1pbiIsIjAiLCJtYXgiLCIxMDAiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/IiwibWluIiwiMCIsIm1heCIsIjEiLCJzdGVwIiwiMC4xIiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/IiwibWluIiwiMCIsIm1heCIsIjEiLCJzdGVwIiwiMC4xIiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwiaHNsYS10ZXh0Il0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKiIsIm1pbiIsIjAiLCJtYXgiLCIzNjAiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsxLCJyZ2JhLXRleHQiXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjI1NSIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsImhleC10ZXh0Il0sWzMsInRleHQiLCJ2YWx1ZSIsImJsdXIiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsInZhbHVlLXRleHQiXSxbMSwidHlwZS1wb2xpY3kiXSxbMSwidHlwZS1wb2xpY3ktYXJyb3ciLDMsImNsaWNrIl0sWzEsInByZXNldC1hcmVhIl0sWzEsInByZXNldC1sYWJlbCJdLFszLCJjbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmVzZXQtY29sb3IiLDMsImJhY2tncm91bmRDb2xvciIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwicHJlc2V0LWNvbG9yIiwzLCJjbGljayJdLFszLCJjbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsImJ1dHRvbi1hcmVhIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGljayJdLFsxLCJleHRyYS10ZW1wbGF0ZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDAsMSksUCgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBvLnN0b3BQcm9wYWdhdGlvbigpfSksRSgyLFBLZSwxLDUsImRpdiIsMiksRSgzLFJLZSwyLDgsImRpdiIsMyksXyg0LCJkaXYiLDQpKDUsImRpdiIsNSksTyg2LCJkaXYiLDYpLF8oNywiZGl2Iiw3KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5leWVEcm9wcGVyU3VwcG9ydGVkJiZpLmNwRXllRHJvcHBlciYmaS5vbkV5ZURyb3BwZXIoKX0pLEUoOCxPS2UsMywwLCJzdmciLDgpLHYoKSxFKDksa0tlLDIsNSwiYnV0dG9uIiw5KSx2KCksXygxMCwiZGl2IiwxMCksRSgxMSxGS2UsMSwwLCJkaXYiLDExKSxfKDEyLCJkaXYiLDEyLDEzKSxQKCJuZXdWYWx1ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25IdWVDaGFuZ2Uobyl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ1N0YXJ0KCJodWUiKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ0VuZCgiaHVlIil9KSxPKDE0LCJkaXYiLDE0KSx2KCksXygxNSwiZGl2IiwxNSwxNiksUCgibmV3VmFsdWUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmFsdWVDaGFuZ2Uobyl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ1N0YXJ0KCJ2YWx1ZSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJ2YWx1ZSIpfSksTygxNywiZGl2IiwxNCksdigpLF8oMTgsImRpdiIsMTcsMTgpLFAoIm5ld1ZhbHVlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkFscGhhQ2hhbmdlKG8pfSkoImRyYWdTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkRyYWdTdGFydCgiYWxwaGEiKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ0VuZCgiYWxwaGEiKX0pLE8oMjAsImRpdiIsMTQpLHYoKSgpKCksRSgyMSxCS2UsMTcsMTIsImRpdiIsMTkpLEUoMjIsVUtlLDE0LDEwLCJkaXYiLDIwKSxFKDIzLEdLZSwxNCwxMCwiZGl2IiwyMSksRSgyNCxZS2UsOCw3LCJkaXYiLDIyKSxFKDI1LFFLZSw5LDMsImRpdiIsMjMpLEUoMjYsS0tlLDMsMCwiZGl2IiwyNCksRSgyNyx0WmUsNiwzLCJkaXYiLDI1KSxFKDI4LHJaZSwzLDIsImRpdiIsMjYpLEUoMjksc1plLDIsMSwiZGl2IiwyNyksdigpKSwyJmUmJihQdCgiZGlzcGxheSIsaS5zaG93PyJibG9jayI6Im5vbmUiKSgidmlzaWJpbGl0eSIsaS5oaWRkZW4/ImhpZGRlbiI6InZpc2libGUiKSgidG9wIixpLnRvcCwicHgiKSgibGVmdCIsaS5sZWZ0LCJweCIpKCJwb3NpdGlvbiIsaS5wb3NpdGlvbikoImhlaWdodCIsaS5jcEhlaWdodCwicHgiKSgid2lkdGgiLGkuY3BXaWR0aCwicHgiKSxldCgib3BlbiIsaS5zaG93KSxDKDIpLHkoIm5nSWYiLCJwb3B1cCI9PT1pLmNwRGlhbG9nRGlzcGxheSksQygxKSx5KCJuZ0lmIiwxPT09KGkuY3BDb2xvck1vZGV8fDEpKSxDKDQpLFB0KCJiYWNrZ3JvdW5kLWNvbG9yIixpLnNlbGVjdGVkQ29sb3IpKCJjdXJzb3IiLGkuZXllRHJvcHBlclN1cHBvcnRlZCYmaS5jcEV5ZURyb3BwZXI/InBvaW50ZXIiOm51bGwpLEMoMSkseSgibmdJZiIsaS5leWVEcm9wcGVyU3VwcG9ydGVkJiZpLmNwRXllRHJvcHBlciksQygxKSx5KCJuZ0lmIixpLmNwQWRkQ29sb3JCdXR0b24pLEMoMikseSgibmdJZiIsImRpc2FibGVkIj09PWkuY3BBbHBoYUNoYW5uZWwpLEMoMSksUHQoImRpc3BsYXkiLDE9PT0oaS5jcENvbG9yTW9kZXx8MSk/ImJsb2NrIjoibm9uZSIpLHkoInJnWCIsMSksQygyKSxQdCgibGVmdCIsbnVsbD09aS5zbGlkZXI/bnVsbDppLnNsaWRlci5oLCJweCIpLEMoMSksUHQoImRpc3BsYXkiLDI9PT0oaS5jcENvbG9yTW9kZXx8MSk/ImJsb2NrIjoibm9uZSIpLHkoInJnWCIsMSksQygyKSxQdCgicmlnaHQiLG51bGw9PWkuc2xpZGVyP251bGw6aS5zbGlkZXIudiwicHgiKSxDKDEpLFB0KCJkaXNwbGF5IiwiZGlzYWJsZWQiPT09aS5jcEFscGhhQ2hhbm5lbD8ibm9uZSI6ImJsb2NrIikoImJhY2tncm91bmQtY29sb3IiLGkuYWxwaGFTbGlkZXJDb2xvcikseSgicmdYIiwxKSxDKDIpLFB0KCJsZWZ0IixudWxsPT1pLnNsaWRlcj9udWxsOmkuc2xpZGVyLmEsInB4IiksQygxKSx5KCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksQygxKSx5KCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksQygxKSx5KCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksQygxKSx5KCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksQygxKSx5KCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMj09PShpLmNwQ29sb3JNb2RlfHwxKSksQygxKSx5KCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksQygxKSx5KCJuZ0lmIiwobnVsbD09aS5jcFByZXNldENvbG9ycz9udWxsOmkuY3BQcmVzZXRDb2xvcnMubGVuZ3RoKXx8aS5jcEFkZENvbG9yQnV0dG9uKSxDKDEpLHkoIm5nSWYiLGkuY3BPS0J1dHRvbnx8aS5jcENhbmNlbEJ1dHRvbiksQygxKSx5KCJuZ0lmIixpLmNwRXh0cmFUZW1wbGF0ZSkpfSxkZXBlbmRlbmNpZXM6W2RuLEJlLG9zLGNaZSx1WmVdLHN0eWxlczpbJy5jb2xvci1waWNrZXJ7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO3dpZHRoOjIzMHB4O2hlaWdodDphdXRvO2JvcmRlcjojNzc3IHNvbGlkIDFweDtjdXJzb3I6ZGVmYXVsdDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmNvbG9yLXBpY2tlciAqe2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtmb250LXNpemU6MTFweH0uY29sb3ItcGlja2VyIGlucHV0e3dpZHRoOjA7aGVpZ2h0OjI2cHg7bWluLXdpZHRoOjA7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzAwMH0uY29sb3ItcGlja2VyIGlucHV0OmludmFsaWQsLmNvbG9yLXBpY2tlciBpbnB1dDotbW96LXVpLWludmFsaWQsLmNvbG9yLXBpY2tlciBpbnB1dDotbW96LXN1Ym1pdC1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX0uY29sb3ItcGlja2VyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257bWFyZ2luOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LmNvbG9yLXBpY2tlciAuYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo5OTk5OTk7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItc3R5bGU6c29saWR9LmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctdG9we2xlZnQ6OHB4O2JvcmRlci13aWR0aDoxMHB4IDVweDtib3JkZXItY29sb3I6Izc3NyByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b217dG9wOi0yMHB4O2xlZnQ6OHB4O2JvcmRlci13aWR0aDoxMHB4IDVweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApICM3NzcgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3AtbGVmdCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LXRvcHtyaWdodDotMjFweDtib3R0b206OHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgIzc3N30uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3AtcmlnaHQsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctcmlnaHQtdG9we2JvdHRvbTo4cHg7bGVmdDotMjBweDtib3JkZXItd2lkdGg6NXB4IDEwcHg7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCkgIzc3NyByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCl9LmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctbGVmdCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LWJvdHRvbSwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tbGVmdHt0b3A6OHB4O3JpZ2h0Oi0yMXB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgIzc3N30uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC1ib3R0b20sLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctYm90dG9tLXJpZ2h0e3RvcDo4cHg7bGVmdDotMjBweDtib3JkZXItd2lkdGg6NXB4IDEwcHg7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCkgIzc3NyByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCl9LmNvbG9yLXBpY2tlciAuY3Vyc29ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Ym9yZGVyOiMyMjIgc29saWQgMnB4O2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpkZWZhdWx0fS5jb2xvci1waWNrZXIgLmJveHtkaXNwbGF5OmZsZXg7cGFkZGluZzo0cHggOHB4fS5jb2xvci1waWNrZXIgLmxlZnR7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoxNnB4IDhweH0uY29sb3ItcGlja2VyIC5yaWdodHtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MTJweCA4cHh9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWF7cGFkZGluZzowIDE2cHggMTZweDt0ZXh0LWFsaWduOnJpZ2h0fS5jb2xvci1waWNrZXIgLmJ1dHRvbi1hcmVhIGJ1dHRvbnttYXJnaW4tbGVmdDo4cHh9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWF7cGFkZGluZzo0cHggMTVweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYSAucHJlc2V0LWxhYmVse292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlO3BhZGRpbmc6NHB4O2ZvbnQtc2l6ZToxMXB4O3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjb2xvcjojNTU1fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtY29sb3J7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MThweDtoZWlnaHQ6MThweDttYXJnaW46NHB4IDZweCA4cHg7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4O2JvcmRlci1yYWRpdXM6MjUlO2N1cnNvcjpwb2ludGVyfS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtZW1wdHktbWVzc2FnZXttaW4taGVpZ2h0OjE4cHg7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo4cHg7Zm9udC1zdHlsZTppdGFsaWM7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAuaGV4LXRleHR7d2lkdGg6MTAwJTtwYWRkaW5nOjRweCA4cHg7Zm9udC1zaXplOjExcHh9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveHtwYWRkaW5nOjAgMjRweCA4cHggOHB4fS5jb2xvci1waWNrZXIgLmhleC10ZXh0IC5ib3ggZGl2e2Zsb2F0OmxlZnQ7ZmxleDoxIDEgYXV0bzt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojNTU1O2NsZWFyOmxlZnR9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBpbnB1dHtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MXB4O2JvcmRlcjojYTlhOWE5IHNvbGlkIDFweH0uY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBkaXY6Zmlyc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaGV4LWFscGhhIC5ib3ggaW5wdXQ6Zmlyc3QtY2hpbGR7ZmxleC1ncm93OjM7bWFyZ2luLXJpZ2h0OjhweH0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0e3dpZHRoOjEwMCU7cGFkZGluZzo0cHggOHB4O2ZvbnQtc2l6ZToxMXB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94e3BhZGRpbmc6MCA4cHggOHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBkaXZ7ZmxleDoxIDEgYXV0bzttYXJnaW4tcmlnaHQ6OHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM1NTV9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dHtmbG9hdDpsZWZ0O2ZsZXg6MTtwYWRkaW5nOjFweDttYXJnaW46MCA4cHggMCAwO2JvcmRlcjojYTlhOWE5IHNvbGlkIDFweH0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZHttYXJnaW4tcmlnaHQ6MH0uY29sb3ItcGlja2VyIC5odWUtYWxwaGF7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206M3B4fS5jb2xvci1waWNrZXIgLmh1ZXtkaXJlY3Rpb246bHRyO3dpZHRoOjEwMCU7aGVpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd2tVRldiQ0NBQUFBRnhKUkVGVWFON3Qwa0VLZzBBUUFNRTJ4ODMvbjJxdTVxQ2dEMWlEaENvWWRwbmJRQzliYlkxcVZPL2p2YzZrM2FkOTFzNy83RjEvY3NnUHJ1anVRMTdCRFlTRnNCQVd3Z0poSVN5RUJjSkNXQWdMaElXd0VCWUlpMmY3QXIvMVRDZ0ZIMlg5QUFBQUFFbEZUa1N1UW1DQyl9LmNvbG9yLXBpY2tlciAudmFsdWV7ZGlyZWN0aW9uOnJ0bDt3aWR0aDoxMDAlO2hlaWdodDoxNnB4O21hcmdpbi1ib3R0b206MTZweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBUUNBWUFBQUQwNklZbkFBQUNUa2xFUVZSNDJ1M1NZVWNyQUJoQTRVMlNrbVJKTW1XU0prbEtKaVdaWnBLVUpKc2tLVW1hVEZJbUtaT1V6TXlTcEdSbWxpUk5KaWxKU3BLU0pFdG1TcElwbVdtU2RPNzM2LzZEK3g3T1AzZ1VDb1dDdjFjcWxTUWxKWkdjbkV4S1NncXBxYW1rcGFXUm5wNU9Sa1lHbVptWnFGUXFzckt5eU03T0ppY25oOXpjWE5ScU5YbDVlZVRuNTZQUmFDZ29LS0N3c0pDaW9pSzBXaTNGeGNXVWxKUlFXbHBLV1ZrWjVlWGxWRlJVVUZsWmlVNm5vNnFxaXVycWFtcHFhcWl0cmFXdXJnNjlYazk5ZlQwR2d3R2owVWhEUXdPTmpZMDBOVFhSM054TVMwc0xyYTJ0dExXMTBkN2Vqc2xrd213MjA5SFJRV2RuSjExZFhYUjNkOVBUMDBOdmJ5OTlmWDMwOS9jek1EREE0T0FnRm91Rm9hRWhyRllydzhQRGpJeU1NRG82eXRqWUdEYWJqZkh4Y1NZbUpwaWNuR1JxYWdxNzNjNzA5RFF6TXpQTXpzNHlOemZIL1B3OERvY0RwOU9KeStYQzdYYXpzTERBNHVJaVMwdExMQzh2czdLeXd1cnFLbXRyYTNnOEhyeGVMejZmRDcvZnovcjZPaHNiRzJ4dWJySzF0Y1gyOWphQlFJQ2RuUjJDd1NDN3U3dnM3ZTJ4djcvUHdjRUJoNGVISEIwZGNYeDh6TW5KQ2FlbnA1eWRuWEYrZnM3RnhRV1hsNWRjWFYxeGZYM056YzBOdDdlMzNOM2RFUXFGdUwrLzUrSGhnWEE0VENRUzRmSHhrYWVuSjU2Zm4zbDVlZUgxOVpWb05NcmIyeHZ2Nys5OGZId1FpOFdJeCtOOGZuNlNTQ1Q0K3ZyaSsvdWJuNThmZm45LytWY0tnU1d3QkpiQUVsZ0NTMkFKTElFbHNBU1d3QkpZQWt0Z0NTeUJKYkFFbHNBU1dBSkxZQWtzZ1NXd0JKYkFFbGdDUzJBSkxJRWxzUDQvV0g4QW1KNVo2akhTNGg4QUFBQUFTVVZPUks1Q1lJST0pfS5jb2xvci1waWNrZXIgLmFscGhhe2RpcmVjdGlvbjpsdHI7d2lkdGg6MTAwJTtoZWlnaHQ6MTZweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBUUNBWUFBQUQwNklZbkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0QUlXRHdZUWxaTWEzZ0FBQVdWSlJFRlVhTjd0bUVHTzZqQVFSQ3NPQXJIZ0JweUFKWUdqY0dvY3hBbTRBMklIcG1vV0UwZUJIK2V6bUZsTnZVMDZzaEozVzZWRWVsV01VUUFJSUY5ZjZxWnBpbXNBMUxZdFMydUY1MS91MjdZVkFGWlZSVWtFb0dIZFBWL3NJY2JJRUlJa1VkSS85WGE3bmV5djYxK1NXRlVWQVZDU2N0MDBUV24yZnY2dTMrRWNmZDN0WHp5LzArbkVVdStTUGpvL2txenJtaVFwU2NONnY5OFhld2ZBOC9sTWtpTEoyV3hHU1VvcGNUNmZNNlUwTlg5L2ZyZmJqZXYxV3RmcmxaZkxoWWZEUVFIRy9BSU9sbkd3aklObEhDeGpIQ3pqWUptL1RKV2RDd3F1SlhzZUZGekd3RE5OZWlLTU9KVE84eFFkRFFhZUIyOStLOWVmZUxhQm85Sjd2ZHZ0SmoxUmpGRmpmaXY3cXY5NXRqeC83bGVTUWdoOTNlMWZmTWVJcDZPK1lRamhvL043OTF0MVhWT1NTSTdOLy9LKzQvR294V0xCeCtQQjUvT3A1WExKKy8zT2xKSldxeFUzbTgzb3Z2NWlHZjhLallObEhDeGpIQ3pqWUJrSHk1Z2Y1Z3VzdlFVN1UzN2pUQUFBQUFCSlJVNUVya0pnZ2c9PSl9LmNvbG9yLXBpY2tlciAudHlwZS1wb2xpY3l7cG9zaXRpb246YWJzb2x1dGU7dG9wOjIxOHB4O3JpZ2h0OjEycHg7d2lkdGg6MTZweDtoZWlnaHQ6MjRweDtiYWNrZ3JvdW5kLXNpemU6OHB4IDE2cHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCSUFBQUFnQ0FZQUFBQWZmQ2p4QUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFDZXdBQUFuc0IwMUNPM0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBSUFTVVJCVkVpSjdaWTlheFJSRklhZnN4TVN0ckxRSnBBZ3BCRmhpK0M5dzFZU28wMEk2UlovZzl2WnBCZi9RT3I0R3lSZ2tTS05TckFhZHNacVFHd0NrdUFXeVJaSnN5U3d2aFo3Ti92aHpyZ2JMSDNMZDg1OTdqbHp6NTB6Sm9reXhYSDhEcURWYXIwcWk2djhCYkl0cVNHcEVjZnhkbG1zRldYa3ZYOEFmQVZXZzNVS1BFblQ5R0t1ak16c0FGZ1pzVmFDTjFWVFFkNzdYVW5yZ0Uxa3YrNjkzNTI2OFdScHpybkhadllSV0M3WXZDM3BSWlpsM3dvenF0VnFpeUg5SWdqQXNwa2QxR3ExeFVKUXRWcmRCOVpLSUFPdGhkZy9RYzY1TFVrN3dOSU1vQ1ZKTzg2NXJZRmhrcWpYNi9kN3ZWNEdQSndCTXFvZlVSUzVKRWs2RllCZXIvZWVZYi9NbzlXd0ZuUE92UWJlQXZmdUFBSzRCTjRzQUp0QUcvZ0pJRWxtTnVpSnliYTNFR05tWmlQZVp1RVZtVmVsbC9ZLzZOK0N6RG4zQVhoRU9PbzdIdi8zQmVBejhJelFrTVBuSmJ1UHgxd0MreVlKNy8wbllJUDVTLzBGSEtkcCtyd0NFRVhSUy9yZjVIbDFHdGIyTTBpU3BDT3BDWnpQQVRtWDFFeVNwSE1MQXNpeTdNak1Eb0hyR1NEWFpuYVlaZG5Sd0JoN0o5MXV0d21jekFBNkNiRzNHZ1BsZVg0anFVSC9hMUNrdHFSR251YzNoU0NBTUIzMmdLc3BrQ3RnYjNLQ1FNbWtqZVA0V05KVGhyTk5admFsMVdwdFRJc3Y3SnRRNHRtSWRSYThxU29FcFdsNllXWk5vQU4wekt4Wk5QZWhwTFNCWnYydCtRMENKOWxMbkFSUUxBQUFBQUJKUlU1RXJrSmdnZz09KTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAudHlwZS1wb2xpY3kgLnR5cGUtcG9saWN5LWFycm93e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6NTAlfS5jb2xvci1waWNrZXIgLnNlbGVjdGVkLWNvbG9ye3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNnB4O2xlZnQ6OHB4O3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Ym9yZGVyOjFweCBzb2xpZCAjYTlhOWE5O2JvcmRlci1yYWRpdXM6NTAlfS5jb2xvci1waWNrZXIgLnNlbGVjdGVkLWNvbG9yLWJhY2tncm91bmR7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNnQUFBQW9DQVlBQUFDTS9yaHRBQUFBaDBsRVFWUllSKzJXMFFsQU1RZ0Q2MHpkZndPZHFhOFRtSS93UU1yNUswSTViWkxJekxPYTJudDM3VlZWYmQrZER4NW9iZ0NDM0tCTHdKMmZmNFBuVmlka2YrdWNJaHc4MEhRYUNMbzNETUgzQ1JLM2lGc21BV1ZsNmhQTkR3dDhFdk5FNXErWXVFWGNNZ2tvblZNNlNkeUNvRXZBblo4djFIang4MTdNaWxteFNVQjVyZExKRHljWmdVQVpVY2gvQUFBQUFFbEZUa1N1UW1DQyl9LmNvbG9yLXBpY2tlciAuc2F0dXJhdGlvbi1saWdodG5lc3N7ZGlyZWN0aW9uOmx0cjt3aWR0aDoxMDAlO2hlaWdodDoxMzBweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjt0b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9uO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFPWUFBQUNDQ0FZQUFBQlNEN1QzQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd2tzUFdSNmxnQUFJQUJKUkVGVWVOcnRuVnVUNDdnUnJBSE4rUC8vT3IvNjFZNXdPTlo3bVoxdTNYQWVMTWpKWkdaVmdkS3NmYzV4UjNTMFJJSVVXK0NIekNwYzJNY1lvN1hHdjNleDdVaVpkNTdyanl6enYrdiszM1gvUi8rM3IvZjd2UjM4NlkrVHZLTmNmL3dkaFRMUGN2OXFVMndaZDc0dXRoMHQxODIxamtJWkxQY3NJLzZuV2E0WHZ1dHF1VTBaODVtbng4MFMvWnpncG5Mbk90SE50Ny9vZngxVEtYY1NOek4vN3FiTVEzanU3ck5RbU1ZWWQvNHMyajlhYStQK2dHYU1jWnJiMU0vdGRydmY3L2Qydjk5UDkvdDkzTy8zY2J2ZHh1MTJHOWZyZFZ3dWwzRStuOGMvLy9uUCsyKy8vWGI2NmFlZnhsLy8rdGZ4NXovLzJZSzVBbDJyZ3ZmNFVzYnBkR3JCNTJiQXZBclhwdXpqbWlxQVZTR3o1ZURtR1lYemhiQVptQ3JubXpkZHBVVSs4WTFkQU9ZZVhDdERVd1Z3VjdZQ0dINnVBbXlNY1o5bDV2a1VhQlBHTVVaNy9KNXcvNzkyL2Z2djlYcTkzMjYzZHIvZlR4UEVDZU1FOG5LNWpNL1B6L0hUVHovZHYzMzdkdnJsbDEvR1AvN3hqL0czdi8xdC9PVXZmd2tWc3dvbmdqZE9wOVB6SDNVM0Qzem1XR25aVlhuNGpDcXM3d0MyQktQNC84dEF6a1pzb1d4NlhycWVIWnltdnA0QUJDQkpoVFF3S2ZEVDhnenJaQ0lxaTVBaGlBQ2pCZkVCMnJQOC9YNjNNTTdmNi9WNnY5L3Y3WGE3YllDODNXN2pjcmxzVkhJcTVmZnYzMCsvL2ZiYitPV1hYOFpQUC8wMC92NzN2NCtmZi83NUpTdmJldStiTDJXTU1hRmJBbHBCTk04NVFYK2N0NnFvU3FrUEF3dVFsQlZLcUdORlNVT0FBM0JtdTdnQzVoTk9kMTVuU3d2QU9VVzdDNGdpVUNWOFNnbjVMOWhORklxVHNwMEd4STB5c2lveWpBamtZL3RHSlZFcHorZnorT1dYWCs3ZnYzOC8vZjc3NytQYnQyL2oxMTkvSFQvLy9QUDQ5ZGRmeDhmSFJ3cm1UalY3NzlFWHUycHgyeGhqd3RkSlpRY0FXUUlQTFBJU3NNSmFTd2lEOGd6SUtyd1N5QVRFNWo1bkFiUjVjMWRCVXdCbHNFV1cwaDZMcWlZc3FGUEFReEN5Ulozd09TQVJ4bWxYTVg1azY0cFFmdnYyN2Y3NStkaytQajVPSHg4ZjQvdjM3K1BidDIvanQ5OStHOSsrZlJzZkh4L2pjcm1VRkxPMzFnWURXYmx4UklzL1RxZlQ3b3VzeEpzQXhYQTJHYzdUQTlYZGdmZG9IYkZzajc2WDIrMVdBcmdJMWFnZUd3QTNxdXBxb0hzbWNiSTZGdTkzcXVnZ0ZhOWQ3TGVEdGdLZkFGSEJKK05FQnlJa2NKNUtlcnZkVG1oaEdjZ0pKU1o1dm4vL2ZqK2Z6KzE4UHA4K1B6L0g1K2ZubUdEKy92dnY0L3YzNytQajQyTjhmbjZPMisxV3M3SmpqUDZ3cmFNSTVFNFJaOHgydlY1VFN3a3F1b3RWNy9kN1R6NkhGV3NEL3FOY2R3MENRM3EvMzIxYzY4NlR3RFZJZGJ1eTczek5sZGhTSGI4STJrbFp6bm0rSW5CUzRVNm4wMzAyYUJGc0xoSERBS0pWSlZnbGZJOWpodnU1M1c1M3NMQU5ZTnhBaURBNk1DZVVIeDhmOSt2MTJpNlhTN3RjTHFjWlc1N1A1eWVZOC9mejgzT2N6K2Zuc1NtWVV5a25XRUc4NVdCc3Q5c3R6U0x5TWRmcjlRaTA4aVkxNVVaMExsREdMaFIzbzV6SzJqN09QVVREMEUrblUzdGs3WGIvMTZORmJobG9BTXVZMXpqTFVPTzNCS2VJRGUrWjhzMy9KNGdGbzRUTTVqUG11UmcyOGZvVUtLVlN3bzE2VGdBNW5weXdjV0xIZ1lsL1B6OC83My82MDUvYWI3LzkxbTYzVzd0Y0xpZTBzWmo0bWFvNWdUeWZ6ODhFMGYxK2o4RWNZendUUEVHMmNxanlmSE5GME04ZnVxRWlhT1ZuUnpaWlFOaDVmd1F5SGcvSERHZkpvODlRMXpiL3F1dTVYQzY3NzNJMlhLZlRxZC92OStkM3d1cVd2YS9ZVGRVZEVWM2ZoSXYvVml5cHM2WUUzeDNyNDNLNWJKUVM2NnpheFZHRnN2ZCsvL2o0YUYrL2ZtM2Z2Mzl2dDl1dGZmMzZ0ZjMrKysvdGRydWR2bjM3WnVOTEJhYUNNZ1V6QytyWlJpRm93eFV1Skk4WU1xY0NwOU9wcTV2YWdhWVU2bEdKQTFYUXFlamNodzZDajBHdzVuWUJyR3cwMUEyTzIwNm4wNEJHb3VOTnlUZnAvRndFbGhVZXk2blhySUt3N1FRV2RkeHVOMmxkTDVmTDgzOWdTUEY4YWh1L0p2Qk80OENQU3VxTWY4VnA5L1A1M0w1OCtkTHU5M3M3bjgvdGZyOC8zOS92OS9iNStUa2hQSjNQNTZtUTQzNi9qKy9mdisvaVNnYnplcjArQVp4LzUrODhidjZPTWRhNlM1ejZrZDIxZllDOWR4djdjSUpKMmQ5QU9TMzBmUE16eUhpVE04QjRERjZYVWxZSHA0S1FXM1crMXQ3N01OQjF2R0h4V3E3WGE3dmY3OCt5NS9ONUErSDFldDI5eHVQNWRiWXR5YVJ1NEFrc2JQcTY5MzZmalJ6WFJ4QmJQci9iK2IxOCtmS2xqVEhhQkJCZm44L24wLzErSDErK2ZCbm44em0wc0I4Zkg1dTRjcjVHdUJoTVZrMEVFbjlSc2N0Z1ZoTStpeGxKdE1BMjNSOEI2eXlzQXN0Qk9nRlhJS0tDTUlnVG9NcU5FdTJmWU1IN3p0YzczMmRRS2tDajF5dEFadFkwS3g4cElyOEdHSitBVDNWKzJIaXJobCsrZkJtWHkyV3o3M3crYjE3UDhwK2ZuOC90VXdHVmxlVmtUeVViNjhEa2ZheVdZNHp4TlJpaFU0RXBMSlBaVnJLK3U3SjQvbWdmS3FlTFc5WDJSRVdsSXRMMWRpeW5iRERiMytqWGdZalFxbjBycnhXYytOa0lMUDdGN3hJYk12eDd2VjUzeDQweG5sYldKRjEyWlNhZy9OMHBXNnQrWnptT016SGphakt3RGZvbmQ3OHpZVGRmcTE4dXA5N3pyMnE4djNJaW9CcHJSdEJsMEVaOW9nNVdCUkdPZE9IaklqWEY3VW90RmJnT1duWHpJSnl6WXZqRzVJWWdzbU1PeEhrejhPc01TclZOV2VxNVQ4RGFPY2JFdjFPZDVyYnM5YU83WXZNZXQ2M0VrRisrZk1FeHErTVJsNC9MNWJMWk4vK2V6K2ZuWjZLYXp1TXFYU1FWTzVzcEpYZmxIQUl6ZXMveEpzZWNrUkppRE1vZzlkNlZmUnJxWE1yNktwVlYyN2pSd0phY0dvdk9BTTF6TWRRTW53SzFBdWJLNjNrZENDaHZJMUM3ZzB6OW5mL0QrWHplMlZqOEg3R3g0UDlkdVFsc1lDcnF5TjhYcUczSG0vMTBPajNqdy9uK2NybHN0dU0ralBtbXhUMmRUdVB6ODNQenQycG4xWHNFSFgvYm5QYVZxVm1oMHh3T3QwbzZYTExBSGVQVVUyMDN3SGZjcnNwQ3dtVjNUcnlCNXMwTXNlZWc5N3gvQnd6Q2pCbGJCK3BSQVBsYTBCVlF1VDZWNlFIZEJsajNkMEtHMTQ3YitEcXhRZVV5bURPNDNXNGRRYXIrVElqd21BZDB6OC9oNjV2ZjAveUx2M1BiNVhMcHJ1L3lkRG85czdFVDBJK1BqNmRLSzlWVUVJZUtXUVdQQU9ySjhMS2Q0dkUrdDkxWTNlN1VGbFdhdGcyVndKbmIrSFBtdHZtL3NmSzU5L09hV0YzeC9lUDFVUEh2QTVERFlEcFlYZmIwZHJ2MVYyRGtCa3h0dy90RVdWVmxYV2RDOXBGWXM1L2pmaDlkUy8xNnZXN3M2bFRHK1RmcXN4U0pIeGtYWHEvWGRyMWV1NExzZkQ2UDN2c1QzTjc3RGtMK3pQbTVqU2RLTDR6UjNBeFFkNnJIa0xrWWxTb3dzcnE3em56dTZ3U3dkc01KT1htQTVmQmNqeHRnTUdCWUhscjV6b2todHNNQ1RnWExRT1c0WEM2ZEV5RU1wckw4bUFRelhSZ2R1aXgyeVp6b3J4a1lzRG4zaEIxVmVNTEdzWHNWdGdsMnBXOFMzc3ZrMHZ3N1I0aE5hSHZ2NGNBQ2w1SEZ6d0lIMEtjNnp1NFhqRFBSL2pwQVZ4V3pPMVhrMkREYjN2VGN4ZUdVMWlXWkhrbUlEV3ppV0t2aXJDSjREcmF2czZJSi9HRzZjVHFXZFhEeStmQXJRRFZWa0xxa1ZqQW9aSUlUZG1tSXFYd3FhOTVOMytNR1lvWlFkUlZOTzUzWTF4UmtoTzE2dlk3ZXU1MDdDYTlsSm5iR3B4T2VtUWhTdy9BUXNtbXA1elU5QmlVOEc2d3ZYNzZNNi9VNlBqNCtkbzBCejRDcGdpa25UVWVEcXdsS0JtZzN1NE9WanJaMUErckFjZ2FlaldxNmVKQ3ZDWUZET05Td09nSFg0RVFSdzhseGJ6RE9kRUs2Z1ozSGsxYis4ZzJvMUpGdEtYeXYvZkVkVFh1V2pXWGRBWmlCcDZBRGVEckNGaWltN0I2WkZuZWVJN0d2bS9QTWtVRFg2N1c3eEk4YjBENy92OGRBOXFmTjVvYUNmNzRXWmpIMG1mMWNtZlkxWTBKVUZtVnJUV3U4dXprTmNMdEVqN3U1RlhCVGtmQzZHT0E1cThZTXhPOEtWdkY2c0FWR2RjclVic0tPRGNRS2tMTU9NZG1seHVtNjQyWXJQbTI2QWxoWlcxWUIxUityckdzd0U4VGFZQVdlVU14ZGYrV2p3U3ZaMkVmM3l0T3lmbjUrUHBWUEFhcU9uNDNNdE5CcXZtamp4YmpNNGxaalpZNGdxTk1JNWt0YVcvc1lLTndTKzlsRlF6R2lobU1DS1BhNytaMFY2RWIwR1Jtb2J0cFg4SmxqV3U1Rk1MTjVqYTZoRzlrd1FnWnFmNSsxTkg1VXh6a0ZSZUNkV2hKOFhkbEdVa3hPN0hSbFlSbTRtVk80M1c3dGVyMTJUUEpFdy9ybUVOM0w1U0tISVdaZzlteitwVW9LT1lxNWJKVEpkWDJnbWUxVWN4TVpRRmFFUUlsSGN0MzJNK1kxQnpHa0d1emZpeUFOOXordWdwbFoxc3ltQ3JEQ1lZa0d4RFRwSTlSekJ5MHJIeWVEVUMxbldhZVVhRDluNHhrTnlZTUJEWnR6WjNCKytmSmxZMjFYRkRPY0FSSmxhYk95aVMzdUNwTEk5anJaakNEa2FWdmNDQ2p3b2duS1NoV2R6WFpXbFpNdlZUZ0Q4THBxbENMcnFnYmNCK3FZd3JnS1lwVDBjY0NxYkt5Q1ZhbGtFYWJuL0Z5bm9nQ3JQS2ZxZjUxeEo3c0dCMlpYY1pteG9TT3p0angzMDBEWmk3YTAvMkFJUjBVbEJhZzlTdUR3NktjQXpsYUI3dkhadldwaks5MGR5cnE2Ykt5RFVaUWJSMEIwNWJpTFFrSEljU1VtZ0lLK1N3dXFnSENub2lvMlJRVTF5aitCbkJ5OXBwaFZLTEd5QzdaekZLMXB4V0srRThJaFZDV0xOL3VMdG5VVTRheW9ZTG9hQU56OEZkdGFTdlk0cFYwQkVXMmxzNjFjenFsbEJLcFR5S2dNQWhyWjFjZGMxUlJPdFBtdldOa2RjS1o3Wkt4YVdqaVBMSk1wcDdPWkt4QStycUcvb0pManhmMHBuSmxxTG9EWm8zZ3lVMG1LR3lzMnRhS2Vjai9kMUMrckpTcGxCcWxUeUFxZ1IrRDhLaktsbVJMMmd0VWNBZEN0c0wraWpDTlQxb3FxcWtIMk9IRWJHNXNERm5VZzVBYSt5TG91MlZVMXB0ajFTMlpRcXYxT1JaTjlJV3pSZmdhUkJ4S29CRThVV3lxbEpGdHJJYzBBeE5qU2plZDk5Q1RZL1hEZlN6Q3o1TTBJWm9WRXNXblBGTlRzbDhvb1ZDMVR6YkdncUZaTkRTZ1Z3S0srMXNHRE1LcXhaQ1dHVk1EeXNpRXIxalZTUUpVWXdqNWlIT2xUaGRIdDQ0U1FnOUNOK25sOEQ5ME5NSWdBZGdyNDZKcVJpUjlJOHZSZEZ2YnIxN20veXhVTUtqTkxNaVZVQUR3dTJDV0doaGkrRjU1VFdNOU05Y29nem1zMWRuTTR1T0YvTEFFWVdkY3FuTTd5Rm15cTNJZndtT1JPZDdZMWlGV3RPam9ZOFRvNDFtVFY1SXlzZ0ZGdVJ6c2JXRkdiTklJSkNEdjFkT280bFpHN2pXQndSRnRWVEt1V3llQ0J5SktPYW44b1ozZXA5WGRkTmwwdER1YXl3THo5Y1hQWWVEQUEwU3BrQk85c2JWY1RPVldsZFB2NHV5ekVrenhIdGp2b25Ib1NrRkVXTm9vMWQ4RGhjUXB1dGQycHBOb240QnpvQWlKMWhCRlFnMGRWdGRiR0hIRFFXdXNobU5FUXVrTE0yUU8xRzJZOGJnVFhxRmhjQkpqN0VqUGdjUHRzOFVTOHFQcFBCL2RYem5PaDVaNDM4dHpINWVjNlFnck9LclJSZktteXNCbVVEQitQaFlhYk1sVlBFUitHQ1NJVFR6cjdhbTJ0QXJIM2JnY0V6UEptK2NyNWpKNE5uSE5GRFZyRlhjSTVMZTlrNUpudytiZWRiVitGZlJ6WklIYU9PYU9zTFkwLzdVR3M1OERqckd3S01JTUZJR3pPRVcxL2pHc2RBdENONmhFQUk0aEJlOVlYZVJST0JTVlBBVlBBcXZJTTVieDVoVktXQU1QNnpCUnkzaWVzY3JpZFZkRkJpbkJ4WERuRzJHUlkyWGJDdnAxbGh2R3RPOUJ4dTVoOTA4WFF1NDJsblNBck1GZGl6TWltOHV3UkN4UEdubk9TOGx3cG5iT2lEcVRBanNyUk4vUGNvQVNjQ2JhQUNxVk00MHlsbmpqVEJzK2J3V2xBRzIzL1VLYmRraXdLV0lRUEd6V2FjenBvU2x4UEVqODIyY05Xa3BTN0Z5enNEcnFwZmdwRzNqYWh3MnZnYmFTUUF4dUxXWll0N0p6eU5lOEpvWnBOQWN2REZPZHcwd3FZVDlBSzFyWnovRGRiU2xMUHAwcnlJeGdRSmxLOUFabEVxN0lPWHBvaGc5UElockNuZzg4SnNPeGlWNFpXQVlmZzRzaWt4LzhreTJaOWw4NjJ1cXdyZnNjSUg4K3VnVG1WR3lpZGRlVllVZ0VNbjRHWnpnMTRFd0lzaDlzeDJjS0tpV1hSZXVPRTVnekdPUWdkbFJLVlZkbGV2cWIyNzlYcTBRbnN0czJWRGFCTzBjb2V6c3J1V3RIQXB1NnNLRzRJQmhOMGFHVTJrTHJNS0dSVE4zSG1iQ0R3S1YxNHp2a01FREc0UWZaVnNwVmxhTlUybWhjNVRFWjNOMWgvenFUaGV1THBXMDVaV1RHVmpiM2Ribk5teEtaQm5OOEpxaWRhVkxLQU95QVJOTFMrTUI1NFoyK1ZhcW9NTEtyb1ZCbG5nZWZuVFBBY29ITldDU3ZsZkE4Q0kwSEVtQk5CbkJsWHlNcnpVN0E3V1ZtOTRQUHFRMmdtcUt4K1dER3NudmlsbWNTT0JKcU9LMW5ZeUFJenVBeWVzcTNVZFNLM0tmV2NZS0Q5NUhtZllPVTNxc2VyMkN0WUVVQStGcGZxZE52Z1BCWlVCaERyR09OUlZsUXNoOHJMY2FVQ3lrSEcwT09Vd1RsTEJyc2g1c29FTUdlemkxRTRIUlZ0MWljcDV3WkVGWGRpYkNrRzhZOHZYNzVzYk80RTBpb205eitoalNpT2Z5M0RocFhJdHBWaEUrVUdRZHZvV2p0Q2htckdIZjRZQXpLZ0JObkd0dUp4RkNlR2RoVUFmUUxMSzhrQllBUDZndkZKWmFqTUczWGt5Y3k4S3VDMHE0RXl5bXd0d2R4ZHYyTTBtSUJ0SzBMS25mNjQwajAwQXVxNGdVa2RXR2xoczIycUpjNmRaQ3NMMTlveG5sVEpHNFNZVlJJR3BEOFRQRkJ1TTZPRWxiUzFwbGRpZDRtR0F5TjZaSXVwYkM1YlhKTjlmZHBiVGhTeExVYUk4SUcxWElZQnhXM1RqczZLUW9zS2N4ZnhjUW1kbndSR00xMEduRmNDeTJYWXVuTE15QWtkZ2s0bWVQaWN6c0x5Z3RoY0J1dDZnb09xUzdZVkZYQURMamFvc0I2czZvZmNaV0FaU0lSWXFTVWtpell3dHRZYWIzdlVPUTl3MkhSeElJZzhXd1JWZUU2OHhpNFV0TDN6UnBoeHBsend1WnJjcVlDcTFJM2pQSTVkbkpJeWdFb2hNYlBxVkpTenJ3enhCSlRzNXpOK1JlVVNneGlrUFFWRjNKVkJlTlF4YkhFTnJFTU52RWRGWlZWOWxIOStPUkdFc05aUXB5VE5jNEMzQUc3WEY0bmd6cStEck8yemJ1YWFPWGdkYUZjZGtFb3RvU0ZCVlgycUowQzhPV1plRzRLR2xwZ2hBMFhmVE9QQ3FWMnFxd1EyNlFXZkYyUE1MaEkydzFsVkFhMmFQc1lkMHphMjVNUVJ3Z2NaTjZ1UURDaStaeGlENFhFTTJrWnhPVDQxRm5abmFSbGNwWm91emxScXFkYlFWV29wUW9TQjU4UlY1MGxCTnJIaS9Bd1hTNUxyd0RWbHBZM0ZjM0J5aVlHYzUyVHJpc3Q2a09YZHdJbkFRdEpwcDVRY2h5YXF1WU9WN1N1K2Z4Vk1hVjNkYzBSRTJTNm1VWTBnTHQycE1jWXFyS0lROXcybDFncFFVTXRRWWNtbWJ0NURUTnhkaG5VQ2pRcXRiSzlTVVN6dnJDMG1taGhFMWUyRlMyK294eXB5L1pBU3V0a210angzdmNCQzI0UFg2NW5icWtCQ1JoZmpTOWtJWVBuZWU4Y01hZ1ZPaEkvM1QxZkFtZHRBV1pzQ3N3VEpDa1FWTmEwcVdLU0tQT3BIQVVoRDlEcmJWY3lvWWt3cWh2aDE3dllBYXlYTFF5S0dZZHhsVURGcDQ5NHJCWFJqWWdPMTdERFlldE5JVWovZXpwNlMwbG5scEV3c1dtSk1rT3dzS1hlWktFQWpJSG4wRVFKSVNhUkJjTzZVTUlOejdwL2JFampudzRmdCt4bUR2a3N4WDRHMnJJcmlzN3FhZUt3QUZNUDJPaTduNGNyaXVad3RwU1V3cGZMeFNuT1JTcklxdXNjNVpGYVh5c3FSV2ppWjJEeUFXRUlMMzV0VlNvUUVsRkFDak9lR0dTRTdBSEVRZ2RvL0xTdkNPZ0dCdmt4c21EYnZsUzNGcDV2aGFCMlRBR3FSS3JLS01yaExWcGFHekVWalowT1F4RGhhQ1RBK1F5UlIxZDE1YVF6ckpudEwzUmlic2lwakc2amxnTDR5cWJTMHNOWWcxZTg0dmhiQlZyRWxLNjRDVWNXWVhEZkt4aHBJdXhpVkpaVXhzYk15L3VSQktUTlJRNGtRM0xkUllMUzBySmpSUGxUUHFZNmdkSnNFRGMrYVFYQW4rSGdzTlVDYlJ1RjBPajB6d25BN2JXRGtiaE81RW5zMDBxZVFoUzFsYUJNbDVNL2NBYXhzTEY4ckt5cWwrVGY3RUxMRUd1L2l4aWltZEN2bzBUamZwakt3YWdnZW40ZWg1djdMb2tMS2JMdXl2SGhjWkc4ZGhHckVEeDdIZzkzWnBwSkY3cUJxTzNpVnZlWEVEUU5Jbnplb2U4WXE2ZVBhWkJaMkp2aU0zVzJVQUdvdGVrUkNBR3E0RWtGMVgzRE9uUjExeVJzQkwxdFJhMFBWY1ppTkZYWjJjMzRGc2t2b21JblFRNmx6cEpvWmJKeGs0M053S0pGQnF1SlNzckJ5SHlkeEtPblR4UUFTQm1TM2orSk1uc0hTbGEzRWM2SzlWV29KVm45emZqd09NN2hxWUFBcUpRd0UyYTNuQTQ4SjJRR2VnUmtwWk5pdlNZK3lzM0VrS2Q0b0pJd3N2SUhsM2NXZ0x0NWs0Tkg2T210TFdkcHVyT2t3RU11cFljN2VNdERSaE9jSTJ1aTVKaFZJelh6THl0by9HQVB1Wm95bzh3a29kdVZnSmdsQ3Q3T2hHYmdJRDRNcTRzaSs2M3pVUzFGdUZGWEZscXlhajJlbUhsTE1jQnFZdTBGTXVSMjhCYkI3bE94Uk1TaUNRWEZoQ0t1d2toWitwWURpR1NnYnNLS1Y4TWlTUnN1SFNJV005cmtsUmlJbFpadXFYanNRSzhvb1lKTWdxM0pLV1ZraEhiaHNWeEZVenRoT1dQa1lpamNieDU0SUtzU2RUK3VMcjNjckdLeW9ZZ0ZpR1I5aUJrNGtmbG9VWCtKSWxRUlFxYWJtcGduaHF0cFFwYjZSVlExV0g1RG5yUzRoRW9HWnFhZXJRMmRoRmJ6OFhlUHhTaG1EYm83MGVJU2pvb3JPMnZLOFNKWEk0U1VtRVU0eldLRHpVRHRXVFl3N3hYbGJTVEVqNEZSZzd6S25Lb0dSQUx2MEdzOVRnYzFCcEN5d0daUlFBdHFWejJ4ckJjQU16RXBmWndGU2EyRzVXMFFCRmpTTWFwV0FFRmEzSGNHTjdDeER6RUN5SWtKOTdxd3JxV05UV1ZvODc2UFBzalBrajJ3dmdyb001bExaS01FVEtWcWwvQ3ZuV1ZGaUZhL1N6SlVRd2tvWnNyNjdZNnZsU1JWMy8ydG1OVE9ZM3ZuYXhZd011b1BLcWR6UjF3N0lxSHltbFB4YUFUaGZVN0tvMlpYWWo0QVlKSEwra05kS3dSUVlFU1RSYTVmc1VaL3JWQzFUTVR5V1Z5WW9xTnR1emFIc015djJ0dm9hcnhkZnF3WWdVMWF4Rm8vY25xbDFGR3NxSyt1QVJPVjhCWDRHVThXY1pUQVRpMnE3UWN5aTBPMFYrR2hXQk1OUlVrbjhIMVNzV1ZFNUJ5M0dpMEVDcVVlSm9CZkF0RGE0YW1rZFhHMzdBR1A1R2dlYjg0cDdVYXpwb0tSemRGemVROEhrb0hHeHByS3kvSHBtNXQxMnA0N0o2eFRZREV6N3VJTkVYU3V4WVh2RnNrWUFjK3lTeEg5c2Y1ZnRLelU2SWJ3VkJjVUdnNWU1Rk1DRVhTRXJaUjB3R2F5VjE5d29NOWd1UGpUcUpkVlRxUjR1RTRuSm5MbGRXVmtFQ0NaTGQyVkxGK3h0YW1leDdJcGlyaVNEVXB2cnBuOWxyd0dNQ0h5cHBNSCtwczZMSUxzdUZHVWoxWEVPWGlxYnFTSFBVS25DbHBXVjY4a3F0VVJWTkRZNFROYW9jeWtvWWVUVTVuZ0dFUWEvUzFEbm5FNEFlWE1jS2pIUEFtRlZqQ0JFTmFleUxWTkhmcjNweDh4VXN0Sjk0aElwZkg0SEtFL2VEYUFySzZsU3lWVkZiZHQxZ3hUSVZrM3BwcFZsRlhpNHBFaFZCVE9icXVvaFU4NU1MWG4xaWFodlVrSEpqU0NNYzAxdExGdmVWVkJ4MERvZE02amZ0Q3U3RE90SXpZeHJjMHFwMUpHUDJheVlGejJHYjZIdk1yTzhjbkd0VjZHam0zdUltU2ZEMkdwV0s2dW93YlpHTXhGS1FDbzFwT010Y01YRnBSc3QraFhHb0FvbUYzc1NUQkdnVGdsYkJLV3dzUTN0WnFhWVNwMFoxQ2ltUkRXRmNDSlVQWUowMEJJNUZrS1lOb2lmdVF4bU44OFNXVlhXTE1hVXFxcWdDMEJtUUpSNnNrM3U5TkNmNmpZTFh4QWZxc1lFZ1ZMQWhSWTJBdGd0ZmxaTkZtRnloeGRyTGtBZFdsazREODhNMml4SHllcElkaE1IckcvaVIxWkd0cTBNR3BiRGJSUFlPWGVTWTFNNk55NFpzdHZHU2t0SytYYkZQQVRqMkQzNzFzYVBFc0FNWGhYcnNaMGttL1hTdGtoaE15QmZzYTZ1WEZaZTJWQ2UrWU1yMStHS2d3clF5TllxMVZSckIrRWl6QW93Nk5zZE5LY3lWRWtZZU03M3lzNnE0a0FIcDZCaUZrbFRrSXJWQzVvWVY3dXp3T0dDejRVSjBTdHEybFdNSnk0d3RiK1JldEw2dFpGaWNuSm1CdzVVakN2WFhNWlZKWDJNUWtiZitYTjVFV2Q3OFZ6OC9KRXNNWlRCaUtOenNtMWluTFJVUTc0SDROaWRhcUk2OGo1c0FGZ3hjUnZlQzdpZUxKWGZRWXhqWloyQ3NpV0Zld1pYSm1CSWxaMXRkdHJYNGhTdWF0ZUtzby9SWk90T0tXMm5tcTFvVHplSzZkUldBV3UyTlJWYjRocTBTWG0xR3Z0dWdIcmJyNUlYcW1Ta3RnNUN1REUyTVNsUHdzWTVrTkUyV3AzQXFpWmJXVkxBeGlCRisyaUJaYnVOajZNQjZyc01MQzdGeWFzYVlEeW83S2tvUHlFdHczcEVNWGZQdnhBSmkyakFRUWdqcnowckxJWlNXWmxJb05od2Q1eEs0QVI5bVlOaldBYUxybnVJbUplQlZOOXpCT1JPYlZ2YnIrbVRUZkZTRUpMU1JuSG83aEVKb0lpOE1GcWp4bXZnbUY1VVJaejR6TEZnWlo4Q3R1Mlg3Z2dWY2NLbTlnVnhJc09IcXhYZ05NS25GV1pZbmYxZEJuT2hheVhxMTdRd0ZsV1cwOWVOS3lWSkZtWHFhT05HQTVhQ2VnTWJKM1VVa0dZMWljM25LV2dqcThxZlZZR1FHMWdSdDZyczYyYTZIaXFxVU9xZGVzSzVObVg0bkdvZkpvaUUxZDBkRjlsVlZrdlQxL2tFRWFhQ29ZT3dGcGNWY29MTSs3NjY5UHhDOXJXcWt0SDBzV1VZbGQwVkNwdUJaL3N0VlJjR2d5OVdYMitVMVF0aGk5U3pBcVN4elpzeStPaUZ6QllueVNHVjZHa3U0NHJEOEJDT1pCVjNCdkQ1K0FLUkhOd01Fc0I2RXpIbkpwa1RBZWlVbEVHa2NFQ2VCNkdEWlRwNVlFSlRsdmRya254WWpUbGxNa2ZOdFh3RGpNN3VWaks1SlhVVW40M3JycXBLMmp5dGF4SFcwTTVHOERDOHJ0SE1ZczdLU2dkdVZRTUdUWUZxRnZWUzZya0Qzc0RKNDZhZmRZRndvcTExQU9LQ0JMaHZ3b1VnYzhJR0FOeWNSNmtuWnJkSlBkc3V4bnlqZmQzRm92VGxSTWRFZHRPbDVDTVY1RUhzWFFCaXM3VE93dklEWmFHajJWbnBiaDdjcEs2M1Z3WUVNTHdxYmp6eWw2OTlzYXdGRmtGMXlxalVVMzFIZkM2c1cxWkZWRnVYVlhWZ3o5a2VFYXcweXMxbFdmbSthelFBUVNXQStoS1lWZnNaalBuY0FjVUI5b0lheXkvVVpYUk5ja0RHamk3N0dzV2J2Qm82dFByV1BxT3lWa0JVcStJTmVxcHpOZFlzL3UwaWZoNXFtcHFJVyszM0pWU1Vjd1k3MEtMNFU5bFlkVTZsanRTbHM3bG1maTlnM1l6ZVFmVmthR0ZhVjNPRENuYUQyTjh3c0VERmtsRTNSek0zWmdoZFlrV0hzc3pxNzBGSWVjbktrVmt0OGV6TXpScTlia0d1S29qUkxCVlNvZDNZMXlQcUtnWVc3SlJRVFBWeXk1eElZTGpPZ3hnVDUyUktKVVkxZE9ySWlSZDRmdXRReC9BNUFjU21FanowdkZXcmtMenZiV0F1OUhPV2JHZ3hGazFWTlRwbkJLazZUZ3dpc0kvSGN4WVhQMXVBV083MlVMRmxCVHErYVN1MlZUVXM2aHJ4TTJDRitoRW9yMVZJQTlabUZVYWFiMWxTU2dac1ZzNHN4ekhsVkxvSkhyOUg0RGhPTlRrSTFYQzAvd2lZMk5vV0FHNVJsbkhGbnE2b0xjY3BRZGRNdUovTzE3SlZBNU9ITGkwQnFDenRxN1kxKyt1Y0NkOThxTEk4TUlIQlYvY0tqeFFUbWUzaEZCUzNNeUNxbkRzdXltMm84MEhqdkZGVHRyVVJtTmFHSnNtVmFoSW1qVHNVWEt0UVpUQVZzN012djgvK2Z6VXJaQVhjTEo2TTRrb2U2WFAwYjZTbVdXTkR6eVVwUThibCtMdFd4NHR1cVozNmNSWVYzeXVWeFBOd3ZJaXFpUUNTbXU3c3JnVHpSNm5reWhwQ2FyWHdGeTF2R2Q1aVAyY1kwNmxGcjVOamhoZzFZNitOQjI4ZnRiSzgzczhyZjdrTEpiS3dERlBiTGcyNWEwQWRaSkVpcXI1cGhpeEtNRGxSVXRjc3NxMWhyaUxxR29IK3plTmdWbTlPZW1qc0VUVjhKZEYwTkhua0lGeFdZMU9CNFlycDdydFdKN05nQUFBUFhrbEVRVlEzb05zNW5wbHlWZjh1MkZvTHUxSnJIdmVhWldRanFBa3NodEZhMmd6c1NHM1pwa2J2ZzNIYWZGOXNsUFBsbGRqRmxLODBHeXNtOE1yNE1QaG5lTldFTlBHakFJcG1pbFRQQVRkVFJUWGxDQllIWUFRdVB3QTM2eElwV3RHTjRxM1kyTWhpR3NVcHVTU25sRUpSRDhQb3JDN0NGWVZ3K0Y1MXFUaGdhYnhzVHhXekNHWTBaU3NiM2xmcUF5ME9QTmpOeTh4aVFRS3NIWUZRMkhCWlZ2VmJCdXEzbTFvV0thanFhb25zTTZ1WlVyNkNqWFdOWjBsNUUzaDNqVVJtYTZrUDNNSklpeTFMbStrYWhRcTQxTjJpWmphNXNqdGxMWU5aSFpySDZxVUdtNHZNYkRwNlJ3MkNGbXZ1eUZrckJjQ3lNdEZxQmFFQ21zSG9LOUJaMkxBL2xKY1JxU2FEcW5hV2JyWmRHYXozRExnSXZCbG40d29HenRieUpHcXNsd3hraGhIclRqVFlGWEN0T29LUzh1TGRvZlZkQWJPeWxHVTZubFlwWFdadHM0blhCcTZXeEppdE1Ob2tIVUpuYm5KcGxRbSthR3BZMmE1R01WMlFEMWhSdWJCUEZLZHVtZjVPSGtMSHowRjlsdUU1a2pCalJhMG5GRTVDVUdxSHczMk1talo2eGtnSU5WblNuWjFWWlN0SzJxS2xSYUxsUWdLN3VUcTdKRlhKd00rM1NPRUt5aFpOSSt0SjBJNXFNWXk5azJxSkQ3ZFZXZHFLWGEwQ0tOUjBDY2pnK0IySVl1MmZjQlpKWmtNRmdNMTFyMFg5MndpbGdoRkdnelZuZXhscUI3eEw5bVMyOVNpWVVWWTJuWE9aak5CUnN5RHNRUFJXVzVoclo0WGNkQzRIVldSYmpnSnI0c0ZvZks1U3pqUTdyaEkxVWViZFBkRWJqNnNxSXZUWlFaNXZhMDhyQUJzQVcwVXhlV3l0QWs3QTJLSjlacHh6Q2lvQjI0WEZ0WUFlWFl4cjZhblNxaExncHBFcVdiR3dMdW5UZ3JWK0lqV2xMMjlsamFBbDRFUU1Hc0VycDRhcGVaaXF1d1JYTFhBcU9DZXJ1MzJtbXlkYzZvV1RTV3BGQUdkemVUQjhSVEhWTUV0bE05MENiYlFDWWhQanEzZWdZcjFGR2RZSVFqaXVER1o1elovQXpvYktHT3lMeHRpNmM0Und0djJhbnlXbExJQ25sTGh4SlJYdDZBNWViREJXRk5PTmJ4V1oyZDAybW51NFM5WUVDcGVwcFYxelNXUkJXeEhZelZJdjFDWFNvdXdxcVgzakJCQkRaZFlRYnBUUVc0WlFsUzhyNWtINHN1U1JtZzIrKzNKTjEweDFQYUFtRWttdFlsRWRlR3BKRU02a091Q3FDUjIyb1N1amo1SVYySGRUMHpqNXByTEtUalhGQVBqZFFseXE3eElCeEFRUDV5TWN6RzRWeEFLdzBuNmlsWjJRQmNlMnBMdWxrdXh4cW5vSXpGZmdxeXFqaWw5UzFWTndCckZtZXllb3BzOHlPalpVeWJaZGZTOEN1YVRJSnVtenM1dE9EYU50THBGRFEvUGNKR3dlTGhtZUwxbkIwS3FpVURTY3NpVVZEODlEaTNIdHJLdFNVTHczUkxpeWdaRCs3c0Y4SlRPYmdZc3JHdkROVUZSR2wxaXkwTGwxWWtVYzJhSllNb2c5MjBJOHFXNllEQ2cxTXFrMEpISkZLWGtiZ2JScmVJK3FwWU5PWkhyVmNEVWJhN3Bqc3BoU0pOdEs2dXBnUk5BVm9PUzBtdWdCZU40YklaZ0hodVBaL3MxRU5hWDZLc1ZyK1lOcmgxTmI3aXBSMFBFNXpiTlJlZ0NickhSVXc2WWYwN2RMQkpsMWY4S0I5YXMyVjFuTnFBc2w2MkxCQmhlaHdhbGVya0htQjFKRklFWktTRXVzZGw1SlFqMW5KbEhYU0NGMzQyZ0o5Q1lHclhlbGtuSklYcVZQOHNEK3F0cGxDUjNYSDJxZktxMHlnTXArS25Wa0t4TmxaOG0yWWtJbFZNaUNuWFV3bDdxem5CS1N2UXozbTNQdDZvUWJYTzViNUZpeENoL2ZIeFVRVy9BRWNLNnpDTnFLUW5MOXN5d3FtS3V3dnFTWXpUL2FQVk5OcFZ5aHZSVzIxYXFjaUNzamRXdkJ3SUxVdmg1VnlDemJXb0MxcEpqSjY4MENXc2wrdWRLQjZUNVJ3RzFtbG9obmxwYmc0N2l6NVU5aGEwRkd0bVJMRllCdE85OXk5N0FwMHorWkRUQW9nNmtTTFpzTUhnL0lGa2tncDZDcHZVMlUwY1lWU2RubWtqd0JkT21YYnhUV05XenVJYmlwTWlvVnhFY2taRW9haFNPaXkyTTNLMGpjQzFMaFZEd2FxRzBadmtjV3FDbnJHNEdJeHlrcnFsYldkdzZMUXlCYVpSOEhtTFJJaFFXc0hzd0Q0MlpYVkxOa2Y5bCtGbFcwSFZRMmx3RnNDL1oxRmR6bFFSMEthUGZvK0ZkZnUrL2R3VlJJQ3UxQ0dSN0FFSWlBaGMrQVpVRjBrT0JhUHhtVXFnNGk2NHZRblU0bkZEWUo5TnorMWZWWHZlSDlxbXIra1BJTHg4b0tjUlYvQkZieGJFMEpNVDBrU0Q0dzZML2xOWThvY3NxYWdWZFUzQTNNanhoeGNHdXF6c1BINGlycGFvdzFxNk95clZqdnA5TnBjNTlFOTFMbGRib1lWekpXZGltV2ZBVzJTTkVLY0RhWDJGbUJMTEEvdUt4bG1oaDYxM0lzMVVSUUFwYktmdHR3eEwwMnE2T254NXBReFNiUG9qQWcrdjVoQW5ONkxIVlJEWElzdkt0UmppUzBxSlV5WlRBWFZiQUs4MkVsRkpXYVFkVm9xVUMxVW50N0JWYVRRdWRNNlN1cWV4alFKTjQrMGljYXh2L3V0Ykt2ODNFVGJUOEg4Z2pjT0t4T0ptYlVhNk9PVlhodDNkRlk2ckh2OVhvTnpGTGNlRUExbzgrcEttMExBSFBIWjJyWUtqRnEwaGZaRml4c3FISmdEM2VENW4rVTBrYjFtRmpYa24ybHZNU1NPc05FL0NkSUFLRjBTeXRxNnVyT0hVTjVnd2c0R1pvc2dibWdnTTV1Y3JhMnFyUzJJZzFjYmlCQmN4WXpnelVETkxDdkw4R2JaWE5wNk9SeTNMbVMrS2s4M3pSSUFLNkExaW9LYTJJOU5hcEl1aVVGZGZDOTc2NlBGWlV0cVVyNktiV2srelpVMWEvWnJJWEV6dHJqVE9mejdod0t6aUNlWElhcmFIdGJaSU16KzJwR2dhekNtdzRxV0FGdkVkaG9kWXAwWHEwcFY3RzFZV1lXYk80cWhHcTQyK1o4Qll0ckxXdmx1TlBwWkFlYUZGUzF2dWJQZ2JneHNxY3BuQWFzekJvdkthRm9EUThCR3RqZlVPbDROQUcybm1RVjA0ZmVKZ3VtdlgyZnNyUUVXWmdoTDBKblZkWWtuM0RPWkllUk44NlJxUFdDbXN2R1ZxRU1Sbnd4UUF4d1M4RU1ZbzNJem1ZMitCQ2NMcDRNS2l1eXVoSW1hbWxiWkZjTm9ObDd0cCtSSGQxOFpqUUlSS3lYZEZSaE45OC9oeUtxd1hXTm83TzF3aWFYb0hOMTA4UkVaWldFcTZncm5JZmp6ZWc4amRSZjFYRUw0a2tYYTViQmpLeG9LYWxqQmplSGxWeFE0R2F5Y3BXNGxET0FLdG5UeEhBdE9mek90WndIQU03c3FWWGtWNnl1NmthcDFuSGtYS3FXRi80WEhxamVuTktxQmpwUjNsMWNoM0VqZzErRXNnZFFoc2RHMEI0Rk05c1dBVldwdUF5aXdUUGxlWnh0OVZ5WlZTMnFYZlJlV3FUQWlscHI5QXBvV1RqeHltaXQ3TndWNEpUcmlaeU9BOUIwazdIRmZVTG91cm1LWUhWblJRdnFHTDVITUhkcUZjUjJxV3BtY0s2ZVR3eDJkaXBXcnZpRGlscitmS1dxM09XUldkSEt3QTRldTh3amNoYmVSekZpbHFqalpOM3VmQ3Bma0owL3NjVnBuWWs2TDBQSTc3bHhkV0NaODdXaVdtN0IvQUdxdVFTbnVqR0tzQjhDSm1pSnE4cTFwS0lWV3lxT2lUSzY2cjE4Qk44cjc0L0FFNzFmZEMzeVBTMk14ZE9wbkUxdGxWeEQ5Sm1WT29nZ04rcjRQakFYVkZQYTNFZzVqVkpHRlZVR05vbEgyMEdWclVCN0JPeVNXcTZXcVlRZFdSOTJwY0ZNWU13Y2tiU2dDS0NxRDY3RGlpV3UxZzhNUUM5QnlmY0ZxVzFMK2pMNzE0cU5DdXpub1N4dDBkYTJndFdOMUc4RjBCSzBOTjBudWltZWxVRjlkSWRBZmpPNDRVVDNDalFMb1VlTEhKRlRPM2dtcFJ1SUlPdndCUUNicU5lbzNxdFo5aUY2eFZLMTNHUmxvNHpxaW1xK0NHZFRpUjF1Ulk4b3FnRTAyaFpCYTc5a1pYUE1xdXhSSEtsYTJzYVpXTjRtUnFaVWowdkxDS2hraktucU9RSE51U1pWSm9LdkFxUzF3cEVxdXZXREMxQjJ5cHdyQ1BzUk1FUFZUT0RNTEpNRHY2cWVLWHdpMkpZVjVTcTRxS3l2Z0dzSENMaXVqMmpSNTlWOGdNcVNKMkZKWlJYRUhWUkhqM3NGUHJjdDZPcHFsVzFHcGF0UWR0MEd2d2ZNNm42M0luc0dWRmhKR2FCcWdxcUlWNklzWGxsWmd5U1BxNFIzYm50M3dpNWN2K2NOMnlxUUxXMVQ5NUtZVnNXV3RLazRjQjlXNTNXUVFmbFFZUjZXbDRIYUpaanZWRTBENXl2cStSS2daQ3M1cWRCRVA1c0Q5NGNBdlFMbFNnTmFTTUF0SHg4OEJ1TlE0MXpkRnNYMzB6S2JjczBNTEQvaWhrcFF6bDB3aVRxS0xUZmJLbUNteVlJQ25LMEliYWllQzRDRzlpU3lMUTdjSU1HUXdhdTZUS29xNjBBcGwzV040MExacGNhMUNLS0s5VlF5eUlFbjh3MEY4RjZDTDJoOG8zaXhHd0M3czdFV3pDT3FtY0FwWXhZRDRqc0F6VlMwc2wydDk4cEE3dnJLb3BoQ1ZTb25iWXBnSDZtdlNuMjRwVEJWNHNkdFYzQnRNcTVrODJ5K0lBRHZVSjB1QWxrQ1ZUeElhUG0rVU51L3FrVjRGMVR6SFhDR3JYSUFxSXRCS3lwcUs5OVZ0QU9WczY0TzRPYlg3cEhMVkNwWUhjUm13dkxSN1R2WUFLQkJONThMR1Z6RHVGeitoUWJXZ25jUXlDWkFrK1Zic1BTb3VmOTMyNjFpWmdtZkNwd1JiQXZxbVNxcmlVMlB3aGphb095WXF0SWVnVlhWaVRzbXl0YTZiR3lTcFkzZ3lScnBJeUFlYVdERHh0cHNYd0t5YWxNREtOUDdZQlhNcUVza1VzaTJ1QzhGTkFQeEFLVFZmVDFvNlZ6TTBFMGpGKzFyV2NVdUh2ZHlnN3Znb0ZwbFg4SHB2SHBNQ09NUlVQSHpaa0luc3FsRktOWC9FSU81MkUwU3hTek93b2IyVm1STFc1RDFYSVUwcmJnTTFBeldneUM3ZmU4Rzd4VUFLL3RhRUJhdDdsdXF0eVA3RW1zYUpRT2o1Rittcm5aZkN1WUNmQlVBV3dTaHlkNnBNWS92QUhHMVVxT1lwYkkvZ3k1VDBDTUttK1VPM2dGdUM4NWRnZkRWZWd1UERmSVRySUJMc0xyY2dkaDNDRmdGWmphS0o0SXYzRjhBTkVxdnV4UjF0VktPZ0xvQ2Exanhib0JBa2o2djdqL2ljRmJBN2Y0cmZSblFETFJWaUcxM2kwdnFCUXJZVnFCYkFEWlQwWnBpSG9TenZRcG9wS0lGUzNzRTFIZkJXbEhYZDBIN0xuQXJxdm91Z010bGpIQmdabmgzRW96L0JLakxNTDRaMkFxMCtoRUpyOWphVlVCYnZOekNJVWlyb0M3QVdtbUZ3NG81QUszTXRCNVZ5cFpNU0ZnczA1SnlHVndsd0Jxc0VHQUFhMlpVMUNqVWV4WEdzRTRyS3JpaWxCdkZ6T0tLbzNBdUFyb0U2UUZRVTN1OFlwTlh3UzVrKzFUWnQ1VXJ3b3VONEtpVUV3K2szWldEcDFSWEhOUnFYYjIxVHMzOTk0NXlaU2czVm5aRk5ROUNGM1hlWnlyNURnQlhLaXdDTWEyTXhlVERZWGdQMUZzZjlRTktaYzBrODFSSmszcjZFUTNyQ21CVnlMTDc1RWpaMXBJVkRIb0Z0aU9BSG9CMEJkVFZ5bHFCc0tLS1MrQWVCWEpWTFkrQ1hBU3VHdk8vQXVxN0d1RWpEZkdLZzFvS2Exei9kbW1pOUk5U1VHTmhsMEF0ZnVsSEFhd29Zcm5Ta21OWEFWdUdFaHJFVlh2VUYrQTVDdDJQcU5PakRldHluYTRDbWVVb2xtZVhMTjRBcTdDNVNqMTBRN3lqZ2wrdDZDTnhTUkhtSTVYK0Nwd3JlWUIzUWZkcW5hNHEyMUtkQnVjNEdvWnNuNDlaT09pVmlud0hxSzlXemp2Z2V3ZUVoMkFVNSt2dHhaOUNkOVdxa2g0OVYxOEU1b2o2dlZ5bjBSU3RBeUdJTzVlZFhSS2Q1QjBWR1ZYcTJ5cjN4WXArNVV0K0M0UUo0UDFOMzM5cFFNalJlamo0dmIvRGNyNnJRYzNPLzByam10WnBlWUNCaUNIZkNlbVJiTmhiSy9wTlVQYzN3Zkt5NWYyRDdPbEwzL3VQaHZlL29VNFQwRjhmK1ZOTTJ2eW9pdjBqSytLSFFmZEhxKzBibmN6NG96NzMvK1k2TGJLdzFvLzVCN2VPZjFSbC8wZHU5Qjl0bi85YnZyZi9qK3YwaDZ0dG4ydHAvci80ODE5eTQvenY1MzkxdXZ6emZ3RGlmejZwaFQxTVBnQUFBQUJKUlU1RXJrSmdnZz09KX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNze3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lO3BhZGRpbmc6MDttYXJnaW46M3B4IC0zcHg7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmNvbG9yLXBpY2tlciAuY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzczpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6Izk5OX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmRpc2FibGVkOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lfS5jb2xvci1waWNrZXIgLmNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3N7cG9zaXRpb246YWJzb2x1dGU7dG9wOi01cHg7cmlnaHQ6LTVweDtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDojZmZmO2JveC1zaGFkb3c6MXB4IDFweCA1cHggIzMzM30uY29sb3ItcGlja2VyIC5jcC1yZW1vdmUtY29sb3ItYnV0dG9uLWNsYXNzOmJlZm9yZXtjb250ZW50OiJ4Ijtwb3NpdGlvbjpyZWxhdGl2ZTtib3R0b206My41cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjEwcHh9LmNvbG9yLXBpY2tlciAuZXllZHJvcHBlci1pY29ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO2ZpbGw6I2ZmZjttaXgtYmxlbmQtbW9kZTpleGNsdXNpb259XG4nXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxyaGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7dGhpcy5pbmplY3Rvcj1lLHRoaXMuY2ZyPWksdGhpcy5hcHBSZWY9cix0aGlzLnZjUmVmPW8sdGhpcy5lbFJlZj1zLHRoaXMuX3NlcnZpY2U9YSx0aGlzLmRpYWxvZ0NyZWF0ZWQ9ITEsdGhpcy5pZ25vcmVDaGFuZ2VzPSExLHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWY9ITEsdGhpcy5jcFdpZHRoPSIyMzBweCIsdGhpcy5jcEhlaWdodD0iYXV0byIsdGhpcy5jcFRvZ2dsZT0hMSx0aGlzLmNwRGlzYWJsZWQ9ITEsdGhpcy5jcElnbm9yZWRFbGVtZW50cz1bXSx0aGlzLmNwRmFsbGJhY2tDb2xvcj0iIix0aGlzLmNwQ29sb3JNb2RlPSJjb2xvciIsdGhpcy5jcENteWtFbmFibGVkPSExLHRoaXMuY3BPdXRwdXRGb3JtYXQ9ImF1dG8iLHRoaXMuY3BBbHBoYUNoYW5uZWw9ImVuYWJsZWQiLHRoaXMuY3BEaXNhYmxlSW5wdXQ9ITEsdGhpcy5jcERpYWxvZ0Rpc3BsYXk9InBvcHVwIix0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZT0hMCx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGU9ITAsdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyPSExLHRoaXMuY3BQb3NpdGlvbj0iYXV0byIsdGhpcy5jcFBvc2l0aW9uT2Zmc2V0PSIwJSIsdGhpcy5jcFBvc2l0aW9uUmVsYXRpdmVUb0Fycm93PSExLHRoaXMuY3BPS0J1dHRvbj0hMSx0aGlzLmNwT0tCdXR0b25UZXh0PSJPSyIsdGhpcy5jcE9LQnV0dG9uQ2xhc3M9ImNwLW9rLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcENhbmNlbEJ1dHRvbj0hMSx0aGlzLmNwQ2FuY2VsQnV0dG9uVGV4dD0iQ2FuY2VsIix0aGlzLmNwQ2FuY2VsQnV0dG9uQ2xhc3M9ImNwLWNhbmNlbC1idXR0b24tY2xhc3MiLHRoaXMuY3BFeWVEcm9wcGVyPSExLHRoaXMuY3BQcmVzZXRMYWJlbD0iUHJlc2V0IGNvbG9ycyIsdGhpcy5jcFByZXNldENvbG9yc0NsYXNzPSJjcC1wcmVzZXQtY29sb3JzLWNsYXNzIix0aGlzLmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoPTYsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZT0iTm8gY29sb3JzIGFkZGVkIix0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M9InByZXNldC1lbXB0eS1tZXNzYWdlIix0aGlzLmNwQWRkQ29sb3JCdXR0b249ITEsdGhpcy5jcEFkZENvbG9yQnV0dG9uVGV4dD0iQWRkIGNvbG9yIix0aGlzLmNwQWRkQ29sb3JCdXR0b25DbGFzcz0iY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3M9ImNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3MiLHRoaXMuY3BJbnB1dENoYW5nZT1uZXcgRyghMCksdGhpcy5jcFRvZ2dsZUNoYW5nZT1uZXcgRyghMCksdGhpcy5jcFNsaWRlckNoYW5nZT1uZXcgRyghMCksdGhpcy5jcFNsaWRlckRyYWdFbmQ9bmV3IEcoITApLHRoaXMuY3BTbGlkZXJEcmFnU3RhcnQ9bmV3IEcoITApLHRoaXMuY29sb3JQaWNrZXJPcGVuPW5ldyBHKCEwKSx0aGlzLmNvbG9yUGlja2VyQ2xvc2U9bmV3IEcoITApLHRoaXMuY29sb3JQaWNrZXJDYW5jZWw9bmV3IEcoITApLHRoaXMuY29sb3JQaWNrZXJTZWxlY3Q9bmV3IEcoITApLHRoaXMuY29sb3JQaWNrZXJDaGFuZ2U9bmV3IEcoITEpLHRoaXMuY3BDbXlrQ29sb3JDaGFuZ2U9bmV3IEcoITApLHRoaXMuY3BQcmVzZXRDb2xvcnNDaGFuZ2U9bmV3IEcoITApfWhhbmRsZUNsaWNrKCl7dGhpcy5pbnB1dEZvY3VzKCl9aGFuZGxlRm9jdXMoKXt0aGlzLmlucHV0Rm9jdXMoKX1oYW5kbGVJbnB1dChlKXt0aGlzLmlucHV0Q2hhbmdlKGUpfW5nT25EZXN0cm95KCl7bnVsbCE9dGhpcy5jbXBSZWYmJih0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmJiZ0aGlzLmFwcFJlZi5kZXRhY2hWaWV3KHRoaXMuY21wUmVmLmhvc3RWaWV3KSx0aGlzLmNtcFJlZi5kZXN0cm95KCksdGhpcy5jbXBSZWY9bnVsbCx0aGlzLmRpYWxvZz1udWxsKX1uZ09uQ2hhbmdlcyhlKXtlLmNwVG9nZ2xlJiYhdGhpcy5jcERpc2FibGVkJiYoZS5jcFRvZ2dsZS5jdXJyZW50VmFsdWU/dGhpcy5vcGVuRGlhbG9nKCk6ZS5jcFRvZ2dsZS5jdXJyZW50VmFsdWV8fHRoaXMuY2xvc2VEaWFsb2coKSksZS5jb2xvclBpY2tlciYmKHRoaXMuZGlhbG9nJiYhdGhpcy5pZ25vcmVDaGFuZ2VzJiYoImlubGluZSI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5kaWFsb2cuc2V0SW5pdGlhbENvbG9yKGUuY29sb3JQaWNrZXIuY3VycmVudFZhbHVlKSx0aGlzLmRpYWxvZy5zZXRDb2xvckZyb21TdHJpbmcoZS5jb2xvclBpY2tlci5jdXJyZW50VmFsdWUsITEpLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lciYmImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbXBSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpKSx0aGlzLmlnbm9yZUNoYW5nZXM9ITEpLChlLmNwUHJlc2V0TGFiZWx8fGUuY3BQcmVzZXRDb2xvcnMpJiZ0aGlzLmRpYWxvZyYmdGhpcy5kaWFsb2cuc2V0UHJlc2V0Q29uZmlnKHRoaXMuY3BQcmVzZXRMYWJlbCx0aGlzLmNwUHJlc2V0Q29sb3JzKX1vcGVuRGlhbG9nKCl7aWYodGhpcy5kaWFsb2dDcmVhdGVkKXRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5vcGVuRGlhbG9nKHRoaXMuY29sb3JQaWNrZXIpO2Vsc2V7bGV0IGU9dGhpcy52Y1JlZjtpZih0aGlzLmRpYWxvZ0NyZWF0ZWQ9ITAsdGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMSx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXImJiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkpe2xldCBvPXRoaXMuaW5qZWN0b3IuZ2V0KHRoaXMuYXBwUmVmLmNvbXBvbmVudFR5cGVzWzBdLFhuLk5VTEwpO28hPT1Ybi5OVUxMP2U9by52Y1JlZnx8by52aWV3Q29udGFpbmVyUmVmfHx0aGlzLnZjUmVmOnRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWY9ITB9bGV0IGk9dGhpcy5jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZFplKTtpZih0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmKXRoaXMuY21wUmVmPWkuY3JlYXRlKHRoaXMuaW5qZWN0b3IpLHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jbXBSZWYuaG9zdFZpZXcucm9vdE5vZGVzWzBdKTtlbHNle2xldCByPVhuLmNyZWF0ZSh7cHJvdmlkZXJzOltdLHBhcmVudDplLmluamVjdG9yfSk7dGhpcy5jbXBSZWY9ZS5jcmVhdGVDb21wb25lbnQoaSwwLHIsW10pfXRoaXMuY21wUmVmLmluc3RhbmNlLnNldHVwRGlhbG9nKHRoaXMsdGhpcy5lbFJlZix0aGlzLmNvbG9yUGlja2VyLHRoaXMuY3BXaWR0aCx0aGlzLmNwSGVpZ2h0LHRoaXMuY3BEaWFsb2dEaXNwbGF5LHRoaXMuY3BGYWxsYmFja0NvbG9yLHRoaXMuY3BDb2xvck1vZGUsdGhpcy5jcENteWtFbmFibGVkLHRoaXMuY3BBbHBoYUNoYW5uZWwsdGhpcy5jcE91dHB1dEZvcm1hdCx0aGlzLmNwRGlzYWJsZUlucHV0LHRoaXMuY3BJZ25vcmVkRWxlbWVudHMsdGhpcy5jcFNhdmVDbGlja091dHNpZGUsdGhpcy5jcENsb3NlQ2xpY2tPdXRzaWRlLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lcix0aGlzLmNwUG9zaXRpb24sdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LHRoaXMuY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdyx0aGlzLmNwUHJlc2V0TGFiZWwsdGhpcy5jcFByZXNldENvbG9ycyx0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3MsdGhpcy5jcE1heFByZXNldENvbG9yc0xlbmd0aCx0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcyx0aGlzLmNwT0tCdXR0b24sdGhpcy5jcE9LQnV0dG9uQ2xhc3MsdGhpcy5jcE9LQnV0dG9uVGV4dCx0aGlzLmNwQ2FuY2VsQnV0dG9uLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcyx0aGlzLmNwQ2FuY2VsQnV0dG9uVGV4dCx0aGlzLmNwQWRkQ29sb3JCdXR0b24sdGhpcy5jcEFkZENvbG9yQnV0dG9uQ2xhc3MsdGhpcy5jcEFkZENvbG9yQnV0dG9uVGV4dCx0aGlzLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcyx0aGlzLmNwRXllRHJvcHBlcix0aGlzLmVsUmVmLHRoaXMuY3BFeHRyYVRlbXBsYXRlKSx0aGlzLmRpYWxvZz10aGlzLmNtcFJlZi5pbnN0YW5jZSx0aGlzLnZjUmVmIT09ZSYmdGhpcy5jbXBSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfX1jbG9zZURpYWxvZygpe3RoaXMuZGlhbG9nJiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuZGlhbG9nLmNsb3NlRGlhbG9nKCl9Y215a0NoYW5nZWQoZSl7dGhpcy5jcENteWtDb2xvckNoYW5nZS5lbWl0KGUpfXN0YXRlQ2hhbmdlZChlKXt0aGlzLmNwVG9nZ2xlQ2hhbmdlLmVtaXQoZSksZT90aGlzLmNvbG9yUGlja2VyT3Blbi5lbWl0KHRoaXMuY29sb3JQaWNrZXIpOnRoaXMuY29sb3JQaWNrZXJDbG9zZS5lbWl0KHRoaXMuY29sb3JQaWNrZXIpfWNvbG9yQ2hhbmdlZChlLGk9ITApe3RoaXMuaWdub3JlQ2hhbmdlcz1pLHRoaXMuY29sb3JQaWNrZXJDaGFuZ2UuZW1pdChlKX1jb2xvclNlbGVjdGVkKGUpe3RoaXMuY29sb3JQaWNrZXJTZWxlY3QuZW1pdChlKX1jb2xvckNhbmNlbGVkKCl7dGhpcy5jb2xvclBpY2tlckNhbmNlbC5lbWl0KCl9aW5wdXRGb2N1cygpe2xldCBlPXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxpPXRoaXMuY3BJZ25vcmVkRWxlbWVudHMuZmlsdGVyKHI9PnI9PT1lKTshdGhpcy5jcERpc2FibGVkJiYhaS5sZW5ndGgmJih0eXBlb2YgZG9jdW1lbnQ8InUiJiZlPT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD90aGlzLm9wZW5EaWFsb2coKTp0aGlzLmRpYWxvZyYmdGhpcy5kaWFsb2cuc2hvdz90aGlzLmNsb3NlRGlhbG9nKCk6dGhpcy5vcGVuRGlhbG9nKCkpfWlucHV0Q2hhbmdlKGUpe3RoaXMuZGlhbG9nP3RoaXMuZGlhbG9nLnNldENvbG9yRnJvbVN0cmluZyhlLnRhcmdldC52YWx1ZSwhMCk6KHRoaXMuY29sb3JQaWNrZXI9ZS50YXJnZXQudmFsdWUsdGhpcy5jb2xvclBpY2tlckNoYW5nZS5lbWl0KHRoaXMuY29sb3JQaWNrZXIpKX1pbnB1dENoYW5nZWQoZSl7dGhpcy5jcElucHV0Q2hhbmdlLmVtaXQoZSl9c2xpZGVyQ2hhbmdlZChlKXt0aGlzLmNwU2xpZGVyQ2hhbmdlLmVtaXQoZSl9c2xpZGVyRHJhZ0VuZChlKXt0aGlzLmNwU2xpZGVyRHJhZ0VuZC5lbWl0KGUpfXNsaWRlckRyYWdTdGFydChlKXt0aGlzLmNwU2xpZGVyRHJhZ1N0YXJ0LmVtaXQoZSl9cHJlc2V0Q29sb3JzQ2hhbmdlZChlKXt0aGlzLmNwUHJlc2V0Q29sb3JzQ2hhbmdlLmVtaXQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oWG4pLE0oZ3MpLE0oSXUpLE0oT2kpLE0oUmUpLE0ocUcpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY29sb3JQaWNrZXIiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5oYW5kbGVDbGljaygpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZUZvY3VzKCl9KSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUlucHV0KG8pfSl9LGlucHV0czp7Y29sb3JQaWNrZXI6ImNvbG9yUGlja2VyIixjcFdpZHRoOiJjcFdpZHRoIixjcEhlaWdodDoiY3BIZWlnaHQiLGNwVG9nZ2xlOiJjcFRvZ2dsZSIsY3BEaXNhYmxlZDoiY3BEaXNhYmxlZCIsY3BJZ25vcmVkRWxlbWVudHM6ImNwSWdub3JlZEVsZW1lbnRzIixjcEZhbGxiYWNrQ29sb3I6ImNwRmFsbGJhY2tDb2xvciIsY3BDb2xvck1vZGU6ImNwQ29sb3JNb2RlIixjcENteWtFbmFibGVkOiJjcENteWtFbmFibGVkIixjcE91dHB1dEZvcm1hdDoiY3BPdXRwdXRGb3JtYXQiLGNwQWxwaGFDaGFubmVsOiJjcEFscGhhQ2hhbm5lbCIsY3BEaXNhYmxlSW5wdXQ6ImNwRGlzYWJsZUlucHV0IixjcERpYWxvZ0Rpc3BsYXk6ImNwRGlhbG9nRGlzcGxheSIsY3BTYXZlQ2xpY2tPdXRzaWRlOiJjcFNhdmVDbGlja091dHNpZGUiLGNwQ2xvc2VDbGlja091dHNpZGU6ImNwQ2xvc2VDbGlja091dHNpZGUiLGNwVXNlUm9vdFZpZXdDb250YWluZXI6ImNwVXNlUm9vdFZpZXdDb250YWluZXIiLGNwUG9zaXRpb246ImNwUG9zaXRpb24iLGNwUG9zaXRpb25PZmZzZXQ6ImNwUG9zaXRpb25PZmZzZXQiLGNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c6ImNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3ciLGNwT0tCdXR0b246ImNwT0tCdXR0b24iLGNwT0tCdXR0b25UZXh0OiJjcE9LQnV0dG9uVGV4dCIsY3BPS0J1dHRvbkNsYXNzOiJjcE9LQnV0dG9uQ2xhc3MiLGNwQ2FuY2VsQnV0dG9uOiJjcENhbmNlbEJ1dHRvbiIsY3BDYW5jZWxCdXR0b25UZXh0OiJjcENhbmNlbEJ1dHRvblRleHQiLGNwQ2FuY2VsQnV0dG9uQ2xhc3M6ImNwQ2FuY2VsQnV0dG9uQ2xhc3MiLGNwRXllRHJvcHBlcjoiY3BFeWVEcm9wcGVyIixjcFByZXNldExhYmVsOiJjcFByZXNldExhYmVsIixjcFByZXNldENvbG9yczoiY3BQcmVzZXRDb2xvcnMiLGNwUHJlc2V0Q29sb3JzQ2xhc3M6ImNwUHJlc2V0Q29sb3JzQ2xhc3MiLGNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoOiJjcE1heFByZXNldENvbG9yc0xlbmd0aCIsY3BQcmVzZXRFbXB0eU1lc3NhZ2U6ImNwUHJlc2V0RW1wdHlNZXNzYWdlIixjcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzOiJjcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzIixjcEFkZENvbG9yQnV0dG9uOiJjcEFkZENvbG9yQnV0dG9uIixjcEFkZENvbG9yQnV0dG9uVGV4dDoiY3BBZGRDb2xvckJ1dHRvblRleHQiLGNwQWRkQ29sb3JCdXR0b25DbGFzczoiY3BBZGRDb2xvckJ1dHRvbkNsYXNzIixjcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3M6ImNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcyIsY3BFeHRyYVRlbXBsYXRlOiJjcEV4dHJhVGVtcGxhdGUifSxvdXRwdXRzOntjcElucHV0Q2hhbmdlOiJjcElucHV0Q2hhbmdlIixjcFRvZ2dsZUNoYW5nZToiY3BUb2dnbGVDaGFuZ2UiLGNwU2xpZGVyQ2hhbmdlOiJjcFNsaWRlckNoYW5nZSIsY3BTbGlkZXJEcmFnRW5kOiJjcFNsaWRlckRyYWdFbmQiLGNwU2xpZGVyRHJhZ1N0YXJ0OiJjcFNsaWRlckRyYWdTdGFydCIsY29sb3JQaWNrZXJPcGVuOiJjb2xvclBpY2tlck9wZW4iLGNvbG9yUGlja2VyQ2xvc2U6ImNvbG9yUGlja2VyQ2xvc2UiLGNvbG9yUGlja2VyQ2FuY2VsOiJjb2xvclBpY2tlckNhbmNlbCIsY29sb3JQaWNrZXJTZWxlY3Q6ImNvbG9yUGlja2VyU2VsZWN0Iixjb2xvclBpY2tlckNoYW5nZToiY29sb3JQaWNrZXJDaGFuZ2UiLGNwQ215a0NvbG9yQ2hhbmdlOiJjcENteWtDb2xvckNoYW5nZSIsY3BQcmVzZXRDb2xvcnNDaGFuZ2U6ImNwUHJlc2V0Q29sb3JzQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ3hDb2xvclBpY2tlciJdLGZlYXR1cmVzOltGdF19KSxufSkoKSxvaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbcUddLGltcG9ydHM6W01lXX0pLG59KSgpLGZaZT1bImNvbnRhaW5lciJdO2Z1bmN0aW9uIG1aZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsIm1hdC1zbGlkZXIiLDQpLFAoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLmhhbmRsZVNpbmdsZVNsaWRlckNoYW5nZShyLnZhbHVlKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1TKCk7eSgiZGlzYWJsZWQiLCFlLmVuYWJsZWQpKCJtaW4iLGUubWluKSgibWF4IixlLm1heCkoInN0ZXAiLDEpKCJ2YWx1ZSIsZS5sb3dlclZhbHVlKX19ZnVuY3Rpb24gZ1plKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwic3BhbiIsNSw2KSxPKDIsInNwYW4iLDcpKDMsInNwYW4iLDgpLF8oNCwic3BhbiIsOSksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKCk7cmV0dXJuIHNlKG8uaGFuZGxlTW91c2VEb3duKHIsby5Qb3NpdGlvbi5MRUZUKSl9KSx2KCksXyg1LCJzcGFuIiw5KSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoKTtyZXR1cm4gc2Uoby5oYW5kbGVNb3VzZURvd24ocixvLlBvc2l0aW9uLlJJR0hUKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTtDKDMpLFB0KCJsZWZ0IixlLmdldFRodW1iUG9zaXRpb24oZS5sb3dlclZhbHVlKSkoIndpZHRoIixlLmdldFRyYWNrV2lkdGgoKSksQygxKSxQdCgibGVmdCIsZS5nZXRUaHVtYlBvc2l0aW9uKGUubG93ZXJWYWx1ZSkpLGV0KCJhY3RpdmUiLGUuaXNUaHVtYkFjdGl2ZShlLlBvc2l0aW9uLkxFRlQpKSxDKDEpLFB0KCJsZWZ0IixlLmdldFRodW1iUG9zaXRpb24oZS51cHBlclZhbHVlKSksZXQoImFjdGl2ZSIsZS5pc1RodW1iQWN0aXZlKGUuUG9zaXRpb24uUklHSFQpKX19dmFyIG1jPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OT05FPTBdPSJOT05FIixuW24uTEVGVD0xXT0iTEVGVCIsbltuLlJJR0hUPTJdPSJSSUdIVCJ9KG1jfHwobWM9e30pKSxtYykpKCksc2hlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMudGlja0NvdW50PTIwLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnJldHVybkludGVnZXJzPSExLHRoaXMucmFuZ2VWYWx1ZXNDaGFuZ2VkPW5ldyBHLHRoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkPW5ldyBHLHRoaXMuUG9zaXRpb249bWMsdGhpcy5hY3RpdmVUaHVtYj1tYy5OT05FLHRoaXMub2Zmc2V0WEZyb21PcmlnaW5PZkFjdGl2ZVRodW1iPTAsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBrZX1nZXRUaHVtYlBvc2l0aW9uKGUpe2xldCBpPXRoaXMuZ2V0Q2xpcHBlZFZhbHVlKGUpLHI9dGhpcy5tYXgtdGhpcy5taW47cmV0dXJuIHI8PTA/IjUwJSI6KGktdGhpcy5taW4pL3IqMTAwKyIlIn1nZXRUcmFja1dpZHRoKCl7aWYobnVsbD09PXRoaXMudXBwZXJWYWx1ZSlyZXR1cm4iMCUiO2xldCBlPXRoaXMubWF4LXRoaXMubWluO3JldHVybiBlPD0wPyIwJSI6KHRoaXMuZ2V0Q2xpcHBlZFZhbHVlKHRoaXMudXBwZXJWYWx1ZSktdGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy5sb3dlclZhbHVlKSkvZSoxMDArIiUifWdldENsaXBwZWRWYWx1ZShlKXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZSx0aGlzLm1pbiksdGhpcy5tYXgpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ09uSW5pdCgpe19pKGRvY3VtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaGFuZGxlTW91c2VNb3ZlKGUpfSksX2koZG9jdW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaGFuZGxlTW91c2VPdXQoZSl9KX1oYW5kbGVNb3VzZURvd24oZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSx0aGlzLmFjdGl2ZVRodW1iPWksdGhpcy5vZmZzZXRYRnJvbU9yaWdpbk9mQWN0aXZlVGh1bWI9Ni1lLm9mZnNldFh9Y2FsY3VsYXRlVmFsdWVGcm9tTW91c2VFdmVudChlKXtsZXQgYSx7bGVmdDppLHJpZ2h0OnJ9PXRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1lLmNsaWVudFgtaSt0aGlzLm9mZnNldFhGcm9tT3JpZ2luT2ZBY3RpdmVUaHVtYjtpZihudWxsIT09dGhpcy50aWNrQ291bnQmJnRoaXMudGlja0NvdW50PjApe2xldCBjPShyLWkpL3RoaXMudGlja0NvdW50O2E9TWF0aC5yb3VuZChzL2MpKmMvKHItaSl9ZWxzZSBhPXMvKHItaSk7bGV0IGw9dGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy5taW4rKHRoaXMubWF4LXRoaXMubWluKSphKTtyZXR1cm4gdGhpcy5yZXR1cm5JbnRlZ2Vycz9NYXRoLnJvdW5kKGwpOk51bWJlcihsLnRvRml4ZWQoMTApKX1oYW5kbGVNb3VzZU1vdmUoZSl7aWYodGhpcy5hY3RpdmVUaHVtYj09PW1jLk5PTkV8fG51bGw9PT10aGlzLnVwcGVyVmFsdWUpcmV0dXJuO2xldCBpPXRoaXMuY2FsY3VsYXRlVmFsdWVGcm9tTW91c2VFdmVudChlKSxyPVt0aGlzLmxvd2VyVmFsdWUsdGhpcy51cHBlclZhbHVlXTt0aGlzLmFjdGl2ZVRodW1iPT09bWMuTEVGVD8oaT50aGlzLnVwcGVyVmFsdWUmJih0aGlzLmFjdGl2ZVRodW1iPW1jLlJJR0hUKSxyPVtpLHRoaXMudXBwZXJWYWx1ZV0pOihpPHRoaXMubG93ZXJWYWx1ZSYmKHRoaXMuYWN0aXZlVGh1bWI9bWMuTEVGVCkscj1bdGhpcy5sb3dlclZhbHVlLGldKSx0aGlzLm1heWJlTm90aWZ5TmV4dFJhbmdlVmFsdWVzKHIsIlNMSURFUiIpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9bWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMoZSxpKXtsZXRbcixvXT1lLnNvcnQoKHMsYSk9PnMtYSk7KHRoaXMubG93ZXJWYWx1ZSE9PXJ8fHRoaXMudXBwZXJWYWx1ZSE9PW8pJiZ0aGlzLnJhbmdlVmFsdWVzQ2hhbmdlZC5lbWl0KHtsb3dlclZhbHVlOnIsdXBwZXJWYWx1ZTpvLHNvdXJjZTppfSl9aGFuZGxlTW91c2VPdXQoZSl7dGhpcy5hY3RpdmVUaHVtYiE9PW1jLk5PTkUmJih0aGlzLmFjdGl2ZVRodW1iPW1jLk5PTkUsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9aGFuZGxlU2luZ2xlU2xpZGVyQ2hhbmdlKGUpe3RoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkLmVtaXQoe3ZhbHVlOmUsc291cmNlOiJTTElERVIifSl9aGFuZGxlSW5wdXRDaGFuZ2UoZSxpKXtsZXQgcj1lLnRhcmdldCxvPXRoaXMuZ2V0Q2xpcHBlZFZhbHVlKE51bWJlcihyLnZhbHVlKSk7aXNOYU4obyl8fChpPT09bWMuTEVGVD9udWxsPT09dGhpcy51cHBlclZhbHVlP3RoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkLmVtaXQoe3ZhbHVlOm8sc291cmNlOiJURVhUIn0pOnRoaXMubWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMoW28sdGhpcy51cHBlclZhbHVlXSwiVEVYVCIpOiIiPT09ci52YWx1ZT90aGlzLnNpbmdsZVZhbHVlQ2hhbmdlZC5lbWl0KHt2YWx1ZTp0aGlzLmxvd2VyVmFsdWUsc291cmNlOiJURVhUX0RFTEVURUQifSk6dGhpcy5tYXliZU5vdGlmeU5leHRSYW5nZVZhbHVlcyhbdGhpcy5sb3dlclZhbHVlLG9dLCJURVhUIikpfWlzVGh1bWJBY3RpdmUoZSl7cmV0dXJuIHRoaXMuYWN0aXZlVGh1bWI9PT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKG5uKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItcmFuZ2UtaW5wdXQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChmWmUsNSxSZSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5jb250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e21pbjoibWluIixtYXg6Im1heCIsbG93ZXJWYWx1ZToibG93ZXJWYWx1ZSIsdXBwZXJWYWx1ZToidXBwZXJWYWx1ZSIsdGlja0NvdW50OiJ0aWNrQ291bnQiLGVuYWJsZWQ6ImVuYWJsZWQiLHJldHVybkludGVnZXJzOiJyZXR1cm5JbnRlZ2VycyJ9LG91dHB1dHM6e3JhbmdlVmFsdWVzQ2hhbmdlZDoicmFuZ2VWYWx1ZXNDaGFuZ2VkIixzaW5nbGVWYWx1ZUNoYW5nZWQ6InNpbmdsZVZhbHVlQ2hhbmdlZCJ9LGRlY2xzOjUsdmFyczo2LGNvbnN0czpbWyJ0eXBlIiwibnVtYmVyIiwxLCJsb3dlci1pbnB1dCIsMywiZGlzYWJsZWQiLCJ2YWx1ZSIsImNoYW5nZSJdLFsidHlwZSIsIm51bWJlciIsMSwidXBwZXItaW5wdXQiLDMsImRpc2FibGVkIiwidmFsdWUiLCJjaGFuZ2UiXSxbImNsYXNzIiwic2luZ2xlLXNsaWRlciIsImNvbG9yIiwicHJpbWFyeSIsMywiZGlzYWJsZWQiLCJtaW4iLCJtYXgiLCJzdGVwIiwidmFsdWUiLCJpbnB1dCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJyYW5nZSIsIiJdLFsiY29sb3IiLCJwcmltYXJ5IiwxLCJzaW5nbGUtc2xpZGVyIiwzLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ2YWx1ZSIsImlucHV0Il0sWzEsImNvbnRhaW5lciJdLFsiY29udGFpbmVyIiwiIl0sWzEsInNsaWRlci10cmFjayJdLFsxLCJzbGlkZXItdHJhY2stZmlsbCJdLFsxLCJ0aHVtYiIsMywibW91c2Vkb3duIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJpbnB1dCIsMCksUCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVJbnB1dENoYW5nZShvLGkuUG9zaXRpb24uTEVGVCl9KSx2KCksXygxLCJpbnB1dCIsMSksUCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVJbnB1dENoYW5nZShvLGkuUG9zaXRpb24uUklHSFQpfSksdigpLEUoMixtWmUsMSw1LCJtYXQtc2xpZGVyIiwyKSxFKDMsZ1plLDYsMTIsIm5nLXRlbXBsYXRlIixudWxsLDMscXQpKSwyJmUpe2xldCByPSRlKDQpO3koImRpc2FibGVkIiwhaS5lbmFibGVkKSgidmFsdWUiLGkubG93ZXJWYWx1ZSksQygxKSx5KCJkaXNhYmxlZCIsIWkuZW5hYmxlZCkoInZhbHVlIixudWxsIT09aS51cHBlclZhbHVlP2kudXBwZXJWYWx1ZToiIiksQygxKSx5KCJuZ0lmIixudWxsPT09aS51cHBlclZhbHVlKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltCZSx1cF0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZ3JpZDtncmlkLWdhcDoxMHB4O2dyaWQtdGVtcGxhdGUtYXJlYXM6Imxvd2VyLWlucHV0IHVwcGVyLWlucHV0IiAic2xpZGVyIHNsaWRlciI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Zm9udC1zaXplOjA7bWluLXdpZHRoOjEwMHB4O3BhZGRpbmc6NnB4fWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlfS5sb3dlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmxvd2VyLWlucHV0fS51cHBlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnVwcGVyLWlucHV0O2p1c3RpZnktc2VsZjpmbGV4LWVuZH0uc2luZ2xlLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNsaWRlcjtwYWRkaW5nOjBweH0uc2luZ2xlLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtc2xpZGVyLXdyYXBwZXJ7dG9wOjVweDtsZWZ0OjBweDtyaWdodDowcHh9ICAuc2luZ2xlLXNsaWRlci5tYXQtc2xpZGVyLWhvcml6b250YWx7aGVpZ2h0OjEycHh9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNsaWRlcjthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjYpO2hlaWdodDoycHg7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4zKX0uc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoycHh9LnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2FkaG93OjAgMCAwIDFweCByZ2JhKDAsMCwwLC4yNik7Ym9yZGVyLXJhZGl1czoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMnB4O21hcmdpbi1sZWZ0Oi02cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2U7d2lkdGg6MTJweDt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2FkaG93OjAgMCAwIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4zKX0udGh1bWJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpncmFifS50aHVtYltfbmdjb250ZW50LSVDT01QJV06YWN0aXZle2N1cnNvcjpncmFiYmluZ30udGh1bWIuYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06c2NhbGUoMS4yKX0uc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVdLCAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2Y1N2MwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2VmNmMwMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHlaZT1bInJlZ2V4U3RyaW5nSW5wdXQiXTtmdW5jdGlvbiBiWmUobix0KXtpZigxJm4mJihzbigwKSxfKDEsImxpIiwyMiksQSgyKSx2KCksYW4oKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtDKDEpLHkoInRpdGxlIixlLm5hbWUpLEMoMSkseXQoZS5uYW1lKX19ZnVuY3Rpb24geFplKG4sdCl7aWYoMSZuJiYoXygwLCJsaSIsMjMpKDEsImVtIiksQSgyKSxCKDMsIm51bWJlciIpLHYoKSgpKSwyJm4pe2xldCBlPVMoKS4kaW1wbGljaXQ7QygyKSxqZSgiYW5kICIsVSgzLDEsZS5ydW5zLmxlbmd0aC01KSwiIG1vcmUiKX19ZnVuY3Rpb24gQ1plKG4sdCl7MSZuJiYoXygwLCJsaSIsMjQpKDEsImVtIiksQSgyLCJObyBydW5zIGFyZSBpbiB0aGUgZ3JvdXAiKSx2KCkoKSl9dmFyIE1aZT1mdW5jdGlvbihuKXtyZXR1cm57Ym9yZGVyQ29sb3I6bn19LHdaZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fTtmdW5jdGlvbiBTWmUobix0KXtpZigxJm4mJihfKDAsInVsIiwxNikoMSwibGkiKSgyLCJsYWJlbCIpLE8oMywic3BhbiIsMTcpLF8oNCwiY29kZSIsMTgpLEEoNSksdigpKCksXyg2LCJ1bCIpLEUoNyxiWmUsMywyLCJuZy1jb250YWluZXIiLDE5KSxCKDgsInNsaWNlIiksRSg5LHhaZSw0LDMsImxpIiwyMCksRSgxMCxDWmUsMywwLCJsaSIsMjEpLHYoKSgpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7eSgibmdTdHlsZSIsT24oMTEsTVplLGUuY29sb3IpKSxDKDMpLHkoIm5nU3R5bGUiLE9uKDEzLHdaZSxlLmNvbG9yKSksQygxKSx5KCJ0aXRsZSIsZS5ncm91cElkKSxDKDEpLHl0KGUuZ3JvdXBJZCksQygyKSx5KCJuZ0Zvck9mIixKMyg4LDcsZS5ydW5zLDAsNSkpLEMoMikseSgibmdJZiIsZS5ydW5zLmxlbmd0aD41KSxDKDEpLHkoIm5nSWYiLDA9PT1lLnJ1bnMubGVuZ3RoKX19ZnVuY3Rpb24gRVplKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDE0KSxFKDEsU1plLDExLDE1LCJ1bCIsMTUpLHYoKSksMiZuKXtsZXQgZT1TKDIpO0MoMSkseSgibmdGb3JPZiIsZS5jb2xvclJ1blBhaXJMaXN0KX19ZnVuY3Rpb24gVFplKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDI1KSxBKDEsIiBUaGVyZSBhcmUgbm8gcnVucyBtYXRjaGluZyB0aGUgcmVnZXgsICIpLF8oMiwiY29kZSIpLEEoMyksdigpLEEoNCwiLiBQbGVhc2UgY2hlY2sgaWYgeW91ciByZWdleCBzdHJpbmcgaXMgY29ycmVjdC4gIiksdigpKSwyJm4pe2xldCBlPVMoMik7QygzKSxqZSgiLyIsZS5yZWdleFN0cmluZywiLyIpfX1mdW5jdGlvbiBEWmUobix0KXtpZigxJm4mJihfKDAsImRpdiIsMTApKDEsImg0IiksQSgyLCJDb2xvciBncm91cCBwcmV2aWV3IiksdigpLF8oMywiZGl2IiwxMSksRSg0LEVaZSwyLDEsImRpdiIsMTIpLEUoNSxUWmUsNSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMyxxdCksdigpKCkpLDImbil7bGV0IGU9JGUoNiksaT1TKCk7Qyg0KSx5KCJuZ0lmIixpLmNvbG9yUnVuUGFpckxpc3QubGVuZ3RoKSgibmdJZkVsc2UiLGUpfX12YXIgYWhlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmRpYWxvZ1JlZj1lLHRoaXMuaG9zdEVsUmVmPWksdGhpcy5vblNhdmU9bmV3IEcsdGhpcy5yZWdleElucHV0T25DaGFuZ2U9bmV3IEcsdGhpcy50aW1lT3V0SWQ9MH1yZXNldEZvY3VzKCl7dGhpcy5ob3N0RWxSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8dGhpcy5yZWdleFN0cmluZ0lucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1vbkVudGVyKGUpe3RoaXMub25TYXZlQ2xpY2soZSksdGhpcy5kaWFsb2dSZWYuY2xvc2UoKX1vblNhdmVDbGljayhlKXt0aGlzLm9uU2F2ZS5lbWl0KGUpfWZpbGxFeGFtcGxlKGUpe3RoaXMucmVnZXhTdHJpbmc9ZSx0aGlzLnJlZ2V4SW5wdXRDaGFuZ2UoZSl9cmVnZXhJbnB1dENoYW5nZShlKXt0aGlzLnJlZ2V4SW5wdXRPbkNoYW5nZS5lbWl0KGUpfWhhbmRsZUZvY3VzT3V0KCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZU91dElkKSx0aGlzLnRpbWVPdXRJZD1zZXRUaW1lb3V0KHRoaXMucmVzZXRGb2N1cy5iaW5kKHRoaXMpLDApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKHR1KSxNKFJlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmb3QoeVplLDcpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkucmVnZXhTdHJpbmdJbnB1dD1yLmZpcnN0KX19LGlucHV0czp7cmVnZXhTdHJpbmc6InJlZ2V4U3RyaW5nIixjb2xvclJ1blBhaXJMaXN0OiJjb2xvclJ1blBhaXJMaXN0In0sb3V0cHV0czp7b25TYXZlOiJvblNhdmUiLHJlZ2V4SW5wdXRPbkNoYW5nZToicmVnZXhJbnB1dE9uQ2hhbmdlIn0sZGVjbHM6MzAsdmFyczoyLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6Q29sb3IgUnVucyBieSBSZWdleCBRdWVyeeKQnzE1ZWQ5ZjZmZDJkNDkwNmE0ODAzZmMxMjU1ZGUzYzVkYjJjNTY1MzDikJ85MDg4OTg1MTEzOTYwMzEyODA4OkNvbG9yIFJ1bnMgYnkgUmVnZXggUXVlcnlgLFtbMSwicmVnZXgtZWRpdC1kaWFsb2ciLDMsImZvY3Vzb3V0Il0sWyJtYXQtZGlhbG9nLXRpdGxlIiwiIl0sWyJtYXRJbnB1dCIsIiIsImFyaWEtbGFiZWwiLHQsImNka0ZvY3VzSW5pdGlhbCIsIiIsMywidmFsdWUiLCJrZXlkb3duLmVudGVyIiwiaW5wdXQiXSxbInJlZ2V4U3RyaW5nSW5wdXQiLCIiXSxbMSwiZXhhbXBsZS1kZXRhaWxzIl0sWzMsImNsaWNrIl0sWyJjbGFzcyIsImdyb3VwLWNvbnRhaW5lciIsNCwibmdJZiJdLFsibWF0LWRpYWxvZy1hY3Rpb25zIiwiIiwiYWxpZ24iLCJlbmQiXSxbIm1hdC1idXR0b24iLCIiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIl0sWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiIsImNvbG9yIiwicHJpbWFyeSIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiLDMsImNsaWNrIl0sWzEsImdyb3VwLWNvbnRhaW5lciJdLFsxLCJncm91cGluZy1wcmV2aWV3Il0sWyJjbGFzcyIsIm1hdGNoLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJlbXB0eSIsIiJdLFsxLCJtYXRjaC1jb250YWluZXIiXSxbImNsYXNzIiwiZ3JvdXAiLDMsIm5nU3R5bGUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJncm91cCIsMywibmdTdHlsZSJdLFsxLCJjb2xvci1zd2F0Y2giLDMsIm5nU3R5bGUiXSxbMSwiZ3JvdXAtaWQiLDMsInRpdGxlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJtb3JlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLW1hdGNoIiw0LCJuZ0lmIl0sWzMsInRpdGxlIl0sWzEsIm1vcmUiXSxbMSwibm8tbWF0Y2giXSxbMSwid2FybmluZyJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUpe2xldCByPVBlKCk7XygwLCJkaXYiLDApLFAoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZUZvY3VzT3V0KCl9KSxfKDEsImgxIiwxKSxBKDIsIkNvbG9yIHJ1bnMgYnkgcmVnZXgiKSx2KCksXygzLCJtYXQtZGlhbG9nLWNvbnRlbnQiKSg0LCJwIiksQSg1LCJFbnRlciBhIHJlZ2V4IHdpdGggY2FwdHVyaW5nIGdyb3VwcyB0byBtYXRjaCBhZ2FpbnN0IHJ1biBuYW1lczoiKSx2KCksXyg2LCJtYXQtZm9ybS1maWVsZCIpKDcsImlucHV0IiwyLDMpLFAoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKHMpe3JldHVybiBpLm9uRW50ZXIocy50YXJnZXQudmFsdWUpfSkoImlucHV0IixmdW5jdGlvbihzKXtyZXR1cm4gaS5yZWdleElucHV0Q2hhbmdlKHMudGFyZ2V0LnZhbHVlKX0pLHYoKSgpKCksXyg5LCJkaXYiLDQpKDEwLCJwIiksQSgxMSwnIEVhY2ggbWF0Y2hpbmcgcnVuIHdpbGwgYmUgYXNzaWduZWQgYSBjb2xvciBiYXNlZCBvbiB0aGUgImtleSIgZm9ybWVkIGJ5IGl0cyBtYXRjaGVzIHRvIHRoZSBjYXB0dXJpbmcgZ3JvdXBzLiAnKSxPKDEyLCJiciIpLF8oMTMsImJ1dHRvbiIsNSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZmlsbEV4YW1wbGUoIih0cmFpbnxldmFsKSIpfSksQSgxNCwiIFRyeSAiKSxfKDE1LCJjb2RlIiksQSgxNiwiKHRyYWlufGV2YWwpIiksdigpKCksQSgxNywiIHRvIGFzc2lnbiBhbGwgcnVucyBjb250YWluaW5nICIpLF8oMTgsImNvZGUiKSxBKDE5LCJ0cmFpbiIpLHYoKSxBKDIwLCIgdG8gb25lIGNvbG9yIGFuZCBhbGwgcnVucyBjb250YWluaW5nICIpLF8oMjEsImNvZGUiKSxBKDIyLCJldmFsIiksdigpLEEoMjMsIiB0byBhbm90aGVyIGNvbG9yLiAiKSx2KCkoKSxFKDI0LERaZSw3LDIsImRpdiIsNiksXygyNSwiZGl2Iiw3KSgyNiwiYnV0dG9uIiw4KSxBKDI3LCJDYW5jZWwiKSx2KCksXygyOCwiYnV0dG9uIiw5KSxQKCJjbGljayIsZnVuY3Rpb24oKXtvZShyKTtsZXQgcz0kZSg4KTtyZXR1cm4gc2UoaS5vblNhdmVDbGljayhzLnZhbHVlKSl9KSxBKDI5LCIgU2F2ZSAiKSx2KCkoKSgpfTImZSYmKEMoNyksWmkoInZhbHVlIixpLnJlZ2V4U3RyaW5nKSxDKDE3KSx5KCJuZ0lmIixpLnJlZ2V4U3RyaW5nKSl9LGRlcGVuZGVuY2llczpbZG4sQmUsenUscGQsX24sVDIsRnRlLEQyLEEyLFVoLG5aLFFsXSxzdHlsZXM6WyIuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO3BhZGRpbmc6MDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2NvbG9yOiMxOTc2ZDJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzQyYTVmNX0uZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZHtjb2xvcjojN2IxZmEyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTp2aXNpdGVkLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZHtjb2xvcjojYmE2OGM4fS5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxMHB4IDB9Lmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbToxMHB4fS5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOi45ZW19Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7bWF4LWhlaWdodDo1MHZoO292ZXJmbG93LXk6YXV0bztwYWRkaW5nOjIwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwaW5nLXByZXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBpbmctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fS5tYXRjaC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7ZGlzcGxheTpncmlkO2ZsZXgtd3JhcDp3cmFwO2dhcDoxMHB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwgbWlubWF4KDUwJSwgMWZyKSl9LmNvbG9yLXN3YXRjaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo1MCU7Ym94LXNoYWRvdzowIDAgMnB4ICMwMDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjE1cHg7d2lkdGg6MTVweH11bFtfbmdjb250ZW50LSVDT01QJV17bGlzdC1zdHlsZS10eXBlOm5vbmU7cGFkZGluZzowfW1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6M3B4O21hcmdpbjowO3BhZGRpbmc6MTBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtnYXA6MTBweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWF4LWNvbnRlbnQgYXV0bztwYWRkaW5nOjVweCAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVdICAgLmdyb3VwLWlkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6Ljk1ZW07b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICB1bFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW19Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTttYXJnaW4tdG9wOjVweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm1vcmVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm1vcmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tbWF0Y2hbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm5vLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGxoZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLnN0b3JlPWUsdGhpcy5kaWFsb2dSZWY9aSx0aGlzLnRlbnRhdGl2ZVJlZ2V4U3RyaW5nJD1uZXcga2UsdGhpcy5ncm91cEJ5UmVnZXhTdHJpbmckPVFhKCgpPT5KdCh0aGlzLnN0b3JlLnNlbGVjdChZSSkucGlwZShRdCgxKSksdGhpcy50ZW50YXRpdmVSZWdleFN0cmluZyQpKS5waXBlKHpuKCIiKSksdGhpcy5jb2xvclJ1blBhaXJMaXN0JD1RYSgoKT0+dGhpcy5ncm91cEJ5UmVnZXhTdHJpbmckLnBpcGUoSHIoNTAwKSxZZShvPT57dHJ5e2xldCBzPW5ldyBSZWdFeHAobyk7cmV0dXJuIEJvb2xlYW4ocyl9Y2F0Y2h7cmV0dXJuITF9fSksZnIodGhpcy5hbGxSdW5zJCx0aGlzLnJ1bklkVG9FaWQkLHRoaXMuc3RvcmUuc2VsZWN0KE5hLmdldENvbG9yUGFsZXR0ZSksdGhpcy5zdG9yZS5zZWxlY3QoUXUpKSxMKChbbyxzLGEsbCxjXSk9PntsZXQgZD1HTSh7a2V5OnNyLlJFR0VYLHJlZ2V4U3RyaW5nOm99LHMsYSkscD1uZXcgTWFwLGg9W107Zm9yKGxldFtmLG1db2YgT2JqZWN0LmVudHJpZXMoZC5tYXRjaGVzKSl7bGV0IHg9cC5nZXQoZik7aWYoIXgpe2xldCBnPWwuY29sb3JzW3Auc2l6ZSVsLmNvbG9ycy5sZW5ndGhdO3g9Yz9nLmRhcmtIZXg6Zy5saWdodEhleCxwLnNldChmLHgpfWgucHVzaCh7Z3JvdXBJZDpmLGNvbG9yOngscnVuczptfSl9cmV0dXJuIGh9KSkpLnBpcGUoem4oW10pKSx0aGlzLmV4cGVyaW1lbnRJZHM9ci5leHBlcmltZW50SWRzLHRoaXMucnVuSWRUb0VpZCQ9THQodGhpcy5leHBlcmltZW50SWRzLm1hcChvPT50aGlzLnN0b3JlLnNlbGVjdChTZWUse2V4cGVyaW1lbnRJZDpvfSkucGlwZShMKHM9Pih7ZXhwZXJpbWVudElkOm8scnVuSWRzOnN9KSkpKSkucGlwZShMKG89PntsZXQgcz17fTtmb3IobGV0e3J1bklkczphLGV4cGVyaW1lbnRJZDpsfW9mIG8pZm9yKGxldCBjIG9mIGEpc1tjXT1sO3JldHVybiBzfSkpLHRoaXMuYWxsUnVucyQ9THQodGhpcy5leHBlcmltZW50SWRzLm1hcChvPT50aGlzLnN0b3JlLnNlbGVjdChyZCx7ZXhwZXJpbWVudElkOm99KSkpLnBpcGUoTChvPT5vLmZsYXQoKSkpfW9uUmVnZXhJbnB1dE9uQ2hhbmdlKGUpe3RoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckLm5leHQoZSl9b25TYXZlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goYXYoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGdyb3VwQnk6e2tleTpzci5SRUdFWCxyZWdleFN0cmluZzplfX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSksTSh0dSksTShjdykpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlZ2V4LWVkaXQtZGlhbG9nIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInJlZ2V4U3RyaW5nIiwiY29sb3JSdW5QYWlyTGlzdCIsIm9uU2F2ZSIsInJlZ2V4SW5wdXRPbkNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwicmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50IiwwKSxQKCJvblNhdmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2F2ZShvKX0pKCJyZWdleElucHV0T25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhJbnB1dE9uQ2hhbmdlKG8pfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSx2KCkpLDImZSYmeSgicmVnZXhTdHJpbmciLFUoMSwyLGkuZ3JvdXBCeVJlZ2V4U3RyaW5nJCkpKCJjb2xvclJ1blBhaXJMaXN0IixVKDIsNCxpLmNvbG9yUnVuUGFpckxpc3QkKSl9LGRlcGVuZGVuY2llczpbYWhlLEdlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdLCByZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9Il19KSxufSkoKTtmdW5jdGlvbiBQWmUobix0KXsxJm4mJk8oMCwibWF0LWljb24iLDE0KX1mdW5jdGlvbiBSWmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJidXR0b24iLDEzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtvZShlKTtsZXQgcj1TKCk7cmV0dXJuIHNlKHIub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTpyLkdyb3VwQnlLZXkuRVhQRVJJTUVOVH0pKX0pLF8oMSwic3BhbiIpLEUoMixQWmUsMSwwLCJtYXQtaWNvbiIsNyksdigpLF8oMywibGFiZWwiKSxBKDQsIkV4cGVyaW1lbnQiKSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTt6ZSgiYXJpYS1jaGVja2VkIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCksQygyKSx5KCJuZ0lmIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCl9fWZ1bmN0aW9uIE9aZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIGtaZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIEZaZShuLHQpe2lmKDEmbiYmKF8oMCwibGFiZWwiKSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSx5dChlLnJlZ2V4U3RyaW5nKX19ZnVuY3Rpb24gTlplKG4sdCl7MSZuJiYoXygwLCJsYWJlbCIsMTUpLEEoMSwiKG5vbmUgc2V0KSIpLHYoKSl9dmFyIGNoZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlhbG9nPWUsdGhpcy5Hcm91cEJ5S2V5PXNyLHRoaXMub25Hcm91cEJ5Q2hhbmdlPW5ldyBHfW9uUmVnZXhTdHJpbmdFZGl0KCl7dGhpcy5kaWFsb2cub3BlbihsaGUse21heEhlaWdodDoiOTV2aCIsbWF4V2lkdGg6IjgwdnciLGRhdGE6e2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfX0pfW9uR3JvdXBCeVJlZ2V4Q2xpY2soKXt0aGlzLnJlZ2V4U3RyaW5nP3RoaXMub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTpzci5SRUdFWCxyZWdleFN0cmluZzp0aGlzLnJlZ2V4U3RyaW5nfSk6dGhpcy5vblJlZ2V4U3RyaW5nRWRpdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKHZsKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1ncm91cC1tZW51LWJ1dHRvbi1jb21wb25lbnQiXV0saW5wdXRzOntzaG93RXhwZXJpbWVudHNHcm91cEJ5OiJzaG93RXhwZXJpbWVudHNHcm91cEJ5IixleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLHNlbGVjdGVkR3JvdXBCeToic2VsZWN0ZWRHcm91cEJ5In0sb3V0cHV0czp7b25Hcm91cEJ5Q2hhbmdlOiJvbkdyb3VwQnlDaGFuZ2UifSxkZWNsczoyMix2YXJzOjgsY29uc3RzOltbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQ29sb3IgcnVucyBieS4uLiIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJwYWxldHRlXzI0cHgiXSxbMSwicnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5Il0sWyJncm91cEJ5TWVudSIsIm1hdE1lbnUiXSxbMSwibGFiZWwiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJleHBlcmltZW50IiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbXJhZGlvIiwiZGF0YS12YWx1ZSIsInJ1biIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJkb25lXzI0cHgiLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJyZWdleCIsMywiY2xpY2siXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW0iLCJkYXRhLXZhbHVlIiwicmVnZXgtZWRpdCIsMSwiZGlzcGxheS1yZWdleC1zdHJpbmciLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWzQsIm5nSWYiXSxbImNsYXNzIiwibm9uZS1zZXQtc3RyaW5nIiw0LCJuZ0lmIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwiZXhwZXJpbWVudCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJkb25lXzI0cHgiXSxbMSwibm9uZS1zZXQtc3RyaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJidXR0b24iLDApLE8oMSwibWF0LWljb24iLDEpLHYoKSxfKDIsIm1hdC1tZW51IiwyLDMpKDQsImRpdiIsNCksQSg1LCJDb2xvciBydW5zIGJ5IiksdigpLEUoNixSWmUsNSwyLCJidXR0b24iLDUpLF8oNywiYnV0dG9uIiw2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkdyb3VwQnlDaGFuZ2UuZW1pdCh7a2V5OmkuR3JvdXBCeUtleS5SVU59KX0pLF8oOCwic3BhbiIpLEUoOSxPWmUsMSwwLCJtYXQtaWNvbiIsNyksdigpLF8oMTAsImxhYmVsIiksQSgxMSwiUnVuIiksdigpKCksXygxMiwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkdyb3VwQnlSZWdleENsaWNrKCl9KSxfKDEzLCJzcGFuIiksRSgxNCxrWmUsMSwwLCJtYXQtaWNvbiIsNyksdigpLF8oMTUsImxhYmVsIiksQSgxNiwiUmVnZXgiKSx2KCkoKSxfKDE3LCJidXR0b24iLDkpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVnZXhTdHJpbmdFZGl0KCl9KSxfKDE4LCJzcGFuIiksTygxOSwibWF0LWljb24iLDEwKSx2KCksRSgyMCxGWmUsMiwxLCJsYWJlbCIsMTEpLEUoMjEsTlplLDIsMCwibGFiZWwiLDEyKSx2KCkoKSksMiZlJiYoeSgibWF0TWVudVRyaWdnZXJGb3IiLCRlKDMpKSxDKDYpLHkoIm5nSWYiLGkuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSksQygxKSx6ZSgiYXJpYS1jaGVja2VkIixpLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1pLkdyb3VwQnlLZXkuUlVOKSxDKDIpLHkoIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SVU4pLEMoMyksemUoImFyaWEtY2hlY2tlZCIsaS5zZWxlY3RlZEdyb3VwQnkua2V5PT09aS5Hcm91cEJ5S2V5LlJFR0VYKSxDKDIpLHkoIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SRUdFWCksQyg2KSx5KCJuZ0lmIixpLnJlZ2V4U3RyaW5nKSxDKDEpLHkoIm5nSWYiLCFpLnJlZ2V4U3RyaW5nKSl9LGRlcGVuZGVuY2llczpbQmUsX24sR3QsaGQsbnUsZmRdLHN0eWxlczpbIi5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnl7Zm9udC1zaXplOjE2cHh9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5sYWJlbHtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZTouOWVtO21hcmdpbjoxMHB4IDA7cGFkZGluZzowIDE2cHg7cG9pbnRlci1ldmVudHM6bm9uZX0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgYnV0dG9ue2Rpc3BsYXk6Z3JpZDtnYXA6MnB4IDEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjIwcHggYXV0b30gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgbWF0LWljb257aGVpZ2h0OjIwcHg7d2lkdGg6MjBweH0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5ne3BhZGRpbmctbGVmdDo0MHB4fSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZ3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgICAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZywgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZyAubm9uZS1zZXQtc3RyaW5ne2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdWhlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSQ9dGhpcy5zdG9yZS5zZWxlY3QoZSQpLnBpcGUoTChpPT5pLmhhcyhoaS5DT01QQVJFX0VYUEVSSU1FTlQpKSksdGhpcy5zZWxlY3RlZEdyb3VwQnkkPXRoaXMuc3RvcmUuc2VsZWN0KEVlZSksdGhpcy5ncm91cEJ5UmVnZXhTdHJpbmckPXRoaXMuc3RvcmUuc2VsZWN0KFlJKX1vbkdyb3VwQnlDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChhdih7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHMsZ3JvdXBCeTplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1ncm91cC1tZW51LWJ1dHRvbiJdXSxpbnB1dHM6e2V4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMifSxkZWNsczo0LHZhcnM6MTAsY29uc3RzOltbMywicmVnZXhTdHJpbmciLCJzZWxlY3RlZEdyb3VwQnkiLCJzaG93RXhwZXJpbWVudHNHcm91cEJ5IiwiZXhwZXJpbWVudElkcyIsIm9uR3JvdXBCeUNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwicnVucy1ncm91cC1tZW51LWJ1dHRvbi1jb21wb25lbnQiLDApLFAoIm9uR3JvdXBCeUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Hcm91cEJ5Q2hhbmdlKG8pfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksdigpKSwyJmUmJnkoInJlZ2V4U3RyaW5nIixVKDEsNCxpLmdyb3VwQnlSZWdleFN0cmluZyQpKSgic2VsZWN0ZWRHcm91cEJ5IixVKDIsNixpLnNlbGVjdGVkR3JvdXBCeSQpKSgic2hvd0V4cGVyaW1lbnRzR3JvdXBCeSIsVSgzLDgsaS5zaG93RXhwZXJpbWVudHNHcm91cEJ5JCkpKCJleHBlcmltZW50SWRzIixpLmV4cGVyaW1lbnRJZHMpfSxkZXBlbmRlbmNpZXM6W2NoZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVlplPVsiZmlsdGVyIl07ZnVuY3Rpb24gSFplKG4sdCl7MSZuJiZOaSgwKX1mdW5jdGlvbiBVWmUobix0KXsxJm4mJk5pKDApfXZhciB6WmU9ZnVuY3Rpb24obil7cmV0dXJue2l0ZW06bn19O2Z1bmN0aW9uIGpaZShuLHQpe2lmKDEmbiYmKHNuKDApLEUoMSxVWmUsMSwwLCJuZy1jb250YWluZXIiLDEyKSxhbigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O1MoKTtsZXQgaT0kZSgxNCk7QygxKSx5KCJuZ1RlbXBsYXRlT3V0bGV0IixpKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLE9uKDIselplLGUpKX19ZnVuY3Rpb24gR1plKG4sdCl7MSZuJiYoXygwLCJkaXYiLDEzKSxPKDEsIm1hdC1zcGlubmVyIiwxNCksdigpKX1mdW5jdGlvbiBXWmUobix0KXsxJm4mJihfKDAsImRpdiIsMTUpLEEoMSwiTm8gUnVucyIpLHYoKSl9ZnVuY3Rpb24gcVplKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDE1KSgxLCJzcGFuIiksQSgyLCdObyBydW5zIG1hdGNoICInKSxfKDMsImNvZGUiKSxBKDQpLHYoKSxBKDUsJyInKSx2KCkoKSksMiZuKXtsZXQgZT1TKCk7Qyg0KSx5dChlLnJlZ2V4RmlsdGVyKX19dmFyIFlaZT1mdW5jdGlvbigpe3JldHVybls1LDEwLDIwXX07ZnVuY3Rpb24gWFplKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwibWF0LXBhZ2luYXRvciIsMTYpLFAoInBhZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25QYWdpbmF0aW9uQ2hhbmdlLmVtaXQocikpfSksdigpfWlmKDImbil7bGV0IGU9UygpO3koInBhZ2VTaXplT3B0aW9ucyIsUXAoNCxZWmUpKSgicGFnZUluZGV4IixlLnBhZ2luYXRpb25PcHRpb24ucGFnZUluZGV4KSgicGFnZVNpemUiLGUucGFnaW5hdGlvbk9wdGlvbi5wYWdlU2l6ZSkoImxlbmd0aCIsZS5maWx0ZXJlZEl0ZW1zTGVuZ3RoKX19ZnVuY3Rpb24gUVplKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwibWF0LWNoZWNrYm94IiwyNiksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKDMpLmhhbmRsZVBhZ2VUb2dnbGUoKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1TKDMpO3koImNoZWNrZWQiLGUuYWxsUGFnZUl0ZW1zU2VsZWN0ZWQoKSkoImluZGV0ZXJtaW5hdGUiLCFlLmFsbFBhZ2VJdGVtc1NlbGVjdGVkKCkmJmUuc29tZVBhZ2VJdGVtc1NlbGVjdGVkKCkpfX12YXIgZGhlPWZ1bmN0aW9uKG4pe3JldHVybnt0eXBlOm59fTtmdW5jdGlvbiBLWmUobix0KXtpZigxJm4mJihfKDAsInNwYW4iLDI3KSxBKDEsIkV4cGVyaW1lbnQiKSx2KCkpLDImbil7bGV0IGU9UygzKTt5KCJtYXQtc29ydC1oZWFkZXIiLE9uKDEsZGhlLGUuU29ydFR5cGUuRVhQRVJJTUVOVF9OQU1FKSl9fWZ1bmN0aW9uIFpaZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsMjcpLEEoMSwiUnVuIiksdigpKSwyJm4pe2xldCBlPVMoMyk7eSgibWF0LXNvcnQtaGVhZGVyIixPbigxLGRoZSxlLlNvcnRUeXBlLlJVTl9OQU1FKSl9fWZ1bmN0aW9uIEpaZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIpLE8oMSwicnVucy1ncm91cC1tZW51LWJ1dHRvbiIsMjgpLHYoKSksMiZuKXtsZXQgZT1TKDMpO0MoMSkseSgiZXhwZXJpbWVudElkcyIsZS5leHBlcmltZW50SWRzKX19dmFyIHBoZT1mdW5jdGlvbihuKXtyZXR1cm5bImNvbHVtbiIsbl19O2Z1bmN0aW9uICRaZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsMjEpLHNuKDEsMjIpLEUoMixRWmUsMSwyLCJtYXQtY2hlY2tib3giLDIzKSxFKDMsS1plLDIsMywic3BhbiIsMjQpLEUoNCxaWmUsMiwzLCJzcGFuIiwyNCksRSg1LEpaZSwyLDEsInNwYW4iLDI1KSxhbigpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoMik7eSgibmdDbGFzcyIsT24oNixwaGUsInRiLWNvbHVtbi0iK2UpKSxDKDEpLHkoIm5nU3dpdGNoIixlKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uQ0hFQ0tCT1gpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5FWFBFUklNRU5UX05BTUUpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5SVU5fTkFNRSksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLlJVTl9DT0xPUil9fWZ1bmN0aW9uIGVKZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtzbigwKSxfKDEsImRpdiIsMzcpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLF8oMiwidGItcmFuZ2UtaW5wdXQiLDM4KSxQKCJyYW5nZVZhbHVlc0NoYW5nZWQiLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoMikuJGltcGxpY2l0O3JldHVybiBzZShTKDIpLmhhbmRsZUhwYXJhbUludGVydmFsQ2hhbmdlZChvLHIpKX0pLHYoKSgpLGFuKCl9aWYoMiZuKXtsZXQgZT1TKDIpLiRpbXBsaWNpdDtDKDIpLHkoIm1pbiIsZS5maWx0ZXIubWluVmFsdWUpKCJtYXgiLGUuZmlsdGVyLm1heFZhbHVlKSgibG93ZXJWYWx1ZSIsZS5maWx0ZXIuZmlsdGVyTG93ZXJWYWx1ZSkoInVwcGVyVmFsdWUiLGUuZmlsdGVyLmZpbHRlclVwcGVyVmFsdWUpfX1mdW5jdGlvbiB0SmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDQwKSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxfKDEsIm1hdC1jaGVja2JveCIsMzYpLFAoImNoYW5nZSIsZnVuY3Rpb24oKXtsZXQgbz1vZShlKS4kaW1wbGljaXQscz1TKDMpLiRpbXBsaWNpdDtyZXR1cm4gc2UoUygyKS5oYW5kbGVIcGFyYW1EaXNjcmV0ZUNoYW5nZWQocyxvKSl9KSxfKDIsInNwYW4iKSxBKDMpLHYoKSgpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoMykuJGltcGxpY2l0O0MoMSkseSgiY2hlY2tlZCIsaS5maWx0ZXIuZmlsdGVyVmFsdWVzLmluY2x1ZGVzKGUpKSxDKDIpLHl0KGUpfX1mdW5jdGlvbiBuSmUobix0KXtpZigxJm4mJihzbigwKSxFKDEsdEplLDQsMiwiZGl2IiwzOSksYW4oKSksMiZuKXtsZXQgZT1TKDIpLiRpbXBsaWNpdDtDKDEpLHkoIm5nRm9yT2YiLGUuZmlsdGVyLnBvc3NpYmxlVmFsdWVzKX19ZnVuY3Rpb24gaUplKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO3NuKDApLF8oMSwiYnV0dG9uIiwzMiksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksTygyLCJtYXQtaWNvbiIsMzMpLHYoKSxfKDMsIm1hdC1tZW51IixudWxsLDM0KSg1LCJkaXYiLDM1KSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxfKDYsIm1hdC1jaGVja2JveCIsMzYpLFAoImNoYW5nZSIsZnVuY3Rpb24oKXtvZShlKTtsZXQgcj1TKCkuJGltcGxpY2l0O3JldHVybiBzZShTKDIpLmhhbmRsZUhwYXJhbUluY2x1ZGVVbmRlZmluZWRUb2dnbGVkKHIpKX0pLF8oNywic3BhbiIpLEEoOCwiKHNob3cgZW1wdHkgdmFsdWUpIiksdigpKCkoKSxFKDksZUplLDMsNCwibmctY29udGFpbmVyIiwzMSksRSgxMCxuSmUsMiwxLCJuZy1jb250YWluZXIiLDMxKSx2KCksYW4oKX1pZigyJm4pe2xldCBlPSRlKDQpLGk9UygpLiRpbXBsaWNpdCxyPVMoMik7QygxKSx5KCJtYXRNZW51VHJpZ2dlckZvciIsZSksemUoImFyaWEtbGFiZWwiLCJGaWx0ZXIgaHBhcmFtICIrKGkuZGlzcGxheU5hbWV8fGkubmFtZSkpLEMoNSkseSgiY2hlY2tlZCIsaS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCksQygzKSx5KCJuZ0lmIixpLmZpbHRlci50eXBlPT09ci5Eb21haW5UeXBlLklOVEVSVkFMKSxDKDEpLHkoIm5nSWYiLGkuZmlsdGVyLnR5cGU9PT1yLkRvbWFpblR5cGUuRElTQ1JFVEUpfX12YXIgckplPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3R5cGU6bixuYW1lOnR9fTtmdW5jdGlvbiBvSmUobix0KXtpZigxJm4mJihfKDAsInNwYW4iLDI5KSgxLCJzcGFuIiwzMCksQSgyKSx2KCksRSgzLGlKZSwxMSw1LCJuZy1jb250YWluZXIiLDMxKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKDIpO3koIm1hdC1zb3J0LWhlYWRlciIsUXIoMyxySmUsaS5Tb3J0VHlwZS5IUEFSQU0sZS5uYW1lKSksQygyKSx5dChlLmRpc3BsYXlOYW1lfHxlLm5hbWUpLEMoMSkseSgibmdJZiIsZS5maWx0ZXIpfX1mdW5jdGlvbiBzSmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7c24oMCksXygxLCJidXR0b24iLDMyKSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxPKDIsIm1hdC1pY29uIiwzMyksdigpLF8oMywibWF0LW1lbnUiLG51bGwsMzQpKDUsImRpdiIsMzUpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLF8oNiwibWF0LWNoZWNrYm94IiwzNiksUCgiY2hhbmdlIixmdW5jdGlvbigpe29lKGUpO2xldCByPVMoKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoMikuaGFuZGxlTWV0cmljSW5jbHVkZVVuZGVmaW5lZENoYW5nZWQocikpfSksXyg3LCJzcGFuIiksQSg4LCIoc2hvdyBlbXB0eSB2YWx1ZSkiKSx2KCkoKSgpLF8oOSwiZGl2IiwzNyksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksXygxMCwidGItcmFuZ2UtaW5wdXQiLDM4KSxQKCJyYW5nZVZhbHVlc0NoYW5nZWQiLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoMikuaGFuZGxlTWV0cmljRmlsdGVyQ2hhbmdlZChvLHIpKX0pLHYoKSgpKCksYW4oKX1pZigyJm4pe2xldCBlPSRlKDQpLGk9UygpLiRpbXBsaWNpdDtDKDEpLHkoIm1hdE1lbnVUcmlnZ2VyRm9yIixlKSx6ZSgiYXJpYS1sYWJlbCIsIkZpbHRlciBtZXRyaWMgIisoaS5kaXNwbGF5TmFtZXx8aS50YWcpKSxDKDUpLHkoImNoZWNrZWQiLGkuZmlsdGVyLmluY2x1ZGVVbmRlZmluZWQpLEMoNCkseSgibWluIixpLmZpbHRlci5taW5WYWx1ZSkoIm1heCIsaS5maWx0ZXIubWF4VmFsdWUpKCJsb3dlclZhbHVlIixpLmZpbHRlci5maWx0ZXJMb3dlclZhbHVlKSgidXBwZXJWYWx1ZSIsaS5maWx0ZXIuZmlsdGVyVXBwZXJWYWx1ZSl9fXZhciBhSmU9ZnVuY3Rpb24obix0KXtyZXR1cm57dHlwZTpuLHRhZzp0fX07ZnVuY3Rpb24gbEplKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwyOSkoMSwic3BhbiIsMzApLEEoMiksdigpLEUoMyxzSmUsMTEsNywibmctY29udGFpbmVyIiwzMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9UygyKTt5KCJtYXQtc29ydC1oZWFkZXIiLFFyKDMsYUplLGkuU29ydFR5cGUuTUVUUklDLGUudGFnKSksQygyKSx5dChlLmRpc3BsYXlOYW1lfHxlLnRhZyksQygxKSx5KCJuZ0lmIixlLmZpbHRlcil9fWZ1bmN0aW9uIGNKZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMTcpKDEsImRpdiIsMTgpLFAoIm1hdFNvcnRDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkuaGFuZGxlU29ydENoYW5nZShyKSl9KSxFKDIsJFplLDYsOCwic3BhbiIsMTkpLEUoMyxvSmUsNCw2LCJzcGFuIiwyMCksRSg0LGxKZSw0LDYsInNwYW4iLDIwKSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTtDKDEpLHkoIm1hdFNvcnRBY3RpdmUiLGUuc29ydE9wdGlvbi5jb2x1bW4pLEMoMSkseSgibmdGb3JPZiIsZS5jb2x1bW5zKSxDKDEpLHkoIm5nRm9yT2YiLGUuaHBhcmFtQ29sdW1ucykoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5SHBhcmFtQ29sdW1uKSxDKDEpLHkoIm5nRm9yT2YiLGUubWV0cmljQ29sdW1ucykoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5TWV0cmljQ29sdW1uKX19ZnVuY3Rpb24gdUplKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwic3BhbiIpKDEsIm1hdC1jaGVja2JveCIsNDcpLFAoImNoYW5nZSIsZnVuY3Rpb24oKXtvZShlKTtsZXQgcj1TKDIpLml0ZW07cmV0dXJuIHNlKFMoKS5vblNlbGVjdGlvblRvZ2dsZS5lbWl0KHIpKX0pKCJkYmxjbGljayIsZnVuY3Rpb24oKXtvZShlKTtsZXQgcj1TKDIpLml0ZW07cmV0dXJuIHNlKFMoKS5vblNlbGVjdGlvbkRibENsaWNrLmVtaXQocikpfSksdigpKCl9aWYoMiZuKXtsZXQgZT1TKDIpLml0ZW07QygxKSx5KCJjaGVja2VkIixlLnNlbGVjdGVkKX19ZnVuY3Rpb24gZEplKG4sdCl7aWYoMSZuJiZPKDAsInRiLWV4cGVyaW1lbnQtYWxpYXMiLDQ4KSwyJm4pe2xldCBlPVMoMikuaXRlbTt5KCJhbGlhcyIsZS5leHBlcmltZW50QWxpYXMpKCJ0aXRsZSIsZS5leHBlcmltZW50TmFtZSl9fWZ1bmN0aW9uIHBKZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsMzApLEEoMSksdigpKSwyJm4pe2xldCBlPVMoMikuaXRlbTtDKDEpLHl0KGUucnVuLm5hbWUpfX12YXIgaEplPWZ1bmN0aW9uKG4pe3JldHVybnsicnVuLWNvbG9yLXN3YXRjaCI6ITAsIm5vLWNvbG9yIjpufX07ZnVuY3Rpb24gZkplKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwic3BhbiIpKDEsImJ1dHRvbiIsNDkpLFAoImNvbG9yUGlja2VyQ2hhbmdlIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKDIpLml0ZW07cmV0dXJuIHNlKFMoKS5vblJ1bkNvbG9yQ2hhbmdlLmVtaXQoe3J1bklkOm8ucnVuLmlkLG5ld0NvbG9yOnJ9KSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPVMoMikuaXRlbTtDKDEpLFB0KCJiYWNrZ3JvdW5kIixlLnJ1bkNvbG9yKSx5KCJuZ0NsYXNzIixPbig4LGhKZSwhZS5ydW5Db2xvcikpKCJjb2xvclBpY2tlciIsZS5ydW5Db2xvcikoImNwRGlhbG9nRGlzcGxheSIsInBvcHVwIikoImNwUG9zaXRpb25PZmZzZXQiLC0yMCkoImNwVXNlUm9vdFZpZXdDb250YWluZXIiLCEwKSgiY3BPdXRwdXRGb3JtYXQiLCJoZXgiKX19ZnVuY3Rpb24gbUplKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiw0NCksc24oMSwyMiksRSgyLHVKZSwyLDEsInNwYW4iLDI1KSxFKDMsZEplLDEsMiwidGItZXhwZXJpbWVudC1hbGlhcyIsNDUpLEUoNCxwSmUsMiwxLCJzcGFuIiw0NiksRSg1LGZKZSwyLDEwLCJzcGFuIiwyNSksYW4oKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKDIpO3koIm5nQ2xhc3MiLE9uKDYscGhlLCJ0Yi1jb2x1bW4tIitlKSksQygxKSx5KCJuZ1N3aXRjaCIsZSksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLkNIRUNLQk9YKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uRVhQRVJJTUVOVF9OQU1FKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uUlVOX05BTUUpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5SVU5fQ09MT1IpfX1mdW5jdGlvbiBnSmUobix0KXtpZigxJm4mJihfKDAsInNwYW4iLDUwKSxBKDEpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoKS5pdGVtO0MoMSkseXQoaS5ocGFyYW1zLmdldChlLm5hbWUpKX19ZnVuY3Rpb24gX0plKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiw1MCksQSgxKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKCkuaXRlbTtDKDEpLHl0KGkubWV0cmljcy5nZXQoZS50YWcpKX19ZnVuY3Rpb24gdkplKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDQxKSxFKDEsbUplLDYsOCwic3BhbiIsNDIpLEUoMixnSmUsMiwxLCJzcGFuIiw0MyksRSgzLF9KZSwyLDEsInNwYW4iLDQzKSx2KCkpLDImbil7bGV0IGU9dC5pdGVtLGk9UygpO3plKCJkYXRhLWlkIixlLnJ1bi5pZCksQygxKSx5KCJuZ0Zvck9mIixpLmNvbHVtbnMpLEMoMSkseSgibmdGb3JPZiIsaS5ocGFyYW1Db2x1bW5zKSxDKDEpLHkoIm5nRm9yT2YiLGkubWV0cmljQ29sdW1ucyl9fXZhciB5SmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGUwe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLml0ZW1zUGVyUGFnZUxhYmVsPSJTaG93IHJ1bnM6In19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1waShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGhoZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5kYXRhU291cmNlPW5ldyBKayx0aGlzLkRvbWFpblR5cGU9Q2ksdGhpcy5SdW5zVGFibGVDb2x1bW49dmEsdGhpcy5Tb3J0VHlwZT1pZCx0aGlzLm9uUmVnZXhGaWx0ZXJDaGFuZ2U9bmV3IEcsdGhpcy5vblNlbGVjdGlvblRvZ2dsZT1uZXcgRyx0aGlzLm9uU2VsZWN0aW9uRGJsQ2xpY2s9bmV3IEcsdGhpcy5vblBhZ2VTZWxlY3Rpb25Ub2dnbGU9bmV3IEcsdGhpcy5vblBhZ2luYXRpb25DaGFuZ2U9bmV3IEcsdGhpcy5vblNvcnRDaGFuZ2U9bmV3IEcsdGhpcy5vblJ1bkNvbG9yQ2hhbmdlPW5ldyBHLHRoaXMub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQ9bmV3IEcsdGhpcy5vbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZD1uZXcgRyx0aGlzLm9uTWV0cmljRmlsdGVyQ2hhbmdlZD1uZXcgR31uZ09uQ2hhbmdlcygpe3RoaXMuZGF0YVNvdXJjZS5kYXRhPXRoaXMucGFnZUl0ZW1zfWdldEhwYXJhbUNvbHVtbklkKGUpe3JldHVybmBoOiR7ZS5uYW1lfWB9Z2V0TWV0cmljQ29sdW1uSWQoZSl7cmV0dXJuYG06JHtlLnRhZ31gfWdldENvbHVtbklkcygpe3JldHVyblsuLi50aGlzLmNvbHVtbnMsLi4udGhpcy5ocGFyYW1Db2x1bW5zLm1hcCh0aGlzLmdldEhwYXJhbUNvbHVtbklkKSwuLi50aGlzLm1ldHJpY0NvbHVtbnMubWFwKHRoaXMuZ2V0TWV0cmljQ29sdW1uSWQpXX1hbGxQYWdlSXRlbXNTZWxlY3RlZCgpe3JldHVybiBCb29sZWFuKHRoaXMucGFnZUl0ZW1zLmxlbmd0aCkmJnRoaXMucGFnZUl0ZW1zLmV2ZXJ5KGU9PmUuc2VsZWN0ZWQpfXNvbWVQYWdlSXRlbXNTZWxlY3RlZCgpe3JldHVybiB0aGlzLnBhZ2VJdGVtcy5zb21lKGU9PmUuc2VsZWN0ZWQpfWhhbmRsZVBhZ2VUb2dnbGUoKXt0aGlzLm9uUGFnZVNlbGVjdGlvblRvZ2dsZS5lbWl0KHtpdGVtczp0aGlzLnBhZ2VJdGVtc30pfWhhbmRsZVNvcnRDaGFuZ2UoZSl7bGV0IGk7c3dpdGNoKGUuZGlyZWN0aW9uKXtjYXNlImFzYyI6aT1pYy5BU0M7YnJlYWs7Y2FzZSJkZXNjIjppPWljLkRFU0M7YnJlYWs7ZGVmYXVsdDppPWljLlVOU0VUfXRoaXMub25Tb3J0Q2hhbmdlLmVtaXQoe2tleTplLmFjdGl2ZSxkaXJlY3Rpb246aX0pfW9uRmlsdGVyS2V5VXAoZSl7dGhpcy5vblJlZ2V4RmlsdGVyQ2hhbmdlLmVtaXQoZS50YXJnZXQudmFsdWUpfXRhYmxlVHJhY2tCeShlLGkpe3JldHVybiBpLnJ1bi5pZH1oYW5kbGVIcGFyYW1JbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZChlKXtsZXR7bmFtZTppLGZpbHRlcjpyfT1lO2lmKCFyKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTtyLnR5cGU9PT1DaS5ESVNDUkVURT90aGlzLm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkLmVtaXQoe2hwYXJhbU5hbWU6aSxpbmNsdWRlVW5kZWZpbmVkOiFyLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyVmFsdWVzOnIuZmlsdGVyVmFsdWVzfSk6dGhpcy5vbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZC5lbWl0KHtuYW1lOmksaW5jbHVkZVVuZGVmaW5lZDohci5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6ci5maWx0ZXJMb3dlclZhbHVlLGZpbHRlclVwcGVyVmFsdWU6ci5maWx0ZXJVcHBlclZhbHVlfSl9aGFuZGxlSHBhcmFtSW50ZXJ2YWxDaGFuZ2VkKGUsaSl7bGV0e25hbWU6cixmaWx0ZXI6b309ZTtpZighbyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7dGhpcy5vbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZC5lbWl0KHtuYW1lOnIsaW5jbHVkZVVuZGVmaW5lZDpvLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyTG93ZXJWYWx1ZTppLmxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTppLnVwcGVyVmFsdWV9KX1oYW5kbGVIcGFyYW1EaXNjcmV0ZUNoYW5nZWQoZSxpKXtsZXR7bmFtZTpyLGZpbHRlcjpvfT1lO2lmKCFvKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTtpZihvLnR5cGUhPT1DaS5ESVNDUkVURSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YXJpYW50IGVycm9yOiBleHBlY3RlZCBkaXNjcmV0ZSBkb21haW4gZm9yICR7cn1gKTtsZXQgcz1uZXcgU2V0KFsuLi5vLmZpbHRlclZhbHVlc10pO3MuaGFzKGkpP3MuZGVsZXRlKGkpOnMuYWRkKGkpLHRoaXMub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQuZW1pdCh7aHBhcmFtTmFtZTpyLGluY2x1ZGVVbmRlZmluZWQ6by5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlclZhbHVlczpbLi4uc119KX1oYW5kbGVNZXRyaWNJbmNsdWRlVW5kZWZpbmVkQ2hhbmdlZChlKXtpZighZS5maWx0ZXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO3RoaXMub25NZXRyaWNGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6ZS50YWcsaW5jbHVkZVVuZGVmaW5lZDohZS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmUuZmlsdGVyLmZpbHRlckxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTplLmZpbHRlci5maWx0ZXJVcHBlclZhbHVlfSl9aGFuZGxlTWV0cmljRmlsdGVyQ2hhbmdlZChlLGkpe2lmKCFlLmZpbHRlcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7dGhpcy5vbk1ldHJpY0ZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTplLnRhZyxpbmNsdWRlVW5kZWZpbmVkOmUuZmlsdGVyLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyTG93ZXJWYWx1ZTppLmxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTppLnVwcGVyVmFsdWV9KX10cmFja0J5SHBhcmFtQ29sdW1uKGUpe3JldHVybiBlLm5hbWV9dHJhY2tCeU1ldHJpY0NvbHVtbihlKXtyZXR1cm4gZS50YWd9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtdGFibGUtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKG90KFZaZSw3LFJlKSxvdChLayw3KSxvdChNRSw3KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5maWx0ZXI9ci5maXJzdCksTmUocj1MZSgpKSYmKGkucGFnaW5hdG9yPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnNvcnQ9ci5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmZXQoImZsZXgtbGF5b3V0IixpLnVzZUZsZXhpYmxlTGF5b3V0KX0saW5wdXRzOntleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixzaG93RXhwZXJpbWVudE5hbWU6InNob3dFeHBlcmltZW50TmFtZSIsY29sdW1uczoiY29sdW1ucyIsaHBhcmFtQ29sdW1uczoiaHBhcmFtQ29sdW1ucyIsbWV0cmljQ29sdW1uczoibWV0cmljQ29sdW1ucyIsYWxsSXRlbXNMZW5ndGg6ImFsbEl0ZW1zTGVuZ3RoIixmaWx0ZXJlZEl0ZW1zTGVuZ3RoOiJmaWx0ZXJlZEl0ZW1zTGVuZ3RoIix1c2VGbGV4aWJsZUxheW91dDoidXNlRmxleGlibGVMYXlvdXQiLHVzZVBhZ2luYXRpb246InVzZVBhZ2luYXRpb24iLHBhZ2VJdGVtczoicGFnZUl0ZW1zIixsb2FkaW5nOiJsb2FkaW5nIixudW1TZWxlY3RlZEl0ZW1zOiJudW1TZWxlY3RlZEl0ZW1zIixzb3J0T3B0aW9uOiJzb3J0T3B0aW9uIixwYWdpbmF0aW9uT3B0aW9uOiJwYWdpbmF0aW9uT3B0aW9uIixyZWdleEZpbHRlcjoicmVnZXhGaWx0ZXIifSxvdXRwdXRzOntvblJlZ2V4RmlsdGVyQ2hhbmdlOiJvblJlZ2V4RmlsdGVyQ2hhbmdlIixvblNlbGVjdGlvblRvZ2dsZToib25TZWxlY3Rpb25Ub2dnbGUiLG9uU2VsZWN0aW9uRGJsQ2xpY2s6Im9uU2VsZWN0aW9uRGJsQ2xpY2siLG9uUGFnZVNlbGVjdGlvblRvZ2dsZToib25QYWdlU2VsZWN0aW9uVG9nZ2xlIixvblBhZ2luYXRpb25DaGFuZ2U6Im9uUGFnaW5hdGlvbkNoYW5nZSIsb25Tb3J0Q2hhbmdlOiJvblNvcnRDaGFuZ2UiLG9uUnVuQ29sb3JDaGFuZ2U6Im9uUnVuQ29sb3JDaGFuZ2UiLG9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkOiJvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsb25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQ6Im9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkIixvbk1ldHJpY0ZpbHRlckNoYW5nZWQ6Im9uTWV0cmljRmlsdGVyQ2hhbmdlZCJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6ZTAsdXNlQ2xhc3M6eUplfV0pLEZ0XSxkZWNsczoxNSx2YXJzOjgsY29uc3RzOltbMSwiZmlsdGVyLXJvdyJdLFsicGxhY2Vob2xkZXIiLCJGaWx0ZXIgcnVucyAocmVnZXgpIiwxLCJydW4tZmlsdGVyIiwzLCJ2YWx1ZSIsImtleXVwIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsicm9sZSIsInRhYmxlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUiLCJyb3dncm91cCIsMSwicm93cyJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbImNsYXNzIiwibG9hZGluZyIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby1ydW5zIiw0LCJuZ0lmIl0sWyJzaG93Rmlyc3RMYXN0QnV0dG9ucyIsIiIsMywicGFnZVNpemVPcHRpb25zIiwicGFnZUluZGV4IiwicGFnZVNpemUiLCJsZW5ndGgiLCJwYWdlIiw0LCJuZ0lmIl0sWyJoZWFkZXIiLCIiXSxbInJvdyIsIiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwibG9hZGluZyJdLFsibW9kZSIsImluZGV0ZXJtaW5hdGUiLCJkaWFtZXRlciIsIjI4Il0sWzEsIm5vLXJ1bnMiXSxbInNob3dGaXJzdExhc3RCdXR0b25zIiwiIiwzLCJwYWdlU2l6ZU9wdGlvbnMiLCJwYWdlSW5kZXgiLCJwYWdlU2l6ZSIsImxlbmd0aCIsInBhZ2UiXSxbInJvbGUiLCJyb3dncm91cCIsMSwiaGVhZGVyIl0sWyJtYXRTb3J0IiwiIiwicm9sZSIsInJvdyIsMywibWF0U29ydEFjdGl2ZSIsIm1hdFNvcnRDaGFuZ2UiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiY29sdW1uIiwzLCJtYXQtc29ydC1oZWFkZXIiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMywibmdDbGFzcyJdLFszLCJuZ1N3aXRjaCJdLFszLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNoYW5nZSIsNCwibmdTd2l0Y2hDYXNlIl0sWzMsIm1hdC1zb3J0LWhlYWRlciIsNCwibmdTd2l0Y2hDYXNlIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNoYW5nZSJdLFszLCJtYXQtc29ydC1oZWFkZXIiXSxbMywiZXhwZXJpbWVudElkcyJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiY29sdW1uIiwzLCJtYXQtc29ydC1oZWFkZXIiXSxbMSwibmFtZSJdLFs0LCJuZ0lmIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIiwiY2xpY2siXSxbInN2Z0ljb24iLCJmaWx0ZXJfYWx0XzI0cHgiXSxbImZpbHRlck1lbnUiLCJtYXRNZW51Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giLCJkaXNhYmxlUmlwcGxlIiwiIiwxLCJmaWx0ZXItbWVudS1jaGVja2JveC1yb3ciLDMsImNsaWNrIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbImRpc2FibGVSaXBwbGUiLCIiLCJtYXQtbWVudS1pdGVtIiwiIiwxLCJyYW5nZS1pbnB1dC1jb250YWluZXIiLDMsImNsaWNrIl0sWzMsIm1pbiIsIm1heCIsImxvd2VyVmFsdWUiLCJ1cHBlclZhbHVlIiwicmFuZ2VWYWx1ZXNDaGFuZ2VkIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwiY2xhc3MiLCJmaWx0ZXItbWVudS1jaGVja2JveC1yb3ciLCJyb2xlIiwibWVudWl0ZW1jaGVja2JveCIsMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbWNoZWNrYm94IiwxLCJmaWx0ZXItbWVudS1jaGVja2JveC1yb3ciLDMsImNsaWNrIl0sWyJyb2xlIiwicm93Il0sWyJyb2xlIiwiY2VsbCIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwiY2VsbCIsImNsYXNzIiwiY29sdW1uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJjZWxsIiwzLCJuZ0NsYXNzIl0sWzMsImFsaWFzIiwidGl0bGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJuYW1lIiw0LCJuZ1N3aXRjaENhc2UiXSxbInRpdGxlIiwiQ2xpY2sgdG8gdG9nZ2xlIHJ1biBzZWxlY3Rpb24gb3IgZG91YmxlIGNsaWNrIHRvIHNlbGVjdCBvbmx5IHRoaXMgcnVuLiIsMywiY2hlY2tlZCIsImNoYW5nZSIsImRibGNsaWNrIl0sWzMsImFsaWFzIiwidGl0bGUiXSxbMywibmdDbGFzcyIsImNvbG9yUGlja2VyIiwiY3BEaWFsb2dEaXNwbGF5IiwiY3BQb3NpdGlvbk9mZnNldCIsImNwVXNlUm9vdFZpZXdDb250YWluZXIiLCJjcE91dHB1dEZvcm1hdCIsImNvbG9yUGlja2VyQ2hhbmdlIl0sWyJyb2xlIiwiY2VsbCIsMSwiY29sdW1uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJkaXYiLDApKDEsInRiLWZpbHRlci1pbnB1dCIsMSksUCgia2V5dXAiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRmlsdGVyS2V5VXAobyl9KSx2KCkoKSxfKDIsImRpdiIsMikoMywiZGl2IiwzKSxFKDQsSFplLDEsMCwibmctY29udGFpbmVyIiw0KSxfKDUsImRpdiIsNSksRSg2LGpaZSwyLDQsIm5nLWNvbnRhaW5lciIsNiksdigpKCksRSg3LEdaZSwyLDAsImRpdiIsNyksRSg4LFdaZSwyLDAsImRpdiIsOCksRSg5LHFaZSw2LDEsImRpdiIsOCksdigpLEUoMTAsWFplLDEsNSwibWF0LXBhZ2luYXRvciIsOSksRSgxMSxjSmUsNSw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwxMCxxdCksRSgxMyx2SmUsNCw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwxMSxxdCkpLDImZSl7bGV0IHI9JGUoMTIpO0MoMSksWmkoInZhbHVlIixpLnJlZ2V4RmlsdGVyKSxDKDMpLHkoIm5nVGVtcGxhdGVPdXRsZXQiLHIpLEMoMikseSgibmdGb3JPZiIsaS5wYWdlSXRlbXMpKCJuZ0ZvclRyYWNrQnkiLGkudGFibGVUcmFja0J5KSxDKDEpLHkoIm5nSWYiLGkubG9hZGluZyksQygxKSx5KCJuZ0lmIiwhaS5sb2FkaW5nJiYwPT09aS5hbGxJdGVtc0xlbmd0aCksQygxKSx5KCJuZ0lmIiwhaS5sb2FkaW5nJiZpLmFsbEl0ZW1zTGVuZ3RoPjAmJjA9PT1pLmZpbHRlcmVkSXRlbXNMZW5ndGgpLEMoMSkseSgibmdJZiIsaS51c2VQYWdpbmF0aW9uKX19LGRlcGVuZGVuY2llczpbcmhlLEZuLGRuLEJlLG9zLENyLFVyLGN5LFlrLF9uLHlsLEd0LGhkLG51LGZkLEtrLEJvLE1FLEtwZSxzaGUsdWhlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Zm9udC1zaXplOjEzcHg7b3ZlcmZsb3c6aGlkZGVufS5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmV9LnRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Y29udGFpbjpsYXlvdXQgcGFpbnQ7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3cteDphdXRvO292ZXJmbG93LXk6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sc2Nyb2xsLXBvc2l0aW9ufS5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICAubmFtZVtfbmdjb250ZW50LSVDT01QJV17d29yZC1icmVhazpicmVhay13b3JkO292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0uZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjtwYWRkaW5nLWJvdHRvbToxMnB4fWJvZHkuZGFyay1tb2RlICAgLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OnRhYmxlO3dpZHRoOjEwMCV9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1jb2x1bW5oZWFkZXJdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1jb2x1bW5oZWFkZXJdW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9Y29sdW1uaGVhZGVyXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OnRhYmxlLXJvdztoZWlnaHQ6NDNweH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6dGFibGUtY2VsbDtwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIFtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OjI0cHh9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZHtwYWRkaW5nLXJpZ2h0OjI0cHh9W3JvbGU9cm93Z3JvdXBdW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OnRhYmxlLXJvdy1ncm91cH1bcm9sZT1yb3dncm91cF0uaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OnRhYmxlLWhlYWRlci1ncm91cH0ubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0sIC5uby1ydW5zW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubm8tcnVuc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5uby1ydW5zW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5zZWxlY3QtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxMnB4O3BhZGRpbmctdG9wOjEycHh9LnNlbGVjdC1hbGwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0sIC5zZWxlY3QtYWxsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246bGVmdH0uc2VsZWN0LWFsbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3BhZGRpbmc6MCA0cHh9LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweCAwIDIxcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICB0Yi1maWx0ZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxfS50Yi1jb2x1bW4tY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdLCAudGItY29sdW1uLXJ1bl9jb2xvcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MjBweH0udGItY29sdW1uLXJ1bl9jb2xvcltfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnJ1bi1jb2xvci1zd2F0Y2hbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6MTAwJTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweDtvdXRsaW5lOm5vbmV9LnJ1bi1jb2xvci1zd2F0Y2gubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojYzZjYWQxO2JvcmRlci13aWR0aDoycHh9LnJhbmdlLWlucHV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmF1dG99W19uZ2hvc3QtJUNPTVAlXSAgICAgbWF0LXBhZ2luYXRvciBtYXQtZm9ybS1maWVsZHttYXJnaW46MH0uZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVse2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTthbGlnbi1pdGVtczpjZW50ZXJ9LmZpbHRlci1tZW51LWNoZWNrYm94LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbCAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcnttYXJnaW4tbGVmdDowfS5maWx0ZXItbWVudS1jaGVja2JveC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWwgLm1hdC1jaGVja2JveC1sYWJlbHtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseEplPUooV00sbj0+bi5zdGF0ZT09PU9lLkxPQURJTkcpO2Z1bmN0aW9uIGZoZShuLHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgaWQuRVhQRVJJTUVOVF9OQU1FOnJldHVybltuLmV4cGVyaW1lbnRBbGlhcyxuLnJ1bi5uYW1lLG4ucnVuLmlkXTtjYXNlIGlkLlJVTl9OQU1FOnJldHVybltuLnJ1bi5uYW1lLG4uZXhwZXJpbWVudEFsaWFzLG4ucnVuLmlkXTtjYXNlIGlkLkhQQVJBTTpyZXR1cm5bbi5ocGFyYW1zLmdldCh0Lm5hbWUpLG4ucnVuLm5hbWUsbi5leHBlcmltZW50QWxpYXMsbi5ydW4uaWRdO2Nhc2UgaWQuTUVUUklDOnJldHVybltuLm1ldHJpY3MuZ2V0KHQudGFnKSxuLnJ1bi5uYW1lLG4uZXhwZXJpbWVudEFsaWFzLG4ucnVuLmlkXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZDogJHt0fWApfX1mdW5jdGlvbiBtaGUobix0KXtyZXR1cm4gdm9pZCAwPT09dD9uLmluY2x1ZGVVbmRlZmluZWQ6bi50eXBlPT09Q2kuRElTQ1JFVEU/bi5maWx0ZXJWYWx1ZXMuaW5jbHVkZXModCk6bi50eXBlPT09Q2kuSU5URVJWQUwmJm4uZmlsdGVyTG93ZXJWYWx1ZTw9dCYmdDw9bi5maWx0ZXJVcHBlclZhbHVlfXZhciBnaGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5sb2FkaW5nJD1udWxsLHRoaXMuaHBhcmFtQ29sdW1ucyQ9WHQoW10pLHRoaXMubWV0cmljQ29sdW1ucyQ9WHQoW10pLHRoaXMudXNlRmxleGlibGVMYXlvdXQ9ITEsdGhpcy51c2VQYWdpbmF0aW9uPSExLHRoaXMuY29sdW1ucz1bdmEuUlVOX05BTUVdLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzPSExLHRoaXMuc29ydE9wdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3QoYUgpLHRoaXMucGFnaW5hdGlvbk9wdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3Qoc0gpLHRoaXMucmVnZXhGaWx0ZXIkPXRoaXMuc3RvcmUuc2VsZWN0KFFtKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IGtlfWlzRXhwZXJpbWVudE5hbWVWaXNpYmxlKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5zb21lKGU9PmU9PT12YS5FWFBFUklNRU5UX05BTUUpfW5nT25Jbml0KCl7bGV0IGk9THQodGhpcy5leHBlcmltZW50SWRzLm1hcChzPT50aGlzLmdldFJ1blRhYmxlSXRlbXNGb3JFeHBlcmltZW50KHMpKSkucGlwZShMKHM9PltdLmNvbmNhdCguLi5zKSkpO3RoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJD1pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxNYSgxKSksdGhpcy5hbGxJdGVtc0xlbmd0aCQ9dGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkLnBpcGUoTChzPT5zLmxlbmd0aCkpO2xldCByPXRoaXMuZ2V0RmlsdGVyZWRJdGVtcyQodGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkKS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSksTWEoMSkpO3RoaXMuZmlsdGVyZWRJdGVtc0xlbmd0aCQ9ci5waXBlKEwocz0+cy5sZW5ndGgpKSx0aGlzLnBhZ2VJdGVtcyQ9dGhpcy5zb3J0ZWRBbmRTbGljZWRJdGVtcyQociksdGhpcy5udW1TZWxlY3RlZEl0ZW1zJD10aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQucGlwZShMKHM9PnMucmVkdWNlKChhLGwpPT5hK051bWJlcihsLnNlbGVjdGVkKSwwKSkpO2xldCBvPXRoaXMuZXhwZXJpbWVudElkcy5tYXAocz0+dGhpcy5zdG9yZS5zZWxlY3QoeEplLHtleHBlcmltZW50SWQ6c30pKTtpZih0aGlzLmxvYWRpbmckPUx0KG8pLnBpcGUoTChzPT5zLnNvbWUoYT0+YSkpKSx0aGlzLnNob3dIcGFyYW1zQW5kTWV0cmljcyl7bGV0IHM9dGhpcy5zdG9yZS5zZWxlY3QoRGYuZ2V0RXhwZXJpbWVudHNIcGFyYW1zQW5kTWV0cmljc1NwZWNzLHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc30pO3RoaXMuaHBhcmFtQ29sdW1ucyQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KERmLmdldEhwYXJhbUZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpLHNdKS5waXBlKEwoKFthLHtocGFyYW1zOmx9XSk9PmwubWFwKCh7bmFtZTpjLGRpc3BsYXlOYW1lOnV9KT0+e2xldCBwPWEuZ2V0KGMpO2lmKCFwKXRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGEgZmlsdGVyIGZvciAke2N9IG11c3QgZXhpc3Qgd2hlbiB0aGUgaHBhcmFtIGV4aXN0c2ApO3JldHVybntkaXNwbGF5TmFtZTp1LG5hbWU6YyxmaWx0ZXI6cH19KSkpLHRoaXMubWV0cmljQ29sdW1ucyQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KERmLmdldE1ldHJpY0ZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpLHNdKS5waXBlKEwoKFthLHttZXRyaWNzOmx9XSk9PmwubWFwKCh7dGFnOmMsZGlzcGxheU5hbWU6dX0pPT57bGV0IGQ9YS5nZXQoYyk7aWYoIWQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFyaWFudCBlcnJvcjogYSBmaWx0ZXIgZm9yICR7Y30gbXVzdCBleGlzdCB3aGVuIHRoZSBtZXRyaWMgZXhpc3RzYCk7cmV0dXJue2Rpc3BsYXlOYW1lOnUsdGFnOmMsZmlsdGVyOmR9fSkpKX10aGlzLmNvbHVtbnMuaW5jbHVkZXModmEuQ0hFQ0tCT1gpJiZ0aGlzLnN0b3JlLnNlbGVjdChSYSkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpLHlpKChhLGwpPT5QcyhhLGwpKSx1aSgoKT0+aS5waXBlKFllKGE9PmEubGVuZ3RoPjUwMCksUXQoMSkpKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaCh2dih7bG9jYWxpemVkTWVzc2FnZToiVGhlIG51bWJlciBvZiBydW5zIGV4Y2VlZHMgNTAwLiBOZXcgcnVucyBhcmUgdW5zZWxlY3RlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4ifSkpfSksdGhpcy5zdG9yZS5kaXNwYXRjaChkSSh7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHN9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfWdldEZpbHRlcmVkSXRlbXMkKGUpe3JldHVybiBMdChbZSx0aGlzLnN0b3JlLnNlbGVjdChRbSldKS5waXBlKEwoKFtpLHJdKT0+e2lmKCFyKXJldHVybiBpO2xldCBvPXRoaXMuY29sdW1ucy5pbmNsdWRlcyh2YS5FWFBFUklNRU5UX05BTUUpO3JldHVybiBpLmZpbHRlcihzPT5KSSh7cnVuTmFtZTpzLnJ1bi5uYW1lLGV4cGVyaW1lbnRBbGlhczpzLmV4cGVyaW1lbnRBbGlhc30scixvKSl9KSx1aShpPT50aGlzLnNob3dIcGFyYW1zQW5kTWV0cmljcz9MdCh0aGlzLnN0b3JlLnNlbGVjdChEZi5nZXRIcGFyYW1GaWx0ZXJNYXAsdGhpcy5leHBlcmltZW50SWRzKSx0aGlzLnN0b3JlLnNlbGVjdChEZi5nZXRNZXRyaWNGaWx0ZXJNYXAsdGhpcy5leHBlcmltZW50SWRzKSkucGlwZShMKChbcixvXSk9PmkuZmlsdGVyKCh7aHBhcmFtczpzLG1ldHJpY3M6YX0pPT5bLi4uci5lbnRyaWVzKCldLmV2ZXJ5KChbYyx1XSk9Pm1oZSh1LHMuZ2V0KGMpKSkmJlsuLi5vLmVudHJpZXMoKV0uZXZlcnkoKFtjLHVdKT0+bWhlKHUsYS5nZXQoYykpKSkpKTpYdChpKSkpfXNvcnRlZEFuZFNsaWNlZEl0ZW1zJChlKXtsZXQgaT1MdChbZSx0aGlzLnN0b3JlLnNlbGVjdChhSCldKS5waXBlKEwoKFtvLHNdKT0+ZnVuY3Rpb24obix0KXtsZXQgZT10LmtleSxpPVsuLi5uXTtyZXR1cm4gbnVsbD09PWV8fHQuZGlyZWN0aW9uPT09aWMuVU5TRVR8fGkuc29ydCgocixvKT0+e2xldCBzPWZoZShyLGUpLGE9ZmhlKG8sZSk7aWYocy5sZW5ndGghPT1hLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYEludmFyaWFudCBlcnJvcjogYSBnaXZlbiBzb3J0IHNob3VsZCByZXN1bHQgaW4gc2FtZSBudW1iZXIgb2YgaXRlbXM6ICR7dH1gKTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrKyl7bGV0IGM9c1tsXSx1PWFbbF07aWYoYyE9PXUpe2lmKHZvaWQgMD09PWN8fHZvaWQgMD09PXUpcmV0dXJuIHZvaWQgMD09PXU/LTE6MTtpZih0eXBlb2YgYyE9dHlwZW9mIHUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29tcGFyZSB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzOiAke3R5cGVvZiBjfSB2cy4gJHt0eXBlb2YgdX1gKTtyZXR1cm4gYzx1PT0odC5kaXJlY3Rpb249PT1pYy5BU0MpPy0xOjF9fXJldHVybiAwfSksaX0obyxzKSkpO3JldHVybiBMdChbaSx0aGlzLnN0b3JlLnNlbGVjdChzSCldKS5waXBlKEwoKFtvLHNdKT0+e2lmKCF0aGlzLnVzZVBhZ2luYXRpb24pcmV0dXJuIG8uc2xpY2UoKTtsZXR7cGFnZVNpemU6YSxwYWdlSW5kZXg6bH09cztyZXR1cm4gby5zbGljZShsKmEsKGwrMSkqYSl9KSx6bihbXSkpfWdldFJ1blRhYmxlSXRlbXNGb3JFeHBlcmltZW50KGUpe3JldHVybiBMdChbdGhpcy5zdG9yZS5zZWxlY3QocmQse2V4cGVyaW1lbnRJZDplfSksdGhpcy5zdG9yZS5zZWxlY3Qodkkse2V4cGVyaW1lbnRJZDplfSksdGhpcy5zdG9yZS5zZWxlY3Qob28pLHRoaXMuc3RvcmUuc2VsZWN0KG5jKSx0aGlzLnN0b3JlLnNlbGVjdChZdSldKS5waXBlKEwoKFtpLHIsbyxzLGFdKT0+aS5tYXAobD0+e2xldCBjPW5ldyBNYXA7KGwuaHBhcmFtc3x8W10pLmZvckVhY2goZD0+e2Muc2V0KGQubmFtZSxkLnZhbHVlKX0pO2xldCB1PW5ldyBNYXA7cmV0dXJuKGwubWV0cmljc3x8W10pLmZvckVhY2goZD0+e3Uuc2V0KGQudGFnLGQudmFsdWUpfSkse3J1bjpsLGV4cGVyaW1lbnROYW1lOnI/Lm5hbWV8fCIiLGV4cGVyaW1lbnRBbGlhczphW2VdLHNlbGVjdGVkOkJvb2xlYW4obyYmby5nZXQobC5pZCkpLHJ1bkNvbG9yOnNbbC5pZF0saHBhcmFtczpjLG1ldHJpY3M6dX19KSkpfW9uUnVuU2VsZWN0aW9uVG9nZ2xlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gob0koe3J1bklkOmUucnVuLmlkfSkpfW9uUnVuU2VsZWN0aW9uRGJsQ2xpY2soZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChzSSh7cnVuSWQ6ZS5ydW4uaWR9KSl9b25QYWdlU2VsZWN0aW9uVG9nZ2xlKGUpe2xldHtpdGVtczppfT1lLHI9aS5tYXAoKHtydW46b30pPT5vLmlkKTt0aGlzLnN0b3JlLmRpc3BhdGNoKGFJKHtydW5JZHM6cn0pKX1vblBhZ2luYXRpb25DaGFuZ2UoZSl7aWYoIXRoaXMudXNlUGFnaW5hdGlvbil0aHJvdyBuZXcgRXJyb3IoIlBhZ2luYXRpb24gZXZlbnRzIGNhbm5vdCBiZSBkaXNwYXRjaGVkIHdoZW4gcGFnaW5hdGlvbiBpcyBkaXNhYmxlZCIpO2xldHtwYWdlSW5kZXg6aSxwYWdlU2l6ZTpyfT1lO3RoaXMuc3RvcmUuZGlzcGF0Y2gobEkoe3BhZ2VJbmRleDppLHBhZ2VTaXplOnJ9KSl9b25Tb3J0Q2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goY0koZSkpfW9uUmVnZXhGaWx0ZXJDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChOTSh7cmVnZXhTdHJpbmc6ZX0pKX1vblJ1bkNvbG9yQ2hhbmdlKHtydW5JZDplLG5ld0NvbG9yOml9KXt0aGlzLnN0b3JlLmRpc3BhdGNoKHVJKHtydW5JZDplLG5ld0NvbG9yOml9KSl9b25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQoZSl7bGV0e2hwYXJhbU5hbWU6aSxmaWx0ZXJWYWx1ZXM6cixpbmNsdWRlVW5kZWZpbmVkOm99PWU7dGhpcy5zdG9yZS5kaXNwYXRjaChHbS5ocGFyYW1zRGlzY3JldGVIcGFyYW1GaWx0ZXJDaGFuZ2VkKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxocGFyYW1OYW1lOmksZmlsdGVyVmFsdWVzOnIsaW5jbHVkZVVuZGVmaW5lZDpvfSkpfW9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkKGUpe2xldHtuYW1lOmksZmlsdGVyTG93ZXJWYWx1ZTpyLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOnN9PWU7dGhpcy5zdG9yZS5kaXNwYXRjaChHbS5ocGFyYW1zSW50ZXJ2YWxIcGFyYW1GaWx0ZXJDaGFuZ2VkKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxocGFyYW1OYW1lOmksZmlsdGVyTG93ZXJWYWx1ZTpyLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOnN9KSl9b25NZXRyaWNGaWx0ZXJDaGFuZ2VkKGUpe2xldHtuYW1lOmksaW5jbHVkZVVuZGVmaW5lZDpyLGZpbHRlckxvd2VyVmFsdWU6byxmaWx0ZXJVcHBlclZhbHVlOnN9PWU7dGhpcy5zdG9yZS5kaXNwYXRjaChHbS5ocGFyYW1zTWV0cmljRmlsdGVyQ2hhbmdlZCh7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHMsbWV0cmljVGFnOmksaW5jbHVkZVVuZGVmaW5lZDpyLGZpbHRlckxvd2VyVmFsdWU6byxmaWx0ZXJVcHBlclZhbHVlOnN9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXRhYmxlIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZldCgiZmxleC1sYXlvdXQiLGkudXNlRmxleGlibGVMYXlvdXQpfSxpbnB1dHM6e3VzZUZsZXhpYmxlTGF5b3V0OiJ1c2VGbGV4aWJsZUxheW91dCIsdXNlUGFnaW5hdGlvbjoidXNlUGFnaW5hdGlvbiIsY29sdW1uczoiY29sdW1ucyIsZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIsc2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MifSxkZWNsczoxMSx2YXJzOjM1LGNvbnN0czpbWzMsImV4cGVyaW1lbnRJZHMiLCJ1c2VGbGV4aWJsZUxheW91dCIsIm51bVNlbGVjdGVkSXRlbXMiLCJjb2x1bW5zIiwiaHBhcmFtQ29sdW1ucyIsIm1ldHJpY0NvbHVtbnMiLCJzaG93RXhwZXJpbWVudE5hbWUiLCJwYWdlSXRlbXMiLCJmaWx0ZXJlZEl0ZW1zTGVuZ3RoIiwiYWxsSXRlbXNMZW5ndGgiLCJsb2FkaW5nIiwicGFnaW5hdGlvbk9wdGlvbiIsInJlZ2V4RmlsdGVyIiwic29ydE9wdGlvbiIsInVzZVBhZ2luYXRpb24iLCJvblNlbGVjdGlvblRvZ2dsZSIsIm9uU2VsZWN0aW9uRGJsQ2xpY2siLCJvblBhZ2VTZWxlY3Rpb25Ub2dnbGUiLCJvblBhZ2luYXRpb25DaGFuZ2UiLCJvblJlZ2V4RmlsdGVyQ2hhbmdlIiwib25Tb3J0Q2hhbmdlIiwib25SdW5Db2xvckNoYW5nZSIsIm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkIiwib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQiLCJvbk1ldHJpY0ZpbHRlckNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsInJ1bnMtdGFibGUtY29tcG9uZW50IiwwKSxQKCJvblNlbGVjdGlvblRvZ2dsZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25SdW5TZWxlY3Rpb25Ub2dnbGUobyl9KSgib25TZWxlY3Rpb25EYmxDbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25SdW5TZWxlY3Rpb25EYmxDbGljayhvKX0pKCJvblBhZ2VTZWxlY3Rpb25Ub2dnbGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUGFnZVNlbGVjdGlvblRvZ2dsZShvKX0pKCJvblBhZ2luYXRpb25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUGFnaW5hdGlvbkNoYW5nZShvKX0pKCJvblJlZ2V4RmlsdGVyQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlZ2V4RmlsdGVyQ2hhbmdlKG8pfSkoIm9uU29ydENoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Tb3J0Q2hhbmdlKG8pfSkoIm9uUnVuQ29sb3JDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUnVuQ29sb3JDaGFuZ2Uobyl9KSgib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkKG8pfSkoIm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZChvKX0pKCJvbk1ldHJpY0ZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTWV0cmljRmlsdGVyQ2hhbmdlZChvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLEIoNCwiYXN5bmMiKSxCKDUsImFzeW5jIiksQig2LCJhc3luYyIpLEIoNywiYXN5bmMiKSxCKDgsImFzeW5jIiksQig5LCJhc3luYyIpLEIoMTAsImFzeW5jIiksdigpKSwyJmUmJnkoImV4cGVyaW1lbnRJZHMiLGkuZXhwZXJpbWVudElkcykoInVzZUZsZXhpYmxlTGF5b3V0IixpLnVzZUZsZXhpYmxlTGF5b3V0KSgibnVtU2VsZWN0ZWRJdGVtcyIsVSgxLDE1LGkubnVtU2VsZWN0ZWRJdGVtcyQpKSgiY29sdW1ucyIsaS5jb2x1bW5zKSgiaHBhcmFtQ29sdW1ucyIsVSgyLDE3LGkuaHBhcmFtQ29sdW1ucyQpKSgibWV0cmljQ29sdW1ucyIsVSgzLDE5LGkubWV0cmljQ29sdW1ucyQpKSgic2hvd0V4cGVyaW1lbnROYW1lIixpLmlzRXhwZXJpbWVudE5hbWVWaXNpYmxlKCkpKCJwYWdlSXRlbXMiLFUoNCwyMSxpLnBhZ2VJdGVtcyQpKSgiZmlsdGVyZWRJdGVtc0xlbmd0aCIsVSg1LDIzLGkuZmlsdGVyZWRJdGVtc0xlbmd0aCQpKSgiYWxsSXRlbXNMZW5ndGgiLFUoNiwyNSxpLmFsbEl0ZW1zTGVuZ3RoJCkpKCJsb2FkaW5nIixVKDcsMjcsaS5sb2FkaW5nJCkpKCJwYWdpbmF0aW9uT3B0aW9uIixVKDgsMjksaS5wYWdpbmF0aW9uT3B0aW9uJCkpKCJyZWdleEZpbHRlciIsVSg5LDMxLGkucmVnZXhGaWx0ZXIkKSkoInNvcnRPcHRpb24iLFUoMTAsMzMsaS5zb3J0T3B0aW9uJCkpKCJ1c2VQYWdpbmF0aW9uIixpLnVzZVBhZ2luYXRpb24pfSxkZXBlbmRlbmNpZXM6W2hoZSxHZV0sc3R5bGVzOlsiLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB9XG5cbiAgICAgIC5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICAgPiBydW5zLXRhYmxlLWNvbXBvbmVudFtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLF9oZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXNlbGVjdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e2V4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMiLHNob3dIcGFyYW1zQW5kTWV0cmljczoic2hvd0hwYXJhbXNBbmRNZXRyaWNzIixjb2x1bW5zOiJjb2x1bW5zIn0sZGVjbHM6MSx2YXJzOjQsY29uc3RzOltbMywidXNlRmxleGlibGVMYXlvdXQiLCJjb2x1bW5zIiwiZXhwZXJpbWVudElkcyIsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmTygwLCJydW5zLXRhYmxlIiwwKSwyJmUmJnkoInVzZUZsZXhpYmxlTGF5b3V0IiwhMCkoImNvbHVtbnMiLGkuY29sdW1ucykoImV4cGVyaW1lbnRJZHMiLGkuZXhwZXJpbWVudElkcykoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MpfSxkZXBlbmRlbmNpZXM6W2doZV0sc3R5bGVzOlsicnVucy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxPYj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmV4cGVyaW1lbnRJZHMkPXRoaXMuc3RvcmUuc2VsZWN0KFdvKS5waXBlKEwoaT0+aT8/W10pKSx0aGlzLmNvbHVtbnMkPXRoaXMuc3RvcmUuc2VsZWN0KFdvKS5waXBlKEwoaT0+W3ZhLkNIRUNLQk9YLHZhLlJVTl9OQU1FLGkmJmkubGVuZ3RoPjE/dmEuRVhQRVJJTUVOVF9OQU1FOm51bGwsdmEuUlVOX0NPTE9SXS5maWx0ZXIocj0+bnVsbCE9PXIpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXNlbGVjdG9yIl1dLGlucHV0czp7c2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MifSxkZWNsczozLHZhcnM6Nyxjb25zdHM6W1szLCJleHBlcmltZW50SWRzIiwiY29sdW1ucyIsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE8oMCwicnVucy1zZWxlY3Rvci1jb21wb25lbnQiLDApLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIikpLDImZSYmeSgiZXhwZXJpbWVudElkcyIsVSgxLDMsaS5leHBlcmltZW50SWRzJCkpKCJjb2x1bW5zIixVKDIsNSxpLmNvbHVtbnMkKSkoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MpfSxkZXBlbmRlbmNpZXM6W19oZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdmhlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZGFzaGJvYXJkIl1dLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWyJzaWRlYmFyIiwiIl0sWyJtYWluIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJ0Yi1kYXNoYm9hcmQtbGF5b3V0IiksTygxLCJydW5zLXNlbGVjdG9yIiwwKSgyLCJtZXRyaWNzLW1haW4tdmlldyIsMSksdigpKX0sZGVwZW5kZW5jaWVzOltSb2UsenBlLE9iXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7b3ZlcmZsb3c6aGlkZGVufS5ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjQ1LDE1NywuODUpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmViM2I7Y29sb3I6IzIxMjEyMTtkaXNwbGF5OmJsb2NrO2ZsZXg6MCAwfXRiLWRhc2hib2FyZC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxO292ZXJmbG93OmhpZGRlbn1uYXZbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlYmViZWI7ZmxleDpub25lO3dpZHRoOjM0MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG5hdltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG5hdltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2JvcmRlci1yaWdodC1jb2xvcjojNTU1fW1ldHJpY3MtbWFpbi12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFhHPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxwbixQbl19KSxufSkoKSx5aGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lXX0pLG59KSgpLGJoZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksa2I9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLGJoZV19KSxufSkoKSx0Rj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsSWIscG5dfSksbn0pKCksbkY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLFdoXX0pLG59KSgpLHhoZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbb2hlLE1lLGtiLHRGLGFnLFBuLExzLE9oLEhhLHBuLHpoLFhwZSxfZCxacGUsbmhlLG5GLEUyXX0pLG59KSgpLEZiPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSx4aGVdfSksbn0pKCksTmI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLGlGPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxwbl19KSxufSkoKSxDaGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5heGlzRGlyZWN0aW9uPXBhLlZFUlRJQ0FMLHRoaXMuY2FyZEZvYkhlbHBlcj17Z2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbi5iaW5kKHRoaXMpLGdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyl9fWdldEF4aXNQb3NpdGlvbkZyb21TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy50ZW1wb3JhbFNjYWxlKHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX1nZXRBeGlzUG9zaXRpb25Gcm9tRW5kU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD9udWxsOnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldEhpZ2hlc3RTdGVwKCl7cmV0dXJuIHRoaXMuc3RlcHNbdGhpcy5zdGVwcy5sZW5ndGgtMV19Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLnN0ZXBzWzBdfWdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uKGUpe2xldCBpPTA7Zm9yKDtlPnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnN0ZXBzW2ldKSYmaTx0aGlzLnN0ZXBzLmxlbmd0aC0xOylpKys7cmV0dXJuIHRoaXMuc3RlcHNbaV19Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtsZXQgaT10aGlzLnN0ZXBzLmxlbmd0aC0xO2Zvcig7ZTx0aGlzLnRlbXBvcmFsU2NhbGUodGhpcy5zdGVwc1tpXSkmJmk+MDspaS0tO3JldHVybiB0aGlzLnN0ZXBzW2ldfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3N0ZXBzOiJzdGVwcyIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsdGVtcG9yYWxTY2FsZToidGVtcG9yYWxTY2FsZSJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6Nyxjb25zdHM6W1szLCJheGlzRGlyZWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsImVuZFN0ZXBBeGlzUG9zaXRpb24iLCJoaWdoZXN0U3RlcCIsImxvd2VzdFN0ZXAiLCJjYXJkRm9iSGVscGVyIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImNhcmQtZm9iLWNvbnRyb2xsZXIiLDApLFAoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChvKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpfSksdigpKSwyJmUmJnkoImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJoaWdoZXN0U3RlcCIsaS5nZXRIaWdoZXN0U3RlcCgpKSgibG93ZXN0U3RlcCIsaS5nZXRMb3dlc3RTdGVwKCkpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpfSxkZXBlbmRlbmNpZXM6W0drXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxNaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W2lGLE1lLHFoLE5iXX0pLG59KSgpO054KFdrLFtkbixCZSxoZyxheSxDaGVdLFtdKTt2YXIgTGI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lXX0pLG59KSgpLHJGPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxrYl19KSxufSkoKSxCYj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUscG5dfSksbn0pKCksd2hlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxNaGUsUG4scG4sX2QsckYsTGIsQmJdfSksbn0pKCksU2hlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxQbixwbixfZCxXaCxyRixMYixCYl19KSxufSkoKSxvRj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUscG5dfSksbn0pKCksRWhlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxwbixvRl19KSxufSkoKSxUaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLHNzLFBuLHBuLEhhLHpoXX0pLG59KSgpLERoZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsc3MsVGhlLHFoXX0pLG59KSgpLEFoZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsanIsUG4sT2gsSGEsbGMsU0ldfSksbn0pKCksSWhlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltpRixNZSxBaGUsRWhlLGtiLE5iLERoZSxQbixwbix6aCxfZCxxaCxMYixCYl19KSxufSkoKSxQaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLFNoZSxJaGUsd2hlLE5iXX0pLG59KSgpLFJoZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsbGNdfSksbn0pKCksc0Y9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLFJoZSxQbixnUixMcyxwbixsYyxXaCxjdixuRl19KSxufSkoKSxPaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLG9GLExzLEoyXX0pLG59KSgpLGtoZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbUGhlLE1lLHRGLEliLFBuLGdSLHBuLEhhLF9kLHNGLE9oZSxaY119KSxufSkoKSxGaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLHloZSxYRyxraGUscG4sc0YsRmJdfSksbn0pKCk7ZnVuY3Rpb24gRUplKCl7cmV0dXJuW3thY3Rpb25DcmVhdG9yOnJ5LGFsZXJ0RnJvbUFjdGlvbjpuPT57bGV0e3dhc1Bpbm5lZDp0LGNhbkNyZWF0ZU5ld1BpbnM6ZX09bjtyZXR1cm4gdHx8ZT9udWxsOntsb2NhbGl6ZWRNZXNzYWdlOiJNYXggcGluIGxpbWl0IGV4Y2VlZGVkLiBSZW1vdmUgZXhpc3RpbmcgcGlucyBiZWZvcmUgYWRkaW5nIG1vcmUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvNDI0MiJ9fX1dfWZ1bmN0aW9uIFRKZSgpe3JldHVybiBKKG9wLG49Pih7c2NhbGFyU21vb3RoaW5nOm59KSl9ZnVuY3Rpb24gREplKCl7cmV0dXJuIEooaHYsbj0+KHtpZ25vcmVPdXRsaWVyczpufSkpfWZ1bmN0aW9uIEFKZSgpe3JldHVybiBKKHB2LG49Pih7dG9vbHRpcFNvcnQ6U3RyaW5nKG4pfSkpfWZ1bmN0aW9uIElKZSgpe3JldHVybiBKKEhJLG49Pih7dGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZDpufSkpfWZ1bmN0aW9uIFBKZSgpe3JldHVybiBKKGR2LG49Pih7dGltZVNlcmllc0NhcmRNaW5XaWR0aDpufSkpfWZ1bmN0aW9uIFJKZSgpe3JldHVybiBKKGZ2LG49Pih7c3RlcFNlbGVjdG9yRW5hYmxlZDpufSkpfWZ1bmN0aW9uIE9KZSgpe3JldHVybiBKKG12LG49Pih7cmFuZ2VTZWxlY3Rpb25FbmFibGVkOm59KSl9ZnVuY3Rpb24ga0plKCl7cmV0dXJuIEooWW0sbj0+KHtsaW5rZWRUaW1lRW5hYmxlZDpufSkpfXZhciBOaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6TVUsdXNlRmFjdG9yeTpBb2UsZGVwczpbd1VdfSx7cHJvdmlkZTp3VSx1c2VWYWx1ZTpJSX1dLGltcG9ydHM6W01lLEpfLGVjLEJzLmZvclBsdWdpbihCTSx2aGUpLFNJLEZoZSx3ci5mb3JGZWF0dXJlKEFJLEVvZSxNVSkscm8uZm9yRmVhdHVyZShbRG9lXSksSnUucmVnaXN0ZXJBbGVydEFjdGlvbnMoRUplKSxTci5kZWZpbmVHbG9iYWxTZXR0aW5nKFRKZSksU3IuZGVmaW5lR2xvYmFsU2V0dGluZyhESmUpLFNyLmRlZmluZUdsb2JhbFNldHRpbmcoQUplKSxTci5kZWZpbmVHbG9iYWxTZXR0aW5nKElKZSksU3IuZGVmaW5lR2xvYmFsU2V0dGluZyhQSmUpLFNyLmRlZmluZUdsb2JhbFNldHRpbmcoUkplKSxTci5kZWZpbmVHbG9iYWxTZXR0aW5nKE9KZSksU3IuZGVmaW5lR2xvYmFsU2V0dGluZyhrSmUpXX0pLG59KSgpO2Z1bmN0aW9uIExoZShuKXtyZXR1cm4gbi5zdGFydHNXaXRoKCJjb3VudEAiKX1mdW5jdGlvbiBhRihuKXtyZXR1cm4gbi5zdGFydHNXaXRoKCJuUE1JQCIpfHxuLnN0YXJ0c1dpdGgoIm5QTUlfZGlmZkAiKX1mdW5jdGlvbiBWYihuKXtyZXR1cm4gbi5zdGFydHNXaXRoKCJuUE1JQCIpfWZ1bmN0aW9uIFNzKG4pe3JldHVybiBuLnNwbGl0KCJAIiwyKVsxXX1mdW5jdGlvbiBxJGUobil7bGV0IGUsaSx0PW4ubGVuZ3RoO2Zvcig7dDspaT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdC0tKSxlPW5bdF0sblt0XT1uW2ldLG5baV09ZTtyZXR1cm4gbn1mdW5jdGlvbiBZJGUobil7cmV0dXJuWy4uLm5ldyBBcnJheShuKV0ubWFwKCh0LGUpPT5lKX1mdW5jdGlvbiB2RihuLHQpe3JldHVybmAke3R9LyR7bn1gfW9OKCRmZSgpLDEpO3ZhciB5Rj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lLHRoaXMuaHR0cFBhdGhQcmVmaXg9ImRhdGEvcGx1Z2luL25wbWkifWZldGNoRGF0YShlKXtyZXR1cm4gbHIodGhpcy5mZXRjaEFubm90YXRpb25zKGUpLHRoaXMuZmV0Y2hNZXRyaWNzKGUpLHRoaXMuZmV0Y2hWYWx1ZXMoZSksdGhpcy5mZXRjaEVtYmVkZGluZ3MoZSkpLnBpcGUoTCgoW2kscixvLHNdKT0+e2xldCBjLGE9e30sbD17fSx1PTA7Zm9yKGxldCBkIG9mIE9iamVjdC5rZXlzKGkpKWZvcihsZXQgcCBpbiBpW2RdKXtsZXQgaD1pW2RdW3BdO09iamVjdC5rZXlzKHMpLmxlbmd0aCYmIWxbaF0mJnNbZF1bcF0mJnNbZF1bcF0uc29tZSh4PT4wIT09eCkmJihsW2hdPXt2ZWN0b3I6c1tkXVtwXSxpbmRleDp1LG5hbWU6aH0sdSs9MSk7bGV0IGY9bmV3IE1hcDtmb3IobGV0IHggaW4gcltkXSl7bGV0IGc9cltkXVt4XSxiPVNzKGcpLEQ9Zi5nZXQoYik7RHx8KEQ9e25QTUlWYWx1ZTpudWxsLGNvdW50VmFsdWU6bnVsbCxhbm5vdGF0aW9uOmgsbWV0cmljOmIscnVuOmR9LGYuc2V0KGIsRCkpLExoZShnKT9ELmNvdW50VmFsdWU9b1tkXVtwXVt4XTphRihnKSYmKEQublBNSVZhbHVlPW9bZF1bcF1beF0pfWFbaF09Wy4uLmFbaF0/YVtoXTpbXSwuLi5mLnZhbHVlcygpXX1yZXR1cm4gT2JqZWN0LmtleXMobCkubGVuZ3RoJiYoYz1mdW5jdGlvbihuKXtsZXQgdD1PYmplY3Qua2V5cyhuKTtyZXR1cm57cG9pbnRzOm4scG9pbnRLZXlzOnQsc2h1ZmZsZWREYXRhSW5kaWNlczpxJGUoWSRlKHQubGVuZ3RoKSksaGFzVW1hcFJ1bjohMX19KGwpKSx7YW5ub3RhdGlvbkRhdGE6YSxtZXRyaWNzOnIsZW1iZWRkaW5nRGF0YVNldDpjfX0pLGZvKGk9PmkgaW5zdGFuY2VvZiBucCYmNDAwPD1pLnN0YXR1cyYmaS5zdGF0dXM8NTAwP1h0KHthbm5vdGF0aW9uRGF0YTp7fSxtZXRyaWNzOnt9LGVtYmVkZGluZ0RhdGFTZXQ6dm9pZCAwfSk6d2MoaSkpKX1mZXRjaEFubm90YXRpb25zKGUpe2xldCBpPWUubWFwKHI9PnRoaXMuaHR0cC5nZXQoYC9leHBlcmltZW50LyR7cn0vJHt0aGlzLmh0dHBQYXRoUHJlZml4fS9hbm5vdGF0aW9uc2ApLnBpcGUoTChzPT5mdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobikubWFwKChbZSxpXSk9Plt2RihlLHQpLGldKSl9KHMscikpKSk7cmV0dXJuIGxyKGkpLnBpcGUoTChyPT57bGV0IG89e307Zm9yKGxldCBzIG9mIHIpbz17Li4ubywuLi5zfTtyZXR1cm4gb30pKX1mZXRjaE1ldHJpY3MoZSl7bGV0IGk9ZS5tYXAocj0+dGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHtyfS8ke3RoaXMuaHR0cFBhdGhQcmVmaXh9L21ldHJpY3NgKS5waXBlKEwocz0+ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW2UsaV0pPT5bdkYoZSx0KSxpXSkpfShzLHIpKSkpO3JldHVybiBscihpKS5waXBlKEwocj0+e2xldCBvPXt9O2ZvcihsZXQgcyBvZiByKW89ey4uLm8sLi4uc307cmV0dXJuIG99KSl9ZmV0Y2hWYWx1ZXMoZSl7bGV0IGk9ZS5tYXAocj0+dGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHtyfS8ke3RoaXMuaHR0cFBhdGhQcmVmaXh9L3ZhbHVlc2ApLnBpcGUoTChzPT5mdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobikubWFwKChbZSxpXSk9Plt2RihlLHQpLGldKSl9KHMscikpKSk7cmV0dXJuIGxyKGkpLnBpcGUoTChyPT57bGV0IG89e307Zm9yKGxldCBzIG9mIHIpbz17Li4ubywuLi5zfTtyZXR1cm4gb30pKX1mZXRjaEVtYmVkZGluZ3MoZSl7bGV0IGk9ZS5tYXAocj0+dGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHtyfS8ke3RoaXMuaHR0cFBhdGhQcmVmaXh9L2VtYmVkZGluZ3NgKS5waXBlKEwocz0+ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW2UsaV0pPT5bdkYoZSx0KSxpXSkpfShzLHIpKSkpO3JldHVybiBscihpKS5waXBlKEwocj0+e2xldCBvPXt9O2ZvcihsZXQgcyBvZiByKW89ey4uLm8sLi4uc307cmV0dXJuIG99KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooa2EpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx0bWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbeUZdLGltcG9ydHM6W0t1XX0pLG59KSgpLGJGPWJlKCJbTlBNSV0gblBNSSBMb2FkZWQiKSx4Rj1iZSgiW05QTUldIG5QTUkgUGx1Z2luIERhdGEgUmVxdWVzdGVkIiksQ0Y9YmUoIltOUE1JXSBuUE1JIFBsdWdpbiBEYXRhIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE1GPWJlKCJbTlBNSV0gblBNSSBQbHVnaW4gRGF0YSBSZXF1ZXN0IEZhaWxlZCIpLHdGPWJlKCJbTlBNSV0gQWRkaW5nL1JlbW92aW5nIEFubm90YXRpb25zIHRvL2Zyb20gU2VsZWN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxSRT1iZSgiW05QTUldIEFubm90YXRpb25zIFNldCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFNGPWJlKCJbTlBNSV0gQ2xlYXJpbmcgdGhlIEFubm90YXRpb24gU2VsZWN0aW9uIiksRUY9YmUoIltOUE1JXSBBZGRpbmcvUmVtb3ZpbmcgQW5ub3RhdGlvbnMgdG8vZnJvbSBGbGFnZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVEY9YmUoIltOUE1JXSBBZGRpbmcvUmVtb3ZpbmcgQW5ub3RhdGlvbnMgdG8vZnJvbSBIaWRkZW4iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxqYj1iZSgiW05QTUldIEFubm90YXRpb25zIFJlZ2V4IENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPRT1iZSgiW05QTUldIE1ldHJpY3MgUmVnZXggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLERGPWJlKCJbTlBNSV0gTWV0cmljIEZpbHRlciBBZGRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEdiPWJlKCJbTlBNSV0gTWV0cmljIEZpbHRlciBSZW1vdmVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksV2I9YmUoIltOUE1JXSBNZXRyaWMgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBRj1iZSgiW05QTUldIEFubm90YXRpb24gU29ydCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSUY9YmUoIltOUE1JXSBTaW1pbGFyaXR5IFNvcnQgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFBGPWJlKCJbTlBNSV0gVG9nZ2xlIFBDIEV4cGFuZGVkIiksUkY9YmUoIltOUE1JXSBUb2dnbGUgQW5ub3RhdGlvbnMgRXhwYW5kZWQiKSxxYj1iZSgiW05QTUldIFRvZ2dsZSBTaWRlYmFyIEV4cGFuZGVkIiksT0Y9YmUoIltOUE1JXSBTaG93IENvdW50cyBUb2dnbGVkIiksa0Y9YmUoIltOUE1JXSBTaG93IEhpZGRlbiBBbm5vdGF0aW9ucyBUb2dnbGVkIiksRkY9YmUoIltOUE1JXSBFbWJlZGRpbmdzIFZpZXcgVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE5GPWJlKCJbTlBNSV0gU2lkZWJhciBXaWR0aCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTEY9YmUoIltOUE1JXSBFbWJlZGRpbmdzIFNpZGViYXIgV2lkdGggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFliPWJlKCJbTlBNSV0gRW1iZWRkaW5ncyBTaWRlYmFyIEV4cGFuZGVkIFRvZ2dsZWQiKSxubWU9YmUoIltOUE1JXSBDaGFuZ2UgRW1iZWRkaW5nIERhdGFTZXQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxzMD0oKCk9PihmdW5jdGlvbihuKXtuW24uQU5EPTBdPSJBTkQifShzMHx8KHMwPXt9KSksczApKSgpLG11PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5NRVRSSUM9MF09Ik1FVFJJQyIsbltuLk9QRVJBVE9SPTFdPSJPUEVSQVRPUiJ9KG11fHwobXU9e30pKSxtdSkpKCksa3A9KCgpPT4oZnVuY3Rpb24obil7bltuLkRFRkFVTFQ9MF09IkRFRkFVTFQiLG5bbi5FTUJFRERJTkdTPTFdPSJFTUJFRERJTkdTIn0oa3B8fChrcD17fSkpLGtwKSkoKSwkcj0oKCk9PihmdW5jdGlvbihuKXtuW24uREVTQ0VORElORz0wXT0iREVTQ0VORElORyIsbltuLkFTQ0VORE5HPTFdPSJBU0NFTkRORyIsbltuLlNJTUlMQVI9Ml09IlNJTUlMQVIiLG5bbi5ESVNTSU1JTEFSPTNdPSJESVNTSU1JTEFSIn0oJHJ8fCgkcj17fSkpLCRyKSkoKSx1bz1NcigibnBtaSIpLGltZT1KKHVvLG49Pm4ucGx1Z2luRGF0YUxvYWRlZC5zdGF0ZSksUGY9Sih1byxuPT5uLmFubm90YXRpb25EYXRhKSxSZj1KKHVvLG49Pm4ucnVuVG9NZXRyaWNzKSxCRj1KKHVvLG49Pm4uZW1iZWRkaW5nRGF0YVNldCksdmM9Sih1byxuPT5uLnNlbGVjdGVkQW5ub3RhdGlvbnMpLFZGPUoodW8sbj0+bi5mbGFnZ2VkQW5ub3RhdGlvbnMpLFhiPUoodW8sbj0+bi5oaWRkZW5Bbm5vdGF0aW9ucyksUWI9Sih1byxuPT5uLmFubm90YXRpb25zUmVnZXgpLHJtZT1KKHVvLG49Pm4ubWV0cmljc1JlZ2V4KSxIRj1KKHVvLG49Pm4ubWV0cmljQXJpdGhtZXRpYyksSWw9Sih1byxuPT5uLm1ldHJpY0ZpbHRlcnMpLEtiPUoodW8sbj0+bi5zb3J0KSxvbWU9Sih1byxuPT5uLnBjRXhwYW5kZWQpLFVGPUoodW8sbj0+bi5hbm5vdGF0aW9uc0V4cGFuZGVkKSx6Rj1KKHVvLG49Pm4uc2lkZWJhckV4cGFuZGVkKSxqRj1KKHVvLG49Pm4uc2hvd0NvdW50cyksWmI9Sih1byxuPT5uLnNob3dIaWRkZW5Bbm5vdGF0aW9ucyksc21lPUoodW8sbj0+bi52aWV3QWN0aXZlKSxPZj1KKHVvLG49Pm4uc2lkZWJhcldpZHRoKSxhbWU9Sih1byxuPT5uLmVtYmVkZGluZ3NNZXRyaWMpLGxtZT1KKHVvLG49Pm4uZW1iZWRkaW5nc1NpZGViYXJXaWR0aCksR0Y9Sih1byxuPT5uLmVtYmVkZGluZ3NTaWRlYmFyRXhwYW5kZWQpLGNtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuZGF0YVNvdXJjZT1yLHRoaXMubG9hZERhdGEkPWNyKCgpPT5KdCh0aGlzLmxvYWRQbHVnaW5EYXRhKCkpLnBpcGUoTCgoKT0+KHt9KSkpLHtkaXNwYXRjaDohMX0pfWxvYWRQbHVnaW5EYXRhKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShpaShiRiksV3QodGhpcy5zdG9yZS5zZWxlY3QoaW1lKSx0aGlzLnN0b3JlLnNlbGVjdChXbykpLFllKChbLGUsaV0pPT5lIT09T2UuTE9BRElORyYmbnVsbCE9PWkpLGt0KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKHhGKCkpKSx4bigoWywsZV0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hEYXRhKGUpLnBpcGUoa3QoaT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goQ0YoaSkpfSksTCgoKT0+e30pLGZvKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaChNRigpKSxlbykpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKFBvKSxqKENlKSxqKHlGKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdW1lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktaW5hY3RpdmUtdmlldyJdXSxkZWNsczo2LHZhcnM6MCxjb25zdHM6W1sxLCJjb250YWluZXIiXSxbMSwidGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIpKDEsImRpdiIsMCkoMiwiZGl2IiwxKSxBKDMsIm5QTUkgaXMgaW5hY3RpdmUgYmVjYXVzZSBubyBkYXRhIGlzIGF2YWlsYWJsZS4iKSx2KCksXyg0LCJkaXYiKSxBKDUsIiBUbyB1c2UgdGhlIG5QTUksIGNhbGN1bGF0ZSBuUE1JIHZhbHVlcywgYW5kIGxvZyB0aGVtIHVzaW5nIHRoZSBzdW1tYXJ5IHdyaXRlci4gIiksdigpKCkoKSl9LHN0eWxlczpbIi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmb250LWZhbWlseTogUm9ib3RvO1xuICBmb250LXNpemU6IDE1cHg7XG4gIHBhZGRpbmc6IDUwcHg7XG59XG5cbi50aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzNSU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xufSJdfSksbn0pKCksdGV0PXZyKHtwbHVnaW5EYXRhTG9hZGVkOntzdGF0ZTpPZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxhbm5vdGF0aW9uRGF0YTp7fSxlbWJlZGRpbmdEYXRhU2V0OnZvaWQgMCxydW5Ub01ldHJpY3M6e30sc2VsZWN0ZWRBbm5vdGF0aW9uczpbXSxmbGFnZ2VkQW5ub3RhdGlvbnM6W10saGlkZGVuQW5ub3RhdGlvbnM6W10sYW5ub3RhdGlvbnNSZWdleDoiIixtZXRyaWNzUmVnZXg6IiIsbWV0cmljQXJpdGhtZXRpYzpbXSxtZXRyaWNGaWx0ZXJzOnt9LHNvcnQ6e21ldHJpYzoiIixvcmRlcjokci5ERVNDRU5ESU5HfSxwY0V4cGFuZGVkOiEwLGFubm90YXRpb25zRXhwYW5kZWQ6ITAsc2lkZWJhckV4cGFuZGVkOiEwLHNob3dDb3VudHM6ITAsc2hvd0hpZGRlbkFubm90YXRpb25zOiExLHNpZGViYXJXaWR0aDozMDAsdmlld0FjdGl2ZTprcC5ERUZBVUxULGVtYmVkZGluZ3NNZXRyaWM6IiIsZW1iZWRkaW5nc1NpZGViYXJXaWR0aDo1MDAsZW1iZWRkaW5nc1NpZGViYXJFeHBhbmRlZDohMH0sU2UoeEYsbj0+KHsuLi5uLHBsdWdpbkRhdGFMb2FkZWQ6ey4uLm4ucGx1Z2luRGF0YUxvYWRlZCxzdGF0ZTpPZS5MT0FESU5HfX0pKSxTZShNRixuPT4oey4uLm4scGx1Z2luRGF0YUxvYWRlZDp7Li4ubi5wbHVnaW5EYXRhTG9hZGVkLHN0YXRlOk9lLkZBSUxFRH19KSksU2UoQ0YsKG4se2Fubm90YXRpb25EYXRhOnQsbWV0cmljczplLGVtYmVkZGluZ0RhdGFTZXQ6aX0pPT57bGV0IHI9e307Zm9yKGxldCBvIGluIGUpe3Jbb109W107Zm9yKGxldCBzIG9mIGVbb10pYUYocykmJnJbb10ucHVzaChzKX1yZXR1cm57Li4ubixydW5Ub01ldHJpY3M6cixhbm5vdGF0aW9uRGF0YTp0LGVtYmVkZGluZ0RhdGFTZXQ6aSxwbHVnaW5EYXRhTG9hZGVkOntzdGF0ZTpPZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9fX0pLFNlKHdGLChuLHthbm5vdGF0aW9uczp0fSk9PntsZXQgZT1uZXcgU2V0KFsuLi5uLnNlbGVjdGVkQW5ub3RhdGlvbnMsLi4udF0pO2lmKGUuc2l6ZT09PW4uc2VsZWN0ZWRBbm5vdGF0aW9ucy5sZW5ndGgpZm9yKGxldCBpIG9mIHQpZS5kZWxldGUoaSk7cmV0dXJuey4uLm4sc2VsZWN0ZWRBbm5vdGF0aW9uczpbLi4uZV19fSksU2UoUkUsKG4se2Fubm90YXRpb25zOnR9KT0+KHsuLi5uLHNlbGVjdGVkQW5ub3RhdGlvbnM6dH0pKSxTZShTRixuPT4oey4uLm4sc2VsZWN0ZWRBbm5vdGF0aW9uczpbXX0pKSxTZShFRiwobix7YW5ub3RhdGlvbnM6dH0pPT57bGV0IGU9bmV3IFNldChbLi4ubi5mbGFnZ2VkQW5ub3RhdGlvbnMsLi4udF0pO2lmKGUuc2l6ZT09PW4uZmxhZ2dlZEFubm90YXRpb25zLmxlbmd0aClmb3IobGV0IGkgb2YgdCllLmRlbGV0ZShpKTtyZXR1cm57Li4ubixmbGFnZ2VkQW5ub3RhdGlvbnM6Wy4uLmVdLHNlbGVjdGVkQW5ub3RhdGlvbnM6W119fSksU2UoVEYsKG4se2Fubm90YXRpb25zOnR9KT0+e2xldCBlPW5ldyBTZXQoWy4uLm4uaGlkZGVuQW5ub3RhdGlvbnMsLi4udF0pO2lmKGUuc2l6ZT09PW4uaGlkZGVuQW5ub3RhdGlvbnMubGVuZ3RoKWZvcihsZXQgaSBvZiB0KWUuZGVsZXRlKGkpO3JldHVybnsuLi5uLGhpZGRlbkFubm90YXRpb25zOlsuLi5lXSxzZWxlY3RlZEFubm90YXRpb25zOltdfX0pLFNlKGpiLChuLHtyZWdleDp0fSk9Pih7Li4ubixhbm5vdGF0aW9uc1JlZ2V4OnR9KSksU2UoT0UsKG4se3JlZ2V4OnR9KT0+KHsuLi5uLG1ldHJpY3NSZWdleDp0fSkpLFNlKERGLChuLHttZXRyaWM6dH0pPT57aWYobi5tZXRyaWNGaWx0ZXJzW3RdKXJldHVybiBuO2xldCBlPVtdO3JldHVybiAwIT09bi5tZXRyaWNBcml0aG1ldGljLmxlbmd0aCYmZS5wdXNoKHtraW5kOm11Lk9QRVJBVE9SLG9wZXJhdG9yOnMwLkFORH0pLGUucHVzaCh7a2luZDptdS5NRVRSSUMsbWV0cmljOnR9KSx7Li4ubixtZXRyaWNBcml0aG1ldGljOlsuLi5uLm1ldHJpY0FyaXRobWV0aWMsLi4uZV0sbWV0cmljRmlsdGVyczp7Li4ubi5tZXRyaWNGaWx0ZXJzLFt0XTp7bWF4OjEsbWluOi0xLGluY2x1ZGVOYU46ITF9fSxzb3J0OnttZXRyaWM6dCxvcmRlcjokci5ERVNDRU5ESU5HfX19KSxTZShHYiwobix7bWV0cmljOnR9KT0+e2lmKCFuLm1ldHJpY0ZpbHRlcnNbdF0pcmV0dXJuIG47bGV0IGU9MCxpPTAscj0yLHtbdF06bywuLi5zfT1uLm1ldHJpY0ZpbHRlcnM7Zm9yKGxldCBhIGluIG4ubWV0cmljQXJpdGhtZXRpYyl7bGV0IGw9bi5tZXRyaWNBcml0aG1ldGljW2FdO2wua2luZD09PW11Lk1FVFJJQyYmbC5tZXRyaWM9PT10JiYoZT1wYXJzZUludChhKSl9cmV0dXJuIDAhPT1lJiYoaT1lLTEscj1lKzEpLHsuLi5uLG1ldHJpY0FyaXRobWV0aWM6Wy4uLm4ubWV0cmljQXJpdGhtZXRpYy5zbGljZSgwLGkpLC4uLm4ubWV0cmljQXJpdGhtZXRpYy5zbGljZShyKV0sbWV0cmljRmlsdGVyczpzfX0pLFNlKFdiLChuLHttZXRyaWM6dCxtYXg6ZSxtaW46aSxpbmNsdWRlTmFOOnJ9KT0+bi5tZXRyaWNGaWx0ZXJzW3RdP3suLi5uLG1ldHJpY0ZpbHRlcnM6ey4uLm4ubWV0cmljRmlsdGVycyxbdF06e21heDplLG1pbjppLGluY2x1ZGVOYU46cn19fTpuKSxTZShBRiwobix7bWV0cmljOnR9KT0+e2xldCBlPXttZXRyaWM6dCxvcmRlcjokci5ERVNDRU5ESU5HfTtyZXR1cm4gbi5zb3J0Lm1ldHJpYz09PXQmJm4uc29ydC5vcmRlcj09PSRyLkRFU0NFTkRJTkcmJihlLm9yZGVyPSRyLkFTQ0VORE5HKSx7Li4ubixzb3J0OmV9fSksU2UoSUYsKG4se2Fubm90YXRpb246dH0pPT57bGV0IGU9e21ldHJpYzp0LG9yZGVyOiRyLlNJTUlMQVJ9O3JldHVybiBuLnNvcnQubWV0cmljPT09dCYmbi5zb3J0Lm9yZGVyPT09JHIuU0lNSUxBUiYmKGUub3JkZXI9JHIuRElTU0lNSUxBUiksey4uLm4sc29ydDplfX0pLFNlKFBGLG49Pih7Li4ubixwY0V4cGFuZGVkOiFuLnBjRXhwYW5kZWR9KSksU2UoUkYsbj0+KHsuLi5uLGFubm90YXRpb25zRXhwYW5kZWQ6IW4uYW5ub3RhdGlvbnNFeHBhbmRlZH0pKSxTZShxYixuPT4oey4uLm4sc2lkZWJhckV4cGFuZGVkOiFuLnNpZGViYXJFeHBhbmRlZH0pKSxTZShPRixuPT4oey4uLm4sc2hvd0NvdW50czohbi5zaG93Q291bnRzfSkpLFNlKGtGLG49Pih7Li4ubixzaG93SGlkZGVuQW5ub3RhdGlvbnM6IW4uc2hvd0hpZGRlbkFubm90YXRpb25zfSkpLFNlKEZGLChuLHttZXRyaWM6dH0pPT57bGV0IGU9a3AuRU1CRURESU5HUyxpPXQ7cmV0dXJuIHQ9PT1uLmVtYmVkZGluZ3NNZXRyaWMmJihlPWtwLkRFRkFVTFQsaT0iIiksey4uLm4sdmlld0FjdGl2ZTplLGVtYmVkZGluZ3NNZXRyaWM6aX19KSxTZShORiwobix7c2lkZWJhcldpZHRoOnR9KT0+KHsuLi5uLHNpZGViYXJXaWR0aDp0fSkpLFNlKExGLChuLHtzaWRlYmFyV2lkdGg6dH0pPT4oey4uLm4sZW1iZWRkaW5nc1NpZGViYXJXaWR0aDp0fSkpLFNlKFliLG49Pih7Li4ubixlbWJlZGRpbmdzU2lkZWJhckV4cGFuZGVkOiFuLmVtYmVkZGluZ3NTaWRlYmFyRXhwYW5kZWR9KSksU2Uobm1lLChuLHtkYXRhU2V0OnR9KT0+KHsuLi5uLGVtYmVkZGluZ0RhdGFTZXQ6dH0pKSk7ZnVuY3Rpb24gZG1lKG4sdCl7cmV0dXJuIHRldChuLHQpfWZ1bmN0aW9uIG5ldChuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsNyl9ZnVuY3Rpb24gaWV0KG4sdCl7aWYoMSZuJiYoXygwLCJtYXQtb3B0aW9uIiw4KSxBKDEpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt5KCJ2YWx1ZSIsZSksQygxKSx5dChlKX19dmFyIHBtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEcsdGhpcy5vbkFkZEZpbHRlcj1uZXcgR31vbk9wdGlvblNlbGVjdGVkKGUsaSl7dGhpcy5vbkFkZEZpbHRlci5lbWl0KGUub3B0aW9uLnZhbHVlKSxpLnZhbHVlPSIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWMtc2VhcmNoLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmZXQoInZhbGlkIixpLmlzUmVnZXhGaWx0ZXJWYWxpZCl9LGlucHV0czp7Y29tcGxldGlvbnM6ImNvbXBsZXRpb25zIixyZWdleEZpbHRlclZhbHVlOiJyZWdleEZpbHRlclZhbHVlIixpc1JlZ2V4RmlsdGVyVmFsaWQ6ImlzUmVnZXhGaWx0ZXJWYWxpZCJ9LG91dHB1dHM6e29uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZToib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIixvbkFkZEZpbHRlcjoib25BZGRGaWx0ZXIifSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sic3ZnSWNvbiIsInNlYXJjaF8yNHB4Il0sWyJtYXRJbnB1dCIsIiIsImF1dG9jb21wbGV0ZSIsIm9mZiIsInBsYWNlaG9sZGVyIiwiQWRkIE1ldHJpYyBGaWx0ZXIiLDMsInZhbHVlIiwibWF0QXV0b2NvbXBsZXRlIiwiaW5wdXQiXSxbIm1hdElucHV0IiwiIl0sWyJzdmdJY29uIiwiZXJyb3JfMjRweCIsImNsYXNzIiwiZXJyb3ItaWNvbiIsIm1hdFRvb2x0aXAiLCJJbnZhbGlkIHJlZ2V4IGZpbHRlci4gVGhlIHJlc3VsdCBtYXkgYmUgc3RhbGUuIiw0LCJuZ0lmIl0sWyJhdXRvQWN0aXZlRmlyc3RPcHRpb24iLCIiLDMsIm9wdGlvblNlbGVjdGVkIl0sWyJmaWx0ZXJNYXRjaGVzIiwibWF0QXV0b2NvbXBsZXRlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwibWF0VG9vbHRpcCIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDEsImVycm9yLWljb24iXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUpe2xldCByPVBlKCk7TygwLCJtYXQtaWNvbiIsMCksXygxLCJpbnB1dCIsMSwyKSxQKCJpbnB1dCIsZnVuY3Rpb24ocyl7cmV0dXJuIGkub25SZWdleEZpbHRlclZhbHVlQ2hhbmdlLmVtaXQocy50YXJnZXQudmFsdWUpfSksdigpLEUoMyxuZXQsMSwwLCJtYXQtaWNvbiIsMyksXyg0LCJtYXQtYXV0b2NvbXBsZXRlIiw0LDUpLFAoIm9wdGlvblNlbGVjdGVkIixmdW5jdGlvbihzKXtvZShyKTtsZXQgYT0kZSgyKTtyZXR1cm4gc2UoaS5vbk9wdGlvblNlbGVjdGVkKHMsYSkpfSksRSg2LGlldCwyLDIsIm1hdC1vcHRpb24iLDYpLHYoKX1pZigyJmUpe2xldCByPSRlKDUpO0MoMSkseSgidmFsdWUiLGkucmVnZXhGaWx0ZXJWYWx1ZSkoIm1hdEF1dG9jb21wbGV0ZSIsciksQygyKSx5KCJuZ0lmIiwhaS5pc1JlZ2V4RmlsdGVyVmFsaWQpLEMoMykseSgibmdGb3JPZiIsaS5jb21wbGV0aW9ucyl9fSxkZXBlbmRlbmNpZXM6W2RuLEJlLEd0LFVoLHFrLCRnLE9zXSxzdHlsZXM6WyJtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cGFkZGluZzowIDEwcHg7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOi45ZW19W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKXtjb2xvcjojYzYyODI4fVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCkgICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksaG1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMubWV0cmljc1JlZ2V4JD10aGlzLnN0b3JlLnNlbGVjdChybWUpLHRoaXMuYWN0aXZlUnVucyQ9dGhpcy5zdG9yZS5waXBlKHZ0KG9vKSkucGlwZShMKGk9Pmk/QXJyYXkuZnJvbShpLmVudHJpZXMoKSkuZmlsdGVyKHI9PnJbMV0pLm1hcChyPT5yWzBdKTpbXSkpLHRoaXMubWV0cmljc0ZvckFjdGl2ZVJ1bnMkPUx0KHRoaXMuYWN0aXZlUnVucyQsdGhpcy5zdG9yZS5zZWxlY3QoUmYpKS5waXBlKEwoKFtpLHJdKT0+e2xldCBvPW5ldyBTZXQ7Zm9yKGxldCBzIG9mIGkpaWYocltzXSlmb3IobGV0IGEgb2YgcltzXSlvLmFkZChhKTtyZXR1cm5bLi4ub119KSksdGhpcy5pc01ldHJpY3NGaWx0ZXJWYWxpZCQ9dGhpcy5tZXRyaWNzUmVnZXgkLnBpcGUoTChpPT57dHJ5e3JldHVybiBCb29sZWFuKG5ldyBSZWdFeHAoaSkpfWNhdGNoe3JldHVybiExfX0pKSx0aGlzLm1ldHJpY0ZpbHRlcktleXMkPXRoaXMuc3RvcmUucGlwZSh2dChJbCkpLnBpcGUoTChpPT5PYmplY3Qua2V5cyhpKSkpLHRoaXMuY29tcGxldGlvbnMkPUx0KHRoaXMubWV0cmljc0ZvckFjdGl2ZVJ1bnMkLHRoaXMubWV0cmljc1JlZ2V4JCx0aGlzLm1ldHJpY0ZpbHRlcktleXMkKS5waXBlKEwoKFtpLHIsb10pPT57bGV0IHM9aS5maWx0ZXIoYT0+IW8uaW5jbHVkZXMoYSkpO3RyeXtsZXQgYT1uZXcgUmVnRXhwKHIsImkiKTtyZXR1cm4gcy5maWx0ZXIobD0+YS50ZXN0KGwpKS5zb3J0KCl9Y2F0Y2h7cmV0dXJuW119fSkpfW9uRmlsdGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goT0Uoe3JlZ2V4OmV9KSl9b25BZGRGaWx0ZXIoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChERih7bWV0cmljOmV9KSksdGhpcy5zdG9yZS5kaXNwYXRjaChPRSh7cmVnZXg6IiJ9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJucG1pLW1ldHJpYy1zZWFyY2giXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywicmVnZXhGaWx0ZXJWYWx1ZSIsImNvbXBsZXRpb25zIiwiaXNSZWdleEZpbHRlclZhbGlkIiwib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIiwib25BZGRGaWx0ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1ldHJpYy1zZWFyY2gtY29tcG9uZW50IiwwKSxQKCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRmlsdGVyQ2hhbmdlKG8pfSkoIm9uQWRkRmlsdGVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkFkZEZpbHRlcihvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJyZWdleEZpbHRlclZhbHVlIixVKDEsMyxpLm1ldHJpY3NSZWdleCQpKSgiY29tcGxldGlvbnMiLFUoMiw1LGkuY29tcGxldGlvbnMkKSkoImlzUmVnZXhGaWx0ZXJWYWxpZCIsVSgzLDcsaS5pc01ldHJpY3NGaWx0ZXJWYWxpZCQpKX0sZGVwZW5kZW5jaWVzOltwbWUsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHNldD1bIioiXSxmbWU9bmV3IHBlKCJNYXRDaGlwUmVtb3ZlIiksYWV0PW5ldyBwZSgiTWF0Q2hpcEF2YXRhciIpLGNldD1uZXcgcGUoIk1hdENoaXBUcmFpbGluZ0ljb24iKSx1ZXQ9b2Moa28ocW8oY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZWxlbWVudFJlZj10fX0pLCJwcmltYXJ5IiksLTEpLEpiPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB1ZXR7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcihlKSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMuX2hhc0ZvY3VzPSExLHRoaXMuY2hpcExpc3RTZWxlY3RhYmxlPSEwLHRoaXMuX2NoaXBMaXN0TXVsdGlwbGU9ITEsdGhpcy5fY2hpcExpc3REaXNhYmxlZD0hMSx0aGlzLnJvbGU9Im9wdGlvbiIsdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fc2VsZWN0YWJsZT0hMCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9yZW1vdmFibGU9ITAsdGhpcy5fb25Gb2N1cz1uZXcga2UsdGhpcy5fb25CbHVyPW5ldyBrZSx0aGlzLnNlbGVjdGlvbkNoYW5nZT1uZXcgRyx0aGlzLmRlc3Ryb3llZD1uZXcgRyx0aGlzLnJlbW92ZWQ9bmV3IEcsdGhpcy5fYWRkSG9zdENsYXNzTmFtZSgpLHRoaXMuX2NoaXBSaXBwbGVUYXJnZXQ9YS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLl9jaGlwUmlwcGxlVGFyZ2V0LmNsYXNzTGlzdC5hZGQoIm1hdC1jaGlwLXJpcHBsZSIpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jaGlwUmlwcGxlVGFyZ2V0KSx0aGlzLl9jaGlwUmlwcGxlPW5ldyBUdih0aGlzLGksdGhpcy5fY2hpcFJpcHBsZVRhcmdldCxyKSx0aGlzLl9jaGlwUmlwcGxlLnNldHVwVHJpZ2dlckV2ZW50cyhlKSx0aGlzLnJpcHBsZUNvbmZpZz1vfHx7fSx0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9Ik5vb3BBbmltYXRpb25zIj09PWwsdGhpcy50YWJJbmRleD1udWxsIT1jJiZwYXJzZUludChjKXx8LTF9Z2V0IHJpcHBsZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkfHwhIXRoaXMucmlwcGxlQ29uZmlnLmRpc2FibGVkfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZH1zZXQgc2VsZWN0ZWQoZSl7bGV0IGk9UnQoZSk7aSE9PXRoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9aSx0aGlzLl9kaXNwYXRjaFNlbGVjdGlvbkNoYW5nZSgpKX1nZXQgdmFsdWUoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fdmFsdWU/dGhpcy5fdmFsdWU6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fXNldCB2YWx1ZShlKXt0aGlzLl92YWx1ZT1lfWdldCBzZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGFibGUmJnRoaXMuY2hpcExpc3RTZWxlY3RhYmxlfXNldCBzZWxlY3RhYmxlKGUpe3RoaXMuX3NlbGVjdGFibGU9UnQoZSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2NoaXBMaXN0RGlzYWJsZWR8fHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD1SdChlKX1nZXQgcmVtb3ZhYmxlKCl7cmV0dXJuIHRoaXMuX3JlbW92YWJsZX1zZXQgcmVtb3ZhYmxlKGUpe3RoaXMuX3JlbW92YWJsZT1SdChlKX1nZXQgYXJpYVNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0YWJsZSYmKHRoaXMuX2NoaXBMaXN0TXVsdGlwbGV8fHRoaXMuc2VsZWN0ZWQpP3RoaXMuc2VsZWN0ZWQudG9TdHJpbmcoKTpudWxsfV9hZGRIb3N0Q2xhc3NOYW1lKCl7bGV0IGU9Im1hdC1iYXNpYy1jaGlwIixpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpLmhhc0F0dHJpYnV0ZShlKXx8aS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT1lP2kuY2xhc3NMaXN0LmFkZChlKTppLmNsYXNzTGlzdC5hZGQoIm1hdC1zdGFuZGFyZC1jaGlwIil9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZC5lbWl0KHtjaGlwOnRoaXN9KSx0aGlzLl9jaGlwUmlwcGxlLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCl9c2VsZWN0KCl7dGhpcy5fc2VsZWN0ZWR8fCh0aGlzLl9zZWxlY3RlZD0hMCx0aGlzLl9kaXNwYXRjaFNlbGVjdGlvbkNoYW5nZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1kZXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fZGlzcGF0Y2hTZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9c2VsZWN0VmlhSW50ZXJhY3Rpb24oKXt0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2Rpc3BhdGNoU2VsZWN0aW9uQ2hhbmdlKCEwKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9dG9nZ2xlU2VsZWN0ZWQoZT0hMSl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkPSF0aGlzLnNlbGVjdGVkLHRoaXMuX2Rpc3BhdGNoU2VsZWN0aW9uQ2hhbmdlKGUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc2VsZWN0ZWR9Zm9jdXMoKXt0aGlzLl9oYXNGb2N1c3x8KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuX29uRm9jdXMubmV4dCh7Y2hpcDp0aGlzfSkpLHRoaXMuX2hhc0ZvY3VzPSEwfXJlbW92ZSgpe3RoaXMucmVtb3ZhYmxlJiZ0aGlzLnJlbW92ZWQuZW1pdCh7Y2hpcDp0aGlzfSl9X2hhbmRsZUNsaWNrKGUpe3RoaXMuZGlzYWJsZWQmJmUucHJldmVudERlZmF1bHQoKX1faGFuZGxlS2V5ZG93bihlKXtpZighdGhpcy5kaXNhYmxlZClzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDQ2OmNhc2UgODp0aGlzLnJlbW92ZSgpLGUucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIDMyOnRoaXMuc2VsZWN0YWJsZSYmdGhpcy50b2dnbGVTZWxlY3RlZCghMCksZS5wcmV2ZW50RGVmYXVsdCgpfX1fYmx1cigpe3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKFF0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5faGFzRm9jdXM9ITEsdGhpcy5fb25CbHVyLm5leHQoe2NoaXA6dGhpc30pfSl9KX1fZGlzcGF0Y2hTZWxlY3Rpb25DaGFuZ2UoZT0hMSl7dGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7c291cmNlOnRoaXMsaXNVc2VySW5wdXQ6ZSxzZWxlY3RlZDp0aGlzLl9zZWxlY3RlZH0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKF90KSxNKG9pKSxNKGcyLDgpLE0obm4pLE0oSHQpLE0oUGksOCksdm8oInRhYmluZGV4IikpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtYmFzaWMtY2hpcCJdLFsiIiwibWF0LWJhc2ljLWNoaXAiLCIiXSxbIm1hdC1jaGlwIl0sWyIiLCJtYXQtY2hpcCIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoRWkocixhZXQsNSksRWkocixjZXQsNSksRWkocixmbWUsNSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuYXZhdGFyPW8uZmlyc3QpLE5lKG89TGUoKSkmJihpLnRyYWlsaW5nSWNvbj1vLmZpcnN0KSxOZShvPUxlKCkpJiYoaS5yZW1vdmVJY29uPW8uZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtY2hpcCIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczoxNSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlQ2xpY2sobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLl9ibHVyKCl9KSwyJmUmJih6ZSgidGFiaW5kZXgiLGkuZGlzYWJsZWQ/bnVsbDppLnRhYkluZGV4KSgicm9sZSIsaS5yb2xlKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpKCJhcmlhLXNlbGVjdGVkIixpLmFyaWFTZWxlY3RlZCksZXQoIm1hdC1jaGlwLXNlbGVjdGVkIixpLnNlbGVjdGVkKSgibWF0LWNoaXAtd2l0aC1hdmF0YXIiLGkuYXZhdGFyKSgibWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uIixpLnRyYWlsaW5nSWNvbnx8aS5yZW1vdmVJY29uKSgibWF0LWNoaXAtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsaS5fYW5pbWF0aW9uc0Rpc2FibGVkKSl9LGlucHV0czp7Y29sb3I6ImNvbG9yIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIix0YWJJbmRleDoidGFiSW5kZXgiLHJvbGU6InJvbGUiLHNlbGVjdGVkOiJzZWxlY3RlZCIsdmFsdWU6InZhbHVlIixzZWxlY3RhYmxlOiJzZWxlY3RhYmxlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHJlbW92YWJsZToicmVtb3ZhYmxlIn0sb3V0cHV0czp7c2VsZWN0aW9uQ2hhbmdlOiJzZWxlY3Rpb25DaGFuZ2UiLGRlc3Ryb3llZDoiZGVzdHJveWVkIixyZW1vdmVkOiJyZW1vdmVkIn0sZXhwb3J0QXM6WyJtYXRDaGlwIl0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLG1tZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fcGFyZW50Q2hpcD1lLCJCVVRUT04iPT09aS5uYXRpdmVFbGVtZW50Lm5vZGVOYW1lJiZpLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0eXBlIiwiYnV0dG9uIil9X2hhbmRsZUNsaWNrKGUpe2xldCBpPXRoaXMuX3BhcmVudENoaXA7aS5yZW1vdmFibGUmJiFpLmRpc2FibGVkJiZpLnJlbW92ZSgpLGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKEpiKSxNKFJlKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdENoaXBSZW1vdmUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtY2hpcC1yZW1vdmUiLCJtYXQtY2hpcC10cmFpbGluZy1pY29uIl0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUNsaWNrKG8pfSl9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6Zm1lLHVzZUV4aXN0aW5nOm59XSldfSksbn0pKCksZGV0PW5ldyBwZSgibWF0LWNoaXBzLWRlZmF1bHQtb3B0aW9ucyIpLHBldD1EdihjbGFzc3tjb25zdHJ1Y3RvcihuLHQsZSxpKXt0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9bix0aGlzLl9wYXJlbnRGb3JtPXQsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPWUsdGhpcy5uZ0NvbnRyb2w9aSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcga2V9fSksaGV0PTAsZ21lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwZXR7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCl7c3VwZXIoYSxvLHMsbCksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fZGlyPXIsdGhpcy5jb250cm9sVHlwZT0ibWF0LWNoaXAtbGlzdCIsdGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleD1udWxsLHRoaXMuX2Rlc3Ryb3llZD1uZXcga2UsdGhpcy5fdWlkPSJtYXQtY2hpcC1saXN0LSIraGV0KyssdGhpcy5fdGFiSW5kZXg9MCx0aGlzLl91c2VyVGFiSW5kZXg9bnVsbCx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9jb21wYXJlV2l0aD0oYyx1KT0+Yz09PXUsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5hcmlhT3JpZW50YXRpb249Imhvcml6b250YWwiLHRoaXMuX3NlbGVjdGFibGU9ITAsdGhpcy5jaGFuZ2U9bmV3IEcsdGhpcy52YWx1ZUNoYW5nZT1uZXcgRyx0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3I9dGhpcyl9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5fc2VsZWN0aW9uTW9kZWw/LnNlbGVjdGVkfHxbXTp0aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWRbMF19Z2V0IHJvbGUoKXtyZXR1cm4gdGhpcy5fZXhwbGljaXRSb2xlP3RoaXMuX2V4cGxpY2l0Um9sZTp0aGlzLmVtcHR5P251bGw6Imxpc3Rib3gifXNldCByb2xlKGUpe3RoaXMuX2V4cGxpY2l0Um9sZT1lfWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1zZXQgbXVsdGlwbGUoZSl7dGhpcy5fbXVsdGlwbGU9UnQoZSksdGhpcy5fc3luY0NoaXBzU3RhdGUoKX1nZXQgY29tcGFyZVdpdGgoKXtyZXR1cm4gdGhpcy5fY29tcGFyZVdpdGh9c2V0IGNvbXBhcmVXaXRoKGUpe3RoaXMuX2NvbXBhcmVXaXRoPWUsdGhpcy5fc2VsZWN0aW9uTW9kZWwmJnRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9c2V0IHZhbHVlKGUpe3RoaXMud3JpdGVWYWx1ZShlKSx0aGlzLl92YWx1ZT1lfWdldCBpZCgpe3JldHVybiB0aGlzLl9jaGlwSW5wdXQ/dGhpcy5fY2hpcElucHV0LmlkOnRoaXMuX3VpZH1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWQ/P3RoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoRm8ucmVxdWlyZWQpPz8hMX1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9UnQoZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfWdldCBwbGFjZWhvbGRlcigpe3JldHVybiB0aGlzLl9jaGlwSW5wdXQ/dGhpcy5fY2hpcElucHV0LnBsYWNlaG9sZGVyOnRoaXMuX3BsYWNlaG9sZGVyfXNldCBwbGFjZWhvbGRlcihlKXt0aGlzLl9wbGFjZWhvbGRlcj1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgZm9jdXNlZCgpe3JldHVybiB0aGlzLl9jaGlwSW5wdXQmJnRoaXMuX2NoaXBJbnB1dC5mb2N1c2VkfHx0aGlzLl9oYXNGb2N1c2VkQ2hpcCgpfWdldCBlbXB0eSgpe3JldHVybighdGhpcy5fY2hpcElucHV0fHx0aGlzLl9jaGlwSW5wdXQuZW1wdHkpJiYoIXRoaXMuY2hpcHN8fDA9PT10aGlzLmNoaXBzLmxlbmd0aCl9Z2V0IHNob3VsZExhYmVsRmxvYXQoKXtyZXR1cm4hdGhpcy5lbXB0eXx8dGhpcy5mb2N1c2VkfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLm5nQ29udHJvbD8hIXRoaXMubmdDb250cm9sLmRpc2FibGVkOnRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD1SdChlKSx0aGlzLl9zeW5jQ2hpcHNTdGF0ZSgpfWdldCBzZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGFibGV9c2V0IHNlbGVjdGFibGUoZSl7dGhpcy5fc2VsZWN0YWJsZT1SdChlKSx0aGlzLl9zeW5jQ2hpcHNTdGF0ZSgpfXNldCB0YWJJbmRleChlKXt0aGlzLl91c2VyVGFiSW5kZXg9ZSx0aGlzLl90YWJJbmRleD1lfWdldCBjaGlwU2VsZWN0aW9uQ2hhbmdlcygpe3JldHVybiBKdCguLi50aGlzLmNoaXBzLm1hcChlPT5lLnNlbGVjdGlvbkNoYW5nZSkpfWdldCBjaGlwRm9jdXNDaGFuZ2VzKCl7cmV0dXJuIEp0KC4uLnRoaXMuY2hpcHMubWFwKGU9PmUuX29uRm9jdXMpKX1nZXQgY2hpcEJsdXJDaGFuZ2VzKCl7cmV0dXJuIEp0KC4uLnRoaXMuY2hpcHMubWFwKGU9PmUuX29uQmx1cikpfWdldCBjaGlwUmVtb3ZlQ2hhbmdlcygpe3JldHVybiBKdCguLi50aGlzLmNoaXBzLm1hcChlPT5lLmRlc3Ryb3llZCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2tleU1hbmFnZXI9bmV3IFNoKHRoaXMuY2hpcHMpLndpdGhXcmFwKCkud2l0aFZlcnRpY2FsT3JpZW50YXRpb24oKS53aXRoSG9tZUFuZEVuZCgpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5fZGlyP3RoaXMuX2Rpci52YWx1ZToibHRyIiksdGhpcy5fZGlyJiZ0aGlzLl9kaXIuY2hhbmdlLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGU9PnRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbihlKSksdGhpcy5fa2V5TWFuYWdlci50YWJPdXQucGlwZShzdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9hbGxvd0ZvY3VzRXNjYXBlKCl9KSx0aGlzLmNoaXBzLmNoYW5nZXMucGlwZSh6bihudWxsKSxzdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnsodGhpcy5kaXNhYmxlZHx8IXRoaXMuc2VsZWN0YWJsZSkmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9zeW5jQ2hpcHNTdGF0ZSgpfSksdGhpcy5fcmVzZXRDaGlwcygpLHRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKSx0aGlzLl91cGRhdGVUYWJJbmRleCgpLHRoaXMuX3VwZGF0ZUZvY3VzRm9yRGVzdHJveWVkQ2hpcHMoKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9KX1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBBaCh0aGlzLm11bHRpcGxlLHZvaWQgMCwhMSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nRG9DaGVjaygpe3RoaXMubmdDb250cm9sJiYodGhpcy51cGRhdGVFcnJvclN0YXRlKCksdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQhPT10aGlzLl9kaXNhYmxlZCYmKHRoaXMuZGlzYWJsZWQ9ISF0aGlzLm5nQ29udHJvbC5kaXNhYmxlZCkpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2Ryb3BTdWJzY3JpcHRpb25zKCl9cmVnaXN0ZXJJbnB1dChlKXt0aGlzLl9jaGlwSW5wdXQ9ZSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLW1hdC1jaGlwLWlucHV0IixlLmlkKX1zZXREZXNjcmliZWRCeUlkcyhlKXtlLmxlbmd0aD90aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfXdyaXRlVmFsdWUoZSl7dGhpcy5jaGlwcyYmdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZShlLCExKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX29uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5fb25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW9uQ29udGFpbmVyQ2xpY2soZSl7dGhpcy5fb3JpZ2luYXRlc0Zyb21DaGlwKGUpfHx0aGlzLmZvY3VzKCl9Zm9jdXMoZSl7dGhpcy5kaXNhYmxlZHx8dGhpcy5fY2hpcElucHV0JiZ0aGlzLl9jaGlwSW5wdXQuZm9jdXNlZHx8KHRoaXMuY2hpcHMubGVuZ3RoPjA/KHRoaXMuX2tleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKToodGhpcy5fZm9jdXNJbnB1dChlKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpKX1fZm9jdXNJbnB1dChlKXt0aGlzLl9jaGlwSW5wdXQmJnRoaXMuX2NoaXBJbnB1dC5mb2N1cyhlKX1fa2V5ZG93bihlKXtsZXQgaT1lLnRhcmdldDtpJiZpLmNsYXNzTGlzdC5jb250YWlucygibWF0LWNoaXAiKSYmKHRoaXMuX2tleU1hbmFnZXIub25LZXlkb3duKGUpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X3VwZGF0ZVRhYkluZGV4KCl7dGhpcy5fdGFiSW5kZXg9dGhpcy5fdXNlclRhYkluZGV4fHwoMD09PXRoaXMuY2hpcHMubGVuZ3RoPy0xOjApfV91cGRhdGVGb2N1c0ZvckRlc3Ryb3llZENoaXBzKCl7aWYobnVsbCE9dGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleClpZih0aGlzLmNoaXBzLmxlbmd0aCl7bGV0IGU9TWF0aC5taW4odGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleCx0aGlzLmNoaXBzLmxlbmd0aC0xKTt0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oZSl9ZWxzZSB0aGlzLmZvY3VzKCk7dGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleD1udWxsfV9pc1ZhbGlkSW5kZXgoZSl7cmV0dXJuIGU+PTAmJmU8dGhpcy5jaGlwcy5sZW5ndGh9X3NldFNlbGVjdGlvbkJ5VmFsdWUoZSxpPSEwKXtpZih0aGlzLl9jbGVhclNlbGVjdGlvbigpLHRoaXMuY2hpcHMuZm9yRWFjaChyPT5yLmRlc2VsZWN0KCkpLEFycmF5LmlzQXJyYXkoZSkpZS5mb3JFYWNoKHI9PnRoaXMuX3NlbGVjdFZhbHVlKHIsaSkpLHRoaXMuX3NvcnRWYWx1ZXMoKTtlbHNle2xldCByPXRoaXMuX3NlbGVjdFZhbHVlKGUsaSk7ciYmaSYmdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHIpfX1fc2VsZWN0VmFsdWUoZSxpPSEwKXtsZXQgcj10aGlzLmNoaXBzLmZpbmQobz0+bnVsbCE9by52YWx1ZSYmdGhpcy5fY29tcGFyZVdpdGgoby52YWx1ZSxlKSk7cmV0dXJuIHImJihpP3Iuc2VsZWN0VmlhSW50ZXJhY3Rpb24oKTpyLnNlbGVjdCgpLHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChyKSkscn1faW5pdGlhbGl6ZVNlbGVjdGlvbigpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnsodGhpcy5uZ0NvbnRyb2x8fHRoaXMuX3ZhbHVlKSYmKHRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUodGhpcy5uZ0NvbnRyb2w/dGhpcy5uZ0NvbnRyb2wudmFsdWU6dGhpcy5fdmFsdWUsITEpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9KX1fY2xlYXJTZWxlY3Rpb24oZSl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLmNoaXBzLmZvckVhY2goaT0+e2khPT1lJiZpLmRlc2VsZWN0KCl9KSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9X3NvcnRWYWx1ZXMoKXt0aGlzLl9tdWx0aXBsZSYmKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCksdGhpcy5jaGlwcy5mb3JFYWNoKGU9PntlLnNlbGVjdGVkJiZ0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoZSl9KSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9wcm9wYWdhdGVDaGFuZ2VzKGUpe2xldCBpPW51bGw7aT1BcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpP3RoaXMuc2VsZWN0ZWQubWFwKHI9PnIudmFsdWUpOnRoaXMuc2VsZWN0ZWQ/dGhpcy5zZWxlY3RlZC52YWx1ZTplLHRoaXMuX3ZhbHVlPWksdGhpcy5jaGFuZ2UuZW1pdChuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMudmFsdWU9ZX19KHRoaXMsaSkpLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChpKSx0aGlzLl9vbkNoYW5nZShpKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1fYmx1cigpe3RoaXMuX2hhc0ZvY3VzZWRDaGlwKCl8fHRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSksdGhpcy5kaXNhYmxlZHx8KHRoaXMuX2NoaXBJbnB1dD9zZXRUaW1lb3V0KCgpPT57dGhpcy5mb2N1c2VkfHx0aGlzLl9tYXJrQXNUb3VjaGVkKCl9KTp0aGlzLl9tYXJrQXNUb3VjaGVkKCkpfV9tYXJrQXNUb3VjaGVkKCl7dGhpcy5fb25Ub3VjaGVkKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfV9hbGxvd0ZvY3VzRXNjYXBlKCl7LTEhPT10aGlzLl90YWJJbmRleCYmKHRoaXMuX3RhYkluZGV4PS0xLHNldFRpbWVvdXQoKCk9Pnt0aGlzLl90YWJJbmRleD10aGlzLl91c2VyVGFiSW5kZXh8fDAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSl9X3Jlc2V0Q2hpcHMoKXt0aGlzLl9kcm9wU3Vic2NyaXB0aW9ucygpLHRoaXMuX2xpc3RlblRvQ2hpcHNGb2N1cygpLHRoaXMuX2xpc3RlblRvQ2hpcHNTZWxlY3Rpb24oKSx0aGlzLl9saXN0ZW5Ub0NoaXBzUmVtb3ZlZCgpfV9kcm9wU3Vic2NyaXB0aW9ucygpe3RoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbiYmKHRoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbj1udWxsKSx0aGlzLl9jaGlwQmx1clN1YnNjcmlwdGlvbiYmKHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2hpcEJsdXJTdWJzY3JpcHRpb249bnVsbCksdGhpcy5fY2hpcFNlbGVjdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2NoaXBTZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jaGlwU2VsZWN0aW9uU3Vic2NyaXB0aW9uPW51bGwpLHRoaXMuX2NoaXBSZW1vdmVTdWJzY3JpcHRpb24mJih0aGlzLl9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2hpcFJlbW92ZVN1YnNjcmlwdGlvbj1udWxsKX1fbGlzdGVuVG9DaGlwc1NlbGVjdGlvbigpe3RoaXMuX2NoaXBTZWxlY3Rpb25TdWJzY3JpcHRpb249dGhpcy5jaGlwU2VsZWN0aW9uQ2hhbmdlcy5zdWJzY3JpYmUoZT0+e2Uuc291cmNlLnNlbGVjdGVkP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlLnNvdXJjZSk6dGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoZS5zb3VyY2UpLHRoaXMubXVsdGlwbGV8fHRoaXMuY2hpcHMuZm9yRWFjaChpPT57IXRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQoaSkmJmkuc2VsZWN0ZWQmJmkuZGVzZWxlY3QoKX0pLGUuaXNVc2VySW5wdXQmJnRoaXMuX3Byb3BhZ2F0ZUNoYW5nZXMoKX0pfV9saXN0ZW5Ub0NoaXBzRm9jdXMoKXt0aGlzLl9jaGlwRm9jdXNTdWJzY3JpcHRpb249dGhpcy5jaGlwRm9jdXNDaGFuZ2VzLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5jaGlwcy50b0FycmF5KCkuaW5kZXhPZihlLmNoaXApO3RoaXMuX2lzVmFsaWRJbmRleChpKSYmdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGkpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pLHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uPXRoaXMuY2hpcEJsdXJDaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuX2JsdXIoKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9KX1fbGlzdGVuVG9DaGlwc1JlbW92ZWQoKXt0aGlzLl9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uPXRoaXMuY2hpcFJlbW92ZUNoYW5nZXMuc3Vic2NyaWJlKGU9PntsZXQgaT1lLmNoaXAscj10aGlzLmNoaXBzLnRvQXJyYXkoKS5pbmRleE9mKGUuY2hpcCk7dGhpcy5faXNWYWxpZEluZGV4KHIpJiZpLl9oYXNGb2N1cyYmKHRoaXMuX2xhc3REZXN0cm95ZWRDaGlwSW5kZXg9cil9KX1fb3JpZ2luYXRlc0Zyb21DaGlwKGUpe2xldCBpPWUudGFyZ2V0O2Zvcig7aSYmaSE9PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDspe2lmKGkuY2xhc3NMaXN0LmNvbnRhaW5zKCJtYXQtY2hpcCIpKXJldHVybiEwO2k9aS5wYXJlbnRFbGVtZW50fXJldHVybiExfV9oYXNGb2N1c2VkQ2hpcCgpe3JldHVybiB0aGlzLmNoaXBzJiZ0aGlzLmNoaXBzLnNvbWUoZT0+ZS5faGFzRm9jdXMpfV9zeW5jQ2hpcHNTdGF0ZSgpe3RoaXMuY2hpcHMmJnRoaXMuY2hpcHMuZm9yRWFjaChlPT57ZS5fY2hpcExpc3REaXNhYmxlZD10aGlzLl9kaXNhYmxlZCxlLl9jaGlwTGlzdE11bHRpcGxlPXRoaXMubXVsdGlwbGUsZS5jaGlwTGlzdFNlbGVjdGFibGU9dGhpcy5fc2VsZWN0YWJsZX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKG5uKSxNKCRpLDgpLE0oTGgsOCksTShWaCw4KSxNKGNkKSxNKE5zLDEwKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWNoaXAtbGlzdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiZFaShyLEpiLDUpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuY2hpcHM9byl9fSxob3N0QXR0cnM6WzEsIm1hdC1jaGlwLWxpc3QiXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLmZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fYmx1cigpfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9rZXlkb3duKG8pfSksMiZlJiYoX3MoImlkIixpLl91aWQpLHplKCJ0YWJpbmRleCIsaS5kaXNhYmxlZD9udWxsOmkuX3RhYkluZGV4KSgiYXJpYS1yZXF1aXJlZCIsaS5yb2xlP2kucmVxdWlyZWQ6bnVsbCkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQudG9TdHJpbmcoKSkoImFyaWEtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgiYXJpYS1tdWx0aXNlbGVjdGFibGUiLGkubXVsdGlwbGUpKCJyb2xlIixpLnJvbGUpKCJhcmlhLW9yaWVudGF0aW9uIixpLmFyaWFPcmllbnRhdGlvbiksZXQoIm1hdC1jaGlwLWxpc3QtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtY2hpcC1saXN0LWludmFsaWQiLGkuZXJyb3JTdGF0ZSkoIm1hdC1jaGlwLWxpc3QtcmVxdWlyZWQiLGkucmVxdWlyZWQpKX0saW5wdXRzOntyb2xlOiJyb2xlIix1c2VyQXJpYURlc2NyaWJlZEJ5OlsiYXJpYS1kZXNjcmliZWRieSIsInVzZXJBcmlhRGVzY3JpYmVkQnkiXSxlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIiLG11bHRpcGxlOiJtdWx0aXBsZSIsY29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIix2YWx1ZToidmFsdWUiLHJlcXVpcmVkOiJyZXF1aXJlZCIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixkaXNhYmxlZDoiZGlzYWJsZWQiLGFyaWFPcmllbnRhdGlvbjpbImFyaWEtb3JpZW50YXRpb24iLCJhcmlhT3JpZW50YXRpb24iXSxzZWxlY3RhYmxlOiJzZWxlY3RhYmxlIix0YWJJbmRleDoidGFiSW5kZXgifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRDaGlwTGlzdCJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6a2gsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOnNldCxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sxLCJtYXQtY2hpcC1saXN0LXdyYXBwZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih4aSgpLF8oMCwiZGl2IiwwKSxWbigxKSx2KCkpfSxzdHlsZXM6WycubWF0LWNoaXB7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlcjpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5tYXQtY2hpcDo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc3RhbmRhcmQtY2hpcHt0cmFuc2l0aW9uOmJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtkaXNwbGF5OmlubGluZS1mbGV4O3BhZGRpbmc6N3B4IDEycHg7Ym9yZGVyLXJhZGl1czoxNnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6ZGVmYXVsdDttaW4taGVpZ2h0OjMycHg7aGVpZ2h0OjFweH0ubWF0LXN0YW5kYXJkLWNoaXAuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtib3JkZXI6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTtwYWRkaW5nOjA7YmFja2dyb3VuZDpub25lfS5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uLC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlIC5tYXQtaWNvbnt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2ZvbnQtc2l6ZToxOHB4fS5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O29wYWNpdHk6MDtjb250ZW50OiIiO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5IDIwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LXN0YW5kYXJkLWNoaXA6aG92ZXI6OmFmdGVye29wYWNpdHk6LjEyfS5tYXQtc3RhbmRhcmQtY2hpcDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC1zdGFuZGFyZC1jaGlwOmZvY3VzOjphZnRlcntvcGFjaXR5Oi4xNn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc3RhbmRhcmQtY2hpcHtvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZHtvdXRsaW5lLXdpZHRoOjNweH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWQ6OmFmdGVye29wYWNpdHk6MH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWQgLm1hdC1jaGlwLXJlbW92ZSwubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWQgLm1hdC1jaGlwLXRyYWlsaW5nLWljb257Y3Vyc29yOmRlZmF1bHR9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi5tYXQtY2hpcC13aXRoLWF2YXRhciwubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowfS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb24ubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy1yaWdodDo4cHg7cGFkZGluZy1sZWZ0OjB9W2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb24ubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjB9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbntwYWRkaW5nLXRvcDo3cHg7cGFkZGluZy1ib3R0b206N3B4O3BhZGRpbmctcmlnaHQ6OHB4O3BhZGRpbmctbGVmdDoxMnB4fVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29ue3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDoxMnB4fS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjEycHh9W2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjEycHh9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1hdmF0YXJ7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDttYXJnaW4tcmlnaHQ6OHB4O21hcmdpbi1sZWZ0OjRweH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1hdmF0YXJ7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDo0cHh9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7Y3Vyc29yOnBvaW50ZXJ9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsW2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbnttYXJnaW4tcmlnaHQ6OHB4O21hcmdpbi1sZWZ0OjB9Lm1hdC1jaGlwLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtvdmVyZmxvdzpoaWRkZW47dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1jaGlwLWxpc3Qtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW46LTRweH0ubWF0LWNoaXAtbGlzdC13cmFwcGVyIGlucHV0Lm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtY2hpcC1saXN0LXdyYXBwZXIgLm1hdC1zdGFuZGFyZC1jaGlwe21hcmdpbjo0cHh9Lm1hdC1jaGlwLWxpc3Qtc3RhY2tlZCAubWF0LWNoaXAtbGlzdC13cmFwcGVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5tYXQtY2hpcC1saXN0LXN0YWNrZWQgLm1hdC1jaGlwLWxpc3Qtd3JhcHBlciAubWF0LXN0YW5kYXJkLWNoaXB7d2lkdGg6MTAwJX0ubWF0LWNoaXAtYXZhdGFye2JvcmRlci1yYWRpdXM6NTAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47b2JqZWN0LWZpdDpjb3Zlcn1pbnB1dC5tYXQtY2hpcC1pbnB1dHt3aWR0aDoxNTBweDttYXJnaW46NHB4O2ZsZXg6MSAwIDE1MHB4fSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLCRiPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W2NkLHtwcm92aWRlOmRldCx1c2VWYWx1ZTp7c2VwYXJhdG9yS2V5Q29kZXM6WzEzXX19XSxpbXBvcnRzOltsbl19KSxufSkoKSxmZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm57ImVtYmVkZGluZy1zZWxlY3RlZCI6biwiZW1iZWRkaW5nLXVuc2VsZWN0ZWQiOnR9fTtmdW5jdGlvbiBtZXQobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJtYXQtaWNvbiIsNSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7b2UoZSk7bGV0IHI9UygpO3JldHVybiBzZShyLm9uU2VsZWN0LmVtaXQoci5tZXRyaWMpKX0pLHYoKX1pZigyJm4pe2xldCBlPVMoKTt5KCJuZ0NsYXNzIixRcigxLGZldCxlLmVtYmVkZGluZ3NNZXRyaWM9PT1lLm1ldHJpYyxlLmVtYmVkZGluZ3NNZXRyaWMhPT1lLm1ldHJpYykpfX12YXIgX21lPWZ1bmN0aW9uKG4pe3JldHVybnt3aWR0aDpufX0sdm1lPWZ1bmN0aW9uKG4pe3JldHVybnsidmFsdWUtaW52YWxpZCI6bn19LHltZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlbW92ZT1uZXcgRyx0aGlzLm9uU2VsZWN0PW5ldyBHLHRoaXMub25GaWx0ZXJDaGFuZ2U9bmV3IEcsdGhpcy5mb2N1c01pbj0hMSx0aGlzLmZvY3VzTWF4PSExLHRoaXMubmdVbnN1YnNjcmliZT1uZXcga2V9bmdPbkluaXQoKXt0aGlzLm1pbkZvcm1Db250cm9sPW5ldyBCaCh0aGlzLmZpbHRlclZhbHVlcy5taW4sW0ZvLnJlcXVpcmVkLEZvLm1pbigtMSksRm8ubWF4KDEpLHRoaXMubWluVmFsdWVWYWxpZGF0b3IuYmluZCh0aGlzKV0pLHRoaXMubWF4Rm9ybUNvbnRyb2w9bmV3IEJoKHRoaXMuZmlsdGVyVmFsdWVzLm1heCxbRm8ucmVxdWlyZWQsRm8ubWluKC0xKSxGby5tYXgoMSksdGhpcy5tYXhWYWx1ZVZhbGlkYXRvci5iaW5kKHRoaXMpXSksdGhpcy5taW5Gb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm1pbkZvcm1Db250cm9sLnZhbGlkJiZ0aGlzLm1heEZvcm1Db250cm9sLnZhbGlkJiZ0aGlzLm9uRmlsdGVyQ2hhbmdlLmVtaXQoe21pbjpwYXJzZUZsb2F0KHRoaXMubWluRm9ybUNvbnRyb2wudmFsdWUpLG1heDpwYXJzZUZsb2F0KHRoaXMubWF4Rm9ybUNvbnRyb2wudmFsdWUpfSl9KSx0aGlzLm1heEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoKT0+e3RoaXMubWluRm9ybUNvbnRyb2wudmFsaWQmJnRoaXMubWF4Rm9ybUNvbnRyb2wudmFsaWQmJnRoaXMub25GaWx0ZXJDaGFuZ2UuZW1pdCh7bWluOnBhcnNlRmxvYXQodGhpcy5taW5Gb3JtQ29udHJvbC52YWx1ZSksbWF4OnBhcnNlRmxvYXQodGhpcy5tYXhGb3JtQ29udHJvbC52YWx1ZSl9KX0pfW5nT25DaGFuZ2VzKGUpe3RoaXMubWluRm9ybUNvbnRyb2wmJnRoaXMubWF4Rm9ybUNvbnRyb2wmJih0aGlzLm1pbkZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuZmlsdGVyVmFsdWVzLm1pbix7ZW1pdEV2ZW50OiExfSksdGhpcy5tYXhGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZpbHRlclZhbHVlcy5tYXgse2VtaXRFdmVudDohMX0pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bWluVmFsdWVWYWxpZGF0b3IoZSl7cmV0dXJuIHRoaXMubWF4Rm9ybUNvbnRyb2wmJiJOYU4iIT09ZS52YWx1ZT9pc05hTihwYXJzZUZsb2F0KGUudmFsdWUpKT97dmFsdWU6InRoZSBzdHJpbmcgeW91IGVudGVyZWQgaXMgbmVpdGhlciBOYU4gbm9yIGEgbnVtYmVyIn06cGFyc2VGbG9hdChlLnZhbHVlKT5wYXJzZUZsb2F0KHRoaXMubWF4Rm9ybUNvbnRyb2wudmFsdWUpP3t2YWx1ZToidGhlIG51bWJlciB5b3UgZW50ZXJlZCBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4IHZhbHVlIn06bnVsbDpudWxsfW1heFZhbHVlVmFsaWRhdG9yKGUpe3JldHVybiB0aGlzLm1pbkZvcm1Db250cm9sPyJOYU4iPT09dGhpcy5taW5Gb3JtQ29udHJvbC52YWx1ZSYmIk5hTiI9PT1lLnZhbHVlP251bGw6aXNOYU4ocGFyc2VGbG9hdChlLnZhbHVlKSk/e3ZhbHVlOiJ0aGUgc3RyaW5nIHlvdSBlbnRlcmVkIGlzIG5laXRoZXIgTmFOIG5vciBhIG51bWJlciJ9OmUudmFsdWU8dGhpcy5taW5Gb3JtQ29udHJvbC52YWx1ZT97dmFsdWU6InRoZSBudW1iZXIgeW91IGVudGVyZWQgaXMgc21hbGxlciB0aGFuIHRoZSBtaW4gdmFsdWUifTpudWxsOm51bGx9Z2V0RXJyb3JEZXNjcmlwdGlvbihlKXtpZihlKXtsZXQgaT1PYmplY3Qua2V5cyhlKVswXTtyZXR1cm4icmVxdWlyZWQiPT09aT8ieW91IGRpZCBub3QgZW50ZXIgYW55dGhpbmciOiJtaW4iPT09aT8idGhlIG51bWJlciBtdXN0IGJlIGF0IGxlYXN0IC0xLjAiOiJtYXgiPT09aT8idGhlIG51bWJlciBpcyBiaWdnZXIgdGhhbiAxLjAiOmVbaV19cmV0dXJuIiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtY29tcG9uZW50Il1dLGlucHV0czp7bWV0cmljOiJtZXRyaWMiLGZpbHRlclZhbHVlczoiZmlsdGVyVmFsdWVzIixoYXNFbWJlZGRpbmdzRGF0YToiaGFzRW1iZWRkaW5nc0RhdGEiLGVtYmVkZGluZ3NNZXRyaWM6ImVtYmVkZGluZ3NNZXRyaWMifSxvdXRwdXRzOntvblJlbW92ZToib25SZW1vdmUiLG9uU2VsZWN0OiJvblNlbGVjdCIsb25GaWx0ZXJDaGFuZ2U6Im9uRmlsdGVyQ2hhbmdlIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczoxMCx2YXJzOjIyLGNvbnN0czpbWzEsImZpbHRlci1jaGlwIiwzLCJyZW1vdmVkIl0sWyJjbGFzcyIsImVtYmVkZGluZ3MtYnV0dG9uIiwic3ZnSWNvbiIsImdyb3VwX3dvcmtfMjRweCIsMywibmdDbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtcmFuZ2UiLDMsImtleWRvd24iXSxbIm1hdElucHV0IiwiIiwxLCJpbnB1dC1maWVsZCIsMywidmFsdWUiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibmdTdHlsZSIsIm5nQ2xhc3MiLCJmb3JtQ29udHJvbCIsImZvY3VzIiwiZm9jdXNvdXQiXSxbIm1hdENoaXBSZW1vdmUiLCIiLCJzdmdJY29uIiwiY2FuY2VsXzI0cHgiXSxbInN2Z0ljb24iLCJncm91cF93b3JrXzI0cHgiLDEsImVtYmVkZGluZ3MtYnV0dG9uIiwzLCJuZ0NsYXNzIiwiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1hdC1jaGlwIiwwKSxQKCJyZW1vdmVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVtb3ZlLmVtaXQoaS5tZXRyaWMpfSksRSgxLG1ldCwxLDQsIm1hdC1pY29uIiwxKSxBKDIpLF8oMywiZGl2IiwyKSxQKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gby5zdG9wUHJvcGFnYXRpb24oKX0pLEEoNCwiIFsgIiksXyg1LCJpbnB1dCIsMyksUCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9jdXNNaW49ITB9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9jdXNNaW49ITF9KSx2KCksQSg2LCIgOyAiKSxfKDcsImlucHV0IiwzKSxQKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gaS5mb2N1c01heD0hMH0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5mb2N1c01heD0hMX0pLHYoKSxBKDgsIiBdICIpLHYoKSxPKDksIm1hdC1pY29uIiw0KSx2KCkpLDImZSYmKEMoMSkseSgibmdJZiIsaS5oYXNFbWJlZGRpbmdzRGF0YSksQygxKSxqZSgiICIsaS5tZXRyaWMsIiAiKSxDKDMpLHkoInZhbHVlIixpLmZpbHRlclZhbHVlcy5taW4pKCJtYXRUb29sdGlwIixpLmdldEVycm9yRGVzY3JpcHRpb24oaS5taW5Gb3JtQ29udHJvbC5lcnJvcnMpKSgibWF0VG9vbHRpcERpc2FibGVkIiwhaS5taW5Gb3JtQ29udHJvbC5pbnZhbGlkKSgibmdTdHlsZSIsT24oMTQsX21lLGkuZm9jdXNNaW4/IjEwMHB4IjppLm1pbkZvcm1Db250cm9sLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKyJjaCIpKSgibmdDbGFzcyIsT24oMTYsdm1lLCFpLm1pbkZvcm1Db250cm9sLnZhbGlkKSkoImZvcm1Db250cm9sIixpLm1pbkZvcm1Db250cm9sKSxDKDIpLHkoInZhbHVlIixpLmZpbHRlclZhbHVlcy5tYXgpKCJtYXRUb29sdGlwIixpLmdldEVycm9yRGVzY3JpcHRpb24oaS5tYXhGb3JtQ29udHJvbC5lcnJvcnMpKSgibWF0VG9vbHRpcERpc2FibGVkIiwhaS5tYXhGb3JtQ29udHJvbC5pbnZhbGlkKSgibmdTdHlsZSIsT24oMTgsX21lLGkuZm9jdXNNYXg/IjEwMHB4IjppLm1heEZvcm1Db250cm9sLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKyJjaCIpKSgibmdDbGFzcyIsT24oMjAsdm1lLCFpLm1heEZvcm1Db250cm9sLnZhbGlkKSkoImZvcm1Db250cm9sIixpLm1heEZvcm1Db250cm9sKSl9LGRlcGVuZGVuY2llczpbRm4sQmUsenUsQnYsVjIsbXcsR3QsSmIsbW1lLFhrXSxzdHlsZXM6WyIuZmlsdGVyLWNoaXBbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7bWFyZ2luLWxlZnQ6NXB4fS5tZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50LXJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2ZvbnQtc2l6ZTouOGVtO2hlaWdodDozMHB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MzBweDtwYWRkaW5nOjAgNXB4O21hcmdpbi1sZWZ0OjVweH0uaW5wdXQtZmllbGRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtib3JkZXI6bm9uZTtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjEuMWVtO3RyYW5zaXRpb246d2lkdGggMXN9LmlucHV0LWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKTtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmV9LnZhbHVlLWludmFsaWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmNDQzMzZ9LmVtYmVkZGluZy1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2Y1N2MwMDtvcGFjaXR5OjF9LmVtYmVkZGluZy11bnNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi40fS5lbWJlZGRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MThweDtoZWlnaHQ6MThweDttYXJnaW4tcmlnaHQ6OHB4O2N1cnNvcjpwb2ludGVyfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYm1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZmlsdGVyVmFsdWVzJD10aGlzLnN0b3JlLnBpcGUodnQoSWwpKS5waXBlKEwoaT0+e2xldCByPWlbdGhpcy5tZXRyaWNdO3JldHVybiByP3ttaW46ci5pbmNsdWRlTmFOPyJOYU4iOnRoaXMucm91bmRUb1RocmVlRGVjaW1hbFBvaW50cyhyLm1pbiksbWF4OnIubWF4PHIubWluPyJOYU4iOnRoaXMucm91bmRUb1RocmVlRGVjaW1hbFBvaW50cyhyLm1heCl9OnttaW46LTEsbWF4OjF9fSkpLHRoaXMuaGFzRW1iZWRkaW5nc0RhdGEkPXRoaXMuc3RvcmUucGlwZSh2dChCRikpLnBpcGUoTChpPT52b2lkIDAhPT1pKSksdGhpcy5lbWJlZGRpbmdzTWV0cmljJD10aGlzLnN0b3JlLnBpcGUodnQoYW1lKSl9cmVtb3ZlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goR2Ioe21ldHJpYzplfSkpfXNlbGVjdChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEZGKHttZXRyaWM6ZX0pKX1maWx0ZXJDaGFuZ2UoZSl7bGV0IGk9aXNOYU4oZS5taW4pPy0xOmUubWluLHI9aXNOYU4oZS5tYXgpPy0yOmUubWF4LG89aXNOYU4oZS5taW4pO3RoaXMuc3RvcmUuZGlzcGF0Y2goV2Ioe21ldHJpYzp0aGlzLm1ldHJpYyxtYXg6cixtaW46aSxpbmNsdWRlTmFOOm99KSl9cm91bmRUb1RocmVlRGVjaW1hbFBvaW50cyhlKXtyZXR1cm4gTWF0aC5yb3VuZCgxZTMqKGUrTnVtYmVyLkVQU0lMT04pKS8xZTN9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJucG1pLW1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQiXV0saW5wdXRzOnttZXRyaWM6Im1ldHJpYyJ9LGRlY2xzOjQsdmFyczoxMCxjb25zdHM6W1szLCJtZXRyaWMiLCJmaWx0ZXJWYWx1ZXMiLCJoYXNFbWJlZGRpbmdzRGF0YSIsImVtYmVkZGluZ3NNZXRyaWMiLCJvblJlbW92ZSIsIm9uU2VsZWN0Iiwib25GaWx0ZXJDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtY29tcG9uZW50IiwwKSxQKCJvblJlbW92ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkucmVtb3ZlKG8pfSkoIm9uU2VsZWN0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zZWxlY3Qobyl9KSgib25GaWx0ZXJDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmZpbHRlckNoYW5nZShvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJtZXRyaWMiLGkubWV0cmljKSgiZmlsdGVyVmFsdWVzIixVKDEsNCxpLmZpbHRlclZhbHVlcyQpKSgiaGFzRW1iZWRkaW5nc0RhdGEiLFUoMiw2LGkuaGFzRW1iZWRkaW5nc0RhdGEkKSkoImVtYmVkZGluZ3NNZXRyaWMiLFUoMyw4LGkuZW1iZWRkaW5nc01ldHJpYyQpKX0sZGVwZW5kZW5jaWVzOlt5bWUsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHhtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5PcGVyYXRvcj1zMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1tZXRyaWMtYXJpdGhtZXRpYy1vcGVyYXRvciJdXSxpbnB1dHM6e29wZXJhdG9yOiJvcGVyYXRvciJ9LGRlY2xzOjIsdmFyczoxLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJtYXQtY2hpcCIpLEEoMSksdigpKSwyJmUmJihDKDEpLGplKCIgIixpLm9wZXJhdG9yPT09aS5PcGVyYXRvci5BTkQ/IiYiOiIiLCIgIikpfSxkZXBlbmRlbmNpZXM6W0piXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB5ZXQobix0KXsxJm4mJk8oMCwibnBtaS1tZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50Iiw0KSwyJm4mJnkoIm1ldHJpYyIsUygpLiRpbXBsaWNpdC5tZXRyaWMpfWZ1bmN0aW9uIGJldChuLHQpezEmbiYmTygwLCJucG1pLW1ldHJpYy1hcml0aG1ldGljLW9wZXJhdG9yIiw1KSwyJm4mJnkoIm9wZXJhdG9yIixTKCkuJGltcGxpY2l0Lm9wZXJhdG9yKX1mdW5jdGlvbiB4ZXQobix0KXtpZigxJm4mJihfKDAsImRpdiIpLEUoMSx5ZXQsMSwxLCJucG1pLW1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQiLDIpLEUoMixiZXQsMSwxLCJucG1pLW1ldHJpYy1hcml0aG1ldGljLW9wZXJhdG9yIiwzKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKCk7QygxKSx5KCJuZ0lmIixlLmtpbmQ9PT1pLkFyaXRobWV0aWNLaW5kLk1FVFJJQyksQygxKSx5KCJuZ0lmIixlLmtpbmQ9PT1pLkFyaXRobWV0aWNLaW5kLk9QRVJBVE9SKX19dmFyIENtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5Bcml0aG1ldGljS2luZD1tdX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljLWFyaXRobWV0aWMtY29tcG9uZW50Il1dLGlucHV0czp7bWV0cmljQXJpdGhtZXRpYzoibWV0cmljQXJpdGhtZXRpYyJ9LGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWzMsInNlbGVjdGFibGUiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm1ldHJpYyIsNCwibmdJZiJdLFszLCJvcGVyYXRvciIsNCwibmdJZiJdLFszLCJtZXRyaWMiXSxbMywib3BlcmF0b3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1hdC1jaGlwLWxpc3QiLDApLEUoMSx4ZXQsMywyLCJkaXYiLDEpLHYoKSksMiZlJiYoeSgic2VsZWN0YWJsZSIsITEpLEMoMSkseSgibmdGb3JPZiIsaS5tZXRyaWNBcml0aG1ldGljKSl9LGRlcGVuZGVuY2llczpbZG4sQmUsZ21lLGJtZSx4bWVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxNbWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5tZXRyaWNBcml0aG1ldGljJD10aGlzLnN0b3JlLnBpcGUodnQoSEYpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktbWV0cmljLWFyaXRobWV0aWMiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywibWV0cmljQXJpdGhtZXRpYyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE8oMCwibWV0cmljLWFyaXRobWV0aWMtY29tcG9uZW50IiwwKSxCKDEsImFzeW5jIikpLDImZSYmeSgibWV0cmljQXJpdGhtZXRpYyIsVSgxLDEsaS5tZXRyaWNBcml0aG1ldGljJCkpfSxkZXBlbmRlbmNpZXM6W0NtZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gd21lKG4sdCxlKXtsZXQgaT1bW3QsLi4uZV1dO2lmKCFlLmxlbmd0aHx8IW4ubGVuZ3RoKXJldHVybiJkYXRhOnRleHQvY3N2O2NoYXJzZXQ9dXRmLTgsIitpLm1hcChhPT5hLmpvaW4oIiwiKSkuam9pbigiXG4iKTtsZXQgcj1lLm1hcChzPT5TcyhzKSk7Zm9yKGxldFtzLGFdb2Ygbil7bGV0IGw9YS5maWx0ZXIoYz0+Yy5ydW49PT10KTtpZihsLmxlbmd0aCl7bGV0IGM9W3NdO2ZvcihsZXQgdSBvZiByKXtsZXQgZD1sLmZpbmQocD0+cC5tZXRyaWM9PT11KTtjLnB1c2godm9pZCAwPT09ZD8ibnVsbCI6YCR7ZC5uUE1JVmFsdWV9YCl9aS5wdXNoKGMpfX1yZXR1cm4iZGF0YTp0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04LCIraS5tYXAocz0+cy5qb2luKCIsIikpLmpvaW4oIlxuIil9dmFyIHdldD1mdW5jdGlvbihuKXtyZXR1cm57ImFjdGl2ZS1idXR0b24iOm59fSxTbWU9KCgpPT57Y2xhc3Mgbntkb3dubG9hZFJlc3VsdHMoKXtmb3IobGV0IGUgb2YgdGhpcy5ydW5zKXtsZXQgaT13bWUodGhpcy5mbGFnZ2VkRGF0YSxlLHRoaXMubWV0cmljcykscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ci5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHIuc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsYHJlcG9ydF8ke2V9LmNzdmApLHIuY2xpY2soKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlc3VsdHMtZG93bmxvYWQtY29tcG9uZW50Il1dLGlucHV0czp7bnVtRmxhZ2dlZEFubm90YXRpb25zOiJudW1GbGFnZ2VkQW5ub3RhdGlvbnMiLHJ1bnM6InJ1bnMiLGZsYWdnZWREYXRhOiJmbGFnZ2VkRGF0YSIsbWV0cmljczoibWV0cmljcyJ9LGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWyJtYXQtc3Ryb2tlZC1idXR0b24iLCIiLCJ0aXRsZSIsIkV4cG9ydCBDU1YgcmVwb3J0cyBvZiBhbGwgZmxhZ2dlZCBhbm5vdGF0aW9ucy4gV2lsbCBnZW5lcmF0ZSBvbmUgQ1NWIHBlciBhY3RpdmUgcnVuLiIsMywiZGlzYWJsZWQiLCJuZ0NsYXNzIiwiY2xpY2siXSxbMSwiYnV0dG9uLWNvbnRlbnRzIl0sWyJzdmdJY29uIiwiZ2V0X2FwcF8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJidXR0b24iLDApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmRvd25sb2FkUmVzdWx0cygpfSksXygxLCJzcGFuIiwxKSxPKDIsIm1hdC1pY29uIiwyKSxBKDMpLHYoKSgpKSwyJmUmJih5KCJkaXNhYmxlZCIsMD09PWkubnVtRmxhZ2dlZEFubm90YXRpb25zKSgibmdDbGFzcyIsT24oMyx3ZXQsaS5udW1GbGFnZ2VkQW5ub3RhdGlvbnM+MCkpLEMoMyksamUoIiBGbGFnZ2VkIFJvd3MgKCIsaS5udW1GbGFnZ2VkQW5ub3RhdGlvbnMsIikgIikpfSxkZXBlbmRlbmNpZXM6W0ZuLEd0LF9uXSxzdHlsZXM6WyIuYWN0aXZlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtjb2xvcjojZmZmfS5idXR0b24tY29udGVudHNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6NnB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRW1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZmxhZ2dlZEFubm90YXRpb25zJD10aGlzLnN0b3JlLnNlbGVjdChWRiksdGhpcy5udW1GbGFnZ2VkQW5ub3RhdGlvbnMkPXRoaXMuZmxhZ2dlZEFubm90YXRpb25zJC5waXBlKEwoaT0+aS5sZW5ndGgpKSx0aGlzLmFjdGl2ZVJ1bnMkPXRoaXMuc3RvcmUuc2VsZWN0KG9vKS5waXBlKEwoaT0+aT9BcnJheS5mcm9tKGkuZW50cmllcygpKS5maWx0ZXIocj0+clsxXSkubWFwKHI9PnJbMF0pOltdKSksdGhpcy5mbGFnZ2VkRGF0YSQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KFBmKSx0aGlzLmZsYWdnZWRBbm5vdGF0aW9ucyRdKS5waXBlKEwoKFtpLHJdKT0+e2xldCBvPW5ldyBTZXQocik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGkpLmZpbHRlcihhPT5vLmhhcyhhWzBdKSl9KSksdGhpcy5tZXRyaWNzJD1MdChbdGhpcy5zdG9yZS5zZWxlY3QoUmYpLHRoaXMuYWN0aXZlUnVucyQsdGhpcy5zdG9yZS5zZWxlY3QoSWwpXSkucGlwZShMKChbaSxyLG9dKT0+e2xldCBzPU9iamVjdC5rZXlzKG8pO2ZvcihsZXQgYSBvZiByKWlbYV0mJihzPXMuY29uY2F0KGlbYV0uZmlsdGVyKGw9PlZiKGwpKSkpO3JldHVybiBzPVsuLi5uZXcgU2V0KHMpXSxzfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1yZXN1bHRzLWRvd25sb2FkIl1dLGRlY2xzOjUsdmFyczoxMixjb25zdHM6W1szLCJudW1GbGFnZ2VkQW5ub3RhdGlvbnMiLCJydW5zIiwiZmxhZ2dlZERhdGEiLCJtZXRyaWNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJyZXN1bHRzLWRvd25sb2FkLWNvbXBvbmVudCIsMCksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksQig0LCJhc3luYyIpKSwyJmUmJnkoIm51bUZsYWdnZWRBbm5vdGF0aW9ucyIsVSgxLDQsaS5udW1GbGFnZ2VkQW5ub3RhdGlvbnMkKSkoInJ1bnMiLFUoMiw2LGkuYWN0aXZlUnVucyQpKSgiZmxhZ2dlZERhdGEiLFUoMyw4LGkuZmxhZ2dlZERhdGEkKSkoIm1ldHJpY3MiLFUoNCwxMCxpLm1ldHJpY3MkKSl9LGRlcGVuZGVuY2llczpbU21lLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxXRj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJucG1pLWRhdGEtc2VsZWN0aW9uIl1dLGRlY2xzOjQsdmFyczowLGNvbnN0czpbWzEsImRhdGEtc2VsZWN0aW9uIl0sWzEsIm1ldHJpY3Mtc2VsZWN0b3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCksTygxLCJucG1pLW1ldHJpYy1zZWFyY2giLDEpKDIsIm5wbWktcmVzdWx0cy1kb3dubG9hZCIpLHYoKSxPKDMsIm5wbWktbWV0cmljLWFyaXRobWV0aWMiKSl9LGRlcGVuZGVuY2llczpbaG1lLE1tZSxFbWVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmc6MTBweCAyMHB4fS5kYXRhLXNlbGVjdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWV0cmljcy1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDF9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBxRihuLHQsZSl7aWYoZSlyZXR1cm4gbjtsZXQgaT17Li4ubn07cmV0dXJuIHQuZm9yRWFjaChyPT5kZWxldGUgaVtyXSksaX12YXIgQWV0PVsiY2hhcnQiXSxJbWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25SZW1vdmU9bmV3IEcsdGhpcy5vblVwZGF0ZUZpbHRlcj1uZXcgRyx0aGlzLmhlaWdodD0zMDAsdGhpcy5jaGFydFdpZHRoPTAsdGhpcy5jaGFydEhlaWdodD0wLHRoaXMuZHJhd0hlaWdodD0wLHRoaXMuZHJhd1dpZHRoPTAsdGhpcy5tYXJnaW49e3RvcDoyMCxyaWdodDoxMCxib3R0b206MjAsbGVmdDoxMH0sdGhpcy5kcmF3TWFyZ2luPXt0b3A6MCxyaWdodDowLGJvdHRvbToyMCxsZWZ0OjIwfSx0aGlzLmJydXNoPWZ1bmN0aW9uKG4pe3ZhciBhLHQ9VFVlLGU9RVVlLGk9RFVlLHI9ITAsbz1Hdygic3RhcnQiLCJicnVzaCIsImVuZCIpLHM9NjtmdW5jdGlvbiBsKHgpe3ZhciBnPXgucHJvcGVydHkoIl9fYnJ1c2giLG0pLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtvUygib3ZlcmxheSIpXSk7Zy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixtcC5vdmVybGF5KS5tZXJnZShnKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIEQ9YnoodGhpcykuZXh0ZW50O2JvKHRoaXMpLmF0dHIoIngiLERbMF1bMF0pLmF0dHIoInkiLERbMF1bMV0pLmF0dHIoIndpZHRoIixEWzFdWzBdLURbMF1bMF0pLmF0dHIoImhlaWdodCIsRFsxXVsxXS1EWzBdWzFdKX0pLHguc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbb1MoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsbXAuc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGI9eC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKG4uaGFuZGxlcyxmdW5jdGlvbihEKXtyZXR1cm4gRC50eXBlfSk7Yi5leGl0KCkucmVtb3ZlKCksYi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihEKXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIitELnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKEQpe3JldHVybiBtcFtELnR5cGVdfSkseC5lYWNoKGMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5vbigibW91c2Vkb3duLmJydXNoIixwKS5maWx0ZXIoaSkub24oInRvdWNoc3RhcnQuYnJ1c2giLHApLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGgpLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsZikuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGMoKXt2YXIgeD1ibyh0aGlzKSxnPWJ6KHRoaXMpLnNlbGVjdGlvbjtnPyh4LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixnWzBdWzBdKS5hdHRyKCJ5IixnWzBdWzFdKS5hdHRyKCJ3aWR0aCIsZ1sxXVswXS1nWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGdbMV1bMV0tZ1swXVsxXSkseC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oYil7cmV0dXJuImUiPT09Yi50eXBlW2IudHlwZS5sZW5ndGgtMV0/Z1sxXVswXS1zLzI6Z1swXVswXS1zLzJ9KS5hdHRyKCJ5IixmdW5jdGlvbihiKXtyZXR1cm4icyI9PT1iLnR5cGVbMF0/Z1sxXVsxXS1zLzI6Z1swXVsxXS1zLzJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oYil7cmV0dXJuIm4iPT09Yi50eXBlfHwicyI9PT1iLnR5cGU/Z1sxXVswXS1nWzBdWzBdK3M6c30pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oYil7cmV0dXJuImUiPT09Yi50eXBlfHwidyI9PT1iLnR5cGU/Z1sxXVsxXS1nWzBdWzFdK3M6c30pKTp4LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gdSh4LGcsYil7dmFyIEQ9eC5fX2JydXNoLmVtaXR0ZXI7cmV0dXJuIUR8fGImJkQuY2xlYW4/bmV3IGQoeCxnLGIpOkR9ZnVuY3Rpb24gZCh4LGcsYil7dGhpcy50aGF0PXgsdGhpcy5hcmdzPWcsdGhpcy5zdGF0ZT14Ll9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPWJ9ZnVuY3Rpb24gcCgpe2lmKCghYXx8c2kudG91Y2hlcykmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdWUsaGUsRixxLGRlLFksbGUsSWUsbnQsVWUsQWUseD10aGlzLGc9c2kudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsYj0ic2VsZWN0aW9uIj09PShyJiZzaS5tZXRhS2V5P2c9Im92ZXJsYXkiOmcpP3BsZTpyJiZzaS5hbHRLZXk/TXk6Q3ksRD1uPT09JFI/bnVsbDp3VWVbZ10sVD1uPT09eXo/bnVsbDpTVWVbZ10saz1ieih4KSxaPWsuZXh0ZW50LHo9ay5zZWxlY3Rpb24sZmU9WlswXVswXSx3PVpbMF1bMV0sSz1aWzFdWzBdLGFlPVpbMV1bMV0sdmU9MCxEZT0wLGd0PUQmJlQmJnImJnNpLnNoaWZ0S2V5LHRuPXNpLnRvdWNoZXM/TVVlKHNpLmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIpOkdVLHB0PXRuKHgpLHd0PXB0LFRlPXUoeCxhcmd1bWVudHMsITApLmJlZm9yZXN0YXJ0KCk7Im92ZXJsYXkiPT09Zz8oeiYmKG50PSEwKSxrLnNlbGVjdGlvbj16PVtbdWU9bj09PSRSP2ZlOnB0WzBdLEY9bj09PXl6P3c6cHRbMV1dLFtkZT1uPT09JFI/Szp1ZSxsZT1uPT09eXo/YWU6Rl1dKToodWU9elswXVswXSxGPXpbMF1bMV0sZGU9elsxXVswXSxsZT16WzFdWzFdKSxoZT11ZSxxPUYsWT1kZSxJZT1sZTt2YXIgeHQ9Ym8oeCkuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksbXQ9eHQuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIsbXBbZ10pO2lmKHNpLnRvdWNoZXMpVGUubW92ZWQ9ZHQsVGUuZW5kZWQ9TXQ7ZWxzZXt2YXIgY2U9Ym8oc2kudmlldykub24oIm1vdXNlbW92ZS5icnVzaCIsZHQsITApLm9uKCJtb3VzZXVwLmJydXNoIixNdCwhMCk7ciYmY2Uub24oImtleWRvd24uYnJ1c2giLGJ0LCEwKS5vbigia2V5dXAuYnJ1c2giLGhuLCEwKSxxVShzaS52aWV3KX1feigpLENnKHgpLGMuY2FsbCh4KSxUZS5zdGFydCgpfWZ1bmN0aW9uIGR0KCl7dmFyIG9uPXRuKHgpO2d0JiYhVWUmJiFBZSYmKE1hdGguYWJzKG9uWzBdLXd0WzBdKT5NYXRoLmFicyhvblsxXS13dFsxXSk/QWU9ITA6VWU9ITApLHd0PW9uLG50PSEwLEpSKCksV2UoKX1mdW5jdGlvbiBXZSgpe3ZhciBvbjtzd2l0Y2godmU9d3RbMF0tcHRbMF0sRGU9d3RbMV0tcHRbMV0sYil7Y2FzZSB2ejpjYXNlIHBsZTpEJiYodmU9TWF0aC5tYXgoZmUtdWUsTWF0aC5taW4oSy1kZSx2ZSkpLGhlPXVlK3ZlLFk9ZGUrdmUpLFQmJihEZT1NYXRoLm1heCh3LUYsTWF0aC5taW4oYWUtbGUsRGUpKSxxPUYrRGUsSWU9bGUrRGUpO2JyZWFrO2Nhc2UgQ3k6RDwwPyh2ZT1NYXRoLm1heChmZS11ZSxNYXRoLm1pbihLLXVlLHZlKSksaGU9dWUrdmUsWT1kZSk6RD4wJiYodmU9TWF0aC5tYXgoZmUtZGUsTWF0aC5taW4oSy1kZSx2ZSkpLGhlPXVlLFk9ZGUrdmUpLFQ8MD8oRGU9TWF0aC5tYXgody1GLE1hdGgubWluKGFlLUYsRGUpKSxxPUYrRGUsSWU9bGUpOlQ+MCYmKERlPU1hdGgubWF4KHctbGUsTWF0aC5taW4oYWUtbGUsRGUpKSxxPUYsSWU9bGUrRGUpO2JyZWFrO2Nhc2UgTXk6RCYmKGhlPU1hdGgubWF4KGZlLE1hdGgubWluKEssdWUtdmUqRCkpLFk9TWF0aC5tYXgoZmUsTWF0aC5taW4oSyxkZSt2ZSpEKSkpLFQmJihxPU1hdGgubWF4KHcsTWF0aC5taW4oYWUsRi1EZSpUKSksSWU9TWF0aC5tYXgodyxNYXRoLm1pbihhZSxsZStEZSpUKSkpfVk8aGUmJihEKj0tMSxvbj11ZSx1ZT1kZSxkZT1vbixvbj1oZSxoZT1ZLFk9b24sZyBpbiBmbGUmJm10LmF0dHIoImN1cnNvciIsbXBbZz1mbGVbZ11dKSksSWU8cSYmKFQqPS0xLG9uPUYsRj1sZSxsZT1vbixvbj1xLHE9SWUsSWU9b24sZyBpbiBtbGUmJm10LmF0dHIoImN1cnNvciIsbXBbZz1tbGVbZ11dKSksay5zZWxlY3Rpb24mJih6PWsuc2VsZWN0aW9uKSxVZSYmKGhlPXpbMF1bMF0sWT16WzFdWzBdKSxBZSYmKHE9elswXVsxXSxJZT16WzFdWzFdKSwoelswXVswXSE9PWhlfHx6WzBdWzFdIT09cXx8elsxXVswXSE9PVl8fHpbMV1bMV0hPT1JZSkmJihrLnNlbGVjdGlvbj1bW2hlLHFdLFtZLEllXV0sYy5jYWxsKHgpLFRlLmJydXNoKCkpfWZ1bmN0aW9uIE10KCl7aWYoX3ooKSxzaS50b3VjaGVzKXtpZihzaS50b3VjaGVzLmxlbmd0aClyZXR1cm47YSYmY2xlYXJUaW1lb3V0KGEpLGE9c2V0VGltZW91dChmdW5jdGlvbigpe2E9bnVsbH0sNTAwKX1lbHNlIFlVKHNpLnZpZXcsbnQpLGNlLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTt4dC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLG10LmF0dHIoImN1cnNvciIsbXAub3ZlcmxheSksay5zZWxlY3Rpb24mJih6PWsuc2VsZWN0aW9uKSxBVWUoeikmJihrLnNlbGVjdGlvbj1udWxsLGMuY2FsbCh4KSksVGUuZW5kKCl9ZnVuY3Rpb24gYnQoKXtzd2l0Y2goc2kua2V5Q29kZSl7Y2FzZSAxNjpndD1EJiZUO2JyZWFrO2Nhc2UgMTg6Yj09PUN5JiYoRCYmKGRlPVktdmUqRCx1ZT1oZSt2ZSpEKSxUJiYobGU9SWUtRGUqVCxGPXErRGUqVCksYj1NeSxXZSgpKTticmVhaztjYXNlIDMyOihiPT09Q3l8fGI9PT1NeSkmJihEPDA/ZGU9WS12ZTpEPjAmJih1ZT1oZS12ZSksVDwwP2xlPUllLURlOlQ+MCYmKEY9cS1EZSksYj12eixtdC5hdHRyKCJjdXJzb3IiLG1wLnNlbGVjdGlvbiksV2UoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59SlIoKX1mdW5jdGlvbiBobigpe3N3aXRjaChzaS5rZXlDb2RlKXtjYXNlIDE2Omd0JiYoVWU9QWU9Z3Q9ITEsV2UoKSk7YnJlYWs7Y2FzZSAxODpiPT09TXkmJihEPDA/ZGU9WTpEPjAmJih1ZT1oZSksVDwwP2xlPUllOlQ+MCYmKEY9cSksYj1DeSxXZSgpKTticmVhaztjYXNlIDMyOmI9PT12eiYmKHNpLmFsdEtleT8oRCYmKGRlPVktdmUqRCx1ZT1oZSt2ZSpEKSxUJiYobGU9SWUtRGUqVCxGPXErRGUqVCksYj1NeSk6KEQ8MD9kZT1ZOkQ+MCYmKHVlPWhlKSxUPDA/bGU9SWU6VD4wJiYoRj1xKSxiPUN5KSxtdC5hdHRyKCJjdXJzb3IiLG1wW2ddKSxXZSgpKTticmVhaztkZWZhdWx0OnJldHVybn1KUigpfX1mdW5jdGlvbiBoKCl7dSh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBmKCl7dSh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiBtKCl7dmFyIHg9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiB4LmV4dGVudD14eih0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkseC5kaW09bix4fXJldHVybiBsLm1vdmU9ZnVuY3Rpb24oeCxnKXt4LnNlbGVjdGlvbj94Lm9uKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJicnVzaCIsZnVuY3Rpb24oKXt2YXIgYj10aGlzLEQ9Yi5fX2JydXNoLFQ9dShiLGFyZ3VtZW50cyksaz1ELnNlbGVjdGlvbixaPW4uaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIGc/Zy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZyxELmV4dGVudCksej1mcChrLFopO2Z1bmN0aW9uIGZlKHVlKXtELnNlbGVjdGlvbj0xPT09dWUmJm51bGw9PT1aP251bGw6eih1ZSksYy5jYWxsKGIpLFQuYnJ1c2goKX1yZXR1cm4gbnVsbCE9PWsmJm51bGwhPT1aP2ZlOmZlKDEpfSk6eC5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxEPWFyZ3VtZW50cyxUPWIuX19icnVzaCxrPW4uaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIGc/Zy5hcHBseShiLEQpOmcsVC5leHRlbnQpLFo9dShiLEQpLmJlZm9yZXN0YXJ0KCk7Q2coYiksVC5zZWxlY3Rpb249bnVsbD09PWs/bnVsbDprLGMuY2FsbChiKSxaLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pfSxsLmNsZWFyPWZ1bmN0aW9uKHgpe2wubW92ZSh4LG51bGwpfSxkLnByb3RvdHlwZT17YmVmb3Jlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuc3RhdGUuZW1pdHRlcj10aGlzLHRoaXMuc3RhcnRpbmc9ITApLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRpbmc/KHRoaXMuc3RhcnRpbmc9ITEsdGhpcy5lbWl0KCJzdGFydCIpKTp0aGlzLmVtaXQoImJydXNoIiksdGhpc30sYnJ1c2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlcix0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHgpeyFmdW5jdGlvbihuLHQsZSxpKXt2YXIgcj1zaTtuLnNvdXJjZUV2ZW50PXNpLHNpPW47dHJ5e3QuYXBwbHkoZSxpKX1maW5hbGx5e3NpPXJ9fShuZXcgZGxlKGwseCxuLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbeCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxsLmV4dGVudD1mdW5jdGlvbih4KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgeD94OlpSKHh6KHgpKSxsKTp0fSxsLmZpbHRlcj1mdW5jdGlvbih4KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgeD94OlpSKCEheCksbCk6ZX0sbC50b3VjaGFibGU9ZnVuY3Rpb24oeCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHg/eDpaUighIXgpLGwpOml9LGwuaGFuZGxlU2l6ZT1mdW5jdGlvbih4KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0reCxsKTpzfSxsLmtleU1vZGlmaWVycz1mdW5jdGlvbih4KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hIXgsbCk6cn0sbC5vbj1mdW5jdGlvbigpe3ZhciB4PW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiB4PT09bz9sOnh9LGx9KCRSKSx0aGlzLm1heEJpblNpemU9MCx0aGlzLmFyZWE9ZnVuY3Rpb24oKXt2YXIgbj1oTyx0PW51bGwsZT1mYSgwKSxpPWZPLHI9ZmEoITApLG89bnVsbCxzPXBPLGE9bnVsbDtmdW5jdGlvbiBsKHUpe3ZhciBkLHAsaCxtLGcsZj11Lmxlbmd0aCx4PSExLGI9bmV3IEFycmF5KGYpLEQ9bmV3IEFycmF5KGYpO2ZvcihudWxsPT1vJiYoYT1zKGc9c1MoKSkpLGQ9MDtkPD1mOysrZCl7aWYoIShkPGYmJnIobT11W2RdLGQsdSkpPT09eClpZih4PSF4KXA9ZCxhLmFyZWFTdGFydCgpLGEubGluZVN0YXJ0KCk7ZWxzZXtmb3IoYS5saW5lRW5kKCksYS5saW5lU3RhcnQoKSxoPWQtMTtoPj1wOy0taClhLnBvaW50KGJbaF0sRFtoXSk7YS5saW5lRW5kKCksYS5hcmVhRW5kKCl9eCYmKGJbZF09K24obSxkLHUpLERbZF09K2UobSxkLHUpLGEucG9pbnQodD8rdChtLGQsdSk6YltkXSxpPytpKG0sZCx1KTpEW2RdKSl9aWYoZylyZXR1cm4gYT1udWxsLGcrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiB4UygpLmRlZmluZWQocikuY3VydmUocykuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB1P3U6ZmEoK3UpLHQ9bnVsbCxsKTpufSxsLngwPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB1P3U6ZmEoK3UpLGwpOm59LGwueDE9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bnVsbD09dT9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB1P3U6ZmEoK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdT91OmZhKCt1KSxpPW51bGwsbCk6ZX0sbC55MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdT91OmZhKCt1KSxsKTplfSxsLnkxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXU/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdT91OmZhKCt1KSxsKTppfSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueChuKS55KGUpfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChuKS55KGkpfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KGUpfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHU/dTpmYSghIXUpLGwpOnJ9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dSxudWxsIT1vJiYoYT1zKG8pKSxsKTpzfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXU/bz1hPW51bGw6YT1zKG89dSksbCk6b30sbH0oKS54MChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy54U2NhbGVOdW0oLWUubGVuZ3RoKX0uYmluZCh0aGlzKSkueDEoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMueFNjYWxlTnVtKGUubGVuZ3RoKX0uYmluZCh0aGlzKSkueShmdW5jdGlvbihlKXtyZXR1cm4gZS54MD09PS0xLzA/dGhpcy5jaGFydEhlaWdodC10aGlzLmRyYXdNYXJnaW4udG9wOnRoaXMueVNjYWxlKChlLngxK2UueDApLzIpfS5iaW5kKHRoaXMpKS5jdXJ2ZShzail9bmdBZnRlclZpZXdJbml0KCl7dGhpcy51cGRhdGVEaW1lbnNpb25zKCksdGhpcy5zdmc9Ym8odGhpcy5jaGFydENvbnRhaW5lci5uYXRpdmVFbGVtZW50KS5zZWxlY3QoInN2ZyIpLHRoaXMubWFpbkNvbnRhaW5lcj10aGlzLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHt0aGlzLm1hcmdpbi5sZWZ0fSwgJHt0aGlzLm1hcmdpbi50b3B9KWApLHRoaXMuZHJhd0NvbnRhaW5lcj10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7dGhpcy5kcmF3TWFyZ2luLmxlZnR9LCAke3RoaXMuZHJhd01hcmdpbi50b3B9KWApLHRoaXMuZG90c0dyb3VwPXRoaXMuZHJhd0NvbnRhaW5lci5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRvdHNHcm91cCIpLHRoaXMueUF4aXNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJheGlzIGF4aXMtLXkiKSx0aGlzLnhBeGlzR3JvdXA9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiYXhpcyBheGlzLS14IiksdGhpcy5taXNjR3JvdXA9dGhpcy5kcmF3Q29udGFpbmVyLmFwcGVuZCgiZyIpLHRoaXMueFNjYWxlPXd5KCkucGFkZGluZyguMDUpLHRoaXMueEF4aXM9ancodGhpcy54U2NhbGUpLHRoaXMueVNjYWxlPVFvKCkucmFuZ2UoW3RoaXMuZHJhd0hlaWdodCwwXSksdGhpcy55QXhpcz1mdW5jdGlvbihuKXtyZXR1cm4gQlUoNCxuKX0odGhpcy55U2NhbGUpLHRoaXMueFNjYWxlTnVtPVFvKCksdGhpcy5pbml0aWFsaXplQnJ1c2goKSx0aGlzLmRyYXdNaXNjKCksdGhpcy5yZWRyYXcoKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLnN2ZyYmdGhpcy5yZWRyYXcoKX1yZWRyYXcoKXt0aGlzLnVwZGF0ZURpbWVuc2lvbnMoKSx0aGlzLnNldE1heEJpblNpemUoKSx0aGlzLnVwZGF0ZUF4ZXMoKSx0aGlzLmRyYXcoKX11cGRhdGVEaW1lbnNpb25zKCl7dGhpcy5jaGFydFdpZHRoPXRoaXMud2lkdGgtdGhpcy5tYXJnaW4ubGVmdC10aGlzLm1hcmdpbi5yaWdodCx0aGlzLmRyYXdXaWR0aD10aGlzLmNoYXJ0V2lkdGgtdGhpcy5kcmF3TWFyZ2luLmxlZnQtdGhpcy5kcmF3TWFyZ2luLnJpZ2h0LHRoaXMuY2hhcnRIZWlnaHQ9dGhpcy5oZWlnaHQtdGhpcy5tYXJnaW4udG9wLXRoaXMubWFyZ2luLmJvdHRvbSx0aGlzLmRyYXdIZWlnaHQ9dGhpcy5jaGFydEhlaWdodC10aGlzLmRyYXdNYXJnaW4udG9wLXRoaXMuZHJhd01hcmdpbi5ib3R0b219c2V0TWF4QmluU2l6ZSgpe09iamVjdC52YWx1ZXModGhpcy5jaGFydERhdGEudmlvbGluRGF0YSkuZm9yRWFjaChlPT57bGV0IGk9ZS5tYXAobz0+by5sZW5ndGgpLHI9TWF0aC5tYXgoLi4uaSk7dGhpcy5tYXhCaW5TaXplPU1hdGgubWF4KHIsdGhpcy5tYXhCaW5TaXplKX0pfXVwZGF0ZUF4ZXMoKXt0aGlzLnhTY2FsZS5yYW5nZShbMCx0aGlzLmRyYXdXaWR0aF0pLmRvbWFpbihPYmplY3Qua2V5cyh0aGlzLmNoYXJ0RGF0YS52aW9saW5EYXRhKSksdGhpcy55U2NhbGUuZG9tYWluKFt0aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5taW4sdGhpcy5jaGFydERhdGEuZXh0cmVtZXMubWF4XSksdGhpcy54U2NhbGVOdW0ucmFuZ2UoWzAsdGhpcy54U2NhbGUuYmFuZHdpZHRoKCldKS5kb21haW4oWy10aGlzLm1heEJpblNpemUsdGhpcy5tYXhCaW5TaXplXSl9aW5pdGlhbGl6ZUJydXNoKCl7dGhpcy5icnVzaC5vbigiZW5kIix0aGlzLmJydXNoTW92ZWQuYmluZCh0aGlzKSl9ZHJhdygpe3RoaXMuZHJhd0F4ZXMoKSx0aGlzLmRyYXdQbG90KCksdGhpcy5yZWZyZXNoTWlzYygpLHRoaXMucmVmcmVzaEJydXNoKCl9ZHJhd0F4ZXMoKXt0aGlzLnlBeGlzR3JvdXAuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7dGhpcy5kcmF3TWFyZ2luLmxlZnR9LFxuICAgICAgJHt0aGlzLmRyYXdNYXJnaW4udG9wfSlgKS5jYWxsKHRoaXMueUF4aXMpLHRoaXMueEF4aXNHcm91cC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHt0aGlzLmRyYXdNYXJnaW4ubGVmdH0sXG4gICAgICAke3RoaXMuZHJhd01hcmdpbi50b3ArdGhpcy5jaGFydEhlaWdodH0pYCkuY2FsbCh0aGlzLnhBeGlzKX1kcmF3UGxvdCgpe2xldCBlPXRoaXMuZG90c0dyb3VwLnNlbGVjdEFsbCgiLnZpb2xpbi1wbG90IikuZGF0YShPYmplY3QuZW50cmllcyh0aGlzLmNoYXJ0RGF0YS52aW9saW5EYXRhKSk7ZS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwidmlvbGluLXBsb3QiKS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5jb2xvclNjYWxlKGlbMF0pfS5iaW5kKHRoaXMpKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oaSl7cmV0dXJuYCR7dGhpcy5jb2xvclNjYWxlKGlbMF0pfTMzYH0uYmluZCh0aGlzKSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihpKXtyZXR1cm5gdHJhbnNsYXRlKCR7dGhpcy54U2NhbGUoaVswXSl9LCAwKWB9LmJpbmQodGhpcykpLmRhdHVtKGZ1bmN0aW9uKGkpe3JldHVybiBpWzFdfSkuYXR0cigiZCIsdGhpcy5hcmVhKSxlLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oaSl7cmV0dXJuYHRyYW5zbGF0ZSgke3RoaXMueFNjYWxlKGlbMF0pfSwgMClgfS5iaW5kKHRoaXMpKS5kYXR1bShmdW5jdGlvbihpKXtyZXR1cm4gaVsxXX0pLmF0dHIoImQiLHRoaXMuYXJlYSksZS5leGl0KCkucmVtb3ZlKCl9ZHJhd01pc2MoKXt0aGlzLnplcm9MaW5lPXRoaXMubWlzY0dyb3VwLmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsdGhpcy55U2NhbGUoMCkpLmF0dHIoIngyIix0aGlzLmRyYXdXaWR0aCkuYXR0cigieTIiLHRoaXMueVNjYWxlKDApKSx0aGlzLm5hblRleHQ9dGhpcy5taXNjR3JvdXAuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoImZpbGwiLCJibGFjayIpLnRleHQoIk5hTiIpLmF0dHIoImZvbnQtc2l6ZSIsIjEwcHgiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoIngiLC01KS5hdHRyKCJ5Iix0aGlzLmNoYXJ0SGVpZ2h0LXRoaXMuZHJhd01hcmdpbi50b3ApLHRoaXMubmFuTGluZT10aGlzLm1pc2NHcm91cC5hcHBlbmQoImxpbmUiKS5zdHlsZSgic3Ryb2tlIiwiZ3JleSIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsdGhpcy5jaGFydEhlaWdodC10aGlzLmRyYXdNYXJnaW4udG9wKS5hdHRyKCJ4MiIsdGhpcy5kcmF3V2lkdGgpLmF0dHIoInkyIix0aGlzLmNoYXJ0SGVpZ2h0LXRoaXMuZHJhd01hcmdpbi50b3ApfXJlZnJlc2hNaXNjKCl7dGhpcy56ZXJvTGluZS5hdHRyKCJ5MSIsdGhpcy55U2NhbGUoMCkpLmF0dHIoIngyIix0aGlzLmRyYXdXaWR0aCkuYXR0cigieTIiLHRoaXMueVNjYWxlKDApKSx0aGlzLm5hblRleHQuYXR0cigieSIsdGhpcy5jaGFydEhlaWdodC10aGlzLmRyYXdNYXJnaW4udG9wKSx0aGlzLm5hbkxpbmUuYXR0cigieTEiLHRoaXMuZHJhd0hlaWdodCt0aGlzLmRyYXdNYXJnaW4udG9wKS5hdHRyKCJ4MiIsdGhpcy5kcmF3V2lkdGgpLmF0dHIoInkyIix0aGlzLmRyYXdIZWlnaHQrdGhpcy5kcmF3TWFyZ2luLnRvcCl9cmVmcmVzaEJydXNoKCl7dGhpcy5icnVzaC5leHRlbnQoW1swLDBdLFt0aGlzLmRyYXdXaWR0aCx0aGlzLmRyYXdIZWlnaHQrdGhpcy5tYXJnaW4udG9wXV0pO2xldCBlPVswLHRoaXMuZHJhd0hlaWdodCt0aGlzLm1hcmdpbi50b3BdO2lmKHRoaXMuZmlsdGVyLm1heDx0aGlzLmZpbHRlci5taW4pZVswXT10aGlzLmZpbHRlci5pbmNsdWRlTmFOP3RoaXMueVNjYWxlKHRoaXMuY2hhcnREYXRhLmV4dHJlbWVzLm1pbik6ZVsxXTtlbHNle2lmKCF0aGlzLmZpbHRlci5pbmNsdWRlTmFOKXtsZXQgcj1NYXRoLm1heCh0aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5taW4sdGhpcy5maWx0ZXIubWluKTtlWzFdPXRoaXMueVNjYWxlKHIpfWxldCBpPU1hdGgubWluKHRoaXMuY2hhcnREYXRhLmV4dHJlbWVzLm1heCx0aGlzLmZpbHRlci5tYXgpO2VbMF09dGhpcy55U2NhbGUoaSl9dGhpcy5kcmF3Q29udGFpbmVyLmNhbGwodGhpcy5icnVzaCkuY2FsbCh0aGlzLmJydXNoLm1vdmUsZSl9YnJ1c2hNb3ZlZCgpe2lmKCFzaXx8IXNpLnNvdXJjZUV2ZW50KXJldHVybjtsZXQgZT1zaS5zZWxlY3Rpb247aWYoZSl7bGV0IGk9ITEscj0tMixvPXRoaXMuY2hhcnREYXRhLmV4dHJlbWVzLm1pbjtlWzBdPD10aGlzLmRyYXdIZWlnaHQrdGhpcy5tYXJnaW4udG9wJiZlWzFdPj10aGlzLmRyYXdIZWlnaHQmJihpPSEwKSxlWzBdPHRoaXMuZHJhd0hlaWdodCYmKHI9dGhpcy55U2NhbGUuaW52ZXJ0KGVbMF0pKSxlWzFdPHRoaXMuZHJhd0hlaWdodCYmKG89dGhpcy55U2NhbGUuaW52ZXJ0KGVbMV0pKSx0aGlzLm9uVXBkYXRlRmlsdGVyLmVtaXQoe21heDpyLG1pbjpvLGluY2x1ZGVOYU46aX0pfWVsc2UgdGhpcy5vblVwZGF0ZUZpbHRlci5lbWl0KHttYXg6MSxtaW46LTEsaW5jbHVkZU5hTjohMH0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ2aW9saW4tZmlsdGVyLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KEFldCw3LFJlKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmNoYXJ0Q29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOnttZXRyaWNOYW1lOiJtZXRyaWNOYW1lIixmaWx0ZXI6ImZpbHRlciIsY2hhcnREYXRhOiJjaGFydERhdGEiLHdpZHRoOiJ3aWR0aCIsY29sb3JTY2FsZToiY29sb3JTY2FsZSJ9LG91dHB1dHM6e29uUmVtb3ZlOiJvblJlbW92ZSIsb25VcGRhdGVGaWx0ZXI6Im9uVXBkYXRlRmlsdGVyIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczo5LHZhcnM6MSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0kbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IHJlbW92ZXMgYSBtZXRyaWMgZmlsdGVyLuKQn2E2YmZhZDU4YmIzNjNkNWM4OTFkMGE1NDc0YjFkNzdlZjkwYTM0ZGHikJ84NDU0OTYxNzk3NzYyOTA3NjI0OlJlbW92ZSBGaWx0ZXJgLFtbMSwiY2hhcnQtY29udGFpbmVyIl0sWyJ0aXRsZSIsIlNob3dzIHRoZSBuUE1JIHZhbHVlIGRpc3RyaWJ1dGlvbiBwZXIgcnVuLiBSYW5nZXMgb2Ygc2VsZWN0ZWQgdmFsdWVzIGNhbiBiZSBtYW5pcHVsYXRlZCBieSBtb2RpZnlpbmcgdGhlIGdyZXkgYm94LiIsMSwiY2hhcnQtaGVhZCJdLFsxLCJjaGFydC1oZWFkaW5nIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xlYXJfMjRweCJdLFsxLCJjaGFydCJdLFsiY2hhcnQiLCIiXSxbMSwiZHJhdy1hcmVhIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImRpdiIsMiksQSgzKSx2KCksXyg0LCJidXR0b24iLDMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVtb3ZlLmVtaXQoKX0pLE8oNSwibWF0LWljb24iLDQpLHYoKSgpLF8oNiwiZGl2Iiw1LDYpLEluKCksTyg4LCJzdmciLDcpLHYoKSgpKSwyJmUmJihDKDMpLHl0KGkubWV0cmljTmFtZSkpfSxkZXBlbmRlbmNpZXM6W19uLEd0XSxzdHlsZXM6WyIuY2hhcnQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO292ZXJmbG93OmhpZGRlbn0uY2hhcnRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDozMDBweDt3aWR0aDoxMDAlfS5jaGFydC1oZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5jaGFydC1oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweDtwYWRkaW5nLWxlZnQ6MTBweDtwYWRkaW5nLXRvcDoxMHB4fS5kcmF3LWFyZWFbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnN0cm9rZWQtbGluZVtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOnJnYmEoMCwwLDAsLjEyKTtzdHJva2UtZGFzaGFycmF5OjMgM30iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFBtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFjdGl2ZVJ1bnMkPXRoaXMuc3RvcmUucGlwZSh2dChvbykpLnBpcGUoTChpPT5pP0FycmF5LmZyb20oaS5lbnRyaWVzKCkpLmZpbHRlcihyPT5yWzFdKS5tYXAocj0+clswXSk6W10pKSx0aGlzLnZpc2libGVBbm5vdGF0aW9ucyQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KFBmKSx0aGlzLnN0b3JlLnNlbGVjdChYYiksdGhpcy5zdG9yZS5zZWxlY3QoWmIpXSkucGlwZShMKChbaSxyLG9dKT0+cUYoaSxyLG8pKSksdGhpcy5jaGFydFdpZHRoJD10aGlzLnN0b3JlLnBpcGUodnQoT2YpKS5waXBlKEwoaT0+TWF0aC5tYXgoMTUwLGkpKSksdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChuYykucGlwZShMKGk9PnI9PntpZighaS5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoYFtDb2xvciBzY2FsZV0gdW5rbm93biBydW5JZDogJHtyfS5gKTtyZXR1cm4gaVtyXX0pKX1uZ09uSW5pdCgpe3RoaXMuY2hhcnREYXRhJD1MdChbdGhpcy52aXNpYmxlQW5ub3RhdGlvbnMkLHRoaXMuYWN0aXZlUnVucyRdKS5waXBlKEwoKFtlLGldKT0+ZnVuY3Rpb24obix0LGUpe2xldCBpPXt9LHI9e30sbz1uZXcgU2V0KHQpLHM9U3MoZSksYT17bWF4Oi0xLG1pbjoxfTtPYmplY3QudmFsdWVzKG4pLmZvckVhY2goZD0+e2QuZm9yRWFjaChwPT57bGV0IGg9cC5ydW47aWYoby5oYXMoaCkmJnAubWV0cmljPT09cylpZihudWxsPT09cC5uUE1JVmFsdWUpcltoXT9yW2hdLnB1c2gobnVsbCk6cltoXT1bbnVsbF07ZWxzZXtsZXQgZj1wLm5QTUlWYWx1ZTthLm1heD1hLm1heDxmP2Y6YS5tYXgsYS5taW49YS5taW4+Zj9mOmEubWluLGlbcC5ydW5dP2lbaF0ucHVzaChmKTppW2hdPVtmXX19KX0pO2xldCBsPXt9LGM9TVIoKS5kb21haW4oW2EubWluLGEubWF4XSkudmFsdWUoZD0+ZCksdT1NUigpLmRvbWFpbihbLTEvMCwxLzBdKS50aHJlc2hvbGRzKDApLnZhbHVlKGQ9PmQpO2ZvcihsZXQgZCBvZiBvKWlmKGxbZF09YyhpW2RdKSxyW2RdKXtsZXQgcD11KHJbZF0pO2xbZF0udW5zaGlmdChwWzBdKX1yZXR1cm57dmlvbGluRGF0YTpsLGV4dHJlbWVzOmF9fShlLGksdGhpcy5tZXRyaWNOYW1lKSkpfXJlbW92ZU1ldHJpYygpe3RoaXMuc3RvcmUuZGlzcGF0Y2goR2Ioe21ldHJpYzp0aGlzLm1ldHJpY05hbWV9KSl9dXBkYXRlRmlsdGVyKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goV2Ioe21ldHJpYzp0aGlzLm1ldHJpY05hbWUsLi4uZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktdmlvbGluLWZpbHRlciJdXSxpbnB1dHM6e21ldHJpY05hbWU6Im1ldHJpY05hbWUiLGZpbHRlcjoiZmlsdGVyIn0sZGVjbHM6NCx2YXJzOjExLGNvbnN0czpbWzMsIm1ldHJpY05hbWUiLCJmaWx0ZXIiLCJjaGFydERhdGEiLCJ3aWR0aCIsImNvbG9yU2NhbGUiLCJvblJlbW92ZSIsIm9uVXBkYXRlRmlsdGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJ2aW9saW4tZmlsdGVyLWNvbXBvbmVudCIsMCksUCgib25SZW1vdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVtb3ZlTWV0cmljKCl9KSgib25VcGRhdGVGaWx0ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnVwZGF0ZUZpbHRlcihvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJtZXRyaWNOYW1lIixpLm1ldHJpY05hbWUpKCJmaWx0ZXIiLGkuZmlsdGVyKSgiY2hhcnREYXRhIixVKDEsNSxpLmNoYXJ0RGF0YSQpKSgid2lkdGgiLFUoMiw3LGkuY2hhcnRXaWR0aCQpKSgiY29sb3JTY2FsZSIsVSgzLDksaS5ydW5Db2xvclNjYWxlJCkpfSxkZXBlbmRlbmNpZXM6W0ltZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gUmV0KG4sdCl7aWYoMSZuJiZPKDAsIm5wbWktdmlvbGluLWZpbHRlciIsOCksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt5KCJtZXRyaWNOYW1lIixlWzBdKSgiZmlsdGVyIixlWzFdKX19ZnVuY3Rpb24gT2V0KG4sdCl7MSZuJiYoXygwLCJkaXYiLDkpKDEsInNwYW4iLDEwKSxBKDIsIiBZb3UgY2FuIGFkZCBtb3JlIGZpbHRlcnMgYXQgdGhlIHRvcC4gIiksdigpKCkpfXZhciBSbWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudG9nZ2xlU2lkZWJhckV4cGFuZGVkPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ2aW9saW4tZmlsdGVycy1jb21wb25lbnQiXV0saW5wdXRzOntzaWRlYmFyRXhwYW5kZWQ6InNpZGViYXJFeHBhbmRlZCIsbWV0cmljRmlsdGVyczoibWV0cmljRmlsdGVycyJ9LG91dHB1dHM6e3RvZ2dsZVNpZGViYXJFeHBhbmRlZDoidG9nZ2xlU2lkZWJhckV4cGFuZGVkIn0sZGVjbHM6OSx2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCBleHBhbmRzL2hpZGVzIHRoZSBzaWRlYmFyLuKQnzQ4YzI5OTAzY2U4ODFhYjYxMDg4ZjhkNDlkODI3MjAzNzE2YWFlZDTikJ80NjU4NjAyOTkxOTcwMjYwMjE1OkV4cGFuZC9IaWRlIFNpZGViYXJgLFtbMSwiZmlsdGVycy10b29sYmFyIl0sWzEsImZpbHRlcnMtdGl0bGUiXSxbMSwic2lkZS10b2dnbGUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjaGV2cm9uX2xlZnRfMjRweCJdLFsxLCJmaWx0ZXJzIl0sWzMsIm1ldHJpY05hbWUiLCJmaWx0ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJmaWx0ZXJzLWhpbnQiLDQsIm5nSWYiXSxbMywibWV0cmljTmFtZSIsImZpbHRlciJdLFsxLCJmaWx0ZXJzLWhpbnQiXSxbMSwiZmlsdGVycy1oaW50LXRleHQiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDApKDEsImgzIiwxKSxBKDIsIkFjdGl2ZSBGaWx0ZXJzIiksdigpLF8oMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZVNpZGViYXJFeHBhbmRlZC5lbWl0KCl9KSxPKDUsIm1hdC1pY29uIiw0KSx2KCkoKSgpLF8oNiwiZGl2Iiw1KSxFKDcsUmV0LDEsMiwibnBtaS12aW9saW4tZmlsdGVyIiw2KSx2KCksRSg4LE9ldCwzLDAsImRpdiIsNykpLDImZSYmKEMoNykseSgibmdGb3JPZiIsaS5tZXRyaWNGaWx0ZXJzKSxDKDEpLHkoIm5nSWYiLDA9PT1pLm1ldHJpY0ZpbHRlcnMubGVuZ3RoKSl9LGRlcGVuZGVuY2llczpbZG4sQmUsR3QsX24sUG1lXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9LmZpbHRlcnMtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDo0MnB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6MCAxMHB4fS5maWx0ZXJzLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9LnNpZGUtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6M3B4O2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjMwcHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDozMHB4fS5maWx0ZXJzW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy15OmF1dG99LmZpbHRlcnMtaGludFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweH0uZmlsdGVycy1oaW50LXRleHRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE9tZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnNpZGViYXJFeHBhbmRlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoekYpLHRoaXMubWV0cmljRmlsdGVycyQ9dGhpcy5zdG9yZS5zZWxlY3QoSWwpLnBpcGUoTChpPT5PYmplY3QuZW50cmllcyhpKSkpfW9uVG9nZ2xlU2lkZWJhckV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChxYigpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktdmlvbGluLWZpbHRlcnMiXV0sZGVjbHM6Myx2YXJzOjYsY29uc3RzOltbMywic2lkZWJhckV4cGFuZGVkIiwibWV0cmljRmlsdGVycyIsInRvZ2dsZVNpZGViYXJFeHBhbmRlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwidmlvbGluLWZpbHRlcnMtY29tcG9uZW50IiwwKSxQKCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksdigpKSwyJmUmJnkoInNpZGViYXJFeHBhbmRlZCIsVSgxLDIsaS5zaWRlYmFyRXhwYW5kZWQkKSkoIm1ldHJpY0ZpbHRlcnMiLFUoMiw0LGkubWV0cmljRmlsdGVycyQpKX0sZGVwZW5kZW5jaWVzOltSbWUsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFZldChuLHQsZSl7cmV0dXJuIG4ubGVuZ3RoIT10Lmxlbmd0aD9lOnQubWFwKChvLHMpPT5vLW5bc10pLm1hcChvPT5NYXRoLnBvdyhvLDIpKS5yZWR1Y2UoKG8scyk9Pm8rcywwKX12YXIgSGV0PVsiaW5wdXQiXSxVZXQ9ZnVuY3Rpb24obil7cmV0dXJue2VudGVyRHVyYXRpb246bn19LHpldD1bIioiXSxqZXQ9bmV3IHBlKCJtYXQtc2xpZGUtdG9nZ2xlLWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pih7ZGlzYWJsZVRvZ2dsZVZhbHVlOiExfSl9KSxHZXQ9MCxXZXQ9e3Byb3ZpZGU6Tm8sdXNlRXhpc3Rpbmc6Sm4oKCk9Pl82KSxtdWx0aTohMH0scWV0PW9jKGtvKHFvKHNvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSkpKSxZZXQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHFldHtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihlKSx0aGlzLl9mb2N1c01vbml0b3I9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuZGVmYXVsdHM9cyx0aGlzLl9vbkNoYW5nZT1jPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX3JlcXVpcmVkPSExLHRoaXMuX2NoZWNrZWQ9ITEsdGhpcy5uYW1lPW51bGwsdGhpcy5sYWJlbFBvc2l0aW9uPSJhZnRlciIsdGhpcy5hcmlhTGFiZWw9bnVsbCx0aGlzLmFyaWFMYWJlbGxlZGJ5PW51bGwsdGhpcy5jaGFuZ2U9bmV3IEcsdGhpcy50b2dnbGVDaGFuZ2U9bmV3IEcsdGhpcy50YWJJbmRleD1wYXJzZUludChvKXx8MCx0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPXMuY29sb3J8fCJhY2NlbnQiLHRoaXMuX25vb3BBbmltYXRpb25zPSJOb29wQW5pbWF0aW9ucyI9PT1hLHRoaXMuaWQ9dGhpcy5fdW5pcXVlSWQ9YCR7bH0keysrR2V0fWB9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZChlKXt0aGlzLl9yZXF1aXJlZD1SdChlKX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLl9jaGVja2VkfXNldCBjaGVja2VkKGUpe3RoaXMuX2NoZWNrZWQ9UnQoZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGlucHV0SWQoKXtyZXR1cm5gJHt0aGlzLmlkfHx0aGlzLl91bmlxdWVJZH0taW5wdXRgfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZShlPT57ImtleWJvYXJkIj09PWV8fCJwcm9ncmFtIj09PWU/dGhpcy5fZm9jdXNlZD0hMDplfHxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fZm9jdXNlZD0hMSx0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZil9d3JpdGVWYWx1ZShlKXt0aGlzLmNoZWNrZWQ9ISFlfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX10b2dnbGUoKXt0aGlzLmNoZWNrZWQ9IXRoaXMuY2hlY2tlZCx0aGlzLl9vbkNoYW5nZSh0aGlzLmNoZWNrZWQpfV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9vbkNoYW5nZSh0aGlzLmNoZWNrZWQpLHRoaXMuY2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQodGhpcy5jaGVja2VkKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtubCgpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLGlucHV0czp7bmFtZToibmFtZSIsaWQ6ImlkIixsYWJlbFBvc2l0aW9uOiJsYWJlbFBvc2l0aW9uIixhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGFyaWFEZXNjcmliZWRieTpbImFyaWEtZGVzY3JpYmVkYnkiLCJhcmlhRGVzY3JpYmVkYnkiXSxyZXF1aXJlZDoicmVxdWlyZWQiLGNoZWNrZWQ6ImNoZWNrZWQifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsdG9nZ2xlQ2hhbmdlOiJ0b2dnbGVDaGFuZ2UifSxmZWF0dXJlczpbdHRdfSksbn0pKCksXzY9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFlldHtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7c3VwZXIoZSxpLHIsbyxzLGEsIm1hdC1zbGlkZS10b2dnbGUtIil9X2NyZWF0ZUNoYW5nZUV2ZW50KGUpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMuY2hlY2tlZD1lfX0odGhpcyxlKX1fb25DaGFuZ2VFdmVudChlKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMudG9nZ2xlQ2hhbmdlLmVtaXQoKSx0aGlzLmRlZmF1bHRzLmRpc2FibGVUb2dnbGVWYWx1ZT90aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkPXRoaXMuY2hlY2tlZDoodGhpcy5jaGVja2VkPXRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQsdGhpcy5fZW1pdENoYW5nZUV2ZW50KCkpfV9vbklucHV0Q2xpY2soZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX1mb2N1cyhlLGkpe2k/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2lucHV0RWxlbWVudCxpLGUpOnRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9vbkxhYmVsVGV4dENoYW5nZSgpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSksTShGciksTShubiksdm8oInRhYmluZGV4IiksTShqZXQpLE0oUGksOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1zbGlkZS10b2dnbGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChIZXQsNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5faW5wdXRFbGVtZW50PXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtc2xpZGUtdG9nZ2xlIl0saG9zdFZhcnM6MTMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiYoX3MoImlkIixpLmlkKSx6ZSgidGFiaW5kZXgiLG51bGwpKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgibmFtZSIsbnVsbCksZXQoIm1hdC1jaGVja2VkIixpLmNoZWNrZWQpKCJtYXQtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSIsImJlZm9yZSI9PWkubGFiZWxQb3NpdGlvbikoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixpLl9ub29wQW5pbWF0aW9ucykpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgifSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl0sZmVhdHVyZXM6WyR0KFtXZXRdKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOnpldCxkZWNsczoxNCx2YXJzOjIwLGNvbnN0czpbWzEsIm1hdC1zbGlkZS10b2dnbGUtbGFiZWwiXSxbImxhYmVsIiwiIl0sWzEsIm1hdC1zbGlkZS10b2dnbGUtYmFyIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJyb2xlIiwic3dpdGNoIiwxLCJtYXQtc2xpZGUtdG9nZ2xlLWlucHV0IiwiY2RrLXZpc3VhbGx5LWhpZGRlbiIsMywiaWQiLCJyZXF1aXJlZCIsInRhYkluZGV4IiwiY2hlY2tlZCIsImRpc2FibGVkIiwiY2hhbmdlIiwiY2xpY2siXSxbImlucHV0IiwiIl0sWzEsIm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVyIl0sWzEsIm1hdC1zbGlkZS10b2dnbGUtdGh1bWIiXSxbIm1hdC1yaXBwbGUiLCIiLDEsIm1hdC1zbGlkZS10b2dnbGUtcmlwcGxlIiwibWF0LWZvY3VzLWluZGljYXRvciIsMywibWF0UmlwcGxlVHJpZ2dlciIsIm1hdFJpcHBsZURpc2FibGVkIiwibWF0UmlwcGxlQ2VudGVyZWQiLCJtYXRSaXBwbGVSYWRpdXMiLCJtYXRSaXBwbGVBbmltYXRpb24iXSxbMSwibWF0LXJpcHBsZS1lbGVtZW50IiwibWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZSJdLFsxLCJtYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQiLDMsImNka09ic2VydmVDb250ZW50Il0sWyJsYWJlbENvbnRlbnQiLCIiXSxbMiwiZGlzcGxheSIsIm5vbmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJih4aSgpLF8oMCwibGFiZWwiLDAsMSkoMiwic3BhbiIsMikoMywiaW5wdXQiLDMsNCksUCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25DaGFuZ2VFdmVudChvKX0pKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX29uSW5wdXRDbGljayhvKX0pLHYoKSxfKDUsInNwYW4iLDUpLE8oNiwic3BhbiIsNiksXyg3LCJzcGFuIiw3KSxPKDgsInNwYW4iLDgpLHYoKSgpKCksXyg5LCJzcGFuIiw5LDEwKSxQKCJjZGtPYnNlcnZlQ29udGVudCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25MYWJlbFRleHRDaGFuZ2UoKX0pLF8oMTEsInNwYW4iLDExKSxBKDEyLCJceGEwIiksdigpLFZuKDEzKSx2KCkoKSksMiZlKXtsZXQgcj0kZSgxKSxvPSRlKDEwKTt6ZSgiZm9yIixpLmlucHV0SWQpLEMoMiksZXQoIm1hdC1zbGlkZS10b2dnbGUtYmFyLW5vLXNpZGUtbWFyZ2luIiwhby50ZXh0Q29udGVudHx8IW8udGV4dENvbnRlbnQudHJpbSgpKSxDKDEpLHkoImlkIixpLmlucHV0SWQpKCJyZXF1aXJlZCIsaS5yZXF1aXJlZCkoInRhYkluZGV4IixpLnRhYkluZGV4KSgiY2hlY2tlZCIsaS5jaGVja2VkKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWQpLHplKCJuYW1lIixpLm5hbWUpKCJhcmlhLWNoZWNrZWQiLGkuY2hlY2tlZCkoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLmFyaWFMYWJlbGxlZGJ5KSgiYXJpYS1kZXNjcmliZWRieSIsaS5hcmlhRGVzY3JpYmVkYnkpLEMoNCkseSgibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpKCJtYXRSaXBwbGVDZW50ZXJlZCIsITApKCJtYXRSaXBwbGVSYWRpdXMiLDIwKSgibWF0UmlwcGxlQW5pbWF0aW9uIixPbigxOCxVZXQsaS5fbm9vcEFuaW1hdGlvbnM/MDoxNTApKX19LGRlcGVuZGVuY2llczpbWW8sd2hdLHN0eWxlczpbJy5tYXQtc2xpZGUtdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyNHB4O21heC13aWR0aDoxMDAlO2xpbmUtaGVpZ2h0OjI0cHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDE2cHgsIDAsIDApfVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xNnB4LCAwLCAwKX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtZGlzYWJsZWR7b3BhY2l0eTouMzh9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWRpc2FibGVkIC5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1zbGlkZS10b2dnbGUtbGFiZWx7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7ZGlzcGxheTpmbGV4O2ZsZXg6MTtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDppbmhlcml0O2N1cnNvcjpwb2ludGVyfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnR7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSAubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbHtvcmRlcjoxfS5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7b3JkZXI6Mn1bZGlyPXJ0bF0gLm1hdC1zbGlkZS10b2dnbGUtbGFiZWwtYmVmb3JlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciwubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7bWFyZ2luLXJpZ2h0OjhweDttYXJnaW4tbGVmdDowfVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIsLm1hdC1zbGlkZS10b2dnbGUtbGFiZWwtYmVmb3JlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1zbGlkZS10b2dnbGUtYmFyLW5vLXNpZGUtbWFyZ2lue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O3RvcDotM3B4O2xlZnQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjphbGwgODBtcyBsaW5lYXI7dHJhbnNpdGlvbi1wcm9wZXJ0eTp0cmFuc2Zvcm19Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lcnt0cmFuc2l0aW9uOm5vbmV9W2Rpcj1ydGxdIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6YmxvY2t9Lm1hdC1zbGlkZS10b2dnbGUtYmFye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjM2cHg7aGVpZ2h0OjE0cHg7ZmxleC1zaHJpbms6MDtib3JkZXItcmFkaXVzOjhweH0ubWF0LXNsaWRlLXRvZ2dsZS1pbnB1dHtib3R0b206MDtsZWZ0OjEwcHh9W2Rpcj1ydGxdIC5tYXQtc2xpZGUtdG9nZ2xlLWlucHV0e2xlZnQ6YXV0bztyaWdodDoxMHB4fS5tYXQtc2xpZGUtdG9nZ2xlLWJhciwubWF0LXNsaWRlLXRvZ2dsZS10aHVtYnt0cmFuc2l0aW9uOmFsbCA4MG1zIGxpbmVhcjt0cmFuc2l0aW9uLXByb3BlcnR5OmJhY2tncm91bmQtY29sb3I7dHJhbnNpdGlvbi1kZWxheTo1MG1zfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIsLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie3RyYW5zaXRpb246bm9uZX0ubWF0LXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS1yaXBwbGV7cG9zaXRpb246YWJzb2x1dGU7dG9wOmNhbGMoNTAlIC0gMjBweCk7bGVmdDpjYWxjKDUwJSAtIDIwcHgpO2hlaWdodDo0MHB4O3dpZHRoOjQwcHg7ei1pbmRleDoxO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1zbGlkZS10b2dnbGUgLm1hdC1zbGlkZS10b2dnbGUtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxlKXtvcGFjaXR5Oi4xMn0ubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RyYW5zZm9ybTpub25lfS5tYXQtc2xpZGUtdG9nZ2xlLWJhcjpob3ZlciAubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5Oi4wNH0ubWF0LXNsaWRlLXRvZ2dsZTpub3QoLm1hdC1kaXNhYmxlZCkuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTouMTJ9Lm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1zbGlkZS10b2dnbGUubWF0LWRpc2FibGVkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcjpob3ZlciAubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5OjB9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LXNsaWRlLXRvZ2dsZS1iYXI6aG92ZXIgLm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGV7ZGlzcGxheTpub25lfX0ubWF0LXNsaWRlLXRvZ2dsZS1pbnB1dDpmb2N1c34ubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7Ym9yZGVyOjFweCBzb2xpZH0nXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxYZXQ9e3Byb3ZpZGU6TG8sdXNlRXhpc3Rpbmc6Sm4oKCk9PlFldCksbXVsdGk6ITB9LFFldD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZ3d7fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNsaWRlLXRvZ2dsZSIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJtYXQtc2xpZGUtdG9nZ2xlIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsibWF0LXNsaWRlLXRvZ2dsZSIsInJlcXVpcmVkIiwiIiwibmdNb2RlbCIsIiJdXSxmZWF0dXJlczpbJHQoW1hldF0pLHR0XX0pLG59KSgpLEZtZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksTm1lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltGbWUsX2wsbG4sb2QsRm1lLGxuXX0pLG59KSgpO2Z1bmN0aW9uIFpldChuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMyl9dmFyIExtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEd9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtc2VhcmNoLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmZXQoInZhbGlkIixpLmlzUmVnZXhGaWx0ZXJWYWxpZCl9LGlucHV0czp7cmVnZXhGaWx0ZXJWYWx1ZToicmVnZXhGaWx0ZXJWYWx1ZSIsaXNSZWdleEZpbHRlclZhbGlkOiJpc1JlZ2V4RmlsdGVyVmFsaWQifSxvdXRwdXRzOntvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWyJzdmdJY29uIiwic2VhcmNoXzI0cHgiXSxbImF1dG9jb21wbGV0ZSIsIm9mZiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIEFubm90YXRpb25zIiwzLCJ2YWx1ZSIsImlucHV0Il0sWyJzdmdJY29uIiwiZXJyb3JfMjRweCIsImNsYXNzIiwiZXJyb3ItaWNvbiIsIm1hdFRvb2x0aXAiLCJJbnZhbGlkIHJlZ2V4IGZpbHRlci4gVGhlIHJlc3VsdCBtYXkgYmUgc3RhbGUuIiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiZXJyb3JfMjRweCIsIm1hdFRvb2x0aXAiLCJJbnZhbGlkIHJlZ2V4IGZpbHRlci4gVGhlIHJlc3VsdCBtYXkgYmUgc3RhbGUuIiwxLCJlcnJvci1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJtYXQtaWNvbiIsMCksXygxLCJpbnB1dCIsMSksUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KG8udGFyZ2V0LnZhbHVlKX0pLHYoKSxFKDIsWmV0LDEsMCwibWF0LWljb24iLDIpKSwyJmUmJihDKDEpLHkoInZhbHVlIixpLnJlZ2V4RmlsdGVyVmFsdWUpLEMoMSkseSgibmdJZiIsIWkuaXNSZWdleEZpbHRlclZhbGlkKSl9LGRlcGVuZGVuY2llczpbQmUsR3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCl7Y29sb3I6I2M2MjgyOH1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpICAgLmVycm9yLWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjNjI4Mjg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEJtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFubm90YXRpb25zRmlsdGVyJD10aGlzLnN0b3JlLnNlbGVjdChRYiksdGhpcy5pc0Fubm90YXRpb25zRmlsdGVyVmFsaWQkPXRoaXMuYW5ub3RhdGlvbnNGaWx0ZXIkLnBpcGUoTChpPT57dHJ5e3JldHVybiBuZXcgUmVnRXhwKGkpLCEwfWNhdGNoe3JldHVybiExfX0pKX1maWx0ZXJDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChqYih7cmVnZXg6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtc2VhcmNoIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInJlZ2V4RmlsdGVyVmFsdWUiLCJpc1JlZ2V4RmlsdGVyVmFsaWQiLCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm5wbWktYW5ub3RhdGlvbnMtc2VhcmNoLWNvbXBvbmVudCIsMCksUCgib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5maWx0ZXJDaGFuZ2Uobyl9KSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJyZWdleEZpbHRlclZhbHVlIixVKDEsMixpLmFubm90YXRpb25zRmlsdGVyJCkpKCJpc1JlZ2V4RmlsdGVyVmFsaWQiLFUoMiw0LGkuaXNBbm5vdGF0aW9uc0ZpbHRlclZhbGlkJCkpfSxkZXBlbmRlbmNpZXM6W0xtZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gZXR0KG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO3NuKDApLF8oMSwiYnV0dG9uIiw1KSxQKCJjbGljayIsZnVuY3Rpb24oKXtvZShlKTtsZXQgcj1TKCk7cmV0dXJuIHNlKHIub25GbGFnQW5ub3RhdGlvbnMuZW1pdChyLnNlbGVjdGVkQW5ub3RhdGlvbnMpKX0pLE8oMiwibWF0LWljb24iLDYpLHYoKSxfKDMsImJ1dHRvbiIsNyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7b2UoZSk7bGV0IHI9UygpO3JldHVybiBzZShyLm9uSGlkZUFubm90YXRpb25zLmVtaXQoci5zZWxlY3RlZEFubm90YXRpb25zKSl9KSxPKDQsIm1hdC1pY29uIiw4KSx2KCksYW4oKX1pZigyJm4pe2xldCBlPVMoKTtDKDEpLHkoImRpc2FibGVkIiwwPT09ZS5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aCksQygyKSx5KCJkaXNhYmxlZCIsMD09PWUuc2VsZWN0ZWRBbm5vdGF0aW9ucy5sZW5ndGgpfX1mdW5jdGlvbiB0dHQobix0KXtpZigxJm4pe2xldCBlPVBlKCk7c24oMCksXygxLCJtYXQtc2xpZGUtdG9nZ2xlIiw5KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5vblRvZ2dsZVNob3dDb3VudHMuZW1pdCgpKX0pLEEoMiwiIFNhbXBsZSBDb3VudCAiKSx2KCksXygzLCJtYXQtc2xpZGUtdG9nZ2xlIiwxMCksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub25Ub2dnbGVTaG93SGlkZGVuLmVtaXQoKSl9KSxBKDQsIiBTaG93IEhpZGRlbiAiKSx2KCksTyg1LCJucG1pLWFubm90YXRpb25zLXNlYXJjaCIpLGFuKCl9aWYoMiZuKXtsZXQgZT1TKCk7QygxKSx5KCJjaGVja2VkIixlLnNob3dDb3VudHMpLEMoMikseSgiY2hlY2tlZCIsZS5zaG93SGlkZGVuKX19dmFyIFZtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vbkZsYWdBbm5vdGF0aW9ucz1uZXcgRyx0aGlzLm9uSGlkZUFubm90YXRpb25zPW5ldyBHLHRoaXMub25Ub2dnbGVFeHBhbmRlZD1uZXcgRyx0aGlzLm9uVG9nZ2xlU2hvd0NvdW50cz1uZXcgRyx0aGlzLm9uVG9nZ2xlU2hvd0hpZGRlbj1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1hbm5vdGF0aW9ucy1saXN0LXRvb2xiYXItY29tcG9uZW50Il1dLGlucHV0czp7bnVtQW5ub3RhdGlvbnM6Im51bUFubm90YXRpb25zIixleHBhbmRlZDoiZXhwYW5kZWQiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMiLGFubm90YXRpb25zRXhwYW5kZWQ6ImFubm90YXRpb25zRXhwYW5kZWQiLHNob3dDb3VudHM6InNob3dDb3VudHMiLHNob3dIaWRkZW46InNob3dIaWRkZW4ifSxvdXRwdXRzOntvbkZsYWdBbm5vdGF0aW9uczoib25GbGFnQW5ub3RhdGlvbnMiLG9uSGlkZUFubm90YXRpb25zOiJvbkhpZGVBbm5vdGF0aW9ucyIsb25Ub2dnbGVFeHBhbmRlZDoib25Ub2dnbGVFeHBhbmRlZCIsb25Ub2dnbGVTaG93Q291bnRzOiJvblRvZ2dsZVNob3dDb3VudHMiLG9uVG9nZ2xlU2hvd0hpZGRlbjoib25Ub2dnbGVTaG93SGlkZGVuIn0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZSxpO3JldHVybiB0PSRsb2NhbGl6ZWA6TGFiZWwgZm9yIGEgYnV0dG9uIHRoYXQgaGlkZXMvc2hvd3MgdGhlIGFubm90YXRpb25zIGxpc3Qu4pCfYjM2MDNiYTMzZTUzMDhkZDhjNWU4MDVlNTA4YjJmNzIzM2RmODlkNOKQnzczMzYzNzQ0MTMwNTYzNDI0OTI6SGlkZXMvU2hvd3MgdGhlIEFubm90YXRpb25zIExpc3RgLGU9JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCBmbGFncyBzZWxlY3RlZCBhbm5vdGF0aW9ucy7ikJ81NjkyYWQ4ODMxMDM4YTkwYzU4NjNhMWU5YWRmOTc0OGNhYzNjYWQ44pCfMjI0NDA5OTg5MTMxMzMzNjU5NTpGbGFnIFNlbGVjdGVkIEFubm90YXRpb25zYCxpPSRsb2NhbGl6ZWA6TGFiZWwgZm9yIGEgYnV0dG9uIHRoYXQgaGlkZXMgc2VsZWN0ZWQgYW5ub3RhdGlvbnMu4pCfMDM0MmNkYjMzNThmYThlM2ZhMjcyMjBhODI1OGE3Mjg3NDMwYjcwZuKQnzU0NjI4MzIzOTEwOTIwODc0ODU6SGlkZSBTZWxlY3RlZCBBbm5vdGF0aW9uc2AsW1sxLCJhbm5vdGF0aW9ucy10aXRsZS1jb250YWluZXIiXSxbMSwiYW5ub3RhdGlvbnMtdGl0bGUiXSxbNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwxLCJleHBhbmQtYnV0dG9uIiwzLCJjbGljayJdLFszLCJzdmdJY29uIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLCJ0aXRsZSIsIkZsYWdnaW5nIGFubm90YXRpb25zIGFkZHMgdGhlbSB0byB5b3VyIGludmVzdGlnYXRpb24gcmVzdWx0cywgd2hpY2ggY2FuIGxhdGVyIGJlIGV4cG9ydGVkLiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsImZsYWdfMjRweCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsaSwidGl0bGUiLCJSZW1vdmluZyBub24tY3JpdGljYWwgYW5ub3RhdGlvbnMgdW5jbHV0dGVycyB0aGUgdmlldy4gUmVtb3ZlZCBhbm5vdGF0aW9ucyBhcmUgcmVtb3ZlZCBmcm9tIGFsbCB2aXN1YWxpemF0aW9ucy4iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJ2aXNpYmlsaXR5X29mZl8yNHB4Il0sWyJ0aXRsZSIsIkhpZGVzIGFuZCBzaG93cyB0aGUgc2FtcGxlIGNvdW50IHdoZXJlIGFwcGxpY2FibGUgKGhvdyBtYW55IHNhbXBsZXMgYmVsb25nIHRvIGEgY2F0ZWdvcnkpLiIsMSwic2hvdy10b2dnbGUiLDMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbInRpdGxlIiwiSGlkZXMgYW5kIHNob3dzIGhpZGRlbiBhbm5vdGF0aW9ucyBpbiBhbGwgdmlzdWFsaXphdGlvbnMuIiwxLCJzaG93LXRvZ2dsZSIsMywiY2hlY2tlZCIsImNoYW5nZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCkoMSwiaDMiLDEpLEEoMiksdigpLEUoMyxldHQsNSwyLCJuZy1jb250YWluZXIiLDIpLHYoKSxFKDQsdHR0LDYsMiwibmctY29udGFpbmVyIiwyKSxfKDUsImJ1dHRvbiIsMyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub2dnbGVFeHBhbmRlZC5lbWl0KCl9KSxPKDYsIm1hdC1pY29uIiw0KSx2KCkpLDImZSYmKEMoMiksamUoIkFubm90YXRpb25zICgiLGkubnVtQW5ub3RhdGlvbnMsIikiKSxDKDEpLHkoIm5nSWYiLGkuZXhwYW5kZWQpLEMoMSkseSgibmdJZiIsaS5leHBhbmRlZCksQygyKSx5KCJzdmdJY29uIixpLmV4cGFuZGVkPyJleHBhbmRfbGVzc18yNHB4IjoiZXhwYW5kX21vcmVfMjRweCIpKX0sZGVwZW5kZW5jaWVzOltCZSxHdCxfbixfNixCbWVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3BhZGRpbmc6MCAxNnB4O3dpZHRoOjEwMCV9LmFubm90YXRpb25zLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6LjllbTtmb250LXdlaWdodDo1MDA7cGFkZGluZy1yaWdodDoxMHB4fS5hbm5vdGF0aW9ucy10aXRsZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOm5vd3JhcDtmbGV4OjEgMTtoZWlnaHQ6NDJweH0uc2hvdy10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtO21hcmdpbi1yaWdodDouOGVtfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSG1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2VsZWN0ZWRBbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QodmMpLHRoaXMuYW5ub3RhdGlvbnNFeHBhbmRlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoVUYpLHRoaXMuc2hvd0NvdW50cyQ9dGhpcy5zdG9yZS5zZWxlY3QoakYpLHRoaXMuc2hvd0hpZGRlbiQ9dGhpcy5zdG9yZS5zZWxlY3QoWmIpLHRoaXMuYW5ub3RhdGlvbnNGaWx0ZXIkPXRoaXMuc3RvcmUuc2VsZWN0KFFiKSx0aGlzLmlzQW5ub3RhdGlvbnNGaWx0ZXJWYWxpZCQ9dGhpcy5hbm5vdGF0aW9uc0ZpbHRlciQucGlwZShMKGk9Pnt0cnl7cmV0dXJuIEJvb2xlYW4obmV3IFJlZ0V4cChpKSl9Y2F0Y2h7cmV0dXJuITF9fSkpfWZpbHRlckNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGpiKHtyZWdleDplfSkpfWZsYWdBbm5vdGF0aW9ucyhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEVGKHthbm5vdGF0aW9uczplfSkpfWhpZGVBbm5vdGF0aW9ucyhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFRGKHthbm5vdGF0aW9uczplfSkpfXRvZ2dsZUV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChSRigpKX10b2dnbGVTaG93Q291bnRzKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChPRigpKX10b2dnbGVTaG93SGlkZGVuKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChrRigpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyIl1dLGlucHV0czp7bnVtQW5ub3RhdGlvbnM6Im51bUFubm90YXRpb25zIixleHBhbmRlZDoiZXhwYW5kZWQifSxkZWNsczo1LHZhcnM6MTQsY29uc3RzOltbMywibnVtQW5ub3RhdGlvbnMiLCJleHBhbmRlZCIsInNlbGVjdGVkQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uc0V4cGFuZGVkIiwic2hvd0NvdW50cyIsInNob3dIaWRkZW4iLCJvbkZsYWdBbm5vdGF0aW9ucyIsIm9uSGlkZUFubm90YXRpb25zIiwib25Ub2dnbGVFeHBhbmRlZCIsIm9uVG9nZ2xlU2hvd0NvdW50cyIsIm9uVG9nZ2xlU2hvd0hpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwibnBtaS1hbm5vdGF0aW9ucy1saXN0LXRvb2xiYXItY29tcG9uZW50IiwwKSxQKCJvbkZsYWdBbm5vdGF0aW9ucyIsZnVuY3Rpb24obyl7cmV0dXJuIGkuZmxhZ0Fubm90YXRpb25zKG8pfSkoIm9uSGlkZUFubm90YXRpb25zIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oaWRlQW5ub3RhdGlvbnMobyl9KSgib25Ub2dnbGVFeHBhbmRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS50b2dnbGVFeHBhbmRlZCgpfSkoIm9uVG9nZ2xlU2hvd0NvdW50cyIsZnVuY3Rpb24oKXtyZXR1cm4gaS50b2dnbGVTaG93Q291bnRzKCl9KSgib25Ub2dnbGVTaG93SGlkZGVuIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZVNob3dIaWRkZW4oKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLEIoNCwiYXN5bmMiKSx2KCkpLDImZSYmeSgibnVtQW5ub3RhdGlvbnMiLGkubnVtQW5ub3RhdGlvbnMpKCJleHBhbmRlZCIsaS5leHBhbmRlZCkoInNlbGVjdGVkQW5ub3RhdGlvbnMiLFUoMSw2LGkuc2VsZWN0ZWRBbm5vdGF0aW9ucyQpKSgiYW5ub3RhdGlvbnNFeHBhbmRlZCIsVSgyLDgsaS5hbm5vdGF0aW9uc0V4cGFuZGVkJCkpKCJzaG93Q291bnRzIixVKDMsMTAsaS5zaG93Q291bnRzJCkpKCJzaG93SGlkZGVuIixVKDQsMTIsaS5zaG93SGlkZGVuJCkpfSxkZXBlbmRlbmNpZXM6W1ZtZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gcnR0KG4sdCl7aWYoMSZuJiZPKDAsIm1hdC1pY29uIiw4KSwyJm4pe2xldCBlPVMoMik7eSgic3ZnSWNvbiIsZS5zb3J0Lm9yZGVyPT09ZS5Tb3J0T3JkZXIuREVTQ0VORElORz8iYXJyb3dfZG93bndhcmRfMjRweCI6ImFycm93X3Vwd2FyZF8yNHB4IikoIm5nQ2xhc3MiLGUuc29ydC5vcmRlcj09PWUuU29ydE9yZGVyLkRFU0NFTkRJTkc/ImRvd24taWNvbiI6InVwLWljb24iKX19ZnVuY3Rpb24gb3R0KG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2Iiw0KSgxLCJkaXYiLDUpKDIsImRpdiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89b2UoZSkuJGltcGxpY2l0O3JldHVybiBzZShTKCkub25DaGFuZ2VTb3J0LmVtaXQobykpfSksQSgzKSxFKDQscnR0LDEsMiwibWF0LWljb24iLDcpLHYoKSgpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoKTtDKDMpLGplKCIgIixpLnN0cmlwTWV0cmljKGUpLCIgIiksQygxKSx5KCJuZ0lmIixlPT09aS5zb3J0Lm1ldHJpYyl9fXZhciBVbWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25DaGFuZ2VTb3J0PW5ldyBHLHRoaXMub25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQ9bmV3IEcsdGhpcy5Tb3J0T3JkZXI9JHJ9c3RyaXBNZXRyaWMoZSl7cmV0dXJuIFNzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJucG1pLWFubm90YXRpb25zLWxpc3QtaGVhZGVyLWNvbXBvbmVudCJdXSxpbnB1dHM6e251bUFubm90YXRpb25zOiJudW1Bbm5vdGF0aW9ucyIsc2VsZWN0ZWRBbm5vdGF0aW9uczoic2VsZWN0ZWRBbm5vdGF0aW9ucyIsYWN0aXZlTWV0cmljczoiYWN0aXZlTWV0cmljcyIsc29ydDoic29ydCJ9LG91dHB1dHM6e29uQ2hhbmdlU29ydDoib25DaGFuZ2VTb3J0IixvbkFsbEFubm90YXRpb25zVG9nZ2xlZDoib25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQifSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJ0b2dnbGUtYWxsLWNvbnRhaW5lciJdLFszLCJjaGVja2VkIiwiY2hhbmdlIl0sWzEsImFubm90YXRpb25zLWhlYWRlci1jb250YWluZXJzIl0sWyJjbGFzcyIsImhlYWRlci1jb2x1bW4iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJoZWFkZXItY29sdW1uIl0sWzEsImhlYWRlci1jb250YWluZXIiXSxbInRhYmluZGV4IiwiMCIsInJvbGUiLCJidXR0b24iLCJ0aXRsZSIsIkNoYW5nZSB0aGUgc29ydCBieSBjbGlja2luZyBhbnkgb2YgdGhlIG1ldHJpY3MuIiwxLCJoZWFkZXItY2xpY2thYmxlIiwzLCJjbGljayJdLFsiY2xhc3MiLCJzb3J0LWljb24iLDMsInN2Z0ljb24iLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWzEsInNvcnQtaWNvbiIsMywic3ZnSWNvbiIsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCkoMSwibWF0LWNoZWNrYm94IiwxKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQWxsQW5ub3RhdGlvbnNUb2dnbGVkLmVtaXQoby5jaGVja2VkKX0pLHYoKSgpLF8oMiwiZGl2IiwyKSxFKDMsb3R0LDUsMiwiZGl2IiwzKSx2KCkpLDImZSYmKEMoMSkseSgiY2hlY2tlZCIsaS5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aD09PWkubnVtQW5ub3RhdGlvbnMpLEMoMikseSgibmdGb3JPZiIsaS5hY3RpdmVNZXRyaWNzKSl9LGRlcGVuZGVuY2llczpbRm4sZG4sQmUseWwsR3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Ym9yZGVyLWJvdHRvbToycHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjI4cHg7YWxpZ24taXRlbXM6ZmxleC1lbmQ7bWFyZ2luLXRvcDo4cHh9LmFubm90YXRpb25zLWhlYWRlci1jb250YWluZXJzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOi45ZW07Zm9udC13ZWlnaHQ6NTAwO2ZsZXgtZ3JvdzoxfS5oZWFkZXItY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMX0uaGVhZGVyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhlYWRlci1jbGlja2FibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtvdXRsaW5lOm5vbmV9LnRvZ2dsZS1hbGwtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxMHB4O3dpZHRoOjkwcHh9LnNvcnQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjE2cHh9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx6bWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zZWxlY3RlZEFubm90YXRpb25zJD10aGlzLnN0b3JlLnNlbGVjdCh2YyksdGhpcy5hbm5vdGF0aW9uU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoS2IpfWNoYW5nZVNvcnQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChBRih7bWV0cmljOmV9KSl9YWxsQW5ub3RhdGlvbnNUb2dnbGVkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goUkUoZT97YW5ub3RhdGlvbnM6T2JqZWN0LmtleXModGhpcy5hbm5vdGF0aW9ucyl9Onthbm5vdGF0aW9uczpbXX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtbGlzdC1oZWFkZXIiXV0saW5wdXRzOntudW1Bbm5vdGF0aW9uczoibnVtQW5ub3RhdGlvbnMiLGFubm90YXRpb25zOiJhbm5vdGF0aW9ucyIsYWN0aXZlTWV0cmljczoiYWN0aXZlTWV0cmljcyJ9LGRlY2xzOjMsdmFyczo4LGNvbnN0czpbWzMsIm51bUFubm90YXRpb25zIiwic2VsZWN0ZWRBbm5vdGF0aW9ucyIsInNvcnQiLCJhY3RpdmVNZXRyaWNzIiwib25DaGFuZ2VTb3J0Iiwib25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm5wbWktYW5ub3RhdGlvbnMtbGlzdC1oZWFkZXItY29tcG9uZW50IiwwKSxQKCJvbkNoYW5nZVNvcnQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmNoYW5nZVNvcnQobyl9KSgib25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmFsbEFubm90YXRpb25zVG9nZ2xlZChvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksdigpKSwyJmUmJnkoIm51bUFubm90YXRpb25zIixpLm51bUFubm90YXRpb25zKSgic2VsZWN0ZWRBbm5vdGF0aW9ucyIsVSgxLDQsaS5zZWxlY3RlZEFubm90YXRpb25zJCkpKCJzb3J0IixVKDIsNixpLmFubm90YXRpb25Tb3J0JCkpKCJhY3RpdmVNZXRyaWNzIixpLmFjdGl2ZU1ldHJpY3MpfSxkZXBlbmRlbmNpZXM6W1VtZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksbHR0PVsiZ2x5cGgiXSxqbWU9KCgpPT57Y2xhc3MgbntuZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN2Zz1ibyh0aGlzLmdseXBoU1ZHLm5hdGl2ZUVsZW1lbnQpLHRoaXMubWFpbkNvbnRhaW5lcj10aGlzLnN2Zy5hcHBlbmQoImciKSx0aGlzLmRyYXcoKX1kcmF3KCl7ImNpcmNsZSI9PXRoaXMuc2hhcGU/dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiZmlsbCIsdGhpcy5jb2xvcikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJjeCIsNSkuYXR0cigiY3kiLDUpLmF0dHIoInIiLDUpOiJiYXIiPT10aGlzLnNoYXBlP3RoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoInJlY3QiKS5hdHRyKCJmaWxsIix0aGlzLmNvbG9yKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApOiJydW5JbmRpY2F0b3IiPT10aGlzLnNoYXBlJiZ0aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsdGhpcy5jb2xvcikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJkIiwiTSAyIDAgTCAxMCAwIEwgNyA1IEwgMTAgMTAgTCAyIDEwIFoiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1sZWdlbmQtZWxlbWVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KGx0dCw3LFJlKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmdseXBoU1ZHPXIuZmlyc3QpfX0saW5wdXRzOnt0ZXh0OiJ0ZXh0Iixjb2xvcjoiY29sb3IiLHNoYXBlOiJzaGFwZSJ9LGRlY2xzOjQsdmFyczoxLGNvbnN0czpbWzEsImdseXBoIl0sWyJnbHlwaCIsIiJdLFsxLCJsZWdlbmQtZWxlbWVudC10aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKEluKCksTygwLCJzdmciLDAsMSksSnMoKSxfKDIsImRpdiIsMiksQSgzKSx2KCkpLDImZSYmKEMoMykseXQoaS50ZXh0KSl9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtwYWRkaW5nLXJpZ2h0OjEwcHh9LmxlZ2VuZC1lbGVtZW50LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjhlbTtwYWRkaW5nLWxlZnQ6NXB4fS5nbHlwaFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTBweDtoZWlnaHQ6MTBweH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEdtZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJucG1pLWFubm90YXRpb25zLWxpc3QtbGVnZW5kIl1dLGRlY2xzOjQsdmFyczowLGNvbnN0czpbWyJ0ZXh0IiwicnVuIGluZGljYXRvciIsImNvbG9yIiwicmdiKDAsMCwwKSIsInNoYXBlIiwicnVuSW5kaWNhdG9yIl0sWyJ0ZXh0IiwicG9zaXRpdmUgY29ycmVsYXRpb24iLCJjb2xvciIsInJnYigxMDksIDE3NCwgMjEzKSIsInNoYXBlIiwiYmFyIl0sWyJ0ZXh0IiwibmVnYXRpdmUgY29ycmVsYXRpb24iLCJjb2xvciIsInJnYigyNDksIDEwNSwgNzYpIiwic2hhcGUiLCJiYXIiXSxbInRleHQiLCJzYW1wbGUgY291bnQiLCJjb2xvciIsInJnYigxNTEsIDE1MSwgMTUxKSIsInNoYXBlIiwiY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZPKDAsIm5wbWktbGVnZW5kLWVsZW1lbnQiLDApKDEsIm5wbWktbGVnZW5kLWVsZW1lbnQiLDEpKDIsIm5wbWktbGVnZW5kLWVsZW1lbnQiLDIpKDMsIm5wbWktbGVnZW5kLWVsZW1lbnQiLDMpfSxkZXBlbmRlbmNpZXM6W2ptZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cGFkZGluZzowIDE2cHh9Il19KSxufSkoKSxkdHQ9WyJjaGFydCJdLHB0dD1bImhpbnRDbGlwIl07ZnVuY3Rpb24gaHR0KG4sdCl7MSZuJiZPKDAsIm1hdC1pY29uIiwxMil9ZnVuY3Rpb24gZnR0KG4sdCl7MSZuJiZPKDAsIm1hdC1pY29uIiwxMyl9ZnVuY3Rpb24gbXR0KG4sdCl7aWYoMSZuJiZPKDAsIm1hdC1pY29uIiwxNCksMiZuKXtsZXQgZT1TKCk7eSgic3ZnSWNvbiIsZS5zb3J0Lm9yZGVyPT09ZS5Tb3J0T3JkZXIuU0lNSUxBUj8iYXJyb3dfZG93bndhcmRfMjRweCI6ImFycm93X3Vwd2FyZF8yNHB4IikoIm5nQ2xhc3MiLGUuc29ydC5vcmRlcj09PWUuU29ydE9yZGVyLlNJTUlMQVI/ImRvd24taWNvbiI6InVwLWljb24iKX19dmFyIFdtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5zZWxlY3RlZD0hMSx0aGlzLm9uU2hvd1NpbWlsYXJBbm5vdGF0aW9ucz1uZXcgRyx0aGlzLlNvcnRPcmRlcj0kcix0aGlzLndpZHRoPTEwLHRoaXMuY2hhcnRXaWR0aD0xMCx0aGlzLmNoYXJ0SGVpZ2h0PTEwLHRoaXMubWF4RG90UmFkaXVzPTEwLHRoaXMuY291bnREb3RPZmZzZXQ9NzAsdGhpcy5jb3VudFRleHRQYWRkaW5nPTIsdGhpcy5tYXJnaW49e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDoxMDB9LHRoaXMuc3Ryb2tlQ29sb3I9IiNmZmYiLHRoaXMudGV4dENsYXNzPSJkZWZhdWx0LXRleHQiLHRoaXMucnVucz1bXX1vblJlc2l6ZShlKXt0aGlzLnJlZHJhdygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3ZnPWJvKHRoaXMuYW5ub3RhdGlvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50KS5zZWxlY3QoInN2ZyIpLHRoaXMueFNjYWxlPVN5KCkucGFkZGluZygwKSx0aGlzLnlTY2FsZT1TeSgpLnBhZGRpbmcoMCksdGhpcy5zaXplU2NhbGU9UW8oKS5kb21haW4oWzAsMV0pLHRoaXMuY291bnRTaXplU2NhbGU9UW8oKS5yYW5nZShbMix0aGlzLm1heERvdFJhZGl1c10pLHRoaXMubWFpbkNvbnRhaW5lcj10aGlzLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHt0aGlzLm1hcmdpbi5sZWZ0fSwgJHt0aGlzLm1hcmdpbi50b3B9KWApLHRoaXMuYmFyc0dyb3VwPXRoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoImciKSx0aGlzLmNvdW50RG90c0dyb3VwPXRoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoImciKSx0aGlzLnRleHRzR3JvdXA9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLHRoaXMuY291bnRUZXh0c0dyb3VwPXRoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoImciKSx0aGlzLnJ1bkhpbnRHcm91cD10aGlzLnN2Zy5hcHBlbmQoImciKSx0aGlzLnJlZHJhdygpfW5nT25DaGFuZ2VzKGUpe3RoaXMuc3ZnJiZ0aGlzLnJlZHJhdygpfXJlZHJhdygpe3RoaXMuc2VsZWN0ZWQ9dGhpcy5zZWxlY3RlZEFubm90YXRpb25zLmluY2x1ZGVzKHRoaXMuYW5ub3RhdGlvbiksdGhpcy51cGRhdGVEaW1lbnNpb25zKCksdGhpcy5zZXRUZXh0Q2xhc3MoKSx0aGlzLnVwZGF0ZUF4ZXMoKSx0aGlzLmRyYXcoKX11cGRhdGVEaW1lbnNpb25zKCl7bGV0IGU9bmV3IFNldDt0aGlzLmRhdGEuZm9yRWFjaChpPT57ZS5hZGQoaS5ydW4pfSksdGhpcy5ydW5zPVsuLi5lXSx0aGlzLnN2Zy5zdHlsZSgiaGVpZ2h0Iix0aGlzLm51bUFjdGl2ZVJ1bnMqdGhpcy5ydW5IZWlnaHQrInB4IiksdGhpcy5jaGFydEhlaWdodD10aGlzLnJ1bnMubGVuZ3RoKnRoaXMucnVuSGVpZ2h0LXRoaXMubWFyZ2luLnRvcC10aGlzLm1hcmdpbi5ib3R0b20sdGhpcy53aWR0aD10aGlzLmFubm90YXRpb25Db250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aHx8MTAsdGhpcy5jaGFydFdpZHRoPXRoaXMud2lkdGgtdGhpcy5tYXJnaW4ubGVmdC10aGlzLm1hcmdpbi5yaWdodH1zZXRUZXh0Q2xhc3MoKXt0aGlzLnRleHRDbGFzcz0iZGVmYXVsdC10ZXh0Iix0aGlzLmZsYWdnZWRBbm5vdGF0aW9ucy5pbmNsdWRlcyh0aGlzLmFubm90YXRpb24pP3RoaXMudGV4dENsYXNzPSJmbGFnLXRleHQiOnRoaXMuaGlkZGVuQW5ub3RhdGlvbnMuaW5jbHVkZXModGhpcy5hbm5vdGF0aW9uKSYmKHRoaXMudGV4dENsYXNzPSJoaWRkZW4tdGV4dCIpfXVwZGF0ZUF4ZXMoKXt0aGlzLnhTY2FsZS5yYW5nZVJvdW5kKFswLHRoaXMuY2hhcnRXaWR0aC10aGlzLmNoYXJ0V2lkdGgvdGhpcy5hY3RpdmVNZXRyaWNzLmxlbmd0aF0pLmRvbWFpbih0aGlzLmFjdGl2ZU1ldHJpY3MubWFwKGU9PlNzKGUpKSksdGhpcy55U2NhbGUucmFuZ2VSb3VuZChbMCx0aGlzLmNoYXJ0SGVpZ2h0LXRoaXMucnVuSGVpZ2h0XSkuZG9tYWluKHRoaXMucnVucyksdGhpcy5zaXplU2NhbGUucmFuZ2UoWzAsdGhpcy5jaGFydFdpZHRoL3RoaXMuYWN0aXZlTWV0cmljcy5sZW5ndGhdKSx0aGlzLmNvdW50U2l6ZVNjYWxlLmRvbWFpbihbMCx0aGlzLm1heENvdW50XSl9ZHJhdygpe3RoaXMuZHJhd1J1bkluZGljYXRvcnMoKSx0aGlzLmRyYXdSdW5IaW50VGV4dHMoKSx0aGlzLmRyYXdCYXJzKCksdGhpcy5kcmF3VGV4dHMoKSx0aGlzLnNob3dDb3VudHM/KHRoaXMuZHJhd0NvdW50RG90cygpLHRoaXMuZHJhd0NvdW50VGV4dHMoKSk6KHRoaXMuY291bnREb3RzR3JvdXAuc2VsZWN0QWxsKCIuY291bnQtZG90IikucmVtb3ZlKCksdGhpcy5jb3VudFRleHRzR3JvdXAuc2VsZWN0QWxsKCIuY291bnQtYmFja2dyb3VuZC10ZXh0IikucmVtb3ZlKCksdGhpcy5jb3VudFRleHRzR3JvdXAuc2VsZWN0QWxsKCIuY291bnQtdGV4dCIpLnJlbW92ZSgpKX1kcmF3UnVuSW5kaWNhdG9ycygpe2JvKHRoaXMuY2xpcFBhdGhFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIix0aGlzLm1hcmdpbi5sZWZ0LTMwKS5hdHRyKCJoZWlnaHQiLHRoaXMuY2hhcnRIZWlnaHQpO2xldCBlPXRoaXMucnVuSGludEdyb3VwLnNlbGVjdEFsbCgiLmhpbnQiKS5kYXRhKHRoaXMucnVucyksaT1lLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJoaW50Iik7aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxNSAwIEwgMTAgMTAgTCAxNSAyMCBMIDAgMjAgWiIpLGkubWVyZ2UoZSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihyKXtyZXR1cm5gdHJhbnNsYXRlKDEwLCAke3RoaXMueVNjYWxlKHIpKzV9KWB9LmJpbmQodGhpcykpLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmNvbG9yU2NhbGUocil9LmJpbmQodGhpcykpLGUuZXhpdCgpLnJlbW92ZSgpfWRyYXdSdW5IaW50VGV4dHMoKXtsZXQgZT10aGlzLnJ1bkhpbnRHcm91cC5zZWxlY3RBbGwoIi5oaW50LXRleHQiKS5kYXRhKHRoaXMucnVucyk7ZS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDI1KS5hdHRyKCJmb250LXNpemUiLCIxMHB4IikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiY2xpcC1wYXRoIiwidXJsKCNoaW50LWNsaXApIikubWVyZ2UoZSkuYXR0cigieSIsZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMueVNjYWxlKHIpKzE1fS5iaW5kKHRoaXMpKS5hdHRyKCJjbGFzcyIsYGhpbnQtdGV4dCAke3RoaXMudGV4dENsYXNzfWApLnRleHQocj0+dGhpcy5ydW5JZFRvUnVucy5nZXQocik/Lm5hbWV8fCIiKSxlLmV4aXQoKS5yZW1vdmUoKX1kcmF3QmFycygpe2xldCBlPXRoaXMuYmFyc0dyb3VwLnNlbGVjdEFsbCgiLmJhciIpLmRhdGEodGhpcy5kYXRhKTtlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYXIiKS5hdHRyKCJoZWlnaHQiLDIwKS5tZXJnZShlKS5hdHRyKCJmaWxsIixyPT5udWxsPT09ci5uUE1JVmFsdWU/IiI6ci5uUE1JVmFsdWU+PTA/dGooci5uUE1JVmFsdWUpOmlqKC0xKnIublBNSVZhbHVlKSkuYXR0cigieCIsZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMueFNjYWxlKHIubWV0cmljKX0uYmluZCh0aGlzKSkuYXR0cigieSIsZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMueVNjYWxlKHIucnVuKSs1fS5iaW5kKHRoaXMpKS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24ocil7cmV0dXJuIG51bGw9PT1yLm5QTUlWYWx1ZT8wOnRoaXMuc2l6ZVNjYWxlKE1hdGguYWJzKHIublBNSVZhbHVlKSl9LmJpbmQodGhpcykpLGUuZXhpdCgpLnJlbW92ZSgpfWRyYXdDb3VudERvdHMoKXtsZXQgZT10aGlzLmNvdW50RG90c0dyb3VwLnNlbGVjdEFsbCgiLmNvdW50LWRvdCIpLmRhdGEodGhpcy5kYXRhKTtlLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImNvdW50LWRvdCIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikubWVyZ2UoZSkuYXR0cigiZmlsbCIsZnVuY3Rpb24ocil7cmV0dXJuIG51bGw9PT1yLmNvdW50VmFsdWU/IiI6bmooci5jb3VudFZhbHVlL3RoaXMubWF4Q291bnQpfS5iaW5kKHRoaXMpKS5hdHRyKCJjeCIsZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMueFNjYWxlKHIubWV0cmljKSt0aGlzLmNvdW50RG90T2Zmc2V0fS5iaW5kKHRoaXMpKS5hdHRyKCJjeSIsZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMueVNjYWxlKHIucnVuKSt0aGlzLnJ1bkhlaWdodC8yfS5iaW5kKHRoaXMpKS5hdHRyKCJyIixmdW5jdGlvbihyKXtyZXR1cm4gbnVsbD09PXIuY291bnRWYWx1ZT8wOnRoaXMuY291bnRTaXplU2NhbGUoci5jb3VudFZhbHVlKX0uYmluZCh0aGlzKSksZS5leGl0KCkucmVtb3ZlKCl9ZHJhd1RleHRzKCl7bGV0IGU9dGhpcy50ZXh0c0dyb3VwLnNlbGVjdEFsbCgiLm5wbWktYmFja2dyb3VuZC10ZXh0IikuZGF0YSh0aGlzLmRhdGEpO2UuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm5wbWktYmFja2dyb3VuZC10ZXh0IikuYXR0cigic3Ryb2tlLXdpZHRoIiwzKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZSIsdGhpcy5zdHJva2VDb2xvcikuYXR0cigiZm9udC1zaXplIiwiMTNweCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLm1lcmdlKGUpLmF0dHIoIngiLGZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnhTY2FsZShzLm1ldHJpYykrNX0uYmluZCh0aGlzKSkuYXR0cigieSIsZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMueVNjYWxlKHMucnVuKSt0aGlzLnJ1bkhlaWdodC8yfS5iaW5kKHRoaXMpKS50ZXh0KHM9Pm51bGw9PT1zLm5QTUlWYWx1ZT8ibnVsbCI6TWF0aC5yb3VuZCgxZTMqKHMublBNSVZhbHVlK051bWJlci5FUFNJTE9OKSkvMWUzKSxlLmV4aXQoKS5yZW1vdmUoKTtsZXQgcj10aGlzLnRleHRzR3JvdXAuc2VsZWN0QWxsKCIubnBtaS10ZXh0IikuZGF0YSh0aGlzLmRhdGEpO3IuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm5wbWktdGV4dCIpLmF0dHIoImZvbnQtc2l6ZSIsIjEzcHgiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5tZXJnZShyKS5hdHRyKCJ4IixmdW5jdGlvbihzKXtyZXR1cm4gdGhpcy54U2NhbGUocy5tZXRyaWMpKzV9LmJpbmQodGhpcykpLmF0dHIoInkiLGZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnlTY2FsZShzLnJ1bikrdGhpcy5ydW5IZWlnaHQvMn0uYmluZCh0aGlzKSkudGV4dChzPT5udWxsPT09cy5uUE1JVmFsdWU/Im51bGwiOk1hdGgucm91bmQoMWUzKihzLm5QTUlWYWx1ZStOdW1iZXIuRVBTSUxPTikpLzFlMyksci5leGl0KCkucmVtb3ZlKCl9ZHJhd0NvdW50VGV4dHMoKXtsZXQgZT10aGlzLmNvdW50VGV4dHNHcm91cC5zZWxlY3RBbGwoIi5jb3VudC1iYWNrZ3JvdW5kLXRleHQiKS5kYXRhKHRoaXMuZGF0YSk7ZS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiY291bnQtYmFja2dyb3VuZC10ZXh0IikuYXR0cigic3Ryb2tlLXdpZHRoIiwzKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZSIsdGhpcy5zdHJva2VDb2xvcikuYXR0cigiZm9udC1zaXplIiwiMTBweCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLm1lcmdlKGUpLmF0dHIoIngiLGZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnhTY2FsZShzLm1ldHJpYykrdGhpcy5jb3VudERvdE9mZnNldCt0aGlzLmNvdW50VGV4dFBhZGRpbmcrdGhpcy5tYXhEb3RSYWRpdXN9LmJpbmQodGhpcykpLmF0dHIoInkiLGZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnlTY2FsZShzLnJ1bikrdGhpcy5ydW5IZWlnaHQvMn0uYmluZCh0aGlzKSkudGV4dChzPT5udWxsPT09cy5jb3VudFZhbHVlPyIiOkludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KHMuY291bnRWYWx1ZSkpLGUuZXhpdCgpLnJlbW92ZSgpO2xldCByPXRoaXMuY291bnRUZXh0c0dyb3VwLnNlbGVjdEFsbCgiLmNvdW50LXRleHQiKS5kYXRhKHRoaXMuZGF0YSk7ci5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiY291bnQtdGV4dCIpLmF0dHIoImZvbnQtc2l6ZSIsIjEwcHgiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5tZXJnZShyKS5hdHRyKCJ4IixmdW5jdGlvbihzKXtyZXR1cm4gdGhpcy54U2NhbGUocy5tZXRyaWMpK3RoaXMuY291bnREb3RPZmZzZXQrdGhpcy5jb3VudFRleHRQYWRkaW5nK3RoaXMubWF4RG90UmFkaXVzfS5iaW5kKHRoaXMpKS5hdHRyKCJ5IixmdW5jdGlvbihzKXtyZXR1cm4gdGhpcy55U2NhbGUocy5ydW4pK3RoaXMucnVuSGVpZ2h0LzJ9LmJpbmQodGhpcykpLnRleHQocz0+bnVsbD09PXMuY291bnRWYWx1ZT8iIjpJbnRsLk51bWJlckZvcm1hdCgpLmZvcm1hdChzLmNvdW50VmFsdWUpKSxyLmV4aXQoKS5yZW1vdmUoKX1zaW1pbGFyaXR5U29ydChlKXt0aGlzLmhhc0VtYmVkZGluZyYmKGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vblNob3dTaW1pbGFyQW5ub3RhdGlvbnMuZW1pdCgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siYW5ub3RhdGlvbi1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoZHR0LDcsUmUpLG90KHB0dCw3LFJlKSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5hbm5vdGF0aW9uQ29udGFpbmVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmNsaXBQYXRoRWxlbWVudD1yLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJyZXNpemUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNpemUoKX0sMCxXeCksMiZlJiZldCgic2VsZWN0ZWQtcm93IixpLnNlbGVjdGVkKX0saW5wdXRzOntkYXRhOiJkYXRhIixtYXhDb3VudDoibWF4Q291bnQiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMiLGZsYWdnZWRBbm5vdGF0aW9uczoiZmxhZ2dlZEFubm90YXRpb25zIixoaWRkZW5Bbm5vdGF0aW9uczoiaGlkZGVuQW5ub3RhdGlvbnMiLGFjdGl2ZU1ldHJpY3M6ImFjdGl2ZU1ldHJpY3MiLG51bUFjdGl2ZVJ1bnM6Im51bUFjdGl2ZVJ1bnMiLHNob3dDb3VudHM6InNob3dDb3VudHMiLGFubm90YXRpb246ImFubm90YXRpb24iLHJ1bkhlaWdodDoicnVuSGVpZ2h0IixoYXNFbWJlZGRpbmc6Imhhc0VtYmVkZGluZyIsc29ydDoic29ydCIsc2lkZWJhcldpZHRoOiJzaWRlYmFyV2lkdGgiLGNvbG9yU2NhbGU6ImNvbG9yU2NhbGUiLHJ1bklkVG9SdW5zOiJydW5JZFRvUnVucyJ9LG91dHB1dHM6e29uU2hvd1NpbWlsYXJBbm5vdGF0aW9uczoib25TaG93U2ltaWxhckFubm90YXRpb25zIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczoxNCx2YXJzOjEwLGNvbnN0czpbWzEsImFubm90YXRpb24tdGl0bGUiXSxbMSwiYW5ub3RhdGlvbi1jaGVja2JveCIsMywiY2hlY2tlZCIsImNsaWNrIl0sWzEsImFubm90YXRpb24tYnV0dG9uIiwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbImNsYXNzIiwiZmxhZ2dlZC1pY29uIiwic3ZnSWNvbiIsImZsYWdfMjRweCIsNCwibmdJZiJdLFsiY2xhc3MiLCJoaWRkZW4taWNvbiIsInN2Z0ljb24iLCJ2aXNpYmlsaXR5X29mZl8yNHB4Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFubm90YXRpb24taWNvbiIsMywic3ZnSWNvbiIsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbMSwiY2hhcnQtZGl2Il0sWyJjaGFydCIsIiJdLFsxLCJjaGFydC1zdmciXSxbImlkIiwiaGludC1jbGlwIl0sWyJoaW50Q2xpcCIsIiJdLFsieCIsIjAiLCJ5IiwiMCJdLFsic3ZnSWNvbiIsImZsYWdfMjRweCIsMSwiZmxhZ2dlZC1pY29uIl0sWyJzdmdJY29uIiwidmlzaWJpbGl0eV9vZmZfMjRweCIsMSwiaGlkZGVuLWljb24iXSxbMSwiYW5ub3RhdGlvbi1pY29uIiwzLCJzdmdJY29uIiwibmdDbGFzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwKSgxLCJtYXQtY2hlY2tib3giLDEpLFAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gby5wcmV2ZW50RGVmYXVsdCgpfSksdigpLF8oMiwiYnV0dG9uIiwyKSxQKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc2ltaWxhcml0eVNvcnQobyl9KSxBKDMpLHYoKSxFKDQsaHR0LDEsMCwibWF0LWljb24iLDMpLEUoNSxmdHQsMSwwLCJtYXQtaWNvbiIsNCksRSg2LG10dCwxLDIsIm1hdC1pY29uIiw1KSx2KCksXyg3LCJkaXYiLDYsNyksSW4oKSxfKDksInN2ZyIsOCkoMTAsImRlZnMiKSgxMSwiY2xpcFBhdGgiLDksMTApLE8oMTMsInJlY3QiLDExKSx2KCkoKSgpKCkpLDImZSYmKGV0KCJmbGFnZ2VkLWFubm90YXRpb24iLGkuZmxhZ2dlZEFubm90YXRpb25zLmluY2x1ZGVzKGkuYW5ub3RhdGlvbikpKCJoaWRkZW4tYW5ub3RhdGlvbiIsaS5oaWRkZW5Bbm5vdGF0aW9ucy5pbmNsdWRlcyhpLmFubm90YXRpb24pJiYhaS5mbGFnZ2VkQW5ub3RhdGlvbnMuaW5jbHVkZXMoaS5hbm5vdGF0aW9uKSksQygxKSx5KCJjaGVja2VkIixpLnNlbGVjdGVkQW5ub3RhdGlvbnMuaW5jbHVkZXMoaS5hbm5vdGF0aW9uKSksQygxKSx5KCJuZ0NsYXNzIixpLmhhc0VtYmVkZGluZz8iY2xpY2thYmxlLWFubm90YXRpb24iOiIiKSxDKDEpLGplKCIgIixpLmFubm90YXRpb24sIiAiKSxDKDEpLHkoIm5nSWYiLGkuZmxhZ2dlZEFubm90YXRpb25zLmluY2x1ZGVzKGkuYW5ub3RhdGlvbikpLEMoMSkseSgibmdJZiIsaS5oaWRkZW5Bbm5vdGF0aW9ucy5pbmNsdWRlcyhpLmFubm90YXRpb24pKSxDKDEpLHkoIm5nSWYiLGkuYW5ub3RhdGlvbj09PWkuc29ydC5tZXRyaWMpKX0sZGVwZW5kZW5jaWVzOltGbixCZSx5bCxHdF0sc3R5bGVzOlsiOmhvc3R7cGFkZGluZy10b3A6NXB4fS5hbm5vdGF0aW9uLXRpdGxle2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjEzcHg7aGVpZ2h0OjIwcHg7cGFkZGluZzowIDEwcHg7dXNlci1zZWxlY3Q6bm9uZX0uc2VsZWN0ZWQtcm93e2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtkaXNwbGF5OmJsb2NrfS5mbGFnZ2VkLWFubm90YXRpb257Y29sb3I6I2Y1N2MwMH0uaGlkZGVuLWFubm90YXRpb257Y29sb3I6Izc1NzU3NX0uYW5ub3RhdGlvbi1jaGVja2JveHtwYWRkaW5nLXJpZ2h0OjVweH0uZmxhZ2dlZC1pY29ue3RyYW5zZm9ybTpzY2FsZSgwLjYpfS5oaWRkZW4taWNvbnt0cmFuc2Zvcm06c2NhbGUoMC42KX0uYW5ub3RhdGlvbi1pY29ue3RyYW5zZm9ybTpzY2FsZSgwLjYpfS5jaGFydC1kaXZ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYn0uY2hhcnQtc3Zne3dpZHRoOjEwMCU7dXNlci1zZWxlY3Q6bm9uZX0uZGVmYXVsdC10ZXh0e2ZpbGw6IzAwMH0uZmxhZy10ZXh0e2ZpbGw6I2Y1N2MwMH0uaGlkZGVuLXRleHR7ZmlsbDojNzU3NTc1fS5jbGlja2FibGUtYW5ub3RhdGlvbntjdXJzb3I6cG9pbnRlcn1idXR0b257YWxsOnVuc2V0fVxuIl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkscW1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoS2IpLHRoaXMuZmxhZ2dlZEFubm90YXRpb25zJD10aGlzLnN0b3JlLnNlbGVjdChWRiksdGhpcy5oaWRkZW5Bbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoWGIpLHRoaXMuc2VsZWN0ZWRBbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QodmMpLHRoaXMuc2hvd0NvdW50cyQ9dGhpcy5zdG9yZS5zZWxlY3QoakYpLHRoaXMuc2lkZWJhcldpZHRoJD10aGlzLnN0b3JlLnNlbGVjdChPZiksdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChuYykucGlwZShMKGk9PnI9PntpZighaS5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoYFtDb2xvciBzY2FsZV0gdW5rbm93biBydW5JZDogJHtyfS5gKTtyZXR1cm4gaVtyXX0pKSx0aGlzLnJ1bklkVG9SdW5zJD10aGlzLnN0b3JlLnNlbGVjdChxSSl9c2hvd1NpbWlsYXJBbm5vdGF0aW9ucygpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSUYoe2Fubm90YXRpb246dGhpcy5hbm5vdGF0aW9ufSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1hbm5vdGF0aW9uIl1dLGlucHV0czp7ZGF0YToiZGF0YSIsbWF4Q291bnQ6Im1heENvdW50IixhY3RpdmVNZXRyaWNzOiJhY3RpdmVNZXRyaWNzIixudW1BY3RpdmVSdW5zOiJudW1BY3RpdmVSdW5zIixhbm5vdGF0aW9uOiJhbm5vdGF0aW9uIixydW5IZWlnaHQ6InJ1bkhlaWdodCIsaGFzRW1iZWRkaW5nOiJoYXNFbWJlZGRpbmcifSxkZWNsczo5LHZhcnM6MzEsY29uc3RzOltbMywiZGF0YSIsIm1heENvdW50IiwiYWN0aXZlTWV0cmljcyIsIm51bUFjdGl2ZVJ1bnMiLCJhbm5vdGF0aW9uIiwicnVuSGVpZ2h0IiwiaGFzRW1iZWRkaW5nIiwic29ydCIsInNlbGVjdGVkQW5ub3RhdGlvbnMiLCJmbGFnZ2VkQW5ub3RhdGlvbnMiLCJoaWRkZW5Bbm5vdGF0aW9ucyIsInNob3dDb3VudHMiLCJzaWRlYmFyV2lkdGgiLCJjb2xvclNjYWxlIiwicnVuSWRUb1J1bnMiLCJvblNob3dTaW1pbGFyQW5ub3RhdGlvbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImFubm90YXRpb24tY29tcG9uZW50IiwwKSxQKCJvblNob3dTaW1pbGFyQW5ub3RhdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2hvd1NpbWlsYXJBbm5vdGF0aW9ucygpfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksQig0LCJhc3luYyIpLEIoNSwiYXN5bmMiKSxCKDYsImFzeW5jIiksQig3LCJhc3luYyIpLEIoOCwiYXN5bmMiKSx2KCkpLDImZSYmeSgiZGF0YSIsaS5kYXRhKSgibWF4Q291bnQiLGkubWF4Q291bnQpKCJhY3RpdmVNZXRyaWNzIixpLmFjdGl2ZU1ldHJpY3MpKCJudW1BY3RpdmVSdW5zIixpLm51bUFjdGl2ZVJ1bnMpKCJhbm5vdGF0aW9uIixpLmFubm90YXRpb24pKCJydW5IZWlnaHQiLGkucnVuSGVpZ2h0KSgiaGFzRW1iZWRkaW5nIixpLmhhc0VtYmVkZGluZykoInNvcnQiLFUoMSwxNSxpLnNvcnQkKSkoInNlbGVjdGVkQW5ub3RhdGlvbnMiLFUoMiwxNyxpLnNlbGVjdGVkQW5ub3RhdGlvbnMkKSkoImZsYWdnZWRBbm5vdGF0aW9ucyIsVSgzLDE5LGkuZmxhZ2dlZEFubm90YXRpb25zJCkpKCJoaWRkZW5Bbm5vdGF0aW9ucyIsVSg0LDIxLGkuaGlkZGVuQW5ub3RhdGlvbnMkKSkoInNob3dDb3VudHMiLFUoNSwyMyxpLnNob3dDb3VudHMkKSkoInNpZGViYXJXaWR0aCIsVSg2LDI1LGkuc2lkZWJhcldpZHRoJCkpKCJjb2xvclNjYWxlIixVKDcsMjcsaS5ydW5Db2xvclNjYWxlJCkpKCJydW5JZFRvUnVucyIsVSg4LDI5LGkucnVuSWRUb1J1bnMkKSl9LGRlcGVuZGVuY2llczpbV21lLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB2dHQobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJucG1pLWFubm90YXRpb24iLDUpLFAoImNsaWNrIixmdW5jdGlvbihyKXtsZXQgcz1vZShlKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoMikucm93Q2xpY2tlZChyLHMpKX0pLHYoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9UygyKTt5KCJkYXRhIixpLmFubm90YXRpb25zW2VdKSgiYWN0aXZlTWV0cmljcyIsaS5hY3RpdmVNZXRyaWNzKSgibnVtQWN0aXZlUnVucyIsaS5udW1BY3RpdmVSdW5zKSgibWF4Q291bnQiLGkubWF4Q291bnQpKCJhbm5vdGF0aW9uIixlKSgicnVuSGVpZ2h0IixpLnJ1bkhlaWdodCkoImhhc0VtYmVkZGluZyIsaS5lbWJlZGRpbmdEYXRhJiZ2b2lkIDAhPT1pLmVtYmVkZGluZ0RhdGFbZV0pfX1mdW5jdGlvbiB5dHQobix0KXtpZigxJm4mJihzbigwKSxPKDEsIm5wbWktYW5ub3RhdGlvbnMtbGlzdC1sZWdlbmQiKSgyLCJucG1pLWFubm90YXRpb25zLWxpc3QtaGVhZGVyIiwyKSxfKDMsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsMyksRSg0LHZ0dCwxLDcsIm5wbWktYW5ub3RhdGlvbiIsNCksdigpLGFuKCkpLDImbil7bGV0IGU9UygpO0MoMikseSgiYW5ub3RhdGlvbnMiLGUuYW5ub3RhdGlvbnMpKCJudW1Bbm5vdGF0aW9ucyIsZS5udW1Bbm5vdGF0aW9ucykoImFjdGl2ZU1ldHJpY3MiLGUuYWN0aXZlTWV0cmljcyksQygxKSxaaSgiaXRlbVNpemUiLGUubnVtQWN0aXZlUnVucyplLnJ1bkhlaWdodCsyNSksQygxKSx5KCJjZGtWaXJ0dWFsRm9yT2YiLGUuc29ydGVkQW5ub3RhdGlvbnMpfX12YXIgWW1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uUm93Q2xpY2s9bmV3IEcsdGhpcy5ydW5IZWlnaHQ9MzB9cm93Q2xpY2tlZChlLGkpe2lmKGUuc2hpZnRLZXkpe2xldCByPXRoaXMuc29ydGVkQW5ub3RhdGlvbnMuaW5kZXhPZihpKTtpZigwPT09dGhpcy5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aCl0aGlzLm9uUm93Q2xpY2suZW1pdCh0aGlzLnNvcnRlZEFubm90YXRpb25zLnNsaWNlKDAscisxKSk7ZWxzZXtsZXQgcz10aGlzLnNvcnRlZEFubm90YXRpb25zLmluZGV4T2YodGhpcy5zZWxlY3RlZEFubm90YXRpb25zW3RoaXMuc2VsZWN0ZWRBbm5vdGF0aW9ucy5sZW5ndGgtMV0pO3RoaXMub25Sb3dDbGljay5lbWl0KHM8cj90aGlzLnNvcnRlZEFubm90YXRpb25zLnNsaWNlKHMscisxKTp0aGlzLnNvcnRlZEFubm90YXRpb25zLnNsaWNlKHIscysxKSl9fWVsc2UgdGhpcy5vblJvd0NsaWNrLmVtaXQoW2ldKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siYW5ub3RhdGlvbnMtbGlzdC1jb21wb25lbnQiXV0saW5wdXRzOnthbm5vdGF0aW9uczoiYW5ub3RhdGlvbnMiLGVtYmVkZGluZ0RhdGE6ImVtYmVkZGluZ0RhdGEiLGFubm90YXRpb25zRXhwYW5kZWQ6ImFubm90YXRpb25zRXhwYW5kZWQiLG51bUFubm90YXRpb25zOiJudW1Bbm5vdGF0aW9ucyIsYW5ub3RhdGlvblNvcnQ6ImFubm90YXRpb25Tb3J0IixhY3RpdmVNZXRyaWNzOiJhY3RpdmVNZXRyaWNzIixudW1BY3RpdmVSdW5zOiJudW1BY3RpdmVSdW5zIixzb3J0ZWRBbm5vdGF0aW9uczoic29ydGVkQW5ub3RhdGlvbnMiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMiLG1heENvdW50OiJtYXhDb3VudCJ9LG91dHB1dHM6e29uUm93Q2xpY2s6Im9uUm93Q2xpY2sifSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJudW1Bbm5vdGF0aW9ucyIsImV4cGFuZGVkIl0sWzQsIm5nSWYiXSxbMywiYW5ub3RhdGlvbnMiLCJudW1Bbm5vdGF0aW9ucyIsImFjdGl2ZU1ldHJpY3MiXSxbIm1pbkJ1ZmZlclB4IiwiMzAwIiwibWF4QnVmZmVyUHgiLCI2MDAiLDEsImFubm90YXRpb24tcm93cyIsMywiaXRlbVNpemUiXSxbMywiZGF0YSIsImFjdGl2ZU1ldHJpY3MiLCJudW1BY3RpdmVSdW5zIiwibWF4Q291bnQiLCJhbm5vdGF0aW9uIiwicnVuSGVpZ2h0IiwiaGFzRW1iZWRkaW5nIiwiY2xpY2siLDQsImNka1ZpcnR1YWxGb3IiLCJjZGtWaXJ0dWFsRm9yT2YiXSxbMywiZGF0YSIsImFjdGl2ZU1ldHJpY3MiLCJudW1BY3RpdmVSdW5zIiwibWF4Q291bnQiLCJhbm5vdGF0aW9uIiwicnVuSGVpZ2h0IiwiaGFzRW1iZWRkaW5nIiwiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsIm5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyIiwwKSxFKDEseXR0LDUsNSwibmctY29udGFpbmVyIiwxKSksMiZlJiYoeSgibnVtQW5ub3RhdGlvbnMiLGkubnVtQW5ub3RhdGlvbnMpKCJleHBhbmRlZCIsaS5hbm5vdGF0aW9uc0V4cGFuZGVkKSxDKDEpLHkoIm5nSWYiLGkuYW5ub3RhdGlvbnNFeHBhbmRlZCkpfSxkZXBlbmRlbmNpZXM6W0JlLEhtZSx6bWUsR21lLGIyLHgyLGVnLHFtZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OmNhbGMoMTAwJSAtIDJweCk7d2lkdGg6Y2FsYygxMDAlIC0gMnB4KX0uYW5ub3RhdGlvbi1yb3dzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXg6MSAxO292ZXJmbG93LXk6YXV0b30iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFlGPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYW5ub3RhdGlvbnNFeHBhbmRlZCQ9dGhpcy5zdG9yZS5waXBlKHZ0KFVGKSksdGhpcy5hY3RpdmVSdW5zJD10aGlzLnN0b3JlLnBpcGUodnQob28pKS5waXBlKEwoaT0+aT9BcnJheS5mcm9tKGkuZW50cmllcygpKS5maWx0ZXIocj0+clsxXSkubWFwKHI9PnJbMF0pOltdKSksdGhpcy5lbWJlZGRpbmdEYXRhJD10aGlzLnN0b3JlLnBpcGUodnQoQkYpKSx0aGlzLm51bUFjdGl2ZVJ1bnMkPXRoaXMuYWN0aXZlUnVucyQucGlwZShMKGk9PmkubGVuZ3RoKSksdGhpcy5hY3RpdmVNZXRyaWNzJD1MdChbdGhpcy5zdG9yZS5zZWxlY3QoUmYpLHRoaXMuYWN0aXZlUnVucyQsdGhpcy5zdG9yZS5zZWxlY3QoSWwpXSkucGlwZShMKChbaSxyLG9dKT0+e2xldCBzPVtdO2ZvcihsZXQgYSBvZiByKWlbYV0mJihzPXMuY29uY2F0KGlbYV0uZmlsdGVyKGw9PlZiKGwpKSkpO3JldHVybiBzPVsuLi5uZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhvKSwuLi5zXSldLHN9KSksdGhpcy52aXNpYmxlQW5ub3RhdGlvbnMkPUx0KFt0aGlzLnN0b3JlLnNlbGVjdChQZiksdGhpcy5zdG9yZS5zZWxlY3QoWGIpLHRoaXMuc3RvcmUuc2VsZWN0KFpiKV0pLnBpcGUoTCgoW2kscixvXSk9PnFGKGkscixvKSkpLHRoaXMuZmlsdGVyZWRBbm5vdGF0aW9ucyQ9THQoW3RoaXMudmlzaWJsZUFubm90YXRpb25zJCx0aGlzLnN0b3JlLnNlbGVjdChIRiksdGhpcy5zdG9yZS5zZWxlY3QoSWwpLHRoaXMuYWN0aXZlUnVucyQsdGhpcy5hY3RpdmVNZXRyaWNzJCx0aGlzLnN0b3JlLnNlbGVjdChRYildKS5waXBlKEwoKFtpLHIsbyxzLGEsbF0pPT5mdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IHM9e30sYT1uZXcgU2V0KHQpLGw9bmV3IFNldChyLm1hcCh1PT5Tcyh1KSkpLGM9bmV3IFJlZ0V4cChvLCJpIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLmZvckVhY2godT0+e2lmKCFjLnRlc3QodVswXSkpcmV0dXJuO2xldCBkPXVbMV07ZD1kLmZpbHRlcihwPT5hLmhhcyhwLnJ1bikmJmwuaGFzKHAubWV0cmljKSksZnVuY3Rpb24obix0LGUpe3JldHVybiBuLmV2ZXJ5KGk9PntpZihpLmtpbmQ9PT1tdS5PUEVSQVRPUilyZXR1cm4hMDtsZXQgcj10W2kubWV0cmljXTtyZXR1cm4gdm9pZCAwPT09cnx8ZS5zb21lKG89Pm8ubWV0cmljPT09U3MoaS5tZXRyaWMpJiYobnVsbD09PW8ublBNSVZhbHVlP3IuaW5jbHVkZU5hTjpvLm5QTUlWYWx1ZTw9ci5tYXgmJm8ublBNSVZhbHVlPj1yLm1pbikpfSl9KGUsaSxkKSYmMCE9PWQubGVuZ3RoJiYoc1t1WzBdXT1kKX0pLHN9KGkscyxyLG8sYSxsKSkpLnBpcGUoVHMoKSksdGhpcy5udW1Bbm5vdGF0aW9ucyQ9dGhpcy5maWx0ZXJlZEFubm90YXRpb25zJC5waXBlKEwoaT0+T2JqZWN0LmtleXMoaSkubGVuZ3RoKSksdGhpcy5zb3J0ZWRBbm5vdGF0aW9ucyQ9THQoW3RoaXMuZmlsdGVyZWRBbm5vdGF0aW9ucyQsdGhpcy5zdG9yZS5waXBlKHZ0KEtiKSksdGhpcy5lbWJlZGRpbmdEYXRhJF0pLnBpcGUoTCgoW2kscixvXSk9PmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1PYmplY3Qua2V5cyhuKSxyPXQub3JkZXI9PT0kci5ESVNTSU1JTEFSfHx0Lm9yZGVyPT09JHIuU0lNSUxBUjtpZigiIj09PXQubWV0cmljfHwodm9pZCAwPT09ZXx8dm9pZCAwPT09ZS5wb2ludHNbdC5tZXRyaWNdKSYmcilyZXR1cm4gaTtsZXQgbz1yP2Z1bmN0aW9uKG4sdCxlKXtsZXQgaT17fSxyPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxvPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtlLm9yZGVyPT09JHIuU0lNSUxBUiYmKHI9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG89TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtmb3IobGV0IHMgb2YgbilpW3NdPXM9PT1lLm1ldHJpYz9yOnZvaWQgMD09PXQucG9pbnRzW3NdP286dC5wb2ludHNbc10udmVjdG9yP1ZldCh0LnBvaW50c1tlLm1ldHJpY10udmVjdG9yLHQucG9pbnRzW3NdLnZlY3RvcixvKTpvO3JldHVybiBpfShpLGUsdCk6ZnVuY3Rpb24obix0LGUpe2xldCBpPVNzKGUubWV0cmljKSxyPXt9O2lmKGUub3JkZXI9PT0kci5ERVNDRU5ESU5HKWZvcihsZXQgbyBvZiBuKXJbb109TWF0aC5tYXgoLi4udFtvXS5maWx0ZXIocz0+cy5tZXRyaWM9PT1pKS5tYXAocz0+bnVsbD09PXMublBNSVZhbHVlPy0xLzA6cy5uUE1JVmFsdWUpKTtlbHNlIGZvcihsZXQgbyBvZiBuKXJbb109TWF0aC5taW4oLi4udFtvXS5maWx0ZXIocz0+cy5tZXRyaWM9PT1pKS5tYXAocz0+bnVsbD09PXMublBNSVZhbHVlPzEvMDpzLm5QTUlWYWx1ZSkpO3JldHVybiByfShpLG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbi5zb3J0KGU/KGkscik9PnRbaV0tdFtyXTooaSxyKT0+dFtyXS10W2ldKX0oaSxvLHQub3JkZXI9PT0kci5BU0NFTkROR3x8dC5vcmRlcj09PSRyLlNJTUlMQVIpfShpLHIsbykpKSx0aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMkPXRoaXMuc3RvcmUucGlwZSh2dCh2YykpLHRoaXMubWF4Q291bnQkPXRoaXMuZmlsdGVyZWRBbm5vdGF0aW9ucyQucGlwZShMKGk9PntsZXQgcj0wO3JldHVybiBPYmplY3QudmFsdWVzKGkpLmZvckVhY2gobz0+e28uZm9yRWFjaChzPT57cy5jb3VudFZhbHVlJiYocj1NYXRoLm1heChyLHMuY291bnRWYWx1ZSkpfSl9KSxyfSkpfXJvd0NsaWNrZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh3Rih7YW5ub3RhdGlvbnM6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtbGlzdCJdXSxkZWNsczoxMCx2YXJzOjI3LGNvbnN0czpbWzMsImFubm90YXRpb25zIiwiZW1iZWRkaW5nRGF0YSIsImFubm90YXRpb25zRXhwYW5kZWQiLCJudW1Bbm5vdGF0aW9ucyIsImFjdGl2ZU1ldHJpY3MiLCJudW1BY3RpdmVSdW5zIiwic29ydGVkQW5ub3RhdGlvbnMiLCJzZWxlY3RlZEFubm90YXRpb25zIiwibWF4Q291bnQiLCJvblJvd0NsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJhbm5vdGF0aW9ucy1saXN0LWNvbXBvbmVudCIsMCksUCgib25Sb3dDbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkucm93Q2xpY2tlZChvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLEIoNCwiYXN5bmMiKSxCKDUsImFzeW5jIiksQig2LCJhc3luYyIpLEIoNywiYXN5bmMiKSxCKDgsImFzeW5jIiksQig5LCJhc3luYyIpLHYoKSksMiZlJiZ5KCJhbm5vdGF0aW9ucyIsVSgxLDksaS5maWx0ZXJlZEFubm90YXRpb25zJCkpKCJlbWJlZGRpbmdEYXRhIixVKDIsMTEsaS5lbWJlZGRpbmdEYXRhJCkpKCJhbm5vdGF0aW9uc0V4cGFuZGVkIixVKDMsMTMsaS5hbm5vdGF0aW9uc0V4cGFuZGVkJCkpKCJudW1Bbm5vdGF0aW9ucyIsVSg0LDE1LGkubnVtQW5ub3RhdGlvbnMkKSkoImFjdGl2ZU1ldHJpY3MiLFUoNSwxNyxpLmFjdGl2ZU1ldHJpY3MkKSkoIm51bUFjdGl2ZVJ1bnMiLFUoNiwxOSxpLm51bUFjdGl2ZVJ1bnMkKSkoInNvcnRlZEFubm90YXRpb25zIixVKDcsMjEsaS5zb3J0ZWRBbm5vdGF0aW9ucyQpKSgic2VsZWN0ZWRBbm5vdGF0aW9ucyIsVSg4LDIzLGkuc2VsZWN0ZWRBbm5vdGF0aW9ucyQpKSgibWF4Q291bnQiLFUoOSwyNSxpLm1heENvdW50JCkpfSxkZXBlbmRlbmNpZXM6W1ltZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseHR0PVsiY2hhcnQiXSxLbWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMud2lkdGg9MCx0aGlzLmNoYXJ0V2lkdGg9MCx0aGlzLmhlaWdodD0zMDAsdGhpcy5tYXJnaW49e3RvcDoyMCxyaWdodDo0MCxib3R0b206MjAsbGVmdDo0MH0sdGhpcy5jaGFydEhlaWdodD10aGlzLmhlaWdodC10aGlzLm1hcmdpbi50b3AtdGhpcy5tYXJnaW4uYm90dG9tfW9uUmVzaXplKGUpe3RoaXMucmVkcmF3KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdmc9Ym8odGhpcy5zdmdFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLHRoaXMubWFpbkNvbnRhaW5lcj10aGlzLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHt0aGlzLm1hcmdpbi5sZWZ0fSwgJHt0aGlzLm1hcmdpbi50b3B9KWApLHRoaXMuY29vcmRpbmF0ZXNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy5sYWJlbHNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy5heGlzR3JvdXA9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLHRoaXMueFNjYWxlPVN5KCkucGFkZGluZyguMSksdGhpcy55U2NhbGU9UW8oKS5yYW5nZShbdGhpcy5jaGFydEhlaWdodCwwXSksdGhpcy55QXhpcz16dyh0aGlzLnlTY2FsZSksdGhpcy5yZWRyYXcoKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLnN2ZyYmdGhpcy5yZWRyYXcoKX1yZWRyYXcoKXt0aGlzLnVwZGF0ZURpbWVuc2lvbnMoKSx0aGlzLnVwZGF0ZUF4ZXMoKSx0aGlzLmRyYXcoKX11cGRhdGVEaW1lbnNpb25zKCl7dGhpcy53aWR0aD10aGlzLnN2Z0VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aHx8MTAsdGhpcy5jaGFydFdpZHRoPXRoaXMud2lkdGgtdGhpcy5tYXJnaW4ubGVmdC10aGlzLm1hcmdpbi5yaWdodH11cGRhdGVBeGVzKCl7dGhpcy54U2NhbGUucmFuZ2VSb3VuZChbMCx0aGlzLmNoYXJ0V2lkdGhdKS5kb21haW4odGhpcy5hY3RpdmVNZXRyaWNzKSx0aGlzLnlTY2FsZS5kb21haW4oW3RoaXMuY29vcmRpbmF0ZURhdGEuZXh0cmVtZXMubWluLHRoaXMuY29vcmRpbmF0ZURhdGEuZXh0cmVtZXMubWF4XSl9ZHJhdygpe3RoaXMuZHJhd0F4ZXMoKSx0aGlzLmRyYXdBeGlzTGFiZWxzKCksdGhpcy5kcmF3Q29vcmRpbmF0ZXMoKSx0aGlzLmRyYXdMYWJlbHMoKX1kcmF3QXhlcygpe2xldCBlPXRoaXMuYXhpc0dyb3VwLnNlbGVjdEFsbCgiLmF4aXMteSIpLmRhdGEodGhpcy5hY3RpdmVNZXRyaWNzKTtlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJheGlzLXkiKS5tZXJnZShlKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHIpe3JldHVybmB0cmFuc2xhdGUoJHt0aGlzLnhTY2FsZShyKX0sIDApYH0uYmluZCh0aGlzKSkuY2FsbCh0aGlzLnlBeGlzKSxlLmV4aXQoKS5yZW1vdmUoKX1kcmF3QXhpc0xhYmVscygpe2xldCBlPXRoaXMuYXhpc0dyb3VwLnNlbGVjdEFsbCgiLmF4aXMtYmctdGV4dCIpLmRhdGEodGhpcy5hY3RpdmVNZXRyaWNzKTtlLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJheGlzLWJnLXRleHQiKS5hdHRyKCJmb250LXNpemUiLCIxM3B4IikuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZSIsIndoaXRlIikubWVyZ2UoZSkudGV4dChzPT5zKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHMpe3JldHVybmB0cmFuc2xhdGUoJHt0aGlzLnhTY2FsZShzKS01fSwgJHt0aGlzLnlTY2FsZSh0aGlzLmNvb3JkaW5hdGVEYXRhLmV4dHJlbWVzLm1pbil9KSByb3RhdGUoLTkwKWB9LmJpbmQodGhpcykpLGUuZXhpdCgpLnJlbW92ZSgpO2xldCByPXRoaXMuYXhpc0dyb3VwLnNlbGVjdEFsbCgiLmF4aXMtdGV4dCIpLmRhdGEodGhpcy5hY3RpdmVNZXRyaWNzKTtyLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZm9udC1zaXplIiwiMTNweCIpLmF0dHIoImNsYXNzIiwiYXhpcy10ZXh0IikubWVyZ2UocikudGV4dChzPT5zKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHMpe3JldHVybmB0cmFuc2xhdGUoJHt0aGlzLnhTY2FsZShzKS01fSwgJHt0aGlzLnlTY2FsZSh0aGlzLmNvb3JkaW5hdGVEYXRhLmV4dHJlbWVzLm1pbil9KSByb3RhdGUoLTkwKWB9LmJpbmQodGhpcykpLHIuZXhpdCgpLnJlbW92ZSgpfWRyYXdDb29yZGluYXRlcygpe2xldCBlPXRoaXMuY29vcmRpbmF0ZXNHcm91cC5zZWxlY3RBbGwoIi5jb29yZCIpLmRhdGEodGhpcy5jb29yZGluYXRlRGF0YS5jb29yZGluYXRlcyk7ZS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiY29vcmQiKS5hdHRyKCJmaWxsIiwibm9uZSIpLm1lcmdlKGUpLmF0dHIoImQiLHRoaXMucGF0aC5iaW5kKHRoaXMpKS5hdHRyKCJzdHJva2UiLGZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNvbG9yU2NhbGUocy5ydW5JZCl9LmJpbmQodGhpcykpLGUuZXhpdCgpLnJlbW92ZSgpO2xldCByPXRoaXMuY29vcmRpbmF0ZXNHcm91cC5zZWxlY3RBbGwoIi5oaWRkZW5Db29yZCIpLmRhdGEodGhpcy5jb29yZGluYXRlRGF0YS5jb29yZGluYXRlcyk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiaGlkZGVuQ29vcmQiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxMHB4IikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCJyZ2JhKDAsIDAsIDAsIDAuMCkiKS5vbigibW91c2VvdmVyIix0aGlzLmhhbmRsZUNvb3JkaW5hdGVNb3VzZU92ZXIuYmluZCh0aGlzKSkub24oIm1vdXNlb3V0Iix0aGlzLmhhbmRsZUNvb3JkaW5hdGVNb3VzZU91dC5iaW5kKHRoaXMpKS5tZXJnZShyKS5hdHRyKCJkIix0aGlzLnBhdGguYmluZCh0aGlzKSksci5leGl0KCkucmVtb3ZlKCl9cGF0aChlKXtyZXR1cm4gZS52YWx1ZXMuc29ydCgocixvKT0+dGhpcy5hY3RpdmVNZXRyaWNzLmluZGV4T2Yoci5tZXRyaWMpLXRoaXMuYWN0aXZlTWV0cmljcy5pbmRleE9mKG8ubWV0cmljKSkseFMoKShlLnZhbHVlcy5tYXAoZnVuY3Rpb24ocil7bGV0IG89dGhpcy55U2NhbGUoci5uUE1JVmFsdWUpO3JldHVyblt0aGlzLnhTY2FsZShyLm1ldHJpYyksb119LmJpbmQodGhpcykpKX1oYW5kbGVDb29yZGluYXRlTW91c2VPdmVyKGUsaSl7dGhpcy5sYWJlbHNHcm91cC5zZWxlY3RBbGwoIi5jb29yZGluYXRlLWxhYmVsIikuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLmFubm90YXRpb24hPT1lLmFubm90YXRpb259KS5zdHlsZSgib3BhY2l0eSIsLjEpLHRoaXMuY29vcmRpbmF0ZXNHcm91cC5zZWxlY3RBbGwoIi5jb29yZCIpLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gci5hbm5vdGF0aW9uIT09ZS5hbm5vdGF0aW9ufSkuc3R5bGUoIm9wYWNpdHkiLC4xKX1oYW5kbGVDb29yZGluYXRlTW91c2VPdXQoKXt0aGlzLmxhYmVsc0dyb3VwLnNlbGVjdEFsbCgiLmNvb3JkaW5hdGUtbGFiZWwiKS5zdHlsZSgib3BhY2l0eSIsMSksdGhpcy5jb29yZGluYXRlc0dyb3VwLnNlbGVjdEFsbCgiLmNvb3JkIikuc3R5bGUoIm9wYWNpdHkiLDEpfWRyYXdMYWJlbHMoKXtsZXQgZT0zMC90aGlzLnhTY2FsZS5zdGVwKCksaT10aGlzLmNvb3JkaW5hdGVEYXRhLmNvb3JkaW5hdGVzLmxlbmd0aDwzMD90aGlzLmNvb3JkaW5hdGVEYXRhLmNvb3JkaW5hdGVzOltdLHI9dGhpcy5sYWJlbHNHcm91cC5zZWxlY3RBbGwoIi5jb29yZGluYXRlLWxhYmVsIikuZGF0YShpKTtyLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJjb29yZGluYXRlLWxhYmVsIikuYXR0cigiZm9udC1zaXplIiwiMTBweCIpLm1lcmdlKHIpLnRleHQoZnVuY3Rpb24ocyl7cmV0dXJuIHMuYW5ub3RhdGlvbn0pLmF0dHIoIngiLHRoaXMueFNjYWxlKHRoaXMuYWN0aXZlTWV0cmljc1swXSkrMzApLmF0dHIoInkiLGZ1bmN0aW9uKHMpe2xldCBhPXRoaXMueVNjYWxlKHMudmFsdWVzWzBdLm5QTUlWYWx1ZT9zLnZhbHVlc1swXS5uUE1JVmFsdWU6MCksbD10aGlzLnlTY2FsZShzLnZhbHVlc1sxXS5uUE1JVmFsdWU/cy52YWx1ZXNbMV0ublBNSVZhbHVlOjApO3JldHVybigxLWUpKmErZSpsfS5iaW5kKHRoaXMpKSxyLmV4aXQoKS5yZW1vdmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicGFyYWxsZWwtY29vcmRpbmF0ZXMtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmb3QoeHR0LDcsUmUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuc3ZnRWxlbWVudD1yLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgicmVzaXplIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlc2l6ZShvKX0sMCxXeCl9LGlucHV0czp7YWN0aXZlTWV0cmljczoiYWN0aXZlTWV0cmljcyIsY29vcmRpbmF0ZURhdGE6ImNvb3JkaW5hdGVEYXRhIixzaWRlYmFyV2lkdGg6InNpZGViYXJXaWR0aCIsY29sb3JTY2FsZToiY29sb3JTY2FsZSJ9LGZlYXR1cmVzOltGdF0sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbMSwicGMtY2hhcnQiXSxbImNoYXJ0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoSW4oKSxPKDAsInN2ZyIsMCwxKSl9LHN0eWxlczpbIi5wYy1jaGFydFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjMwMHB4O3dpZHRoOjEwMCV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxabWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5hY3RpdmVSdW5zJD10aGlzLnN0b3JlLnBpcGUodnQob28pKS5waXBlKEwoaT0+aT9BcnJheS5mcm9tKGkuZW50cmllcygpKS5maWx0ZXIocj0+clsxXSkubWFwKHI9PnJbMF0pOltdKSksdGhpcy5hY3RpdmVNZXRyaWNzJD1MdCh0aGlzLnN0b3JlLnNlbGVjdChSZiksdGhpcy5hY3RpdmVSdW5zJCx0aGlzLnN0b3JlLnNlbGVjdChJbCkpLnBpcGUoTCgoW2kscixvXSk9PntsZXQgcz1bXTtmb3IobGV0IGEgb2YgcilpW2FdJiYocz1zLmNvbmNhdChpW2FdLmZpbHRlcihsPT5WYihsKSkpKTtyZXR1cm4gcz1bLi4ubmV3IFNldChbLi4uT2JqZWN0LmtleXMobyksLi4uc10pXSxzLm1hcChhPT5TcyhhKSl9KSksdGhpcy5jb29yZGluYXRlRGF0YSQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KFBmKSx0aGlzLnN0b3JlLnNlbGVjdCh2YyksdGhpcy5hY3RpdmVSdW5zJCx0aGlzLmFjdGl2ZU1ldHJpY3MkXSkucGlwZShMKChbaSxyLG8sc10pPT5mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1bXSxvPXttYXg6LTEsbWluOjF9LHM9bmV3IFNldChlKSxhPW5ldyBTZXQoaSk7cmV0dXJuIDA9PT1zLnNpemV8fDA9PT1hLnNpemV8fDA9PT1PYmplY3Qua2V5cyhuKS5sZW5ndGg/e2Nvb3JkaW5hdGVzOltdLGV4dHJlbWVzOnttaW46LTEsbWF4OjF9fToodC5mb3JFYWNoKGw9PntsZXQgdT17fTtuW2xdLmZvckVhY2goZD0+eyFzLmhhcyhkLnJ1bil8fCFhLmhhcyhkLm1ldHJpYyl8fCh1W2QucnVuXT91W2QucnVuXS5wdXNoKGQpOnVbZC5ydW5dPVtkXSxudWxsIT09ZC5uUE1JVmFsdWU/KG8ubWF4PU1hdGgubWF4KG8ubWF4LGQublBNSVZhbHVlKSxvLm1pbj1NYXRoLm1pbihvLm1pbixkLm5QTUlWYWx1ZSkpOihvLm1heD1NYXRoLm1heChvLm1heCwwKSxvLm1pbj1NYXRoLm1pbihvLm1pbiwwKSkpfSk7Zm9yKGxldCBkIG9mIE9iamVjdC5rZXlzKHUpKXIucHVzaCh7YW5ub3RhdGlvbjpsLHJ1bklkOmQsdmFsdWVzOnVbZF19KX0pLG8ubWF4PG8ubWluJiYoby5tYXg9MSxvLm1pbj0tMSkse2Nvb3JkaW5hdGVzOnIsZXh0cmVtZXM6b30pfShpLHIsbyxzKSkpLHRoaXMuc2lkZWJhcldpZHRoJD10aGlzLnN0b3JlLnNlbGVjdChPZiksdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChuYykucGlwZShMKGk9PnI9PntpZighaS5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoYFtDb2xvciBzY2FsZV0gdW5rbm93biBydW5JZDogJHtyfS5gKTtyZXR1cm4gaVtyXX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktcGFyYWxsZWwtY29vcmRpbmF0ZXMiXV0sZGVjbHM6NSx2YXJzOjEyLGNvbnN0czpbWzMsImFjdGl2ZU1ldHJpY3MiLCJjb29yZGluYXRlRGF0YSIsInNpZGViYXJXaWR0aCIsImNvbG9yU2NhbGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsInBhcmFsbGVsLWNvb3JkaW5hdGVzLWNvbXBvbmVudCIsMCksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksQig0LCJhc3luYyIpKSwyJmUmJnkoImFjdGl2ZU1ldHJpY3MiLFUoMSw0LGkuYWN0aXZlTWV0cmljcyQpKSgiY29vcmRpbmF0ZURhdGEiLFUoMiw2LGkuY29vcmRpbmF0ZURhdGEkKSkoInNpZGViYXJXaWR0aCIsVSgzLDgsaS5zaWRlYmFyV2lkdGgkKSkoImNvbG9yU2NhbGUiLFUoNCwxMCxpLnJ1bkNvbG9yU2NhbGUkKSl9LGRlcGVuZGVuY2llczpbS21lLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB3dHQobix0KXsxJm4mJk8oMCwibWF0LWljb24iLDkpfWZ1bmN0aW9uIFN0dChuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMTApfWZ1bmN0aW9uIEV0dChuLHQpezEmbiYmTygwLCJucG1pLXBhcmFsbGVsLWNvb3JkaW5hdGVzIil9dmFyIEptZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9ucz1uZXcgRyx0aGlzLm9uVG9nZ2xlRXhwYW5kZWQ9bmV3IEd9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInNlbGVjdGVkLWFubm90YXRpb25zLWNvbXBvbmVudCJdXSxpbnB1dHM6e3BjRXhwYW5kZWQ6InBjRXhwYW5kZWQiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMifSxvdXRwdXRzOntvbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9uczoib25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMiLG9uVG9nZ2xlRXhwYW5kZWQ6Im9uVG9nZ2xlRXhwYW5kZWQifSxkZWNsczoxMSx2YXJzOjQsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0kbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IGNsZWFycyB0aGUgYW5ub3RhdGlvbiBzZWxlY3Rpb24u4pCfMmI1MjI4OWYyYzRiN2Y1YjE4MmVkMjNjOTE1NDcyMmVjZDQ2YTJkNOKQnzI0OTQ2NjA1MjAzNDEzMDg4MzA6Q2xlYXIgQW5ub3RhdGlvbiBTZWxlY3Rpb25gLGU9JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCBleHBhbmRzIG9yIGhpZGVzIHNlbGVjdGVkIGFubm90YXRpb25zLuKQnzhmNGFkMzA1YzE5ZTM2NTVmMzE4OWUzZTI2NGU4M2ZiNzZmN2JiOTXikJ81NjcwNzk3Nzg0MDcwOTUyMDk1OkV4cGFuZC9IaWRlIFNlbGVjdGVkIEFubm90YXRpb25zYCxbWzEsInBjLWNvbnRhaW5lciJdLFsxLCJwYy10b29sYmFyIl0sWzEsInBjLXRpdGxlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LCJ0aXRsZSIsIkRlc2VsZWN0cyBhbGwgc2VsZWN0ZWQgYW5ub3RhdGlvbnMuIiwxLCJjbGVhci1idXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJjbGVhcl8yNHB4Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsImV4cGFuZC1idXR0b24iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsImNsYXNzIiwiZXhwYW5kLWxlc3MtaWNvbiIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub3RFeHBhbmRlZCIsIiJdLFs0LCJuZ0lmIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsMSwiZXhwYW5kLWxlc3MtaWNvbiJdLFsic3ZnSWNvbiIsImV4cGFuZF9tb3JlXzI0cHgiLDEsImV4cGFuZC1pY29uIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKF8oMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImgzIiwyKSxBKDMsIlNlbGVjdGVkIEFubm90YXRpb25zIiksdigpLF8oNCwiYnV0dG9uIiwzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9ucy5lbWl0KCl9KSxPKDUsIm1hdC1pY29uIiw0KSx2KCksXyg2LCJidXR0b24iLDUpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG9nZ2xlRXhwYW5kZWQuZW1pdCgpfSksRSg3LHd0dCwxLDAsIm1hdC1pY29uIiw2KSxFKDgsU3R0LDEsMCwibmctdGVtcGxhdGUiLG51bGwsNyxxdCksdigpKCksRSgxMCxFdHQsMSwwLCJucG1pLXBhcmFsbGVsLWNvb3JkaW5hdGVzIiw4KSx2KCkpLDImZSl7bGV0IHI9JGUoOSk7Qyg0KSx5KCJkaXNhYmxlZCIsMD09PWkuc2VsZWN0ZWRBbm5vdGF0aW9ucy5sZW5ndGgpLEMoMykseSgibmdJZiIsaS5wY0V4cGFuZGVkKSgibmdJZkVsc2UiLHIpLEMoMykseSgibmdJZiIsaS5wY0V4cGFuZGVkKX19LGRlcGVuZGVuY2llczpbQmUsR3QsX24sWm1lXSxzdHlsZXM6WyIucGMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmVifS5wYy10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjQycHg7cGFkZGluZzowIDE2cHh9LnBjLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7ZGlzcGxheTppbmxpbmU7ZmxleDoxIDF9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxYRj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnBjRXhwYW5kZWQkPXRoaXMuc3RvcmUucGlwZSh2dChvbWUpKSx0aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KHZjKX1jbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFNGKCkpfXRvZ2dsZUV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChQRigpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktc2VsZWN0ZWQtYW5ub3RhdGlvbnMiXV0sZGVjbHM6Myx2YXJzOjYsY29uc3RzOltbMywicGNFeHBhbmRlZCIsInNlbGVjdGVkQW5ub3RhdGlvbnMiLCJvbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9ucyIsIm9uVG9nZ2xlRXhwYW5kZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsInNlbGVjdGVkLWFubm90YXRpb25zLWNvbXBvbmVudCIsMCksUCgib25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuY2xlYXJTZWxlY3RlZEFubm90YXRpb25zKCl9KSgib25Ub2dnbGVFeHBhbmRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS50b2dnbGVFeHBhbmRlZCgpfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSx2KCkpLDImZSYmeSgicGNFeHBhbmRlZCIsVSgxLDIsaS5wY0V4cGFuZGVkJCkpKCJzZWxlY3RlZEFubm90YXRpb25zIixVKDIsNCxpLnNlbGVjdGVkQW5ub3RhdGlvbnMkKSl9LGRlcGVuZGVuY2llczpbSm1lLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBEdHQobix0KXsxJm4mJihfKDAsImRpdiIsNikoMSwiZGl2Iiw3KSxPKDIsIm5wbWktdmlvbGluLWZpbHRlcnMiLDgpLF8oMywiZGl2Iiw5KSxPKDQsInJ1bnMtc2VsZWN0b3IiKSx2KCkoKSgpKSwyJm4mJlB0KCJ3aWR0aCIsUygpLnNpZGViYXJXaWR0aCwicHgiKX1mdW5jdGlvbiBBdHQobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDEwKSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5yZXNpemVHcmFiYmVkLmVtaXQoKSl9KSx2KCl9fWZ1bmN0aW9uIEl0dChuLHQpezEmbiYmKF8oMCwiZGl2IiwxMSksTygxLCJucG1pLWFubm90YXRpb25zLWxpc3QiLDEyKSgyLCJucG1pLXNlbGVjdGVkLWFubm90YXRpb25zIiksdigpKX1mdW5jdGlvbiBQdHQobix0KXsxJm4mJihfKDAsImRpdiIsMTMpLEEoMSwiWW91IG5lZWQgdG8gc2VsZWN0IGF0IGxlYXN0IG9uZSBydW4uIiksdigpKX1mdW5jdGlvbiBSdHQobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDE0KSgxLCJidXR0b24iLDE1KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLnRvZ2dsZVNpZGViYXJFeHBhbmRlZC5lbWl0KCkpfSksTygyLCJtYXQtaWNvbiIsMTYpLHYoKSgpfX12YXIgZWdlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRvZ2dsZVNpZGViYXJFeHBhbmRlZD1uZXcgRyx0aGlzLnJlc2l6ZVRyaWdnZXJlZD1uZXcgRyx0aGlzLnJlc2l6ZUdyYWJiZWQ9bmV3IEcsdGhpcy5yZXNpemVSZWxlYXNlZD1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWFpbi1jb21wb25lbnQiXV0saW5wdXRzOntydW5BY3RpdmU6InJ1bkFjdGl2ZSIsc2lkZWJhckV4cGFuZGVkOiJzaWRlYmFyRXhwYW5kZWQiLHNpZGViYXJXaWR0aDoic2lkZWJhcldpZHRoIn0sb3V0cHV0czp7dG9nZ2xlU2lkZWJhckV4cGFuZGVkOiJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLHJlc2l6ZVRyaWdnZXJlZDoicmVzaXplVHJpZ2dlcmVkIixyZXNpemVHcmFiYmVkOiJyZXNpemVHcmFiYmVkIixyZXNpemVSZWxlYXNlZDoicmVzaXplUmVsZWFzZWQifSxkZWNsczo4LHZhcnM6NSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0kbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IHRvZ2dsZXMgdGhlIHNpZGViYXIu4pCfZjYzYjU3OTMyZDE3OWNjYTYyYWM5ZmNhZTYzZGQ3ZjVlNmZhMzg5ZuKQnzQ0ODUwMDkzNDc0NDQ3MDQ4Nzg6VG9nZ2xlIFNpZGViYXJgLFtbMSwiY29udGVudCIsMywibW91c2V1cCIsIm1vdXNlbW92ZSJdLFsiY2xhc3MiLCJzaWRlYmFyLWNvbnRhaW5lciIsMywid2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwiZ3JhYmJlciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFuYWx5c2lzLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub1J1biIsIiJdLFsiY2xhc3MiLCJzaWRlLXRvZ2dsZSIsNCwibmdJZiJdLFsxLCJzaWRlYmFyLWNvbnRhaW5lciJdLFsxLCJzaWRlYmFyLWNvbnRlbnRzIl0sWzEsInZpb2xpbi1maWx0ZXJzIl0sWzEsInJ1bi1zZWxlY3RvciJdLFsxLCJncmFiYmVyIiwzLCJtb3VzZWRvd24iXSxbMSwiYW5hbHlzaXMtY29udGFpbmVyIl0sWzEsImFubm90YXRpb25zLWxpc3QiXSxbMSwibm9SdW4iXSxbMSwic2lkZS10b2dnbGUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjaGV2cm9uX3JpZ2h0XzI0cHgiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoTygwLCJucG1pLWRhdGEtc2VsZWN0aW9uIiksXygxLCJkaXYiLDApLFAoIm1vdXNldXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVzaXplUmVsZWFzZWQuZW1pdCgpfSkoIm1vdXNlbW92ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkucmVzaXplVHJpZ2dlcmVkLmVtaXQobyl9KSxFKDIsRHR0LDUsMiwiZGl2IiwxKSxFKDMsQXR0LDEsMCwiZGl2IiwyKSxFKDQsSXR0LDMsMCwiZGl2IiwzKSxFKDUsUHR0LDIsMCwibmctdGVtcGxhdGUiLG51bGwsNCxxdCksdigpLEUoNyxSdHQsMywwLCJkaXYiLDUpKSwyJmUpe2xldCByPSRlKDYpO0MoMikseSgibmdJZiIsaS5zaWRlYmFyRXhwYW5kZWQpLEMoMSkseSgibmdJZiIsaS5zaWRlYmFyRXhwYW5kZWQpLEMoMSkseSgibmdJZiIsITA9PT1pLnJ1bkFjdGl2ZSkoIm5nSWZFbHNlIixyKSxDKDMpLHkoIm5nSWYiLCFpLnNpZGViYXJFeHBhbmRlZCl9fSxkZXBlbmRlbmNpZXM6W0JlLEd0LE9iLFdGLF9uLE9tZSxZRixYRl0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleDoxO21pbi1oZWlnaHQ6MHB4O3dpZHRoOjEwMCV9LnNpZGViYXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59LnNpZGViYXItY29udGVudHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjE1MHB4fS5hbmFseXNpcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7ZmxleDoxIDF9LnJ1bi1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnZpb2xpbi1maWx0ZXJzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5zaWRlLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7Ym90dG9tOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6M3B4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZ3JhYmJlcltfbmdjb250ZW50LSVDT01QJV17Y29udGVudDoiIjtjdXJzb3I6ZXctcmVzaXplO2hlaWdodDoxMDAlO3dpZHRoOjNweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9LmFubm90YXRpb25zLWxpc3RbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7bWluLWhlaWdodDowcHg7ZmxleDoxIDF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx0Z2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ydW5BY3RpdmUkPXRoaXMuc3RvcmUucGlwZSh2dChvbykpLnBpcGUoTChpPT4hIWkmJlsuLi5pLnZhbHVlcygpXS5pbmNsdWRlcyghMCkpKSx0aGlzLnNpZGViYXJFeHBhbmRlZCQ9dGhpcy5zdG9yZS5waXBlKHZ0KHpGKSksdGhpcy5zaWRlYmFyV2lkdGgkPXRoaXMuc3RvcmUucGlwZSh2dChPZikpLHRoaXMucmVzaXppbmc9ITF9b25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHFiKCkpfW9uUmVzaXplVHJpZ2dlcmVkKGUpe3RoaXMucmVzaXppbmcmJnRoaXMuc3RvcmUuZGlzcGF0Y2goTkYoe3NpZGViYXJXaWR0aDplLmNsaWVudFh9KSl9b25SZXNpemVHcmFiYmVkKCl7dGhpcy5yZXNpemluZz0hMH1vblJlc2l6ZVJlbGVhc2VkKCl7dGhpcy5yZXNpemluZz0hMX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktbWFpbiJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJydW5BY3RpdmUiLCJzaWRlYmFyRXhwYW5kZWQiLCJzaWRlYmFyV2lkdGgiLCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLCJyZXNpemVUcmlnZ2VyZWQiLCJyZXNpemVHcmFiYmVkIiwicmVzaXplUmVsZWFzZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1haW4tY29tcG9uZW50IiwwKSxQKCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKX0pKCJyZXNpemVUcmlnZ2VyZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVzaXplVHJpZ2dlcmVkKG8pfSkoInJlc2l6ZUdyYWJiZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNpemVHcmFiYmVkKCl9KSgicmVzaXplUmVsZWFzZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNpemVSZWxlYXNlZCgpfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksdigpKSwyJmUmJnkoInJ1bkFjdGl2ZSIsVSgxLDMsaS5ydW5BY3RpdmUkKSkoInNpZGViYXJFeHBhbmRlZCIsVSgyLDUsaS5zaWRlYmFyRXhwYW5kZWQkKSkoInNpZGViYXJXaWR0aCIsVSgzLDcsaS5zaWRlYmFyV2lkdGgkKSl9LGRlcGVuZGVuY2llczpbZWdlLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxuZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudG9nZ2xlU2lkZWJhckV4cGFuZGVkPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJlbWJlZGRpbmctcHJvamVjdGlvbi1jb21wb25lbnQiXV0saW5wdXRzOntzaWRlYmFyRXhwYW5kZWQ6InNpZGViYXJFeHBhbmRlZCJ9LG91dHB1dHM6e3RvZ2dsZVNpZGViYXJFeHBhbmRlZDoidG9nZ2xlU2lkZWJhckV4cGFuZGVkIn0sZGVjbHM6Nyx2YXJzOjAsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCBleHBhbmRzL2hpZGVzIHRoZSBzaWRlYmFyLuKQnzQ4YzI5OTAzY2U4ODFhYjYxMDg4ZjhkNDlkODI3MjAzNzE2YWFlZDTikJ80NjU4NjAyOTkxOTcwMjYwMjE1OkV4cGFuZC9IaWRlIFNpZGViYXJgLFtbMSwiZW1iZWRkaW5nLXByb2plY3Rpb24tdG9vbGJhciJdLFsxLCJlbWJlZGRpbmctcHJvamVjdGlvbi10aXRsZSJdLFsxLCJzaWRlLXRvZ2dsZSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJjbGljayJdLFsic3ZnSWNvbiIsImNoZXZyb25fbGVmdF8yNHB4Il0sWzEsInByb2plY3Rpb24iXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDApKDEsImgzIiwxKSxBKDIsIkVtYmVkZGluZ3MgUHJvamVjdGVkIiksdigpLF8oMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZVNpZGViYXJFeHBhbmRlZC5lbWl0KCl9KSxPKDUsIm1hdC1pY29uIiw0KSx2KCkoKSgpLE8oNiwiZGl2Iiw1KSl9LGRlcGVuZGVuY2llczpbR3QsX25dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJX0uZW1iZWRkaW5nLXByb2plY3Rpb24tdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDo0MnB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6MCAxMHB4fS5lbWJlZGRpbmctcHJvamVjdGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5wcm9qZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy15OmF1dG99LnNpZGUtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6M3B4O2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjMwcHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDozMHB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksaWdlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2lkZWJhckV4cGFuZGVkJD10aGlzLnN0b3JlLnNlbGVjdChHRil9b25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFliKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1lbWJlZGRpbmctcHJvamVjdGlvbiJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJzaWRlYmFyRXhwYW5kZWQiLCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImVtYmVkZGluZy1wcm9qZWN0aW9uLWNvbXBvbmVudCIsMCksUCgidG9nZ2xlU2lkZWJhckV4cGFuZGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG9nZ2xlU2lkZWJhckV4cGFuZGVkKCl9KSxCKDEsImFzeW5jIiksdigpKSwyJmUmJnkoInNpZGViYXJFeHBhbmRlZCIsVSgxLDEsaS5zaWRlYmFyRXhwYW5kZWQkKSl9LGRlcGVuZGVuY2llczpbbmdlLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBMdHQobix0KXsxJm4mJihfKDAsImRpdiIsNikoMSwiZGl2Iiw3KSxPKDIsIm5wbWktZW1iZWRkaW5nLXByb2plY3Rpb24iLDgpKDMsImRpdiIsOSksXyg0LCJkaXYiLDEwKSxPKDUsInJ1bnMtc2VsZWN0b3IiKSx2KCkoKSgpKSwyJm4mJlB0KCJ3aWR0aCIsUygpLnNpZGViYXJXaWR0aCwicHgiKX1mdW5jdGlvbiBCdHQobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDExKSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5yZXNpemVHcmFiYmVkLmVtaXQoKSl9KSx2KCl9fWZ1bmN0aW9uIFZ0dChuLHQpezEmbiYmKF8oMCwiZGl2IiwxMiksTygxLCJucG1pLWFubm90YXRpb25zLWxpc3QiLDEzKSgyLCJucG1pLXNlbGVjdGVkLWFubm90YXRpb25zIiksdigpKX1mdW5jdGlvbiBIdHQobix0KXsxJm4mJihfKDAsImRpdiIsMTQpLEEoMSwiWW91IG5lZWQgdG8gc2VsZWN0IGF0IGxlYXN0IG9uZSBydW4uIiksdigpKX1mdW5jdGlvbiBVdHQobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDE1KSgxLCJidXR0b24iLDE2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLnRvZ2dsZVNpZGViYXJFeHBhbmRlZC5lbWl0KCkpfSksTygyLCJtYXQtaWNvbiIsMTcpLHYoKSgpfX12YXIgcmdlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRvZ2dsZVNpZGViYXJFeHBhbmRlZD1uZXcgRyx0aGlzLnJlc2l6ZVRyaWdnZXJlZD1uZXcgRyx0aGlzLnJlc2l6ZUdyYWJiZWQ9bmV3IEcsdGhpcy5yZXNpemVSZWxlYXNlZD1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZW1iZWRkaW5ncy1jb21wb25lbnQiXV0saW5wdXRzOntydW5BY3RpdmU6InJ1bkFjdGl2ZSIsc2lkZWJhckV4cGFuZGVkOiJzaWRlYmFyRXhwYW5kZWQiLHNpZGViYXJXaWR0aDoic2lkZWJhcldpZHRoIn0sb3V0cHV0czp7dG9nZ2xlU2lkZWJhckV4cGFuZGVkOiJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLHJlc2l6ZVRyaWdnZXJlZDoicmVzaXplVHJpZ2dlcmVkIixyZXNpemVHcmFiYmVkOiJyZXNpemVHcmFiYmVkIixyZXNpemVSZWxlYXNlZDoicmVzaXplUmVsZWFzZWQifSxkZWNsczo4LHZhcnM6NSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0kbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IHRvZ2dsZXMgdGhlIHNpZGViYXIu4pCfZjYzYjU3OTMyZDE3OWNjYTYyYWM5ZmNhZTYzZGQ3ZjVlNmZhMzg5ZuKQnzQ0ODUwMDkzNDc0NDQ3MDQ4Nzg6VG9nZ2xlIFNpZGViYXJgLFtbMSwiY29udGVudCIsMywibW91c2V1cCIsIm1vdXNlbW92ZSJdLFsiY2xhc3MiLCJzaWRlYmFyLWNvbnRhaW5lciIsMywid2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwiZ3JhYmJlciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFuYWx5c2lzLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub1J1biIsIiJdLFsiY2xhc3MiLCJzaWRlLXRvZ2dsZSIsNCwibmdJZiJdLFsxLCJzaWRlYmFyLWNvbnRhaW5lciJdLFsxLCJzaWRlYmFyLWNvbnRlbnRzIl0sWzEsImVtYmVkZGluZy1wcm9qZWN0aW9uIl0sWzEsInJ1bi1kaXZpZGVyIl0sWzEsInJ1bi1zZWxlY3RvciJdLFsxLCJncmFiYmVyIiwzLCJtb3VzZWRvd24iXSxbMSwiYW5hbHlzaXMtY29udGFpbmVyIl0sWzEsImFubm90YXRpb25zLWxpc3QiXSxbMSwibm9SdW4iXSxbMSwic2lkZS10b2dnbGUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjaGV2cm9uX3JpZ2h0XzI0cHgiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoTygwLCJucG1pLWRhdGEtc2VsZWN0aW9uIiksXygxLCJkaXYiLDApLFAoIm1vdXNldXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVzaXplUmVsZWFzZWQuZW1pdCgpfSkoIm1vdXNlbW92ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkucmVzaXplVHJpZ2dlcmVkLmVtaXQobyl9KSxFKDIsTHR0LDYsMiwiZGl2IiwxKSxFKDMsQnR0LDEsMCwiZGl2IiwyKSxFKDQsVnR0LDMsMCwiZGl2IiwzKSxFKDUsSHR0LDIsMCwibmctdGVtcGxhdGUiLG51bGwsNCxxdCksdigpLEUoNyxVdHQsMywwLCJkaXYiLDUpKSwyJmUpe2xldCByPSRlKDYpO0MoMikseSgibmdJZiIsaS5zaWRlYmFyRXhwYW5kZWQpLEMoMSkseSgibmdJZiIsaS5zaWRlYmFyRXhwYW5kZWQpLEMoMSkseSgibmdJZiIsITA9PT1pLnJ1bkFjdGl2ZSkoIm5nSWZFbHNlIixyKSxDKDMpLHkoIm5nSWYiLCFpLnNpZGViYXJFeHBhbmRlZCl9fSxkZXBlbmRlbmNpZXM6W0JlLEd0LE9iLFdGLF9uLFlGLFhGLGlnZV0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleDoxO21pbi1oZWlnaHQ6MHB4O3dpZHRoOjEwMCV9LnNpZGViYXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59LnNpZGViYXItY29udGVudHNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7bWluLXdpZHRoOjE1MHB4fS5hbmFseXNpcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4OjEgMTtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9LnJ1bi1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmVtYmVkZGluZy1wcm9qZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjBweDt3aWR0aDoxMDAlfS5zaWRlLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjNweDtib3R0b206MTBweDtkaXNwbGF5OmZsZXg7aGVpZ2h0OjMwcHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtsZWZ0OjEwcHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MzBweH0ucnVuLWRpdmlkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpO2NvbnRlbnQ6IiI7aGVpZ2h0OjFweDtvdmVyZmxvdzpoaWRkZW59LmdyYWJiZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpO2NvbnRlbnQ6IiI7Y3Vyc29yOmV3LXJlc2l6ZTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2lkdGg6M3B4fS5hbm5vdGF0aW9ucy1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMTttaW4taGVpZ2h0OjBweDt3aWR0aDoxMDAlfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksb2dlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMucnVuQWN0aXZlJD10aGlzLnN0b3JlLnBpcGUodnQob28pKS5waXBlKEwoaT0+ISFpJiZbLi4uaS52YWx1ZXMoKV0uaW5jbHVkZXMoITApKSksdGhpcy5zaWRlYmFyRXhwYW5kZWQkPXRoaXMuc3RvcmUucGlwZSh2dChHRikpLHRoaXMuc2lkZWJhcldpZHRoJD10aGlzLnN0b3JlLnBpcGUodnQobG1lKSksdGhpcy5yZXNpemluZz0hMX1vblRvZ2dsZVNpZGViYXJFeHBhbmRlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goWWIoKSl9b25SZXNpemVUcmlnZ2VyZWQoZSl7dGhpcy5yZXNpemluZyYmdGhpcy5zdG9yZS5kaXNwYXRjaChMRih7c2lkZWJhcldpZHRoOmUuY2xpZW50WH0pKX1vblJlc2l6ZUdyYWJiZWQoKXt0aGlzLnJlc2l6aW5nPSEwfW9uUmVzaXplUmVsZWFzZWQoKXt0aGlzLnJlc2l6aW5nPSExfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1lbWJlZGRpbmdzIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJ1bkFjdGl2ZSIsInNpZGViYXJFeHBhbmRlZCIsInNpZGViYXJXaWR0aCIsInRvZ2dsZVNpZGViYXJFeHBhbmRlZCIsInJlc2l6ZVRyaWdnZXJlZCIsInJlc2l6ZUdyYWJiZWQiLCJyZXNpemVSZWxlYXNlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZW1iZWRkaW5ncy1jb21wb25lbnQiLDApLFAoInRvZ2dsZVNpZGViYXJFeHBhbmRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvZ2dsZVNpZGViYXJFeHBhbmRlZCgpfSkoInJlc2l6ZVRyaWdnZXJlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25SZXNpemVUcmlnZ2VyZWQobyl9KSgicmVzaXplR3JhYmJlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlc2l6ZUdyYWJiZWQoKX0pKCJyZXNpemVSZWxlYXNlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlc2l6ZVJlbGVhc2VkKCl9KSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLEIoMywiYXN5bmMiKSx2KCkpLDImZSYmeSgicnVuQWN0aXZlIixVKDEsMyxpLnJ1bkFjdGl2ZSQpKSgic2lkZWJhckV4cGFuZGVkIixVKDIsNSxpLnNpZGViYXJFeHBhbmRlZCQpKSgic2lkZWJhcldpZHRoIixVKDMsNyxpLnNpZGViYXJXaWR0aCQpKX0sZGVwZW5kZW5jaWVzOltyZ2UsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEd0dChuLHQpezEmbiYmTygwLCJucG1pLWluYWN0aXZlLXZpZXciKX1mdW5jdGlvbiBXdHQobix0KXsxJm4mJk8oMCwibnBtaS1tYWluIil9ZnVuY3Rpb24gcXR0KG4sdCl7MSZuJiZPKDAsIm5wbWktZW1iZWRkaW5ncyIpfWZ1bmN0aW9uIFl0dChuLHQpe2lmKDEmbiYmKEUoMCxXdHQsMSwwLCJucG1pLW1haW4iLDMpLEUoMSxxdHQsMSwwLCJucG1pLWVtYmVkZGluZ3MiLDMpKSwyJm4pe2xldCBlPVMoKTt5KCJuZ0lmIixlLmFjdGl2ZVZpZXc9PT1lLlZpZXdBY3RpdmUuREVGQVVMVCksQygxKSx5KCJuZ0lmIixlLmFjdGl2ZVZpZXc9PT1lLlZpZXdBY3RpdmUuRU1CRURESU5HUyl9fXZhciBzZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuVmlld0FjdGl2ZT1rcH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1jb21wb25lbnQiXV0saW5wdXRzOntydW5zOiJydW5zIixhY3RpdmVWaWV3OiJhY3RpdmVWaWV3In0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwibnBtaS1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJkYXRhQXZhaWxhYmxlIiwiIl0sWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihfKDAsImRpdiIsMCksRSgxLEd0dCwxLDAsIm5wbWktaW5hY3RpdmUtdmlldyIsMSksRSgyLFl0dCwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDIscXQpLHYoKSksMiZlKXtsZXQgcj0kZSgzKTtDKDEpLHkoIm5nSWYiLDA9PT1pLnJ1bnMuc2l6ZSkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbQmUsdW1lLHRnZSxvZ2VdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlfS5ucG1pLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDF9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxhZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ydW5zJD10aGlzLnN0b3JlLnBpcGUodnQob28pKSx0aGlzLmFjdGl2ZVZpZXckPXRoaXMuc3RvcmUucGlwZSh2dChzbWUpKX1uZ09uSW5pdCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goYkYoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJucG1pIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInJ1bnMiLCJhY3RpdmVWaWV3Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJucG1pLWNvbXBvbmVudCIsMCksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSksMiZlJiZ5KCJydW5zIixVKDEsMixpLnJ1bnMkKSkoImFjdGl2ZVZpZXciLFUoMiw0LGkuYWN0aXZlVmlldyQpKX0sZGVwZW5kZW5jaWVzOltzZ2UsR2VdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGxnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsanIsTHMscG4sUG5dfSksbn0pKCksY2dlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxqcixwbixIYV19KSxufSkoKSx1Z2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLGpyLHBuLFBuLE5tZSxjZ2VdfSksbn0pKCksZGdlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxqcixMcyxwbl19KSxufSkoKSxwZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lXX0pLG59KSgpLGhnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbcGdlXX0pLG59KSgpLFFGPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSx1Z2UsZGdlLGhnZSxaYyxsZ2VdfSksbn0pKCksZmdlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxqcixwbixQbl19KSxufSkoKSxtZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLGpyLHoyLHBuLCRiLFFrXX0pLG59KSgpLGdnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsJGJdfSksbn0pKCksX2dlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSwkYixtZ2UsZ2dlXX0pLG59KSgpLHZnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUscG4sSGEsSWJdfSksbn0pKCkseWdlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxwbixQbl19KSxufSkoKSxLRj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsdmdlLF9nZSx5Z2VdfSksbn0pKCksYmdlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZV19KSxufSkoKSxaRj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUscG4sUG4sYmdlXX0pLG59KSgpLHhnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsanIsTHMscG4sRmIsS0YsUG4sUUYsWkYsZmdlXX0pLG59KSgpLENnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksTWdlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxqcixQbixwbl19KSxufSkoKSx3Z2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLGpyLHBuLFBuLE1nZV19KSxufSkoKSxTZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLGpyLExzLHBuLEZiLEtGLFBuLHdnZSxRRixaRl19KSxufSkoKSxFZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLENnZSxTZ2UseGdlLHRtZSx3ci5mb3JGZWF0dXJlKCJucG1pIixkbWUpLHJvLmZvckZlYXR1cmUoW2NtZV0pLEJzLmZvclBsdWdpbigibnBtaSIsYWdlKV19KSxufSkoKSxKRj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx2Nj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lLHRoaXMuaHR0cFBhdGhQcmVmaXg9ImRhdGEvcGx1Z2luL3RleHRfdjIifWZldGNoUnVuVG9UYWcoKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvdGFncyIpLnBpcGUoTChlPT57bGV0IGk9bmV3IE1hcDtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoW3Isb10pPT57aS5zZXQocixvKX0pLGl9KSl9ZmV0Y2hUZXh0RGF0YShlLGkpe2xldCByPW5ldyBVUkxTZWFyY2hQYXJhbXMoe3J1bjplLHRhZzppfSk7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCtgL3RleHQ/JHtyLnRvU3RyaW5nKCl9YCkucGlwZShMKG89Pm8ubWFwKHM9Pih7b3JpZ2luYWxTaGFwZTpzLm9yaWdpbmFsX3NoYXBlLHN0ZXA6cy5zdGVwLHN0cmluZ0FycmF5OnMuc3RyaW5nX2FycmF5LHdhbGxUaW1lSW5NczoxZTMqcy53YWxsX3RpbWUsdHJ1bmNhdGVkOnMudHJ1bmNhdGVkfSkpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooa2EpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxUZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbdjYse3Byb3ZpZGU6SkYsdXNlRXhpc3Rpbmc6djZ9XSxpbXBvcnRzOltLdV19KSxufSkoKSxEZ2U9YmUoIltUZXh0XSBUZXh0IFBsdWdpbiBMb2FkZWQiKSxBZ2U9YmUoIltUZXh0XSBSdW5zIFRvIFRhZyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxJZ2U9YmUoIltUZXh0XSBUYWcgR3JvdXAgVmlzaWJpbGl0eSBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUGdlPWJlKCJbVGV4dF0gVGV4dCBEYXRhIExvYWRlZCBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx5Nj1NcigidGV4dCIpLFJnZT0oSih5NixuPT5uLnJ1blRvVGFncyksSih5NixuPT57bGV0IHQ9bmV3IFNldCxlPW5ldyBTZXQ7Zm9yKGxldCBpIG9mIG4udmlzaWJsZVJ1blRhZ3MudmFsdWVzKCkpZm9yKGxldCByIG9mIGkpe2xldCBvPUpTT04uc3RyaW5naWZ5KHIpO3QuaGFzKG8pfHwodC5hZGQobyksZS5hZGQocikpfXJldHVyblsuLi5lXX0pKSxPZ2U9Sih5Niwobix0KT0+e2xldCBlPW4uZGF0YS5nZXQodC5ydW4pO3JldHVybiBlJiZlLmdldCh0LnRhZyl8fG51bGx9KSxrZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLmxvYWRSdW5Ub1RhZ3MkPWNyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoaWkoRGdlKSx1aSgoKT0+dGhpcy5kYXRhU291cmNlLmZldGNoUnVuVG9UYWcoKS5waXBlKGt0KG89Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEFnZSh7cnVuVG9UYWdzOm99KSl9KSxMKCgpPT57fSkpKSkse2Rpc3BhdGNoOiExfSksdGhpcy5sb2FkRGF0YSQ9Y3IoKCk9PntsZXQgbz10aGlzLmFjdGlvbnMkLnBpcGUoaWkoSWdlKSx1aSgoe3Zpc2libGVUZXh0Q2FyZHM6YX0pPT57bGV0IGw9YS5tYXAoKHtydW46Yyx0YWc6dX0pPT50aGlzLnN0b3JlLnNlbGVjdChPZ2Use3J1bjpjLHRhZzp1fSkucGlwZShmdW5jdGlvbihuLHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGk9PmkucGlwZShuP1llKChyLG8pPT5uKHIsbyxpKSk6bXMsUFcoMSksZT9fMSh0KTp2MSgoKT0+bmV3IF8wKSl9KCksTChkPT4oe3J1bjpjLHRhZzp1LHRleHREYXRhOmR9KSkpKTtyZXR1cm4gbHIobCkucGlwZShMKGM9PmMuZmlsdGVyKCh7dGV4dERhdGE6dX0pPT5udWxsPT09dSkubWFwKCh7cnVuOnUsdGFnOmR9KT0+KHtydW46dSx0YWc6ZH0pKSkpfSkpO3JldHVybiBKdChvLHRoaXMuYWN0aW9ucyQucGlwZShpaShGYSxhYSksV3QodGhpcy5zdG9yZS5zZWxlY3QoUmdlKSksTCgoWyxhXSk9PmEpKSkucGlwZSh4bihhPT5scihhLm1hcChsPT50aGlzLmZldGNoVGV4dERhdGEobCkpKSkpfSx7ZGlzcGF0Y2g6ITF9KX1mZXRjaFRleHREYXRhKGUpe2xldHtydW46aSx0YWc6cn09ZTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoVGV4dERhdGEoaSxyKS5waXBlKGt0KG89Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFBnZSh7cnVuOmksdGFnOnIsc3RlcERhdGE6b30pKX0pLEwoKCk9Pnt9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooUG8pLGooQ2UpLGooSkYpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSwkdHQ9dnIoe3J1blRvVGFnczpuZXcgTWFwKFtbInJ1bjEiLFsiYS9iIiwiYS9jIl1dLFsicnVuMiIsWyJhL2IiLCJhL2QiXV0sWyJydW4zIixbImMiLCJhL2IiXV1dKSxkYXRhOm5ldyBNYXAoW1sicnVuMSIsbmV3IE1hcChbWyJhL2IiLFt7b3JpZ2luYWxTaGFwZTpbM10sc3RlcDowLHN0cmluZ0FycmF5OltbImZvbyIsImJhciIsImJheiJdXSx3YWxsVGltZUluTXM6MTU3Nzg2NTZlNSx0cnVuY2F0ZWQ6ITF9LHtvcmlnaW5hbFNoYXBlOlszXSxzdGVwOjEsc3RyaW5nQXJyYXk6W1siZm9vIiwiYmF6Il1dLHdhbGxUaW1lSW5NczoxNTc3ODY1NjAxZTMsdHJ1bmNhdGVkOiExfV1dLFsiYS9jIixbe29yaWdpbmFsU2hhcGU6WzNdLHN0ZXA6MCxzdHJpbmdBcnJheTpbWyJXZSBjb25kdWN0ZWQgYW4gZXhwZXJpbWVudCBhbmQgZm91bmQgdGhlIGZvbGxvd2luZyBkYXRhOlxuXG5Qb3VuZHMgb2YgY2hvY29sYXRlIHwgSGFwcGluZXNzXG4tLS18LS0tXG4wIHwgMVxuMSB8IDRcbjIgfCA5XG4zIHwgMTZcbjQgfCAyNVxuNSB8IDM2XG42IHwgNDlcbjcgfCA2NFxuOCB8IDgxXG45IHwgMTAwXG4xMCB8IDEyMSJdXSx3YWxsVGltZUluTXM6MTU3Nzg2NTZlNSx0cnVuY2F0ZWQ6ITF9LHtvcmlnaW5hbFNoYXBlOlszXSxzdGVwOjEsc3RyaW5nQXJyYXk6W1siXHhkNyIsIioqMCoqIiwiKioxKioiLCIqKjIqKiIsIioqMyoqIiwiKio0KioiLCIqKjUqKiJdLFsiKiowKioiLCIwIiwiMCIsIjAiLCIwIiwiMCIsIjAiXSxbIioqMSoqIiwiMCIsIjEiLCIyIiwiMyIsIjQiLCI1Il0sWyIqKjIqKiIsIjAiLCIyIiwiNCIsIjYiLCI4IiwiMTAiXSxbIioqMyoqIiwiMCIsIjMiLCI2IiwiOSIsIjEyIiwiMTUiXSxbIioqNCoqIiwiMCIsIjQiLCI4IiwiMTIiLCIxNiIsIjIwIl0sWyIqKjUqKiIsIjAiLCI1IiwiMTAiLCIxNSIsIjIwIiwiMjUiXV0sd2FsbFRpbWVJbk1zOjE1Nzc4NjU2MDFlMyx0cnVuY2F0ZWQ6ITF9XV1dKV1dKSx2aXNpYmxlUnVuVGFnczpuZXcgTWFwfSk7ZnVuY3Rpb24gRmdlKG4sdCl7cmV0dXJuICR0dChuLHQpfXZhciBOZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGV4dC1kYXNoYm9hcmQiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkEoMCwiIFRoaXMgaXMgdGhlIHRleHQgZGFzaGJvYXJkICIpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxMZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLEJnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsTGdlLEJzLmZvclBsdWdpbigidGV4dF92MiIsTmdlKSxUZ2Usd3IuZm9yRmVhdHVyZSgidGV4dCIsRmdlKSxyby5mb3JGZWF0dXJlKFtrZ2VdKV19KSxufSkoKSxWZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W19vZSxOaGUsRWdlLEJnZV19KSxufSkoKSxGcD0oKCk9PihmdW5jdGlvbihuKXtuLkNVU1RPTV9FTEVNRU5UPSJDVVNUT01fRUxFTUVOVCIsbi5JRlJBTUU9IklGUkFNRSIsbi5OR19DT01QT05FTlQ9Ik5HX0NPTVBPTkVOVCIsbi5OT05FPSJOT05FIn0oRnB8fChGcD17fSkpLEZwKSkoKSxlbnQ9WyJwbHVnaW5Db250YWluZXIiXSx0bnQ9WyJuZ1BsdWdpbkNvbnRhaW5lciJdO2Z1bmN0aW9uIG5udChuLHQpezEmbiYmTmkoMCl9ZnVuY3Rpb24gaW50KG4sdCl7aWYoMSZuJiYoc24oMCksRSgxLG5udCwxLDAsIm5nLWNvbnRhaW5lciIsOSksYW4oKSksMiZuKXtsZXQgZT1TKDIpLGk9JGUoNik7QygxKSx5KCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU/ZS5lbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOmkpfX1mdW5jdGlvbiBybnQobix0KXsxJm4mJk5pKDApfWZ1bmN0aW9uIG9udChuLHQpe2lmKDEmbiYmKHNuKDApLEUoMSxybnQsMSwwLCJuZy1jb250YWluZXIiLDkpLGFuKCkpLDImbil7bGV0IGU9UygyKSxpPSRlKDYpO0MoMSkseSgibmdUZW1wbGF0ZU91dGxldCIsZS5lbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU/ZS5lbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6aSl9fWZ1bmN0aW9uIHNudChuLHQpezEmbiYmTmkoMCl9ZnVuY3Rpb24gYW50KG4sdCl7aWYoMSZuJiYoc24oMCksRSgxLHNudCwxLDAsIm5nLWNvbnRhaW5lciIsOSksYW4oKSksMiZuKXtsZXQgZT1TKDIpLGk9JGUoNik7QygxKSx5KCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZTppKX19ZnVuY3Rpb24gbG50KG4sdCl7aWYoMSZuJiYoc24oMCksXygxLCJoMyIsMTApLEEoMiwiIFRoZXJlXHUyMDE5cyBubyBkYXNoYm9hcmQgYnkgdGhlIG5hbWUgb2YgXHUyMDFjIiksXygzLCJjb2RlIiksQSg0KSx2KCksQSg1LCJcdTIwMWQuICIpLHYoKSxfKDYsInAiKSxBKDcsIllvdSBjYW4gc2VsZWN0IGEgZGFzaGJvYXJkIGZyb20gdGhlIGxpc3QgYWJvdmUuIiksdigpLF8oOCwicCIpLE5pKDksMTEpLHYoKSxhbigpKSwyJm4pe2xldCBlPVMoMiksaT0kZSg4KTtDKDQpLHl0KGUuYWN0aXZlUGx1Z2luSWQpLEMoNSkseSgibmdUZW1wbGF0ZU91dGxldCIsaSl9fWZ1bmN0aW9uIGNudChuLHQpe2lmKDEmbiYmKHNuKDApLF8oMSwiaDMiLDEyKSxBKDIsIiBObyBkYXNoYm9hcmRzIGFyZSBhY3RpdmUgZm9yIHRoZSBjdXJyZW50IGRhdGEgc2V0LiAiKSx2KCksXygzLCJwIiksQSg0LCJQcm9iYWJsZSBjYXVzZXM6IiksdigpLF8oNSwidWwiKSg2LCJsaSIpLEEoNywiWW91IGhhdmVuXHUyMDE5dCB3cml0dGVuIGFueSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuIiksdigpLF8oOCwibGkiKSxBKDksIlRlbnNvckJvYXJkIGNhblx1MjAxOXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLiIpLHYoKSgpLEEoMTAsIiBJZiB5b3VcdTIwMTlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUgIiksXygxMSwiYSIsMTMpLEEoMTIsIlJFQURNRSIpLHYoKSxBKDEzLCIgYW5kIHBlcmhhcHMgdGhlICIpLF8oMTQsImEiLDE0KSxBKDE1LCJUZW5zb3JCb2FyZCB0dXRvcmlhbCIpLHYoKSxBKDE2LCIuICIpLF8oMTcsInAiKSxBKDE4LCIgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUgIiksXygxOSwiYSIsMTUpLEEoMjAsInRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXMiKSx2KCksQSgyMSwiIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLiAiKSx2KCksXygyMiwicCIpLE5pKDIzLDExKSx2KCksYW4oKSksMiZuKXtTKDIpO2xldCBlPSRlKDgpO0MoMjMpLHkoIm5nVGVtcGxhdGVPdXRsZXQiLGUpfX1mdW5jdGlvbiB1bnQobix0KXtpZigxJm4mJihfKDAsImRpdiIsNikoMSwiZGl2Iiw3KSxFKDIsaW50LDIsMSwibmctY29udGFpbmVyIiw4KSxFKDMsb250LDIsMSwibmctY29udGFpbmVyIiw4KSxFKDQsYW50LDIsMSwibmctY29udGFpbmVyIiw4KSxFKDUsbG50LDEwLDIsIm5nLWNvbnRhaW5lciIsOCksRSg2LGNudCwyNCwxLCJuZy1jb250YWluZXIiLDgpLHYoKSgpKSwyJm4pe2xldCBlPVMoKTt5KCJuZ1N3aXRjaCIsZS5wbHVnaW5Mb2FkU3RhdGUpLEMoMikseSgibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5FTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORCksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV04pLEMoMSkseSgibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5VTktOT1dOX1BMVUdJTl9JRCksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLk5PX0VOQUJMRURfUExVR0lOUyl9fWZ1bmN0aW9uIGRudChuLHQpe2lmKDEmbiYmKF8oMCwiaDMiLDE2KSxBKDEsIkRhdGEgY291bGQgbm90IGJlIGxvYWRlZC4iKSx2KCksXygyLCJwIiksQSgzLCJUaGUgVGVuc29yQm9hcmQgc2VydmVyIG1heSBiZSBkb3duIG9yIGluYWNjZXNzaWJsZS4iKSx2KCksXyg0LCJwIiksTmkoNSwxMSksdigpKSwyJm4pe1MoKTtsZXQgZT0kZSg4KTtDKDUpLHkoIm5nVGVtcGxhdGVPdXRsZXQiLGUpfX1mdW5jdGlvbiBwbnQobix0KXtpZigxJm4mJihfKDAsInAiLDE5KSgxLCJpIiksQSgyLCJMb2cgZGlyZWN0b3J5OiAiKSxfKDMsInNwYW4iKSxBKDQpLHYoKSgpKCkpLDImbil7bGV0IGU9UygyKTtDKDQpLHl0KGUuZGF0YUxvY2F0aW9uKX19ZnVuY3Rpb24gaG50KG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwxNyksQSgxKSxCKDIsImRhdGUiKSx2KCksRSgzLHBudCw1LDEsInAiLDE4KSksMiZuKXtsZXQgZT1TKCk7QygxKSxqZSgiTGFzdCByZWxvYWQ6ICIsSmYoMiwyLGUubGFzdFVwZGF0ZWQsIm1lZGl1bSIpLCIiKSxDKDIpLHkoIm5nSWYiLGUuZGF0YUxvY2F0aW9uKX19dmFyIGZudD1mdW5jdGlvbihuKXtyZXR1cm57cGx1Z2luczohMCwiaXMtZmlyc3QtcGFydHktcGx1Z2luIjpufX0seWM9KCgpPT4oZnVuY3Rpb24obil7bltuLkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EPTBdPSJFTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORCIsbltuLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQ9MV09IkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQiLG5bbi5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV049Ml09IkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTiIsbltuLk5PX0VOQUJMRURfUExVR0lOUz0zXT0iTk9fRU5BQkxFRF9QTFVHSU5TIixuW24uVU5LTk9XTl9QTFVHSU5fSUQ9NF09IlVOS05PV05fUExVR0lOX0lEIixuW24uTE9BREVEPTVdPSJMT0FERUQiLG5bbi5MT0FESU5HPTZdPSJMT0FESU5HIn0oeWN8fCh5Yz17fSkpLHljKSkoKSxIZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLnBsdWdpblJlZ2lzdHJ5PWksdGhpcy5wbHVnaW5BcGlIb3N0PXIsdGhpcy5QbHVnaW5Mb2FkU3RhdGU9eWMsdGhpcy5Mb2FkaW5nTWVjaGFuaXNtVHlwZT1GcCx0aGlzLnBsdWdpbkluc3RhbmNlcz1uZXcgTWFwfW5nT25DaGFuZ2VzKGUpe2lmKCF0aGlzLmlzRmVhdHVyZUZsYWdzTG9hZGVkfHwhdGhpcy5hY3RpdmVLbm93blBsdWdpbnx8dGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PU9lLk5PVF9MT0FERUR8fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1PZS5MT0FESU5HKXJldHVybjtsZXQgaT1Cb29sZWFuKHRoaXMuYWN0aXZlS25vd25QbHVnaW4mJiF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXModGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCkpO2lmKGUuYWN0aXZlS25vd25QbHVnaW58fGUuaXNGZWF0dXJlRmxhZ3NMb2FkZWR8fGUuc2V0dGluZ3NMb2FkU3RhdGUpe2xldCByPWUuYWN0aXZlS25vd25QbHVnaW4/LnByZXZpb3VzVmFsdWU7aWYociYmci5pZCE9PXRoaXMuYWN0aXZlS25vd25QbHVnaW4uaWQmJnRoaXMuaGlkZVBsdWdpbihyKSxpKXtsZXQgbz10aGlzLmNyZWF0ZVBsdWdpbih0aGlzLmFjdGl2ZUtub3duUGx1Z2luKTtvJiZ0aGlzLnBsdWdpbkluc3RhbmNlcy5zZXQodGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCxvKX1lbHNlIHRoaXMuc2hvd1BsdWdpbih0aGlzLmFjdGl2ZUtub3duUGx1Z2luKX0oaXx8ZS5sYXN0VXBkYXRlZCkmJnRoaXMucmVsb2FkKHRoaXMuYWN0aXZlS25vd25QbHVnaW4saSl9aGlkZVBsdWdpbihlKXtpZighdGhpcy5wbHVnaW5JbnN0YW5jZXMuaGFzKGUuaWQpKXJldHVybjtsZXQgaT10aGlzLnBsdWdpbkluc3RhbmNlcy5nZXQoZS5pZCk7T2JqZWN0LmFzc2lnbihpLnN0eWxlLHttYXhIZWlnaHQ6MCxvdmVyZmxvdzoiaGlkZGVuIix2aXNpYmlsaXR5OiJoaWRkZW4iLHBvc2l0aW9uOiJhYnNvbHV0ZSJ9KX1zaG93UGx1Z2luKGUpe2lmKCF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXMoZS5pZCkpcmV0dXJuO2xldCBpPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtPYmplY3QuYXNzaWduKGkuc3R5bGUse21heEhlaWdodDpudWxsLG92ZXJmbG93Om51bGwsdmlzaWJpbGl0eTpudWxsLHBvc2l0aW9uOm51bGx9KX1jcmVhdGVQbHVnaW4oZSl7bGV0IGk9bnVsbDtzd2l0Y2goZS5sb2FkaW5nX21lY2hhbmlzbS50eXBlKXtjYXNlIEZwLkNVU1RPTV9FTEVNRU5UOmk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlLmxvYWRpbmdfbWVjaGFuaXNtLmVsZW1lbnRfbmFtZSksaS5yZWxvYWRPblJlYWR5PSExLGkuZmVhdHVyZUZsYWdzPXRoaXMuZmVhdHVyZUZsYWdzLHRoaXMucGx1Z2luc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGkpO2JyZWFrO2Nhc2UgRnAuSUZSQU1FOmlmKCF0aGlzLnBsdWdpbkFwaUhvc3QpdGhyb3cgRXJyb3IoYElGUkFNRS1iYXNlZCBwbHVnaW5zIG5vdCBzdXBwb3J0ZWQ6ICR7ZS5pZH1gKTtpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLGkuc2V0QXR0cmlidXRlKCJzcmMiLGBkYXRhL3BsdWdpbl9lbnRyeS5odG1sP25hbWU9JHtlLmlkfWApLHRoaXMucGx1Z2luQXBpSG9zdC5yZWdpc3RlclBsdWdpbklmcmFtZShpLGUuaWQpLHRoaXMucGx1Z2luc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGkpO2JyZWFrO2Nhc2UgRnAuTkdfQ09NUE9ORU5UOmxldCByPXRoaXMucGx1Z2luUmVnaXN0cnkuZ2V0Q29tcG9uZW50KGUuaWQpO2lmKHIpe2xldCBvPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHIpO2k9dGhpcy5uZ1BsdWdpbkNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQobykubG9jYXRpb24ubmF0aXZlRWxlbWVudH1lbHNlIGNvbnNvbGUuZXJyb3IoYE5vIHJlZ2lzdGVyZWQgQW5ndWxhciBjb21wb25lbnQgZm9yIHBsdWdpbjogJHtlLmlkfWApO2JyZWFrO2Nhc2UgRnAuTk9ORTpicmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgcGx1Z2luIil9cmV0dXJuIGl9cmVsb2FkKGUsaSl7aWYoIWkmJmUuZGlzYWJsZV9yZWxvYWQpcmV0dXJuO2xldCByPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtyJiZyLnJlbG9hZCYmci5yZWxvYWQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShncyksTShCcyksTShyMiw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2lucy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoZW50LDcsUmUpLG90KHRudCw3LE9pKSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5wbHVnaW5zQ29udGFpbmVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLm5nUGx1Z2luQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOnthY3RpdmVQbHVnaW5JZDoiYWN0aXZlUGx1Z2luSWQiLGFjdGl2ZUtub3duUGx1Z2luOiJhY3RpdmVLbm93blBsdWdpbiIscGx1Z2luTG9hZFN0YXRlOiJwbHVnaW5Mb2FkU3RhdGUiLGRhdGFMb2NhdGlvbjoiZGF0YUxvY2F0aW9uIixpc0ZlYXR1cmVGbGFnc0xvYWRlZDoiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLHNldHRpbmdzTG9hZFN0YXRlOiJzZXR0aW5nc0xvYWRTdGF0ZSIsZmVhdHVyZUZsYWdzOiJmZWF0dXJlRmxhZ3MiLGxhc3RVcGRhdGVkOiJsYXN0VXBkYXRlZCIsZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLGVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczo5LHZhcnM6NCxjb25zdHM6W1szLCJuZ0NsYXNzIl0sWyJwbHVnaW5Db250YWluZXIiLCIiXSxbIm5nUGx1Z2luQ29udGFpbmVyIiwiIl0sWyJjbGFzcyIsIndhcm5pbmciLDMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWyJlbnZpcm9ubWVudEZhaWx1cmVEZWZhdWx0VGVtcGxhdGUiLCIiXSxbImRhdGVBbmREYXRhTG9jYXRpb24iLCIiXSxbMSwid2FybmluZyIsMywibmdTd2l0Y2giXSxbMSwid2FybmluZy1tZXNzYWdlIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsInVua25vd24tcGx1Z2luIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwibm8tYWN0aXZlLXBsdWdpbiJdLFsiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCJdLFsiaHJlZiIsImh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiXSxbImhyZWYiLCJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIl0sWzEsImVudmlyb25tZW50LW5vdC1sb2FkZWQiXSxbMSwibGFzdC1yZWxvYWQtdGltZSJdLFsiY2xhc3MiLCJkYXRhLWxvY2F0aW9uIiw0LCJuZ0lmIl0sWzEsImRhdGEtbG9jYXRpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCwxKSxOaSgyLG51bGwsMiksdigpLEUoNCx1bnQsNyw2LCJkaXYiLDMpLEUoNSxkbnQsNiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LHF0KSxFKDcsaG50LDQsNSwibmctdGVtcGxhdGUiLG51bGwsNSxxdCkpLDImZSYmKHkoIm5nQ2xhc3MiLE9uKDIsZm50LChudWxsPT1pLmFjdGl2ZUtub3duUGx1Z2luP251bGw6aS5hY3RpdmVLbm93blBsdWdpbi5sb2FkaW5nX21lY2hhbmlzbS50eXBlKSE9PWkuTG9hZGluZ01lY2hhbmlzbVR5cGUuSUZSQU1FKSksQyg0KSx5KCJuZ0lmIixpLnBsdWdpbkxvYWRTdGF0ZSE9PWkuUGx1Z2luTG9hZFN0YXRlLkxPQURFRCYmaS5wbHVnaW5Mb2FkU3RhdGUhPT1pLlBsdWdpbkxvYWRTdGF0ZS5MT0FESU5HKSl9LGRlcGVuZGVuY2llczpbRm4sQmUsb3MsQ3IsVXIsVV9dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjE7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucGx1Z2lucy5pcy1maXJzdC1wYXJ0eS1wbHVnaW5bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0ud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZmZmO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzMwMzAzMH0ud2FybmluZy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMjEyMTIxO21hcmdpbjo4MHB4IGF1dG8gMDttYXgtd2lkdGg6NTQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmctbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC53YXJuaW5nLW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9Lmxhc3QtcmVsb2FkLXRpbWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc3R5bGU6aXRhbGljfS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaWZyYW1le2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLG1udD1KKHJ2LFJzLChuLHQpPT50JiZuW3RdP09iamVjdC5hc3NpZ24oe2lkOnR9LG5bdF0pOm51bGwpLGVOPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlS25vd25QbHVnaW4kPXRoaXMuc3RvcmUuc2VsZWN0KG1udCksdGhpcy5hY3RpdmVQbHVnaW5JZCQ9dGhpcy5zdG9yZS5zZWxlY3QoUnMpLHRoaXMucGx1Z2luTG9hZFN0YXRlJD1MdCh0aGlzLmFjdGl2ZUtub3duUGx1Z2luJCx0aGlzLmFjdGl2ZVBsdWdpbklkJCx0aGlzLnN0b3JlLnNlbGVjdChuSSkpLnBpcGUoTCgoW2kscixvXSk9Pm51bGwhPT1vLmZhaWx1cmVDb2RlP28uZmFpbHVyZUNvZGU9PT0kbC5OT1RfRk9VTkQ/eWMuRU5WSVJPTk1FTlRfRkFJTFVSRV9OT1RfRk9VTkQ6by5mYWlsdXJlQ29kZT09PSRsLlBFUk1JU1NJT05fREVOSUVEP3ljLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQ6eWMuRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOOm51bGwhPT1pP3ljLkxPQURFRDpudWxsPT09by5sYXN0TG9hZGVkVGltZUluTXMmJm8uc3RhdGU9PT1PZS5MT0FESU5HP3ljLkxPQURJTkc6cj95Yy5VTktOT1dOX1BMVUdJTl9JRDp5Yy5OT19FTkFCTEVEX1BMVUdJTlMpKSx0aGlzLmxhc3RMb2FkZWRUaW1lSW5NcyQ9dGhpcy5zdG9yZS5zZWxlY3QoaXYpLHRoaXMuZGF0YUxvY2F0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChvdikucGlwZShMKGk9PmkuZGF0YV9sb2NhdGlvbikpLHRoaXMuaXNGZWF0dXJlRmxhZ3NMb2FkZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGdoKSx0aGlzLmZlYXR1cmVGbGFncyQ9dGhpcy5zdG9yZS5zZWxlY3QoYnMpLHRoaXMuc2V0dGluZ3NMb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KE5hLmdldFNldHRpbmdzTG9hZFN0YXRlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInBsdWdpbnMiXV0saW5wdXRzOntlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUifSxkZWNsczo5LHZhcnM6MjcsY29uc3RzOltbMywiYWN0aXZlS25vd25QbHVnaW4iLCJhY3RpdmVQbHVnaW5JZCIsImRhdGFMb2NhdGlvbiIsImxhc3RVcGRhdGVkIiwicGx1Z2luTG9hZFN0YXRlIiwiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLCJzZXR0aW5nc0xvYWRTdGF0ZSIsImZlYXR1cmVGbGFncyIsImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiLCJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLCJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsInBsdWdpbnMtY29tcG9uZW50IiwwKSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLEIoMywiYXN5bmMiKSxCKDQsImFzeW5jIiksQig1LCJhc3luYyIpLEIoNiwiYXN5bmMiKSxCKDcsImFzeW5jIiksQig4LCJhc3luYyIpKSwyJmUmJnkoImFjdGl2ZUtub3duUGx1Z2luIixVKDEsMTEsaS5hY3RpdmVLbm93blBsdWdpbiQpKSgiYWN0aXZlUGx1Z2luSWQiLFUoMiwxMyxpLmFjdGl2ZVBsdWdpbklkJCkpKCJkYXRhTG9jYXRpb24iLFUoMywxNSxpLmRhdGFMb2NhdGlvbiQpKSgibGFzdFVwZGF0ZWQiLFUoNCwxNyxpLmxhc3RMb2FkZWRUaW1lSW5NcyQpKSgicGx1Z2luTG9hZFN0YXRlIixVKDUsMTksaS5wbHVnaW5Mb2FkU3RhdGUkKSkoImlzRmVhdHVyZUZsYWdzTG9hZGVkIixVKDYsMjEsaS5pc0ZlYXR1cmVGbGFnc0xvYWRlZCQpKSgic2V0dGluZ3NMb2FkU3RhdGUiLFUoNywyMyxpLnNldHRpbmdzTG9hZFN0YXRlJCkpKCJmZWF0dXJlRmxhZ3MiLFUoOCwyNSxpLmZlYXR1cmVGbGFncyQpKSgiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsaS5lbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlKSgiZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSkoImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSIsaS5lbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUpfSxzdHlsZXM6WyJwbHVnaW5zLWNvbXBvbmVudFtfbmdjb250ZW50LSVDT01QJV0geyBoZWlnaHQ6IDEwMCU7IH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHROPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltlYyxNZSxCc119KSxufSkoKTtOeChlTixbSGdlXSxbR2VdKTt2YXIgVWdlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kb2N1bWVudD1pLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlPXRoaXMub25WaXNpYmlsaXR5Q2hhbmdlSW1wbC5iaW5kKHRoaXMpLHRoaXMucmVsb2FkRW5hYmxlZCQ9dGhpcy5zdG9yZS5waXBlKHZ0KE5hLmdldFJlbG9hZEVuYWJsZWQpKSx0aGlzLnJlbG9hZFBlcmlvZEluTXMkPXRoaXMuc3RvcmUucGlwZSh2dChOYS5nZXRSZWxvYWRQZXJpb2RJbk1zKSksdGhpcy5yZWxvYWRUaW1lcklkPW51bGwsdGhpcy5taXNzZWRBdXRvUmVsb2FkPSExLHRoaXMubmdVbnN1YnNjcmliZT1uZXcga2V9bmdPbkluaXQoKXt0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKSxMdCh0aGlzLnJlbG9hZEVuYWJsZWQkLnBpcGUoeWkoKSksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJC5waXBlKHlpKCkpKS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoW2UsaV0pPT57dGhpcy5jYW5jZWxMb2FkKCksZSYmdGhpcy5sb2FkKGkpfSl9b25WaXNpYmlsaXR5Q2hhbmdlSW1wbCgpeyJ2aXNpYmxlIj09PXRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZ0aGlzLm1pc3NlZEF1dG9SZWxvYWQmJih0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITEsdGhpcy5zdG9yZS5kaXNwYXRjaChhYSgpKSl9bG9hZChlKXt0aGlzLnJlbG9hZFRpbWVySWQ9c2V0VGltZW91dCgoKT0+eyJ2aXNpYmxlIj09PXRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlP3RoaXMuc3RvcmUuZGlzcGF0Y2goYWEoKSk6dGhpcy5taXNzZWRBdXRvUmVsb2FkPSEwLHRoaXMubG9hZChlKX0sZSl9Y2FuY2VsTG9hZCgpe251bGwhPT10aGlzLnJlbG9hZFRpbWVySWQmJmNsZWFyVGltZW91dCh0aGlzLnJlbG9hZFRpbWVySWQpLHRoaXMucmVsb2FkVGltZXJJZD1udWxsfW5nT25EZXN0cm95KCl7dGhpcy5jYW5jZWxMb2FkKCksdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZSksdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSksTShIdCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlbG9hZGVyIl1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx6Z2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGVuc29yYm9hcmQtd3JhcHBlci1jb21wb25lbnQiXV0sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbMSwicGx1Z2lucyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmTygwLCJwbHVnaW5zIiwwKSgxLCJyZWxvYWRlciIpfSxkZXBlbmRlbmNpZXM6W2VOLFVnZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZmxleDogMSAxO1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksamdlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGI2PSJzbW9vdGhpbmciLHg2PSJydW5Db2xvckdyb3VwIixDNj0idGFnRmlsdGVyIixNNj0icnVuRmlsdGVyIix3Nj0icmVnZXg6IixuTj1jbGFzcyBleHRlbmRzIGpnZXtnZXRNZXRyaWNzUGlubmVkQ2FyZHModCl7cmV0dXJuIEx0KFt0LnNlbGVjdCh6TSksdC5zZWxlY3QodmVlKV0pLnBpcGUoTCgoW2UsaV0pPT57aWYoIWUubGVuZ3RoJiYhaS5sZW5ndGgpcmV0dXJuW107bGV0IG89Wy4uLmUubWFwKCh7cGx1Z2luOnMsdGFnOmEsc2FtcGxlOmwscnVuSWQ6Y30pPT57bGV0IHU9e3BsdWdpbjpzLHRhZzphfTtyZXR1cm4gbWwocykmJih1LnJ1bklkPWMpLGZsKHMpJiYodS5zYW1wbGU9bCksdX0pLC4uLmldO3JldHVyblt7a2V5OiJwaW5uZWRDYXJkcyIsdmFsdWU6SlNPTi5zdHJpbmdpZnkobyl9XX0pKX1zZXJpYWxpemVTdGF0ZVRvUXVlcnlQYXJhbXModCl7cmV0dXJuIEx0KFt0aGlzLmdldE1ldHJpY3NQaW5uZWRDYXJkcyh0KSx0LnNlbGVjdChYYykucGlwZShMKGU9PmU/W3trZXk6QzYsdmFsdWU6ZX1dOltdKSksTHQoW3Quc2VsZWN0KHpBKSx0LnNlbGVjdChIbSldKS5waXBlKEwoKFtlLGldKT0+ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmVudHJpZXMobikubWFwKChbZSxpXSk9PntpZih2b2lkIDA9PT1pKXJldHVybnt9O2xldCByPXRbZV07cmV0dXJuIHImJnIucXVlcnlQYXJhbU92ZXJyaWRlP3trZXk6ci5xdWVyeVBhcmFtT3ZlcnJpZGUsdmFsdWU6aT8udG9TdHJpbmcoKX06e319KS5maWx0ZXIoKHtrZXk6ZSx2YWx1ZTppfSk9PmUmJnZvaWQgMCE9PWkpfShlLGkpKSksdC5zZWxlY3QoYmVlKS5waXBlKEwoZT0+TnVtYmVyLmlzRmluaXRlKGUuc2NhbGFyU21vb3RoaW5nKT9be2tleTpiNix2YWx1ZTpTdHJpbmcoZS5zY2FsYXJTbW9vdGhpbmcpfV06W10pKSx0LnNlbGVjdChySCkucGlwZShMKGU9PntpZighZSlyZXR1cm5bXTtsZXQgaTtzd2l0Y2goZS5rZXkpe2Nhc2Ugc3IuRVhQRVJJTUVOVDppPSJleHBlcmltZW50IjticmVhaztjYXNlIHNyLlJVTjppPSJydW4iO2JyZWFrO2Nhc2Ugc3IuUkVHRVg6aT1gJHt3Nn0ke2UucmVnZXhTdHJpbmd9YDticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKCJTZXJpYWxpemF0aW9uIG5vdCBpbXBsZW1lbnRlZCIpfXJldHVyblt7a2V5Ong2LHZhbHVlOml9XX0pKSx0LnNlbGVjdChRbSkucGlwZShMKGU9PmU/W3trZXk6TTYsdmFsdWU6ZX1dOltdKSldKS5waXBlKEwoZT0+ZS5mbGF0KCkpKX1kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKHQpe2xldCBlPW51bGwsaT1udWxsLHI9bnVsbCxvPW51bGwscz1udWxsO2ZvcihsZXR7a2V5OmEsdmFsdWU6bH1vZiB0KXN3aXRjaChhKXtjYXNlInBpbm5lZENhcmRzIjplPXZudChsKTticmVhaztjYXNlIGI2Omk9TnVtYmVyKGwpO2JyZWFrO2Nhc2UgeDY6c3dpdGNoKGwpe2Nhc2UiZXhwZXJpbWVudCI6bz17a2V5OnNyLkVYUEVSSU1FTlR9O2JyZWFrO2Nhc2UicnVuIjpvPXtrZXk6c3IuUlVOfX1pZihsLnN0YXJ0c1dpdGgodzYpKXtsZXQgYz1sLnNsaWNlKHc2Lmxlbmd0aCk7bz17a2V5OnNyLlJFR0VYLHJlZ2V4U3RyaW5nOmN9fWJyZWFrO2Nhc2UgQzY6cj1sO2JyZWFrO2Nhc2UgTTY6cz1sfXJldHVybnttZXRyaWNzOntwaW5uZWRDYXJkczplfHxbXSxzbW9vdGhpbmc6aSx0YWdGaWx0ZXI6cn0scnVuczp7Z3JvdXBCeTpvLHJlZ2V4RmlsdGVyOnN9fX19O2Z1bmN0aW9uIHZudChuKXtsZXQgdDt0cnl7dD1KU09OLnBhcnNlKG4pfWNhdGNoe3JldHVybiBudWxsfWlmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBudWxsO2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KXtsZXQgbz0ic3RyaW5nIj09dHlwZW9mIGkucnVuSWQscz0ibnVtYmVyIj09dHlwZW9mIGkuc2FtcGxlLGE9InN0cmluZyI9PXR5cGVvZiBpLnRhZyxsPW98fHR5cGVvZiBpLnJ1bklkPiJ1IixjPXN8fHR5cGVvZiBpLnNhbXBsZT4idSI7aWYoISgic3RyaW5nIj09dHlwZW9mIGkucGx1Z2luJiZhJiZsJiZjJiZYJChpLnBsdWdpbikmJmkudGFnKSljb250aW51ZTtpZihtbChpLnBsdWdpbikpe2lmKCFpLnJ1bklkKWNvbnRpbnVlfWVsc2UgaWYoaS5ydW5JZCljb250aW51ZTtpZihzJiYoIWZsKGkucGx1Z2luKXx8IU51bWJlci5pc0ludGVnZXIoaS5zYW1wbGUpfHxpLnNhbXBsZTwwKSljb250aW51ZTtsZXQgdT17cGx1Z2luOmkucGx1Z2luLHRhZzppLnRhZ307byYmKHUucnVuSWQ9aS5ydW5JZCkscyYmKHUuc2FtcGxlPWkuc2FtcGxlKSxlLnB1c2godSl9cmV0dXJuIGV9ZnVuY3Rpb24gV2dlKCl7cmV0dXJuW3tyb3V0ZUtpbmQ6aGkuRVhQRVJJTUVOVCxwYXRoOiIvIixuZ0NvbXBvbmVudDp6Z2UsZGVmYXVsdFJvdXRlOiEwLGRlZXBMaW5rUHJvdmlkZXI6bmV3IG5OfSx7cm91dGVLaW5kOmhpLkZMQUdTLHBhdGg6Ii9mbGFncy8iLG5nQ29tcG9uZW50OlcyfV19ZnVuY3Rpb24geW50KG4pe3JldHVybih0LGUpPT57bGV0IGk9bih0LGUpO3JldHVybiBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKGUudHlwZSksY29uc29sZS5sb2coInByZXYgc3RhdGUiLHQpLGNvbnNvbGUubG9nKCJhY3Rpb24iLGUpLGNvbnNvbGUubG9nKCJuZXh0IHN0YXRlIixpKSxjb25zb2xlLmdyb3VwRW5kKCksaX19ZnVuY3Rpb24gcWdlKCl7cmV0dXJuIHRDKCk/eW50Om49Pih0LGUpPT5uKHQsZSl9bk49cFcoW3JxKCldLG5OKTt2YXIgWWdlPW5ldyBwZSgiUm9vdCByZWR1Y2VycyB0b2tlbiIse2ZhY3Rvcnk6KCk9Pih7fSl9KSxYZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6V18sdXNlRmFjdG9yeTpxZ2UsbXVsdGk6ITB9XSxpbXBvcnRzOlt3ci5mb3JSb290KFlnZSx7cnVudGltZUNoZWNrczp7c3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiEwLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMX19KSxyby5mb3JSb290KFtdKV19KSxufSkoKSxRZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLEtnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsdE4sUWdlXX0pLG59KSgpLFM2PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm4sYm9vdHN0cmFwOltVaWVdfSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbY3YsWmllLHRBLGVKLEpfLHppZSxxYy5yZWdpc3RlclJvdXRlcyhXZ2UpLEUyLFMyLGppZSxLZ2UsZWMsUWllLFdpZSxlcmUsbUksdHJlLHFpZSxUNCxyMix0TiwkSSwkMixYZ2UsVmdlXX0pLG59KSgpOyJsb2FkaW5nIiE9PWRvY3VtZW50LnJlYWR5U3RhdGU/eTUoKS5ib290c3RyYXBNb2R1bGUoUzYpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwoKT0+e3k1KCkuYm9vdHN0cmFwTW9kdWxlKFM2KX0pLGZ1bmN0aW9uKCl7aWYoYVgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5hYmxlIHByb2QgbW9kZSBhZnRlciBwbGF0Zm9ybSBzZXR1cC4iKTtzWD0hMX0oKX0pKCk7Ci8qKiB2aW06IGV0OnRzPTQ6c3c9NDpzdHM9NAogKiBAbGljZW5zZSBSZXF1aXJlSlMgMi4zLjYgQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMuCiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLCBodHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9ibG9iL21hc3Rlci9MSUNFTlNFCiAqLwovL05vdCB1c2luZyBzdHJpY3Q6IHVuZXZlbiBzdHJpY3Qgc3VwcG9ydCBpbiBicm93c2VycywgIzM5MiwgYW5kIGNhdXNlcwovL3Byb2JsZW1zIHdpdGggcmVxdWlyZWpzLmV4ZWMoKS90cmFuc3BpbGVyIHBsdWdpbnMgdGhhdCBtYXkgbm90IGJlIHN0cmljdC4KLypqc2xpbnQgcmVnZXhwOiB0cnVlLCBub21lbjogdHJ1ZSwgc2xvcHB5OiB0cnVlICovCi8qZ2xvYmFsIHdpbmRvdywgbmF2aWdhdG9yLCBkb2N1bWVudCwgaW1wb3J0U2NyaXB0cywgc2V0VGltZW91dCwgb3BlcmEgKi8KCnZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmluZTsKKGZ1bmN0aW9uIChnbG9iYWwsIHNldFRpbWVvdXQpIHsKICAgIHZhciByZXEsIHMsIGhlYWQsIGJhc2VFbGVtZW50LCBkYXRhTWFpbiwgc3JjLAogICAgICAgIGludGVyYWN0aXZlU2NyaXB0LCBjdXJyZW50bHlBZGRpbmdTY3JpcHQsIG1haW5TY3JpcHQsIHN1YlBhdGgsCiAgICAgICAgdmVyc2lvbiA9ICcyLjMuNicsCiAgICAgICAgY29tbWVudFJlZ0V4cCA9IC9cL1wqW1xzXFNdKj9cKlwvfChbXjoiJz1dfF4pXC9cLy4qJC9tZywKICAgICAgICBjanNSZXF1aXJlUmVnRXhwID0gL1teLl1ccypyZXF1aXJlXHMqXChccypbIiddKFteJyJcc10rKVsiJ11ccypcKS9nLAogICAgICAgIGpzU3VmZml4UmVnRXhwID0gL1wuanMkLywKICAgICAgICBjdXJyRGlyUmVnRXhwID0gL15cLlwvLywKICAgICAgICBvcCA9IE9iamVjdC5wcm90b3R5cGUsCiAgICAgICAgb3N0cmluZyA9IG9wLnRvU3RyaW5nLAogICAgICAgIGhhc093biA9IG9wLmhhc093blByb3BlcnR5LAogICAgICAgIGlzQnJvd3NlciA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCksCiAgICAgICAgaXNXZWJXb3JrZXIgPSAhaXNCcm93c2VyICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJywKICAgICAgICAvL1BTMyBpbmRpY2F0ZXMgbG9hZGVkIGFuZCBjb21wbGV0ZSwgYnV0IG5lZWQgdG8gd2FpdCBmb3IgY29tcGxldGUKICAgICAgICAvL3NwZWNpZmljYWxseS4gU2VxdWVuY2UgaXMgJ2xvYWRpbmcnLCAnbG9hZGVkJywgZXhlY3V0aW9uLAogICAgICAgIC8vIHRoZW4gJ2NvbXBsZXRlJy4gVGhlIFVBIGNoZWNrIGlzIHVuZm9ydHVuYXRlLCBidXQgbm90IHN1cmUgaG93CiAgICAgICAgLy90byBmZWF0dXJlIHRlc3Qgdy9vIGNhdXNpbmcgcGVyZiBpc3N1ZXMuCiAgICAgICAgcmVhZHlSZWdFeHAgPSBpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnBsYXRmb3JtID09PSAnUExBWVNUQVRJT04gMycgPwogICAgICAgICAgICAgICAgICAgICAgL15jb21wbGV0ZSQvIDogL14oY29tcGxldGV8bG9hZGVkKSQvLAogICAgICAgIGRlZkNvbnRleHROYW1lID0gJ18nLAogICAgICAgIC8vT2ggdGhlIHRyYWdlZHksIGRldGVjdGluZyBvcGVyYS4gU2VlIHRoZSB1c2FnZSBvZiBpc09wZXJhIGZvciByZWFzb24uCiAgICAgICAgaXNPcGVyYSA9IHR5cGVvZiBvcGVyYSAhPT0gJ3VuZGVmaW5lZCcgJiYgb3BlcmEudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgT3BlcmFdJywKICAgICAgICBjb250ZXh0cyA9IHt9LAogICAgICAgIGNmZyA9IHt9LAogICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW10sCiAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKCiAgICAvL0NvdWxkIG1hdGNoIHNvbWV0aGluZyBsaWtlICcpLy9jb21tZW50JywgZG8gbm90IGxvc2UgdGhlIHByZWZpeCB0byBjb21tZW50LgogICAgZnVuY3Rpb24gY29tbWVudFJlcGxhY2UobWF0Y2gsIHNpbmdsZVByZWZpeCkgewogICAgICAgIHJldHVybiBzaW5nbGVQcmVmaXggfHwgJyc7CiAgICB9CgogICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpdCkgewogICAgICAgIHJldHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzQXJyYXkoaXQpIHsKICAgICAgICByZXR1cm4gb3N0cmluZy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKICAgIH0KCiAgICAvKioKICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5nIG92ZXIgYW4gYXJyYXkuIElmIHRoZSBmdW5jIHJldHVybnMKICAgICAqIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2goYXJ5LCBmdW5jKSB7CiAgICAgICAgaWYgKGFyeSkgewogICAgICAgICAgICB2YXIgaTsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyeS5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheSBiYWNrd2FyZHMuIElmIHRoZSBmdW5jCiAgICAgKiByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2hSZXZlcnNlKGFyeSwgZnVuYykgewogICAgICAgIGlmIChhcnkpIHsKICAgICAgICAgICAgdmFyIGk7CiAgICAgICAgICAgIGZvciAoaSA9IGFyeS5sZW5ndGggLSAxOyBpID4gLTE7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGhhc1Byb3Aob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwgcHJvcCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0T3duKG9iaiwgcHJvcCkgewogICAgICAgIHJldHVybiBoYXNQcm9wKG9iaiwgcHJvcCkgJiYgb2JqW3Byb3BdOwogICAgfQoKICAgIC8qKgogICAgICogQ3ljbGVzIG92ZXIgcHJvcGVydGllcyBpbiBhbiBvYmplY3QgYW5kIGNhbGxzIGEgZnVuY3Rpb24gZm9yIGVhY2gKICAgICAqIHByb3BlcnR5IHZhbHVlLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHRydXRoeSB2YWx1ZSwgdGhlbiB0aGUKICAgICAqIGl0ZXJhdGlvbiBpcyBzdG9wcGVkLgogICAgICovCiAgICBmdW5jdGlvbiBlYWNoUHJvcChvYmosIGZ1bmMpIHsKICAgICAgICB2YXIgcHJvcDsKICAgICAgICBmb3IgKHByb3AgaW4gb2JqKSB7CiAgICAgICAgICAgIGlmIChoYXNQcm9wKG9iaiwgcHJvcCkpIHsKICAgICAgICAgICAgICAgIGlmIChmdW5jKG9ialtwcm9wXSwgcHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNpbXBsZSBmdW5jdGlvbiB0byBtaXggaW4gcHJvcGVydGllcyBmcm9tIHNvdXJjZSBpbnRvIHRhcmdldCwKICAgICAqIGJ1dCBvbmx5IGlmIHRhcmdldCBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYSBwcm9wZXJ0eSBvZiB0aGUgc2FtZSBuYW1lLgogICAgICovCiAgICBmdW5jdGlvbiBtaXhpbih0YXJnZXQsIHNvdXJjZSwgZm9yY2UsIGRlZXBTdHJpbmdNaXhpbikgewogICAgICAgIGlmIChzb3VyY2UpIHsKICAgICAgICAgICAgZWFjaFByb3Aoc291cmNlLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZSB8fCAhaGFzUHJvcCh0YXJnZXQsIHByb3ApKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZXBTdHJpbmdNaXhpbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmCiAgICAgICAgICAgICAgICAgICAgICAgICFpc0FycmF5KHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0W3Byb3BdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtaXhpbih0YXJnZXRbcHJvcF0sIHZhbHVlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAgfQoKICAgIC8vU2ltaWxhciB0byBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgYnV0IHRoZSAndGhpcycgb2JqZWN0IGlzIHNwZWNpZmllZAogICAgLy9maXJzdCwgc2luY2UgaXQgaXMgZWFzaWVyIHRvIHJlYWQvZmlndXJlIG91dCB3aGF0ICd0aGlzJyB3aWxsIGJlLgogICAgZnVuY3Rpb24gYmluZChvYmosIGZuKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG9iaiwgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIHNjcmlwdHMoKSB7CiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZWZhdWx0T25FcnJvcihlcnIpIHsKICAgICAgICB0aHJvdyBlcnI7CiAgICB9CgogICAgLy9BbGxvdyBnZXR0aW5nIGEgZ2xvYmFsIHRoYXQgaXMgZXhwcmVzc2VkIGluCiAgICAvL2RvdCBub3RhdGlvbiwgbGlrZSAnYS5iLmMnLgogICAgZnVuY3Rpb24gZ2V0R2xvYmFsKHZhbHVlKSB7CiAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfQogICAgICAgIHZhciBnID0gZ2xvYmFsOwogICAgICAgIGVhY2godmFsdWUuc3BsaXQoJy4nKSwgZnVuY3Rpb24gKHBhcnQpIHsKICAgICAgICAgICAgZyA9IGdbcGFydF07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGc7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGFuIGVycm9yIHdpdGggYSBwb2ludGVyIHRvIGFuIFVSTCB3aXRoIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGVycm9yIElEIHRoYXQgbWFwcyB0byBhbiBJRCBvbiBhIHdlYiBwYWdlLgogICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgaHVtYW4gcmVhZGFibGUgZXJyb3IuCiAgICAgKiBAcGFyYW0ge0Vycm9yfSBbZXJyXSB0aGUgb3JpZ2luYWwgZXJyb3IsIGlmIHRoZXJlIGlzIG9uZS4KICAgICAqCiAgICAgKiBAcmV0dXJucyB7RXJyb3J9CiAgICAgKi8KICAgIGZ1bmN0aW9uIG1ha2VFcnJvcihpZCwgbXNnLCBlcnIsIHJlcXVpcmVNb2R1bGVzKSB7CiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IobXNnICsgJ1xuaHR0cHM6Ly9yZXF1aXJlanMub3JnL2RvY3MvZXJyb3JzLmh0bWwjJyArIGlkKTsKICAgICAgICBlLnJlcXVpcmVUeXBlID0gaWQ7CiAgICAgICAgZS5yZXF1aXJlTW9kdWxlcyA9IHJlcXVpcmVNb2R1bGVzOwogICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgZS5vcmlnaW5hbEVycm9yID0gZXJyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZTsKICAgIH0KCiAgICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAvL0lmIGEgZGVmaW5lIGlzIGFscmVhZHkgaW4gcGxheSB2aWEgYW5vdGhlciBBTUQgbG9hZGVyLAogICAgICAgIC8vZG8gbm90IG92ZXJ3cml0ZS4KICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHR5cGVvZiByZXF1aXJlanMgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVxdWlyZWpzKSkgewogICAgICAgICAgICAvL0RvIG5vdCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgcmVxdWlyZWpzIGluc3RhbmNlLgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNmZyA9IHJlcXVpcmVqczsKICAgICAgICByZXF1aXJlanMgPSB1bmRlZmluZWQ7CiAgICB9CgogICAgLy9BbGxvdyBmb3IgYSByZXF1aXJlIGNvbmZpZyBvYmplY3QKICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRnVuY3Rpb24ocmVxdWlyZSkpIHsKICAgICAgICAvL2Fzc3VtZSBpdCBpcyBhIGNvbmZpZyBvYmplY3QuCiAgICAgICAgY2ZnID0gcmVxdWlyZTsKICAgICAgICByZXF1aXJlID0gdW5kZWZpbmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIG5ld0NvbnRleHQoY29udGV4dE5hbWUpIHsKICAgICAgICB2YXIgaW5DaGVja0xvYWRlZCwgTW9kdWxlLCBjb250ZXh0LCBoYW5kbGVycywKICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQsCiAgICAgICAgICAgIGNvbmZpZyA9IHsKICAgICAgICAgICAgICAgIC8vRGVmYXVsdHMuIERvIG5vdCBzZXQgYSBkZWZhdWx0IGZvciBtYXAKICAgICAgICAgICAgICAgIC8vY29uZmlnIHRvIHNwZWVkIHVwIG5vcm1hbGl6ZSgpLCB3aGljaAogICAgICAgICAgICAgICAgLy93aWxsIHJ1biBmYXN0ZXIgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KICAgICAgICAgICAgICAgIHdhaXRTZWNvbmRzOiA3LAogICAgICAgICAgICAgICAgYmFzZVVybDogJy4vJywKICAgICAgICAgICAgICAgIHBhdGhzOiB7fSwKICAgICAgICAgICAgICAgIGJ1bmRsZXM6IHt9LAogICAgICAgICAgICAgICAgcGtnczoge30sCiAgICAgICAgICAgICAgICBzaGltOiB7fSwKICAgICAgICAgICAgICAgIGNvbmZpZzoge30KICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnaXN0cnkgPSB7fSwKICAgICAgICAgICAgLy9yZWdpc3RyeSBvZiBqdXN0IGVuYWJsZWQgbW9kdWxlcywgdG8gc3BlZWQKICAgICAgICAgICAgLy9jeWNsZSBicmVha2luZyBjb2RlIHdoZW4gbG90cyBvZiBtb2R1bGVzCiAgICAgICAgICAgIC8vYXJlIHJlZ2lzdGVyZWQsIGJ1dCBub3QgYWN0aXZhdGVkLgogICAgICAgICAgICBlbmFibGVkUmVnaXN0cnkgPSB7fSwKICAgICAgICAgICAgdW5kZWZFdmVudHMgPSB7fSwKICAgICAgICAgICAgZGVmUXVldWUgPSBbXSwKICAgICAgICAgICAgZGVmaW5lZCA9IHt9LAogICAgICAgICAgICB1cmxGZXRjaGVkID0ge30sCiAgICAgICAgICAgIGJ1bmRsZXNNYXAgPSB7fSwKICAgICAgICAgICAgcmVxdWlyZUNvdW50ZXIgPSAxLAogICAgICAgICAgICB1bm5vcm1hbGl6ZWRDb3VudGVyID0gMTsKCiAgICAgICAgLyoqCiAgICAgICAgICogVHJpbXMgdGhlIC4gYW5kIC4uIGZyb20gYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KICAgICAgICAgKiBJdCB3aWxsIGtlZXAgYSBsZWFkaW5nIHBhdGggc2VnbWVudCBpZiBhIC4uIHdpbGwgYmVjb21lCiAgICAgICAgICogdGhlIGZpcnN0IHBhdGggc2VnbWVudCwgdG8gaGVscCB3aXRoIG1vZHVsZSBuYW1lIGxvb2t1cHMsCiAgICAgICAgICogd2hpY2ggYWN0IGxpa2UgcGF0aHMsIGJ1dCBjYW4gYmUgcmVtYXBwZWQuIEJ1dCB0aGUgZW5kIHJlc3VsdCwKICAgICAgICAgKiBhbGwgcGF0aHMgdGhhdCB1c2UgdGhpcyBmdW5jdGlvbiBzaG91bGQgbG9vayBub3JtYWxpemVkLgogICAgICAgICAqIE5PVEU6IHRoaXMgbWV0aG9kIE1PRElGSUVTIHRoZSBpbnB1dCBhcnJheS4KICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnkgdGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gdHJpbURvdHMoYXJ5KSB7CiAgICAgICAgICAgIHZhciBpLCBwYXJ0OwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBwYXJ0ID0gYXJ5W2ldOwogICAgICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcuJykgewogICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgICAgICAgaSAtPSAxOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYXQgdGhlIHN0YXJ0LCBvciBwcmV2aW91cyB2YWx1ZSBpcyBzdGlsbCAuLiwKICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoZW0gc28gdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGggaXQgbWF5CiAgICAgICAgICAgICAgICAgICAgLy8gc3RpbGwgd29yayB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGgsIGV2ZW4gdGhvdWdoCiAgICAgICAgICAgICAgICAgICAgLy8gYXMgYW4gSUQgaXQgaXMgbGVzcyB0aGFuIGlkZWFsLiBJbiBsYXJnZXIgcG9pbnQKICAgICAgICAgICAgICAgICAgICAvLyByZWxlYXNlcywgbWF5IGJlIGJldHRlciB0byBqdXN0IGtpY2sgb3V0IGFuIGVycm9yLgogICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwIHx8IChpID09PSAxICYmIGFyeVsyXSA9PT0gJy4uJykgfHwgYXJ5W2kgLSAxXSA9PT0gJy4uJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSAtIDEsIDIpOwogICAgICAgICAgICAgICAgICAgICAgICBpIC09IDI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBHaXZlbiBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lLCBsaWtlIC4vc29tZXRoaW5nLCBub3JtYWxpemUgaXQgdG8KICAgICAgICAgKiBhIHJlYWwgbmFtZSB0aGF0IGNhbiBiZSBtYXBwZWQgdG8gYSBwYXRoLgogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSByZWxhdGl2ZSBuYW1lCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGJhc2VOYW1lIGEgcmVhbCBuYW1lIHRoYXQgdGhlIG5hbWUgYXJnIGlzIHJlbGF0aXZlCiAgICAgICAgICogdG8uCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBhcHBseU1hcCBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgdmFsdWUuIFNob3VsZAogICAgICAgICAqIG9ubHkgYmUgZG9uZSBpZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgZm9yIGEgZGVwZW5kZW5jeSBJRC4KICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBub3JtYWxpemVkIG5hbWUKICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUsIGFwcGx5TWFwKSB7CiAgICAgICAgICAgIHZhciBwa2dNYWluLCBtYXBWYWx1ZSwgbmFtZVBhcnRzLCBpLCBqLCBuYW1lU2VnbWVudCwgbGFzdEluZGV4LAogICAgICAgICAgICAgICAgZm91bmRNYXAsIGZvdW5kSSwgZm91bmRTdGFyTWFwLCBzdGFySSwgbm9ybWFsaXplZEJhc2VQYXJ0cywKICAgICAgICAgICAgICAgIGJhc2VQYXJ0cyA9IChiYXNlTmFtZSAmJiBiYXNlTmFtZS5zcGxpdCgnLycpKSwKICAgICAgICAgICAgICAgIG1hcCA9IGNvbmZpZy5tYXAsCiAgICAgICAgICAgICAgICBzdGFyTWFwID0gbWFwICYmIG1hcFsnKiddOwoKICAgICAgICAgICAgLy9BZGp1c3QgYW55IHJlbGF0aXZlIHBhdGhzLgogICAgICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IG5hbWUubGVuZ3RoIC0gMTsKCiAgICAgICAgICAgICAgICAvLyBJZiB3YW50aW5nIG5vZGUgSUQgY29tcGF0aWJpbGl0eSwgc3RyaXAgLmpzIGZyb20gZW5kCiAgICAgICAgICAgICAgICAvLyBvZiBJRHMuIEhhdmUgdG8gZG8gdGhpcyBoZXJlLCBhbmQgbm90IGluIG5hbWVUb1VybAogICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBub2RlIGFsbG93cyBlaXRoZXIgLmpzIG9yIG5vbiAuanMgdG8gbWFwCiAgICAgICAgICAgICAgICAvLyB0byBzYW1lIGZpbGUuCiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLm5vZGVJZENvbXBhdCAmJiBqc1N1ZmZpeFJlZ0V4cC50ZXN0KG5hbWVbbGFzdEluZGV4XSkpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lW2xhc3RJbmRleF0gPSBuYW1lW2xhc3RJbmRleF0ucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFN0YXJ0cyB3aXRoIGEgJy4nIHNvIG5lZWQgdGhlIGJhc2VOYW1lCiAgICAgICAgICAgICAgICBpZiAobmFtZVswXS5jaGFyQXQoMCkgPT09ICcuJyAmJiBiYXNlUGFydHMpIHsKICAgICAgICAgICAgICAgICAgICAvL0NvbnZlcnQgYmFzZU5hbWUgdG8gYXJyYXksIGFuZCBsb3Agb2ZmIHRoZSBsYXN0IHBhcnQsCiAgICAgICAgICAgICAgICAgICAgLy9zbyB0aGF0IC4gbWF0Y2hlcyB0aGF0ICdkaXJlY3RvcnknIGFuZCBub3QgbmFtZSBvZiB0aGUgYmFzZU5hbWUncwogICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlLiBGb3IgaW5zdGFuY2UsIGJhc2VOYW1lIG9mICdvbmUvdHdvL3RocmVlJywgbWFwcyB0bwogICAgICAgICAgICAgICAgICAgIC8vJ29uZS90d28vdGhyZWUuanMnLCBidXQgd2Ugd2FudCB0aGUgZGlyZWN0b3J5LCAnb25lL3R3bycgZm9yCiAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5vcm1hbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZEJhc2VQYXJ0cyA9IGJhc2VQYXJ0cy5zbGljZSgwLCBiYXNlUGFydHMubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vcm1hbGl6ZWRCYXNlUGFydHMuY29uY2F0KG5hbWUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRyaW1Eb3RzKG5hbWUpOwogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuam9pbignLycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0FwcGx5IG1hcCBjb25maWcgaWYgYXZhaWxhYmxlLgogICAgICAgICAgICBpZiAoYXBwbHlNYXAgJiYgbWFwICYmIChiYXNlUGFydHMgfHwgc3Rhck1hcCkpIHsKICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IG5hbWUuc3BsaXQoJy8nKTsKCiAgICAgICAgICAgICAgICBvdXRlckxvb3A6IGZvciAoaSA9IG5hbWVQYXJ0cy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lU2VnbWVudCA9IG5hbWVQYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7CgogICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGFydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9GaW5kIHRoZSBsb25nZXN0IGJhc2VOYW1lIHNlZ21lbnQgbWF0Y2ggaW4gdGhlIGNvbmZpZy4KICAgICAgICAgICAgICAgICAgICAgICAgLy9TbywgZG8gam9pbnMgb24gdGhlIGJpZ2dlc3QgdG8gc21hbGxlc3QgbGVuZ3RocyBvZiBiYXNlUGFydHMuCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGJhc2VQYXJ0cy5sZW5ndGg7IGogPiAwOyBqIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFZhbHVlID0gZ2V0T3duKG1hcCwgYmFzZVBhcnRzLnNsaWNlKDAsIGopLmpvaW4oJy8nKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iYXNlTmFtZSBzZWdtZW50IGhhcyBjb25maWcsIGZpbmQgaWYgaXQgaGFzIG9uZSBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwVmFsdWUsIG5hbWVTZWdtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXRjaCwgdXBkYXRlIG5hbWUgdG8gdGhlIG5ldyB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBtYXBWYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXJMb29wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9DaGVjayBmb3IgYSBzdGFyIG1hcCBtYXRjaCwgYnV0IGp1c3QgaG9sZCBvbiB0byBpdCwKICAgICAgICAgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGEgc2hvcnRlciBzZWdtZW50IG1hdGNoIGxhdGVyIGluIGEgbWF0Y2hpbmcKICAgICAgICAgICAgICAgICAgICAvL2NvbmZpZywgdGhlbiBmYXZvciBvdmVyIHRoaXMgc3RhciBtYXAuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZFN0YXJNYXAgJiYgc3Rhck1hcCAmJiBnZXRPd24oc3Rhck1hcCwgbmFtZVNlZ21lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kU3Rhck1hcCA9IGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJJID0gaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFmb3VuZE1hcCAmJiBmb3VuZFN0YXJNYXApIHsKICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IGZvdW5kU3Rhck1hcDsKICAgICAgICAgICAgICAgICAgICBmb3VuZEkgPSBzdGFySTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZm91bmRNYXApIHsKICAgICAgICAgICAgICAgICAgICBuYW1lUGFydHMuc3BsaWNlKDAsIGZvdW5kSSwgZm91bmRNYXApOwogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHMuam9pbignLycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgbmFtZSBwb2ludHMgdG8gYSBwYWNrYWdlJ3MgbmFtZSwgdXNlCiAgICAgICAgICAgIC8vIHRoZSBwYWNrYWdlIG1haW4gaW5zdGVhZC4KICAgICAgICAgICAgcGtnTWFpbiA9IGdldE93bihjb25maWcucGtncywgbmFtZSk7CgogICAgICAgICAgICByZXR1cm4gcGtnTWFpbiA/IHBrZ01haW4gOiBuYW1lOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlU2NyaXB0KG5hbWUpIHsKICAgICAgICAgICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgICAgICAgICAgZWFjaChzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHROb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKSA9PT0gbmFtZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnKSA9PT0gY29udGV4dC5jb250ZXh0TmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHROb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBoYXNQYXRoRmFsbGJhY2soaWQpIHsKICAgICAgICAgICAgdmFyIHBhdGhDb25maWcgPSBnZXRPd24oY29uZmlnLnBhdGhzLCBpZCk7CiAgICAgICAgICAgIGlmIChwYXRoQ29uZmlnICYmIGlzQXJyYXkocGF0aENvbmZpZykgJiYgcGF0aENvbmZpZy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICAvL1BvcCBvZmYgdGhlIGZpcnN0IGFycmF5IHZhbHVlLCBzaW5jZSBpdCBmYWlsZWQsIGFuZAogICAgICAgICAgICAgICAgLy9yZXRyeQogICAgICAgICAgICAgICAgcGF0aENvbmZpZy5zaGlmdCgpOwogICAgICAgICAgICAgICAgY29udGV4dC5yZXF1aXJlLnVuZGVmKGlkKTsKCiAgICAgICAgICAgICAgICAvL0N1c3RvbSByZXF1aXJlIHRoYXQgZG9lcyBub3QgZG8gbWFwIHRyYW5zbGF0aW9uLCBzaW5jZQogICAgICAgICAgICAgICAgLy9JRCBpcyAiYWJzb2x1dGUiLCBhbHJlYWR5IG1hcHBlZC9yZXNvbHZlZC4KICAgICAgICAgICAgICAgIGNvbnRleHQubWFrZVJlcXVpcmUobnVsbCwgewogICAgICAgICAgICAgICAgICAgIHNraXBNYXA6IHRydWUKICAgICAgICAgICAgICAgIH0pKFtpZF0pOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvL1R1cm5zIGEgcGx1Z2luIXJlc291cmNlIHRvIFtwbHVnaW4sIHJlc291cmNlXQogICAgICAgIC8vd2l0aCB0aGUgcGx1Z2luIGJlaW5nIHVuZGVmaW5lZCBpZiB0aGUgbmFtZQogICAgICAgIC8vZGlkIG5vdCBoYXZlIGEgcGx1Z2luIHByZWZpeC4KICAgICAgICBmdW5jdGlvbiBzcGxpdFByZWZpeChuYW1lKSB7CiAgICAgICAgICAgIHZhciBwcmVmaXgsCiAgICAgICAgICAgICAgICBpbmRleCA9IG5hbWUgPyBuYW1lLmluZGV4T2YoJyEnKSA6IC0xOwogICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgewogICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSwgbmFtZS5sZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbcHJlZml4LCBuYW1lXTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZXMgYSBtb2R1bGUgbWFwcGluZyB0aGF0IGluY2x1ZGVzIHBsdWdpbiBwcmVmaXgsIG1vZHVsZQogICAgICAgICAqIG5hbWUsIGFuZCBwYXRoLiBJZiBwYXJlbnRNb2R1bGVNYXAgaXMgcHJvdmlkZWQgaXQgd2lsbAogICAgICAgICAqIGFsc28gbm9ybWFsaXplIHRoZSBuYW1lIHZpYSByZXF1aXJlLm5vcm1hbGl6ZSgpCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbW9kdWxlIG5hbWUKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmVudE1vZHVsZU1hcF0gcGFyZW50IG1vZHVsZSBtYXAKICAgICAgICAgKiBmb3IgdGhlIG1vZHVsZSBuYW1lLCB1c2VkIHRvIHJlc29sdmUgcmVsYXRpdmUgbmFtZXMuCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc05vcm1hbGl6ZWQ6IGlzIHRoZSBJRCBhbHJlYWR5IG5vcm1hbGl6ZWQuCiAgICAgICAgICogVGhpcyBpcyB0cnVlIGlmIHRoaXMgY2FsbCBpcyBkb25lIGZvciBhIGRlZmluZSgpIG1vZHVsZSBJRC4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwOiBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgSUQuCiAgICAgICAgICogU2hvdWxkIG9ubHkgYmUgdHJ1ZSBpZiB0aGlzIG1hcCBpcyBmb3IgYSBkZXBlbmRlbmN5LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybnMge09iamVjdH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBtYWtlTW9kdWxlTWFwKG5hbWUsIHBhcmVudE1vZHVsZU1hcCwgaXNOb3JtYWxpemVkLCBhcHBseU1hcCkgewogICAgICAgICAgICB2YXIgdXJsLCBwbHVnaW5Nb2R1bGUsIHN1ZmZpeCwgbmFtZVBhcnRzLAogICAgICAgICAgICAgICAgcHJlZml4ID0gbnVsbCwKICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnRNb2R1bGVNYXAgPyBwYXJlbnRNb2R1bGVNYXAubmFtZSA6IG51bGwsCiAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWUgPSBuYW1lLAogICAgICAgICAgICAgICAgaXNEZWZpbmUgPSB0cnVlLAogICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSAnJzsKCiAgICAgICAgICAgIC8vSWYgbm8gbmFtZSwgdGhlbiBpdCBtZWFucyBpdCBpcyBhIHJlcXVpcmUgY2FsbCwgZ2VuZXJhdGUgYW4KICAgICAgICAgICAgLy9pbnRlcm5hbCBuYW1lLgogICAgICAgICAgICBpZiAoIW5hbWUpIHsKICAgICAgICAgICAgICAgIGlzRGVmaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICBuYW1lID0gJ19AcicgKyAocmVxdWlyZUNvdW50ZXIgKz0gMSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5hbWUpOwogICAgICAgICAgICBwcmVmaXggPSBuYW1lUGFydHNbMF07CiAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHNbMV07CgogICAgICAgICAgICBpZiAocHJlZml4KSB7CiAgICAgICAgICAgICAgICBwcmVmaXggPSBub3JtYWxpemUocHJlZml4LCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CiAgICAgICAgICAgICAgICBwbHVnaW5Nb2R1bGUgPSBnZXRPd24oZGVmaW5lZCwgcHJlZml4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9BY2NvdW50IGZvciByZWxhdGl2ZSBwYXRocyBpZiB0aGVyZSBpcyBhIGJhc2UgbmFtZS4KICAgICAgICAgICAgaWYgKG5hbWUpIHsKICAgICAgICAgICAgICAgIGlmIChwcmVmaXgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBsdWdpbk1vZHVsZSAmJiBwbHVnaW5Nb2R1bGUubm9ybWFsaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vUGx1Z2luIGlzIGxvYWRlZCwgdXNlIGl0cyBub3JtYWxpemUgbWV0aG9kLgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IHBsdWdpbk1vZHVsZS5ub3JtYWxpemUobmFtZSwgZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBuZXN0ZWQgcGx1Z2luIHJlZmVyZW5jZXMsIHRoZW4gZG8gbm90IHRyeSB0bwogICAgICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWxpemUsIGFzIGl0IHdpbGwgbm90IG5vcm1hbGl6ZSBjb3JyZWN0bHkuIFRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGxhY2VzIGEgcmVzdHJpY3Rpb24gb24gcmVzb3VyY2VJZHMsIGFuZCB0aGUgbG9uZ2VyCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRlcm0gc29sdXRpb24gaXMgbm90IHRvIG5vcm1hbGl6ZSB1bnRpbCBwbHVnaW5zIGFyZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2FkZWQgYW5kIGFsbCBub3JtYWxpemF0aW9ucyB0byBhbGxvdyBmb3IgYXN5bmMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9hZGluZyBvZiBhIGxvYWRlciBwbHVnaW4uIEJ1dCBmb3Igbm93LCBmaXhlcyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tbW9uIHVzZXMuIERldGFpbHMgaW4gIzExMzEKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lLmluZGV4T2YoJyEnKSA9PT0gLTEgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL0EgcmVndWxhciBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwoKICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZWQgbmFtZSBtYXkgYmUgYSBwbHVnaW4gSUQgZHVlIHRvIG1hcCBjb25maWcKICAgICAgICAgICAgICAgICAgICAvL2FwcGxpY2F0aW9uIGluIG5vcm1hbGl6ZS4gVGhlIG1hcCBjb25maWcgdmFsdWVzIG11c3QKICAgICAgICAgICAgICAgICAgICAvL2FscmVhZHkgYmUgbm9ybWFsaXplZCwgc28gZG8gbm90IG5lZWQgdG8gcmVkbyB0aGF0IHBhcnQuCiAgICAgICAgICAgICAgICAgICAgbmFtZVBhcnRzID0gc3BsaXRQcmVmaXgobm9ybWFsaXplZE5hbWUpOwogICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWVQYXJ0c1sxXTsKICAgICAgICAgICAgICAgICAgICBpc05vcm1hbGl6ZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICB1cmwgPSBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemVkTmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vSWYgdGhlIGlkIGlzIGEgcGx1Z2luIGlkIHRoYXQgY2Fubm90IGJlIGRldGVybWluZWQgaWYgaXQgbmVlZHMKICAgICAgICAgICAgLy9ub3JtYWxpemF0aW9uLCBzdGFtcCBpdCB3aXRoIGEgdW5pcXVlIElEIHNvIHR3byBtYXRjaGluZyByZWxhdGl2ZQogICAgICAgICAgICAvL2lkcyB0aGF0IG1heSBjb25mbGljdCBjYW4gYmUgc2VwYXJhdGUuCiAgICAgICAgICAgIHN1ZmZpeCA9IHByZWZpeCAmJiAhcGx1Z2luTW9kdWxlICYmICFpc05vcm1hbGl6ZWQgPwogICAgICAgICAgICAgICAgICAgICAnX3Vubm9ybWFsaXplZCcgKyAodW5ub3JtYWxpemVkQ291bnRlciArPSAxKSA6CiAgICAgICAgICAgICAgICAgICAgICcnOwoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4LAogICAgICAgICAgICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsCiAgICAgICAgICAgICAgICBwYXJlbnRNYXA6IHBhcmVudE1vZHVsZU1hcCwKICAgICAgICAgICAgICAgIHVubm9ybWFsaXplZDogISFzdWZmaXgsCiAgICAgICAgICAgICAgICB1cmw6IHVybCwKICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1lLAogICAgICAgICAgICAgICAgaXNEZWZpbmU6IGlzRGVmaW5lLAogICAgICAgICAgICAgICAgaWQ6IChwcmVmaXggPwogICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyAnIScgKyBub3JtYWxpemVkTmFtZSA6CiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lKSArIHN1ZmZpeAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZ2V0TW9kdWxlKGRlcE1hcCkgewogICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgIGlmICghbW9kKSB7CiAgICAgICAgICAgICAgICBtb2QgPSByZWdpc3RyeVtpZF0gPSBuZXcgY29udGV4dC5Nb2R1bGUoZGVwTWFwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG1vZDsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIG9uKGRlcE1hcCwgbmFtZSwgZm4pIHsKICAgICAgICAgICAgdmFyIGlkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICBpZiAoaGFzUHJvcChkZWZpbmVkLCBpZCkgJiYKICAgICAgICAgICAgICAgICAgICAoIW1vZCB8fCBtb2QuZGVmaW5lRW1pdENvbXBsZXRlKSkgewogICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdkZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAgIGZuKGRlZmluZWRbaWRdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG1vZCA9IGdldE1vZHVsZShkZXBNYXApOwogICAgICAgICAgICAgICAgaWYgKG1vZC5lcnJvciAmJiBuYW1lID09PSAnZXJyb3InKSB7CiAgICAgICAgICAgICAgICAgICAgZm4obW9kLmVycm9yKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbW9kLm9uKG5hbWUsIGZuKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gb25FcnJvcihlcnIsIGVycmJhY2spIHsKICAgICAgICAgICAgdmFyIGlkcyA9IGVyci5yZXF1aXJlTW9kdWxlcywKICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gZmFsc2U7CgogICAgICAgICAgICBpZiAoZXJyYmFjaykgewogICAgICAgICAgICAgICAgZXJyYmFjayhlcnIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWFjaChpZHMsIGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vU2V0IGVycm9yIG9uIG1vZHVsZSwgc28gaXQgc2tpcHMgdGltZW91dCBjaGVja3MuCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5lcnJvciA9IGVycjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBpZiAoIW5vdGlmaWVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmVxLm9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIHRyYW5zZmVyIGdsb2JhbFF1ZXVlIGl0ZW1zIHRvIHRoaXMgY29udGV4dCdzCiAgICAgICAgICogZGVmUXVldWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gdGFrZUdsb2JhbFF1ZXVlKCkgewogICAgICAgICAgICAvL1B1c2ggYWxsIHRoZSBnbG9iYWxEZWZRdWV1ZSBpdGVtcyBpbnRvIHRoZSBjb250ZXh0J3MgZGVmUXVldWUKICAgICAgICAgICAgaWYgKGdsb2JhbERlZlF1ZXVlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgZWFjaChnbG9iYWxEZWZRdWV1ZSwgZnVuY3Rpb24ocXVldWVJdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gcXVldWVJdGVtWzBdOwogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXBbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVmUXVldWUucHVzaChxdWV1ZUl0ZW0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBnbG9iYWxEZWZRdWV1ZSA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBoYW5kbGVycyA9IHsKICAgICAgICAgICAgJ3JlcXVpcmUnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kLnJlcXVpcmUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLnJlcXVpcmU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLnJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1vZC5tYXApKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ2V4cG9ydHMnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBtb2QudXNpbmdFeHBvcnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlmIChtb2QubWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5leHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZGVmaW5lZFttb2QubWFwLmlkXSA9IG1vZC5leHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5leHBvcnRzID0gZGVmaW5lZFttb2QubWFwLmlkXSA9IHt9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdtb2R1bGUnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kLm1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QubW9kdWxlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5tb2R1bGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtb2QubWFwLmlkLAogICAgICAgICAgICAgICAgICAgICAgICB1cmk6IG1vZC5tYXAudXJsLAogICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRPd24oY29uZmlnLmNvbmZpZywgbW9kLm1hcC5pZCkgfHwge307CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHM6IG1vZC5leHBvcnRzIHx8IChtb2QuZXhwb3J0cyA9IHt9KQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gY2xlYW5SZWdpc3RyeShpZCkgewogICAgICAgICAgICAvL0NsZWFuIHVwIG1hY2hpbmVyeSB1c2VkIGZvciB3YWl0aW5nIG1vZHVsZXMuCiAgICAgICAgICAgIGRlbGV0ZSByZWdpc3RyeVtpZF07CiAgICAgICAgICAgIGRlbGV0ZSBlbmFibGVkUmVnaXN0cnlbaWRdOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gYnJlYWtDeWNsZShtb2QsIHRyYWNlZCwgcHJvY2Vzc2VkKSB7CiAgICAgICAgICAgIHZhciBpZCA9IG1vZC5tYXAuaWQ7CgogICAgICAgICAgICBpZiAobW9kLmVycm9yKSB7CiAgICAgICAgICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBtb2QuZXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdHJhY2VkW2lkXSA9IHRydWU7CiAgICAgICAgICAgICAgICBlYWNoKG1vZC5kZXBNYXBzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRlcElkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSBnZXRPd24ocmVnaXN0cnksIGRlcElkKTsKCiAgICAgICAgICAgICAgICAgICAgLy9Pbmx5IGZvcmNlIHRoaW5ncyB0aGF0IGhhdmUgbm90IGNvbXBsZXRlZAogICAgICAgICAgICAgICAgICAgIC8vYmVpbmcgZGVmaW5lZCwgc28gc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgICAgIC8vYW5kIG9ubHkgaWYgaXQgaGFzIG5vdCBiZWVuIG1hdGNoZWQgdXAKICAgICAgICAgICAgICAgICAgICAvL2luIHRoZSBtb2R1bGUgYWxyZWFkeS4KICAgICAgICAgICAgICAgICAgICBpZiAoZGVwICYmICFtb2QuZGVwTWF0Y2hlZFtpXSAmJiAhcHJvY2Vzc2VkW2RlcElkXSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0T3duKHRyYWNlZCwgZGVwSWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZGVmaW5lRGVwKGksIGRlZmluZWRbZGVwSWRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5jaGVjaygpOyAvL3Bhc3MgZmFsc2U/CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha0N5Y2xlKGRlcCwgdHJhY2VkLCBwcm9jZXNzZWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBwcm9jZXNzZWRbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2FkZWQoKSB7CiAgICAgICAgICAgIHZhciBlcnIsIHVzaW5nUGF0aEZhbGxiYWNrLAogICAgICAgICAgICAgICAgd2FpdEludGVydmFsID0gY29uZmlnLndhaXRTZWNvbmRzICogMTAwMCwKICAgICAgICAgICAgICAgIC8vSXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgd2FpdCBpbnRlcnZhbCBieSB1c2luZyB3YWl0U2Vjb25kcyBvZiAwLgogICAgICAgICAgICAgICAgZXhwaXJlZCA9IHdhaXRJbnRlcnZhbCAmJiAoY29udGV4dC5zdGFydFRpbWUgKyB3YWl0SW50ZXJ2YWwpIDwgbmV3IERhdGUoKS5nZXRUaW1lKCksCiAgICAgICAgICAgICAgICBub0xvYWRzID0gW10sCiAgICAgICAgICAgICAgICByZXFDYWxscyA9IFtdLAogICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gZmFsc2UsCiAgICAgICAgICAgICAgICBuZWVkQ3ljbGVDaGVjayA9IHRydWU7CgogICAgICAgICAgICAvL0RvIG5vdCBib3RoZXIgaWYgdGhpcyBjYWxsIHdhcyBhIHJlc3VsdCBvZiBhIGN5Y2xlIGJyZWFrLgogICAgICAgICAgICBpZiAoaW5DaGVja0xvYWRlZCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gdHJ1ZTsKCiAgICAgICAgICAgIC8vRmlndXJlIG91dCB0aGUgc3RhdGUgb2YgYWxsIHRoZSBtb2R1bGVzLgogICAgICAgICAgICBlYWNoUHJvcChlbmFibGVkUmVnaXN0cnksIGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSBtb2QubWFwLAogICAgICAgICAgICAgICAgICAgIG1vZElkID0gbWFwLmlkOwoKICAgICAgICAgICAgICAgIC8vU2tpcCB0aGluZ3MgdGhhdCBhcmUgbm90IGVuYWJsZWQgb3IgaW4gZXJyb3Igc3RhdGUuCiAgICAgICAgICAgICAgICBpZiAoIW1vZC5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghbWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmVxQ2FsbHMucHVzaChtb2QpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghbW9kLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGUgbW9kdWxlIHNob3VsZCBiZSBleGVjdXRlZCwgYW5kIGl0IGhhcyBub3QKICAgICAgICAgICAgICAgICAgICAvL2JlZW4gaW5pdGVkIGFuZCB0aW1lIGlzIHVwLCByZW1lbWJlciBpdC4KICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgZXhwaXJlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZElkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdQYXRoRmFsbGJhY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vTG9hZHMucHVzaChtb2RJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTY3JpcHQobW9kSWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbW9kLmluaXRlZCAmJiBtb2QuZmV0Y2hlZCAmJiBtYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXAucHJlZml4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL05vIHJlYXNvbiB0byBrZWVwIGxvb2tpbmcgZm9yIHVuZmluaXNoZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9hZGluZy4gSWYgdGhlIG9ubHkgc3RpbGxMb2FkaW5nIGlzIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcGx1Z2luIHJlc291cmNlIHRob3VnaCwga2VlcCBnb2luZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmVjYXVzZSBpdCBtYXkgYmUgdGhhdCBhIHBsdWdpbiByZXNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pcyB3YWl0aW5nIG9uIGEgbm9uLXBsdWdpbiBjeWNsZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobmVlZEN5Y2xlQ2hlY2sgPSBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKGV4cGlyZWQgJiYgbm9Mb2Fkcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIC8vSWYgd2FpdCB0aW1lIGV4cGlyZWQsIHRocm93IGVycm9yIG9mIHVubG9hZGVkIG1vZHVsZXMuCiAgICAgICAgICAgICAgICBlcnIgPSBtYWtlRXJyb3IoJ3RpbWVvdXQnLCAnTG9hZCB0aW1lb3V0IGZvciBtb2R1bGVzOiAnICsgbm9Mb2FkcywgbnVsbCwgbm9Mb2Fkcyk7CiAgICAgICAgICAgICAgICBlcnIuY29udGV4dE5hbWUgPSBjb250ZXh0LmNvbnRleHROYW1lOwogICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Ob3QgZXhwaXJlZCwgY2hlY2sgZm9yIGEgY3ljbGUuCiAgICAgICAgICAgIGlmIChuZWVkQ3ljbGVDaGVjaykgewogICAgICAgICAgICAgICAgZWFjaChyZXFDYWxscywgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUobW9kLCB7fSwge30pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vSWYgc3RpbGwgd2FpdGluZyBvbiBsb2FkcywgYW5kIHRoZSB3YWl0aW5nIGxvYWQgaXMgc29tZXRoaW5nCiAgICAgICAgICAgIC8vb3RoZXIgdGhhbiBhIHBsdWdpbiByZXNvdXJjZSwgb3IgdGhlcmUgYXJlIHN0aWxsIG91dHN0YW5kaW5nCiAgICAgICAgICAgIC8vc2NyaXB0cywgdGhlbiBqdXN0IHRyeSBiYWNrIGxhdGVyLgogICAgICAgICAgICBpZiAoKCFleHBpcmVkIHx8IHVzaW5nUGF0aEZhbGxiYWNrKSAmJiBzdGlsbExvYWRpbmcpIHsKICAgICAgICAgICAgICAgIC8vU29tZXRoaW5nIGlzIHN0aWxsIHdhaXRpbmcgdG8gbG9hZC4gV2FpdCBmb3IgaXQsIGJ1dCBvbmx5CiAgICAgICAgICAgICAgICAvL2lmIGEgdGltZW91dCBpcyBub3QgYWxyZWFkeSBpbiBlZmZlY3QuCiAgICAgICAgICAgICAgICBpZiAoKGlzQnJvd3NlciB8fCBpc1dlYldvcmtlcikgJiYgIWNoZWNrTG9hZGVkVGltZW91dElkKSB7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICAgICAgICAgIH0sIDUwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5DaGVja0xvYWRlZCA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgTW9kdWxlID0gZnVuY3Rpb24gKG1hcCkgewogICAgICAgICAgICB0aGlzLmV2ZW50cyA9IGdldE93bih1bmRlZkV2ZW50cywgbWFwLmlkKSB8fCB7fTsKICAgICAgICAgICAgdGhpcy5tYXAgPSBtYXA7CiAgICAgICAgICAgIHRoaXMuc2hpbSA9IGdldE93bihjb25maWcuc2hpbSwgbWFwLmlkKTsKICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzID0gW107CiAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IFtdOwogICAgICAgICAgICB0aGlzLmRlcE1hdGNoZWQgPSBbXTsKICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzID0ge307CiAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgPSAwOwoKICAgICAgICAgICAgLyogdGhpcy5leHBvcnRzIHRoaXMuZmFjdG9yeQogICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBbXSwKICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkLCB0aGlzLmZldGNoZWQKICAgICAgICAgICAgKi8KICAgICAgICB9OwoKICAgICAgICBNb2R1bGUucHJvdG90eXBlID0gewogICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoZGVwTWFwcywgZmFjdG9yeSwgZXJyYmFjaywgb3B0aW9ucykgewogICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgogICAgICAgICAgICAgICAgLy9EbyBub3QgZG8gbW9yZSBpbml0cyBpZiBhbHJlYWR5IGRvbmUuIENhbiBoYXBwZW4gaWYgdGhlcmUKICAgICAgICAgICAgICAgIC8vYXJlIG11bHRpcGxlIGRlZmluZSBjYWxscyBmb3IgdGhlIHNhbWUgbW9kdWxlLiBUaGF0IGlzIG5vdAogICAgICAgICAgICAgICAgLy9hIG5vcm1hbCwgY29tbW9uIGNhc2UsIGJ1dCBpdCBpcyBhbHNvIG5vdCB1bmV4cGVjdGVkLgogICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CgogICAgICAgICAgICAgICAgaWYgKGVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICAvL1JlZ2lzdGVyIGZvciBlcnJvcnMgb24gdGhpcyBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBlcnJiYWNrKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIG5vIGVycmJhY2sgYWxyZWFkeSwgYnV0IHRoZXJlIGFyZSBlcnJvciBsaXN0ZW5lcnMKICAgICAgICAgICAgICAgICAgICAvL29uIHRoaXMgbW9kdWxlLCBzZXQgdXAgYW4gZXJyYmFjayB0byBwYXNzIHRvIHRoZSBkZXBzLgogICAgICAgICAgICAgICAgICAgIGVycmJhY2sgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9EbyBhIGNvcHkgb2YgdGhlIGRlcGVuZGVuY3kgYXJyYXksIHNvIHRoYXQKICAgICAgICAgICAgICAgIC8vc291cmNlIGlucHV0cyBhcmUgbm90IG1vZGlmaWVkLiBGb3IgZXhhbXBsZQogICAgICAgICAgICAgICAgLy8ic2hpbSIgZGVwcyBhcmUgcGFzc2VkIGluIGhlcmUgZGlyZWN0bHksIGFuZAogICAgICAgICAgICAgICAgLy9kb2luZyBhIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGRlcE1hcHMgYXJyYXkKICAgICAgICAgICAgICAgIC8vd291bGQgYWZmZWN0IHRoYXQgY29uZmlnLgogICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gZGVwTWFwcyAmJiBkZXBNYXBzLnNsaWNlKDApOwoKICAgICAgICAgICAgICAgIHRoaXMuZXJyYmFjayA9IGVycmJhY2s7CgogICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB0aGlzIG1vZHVsZSBoYXMgYmUgaW5pdGlhbGl6ZWQKICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdGlvbnMuaWdub3JlOwoKICAgICAgICAgICAgICAgIC8vQ291bGQgaGF2ZSBvcHRpb24gdG8gaW5pdCB0aGlzIG1vZHVsZSBpbiBlbmFibGVkIG1vZGUsCiAgICAgICAgICAgICAgICAvL29yIGNvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IG1hcmtlZCBhcyBlbmFibGVkLiBIb3dldmVyLAogICAgICAgICAgICAgICAgLy90aGUgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdW50aWwgaW5pdCBpcyBjYWxsZWQuIFNvCiAgICAgICAgICAgICAgICAvL2lmIGVuYWJsZWQgcHJldmlvdXNseSwgbm93IHRyaWdnZXIgZGVwZW5kZW5jaWVzIGFzIGVuYWJsZWQuCiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVkIHx8IHRoaXMuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgIC8vRW5hYmxlIHRoaXMgbW9kdWxlIGFuZCBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICAgICAgICAgLy9XaWxsIGNhbGwgdGhpcy5jaGVjaygpCiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZGVmaW5lRGVwOiBmdW5jdGlvbiAoaSwgZGVwRXhwb3J0cykgewogICAgICAgICAgICAgICAgLy9CZWNhdXNlIG9mIGN5Y2xlcywgZGVmaW5lZCBjYWxsYmFjayBmb3IgYSBnaXZlbgogICAgICAgICAgICAgICAgLy9leHBvcnQgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZS4KICAgICAgICAgICAgICAgIGlmICghdGhpcy5kZXBNYXRjaGVkW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXRjaGVkW2ldID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcENvdW50IC09IDE7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gZGVwRXhwb3J0czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGZldGNoOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5mZXRjaGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5mZXRjaGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXJ0VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CgogICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwOwoKICAgICAgICAgICAgICAgIC8vSWYgdGhlIG1hbmFnZXIgaXMgZm9yIGEgcGx1Z2luIG1hbmFnZWQgcmVzb3VyY2UsCiAgICAgICAgICAgICAgICAvL2FzayB0aGUgcGx1Z2luIHRvIGxvYWQgaXQgbm93LgogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hpbSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWFrZVJlcXVpcmUodGhpcy5tYXAsIHsKICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQogICAgICAgICAgICAgICAgICAgIH0pKHRoaXMuc2hpbS5kZXBzIHx8IFtdLCBiaW5kKHRoaXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3kuCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMubWFwLnVybDsKCiAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KICAgICAgICAgICAgICAgIGlmICghdXJsRmV0Y2hlZFt1cmxdKSB7CiAgICAgICAgICAgICAgICAgICAgdXJsRmV0Y2hlZFt1cmxdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvYWQodGhpcy5tYXAuaWQsIHVybCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2hlY2tzIGlmIHRoZSBtb2R1bGUgaXMgcmVhZHkgdG8gZGVmaW5lIGl0c2VsZiwgYW5kIGlmIHNvLAogICAgICAgICAgICAgKiBkZWZpbmUgaXQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjaGVjazogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgdGhpcy5lbmFibGluZykgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgZXJyLCBjanNNb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgaWQgPSB0aGlzLm1hcC5pZCwKICAgICAgICAgICAgICAgICAgICBkZXBFeHBvcnRzID0gdGhpcy5kZXBFeHBvcnRzLAogICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSB0aGlzLmV4cG9ydHMsCiAgICAgICAgICAgICAgICAgICAgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTsKCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gT25seSBmZXRjaCBpZiBub3QgYWxyZWFkeSBpbiB0aGUgZGVmUXVldWUuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGNvbnRleHQuZGVmUXVldWVNYXAsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMuZXJyb3IpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kZWZpbmluZykgewogICAgICAgICAgICAgICAgICAgIC8vVGhlIGZhY3RvcnkgY291bGQgdHJpZ2dlciBhbm90aGVyIHJlcXVpcmUgY2FsbAogICAgICAgICAgICAgICAgICAgIC8vdGhhdCB3b3VsZCByZXN1bHQgaW4gY2hlY2tpbmcgdGhpcyBtb2R1bGUgdG8KICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSBpdHNlbGYgYWdhaW4uIElmIGFscmVhZHkgaW4gdGhlIHByb2Nlc3MKICAgICAgICAgICAgICAgICAgICAvL29mIGRvaW5nIHRoYXQsIHNraXAgdGhpcyB3b3JrLgogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5pbmcgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXBDb3VudCA8IDEgJiYgIXRoaXMuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihmYWN0b3J5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBpcyBhbiBlcnJvciBsaXN0ZW5lciwgZmF2b3IgcGFzc2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90byB0aGF0IGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IuIEhvd2V2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL29ubHkgZG8gaXQgZm9yIGRlZmluZSgpJ2QgIG1vZHVsZXMuIHJlcXVpcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXJyYmFja3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIGZhaWx1cmVzIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoZWlyIGNhbGxiYWNrcyAoIzY5OSkuIEhvd2V2ZXIgaWYgYSBnbG9iYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25FcnJvciBpcyBzZXQsIHVzZSB0aGF0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmV2ZW50cy5lcnJvciAmJiB0aGlzLm1hcC5pc0RlZmluZSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25FcnJvciAhPT0gZGVmYXVsdE9uRXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3RvcnksIGRlcEV4cG9ydHMsIGV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjb250ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmF2b3IgcmV0dXJuIHZhbHVlIG92ZXIgZXhwb3J0cy4gSWYgbm9kZS9janMgaW4gcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gd2lsbCBub3QgaGF2ZSBhIHJldHVybiB2YWx1ZSBhbnl3YXkuIEZhdm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2R1bGUuZXhwb3J0cyBhc3NpZ25tZW50IG92ZXIgZXhwb3J0cyBvYmplY3QuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgZXhwb3J0cyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2pzTW9kdWxlID0gdGhpcy5tb2R1bGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNqc01vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY2pzTW9kdWxlLmV4cG9ydHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVzaW5nRXhwb3J0cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2V4cG9ydHMgYWxyZWFkeSBzZXQgdGhlIGRlZmluZWQgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSB0aGlzLmV4cG9ydHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1hcCA9IHRoaXMubWFwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTW9kdWxlcyA9IHRoaXMubWFwLmlzRGVmaW5lID8gW3RoaXMubWFwLmlkXSA6IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVUeXBlID0gdGhpcy5tYXAuaXNEZWZpbmUgPyAnZGVmaW5lJyA6ICdyZXF1aXJlJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcigodGhpcy5lcnJvciA9IGVycikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSnVzdCBhIGxpdGVyYWwgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBmYWN0b3J5OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydHMgPSBleHBvcnRzOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLmlzRGVmaW5lICYmICF0aGlzLmlnbm9yZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZFtpZF0gPSBleHBvcnRzOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEub25SZXNvdXJjZUxvYWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzTG9hZE1hcHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgZnVuY3Rpb24gKGRlcE1hcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNMb2FkTWFwcy5wdXNoKGRlcE1hcC5ub3JtYWxpemVkTWFwIHx8IGRlcE1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLm9uUmVzb3VyY2VMb2FkKGNvbnRleHQsIHRoaXMubWFwLCByZXNMb2FkTWFwcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2xlYW4gdXAKICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9GaW5pc2hlZCB0aGUgZGVmaW5lIHN0YWdlLiBBbGxvdyBjYWxsaW5nIGNoZWNrIGFnYWluCiAgICAgICAgICAgICAgICAgICAgLy90byBhbGxvdyBkZWZpbmUgbm90aWZpY2F0aW9ucyBiZWxvdyBpbiB0aGUgY2FzZSBvZiBhCiAgICAgICAgICAgICAgICAgICAgLy9jeWNsZS4KICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaW5nID0gZmFsc2U7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmluZWQgJiYgIXRoaXMuZGVmaW5lRW1pdHRlZCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXR0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2RlZmluZWQnLCB0aGlzLmV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGNhbGxQbHVnaW46IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLm1hcCwKICAgICAgICAgICAgICAgICAgICBpZCA9IG1hcC5pZCwKICAgICAgICAgICAgICAgICAgICAvL01hcCBhbHJlYWR5IG5vcm1hbGl6ZWQgdGhlIHByZWZpeC4KICAgICAgICAgICAgICAgICAgICBwbHVnaW5NYXAgPSBtYWtlTW9kdWxlTWFwKG1hcC5wcmVmaXgpOwoKICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4sIHNvIGl0CiAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKHBsdWdpbk1hcCk7CgogICAgICAgICAgICAgICAgb24ocGx1Z2luTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKHBsdWdpbikgewogICAgICAgICAgICAgICAgICAgIHZhciBsb2FkLCBub3JtYWxpemVkTWFwLCBub3JtYWxpemVkTW9kLAogICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVJZCA9IGdldE93bihidW5kbGVzTWFwLCB0aGlzLm1hcC5pZCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLm1hcC5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gdGhpcy5tYXAucGFyZW50TWFwID8gdGhpcy5tYXAucGFyZW50TWFwLm5hbWUgOiBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1hcC5wYXJlbnRNYXAsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ1aWxkQ2FsbGJhY2s6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIC8vSWYgY3VycmVudCBtYXAgaXMgbm90IG5vcm1hbGl6ZWQsIHdhaXQgZm9yIHRoYXQKICAgICAgICAgICAgICAgICAgICAvL25vcm1hbGl6ZWQgbmFtZSB0byBsb2FkIGluc3RlYWQgb2YgY29udGludWluZy4KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAudW5ub3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIHRoZSBJRCBpZiB0aGUgcGx1Z2luIGFsbG93cyBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5ub3JtYWxpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4ubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHx8ICcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL3ByZWZpeCBhbmQgbmFtZSBzaG91bGQgYWxyZWFkeSBiZSBub3JtYWxpemVkLCBubyBuZWVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9yIGFwcGx5aW5nIG1hcCBjb25maWcgYWdhaW4gZWl0aGVyLgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTWFwID0gbWFrZU1vZHVsZU1hcChtYXAucHJlZml4ICsgJyEnICsgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAucGFyZW50TWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgb24obm9ybWFsaXplZE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5ub3JtYWxpemVkTWFwID0gbm9ybWFsaXplZE1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZTogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZCA9IGdldE93bihyZWdpc3RyeSwgbm9ybWFsaXplZE1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkTW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgcGx1Z2luLCBzbyBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jYW4gYmUgdHJhY2VkIGZvciBjeWNsZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChub3JtYWxpemVkTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLm9uKCdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0lmIGEgcGF0aHMgY29uZmlnLCB0aGVuIGp1c3QgbG9hZCB0aGF0IGZpbGUgaW5zdGVhZCB0bwogICAgICAgICAgICAgICAgICAgIC8vcmVzb2x2ZSB0aGUgcGx1Z2luLCBhcyBpdCBpcyBidWlsdCBpbnRvIHRoYXQgcGF0aHMgbGF5ZXIuCiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1bmRsZUlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLnVybCA9IGNvbnRleHQubmFtZVRvVXJsKGJ1bmRsZUlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGxvYWQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICBsb2FkLmVycm9yID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IGVycjsKICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gW2lkXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIHRlbXAgdW5ub3JtYWxpemVkIG1vZHVsZXMgZm9yIHRoaXMgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAvL3NpbmNlIHRoZXkgd2lsbCBuZXZlciBiZSByZXNvbHZlZCBvdGhlcndpc2Ugbm93LgogICAgICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5tYXAuaWQuaW5kZXhPZihpZCArICdfdW5ub3JtYWxpemVkJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KG1vZC5tYXAuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9BbGxvdyBwbHVnaW5zIHRvIGxvYWQgb3RoZXIgY29kZSB3aXRob3V0IGhhdmluZyB0byBrbm93IHRoZQogICAgICAgICAgICAgICAgICAgIC8vY29udGV4dCBvciBob3cgdG8gJ2NvbXBsZXRlJyB0aGUgbG9hZC4KICAgICAgICAgICAgICAgICAgICBsb2FkLmZyb21UZXh0ID0gYmluZCh0aGlzLCBmdW5jdGlvbiAodGV4dCwgdGV4dEFsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2R1bGVOYW1lID0gbWFwLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVNYXAgPSBtYWtlTW9kdWxlTWFwKG1vZHVsZU5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW50ZXJhY3RpdmUgPSB1c2VJbnRlcmFjdGl2ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQXMgb2YgMi4xLjAsIHN1cHBvcnQganVzdCBwYXNzaW5nIHRoZSB0ZXh0LCB0byByZWluZm9yY2UKICAgICAgICAgICAgICAgICAgICAgICAgLy9mcm9tVGV4dCBvbmx5IGJlaW5nIGNhbGxlZCBvbmNlIHBlciByZXNvdXJjZS4gU3RpbGwKICAgICAgICAgICAgICAgICAgICAgICAgLy9zdXBwb3J0IG9sZCBzdHlsZSBvZiBwYXNzaW5nIG1vZHVsZU5hbWUgYnV0IGRpc2NhcmQKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGF0IG1vZHVsZU5hbWUgaW4gZmF2b3Igb2YgdGhlIGludGVybmFsIHJlZi4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRBbHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0QWx0OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1R1cm4gb2ZmIGludGVyYWN0aXZlIHNjcmlwdCBtYXRjaGluZyBmb3IgSUUgZm9yIGFueSBkZWZpbmUKICAgICAgICAgICAgICAgICAgICAgICAgLy9jYWxscyBpbiB0aGUgdGV4dCwgdGhlbiB0dXJuIGl0IGJhY2sgb24gYXQgdGhlIGVuZC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludGVyYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1ByaW1lIHRoZSBzeXN0ZW0gYnkgY3JlYXRpbmcgYSBtb2R1bGUgaW5zdGFuY2UgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgIC8vaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShtb2R1bGVNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9UcmFuc2ZlciBhbnkgY29uZmlnIHRvIHRoaXMgb3RoZXIgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcChjb25maWcuY29uZmlnLCBpZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5jb25maWdbbW9kdWxlTmFtZV0gPSBjb25maWcuY29uZmlnW2lkXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5leGVjKHRleHQpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ2Zyb210ZXh0ZXZhbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcm9tVGV4dCBldmFsIGZvciAnICsgaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZmFpbGVkOiAnICsgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGUgcGx1Z2luCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3VyY2UKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gobW9kdWxlTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3VwcG9ydCBhbm9ueW1vdXMgbW9kdWxlcy4KICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgdGhlIHZhbHVlIG9mIHRoYXQgbW9kdWxlIHRvIHRoZSB2YWx1ZSBmb3IgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNlIElELgogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUoW21vZHVsZU5hbWVdLCBsb2FkKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9Vc2UgcGFyZW50TmFtZSBoZXJlIHNpbmNlIHRoZSBwbHVnaW4ncyBuYW1lIGlzIG5vdCByZWxpYWJsZSwKICAgICAgICAgICAgICAgICAgICAvL2NvdWxkIGJlIHNvbWUgd2VpcmQgc3RyaW5nIHdpdGggbm8gcGF0aCB0aGF0IGFjdHVhbGx5IHdhbnRzIHRvCiAgICAgICAgICAgICAgICAgICAgLy9yZWZlcmVuY2UgdGhlIHBhcmVudE5hbWUncyBwYXRoLgogICAgICAgICAgICAgICAgICAgIHBsdWdpbi5sb2FkKG1hcC5uYW1lLCBsb2NhbFJlcXVpcmUsIGxvYWQsIGNvbmZpZyk7CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luTWFwc1twbHVnaW5NYXAuaWRdID0gcGx1Z2luTWFwOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBlbmFibGVkUmVnaXN0cnlbdGhpcy5tYXAuaWRdID0gdGhpczsKICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgLy9TZXQgZmxhZyBtZW50aW9uaW5nIHRoYXQgdGhlIG1vZHVsZSBpcyBlbmFibGluZywKICAgICAgICAgICAgICAgIC8vc28gdGhhdCBpbW1lZGlhdGUgY2FsbHMgdG8gdGhlIGRlZmluZWQgY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAvL2ZvciBkZXBlbmRlbmNpZXMgZG8gbm90IHRyaWdnZXIgaW5hZHZlcnRlbnQgbG9hZAogICAgICAgICAgICAgICAgLy93aXRoIHRoZSBkZXBDb3VudCBzdGlsbCBiZWluZyB6ZXJvLgogICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IHRydWU7CgogICAgICAgICAgICAgICAgLy9FbmFibGUgZWFjaCBkZXBlbmRlbmN5CiAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkLCBtb2QsIGhhbmRsZXI7CgogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwTWFwID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICAvL0RlcGVuZGVuY3kgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgZGVwTWFwCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYW5kIHdpcmVkIHVwIHRvIHRoaXMgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgICAgICBkZXBNYXAgPSBtYWtlTW9kdWxlTWFwKGRlcE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5tYXAuaXNEZWZpbmUgPyB0aGlzLm1hcCA6IHRoaXMubWFwLnBhcmVudE1hcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuc2tpcE1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwc1tpXSA9IGRlcE1hcDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBnZXRPd24oaGFuZGxlcnMsIGRlcE1hcC5pZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gaGFuZGxlcih0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBDb3VudCArPSAxOwoKICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKGRlcEV4cG9ydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVuZGVmZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZURlcChpLCBkZXBFeHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZXJyb3InLCBiaW5kKHRoaXMsIHRoaXMuZXJyYmFjaykpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBkaXJlY3QgZXJyYmFjayBvbiB0aGlzIG1vZHVsZSwgYnV0IHNvbWV0aGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSBpcyBsaXN0ZW5pbmcgZm9yIGVycm9ycywgc28gYmUgc3VyZSB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvcGFnYXRlIHRoZSBlcnJvciBjb3JyZWN0bHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlkID0gZGVwTWFwLmlkOwogICAgICAgICAgICAgICAgICAgIG1vZCA9IHJlZ2lzdHJ5W2lkXTsKCiAgICAgICAgICAgICAgICAgICAgLy9Ta2lwIHNwZWNpYWwgbW9kdWxlcyBsaWtlICdyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJwogICAgICAgICAgICAgICAgICAgIC8vQWxzbywgZG9uJ3QgY2FsbCBlbmFibGUgaWYgaXQgaXMgYWxyZWFkeSBlbmFibGVkLAogICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0YW50IGluIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2FzZXMuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGhhbmRsZXJzLCBpZCkgJiYgbW9kICYmICFtb2QuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShkZXBNYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIHBsdWdpbiB0aGF0IGlzIHVzZWQgaW4KICAgICAgICAgICAgICAgIC8vYSBkZXBlbmRlbmN5CiAgICAgICAgICAgICAgICBlYWNoUHJvcCh0aGlzLnBsdWdpbk1hcHMsIGJpbmQodGhpcywgZnVuY3Rpb24gKHBsdWdpbk1hcCkgewogICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIHBsdWdpbk1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG9uOiBmdW5jdGlvbiAobmFtZSwgY2IpIHsKICAgICAgICAgICAgICAgIHZhciBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgIGlmICghY2JzKSB7CiAgICAgICAgICAgICAgICAgICAgY2JzID0gdGhpcy5ldmVudHNbbmFtZV0gPSBbXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNicy5wdXNoKGNiKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGVtaXQ6IGZ1bmN0aW9uIChuYW1lLCBldnQpIHsKICAgICAgICAgICAgICAgIGVhY2godGhpcy5ldmVudHNbbmFtZV0sIGZ1bmN0aW9uIChjYikgewogICAgICAgICAgICAgICAgICAgIGNiKGV2dCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZXJyb3InKSB7CiAgICAgICAgICAgICAgICAgICAgLy9Ob3cgdGhhdCB0aGUgZXJyb3IgaGFuZGxlciB3YXMgdHJpZ2dlcmVkLCByZW1vdmUKICAgICAgICAgICAgICAgICAgICAvL3RoZSBsaXN0ZW5lcnMsIHNpbmNlIHRoaXMgYnJva2VuIE1vZHVsZSBpbnN0YW5jZQogICAgICAgICAgICAgICAgICAgIC8vY2FuIHN0YXkgYXJvdW5kIGZvciBhIHdoaWxlIGluIHRoZSByZWdpc3RyeS4KICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudHNbbmFtZV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBjYWxsR2V0TW9kdWxlKGFyZ3MpIHsKICAgICAgICAgICAgLy9Ta2lwIG1vZHVsZXMgYWxyZWFkeSBkZWZpbmVkLgogICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgYXJnc1swXSkpIHsKICAgICAgICAgICAgICAgIGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKGFyZ3NbMF0sIG51bGwsIHRydWUpKS5pbml0KGFyZ3NbMV0sIGFyZ3NbMl0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihub2RlLCBmdW5jLCBuYW1lLCBpZU5hbWUpIHsKICAgICAgICAgICAgLy9GYXZvciBkZXRhY2hFdmVudCBiZWNhdXNlIG9mIElFOQogICAgICAgICAgICAvL2lzc3VlLCBzZWUgYXR0YWNoRXZlbnQvYWRkRXZlbnRMaXN0ZW5lciBjb21tZW50IGVsc2V3aGVyZQogICAgICAgICAgICAvL2luIHRoaXMgZmlsZS4KICAgICAgICAgICAgaWYgKG5vZGUuZGV0YWNoRXZlbnQgJiYgIWlzT3BlcmEpIHsKICAgICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElmIG5vdCBpdCB3aWxsIHRocm93IGFuIGVycm9yLCB3aGljaCB3aWxsIGJlCiAgICAgICAgICAgICAgICAvL3VzZWZ1bCB0byBrbm93LgogICAgICAgICAgICAgICAgaWYgKGllTmFtZSkgewogICAgICAgICAgICAgICAgICAgIG5vZGUuZGV0YWNoRXZlbnQoaWVOYW1lLCBmdW5jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEdpdmVuIGFuIGV2ZW50IGZyb20gYSBzY3JpcHQgbm9kZSwgZ2V0IHRoZSByZXF1aXJlanMgaW5mbyBmcm9tIGl0LAogICAgICAgICAqIGFuZCB0aGVuIHJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBvbiB0aGUgbm9kZS4KICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldnQKICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldFNjcmlwdERhdGEoZXZ0KSB7CiAgICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QKICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCiAgICAgICAgICAgIC8vdG8gc3VwcG9ydCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCiAgICAgICAgICAgIHZhciBub2RlID0gZXZ0LmN1cnJlbnRUYXJnZXQgfHwgZXZ0LnNyY0VsZW1lbnQ7CgogICAgICAgICAgICAvL1JlbW92ZSB0aGUgbGlzdGVuZXJzIG9uY2UgaGVyZS4KICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIobm9kZSwgY29udGV4dC5vblNjcmlwdExvYWQsICdsb2FkJywgJ29ucmVhZHlzdGF0ZWNoYW5nZScpOwogICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihub2RlLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsICdlcnJvcicpOwoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsCiAgICAgICAgICAgICAgICBpZDogbm9kZSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJykKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGludGFrZURlZmluZXMoKSB7CiAgICAgICAgICAgIHZhciBhcmdzOwoKICAgICAgICAgICAgLy9BbnkgZGVmaW5lZCBtb2R1bGVzIGluIHRoZSBnbG9iYWwgcXVldWUsIGludGFrZSB0aGVtIG5vdy4KICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CgogICAgICAgICAgICAvL01ha2Ugc3VyZSBhbnkgcmVtYWluaW5nIGRlZlF1ZXVlIGl0ZW1zIGdldCBwcm9wZXJseSBwcm9jZXNzZWQuCiAgICAgICAgICAgIHdoaWxlIChkZWZRdWV1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOwogICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ21pc21hdGNoJywgJ01pc21hdGNoZWQgYW5vbnltb3VzIGRlZmluZSgpIG1vZHVsZTogJyArCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL2FyZ3MgYXJlIGlkLCBkZXBzLCBmYWN0b3J5LiBTaG91bGQgYmUgbm9ybWFsaXplZCBieSB0aGUKICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSgpIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcCA9IHt9OwogICAgICAgIH0KCiAgICAgICAgY29udGV4dCA9IHsKICAgICAgICAgICAgY29uZmlnOiBjb25maWcsCiAgICAgICAgICAgIGNvbnRleHROYW1lOiBjb250ZXh0TmFtZSwKICAgICAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LAogICAgICAgICAgICBkZWZpbmVkOiBkZWZpbmVkLAogICAgICAgICAgICB1cmxGZXRjaGVkOiB1cmxGZXRjaGVkLAogICAgICAgICAgICBkZWZRdWV1ZTogZGVmUXVldWUsCiAgICAgICAgICAgIGRlZlF1ZXVlTWFwOiB7fSwKICAgICAgICAgICAgTW9kdWxlOiBNb2R1bGUsCiAgICAgICAgICAgIG1ha2VNb2R1bGVNYXA6IG1ha2VNb2R1bGVNYXAsCiAgICAgICAgICAgIG5leHRUaWNrOiByZXEubmV4dFRpY2ssCiAgICAgICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogU2V0IGEgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnRleHQuCiAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgY29uZmlnIG9iamVjdCB0byBpbnRlZ3JhdGUuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjb25maWd1cmU6IGZ1bmN0aW9uIChjZmcpIHsKICAgICAgICAgICAgICAgIC8vTWFrZSBzdXJlIHRoZSBiYXNlVXJsIGVuZHMgaW4gYSBzbGFzaC4KICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybCkgewogICAgICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybC5jaGFyQXQoY2ZnLmJhc2VVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykgewogICAgICAgICAgICAgICAgICAgICAgICBjZmcuYmFzZVVybCArPSAnLyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgb2xkIHN0eWxlIHVybEFyZ3Mgc3RyaW5nIHRvIGEgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNmZy51cmxBcmdzID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgIHZhciB1cmxBcmdzID0gY2ZnLnVybEFyZ3M7CiAgICAgICAgICAgICAgICAgICAgY2ZnLnVybEFyZ3MgPSBmdW5jdGlvbihpZCwgdXJsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgdXJsQXJnczsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vU2F2ZSBvZmYgdGhlIHBhdGhzIHNpbmNlIHRoZXkgcmVxdWlyZSBzcGVjaWFsIHByb2Nlc3NpbmcsCiAgICAgICAgICAgICAgICAvL3RoZXkgYXJlIGFkZGl0aXZlLgogICAgICAgICAgICAgICAgdmFyIHNoaW0gPSBjb25maWcuc2hpbSwKICAgICAgICAgICAgICAgICAgICBvYmpzID0gewogICAgICAgICAgICAgICAgICAgICAgICBwYXRoczogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlczogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBtYXA6IHRydWUKICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZywgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG9ianNbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWdbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1twcm9wXSA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKGNvbmZpZ1twcm9wXSwgdmFsdWUsIHRydWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1twcm9wXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vUmV2ZXJzZSBtYXAgdGhlIGJ1bmRsZXMKICAgICAgICAgICAgICAgIGlmIChjZmcuYnVuZGxlcykgewogICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZy5idW5kbGVzLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCh2YWx1ZSwgZnVuY3Rpb24gKHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlc01hcFt2XSA9IHByb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vTWVyZ2Ugc2hpbQogICAgICAgICAgICAgICAgaWYgKGNmZy5zaGltKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLnNoaW0sIGZ1bmN0aW9uICh2YWx1ZSwgaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhlIHN0cnVjdHVyZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHM6IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUuZXhwb3J0cyB8fCB2YWx1ZS5pbml0KSAmJiAhdmFsdWUuZXhwb3J0c0ZuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHBvcnRzRm4gPSBjb250ZXh0Lm1ha2VTaGltRXhwb3J0cyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgc2hpbVtpZF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBjb25maWcuc2hpbSA9IHNoaW07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9BZGp1c3QgcGFja2FnZXMgaWYgbmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgaWYgKGNmZy5wYWNrYWdlcykgewogICAgICAgICAgICAgICAgICAgIGVhY2goY2ZnLnBhY2thZ2VzLCBmdW5jdGlvbiAocGtnT2JqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiwgbmFtZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHBrZ09iaiA9IHR5cGVvZiBwa2dPYmogPT09ICdzdHJpbmcnID8ge25hbWU6IHBrZ09ian0gOiBwa2dPYmo7CgogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGtnT2JqLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gcGtnT2JqLmxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wYXRoc1tuYW1lXSA9IHBrZ09iai5sb2NhdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TYXZlIHBvaW50ZXIgdG8gbWFpbiBtb2R1bGUgSUQgZm9yIHBrZyBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICAvL1JlbW92ZSBsZWFkaW5nIGRvdCBpbiBtYWluLCBzbyBtYWluIHBhdGhzIGFyZSBub3JtYWxpemVkLAogICAgICAgICAgICAgICAgICAgICAgICAvL2FuZCByZW1vdmUgYW55IHRyYWlsaW5nIC5qcywgc2luY2UgZGlmZmVyZW50IHBhY2thZ2UKICAgICAgICAgICAgICAgICAgICAgICAgLy9lbnZzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zOiBzb21lIHVzZSBhIG1vZHVsZSBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAvL3NvbWUgdXNlIGEgZmlsZSBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICBjb25maWcucGtnc1tuYW1lXSA9IHBrZ09iai5uYW1lICsgJy8nICsgKHBrZ09iai5tYWluIHx8ICdtYWluJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGN1cnJEaXJSZWdFeHAsICcnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGFyZSBhbnkgIndhaXRpbmcgdG8gZXhlY3V0ZSIgbW9kdWxlcyBpbiB0aGUgcmVnaXN0cnksCiAgICAgICAgICAgICAgICAvL3VwZGF0ZSB0aGUgbWFwcyBmb3IgdGhlbSwgc2luY2UgdGhlaXIgaW5mbywgbGlrZSBVUkxzIHRvIGxvYWQsCiAgICAgICAgICAgICAgICAvL21heSBoYXZlIGNoYW5nZWQuCiAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCwgaWQpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIG1vZHVsZSBhbHJlYWR5IGhhcyBpbml0IGNhbGxlZCwgc2luY2UgaXQgaXMgdG9vCiAgICAgICAgICAgICAgICAgICAgLy9sYXRlIHRvIG1vZGlmeSB0aGVtLCBhbmQgaWdub3JlIHVubm9ybWFsaXplZCBvbmVzCiAgICAgICAgICAgICAgICAgICAgLy9zaW5jZSB0aGV5IGFyZSB0cmFuc2llbnQuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2QuaW5pdGVkICYmICFtb2QubWFwLnVubm9ybWFsaXplZCkgewogICAgICAgICAgICAgICAgICAgICAgICBtb2QubWFwID0gbWFrZU1vZHVsZU1hcChpZCwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9JZiBhIGRlcHMgYXJyYXkgb3IgYSBjb25maWcgY2FsbGJhY2sgaXMgc3BlY2lmaWVkLCB0aGVuIGNhbGwKICAgICAgICAgICAgICAgIC8vcmVxdWlyZSB3aXRoIHRob3NlIGFyZ3MuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcmVxdWlyZSBpcyBkZWZpbmVkIGFzIGEKICAgICAgICAgICAgICAgIC8vY29uZmlnIG9iamVjdCBiZWZvcmUgcmVxdWlyZS5qcyBpcyBsb2FkZWQuCiAgICAgICAgICAgICAgICBpZiAoY2ZnLmRlcHMgfHwgY2ZnLmNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXF1aXJlKGNmZy5kZXBzIHx8IFtdLCBjZmcuY2FsbGJhY2spOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbWFrZVNoaW1FeHBvcnRzOiBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZuKCkgewogICAgICAgICAgICAgICAgICAgIHZhciByZXQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluaXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdmFsdWUuaW5pdC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgfHwgKHZhbHVlLmV4cG9ydHMgJiYgZ2V0R2xvYmFsKHZhbHVlLmV4cG9ydHMpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBmbjsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG1ha2VSZXF1aXJlOiBmdW5jdGlvbiAocmVsTWFwLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBsb2NhbFJlcXVpcmUoZGVwcywgY2FsbGJhY2ssIGVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1hcCwgcmVxdWlyZU1vZDsKCiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlQnVpbGRDYWxsYmFjayAmJiBjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5fX3JlcXVpcmVKc0J1aWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwcyA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0ludmFsaWQgY2FsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdyZXF1aXJlYXJncycsICdJbnZhbGlkIHJlcXVpcmUgY2FsbCcpLCBlcnJiYWNrKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiByZXF1aXJlfGV4cG9ydHN8bW9kdWxlIGFyZSByZXF1ZXN0ZWQsIGdldCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy92YWx1ZSBmb3IgdGhlbSBmcm9tIHRoZSBzcGVjaWFsIGhhbmRsZXJzLiBDYXZlYXQ6CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBvbmx5IHdvcmtzIHdoaWxlIG1vZHVsZSBpcyBiZWluZyBkZWZpbmVkLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsTWFwICYmIGhhc1Byb3AoaGFuZGxlcnMsIGRlcHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlcnNbZGVwc10ocmVnaXN0cnlbcmVsTWFwLmlkXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3luY2hyb25vdXMgYWNjZXNzIHRvIG9uZSBtb2R1bGUuIElmIHJlcXVpcmUuZ2V0IGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYXZhaWxhYmxlIChhcyBpbiB0aGUgTm9kZSBhZGFwdGVyKSwgcHJlZmVyIHRoYXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEuZ2V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxLmdldChjb250ZXh0LCBkZXBzLCByZWxNYXAsIGxvY2FsUmVxdWlyZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIG1vZHVsZSBuYW1lLCBpZiBpdCBjb250YWlucyAuIG9yIC4uCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCA9IG1ha2VNb2R1bGVNYXAoZGVwcywgcmVsTWFwLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub3Rsb2FkZWQnLCAnTW9kdWxlIG5hbWUgIicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyIgaGFzIG5vdCBiZWVuIGxvYWRlZCB5ZXQgZm9yIGNvbnRleHQ6ICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbE1hcCA/ICcnIDogJy4gVXNlIHJlcXVpcmUoW10pJykpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lZFtpZF07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0dyYWIgZGVmaW5lcyB3YWl0aW5nIGluIHRoZSBnbG9iYWwgcXVldWUuCiAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVmaW5lcygpOwoKICAgICAgICAgICAgICAgICAgICAvL01hcmsgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYXMgbmVlZGluZyB0byBiZSBsb2FkZWQuCiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5uZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vU29tZSBkZWZpbmVzIGNvdWxkIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXF1aXJlIGNhbGwsIGNvbGxlY3QgdGhlbS4KICAgICAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVmaW5lcygpOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZCA9IGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKG51bGwsIHJlbE1hcCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TdG9yZSBpZiBtYXAgY29uZmlnIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoaXMgcmVxdWlyZQogICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGwgZm9yIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5za2lwTWFwID0gb3B0aW9ucy5za2lwTWFwOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5pbml0KGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVxdWlyZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBtaXhpbihsb2NhbFJlcXVpcmUsIHsKICAgICAgICAgICAgICAgICAgICBpc0Jyb3dzZXI6IGlzQnJvd3NlciwKCiAgICAgICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgYSBtb2R1bGUgbmFtZSArIC5leHRlbnNpb24gaW50byBhbiBVUkwgcGF0aC4KICAgICAgICAgICAgICAgICAgICAgKiAqUmVxdWlyZXMqIHRoZSB1c2Ugb2YgYSBtb2R1bGUgbmFtZS4gSXQgZG9lcyBub3Qgc3VwcG9ydCB1c2luZwogICAgICAgICAgICAgICAgICAgICAqIHBsYWluIFVSTHMgbGlrZSBuYW1lVG9VcmwuCiAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgdG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lUGx1c0V4dCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBtb2R1bGVOYW1lUGx1c0V4dC5sYXN0SW5kZXhPZignLicpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCA9IG1vZHVsZU5hbWVQbHVzRXh0LnNwbGl0KCcvJylbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlbGF0aXZlID0gc2VnbWVudCA9PT0gJy4nIHx8IHNlZ21lbnQgPT09ICcuLic7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUgYSBmaWxlIGV4dGVuc2lvbiBhbGlhcywgYW5kIGl0IGlzIG5vdCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy9kb3RzIGZyb20gYSByZWxhdGl2ZSBwYXRoLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xICYmICghaXNSZWxhdGl2ZSB8fCBpbmRleCA+IDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoaW5kZXgsIG1vZHVsZU5hbWVQbHVzRXh0Lmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lUGx1c0V4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZygwLCBpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemUobW9kdWxlTmFtZVBsdXNFeHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbE1hcCAmJiByZWxNYXAuaWQsIHRydWUpLCBleHQsICB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICBkZWZpbmVkOiBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQpOwogICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZDogZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNQcm9wKGRlZmluZWQsIGlkKSB8fCBoYXNQcm9wKHJlZ2lzdHJ5LCBpZCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9Pbmx5IGFsbG93IHVuZGVmIG9uIHRvcCBsZXZlbCByZXF1aXJlIGNhbGxzCiAgICAgICAgICAgICAgICBpZiAoIXJlbE1hcCkgewogICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZS51bmRlZiA9IGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgYW55IHdhaXRpbmcgZGVmaW5lKCkgY2FsbHMgdG8gdGhpcyBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAvL2ZpeCBmb3IgIzQwOAogICAgICAgICAgICAgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIHRydWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBtb2QudW5kZWZlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNjcmlwdChpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGVmaW5lZFtpZF07CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1cmxGZXRjaGVkW21hcC51cmxdOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdW5kZWZFdmVudHNbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9DbGVhbiBxdWV1ZWQgZGVmaW5lcyB0b28uIEdvIGJhY2t3YXJkcwogICAgICAgICAgICAgICAgICAgICAgICAvL2luIGFycmF5IHNvIHRoYXQgdGhlIHNwbGljZXMgZG8gbm90CiAgICAgICAgICAgICAgICAgICAgICAgIC8vbWVzcyB1cCB0aGUgaXRlcmF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICBlYWNoUmV2ZXJzZShkZWZRdWV1ZSwgZnVuY3Rpb24oYXJncywgaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmUXVldWUuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQuZGVmUXVldWVNYXBbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Ib2xkIG9uIHRvIGxpc3RlbmVycyBpbiBjYXNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9tb2R1bGUgd2lsbCBiZSBhdHRlbXB0ZWQgdG8gYmUgcmVsb2FkZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXNpbmcgYSBkaWZmZXJlbnQgY29uZmlnLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmRXZlbnRzW2lkXSA9IG1vZC5ldmVudHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2FsbGVkIHRvIGVuYWJsZSBhIG1vZHVsZSBpZiBpdCBpcyBzdGlsbCBpbiB0aGUgcmVnaXN0cnkKICAgICAgICAgICAgICogYXdhaXRpbmcgZW5hYmxlbWVudC4gQSBzZWNvbmQgYXJnLCBwYXJlbnQsIHRoZSBwYXJlbnQgbW9kdWxlLAogICAgICAgICAgICAgKiBpcyBwYXNzZWQgaW4gZm9yIGNvbnRleHQsIHdoZW4gdGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBieQogICAgICAgICAgICAgKiB0aGUgb3B0aW1pemVyLiBOb3Qgc2hvd24gaGVyZSB0byBrZWVwIGNvZGUgY29tcGFjdC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKGRlcE1hcCkgewogICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgZGVwTWFwLmlkKTsKICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICBnZXRNb2R1bGUoZGVwTWFwKS5lbmFibGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCBieSBlbnZpcm9ubWVudCBhZGFwdGVycyB0byBjb21wbGV0ZSBhIGxvYWQgZXZlbnQuCiAgICAgICAgICAgICAqIEEgbG9hZCBldmVudCBjb3VsZCBiZSBhIHNjcmlwdCBsb2FkIG9yIGp1c3QgYSBsb2FkIHBhc3MgZnJvbSBhIHN5bmNocm9ub3VzCiAgICAgICAgICAgICAqIGxvYWQgY2FsbC4KICAgICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBwb3RlbnRpYWxseSBjb21wbGV0ZS4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNvbXBsZXRlTG9hZDogZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHsKICAgICAgICAgICAgICAgIHZhciBmb3VuZCwgYXJncywgbW9kLAogICAgICAgICAgICAgICAgICAgIHNoaW0gPSBnZXRPd24oY29uZmlnLnNoaW0sIG1vZHVsZU5hbWUpIHx8IHt9LAogICAgICAgICAgICAgICAgICAgIHNoRXhwb3J0cyA9IHNoaW0uZXhwb3J0czsKCiAgICAgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGRlZlF1ZXVlLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IG1vZHVsZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgYWxyZWFkeSBmb3VuZCBhbiBhbm9ueW1vdXMgbW9kdWxlIGFuZCBib3VuZCBpdAogICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHRoaXMgbmFtZSwgdGhlbiB0aGlzIGlzIHNvbWUgb3RoZXIgYW5vbiBtb2R1bGUKICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0aW5nIGZvciBpdHMgY29tcGxldGVMb2FkIHRvIGZpcmUuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1swXSA9PT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvL0ZvdW5kIG1hdGNoaW5nIGRlZmluZSBjYWxsIGZvciB0aGlzIHNjcmlwdCEKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShhcmdzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXAgPSB7fTsKCiAgICAgICAgICAgICAgICAvL0RvIHRoaXMgYWZ0ZXIgdGhlIGN5Y2xlIG9mIGNhbGxHZXRNb2R1bGUgaW4gY2FzZSB0aGUgcmVzdWx0CiAgICAgICAgICAgICAgICAvL29mIHRob3NlIGNhbGxzL2luaXQgY2FsbHMgY2hhbmdlcyB0aGUgcmVnaXN0cnkuCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmICghZm91bmQgJiYgIWhhc1Byb3AoZGVmaW5lZCwgbW9kdWxlTmFtZSkgJiYgbW9kICYmICFtb2QuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5lbmZvcmNlRGVmaW5lICYmICghc2hFeHBvcnRzIHx8ICFnZXRHbG9iYWwoc2hFeHBvcnRzKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2R1bGVOYW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub2RlZmluZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdObyBkZWZpbmUgY2FsbCBmb3IgJyArIG1vZHVsZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2R1bGVOYW1lXSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9BIHNjcmlwdCB0aGF0IGRvZXMgbm90IGNhbGwgZGVmaW5lKCksIHNvIGp1c3Qgc2ltdWxhdGUKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgY2FsbCBmb3IgaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoW21vZHVsZU5hbWUsIChzaGltLmRlcHMgfHwgW10pLCBzaGltLmV4cG9ydHNGbl0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENvbnZlcnRzIGEgbW9kdWxlIG5hbWUgdG8gYSBmaWxlIHBhdGguIFN1cHBvcnRzIGNhc2VzIHdoZXJlCiAgICAgICAgICAgICAqIG1vZHVsZU5hbWUgbWF5IGFjdHVhbGx5IGJlIGp1c3QgYW4gVVJMLgogICAgICAgICAgICAgKiBOb3RlIHRoYXQgaXQgKipkb2VzIG5vdCoqIGNhbGwgbm9ybWFsaXplIG9uIHRoZSBtb2R1bGVOYW1lLAogICAgICAgICAgICAgKiBpdCBpcyBhc3N1bWVkIHRvIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuIFRoaXMgaXMgYW4KICAgICAgICAgICAgICogaW50ZXJuYWwgQVBJLCBub3QgYSBwdWJsaWMgb25lLiBVc2UgdG9VcmwgZm9yIHRoZSBwdWJsaWMgQVBJLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgbmFtZVRvVXJsOiBmdW5jdGlvbiAobW9kdWxlTmFtZSwgZXh0LCBza2lwRXh0KSB7CiAgICAgICAgICAgICAgICB2YXIgcGF0aHMsIHN5bXMsIGksIHBhcmVudE1vZHVsZSwgdXJsLAogICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGgsIGJ1bmRsZUlkLAogICAgICAgICAgICAgICAgICAgIHBrZ01haW4gPSBnZXRPd24oY29uZmlnLnBrZ3MsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmIChwa2dNYWluKSB7CiAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSA9IHBrZ01haW47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYnVuZGxlSWQgPSBnZXRPd24oYnVuZGxlc01hcCwgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKGJ1bmRsZUlkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubmFtZVRvVXJsKGJ1bmRsZUlkLCBleHQsIHNraXBFeHQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vSWYgYSBjb2xvbiBpcyBpbiB0aGUgVVJMLCBpdCBpbmRpY2F0ZXMgYSBwcm90b2NvbCBpcyB1c2VkIGFuZCBpdCBpcyBqdXN0CiAgICAgICAgICAgICAgICAvL2FuIFVSTCB0byBhIGZpbGUsIG9yIGlmIGl0IHN0YXJ0cyB3aXRoIGEgc2xhc2gsIGNvbnRhaW5zIGEgcXVlcnkgYXJnIChpLmUuID8pCiAgICAgICAgICAgICAgICAvL29yIGVuZHMgd2l0aCAuanMsIHRoZW4gYXNzdW1lIHRoZSB1c2VyIG1lYW50IHRvIHVzZSBhbiB1cmwgYW5kIG5vdCBhIG1vZHVsZSBpZC4KICAgICAgICAgICAgICAgIC8vVGhlIHNsYXNoIGlzIGltcG9ydGFudCBmb3IgcHJvdG9jb2wtbGVzcyBVUkxzIGFzIHdlbGwgYXMgZnVsbCBwYXRocy4KICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtb2R1bGVOYW1lKSkgewogICAgICAgICAgICAgICAgICAgIC8vSnVzdCBhIHBsYWluIHBhdGgsIG5vdCBtb2R1bGUgbmFtZSBsb29rdXAsIHNvIGp1c3QgcmV0dXJuIGl0LgogICAgICAgICAgICAgICAgICAgIC8vQWRkIGV4dGVuc2lvbiBpZiBpdCBpcyBpbmNsdWRlZC4gVGhpcyBpcyBhIGJpdCB3b25reSwgb25seSBub24tLmpzIHRoaW5ncyBwYXNzCiAgICAgICAgICAgICAgICAgICAgLy9hbiBleHRlbnNpb24sIHRoaXMgbWV0aG9kIHByb2JhYmx5IG5lZWRzIHRvIGJlIHJld29ya2VkLgogICAgICAgICAgICAgICAgICAgIHVybCA9IG1vZHVsZU5hbWUgKyAoZXh0IHx8ICcnKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9BIG1vZHVsZSB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIHBhdGguCiAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBjb25maWcucGF0aHM7CgogICAgICAgICAgICAgICAgICAgIHN5bXMgPSBtb2R1bGVOYW1lLnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICAgICAgLy9Gb3IgZWFjaCBtb2R1bGUgbmFtZSBzZWdtZW50LCBzZWUgaWYgdGhlcmUgaXMgYSBwYXRoCiAgICAgICAgICAgICAgICAgICAgLy9yZWdpc3RlcmVkIGZvciBpdC4gU3RhcnQgd2l0aCBtb3N0IHNwZWNpZmljIG5hbWUKICAgICAgICAgICAgICAgICAgICAvL2FuZCB3b3JrIHVwIGZyb20gaXQuCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gc3ltcy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kdWxlID0gc3ltcy5zbGljZSgwLCBpKS5qb2luKCcvJyk7CgogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoID0gZ2V0T3duKHBhdGhzLCBwYXJlbnRNb2R1bGUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50UGF0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBhbiBhcnJheSwgaXQgbWVhbnMgdGhlcmUgYXJlIGEgZmV3IGNob2ljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Nob29zZSB0aGUgb25lIHRoYXQgaXMgZGVzaXJlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkocGFyZW50UGF0aCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoID0gcGFyZW50UGF0aFswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXMuc3BsaWNlKDAsIGksIHBhcmVudFBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vSm9pbiB0aGUgcGF0aCBwYXJ0cyB0b2dldGhlciwgdGhlbiBmaWd1cmUgb3V0IGlmIGJhc2VVcmwgaXMgbmVlZGVkLgogICAgICAgICAgICAgICAgICAgIHVybCA9IHN5bXMuam9pbignLycpOwogICAgICAgICAgICAgICAgICAgIHVybCArPSAoZXh0IHx8ICgvXmRhdGFcOnxeYmxvYlw6fFw/Ly50ZXN0KHVybCkgfHwgc2tpcEV4dCA/ICcnIDogJy5qcycpKTsKICAgICAgICAgICAgICAgICAgICB1cmwgPSAodXJsLmNoYXJBdCgwKSA9PT0gJy8nIHx8IHVybC5tYXRjaCgvXltcd1wrXC5cLV0rOi8pID8gJycgOiBjb25maWcuYmFzZVVybCkgKyB1cmw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmxBcmdzICYmICEvXmJsb2JcOi8udGVzdCh1cmwpID8KICAgICAgICAgICAgICAgICAgICAgICB1cmwgKyBjb25maWcudXJsQXJncyhtb2R1bGVOYW1lLCB1cmwpIDogdXJsOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLy9EZWxlZ2F0ZXMgdG8gcmVxLmxvYWQuIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0bwogICAgICAgICAgICAvL2FsbG93IG92ZXJyaWRpbmcgaW4gdGhlIG9wdGltaXplci4KICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKGlkLCB1cmwpIHsKICAgICAgICAgICAgICAgIHJlcS5sb2FkKGNvbnRleHQsIGlkLCB1cmwpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEV4ZWN1dGVzIGEgbW9kdWxlIGNhbGxiYWNrIGZ1bmN0aW9uLiBCcm9rZW4gb3V0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24KICAgICAgICAgICAgICogc29sZWx5IHRvIGFsbG93IHRoZSBidWlsZCBzeXN0ZW0gdG8gc2VxdWVuY2UgdGhlIGZpbGVzIGluIHRoZSBidWlsdAogICAgICAgICAgICAgKiBsYXllciBpbiB0aGUgcmlnaHQgc2VxdWVuY2UuCiAgICAgICAgICAgICAqCiAgICAgICAgICAgICAqIEBwcml2YXRlCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBleGVjQ2I6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgYXJncywgZXhwb3J0cykgewogICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KGV4cG9ydHMsIGFyZ3MpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIGNhbGxiYWNrIGZvciBzY3JpcHQgbG9hZHMsIHVzZWQgdG8gY2hlY2sgc3RhdHVzIG9mIGxvYWRpbmcuCiAgICAgICAgICAgICAqCiAgICAgICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dCB0aGUgZXZlbnQgZnJvbSB0aGUgYnJvd3NlciBmb3IgdGhlIHNjcmlwdAogICAgICAgICAgICAgKiB0aGF0IHdhcyBsb2FkZWQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBvblNjcmlwdExvYWQ6IGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QKICAgICAgICAgICAgICAgIC8vYWxsIG9sZCBicm93c2VycyB3aWxsIGJlIHN1cHBvcnRlZCwgYnV0IHRoaXMgb25lIHdhcyBlYXN5IGVub3VnaAogICAgICAgICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KICAgICAgICAgICAgICAgIGlmIChldnQudHlwZSA9PT0gJ2xvYWQnIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkeVJlZ0V4cC50ZXN0KChldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudCkucmVhZHlTdGF0ZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZXNldCBpbnRlcmFjdGl2ZSBzY3JpcHQgc28gYSBzY3JpcHQgbm9kZSBpcyBub3QgaGVsZCBvbnRvIGZvcgogICAgICAgICAgICAgICAgICAgIC8vdG8gbG9uZy4KICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVNjcmlwdCA9IG51bGw7CgogICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvdXQgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBhbmQgdGhlIGNvbnRleHQuCiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRTY3JpcHREYXRhKGV2dCk7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQoZGF0YS5pZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2FsbGJhY2sgZm9yIHNjcmlwdCBlcnJvcnMuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBvblNjcmlwdEVycm9yOiBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKICAgICAgICAgICAgICAgIGlmICghaGFzUGF0aEZhbGxiYWNrKGRhdGEuaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24odmFsdWUsIGtleSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ19AcicpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLmRlcE1hcHMsIGZ1bmN0aW9uKGRlcE1hcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXBNYXAuaWQgPT09IGRhdGEuaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50cy5wdXNoKGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdzY3JpcHRlcnJvcicsICdTY3JpcHQgZXJyb3IgZm9yICInICsgZGF0YS5pZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJlbnRzLmxlbmd0aCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciLCBuZWVkZWQgYnk6ICcgKyBwYXJlbnRzLmpvaW4oJywgJykgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIicpLCBldnQsIFtkYXRhLmlkXSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgY29udGV4dC5yZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZSgpOwogICAgICAgIHJldHVybiBjb250ZXh0OwogICAgfQoKICAgIC8qKgogICAgICogTWFpbiBlbnRyeSBwb2ludC4KICAgICAqCiAgICAgKiBJZiB0aGUgb25seSBhcmd1bWVudCB0byByZXF1aXJlIGlzIGEgc3RyaW5nLCB0aGVuIHRoZSBtb2R1bGUgdGhhdAogICAgICogaXMgcmVwcmVzZW50ZWQgYnkgdGhhdCBzdHJpbmcgaXMgZmV0Y2hlZCBmb3IgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQuCiAgICAgKgogICAgICogSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIGFycmF5LCB0aGVuIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhbiBhcnJheQogICAgICogb2YgZGVwZW5kZW5jeSBzdHJpbmcgbmFtZXMgdG8gZmV0Y2guIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIGNhbGxiYWNrIGNhbgogICAgICogYmUgc3BlY2lmaWVkIHRvIGV4ZWN1dGUgd2hlbiBhbGwgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUuCiAgICAgKgogICAgICogTWFrZSBhIGxvY2FsIHJlcSB2YXJpYWJsZSB0byBoZWxwIENhamEgY29tcGxpYW5jZSAoaXQgYXNzdW1lcyB0aGluZ3MKICAgICAqIG9uIGEgcmVxdWlyZSB0aGF0IGFyZSBub3Qgc3RhbmRhcmRpemVkKSwgYW5kIHRvIGdpdmUgYSBzaG9ydAogICAgICogbmFtZSBmb3IgbWluaWZpY2F0aW9uL2xvY2FsIHNjb3BlIHVzZS4KICAgICAqLwogICAgcmVxID0gcmVxdWlyZWpzID0gZnVuY3Rpb24gKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCBvcHRpb25hbCkgewoKICAgICAgICAvL0ZpbmQgdGhlIHJpZ2h0IGNvbnRleHQsIHVzZSBkZWZhdWx0CiAgICAgICAgdmFyIGNvbnRleHQsIGNvbmZpZywKICAgICAgICAgICAgY29udGV4dE5hbWUgPSBkZWZDb250ZXh0TmFtZTsKCiAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIGhhdmUgY29uZmlnIG9iamVjdCBpbiB0aGUgY2FsbC4KICAgICAgICBpZiAoIWlzQXJyYXkoZGVwcykgJiYgdHlwZW9mIGRlcHMgIT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIC8vIGRlcHMgaXMgYSBjb25maWcgb2JqZWN0CiAgICAgICAgICAgIGNvbmZpZyA9IGRlcHM7CiAgICAgICAgICAgIGlmIChpc0FycmF5KGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFyZ3MgaWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llcwogICAgICAgICAgICAgICAgZGVwcyA9IGNhbGxiYWNrOwogICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBlcnJiYWNrOwogICAgICAgICAgICAgICAgZXJyYmFjayA9IG9wdGlvbmFsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZGVwcyA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHROYW1lID0gY29uZmlnLmNvbnRleHQ7CiAgICAgICAgfQoKICAgICAgICBjb250ZXh0ID0gZ2V0T3duKGNvbnRleHRzLCBjb250ZXh0TmFtZSk7CiAgICAgICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tjb250ZXh0TmFtZV0gPSByZXEucy5uZXdDb250ZXh0KGNvbnRleHROYW1lKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb25maWcpIHsKICAgICAgICAgICAgY29udGV4dC5jb25maWd1cmUoY29uZmlnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBjb250ZXh0LnJlcXVpcmUoZGVwcywgY2FsbGJhY2ssIGVycmJhY2spOwogICAgfTsKCiAgICAvKioKICAgICAqIFN1cHBvcnQgcmVxdWlyZS5jb25maWcoKSB0byBtYWtlIGl0IGVhc2llciB0byBjb29wZXJhdGUgd2l0aCBvdGhlcgogICAgICogQU1EIGxvYWRlcnMgb24gZ2xvYmFsbHkgYWdyZWVkIG5hbWVzLgogICAgICovCiAgICByZXEuY29uZmlnID0gZnVuY3Rpb24gKGNvbmZpZykgewogICAgICAgIHJldHVybiByZXEoY29uZmlnKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIHNvbWV0aGluZyBhZnRlciB0aGUgY3VycmVudCB0aWNrCiAgICAgKiBvZiB0aGUgZXZlbnQgbG9vcC4gT3ZlcnJpZGUgZm9yIG90aGVyIGVudnMKICAgICAqIHRoYXQgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiB0aGFuIHNldFRpbWVvdXQuCiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBsYXRlci4KICAgICAqLwogICAgcmVxLm5leHRUaWNrID0gdHlwZW9mIHNldFRpbWVvdXQgIT09ICd1bmRlZmluZWQnID8gZnVuY3Rpb24gKGZuKSB7CiAgICAgICAgc2V0VGltZW91dChmbiwgNCk7CiAgICB9IDogZnVuY3Rpb24gKGZuKSB7IGZuKCk7IH07CgogICAgLyoqCiAgICAgKiBFeHBvcnQgcmVxdWlyZSBhcyBhIGdsb2JhbCwgYnV0IG9ubHkgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KICAgICAqLwogICAgaWYgKCFyZXF1aXJlKSB7CiAgICAgICAgcmVxdWlyZSA9IHJlcTsKICAgIH0KCiAgICByZXEudmVyc2lvbiA9IHZlcnNpb247CgogICAgLy9Vc2VkIHRvIGZpbHRlciBvdXQgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGFscmVhZHkgcGF0aHMuCiAgICByZXEuanNFeHRSZWdFeHAgPSAvXlwvfDp8XD98XC5qcyQvOwogICAgcmVxLmlzQnJvd3NlciA9IGlzQnJvd3NlcjsKICAgIHMgPSByZXEucyA9IHsKICAgICAgICBjb250ZXh0czogY29udGV4dHMsCiAgICAgICAgbmV3Q29udGV4dDogbmV3Q29udGV4dAogICAgfTsKCiAgICAvL0NyZWF0ZSBkZWZhdWx0IGNvbnRleHQuCiAgICByZXEoe30pOwoKICAgIC8vRXhwb3J0cyBzb21lIGNvbnRleHQtc2Vuc2l0aXZlIG1ldGhvZHMgb24gZ2xvYmFsIHJlcXVpcmUuCiAgICBlYWNoKFsKICAgICAgICAndG9VcmwnLAogICAgICAgICd1bmRlZicsCiAgICAgICAgJ2RlZmluZWQnLAogICAgICAgICdzcGVjaWZpZWQnCiAgICBdLCBmdW5jdGlvbiAocHJvcCkgewogICAgICAgIC8vUmVmZXJlbmNlIGZyb20gY29udGV4dHMgaW5zdGVhZCBvZiBlYXJseSBiaW5kaW5nIHRvIGRlZmF1bHQgY29udGV4dCwKICAgICAgICAvL3NvIHRoYXQgZHVyaW5nIGJ1aWxkcywgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBjb250ZXh0CiAgICAgICAgLy93aXRoIGl0cyBjb25maWcgZ2V0cyB1c2VkLgogICAgICAgIHJlcVtwcm9wXSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGN0eCA9IGNvbnRleHRzW2RlZkNvbnRleHROYW1lXTsKICAgICAgICAgICAgcmV0dXJuIGN0eC5yZXF1aXJlW3Byb3BdLmFwcGx5KGN0eCwgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgfSk7CgogICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgIGhlYWQgPSBzLmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdOwogICAgICAgIC8vSWYgQkFTRSB0YWcgaXMgaW4gcGxheSwgdXNpbmcgYXBwZW5kQ2hpbGQgaXMgYSBwcm9ibGVtIGZvciBJRTYuCiAgICAgICAgLy9XaGVuIHRoYXQgYnJvd3NlciBkaWVzLCB0aGlzIGNhbiBiZSByZW1vdmVkLiBEZXRhaWxzIGluIHRoaXMgalF1ZXJ5IGJ1ZzoKICAgICAgICAvL2h0dHA6Ly9kZXYuanF1ZXJ5LmNvbS90aWNrZXQvMjcwOQogICAgICAgIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jhc2UnKVswXTsKICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKICAgICAgICAgICAgaGVhZCA9IHMuaGVhZCA9IGJhc2VFbGVtZW50LnBhcmVudE5vZGU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQW55IGVycm9ycyB0aGF0IHJlcXVpcmUgZXhwbGljaXRseSBnZW5lcmF0ZXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcwogICAgICogZnVuY3Rpb24uIEludGVyY2VwdC9vdmVycmlkZSBpdCBpZiB5b3Ugd2FudCBjdXN0b20gZXJyb3IgaGFuZGxpbmcuCiAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnIgdGhlIGVycm9yIG9iamVjdC4KICAgICAqLwogICAgcmVxLm9uRXJyb3IgPSBkZWZhdWx0T25FcnJvcjsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgdGhlIG5vZGUgZm9yIHRoZSBsb2FkIGNvbW1hbmQuIE9ubHkgdXNlZCBpbiBicm93c2VyIGVudnMuCiAgICAgKi8KICAgIHJlcS5jcmVhdGVOb2RlID0gZnVuY3Rpb24gKGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKSB7CiAgICAgICAgdmFyIG5vZGUgPSBjb25maWcueGh0bWwgPwogICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2h0bWw6c2NyaXB0JykgOgogICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgbm9kZS50eXBlID0gY29uZmlnLnNjcmlwdFR5cGUgfHwgJ3RleHQvamF2YXNjcmlwdCc7CiAgICAgICAgbm9kZS5jaGFyc2V0ID0gJ3V0Zi04JzsKICAgICAgICBub2RlLmFzeW5jID0gdHJ1ZTsKICAgICAgICByZXR1cm4gbm9kZTsKICAgIH07CgogICAgLyoqCiAgICAgKiBEb2VzIHRoZSByZXF1ZXN0IHRvIGxvYWQgYSBtb2R1bGUgZm9yIHRoZSBicm93c2VyIGNhc2UuCiAgICAgKiBNYWtlIHRoaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhbGxvdyBvdGhlciBlbnZpcm9ubWVudHMKICAgICAqIHRvIG92ZXJyaWRlIGl0LgogICAgICoKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IHRoZSByZXF1aXJlIGNvbnRleHQgdG8gZmluZCBzdGF0ZS4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gdXJsIHRoZSBVUkwgdG8gdGhlIG1vZHVsZS4KICAgICAqLwogICAgcmVxLmxvYWQgPSBmdW5jdGlvbiAoY29udGV4dCwgbW9kdWxlTmFtZSwgdXJsKSB7CiAgICAgICAgdmFyIGNvbmZpZyA9IChjb250ZXh0ICYmIGNvbnRleHQuY29uZmlnKSB8fCB7fSwKICAgICAgICAgICAgbm9kZTsKICAgICAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgICAgIC8vSW4gdGhlIGJyb3dzZXIgc28gdXNlIGEgc2NyaXB0IHRhZwogICAgICAgICAgICBub2RlID0gcmVxLmNyZWF0ZU5vZGUoY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpOwoKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnLCBjb250ZXh0LmNvbnRleHROYW1lKTsKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgLy9TZXQgdXAgbG9hZCBsaXN0ZW5lci4gVGVzdCBhdHRhY2hFdmVudCBmaXJzdCBiZWNhdXNlIElFOSBoYXMKICAgICAgICAgICAgLy9hIHN1YnRsZSBpc3N1ZSBpbiBpdHMgYWRkRXZlbnRMaXN0ZW5lciBhbmQgc2NyaXB0IG9ubG9hZCBmaXJpbmdzCiAgICAgICAgICAgIC8vdGhhdCBkbyBub3QgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIGFsbCBvdGhlciBicm93c2VycyB3aXRoCiAgICAgICAgICAgIC8vYWRkRXZlbnRMaXN0ZW5lciBzdXBwb3J0LCB3aGljaCBmaXJlIHRoZSBvbmxvYWQgZXZlbnQgZm9yIGEKICAgICAgICAgICAgLy9zY3JpcHQgcmlnaHQgYWZ0ZXIgdGhlIHNjcmlwdCBleGVjdXRpb24uIFNlZToKICAgICAgICAgICAgLy9odHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzY0ODA1Ny9zY3JpcHQtb25sb2FkLWV2ZW50LWlzLW5vdC1maXJlZC1pbW1lZGlhdGVseS1hZnRlci1zY3JpcHQtZXhlY3V0aW9uCiAgICAgICAgICAgIC8vVU5GT1JUVU5BVEVMWSBPcGVyYSBpbXBsZW1lbnRzIGF0dGFjaEV2ZW50IGJ1dCBkb2VzIG5vdCBmb2xsb3cgdGhlIHNjcmlwdAogICAgICAgICAgICAvL3NjcmlwdCBleGVjdXRpb24gbW9kZS4KICAgICAgICAgICAgaWYgKG5vZGUuYXR0YWNoRXZlbnQgJiYKICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGlmIG5vZGUuYXR0YWNoRXZlbnQgaXMgYXJ0aWZpY2lhbGx5IGFkZGVkIGJ5IGN1c3RvbSBzY3JpcHQgb3IKICAgICAgICAgICAgICAgICAgICAvL25hdGl2ZWx5IHN1cHBvcnRlZCBieSBicm93c2VyCiAgICAgICAgICAgICAgICAgICAgLy9yZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2lzc3Vlcy8xODcKICAgICAgICAgICAgICAgICAgICAvL2lmIHdlIGNhbiBOT1QgZmluZCBbbmF0aXZlIGNvZGVdIHRoZW4gaXQgbXVzdCBOT1QgbmF0aXZlbHkgc3VwcG9ydGVkLgogICAgICAgICAgICAgICAgICAgIC8vaW4gSUU4LCBub2RlLmF0dGFjaEV2ZW50IGRvZXMgbm90IGhhdmUgdG9TdHJpbmcoKQogICAgICAgICAgICAgICAgICAgIC8vTm90ZSB0aGUgdGVzdCBmb3IgIltuYXRpdmUgY29kZSIgd2l0aCBubyBjbG9zaW5nIGJyYWNlLCBzZWU6CiAgICAgICAgICAgICAgICAgICAgLy9odHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9pc3N1ZXMvMjczCiAgICAgICAgICAgICAgICAgICAgIShub2RlLmF0dGFjaEV2ZW50LnRvU3RyaW5nICYmIG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcoKS5pbmRleE9mKCdbbmF0aXZlIGNvZGUnKSA8IDApICYmCiAgICAgICAgICAgICAgICAgICAgIWlzT3BlcmEpIHsKICAgICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElFIChhdCBsZWFzdCA2LTgpIGRvIG5vdCBmaXJlCiAgICAgICAgICAgICAgICAvL3NjcmlwdCBvbmxvYWQgcmlnaHQgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBzY3JpcHQsIHNvCiAgICAgICAgICAgICAgICAvL3dlIGNhbm5vdCB0aWUgdGhlIGFub255bW91cyBkZWZpbmUgY2FsbCB0byBhIG5hbWUuCiAgICAgICAgICAgICAgICAvL0hvd2V2ZXIsIElFIHJlcG9ydHMgdGhlIHNjcmlwdCBhcyBiZWluZyBpbiAnaW50ZXJhY3RpdmUnCiAgICAgICAgICAgICAgICAvL3JlYWR5U3RhdGUgYXQgdGhlIHRpbWUgb2YgdGhlIGRlZmluZSBjYWxsLgogICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSB0cnVlOwoKICAgICAgICAgICAgICAgIG5vZGUuYXR0YWNoRXZlbnQoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGNvbnRleHQub25TY3JpcHRMb2FkKTsKICAgICAgICAgICAgICAgIC8vSXQgd291bGQgYmUgZ3JlYXQgdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgaGVyZSB0byBjYXRjaAogICAgICAgICAgICAgICAgLy80MDRzIGluIElFOSsuIEhvd2V2ZXIsIG9ucmVhZHlzdGF0ZWNoYW5nZSB3aWxsIGZpcmUgYmVmb3JlCiAgICAgICAgICAgICAgICAvL3RoZSBlcnJvciBoYW5kbGVyLCBzbyB0aGF0IGRvZXMgbm90IGhlbHAuIElmIGFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgICAgIC8vaXMgdXNlZCwgdGhlbiBJRSB3aWxsIGZpcmUgZXJyb3IgYmVmb3JlIGxvYWQsIGJ1dCB3ZSBjYW5ub3QKICAgICAgICAgICAgICAgIC8vdXNlIHRoYXQgcGF0aHdheSBnaXZlbiB0aGUgY29ubmVjdC5taWNyb3NvZnQuY29tIGlzc3VlCiAgICAgICAgICAgICAgICAvL21lbnRpb25lZCBhYm92ZSBhYm91dCBub3QgZG9pbmcgdGhlICdzY3JpcHQgZXhlY3V0ZSwKICAgICAgICAgICAgICAgIC8vdGhlbiBmaXJlIHRoZSBzY3JpcHQgbG9hZCBldmVudCBsaXN0ZW5lciBiZWZvcmUgZXhlY3V0ZQogICAgICAgICAgICAgICAgLy9uZXh0IHNjcmlwdCcgdGhhdCBvdGhlciBicm93c2VycyBkby4KICAgICAgICAgICAgICAgIC8vQmVzdCBob3BlOiBJRTEwIGZpeGVzIHRoZSBpc3N1ZXMsCiAgICAgICAgICAgICAgICAvL2FuZCB0aGVuIGRlc3Ryb3lzIGFsbCBpbnN0YWxscyBvZiBJRSA2LTkuCiAgICAgICAgICAgICAgICAvL25vZGUuYXR0YWNoRXZlbnQoJ29uZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgY29udGV4dC5vblNjcmlwdExvYWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBub2RlLnNyYyA9IHVybDsKCiAgICAgICAgICAgIC8vQ2FsbGluZyBvbk5vZGVDcmVhdGVkIGFmdGVyIGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBub2RlIGhhdmUgYmVlbgogICAgICAgICAgICAvL3NldCwgYnV0IGJlZm9yZSBpdCBpcyBwbGFjZWQgaW4gdGhlIERPTS4KICAgICAgICAgICAgaWYgKGNvbmZpZy5vbk5vZGVDcmVhdGVkKSB7CiAgICAgICAgICAgICAgICBjb25maWcub25Ob2RlQ3JlYXRlZChub2RlLCBjb25maWcsIG1vZHVsZU5hbWUsIHVybCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vRm9yIHNvbWUgY2FjaGUgY2FzZXMgaW4gSUUgNi04LCB0aGUgc2NyaXB0IGV4ZWN1dGVzIGJlZm9yZSB0aGUgZW5kCiAgICAgICAgICAgIC8vb2YgdGhlIGFwcGVuZENoaWxkIGV4ZWN1dGlvbiwgc28gdG8gdGllIGFuIGFub255bW91cyBkZWZpbmUKICAgICAgICAgICAgLy9jYWxsIHRvIHRoZSBtb2R1bGUgbmFtZSAod2hpY2ggaXMgc3RvcmVkIG9uIHRoZSBub2RlKSwgaG9sZCBvbgogICAgICAgICAgICAvL3RvIGEgcmVmZXJlbmNlIHRvIHRoaXMgbm9kZSwgYnV0IGNsZWFyIGFmdGVyIHRoZSBET00gaW5zZXJ0aW9uLgogICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBub2RlOwogICAgICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKG5vZGUsIGJhc2VFbGVtZW50KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3VycmVudGx5QWRkaW5nU2NyaXB0ID0gbnVsbDsKCiAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0gZWxzZSBpZiAoaXNXZWJXb3JrZXIpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vSW4gYSB3ZWIgd29ya2VyLCB1c2UgaW1wb3J0U2NyaXB0cy4gVGhpcyBpcyBub3QgYSB2ZXJ5CiAgICAgICAgICAgICAgICAvL2VmZmljaWVudCB1c2Ugb2YgaW1wb3J0U2NyaXB0cywgaW1wb3J0U2NyaXB0cyB3aWxsIGJsb2NrIHVudGlsCiAgICAgICAgICAgICAgICAvL2l0cyBzY3JpcHQgaXMgZG93bmxvYWRlZCBhbmQgZXZhbHVhdGVkLiBIb3dldmVyLCBpZiB3ZWIgd29ya2VycwogICAgICAgICAgICAgICAgLy9hcmUgaW4gcGxheSwgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgYSBidWlsZCBoYXMgYmVlbiBkb25lIHNvCiAgICAgICAgICAgICAgICAvL3RoYXQgb25seSBvbmUgc2NyaXB0IG5lZWRzIHRvIGJlIGxvYWRlZCBhbnl3YXkuIFRoaXMgbWF5IG5lZWQKICAgICAgICAgICAgICAgIC8vdG8gYmUgcmVldmFsdWF0ZWQgaWYgb3RoZXIgdXNlIGNhc2VzIGJlY29tZSBjb21tb24uCgogICAgICAgICAgICAgICAgLy8gUG9zdCBhIHRhc2sgdG8gdGhlIGV2ZW50IGxvb3AgdG8gd29yayBhcm91bmQgYSBidWcgaW4gV2ViS2l0CiAgICAgICAgICAgICAgICAvLyB3aGVyZSB0aGUgd29ya2VyIGdldHMgZ2FyYmFnZS1jb2xsZWN0ZWQgYWZ0ZXIgY2FsbGluZwogICAgICAgICAgICAgICAgLy8gaW1wb3J0U2NyaXB0cygpOiBodHRwczovL3dlYmtpdC5vcmcvYi8xNTMzMTcKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7fSwgMCk7CiAgICAgICAgICAgICAgICBpbXBvcnRTY3JpcHRzKHVybCk7CgogICAgICAgICAgICAgICAgLy9BY2NvdW50IGZvciBhbm9ueW1vdXMgbW9kdWxlcwogICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihtYWtlRXJyb3IoJ2ltcG9ydHNjcmlwdHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnRTY3JpcHRzIGZhaWxlZCBmb3IgJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWUgKyAnIGF0ICcgKyB1cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gZ2V0SW50ZXJhY3RpdmVTY3JpcHQoKSB7CiAgICAgICAgaWYgKGludGVyYWN0aXZlU2NyaXB0ICYmIGludGVyYWN0aXZlU2NyaXB0LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHsKICAgICAgICAgICAgcmV0dXJuIGludGVyYWN0aXZlU2NyaXB0OwogICAgICAgIH0KCiAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7CiAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykgewogICAgICAgICAgICAgICAgcmV0dXJuIChpbnRlcmFjdGl2ZVNjcmlwdCA9IHNjcmlwdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7CiAgICB9CgogICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBzY3JpcHQgYXR0cmlidXRlLCB3aGljaCBjb3VsZCBhbHNvIGFkanVzdCB0aGUgYmFzZVVybC4KICAgIGlmIChpc0Jyb3dzZXIgJiYgIWNmZy5za2lwRGF0YU1haW4pIHsKICAgICAgICAvL0ZpZ3VyZSBvdXQgYmFzZVVybC4gR2V0IGl0IGZyb20gdGhlIHNjcmlwdCB0YWcgd2l0aCByZXF1aXJlLmpzIGluIGl0LgogICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkgewogICAgICAgICAgICAvL1NldCB0aGUgJ2hlYWQnIHdoZXJlIHdlIGNhbiBhcHBlbmQgY2hpbGRyZW4gYnkKICAgICAgICAgICAgLy91c2luZyB0aGUgc2NyaXB0J3MgcGFyZW50LgogICAgICAgICAgICBpZiAoIWhlYWQpIHsKICAgICAgICAgICAgICAgIGhlYWQgPSBzY3JpcHQucGFyZW50Tm9kZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBhdHRyaWJ1dGUgdG8gc2V0IG1haW4gc2NyaXB0IGZvciB0aGUgcGFnZQogICAgICAgICAgICAvL3RvIGxvYWQuIElmIGl0IGlzIHRoZXJlLCB0aGUgcGF0aCB0byBkYXRhIG1haW4gYmVjb21lcyB0aGUKICAgICAgICAgICAgLy9iYXNlVXJsLCBpZiBpdCBpcyBub3QgYWxyZWFkeSBzZXQuCiAgICAgICAgICAgIGRhdGFNYWluID0gc2NyaXB0LmdldEF0dHJpYnV0ZSgnZGF0YS1tYWluJyk7CiAgICAgICAgICAgIGlmIChkYXRhTWFpbikgewogICAgICAgICAgICAgICAgLy9QcmVzZXJ2ZSBkYXRhTWFpbiBpbiBjYXNlIGl0IGlzIGEgcGF0aCAoaS5lLiBjb250YWlucyAnPycpCiAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gZGF0YU1haW47CgogICAgICAgICAgICAgICAgLy9TZXQgZmluYWwgYmFzZVVybCBpZiB0aGVyZSBpcyBub3QgYWxyZWFkeSBhbiBleHBsaWNpdCBvbmUsCiAgICAgICAgICAgICAgICAvL2J1dCBvbmx5IGRvIHNvIGlmIHRoZSBkYXRhLW1haW4gdmFsdWUgaXMgbm90IGEgbG9hZGVyIHBsdWdpbgogICAgICAgICAgICAgICAgLy9tb2R1bGUgSUQuCiAgICAgICAgICAgICAgICBpZiAoIWNmZy5iYXNlVXJsICYmIG1haW5TY3JpcHQuaW5kZXhPZignIScpID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvZmYgdGhlIGRpcmVjdG9yeSBvZiBkYXRhLW1haW4gZm9yIHVzZSBhcyB0aGUKICAgICAgICAgICAgICAgICAgICAvL2Jhc2VVcmwuCiAgICAgICAgICAgICAgICAgICAgc3JjID0gbWFpblNjcmlwdC5zcGxpdCgnLycpOwogICAgICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBzcmMucG9wKCk7CiAgICAgICAgICAgICAgICAgICAgc3ViUGF0aCA9IHNyYy5sZW5ndGggPyBzcmMuam9pbignLycpICArICcvJyA6ICcuLyc7CgogICAgICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsID0gc3ViUGF0aDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1N0cmlwIG9mZiBhbnkgdHJhaWxpbmcgLmpzIHNpbmNlIG1haW5TY3JpcHQgaXMgbm93CiAgICAgICAgICAgICAgICAvL2xpa2UgYSBtb2R1bGUgbmFtZS4KICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBtYWluU2NyaXB0LnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKCiAgICAgICAgICAgICAgICAvL0lmIG1haW5TY3JpcHQgaXMgc3RpbGwgYSBwYXRoLCBmYWxsIGJhY2sgdG8gZGF0YU1haW4KICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtYWluU2NyaXB0KSkgewogICAgICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBkYXRhTWFpbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1B1dCB0aGUgZGF0YS1tYWluIHNjcmlwdCBpbiB0aGUgZmlsZXMgdG8gbG9hZC4KICAgICAgICAgICAgICAgIGNmZy5kZXBzID0gY2ZnLmRlcHMgPyBjZmcuZGVwcy5jb25jYXQobWFpblNjcmlwdCkgOiBbbWFpblNjcmlwdF07CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgZGVmaW5pdGlvbnMgb2YgbW9kdWxlcy4gRGlmZmVycyBmcm9tCiAgICAgKiByZXF1aXJlKCkgaW4gdGhhdCBhIHN0cmluZyBmb3IgdGhlIG1vZHVsZSBzaG91bGQgYmUgdGhlIGZpcnN0IGFyZ3VtZW50LAogICAgICogYW5kIHRoZSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkIHNob3VsZAogICAgICogcmV0dXJuIGEgdmFsdWUgdG8gZGVmaW5lIHRoZSBtb2R1bGUgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgYXJndW1lbnQncwogICAgICogbmFtZS4KICAgICAqLwogICAgZGVmaW5lID0gZnVuY3Rpb24gKG5hbWUsIGRlcHMsIGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIG5vZGUsIGNvbnRleHQ7CgogICAgICAgIC8vQWxsb3cgZm9yIGFub255bW91cyBtb2R1bGVzCiAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgewogICAgICAgICAgICAvL0FkanVzdCBhcmdzIGFwcHJvcHJpYXRlbHkKICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOwogICAgICAgICAgICBkZXBzID0gbmFtZTsKICAgICAgICAgICAgbmFtZSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAvL1RoaXMgbW9kdWxlIG1heSBub3QgaGF2ZSBkZXBlbmRlbmNpZXMKICAgICAgICBpZiAoIWlzQXJyYXkoZGVwcykpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOwogICAgICAgICAgICBkZXBzID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vSWYgbm8gbmFtZSwgYW5kIGNhbGxiYWNrIGlzIGEgZnVuY3Rpb24sIHRoZW4gZmlndXJlIG91dCBpZiBpdCBhCiAgICAgICAgLy9Db21tb25KUyB0aGluZyB3aXRoIGRlcGVuZGVuY2llcy4KICAgICAgICBpZiAoIWRlcHMgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKICAgICAgICAgICAgZGVwcyA9IFtdOwogICAgICAgICAgICAvL1JlbW92ZSBjb21tZW50cyBmcm9tIHRoZSBjYWxsYmFjayBzdHJpbmcsCiAgICAgICAgICAgIC8vbG9vayBmb3IgcmVxdWlyZSBjYWxscywgYW5kIHB1bGwgdGhlbSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMsCiAgICAgICAgICAgIC8vYnV0IG9ubHkgaWYgdGhlcmUgYXJlIGZ1bmN0aW9uIGFyZ3MuCiAgICAgICAgICAgIGlmIChjYWxsYmFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjb21tZW50UmVnRXhwLCBjb21tZW50UmVwbGFjZSkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjanNSZXF1aXJlUmVnRXhwLCBmdW5jdGlvbiAobWF0Y2gsIGRlcCkgewogICAgICAgICAgICAgICAgICAgICAgICBkZXBzLnB1c2goZGVwKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL01heSBiZSBhIENvbW1vbkpTIHRoaW5nIGV2ZW4gd2l0aG91dCByZXF1aXJlIGNhbGxzLCBidXQgc3RpbGwKICAgICAgICAgICAgICAgIC8vY291bGQgdXNlIGV4cG9ydHMsIGFuZCBtb2R1bGUuIEF2b2lkIGRvaW5nIGV4cG9ydHMgYW5kIG1vZHVsZQogICAgICAgICAgICAgICAgLy93b3JrIHRob3VnaCBpZiBpdCBqdXN0IG5lZWRzIHJlcXVpcmUuCiAgICAgICAgICAgICAgICAvL1JFUVVJUkVTIHRoZSBmdW5jdGlvbiB0byBleHBlY3QgdGhlIENvbW1vbkpTIHZhcmlhYmxlcyBpbiB0aGUKICAgICAgICAgICAgICAgIC8vb3JkZXIgbGlzdGVkIGJlbG93LgogICAgICAgICAgICAgICAgZGVwcyA9IChjYWxsYmFjay5sZW5ndGggPT09IDEgPyBbJ3JlcXVpcmUnXSA6IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZSddKS5jb25jYXQoZGVwcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vSWYgaW4gSUUgNi04IGFuZCBoaXQgYW4gYW5vbnltb3VzIGRlZmluZSgpIGNhbGwsIGRvIHRoZSBpbnRlcmFjdGl2ZQogICAgICAgIC8vd29yay4KICAgICAgICBpZiAodXNlSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgbm9kZSA9IGN1cnJlbnRseUFkZGluZ1NjcmlwdCB8fCBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpOwogICAgICAgICAgICBpZiAobm9kZSkgewogICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9BbHdheXMgc2F2ZSBvZmYgZXZhbHVhdGluZyB0aGUgZGVmIGNhbGwgdW50aWwgdGhlIHNjcmlwdCBvbmxvYWQgaGFuZGxlci4KICAgICAgICAvL1RoaXMgYWxsb3dzIG11bHRpcGxlIG1vZHVsZXMgdG8gYmUgaW4gYSBmaWxlIHdpdGhvdXQgcHJlbWF0dXJlbHkKICAgICAgICAvL3RyYWNpbmcgZGVwZW5kZW5jaWVzLCBhbmQgYWxsb3dzIGZvciBhbm9ueW1vdXMgbW9kdWxlIHN1cHBvcnQsCiAgICAgICAgLy93aGVyZSB0aGUgbW9kdWxlIG5hbWUgaXMgbm90IGtub3duIHVudGlsIHRoZSBzY3JpcHQgb25sb2FkIGV2ZW50CiAgICAgICAgLy9vY2N1cnMuIElmIG5vIGNvbnRleHQsIHVzZSB0aGUgZ2xvYmFsIHF1ZXVlLCBhbmQgZ2V0IGl0IHByb2Nlc3NlZAogICAgICAgIC8vaW4gdGhlIG9uc2NyaXB0IGxvYWQgY2FsbGJhY2suCiAgICAgICAgaWYgKGNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxsYmFja10pOwogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwW25hbWVdID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBnbG9iYWxEZWZRdWV1ZS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxsYmFja10pOwogICAgICAgIH0KICAgIH07CgogICAgZGVmaW5lLmFtZCA9IHsKICAgICAgICBqUXVlcnk6IHRydWUKICAgIH07CgogICAgLyoqCiAgICAgKiBFeGVjdXRlcyB0aGUgdGV4dC4gTm9ybWFsbHkganVzdCB1c2VzIGV2YWwsIGJ1dCBjYW4gYmUgbW9kaWZpZWQKICAgICAqIHRvIHVzZSBhIGJldHRlciwgZW52aXJvbm1lbnQtc3BlY2lmaWMgY2FsbC4gT25seSB1c2VkIGZvciB0cmFuc3BpbGluZwogICAgICogbG9hZGVyIHBsdWdpbnMsIG5vdCBmb3IgcGxhaW4gSlMgbW9kdWxlcy4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRoZSB0ZXh0IHRvIGV4ZWN1dGUvZXZhbHVhdGUuCiAgICAgKi8KICAgIHJlcS5leGVjID0gZnVuY3Rpb24gKHRleHQpIHsKICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCiAgICAgICAgcmV0dXJuIGV2YWwodGV4dCk7CiAgICB9OwoKICAgIC8vU2V0IHVwIHdpdGggY29uZmlnIGluZm8uCiAgICByZXEoY2ZnKTsKfSh0aGlzLCAodHlwZW9mIHNldFRpbWVvdXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogc2V0VGltZW91dCkpKTsKCg==", "headers": [ [ "content-type", "text/javascript; charset=utf-8" ] ], "ok": true, "status": 200, "status_text": "" }, "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22coco/bbox_mAP_75%22%7D%5D": { "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogImNvY28vYmJveF9tQVBfNzUiLCAicnVuVG9TZXJpZXMiOiB7InJ0bWRldF90aW55XzF4YjQtMjBlX2JhbGxvb24vMjAyMzA0MTdfMTAyODM1L3Zpc19kYXRhIjogW3sid2FsbFRpbWUiOiAxNjgxNzI3MzM1LjQ0MjQ4NjMsICJzdGVwIjogMSwgInZhbHVlIjogMC4wNTA5OTk5OTkwNDYzMjU2ODR9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM0NS42MzkxMzkyLCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuMTQ2OTk5OTk5ODgwNzkwN30sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzUyLjk2ODg0NywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjM1NjAwMDAwNjE5ODg4MzA2fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczNjIuNDkxNDgxOCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjQ0OTAwMDAwMDk1MzY3NDN9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM3MS42NTA2NjE3LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNDc2MDAwMDEwOTY3MjU0NjR9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM4MS40MjcxMjQ1LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNDkyMDAwMDEzNTg5ODU5fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczODkuNTM3NTgyNCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjU1ODAwMDAyODEzMzM5MjN9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM5Ny42ODUxMiwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjYyMDAwMDAwNDc2ODM3MTZ9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQwNy4wMzMzNDkzLCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNjg5MDAwMDEwNDkwNDE3NX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDE2LjAzOTQ5MzYsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNjk4MDAwMDEzODI4Mjc3Nn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDI1LjY1NTM4MzMsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNzA4OTk5OTkxNDE2OTMxMn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDMzLjAwNDM3MjEsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNjk1OTk5OTc5OTcyODM5NH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDQyLjA0OTg1ODYsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNzE3OTk5OTk0NzU0NzkxM30sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDQ3LjkzNDg2MjksICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNzA4MDAwMDA0MjkxNTM0NH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDU3Ljk3NTQzNDMsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNzAwOTk5OTc1MjA0NDY3OH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDYzLjgyNjA1NDgsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNzQwOTk5OTk2NjYyMTM5OX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDczLjQ2ODgzNjgsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNzM2MDAwMDAxNDMwNTExNX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDgwLjc5MDA2NjcsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNzIwMDAwMDI4NjEwMjI5NX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDg4LjkyNDA1OTQsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNzEzOTk5OTg2NjQ4NTU5Nn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDk0LjU2OTU2ODQsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNzV9XX19XQ==", "ok": true, "headers": [ [ "content-type", "application/json" ] ], "status": 200, "status_text": "" }, "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22coco/bbox_mAP_l%22%7D%5D": { "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogImNvY28vYmJveF9tQVBfbCIsICJydW5Ub1NlcmllcyI6IHsicnRtZGV0X3RpbnlfMXhiNC0yMGVfYmFsbG9vbi8yMDIzMDQxN18xMDI4MzUvdmlzX2RhdGEiOiBbeyJ3YWxsVGltZSI6IDE2ODE3MjczMzUuNDQyNTc2NiwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjA1NDAwMDAwMTQwMDcwOTE1fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczNDUuNjM5MTk1MiwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjE2NDAwMDAwNDUyOTk1M30sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzUyLjk2ODkwMzgsICJzdGVwIjogMywgInZhbHVlIjogMC40MDkwMDAwMDkyOTgzMjQ2fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczNjIuNDkxNTcxLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNTI0OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzcxLjY1MDc2MzMsICJzdGVwIjogNSwgInZhbHVlIjogMC41NTU5OTk5OTQyNzc5NTQxfSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczODEuNDI3MTg0NiwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjU4Mzk5OTk5MTQxNjkzMTJ9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM4OS41Mzc2ODA0LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNjEyOTk5OTc1NjgxMzA0OX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3Mzk3LjY4NTIxMzgsICJzdGVwIjogOCwgInZhbHVlIjogMC42NjYwMDAwMDg1ODMwNjg4fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0MDcuMDMzNDQ5LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNzUwOTk5OTg3MTI1Mzk2N30sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDE2LjAzOTU3NjMsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNzYwOTk5OTc3NTg4NjUzNn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDI1LjY1NTQzOTYsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNzc3OTk5OTk3MTM4OTc3fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0MzMuMDA0NDI5LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjc1fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0NDIuMDQ5OTE4MiwgInN0ZXAiOiAxMywgInZhbHVlIjogMC43NzEwMDAwMjc2NTY1NTUyfSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0NDcuOTM0OTE4OSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC43ODIwMDAwMDUyNDUyMDg3fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0NTcuOTc1NDg5NiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC43ODc5OTk5ODc2MDIyMzM5fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0NjMuODI2MTEwNCwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC44MDAwMDAwMTE5MjA5Mjl9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ3My40Njg4OTIzLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjgxMDk5OTk4OTUwOTU4MjV9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ4MC43OTAxMjMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuODAxOTk5OTg2MTcxNzIyNH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDg4LjkyNDEyLCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjc4NjAwMDAxMzM1MTQ0MDR9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ5NC41Njk2Mjc4LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjc4NTAwMDAyNjIyNjA0Mzd9XX19XQ==", "ok": true, "headers": [ [ "content-type", "application/json" ] ], "status": 200, "status_text": "" }, "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22coco/bbox_mAP_m%22%7D%5D": { "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogImNvY28vYmJveF9tQVBfbSIsICJydW5Ub1NlcmllcyI6IHsicnRtZGV0X3RpbnlfMXhiNC0yMGVfYmFsbG9vbi8yMDIzMDQxN18xMDI4MzUvdmlzX2RhdGEiOiBbeyJ3YWxsVGltZSI6IDE2ODE3MjczMzUuNDQyNTQ5MiwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjA3NTk5OTk5NzU1NjIwOTU2fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczNDUuNjM5MTc3NiwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjA4MTAwMDAwMDIzODQxODU4fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczNTIuOTY4ODg2LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuMDk3OTk5OTk3NDM3MDAwMjd9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM2Mi40OTE1NDA3LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuMTE1OTk5OTk2NjYyMTM5ODl9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM3MS42NTA3MzA4LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuMTA5OTk5OTk5NDAzOTUzNTV9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM4MS40MjcxNjYsICJzdGVwIjogNiwgInZhbHVlIjogMC4xNzI5OTk5OTI5NjY2NTE5Mn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3Mzg5LjUzNzY0MjcsICJzdGVwIjogNywgInZhbHVlIjogMC4xODYwMDAwMDQ0MTA3NDM3fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczOTcuNjg1MTg3LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuMjMxMDAwMDA2MTk4ODgzMDZ9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQwNy4wMzM0MTY1LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuMjI2OTk5OTk4MDkyNjUxMzd9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQxNi4wMzk1NTUsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuMjczMDAwMDAxOTA3MzQ4NjN9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQyNS42NTU0MjE3LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjIzMTAwMDAwNjE5ODg4MzA2fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0MzMuMDA0NDExNSwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC4yMTc5OTk5OTQ3NTQ3OTEyNn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDQyLjA0OTg5OTgsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuMjQxOTk5OTk4Njg4Njk3ODF9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ0Ny45MzQ5MDE1LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjIxOTk5OTk5ODgwNzkwNzF9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ1Ny45NzU0NzI1LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjIzMTk5OTk5MzMyNDI3OTc5fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0NjMuODI2MDkyNSwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4yNjM5OTk5OTg1Njk0ODg1fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0NzMuNDY4ODc1LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjI2MTk5OTk5NDUxNjM3Mjd9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ4MC43OTAxMDUzLCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjI0MzAwMDAwMDcxNTI1NTc0fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0ODguOTI0MTAxNCwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC4yNzc5OTk5OTcxMzg5NzcwNX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDk0LjU2OTYwOTksICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMjQwOTk5OTk2NjYyMTM5OX1dfX1d", "ok": true, "headers": [ [ "content-type", "application/json" ] ], "status": 200, "status_text": "" } } }, "id": "_wpQGXu9aONh", "outputId": "1093cdcd-5b8a-44b4-f3b0-cbc73083ba78" }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "" ], "application/javascript": [ "\n", " (async () => {\n", " const url = new URL(await google.colab.kernel.proxyPort(6006, {'cache': true}));\n", " url.searchParams.set('tensorboardColab', 'true');\n", " const iframe = document.createElement('iframe');\n", " iframe.src = url;\n", " iframe.setAttribute('width', '100%');\n", " iframe.setAttribute('height', '800');\n", " iframe.setAttribute('frameborder', 0);\n", " document.body.appendChild(iframe);\n", " })();\n", " " ] }, "metadata": {} } ], "source": [ "# load tensorboard in colab\n", "%load_ext tensorboard\n", "\n", "# see curves in tensorboard\n", "%tensorboard --logdir ./work_dirs" ] }, { "cell_type": "markdown", "metadata": { "id": "MfQ-yspZLuuI" }, "source": [ "From the tensorboard, we can observe that changes of loss and learning rate. We can see the losses of each branch gradually decrease as the training goes by.\n", "\n", "## Test the Trained Detector\n", "\n", "After finetuning the detector, let's visualize the prediction results!" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 71, "referenced_widgets": [ "01b8530a4c8c48ee9ce8f7ff552a293f", "4bb4e998336e4889afec5712698e98a8" ] }, "id": "CHDYQSRNNDxt", "outputId": "10dfc047-8adf-4e30-a737-230c23602a1b" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Loads checkpoint by local backend from path: ./work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_17.pth\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "Output()" ], "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, "model_id": "01b8530a4c8c48ee9ce8f7ff552a293f" } }, "metadata": {} }, { "output_type": "display_data", "data": { "text/plain": [], "text/html": [ "
\n"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "\n"
            ],
            "text/html": [
              "
\n",
              "
\n" ] }, "metadata": {} } ], "source": [ "from mmdet.apis import DetInferencer\n", "import glob\n", "\n", "# Choose to use a config\n", "config = 'configs/rtmdet/rtmdet_tiny_1xb4-20e_balloon.py'\n", "# Setup a checkpoint file to load\n", "checkpoint = glob.glob('./work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco*.pth')[0]\n", "\n", "# Set the device to be used for evaluation\n", "device = 'cuda:0'\n", "\n", "# Initialize the DetInferencer\n", "inferencer = DetInferencer(config, checkpoint, device)\n", "\n", "# Use the detector to do inference\n", "img = './data/balloon/val/4838031651_3e7b5ea5c7_b.jpg'\n", "result = inferencer(img, out_dir='./output')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 618 }, "id": "zDzwbUsfN4lR", "outputId": "26cbef68-3f0e-4958-af2c-48b837f61ae7" }, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ], "image/png": "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6bNN9HNR9bPC2C+w5XiBW/pc9P/ss8826dO6PsBnN2xeYCL/0i0cABBkQAADB9fCxU688Pdmnrs1wZmC93zvXyh+zJv1cyrqXKKgqqrQQ/DWhTqyUgJCORoFeIoiGSTIAwnRA3tCj14AotARcIJKIwCAA7boujKOhBCgiLklVxIXxAWwwzkqmhgYPAYJYgldrWNrB557Aj27UokylrPGOhQhSWBEYCnPABVOxx8DS/xZ+HImCxILwJpnDECsebyymMcBL0QcGLbEJEAAIqEQPL9ITOADappByjmu5HORUwNzcDwDI0gZeqkgQaBnXzs3daZgqABaAI9wAVELpVETYktcOVN7awCU5Ag5AtAIc3NMlCQgA+wpXZJ1nr11AFIAwMJfg/lZH+kXE9Gzc8kznTbvmFkEag4zsCAPzjklRAD7mqYVQjBAaEtogXGiQYIjS+SlShCxbas8S4pp8847P3zztVfu3fno5q2PHbcHo6POx/rg6PDy5cudtH308FNX23g5O3zwqLm/+ehn93qf3KvIHcesM8WekcEBAwJZpxRGiUZTS/KsACUIIgWCyAMlKktclF564aXv/YO/b+L80eGREVG3N9g/eCJY9jsDb30wEPNkoyhy1gqU4AlCeuO9klIgWH9awJh31QGAwf+leBtEnDfVaKEDCyJ45VrrlQqsJgYCMS8EkhIohDh1oecFGvh05M9erLMLCy0+QkRSC2b6XO3g7Dd87s8FFfEveZuOIuccLRT3womHAvDZ810E9nNgxi/+1i+eAi9al+zmeFlH3lqrNUhEzyxAhjTSe6+TmIhYoG3daDwdT2ZNY46ORl/+8lc2npzf2d2cjIu6Lre3d3vd4be//cVPPr4eYAzONz/80Q/ee/ejfr/P0HS6q2Vpj44n+/uzjY2r3/vu3zLfckUxta567+c/eu65K0+2n159/oXJpLQZnjt34donNz+9u7mysrq6sjGbTTvdxDl3dHTy5a+88cYbr7/99ttHmRudTLxnLxgUTSaTzc3NqqqWl5fruj44ONBaplnqvZVSrq+vtzUsL/WyVEupr924PpkWT55uXb/+SRTLDz76+euvv/7tb333ww8/vnfvHlO0vnbxwvolT7acVm+8/oX79+58+NH7ly5v/Oit73vPl69cePmlL/S7g6pqy3I6nZU/e+enf/b9P/n7/+B3tc6apmGe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\n" }, "metadata": {}, "execution_count": 14 } ], "source": [ "# Show the output image\n", "Image.open('./output/vis/4838031651_3e7b5ea5c7_b.jpg')" ] }, { "cell_type": "markdown", "metadata": { "id": "F1L8o3rtc37M" }, "source": [ "## What to Do Next?\n", "\n", "So far, we have learnt how to test and train a one-stage detector using MMDetection. To further explore MMDetection, you could do several other things as shown below:\n", "\n", "- Try YOLO series object detection using [MMYOLO](https://github.com/open-mmlab/mmyolo), also one of the OpenMMLab projects. In MMYOLO, not only can you try all the methods supported in MMDetection but also some YOLO series detectors.\n", "- Try rotated object detection using [MMRotate](https://github.com/open-mmlab/mmrotate), also one of the OpenMMLab projects. In MMRotate, not only can you try all the methods supported in MMDetection but also some rotated object detectors.\n", "- Try 3D object detection using [MMDetection3D](https://github.com/open-mmlab/mmdetection3d), also one of the OpenMMLab projects. In MMDetection3D, not only can you try all the methods supported in MMDetection but also some 3D object detectors.\n" ] } ], "metadata": { "accelerator": "GPU", "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.13" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "b1188048a1f04c2fa77c0d3829da39bd": { "model_module": "@jupyter-widgets/output", "model_name": "OutputModel", "model_module_version": "1.0.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_534561e3c4804bae96a30d44493d701d", "msg_id": "", "outputs": [ { "output_type": "display_data", "data": { "text/plain": "Inference \u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m \u001b[36m \u001b[0m\n", "text/html": "
Inference ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   \n
\n" }, "metadata": {} } ] } }, "534561e3c4804bae96a30d44493d701d": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "01b8530a4c8c48ee9ce8f7ff552a293f": { "model_module": "@jupyter-widgets/output", "model_name": "OutputModel", "model_module_version": "1.0.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/output", "_model_module_version": "1.0.0", "_model_name": "OutputModel", "_view_count": null, "_view_module": "@jupyter-widgets/output", "_view_module_version": "1.0.0", "_view_name": "OutputView", "layout": "IPY_MODEL_4bb4e998336e4889afec5712698e98a8", "msg_id": "", "outputs": [ { "output_type": "display_data", "data": { "text/plain": "Inference \u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;58;58;58m━\u001b[0m\u001b[38;2;62;57;59m━\u001b[0m\u001b[38;2;76;56;63m━\u001b[0m\u001b[38;2;97;53;69m━\u001b[0m\u001b[38;2;123;51;77m━\u001b[0m\u001b[38;2;153;48;86m━\u001b[0m\u001b[38;2;183;44;94m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;249;38;114m━\u001b[0m\u001b[38;2;244;38;112m━\u001b[0m\u001b[38;2;230;39;108m━\u001b[0m\u001b[38;2;209;42;102m━\u001b[0m \u001b[36m \u001b[0m\n", "text/html": "
Inference ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   \n
\n" }, "metadata": {} } ] } }, "4bb4e998336e4889afec5712698e98a8": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } } } } }, "nbformat": 4, "nbformat_minor": 0 }